{"id":18112,"artifact_id":17154,"version":1,"data":{"version":1,"artifact":{"chain":"tezos","title":"Nodevember 2021-10","artist":"tz1djshvCnhi5p5wAebiBb2XQLcvVKBqyH7F","tokenId":"527836","description":"An interactive 3D artwork, created by @neoyume - neoyume.com","contractAddress":"KT1RJ6PbjHpwc3M5rw5s2Nbmefwbuwbdxton"},"snapshot":{"net":[{"data":{"url":"https://ipfs.arkivo.art/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put?creator=tz1djshvCnhi5p5wAebiBb2XQLcvVKBqyH7F&viewer=&objkt=527836","host":"ipfs.arkivo.art","path":"/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put","type":"http","query":"?creator=tz1djshvCnhi5p5wAebiBb2XQLcvVKBqyH7F&viewer=&objkt=527836","method":"GET","headers":{"sec-ch-ua":"\"HeadlessChrome\";v=\"119\", \"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"","user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/119.0.6045.9 Safari/537.36","sec-ch-ua-mobile":"?0","sec-ch-ua-platform":"\"Linux\"","upgrade-insecure-requests":"1"},"fragment":"","postData":null,"protocol":"https:"},"type":1,"external":false,"timestamp":1723910836523},{"data":{"url":"https://ipfs.arkivo.art/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put?creator=tz1djshvCnhi5p5wAebiBb2XQLcvVKBqyH7F&viewer=&objkt=527836","body":"","status":301,"headers":{"date":"Sat, 17 Aug 2024 16:07:16 GMT","server":"nginx/1.27.0","location":"/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put/?creator=tz1djshvCnhi5p5wAebiBb2XQLcvVKBqyH7F&viewer=&objkt=527836","connection":"keep-alive","x-ipfs-path":"/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put","content-type":"text/html; charset=utf-8","x-ipfs-roots":"QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put","content-length":"162","access-control-allow-origin":"*","access-control-allow-headers":"Content-Type\nRange\nUser-Agent\nX-Requested-With","access-control-allow-methods":"GET\nHEAD\nOPTIONS","access-control-expose-headers":"Content-Length\nContent-Range\nX-Chunked-Output\nX-Ipfs-Path\nX-Ipfs-Roots\nX-Stream-Output"}},"type":2,"external":false,"timestamp":1723910836559},{"data":{"url":"https://ipfs.arkivo.art/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put/?creator=tz1djshvCnhi5p5wAebiBb2XQLcvVKBqyH7F&viewer=&objkt=527836","host":"ipfs.arkivo.art","path":"/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put/","type":"http","query":"?creator=tz1djshvCnhi5p5wAebiBb2XQLcvVKBqyH7F&viewer=&objkt=527836","method":"GET","headers":{"sec-ch-ua":"\"HeadlessChrome\";v=\"119\", \"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"","user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/119.0.6045.9 Safari/537.36","sec-ch-ua-mobile":"?0","sec-ch-ua-platform":"\"Linux\"","upgrade-insecure-requests":"1"},"fragment":"","postData":null,"protocol":"https:"},"type":1,"external":false,"timestamp":1723910836560},{"data":{"url":"https://ipfs.arkivo.art/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put/?creator=tz1djshvCnhi5p5wAebiBb2XQLcvVKBqyH7F&viewer=&objkt=527836","body":"","status":200,"headers":{"date":"Sat, 17 Aug 2024 16:07:16 GMT","etag":"\"QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put\"","server":"nginx/1.27.0","connection":"keep-alive","x-ipfs-path":"/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put/","content-type":"text/html","x-ipfs-roots":"QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put","accept-ranges":"bytes","cache-control":"public, max-age=29030400, immutable","content-length":"2675","access-control-allow-origin":"*","access-control-allow-headers":"Content-Type\nRange\nUser-Agent\nX-Requested-With","access-control-allow-methods":"GET\nHEAD\nOPTIONS","access-control-expose-headers":"Content-Length\nContent-Range\nX-Chunked-Output\nX-Ipfs-Path\nX-Ipfs-Roots\nX-Stream-Output"}},"type":2,"external":false,"timestamp":1723910836574},{"data":{"url":"https://ipfs.arkivo.art/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put/style.css","host":"ipfs.arkivo.art","path":"/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put/style.css","type":"http","query":"","method":"GET","headers":{"referer":"https://ipfs.arkivo.art/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put/?creator=tz1djshvCnhi5p5wAebiBb2XQLcvVKBqyH7F&viewer=&objkt=527836","sec-ch-ua":"\"HeadlessChrome\";v=\"119\", \"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"","user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/119.0.6045.9 Safari/537.36","sec-ch-ua-mobile":"?0","sec-ch-ua-platform":"\"Linux\""},"fragment":"","postData":null,"protocol":"https:"},"type":1,"external":false,"timestamp":1723910836603},{"data":{"url":"https://ipfs.arkivo.art/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put/viewer.js","host":"ipfs.arkivo.art","path":"/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put/viewer.js","type":"http","query":"","method":"GET","headers":{"referer":"https://ipfs.arkivo.art/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put/?creator=tz1djshvCnhi5p5wAebiBb2XQLcvVKBqyH7F&viewer=&objkt=527836","sec-ch-ua":"\"HeadlessChrome\";v=\"119\", \"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"","user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/119.0.6045.9 Safari/537.36","sec-ch-ua-mobile":"?0","sec-ch-ua-platform":"\"Linux\""},"fragment":"","postData":null,"protocol":"https:"},"type":1,"external":false,"timestamp":1723910836604},{"data":{"url":"https://ipfs.arkivo.art/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put/style.css","body":"","status":200,"headers":{"date":"Sat, 17 Aug 2024 16:07:16 GMT","etag":"\"QmPbsQLLXNhFAwKHqFy7nJfyFfmhwqU4gypXMEAr9LWc7Y\"","server":"nginx/1.27.0","connection":"keep-alive","x-ipfs-path":"/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put/style.css","content-type":"text/css; charset=utf-8","x-ipfs-roots":"QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put,QmPbsQLLXNhFAwKHqFy7nJfyFfmhwqU4gypXMEAr9LWc7Y","accept-ranges":"bytes","cache-control":"public, max-age=29030400, immutable","content-length":"243","access-control-allow-origin":"*","access-control-allow-headers":"Content-Type, Range, User-Agent, X-Requested-With","access-control-allow-methods":"GET, HEAD, OPTIONS","access-control-expose-headers":"Content-Length, Content-Range, X-Chunked-Output, X-Ipfs-Path, X-Ipfs-Roots, X-Stream-Output"}},"type":2,"external":false,"timestamp":1723910836615},{"data":{"url":"https://ipfs.arkivo.art/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put/viewer.js","body":"","status":200,"headers":{"date":"Sat, 17 Aug 2024 16:07:16 GMT","etag":"\"QmQSx7jXH1MrpU7mJeihUwX5P6M4ri8KK7zmFDozLo9c55\"","server":"nginx/1.27.0","connection":"keep-alive","x-ipfs-path":"/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put/viewer.js","content-type":"text/javascript; charset=utf-8","x-ipfs-roots":"QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put,QmQSx7jXH1MrpU7mJeihUwX5P6M4ri8KK7zmFDozLo9c55","accept-ranges":"bytes","cache-control":"public, max-age=29030400, immutable","content-length":"11766","access-control-allow-origin":"*","access-control-allow-headers":"Content-Type, Range, User-Agent, X-Requested-With","access-control-allow-methods":"GET, HEAD, OPTIONS","access-control-expose-headers":"Content-Length, Content-Range, X-Chunked-Output, X-Ipfs-Path, X-Ipfs-Roots, X-Stream-Output"}},"type":2,"external":false,"timestamp":1723910836623},{"data":{"url":"https://ipfs.arkivo.art/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put/nodevember10.polygonjs","host":"ipfs.arkivo.art","path":"/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put/nodevember10.polygonjs","type":"http","query":"","method":"GET","headers":{"referer":"https://ipfs.arkivo.art/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put/?creator=tz1djshvCnhi5p5wAebiBb2XQLcvVKBqyH7F&viewer=&objkt=527836","sec-ch-ua":"\"HeadlessChrome\";v=\"119\", \"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"","user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/119.0.6045.9 Safari/537.36","sec-ch-ua-mobile":"?0","sec-ch-ua-platform":"\"Linux\""},"fragment":"","postData":null,"protocol":"https:"},"type":1,"external":false,"timestamp":1723910836628},{"data":{"url":"https://ipfs.arkivo.art/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put/poster.jpg","host":"ipfs.arkivo.art","path":"/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put/poster.jpg","type":"http","query":"","method":"GET","headers":{"referer":"https://ipfs.arkivo.art/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put/?creator=tz1djshvCnhi5p5wAebiBb2XQLcvVKBqyH7F&viewer=&objkt=527836","sec-ch-ua":"\"HeadlessChrome\";v=\"119\", \"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"","user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/119.0.6045.9 Safari/537.36","sec-ch-ua-mobile":"?0","sec-ch-ua-platform":"\"Linux\""},"fragment":"","postData":null,"protocol":"https:"},"type":1,"external":false,"timestamp":1723910836630},{"data":{"url":"https://ipfs.arkivo.art/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put/nodevember10.polygonjs","body":"","status":200,"headers":{"date":"Sat, 17 Aug 2024 16:07:16 GMT","etag":"\"QmPxnPJqQG3kJJWLGNeHYsGrCCS47rDqu3a8PPjR4e7are\"","server":"nginx/1.27.0","connection":"keep-alive","x-ipfs-path":"/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put/nodevember10.polygonjs","content-type":"application/zip","x-ipfs-roots":"QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put,QmPxnPJqQG3kJJWLGNeHYsGrCCS47rDqu3a8PPjR4e7are","accept-ranges":"bytes","cache-control":"public, max-age=29030400, immutable","content-length":"766882","access-control-allow-origin":"*","access-control-allow-headers":"Content-Type, Range, User-Agent, X-Requested-With","access-control-allow-methods":"GET, HEAD, OPTIONS","access-control-expose-headers":"Content-Length, Content-Range, X-Chunked-Output, X-Ipfs-Path, X-Ipfs-Roots, X-Stream-Output"}},"type":2,"external":false,"timestamp":1723910836650},{"data":{"url":"https://ipfs.arkivo.art/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put/poster.jpg","body":"","status":200,"headers":{"date":"Sat, 17 Aug 2024 16:07:16 GMT","etag":"\"Qmaiv2Gh38VHDaBQjaX9bpxud5L2gzeyEt8WH2qEKiT4HV\"","server":"nginx/1.27.0","connection":"keep-alive","x-ipfs-path":"/ipfs/QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put/poster.jpg","content-type":"image/jpeg","x-ipfs-roots":"QmSMZDWJmiv1e5vztuTs3Yw9pXNii5AzMfHFHZH9FG5put,Qmaiv2Gh38VHDaBQjaX9bpxud5L2gzeyEt8WH2qEKiT4HV","accept-ranges":"bytes","cache-control":"public, max-age=29030400, immutable","content-length":"26633","access-control-allow-origin":"*","access-control-allow-headers":"Content-Type, Range, User-Agent, X-Requested-With","access-control-allow-methods":"GET, HEAD, OPTIONS","access-control-expose-headers":"Content-Length, Content-Range, X-Chunked-Output, X-Ipfs-Path, X-Ipfs-Roots, X-Stream-Output"}},"type":2,"external":false,"timestamp":1723910836653},{"data":{"url":"blob:https://ipfs.arkivo.art/4fae11dd-bb5b-4613-b343-76eac4c31182","host":"","path":"https://ipfs.arkivo.art/4fae11dd-bb5b-4613-b343-76eac4c31182","type":"http","query":"","method":"GET","headers":{"origin":"https://ipfs.arkivo.art","referer":"","user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/119.0.6045.9 Safari/537.36"},"fragment":"","postData":null,"protocol":"blob:"},"type":1,"external":false,"timestamp":1723910836793},{"data":{"url":"blob:https://ipfs.arkivo.art/4fae11dd-bb5b-4613-b343-76eac4c31182","body":"\"/*! For license information please see all.js.LICENSE.txt */\\nvar POLY=function(t){var e={};function n(i){if(e[i])return e[i].exports;var r=e[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){\\\\\\\"undefined\\\\\\\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\\\\\\\"Module\\\\\\\"}),Object.defineProperty(t,\\\\\\\"__esModule\\\\\\\",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&\\\\\\\"object\\\\\\\"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,\\\\\\\"default\\\\\\\",{enumerable:!0,value:t}),2&e&&\\\\\\\"string\\\\\\\"!=typeof t)for(var r in t)n.d(i,r,function(e){return t[e]}.bind(null,r));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,\\\\\\\"a\\\\\\\",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p=\\\\\\\"https://unpkg.com/@polygonjs/polygonjs@1.1.189/dist/\\\\\\\",n(n.s=217)}([function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s}));var i=n(3),r=n(8);class s{constructor(t=0,e=0,n=0){this.x=t,this.y=e,this.z=n}set(t,e,n){return void 0===n&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error(\\\\\\\"index is out of range: \\\\\\\"+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error(\\\\\\\"index is out of range: \\\\\\\"+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\\\\\\\"),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\\\\\\\"),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.\\\\\\\"),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return t&&t.isEuler||console.error(\\\\\\\"THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.\\\\\\\"),this.applyQuaternion(a.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(a.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6]*i,this.y=r[1]*e+r[4]*n+r[7]*i,this.z=r[2]*e+r[5]*n+r[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=t.elements,s=1/(r[3]*e+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*e+r[4]*n+r[8]*i+r[12])*s,this.y=(r[1]*e+r[5]*n+r[9]*i+r[13])*s,this.z=(r[2]*e+r[6]*n+r[10]*i+r[14])*s,this}applyQuaternion(t){const e=this.x,n=this.y,i=this.z,r=t.x,s=t.y,o=t.z,a=t.w,l=a*e+s*i-o*n,c=a*n+o*e-r*i,u=a*i+r*n-s*e,h=-r*e-s*n-o*i;return this.x=l*a+h*-r+c*-o-u*-s,this.y=c*a+h*-s+u*-r-l*-o,this.z=u*a+h*-o+l*-s-c*-r,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i,this.y=r[1]*e+r[5]*n+r[9]*i,this.z=r[2]*e+r[6]*n+r[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}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(t){return this.x*t.x+this.y*t.y+this.z*t.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(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.\\\\\\\"),this.crossVectors(t,e)):this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,i=t.y,r=t.z,s=e.x,o=e.y,a=e.z;return this.x=i*a-r*o,this.y=r*s-n*a,this.z=n*o-i*s,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return o.copy(this).projectOnVector(t),this.sub(o)}reflect(t){return this.sub(o.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(i.d(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn(\\\\\\\"THREE.Vector3: offset has been removed from .fromBufferAttribute().\\\\\\\"),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=2*(Math.random()-.5),e=Math.random()*Math.PI*2,n=Math.sqrt(1-t**2);return this.x=n*Math.cos(e),this.y=n*Math.sin(e),this.z=t,this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}s.prototype.isVector3=!0;const o=new s,a=new r.a},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"hb\\\\\\\",(function(){return i})),n.d(e,\\\\\\\"Tc\\\\\\\",(function(){return r})),n.d(e,\\\\\\\"u\\\\\\\",(function(){return s})),n.d(e,\\\\\\\"s\\\\\\\",(function(){return o})),n.d(e,\\\\\\\"t\\\\\\\",(function(){return a})),n.d(e,\\\\\\\"k\\\\\\\",(function(){return l})),n.d(e,\\\\\\\"Fb\\\\\\\",(function(){return c})),n.d(e,\\\\\\\"Gb\\\\\\\",(function(){return u})),n.d(e,\\\\\\\"gd\\\\\\\",(function(){return h})),n.d(e,\\\\\\\"H\\\\\\\",(function(){return d})),n.d(e,\\\\\\\"i\\\\\\\",(function(){return p})),n.d(e,\\\\\\\"z\\\\\\\",(function(){return _})),n.d(e,\\\\\\\"F\\\\\\\",(function(){return m})),n.d(e,\\\\\\\"ub\\\\\\\",(function(){return f})),n.d(e,\\\\\\\"xb\\\\\\\",(function(){return g})),n.d(e,\\\\\\\"e\\\\\\\",(function(){return v})),n.d(e,\\\\\\\"Sc\\\\\\\",(function(){return y})),n.d(e,\\\\\\\"mb\\\\\\\",(function(){return x})),n.d(e,\\\\\\\"v\\\\\\\",(function(){return b})),n.d(e,\\\\\\\"b\\\\\\\",(function(){return w})),n.d(e,\\\\\\\"Rc\\\\\\\",(function(){return T})),n.d(e,\\\\\\\"xc\\\\\\\",(function(){return A})),n.d(e,\\\\\\\"jb\\\\\\\",(function(){return E})),n.d(e,\\\\\\\"ib\\\\\\\",(function(){return M})),n.d(e,\\\\\\\"jd\\\\\\\",(function(){return S})),n.d(e,\\\\\\\"Ab\\\\\\\",(function(){return C})),n.d(e,\\\\\\\"Pc\\\\\\\",(function(){return N})),n.d(e,\\\\\\\"Eb\\\\\\\",(function(){return L})),n.d(e,\\\\\\\"Nc\\\\\\\",(function(){return O})),n.d(e,\\\\\\\"Db\\\\\\\",(function(){return R})),n.d(e,\\\\\\\"A\\\\\\\",(function(){return P})),n.d(e,\\\\\\\"Bb\\\\\\\",(function(){return I})),n.d(e,\\\\\\\"B\\\\\\\",(function(){return F})),n.d(e,\\\\\\\"Cb\\\\\\\",(function(){return D})),n.d(e,\\\\\\\"Oc\\\\\\\",(function(){return k})),n.d(e,\\\\\\\"tb\\\\\\\",(function(){return B})),n.d(e,\\\\\\\"g\\\\\\\",(function(){return z})),n.d(e,\\\\\\\"S\\\\\\\",(function(){return U})),n.d(e,\\\\\\\"T\\\\\\\",(function(){return G})),n.d(e,\\\\\\\"C\\\\\\\",(function(){return V})),n.d(e,\\\\\\\"L\\\\\\\",(function(){return H})),n.d(e,\\\\\\\"K\\\\\\\",(function(){return j})),n.d(e,\\\\\\\"yb\\\\\\\",(function(){return W})),n.d(e,\\\\\\\"nb\\\\\\\",(function(){return q})),n.d(e,\\\\\\\"lb\\\\\\\",(function(){return X})),n.d(e,\\\\\\\"c\\\\\\\",(function(){return Y})),n.d(e,\\\\\\\"vb\\\\\\\",(function(){return $})),n.d(e,\\\\\\\"ab\\\\\\\",(function(){return J})),n.d(e,\\\\\\\"vc\\\\\\\",(function(){return Z})),n.d(e,\\\\\\\"m\\\\\\\",(function(){return Q})),n.d(e,\\\\\\\"a\\\\\\\",(function(){return K})),n.d(e,\\\\\\\"w\\\\\\\",(function(){return tt})),n.d(e,\\\\\\\"Yc\\\\\\\",(function(){return et})),n.d(e,\\\\\\\"o\\\\\\\",(function(){return nt})),n.d(e,\\\\\\\"p\\\\\\\",(function(){return it})),n.d(e,\\\\\\\"D\\\\\\\",(function(){return rt})),n.d(e,\\\\\\\"E\\\\\\\",(function(){return st})),n.d(e,\\\\\\\"q\\\\\\\",(function(){return ot})),n.d(e,\\\\\\\"r\\\\\\\",(function(){return at})),n.d(e,\\\\\\\"wc\\\\\\\",(function(){return lt})),n.d(e,\\\\\\\"n\\\\\\\",(function(){return ct})),n.d(e,\\\\\\\"kb\\\\\\\",(function(){return ut})),n.d(e,\\\\\\\"ob\\\\\\\",(function(){return ht})),n.d(e,\\\\\\\"sb\\\\\\\",(function(){return dt})),n.d(e,\\\\\\\"qb\\\\\\\",(function(){return pt})),n.d(e,\\\\\\\"rb\\\\\\\",(function(){return _t})),n.d(e,\\\\\\\"pb\\\\\\\",(function(){return mt})),n.d(e,\\\\\\\"V\\\\\\\",(function(){return ft})),n.d(e,\\\\\\\"Z\\\\\\\",(function(){return gt})),n.d(e,\\\\\\\"X\\\\\\\",(function(){return vt})),n.d(e,\\\\\\\"Y\\\\\\\",(function(){return yt})),n.d(e,\\\\\\\"W\\\\\\\",(function(){return xt})),n.d(e,\\\\\\\"Zc\\\\\\\",(function(){return bt})),n.d(e,\\\\\\\"l\\\\\\\",(function(){return wt})),n.d(e,\\\\\\\"Mc\\\\\\\",(function(){return Tt})),n.d(e,\\\\\\\"fd\\\\\\\",(function(){return At})),n.d(e,\\\\\\\"N\\\\\\\",(function(){return Et})),n.d(e,\\\\\\\"bd\\\\\\\",(function(){return Mt})),n.d(e,\\\\\\\"G\\\\\\\",(function(){return St})),n.d(e,\\\\\\\"M\\\\\\\",(function(){return Ct})),n.d(e,\\\\\\\"cd\\\\\\\",(function(){return Nt})),n.d(e,\\\\\\\"dd\\\\\\\",(function(){return Lt})),n.d(e,\\\\\\\"ed\\\\\\\",(function(){return Ot})),n.d(e,\\\\\\\"ad\\\\\\\",(function(){return Rt})),n.d(e,\\\\\\\"f\\\\\\\",(function(){return Pt})),n.d(e,\\\\\\\"ic\\\\\\\",(function(){return It})),n.d(e,\\\\\\\"Ib\\\\\\\",(function(){return Ft})),n.d(e,\\\\\\\"gb\\\\\\\",(function(){return Dt})),n.d(e,\\\\\\\"fb\\\\\\\",(function(){return kt})),n.d(e,\\\\\\\"hc\\\\\\\",(function(){return Bt})),n.d(e,\\\\\\\"x\\\\\\\",(function(){return zt})),n.d(e,\\\\\\\"y\\\\\\\",(function(){return Ut})),n.d(e,\\\\\\\"tc\\\\\\\",(function(){return Gt})),n.d(e,\\\\\\\"uc\\\\\\\",(function(){return Vt})),n.d(e,\\\\\\\"rc\\\\\\\",(function(){return Ht})),n.d(e,\\\\\\\"sc\\\\\\\",(function(){return jt})),n.d(e,\\\\\\\"jc\\\\\\\",(function(){return Wt})),n.d(e,\\\\\\\"Jb\\\\\\\",(function(){return qt})),n.d(e,\\\\\\\"qc\\\\\\\",(function(){return Xt})),n.d(e,\\\\\\\"cc\\\\\\\",(function(){return Yt})),n.d(e,\\\\\\\"dc\\\\\\\",(function(){return $t})),n.d(e,\\\\\\\"ec\\\\\\\",(function(){return Jt})),n.d(e,\\\\\\\"pc\\\\\\\",(function(){return Zt})),n.d(e,\\\\\\\"oc\\\\\\\",(function(){return Qt})),n.d(e,\\\\\\\"bc\\\\\\\",(function(){return Kt})),n.d(e,\\\\\\\"ac\\\\\\\",(function(){return te})),n.d(e,\\\\\\\"mc\\\\\\\",(function(){return ee})),n.d(e,\\\\\\\"nc\\\\\\\",(function(){return ne})),n.d(e,\\\\\\\"Zb\\\\\\\",(function(){return ie})),n.d(e,\\\\\\\"Qb\\\\\\\",(function(){return re})),n.d(e,\\\\\\\"Rb\\\\\\\",(function(){return se})),n.d(e,\\\\\\\"Sb\\\\\\\",(function(){return oe})),n.d(e,\\\\\\\"Tb\\\\\\\",(function(){return ae})),n.d(e,\\\\\\\"Ub\\\\\\\",(function(){return le})),n.d(e,\\\\\\\"Vb\\\\\\\",(function(){return ce})),n.d(e,\\\\\\\"Wb\\\\\\\",(function(){return ue})),n.d(e,\\\\\\\"Xb\\\\\\\",(function(){return he})),n.d(e,\\\\\\\"Lb\\\\\\\",(function(){return de})),n.d(e,\\\\\\\"Mb\\\\\\\",(function(){return pe})),n.d(e,\\\\\\\"Nb\\\\\\\",(function(){return _e})),n.d(e,\\\\\\\"Kb\\\\\\\",(function(){return me})),n.d(e,\\\\\\\"Ob\\\\\\\",(function(){return fe})),n.d(e,\\\\\\\"Pb\\\\\\\",(function(){return ge})),n.d(e,\\\\\\\"Yb\\\\\\\",(function(){return ve})),n.d(e,\\\\\\\"Ec\\\\\\\",(function(){return ye})),n.d(e,\\\\\\\"Fc\\\\\\\",(function(){return xe})),n.d(e,\\\\\\\"Gc\\\\\\\",(function(){return be})),n.d(e,\\\\\\\"Hc\\\\\\\",(function(){return we})),n.d(e,\\\\\\\"Ic\\\\\\\",(function(){return Te})),n.d(e,\\\\\\\"Jc\\\\\\\",(function(){return Ae})),n.d(e,\\\\\\\"Kc\\\\\\\",(function(){return Ee})),n.d(e,\\\\\\\"Lc\\\\\\\",(function(){return Me})),n.d(e,\\\\\\\"zc\\\\\\\",(function(){return Se})),n.d(e,\\\\\\\"Ac\\\\\\\",(function(){return Ce})),n.d(e,\\\\\\\"Bc\\\\\\\",(function(){return Ne})),n.d(e,\\\\\\\"yc\\\\\\\",(function(){return Le})),n.d(e,\\\\\\\"Cc\\\\\\\",(function(){return Oe})),n.d(e,\\\\\\\"Dc\\\\\\\",(function(){return Re})),n.d(e,\\\\\\\"cb\\\\\\\",(function(){return Pe})),n.d(e,\\\\\\\"eb\\\\\\\",(function(){return Ie})),n.d(e,\\\\\\\"db\\\\\\\",(function(){return Fe})),n.d(e,\\\\\\\"O\\\\\\\",(function(){return De})),n.d(e,\\\\\\\"P\\\\\\\",(function(){return ke})),n.d(e,\\\\\\\"Q\\\\\\\",(function(){return Be})),n.d(e,\\\\\\\"id\\\\\\\",(function(){return ze})),n.d(e,\\\\\\\"kd\\\\\\\",(function(){return Ue})),n.d(e,\\\\\\\"hd\\\\\\\",(function(){return Ge})),n.d(e,\\\\\\\"wb\\\\\\\",(function(){return Ve})),n.d(e,\\\\\\\"d\\\\\\\",(function(){return He})),n.d(e,\\\\\\\"Xc\\\\\\\",(function(){return je})),n.d(e,\\\\\\\"Wc\\\\\\\",(function(){return We})),n.d(e,\\\\\\\"Vc\\\\\\\",(function(){return qe})),n.d(e,\\\\\\\"U\\\\\\\",(function(){return Xe})),n.d(e,\\\\\\\"ld\\\\\\\",(function(){return Ye})),n.d(e,\\\\\\\"J\\\\\\\",(function(){return $e})),n.d(e,\\\\\\\"gc\\\\\\\",(function(){return Je})),n.d(e,\\\\\\\"bb\\\\\\\",(function(){return Ze})),n.d(e,\\\\\\\"lc\\\\\\\",(function(){return Qe})),n.d(e,\\\\\\\"kc\\\\\\\",(function(){return Ke})),n.d(e,\\\\\\\"fc\\\\\\\",(function(){return tn})),n.d(e,\\\\\\\"j\\\\\\\",(function(){return en})),n.d(e,\\\\\\\"Hb\\\\\\\",(function(){return nn})),n.d(e,\\\\\\\"Uc\\\\\\\",(function(){return rn})),n.d(e,\\\\\\\"zb\\\\\\\",(function(){return sn})),n.d(e,\\\\\\\"R\\\\\\\",(function(){return on})),n.d(e,\\\\\\\"h\\\\\\\",(function(){return an})),n.d(e,\\\\\\\"Qc\\\\\\\",(function(){return ln})),n.d(e,\\\\\\\"I\\\\\\\",(function(){return cn}));const i={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},r={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},s=0,o=1,a=2,l=0,c=1,u=2,h=3,d=0,p=1,_=2,m=1,f=0,g=1,v=2,y=3,x=4,b=5,w=100,T=101,A=102,E=103,M=104,S=200,C=201,N=202,L=203,O=204,R=205,P=206,I=207,F=208,D=209,k=210,B=0,z=1,U=2,G=3,V=4,H=5,j=6,W=7,q=0,X=1,Y=2,$=0,J=1,Z=2,Q=3,K=4,tt=5,et=300,nt=301,it=302,rt=303,st=304,ot=306,at=307,lt=1e3,ct=1001,ut=1002,ht=1003,dt=1004,pt=1004,_t=1005,mt=1005,ft=1006,gt=1007,vt=1007,yt=1008,xt=1008,bt=1009,wt=1010,Tt=1011,At=1012,Et=1013,Mt=1014,St=1015,Ct=1016,Nt=1017,Lt=1018,Ot=1019,Rt=1020,Pt=1021,It=1022,Ft=1023,Dt=1024,kt=1025,Bt=Ft,zt=1026,Ut=1027,Gt=1028,Vt=1029,Ht=1030,jt=1031,Wt=1032,qt=1033,Xt=33776,Yt=33777,$t=33778,Jt=33779,Zt=35840,Qt=35841,Kt=35842,te=35843,ee=36196,ne=37492,ie=37496,re=37808,se=37809,oe=37810,ae=37811,le=37812,ce=37813,ue=37814,he=37815,de=37816,pe=37817,_e=37818,me=37819,fe=37820,ge=37821,ve=36492,ye=37840,xe=37841,be=37842,we=37843,Te=37844,Ae=37845,Ee=37846,Me=37847,Se=37848,Ce=37849,Ne=37850,Le=37851,Oe=37852,Re=37853,Pe=2200,Ie=2201,Fe=2202,De=2300,ke=2301,Be=2302,ze=2400,Ue=2401,Ge=2402,Ve=2500,He=2501,je=0,We=1,qe=2,Xe=3e3,Ye=3001,$e=3007,Je=3002,Ze=3003,Qe=3004,Ke=3005,tn=3006,en=3200,nn=3201,rn=0,sn=1,on=7680,an=519,ln=35044,cn=\\\\\\\"300 es\\\\\\\"},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return i}));class i{constructor(t=0,e=0){this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error(\\\\\\\"index is out of range: \\\\\\\"+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error(\\\\\\\"index is out of range: \\\\\\\"+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\\\\\\\"),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\\\\\\\"),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}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(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.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(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn(\\\\\\\"THREE.Vector2: offset has been removed from .fromBufferAttribute().\\\\\\\"),this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),i=Math.sin(e),r=this.x-t.x,s=this.y-t.y;return this.x=r*n-s*i+t.x,this.y=r*i+s*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}i.prototype.isVector2=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return i})),n.d(e,\\\\\\\"b\\\\\\\",(function(){return r})),n.d(e,\\\\\\\"h\\\\\\\",(function(){return a})),n.d(e,\\\\\\\"d\\\\\\\",(function(){return l})),n.d(e,\\\\\\\"f\\\\\\\",(function(){return c})),n.d(e,\\\\\\\"j\\\\\\\",(function(){return u})),n.d(e,\\\\\\\"e\\\\\\\",(function(){return h})),n.d(e,\\\\\\\"k\\\\\\\",(function(){return d})),n.d(e,\\\\\\\"i\\\\\\\",(function(){return p})),n.d(e,\\\\\\\"c\\\\\\\",(function(){return _})),n.d(e,\\\\\\\"g\\\\\\\",(function(){return m}));const i=Math.PI/180,r=180/Math.PI,s=[];for(let t=0;t<256;t++)s[t]=(t<16?\\\\\\\"0\\\\\\\":\\\\\\\"\\\\\\\")+t.toString(16);const o=\\\\\\\"undefined\\\\\\\"!=typeof crypto&&\\\\\\\"randomUUID\\\\\\\"in crypto;function a(){if(o)return crypto.randomUUID().toUpperCase();const t=4294967295*Math.random()|0,e=4294967295*Math.random()|0,n=4294967295*Math.random()|0,i=4294967295*Math.random()|0;return(s[255&t]+s[t>>8&255]+s[t>>16&255]+s[t>>24&255]+\\\\\\\"-\\\\\\\"+s[255&e]+s[e>>8&255]+\\\\\\\"-\\\\\\\"+s[e>>16&15|64]+s[e>>24&255]+\\\\\\\"-\\\\\\\"+s[63&n|128]+s[n>>8&255]+\\\\\\\"-\\\\\\\"+s[n>>16&255]+s[n>>24&255]+s[255&i]+s[i>>8&255]+s[i>>16&255]+s[i>>24&255]).toUpperCase()}function l(t,e,n){return Math.max(e,Math.min(n,t))}function c(t,e){return(t%e+e)%e}function u(t,e,n){return(1-n)*t+n*e}function h(t){return t*i}function d(t){return t*r}function p(t){return 0==(t&t-1)&&0!==t}function _(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))}function m(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"d\\\\\\\",(function(){return x})),n.d(e,\\\\\\\"c\\\\\\\",(function(){return y})),n.d(e,\\\\\\\"b\\\\\\\",(function(){return v})),n.d(e,\\\\\\\"i\\\\\\\",(function(){return g})),n.d(e,\\\\\\\"f\\\\\\\",(function(){return f})),n.d(e,\\\\\\\"h\\\\\\\",(function(){return m})),n.d(e,\\\\\\\"e\\\\\\\",(function(){return _})),n.d(e,\\\\\\\"k\\\\\\\",(function(){return p})),n.d(e,\\\\\\\"j\\\\\\\",(function(){return d})),n.d(e,\\\\\\\"g\\\\\\\",(function(){return h})),n.d(e,\\\\\\\"a\\\\\\\",(function(){return u}));var i=n(9),r=n(0),s=n(2),o=n(6),a=n(1);const l=new r.a,c=new s.a;class u{constructor(t,e,n){if(Array.isArray(t))throw new TypeError(\\\\\\\"THREE.BufferAttribute: array should be a Typed Array.\\\\\\\");this.name=\\\\\\\"\\\\\\\",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=!0===n,this.usage=a.Qc,this.updateRange={offset:0,count:-1},this.version=0}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this}copyAt(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let i=0,r=this.itemSize;i<r;i++)this.array[t+i]=e.array[n+i];return this}copyArray(t){return this.array.set(t),this}copyColorsArray(t){const e=this.array;let n=0;for(let i=0,r=t.length;i<r;i++){let r=t[i];void 0===r&&(console.warn(\\\\\\\"THREE.BufferAttribute.copyColorsArray(): color is undefined\\\\\\\",i),r=new o.a),e[n++]=r.r,e[n++]=r.g,e[n++]=r.b}return this}copyVector2sArray(t){const e=this.array;let n=0;for(let i=0,r=t.length;i<r;i++){let r=t[i];void 0===r&&(console.warn(\\\\\\\"THREE.BufferAttribute.copyVector2sArray(): vector is undefined\\\\\\\",i),r=new s.a),e[n++]=r.x,e[n++]=r.y}return this}copyVector3sArray(t){const e=this.array;let n=0;for(let i=0,s=t.length;i<s;i++){let s=t[i];void 0===s&&(console.warn(\\\\\\\"THREE.BufferAttribute.copyVector3sArray(): vector is undefined\\\\\\\",i),s=new r.a),e[n++]=s.x,e[n++]=s.y,e[n++]=s.z}return this}copyVector4sArray(t){const e=this.array;let n=0;for(let r=0,s=t.length;r<s;r++){let s=t[r];void 0===s&&(console.warn(\\\\\\\"THREE.BufferAttribute.copyVector4sArray(): vector is undefined\\\\\\\",r),s=new i.a),e[n++]=s.x,e[n++]=s.y,e[n++]=s.z,e[n++]=s.w}return this}applyMatrix3(t){if(2===this.itemSize)for(let e=0,n=this.count;e<n;e++)c.fromBufferAttribute(this,e),c.applyMatrix3(t),this.setXY(e,c.x,c.y);else if(3===this.itemSize)for(let e=0,n=this.count;e<n;e++)l.fromBufferAttribute(this,e),l.applyMatrix3(t),this.setXYZ(e,l.x,l.y,l.z);return this}applyMatrix4(t){for(let e=0,n=this.count;e<n;e++)l.x=this.getX(e),l.y=this.getY(e),l.z=this.getZ(e),l.applyMatrix4(t),this.setXYZ(e,l.x,l.y,l.z);return this}applyNormalMatrix(t){for(let e=0,n=this.count;e<n;e++)l.x=this.getX(e),l.y=this.getY(e),l.z=this.getZ(e),l.applyNormalMatrix(t),this.setXYZ(e,l.x,l.y,l.z);return this}transformDirection(t){for(let e=0,n=this.count;e<n;e++)l.x=this.getX(e),l.y=this.getY(e),l.z=this.getZ(e),l.transformDirection(t),this.setXYZ(e,l.x,l.y,l.z);return this}set(t,e=0){return this.array.set(t,e),this}getX(t){return this.array[t*this.itemSize]}setX(t,e){return this.array[t*this.itemSize]=e,this}getY(t){return this.array[t*this.itemSize+1]}setY(t,e){return this.array[t*this.itemSize+1]=e,this}getZ(t){return this.array[t*this.itemSize+2]}setZ(t,e){return this.array[t*this.itemSize+2]=e,this}getW(t){return this.array[t*this.itemSize+3]}setW(t,e){return this.array[t*this.itemSize+3]=e,this}setXY(t,e,n){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=n,this}setXYZ(t,e,n,i){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=n,this.array[t+2]=i,this}setXYZW(t,e,n,i,r){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=n,this.array[t+2]=i,this.array[t+3]=r,this}onUpload(t){return this.onUploadCallback=t,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){const t={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.prototype.slice.call(this.array),normalized:this.normalized};return\\\\\\\"\\\\\\\"!==this.name&&(t.name=this.name),this.usage!==a.Qc&&(t.usage=this.usage),0===this.updateRange.offset&&-1===this.updateRange.count||(t.updateRange=this.updateRange),t}}u.prototype.isBufferAttribute=!0;class h extends u{constructor(t,e,n){super(new Int8Array(t),e,n)}}class d extends u{constructor(t,e,n){super(new Uint8Array(t),e,n)}}class p extends u{constructor(t,e,n){super(new Uint8ClampedArray(t),e,n)}}class _ extends u{constructor(t,e,n){super(new Int16Array(t),e,n)}}class m extends u{constructor(t,e,n){super(new Uint16Array(t),e,n)}}class f extends u{constructor(t,e,n){super(new Int32Array(t),e,n)}}class g extends u{constructor(t,e,n){super(new Uint32Array(t),e,n)}}class v extends u{constructor(t,e,n){super(new Uint16Array(t),e,n)}}v.prototype.isFloat16BufferAttribute=!0;class y extends u{constructor(t,e,n){super(new Float32Array(t),e,n)}}class x extends u{constructor(t,e,n){super(new Float64Array(t),e,n)}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r}));var i=n(0);class r{constructor(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error(\\\\\\\"THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.\\\\\\\")}set(t,e,n,i,r,s,o,a,l,c,u,h,d,p,_,m){const f=this.elements;return f[0]=t,f[4]=e,f[8]=n,f[12]=i,f[1]=r,f[5]=s,f[9]=o,f[13]=a,f[2]=l,f[6]=c,f[10]=u,f[14]=h,f[3]=d,f[7]=p,f[11]=_,f[15]=m,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 r).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,i=1/s.setFromMatrixColumn(t,0).length(),r=1/s.setFromMatrixColumn(t,1).length(),o=1/s.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*r,e[5]=n[5]*r,e[6]=n[6]*r,e[7]=0,e[8]=n[8]*o,e[9]=n[9]*o,e[10]=n[10]*o,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){t&&t.isEuler||console.error(\\\\\\\"THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.\\\\\\\");const e=this.elements,n=t.x,i=t.y,r=t.z,s=Math.cos(n),o=Math.sin(n),a=Math.cos(i),l=Math.sin(i),c=Math.cos(r),u=Math.sin(r);if(\\\\\\\"XYZ\\\\\\\"===t.order){const t=s*c,n=s*u,i=o*c,r=o*u;e[0]=a*c,e[4]=-a*u,e[8]=l,e[1]=n+i*l,e[5]=t-r*l,e[9]=-o*a,e[2]=r-t*l,e[6]=i+n*l,e[10]=s*a}else if(\\\\\\\"YXZ\\\\\\\"===t.order){const t=a*c,n=a*u,i=l*c,r=l*u;e[0]=t+r*o,e[4]=i*o-n,e[8]=s*l,e[1]=s*u,e[5]=s*c,e[9]=-o,e[2]=n*o-i,e[6]=r+t*o,e[10]=s*a}else if(\\\\\\\"ZXY\\\\\\\"===t.order){const t=a*c,n=a*u,i=l*c,r=l*u;e[0]=t-r*o,e[4]=-s*u,e[8]=i+n*o,e[1]=n+i*o,e[5]=s*c,e[9]=r-t*o,e[2]=-s*l,e[6]=o,e[10]=s*a}else if(\\\\\\\"ZYX\\\\\\\"===t.order){const t=s*c,n=s*u,i=o*c,r=o*u;e[0]=a*c,e[4]=i*l-n,e[8]=t*l+r,e[1]=a*u,e[5]=r*l+t,e[9]=n*l-i,e[2]=-l,e[6]=o*a,e[10]=s*a}else if(\\\\\\\"YZX\\\\\\\"===t.order){const t=s*a,n=s*l,i=o*a,r=o*l;e[0]=a*c,e[4]=r-t*u,e[8]=i*u+n,e[1]=u,e[5]=s*c,e[9]=-o*c,e[2]=-l*c,e[6]=n*u+i,e[10]=t-r*u}else if(\\\\\\\"XZY\\\\\\\"===t.order){const t=s*a,n=s*l,i=o*a,r=o*l;e[0]=a*c,e[4]=-u,e[8]=l*c,e[1]=t*u+r,e[5]=s*c,e[9]=n*u-i,e[2]=i*u-n,e[6]=o*c,e[10]=r*u+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(a,t,l)}lookAt(t,e,n){const i=this.elements;return h.subVectors(t,e),0===h.lengthSq()&&(h.z=1),h.normalize(),c.crossVectors(n,h),0===c.lengthSq()&&(1===Math.abs(n.z)?h.x+=1e-4:h.z+=1e-4,h.normalize(),c.crossVectors(n,h)),c.normalize(),u.crossVectors(h,c),i[0]=c.x,i[4]=u.x,i[8]=h.x,i[1]=c.y,i[5]=u.y,i[9]=h.y,i[2]=c.z,i[6]=u.z,i[10]=h.z,this}multiply(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.\\\\\\\"),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,s=n[0],o=n[4],a=n[8],l=n[12],c=n[1],u=n[5],h=n[9],d=n[13],p=n[2],_=n[6],m=n[10],f=n[14],g=n[3],v=n[7],y=n[11],x=n[15],b=i[0],w=i[4],T=i[8],A=i[12],E=i[1],M=i[5],S=i[9],C=i[13],N=i[2],L=i[6],O=i[10],R=i[14],P=i[3],I=i[7],F=i[11],D=i[15];return r[0]=s*b+o*E+a*N+l*P,r[4]=s*w+o*M+a*L+l*I,r[8]=s*T+o*S+a*O+l*F,r[12]=s*A+o*C+a*R+l*D,r[1]=c*b+u*E+h*N+d*P,r[5]=c*w+u*M+h*L+d*I,r[9]=c*T+u*S+h*O+d*F,r[13]=c*A+u*C+h*R+d*D,r[2]=p*b+_*E+m*N+f*P,r[6]=p*w+_*M+m*L+f*I,r[10]=p*T+_*S+m*O+f*F,r[14]=p*A+_*C+m*R+f*D,r[3]=g*b+v*E+y*N+x*P,r[7]=g*w+v*M+y*L+x*I,r[11]=g*T+v*S+y*O+x*F,r[15]=g*A+v*C+y*R+x*D,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],i=t[8],r=t[12],s=t[1],o=t[5],a=t[9],l=t[13],c=t[2],u=t[6],h=t[10],d=t[14];return t[3]*(+r*a*u-i*l*u-r*o*h+n*l*h+i*o*d-n*a*d)+t[7]*(+e*a*d-e*l*h+r*s*h-i*s*d+i*l*c-r*a*c)+t[11]*(+e*l*u-e*o*d-r*s*u+n*s*d+r*o*c-n*l*c)+t[15]*(-i*o*c-e*a*u+e*o*h+i*s*u-n*s*h+n*a*c)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],o=t[5],a=t[6],l=t[7],c=t[8],u=t[9],h=t[10],d=t[11],p=t[12],_=t[13],m=t[14],f=t[15],g=u*m*l-_*h*l+_*a*d-o*m*d-u*a*f+o*h*f,v=p*h*l-c*m*l-p*a*d+s*m*d+c*a*f-s*h*f,y=c*_*l-p*u*l+p*o*d-s*_*d-c*o*f+s*u*f,x=p*u*a-c*_*a-p*o*h+s*_*h+c*o*m-s*u*m,b=e*g+n*v+i*y+r*x;if(0===b)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const w=1/b;return t[0]=g*w,t[1]=(_*h*r-u*m*r-_*i*d+n*m*d+u*i*f-n*h*f)*w,t[2]=(o*m*r-_*a*r+_*i*l-n*m*l-o*i*f+n*a*f)*w,t[3]=(u*a*r-o*h*r-u*i*l+n*h*l+o*i*d-n*a*d)*w,t[4]=v*w,t[5]=(c*m*r-p*h*r+p*i*d-e*m*d-c*i*f+e*h*f)*w,t[6]=(p*a*r-s*m*r-p*i*l+e*m*l+s*i*f-e*a*f)*w,t[7]=(s*h*r-c*a*r+c*i*l-e*h*l-s*i*d+e*a*d)*w,t[8]=y*w,t[9]=(p*u*r-c*_*r-p*n*d+e*_*d+c*n*f-e*u*f)*w,t[10]=(s*_*r-p*o*r+p*n*l-e*_*l-s*n*f+e*o*f)*w,t[11]=(c*o*r-s*u*r-c*n*l+e*u*l+s*n*d-e*o*d)*w,t[12]=x*w,t[13]=(c*_*i-p*u*i+p*n*h-e*_*h-c*n*m+e*u*m)*w,t[14]=(p*o*i-s*_*i-p*n*a+e*_*a+s*n*m-e*o*m)*w,t[15]=(s*u*i-c*o*i+c*n*a-e*u*a-s*n*h+e*o*h)*w,this}scale(t){const e=this.elements,n=t.x,i=t.y,r=t.z;return e[0]*=n,e[4]*=i,e[8]*=r,e[1]*=n,e[5]*=i,e[9]*=r,e[2]*=n,e[6]*=i,e[10]*=r,e[3]*=n,e[7]*=i,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),i=Math.sin(e),r=1-n,s=t.x,o=t.y,a=t.z,l=r*s,c=r*o;return this.set(l*s+n,l*o-i*a,l*a+i*o,0,l*o+i*a,c*o+n,c*a-i*s,0,l*a-i*o,c*a+i*s,r*a*a+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n,i,r,s){return this.set(1,n,r,0,t,1,s,0,e,i,1,0,0,0,0,1),this}compose(t,e,n){const i=this.elements,r=e._x,s=e._y,o=e._z,a=e._w,l=r+r,c=s+s,u=o+o,h=r*l,d=r*c,p=r*u,_=s*c,m=s*u,f=o*u,g=a*l,v=a*c,y=a*u,x=n.x,b=n.y,w=n.z;return i[0]=(1-(_+f))*x,i[1]=(d+y)*x,i[2]=(p-v)*x,i[3]=0,i[4]=(d-y)*b,i[5]=(1-(h+f))*b,i[6]=(m+g)*b,i[7]=0,i[8]=(p+v)*w,i[9]=(m-g)*w,i[10]=(1-(h+_))*w,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){const i=this.elements;let r=s.set(i[0],i[1],i[2]).length();const a=s.set(i[4],i[5],i[6]).length(),l=s.set(i[8],i[9],i[10]).length();this.determinant()<0&&(r=-r),t.x=i[12],t.y=i[13],t.z=i[14],o.copy(this);const c=1/r,u=1/a,h=1/l;return o.elements[0]*=c,o.elements[1]*=c,o.elements[2]*=c,o.elements[4]*=u,o.elements[5]*=u,o.elements[6]*=u,o.elements[8]*=h,o.elements[9]*=h,o.elements[10]*=h,e.setFromRotationMatrix(o),n.x=r,n.y=a,n.z=l,this}makePerspective(t,e,n,i,r,s){void 0===s&&console.warn(\\\\\\\"THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.\\\\\\\");const o=this.elements,a=2*r/(e-t),l=2*r/(n-i),c=(e+t)/(e-t),u=(n+i)/(n-i),h=-(s+r)/(s-r),d=-2*s*r/(s-r);return o[0]=a,o[4]=0,o[8]=c,o[12]=0,o[1]=0,o[5]=l,o[9]=u,o[13]=0,o[2]=0,o[6]=0,o[10]=h,o[14]=d,o[3]=0,o[7]=0,o[11]=-1,o[15]=0,this}makeOrthographic(t,e,n,i,r,s){const o=this.elements,a=1/(e-t),l=1/(n-i),c=1/(s-r),u=(e+t)*a,h=(n+i)*l,d=(s+r)*c;return o[0]=2*a,o[4]=0,o[8]=0,o[12]=-u,o[1]=0,o[5]=2*l,o[9]=0,o[13]=-h,o[2]=0,o[6]=0,o[10]=-2*c,o[14]=-d,o[3]=0,o[7]=0,o[11]=0,o[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<16;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}r.prototype.isMatrix4=!0;const s=new i.a,o=new r,a=new i.a(0,0,0),l=new i.a(1,1,1),c=new i.a,u=new i.a,h=new i.a},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return u}));var i=n(3);const r={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},s={h:0,s:0,l:0},o={h:0,s:0,l:0};function a(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}function l(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function c(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}class u{constructor(t,e,n){return void 0===e&&void 0===n?this.set(t):this.setRGB(t,e,n)}set(t){return t&&t.isColor?this.copy(t):\\\\\\\"number\\\\\\\"==typeof t?this.setHex(t):\\\\\\\"string\\\\\\\"==typeof t&&this.setStyle(t),this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this}setRGB(t,e,n){return this.r=t,this.g=e,this.b=n,this}setHSL(t,e,n){if(t=i.f(t,1),e=i.d(e,0,1),n=i.d(n,0,1),0===e)this.r=this.g=this.b=n;else{const i=n<=.5?n*(1+e):n+e-n*e,r=2*n-i;this.r=a(r,i,t+1/3),this.g=a(r,i,t),this.b=a(r,i,t-1/3)}return this}setStyle(t){function e(e){void 0!==e&&parseFloat(e)<1&&console.warn(\\\\\\\"THREE.Color: Alpha component of \\\\\\\"+t+\\\\\\\" will be ignored.\\\\\\\")}let n;if(n=/^((?:rgb|hsl)a?)\\\\(([^\\\\)]*)\\\\)/.exec(t)){let t;const i=n[1],r=n[2];switch(i){case\\\\\\\"rgb\\\\\\\":case\\\\\\\"rgba\\\\\\\":if(t=/^\\\\s*(\\\\d+)\\\\s*,\\\\s*(\\\\d+)\\\\s*,\\\\s*(\\\\d+)\\\\s*(?:,\\\\s*(\\\\d*\\\\.?\\\\d+)\\\\s*)?$/.exec(r))return this.r=Math.min(255,parseInt(t[1],10))/255,this.g=Math.min(255,parseInt(t[2],10))/255,this.b=Math.min(255,parseInt(t[3],10))/255,e(t[4]),this;if(t=/^\\\\s*(\\\\d+)\\\\%\\\\s*,\\\\s*(\\\\d+)\\\\%\\\\s*,\\\\s*(\\\\d+)\\\\%\\\\s*(?:,\\\\s*(\\\\d*\\\\.?\\\\d+)\\\\s*)?$/.exec(r))return this.r=Math.min(100,parseInt(t[1],10))/100,this.g=Math.min(100,parseInt(t[2],10))/100,this.b=Math.min(100,parseInt(t[3],10))/100,e(t[4]),this;break;case\\\\\\\"hsl\\\\\\\":case\\\\\\\"hsla\\\\\\\":if(t=/^\\\\s*(\\\\d*\\\\.?\\\\d+)\\\\s*,\\\\s*(\\\\d+)\\\\%\\\\s*,\\\\s*(\\\\d+)\\\\%\\\\s*(?:,\\\\s*(\\\\d*\\\\.?\\\\d+)\\\\s*)?$/.exec(r)){const n=parseFloat(t[1])/360,i=parseInt(t[2],10)/100,r=parseInt(t[3],10)/100;return e(t[4]),this.setHSL(n,i,r)}}}else if(n=/^\\\\#([A-Fa-f\\\\d]+)$/.exec(t)){const t=n[1],e=t.length;if(3===e)return this.r=parseInt(t.charAt(0)+t.charAt(0),16)/255,this.g=parseInt(t.charAt(1)+t.charAt(1),16)/255,this.b=parseInt(t.charAt(2)+t.charAt(2),16)/255,this;if(6===e)return this.r=parseInt(t.charAt(0)+t.charAt(1),16)/255,this.g=parseInt(t.charAt(2)+t.charAt(3),16)/255,this.b=parseInt(t.charAt(4)+t.charAt(5),16)/255,this}return t&&t.length>0?this.setColorName(t):this}setColorName(t){const e=r[t.toLowerCase()];return void 0!==e?this.setHex(e):console.warn(\\\\\\\"THREE.Color: Unknown color \\\\\\\"+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copyGammaToLinear(t,e=2){return this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this}copyLinearToGamma(t,e=2){const n=e>0?1/e:1;return this.r=Math.pow(t.r,n),this.g=Math.pow(t.g,n),this.b=Math.pow(t.b,n),this}convertGammaToLinear(t){return this.copyGammaToLinear(this,t),this}convertLinearToGamma(t){return this.copyLinearToGamma(this,t),this}copySRGBToLinear(t){return this.r=l(t.r),this.g=l(t.g),this.b=l(t.b),this}copyLinearToSRGB(t){return this.r=c(t.r),this.g=c(t.g),this.b=c(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0}getHexString(){return(\\\\\\\"000000\\\\\\\"+this.getHex().toString(16)).slice(-6)}getHSL(t){const e=this.r,n=this.g,i=this.b,r=Math.max(e,n,i),s=Math.min(e,n,i);let o,a;const l=(s+r)/2;if(s===r)o=0,a=0;else{const t=r-s;switch(a=l<=.5?t/(r+s):t/(2-r-s),r){case e:o=(n-i)/t+(n<i?6:0);break;case n:o=(i-e)/t+2;break;case i:o=(e-n)/t+4}o/=6}return t.h=o,t.s=a,t.l=l,t}getStyle(){return\\\\\\\"rgb(\\\\\\\"+(255*this.r|0)+\\\\\\\",\\\\\\\"+(255*this.g|0)+\\\\\\\",\\\\\\\"+(255*this.b|0)+\\\\\\\")\\\\\\\"}offsetHSL(t,e,n){return this.getHSL(s),s.h+=t,s.s+=e,s.l+=n,this.setHSL(s.h,s.s,s.l),this}add(t){return this.r+=t.r,this.g+=t.g,this.b+=t.b,this}addColors(t,e){return this.r=t.r+e.r,this.g=t.g+e.g,this.b=t.b+e.b,this}addScalar(t){return this.r+=t,this.g+=t,this.b+=t,this}sub(t){return this.r=Math.max(0,this.r-t.r),this.g=Math.max(0,this.g-t.g),this.b=Math.max(0,this.b-t.b),this}multiply(t){return this.r*=t.r,this.g*=t.g,this.b*=t.b,this}multiplyScalar(t){return this.r*=t,this.g*=t,this.b*=t,this}lerp(t,e){return this.r+=(t.r-this.r)*e,this.g+=(t.g-this.g)*e,this.b+=(t.b-this.b)*e,this}lerpColors(t,e,n){return this.r=t.r+(e.r-t.r)*n,this.g=t.g+(e.g-t.g)*n,this.b=t.b+(e.b-t.b)*n,this}lerpHSL(t,e){this.getHSL(s),t.getHSL(o);const n=i.j(s.h,o.h,e),r=i.j(s.s,o.s,e),a=i.j(s.l,o.l,e);return this.setHSL(n,r,a),this}equals(t){return t.r===this.r&&t.g===this.g&&t.b===this.b}fromArray(t,e=0){return this.r=t[e],this.g=t[e+1],this.b=t[e+2],this}toArray(t=[],e=0){return t[e]=this.r,t[e+1]=this.g,t[e+2]=this.b,t}fromBufferAttribute(t,e){return this.r=t.getX(e),this.g=t.getY(e),this.b=t.getZ(e),!0===t.normalized&&(this.r/=255,this.g/=255,this.b/=255),this}toJSON(){return this.getHex()}}u.NAMES=r,u.prototype.isColor=!0,u.prototype.r=1,u.prototype.g=1,u.prototype.b=1},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return b}));var i=n(0),r=n(2),s=n(16),o=n(15),a=n(4),l=n(18),c=n(10),u=n(5),h=n(11),d=n(3),p=n(20);let _=0;const m=new u.a,f=new c.a,g=new i.a,v=new s.a,y=new s.a,x=new i.a;class b extends o.a{constructor(){super(),Object.defineProperty(this,\\\\\\\"id\\\\\\\",{value:_++}),this.uuid=d.h(),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(t){return Array.isArray(t)?this.index=new(Object(p.a)(t)>65535?a.i:a.h)(t,1):this.index=t,this}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return void 0!==this.attributes[t]}addGroup(t,e,n=0){this.groups.push({start:t,count:e,materialIndex:n})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){const e=this.attributes.position;void 0!==e&&(e.applyMatrix4(t),e.needsUpdate=!0);const n=this.attributes.normal;if(void 0!==n){const e=(new h.a).getNormalMatrix(t);n.applyNormalMatrix(e),n.needsUpdate=!0}const i=this.attributes.tangent;return void 0!==i&&(i.transformDirection(t),i.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this}applyQuaternion(t){return m.makeRotationFromQuaternion(t),this.applyMatrix4(m),this}rotateX(t){return m.makeRotationX(t),this.applyMatrix4(m),this}rotateY(t){return m.makeRotationY(t),this.applyMatrix4(m),this}rotateZ(t){return m.makeRotationZ(t),this.applyMatrix4(m),this}translate(t,e,n){return m.makeTranslation(t,e,n),this.applyMatrix4(m),this}scale(t,e,n){return m.makeScale(t,e,n),this.applyMatrix4(m),this}lookAt(t){return f.lookAt(t),f.updateMatrix(),this.applyMatrix4(f.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(g).negate(),this.translate(g.x,g.y,g.z),this}setFromPoints(t){const e=[];for(let n=0,i=t.length;n<i;n++){const i=t[n];e.push(i.x,i.y,i.z||0)}return this.setAttribute(\\\\\\\"position\\\\\\\",new a.c(e,3)),this}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new s.a);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute)return console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \\\\\\\"mesh.frustumCulled\\\\\\\" to \\\\\\\"false\\\\\\\".',this),void this.boundingBox.set(new i.a(-1/0,-1/0,-1/0),new i.a(1/0,1/0,1/0));if(void 0!==t){if(this.boundingBox.setFromBufferAttribute(t),e)for(let t=0,n=e.length;t<n;t++){const n=e[t];v.setFromBufferAttribute(n),this.morphTargetsRelative?(x.addVectors(this.boundingBox.min,v.min),this.boundingBox.expandByPoint(x),x.addVectors(this.boundingBox.max,v.max),this.boundingBox.expandByPoint(x)):(this.boundingBox.expandByPoint(v.min),this.boundingBox.expandByPoint(v.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 l.a);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute)return console.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \\\\\\\"mesh.frustumCulled\\\\\\\" to \\\\\\\"false\\\\\\\".',this),void this.boundingSphere.set(new i.a,1/0);if(t){const n=this.boundingSphere.center;if(v.setFromBufferAttribute(t),e)for(let t=0,n=e.length;t<n;t++){const n=e[t];y.setFromBufferAttribute(n),this.morphTargetsRelative?(x.addVectors(v.min,y.min),v.expandByPoint(x),x.addVectors(v.max,y.max),v.expandByPoint(x)):(v.expandByPoint(y.min),v.expandByPoint(y.max))}v.getCenter(n);let i=0;for(let e=0,r=t.count;e<r;e++)x.fromBufferAttribute(t,e),i=Math.max(i,n.distanceToSquared(x));if(e)for(let r=0,s=e.length;r<s;r++){const s=e[r],o=this.morphTargetsRelative;for(let e=0,r=s.count;e<r;e++)x.fromBufferAttribute(s,e),o&&(g.fromBufferAttribute(t,e),x.add(g)),i=Math.max(i,n.distanceToSquared(x))}this.boundingSphere.radius=Math.sqrt(i),isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \\\\\\\"position\\\\\\\" attribute is likely to have NaN values.',this)}}computeTangents(){const t=this.index,e=this.attributes;if(null===t||void 0===e.position||void 0===e.normal||void 0===e.uv)return void console.error(\\\\\\\"THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)\\\\\\\");const n=t.array,s=e.position.array,o=e.normal.array,l=e.uv.array,c=s.length/3;void 0===e.tangent&&this.setAttribute(\\\\\\\"tangent\\\\\\\",new a.a(new Float32Array(4*c),4));const u=e.tangent.array,h=[],d=[];for(let t=0;t<c;t++)h[t]=new i.a,d[t]=new i.a;const p=new i.a,_=new i.a,m=new i.a,f=new r.a,g=new r.a,v=new r.a,y=new i.a,x=new i.a;function b(t,e,n){p.fromArray(s,3*t),_.fromArray(s,3*e),m.fromArray(s,3*n),f.fromArray(l,2*t),g.fromArray(l,2*e),v.fromArray(l,2*n),_.sub(p),m.sub(p),g.sub(f),v.sub(f);const i=1/(g.x*v.y-v.x*g.y);isFinite(i)&&(y.copy(_).multiplyScalar(v.y).addScaledVector(m,-g.y).multiplyScalar(i),x.copy(m).multiplyScalar(g.x).addScaledVector(_,-v.x).multiplyScalar(i),h[t].add(y),h[e].add(y),h[n].add(y),d[t].add(x),d[e].add(x),d[n].add(x))}let w=this.groups;0===w.length&&(w=[{start:0,count:n.length}]);for(let t=0,e=w.length;t<e;++t){const e=w[t],i=e.start;for(let t=i,r=i+e.count;t<r;t+=3)b(n[t+0],n[t+1],n[t+2])}const T=new i.a,A=new i.a,E=new i.a,M=new i.a;function S(t){E.fromArray(o,3*t),M.copy(E);const e=h[t];T.copy(e),T.sub(E.multiplyScalar(E.dot(e))).normalize(),A.crossVectors(M,e);const n=A.dot(d[t])<0?-1:1;u[4*t]=T.x,u[4*t+1]=T.y,u[4*t+2]=T.z,u[4*t+3]=n}for(let t=0,e=w.length;t<e;++t){const e=w[t],i=e.start;for(let t=i,r=i+e.count;t<r;t+=3)S(n[t+0]),S(n[t+1]),S(n[t+2])}}computeVertexNormals(){const t=this.index,e=this.getAttribute(\\\\\\\"position\\\\\\\");if(void 0!==e){let n=this.getAttribute(\\\\\\\"normal\\\\\\\");if(void 0===n)n=new a.a(new Float32Array(3*e.count),3),this.setAttribute(\\\\\\\"normal\\\\\\\",n);else for(let t=0,e=n.count;t<e;t++)n.setXYZ(t,0,0,0);const r=new i.a,s=new i.a,o=new i.a,l=new i.a,c=new i.a,u=new i.a,h=new i.a,d=new i.a;if(t)for(let i=0,a=t.count;i<a;i+=3){const a=t.getX(i+0),p=t.getX(i+1),_=t.getX(i+2);r.fromBufferAttribute(e,a),s.fromBufferAttribute(e,p),o.fromBufferAttribute(e,_),h.subVectors(o,s),d.subVectors(r,s),h.cross(d),l.fromBufferAttribute(n,a),c.fromBufferAttribute(n,p),u.fromBufferAttribute(n,_),l.add(h),c.add(h),u.add(h),n.setXYZ(a,l.x,l.y,l.z),n.setXYZ(p,c.x,c.y,c.z),n.setXYZ(_,u.x,u.y,u.z)}else for(let t=0,i=e.count;t<i;t+=3)r.fromBufferAttribute(e,t+0),s.fromBufferAttribute(e,t+1),o.fromBufferAttribute(e,t+2),h.subVectors(o,s),d.subVectors(r,s),h.cross(d),n.setXYZ(t+0,h.x,h.y,h.z),n.setXYZ(t+1,h.x,h.y,h.z),n.setXYZ(t+2,h.x,h.y,h.z);this.normalizeNormals(),n.needsUpdate=!0}}merge(t,e){if(!t||!t.isBufferGeometry)return void console.error(\\\\\\\"THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.\\\\\\\",t);void 0===e&&(e=0,console.warn(\\\\\\\"THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.\\\\\\\"));const n=this.attributes;for(const i in n){if(void 0===t.attributes[i])continue;const r=n[i].array,s=t.attributes[i],o=s.array,a=s.itemSize*e,l=Math.min(o.length,r.length-a);for(let t=0,e=a;t<l;t++,e++)r[e]=o[t]}return this}normalizeNormals(){const t=this.attributes.normal;for(let e=0,n=t.count;e<n;e++)x.fromBufferAttribute(t,e),x.normalize(),t.setXYZ(e,x.x,x.y,x.z)}toNonIndexed(){function t(t,e){const n=t.array,i=t.itemSize,r=t.normalized,s=new n.constructor(e.length*i);let o=0,l=0;for(let r=0,a=e.length;r<a;r++){o=t.isInterleavedBufferAttribute?e[r]*t.data.stride+t.offset:e[r]*i;for(let t=0;t<i;t++)s[l++]=n[o++]}return new a.a(s,i,r)}if(null===this.index)return console.warn(\\\\\\\"THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.\\\\\\\"),this;const e=new b,n=this.index.array,i=this.attributes;for(const r in i){const s=t(i[r],n);e.setAttribute(r,s)}const r=this.morphAttributes;for(const i in r){const s=[],o=r[i];for(let e=0,i=o.length;e<i;e++){const i=t(o[e],n);s.push(i)}e.morphAttributes[i]=s}e.morphTargetsRelative=this.morphTargetsRelative;const s=this.groups;for(let t=0,n=s.length;t<n;t++){const n=s[t];e.addGroup(n.start,n.count,n.materialIndex)}return e}toJSON(){const t={metadata:{version:4.5,type:\\\\\\\"BufferGeometry\\\\\\\",generator:\\\\\\\"BufferGeometry.toJSON\\\\\\\"}};if(t.uuid=this.uuid,t.type=this.type,\\\\\\\"\\\\\\\"!==this.name&&(t.name=this.name),Object.keys(this.userData).length>0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]&&(t[n]=e[n]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const e in n){const i=n[e];t.data.attributes[e]=i.toJSON(t.data)}const i={};let r=!1;for(const e in this.morphAttributes){const n=this.morphAttributes[e],s=[];for(let e=0,i=n.length;e<i;e++){const i=n[e];s.push(i.toJSON(t.data))}s.length>0&&(i[e]=s,r=!0)}r&&(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);const s=this.groups;s.length>0&&(t.data.groups=JSON.parse(JSON.stringify(s)));const o=this.boundingSphere;return null!==o&&(t.data.boundingSphere={center:o.center.toArray(),radius:o.radius}),t}clone(){return(new this.constructor).copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;null!==n&&this.setIndex(n.clone(e));const i=t.attributes;for(const t in i){const n=i[t];this.setAttribute(t,n.clone(e))}const r=t.morphAttributes;for(const t in r){const n=[],i=r[t];for(let t=0,r=i.length;t<r;t++)n.push(i[t].clone(e));this.morphAttributes[t]=n}this.morphTargetsRelative=t.morphTargetsRelative;const s=t.groups;for(let t=0,e=s.length;t<e;t++){const e=s[t];this.addGroup(e.start,e.count,e.materialIndex)}const o=t.boundingBox;null!==o&&(this.boundingBox=o.clone());const a=t.boundingSphere;return null!==a&&(this.boundingSphere=a.clone()),this.drawRange.start=t.drawRange.start,this.drawRange.count=t.drawRange.count,this.userData=t.userData,void 0!==t.parameters&&(this.parameters=Object.assign({},t.parameters)),this}dispose(){this.dispatchEvent({type:\\\\\\\"dispose\\\\\\\"})}}b.prototype.isBufferGeometry=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r}));var i=n(3);class r{constructor(t=0,e=0,n=0,i=1){this._x=t,this._y=e,this._z=n,this._w=i}static slerp(t,e,n,i){return console.warn(\\\\\\\"THREE.Quaternion: Static .slerp() has been deprecated. Use qm.slerpQuaternions( qa, qb, t ) instead.\\\\\\\"),n.slerpQuaternions(t,e,i)}static slerpFlat(t,e,n,i,r,s,o){let a=n[i+0],l=n[i+1],c=n[i+2],u=n[i+3];const h=r[s+0],d=r[s+1],p=r[s+2],_=r[s+3];if(0===o)return t[e+0]=a,t[e+1]=l,t[e+2]=c,void(t[e+3]=u);if(1===o)return t[e+0]=h,t[e+1]=d,t[e+2]=p,void(t[e+3]=_);if(u!==_||a!==h||l!==d||c!==p){let t=1-o;const e=a*h+l*d+c*p+u*_,n=e>=0?1:-1,i=1-e*e;if(i>Number.EPSILON){const r=Math.sqrt(i),s=Math.atan2(r,e*n);t=Math.sin(t*s)/r,o=Math.sin(o*s)/r}const r=o*n;if(a=a*t+h*r,l=l*t+d*r,c=c*t+p*r,u=u*t+_*r,t===1-o){const t=1/Math.sqrt(a*a+l*l+c*c+u*u);a*=t,l*=t,c*=t,u*=t}}t[e]=a,t[e+1]=l,t[e+2]=c,t[e+3]=u}static multiplyQuaternionsFlat(t,e,n,i,r,s){const o=n[i],a=n[i+1],l=n[i+2],c=n[i+3],u=r[s],h=r[s+1],d=r[s+2],p=r[s+3];return t[e]=o*p+c*u+a*d-l*h,t[e+1]=a*p+c*h+l*u-o*d,t[e+2]=l*p+c*d+o*h-a*u,t[e+3]=c*p-o*u-a*h-l*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e){if(!t||!t.isEuler)throw new Error(\\\\\\\"THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.\\\\\\\");const n=t._x,i=t._y,r=t._z,s=t._order,o=Math.cos,a=Math.sin,l=o(n/2),c=o(i/2),u=o(r/2),h=a(n/2),d=a(i/2),p=a(r/2);switch(s){case\\\\\\\"XYZ\\\\\\\":this._x=h*c*u+l*d*p,this._y=l*d*u-h*c*p,this._z=l*c*p+h*d*u,this._w=l*c*u-h*d*p;break;case\\\\\\\"YXZ\\\\\\\":this._x=h*c*u+l*d*p,this._y=l*d*u-h*c*p,this._z=l*c*p-h*d*u,this._w=l*c*u+h*d*p;break;case\\\\\\\"ZXY\\\\\\\":this._x=h*c*u-l*d*p,this._y=l*d*u+h*c*p,this._z=l*c*p+h*d*u,this._w=l*c*u-h*d*p;break;case\\\\\\\"ZYX\\\\\\\":this._x=h*c*u-l*d*p,this._y=l*d*u+h*c*p,this._z=l*c*p-h*d*u,this._w=l*c*u+h*d*p;break;case\\\\\\\"YZX\\\\\\\":this._x=h*c*u+l*d*p,this._y=l*d*u+h*c*p,this._z=l*c*p-h*d*u,this._w=l*c*u-h*d*p;break;case\\\\\\\"XZY\\\\\\\":this._x=h*c*u-l*d*p,this._y=l*d*u-h*c*p,this._z=l*c*p+h*d*u,this._w=l*c*u+h*d*p;break;default:console.warn(\\\\\\\"THREE.Quaternion: .setFromEuler() encountered an unknown order: \\\\\\\"+s)}return!1!==e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],i=e[4],r=e[8],s=e[1],o=e[5],a=e[9],l=e[2],c=e[6],u=e[10],h=n+o+u;if(h>0){const t=.5/Math.sqrt(h+1);this._w=.25/t,this._x=(c-a)*t,this._y=(r-l)*t,this._z=(s-i)*t}else if(n>o&&n>u){const t=2*Math.sqrt(1+n-o-u);this._w=(c-a)/t,this._x=.25*t,this._y=(i+s)/t,this._z=(r+l)/t}else if(o>u){const t=2*Math.sqrt(1+o-n-u);this._w=(r-l)/t,this._x=(i+s)/t,this._y=.25*t,this._z=(a+c)/t}else{const t=2*Math.sqrt(1+u-n-o);this._w=(s-i)/t,this._x=(r+l)/t,this._y=(a+c)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return n<Number.EPSILON?(n=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(i.d(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(0===n)return this;const i=Math.min(1,e/n);return this.slerp(t,i),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(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._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 t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.\\\\\\\"),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,i=t._y,r=t._z,s=t._w,o=e._x,a=e._y,l=e._z,c=e._w;return this._x=n*c+s*o+i*l-r*a,this._y=i*c+s*a+r*o-n*l,this._z=r*c+s*l+n*a-i*o,this._w=s*c-n*o-i*a-r*l,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const n=this._x,i=this._y,r=this._z,s=this._w;let o=s*t._w+n*t._x+i*t._y+r*t._z;if(o<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,o=-o):this.copy(t),o>=1)return this._w=s,this._x=n,this._y=i,this._z=r,this;const a=1-o*o;if(a<=Number.EPSILON){const t=1-e;return this._w=t*s+e*this._w,this._x=t*n+e*this._x,this._y=t*i+e*this._y,this._z=t*r+e*this._z,this.normalize(),this._onChangeCallback(),this}const l=Math.sqrt(a),c=Math.atan2(l,o),u=Math.sin((1-e)*c)/l,h=Math.sin(e*c)/l;return this._w=s*u+this._w*h,this._x=n*u+this._x*h,this._y=i*u+this._y*h,this._z=r*u+this._z*h,this._onChangeCallback(),this}slerpQuaternions(t,e,n){this.copy(t).slerp(e,n)}random(){const t=Math.random(),e=Math.sqrt(1-t),n=Math.sqrt(t),i=2*Math.PI*Math.random(),r=2*Math.PI*Math.random();return this.set(e*Math.cos(i),n*Math.sin(r),n*Math.cos(r),e*Math.sin(i))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}r.prototype.isQuaternion=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return i}));class i{constructor(t=0,e=0,n=0,i=1){this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error(\\\\\\\"index is out of range: \\\\\\\"+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error(\\\\\\\"index is out of range: \\\\\\\"+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\\\\\\\"),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\\\\\\\"),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=this.w,s=t.elements;return this.x=s[0]*e+s[4]*n+s[8]*i+s[12]*r,this.y=s[1]*e+s[5]*n+s[9]*i+s[13]*r,this.z=s[2]*e+s[6]*n+s[10]*i+s[14]*r,this.w=s[3]*e+s[7]*n+s[11]*i+s[15]*r,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,r;const s=.01,o=.1,a=t.elements,l=a[0],c=a[4],u=a[8],h=a[1],d=a[5],p=a[9],_=a[2],m=a[6],f=a[10];if(Math.abs(c-h)<s&&Math.abs(u-_)<s&&Math.abs(p-m)<s){if(Math.abs(c+h)<o&&Math.abs(u+_)<o&&Math.abs(p+m)<o&&Math.abs(l+d+f-3)<o)return this.set(1,0,0,0),this;e=Math.PI;const t=(l+1)/2,a=(d+1)/2,g=(f+1)/2,v=(c+h)/4,y=(u+_)/4,x=(p+m)/4;return t>a&&t>g?t<s?(n=0,i=.707106781,r=.707106781):(n=Math.sqrt(t),i=v/n,r=y/n):a>g?a<s?(n=.707106781,i=0,r=.707106781):(i=Math.sqrt(a),n=v/i,r=x/i):g<s?(n=.707106781,i=.707106781,r=0):(r=Math.sqrt(g),n=y/r,i=x/r),this.set(n,i,r,e),this}let g=Math.sqrt((m-p)*(m-p)+(u-_)*(u-_)+(h-c)*(h-c));return Math.abs(g)<.001&&(g=1),this.x=(m-p)/g,this.y=(u-_)/g,this.z=(h-c)/g,this.w=Math.acos((l+d+f-1)/2),this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this.w=Math.max(t.w,Math.min(e.w,this.w)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this.w=Math.max(t,Math.min(e,this.w)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}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(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.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(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this.w=t.w+(e.w-t.w)*n,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn(\\\\\\\"THREE.Vector4: offset has been removed from .fromBufferAttribute().\\\\\\\"),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),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}}i.prototype.isVector4=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return A}));var i=n(8),r=n(0),s=n(5),o=n(15),a=n(28),l=n(36),c=n(11),u=n(3);let h=0;const d=new r.a,p=new i.a,_=new s.a,m=new r.a,f=new r.a,g=new r.a,v=new i.a,y=new r.a(1,0,0),x=new r.a(0,1,0),b=new r.a(0,0,1),w={type:\\\\\\\"added\\\\\\\"},T={type:\\\\\\\"removed\\\\\\\"};class A extends o.a{constructor(){super(),Object.defineProperty(this,\\\\\\\"id\\\\\\\",{value:h++}),this.uuid=u.h(),this.name=\\\\\\\"\\\\\\\",this.type=\\\\\\\"Object3D\\\\\\\",this.parent=null,this.children=[],this.up=A.DefaultUp.clone();const t=new r.a,e=new a.a,n=new i.a,o=new r.a(1,1,1);e._onChange((function(){n.setFromEuler(e,!1)})),n._onChange((function(){e.setFromQuaternion(n,void 0,!1)})),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:e},quaternion:{configurable:!0,enumerable:!0,value:n},scale:{configurable:!0,enumerable:!0,value:o},modelViewMatrix:{value:new s.a},normalMatrix:{value:new c.a}}),this.matrix=new s.a,this.matrixWorld=new s.a,this.matrixAutoUpdate=A.DefaultMatrixAutoUpdate,this.matrixWorldNeedsUpdate=!1,this.layers=new l.a,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.userData={}}onBeforeRender(){}onAfterRender(){}applyMatrix4(t){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(t),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(t){return this.quaternion.premultiply(t),this}setRotationFromAxisAngle(t,e){this.quaternion.setFromAxisAngle(t,e)}setRotationFromEuler(t){this.quaternion.setFromEuler(t,!0)}setRotationFromMatrix(t){this.quaternion.setFromRotationMatrix(t)}setRotationFromQuaternion(t){this.quaternion.copy(t)}rotateOnAxis(t,e){return p.setFromAxisAngle(t,e),this.quaternion.multiply(p),this}rotateOnWorldAxis(t,e){return p.setFromAxisAngle(t,e),this.quaternion.premultiply(p),this}rotateX(t){return this.rotateOnAxis(y,t)}rotateY(t){return this.rotateOnAxis(x,t)}rotateZ(t){return this.rotateOnAxis(b,t)}translateOnAxis(t,e){return d.copy(t).applyQuaternion(this.quaternion),this.position.add(d.multiplyScalar(e)),this}translateX(t){return this.translateOnAxis(y,t)}translateY(t){return this.translateOnAxis(x,t)}translateZ(t){return this.translateOnAxis(b,t)}localToWorld(t){return t.applyMatrix4(this.matrixWorld)}worldToLocal(t){return t.applyMatrix4(_.copy(this.matrixWorld).invert())}lookAt(t,e,n){t.isVector3?m.copy(t):m.set(t,e,n);const i=this.parent;this.updateWorldMatrix(!0,!1),f.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?_.lookAt(f,m,this.up):_.lookAt(m,f,this.up),this.quaternion.setFromRotationMatrix(_),i&&(_.extractRotation(i.matrixWorld),p.setFromRotationMatrix(_),this.quaternion.premultiply(p.invert()))}add(t){if(arguments.length>1){for(let t=0;t<arguments.length;t++)this.add(arguments[t]);return this}return t===this?(console.error(\\\\\\\"THREE.Object3D.add: object can't be added as a child of itself.\\\\\\\",t),this):(t&&t.isObject3D?(null!==t.parent&&t.parent.remove(t),t.parent=this,this.children.push(t),t.dispatchEvent(w)):console.error(\\\\\\\"THREE.Object3D.add: object not an instance of THREE.Object3D.\\\\\\\",t),this)}remove(t){if(arguments.length>1){for(let t=0;t<arguments.length;t++)this.remove(arguments[t]);return this}const e=this.children.indexOf(t);return-1!==e&&(t.parent=null,this.children.splice(e,1),t.dispatchEvent(T)),this}removeFromParent(){const t=this.parent;return null!==t&&t.remove(this),this}clear(){for(let t=0;t<this.children.length;t++){const e=this.children[t];e.parent=null,e.dispatchEvent(T)}return this.children.length=0,this}attach(t){return this.updateWorldMatrix(!0,!1),_.copy(this.matrixWorld).invert(),null!==t.parent&&(t.parent.updateWorldMatrix(!0,!1),_.multiply(t.parent.matrixWorld)),t.applyMatrix4(_),this.add(t),t.updateWorldMatrix(!1,!0),this}getObjectById(t){return this.getObjectByProperty(\\\\\\\"id\\\\\\\",t)}getObjectByName(t){return this.getObjectByProperty(\\\\\\\"name\\\\\\\",t)}getObjectByProperty(t,e){if(this[t]===e)return this;for(let n=0,i=this.children.length;n<i;n++){const i=this.children[n].getObjectByProperty(t,e);if(void 0!==i)return i}}getWorldPosition(t){return this.updateWorldMatrix(!0,!1),t.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(f,t,g),t}getWorldScale(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(f,v,t),t}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(e[8],e[9],e[10]).normalize()}raycast(){}traverse(t){t(this);const e=this.children;for(let n=0,i=e.length;n<i;n++)e[n].traverse(t)}traverseVisible(t){if(!1===this.visible)return;t(this);const e=this.children;for(let n=0,i=e.length;n<i;n++)e[n].traverseVisible(t)}traverseAncestors(t){const e=this.parent;null!==e&&(t(e),e.traverseAncestors(t))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(t){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||t)&&(null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1,t=!0);const e=this.children;for(let n=0,i=e.length;n<i;n++)e[n].updateMatrixWorld(t)}updateWorldMatrix(t,e){const n=this.parent;if(!0===t&&null!==n&&n.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),!0===e){const t=this.children;for(let e=0,n=t.length;e<n;e++)t[e].updateWorldMatrix(!1,!0)}}toJSON(t){const e=void 0===t||\\\\\\\"string\\\\\\\"==typeof t,n={};e&&(t={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{}},n.metadata={version:4.5,type:\\\\\\\"Object\\\\\\\",generator:\\\\\\\"Object3D.toJSON\\\\\\\"});const i={};function r(e,n){return void 0===e[n.uuid]&&(e[n.uuid]=n.toJSON(t)),n.uuid}if(i.uuid=this.uuid,i.type=this.type,\\\\\\\"\\\\\\\"!==this.name&&(i.name=this.name),!0===this.castShadow&&(i.castShadow=!0),!0===this.receiveShadow&&(i.receiveShadow=!0),!1===this.visible&&(i.visible=!1),!1===this.frustumCulled&&(i.frustumCulled=!1),0!==this.renderOrder&&(i.renderOrder=this.renderOrder),\\\\\\\"{}\\\\\\\"!==JSON.stringify(this.userData)&&(i.userData=this.userData),i.layers=this.layers.mask,i.matrix=this.matrix.toArray(),!1===this.matrixAutoUpdate&&(i.matrixAutoUpdate=!1),this.isInstancedMesh&&(i.type=\\\\\\\"InstancedMesh\\\\\\\",i.count=this.count,i.instanceMatrix=this.instanceMatrix.toJSON(),null!==this.instanceColor&&(i.instanceColor=this.instanceColor.toJSON())),this.isScene)this.background&&(this.background.isColor?i.background=this.background.toJSON():this.background.isTexture&&(i.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&(i.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){i.geometry=r(t.geometries,this.geometry);const e=this.geometry.parameters;if(void 0!==e&&void 0!==e.shapes){const n=e.shapes;if(Array.isArray(n))for(let e=0,i=n.length;e<i;e++){const i=n[e];r(t.shapes,i)}else r(t.shapes,n)}}if(this.isSkinnedMesh&&(i.bindMode=this.bindMode,i.bindMatrix=this.bindMatrix.toArray(),void 0!==this.skeleton&&(r(t.skeletons,this.skeleton),i.skeleton=this.skeleton.uuid)),void 0!==this.material)if(Array.isArray(this.material)){const e=[];for(let n=0,i=this.material.length;n<i;n++)e.push(r(t.materials,this.material[n]));i.material=e}else i.material=r(t.materials,this.material);if(this.children.length>0){i.children=[];for(let e=0;e<this.children.length;e++)i.children.push(this.children[e].toJSON(t).object)}if(this.animations.length>0){i.animations=[];for(let e=0;e<this.animations.length;e++){const n=this.animations[e];i.animations.push(r(t.animations,n))}}if(e){const e=s(t.geometries),i=s(t.materials),r=s(t.textures),o=s(t.images),a=s(t.shapes),l=s(t.skeletons),c=s(t.animations);e.length>0&&(n.geometries=e),i.length>0&&(n.materials=i),r.length>0&&(n.textures=r),o.length>0&&(n.images=o),a.length>0&&(n.shapes=a),l.length>0&&(n.skeletons=l),c.length>0&&(n.animations=c)}return n.object=i,n;function s(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}}clone(t){return(new this.constructor).copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e<t.children.length;e++){const n=t.children[e];this.add(n.clone())}return this}}A.DefaultUp=new r.a(0,1,0),A.DefaultMatrixAutoUpdate=!0,A.prototype.isObject3D=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return i}));class i{constructor(){this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error(\\\\\\\"THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.\\\\\\\")}set(t,e,n,i,r,s,o,a,l){const c=this.elements;return c[0]=t,c[1]=i,c[2]=o,c[3]=e,c[4]=r,c[5]=a,c[6]=n,c[7]=s,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,s=n[0],o=n[3],a=n[6],l=n[1],c=n[4],u=n[7],h=n[2],d=n[5],p=n[8],_=i[0],m=i[3],f=i[6],g=i[1],v=i[4],y=i[7],x=i[2],b=i[5],w=i[8];return r[0]=s*_+o*g+a*x,r[3]=s*m+o*v+a*b,r[6]=s*f+o*y+a*w,r[1]=l*_+c*g+u*x,r[4]=l*m+c*v+u*b,r[7]=l*f+c*y+u*w,r[2]=h*_+d*g+p*x,r[5]=h*m+d*v+p*b,r[8]=h*f+d*y+p*w,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],o=t[5],a=t[6],l=t[7],c=t[8];return e*s*c-e*o*l-n*r*c+n*o*a+i*r*l-i*s*a}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],o=t[5],a=t[6],l=t[7],c=t[8],u=c*s-o*l,h=o*a-c*r,d=l*r-s*a,p=e*u+n*h+i*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const _=1/p;return t[0]=u*_,t[1]=(i*l-c*n)*_,t[2]=(o*n-i*s)*_,t[3]=h*_,t[4]=(c*e-i*a)*_,t[5]=(i*r-o*e)*_,t[6]=d*_,t[7]=(n*a-l*e)*_,t[8]=(s*e-n*r)*_,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,r,s,o){const a=Math.cos(r),l=Math.sin(r);return this.set(n*a,n*l,-n*(a*s+l*o)+s+t,-i*l,i*a,-i*(-l*s+a*o)+o+e,0,0,1),this}scale(t,e){const n=this.elements;return n[0]*=t,n[3]*=t,n[6]*=t,n[1]*=e,n[4]*=e,n[7]*=e,this}rotate(t){const e=Math.cos(t),n=Math.sin(t),i=this.elements,r=i[0],s=i[3],o=i[6],a=i[1],l=i[4],c=i[7];return i[0]=e*r+n*a,i[3]=e*s+n*l,i[6]=e*o+n*c,i[1]=-n*r+e*a,i[4]=-n*s+e*l,i[7]=-n*o+e*c,this}translate(t,e){const n=this.elements;return n[0]+=t*n[2],n[3]+=t*n[5],n[6]+=t*n[8],n[1]+=e*n[2],n[4]+=e*n[5],n[7]+=e*n[8],this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<9;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}clone(){return(new this.constructor).fromArray(this.elements)}}i.prototype.isMatrix3=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return a}));var i=n(15),r=n(1),s=n(3);let o=0;class a extends i.a{constructor(){super(),Object.defineProperty(this,\\\\\\\"id\\\\\\\",{value:o++}),this.uuid=s.h(),this.name=\\\\\\\"\\\\\\\",this.type=\\\\\\\"Material\\\\\\\",this.fog=!0,this.blending=r.xb,this.side=r.H,this.vertexColors=!1,this.opacity=1,this.format=r.Ib,this.transparent=!1,this.blendSrc=r.Nc,this.blendDst=r.Db,this.blendEquation=r.b,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=r.T,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=r.h,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=r.R,this.stencilZFail=r.R,this.stencilZPass=r.R,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.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(t){this._alphaTest>0!=t>0&&this.version++,this._alphaTest=t}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(void 0!==t)for(const e in t){const n=t[e];if(void 0===n){console.warn(\\\\\\\"THREE.Material: '\\\\\\\"+e+\\\\\\\"' parameter is undefined.\\\\\\\");continue}if(\\\\\\\"shading\\\\\\\"===e){console.warn(\\\\\\\"THREE.\\\\\\\"+this.type+\\\\\\\": .shading has been removed. Use the boolean .flatShading instead.\\\\\\\"),this.flatShading=n===r.F;continue}const i=this[e];void 0!==i?i&&i.isColor?i.set(n):i&&i.isVector3&&n&&n.isVector3?i.copy(n):this[e]=n:console.warn(\\\\\\\"THREE.\\\\\\\"+this.type+\\\\\\\": '\\\\\\\"+e+\\\\\\\"' is not a property of this material.\\\\\\\")}}toJSON(t){const e=void 0===t||\\\\\\\"string\\\\\\\"==typeof t;e&&(t={textures:{},images:{}});const n={metadata:{version:4.5,type:\\\\\\\"Material\\\\\\\",generator:\\\\\\\"Material.toJSON\\\\\\\"}};function i(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}if(n.uuid=this.uuid,n.type=this.type,\\\\\\\"\\\\\\\"!==this.name&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),void 0!==this.roughness&&(n.roughness=this.roughness),void 0!==this.metalness&&(n.metalness=this.metalness),void 0!==this.sheen&&(n.sheen=this.sheen),this.sheenTint&&this.sheenTint.isColor&&(n.sheenTint=this.sheenTint.getHex()),void 0!==this.sheenRoughness&&(n.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.emissiveIntensity&&1!==this.emissiveIntensity&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),void 0!==this.specularIntensity&&(n.specularIntensity=this.specularIntensity),this.specularTint&&this.specularTint.isColor&&(n.specularTint=this.specularTint.getHex()),void 0!==this.shininess&&(n.shininess=this.shininess),void 0!==this.clearcoat&&(n.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(t).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(t).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(t).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(t).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(t).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(n.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularTintMap&&this.specularTintMap.isTexture&&(n.specularTintMap=this.specularTintMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(t).uuid,void 0!==this.combine&&(n.combine=this.combine)),void 0!==this.envMapIntensity&&(n.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(n.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.transmission&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(t).uuid),void 0!==this.thickness&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(t).uuid),void 0!==this.attenuationDistance&&(n.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationTint&&(n.attenuationTint=this.attenuationTint.getHex()),void 0!==this.size&&(n.size=this.size),null!==this.shadowSide&&(n.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(n.sizeAttenuation=this.sizeAttenuation),this.blending!==r.xb&&(n.blending=this.blending),this.side!==r.H&&(n.side=this.side),this.vertexColors&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),this.format!==r.Ib&&(n.format=this.format),!0===this.transparent&&(n.transparent=this.transparent),n.depthFunc=this.depthFunc,n.depthTest=this.depthTest,n.depthWrite=this.depthWrite,n.colorWrite=this.colorWrite,n.stencilWrite=this.stencilWrite,n.stencilWriteMask=this.stencilWriteMask,n.stencilFunc=this.stencilFunc,n.stencilRef=this.stencilRef,n.stencilFuncMask=this.stencilFuncMask,n.stencilFail=this.stencilFail,n.stencilZFail=this.stencilZFail,n.stencilZPass=this.stencilZPass,this.rotation&&0!==this.rotation&&(n.rotation=this.rotation),!0===this.polygonOffset&&(n.polygonOffset=!0),0!==this.polygonOffsetFactor&&(n.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(n.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth&&1!==this.linewidth&&(n.linewidth=this.linewidth),void 0!==this.dashSize&&(n.dashSize=this.dashSize),void 0!==this.gapSize&&(n.gapSize=this.gapSize),void 0!==this.scale&&(n.scale=this.scale),!0===this.dithering&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),!0===this.alphaToCoverage&&(n.alphaToCoverage=this.alphaToCoverage),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(n.wireframe=this.wireframe),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),\\\\\\\"round\\\\\\\"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),\\\\\\\"round\\\\\\\"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading&&(n.flatShading=this.flatShading),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),\\\\\\\"{}\\\\\\\"!==JSON.stringify(this.userData)&&(n.userData=this.userData),e){const e=i(t.textures),r=i(t.images);e.length>0&&(n.textures=e),r.length>0&&(n.images=r)}return n}clone(){return(new this.constructor).copy(this)}copy(t){this.name=t.name,this.fog=t.fog,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.format=t.format,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(null!==e){const t=e.length;n=new Array(t);for(let i=0;i!==t;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:\\\\\\\"dispose\\\\\\\"})}set needsUpdate(t){!0===t&&this.version++}}a.prototype.isMaterial=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r}));var i=n(29);class r{constructor(t){this.manager=void 0!==t?t:i.a,this.crossOrigin=\\\\\\\"anonymous\\\\\\\",this.withCredentials=!1,this.path=\\\\\\\"\\\\\\\",this.resourcePath=\\\\\\\"\\\\\\\",this.requestHeader={}}load(){}loadAsync(t,e){const n=this;return new Promise((function(i,r){n.load(t,i,e,r)}))}parse(){}setCrossOrigin(t){return this.crossOrigin=t,this}setWithCredentials(t){return this.withCredentials=t,this}setPath(t){return this.path=t,this}setResourcePath(t){return this.resourcePath=t,this}setRequestHeader(t){return this.requestHeader=t,this}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return L}));var i=n(0),r=n(2),s=n(18),o=n(39),a=n(5),l=n(10),c=n(40),u=n(1),h=n(27),d=n(7);const p=new a.a,_=new o.a,m=new s.a,f=new i.a,g=new i.a,v=new i.a,y=new i.a,x=new i.a,b=new i.a,w=new i.a,T=new i.a,A=new i.a,E=new r.a,M=new r.a,S=new r.a,C=new i.a,N=new i.a;class L extends l.a{constructor(t=new d.a,e=new h.a){super(),this.type=\\\\\\\"Mesh\\\\\\\",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t){return super.copy(t),void 0!==t.morphTargetInfluences&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),void 0!==t.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=t.material,this.geometry=t.geometry,this}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e<n;e++){const n=t[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[n]=e}}}}else{const e=t.morphTargets;void 0!==e&&e.length>0&&console.error(\\\\\\\"THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\")}}raycast(t,e){const n=this.geometry,i=this.material,r=this.matrixWorld;if(void 0===i)return;if(null===n.boundingSphere&&n.computeBoundingSphere(),m.copy(n.boundingSphere),m.applyMatrix4(r),!1===t.ray.intersectsSphere(m))return;if(p.copy(r).invert(),_.copy(t.ray).applyMatrix4(p),null!==n.boundingBox&&!1===_.intersectsBox(n.boundingBox))return;let s;if(n.isBufferGeometry){const r=n.index,o=n.attributes.position,a=n.morphAttributes.position,l=n.morphTargetsRelative,c=n.attributes.uv,u=n.attributes.uv2,h=n.groups,d=n.drawRange;if(null!==r)if(Array.isArray(i))for(let n=0,p=h.length;n<p;n++){const p=h[n],m=i[p.materialIndex];for(let n=Math.max(p.start,d.start),i=Math.min(r.count,Math.min(p.start+p.count,d.start+d.count));n<i;n+=3){const i=r.getX(n),h=r.getX(n+1),d=r.getX(n+2);s=O(this,m,t,_,o,a,l,c,u,i,h,d),s&&(s.faceIndex=Math.floor(n/3),s.face.materialIndex=p.materialIndex,e.push(s))}}else{for(let n=Math.max(0,d.start),h=Math.min(r.count,d.start+d.count);n<h;n+=3){const h=r.getX(n),d=r.getX(n+1),p=r.getX(n+2);s=O(this,i,t,_,o,a,l,c,u,h,d,p),s&&(s.faceIndex=Math.floor(n/3),e.push(s))}}else if(void 0!==o)if(Array.isArray(i))for(let n=0,r=h.length;n<r;n++){const r=h[n],p=i[r.materialIndex];for(let n=Math.max(r.start,d.start),i=Math.min(o.count,Math.min(r.start+r.count,d.start+d.count));n<i;n+=3){s=O(this,p,t,_,o,a,l,c,u,n,n+1,n+2),s&&(s.faceIndex=Math.floor(n/3),s.face.materialIndex=r.materialIndex,e.push(s))}}else{for(let n=Math.max(0,d.start),r=Math.min(o.count,d.start+d.count);n<r;n+=3){s=O(this,i,t,_,o,a,l,c,u,n,n+1,n+2),s&&(s.faceIndex=Math.floor(n/3),e.push(s))}}}else n.isGeometry&&console.error(\\\\\\\"THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\")}}function O(t,e,n,s,o,a,l,h,d,p,_,m){f.fromBufferAttribute(o,p),g.fromBufferAttribute(o,_),v.fromBufferAttribute(o,m);const L=t.morphTargetInfluences;if(a&&L){w.set(0,0,0),T.set(0,0,0),A.set(0,0,0);for(let t=0,e=a.length;t<e;t++){const e=L[t],n=a[t];0!==e&&(y.fromBufferAttribute(n,p),x.fromBufferAttribute(n,_),b.fromBufferAttribute(n,m),l?(w.addScaledVector(y,e),T.addScaledVector(x,e),A.addScaledVector(b,e)):(w.addScaledVector(y.sub(f),e),T.addScaledVector(x.sub(g),e),A.addScaledVector(b.sub(v),e)))}f.add(w),g.add(T),v.add(A)}t.isSkinnedMesh&&(t.boneTransform(p,f),t.boneTransform(_,g),t.boneTransform(m,v));const O=function(t,e,n,i,r,s,o,a){let l;if(l=e.side===u.i?i.intersectTriangle(o,s,r,!0,a):i.intersectTriangle(r,s,o,e.side!==u.z,a),null===l)return null;N.copy(a),N.applyMatrix4(t.matrixWorld);const c=n.ray.origin.distanceTo(N);return c<n.near||c>n.far?null:{distance:c,point:N.clone(),object:t}}(t,e,n,s,f,g,v,C);if(O){h&&(E.fromBufferAttribute(h,p),M.fromBufferAttribute(h,_),S.fromBufferAttribute(h,m),O.uv=c.a.getUV(C,f,g,v,E,M,S,new r.a)),d&&(E.fromBufferAttribute(d,p),M.fromBufferAttribute(d,_),S.fromBufferAttribute(d,m),O.uv2=c.a.getUV(C,f,g,v,E,M,S,new r.a));const t={a:p,b:_,c:m,normal:new i.a,materialIndex:0};c.a.getNormal(f,g,v,t.normal),O.face=t}return O}L.prototype.isMesh=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return i}));class i{addEventListener(t,e){void 0===this._listeners&&(this._listeners={});const n=this._listeners;void 0===n[t]&&(n[t]=[]),-1===n[t].indexOf(e)&&n[t].push(e)}hasEventListener(t,e){if(void 0===this._listeners)return!1;const n=this._listeners;return void 0!==n[t]&&-1!==n[t].indexOf(e)}removeEventListener(t,e){if(void 0===this._listeners)return;const n=this._listeners[t];if(void 0!==n){const t=n.indexOf(e);-1!==t&&n.splice(t,1)}}dispatchEvent(t){if(void 0===this._listeners)return;const e=this._listeners[t.type];if(void 0!==e){t.target=this;const n=e.slice(0);for(let e=0,i=n.length;e<i;e++)n[e].call(this,t);t.target=null}}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r}));var i=n(0);class r{constructor(t=new i.a(1/0,1/0,1/0),e=new i.a(-1/0,-1/0,-1/0)){this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){let e=1/0,n=1/0,i=1/0,r=-1/0,s=-1/0,o=-1/0;for(let a=0,l=t.length;a<l;a+=3){const l=t[a],c=t[a+1],u=t[a+2];l<e&&(e=l),c<n&&(n=c),u<i&&(i=u),l>r&&(r=l),c>s&&(s=c),u>o&&(o=u)}return this.min.set(e,n,i),this.max.set(r,s,o),this}setFromBufferAttribute(t){let e=1/0,n=1/0,i=1/0,r=-1/0,s=-1/0,o=-1/0;for(let a=0,l=t.count;a<l;a++){const l=t.getX(a),c=t.getY(a),u=t.getZ(a);l<e&&(e=l),c<n&&(n=c),u<i&&(i=u),l>r&&(r=l),c>s&&(s=c),u>o&&(o=u)}return this.min.set(e,n,i),this.max.set(r,s,o),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;e<n;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){const n=o.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(n),this.max.copy(t).add(n),this}setFromObject(t){return this.makeEmpty(),this.expandByObject(t)}clone(){return(new this.constructor).copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.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(t){return this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}expandByObject(t){t.updateWorldMatrix(!1,!1);const e=t.geometry;void 0!==e&&(null===e.boundingBox&&e.computeBoundingBox(),a.copy(e.boundingBox),a.applyMatrix4(t.matrixWorld),this.union(a));const n=t.children;for(let t=0,e=n.length;t<e;t++)this.expandByObject(n[t]);return this}containsPoint(t){return!(t.x<this.min.x||t.x>this.max.x||t.y<this.min.y||t.y>this.max.y||t.z<this.min.z||t.z>this.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.x<this.min.x||t.min.x>this.max.x||t.max.y<this.min.y||t.min.y>this.max.y||t.max.z<this.min.z||t.min.z>this.max.z)}intersectsSphere(t){return this.clampPoint(t.center,o),o.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(_),m.subVectors(this.max,_),l.subVectors(t.a,_),c.subVectors(t.b,_),u.subVectors(t.c,_),h.subVectors(c,l),d.subVectors(u,c),p.subVectors(l,u);let e=[0,-h.z,h.y,0,-d.z,d.y,0,-p.z,p.y,h.z,0,-h.x,d.z,0,-d.x,p.z,0,-p.x,-h.y,h.x,0,-d.y,d.x,0,-p.y,p.x,0];return!!v(e,l,c,u,m)&&(e=[1,0,0,0,1,0,0,0,1],!!v(e,l,c,u,m)&&(f.crossVectors(h,d),e=[f.x,f.y,f.z],v(e,l,c,u,m)))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return o.copy(t).clamp(this.min,this.max).sub(t).length()}getBoundingSphere(t){return this.getCenter(t.center),t.radius=.5*this.getSize(o).length(),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(s[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),s[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),s[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),s[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),s[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),s[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),s[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),s[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(s)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}r.prototype.isBox3=!0;const s=[new i.a,new i.a,new i.a,new i.a,new i.a,new i.a,new i.a,new i.a],o=new i.a,a=new r,l=new i.a,c=new i.a,u=new i.a,h=new i.a,d=new i.a,p=new i.a,_=new i.a,m=new i.a,f=new i.a,g=new i.a;function v(t,e,n,i,r){for(let s=0,o=t.length-3;s<=o;s+=3){g.fromArray(t,s);const o=r.x*Math.abs(g.x)+r.y*Math.abs(g.y)+r.z*Math.abs(g.z),a=e.dot(g),l=n.dot(g),c=i.dot(g);if(Math.max(-Math.max(a,l,c),Math.min(a,l,c))>o)return!1}return!0}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return i}));const i={enabled:!1,files:{},add:function(t,e){!1!==this.enabled&&(this.files[t]=e)},get:function(t){if(!1!==this.enabled)return this.files[t]},remove:function(t){delete this.files[t]},clear:function(){this.files={}}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return c}));var i=n(16),r=n(0);const s=new i.a,o=new r.a,a=new r.a,l=new r.a;class c{constructor(t=new r.a,e=-1){this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;void 0!==e?n.copy(e):s.setFromPoints(t).getCenter(n);let i=0;for(let e=0,r=t.length;e<r;e++)i=Math.max(i,n.distanceToSquared(t[e]));return this.radius=Math.sqrt(i),this}copy(t){return this.center.copy(t.center),this.radius=t.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(t){return t.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(t){return t.distanceTo(this.center)-this.radius}intersectsSphere(t){const e=this.radius+t.radius;return t.center.distanceToSquared(this.center)<=e*e}intersectsBox(t){return t.intersectsSphere(this)}intersectsPlane(t){return Math.abs(t.distanceToPoint(this.center))<=this.radius}clampPoint(t,e){const n=this.center.distanceToSquared(t);return e.copy(t),n>this.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){l.subVectors(t,this.center);const e=l.lengthSq();if(e>this.radius*this.radius){const t=Math.sqrt(e),n=.5*(t-this.radius);this.center.add(l.multiplyScalar(n/t)),this.radius+=n}return this}union(t){return a.subVectors(t.center,this.center).normalize().multiplyScalar(t.radius),this.expandByPoint(o.copy(t.center).add(a)),this.expandByPoint(o.copy(t.center).sub(a)),this}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return(new this.constructor).copy(this)}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s}));var i=n(8),r=n(1);const s={arraySlice:function(t,e,n){return s.isTypedArray(t)?new t.constructor(t.subarray(e,void 0!==n?n:t.length)):t.slice(e,n)},convertArray:function(t,e,n){return!t||!n&&t.constructor===e?t:\\\\\\\"number\\\\\\\"==typeof e.BYTES_PER_ELEMENT?new e(t):Array.prototype.slice.call(t)},isTypedArray:function(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)},getKeyframeOrder:function(t){const e=t.length,n=new Array(e);for(let t=0;t!==e;++t)n[t]=t;return n.sort((function(e,n){return t[e]-t[n]})),n},sortedArray:function(t,e,n){const i=t.length,r=new t.constructor(i);for(let s=0,o=0;o!==i;++s){const i=n[s]*e;for(let n=0;n!==e;++n)r[o++]=t[i+n]}return r},flattenJSON:function(t,e,n,i){let r=1,s=t[0];for(;void 0!==s&&void 0===s[i];)s=t[r++];if(void 0===s)return;let o=s[i];if(void 0!==o)if(Array.isArray(o))do{o=s[i],void 0!==o&&(e.push(s.time),n.push.apply(n,o)),s=t[r++]}while(void 0!==s);else if(void 0!==o.toArray)do{o=s[i],void 0!==o&&(e.push(s.time),o.toArray(n,n.length)),s=t[r++]}while(void 0!==s);else do{o=s[i],void 0!==o&&(e.push(s.time),n.push(o)),s=t[r++]}while(void 0!==s)},subclip:function(t,e,n,i,r=30){const o=t.clone();o.name=e;const a=[];for(let t=0;t<o.tracks.length;++t){const e=o.tracks[t],l=e.getValueSize(),c=[],u=[];for(let t=0;t<e.times.length;++t){const s=e.times[t]*r;if(!(s<n||s>=i)){c.push(e.times[t]);for(let n=0;n<l;++n)u.push(e.values[t*l+n])}}0!==c.length&&(e.times=s.convertArray(c,e.times.constructor),e.values=s.convertArray(u,e.values.constructor),a.push(e))}o.tracks=a;let l=1/0;for(let t=0;t<o.tracks.length;++t)l>o.tracks[t].times[0]&&(l=o.tracks[t].times[0]);for(let t=0;t<o.tracks.length;++t)o.tracks[t].shift(-1*l);return o.resetDuration(),o},makeClipAdditive:function(t,e=0,n=t,o=30){o<=0&&(o=30);const a=n.tracks.length,l=e/o;for(let e=0;e<a;++e){const r=n.tracks[e],o=r.ValueTypeName;if(\\\\\\\"bool\\\\\\\"===o||\\\\\\\"string\\\\\\\"===o)continue;const a=t.tracks.find((function(t){return t.name===r.name&&t.ValueTypeName===o}));if(void 0===a)continue;let c=0;const u=r.getValueSize();r.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline&&(c=u/3);let h=0;const d=a.getValueSize();a.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline&&(h=d/3);const p=r.times.length-1;let _;if(l<=r.times[0]){const t=c,e=u-c;_=s.arraySlice(r.values,t,e)}else if(l>=r.times[p]){const t=p*u+c,e=t+u-c;_=s.arraySlice(r.values,t,e)}else{const t=r.createInterpolant(),e=c,n=u-c;t.evaluate(l),_=s.arraySlice(t.resultBuffer,e,n)}if(\\\\\\\"quaternion\\\\\\\"===o){(new i.a).fromArray(_).normalize().conjugate().toArray(_)}const m=a.times.length;for(let t=0;t<m;++t){const e=t*d+h;if(\\\\\\\"quaternion\\\\\\\"===o)i.a.multiplyQuaternionsFlat(a.values,e,_,0,a.values,e);else{const t=d-2*h;for(let n=0;n<t;++n)a.values[e+n]-=_[n]}}}return t.blendMode=r.d,t}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";function i(t){if(0===t.length)return-1/0;let e=t[0];for(let n=1,i=t.length;n<i;++n)t[n]>e&&(e=t[n]);return e}n.d(e,\\\\\\\"a\\\\\\\",(function(){return i})),n.d(e,\\\\\\\"c\\\\\\\",(function(){return s})),n.d(e,\\\\\\\"b\\\\\\\",(function(){return o}));const r={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:Uint8ClampedArray,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};function s(t,e){return new r[t](e)}function o(t){return document.createElementNS(\\\\\\\"http://www.w3.org/1999/xhtml\\\\\\\",t)}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return o}));var i=n(17),r=n(13);const s={};class o extends r.a{constructor(t){super(t)}load(t,e,n,r){void 0===t&&(t=\\\\\\\"\\\\\\\"),void 0!==this.path&&(t=this.path+t),t=this.manager.resolveURL(t);const o=this,a=i.a.get(t);if(void 0!==a)return o.manager.itemStart(t),setTimeout((function(){e&&e(a),o.manager.itemEnd(t)}),0),a;if(void 0!==s[t])return void s[t].push({onLoad:e,onProgress:n,onError:r});const l=t.match(/^data:(.*?)(;base64)?,(.*)$/);let c;if(l){const n=l[1],i=!!l[2];let s=l[3];s=decodeURIComponent(s),i&&(s=atob(s));try{let i;const r=(this.responseType||\\\\\\\"\\\\\\\").toLowerCase();switch(r){case\\\\\\\"arraybuffer\\\\\\\":case\\\\\\\"blob\\\\\\\":const t=new Uint8Array(s.length);for(let e=0;e<s.length;e++)t[e]=s.charCodeAt(e);i=\\\\\\\"blob\\\\\\\"===r?new Blob([t.buffer],{type:n}):t.buffer;break;case\\\\\\\"document\\\\\\\":const e=new DOMParser;i=e.parseFromString(s,n);break;case\\\\\\\"json\\\\\\\":i=JSON.parse(s);break;default:i=s}setTimeout((function(){e&&e(i),o.manager.itemEnd(t)}),0)}catch(e){setTimeout((function(){r&&r(e),o.manager.itemError(t),o.manager.itemEnd(t)}),0)}}else{s[t]=[],s[t].push({onLoad:e,onProgress:n,onError:r}),c=new XMLHttpRequest,c.open(\\\\\\\"GET\\\\\\\",t,!0),c.addEventListener(\\\\\\\"load\\\\\\\",(function(e){const n=this.response,r=s[t];if(delete s[t],200===this.status||0===this.status){0===this.status&&console.warn(\\\\\\\"THREE.FileLoader: HTTP Status 0 received.\\\\\\\"),i.a.add(t,n);for(let t=0,e=r.length;t<e;t++){const e=r[t];e.onLoad&&e.onLoad(n)}o.manager.itemEnd(t)}else{for(let t=0,n=r.length;t<n;t++){const n=r[t];n.onError&&n.onError(e)}o.manager.itemError(t),o.manager.itemEnd(t)}}),!1),c.addEventListener(\\\\\\\"progress\\\\\\\",(function(e){const n=s[t];for(let t=0,i=n.length;t<i;t++){const i=n[t];i.onProgress&&i.onProgress(e)}}),!1),c.addEventListener(\\\\\\\"error\\\\\\\",(function(e){const n=s[t];delete s[t];for(let t=0,i=n.length;t<i;t++){const i=n[t];i.onError&&i.onError(e)}o.manager.itemError(t),o.manager.itemEnd(t)}),!1),c.addEventListener(\\\\\\\"abort\\\\\\\",(function(e){const n=s[t];delete s[t];for(let t=0,i=n.length;t<i;t++){const i=n[t];i.onError&&i.onError(e)}o.manager.itemError(t),o.manager.itemEnd(t)}),!1),void 0!==this.responseType&&(c.responseType=this.responseType),void 0!==this.withCredentials&&(c.withCredentials=this.withCredentials),c.overrideMimeType&&c.overrideMimeType(void 0!==this.mimeType?this.mimeType:\\\\\\\"text/plain\\\\\\\");for(const t in this.requestHeader)c.setRequestHeader(t,this.requestHeader[t]);c.send(null)}return o.manager.itemStart(t),c}setResponseType(t){return this.responseType=t,this}setMimeType(t){return this.mimeType=t,this}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r}));var i=n(10);class r extends i.a{constructor(){super(),this.type=\\\\\\\"Group\\\\\\\"}}r.prototype.isGroup=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return h}));var i=n(15),r=n(1),s=n(3),o=n(2),a=n(11),l=n(20);let c;let u=0;class h extends i.a{constructor(t=h.DEFAULT_IMAGE,e=h.DEFAULT_MAPPING,n=r.n,i=r.n,l=r.V,c=r.Y,d=r.Ib,p=r.Zc,_=1,m=r.U){super(),Object.defineProperty(this,\\\\\\\"id\\\\\\\",{value:u++}),this.uuid=s.h(),this.name=\\\\\\\"\\\\\\\",this.image=t,this.mipmaps=[],this.mapping=e,this.wrapS=n,this.wrapT=i,this.magFilter=l,this.minFilter=c,this.anisotropy=_,this.format=d,this.internalFormat=null,this.type=p,this.offset=new o.a(0,0),this.repeat=new o.a(1,1),this.center=new o.a(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new a.a,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=m,this.version=0,this.onUpdate=null,this.isRenderTargetTexture=!1}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(t){return this.name=t.name,this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this}toJSON(t){const e=void 0===t||\\\\\\\"string\\\\\\\"==typeof t;if(!e&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];const n={metadata:{version:4.5,type:\\\\\\\"Texture\\\\\\\",generator:\\\\\\\"Texture.toJSON\\\\\\\"},uuid:this.uuid,name:this.name,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,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){const i=this.image;if(void 0===i.uuid&&(i.uuid=s.h()),!e&&void 0===t.images[i.uuid]){let e;if(Array.isArray(i)){e=[];for(let t=0,n=i.length;t<n;t++)i[t].isDataTexture?e.push(d(i[t].image)):e.push(d(i[t]))}else e=d(i);t.images[i.uuid]={uuid:i.uuid,url:e}}n.image=i.uuid}return e||(t.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:\\\\\\\"dispose\\\\\\\"})}transformUv(t){if(this.mapping!==r.Yc)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case r.wc:t.x=t.x-Math.floor(t.x);break;case r.n:t.x=t.x<0?0:1;break;case r.kb:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case r.wc:t.y=t.y-Math.floor(t.y);break;case r.n:t.y=t.y<0?0:1;break;case r.kb:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){!0===t&&this.version++}}function d(t){return\\\\\\\"undefined\\\\\\\"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||\\\\\\\"undefined\\\\\\\"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||\\\\\\\"undefined\\\\\\\"!=typeof ImageBitmap&&t instanceof ImageBitmap?class{static getDataURL(t){if(/^data:/i.test(t.src))return t.src;if(\\\\\\\"undefined\\\\\\\"==typeof HTMLCanvasElement)return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{void 0===c&&(c=Object(l.b)(\\\\\\\"canvas\\\\\\\")),c.width=t.width,c.height=t.height;const n=c.getContext(\\\\\\\"2d\\\\\\\");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=c}return e.width>2048||e.height>2048?(console.warn(\\\\\\\"THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons\\\\\\\",t),e.toDataURL(\\\\\\\"image/jpeg\\\\\\\",.6)):e.toDataURL(\\\\\\\"image/png\\\\\\\")}}.getDataURL(t):t.data?{data:Array.prototype.slice.call(t.data),width:t.width,height:t.height,type:t.data.constructor.name}:(console.warn(\\\\\\\"THREE.Texture: Unable to serialize Texture.\\\\\\\"),{})}h.DEFAULT_IMAGE=void 0,h.DEFAULT_MAPPING=r.Yc,h.prototype.isTexture=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s}));var i=n(12),r=n(6);class s extends i.a{constructor(t){super(),this.type=\\\\\\\"LineBasicMaterial\\\\\\\",this.color=new r.a(16777215),this.linewidth=1,this.linecap=\\\\\\\"round\\\\\\\",this.linejoin=\\\\\\\"round\\\\\\\",this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.linewidth=t.linewidth,this.linecap=t.linecap,this.linejoin=t.linejoin,this}}s.prototype.isLineBasicMaterial=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return a}));var i=n(3),r=n(2),s=n(0),o=n(5);class a{constructor(){this.type=\\\\\\\"Curve\\\\\\\",this.arcLengthDivisions=200}getPoint(){return console.warn(\\\\\\\"THREE.Curve: .getPoint() not implemented.\\\\\\\"),null}getPointAt(t,e){const n=this.getUtoTmapping(t);return this.getPoint(n,e)}getPoints(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPoint(n/t));return e}getSpacedPoints(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPointAt(n/t));return e}getLength(){const t=this.getLengths();return t[t.length-1]}getLengths(t=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const e=[];let n,i=this.getPoint(0),r=0;e.push(0);for(let s=1;s<=t;s++)n=this.getPoint(s/t),r+=n.distanceTo(i),e.push(r),i=n;return this.cacheArcLengths=e,e}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(t,e){const n=this.getLengths();let i=0;const r=n.length;let s;s=e||t*n[r-1];let o,a=0,l=r-1;for(;a<=l;)if(i=Math.floor(a+(l-a)/2),o=n[i]-s,o<0)a=i+1;else{if(!(o>0)){l=i;break}l=i-1}if(i=l,n[i]===s)return i/(r-1);const c=n[i];return(i+(s-c)/(n[i+1]-c))/(r-1)}getTangent(t,e){const n=1e-4;let i=t-n,o=t+n;i<0&&(i=0),o>1&&(o=1);const a=this.getPoint(i),l=this.getPoint(o),c=e||(a.isVector2?new r.a:new s.a);return c.copy(l).sub(a).normalize(),c}getTangentAt(t,e){const n=this.getUtoTmapping(t);return this.getTangent(n,e)}computeFrenetFrames(t,e){const n=new s.a,r=[],a=[],l=[],c=new s.a,u=new o.a;for(let e=0;e<=t;e++){const n=e/t;r[e]=this.getTangentAt(n,new s.a)}a[0]=new s.a,l[0]=new s.a;let h=Number.MAX_VALUE;const d=Math.abs(r[0].x),p=Math.abs(r[0].y),_=Math.abs(r[0].z);d<=h&&(h=d,n.set(1,0,0)),p<=h&&(h=p,n.set(0,1,0)),_<=h&&n.set(0,0,1),c.crossVectors(r[0],n).normalize(),a[0].crossVectors(r[0],c),l[0].crossVectors(r[0],a[0]);for(let e=1;e<=t;e++){if(a[e]=a[e-1].clone(),l[e]=l[e-1].clone(),c.crossVectors(r[e-1],r[e]),c.length()>Number.EPSILON){c.normalize();const t=Math.acos(i.d(r[e-1].dot(r[e]),-1,1));a[e].applyMatrix4(u.makeRotationAxis(c,t))}l[e].crossVectors(r[e],a[e])}if(!0===e){let e=Math.acos(i.d(a[0].dot(a[t]),-1,1));e/=t,r[0].dot(c.crossVectors(a[0],a[t]))>0&&(e=-e);for(let n=1;n<=t;n++)a[n].applyMatrix4(u.makeRotationAxis(r[n],e*n)),l[n].crossVectors(r[n],a[n])}return{tangents:r,normals:a,binormals:l}}clone(){return(new this.constructor).copy(this)}copy(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}toJSON(){const t={metadata:{version:4.5,type:\\\\\\\"Curve\\\\\\\",generator:\\\\\\\"Curve.toJSON\\\\\\\"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t}fromJSON(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return c}));var i=n(1),r=n(70),s=n(71),o=n(38);class a extends o.a{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t){return this.copySampleValue_(t-1)}}var l=n(19);class c{constructor(t,e,n,i){if(void 0===t)throw new Error(\\\\\\\"THREE.KeyframeTrack: track name is undefined\\\\\\\");if(void 0===e||0===e.length)throw new Error(\\\\\\\"THREE.KeyframeTrack: no keyframes in track named \\\\\\\"+t);this.name=t,this.times=l.a.convertArray(e,this.TimeBufferType),this.values=l.a.convertArray(n,this.ValueBufferType),this.setInterpolation(i||this.DefaultInterpolation)}static toJSON(t){const e=t.constructor;let n;if(e.toJSON!==this.toJSON)n=e.toJSON(t);else{n={name:t.name,times:l.a.convertArray(t.times,Array),values:l.a.convertArray(t.values,Array)};const e=t.getInterpolation();e!==t.DefaultInterpolation&&(n.interpolation=e)}return n.type=t.ValueTypeName,n}InterpolantFactoryMethodDiscrete(t){return new a(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodLinear(t){return new s.a(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodSmooth(t){return new r.a(this.times,this.values,this.getValueSize(),t)}setInterpolation(t){let e;switch(t){case i.O:e=this.InterpolantFactoryMethodDiscrete;break;case i.P:e=this.InterpolantFactoryMethodLinear;break;case i.Q:e=this.InterpolantFactoryMethodSmooth}if(void 0===e){const e=\\\\\\\"unsupported interpolation for \\\\\\\"+this.ValueTypeName+\\\\\\\" keyframe track named \\\\\\\"+this.name;if(void 0===this.createInterpolant){if(t===this.DefaultInterpolation)throw new Error(e);this.setInterpolation(this.DefaultInterpolation)}return console.warn(\\\\\\\"THREE.KeyframeTrack:\\\\\\\",e),this}return this.createInterpolant=e,this}getInterpolation(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return i.O;case this.InterpolantFactoryMethodLinear:return i.P;case this.InterpolantFactoryMethodSmooth:return i.Q}}getValueSize(){return this.values.length/this.times.length}shift(t){if(0!==t){const e=this.times;for(let n=0,i=e.length;n!==i;++n)e[n]+=t}return this}scale(t){if(1!==t){const e=this.times;for(let n=0,i=e.length;n!==i;++n)e[n]*=t}return this}trim(t,e){const n=this.times,i=n.length;let r=0,s=i-1;for(;r!==i&&n[r]<t;)++r;for(;-1!==s&&n[s]>e;)--s;if(++s,0!==r||s!==i){r>=s&&(s=Math.max(s,1),r=s-1);const t=this.getValueSize();this.times=l.a.arraySlice(n,r,s),this.values=l.a.arraySlice(this.values,r*t,s*t)}return this}validate(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0&&(console.error(\\\\\\\"THREE.KeyframeTrack: Invalid value size in track.\\\\\\\",this),t=!1);const n=this.times,i=this.values,r=n.length;0===r&&(console.error(\\\\\\\"THREE.KeyframeTrack: Track is empty.\\\\\\\",this),t=!1);let s=null;for(let e=0;e!==r;e++){const i=n[e];if(\\\\\\\"number\\\\\\\"==typeof i&&isNaN(i)){console.error(\\\\\\\"THREE.KeyframeTrack: Time is not a valid number.\\\\\\\",this,e,i),t=!1;break}if(null!==s&&s>i){console.error(\\\\\\\"THREE.KeyframeTrack: Out of order keys.\\\\\\\",this,e,i,s),t=!1;break}s=i}if(void 0!==i&&l.a.isTypedArray(i))for(let e=0,n=i.length;e!==n;++e){const n=i[e];if(isNaN(n)){console.error(\\\\\\\"THREE.KeyframeTrack: Value is not a valid number.\\\\\\\",this,e,n),t=!1;break}}return t}optimize(){const t=l.a.arraySlice(this.times),e=l.a.arraySlice(this.values),n=this.getValueSize(),r=this.getInterpolation()===i.Q,s=t.length-1;let o=1;for(let i=1;i<s;++i){let s=!1;const a=t[i];if(a!==t[i+1]&&(1!==i||a!==t[0]))if(r)s=!0;else{const t=i*n,r=t-n,o=t+n;for(let i=0;i!==n;++i){const n=e[t+i];if(n!==e[r+i]||n!==e[o+i]){s=!0;break}}}if(s){if(i!==o){t[o]=t[i];const r=i*n,s=o*n;for(let t=0;t!==n;++t)e[s+t]=e[r+t]}++o}}if(s>0){t[o]=t[s];for(let t=s*n,i=o*n,r=0;r!==n;++r)e[i+r]=e[t+r];++o}return o!==t.length?(this.times=l.a.arraySlice(t,0,o),this.values=l.a.arraySlice(e,0,o*n)):(this.times=t,this.values=e),this}clone(){const t=l.a.arraySlice(this.times,0),e=l.a.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}c.prototype.TimeBufferType=Float32Array,c.prototype.ValueBufferType=Float32Array,c.prototype.DefaultInterpolation=i.P},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return o}));var i=n(12),r=n(1),s=n(6);class o extends i.a{constructor(t){super(),this.type=\\\\\\\"MeshBasicMaterial\\\\\\\",this.color=new s.a(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=r.nb,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\\\\\\\"round\\\\\\\",this.wireframeLinejoin=\\\\\\\"round\\\\\\\",this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this}}o.prototype.isMeshBasicMaterial=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return c}));var i=n(8),r=n(0),s=n(5),o=n(3);const a=new s.a,l=new i.a;class c{constructor(t=0,e=0,n=0,i=c.DefaultOrder){this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i=this._order){return this._x=t,this._y=e,this._z=n,this._order=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,n=!0){const i=t.elements,r=i[0],s=i[4],a=i[8],l=i[1],c=i[5],u=i[9],h=i[2],d=i[6],p=i[10];switch(e){case\\\\\\\"XYZ\\\\\\\":this._y=Math.asin(Object(o.d)(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-u,p),this._z=Math.atan2(-s,r)):(this._x=Math.atan2(d,c),this._z=0);break;case\\\\\\\"YXZ\\\\\\\":this._x=Math.asin(-Object(o.d)(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(a,p),this._z=Math.atan2(l,c)):(this._y=Math.atan2(-h,r),this._z=0);break;case\\\\\\\"ZXY\\\\\\\":this._x=Math.asin(Object(o.d)(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-h,p),this._z=Math.atan2(-s,c)):(this._y=0,this._z=Math.atan2(l,r));break;case\\\\\\\"ZYX\\\\\\\":this._y=Math.asin(-Object(o.d)(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(d,p),this._z=Math.atan2(l,r)):(this._x=0,this._z=Math.atan2(-s,c));break;case\\\\\\\"YZX\\\\\\\":this._z=Math.asin(Object(o.d)(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(-u,c),this._y=Math.atan2(-h,r)):(this._x=0,this._y=Math.atan2(a,p));break;case\\\\\\\"XZY\\\\\\\":this._z=Math.asin(-Object(o.d)(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(d,c),this._y=Math.atan2(a,r)):(this._x=Math.atan2(-u,p),this._y=0);break;default:console.warn(\\\\\\\"THREE.Euler: .setFromRotationMatrix() encountered an unknown order: \\\\\\\"+e)}return this._order=e,!0===n&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return a.makeRotationFromQuaternion(t),this.setFromRotationMatrix(a,e,n)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return l.setFromEuler(this),this.setFromQuaternion(l,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}toVector3(t){return t?t.set(this._x,this._y,this._z):new r.a(this._x,this._y,this._z)}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}c.prototype.isEuler=!0,c.DefaultOrder=\\\\\\\"XYZ\\\\\\\",c.RotationOrders=[\\\\\\\"XYZ\\\\\\\",\\\\\\\"YZX\\\\\\\",\\\\\\\"ZXY\\\\\\\",\\\\\\\"XZY\\\\\\\",\\\\\\\"YXZ\\\\\\\",\\\\\\\"ZYX\\\\\\\"]},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r})),n.d(e,\\\\\\\"b\\\\\\\",(function(){return i}));class i{constructor(t,e,n){const i=this;let r,s=!1,o=0,a=0;const l=[];this.onStart=void 0,this.onLoad=t,this.onProgress=e,this.onError=n,this.itemStart=function(t){a++,!1===s&&void 0!==i.onStart&&i.onStart(t,o,a),s=!0},this.itemEnd=function(t){o++,void 0!==i.onProgress&&i.onProgress(t,o,a),o===a&&(s=!1,void 0!==i.onLoad&&i.onLoad())},this.itemError=function(t){void 0!==i.onError&&i.onError(t)},this.resolveURL=function(t){return r?r(t):t},this.setURLModifier=function(t){return r=t,this},this.addHandler=function(t,e){return l.push(t,e),this},this.removeHandler=function(t){const e=l.indexOf(t);return-1!==e&&l.splice(e,2),this},this.getHandler=function(t){for(let e=0,n=l.length;e<n;e+=2){const n=l[e],i=l[e+1];if(n.global&&(n.lastIndex=0),n.test(t))return i}return null}}}const r=new i},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s}));var i=n(43),r=n(3);class s extends i.a{constructor(t=50,e=1,n=.1,i=2e3){super(),this.type=\\\\\\\"PerspectiveCamera\\\\\\\",this.fov=t,this.zoom=1,this.near=n,this.far=i,this.focus=10,this.aspect=e,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this}setFocalLength(t){const e=.5*this.getFilmHeight()/t;this.fov=2*r.b*Math.atan(e),this.updateProjectionMatrix()}getFocalLength(){const t=Math.tan(.5*r.a*this.fov);return.5*this.getFilmHeight()/t}getEffectiveFOV(){return 2*r.b*Math.atan(Math.tan(.5*r.a*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(t,e,n,i,r,s){this.aspect=t/e,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=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=this.near;let e=t*Math.tan(.5*r.a*this.fov)/this.zoom,n=2*e,i=this.aspect*n,s=-.5*i;const o=this.view;if(null!==this.view&&this.view.enabled){const t=o.fullWidth,r=o.fullHeight;s+=o.offsetX*i/t,e-=o.offsetY*n/r,i*=o.width/t,n*=o.height/r}const a=this.filmOffset;0!==a&&(s+=t*a/this.getFilmWidth()),this.projectionMatrix.makePerspective(s,s+i,e,e-n,t,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}}s.prototype.isPerspectiveCamera=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";function i(t,e,n,i,r){const s=.5*(i-e),o=.5*(r-n),a=t*t;return(2*n-2*i+s+o)*(t*a)+(-3*n+3*i-2*s-o)*a+s*t+n}function r(t,e,n,i){return function(t,e){const n=1-t;return n*n*e}(t,e)+function(t,e){return 2*(1-t)*t*e}(t,n)+function(t,e){return t*t*e}(t,i)}function s(t,e,n,i,r){return function(t,e){const n=1-t;return n*n*n*e}(t,e)+function(t,e){const n=1-t;return 3*n*n*t*e}(t,n)+function(t,e){return 3*(1-t)*t*t*e}(t,i)+function(t,e){return t*t*t*e}(t,r)}n.d(e,\\\\\\\"a\\\\\\\",(function(){return i})),n.d(e,\\\\\\\"c\\\\\\\",(function(){return r})),n.d(e,\\\\\\\"b\\\\\\\",(function(){return s}))},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s}));var i=n(10),r=n(6);class s extends i.a{constructor(t,e=1){super(),this.type=\\\\\\\"Light\\\\\\\",this.color=new r.a(t),this.intensity=e}dispose(){}copy(t){return super.copy(t),this.color.copy(t.color),this.intensity=t.intensity,this}toJSON(t){const e=super.toJSON(t);return e.object.color=this.color.getHex(),e.object.intensity=this.intensity,void 0!==this.groundColor&&(e.object.groundColor=this.groundColor.getHex()),void 0!==this.distance&&(e.object.distance=this.distance),void 0!==this.angle&&(e.object.angle=this.angle),void 0!==this.decay&&(e.object.decay=this.decay),void 0!==this.penumbra&&(e.object.penumbra=this.penumbra),void 0!==this.shadow&&(e.object.shadow=this.shadow.toJSON()),e}}s.prototype.isLight=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s}));var i=n(23),r=n(1);class s extends i.a{constructor(t=null,e=1,n=1,i,s,o,a,l,c=r.ob,u=r.ob,h,d){super(null,o,a,l,c,u,i,s,h,d),this.image={data:t,width:e,height:n},this.magFilter=c,this.minFilter=u,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}}s.prototype.isDataTexture=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return l}));var i=n(11),r=n(0);const s=new r.a,o=new r.a,a=new i.a;class l{constructor(t=new r.a(1,0,0),e=0){this.normal=t,this.constant=e}set(t,e){return this.normal.copy(t),this.constant=e,this}setComponents(t,e,n,i){return this.normal.set(t,e,n),this.constant=i,this}setFromNormalAndCoplanarPoint(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this}setFromCoplanarPoints(t,e,n){const i=s.subVectors(n,e).cross(o.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(i,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){const t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}distanceToSphere(t){return this.distanceToPoint(t.center)-t.radius}projectPoint(t,e){return e.copy(this.normal).multiplyScalar(-this.distanceToPoint(t)).add(t)}intersectLine(t,e){const n=t.delta(s),i=this.normal.dot(n);if(0===i)return 0===this.distanceToPoint(t.start)?e.copy(t.start):null;const r=-(t.start.dot(this.normal)+this.constant)/i;return r<0||r>1?null:e.copy(n).multiplyScalar(r).add(t.start)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||a.getNormalMatrix(t),i=this.coplanarPoint(s).applyMatrix4(t),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return(new this.constructor).copy(this)}}l.prototype.isPlane=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return l}));var i=n(41),r=n(0),s=n(4);const o=new r.a,a=new r.a;class l extends i.a{constructor(t,e){super(t,e),this.type=\\\\\\\"LineSegments\\\\\\\"}computeLineDistances(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[];for(let t=0,i=e.count;t<i;t+=2)o.fromBufferAttribute(e,t),a.fromBufferAttribute(e,t+1),n[t]=0===t?0:n[t-1],n[t+1]=n[t]+o.distanceTo(a);t.setAttribute(\\\\\\\"lineDistance\\\\\\\",new s.c(n,1))}else console.warn(\\\\\\\"THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.\\\\\\\");else t.isGeometry&&console.error(\\\\\\\"THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\");return this}}l.prototype.isLineSegments=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return i}));class i{constructor(){this.mask=1}set(t){this.mask=1<<t|0}enable(t){this.mask|=1<<t|0}enableAll(){this.mask=-1}toggle(t){this.mask^=1<<t|0}disable(t){this.mask&=~(1<<t|0)}disableAll(){this.mask=0}test(t){return 0!=(this.mask&t.mask)}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r}));var i=n(43);class r extends i.a{constructor(t=-1,e=1,n=1,i=-1,r=.1,s=2e3){super(),this.type=\\\\\\\"OrthographicCamera\\\\\\\",this.zoom=1,this.view=null,this.left=t,this.right=e,this.top=n,this.bottom=i,this.near=r,this.far=s,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.left=t.left,this.right=t.right,this.top=t.top,this.bottom=t.bottom,this.near=t.near,this.far=t.far,this.zoom=t.zoom,this.view=null===t.view?null:Object.assign({},t.view),this}setViewOffset(t,e,n,i,r,s){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=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=(this.right-this.left)/(2*this.zoom),e=(this.top-this.bottom)/(2*this.zoom),n=(this.right+this.left)/2,i=(this.top+this.bottom)/2;let r=n-t,s=n+t,o=i+e,a=i-e;if(null!==this.view&&this.view.enabled){const t=(this.right-this.left)/this.view.fullWidth/this.zoom,e=(this.top-this.bottom)/this.view.fullHeight/this.zoom;r+=t*this.view.offsetX,s=r+t*this.view.width,o-=e*this.view.offsetY,a=o-e*this.view.height}this.projectionMatrix.makeOrthographic(r,s,o,a,this.near,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.zoom=this.zoom,e.object.left=this.left,e.object.right=this.right,e.object.top=this.top,e.object.bottom=this.bottom,e.object.near=this.near,e.object.far=this.far,null!==this.view&&(e.object.view=Object.assign({},this.view)),e}}r.prototype.isOrthographicCamera=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return i}));class i{constructor(t,e,n,i){this.parameterPositions=t,this._cachedIndex=0,this.resultBuffer=void 0!==i?i:new e.constructor(n),this.sampleValues=e,this.valueSize=n,this.settings=null,this.DefaultSettings_={}}evaluate(t){const e=this.parameterPositions;let n=this._cachedIndex,i=e[n],r=e[n-1];t:{e:{let s;n:{i:if(!(t<i)){for(let s=n+2;;){if(void 0===i){if(t<r)break i;return n=e.length,this._cachedIndex=n,this.afterEnd_(n-1,t,r)}if(n===s)break;if(r=i,i=e[++n],t<i)break e}s=e.length;break n}if(t>=r)break t;{const o=e[1];t<o&&(n=2,r=o);for(let s=n-2;;){if(void 0===r)return this._cachedIndex=0,this.beforeStart_(0,t,i);if(n===s)break;if(i=r,r=e[--n-1],t>=r)break e}s=n,n=0}}for(;n<s;){const i=n+s>>>1;t<e[i]?s=i:n=i+1}if(i=e[n],r=e[n-1],void 0===r)return this._cachedIndex=0,this.beforeStart_(0,t,i);if(void 0===i)return n=e.length,this._cachedIndex=n,this.afterEnd_(n-1,r,t)}this._cachedIndex=n,this.intervalChanged_(n,r,i)}return this.interpolate_(n,r,t,i)}getSettings_(){return this.settings||this.DefaultSettings_}copySampleValue_(t){const e=this.resultBuffer,n=this.sampleValues,i=this.valueSize,r=t*i;for(let t=0;t!==i;++t)e[t]=n[r+t];return e}interpolate_(){throw new Error(\\\\\\\"call to abstract method\\\\\\\")}intervalChanged_(){}}i.prototype.beforeStart_=i.prototype.copySampleValue_,i.prototype.afterEnd_=i.prototype.copySampleValue_},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return h}));var i=n(0);const r=new i.a,s=new i.a,o=new i.a,a=new i.a,l=new i.a,c=new i.a,u=new i.a;class h{constructor(t=new i.a,e=new i.a(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.direction).multiplyScalar(t).add(this.origin)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,r)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=r.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(r.copy(this.direction).multiplyScalar(e).add(this.origin),r.distanceToSquared(t))}distanceSqToSegment(t,e,n,i){s.copy(t).add(e).multiplyScalar(.5),o.copy(e).sub(t).normalize(),a.copy(this.origin).sub(s);const r=.5*t.distanceTo(e),l=-this.direction.dot(o),c=a.dot(this.direction),u=-a.dot(o),h=a.lengthSq(),d=Math.abs(1-l*l);let p,_,m,f;if(d>0)if(p=l*u-c,_=l*c-u,f=r*d,p>=0)if(_>=-f)if(_<=f){const t=1/d;p*=t,_*=t,m=p*(p+l*_+2*c)+_*(l*p+_+2*u)+h}else _=r,p=Math.max(0,-(l*_+c)),m=-p*p+_*(_+2*u)+h;else _=-r,p=Math.max(0,-(l*_+c)),m=-p*p+_*(_+2*u)+h;else _<=-f?(p=Math.max(0,-(-l*r+c)),_=p>0?-r:Math.min(Math.max(-r,-u),r),m=-p*p+_*(_+2*u)+h):_<=f?(p=0,_=Math.min(Math.max(-r,-u),r),m=_*(_+2*u)+h):(p=Math.max(0,-(l*r+c)),_=p>0?r:Math.min(Math.max(-r,-u),r),m=-p*p+_*(_+2*u)+h);else _=l>0?-r:r,p=Math.max(0,-(l*_+c)),m=-p*p+_*(_+2*u)+h;return n&&n.copy(this.direction).multiplyScalar(p).add(this.origin),i&&i.copy(o).multiplyScalar(_).add(s),m}intersectSphere(t,e){r.subVectors(t.center,this.origin);const n=r.dot(this.direction),i=r.dot(r)-n*n,s=t.radius*t.radius;if(i>s)return null;const o=Math.sqrt(s-i),a=n-o,l=n+o;return a<0&&l<0?null:a<0?this.at(l,e):this.at(a,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return null===n?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let n,i,r,s,o,a;const l=1/this.direction.x,c=1/this.direction.y,u=1/this.direction.z,h=this.origin;return l>=0?(n=(t.min.x-h.x)*l,i=(t.max.x-h.x)*l):(n=(t.max.x-h.x)*l,i=(t.min.x-h.x)*l),c>=0?(r=(t.min.y-h.y)*c,s=(t.max.y-h.y)*c):(r=(t.max.y-h.y)*c,s=(t.min.y-h.y)*c),n>s||r>i?null:((r>n||n!=n)&&(n=r),(s<i||i!=i)&&(i=s),u>=0?(o=(t.min.z-h.z)*u,a=(t.max.z-h.z)*u):(o=(t.max.z-h.z)*u,a=(t.min.z-h.z)*u),n>a||o>i?null:((o>n||n!=n)&&(n=o),(a<i||i!=i)&&(i=a),i<0?null:this.at(n>=0?n:i,e)))}intersectsBox(t){return null!==this.intersectBox(t,r)}intersectTriangle(t,e,n,i,r){l.subVectors(e,t),c.subVectors(n,t),u.crossVectors(l,c);let s,o=this.direction.dot(u);if(o>0){if(i)return null;s=1}else{if(!(o<0))return null;s=-1,o=-o}a.subVectors(this.origin,t);const h=s*this.direction.dot(c.crossVectors(a,c));if(h<0)return null;const d=s*this.direction.dot(l.cross(a));if(d<0)return null;if(h+d>o)return null;const p=-s*a.dot(u);return p<0?null:this.at(p/o,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return _}));var i=n(0);const r=new i.a,s=new i.a,o=new i.a,a=new i.a,l=new i.a,c=new i.a,u=new i.a,h=new i.a,d=new i.a,p=new i.a;class _{constructor(t=new i.a,e=new i.a,n=new i.a){this.a=t,this.b=e,this.c=n}static getNormal(t,e,n,i){i.subVectors(n,e),r.subVectors(t,e),i.cross(r);const s=i.lengthSq();return s>0?i.multiplyScalar(1/Math.sqrt(s)):i.set(0,0,0)}static getBarycoord(t,e,n,i,a){r.subVectors(i,e),s.subVectors(n,e),o.subVectors(t,e);const l=r.dot(r),c=r.dot(s),u=r.dot(o),h=s.dot(s),d=s.dot(o),p=l*h-c*c;if(0===p)return a.set(-2,-1,-1);const _=1/p,m=(h*u-c*d)*_,f=(l*d-c*u)*_;return a.set(1-m-f,f,m)}static containsPoint(t,e,n,i){return this.getBarycoord(t,e,n,i,a),a.x>=0&&a.y>=0&&a.x+a.y<=1}static getUV(t,e,n,i,r,s,o,l){return this.getBarycoord(t,e,n,i,a),l.set(0,0),l.addScaledVector(r,a.x),l.addScaledVector(s,a.y),l.addScaledVector(o,a.z),l}static isFrontFacing(t,e,n,i){return r.subVectors(n,e),s.subVectors(t,e),r.cross(s).dot(i)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}setFromAttributeAndIndices(t,e,n,i){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,n),this.c.fromBufferAttribute(t,i),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return r.subVectors(this.c,this.b),s.subVectors(this.a,this.b),.5*r.cross(s).length()}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return _.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return _.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,n,i,r){return _.getUV(t,this.a,this.b,this.c,e,n,i,r)}containsPoint(t){return _.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return _.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const n=this.a,i=this.b,r=this.c;let s,o;l.subVectors(i,n),c.subVectors(r,n),h.subVectors(t,n);const a=l.dot(h),_=c.dot(h);if(a<=0&&_<=0)return e.copy(n);d.subVectors(t,i);const m=l.dot(d),f=c.dot(d);if(m>=0&&f<=m)return e.copy(i);const g=a*f-m*_;if(g<=0&&a>=0&&m<=0)return s=a/(a-m),e.copy(n).addScaledVector(l,s);p.subVectors(t,r);const v=l.dot(p),y=c.dot(p);if(y>=0&&v<=y)return e.copy(r);const x=v*_-a*y;if(x<=0&&_>=0&&y<=0)return o=_/(_-y),e.copy(n).addScaledVector(c,o);const b=m*y-v*f;if(b<=0&&f-m>=0&&v-y>=0)return u.subVectors(r,i),o=(f-m)/(f-m+(v-y)),e.copy(i).addScaledVector(u,o);const w=1/(b+x+g);return s=x*w,o=g*w,e.copy(n).addScaledVector(l,s).addScaledVector(c,o)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return f}));var i=n(18),r=n(39),s=n(5),o=n(10),a=n(0),l=n(24),c=n(7),u=n(4);const h=new a.a,d=new a.a,p=new s.a,_=new r.a,m=new i.a;class f extends o.a{constructor(t=new c.a,e=new l.a){super(),this.type=\\\\\\\"Line\\\\\\\",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t){return super.copy(t),this.material=t.material,this.geometry=t.geometry,this}computeLineDistances(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[0];for(let t=1,i=e.count;t<i;t++)h.fromBufferAttribute(e,t-1),d.fromBufferAttribute(e,t),n[t]=n[t-1],n[t]+=h.distanceTo(d);t.setAttribute(\\\\\\\"lineDistance\\\\\\\",new u.c(n,1))}else console.warn(\\\\\\\"THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.\\\\\\\");else t.isGeometry&&console.error(\\\\\\\"THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\");return this}raycast(t,e){const n=this.geometry,i=this.matrixWorld,r=t.params.Line.threshold,s=n.drawRange;if(null===n.boundingSphere&&n.computeBoundingSphere(),m.copy(n.boundingSphere),m.applyMatrix4(i),m.radius+=r,!1===t.ray.intersectsSphere(m))return;p.copy(i).invert(),_.copy(t.ray).applyMatrix4(p);const o=r/((this.scale.x+this.scale.y+this.scale.z)/3),l=o*o,c=new a.a,u=new a.a,h=new a.a,d=new a.a,f=this.isLineSegments?2:1;if(n.isBufferGeometry){const i=n.index,r=n.attributes.position;if(null!==i){for(let n=Math.max(0,s.start),o=Math.min(i.count,s.start+s.count)-1;n<o;n+=f){const s=i.getX(n),o=i.getX(n+1);c.fromBufferAttribute(r,s),u.fromBufferAttribute(r,o);if(_.distanceSqToSegment(c,u,d,h)>l)continue;d.applyMatrix4(this.matrixWorld);const a=t.ray.origin.distanceTo(d);a<t.near||a>t.far||e.push({distance:a,point:h.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}else{for(let n=Math.max(0,s.start),i=Math.min(r.count,s.start+s.count)-1;n<i;n+=f){c.fromBufferAttribute(r,n),u.fromBufferAttribute(r,n+1);if(_.distanceSqToSegment(c,u,d,h)>l)continue;d.applyMatrix4(this.matrixWorld);const i=t.ray.origin.distanceTo(d);i<t.near||i>t.far||e.push({distance:i,point:h.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}}else n.isGeometry&&console.error(\\\\\\\"THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\")}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e<n;e++){const n=t[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[n]=e}}}}else{const e=t.morphTargets;void 0!==e&&e.length>0&&console.error(\\\\\\\"THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\")}}}f.prototype.isLine=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s}));var i=n(12),r=n(6);class s extends i.a{constructor(t){super(),this.type=\\\\\\\"PointsMaterial\\\\\\\",this.color=new r.a(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.alphaMap=t.alphaMap,this.size=t.size,this.sizeAttenuation=t.sizeAttenuation,this}}s.prototype.isPointsMaterial=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s}));var i=n(5),r=n(10);class s extends r.a{constructor(){super(),this.type=\\\\\\\"Camera\\\\\\\",this.matrixWorldInverse=new i.a,this.projectionMatrix=new i.a,this.projectionMatrixInverse=new i.a}copy(t,e){return super.copy(t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()}updateMatrixWorld(t){super.updateMatrixWorld(t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(t,e){super.updateWorldMatrix(t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return(new this.constructor).copy(this)}}s.prototype.isCamera=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return i}));class i{static decodeText(t){if(\\\\\\\"undefined\\\\\\\"!=typeof TextDecoder)return(new TextDecoder).decode(t);let e=\\\\\\\"\\\\\\\";for(let n=0,i=t.length;n<i;n++)e+=String.fromCharCode(t[n]);try{return decodeURIComponent(escape(e))}catch(t){return e}}static extractUrlBase(t){const e=t.lastIndexOf(\\\\\\\"/\\\\\\\");return-1===e?\\\\\\\"./\\\\\\\":t.substr(0,e+1)}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return h}));var i=n(5),r=n(2),s=n(0),o=n(9),a=n(59);const l=new i.a,c=new s.a,u=new s.a;class h{constructor(t){this.camera=t,this.bias=0,this.normalBias=0,this.radius=1,this.blurSamples=8,this.mapSize=new r.a(512,512),this.map=null,this.mapPass=null,this.matrix=new i.a,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new a.a,this._frameExtents=new r.a(1,1),this._viewportCount=1,this._viewports=[new o.a(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(t){const e=this.camera,n=this.matrix;c.setFromMatrixPosition(t.matrixWorld),e.position.copy(c),u.setFromMatrixPosition(t.target.matrixWorld),e.lookAt(u),e.updateMatrixWorld(),l.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),this._frustum.setFromProjectionMatrix(l),n.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),n.multiply(e.projectionMatrix),n.multiply(e.matrixWorldInverse)}getViewport(t){return this._viewports[t]}getFrameExtents(){return this._frameExtents}dispose(){this.map&&this.map.dispose(),this.mapPass&&this.mapPass.dispose()}copy(t){return this.camera=t.camera.clone(),this.bias=t.bias,this.radius=t.radius,this.mapSize.copy(t.mapSize),this}clone(){return(new this.constructor).copy(this)}toJSON(){const t={};return 0!==this.bias&&(t.bias=this.bias),0!==this.normalBias&&(t.normalBias=this.normalBias),1!==this.radius&&(t.radius=this.radius),512===this.mapSize.x&&512===this.mapSize.y||(t.mapSize=this.mapSize.toArray()),t.camera=this.camera.toJSON(!1).object,delete t.camera.matrix,t}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s}));var i=n(47),r=n(3);class s extends i.a{constructor(t){super(t),this.uuid=r.h(),this.type=\\\\\\\"Shape\\\\\\\",this.holes=[]}getPointsHoles(t){const e=[];for(let n=0,i=this.holes.length;n<i;n++)e[n]=this.holes[n].getPoints(t);return e}extractPoints(t){return{shape:this.getPoints(t),holes:this.getPointsHoles(t)}}copy(t){super.copy(t),this.holes=[];for(let e=0,n=t.holes.length;e<n;e++){const n=t.holes[e];this.holes.push(n.clone())}return this}toJSON(){const t=super.toJSON();t.uuid=this.uuid,t.holes=[];for(let e=0,n=this.holes.length;e<n;e++){const n=this.holes[e];t.holes.push(n.toJSON())}return t}fromJSON(t){super.fromJSON(t),this.uuid=t.uuid,this.holes=[];for(let e=0,n=t.holes.length;e<n;e++){const n=t.holes[e];this.holes.push((new i.a).fromJSON(n))}return this}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return d}));var i=n(2),r=n(25),s=n(74),o=n(79);class a extends r.a{constructor(){super(),this.type=\\\\\\\"CurvePath\\\\\\\",this.curves=[],this.autoClose=!1}add(t){this.curves.push(t)}closePath(){const t=this.curves[0].getPoint(0),e=this.curves[this.curves.length-1].getPoint(1);t.equals(e)||this.curves.push(new s.a(e,t))}getPoint(t,e){const n=t*this.getLength(),i=this.getCurveLengths();let r=0;for(;r<i.length;){if(i[r]>=n){const t=i[r]-n,s=this.curves[r],o=s.getLength(),a=0===o?0:1-t/o;return s.getPointAt(a,e)}r++}return null}getLength(){const t=this.getCurveLengths();return t[t.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const t=[];let e=0;for(let n=0,i=this.curves.length;n<i;n++)e+=this.curves[n].getLength(),t.push(e);return this.cacheLengths=t,t}getSpacedPoints(t=40){const e=[];for(let n=0;n<=t;n++)e.push(this.getPoint(n/t));return this.autoClose&&e.push(e[0]),e}getPoints(t=12){const e=[];let n;for(let i=0,r=this.curves;i<r.length;i++){const s=r[i],o=s&&s.isEllipseCurve?2*t:s&&(s.isLineCurve||s.isLineCurve3)?1:s&&s.isSplineCurve?t*s.points.length:t,a=s.getPoints(o);for(let t=0;t<a.length;t++){const i=a[t];n&&n.equals(i)||(e.push(i),n=i)}}return this.autoClose&&e.length>1&&!e[e.length-1].equals(e[0])&&e.push(e[0]),e}copy(t){super.copy(t),this.curves=[];for(let e=0,n=t.curves.length;e<n;e++){const n=t.curves[e];this.curves.push(n.clone())}return this.autoClose=t.autoClose,this}toJSON(){const t=super.toJSON();t.autoClose=this.autoClose,t.curves=[];for(let e=0,n=this.curves.length;e<n;e++){const n=this.curves[e];t.curves.push(n.toJSON())}return t}fromJSON(t){super.fromJSON(t),this.autoClose=t.autoClose,this.curves=[];for(let e=0,n=t.curves.length;e<n;e++){const n=t.curves[e];this.curves.push((new o[n.type]).fromJSON(n))}return this}}var l=n(57),c=n(77),u=n(75),h=n(76);class d extends a{constructor(t){super(),this.type=\\\\\\\"Path\\\\\\\",this.currentPoint=new i.a,t&&this.setFromPoints(t)}setFromPoints(t){this.moveTo(t[0].x,t[0].y);for(let e=1,n=t.length;e<n;e++)this.lineTo(t[e].x,t[e].y);return this}moveTo(t,e){return this.currentPoint.set(t,e),this}lineTo(t,e){const n=new s.a(this.currentPoint.clone(),new i.a(t,e));return this.curves.push(n),this.currentPoint.set(t,e),this}quadraticCurveTo(t,e,n,r){const s=new h.a(this.currentPoint.clone(),new i.a(t,e),new i.a(n,r));return this.curves.push(s),this.currentPoint.set(n,r),this}bezierCurveTo(t,e,n,r,s,o){const a=new u.a(this.currentPoint.clone(),new i.a(t,e),new i.a(n,r),new i.a(s,o));return this.curves.push(a),this.currentPoint.set(s,o),this}splineThru(t){const e=[this.currentPoint.clone()].concat(t),n=new c.a(e);return this.curves.push(n),this.currentPoint.copy(t[t.length-1]),this}arc(t,e,n,i,r,s){const o=this.currentPoint.x,a=this.currentPoint.y;return this.absarc(t+o,e+a,n,i,r,s),this}absarc(t,e,n,i,r,s){return this.absellipse(t,e,n,n,i,r,s),this}ellipse(t,e,n,i,r,s,o,a){const l=this.currentPoint.x,c=this.currentPoint.y;return this.absellipse(t+l,e+c,n,i,r,s,o,a),this}absellipse(t,e,n,i,r,s,o,a){const c=new l.a(t,e,n,i,r,s,o,a);if(this.curves.length>0){const t=c.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(c);const u=c.getPoint(1);return this.currentPoint.copy(u),this}copy(t){return super.copy(t),this.currentPoint.copy(t.currentPoint),this}toJSON(){const t=super.toJSON();return t.currentPoint=this.currentPoint.toArray(),t}fromJSON(t){return super.fromJSON(t),this.currentPoint.fromArray(t.currentPoint),this}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return a}));var i=n(6),r=n(47),s=n(46),o=n(53);class a{constructor(){this.type=\\\\\\\"ShapePath\\\\\\\",this.color=new i.a,this.subPaths=[],this.currentPath=null}moveTo(t,e){return this.currentPath=new r.a,this.subPaths.push(this.currentPath),this.currentPath.moveTo(t,e),this}lineTo(t,e){return this.currentPath.lineTo(t,e),this}quadraticCurveTo(t,e,n,i){return this.currentPath.quadraticCurveTo(t,e,n,i),this}bezierCurveTo(t,e,n,i,r,s){return this.currentPath.bezierCurveTo(t,e,n,i,r,s),this}splineThru(t){return this.currentPath.splineThru(t),this}toShapes(t,e){function n(t){const e=[];for(let n=0,i=t.length;n<i;n++){const i=t[n],r=new s.a;r.curves=i.curves,e.push(r)}return e}function i(t,e){const n=e.length;let i=!1;for(let r=n-1,s=0;s<n;r=s++){let n=e[r],o=e[s],a=o.x-n.x,l=o.y-n.y;if(Math.abs(l)>Number.EPSILON){if(l<0&&(n=e[s],a=-a,o=e[r],l=-l),t.y<n.y||t.y>o.y)continue;if(t.y===n.y){if(t.x===n.x)return!0}else{const e=l*(t.x-n.x)-a*(t.y-n.y);if(0===e)return!0;if(e<0)continue;i=!i}}else{if(t.y!==n.y)continue;if(o.x<=t.x&&t.x<=n.x||n.x<=t.x&&t.x<=o.x)return!0}}return i}const r=o.a.isClockWise,a=this.subPaths;if(0===a.length)return[];if(!0===e)return n(a);let l,c,u;const h=[];if(1===a.length)return c=a[0],u=new s.a,u.curves=c.curves,h.push(u),h;let d=!r(a[0].getPoints());d=t?!d:d;const p=[],_=[];let m,f,g=[],v=0;_[v]=void 0,g[v]=[];for(let e=0,n=a.length;e<n;e++)c=a[e],m=c.getPoints(),l=r(m),l=t?!l:l,l?(!d&&_[v]&&v++,_[v]={s:new s.a,p:m},_[v].s.curves=c.curves,d&&v++,g[v]=[]):g[v].push({h:c,p:m[0]});if(!_[0])return n(a);if(_.length>1){let t=!1;const e=[];for(let t=0,e=_.length;t<e;t++)p[t]=[];for(let n=0,r=_.length;n<r;n++){const r=g[n];for(let s=0;s<r.length;s++){const o=r[s];let a=!0;for(let r=0;r<_.length;r++)i(o.p,_[r].p)&&(n!==r&&e.push({froms:n,tos:r,hole:s}),a?(a=!1,p[r].push(o)):t=!0);a&&p[n].push(o)}}e.length>0&&(t||(g=p))}for(let t=0,e=_.length;t<e;t++){u=_[t].s,h.push(u),f=g[t];for(let t=0,e=f.length;t<e;t++)u.holes.push(f[t].h)}return h}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return _}));var i=n(18),r=n(39),s=n(5),o=n(10),a=n(0),l=n(42),c=n(7);const u=new s.a,h=new r.a,d=new i.a,p=new a.a;class _ extends o.a{constructor(t=new c.a,e=new l.a){super(),this.type=\\\\\\\"Points\\\\\\\",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t){return super.copy(t),this.material=t.material,this.geometry=t.geometry,this}raycast(t,e){const n=this.geometry,i=this.matrixWorld,r=t.params.Points.threshold,s=n.drawRange;if(null===n.boundingSphere&&n.computeBoundingSphere(),d.copy(n.boundingSphere),d.applyMatrix4(i),d.radius+=r,!1===t.ray.intersectsSphere(d))return;u.copy(i).invert(),h.copy(t.ray).applyMatrix4(u);const o=r/((this.scale.x+this.scale.y+this.scale.z)/3),a=o*o;if(n.isBufferGeometry){const r=n.index,o=n.attributes.position;if(null!==r){for(let n=Math.max(0,s.start),l=Math.min(r.count,s.start+s.count);n<l;n++){const s=r.getX(n);p.fromBufferAttribute(o,s),m(p,s,a,i,t,e,this)}}else{for(let n=Math.max(0,s.start),r=Math.min(o.count,s.start+s.count);n<r;n++)p.fromBufferAttribute(o,n),m(p,n,a,i,t,e,this)}}else console.error(\\\\\\\"THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\")}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e<n;e++){const n=t[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[n]=e}}}}else{const e=t.morphTargets;void 0!==e&&e.length>0&&console.error(\\\\\\\"THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\")}}}function m(t,e,n,i,r,s,o){const l=h.distanceSqToPoint(t);if(l<n){const n=new a.a;h.closestPointToPoint(t,n),n.applyMatrix4(i);const c=r.ray.origin.distanceTo(n);if(c<r.near||c>r.far)return;s.push({distance:c,distanceToRay:Math.sqrt(l),point:n,index:e,face:null,object:o})}}_.prototype.isPoints=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r}));var i=n(26);class r extends i.a{}r.prototype.ValueTypeName=\\\\\\\"number\\\\\\\"},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r}));var i=n(26);class r extends i.a{}r.prototype.ValueTypeName=\\\\\\\"vector\\\\\\\"},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r}));var i=n(10);class r extends i.a{constructor(){super(),this.type=\\\\\\\"Bone\\\\\\\"}}r.prototype.isBone=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return C}));const i=function(t,e,n=2){const i=e&&e.length,a=i?e[0]*n:t.length;let l=r(t,0,a,n,!0);const c=[];if(!l||l.next===l.prev)return c;let u,p,_,f,g,v,y;if(i&&(l=function(t,e,n,i){const o=[];let a,l,c,u,p;for(a=0,l=e.length;a<l;a++)c=e[a]*i,u=a<l-1?e[a+1]*i:t.length,p=r(t,c,u,i,!1),p===p.next&&(p.steiner=!0),o.push(m(p));for(o.sort(h),a=0;a<o.length;a++)d(o[a],n),n=s(n,n.next);return n}(t,e,l,n)),t.length>80*n){u=_=t[0],p=f=t[1];for(let e=n;e<a;e+=n)g=t[e],v=t[e+1],g<u&&(u=g),v<p&&(p=v),g>_&&(_=g),v>f&&(f=v);y=Math.max(_-u,f-p),y=0!==y?1/y:0}return o(l,c,n,u,p,y),c};function r(t,e,n,i,r){let s,o;if(r===function(t,e,n,i){let r=0;for(let s=e,o=n-i;s<n;s+=i)r+=(t[o]-t[s])*(t[s+1]+t[o+1]),o=s;return r}(t,e,n,i)>0)for(s=e;s<n;s+=i)o=E(s,t[s],t[s+1],o);else for(s=n-i;s>=e;s-=i)o=E(s,t[s],t[s+1],o);return o&&y(o,o.next)&&(M(o),o=o.next),o}function s(t,e){if(!t)return t;e||(e=t);let n,i=t;do{if(n=!1,i.steiner||!y(i,i.next)&&0!==v(i.prev,i,i.next))i=i.next;else{if(M(i),i=e=i.prev,i===i.next)break;n=!0}}while(n||i!==e);return e}function o(t,e,n,i,r,h,d){if(!t)return;!d&&h&&function(t,e,n,i){let r=t;do{null===r.z&&(r.z=_(r.x,r.y,e,n,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let e,n,i,r,s,o,a,l,c=1;do{for(n=t,t=null,s=null,o=0;n;){for(o++,i=n,a=0,e=0;e<c&&(a++,i=i.nextZ,i);e++);for(l=c;a>0||l>0&&i;)0!==a&&(0===l||!i||n.z<=i.z)?(r=n,n=n.nextZ,a--):(r=i,i=i.nextZ,l--),s?s.nextZ=r:t=r,r.prevZ=s,s=r;n=i}s.nextZ=null,c*=2}while(o>1)}(r)}(t,i,r,h);let p,m,f=t;for(;t.prev!==t.next;)if(p=t.prev,m=t.next,h?l(t,i,r,h):a(t))e.push(p.i/n),e.push(t.i/n),e.push(m.i/n),M(t),t=m.next,f=m.next;else if((t=m)===f){d?1===d?o(t=c(s(t),e,n),e,n,i,r,h,2):2===d&&u(t,e,n,i,r,h):o(s(t),e,n,i,r,h,1);break}}function a(t){const e=t.prev,n=t,i=t.next;if(v(e,n,i)>=0)return!1;let r=t.next.next;for(;r!==t.prev;){if(f(e.x,e.y,n.x,n.y,i.x,i.y,r.x,r.y)&&v(r.prev,r,r.next)>=0)return!1;r=r.next}return!0}function l(t,e,n,i){const r=t.prev,s=t,o=t.next;if(v(r,s,o)>=0)return!1;const a=r.x<s.x?r.x<o.x?r.x:o.x:s.x<o.x?s.x:o.x,l=r.y<s.y?r.y<o.y?r.y:o.y:s.y<o.y?s.y:o.y,c=r.x>s.x?r.x>o.x?r.x:o.x:s.x>o.x?s.x:o.x,u=r.y>s.y?r.y>o.y?r.y:o.y:s.y>o.y?s.y:o.y,h=_(a,l,e,n,i),d=_(c,u,e,n,i);let p=t.prevZ,m=t.nextZ;for(;p&&p.z>=h&&m&&m.z<=d;){if(p!==t.prev&&p!==t.next&&f(r.x,r.y,s.x,s.y,o.x,o.y,p.x,p.y)&&v(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,m!==t.prev&&m!==t.next&&f(r.x,r.y,s.x,s.y,o.x,o.y,m.x,m.y)&&v(m.prev,m,m.next)>=0)return!1;m=m.nextZ}for(;p&&p.z>=h;){if(p!==t.prev&&p!==t.next&&f(r.x,r.y,s.x,s.y,o.x,o.y,p.x,p.y)&&v(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;m&&m.z<=d;){if(m!==t.prev&&m!==t.next&&f(r.x,r.y,s.x,s.y,o.x,o.y,m.x,m.y)&&v(m.prev,m,m.next)>=0)return!1;m=m.nextZ}return!0}function c(t,e,n){let i=t;do{const r=i.prev,s=i.next.next;!y(r,s)&&x(r,i,i.next,s)&&T(r,s)&&T(s,r)&&(e.push(r.i/n),e.push(i.i/n),e.push(s.i/n),M(i),M(i.next),i=t=s),i=i.next}while(i!==t);return s(i)}function u(t,e,n,i,r,a){let l=t;do{let t=l.next.next;for(;t!==l.prev;){if(l.i!==t.i&&g(l,t)){let c=A(l,t);return l=s(l,l.next),c=s(c,c.next),o(l,e,n,i,r,a),void o(c,e,n,i,r,a)}t=t.next}l=l.next}while(l!==t)}function h(t,e){return t.x-e.x}function d(t,e){if(e=function(t,e){let n=e;const i=t.x,r=t.y;let s,o=-1/0;do{if(r<=n.y&&r>=n.next.y&&n.next.y!==n.y){const t=n.x+(r-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(t<=i&&t>o){if(o=t,t===i){if(r===n.y)return n;if(r===n.next.y)return n.next}s=n.x<n.next.x?n:n.next}}n=n.next}while(n!==e);if(!s)return null;if(i===o)return s;const a=s,l=s.x,c=s.y;let u,h=1/0;n=s;do{i>=n.x&&n.x>=l&&i!==n.x&&f(r<c?i:o,r,l,c,r<c?o:i,r,n.x,n.y)&&(u=Math.abs(r-n.y)/(i-n.x),T(n,t)&&(u<h||u===h&&(n.x>s.x||n.x===s.x&&p(s,n)))&&(s=n,h=u)),n=n.next}while(n!==a);return s}(t,e)){const n=A(e,t);s(e,e.next),s(n,n.next)}}function p(t,e){return v(t.prev,t,e.prev)<0&&v(e.next,t,t.next)<0}function _(t,e,n,i,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*r)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-i)*r)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function m(t){let e=t,n=t;do{(e.x<n.x||e.x===n.x&&e.y<n.y)&&(n=e),e=e.next}while(e!==t);return n}function f(t,e,n,i,r,s,o,a){return(r-o)*(e-a)-(t-o)*(s-a)>=0&&(t-o)*(i-a)-(n-o)*(e-a)>=0&&(n-o)*(s-a)-(r-o)*(i-a)>=0}function g(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){let n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&x(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(T(t,e)&&T(e,t)&&function(t,e){let n=t,i=!1;const r=(t.x+e.x)/2,s=(t.y+e.y)/2;do{n.y>s!=n.next.y>s&&n.next.y!==n.y&&r<(n.next.x-n.x)*(s-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next}while(n!==t);return i}(t,e)&&(v(t.prev,t,e.prev)||v(t,e.prev,e))||y(t,e)&&v(t.prev,t,t.next)>0&&v(e.prev,e,e.next)>0)}function v(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function y(t,e){return t.x===e.x&&t.y===e.y}function x(t,e,n,i){const r=w(v(t,e,n)),s=w(v(t,e,i)),o=w(v(n,i,t)),a=w(v(n,i,e));return r!==s&&o!==a||(!(0!==r||!b(t,n,e))||(!(0!==s||!b(t,i,e))||(!(0!==o||!b(n,t,i))||!(0!==a||!b(n,e,i)))))}function b(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function w(t){return t>0?1:t<0?-1:0}function T(t,e){return v(t.prev,t,t.next)<0?v(t,e,t.next)>=0&&v(t,t.prev,e)>=0:v(t,e,t.prev)<0||v(t,t.next,e)<0}function A(t,e){const n=new S(t.i,t.x,t.y),i=new S(e.i,e.x,e.y),r=t.next,s=e.prev;return t.next=e,e.prev=t,n.next=r,r.prev=n,i.next=n,n.prev=i,s.next=i,i.prev=s,i}function E(t,e,n,i){const r=new S(t,e,n);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function M(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function S(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}class C{static area(t){const e=t.length;let n=0;for(let i=e-1,r=0;r<e;i=r++)n+=t[i].x*t[r].y-t[r].x*t[i].y;return.5*n}static isClockWise(t){return C.area(t)<0}static triangulateShape(t,e){const n=[],r=[],s=[];N(t),L(n,t);let o=t.length;e.forEach(N);for(let t=0;t<e.length;t++)r.push(o),o+=e[t].length,L(n,e[t]);const a=i(n,r);for(let t=0;t<a.length;t+=3)s.push(a.slice(t,t+3));return s}}function N(t){const e=t.length;e>2&&t[e-1].equals(t[0])&&t.pop()}function L(t,e){for(let n=0;n<e.length;n++)t.push(e[n].x),t.push(e[n].y)}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return l}));var i=n(1),r=n(26),s=n(38),o=n(8);class a extends s.a{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){const r=this.resultBuffer,s=this.sampleValues,a=this.valueSize,l=(n-e)/(i-e);let c=t*a;for(let t=c+a;c!==t;c+=4)o.a.slerpFlat(r,0,s,c-a,s,c,l);return r}}class l extends r.a{InterpolantFactoryMethodLinear(t){return new a(this.times,this.values,this.getValueSize(),t)}}l.prototype.ValueTypeName=\\\\\\\"quaternion\\\\\\\",l.prototype.DefaultInterpolation=i.P,l.prototype.InterpolantFactoryMethodSmooth=void 0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return a}));var i=n(1),r=n(12),s=n(2),o=n(6);class a extends r.a{constructor(t){super(),this.defines={STANDARD:\\\\\\\"\\\\\\\"},this.type=\\\\\\\"MeshStandardMaterial\\\\\\\",this.color=new o.a(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new o.a(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=i.Uc,this.normalScale=new s.a(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\\\\\\\"round\\\\\\\",this.wireframeLinejoin=\\\\\\\"round\\\\\\\",this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.defines={STANDARD:\\\\\\\"\\\\\\\"},this.color.copy(t.color),this.roughness=t.roughness,this.metalness=t.metalness,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.roughnessMap=t.roughnessMap,this.metalnessMap=t.metalnessMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapIntensity=t.envMapIntensity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this}}a.prototype.isMeshStandardMaterial=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return a}));var i=n(1),r=n(12),s=n(2),o=n(6);class a extends r.a{constructor(t){super(),this.type=\\\\\\\"MeshPhongMaterial\\\\\\\",this.color=new o.a(16777215),this.specular=new o.a(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new o.a(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=i.Uc,this.normalScale=new s.a(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=i.nb,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\\\\\\\"round\\\\\\\",this.wireframeLinejoin=\\\\\\\"round\\\\\\\",this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.specular.copy(t.specular),this.shininess=t.shininess,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this}}a.prototype.isMeshPhongMaterial=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s}));var i=n(25),r=n(2);class s extends i.a{constructor(t=0,e=0,n=1,i=1,r=0,s=2*Math.PI,o=!1,a=0){super(),this.type=\\\\\\\"EllipseCurve\\\\\\\",this.aX=t,this.aY=e,this.xRadius=n,this.yRadius=i,this.aStartAngle=r,this.aEndAngle=s,this.aClockwise=o,this.aRotation=a}getPoint(t,e){const n=e||new r.a,i=2*Math.PI;let s=this.aEndAngle-this.aStartAngle;const o=Math.abs(s)<Number.EPSILON;for(;s<0;)s+=i;for(;s>i;)s-=i;s<Number.EPSILON&&(s=o?0:i),!0!==this.aClockwise||o||(s===i?s=-i:s-=i);const a=this.aStartAngle+t*s;let l=this.aX+this.xRadius*Math.cos(a),c=this.aY+this.yRadius*Math.sin(a);if(0!==this.aRotation){const t=Math.cos(this.aRotation),e=Math.sin(this.aRotation),n=l-this.aX,i=c-this.aY;l=n*t-i*e+this.aX,c=n*e+i*t+this.aY}return n.set(l,c)}copy(t){return super.copy(t),this.aX=t.aX,this.aY=t.aY,this.xRadius=t.xRadius,this.yRadius=t.yRadius,this.aStartAngle=t.aStartAngle,this.aEndAngle=t.aEndAngle,this.aClockwise=t.aClockwise,this.aRotation=t.aRotation,this}toJSON(){const t=super.toJSON();return t.aX=this.aX,t.aY=this.aY,t.xRadius=this.xRadius,t.yRadius=this.yRadius,t.aStartAngle=this.aStartAngle,t.aEndAngle=this.aEndAngle,t.aClockwise=this.aClockwise,t.aRotation=this.aRotation,t}fromJSON(t){return super.fromJSON(t),this.aX=t.aX,this.aY=t.aY,this.xRadius=t.xRadius,this.yRadius=t.yRadius,this.aStartAngle=t.aStartAngle,this.aEndAngle=t.aEndAngle,this.aClockwise=t.aClockwise,this.aRotation=t.aRotation,this}}s.prototype.isEllipseCurve=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return _}));var i=n(32),r=n(45),s=n(30),o=n(5),a=n(2),l=n(0),c=n(9);const u=new o.a,h=new l.a,d=new l.a;class p extends r.a{constructor(){super(new s.a(90,1,.5,500)),this._frameExtents=new a.a(4,2),this._viewportCount=6,this._viewports=[new c.a(2,1,1,1),new c.a(0,1,1,1),new c.a(3,1,1,1),new c.a(1,1,1,1),new c.a(3,0,1,1),new c.a(1,0,1,1)],this._cubeDirections=[new l.a(1,0,0),new l.a(-1,0,0),new l.a(0,0,1),new l.a(0,0,-1),new l.a(0,1,0),new l.a(0,-1,0)],this._cubeUps=[new l.a(0,1,0),new l.a(0,1,0),new l.a(0,1,0),new l.a(0,1,0),new l.a(0,0,1),new l.a(0,0,-1)]}updateMatrices(t,e=0){const n=this.camera,i=this.matrix,r=t.distance||n.far;r!==n.far&&(n.far=r,n.updateProjectionMatrix()),h.setFromMatrixPosition(t.matrixWorld),n.position.copy(h),d.copy(n.position),d.add(this._cubeDirections[e]),n.up.copy(this._cubeUps[e]),n.lookAt(d),n.updateMatrixWorld(),i.makeTranslation(-h.x,-h.y,-h.z),u.multiplyMatrices(n.projectionMatrix,n.matrixWorldInverse),this._frustum.setFromProjectionMatrix(u)}}p.prototype.isPointLightShadow=!0;class _ extends i.a{constructor(t,e,n=0,i=1){super(t,e),this.type=\\\\\\\"PointLight\\\\\\\",this.distance=n,this.decay=i,this.shadow=new p}get power(){return 4*this.intensity*Math.PI}set power(t){this.intensity=t/(4*Math.PI)}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.distance=t.distance,this.decay=t.decay,this.shadow=t.shadow.clone(),this}}_.prototype.isPointLight=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return l}));var i=n(0),r=n(18),s=n(34);const o=new r.a,a=new i.a;class l{constructor(t=new s.a,e=new s.a,n=new s.a,i=new s.a,r=new s.a,o=new s.a){this.planes=[t,e,n,i,r,o]}set(t,e,n,i,r,s){const o=this.planes;return o[0].copy(t),o[1].copy(e),o[2].copy(n),o[3].copy(i),o[4].copy(r),o[5].copy(s),this}copy(t){const e=this.planes;for(let n=0;n<6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t){const e=this.planes,n=t.elements,i=n[0],r=n[1],s=n[2],o=n[3],a=n[4],l=n[5],c=n[6],u=n[7],h=n[8],d=n[9],p=n[10],_=n[11],m=n[12],f=n[13],g=n[14],v=n[15];return e[0].setComponents(o-i,u-a,_-h,v-m).normalize(),e[1].setComponents(o+i,u+a,_+h,v+m).normalize(),e[2].setComponents(o+r,u+l,_+d,v+f).normalize(),e[3].setComponents(o-r,u-l,_-d,v-f).normalize(),e[4].setComponents(o-s,u-c,_-p,v-g).normalize(),e[5].setComponents(o+s,u+c,_+p,v+g).normalize(),this}intersectsObject(t){const e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),o.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere(o)}intersectsSprite(t){return o.center.set(0,0,0),o.radius=.7071067811865476,o.applyMatrix4(t.matrixWorld),this.intersectsSphere(o)}intersectsSphere(t){const e=this.planes,n=t.center,i=-t.radius;for(let t=0;t<6;t++){if(e[t].distanceToPoint(n)<i)return!1}return!0}intersectsBox(t){const e=this.planes;for(let n=0;n<6;n++){const i=e[n];if(a.x=i.normal.x>0?t.max.x:t.min.x,a.y=i.normal.y>0?t.max.y:t.min.y,a.z=i.normal.z>0?t.max.z:t.min.z,i.distanceToPoint(a)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}clone(){return(new this.constructor).copy(this)}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s}));const i=new Float32Array(1),r=new Int32Array(i.buffer);class s{static toHalfFloat(t){t>65504&&(console.warn(\\\\\\\"THREE.DataUtils.toHalfFloat(): value exceeds 65504.\\\\\\\"),t=65504),i[0]=t;const e=r[0];let n=e>>16&32768,s=e>>12&2047;const o=e>>23&255;return o<103?n:o>142?(n|=31744,n|=(255==o?0:1)&&8388607&e,n):o<113?(s|=2048,n|=(s>>114-o)+(s>>113-o&1),n):(n|=o-112<<10|s>>1,n+=1&s,n)}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return o}));var i=n(12),r=n(1),s=n(6);class o extends i.a{constructor(t){super(),this.type=\\\\\\\"MeshLambertMaterial\\\\\\\",this.color=new s.a(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new s.a(0),this.emissiveIntensity=1,this.emissiveMap=null,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=r.nb,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\\\\\\\"round\\\\\\\",this.wireframeLinejoin=\\\\\\\"round\\\\\\\",this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this}}o.prototype.isMeshLambertMaterial=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return o}));var i=n(17),r=n(13),s=n(20);class o extends r.a{constructor(t){super(t)}load(t,e,n,r){void 0!==this.path&&(t=this.path+t),t=this.manager.resolveURL(t);const o=this,a=i.a.get(t);if(void 0!==a)return o.manager.itemStart(t),setTimeout((function(){e&&e(a),o.manager.itemEnd(t)}),0),a;const l=Object(s.b)(\\\\\\\"img\\\\\\\");function c(){l.removeEventListener(\\\\\\\"load\\\\\\\",c,!1),l.removeEventListener(\\\\\\\"error\\\\\\\",u,!1),i.a.add(t,this),e&&e(this),o.manager.itemEnd(t)}function u(e){l.removeEventListener(\\\\\\\"load\\\\\\\",c,!1),l.removeEventListener(\\\\\\\"error\\\\\\\",u,!1),r&&r(e),o.manager.itemError(t),o.manager.itemEnd(t)}return l.addEventListener(\\\\\\\"load\\\\\\\",c,!1),l.addEventListener(\\\\\\\"error\\\\\\\",u,!1),\\\\\\\"data:\\\\\\\"!==t.substr(0,5)&&void 0!==this.crossOrigin&&(l.crossOrigin=this.crossOrigin),o.manager.itemStart(t),l.src=t,l}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return p}));var i=n(19),r=n(26),s=n(1);class o extends r.a{}o.prototype.ValueTypeName=\\\\\\\"bool\\\\\\\",o.prototype.ValueBufferType=Array,o.prototype.DefaultInterpolation=s.O,o.prototype.InterpolantFactoryMethodLinear=void 0,o.prototype.InterpolantFactoryMethodSmooth=void 0;class a extends r.a{}a.prototype.ValueTypeName=\\\\\\\"color\\\\\\\";var l=n(50),c=n(54);class u extends r.a{}u.prototype.ValueTypeName=\\\\\\\"string\\\\\\\",u.prototype.ValueBufferType=Array,u.prototype.DefaultInterpolation=s.O,u.prototype.InterpolantFactoryMethodLinear=void 0,u.prototype.InterpolantFactoryMethodSmooth=void 0;var h=n(51),d=n(3);class p{constructor(t,e=-1,n,i=s.wb){this.name=t,this.tracks=n,this.duration=e,this.blendMode=i,this.uuid=d.h(),this.duration<0&&this.resetDuration()}static parse(t){const e=[],n=t.tracks,i=1/(t.fps||1);for(let t=0,r=n.length;t!==r;++t)e.push(_(n[t]).scale(i));const r=new this(t.name,t.duration,e,t.blendMode);return r.uuid=t.uuid,r}static toJSON(t){const e=[],n=t.tracks,i={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode};for(let t=0,i=n.length;t!==i;++t)e.push(r.a.toJSON(n[t]));return i}static CreateFromMorphTargetSequence(t,e,n,r){const s=e.length,o=[];for(let t=0;t<s;t++){let a=[],c=[];a.push((t+s-1)%s,t,(t+1)%s),c.push(0,1,0);const u=i.a.getKeyframeOrder(a);a=i.a.sortedArray(a,1,u),c=i.a.sortedArray(c,1,u),r||0!==a[0]||(a.push(s),c.push(c[0])),o.push(new l.a(\\\\\\\".morphTargetInfluences[\\\\\\\"+e[t].name+\\\\\\\"]\\\\\\\",a,c).scale(1/n))}return new this(t,-1,o)}static findByName(t,e){let n=t;if(!Array.isArray(t)){const e=t;n=e.geometry&&e.geometry.animations||e.animations}for(let t=0;t<n.length;t++)if(n[t].name===e)return n[t];return null}static CreateClipsFromMorphTargetSequences(t,e,n){const i={},r=/^([\\\\w-]*?)([\\\\d]+)$/;for(let e=0,n=t.length;e<n;e++){const n=t[e],s=n.name.match(r);if(s&&s.length>1){const t=s[1];let e=i[t];e||(i[t]=e=[]),e.push(n)}}const s=[];for(const t in i)s.push(this.CreateFromMorphTargetSequence(t,i[t],e,n));return s}static parseAnimation(t,e){if(!t)return console.error(\\\\\\\"THREE.AnimationClip: No animation in JSONLoader data.\\\\\\\"),null;const n=function(t,e,n,r,s){if(0!==n.length){const o=[],a=[];i.a.flattenJSON(n,o,a,r),0!==o.length&&s.push(new t(e,o,a))}},r=[],s=t.name||\\\\\\\"default\\\\\\\",o=t.fps||30,a=t.blendMode;let u=t.length||-1;const d=t.hierarchy||[];for(let t=0;t<d.length;t++){const i=d[t].keys;if(i&&0!==i.length)if(i[0].morphTargets){const t={};let e;for(e=0;e<i.length;e++)if(i[e].morphTargets)for(let n=0;n<i[e].morphTargets.length;n++)t[i[e].morphTargets[n]]=-1;for(const n in t){const t=[],s=[];for(let r=0;r!==i[e].morphTargets.length;++r){const r=i[e];t.push(r.time),s.push(r.morphTarget===n?1:0)}r.push(new l.a(\\\\\\\".morphTargetInfluence[\\\\\\\"+n+\\\\\\\"]\\\\\\\",t,s))}u=t.length*(o||1)}else{const s=\\\\\\\".bones[\\\\\\\"+e[t].name+\\\\\\\"]\\\\\\\";n(h.a,s+\\\\\\\".position\\\\\\\",i,\\\\\\\"pos\\\\\\\",r),n(c.a,s+\\\\\\\".quaternion\\\\\\\",i,\\\\\\\"rot\\\\\\\",r),n(h.a,s+\\\\\\\".scale\\\\\\\",i,\\\\\\\"scl\\\\\\\",r)}}if(0===r.length)return null;return new this(s,u,r,a)}resetDuration(){let t=0;for(let e=0,n=this.tracks.length;e!==n;++e){const n=this.tracks[e];t=Math.max(t,n.times[n.times.length-1])}return this.duration=t,this}trim(){for(let t=0;t<this.tracks.length;t++)this.tracks[t].trim(0,this.duration);return this}validate(){let t=!0;for(let e=0;e<this.tracks.length;e++)t=t&&this.tracks[e].validate();return t}optimize(){for(let t=0;t<this.tracks.length;t++)this.tracks[t].optimize();return this}clone(){const t=[];for(let e=0;e<this.tracks.length;e++)t.push(this.tracks[e].clone());return new this.constructor(this.name,this.duration,t,this.blendMode)}toJSON(){return this.constructor.toJSON(this)}}function _(t){if(void 0===t.type)throw new Error(\\\\\\\"THREE.KeyframeTrack: track type undefined, can not parse\\\\\\\");const e=function(t){switch(t.toLowerCase()){case\\\\\\\"scalar\\\\\\\":case\\\\\\\"double\\\\\\\":case\\\\\\\"float\\\\\\\":case\\\\\\\"number\\\\\\\":case\\\\\\\"integer\\\\\\\":return l.a;case\\\\\\\"vector\\\\\\\":case\\\\\\\"vector2\\\\\\\":case\\\\\\\"vector3\\\\\\\":case\\\\\\\"vector4\\\\\\\":return h.a;case\\\\\\\"color\\\\\\\":return a;case\\\\\\\"quaternion\\\\\\\":return c.a;case\\\\\\\"bool\\\\\\\":case\\\\\\\"boolean\\\\\\\":return o;case\\\\\\\"string\\\\\\\":return u}throw new Error(\\\\\\\"THREE.KeyframeTrack: Unsupported typeName: \\\\\\\"+t)}(t.type);if(void 0===t.times){const e=[],n=[];i.a.flattenJSON(t.keys,e,n,\\\\\\\"value\\\\\\\"),t.times=e,t.values=n}return void 0!==e.parse?e.parse(t):new e(t.name,t.times,t.values,t.interpolation)}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return o}));var i=n(0),r=n(4);const s=new i.a;class o{constructor(t,e,n,i=!1){this.name=\\\\\\\"\\\\\\\",this.data=t,this.itemSize=e,this.offset=n,this.normalized=!0===i}get count(){return this.data.count}get array(){return this.data.array}set needsUpdate(t){this.data.needsUpdate=t}applyMatrix4(t){for(let e=0,n=this.data.count;e<n;e++)s.x=this.getX(e),s.y=this.getY(e),s.z=this.getZ(e),s.applyMatrix4(t),this.setXYZ(e,s.x,s.y,s.z);return this}applyNormalMatrix(t){for(let e=0,n=this.count;e<n;e++)s.x=this.getX(e),s.y=this.getY(e),s.z=this.getZ(e),s.applyNormalMatrix(t),this.setXYZ(e,s.x,s.y,s.z);return this}transformDirection(t){for(let e=0,n=this.count;e<n;e++)s.x=this.getX(e),s.y=this.getY(e),s.z=this.getZ(e),s.transformDirection(t),this.setXYZ(e,s.x,s.y,s.z);return this}setX(t,e){return this.data.array[t*this.data.stride+this.offset]=e,this}setY(t,e){return this.data.array[t*this.data.stride+this.offset+1]=e,this}setZ(t,e){return this.data.array[t*this.data.stride+this.offset+2]=e,this}setW(t,e){return this.data.array[t*this.data.stride+this.offset+3]=e,this}getX(t){return this.data.array[t*this.data.stride+this.offset]}getY(t){return this.data.array[t*this.data.stride+this.offset+1]}getZ(t){return this.data.array[t*this.data.stride+this.offset+2]}getW(t){return this.data.array[t*this.data.stride+this.offset+3]}setXY(t,e,n){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=n,this}setXYZ(t,e,n,i){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=n,this.data.array[t+2]=i,this}setXYZW(t,e,n,i,r){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=n,this.data.array[t+2]=i,this.data.array[t+3]=r,this}clone(t){if(void 0===t){console.log(\\\\\\\"THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.\\\\\\\");const t=[];for(let e=0;e<this.count;e++){const n=e*this.data.stride+this.offset;for(let e=0;e<this.itemSize;e++)t.push(this.data.array[n+e])}return new r.a(new this.array.constructor(t),this.itemSize,this.normalized)}return void 0===t.interleavedBuffers&&(t.interleavedBuffers={}),void 0===t.interleavedBuffers[this.data.uuid]&&(t.interleavedBuffers[this.data.uuid]=this.data.clone(t)),new o(t.interleavedBuffers[this.data.uuid],this.itemSize,this.offset,this.normalized)}toJSON(t){if(void 0===t){console.log(\\\\\\\"THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.\\\\\\\");const t=[];for(let e=0;e<this.count;e++){const n=e*this.data.stride+this.offset;for(let e=0;e<this.itemSize;e++)t.push(this.data.array[n+e])}return{itemSize:this.itemSize,type:this.array.constructor.name,array:t,normalized:this.normalized}}return void 0===t.interleavedBuffers&&(t.interleavedBuffers={}),void 0===t.interleavedBuffers[this.data.uuid]&&(t.interleavedBuffers[this.data.uuid]=this.data.toJSON(t)),{isInterleavedBufferAttribute:!0,itemSize:this.itemSize,data:this.data.uuid,offset:this.offset,normalized:this.normalized}}}o.prototype.isInterleavedBufferAttribute=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return a}));var i=n(2),r=n(55),s=n(6),o=n(3);class a extends r.a{constructor(t){super(),this.defines={STANDARD:\\\\\\\"\\\\\\\",PHYSICAL:\\\\\\\"\\\\\\\"},this.type=\\\\\\\"MeshPhysicalMaterial\\\\\\\",this.clearcoatMap=null,this.clearcoatRoughness=0,this.clearcoatRoughnessMap=null,this.clearcoatNormalScale=new i.a(1,1),this.clearcoatNormalMap=null,this.ior=1.5,Object.defineProperty(this,\\\\\\\"reflectivity\\\\\\\",{get:function(){return o.d(2.5*(this.ior-1)/(this.ior+1),0,1)},set:function(t){this.ior=(1+.4*t)/(1-.4*t)}}),this.sheenTint=new s.a(0),this.sheenRoughness=1,this.transmissionMap=null,this.thickness=.01,this.thicknessMap=null,this.attenuationDistance=0,this.attenuationTint=new s.a(1,1,1),this.specularIntensity=1,this.specularIntensityMap=null,this.specularTint=new s.a(1,1,1),this.specularTintMap=null,this._sheen=0,this._clearcoat=0,this._transmission=0,this.setValues(t)}get sheen(){return this._sheen}set sheen(t){this._sheen>0!=t>0&&this.version++,this._sheen=t}get clearcoat(){return this._clearcoat}set clearcoat(t){this._clearcoat>0!=t>0&&this.version++,this._clearcoat=t}get transmission(){return this._transmission}set transmission(t){this._transmission>0!=t>0&&this.version++,this._transmission=t}copy(t){return super.copy(t),this.defines={STANDARD:\\\\\\\"\\\\\\\",PHYSICAL:\\\\\\\"\\\\\\\"},this.clearcoat=t.clearcoat,this.clearcoatMap=t.clearcoatMap,this.clearcoatRoughness=t.clearcoatRoughness,this.clearcoatRoughnessMap=t.clearcoatRoughnessMap,this.clearcoatNormalMap=t.clearcoatNormalMap,this.clearcoatNormalScale.copy(t.clearcoatNormalScale),this.ior=t.ior,this.sheen=t.sheen,this.sheenTint.copy(t.sheenTint),this.sheenRoughness=t.sheenRoughness,this.transmission=t.transmission,this.transmissionMap=t.transmissionMap,this.thickness=t.thickness,this.thicknessMap=t.thicknessMap,this.attenuationDistance=t.attenuationDistance,this.attenuationTint.copy(t.attenuationTint),this.specularIntensity=t.specularIntensity,this.specularIntensityMap=t.specularIntensityMap,this.specularTint.copy(t.specularTint),this.specularTintMap=t.specularTintMap,this}}a.prototype.isMeshPhysicalMaterial=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return p}));const i=\\\\\\\"\\\\\\\\[\\\\\\\\]\\\\\\\\.:\\\\\\\\/\\\\\\\",r=new RegExp(\\\\\\\"[\\\\\\\\[\\\\\\\\]\\\\\\\\.:\\\\\\\\/]\\\\\\\",\\\\\\\"g\\\\\\\"),s=\\\\\\\"[^\\\\\\\\[\\\\\\\\]\\\\\\\\.:\\\\\\\\/]\\\\\\\",o=\\\\\\\"[^\\\\\\\"+i.replace(\\\\\\\"\\\\\\\\.\\\\\\\",\\\\\\\"\\\\\\\")+\\\\\\\"]\\\\\\\",a=/((?:WC+[\\\\/:])*)/.source.replace(\\\\\\\"WC\\\\\\\",s),l=/(WCOD+)?/.source.replace(\\\\\\\"WCOD\\\\\\\",o),c=/(?:\\\\.(WC+)(?:\\\\[(.+)\\\\])?)?/.source.replace(\\\\\\\"WC\\\\\\\",s),u=/\\\\.(WC+)(?:\\\\[(.+)\\\\])?/.source.replace(\\\\\\\"WC\\\\\\\",s),h=new RegExp(\\\\\\\"^\\\\\\\"+a+l+c+u+\\\\\\\"$\\\\\\\"),d=[\\\\\\\"material\\\\\\\",\\\\\\\"materials\\\\\\\",\\\\\\\"bones\\\\\\\"];class p{constructor(t,e,n){this.path=e,this.parsedPath=n||p.parseTrackName(e),this.node=p.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,e,n){return t&&t.isAnimationObjectGroup?new p.Composite(t,e,n):new p(t,e,n)}static sanitizeNodeName(t){return t.replace(/\\\\s/g,\\\\\\\"_\\\\\\\").replace(r,\\\\\\\"\\\\\\\")}static parseTrackName(t){const e=h.exec(t);if(!e)throw new Error(\\\\\\\"PropertyBinding: Cannot parse trackName: \\\\\\\"+t);const n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=n.nodeName&&n.nodeName.lastIndexOf(\\\\\\\".\\\\\\\");if(void 0!==i&&-1!==i){const t=n.nodeName.substring(i+1);-1!==d.indexOf(t)&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=t)}if(null===n.propertyName||0===n.propertyName.length)throw new Error(\\\\\\\"PropertyBinding: can not parse propertyName from trackName: \\\\\\\"+t);return n}static findNode(t,e){if(!e||\\\\\\\"\\\\\\\"===e||\\\\\\\".\\\\\\\"===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const n=t.skeleton.getBoneByName(e);if(void 0!==n)return n}if(t.children){const n=function(t){for(let i=0;i<t.length;i++){const r=t[i];if(r.name===e||r.uuid===e)return r;const s=n(r.children);if(s)return s}return null},i=n(t.children);if(i)return i}return null}_getValue_unavailable(){}_setValue_unavailable(){}_getValue_direct(t,e){t[e]=this.targetObject[this.propertyName]}_getValue_array(t,e){const n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)t[e++]=n[i]}_getValue_arrayElement(t,e){t[e]=this.resolvedProperty[this.propertyIndex]}_getValue_toArray(t,e){this.resolvedProperty.toArray(t,e)}_setValue_direct(t,e){this.targetObject[this.propertyName]=t[e]}_setValue_direct_setNeedsUpdate(t,e){this.targetObject[this.propertyName]=t[e],this.targetObject.needsUpdate=!0}_setValue_direct_setMatrixWorldNeedsUpdate(t,e){this.targetObject[this.propertyName]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_array(t,e){const n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)n[i]=t[e++]}_setValue_array_setNeedsUpdate(t,e){const n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)n[i]=t[e++];this.targetObject.needsUpdate=!0}_setValue_array_setMatrixWorldNeedsUpdate(t,e){const n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)n[i]=t[e++];this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_arrayElement(t,e){this.resolvedProperty[this.propertyIndex]=t[e]}_setValue_arrayElement_setNeedsUpdate(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.needsUpdate=!0}_setValue_arrayElement_setMatrixWorldNeedsUpdate(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_fromArray(t,e){this.resolvedProperty.fromArray(t,e)}_setValue_fromArray_setNeedsUpdate(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.needsUpdate=!0}_setValue_fromArray_setMatrixWorldNeedsUpdate(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.matrixWorldNeedsUpdate=!0}_getValue_unbound(t,e){this.bind(),this.getValue(t,e)}_setValue_unbound(t,e){this.bind(),this.setValue(t,e)}bind(){let t=this.node;const e=this.parsedPath,n=e.objectName,i=e.propertyName;let r=e.propertyIndex;if(t||(t=p.findNode(this.rootNode,e.nodeName)||this.rootNode,this.node=t),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!t)return void console.error(\\\\\\\"THREE.PropertyBinding: Trying to update node for track: \\\\\\\"+this.path+\\\\\\\" but it wasn't found.\\\\\\\");if(n){let i=e.objectIndex;switch(n){case\\\\\\\"materials\\\\\\\":if(!t.material)return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to material as node does not have a material.\\\\\\\",this);if(!t.material.materials)return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.\\\\\\\",this);t=t.material.materials;break;case\\\\\\\"bones\\\\\\\":if(!t.skeleton)return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.\\\\\\\",this);t=t.skeleton.bones;for(let e=0;e<t.length;e++)if(t[e].name===i){i=e;break}break;default:if(void 0===t[n])return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to objectName of node undefined.\\\\\\\",this);t=t[n]}if(void 0!==i){if(void 0===t[i])return void console.error(\\\\\\\"THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.\\\\\\\",this,t);t=t[i]}}const s=t[i];if(void 0===s){const n=e.nodeName;return void console.error(\\\\\\\"THREE.PropertyBinding: Trying to update property for track: \\\\\\\"+n+\\\\\\\".\\\\\\\"+i+\\\\\\\" but it wasn't found.\\\\\\\",t)}let o=this.Versioning.None;this.targetObject=t,void 0!==t.needsUpdate?o=this.Versioning.NeedsUpdate:void 0!==t.matrixWorldNeedsUpdate&&(o=this.Versioning.MatrixWorldNeedsUpdate);let a=this.BindingType.Direct;if(void 0!==r){if(\\\\\\\"morphTargetInfluences\\\\\\\"===i){if(!t.geometry)return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.\\\\\\\",this);if(!t.geometry.isBufferGeometry)return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\",this);if(!t.geometry.morphAttributes)return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.\\\\\\\",this);void 0!==t.morphTargetDictionary[r]&&(r=t.morphTargetDictionary[r])}a=this.BindingType.ArrayElement,this.resolvedProperty=s,this.propertyIndex=r}else void 0!==s.fromArray&&void 0!==s.toArray?(a=this.BindingType.HasFromToArray,this.resolvedProperty=s):Array.isArray(s)?(a=this.BindingType.EntireArray,this.resolvedProperty=s):this.propertyName=i;this.getValue=this.GetterByBindingType[a],this.setValue=this.SetterByBindingTypeAndVersioning[a][o]}unbind(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}}p.Composite=class{constructor(t,e,n){const i=n||p.parseTrackName(e);this._targetGroup=t,this._bindings=t.subscribe_(e,i)}getValue(t,e){this.bind();const n=this._targetGroup.nCachedObjects_,i=this._bindings[n];void 0!==i&&i.getValue(t,e)}setValue(t,e){const n=this._bindings;for(let i=this._targetGroup.nCachedObjects_,r=n.length;i!==r;++i)n[i].setValue(t,e)}bind(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].bind()}unbind(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].unbind()}},p.prototype.BindingType={Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},p.prototype.Versioning={None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},p.prototype.GetterByBindingType=[p.prototype._getValue_direct,p.prototype._getValue_array,p.prototype._getValue_arrayElement,p.prototype._getValue_toArray],p.prototype.SetterByBindingTypeAndVersioning=[[p.prototype._setValue_direct,p.prototype._setValue_direct_setNeedsUpdate,p.prototype._setValue_direct_setMatrixWorldNeedsUpdate],[p.prototype._setValue_array,p.prototype._setValue_array_setNeedsUpdate,p.prototype._setValue_array_setMatrixWorldNeedsUpdate],[p.prototype._setValue_arrayElement,p.prototype._setValue_arrayElement_setNeedsUpdate,p.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate],[p.prototype._setValue_fromArray,p.prototype._setValue_fromArray_setNeedsUpdate,p.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]]},,function(t,e,n){var i=n(120),r=\\\\\\\"object\\\\\\\"==typeof self&&self&&self.Object===Object&&self,s=i||r||Function(\\\\\\\"return this\\\\\\\")();t.exports=s},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return d}));var i=n(14),r=n(5),s=n(0),o=n(9);const a=new s.a,l=new o.a,c=new o.a,u=new s.a,h=new r.a;class d extends i.a{constructor(t,e){super(t,e),this.type=\\\\\\\"SkinnedMesh\\\\\\\",this.bindMode=\\\\\\\"attached\\\\\\\",this.bindMatrix=new r.a,this.bindMatrixInverse=new r.a}copy(t){return super.copy(t),this.bindMode=t.bindMode,this.bindMatrix.copy(t.bindMatrix),this.bindMatrixInverse.copy(t.bindMatrixInverse),this.skeleton=t.skeleton,this}bind(t,e){this.skeleton=t,void 0===e&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),e=this.matrixWorld),this.bindMatrix.copy(e),this.bindMatrixInverse.copy(e).invert()}pose(){this.skeleton.pose()}normalizeSkinWeights(){const t=new o.a,e=this.geometry.attributes.skinWeight;for(let n=0,i=e.count;n<i;n++){t.x=e.getX(n),t.y=e.getY(n),t.z=e.getZ(n),t.w=e.getW(n);const i=1/t.manhattanLength();i!==1/0?t.multiplyScalar(i):t.set(1,0,0,0),e.setXYZW(n,t.x,t.y,t.z,t.w)}}updateMatrixWorld(t){super.updateMatrixWorld(t),\\\\\\\"attached\\\\\\\"===this.bindMode?this.bindMatrixInverse.copy(this.matrixWorld).invert():\\\\\\\"detached\\\\\\\"===this.bindMode?this.bindMatrixInverse.copy(this.bindMatrix).invert():console.warn(\\\\\\\"THREE.SkinnedMesh: Unrecognized bindMode: \\\\\\\"+this.bindMode)}boneTransform(t,e){const n=this.skeleton,i=this.geometry;l.fromBufferAttribute(i.attributes.skinIndex,t),c.fromBufferAttribute(i.attributes.skinWeight,t),a.copy(e).applyMatrix4(this.bindMatrix),e.set(0,0,0);for(let t=0;t<4;t++){const i=c.getComponent(t);if(0!==i){const r=l.getComponent(t);h.multiplyMatrices(n.bones[r].matrixWorld,n.boneInverses[r]),e.addScaledVector(u.copy(a).applyMatrix4(h),i)}}return e.applyMatrix4(this.bindMatrixInverse)}}d.prototype.isSkinnedMesh=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s}));var i=n(1),r=n(38);class s extends r.a{constructor(t,e,n,r){super(t,e,n,r),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0,this.DefaultSettings_={endingStart:i.id,endingEnd:i.id}}intervalChanged_(t,e,n){const r=this.parameterPositions;let s=t-2,o=t+1,a=r[s],l=r[o];if(void 0===a)switch(this.getSettings_().endingStart){case i.kd:s=t,a=2*e-n;break;case i.hd:s=r.length-2,a=e+r[s]-r[s+1];break;default:s=t,a=n}if(void 0===l)switch(this.getSettings_().endingEnd){case i.kd:o=t,l=2*n-e;break;case i.hd:o=1,l=n+r[1]-r[0];break;default:o=t-1,l=e}const c=.5*(n-e),u=this.valueSize;this._weightPrev=c/(e-a),this._weightNext=c/(l-n),this._offsetPrev=s*u,this._offsetNext=o*u}interpolate_(t,e,n,i){const r=this.resultBuffer,s=this.sampleValues,o=this.valueSize,a=t*o,l=a-o,c=this._offsetPrev,u=this._offsetNext,h=this._weightPrev,d=this._weightNext,p=(n-e)/(i-e),_=p*p,m=_*p,f=-h*m+2*h*_-h*p,g=(1+h)*m+(-1.5-2*h)*_+(-.5+h)*p+1,v=(-1-d)*m+(1.5+d)*_+.5*p,y=d*m-d*_;for(let t=0;t!==o;++t)r[t]=f*s[c+t]+g*s[l+t]+v*s[a+t]+y*s[u+t];return r}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r}));var i=n(38);class r extends i.a{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){const r=this.resultBuffer,s=this.sampleValues,o=this.valueSize,a=t*o,l=a-o,c=(n-e)/(i-e),u=1-c;for(let t=0;t!==o;++t)r[t]=s[l+t]*u+s[a+t]*c;return r}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return l}));var i=n(32),r=n(45),s=n(37);class o extends r.a{constructor(){super(new s.a(-5,5,5,-5,.5,500))}}o.prototype.isDirectionalLightShadow=!0;var a=n(10);class l extends i.a{constructor(t,e){super(t,e),this.type=\\\\\\\"DirectionalLight\\\\\\\",this.position.copy(a.a.DefaultUp),this.updateMatrix(),this.target=new a.a,this.shadow=new o}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}l.prototype.isDirectionalLight=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return c}));var i=n(32),r=n(45),s=n(3),o=n(30);class a extends r.a{constructor(){super(new o.a(50,1,.5,500)),this.focus=1}updateMatrices(t){const e=this.camera,n=2*s.b*t.angle*this.focus,i=this.mapSize.width/this.mapSize.height,r=t.distance||e.far;n===e.fov&&i===e.aspect&&r===e.far||(e.fov=n,e.aspect=i,e.far=r,e.updateProjectionMatrix()),super.updateMatrices(t)}copy(t){return super.copy(t),this.focus=t.focus,this}}a.prototype.isSpotLightShadow=!0;var l=n(10);class c extends i.a{constructor(t,e,n=0,i=Math.PI/3,r=0,s=1){super(t,e),this.type=\\\\\\\"SpotLight\\\\\\\",this.position.copy(l.a.DefaultUp),this.updateMatrix(),this.target=new l.a,this.distance=n,this.angle=i,this.penumbra=r,this.decay=s,this.shadow=new a}get power(){return this.intensity*Math.PI}set power(t){this.intensity=t/Math.PI}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.distance=t.distance,this.angle=t.angle,this.penumbra=t.penumbra,this.decay=t.decay,this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}c.prototype.isSpotLight=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s}));var i=n(2),r=n(25);class s extends r.a{constructor(t=new i.a,e=new i.a){super(),this.type=\\\\\\\"LineCurve\\\\\\\",this.v1=t,this.v2=e}getPoint(t,e=new i.a){const n=e;return 1===t?n.copy(this.v2):(n.copy(this.v2).sub(this.v1),n.multiplyScalar(t).add(this.v1)),n}getPointAt(t,e){return this.getPoint(t,e)}getTangent(t,e){const n=e||new i.a;return n.copy(this.v2).sub(this.v1).normalize(),n}copy(t){return super.copy(t),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}s.prototype.isLineCurve=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return o}));var i=n(25),r=n(31),s=n(2);class o extends i.a{constructor(t=new s.a,e=new s.a,n=new s.a,i=new s.a){super(),this.type=\\\\\\\"CubicBezierCurve\\\\\\\",this.v0=t,this.v1=e,this.v2=n,this.v3=i}getPoint(t,e=new s.a){const n=e,i=this.v0,o=this.v1,a=this.v2,l=this.v3;return n.set(Object(r.b)(t,i.x,o.x,a.x,l.x),Object(r.b)(t,i.y,o.y,a.y,l.y)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this.v3.copy(t.v3),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t.v3=this.v3.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this.v3.fromArray(t.v3),this}}o.prototype.isCubicBezierCurve=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return o}));var i=n(25),r=n(31),s=n(2);class o extends i.a{constructor(t=new s.a,e=new s.a,n=new s.a){super(),this.type=\\\\\\\"QuadraticBezierCurve\\\\\\\",this.v0=t,this.v1=e,this.v2=n}getPoint(t,e=new s.a){const n=e,i=this.v0,o=this.v1,a=this.v2;return n.set(Object(r.c)(t,i.x,o.x,a.x),Object(r.c)(t,i.y,o.y,a.y)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}o.prototype.isQuadraticBezierCurve=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return o}));var i=n(25),r=n(31),s=n(2);class o extends i.a{constructor(t=[]){super(),this.type=\\\\\\\"SplineCurve\\\\\\\",this.points=t}getPoint(t,e=new s.a){const n=e,i=this.points,o=(i.length-1)*t,a=Math.floor(o),l=o-a,c=i[0===a?a:a-1],u=i[a],h=i[a>i.length-2?i.length-1:a+1],d=i[a>i.length-3?i.length-1:a+2];return n.set(Object(r.a)(l,c.x,u.x,h.x,d.x),Object(r.a)(l,c.y,u.y,h.y,d.y)),n}copy(t){super.copy(t),this.points=[];for(let e=0,n=t.points.length;e<n;e++){const n=t.points[e];this.points.push(n.clone())}return this}toJSON(){const t=super.toJSON();t.points=[];for(let e=0,n=this.points.length;e<n;e++){const n=this.points[e];t.points.push(n.toArray())}return t}fromJSON(t){super.fromJSON(t),this.points=[];for(let e=0,n=t.points.length;e<n;e++){const n=t.points[e];this.points.push((new s.a).fromArray(n))}return this}}o.prototype.isSplineCurve=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return s}));var i=n(3),r=n(1);class s{constructor(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=r.Qc,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=i.h()}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this}copyAt(t,e,n){t*=this.stride,n*=e.stride;for(let i=0,r=this.stride;i<r;i++)this.array[t+i]=e.array[n+i];return this}set(t,e=0){return this.array.set(t,e),this}clone(t){void 0===t.arrayBuffers&&(t.arrayBuffers={}),void 0===this.array.buffer._uuid&&(this.array.buffer._uuid=i.h()),void 0===t.arrayBuffers[this.array.buffer._uuid]&&(t.arrayBuffers[this.array.buffer._uuid]=this.array.slice(0).buffer);const e=new this.array.constructor(t.arrayBuffers[this.array.buffer._uuid]),n=new this.constructor(e,this.stride);return n.setUsage(this.usage),n}onUpload(t){return this.onUploadCallback=t,this}toJSON(t){return void 0===t.arrayBuffers&&(t.arrayBuffers={}),void 0===this.array.buffer._uuid&&(this.array.buffer._uuid=i.h()),void 0===t.arrayBuffers[this.array.buffer._uuid]&&(t.arrayBuffers[this.array.buffer._uuid]=Array.prototype.slice.call(new Uint32Array(this.array.buffer))),{uuid:this.uuid,buffer:this.array.buffer._uuid,type:this.array.constructor.name,stride:this.stride}}}s.prototype.isInterleavedBuffer=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.r(e),n.d(e,\\\\\\\"ArcCurve\\\\\\\",(function(){return r})),n.d(e,\\\\\\\"CatmullRomCurve3\\\\\\\",(function(){return s.a})),n.d(e,\\\\\\\"CubicBezierCurve\\\\\\\",(function(){return o.a})),n.d(e,\\\\\\\"CubicBezierCurve3\\\\\\\",(function(){return u})),n.d(e,\\\\\\\"EllipseCurve\\\\\\\",(function(){return i.a})),n.d(e,\\\\\\\"LineCurve\\\\\\\",(function(){return h.a})),n.d(e,\\\\\\\"LineCurve3\\\\\\\",(function(){return d})),n.d(e,\\\\\\\"QuadraticBezierCurve\\\\\\\",(function(){return p.a})),n.d(e,\\\\\\\"QuadraticBezierCurve3\\\\\\\",(function(){return _.a})),n.d(e,\\\\\\\"SplineCurve\\\\\\\",(function(){return m.a}));var i=n(57);class r extends i.a{constructor(t,e,n,i,r,s){super(t,e,n,n,i,r,s),this.type=\\\\\\\"ArcCurve\\\\\\\"}}r.prototype.isArcCurve=!0;var s=n(85),o=n(75),a=n(25),l=n(31),c=n(0);class u extends a.a{constructor(t=new c.a,e=new c.a,n=new c.a,i=new c.a){super(),this.type=\\\\\\\"CubicBezierCurve3\\\\\\\",this.v0=t,this.v1=e,this.v2=n,this.v3=i}getPoint(t,e=new c.a){const n=e,i=this.v0,r=this.v1,s=this.v2,o=this.v3;return n.set(Object(l.b)(t,i.x,r.x,s.x,o.x),Object(l.b)(t,i.y,r.y,s.y,o.y),Object(l.b)(t,i.z,r.z,s.z,o.z)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this.v3.copy(t.v3),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t.v3=this.v3.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this.v3.fromArray(t.v3),this}}u.prototype.isCubicBezierCurve3=!0;var h=n(74);class d extends a.a{constructor(t=new c.a,e=new c.a){super(),this.type=\\\\\\\"LineCurve3\\\\\\\",this.isLineCurve3=!0,this.v1=t,this.v2=e}getPoint(t,e=new c.a){const n=e;return 1===t?n.copy(this.v2):(n.copy(this.v2).sub(this.v1),n.multiplyScalar(t).add(this.v1)),n}getPointAt(t,e){return this.getPoint(t,e)}copy(t){return super.copy(t),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}var p=n(76),_=n(92),m=n(77)},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return o}));var i=n(62),r=n(23),s=n(13);class o extends s.a{constructor(t){super(t)}load(t,e,n,s){const o=new r.a,a=new i.a(this.manager);return a.setCrossOrigin(this.crossOrigin),a.setPath(this.path),a.load(t,(function(t){o.image=t,o.needsUpdate=!0,void 0!==e&&e(o)}),n,s),o}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return u}));var i=n(1),r=n(52),s=n(5),o=n(33),a=n(3);const l=new s.a,c=new s.a;class u{constructor(t=[],e=[]){this.uuid=a.h(),this.bones=t.slice(0),this.boneInverses=e,this.boneMatrices=null,this.boneTexture=null,this.boneTextureSize=0,this.frame=-1,this.init()}init(){const t=this.bones,e=this.boneInverses;if(this.boneMatrices=new Float32Array(16*t.length),0===e.length)this.calculateInverses();else if(t.length!==e.length){console.warn(\\\\\\\"THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.\\\\\\\"),this.boneInverses=[];for(let t=0,e=this.bones.length;t<e;t++)this.boneInverses.push(new s.a)}}calculateInverses(){this.boneInverses.length=0;for(let t=0,e=this.bones.length;t<e;t++){const e=new s.a;this.bones[t]&&e.copy(this.bones[t].matrixWorld).invert(),this.boneInverses.push(e)}}pose(){for(let t=0,e=this.bones.length;t<e;t++){const e=this.bones[t];e&&e.matrixWorld.copy(this.boneInverses[t]).invert()}for(let t=0,e=this.bones.length;t<e;t++){const e=this.bones[t];e&&(e.parent&&e.parent.isBone?(e.matrix.copy(e.parent.matrixWorld).invert(),e.matrix.multiply(e.matrixWorld)):e.matrix.copy(e.matrixWorld),e.matrix.decompose(e.position,e.quaternion,e.scale))}}update(){const t=this.bones,e=this.boneInverses,n=this.boneMatrices,i=this.boneTexture;for(let i=0,r=t.length;i<r;i++){const r=t[i]?t[i].matrixWorld:c;l.multiplyMatrices(r,e[i]),l.toArray(n,16*i)}null!==i&&(i.needsUpdate=!0)}clone(){return new u(this.bones,this.boneInverses)}computeBoneTexture(){let t=Math.sqrt(4*this.bones.length);t=a.c(t),t=Math.max(t,4);const e=new Float32Array(t*t*4);e.set(this.boneMatrices);const n=new o.a(e,t,t,i.Ib,i.G);return this.boneMatrices=e,this.boneTexture=n,this.boneTextureSize=t,this}getBoneByName(t){for(let e=0,n=this.bones.length;e<n;e++){const n=this.bones[e];if(n.name===t)return n}}dispose(){null!==this.boneTexture&&(this.boneTexture.dispose(),this.boneTexture=null)}fromJSON(t,e){this.uuid=t.uuid;for(let n=0,i=t.bones.length;n<i;n++){const i=t.bones[n];let o=e[i];void 0===o&&(console.warn(\\\\\\\"THREE.Skeleton: No bone found with UUID:\\\\\\\",i),o=new r.a),this.bones.push(o),this.boneInverses.push((new s.a).fromArray(t.boneInverses[n]))}return this.init(),this}toJSON(){const t={metadata:{version:4.5,type:\\\\\\\"Skeleton\\\\\\\",generator:\\\\\\\"Skeleton.toJSON\\\\\\\"},bones:[],boneInverses:[]};t.uuid=this.uuid;const e=this.bones,n=this.boneInverses;for(let i=0,r=e.length;i<r;i++){const r=e[i];t.bones.push(r.uuid);const s=n[i];t.boneInverses.push(s.toArray())}return t}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return f}));var i=n(2);const r=new i.a;class s{constructor(t=new i.a(1/0,1/0),e=new i.a(-1/0,-1/0)){this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;e<n;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){const n=r.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(n),this.max.copy(t).add(n),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.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(t){return this.isEmpty()?t.set(0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}containsPoint(t){return!(t.x<this.min.x||t.x>this.max.x||t.y<this.min.y||t.y>this.max.y)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return!(t.max.x<this.min.x||t.min.x>this.max.x||t.max.y<this.min.y||t.min.y>this.max.y)}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return r.copy(t).clamp(this.min,this.max).sub(t).length()}intersect(t){return this.min.max(t.min),this.max.min(t.max),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}s.prototype.isBox2=!0;var o=n(7),a=n(21),l=n(4),c=n(13),u=n(11),h=n(47),d=n(46),p=n(48),_=n(53),m=n(0);class f extends c.a{constructor(t){super(t),this.defaultDPI=90,this.defaultUnit=\\\\\\\"px\\\\\\\"}load(t,e,n,i){const r=this,s=new a.a(r.manager);s.setPath(r.path),s.setRequestHeader(r.requestHeader),s.setWithCredentials(r.withCredentials),s.load(t,(function(n){try{e(r.parse(n))}catch(e){i?i(e):console.error(e),r.manager.itemError(t)}}),n,i)}parse(t){const e=this;function n(t,e,n,i,s,o,a,l){if(0==e||0==n)return void t.lineTo(l.x,l.y);i=i*Math.PI/180,e=Math.abs(e),n=Math.abs(n);const c=(a.x-l.x)/2,u=(a.y-l.y)/2,h=Math.cos(i)*c+Math.sin(i)*u,d=-Math.sin(i)*c+Math.cos(i)*u;let p=e*e,_=n*n;const m=h*h,f=d*d,g=m/p+f/_;if(g>1){const t=Math.sqrt(g);p=(e*=t)*e,_=(n*=t)*n}const v=p*f+_*m,y=(p*_-v)/v;let x=Math.sqrt(Math.max(0,y));s===o&&(x=-x);const b=x*e*d/n,w=-x*n*h/e,T=Math.cos(i)*b-Math.sin(i)*w+(a.x+l.x)/2,A=Math.sin(i)*b+Math.cos(i)*w+(a.y+l.y)/2,E=r(1,0,(h-b)/e,(d-w)/n),M=r((h-b)/e,(d-w)/n,(-h-b)/e,(-d-w)/n)%(2*Math.PI);t.currentPath.absellipse(T,A,e,n,E,E+M,0===o,i)}function r(t,e,n,i){const r=t*n+e*i,s=Math.sqrt(t*t+e*e)*Math.sqrt(n*n+i*i);let o=Math.acos(Math.max(-1,Math.min(1,r/s)));return t*i-e*n<0&&(o=-o),o}function s(t,e){e=Object.assign({},e);let n={};if(t.hasAttribute(\\\\\\\"class\\\\\\\")){const e=t.getAttribute(\\\\\\\"class\\\\\\\").split(/\\\\s/).filter(Boolean).map((t=>t.trim()));for(let t=0;t<e.length;t++)n=Object.assign(n,v[\\\\\\\".\\\\\\\"+e[t]])}function i(i,r,s){void 0===s&&(s=function(t){return t.startsWith(\\\\\\\"url\\\\\\\")&&console.warn(\\\\\\\"SVGLoader: url access in attributes is not implemented.\\\\\\\"),t}),t.hasAttribute(i)&&(e[r]=s(t.getAttribute(i))),n[i]&&(e[r]=s(n[i])),t.style&&\\\\\\\"\\\\\\\"!==t.style[i]&&(e[r]=s(t.style[i]))}function r(t){return Math.max(0,Math.min(1,d(t)))}function s(t){return Math.max(0,d(t))}return t.hasAttribute(\\\\\\\"id\\\\\\\")&&(n=Object.assign(n,v[\\\\\\\"#\\\\\\\"+t.getAttribute(\\\\\\\"id\\\\\\\")])),i(\\\\\\\"fill\\\\\\\",\\\\\\\"fill\\\\\\\"),i(\\\\\\\"fill-opacity\\\\\\\",\\\\\\\"fillOpacity\\\\\\\",r),i(\\\\\\\"fill-rule\\\\\\\",\\\\\\\"fillRule\\\\\\\"),i(\\\\\\\"opacity\\\\\\\",\\\\\\\"opacity\\\\\\\",r),i(\\\\\\\"stroke\\\\\\\",\\\\\\\"stroke\\\\\\\"),i(\\\\\\\"stroke-opacity\\\\\\\",\\\\\\\"strokeOpacity\\\\\\\",r),i(\\\\\\\"stroke-width\\\\\\\",\\\\\\\"strokeWidth\\\\\\\",s),i(\\\\\\\"stroke-linejoin\\\\\\\",\\\\\\\"strokeLineJoin\\\\\\\"),i(\\\\\\\"stroke-linecap\\\\\\\",\\\\\\\"strokeLineCap\\\\\\\"),i(\\\\\\\"stroke-miterlimit\\\\\\\",\\\\\\\"strokeMiterLimit\\\\\\\",s),i(\\\\\\\"visibility\\\\\\\",\\\\\\\"visibility\\\\\\\"),e}function o(t,e){return t-(e-t)}function a(t,e,n){if(\\\\\\\"string\\\\\\\"!=typeof t)throw new TypeError(\\\\\\\"Invalid input: \\\\\\\"+typeof t);const i={SEPARATOR:/[ \\\\t\\\\r\\\\n\\\\,.\\\\-+]/,WHITESPACE:/[ \\\\t\\\\r\\\\n]/,DIGIT:/[\\\\d]/,SIGN:/[-+]/,POINT:/\\\\./,COMMA:/,/,EXP:/e/i,FLAGS:/[01]/};let r=0,s=!0,o=\\\\\\\"\\\\\\\",a=\\\\\\\"\\\\\\\";const l=[];function c(t,e,n){const i=new SyntaxError('Unexpected character \\\\\\\"'+t+'\\\\\\\" at index '+e+\\\\\\\".\\\\\\\");throw i.partial=n,i}function u(){\\\\\\\"\\\\\\\"!==o&&(\\\\\\\"\\\\\\\"===a?l.push(Number(o)):l.push(Number(o)*Math.pow(10,Number(a)))),o=\\\\\\\"\\\\\\\",a=\\\\\\\"\\\\\\\"}let h;const d=t.length;for(let p=0;p<d;p++)if(h=t[p],Array.isArray(e)&&e.includes(l.length%n)&&i.FLAGS.test(h))r=1,o=h,u();else{if(0===r){if(i.WHITESPACE.test(h))continue;if(i.DIGIT.test(h)||i.SIGN.test(h)){r=1,o=h;continue}if(i.POINT.test(h)){r=2,o=h;continue}i.COMMA.test(h)&&(s&&c(h,p,l),s=!0)}if(1===r){if(i.DIGIT.test(h)){o+=h;continue}if(i.POINT.test(h)){o+=h,r=2;continue}if(i.EXP.test(h)){r=3;continue}i.SIGN.test(h)&&1===o.length&&i.SIGN.test(o[0])&&c(h,p,l)}if(2===r){if(i.DIGIT.test(h)){o+=h;continue}if(i.EXP.test(h)){r=3;continue}i.POINT.test(h)&&\\\\\\\".\\\\\\\"===o[o.length-1]&&c(h,p,l)}if(3===r){if(i.DIGIT.test(h)){a+=h;continue}if(i.SIGN.test(h)){if(\\\\\\\"\\\\\\\"===a){a+=h;continue}1===a.length&&i.SIGN.test(a)&&c(h,p,l)}}i.WHITESPACE.test(h)?(u(),r=0,s=!1):i.COMMA.test(h)?(u(),r=0,s=!0):i.SIGN.test(h)?(u(),r=1,o=h):i.POINT.test(h)?(u(),r=2,o=h):c(h,p,l)}return u(),l}const l=[\\\\\\\"mm\\\\\\\",\\\\\\\"cm\\\\\\\",\\\\\\\"in\\\\\\\",\\\\\\\"pt\\\\\\\",\\\\\\\"pc\\\\\\\",\\\\\\\"px\\\\\\\"],c={mm:{mm:1,cm:.1,in:1/25.4,pt:72/25.4,pc:6/25.4,px:-1},cm:{mm:10,cm:1,in:1/2.54,pt:72/2.54,pc:6/2.54,px:-1},in:{mm:25.4,cm:2.54,in:1,pt:72,pc:6,px:-1},pt:{mm:25.4/72,cm:2.54/72,in:1/72,pt:1,pc:6/72,px:-1},pc:{mm:25.4/6,cm:2.54/6,in:1/6,pt:12,pc:1,px:-1},px:{px:1}};function d(t){let n,i=\\\\\\\"px\\\\\\\";if(\\\\\\\"string\\\\\\\"==typeof t||t instanceof String)for(let e=0,n=l.length;e<n;e++){const n=l[e];if(t.endsWith(n)){i=n,t=t.substring(0,t.length-n.length);break}}return\\\\\\\"px\\\\\\\"===i&&\\\\\\\"px\\\\\\\"!==e.defaultUnit?n=c.in[e.defaultUnit]/e.defaultDPI:(n=c[i][e.defaultUnit],n<0&&(n=c[i].in*e.defaultDPI)),n*parseFloat(t)}function _(t){const e=t.elements;return Math.sqrt(e[0]*e[0]+e[1]*e[1])}function f(t){const e=t.elements;return Math.sqrt(e[3]*e[3]+e[4]*e[4])}const g=[],v={},y=[],x=new u.a,b=new u.a,w=new u.a,T=new u.a,A=new i.a,E=new m.a,M=new u.a,S=(new DOMParser).parseFromString(t,\\\\\\\"image/svg+xml\\\\\\\");!function t(e,r){if(1!==e.nodeType)return;const l=function(t){if(!(t.hasAttribute(\\\\\\\"transform\\\\\\\")||\\\\\\\"use\\\\\\\"===t.nodeName&&(t.hasAttribute(\\\\\\\"x\\\\\\\")||t.hasAttribute(\\\\\\\"y\\\\\\\"))))return null;const e=function(t){const e=new u.a,n=x;if(\\\\\\\"use\\\\\\\"===t.nodeName&&(t.hasAttribute(\\\\\\\"x\\\\\\\")||t.hasAttribute(\\\\\\\"y\\\\\\\"))){const n=d(t.getAttribute(\\\\\\\"x\\\\\\\")),i=d(t.getAttribute(\\\\\\\"y\\\\\\\"));e.translate(n,i)}if(t.hasAttribute(\\\\\\\"transform\\\\\\\")){const i=t.getAttribute(\\\\\\\"transform\\\\\\\").split(\\\\\\\")\\\\\\\");for(let t=i.length-1;t>=0;t--){const r=i[t].trim();if(\\\\\\\"\\\\\\\"===r)continue;const s=r.indexOf(\\\\\\\"(\\\\\\\"),o=r.length;if(s>0&&s<o){const t=r.substr(0,s),e=a(r.substr(s+1,o-s-1));switch(n.identity(),t){case\\\\\\\"translate\\\\\\\":if(e.length>=1){const t=e[0];let i=t;e.length>=2&&(i=e[1]),n.translate(t,i)}break;case\\\\\\\"rotate\\\\\\\":if(e.length>=1){let t=0,i=0,r=0;t=-e[0]*Math.PI/180,e.length>=3&&(i=e[1],r=e[2]),b.identity().translate(-i,-r),w.identity().rotate(t),T.multiplyMatrices(w,b),b.identity().translate(i,r),n.multiplyMatrices(b,T)}break;case\\\\\\\"scale\\\\\\\":if(e.length>=1){const t=e[0];let i=t;e.length>=2&&(i=e[1]),n.scale(t,i)}break;case\\\\\\\"skewX\\\\\\\":1===e.length&&n.set(1,Math.tan(e[0]*Math.PI/180),0,0,1,0,0,0,1);break;case\\\\\\\"skewY\\\\\\\":1===e.length&&n.set(1,0,0,Math.tan(e[0]*Math.PI/180),1,0,0,0,1);break;case\\\\\\\"matrix\\\\\\\":6===e.length&&n.set(e[0],e[2],e[4],e[1],e[3],e[5],0,0,1)}}e.premultiply(n)}}return e}(t);y.length>0&&e.premultiply(y[y.length-1]);return M.copy(e),y.push(e),e}(e);let c=!0,m=null;switch(e.nodeName){case\\\\\\\"svg\\\\\\\":break;case\\\\\\\"style\\\\\\\":!function(t){if(!t.sheet||!t.sheet.cssRules||!t.sheet.cssRules.length)return;for(let e=0;e<t.sheet.cssRules.length;e++){const n=t.sheet.cssRules[e];if(1!==n.type)continue;const i=n.selectorText.split(/,/gm).filter(Boolean).map((t=>t.trim()));for(let t=0;t<i.length;t++)v[i[t]]=Object.assign(v[i[t]]||{},n.style)}}(e);break;case\\\\\\\"g\\\\\\\":r=s(e,r);break;case\\\\\\\"path\\\\\\\":r=s(e,r),e.hasAttribute(\\\\\\\"d\\\\\\\")&&(m=function(t){const e=new p.a,r=new i.a,s=new i.a,l=new i.a;let c=!0,u=!1;const h=t.getAttribute(\\\\\\\"d\\\\\\\").match(/[a-df-z][^a-df-z]*/gi);for(let t=0,i=h.length;t<i;t++){const i=h[t],d=i.charAt(0),p=i.substr(1).trim();let _;switch(!0===c&&(u=!0,c=!1),d){case\\\\\\\"M\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t+=2)r.x=_[t+0],r.y=_[t+1],s.x=r.x,s.y=r.y,0===t?e.moveTo(r.x,r.y):e.lineTo(r.x,r.y),0===t&&!0===u&&l.copy(r);break;case\\\\\\\"H\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t++)r.x=_[t],s.x=r.x,s.y=r.y,e.lineTo(r.x,r.y),0===t&&!0===u&&l.copy(r);break;case\\\\\\\"V\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t++)r.y=_[t],s.x=r.x,s.y=r.y,e.lineTo(r.x,r.y),0===t&&!0===u&&l.copy(r);break;case\\\\\\\"L\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t+=2)r.x=_[t+0],r.y=_[t+1],s.x=r.x,s.y=r.y,e.lineTo(r.x,r.y),0===t&&!0===u&&l.copy(r);break;case\\\\\\\"C\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t+=6)e.bezierCurveTo(_[t+0],_[t+1],_[t+2],_[t+3],_[t+4],_[t+5]),s.x=_[t+2],s.y=_[t+3],r.x=_[t+4],r.y=_[t+5],0===t&&!0===u&&l.copy(r);break;case\\\\\\\"S\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t+=4)e.bezierCurveTo(o(r.x,s.x),o(r.y,s.y),_[t+0],_[t+1],_[t+2],_[t+3]),s.x=_[t+0],s.y=_[t+1],r.x=_[t+2],r.y=_[t+3],0===t&&!0===u&&l.copy(r);break;case\\\\\\\"Q\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t+=4)e.quadraticCurveTo(_[t+0],_[t+1],_[t+2],_[t+3]),s.x=_[t+0],s.y=_[t+1],r.x=_[t+2],r.y=_[t+3],0===t&&!0===u&&l.copy(r);break;case\\\\\\\"T\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t+=2){const n=o(r.x,s.x),i=o(r.y,s.y);e.quadraticCurveTo(n,i,_[t+0],_[t+1]),s.x=n,s.y=i,r.x=_[t+0],r.y=_[t+1],0===t&&!0===u&&l.copy(r)}break;case\\\\\\\"A\\\\\\\":_=a(p,[3,4],7);for(let t=0,i=_.length;t<i;t+=7){if(_[t+5]==r.x&&_[t+6]==r.y)continue;const i=r.clone();r.x=_[t+5],r.y=_[t+6],s.x=r.x,s.y=r.y,n(e,_[t],_[t+1],_[t+2],_[t+3],_[t+4],i,r),0===t&&!0===u&&l.copy(r)}break;case\\\\\\\"m\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t+=2)r.x+=_[t+0],r.y+=_[t+1],s.x=r.x,s.y=r.y,0===t?e.moveTo(r.x,r.y):e.lineTo(r.x,r.y),0===t&&!0===u&&l.copy(r);break;case\\\\\\\"h\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t++)r.x+=_[t],s.x=r.x,s.y=r.y,e.lineTo(r.x,r.y),0===t&&!0===u&&l.copy(r);break;case\\\\\\\"v\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t++)r.y+=_[t],s.x=r.x,s.y=r.y,e.lineTo(r.x,r.y),0===t&&!0===u&&l.copy(r);break;case\\\\\\\"l\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t+=2)r.x+=_[t+0],r.y+=_[t+1],s.x=r.x,s.y=r.y,e.lineTo(r.x,r.y),0===t&&!0===u&&l.copy(r);break;case\\\\\\\"c\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t+=6)e.bezierCurveTo(r.x+_[t+0],r.y+_[t+1],r.x+_[t+2],r.y+_[t+3],r.x+_[t+4],r.y+_[t+5]),s.x=r.x+_[t+2],s.y=r.y+_[t+3],r.x+=_[t+4],r.y+=_[t+5],0===t&&!0===u&&l.copy(r);break;case\\\\\\\"s\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t+=4)e.bezierCurveTo(o(r.x,s.x),o(r.y,s.y),r.x+_[t+0],r.y+_[t+1],r.x+_[t+2],r.y+_[t+3]),s.x=r.x+_[t+0],s.y=r.y+_[t+1],r.x+=_[t+2],r.y+=_[t+3],0===t&&!0===u&&l.copy(r);break;case\\\\\\\"q\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t+=4)e.quadraticCurveTo(r.x+_[t+0],r.y+_[t+1],r.x+_[t+2],r.y+_[t+3]),s.x=r.x+_[t+0],s.y=r.y+_[t+1],r.x+=_[t+2],r.y+=_[t+3],0===t&&!0===u&&l.copy(r);break;case\\\\\\\"t\\\\\\\":_=a(p);for(let t=0,n=_.length;t<n;t+=2){const n=o(r.x,s.x),i=o(r.y,s.y);e.quadraticCurveTo(n,i,r.x+_[t+0],r.y+_[t+1]),s.x=n,s.y=i,r.x=r.x+_[t+0],r.y=r.y+_[t+1],0===t&&!0===u&&l.copy(r)}break;case\\\\\\\"a\\\\\\\":_=a(p,[3,4],7);for(let t=0,i=_.length;t<i;t+=7){if(0==_[t+5]&&0==_[t+6])continue;const i=r.clone();r.x+=_[t+5],r.y+=_[t+6],s.x=r.x,s.y=r.y,n(e,_[t],_[t+1],_[t+2],_[t+3],_[t+4],i,r),0===t&&!0===u&&l.copy(r)}break;case\\\\\\\"Z\\\\\\\":case\\\\\\\"z\\\\\\\":e.currentPath.autoClose=!0,e.currentPath.curves.length>0&&(r.copy(l),e.currentPath.currentPoint.copy(r),c=!0);break;default:console.warn(i)}u=!1}return e}(e));break;case\\\\\\\"rect\\\\\\\":r=s(e,r),m=function(t){const e=d(t.getAttribute(\\\\\\\"x\\\\\\\")||0),n=d(t.getAttribute(\\\\\\\"y\\\\\\\")||0),i=d(t.getAttribute(\\\\\\\"rx\\\\\\\")||t.getAttribute(\\\\\\\"ry\\\\\\\")||0),r=d(t.getAttribute(\\\\\\\"ry\\\\\\\")||t.getAttribute(\\\\\\\"rx\\\\\\\")||0),s=d(t.getAttribute(\\\\\\\"width\\\\\\\")),o=d(t.getAttribute(\\\\\\\"height\\\\\\\")),a=.448084975506,l=new p.a;l.moveTo(e+i,n),l.lineTo(e+s-i,n),(0!==i||0!==r)&&l.bezierCurveTo(e+s-i*a,n,e+s,n+r*a,e+s,n+r);l.lineTo(e+s,n+o-r),(0!==i||0!==r)&&l.bezierCurveTo(e+s,n+o-r*a,e+s-i*a,n+o,e+s-i,n+o);l.lineTo(e+i,n+o),(0!==i||0!==r)&&l.bezierCurveTo(e+i*a,n+o,e,n+o-r*a,e,n+o-r);l.lineTo(e,n+r),(0!==i||0!==r)&&l.bezierCurveTo(e,n+r*a,e+i*a,n,e+i,n);return l}(e);break;case\\\\\\\"polygon\\\\\\\":r=s(e,r),m=function(t){function e(t,e,n){const s=d(e),o=d(n);0===r?i.moveTo(s,o):i.lineTo(s,o),r++}const n=/(-?[\\\\d\\\\.?]+)[,|\\\\s](-?[\\\\d\\\\.?]+)/g,i=new p.a;let r=0;return t.getAttribute(\\\\\\\"points\\\\\\\").replace(n,e),i.currentPath.autoClose=!0,i}(e);break;case\\\\\\\"polyline\\\\\\\":r=s(e,r),m=function(t){function e(t,e,n){const s=d(e),o=d(n);0===r?i.moveTo(s,o):i.lineTo(s,o),r++}const n=/(-?[\\\\d\\\\.?]+)[,|\\\\s](-?[\\\\d\\\\.?]+)/g,i=new p.a;let r=0;return t.getAttribute(\\\\\\\"points\\\\\\\").replace(n,e),i.currentPath.autoClose=!1,i}(e);break;case\\\\\\\"circle\\\\\\\":r=s(e,r),m=function(t){const e=d(t.getAttribute(\\\\\\\"cx\\\\\\\")||0),n=d(t.getAttribute(\\\\\\\"cy\\\\\\\")||0),i=d(t.getAttribute(\\\\\\\"r\\\\\\\")||0),r=new h.a;r.absarc(e,n,i,0,2*Math.PI);const s=new p.a;return s.subPaths.push(r),s}(e);break;case\\\\\\\"ellipse\\\\\\\":r=s(e,r),m=function(t){const e=d(t.getAttribute(\\\\\\\"cx\\\\\\\")||0),n=d(t.getAttribute(\\\\\\\"cy\\\\\\\")||0),i=d(t.getAttribute(\\\\\\\"rx\\\\\\\")||0),r=d(t.getAttribute(\\\\\\\"ry\\\\\\\")||0),s=new h.a;s.absellipse(e,n,i,r,0,2*Math.PI);const o=new p.a;return o.subPaths.push(s),o}(e);break;case\\\\\\\"line\\\\\\\":r=s(e,r),m=function(t){const e=d(t.getAttribute(\\\\\\\"x1\\\\\\\")||0),n=d(t.getAttribute(\\\\\\\"y1\\\\\\\")||0),i=d(t.getAttribute(\\\\\\\"x2\\\\\\\")||0),r=d(t.getAttribute(\\\\\\\"y2\\\\\\\")||0),s=new p.a;return s.moveTo(e,n),s.lineTo(i,r),s.currentPath.autoClose=!1,s}(e);break;case\\\\\\\"defs\\\\\\\":c=!1;break;case\\\\\\\"use\\\\\\\":r=s(e,r);const l=e.href.baseVal.substring(1),u=e.viewportElement.getElementById(l);u?t(u,r):console.warn(\\\\\\\"SVGLoader: 'use node' references non-existent node id: \\\\\\\"+l)}if(m&&(void 0!==r.fill&&\\\\\\\"none\\\\\\\"!==r.fill&&m.color.setStyle(r.fill),function(t,e){function n(t){E.set(t.x,t.y,1).applyMatrix3(e),t.set(E.x,E.y)}const i=function(t){return 0!==t.elements[1]||0!==t.elements[3]}(e),r=t.subPaths;for(let t=0,s=r.length;t<s;t++){const s=r[t].curves;for(let t=0;t<s.length;t++){const r=s[t];r.isLineCurve?(n(r.v1),n(r.v2)):r.isCubicBezierCurve?(n(r.v0),n(r.v1),n(r.v2),n(r.v3)):r.isQuadraticBezierCurve?(n(r.v0),n(r.v1),n(r.v2)):r.isEllipseCurve&&(i&&console.warn(\\\\\\\"SVGLoader: Elliptic arc or ellipse rotation or skewing is not implemented.\\\\\\\"),A.set(r.aX,r.aY),n(A),r.aX=A.x,r.aY=A.y,r.xRadius*=_(e),r.yRadius*=f(e))}}}(m,M),g.push(m),m.userData={node:e,style:r}),c){const n=e.childNodes;for(let e=0;e<n.length;e++)t(n[e],r)}l&&(y.pop(),y.length>0?M.copy(y[y.length-1]):M.identity())}(S.documentElement,{fill:\\\\\\\"#000\\\\\\\",fillOpacity:1,strokeOpacity:1,strokeWidth:1,strokeLineJoin:\\\\\\\"miter\\\\\\\",strokeLineCap:\\\\\\\"butt\\\\\\\",strokeMiterLimit:4});return{paths:g,xml:S.documentElement}}static createShapes(t){const e=999999999,n=0,r=1,o=2,a=3,l=4,c=5,u=6,p={loc:n,t:0};function m(t,e,i,r){const s=t.x,a=e.x,l=i.x,c=r.x,u=t.y,h=e.y,d=i.y,_=r.y,m=(c-l)*(u-d)-(_-d)*(s-l),g=(_-d)*(a-s)-(c-l)*(h-u),v=m/g,y=((a-s)*(u-d)-(h-u)*(s-l))/g;if(0===g&&0!==m||v<=0||v>=1||y<0||y>1)return null;if(0===m&&0===g){for(let l=0;l<2;l++){if(f(0===l?i:r,t,e),p.loc==n){const t=0===l?i:r;return{x:t.x,y:t.y,t:p.t}}if(p.loc==o){return{x:+(s+p.t*(a-s)).toPrecision(10),y:+(u+p.t*(h-u)).toPrecision(10),t:p.t}}}return null}for(let s=0;s<2;s++)if(f(0===s?i:r,t,e),p.loc==n){const t=0===s?i:r;return{x:t.x,y:t.y,t:p.t}}return{x:+(s+v*(a-s)).toPrecision(10),y:+(u+v*(h-u)).toPrecision(10),t:v}}function f(t,e,i){const s=i.x-e.x,h=i.y-e.y,d=t.x-e.x,_=t.y-e.y,m=s*_-d*h;if(t.x===e.x&&t.y===e.y)return p.loc=n,void(p.t=0);if(t.x===i.x&&t.y===i.y)return p.loc=r,void(p.t=1);if(m<-Number.EPSILON)return void(p.loc=a);if(m>Number.EPSILON)return void(p.loc=l);if(s*d<0||h*_<0)return void(p.loc=c);if(Math.sqrt(s*s+h*h)<Math.sqrt(d*d+_*_))return void(p.loc=u);let f;f=0!==s?d/s:_/h,p.loc=o,p.t=f}function g(t,e,n){const r=new i.a;e.getCenter(r);const s=[];return n.forEach((e=>{if(e.boundingBox.containsPoint(r)){(function(t,e){const n=[],r=[];for(let s=1;s<t.length;s++){const o=t[s-1],a=t[s];for(let t=1;t<e.length;t++){const s=m(o,a,e[t-1],e[t]);null!==s&&void 0===n.find((t=>t.t<=s.t+Number.EPSILON&&t.t>=s.t-Number.EPSILON))&&(n.push(s),r.push(new i.a(s.x,s.y)))}}return r})(t,e.points).forEach((t=>{s.push({identifier:e.identifier,isCW:e.isCW,point:t})}))}})),s.sort(((t,e)=>t.point.x-e.point.x)),s}let v=0,y=e,x=-999999999,b=t.subPaths.map((t=>{const n=t.getPoints();let r=-999999999,o=e,a=-999999999,l=e;for(let t=0;t<n.length;t++){const e=n[t];e.y>r&&(r=e.y),e.y<o&&(o=e.y),e.x>a&&(a=e.x),e.x<l&&(l=e.x)}return x<=a&&(x=a+1),y>=l&&(y=l-1),{points:n,isCW:_.a.isClockWise(n),identifier:v++,boundingBox:new s(new i.a(l,o),new i.a(a,r))}}));b=b.filter((t=>t.points.length>1));const w=b.map((e=>function(t,e,n,r,s){null!=s&&\\\\\\\"\\\\\\\"!==s||(s=\\\\\\\"nonzero\\\\\\\");const o=new i.a;t.boundingBox.getCenter(o);const a=g([new i.a(n,o.y),new i.a(r,o.y)],t.boundingBox,e);a.sort(((t,e)=>t.point.x-e.point.x));const l=[],c=[];a.forEach((e=>{e.identifier===t.identifier?l.push(e):c.push(e)}));const u=l[0].point.x,h=[];let d=0;for(;d<c.length&&c[d].point.x<u;)h.length>0&&h[h.length-1]===c[d].identifier?h.pop():h.push(c[d].identifier),d++;if(h.push(t.identifier),\\\\\\\"evenodd\\\\\\\"===s){const e=h.length%2==0,n=h[h.length-2];return{identifier:t.identifier,isHole:e,for:n}}if(\\\\\\\"nonzero\\\\\\\"===s){let n=!0,i=null,r=null;for(let t=0;t<h.length;t++){const s=h[t];n?(r=e[s].isCW,n=!1,i=s):r!==e[s].isCW&&(r=e[s].isCW,n=!0)}return{identifier:t.identifier,isHole:n,for:i}}console.warn('fill-rule: \\\\\\\"'+s+'\\\\\\\" is currently not implemented.')}(e,b,y,x,t.userData.style.fillRule))),T=[];return b.forEach((t=>{if(!w[t.identifier].isHole){const e=new d.a(t.points);w.filter((e=>e.isHole&&e.for===t.identifier)).forEach((t=>{const n=b[t.identifier];e.holes.push(new h.a(n.points))})),T.push(e)}})),T}static getStrokeStyle(t,e,n,i,r){return{strokeColor:e=void 0!==e?e:\\\\\\\"#000\\\\\\\",strokeWidth:t=void 0!==t?t:1,strokeLineJoin:n=void 0!==n?n:\\\\\\\"miter\\\\\\\",strokeLineCap:i=void 0!==i?i:\\\\\\\"butt\\\\\\\",strokeMiterLimit:r=void 0!==r?r:4}}static pointsToStroke(t,e,n,i){const r=[],s=[],a=[];if(0===f.pointsToStrokeWithBuffers(t,e,n,i,r,s,a))return null;const c=new o.a;return c.setAttribute(\\\\\\\"position\\\\\\\",new l.c(r,3)),c.setAttribute(\\\\\\\"normal\\\\\\\",new l.c(s,3)),c.setAttribute(\\\\\\\"uv\\\\\\\",new l.c(a,2)),c}static pointsToStrokeWithBuffers(t,e,n,r,s,o,a,l){const c=new i.a,u=new i.a,h=new i.a,d=new i.a,p=new i.a,_=new i.a,m=new i.a,f=new i.a,g=new i.a,v=new i.a,y=new i.a,x=new i.a,b=new i.a,w=new i.a,T=new i.a,A=new i.a,E=new i.a;n=void 0!==n?n:12,r=void 0!==r?r:.001,l=void 0!==l?l:0;const M=(t=function(t){let e=!1;for(let n=1,i=t.length-1;n<i;n++)if(t[n].distanceTo(t[n+1])<r){e=!0;break}if(!e)return t;const n=[];n.push(t[0]);for(let e=1,i=t.length-1;e<i;e++)t[e].distanceTo(t[e+1])>=r&&n.push(t[e]);return n.push(t[t.length-1]),n}(t)).length;if(M<2)return 0;const S=t[0].equals(t[M-1]);let C,N,L=t[0];const O=e.strokeWidth/2,R=1/(M-1);let P,I,F,D,k=0,B=!1,z=0,U=3*l,G=2*l;V(t[0],t[1],c).multiplyScalar(O),f.copy(t[0]).sub(c),g.copy(t[0]).add(c),v.copy(f),y.copy(g);for(let n=1;n<M;n++){C=t[n],N=n===M-1?S?t[1]:void 0:t[n+1];const i=c;if(V(L,C,i),h.copy(i).multiplyScalar(O),x.copy(C).sub(h),b.copy(C).add(h),P=k+R,I=!1,void 0!==N){V(C,N,u),h.copy(u).multiplyScalar(O),w.copy(C).sub(h),T.copy(C).add(h),F=!0,h.subVectors(N,L),i.dot(h)<0&&(F=!1),1===n&&(B=F),h.subVectors(N,C),h.normalize();const t=Math.abs(i.dot(h));if(0!==t){const n=O/t;h.multiplyScalar(-n),d.subVectors(C,L),p.copy(d).setLength(n).add(h),A.copy(p).negate();const i=p.length(),r=d.length();d.divideScalar(r),_.subVectors(N,C);const s=_.length();switch(_.divideScalar(s),d.dot(A)<r&&_.dot(A)<s&&(I=!0),E.copy(p).add(C),A.add(C),D=!1,I?F?(T.copy(A),b.copy(A)):(w.copy(A),x.copy(A)):W(),e.strokeLineJoin){case\\\\\\\"bevel\\\\\\\":q(F,I,P);break;case\\\\\\\"round\\\\\\\":X(F,I),F?j(C,x,w,P,0):j(C,T,b,P,1);break;case\\\\\\\"miter\\\\\\\":case\\\\\\\"miter-clip\\\\\\\":default:const t=O*e.strokeMiterLimit/i;if(t<1){if(\\\\\\\"miter-clip\\\\\\\"!==e.strokeLineJoin){q(F,I,P);break}X(F,I),F?(_.subVectors(E,x).multiplyScalar(t).add(x),m.subVectors(E,w).multiplyScalar(t).add(w),H(x,P,0),H(_,P,0),H(C,P,.5),H(C,P,.5),H(_,P,0),H(m,P,0),H(C,P,.5),H(m,P,0),H(w,P,0)):(_.subVectors(E,b).multiplyScalar(t).add(b),m.subVectors(E,T).multiplyScalar(t).add(T),H(b,P,1),H(_,P,1),H(C,P,.5),H(C,P,.5),H(_,P,1),H(m,P,1),H(C,P,.5),H(m,P,1),H(T,P,1))}else I?(F?(H(g,k,1),H(f,k,0),H(E,P,0),H(g,k,1),H(E,P,0),H(A,P,1)):(H(g,k,1),H(f,k,0),H(E,P,1),H(f,k,0),H(A,P,0),H(E,P,1)),F?w.copy(E):T.copy(E)):F?(H(x,P,0),H(E,P,0),H(C,P,.5),H(C,P,.5),H(E,P,0),H(w,P,0)):(H(b,P,1),H(E,P,1),H(C,P,.5),H(C,P,.5),H(E,P,1),H(T,P,1)),D=!0}}else W()}else W();S||n!==M-1||Y(t[0],v,y,F,!0,k),k=P,L=C,f.copy(w),g.copy(T)}if(S){if(I&&s){let t=E,e=A;B!==F&&(t=A,e=E),F?(D||B)&&(e.toArray(s,0),e.toArray(s,9),D&&t.toArray(s,3)):!D&&B||(e.toArray(s,3),e.toArray(s,9),D&&t.toArray(s,0))}}else Y(C,x,b,F,!1,P);return z;function V(t,e,n){return n.subVectors(e,t),n.set(-n.y,n.x).normalize()}function H(t,e,n){s&&(s[U]=t.x,s[U+1]=t.y,s[U+2]=0,o&&(o[U]=0,o[U+1]=0,o[U+2]=1),U+=3,a&&(a[G]=e,a[G+1]=n,G+=2)),z+=3}function j(t,e,i,r,s){c.copy(e).sub(t).normalize(),u.copy(i).sub(t).normalize();let o=Math.PI;const a=c.dot(u);Math.abs(a)<1&&(o=Math.abs(Math.acos(a))),o/=n,h.copy(e);for(let e=0,i=n-1;e<i;e++)d.copy(h).rotateAround(t,o),H(h,r,s),H(d,r,s),H(t,r,.5),h.copy(d);H(d,r,s),H(i,r,s),H(t,r,.5)}function W(){H(g,k,1),H(f,k,0),H(x,P,0),H(g,k,1),H(x,P,1),H(b,P,0)}function q(t,e,n){e?t?(H(g,k,1),H(f,k,0),H(x,P,0),H(g,k,1),H(x,P,0),H(A,P,1),H(x,n,0),H(w,n,0),H(A,n,.5)):(H(g,k,1),H(f,k,0),H(b,P,1),H(f,k,0),H(A,P,0),H(b,P,1),H(b,n,1),H(T,n,0),H(A,n,.5)):t?(H(x,n,0),H(w,n,0),H(C,n,.5)):(H(b,n,1),H(T,n,0),H(C,n,.5))}function X(t,e){e&&(t?(H(g,k,1),H(f,k,0),H(x,P,0),H(g,k,1),H(x,P,0),H(A,P,1),H(x,k,0),H(C,P,.5),H(A,P,1),H(C,P,.5),H(w,k,0),H(A,P,1)):(H(g,k,1),H(f,k,0),H(b,P,1),H(f,k,0),H(A,P,0),H(b,P,1),H(b,k,1),H(A,P,0),H(C,P,.5),H(C,P,.5),H(A,P,0),H(T,k,1)))}function Y(t,n,i,r,o,a){switch(e.strokeLineCap){case\\\\\\\"round\\\\\\\":o?j(t,i,n,a,.5):j(t,n,i,a,.5);break;case\\\\\\\"square\\\\\\\":if(o)c.subVectors(n,t),u.set(c.y,-c.x),h.addVectors(c,u).add(t),d.subVectors(u,c).add(t),r?(h.toArray(s,3),d.toArray(s,0),d.toArray(s,9)):(h.toArray(s,3),h.toArray(s,9),d.toArray(s,0));else{c.subVectors(i,t),u.set(c.y,-c.x),h.addVectors(c,u).add(t),d.subVectors(u,c).add(t);const e=s.length;r?(h.toArray(s,e-3),d.toArray(s,e-6),d.toArray(s,e-12)):(h.toArray(s,e-6),d.toArray(s,e-3),d.toArray(s,e-12))}}}}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";var i;n.d(e,\\\\\\\"a\\\\\\\",(function(){return i})),function(t){t.CODE=\\\\\\\"code.json\\\\\\\",t.EDITOR=\\\\\\\"editor.json\\\\\\\",t.ASSETS=\\\\\\\"assets.json\\\\\\\",t.POLYGONJS=\\\\\\\"js/all.js\\\\\\\",t.POLY_CONFIG=\\\\\\\"js/polyConfig.js\\\\\\\",t.JS_FILES=\\\\\\\"js_files.json\\\\\\\",t.POSTER=\\\\\\\"poster.png\\\\\\\"}(i||(i={}))},function(t,e,n){var i=n(149),r=n(154);t.exports=function(t,e){var n=r(t,e);return i(n)?n:void 0}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return u}));var i=n(0),r=n(25);function s(){let t=0,e=0,n=0,i=0;function r(r,s,o,a){t=r,e=o,n=-3*r+3*s-2*o-a,i=2*r-2*s+o+a}return{initCatmullRom:function(t,e,n,i,s){r(e,n,s*(n-t),s*(i-e))},initNonuniformCatmullRom:function(t,e,n,i,s,o,a){let l=(e-t)/s-(n-t)/(s+o)+(n-e)/o,c=(n-e)/o-(i-e)/(o+a)+(i-n)/a;l*=o,c*=o,r(e,n,l,c)},calc:function(r){const s=r*r;return t+e*r+n*s+i*(s*r)}}}const o=new i.a,a=new s,l=new s,c=new s;class u extends r.a{constructor(t=[],e=!1,n=\\\\\\\"centripetal\\\\\\\",i=.5){super(),this.type=\\\\\\\"CatmullRomCurve3\\\\\\\",this.points=t,this.closed=e,this.curveType=n,this.tension=i}getPoint(t,e=new i.a){const n=e,r=this.points,s=r.length,u=(s-(this.closed?0:1))*t;let h,d,p=Math.floor(u),_=u-p;this.closed?p+=p>0?0:(Math.floor(Math.abs(p)/s)+1)*s:0===_&&p===s-1&&(p=s-2,_=1),this.closed||p>0?h=r[(p-1)%s]:(o.subVectors(r[0],r[1]).add(r[0]),h=o);const m=r[p%s],f=r[(p+1)%s];if(this.closed||p+2<s?d=r[(p+2)%s]:(o.subVectors(r[s-1],r[s-2]).add(r[s-1]),d=o),\\\\\\\"centripetal\\\\\\\"===this.curveType||\\\\\\\"chordal\\\\\\\"===this.curveType){const t=\\\\\\\"chordal\\\\\\\"===this.curveType?.5:.25;let e=Math.pow(h.distanceToSquared(m),t),n=Math.pow(m.distanceToSquared(f),t),i=Math.pow(f.distanceToSquared(d),t);n<1e-4&&(n=1),e<1e-4&&(e=n),i<1e-4&&(i=n),a.initNonuniformCatmullRom(h.x,m.x,f.x,d.x,e,n,i),l.initNonuniformCatmullRom(h.y,m.y,f.y,d.y,e,n,i),c.initNonuniformCatmullRom(h.z,m.z,f.z,d.z,e,n,i)}else\\\\\\\"catmullrom\\\\\\\"===this.curveType&&(a.initCatmullRom(h.x,m.x,f.x,d.x,this.tension),l.initCatmullRom(h.y,m.y,f.y,d.y,this.tension),c.initCatmullRom(h.z,m.z,f.z,d.z,this.tension));return n.set(a.calc(_),l.calc(_),c.calc(_)),n}copy(t){super.copy(t),this.points=[];for(let e=0,n=t.points.length;e<n;e++){const n=t.points[e];this.points.push(n.clone())}return this.closed=t.closed,this.curveType=t.curveType,this.tension=t.tension,this}toJSON(){const t=super.toJSON();t.points=[];for(let e=0,n=this.points.length;e<n;e++){const n=this.points[e];t.points.push(n.toArray())}return t.closed=this.closed,t.curveType=this.curveType,t.tension=this.tension,t}fromJSON(t){super.fromJSON(t),this.points=[];for(let e=0,n=t.points.length;e<n;e++){const n=t.points[e];this.points.push((new i.a).fromArray(n))}return this.closed=t.closed,this.curveType=t.curveType,this.tension=t.tension,this}}u.prototype.isCatmullRomCurve3=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";function i(t){return(window.URL||window.webkitURL).createObjectURL(t)}n.d(e,\\\\\\\"a\\\\\\\",(function(){return i}))},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r}));var i=n(32);class r extends i.a{constructor(t,e){super(t,e),this.type=\\\\\\\"AmbientLight\\\\\\\"}}r.prototype.isAmbientLight=!0},function(t,e,n){(function(t){(function(){\\\\\\\"use strict\\\\\\\";var e;function n(t){var e=0;return function(){return e<t.length?{done:!1,value:t[e++]}:{done:!0}}}var i=\\\\\\\"function\\\\\\\"==typeof Object.defineProperties?Object.defineProperty:function(t,e,n){return t==Array.prototype||t==Object.prototype||(t[e]=n.value),t};var r=function(e){e=[\\\\\\\"object\\\\\\\"==typeof globalThis&&globalThis,e,\\\\\\\"object\\\\\\\"==typeof window&&window,\\\\\\\"object\\\\\\\"==typeof self&&self,\\\\\\\"object\\\\\\\"==typeof t&&t];for(var n=0;n<e.length;++n){var i=e[n];if(i&&i.Math==Math)return i}throw Error(\\\\\\\"Cannot find global object\\\\\\\")}(this);function s(t,e){if(e)t:{var n=r;t=t.split(\\\\\\\".\\\\\\\");for(var s=0;s<t.length-1;s++){var o=t[s];if(!(o in n))break t;n=n[o]}(e=e(s=n[t=t[t.length-1]]))!=s&&null!=e&&i(n,t,{configurable:!0,writable:!0,value:e})}}function o(t){return(t={next:t})[Symbol.iterator]=function(){return this},t}function a(t){var e=\\\\\\\"undefined\\\\\\\"!=typeof Symbol&&Symbol.iterator&&t[Symbol.iterator];return e?e.call(t):{next:n(t)}}function l(t){if(!(t instanceof Array)){t=a(t);for(var e,n=[];!(e=t.next()).done;)n.push(e.value);t=n}return t}s(\\\\\\\"Symbol\\\\\\\",(function(t){function e(t,e){this.g=t,i(this,\\\\\\\"description\\\\\\\",{configurable:!0,writable:!0,value:e})}if(t)return t;e.prototype.toString=function(){return this.g};var n=\\\\\\\"jscomp_symbol_\\\\\\\"+(1e9*Math.random()>>>0)+\\\\\\\"_\\\\\\\",r=0;return function t(i){if(this instanceof t)throw new TypeError(\\\\\\\"Symbol is not a constructor\\\\\\\");return new e(n+(i||\\\\\\\"\\\\\\\")+\\\\\\\"_\\\\\\\"+r++,i)}})),s(\\\\\\\"Symbol.iterator\\\\\\\",(function(t){if(t)return t;t=Symbol(\\\\\\\"Symbol.iterator\\\\\\\");for(var e=\\\\\\\"Array Int8Array Uint8Array Uint8ClampedArray Int16Array Uint16Array Int32Array Uint32Array Float32Array Float64Array\\\\\\\".split(\\\\\\\" \\\\\\\"),s=0;s<e.length;s++){var a=r[e[s]];\\\\\\\"function\\\\\\\"==typeof a&&\\\\\\\"function\\\\\\\"!=typeof a.prototype[t]&&i(a.prototype,t,{configurable:!0,writable:!0,value:function(){return o(n(this))}})}return t}));var c,u=\\\\\\\"function\\\\\\\"==typeof Object.create?Object.create:function(t){function e(){}return e.prototype=t,new e};if(\\\\\\\"function\\\\\\\"==typeof Object.setPrototypeOf)c=Object.setPrototypeOf;else{var h;t:{var d={};try{d.__proto__={a:!0},h=d.a;break t}catch(t){}h=!1}c=h?function(t,e){if(t.__proto__=e,t.__proto__!==e)throw new TypeError(t+\\\\\\\" is not extensible\\\\\\\");return t}:null}var p=c;function _(t,e){if(t.prototype=u(e.prototype),t.prototype.constructor=t,p)p(t,e);else for(var n in e)if(\\\\\\\"prototype\\\\\\\"!=n)if(Object.defineProperties){var i=Object.getOwnPropertyDescriptor(e,n);i&&Object.defineProperty(t,n,i)}else t[n]=e[n];t.ca=e.prototype}function m(){this.l=!1,this.i=null,this.h=void 0,this.g=1,this.s=this.m=0,this.j=null}function f(t){if(t.l)throw new TypeError(\\\\\\\"Generator is already running\\\\\\\");t.l=!0}function g(t,e){t.j={S:e,T:!0},t.g=t.m||t.s}function v(t,e,n){return t.g=n,{value:e}}function y(t){this.g=new m,this.h=t}function x(t,e,n,i){try{var r=e.call(t.g.i,n);if(!(r instanceof Object))throw new TypeError(\\\\\\\"Iterator result \\\\\\\"+r+\\\\\\\" is not an object\\\\\\\");if(!r.done)return t.g.l=!1,r;var s=r.value}catch(e){return t.g.i=null,g(t.g,e),b(t)}return t.g.i=null,i.call(t.g,s),b(t)}function b(t){for(;t.g.g;)try{var e=t.h(t.g);if(e)return t.g.l=!1,{value:e.value,done:!1}}catch(e){t.g.h=void 0,g(t.g,e)}if(t.g.l=!1,t.g.j){if(e=t.g.j,t.g.j=null,e.T)throw e.S;return{value:e.return,done:!0}}return{value:void 0,done:!0}}function w(t){this.next=function(e){return f(t.g),t.g.i?e=x(t,t.g.i.next,e,t.g.o):(t.g.o(e),e=b(t)),e},this.throw=function(e){return f(t.g),t.g.i?e=x(t,t.g.i.throw,e,t.g.o):(g(t.g,e),e=b(t)),e},this.return=function(e){return function(t,e){f(t.g);var n=t.g.i;return n?x(t,\\\\\\\"return\\\\\\\"in n?n.return:function(t){return{value:t,done:!0}},e,t.g.return):(t.g.return(e),b(t))}(t,e)},this[Symbol.iterator]=function(){return this}}function T(t,e){return e=new w(new y(e)),p&&t.prototype&&p(e,t.prototype),e}m.prototype.o=function(t){this.h=t},m.prototype.return=function(t){this.j={return:t},this.g=this.s};var A=\\\\\\\"function\\\\\\\"==typeof Object.assign?Object.assign:function(t,e){for(var n=1;n<arguments.length;n++){var i=arguments[n];if(i)for(var r in i)Object.prototype.hasOwnProperty.call(i,r)&&(t[r]=i[r])}return t};s(\\\\\\\"Object.assign\\\\\\\",(function(t){return t||A})),s(\\\\\\\"Promise\\\\\\\",(function(t){function e(t){this.h=0,this.i=void 0,this.g=[],this.o=!1;var e=this.j();try{t(e.resolve,e.reject)}catch(t){e.reject(t)}}function n(){this.g=null}function i(t){return t instanceof e?t:new e((function(e){e(t)}))}if(t)return t;n.prototype.h=function(t){if(null==this.g){this.g=[];var e=this;this.i((function(){e.l()}))}this.g.push(t)};var s=r.setTimeout;n.prototype.i=function(t){s(t,0)},n.prototype.l=function(){for(;this.g&&this.g.length;){var t=this.g;this.g=[];for(var e=0;e<t.length;++e){var n=t[e];t[e]=null;try{n()}catch(t){this.j(t)}}}this.g=null},n.prototype.j=function(t){this.i((function(){throw t}))},e.prototype.j=function(){function t(t){return function(i){n||(n=!0,t.call(e,i))}}var e=this,n=!1;return{resolve:t(this.B),reject:t(this.l)}},e.prototype.B=function(t){if(t===this)this.l(new TypeError(\\\\\\\"A Promise cannot resolve to itself\\\\\\\"));else if(t instanceof e)this.D(t);else{t:switch(typeof t){case\\\\\\\"object\\\\\\\":var n=null!=t;break t;case\\\\\\\"function\\\\\\\":n=!0;break t;default:n=!1}n?this.v(t):this.m(t)}},e.prototype.v=function(t){var e=void 0;try{e=t.then}catch(t){return void this.l(t)}\\\\\\\"function\\\\\\\"==typeof e?this.F(e,t):this.m(t)},e.prototype.l=function(t){this.s(2,t)},e.prototype.m=function(t){this.s(1,t)},e.prototype.s=function(t,e){if(0!=this.h)throw Error(\\\\\\\"Cannot settle(\\\\\\\"+t+\\\\\\\", \\\\\\\"+e+\\\\\\\"): Promise already settled in state\\\\\\\"+this.h);this.h=t,this.i=e,2===this.h&&this.C(),this.u()},e.prototype.C=function(){var t=this;s((function(){if(t.A()){var e=r.console;void 0!==e&&e.error(t.i)}}),1)},e.prototype.A=function(){if(this.o)return!1;var t=r.CustomEvent,e=r.Event,n=r.dispatchEvent;return void 0===n||(\\\\\\\"function\\\\\\\"==typeof t?t=new t(\\\\\\\"unhandledrejection\\\\\\\",{cancelable:!0}):\\\\\\\"function\\\\\\\"==typeof e?t=new e(\\\\\\\"unhandledrejection\\\\\\\",{cancelable:!0}):(t=r.document.createEvent(\\\\\\\"CustomEvent\\\\\\\")).initCustomEvent(\\\\\\\"unhandledrejection\\\\\\\",!1,!0,t),t.promise=this,t.reason=this.i,n(t))},e.prototype.u=function(){if(null!=this.g){for(var t=0;t<this.g.length;++t)o.h(this.g[t]);this.g=null}};var o=new n;return e.prototype.D=function(t){var e=this.j();t.I(e.resolve,e.reject)},e.prototype.F=function(t,e){var n=this.j();try{t.call(e,n.resolve,n.reject)}catch(t){n.reject(t)}},e.prototype.then=function(t,n){function i(t,e){return\\\\\\\"function\\\\\\\"==typeof t?function(e){try{r(t(e))}catch(t){s(t)}}:e}var r,s,o=new e((function(t,e){r=t,s=e}));return this.I(i(t,r),i(n,s)),o},e.prototype.catch=function(t){return this.then(void 0,t)},e.prototype.I=function(t,e){function n(){switch(i.h){case 1:t(i.i);break;case 2:e(i.i);break;default:throw Error(\\\\\\\"Unexpected state: \\\\\\\"+i.h)}}var i=this;null==this.g?o.h(n):this.g.push(n),this.o=!0},e.resolve=i,e.reject=function(t){return new e((function(e,n){n(t)}))},e.race=function(t){return new e((function(e,n){for(var r=a(t),s=r.next();!s.done;s=r.next())i(s.value).I(e,n)}))},e.all=function(t){var n=a(t),r=n.next();return r.done?i([]):new e((function(t,e){function s(e){return function(n){o[e]=n,0==--a&&t(o)}}var o=[],a=0;do{o.push(void 0),a++,i(r.value).I(s(o.length-1),e),r=n.next()}while(!r.done)}))},e})),s(\\\\\\\"Object.is\\\\\\\",(function(t){return t||function(t,e){return t===e?0!==t||1/t==1/e:t!=t&&e!=e}})),s(\\\\\\\"Array.prototype.includes\\\\\\\",(function(t){return t||function(t,e){var n=this;n instanceof String&&(n=String(n));var i=n.length;for(0>(e=e||0)&&(e=Math.max(e+i,0));e<i;e++){var r=n[e];if(r===t||Object.is(r,t))return!0}return!1}})),s(\\\\\\\"String.prototype.includes\\\\\\\",(function(t){return t||function(t,e){if(null==this)throw new TypeError(\\\\\\\"The 'this' value for String.prototype.includes must not be null or undefined\\\\\\\");if(t instanceof RegExp)throw new TypeError(\\\\\\\"First argument to String.prototype.includes must not be a regular expression\\\\\\\");return-1!==this.indexOf(t,e||0)}})),s(\\\\\\\"Array.prototype.keys\\\\\\\",(function(t){return t||function(){return function(t,e){t instanceof String&&(t+=\\\\\\\"\\\\\\\");var n=0,i=!1,r={next:function(){if(!i&&n<t.length){var r=n++;return{value:e(r,t[r]),done:!1}}return i=!0,{done:!0,value:void 0}}};return r[Symbol.iterator]=function(){return r},r}(this,(function(t){return t}))}}));var E=this||self;function M(t,e){t=t.split(\\\\\\\".\\\\\\\");var n,i=E;t[0]in i||void 0===i.execScript||i.execScript(\\\\\\\"var \\\\\\\"+t[0]);for(;t.length&&(n=t.shift());)t.length||void 0===e?i=i[n]&&i[n]!==Object.prototype[n]?i[n]:i[n]={}:i[n]=e}function S(t,e){return e=String.fromCharCode.apply(null,e),null==t?e:t+e}var C,N,L=\\\\\\\"undefined\\\\\\\"!=typeof TextDecoder,O=\\\\\\\"undefined\\\\\\\"!=typeof TextEncoder;function R(t){if(O)t=(N||(N=new TextEncoder)).encode(t);else{var e=void 0;e=void 0!==e&&e;for(var n=0,i=new Uint8Array(3*t.length),r=0;r<t.length;r++){var s=t.charCodeAt(r);if(128>s)i[n++]=s;else{if(2048>s)i[n++]=s>>6|192;else{if(55296<=s&&57343>=s){if(56319>=s&&r<t.length){var o=t.charCodeAt(++r);if(56320<=o&&57343>=o){s=1024*(s-55296)+o-56320+65536,i[n++]=s>>18|240,i[n++]=s>>12&63|128,i[n++]=s>>6&63|128,i[n++]=63&s|128;continue}r--}if(e)throw Error(\\\\\\\"Found an unpaired surrogate\\\\\\\");s=65533}i[n++]=s>>12|224,i[n++]=s>>6&63|128}i[n++]=63&s|128}}t=i.subarray(0,n)}return t}var P=\\\\\\\"function\\\\\\\"==typeof Uint8Array.prototype.slice,I=0;function F(t){this.h=null,this.g=this.j=this.l=0,this.m=!1,t&&D(this,t)}function D(t,e){e=e.constructor===Uint8Array?e:e.constructor===ArrayBuffer||e.constructor===Array?new Uint8Array(e):e.constructor===String?function(t){var e=t.length,n=3*e/4;n%3?n=Math.floor(n):-1!=\\\\\\\"=.\\\\\\\".indexOf(t[e-1])&&(n=-1!=\\\\\\\"=.\\\\\\\".indexOf(t[e-2])?n-2:n-1);var i=new Uint8Array(n),r=0;return function(t,e){function n(e){for(;i<t.length;){var n=t.charAt(i++),r=J[n];if(null!=r)return r;if(!/^[\\\\s\\\\xa0]*$/.test(n))throw Error(\\\\\\\"Unknown base64 encoding at char: \\\\\\\"+n)}return e}Z();for(var i=0;;){var r=n(-1),s=n(0),o=n(64),a=n(64);if(64===a&&-1===r)break;e(r<<2|s>>4),64!=o&&(e(s<<4&240|o>>2),64!=a&&e(o<<6&192|a))}}(t,(function(t){i[r++]=t})),i.subarray(0,r)}(e):e instanceof Uint8Array?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(0),t.h=e,t.l=0,t.j=t.h.length,t.g=t.l}function k(t){for(var e=128,n=0,i=0,r=0;4>r&&128<=e;r++)n|=(127&(e=t.h[t.g++]))<<7*r;if(128<=e&&(n|=(127&(e=t.h[t.g++]))<<28,i|=(127&e)>>4),128<=e)for(r=0;5>r&&128<=e;r++)i|=(127&(e=t.h[t.g++]))<<7*r+3;if(128>e)return t=n>>>0,(i=2147483648&(e=i>>>0))&&(e=~e>>>0,0==(t=1+~t>>>0)&&(e=e+1>>>0)),t=4294967296*e+(t>>>0),i?-t:t;t.m=!0}F.prototype.reset=function(){this.g=this.l},F.prototype.i=function(){var t=this.h,e=t[this.g],n=127&e;return 128>e?(this.g+=1,n):(n|=(127&(e=t[this.g+1]))<<7,128>e?(this.g+=2,n):(n|=(127&(e=t[this.g+2]))<<14,128>e?(this.g+=3,n):(n|=(127&(e=t[this.g+3]))<<21,128>e?(this.g+=4,n):(n|=(15&(e=t[this.g+4]))<<28,128>e?(this.g+=5,n>>>0):(this.g+=5,128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]&&128<=t[this.g++]&&this.g++,n)))))},F.prototype.o=function(){var t=this.h[this.g],e=this.h[this.g+1],n=this.h[this.g+2],i=this.h[this.g+3];return this.g+=4,t=2*((n=(t<<0|e<<8|n<<16|i<<24)>>>0)>>31)+1,e=n>>>23&255,n&=8388607,255==e?n?NaN:1/0*t:0==e?t*Math.pow(2,-149)*n:t*Math.pow(2,e-150)*(n+Math.pow(2,23))};var B=[];function z(){this.g=new Uint8Array(64),this.h=0}function U(t,e){for(;127<e;)t.push(127&e|128),e>>>=7;t.push(e)}function G(t){if(B.length){var e=B.pop();t&&D(e,t),t=e}else t=new F(t);this.g=t,this.h=this.i=this.l=-1,this.j=!1}function V(t){var e=t.g;if((e=e.g==e.j)||(e=t.j)||(e=(e=t.g).m||0>e.g||e.g>e.j),e)return!1;var n=7&(e=t.g.i());return 0!=n&&5!=n&&1!=n&&2!=n&&3!=n&&4!=n?(t.j=!0,!1):(t.i=e,t.l=e>>>3,t.h=n,!0)}function H(t){switch(t.h){case 0:if(0!=t.h)H(t);else{for(t=t.g;128&t.h[t.g];)t.g++;t.g++}break;case 1:1!=t.h?H(t):(t=t.g).g+=8;break;case 2:if(2!=t.h)H(t);else{var e=t.g.i();(t=t.g).g+=e}break;case 5:5!=t.h?H(t):(t=t.g).g+=4;break;case 3:for(e=t.l;;){if(!V(t)){t.j=!0;break}if(4==t.h){t.l!=e&&(t.j=!0);break}H(t)}break;default:t.j=!0}}function j(t,e,n){var i=t.g.j,r=t.g.i();r=t.g.g+r,t.g.j=r,n(e,t),t.g.g=r,t.g.j=i}function W(t){return t.g.o()}function q(t){var e,n=t.g.i(),i=(t=t.g).g;if(t.g+=n,t=t.h,L)(e=C)||(e=C=new TextDecoder(\\\\\\\"utf-8\\\\\\\",{fatal:!1})),e=e.decode(t.subarray(i,i+n));else{n=i+n;for(var r,s,o,a=[],l=null;i<n;)128>(r=t[i++])?a.push(r):224>r?i>=n?a.push(65533):(s=t[i++],194>r||128!=(192&s)?(i--,a.push(65533)):a.push((31&r)<<6|63&s)):240>r?i>=n-1?a.push(65533):128!=(192&(s=t[i++]))||224===r&&160>s||237===r&&160<=s||128!=(192&(e=t[i++]))?(i--,a.push(65533)):a.push((15&r)<<12|(63&s)<<6|63&e):244>=r?i>=n-2?a.push(65533):128!=(192&(s=t[i++]))||0!=s-144+(r<<28)>>30||128!=(192&(e=t[i++]))||128!=(192&(o=t[i++]))?(i--,a.push(65533)):(r=(7&r)<<18|(63&s)<<12|(63&e)<<6|63&o,r-=65536,a.push(55296+(r>>10&1023),56320+(1023&r))):a.push(65533),8192<=a.length&&(l=S(l,a),a.length=0);e=S(l,a)}return e}function X(t,e){var n=t.g.i();n=t.g.g+n;for(var i=[];t.g.g<n;)i.push(e.call(t.g));return i}function Y(t){return 2==t.h?X(t,F.prototype.o):[W(t)]}z.prototype.push=function(t){if(!(this.h+1<this.g.length)){var e=this.g;this.g=new Uint8Array(Math.ceil(1+2*this.g.length)),this.g.set(e)}this.g[this.h++]=t},z.prototype.length=function(){return this.h},z.prototype.end=function(){var t=this.g,e=this.h;return this.h=0,P?t.slice(0,e):new Uint8Array(t.subarray(0,e))},G.prototype.reset=function(){this.g.reset(),this.h=this.l=-1};var $={},J=null;function Z(){if(!J){J={};for(var t=\\\\\\\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\\\\\\\".split(\\\\\\\"\\\\\\\"),e=[\\\\\\\"+/=\\\\\\\",\\\\\\\"+/\\\\\\\",\\\\\\\"-_=\\\\\\\",\\\\\\\"-_.\\\\\\\",\\\\\\\"-_\\\\\\\"],n=0;5>n;n++){var i=t.concat(e[n].split(\\\\\\\"\\\\\\\"));$[n]=i;for(var r=0;r<i.length;r++){var s=i[r];void 0===J[s]&&(J[s]=r)}}}}function Q(){this.h=[],this.i=0,this.g=new z}function K(t){var e=t.i+t.g.length();if(0===e)return new Uint8Array(0);e=new Uint8Array(e);for(var n=t.h,i=n.length,r=0,s=0;s<i;s++){var o=n[s];0!==o.length&&(e.set(o,r),r+=o.length)}return 0!==(i=(n=t.g).h)&&(e.set(n.g.subarray(0,i),r),n.h=0),t.h=[e],e}function tt(t,e,n){if(null!=n){U(t.g,8*e+5),t=t.g;var i=n;0===(i=(n=0>i?1:0)?-i:i)?0<1/i?I=0:(0,I=2147483648):isNaN(i)?(0,I=2147483647):34028234663852886e22<i?(0,I=(n<<31|2139095040)>>>0):11754943508222875e-54>i?(i=Math.round(i/Math.pow(2,-149)),0,I=(n<<31|i)>>>0):(e=Math.floor(Math.log(i)/Math.LN2),i*=Math.pow(2,-e),i=8388607&Math.round(8388608*i),0,I=(n<<31|e+127<<23|i)>>>0),n=I,t.push(n>>>0&255),t.push(n>>>8&255),t.push(n>>>16&255),t.push(n>>>24&255)}}function et(t,e,n){U(t.g,8*e+2),U(t.g,n.length),e=t.g.end(),t.h.push(e),t.h.push(n),t.i+=e.length+n.length}var nt=\\\\\\\"function\\\\\\\"==typeof Uint8Array;function it(t,e,n){return\\\\\\\"object\\\\\\\"==typeof t?nt&&!Array.isArray(t)&&t instanceof Uint8Array?n(t):rt(t,e,n):e(t)}function rt(t,e,n){if(Array.isArray(t)){for(var i=Array(t.length),r=0;r<t.length;r++){var s=t[r];null!=s&&(i[r]=it(s,e,n))}return Array.isArray(t)&&t.U&&at(i),i}for(r in i={},t)null!=(s=t[r])&&(i[r]=it(s,e,n));return i}var st,ot={U:{value:!0,configurable:!0}};function at(t){return Array.isArray(t)&&!Object.isFrozen(t)&&Object.defineProperties(t,ot),t}function lt(t,e,n,i){var r=st;if(st=null,t||(t=r),r=this.constructor.aa,t||(t=r?[r]:[]),this.j=r?0:-1,this.m=this.g=null,this.h=t,t=(r=this.h.length)-1,!r||(null===(r=this.h[t])||\\\\\\\"object\\\\\\\"!=typeof r||Array.isArray(r)||nt&&r instanceof Uint8Array)?void 0!==e&&-1<e?(this.l=Math.max(e,t+1-this.j),this.i=null):this.l=Number.MAX_VALUE:(this.l=t-this.j,this.i=r),n)for(e=0;e<n.length;e++)(t=n[e])<this.l?(t+=this.j,(r=this.h[t])?at(r):this.h[t]=ct):(ut(this),(r=this.i[t])?at(r):this.i[t]=ct);if(i&&i.length)for(n=0;n<i.length;n++){t=e=void 0,r=i[n];for(var s=0;s<r.length;s++){var o=r[s],a=ht(this,o);null!=a&&(t=o,e=a,mt(this,o,void 0))}t&&mt(this,t,e)}}var ct=Object.freeze(at([]));function ut(t){var e=t.l+t.j;t.h[e]||(t.i=t.h[e]={})}function ht(t,e){if(e<t.l){e+=t.j;var n=t.h[e];return n!==ct?n:t.h[e]=at([])}if(t.i)return(n=t.i[e])!==ct?n:t.i[e]=at([])}function dt(t){var e=ht(t,3);if(t.m||(t.m={}),!t.m[3]){for(var n=0;n<e.length;n++)e[n]=+e[n];t.m[3]=!0}return e}function pt(t,e,n){return null==(t=ht(t,e))?n:t}function _t(t,e,n){return n=void 0===n?0:n,null==(t=null==(t=ht(t,e))?t:+t)?n:t}function mt(t,e,n){e<t.l?t.h[e+t.j]=n:(ut(t),t.i[e]=n)}function ft(t,e,n){if(t.g||(t.g={}),!t.g[n]){var i=ht(t,n);i&&(t.g[n]=new e(i))}return t.g[n]}function gt(t,e){if(t.g||(t.g={}),!t.g[1]){for(var n=ht(t,1),i=[],r=0;r<n.length;r++)i[r]=new e(n[r]);t.g[1]=i}return t.g[1]}function vt(t,e,n){t.g||(t.g={});var i=n?xt(n,!1):n;t.g[e]=n,mt(t,e,i)}function yt(t,e,n,i){var r=gt(t,n);return e=e||new n,t=ht(t,1),null!=i?(r.splice(i,0,e),t.splice(i,0,xt(e,!1))):(r.push(e),t.push(xt(e,!1))),e}function xt(t,e){if(t.g)for(var n in t.g){var i=t.g[n];if(Array.isArray(i))for(var r=0;r<i.length;r++)i[r]&&xt(i[r],e);else i&&xt(i,e)}return t.h}function bt(t){return 4!=t.h&&(H(t),!0)}function wt(t){lt.call(this,t,-1,At)}function Tt(t,e){for(;V(e);)switch(e.i){case 8:var n=e.g.i();mt(t,1,n);break;case 16:mt(t,2,n=e.g.i());break;case 29:case 26:n=Y(e);for(var i=0;i<n.length;i++){var r=n[i];ht(t,3).push(r)}break;case 32:mt(t,4,n=k(e.g));break;default:if(!bt(e))return t}return t}lt.prototype.toJSON=function(){return function(t){return rt(t,(function(t){return\\\\\\\"number\\\\\\\"==typeof t?isFinite(t)?t:String(t):t}),(function(t){var e;void 0===e&&(e=0),Z(),e=$[e];for(var n=Array(Math.floor(t.length/3)),i=e[64]||\\\\\\\"\\\\\\\",r=0,s=0;r<t.length-2;r+=3){var o=t[r],a=t[r+1],l=t[r+2],c=e[o>>2];o=e[(3&o)<<4|a>>4],a=e[(15&a)<<2|l>>6],l=e[63&l],n[s++]=c+o+a+l}switch(c=0,l=i,t.length-r){case 2:l=e[(15&(c=t[r+1]))<<2]||i;case 1:t=t[r],n[s]=e[t>>2]+e[(3&t)<<4|c>>4]+l+i}return n.join(\\\\\\\"\\\\\\\")}))}(xt(this,!1))},lt.prototype.toString=function(){return xt(this,!1).toString()},_(wt,lt),wt.prototype.getRows=function(){return ht(this,1)},wt.prototype.getCols=function(){return ht(this,2)},wt.prototype.getPackedDataList=function(){return dt(this)},wt.prototype.getLayout=function(){return pt(this,4,0)};var At=[3];function Et(t,e){var n=void 0;return new(n||(n=Promise))((function(i,r){function s(t){try{a(e.next(t))}catch(t){r(t)}}function o(t){try{a(e.throw(t))}catch(t){r(t)}}function a(t){t.done?i(t.value):new n((function(e){e(t.value)})).then(s,o)}a((e=e.apply(t,void 0)).next())}))}function Mt(t){lt.call(this,t)}function St(t,e){for(;V(e);)switch(e.i){case 8:var n=e.g.i();mt(t,1,n);break;case 21:mt(t,2,n=W(e));break;case 26:mt(t,3,n=q(e));break;case 34:mt(t,4,n=q(e));break;default:if(!bt(e))return t}return t}function Ct(t){lt.call(this,t,-1,Nt)}_(Mt,lt),_(Ct,lt),Ct.prototype.addClassification=function(t,e){return yt(this,t,Mt,e)};var Nt=[1];function Lt(t){lt.call(this,t)}function Ot(t,e){for(;V(e);)switch(e.i){case 13:var n=W(e);mt(t,1,n);break;case 21:mt(t,2,n=W(e));break;case 29:mt(t,3,n=W(e));break;case 37:mt(t,4,n=W(e));break;case 45:mt(t,5,n=W(e));break;default:if(!bt(e))return t}return t}function Rt(t){lt.call(this,t,-1,It)}function Pt(t){t:{var e=new Rt;for(t=new G(t);V(t);)switch(t.i){case 10:var n=new Lt;j(t,n,Ot),yt(e,n,Lt,void 0);break;default:if(!bt(t))break t}}return e}_(Lt,lt),_(Rt,lt);var It=[1];function Ft(t){lt.call(this,t)}function Dt(t){lt.call(this,t,-1,Bt)}function kt(t,e){for(;V(e);)switch(e.i){case 8:var n=k(e.g);mt(t,1,n);break;case 16:mt(t,2,n=k(e.g));break;case 29:case 26:n=Y(e);for(var i=0;i<n.length;i++){var r=n[i];ht(t,3).push(r)}break;case 32:case 34:for(n=2==(n=e).h?X(n,F.prototype.i):[n.g.i()],i=0;i<n.length;i++)r=n[i],ht(t,4).push(r);break;default:if(!bt(e))return t}return t}_(Ft,lt),_(Dt,lt),Dt.prototype.getVertexType=function(){return pt(this,1,0)},Dt.prototype.getPrimitiveType=function(){return pt(this,2,0)},Dt.prototype.getVertexBufferList=function(){return dt(this)},Dt.prototype.getIndexBufferList=function(){return ht(this,4)};var Bt=[3,4];function zt(t){lt.call(this,t)}function Ut(t,e,n){if(n=t.createShader(0===n?t.VERTEX_SHADER:t.FRAGMENT_SHADER),t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error(\\\\\\\"Could not compile WebGL shader.\\\\n\\\\n\\\\\\\"+t.getShaderInfoLog(n));return n}function Gt(t){return gt(t,Mt).map((function(t){return{index:pt(t,1,0),W:_t(t,2),label:null!=ht(t,3)?pt(t,3,\\\\\\\"\\\\\\\"):void 0,displayName:null!=ht(t,4)?pt(t,4,\\\\\\\"\\\\\\\"):void 0}}))}function Vt(t){return{x:_t(t,1),y:_t(t,2),z:_t(t,3),visibility:null!=ht(t,4)?_t(t,4):void 0}}function Ht(t,e,n){this.h=t,this.g=e,this.u=n,this.l=0}function jt(t){return\\\\\\\"function\\\\\\\"==typeof t.g.canvas.transferToImageBitmap?Promise.resolve(t.g.canvas.transferToImageBitmap()):t.u?Promise.resolve(t.g.canvas):\\\\\\\"function\\\\\\\"==typeof createImageBitmap?createImageBitmap(t.g.canvas):(void 0===t.j&&(t.j=document.createElement(\\\\\\\"img\\\\\\\")),new Promise((function(e){t.j.onload=function(){requestAnimationFrame((function(){e(t.j)}))},t.j.src=t.g.canvas.toDataURL()})))}function Wt(t,e){var n=t.g;if(void 0===t.m){var i=Ut(n,\\\\\\\"\\\\n  attribute vec2 aVertex;\\\\n  attribute vec2 aTex;\\\\n  varying vec2 vTex;\\\\n  void main(void) {\\\\n    gl_Position = vec4(aVertex, 0.0, 1.0);\\\\n    vTex = aTex;\\\\n  }\\\\\\\",0),r=Ut(n,\\\\\\\"\\\\n  precision mediump float;\\\\n  varying vec2 vTex;\\\\n  uniform sampler2D sampler0;\\\\n  void main(){\\\\n    gl_FragColor = texture2D(sampler0, vTex);\\\\n  }\\\\\\\",1),s=n.createProgram();if(n.attachShader(s,i),n.attachShader(s,r),n.linkProgram(s),!n.getProgramParameter(s,n.LINK_STATUS))throw Error(\\\\\\\"Could not compile WebGL program.\\\\n\\\\n\\\\\\\"+n.getProgramInfoLog(s));i=t.m=s,n.useProgram(i),r=n.getUniformLocation(i,\\\\\\\"sampler0\\\\\\\"),t.i={H:n.getAttribLocation(i,\\\\\\\"aVertex\\\\\\\"),G:n.getAttribLocation(i,\\\\\\\"aTex\\\\\\\"),ba:r},t.s=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.enableVertexAttribArray(t.i.H),n.vertexAttribPointer(t.i.H,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([-1,-1,-1,1,1,1,1,-1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),t.o=n.createBuffer(),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.enableVertexAttribArray(t.i.G),n.vertexAttribPointer(t.i.G,2,n.FLOAT,!1,0,0),n.bufferData(n.ARRAY_BUFFER,new Float32Array([0,1,0,0,1,0,1,1]),n.STATIC_DRAW),n.bindBuffer(n.ARRAY_BUFFER,null),n.uniform1i(r,0)}i=t.i,n.useProgram(t.m),n.canvas.width=e.width,n.canvas.height=e.height,n.viewport(0,0,e.width,e.height),n.activeTexture(n.TEXTURE0),t.h.bindTexture2d(e.glName),n.enableVertexAttribArray(i.H),n.bindBuffer(n.ARRAY_BUFFER,t.s),n.vertexAttribPointer(i.H,2,n.FLOAT,!1,0,0),n.enableVertexAttribArray(i.G),n.bindBuffer(n.ARRAY_BUFFER,t.o),n.vertexAttribPointer(i.G,2,n.FLOAT,!1,0,0),n.bindFramebuffer(n.DRAW_FRAMEBUFFER?n.DRAW_FRAMEBUFFER:n.FRAMEBUFFER,null),n.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),n.colorMask(!0,!0,!0,!0),n.drawArrays(n.TRIANGLE_FAN,0,4),n.disableVertexAttribArray(i.H),n.disableVertexAttribArray(i.G),n.bindBuffer(n.ARRAY_BUFFER,null),t.h.bindTexture2d(0)}function qt(t){this.g=t}_(zt,lt),zt.prototype.getMesh=function(){return ft(this,Dt,1)},zt.prototype.getPoseTransformMatrix=function(){return ft(this,wt,2)};var Xt=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]);function Yt(t,e){return e+t}function $t(t,e){window[t]=e}function Jt(t){if(this.g=t,this.listeners={},this.j={},this.F={},this.m={},this.s={},this.C=this.o=this.O=!0,this.B=Promise.resolve(),this.N=\\\\\\\"\\\\\\\",this.A={},this.locateFile=t&&t.locateFile||Yt,\\\\\\\"object\\\\\\\"==typeof window)var e=window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf(\\\\\\\"/\\\\\\\"))+\\\\\\\"/\\\\\\\";else{if(\\\\\\\"undefined\\\\\\\"==typeof location)throw Error(\\\\\\\"solutions can only be loaded on a web page or in a web worker\\\\\\\");e=location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf(\\\\\\\"/\\\\\\\"))+\\\\\\\"/\\\\\\\"}if(this.P=e,t.options)for(var n=(e=a(Object.keys(t.options))).next();!n.done;n=e.next()){n=n.value;var i=t.options[n].default;void 0!==i&&(this.j[n]=\\\\\\\"function\\\\\\\"==typeof i?i():i)}}function Zt(t){return Et(t,(function t(){var e,n,i,r,s,o,a,c,u,h,d,p=this;return T(t,(function(t){switch(t.g){case 1:return e=p,p.O?(n=function(t,e){return void 0===t.g.files?[]:\\\\\\\"function\\\\\\\"==typeof t.g.files?t.g.files(e):t.g.files}(p,p.j),v(t,function(){return Et(this,(function t(){return T(t,(function(t){switch(t.g){case 1:return t.m=2,v(t,WebAssembly.instantiate(Xt),4);case 4:t.g=3,t.m=0;break;case 2:return t.m=0,t.j=null,t.return(!1);case 3:return t.return(!0)}}))}))}(),2)):t.return();case 2:if(i=t.h,\\\\\\\"object\\\\\\\"==typeof window)return $t(\\\\\\\"createMediapipeSolutionsWasm\\\\\\\",{locateFile:p.locateFile}),$t(\\\\\\\"createMediapipeSolutionsPackedAssets\\\\\\\",{locateFile:p.locateFile}),o=n.filter((function(t){return void 0!==t.data})),a=n.filter((function(t){return void 0===t.data})),c=Promise.all(o.map((function(t){var n=Qt(e,t.url);if(void 0!==t.path){var i=t.path;n=n.then((function(t){return e.overrideFile(i,t),Promise.resolve(t)}))}return n}))),u=Promise.all(a.map((function(t){return void 0===t.simd||t.simd&&i||!t.simd&&!i?function(t){var e=document.createElement(\\\\\\\"script\\\\\\\");return e.setAttribute(\\\\\\\"src\\\\\\\",t),e.setAttribute(\\\\\\\"crossorigin\\\\\\\",\\\\\\\"anonymous\\\\\\\"),new Promise((function(t){e.addEventListener(\\\\\\\"load\\\\\\\",(function(){t()}),!1),e.addEventListener(\\\\\\\"error\\\\\\\",(function(){t()}),!1),document.body.appendChild(e)}))}(e.locateFile(t.url,e.P)):Promise.resolve()}))).then((function(){return Et(e,(function t(){var e,n,i=this;return T(t,(function(t){if(1==t.g)return e=window.createMediapipeSolutionsWasm,n=window.createMediapipeSolutionsPackedAssets,v(t,e(n),2);i.h=t.h,t.g=0}))}))})),h=Et(e,(function t(){var e=this;return T(t,(function(t){return e.g.graph&&e.g.graph.url?t=v(t,Qt(e,e.g.graph.url),0):(t.g=0,t=void 0),t}))})),v(t,Promise.all([u,c,h]),7);if(\\\\\\\"function\\\\\\\"!=typeof importScripts)throw Error(\\\\\\\"solutions can only be loaded on a web page or in a web worker\\\\\\\");return r=n.filter((function(t){return void 0===t.simd||t.simd&&i||!t.simd&&!i})).map((function(t){return e.locateFile(t.url,e.P)})),importScripts.apply(null,l(r)),v(t,createMediapipeSolutionsWasm(Module),6);case 6:p.h=t.h,p.l=new OffscreenCanvas(1,1),p.h.canvas=p.l,s=p.h.GL.createContext(p.l,{antialias:!1,alpha:!1,$:\\\\\\\"undefined\\\\\\\"!=typeof WebGL2RenderingContext?2:1}),p.h.GL.makeContextCurrent(s),t.g=4;break;case 7:if(p.l=document.createElement(\\\\\\\"canvas\\\\\\\"),!(d=p.l.getContext(\\\\\\\"webgl2\\\\\\\",{}))&&!(d=p.l.getContext(\\\\\\\"webgl\\\\\\\",{})))return alert(\\\\\\\"Failed to create WebGL canvas context when passing video frame.\\\\\\\"),t.return();p.D=d,p.h.canvas=p.l,p.h.createContext(p.l,!0,!0,{});case 4:p.i=new p.h.SolutionWasm,p.O=!1,t.g=0}}))}))}function Qt(t,e){return Et(t,(function t(){var n,i,r=this;return T(t,(function(t){return e in r.F?t.return(r.F[e]):(n=r.locateFile(e,\\\\\\\"\\\\\\\"),i=fetch(n).then((function(t){return t.arrayBuffer()})),r.F[e]=i,t.return(i))}))}))}function Kt(t,e,n){return Et(t,(function t(){var i,r,s,o,l,c,u,h,d,p,_,m,f,g,y=this;return T(t,(function(t){switch(t.g){case 1:if(!n)return t.return(e);for(i={},r=0,s=a(Object.keys(n)),o=s.next();!o.done;o=s.next())l=o.value,\\\\\\\"string\\\\\\\"!=typeof(c=n[l])&&\\\\\\\"texture\\\\\\\"===c.type&&++r;1<r&&(y.C=!1),u=a(Object.keys(n)),o=u.next();case 2:if(o.done){t.g=4;break}if(h=o.value,\\\\\\\"string\\\\\\\"==typeof(d=n[h]))return f=i,g=h,v(t,function(t,e,n){return Et(t,(function t(){var i,r=this;return T(t,(function(t){if(\\\\\\\"number\\\\\\\"==typeof n||n instanceof Uint8Array||n instanceof r.h.Uint8BlobList)return t.return(n);if(n instanceof r.h.Texture2dDataOut){(i=r.s[e])||(i=new Ht(r.h,r.D,r.C),r.s[e]=i);var s=t.return,o=i;return Wt(o,n),o=jt(o),s.call(t,o)}return t.return(void 0)}))}))}(y,h,e[d]),13);if(p=e[d.stream],\\\\\\\"detection_list\\\\\\\"===d.type){if(p){for(var x=p.getRectList(),b=p.getLandmarksList(),w=p.getClassificationsList(),A=[],E=0;E<x.size();++E){var M=x.get(E);t:{var S=new Ft;for(M=new G(M);V(M);)switch(M.i){case 13:var C=W(M);mt(S,1,C);break;case 21:mt(S,2,C=W(M));break;case 29:mt(S,3,C=W(M));break;case 37:mt(S,4,C=W(M));break;case 45:mt(S,5,C=W(M));break;case 48:mt(S,6,C=k(M.g));break;default:if(!bt(M))break t}}S={X:_t(S,1),Y:_t(S,2),height:_t(S,3),width:_t(S,4),rotation:_t(S,5,0),V:pt(S,6,0)},M=gt(Pt(b.get(E)),Lt).map(Vt);var N=w.get(E);t:for(C=new Ct,N=new G(N);V(N);)switch(N.i){case 10:var L=new Mt;j(N,L,St),C.addClassification(L);break;default:if(!bt(N))break t}S={R:S,M:M,L:Gt(C)},A.push(S)}x=A}else x=[];i[h]=x,t.g=7;break}if(\\\\\\\"proto_list\\\\\\\"===d.type){if(p){for(x=Array(p.size()),b=0;b<p.size();b++)x[b]=p.get(b);p.delete()}else x=[];i[h]=x,t.g=7;break}if(void 0===p){t.g=3;break}if(\\\\\\\"proto\\\\\\\"===d.type){i[h]=p,t.g=7;break}if(\\\\\\\"texture\\\\\\\"!==d.type)throw Error(\\\\\\\"Unknown output config type: '\\\\\\\"+d.type+\\\\\\\"'\\\\\\\");return(_=y.s[h])||(_=new Ht(y.h,y.D,y.C),y.s[h]=_),Wt(x=_,p),v(t,x=jt(x),12);case 12:m=t.h,i[h]=m;case 7:d.transform&&i[h]&&(i[h]=d.transform(i[h])),t.g=3;break;case 13:f[g]=t.h;case 3:o=u.next(),t.g=2;break;case 4:return t.return(i)}}))}))}function te(t,e){for(var n=e.name||\\\\\\\"$\\\\\\\",i=[].concat(l(e.wants)),r=new t.h.StringList,s=a(e.wants),o=s.next();!o.done;o=s.next())r.push_back(o.value);s=t.h.PacketListener.implement({onResults:function(r){for(var s={},o=0;o<e.wants.length;++o)s[i[o]]=r.get(o);var a=t.listeners[n];a&&(t.B=Kt(t,s,e.outs).then((function(n){n=a(n);for(var r=0;r<e.wants.length;++r){var o=s[i[r]];\\\\\\\"object\\\\\\\"==typeof o&&o.hasOwnProperty&&o.hasOwnProperty(\\\\\\\"delete\\\\\\\")&&o.delete()}n&&(t.B=n)})))}}),t.i.attachMultiListener(r,s),r.delete()}function ee(t){var e=(t=function(t){t:{var e=new zt;for(t=new G(t);V(t);)switch(t.i){case 10:var n=new Dt;j(t,n,kt),vt(e,1,n);break;case 18:j(t,n=new wt,Tt),vt(e,2,n);break;default:if(!bt(t))break t}}return e}(t)).getMesh();if(!e)return t;var n=new Float32Array(e.getVertexBufferList());e.getVertexBufferList=function(){return n};var i=new Uint32Array(e.getIndexBufferList());return e.getIndexBufferList=function(){return i},t}(e=Jt.prototype).close=function(){return this.i&&this.i.delete(),Promise.resolve()},e.reset=function(){return Et(this,(function t(){var e=this;return T(t,(function(t){e.i&&(e.i.reset(),e.m={},e.s={}),t.g=0}))}))},e.setOptions=function(t,e){var n=this;if(e=e||this.g.options){for(var i=[],r=[],s={},o=a(Object.keys(t)),l=o.next();!l.done;s={J:s.J,K:s.K},l=o.next()){var c=l.value;c in this.j&&this.j[c]===t[c]||(this.j[c]=t[c],void 0!==(l=e[c])&&(l.onChange&&(s.J=l.onChange,s.K=t[c],i.push(function(t){return function(){return Et(n,(function e(){var n=this;return T(e,(function(e){if(1==e.g)return v(e,t.J(t.K),2);!0===e.h&&(n.o=!0),e.g=0}))}))}}(s))),l.graphOptionXref&&(c={valueNumber:1===l.type?t[c]:0,valueBoolean:0===l.type&&t[c],valueString:2===l.type?t[c]:\\\\\\\"\\\\\\\"},l=Object.assign(Object.assign(Object.assign({},{calculatorName:\\\\\\\"\\\\\\\",calculatorIndex:0}),l.graphOptionXref),c),r.push(l))))}0===i.length&&0===r.length||(this.o=!0,this.u=(void 0===this.u?[]:this.u).concat(r),this.v=(void 0===this.v?[]:this.v).concat(i))}},e.initialize=function(){return Et(this,(function t(){var e=this;return T(t,(function(t){return 1==t.g?v(t,Zt(e),2):3!=t.g?v(t,Et(e,(function t(){var e,n,i,r,s,o,l,c,u=this;return T(t,(function(t){if(1==t.g)return u.g.graph&&u.g.graph.url&&u.N===u.g.graph.url?t.return():(u.o=!0,u.g.graph&&u.g.graph.url?(u.N=u.g.graph.url,v(t,Qt(u,u.g.graph.url),3)):void(t.g=2));for(2!=t.g&&(e=t.h,u.i.loadGraph(e)),n=a(Object.keys(u.A)),i=n.next();!i.done;i=n.next())r=i.value,u.i.overrideFile(r,u.A[r]);if(u.A={},u.g.listeners)for(s=a(u.g.listeners),o=s.next();!o.done;o=s.next())l=o.value,te(u,l);c=u.j,u.j={},u.setOptions(c),t.g=0}))})),3):v(t,function(t){return Et(t,(function t(){var e,n,i,r,s,o,l=this;return T(t,(function(t){switch(t.g){case 1:if(!l.o)return t.return();if(!l.v){t.g=2;break}e=a(l.v),n=e.next();case 3:if(n.done){t.g=5;break}return v(t,(0,n.value)(),4);case 4:n=e.next(),t.g=3;break;case 5:l.v=void 0;case 2:if(l.u){for(i=new l.h.GraphOptionChangeRequestList,r=a(l.u),s=r.next();!s.done;s=r.next())o=s.value,i.push_back(o);l.i.changeOptions(i),i.delete(),l.u=void 0}l.o=!1,t.g=0}}))}))}(e),0)}))}))},e.overrideFile=function(t,e){this.i?this.i.overrideFile(t,e):this.A[t]=e},e.clearOverriddenFiles=function(){this.A={},this.i&&this.i.clearOverriddenFiles()},e.send=function(t,e){return Et(this,(function n(){var i,r,s,o,l,c,u,h,d,p=this;return T(n,(function(n){switch(n.g){case 1:return p.g.inputs?(i=1e3*(null==e?performance.now():e),v(n,p.B,2)):n.return();case 2:return v(n,p.initialize(),3);case 3:for(r=new p.h.PacketDataList,s=a(Object.keys(t)),o=s.next();!o.done;o=s.next())if(l=o.value,c=p.g.inputs[l]){t:{var _=p,m=t[l];switch(c.type){case\\\\\\\"video\\\\\\\":var f=_.m[c.stream];if(f||(f=new Ht(_.h,_.D,_.C),_.m[c.stream]=f),0===(_=f).l&&(_.l=_.h.createTexture()),\\\\\\\"undefined\\\\\\\"!=typeof HTMLVideoElement&&m instanceof HTMLVideoElement){var g=m.videoWidth;f=m.videoHeight}else\\\\\\\"undefined\\\\\\\"!=typeof HTMLImageElement&&m instanceof HTMLImageElement?(g=m.naturalWidth,f=m.naturalHeight):(g=m.width,f=m.height);f={glName:_.l,width:g,height:f},(g=_.g).canvas.width=f.width,g.canvas.height=f.height,g.activeTexture(g.TEXTURE0),_.h.bindTexture2d(_.l),g.texImage2D(g.TEXTURE_2D,0,g.RGBA,g.RGBA,g.UNSIGNED_BYTE,m),_.h.bindTexture2d(0),_=f;break t;case\\\\\\\"detections\\\\\\\":for((f=_.m[c.stream])||(f=new qt(_.h),_.m[c.stream]=f),(_=f).data||(_.data=new _.g.DetectionListData),_.data.reset(m.length),f=0;f<m.length;++f){g=m[f];var y=_.data,x=y.setBoundingBox,b=f,w=g.R,T=new Ft;mt(T,1,w.X),mt(T,2,w.Y),mt(T,3,w.height),mt(T,4,w.width),mt(T,5,w.rotation),mt(T,6,w.V);var A=T;T=w=new Q;var E=ht(A,1);if(null!=E&&tt(T,1,E),null!=(E=ht(A,2))&&tt(T,2,E),null!=(E=ht(A,3))&&tt(T,3,E),null!=(E=ht(A,4))&&tt(T,4,E),null!=(E=ht(A,5))&&tt(T,5,E),null!=(E=ht(A,6))&&null!=E&&null!=E){U(T.g,48),T=T.g;var M=E;for(E=0>M,A=(M=Math.abs(M))>>>0,M=Math.floor((M-A)/4294967296),M>>>=0,E&&(M=~M>>>0,4294967295<(A=1+(~A>>>0))&&(A=0,4294967295<++M&&(M=0))),E=I=A,A=M;0<A||127<E;)T.push(127&E|128),E=(E>>>7|A<<25)>>>0,A>>>=7;T.push(E)}if(w=K(w),x.call(y,b,w),g.M)for(y=0;y<g.M.length;++y)E=!!(T=g.M[y]).visibility,b=(x=_.data).addNormalizedLandmark,w=f,T=Object.assign(Object.assign({},T),{visibility:E?T.visibility:0}),mt(E=new Lt,1,T.x),mt(E,2,T.y),mt(E,3,T.z),T.visibility&&mt(E,4,T.visibility),M=T=new Q,null!=(E=ht(A=E,1))&&tt(M,1,E),null!=(E=ht(A,2))&&tt(M,2,E),null!=(E=ht(A,3))&&tt(M,3,E),null!=(E=ht(A,4))&&tt(M,4,E),null!=(E=ht(A,5))&&tt(M,5,E),T=K(T),b.call(x,w,T);if(g.L)for(y=0;y<g.L.length;++y){if(b=(x=_.data).addClassification,w=f,T=g.L[y],mt(E=new Mt,2,T.W),T.index&&mt(E,1,T.index),T.label&&mt(E,3,T.label),T.displayName&&mt(E,4,T.displayName),A=T=new Q,null!=(M=ht(E,1))&&null!=M){var S=M;if(null!=S)if(U(A.g,8),M=A.g,0<=S)U(M,S);else{for(var C=0;9>C;C++)M.push(127&S|128),S>>=7;M.push(1)}}null!=(M=ht(E,2))&&tt(A,2,M),null!=(M=ht(E,3))&&null!=M&&et(A,3,R(M)),null!=(M=ht(E,4))&&null!=M&&et(A,4,R(M)),T=K(T),b.call(x,w,T)}}_=_.data;break t;default:_={}}}switch(u=_,h=c.stream,c.type){case\\\\\\\"video\\\\\\\":r.pushTexture2d(Object.assign(Object.assign({},u),{stream:h,timestamp:i}));break;case\\\\\\\"detections\\\\\\\":(d=u).stream=h,d.timestamp=i,r.pushDetectionList(d);break;default:throw Error(\\\\\\\"Unknown input config type: '\\\\\\\"+c.type+\\\\\\\"'\\\\\\\")}}return p.i.send(r),v(n,p.B,4);case 4:r.delete(),n.g=0}}))}))},e.onResults=function(t,e){this.listeners[e||\\\\\\\"$\\\\\\\"]=t},M(\\\\\\\"Solution\\\\\\\",Jt),M(\\\\\\\"OptionType\\\\\\\",{BOOL:0,NUMBER:1,Z:2,0:\\\\\\\"BOOL\\\\\\\",1:\\\\\\\"NUMBER\\\\\\\",2:\\\\\\\"STRING\\\\\\\"});var ne={files:[{url:\\\\\\\"face_mesh_solution_packed_assets_loader.js\\\\\\\"},{simd:!0,url:\\\\\\\"face_mesh_solution_simd_wasm_bin.js\\\\\\\"},{simd:!1,url:\\\\\\\"face_mesh_solution_wasm_bin.js\\\\\\\"}],graph:{url:\\\\\\\"face_mesh.binarypb\\\\\\\"},listeners:[{wants:[\\\\\\\"multi_face_geometry\\\\\\\",\\\\\\\"image_transformed\\\\\\\",\\\\\\\"multi_face_landmarks\\\\\\\"],outs:{image:\\\\\\\"image_transformed\\\\\\\",multiFaceGeometry:{type:\\\\\\\"proto_list\\\\\\\",stream:\\\\\\\"multi_face_geometry\\\\\\\",transform:function(t){return t.map(ee)}},multiFaceLandmarks:{type:\\\\\\\"proto_list\\\\\\\",stream:\\\\\\\"multi_face_landmarks\\\\\\\",transform:function(t){return t.map((function(t){return gt(Pt(t),Lt).map(Vt)}))}}}}],inputs:{image:{type:\\\\\\\"video\\\\\\\",stream:\\\\\\\"input_frames_gpu\\\\\\\"}},options:{useCpuInference:{type:0,graphOptionXref:{calculatorType:\\\\\\\"InferenceCalculator\\\\\\\",fieldName:\\\\\\\"use_cpu_inference\\\\\\\"},default:\\\\\\\"iPad Simulator;iPhone Simulator;iPod Simulator;iPad;iPhone;iPod\\\\\\\".split(\\\\\\\";\\\\\\\").includes(navigator.platform)||navigator.userAgent.includes(\\\\\\\"Mac\\\\\\\")&&\\\\\\\"ontouchend\\\\\\\"in document},enableFaceGeometry:{type:0,graphOptionXref:{calculatorName:\\\\\\\"EnableFaceGeometryConstant\\\\\\\",calculatorType:\\\\\\\"ConstantSidePacketCalculator\\\\\\\",fieldName:\\\\\\\"bool_value\\\\\\\"}},selfieMode:{type:0,graphOptionXref:{calculatorType:\\\\\\\"GlScalerCalculator\\\\\\\",calculatorIndex:1,fieldName:\\\\\\\"flip_horizontal\\\\\\\"}},maxNumFaces:{type:1,graphOptionXref:{calculatorType:\\\\\\\"ConstantSidePacketCalculator\\\\\\\",calculatorName:\\\\\\\"ConstantSidePacketCalculator\\\\\\\",fieldName:\\\\\\\"int_value\\\\\\\"}},minDetectionConfidence:{type:1,graphOptionXref:{calculatorType:\\\\\\\"TensorsToDetectionsCalculator\\\\\\\",calculatorName:\\\\\\\"facelandmarkfrontgpu__facedetectionshortrangegpu__facedetectionshortrangecommon__TensorsToDetectionsCalculator\\\\\\\",fieldName:\\\\\\\"min_score_thresh\\\\\\\"}},minTrackingConfidence:{type:1,graphOptionXref:{calculatorType:\\\\\\\"ThresholdingCalculator\\\\\\\",calculatorName:\\\\\\\"facelandmarkfrontgpu__facelandmarkgpu__ThresholdingCalculator\\\\\\\",fieldName:\\\\\\\"threshold\\\\\\\"}},cameraNear:{type:1,graphOptionXref:{calculatorType:\\\\\\\"FaceGeometryEnvGeneratorCalculator\\\\\\\",fieldName:\\\\\\\"near\\\\\\\"}},cameraFar:{type:1,graphOptionXref:{calculatorType:\\\\\\\"FaceGeometryEnvGeneratorCalculator\\\\\\\",fieldName:\\\\\\\"far\\\\\\\"}},cameraVerticalFovDegrees:{type:1,graphOptionXref:{calculatorType:\\\\\\\"FaceGeometryEnvGeneratorCalculator\\\\\\\",fieldName:\\\\\\\"vertical_fov_degrees\\\\\\\"}}}},ie=[[61,146],[146,91],[91,181],[181,84],[84,17],[17,314],[314,405],[405,321],[321,375],[375,291],[61,185],[185,40],[40,39],[39,37],[37,0],[0,267],[267,269],[269,270],[270,409],[409,291],[78,95],[95,88],[88,178],[178,87],[87,14],[14,317],[317,402],[402,318],[318,324],[324,308],[78,191],[191,80],[80,81],[81,82],[82,13],[13,312],[312,311],[311,310],[310,415],[415,308]],re=[[263,249],[249,390],[390,373],[373,374],[374,380],[380,381],[381,382],[382,362],[263,466],[466,388],[388,387],[387,386],[386,385],[385,384],[384,398],[398,362]],se=[[276,283],[283,282],[282,295],[295,285],[300,293],[293,334],[334,296],[296,336]],oe=[[33,7],[7,163],[163,144],[144,145],[145,153],[153,154],[154,155],[155,133],[33,246],[246,161],[161,160],[160,159],[159,158],[158,157],[157,173],[173,133]],ae=[[46,53],[53,52],[52,65],[65,55],[70,63],[63,105],[105,66],[66,107]],le=[[10,338],[338,297],[297,332],[332,284],[284,251],[251,389],[389,356],[356,454],[454,323],[323,361],[361,288],[288,397],[397,365],[365,379],[379,378],[378,400],[400,377],[377,152],[152,148],[148,176],[176,149],[149,150],[150,136],[136,172],[172,58],[58,132],[132,93],[93,234],[234,127],[127,162],[162,21],[21,54],[54,103],[103,67],[67,109],[109,10]],ce=[].concat(l(ie),l(re),l(se),l(oe),l(ae),l(le));function ue(t){t=t||{},t=Object.assign(Object.assign({},ne),t),this.g=new Jt(t)}(e=ue.prototype).close=function(){return this.g.close(),Promise.resolve()},e.onResults=function(t){this.g.onResults(t)},e.initialize=function(){return Et(this,(function t(){var e=this;return T(t,(function(t){return v(t,e.g.initialize(),0)}))}))},e.reset=function(){this.g.reset()},e.send=function(t){return Et(this,(function e(){var n=this;return T(e,(function(e){return v(e,n.g.send(t),0)}))}))},e.setOptions=function(t){this.g.setOptions(t)},M(\\\\\\\"FACE_GEOMETRY\\\\\\\",{Layout:{COLUMN_MAJOR:0,ROW_MAJOR:1,0:\\\\\\\"COLUMN_MAJOR\\\\\\\",1:\\\\\\\"ROW_MAJOR\\\\\\\"},PrimitiveType:{TRIANGLE:0,0:\\\\\\\"TRIANGLE\\\\\\\"},VertexType:{VERTEX_PT:0,0:\\\\\\\"VERTEX_PT\\\\\\\"},DEFAULT_CAMERA_PARAMS:{verticalFovDegrees:63,near:1,far:1e4}}),M(\\\\\\\"FaceMesh\\\\\\\",ue),M(\\\\\\\"FACEMESH_LIPS\\\\\\\",ie),M(\\\\\\\"FACEMESH_LEFT_EYE\\\\\\\",re),M(\\\\\\\"FACEMESH_LEFT_EYEBROW\\\\\\\",se),M(\\\\\\\"FACEMESH_RIGHT_EYE\\\\\\\",oe),M(\\\\\\\"FACEMESH_RIGHT_EYEBROW\\\\\\\",ae),M(\\\\\\\"FACEMESH_FACE_OVAL\\\\\\\",le),M(\\\\\\\"FACEMESH_CONTOURS\\\\\\\",ce),M(\\\\\\\"FACEMESH_TESSELATION\\\\\\\",[[127,34],[34,139],[139,127],[11,0],[0,37],[37,11],[232,231],[231,120],[120,232],[72,37],[37,39],[39,72],[128,121],[121,47],[47,128],[232,121],[121,128],[128,232],[104,69],[69,67],[67,104],[175,171],[171,148],[148,175],[118,50],[50,101],[101,118],[73,39],[39,40],[40,73],[9,151],[151,108],[108,9],[48,115],[115,131],[131,48],[194,204],[204,211],[211,194],[74,40],[40,185],[185,74],[80,42],[42,183],[183,80],[40,92],[92,186],[186,40],[230,229],[229,118],[118,230],[202,212],[212,214],[214,202],[83,18],[18,17],[17,83],[76,61],[61,146],[146,76],[160,29],[29,30],[30,160],[56,157],[157,173],[173,56],[106,204],[204,194],[194,106],[135,214],[214,192],[192,135],[203,165],[165,98],[98,203],[21,71],[71,68],[68,21],[51,45],[45,4],[4,51],[144,24],[24,23],[23,144],[77,146],[146,91],[91,77],[205,50],[50,187],[187,205],[201,200],[200,18],[18,201],[91,106],[106,182],[182,91],[90,91],[91,181],[181,90],[85,84],[84,17],[17,85],[206,203],[203,36],[36,206],[148,171],[171,140],[140,148],[92,40],[40,39],[39,92],[193,189],[189,244],[244,193],[159,158],[158,28],[28,159],[247,246],[246,161],[161,247],[236,3],[3,196],[196,236],[54,68],[68,104],[104,54],[193,168],[168,8],[8,193],[117,228],[228,31],[31,117],[189,193],[193,55],[55,189],[98,97],[97,99],[99,98],[126,47],[47,100],[100,126],[166,79],[79,218],[218,166],[155,154],[154,26],[26,155],[209,49],[49,131],[131,209],[135,136],[136,150],[150,135],[47,126],[126,217],[217,47],[223,52],[52,53],[53,223],[45,51],[51,134],[134,45],[211,170],[170,140],[140,211],[67,69],[69,108],[108,67],[43,106],[106,91],[91,43],[230,119],[119,120],[120,230],[226,130],[130,247],[247,226],[63,53],[53,52],[52,63],[238,20],[20,242],[242,238],[46,70],[70,156],[156,46],[78,62],[62,96],[96,78],[46,53],[53,63],[63,46],[143,34],[34,227],[227,143],[123,117],[117,111],[111,123],[44,125],[125,19],[19,44],[236,134],[134,51],[51,236],[216,206],[206,205],[205,216],[154,153],[153,22],[22,154],[39,37],[37,167],[167,39],[200,201],[201,208],[208,200],[36,142],[142,100],[100,36],[57,212],[212,202],[202,57],[20,60],[60,99],[99,20],[28,158],[158,157],[157,28],[35,226],[226,113],[113,35],[160,159],[159,27],[27,160],[204,202],[202,210],[210,204],[113,225],[225,46],[46,113],[43,202],[202,204],[204,43],[62,76],[76,77],[77,62],[137,123],[123,116],[116,137],[41,38],[38,72],[72,41],[203,129],[129,142],[142,203],[64,98],[98,240],[240,64],[49,102],[102,64],[64,49],[41,73],[73,74],[74,41],[212,216],[216,207],[207,212],[42,74],[74,184],[184,42],[169,170],[170,211],[211,169],[170,149],[149,176],[176,170],[105,66],[66,69],[69,105],[122,6],[6,168],[168,122],[123,147],[147,187],[187,123],[96,77],[77,90],[90,96],[65,55],[55,107],[107,65],[89,90],[90,180],[180,89],[101,100],[100,120],[120,101],[63,105],[105,104],[104,63],[93,137],[137,227],[227,93],[15,86],[86,85],[85,15],[129,102],[102,49],[49,129],[14,87],[87,86],[86,14],[55,8],[8,9],[9,55],[100,47],[47,121],[121,100],[145,23],[23,22],[22,145],[88,89],[89,179],[179,88],[6,122],[122,196],[196,6],[88,95],[95,96],[96,88],[138,172],[172,136],[136,138],[215,58],[58,172],[172,215],[115,48],[48,219],[219,115],[42,80],[80,81],[81,42],[195,3],[3,51],[51,195],[43,146],[146,61],[61,43],[171,175],[175,199],[199,171],[81,82],[82,38],[38,81],[53,46],[46,225],[225,53],[144,163],[163,110],[110,144],[52,65],[65,66],[66,52],[229,228],[228,117],[117,229],[34,127],[127,234],[234,34],[107,108],[108,69],[69,107],[109,108],[108,151],[151,109],[48,64],[64,235],[235,48],[62,78],[78,191],[191,62],[129,209],[209,126],[126,129],[111,35],[35,143],[143,111],[117,123],[123,50],[50,117],[222,65],[65,52],[52,222],[19,125],[125,141],[141,19],[221,55],[55,65],[65,221],[3,195],[195,197],[197,3],[25,7],[7,33],[33,25],[220,237],[237,44],[44,220],[70,71],[71,139],[139,70],[122,193],[193,245],[245,122],[247,130],[130,33],[33,247],[71,21],[21,162],[162,71],[170,169],[169,150],[150,170],[188,174],[174,196],[196,188],[216,186],[186,92],[92,216],[2,97],[97,167],[167,2],[141,125],[125,241],[241,141],[164,167],[167,37],[37,164],[72,38],[38,12],[12,72],[38,82],[82,13],[13,38],[63,68],[68,71],[71,63],[226,35],[35,111],[111,226],[101,50],[50,205],[205,101],[206,92],[92,165],[165,206],[209,198],[198,217],[217,209],[165,167],[167,97],[97,165],[220,115],[115,218],[218,220],[133,112],[112,243],[243,133],[239,238],[238,241],[241,239],[214,135],[135,169],[169,214],[190,173],[173,133],[133,190],[171,208],[208,32],[32,171],[125,44],[44,237],[237,125],[86,87],[87,178],[178,86],[85,86],[86,179],[179,85],[84,85],[85,180],[180,84],[83,84],[84,181],[181,83],[201,83],[83,182],[182,201],[137,93],[93,132],[132,137],[76,62],[62,183],[183,76],[61,76],[76,184],[184,61],[57,61],[61,185],[185,57],[212,57],[57,186],[186,212],[214,207],[207,187],[187,214],[34,143],[143,156],[156,34],[79,239],[239,237],[237,79],[123,137],[137,177],[177,123],[44,1],[1,4],[4,44],[201,194],[194,32],[32,201],[64,102],[102,129],[129,64],[213,215],[215,138],[138,213],[59,166],[166,219],[219,59],[242,99],[99,97],[97,242],[2,94],[94,141],[141,2],[75,59],[59,235],[235,75],[24,110],[110,228],[228,24],[25,130],[130,226],[226,25],[23,24],[24,229],[229,23],[22,23],[23,230],[230,22],[26,22],[22,231],[231,26],[112,26],[26,232],[232,112],[189,190],[190,243],[243,189],[221,56],[56,190],[190,221],[28,56],[56,221],[221,28],[27,28],[28,222],[222,27],[29,27],[27,223],[223,29],[30,29],[29,224],[224,30],[247,30],[30,225],[225,247],[238,79],[79,20],[20,238],[166,59],[59,75],[75,166],[60,75],[75,240],[240,60],[147,177],[177,215],[215,147],[20,79],[79,166],[166,20],[187,147],[147,213],[213,187],[112,233],[233,244],[244,112],[233,128],[128,245],[245,233],[128,114],[114,188],[188,128],[114,217],[217,174],[174,114],[131,115],[115,220],[220,131],[217,198],[198,236],[236,217],[198,131],[131,134],[134,198],[177,132],[132,58],[58,177],[143,35],[35,124],[124,143],[110,163],[163,7],[7,110],[228,110],[110,25],[25,228],[356,389],[389,368],[368,356],[11,302],[302,267],[267,11],[452,350],[350,349],[349,452],[302,303],[303,269],[269,302],[357,343],[343,277],[277,357],[452,453],[453,357],[357,452],[333,332],[332,297],[297,333],[175,152],[152,377],[377,175],[347,348],[348,330],[330,347],[303,304],[304,270],[270,303],[9,336],[336,337],[337,9],[278,279],[279,360],[360,278],[418,262],[262,431],[431,418],[304,408],[408,409],[409,304],[310,415],[415,407],[407,310],[270,409],[409,410],[410,270],[450,348],[348,347],[347,450],[422,430],[430,434],[434,422],[313,314],[314,17],[17,313],[306,307],[307,375],[375,306],[387,388],[388,260],[260,387],[286,414],[414,398],[398,286],[335,406],[406,418],[418,335],[364,367],[367,416],[416,364],[423,358],[358,327],[327,423],[251,284],[284,298],[298,251],[281,5],[5,4],[4,281],[373,374],[374,253],[253,373],[307,320],[320,321],[321,307],[425,427],[427,411],[411,425],[421,313],[313,18],[18,421],[321,405],[405,406],[406,321],[320,404],[404,405],[405,320],[315,16],[16,17],[17,315],[426,425],[425,266],[266,426],[377,400],[400,369],[369,377],[322,391],[391,269],[269,322],[417,465],[465,464],[464,417],[386,257],[257,258],[258,386],[466,260],[260,388],[388,466],[456,399],[399,419],[419,456],[284,332],[332,333],[333,284],[417,285],[285,8],[8,417],[346,340],[340,261],[261,346],[413,441],[441,285],[285,413],[327,460],[460,328],[328,327],[355,371],[371,329],[329,355],[392,439],[439,438],[438,392],[382,341],[341,256],[256,382],[429,420],[420,360],[360,429],[364,394],[394,379],[379,364],[277,343],[343,437],[437,277],[443,444],[444,283],[283,443],[275,440],[440,363],[363,275],[431,262],[262,369],[369,431],[297,338],[338,337],[337,297],[273,375],[375,321],[321,273],[450,451],[451,349],[349,450],[446,342],[342,467],[467,446],[293,334],[334,282],[282,293],[458,461],[461,462],[462,458],[276,353],[353,383],[383,276],[308,324],[324,325],[325,308],[276,300],[300,293],[293,276],[372,345],[345,447],[447,372],[352,345],[345,340],[340,352],[274,1],[1,19],[19,274],[456,248],[248,281],[281,456],[436,427],[427,425],[425,436],[381,256],[256,252],[252,381],[269,391],[391,393],[393,269],[200,199],[199,428],[428,200],[266,330],[330,329],[329,266],[287,273],[273,422],[422,287],[250,462],[462,328],[328,250],[258,286],[286,384],[384,258],[265,353],[353,342],[342,265],[387,259],[259,257],[257,387],[424,431],[431,430],[430,424],[342,353],[353,276],[276,342],[273,335],[335,424],[424,273],[292,325],[325,307],[307,292],[366,447],[447,345],[345,366],[271,303],[303,302],[302,271],[423,266],[266,371],[371,423],[294,455],[455,460],[460,294],[279,278],[278,294],[294,279],[271,272],[272,304],[304,271],[432,434],[434,427],[427,432],[272,407],[407,408],[408,272],[394,430],[430,431],[431,394],[395,369],[369,400],[400,395],[334,333],[333,299],[299,334],[351,417],[417,168],[168,351],[352,280],[280,411],[411,352],[325,319],[319,320],[320,325],[295,296],[296,336],[336,295],[319,403],[403,404],[404,319],[330,348],[348,349],[349,330],[293,298],[298,333],[333,293],[323,454],[454,447],[447,323],[15,16],[16,315],[315,15],[358,429],[429,279],[279,358],[14,15],[15,316],[316,14],[285,336],[336,9],[9,285],[329,349],[349,350],[350,329],[374,380],[380,252],[252,374],[318,402],[402,403],[403,318],[6,197],[197,419],[419,6],[318,319],[319,325],[325,318],[367,364],[364,365],[365,367],[435,367],[367,397],[397,435],[344,438],[438,439],[439,344],[272,271],[271,311],[311,272],[195,5],[5,281],[281,195],[273,287],[287,291],[291,273],[396,428],[428,199],[199,396],[311,271],[271,268],[268,311],[283,444],[444,445],[445,283],[373,254],[254,339],[339,373],[282,334],[334,296],[296,282],[449,347],[347,346],[346,449],[264,447],[447,454],[454,264],[336,296],[296,299],[299,336],[338,10],[10,151],[151,338],[278,439],[439,455],[455,278],[292,407],[407,415],[415,292],[358,371],[371,355],[355,358],[340,345],[345,372],[372,340],[346,347],[347,280],[280,346],[442,443],[443,282],[282,442],[19,94],[94,370],[370,19],[441,442],[442,295],[295,441],[248,419],[419,197],[197,248],[263,255],[255,359],[359,263],[440,275],[275,274],[274,440],[300,383],[383,368],[368,300],[351,412],[412,465],[465,351],[263,467],[467,466],[466,263],[301,368],[368,389],[389,301],[395,378],[378,379],[379,395],[412,351],[351,419],[419,412],[436,426],[426,322],[322,436],[2,164],[164,393],[393,2],[370,462],[462,461],[461,370],[164,0],[0,267],[267,164],[302,11],[11,12],[12,302],[268,12],[12,13],[13,268],[293,300],[300,301],[301,293],[446,261],[261,340],[340,446],[330,266],[266,425],[425,330],[426,423],[423,391],[391,426],[429,355],[355,437],[437,429],[391,327],[327,326],[326,391],[440,457],[457,438],[438,440],[341,382],[382,362],[362,341],[459,457],[457,461],[461,459],[434,430],[430,394],[394,434],[414,463],[463,362],[362,414],[396,369],[369,262],[262,396],[354,461],[461,457],[457,354],[316,403],[403,402],[402,316],[315,404],[404,403],[403,315],[314,405],[405,404],[404,314],[313,406],[406,405],[405,313],[421,418],[418,406],[406,421],[366,401],[401,361],[361,366],[306,408],[408,407],[407,306],[291,409],[409,408],[408,291],[287,410],[410,409],[409,287],[432,436],[436,410],[410,432],[434,416],[416,411],[411,434],[264,368],[368,383],[383,264],[309,438],[438,457],[457,309],[352,376],[376,401],[401,352],[274,275],[275,4],[4,274],[421,428],[428,262],[262,421],[294,327],[327,358],[358,294],[433,416],[416,367],[367,433],[289,455],[455,439],[439,289],[462,370],[370,326],[326,462],[2,326],[326,370],[370,2],[305,460],[460,455],[455,305],[254,449],[449,448],[448,254],[255,261],[261,446],[446,255],[253,450],[450,449],[449,253],[252,451],[451,450],[450,252],[256,452],[452,451],[451,256],[341,453],[453,452],[452,341],[413,464],[464,463],[463,413],[441,413],[413,414],[414,441],[258,442],[442,441],[441,258],[257,443],[443,442],[442,257],[259,444],[444,443],[443,259],[260,445],[445,444],[444,260],[467,342],[342,445],[445,467],[459,458],[458,250],[250,459],[289,392],[392,290],[290,289],[290,328],[328,460],[460,290],[376,433],[433,435],[435,376],[250,290],[290,392],[392,250],[411,416],[416,433],[433,411],[341,463],[463,464],[464,341],[453,464],[464,465],[465,453],[357,465],[465,412],[412,357],[343,412],[412,399],[399,343],[360,363],[363,440],[440,360],[437,399],[399,456],[456,437],[420,456],[456,363],[363,420],[401,435],[435,288],[288,401],[372,383],[383,353],[353,372],[339,255],[255,249],[249,339],[448,261],[261,255],[255,448],[133,243],[243,190],[190,133],[133,155],[155,112],[112,133],[33,246],[246,247],[247,33],[33,130],[130,25],[25,33],[398,384],[384,286],[286,398],[362,398],[398,414],[414,362],[362,463],[463,341],[341,362],[263,359],[359,467],[467,263],[263,249],[249,255],[255,263],[466,467],[467,260],[260,466],[75,60],[60,166],[166,75],[238,239],[239,79],[79,238],[162,127],[127,139],[139,162],[72,11],[11,37],[37,72],[121,232],[232,120],[120,121],[73,72],[72,39],[39,73],[114,128],[128,47],[47,114],[233,232],[232,128],[128,233],[103,104],[104,67],[67,103],[152,175],[175,148],[148,152],[119,118],[118,101],[101,119],[74,73],[73,40],[40,74],[107,9],[9,108],[108,107],[49,48],[48,131],[131,49],[32,194],[194,211],[211,32],[184,74],[74,185],[185,184],[191,80],[80,183],[183,191],[185,40],[40,186],[186,185],[119,230],[230,118],[118,119],[210,202],[202,214],[214,210],[84,83],[83,17],[17,84],[77,76],[76,146],[146,77],[161,160],[160,30],[30,161],[190,56],[56,173],[173,190],[182,106],[106,194],[194,182],[138,135],[135,192],[192,138],[129,203],[203,98],[98,129],[54,21],[21,68],[68,54],[5,51],[51,4],[4,5],[145,144],[144,23],[23,145],[90,77],[77,91],[91,90],[207,205],[205,187],[187,207],[83,201],[201,18],[18,83],[181,91],[91,182],[182,181],[180,90],[90,181],[181,180],[16,85],[85,17],[17,16],[205,206],[206,36],[36,205],[176,148],[148,140],[140,176],[165,92],[92,39],[39,165],[245,193],[193,244],[244,245],[27,159],[159,28],[28,27],[30,247],[247,161],[161,30],[174,236],[236,196],[196,174],[103,54],[54,104],[104,103],[55,193],[193,8],[8,55],[111,117],[117,31],[31,111],[221,189],[189,55],[55,221],[240,98],[98,99],[99,240],[142,126],[126,100],[100,142],[219,166],[166,218],[218,219],[112,155],[155,26],[26,112],[198,209],[209,131],[131,198],[169,135],[135,150],[150,169],[114,47],[47,217],[217,114],[224,223],[223,53],[53,224],[220,45],[45,134],[134,220],[32,211],[211,140],[140,32],[109,67],[67,108],[108,109],[146,43],[43,91],[91,146],[231,230],[230,120],[120,231],[113,226],[226,247],[247,113],[105,63],[63,52],[52,105],[241,238],[238,242],[242,241],[124,46],[46,156],[156,124],[95,78],[78,96],[96,95],[70,46],[46,63],[63,70],[116,143],[143,227],[227,116],[116,123],[123,111],[111,116],[1,44],[44,19],[19,1],[3,236],[236,51],[51,3],[207,216],[216,205],[205,207],[26,154],[154,22],[22,26],[165,39],[39,167],[167,165],[199,200],[200,208],[208,199],[101,36],[36,100],[100,101],[43,57],[57,202],[202,43],[242,20],[20,99],[99,242],[56,28],[28,157],[157,56],[124,35],[35,113],[113,124],[29,160],[160,27],[27,29],[211,204],[204,210],[210,211],[124,113],[113,46],[46,124],[106,43],[43,204],[204,106],[96,62],[62,77],[77,96],[227,137],[137,116],[116,227],[73,41],[41,72],[72,73],[36,203],[203,142],[142,36],[235,64],[64,240],[240,235],[48,49],[49,64],[64,48],[42,41],[41,74],[74,42],[214,212],[212,207],[207,214],[183,42],[42,184],[184,183],[210,169],[169,211],[211,210],[140,170],[170,176],[176,140],[104,105],[105,69],[69,104],[193,122],[122,168],[168,193],[50,123],[123,187],[187,50],[89,96],[96,90],[90,89],[66,65],[65,107],[107,66],[179,89],[89,180],[180,179],[119,101],[101,120],[120,119],[68,63],[63,104],[104,68],[234,93],[93,227],[227,234],[16,15],[15,85],[85,16],[209,129],[129,49],[49,209],[15,14],[14,86],[86,15],[107,55],[55,9],[9,107],[120,100],[100,121],[121,120],[153,145],[145,22],[22,153],[178,88],[88,179],[179,178],[197,6],[6,196],[196,197],[89,88],[88,96],[96,89],[135,138],[138,136],[136,135],[138,215],[215,172],[172,138],[218,115],[115,219],[219,218],[41,42],[42,81],[81,41],[5,195],[195,51],[51,5],[57,43],[43,61],[61,57],[208,171],[171,199],[199,208],[41,81],[81,38],[38,41],[224,53],[53,225],[225,224],[24,144],[144,110],[110,24],[105,52],[52,66],[66,105],[118,229],[229,117],[117,118],[227,34],[34,234],[234,227],[66,107],[107,69],[69,66],[10,109],[109,151],[151,10],[219,48],[48,235],[235,219],[183,62],[62,191],[191,183],[142,129],[129,126],[126,142],[116,111],[111,143],[143,116],[118,117],[117,50],[50,118],[223,222],[222,52],[52,223],[94,19],[19,141],[141,94],[222,221],[221,65],[65,222],[196,3],[3,197],[197,196],[45,220],[220,44],[44,45],[156,70],[70,139],[139,156],[188,122],[122,245],[245,188],[139,71],[71,162],[162,139],[149,170],[170,150],[150,149],[122,188],[188,196],[196,122],[206,216],[216,92],[92,206],[164,2],[2,167],[167,164],[242,141],[141,241],[241,242],[0,164],[164,37],[37,0],[11,72],[72,12],[12,11],[12,38],[38,13],[13,12],[70,63],[63,71],[71,70],[31,226],[226,111],[111,31],[36,101],[101,205],[205,36],[203,206],[206,165],[165,203],[126,209],[209,217],[217,126],[98,165],[165,97],[97,98],[237,220],[220,218],[218,237],[237,239],[239,241],[241,237],[210,214],[214,169],[169,210],[140,171],[171,32],[32,140],[241,125],[125,237],[237,241],[179,86],[86,178],[178,179],[180,85],[85,179],[179,180],[181,84],[84,180],[180,181],[182,83],[83,181],[181,182],[194,201],[201,182],[182,194],[177,137],[137,132],[132,177],[184,76],[76,183],[183,184],[185,61],[61,184],[184,185],[186,57],[57,185],[185,186],[216,212],[212,186],[186,216],[192,214],[214,187],[187,192],[139,34],[34,156],[156,139],[218,79],[79,237],[237,218],[147,123],[123,177],[177,147],[45,44],[44,4],[4,45],[208,201],[201,32],[32,208],[98,64],[64,129],[129,98],[192,213],[213,138],[138,192],[235,59],[59,219],[219,235],[141,242],[242,97],[97,141],[97,2],[2,141],[141,97],[240,75],[75,235],[235,240],[229,24],[24,228],[228,229],[31,25],[25,226],[226,31],[230,23],[23,229],[229,230],[231,22],[22,230],[230,231],[232,26],[26,231],[231,232],[233,112],[112,232],[232,233],[244,189],[189,243],[243,244],[189,221],[221,190],[190,189],[222,28],[28,221],[221,222],[223,27],[27,222],[222,223],[224,29],[29,223],[223,224],[225,30],[30,224],[224,225],[113,247],[247,225],[225,113],[99,60],[60,240],[240,99],[213,147],[147,215],[215,213],[60,20],[20,166],[166,60],[192,187],[187,213],[213,192],[243,112],[112,244],[244,243],[244,233],[233,245],[245,244],[245,128],[128,188],[188,245],[188,114],[114,174],[174,188],[134,131],[131,220],[220,134],[174,217],[217,236],[236,174],[236,198],[198,134],[134,236],[215,177],[177,58],[58,215],[156,143],[143,124],[124,156],[25,110],[110,7],[7,25],[31,228],[228,25],[25,31],[264,356],[356,368],[368,264],[0,11],[11,267],[267,0],[451,452],[452,349],[349,451],[267,302],[302,269],[269,267],[350,357],[357,277],[277,350],[350,452],[452,357],[357,350],[299,333],[333,297],[297,299],[396,175],[175,377],[377,396],[280,347],[347,330],[330,280],[269,303],[303,270],[270,269],[151,9],[9,337],[337,151],[344,278],[278,360],[360,344],[424,418],[418,431],[431,424],[270,304],[304,409],[409,270],[272,310],[310,407],[407,272],[322,270],[270,410],[410,322],[449,450],[450,347],[347,449],[432,422],[422,434],[434,432],[18,313],[313,17],[17,18],[291,306],[306,375],[375,291],[259,387],[387,260],[260,259],[424,335],[335,418],[418,424],[434,364],[364,416],[416,434],[391,423],[423,327],[327,391],[301,251],[251,298],[298,301],[275,281],[281,4],[4,275],[254,373],[373,253],[253,254],[375,307],[307,321],[321,375],[280,425],[425,411],[411,280],[200,421],[421,18],[18,200],[335,321],[321,406],[406,335],[321,320],[320,405],[405,321],[314,315],[315,17],[17,314],[423,426],[426,266],[266,423],[396,377],[377,369],[369,396],[270,322],[322,269],[269,270],[413,417],[417,464],[464,413],[385,386],[386,258],[258,385],[248,456],[456,419],[419,248],[298,284],[284,333],[333,298],[168,417],[417,8],[8,168],[448,346],[346,261],[261,448],[417,413],[413,285],[285,417],[326,327],[327,328],[328,326],[277,355],[355,329],[329,277],[309,392],[392,438],[438,309],[381,382],[382,256],[256,381],[279,429],[429,360],[360,279],[365,364],[364,379],[379,365],[355,277],[277,437],[437,355],[282,443],[443,283],[283,282],[281,275],[275,363],[363,281],[395,431],[431,369],[369,395],[299,297],[297,337],[337,299],[335,273],[273,321],[321,335],[348,450],[450,349],[349,348],[359,446],[446,467],[467,359],[283,293],[293,282],[282,283],[250,458],[458,462],[462,250],[300,276],[276,383],[383,300],[292,308],[308,325],[325,292],[283,276],[276,293],[293,283],[264,372],[372,447],[447,264],[346,352],[352,340],[340,346],[354,274],[274,19],[19,354],[363,456],[456,281],[281,363],[426,436],[436,425],[425,426],[380,381],[381,252],[252,380],[267,269],[269,393],[393,267],[421,200],[200,428],[428,421],[371,266],[266,329],[329,371],[432,287],[287,422],[422,432],[290,250],[250,328],[328,290],[385,258],[258,384],[384,385],[446,265],[265,342],[342,446],[386,387],[387,257],[257,386],[422,424],[424,430],[430,422],[445,342],[342,276],[276,445],[422,273],[273,424],[424,422],[306,292],[292,307],[307,306],[352,366],[366,345],[345,352],[268,271],[271,302],[302,268],[358,423],[423,371],[371,358],[327,294],[294,460],[460,327],[331,279],[279,294],[294,331],[303,271],[271,304],[304,303],[436,432],[432,427],[427,436],[304,272],[272,408],[408,304],[395,394],[394,431],[431,395],[378,395],[395,400],[400,378],[296,334],[334,299],[299,296],[6,351],[351,168],[168,6],[376,352],[352,411],[411,376],[307,325],[325,320],[320,307],[285,295],[295,336],[336,285],[320,319],[319,404],[404,320],[329,330],[330,349],[349,329],[334,293],[293,333],[333,334],[366,323],[323,447],[447,366],[316,15],[15,315],[315,316],[331,358],[358,279],[279,331],[317,14],[14,316],[316,317],[8,285],[285,9],[9,8],[277,329],[329,350],[350,277],[253,374],[374,252],[252,253],[319,318],[318,403],[403,319],[351,6],[6,419],[419,351],[324,318],[318,325],[325,324],[397,367],[367,365],[365,397],[288,435],[435,397],[397,288],[278,344],[344,439],[439,278],[310,272],[272,311],[311,310],[248,195],[195,281],[281,248],[375,273],[273,291],[291,375],[175,396],[396,199],[199,175],[312,311],[311,268],[268,312],[276,283],[283,445],[445,276],[390,373],[373,339],[339,390],[295,282],[282,296],[296,295],[448,449],[449,346],[346,448],[356,264],[264,454],[454,356],[337,336],[336,299],[299,337],[337,338],[338,151],[151,337],[294,278],[278,455],[455,294],[308,292],[292,415],[415,308],[429,358],[358,355],[355,429],[265,340],[340,372],[372,265],[352,346],[346,280],[280,352],[295,442],[442,282],[282,295],[354,19],[19,370],[370,354],[285,441],[441,295],[295,285],[195,248],[248,197],[197,195],[457,440],[440,274],[274,457],[301,300],[300,368],[368,301],[417,351],[351,465],[465,417],[251,301],[301,389],[389,251],[394,395],[395,379],[379,394],[399,412],[412,419],[419,399],[410,436],[436,322],[322,410],[326,2],[2,393],[393,326],[354,370],[370,461],[461,354],[393,164],[164,267],[267,393],[268,302],[302,12],[12,268],[312,268],[268,13],[13,312],[298,293],[293,301],[301,298],[265,446],[446,340],[340,265],[280,330],[330,425],[425,280],[322,426],[426,391],[391,322],[420,429],[429,437],[437,420],[393,391],[391,326],[326,393],[344,440],[440,438],[438,344],[458,459],[459,461],[461,458],[364,434],[434,394],[394,364],[428,396],[396,262],[262,428],[274,354],[354,457],[457,274],[317,316],[316,402],[402,317],[316,315],[315,403],[403,316],[315,314],[314,404],[404,315],[314,313],[313,405],[405,314],[313,421],[421,406],[406,313],[323,366],[366,361],[361,323],[292,306],[306,407],[407,292],[306,291],[291,408],[408,306],[291,287],[287,409],[409,291],[287,432],[432,410],[410,287],[427,434],[434,411],[411,427],[372,264],[264,383],[383,372],[459,309],[309,457],[457,459],[366,352],[352,401],[401,366],[1,274],[274,4],[4,1],[418,421],[421,262],[262,418],[331,294],[294,358],[358,331],[435,433],[433,367],[367,435],[392,289],[289,439],[439,392],[328,462],[462,326],[326,328],[94,2],[2,370],[370,94],[289,305],[305,455],[455,289],[339,254],[254,448],[448,339],[359,255],[255,446],[446,359],[254,253],[253,449],[449,254],[253,252],[252,450],[450,253],[252,256],[256,451],[451,252],[256,341],[341,452],[452,256],[414,413],[413,463],[463,414],[286,441],[441,414],[414,286],[286,258],[258,441],[441,286],[258,257],[257,442],[442,258],[257,259],[259,443],[443,257],[259,260],[260,444],[444,259],[260,467],[467,445],[445,260],[309,459],[459,250],[250,309],[305,289],[289,290],[290,305],[305,290],[290,460],[460,305],[401,376],[376,435],[435,401],[309,250],[250,392],[392,309],[376,411],[411,433],[433,376],[453,341],[341,464],[464,453],[357,453],[453,465],[465,357],[343,357],[357,412],[412,343],[437,343],[343,399],[399,437],[344,360],[360,440],[440,344],[420,437],[437,456],[456,420],[360,420],[420,363],[363,360],[361,401],[401,288],[288,361],[265,372],[372,353],[353,265],[390,339],[339,249],[249,390],[339,448],[448,255],[255,339]]),M(\\\\\\\"matrixDataToMatrix\\\\\\\",(function(t){for(var e=t.getCols(),n=t.getRows(),i=t.getPackedDataList(),r=[],s=0;s<n;s++)r.push(Array(e));for(s=0;s<n;s++)for(var o=0;o<e;o++){var a=1===t.getLayout()?s*e+o:o*n+s;r[s][o]=i[a]}return r}))}).call(this)}).call(this,n(89))},function(t,e){var n;n=function(){return this}();try{n=n||new Function(\\\\\\\"return this\\\\\\\")()}catch(t){\\\\\\\"object\\\\\\\"==typeof window&&(n=window)}t.exports=n},function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&(\\\\\\\"object\\\\\\\"==e||\\\\\\\"function\\\\\\\"==e)}},function(t,e){t.exports=function(t){return null!=t&&\\\\\\\"object\\\\\\\"==typeof t}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return o}));var i=n(25),r=n(31),s=n(0);class o extends i.a{constructor(t=new s.a,e=new s.a,n=new s.a){super(),this.type=\\\\\\\"QuadraticBezierCurve3\\\\\\\",this.v0=t,this.v1=e,this.v2=n}getPoint(t,e=new s.a){const n=e,i=this.v0,o=this.v1,a=this.v2;return n.set(Object(r.c)(t,i.x,o.x,a.x),Object(r.c)(t,i.y,o.y,a.y),Object(r.c)(t,i.z,o.z,a.z)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}o.prototype.isQuadraticBezierCurve3=!0},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return i}));class i{static fadeOut(t){return new Promise((e=>{const n=setInterval((()=>{t.style.opacity||(t.style.opacity=\\\\\\\"1\\\\\\\");const i=parseFloat(t.style.opacity);i>0?t.style.opacity=\\\\\\\"\\\\\\\"+(i-.05):(e(),clearInterval(n))}),20)}))}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";n.d(e,\\\\\\\"a\\\\\\\",(function(){return r}));var i=n(41);class r extends i.a{constructor(t,e){super(t,e),this.type=\\\\\\\"LineLoop\\\\\\\"}}r.prototype.isLineLoop=!0},,function(t,e,n){!function(n){\\\\\\\"use strict\\\\\\\";var i=\\\\\\\"Compound\\\\\\\",r=\\\\\\\"MemberExpression\\\\\\\",s=\\\\\\\"Literal\\\\\\\",o=function(t,e){var n=new Error(t+\\\\\\\" at character \\\\\\\"+e);throw n.index=e,n.description=t,n},a=!0,l={\\\\\\\"-\\\\\\\":a,\\\\\\\"!\\\\\\\":a,\\\\\\\"~\\\\\\\":a,\\\\\\\"+\\\\\\\":a},c={\\\\\\\"||\\\\\\\":1,\\\\\\\"&&\\\\\\\":2,\\\\\\\"|\\\\\\\":3,\\\\\\\"^\\\\\\\":4,\\\\\\\"&\\\\\\\":5,\\\\\\\"==\\\\\\\":6,\\\\\\\"!=\\\\\\\":6,\\\\\\\"===\\\\\\\":6,\\\\\\\"!==\\\\\\\":6,\\\\\\\"<\\\\\\\":7,\\\\\\\">\\\\\\\":7,\\\\\\\"<=\\\\\\\":7,\\\\\\\">=\\\\\\\":7,\\\\\\\"<<\\\\\\\":8,\\\\\\\">>\\\\\\\":8,\\\\\\\">>>\\\\\\\":8,\\\\\\\"+\\\\\\\":9,\\\\\\\"-\\\\\\\":9,\\\\\\\"*\\\\\\\":10,\\\\\\\"/\\\\\\\":10,\\\\\\\"%\\\\\\\":10},u=function(t){var e,n=0;for(var i in t)(e=i.length)>n&&t.hasOwnProperty(i)&&(n=e);return n},h=u(l),d=u(c),p={true:!0,false:!1,null:null},_=function(t){return c[t]||0},m=function(t,e,n){return{type:\\\\\\\"||\\\\\\\"===t||\\\\\\\"&&\\\\\\\"===t?\\\\\\\"LogicalExpression\\\\\\\":\\\\\\\"BinaryExpression\\\\\\\",operator:t,left:e,right:n}},f=function(t){return t>=48&&t<=57},g=function(t){return 36===t||95===t||t>=65&&t<=90||t>=97&&t<=122||t>=128&&!c[String.fromCharCode(t)]},v=function(t){return 36===t||95===t||t>=65&&t<=90||t>=97&&t<=122||t>=48&&t<=57||t>=128&&!c[String.fromCharCode(t)]},y=function(t){for(var e,n,a=0,u=t.charAt,y=t.charCodeAt,x=function(e){return u.call(t,e)},b=function(e){return y.call(t,e)},w=t.length,T=function(){for(var t=b(a);32===t||9===t||10===t||13===t;)t=b(++a)},A=function(){var t,e,n=M();return T(),63!==b(a)?n:(a++,(t=A())||o(\\\\\\\"Expected expression\\\\\\\",a),T(),58===b(a)?(a++,(e=A())||o(\\\\\\\"Expected expression\\\\\\\",a),{type:\\\\\\\"ConditionalExpression\\\\\\\",test:n,consequent:t,alternate:e}):void o(\\\\\\\"Expected :\\\\\\\",a))},E=function(){T();for(var e=t.substr(a,d),n=e.length;n>0;){if(c.hasOwnProperty(e)&&(!g(b(a))||a+e.length<t.length&&!v(b(a+e.length))))return a+=n,e;e=e.substr(0,--n)}return!1},M=function(){var t,e,n,i,r,s,l,c,u;if(s=S(),!(e=E()))return s;for(r={value:e,prec:_(e)},(l=S())||o(\\\\\\\"Expected expression after \\\\\\\"+e,a),i=[s,r,l];(e=E())&&0!==(n=_(e));){for(r={value:e,prec:n},u=e;i.length>2&&n<=i[i.length-2].prec;)l=i.pop(),e=i.pop().value,s=i.pop(),t=m(e,s,l),i.push(t);(t=S())||o(\\\\\\\"Expected expression after \\\\\\\"+u,a),i.push(r,t)}for(t=i[c=i.length-1];c>1;)t=m(i[c-1].value,i[c-2],t),c-=2;return t},S=function(){var e,n,i;if(T(),e=b(a),f(e)||46===e)return C();if(39===e||34===e)return N();if(91===e)return I();for(i=(n=t.substr(a,h)).length;i>0;){if(l.hasOwnProperty(n)&&(!g(b(a))||a+n.length<t.length&&!v(b(a+n.length))))return a+=i,{type:\\\\\\\"UnaryExpression\\\\\\\",operator:n,argument:S(),prefix:!0};n=n.substr(0,--i)}return!(!g(e)&&40!==e)&&R()},C=function(){for(var t,e,n=\\\\\\\"\\\\\\\";f(b(a));)n+=x(a++);if(46===b(a))for(n+=x(a++);f(b(a));)n+=x(a++);if(\\\\\\\"e\\\\\\\"===(t=x(a))||\\\\\\\"E\\\\\\\"===t){for(n+=x(a++),\\\\\\\"+\\\\\\\"!==(t=x(a))&&\\\\\\\"-\\\\\\\"!==t||(n+=x(a++));f(b(a));)n+=x(a++);f(b(a-1))||o(\\\\\\\"Expected exponent (\\\\\\\"+n+x(a)+\\\\\\\")\\\\\\\",a)}return e=b(a),g(e)?o(\\\\\\\"Variable names cannot start with a number (\\\\\\\"+n+x(a)+\\\\\\\")\\\\\\\",a):46===e&&o(\\\\\\\"Unexpected period\\\\\\\",a),{type:s,value:parseFloat(n),raw:n}},N=function(){for(var t,e=\\\\\\\"\\\\\\\",n=x(a++),i=!1;a<w;){if((t=x(a++))===n){i=!0;break}if(\\\\\\\"\\\\\\\\\\\\\\\"===t)switch(t=x(a++)){case\\\\\\\"n\\\\\\\":e+=\\\\\\\"\\\\n\\\\\\\";break;case\\\\\\\"r\\\\\\\":e+=\\\\\\\"\\\\r\\\\\\\";break;case\\\\\\\"t\\\\\\\":e+=\\\\\\\"\\\\t\\\\\\\";break;case\\\\\\\"b\\\\\\\":e+=\\\\\\\"\\\\b\\\\\\\";break;case\\\\\\\"f\\\\\\\":e+=\\\\\\\"\\\\f\\\\\\\";break;case\\\\\\\"v\\\\\\\":e+=\\\\\\\"\\\\v\\\\\\\";break;default:e+=t}else e+=t}return i||o('Unclosed quote after \\\\\\\"'+e+'\\\\\\\"',a),{type:s,value:e,raw:n+e+n}},L=function(){var e,n=b(a),i=a;for(g(n)?a++:o(\\\\\\\"Unexpected \\\\\\\"+x(a),a);a<w&&(n=b(a),v(n));)a++;return e=t.slice(i,a),p.hasOwnProperty(e)?{type:s,value:p[e],raw:e}:\\\\\\\"this\\\\\\\"===e?{type:\\\\\\\"ThisExpression\\\\\\\"}:{type:\\\\\\\"Identifier\\\\\\\",name:e}},O=function(t){for(var e,n,r=[],s=!1,l=0;a<w;){if(T(),(e=b(a))===t){s=!0,a++,41===t&&l&&l>=r.length&&o(\\\\\\\"Unexpected token \\\\\\\"+String.fromCharCode(t),a);break}if(44===e){if(a++,++l!==r.length)if(41===t)o(\\\\\\\"Unexpected token ,\\\\\\\",a);else if(93===t)for(var c=r.length;c<l;c++)r.push(null)}else(n=A())&&n.type!==i||o(\\\\\\\"Expected comma\\\\\\\",a),r.push(n)}return s||o(\\\\\\\"Expected \\\\\\\"+String.fromCharCode(t),a),r},R=function(){var t,e;for(e=40===(t=b(a))?P():L(),T(),t=b(a);46===t||91===t||40===t;)a++,46===t?(T(),e={type:r,computed:!1,object:e,property:L()}):91===t?(e={type:r,computed:!0,object:e,property:A()},T(),93!==(t=b(a))&&o(\\\\\\\"Unclosed [\\\\\\\",a),a++):40===t&&(e={type:\\\\\\\"CallExpression\\\\\\\",arguments:O(41),callee:e}),T(),t=b(a);return e},P=function(){a++;var t=A();if(T(),41===b(a))return a++,t;o(\\\\\\\"Unclosed (\\\\\\\",a)},I=function(){return a++,{type:\\\\\\\"ArrayExpression\\\\\\\",elements:O(93)}},F=[];a<w;)59===(e=b(a))||44===e?a++:(n=A())?F.push(n):a<w&&o('Unexpected \\\\\\\"'+x(a)+'\\\\\\\"',a);return 1===F.length?F[0]:{type:i,body:F}};y.version=\\\\\\\"0.3.5\\\\\\\",y.toString=function(){return\\\\\\\"JavaScript Expression Parser (JSEP) v\\\\\\\"+y.version},y.addUnaryOp=function(t){return h=Math.max(t.length,h),l[t]=a,this},y.addBinaryOp=function(t,e){return d=Math.max(t.length,d),c[t]=e,this},y.addLiteral=function(t,e){return p[t]=e,this},y.removeUnaryOp=function(t){return delete l[t],t.length===h&&(h=u(l)),this},y.removeAllUnaryOps=function(){return l={},h=0,this},y.removeBinaryOp=function(t){return delete c[t],t.length===d&&(d=u(c)),this},y.removeAllBinaryOps=function(){return c={},d=0,this},y.removeLiteral=function(t){return delete p[t],this},y.removeAllLiterals=function(){return p={},this},t.exports?e=t.exports=y:e.parse=y}()},function(t,e,n){var i=n(139),r=n(140),s=n(141),o=n(142),a=n(143);function l(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var i=t[e];this.set(i[0],i[1])}}l.prototype.clear=i,l.prototype.delete=r,l.prototype.get=s,l.prototype.has=o,l.prototype.set=a,t.exports=l},function(t,e,n){var i=n(118);t.exports=function(t,e){for(var n=t.length;n--;)if(i(t[n][0],e))return n;return-1}},function(t,e,n){var i=n(104),r=n(150),s=n(151),o=i?i.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?\\\\\\\"[object Undefined]\\\\\\\":\\\\\\\"[object Null]\\\\\\\":o&&o in Object(t)?r(t):s(t)}},function(t,e,n){var i=n(84)(Object,\\\\\\\"create\\\\\\\");t.exports=i},function(t,e,n){var i=n(164);t.exports=function(t,e){var n=t.__data__;return i(e)?n[\\\\\\\"string\\\\\\\"==typeof e?\\\\\\\"string\\\\\\\":\\\\\\\"hash\\\\\\\"]:n.map}},function(t,e,n){var i=n(122),r=n(123);t.exports=function(t,e,n,s){var o=!n;n||(n={});for(var a=-1,l=e.length;++a<l;){var c=e[a],u=s?s(n[c],t[c],c,n,t):void 0;void 0===u&&(u=t[c]),o?r(n,c,u):i(n,c,u)}return n}},function(t,e,n){var i=n(84)(n(68),\\\\\\\"Map\\\\\\\");t.exports=i},function(t,e,n){var i=n(68).Symbol;t.exports=i},function(t,e,n){var i=n(124),r=n(178),s=n(128);t.exports=function(t){return s(t)?i(t):r(t)}},function(t,e){var n=Array.isArray;t.exports=n},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,\\\\\\\"loaded\\\\\\\",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,\\\\\\\"id\\\\\\\",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e){t.exports=function(t){return function(e){return t(e)}}},function(t,e,n){(function(t){var i=n(120),r=e&&!e.nodeType&&e,s=r&&\\\\\\\"object\\\\\\\"==typeof t&&t&&!t.nodeType&&t,o=s&&s.exports===r&&i.process,a=function(){try{var t=s&&s.require&&s.require(\\\\\\\"util\\\\\\\").types;return t||o&&o.binding&&o.binding(\\\\\\\"util\\\\\\\")}catch(t){}}();t.exports=a}).call(this,n(107)(t))},function(t,e){var n=Object.prototype;t.exports=function(t){var e=t&&t.constructor;return t===(\\\\\\\"function\\\\\\\"==typeof e&&e.prototype||n)}},function(t,e,n){var i=n(124),r=n(181),s=n(128);t.exports=function(t){return s(t)?i(t,!0):r(t)}},function(t,e,n){var i=n(186),r=n(129),s=Object.prototype.propertyIsEnumerable,o=Object.getOwnPropertySymbols,a=o?function(t){return null==t?[]:(t=Object(t),i(o(t),(function(e){return s.call(t,e)})))}:r;t.exports=a},function(t,e,n){var i=n(190),r=n(103),s=n(191),o=n(192),a=n(193),l=n(99),c=n(121),u=\\\\\\\"[object Map]\\\\\\\",h=\\\\\\\"[object Promise]\\\\\\\",d=\\\\\\\"[object Set]\\\\\\\",p=\\\\\\\"[object WeakMap]\\\\\\\",_=\\\\\\\"[object DataView]\\\\\\\",m=c(i),f=c(r),g=c(s),v=c(o),y=c(a),x=l;(i&&x(new i(new ArrayBuffer(1)))!=_||r&&x(new r)!=u||s&&x(s.resolve())!=h||o&&x(new o)!=d||a&&x(new a)!=p)&&(x=function(t){var e=l(t),n=\\\\\\\"[object Object]\\\\\\\"==e?t.constructor:void 0,i=n?c(n):\\\\\\\"\\\\\\\";if(i)switch(i){case m:return _;case f:return u;case g:return h;case v:return d;case y:return p}return e}),t.exports=x},function(t,e,n){var i=n(196);t.exports=function(t){var e=new t.constructor(t.byteLength);return new i(e).set(new i(t)),e}},function(t,e,n){\\\\\\\"use strict\\\\\\\";Object.defineProperty(e,\\\\\\\"__esModule\\\\\\\",{value:!0}),e.decompressFrames=e.decompressFrame=e.parseGIF=void 0;var i,r=(i=n(207))&&i.__esModule?i:{default:i},s=n(134),o=n(135),a=n(208),l=n(209);e.parseGIF=function(t){var e=new Uint8Array(t);return(0,s.parse)((0,o.buildStream)(e),r.default)};var c=function(t,e,n){if(t.image){var i=t.image,r=i.descriptor.width*i.descriptor.height,s=(0,l.lzw)(i.data.minCodeSize,i.data.blocks,r);i.descriptor.lct.interlaced&&(s=(0,a.deinterlace)(s,i.descriptor.width));var o={pixels:s,dims:{top:t.image.descriptor.top,left:t.image.descriptor.left,width:t.image.descriptor.width,height:t.image.descriptor.height}};return i.descriptor.lct&&i.descriptor.lct.exists?o.colorTable=i.lct:o.colorTable=e,t.gce&&(o.delay=10*(t.gce.delay||10),o.disposalType=t.gce.extras.disposal,t.gce.extras.transparentColorGiven&&(o.transparentIndex=t.gce.transparentColorIndex)),n&&(o.patch=function(t){for(var e=t.pixels.length,n=new Uint8ClampedArray(4*e),i=0;i<e;i++){var r=4*i,s=t.pixels[i],o=t.colorTable[s]||[0,0,0];n[r]=o[0],n[r+1]=o[1],n[r+2]=o[2],n[r+3]=s!==t.transparentIndex?255:0}return n}(o)),o}console.warn(\\\\\\\"gif frame does not have associated image.\\\\\\\")};e.decompressFrame=c;e.decompressFrames=function(t,e){return t.frames.filter((function(t){return t.image})).map((function(n){return c(n,t.gct,e)}))}},,function(t,e,n){var i=n(138),r=n(168),s=n(122),o=n(170),a=n(180),l=n(183),c=n(184),u=n(185),h=n(187),d=n(188),p=n(189),_=n(113),m=n(194),f=n(195),g=n(201),v=n(106),y=n(125),x=n(203),b=n(90),w=n(205),T=n(105),A=n(111),E=\\\\\\\"[object Arguments]\\\\\\\",M=\\\\\\\"[object Function]\\\\\\\",S=\\\\\\\"[object Object]\\\\\\\",C={};C[E]=C[\\\\\\\"[object Array]\\\\\\\"]=C[\\\\\\\"[object ArrayBuffer]\\\\\\\"]=C[\\\\\\\"[object DataView]\\\\\\\"]=C[\\\\\\\"[object Boolean]\\\\\\\"]=C[\\\\\\\"[object Date]\\\\\\\"]=C[\\\\\\\"[object Float32Array]\\\\\\\"]=C[\\\\\\\"[object Float64Array]\\\\\\\"]=C[\\\\\\\"[object Int8Array]\\\\\\\"]=C[\\\\\\\"[object Int16Array]\\\\\\\"]=C[\\\\\\\"[object Int32Array]\\\\\\\"]=C[\\\\\\\"[object Map]\\\\\\\"]=C[\\\\\\\"[object Number]\\\\\\\"]=C[S]=C[\\\\\\\"[object RegExp]\\\\\\\"]=C[\\\\\\\"[object Set]\\\\\\\"]=C[\\\\\\\"[object String]\\\\\\\"]=C[\\\\\\\"[object Symbol]\\\\\\\"]=C[\\\\\\\"[object Uint8Array]\\\\\\\"]=C[\\\\\\\"[object Uint8ClampedArray]\\\\\\\"]=C[\\\\\\\"[object Uint16Array]\\\\\\\"]=C[\\\\\\\"[object Uint32Array]\\\\\\\"]=!0,C[\\\\\\\"[object Error]\\\\\\\"]=C[M]=C[\\\\\\\"[object WeakMap]\\\\\\\"]=!1,t.exports=function t(e,n,N,L,O,R){var P,I=1&n,F=2&n,D=4&n;if(N&&(P=O?N(e,L,O,R):N(e)),void 0!==P)return P;if(!b(e))return e;var k=v(e);if(k){if(P=m(e),!I)return c(e,P)}else{var B=_(e),z=B==M||\\\\\\\"[object GeneratorFunction]\\\\\\\"==B;if(y(e))return l(e,I);if(B==S||B==E||z&&!O){if(P=F||z?{}:g(e),!I)return F?h(e,a(P,e)):u(e,o(P,e))}else{if(!C[B])return O?e:{};P=f(e,B,I)}}R||(R=new i);var U=R.get(e);if(U)return U;R.set(e,P),w(e)?e.forEach((function(i){P.add(t(i,n,N,i,e,R))})):x(e)&&e.forEach((function(i,r){P.set(r,t(i,n,N,r,e,R))}));var G=k?void 0:(D?F?p:d:F?A:T)(e);return r(G||e,(function(i,r){G&&(i=e[r=i]),s(P,r,t(i,n,N,r,e,R))})),P}},function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},function(t,e,n){var i=n(99),r=n(90);t.exports=function(t){if(!r(t))return!1;var e=i(t);return\\\\\\\"[object Function]\\\\\\\"==e||\\\\\\\"[object GeneratorFunction]\\\\\\\"==e||\\\\\\\"[object AsyncFunction]\\\\\\\"==e||\\\\\\\"[object Proxy]\\\\\\\"==e}},function(t,e,n){(function(e){var n=\\\\\\\"object\\\\\\\"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(this,n(89))},function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+\\\\\\\"\\\\\\\"}catch(t){}}return\\\\\\\"\\\\\\\"}},function(t,e,n){var i=n(123),r=n(118),s=Object.prototype.hasOwnProperty;t.exports=function(t,e,n){var o=t[e];s.call(t,e)&&r(o,n)&&(void 0!==n||e in t)||i(t,e,n)}},function(t,e,n){var i=n(169);t.exports=function(t,e,n){\\\\\\\"__proto__\\\\\\\"==e&&i?i(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}},function(t,e,n){var i=n(171),r=n(172),s=n(106),o=n(125),a=n(175),l=n(176),c=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=s(t),u=!n&&r(t),h=!n&&!u&&o(t),d=!n&&!u&&!h&&l(t),p=n||u||h||d,_=p?i(t.length,String):[],m=_.length;for(var f in t)!e&&!c.call(t,f)||p&&(\\\\\\\"length\\\\\\\"==f||h&&(\\\\\\\"offset\\\\\\\"==f||\\\\\\\"parent\\\\\\\"==f)||d&&(\\\\\\\"buffer\\\\\\\"==f||\\\\\\\"byteLength\\\\\\\"==f||\\\\\\\"byteOffset\\\\\\\"==f)||a(f,m))||_.push(f);return _}},function(t,e,n){(function(t){var i=n(68),r=n(174),s=e&&!e.nodeType&&e,o=s&&\\\\\\\"object\\\\\\\"==typeof t&&t&&!t.nodeType&&t,a=o&&o.exports===s?i.Buffer:void 0,l=(a?a.isBuffer:void 0)||r;t.exports=l}).call(this,n(107)(t))},function(t,e){t.exports=function(t){return\\\\\\\"number\\\\\\\"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},function(t,e,n){var i=n(119),r=n(126);t.exports=function(t){return null!=t&&r(t.length)&&!i(t)}},function(t,e){t.exports=function(){return[]}},function(t,e,n){var i=n(131),r=n(132),s=n(112),o=n(129),a=Object.getOwnPropertySymbols?function(t){for(var e=[];t;)i(e,s(t)),t=r(t);return e}:o;t.exports=a},function(t,e){t.exports=function(t,e){for(var n=-1,i=e.length,r=t.length;++n<i;)t[r+n]=e[n];return t}},function(t,e,n){var i=n(127)(Object.getPrototypeOf,Object);t.exports=i},function(t,e,n){var i=n(131),r=n(106);t.exports=function(t,e,n){var s=e(t);return r(t)?s:i(s,n(t))}},function(t,e,n){\\\\\\\"use strict\\\\\\\";Object.defineProperty(e,\\\\\\\"__esModule\\\\\\\",{value:!0}),e.loop=e.conditional=e.parse=void 0;e.parse=function t(e,n){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:i;if(Array.isArray(n))n.forEach((function(n){return t(e,n,i,r)}));else if(\\\\\\\"function\\\\\\\"==typeof n)n(e,i,r,t);else{var s=Object.keys(n)[0];Array.isArray(n[s])?(r[s]={},t(e,n[s],i,r[s])):r[s]=n[s](e,i,r,t)}return i};e.conditional=function(t,e){return function(n,i,r,s){e(n,i,r)&&s(n,t,i,r)}};e.loop=function(t,e){return function(n,i,r,s){for(var o=[];e(n,i,r);){var a={};s(n,t,i,a),o.push(a)}return o}}},function(t,e,n){\\\\\\\"use strict\\\\\\\";Object.defineProperty(e,\\\\\\\"__esModule\\\\\\\",{value:!0}),e.readBits=e.readArray=e.readUnsigned=e.readString=e.peekBytes=e.readBytes=e.peekByte=e.readByte=e.buildStream=void 0;e.buildStream=function(t){return{data:t,pos:0}};var i=function(){return function(t){return t.data[t.pos++]}};e.readByte=i;e.peekByte=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return function(e){return e.data[e.pos+t]}};var r=function(t){return function(e){return e.data.subarray(e.pos,e.pos+=t)}};e.readBytes=r;e.peekBytes=function(t){return function(e){return e.data.subarray(e.pos,e.pos+t)}};e.readString=function(t){return function(e){return Array.from(r(t)(e)).map((function(t){return String.fromCharCode(t)})).join(\\\\\\\"\\\\\\\")}};e.readUnsigned=function(t){return function(e){var n=r(2)(e);return t?(n[1]<<8)+n[0]:(n[0]<<8)+n[1]}};e.readArray=function(t,e){return function(n,i,s){for(var o=\\\\\\\"function\\\\\\\"==typeof e?e(n,i,s):e,a=r(t),l=new Array(o),c=0;c<o;c++)l[c]=a(n);return l}};e.readBits=function(t){return function(e){for(var n=function(t){return t.data[t.pos++]}(e),i=new Array(8),r=0;r<8;r++)i[7-r]=!!(n&1<<r);return Object.keys(t).reduce((function(e,n){var r=t[n];return r.length?e[n]=function(t,e,n){for(var i=0,r=0;r<n;r++)i+=t[e+r]&&Math.pow(2,n-r-1);return i}(i,r.index,r.length):e[n]=i[r.index],e}),{})}}},function(t,e,n){var i=n(117);t.exports=function(t){return i(t,5)}},function(t,e,n){var i=n(117);t.exports=function(t){return i(t,4)}},function(t,e,n){var i=n(97),r=n(144),s=n(145),o=n(146),a=n(147),l=n(148);function c(t){var e=this.__data__=new i(t);this.size=e.size}c.prototype.clear=r,c.prototype.delete=s,c.prototype.get=o,c.prototype.has=a,c.prototype.set=l,t.exports=c},function(t,e){t.exports=function(){this.__data__=[],this.size=0}},function(t,e,n){var i=n(98),r=Array.prototype.splice;t.exports=function(t){var e=this.__data__,n=i(e,t);return!(n<0)&&(n==e.length-1?e.pop():r.call(e,n,1),--this.size,!0)}},function(t,e,n){var i=n(98);t.exports=function(t){var e=this.__data__,n=i(e,t);return n<0?void 0:e[n][1]}},function(t,e,n){var i=n(98);t.exports=function(t){return i(this.__data__,t)>-1}},function(t,e,n){var i=n(98);t.exports=function(t,e){var n=this.__data__,r=i(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}},function(t,e,n){var i=n(97);t.exports=function(){this.__data__=new i,this.size=0}},function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},function(t,e){t.exports=function(t){return this.__data__.get(t)}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e,n){var i=n(97),r=n(103),s=n(155);t.exports=function(t,e){var n=this.__data__;if(n instanceof i){var o=n.__data__;if(!r||o.length<199)return o.push([t,e]),this.size=++n.size,this;n=this.__data__=new s(o)}return n.set(t,e),this.size=n.size,this}},function(t,e,n){var i=n(119),r=n(152),s=n(90),o=n(121),a=/^\\\\[object .+?Constructor\\\\]$/,l=Function.prototype,c=Object.prototype,u=l.toString,h=c.hasOwnProperty,d=RegExp(\\\\\\\"^\\\\\\\"+u.call(h).replace(/[\\\\\\\\^$.*+?()[\\\\]{}|]/g,\\\\\\\"\\\\\\\\$&\\\\\\\").replace(/hasOwnProperty|(function).*?(?=\\\\\\\\\\\\()| for .+?(?=\\\\\\\\\\\\])/g,\\\\\\\"$1.*?\\\\\\\")+\\\\\\\"$\\\\\\\");t.exports=function(t){return!(!s(t)||r(t))&&(i(t)?d:a).test(o(t))}},function(t,e,n){var i=n(104),r=Object.prototype,s=r.hasOwnProperty,o=r.toString,a=i?i.toStringTag:void 0;t.exports=function(t){var e=s.call(t,a),n=t[a];try{t[a]=void 0;var i=!0}catch(t){}var r=o.call(t);return i&&(e?t[a]=n:delete t[a]),r}},function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},function(t,e,n){var i,r=n(153),s=(i=/[^.]+$/.exec(r&&r.keys&&r.keys.IE_PROTO||\\\\\\\"\\\\\\\"))?\\\\\\\"Symbol(src)_1.\\\\\\\"+i:\\\\\\\"\\\\\\\";t.exports=function(t){return!!s&&s in t}},function(t,e,n){var i=n(68)[\\\\\\\"__core-js_shared__\\\\\\\"];t.exports=i},function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},function(t,e,n){var i=n(156),r=n(163),s=n(165),o=n(166),a=n(167);function l(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var i=t[e];this.set(i[0],i[1])}}l.prototype.clear=i,l.prototype.delete=r,l.prototype.get=s,l.prototype.has=o,l.prototype.set=a,t.exports=l},function(t,e,n){var i=n(157),r=n(97),s=n(103);t.exports=function(){this.size=0,this.__data__={hash:new i,map:new(s||r),string:new i}}},function(t,e,n){var i=n(158),r=n(159),s=n(160),o=n(161),a=n(162);function l(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var i=t[e];this.set(i[0],i[1])}}l.prototype.clear=i,l.prototype.delete=r,l.prototype.get=s,l.prototype.has=o,l.prototype.set=a,t.exports=l},function(t,e,n){var i=n(100);t.exports=function(){this.__data__=i?i(null):{},this.size=0}},function(t,e){t.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}},function(t,e,n){var i=n(100),r=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(i){var n=e[t];return\\\\\\\"__lodash_hash_undefined__\\\\\\\"===n?void 0:n}return r.call(e,t)?e[t]:void 0}},function(t,e,n){var i=n(100),r=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return i?void 0!==e[t]:r.call(e,t)}},function(t,e,n){var i=n(100);t.exports=function(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=i&&void 0===e?\\\\\\\"__lodash_hash_undefined__\\\\\\\":e,this}},function(t,e,n){var i=n(101);t.exports=function(t){var e=i(this,t).delete(t);return this.size-=e?1:0,e}},function(t,e){t.exports=function(t){var e=typeof t;return\\\\\\\"string\\\\\\\"==e||\\\\\\\"number\\\\\\\"==e||\\\\\\\"symbol\\\\\\\"==e||\\\\\\\"boolean\\\\\\\"==e?\\\\\\\"__proto__\\\\\\\"!==t:null===t}},function(t,e,n){var i=n(101);t.exports=function(t){return i(this,t).get(t)}},function(t,e,n){var i=n(101);t.exports=function(t){return i(this,t).has(t)}},function(t,e,n){var i=n(101);t.exports=function(t,e){var n=i(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this}},function(t,e){t.exports=function(t,e){for(var n=-1,i=null==t?0:t.length;++n<i&&!1!==e(t[n],n,t););return t}},function(t,e,n){var i=n(84),r=function(){try{var t=i(Object,\\\\\\\"defineProperty\\\\\\\");return t({},\\\\\\\"\\\\\\\",{}),t}catch(t){}}();t.exports=r},function(t,e,n){var i=n(102),r=n(105);t.exports=function(t,e){return t&&i(e,r(e),t)}},function(t,e){t.exports=function(t,e){for(var n=-1,i=Array(t);++n<t;)i[n]=e(n);return i}},function(t,e,n){var i=n(173),r=n(91),s=Object.prototype,o=s.hasOwnProperty,a=s.propertyIsEnumerable,l=i(function(){return arguments}())?i:function(t){return r(t)&&o.call(t,\\\\\\\"callee\\\\\\\")&&!a.call(t,\\\\\\\"callee\\\\\\\")};t.exports=l},function(t,e,n){var i=n(99),r=n(91);t.exports=function(t){return r(t)&&\\\\\\\"[object Arguments]\\\\\\\"==i(t)}},function(t,e){t.exports=function(){return!1}},function(t,e){var n=/^(?:0|[1-9]\\\\d*)$/;t.exports=function(t,e){var i=typeof t;return!!(e=null==e?9007199254740991:e)&&(\\\\\\\"number\\\\\\\"==i||\\\\\\\"symbol\\\\\\\"!=i&&n.test(t))&&t>-1&&t%1==0&&t<e}},function(t,e,n){var i=n(177),r=n(108),s=n(109),o=s&&s.isTypedArray,a=o?r(o):i;t.exports=a},function(t,e,n){var i=n(99),r=n(126),s=n(91),o={};o[\\\\\\\"[object Float32Array]\\\\\\\"]=o[\\\\\\\"[object Float64Array]\\\\\\\"]=o[\\\\\\\"[object Int8Array]\\\\\\\"]=o[\\\\\\\"[object Int16Array]\\\\\\\"]=o[\\\\\\\"[object Int32Array]\\\\\\\"]=o[\\\\\\\"[object Uint8Array]\\\\\\\"]=o[\\\\\\\"[object Uint8ClampedArray]\\\\\\\"]=o[\\\\\\\"[object Uint16Array]\\\\\\\"]=o[\\\\\\\"[object Uint32Array]\\\\\\\"]=!0,o[\\\\\\\"[object Arguments]\\\\\\\"]=o[\\\\\\\"[object Array]\\\\\\\"]=o[\\\\\\\"[object ArrayBuffer]\\\\\\\"]=o[\\\\\\\"[object Boolean]\\\\\\\"]=o[\\\\\\\"[object DataView]\\\\\\\"]=o[\\\\\\\"[object Date]\\\\\\\"]=o[\\\\\\\"[object Error]\\\\\\\"]=o[\\\\\\\"[object Function]\\\\\\\"]=o[\\\\\\\"[object Map]\\\\\\\"]=o[\\\\\\\"[object Number]\\\\\\\"]=o[\\\\\\\"[object Object]\\\\\\\"]=o[\\\\\\\"[object RegExp]\\\\\\\"]=o[\\\\\\\"[object Set]\\\\\\\"]=o[\\\\\\\"[object String]\\\\\\\"]=o[\\\\\\\"[object WeakMap]\\\\\\\"]=!1,t.exports=function(t){return s(t)&&r(t.length)&&!!o[i(t)]}},function(t,e,n){var i=n(110),r=n(179),s=Object.prototype.hasOwnProperty;t.exports=function(t){if(!i(t))return r(t);var e=[];for(var n in Object(t))s.call(t,n)&&\\\\\\\"constructor\\\\\\\"!=n&&e.push(n);return e}},function(t,e,n){var i=n(127)(Object.keys,Object);t.exports=i},function(t,e,n){var i=n(102),r=n(111);t.exports=function(t,e){return t&&i(e,r(e),t)}},function(t,e,n){var i=n(90),r=n(110),s=n(182),o=Object.prototype.hasOwnProperty;t.exports=function(t){if(!i(t))return s(t);var e=r(t),n=[];for(var a in t)(\\\\\\\"constructor\\\\\\\"!=a||!e&&o.call(t,a))&&n.push(a);return n}},function(t,e){t.exports=function(t){var e=[];if(null!=t)for(var n in Object(t))e.push(n);return e}},function(t,e,n){(function(t){var i=n(68),r=e&&!e.nodeType&&e,s=r&&\\\\\\\"object\\\\\\\"==typeof t&&t&&!t.nodeType&&t,o=s&&s.exports===r?i.Buffer:void 0,a=o?o.allocUnsafe:void 0;t.exports=function(t,e){if(e)return t.slice();var n=t.length,i=a?a(n):new t.constructor(n);return t.copy(i),i}}).call(this,n(107)(t))},function(t,e){t.exports=function(t,e){var n=-1,i=t.length;for(e||(e=Array(i));++n<i;)e[n]=t[n];return e}},function(t,e,n){var i=n(102),r=n(112);t.exports=function(t,e){return i(t,r(t),e)}},function(t,e){t.exports=function(t,e){for(var n=-1,i=null==t?0:t.length,r=0,s=[];++n<i;){var o=t[n];e(o,n,t)&&(s[r++]=o)}return s}},function(t,e,n){var i=n(102),r=n(130);t.exports=function(t,e){return i(t,r(t),e)}},function(t,e,n){var i=n(133),r=n(112),s=n(105);t.exports=function(t){return i(t,s,r)}},function(t,e,n){var i=n(133),r=n(130),s=n(111);t.exports=function(t){return i(t,s,r)}},function(t,e,n){var i=n(84)(n(68),\\\\\\\"DataView\\\\\\\");t.exports=i},function(t,e,n){var i=n(84)(n(68),\\\\\\\"Promise\\\\\\\");t.exports=i},function(t,e,n){var i=n(84)(n(68),\\\\\\\"Set\\\\\\\");t.exports=i},function(t,e,n){var i=n(84)(n(68),\\\\\\\"WeakMap\\\\\\\");t.exports=i},function(t,e){var n=Object.prototype.hasOwnProperty;t.exports=function(t){var e=t.length,i=new t.constructor(e);return e&&\\\\\\\"string\\\\\\\"==typeof t[0]&&n.call(t,\\\\\\\"index\\\\\\\")&&(i.index=t.index,i.input=t.input),i}},function(t,e,n){var i=n(114),r=n(197),s=n(198),o=n(199),a=n(200);t.exports=function(t,e,n){var l=t.constructor;switch(e){case\\\\\\\"[object ArrayBuffer]\\\\\\\":return i(t);case\\\\\\\"[object Boolean]\\\\\\\":case\\\\\\\"[object Date]\\\\\\\":return new l(+t);case\\\\\\\"[object DataView]\\\\\\\":return r(t,n);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 a(t,n);case\\\\\\\"[object Map]\\\\\\\":return new l;case\\\\\\\"[object Number]\\\\\\\":case\\\\\\\"[object String]\\\\\\\":return new l(t);case\\\\\\\"[object RegExp]\\\\\\\":return s(t);case\\\\\\\"[object Set]\\\\\\\":return new l;case\\\\\\\"[object Symbol]\\\\\\\":return o(t)}}},function(t,e,n){var i=n(68).Uint8Array;t.exports=i},function(t,e,n){var i=n(114);t.exports=function(t,e){var n=e?i(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}},function(t,e){var n=/\\\\w*$/;t.exports=function(t){var e=new t.constructor(t.source,n.exec(t));return e.lastIndex=t.lastIndex,e}},function(t,e,n){var i=n(104),r=i?i.prototype:void 0,s=r?r.valueOf:void 0;t.exports=function(t){return s?Object(s.call(t)):{}}},function(t,e,n){var i=n(114);t.exports=function(t,e){var n=e?i(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}},function(t,e,n){var i=n(202),r=n(132),s=n(110);t.exports=function(t){return\\\\\\\"function\\\\\\\"!=typeof t.constructor||s(t)?{}:i(r(t))}},function(t,e,n){var i=n(90),r=Object.create,s=function(){function t(){}return function(e){if(!i(e))return{};if(r)return r(e);t.prototype=e;var n=new t;return t.prototype=void 0,n}}();t.exports=s},function(t,e,n){var i=n(204),r=n(108),s=n(109),o=s&&s.isMap,a=o?r(o):i;t.exports=a},function(t,e,n){var i=n(113),r=n(91);t.exports=function(t){return r(t)&&\\\\\\\"[object Map]\\\\\\\"==i(t)}},function(t,e,n){var i=n(206),r=n(108),s=n(109),o=s&&s.isSet,a=o?r(o):i;t.exports=a},function(t,e,n){var i=n(113),r=n(91);t.exports=function(t){return r(t)&&\\\\\\\"[object Set]\\\\\\\"==i(t)}},function(t,e,n){\\\\\\\"use strict\\\\\\\";Object.defineProperty(e,\\\\\\\"__esModule\\\\\\\",{value:!0}),e.default=void 0;var i=n(134),r=n(135),s={blocks:function(t){for(var e=[],n=t.data.length,i=0,s=(0,r.readByte)()(t);0!==s;s=(0,r.readByte)()(t)){if(t.pos+s>=n){var o=n-t.pos;e.push((0,r.readBytes)(o)(t)),i+=o;break}e.push((0,r.readBytes)(s)(t)),i+=s}for(var a=new Uint8Array(i),l=0,c=0;c<e.length;c++)a.set(e[c],l),l+=e[c].length;return a}},o=(0,i.conditional)({gce:[{codes:(0,r.readBytes)(2)},{byteSize:(0,r.readByte)()},{extras:(0,r.readBits)({future:{index:0,length:3},disposal:{index:3,length:3},userInput:{index:6},transparentColorGiven:{index:7}})},{delay:(0,r.readUnsigned)(!0)},{transparentColorIndex:(0,r.readByte)()},{terminator:(0,r.readByte)()}]},(function(t){var e=(0,r.peekBytes)(2)(t);return 33===e[0]&&249===e[1]})),a=(0,i.conditional)({image:[{code:(0,r.readByte)()},{descriptor:[{left:(0,r.readUnsigned)(!0)},{top:(0,r.readUnsigned)(!0)},{width:(0,r.readUnsigned)(!0)},{height:(0,r.readUnsigned)(!0)},{lct:(0,r.readBits)({exists:{index:0},interlaced:{index:1},sort:{index:2},future:{index:3,length:2},size:{index:5,length:3}})}]},(0,i.conditional)({lct:(0,r.readArray)(3,(function(t,e,n){return Math.pow(2,n.descriptor.lct.size+1)}))},(function(t,e,n){return n.descriptor.lct.exists})),{data:[{minCodeSize:(0,r.readByte)()},s]}]},(function(t){return 44===(0,r.peekByte)()(t)})),l=(0,i.conditional)({text:[{codes:(0,r.readBytes)(2)},{blockSize:(0,r.readByte)()},{preData:function(t,e,n){return(0,r.readBytes)(n.text.blockSize)(t)}},s]},(function(t){var e=(0,r.peekBytes)(2)(t);return 33===e[0]&&1===e[1]})),c=(0,i.conditional)({application:[{codes:(0,r.readBytes)(2)},{blockSize:(0,r.readByte)()},{id:function(t,e,n){return(0,r.readString)(n.blockSize)(t)}},s]},(function(t){var e=(0,r.peekBytes)(2)(t);return 33===e[0]&&255===e[1]})),u=(0,i.conditional)({comment:[{codes:(0,r.readBytes)(2)},s]},(function(t){var e=(0,r.peekBytes)(2)(t);return 33===e[0]&&254===e[1]})),h=[{header:[{signature:(0,r.readString)(3)},{version:(0,r.readString)(3)}]},{lsd:[{width:(0,r.readUnsigned)(!0)},{height:(0,r.readUnsigned)(!0)},{gct:(0,r.readBits)({exists:{index:0},resolution:{index:1,length:3},sort:{index:4},size:{index:5,length:3}})},{backgroundColorIndex:(0,r.readByte)()},{pixelAspectRatio:(0,r.readByte)()}]},(0,i.conditional)({gct:(0,r.readArray)(3,(function(t,e){return Math.pow(2,e.lsd.gct.size+1)}))},(function(t,e){return e.lsd.gct.exists})),{frames:(0,i.loop)([o,c,u,a,l],(function(t){var e=(0,r.peekByte)()(t);return 33===e||44===e}))}];e.default=h},function(t,e,n){\\\\\\\"use strict\\\\\\\";Object.defineProperty(e,\\\\\\\"__esModule\\\\\\\",{value:!0}),e.deinterlace=void 0;e.deinterlace=function(t,e){for(var n=new Array(t.length),i=t.length/e,r=function(i,r){var s=t.slice(r*e,(r+1)*e);n.splice.apply(n,[i*e,e].concat(s))},s=[0,4,2,1],o=[8,8,4,2],a=0,l=0;l<4;l++)for(var c=s[l];c<i;c+=o[l])r(c,a),a++;return n}},function(t,e,n){\\\\\\\"use strict\\\\\\\";Object.defineProperty(e,\\\\\\\"__esModule\\\\\\\",{value:!0}),e.lzw=void 0;e.lzw=function(t,e,n){var i,r,s,o,a,l,c,u,h,d,p,_,m,f,g,v,y=4096,x=n,b=new Array(n),w=new Array(y),T=new Array(y),A=new Array(4097);for(a=(r=1<<(d=t))+1,i=r+2,c=-1,s=(1<<(o=d+1))-1,u=0;u<r;u++)w[u]=0,T[u]=u;for(p=_=m=f=g=v=0,h=0;h<x;){if(0===f){if(_<o){p+=e[v]<<_,_+=8,v++;continue}if(u=p&s,p>>=o,_-=o,u>i||u==a)break;if(u==r){s=(1<<(o=d+1))-1,i=r+2,c=-1;continue}if(-1==c){A[f++]=T[u],c=u,m=u;continue}for(l=u,u==i&&(A[f++]=m,u=c);u>r;)A[f++]=T[u],u=w[u];m=255&T[u],A[f++]=m,i<y&&(w[i]=c,T[i]=m,0==(++i&s)&&i<y&&(o++,s+=i)),c=l}f--,b[g++]=A[f],h++}for(h=g;h<x;h++)b[h]=0;return b}},,,,,,,,function(t,e,n){\\\\\\\"use strict\\\\\\\";n.r(e),n.d(e,\\\\\\\"PolyScene\\\\\\\",(function(){return Rl})),n.d(e,\\\\\\\"Poly\\\\\\\",(function(){return ai})),n.d(e,\\\\\\\"SceneJsonImporter\\\\\\\",(function(){return Xl})),n.d(e,\\\\\\\"SceneDataManifestImporter\\\\\\\",(function(){return Yl})),n.d(e,\\\\\\\"mountScene\\\\\\\",(function(){return $l}));var i={};n.r(i),n.d(i,\\\\\\\"ShadowMaterial\\\\\\\",(function(){return Bf})),n.d(i,\\\\\\\"SpriteMaterial\\\\\\\",(function(){return zf})),n.d(i,\\\\\\\"RawShaderMaterial\\\\\\\",(function(){return ot})),n.d(i,\\\\\\\"ShaderMaterial\\\\\\\",(function(){return F})),n.d(i,\\\\\\\"PointsMaterial\\\\\\\",(function(){return yr.a})),n.d(i,\\\\\\\"MeshPhysicalMaterial\\\\\\\",(function(){return Uf.a})),n.d(i,\\\\\\\"MeshStandardMaterial\\\\\\\",(function(){return xr.a})),n.d(i,\\\\\\\"MeshPhongMaterial\\\\\\\",(function(){return Gf.a})),n.d(i,\\\\\\\"MeshToonMaterial\\\\\\\",(function(){return Vf})),n.d(i,\\\\\\\"MeshNormalMaterial\\\\\\\",(function(){return Hf})),n.d(i,\\\\\\\"MeshLambertMaterial\\\\\\\",(function(){return br.a})),n.d(i,\\\\\\\"MeshDepthMaterial\\\\\\\",(function(){return Mn})),n.d(i,\\\\\\\"MeshDistanceMaterial\\\\\\\",(function(){return Sn})),n.d(i,\\\\\\\"MeshBasicMaterial\\\\\\\",(function(){return at.a})),n.d(i,\\\\\\\"MeshMatcapMaterial\\\\\\\",(function(){return jf})),n.d(i,\\\\\\\"LineDashedMaterial\\\\\\\",(function(){return Wf})),n.d(i,\\\\\\\"LineBasicMaterial\\\\\\\",(function(){return wr.a})),n.d(i,\\\\\\\"Material\\\\\\\",(function(){return O.a}));var r={};n.r(r),n.d(r,\\\\\\\"BoxGeometry\\\\\\\",(function(){return N})),n.d(r,\\\\\\\"BoxBufferGeometry\\\\\\\",(function(){return N})),n.d(r,\\\\\\\"CircleGeometry\\\\\\\",(function(){return zX})),n.d(r,\\\\\\\"CircleBufferGeometry\\\\\\\",(function(){return zX})),n.d(r,\\\\\\\"ConeGeometry\\\\\\\",(function(){return _U})),n.d(r,\\\\\\\"ConeBufferGeometry\\\\\\\",(function(){return _U})),n.d(r,\\\\\\\"CylinderGeometry\\\\\\\",(function(){return pU})),n.d(r,\\\\\\\"CylinderBufferGeometry\\\\\\\",(function(){return pU})),n.d(r,\\\\\\\"DodecahedronGeometry\\\\\\\",(function(){return UX})),n.d(r,\\\\\\\"DodecahedronBufferGeometry\\\\\\\",(function(){return UX})),n.d(r,\\\\\\\"EdgesGeometry\\\\\\\",(function(){return WX})),n.d(r,\\\\\\\"ExtrudeGeometry\\\\\\\",(function(){return YX})),n.d(r,\\\\\\\"ExtrudeBufferGeometry\\\\\\\",(function(){return YX})),n.d(r,\\\\\\\"IcosahedronGeometry\\\\\\\",(function(){return JX})),n.d(r,\\\\\\\"IcosahedronBufferGeometry\\\\\\\",(function(){return JX})),n.d(r,\\\\\\\"LatheGeometry\\\\\\\",(function(){return ZX})),n.d(r,\\\\\\\"LatheBufferGeometry\\\\\\\",(function(){return ZX})),n.d(r,\\\\\\\"OctahedronGeometry\\\\\\\",(function(){return tU})),n.d(r,\\\\\\\"OctahedronBufferGeometry\\\\\\\",(function(){return tU})),n.d(r,\\\\\\\"PlaneGeometry\\\\\\\",(function(){return L})),n.d(r,\\\\\\\"PlaneBufferGeometry\\\\\\\",(function(){return L})),n.d(r,\\\\\\\"PolyhedronGeometry\\\\\\\",(function(){return Kz})),n.d(r,\\\\\\\"PolyhedronBufferGeometry\\\\\\\",(function(){return Kz})),n.d(r,\\\\\\\"RingGeometry\\\\\\\",(function(){return QX})),n.d(r,\\\\\\\"RingBufferGeometry\\\\\\\",(function(){return QX})),n.d(r,\\\\\\\"ShapeGeometry\\\\\\\",(function(){return KX})),n.d(r,\\\\\\\"ShapeBufferGeometry\\\\\\\",(function(){return KX})),n.d(r,\\\\\\\"SphereGeometry\\\\\\\",(function(){return oU})),n.d(r,\\\\\\\"SphereBufferGeometry\\\\\\\",(function(){return oU})),n.d(r,\\\\\\\"TetrahedronGeometry\\\\\\\",(function(){return tY})),n.d(r,\\\\\\\"TetrahedronBufferGeometry\\\\\\\",(function(){return tY})),n.d(r,\\\\\\\"TorusGeometry\\\\\\\",(function(){return eY})),n.d(r,\\\\\\\"TorusBufferGeometry\\\\\\\",(function(){return eY})),n.d(r,\\\\\\\"TorusKnotGeometry\\\\\\\",(function(){return nY})),n.d(r,\\\\\\\"TorusKnotBufferGeometry\\\\\\\",(function(){return nY})),n.d(r,\\\\\\\"TubeGeometry\\\\\\\",(function(){return rY})),n.d(r,\\\\\\\"TubeBufferGeometry\\\\\\\",(function(){return rY})),n.d(r,\\\\\\\"WireframeGeometry\\\\\\\",(function(){return sY}));class s{constructor(t){this.scene=t,this._mainCameraNodePath=null}setMainCameraNodePath(t){this._mainCameraNodePath=t}mainCameraNodePath(){return this._mainCameraNodePath}mainCameraNode(){if(this.mainCameraNodePath){const t=this.mainCameraNodePath();if(!t)return this._find_any_camera();return this.scene.node(t)}return console.warn(\\\\\\\"main camera node not found\\\\\\\"),this._find_any_camera()}_find_any_camera(){const t=this.scene.root();return t.nodesByType(\\\\\\\"perspectiveCamera\\\\\\\")[0]||t.nodesByType(\\\\\\\"orthographicCamera\\\\\\\")[0]}}class o{constructor(t){this._scene=t,this._queue=new Map,this._block_level=0,this._process_item_bound=this._process_item.bind(this),this._block_level=0}block(){this._block_level+=1}unblock(){this._block_level-=1,this._block_level<0&&(this._block_level=0),this.process_queue()}get blocked(){return this._block_level>0}enqueue(t,e){this._queue.set(t.graphNodeId(),e)}process_queue(){this.blocked||this._queue.forEach(this._process_item_bound)}_process_item(t,e){const n=this._scene.graph.nodeFromId(e);n&&(this._queue.delete(e),n.dirtyController.runPostDirtyHooks(t))}}class a{constructor(){this._cooking_nodes_by_id=new Map,this._resolves=[]}addNode(t){this._cooking_nodes_by_id.set(t.graphNodeId(),t)}removeNode(t){this._cooking_nodes_by_id.delete(t.graphNodeId()),0==this._cooking_nodes_by_id.size&&this.flush()}cookingNodes(){const t=[];return this._cooking_nodes_by_id.forEach(((e,n)=>{t.push(e)})),t}flush(){let t;for(;t=this._resolves.pop();)t()}async waitForCooksCompleted(){return 0==this._cooking_nodes_by_id.size?void 0:new Promise(((t,e)=>{this._resolves.push(t)}))}}class l{constructor(){this._next_id=0,this._successors=new Map,this._predecessors=new Map,this._nodes_by_id=new Map,this._nodesCount=0,this._debugging=!1,this._addedNodesDuringDebugging=new Map}startDebugging(){this._debugging=!0,console.log(\\\\\\\"CoreGraph.startDebugging\\\\\\\",this._next_id)}stopDebugging(){this._debugging=!1,console.log(\\\\\\\"CoreGraph.stopDebugging\\\\\\\",this._next_id)}printDebug(){this._addedNodesDuringDebugging.forEach(((t,e)=>{console.log(e,t,t.graphPredecessors(),t.graphSuccessors())}))}setScene(t){this._scene=t}scene(){return this._scene}nextId(){return this._next_id+=1,this._next_id}nodesFromIds(t){const e=[];for(let n of t){const t=this.nodeFromId(n);t&&e.push(t)}return e}nodeFromId(t){return this._nodes_by_id.get(t)}hasNode(t){return null!=this._nodes_by_id.get(t.graphNodeId())}addNode(t){this._nodes_by_id.set(t.graphNodeId(),t),this._nodesCount+=1,this._debugging&&this._addedNodesDuringDebugging.set(t.graphNodeId(),t)}removeNode(t){this._nodes_by_id.delete(t.graphNodeId()),this._successors.delete(t.graphNodeId()),this._predecessors.delete(t.graphNodeId()),this._nodesCount-=1,this._debugging&&this._addedNodesDuringDebugging.delete(t.graphNodeId())}nodesCount(){return this._nodesCount}connect(t,e,n=!0){const i=t.graphNodeId(),r=e.graphNodeId();if(this.hasNode(t)&&this.hasNode(e)){if(n){n=!(!this._scene||this._scene.loadingController.isLoading())}let e=!1;return n&&(e=this._hasPredecessor(i,r)),!e&&(this._createConnection(i,r),t.dirtyController.clearSuccessorsCacheWithPredecessors(),!0)}return console.warn(`attempt to connect non existing node ${i} or ${r}`),!1}disconnect(t,e){this._remove_connection(t.graphNodeId(),e.graphNodeId()),t.dirtyController.clearSuccessorsCacheWithPredecessors()}disconnectPredecessors(t){const e=this.predecessors(t);for(let n of e)this.disconnect(n,t)}disconnectSuccessors(t){const e=this.successors(t);for(let n of e)this.disconnect(t,n)}predecessorIds(t){const e=this._predecessors.get(t);if(e){const t=[];return e.forEach(((e,n)=>{t.push(n)})),t}return[]}predecessors(t){const e=this.predecessorIds(t.graphNodeId());return this.nodesFromIds(e)}successorIds(t){const e=this._successors.get(t);if(e){const t=[];return e.forEach(((e,n)=>{t.push(n)})),t}return[]}successors(t){const e=this.successorIds(t.graphNodeId())||[];return this.nodesFromIds(e)}allPredecessorIds(t){return this.allNextIds(t,\\\\\\\"predecessorIds\\\\\\\")}allSuccessorIds(t){return this.allNextIds(t,\\\\\\\"successorIds\\\\\\\")}allPredecessors(t){const e=this.allPredecessorIds(t);return this.nodesFromIds(e)}allSuccessors(t){const e=this.allSuccessorIds(t);return this.nodesFromIds(e)}_createConnection(t,e){let n=this._successors.get(t);if(n||(n=new Set,this._successors.set(t,n)),n.has(e))return;n.add(e);let i=this._predecessors.get(e);i||(i=new Set,this._predecessors.set(e,i)),i.add(t)}_remove_connection(t,e){let n=this._successors.get(t);n&&(n.delete(e),0==n.size&&this._successors.delete(t));let i=this._predecessors.get(e);i&&(i.delete(t),0==i.size&&this._predecessors.delete(e))}allNextIds(t,e){const n=new Map,i=[];let r=this[e](t.graphNodeId());for(;r.length>0;){const t=[];for(let n of r)for(let i of this[e](n))t.push(i);for(let t of r)n.set(t,!0);for(let e of t)r.push(e);r=t}return n.forEach(((t,e)=>{i.push(e)})),i}_hasPredecessor(t,e){const n=this.predecessorIds(t);if(n){if(n.includes(e))return!0;for(let t of n)return this._hasPredecessor(t,e)}return!1}}class c{constructor(t){this._node=t,this._cooks_count=0,this._total_cook_time=0,this._total_inputs_time=0,this._total_params_time=0}update_cook_data(t){this._cooks_count+=1,this._total_cook_time+=t.cookTime,this._total_inputs_time+=t.inputsTime,this._total_params_time+=t.paramsTime}total_time(){return this._total_cook_time+this._total_inputs_time+this._total_params_time}total_cook_time(){return this._total_cook_time}cook_time_per_iteration(){return this._cooks_count>0?this._total_cook_time/this._cooks_count:0}total_inputs_time(){return this._total_inputs_time}inputs_time_per_iteration(){return this._cooks_count>0?this._total_inputs_time/this._cooks_count:0}total_params_time2(){return this._total_params_time}params_time_per_iteration2(){return this._cooks_count>0?this._total_params_time/this._cooks_count:0}cooks_count(){return this._cooks_count}print_object(){return{fullPath:this._node.path(),cooks_count:this.cooks_count(),total_time:this.total_time(),total_cook_time:this.total_cook_time(),cook_time_per_iteration:this.cook_time_per_iteration(),inputs_time_per_iteration:this.inputs_time_per_iteration(),params_time_per_iteration:this.params_time_per_iteration2()}}}class u{static pushOnArrayAtEntry(t,e,n){t.has(e)?t.get(e).push(n):t.set(e,[n])}static popFromArrayAtEntry(t,e,n){if(t.has(e)){const i=t.get(e),r=i.indexOf(n);r>=0&&i.splice(r,1)}}static unshiftOnArrayAtEntry(t,e,n){t.has(e)?t.get(e).unshift(n):t.set(e,[n])}static concatOnArrayAtEntry(t,e,n){if(t.has(e)){let i=t.get(e);for(let t of n)i.push(t)}else t.set(e,n)}}class h{static union(t,e){const n=new Set;return t.forEach((t=>n.add(t))),e.forEach((t=>n.add(t))),n}static intersection(t,e){const n=new Set;return t.forEach((t=>{e.has(t)&&n.add(t)})),e.forEach((e=>{t.has(e)&&n.add(e)})),n}static difference(t,e){const n=new Set;return t.forEach((t=>{e.has(t)||n.add(t)})),e.forEach((e=>{t.has(e)||n.add(e)})),n}}var d=n(2),p=n(0),_=n(9);class m{static isNumber(t){return\\\\\\\"number\\\\\\\"==typeof t}static isVector(t){return t instanceof d.a||t instanceof p.a||t instanceof _.a}static isString(t){return\\\\\\\"string\\\\\\\"==typeof t}static isBoolean(t){return!0===t||!1===t}static isNaN(t){return isNaN(t)}static isArray(t){return Array.isArray(t)}static isObject(t){var e=typeof t;return null!=t&&(\\\\\\\"object\\\\\\\"==e||\\\\\\\"function\\\\\\\"==e)}}class f{static min(t){let e=t[0];for(let n of t)n<e&&(e=n);return e}static max(t){let e=t[0];for(let n of t)n>e&&(e=n);return e}static sum(t){let e=0;for(let n of t)e+=n;return e}static compact(t){const e=[];for(let n of t)null!=n&&e.push(n);return e}static uniq(t){const e=new Set;for(let n of t)e.add(n);const n=new Array(e.size);let i=0;return e.forEach((t=>{n[i]=t,i++})),n}static chunk(t,e){const n=[];let i=[];n.push(i);for(let r=0;r<t.length;r++)i.length==e&&(i=[],n.push(i)),i.push(t[r]);return n}static union(t,e){const n=[];return h.union(this.toSet(t),this.toSet(e)).forEach((t=>n.push(t))),n}static intersection(t,e){const n=[];return h.intersection(this.toSet(t),this.toSet(e)).forEach((t=>n.push(t))),n}static difference(t,e){const n=[];return h.difference(this.toSet(t),this.toSet(e)).forEach((t=>n.push(t))),n}static toSet(t){const e=new Set;for(let n of t)e.add(n);return e}static isEqual(t,e){if(t.length!=e.length)return!1;const n=t.length;for(let i=0;i<n;i++)if(t[i]!=e[i])return!1;return!0}static sortBy(t,e){if(0==t.length)return[];const n=new Map,i=new Set;for(let r of t){const t=e(r);i.add(t),u.pushOnArrayAtEntry(n,t,r)}const r=new Array(i.size);let s=0;i.forEach((t=>{r[s]=t,s++})),m.isString(r[0])?r.sort():r.sort(((t,e)=>t-e));const o=new Array(t.length);s=0;for(let t of r){const e=n.get(t);if(e)for(let t of e)o[s]=t,s++}return o}static range(t,e,n=1){null==e&&(e=t,t=0);const i=Math.floor((e-t)/n),r=new Array(i);for(let e=0;e<r.length;e++)r[e]=t+e*n;return r}}var g=n(136),v=n.n(g),y=n(137),x=n.n(y);class b{static isEqual(t,e){if(m.isObject(t)&&m.isObject(e)){const n=Object.keys(t),i=Object.keys(e);return!!f.isEqual(n,i)&&JSON.stringify(t)==JSON.stringify(e)}return!1}static merge(t,e){return Object.assign(t,e)}static clone(t){return x()(t)}static cloneDeep(t){return v()(t)}}var w=n(1),T=n(59),A=n(5);function E(){let t=null,e=!1,n=null,i=null;function r(e,s){n(e,s),i=t.requestAnimationFrame(r)}return{start:function(){!0!==e&&null!==n&&(i=t.requestAnimationFrame(r),e=!0)},stop:function(){t.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(t){n=t},setContext:function(e){t=e}}}function M(t,e){const n=e.isWebGL2,i=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute&&(t=t.data),i.get(t)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);const n=i.get(e);n&&(t.deleteBuffer(n.buffer),i.delete(e))},update:function(e,r){if(e.isGLBufferAttribute){const t=i.get(e);return void((!t||t.version<e.version)&&i.set(e,{buffer:e.buffer,type:e.type,bytesPerElement:e.elementSize,version:e.version}))}e.isInterleavedBufferAttribute&&(e=e.data);const s=i.get(e);void 0===s?i.set(e,function(e,i){const r=e.array,s=e.usage,o=t.createBuffer();t.bindBuffer(i,o),t.bufferData(i,r,s),e.onUploadCallback();let a=t.FLOAT;return r instanceof Float32Array?a=t.FLOAT:r instanceof Float64Array?console.warn(\\\\\\\"THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.\\\\\\\"):r instanceof Uint16Array?e.isFloat16BufferAttribute?n?a=t.HALF_FLOAT:console.warn(\\\\\\\"THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.\\\\\\\"):a=t.UNSIGNED_SHORT:r instanceof Int16Array?a=t.SHORT:r instanceof Uint32Array?a=t.UNSIGNED_INT:r instanceof Int32Array?a=t.INT:r instanceof Int8Array?a=t.BYTE:(r instanceof Uint8Array||r instanceof Uint8ClampedArray)&&(a=t.UNSIGNED_BYTE),{buffer:o,type:a,bytesPerElement:r.BYTES_PER_ELEMENT,version:e.version}}(e,r)):s.version<e.version&&(!function(e,i,r){const s=i.array,o=i.updateRange;t.bindBuffer(r,e),-1===o.count?t.bufferSubData(r,0,s):(n?t.bufferSubData(r,o.offset*s.BYTES_PER_ELEMENT,s,o.offset,o.count):t.bufferSubData(r,o.offset*s.BYTES_PER_ELEMENT,s.subarray(o.offset,o.offset+o.count)),o.count=-1)}(s.buffer,e,r),s.version=e.version)}}}var S=n(7),C=n(4);class N extends S.a{constructor(t=1,e=1,n=1,i=1,r=1,s=1){super(),this.type=\\\\\\\"BoxGeometry\\\\\\\",this.parameters={width:t,height:e,depth:n,widthSegments:i,heightSegments:r,depthSegments:s};const o=this;i=Math.floor(i),r=Math.floor(r),s=Math.floor(s);const a=[],l=[],c=[],u=[];let h=0,d=0;function _(t,e,n,i,r,s,_,m,f,g,v){const y=s/f,x=_/g,b=s/2,w=_/2,T=m/2,A=f+1,E=g+1;let M=0,S=0;const C=new p.a;for(let s=0;s<E;s++){const o=s*x-w;for(let a=0;a<A;a++){const h=a*y-b;C[t]=h*i,C[e]=o*r,C[n]=T,l.push(C.x,C.y,C.z),C[t]=0,C[e]=0,C[n]=m>0?1:-1,c.push(C.x,C.y,C.z),u.push(a/f),u.push(1-s/g),M+=1}}for(let t=0;t<g;t++)for(let e=0;e<f;e++){const n=h+e+A*t,i=h+e+A*(t+1),r=h+(e+1)+A*(t+1),s=h+(e+1)+A*t;a.push(n,i,s),a.push(i,r,s),S+=6}o.addGroup(d,S,v),d+=S,h+=M}_(\\\\\\\"z\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"x\\\\\\\",-1,-1,n,e,t,s,r,0),_(\\\\\\\"z\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"x\\\\\\\",1,-1,n,e,-t,s,r,1),_(\\\\\\\"x\\\\\\\",\\\\\\\"z\\\\\\\",\\\\\\\"y\\\\\\\",1,1,t,n,e,i,s,2),_(\\\\\\\"x\\\\\\\",\\\\\\\"z\\\\\\\",\\\\\\\"y\\\\\\\",1,-1,t,n,-e,i,s,3),_(\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\",1,-1,t,e,n,i,r,4),_(\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\",-1,-1,t,e,-n,i,r,5),this.setIndex(a),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(l,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new C.c(c,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(u,2))}static fromJSON(t){return new N(t.width,t.height,t.depth,t.widthSegments,t.heightSegments,t.depthSegments)}}class L extends S.a{constructor(t=1,e=1,n=1,i=1){super(),this.type=\\\\\\\"PlaneGeometry\\\\\\\",this.parameters={width:t,height:e,widthSegments:n,heightSegments:i};const r=t/2,s=e/2,o=Math.floor(n),a=Math.floor(i),l=o+1,c=a+1,u=t/o,h=e/a,d=[],p=[],_=[],m=[];for(let t=0;t<c;t++){const e=t*h-s;for(let n=0;n<l;n++){const i=n*u-r;p.push(i,-e,0),_.push(0,0,1),m.push(n/o),m.push(1-t/a)}}for(let t=0;t<a;t++)for(let e=0;e<o;e++){const n=e+l*t,i=e+l*(t+1),r=e+1+l*(t+1),s=e+1+l*t;d.push(n,i,s),d.push(i,r,s)}this.setIndex(d),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(p,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new C.c(_,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(m,2))}static fromJSON(t){return new L(t.width,t.height,t.widthSegments,t.heightSegments)}}var O=n(12);function R(t){const e={};for(const n in t){e[n]={};for(const i in t[n]){const r=t[n][i];r&&(r.isColor||r.isMatrix3||r.isMatrix4||r.isVector2||r.isVector3||r.isVector4||r.isTexture||r.isQuaternion)?e[n][i]=r.clone():Array.isArray(r)?e[n][i]=r.slice():e[n][i]=r}}return e}function P(t){const e={};for(let n=0;n<t.length;n++){const i=R(t[n]);for(const t in i)e[t]=i[t]}return e}const I={clone:R,merge:P};class F extends O.a{constructor(t){super(),this.type=\\\\\\\"ShaderMaterial\\\\\\\",this.defines={},this.uniforms={},this.vertexShader=\\\\\\\"\\\\nvoid main() {\\\\n\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n}\\\\n\\\\\\\",this.fragmentShader=\\\\\\\"\\\\nvoid main() {\\\\n\\\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\\\n}\\\\n\\\\\\\",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!==t&&(void 0!==t.attributes&&console.error(\\\\\\\"THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.\\\\\\\"),this.setValues(t))}copy(t){return super.copy(t),this.fragmentShader=t.fragmentShader,this.vertexShader=t.vertexShader,this.uniforms=R(t.uniforms),this.defines=Object.assign({},t.defines),this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.lights=t.lights,this.clipping=t.clipping,this.extensions=Object.assign({},t.extensions),this.glslVersion=t.glslVersion,this}toJSON(t){const e=super.toJSON(t);e.glslVersion=this.glslVersion,e.uniforms={};for(const n in this.uniforms){const i=this.uniforms[n].value;i&&i.isTexture?e.uniforms[n]={type:\\\\\\\"t\\\\\\\",value:i.toJSON(t).uuid}:i&&i.isColor?e.uniforms[n]={type:\\\\\\\"c\\\\\\\",value:i.getHex()}:i&&i.isVector2?e.uniforms[n]={type:\\\\\\\"v2\\\\\\\",value:i.toArray()}:i&&i.isVector3?e.uniforms[n]={type:\\\\\\\"v3\\\\\\\",value:i.toArray()}:i&&i.isVector4?e.uniforms[n]={type:\\\\\\\"v4\\\\\\\",value:i.toArray()}:i&&i.isMatrix3?e.uniforms[n]={type:\\\\\\\"m3\\\\\\\",value:i.toArray()}:i&&i.isMatrix4?e.uniforms[n]={type:\\\\\\\"m4\\\\\\\",value:i.toArray()}:e.uniforms[n]={value:i}}Object.keys(this.defines).length>0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;const n={};for(const t in this.extensions)!0===this.extensions[t]&&(n[t]=!0);return Object.keys(n).length>0&&(e.extensions=n),e}}F.prototype.isShaderMaterial=!0;var D=n(6),k=n(14),B=\\\\\\\"\\\\n#ifdef USE_SHADOWMAP\\\\n\\\\n\\\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\\\n\\\\n\\\\t\\\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\\\n\\\\n\\\\t\\\\tstruct DirectionalLightShadow {\\\\n\\\\t\\\\t\\\\tfloat shadowBias;\\\\n\\\\t\\\\t\\\\tfloat shadowNormalBias;\\\\n\\\\t\\\\t\\\\tfloat shadowRadius;\\\\n\\\\t\\\\t\\\\tvec2 shadowMapSize;\\\\n\\\\t\\\\t};\\\\n\\\\n\\\\t\\\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\\\n\\\\n\\\\t\\\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\\\n\\\\n\\\\t\\\\tstruct SpotLightShadow {\\\\n\\\\t\\\\t\\\\tfloat shadowBias;\\\\n\\\\t\\\\t\\\\tfloat shadowNormalBias;\\\\n\\\\t\\\\t\\\\tfloat shadowRadius;\\\\n\\\\t\\\\t\\\\tvec2 shadowMapSize;\\\\n\\\\t\\\\t};\\\\n\\\\n\\\\t\\\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\\\n\\\\n\\\\t\\\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\\\n\\\\n\\\\t\\\\tstruct PointLightShadow {\\\\n\\\\t\\\\t\\\\tfloat shadowBias;\\\\n\\\\t\\\\t\\\\tfloat shadowNormalBias;\\\\n\\\\t\\\\t\\\\tfloat shadowRadius;\\\\n\\\\t\\\\t\\\\tvec2 shadowMapSize;\\\\n\\\\t\\\\t\\\\tfloat shadowCameraNear;\\\\n\\\\t\\\\t\\\\tfloat shadowCameraFar;\\\\n\\\\t\\\\t};\\\\n\\\\n\\\\t\\\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t/*\\\\n\\\\t#if NUM_RECT_AREA_LIGHTS > 0\\\\n\\\\n\\\\t\\\\t// TODO (abelnation): create uniforms for area light shadows\\\\n\\\\n\\\\t#endif\\\\n\\\\t*/\\\\n\\\\n\\\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\\\n\\\\n\\\\t\\\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\\\\n\\\\n\\\\t\\\\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\\\\n\\\\n\\\\t\\\\tfloat occlusion = 1.0;\\\\n\\\\n\\\\t\\\\tvec2 distribution = texture2DDistribution( shadow, uv );\\\\n\\\\n\\\\t\\\\tfloat hard_shadow = step( compare , distribution.x ); // Hard Shadow\\\\n\\\\n\\\\t\\\\tif (hard_shadow != 1.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\tfloat distance = compare - distribution.x ;\\\\n\\\\t\\\\t\\\\tfloat variance = max( 0.00000, distribution.y * distribution.y );\\\\n\\\\t\\\\t\\\\tfloat softness_probability = variance / (variance + distance * distance ); // Chebeyshevs inequality\\\\n\\\\t\\\\t\\\\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 ); // 0.3 reduces light bleed\\\\n\\\\t\\\\t\\\\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn occlusion;\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\\\n\\\\n\\\\t\\\\tfloat shadow = 1.0;\\\\n\\\\n\\\\t\\\\tshadowCoord.xyz /= shadowCoord.w;\\\\n\\\\t\\\\tshadowCoord.z += shadowBias;\\\\n\\\\n\\\\t\\\\t// if ( something && something ) breaks ATI OpenGL shader compiler\\\\n\\\\t\\\\t// if ( all( something, something ) ) using this instead\\\\n\\\\n\\\\t\\\\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\\\\n\\\\t\\\\tbool inFrustum = all( inFrustumVec );\\\\n\\\\n\\\\t\\\\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\\\\n\\\\n\\\\t\\\\tbool frustumTest = all( frustumTestVec );\\\\n\\\\n\\\\t\\\\tif ( frustumTest ) {\\\\n\\\\n\\\\t\\\\t#if defined( SHADOWMAP_TYPE_PCF )\\\\n\\\\n\\\\t\\\\t\\\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\\\n\\\\n\\\\t\\\\t\\\\tfloat dx0 = - texelSize.x * shadowRadius;\\\\n\\\\t\\\\t\\\\tfloat dy0 = - texelSize.y * shadowRadius;\\\\n\\\\t\\\\t\\\\tfloat dx1 = + texelSize.x * shadowRadius;\\\\n\\\\t\\\\t\\\\tfloat dy1 = + texelSize.y * shadowRadius;\\\\n\\\\t\\\\t\\\\tfloat dx2 = dx0 / 2.0;\\\\n\\\\t\\\\t\\\\tfloat dy2 = dy0 / 2.0;\\\\n\\\\t\\\\t\\\\tfloat dx3 = dx1 / 2.0;\\\\n\\\\t\\\\t\\\\tfloat dy3 = dy1 / 2.0;\\\\n\\\\n\\\\t\\\\t\\\\tshadow = (\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\\\n\\\\t\\\\t\\\\t) * ( 1.0 / 17.0 );\\\\n\\\\n\\\\t\\\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\\\n\\\\n\\\\t\\\\t\\\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\\\n\\\\t\\\\t\\\\tfloat dx = texelSize.x;\\\\n\\\\t\\\\t\\\\tfloat dy = texelSize.y;\\\\n\\\\n\\\\t\\\\t\\\\tvec2 uv = shadowCoord.xy;\\\\n\\\\t\\\\t\\\\tvec2 f = fract( uv * shadowMapSize + 0.5 );\\\\n\\\\t\\\\t\\\\tuv -= f * texelSize;\\\\n\\\\n\\\\t\\\\t\\\\tshadow = (\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \\\\n\\\\t\\\\t\\\\t\\\\t\\\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t f.x ) +\\\\n\\\\t\\\\t\\\\t\\\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \\\\n\\\\t\\\\t\\\\t\\\\t\\\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t f.x ) +\\\\n\\\\t\\\\t\\\\t\\\\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \\\\n\\\\t\\\\t\\\\t\\\\t\\\\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t f.y ) +\\\\n\\\\t\\\\t\\\\t\\\\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \\\\n\\\\t\\\\t\\\\t\\\\t\\\\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t f.y ) +\\\\n\\\\t\\\\t\\\\t\\\\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t  texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t  f.x ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t  texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t  f.x ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t f.y )\\\\n\\\\t\\\\t\\\\t) * ( 1.0 / 9.0 );\\\\n\\\\n\\\\t\\\\t#elif defined( SHADOWMAP_TYPE_VSM )\\\\n\\\\n\\\\t\\\\t\\\\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\\\\n\\\\n\\\\t\\\\t#else // no percentage-closer filtering:\\\\n\\\\n\\\\t\\\\t\\\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn shadow;\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\t// cubeToUV() maps a 3D direction vector suitable for cube texture mapping to a 2D\\\\n\\\\t// vector suitable for 2D texture mapping. This code uses the following layout for the\\\\n\\\\t// 2D texture:\\\\n\\\\t//\\\\n\\\\t// xzXZ\\\\n\\\\t//  y Y\\\\n\\\\t//\\\\n\\\\t// Y - Positive y direction\\\\n\\\\t// y - Negative y direction\\\\n\\\\t// X - Positive x direction\\\\n\\\\t// x - Negative x direction\\\\n\\\\t// Z - Positive z direction\\\\n\\\\t// z - Negative z direction\\\\n\\\\t//\\\\n\\\\t// Source and test bed:\\\\n\\\\t// https://gist.github.com/tschw/da10c43c467ce8afd0c4\\\\n\\\\n\\\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\\\n\\\\n\\\\t\\\\t// Number of texels to avoid at the edge of each square\\\\n\\\\n\\\\t\\\\tvec3 absV = abs( v );\\\\n\\\\n\\\\t\\\\t// Intersect unit cube\\\\n\\\\n\\\\t\\\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\\\n\\\\t\\\\tabsV *= scaleToCube;\\\\n\\\\n\\\\t\\\\t// Apply scale to avoid seams\\\\n\\\\n\\\\t\\\\t// two texels less per square (one texel will do for NEAREST)\\\\n\\\\t\\\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\\\n\\\\n\\\\t\\\\t// Unwrap\\\\n\\\\n\\\\t\\\\t// space: -1 ... 1 range for each square\\\\n\\\\t\\\\t//\\\\n\\\\t\\\\t// #X##\\\\t\\\\tdim    := ( 4 , 2 )\\\\n\\\\t\\\\t//  # #\\\\t\\\\tcenter := ( 1 , 1 )\\\\n\\\\n\\\\t\\\\tvec2 planar = v.xy;\\\\n\\\\n\\\\t\\\\tfloat almostATexel = 1.5 * texelSizeY;\\\\n\\\\t\\\\tfloat almostOne = 1.0 - almostATexel;\\\\n\\\\n\\\\t\\\\tif ( absV.z >= almostOne ) {\\\\n\\\\n\\\\t\\\\t\\\\tif ( v.z > 0.0 )\\\\n\\\\t\\\\t\\\\t\\\\tplanar.x = 4.0 - v.x;\\\\n\\\\n\\\\t\\\\t} else if ( absV.x >= almostOne ) {\\\\n\\\\n\\\\t\\\\t\\\\tfloat signX = sign( v.x );\\\\n\\\\t\\\\t\\\\tplanar.x = v.z * signX + 2.0 * signX;\\\\n\\\\n\\\\t\\\\t} else if ( absV.y >= almostOne ) {\\\\n\\\\n\\\\t\\\\t\\\\tfloat signY = sign( v.y );\\\\n\\\\t\\\\t\\\\tplanar.x = v.x + 2.0 * signY + 2.0;\\\\n\\\\t\\\\t\\\\tplanar.y = v.z * signY - 2.0;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t// Transform to UV space\\\\n\\\\n\\\\t\\\\t// scale := 0.5 / dim\\\\n\\\\t\\\\t// translate := ( center + 0.5 ) / dim\\\\n\\\\t\\\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\\\n\\\\n\\\\t\\\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\\\n\\\\n\\\\t\\\\t// for point lights, the uniform @vShadowCoord is re-purposed to hold\\\\n\\\\t\\\\t// the vector from the light to the world-space position of the fragment.\\\\n\\\\t\\\\tvec3 lightToPosition = shadowCoord.xyz;\\\\n\\\\n\\\\t\\\\t// dp = normalized distance from light to fragment position\\\\n\\\\t\\\\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear ); // need to clamp?\\\\n\\\\t\\\\tdp += shadowBias;\\\\n\\\\n\\\\t\\\\t// bd3D = base direction 3D\\\\n\\\\t\\\\tvec3 bd3D = normalize( lightToPosition );\\\\n\\\\n\\\\t\\\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\\\\n\\\\n\\\\t\\\\t\\\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\\\n\\\\n\\\\t\\\\t\\\\treturn (\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\\\n\\\\t\\\\t\\\\t) * ( 1.0 / 9.0 );\\\\n\\\\n\\\\t\\\\t#else // no percentage-closer filtering\\\\n\\\\n\\\\t\\\\t\\\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t}\\\\n\\\\n#endif\\\\n\\\\\\\";const z={alphamap_fragment:\\\\\\\"\\\\n#ifdef USE_ALPHAMAP\\\\n\\\\n\\\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\\\n\\\\n#endif\\\\n\\\\\\\",alphamap_pars_fragment:\\\\\\\"\\\\n#ifdef USE_ALPHAMAP\\\\n\\\\n\\\\tuniform sampler2D alphaMap;\\\\n\\\\n#endif\\\\n\\\\\\\",alphatest_fragment:\\\\\\\"\\\\n#ifdef USE_ALPHATEST\\\\n\\\\n\\\\tif ( diffuseColor.a < alphaTest ) discard;\\\\n\\\\n#endif\\\\n\\\\\\\",alphatest_pars_fragment:\\\\\\\"\\\\n#ifdef USE_ALPHATEST\\\\n\\\\tuniform float alphaTest;\\\\n#endif\\\\n\\\\\\\",aomap_fragment:\\\\\\\"\\\\n#ifdef USE_AOMAP\\\\n\\\\n\\\\t// reads channel R, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\\\\n\\\\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\\\n\\\\n\\\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\\\n\\\\n\\\\t#if defined( USE_ENVMAP ) && defined( STANDARD )\\\\n\\\\n\\\\t\\\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\\\n\\\\n\\\\t\\\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",aomap_pars_fragment:\\\\\\\"\\\\n#ifdef USE_AOMAP\\\\n\\\\n\\\\tuniform sampler2D aoMap;\\\\n\\\\tuniform float aoMapIntensity;\\\\n\\\\n#endif\\\\n\\\\\\\",begin_vertex:\\\\\\\"\\\\nvec3 transformed = vec3( position );\\\\n\\\\\\\",beginnormal_vertex:\\\\\\\"\\\\nvec3 objectNormal = vec3( normal );\\\\n\\\\n#ifdef USE_TANGENT\\\\n\\\\n\\\\tvec3 objectTangent = vec3( tangent.xyz );\\\\n\\\\n#endif\\\\n\\\\\\\",bsdfs:'\\\\n\\\\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\\\\n\\\\n\\\\treturn RECIPROCAL_PI * diffuseColor;\\\\n\\\\n} // validated\\\\n\\\\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\\\\n\\\\n\\\\t// Original approximation by Christophe Schlick \\\\'94\\\\n\\\\t// float fresnel = pow( 1.0 - dotVH, 5.0 );\\\\n\\\\n\\\\t// Optimized variant (presented by Epic at SIGGRAPH \\\\'13)\\\\n\\\\t// https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf\\\\n\\\\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\\\\n\\\\n\\\\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\\\\n\\\\n} // validated\\\\n\\\\n// Moving Frostbite to Physically Based Rendering 3.0 - page 12, listing 2\\\\n// https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\\\\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\\\n\\\\n\\\\tfloat a2 = pow2( alpha );\\\\n\\\\n\\\\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\\\n\\\\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\\\n\\\\n\\\\treturn 0.5 / max( gv + gl, EPSILON );\\\\n\\\\n}\\\\n\\\\n// Microfacet Models for Refraction through Rough Surfaces - equation (33)\\\\n// http://graphicrants.blogspot.com/2013/08/specular-brdf-reference.html\\\\n// alpha is \\\\\\\"roughness squared\\\\\\\" in Disney’s reparameterization\\\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\\\n\\\\n\\\\tfloat a2 = pow2( alpha );\\\\n\\\\n\\\\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0; // avoid alpha = 0 with dotNH = 1\\\\n\\\\n\\\\treturn RECIPROCAL_PI * a2 / pow2( denom );\\\\n\\\\n}\\\\n\\\\n// GGX Distribution, Schlick Fresnel, GGX_SmithCorrelated Visibility\\\\nvec3 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 ) {\\\\n\\\\n\\\\tfloat alpha = pow2( roughness ); // UE4\\\\'s roughness\\\\n\\\\n\\\\tvec3 halfDir = normalize( lightDir + viewDir );\\\\n\\\\n\\\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\\\n\\\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\\\n\\\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\\\n\\\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\\\n\\\\n\\\\tvec3 F = F_Schlick( f0, f90, dotVH );\\\\n\\\\n\\\\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\\\n\\\\n\\\\tfloat D = D_GGX( alpha, dotNH );\\\\n\\\\n\\\\treturn F * ( V * D );\\\\n\\\\n}\\\\n\\\\n// Rect Area Light\\\\n\\\\n// Real-Time Polygonal-Light Shading with Linearly Transformed Cosines\\\\n// by Eric Heitz, Jonathan Dupuy, Stephen Hill and David Neubelt\\\\n// code: https://github.com/selfshadow/ltc_code/\\\\n\\\\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\\\\n\\\\n\\\\tconst float LUT_SIZE = 64.0;\\\\n\\\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\\\n\\\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\\\n\\\\n\\\\tfloat dotNV = saturate( dot( N, V ) );\\\\n\\\\n\\\\t// texture parameterized by sqrt( GGX alpha ) and sqrt( 1 - cos( theta ) )\\\\n\\\\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\\\\n\\\\n\\\\tuv = uv * LUT_SCALE + LUT_BIAS;\\\\n\\\\n\\\\treturn uv;\\\\n\\\\n}\\\\n\\\\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\\\\n\\\\n\\\\t// Real-Time Area Lighting: a Journey from Research to Production (p.102)\\\\n\\\\t// An approximation of the form factor of a horizon-clipped rectangle.\\\\n\\\\n\\\\tfloat l = length( f );\\\\n\\\\n\\\\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\\\\n\\\\n}\\\\n\\\\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\\\\n\\\\n\\\\tfloat x = dot( v1, v2 );\\\\n\\\\n\\\\tfloat y = abs( x );\\\\n\\\\n\\\\t// rational polynomial approximation to theta / sin( theta ) / 2PI\\\\n\\\\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\\\\n\\\\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\\\\n\\\\tfloat v = a / b;\\\\n\\\\n\\\\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\\\\n\\\\n\\\\treturn cross( v1, v2 ) * theta_sintheta;\\\\n\\\\n}\\\\n\\\\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\\\\n\\\\n\\\\t// bail if point is on back side of plane of light\\\\n\\\\t// assumes ccw winding order of light vertices\\\\n\\\\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\\\\n\\\\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\\\\n\\\\tvec3 lightNormal = cross( v1, v2 );\\\\n\\\\n\\\\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\\\\n\\\\n\\\\t// construct orthonormal basis around N\\\\n\\\\tvec3 T1, T2;\\\\n\\\\tT1 = normalize( V - N * dot( V, N ) );\\\\n\\\\tT2 = - cross( N, T1 ); // negated from paper; possibly due to a different handedness of world coordinate system\\\\n\\\\n\\\\t// compute transform\\\\n\\\\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\\\\n\\\\n\\\\t// transform rect\\\\n\\\\tvec3 coords[ 4 ];\\\\n\\\\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\\\\n\\\\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\\\\n\\\\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\\\\n\\\\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\\\\n\\\\n\\\\t// project rect onto sphere\\\\n\\\\tcoords[ 0 ] = normalize( coords[ 0 ] );\\\\n\\\\tcoords[ 1 ] = normalize( coords[ 1 ] );\\\\n\\\\tcoords[ 2 ] = normalize( coords[ 2 ] );\\\\n\\\\tcoords[ 3 ] = normalize( coords[ 3 ] );\\\\n\\\\n\\\\t// calculate vector form factor\\\\n\\\\tvec3 vectorFormFactor = vec3( 0.0 );\\\\n\\\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\\\\n\\\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\\\\n\\\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\\\\n\\\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\\\\n\\\\n\\\\t// adjust for horizon clipping\\\\n\\\\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\\\\n\\\\n/*\\\\n\\\\t// alternate method of adjusting for horizon clipping (see referece)\\\\n\\\\t// refactoring required\\\\n\\\\tfloat len = length( vectorFormFactor );\\\\n\\\\tfloat z = vectorFormFactor.z / len;\\\\n\\\\n\\\\tconst float LUT_SIZE = 64.0;\\\\n\\\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\\\n\\\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\\\n\\\\n\\\\t// tabulated horizon-clipped sphere, apparently...\\\\n\\\\tvec2 uv = vec2( z * 0.5 + 0.5, len );\\\\n\\\\tuv = uv * LUT_SCALE + LUT_BIAS;\\\\n\\\\n\\\\tfloat scale = texture2D( ltc_2, uv ).w;\\\\n\\\\n\\\\tfloat result = len * scale;\\\\n*/\\\\n\\\\n\\\\treturn vec3( result );\\\\n\\\\n}\\\\n\\\\n// End Rect Area Light\\\\n\\\\n\\\\nfloat G_BlinnPhong_Implicit( /* const in float dotNL, const in float dotNV */ ) {\\\\n\\\\n\\\\t// geometry term is (n dot l)(n dot v) / 4(n dot l)(n dot v)\\\\n\\\\treturn 0.25;\\\\n\\\\n}\\\\n\\\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\\\n\\\\n\\\\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\\\\n\\\\n}\\\\n\\\\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\\\\n\\\\n\\\\tvec3 halfDir = normalize( lightDir + viewDir );\\\\n\\\\n\\\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\\\n\\\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\\\n\\\\n\\\\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\\\\n\\\\n\\\\tfloat G = G_BlinnPhong_Implicit( /* dotNL, dotNV */ );\\\\n\\\\n\\\\tfloat D = D_BlinnPhong( shininess, dotNH );\\\\n\\\\n\\\\treturn F * ( G * D );\\\\n\\\\n} // validated\\\\n\\\\n#if defined( USE_SHEEN )\\\\n\\\\n// https://github.com/google/filament/blob/master/shaders/src/brdf.fs\\\\nfloat D_Charlie( float roughness, float dotNH ) {\\\\n\\\\n\\\\tfloat alpha = pow2( roughness );\\\\n\\\\n\\\\t// Estevez and Kulla 2017, \\\\\\\"Production Friendly Microfacet Sheen BRDF\\\\\\\"\\\\n\\\\tfloat invAlpha = 1.0 / alpha;\\\\n\\\\tfloat cos2h = dotNH * dotNH;\\\\n\\\\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 ); // 2^(-14/2), so sin2h^2 > 0 in fp16\\\\n\\\\n\\\\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\\\\n\\\\n}\\\\n\\\\n// https://github.com/google/filament/blob/master/shaders/src/brdf.fs\\\\nfloat V_Neubelt( float dotNV, float dotNL ) {\\\\n\\\\n\\\\t// Neubelt and Pettineo 2013, \\\\\\\"Crafting a Next-gen Material Pipeline for The Order: 1886\\\\\\\"\\\\n\\\\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\\\\n\\\\n}\\\\n\\\\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenTint, const in float sheenRoughness ) {\\\\n\\\\n\\\\tvec3 halfDir = normalize( lightDir + viewDir );\\\\n\\\\n\\\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\\\n\\\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\\\n\\\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\\\n\\\\n\\\\tfloat D = D_Charlie( sheenRoughness, dotNH );\\\\n\\\\tfloat V = V_Neubelt( dotNV, dotNL );\\\\n\\\\n\\\\treturn sheenTint * ( D * V );\\\\n\\\\n}\\\\n\\\\n#endif\\\\n',bumpmap_pars_fragment:\\\\\\\"\\\\n#ifdef USE_BUMPMAP\\\\n\\\\n\\\\tuniform sampler2D bumpMap;\\\\n\\\\tuniform float bumpScale;\\\\n\\\\n\\\\t// Bump Mapping Unparametrized Surfaces on the GPU by Morten S. Mikkelsen\\\\n\\\\t// http://api.unrealengine.com/attachments/Engine/Rendering/LightingAndShadows/BumpMappingWithoutTangentSpace/mm_sfgrad_bump.pdf\\\\n\\\\n\\\\t// Evaluate the derivative of the height w.r.t. screen-space using forward differencing (listing 2)\\\\n\\\\n\\\\tvec2 dHdxy_fwd() {\\\\n\\\\n\\\\t\\\\tvec2 dSTdx = dFdx( vUv );\\\\n\\\\t\\\\tvec2 dSTdy = dFdy( vUv );\\\\n\\\\n\\\\t\\\\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\\\n\\\\t\\\\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\\\n\\\\t\\\\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\\\\n\\\\n\\\\t\\\\treturn vec2( dBx, dBy );\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\\\\n\\\\n\\\\t\\\\t// Workaround for Adreno 3XX dFd*( vec3 ) bug. See #9988\\\\n\\\\n\\\\t\\\\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\\\\n\\\\t\\\\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\\\\n\\\\t\\\\tvec3 vN = surf_norm;\\\\t\\\\t// normalized\\\\n\\\\n\\\\t\\\\tvec3 R1 = cross( vSigmaY, vN );\\\\n\\\\t\\\\tvec3 R2 = cross( vN, vSigmaX );\\\\n\\\\n\\\\t\\\\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\\\\n\\\\n\\\\t\\\\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\\\n\\\\t\\\\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\\\n\\\\n\\\\t}\\\\n\\\\n#endif\\\\n\\\\\\\",clipping_planes_fragment:\\\\\\\"\\\\n#if NUM_CLIPPING_PLANES > 0\\\\n\\\\n\\\\tvec4 plane;\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\\\n\\\\n\\\\t\\\\tplane = clippingPlanes[ i ];\\\\n\\\\t\\\\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n\\\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\\\n\\\\n\\\\t\\\\tbool clipped = true;\\\\n\\\\n\\\\t\\\\t#pragma unroll_loop_start\\\\n\\\\t\\\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\\\n\\\\n\\\\t\\\\t\\\\tplane = clippingPlanes[ i ];\\\\n\\\\t\\\\t\\\\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\t#pragma unroll_loop_end\\\\n\\\\n\\\\t\\\\tif ( clipped ) discard;\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",clipping_planes_pars_fragment:\\\\\\\"\\\\n#if NUM_CLIPPING_PLANES > 0\\\\n\\\\n\\\\tvarying vec3 vClipPosition;\\\\n\\\\n\\\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\\\n\\\\n#endif\\\\n\\\\\\\",clipping_planes_pars_vertex:\\\\\\\"\\\\n#if NUM_CLIPPING_PLANES > 0\\\\n\\\\n\\\\tvarying vec3 vClipPosition;\\\\n\\\\n#endif\\\\n\\\\\\\",clipping_planes_vertex:\\\\\\\"\\\\n#if NUM_CLIPPING_PLANES > 0\\\\n\\\\n\\\\tvClipPosition = - mvPosition.xyz;\\\\n\\\\n#endif\\\\n\\\\\\\",color_fragment:\\\\\\\"\\\\n#if defined( USE_COLOR_ALPHA )\\\\n\\\\n\\\\tdiffuseColor *= vColor;\\\\n\\\\n#elif defined( USE_COLOR )\\\\n\\\\n\\\\tdiffuseColor.rgb *= vColor;\\\\n\\\\n#endif\\\\n\\\\\\\",color_pars_fragment:\\\\\\\"\\\\n#if defined( USE_COLOR_ALPHA )\\\\n\\\\n\\\\tvarying vec4 vColor;\\\\n\\\\n#elif defined( USE_COLOR )\\\\n\\\\n\\\\tvarying vec3 vColor;\\\\n\\\\n#endif\\\\n\\\\\\\",color_pars_vertex:\\\\\\\"\\\\n#if defined( USE_COLOR_ALPHA )\\\\n\\\\n\\\\tvarying vec4 vColor;\\\\n\\\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\\\n\\\\n\\\\tvarying vec3 vColor;\\\\n\\\\n#endif\\\\n\\\\\\\",color_vertex:\\\\\\\"\\\\n#if defined( USE_COLOR_ALPHA )\\\\n\\\\n\\\\tvColor = vec4( 1.0 );\\\\n\\\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\\\n\\\\n\\\\tvColor = vec3( 1.0 );\\\\n\\\\n#endif\\\\n\\\\n#ifdef USE_COLOR\\\\n\\\\n\\\\tvColor *= color;\\\\n\\\\n#endif\\\\n\\\\n#ifdef USE_INSTANCING_COLOR\\\\n\\\\n\\\\tvColor.xyz *= instanceColor.xyz;\\\\n\\\\n#endif\\\\n\\\\\\\",common:\\\\\\\"\\\\n#define PI 3.141592653589793\\\\n#define PI2 6.283185307179586\\\\n#define PI_HALF 1.5707963267948966\\\\n#define RECIPROCAL_PI 0.3183098861837907\\\\n#define RECIPROCAL_PI2 0.15915494309189535\\\\n#define EPSILON 1e-6\\\\n\\\\n#ifndef saturate\\\\n// <tonemapping_pars_fragment> may have defined saturate() already\\\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\\\n#endif\\\\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\\\\n\\\\nfloat pow2( const in float x ) { return x*x; }\\\\nfloat pow3( const in float x ) { return x*x*x; }\\\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\\\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\\\\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\\\\n\\\\n// expects values in the range of [0,1]x[0,1], returns values in the [0,1] range.\\\\n// do not collapse into a single function per: http://byteblacksmith.com/improvements-to-the-canonical-one-liner-glsl-rand-for-opengl-es-2-0/\\\\nhighp float rand( const in vec2 uv ) {\\\\n\\\\n\\\\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\\\n\\\\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\\\n\\\\n\\\\treturn fract( sin( sn ) * c );\\\\n\\\\n}\\\\n\\\\n#ifdef HIGH_PRECISION\\\\n\\\\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\\\\n#else\\\\n\\\\tfloat precisionSafeLength( vec3 v ) {\\\\n\\\\t\\\\tfloat maxComponent = max3( abs( v ) );\\\\n\\\\t\\\\treturn length( v / maxComponent ) * maxComponent;\\\\n\\\\t}\\\\n#endif\\\\n\\\\nstruct IncidentLight {\\\\n\\\\tvec3 color;\\\\n\\\\tvec3 direction;\\\\n\\\\tbool visible;\\\\n};\\\\n\\\\nstruct ReflectedLight {\\\\n\\\\tvec3 directDiffuse;\\\\n\\\\tvec3 directSpecular;\\\\n\\\\tvec3 indirectDiffuse;\\\\n\\\\tvec3 indirectSpecular;\\\\n};\\\\n\\\\nstruct GeometricContext {\\\\n\\\\tvec3 position;\\\\n\\\\tvec3 normal;\\\\n\\\\tvec3 viewDir;\\\\n#ifdef USE_CLEARCOAT\\\\n\\\\tvec3 clearcoatNormal;\\\\n#endif\\\\n};\\\\n\\\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\\\n\\\\n\\\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\\\n\\\\n}\\\\n\\\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\\\n\\\\n\\\\t// dir can be either a direction vector or a normal vector\\\\n\\\\t// upper-left 3x3 of matrix is assumed to be orthogonal\\\\n\\\\n\\\\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\\\n\\\\n}\\\\n\\\\nmat3 transposeMat3( const in mat3 m ) {\\\\n\\\\n\\\\tmat3 tmp;\\\\n\\\\n\\\\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\\\\n\\\\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\\\\n\\\\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\\\\n\\\\n\\\\treturn tmp;\\\\n\\\\n}\\\\n\\\\n// https://en.wikipedia.org/wiki/Relative_luminance\\\\nfloat linearToRelativeLuminance( const in vec3 color ) {\\\\n\\\\n\\\\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\\\\n\\\\n\\\\treturn dot( weights, color.rgb );\\\\n\\\\n}\\\\n\\\\nbool isPerspectiveMatrix( mat4 m ) {\\\\n\\\\n\\\\treturn m[ 2 ][ 3 ] == - 1.0;\\\\n\\\\n}\\\\n\\\\nvec2 equirectUv( in vec3 dir ) {\\\\n\\\\n\\\\t// dir is assumed to be unit length\\\\n\\\\n\\\\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\\\\n\\\\n\\\\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\\\n\\\\n\\\\treturn vec2( u, v );\\\\n\\\\n}\\\\n\\\\\\\",cube_uv_reflection_fragment:\\\\\\\"\\\\n#ifdef ENVMAP_TYPE_CUBE_UV\\\\n\\\\n\\\\t#define cubeUV_maxMipLevel 8.0\\\\n\\\\t#define cubeUV_minMipLevel 4.0\\\\n\\\\t#define cubeUV_maxTileSize 256.0\\\\n\\\\t#define cubeUV_minTileSize 16.0\\\\n\\\\n\\\\t// These shader functions convert between the UV coordinates of a single face of\\\\n\\\\t// a cubemap, the 0-5 integer index of a cube face, and the direction vector for\\\\n\\\\t// sampling a textureCube (not generally normalized ).\\\\n\\\\n\\\\tfloat getFace( vec3 direction ) {\\\\n\\\\n\\\\t\\\\tvec3 absDirection = abs( direction );\\\\n\\\\n\\\\t\\\\tfloat face = - 1.0;\\\\n\\\\n\\\\t\\\\tif ( absDirection.x > absDirection.z ) {\\\\n\\\\n\\\\t\\\\t\\\\tif ( absDirection.x > absDirection.y )\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tface = direction.x > 0.0 ? 0.0 : 3.0;\\\\n\\\\n\\\\t\\\\t\\\\telse\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\\\n\\\\n\\\\t\\\\t} else {\\\\n\\\\n\\\\t\\\\t\\\\tif ( absDirection.z > absDirection.y )\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tface = direction.z > 0.0 ? 2.0 : 5.0;\\\\n\\\\n\\\\t\\\\t\\\\telse\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn face;\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\t// RH coordinate system; PMREM face-indexing convention\\\\n\\\\tvec2 getUV( vec3 direction, float face ) {\\\\n\\\\n\\\\t\\\\tvec2 uv;\\\\n\\\\n\\\\t\\\\tif ( face == 0.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\tuv = vec2( direction.z, direction.y ) / abs( direction.x ); // pos x\\\\n\\\\n\\\\t\\\\t} else if ( face == 1.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y ); // pos y\\\\n\\\\n\\\\t\\\\t} else if ( face == 2.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\tuv = vec2( - direction.x, direction.y ) / abs( direction.z ); // pos z\\\\n\\\\n\\\\t\\\\t} else if ( face == 3.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\tuv = vec2( - direction.z, direction.y ) / abs( direction.x ); // neg x\\\\n\\\\n\\\\t\\\\t} else if ( face == 4.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\tuv = vec2( - direction.x, direction.z ) / abs( direction.y ); // neg y\\\\n\\\\n\\\\t\\\\t} else {\\\\n\\\\n\\\\t\\\\t\\\\tuv = vec2( direction.x, direction.y ) / abs( direction.z ); // neg z\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn 0.5 * ( uv + 1.0 );\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\\\\n\\\\n\\\\t\\\\tfloat face = getFace( direction );\\\\n\\\\n\\\\t\\\\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\\\\n\\\\n\\\\t\\\\tmipInt = max( mipInt, cubeUV_minMipLevel );\\\\n\\\\n\\\\t\\\\tfloat faceSize = exp2( mipInt );\\\\n\\\\n\\\\t\\\\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\\\\n\\\\n\\\\t\\\\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\\\\n\\\\n\\\\t\\\\tvec2 f = fract( uv );\\\\n\\\\n\\\\t\\\\tuv += 0.5 - f;\\\\n\\\\n\\\\t\\\\tif ( face > 2.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\tuv.y += faceSize;\\\\n\\\\n\\\\t\\\\t\\\\tface -= 3.0;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tuv.x += face * faceSize;\\\\n\\\\n\\\\t\\\\tif ( mipInt < cubeUV_maxMipLevel ) {\\\\n\\\\n\\\\t\\\\t\\\\tuv.y += 2.0 * cubeUV_maxTileSize;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\\\\n\\\\n\\\\t\\\\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\\\\n\\\\n\\\\t\\\\tuv *= texelSize;\\\\n\\\\n\\\\t\\\\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\\\n\\\\n\\\\t\\\\tuv.x += texelSize;\\\\n\\\\n\\\\t\\\\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\\\n\\\\n\\\\t\\\\tuv.y += texelSize;\\\\n\\\\n\\\\t\\\\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\\\n\\\\n\\\\t\\\\tuv.x -= texelSize;\\\\n\\\\n\\\\t\\\\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\\\n\\\\n\\\\t\\\\tvec3 tm = mix( tl, tr, f.x );\\\\n\\\\n\\\\t\\\\tvec3 bm = mix( bl, br, f.x );\\\\n\\\\n\\\\t\\\\treturn mix( tm, bm, f.y );\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\t// These defines must match with PMREMGenerator\\\\n\\\\n\\\\t#define r0 1.0\\\\n\\\\t#define v0 0.339\\\\n\\\\t#define m0 - 2.0\\\\n\\\\t#define r1 0.8\\\\n\\\\t#define v1 0.276\\\\n\\\\t#define m1 - 1.0\\\\n\\\\t#define r4 0.4\\\\n\\\\t#define v4 0.046\\\\n\\\\t#define m4 2.0\\\\n\\\\t#define r5 0.305\\\\n\\\\t#define v5 0.016\\\\n\\\\t#define m5 3.0\\\\n\\\\t#define r6 0.21\\\\n\\\\t#define v6 0.0038\\\\n\\\\t#define m6 4.0\\\\n\\\\n\\\\tfloat roughnessToMip( float roughness ) {\\\\n\\\\n\\\\t\\\\tfloat mip = 0.0;\\\\n\\\\n\\\\t\\\\tif ( roughness >= r1 ) {\\\\n\\\\n\\\\t\\\\t\\\\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\\\\n\\\\n\\\\t\\\\t} else if ( roughness >= r4 ) {\\\\n\\\\n\\\\t\\\\t\\\\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\\\\n\\\\n\\\\t\\\\t} else if ( roughness >= r5 ) {\\\\n\\\\n\\\\t\\\\t\\\\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\\\\n\\\\n\\\\t\\\\t} else if ( roughness >= r6 ) {\\\\n\\\\n\\\\t\\\\t\\\\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\\\\n\\\\n\\\\t\\\\t} else {\\\\n\\\\n\\\\t\\\\t\\\\tmip = - 2.0 * log2( 1.16 * roughness ); // 1.16 = 1.79^0.25\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn mip;\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\\\\n\\\\n\\\\t\\\\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\\\\n\\\\n\\\\t\\\\tfloat mipF = fract( mip );\\\\n\\\\n\\\\t\\\\tfloat mipInt = floor( mip );\\\\n\\\\n\\\\t\\\\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\\\\n\\\\n\\\\t\\\\tif ( mipF == 0.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\treturn vec4( color0, 1.0 );\\\\n\\\\n\\\\t\\\\t} else {\\\\n\\\\n\\\\t\\\\t\\\\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\\\\n\\\\n\\\\t\\\\t\\\\treturn vec4( mix( color0, color1, mipF ), 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t}\\\\n\\\\n#endif\\\\n\\\\\\\",defaultnormal_vertex:\\\\\\\"\\\\nvec3 transformedNormal = objectNormal;\\\\n\\\\n#ifdef USE_INSTANCING\\\\n\\\\n\\\\t// this is in lieu of a per-instance normal-matrix\\\\n\\\\t// shear transforms in the instance matrix are not supported\\\\n\\\\n\\\\tmat3 m = mat3( instanceMatrix );\\\\n\\\\n\\\\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\\\\n\\\\n\\\\ttransformedNormal = m * transformedNormal;\\\\n\\\\n#endif\\\\n\\\\ntransformedNormal = normalMatrix * transformedNormal;\\\\n\\\\n#ifdef FLIP_SIDED\\\\n\\\\n\\\\ttransformedNormal = - transformedNormal;\\\\n\\\\n#endif\\\\n\\\\n#ifdef USE_TANGENT\\\\n\\\\n\\\\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\\\n\\\\n\\\\t#ifdef FLIP_SIDED\\\\n\\\\n\\\\t\\\\ttransformedTangent = - transformedTangent;\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",displacementmap_pars_vertex:\\\\\\\"\\\\n#ifdef USE_DISPLACEMENTMAP\\\\n\\\\n\\\\tuniform sampler2D displacementMap;\\\\n\\\\tuniform float displacementScale;\\\\n\\\\tuniform float displacementBias;\\\\n\\\\n#endif\\\\n\\\\\\\",displacementmap_vertex:\\\\\\\"\\\\n#ifdef USE_DISPLACEMENTMAP\\\\n\\\\n\\\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\\\\n\\\\n#endif\\\\n\\\\\\\",emissivemap_fragment:\\\\\\\"\\\\n#ifdef USE_EMISSIVEMAP\\\\n\\\\n\\\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\\\n\\\\n\\\\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\\\\n\\\\n\\\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\\\n\\\\n#endif\\\\n\\\\\\\",emissivemap_pars_fragment:\\\\\\\"\\\\n#ifdef USE_EMISSIVEMAP\\\\n\\\\n\\\\tuniform sampler2D emissiveMap;\\\\n\\\\n#endif\\\\n\\\\\\\",encodings_fragment:\\\\\\\"\\\\ngl_FragColor = linearToOutputTexel( gl_FragColor );\\\\n\\\\\\\",encodings_pars_fragment:\\\\\\\"\\\\n// For a discussion of what this is, please read this: http://lousodrome.net/blog/light/2013/05/26/gamma-correct-and-hdr-rendering-in-a-32-bits-buffer/\\\\n\\\\nvec4 LinearToLinear( in vec4 value ) {\\\\n\\\\treturn value;\\\\n}\\\\n\\\\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\\\\n\\\\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\\\\n}\\\\n\\\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\\\n\\\\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\\\\n}\\\\n\\\\nvec4 sRGBToLinear( in vec4 value ) {\\\\n\\\\treturn 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 );\\\\n}\\\\n\\\\nvec4 LinearTosRGB( in vec4 value ) {\\\\n\\\\treturn 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 );\\\\n}\\\\n\\\\nvec4 RGBEToLinear( in vec4 value ) {\\\\n\\\\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\\\\n}\\\\n\\\\nvec4 LinearToRGBE( in vec4 value ) {\\\\n\\\\tfloat maxComponent = max( max( value.r, value.g ), value.b );\\\\n\\\\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\\\\n\\\\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\\\\n\\\\t// return vec4( value.brg, ( 3.0 + 128.0 ) / 256.0 );\\\\n}\\\\n\\\\n// reference: http://iwasbeingirony.blogspot.ca/2010/06/difference-between-rgbm-and-rgbd.html\\\\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\\\\n\\\\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\\\\n}\\\\n\\\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\\\n\\\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\\\n\\\\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\\\\n\\\\tM = ceil( M * 255.0 ) / 255.0;\\\\n\\\\treturn vec4( value.rgb / ( M * maxRange ), M );\\\\n}\\\\n\\\\n// reference: http://iwasbeingirony.blogspot.ca/2010/06/difference-between-rgbm-and-rgbd.html\\\\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\\\\n\\\\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\\\\n}\\\\n\\\\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\\\\n\\\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\\\n\\\\tfloat D = max( maxRange / maxRGB, 1.0 );\\\\n\\\\t// NOTE: The implementation with min causes the shader to not compile on\\\\n\\\\t// a common Alcatel A502DL in Chrome 78/Android 8.1. Some research suggests \\\\n\\\\t// that the chipset is Mediatek MT6739 w/ IMG PowerVR GE8100 GPU.\\\\n\\\\t// D = min( floor( D ) / 255.0, 1.0 );\\\\n\\\\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\\\\n\\\\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\\\\n}\\\\n\\\\n// LogLuv reference: http://graphicrants.blogspot.ca/2009/04/rgbm-color-encoding.html\\\\n\\\\n// M matrix, for encoding\\\\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\\\\nvec4 LinearToLogLuv( in vec4 value ) {\\\\n\\\\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\\\\n\\\\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\\\\n\\\\tvec4 vResult;\\\\n\\\\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\\\\n\\\\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\\\\n\\\\tvResult.w = fract( Le );\\\\n\\\\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\\\\n\\\\treturn vResult;\\\\n}\\\\n\\\\n// Inverse M matrix, for decoding\\\\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\\\\nvec4 LogLuvToLinear( in vec4 value ) {\\\\n\\\\tfloat Le = value.z * 255.0 + value.w;\\\\n\\\\tvec3 Xp_Y_XYZp;\\\\n\\\\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\\\\n\\\\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\\\\n\\\\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\\\\n\\\\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\\\\n\\\\treturn vec4( max( vRGB, 0.0 ), 1.0 );\\\\n}\\\\n\\\\\\\",envmap_fragment:\\\\\\\"\\\\n#ifdef USE_ENVMAP\\\\n\\\\n\\\\t#ifdef ENV_WORLDPOS\\\\n\\\\n\\\\t\\\\tvec3 cameraToFrag;\\\\n\\\\n\\\\t\\\\tif ( isOrthographic ) {\\\\n\\\\n\\\\t\\\\t\\\\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\\\n\\\\n\\\\t\\\\t} else {\\\\n\\\\n\\\\t\\\\t\\\\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t// Transforming Normal Vectors with the Inverse Transformation\\\\n\\\\t\\\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\\\n\\\\n\\\\t\\\\t#ifdef ENVMAP_MODE_REFLECTION\\\\n\\\\n\\\\t\\\\t\\\\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\\\\n\\\\n\\\\t\\\\t#else\\\\n\\\\n\\\\t\\\\t\\\\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tvec3 reflectVec = vReflect;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#ifdef ENVMAP_TYPE_CUBE\\\\n\\\\n\\\\t\\\\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\\\n\\\\n\\\\t\\\\tenvColor = envMapTexelToLinear( envColor );\\\\n\\\\n\\\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\\\n\\\\n\\\\t\\\\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tvec4 envColor = vec4( 0.0 );\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#ifdef ENVMAP_BLENDING_MULTIPLY\\\\n\\\\n\\\\t\\\\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\\\n\\\\n\\\\t#elif defined( ENVMAP_BLENDING_MIX )\\\\n\\\\n\\\\t\\\\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\\\n\\\\n\\\\t#elif defined( ENVMAP_BLENDING_ADD )\\\\n\\\\n\\\\t\\\\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",envmap_common_pars_fragment:\\\\\\\"\\\\n#ifdef USE_ENVMAP\\\\n\\\\n\\\\tuniform float envMapIntensity;\\\\n\\\\tuniform float flipEnvMap;\\\\n\\\\tuniform int maxMipLevel;\\\\n\\\\n\\\\t#ifdef ENVMAP_TYPE_CUBE\\\\n\\\\t\\\\tuniform samplerCube envMap;\\\\n\\\\t#else\\\\n\\\\t\\\\tuniform sampler2D envMap;\\\\n\\\\t#endif\\\\n\\\\t\\\\n#endif\\\\n\\\\\\\",envmap_pars_fragment:\\\\\\\"\\\\n#ifdef USE_ENVMAP\\\\n\\\\n\\\\tuniform float reflectivity;\\\\n\\\\n\\\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\\\n\\\\n\\\\t\\\\t#define ENV_WORLDPOS\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#ifdef ENV_WORLDPOS\\\\n\\\\n\\\\t\\\\tvarying vec3 vWorldPosition;\\\\n\\\\t\\\\tuniform float refractionRatio;\\\\n\\\\t#else\\\\n\\\\t\\\\tvarying vec3 vReflect;\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",envmap_pars_vertex:\\\\\\\"\\\\n#ifdef USE_ENVMAP\\\\n\\\\n\\\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\\\\n\\\\n\\\\t\\\\t#define ENV_WORLDPOS\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#ifdef ENV_WORLDPOS\\\\n\\\\t\\\\t\\\\n\\\\t\\\\tvarying vec3 vWorldPosition;\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tvarying vec3 vReflect;\\\\n\\\\t\\\\tuniform float refractionRatio;\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",envmap_physical_pars_fragment:\\\\\\\"\\\\n#if defined( USE_ENVMAP )\\\\n\\\\n\\\\t#ifdef ENVMAP_MODE_REFRACTION\\\\n\\\\n\\\\t\\\\tuniform float refractionRatio;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\tvec3 getIBLIrradiance( const in vec3 normal ) {\\\\n\\\\n\\\\t\\\\t#if defined( ENVMAP_TYPE_CUBE_UV )\\\\n\\\\n\\\\t\\\\t\\\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\\\n\\\\n\\\\t\\\\t\\\\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\\\\n\\\\n\\\\t\\\\t\\\\treturn PI * envMapColor.rgb * envMapIntensity;\\\\n\\\\n\\\\t\\\\t#else\\\\n\\\\n\\\\t\\\\t\\\\treturn vec3( 0.0 );\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\\\\n\\\\n\\\\t\\\\t#if defined( ENVMAP_TYPE_CUBE_UV )\\\\n\\\\n\\\\t\\\\t\\\\tvec3 reflectVec;\\\\n\\\\n\\\\t\\\\t\\\\t#ifdef ENVMAP_MODE_REFLECTION\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treflectVec = reflect( - viewDir, normal );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t// Mixing the reflection with the normal is more accurate and keeps rough objects from gathering light from behind their tangent plane.\\\\n\\\\t\\\\t\\\\t\\\\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\\\n\\\\n\\\\t\\\\t\\\\t#else\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treflectVec = refract( - viewDir, normal, refractionRatio );\\\\n\\\\n\\\\t\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\t\\\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\\\n\\\\n\\\\t\\\\t\\\\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\\\\n\\\\n\\\\t\\\\t\\\\treturn envMapColor.rgb * envMapIntensity;\\\\n\\\\n\\\\t\\\\t#else\\\\n\\\\n\\\\t\\\\t\\\\treturn vec3( 0.0 );\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t}\\\\n\\\\n#endif\\\\n\\\\\\\",envmap_vertex:\\\\\\\"\\\\n#ifdef USE_ENVMAP\\\\n\\\\n\\\\t#ifdef ENV_WORLDPOS\\\\n\\\\n\\\\t\\\\tvWorldPosition = worldPosition.xyz;\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tvec3 cameraToVertex;\\\\n\\\\n\\\\t\\\\tif ( isOrthographic ) {\\\\n\\\\n\\\\t\\\\t\\\\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\\\n\\\\n\\\\t\\\\t} else {\\\\n\\\\n\\\\t\\\\t\\\\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\\\n\\\\n\\\\t\\\\t#ifdef ENVMAP_MODE_REFLECTION\\\\n\\\\n\\\\t\\\\t\\\\tvReflect = reflect( cameraToVertex, worldNormal );\\\\n\\\\n\\\\t\\\\t#else\\\\n\\\\n\\\\t\\\\t\\\\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",fog_vertex:\\\\\\\"\\\\n#ifdef USE_FOG\\\\n\\\\n\\\\tvFogDepth = - mvPosition.z;\\\\n\\\\n#endif\\\\n\\\\\\\",fog_pars_vertex:\\\\\\\"\\\\n#ifdef USE_FOG\\\\n\\\\n\\\\tvarying float vFogDepth;\\\\n\\\\n#endif\\\\n\\\\\\\",fog_fragment:\\\\\\\"\\\\n#ifdef USE_FOG\\\\n\\\\n\\\\t#ifdef FOG_EXP2\\\\n\\\\n\\\\t\\\\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\\\n\\\\n#endif\\\\n\\\\\\\",fog_pars_fragment:\\\\\\\"\\\\n#ifdef USE_FOG\\\\n\\\\n\\\\tuniform vec3 fogColor;\\\\n\\\\tvarying float vFogDepth;\\\\n\\\\n\\\\t#ifdef FOG_EXP2\\\\n\\\\n\\\\t\\\\tuniform float fogDensity;\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tuniform float fogNear;\\\\n\\\\t\\\\tuniform float fogFar;\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",gradientmap_pars_fragment:\\\\\\\"\\\\n\\\\n#ifdef USE_GRADIENTMAP\\\\n\\\\n\\\\tuniform sampler2D gradientMap;\\\\n\\\\n#endif\\\\n\\\\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\\\n\\\\n\\\\t// dotNL will be from -1.0 to 1.0\\\\n\\\\tfloat dotNL = dot( normal, lightDirection );\\\\n\\\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\\\n\\\\n\\\\t#ifdef USE_GRADIENTMAP\\\\n\\\\n\\\\t\\\\treturn texture2D( gradientMap, coord ).rgb;\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\\\n\\\\n\\\\t#endif\\\\n\\\\n}\\\\n\\\\\\\",lightmap_fragment:\\\\\\\"\\\\n#ifdef USE_LIGHTMAP\\\\n\\\\n\\\\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\\\\n\\\\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\\\n\\\\n\\\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\\\n\\\\n\\\\t\\\\tlightMapIrradiance *= PI;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\treflectedLight.indirectDiffuse += lightMapIrradiance;\\\\n\\\\n#endif\\\\n\\\\\\\",lightmap_pars_fragment:\\\\\\\"\\\\n#ifdef USE_LIGHTMAP\\\\n\\\\n\\\\tuniform sampler2D lightMap;\\\\n\\\\tuniform float lightMapIntensity;\\\\n\\\\n#endif\\\\n\\\\\\\",lights_lambert_vertex:\\\\\\\"\\\\nvec3 diffuse = vec3( 1.0 );\\\\n\\\\nGeometricContext geometry;\\\\ngeometry.position = mvPosition.xyz;\\\\ngeometry.normal = normalize( transformedNormal );\\\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\\\\n\\\\nGeometricContext backGeometry;\\\\nbackGeometry.position = geometry.position;\\\\nbackGeometry.normal = -geometry.normal;\\\\nbackGeometry.viewDir = geometry.viewDir;\\\\n\\\\nvLightFront = vec3( 0.0 );\\\\nvIndirectFront = vec3( 0.0 );\\\\n#ifdef DOUBLE_SIDED\\\\n\\\\tvLightBack = vec3( 0.0 );\\\\n\\\\tvIndirectBack = vec3( 0.0 );\\\\n#endif\\\\n\\\\nIncidentLight directLight;\\\\nfloat dotNL;\\\\nvec3 directLightColor_Diffuse;\\\\n\\\\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\\\\n\\\\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry.normal );\\\\n\\\\n#ifdef DOUBLE_SIDED\\\\n\\\\n\\\\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\\\\n\\\\n\\\\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry.normal );\\\\n\\\\n#endif\\\\n\\\\n#if NUM_POINT_LIGHTS > 0\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\\\n\\\\n\\\\t\\\\tgetPointLightInfo( pointLights[ i ], geometry, directLight );\\\\n\\\\n\\\\t\\\\tdotNL = dot( geometry.normal, directLight.direction );\\\\n\\\\t\\\\tdirectLightColor_Diffuse = directLight.color;\\\\n\\\\n\\\\t\\\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\\\n\\\\n\\\\t\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\n\\\\t\\\\t\\\\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n#endif\\\\n\\\\n#if NUM_SPOT_LIGHTS > 0\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\\\n\\\\n\\\\t\\\\tgetSpotLightInfo( spotLights[ i ], geometry, directLight );\\\\n\\\\n\\\\t\\\\tdotNL = dot( geometry.normal, directLight.direction );\\\\n\\\\t\\\\tdirectLightColor_Diffuse = directLight.color;\\\\n\\\\n\\\\t\\\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\\\n\\\\n\\\\t\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\n\\\\t\\\\t\\\\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n#endif\\\\n\\\\n#if NUM_DIR_LIGHTS > 0\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\\\n\\\\n\\\\t\\\\tgetDirectionalLightInfo( directionalLights[ i ], geometry, directLight );\\\\n\\\\n\\\\t\\\\tdotNL = dot( geometry.normal, directLight.direction );\\\\n\\\\t\\\\tdirectLightColor_Diffuse = directLight.color;\\\\n\\\\n\\\\t\\\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\\\n\\\\n\\\\t\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\n\\\\t\\\\t\\\\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n#endif\\\\n\\\\n#if NUM_HEMI_LIGHTS > 0\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\\\n\\\\n\\\\t\\\\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\\\\n\\\\n\\\\t\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\n\\\\t\\\\t\\\\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry.normal );\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n#endif\\\\n\\\\\\\",lights_pars_begin:\\\\\\\"\\\\nuniform bool receiveShadow;\\\\nuniform vec3 ambientLightColor;\\\\nuniform vec3 lightProbe[ 9 ];\\\\n\\\\n// get the irradiance (radiance convolved with cosine lobe) at the point 'normal' on the unit sphere\\\\n// source: https://graphics.stanford.edu/papers/envmap/envmap.pdf\\\\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\\\\n\\\\n\\\\t// normal is assumed to have unit length\\\\n\\\\n\\\\tfloat x = normal.x, y = normal.y, z = normal.z;\\\\n\\\\n\\\\t// band 0\\\\n\\\\tvec3 result = shCoefficients[ 0 ] * 0.886227;\\\\n\\\\n\\\\t// band 1\\\\n\\\\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\\\\n\\\\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\\\\n\\\\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\\\\n\\\\n\\\\t// band 2\\\\n\\\\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\\\\n\\\\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\\\\n\\\\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\\\\n\\\\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\\\\n\\\\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\\\\n\\\\n\\\\treturn result;\\\\n\\\\n}\\\\n\\\\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\\\\n\\\\n\\\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\\\n\\\\n\\\\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\\\\n\\\\n\\\\treturn irradiance;\\\\n\\\\n}\\\\n\\\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\\\n\\\\n\\\\tvec3 irradiance = ambientLightColor;\\\\n\\\\n\\\\treturn irradiance;\\\\n\\\\n}\\\\n\\\\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\\\n\\\\n\\\\t#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\\\n\\\\n\\\\t\\\\t// based upon Frostbite 3 Moving to Physically-based Rendering\\\\n\\\\t\\\\t// page 32, equation 26: E[window1]\\\\n\\\\t\\\\t// https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\\\\n\\\\t\\\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\\\n\\\\n\\\\t\\\\tif ( cutoffDistance > 0.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn distanceFalloff;\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tif ( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\treturn pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\treturn 1.0;\\\\n\\\\n\\\\t#endif\\\\n\\\\n}\\\\n\\\\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\\\\n\\\\n\\\\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\\\\n\\\\n}\\\\n\\\\n#if NUM_DIR_LIGHTS > 0\\\\n\\\\n\\\\tstruct DirectionalLight {\\\\n\\\\t\\\\tvec3 direction;\\\\n\\\\t\\\\tvec3 color;\\\\n\\\\t};\\\\n\\\\n\\\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\\\n\\\\n\\\\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) {\\\\n\\\\n\\\\t\\\\tlight.color = directionalLight.color;\\\\n\\\\t\\\\tlight.direction = directionalLight.direction;\\\\n\\\\t\\\\tlight.visible = true;\\\\n\\\\n\\\\t}\\\\n\\\\n#endif\\\\n\\\\n\\\\n#if NUM_POINT_LIGHTS > 0\\\\n\\\\n\\\\tstruct PointLight {\\\\n\\\\t\\\\tvec3 position;\\\\n\\\\t\\\\tvec3 color;\\\\n\\\\t\\\\tfloat distance;\\\\n\\\\t\\\\tfloat decay;\\\\n\\\\t};\\\\n\\\\n\\\\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\\\n\\\\n\\\\t// light is an out parameter as having it as a return value caused compiler errors on some devices\\\\n\\\\tvoid getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) {\\\\n\\\\n\\\\t\\\\tvec3 lVector = pointLight.position - geometry.position;\\\\n\\\\n\\\\t\\\\tlight.direction = normalize( lVector );\\\\n\\\\n\\\\t\\\\tfloat lightDistance = length( lVector );\\\\n\\\\n\\\\t\\\\tlight.color = pointLight.color;\\\\n\\\\t\\\\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\\\\n\\\\t\\\\tlight.visible = ( light.color != vec3( 0.0 ) );\\\\n\\\\n\\\\t}\\\\n\\\\n#endif\\\\n\\\\n\\\\n#if NUM_SPOT_LIGHTS > 0\\\\n\\\\n\\\\tstruct SpotLight {\\\\n\\\\t\\\\tvec3 position;\\\\n\\\\t\\\\tvec3 direction;\\\\n\\\\t\\\\tvec3 color;\\\\n\\\\t\\\\tfloat distance;\\\\n\\\\t\\\\tfloat decay;\\\\n\\\\t\\\\tfloat coneCos;\\\\n\\\\t\\\\tfloat penumbraCos;\\\\n\\\\t};\\\\n\\\\n\\\\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\\\n\\\\n\\\\t// light is an out parameter as having it as a return value caused compiler errors on some devices\\\\n\\\\tvoid getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) {\\\\n\\\\n\\\\t\\\\tvec3 lVector = spotLight.position - geometry.position;\\\\n\\\\n\\\\t\\\\tlight.direction = normalize( lVector );\\\\n\\\\n\\\\t\\\\tfloat angleCos = dot( light.direction, spotLight.direction );\\\\n\\\\n\\\\t\\\\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\\\n\\\\n\\\\t\\\\tif ( spotAttenuation > 0.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\tfloat lightDistance = length( lVector );\\\\n\\\\n\\\\t\\\\t\\\\tlight.color = spotLight.color * spotAttenuation;\\\\n\\\\t\\\\t\\\\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\\\\n\\\\t\\\\t\\\\tlight.visible = ( light.color != vec3( 0.0 ) );\\\\n\\\\n\\\\t\\\\t} else {\\\\n\\\\n\\\\t\\\\t\\\\tlight.color = vec3( 0.0 );\\\\n\\\\t\\\\t\\\\tlight.visible = false;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t}\\\\n\\\\n#endif\\\\n\\\\n\\\\n#if NUM_RECT_AREA_LIGHTS > 0\\\\n\\\\n\\\\tstruct RectAreaLight {\\\\n\\\\t\\\\tvec3 color;\\\\n\\\\t\\\\tvec3 position;\\\\n\\\\t\\\\tvec3 halfWidth;\\\\n\\\\t\\\\tvec3 halfHeight;\\\\n\\\\t};\\\\n\\\\n\\\\t// Pre-computed values of LinearTransformedCosine approximation of BRDF\\\\n\\\\t// BRDF approximation Texture is 64x64\\\\n\\\\tuniform sampler2D ltc_1; // RGBA Float\\\\n\\\\tuniform sampler2D ltc_2; // RGBA Float\\\\n\\\\n\\\\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\\\\n\\\\n#endif\\\\n\\\\n\\\\n#if NUM_HEMI_LIGHTS > 0\\\\n\\\\n\\\\tstruct HemisphereLight {\\\\n\\\\t\\\\tvec3 direction;\\\\n\\\\t\\\\tvec3 skyColor;\\\\n\\\\t\\\\tvec3 groundColor;\\\\n\\\\t};\\\\n\\\\n\\\\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\\\\n\\\\n\\\\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\\\\n\\\\n\\\\t\\\\tfloat dotNL = dot( normal, hemiLight.direction );\\\\n\\\\t\\\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\\\n\\\\n\\\\t\\\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\\\n\\\\n\\\\t\\\\treturn irradiance;\\\\n\\\\n\\\\t}\\\\n\\\\n#endif\\\\n\\\\\\\",lights_toon_fragment:\\\\\\\"\\\\nToonMaterial material;\\\\nmaterial.diffuseColor = diffuseColor.rgb;\\\\n\\\\\\\",lights_toon_pars_fragment:\\\\\\\"\\\\nvarying vec3 vViewPosition;\\\\n\\\\nstruct ToonMaterial {\\\\n\\\\n\\\\tvec3 diffuseColor;\\\\n\\\\n};\\\\n\\\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\n\\\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\\\n\\\\n\\\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\\\n\\\\n}\\\\n\\\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\n\\\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\\\n\\\\n}\\\\n\\\\n#define RE_Direct\\\\t\\\\t\\\\t\\\\tRE_Direct_Toon\\\\n#define RE_IndirectDiffuse\\\\t\\\\tRE_IndirectDiffuse_Toon\\\\n\\\\n#define Material_LightProbeLOD( material )\\\\t(0)\\\\n\\\\\\\",lights_phong_fragment:\\\\\\\"\\\\nBlinnPhongMaterial material;\\\\nmaterial.diffuseColor = diffuseColor.rgb;\\\\nmaterial.specularColor = specular;\\\\nmaterial.specularShininess = shininess;\\\\nmaterial.specularStrength = specularStrength;\\\\n\\\\\\\",lights_phong_pars_fragment:\\\\\\\"\\\\nvarying vec3 vViewPosition;\\\\n\\\\nstruct BlinnPhongMaterial {\\\\n\\\\n\\\\tvec3 diffuseColor;\\\\n\\\\tvec3 specularColor;\\\\n\\\\tfloat specularShininess;\\\\n\\\\tfloat specularStrength;\\\\n\\\\n};\\\\n\\\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\n\\\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\\\n\\\\tvec3 irradiance = dotNL * directLight.color;\\\\n\\\\n\\\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\\\n\\\\n\\\\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;\\\\n\\\\n}\\\\n\\\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\n\\\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\\\n\\\\n}\\\\n\\\\n#define RE_Direct\\\\t\\\\t\\\\t\\\\tRE_Direct_BlinnPhong\\\\n#define RE_IndirectDiffuse\\\\t\\\\tRE_IndirectDiffuse_BlinnPhong\\\\n\\\\n#define Material_LightProbeLOD( material )\\\\t(0)\\\\n\\\\\\\",lights_physical_fragment:\\\\\\\"\\\\nPhysicalMaterial material;\\\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\\\n\\\\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\\\\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\\\\n\\\\nmaterial.roughness = max( roughnessFactor, 0.0525 );// 0.0525 corresponds to the base mip of a 256 cubemap.\\\\nmaterial.roughness += geometryRoughness;\\\\nmaterial.roughness = min( material.roughness, 1.0 );\\\\n\\\\n#ifdef IOR\\\\n\\\\n\\\\t#ifdef SPECULAR\\\\n\\\\n\\\\t\\\\tfloat specularIntensityFactor = specularIntensity;\\\\n\\\\t\\\\tvec3 specularTintFactor = specularTint;\\\\n\\\\n\\\\t\\\\t#ifdef USE_SPECULARINTENSITYMAP\\\\n\\\\n\\\\t\\\\t\\\\tspecularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\t#ifdef USE_SPECULARTINTMAP\\\\n\\\\n\\\\t\\\\t\\\\tspecularTintFactor *= specularTintMapTexelToLinear( texture2D( specularTintMap, vUv ) ).rgb;\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tfloat specularIntensityFactor = 1.0;\\\\n\\\\t\\\\tvec3 specularTintFactor = vec3( 1.0 );\\\\n\\\\t\\\\tmaterial.specularF90 = 1.0;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\tmaterial.specularColor = mix( min( pow2( ( ior - 1.0 ) / ( ior + 1.0 ) ) * specularTintFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\\\\n\\\\n#else\\\\n\\\\n\\\\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\\\\n\\\\tmaterial.specularF90 = 1.0;\\\\n\\\\n#endif\\\\n\\\\n#ifdef USE_CLEARCOAT\\\\n\\\\n\\\\tmaterial.clearcoat = clearcoat;\\\\n\\\\tmaterial.clearcoatRoughness = clearcoatRoughness;\\\\n\\\\tmaterial.clearcoatF0 = vec3( 0.04 );\\\\n\\\\tmaterial.clearcoatF90 = 1.0;\\\\n\\\\n\\\\t#ifdef USE_CLEARCOATMAP\\\\n\\\\n\\\\t\\\\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\\\n\\\\n\\\\t\\\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\tmaterial.clearcoat = saturate( material.clearcoat ); // Burley clearcoat model\\\\n\\\\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\\\\n\\\\tmaterial.clearcoatRoughness += geometryRoughness;\\\\n\\\\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\\\\n\\\\n#endif\\\\n\\\\n#ifdef USE_SHEEN\\\\n\\\\n\\\\tmaterial.sheenTint = sheenTint;\\\\n\\\\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\\\\n\\\\n#endif\\\\n\\\\\\\",lights_physical_pars_fragment:'\\\\nstruct PhysicalMaterial {\\\\n\\\\n\\\\tvec3 diffuseColor;\\\\n\\\\tfloat roughness;\\\\n\\\\tvec3 specularColor;\\\\n\\\\tfloat specularF90;\\\\n\\\\n\\\\t#ifdef USE_CLEARCOAT\\\\n\\\\t\\\\tfloat clearcoat;\\\\n\\\\t\\\\tfloat clearcoatRoughness;\\\\n\\\\t\\\\tvec3 clearcoatF0;\\\\n\\\\t\\\\tfloat clearcoatF90;\\\\n\\\\t#endif\\\\n\\\\n\\\\t#ifdef USE_SHEEN\\\\n\\\\t\\\\tvec3 sheenTint;\\\\n\\\\t\\\\tfloat sheenRoughness;\\\\n\\\\t#endif\\\\n\\\\n};\\\\n\\\\n// temporary\\\\nvec3 clearcoatSpecular = vec3( 0.0 );\\\\n\\\\n// Analytical approximation of the DFG LUT, one half of the\\\\n// split-sum approximation used in indirect specular lighting.\\\\n// via \\\\'environmentBRDF\\\\' from \\\\\\\"Physically Based Shading on Mobile\\\\\\\"\\\\n// https://www.unrealengine.com/blog/physically-based-shading-on-mobile\\\\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\\\\n\\\\n\\\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\\\n\\\\n\\\\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\\\\n\\\\n\\\\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\\\\n\\\\n\\\\tvec4 r = roughness * c0 + c1;\\\\n\\\\n\\\\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\\\\n\\\\n\\\\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\\\\n\\\\n\\\\treturn fab;\\\\n\\\\n}\\\\n\\\\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\\\\n\\\\n\\\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\\\n\\\\n\\\\treturn specularColor * fab.x + specularF90 * fab.y;\\\\n\\\\n}\\\\n\\\\n// Fdez-Agüera\\\\'s \\\\\\\"Multiple-Scattering Microfacet Model for Real-Time Image Based Lighting\\\\\\\"\\\\n// Approximates multiscattering in order to preserve energy.\\\\n// http://www.jcgt.org/published/0008/01/03/\\\\nvoid 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 ) {\\\\n\\\\n\\\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\\\n\\\\n\\\\tvec3 FssEss = specularColor * fab.x + specularF90 * fab.y;\\\\n\\\\n\\\\tfloat Ess = fab.x + fab.y;\\\\n\\\\tfloat Ems = 1.0 - Ess;\\\\n\\\\n\\\\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619; // 1/21\\\\n\\\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\\\n\\\\n\\\\tsingleScatter += FssEss;\\\\n\\\\tmultiScatter += Fms * Ems;\\\\n\\\\n}\\\\n\\\\n#if NUM_RECT_AREA_LIGHTS > 0\\\\n\\\\n\\\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\n\\\\t\\\\tvec3 normal = geometry.normal;\\\\n\\\\t\\\\tvec3 viewDir = geometry.viewDir;\\\\n\\\\t\\\\tvec3 position = geometry.position;\\\\n\\\\t\\\\tvec3 lightPos = rectAreaLight.position;\\\\n\\\\t\\\\tvec3 halfWidth = rectAreaLight.halfWidth;\\\\n\\\\t\\\\tvec3 halfHeight = rectAreaLight.halfHeight;\\\\n\\\\t\\\\tvec3 lightColor = rectAreaLight.color;\\\\n\\\\t\\\\tfloat roughness = material.roughness;\\\\n\\\\n\\\\t\\\\tvec3 rectCoords[ 4 ];\\\\n\\\\t\\\\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight; // counterclockwise; light shines in local neg z direction\\\\n\\\\t\\\\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\\\\n\\\\t\\\\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\\\\n\\\\t\\\\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\\\\n\\\\n\\\\t\\\\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\\\\n\\\\n\\\\t\\\\tvec4 t1 = texture2D( ltc_1, uv );\\\\n\\\\t\\\\tvec4 t2 = texture2D( ltc_2, uv );\\\\n\\\\n\\\\t\\\\tmat3 mInv = mat3(\\\\n\\\\t\\\\t\\\\tvec3( t1.x, 0, t1.y ),\\\\n\\\\t\\\\t\\\\tvec3(    0, 1,    0 ),\\\\n\\\\t\\\\t\\\\tvec3( t1.z, 0, t1.w )\\\\n\\\\t\\\\t);\\\\n\\\\n\\\\t\\\\t// LTC Fresnel Approximation by Stephen Hill\\\\n\\\\t\\\\t// http://blog.selfshadow.com/publications/s2016-advances/s2016_ltc_fresnel.pdf\\\\n\\\\t\\\\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\\\\n\\\\n\\\\t\\\\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\\\\n\\\\n\\\\t\\\\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\\\\n\\\\n\\\\t}\\\\n\\\\n#endif\\\\n\\\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\n\\\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\\\n\\\\n\\\\tvec3 irradiance = dotNL * directLight.color;\\\\n\\\\n\\\\t#ifdef USE_CLEARCOAT\\\\n\\\\n\\\\t\\\\tfloat dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\\\\n\\\\n\\\\t\\\\tvec3 ccIrradiance = dotNLcc * directLight.color;\\\\n\\\\n\\\\t\\\\tclearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#ifdef USE_SHEEN\\\\n\\\\n\\\\t\\\\treflectedLight.directSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenTint, material.sheenRoughness );\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );\\\\n\\\\n\\\\n\\\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\\\n}\\\\n\\\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\n\\\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\\\n\\\\n}\\\\n\\\\nvoid 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) {\\\\n\\\\n\\\\t#ifdef USE_CLEARCOAT\\\\n\\\\n\\\\t\\\\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t// Both indirect specular and indirect diffuse light accumulate here\\\\n\\\\n\\\\tvec3 singleScattering = vec3( 0.0 );\\\\n\\\\tvec3 multiScattering = vec3( 0.0 );\\\\n\\\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\\\n\\\\n\\\\tcomputeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\\\\n\\\\n\\\\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\\\\n\\\\n\\\\treflectedLight.indirectSpecular += radiance * singleScattering;\\\\n\\\\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\\\\n\\\\n\\\\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\\\\n\\\\n}\\\\n\\\\n#define RE_Direct\\\\t\\\\t\\\\t\\\\tRE_Direct_Physical\\\\n#define RE_Direct_RectArea\\\\t\\\\tRE_Direct_RectArea_Physical\\\\n#define RE_IndirectDiffuse\\\\t\\\\tRE_IndirectDiffuse_Physical\\\\n#define RE_IndirectSpecular\\\\t\\\\tRE_IndirectSpecular_Physical\\\\n\\\\n// ref: https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\\\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\\\n\\\\n\\\\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\\\n\\\\n}\\\\n',lights_fragment_begin:\\\\\\\"\\\\n/**\\\\n * This is a template that can be used to light a material, it uses pluggable\\\\n * RenderEquations (RE)for specific lighting scenarios.\\\\n *\\\\n * Instructions for use:\\\\n * - Ensure that both RE_Direct, RE_IndirectDiffuse and RE_IndirectSpecular are defined\\\\n * - If you have defined an RE_IndirectSpecular, you need to also provide a Material_LightProbeLOD. <---- ???\\\\n * - Create a material parameter that is to be passed as the third parameter to your lighting functions.\\\\n *\\\\n * TODO:\\\\n * - Add area light support.\\\\n * - Add sphere light support.\\\\n * - Add diffuse light probe (irradiance cubemap) support.\\\\n */\\\\n\\\\nGeometricContext geometry;\\\\n\\\\ngeometry.position = - vViewPosition;\\\\ngeometry.normal = normal;\\\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\\\n\\\\n#ifdef USE_CLEARCOAT\\\\n\\\\n\\\\tgeometry.clearcoatNormal = clearcoatNormal;\\\\n\\\\n#endif\\\\n\\\\nIncidentLight directLight;\\\\n\\\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\\\n\\\\n\\\\tPointLight pointLight;\\\\n\\\\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\\\\n\\\\tPointLightShadow pointLightShadow;\\\\n\\\\t#endif\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\\\n\\\\n\\\\t\\\\tpointLight = pointLights[ i ];\\\\n\\\\n\\\\t\\\\tgetPointLightInfo( pointLight, geometry, directLight );\\\\n\\\\n\\\\t\\\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\\\\n\\\\t\\\\tpointLightShadow = pointLightShadows[ i ];\\\\n\\\\t\\\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\tRE_Direct( directLight, geometry, material, reflectedLight );\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n#endif\\\\n\\\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\\\n\\\\n\\\\tSpotLight spotLight;\\\\n\\\\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\\\\n\\\\tSpotLightShadow spotLightShadow;\\\\n\\\\t#endif\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\\\n\\\\n\\\\t\\\\tspotLight = spotLights[ i ];\\\\n\\\\n\\\\t\\\\tgetSpotLightInfo( spotLight, geometry, directLight );\\\\n\\\\n\\\\t\\\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\\\n\\\\t\\\\tspotLightShadow = spotLightShadows[ i ];\\\\n\\\\t\\\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\tRE_Direct( directLight, geometry, material, reflectedLight );\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n#endif\\\\n\\\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\\\n\\\\n\\\\tDirectionalLight directionalLight;\\\\n\\\\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\\\\n\\\\tDirectionalLightShadow directionalLightShadow;\\\\n\\\\t#endif\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\\\n\\\\n\\\\t\\\\tdirectionalLight = directionalLights[ i ];\\\\n\\\\n\\\\t\\\\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\\\\n\\\\n\\\\t\\\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\\\\n\\\\t\\\\tdirectionalLightShadow = directionalLightShadows[ i ];\\\\n\\\\t\\\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\tRE_Direct( directLight, geometry, material, reflectedLight );\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n#endif\\\\n\\\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\\\n\\\\n\\\\tRectAreaLight rectAreaLight;\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\\\n\\\\n\\\\t\\\\trectAreaLight = rectAreaLights[ i ];\\\\n\\\\t\\\\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n#endif\\\\n\\\\n#if defined( RE_IndirectDiffuse )\\\\n\\\\n\\\\tvec3 iblIrradiance = vec3( 0.0 );\\\\n\\\\n\\\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\\\n\\\\n\\\\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\\\\n\\\\n\\\\t#if ( NUM_HEMI_LIGHTS > 0 )\\\\n\\\\n\\\\t\\\\t#pragma unroll_loop_start\\\\n\\\\t\\\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\\\n\\\\n\\\\t\\\\t\\\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\t#pragma unroll_loop_end\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\n#if defined( RE_IndirectSpecular )\\\\n\\\\n\\\\tvec3 radiance = vec3( 0.0 );\\\\n\\\\tvec3 clearcoatRadiance = vec3( 0.0 );\\\\n\\\\n#endif\\\\n\\\\\\\",lights_fragment_maps:\\\\\\\"\\\\n#if defined( RE_IndirectDiffuse )\\\\n\\\\n\\\\t#ifdef USE_LIGHTMAP\\\\n\\\\n\\\\t\\\\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\\\\n\\\\t\\\\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\\\n\\\\n\\\\t\\\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\\\n\\\\n\\\\t\\\\t\\\\tlightMapIrradiance *= PI;\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\tirradiance += lightMapIrradiance;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\\\\n\\\\n\\\\t\\\\tiblIrradiance += getIBLIrradiance( geometry.normal );\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\\\n\\\\n\\\\tradiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );\\\\n\\\\n\\\\t#ifdef USE_CLEARCOAT\\\\n\\\\n\\\\t\\\\tclearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",lights_fragment_end:\\\\\\\"\\\\n#if defined( RE_IndirectDiffuse )\\\\n\\\\n\\\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\\\n\\\\n#endif\\\\n\\\\n#if defined( RE_IndirectSpecular )\\\\n\\\\n\\\\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\\\\n\\\\n#endif\\\\n\\\\\\\",logdepthbuf_fragment:\\\\\\\"\\\\n#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\\\n\\\\n\\\\t// Doing a strict comparison with == 1.0 can cause noise artifacts\\\\n\\\\t// on some platforms. See issue #17623.\\\\n\\\\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\\\n\\\\n#endif\\\\n\\\\\\\",logdepthbuf_pars_fragment:\\\\\\\"\\\\n#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\\\n\\\\n\\\\tuniform float logDepthBufFC;\\\\n\\\\tvarying float vFragDepth;\\\\n\\\\tvarying float vIsPerspective;\\\\n\\\\n#endif\\\\n\\\\\\\",logdepthbuf_pars_vertex:\\\\\\\"\\\\n#ifdef USE_LOGDEPTHBUF\\\\n\\\\n\\\\t#ifdef USE_LOGDEPTHBUF_EXT\\\\n\\\\n\\\\t\\\\tvarying float vFragDepth;\\\\n\\\\t\\\\tvarying float vIsPerspective;\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tuniform float logDepthBufFC;\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",logdepthbuf_vertex:\\\\\\\"\\\\n#ifdef USE_LOGDEPTHBUF\\\\n\\\\n\\\\t#ifdef USE_LOGDEPTHBUF_EXT\\\\n\\\\n\\\\t\\\\tvFragDepth = 1.0 + gl_Position.w;\\\\n\\\\t\\\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\\\\n\\\\n\\\\t\\\\t\\\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\\\n\\\\n\\\\t\\\\t\\\\tgl_Position.z *= gl_Position.w;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",map_fragment:\\\\\\\"\\\\n#ifdef USE_MAP\\\\n\\\\n\\\\tvec4 texelColor = texture2D( map, vUv );\\\\n\\\\n\\\\ttexelColor = mapTexelToLinear( texelColor );\\\\n\\\\tdiffuseColor *= texelColor;\\\\n\\\\n#endif\\\\n\\\\\\\",map_pars_fragment:\\\\\\\"\\\\n#ifdef USE_MAP\\\\n\\\\n\\\\tuniform sampler2D map;\\\\n\\\\n#endif\\\\n\\\\\\\",map_particle_fragment:\\\\\\\"\\\\n#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\\\n\\\\n\\\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\\\n\\\\n#endif\\\\n\\\\n#ifdef USE_MAP\\\\n\\\\n\\\\tvec4 mapTexel = texture2D( map, uv );\\\\n\\\\tdiffuseColor *= mapTexelToLinear( mapTexel );\\\\n\\\\n#endif\\\\n\\\\n#ifdef USE_ALPHAMAP\\\\n\\\\n\\\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\\\n\\\\n#endif\\\\n\\\\\\\",map_particle_pars_fragment:\\\\\\\"\\\\n#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\\\n\\\\n\\\\tuniform mat3 uvTransform;\\\\n\\\\n#endif\\\\n\\\\n#ifdef USE_MAP\\\\n\\\\n\\\\tuniform sampler2D map;\\\\n\\\\n#endif\\\\n\\\\n#ifdef USE_ALPHAMAP\\\\n\\\\n\\\\tuniform sampler2D alphaMap;\\\\n\\\\n#endif\\\\n\\\\\\\",metalnessmap_fragment:\\\\\\\"\\\\nfloat metalnessFactor = metalness;\\\\n\\\\n#ifdef USE_METALNESSMAP\\\\n\\\\n\\\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\\\n\\\\n\\\\t// reads channel B, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\\\\n\\\\tmetalnessFactor *= texelMetalness.b;\\\\n\\\\n#endif\\\\n\\\\\\\",metalnessmap_pars_fragment:\\\\\\\"\\\\n#ifdef USE_METALNESSMAP\\\\n\\\\n\\\\tuniform sampler2D metalnessMap;\\\\n\\\\n#endif\\\\n\\\\\\\",morphnormal_vertex:\\\\\\\"\\\\n#ifdef USE_MORPHNORMALS\\\\n\\\\n\\\\t// morphTargetBaseInfluence is set based on BufferGeometry.morphTargetsRelative value:\\\\n\\\\t// When morphTargetsRelative is false, this is set to 1 - sum(influences); this results in normal = sum((target - base) * influence)\\\\n\\\\t// When morphTargetsRelative is true, this is set to 1; as a result, all morph targets are simply added to the base after weighting\\\\n\\\\tobjectNormal *= morphTargetBaseInfluence;\\\\n\\\\n\\\\t#ifdef MORPHTARGETS_TEXTURE\\\\n\\\\n\\\\t\\\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\\\n\\\\n\\\\t\\\\t\\\\tif ( morphTargetInfluences[ i ] > 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1, 2 ) * morphTargetInfluences[ i ];\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\\\\n\\\\t\\\\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\\\\n\\\\t\\\\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\\\\n\\\\t\\\\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",morphtarget_pars_vertex:\\\\\\\"\\\\n#ifdef USE_MORPHTARGETS\\\\n\\\\n\\\\tuniform float morphTargetBaseInfluence;\\\\n\\\\n\\\\t#ifdef MORPHTARGETS_TEXTURE\\\\n\\\\n\\\\t\\\\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\\\\n\\\\t\\\\tuniform sampler2DArray morphTargetsTexture;\\\\n\\\\t\\\\tuniform vec2 morphTargetsTextureSize;\\\\n\\\\n\\\\t\\\\tvec3 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset, const in int stride ) {\\\\n\\\\n\\\\t\\\\t\\\\tfloat texelIndex = float( vertexIndex * stride + offset );\\\\n\\\\t\\\\t\\\\tfloat y = floor( texelIndex / morphTargetsTextureSize.x );\\\\n\\\\t\\\\t\\\\tfloat x = texelIndex - y * morphTargetsTextureSize.x;\\\\n\\\\n\\\\t\\\\t\\\\tvec3 morphUV = vec3( ( x + 0.5 ) / morphTargetsTextureSize.x, y / morphTargetsTextureSize.y, morphTargetIndex );\\\\n\\\\t\\\\t\\\\treturn texture( morphTargetsTexture, morphUV ).xyz;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\t#ifndef USE_MORPHNORMALS\\\\n\\\\n\\\\t\\\\t\\\\tuniform float morphTargetInfluences[ 8 ];\\\\n\\\\n\\\\t\\\\t#else\\\\n\\\\n\\\\t\\\\t\\\\tuniform float morphTargetInfluences[ 4 ];\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",morphtarget_vertex:\\\\\\\"\\\\n#ifdef USE_MORPHTARGETS\\\\n\\\\n\\\\t// morphTargetBaseInfluence is set based on BufferGeometry.morphTargetsRelative value:\\\\n\\\\t// When morphTargetsRelative is false, this is set to 1 - sum(influences); this results in position = sum((target - base) * influence)\\\\n\\\\t// When morphTargetsRelative is true, this is set to 1; as a result, all morph targets are simply added to the base after weighting\\\\n\\\\ttransformed *= morphTargetBaseInfluence;\\\\n\\\\n\\\\t#ifdef MORPHTARGETS_TEXTURE\\\\n\\\\n\\\\t\\\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\\\n\\\\n\\\\t\\\\t\\\\t#ifndef USE_MORPHNORMALS\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tif ( morphTargetInfluences[ i ] > 0.0 ) transformed += getMorph( gl_VertexID, i, 0, 1 ) * morphTargetInfluences[ i ];\\\\n\\\\n\\\\t\\\\t\\\\t#else\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tif ( morphTargetInfluences[ i ] > 0.0 ) transformed += getMorph( gl_VertexID, i, 0, 2 ) * morphTargetInfluences[ i ];\\\\n\\\\n\\\\t\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\\\\n\\\\t\\\\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\\\\n\\\\t\\\\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\\\\n\\\\t\\\\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\\\\n\\\\n\\\\t\\\\t#ifndef USE_MORPHNORMALS\\\\n\\\\n\\\\t\\\\t\\\\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\\\\n\\\\t\\\\t\\\\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\\\\n\\\\t\\\\t\\\\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\\\\n\\\\t\\\\t\\\\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",normal_fragment_begin:\\\\\\\"\\\\nfloat faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\\\\n\\\\n#ifdef FLAT_SHADED\\\\n\\\\n\\\\t// Workaround for Adreno GPUs not able to do dFdx( vViewPosition )\\\\n\\\\n\\\\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\\\\n\\\\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\\\\n\\\\tvec3 normal = normalize( cross( fdx, fdy ) );\\\\n\\\\n#else\\\\n\\\\n\\\\tvec3 normal = normalize( vNormal );\\\\n\\\\n\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\n\\\\t\\\\tnormal = normal * faceDirection;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\n\\\\t\\\\tvec3 tangent = normalize( vTangent );\\\\n\\\\t\\\\tvec3 bitangent = normalize( vBitangent );\\\\n\\\\n\\\\t\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\n\\\\t\\\\t\\\\ttangent = tangent * faceDirection;\\\\n\\\\t\\\\t\\\\tbitangent = bitangent * faceDirection;\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\\\\n\\\\n\\\\t\\\\t\\\\tmat3 vTBN = mat3( tangent, bitangent, normal );\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\n// non perturbed normal for clearcoat among others\\\\n\\\\nvec3 geometryNormal = normal;\\\\n\\\\n\\\\\\\",normal_fragment_maps:\\\\\\\"\\\\n\\\\n#ifdef OBJECTSPACE_NORMALMAP\\\\n\\\\n\\\\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0; // overrides both flatShading and attribute normals\\\\n\\\\n\\\\t#ifdef FLIP_SIDED\\\\n\\\\n\\\\t\\\\tnormal = - normal;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\n\\\\t\\\\tnormal = normal * faceDirection;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\tnormal = normalize( normalMatrix * normal );\\\\n\\\\n#elif defined( TANGENTSPACE_NORMALMAP )\\\\n\\\\n\\\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\\\n\\\\tmapN.xy *= normalScale;\\\\n\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\n\\\\t\\\\tnormal = normalize( vTBN * mapN );\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tnormal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection );\\\\n\\\\n\\\\t#endif\\\\n\\\\n#elif defined( USE_BUMPMAP )\\\\n\\\\n\\\\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\\\\n\\\\n#endif\\\\n\\\\\\\",normal_pars_fragment:\\\\\\\"\\\\n#ifndef FLAT_SHADED\\\\n\\\\n\\\\tvarying vec3 vNormal;\\\\n\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\n\\\\t\\\\tvarying vec3 vTangent;\\\\n\\\\t\\\\tvarying vec3 vBitangent;\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",normal_pars_vertex:\\\\\\\"\\\\n#ifndef FLAT_SHADED\\\\n\\\\n\\\\tvarying vec3 vNormal;\\\\n\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\n\\\\t\\\\tvarying vec3 vTangent;\\\\n\\\\t\\\\tvarying vec3 vBitangent;\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",normal_vertex:\\\\\\\"\\\\n#ifndef FLAT_SHADED // normal is computed with derivatives when FLAT_SHADED\\\\n\\\\n\\\\tvNormal = normalize( transformedNormal );\\\\n\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\n\\\\t\\\\tvTangent = normalize( transformedTangent );\\\\n\\\\t\\\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",normalmap_pars_fragment:\\\\\\\"\\\\n#ifdef USE_NORMALMAP\\\\n\\\\n\\\\tuniform sampler2D normalMap;\\\\n\\\\tuniform vec2 normalScale;\\\\n\\\\n#endif\\\\n\\\\n#ifdef OBJECTSPACE_NORMALMAP\\\\n\\\\n\\\\tuniform mat3 normalMatrix;\\\\n\\\\n#endif\\\\n\\\\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\\\\n\\\\n\\\\t// Normal Mapping Without Precomputed Tangents\\\\n\\\\t// http://www.thetenthplanet.de/archives/1180\\\\n\\\\n\\\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\\\\n\\\\n\\\\t\\\\t// Workaround for Adreno 3XX dFd*( vec3 ) bug. See #9988\\\\n\\\\n\\\\t\\\\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\\\\n\\\\t\\\\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\\\\n\\\\t\\\\tvec2 st0 = dFdx( vUv.st );\\\\n\\\\t\\\\tvec2 st1 = dFdy( vUv.st );\\\\n\\\\n\\\\t\\\\tvec3 N = surf_norm; // normalized\\\\n\\\\n\\\\t\\\\tvec3 q1perp = cross( q1, N );\\\\n\\\\t\\\\tvec3 q0perp = cross( N, q0 );\\\\n\\\\n\\\\t\\\\tvec3 T = q1perp * st0.x + q0perp * st1.x;\\\\n\\\\t\\\\tvec3 B = q1perp * st0.y + q0perp * st1.y;\\\\n\\\\n\\\\t\\\\tfloat det = max( dot( T, T ), dot( B, B ) );\\\\n\\\\t\\\\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\\\\n\\\\n\\\\t\\\\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\\\\n\\\\n\\\\t}\\\\n\\\\n#endif\\\\n\\\\\\\",clearcoat_normal_fragment_begin:\\\\\\\"\\\\n#ifdef USE_CLEARCOAT\\\\n\\\\n\\\\tvec3 clearcoatNormal = geometryNormal;\\\\n\\\\n#endif\\\\n\\\\\\\",clearcoat_normal_fragment_maps:\\\\\\\"\\\\n#ifdef USE_CLEARCOAT_NORMALMAP\\\\n\\\\n\\\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\\\\n\\\\tclearcoatMapN.xy *= clearcoatNormalScale;\\\\n\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\n\\\\t\\\\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",clearcoat_pars_fragment:\\\\\\\"\\\\n\\\\n#ifdef USE_CLEARCOATMAP\\\\n\\\\n\\\\tuniform sampler2D clearcoatMap;\\\\n\\\\n#endif\\\\n\\\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\\\n\\\\n\\\\tuniform sampler2D clearcoatRoughnessMap;\\\\n\\\\n#endif\\\\n\\\\n#ifdef USE_CLEARCOAT_NORMALMAP\\\\n\\\\n\\\\tuniform sampler2D clearcoatNormalMap;\\\\n\\\\tuniform vec2 clearcoatNormalScale;\\\\n\\\\n#endif\\\\n\\\\\\\",output_fragment:\\\\\\\"\\\\n#ifdef OPAQUE\\\\ndiffuseColor.a = 1.0;\\\\n#endif\\\\n\\\\n// https://github.com/mrdoob/three.js/pull/22425\\\\n#ifdef USE_TRANSMISSION\\\\ndiffuseColor.a *= transmissionAlpha + 0.1;\\\\n#endif\\\\n\\\\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );\\\\n\\\\\\\",packing:\\\\\\\"\\\\nvec3 packNormalToRGB( const in vec3 normal ) {\\\\n\\\\treturn normalize( normal ) * 0.5 + 0.5;\\\\n}\\\\n\\\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\\\n\\\\treturn 2.0 * rgb.xyz - 1.0;\\\\n}\\\\n\\\\nconst float PackUpscale = 256. / 255.; // fraction -> 0..1 (including 1)\\\\nconst float UnpackDownscale = 255. / 256.; // 0..1 -> fraction (excluding 1)\\\\n\\\\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\\\\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\\\\n\\\\nconst float ShiftRight8 = 1. / 256.;\\\\n\\\\nvec4 packDepthToRGBA( const in float v ) {\\\\n\\\\tvec4 r = vec4( fract( v * PackFactors ), v );\\\\n\\\\tr.yzw -= r.xyz * ShiftRight8; // tidy overflow\\\\n\\\\treturn r * PackUpscale;\\\\n}\\\\n\\\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\\\n\\\\treturn dot( v, UnpackFactors );\\\\n}\\\\n\\\\nvec4 pack2HalfToRGBA( vec2 v ) {\\\\n\\\\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\\\\n\\\\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\\\\n}\\\\n\\\\nvec2 unpackRGBATo2Half( vec4 v ) {\\\\n\\\\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\\\\n}\\\\n\\\\n// NOTE: viewZ/eyeZ is < 0 when in front of the camera per OpenGL conventions\\\\n\\\\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\\\n\\\\treturn ( viewZ + near ) / ( near - far );\\\\n}\\\\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\\\\n\\\\treturn linearClipZ * ( near - far ) - near;\\\\n}\\\\n\\\\n// NOTE: https://twitter.com/gonnavis/status/1377183786949959682\\\\n\\\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\\\n\\\\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\\\\n}\\\\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\\\\n\\\\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\\\\n}\\\\n\\\\\\\",premultiplied_alpha_fragment:\\\\\\\"\\\\n#ifdef PREMULTIPLIED_ALPHA\\\\n\\\\n\\\\t// Get get normal blending with premultipled, use with CustomBlending, OneFactor, OneMinusSrcAlphaFactor, AddEquation.\\\\n\\\\tgl_FragColor.rgb *= gl_FragColor.a;\\\\n\\\\n#endif\\\\n\\\\\\\",project_vertex:\\\\\\\"\\\\nvec4 mvPosition = vec4( transformed, 1.0 );\\\\n\\\\n#ifdef USE_INSTANCING\\\\n\\\\n\\\\tmvPosition = instanceMatrix * mvPosition;\\\\n\\\\n#endif\\\\n\\\\nmvPosition = modelViewMatrix * mvPosition;\\\\n\\\\ngl_Position = projectionMatrix * mvPosition;\\\\n\\\\\\\",dithering_fragment:\\\\\\\"\\\\n#ifdef DITHERING\\\\n\\\\n\\\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\\\n\\\\n#endif\\\\n\\\\\\\",dithering_pars_fragment:\\\\\\\"\\\\n#ifdef DITHERING\\\\n\\\\n\\\\t// based on https://www.shadertoy.com/view/MslGR8\\\\n\\\\tvec3 dithering( vec3 color ) {\\\\n\\\\t\\\\t//Calculate grid position\\\\n\\\\t\\\\tfloat grid_position = rand( gl_FragCoord.xy );\\\\n\\\\n\\\\t\\\\t//Shift the individual colors differently, thus making it even harder to see the dithering pattern\\\\n\\\\t\\\\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\\\\n\\\\n\\\\t\\\\t//modify shift acording to grid position.\\\\n\\\\t\\\\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\\\\n\\\\n\\\\t\\\\t//shift the color by dither_shift\\\\n\\\\t\\\\treturn color + dither_shift_RGB;\\\\n\\\\t}\\\\n\\\\n#endif\\\\n\\\\\\\",roughnessmap_fragment:\\\\\\\"\\\\nfloat roughnessFactor = roughness;\\\\n\\\\n#ifdef USE_ROUGHNESSMAP\\\\n\\\\n\\\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\\\n\\\\n\\\\t// reads channel G, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\\\\n\\\\troughnessFactor *= texelRoughness.g;\\\\n\\\\n#endif\\\\n\\\\\\\",roughnessmap_pars_fragment:\\\\\\\"\\\\n#ifdef USE_ROUGHNESSMAP\\\\n\\\\n\\\\tuniform sampler2D roughnessMap;\\\\n\\\\n#endif\\\\n\\\\\\\",shadowmap_pars_fragment:B,shadowmap_pars_vertex:\\\\\\\"\\\\n#ifdef USE_SHADOWMAP\\\\n\\\\n\\\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\\\n\\\\n\\\\t\\\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\\\n\\\\n\\\\t\\\\tstruct DirectionalLightShadow {\\\\n\\\\t\\\\t\\\\tfloat shadowBias;\\\\n\\\\t\\\\t\\\\tfloat shadowNormalBias;\\\\n\\\\t\\\\t\\\\tfloat shadowRadius;\\\\n\\\\t\\\\t\\\\tvec2 shadowMapSize;\\\\n\\\\t\\\\t};\\\\n\\\\n\\\\t\\\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\\\n\\\\n\\\\t\\\\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\\\n\\\\n\\\\t\\\\tstruct SpotLightShadow {\\\\n\\\\t\\\\t\\\\tfloat shadowBias;\\\\n\\\\t\\\\t\\\\tfloat shadowNormalBias;\\\\n\\\\t\\\\t\\\\tfloat shadowRadius;\\\\n\\\\t\\\\t\\\\tvec2 shadowMapSize;\\\\n\\\\t\\\\t};\\\\n\\\\n\\\\t\\\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\\\n\\\\n\\\\t\\\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\\\n\\\\n\\\\t\\\\tstruct PointLightShadow {\\\\n\\\\t\\\\t\\\\tfloat shadowBias;\\\\n\\\\t\\\\t\\\\tfloat shadowNormalBias;\\\\n\\\\t\\\\t\\\\tfloat shadowRadius;\\\\n\\\\t\\\\t\\\\tvec2 shadowMapSize;\\\\n\\\\t\\\\t\\\\tfloat shadowCameraNear;\\\\n\\\\t\\\\t\\\\tfloat shadowCameraFar;\\\\n\\\\t\\\\t};\\\\n\\\\n\\\\t\\\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t/*\\\\n\\\\t#if NUM_RECT_AREA_LIGHTS > 0\\\\n\\\\n\\\\t\\\\t// TODO (abelnation): uniforms for area light shadows\\\\n\\\\n\\\\t#endif\\\\n\\\\t*/\\\\n\\\\n#endif\\\\n\\\\\\\",shadowmap_vertex:\\\\\\\"\\\\n#ifdef USE_SHADOWMAP\\\\n\\\\n\\\\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\\\\n\\\\n\\\\t\\\\t// Offsetting the position used for querying occlusion along the world normal can be used to reduce shadow acne.\\\\n\\\\t\\\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\\\n\\\\t\\\\tvec4 shadowWorldPosition;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\\\n\\\\n\\\\t\\\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\\\n\\\\t\\\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\\\n\\\\n\\\\t\\\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\\\\n\\\\t\\\\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\\\n\\\\n\\\\t\\\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\\\n\\\\t\\\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t/*\\\\n\\\\t#if NUM_RECT_AREA_LIGHTS > 0\\\\n\\\\n\\\\t\\\\t// TODO (abelnation): update vAreaShadowCoord with area light info\\\\n\\\\n\\\\t#endif\\\\n\\\\t*/\\\\n\\\\n#endif\\\\n\\\\\\\",shadowmask_pars_fragment:\\\\\\\"\\\\nfloat getShadowMask() {\\\\n\\\\n\\\\tfloat shadow = 1.0;\\\\n\\\\n\\\\t#ifdef USE_SHADOWMAP\\\\n\\\\n\\\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\\\n\\\\n\\\\tDirectionalLightShadow directionalLight;\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\\\n\\\\n\\\\t\\\\tdirectionalLight = directionalLightShadows[ i ];\\\\n\\\\t\\\\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\\\n\\\\n\\\\tSpotLightShadow spotLight;\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\\\n\\\\n\\\\t\\\\tspotLight = spotLightShadows[ i ];\\\\n\\\\t\\\\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\\\n\\\\n\\\\tPointLightShadow pointLight;\\\\n\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\\\n\\\\n\\\\t\\\\tpointLight = pointLightShadows[ i ];\\\\n\\\\t\\\\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\\\n\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t/*\\\\n\\\\t#if NUM_RECT_AREA_LIGHTS > 0\\\\n\\\\n\\\\t\\\\t// TODO (abelnation): update shadow for Area light\\\\n\\\\n\\\\t#endif\\\\n\\\\t*/\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\treturn shadow;\\\\n\\\\n}\\\\n\\\\\\\",skinbase_vertex:\\\\\\\"\\\\n#ifdef USE_SKINNING\\\\n\\\\n\\\\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\\\n\\\\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\\\n\\\\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\\\n\\\\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\\\n\\\\n#endif\\\\n\\\\\\\",skinning_pars_vertex:\\\\\\\"\\\\n#ifdef USE_SKINNING\\\\n\\\\n\\\\tuniform mat4 bindMatrix;\\\\n\\\\tuniform mat4 bindMatrixInverse;\\\\n\\\\n\\\\t#ifdef BONE_TEXTURE\\\\n\\\\n\\\\t\\\\tuniform highp sampler2D boneTexture;\\\\n\\\\t\\\\tuniform int boneTextureSize;\\\\n\\\\n\\\\t\\\\tmat4 getBoneMatrix( const in float i ) {\\\\n\\\\n\\\\t\\\\t\\\\tfloat j = i * 4.0;\\\\n\\\\t\\\\t\\\\tfloat x = mod( j, float( boneTextureSize ) );\\\\n\\\\t\\\\t\\\\tfloat y = floor( j / float( boneTextureSize ) );\\\\n\\\\n\\\\t\\\\t\\\\tfloat dx = 1.0 / float( boneTextureSize );\\\\n\\\\t\\\\t\\\\tfloat dy = 1.0 / float( boneTextureSize );\\\\n\\\\n\\\\t\\\\t\\\\ty = dy * ( y + 0.5 );\\\\n\\\\n\\\\t\\\\t\\\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\\\n\\\\t\\\\t\\\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\\\n\\\\t\\\\t\\\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\\\n\\\\t\\\\t\\\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\\\n\\\\n\\\\t\\\\t\\\\tmat4 bone = mat4( v1, v2, v3, v4 );\\\\n\\\\n\\\\t\\\\t\\\\treturn bone;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tuniform mat4 boneMatrices[ MAX_BONES ];\\\\n\\\\n\\\\t\\\\tmat4 getBoneMatrix( const in float i ) {\\\\n\\\\n\\\\t\\\\t\\\\tmat4 bone = boneMatrices[ int(i) ];\\\\n\\\\t\\\\t\\\\treturn bone;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",skinning_vertex:\\\\\\\"\\\\n#ifdef USE_SKINNING\\\\n\\\\n\\\\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\\\n\\\\n\\\\tvec4 skinned = vec4( 0.0 );\\\\n\\\\tskinned += boneMatX * skinVertex * skinWeight.x;\\\\n\\\\tskinned += boneMatY * skinVertex * skinWeight.y;\\\\n\\\\tskinned += boneMatZ * skinVertex * skinWeight.z;\\\\n\\\\tskinned += boneMatW * skinVertex * skinWeight.w;\\\\n\\\\n\\\\ttransformed = ( bindMatrixInverse * skinned ).xyz;\\\\n\\\\n#endif\\\\n\\\\\\\",skinnormal_vertex:\\\\\\\"\\\\n#ifdef USE_SKINNING\\\\n\\\\n\\\\tmat4 skinMatrix = mat4( 0.0 );\\\\n\\\\tskinMatrix += skinWeight.x * boneMatX;\\\\n\\\\tskinMatrix += skinWeight.y * boneMatY;\\\\n\\\\tskinMatrix += skinWeight.z * boneMatZ;\\\\n\\\\tskinMatrix += skinWeight.w * boneMatW;\\\\n\\\\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\\\\n\\\\n\\\\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\\\n\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\n\\\\t\\\\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\\\n\\\\n\\\\t#endif\\\\n\\\\n#endif\\\\n\\\\\\\",specularmap_fragment:\\\\\\\"\\\\nfloat specularStrength;\\\\n\\\\n#ifdef USE_SPECULARMAP\\\\n\\\\n\\\\tvec4 texelSpecular = texture2D( specularMap, vUv );\\\\n\\\\tspecularStrength = texelSpecular.r;\\\\n\\\\n#else\\\\n\\\\n\\\\tspecularStrength = 1.0;\\\\n\\\\n#endif\\\\n\\\\\\\",specularmap_pars_fragment:\\\\\\\"\\\\n#ifdef USE_SPECULARMAP\\\\n\\\\n\\\\tuniform sampler2D specularMap;\\\\n\\\\n#endif\\\\n\\\\\\\",tonemapping_fragment:\\\\\\\"\\\\n#if defined( TONE_MAPPING )\\\\n\\\\n\\\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\\\n\\\\n#endif\\\\n\\\\\\\",tonemapping_pars_fragment:\\\\\\\"\\\\n#ifndef saturate\\\\n// <common> may have defined saturate() already\\\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\\\n#endif\\\\n\\\\nuniform float toneMappingExposure;\\\\n\\\\n// exposure only\\\\nvec3 LinearToneMapping( vec3 color ) {\\\\n\\\\n\\\\treturn toneMappingExposure * color;\\\\n\\\\n}\\\\n\\\\n// source: https://www.cs.utah.edu/~reinhard/cdrom/\\\\nvec3 ReinhardToneMapping( vec3 color ) {\\\\n\\\\n\\\\tcolor *= toneMappingExposure;\\\\n\\\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\\\n\\\\n}\\\\n\\\\n// source: http://filmicworlds.com/blog/filmic-tonemapping-operators/\\\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\\\n\\\\n\\\\t// optimized filmic operator by Jim Hejl and Richard Burgess-Dawson\\\\n\\\\tcolor *= toneMappingExposure;\\\\n\\\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\\\n\\\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\\\n\\\\n}\\\\n\\\\n// source: https://github.com/selfshadow/ltc_code/blob/master/webgl/shaders/ltc/ltc_blit.fs\\\\nvec3 RRTAndODTFit( vec3 v ) {\\\\n\\\\n\\\\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\\\\n\\\\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\\\\n\\\\treturn a / b;\\\\n\\\\n}\\\\n\\\\n// this implementation of ACES is modified to accommodate a brighter viewing environment.\\\\n// the scale factor of 1/0.6 is subjective. see discussion in #19621.\\\\n\\\\nvec3 ACESFilmicToneMapping( vec3 color ) {\\\\n\\\\n\\\\t// sRGB => XYZ => D65_2_D60 => AP1 => RRT_SAT\\\\n\\\\tconst mat3 ACESInputMat = mat3(\\\\n\\\\t\\\\tvec3( 0.59719, 0.07600, 0.02840 ), // transposed from source\\\\n\\\\t\\\\tvec3( 0.35458, 0.90834, 0.13383 ),\\\\n\\\\t\\\\tvec3( 0.04823, 0.01566, 0.83777 )\\\\n\\\\t);\\\\n\\\\n\\\\t// ODT_SAT => XYZ => D60_2_D65 => sRGB\\\\n\\\\tconst mat3 ACESOutputMat = mat3(\\\\n\\\\t\\\\tvec3(  1.60475, -0.10208, -0.00327 ), // transposed from source\\\\n\\\\t\\\\tvec3( -0.53108,  1.10813, -0.07276 ),\\\\n\\\\t\\\\tvec3( -0.07367, -0.00605,  1.07602 )\\\\n\\\\t);\\\\n\\\\n\\\\tcolor *= toneMappingExposure / 0.6;\\\\n\\\\n\\\\tcolor = ACESInputMat * color;\\\\n\\\\n\\\\t// Apply RRT and ODT\\\\n\\\\tcolor = RRTAndODTFit( color );\\\\n\\\\n\\\\tcolor = ACESOutputMat * color;\\\\n\\\\n\\\\t// Clamp to [0, 1]\\\\n\\\\treturn saturate( color );\\\\n\\\\n}\\\\n\\\\nvec3 CustomToneMapping( vec3 color ) { return color; }\\\\n\\\\\\\",transmission_fragment:\\\\\\\"\\\\n#ifdef USE_TRANSMISSION\\\\n\\\\n\\\\tfloat transmissionAlpha = 1.0;\\\\n\\\\tfloat transmissionFactor = transmission;\\\\n\\\\tfloat thicknessFactor = thickness;\\\\n\\\\n\\\\t#ifdef USE_TRANSMISSIONMAP\\\\n\\\\n\\\\t\\\\ttransmissionFactor *= texture2D( transmissionMap, vUv ).r;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#ifdef USE_THICKNESSMAP\\\\n\\\\n\\\\t\\\\tthicknessFactor *= texture2D( thicknessMap, vUv ).g;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\tvec3 pos = vWorldPosition;\\\\n\\\\tvec3 v = normalize( cameraPosition - pos );\\\\n\\\\tvec3 n = inverseTransformDirection( normal, viewMatrix );\\\\n\\\\n\\\\tvec4 transmission = getIBLVolumeRefraction(\\\\n\\\\t\\\\tn, v, roughnessFactor, material.diffuseColor, material.specularColor, material.specularF90,\\\\n\\\\t\\\\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\\\\n\\\\t\\\\tattenuationTint, attenuationDistance );\\\\n\\\\n\\\\ttotalDiffuse = mix( totalDiffuse, transmission.rgb, transmissionFactor );\\\\n\\\\ttransmissionAlpha = mix( transmissionAlpha, transmission.a, transmissionFactor );\\\\n#endif\\\\n\\\\\\\",transmission_pars_fragment:\\\\\\\"\\\\n#ifdef USE_TRANSMISSION\\\\n\\\\n\\\\t// Transmission code is based on glTF-Sampler-Viewer\\\\n\\\\t// https://github.com/KhronosGroup/glTF-Sample-Viewer\\\\n\\\\n\\\\tuniform float transmission;\\\\n\\\\tuniform float thickness;\\\\n\\\\tuniform float attenuationDistance;\\\\n\\\\tuniform vec3 attenuationTint;\\\\n\\\\n\\\\t#ifdef USE_TRANSMISSIONMAP\\\\n\\\\n\\\\t\\\\tuniform sampler2D transmissionMap;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#ifdef USE_THICKNESSMAP\\\\n\\\\n\\\\t\\\\tuniform sampler2D thicknessMap;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\tuniform vec2 transmissionSamplerSize;\\\\n\\\\tuniform sampler2D transmissionSamplerMap;\\\\n\\\\n\\\\tuniform mat4 modelMatrix;\\\\n\\\\tuniform mat4 projectionMatrix;\\\\n\\\\n\\\\tvarying vec3 vWorldPosition;\\\\n\\\\n\\\\tvec3 getVolumeTransmissionRay( vec3 n, vec3 v, float thickness, float ior, mat4 modelMatrix ) {\\\\n\\\\n\\\\t\\\\t// Direction of refracted light.\\\\n\\\\t\\\\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\\\\n\\\\n\\\\t\\\\t// Compute rotation-independant scaling of the model matrix.\\\\n\\\\t\\\\tvec3 modelScale;\\\\n\\\\t\\\\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\\\\n\\\\t\\\\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\\\\n\\\\t\\\\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\\\\n\\\\n\\\\t\\\\t// The thickness is specified in local space.\\\\n\\\\t\\\\treturn normalize( refractionVector ) * thickness * modelScale;\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tfloat applyIorToRoughness( float roughness, float ior ) {\\\\n\\\\n\\\\t\\\\t// Scale roughness with IOR so that an IOR of 1.0 results in no microfacet refraction and\\\\n\\\\t\\\\t// an IOR of 1.5 results in the default amount of microfacet refraction.\\\\n\\\\t\\\\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tvec4 getTransmissionSample( vec2 fragCoord, float roughness, float ior ) {\\\\n\\\\n\\\\t\\\\tfloat framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\\\\n\\\\n\\\\t\\\\t#ifdef TEXTURE_LOD_EXT\\\\n\\\\n\\\\t\\\\t\\\\treturn texture2DLodEXT( transmissionSamplerMap, fragCoord.xy, framebufferLod );\\\\n\\\\n\\\\t\\\\t#else\\\\n\\\\n\\\\t\\\\t\\\\treturn texture2D( transmissionSamplerMap, fragCoord.xy, framebufferLod );\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tvec3 applyVolumeAttenuation( vec3 radiance, float transmissionDistance, vec3 attenuationColor, float attenuationDistance ) {\\\\n\\\\n\\\\t\\\\tif ( attenuationDistance == 0.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t// Attenuation distance is +∞ (which we indicate by zero), i.e. the transmitted color is not attenuated at all.\\\\n\\\\t\\\\t\\\\treturn radiance;\\\\n\\\\n\\\\t\\\\t} else {\\\\n\\\\n\\\\t\\\\t\\\\t// Compute light attenuation using Beer's law.\\\\n\\\\t\\\\t\\\\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\\\\n\\\\t\\\\t\\\\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance ); // Beer's law\\\\n\\\\t\\\\t\\\\treturn transmittance * radiance;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tvec4 getIBLVolumeRefraction( vec3 n, vec3 v, float roughness, vec3 diffuseColor, vec3 specularColor, float specularF90,\\\\n\\\\t\\\\tvec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness,\\\\n\\\\t\\\\tvec3 attenuationColor, float attenuationDistance ) {\\\\n\\\\n\\\\t\\\\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\\\\n\\\\t\\\\tvec3 refractedRayExit = position + transmissionRay;\\\\n\\\\n\\\\t\\\\t// Project refracted vector on the framebuffer, while mapping to normalized device coordinates.\\\\n\\\\t\\\\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\\\\n\\\\t\\\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\\\n\\\\t\\\\trefractionCoords += 1.0;\\\\n\\\\t\\\\trefractionCoords /= 2.0;\\\\n\\\\n\\\\t\\\\t// Sample framebuffer to get pixel the refracted ray hits.\\\\n\\\\t\\\\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\\\\n\\\\n\\\\t\\\\tvec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\\\\n\\\\n\\\\t\\\\t// Get the specular component.\\\\n\\\\t\\\\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\\\\n\\\\n\\\\t\\\\treturn vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\\\\n\\\\n\\\\t}\\\\n#endif\\\\n\\\\\\\",uv_pars_fragment:\\\\\\\"\\\\n#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\\\\n\\\\n\\\\tvarying vec2 vUv;\\\\n\\\\n#endif\\\\n\\\\\\\",uv_pars_vertex:\\\\\\\"\\\\n#ifdef USE_UV\\\\n\\\\n\\\\t#ifdef UVS_VERTEX_ONLY\\\\n\\\\n\\\\t\\\\tvec2 vUv;\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\tuniform mat3 uvTransform;\\\\n\\\\n#endif\\\\n\\\\\\\",uv_vertex:\\\\\\\"\\\\n#ifdef USE_UV\\\\n\\\\n\\\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\\\n\\\\n#endif\\\\n\\\\\\\",uv2_pars_fragment:\\\\\\\"\\\\n#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\\\n\\\\n\\\\tvarying vec2 vUv2;\\\\n\\\\n#endif\\\\n\\\\\\\",uv2_pars_vertex:\\\\\\\"\\\\n#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\\\n\\\\n\\\\tattribute vec2 uv2;\\\\n\\\\tvarying vec2 vUv2;\\\\n\\\\n\\\\tuniform mat3 uv2Transform;\\\\n\\\\n#endif\\\\n\\\\\\\",uv2_vertex:\\\\\\\"\\\\n#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\\\n\\\\n\\\\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\\\\n\\\\n#endif\\\\n\\\\\\\",worldpos_vertex:\\\\\\\"\\\\n#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION )\\\\n\\\\n\\\\tvec4 worldPosition = vec4( transformed, 1.0 );\\\\n\\\\n\\\\t#ifdef USE_INSTANCING\\\\n\\\\n\\\\t\\\\tworldPosition = instanceMatrix * worldPosition;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\tworldPosition = modelMatrix * worldPosition;\\\\n\\\\n#endif\\\\n\\\\\\\",background_vert:\\\\\\\"\\\\nvarying vec2 vUv;\\\\nuniform mat3 uvTransform;\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\\\n\\\\n\\\\tgl_Position = vec4( position.xy, 1.0, 1.0 );\\\\n\\\\n}\\\\n\\\\\\\",background_frag:\\\\\\\"\\\\nuniform sampler2D t2D;\\\\n\\\\nvarying vec2 vUv;\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvec4 texColor = texture2D( t2D, vUv );\\\\n\\\\n\\\\tgl_FragColor = mapTexelToLinear( texColor );\\\\n\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\n}\\\\n\\\\\\\",cube_vert:\\\\\\\"\\\\nvarying vec3 vWorldDirection;\\\\n\\\\n#include <common>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvWorldDirection = transformDirection( position, modelMatrix );\\\\n\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\n\\\\tgl_Position.z = gl_Position.w; // set z to camera.far\\\\n\\\\n}\\\\n\\\\\\\",cube_frag:\\\\\\\"\\\\n#include <envmap_common_pars_fragment>\\\\nuniform float opacity;\\\\n\\\\nvarying vec3 vWorldDirection;\\\\n\\\\n#include <cube_uv_reflection_fragment>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvec3 vReflect = vWorldDirection;\\\\n\\\\t#include <envmap_fragment>\\\\n\\\\n\\\\tgl_FragColor = envColor;\\\\n\\\\tgl_FragColor.a *= opacity;\\\\n\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\n}\\\\n\\\\\\\",depth_vert:\\\\\\\"\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\n\\\\n// This is used for computing an equivalent of gl_FragCoord.z that is as high precision as possible.\\\\n// Some platforms compute gl_FragCoord at a lower precision which makes the manually computed value better for\\\\n// depth-based postprocessing effects. Reproduced on iPad with A10 processor / iPadOS 13.3.1.\\\\nvarying vec2 vHighPrecisionZW;\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <uv_vertex>\\\\n\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\n\\\\t#ifdef USE_DISPLACEMENTMAP\\\\n\\\\n\\\\t\\\\t#include <beginnormal_vertex>\\\\n\\\\t\\\\t#include <morphnormal_vertex>\\\\n\\\\t\\\\t#include <skinnormal_vertex>\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\n\\\\tvHighPrecisionZW = gl_Position.zw;\\\\n\\\\n}\\\\n\\\\\\\",depth_frag:\\\\\\\"\\\\n#if DEPTH_PACKING == 3200\\\\n\\\\n\\\\tuniform float opacity;\\\\n\\\\n#endif\\\\n\\\\n#include <common>\\\\n#include <packing>\\\\n#include <uv_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\n\\\\nvarying vec2 vHighPrecisionZW;\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\n\\\\tvec4 diffuseColor = vec4( 1.0 );\\\\n\\\\n\\\\t#if DEPTH_PACKING == 3200\\\\n\\\\n\\\\t\\\\tdiffuseColor.a = opacity;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\n\\\\t// Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values.\\\\n\\\\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\\\\n\\\\n\\\\t#if DEPTH_PACKING == 3200\\\\n\\\\n\\\\t\\\\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\\\\n\\\\n\\\\t#elif DEPTH_PACKING == 3201\\\\n\\\\n\\\\t\\\\tgl_FragColor = packDepthToRGBA( fragCoordZ );\\\\n\\\\n\\\\t#endif\\\\n\\\\n}\\\\n\\\\\\\",distanceRGBA_vert:\\\\\\\"\\\\n#define DISTANCE\\\\n\\\\nvarying vec3 vWorldPosition;\\\\n\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <uv_vertex>\\\\n\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\n\\\\t#ifdef USE_DISPLACEMENTMAP\\\\n\\\\n\\\\t\\\\t#include <beginnormal_vertex>\\\\n\\\\t\\\\t#include <morphnormal_vertex>\\\\n\\\\t\\\\t#include <skinnormal_vertex>\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\n\\\\tvWorldPosition = worldPosition.xyz;\\\\n\\\\n}\\\\n\\\\\\\",distanceRGBA_frag:\\\\\\\"\\\\n#define DISTANCE\\\\n\\\\nuniform vec3 referencePosition;\\\\nuniform float nearDistance;\\\\nuniform float farDistance;\\\\nvarying vec3 vWorldPosition;\\\\n\\\\n#include <common>\\\\n#include <packing>\\\\n#include <uv_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\n\\\\nvoid main () {\\\\n\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\n\\\\tvec4 diffuseColor = vec4( 1.0 );\\\\n\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\n\\\\tfloat dist = length( vWorldPosition - referencePosition );\\\\n\\\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\\\n\\\\tdist = saturate( dist ); // clamp to [ 0, 1 ]\\\\n\\\\n\\\\tgl_FragColor = packDepthToRGBA( dist );\\\\n\\\\n}\\\\n\\\\\\\",equirect_vert:\\\\\\\"\\\\nvarying vec3 vWorldDirection;\\\\n\\\\n#include <common>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvWorldDirection = transformDirection( position, modelMatrix );\\\\n\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\n}\\\\n\\\\\\\",equirect_frag:\\\\\\\"\\\\nuniform sampler2D tEquirect;\\\\n\\\\nvarying vec3 vWorldDirection;\\\\n\\\\n#include <common>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvec3 direction = normalize( vWorldDirection );\\\\n\\\\n\\\\tvec2 sampleUV = equirectUv( direction );\\\\n\\\\n\\\\tvec4 texColor = texture2D( tEquirect, sampleUV );\\\\n\\\\n\\\\tgl_FragColor = mapTexelToLinear( texColor );\\\\n\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\n}\\\\n\\\\\\\",linedashed_vert:\\\\\\\"\\\\nuniform float scale;\\\\nattribute float lineDistance;\\\\n\\\\nvarying float vLineDistance;\\\\n\\\\n#include <common>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvLineDistance = scale * lineDistance;\\\\n\\\\n\\\\t#include <color_vertex>\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n\\\\n}\\\\n\\\\\\\",linedashed_frag:\\\\\\\"\\\\nuniform vec3 diffuse;\\\\nuniform float opacity;\\\\n\\\\nuniform float dashSize;\\\\nuniform float totalSize;\\\\n\\\\nvarying float vLineDistance;\\\\n\\\\n#include <common>\\\\n#include <color_pars_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\n\\\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\\\n\\\\n\\\\t\\\\tdiscard;\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tvec3 outgoingLight = vec3( 0.0 );\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\n\\\\toutgoingLight = diffuseColor.rgb; // simple shader\\\\n\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\n}\\\\n\\\\\\\",meshbasic_vert:\\\\\\\"\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <uv2_pars_vertex>\\\\n#include <envmap_pars_vertex>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <uv2_vertex>\\\\n\\\\t#include <color_vertex>\\\\n\\\\n\\\\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\\\\n\\\\n\\\\t\\\\t#include <beginnormal_vertex>\\\\n\\\\t\\\\t#include <morphnormal_vertex>\\\\n\\\\t\\\\t#include <skinbase_vertex>\\\\n\\\\t\\\\t#include <skinnormal_vertex>\\\\n\\\\t\\\\t#include <defaultnormal_vertex>\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <envmap_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n\\\\n}\\\\n\\\\\\\",meshbasic_frag:\\\\\\\"\\\\nuniform vec3 diffuse;\\\\nuniform float opacity;\\\\n\\\\n#ifndef FLAT_SHADED\\\\n\\\\n\\\\tvarying vec3 vNormal;\\\\n\\\\n#endif\\\\n\\\\n#include <common>\\\\n#include <dithering_pars_fragment>\\\\n#include <color_pars_fragment>\\\\n#include <uv_pars_fragment>\\\\n#include <uv2_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <aomap_pars_fragment>\\\\n#include <lightmap_pars_fragment>\\\\n#include <envmap_common_pars_fragment>\\\\n#include <envmap_pars_fragment>\\\\n#include <cube_uv_reflection_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <specularmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\t#include <specularmap_fragment>\\\\n\\\\n\\\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\\\n\\\\n\\\\t// accumulation (baked indirect lighting only)\\\\n\\\\t#ifdef USE_LIGHTMAP\\\\n\\\\n\\\\t\\\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\\\n\\\\t\\\\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t// modulation\\\\n\\\\t#include <aomap_fragment>\\\\n\\\\n\\\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\\\n\\\\n\\\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\\\n\\\\n\\\\t#include <envmap_fragment>\\\\n\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\t#include <dithering_fragment>\\\\n\\\\n}\\\\n\\\\\\\",meshlambert_vert:\\\\\\\"\\\\n#define LAMBERT\\\\n\\\\nvarying vec3 vLightFront;\\\\nvarying vec3 vIndirectFront;\\\\n\\\\n#ifdef DOUBLE_SIDED\\\\n\\\\tvarying vec3 vLightBack;\\\\n\\\\tvarying vec3 vIndirectBack;\\\\n#endif\\\\n\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <uv2_pars_vertex>\\\\n#include <envmap_pars_vertex>\\\\n#include <bsdfs>\\\\n#include <lights_pars_begin>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <shadowmap_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <uv2_vertex>\\\\n\\\\t#include <color_vertex>\\\\n\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <envmap_vertex>\\\\n\\\\t#include <lights_lambert_vertex>\\\\n\\\\t#include <shadowmap_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n}\\\\n\\\\\\\",meshlambert_frag:\\\\\\\"\\\\nuniform vec3 diffuse;\\\\nuniform vec3 emissive;\\\\nuniform float opacity;\\\\n\\\\nvarying vec3 vLightFront;\\\\nvarying vec3 vIndirectFront;\\\\n\\\\n#ifdef DOUBLE_SIDED\\\\n\\\\tvarying vec3 vLightBack;\\\\n\\\\tvarying vec3 vIndirectBack;\\\\n#endif\\\\n\\\\n\\\\n#include <common>\\\\n#include <packing>\\\\n#include <dithering_pars_fragment>\\\\n#include <color_pars_fragment>\\\\n#include <uv_pars_fragment>\\\\n#include <uv2_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <aomap_pars_fragment>\\\\n#include <lightmap_pars_fragment>\\\\n#include <emissivemap_pars_fragment>\\\\n#include <envmap_common_pars_fragment>\\\\n#include <envmap_pars_fragment>\\\\n#include <cube_uv_reflection_fragment>\\\\n#include <bsdfs>\\\\n#include <lights_pars_begin>\\\\n#include <fog_pars_fragment>\\\\n#include <shadowmap_pars_fragment>\\\\n#include <shadowmask_pars_fragment>\\\\n#include <specularmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\\\n\\\\tvec3 totalEmissiveRadiance = emissive;\\\\n\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\t#include <specularmap_fragment>\\\\n\\\\t#include <emissivemap_fragment>\\\\n\\\\n\\\\t// accumulation\\\\n\\\\n\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\n\\\\t\\\\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\treflectedLight.indirectDiffuse += vIndirectFront;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#include <lightmap_fragment>\\\\n\\\\n\\\\treflectedLight.indirectDiffuse *= BRDF_Lambert( diffuseColor.rgb );\\\\n\\\\n\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\n\\\\t\\\\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\treflectedLight.directDiffuse = vLightFront;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\treflectedLight.directDiffuse *= BRDF_Lambert( diffuseColor.rgb ) * getShadowMask();\\\\n\\\\n\\\\t// modulation\\\\n\\\\n\\\\t#include <aomap_fragment>\\\\n\\\\n\\\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\\\n\\\\n\\\\t#include <envmap_fragment>\\\\n\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\t#include <dithering_fragment>\\\\n}\\\\n\\\\\\\",meshmatcap_vert:\\\\\\\"\\\\n#define MATCAP\\\\n\\\\nvarying vec3 vViewPosition;\\\\n\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <color_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <normal_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <color_vertex>\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\t#include <normal_vertex>\\\\n\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n\\\\n\\\\tvViewPosition = - mvPosition.xyz;\\\\n\\\\n}\\\\n\\\\\\\",meshmatcap_frag:\\\\\\\"\\\\n#define MATCAP\\\\n\\\\nuniform vec3 diffuse;\\\\nuniform float opacity;\\\\nuniform sampler2D matcap;\\\\n\\\\nvarying vec3 vViewPosition;\\\\n\\\\n#include <common>\\\\n#include <dithering_pars_fragment>\\\\n#include <color_pars_fragment>\\\\n#include <uv_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <normal_pars_fragment>\\\\n#include <bumpmap_pars_fragment>\\\\n#include <normalmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\t#include <normal_fragment_begin>\\\\n\\\\t#include <normal_fragment_maps>\\\\n\\\\n\\\\tvec3 viewDir = normalize( vViewPosition );\\\\n\\\\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\\\\n\\\\tvec3 y = cross( viewDir, x );\\\\n\\\\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5; // 0.495 to remove artifacts caused by undersized matcap disks\\\\n\\\\n\\\\t#ifdef USE_MATCAP\\\\n\\\\n\\\\t\\\\tvec4 matcapColor = texture2D( matcap, uv );\\\\n\\\\t\\\\tmatcapColor = matcapTexelToLinear( matcapColor );\\\\n\\\\n\\\\t#else\\\\n\\\\n\\\\t\\\\tvec4 matcapColor = vec4( 1.0 );\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\\\n\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\t#include <dithering_fragment>\\\\n\\\\n}\\\\n\\\\\\\",meshnormal_vert:\\\\\\\"\\\\n#define NORMAL\\\\n\\\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\\\n\\\\n\\\\tvarying vec3 vViewPosition;\\\\n\\\\n#endif\\\\n\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <normal_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <uv_vertex>\\\\n\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\t#include <normal_vertex>\\\\n\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\\\n\\\\n\\\\tvViewPosition = - mvPosition.xyz;\\\\n\\\\n#endif\\\\n\\\\n}\\\\n\\\\\\\",meshnormal_frag:\\\\\\\"\\\\n#define NORMAL\\\\n\\\\nuniform float opacity;\\\\n\\\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\\\n\\\\n\\\\tvarying vec3 vViewPosition;\\\\n\\\\n#endif\\\\n\\\\n#include <packing>\\\\n#include <uv_pars_fragment>\\\\n#include <normal_pars_fragment>\\\\n#include <bumpmap_pars_fragment>\\\\n#include <normalmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <normal_fragment_begin>\\\\n\\\\t#include <normal_fragment_maps>\\\\n\\\\n\\\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\\\n\\\\n}\\\\n\\\\\\\",meshphong_vert:\\\\\\\"\\\\n#define PHONG\\\\n\\\\nvarying vec3 vViewPosition;\\\\n\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <uv2_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <envmap_pars_vertex>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <normal_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <shadowmap_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <uv2_vertex>\\\\n\\\\t#include <color_vertex>\\\\n\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\t#include <normal_vertex>\\\\n\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\n\\\\tvViewPosition = - mvPosition.xyz;\\\\n\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <envmap_vertex>\\\\n\\\\t#include <shadowmap_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n\\\\n}\\\\n\\\\\\\",meshphong_frag:\\\\\\\"\\\\n#define PHONG\\\\n\\\\nuniform vec3 diffuse;\\\\nuniform vec3 emissive;\\\\nuniform vec3 specular;\\\\nuniform float shininess;\\\\nuniform float opacity;\\\\n\\\\n#include <common>\\\\n#include <packing>\\\\n#include <dithering_pars_fragment>\\\\n#include <color_pars_fragment>\\\\n#include <uv_pars_fragment>\\\\n#include <uv2_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <aomap_pars_fragment>\\\\n#include <lightmap_pars_fragment>\\\\n#include <emissivemap_pars_fragment>\\\\n#include <envmap_common_pars_fragment>\\\\n#include <envmap_pars_fragment>\\\\n#include <cube_uv_reflection_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <bsdfs>\\\\n#include <lights_pars_begin>\\\\n#include <normal_pars_fragment>\\\\n#include <lights_phong_pars_fragment>\\\\n#include <shadowmap_pars_fragment>\\\\n#include <bumpmap_pars_fragment>\\\\n#include <normalmap_pars_fragment>\\\\n#include <specularmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\\\n\\\\tvec3 totalEmissiveRadiance = emissive;\\\\n\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\t#include <specularmap_fragment>\\\\n\\\\t#include <normal_fragment_begin>\\\\n\\\\t#include <normal_fragment_maps>\\\\n\\\\t#include <emissivemap_fragment>\\\\n\\\\n\\\\t// accumulation\\\\n\\\\t#include <lights_phong_fragment>\\\\n\\\\t#include <lights_fragment_begin>\\\\n\\\\t#include <lights_fragment_maps>\\\\n\\\\t#include <lights_fragment_end>\\\\n\\\\n\\\\t// modulation\\\\n\\\\t#include <aomap_fragment>\\\\n\\\\n\\\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\\\n\\\\n\\\\t#include <envmap_fragment>\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\t#include <dithering_fragment>\\\\n\\\\n}\\\\n\\\\\\\",meshphysical_vert:\\\\\\\"\\\\n#define STANDARD\\\\n\\\\nvarying vec3 vViewPosition;\\\\n\\\\n#ifdef USE_TRANSMISSION\\\\n\\\\n\\\\tvarying vec3 vWorldPosition;\\\\n\\\\n#endif\\\\n\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <uv2_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <normal_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <shadowmap_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <uv2_vertex>\\\\n\\\\t#include <color_vertex>\\\\n\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\t#include <normal_vertex>\\\\n\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\n\\\\tvViewPosition = - mvPosition.xyz;\\\\n\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <shadowmap_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n\\\\n#ifdef USE_TRANSMISSION\\\\n\\\\n\\\\tvWorldPosition = worldPosition.xyz;\\\\n\\\\n#endif\\\\n}\\\\n\\\\\\\",meshphysical_frag:\\\\\\\"\\\\n#define STANDARD\\\\n\\\\n#ifdef PHYSICAL\\\\n\\\\t#define IOR\\\\n\\\\t#define SPECULAR\\\\n#endif\\\\n\\\\nuniform vec3 diffuse;\\\\nuniform vec3 emissive;\\\\nuniform float roughness;\\\\nuniform float metalness;\\\\nuniform float opacity;\\\\n\\\\n#ifdef IOR\\\\n\\\\tuniform float ior;\\\\n#endif\\\\n\\\\n#ifdef SPECULAR\\\\n\\\\tuniform float specularIntensity;\\\\n\\\\tuniform vec3 specularTint;\\\\n\\\\n\\\\t#ifdef USE_SPECULARINTENSITYMAP\\\\n\\\\t\\\\tuniform sampler2D specularIntensityMap;\\\\n\\\\t#endif\\\\n\\\\n\\\\t#ifdef USE_SPECULARTINTMAP\\\\n\\\\t\\\\tuniform sampler2D specularTintMap;\\\\n\\\\t#endif\\\\n#endif\\\\n\\\\n#ifdef USE_CLEARCOAT\\\\n\\\\tuniform float clearcoat;\\\\n\\\\tuniform float clearcoatRoughness;\\\\n#endif\\\\n\\\\n#ifdef USE_SHEEN\\\\n\\\\tuniform vec3 sheenTint;\\\\n\\\\tuniform float sheenRoughness;\\\\n#endif\\\\n\\\\nvarying vec3 vViewPosition;\\\\n\\\\n#include <common>\\\\n#include <packing>\\\\n#include <dithering_pars_fragment>\\\\n#include <color_pars_fragment>\\\\n#include <uv_pars_fragment>\\\\n#include <uv2_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <aomap_pars_fragment>\\\\n#include <lightmap_pars_fragment>\\\\n#include <emissivemap_pars_fragment>\\\\n#include <bsdfs>\\\\n#include <cube_uv_reflection_fragment>\\\\n#include <envmap_common_pars_fragment>\\\\n#include <envmap_physical_pars_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <lights_pars_begin>\\\\n#include <normal_pars_fragment>\\\\n#include <lights_physical_pars_fragment>\\\\n#include <transmission_pars_fragment>\\\\n#include <shadowmap_pars_fragment>\\\\n#include <bumpmap_pars_fragment>\\\\n#include <normalmap_pars_fragment>\\\\n#include <clearcoat_pars_fragment>\\\\n#include <roughnessmap_pars_fragment>\\\\n#include <metalnessmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\\\n\\\\tvec3 totalEmissiveRadiance = emissive;\\\\n\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\t#include <roughnessmap_fragment>\\\\n\\\\t#include <metalnessmap_fragment>\\\\n\\\\t#include <normal_fragment_begin>\\\\n\\\\t#include <normal_fragment_maps>\\\\n\\\\t#include <clearcoat_normal_fragment_begin>\\\\n\\\\t#include <clearcoat_normal_fragment_maps>\\\\n\\\\t#include <emissivemap_fragment>\\\\n\\\\n\\\\t// accumulation\\\\n\\\\t#include <lights_physical_fragment>\\\\n\\\\t#include <lights_fragment_begin>\\\\n\\\\t#include <lights_fragment_maps>\\\\n\\\\t#include <lights_fragment_end>\\\\n\\\\n\\\\t// modulation\\\\n\\\\t#include <aomap_fragment>\\\\n\\\\n\\\\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\\\\n\\\\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\\\\n\\\\n\\\\t#include <transmission_fragment>\\\\n\\\\n\\\\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\\\\n\\\\n\\\\t#ifdef USE_CLEARCOAT\\\\n\\\\n\\\\t\\\\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\\\\n\\\\n\\\\t\\\\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\\\\n\\\\n\\\\t\\\\toutgoingLight = outgoingLight * ( 1.0 - clearcoat * Fcc ) + clearcoatSpecular * clearcoat;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\t#include <dithering_fragment>\\\\n\\\\n}\\\\n\\\\\\\",meshtoon_vert:\\\\\\\"\\\\n#define TOON\\\\n\\\\nvarying vec3 vViewPosition;\\\\n\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <uv2_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <normal_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <shadowmap_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <uv2_vertex>\\\\n\\\\t#include <color_vertex>\\\\n\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\t#include <normal_vertex>\\\\n\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\n\\\\tvViewPosition = - mvPosition.xyz;\\\\n\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <shadowmap_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n\\\\n}\\\\n\\\\\\\",meshtoon_frag:\\\\\\\"\\\\n#define TOON\\\\n\\\\nuniform vec3 diffuse;\\\\nuniform vec3 emissive;\\\\nuniform float opacity;\\\\n\\\\n#include <common>\\\\n#include <packing>\\\\n#include <dithering_pars_fragment>\\\\n#include <color_pars_fragment>\\\\n#include <uv_pars_fragment>\\\\n#include <uv2_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <aomap_pars_fragment>\\\\n#include <lightmap_pars_fragment>\\\\n#include <emissivemap_pars_fragment>\\\\n#include <gradientmap_pars_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <bsdfs>\\\\n#include <lights_pars_begin>\\\\n#include <normal_pars_fragment>\\\\n#include <lights_toon_pars_fragment>\\\\n#include <shadowmap_pars_fragment>\\\\n#include <bumpmap_pars_fragment>\\\\n#include <normalmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\\\n\\\\tvec3 totalEmissiveRadiance = emissive;\\\\n\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\t#include <normal_fragment_begin>\\\\n\\\\t#include <normal_fragment_maps>\\\\n\\\\t#include <emissivemap_fragment>\\\\n\\\\n\\\\t// accumulation\\\\n\\\\t#include <lights_toon_fragment>\\\\n\\\\t#include <lights_fragment_begin>\\\\n\\\\t#include <lights_fragment_maps>\\\\n\\\\t#include <lights_fragment_end>\\\\n\\\\n\\\\t// modulation\\\\n\\\\t#include <aomap_fragment>\\\\n\\\\n\\\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\\\n\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\t#include <dithering_fragment>\\\\n\\\\n}\\\\n\\\\\\\",points_vert:\\\\\\\"\\\\nuniform float size;\\\\nuniform float scale;\\\\n\\\\n#include <common>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <color_vertex>\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\n\\\\tgl_PointSize = size;\\\\n\\\\n\\\\t#ifdef USE_SIZEATTENUATION\\\\n\\\\n\\\\t\\\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\\\n\\\\n\\\\t\\\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n\\\\n}\\\\n\\\\\\\",points_frag:\\\\\\\"\\\\nuniform vec3 diffuse;\\\\nuniform float opacity;\\\\n\\\\n#include <common>\\\\n#include <color_pars_fragment>\\\\n#include <map_particle_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\n\\\\tvec3 outgoingLight = vec3( 0.0 );\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_particle_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\n\\\\toutgoingLight = diffuseColor.rgb;\\\\n\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\n}\\\\n\\\\\\\",shadow_vert:\\\\\\\"\\\\n#include <common>\\\\n#include <fog_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <shadowmap_pars_vertex>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <shadowmap_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n\\\\n}\\\\n\\\\\\\",shadow_frag:\\\\\\\"\\\\nuniform vec3 color;\\\\nuniform float opacity;\\\\n\\\\n#include <common>\\\\n#include <packing>\\\\n#include <fog_pars_fragment>\\\\n#include <bsdfs>\\\\n#include <lights_pars_begin>\\\\n#include <shadowmap_pars_fragment>\\\\n#include <shadowmask_pars_fragment>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\\\n\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\n}\\\\n\\\\\\\",sprite_vert:\\\\\\\"\\\\nuniform float rotation;\\\\nuniform vec2 center;\\\\n\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <uv_vertex>\\\\n\\\\n\\\\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\\\n\\\\n\\\\tvec2 scale;\\\\n\\\\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\\\\n\\\\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\\\\n\\\\n\\\\t#ifndef USE_SIZEATTENUATION\\\\n\\\\n\\\\t\\\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\\\n\\\\n\\\\t\\\\tif ( isPerspective ) scale *= - mvPosition.z;\\\\n\\\\n\\\\t#endif\\\\n\\\\n\\\\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\\\\n\\\\n\\\\tvec2 rotatedPosition;\\\\n\\\\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\\\n\\\\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\\\n\\\\n\\\\tmvPosition.xy += rotatedPosition;\\\\n\\\\n\\\\tgl_Position = projectionMatrix * mvPosition;\\\\n\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n\\\\n}\\\\n\\\\\\\",sprite_frag:\\\\\\\"\\\\nuniform vec3 diffuse;\\\\nuniform float opacity;\\\\n\\\\n#include <common>\\\\n#include <uv_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\n\\\\tvec3 outgoingLight = vec3( 0.0 );\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\n\\\\toutgoingLight = diffuseColor.rgb;\\\\n\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\n}\\\\n\\\\\\\"};var U=n(11);const G={common:{diffuse:{value:new D.a(16777215)},opacity:{value:1},map:{value:null},uvTransform:{value:new U.a},uv2Transform:{value:new U.a},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},maxMipLevel:{value:0}},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 d.a(1,1)}},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 D.a(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:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{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 D.a(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new U.a}},sprite:{diffuse:{value:new D.a(16777215)},opacity:{value:1},center:{value:new d.a(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new U.a}}},V={basic:{uniforms:P([G.common,G.specularmap,G.envmap,G.aomap,G.lightmap,G.fog]),vertexShader:z.meshbasic_vert,fragmentShader:z.meshbasic_frag},lambert:{uniforms:P([G.common,G.specularmap,G.envmap,G.aomap,G.lightmap,G.emissivemap,G.fog,G.lights,{emissive:{value:new D.a(0)}}]),vertexShader:z.meshlambert_vert,fragmentShader:z.meshlambert_frag},phong:{uniforms:P([G.common,G.specularmap,G.envmap,G.aomap,G.lightmap,G.emissivemap,G.bumpmap,G.normalmap,G.displacementmap,G.fog,G.lights,{emissive:{value:new D.a(0)},specular:{value:new D.a(1118481)},shininess:{value:30}}]),vertexShader:z.meshphong_vert,fragmentShader:z.meshphong_frag},standard:{uniforms:P([G.common,G.envmap,G.aomap,G.lightmap,G.emissivemap,G.bumpmap,G.normalmap,G.displacementmap,G.roughnessmap,G.metalnessmap,G.fog,G.lights,{emissive:{value:new D.a(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:z.meshphysical_vert,fragmentShader:z.meshphysical_frag},toon:{uniforms:P([G.common,G.aomap,G.lightmap,G.emissivemap,G.bumpmap,G.normalmap,G.displacementmap,G.gradientmap,G.fog,G.lights,{emissive:{value:new D.a(0)}}]),vertexShader:z.meshtoon_vert,fragmentShader:z.meshtoon_frag},matcap:{uniforms:P([G.common,G.bumpmap,G.normalmap,G.displacementmap,G.fog,{matcap:{value:null}}]),vertexShader:z.meshmatcap_vert,fragmentShader:z.meshmatcap_frag},points:{uniforms:P([G.points,G.fog]),vertexShader:z.points_vert,fragmentShader:z.points_frag},dashed:{uniforms:P([G.common,G.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:z.linedashed_vert,fragmentShader:z.linedashed_frag},depth:{uniforms:P([G.common,G.displacementmap]),vertexShader:z.depth_vert,fragmentShader:z.depth_frag},normal:{uniforms:P([G.common,G.bumpmap,G.normalmap,G.displacementmap,{opacity:{value:1}}]),vertexShader:z.meshnormal_vert,fragmentShader:z.meshnormal_frag},sprite:{uniforms:P([G.sprite,G.fog]),vertexShader:z.sprite_vert,fragmentShader:z.sprite_frag},background:{uniforms:{uvTransform:{value:new U.a},t2D:{value:null}},vertexShader:z.background_vert,fragmentShader:z.background_frag},cube:{uniforms:P([G.envmap,{opacity:{value:1}}]),vertexShader:z.cube_vert,fragmentShader:z.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:z.equirect_vert,fragmentShader:z.equirect_frag},distanceRGBA:{uniforms:P([G.common,G.displacementmap,{referencePosition:{value:new p.a},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:z.distanceRGBA_vert,fragmentShader:z.distanceRGBA_frag},shadow:{uniforms:P([G.lights,G.fog,{color:{value:new D.a(0)},opacity:{value:1}}]),vertexShader:z.shadow_vert,fragmentShader:z.shadow_frag}};function H(t,e,n,i,r){const s=new D.a(0);let o,a,l=0,c=null,u=0,h=null;function d(t,e){n.buffers.color.setClear(t.r,t.g,t.b,e,r)}return{getClearColor:function(){return s},setClearColor:function(t,e=1){s.set(t),l=e,d(s,l)},getClearAlpha:function(){return l},setClearAlpha:function(t){l=t,d(s,l)},render:function(n,r){let p=!1,_=!0===r.isScene?r.background:null;_&&_.isTexture&&(_=e.get(_));const m=t.xr,f=m.getSession&&m.getSession();f&&\\\\\\\"additive\\\\\\\"===f.environmentBlendMode&&(_=null),null===_?d(s,l):_&&_.isColor&&(d(_,1),p=!0),(t.autoClear||p)&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),_&&(_.isCubeTexture||_.mapping===w.q)?(void 0===a&&(a=new k.a(new N(1,1,1),new F({name:\\\\\\\"BackgroundCubeMaterial\\\\\\\",uniforms:R(V.cube.uniforms),vertexShader:V.cube.vertexShader,fragmentShader:V.cube.fragmentShader,side:w.i,depthTest:!1,depthWrite:!1,fog:!1})),a.geometry.deleteAttribute(\\\\\\\"normal\\\\\\\"),a.geometry.deleteAttribute(\\\\\\\"uv\\\\\\\"),a.onBeforeRender=function(t,e,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(a.material,\\\\\\\"envMap\\\\\\\",{get:function(){return this.uniforms.envMap.value}}),i.update(a)),a.material.uniforms.envMap.value=_,a.material.uniforms.flipEnvMap.value=_.isCubeTexture&&!1===_.isRenderTargetTexture?-1:1,c===_&&u===_.version&&h===t.toneMapping||(a.material.needsUpdate=!0,c=_,u=_.version,h=t.toneMapping),n.unshift(a,a.geometry,a.material,0,0,null)):_&&_.isTexture&&(void 0===o&&(o=new k.a(new L(2,2),new F({name:\\\\\\\"BackgroundMaterial\\\\\\\",uniforms:R(V.background.uniforms),vertexShader:V.background.vertexShader,fragmentShader:V.background.fragmentShader,side:w.H,depthTest:!1,depthWrite:!1,fog:!1})),o.geometry.deleteAttribute(\\\\\\\"normal\\\\\\\"),Object.defineProperty(o.material,\\\\\\\"map\\\\\\\",{get:function(){return this.uniforms.t2D.value}}),i.update(o)),o.material.uniforms.t2D.value=_,!0===_.matrixAutoUpdate&&_.updateMatrix(),o.material.uniforms.uvTransform.value.copy(_.matrix),c===_&&u===_.version&&h===t.toneMapping||(o.material.needsUpdate=!0,c=_,u=_.version,h=t.toneMapping),n.unshift(o,o.geometry,o.material,0,0,null))}}}function j(t,e,n,i){const r=t.getParameter(t.MAX_VERTEX_ATTRIBS),s=i.isWebGL2?null:e.get(\\\\\\\"OES_vertex_array_object\\\\\\\"),o=i.isWebGL2||null!==s,a={},l=d(null);let c=l;function u(e){return i.isWebGL2?t.bindVertexArray(e):s.bindVertexArrayOES(e)}function h(e){return i.isWebGL2?t.deleteVertexArray(e):s.deleteVertexArrayOES(e)}function d(t){const e=[],n=[],i=[];for(let t=0;t<r;t++)e[t]=0,n[t]=0,i[t]=0;return{geometry:null,program:null,wireframe:!1,newAttributes:e,enabledAttributes:n,attributeDivisors:i,object:t,attributes:{},index:null}}function p(){const t=c.newAttributes;for(let e=0,n=t.length;e<n;e++)t[e]=0}function _(t){m(t,0)}function m(n,r){const s=c.newAttributes,o=c.enabledAttributes,a=c.attributeDivisors;if(s[n]=1,0===o[n]&&(t.enableVertexAttribArray(n),o[n]=1),a[n]!==r){(i.isWebGL2?t:e.get(\\\\\\\"ANGLE_instanced_arrays\\\\\\\"))[i.isWebGL2?\\\\\\\"vertexAttribDivisor\\\\\\\":\\\\\\\"vertexAttribDivisorANGLE\\\\\\\"](n,r),a[n]=r}}function f(){const e=c.newAttributes,n=c.enabledAttributes;for(let i=0,r=n.length;i<r;i++)n[i]!==e[i]&&(t.disableVertexAttribArray(i),n[i]=0)}function g(e,n,r,s,o,a){!0!==i.isWebGL2||r!==t.INT&&r!==t.UNSIGNED_INT?t.vertexAttribPointer(e,n,r,s,o,a):t.vertexAttribIPointer(e,n,r,o,a)}function v(){y(),c!==l&&(c=l,u(c.object))}function y(){l.geometry=null,l.program=null,l.wireframe=!1}return{setup:function(r,l,h,v,y){let x=!1;if(o){const e=function(e,n,r){const o=!0===r.wireframe;let l=a[e.id];void 0===l&&(l={},a[e.id]=l);let c=l[n.id];void 0===c&&(c={},l[n.id]=c);let u=c[o];void 0===u&&(u=d(i.isWebGL2?t.createVertexArray():s.createVertexArrayOES()),c[o]=u);return u}(v,h,l);c!==e&&(c=e,u(c.object)),x=function(t,e){const n=c.attributes,i=t.attributes;let r=0;for(const t in i){const e=n[t],s=i[t];if(void 0===e)return!0;if(e.attribute!==s)return!0;if(e.data!==s.data)return!0;r++}return c.attributesNum!==r||c.index!==e}(v,y),x&&function(t,e){const n={},i=t.attributes;let r=0;for(const t in i){const e=i[t],s={};s.attribute=e,e.data&&(s.data=e.data),n[t]=s,r++}c.attributes=n,c.attributesNum=r,c.index=e}(v,y)}else{const t=!0===l.wireframe;c.geometry===v.id&&c.program===h.id&&c.wireframe===t||(c.geometry=v.id,c.program=h.id,c.wireframe=t,x=!0)}!0===r.isInstancedMesh&&(x=!0),null!==y&&n.update(y,t.ELEMENT_ARRAY_BUFFER),x&&(!function(r,s,o,a){if(!1===i.isWebGL2&&(r.isInstancedMesh||a.isInstancedBufferGeometry)&&null===e.get(\\\\\\\"ANGLE_instanced_arrays\\\\\\\"))return;p();const l=a.attributes,c=o.getAttributes(),u=s.defaultAttributeValues;for(const e in c){const i=c[e];if(i.location>=0){let s=l[e];if(void 0===s&&(\\\\\\\"instanceMatrix\\\\\\\"===e&&r.instanceMatrix&&(s=r.instanceMatrix),\\\\\\\"instanceColor\\\\\\\"===e&&r.instanceColor&&(s=r.instanceColor)),void 0!==s){const e=s.normalized,o=s.itemSize,l=n.get(s);if(void 0===l)continue;const c=l.buffer,u=l.type,h=l.bytesPerElement;if(s.isInterleavedBufferAttribute){const n=s.data,l=n.stride,d=s.offset;if(n&&n.isInstancedInterleavedBuffer){for(let t=0;t<i.locationSize;t++)m(i.location+t,n.meshPerAttribute);!0!==r.isInstancedMesh&&void 0===a._maxInstanceCount&&(a._maxInstanceCount=n.meshPerAttribute*n.count)}else for(let t=0;t<i.locationSize;t++)_(i.location+t);t.bindBuffer(t.ARRAY_BUFFER,c);for(let t=0;t<i.locationSize;t++)g(i.location+t,o/i.locationSize,u,e,l*h,(d+o/i.locationSize*t)*h)}else{if(s.isInstancedBufferAttribute){for(let t=0;t<i.locationSize;t++)m(i.location+t,s.meshPerAttribute);!0!==r.isInstancedMesh&&void 0===a._maxInstanceCount&&(a._maxInstanceCount=s.meshPerAttribute*s.count)}else for(let t=0;t<i.locationSize;t++)_(i.location+t);t.bindBuffer(t.ARRAY_BUFFER,c);for(let t=0;t<i.locationSize;t++)g(i.location+t,o/i.locationSize,u,e,o*h,o/i.locationSize*t*h)}}else if(void 0!==u){const n=u[e];if(void 0!==n)switch(n.length){case 2:t.vertexAttrib2fv(i.location,n);break;case 3:t.vertexAttrib3fv(i.location,n);break;case 4:t.vertexAttrib4fv(i.location,n);break;default:t.vertexAttrib1fv(i.location,n)}}}}f()}(r,l,h,v),null!==y&&t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,n.get(y).buffer))},reset:v,resetDefaultState:y,dispose:function(){v();for(const t in a){const e=a[t];for(const t in e){const n=e[t];for(const t in n)h(n[t].object),delete n[t];delete e[t]}delete a[t]}},releaseStatesOfGeometry:function(t){if(void 0===a[t.id])return;const e=a[t.id];for(const t in e){const n=e[t];for(const t in n)h(n[t].object),delete n[t];delete e[t]}delete a[t.id]},releaseStatesOfProgram:function(t){for(const e in a){const n=a[e];if(void 0===n[t.id])continue;const i=n[t.id];for(const t in i)h(i[t].object),delete i[t];delete n[t.id]}},initAttributes:p,enableAttribute:_,disableUnusedAttributes:f}}function W(t,e,n,i){const r=i.isWebGL2;let s;this.setMode=function(t){s=t},this.render=function(e,i){t.drawArrays(s,e,i),n.update(i,s,1)},this.renderInstances=function(i,o,a){if(0===a)return;let l,c;if(r)l=t,c=\\\\\\\"drawArraysInstanced\\\\\\\";else if(l=e.get(\\\\\\\"ANGLE_instanced_arrays\\\\\\\"),c=\\\\\\\"drawArraysInstancedANGLE\\\\\\\",null===l)return void console.error(\\\\\\\"THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\\\\\\\");l[c](s,i,o,a),n.update(o,s,a)}}function q(t,e,n){let i;function r(e){if(\\\\\\\"highp\\\\\\\"===e){if(t.getShaderPrecisionFormat(t.VERTEX_SHADER,t.HIGH_FLOAT).precision>0&&t.getShaderPrecisionFormat(t.FRAGMENT_SHADER,t.HIGH_FLOAT).precision>0)return\\\\\\\"highp\\\\\\\";e=\\\\\\\"mediump\\\\\\\"}return\\\\\\\"mediump\\\\\\\"===e&&t.getShaderPrecisionFormat(t.VERTEX_SHADER,t.MEDIUM_FLOAT).precision>0&&t.getShaderPrecisionFormat(t.FRAGMENT_SHADER,t.MEDIUM_FLOAT).precision>0?\\\\\\\"mediump\\\\\\\":\\\\\\\"lowp\\\\\\\"}const s=\\\\\\\"undefined\\\\\\\"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||\\\\\\\"undefined\\\\\\\"!=typeof WebGL2ComputeRenderingContext&&t instanceof WebGL2ComputeRenderingContext;let o=void 0!==n.precision?n.precision:\\\\\\\"highp\\\\\\\";const a=r(o);a!==o&&(console.warn(\\\\\\\"THREE.WebGLRenderer:\\\\\\\",o,\\\\\\\"not supported, using\\\\\\\",a,\\\\\\\"instead.\\\\\\\"),o=a);const l=s||e.has(\\\\\\\"WEBGL_draw_buffers\\\\\\\"),c=!0===n.logarithmicDepthBuffer,u=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS),h=t.getParameter(t.MAX_VERTEX_TEXTURE_IMAGE_UNITS),d=t.getParameter(t.MAX_TEXTURE_SIZE),p=t.getParameter(t.MAX_CUBE_MAP_TEXTURE_SIZE),_=t.getParameter(t.MAX_VERTEX_ATTRIBS),m=t.getParameter(t.MAX_VERTEX_UNIFORM_VECTORS),f=t.getParameter(t.MAX_VARYING_VECTORS),g=t.getParameter(t.MAX_FRAGMENT_UNIFORM_VECTORS),v=h>0,y=s||e.has(\\\\\\\"OES_texture_float\\\\\\\");return{isWebGL2:s,drawBuffers:l,getMaxAnisotropy:function(){if(void 0!==i)return i;if(!0===e.has(\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\")){const n=e.get(\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\");i=t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else i=0;return i},getMaxPrecision:r,precision:o,logarithmicDepthBuffer:c,maxTextures:u,maxVertexTextures:h,maxTextureSize:d,maxCubemapSize:p,maxAttributes:_,maxVertexUniforms:m,maxVaryings:f,maxFragmentUniforms:g,vertexTextures:v,floatFragmentTextures:y,floatVertexTextures:v&&y,maxSamples:s?t.getParameter(t.MAX_SAMPLES):0}}V.physical={uniforms:P([V.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new d.a(1,1)},clearcoatNormalMap:{value:null},sheen:{value:0},sheenTint:{value:new D.a(0)},sheenRoughness:{value:0},transmission:{value:0},transmissionMap:{value:null},transmissionSamplerSize:{value:new d.a},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},attenuationDistance:{value:0},attenuationTint:{value:new D.a(0)},specularIntensity:{value:0},specularIntensityMap:{value:null},specularTint:{value:new D.a(1,1,1)},specularTintMap:{value:null}}]),vertexShader:z.meshphysical_vert,fragmentShader:z.meshphysical_frag};var X=n(34);function Y(t){const e=this;let n=null,i=0,r=!1,s=!1;const o=new X.a,a=new U.a,l={value:null,needsUpdate:!1};function c(){l.value!==n&&(l.value=n,l.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function u(t,n,i,r){const s=null!==t?t.length:0;let c=null;if(0!==s){if(c=l.value,!0!==r||null===c){const e=i+4*s,r=n.matrixWorldInverse;a.getNormalMatrix(r),(null===c||c.length<e)&&(c=new Float32Array(e));for(let e=0,n=i;e!==s;++e,n+=4)o.copy(t[e]).applyMatrix4(r,a),o.normal.toArray(c,n),c[n+3]=o.constant}l.value=c,l.needsUpdate=!0}return e.numPlanes=s,e.numIntersection=0,c}this.uniform=l,this.numPlanes=0,this.numIntersection=0,this.init=function(t,e,s){const o=0!==t.length||e||0!==i||r;return r=e,n=u(t,s,0),i=t.length,o},this.beginShadows=function(){s=!0,u(null)},this.endShadows=function(){s=!1,c()},this.setState=function(e,o,a){const h=e.clippingPlanes,d=e.clipIntersection,p=e.clipShadows,_=t.get(e);if(!r||null===h||0===h.length||s&&!p)s?u(null):c();else{const t=s?0:i,e=4*t;let r=_.clippingState||null;l.value=r,r=u(h,o,e,a);for(let t=0;t!==e;++t)r[t]=n[t];_.clippingState=r,this.numIntersection=d?this.numPlanes:0,this.numPlanes+=t}}}var $=n(15),J=n(23);class Z extends $.a{constructor(t,e,n={}){super(),this.width=t,this.height=e,this.depth=1,this.scissor=new _.a(0,0,t,e),this.scissorTest=!1,this.viewport=new _.a(0,0,t,e),this.texture=new J.a(void 0,n.mapping,n.wrapS,n.wrapT,n.magFilter,n.minFilter,n.format,n.type,n.anisotropy,n.encoding),this.texture.isRenderTargetTexture=!0,this.texture.image={width:t,height:e,depth:1},this.texture.generateMipmaps=void 0!==n.generateMipmaps&&n.generateMipmaps,this.texture.internalFormat=void 0!==n.internalFormat?n.internalFormat:null,this.texture.minFilter=void 0!==n.minFilter?n.minFilter:w.V,this.depthBuffer=void 0===n.depthBuffer||n.depthBuffer,this.stencilBuffer=void 0!==n.stencilBuffer&&n.stencilBuffer,this.depthTexture=void 0!==n.depthTexture?n.depthTexture:null}setTexture(t){t.image={width:this.width,height:this.height,depth:this.depth},this.texture=t}setSize(t,e,n=1){this.width===t&&this.height===e&&this.depth===n||(this.width=t,this.height=e,this.depth=n,this.texture.image.width=t,this.texture.image.height=e,this.texture.image.depth=n,this.dispose()),this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)}clone(){return(new this.constructor).copy(this)}copy(t){return this.width=t.width,this.height=t.height,this.depth=t.depth,this.viewport.copy(t.viewport),this.texture=t.texture.clone(),this.texture.image={...this.texture.image},this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this}dispose(){this.dispatchEvent({type:\\\\\\\"dispose\\\\\\\"})}}Z.prototype.isWebGLRenderTarget=!0;var Q=n(10),K=n(30);const tt=90;class et extends Q.a{constructor(t,e,n){if(super(),this.type=\\\\\\\"CubeCamera\\\\\\\",!0!==n.isWebGLCubeRenderTarget)return void console.error(\\\\\\\"THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.\\\\\\\");this.renderTarget=n;const i=new K.a(tt,1,t,e);i.layers=this.layers,i.up.set(0,-1,0),i.lookAt(new p.a(1,0,0)),this.add(i);const r=new K.a(tt,1,t,e);r.layers=this.layers,r.up.set(0,-1,0),r.lookAt(new p.a(-1,0,0)),this.add(r);const s=new K.a(tt,1,t,e);s.layers=this.layers,s.up.set(0,0,1),s.lookAt(new p.a(0,1,0)),this.add(s);const o=new K.a(tt,1,t,e);o.layers=this.layers,o.up.set(0,0,-1),o.lookAt(new p.a(0,-1,0)),this.add(o);const a=new K.a(tt,1,t,e);a.layers=this.layers,a.up.set(0,-1,0),a.lookAt(new p.a(0,0,1)),this.add(a);const l=new K.a(tt,1,t,e);l.layers=this.layers,l.up.set(0,-1,0),l.lookAt(new p.a(0,0,-1)),this.add(l)}update(t,e){null===this.parent&&this.updateMatrixWorld();const n=this.renderTarget,[i,r,s,o,a,l]=this.children,c=t.xr.enabled,u=t.getRenderTarget();t.xr.enabled=!1;const h=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0),t.render(e,i),t.setRenderTarget(n,1),t.render(e,r),t.setRenderTarget(n,2),t.render(e,s),t.setRenderTarget(n,3),t.render(e,o),t.setRenderTarget(n,4),t.render(e,a),n.texture.generateMipmaps=h,t.setRenderTarget(n,5),t.render(e,l),t.setRenderTarget(u),t.xr.enabled=c}}class nt extends J.a{constructor(t,e,n,i,r,s,o,a,l,c){super(t=void 0!==t?t:[],e=void 0!==e?e:w.o,n,i,r,s,o,a,l,c),this.flipY=!1}get images(){return this.image}set images(t){this.image=t}}nt.prototype.isCubeTexture=!0;class it extends Z{constructor(t,e,n){Number.isInteger(e)&&(console.warn(\\\\\\\"THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )\\\\\\\"),e=n),super(t,t,e),e=e||{},this.texture=new nt(void 0,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.encoding),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=void 0!==e.generateMipmaps&&e.generateMipmaps,this.texture.minFilter=void 0!==e.minFilter?e.minFilter:w.V,this.texture._needsFlipEnvMap=!1}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.format=w.Ib,this.texture.encoding=e.encoding,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvarying vec3 vWorldDirection;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvWorldDirection = transformDirection( position, modelMatrix );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t#include <begin_vertex>\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t#include <project_vertex>\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D tEquirect;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvarying vec3 vWorldDirection;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t#include <common>\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec3 direction = normalize( vWorldDirection );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec2 sampleUV = equirectUv( direction );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\\\\"},i=new N(5,5,5),r=new F({name:\\\\\\\"CubemapFromEquirect\\\\\\\",uniforms:R(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:w.i,blending:w.ub});r.uniforms.tEquirect.value=e;const s=new k.a(i,r),o=e.minFilter;e.minFilter===w.Y&&(e.minFilter=w.V);return new et(1,10,this).update(t,s),e.minFilter=o,s.geometry.dispose(),s.material.dispose(),this}clear(t,e,n,i){const r=t.getRenderTarget();for(let r=0;r<6;r++)t.setRenderTarget(this,r),t.clear(e,n,i);t.setRenderTarget(r)}}function rt(t){let e=new WeakMap;function n(t,e){return e===w.D?t.mapping=w.o:e===w.E&&(t.mapping=w.p),t}function i(t){const n=t.target;n.removeEventListener(\\\\\\\"dispose\\\\\\\",i);const r=e.get(n);void 0!==r&&(e.delete(n),r.dispose())}return{get:function(r){if(r&&r.isTexture&&!1===r.isRenderTargetTexture){const s=r.mapping;if(s===w.D||s===w.E){if(e.has(r)){return n(e.get(r).texture,r.mapping)}{const s=r.image;if(s&&s.height>0){const o=t.getRenderTarget(),a=new it(s.height/2);return a.fromEquirectangularTexture(t,r),e.set(r,a),t.setRenderTarget(o),r.addEventListener(\\\\\\\"dispose\\\\\\\",i),n(a.texture,r.mapping)}return null}}}return r},dispose:function(){e=new WeakMap}}}it.prototype.isWebGLCubeRenderTarget=!0;var st=n(37);class ot extends F{constructor(t){super(t),this.type=\\\\\\\"RawShaderMaterial\\\\\\\"}}ot.prototype.isRawShaderMaterial=!0;var at=n(27);const lt=Math.pow(2,8),ct=[.125,.215,.35,.446,.526,.582],ut=5+ct.length,ht=20,dt={[w.U]:0,[w.ld]:1,[w.gc]:2,[w.lc]:3,[w.kc]:4,[w.fc]:5,[w.J]:6},pt=new st.a,{_lodPlanes:_t,_sizeLods:mt,_sigmas:ft}=At(),gt=new D.a;let vt=null;const yt=(1+Math.sqrt(5))/2,xt=1/yt,bt=[new p.a(1,1,1),new p.a(-1,1,1),new p.a(1,1,-1),new p.a(-1,1,-1),new p.a(0,yt,xt),new p.a(0,yt,-xt),new p.a(xt,0,yt),new p.a(-xt,0,yt),new p.a(yt,xt,0),new p.a(-yt,xt,0)];class wt{constructor(t){this._renderer=t,this._pingPongRenderTarget=null,this._blurMaterial=function(t){const e=new Float32Array(t),n=new p.a(0,1,0);return new ot({name:\\\\\\\"SphericalGaussianBlur\\\\\\\",defines:{n:t},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:e},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:n},inputEncoding:{value:dt[w.U]},outputEncoding:{value:dt[w.U]}},vertexShader:Nt(),fragmentShader:`\\\\n\\\\n\\\\t\\\\t\\\\tprecision mediump float;\\\\n\\\\t\\\\t\\\\tprecision mediump int;\\\\n\\\\n\\\\t\\\\t\\\\tvarying vec3 vOutputDirection;\\\\n\\\\n\\\\t\\\\t\\\\tuniform sampler2D envMap;\\\\n\\\\t\\\\t\\\\tuniform int samples;\\\\n\\\\t\\\\t\\\\tuniform float weights[ n ];\\\\n\\\\t\\\\t\\\\tuniform bool latitudinal;\\\\n\\\\t\\\\t\\\\tuniform float dTheta;\\\\n\\\\t\\\\t\\\\tuniform float mipInt;\\\\n\\\\t\\\\t\\\\tuniform vec3 poleAxis;\\\\n\\\\n\\\\t\\\\t\\\\t${Lt()}\\\\n\\\\n\\\\t\\\\t\\\\t#define ENVMAP_TYPE_CUBE_UV\\\\n\\\\t\\\\t\\\\t#include <cube_uv_reflection_fragment>\\\\n\\\\n\\\\t\\\\t\\\\tvec3 getSample( float theta, vec3 axis ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tfloat cosTheta = cos( theta );\\\\n\\\\t\\\\t\\\\t\\\\t// Rodrigues' axis-angle rotation\\\\n\\\\t\\\\t\\\\t\\\\tvec3 sampleDirection = vOutputDirection * cosTheta\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t+ cross( axis, vOutputDirection ) * sin( theta )\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t\\\\taxis = normalize( axis );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tfor ( int i = 1; i < n; i++ ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tif ( i >= samples ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tbreak;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat theta = dTheta * float( i );\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor = linearToOutputTexel( gl_FragColor );\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t`,blending:w.ub,depthTest:!1,depthWrite:!1})}(ht),this._equirectShader=null,this._cubemapShader=null,this._compileMaterial(this._blurMaterial)}fromScene(t,e=0,n=.1,i=100){vt=this._renderer.getRenderTarget();const r=this._allocateTargets();return this._sceneToCubeUV(t,n,i,r),e>0&&this._blur(r,0,0,e),this._applyPMREM(r),this._cleanup(r),r}fromEquirectangular(t){return this._fromTexture(t)}fromCubemap(t){return this._fromTexture(t)}compileCubemapShader(){null===this._cubemapShader&&(this._cubemapShader=Ct(),this._compileMaterial(this._cubemapShader))}compileEquirectangularShader(){null===this._equirectShader&&(this._equirectShader=St(),this._compileMaterial(this._equirectShader))}dispose(){this._blurMaterial.dispose(),null!==this._cubemapShader&&this._cubemapShader.dispose(),null!==this._equirectShader&&this._equirectShader.dispose();for(let t=0;t<_t.length;t++)_t[t].dispose()}_cleanup(t){this._pingPongRenderTarget.dispose(),this._renderer.setRenderTarget(vt),t.scissorTest=!1,Mt(t,0,0,t.width,t.height)}_fromTexture(t){vt=this._renderer.getRenderTarget();const e=this._allocateTargets(t);return this._textureToCubeUV(t,e),this._applyPMREM(e),this._cleanup(e),e}_allocateTargets(t){const e={magFilter:w.ob,minFilter:w.ob,generateMipmaps:!1,type:w.Zc,format:w.hc,encoding:Tt(t)?t.encoding:w.gc,depthBuffer:!1},n=Et(e);return n.depthBuffer=!t,this._pingPongRenderTarget=Et(e),n}_compileMaterial(t){const e=new k.a(_t[0],t);this._renderer.compile(e,pt)}_sceneToCubeUV(t,e,n,i){const r=new K.a(90,1,e,n),s=[1,-1,1,1,1,1],o=[1,1,1,-1,-1,-1],a=this._renderer,l=a.autoClear,c=a.outputEncoding,u=a.toneMapping;a.getClearColor(gt),a.toneMapping=w.vb,a.outputEncoding=w.U,a.autoClear=!1;const h=new at.a({name:\\\\\\\"PMREM.Background\\\\\\\",side:w.i,depthWrite:!1,depthTest:!1}),d=new k.a(new N,h);let p=!1;const _=t.background;_?_.isColor&&(h.color.copy(_),t.background=null,p=!0):(h.color.copy(gt),p=!0);for(let e=0;e<6;e++){const n=e%3;0==n?(r.up.set(0,s[e],0),r.lookAt(o[e],0,0)):1==n?(r.up.set(0,0,s[e]),r.lookAt(0,o[e],0)):(r.up.set(0,s[e],0),r.lookAt(0,0,o[e])),Mt(i,n*lt,e>2?lt:0,lt,lt),a.setRenderTarget(i),p&&a.render(d,r),a.render(t,r)}d.geometry.dispose(),d.material.dispose(),a.toneMapping=u,a.outputEncoding=c,a.autoClear=l,t.background=_}_setEncoding(t,e){!0===this._renderer.capabilities.isWebGL2&&e.format===w.Ib&&e.type===w.Zc&&e.encoding===w.ld?t.value=dt[w.U]:t.value=dt[e.encoding]}_textureToCubeUV(t,e){const n=this._renderer;t.isCubeTexture?null==this._cubemapShader&&(this._cubemapShader=Ct()):null==this._equirectShader&&(this._equirectShader=St());const i=t.isCubeTexture?this._cubemapShader:this._equirectShader,r=new k.a(_t[0],i),s=i.uniforms;s.envMap.value=t,t.isCubeTexture||s.texelSize.value.set(1/t.image.width,1/t.image.height),this._setEncoding(s.inputEncoding,t),this._setEncoding(s.outputEncoding,e.texture),Mt(e,0,0,3*lt,2*lt),n.setRenderTarget(e),n.render(r,pt)}_applyPMREM(t){const e=this._renderer,n=e.autoClear;e.autoClear=!1;for(let e=1;e<ut;e++){const n=Math.sqrt(ft[e]*ft[e]-ft[e-1]*ft[e-1]),i=bt[(e-1)%bt.length];this._blur(t,e-1,e,n,i)}e.autoClear=n}_blur(t,e,n,i,r){const s=this._pingPongRenderTarget;this._halfBlur(t,s,e,n,i,\\\\\\\"latitudinal\\\\\\\",r),this._halfBlur(s,t,n,n,i,\\\\\\\"longitudinal\\\\\\\",r)}_halfBlur(t,e,n,i,r,s,o){const a=this._renderer,l=this._blurMaterial;\\\\\\\"latitudinal\\\\\\\"!==s&&\\\\\\\"longitudinal\\\\\\\"!==s&&console.error(\\\\\\\"blur direction must be either latitudinal or longitudinal!\\\\\\\");const c=new k.a(_t[i],l),u=l.uniforms,h=mt[n]-1,d=isFinite(r)?Math.PI/(2*h):2*Math.PI/39,p=r/d,_=isFinite(r)?1+Math.floor(3*p):ht;_>ht&&console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${_} samples when the maximum is set to 20`);const m=[];let f=0;for(let t=0;t<ht;++t){const e=t/p,n=Math.exp(-e*e/2);m.push(n),0==t?f+=n:t<_&&(f+=2*n)}for(let t=0;t<m.length;t++)m[t]=m[t]/f;u.envMap.value=t.texture,u.samples.value=_,u.weights.value=m,u.latitudinal.value=\\\\\\\"latitudinal\\\\\\\"===s,o&&(u.poleAxis.value=o),u.dTheta.value=d,u.mipInt.value=8-n,this._setEncoding(u.inputEncoding,t.texture),this._setEncoding(u.outputEncoding,t.texture);const g=mt[i];Mt(e,3*Math.max(0,lt-2*g),(0===i?0:2*lt)+2*g*(i>4?i-8+4:0),3*g,2*g),a.setRenderTarget(e),a.render(c,pt)}}function Tt(t){return void 0!==t&&t.type===w.Zc&&(t.encoding===w.U||t.encoding===w.ld||t.encoding===w.J)}function At(){const t=[],e=[],n=[];let i=8;for(let r=0;r<ut;r++){const s=Math.pow(2,i);e.push(s);let o=1/s;r>4?o=ct[r-8+4-1]:0==r&&(o=0),n.push(o);const a=1/(s-1),l=-a/2,c=1+a/2,u=[l,l,c,l,c,c,l,l,c,c,l,c],h=6,d=6,p=3,_=2,m=1,f=new Float32Array(p*d*h),g=new Float32Array(_*d*h),v=new Float32Array(m*d*h);for(let t=0;t<h;t++){const e=t%3*2/3-1,n=t>2?0:-1,i=[e,n,0,e+2/3,n,0,e+2/3,n+1,0,e,n,0,e+2/3,n+1,0,e,n+1,0];f.set(i,p*d*t),g.set(u,_*d*t);const r=[t,t,t,t,t,t];v.set(r,m*d*t)}const y=new S.a;y.setAttribute(\\\\\\\"position\\\\\\\",new C.a(f,p)),y.setAttribute(\\\\\\\"uv\\\\\\\",new C.a(g,_)),y.setAttribute(\\\\\\\"faceIndex\\\\\\\",new C.a(v,m)),t.push(y),i>4&&i--}return{_lodPlanes:t,_sizeLods:e,_sigmas:n}}function Et(t){const e=new Z(3*lt,3*lt,t);return e.texture.mapping=w.q,e.texture.name=\\\\\\\"PMREM.cubeUv\\\\\\\",e.scissorTest=!0,e}function Mt(t,e,n,i,r){t.viewport.set(e,n,i,r),t.scissor.set(e,n,i,r)}function St(){const t=new d.a(1,1);return new ot({name:\\\\\\\"EquirectangularToCubeUV\\\\\\\",uniforms:{envMap:{value:null},texelSize:{value:t},inputEncoding:{value:dt[w.U]},outputEncoding:{value:dt[w.U]}},vertexShader:Nt(),fragmentShader:`\\\\n\\\\n\\\\t\\\\t\\\\tprecision mediump float;\\\\n\\\\t\\\\t\\\\tprecision mediump int;\\\\n\\\\n\\\\t\\\\t\\\\tvarying vec3 vOutputDirection;\\\\n\\\\n\\\\t\\\\t\\\\tuniform sampler2D envMap;\\\\n\\\\t\\\\t\\\\tuniform vec2 texelSize;\\\\n\\\\n\\\\t\\\\t\\\\t${Lt()}\\\\n\\\\n\\\\t\\\\t\\\\t#include <common>\\\\n\\\\n\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvec3 outputDirection = normalize( vOutputDirection );\\\\n\\\\t\\\\t\\\\t\\\\tvec2 uv = equirectUv( outputDirection );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvec2 f = fract( uv / texelSize - 0.5 );\\\\n\\\\t\\\\t\\\\t\\\\tuv -= f * texelSize;\\\\n\\\\t\\\\t\\\\t\\\\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\\\n\\\\t\\\\t\\\\t\\\\tuv.x += texelSize.x;\\\\n\\\\t\\\\t\\\\t\\\\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\\\n\\\\t\\\\t\\\\t\\\\tuv.y += texelSize.y;\\\\n\\\\t\\\\t\\\\t\\\\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\\\n\\\\t\\\\t\\\\t\\\\tuv.x -= texelSize.x;\\\\n\\\\t\\\\t\\\\t\\\\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvec3 tm = mix( tl, tr, f.x );\\\\n\\\\t\\\\t\\\\t\\\\tvec3 bm = mix( bl, br, f.x );\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor.rgb = mix( tm, bm, f.y );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor = linearToOutputTexel( gl_FragColor );\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t`,blending:w.ub,depthTest:!1,depthWrite:!1})}function Ct(){return new ot({name:\\\\\\\"CubemapToCubeUV\\\\\\\",uniforms:{envMap:{value:null},inputEncoding:{value:dt[w.U]},outputEncoding:{value:dt[w.U]}},vertexShader:Nt(),fragmentShader:`\\\\n\\\\n\\\\t\\\\t\\\\tprecision mediump float;\\\\n\\\\t\\\\t\\\\tprecision mediump int;\\\\n\\\\n\\\\t\\\\t\\\\tvarying vec3 vOutputDirection;\\\\n\\\\n\\\\t\\\\t\\\\tuniform samplerCube envMap;\\\\n\\\\n\\\\t\\\\t\\\\t${Lt()}\\\\n\\\\n\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor = linearToOutputTexel( gl_FragColor );\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t`,blending:w.ub,depthTest:!1,depthWrite:!1})}function Nt(){return\\\\\\\"\\\\n\\\\n\\\\t\\\\tprecision mediump float;\\\\n\\\\t\\\\tprecision mediump int;\\\\n\\\\n\\\\t\\\\tattribute vec3 position;\\\\n\\\\t\\\\tattribute vec2 uv;\\\\n\\\\t\\\\tattribute float faceIndex;\\\\n\\\\n\\\\t\\\\tvarying vec3 vOutputDirection;\\\\n\\\\n\\\\t\\\\t// RH coordinate system; PMREM face-indexing convention\\\\n\\\\t\\\\tvec3 getDirection( vec2 uv, float face ) {\\\\n\\\\n\\\\t\\\\t\\\\tuv = 2.0 * uv - 1.0;\\\\n\\\\n\\\\t\\\\t\\\\tvec3 direction = vec3( uv, 1.0 );\\\\n\\\\n\\\\t\\\\t\\\\tif ( face == 0.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tdirection = direction.zyx; // ( 1, v, u ) pos x\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( face == 1.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tdirection = direction.xzy;\\\\n\\\\t\\\\t\\\\t\\\\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( face == 2.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( face == 3.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tdirection = direction.zyx;\\\\n\\\\t\\\\t\\\\t\\\\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( face == 4.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tdirection = direction.xzy;\\\\n\\\\t\\\\t\\\\t\\\\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( face == 5.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\treturn direction;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvOutputDirection = getDirection( uv, faceIndex );\\\\n\\\\t\\\\t\\\\tgl_Position = vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\\\\"}function Lt(){return\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform int inputEncoding;\\\\n\\\\t\\\\tuniform int outputEncoding;\\\\n\\\\n\\\\t\\\\t#include <encodings_pars_fragment>\\\\n\\\\n\\\\t\\\\tvec4 inputTexelToLinear( vec4 value ) {\\\\n\\\\n\\\\t\\\\t\\\\tif ( inputEncoding == 0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn value;\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( inputEncoding == 1 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn sRGBToLinear( value );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( inputEncoding == 2 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn RGBEToLinear( value );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( inputEncoding == 3 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn RGBMToLinear( value, 7.0 );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( inputEncoding == 4 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn RGBMToLinear( value, 16.0 );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( inputEncoding == 5 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn RGBDToLinear( value, 256.0 );\\\\n\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn GammaToLinear( value, 2.2 );\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvec4 linearToOutputTexel( vec4 value ) {\\\\n\\\\n\\\\t\\\\t\\\\tif ( outputEncoding == 0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn value;\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( outputEncoding == 1 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn LinearTosRGB( value );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( outputEncoding == 2 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn LinearToRGBE( value );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( outputEncoding == 3 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn LinearToRGBM( value, 7.0 );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( outputEncoding == 4 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn LinearToRGBM( value, 16.0 );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( outputEncoding == 5 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn LinearToRGBD( value, 256.0 );\\\\n\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn LinearToGamma( value, 2.2 );\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvec4 envMapTexelToLinear( vec4 color ) {\\\\n\\\\n\\\\t\\\\t\\\\treturn inputTexelToLinear( color );\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\\\\"}function Ot(t){let e=new WeakMap,n=null;function i(t){const n=t.target;n.removeEventListener(\\\\\\\"dispose\\\\\\\",i);const r=e.get(n);void 0!==r&&(e.delete(n),r.dispose())}return{get:function(r){if(r&&r.isTexture&&!1===r.isRenderTargetTexture){const s=r.mapping,o=s===w.D||s===w.E,a=s===w.o||s===w.p;if(o||a){if(e.has(r))return e.get(r).texture;{const s=r.image;if(o&&s&&s.height>0||a&&s&&function(t){let e=0;const n=6;for(let i=0;i<n;i++)void 0!==t[i]&&e++;return e===n}(s)){const s=t.getRenderTarget();null===n&&(n=new wt(t));const a=o?n.fromEquirectangular(r):n.fromCubemap(r);return e.set(r,a),t.setRenderTarget(s),r.addEventListener(\\\\\\\"dispose\\\\\\\",i),a.texture}return null}}}return r},dispose:function(){e=new WeakMap,null!==n&&(n.dispose(),n=null)}}}function Rt(t){const e={};function n(n){if(void 0!==e[n])return e[n];let i;switch(n){case\\\\\\\"WEBGL_depth_texture\\\\\\\":i=t.getExtension(\\\\\\\"WEBGL_depth_texture\\\\\\\")||t.getExtension(\\\\\\\"MOZ_WEBGL_depth_texture\\\\\\\")||t.getExtension(\\\\\\\"WEBKIT_WEBGL_depth_texture\\\\\\\");break;case\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\":i=t.getExtension(\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\")||t.getExtension(\\\\\\\"MOZ_EXT_texture_filter_anisotropic\\\\\\\")||t.getExtension(\\\\\\\"WEBKIT_EXT_texture_filter_anisotropic\\\\\\\");break;case\\\\\\\"WEBGL_compressed_texture_s3tc\\\\\\\":i=t.getExtension(\\\\\\\"WEBGL_compressed_texture_s3tc\\\\\\\")||t.getExtension(\\\\\\\"MOZ_WEBGL_compressed_texture_s3tc\\\\\\\")||t.getExtension(\\\\\\\"WEBKIT_WEBGL_compressed_texture_s3tc\\\\\\\");break;case\\\\\\\"WEBGL_compressed_texture_pvrtc\\\\\\\":i=t.getExtension(\\\\\\\"WEBGL_compressed_texture_pvrtc\\\\\\\")||t.getExtension(\\\\\\\"WEBKIT_WEBGL_compressed_texture_pvrtc\\\\\\\");break;default:i=t.getExtension(n)}return e[n]=i,i}return{has:function(t){return null!==n(t)},init:function(t){t.isWebGL2?n(\\\\\\\"EXT_color_buffer_float\\\\\\\"):(n(\\\\\\\"WEBGL_depth_texture\\\\\\\"),n(\\\\\\\"OES_texture_float\\\\\\\"),n(\\\\\\\"OES_texture_half_float\\\\\\\"),n(\\\\\\\"OES_texture_half_float_linear\\\\\\\"),n(\\\\\\\"OES_standard_derivatives\\\\\\\"),n(\\\\\\\"OES_element_index_uint\\\\\\\"),n(\\\\\\\"OES_vertex_array_object\\\\\\\"),n(\\\\\\\"ANGLE_instanced_arrays\\\\\\\")),n(\\\\\\\"OES_texture_float_linear\\\\\\\"),n(\\\\\\\"EXT_color_buffer_half_float\\\\\\\")},get:function(t){const e=n(t);return null===e&&console.warn(\\\\\\\"THREE.WebGLRenderer: \\\\\\\"+t+\\\\\\\" extension not supported.\\\\\\\"),e}}}var Pt=n(20);function It(t,e,n,i){const r={},s=new WeakMap;function o(t){const a=t.target;null!==a.index&&e.remove(a.index);for(const t in a.attributes)e.remove(a.attributes[t]);a.removeEventListener(\\\\\\\"dispose\\\\\\\",o),delete r[a.id];const l=s.get(a);l&&(e.remove(l),s.delete(a)),i.releaseStatesOfGeometry(a),!0===a.isInstancedBufferGeometry&&delete a._maxInstanceCount,n.memory.geometries--}function a(t){const n=[],i=t.index,r=t.attributes.position;let o=0;if(null!==i){const t=i.array;o=i.version;for(let e=0,i=t.length;e<i;e+=3){const i=t[e+0],r=t[e+1],s=t[e+2];n.push(i,r,r,s,s,i)}}else{const t=r.array;o=r.version;for(let e=0,i=t.length/3-1;e<i;e+=3){const t=e+0,i=e+1,r=e+2;n.push(t,i,i,r,r,t)}}const a=new(Object(Pt.a)(n)>65535?C.i:C.h)(n,1);a.version=o;const l=s.get(t);l&&e.remove(l),s.set(t,a)}return{get:function(t,e){return!0===r[e.id]||(e.addEventListener(\\\\\\\"dispose\\\\\\\",o),r[e.id]=!0,n.memory.geometries++),e},update:function(n){const i=n.attributes;for(const n in i)e.update(i[n],t.ARRAY_BUFFER);const r=n.morphAttributes;for(const n in r){const i=r[n];for(let n=0,r=i.length;n<r;n++)e.update(i[n],t.ARRAY_BUFFER)}},getWireframeAttribute:function(t){const e=s.get(t);if(e){const n=t.index;null!==n&&e.version<n.version&&a(t)}else a(t);return s.get(t)}}}function Ft(t,e,n,i){const r=i.isWebGL2;let s,o,a;this.setMode=function(t){s=t},this.setIndex=function(t){o=t.type,a=t.bytesPerElement},this.render=function(e,i){t.drawElements(s,i,o,e*a),n.update(i,s,1)},this.renderInstances=function(i,l,c){if(0===c)return;let u,h;if(r)u=t,h=\\\\\\\"drawElementsInstanced\\\\\\\";else if(u=e.get(\\\\\\\"ANGLE_instanced_arrays\\\\\\\"),h=\\\\\\\"drawElementsInstancedANGLE\\\\\\\",null===u)return void console.error(\\\\\\\"THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\\\\\\\");u[h](s,l,o,i*a,c),n.update(l,s,c)}}function Dt(t){const e={frame:0,calls:0,triangles:0,points:0,lines:0};return{memory:{geometries:0,textures:0},render:e,programs:null,autoReset:!0,reset:function(){e.frame++,e.calls=0,e.triangles=0,e.points=0,e.lines=0},update:function(n,i,r){switch(e.calls++,i){case t.TRIANGLES:e.triangles+=r*(n/3);break;case t.LINES:e.lines+=r*(n/2);break;case t.LINE_STRIP:e.lines+=r*(n-1);break;case t.LINE_LOOP:e.lines+=r*n;break;case t.POINTS:e.points+=r*n;break;default:console.error(\\\\\\\"THREE.WebGLInfo: Unknown draw mode:\\\\\\\",i)}}}}class kt extends J.a{constructor(t=null,e=1,n=1,i=1){super(null),this.image={data:t,width:e,height:n,depth:i},this.magFilter=w.ob,this.minFilter=w.ob,this.wrapR=w.n,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}}function Bt(t,e){return t[0]-e[0]}function zt(t,e){return Math.abs(e[1])-Math.abs(t[1])}function Ut(t,e){let n=1;const i=e.isInterleavedBufferAttribute?e.data.array:e.array;i instanceof Int8Array?n=127:i instanceof Int16Array?n=32767:i instanceof Int32Array?n=2147483647:console.error(\\\\\\\"THREE.WebGLMorphtargets: Unsupported morph attribute data type: \\\\\\\",i),t.divideScalar(n)}function Gt(t,e,n){const i={},r=new Float32Array(8),s=new WeakMap,o=new p.a,a=[];for(let t=0;t<8;t++)a[t]=[t,0];return{update:function(l,c,u,h){const p=l.morphTargetInfluences;if(!0===e.isWebGL2){const i=c.morphAttributes.position.length;let r=s.get(c);if(void 0===r||r.count!==i){void 0!==r&&r.texture.dispose();const t=void 0!==c.morphAttributes.normal,n=c.morphAttributes.position,a=c.morphAttributes.normal||[],l=!0===t?2:1;let u=c.attributes.position.count*l,h=1;u>e.maxTextureSize&&(h=Math.ceil(u/e.maxTextureSize),u=e.maxTextureSize);const p=new Float32Array(u*h*4*i),_=new kt(p,u,h,i);_.format=w.Ib,_.type=w.G;const m=4*l;for(let e=0;e<i;e++){const i=n[e],r=a[e],s=u*h*4*e;for(let e=0;e<i.count;e++){o.fromBufferAttribute(i,e),!0===i.normalized&&Ut(o,i);const n=e*m;p[s+n+0]=o.x,p[s+n+1]=o.y,p[s+n+2]=o.z,p[s+n+3]=0,!0===t&&(o.fromBufferAttribute(r,e),!0===r.normalized&&Ut(o,r),p[s+n+4]=o.x,p[s+n+5]=o.y,p[s+n+6]=o.z,p[s+n+7]=0)}}r={count:i,texture:_,size:new d.a(u,h)},s.set(c,r)}let a=0;for(let t=0;t<p.length;t++)a+=p[t];const l=c.morphTargetsRelative?1:1-a;h.getUniforms().setValue(t,\\\\\\\"morphTargetBaseInfluence\\\\\\\",l),h.getUniforms().setValue(t,\\\\\\\"morphTargetInfluences\\\\\\\",p),h.getUniforms().setValue(t,\\\\\\\"morphTargetsTexture\\\\\\\",r.texture,n),h.getUniforms().setValue(t,\\\\\\\"morphTargetsTextureSize\\\\\\\",r.size)}else{const e=void 0===p?0:p.length;let n=i[c.id];if(void 0===n||n.length!==e){n=[];for(let t=0;t<e;t++)n[t]=[t,0];i[c.id]=n}for(let t=0;t<e;t++){const e=n[t];e[0]=t,e[1]=p[t]}n.sort(zt);for(let t=0;t<8;t++)t<e&&n[t][1]?(a[t][0]=n[t][0],a[t][1]=n[t][1]):(a[t][0]=Number.MAX_SAFE_INTEGER,a[t][1]=0);a.sort(Bt);const s=c.morphAttributes.position,o=c.morphAttributes.normal;let l=0;for(let t=0;t<8;t++){const e=a[t],n=e[0],i=e[1];n!==Number.MAX_SAFE_INTEGER&&i?(s&&c.getAttribute(\\\\\\\"morphTarget\\\\\\\"+t)!==s[n]&&c.setAttribute(\\\\\\\"morphTarget\\\\\\\"+t,s[n]),o&&c.getAttribute(\\\\\\\"morphNormal\\\\\\\"+t)!==o[n]&&c.setAttribute(\\\\\\\"morphNormal\\\\\\\"+t,o[n]),r[t]=i,l+=i):(s&&!0===c.hasAttribute(\\\\\\\"morphTarget\\\\\\\"+t)&&c.deleteAttribute(\\\\\\\"morphTarget\\\\\\\"+t),o&&!0===c.hasAttribute(\\\\\\\"morphNormal\\\\\\\"+t)&&c.deleteAttribute(\\\\\\\"morphNormal\\\\\\\"+t),r[t]=0)}const u=c.morphTargetsRelative?1:1-l;h.getUniforms().setValue(t,\\\\\\\"morphTargetBaseInfluence\\\\\\\",u),h.getUniforms().setValue(t,\\\\\\\"morphTargetInfluences\\\\\\\",r)}}}}kt.prototype.isDataTexture2DArray=!0;class Vt extends Z{constructor(t,e,n){super(t,e,n),this.samples=4}copy(t){return super.copy.call(this,t),this.samples=t.samples,this}}function Ht(t,e,n,i){let r=new WeakMap;function s(t){const e=t.target;e.removeEventListener(\\\\\\\"dispose\\\\\\\",s),n.remove(e.instanceMatrix),null!==e.instanceColor&&n.remove(e.instanceColor)}return{update:function(o){const a=i.render.frame,l=o.geometry,c=e.get(o,l);return r.get(c)!==a&&(e.update(c),r.set(c,a)),o.isInstancedMesh&&(!1===o.hasEventListener(\\\\\\\"dispose\\\\\\\",s)&&o.addEventListener(\\\\\\\"dispose\\\\\\\",s),n.update(o.instanceMatrix,t.ARRAY_BUFFER),null!==o.instanceColor&&n.update(o.instanceColor,t.ARRAY_BUFFER)),c},dispose:function(){r=new WeakMap}}}Vt.prototype.isWebGLMultisampleRenderTarget=!0;class jt extends J.a{constructor(t=null,e=1,n=1,i=1){super(null),this.image={data:t,width:e,height:n,depth:i},this.magFilter=w.ob,this.minFilter=w.ob,this.wrapR=w.n,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}}jt.prototype.isDataTexture3D=!0;const Wt=new J.a,qt=new kt,Xt=new jt,Yt=new nt,$t=[],Jt=[],Zt=new Float32Array(16),Qt=new Float32Array(9),Kt=new Float32Array(4);function te(t,e,n){const i=t[0];if(i<=0||i>0)return t;const r=e*n;let s=$t[r];if(void 0===s&&(s=new Float32Array(r),$t[r]=s),0!==e){i.toArray(s,0);for(let i=1,r=0;i!==e;++i)r+=n,t[i].toArray(s,r)}return s}function ee(t,e){if(t.length!==e.length)return!1;for(let n=0,i=t.length;n<i;n++)if(t[n]!==e[n])return!1;return!0}function ne(t,e){for(let n=0,i=e.length;n<i;n++)t[n]=e[n]}function ie(t,e){let n=Jt[e];void 0===n&&(n=new Int32Array(e),Jt[e]=n);for(let i=0;i!==e;++i)n[i]=t.allocateTextureUnit();return n}function re(t,e){const n=this.cache;n[0]!==e&&(t.uniform1f(this.addr,e),n[0]=e)}function se(t,e){const n=this.cache;if(void 0!==e.x)n[0]===e.x&&n[1]===e.y||(t.uniform2f(this.addr,e.x,e.y),n[0]=e.x,n[1]=e.y);else{if(ee(n,e))return;t.uniform2fv(this.addr,e),ne(n,e)}}function oe(t,e){const n=this.cache;if(void 0!==e.x)n[0]===e.x&&n[1]===e.y&&n[2]===e.z||(t.uniform3f(this.addr,e.x,e.y,e.z),n[0]=e.x,n[1]=e.y,n[2]=e.z);else if(void 0!==e.r)n[0]===e.r&&n[1]===e.g&&n[2]===e.b||(t.uniform3f(this.addr,e.r,e.g,e.b),n[0]=e.r,n[1]=e.g,n[2]=e.b);else{if(ee(n,e))return;t.uniform3fv(this.addr,e),ne(n,e)}}function ae(t,e){const n=this.cache;if(void 0!==e.x)n[0]===e.x&&n[1]===e.y&&n[2]===e.z&&n[3]===e.w||(t.uniform4f(this.addr,e.x,e.y,e.z,e.w),n[0]=e.x,n[1]=e.y,n[2]=e.z,n[3]=e.w);else{if(ee(n,e))return;t.uniform4fv(this.addr,e),ne(n,e)}}function le(t,e){const n=this.cache,i=e.elements;if(void 0===i){if(ee(n,e))return;t.uniformMatrix2fv(this.addr,!1,e),ne(n,e)}else{if(ee(n,i))return;Kt.set(i),t.uniformMatrix2fv(this.addr,!1,Kt),ne(n,i)}}function ce(t,e){const n=this.cache,i=e.elements;if(void 0===i){if(ee(n,e))return;t.uniformMatrix3fv(this.addr,!1,e),ne(n,e)}else{if(ee(n,i))return;Qt.set(i),t.uniformMatrix3fv(this.addr,!1,Qt),ne(n,i)}}function ue(t,e){const n=this.cache,i=e.elements;if(void 0===i){if(ee(n,e))return;t.uniformMatrix4fv(this.addr,!1,e),ne(n,e)}else{if(ee(n,i))return;Zt.set(i),t.uniformMatrix4fv(this.addr,!1,Zt),ne(n,i)}}function he(t,e){const n=this.cache;n[0]!==e&&(t.uniform1i(this.addr,e),n[0]=e)}function de(t,e){const n=this.cache;ee(n,e)||(t.uniform2iv(this.addr,e),ne(n,e))}function pe(t,e){const n=this.cache;ee(n,e)||(t.uniform3iv(this.addr,e),ne(n,e))}function _e(t,e){const n=this.cache;ee(n,e)||(t.uniform4iv(this.addr,e),ne(n,e))}function me(t,e){const n=this.cache;n[0]!==e&&(t.uniform1ui(this.addr,e),n[0]=e)}function fe(t,e){const n=this.cache;ee(n,e)||(t.uniform2uiv(this.addr,e),ne(n,e))}function ge(t,e){const n=this.cache;ee(n,e)||(t.uniform3uiv(this.addr,e),ne(n,e))}function ve(t,e){const n=this.cache;ee(n,e)||(t.uniform4uiv(this.addr,e),ne(n,e))}function ye(t,e,n){const i=this.cache,r=n.allocateTextureUnit();i[0]!==r&&(t.uniform1i(this.addr,r),i[0]=r),n.safeSetTexture2D(e||Wt,r)}function xe(t,e,n){const i=this.cache,r=n.allocateTextureUnit();i[0]!==r&&(t.uniform1i(this.addr,r),i[0]=r),n.setTexture3D(e||Xt,r)}function be(t,e,n){const i=this.cache,r=n.allocateTextureUnit();i[0]!==r&&(t.uniform1i(this.addr,r),i[0]=r),n.safeSetTextureCube(e||Yt,r)}function we(t,e,n){const i=this.cache,r=n.allocateTextureUnit();i[0]!==r&&(t.uniform1i(this.addr,r),i[0]=r),n.setTexture2DArray(e||qt,r)}function Te(t,e){t.uniform1fv(this.addr,e)}function Ae(t,e){const n=te(e,this.size,2);t.uniform2fv(this.addr,n)}function Ee(t,e){const n=te(e,this.size,3);t.uniform3fv(this.addr,n)}function Me(t,e){const n=te(e,this.size,4);t.uniform4fv(this.addr,n)}function Se(t,e){const n=te(e,this.size,4);t.uniformMatrix2fv(this.addr,!1,n)}function Ce(t,e){const n=te(e,this.size,9);t.uniformMatrix3fv(this.addr,!1,n)}function Ne(t,e){const n=te(e,this.size,16);t.uniformMatrix4fv(this.addr,!1,n)}function Le(t,e){t.uniform1iv(this.addr,e)}function Oe(t,e){t.uniform2iv(this.addr,e)}function Re(t,e){t.uniform3iv(this.addr,e)}function Pe(t,e){t.uniform4iv(this.addr,e)}function Ie(t,e){t.uniform1uiv(this.addr,e)}function Fe(t,e){t.uniform2uiv(this.addr,e)}function De(t,e){t.uniform3uiv(this.addr,e)}function ke(t,e){t.uniform4uiv(this.addr,e)}function Be(t,e,n){const i=e.length,r=ie(n,i);t.uniform1iv(this.addr,r);for(let t=0;t!==i;++t)n.safeSetTexture2D(e[t]||Wt,r[t])}function ze(t,e,n){const i=e.length,r=ie(n,i);t.uniform1iv(this.addr,r);for(let t=0;t!==i;++t)n.safeSetTextureCube(e[t]||Yt,r[t])}function Ue(t,e,n){this.id=t,this.addr=n,this.cache=[],this.setValue=function(t){switch(t){case 5126:return re;case 35664:return se;case 35665:return oe;case 35666:return ae;case 35674:return le;case 35675:return ce;case 35676:return ue;case 5124:case 35670:return he;case 35667:case 35671:return de;case 35668:case 35672:return pe;case 35669:case 35673:return _e;case 5125:return me;case 36294:return fe;case 36295:return ge;case 36296:return ve;case 35678:case 36198:case 36298:case 36306:case 35682:return ye;case 35679:case 36299:case 36307:return xe;case 35680:case 36300:case 36308:case 36293:return be;case 36289:case 36303:case 36311:case 36292:return we}}(e.type)}function Ge(t,e,n){this.id=t,this.addr=n,this.cache=[],this.size=e.size,this.setValue=function(t){switch(t){case 5126:return Te;case 35664:return Ae;case 35665:return Ee;case 35666:return Me;case 35674:return Se;case 35675:return Ce;case 35676:return Ne;case 5124:case 35670:return Le;case 35667:case 35671:return Oe;case 35668:case 35672:return Re;case 35669:case 35673:return Pe;case 5125:return Ie;case 36294:return Fe;case 36295:return De;case 36296:return ke;case 35678:case 36198:case 36298:case 36306:case 35682:return Be;case 35680:case 36300:case 36308:case 36293:return ze}}(e.type)}function Ve(t){this.id=t,this.seq=[],this.map={}}Ge.prototype.updateCache=function(t){const e=this.cache;t instanceof Float32Array&&e.length!==t.length&&(this.cache=new Float32Array(t.length)),ne(e,t)},Ve.prototype.setValue=function(t,e,n){const i=this.seq;for(let r=0,s=i.length;r!==s;++r){const s=i[r];s.setValue(t,e[s.id],n)}};const He=/(\\\\w+)(\\\\])?(\\\\[|\\\\.)?/g;function je(t,e){t.seq.push(e),t.map[e.id]=e}function We(t,e,n){const i=t.name,r=i.length;for(He.lastIndex=0;;){const s=He.exec(i),o=He.lastIndex;let a=s[1];const l=\\\\\\\"]\\\\\\\"===s[2],c=s[3];if(l&&(a|=0),void 0===c||\\\\\\\"[\\\\\\\"===c&&o+2===r){je(n,void 0===c?new Ue(a,t,e):new Ge(a,t,e));break}{let t=n.map[a];void 0===t&&(t=new Ve(a),je(n,t)),n=t}}}function qe(t,e){this.seq=[],this.map={};const n=t.getProgramParameter(e,t.ACTIVE_UNIFORMS);for(let i=0;i<n;++i){const n=t.getActiveUniform(e,i);We(n,t.getUniformLocation(e,n.name),this)}}function Xe(t,e,n){const i=t.createShader(e);return t.shaderSource(i,n),t.compileShader(i),i}qe.prototype.setValue=function(t,e,n,i){const r=this.map[e];void 0!==r&&r.setValue(t,n,i)},qe.prototype.setOptional=function(t,e,n){const i=e[n];void 0!==i&&this.setValue(t,n,i)},qe.upload=function(t,e,n,i){for(let r=0,s=e.length;r!==s;++r){const s=e[r],o=n[s.id];!1!==o.needsUpdate&&s.setValue(t,o.value,i)}},qe.seqWithValue=function(t,e){const n=[];for(let i=0,r=t.length;i!==r;++i){const r=t[i];r.id in e&&n.push(r)}return n};let Ye=0;function $e(t){switch(t){case w.U:return[\\\\\\\"Linear\\\\\\\",\\\\\\\"( value )\\\\\\\"];case w.ld:return[\\\\\\\"sRGB\\\\\\\",\\\\\\\"( value )\\\\\\\"];case w.gc:return[\\\\\\\"RGBE\\\\\\\",\\\\\\\"( value )\\\\\\\"];case w.lc:return[\\\\\\\"RGBM\\\\\\\",\\\\\\\"( value, 7.0 )\\\\\\\"];case w.kc:return[\\\\\\\"RGBM\\\\\\\",\\\\\\\"( value, 16.0 )\\\\\\\"];case w.fc:return[\\\\\\\"RGBD\\\\\\\",\\\\\\\"( value, 256.0 )\\\\\\\"];case w.J:return[\\\\\\\"Gamma\\\\\\\",\\\\\\\"( value, float( GAMMA_FACTOR ) )\\\\\\\"];case w.bb:return[\\\\\\\"LogLuv\\\\\\\",\\\\\\\"( value )\\\\\\\"];default:return console.warn(\\\\\\\"THREE.WebGLProgram: Unsupported encoding:\\\\\\\",t),[\\\\\\\"Linear\\\\\\\",\\\\\\\"( value )\\\\\\\"]}}function Je(t,e,n){const i=t.getShaderParameter(e,t.COMPILE_STATUS),r=t.getShaderInfoLog(e).trim();return i&&\\\\\\\"\\\\\\\"===r?\\\\\\\"\\\\\\\":n.toUpperCase()+\\\\\\\"\\\\n\\\\n\\\\\\\"+r+\\\\\\\"\\\\n\\\\n\\\\\\\"+function(t){const e=t.split(\\\\\\\"\\\\n\\\\\\\");for(let t=0;t<e.length;t++)e[t]=t+1+\\\\\\\": \\\\\\\"+e[t];return e.join(\\\\\\\"\\\\n\\\\\\\")}(t.getShaderSource(e))}function Ze(t,e){const n=$e(e);return\\\\\\\"vec4 \\\\\\\"+t+\\\\\\\"( vec4 value ) { return \\\\\\\"+n[0]+\\\\\\\"ToLinear\\\\\\\"+n[1]+\\\\\\\"; }\\\\\\\"}function Qe(t,e){const n=$e(e);return\\\\\\\"vec4 \\\\\\\"+t+\\\\\\\"( vec4 value ) { return LinearTo\\\\\\\"+n[0]+n[1]+\\\\\\\"; }\\\\\\\"}function Ke(t,e){let n;switch(e){case w.ab:n=\\\\\\\"Linear\\\\\\\";break;case w.vc:n=\\\\\\\"Reinhard\\\\\\\";break;case w.m:n=\\\\\\\"OptimizedCineon\\\\\\\";break;case w.a:n=\\\\\\\"ACESFilmic\\\\\\\";break;case w.w:n=\\\\\\\"Custom\\\\\\\";break;default:console.warn(\\\\\\\"THREE.WebGLProgram: Unsupported toneMapping:\\\\\\\",e),n=\\\\\\\"Linear\\\\\\\"}return\\\\\\\"vec3 \\\\\\\"+t+\\\\\\\"( vec3 color ) { return \\\\\\\"+n+\\\\\\\"ToneMapping( color ); }\\\\\\\"}function tn(t){return\\\\\\\"\\\\\\\"!==t}function en(t,e){return t.replace(/NUM_DIR_LIGHTS/g,e.numDirLights).replace(/NUM_SPOT_LIGHTS/g,e.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g,e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,e.numPointLights).replace(/NUM_HEMI_LIGHTS/g,e.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,e.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS/g,e.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,e.numPointLightShadows)}function nn(t,e){return t.replace(/NUM_CLIPPING_PLANES/g,e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,e.numClippingPlanes-e.numClipIntersection)}const rn=/^[ \\\\t]*#include +<([\\\\w\\\\d./]+)>/gm;function sn(t){return t.replace(rn,on)}function on(t,e){const n=z[e];if(void 0===n)throw new Error(\\\\\\\"Can not resolve #include <\\\\\\\"+e+\\\\\\\">\\\\\\\");return sn(n)}const an=/#pragma unroll_loop[\\\\s]+?for \\\\( int i \\\\= (\\\\d+)\\\\; i < (\\\\d+)\\\\; i \\\\+\\\\+ \\\\) \\\\{([\\\\s\\\\S]+?)(?=\\\\})\\\\}/g,ln=/#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 cn(t){return t.replace(ln,hn).replace(an,un)}function un(t,e,n,i){return console.warn(\\\\\\\"WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.\\\\\\\"),hn(t,e,n,i)}function hn(t,e,n,i){let r=\\\\\\\"\\\\\\\";for(let t=parseInt(e);t<parseInt(n);t++)r+=i.replace(/\\\\[\\\\s*i\\\\s*\\\\]/g,\\\\\\\"[ \\\\\\\"+t+\\\\\\\" ]\\\\\\\").replace(/UNROLLED_LOOP_INDEX/g,t);return r}function dn(t){let e=\\\\\\\"precision \\\\\\\"+t.precision+\\\\\\\" float;\\\\nprecision \\\\\\\"+t.precision+\\\\\\\" int;\\\\\\\";return\\\\\\\"highp\\\\\\\"===t.precision?e+=\\\\\\\"\\\\n#define HIGH_PRECISION\\\\\\\":\\\\\\\"mediump\\\\\\\"===t.precision?e+=\\\\\\\"\\\\n#define MEDIUM_PRECISION\\\\\\\":\\\\\\\"lowp\\\\\\\"===t.precision&&(e+=\\\\\\\"\\\\n#define LOW_PRECISION\\\\\\\"),e}function pn(t,e,n,i){const r=t.getContext(),s=n.defines;let o=n.vertexShader,a=n.fragmentShader;const l=function(t){let e=\\\\\\\"SHADOWMAP_TYPE_BASIC\\\\\\\";return t.shadowMapType===w.Fb?e=\\\\\\\"SHADOWMAP_TYPE_PCF\\\\\\\":t.shadowMapType===w.Gb?e=\\\\\\\"SHADOWMAP_TYPE_PCF_SOFT\\\\\\\":t.shadowMapType===w.gd&&(e=\\\\\\\"SHADOWMAP_TYPE_VSM\\\\\\\"),e}(n),c=function(t){let e=\\\\\\\"ENVMAP_TYPE_CUBE\\\\\\\";if(t.envMap)switch(t.envMapMode){case w.o:case w.p:e=\\\\\\\"ENVMAP_TYPE_CUBE\\\\\\\";break;case w.q:case w.r:e=\\\\\\\"ENVMAP_TYPE_CUBE_UV\\\\\\\"}return e}(n),u=function(t){let e=\\\\\\\"ENVMAP_MODE_REFLECTION\\\\\\\";if(t.envMap)switch(t.envMapMode){case w.p:case w.r:e=\\\\\\\"ENVMAP_MODE_REFRACTION\\\\\\\"}return e}(n),h=function(t){let e=\\\\\\\"ENVMAP_BLENDING_NONE\\\\\\\";if(t.envMap)switch(t.combine){case w.nb:e=\\\\\\\"ENVMAP_BLENDING_MULTIPLY\\\\\\\";break;case w.lb:e=\\\\\\\"ENVMAP_BLENDING_MIX\\\\\\\";break;case w.c:e=\\\\\\\"ENVMAP_BLENDING_ADD\\\\\\\"}return e}(n),d=t.gammaFactor>0?t.gammaFactor:1,p=n.isWebGL2?\\\\\\\"\\\\\\\":function(t){return[t.extensionDerivatives||t.envMapCubeUV||t.bumpMap||t.tangentSpaceNormalMap||t.clearcoatNormalMap||t.flatShading||\\\\\\\"physical\\\\\\\"===t.shaderID?\\\\\\\"#extension GL_OES_standard_derivatives : enable\\\\\\\":\\\\\\\"\\\\\\\",(t.extensionFragDepth||t.logarithmicDepthBuffer)&&t.rendererExtensionFragDepth?\\\\\\\"#extension GL_EXT_frag_depth : enable\\\\\\\":\\\\\\\"\\\\\\\",t.extensionDrawBuffers&&t.rendererExtensionDrawBuffers?\\\\\\\"#extension GL_EXT_draw_buffers : require\\\\\\\":\\\\\\\"\\\\\\\",(t.extensionShaderTextureLOD||t.envMap||t.transmission)&&t.rendererExtensionShaderTextureLod?\\\\\\\"#extension GL_EXT_shader_texture_lod : enable\\\\\\\":\\\\\\\"\\\\\\\"].filter(tn).join(\\\\\\\"\\\\n\\\\\\\")}(n),_=function(t){const e=[];for(const n in t){const i=t[n];!1!==i&&e.push(\\\\\\\"#define \\\\\\\"+n+\\\\\\\" \\\\\\\"+i)}return e.join(\\\\\\\"\\\\n\\\\\\\")}(s),m=r.createProgram();let f,g,v=n.glslVersion?\\\\\\\"#version \\\\\\\"+n.glslVersion+\\\\\\\"\\\\n\\\\\\\":\\\\\\\"\\\\\\\";n.isRawShaderMaterial?(f=[_].filter(tn).join(\\\\\\\"\\\\n\\\\\\\"),f.length>0&&(f+=\\\\\\\"\\\\n\\\\\\\"),g=[p,_].filter(tn).join(\\\\\\\"\\\\n\\\\\\\"),g.length>0&&(g+=\\\\\\\"\\\\n\\\\\\\")):(f=[dn(n),\\\\\\\"#define SHADER_NAME \\\\\\\"+n.shaderName,_,n.instancing?\\\\\\\"#define USE_INSTANCING\\\\\\\":\\\\\\\"\\\\\\\",n.instancingColor?\\\\\\\"#define USE_INSTANCING_COLOR\\\\\\\":\\\\\\\"\\\\\\\",n.supportsVertexTextures?\\\\\\\"#define VERTEX_TEXTURES\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"#define GAMMA_FACTOR \\\\\\\"+d,\\\\\\\"#define MAX_BONES \\\\\\\"+n.maxBones,n.useFog&&n.fog?\\\\\\\"#define USE_FOG\\\\\\\":\\\\\\\"\\\\\\\",n.useFog&&n.fogExp2?\\\\\\\"#define FOG_EXP2\\\\\\\":\\\\\\\"\\\\\\\",n.map?\\\\\\\"#define USE_MAP\\\\\\\":\\\\\\\"\\\\\\\",n.envMap?\\\\\\\"#define USE_ENVMAP\\\\\\\":\\\\\\\"\\\\\\\",n.envMap?\\\\\\\"#define \\\\\\\"+u:\\\\\\\"\\\\\\\",n.lightMap?\\\\\\\"#define USE_LIGHTMAP\\\\\\\":\\\\\\\"\\\\\\\",n.aoMap?\\\\\\\"#define USE_AOMAP\\\\\\\":\\\\\\\"\\\\\\\",n.emissiveMap?\\\\\\\"#define USE_EMISSIVEMAP\\\\\\\":\\\\\\\"\\\\\\\",n.bumpMap?\\\\\\\"#define USE_BUMPMAP\\\\\\\":\\\\\\\"\\\\\\\",n.normalMap?\\\\\\\"#define USE_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.normalMap&&n.objectSpaceNormalMap?\\\\\\\"#define OBJECTSPACE_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.normalMap&&n.tangentSpaceNormalMap?\\\\\\\"#define TANGENTSPACE_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoatMap?\\\\\\\"#define USE_CLEARCOATMAP\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoatRoughnessMap?\\\\\\\"#define USE_CLEARCOAT_ROUGHNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoatNormalMap?\\\\\\\"#define USE_CLEARCOAT_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.displacementMap&&n.supportsVertexTextures?\\\\\\\"#define USE_DISPLACEMENTMAP\\\\\\\":\\\\\\\"\\\\\\\",n.specularMap?\\\\\\\"#define USE_SPECULARMAP\\\\\\\":\\\\\\\"\\\\\\\",n.specularIntensityMap?\\\\\\\"#define USE_SPECULARINTENSITYMAP\\\\\\\":\\\\\\\"\\\\\\\",n.specularTintMap?\\\\\\\"#define USE_SPECULARTINTMAP\\\\\\\":\\\\\\\"\\\\\\\",n.roughnessMap?\\\\\\\"#define USE_ROUGHNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.metalnessMap?\\\\\\\"#define USE_METALNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.alphaMap?\\\\\\\"#define USE_ALPHAMAP\\\\\\\":\\\\\\\"\\\\\\\",n.transmission?\\\\\\\"#define USE_TRANSMISSION\\\\\\\":\\\\\\\"\\\\\\\",n.transmissionMap?\\\\\\\"#define USE_TRANSMISSIONMAP\\\\\\\":\\\\\\\"\\\\\\\",n.thicknessMap?\\\\\\\"#define USE_THICKNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.vertexTangents?\\\\\\\"#define USE_TANGENT\\\\\\\":\\\\\\\"\\\\\\\",n.vertexColors?\\\\\\\"#define USE_COLOR\\\\\\\":\\\\\\\"\\\\\\\",n.vertexAlphas?\\\\\\\"#define USE_COLOR_ALPHA\\\\\\\":\\\\\\\"\\\\\\\",n.vertexUvs?\\\\\\\"#define USE_UV\\\\\\\":\\\\\\\"\\\\\\\",n.uvsVertexOnly?\\\\\\\"#define UVS_VERTEX_ONLY\\\\\\\":\\\\\\\"\\\\\\\",n.flatShading?\\\\\\\"#define FLAT_SHADED\\\\\\\":\\\\\\\"\\\\\\\",n.skinning?\\\\\\\"#define USE_SKINNING\\\\\\\":\\\\\\\"\\\\\\\",n.useVertexTexture?\\\\\\\"#define BONE_TEXTURE\\\\\\\":\\\\\\\"\\\\\\\",n.morphTargets?\\\\\\\"#define USE_MORPHTARGETS\\\\\\\":\\\\\\\"\\\\\\\",n.morphNormals&&!1===n.flatShading?\\\\\\\"#define USE_MORPHNORMALS\\\\\\\":\\\\\\\"\\\\\\\",n.morphTargets&&n.isWebGL2?\\\\\\\"#define MORPHTARGETS_TEXTURE\\\\\\\":\\\\\\\"\\\\\\\",n.morphTargets&&n.isWebGL2?\\\\\\\"#define MORPHTARGETS_COUNT \\\\\\\"+n.morphTargetsCount:\\\\\\\"\\\\\\\",n.doubleSided?\\\\\\\"#define DOUBLE_SIDED\\\\\\\":\\\\\\\"\\\\\\\",n.flipSided?\\\\\\\"#define FLIP_SIDED\\\\\\\":\\\\\\\"\\\\\\\",n.shadowMapEnabled?\\\\\\\"#define USE_SHADOWMAP\\\\\\\":\\\\\\\"\\\\\\\",n.shadowMapEnabled?\\\\\\\"#define \\\\\\\"+l:\\\\\\\"\\\\\\\",n.sizeAttenuation?\\\\\\\"#define USE_SIZEATTENUATION\\\\\\\":\\\\\\\"\\\\\\\",n.logarithmicDepthBuffer?\\\\\\\"#define USE_LOGDEPTHBUF\\\\\\\":\\\\\\\"\\\\\\\",n.logarithmicDepthBuffer&&n.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\\\\\\\",\\\\\\\"\\\\tattribute mat4 instanceMatrix;\\\\\\\",\\\\\\\"#endif\\\\\\\",\\\\\\\"#ifdef USE_INSTANCING_COLOR\\\\\\\",\\\\\\\"\\\\tattribute vec3 instanceColor;\\\\\\\",\\\\\\\"#endif\\\\\\\",\\\\\\\"attribute vec3 position;\\\\\\\",\\\\\\\"attribute vec3 normal;\\\\\\\",\\\\\\\"attribute vec2 uv;\\\\\\\",\\\\\\\"#ifdef USE_TANGENT\\\\\\\",\\\\\\\"\\\\tattribute vec4 tangent;\\\\\\\",\\\\\\\"#endif\\\\\\\",\\\\\\\"#if defined( USE_COLOR_ALPHA )\\\\\\\",\\\\\\\"\\\\tattribute vec4 color;\\\\\\\",\\\\\\\"#elif defined( USE_COLOR )\\\\\\\",\\\\\\\"\\\\tattribute vec3 color;\\\\\\\",\\\\\\\"#endif\\\\\\\",\\\\\\\"#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )\\\\\\\",\\\\\\\"\\\\tattribute vec3 morphTarget0;\\\\\\\",\\\\\\\"\\\\tattribute vec3 morphTarget1;\\\\\\\",\\\\\\\"\\\\tattribute vec3 morphTarget2;\\\\\\\",\\\\\\\"\\\\tattribute vec3 morphTarget3;\\\\\\\",\\\\\\\"\\\\t#ifdef USE_MORPHNORMALS\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphNormal0;\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphNormal1;\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphNormal2;\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphNormal3;\\\\\\\",\\\\\\\"\\\\t#else\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphTarget4;\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphTarget5;\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphTarget6;\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphTarget7;\\\\\\\",\\\\\\\"\\\\t#endif\\\\\\\",\\\\\\\"#endif\\\\\\\",\\\\\\\"#ifdef USE_SKINNING\\\\\\\",\\\\\\\"\\\\tattribute vec4 skinIndex;\\\\\\\",\\\\\\\"\\\\tattribute vec4 skinWeight;\\\\\\\",\\\\\\\"#endif\\\\\\\",\\\\\\\"\\\\n\\\\\\\"].filter(tn).join(\\\\\\\"\\\\n\\\\\\\"),g=[p,dn(n),\\\\\\\"#define SHADER_NAME \\\\\\\"+n.shaderName,_,\\\\\\\"#define GAMMA_FACTOR \\\\\\\"+d,n.useFog&&n.fog?\\\\\\\"#define USE_FOG\\\\\\\":\\\\\\\"\\\\\\\",n.useFog&&n.fogExp2?\\\\\\\"#define FOG_EXP2\\\\\\\":\\\\\\\"\\\\\\\",n.map?\\\\\\\"#define USE_MAP\\\\\\\":\\\\\\\"\\\\\\\",n.matcap?\\\\\\\"#define USE_MATCAP\\\\\\\":\\\\\\\"\\\\\\\",n.envMap?\\\\\\\"#define USE_ENVMAP\\\\\\\":\\\\\\\"\\\\\\\",n.envMap?\\\\\\\"#define \\\\\\\"+c:\\\\\\\"\\\\\\\",n.envMap?\\\\\\\"#define \\\\\\\"+u:\\\\\\\"\\\\\\\",n.envMap?\\\\\\\"#define \\\\\\\"+h:\\\\\\\"\\\\\\\",n.lightMap?\\\\\\\"#define USE_LIGHTMAP\\\\\\\":\\\\\\\"\\\\\\\",n.aoMap?\\\\\\\"#define USE_AOMAP\\\\\\\":\\\\\\\"\\\\\\\",n.emissiveMap?\\\\\\\"#define USE_EMISSIVEMAP\\\\\\\":\\\\\\\"\\\\\\\",n.bumpMap?\\\\\\\"#define USE_BUMPMAP\\\\\\\":\\\\\\\"\\\\\\\",n.normalMap?\\\\\\\"#define USE_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.normalMap&&n.objectSpaceNormalMap?\\\\\\\"#define OBJECTSPACE_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.normalMap&&n.tangentSpaceNormalMap?\\\\\\\"#define TANGENTSPACE_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoat?\\\\\\\"#define USE_CLEARCOAT\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoatMap?\\\\\\\"#define USE_CLEARCOATMAP\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoatRoughnessMap?\\\\\\\"#define USE_CLEARCOAT_ROUGHNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoatNormalMap?\\\\\\\"#define USE_CLEARCOAT_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.specularMap?\\\\\\\"#define USE_SPECULARMAP\\\\\\\":\\\\\\\"\\\\\\\",n.specularIntensityMap?\\\\\\\"#define USE_SPECULARINTENSITYMAP\\\\\\\":\\\\\\\"\\\\\\\",n.specularTintMap?\\\\\\\"#define USE_SPECULARTINTMAP\\\\\\\":\\\\\\\"\\\\\\\",n.roughnessMap?\\\\\\\"#define USE_ROUGHNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.metalnessMap?\\\\\\\"#define USE_METALNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.alphaMap?\\\\\\\"#define USE_ALPHAMAP\\\\\\\":\\\\\\\"\\\\\\\",n.alphaTest?\\\\\\\"#define USE_ALPHATEST\\\\\\\":\\\\\\\"\\\\\\\",n.sheen?\\\\\\\"#define USE_SHEEN\\\\\\\":\\\\\\\"\\\\\\\",n.transmission?\\\\\\\"#define USE_TRANSMISSION\\\\\\\":\\\\\\\"\\\\\\\",n.transmissionMap?\\\\\\\"#define USE_TRANSMISSIONMAP\\\\\\\":\\\\\\\"\\\\\\\",n.thicknessMap?\\\\\\\"#define USE_THICKNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.vertexTangents?\\\\\\\"#define USE_TANGENT\\\\\\\":\\\\\\\"\\\\\\\",n.vertexColors||n.instancingColor?\\\\\\\"#define USE_COLOR\\\\\\\":\\\\\\\"\\\\\\\",n.vertexAlphas?\\\\\\\"#define USE_COLOR_ALPHA\\\\\\\":\\\\\\\"\\\\\\\",n.vertexUvs?\\\\\\\"#define USE_UV\\\\\\\":\\\\\\\"\\\\\\\",n.uvsVertexOnly?\\\\\\\"#define UVS_VERTEX_ONLY\\\\\\\":\\\\\\\"\\\\\\\",n.gradientMap?\\\\\\\"#define USE_GRADIENTMAP\\\\\\\":\\\\\\\"\\\\\\\",n.flatShading?\\\\\\\"#define FLAT_SHADED\\\\\\\":\\\\\\\"\\\\\\\",n.doubleSided?\\\\\\\"#define DOUBLE_SIDED\\\\\\\":\\\\\\\"\\\\\\\",n.flipSided?\\\\\\\"#define FLIP_SIDED\\\\\\\":\\\\\\\"\\\\\\\",n.shadowMapEnabled?\\\\\\\"#define USE_SHADOWMAP\\\\\\\":\\\\\\\"\\\\\\\",n.shadowMapEnabled?\\\\\\\"#define \\\\\\\"+l:\\\\\\\"\\\\\\\",n.premultipliedAlpha?\\\\\\\"#define PREMULTIPLIED_ALPHA\\\\\\\":\\\\\\\"\\\\\\\",n.physicallyCorrectLights?\\\\\\\"#define PHYSICALLY_CORRECT_LIGHTS\\\\\\\":\\\\\\\"\\\\\\\",n.logarithmicDepthBuffer?\\\\\\\"#define USE_LOGDEPTHBUF\\\\\\\":\\\\\\\"\\\\\\\",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?\\\\\\\"#define USE_LOGDEPTHBUF_EXT\\\\\\\":\\\\\\\"\\\\\\\",(n.extensionShaderTextureLOD||n.envMap)&&n.rendererExtensionShaderTextureLod?\\\\\\\"#define TEXTURE_LOD_EXT\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"uniform mat4 viewMatrix;\\\\\\\",\\\\\\\"uniform vec3 cameraPosition;\\\\\\\",\\\\\\\"uniform bool isOrthographic;\\\\\\\",n.toneMapping!==w.vb?\\\\\\\"#define TONE_MAPPING\\\\\\\":\\\\\\\"\\\\\\\",n.toneMapping!==w.vb?z.tonemapping_pars_fragment:\\\\\\\"\\\\\\\",n.toneMapping!==w.vb?Ke(\\\\\\\"toneMapping\\\\\\\",n.toneMapping):\\\\\\\"\\\\\\\",n.dithering?\\\\\\\"#define DITHERING\\\\\\\":\\\\\\\"\\\\\\\",n.format===w.ic?\\\\\\\"#define OPAQUE\\\\\\\":\\\\\\\"\\\\\\\",z.encodings_pars_fragment,n.map?Ze(\\\\\\\"mapTexelToLinear\\\\\\\",n.mapEncoding):\\\\\\\"\\\\\\\",n.matcap?Ze(\\\\\\\"matcapTexelToLinear\\\\\\\",n.matcapEncoding):\\\\\\\"\\\\\\\",n.envMap?Ze(\\\\\\\"envMapTexelToLinear\\\\\\\",n.envMapEncoding):\\\\\\\"\\\\\\\",n.emissiveMap?Ze(\\\\\\\"emissiveMapTexelToLinear\\\\\\\",n.emissiveMapEncoding):\\\\\\\"\\\\\\\",n.specularTintMap?Ze(\\\\\\\"specularTintMapTexelToLinear\\\\\\\",n.specularTintMapEncoding):\\\\\\\"\\\\\\\",n.lightMap?Ze(\\\\\\\"lightMapTexelToLinear\\\\\\\",n.lightMapEncoding):\\\\\\\"\\\\\\\",Qe(\\\\\\\"linearToOutputTexel\\\\\\\",n.outputEncoding),n.depthPacking?\\\\\\\"#define DEPTH_PACKING \\\\\\\"+n.depthPacking:\\\\\\\"\\\\\\\",\\\\\\\"\\\\n\\\\\\\"].filter(tn).join(\\\\\\\"\\\\n\\\\\\\")),o=sn(o),o=en(o,n),o=nn(o,n),a=sn(a),a=en(a,n),a=nn(a,n),o=cn(o),a=cn(a),n.isWebGL2&&!0!==n.isRawShaderMaterial&&(v=\\\\\\\"#version 300 es\\\\n\\\\\\\",f=[\\\\\\\"precision mediump sampler2DArray;\\\\\\\",\\\\\\\"#define attribute in\\\\\\\",\\\\\\\"#define varying out\\\\\\\",\\\\\\\"#define texture2D texture\\\\\\\"].join(\\\\\\\"\\\\n\\\\\\\")+\\\\\\\"\\\\n\\\\\\\"+f,g=[\\\\\\\"#define varying in\\\\\\\",n.glslVersion===w.I?\\\\\\\"\\\\\\\":\\\\\\\"out highp vec4 pc_fragColor;\\\\\\\",n.glslVersion===w.I?\\\\\\\"\\\\\\\":\\\\\\\"#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(\\\\\\\"\\\\n\\\\\\\")+\\\\\\\"\\\\n\\\\\\\"+g);const y=v+f+o,x=v+g+a,b=Xe(r,r.VERTEX_SHADER,y),T=Xe(r,r.FRAGMENT_SHADER,x);if(r.attachShader(m,b),r.attachShader(m,T),void 0!==n.index0AttributeName?r.bindAttribLocation(m,0,n.index0AttributeName):!0===n.morphTargets&&r.bindAttribLocation(m,0,\\\\\\\"position\\\\\\\"),r.linkProgram(m),t.debug.checkShaderErrors){const t=r.getProgramInfoLog(m).trim(),e=r.getShaderInfoLog(b).trim(),n=r.getShaderInfoLog(T).trim();let i=!0,s=!0;if(!1===r.getProgramParameter(m,r.LINK_STATUS)){i=!1;const e=Je(r,b,\\\\\\\"vertex\\\\\\\"),n=Je(r,T,\\\\\\\"fragment\\\\\\\");console.error(\\\\\\\"THREE.WebGLProgram: Shader Error \\\\\\\"+r.getError()+\\\\\\\" - VALIDATE_STATUS \\\\\\\"+r.getProgramParameter(m,r.VALIDATE_STATUS)+\\\\\\\"\\\\n\\\\nProgram Info Log: \\\\\\\"+t+\\\\\\\"\\\\n\\\\\\\"+e+\\\\\\\"\\\\n\\\\\\\"+n)}else\\\\\\\"\\\\\\\"!==t?console.warn(\\\\\\\"THREE.WebGLProgram: Program Info Log:\\\\\\\",t):\\\\\\\"\\\\\\\"!==e&&\\\\\\\"\\\\\\\"!==n||(s=!1);s&&(this.diagnostics={runnable:i,programLog:t,vertexShader:{log:e,prefix:f},fragmentShader:{log:n,prefix:g}})}let A,E;return r.deleteShader(b),r.deleteShader(T),this.getUniforms=function(){return void 0===A&&(A=new qe(r,m)),A},this.getAttributes=function(){return void 0===E&&(E=function(t,e){const n={},i=t.getProgramParameter(e,t.ACTIVE_ATTRIBUTES);for(let r=0;r<i;r++){const i=t.getActiveAttrib(e,r),s=i.name;let o=1;i.type===t.FLOAT_MAT2&&(o=2),i.type===t.FLOAT_MAT3&&(o=3),i.type===t.FLOAT_MAT4&&(o=4),n[s]={type:i.type,location:t.getAttribLocation(e,s),locationSize:o}}return n}(r,m)),E},this.destroy=function(){i.releaseStatesOfProgram(this),r.deleteProgram(m),this.program=void 0},this.name=n.shaderName,this.id=Ye++,this.cacheKey=e,this.usedTimes=1,this.program=m,this.vertexShader=b,this.fragmentShader=T,this}function _n(t,e,n,i,r,s,o){const a=[],l=r.isWebGL2,c=r.logarithmicDepthBuffer,u=r.floatVertexTextures,h=r.maxVertexUniforms,d=r.vertexTextures;let p=r.precision;const _={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\\\\\\\"},m=[\\\\\\\"precision\\\\\\\",\\\\\\\"isWebGL2\\\\\\\",\\\\\\\"supportsVertexTextures\\\\\\\",\\\\\\\"outputEncoding\\\\\\\",\\\\\\\"instancing\\\\\\\",\\\\\\\"instancingColor\\\\\\\",\\\\\\\"map\\\\\\\",\\\\\\\"mapEncoding\\\\\\\",\\\\\\\"matcap\\\\\\\",\\\\\\\"matcapEncoding\\\\\\\",\\\\\\\"envMap\\\\\\\",\\\\\\\"envMapMode\\\\\\\",\\\\\\\"envMapEncoding\\\\\\\",\\\\\\\"envMapCubeUV\\\\\\\",\\\\\\\"lightMap\\\\\\\",\\\\\\\"lightMapEncoding\\\\\\\",\\\\\\\"aoMap\\\\\\\",\\\\\\\"emissiveMap\\\\\\\",\\\\\\\"emissiveMapEncoding\\\\\\\",\\\\\\\"bumpMap\\\\\\\",\\\\\\\"normalMap\\\\\\\",\\\\\\\"objectSpaceNormalMap\\\\\\\",\\\\\\\"tangentSpaceNormalMap\\\\\\\",\\\\\\\"clearcoat\\\\\\\",\\\\\\\"clearcoatMap\\\\\\\",\\\\\\\"clearcoatRoughnessMap\\\\\\\",\\\\\\\"clearcoatNormalMap\\\\\\\",\\\\\\\"displacementMap\\\\\\\",\\\\\\\"specularMap\\\\\\\",\\\\\\\"specularIntensityMap\\\\\\\",\\\\\\\"specularTintMap\\\\\\\",\\\\\\\"specularTintMapEncoding\\\\\\\",\\\\\\\"roughnessMap\\\\\\\",\\\\\\\"metalnessMap\\\\\\\",\\\\\\\"gradientMap\\\\\\\",\\\\\\\"alphaMap\\\\\\\",\\\\\\\"alphaTest\\\\\\\",\\\\\\\"combine\\\\\\\",\\\\\\\"vertexColors\\\\\\\",\\\\\\\"vertexAlphas\\\\\\\",\\\\\\\"vertexTangents\\\\\\\",\\\\\\\"vertexUvs\\\\\\\",\\\\\\\"uvsVertexOnly\\\\\\\",\\\\\\\"fog\\\\\\\",\\\\\\\"useFog\\\\\\\",\\\\\\\"fogExp2\\\\\\\",\\\\\\\"flatShading\\\\\\\",\\\\\\\"sizeAttenuation\\\\\\\",\\\\\\\"logarithmicDepthBuffer\\\\\\\",\\\\\\\"skinning\\\\\\\",\\\\\\\"maxBones\\\\\\\",\\\\\\\"useVertexTexture\\\\\\\",\\\\\\\"morphTargets\\\\\\\",\\\\\\\"morphNormals\\\\\\\",\\\\\\\"morphTargetsCount\\\\\\\",\\\\\\\"premultipliedAlpha\\\\\\\",\\\\\\\"numDirLights\\\\\\\",\\\\\\\"numPointLights\\\\\\\",\\\\\\\"numSpotLights\\\\\\\",\\\\\\\"numHemiLights\\\\\\\",\\\\\\\"numRectAreaLights\\\\\\\",\\\\\\\"numDirLightShadows\\\\\\\",\\\\\\\"numPointLightShadows\\\\\\\",\\\\\\\"numSpotLightShadows\\\\\\\",\\\\\\\"shadowMapEnabled\\\\\\\",\\\\\\\"shadowMapType\\\\\\\",\\\\\\\"toneMapping\\\\\\\",\\\\\\\"physicallyCorrectLights\\\\\\\",\\\\\\\"doubleSided\\\\\\\",\\\\\\\"flipSided\\\\\\\",\\\\\\\"numClippingPlanes\\\\\\\",\\\\\\\"numClipIntersection\\\\\\\",\\\\\\\"depthPacking\\\\\\\",\\\\\\\"dithering\\\\\\\",\\\\\\\"format\\\\\\\",\\\\\\\"sheen\\\\\\\",\\\\\\\"transmission\\\\\\\",\\\\\\\"transmissionMap\\\\\\\",\\\\\\\"thicknessMap\\\\\\\"];function f(t){let e;return t&&t.isTexture?e=t.encoding:t&&t.isWebGLRenderTarget?(console.warn(\\\\\\\"THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead.\\\\\\\"),e=t.texture.encoding):e=w.U,l&&t&&t.isTexture&&t.format===w.Ib&&t.type===w.Zc&&t.encoding===w.ld&&(e=w.U),e}return{getParameters:function(s,a,m,g,v){const y=g.fog,x=s.isMeshStandardMaterial?g.environment:null,b=(s.isMeshStandardMaterial?n:e).get(s.envMap||x),T=_[s.type],A=v.isSkinnedMesh?function(t){const e=t.skeleton.bones;if(u)return 1024;{const t=h,n=Math.floor((t-20)/4),i=Math.min(n,e.length);return i<e.length?(console.warn(\\\\\\\"THREE.WebGLRenderer: Skeleton has \\\\\\\"+e.length+\\\\\\\" bones. This GPU supports \\\\\\\"+i+\\\\\\\".\\\\\\\"),0):i}}(v):0;let E,M;if(null!==s.precision&&(p=r.getMaxPrecision(s.precision),p!==s.precision&&console.warn(\\\\\\\"THREE.WebGLProgram.getParameters:\\\\\\\",s.precision,\\\\\\\"not supported, using\\\\\\\",p,\\\\\\\"instead.\\\\\\\")),T){const t=V[T];E=t.vertexShader,M=t.fragmentShader}else E=s.vertexShader,M=s.fragmentShader;const S=t.getRenderTarget(),C=s.alphaTest>0,N=s.clearcoat>0;return{isWebGL2:l,shaderID:T,shaderName:s.type,vertexShader:E,fragmentShader:M,defines:s.defines,isRawShaderMaterial:!0===s.isRawShaderMaterial,glslVersion:s.glslVersion,precision:p,instancing:!0===v.isInstancedMesh,instancingColor:!0===v.isInstancedMesh&&null!==v.instanceColor,supportsVertexTextures:d,outputEncoding:null!==S?f(S.texture):t.outputEncoding,map:!!s.map,mapEncoding:f(s.map),matcap:!!s.matcap,matcapEncoding:f(s.matcap),envMap:!!b,envMapMode:b&&b.mapping,envMapEncoding:f(b),envMapCubeUV:!!b&&(b.mapping===w.q||b.mapping===w.r),lightMap:!!s.lightMap,lightMapEncoding:f(s.lightMap),aoMap:!!s.aoMap,emissiveMap:!!s.emissiveMap,emissiveMapEncoding:f(s.emissiveMap),bumpMap:!!s.bumpMap,normalMap:!!s.normalMap,objectSpaceNormalMap:s.normalMapType===w.zb,tangentSpaceNormalMap:s.normalMapType===w.Uc,clearcoat:N,clearcoatMap:N&&!!s.clearcoatMap,clearcoatRoughnessMap:N&&!!s.clearcoatRoughnessMap,clearcoatNormalMap:N&&!!s.clearcoatNormalMap,displacementMap:!!s.displacementMap,roughnessMap:!!s.roughnessMap,metalnessMap:!!s.metalnessMap,specularMap:!!s.specularMap,specularIntensityMap:!!s.specularIntensityMap,specularTintMap:!!s.specularTintMap,specularTintMapEncoding:f(s.specularTintMap),alphaMap:!!s.alphaMap,alphaTest:C,gradientMap:!!s.gradientMap,sheen:s.sheen>0,transmission:s.transmission>0,transmissionMap:!!s.transmissionMap,thicknessMap:!!s.thicknessMap,combine:s.combine,vertexTangents:!!s.normalMap&&!!v.geometry&&!!v.geometry.attributes.tangent,vertexColors:s.vertexColors,vertexAlphas:!0===s.vertexColors&&!!v.geometry&&!!v.geometry.attributes.color&&4===v.geometry.attributes.color.itemSize,vertexUvs:!!(s.map||s.bumpMap||s.normalMap||s.specularMap||s.alphaMap||s.emissiveMap||s.roughnessMap||s.metalnessMap||s.clearcoatMap||s.clearcoatRoughnessMap||s.clearcoatNormalMap||s.displacementMap||s.transmissionMap||s.thicknessMap||s.specularIntensityMap||s.specularTintMap),uvsVertexOnly:!(s.map||s.bumpMap||s.normalMap||s.specularMap||s.alphaMap||s.emissiveMap||s.roughnessMap||s.metalnessMap||s.clearcoatNormalMap||s.transmission>0||s.transmissionMap||s.thicknessMap||s.specularIntensityMap||s.specularTintMap||!s.displacementMap),fog:!!y,useFog:s.fog,fogExp2:y&&y.isFogExp2,flatShading:!!s.flatShading,sizeAttenuation:s.sizeAttenuation,logarithmicDepthBuffer:c,skinning:!0===v.isSkinnedMesh&&A>0,maxBones:A,useVertexTexture:u,morphTargets:!!v.geometry&&!!v.geometry.morphAttributes.position,morphNormals:!!v.geometry&&!!v.geometry.morphAttributes.normal,morphTargetsCount:v.geometry&&v.geometry.morphAttributes.position?v.geometry.morphAttributes.position.length:0,numDirLights:a.directional.length,numPointLights:a.point.length,numSpotLights:a.spot.length,numRectAreaLights:a.rectArea.length,numHemiLights:a.hemi.length,numDirLightShadows:a.directionalShadowMap.length,numPointLightShadows:a.pointShadowMap.length,numSpotLightShadows:a.spotShadowMap.length,numClippingPlanes:o.numPlanes,numClipIntersection:o.numIntersection,format:s.format,dithering:s.dithering,shadowMapEnabled:t.shadowMap.enabled&&m.length>0,shadowMapType:t.shadowMap.type,toneMapping:s.toneMapped?t.toneMapping:w.vb,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:s.premultipliedAlpha,doubleSided:s.side===w.z,flipSided:s.side===w.i,depthPacking:void 0!==s.depthPacking&&s.depthPacking,index0AttributeName:s.index0AttributeName,extensionDerivatives:s.extensions&&s.extensions.derivatives,extensionFragDepth:s.extensions&&s.extensions.fragDepth,extensionDrawBuffers:s.extensions&&s.extensions.drawBuffers,extensionShaderTextureLOD:s.extensions&&s.extensions.shaderTextureLOD,rendererExtensionFragDepth:l||i.has(\\\\\\\"EXT_frag_depth\\\\\\\"),rendererExtensionDrawBuffers:l||i.has(\\\\\\\"WEBGL_draw_buffers\\\\\\\"),rendererExtensionShaderTextureLod:l||i.has(\\\\\\\"EXT_shader_texture_lod\\\\\\\"),customProgramCacheKey:s.customProgramCacheKey()}},getProgramCacheKey:function(e){const n=[];if(e.shaderID?n.push(e.shaderID):(n.push(e.fragmentShader),n.push(e.vertexShader)),void 0!==e.defines)for(const t in e.defines)n.push(t),n.push(e.defines[t]);if(!1===e.isRawShaderMaterial){for(let t=0;t<m.length;t++)n.push(e[m[t]]);n.push(t.outputEncoding),n.push(t.gammaFactor)}return n.push(e.customProgramCacheKey),n.join()},getUniforms:function(t){const e=_[t.type];let n;if(e){const t=V[e];n=I.clone(t.uniforms)}else n=t.uniforms;return n},acquireProgram:function(e,n){let i;for(let t=0,e=a.length;t<e;t++){const e=a[t];if(e.cacheKey===n){i=e,++i.usedTimes;break}}return void 0===i&&(i=new pn(t,n,e,s),a.push(i)),i},releaseProgram:function(t){if(0==--t.usedTimes){const e=a.indexOf(t);a[e]=a[a.length-1],a.pop(),t.destroy()}},programs:a}}function mn(){let t=new WeakMap;return{get:function(e){let n=t.get(e);return void 0===n&&(n={},t.set(e,n)),n},remove:function(e){t.delete(e)},update:function(e,n,i){t.get(e)[n]=i},dispose:function(){t=new WeakMap}}}function fn(t,e){return t.groupOrder!==e.groupOrder?t.groupOrder-e.groupOrder:t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.program!==e.program?t.program.id-e.program.id:t.material.id!==e.material.id?t.material.id-e.material.id:t.z!==e.z?t.z-e.z:t.id-e.id}function gn(t,e){return t.groupOrder!==e.groupOrder?t.groupOrder-e.groupOrder:t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.z!==e.z?e.z-t.z:t.id-e.id}function vn(t){const e=[];let n=0;const i=[],r=[],s=[],o={id:-1};function a(i,r,s,a,l,c){let u=e[n];const h=t.get(s);return void 0===u?(u={id:i.id,object:i,geometry:r,material:s,program:h.program||o,groupOrder:a,renderOrder:i.renderOrder,z:l,group:c},e[n]=u):(u.id=i.id,u.object=i,u.geometry=r,u.material=s,u.program=h.program||o,u.groupOrder=a,u.renderOrder=i.renderOrder,u.z=l,u.group=c),n++,u}return{opaque:i,transmissive:r,transparent:s,init:function(){n=0,i.length=0,r.length=0,s.length=0},push:function(t,e,n,o,l,c){const u=a(t,e,n,o,l,c);n.transmission>0?r.push(u):!0===n.transparent?s.push(u):i.push(u)},unshift:function(t,e,n,o,l,c){const u=a(t,e,n,o,l,c);n.transmission>0?r.unshift(u):!0===n.transparent?s.unshift(u):i.unshift(u)},finish:function(){for(let t=n,i=e.length;t<i;t++){const n=e[t];if(null===n.id)break;n.id=null,n.object=null,n.geometry=null,n.material=null,n.program=null,n.group=null}},sort:function(t,e){i.length>1&&i.sort(t||fn),r.length>1&&r.sort(e||gn),s.length>1&&s.sort(e||gn)}}}function yn(t){let e=new WeakMap;return{get:function(n,i){let r;return!1===e.has(n)?(r=new vn(t),e.set(n,[r])):i>=e.get(n).length?(r=new vn(t),e.get(n).push(r)):r=e.get(n)[i],r},dispose:function(){e=new WeakMap}}}function xn(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case\\\\\\\"DirectionalLight\\\\\\\":n={direction:new p.a,color:new D.a};break;case\\\\\\\"SpotLight\\\\\\\":n={position:new p.a,direction:new p.a,color:new D.a,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case\\\\\\\"PointLight\\\\\\\":n={position:new p.a,color:new D.a,distance:0,decay:0};break;case\\\\\\\"HemisphereLight\\\\\\\":n={direction:new p.a,skyColor:new D.a,groundColor:new D.a};break;case\\\\\\\"RectAreaLight\\\\\\\":n={color:new D.a,position:new p.a,halfWidth:new p.a,halfHeight:new p.a}}return t[e.id]=n,n}}}let bn=0;function wn(t,e){return(e.castShadow?1:0)-(t.castShadow?1:0)}function Tn(t,e){const n=new xn,i=function(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case\\\\\\\"DirectionalLight\\\\\\\":case\\\\\\\"SpotLight\\\\\\\":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new d.a};break;case\\\\\\\"PointLight\\\\\\\":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new d.a,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=n,n}}}(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]};for(let t=0;t<9;t++)r.probe.push(new p.a);const s=new p.a,o=new A.a,a=new A.a;return{setup:function(s,o){let a=0,l=0,c=0;for(let t=0;t<9;t++)r.probe[t].set(0,0,0);let u=0,h=0,d=0,p=0,_=0,m=0,f=0,g=0;s.sort(wn);const v=!0!==o?Math.PI:1;for(let t=0,e=s.length;t<e;t++){const e=s[t],o=e.color,y=e.intensity,x=e.distance,b=e.shadow&&e.shadow.map?e.shadow.map.texture:null;if(e.isAmbientLight)a+=o.r*y*v,l+=o.g*y*v,c+=o.b*y*v;else if(e.isLightProbe)for(let t=0;t<9;t++)r.probe[t].addScaledVector(e.sh.coefficients[t],y);else if(e.isDirectionalLight){const t=n.get(e);if(t.color.copy(e.color).multiplyScalar(e.intensity*v),e.castShadow){const t=e.shadow,n=i.get(e);n.shadowBias=t.bias,n.shadowNormalBias=t.normalBias,n.shadowRadius=t.radius,n.shadowMapSize=t.mapSize,r.directionalShadow[u]=n,r.directionalShadowMap[u]=b,r.directionalShadowMatrix[u]=e.shadow.matrix,m++}r.directional[u]=t,u++}else if(e.isSpotLight){const t=n.get(e);if(t.position.setFromMatrixPosition(e.matrixWorld),t.color.copy(o).multiplyScalar(y*v),t.distance=x,t.coneCos=Math.cos(e.angle),t.penumbraCos=Math.cos(e.angle*(1-e.penumbra)),t.decay=e.decay,e.castShadow){const t=e.shadow,n=i.get(e);n.shadowBias=t.bias,n.shadowNormalBias=t.normalBias,n.shadowRadius=t.radius,n.shadowMapSize=t.mapSize,r.spotShadow[d]=n,r.spotShadowMap[d]=b,r.spotShadowMatrix[d]=e.shadow.matrix,g++}r.spot[d]=t,d++}else if(e.isRectAreaLight){const t=n.get(e);t.color.copy(o).multiplyScalar(y),t.halfWidth.set(.5*e.width,0,0),t.halfHeight.set(0,.5*e.height,0),r.rectArea[p]=t,p++}else if(e.isPointLight){const t=n.get(e);if(t.color.copy(e.color).multiplyScalar(e.intensity*v),t.distance=e.distance,t.decay=e.decay,e.castShadow){const t=e.shadow,n=i.get(e);n.shadowBias=t.bias,n.shadowNormalBias=t.normalBias,n.shadowRadius=t.radius,n.shadowMapSize=t.mapSize,n.shadowCameraNear=t.camera.near,n.shadowCameraFar=t.camera.far,r.pointShadow[h]=n,r.pointShadowMap[h]=b,r.pointShadowMatrix[h]=e.shadow.matrix,f++}r.point[h]=t,h++}else if(e.isHemisphereLight){const t=n.get(e);t.skyColor.copy(e.color).multiplyScalar(y*v),t.groundColor.copy(e.groundColor).multiplyScalar(y*v),r.hemi[_]=t,_++}}p>0&&(e.isWebGL2||!0===t.has(\\\\\\\"OES_texture_float_linear\\\\\\\")?(r.rectAreaLTC1=G.LTC_FLOAT_1,r.rectAreaLTC2=G.LTC_FLOAT_2):!0===t.has(\\\\\\\"OES_texture_half_float_linear\\\\\\\")?(r.rectAreaLTC1=G.LTC_HALF_1,r.rectAreaLTC2=G.LTC_HALF_2):console.error(\\\\\\\"THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.\\\\\\\")),r.ambient[0]=a,r.ambient[1]=l,r.ambient[2]=c;const y=r.hash;y.directionalLength===u&&y.pointLength===h&&y.spotLength===d&&y.rectAreaLength===p&&y.hemiLength===_&&y.numDirectionalShadows===m&&y.numPointShadows===f&&y.numSpotShadows===g||(r.directional.length=u,r.spot.length=d,r.rectArea.length=p,r.point.length=h,r.hemi.length=_,r.directionalShadow.length=m,r.directionalShadowMap.length=m,r.pointShadow.length=f,r.pointShadowMap.length=f,r.spotShadow.length=g,r.spotShadowMap.length=g,r.directionalShadowMatrix.length=m,r.pointShadowMatrix.length=f,r.spotShadowMatrix.length=g,y.directionalLength=u,y.pointLength=h,y.spotLength=d,y.rectAreaLength=p,y.hemiLength=_,y.numDirectionalShadows=m,y.numPointShadows=f,y.numSpotShadows=g,r.version=bn++)},setupView:function(t,e){let n=0,i=0,l=0,c=0,u=0;const h=e.matrixWorldInverse;for(let e=0,d=t.length;e<d;e++){const d=t[e];if(d.isDirectionalLight){const t=r.directional[n];t.direction.setFromMatrixPosition(d.matrixWorld),s.setFromMatrixPosition(d.target.matrixWorld),t.direction.sub(s),t.direction.transformDirection(h),n++}else if(d.isSpotLight){const t=r.spot[l];t.position.setFromMatrixPosition(d.matrixWorld),t.position.applyMatrix4(h),t.direction.setFromMatrixPosition(d.matrixWorld),s.setFromMatrixPosition(d.target.matrixWorld),t.direction.sub(s),t.direction.transformDirection(h),l++}else if(d.isRectAreaLight){const t=r.rectArea[c];t.position.setFromMatrixPosition(d.matrixWorld),t.position.applyMatrix4(h),a.identity(),o.copy(d.matrixWorld),o.premultiply(h),a.extractRotation(o),t.halfWidth.set(.5*d.width,0,0),t.halfHeight.set(0,.5*d.height,0),t.halfWidth.applyMatrix4(a),t.halfHeight.applyMatrix4(a),c++}else if(d.isPointLight){const t=r.point[i];t.position.setFromMatrixPosition(d.matrixWorld),t.position.applyMatrix4(h),i++}else if(d.isHemisphereLight){const t=r.hemi[u];t.direction.setFromMatrixPosition(d.matrixWorld),t.direction.transformDirection(h),t.direction.normalize(),u++}}},state:r}}function An(t,e){const n=new Tn(t,e),i=[],r=[];return{init:function(){i.length=0,r.length=0},state:{lightsArray:i,shadowsArray:r,lights:n},setupLights:function(t){n.setup(i,t)},setupLightsView:function(t){n.setupView(i,t)},pushLight:function(t){i.push(t)},pushShadow:function(t){r.push(t)}}}function En(t,e){let n=new WeakMap;return{get:function(i,r=0){let s;return!1===n.has(i)?(s=new An(t,e),n.set(i,[s])):r>=n.get(i).length?(s=new An(t,e),n.get(i).push(s)):s=n.get(i)[r],s},dispose:function(){n=new WeakMap}}}class Mn extends O.a{constructor(t){super(),this.type=\\\\\\\"MeshDepthMaterial\\\\\\\",this.depthPacking=w.j,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.setValues(t)}copy(t){return super.copy(t),this.depthPacking=t.depthPacking,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this}}Mn.prototype.isMeshDepthMaterial=!0;class Sn extends O.a{constructor(t){super(),this.type=\\\\\\\"MeshDistanceMaterial\\\\\\\",this.referencePosition=new p.a,this.nearDistance=1,this.farDistance=1e3,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.setValues(t)}copy(t){return super.copy(t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this}}Sn.prototype.isMeshDistanceMaterial=!0;function Cn(t,e,n){let i=new T.a;const r=new d.a,s=new d.a,o=new _.a,a=new Mn({depthPacking:w.Hb}),l=new Sn,c={},u=n.maxTextureSize,h={0:w.i,1:w.H,2:w.z},p=new F({uniforms:{shadow_pass:{value:null},resolution:{value:new d.a},radius:{value:4},samples:{value:8}},vertexShader:\\\\\\\"\\\\nvoid main() {\\\\n\\\\n\\\\tgl_Position = vec4( position, 1.0 );\\\\n\\\\n}\\\\n\\\\\\\",fragmentShader:\\\\\\\"\\\\nuniform sampler2D shadow_pass;\\\\nuniform vec2 resolution;\\\\nuniform float radius;\\\\nuniform float samples;\\\\n\\\\n#include <packing>\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tfloat mean = 0.0;\\\\n\\\\tfloat squared_mean = 0.0;\\\\n\\\\n\\\\t// This seems totally useless but it's a crazy work around for a Adreno compiler bug\\\\n\\\\t// float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\\\\n\\\\n\\\\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\\\\n\\\\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\\\\n\\\\tfor ( float i = 0.0; i < samples; i ++ ) {\\\\n\\\\n\\\\t\\\\tfloat uvOffset = uvStart + i * uvStride;\\\\n\\\\n\\\\t\\\\t#ifdef HORIZONTAL_PASS\\\\n\\\\n\\\\t\\\\t\\\\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\\\\n\\\\t\\\\t\\\\tmean += distribution.x;\\\\n\\\\t\\\\t\\\\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\\\\n\\\\n\\\\t\\\\t#else\\\\n\\\\n\\\\t\\\\t\\\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\\\\n\\\\t\\\\t\\\\tmean += depth;\\\\n\\\\t\\\\t\\\\tsquared_mean += depth * depth;\\\\n\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t}\\\\n\\\\n\\\\tmean = mean / samples;\\\\n\\\\tsquared_mean = squared_mean / samples;\\\\n\\\\n\\\\tfloat std_dev = sqrt( squared_mean - mean * mean );\\\\n\\\\n\\\\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\\\\n\\\\n}\\\\n\\\\\\\"}),m=p.clone();m.defines.HORIZONTAL_PASS=1;const f=new S.a;f.setAttribute(\\\\\\\"position\\\\\\\",new C.a(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const g=new k.a(f,p),v=this;function y(n,i){const r=e.update(g);p.uniforms.shadow_pass.value=n.map.texture,p.uniforms.resolution.value=n.mapSize,p.uniforms.radius.value=n.radius,p.uniforms.samples.value=n.blurSamples,t.setRenderTarget(n.mapPass),t.clear(),t.renderBufferDirect(i,null,r,p,g,null),m.uniforms.shadow_pass.value=n.mapPass.texture,m.uniforms.resolution.value=n.mapSize,m.uniforms.radius.value=n.radius,m.uniforms.samples.value=n.blurSamples,t.setRenderTarget(n.map),t.clear(),t.renderBufferDirect(i,null,r,m,g,null)}function x(e,n,i,r,s,o,u){let d=null;const p=!0===r.isPointLight?e.customDistanceMaterial:e.customDepthMaterial;if(d=void 0!==p?p:!0===r.isPointLight?l:a,t.localClippingEnabled&&!0===i.clipShadows&&0!==i.clippingPlanes.length||i.displacementMap&&0!==i.displacementScale||i.alphaMap&&i.alphaTest>0){const t=d.uuid,e=i.uuid;let n=c[t];void 0===n&&(n={},c[t]=n);let r=n[e];void 0===r&&(r=d.clone(),n[e]=r),d=r}return d.visible=i.visible,d.wireframe=i.wireframe,u===w.gd?d.side=null!==i.shadowSide?i.shadowSide:i.side:d.side=null!==i.shadowSide?i.shadowSide:h[i.side],d.alphaMap=i.alphaMap,d.alphaTest=i.alphaTest,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=o),d}function b(n,r,s,o,a){if(!1===n.visible)return;if(n.layers.test(r.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&a===w.gd)&&(!n.frustumCulled||i.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(s.matrixWorldInverse,n.matrixWorld);const i=e.update(n),r=n.material;if(Array.isArray(r)){const e=i.groups;for(let l=0,c=e.length;l<c;l++){const c=e[l],u=r[c.materialIndex];if(u&&u.visible){const e=x(n,0,u,o,s.near,s.far,a);t.renderBufferDirect(s,null,i,e,n,c)}}}else if(r.visible){const e=x(n,0,r,o,s.near,s.far,a);t.renderBufferDirect(s,null,i,e,n,null)}}const l=n.children;for(let t=0,e=l.length;t<e;t++)b(l[t],r,s,o,a)}this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=w.Fb,this.render=function(e,n,a){if(!1===v.enabled)return;if(!1===v.autoUpdate&&!1===v.needsUpdate)return;if(0===e.length)return;const l=t.getRenderTarget(),c=t.getActiveCubeFace(),h=t.getActiveMipmapLevel(),d=t.state;d.setBlending(w.ub),d.buffers.color.setClear(1,1,1,1),d.buffers.depth.setTest(!0),d.setScissorTest(!1);for(let l=0,c=e.length;l<c;l++){const c=e[l],h=c.shadow;if(void 0===h){console.warn(\\\\\\\"THREE.WebGLShadowMap:\\\\\\\",c,\\\\\\\"has no shadow.\\\\\\\");continue}if(!1===h.autoUpdate&&!1===h.needsUpdate)continue;r.copy(h.mapSize);const p=h.getFrameExtents();if(r.multiply(p),s.copy(h.mapSize),(r.x>u||r.y>u)&&(r.x>u&&(s.x=Math.floor(u/p.x),r.x=s.x*p.x,h.mapSize.x=s.x),r.y>u&&(s.y=Math.floor(u/p.y),r.y=s.y*p.y,h.mapSize.y=s.y)),null===h.map&&!h.isPointLightShadow&&this.type===w.gd){const t={minFilter:w.V,magFilter:w.V,format:w.Ib};h.map=new Z(r.x,r.y,t),h.map.texture.name=c.name+\\\\\\\".shadowMap\\\\\\\",h.mapPass=new Z(r.x,r.y,t),h.camera.updateProjectionMatrix()}if(null===h.map){const t={minFilter:w.ob,magFilter:w.ob,format:w.Ib};h.map=new Z(r.x,r.y,t),h.map.texture.name=c.name+\\\\\\\".shadowMap\\\\\\\",h.camera.updateProjectionMatrix()}t.setRenderTarget(h.map),t.clear();const _=h.getViewportCount();for(let t=0;t<_;t++){const e=h.getViewport(t);o.set(s.x*e.x,s.y*e.y,s.x*e.z,s.y*e.w),d.viewport(o),h.updateMatrices(c,t),i=h.getFrustum(),b(n,a,h.camera,c,this.type)}h.isPointLightShadow||this.type!==w.gd||y(h,a),h.needsUpdate=!1}v.needsUpdate=!1,t.setRenderTarget(l,c,h)}}function Nn(t,e,n){const i=n.isWebGL2;const r=new function(){let e=!1;const n=new _.a;let i=null;const r=new _.a(0,0,0,0);return{setMask:function(n){i===n||e||(t.colorMask(n,n,n,n),i=n)},setLocked:function(t){e=t},setClear:function(e,i,s,o,a){!0===a&&(e*=o,i*=o,s*=o),n.set(e,i,s,o),!1===r.equals(n)&&(t.clearColor(e,i,s,o),r.copy(n))},reset:function(){e=!1,i=null,r.set(-1,0,0,0)}}},s=new function(){let e=!1,n=null,i=null,r=null;return{setTest:function(e){e?z(t.DEPTH_TEST):U(t.DEPTH_TEST)},setMask:function(i){n===i||e||(t.depthMask(i),n=i)},setFunc:function(e){if(i!==e){if(e)switch(e){case w.tb:t.depthFunc(t.NEVER);break;case w.g:t.depthFunc(t.ALWAYS);break;case w.S:t.depthFunc(t.LESS);break;case w.T:t.depthFunc(t.LEQUAL);break;case w.C:t.depthFunc(t.EQUAL);break;case w.L:t.depthFunc(t.GEQUAL);break;case w.K:t.depthFunc(t.GREATER);break;case w.yb:t.depthFunc(t.NOTEQUAL);break;default:t.depthFunc(t.LEQUAL)}else t.depthFunc(t.LEQUAL);i=e}},setLocked:function(t){e=t},setClear:function(e){r!==e&&(t.clearDepth(e),r=e)},reset:function(){e=!1,n=null,i=null,r=null}}},o=new function(){let e=!1,n=null,i=null,r=null,s=null,o=null,a=null,l=null,c=null;return{setTest:function(n){e||(n?z(t.STENCIL_TEST):U(t.STENCIL_TEST))},setMask:function(i){n===i||e||(t.stencilMask(i),n=i)},setFunc:function(e,n,o){i===e&&r===n&&s===o||(t.stencilFunc(e,n,o),i=e,r=n,s=o)},setOp:function(e,n,i){o===e&&a===n&&l===i||(t.stencilOp(e,n,i),o=e,a=n,l=i)},setLocked:function(t){e=t},setClear:function(e){c!==e&&(t.clearStencil(e),c=e)},reset:function(){e=!1,n=null,i=null,r=null,s=null,o=null,a=null,l=null,c=null}}};let a={},l=null,c={},u=null,h=!1,d=null,p=null,m=null,f=null,g=null,v=null,y=null,x=!1,b=null,T=null,A=null,E=null,M=null;const S=t.getParameter(t.MAX_COMBINED_TEXTURE_IMAGE_UNITS);let C=!1,N=0;const L=t.getParameter(t.VERSION);-1!==L.indexOf(\\\\\\\"WebGL\\\\\\\")?(N=parseFloat(/^WebGL (\\\\d)/.exec(L)[1]),C=N>=1):-1!==L.indexOf(\\\\\\\"OpenGL ES\\\\\\\")&&(N=parseFloat(/^OpenGL ES (\\\\d)/.exec(L)[1]),C=N>=2);let O=null,R={};const P=t.getParameter(t.SCISSOR_BOX),I=t.getParameter(t.VIEWPORT),F=(new _.a).fromArray(P),D=(new _.a).fromArray(I);function k(e,n,i){const r=new Uint8Array(4),s=t.createTexture();t.bindTexture(e,s),t.texParameteri(e,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(e,t.TEXTURE_MAG_FILTER,t.NEAREST);for(let e=0;e<i;e++)t.texImage2D(n+e,0,t.RGBA,1,1,0,t.RGBA,t.UNSIGNED_BYTE,r);return s}const B={};function z(e){!0!==a[e]&&(t.enable(e),a[e]=!0)}function U(e){!1!==a[e]&&(t.disable(e),a[e]=!1)}B[t.TEXTURE_2D]=k(t.TEXTURE_2D,t.TEXTURE_2D,1),B[t.TEXTURE_CUBE_MAP]=k(t.TEXTURE_CUBE_MAP,t.TEXTURE_CUBE_MAP_POSITIVE_X,6),r.setClear(0,0,0,1),s.setClear(1),o.setClear(0),z(t.DEPTH_TEST),s.setFunc(w.T),j(!1),W(w.s),z(t.CULL_FACE),H(w.ub);const G={[w.b]:t.FUNC_ADD,[w.Rc]:t.FUNC_SUBTRACT,[w.xc]:t.FUNC_REVERSE_SUBTRACT};if(i)G[w.jb]=t.MIN,G[w.ib]=t.MAX;else{const t=e.get(\\\\\\\"EXT_blend_minmax\\\\\\\");null!==t&&(G[w.jb]=t.MIN_EXT,G[w.ib]=t.MAX_EXT)}const V={[w.jd]:t.ZERO,[w.Ab]:t.ONE,[w.Pc]:t.SRC_COLOR,[w.Nc]:t.SRC_ALPHA,[w.Oc]:t.SRC_ALPHA_SATURATE,[w.B]:t.DST_COLOR,[w.A]:t.DST_ALPHA,[w.Eb]:t.ONE_MINUS_SRC_COLOR,[w.Db]:t.ONE_MINUS_SRC_ALPHA,[w.Cb]:t.ONE_MINUS_DST_COLOR,[w.Bb]:t.ONE_MINUS_DST_ALPHA};function H(e,n,i,r,s,o,a,l){if(e!==w.ub){if(!1===h&&(z(t.BLEND),h=!0),e===w.v)s=s||n,o=o||i,a=a||r,n===p&&s===g||(t.blendEquationSeparate(G[n],G[s]),p=n,g=s),i===m&&r===f&&o===v&&a===y||(t.blendFuncSeparate(V[i],V[r],V[o],V[a]),m=i,f=r,v=o,y=a),d=e,x=null;else if(e!==d||l!==x){if(p===w.b&&g===w.b||(t.blendEquation(t.FUNC_ADD),p=w.b,g=w.b),l)switch(e){case w.xb:t.blendFuncSeparate(t.ONE,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA);break;case w.e:t.blendFunc(t.ONE,t.ONE);break;case w.Sc:t.blendFuncSeparate(t.ZERO,t.ZERO,t.ONE_MINUS_SRC_COLOR,t.ONE_MINUS_SRC_ALPHA);break;case w.mb:t.blendFuncSeparate(t.ZERO,t.SRC_COLOR,t.ZERO,t.SRC_ALPHA);break;default:console.error(\\\\\\\"THREE.WebGLState: Invalid blending: \\\\\\\",e)}else switch(e){case w.xb:t.blendFuncSeparate(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA);break;case w.e:t.blendFunc(t.SRC_ALPHA,t.ONE);break;case w.Sc:t.blendFunc(t.ZERO,t.ONE_MINUS_SRC_COLOR);break;case w.mb:t.blendFunc(t.ZERO,t.SRC_COLOR);break;default:console.error(\\\\\\\"THREE.WebGLState: Invalid blending: \\\\\\\",e)}m=null,f=null,v=null,y=null,d=e,x=l}}else!0===h&&(U(t.BLEND),h=!1)}function j(e){b!==e&&(e?t.frontFace(t.CW):t.frontFace(t.CCW),b=e)}function W(e){e!==w.u?(z(t.CULL_FACE),e!==T&&(e===w.s?t.cullFace(t.BACK):e===w.t?t.cullFace(t.FRONT):t.cullFace(t.FRONT_AND_BACK))):U(t.CULL_FACE),T=e}function q(e,n,i){e?(z(t.POLYGON_OFFSET_FILL),E===n&&M===i||(t.polygonOffset(n,i),E=n,M=i)):U(t.POLYGON_OFFSET_FILL)}function X(e){void 0===e&&(e=t.TEXTURE0+S-1),O!==e&&(t.activeTexture(e),O=e)}return{buffers:{color:r,depth:s,stencil:o},enable:z,disable:U,bindFramebuffer:function(e,n){return null===n&&null!==l&&(n=l),c[e]!==n&&(t.bindFramebuffer(e,n),c[e]=n,i&&(e===t.DRAW_FRAMEBUFFER&&(c[t.FRAMEBUFFER]=n),e===t.FRAMEBUFFER&&(c[t.DRAW_FRAMEBUFFER]=n)),!0)},bindXRFramebuffer:function(e){e!==l&&(t.bindFramebuffer(t.FRAMEBUFFER,e),l=e)},useProgram:function(e){return u!==e&&(t.useProgram(e),u=e,!0)},setBlending:H,setMaterial:function(e,n){e.side===w.z?U(t.CULL_FACE):z(t.CULL_FACE);let i=e.side===w.i;n&&(i=!i),j(i),e.blending===w.xb&&!1===e.transparent?H(w.ub):H(e.blending,e.blendEquation,e.blendSrc,e.blendDst,e.blendEquationAlpha,e.blendSrcAlpha,e.blendDstAlpha,e.premultipliedAlpha),s.setFunc(e.depthFunc),s.setTest(e.depthTest),s.setMask(e.depthWrite),r.setMask(e.colorWrite);const a=e.stencilWrite;o.setTest(a),a&&(o.setMask(e.stencilWriteMask),o.setFunc(e.stencilFunc,e.stencilRef,e.stencilFuncMask),o.setOp(e.stencilFail,e.stencilZFail,e.stencilZPass)),q(e.polygonOffset,e.polygonOffsetFactor,e.polygonOffsetUnits),!0===e.alphaToCoverage?z(t.SAMPLE_ALPHA_TO_COVERAGE):U(t.SAMPLE_ALPHA_TO_COVERAGE)},setFlipSided:j,setCullFace:W,setLineWidth:function(e){e!==A&&(C&&t.lineWidth(e),A=e)},setPolygonOffset:q,setScissorTest:function(e){e?z(t.SCISSOR_TEST):U(t.SCISSOR_TEST)},activeTexture:X,bindTexture:function(e,n){null===O&&X();let i=R[O];void 0===i&&(i={type:void 0,texture:void 0},R[O]=i),i.type===e&&i.texture===n||(t.bindTexture(e,n||B[e]),i.type=e,i.texture=n)},unbindTexture:function(){const e=R[O];void 0!==e&&void 0!==e.type&&(t.bindTexture(e.type,null),e.type=void 0,e.texture=void 0)},compressedTexImage2D:function(){try{t.compressedTexImage2D.apply(t,arguments)}catch(t){console.error(\\\\\\\"THREE.WebGLState:\\\\\\\",t)}},texImage2D:function(){try{t.texImage2D.apply(t,arguments)}catch(t){console.error(\\\\\\\"THREE.WebGLState:\\\\\\\",t)}},texImage3D:function(){try{t.texImage3D.apply(t,arguments)}catch(t){console.error(\\\\\\\"THREE.WebGLState:\\\\\\\",t)}},scissor:function(e){!1===F.equals(e)&&(t.scissor(e.x,e.y,e.z,e.w),F.copy(e))},viewport:function(e){!1===D.equals(e)&&(t.viewport(e.x,e.y,e.z,e.w),D.copy(e))},reset:function(){t.disable(t.BLEND),t.disable(t.CULL_FACE),t.disable(t.DEPTH_TEST),t.disable(t.POLYGON_OFFSET_FILL),t.disable(t.SCISSOR_TEST),t.disable(t.STENCIL_TEST),t.disable(t.SAMPLE_ALPHA_TO_COVERAGE),t.blendEquation(t.FUNC_ADD),t.blendFunc(t.ONE,t.ZERO),t.blendFuncSeparate(t.ONE,t.ZERO,t.ONE,t.ZERO),t.colorMask(!0,!0,!0,!0),t.clearColor(0,0,0,0),t.depthMask(!0),t.depthFunc(t.LESS),t.clearDepth(1),t.stencilMask(4294967295),t.stencilFunc(t.ALWAYS,0,4294967295),t.stencilOp(t.KEEP,t.KEEP,t.KEEP),t.clearStencil(0),t.cullFace(t.BACK),t.frontFace(t.CCW),t.polygonOffset(0,0),t.activeTexture(t.TEXTURE0),t.bindFramebuffer(t.FRAMEBUFFER,null),!0===i&&(t.bindFramebuffer(t.DRAW_FRAMEBUFFER,null),t.bindFramebuffer(t.READ_FRAMEBUFFER,null)),t.useProgram(null),t.lineWidth(1),t.scissor(0,0,t.canvas.width,t.canvas.height),t.viewport(0,0,t.canvas.width,t.canvas.height),a={},O=null,R={},l=null,c={},u=null,h=!1,d=null,p=null,m=null,f=null,g=null,v=null,y=null,x=!1,b=null,T=null,A=null,E=null,M=null,F.set(0,0,t.canvas.width,t.canvas.height),D.set(0,0,t.canvas.width,t.canvas.height),r.reset(),s.reset(),o.reset()}}}var Ln=n(3);function On(t,e,n,i,r,s,o){const a=r.isWebGL2,l=r.maxTextures,c=r.maxCubemapSize,u=r.maxTextureSize,h=r.maxSamples,d=new WeakMap;let p,_=!1;try{_=\\\\\\\"undefined\\\\\\\"!=typeof OffscreenCanvas&&null!==new OffscreenCanvas(1,1).getContext(\\\\\\\"2d\\\\\\\")}catch(t){}function m(t,e){return _?new OffscreenCanvas(t,e):Object(Pt.b)(\\\\\\\"canvas\\\\\\\")}function f(t,e,n,i){let r=1;if((t.width>i||t.height>i)&&(r=i/Math.max(t.width,t.height)),r<1||!0===e){if(\\\\\\\"undefined\\\\\\\"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||\\\\\\\"undefined\\\\\\\"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||\\\\\\\"undefined\\\\\\\"!=typeof ImageBitmap&&t instanceof ImageBitmap){const i=e?Ln.g:Math.floor,s=i(r*t.width),o=i(r*t.height);void 0===p&&(p=m(s,o));const a=n?m(s,o):p;a.width=s,a.height=o;return a.getContext(\\\\\\\"2d\\\\\\\").drawImage(t,0,0,s,o),console.warn(\\\\\\\"THREE.WebGLRenderer: Texture has been resized from (\\\\\\\"+t.width+\\\\\\\"x\\\\\\\"+t.height+\\\\\\\") to (\\\\\\\"+s+\\\\\\\"x\\\\\\\"+o+\\\\\\\").\\\\\\\"),a}return\\\\\\\"data\\\\\\\"in t&&console.warn(\\\\\\\"THREE.WebGLRenderer: Image in DataTexture is too big (\\\\\\\"+t.width+\\\\\\\"x\\\\\\\"+t.height+\\\\\\\").\\\\\\\"),t}return t}function g(t){return Ln.i(t.width)&&Ln.i(t.height)}function v(t,e){return t.generateMipmaps&&e&&t.minFilter!==w.ob&&t.minFilter!==w.V}function y(e,n,r,s,o=1){t.generateMipmap(e);i.get(n).__maxMipLevel=Math.log2(Math.max(r,s,o))}function x(n,i,r,s){if(!1===a)return i;if(null!==n){if(void 0!==t[n])return t[n];console.warn(\\\\\\\"THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '\\\\\\\"+n+\\\\\\\"'\\\\\\\")}let o=i;return i===t.RED&&(r===t.FLOAT&&(o=t.R32F),r===t.HALF_FLOAT&&(o=t.R16F),r===t.UNSIGNED_BYTE&&(o=t.R8)),i===t.RGB&&(r===t.FLOAT&&(o=t.RGB32F),r===t.HALF_FLOAT&&(o=t.RGB16F),r===t.UNSIGNED_BYTE&&(o=t.RGB8)),i===t.RGBA&&(r===t.FLOAT&&(o=t.RGBA32F),r===t.HALF_FLOAT&&(o=t.RGBA16F),r===t.UNSIGNED_BYTE&&(o=s===w.ld?t.SRGB8_ALPHA8:t.RGBA8)),o!==t.R16F&&o!==t.R32F&&o!==t.RGBA16F&&o!==t.RGBA32F||e.get(\\\\\\\"EXT_color_buffer_float\\\\\\\"),o}function b(e){return e===w.ob||e===w.sb||e===w.rb?t.NEAREST:t.LINEAR}function T(e){const n=e.target;n.removeEventListener(\\\\\\\"dispose\\\\\\\",T),function(e){const n=i.get(e);if(void 0===n.__webglInit)return;t.deleteTexture(n.__webglTexture),i.remove(e)}(n),n.isVideoTexture&&d.delete(n),o.memory.textures--}function A(e){const n=e.target;n.removeEventListener(\\\\\\\"dispose\\\\\\\",A),function(e){const n=e.texture,r=i.get(e),s=i.get(n);if(!e)return;void 0!==s.__webglTexture&&(t.deleteTexture(s.__webglTexture),o.memory.textures--);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(let e=0;e<6;e++)t.deleteFramebuffer(r.__webglFramebuffer[e]),r.__webglDepthbuffer&&t.deleteRenderbuffer(r.__webglDepthbuffer[e]);else t.deleteFramebuffer(r.__webglFramebuffer),r.__webglDepthbuffer&&t.deleteRenderbuffer(r.__webglDepthbuffer),r.__webglMultisampledFramebuffer&&t.deleteFramebuffer(r.__webglMultisampledFramebuffer),r.__webglColorRenderbuffer&&t.deleteRenderbuffer(r.__webglColorRenderbuffer),r.__webglDepthRenderbuffer&&t.deleteRenderbuffer(r.__webglDepthRenderbuffer);if(e.isWebGLMultipleRenderTargets)for(let e=0,r=n.length;e<r;e++){const r=i.get(n[e]);r.__webglTexture&&(t.deleteTexture(r.__webglTexture),o.memory.textures--),i.remove(n[e])}i.remove(n),i.remove(e)}(n)}let E=0;function M(e,r){const s=i.get(e);if(e.isVideoTexture&&function(t){const e=o.render.frame;d.get(t)!==e&&(d.set(t,e),t.update())}(e),e.version>0&&s.__version!==e.version){const t=e.image;if(void 0===t)console.warn(\\\\\\\"THREE.WebGLRenderer: Texture marked for update but image is undefined\\\\\\\");else{if(!1!==t.complete)return void R(s,e,r);console.warn(\\\\\\\"THREE.WebGLRenderer: Texture marked for update but image is incomplete\\\\\\\")}}n.activeTexture(t.TEXTURE0+r),n.bindTexture(t.TEXTURE_2D,s.__webglTexture)}function S(e,r){const o=i.get(e);e.version>0&&o.__version!==e.version?function(e,i,r){if(6!==i.image.length)return;O(e,i),n.activeTexture(t.TEXTURE0+r),n.bindTexture(t.TEXTURE_CUBE_MAP,e.__webglTexture),t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,i.flipY),t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,i.premultiplyAlpha),t.pixelStorei(t.UNPACK_ALIGNMENT,i.unpackAlignment),t.pixelStorei(t.UNPACK_COLORSPACE_CONVERSION_WEBGL,t.NONE);const o=i&&(i.isCompressedTexture||i.image[0].isCompressedTexture),l=i.image[0]&&i.image[0].isDataTexture,u=[];for(let t=0;t<6;t++)u[t]=o||l?l?i.image[t].image:i.image[t]:f(i.image[t],!1,!0,c);const h=u[0],d=g(h)||a,p=s.convert(i.format),_=s.convert(i.type),m=x(i.internalFormat,p,_,i.encoding);let b;if(L(t.TEXTURE_CUBE_MAP,i,d),o){for(let e=0;e<6;e++){b=u[e].mipmaps;for(let r=0;r<b.length;r++){const s=b[r];i.format!==w.Ib&&i.format!==w.ic?null!==p?n.compressedTexImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+e,r,m,s.width,s.height,0,s.data):console.warn(\\\\\\\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()\\\\\\\"):n.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+e,r,m,s.width,s.height,0,p,_,s.data)}}e.__maxMipLevel=b.length-1}else{b=i.mipmaps;for(let e=0;e<6;e++)if(l){n.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+e,0,m,u[e].width,u[e].height,0,p,_,u[e].data);for(let i=0;i<b.length;i++){const r=b[i].image[e].image;n.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+e,i+1,m,r.width,r.height,0,p,_,r.data)}}else{n.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+e,0,m,p,_,u[e]);for(let i=0;i<b.length;i++){const r=b[i];n.texImage2D(t.TEXTURE_CUBE_MAP_POSITIVE_X+e,i+1,m,p,_,r.image[e])}}e.__maxMipLevel=b.length}v(i,d)&&y(t.TEXTURE_CUBE_MAP,i,h.width,h.height);e.__version=i.version,i.onUpdate&&i.onUpdate(i)}(o,e,r):(n.activeTexture(t.TEXTURE0+r),n.bindTexture(t.TEXTURE_CUBE_MAP,o.__webglTexture))}const C={[w.wc]:t.REPEAT,[w.n]:t.CLAMP_TO_EDGE,[w.kb]:t.MIRRORED_REPEAT},N={[w.ob]:t.NEAREST,[w.sb]:t.NEAREST_MIPMAP_NEAREST,[w.rb]:t.NEAREST_MIPMAP_LINEAR,[w.V]:t.LINEAR,[w.Z]:t.LINEAR_MIPMAP_NEAREST,[w.Y]:t.LINEAR_MIPMAP_LINEAR};function L(n,s,o){if(o?(t.texParameteri(n,t.TEXTURE_WRAP_S,C[s.wrapS]),t.texParameteri(n,t.TEXTURE_WRAP_T,C[s.wrapT]),n!==t.TEXTURE_3D&&n!==t.TEXTURE_2D_ARRAY||t.texParameteri(n,t.TEXTURE_WRAP_R,C[s.wrapR]),t.texParameteri(n,t.TEXTURE_MAG_FILTER,N[s.magFilter]),t.texParameteri(n,t.TEXTURE_MIN_FILTER,N[s.minFilter])):(t.texParameteri(n,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(n,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),n!==t.TEXTURE_3D&&n!==t.TEXTURE_2D_ARRAY||t.texParameteri(n,t.TEXTURE_WRAP_R,t.CLAMP_TO_EDGE),s.wrapS===w.n&&s.wrapT===w.n||console.warn(\\\\\\\"THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.\\\\\\\"),t.texParameteri(n,t.TEXTURE_MAG_FILTER,b(s.magFilter)),t.texParameteri(n,t.TEXTURE_MIN_FILTER,b(s.minFilter)),s.minFilter!==w.ob&&s.minFilter!==w.V&&console.warn(\\\\\\\"THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.\\\\\\\")),!0===e.has(\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\")){const o=e.get(\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\");if(s.type===w.G&&!1===e.has(\\\\\\\"OES_texture_float_linear\\\\\\\"))return;if(!1===a&&s.type===w.M&&!1===e.has(\\\\\\\"OES_texture_half_float_linear\\\\\\\"))return;(s.anisotropy>1||i.get(s).__currentAnisotropy)&&(t.texParameterf(n,o.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(s.anisotropy,r.getMaxAnisotropy())),i.get(s).__currentAnisotropy=s.anisotropy)}}function O(e,n){void 0===e.__webglInit&&(e.__webglInit=!0,n.addEventListener(\\\\\\\"dispose\\\\\\\",T),e.__webglTexture=t.createTexture(),o.memory.textures++)}function R(e,i,r){let o=t.TEXTURE_2D;i.isDataTexture2DArray&&(o=t.TEXTURE_2D_ARRAY),i.isDataTexture3D&&(o=t.TEXTURE_3D),O(e,i),n.activeTexture(t.TEXTURE0+r),n.bindTexture(o,e.__webglTexture),t.pixelStorei(t.UNPACK_FLIP_Y_WEBGL,i.flipY),t.pixelStorei(t.UNPACK_PREMULTIPLY_ALPHA_WEBGL,i.premultiplyAlpha),t.pixelStorei(t.UNPACK_ALIGNMENT,i.unpackAlignment),t.pixelStorei(t.UNPACK_COLORSPACE_CONVERSION_WEBGL,t.NONE);const l=function(t){return!a&&(t.wrapS!==w.n||t.wrapT!==w.n||t.minFilter!==w.ob&&t.minFilter!==w.V)}(i)&&!1===g(i.image),c=f(i.image,l,!1,u),h=g(c)||a,d=s.convert(i.format);let p,_=s.convert(i.type),m=x(i.internalFormat,d,_,i.encoding);L(o,i,h);const b=i.mipmaps;if(i.isDepthTexture)m=t.DEPTH_COMPONENT,a?m=i.type===w.G?t.DEPTH_COMPONENT32F:i.type===w.bd?t.DEPTH_COMPONENT24:i.type===w.ad?t.DEPTH24_STENCIL8:t.DEPTH_COMPONENT16:i.type===w.G&&console.error(\\\\\\\"WebGLRenderer: Floating point depth texture requires WebGL2.\\\\\\\"),i.format===w.x&&m===t.DEPTH_COMPONENT&&i.type!==w.fd&&i.type!==w.bd&&(console.warn(\\\\\\\"THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.\\\\\\\"),i.type=w.fd,_=s.convert(i.type)),i.format===w.y&&m===t.DEPTH_COMPONENT&&(m=t.DEPTH_STENCIL,i.type!==w.ad&&(console.warn(\\\\\\\"THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.\\\\\\\"),i.type=w.ad,_=s.convert(i.type))),n.texImage2D(t.TEXTURE_2D,0,m,c.width,c.height,0,d,_,null);else if(i.isDataTexture)if(b.length>0&&h){for(let e=0,i=b.length;e<i;e++)p=b[e],n.texImage2D(t.TEXTURE_2D,e,m,p.width,p.height,0,d,_,p.data);i.generateMipmaps=!1,e.__maxMipLevel=b.length-1}else n.texImage2D(t.TEXTURE_2D,0,m,c.width,c.height,0,d,_,c.data),e.__maxMipLevel=0;else if(i.isCompressedTexture){for(let e=0,r=b.length;e<r;e++)p=b[e],i.format!==w.Ib&&i.format!==w.ic?null!==d?n.compressedTexImage2D(t.TEXTURE_2D,e,m,p.width,p.height,0,p.data):console.warn(\\\\\\\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()\\\\\\\"):n.texImage2D(t.TEXTURE_2D,e,m,p.width,p.height,0,d,_,p.data);e.__maxMipLevel=b.length-1}else if(i.isDataTexture2DArray)n.texImage3D(t.TEXTURE_2D_ARRAY,0,m,c.width,c.height,c.depth,0,d,_,c.data),e.__maxMipLevel=0;else if(i.isDataTexture3D)n.texImage3D(t.TEXTURE_3D,0,m,c.width,c.height,c.depth,0,d,_,c.data),e.__maxMipLevel=0;else if(b.length>0&&h){for(let e=0,i=b.length;e<i;e++)p=b[e],n.texImage2D(t.TEXTURE_2D,e,m,d,_,p);i.generateMipmaps=!1,e.__maxMipLevel=b.length-1}else n.texImage2D(t.TEXTURE_2D,0,m,d,_,c),e.__maxMipLevel=0;v(i,h)&&y(o,i,c.width,c.height),e.__version=i.version,i.onUpdate&&i.onUpdate(i)}function P(e,r,o,a,l){const c=s.convert(o.format),u=s.convert(o.type),h=x(o.internalFormat,c,u,o.encoding);l===t.TEXTURE_3D||l===t.TEXTURE_2D_ARRAY?n.texImage3D(l,0,h,r.width,r.height,r.depth,0,c,u,null):n.texImage2D(l,0,h,r.width,r.height,0,c,u,null),n.bindFramebuffer(t.FRAMEBUFFER,e),t.framebufferTexture2D(t.FRAMEBUFFER,a,l,i.get(o).__webglTexture,0),n.bindFramebuffer(t.FRAMEBUFFER,null)}function I(e,n,i){if(t.bindRenderbuffer(t.RENDERBUFFER,e),n.depthBuffer&&!n.stencilBuffer){let r=t.DEPTH_COMPONENT16;if(i){const e=n.depthTexture;e&&e.isDepthTexture&&(e.type===w.G?r=t.DEPTH_COMPONENT32F:e.type===w.bd&&(r=t.DEPTH_COMPONENT24));const i=D(n);t.renderbufferStorageMultisample(t.RENDERBUFFER,i,r,n.width,n.height)}else t.renderbufferStorage(t.RENDERBUFFER,r,n.width,n.height);t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,e)}else if(n.depthBuffer&&n.stencilBuffer){if(i){const e=D(n);t.renderbufferStorageMultisample(t.RENDERBUFFER,e,t.DEPTH24_STENCIL8,n.width,n.height)}else t.renderbufferStorage(t.RENDERBUFFER,t.DEPTH_STENCIL,n.width,n.height);t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.RENDERBUFFER,e)}else{const e=!0===n.isWebGLMultipleRenderTargets?n.texture[0]:n.texture,r=s.convert(e.format),o=s.convert(e.type),a=x(e.internalFormat,r,o,e.encoding);if(i){const e=D(n);t.renderbufferStorageMultisample(t.RENDERBUFFER,e,a,n.width,n.height)}else t.renderbufferStorage(t.RENDERBUFFER,a,n.width,n.height)}t.bindRenderbuffer(t.RENDERBUFFER,null)}function F(e){const r=i.get(e),s=!0===e.isWebGLCubeRenderTarget;if(e.depthTexture){if(s)throw new Error(\\\\\\\"target.depthTexture not supported in Cube render targets\\\\\\\");!function(e,r){if(r&&r.isWebGLCubeRenderTarget)throw new Error(\\\\\\\"Depth Texture with cube render targets is not supported\\\\\\\");if(n.bindFramebuffer(t.FRAMEBUFFER,e),!r.depthTexture||!r.depthTexture.isDepthTexture)throw new Error(\\\\\\\"renderTarget.depthTexture must be an instance of THREE.DepthTexture\\\\\\\");i.get(r.depthTexture).__webglTexture&&r.depthTexture.image.width===r.width&&r.depthTexture.image.height===r.height||(r.depthTexture.image.width=r.width,r.depthTexture.image.height=r.height,r.depthTexture.needsUpdate=!0),M(r.depthTexture,0);const s=i.get(r.depthTexture).__webglTexture;if(r.depthTexture.format===w.x)t.framebufferTexture2D(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.TEXTURE_2D,s,0);else{if(r.depthTexture.format!==w.y)throw new Error(\\\\\\\"Unknown depthTexture format\\\\\\\");t.framebufferTexture2D(t.FRAMEBUFFER,t.DEPTH_STENCIL_ATTACHMENT,t.TEXTURE_2D,s,0)}}(r.__webglFramebuffer,e)}else if(s){r.__webglDepthbuffer=[];for(let i=0;i<6;i++)n.bindFramebuffer(t.FRAMEBUFFER,r.__webglFramebuffer[i]),r.__webglDepthbuffer[i]=t.createRenderbuffer(),I(r.__webglDepthbuffer[i],e,!1)}else n.bindFramebuffer(t.FRAMEBUFFER,r.__webglFramebuffer),r.__webglDepthbuffer=t.createRenderbuffer(),I(r.__webglDepthbuffer,e,!1);n.bindFramebuffer(t.FRAMEBUFFER,null)}function D(t){return a&&t.isWebGLMultisampleRenderTarget?Math.min(h,t.samples):0}let k=!1,B=!1;this.allocateTextureUnit=function(){const t=E;return t>=l&&console.warn(\\\\\\\"THREE.WebGLTextures: Trying to use \\\\\\\"+t+\\\\\\\" texture units while this GPU supports only \\\\\\\"+l),E+=1,t},this.resetTextureUnits=function(){E=0},this.setTexture2D=M,this.setTexture2DArray=function(e,r){const s=i.get(e);e.version>0&&s.__version!==e.version?R(s,e,r):(n.activeTexture(t.TEXTURE0+r),n.bindTexture(t.TEXTURE_2D_ARRAY,s.__webglTexture))},this.setTexture3D=function(e,r){const s=i.get(e);e.version>0&&s.__version!==e.version?R(s,e,r):(n.activeTexture(t.TEXTURE0+r),n.bindTexture(t.TEXTURE_3D,s.__webglTexture))},this.setTextureCube=S,this.setupRenderTarget=function(e){const l=e.texture,c=i.get(e),u=i.get(l);e.addEventListener(\\\\\\\"dispose\\\\\\\",A),!0!==e.isWebGLMultipleRenderTargets&&(u.__webglTexture=t.createTexture(),u.__version=l.version,o.memory.textures++);const h=!0===e.isWebGLCubeRenderTarget,d=!0===e.isWebGLMultipleRenderTargets,p=!0===e.isWebGLMultisampleRenderTarget,_=l.isDataTexture3D||l.isDataTexture2DArray,m=g(e)||a;if(!a||l.format!==w.ic||l.type!==w.G&&l.type!==w.M||(l.format=w.Ib,console.warn(\\\\\\\"THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.\\\\\\\")),h){c.__webglFramebuffer=[];for(let e=0;e<6;e++)c.__webglFramebuffer[e]=t.createFramebuffer()}else if(c.__webglFramebuffer=t.createFramebuffer(),d)if(r.drawBuffers){const n=e.texture;for(let e=0,r=n.length;e<r;e++){const r=i.get(n[e]);void 0===r.__webglTexture&&(r.__webglTexture=t.createTexture(),o.memory.textures++)}}else console.warn(\\\\\\\"THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.\\\\\\\");else if(p)if(a){c.__webglMultisampledFramebuffer=t.createFramebuffer(),c.__webglColorRenderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(t.RENDERBUFFER,c.__webglColorRenderbuffer);const i=s.convert(l.format),r=s.convert(l.type),o=x(l.internalFormat,i,r,l.encoding),a=D(e);t.renderbufferStorageMultisample(t.RENDERBUFFER,a,o,e.width,e.height),n.bindFramebuffer(t.FRAMEBUFFER,c.__webglMultisampledFramebuffer),t.framebufferRenderbuffer(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.RENDERBUFFER,c.__webglColorRenderbuffer),t.bindRenderbuffer(t.RENDERBUFFER,null),e.depthBuffer&&(c.__webglDepthRenderbuffer=t.createRenderbuffer(),I(c.__webglDepthRenderbuffer,e,!0)),n.bindFramebuffer(t.FRAMEBUFFER,null)}else console.warn(\\\\\\\"THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.\\\\\\\");if(h){n.bindTexture(t.TEXTURE_CUBE_MAP,u.__webglTexture),L(t.TEXTURE_CUBE_MAP,l,m);for(let n=0;n<6;n++)P(c.__webglFramebuffer[n],e,l,t.COLOR_ATTACHMENT0,t.TEXTURE_CUBE_MAP_POSITIVE_X+n);v(l,m)&&y(t.TEXTURE_CUBE_MAP,l,e.width,e.height),n.unbindTexture()}else if(d){const r=e.texture;for(let s=0,o=r.length;s<o;s++){const o=r[s],a=i.get(o);n.bindTexture(t.TEXTURE_2D,a.__webglTexture),L(t.TEXTURE_2D,o,m),P(c.__webglFramebuffer,e,o,t.COLOR_ATTACHMENT0+s,t.TEXTURE_2D),v(o,m)&&y(t.TEXTURE_2D,o,e.width,e.height)}n.unbindTexture()}else{let i=t.TEXTURE_2D;if(_)if(a){i=l.isDataTexture3D?t.TEXTURE_3D:t.TEXTURE_2D_ARRAY}else console.warn(\\\\\\\"THREE.DataTexture3D and THREE.DataTexture2DArray only supported with WebGL2.\\\\\\\");n.bindTexture(i,u.__webglTexture),L(i,l,m),P(c.__webglFramebuffer,e,l,t.COLOR_ATTACHMENT0,i),v(l,m)&&y(i,l,e.width,e.height,e.depth),n.unbindTexture()}e.depthBuffer&&F(e)},this.updateRenderTargetMipmap=function(e){const r=g(e)||a,s=!0===e.isWebGLMultipleRenderTargets?e.texture:[e.texture];for(let o=0,a=s.length;o<a;o++){const a=s[o];if(v(a,r)){const r=e.isWebGLCubeRenderTarget?t.TEXTURE_CUBE_MAP:t.TEXTURE_2D,s=i.get(a).__webglTexture;n.bindTexture(r,s),y(r,a,e.width,e.height),n.unbindTexture()}}},this.updateMultisampleRenderTarget=function(e){if(e.isWebGLMultisampleRenderTarget)if(a){const r=e.width,s=e.height;let o=t.COLOR_BUFFER_BIT;e.depthBuffer&&(o|=t.DEPTH_BUFFER_BIT),e.stencilBuffer&&(o|=t.STENCIL_BUFFER_BIT);const a=i.get(e);n.bindFramebuffer(t.READ_FRAMEBUFFER,a.__webglMultisampledFramebuffer),n.bindFramebuffer(t.DRAW_FRAMEBUFFER,a.__webglFramebuffer),t.blitFramebuffer(0,0,r,s,0,0,r,s,o,t.NEAREST),n.bindFramebuffer(t.READ_FRAMEBUFFER,null),n.bindFramebuffer(t.DRAW_FRAMEBUFFER,a.__webglMultisampledFramebuffer)}else console.warn(\\\\\\\"THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.\\\\\\\")},this.safeSetTexture2D=function(t,e){t&&t.isWebGLRenderTarget&&(!1===k&&(console.warn(\\\\\\\"THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead.\\\\\\\"),k=!0),t=t.texture),M(t,e)},this.safeSetTextureCube=function(t,e){t&&t.isWebGLCubeRenderTarget&&(!1===B&&(console.warn(\\\\\\\"THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead.\\\\\\\"),B=!0),t=t.texture),S(t,e)}}function Rn(t,e,n){const i=n.isWebGL2;return{convert:function(n){let r;if(n===w.Zc)return t.UNSIGNED_BYTE;if(n===w.cd)return t.UNSIGNED_SHORT_4_4_4_4;if(n===w.dd)return t.UNSIGNED_SHORT_5_5_5_1;if(n===w.ed)return t.UNSIGNED_SHORT_5_6_5;if(n===w.l)return t.BYTE;if(n===w.Mc)return t.SHORT;if(n===w.fd)return t.UNSIGNED_SHORT;if(n===w.N)return t.INT;if(n===w.bd)return t.UNSIGNED_INT;if(n===w.G)return t.FLOAT;if(n===w.M)return i?t.HALF_FLOAT:(r=e.get(\\\\\\\"OES_texture_half_float\\\\\\\"),null!==r?r.HALF_FLOAT_OES:null);if(n===w.f)return t.ALPHA;if(n===w.ic)return t.RGB;if(n===w.Ib)return t.RGBA;if(n===w.gb)return t.LUMINANCE;if(n===w.fb)return t.LUMINANCE_ALPHA;if(n===w.x)return t.DEPTH_COMPONENT;if(n===w.y)return t.DEPTH_STENCIL;if(n===w.tc)return t.RED;if(n===w.uc)return t.RED_INTEGER;if(n===w.rc)return t.RG;if(n===w.sc)return t.RG_INTEGER;if(n===w.jc)return t.RGB_INTEGER;if(n===w.Jb)return t.RGBA_INTEGER;if(n===w.qc||n===w.cc||n===w.dc||n===w.ec){if(r=e.get(\\\\\\\"WEBGL_compressed_texture_s3tc\\\\\\\"),null===r)return null;if(n===w.qc)return r.COMPRESSED_RGB_S3TC_DXT1_EXT;if(n===w.cc)return r.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(n===w.dc)return r.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(n===w.ec)return r.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(n===w.pc||n===w.oc||n===w.bc||n===w.ac){if(r=e.get(\\\\\\\"WEBGL_compressed_texture_pvrtc\\\\\\\"),null===r)return null;if(n===w.pc)return r.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(n===w.oc)return r.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(n===w.bc)return r.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(n===w.ac)return r.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(n===w.mc)return r=e.get(\\\\\\\"WEBGL_compressed_texture_etc1\\\\\\\"),null!==r?r.COMPRESSED_RGB_ETC1_WEBGL:null;if((n===w.nc||n===w.Zb)&&(r=e.get(\\\\\\\"WEBGL_compressed_texture_etc\\\\\\\"),null!==r)){if(n===w.nc)return r.COMPRESSED_RGB8_ETC2;if(n===w.Zb)return r.COMPRESSED_RGBA8_ETC2_EAC}return n===w.Qb||n===w.Rb||n===w.Sb||n===w.Tb||n===w.Ub||n===w.Vb||n===w.Wb||n===w.Xb||n===w.Lb||n===w.Mb||n===w.Nb||n===w.Kb||n===w.Ob||n===w.Pb||n===w.Ec||n===w.Fc||n===w.Gc||n===w.Hc||n===w.Ic||n===w.Jc||n===w.Kc||n===w.Lc||n===w.zc||n===w.Ac||n===w.Bc||n===w.yc||n===w.Cc||n===w.Dc?(r=e.get(\\\\\\\"WEBGL_compressed_texture_astc\\\\\\\"),null!==r?n:null):n===w.Yb?(r=e.get(\\\\\\\"EXT_texture_compression_bptc\\\\\\\"),null!==r?n:null):n===w.ad?i?t.UNSIGNED_INT_24_8:(r=e.get(\\\\\\\"WEBGL_depth_texture\\\\\\\"),null!==r?r.UNSIGNED_INT_24_8_WEBGL:null):void 0}}}class Pn extends K.a{constructor(t=[]){super(),this.cameras=t}}Pn.prototype.isArrayCamera=!0;var In=n(22);const Fn={type:\\\\\\\"move\\\\\\\"};class Dn{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return null===this._hand&&(this._hand=new In.a,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 In.a,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new p.a,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new p.a),this._targetRay}getGripSpace(){return null===this._grip&&(this._grip=new In.a,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new p.a,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new p.a),this._grip}dispatchEvent(t){return null!==this._targetRay&&this._targetRay.dispatchEvent(t),null!==this._grip&&this._grip.dispatchEvent(t),null!==this._hand&&this._hand.dispatchEvent(t),this}disconnect(t){return this.dispatchEvent({type:\\\\\\\"disconnected\\\\\\\",data:t}),null!==this._targetRay&&(this._targetRay.visible=!1),null!==this._grip&&(this._grip.visible=!1),null!==this._hand&&(this._hand.visible=!1),this}update(t,e,n){let i=null,r=null,s=null;const o=this._targetRay,a=this._grip,l=this._hand;if(t&&\\\\\\\"visible-blurred\\\\\\\"!==e.session.visibilityState)if(null!==o&&(i=e.getPose(t.targetRaySpace,n),null!==i&&(o.matrix.fromArray(i.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),i.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(i.linearVelocity)):o.hasLinearVelocity=!1,i.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(i.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(Fn))),l&&t.hand){s=!0;for(const i of t.hand.values()){const t=e.getJointPose(i,n);if(void 0===l.joints[i.jointName]){const t=new In.a;t.matrixAutoUpdate=!1,t.visible=!1,l.joints[i.jointName]=t,l.add(t)}const r=l.joints[i.jointName];null!==t&&(r.matrix.fromArray(t.transform.matrix),r.matrix.decompose(r.position,r.rotation,r.scale),r.jointRadius=t.radius),r.visible=null!==t}const i=l.joints[\\\\\\\"index-finger-tip\\\\\\\"],r=l.joints[\\\\\\\"thumb-tip\\\\\\\"],o=i.position.distanceTo(r.position),a=.02,c=.005;l.inputState.pinching&&o>a+c?(l.inputState.pinching=!1,this.dispatchEvent({type:\\\\\\\"pinchend\\\\\\\",handedness:t.handedness,target:this})):!l.inputState.pinching&&o<=a-c&&(l.inputState.pinching=!0,this.dispatchEvent({type:\\\\\\\"pinchstart\\\\\\\",handedness:t.handedness,target:this}))}else null!==a&&t.gripSpace&&(r=e.getPose(t.gripSpace,n),null!==r&&(a.matrix.fromArray(r.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale),r.linearVelocity?(a.hasLinearVelocity=!0,a.linearVelocity.copy(r.linearVelocity)):a.hasLinearVelocity=!1,r.angularVelocity?(a.hasAngularVelocity=!0,a.angularVelocity.copy(r.angularVelocity)):a.hasAngularVelocity=!1));return null!==o&&(o.visible=null!==i),null!==a&&(a.visible=null!==r),null!==l&&(l.visible=null!==s),this}}class kn extends $.a{constructor(t,e){super();const n=this,i=t.state;let r=null,s=1,o=null,a=\\\\\\\"local-floor\\\\\\\",l=null,c=null,u=null,h=null,d=null,m=!1,f=null,g=null,v=null,y=null,x=null,b=null;const w=[],T=new Map,A=new K.a;A.layers.enable(1),A.viewport=new _.a;const M=new K.a;M.layers.enable(2),M.viewport=new _.a;const S=[A,M],C=new Pn;C.layers.enable(1),C.layers.enable(2);let N=null,L=null;function O(t){const e=T.get(t.inputSource);e&&e.dispatchEvent({type:t.type,data:t.inputSource})}function R(){T.forEach((function(t,e){t.disconnect(e)})),T.clear(),N=null,L=null,i.bindXRFramebuffer(null),t.setRenderTarget(t.getRenderTarget()),u&&e.deleteFramebuffer(u),f&&e.deleteFramebuffer(f),g&&e.deleteRenderbuffer(g),v&&e.deleteRenderbuffer(v),u=null,f=null,g=null,v=null,d=null,h=null,c=null,r=null,B.stop(),n.isPresenting=!1,n.dispatchEvent({type:\\\\\\\"sessionend\\\\\\\"})}function P(t){const e=r.inputSources;for(let t=0;t<w.length;t++)T.set(e[t],w[t]);for(let e=0;e<t.removed.length;e++){const n=t.removed[e],i=T.get(n);i&&(i.dispatchEvent({type:\\\\\\\"disconnected\\\\\\\",data:n}),T.delete(n))}for(let e=0;e<t.added.length;e++){const n=t.added[e],i=T.get(n);i&&i.dispatchEvent({type:\\\\\\\"connected\\\\\\\",data:n})}}this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(t){let e=w[t];return void 0===e&&(e=new Dn,w[t]=e),e.getTargetRaySpace()},this.getControllerGrip=function(t){let e=w[t];return void 0===e&&(e=new Dn,w[t]=e),e.getGripSpace()},this.getHand=function(t){let e=w[t];return void 0===e&&(e=new Dn,w[t]=e),e.getHandSpace()},this.setFramebufferScaleFactor=function(t){s=t,!0===n.isPresenting&&console.warn(\\\\\\\"THREE.WebXRManager: Cannot change framebuffer scale while presenting.\\\\\\\")},this.setReferenceSpaceType=function(t){a=t,!0===n.isPresenting&&console.warn(\\\\\\\"THREE.WebXRManager: Cannot change reference space type while presenting.\\\\\\\")},this.getReferenceSpace=function(){return o},this.getBaseLayer=function(){return null!==h?h:d},this.getBinding=function(){return c},this.getFrame=function(){return y},this.getSession=function(){return r},this.setSession=async function(t){if(r=t,null!==r){r.addEventListener(\\\\\\\"select\\\\\\\",O),r.addEventListener(\\\\\\\"selectstart\\\\\\\",O),r.addEventListener(\\\\\\\"selectend\\\\\\\",O),r.addEventListener(\\\\\\\"squeeze\\\\\\\",O),r.addEventListener(\\\\\\\"squeezestart\\\\\\\",O),r.addEventListener(\\\\\\\"squeezeend\\\\\\\",O),r.addEventListener(\\\\\\\"end\\\\\\\",R),r.addEventListener(\\\\\\\"inputsourceschange\\\\\\\",P);const t=e.getContextAttributes();if(!0!==t.xrCompatible&&await e.makeXRCompatible(),void 0===r.renderState.layers){const n={antialias:t.antialias,alpha:t.alpha,depth:t.depth,stencil:t.stencil,framebufferScaleFactor:s};d=new XRWebGLLayer(r,e,n),r.updateRenderState({baseLayer:d})}else if(e instanceof WebGLRenderingContext){const n={antialias:!0,alpha:t.alpha,depth:t.depth,stencil:t.stencil,framebufferScaleFactor:s};d=new XRWebGLLayer(r,e,n),r.updateRenderState({layers:[d]})}else{m=t.antialias;let n=null;t.depth&&(b=e.DEPTH_BUFFER_BIT,t.stencil&&(b|=e.STENCIL_BUFFER_BIT),x=t.stencil?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,n=t.stencil?e.DEPTH24_STENCIL8:e.DEPTH_COMPONENT24);const o={colorFormat:t.alpha?e.RGBA8:e.RGB8,depthFormat:n,scaleFactor:s};c=new XRWebGLBinding(r,e),h=c.createProjectionLayer(o),u=e.createFramebuffer(),r.updateRenderState({layers:[h]}),m&&(f=e.createFramebuffer(),g=e.createRenderbuffer(),e.bindRenderbuffer(e.RENDERBUFFER,g),e.renderbufferStorageMultisample(e.RENDERBUFFER,4,e.RGBA8,h.textureWidth,h.textureHeight),i.bindFramebuffer(e.FRAMEBUFFER,f),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.RENDERBUFFER,g),e.bindRenderbuffer(e.RENDERBUFFER,null),null!==n&&(v=e.createRenderbuffer(),e.bindRenderbuffer(e.RENDERBUFFER,v),e.renderbufferStorageMultisample(e.RENDERBUFFER,4,n,h.textureWidth,h.textureHeight),e.framebufferRenderbuffer(e.FRAMEBUFFER,x,e.RENDERBUFFER,v),e.bindRenderbuffer(e.RENDERBUFFER,null)),i.bindFramebuffer(e.FRAMEBUFFER,null))}o=await r.requestReferenceSpace(a),B.setContext(r),B.start(),n.isPresenting=!0,n.dispatchEvent({type:\\\\\\\"sessionstart\\\\\\\"})}};const I=new p.a,F=new p.a;function D(t,e){null===e?t.matrixWorld.copy(t.matrix):t.matrixWorld.multiplyMatrices(e.matrixWorld,t.matrix),t.matrixWorldInverse.copy(t.matrixWorld).invert()}this.updateCamera=function(t){if(null===r)return;C.near=M.near=A.near=t.near,C.far=M.far=A.far=t.far,N===C.near&&L===C.far||(r.updateRenderState({depthNear:C.near,depthFar:C.far}),N=C.near,L=C.far);const e=t.parent,n=C.cameras;D(C,e);for(let t=0;t<n.length;t++)D(n[t],e);C.matrixWorld.decompose(C.position,C.quaternion,C.scale),t.position.copy(C.position),t.quaternion.copy(C.quaternion),t.scale.copy(C.scale),t.matrix.copy(C.matrix),t.matrixWorld.copy(C.matrixWorld);const i=t.children;for(let t=0,e=i.length;t<e;t++)i[t].updateMatrixWorld(!0);2===n.length?function(t,e,n){I.setFromMatrixPosition(e.matrixWorld),F.setFromMatrixPosition(n.matrixWorld);const i=I.distanceTo(F),r=e.projectionMatrix.elements,s=n.projectionMatrix.elements,o=r[14]/(r[10]-1),a=r[14]/(r[10]+1),l=(r[9]+1)/r[5],c=(r[9]-1)/r[5],u=(r[8]-1)/r[0],h=(s[8]+1)/s[0],d=o*u,p=o*h,_=i/(-u+h),m=_*-u;e.matrixWorld.decompose(t.position,t.quaternion,t.scale),t.translateX(m),t.translateZ(_),t.matrixWorld.compose(t.position,t.quaternion,t.scale),t.matrixWorldInverse.copy(t.matrixWorld).invert();const f=o+_,g=a+_,v=d-m,y=p+(i-m),x=l*a/g*f,b=c*a/g*f;t.projectionMatrix.makePerspective(v,y,x,b,f,g)}(C,A,M):C.projectionMatrix.copy(A.projectionMatrix)},this.getCamera=function(){return C},this.getFoveation=function(){return null!==h?h.fixedFoveation:null!==d?d.fixedFoveation:void 0},this.setFoveation=function(t){null!==h&&(h.fixedFoveation=t),null!==d&&void 0!==d.fixedFoveation&&(d.fixedFoveation=t)};let k=null;const B=new E;B.setAnimationLoop((function(t,n){if(l=n.getViewerPose(o),y=n,null!==l){const t=l.views;null!==d&&i.bindXRFramebuffer(d.framebuffer);let n=!1;t.length!==C.cameras.length&&(C.cameras.length=0,n=!0);for(let r=0;r<t.length;r++){const s=t[r];let o=null;if(null!==d)o=d.getViewport(s);else{const t=c.getViewSubImage(h,s);i.bindXRFramebuffer(u),void 0!==t.depthStencilTexture&&e.framebufferTexture2D(e.FRAMEBUFFER,x,e.TEXTURE_2D,t.depthStencilTexture,0),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t.colorTexture,0),o=t.viewport}const a=S[r];a.matrix.fromArray(s.transform.matrix),a.projectionMatrix.fromArray(s.projectionMatrix),a.viewport.set(o.x,o.y,o.width,o.height),0===r&&C.matrix.copy(a.matrix),!0===n&&C.cameras.push(a)}m&&(i.bindXRFramebuffer(f),null!==b&&e.clear(b))}const s=r.inputSources;for(let t=0;t<w.length;t++){const e=w[t],i=s[t];e.update(i,n,o)}if(k&&k(t,n),m){const t=h.textureWidth,n=h.textureHeight;i.bindFramebuffer(e.READ_FRAMEBUFFER,f),i.bindFramebuffer(e.DRAW_FRAMEBUFFER,u),e.invalidateFramebuffer(e.READ_FRAMEBUFFER,[x]),e.invalidateFramebuffer(e.DRAW_FRAMEBUFFER,[x]),e.blitFramebuffer(0,0,t,n,0,0,t,n,e.COLOR_BUFFER_BIT,e.NEAREST),e.invalidateFramebuffer(e.READ_FRAMEBUFFER,[e.COLOR_ATTACHMENT0]),i.bindFramebuffer(e.READ_FRAMEBUFFER,null),i.bindFramebuffer(e.DRAW_FRAMEBUFFER,null),i.bindFramebuffer(e.FRAMEBUFFER,f)}y=null})),this.setAnimationLoop=function(t){k=t},this.dispose=function(){}}}function Bn(t){function e(e,n){e.opacity.value=n.opacity,n.color&&e.diffuse.value.copy(n.color),n.emissive&&e.emissive.value.copy(n.emissive).multiplyScalar(n.emissiveIntensity),n.map&&(e.map.value=n.map),n.alphaMap&&(e.alphaMap.value=n.alphaMap),n.specularMap&&(e.specularMap.value=n.specularMap),n.alphaTest>0&&(e.alphaTest.value=n.alphaTest);const i=t.get(n).envMap;if(i){e.envMap.value=i,e.flipEnvMap.value=i.isCubeTexture&&!1===i.isRenderTargetTexture?-1:1,e.reflectivity.value=n.reflectivity,e.ior.value=n.ior,e.refractionRatio.value=n.refractionRatio;const r=t.get(i).__maxMipLevel;void 0!==r&&(e.maxMipLevel.value=r)}let r,s;n.lightMap&&(e.lightMap.value=n.lightMap,e.lightMapIntensity.value=n.lightMapIntensity),n.aoMap&&(e.aoMap.value=n.aoMap,e.aoMapIntensity.value=n.aoMapIntensity),n.map?r=n.map:n.specularMap?r=n.specularMap:n.displacementMap?r=n.displacementMap:n.normalMap?r=n.normalMap:n.bumpMap?r=n.bumpMap:n.roughnessMap?r=n.roughnessMap:n.metalnessMap?r=n.metalnessMap:n.alphaMap?r=n.alphaMap:n.emissiveMap?r=n.emissiveMap:n.clearcoatMap?r=n.clearcoatMap:n.clearcoatNormalMap?r=n.clearcoatNormalMap:n.clearcoatRoughnessMap?r=n.clearcoatRoughnessMap:n.specularIntensityMap?r=n.specularIntensityMap:n.specularTintMap?r=n.specularTintMap:n.transmissionMap?r=n.transmissionMap:n.thicknessMap&&(r=n.thicknessMap),void 0!==r&&(r.isWebGLRenderTarget&&(r=r.texture),!0===r.matrixAutoUpdate&&r.updateMatrix(),e.uvTransform.value.copy(r.matrix)),n.aoMap?s=n.aoMap:n.lightMap&&(s=n.lightMap),void 0!==s&&(s.isWebGLRenderTarget&&(s=s.texture),!0===s.matrixAutoUpdate&&s.updateMatrix(),e.uv2Transform.value.copy(s.matrix))}function n(e,n){e.roughness.value=n.roughness,e.metalness.value=n.metalness,n.roughnessMap&&(e.roughnessMap.value=n.roughnessMap),n.metalnessMap&&(e.metalnessMap.value=n.metalnessMap),n.emissiveMap&&(e.emissiveMap.value=n.emissiveMap),n.bumpMap&&(e.bumpMap.value=n.bumpMap,e.bumpScale.value=n.bumpScale,n.side===w.i&&(e.bumpScale.value*=-1)),n.normalMap&&(e.normalMap.value=n.normalMap,e.normalScale.value.copy(n.normalScale),n.side===w.i&&e.normalScale.value.negate()),n.displacementMap&&(e.displacementMap.value=n.displacementMap,e.displacementScale.value=n.displacementScale,e.displacementBias.value=n.displacementBias);t.get(n).envMap&&(e.envMapIntensity.value=n.envMapIntensity)}return{refreshFogUniforms:function(t,e){t.fogColor.value.copy(e.color),e.isFog?(t.fogNear.value=e.near,t.fogFar.value=e.far):e.isFogExp2&&(t.fogDensity.value=e.density)},refreshMaterialUniforms:function(t,i,r,s,o){i.isMeshBasicMaterial?e(t,i):i.isMeshLambertMaterial?(e(t,i),function(t,e){e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap)}(t,i)):i.isMeshToonMaterial?(e(t,i),function(t,e){e.gradientMap&&(t.gradientMap.value=e.gradientMap);e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap);e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,e.side===w.i&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),e.side===w.i&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshPhongMaterial?(e(t,i),function(t,e){t.specular.value.copy(e.specular),t.shininess.value=Math.max(e.shininess,1e-4),e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap);e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,e.side===w.i&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),e.side===w.i&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshStandardMaterial?(e(t,i),i.isMeshPhysicalMaterial?function(t,e,i){n(t,e),t.ior.value=e.ior,e.sheen>0&&(t.sheenTint.value.copy(e.sheenTint).multiplyScalar(e.sheen),t.sheenRoughness.value=e.sheenRoughness);e.clearcoat>0&&(t.clearcoat.value=e.clearcoat,t.clearcoatRoughness.value=e.clearcoatRoughness,e.clearcoatMap&&(t.clearcoatMap.value=e.clearcoatMap),e.clearcoatRoughnessMap&&(t.clearcoatRoughnessMap.value=e.clearcoatRoughnessMap),e.clearcoatNormalMap&&(t.clearcoatNormalScale.value.copy(e.clearcoatNormalScale),t.clearcoatNormalMap.value=e.clearcoatNormalMap,e.side===w.i&&t.clearcoatNormalScale.value.negate()));e.transmission>0&&(t.transmission.value=e.transmission,t.transmissionSamplerMap.value=i.texture,t.transmissionSamplerSize.value.set(i.width,i.height),e.transmissionMap&&(t.transmissionMap.value=e.transmissionMap),t.thickness.value=e.thickness,e.thicknessMap&&(t.thicknessMap.value=e.thicknessMap),t.attenuationDistance.value=e.attenuationDistance,t.attenuationTint.value.copy(e.attenuationTint));t.specularIntensity.value=e.specularIntensity,t.specularTint.value.copy(e.specularTint),e.specularIntensityMap&&(t.specularIntensityMap.value=e.specularIntensityMap);e.specularTintMap&&(t.specularTintMap.value=e.specularTintMap)}(t,i,o):n(t,i)):i.isMeshMatcapMaterial?(e(t,i),function(t,e){e.matcap&&(t.matcap.value=e.matcap);e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,e.side===w.i&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),e.side===w.i&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshDepthMaterial?(e(t,i),function(t,e){e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshDistanceMaterial?(e(t,i),function(t,e){e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias);t.referencePosition.value.copy(e.referencePosition),t.nearDistance.value=e.nearDistance,t.farDistance.value=e.farDistance}(t,i)):i.isMeshNormalMaterial?(e(t,i),function(t,e){e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,e.side===w.i&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),e.side===w.i&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isLineBasicMaterial?(function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity}(t,i),i.isLineDashedMaterial&&function(t,e){t.dashSize.value=e.dashSize,t.totalSize.value=e.dashSize+e.gapSize,t.scale.value=e.scale}(t,i)):i.isPointsMaterial?function(t,e,n,i){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.size.value=e.size*n,t.scale.value=.5*i,e.map&&(t.map.value=e.map);e.alphaMap&&(t.alphaMap.value=e.alphaMap);e.alphaTest>0&&(t.alphaTest.value=e.alphaTest);let r;e.map?r=e.map:e.alphaMap&&(r=e.alphaMap);void 0!==r&&(!0===r.matrixAutoUpdate&&r.updateMatrix(),t.uvTransform.value.copy(r.matrix))}(t,i,r,s):i.isSpriteMaterial?function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.rotation.value=e.rotation,e.map&&(t.map.value=e.map);e.alphaMap&&(t.alphaMap.value=e.alphaMap);e.alphaTest>0&&(t.alphaTest.value=e.alphaTest);let n;e.map?n=e.map:e.alphaMap&&(n=e.alphaMap);void 0!==n&&(!0===n.matrixAutoUpdate&&n.updateMatrix(),t.uvTransform.value.copy(n.matrix))}(t,i):i.isShadowMaterial?(t.color.value.copy(i.color),t.opacity.value=i.opacity):i.isShaderMaterial&&(i.uniformsNeedUpdate=!1)}}}function zn(t={}){const e=void 0!==t.canvas?t.canvas:function(){const t=Object(Pt.b)(\\\\\\\"canvas\\\\\\\");return t.style.display=\\\\\\\"block\\\\\\\",t}(),n=void 0!==t.context?t.context:null,i=void 0!==t.alpha&&t.alpha,r=void 0===t.depth||t.depth,s=void 0===t.stencil||t.stencil,o=void 0!==t.antialias&&t.antialias,a=void 0===t.premultipliedAlpha||t.premultipliedAlpha,l=void 0!==t.preserveDrawingBuffer&&t.preserveDrawingBuffer,c=void 0!==t.powerPreference?t.powerPreference:\\\\\\\"default\\\\\\\",u=void 0!==t.failIfMajorPerformanceCaveat&&t.failIfMajorPerformanceCaveat;let h=null,d=null;const m=[],f=[];this.domElement=e,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.gammaFactor=2,this.outputEncoding=w.U,this.physicallyCorrectLights=!1,this.toneMapping=w.vb,this.toneMappingExposure=1;const g=this;let v=!1,y=0,x=0,b=null,S=-1,C=null;const N=new _.a,L=new _.a;let O=null,R=e.width,P=e.height,I=1,F=null,D=null;const k=new _.a(0,0,R,P),B=new _.a(0,0,R,P);let z=!1;const U=[],G=new T.a;let V=!1,X=!1,$=null;const J=new A.a,Q=new p.a,K={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};function tt(){return null===b?I:1}let et,nt,it,st,ot,at,lt,ct,ut,ht,dt,pt,_t,mt,ft,gt,vt,yt,xt,bt,wt,Tt,At,Et=n;function Mt(t,n){for(let i=0;i<t.length;i++){const r=t[i],s=e.getContext(r,n);if(null!==s)return s}return null}try{const t={alpha:i,depth:r,stencil:s,antialias:o,premultipliedAlpha:a,preserveDrawingBuffer:l,powerPreference:c,failIfMajorPerformanceCaveat:u};if(e.addEventListener(\\\\\\\"webglcontextlost\\\\\\\",Nt,!1),e.addEventListener(\\\\\\\"webglcontextrestored\\\\\\\",Lt,!1),null===Et){const e=[\\\\\\\"webgl2\\\\\\\",\\\\\\\"webgl\\\\\\\",\\\\\\\"experimental-webgl\\\\\\\"];if(!0===g.isWebGL1Renderer&&e.shift(),Et=Mt(e,t),null===Et)throw Mt(e)?new Error(\\\\\\\"Error creating WebGL context with your selected attributes.\\\\\\\"):new Error(\\\\\\\"Error creating WebGL context.\\\\\\\")}void 0===Et.getShaderPrecisionFormat&&(Et.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}})}catch(t){throw console.error(\\\\\\\"THREE.WebGLRenderer: \\\\\\\"+t.message),t}function St(){et=new Rt(Et),nt=new q(Et,et,t),et.init(nt),Tt=new Rn(Et,et,nt),it=new Nn(Et,et,nt),U[0]=Et.BACK,st=new Dt(Et),ot=new mn,at=new On(Et,et,it,ot,nt,Tt,st),lt=new rt(g),ct=new Ot(g),ut=new M(Et,nt),At=new j(Et,et,ut,nt),ht=new It(Et,ut,st,At),dt=new Ht(Et,ht,ut,st),xt=new Gt(Et,nt,at),gt=new Y(ot),pt=new _n(g,lt,ct,et,nt,At,gt),_t=new Bn(ot),mt=new yn(ot),ft=new En(et,nt),yt=new H(g,lt,it,dt,a),vt=new Cn(g,dt,nt),bt=new W(Et,et,st,nt),wt=new Ft(Et,et,st,nt),st.programs=pt.programs,g.capabilities=nt,g.extensions=et,g.properties=ot,g.renderLists=mt,g.shadowMap=vt,g.state=it,g.info=st}St();const Ct=new kn(g,Et);function Nt(t){t.preventDefault(),console.log(\\\\\\\"THREE.WebGLRenderer: Context Lost.\\\\\\\"),v=!0}function Lt(){console.log(\\\\\\\"THREE.WebGLRenderer: Context Restored.\\\\\\\"),v=!1;const t=st.autoReset,e=vt.enabled,n=vt.autoUpdate,i=vt.needsUpdate,r=vt.type;St(),st.autoReset=t,vt.enabled=e,vt.autoUpdate=n,vt.needsUpdate=i,vt.type=r}function kt(t){const e=t.target;e.removeEventListener(\\\\\\\"dispose\\\\\\\",kt),function(t){(function(t){const e=ot.get(t).programs;void 0!==e&&e.forEach((function(t){pt.releaseProgram(t)}))})(t),ot.remove(t)}(e)}this.xr=Ct,this.getContext=function(){return Et},this.getContextAttributes=function(){return Et.getContextAttributes()},this.forceContextLoss=function(){const t=et.get(\\\\\\\"WEBGL_lose_context\\\\\\\");t&&t.loseContext()},this.forceContextRestore=function(){const t=et.get(\\\\\\\"WEBGL_lose_context\\\\\\\");t&&t.restoreContext()},this.getPixelRatio=function(){return I},this.setPixelRatio=function(t){void 0!==t&&(I=t,this.setSize(R,P,!1))},this.getSize=function(t){return t.set(R,P)},this.setSize=function(t,n,i){Ct.isPresenting?console.warn(\\\\\\\"THREE.WebGLRenderer: Can't change size while VR device is presenting.\\\\\\\"):(R=t,P=n,e.width=Math.floor(t*I),e.height=Math.floor(n*I),!1!==i&&(e.style.width=t+\\\\\\\"px\\\\\\\",e.style.height=n+\\\\\\\"px\\\\\\\"),this.setViewport(0,0,t,n))},this.getDrawingBufferSize=function(t){return t.set(R*I,P*I).floor()},this.setDrawingBufferSize=function(t,n,i){R=t,P=n,I=i,e.width=Math.floor(t*i),e.height=Math.floor(n*i),this.setViewport(0,0,t,n)},this.getCurrentViewport=function(t){return t.copy(N)},this.getViewport=function(t){return t.copy(k)},this.setViewport=function(t,e,n,i){t.isVector4?k.set(t.x,t.y,t.z,t.w):k.set(t,e,n,i),it.viewport(N.copy(k).multiplyScalar(I).floor())},this.getScissor=function(t){return t.copy(B)},this.setScissor=function(t,e,n,i){t.isVector4?B.set(t.x,t.y,t.z,t.w):B.set(t,e,n,i),it.scissor(L.copy(B).multiplyScalar(I).floor())},this.getScissorTest=function(){return z},this.setScissorTest=function(t){it.setScissorTest(z=t)},this.setOpaqueSort=function(t){F=t},this.setTransparentSort=function(t){D=t},this.getClearColor=function(t){return t.copy(yt.getClearColor())},this.setClearColor=function(){yt.setClearColor.apply(yt,arguments)},this.getClearAlpha=function(){return yt.getClearAlpha()},this.setClearAlpha=function(){yt.setClearAlpha.apply(yt,arguments)},this.clear=function(t,e,n){let i=0;(void 0===t||t)&&(i|=Et.COLOR_BUFFER_BIT),(void 0===e||e)&&(i|=Et.DEPTH_BUFFER_BIT),(void 0===n||n)&&(i|=Et.STENCIL_BUFFER_BIT),Et.clear(i)},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(){e.removeEventListener(\\\\\\\"webglcontextlost\\\\\\\",Nt,!1),e.removeEventListener(\\\\\\\"webglcontextrestored\\\\\\\",Lt,!1),mt.dispose(),ft.dispose(),ot.dispose(),lt.dispose(),ct.dispose(),dt.dispose(),At.dispose(),Ct.dispose(),Ct.removeEventListener(\\\\\\\"sessionstart\\\\\\\",zt),Ct.removeEventListener(\\\\\\\"sessionend\\\\\\\",Ut),$&&($.dispose(),$=null),jt.stop()},this.renderBufferImmediate=function(t,e){At.initAttributes();const n=ot.get(t);t.hasPositions&&!n.position&&(n.position=Et.createBuffer()),t.hasNormals&&!n.normal&&(n.normal=Et.createBuffer()),t.hasUvs&&!n.uv&&(n.uv=Et.createBuffer()),t.hasColors&&!n.color&&(n.color=Et.createBuffer());const i=e.getAttributes();t.hasPositions&&(Et.bindBuffer(Et.ARRAY_BUFFER,n.position),Et.bufferData(Et.ARRAY_BUFFER,t.positionArray,Et.DYNAMIC_DRAW),At.enableAttribute(i.position.location),Et.vertexAttribPointer(i.position.location,3,Et.FLOAT,!1,0,0)),t.hasNormals&&(Et.bindBuffer(Et.ARRAY_BUFFER,n.normal),Et.bufferData(Et.ARRAY_BUFFER,t.normalArray,Et.DYNAMIC_DRAW),At.enableAttribute(i.normal.location),Et.vertexAttribPointer(i.normal.location,3,Et.FLOAT,!1,0,0)),t.hasUvs&&(Et.bindBuffer(Et.ARRAY_BUFFER,n.uv),Et.bufferData(Et.ARRAY_BUFFER,t.uvArray,Et.DYNAMIC_DRAW),At.enableAttribute(i.uv.location),Et.vertexAttribPointer(i.uv.location,2,Et.FLOAT,!1,0,0)),t.hasColors&&(Et.bindBuffer(Et.ARRAY_BUFFER,n.color),Et.bufferData(Et.ARRAY_BUFFER,t.colorArray,Et.DYNAMIC_DRAW),At.enableAttribute(i.color.location),Et.vertexAttribPointer(i.color.location,3,Et.FLOAT,!1,0,0)),At.disableUnusedAttributes(),Et.drawArrays(Et.TRIANGLES,0,t.count),t.count=0},this.renderBufferDirect=function(t,e,n,i,r,s){null===e&&(e=K);const o=r.isMesh&&r.matrixWorld.determinant()<0,a=Zt(t,e,n,i,r);it.setMaterial(i,o);let l=n.index;const c=n.attributes.position;if(null===l){if(void 0===c||0===c.count)return}else if(0===l.count)return;let u,h=1;!0===i.wireframe&&(l=ht.getWireframeAttribute(n),h=2),At.setup(r,i,a,n,l);let d=bt;null!==l&&(u=ut.get(l),d=wt,d.setIndex(u));const p=null!==l?l.count:c.count,_=n.drawRange.start*h,m=n.drawRange.count*h,f=null!==s?s.start*h:0,g=null!==s?s.count*h:1/0,v=Math.max(_,f),y=Math.min(p,_+m,f+g)-1,x=Math.max(0,y-v+1);if(0!==x){if(r.isMesh)!0===i.wireframe?(it.setLineWidth(i.wireframeLinewidth*tt()),d.setMode(Et.LINES)):d.setMode(Et.TRIANGLES);else if(r.isLine){let t=i.linewidth;void 0===t&&(t=1),it.setLineWidth(t*tt()),r.isLineSegments?d.setMode(Et.LINES):r.isLineLoop?d.setMode(Et.LINE_LOOP):d.setMode(Et.LINE_STRIP)}else r.isPoints?d.setMode(Et.POINTS):r.isSprite&&d.setMode(Et.TRIANGLES);if(r.isInstancedMesh)d.renderInstances(v,x,r.count);else if(n.isInstancedBufferGeometry){const t=Math.min(n.instanceCount,n._maxInstanceCount);d.renderInstances(v,x,t)}else d.render(v,x)}},this.compile=function(t,e){d=ft.get(t),d.init(),f.push(d),t.traverseVisible((function(t){t.isLight&&t.layers.test(e.layers)&&(d.pushLight(t),t.castShadow&&d.pushShadow(t))})),d.setupLights(g.physicallyCorrectLights),t.traverse((function(e){const n=e.material;if(n)if(Array.isArray(n))for(let i=0;i<n.length;i++){$t(n[i],t,e)}else $t(n,t,e)})),f.pop(),d=null};let Bt=null;function zt(){jt.stop()}function Ut(){jt.start()}const jt=new E;function Wt(t,e,n,i){if(!1===t.visible)return;if(t.layers.test(e.layers))if(t.isGroup)n=t.renderOrder;else if(t.isLOD)!0===t.autoUpdate&&t.update(e);else if(t.isLight)d.pushLight(t),t.castShadow&&d.pushShadow(t);else if(t.isSprite){if(!t.frustumCulled||G.intersectsSprite(t)){i&&Q.setFromMatrixPosition(t.matrixWorld).applyMatrix4(J);const e=dt.update(t),r=t.material;r.visible&&h.push(t,e,r,n,Q.z,null)}}else if(t.isImmediateRenderObject)i&&Q.setFromMatrixPosition(t.matrixWorld).applyMatrix4(J),h.push(t,null,t.material,n,Q.z,null);else if((t.isMesh||t.isLine||t.isPoints)&&(t.isSkinnedMesh&&t.skeleton.frame!==st.render.frame&&(t.skeleton.update(),t.skeleton.frame=st.render.frame),!t.frustumCulled||G.intersectsObject(t))){i&&Q.setFromMatrixPosition(t.matrixWorld).applyMatrix4(J);const e=dt.update(t),r=t.material;if(Array.isArray(r)){const i=e.groups;for(let s=0,o=i.length;s<o;s++){const o=i[s],a=r[o.materialIndex];a&&a.visible&&h.push(t,e,a,n,Q.z,o)}}else r.visible&&h.push(t,e,r,n,Q.z,null)}const r=t.children;for(let t=0,s=r.length;t<s;t++)Wt(r[t],e,n,i)}function qt(t,e,n,i){const r=t.opaque,s=t.transmissive,a=t.transparent;d.setupLightsView(n),s.length>0&&function(t,e,n){if(null===$){const t=!0===o&&!0===nt.isWebGL2;$=new(t?Vt:Z)(1024,1024,{generateMipmaps:!0,type:null!==Tt.convert(w.M)?w.M:w.Zc,minFilter:w.Y,magFilter:w.ob,wrapS:w.n,wrapT:w.n})}const i=g.getRenderTarget();g.setRenderTarget($),g.clear();const r=g.toneMapping;g.toneMapping=w.vb,Xt(t,e,n),g.toneMapping=r,at.updateMultisampleRenderTarget($),at.updateRenderTargetMipmap($),g.setRenderTarget(i)}(r,e,n),i&&it.viewport(N.copy(i)),r.length>0&&Xt(r,e,n),s.length>0&&Xt(s,e,n),a.length>0&&Xt(a,e,n)}function Xt(t,e,n){const i=!0===e.isScene?e.overrideMaterial:null;for(let r=0,s=t.length;r<s;r++){const s=t[r],o=s.object,a=s.geometry,l=null===i?s.material:i,c=s.group;o.layers.test(n.layers)&&Yt(o,e,n,a,l,c)}}function Yt(t,e,n,i,r,s){if(t.onBeforeRender(g,e,n,i,r,s),t.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse,t.matrixWorld),t.normalMatrix.getNormalMatrix(t.modelViewMatrix),r.onBeforeRender(g,e,n,i,t,s),t.isImmediateRenderObject){const s=Zt(n,e,i,r,t);it.setMaterial(r),At.reset(),function(t,e){t.render((function(t){g.renderBufferImmediate(t,e)}))}(t,s)}else!0===r.transparent&&r.side===w.z?(r.side=w.i,r.needsUpdate=!0,g.renderBufferDirect(n,e,i,r,t,s),r.side=w.H,r.needsUpdate=!0,g.renderBufferDirect(n,e,i,r,t,s),r.side=w.z):g.renderBufferDirect(n,e,i,r,t,s);t.onAfterRender(g,e,n,i,r,s)}function $t(t,e,n){!0!==e.isScene&&(e=K);const i=ot.get(t),r=d.state.lights,s=d.state.shadowsArray,o=r.state.version,a=pt.getParameters(t,r.state,s,e,n),l=pt.getProgramCacheKey(a);let c=i.programs;i.environment=t.isMeshStandardMaterial?e.environment:null,i.fog=e.fog,i.envMap=(t.isMeshStandardMaterial?ct:lt).get(t.envMap||i.environment),void 0===c&&(t.addEventListener(\\\\\\\"dispose\\\\\\\",kt),c=new Map,i.programs=c);let u=c.get(l);if(void 0!==u){if(i.currentProgram===u&&i.lightsStateVersion===o)return Jt(t,a),u}else a.uniforms=pt.getUniforms(t),t.onBuild(a,g),t.onBeforeCompile(a,g),u=pt.acquireProgram(a,l),c.set(l,u),i.uniforms=a.uniforms;const h=i.uniforms;(t.isShaderMaterial||t.isRawShaderMaterial)&&!0!==t.clipping||(h.clippingPlanes=gt.uniform),Jt(t,a),i.needsLights=function(t){return t.isMeshLambertMaterial||t.isMeshToonMaterial||t.isMeshPhongMaterial||t.isMeshStandardMaterial||t.isShadowMaterial||t.isShaderMaterial&&!0===t.lights}(t),i.lightsStateVersion=o,i.needsLights&&(h.ambientLightColor.value=r.state.ambient,h.lightProbe.value=r.state.probe,h.directionalLights.value=r.state.directional,h.directionalLightShadows.value=r.state.directionalShadow,h.spotLights.value=r.state.spot,h.spotLightShadows.value=r.state.spotShadow,h.rectAreaLights.value=r.state.rectArea,h.ltc_1.value=r.state.rectAreaLTC1,h.ltc_2.value=r.state.rectAreaLTC2,h.pointLights.value=r.state.point,h.pointLightShadows.value=r.state.pointShadow,h.hemisphereLights.value=r.state.hemi,h.directionalShadowMap.value=r.state.directionalShadowMap,h.directionalShadowMatrix.value=r.state.directionalShadowMatrix,h.spotShadowMap.value=r.state.spotShadowMap,h.spotShadowMatrix.value=r.state.spotShadowMatrix,h.pointShadowMap.value=r.state.pointShadowMap,h.pointShadowMatrix.value=r.state.pointShadowMatrix);const p=u.getUniforms(),_=qe.seqWithValue(p.seq,h);return i.currentProgram=u,i.uniformsList=_,u}function Jt(t,e){const n=ot.get(t);n.outputEncoding=e.outputEncoding,n.instancing=e.instancing,n.skinning=e.skinning,n.morphTargets=e.morphTargets,n.morphNormals=e.morphNormals,n.morphTargetsCount=e.morphTargetsCount,n.numClippingPlanes=e.numClippingPlanes,n.numIntersection=e.numClipIntersection,n.vertexAlphas=e.vertexAlphas,n.vertexTangents=e.vertexTangents}function Zt(t,e,n,i,r){!0!==e.isScene&&(e=K),at.resetTextureUnits();const s=e.fog,o=i.isMeshStandardMaterial?e.environment:null,a=null===b?g.outputEncoding:b.texture.encoding,l=(i.isMeshStandardMaterial?ct:lt).get(i.envMap||o),c=!0===i.vertexColors&&!!n&&!!n.attributes.color&&4===n.attributes.color.itemSize,u=!!i.normalMap&&!!n&&!!n.attributes.tangent,h=!!n&&!!n.morphAttributes.position,p=!!n&&!!n.morphAttributes.normal,_=n&&n.morphAttributes.position?n.morphAttributes.position.length:0,m=ot.get(i),f=d.state.lights;if(!0===V&&(!0===X||t!==C)){const e=t===C&&i.id===S;gt.setState(i,t,e)}let v=!1;i.version===m.__version?m.needsLights&&m.lightsStateVersion!==f.state.version||m.outputEncoding!==a||r.isInstancedMesh&&!1===m.instancing?v=!0:r.isInstancedMesh||!0!==m.instancing?r.isSkinnedMesh&&!1===m.skinning?v=!0:r.isSkinnedMesh||!0!==m.skinning?m.envMap!==l||i.fog&&m.fog!==s?v=!0:void 0===m.numClippingPlanes||m.numClippingPlanes===gt.numPlanes&&m.numIntersection===gt.numIntersection?(m.vertexAlphas!==c||m.vertexTangents!==u||m.morphTargets!==h||m.morphNormals!==p||!0===nt.isWebGL2&&m.morphTargetsCount!==_)&&(v=!0):v=!0:v=!0:v=!0:(v=!0,m.__version=i.version);let y=m.currentProgram;!0===v&&(y=$t(i,e,r));let x=!1,w=!1,T=!1;const A=y.getUniforms(),E=m.uniforms;if(it.useProgram(y.program)&&(x=!0,w=!0,T=!0),i.id!==S&&(S=i.id,w=!0),x||C!==t){if(A.setValue(Et,\\\\\\\"projectionMatrix\\\\\\\",t.projectionMatrix),nt.logarithmicDepthBuffer&&A.setValue(Et,\\\\\\\"logDepthBufFC\\\\\\\",2/(Math.log(t.far+1)/Math.LN2)),C!==t&&(C=t,w=!0,T=!0),i.isShaderMaterial||i.isMeshPhongMaterial||i.isMeshToonMaterial||i.isMeshStandardMaterial||i.envMap){const e=A.map.cameraPosition;void 0!==e&&e.setValue(Et,Q.setFromMatrixPosition(t.matrixWorld))}(i.isMeshPhongMaterial||i.isMeshToonMaterial||i.isMeshLambertMaterial||i.isMeshBasicMaterial||i.isMeshStandardMaterial||i.isShaderMaterial)&&A.setValue(Et,\\\\\\\"isOrthographic\\\\\\\",!0===t.isOrthographicCamera),(i.isMeshPhongMaterial||i.isMeshToonMaterial||i.isMeshLambertMaterial||i.isMeshBasicMaterial||i.isMeshStandardMaterial||i.isShaderMaterial||i.isShadowMaterial||r.isSkinnedMesh)&&A.setValue(Et,\\\\\\\"viewMatrix\\\\\\\",t.matrixWorldInverse)}if(r.isSkinnedMesh){A.setOptional(Et,r,\\\\\\\"bindMatrix\\\\\\\"),A.setOptional(Et,r,\\\\\\\"bindMatrixInverse\\\\\\\");const t=r.skeleton;t&&(nt.floatVertexTextures?(null===t.boneTexture&&t.computeBoneTexture(),A.setValue(Et,\\\\\\\"boneTexture\\\\\\\",t.boneTexture,at),A.setValue(Et,\\\\\\\"boneTextureSize\\\\\\\",t.boneTextureSize)):A.setOptional(Et,t,\\\\\\\"boneMatrices\\\\\\\"))}var M,N;return!n||void 0===n.morphAttributes.position&&void 0===n.morphAttributes.normal||xt.update(r,n,i,y),(w||m.receiveShadow!==r.receiveShadow)&&(m.receiveShadow=r.receiveShadow,A.setValue(Et,\\\\\\\"receiveShadow\\\\\\\",r.receiveShadow)),w&&(A.setValue(Et,\\\\\\\"toneMappingExposure\\\\\\\",g.toneMappingExposure),m.needsLights&&(N=T,(M=E).ambientLightColor.needsUpdate=N,M.lightProbe.needsUpdate=N,M.directionalLights.needsUpdate=N,M.directionalLightShadows.needsUpdate=N,M.pointLights.needsUpdate=N,M.pointLightShadows.needsUpdate=N,M.spotLights.needsUpdate=N,M.spotLightShadows.needsUpdate=N,M.rectAreaLights.needsUpdate=N,M.hemisphereLights.needsUpdate=N),s&&i.fog&&_t.refreshFogUniforms(E,s),_t.refreshMaterialUniforms(E,i,I,P,$),qe.upload(Et,m.uniformsList,E,at)),i.isShaderMaterial&&!0===i.uniformsNeedUpdate&&(qe.upload(Et,m.uniformsList,E,at),i.uniformsNeedUpdate=!1),i.isSpriteMaterial&&A.setValue(Et,\\\\\\\"center\\\\\\\",r.center),A.setValue(Et,\\\\\\\"modelViewMatrix\\\\\\\",r.modelViewMatrix),A.setValue(Et,\\\\\\\"normalMatrix\\\\\\\",r.normalMatrix),A.setValue(Et,\\\\\\\"modelMatrix\\\\\\\",r.matrixWorld),y}jt.setAnimationLoop((function(t){Bt&&Bt(t)})),\\\\\\\"undefined\\\\\\\"!=typeof window&&jt.setContext(window),this.setAnimationLoop=function(t){Bt=t,Ct.setAnimationLoop(t),null===t?jt.stop():jt.start()},Ct.addEventListener(\\\\\\\"sessionstart\\\\\\\",zt),Ct.addEventListener(\\\\\\\"sessionend\\\\\\\",Ut),this.render=function(t,e){if(void 0!==e&&!0!==e.isCamera)return void console.error(\\\\\\\"THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.\\\\\\\");if(!0===v)return;!0===t.autoUpdate&&t.updateMatrixWorld(),null===e.parent&&e.updateMatrixWorld(),!0===Ct.enabled&&!0===Ct.isPresenting&&(!0===Ct.cameraAutoUpdate&&Ct.updateCamera(e),e=Ct.getCamera()),!0===t.isScene&&t.onBeforeRender(g,t,e,b),d=ft.get(t,f.length),d.init(),f.push(d),J.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),G.setFromProjectionMatrix(J),X=this.localClippingEnabled,V=gt.init(this.clippingPlanes,X,e),h=mt.get(t,m.length),h.init(),m.push(h),Wt(t,e,0,g.sortObjects),h.finish(),!0===g.sortObjects&&h.sort(F,D),!0===V&&gt.beginShadows();const n=d.state.shadowsArray;if(vt.render(n,t,e),!0===V&&gt.endShadows(),!0===this.info.autoReset&&this.info.reset(),yt.render(h,t),d.setupLights(g.physicallyCorrectLights),e.isArrayCamera){const n=e.cameras;for(let e=0,i=n.length;e<i;e++){const i=n[e];qt(h,t,i,i.viewport)}}else qt(h,t,e);null!==b&&(at.updateMultisampleRenderTarget(b),at.updateRenderTargetMipmap(b)),!0===t.isScene&&t.onAfterRender(g,t,e),it.buffers.depth.setTest(!0),it.buffers.depth.setMask(!0),it.buffers.color.setMask(!0),it.setPolygonOffset(!1),At.resetDefaultState(),S=-1,C=null,f.pop(),d=f.length>0?f[f.length-1]:null,m.pop(),h=m.length>0?m[m.length-1]:null},this.getActiveCubeFace=function(){return y},this.getActiveMipmapLevel=function(){return x},this.getRenderTarget=function(){return b},this.setRenderTarget=function(t,e=0,n=0){b=t,y=e,x=n,t&&void 0===ot.get(t).__webglFramebuffer&&at.setupRenderTarget(t);let i=null,r=!1,s=!1;if(t){const n=t.texture;(n.isDataTexture3D||n.isDataTexture2DArray)&&(s=!0);const o=ot.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(i=o[e],r=!0):i=t.isWebGLMultisampleRenderTarget?ot.get(t).__webglMultisampledFramebuffer:o,N.copy(t.viewport),L.copy(t.scissor),O=t.scissorTest}else N.copy(k).multiplyScalar(I).floor(),L.copy(B).multiplyScalar(I).floor(),O=z;if(it.bindFramebuffer(Et.FRAMEBUFFER,i)&&nt.drawBuffers){let e=!1;if(t)if(t.isWebGLMultipleRenderTargets){const n=t.texture;if(U.length!==n.length||U[0]!==Et.COLOR_ATTACHMENT0){for(let t=0,e=n.length;t<e;t++)U[t]=Et.COLOR_ATTACHMENT0+t;U.length=n.length,e=!0}}else 1===U.length&&U[0]===Et.COLOR_ATTACHMENT0||(U[0]=Et.COLOR_ATTACHMENT0,U.length=1,e=!0);else 1===U.length&&U[0]===Et.BACK||(U[0]=Et.BACK,U.length=1,e=!0);e&&(nt.isWebGL2?Et.drawBuffers(U):et.get(\\\\\\\"WEBGL_draw_buffers\\\\\\\").drawBuffersWEBGL(U))}if(it.viewport(N),it.scissor(L),it.setScissorTest(O),r){const i=ot.get(t.texture);Et.framebufferTexture2D(Et.FRAMEBUFFER,Et.COLOR_ATTACHMENT0,Et.TEXTURE_CUBE_MAP_POSITIVE_X+e,i.__webglTexture,n)}else if(s){const i=ot.get(t.texture),r=e||0;Et.framebufferTextureLayer(Et.FRAMEBUFFER,Et.COLOR_ATTACHMENT0,i.__webglTexture,n||0,r)}S=-1},this.readRenderTargetPixels=function(t,e,n,i,r,s,o){if(!t||!t.isWebGLRenderTarget)return void console.error(\\\\\\\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.\\\\\\\");let a=ot.get(t).__webglFramebuffer;if(t.isWebGLCubeRenderTarget&&void 0!==o&&(a=a[o]),a){it.bindFramebuffer(Et.FRAMEBUFFER,a);try{const o=t.texture,a=o.format,l=o.type;if(a!==w.Ib&&Tt.convert(a)!==Et.getParameter(Et.IMPLEMENTATION_COLOR_READ_FORMAT))return void console.error(\\\\\\\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.\\\\\\\");const c=l===w.M&&(et.has(\\\\\\\"EXT_color_buffer_half_float\\\\\\\")||nt.isWebGL2&&et.has(\\\\\\\"EXT_color_buffer_float\\\\\\\"));if(!(l===w.Zc||Tt.convert(l)===Et.getParameter(Et.IMPLEMENTATION_COLOR_READ_TYPE)||l===w.G&&(nt.isWebGL2||et.has(\\\\\\\"OES_texture_float\\\\\\\")||et.has(\\\\\\\"WEBGL_color_buffer_float\\\\\\\"))||c))return void console.error(\\\\\\\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.\\\\\\\");Et.checkFramebufferStatus(Et.FRAMEBUFFER)===Et.FRAMEBUFFER_COMPLETE?e>=0&&e<=t.width-i&&n>=0&&n<=t.height-r&&Et.readPixels(e,n,i,r,Tt.convert(a),Tt.convert(l),s):console.error(\\\\\\\"THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.\\\\\\\")}finally{const t=null!==b?ot.get(b).__webglFramebuffer:null;it.bindFramebuffer(Et.FRAMEBUFFER,t)}}},this.copyFramebufferToTexture=function(t,e,n=0){const i=Math.pow(2,-n),r=Math.floor(e.image.width*i),s=Math.floor(e.image.height*i);let o=Tt.convert(e.format);nt.isWebGL2&&(o===Et.RGB&&(o=Et.RGB8),o===Et.RGBA&&(o=Et.RGBA8)),at.setTexture2D(e,0),Et.copyTexImage2D(Et.TEXTURE_2D,n,o,t.x,t.y,r,s,0),it.unbindTexture()},this.copyTextureToTexture=function(t,e,n,i=0){const r=e.image.width,s=e.image.height,o=Tt.convert(n.format),a=Tt.convert(n.type);at.setTexture2D(n,0),Et.pixelStorei(Et.UNPACK_FLIP_Y_WEBGL,n.flipY),Et.pixelStorei(Et.UNPACK_PREMULTIPLY_ALPHA_WEBGL,n.premultiplyAlpha),Et.pixelStorei(Et.UNPACK_ALIGNMENT,n.unpackAlignment),e.isDataTexture?Et.texSubImage2D(Et.TEXTURE_2D,i,t.x,t.y,r,s,o,a,e.image.data):e.isCompressedTexture?Et.compressedTexSubImage2D(Et.TEXTURE_2D,i,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,o,e.mipmaps[0].data):Et.texSubImage2D(Et.TEXTURE_2D,i,t.x,t.y,o,a,e.image),0===i&&n.generateMipmaps&&Et.generateMipmap(Et.TEXTURE_2D),it.unbindTexture()},this.copyTextureToTexture3D=function(t,e,n,i,r=0){if(g.isWebGL1Renderer)return void console.warn(\\\\\\\"THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.\\\\\\\");const s=t.max.x-t.min.x+1,o=t.max.y-t.min.y+1,a=t.max.z-t.min.z+1,l=Tt.convert(i.format),c=Tt.convert(i.type);let u;if(i.isDataTexture3D)at.setTexture3D(i,0),u=Et.TEXTURE_3D;else{if(!i.isDataTexture2DArray)return void console.warn(\\\\\\\"THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.\\\\\\\");at.setTexture2DArray(i,0),u=Et.TEXTURE_2D_ARRAY}Et.pixelStorei(Et.UNPACK_FLIP_Y_WEBGL,i.flipY),Et.pixelStorei(Et.UNPACK_PREMULTIPLY_ALPHA_WEBGL,i.premultiplyAlpha),Et.pixelStorei(Et.UNPACK_ALIGNMENT,i.unpackAlignment);const h=Et.getParameter(Et.UNPACK_ROW_LENGTH),d=Et.getParameter(Et.UNPACK_IMAGE_HEIGHT),p=Et.getParameter(Et.UNPACK_SKIP_PIXELS),_=Et.getParameter(Et.UNPACK_SKIP_ROWS),m=Et.getParameter(Et.UNPACK_SKIP_IMAGES),f=n.isCompressedTexture?n.mipmaps[0]:n.image;Et.pixelStorei(Et.UNPACK_ROW_LENGTH,f.width),Et.pixelStorei(Et.UNPACK_IMAGE_HEIGHT,f.height),Et.pixelStorei(Et.UNPACK_SKIP_PIXELS,t.min.x),Et.pixelStorei(Et.UNPACK_SKIP_ROWS,t.min.y),Et.pixelStorei(Et.UNPACK_SKIP_IMAGES,t.min.z),n.isDataTexture||n.isDataTexture3D?Et.texSubImage3D(u,r,e.x,e.y,e.z,s,o,a,l,c,f.data):n.isCompressedTexture?(console.warn(\\\\\\\"THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture.\\\\\\\"),Et.compressedTexSubImage3D(u,r,e.x,e.y,e.z,s,o,a,l,f.data)):Et.texSubImage3D(u,r,e.x,e.y,e.z,s,o,a,l,c,f),Et.pixelStorei(Et.UNPACK_ROW_LENGTH,h),Et.pixelStorei(Et.UNPACK_IMAGE_HEIGHT,d),Et.pixelStorei(Et.UNPACK_SKIP_PIXELS,p),Et.pixelStorei(Et.UNPACK_SKIP_ROWS,_),Et.pixelStorei(Et.UNPACK_SKIP_IMAGES,m),0===r&&i.generateMipmaps&&Et.generateMipmap(u),it.unbindTexture()},this.initTexture=function(t){at.setTexture2D(t,0),it.unbindTexture()},this.resetState=function(){y=0,x=0,b=null,it.reset(),At.reset()},\\\\\\\"undefined\\\\\\\"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\\\\\\\"observe\\\\\\\",{detail:this}))}const Un={};var Gn,Vn,Hn;!function(t){t.WEBGL=\\\\\\\"webgl\\\\\\\",t.WEBGL2=\\\\\\\"webgl2\\\\\\\",t.EXPERIMENTAL_WEBGL=\\\\\\\"experimental-webgl\\\\\\\",t.EXPERIMENTAL_WEBGL2=\\\\\\\"experimental-webgl2\\\\\\\"}(Gn||(Gn={}));class jn{constructor(){this._next_renderer_id=0,this._renderers={},this._printDebug=!1,this._require_webgl2=!1,this._resolves=[]}setPrintDebug(t=!0){this._printDebug=t}printDebug(){return this._printDebug}printDebugMessage(t){this._printDebug&&console.warn(\\\\\\\"[Poly debug]\\\\\\\",t)}setRequireWebGL2(){this._require_webgl2||(this._require_webgl2=!0)}webgl2Available(){return void 0===this._webgl2_available&&(this._webgl2_available=this._set_webgl2_available()),this._webgl2_available}_set_webgl2_available(){const t=document.createElement(\\\\\\\"canvas\\\\\\\");return null!=(window.WebGL2RenderingContext&&t.getContext(Gn.WEBGL2))}createWebGLRenderer(t){const e=new zn(t);return this.printDebugMessage([\\\\\\\"create renderer:\\\\\\\",t]),e}createRenderingContext(t){let e=null;return this._require_webgl2&&(e=this._getRenderingContextWebgl(t,!0),e||console.warn(\\\\\\\"failed to create webgl2 context\\\\\\\")),e||(e=this._getRenderingContextWebgl(t,!1)),e}_getRenderingContextWebgl(t,e){let n;n=this.webgl2Available()||e?Gn.WEBGL2:Gn.WEBGL;let i=t.getContext(n,Un);return i?this.printDebugMessage(`create gl context: ${n}.`):(n=e?Gn.EXPERIMENTAL_WEBGL2:Gn.EXPERIMENTAL_WEBGL,this.printDebugMessage(`create gl context: ${n}.`),i=t.getContext(n,Un)),i}registerRenderer(t){if(t._polygon_id)throw new Error(\\\\\\\"render already registered\\\\\\\");t._polygon_id=this._next_renderer_id+=1,this._renderers[t._polygon_id]=t,1==Object.keys(this._renderers).length&&this.flush_callbacks_with_renderer(t)}deregisterRenderer(t){delete this._renderers[t._polygon_id],t.dispose()}firstRenderer(){const t=Object.keys(this._renderers)[0];return t?this._renderers[t]:null}renderers(){return Object.values(this._renderers)}flush_callbacks_with_renderer(t){let e;for(;e=this._resolves.pop();)e(t)}async waitForRenderer(){const t=this.firstRenderer();return t||new Promise(((t,e)=>{this._resolves.push(t)}))}renderTarget(t,e,n){return this.webgl2Available()?new Vt(t,e,n):new Z(t,e,n)}}class Wn{constructor(){this._root=\\\\\\\"/three/js/libs\\\\\\\",this._BASISPath=\\\\\\\"/basis\\\\\\\",this._DRACOPath=\\\\\\\"/draco\\\\\\\",this._DRACOGLTFPath=\\\\\\\"/draco/gltf\\\\\\\"}root(){return this._root}setRoot(t){this._root=t}BASISPath(){return this._BASISPath}DRACOPath(){return this._DRACOPath}DRACOGLTFPath(){return this._DRACOGLTFPath}}class qn{constructor(t){this.poly=t,this._node_register=new Map,this._node_register_categories=new Map,this._node_register_options=new Map}register(t,e,n){const i=t.context(),r=t.type().toLowerCase();let s=this._node_register.get(i);s||(s=new Map,this._node_register.set(i,s));if(s.get(r))console.error(`node ${i}/${r} already registered`);else{if(s.set(r,t),e){let t=this._node_register_categories.get(i);t||(t=new Map,this._node_register_categories.set(i,t)),t.set(r,e)}if(n){let t=this._node_register_options.get(i);t||(t=new Map,this._node_register_options.set(i,t)),t.set(r,n)}this.poly.pluginsRegister.registerNode(t)}}deregister(t,e){var n,i,r;null===(n=this._node_register.get(t))||void 0===n||n.delete(e),null===(i=this._node_register_categories.get(t))||void 0===i||i.delete(e),null===(r=this._node_register_options.get(t))||void 0===r||r.delete(e)}isRegistered(t,e){const n=this._node_register.get(t);return!!n&&null!=n.get(e)}registeredNodesForContextAndParentType(t,e){var n;if(this._node_register.get(t)){const i=[];return null===(n=this._node_register.get(t))||void 0===n||n.forEach(((t,e)=>{i.push(t)})),i.filter((n=>{var i;const r=n.type().toLowerCase(),s=null===(i=this._node_register_options.get(t))||void 0===i?void 0:i.get(r);if(s){const n=s.only,i=s.except,r=`${t}/${e}`;return n?n.includes(r):!i||!i.includes(r)}return!0}))}return[]}registeredNodes(t,e){const n={},i=this.registeredNodesForContextAndParentType(t,e);for(let t of i){n[t.type().toLowerCase()]=t}return n}registeredCategory(t,e){var n;return null===(n=this._node_register_categories.get(t))||void 0===n?void 0:n.get(e.toLowerCase())}map(){return this._node_register}}class Xn{constructor(t){this.poly=t,this._operation_register=new Map}register(t){const e=t.context();let n=this._operation_register.get(e);n||(n=new Map,this._operation_register.set(e,n));const i=t.type().toLowerCase();if(n.get(i)){const t=`operation ${e}/${i} already registered`;console.error(t)}else n.set(i,t),this.poly.pluginsRegister.registerOperation(t)}registeredOperationsForContextAndParentType(t,e){var n;if(this._operation_register.get(t)){const e=[];return null===(n=this._operation_register.get(t))||void 0===n||n.forEach(((t,n)=>{e.push(t)})),e}return[]}registeredOperation(t,e){const n=this._operation_register.get(t);if(n)return n.get(e.toLowerCase())}}class Yn extends class{constructor(){this._methods_names=[],this._methods_by_name=new Map}register(t,e){this._methods_names.push(e),this._methods_by_name.set(e,t)}getMethod(t){return this._methods_by_name.get(t)}availableMethods(){return this._methods_names}}{getMethod(t){return super.getMethod(t)}}!function(t){t.BasisTextureLoader=\\\\\\\"BasisTextureLoader\\\\\\\",t.DRACOLoader=\\\\\\\"DRACOLoader\\\\\\\",t.EXRLoader=\\\\\\\"EXRLoader\\\\\\\",t.FBXLoader=\\\\\\\"FBXLoader\\\\\\\",t.GLTFLoader=\\\\\\\"GLTFLoader\\\\\\\",t.OBJLoader=\\\\\\\"OBJLoader\\\\\\\",t.PDBLoader=\\\\\\\"PDBLoader\\\\\\\",t.PLYLoader=\\\\\\\"PLYLoader\\\\\\\",t.RGBELoader=\\\\\\\"RGBELoader\\\\\\\",t.SVGLoader=\\\\\\\"SVGLoader\\\\\\\",t.STLLoader=\\\\\\\"STLLoader\\\\\\\",t.TTFLoader=\\\\\\\"TTFLoader\\\\\\\"}(Vn||(Vn={}));class $n extends class{constructor(){this._module_by_name=new Map}register(t,e){this._module_by_name.set(t,e)}moduleNames(){const t=[];return this._module_by_name.forEach(((e,n)=>{t.push(n)})),t}module(t){return this._module_by_name.get(t)}}{}!function(t){t.GL_MESH_BASIC=\\\\\\\"GL_MESH_BASIC\\\\\\\",t.GL_MESH_LAMBERT=\\\\\\\"GL_MESH_LAMBERT\\\\\\\",t.GL_MESH_STANDARD=\\\\\\\"GL_MESH_STANDARD\\\\\\\",t.GL_MESH_PHONG=\\\\\\\"GL_MESH_PHONG\\\\\\\",t.GL_MESH_PHYSICAL=\\\\\\\"GL_MESH_PHYSICAL\\\\\\\",t.GL_PARTICLES=\\\\\\\"GL_PARTICLES\\\\\\\",t.GL_POINTS=\\\\\\\"GL_POINTS\\\\\\\",t.GL_LINE=\\\\\\\"GL_LINE\\\\\\\",t.GL_TEXTURE=\\\\\\\"GL_TEXTURE\\\\\\\",t.GL_VOLUME=\\\\\\\"GL_VOLUME\\\\\\\"}(Hn||(Hn={}));class Jn extends class{constructor(){this._controller_assembler_by_name=new Map}register(t,e,n){this._controller_assembler_by_name.set(t,{controller:e,assembler:n})}unregister(t){this._controller_assembler_by_name.delete(t)}}{assembler(t,e){const n=this._controller_assembler_by_name.get(e);if(n){return new(0,n.controller)(t,n.assembler)}return n}unregister(t){const e=this._controller_assembler_by_name.get(t);return super.unregister(t),e}}class Zn{constructor(t){this.poly=t,this._plugins_by_name=new Map,this._plugin_name_by_node_context_by_type=new Map,this._plugin_name_by_operation_context_by_type=new Map}register(t){this._current_plugin=t,this._plugins_by_name.set(t.name(),t),t.init(this.poly),this._current_plugin=void 0}pluginByName(t){return this._plugins_by_name.get(t)}registerNode(t){if(!this._current_plugin)return;const e=t.context(),n=t.type();let i=this._plugin_name_by_node_context_by_type.get(e);i||(i=new Map,this._plugin_name_by_node_context_by_type.set(e,i)),i.set(n,this._current_plugin.name())}registerOperation(t){if(!this._current_plugin)return;const e=t.context(),n=t.type();let i=this._plugin_name_by_operation_context_by_type.get(e);i||(i=new Map,this._plugin_name_by_operation_context_by_type.set(e,i)),i.set(n,this._current_plugin.name())}toJson(){const t={plugins:{},nodes:{},operations:{}};return this._plugins_by_name.forEach(((e,n)=>{t.plugins[n]=e.toJSON()})),this._plugin_name_by_node_context_by_type.forEach(((e,n)=>{t.nodes[n]={},e.forEach(((e,i)=>{t.nodes[n][i]=e}))})),this._plugin_name_by_operation_context_by_type.forEach(((e,n)=>{t.operations[n]={},e.forEach(((e,i)=>{t.operations[n][i]=e}))})),t}}class Qn{constructor(t){this._camera_types=[]}register(t){const e=t.type();this._camera_types.includes(e)||this._camera_types.push(e)}registeredTypes(){return this._camera_types}}var Kn=n(86);class ti{constructor(){this._blobUrlsByStoredUrl=new Map,this._blobsByStoredUrl=new Map,this._blobDataByNodeId=new Map,this._globalBlobsByStoredUrl=new Map}registerBlobUrl(t){console.log(\\\\\\\"registerBlobUrl\\\\\\\",t,ai.playerMode()),ai.playerMode()&&this._blobUrlsByStoredUrl.set(t.storedUrl,t.blobUrl)}blobUrl(t){return this._blobUrlsByStoredUrl.get(t)}clear(){this._blobUrlsByStoredUrl.clear(),this._blobsByStoredUrl.clear(),this._blobDataByNodeId.clear()}_clearBlobForNode(t){const e=this._blobDataByNodeId.get(t.graphNodeId());e&&(this._blobsByStoredUrl.delete(e.storedUrl),this._blobUrlsByStoredUrl.delete(e.storedUrl)),this._blobDataByNodeId.delete(t.graphNodeId())}_assignBlobToNode(t,e){this._clearBlobForNode(t),this._blobDataByNodeId.set(t.graphNodeId(),{storedUrl:e.storedUrl,fullUrl:e.fullUrl})}async fetchBlobGlobal(t){if(ai.playerMode())return{};try{if(this._blobUrlsByStoredUrl.get(t.storedUrl))return{};const e=ai.assetUrls.remapedUrl(t.fullUrl),n=await fetch(e||t.fullUrl);if(n.ok){const e=await n.blob();return this._blobsByStoredUrl.set(t.storedUrl,e),this._blobUrlsByStoredUrl.set(t.storedUrl,this.createBlobUrl(e)),this._globalBlobsByStoredUrl.set(t.storedUrl,e),{blobData:{storedUrl:t.storedUrl,fullUrl:t.fullUrl}}}return{error:`failed to fetch ${t.fullUrl}`}}catch(e){return{error:`failed to fetch ${t.fullUrl}`}}}async fetchBlobForNode(t){if(ai.playerMode())return{};try{if(this._blobUrlsByStoredUrl.get(t.storedUrl))return{};const e=ai.assetUrls.remapedUrl(t.fullUrl),n=await fetch(e||t.fullUrl);if(n.ok){const e=await n.blob();return this._blobsByStoredUrl.set(t.storedUrl,e),this._blobUrlsByStoredUrl.set(t.storedUrl,this.createBlobUrl(e)),this._scene=t.node.scene(),this._assignBlobToNode(t.node,{storedUrl:t.storedUrl,fullUrl:t.fullUrl}),{blobData:{storedUrl:t.storedUrl,fullUrl:t.fullUrl}}}return{error:`failed to fetch ${t.fullUrl}`}}catch(e){return{error:`failed to fetch ${t.fullUrl}`}}}forEachBlob(t){this._blobDataByNodeId.forEach(((e,n)=>{if(this._scene){if(this._scene.graph.nodeFromId(n)){const{storedUrl:n}=e,i=this._blobsByStoredUrl.get(n);i&&t(i,n)}}}));let e=[];const n=new Map;this._globalBlobsByStoredUrl.forEach(((t,i)=>{e.push(i),n.set(i,t)})),e=e.sort(),e.forEach((e=>{const n=this._globalBlobsByStoredUrl.get(e);n&&t(n,e)}))}createBlobUrl(t){return Object(Kn.a)(t)}}class ei{setMap(t){this._map=t}remapedUrl(t){if(!this._map)return;const e=t.split(\\\\\\\"?\\\\\\\"),n=e[0],i=e[1],r=this._map[n];return r?i?`${r}?${i}`:r:void 0}}var ni=n(93),ii=n(83);class ri{markAsLoaded(t,e){this._sceneJsonImporterContructor=e,t()}load(t){if(!this._sceneJsonImporterContructor)return;const e=[];t.forEach(((t,n)=>{e.push(n)}));for(let n of e){const e=t.get(n);e&&(this._loadElement(n,e,this._sceneJsonImporterContructor),t.delete(n))}}async _loadElement(t,e,n){const{sceneData:i,assetsManifest:r,unzippedData:s}=e,o=Object.keys(r);for(let t of o){const e=s[`assets/${r[t]}`];if(!e)return void console.error(t,e);const n=new Blob([e]),i={storedUrl:t,blobUrl:ai.blobs.createBlobUrl(n)};ai.blobs.registerBlobUrl(i)}ai.setPlayerMode(!0),ai.libs.setRoot(null);const a=`${Math.random()}`.replace(\\\\\\\".\\\\\\\",\\\\\\\"_\\\\\\\"),l={Poly:`___POLY_polyConfig_configurePolygonjs_${a}`,scriptElementId:`___POLY_polyConfig_scriptElement_${a}`,loadSceneArgs:`___POLY_polyConfig_loadSceneArgs_${a}`};window[l.Poly]=ai;const c={method:this._loadScene.bind(this),element:t,sceneData:i,sceneJsonImporterContructor:n};window[l.loadSceneArgs]=c;this._loadPolyConfig(l,s)||this._loadScene(t,i,n)}_loadPolyConfig(t,e){const n=e[ii.a.POLY_CONFIG];if(!n)return!1;const i=this._createJsBlob(n,\\\\\\\"polyConfig\\\\\\\");let r=document.getElementById(t.scriptElementId);const s=[];return s.push(`import {configurePolygonjs, configureScene} from '${i}';`),s.push(`configurePolygonjs(window.${t.Poly});`),s.push(`window.${t.loadSceneArgs}.method(window.${t.loadSceneArgs}.element, window.${t.loadSceneArgs}.sceneData, window.${t.loadSceneArgs}.sceneJsonImporterContructor, configureScene);`),s.push(`delete window.${t.loadSceneArgs};`),r||(r=document.createElement(\\\\\\\"script\\\\\\\"),r.setAttribute(\\\\\\\"type\\\\\\\",\\\\\\\"module\\\\\\\"),r.text=s.join(\\\\\\\"\\\\n\\\\\\\"),document.body.append(r)),!0}async _loadScene(t,e,n,i){this._fadeOutPoster(t);const r=new n(e),s=await r.scene();i&&i(s);const o=s.mainCameraNode();if(!o)return void console.warn(\\\\\\\"no master camera found\\\\\\\");const a=o.createViewer(t);s.play(),t.scene=s,t.viewer=a}_fadeOutPoster(t){const e=t.firstElementChild;e&&(e.style.pointerEvents=\\\\\\\"none\\\\\\\",ni.a.fadeOut(e).then((()=>{var t;null===(t=e.parentElement)||void 0===t||t.removeChild(e)})))}_createJsBlob(t,e){const n=new Blob([t]),i=new File([n],`${e}.js`,{type:\\\\\\\"application/javascript\\\\\\\"});return Object(Kn.a)(i)}}class si{setPerformanceManager(t){this._performanceManager=t}performanceManager(){return this._performanceManager||window.performance}}class oi{constructor(){this.renderersController=new jn,this.nodesRegister=new qn(this),this.operationsRegister=new Xn(this),this.expressionsRegister=new Yn,this.modulesRegister=new $n,this.assemblersRegister=new Jn,this.pluginsRegister=new Zn(this),this.camerasRegister=new Qn(this),this.blobs=new ti,this.assetUrls=new ei,this.selfContainedScenesLoader=new ri,this.performance=new si,this.scenesByUuid={},this._player_mode=!0,this._logger=null}static _instance_(){if(window.__POLYGONJS_POLY_INSTANCE__)return window.__POLYGONJS_POLY_INSTANCE__;{const t=new oi;return window.__POLYGONJS_POLY_INSTANCE__=t,window.__POLYGONJS_POLY_INSTANCE__}}setPlayerMode(t){this._player_mode=t}playerMode(){return this._player_mode}registerNode(t,e,n){this.nodesRegister.register(t,e,n)}registerOperation(t){this.operationsRegister.register(t)}registerCamera(t){this.camerasRegister.register(t)}registerPlugin(t){this.pluginsRegister.register(t)}registeredNodes(t,e){return this.nodesRegister.registeredNodes(t,e)}registeredOperation(t,e){return this.operationsRegister.registeredOperation(t,e)}registeredCameraTypes(){return this.camerasRegister.registeredTypes()}inWorkerThread(){return!1}desktopController(){}get libs(){return this._libs_controller=this._libs_controller||new Wn}setEnv(t){this._env=t}env(){return this._env}setLogger(t){this._logger=t}get logger(){return this._logger}log(t,...e){var n;null===(n=this.logger)||void 0===n||n.log(t,...e)}warn(t,...e){var n;null===(n=this.logger)||void 0===n||n.warn(t,...e)}error(t,...e){var n;null===(n=this.logger)||void 0===n||n.error(t,...e)}}const ai=oi._instance_();class li{constructor(){this._started=!1,this._start_time=0,this._previous_timestamp=0,this._nodes_cook_data={},this._durations_by_name={},this._durations_count_by_name={}}profile(t,e){const n=ai.performance.performanceManager(),i=n.now();e();const r=n.now()-i;console.log(`${t}: ${r}`)}start(){if(!this._started){this.reset(),this._started=!0;const t=ai.performance.performanceManager();this._start_time=t.now(),this._nodes_cook_data={},this._previous_timestamp=this._start_time}}stop(){this.reset()}reset(){this._started=!1,this._start_time=null,this._durations_by_name={},this._durations_count_by_name={},this._nodes_cook_data={}}started(){return this._started}record_node_cook_data(t,e){const n=t.graphNodeId();null==this._nodes_cook_data[n]&&(this._nodes_cook_data[n]=new c(t)),this._nodes_cook_data[n].update_cook_data(e)}record(t){this.started()||this.start();const e=performance.now();return null==this._durations_by_name[t]&&(this._durations_by_name[t]=0),this._durations_by_name[t]+=e-this._previous_timestamp,null==this._durations_count_by_name[t]&&(this._durations_count_by_name[t]=0),this._durations_count_by_name[t]+=1,this._previous_timestamp=e}print(){this.print_node_cook_data(),this.print_recordings()}print_node_cook_data(){let t=Object.values(this._nodes_cook_data);t=f.sortBy(t,(t=>t.total_cook_time()));const e=t.map((t=>t.print_object()));console.log(\\\\\\\"--------------- NODES COOK TIME -----------\\\\\\\");const n=[],i=f.sortBy(e,(t=>-t.total_cook_time));for(let t of i)n.push(t);return console.table(n),e}print_recordings(){const t=b.clone(this._durations_by_name),e=b.clone(this._durations_count_by_name),n=[],i={};for(let e of Object.keys(t)){const r=t[e];n.push(r),null==i[r]&&(i[r]=[]),i[r].push(e)}n.sort(((t,e)=>t-e));const r=f.uniq(n);console.log(\\\\\\\"--------------- PERF RECORDINGS -----------\\\\\\\");const s=[];for(let t of r){const n=i[t];for(let i of n){const n=e[i],r={duration:t,name:i,count:n,duration_per_iteration:t/n};s.push(r)}}return console.table(s),s}}class ci{constructor(t){this.scene=t}setListener(t){this._events_listener?console.warn(\\\\\\\"scene already has a listener\\\\\\\"):(this._events_listener=t,this.run_on_add_listener_callbacks())}onAddListener(t){this._events_listener?t():(this._on_add_listener_callbacks=this._on_add_listener_callbacks||[],this._on_add_listener_callbacks.push(t))}run_on_add_listener_callbacks(){if(this._on_add_listener_callbacks){let t;for(;t=this._on_add_listener_callbacks.pop();)t();this._on_add_listener_callbacks=void 0}}get eventsListener(){return this._events_listener}dispatch(t,e,n){var i;null===(i=this._events_listener)||void 0===i||i.process_events(t,e,n)}emitAllowed(){return null!=this._events_listener&&this.scene.loadingController.loaded()&&this.scene.loadingController.autoUpdating()}}class ui{constructor(){this._params_by_id=new Map}register_param(t){this._params_by_id.set(t.graphNodeId(),t)}deregister_param(t){this._params_by_id.delete(t.graphNodeId())}regenerate_referring_expressions(t){t.nameController.graph_node.setSuccessorsDirty(t)}}class hi{constructor(t){this.scene=t,this._lifecycle_on_create_allowed=!0}onCreateHookAllowed(){return this.scene.loadingController.loaded()&&this._lifecycle_on_create_allowed}onCreatePrevent(t){this._lifecycle_on_create_allowed=!1,t(),this._lifecycle_on_create_allowed=!0}}class di{constructor(t){this.dispatcher=t,this._nodes_by_graph_node_id=new Map,this._require_canvas_event_listeners=!1,this._activeEventDatas=[]}registerNode(t){this._nodes_by_graph_node_id.set(t.graphNodeId(),t),this.updateViewerEventListeners()}unregisterNode(t){this._nodes_by_graph_node_id.delete(t.graphNodeId()),this.updateViewerEventListeners()}processEvent(t){0!=this._activeEventDatas.length&&this._nodes_by_graph_node_id.forEach((e=>e.processEvent(t)))}updateViewerEventListeners(){this._update_active_event_types(),this._require_canvas_event_listeners&&this.dispatcher.scene.viewersRegister.traverseViewers((t=>{t.eventsController.updateEvents(this)}))}activeEventDatas(){return this._activeEventDatas}_update_active_event_types(){const t=new Map;this._nodes_by_graph_node_id.forEach((e=>{if(e.parent()){const n=e.activeEventDatas();for(let e of n)t.set(e,!0)}})),this._activeEventDatas=[],t.forEach(((t,e)=>{this._activeEventDatas.push(e)}))}}var pi;!function(t){t.LOADED=\\\\\\\"sceneLoaded\\\\\\\",t.PLAY=\\\\\\\"play\\\\\\\",t.PAUSE=\\\\\\\"pause\\\\\\\",t.TICK=\\\\\\\"tick\\\\\\\"}(pi||(pi={}));const _i=[pi.LOADED,pi.PLAY,pi.PAUSE,pi.TICK];class mi extends di{type(){return\\\\\\\"scene\\\\\\\"}acceptedEventTypes(){return _i.map((t=>`${t}`))}}class fi{constructor(t){this.scene=t,this._loading_state=!1,this._auto_updating=!0,this._first_object_loaded=!1}get LOADED_EVENT_CONTEXT(){return this._LOADED_EVENT_CONTEXT=this._LOADED_EVENT_CONTEXT||{event:new Event(pi.LOADED)}}markAsLoading(){this._set_loading_state(!0)}async markAsLoaded(){this.scene.missingExpressionReferencesController.resolve_missing_references(),await this._set_loading_state(!1),this.trigger_loaded_event()}trigger_loaded_event(){globalThis.Event&&this.scene.eventsDispatcher.sceneEventsController.processEvent(this.LOADED_EVENT_CONTEXT)}async _set_loading_state(t){this._loading_state=t,await this.set_auto_update(!this._loading_state)}isLoading(){return this._loading_state}loaded(){return!this._loading_state}autoUpdating(){return this._auto_updating}async set_auto_update(t){if(this._auto_updating!==t&&(this._auto_updating=t,this._auto_updating)){const t=this.scene.root();t&&await t.processQueue()}}on_first_object_loaded(){var t;if(!this._first_object_loaded){this._first_object_loaded=!0;const e=document.getElementById(\\\\\\\"scene_loading_container\\\\\\\");e&&(null===(t=e.parentElement)||void 0===t||t.removeChild(e))}}}const gi={EMPTY:\\\\\\\"\\\\\\\",UV:\\\\\\\"/COP/imageUv\\\\\\\",ENV_MAP:\\\\\\\"/COP/envMap\\\\\\\",CUBE_MAP:\\\\\\\"/COP/cubeCamera\\\\\\\"};class vi{constructor(t=\\\\\\\"\\\\\\\"){this._path=t,this._node=null}set_path(t){this._path=t}set_node(t){this._node=t}path(){return this._path}node(){return this._node}resolve(t){this._node=xi.findNode(t,this._path)}clone(){const t=new vi(this._path);return t.set_node(this._node),t}nodeWithContext(t,e){const n=this.node();if(!n)return void(null==e||e.set(`no node found at ${this.path()}`));const i=n.context();return i==t?n:void(null==e||e.set(`expected ${t} node, but got a ${i}`))}}class yi{constructor(t=\\\\\\\"\\\\\\\"){this._path=t,this._param=null}set_path(t){this._path=t}set_param(t){this._param=t}path(){return this._path}param(){return this._param}resolve(t){this._param=xi.findParam(t,this._path)}clone(){const t=new yi(this._path);return t.set_param(this._param),t}paramWithType(t,e){const n=this.param();if(n)return n.type()==t?n:void(null==e||e.set(`expected ${t} node, but got a ${n.type()}`));null==e||e.set(`no param found at ${this.path()}`)}}class xi{static split_parent_child(t){const e=t.split(xi.SEPARATOR).filter((t=>t.length>0)),n=e.pop();return{parent:e.join(xi.SEPARATOR),child:n}}static findNode(t,e,n){if(!t)return null;const i=e.split(xi.SEPARATOR).filter((t=>t.length>0)),r=i[0];let s=null;if(e[0]!==xi.SEPARATOR){switch(r){case xi.PARENT:null==n||n.add_path_element(r),s=t.parent();break;case xi.CURRENT:null==n||n.add_path_element(r),s=t;break;default:s=t.node(r),s&&(null==n||n.add_node(r,s))}if(null!=s&&i.length>1){const t=i.slice(1).join(xi.SEPARATOR);s=this.findNode(s,t,n)}return s}{const i=e.substr(1);s=this.findNode(t.root(),i,n)}return s}static findParam(t,e,n){if(!t)return null;const i=e.split(xi.SEPARATOR);if(1===i.length)return t.params.get(i[0]);{const e=i.slice(0,+(i.length-2)+1||void 0).join(xi.SEPARATOR),r=this.findNode(t,e,n);if(null!=r){const t=i[i.length-1],e=r.params.get(t);return n&&e&&n.add_node(t,e),e}return null}}static relativePath(t,e){const n=this.closestCommonParent(t,e);if(n){const i=this.distanceToParent(t,n);let r=\\\\\\\"\\\\\\\";if(i>0){let t=0;const e=[];for(;t++<i;)e.push(xi.PARENT);r=e.join(xi.SEPARATOR)+xi.SEPARATOR}const s=n.path().split(xi.SEPARATOR).filter((t=>t.length>0)),o=e.path().split(xi.SEPARATOR).filter((t=>t.length>0)),a=[];let l=0;for(let t of o)s[l]||a.push(t),l++;return`${r}${a.join(xi.SEPARATOR)}`}return e.path()}static closestCommonParent(t,e){const n=this.parents(t).reverse().concat([t]),i=this.parents(e).reverse().concat([e]),r=Math.min(n.length,i.length);let s=null;for(let t=0;t<r;t++)n[t].graphNodeId()==i[t].graphNodeId()&&(s=n[t]);return s}static parents(t){const e=[];let n=t.parent();for(;n;)e.push(n),n=n.parent();return e}static distanceToParent(t,e){let n=0,i=t;const r=e.graphNodeId();for(;i&&i.graphNodeId()!=r;)n+=1,i=i.parent();return i&&i.graphNodeId()==r?n:-1}static makeAbsolutePath(t,e){if(e[0]==xi.SEPARATOR)return e;const n=e.split(xi.SEPARATOR),i=n.shift();if(!i)return t.path();switch(i){case\\\\\\\"..\\\\\\\":{const e=t.parent();return e?this.makeAbsolutePath(e,n.join(xi.SEPARATOR)):null}case\\\\\\\".\\\\\\\":return this.makeAbsolutePath(t,n.join(xi.SEPARATOR));default:return[t.path(),e].join(xi.SEPARATOR)}}}xi.SEPARATOR=\\\\\\\"/\\\\\\\",xi.DOT=\\\\\\\".\\\\\\\",xi.CURRENT=xi.DOT,xi.PARENT=\\\\\\\"..\\\\\\\",xi.CURRENT_WITH_SLASH=`${xi.CURRENT}/`,xi.PARENT_WITH_SLASH=`${xi.PARENT}/`,xi.NON_LETTER_PREFIXES=[xi.SEPARATOR,xi.DOT];class bi{constructor(t,e){this.param=t,this.path=e}absolute_path(){return xi.makeAbsolutePath(this.param.node,this.path)}matches_path(t){return this.absolute_path()==t}update_from_method_dependency_name_change(){var t;null===(t=this.param.expressionController)||void 0===t||t.update_from_method_dependency_name_change()}resolve_missing_dependencies(){const t=this.param.rawInputSerialized();this.param.set(this.param.defaultValue()),this.param.set(t)}}class wi{constructor(t){this.scene=t,this.references=new Map}register(t,e,n){const i=new bi(t,n);return u.pushOnArrayAtEntry(this.references,t.graphNodeId(),i),i}deregister_param(t){this.references.delete(t.graphNodeId())}resolve_missing_references(){const t=[];this.references.forEach((e=>{for(let n of e)this._is_reference_resolvable(n)&&t.push(n)}));for(let e of t)e.resolve_missing_dependencies()}_is_reference_resolvable(t){const e=t.absolute_path();if(e){if(this.scene.node(e))return!0;{const t=xi.split_parent_child(e);if(t.child){const e=this.scene.node(t.parent);if(e){if(e.params.get(t.child))return!0}}}}}check_for_missing_references(t){this._check_for_missing_references_for_node(t);for(let e of t.params.all)this._check_for_missing_references_for_param(e)}_check_for_missing_references_for_node(t){const e=t.graphNodeId();this.references.forEach(((n,i)=>{let r=!1;for(let e of n)e.matches_path(t.path())&&(r=!0,e.resolve_missing_dependencies());r&&this.references.delete(e)}))}_check_for_missing_references_for_param(t){const e=t.graphNodeId();this.references.forEach(((n,i)=>{let r=!1;for(let e of n)e.matches_path(t.path())&&(r=!0,e.resolve_missing_dependencies());r&&this.references.delete(e)}))}}class Ti{constructor(t){this.node=t,this._dirty_count=0,this._dirty=!0}dispose(){this._cached_successors=void 0,this._post_dirty_hooks=void 0,this._post_dirty_hook_names=void 0}isDirty(){return!0===this._dirty}dirtyTimestamp(){return this._dirty_timestamp}dirtyCount(){return this._dirty_count}addPostDirtyHook(t,e){this._post_dirty_hook_names=this._post_dirty_hook_names||[],this._post_dirty_hooks=this._post_dirty_hooks||[],this._post_dirty_hook_names.includes(t)?console.warn(`hook with name ${t} already exists`,this.node):(this._post_dirty_hook_names.push(t),this._post_dirty_hooks.push(e))}removePostDirtyHook(t){if(this._post_dirty_hook_names&&this._post_dirty_hooks){const e=this._post_dirty_hook_names.indexOf(t);e>=0&&(this._post_dirty_hook_names.splice(e,1),this._post_dirty_hooks.splice(e,1))}}hasHook(t){return!!this._post_dirty_hook_names&&this._post_dirty_hook_names.includes(t)}removeDirtyState(){this._dirty=!1}setForbiddenTriggerNodes(t){this._forbidden_trigger_nodes=t.map((t=>t.graphNodeId()))}setDirty(t,e){if(null==e&&(e=!0),t&&this._forbidden_trigger_nodes&&this._forbidden_trigger_nodes.includes(t.graphNodeId()))return;null==t&&(t=this.node),this._dirty=!0;const n=ai.performance.performanceManager();this._dirty_timestamp=n.now(),this._dirty_count+=1,this.runPostDirtyHooks(t),!0===e&&this.setSuccessorsDirty(t)}runPostDirtyHooks(t){if(this._post_dirty_hooks){const e=this.node.scene().cooker;if(e.blocked)e.enqueue(this.node,t);else for(let e of this._post_dirty_hooks)e(t)}}setSuccessorsDirty(t){this._cached_successors=this._cached_successors||this.node.graphAllSuccessors();for(let e of this._cached_successors)e.dirtyController.setDirty(t,false)}clearSuccessorsCache(){this._cached_successors=void 0}clearSuccessorsCacheWithPredecessors(){this.clearSuccessorsCache();for(let t of this.node.graphAllPredecessors())t.dirtyController.clearSuccessorsCache()}}class Ai{constructor(t,e){this._scene=t,this._name=e,this._dirty_controller=new Ti(this),this._graph_node_id=t.graph.nextId(),t.graph.addNode(this),this._graph=t.graph}dispose(){this._dirty_controller.dispose(),this.graphRemove()}name(){return this._name}setName(t){this._name=t}scene(){return this._scene}graphNodeId(){return this._graph_node_id}get dirtyController(){return this._dirty_controller}setDirty(t){t=t||this,this._dirty_controller.setDirty(t)}setSuccessorsDirty(t){this._dirty_controller.setSuccessorsDirty(t)}removeDirtyState(){this._dirty_controller.removeDirtyState()}isDirty(){return this._dirty_controller.isDirty()}addPostDirtyHook(t,e){this._dirty_controller.addPostDirtyHook(t,e)}graphRemove(){this._graph.removeNode(this)}addGraphInput(t,e=!0){return this._graph.connect(t,this,e)}removeGraphInput(t){this._graph.disconnect(t,this)}graphDisconnectPredecessors(){this._graph.disconnectPredecessors(this)}graphDisconnectSuccessors(){this._graph.disconnectSuccessors(this)}graphPredecessorIds(){return this._graph.predecessorIds(this._graph_node_id)||[]}graphPredecessors(){return this._graph.predecessors(this)}graphSuccessors(){return this._graph.successors(this)}graphAllPredecessors(){return this._graph.allPredecessors(this)}graphAllSuccessors(){return this._graph.allSuccessors(this)}}var Ei;!function(t){t.CREATED=\\\\\\\"node_created\\\\\\\",t.DELETED=\\\\\\\"node_deleted\\\\\\\",t.NAME_UPDATED=\\\\\\\"node_name_update\\\\\\\",t.OVERRIDE_CLONABLE_STATE_UPDATE=\\\\\\\"node_override_clonable_state_update\\\\\\\",t.NAMED_OUTPUTS_UPDATED=\\\\\\\"node_named_outputs_updated\\\\\\\",t.NAMED_INPUTS_UPDATED=\\\\\\\"node_named_inputs_updated\\\\\\\",t.INPUTS_UPDATED=\\\\\\\"node_inputs_updated\\\\\\\",t.PARAMS_UPDATED=\\\\\\\"node_params_updated\\\\\\\",t.UI_DATA_POSITION_UPDATED=\\\\\\\"node_ui_data_position_updated\\\\\\\",t.UI_DATA_COMMENT_UPDATED=\\\\\\\"node_ui_data_comment_updated\\\\\\\",t.ERROR_UPDATED=\\\\\\\"node_error_updated\\\\\\\",t.FLAG_BYPASS_UPDATED=\\\\\\\"bypass_flag_updated\\\\\\\",t.FLAG_DISPLAY_UPDATED=\\\\\\\"display_flag_updated\\\\\\\",t.FLAG_OPTIMIZE_UPDATED=\\\\\\\"optimize_flag_updated\\\\\\\",t.SELECTION_UPDATED=\\\\\\\"selection_updated\\\\\\\"}(Ei||(Ei={}));class Mi{constructor(t,e=0,n=0){this.node=t,this._position=new d.a,this._width=50,this._color=new D.a(.75,.75,.75),this._layout_vertical=!0,this._json={x:0,y:0},this._position.x=e,this._position.y=n}setComment(t){this._comment=t,this.node.emit(Ei.UI_DATA_COMMENT_UPDATED)}comment(){return this._comment}setColor(t){this._color=t}color(){return this._color}setLayoutHorizontal(){this._layout_vertical=!1}isLayoutVertical(){return this._layout_vertical}copy(t){this._position.copy(t.position()),this._color.copy(t.color())}position(){return this._position}setPosition(t,e=0){if(m.isNumber(t)){const n=t;this._position.set(n,e)}else this._position.copy(t);this.node.emit(Ei.UI_DATA_POSITION_UPDATED)}translate(t,e=!1){this._position.add(t),e&&(this._position.x=Math.round(this._position.x),this._position.y=Math.round(this._position.y)),this.node.emit(Ei.UI_DATA_POSITION_UPDATED)}toJSON(){return this._json.x=this._position.x,this._json.y=this._position.y,this._json.comment=this._comment,this._json}}class Si{constructor(t){this.node=t,this._state=!0,this._hooks=null}onUpdate(t){this._hooks=this._hooks||[],this._hooks.push(t)}_on_update(){}set(t){this._state!=t&&(this._state=t,this._on_update(),this.runHooks())}active(){return this._state}toggle(){this.set(!this._state)}runHooks(){if(this._hooks)for(let t of this._hooks)t()}}class Ci extends Si{constructor(){super(...arguments),this._state=!1}_on_update(){this.node.emit(Ei.FLAG_BYPASS_UPDATED),this.node.setDirty()}}class Ni extends Si{_on_update(){this.node.emit(Ei.FLAG_DISPLAY_UPDATED)}}class Li extends Si{constructor(){super(...arguments),this._state=!1}_on_update(){this.node.emit(Ei.FLAG_OPTIMIZE_UPDATED)}}class Oi{constructor(t){this.node=t}hasDisplay(){return!1}hasBypass(){return!1}hasOptimize(){return!1}}function Ri(t){return class extends t{constructor(){super(...arguments),this.display=new Ni(this.node)}hasDisplay(){return!0}}}function Pi(t){return class extends t{constructor(){super(...arguments),this.bypass=new Ci(this.node)}hasBypass(){return!0}}}function Ii(t){return class extends t{constructor(){super(...arguments),this.optimize=new Li(this.node)}hasOptimize(){return!0}}}class Fi extends(Ri(Oi)){}class Di extends(Pi(Oi)){}class ki extends(Pi(Ri(Oi))){}class Bi extends(Ii(Pi(Oi))){}class zi extends(Ii(Pi(Ri(Oi)))){}class Ui{constructor(t){this.node=t}}class Gi extends Ui{active(){return this.paramsTimeDependent()||this.inputsTimeDependent()}paramsTimeDependent(){const t=this.node.params.names;for(let e of t){const t=this.node.params.get(e);if(t&&t.states.timeDependent.active())return!0}return!1}inputsTimeDependent(){const t=this.node.io.inputs.inputs();for(let e of t)if(e&&e.states.timeDependent.active())return!0;return!1}forceTimeDependent(){const t=this.node.graphPredecessors().map((t=>t.graphNodeId())),e=this.node.scene().timeController.graphNode;t.includes(e.graphNodeId())||this.node.addGraphInput(e,!1)}unforceTimeDependent(){const t=this.node.scene().timeController.graphNode;this.node.removeGraphInput(t)}}class Vi extends Ui{set(t){this._message!=t&&(t&&ai.warn(`[${this.node.path()}] error: '${t}'`),this._message=t,this.onUpdate())}message(){return this._message}clear(){this.set(void 0)}active(){return null!=this._message}onUpdate(){null!=this._message&&this.node._setContainer(null,`from error '${this._message}'`),this.node.emit(Ei.ERROR_UPDATED)}}class Hi{constructor(t){this.node=t,this.timeDependent=new Gi(this.node),this.error=new Vi(this.node)}}class ji{constructor(t){this.node=t,this._graph_node=new Ai(t.scene(),\\\\\\\"node_name_controller\\\\\\\")}dispose(){this._graph_node.dispose(),this._on_set_name_hooks=void 0,this._on_set_fullPath_hooks=void 0}get graph_node(){return this._graph_node}static base_name(t){let e=t.type();const n=e[e.length-1];return m.isNaN(parseInt(n))||(e+=\\\\\\\"_\\\\\\\"),`${e}1`}request_name_to_parent(t){const e=this.node.parent();e&&e.childrenAllowed()&&e.childrenController?e.childrenController.set_child_name(this.node,t):console.warn(\\\\\\\"request_name_to_parent failed, no parent found\\\\\\\")}setName(t){t!=this.node.name()&&this.request_name_to_parent(t)}update_name_from_parent(t){var e;if(this.node._set_core_name(t),this.post_setName(),this.run_post_set_fullPath_hooks(),this.node.childrenAllowed()){const t=null===(e=this.node.childrenController)||void 0===e?void 0:e.children();if(t)for(let e of t)e.nameController.run_post_set_fullPath_hooks()}this.node.lifecycle.creation_completed&&(this.node.scene().missingExpressionReferencesController.check_for_missing_references(this.node),this.node.scene().expressionsController.regenerate_referring_expressions(this.node)),this.node.scene().referencesController.notify_name_updated(this.node),this.node.emit(Ei.NAME_UPDATED)}add_post_set_name_hook(t){this._on_set_name_hooks=this._on_set_name_hooks||[],this._on_set_name_hooks.push(t)}add_post_set_fullPath_hook(t){this._on_set_fullPath_hooks=this._on_set_fullPath_hooks||[],this._on_set_fullPath_hooks.push(t)}post_setName(){if(this._on_set_name_hooks)for(let t of this._on_set_name_hooks)t()}run_post_set_fullPath_hooks(){if(this._on_set_fullPath_hooks)for(let t of this._on_set_fullPath_hooks)t()}}class Wi{constructor(t){this.node=t,this._parent=null}parent(){return this._parent}setParent(t){t!=this.node.parentController.parent()&&(this._parent=t,this._parent&&this.node.nameController.request_name_to_parent(ji.base_name(this.node)))}is_selected(){var t,e,n;return(null===(n=null===(e=null===(t=this.parent())||void 0===t?void 0:t.childrenController)||void 0===e?void 0:e.selection)||void 0===n?void 0:n.contains(this.node))||!1}path(t){const e=xi.SEPARATOR;if(null!=this._parent){if(this._parent==t)return this.node.name();{const n=this._parent.path(t);return n===e?n+this.node.name():n+e+this.node.name()}}return e}onSetParent(){if(this._on_set_parent_hooks)for(let t of this._on_set_parent_hooks)t()}findNode(t){if(null==t)return null;if(t==xi.CURRENT||t==xi.CURRENT_WITH_SLASH)return this.node;if(t==xi.PARENT||t==xi.PARENT_WITH_SLASH)return this.node.parent();const e=xi.SEPARATOR;if(t===e)return this.node.scene().root();if(t[0]===e)return t=t.substring(1,t.length),this.node.scene().root().node(t);if(t.split){const n=t.split(e);if(1===n.length){const t=n[0];return this.node.childrenController?this.node.childrenController.child_by_name(t):null}return xi.findNode(this.node,t)}return console.error(\\\\\\\"unexpected path given:\\\\\\\",t),null}}const qi=/[, ]/,Xi=/\\\\d+$/,Yi=/^0+/,$i=/,| /,Ji=/^-?\\\\d+\\\\.?\\\\d*$/;var Zi,Qi,Ki,tr,er,nr,ir,rr;!function(t){t.TRUE=\\\\\\\"true\\\\\\\",t.FALSE=\\\\\\\"false\\\\\\\"}(Zi||(Zi={}));class sr{static isBoolean(t){return t==Zi.TRUE||t==Zi.FALSE}static toBoolean(t){return t==Zi.TRUE}static isNumber(t){return Ji.test(t)}static tailDigits(t){const e=t.match(Xi);return e?parseInt(e[0]):0}static increment(t){const e=t.match(Xi);if(e){let n=e[0],i=\\\\\\\"\\\\\\\";const r=n.match(Yi);r&&(i=r[0]);const s=parseInt(n);0==s&&i.length>0&&\\\\\\\"0\\\\\\\"==i[i.length-1]&&(i=i.slice(0,-1));return`${t.substring(0,t.length-e[0].length)}${i}${s+1}`}return`${t}1`}static pluralize(t){return\\\\\\\"s\\\\\\\"!==t[t.length-1]?`${t}s`:t}static camelCase(t){const e=t.replace(/_/g,\\\\\\\" \\\\\\\").split(\\\\\\\" \\\\\\\");let n=\\\\\\\"\\\\\\\";for(let t=0;t<e.length;t++){let i=e[t].toLowerCase();t>0&&(i=this.upperFirst(i)),n+=i}return n}static upperFirst(t){return t[0].toUpperCase()+t.substr(1)}static titleize(t){return t.split(/\\\\s|_/g).map((t=>this.upperFirst(t))).join(\\\\\\\" \\\\\\\")}static precision(t,e=2){e=Math.max(e,0);const n=`${t}`.split(\\\\\\\".\\\\\\\");if(e<=0)return n[0];let i=n[1];if(void 0!==i)return i.length>e&&(i=i.substring(0,e)),i=i.padEnd(e,\\\\\\\"0\\\\\\\"),`${n[0]}.${i}`;{const n=`${t}.`,i=n.length+e;return n.padEnd(i,\\\\\\\"0\\\\\\\")}}static ensureFloat(t){const e=`${t}`;return e.indexOf(\\\\\\\".\\\\\\\")>=0?e:`${e}.0`}static ensureInteger(t){const e=`${t}`;return e.indexOf(\\\\\\\".\\\\\\\")>=0?e.split(\\\\\\\".\\\\\\\")[0]:e}static matchMask(t,e){if(\\\\\\\"*\\\\\\\"===e)return!0;if(t==e)return!0;const n=e.split(\\\\\\\" \\\\\\\");if(n.length>1){for(let e of n){if(this.matchMask(t,e))return!0}return!1}e=`^${e=e.split(\\\\\\\"*\\\\\\\").join(\\\\\\\".*\\\\\\\")}$`;return new RegExp(e).test(t)}static matchesOneMask(t,e){let n=!1;for(let i of e)sr.matchMask(t,i)&&(n=!0);return n}static attribNames(t){const e=t.split(qi),n=new Set;for(let t of e)t=t.trim(),t.length>0&&n.add(t);const i=new Array(n.size);let r=0;return n.forEach((t=>{i[r]=t,r++})),i}static indices(t){const e=t.split($i);if(e.length>1){const t=e.flatMap((t=>this.indices(t)));return f.uniq(t).sort(((t,e)=>t-e))}{const t=e[0];if(t){const e=\\\\\\\"-\\\\\\\";if(t.indexOf(e)>0){const n=t.split(e);return f.range(parseInt(n[0]),parseInt(n[1])+1)}{const e=parseInt(t);return m.isNumber(e)?[e]:[]}}return[]}}static escapeLineBreaks(t){return t.replace(/(\\\\r\\\\n|\\\\n|\\\\r)/gm,\\\\\\\"\\\\\\\\n\\\\\\\")}static sanitizeName(t){return t=(t=t.replace(/[^A-Za-z0-9]/g,\\\\\\\"_\\\\\\\")).replace(/^[0-9]/,\\\\\\\"_\\\\\\\")}}class or{constructor(t){this._node=t,this._node_ids=[],this._json=[]}node(){return this._node}nodes(){return this._node.scene().graph.nodesFromIds(this._node_ids)}contains(t){return this._node_ids.includes(t.graphNodeId())}equals(t){const e=t.map((t=>t.graphNodeId())).sort();return f.isEqual(e,this._node_ids)}clear(){this._node_ids=[],this.send_update_event()}set(t){this._node_ids=[],this.add(t)}add(t){const e=t.map((t=>t.graphNodeId()));this._node_ids=f.union(this._node_ids,e),this.send_update_event()}remove(t){const e=t.map((t=>t.graphNodeId()));this._node_ids=f.difference(this._node_ids,e),this.send_update_event()}send_update_event(){this._node.emit(Ei.SELECTION_UPDATED)}toJSON(){return this._json=this._json||[],this._json=this._node_ids.map((t=>t)),this._json}}!function(t){t.ALWAYS=\\\\\\\"always\\\\\\\",t.NEVER=\\\\\\\"never\\\\\\\",t.FROM_NODE=\\\\\\\"from_node\\\\\\\"}(Qi||(Qi={}));class ar{static unreachable(t){throw new Error(\\\\\\\"Didn't expect to get here\\\\\\\")}}class lr{constructor(t){this.inputs_controller=t,this._clone_required_states=[],this._overridden=!1}init_inputs_cloned_state(t){m.isArray(t)?this._cloned_states=t:this._cloned_state=t,this._update_clone_required_state()}override_cloned_state_allowed(){if(this._cloned_states)for(let t of this._cloned_states)if(t==Qi.FROM_NODE)return!0;return!!this._cloned_state&&this._cloned_state==Qi.FROM_NODE}clone_required_state(t){return this._clone_required_states[t]}clone_required_states(){return this._clone_required_states}_get_clone_required_state(t){const e=this._cloned_states;if(e){const n=e[t];if(null!=n)return this.clone_required_from_state(n)}return!this._cloned_state||this.clone_required_from_state(this._cloned_state)}clone_required_from_state(t){switch(t){case Qi.ALWAYS:return!0;case Qi.NEVER:return!1;case Qi.FROM_NODE:return!this._overridden}return ar.unreachable(t)}override_cloned_state(t){this._overridden=t,this._update_clone_required_state()}overriden(){return this._overridden}_update_clone_required_state(){if(this._cloned_states){const t=[];for(let e=0;e<this._cloned_states.length;e++)t[e]=this._get_clone_required_state(e);this._clone_required_states=t}else if(this._cloned_state){const t=this.inputs_controller.inputs_count(),e=[];for(let n=0;n<t;n++)e[n]=this._get_clone_required_state(n);this._clone_required_states=e}else;}}class cr{constructor(t){this.operation_container=t}inputs_count(){return this.operation_container.inputs_count()}init_inputs_cloned_state(t){this._cloned_states_controller||(this._cloned_states_controller=new lr(this),this._cloned_states_controller.init_inputs_cloned_state(t))}clone_required(t){var e;const n=null===(e=this._cloned_states_controller)||void 0===e?void 0:e.clone_required_state(t);return null==n||n}override_cloned_state(t){var e;null===(e=this._cloned_states_controller)||void 0===e||e.override_cloned_state(t)}}class ur extends class{constructor(t,e,n){this.operation=t,this.name=e,this.params={},this._apply_default_params(),this._apply_init_params(n),this._init_cloned_states()}path_param_resolve_required(){return null!=this._path_params}resolve_path_params(t){if(this._path_params)for(let e of this._path_params)e.resolve(t)}_apply_default_params(){const t=this.operation.constructor.DEFAULT_PARAMS,e=Object.keys(t);for(let n of e){const e=t[n],i=this._convert_param_data(n,e);null!=i&&(this.params[n]=i)}}_apply_init_params(t){const e=Object.keys(t);for(let n of e){const e=t[n];if(null!=e.simple_data){const t=e.simple_data,i=this._convert_export_param_data(n,t);null!=i&&(this.params[n]=i)}}}_convert_param_data(t,e){if(m.isNumber(e)||m.isBoolean(e)||m.isString(e))return e;if(e instanceof vi){const t=e.clone();return this._path_params||(this._path_params=[]),this._path_params.push(t),t}return e instanceof D.a||e instanceof d.a||e instanceof p.a||e instanceof _.a?e.clone():void 0}_convert_export_param_data(t,e){const n=this.params[t];if(m.isBoolean(e))return e;if(m.isNumber(e))return m.isBoolean(n)?e>=1:e;if(m.isString(e)){if(n){if(n instanceof vi)return n.set_path(e);if(n instanceof yi)return n.set_path(e)}return e}m.isArray(e)&&this.params[t].fromArray(e)}setInput(t,e){this._inputs=this._inputs||[],this._inputs[t]=e}inputs_count(){return this._inputs?this._inputs.length:0}inputsController(){return this._inputs_controller=this._inputs_controller||new cr(this)}_init_cloned_states(){const t=this.operation.constructor.INPUT_CLONED_STATE;this.inputsController().init_inputs_cloned_state(t)}input_clone_required(t){return!this._inputs_controller||this._inputs_controller.clone_required(t)}override_input_clone_state(t){this.inputsController().override_cloned_state(t)}cook(t){return this.operation.cook(t,this.params)}}{constructor(t,e,n){super(t,e,n),this.operation=t,this.name=e,this.init_params=n,this._inputs=[],this._current_input_index=0,this._dirty=!0}add_input(t){super.setInput(this._current_input_index,t),this.increment_input_index()}increment_input_index(){this._current_input_index++}current_input_index(){return this._current_input_index}setDirty(){if(!this._dirty){this._compute_result=void 0;for(let t=0;t<this._inputs.length;t++){this._inputs[t].setDirty()}}}async compute(t,e){if(this._compute_result)return this._compute_result;const n=[],i=e.get(this);i&&i.forEach(((e,i)=>{n[i]=t[e]}));for(let i=0;i<this._inputs.length;i++){const r=this._inputs[i];let s=await r.compute(t,e);s&&(this.input_clone_required(i)&&(s=s.clone()),n[i]=s)}const r=this.operation.cook(n,this.params);return this._compute_result=r?r instanceof Promise?await r:r:void 0,this._dirty=!1,this._compute_result}}class hr{constructor(t,e){this.node=t,this._context=e,this._children={},this._children_by_type={},this._children_and_grandchildren_by_context={}}get selection(){return this._selection=this._selection||new or(this.node)}dispose(){const t=this.children();for(let e of t)this.node.removeNode(e);this._selection=void 0}get context(){return this._context}set_output_node_find_method(t){this._output_node_find_method=t}output_node(){if(this._output_node_find_method)return this._output_node_find_method()}set_child_name(t,e){let n;if(e=sr.sanitizeName(e),null!=(n=this._children[e])){if(t.name()===e&&n.graphNodeId()===t.graphNodeId())return;return e=sr.increment(e),this.set_child_name(t,e)}{const n=t.name();this._children[n]&&delete this._children[n],this._children[e]=t,t.nameController.update_name_from_parent(e),this._add_to_nodesByType(t),this.node.scene().nodesController.addToInstanciatedNode(t)}}node_context_signature(){return`${this.node.context()}/${this.node.type()}`}available_children_classes(){return ai.registeredNodes(this._context,this.node.type())}is_valid_child_type(t){return null!=this.available_children_classes()[t]}createNode(t,e,n=\\\\\\\"\\\\\\\"){if(\\\\\\\"string\\\\\\\"==typeof t){const i=this._find_node_class(t);return this._create_and_init_node(i,e,n)}return this._create_and_init_node(t,e,n)}_create_and_init_node(t,e,n=\\\\\\\"\\\\\\\"){const i=new t(this.node.scene(),`child_node_${n}`,e);return i.initialize_base_and_node(),this.add_node(i),i.lifecycle.set_creation_completed(),i}_find_node_class(t){const e=this.available_children_classes()[t.toLowerCase()];if(null==e){const e=`child node type '${t}' not found for node '${this.node.path()}'. Available types are: ${Object.keys(this.available_children_classes()).join(\\\\\\\", \\\\\\\")}, ${this._context}, ${this.node.type()}`;throw console.error(e),e}return e}create_operation_container(t,e,n){const i=ai.registeredOperation(this._context,t);if(null==i){const e=`no operation found with context ${this._context}/${t}`;throw console.error(e),e}{const t=new i(this.node.scene());return new ur(t,e,n||{})}}add_node(t){if(t.setParent(this.node),t.params.init(),t.parentController.onSetParent(),t.nameController.run_post_set_fullPath_hooks(),t.childrenAllowed()&&t.childrenController)for(let e of t.childrenController.children())e.nameController.run_post_set_fullPath_hooks();return this.node.emit(Ei.CREATED,{child_node_json:t.toJSON()}),this.node.scene().lifecycleController.onCreateHookAllowed()&&t.lifecycle.run_on_create_hooks(),t.lifecycle.run_on_add_hooks(),this.set_child_name(t,ji.base_name(t)),this.node.lifecycle.run_on_child_add_hooks(t),t.require_webgl2()&&this.node.scene().webgl_controller.set_require_webgl2(),this.node.scene().missingExpressionReferencesController.check_for_missing_references(t),t}removeNode(t){if(t.parent()!=this.node)return console.warn(`node ${t.name()} not under parent ${this.node.path()}`);{this.selection.contains(t)&&this.selection.remove([t]);const e=t.io.connections.firstInputConnection(),n=t.io.connections.inputConnections(),i=t.io.connections.outputConnections();if(n)for(let t of n)t&&t.disconnect({setInput:!0});if(i)for(let t of i)if(t&&(t.disconnect({setInput:!0}),e)){const n=e.node_src,i=t.output_index,r=t.node_dest,s=t.input_index;r.io.inputs.setInput(s,n,i)}t.setParent(null),delete this._children[t.name()],this._remove_from_nodesByType(t),this.node.scene().nodesController.removeFromInstanciatedNode(t),t.setSuccessorsDirty(this.node),t.graphDisconnectSuccessors(),this.node.lifecycle.run_on_child_remove_hooks(t),t.lifecycle.run_on_delete_hooks(),t.dispose(),t.emit(Ei.DELETED,{parent_id:this.node.graphNodeId()})}}_add_to_nodesByType(t){const e=t.graphNodeId(),n=t.type();this._children_by_type[n]=this._children_by_type[n]||[],this._children_by_type[n].includes(e)||this._children_by_type[n].push(e),this.add_to_children_and_grandchildren_by_context(t)}_remove_from_nodesByType(t){const e=t.graphNodeId(),n=t.type();if(this._children_by_type[n]){const t=this._children_by_type[n].indexOf(e);t>=0&&(this._children_by_type[n].splice(t,1),0==this._children_by_type[n].length&&delete this._children_by_type[n])}this.remove_from_children_and_grandchildren_by_context(t)}add_to_children_and_grandchildren_by_context(t){var e;const n=t.graphNodeId(),i=t.context();this._children_and_grandchildren_by_context[i]=this._children_and_grandchildren_by_context[i]||[],this._children_and_grandchildren_by_context[i].includes(n)||this._children_and_grandchildren_by_context[i].push(n);const r=this.node.parent();r&&r.childrenAllowed()&&(null===(e=r.childrenController)||void 0===e||e.add_to_children_and_grandchildren_by_context(t))}remove_from_children_and_grandchildren_by_context(t){var e;const n=t.graphNodeId(),i=t.context();if(this._children_and_grandchildren_by_context[i]){const t=this._children_and_grandchildren_by_context[i].indexOf(n);t>=0&&(this._children_and_grandchildren_by_context[i].splice(t,1),0==this._children_and_grandchildren_by_context[i].length&&delete this._children_and_grandchildren_by_context[i])}const r=this.node.parent();r&&r.childrenAllowed()&&(null===(e=r.childrenController)||void 0===e||e.remove_from_children_and_grandchildren_by_context(t))}nodesByType(t){const e=this._children_by_type[t]||[],n=this.node.scene().graph,i=[];for(let t of e){const e=n.nodeFromId(t);e&&i.push(e)}return i}child_by_name(t){return this._children[t]}has_children_and_grandchildren_with_context(t){return null!=this._children_and_grandchildren_by_context[t]}children(){return Object.values(this._children)}children_names(){return Object.keys(this._children).sort()}traverse_children(t){var e;for(let n of this.children())t(n),null===(e=n.childrenController)||void 0===e||e.traverse_children(t)}}class dr{constructor(t){this.node=t,this._creation_completed=!1}dispose(){this._on_child_add_hooks=void 0,this._on_child_remove_hooks=void 0,this._on_create_hooks=void 0,this._on_add_hooks=void 0,this._on_delete_hooks=void 0}set_creation_completed(){this._creation_completed||(this._creation_completed=!0)}get creation_completed(){return this.node.scene().loadingController.loaded()&&this._creation_completed}add_on_child_add_hook(t){this._on_child_add_hooks=this._on_child_add_hooks||[],this._on_child_add_hooks.push(t)}run_on_child_add_hooks(t){this.execute_hooks_with_child_node(this._on_child_add_hooks,t)}add_on_child_remove_hook(t){this._on_child_remove_hooks=this._on_child_remove_hooks||[],this._on_child_remove_hooks.push(t)}run_on_child_remove_hooks(t){this.execute_hooks_with_child_node(this._on_child_remove_hooks,t)}add_on_create_hook(t){this._on_create_hooks=this._on_create_hooks||[],this._on_create_hooks.push(t)}run_on_create_hooks(){this.execute_hooks(this._on_create_hooks)}add_on_add_hook(t){this._on_add_hooks=this._on_add_hooks||[],this._on_add_hooks.push(t)}run_on_add_hooks(){this.execute_hooks(this._on_add_hooks)}add_delete_hook(t){this._on_delete_hooks=this._on_delete_hooks||[],this._on_delete_hooks.push(t)}run_on_delete_hooks(){this.execute_hooks(this._on_delete_hooks)}execute_hooks(t){if(t){let e;for(e of t)e()}}execute_hooks_with_child_node(t,e){if(t){let n;for(n of t)n(e)}}}!function(t){t.ANIM=\\\\\\\"anim\\\\\\\",t.COP=\\\\\\\"cop\\\\\\\",t.EVENT=\\\\\\\"event\\\\\\\",t.GL=\\\\\\\"gl\\\\\\\",t.JS=\\\\\\\"js\\\\\\\",t.MANAGER=\\\\\\\"manager\\\\\\\",t.MAT=\\\\\\\"mat\\\\\\\",t.OBJ=\\\\\\\"obj\\\\\\\",t.POST=\\\\\\\"post\\\\\\\",t.ROP=\\\\\\\"rop\\\\\\\",t.SOP=\\\\\\\"sop\\\\\\\"}(Ki||(Ki={})),function(t){t.ANIM=\\\\\\\"animationsNetwork\\\\\\\",t.COP=\\\\\\\"copNetwork\\\\\\\",t.EVENT=\\\\\\\"eventsNetwork\\\\\\\",t.MAT=\\\\\\\"materialsNetwork\\\\\\\",t.POST=\\\\\\\"postProcessNetwork\\\\\\\",t.ROP=\\\\\\\"renderersNetwork\\\\\\\"}(tr||(tr={})),function(t){t.INPUT=\\\\\\\"subnetInput\\\\\\\",t.OUTPUT=\\\\\\\"subnetOutput\\\\\\\"}(er||(er={})),function(t){t.PERSPECTIVE=\\\\\\\"perspectiveCamera\\\\\\\",t.ORTHOGRAPHIC=\\\\\\\"orthographicCamera\\\\\\\"}(nr||(nr={})),function(t){t.ATTRIBUTE=\\\\\\\"attribute\\\\\\\"}(ir||(ir={})),function(t){t.DEVICE_ORIENTATION=\\\\\\\"cameraDeviceOrientationControls\\\\\\\",t.MAP=\\\\\\\"cameraMapControls\\\\\\\",t.ORBIT=\\\\\\\"cameraOrbitControls\\\\\\\",t.FIRST_PERSON=\\\\\\\"firstPersonControls\\\\\\\",t.MOBILE_JOYSTICK=\\\\\\\"mobileJoystickControls\\\\\\\"}(rr||(rr={}));const pr=[rr.DEVICE_ORIENTATION,rr.MAP,rr.ORBIT,rr.FIRST_PERSON,rr.MOBILE_JOYSTICK];class _r{constructor(t){this._node=t}set_node(t){this._node=t}node(){return this._node}set_content(t){this._content=t,this._post_set_content()}has_content(){return null!=this._content}content(){return this._content}_post_set_content(){}coreContent(){return this._content}coreContentCloned(){return this._content}infos(){return[]}}var mr=n(69);class fr extends Q.a{constructor(){super(),this.type=\\\\\\\"Scene\\\\\\\",this.background=null,this.environment=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0,\\\\\\\"undefined\\\\\\\"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\\\\\\\"observe\\\\\\\",{detail:this}))}copy(t,e){return super.copy(t,e),null!==t.background&&(this.background=t.background.clone()),null!==t.environment&&(this.environment=t.environment.clone()),null!==t.fog&&(this.fog=t.fog.clone()),null!==t.overrideMaterial&&(this.overrideMaterial=t.overrideMaterial.clone()),this.autoUpdate=t.autoUpdate,this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return null!==this.fog&&(e.object.fog=this.fog.toJSON()),e}}fr.prototype.isScene=!0;var gr=n(49),vr=n(52),yr=n(42),xr=n(55),br=n(61),wr=n(24),Tr=n(35);const Ar=new p.a,Er=new p.a;class Mr extends Q.a{constructor(){super(),this._currentLevel=0,this.type=\\\\\\\"LOD\\\\\\\",Object.defineProperties(this,{levels:{enumerable:!0,value:[]},isLOD:{value:!0}}),this.autoUpdate=!0}copy(t){super.copy(t,!1);const e=t.levels;for(let t=0,n=e.length;t<n;t++){const n=e[t];this.addLevel(n.object.clone(),n.distance)}return this.autoUpdate=t.autoUpdate,this}addLevel(t,e=0){e=Math.abs(e);const n=this.levels;let i;for(i=0;i<n.length&&!(e<n[i].distance);i++);return n.splice(i,0,{distance:e,object:t}),this.add(t),this}getCurrentLevel(){return this._currentLevel}getObjectForDistance(t){const e=this.levels;if(e.length>0){let n,i;for(n=1,i=e.length;n<i&&!(t<e[n].distance);n++);return e[n-1].object}return null}raycast(t,e){if(this.levels.length>0){Ar.setFromMatrixPosition(this.matrixWorld);const n=t.ray.origin.distanceTo(Ar);this.getObjectForDistance(n).raycast(t,e)}}update(t){const e=this.levels;if(e.length>1){Ar.setFromMatrixPosition(t.matrixWorld),Er.setFromMatrixPosition(this.matrixWorld);const n=Ar.distanceTo(Er)/t.zoom;let i,r;for(e[0].object.visible=!0,i=1,r=e.length;i<r&&n>=e[i].distance;i++)e[i-1].object.visible=!1,e[i].object.visible=!0;for(this._currentLevel=i-1;i<r;i++)e[i].object.visible=!1}}toJSON(t){const e=super.toJSON(t);!1===this.autoUpdate&&(e.object.autoUpdate=!1),e.object.levels=[];const n=this.levels;for(let t=0,i=n.length;t<i;t++){const i=n[t];e.object.levels.push({object:i.object.uuid,distance:i.distance})}return e}}var Sr;!function(t){t.OBJECT3D=\\\\\\\"Object3D\\\\\\\",t.MESH=\\\\\\\"Mesh\\\\\\\",t.POINTS=\\\\\\\"Points\\\\\\\",t.LINE_SEGMENTS=\\\\\\\"LineSegments\\\\\\\",t.LOD=\\\\\\\"LOD\\\\\\\"}(Sr||(Sr={}));const Cr={[Sr.MESH]:k.a,[Sr.POINTS]:gr.a,[Sr.LINE_SEGMENTS]:Tr.a,[Sr.OBJECT3D]:Q.a,[Sr.LOD]:Mr};function Nr(t){switch(t){case Q.a:return Sr.OBJECT3D;case k.a:return Sr.MESH;case gr.a:return Sr.POINTS;case Tr.a:return Sr.LINE_SEGMENTS;case Mr:return Sr.LOD;default:return ai.warn(\\\\\\\"object type not supported\\\\\\\",t),Sr.MESH}}const Lr=[Sr.MESH,Sr.POINTS,Sr.LINE_SEGMENTS],Or=[{name:\\\\\\\"Mesh\\\\\\\",value:Lr.indexOf(Sr.MESH)},{name:\\\\\\\"Points\\\\\\\",value:Lr.indexOf(Sr.POINTS)},{name:\\\\\\\"LineSegments\\\\\\\",value:Lr.indexOf(Sr.LINE_SEGMENTS)}],Rr={MeshStandard:new xr.a({color:16777215,side:w.H,metalness:.5,roughness:.9}),[Sr.MESH]:new br.a({color:new D.a(1,1,1),side:w.H,vertexColors:!1,transparent:!0,depthTest:!0}),[Sr.POINTS]:new yr.a({color:16777215,size:.1,depthTest:!0}),[Sr.LINE_SEGMENTS]:new wr.a({color:16777215,linewidth:1})};var Pr;!function(t){t[t.VERTEX=0]=\\\\\\\"VERTEX\\\\\\\",t[t.OBJECT=1]=\\\\\\\"OBJECT\\\\\\\"}(Pr||(Pr={}));const Ir=[Pr.VERTEX,Pr.OBJECT],Fr=[{name:\\\\\\\"vertex\\\\\\\",value:Pr.VERTEX},{name:\\\\\\\"object\\\\\\\",value:Pr.OBJECT}];var Dr;!function(t){t[t.NUMERIC=0]=\\\\\\\"NUMERIC\\\\\\\",t[t.STRING=1]=\\\\\\\"STRING\\\\\\\"}(Dr||(Dr={}));const kr=[Dr.NUMERIC,Dr.STRING],Br=[{name:\\\\\\\"numeric\\\\\\\",value:Dr.NUMERIC},{name:\\\\\\\"string\\\\\\\",value:Dr.STRING}];var zr;!function(t){t[t.FLOAT=1]=\\\\\\\"FLOAT\\\\\\\",t[t.VECTOR2=2]=\\\\\\\"VECTOR2\\\\\\\",t[t.VECTOR3=3]=\\\\\\\"VECTOR3\\\\\\\",t[t.VECTOR4=4]=\\\\\\\"VECTOR4\\\\\\\"}(zr||(zr={}));const Ur=[zr.FLOAT,zr.VECTOR2,zr.VECTOR3,zr.VECTOR4],Gr=[zr.FLOAT,zr.VECTOR4],Vr={ATTRIB_CLASS:{VERTEX:Pr.VERTEX,OBJECT:Pr.OBJECT},OBJECT_TYPES:Lr,CONSTRUCTOR_NAMES_BY_CONSTRUCTOR_NAME:{[fr.name]:\\\\\\\"Scene\\\\\\\",[In.a.name]:\\\\\\\"Group\\\\\\\",[Q.a.name]:\\\\\\\"Object3D\\\\\\\",[k.a.name]:\\\\\\\"Mesh\\\\\\\",[gr.a.name]:\\\\\\\"Points\\\\\\\",[Tr.a.name]:\\\\\\\"LineSegments\\\\\\\",[vr.a.name]:\\\\\\\"Bone\\\\\\\",[mr.a.name]:\\\\\\\"SkinnedMesh\\\\\\\"},CONSTRUCTORS_BY_NAME:{[Sr.MESH]:k.a,[Sr.POINTS]:gr.a,[Sr.LINE_SEGMENTS]:Tr.a},MATERIALS:Rr};var Hr;!function(t){t.POSITION=\\\\\\\"position\\\\\\\",t.NORMAL=\\\\\\\"normal\\\\\\\",t.TANGENT=\\\\\\\"tangent\\\\\\\"}(Hr||(Hr={}));const jr={P:\\\\\\\"position\\\\\\\",N:\\\\\\\"normal\\\\\\\",Cd:\\\\\\\"color\\\\\\\"};class Wr{static remapName(t){return jr[t]||t}static arrayToIndexedArrays(t){const e={};let n=0;const i=[],r=[];let s=0;for(;s<t.length;){const o=t[s],a=e[o];null!=a?i.push(a):(r.push(o),i.push(n),e[o]=n,n+=1),s++}return{indices:i,values:r}}static default_value(t){switch(t){case 1:return 0;case 2:return new d.a(0,0);case 3:return new p.a(0,0,0);default:throw`size ${t} not yet implemented`}}static copy(t,e,n=!0){const i=null==t?void 0:t.array,r=null==e?void 0:e.array;if(i&&r){const t=Math.min(i.length,r.length);for(let e=0;e<t;e++)r[e]=i[e];n&&(e.needsUpdate=!0)}}static attribSizeFromValue(t){if(m.isString(t)||m.isNumber(t))return zr.FLOAT;if(m.isArray(t))return t.length;switch(t.constructor){case d.a:return zr.VECTOR2;case p.a:return zr.VECTOR3;case _.a:return zr.VECTOR4}return 0}}class qr{constructor(t){this._index=t}index(){return this._index}}const Xr=\\\\\\\"position\\\\\\\",Yr=\\\\\\\"normal\\\\\\\";var $r;!function(t){t.x=\\\\\\\"x\\\\\\\",t.y=\\\\\\\"y\\\\\\\",t.z=\\\\\\\"z\\\\\\\",t.w=\\\\\\\"w\\\\\\\",t.r=\\\\\\\"r\\\\\\\",t.g=\\\\\\\"g\\\\\\\",t.b=\\\\\\\"b\\\\\\\"}($r||($r={}));const Jr={x:0,y:1,z:2,w:3,r:0,g:1,b:2};class Zr extends qr{constructor(t,e){super(e),this._core_geometry=t,this._geometry=this._core_geometry.geometry()}applyMatrix4(t){this.position().applyMatrix4(t)}core_geometry(){return this._core_geometry}geometry(){return this._geometry=this._geometry||this._core_geometry.geometry()}attribSize(t){return t=Wr.remapName(t),this._geometry.getAttribute(t).itemSize}hasAttrib(t){const e=Wr.remapName(t);return this._core_geometry.hasAttrib(e)}attribValue(t,e){if(\\\\\\\"ptnum\\\\\\\"===t)return this.index();{let n=null,i=null;\\\\\\\".\\\\\\\"===t[t.length-2]&&(n=t[t.length-1],i=Jr[n],t=t.substring(0,t.length-2));const r=Wr.remapName(t),s=this._geometry.getAttribute(r);if(!s){const e=`attrib ${t} not found. availables are: ${Object.keys(this._geometry.attributes||{}).join(\\\\\\\",\\\\\\\")}`;throw console.warn(e),e}{const{array:t}=s;if(this._core_geometry.isAttribIndexed(r))return this.indexedAttribValue(r);{const n=s.itemSize,r=this._index*n;if(null==i)switch(n){case 1:return t[r];case 2:return(e=e||new d.a).fromArray(t,r),e;case 3:return(e=e||new p.a).fromArray(t,r),e;case 4:return(e=e||new _.a).fromArray(t,r),e;default:throw`size not valid (${n})`}else switch(n){case 1:return t[r];default:return t[r+i]}}}}}indexedAttribValue(t){const e=this.attribValueIndex(t);return this._core_geometry.userDataAttrib(t)[e]}stringAttribValue(t){return this.indexedAttribValue(t)}attribValueIndex(t){return this._core_geometry.isAttribIndexed(t)?this._geometry.getAttribute(t).array[this._index]:-1}isAttribIndexed(t){return this._core_geometry.isAttribIndexed(t)}position(){return this._position||(this._position=this.getPosition(new p.a))}getPosition(t){const{array:e}=this._geometry.getAttribute(Xr);return t.fromArray(e,3*this._index)}setPosition(t){this.setAttribValueVector3(Xr,t)}normal(){return this._normal=this._normal||this.getNormal(new p.a)}getNormal(t){const{array:e}=this._geometry.getAttribute(Yr);return t.fromArray(e,3*this._index)}setNormal(t){return this.setAttribValueVector3(Yr,t)}setAttribValue(t,e){if(null==e)return;if(null==t)throw\\\\\\\"Point.set_attrib_value requires a name\\\\\\\";const n=this._geometry.getAttribute(t),i=n.array,r=n.itemSize;if(m.isArray(e))for(let t=0;t<r;t++)i[this._index*r+t]=e[t];else switch(r){case 1:i[this._index]=e;break;case 2:const t=e;i[2*this._index+0]=t.x,i[2*this._index+1]=t.y;break;case 3:if(null!=e.r){const t=e;i[3*this._index+0]=t.r,i[3*this._index+1]=t.g,i[3*this._index+2]=t.b}else{const t=e;i[3*this._index+0]=t.x,i[3*this._index+1]=t.y,i[3*this._index+2]=t.z}break;case 4:const n=e;i[4*this._index+0]=n.x,i[4*this._index+1]=n.y,i[4*this._index+2]=n.z,i[4*this._index+3]=n.w;break;default:throw console.warn(`Point.set_attrib_value does not yet allow attrib size ${r}`),`attrib size ${r} not implemented`}}setAttribValueVector3(t,e){if(null==e)return;if(null==t)throw\\\\\\\"Point.set_attrib_value requires a name\\\\\\\";const n=this._geometry.getAttribute(t).array,i=3*this._index;n[i]=e.x,n[i+1]=e.y,n[i+2]=e.z}setAttribIndex(t,e){return this._geometry.getAttribute(t).array[this._index]=e}}var Qr=n(40);const Kr=function(t){return function(e){return Math.pow(e,t)}},ts=function(t){return function(e){return 1-Math.abs(Math.pow(e-1,t))}},es=function(t){return function(e){return e<.5?Kr(t)(2*e)/2:ts(t)(2*e-1)/2+.5}},ns={linear:es(1),ease_i:function(t,e){return Kr(e)(t)},ease_o:function(t,e){return ts(e)(t)},ease_io:function(t,e){return es(e)(t)},ease_i2:Kr(2),ease_o2:ts(2),ease_io2:es(2),ease_i3:es(3),ease_o3:es(3),ease_io3:es(3),ease_i4:es(4),ease_o4:es(4),ease_io4:es(4),ease_i_sin:function(t){return 1+Math.sin(Math.PI/2*t-Math.PI/2)},ease_o_sin:function(t){return Math.sin(Math.PI/2*t)},ease_io_sin:function(t){return(1+Math.sin(Math.PI*t-Math.PI/2))/2},ease_i_elastic:function(t){return(.04-.04/t)*Math.sin(25*t)+1},ease_o_elastic:function(t){return.04*t/--t*Math.sin(25*t)},ease_io_elastic:function(t){return(t-=.5)<0?(.02+.01/t)*Math.sin(50*t):(.02-.01/t)*Math.sin(50*t)+1}},is=Math.PI/180;class rs{static clamp(t,e,n){return t<e?e:t>n?n:t}static fit01(t,e,n){return this.fit(t,0,1,e,n)}static fit(t,e,n,i,r){return(t-e)/(n-e)*(r-i)+i}static blend(t,e,n){return(1-n)*t+n*e}static degrees_to_radians(t){return t*is}static radians_to_degrees(t){return t/is}static deg2rad(t){return this.degrees_to_radians(t)}static rad2deg(t){return this.radians_to_degrees(t)}static rand(t){return m.isNumber(t)?this.randFloat(t):this.randVec2(t)}static round(t,e){const n=t/e;return(t<0?Math.ceil(n):Math.floor(n))*e}static highest_even(t){return 2*Math.ceil(.5*t)}static randFloat(t,e=136574){return this._vec.x=t,this._vec.y=e,this.randVec2(this._vec)}static randVec2(t){const e=(12.9898*t.x+78.233*t.y)%Math.PI;return this.fract(43758.5453*Math.sin(e))}static geodesic_distance(t,e){var n=this.deg2rad(t.lat),i=this.deg2rad(e.lat),r=this.deg2rad(e.lat-t.lat),s=this.deg2rad(e.lng-t.lng),o=Math.sin(r/2)*Math.sin(r/2)+Math.cos(n)*Math.cos(i)*Math.sin(s/2)*Math.sin(s/2);return 6371e3*(2*Math.atan2(Math.sqrt(o),Math.sqrt(1-o)))}static expand_triangle(t,e){t.getMidpoint(this._triangle_mid),this._triangle_mid_to_corner.copy(t.a).sub(this._triangle_mid),this._triangle_mid_to_corner.normalize().multiplyScalar(e),t.a.add(this._triangle_mid_to_corner),this._triangle_mid_to_corner.copy(t.b).sub(this._triangle_mid),this._triangle_mid_to_corner.normalize().multiplyScalar(e),t.b.add(this._triangle_mid_to_corner),this._triangle_mid_to_corner.copy(t.c).sub(this._triangle_mid),this._triangle_mid_to_corner.normalize().multiplyScalar(e),t.c.add(this._triangle_mid_to_corner)}static nearestPower2(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.log(2)))}}rs.Easing=ns,rs.fract=t=>t-Math.floor(t),rs._vec={x:0,y:136574},rs._triangle_mid=new p.a,rs._triangle_mid_to_corner=new p.a;class ss{constructor(t,e){this._core_geometry=t,this._index=e,this._geometry=this._core_geometry.geometry()}index(){return this._index}points(){return this._points=this._points||this._get_points()}applyMatrix4(t){for(let e of this.points())e.applyMatrix4(t)}_get_points(){var t;const e=(null===(t=this._geometry.index)||void 0===t?void 0:t.array)||[],n=3*this._index;return[new Zr(this._core_geometry,e[n+0]),new Zr(this._core_geometry,e[n+1]),new Zr(this._core_geometry,e[n+2])]}positions(){return this._positions=this._positions||this._get_positions()}_get_positions(){const t=this.points();return[t[0].position(),t[1].position(),t[2].position()]}triangle(){return this._triangle=this._triangle||this._get_triangle()}_get_triangle(){const t=this.positions();return new Qr.a(t[0],t[1],t[2])}deltas(){return this._deltas=this._deltas||this._get_deltas()}_get_deltas(){const t=this.positions();return[t[1].clone().sub(t[0]),t[2].clone().sub(t[0])]}area(){return this.triangle().getArea()}center(t){const e=this.positions();return t.x=(e[0].x+e[1].x+e[2].x)/3,t.y=(e[0].y+e[1].y+e[2].y)/3,t.z=(e[0].z+e[1].z+e[2].z)/3,t}random_position(t){let e=[rs.randFloat(t),rs.randFloat(6541*t)];return e[0]+e[1]>1&&(e[0]=1-e[0],e[1]=1-e[1]),this.positions()[0].clone().add(this.deltas()[0].clone().multiplyScalar(e[0])).add(this.deltas()[1].clone().multiplyScalar(e[1]))}attrib_value_at_position(t,e){const n=new p.a;this.triangle().getBarycoord(e,n);const i=n.toArray(),r=this._geometry.attributes[t].itemSize,s=this.points().map((e=>e.attribValue(t)));let o,a,l=0;switch(r){case 1:a=0;for(let t of s)a+=t*i[l],l++;o=a;break;default:for(let t of s){const e=t.multiplyScalar(i[l]);a?a.add(e):a=e,l++}o=a}return o}static interpolated_value(t,e,n,i){const r=[e.a,e.b,e.c],s=t.getAttribute(\\\\\\\"position\\\\\\\").array,o=r.map((t=>new p.a(s[3*t+0],s[3*t+1],s[3*t+2]))),a=i.itemSize,l=i.array;let c=[];switch(a){case 1:c=r.map((t=>l[t]));break;case 2:c=r.map((t=>new d.a(l[2*t+0],l[2*t+1])));break;case 3:c=r.map((t=>new p.a(l[3*t+0],l[3*t+1],l[3*t+2])))}const u=r.map(((t,e)=>n.distanceTo(o[e]))),h=f.sum([u[0]*u[1],u[0]*u[2],u[1]*u[2]]),_=[u[1]*u[2]/h,u[0]*u[2]/h,u[0]*u[1]/h];let m;switch(a){case 1:m=f.sum(r.map(((t,e)=>_[e]*c[e])));break;default:var g=r.map(((t,e)=>c[e].multiplyScalar(_[e])));m=null;for(let t of g)m?m.add(t):m=t}return m}}class os{from_points(t){t=this._filter_points(t);const e=new S.a,n=new ps(e),i=t[0];if(null!=i){const r=i.geometry(),s=i.core_geometry(),o={};for(let e=0;e<t.length;e++)o[t[e].index()]=e;const a=this._indices_from_points(o,r);a&&e.setIndex(a);const{attributes:l}=r;for(let i of Object.keys(l)){if(null!=s.userDataAttribs()[i]){const r=f.uniq(t.map((t=>t.indexedAttribValue(i)))),s={};r.forEach(((t,e)=>s[t]=e)),n.userDataAttribs()[i]=r;const o=[];for(let e of t){const t=s[e.indexedAttribValue(i)];o.push(t)}e.setAttribute(i,new C.c(o,1))}else{const n=l[i].itemSize,r=new Array(t.length*n);switch(n){case 1:for(let e=0;e<t.length;e++)r[e]=t[e].attribValue(i);break;default:let e;for(let s=0;s<t.length;s++)e=t[s].attribValue(i),e.toArray(r,s*n)}e.setAttribute(i,new C.c(r,n))}}}return e}}var as=n(78),ls=n(64);function cs(t,e=!1){const n=null!==t[0].index,i=new Set(Object.keys(t[0].attributes)),r=new Set(Object.keys(t[0].morphAttributes)),s={},o={},a=t[0].morphTargetsRelative,l=new S.a;let c=0;for(let u=0;u<t.length;++u){const h=t[u];let d=0;if(n!==(null!==h.index))return console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \\\\\\\"+u+\\\\\\\". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.\\\\\\\"),null;for(const t in h.attributes){if(!i.has(t))return console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \\\\\\\"+u+'. All geometries must have compatible attributes; make sure \\\\\\\"'+t+'\\\\\\\" attribute exists among all geometries, or in none of them.'),null;void 0===s[t]&&(s[t]=[]),s[t].push(h.attributes[t]),d++}if(d!==i.size)return console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \\\\\\\"+u+\\\\\\\". Make sure all geometries have the same number of attributes.\\\\\\\"),null;if(a!==h.morphTargetsRelative)return console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \\\\\\\"+u+\\\\\\\". .morphTargetsRelative must be consistent throughout all geometries.\\\\\\\"),null;for(const t in h.morphAttributes){if(!r.has(t))return console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \\\\\\\"+u+\\\\\\\".  .morphAttributes must be consistent throughout all geometries.\\\\\\\"),null;void 0===o[t]&&(o[t]=[]),o[t].push(h.morphAttributes[t])}if(l.userData.mergedUserData=l.userData.mergedUserData||[],l.userData.mergedUserData.push(h.userData),e){let t;if(n)t=h.index.count;else{if(void 0===h.attributes.position)return console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \\\\\\\"+u+\\\\\\\". The geometry must have either an index or a position attribute\\\\\\\"),null;t=h.attributes.position.count}l.addGroup(c,t,u),c+=t}}if(n){let e=0;const n=[];for(let i=0;i<t.length;++i){const r=t[i].index;for(let t=0;t<r.count;++t)n.push(r.getX(t)+e);e+=t[i].attributes.position.count}l.setIndex(n)}for(const t in s){const e=us(s[t]);if(!e)return console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the \\\\\\\"+t+\\\\\\\" attribute.\\\\\\\"),null;l.setAttribute(t,e)}for(const t in o){const e=o[t][0].length;if(0===e)break;l.morphAttributes=l.morphAttributes||{},l.morphAttributes[t]=[];for(let n=0;n<e;++n){const e=[];for(let i=0;i<o[t].length;++i)e.push(o[t][i][n]);const i=us(e);if(!i)return console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the \\\\\\\"+t+\\\\\\\" morphAttribute.\\\\\\\"),null;l.morphAttributes[t].push(i)}}return l}function us(t){let e,n,i,r=0;for(let s=0;s<t.length;++s){const o=t[s];if(o.isInterleavedBufferAttribute)return console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. InterleavedBufferAttributes are not supported.\\\\\\\"),null;if(void 0===e&&(e=o.array.constructor),e!==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===n&&(n=o.itemSize),n!==o.itemSize)return console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes.\\\\\\\"),null;if(void 0===i&&(i=o.normalized),i!==o.normalized)return console.error(\\\\\\\"THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes.\\\\\\\"),null;r+=o.array.length}const s=new e(r);let o=0;for(let e=0;e<t.length;++e)s.set(t[e].array,o),o+=t[e].array.length;return new C.a(s,n,i)}class hs{static createIndexIfNone(t){if(!t.index){const e=t.getAttribute(\\\\\\\"position\\\\\\\");if(e){const n=e.array;t.setIndex(f.range(n.length/3))}}}}class ds{static merge(t){if(0===t.length)return;for(let e of t)hs.createIndexIfNone(e);const e=t.map((t=>new ps(t))),n=e[0].indexedAttributeNames(),i={};for(let t of n){const n={},r=[];for(let i of e){const e=i.points();for(let i of e){r.push(i);const e=i.indexedAttribValue(t);null!=n[e]?n[e]:n[e]=Object.keys(n).length}}const s=Object.keys(n);for(let e of r){const i=n[e.indexedAttribValue(t)];e.setAttribIndex(t,i)}i[t]=s}const r=cs(t),s=new ps(r);return Object.keys(i).forEach((t=>{const e=i[t];s.setIndexedAttributeValues(t,e)})),r&&delete r.userData.mergedUserData,r}}class ps{constructor(t){this._geometry=t}geometry(){return this._geometry}uuid(){return this._geometry.uuid}boundingBox(){return this._bounding_box=this._bounding_box||this._create_bounding_box()}_create_bounding_box(){if(this._geometry.computeBoundingBox(),this._geometry.boundingBox)return this._geometry.boundingBox}markAsInstance(){this._geometry.userData.isInstance=!0}static markedAsInstance(t){return!0===t.userData.isInstance}markedAsInstance(){return ps.markedAsInstance(this._geometry)}positionAttribName(){let t=\\\\\\\"position\\\\\\\";return this.markedAsInstance()&&(t=\\\\\\\"instancePosition\\\\\\\"),t}computeVertexNormals(){this._geometry.computeVertexNormals()}userDataAttribs(){const t=\\\\\\\"indexed_attrib_values\\\\\\\";return this._geometry.userData[t]=this._geometry.userData[t]||{}}indexedAttributeNames(){return Object.keys(this.userDataAttribs()||{})}userDataAttrib(t){return t=Wr.remapName(t),this.userDataAttribs()[t]}isAttribIndexed(t){return t=Wr.remapName(t),null!=this.userDataAttrib(t)}hasAttrib(t){return\\\\\\\"ptnum\\\\\\\"===t||(t=Wr.remapName(t),null!=this._geometry.attributes[t])}attribType(t){return this.isAttribIndexed(t)?Dr.STRING:Dr.NUMERIC}static attribNames(t){return Object.keys(t.attributes)}attribNames(){return ps.attribNames(this._geometry)}static attribNamesMatchingMask(t,e){const n=sr.attribNames(e),i=[];for(let e of this.attribNames(t))for(let t of n)sr.matchMask(e,t)&&i.push(e);return f.uniq(i)}attribSizes(){const t={};for(let e of this.attribNames())t[e]=this._geometry.attributes[e].itemSize;return t}attribSize(t){let e;return t=Wr.remapName(t),null!=(e=this._geometry.attributes[t])?e.itemSize:\\\\\\\"ptnum\\\\\\\"===t?1:0}setIndexedAttributeValues(t,e){this.userDataAttribs()[t]=e}setIndexedAttribute(t,e,n){this.setIndexedAttributeValues(t,e),this._geometry.setAttribute(t,new C.f(n,1))}addNumericAttrib(t,e=1,n=0){const i=[];let r=!1;if(m.isNumber(n)){for(let t=0;t<this.pointsCount();t++)for(let t=0;t<e;t++)i.push(n);r=!0}else if(e>1)if(m.isArray(n)){for(let t=0;t<this.pointsCount();t++)for(let t=0;t<e;t++)i.push(n[t]);r=!0}else{const t=n;if(2==e&&null!=t.x&&null!=t.y){for(let e=0;e<this.pointsCount();e++)i.push(t.x),i.push(t.y);r=!0}const s=n;if(3==e&&null!=s.x&&null!=s.y&&null!=s.z){for(let t=0;t<this.pointsCount();t++)i.push(s.x),i.push(s.y),i.push(s.z);r=!0}const o=n;if(3==e&&null!=o.r&&null!=o.g&&null!=o.b){for(let t=0;t<this.pointsCount();t++)i.push(o.r),i.push(o.g),i.push(o.b);r=!0}const a=n;if(4==e&&null!=a.x&&null!=a.y&&null!=a.z&&null!=a.w){for(let t=0;t<this.pointsCount();t++)i.push(a.x),i.push(a.y),i.push(a.z),i.push(a.w);r=!0}}if(!r)throw console.warn(n),`CoreGeometry.add_numeric_attrib error: no other default value allowed for now in add_numeric_attrib (default given: ${n})`;this._geometry.setAttribute(t.trim(),new C.c(i,e))}initPositionAttribute(t,e){const n=[];null==e&&(e=new p.a);for(let i=0;i<t;i++)n.push(e.x),n.push(e.y),n.push(e.z);return this._geometry.setAttribute(\\\\\\\"position\\\\\\\",new C.c(n,3))}addAttribute(t,e){switch(e.type()){case Dr.STRING:return console.log(\\\\\\\"TODO: to implement\\\\\\\");case Dr.NUMERIC:return this.addNumericAttrib(t,e.size())}}renameAttrib(t,e){this.isAttribIndexed(t)&&(this.userDataAttribs()[e]=b.clone(this.userDataAttribs()[t]),delete this.userDataAttribs()[t]);const n=this._geometry.getAttribute(t);return this._geometry.setAttribute(e.trim(),new C.c(n.array,n.itemSize)),this._geometry.deleteAttribute(t)}deleteAttribute(t){return this.isAttribIndexed(t)&&delete this.userDataAttribs()[t],this._geometry.deleteAttribute(t)}clone(){return ps.clone(this._geometry)}static clone(t){let e;const n=t.clone();return null!=(e=t.userData)&&(n.userData=b.cloneDeep(e)),n}pointsCount(){return ps.pointsCount(this._geometry)}static pointsCount(t){let e,n=0;let i=\\\\\\\"position\\\\\\\";if(new this(t).markedAsInstance()&&(i=\\\\\\\"instancePosition\\\\\\\"),null!=(e=t.getAttribute(i))){let t;null!=(t=e.array)&&(n=t.length/3)}return n}points(){return this.pointsFromGeometry()}pointsFromGeometry(){const t=[],e=this._geometry.getAttribute(this.positionAttribName());if(null!=e){const n=e.array.length/3;for(let e=0;e<n;e++){const n=new Zr(this,e);t.push(n)}}return t}static geometryFromPoints(t,e){switch(e){case Sr.MESH:return this._mesh_builder.from_points(t);case Sr.POINTS:return this._points_builder.from_points(t);case Sr.LINE_SEGMENTS:return this._lines_segment_builder.from_points(t);case Sr.OBJECT3D:case Sr.LOD:return null}ar.unreachable(e)}static mergeGeometries(t){return ds.merge(t)}static merge_geometries(t){return ds.merge(t)}segments(){var t;const e=(null===(t=this.geometry().index)||void 0===t?void 0:t.array)||[];return f.chunk(e,2)}faces(){return this.facesFromGeometry()}facesFromGeometry(){var t;const e=((null===(t=this.geometry().index)||void 0===t?void 0:t.array)||[]).length/3;return f.range(e).map((t=>new ss(this,t)))}}var _s;ps._mesh_builder=new class extends os{_filter_points(t){var e;const n=t[0];if(n){const i=null===(e=n.geometry().getIndex())||void 0===e?void 0:e.array;if(i){const e={};for(let n of t)e[n.index()]=n;const n=[],r=i.length;let s,o,a;for(let t=0;t<r;t+=3)s=e[i[t+0]],o=e[i[t+1]],a=e[i[t+2]],s&&o&&a&&(n.push(s),n.push(o),n.push(a));return n}}return[]}_indices_from_points(t,e){const n=e.index;if(null!=n){const e=n.array,i=[];let r,s,o,a,l,c;for(let n=0;n<e.length;n+=3)r=e[n+0],s=e[n+1],o=e[n+2],a=t[r],l=t[s],c=t[o],null!=a&&null!=l&&null!=c&&(i.push(a),i.push(l),i.push(c));return i}}},ps._points_builder=new class extends os{_filter_points(t){return t}_indices_from_points(t,e){const n=e.index;if(null!=n){const e=n.array,i=[];let r,s;for(let n=0;n<e.length;n++)r=e[n],s=t[r],null!=s&&i.push(s);return i}}},ps._lines_segment_builder=new class extends os{_filter_points(t){var e;const n=t[0];if(n){const i=null===(e=n.geometry().getIndex())||void 0===e?void 0:e.array;if(i){const e={};for(let n of t)e[n.index()]=n;const n=[],r=i.length;let s,o;for(let t=0;t<r;t+=2)s=e[i[t+0]],o=e[i[t+1]],s&&o&&(n.push(s),n.push(o));return n}}return[]}_indices_from_points(t,e){const n=e.index;if(null!=n){const e=n.array,i=[];let r,s,o,a;for(let n=0;n<e.length;n+=2)r=e[n],s=e[n+1],o=t[r],a=t[s],null!=o&&null!=a&&(i.push(o),i.push(a));return i}}},function(t){t.customDistanceMaterial=\\\\\\\"customDistanceMaterial\\\\\\\",t.customDepthMaterial=\\\\\\\"customDepthMaterial\\\\\\\",t.customDepthDOFMaterial=\\\\\\\"customDepthDOFMaterial\\\\\\\"}(_s||(_s={}));const ms=(t,e,n,i,r,s)=>{};class fs{static node(t,e){return t.node(e.name)}static clone(t){const e=t.clone(),n=t.uniforms;return n&&(e.uniforms=I.clone(n)),e}static add_user_data_render_hook(t,e){t.userData.POLY_render_hook=e}static apply_render_hook(t,e){if(e.userData){const n=e.userData.POLY_render_hook;if(n)return void(t.onBeforeRender=(e,i,r,s,o,a)=>{n(e,i,r,s,o,a,t)})}t.onBeforeRender=ms}static applyCustomMaterials(t,e){const n=e;if(n.customMaterials)for(let e of Object.keys(n.customMaterials)){const i=e,r=n.customMaterials[i];r&&(t[i]=r,r.needsUpdate=!0)}}static assign_custom_uniforms(t,e,n){const i=t;if(i.customMaterials)for(let t of Object.keys(i.customMaterials)){const r=t,s=i.customMaterials[r];s&&(s.uniforms[e].value=n)}}static init_custom_material_uniforms(t,e,n){const i=t;if(i.customMaterials)for(let t of Object.keys(i.customMaterials)){const r=t,s=i.customMaterials[r];s&&(s.uniforms[e]=s.uniforms[e]||n)}}}const gs=\\\\\\\"name\\\\\\\";class vs extends qr{constructor(t,e){super(e),this._object=t,null==this._object.userData.attributes&&(this._object.userData.attributes={})}object(){return this._object}geometry(){return this._object.geometry}coreGeometry(){const t=this.geometry();return t?new ps(t):null}points(){var t;return(null===(t=this.coreGeometry())||void 0===t?void 0:t.points())||[]}pointsFromGroup(t){if(t){const e=sr.indices(t);if(e){const t=this.points();return e.map((e=>t[e]))}return[]}return this.points()}static isInGroup(t,e){const n=t.trim();if(0==n.length)return!0;const i=n.split(\\\\\\\"=\\\\\\\"),r=i[0];if(\\\\\\\"@\\\\\\\"==r[0]){const t=r.substr(1);return i[1]==this.attribValue(e,t)}return!1}computeVertexNormals(){var t;null===(t=this.coreGeometry())||void 0===t||t.computeVertexNormals()}static _convert_array_to_vector(t){switch(t.length){case 1:return t[0];case 2:return new d.a(t[0],t[1]);case 3:return new p.a(t[0],t[1],t[2]);case 4:return new _.a(t[0],t[1],t[2],t[3])}}static addAttribute(t,e,n){if(m.isArray(n)){if(!this._convert_array_to_vector(n)){const t=\\\\\\\"attribute_value invalid\\\\\\\";throw console.error(t,n),new Error(t)}}const i=n,r=t.userData;r.attributes=r.attributes||{},r.attributes[e]=i}addAttribute(t,e){vs.addAttribute(this._object,t,e)}addNumericAttrib(t,e){this.addAttribute(t,e)}setAttribValue(t,e){this.addAttribute(t,e)}addNumericVertexAttrib(t,e,n){var i;null==n&&(n=Wr.default_value(e)),null===(i=this.coreGeometry())||void 0===i||i.addNumericAttrib(t,e,n)}attributeNames(){return Object.keys(this._object.userData.attributes)}attribNames(){return this.attributeNames()}hasAttrib(t){return this.attributeNames().includes(t)}renameAttrib(t,e){const n=this.attribValue(t);null!=n?(this.addAttribute(e,n),this.deleteAttribute(t)):console.warn(`attribute ${t} not found`)}deleteAttribute(t){delete this._object.userData.attributes[t]}static attribValue(t,e,n=0,i){if(\\\\\\\"ptnum\\\\\\\"===e)return n;if(t.userData&&t.userData.attributes){const n=t.userData.attributes[e];if(null==n){if(e==gs)return t.name}else if(m.isArray(n)&&i)return i.fromArray(n),i;return n}return e==gs?t.name:void 0}static stringAttribValue(t,e,n=0){const i=this.attribValue(t,e,n);if(null!=i)return m.isString(i)?i:`${i}`}attribValue(t,e){return vs.attribValue(this._object,t,this._index,e)}stringAttribValue(t){return vs.stringAttribValue(this._object,t,this._index)}name(){return this.attribValue(gs)}humanType(){return Vr.CONSTRUCTOR_NAMES_BY_CONSTRUCTOR_NAME[this._object.constructor.name]}attribTypes(){const t={};for(let e of this.attribNames()){const n=this.attribType(e);null!=n&&(t[e]=n)}return t}attribType(t){const e=this.attribValue(t);return m.isString(e)?Dr.STRING:Dr.NUMERIC}attribSizes(){const t={};for(let e of this.attribNames()){const n=this.attribSize(e);null!=n&&(t[e]=n)}return t}attribSize(t){const e=this.attribValue(t);return null==e?null:Wr.attribSizeFromValue(e)}clone(){return vs.clone(this._object)}static clone(t){const e=t.clone();var n=new Map,i=new Map;return vs.parallelTraverse(t,e,(function(t,e){n.set(e,t),i.set(t,e)})),e.traverse((function(e){const r=n.get(e),s=e;if(s.geometry){const t=r.geometry;s.geometry=ps.clone(t);const e=s.geometry;e.userData&&(e.userData=b.cloneDeep(t.userData))}if(s.material){s.material=r.material,fs.applyCustomMaterials(e,s.material);const t=s.material;null==t.color&&(t.color=new D.a(1,1,1))}t.userData&&(e.userData=b.cloneDeep(r.userData));const o=r;o.animations&&(e.animations=o.animations.map((t=>t.clone())));const a=e;if(a.isSkinnedMesh){var l=a,c=r,u=c.skeleton.bones;l.skeleton=c.skeleton.clone(),l.bindMatrix.copy(c.bindMatrix);const t=u.map((function(t){return i.get(t)}));l.skeleton.bones=t,l.bind(l.skeleton,l.bindMatrix)}})),e}static parallelTraverse(t,e,n){n(t,e);for(var i=0;i<t.children.length;i++)this.parallelTraverse(t.children[i],e.children[i],n)}}const ys={[Ki.ANIM]:class extends _r{set_content(t){super.set_content(t)}setTimelineBuilder(t){return this.set_content(t)}timeline_builder(){return this.content()}coreContentCloned(){if(this._content)return this._content.clone()}},[Ki.COP]:class extends _r{set_content(t){super.set_content(t)}texture(){return this._content}coreContent(){return this._content}coreContentCloned(){var t;const e=null===(t=this._content)||void 0===t?void 0:t.clone();return e&&(e.needsUpdate=!0),e}object(){return this.texture()}infos(){if(null!=this._content)return[this._content]}resolution(){if(this._content){const t=this._content.image;if(t){if(t instanceof HTMLImageElement||t instanceof Image||t instanceof ImageData||t instanceof HTMLCanvasElement)return[t.width,t.height];if(t.data&&null!=t.width&&null!=t.height)return[t.width,t.height];const e=t;return[e.videoWidth,e.videoHeight]}}return[-1,-1]}},[Ki.EVENT]:class extends _r{set_content(t){super.set_content(t)}},[Ki.GL]:class extends _r{object(){return this._content}},[Ki.JS]:class extends _r{object(){return this._content}},[Ki.MANAGER]:class extends _r{set_content(t){super.set_content(t)}},[Ki.MAT]:class extends _r{set_content(t){super.set_content(t)}set_material(t){null!=this._content&&this._content.dispose(),this.set_content(t)}has_material(){return this.has_content()}material(){return this.content()}},[Ki.OBJ]:class extends _r{set_content(t){super.set_content(t)}set_object(t){return this.set_content(t)}has_object(){return this.has_content()}object(){return this.content()}},[Ki.POST]:class extends _r{set_content(t){super.set_content(t)}render_pass(){return this._content}object(t={}){return this.render_pass()}},[Ki.ROP]:class extends _r{set_content(t){super.set_content(t)}renderer(){return this._content}},[Ki.SOP]:class extends _r{coreContentCloned(){if(this._content)return this._content.clone()}set_content(t){super.set_content(t)}firstObject(){if(this._content)return this._content.objects()[0]}firstCoreObject(){const t=this.firstObject();if(t)return new vs(t,0)}firstGeometry(){const t=this.firstObject();return t?t.geometry:null}objectsCount(){return this._content?this._content.objects().length:0}objectsVisibleCount(){return this._content,0}objectsCountByType(){const t={},e=this._content;if(this._content&&e)for(let n of e.coreObjects()){const e=n.humanType();null==t[e]&&(t[e]=0),t[e]+=1}return t}objectsNamesByType(){const t={},e=this._content;if(this._content&&e)for(let n of e.coreObjects()){const e=n.humanType();t[e]=t[e]||[],t[e].push(n.name())}return t}pointAttributeNames(){let t=[];const e=this.firstGeometry();return e&&(t=Object.keys(e.attributes)),t}pointAttributeSizesByName(){let t={};const e=this.firstGeometry();return e&&Object.keys(e.attributes).forEach((n=>{const i=e.attributes[n];t[n]=i.itemSize})),t}objectAttributeSizesByName(){let t={};const e=this.firstCoreObject();if(e){const n=e.attribNames();for(let i of n){const n=e.attribSize(i);null!=n&&(t[i]=n)}}return t}pointAttributeTypesByName(){let t={};const e=this.firstGeometry();if(e){const n=new ps(e);Object.keys(e.attributes).forEach((e=>{t[e]=n.attribType(e)}))}return t}objectAttributeTypesByName(){let t={};const e=this.firstCoreObject();if(e)for(let n of e.attribNames())t[n]=e.attribType(n);return t}objectAttributeNames(){let t=[];const e=this.firstObject();return e&&(t=Object.keys(e.userData.attributes||{})),t}pointsCount(){return this._content?this._content.pointsCount():0}totalPointsCount(){return this._content?this._content.totalPointsCount():0}objectsData(){return this._content?this._content.objectsData():[]}boundingBox(){return this._content.boundingBox()}center(){return this._content.center()}size(){return this._content.size()}}};class xs{constructor(t){this.node=t,this._callbacks=[],this._callbacks_tmp=[];const e=ys[t.context()];this._container=new e(this.node)}container(){return this._container}async compute(){var t,e;if(null===(e=null===(t=this.node.flags)||void 0===t?void 0:t.bypass)||void 0===e?void 0:e.active()){const t=await this.requestInputContainer(0)||this._container;return this.node.cookController.endCook(),t}return this.node.isDirty()?new Promise(((t,e)=>{this._callbacks.push(t),this.node.cookController.cookMain()})):this._container}async requestInputContainer(t){const e=this.node.io.inputs.input(t);return e?await e.compute():(this.node.states.error.set(`input ${t} required`),this.notifyRequesters(),null)}notifyRequesters(t){let e;for(this._callbacks_tmp=this._callbacks.slice(),this._callbacks.splice(0,this._callbacks.length),t||(t=this.node.containerController.container());e=this._callbacks_tmp.pop();)e(t);this.node.scene().cookController.removeNode(this.node)}}const bs=ai.performance.performanceManager();class ws{constructor(t){this.cookController=t,this._inputs_start=0,this._params_start=0,this._cook_start=0,this._cooksCount=0,this._data={inputsTime:0,paramsTime:0,cookTime:0}}cooksCount(){return this._cooksCount}data2(){return this._data}active(){return this.cookController.performanceRecordStarted()}recordInputsStart(){this.active()&&(this._inputs_start=bs.now())}recordInputsEnd(){this.active()&&(this._data.inputsTime=bs.now()-this._inputs_start)}recordParamsStart(){this.active()&&(this._params_start=bs.now())}recordParamsEnd(){this.active()&&(this._data.paramsTime=bs.now()-this._params_start)}recordCookStart(){this.active()&&(this._cook_start=bs.now())}recordCookEnd(){this.active()&&(this._data.cookTime=bs.now()-this._cook_start,this._cooksCount+=1)}}class Ts{constructor(t){this.node=t,this._cooking=!1,this._performanceController=new ws(this),this._inputs_evaluation_required=!0,this._core_performance=this.node.scene().performance}performanceRecordStarted(){return this._core_performance.started()}disallowInputsEvaluation(){this._inputs_evaluation_required=!1}isCooking(){return!0===this._cooking}_start_cook_if_no_errors(t){if(this.node.states.error.active())this.endCook();else try{this._performanceController.recordCookStart(),this.node.cook(t)}catch(t){this.node.states.error.set(`node internal error: '${t}'.`),ai.warn(t),this.endCook()}}async cookMain(){if(this.isCooking())return;let t;this._initCookingState(),this.node.states.error.clear(),this.node.scene().cookController.addNode(this.node),t=this._inputs_evaluation_required?await this._evaluateInputs():[],this.node.params.paramsEvalRequired()&&await this._evaluateParams(),this._start_cook_if_no_errors(t)}async cookMainWithoutInputs(){this.node.scene().cookController.addNode(this.node),this.isCooking()?ai.warn(\\\\\\\"cook_main_without_inputs already cooking\\\\\\\",this.node.path()):(this._initCookingState(),this.node.states.error.clear(),this.node.params.paramsEvalRequired()&&await this._evaluateParams(),this._start_cook_if_no_errors([]))}endCook(t){this._finalizeCookPerformance();const e=this.node.dirtyController.dirtyTimestamp();null==e||e===this._cooking_dirty_timestamp?(this.node.removeDirtyState(),this._terminateCookProcess()):(ai.log(\\\\\\\"COOK AGAIN\\\\\\\",e,this._cooking_dirty_timestamp,this.node.path()),this._cooking=!1,this.cookMain())}_initCookingState(){this._cooking=!0,this._cooking_dirty_timestamp=this.node.dirtyController.dirtyTimestamp()}_terminateCookProcess(){this.isCooking()&&(this._cooking=!1,this.node.containerController.notifyRequesters(),this._run_on_cook_complete_hooks())}async _evaluateInputs(){this._performanceController.recordInputsStart();let t=[];const e=this.node.io.inputs;this._inputs_evaluation_required&&(t=e.is_any_input_dirty()?await e.eval_required_inputs():await e.containers_without_evaluation());const n=e.inputs(),i=[];let r;for(let s=0;s<n.length;s++)r=t[s],r&&(e.cloneRequired(s)?i[s]=r.coreContentCloned():i[s]=r.coreContent());return this._performanceController.recordInputsEnd(),i}async _evaluateParams(){this._performanceController.recordParamsStart(),await this.node.params.evalAll(),this._performanceController.recordParamsEnd()}cooksCount(){return this._performanceController.cooksCount()}cookTime(){return this._performanceController.data2().cookTime}_finalizeCookPerformance(){this._core_performance.started()&&(this._performanceController.recordCookEnd(),this._core_performance.record_node_cook_data(this.node,this._performanceController.data2()))}registerOnCookEnd(t,e){this._on_cook_complete_hook_names=this._on_cook_complete_hook_names||[],this._on_cook_complete_hooks=this._on_cook_complete_hooks||[],this._on_cook_complete_hook_names.push(t),this._on_cook_complete_hooks.push(e)}deregisterOnCookEnd(t){var e;if(!this._on_cook_complete_hook_names||!this._on_cook_complete_hooks)return;const n=null===(e=this._on_cook_complete_hook_names)||void 0===e?void 0:e.indexOf(t);this._on_cook_complete_hook_names.splice(n,1),this._on_cook_complete_hooks.splice(n,1)}_run_on_cook_complete_hooks(){if(this._on_cook_complete_hooks)for(let t of this._on_cook_complete_hooks)t()}onCookEndCallbackNames(){return this._on_cook_complete_hook_names}}class As{constructor(t){this.node=t}toJSON(t=!1){var e,n,i,r,s,o;const a={name:this.node.name(),type:this.node.type(),graph_node_id:this.node.graphNodeId(),is_dirty:this.node.isDirty(),ui_data_json:this.node.uiData.toJSON(),error_message:this.node.states.error.message(),children:this.childrenIds(),maxInputsCount:this.maxInputsCount(),inputs:this.inputIds(),input_connection_output_indices:this.inputConnectionOutputIndices(),named_input_connection_points:this.namedInputConnectionPoints(),named_output_connection_points:this.namedOutputConnectionPoints(),param_ids:this.to_json_params(t),override_cloned_state_allowed:this.node.io.inputs.overrideClonedStateAllowed(),inputs_clone_required_states:this.node.io.inputs.cloneRequiredStates(),flags:{display:null===(n=null===(e=this.node.flags)||void 0===e?void 0:e.display)||void 0===n?void 0:n.active(),bypass:null===(r=null===(i=this.node.flags)||void 0===i?void 0:i.bypass)||void 0===r?void 0:r.active(),optimize:null===(o=null===(s=this.node.flags)||void 0===s?void 0:s.optimize)||void 0===o?void 0:o.active()},selection:void 0};return this.node.childrenAllowed()&&this.node.childrenController&&(a.selection=this.node.childrenController.selection.toJSON()),a}childrenIds(){return this.node.children().map((t=>t.graphNodeId()))}maxInputsCount(){return this.node.io.inputs.maxInputsCount()}inputIds(){return this.node.io.inputs.inputs().map((t=>null!=t?t.graphNodeId():void 0))}inputConnectionOutputIndices(){var t;return null===(t=this.node.io.connections.inputConnections())||void 0===t?void 0:t.map((t=>null!=t?t.output_index:void 0))}namedInputConnectionPoints(){return this.node.io.inputs.namedInputConnectionPoints().map((t=>t.toJSON()))}namedOutputConnectionPoints(){return this.node.io.outputs.namedOutputConnectionPoints().map((t=>t.toJSON()))}to_json_params_from_names(t,e=!1){return t.map((t=>this.node.params.get(t).graphNodeId()))}to_json_params(t=!1){return this.to_json_params_from_names(this.node.params.names,t)}}var Es,Ms;!function(t){t.BOOLEAN=\\\\\\\"boolean\\\\\\\",t.BUTTON=\\\\\\\"button\\\\\\\",t.COLOR=\\\\\\\"color\\\\\\\",t.FLOAT=\\\\\\\"float\\\\\\\",t.FOLDER=\\\\\\\"folder\\\\\\\",t.INTEGER=\\\\\\\"integer\\\\\\\",t.OPERATOR_PATH=\\\\\\\"operator_path\\\\\\\",t.PARAM_PATH=\\\\\\\"param_path\\\\\\\",t.NODE_PATH=\\\\\\\"node_path\\\\\\\",t.RAMP=\\\\\\\"ramp\\\\\\\",t.STRING=\\\\\\\"string\\\\\\\",t.VECTOR2=\\\\\\\"vector2\\\\\\\",t.VECTOR3=\\\\\\\"vector3\\\\\\\",t.VECTOR4=\\\\\\\"vector4\\\\\\\"}(Es||(Es={})),function(t){t.VISIBLE_UPDATED=\\\\\\\"param_visible_updated\\\\\\\",t.RAW_INPUT_UPDATED=\\\\\\\"raw_input_updated\\\\\\\",t.VALUE_UPDATED=\\\\\\\"param_value_updated\\\\\\\",t.EXPRESSION_UPDATED=\\\\\\\"param_expression_update\\\\\\\",t.ERROR_UPDATED=\\\\\\\"param_error_updated\\\\\\\",t.DELETED=\\\\\\\"param_deleted\\\\\\\"}(Ms||(Ms={}));const Ss=\\\\\\\"dependentOnFoundNode\\\\\\\",Cs=\\\\\\\"visibleIf\\\\\\\";var Ns,Ls;!function(t){t.TYPESCRIPT=\\\\\\\"typescript\\\\\\\"}(Ns||(Ns={})),function(t){t.AUDIO=\\\\\\\"audio\\\\\\\",t.TEXTURE_IMAGE=\\\\\\\"texture_image\\\\\\\",t.TEXTURE_VIDEO=\\\\\\\"texture_video\\\\\\\",t.GEOMETRY=\\\\\\\"geometry\\\\\\\",t.FONT=\\\\\\\"font\\\\\\\",t.SVG=\\\\\\\"svg\\\\\\\",t.JSON=\\\\\\\"json\\\\\\\"}(Ls||(Ls={}));class Os{constructor(t){this._param=t,this._programatic_visible_state=!0,this._callbackAllowed=!1,this._updateVisibilityAndRemoveDirtyBound=this.updateVisibilityAndRemoveDirty.bind(this),this._ui_data_dependency_set=!1}dispose(){var t;try{this._options.callback=void 0,this._options.callbackString=void 0}catch(t){}null===(t=this._visibility_graph_node)||void 0===t||t.dispose()}set(t){this._default_options=t,this._options=b.cloneDeep(this._default_options),this.post_set_options()}copy(t){this._default_options=b.cloneDeep(t.default()),this._options=b.cloneDeep(t.current()),this.post_set_options()}setOption(t,e){if(this._options[t]=e,this._param.components)for(let n of this._param.components)n.options.setOption(t,e)}post_set_options(){this._handleComputeOnDirty()}param(){return this._param}node(){return this._param.node}default(){return this._default_options}current(){return this._options}hasOptionsOverridden(){return!b.isEqual(this._options,this._default_options)}overriddenOptions(){const t={},e=Object.keys(this._options);for(let n of e)if(!b.isEqual(this._options[n],this._default_options[n])){const e=b.cloneDeep(this._options[n]);Object.assign(t,{[n]:e})}return t}overriddenOptionNames(){return Object.keys(this.overriddenOptions())}computeOnDirty(){return this._options.computeOnDirty||!1}_handleComputeOnDirty(){this.computeOnDirty()&&(this._computeOnDirty_callback_added||(this.param().addPostDirtyHook(\\\\\\\"computeOnDirty\\\\\\\",this._computeParam.bind(this)),this._computeOnDirty_callback_added=!0))}async _computeParam(){await this.param().compute()}hasCallback(){return null!=this._options.callback||null!=this._options.callbackString}allowCallback(){this._callbackAllowed=!0}executeCallback(){if(!this._callbackAllowed)return;if(!this.node())return;const t=this.getCallback();if(!t)return;if(!this.node().scene().loadingController.loaded())return;const e=this.param().parent_param;e?e.options.executeCallback():t(this.node(),this.param())}getCallback(){if(this.hasCallback())return this._options.callback=this._options.callback||this.createCallbackFromString()}createCallbackFromString(){const t=this._options.callbackString;if(t){const e=new Function(\\\\\\\"node\\\\\\\",\\\\\\\"scene\\\\\\\",\\\\\\\"window\\\\\\\",\\\\\\\"location\\\\\\\",t);return()=>{e(this.node(),this.node().scene(),null,null)}}}colorConversion(){return this._options.conversion}makesNodeDirtyWhenDirty(){let t;if(null!=this.param().parent_param)return!1;let e=!0;return null!=(t=this._options.cook)&&(e=t),e}fileBrowseOption(){return this._options.fileBrowse}fileBrowseAllowed(){return null!=this.fileBrowseOption()}fileBrowseType(){const t=this.fileBrowseOption();return t?t.type:null}separatorBefore(){return this._options.separatorBefore}separatorAfter(){return this._options.separatorAfter}isExpressionForEntities(){const t=this._options.expression;return t&&t.forEntities||!1}level(){return this._options.level||0}hasMenu(){return null!=this.menuOptions()||null!=this.menuStringOptions()}menuOptions(){return this._options.menu}menuStringOptions(){return this._options.menuString}menuEntries(){const t=this.menuOptions()||this.menuStringOptions();return t?t.entries:[]}isMultiline(){return!0===this._options.multiline}language(){return this._options.language}isCode(){return null!=this.language()}nodeSelectionOptions(){return this._options.nodeSelection}nodeSelectionContext(){const t=this.nodeSelectionOptions();if(t)return t.context}nodeSelectionTypes(){const t=this.nodeSelectionOptions();if(t)return t.types}dependentOnFoundNode(){return!(Ss in this._options)||this._options.dependentOnFoundNode}isSelectingParam(){return null!=this.paramSelectionOptions()}paramSelectionOptions(){return this._options.paramSelection}paramSelectionType(){const t=this.paramSelectionOptions();if(t){const e=t;if(!m.isBoolean(e))return e}}range(){return this._options.range||[0,1]}step(){return this._options.step}rangeLocked(){return this._options.rangeLocked||[!1,!1]}ensureInRange(t){const e=this.range();return t>=e[0]&&t<=e[1]?t:t<e[0]?!0===this.rangeLocked()[0]?e[0]:t:!0===this.rangeLocked()[1]?e[1]:t}isSpare(){return this._options.spare||!1}textureOptions(){return this._options.texture}textureAsEnv(){const t=this.textureOptions();return null!=t&&!0===t.env}isHidden(){return!0===this._options.hidden||!1===this._programatic_visible_state}isVisible(){return!this.isHidden()}setVisibleState(t){this._options.hidden=!t,this.param().emit(Ms.VISIBLE_UPDATED)}label(){return this._options.label}isLabelHidden(){const t=this.param().type();return t===Es.BUTTON||t===Es.BOOLEAN&&this.isFieldHidden()}isFieldHidden(){return!1===this._options.field}uiDataDependsOnOtherParams(){return Cs in this._options}visibilityPredecessors(){const t=this._options.visibleIf;if(!t)return[];let e=[];e=m.isArray(t)?f.uniq(t.map((t=>Object.keys(t))).flat()):Object.keys(t);const n=this.param().node;return f.compact(e.map((t=>{const e=n.params.get(t);if(e)return e;console.error(`param ${t} not found as visibility condition for ${this.param().name()} in node ${this.param().node.type()}`)})))}setUiDataDependency(){if(this._ui_data_dependency_set)return;this._ui_data_dependency_set=!0;const t=this.visibilityPredecessors();if(t.length>0){this._visibility_graph_node=new Ai(this.param().scene(),\\\\\\\"param_visibility\\\\\\\");for(let e of t)this._visibility_graph_node.addGraphInput(e);this._visibility_graph_node.addPostDirtyHook(\\\\\\\"_update_visibility_and_remove_dirty\\\\\\\",this._updateVisibilityAndRemoveDirtyBound)}}updateVisibilityAndRemoveDirty(){this.updateVisibility(),this.param().removeDirtyState()}async updateVisibility(){const t=this._options.visibleIf;if(t){const e=this.visibilityPredecessors(),n=e.map((t=>{if(t.isDirty())return t.compute()}));if(this._programatic_visible_state=!1,await Promise.all(n),m.isArray(t))for(let n of t){e.filter((t=>t.value==n[t.name()])).length==e.length&&(this._programatic_visible_state=!0)}else{const n=e.filter((e=>e.value==t[e.name()]));this._programatic_visible_state=n.length==e.length}this.param().emit(Ms.VISIBLE_UPDATED)}}}class Rs{constructor(t){this.param=t,this._blocked_emit=!1,this._blocked_parent_emit=!1,this._count_by_event_name={}}emitAllowed(){return!0!==this._blocked_emit&&(!this.param.scene().loadingController.isLoading()&&this.param.scene().dispatchController.emitAllowed())}blockEmit(){if(this._blocked_emit=!0,this.param.isMultiple()&&this.param.components)for(let t of this.param.components)t.emitController.blockEmit();return!0}unblockEmit(){if(this._blocked_emit=!1,this.param.isMultiple()&&this.param.components)for(let t of this.param.components)t.emitController.unblockEmit();return!0}blockParentEmit(){return this._blocked_parent_emit=!0,!0}unblockParentEmit(){return this._blocked_parent_emit=!1,!0}incrementCount(t){this._count_by_event_name[t]=this._count_by_event_name[t]||0,this._count_by_event_name[t]+=1}eventsCount(t){return this._count_by_event_name[t]||0}emit(t){this.emitAllowed()&&(this.param.emit(t),null!=this.param.parent_param&&!0!==this._blocked_parent_emit&&this.param.parent_param.emit(t))}}class Ps{constructor(t){this.param=t}toJSON(){const t={name:this.param.name(),type:this.param.type(),raw_input:this.rawInput(),value:this.value(),value_pre_conversion:this.value_pre_conversion(),expression:this.expression(),graph_node_id:this.param.graphNodeId(),error_message:this.error_message(),is_visible:this.is_visible(),components:void 0};return this.param.isMultiple()&&this.param.components&&(t.components=this.param.components.map((t=>t.graphNodeId()))),t}rawInput(){return this.param.rawInputSerialized()}value(){return this.param.valueSerialized()}value_pre_conversion(){return this.param.valuePreConversionSerialized()}expression(){var t;return this.param.hasExpression()?null===(t=this.param.expressionController)||void 0===t?void 0:t.expression():void 0}error_message(){return this.param.states.error.message()}is_visible(){return this.param.options.isVisible()}}class Is{constructor(t){this.param=t}active(){const t=this.param.scene().timeController.graphNode.graphNodeId();return this.param.graphPredecessorIds().includes(t)}}class Fs{constructor(t){this.param=t}set(t){this._message!=t&&(this._message=t,this._message&&ai.warn(this.param.path(),this._message),this.param.emitController.emit(Ms.ERROR_UPDATED))}message(){return this._message}clear(){this.set(void 0)}active(){return null!=this._message}}class Ds{constructor(t){this.param=t,this.timeDependent=new Is(this.param),this.error=new Fs(this.param)}}class ks extends Ai{constructor(t,e,n){var i;super(t.scene(),\\\\\\\"MethodDependency\\\\\\\"),this.param=t,this.path_argument=e,this.decomposed_path=n,this._update_from_name_change_bound=this._update_from_name_change.bind(this),null===(i=t.expressionController)||void 0===i||i.registerMethodDependency(this),this.addPostDirtyHook(\\\\\\\"_update_from_name_change\\\\\\\",this._update_from_name_change_bound)}_update_from_name_change(t){if(t&&this.decomposed_path){const e=t;this.decomposed_path.update_from_name_change(e);const n=this.decomposed_path.to_path(),i=this.jsep_node;i&&(i.value=`${i.value}`.replace(`${this.path_argument}`,n),i.raw=i.raw.replace(`${this.path_argument}`,n)),this.param.expressionController&&this.param.expressionController.update_from_method_dependency_name_change()}}reset(){this.graphDisconnectPredecessors()}listen_for_name_changes(){if(this.jsep_node&&this.decomposed_path)for(let t of this.decomposed_path.named_nodes())if(t){const e=t;e.nameController&&this.addGraphInput(e.nameController.graph_node)}}set_jsep_node(t){this.jsep_node=t}set_resolved_graph_node(t){this.resolved_graph_node=t}set_unresolved_path(t){this.unresolved_path=t}static create(t,e,n,i){const r=m.isNumber(e),s=new ks(t,e,i);if(n)s.set_resolved_graph_node(n);else if(!r){const t=e;s.set_unresolved_path(t)}return s}}const Bs=[];class zs extends Ai{constructor(t,e){super(t,\\\\\\\"BaseParam\\\\\\\"),this._options=new Os(this),this._emit_controller=new Rs(this),this._is_computing=!1,this._node=e,this.initialize_param()}get options(){return this._options=this._options||new Os(this)}get emitController(){return this._emit_controller=this._emit_controller||new Rs(this)}get expressionController(){return this._expression_controller}get serializer(){return this._serializer=this._serializer||new Ps(this)}get states(){return this._states=this._states||new Ds(this)}dispose(){var t,e;const n=this.graphPredecessors();for(let t of n)t instanceof ks&&t.dispose();null===(t=this._expression_controller)||void 0===t||t.dispose(),super.dispose(),null===(e=this._options)||void 0===e||e.dispose()}initialize_param(){}static type(){return Es.FLOAT}type(){return this.constructor.type()}isNumeric(){return!1}setName(t){super.setName(t)}get value(){return this._value}copy_value(t){t.type()==this.type()?this._copy_value(t):console.warn(`cannot copy value from ${t.type()} to ${this.type()}`)}_copy_value(t){throw\\\\\\\"abstract method param._copy_value\\\\\\\"}valuePreConversionSerialized(){}convert(t){return null}static are_raw_input_equal(t,e){return!1}is_raw_input_equal(t){return this.constructor.are_raw_input_equal(this._raw_input,t)}static are_values_equal(t,e){return!1}is_value_equal(t){return this.constructor.are_values_equal(this.value,t)}_clone_raw_input(t){return t}set(t){this._raw_input=this._clone_raw_input(this._prefilter_invalid_raw_input(t)),this.emitController.emit(Ms.RAW_INPUT_UPDATED),this.processRawInput()}_prefilter_invalid_raw_input(t){return t}defaultValue(){return this._default_value}isDefault(){return this._raw_input==this._default_value}rawInput(){return this._raw_input}processRawInput(){}async compute(){if(this.scene().loadingController.isLoading()&&console.warn(`param attempt to compute ${this.path()}`),this.isDirty()){if(this._is_computing)return new Promise(((t,e)=>{this._compute_resolves=this._compute_resolves||[],this._compute_resolves.push(t)}));if(this._is_computing=!0,await this.processComputation(),this._is_computing=!1,this._compute_resolves){let t;for(;t=this._compute_resolves.pop();)t()}}}async processComputation(){}setInitValue(t){this._default_value=this._clone_raw_input(this._prefilter_invalid_raw_input(t))}_setupNodeDependencies(t){var e,n;if(t?(this.options.allowCallback(),this.parent_param||(this.options.makesNodeDirtyWhenDirty()?null===(n=t.params.params_node)||void 0===n||n.addGraphInput(this,!1):this.dirtyController.addPostDirtyHook(\\\\\\\"run callback\\\\\\\",(async()=>{await this.compute(),this.options.executeCallback()})))):this._node&&(null===(e=this._node.params.params_node)||void 0===e||e.removeGraphInput(this)),this.components)for(let e of this.components)e._setupNodeDependencies(t)}get node(){return this._node}parent(){return this.node}set_parent_param(t){t.addGraphInput(this,!1),this._parent_param=t}get parent_param(){return this._parent_param}has_parent_param(){return null!=this._parent_param}path(){var t;return(null===(t=this.node)||void 0===t?void 0:t.path())+\\\\\\\"/\\\\\\\"+this.name()}pathRelativeTo(t){const e=xi.relativePath(t,this.node);return e.length>0?`${e}${xi.SEPARATOR}${this.name()}`:this.name()}emit(t){this.emitController.emitAllowed()&&(this.emitController.incrementCount(t),this.scene().dispatchController.dispatch(this,t))}get components(){return this._components}componentNames(){return Bs}isMultiple(){return this.componentNames().length>0}initComponents(){}hasExpression(){return null!=this.expressionController&&this.expressionController.active()}toJSON(){return this.serializer.toJSON()}}var Us=n(96),Gs=n.n(Us);Gs.a.addUnaryOp(\\\\\\\"@\\\\\\\");Gs.a.addBinaryOp(\\\\\\\"**\\\\\\\",10);class Vs{constructor(){}parse_expression(t){try{this.reset(),this.node=Gs()(t)}catch(e){const n=`could not parse the expression '${t}' (error: ${e})`;this.error_message=n}}parse_expression_for_string_param(t){try{this.reset();const e=Vs.string_value_elements(t),n=[];for(let t=0;t<e.length;t++){const i=e[t];let r;if(t%2==1)r=Gs()(i);else{const t=i.replace(/\\\\'/g,\\\\\\\"\\\\\\\\'\\\\\\\");r={type:\\\\\\\"Literal\\\\\\\",value:`'${t}'`,raw:`'${t}'`}}n.push(r)}this.node={type:\\\\\\\"CallExpression\\\\\\\",arguments:n,callee:{type:\\\\\\\"Identifier\\\\\\\",name:\\\\\\\"strConcat\\\\\\\"}}}catch(e){const n=`could not parse the expression '${t}' (error: ${e})`;this.error_message=n}}static string_value_elements(t){return null!=t&&m.isString(t)?t.split(\\\\\\\"`\\\\\\\"):[]}reset(){this.node=void 0,this.error_message=void 0}}class Hs{constructor(t){this.param=t,this._set_error_from_error_bound=this._set_error_from_error.bind(this)}clear_error(){this._error_message=void 0}set_error(t){this._error_message=this._error_message||t}_set_error_from_error(t){m.isString(t)?this._error_message=t:this._error_message=t.message}is_errored(){return null!=this._error_message}error_message(){return this._error_message}reset(){this._error_message=void 0}traverse_node(t){const e=`traverse_${t.type}`;if(this[e])return this[e](t);this.set_error(`expression unknown node type: ${t.type}`)}traverse_BinaryExpression(t){return`${this.traverse_node(t.left)} ${t.operator} ${this.traverse_node(t.right)}`}traverse_LogicalExpression(t){return`${this.traverse_node(t.left)} ${t.operator} ${this.traverse_node(t.right)}`}traverse_MemberExpression(t){return`${this.traverse_node(t.object)}.${this.traverse_node(t.property)}`}traverse_ConditionalExpression(t){return`(${this.traverse_node(t.test)}) ? (${this.traverse_node(t.consequent)}) : (${this.traverse_node(t.alternate)})`}traverse_Compound(t){const e=t.body;let n=[];for(let t=0;t<e.length;t++){const i=e[t];\\\\\\\"Identifier\\\\\\\"==i.type?\\\\\\\"$\\\\\\\"==i.name[0]?n.push(\\\\\\\"`${\\\\\\\"+this.traverse_node(i)+\\\\\\\"}`\\\\\\\"):n.push(`'${i.name}'`):n.push(\\\\\\\"`${\\\\\\\"+this.traverse_node(i)+\\\\\\\"}`\\\\\\\")}return n.join(\\\\\\\" + \\\\\\\")}traverse_Literal(t){return`${t.raw}`}}class js{constructor(){}reset(){this._attribute_names&&this._attribute_names.clear()}assign_attributes_lines(){var t;if(this._attribute_names){const e=[];return null===(t=this._attribute_names)||void 0===t||t.forEach((t=>{e.push(js.assign_attribute_line(t))})),e.join(\\\\\\\";\\\\n\\\\\\\")}return\\\\\\\"\\\\\\\"}assign_arrays_lines(){var t;if(this._attribute_names){const e=[];return null===(t=this._attribute_names)||void 0===t||t.forEach((t=>{e.push(js.assign_item_size_line(t)),e.push(js.assign_array_line(t))})),e.join(\\\\\\\";\\\\n\\\\\\\")}return\\\\\\\"\\\\\\\"}attribute_presence_check_line(){var t;if(this._attribute_names){const e=[];if(null===(t=this._attribute_names)||void 0===t||t.forEach((t=>{const n=js.var_attribute(t);e.push(n)})),e.length>0)return e.join(\\\\\\\" && \\\\\\\")}return\\\\\\\"true\\\\\\\"}add(t){this._attribute_names=this._attribute_names||new Set,this._attribute_names.add(t)}static assign_attribute_line(t){return`const ${this.var_attribute(t)} = entities[0].geometry().attributes['${t}']`}static assign_item_size_line(t){const e=this.var_attribute(t);return`const ${this.var_attribute_size(t)} = ${e}.itemSize`}static assign_array_line(t){const e=this.var_attribute(t);return`const ${this.var_array(t)} = ${e}.array`}static var_attribute(t){return`attrib_${t}`}static var_attribute_size(t){return`attrib_size_${t}`}static var_array(t){return`array_${t}`}var_attribute_size(t){return js.var_attribute_size(t)}var_array(t){return js.var_array(t)}}const Ws={math_random:\\\\\\\"random\\\\\\\"},qs=Object.keys(ns),Xs={};[\\\\\\\"abs\\\\\\\",\\\\\\\"acos\\\\\\\",\\\\\\\"acosh\\\\\\\",\\\\\\\"asin\\\\\\\",\\\\\\\"asinh\\\\\\\",\\\\\\\"atan\\\\\\\",\\\\\\\"atan2\\\\\\\",\\\\\\\"atanh\\\\\\\",\\\\\\\"ceil\\\\\\\",\\\\\\\"cos\\\\\\\",\\\\\\\"cosh\\\\\\\",\\\\\\\"exp\\\\\\\",\\\\\\\"expm1\\\\\\\",\\\\\\\"floor\\\\\\\",\\\\\\\"log\\\\\\\",\\\\\\\"log1p\\\\\\\",\\\\\\\"log2\\\\\\\",\\\\\\\"log10\\\\\\\",\\\\\\\"max\\\\\\\",\\\\\\\"min\\\\\\\",\\\\\\\"pow\\\\\\\",\\\\\\\"round\\\\\\\",\\\\\\\"sign\\\\\\\",\\\\\\\"sin\\\\\\\",\\\\\\\"sinh\\\\\\\",\\\\\\\"sqrt\\\\\\\",\\\\\\\"tan\\\\\\\",\\\\\\\"tanh\\\\\\\"].forEach((t=>{Xs[t]=`Math.${t}`})),[\\\\\\\"cbrt\\\\\\\",\\\\\\\"hypot\\\\\\\",\\\\\\\"log10\\\\\\\",\\\\\\\"trunc\\\\\\\"].forEach((t=>{Xs[t]=`Math.${t}`})),Object.keys(Ws).forEach((t=>{const e=Ws[t];Xs[t]=`Math.${e}`})),[\\\\\\\"fit\\\\\\\",\\\\\\\"fit01\\\\\\\",\\\\\\\"fract\\\\\\\",\\\\\\\"deg2rad\\\\\\\",\\\\\\\"rad2deg\\\\\\\",\\\\\\\"rand\\\\\\\",\\\\\\\"clamp\\\\\\\"].forEach((t=>{Xs[t]=`Core.Math.${t}`})),qs.forEach((t=>{Xs[t]=`Core.Math.Easing.${t}`})),[\\\\\\\"precision\\\\\\\"].forEach((t=>{Xs[t]=`Core.String.${t}`}));const Ys={if:class{static if(t){return`(${t[0]}) ? (${t[1]}) : (${t[2]})`}}.if},$s={};[\\\\\\\"E\\\\\\\",\\\\\\\"LN2\\\\\\\",\\\\\\\"LN10\\\\\\\",\\\\\\\"LOG10E\\\\\\\",\\\\\\\"LOG2E\\\\\\\",\\\\\\\"PI\\\\\\\",\\\\\\\"SQRT1_2\\\\\\\",\\\\\\\"SQRT2\\\\\\\"].forEach((t=>{$s[t]=`Math.${t}`}));const Js={x:0,y:1,z:2,w:3,r:0,g:1,b:2};class Zs extends Hs{constructor(t){super(t),this.param=t,this._attribute_requirements_controller=new js,this.methods=[],this.method_index=-1,this.method_dependencies=[],this.immutable_dependencies=[]}parse_tree(t){if(this.reset(),null==t.error_message){try{if(this._attribute_requirements_controller.reset(),t.node){const e=this.traverse_node(t.node);e&&!this.is_errored()&&(this.function_main_string=e)}else console.warn(\\\\\\\"no parsed_tree.node\\\\\\\")}catch(t){console.warn(`error in expression for param ${this.param.path()}`),console.warn(t)}if(this.function_main_string)try{this.function=new Function(\\\\\\\"Core\\\\\\\",\\\\\\\"param\\\\\\\",\\\\\\\"methods\\\\\\\",\\\\\\\"_set_error_from_error\\\\\\\",`\\\\n\\\\t\\\\t\\\\t\\\\t\\\\ttry {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t${this.function_body()}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t} catch(e) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t_set_error_from_error(e)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\treturn null;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t}`)}catch(t){console.warn(t),this.set_error(\\\\\\\"cannot generate function\\\\\\\")}else this.set_error(\\\\\\\"cannot generate function body\\\\\\\")}else this.set_error(\\\\\\\"cannot parse expression\\\\\\\")}reset(){super.reset(),this.function_main_string=void 0,this.methods=[],this.method_index=-1,this.function=void 0,this.method_dependencies=[],this.immutable_dependencies=[]}function_body(){return this.param.options.isExpressionForEntities()?`\\\\n\\\\t\\\\t\\\\tconst entities = param.expressionController.entities();\\\\n\\\\t\\\\t\\\\tif(entities){\\\\n\\\\t\\\\t\\\\t\\\\treturn new Promise( async (resolve, reject)=>{\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tlet entity;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tconst entity_callback = param.expressionController.entity_callback();\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t${this._attribute_requirements_controller.assign_attributes_lines()}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tif( ${this._attribute_requirements_controller.attribute_presence_check_line()} ){\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t${this._attribute_requirements_controller.assign_arrays_lines()}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tfor(let index=0; index < entities.length; index++){\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tentity = entities[index];\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tresult = ${this.function_main_string};\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tentity_callback(entity, result);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tresolve()\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tconst error = new Error('attribute not found')\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t_set_error_from_error(error)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\treject(error)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t})\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\treturn []`:`\\\\n\\\\t\\\\t\\\\treturn new Promise( async (resolve, reject)=>{\\\\n\\\\t\\\\t\\\\t\\\\ttry {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tconst value = ${this.function_main_string}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tresolve(value)\\\\n\\\\t\\\\t\\\\t\\\\t} catch(e) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t_set_error_from_error(e)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\treject()\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t})\\\\n\\\\t\\\\t\\\\t`}eval_allowed(){return null!=this.function}eval_function(){if(this.function){this.clear_error();const t={Math:rs,String:sr};return this.function(t,this.param,this.methods,this._set_error_from_error_bound)}}traverse_CallExpression(t){const e=t.arguments.map((t=>this.traverse_node(t))),n=t.callee.name;if(n){const i=Ys[n];if(i)return i(e);const r=`${e.join(\\\\\\\", \\\\\\\")}`,s=Xs[n];if(s)return`${s}(${r})`;const o=ai.expressionsRegister;if(o.getMethod(n)){const i=t.arguments[0],s=`return ${e[0]}`;let o,a=[];try{o=new Function(s),a=o()}catch{}return this._create_method_and_dependencies(n,a,i),`(await methods[${this.method_index}].processArguments([${r}]))`}{const t=`method not found (${n}), available methods are: ${o.availableMethods().join(\\\\\\\", \\\\\\\")}`;ai.warn(t)}}this.set_error(`unknown method: ${n}`)}traverse_BinaryExpression(t){return`(${this.traverse_node(t.left)} ${t.operator} ${this.traverse_node(t.right)})`}traverse_LogicalExpression(t){return`(${this.traverse_node(t.left)} ${t.operator} ${this.traverse_node(t.right)})`}traverse_MemberExpression(t){return`${this.traverse_node(t.object)}.${this.traverse_node(t.property)}`}traverse_UnaryExpression(t){if(\\\\\\\"@\\\\\\\"===t.operator){let e,n,i=t.argument;switch(i.type){case\\\\\\\"Identifier\\\\\\\":e=i.name;break;case\\\\\\\"MemberExpression\\\\\\\":{const t=i,r=t.object,s=t.property;e=r.name,n=s.name;break}}if(e){if(e=Wr.remapName(e),\\\\\\\"ptnum\\\\\\\"==e)return\\\\\\\"((entity != null) ? entity.index() : 0)\\\\\\\";{const t=this._attribute_requirements_controller.var_attribute_size(e),i=this._attribute_requirements_controller.var_array(e);if(this._attribute_requirements_controller.add(e),n){return`${i}[entity.index()*${t}+${Js[n]}]`}return`${i}[entity.index()*${t}]`}}return console.warn(\\\\\\\"attribute not found\\\\\\\"),\\\\\\\"\\\\\\\"}return`${t.operator}${this.traverse_node(t.argument)}`}traverse_Literal(t){return`${t.raw}`}traverse_Identifier(t){if(\\\\\\\"$\\\\\\\"!=t.name[0])return t.name;{const e=t.name.substr(1),n=$s[e];if(n)return n;const i=`traverse_Identifier_${e}`;if(this[i])return this[i]();this.set_error(`identifier unknown: ${t.name}`)}}traverse_Identifier_F(){return this.immutable_dependencies.push(this.param.scene().timeController.graphNode),\\\\\\\"param.scene().timeController.frame()\\\\\\\"}traverse_Identifier_T(){return this.immutable_dependencies.push(this.param.scene().timeController.graphNode),\\\\\\\"param.scene().timeController.time()\\\\\\\"}traverse_Identifier_OS(){return`'${this.param.node.name()}'`}traverse_Identifier_CH(){return`'${this.param.name()}'`}traverse_Identifier_CEX(){return this._method_centroid(\\\\\\\"x\\\\\\\")}traverse_Identifier_CEY(){return this._method_centroid(\\\\\\\"y\\\\\\\")}traverse_Identifier_CEZ(){return this._method_centroid(\\\\\\\"z\\\\\\\")}_method_centroid(t){const e=[0,`'${t}'`].join(\\\\\\\", \\\\\\\");return this._create_method_and_dependencies(\\\\\\\"centroid\\\\\\\",0),`(await methods[${this.method_index}].processArguments([${e}]))`}_create_method_and_dependencies(t,e,n){const i=ai.expressionsRegister,r=i.getMethod(t);if(!r){const e=`method not found (${t}), available methods are: ${i.availableMethods().join(\\\\\\\", \\\\\\\")}`;return this.set_error(e),void ai.warn(e)}const s=new r(this.param);if(this.method_index+=1,this.methods[this.method_index]=s,s.require_dependency()){const t=s.findDependency(e);t?(n&&t.set_jsep_node(n),this.method_dependencies.push(t)):n&&m.isString(e)&&this.param.scene().missingExpressionReferencesController.register(this.param,n,e)}}}class Qs extends Hs{constructor(t){super(t),this.param=t}parse_tree(t){if(null==t.error_message&&t.node)try{return this.traverse_node(t.node)}catch(t){this.set_error(\\\\\\\"could not traverse tree\\\\\\\")}else this.set_error(\\\\\\\"cannot parse tree\\\\\\\")}traverse_CallExpression(t){const e=`${t.arguments.map((t=>this.traverse_node(t))).join(\\\\\\\", \\\\\\\")}`;return`${t.callee.name}(${e})`}traverse_UnaryExpression(t){return`${t.operator}${this.traverse_node(t.argument)}`}traverse_Identifier(t){return`${t.name}`}}class Ks{constructor(t){this.param=t,this.cyclic_graph_detected=!1,this.method_dependencies=[]}set_error(t){this.error_message=this.error_message||t}reset(){this.param.graphDisconnectPredecessors(),this.method_dependencies.forEach((t=>{t.reset()})),this.method_dependencies=[]}update(t){this.cyclic_graph_detected=!1,this.connect_immutable_dependencies(t),this.method_dependencies=t.method_dependencies,this.handle_method_dependencies(),this.listen_for_name_changes()}connect_immutable_dependencies(t){t.immutable_dependencies.forEach((t=>{if(0==this.cyclic_graph_detected&&0==this.param.addGraphInput(t))return this.cyclic_graph_detected=!0,this.set_error(\\\\\\\"cannot create expression, infinite graph detected\\\\\\\"),void this.reset()}))}handle_method_dependencies(){this.method_dependencies.forEach((t=>{0==this.cyclic_graph_detected&&this.handle_method_dependency(t)}))}handle_method_dependency(t){const e=t.resolved_graph_node;if(e&&!this.param.addGraphInput(e))return this.cyclic_graph_detected=!0,this.set_error(\\\\\\\"cannot create expression, infinite graph detected\\\\\\\"),void this.reset()}listen_for_name_changes(){this.method_dependencies.forEach((t=>{t.listen_for_name_changes()}))}}class to{constructor(t){this.param=t,this.parse_completed=!1,this.parse_started=!1,this.parsed_tree=new Vs,this.function_generator=new Zs(this.param),this.dependencies_controller=new Ks(this.param)}parse_expression(t){if(this.parse_started)throw new Error(`parse in progress for param ${this.param.path()}`);this.parse_started=!0,this.parse_completed=!1,this.parsed_tree=this.parsed_tree||new Vs,this.reset(),this.param.type()==Es.STRING?this.parsed_tree.parse_expression_for_string_param(t):this.parsed_tree.parse_expression(t),this.function_generator.parse_tree(this.parsed_tree),null==this.function_generator.error_message()&&(this.dependencies_controller.update(this.function_generator),this.dependencies_controller.error_message?this.param.states.error.set(this.dependencies_controller.error_message):(this.parse_completed=!0,this.parse_started=!1))}async compute_function(){if(!this.compute_allowed())return new Promise(((t,e)=>{t(null)}));try{return await this.function_generator.eval_function()}catch(t){return}}reset(){this.parse_completed=!1,this.parse_started=!1,this.dependencies_controller.reset(),this.function_generator.reset()}is_errored(){return this.function_generator.is_errored()}error_message(){return this.function_generator.error_message()}compute_allowed(){return this.function_generator.eval_allowed()}update_from_method_dependency_name_change(){this.expression_string_generator=this.expression_string_generator||new Qs(this.param);const t=this.expression_string_generator.parse_tree(this.parsed_tree);t?this.param.set(t):console.warn(\\\\\\\"failed to regenerate expression\\\\\\\")}}class eo{constructor(t){this.param=t}dispose(){this._resetMethodDependencies()}_resetMethodDependencies(){var t,e;null===(t=this._method_dependencies_by_graph_node_id)||void 0===t||t.forEach((t=>{t.dispose()})),null===(e=this._method_dependencies_by_graph_node_id)||void 0===e||e.clear()}registerMethodDependency(t){this._method_dependencies_by_graph_node_id=this._method_dependencies_by_graph_node_id||new Map,this._method_dependencies_by_graph_node_id.set(t.graphNodeId(),t)}active(){return null!=this._expression}expression(){return this._expression}is_errored(){return!!this._manager&&this._manager.is_errored()}error_message(){return this._manager?this._manager.error_message():null}requires_entities(){return this.param.options.isExpressionForEntities()}set_expression(t,e=!0){var n;this.param.scene().missingExpressionReferencesController.deregister_param(this.param),this.param.scene().expressionsController.deregister_param(this.param),this._expression!=t&&(this._resetMethodDependencies(),this._expression=t,this._expression?(this._manager=this._manager||new to(this.param),this._manager.parse_expression(this._expression)):null===(n=this._manager)||void 0===n||n.reset(),e&&this.param.setDirty())}update_from_method_dependency_name_change(){this._manager&&this.active()&&this._manager.update_from_method_dependency_name_change()}async compute_expression(){if(this._manager&&this.active()){return await this._manager.compute_function()}}async compute_expression_for_entities(t,e){var n,i;this.set_entities(t,e),await this.compute_expression(),(null===(n=this._manager)||void 0===n?void 0:n.error_message())&&this.param.node.states.error.set(`expression evalution error: ${null===(i=this._manager)||void 0===i?void 0:i.error_message()}`),this.reset_entities()}compute_expression_for_points(t,e){return this.compute_expression_for_entities(t,e)}compute_expression_for_objects(t,e){return this.compute_expression_for_entities(t,e)}entities(){return this._entities}entity_callback(){return this._entity_callback}set_entities(t,e){this._entities=t,this._entity_callback=e}reset_entities(){this._entities=void 0,this._entity_callback=void 0}}class no extends zs{isNumeric(){return!0}isDefault(){return this._raw_input==this._default_value}_prefilter_invalid_raw_input(t){return m.isArray(t)?t[0]:t}processRawInput(){this.states.error.clear();const t=this.convert(this._raw_input);null!=t?(this._expression_controller&&(this._expression_controller.set_expression(void 0,!1),this.emitController.emit(Ms.EXPRESSION_UPDATED)),t!=this._value&&(this._update_value(t),this.setSuccessorsDirty(this))):m.isString(this._raw_input)?(this._expression_controller=this._expression_controller||new eo(this),this._raw_input!=this._expression_controller.expression()&&(this._expression_controller.set_expression(this._raw_input),this.emitController.emit(Ms.EXPRESSION_UPDATED))):this.states.error.set(`param input is invalid (${this.path()})`)}async processComputation(){var t;if((null===(t=this.expressionController)||void 0===t?void 0:t.active())&&!this.expressionController.requires_entities()){const t=await this.expressionController.compute_expression();if(this.expressionController.is_errored())this.states.error.set(`expression error: \\\\\\\"${this.expressionController.expression()}\\\\\\\" (${this.expressionController.error_message()})`);else{const e=this.convert(t);null!=e?(this.states.error.active()&&this.states.error.clear(),this._update_value(e)):this.states.error.set(`expression returns an invalid type (${t}) (${this.expressionController.expression()})`)}}}_update_value(t){this._value=t,this.parent_param&&this.parent_param.set_value_from_components(),this.options.executeCallback(),this.emitController.emit(Ms.VALUE_UPDATED),this.removeDirtyState()}}class io extends no{static type(){return Es.FLOAT}defaultValueSerialized(){return this._default_value}rawInputSerialized(){return this._raw_input}valueSerialized(){return this.value}_copy_value(t){this.set(t.valueSerialized())}_prefilter_invalid_raw_input(t){return m.isArray(t)?t[0]:m.isString(t)&&sr.isNumber(t)?parseFloat(t):t}static are_raw_input_equal(t,e){return t==e}static are_values_equal(t,e){return t==e}static convert(t){if(m.isNumber(t))return t;if(m.isBoolean(t))return t?1:0;if(sr.isNumber(t)){const e=parseFloat(t);if(m.isNumber(e))return e}return null}convert(t){const e=io.convert(t);return e?this.options.ensureInRange(e):e}}class ro extends zs{constructor(){super(...arguments),this._components_contructor=io}get components(){return this._components}isNumeric(){return!0}isDefault(){for(let t of this.components)if(!t.isDefault())return!1;return!0}rawInput(){return this._components.map((t=>t.rawInput()))}rawInputSerialized(){return this._components.map((t=>t.rawInputSerialized()))}_copy_value(t){for(let e=0;e<this.components.length;e++){const n=this.components[e],i=t.components[e];n.copy_value(i)}}initComponents(){if(null!=this._components)return;let t=0;this._components=new Array(this.componentNames().length);for(let e of this.componentNames()){const n=new this._components_contructor(this.scene(),this._node);let i;i=m.isArray(this._default_value)?this._default_value[t]:this._default_value[e],n.options.copy(this.options),n.setInitValue(i),n.setName(`${this.name()}${e}`),n.set_parent_param(this),this._components[t]=n,t++}}async processComputation(){await this.compute_components(),this.set_value_from_components()}set_value_from_components(){}hasExpression(){var t;for(let e of this.components)if(null===(t=e.expressionController)||void 0===t?void 0:t.active())return!0;return!1}async compute_components(){const t=this.components,e=[];for(let n of t)n.isDirty()&&e.push(n.compute());await Promise.all(e),this.removeDirtyState()}_prefilter_invalid_raw_input(t){if(m.isArray(t))return t;{const e=t;return this.componentNames().map((()=>e))}}processRawInput(){const t=this.scene().cooker;t.block();const e=this.components;for(let t of e)t.emitController.blockParentEmit();const n=this._raw_input;let i=0;if(m.isArray(n))for(let t=0;t<e.length;t++){let r=n[t];null==r&&(r=i),e[t].set(r),i=r}else for(let t=0;t<e.length;t++){let r=n[this.componentNames()[t]];null==r&&(r=i),e[t].set(r),i=r}t.unblock();for(let t=0;t<e.length;t++)e[t].emitController.unblockParentEmit();this.emitController.emit(Ms.VALUE_UPDATED)}}var so;!function(t){t.NONE=\\\\\\\"no conversion\\\\\\\",t.GAMMA_TO_LINEAR=\\\\\\\"gamma -> linear\\\\\\\",t.LINEAR_TO_GAMMA=\\\\\\\"linear -> gamma\\\\\\\",t.SRGB_TO_LINEAR=\\\\\\\"sRGB -> linear\\\\\\\",t.LINEAR_TO_SRGB=\\\\\\\"linear -> sRGB\\\\\\\"}(so||(so={}));so.NONE,so.GAMMA_TO_LINEAR,so.LINEAR_TO_GAMMA,so.SRGB_TO_LINEAR,so.LINEAR_TO_SRGB;class oo{static set_hsv(t,e,n,i){t=Object(Ln.f)(t,1),e=Object(Ln.d)(e,0,1),n=Object(Ln.d)(n,0,1),i.setHSL(t,e*n/((t=(2-e)*n)<1?t:2-t),.5*t)}}const ao=[\\\\\\\"r\\\\\\\",\\\\\\\"g\\\\\\\",\\\\\\\"b\\\\\\\"];class lo extends no{static type(){return Es.INTEGER}defaultValueSerialized(){return this._default_value}rawInputSerialized(){return this._raw_input}valueSerialized(){return this.value}_copy_value(t){this.set(t.valueSerialized())}_prefilter_invalid_raw_input(t){return m.isArray(t)?t[0]:m.isString(t)&&sr.isNumber(t)?parseInt(t):t}static are_raw_input_equal(t,e){return t==e}static are_values_equal(t,e){return t==e}static convert(t){if(m.isNumber(t))return Math.round(t);if(m.isBoolean(t))return t?1:0;if(sr.isNumber(t)){const e=parseInt(t);if(m.isNumber(e))return e}return null}convert(t){const e=lo.convert(t);return e?this.options.ensureInRange(e):e}}class co{constructor(){this._index=-1,this._path_elements=[],this._named_nodes=[],this._graph_node_ids=[],this._node_element_by_graph_node_id=new Map}reset(){this._index=-1,this._path_elements=[],this._named_nodes=[],this._graph_node_ids=[],this._node_element_by_graph_node_id.clear()}add_node(t,e){this._index+=1,t==e.name()&&(this._named_nodes[this._index]=e),this._graph_node_ids[this._index]=e.graphNodeId(),this._node_element_by_graph_node_id.set(e.graphNodeId(),t)}add_path_element(t){this._index+=1,this._path_elements[this._index]=t}named_graph_nodes(){return this._named_nodes}named_nodes(){const t=[];for(let e of this._named_nodes)if(e){const n=e;n.nameController&&t.push(n)}return t}update_from_name_change(t){this._named_nodes.map((t=>null==t?void 0:t.graphNodeId())).includes(t.graphNodeId())&&this._node_element_by_graph_node_id.set(t.graphNodeId(),t.name())}to_path(){const t=new Array(this._index);for(let e=0;e<=this._index;e++){const n=this._named_nodes[e];if(n){const i=this._node_element_by_graph_node_id.get(n.graphNodeId());i&&(t[e]=i)}else{const n=this._path_elements[e];n&&(t[e]=n)}}let e=t.join(xi.SEPARATOR);const n=e[0];return n&&(xi.NON_LETTER_PREFIXES.includes(n)||(e=`${xi.SEPARATOR}${e}`)),e}}class uo extends zs{constructor(){super(...arguments),this.decomposed_path=new co}}var ho;!function(t){t.NODE=\\\\\\\"NODE\\\\\\\",t.PARAM=\\\\\\\"PARAM\\\\\\\"}(ho||(ho={}));class po extends uo{constructor(){super(...arguments),this._found_node=null,this._found_node_with_expected_type=null,this._found_param=null,this._found_param_with_expected_type=null}static type(){return Es.OPERATOR_PATH}defaultValueSerialized(){return this._default_value}rawInputSerialized(){return`${this._raw_input}`}valueSerialized(){return`${this.value}`}_copy_value(t){this.set(t.valueSerialized())}static are_raw_input_equal(t,e){return t==e}static are_values_equal(t,e){return t==e}isDefault(){return this._value==this._default_value}setNode(t){this.set(t.path())}processRawInput(){this._value!=this._raw_input&&(this._value=this._raw_input,this.setDirty(),this.emitController.emit(Ms.VALUE_UPDATED))}async processComputation(){this.find_target()}find_target(){if(!this.node)return;const t=this._value;let e=null,n=null;const i=null!=t&&\\\\\\\"\\\\\\\"!==t,r=this.options.paramSelectionOptions()?ho.PARAM:ho.NODE;this.scene().referencesController.reset_reference_from_param(this),this.decomposed_path.reset(),i&&(r==ho.PARAM?n=xi.findParam(this.node,t,this.decomposed_path):e=xi.findNode(this.node,t,this.decomposed_path));const s=r==ho.PARAM?this._found_param:this._found_node,o=r==ho.PARAM?n:e;if(this.scene().referencesController.set_named_nodes_from_param(this),e&&this.scene().referencesController.set_reference_from_param(this,e),(null==s?void 0:s.graphNodeId())!==(null==o?void 0:o.graphNodeId())){const t=this.options.dependentOnFoundNode();this._found_node&&t&&this.removeGraphInput(this._found_node),r==ho.PARAM?(this._found_param=n,this._found_node=null):(this._found_node=e,this._found_param=null),e&&this._assign_found_node(e),n&&this._assign_found_param(n),this.options.executeCallback()}this.removeDirtyState()}_assign_found_node(t){const e=this.options.dependentOnFoundNode();this._is_node_expected_context(t)?this._is_node_expected_type(t)?(this._found_node_with_expected_type=t,e&&this.addGraphInput(t)):this.states.error.set(`node type is ${t.type()} but the params expects one of ${(this._expected_node_types()||[]).join(\\\\\\\", \\\\\\\")}`):this.states.error.set(`node context is ${t.context()} but the params expects a ${this._expected_context()}`)}_assign_found_param(t){this._is_param_expected_type(t)?this._found_param_with_expected_type=t:this.states.error.set(`param type is ${t.type()} but the params expects a ${this._expected_param_type()}`)}found_node(){return this._found_node}found_param(){return this._found_param}found_node_with_context(t){return this._found_node_with_expected_type}found_node_with_context_and_type(t,e){const n=this.found_node_with_context(t);if(n)if(m.isArray(e)){for(let t of e)if(n.type()==t)return n;this.states.error.set(`expected node type to be ${e.join(\\\\\\\", \\\\\\\")}, but was instead ${n.type()}`)}else{const t=e;if(n.type()==t)return n;this.states.error.set(`expected node type to be ${t}, but was instead ${n.type()}`)}}found_param_with_type(t){if(this._found_param_with_expected_type)return this._found_param_with_expected_type}found_node_with_expected_type(){return this._found_node_with_expected_type}_expected_context(){return this.options.nodeSelectionContext()}_is_node_expected_context(t){var e,n;const i=this._expected_context();if(null==i)return!0;return i==(null===(n=null===(e=t.parent())||void 0===e?void 0:e.childrenController)||void 0===n?void 0:n.context)}_expected_node_types(){return this.options.nodeSelectionTypes()}_expected_param_type(){return this.options.paramSelectionType()}_is_node_expected_type(t){const e=this._expected_node_types();return null==e||(null==e?void 0:e.includes(t.type()))}_is_param_expected_type(t){const e=this._expected_node_types();return null==e||e.includes(t.type())}notify_path_rebuild_required(t){this.decomposed_path.update_from_name_change(t);const e=this.decomposed_path.to_path();this.set(e)}notify_target_param_owner_params_updated(t){this.setDirty()}}var _o,mo=n(33),fo=n(70);class go{constructor(t=0,e=0){this._position=t,this._value=e}toJSON(){return{position:this._position,value:this._value}}get position(){return this._position}get value(){return this._value}copy(t){this._position=t.position,this._value=t.value}clone(){const t=new go;return t.copy(this),t}is_equal(t){return this._position==t.position&&this._value==t.value}is_equal_json(t){return this._position==t.position&&this._value==t.value}from_json(t){this._position=t.position,this._value=t.value}static are_equal_json(t,e){return t.position==e.position&&t.value==e.value}static from_json(t){return new go(t.position,t.value)}}!function(t){t.LINEAR=\\\\\\\"linear\\\\\\\"}(_o||(_o={}));class vo{constructor(t=_o.LINEAR,e=[]){this._interpolation=t,this._points=e,this._uuid=Object(Ln.h)()}get uuid(){return this._uuid}get interpolation(){return this._interpolation}get points(){return this._points}static from_json(t){const e=[];for(let n of t.points)e.push(go.from_json(n));return new vo(t.interpolation,e)}toJSON(){return{interpolation:this._interpolation,points:this._points.map((t=>t.toJSON()))}}clone(){const t=new vo;return t.copy(this),t}copy(t){this._interpolation=t.interpolation;let e=0;for(let n of t.points){const t=this._points[e];t?t.copy(n):this._points.push(n.clone()),e+=1}}is_equal(t){if(this._interpolation!=t.interpolation)return!1;const e=t.points;if(this._points.length!=e.length)return!1;let n=0;for(let t of this._points){const i=e[n];if(!t.is_equal(i))return!1;n+=1}return!0}is_equal_json(t){if(this._interpolation!=t.interpolation)return!1;if(this._points.length!=t.points.length)return!1;let e=0;for(let n of this._points){const i=t.points[e];if(!n.is_equal_json(i))return!1;e+=1}return!0}static are_json_equal(t,e){if(t.interpolation!=e.interpolation)return!1;if(t.points.length!=e.points.length)return!1;let n=0;for(let i of t.points){const t=e.points[n];if(!go.are_equal_json(i,t))return!1;n+=1}return!0}from_json(t){this._interpolation=t.interpolation;let e=0;for(let n of t.points){const t=this._points[e];t?t.from_json(n):this._points.push(go.from_json(n)),e+=1}}}const yo=1024;class xo extends zs{constructor(){super(...arguments),this._texture_data=new Uint8Array(3072),this._ramp_texture=new mo.a(this._texture_data,yo,1,w.ic)}static type(){return Es.RAMP}defaultValueSerialized(){return this._default_value instanceof vo?this._default_value.toJSON():this._default_value}_clone_raw_input(t){return t instanceof vo?t.clone():vo.from_json(t).toJSON()}rawInputSerialized(){return this._raw_input instanceof vo?this._raw_input.toJSON():vo.from_json(this._raw_input).toJSON()}valueSerialized(){return this.value.toJSON()}_copy_value(t){this.set(t.valueSerialized())}static are_raw_input_equal(t,e){return t instanceof vo?e instanceof vo?t.is_equal(e):t.is_equal_json(e):e instanceof vo?e.is_equal_json(t):vo.are_json_equal(t,e)}static are_values_equal(t,e){return t.is_equal(e)}isDefault(){return this._default_value instanceof vo?this.value.is_equal(this._default_value):this.value.is_equal_json(this._default_value)}processRawInput(){this._raw_input instanceof vo?this._value?this._value.copy(this._raw_input):this._value=this._raw_input:this._value?this._value.from_json(this._raw_input):this._value=vo.from_json(this._raw_input),this._reset_ramp_interpolant(),this._update_rampTexture(),this.options.executeCallback(),this.emitController.emit(Ms.VALUE_UPDATED),this.setSuccessorsDirty(this)}hasExpression(){return!1}_reset_ramp_interpolant(){this._ramp_interpolant=void 0}rampTexture(){return this._ramp_texture}_update_rampTexture(){this._update_ramp_texture_data(),this.rampTexture().needsUpdate=!0}_update_ramp_texture_data(){let t=0,e=0,n=0;for(var i=0;i<1024;i++)t=3*i,e=i/yo,n=this.value_at_position(e),this._texture_data[t]=255*n}static create_interpolant(t,e){const n=new Float32Array(1);return new fo.a(t,e,1,n)}interpolant(){return this._ramp_interpolant=this._ramp_interpolant||this._create_interpolant()}_create_interpolant(){const t=this.value.points,e=f.sortBy(t,(t=>t.position)),n=new Float32Array(e.length),i=new Float32Array(e.length);let r=0;for(let t of e)n[r]=t.position,i[r]=t.value,r++;return xo.create_interpolant(n,i)}value_at_position(t){return this.interpolant().evaluate(t)[0]}}xo.DEFAULT_VALUE=new vo(_o.LINEAR,[new go(0,0),new go(1,1)]),xo.DEFAULT_VALUE_JSON=xo.DEFAULT_VALUE.toJSON();class bo extends zs{static type(){return Es.STRING}defaultValueSerialized(){return this._default_value}_clone_raw_input(t){return`${t}`}rawInputSerialized(){return`${this._raw_input}`}valueSerialized(){return`${this.value}`}_copy_value(t){this.set(t.value)}static are_raw_input_equal(t,e){return t==e}static are_values_equal(t,e){return t==e}isDefault(){return this._raw_input==this._default_value}convert(t){return m.isString(t)?t:`${t}`}rawInput(){return this._raw_input}processRawInput(){this.states.error.clear(),this._value_elements(this._raw_input).length>=3?(this._expression_controller=this._expression_controller||new eo(this),this._raw_input!=this._expression_controller.expression()&&(this._expression_controller.set_expression(this._raw_input),this.setDirty(),this.emitController.emit(Ms.EXPRESSION_UPDATED))):this._raw_input!=this._value&&(this._value=this._raw_input,this.removeDirtyState(),this.setSuccessorsDirty(this),this.emitController.emit(Ms.VALUE_UPDATED),this.options.executeCallback(),this._expression_controller&&(this._expression_controller.set_expression(void 0,!1),this.emitController.emit(Ms.EXPRESSION_UPDATED)))}async processComputation(){var t;if((null===(t=this.expressionController)||void 0===t?void 0:t.active())&&!this.expressionController.requires_entities()){const t=await this.expressionController.compute_expression();if(this.expressionController.is_errored())this.states.error.set(`expression error: ${this.expressionController.error_message()}`);else{const e=this.convert(t);null!=e?(this._value=e,this.emitController.emit(Ms.VALUE_UPDATED),this.options.executeCallback()):this.states.error.set(`expression returns an invalid type (${t})`),this.removeDirtyState()}}}_value_elements(t){return Vs.string_value_elements(t)}}const wo=[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\"];const To=[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\"];const Ao=[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\",\\\\\\\"w\\\\\\\"];const Eo={[Es.BOOLEAN]:class extends no{static type(){return Es.BOOLEAN}defaultValueSerialized(){return m.isString(this._default_value)?this._default_value:this.convert(this._default_value)||!1}rawInputSerialized(){return this._raw_input}valueSerialized(){return this.value}_copy_value(t){this.set(t.value)}static are_raw_input_equal(t,e){return t==e}static are_values_equal(t,e){return t==e}convert(t){if(m.isBoolean(t))return t;if(m.isNumber(t))return t>=1;if(m.isString(t)){if(sr.isBoolean(t))return sr.toBoolean(t);if(sr.isNumber(t)){return parseFloat(t)>=1}}return null}},[Es.BUTTON]:class extends zs{static type(){return Es.BUTTON}defaultValueSerialized(){return this._default_value}rawInputSerialized(){return this._raw_input}valueSerialized(){return this.value}_copy_value(t){}static are_raw_input_equal(t,e){return!0}static are_values_equal(t,e){return!0}async pressButton(){(this.node.isDirty()||this.node.cookController.isCooking())&&await this.node.compute(),this.options.executeCallback()}},[Es.COLOR]:class extends ro{constructor(){super(...arguments),this._value=new D.a,this._value_pre_conversion=new D.a,this._value_serialized_dirty=!1,this._value_serialized=[0,0,0],this._value_pre_conversion_serialized=[0,0,0],this._copied_value=[0,0,0]}static type(){return Es.COLOR}componentNames(){return ao}defaultValueSerialized(){return m.isArray(this._default_value)?this._default_value:this._default_value.toArray()}valueSerialized(){return this._update_value_serialized_if_required(),this._value_serialized}valuePreConversionSerialized(){return this._update_value_serialized_if_required(),this._value_pre_conversion_serialized}_copy_value(t){t.value.toArray(this._copied_value),this.set(this._copied_value)}_clone_raw_input(t){if(t instanceof D.a)return t.clone();{const e=[t[0],t[1],t[2]];return null==e[0]&&(e[0]=e[0]||0),null==e[1]&&(e[1]=e[1]||e[0]),null==e[2]&&(e[2]=e[2]||e[1]),e}}static are_raw_input_equal(t,e){return t instanceof D.a?e instanceof D.a?t.equals(e):t.r==e[0]&&t.g==e[1]&&t.b==e[2]:e instanceof D.a?t[0]==e.r&&t[1]==e.g&&t[2]==e.b:t[0]==e[0]&&t[1]==e[1]&&t[2]==e[2]}static are_values_equal(t,e){return t.equals(e)}initComponents(){super.initComponents(),this.r=this.components[0],this.g=this.components[1],this.b=this.components[2],this._value_serialized_dirty=!0}_update_value_serialized_if_required(){this._value_serialized_dirty&&(this._value_serialized[0]=this._value.r,this._value_serialized[1]=this._value.g,this._value_serialized[2]=this._value.b,this._value_pre_conversion_serialized[0]=this._value_pre_conversion.r,this._value_pre_conversion_serialized[1]=this._value_pre_conversion.g,this._value_pre_conversion_serialized[2]=this._value_pre_conversion.b)}valuePreConversion(){return this._value_pre_conversion}set_value_from_components(){this._value_pre_conversion.r=this.r.value,this._value_pre_conversion.g=this.g.value,this._value_pre_conversion.b=this.b.value,this._value.copy(this._value_pre_conversion);const t=this.options.colorConversion();if(null!=t&&t!=so.NONE){switch(t){case so.GAMMA_TO_LINEAR:return void this._value.convertGammaToLinear();case so.LINEAR_TO_GAMMA:return void this._value.convertLinearToGamma();case so.SRGB_TO_LINEAR:return void this._value.convertSRGBToLinear();case so.LINEAR_TO_SRGB:return void this._value.convertLinearToSRGB()}ar.unreachable(t)}this._value_serialized_dirty=!0}},[Es.FLOAT]:io,[Es.FOLDER]:class extends zs{static type(){return Es.FOLDER}defaultValueSerialized(){return this._default_value}rawInputSerialized(){return this._raw_input}valueSerialized(){return this.value}_copy_value(t){}static are_raw_input_equal(t,e){return!0}static are_values_equal(t,e){return!0}},[Es.INTEGER]:lo,[Es.OPERATOR_PATH]:po,[Es.PARAM_PATH]:class extends uo{static type(){return Es.PARAM_PATH}initialize_param(){this._value=new yi}defaultValueSerialized(){return this._default_value}rawInputSerialized(){return`${this._raw_input}`}valueSerialized(){return`${this.value}`}_copy_value(t){this.set(t.valueSerialized())}static are_raw_input_equal(t,e){return t==e}static are_values_equal(t,e){return t==e}isDefault(){return this._raw_input==this._default_value}setParam(t){this.set(t.path())}processRawInput(){this._value.path()!=this._raw_input&&(this._value.set_path(this._raw_input),this.find_target(),this.setDirty(),this.emitController.emit(Ms.VALUE_UPDATED))}async processComputation(){this.find_target()}find_target(){if(!this.node)return;const t=this._raw_input;let e=null;const n=null!=t&&\\\\\\\"\\\\\\\"!==t;this.scene().referencesController.reset_reference_from_param(this),this.decomposed_path.reset(),n&&(e=xi.findParam(this.node,t,this.decomposed_path));const i=this._value.param(),r=e;if(this.scene().referencesController.set_named_nodes_from_param(this),e&&this.scene().referencesController.set_reference_from_param(this,e),(null==i?void 0:i.graphNodeId())!==(null==r?void 0:r.graphNodeId())){const t=this.options.dependentOnFoundNode(),n=this._value.param();n&&t&&this.removeGraphInput(n),e?this._assign_found_node(e):this._value.set_param(null),this.options.executeCallback()}this.removeDirtyState()}_assign_found_node(t){const e=this.options.dependentOnFoundNode();this._value.set_param(t),e&&this.addGraphInput(t)}notify_path_rebuild_required(t){this.decomposed_path.update_from_name_change(t);const e=this.decomposed_path.to_path();this.set(e)}notify_target_param_owner_params_updated(t){this.setDirty()}},[Es.NODE_PATH]:class extends uo{static type(){return Es.NODE_PATH}initialize_param(){this._value=new vi}defaultValueSerialized(){return this._default_value}rawInputSerialized(){return`${this._raw_input}`}valueSerialized(){return`${this.value}`}_copy_value(t){this.set(t.valueSerialized())}static are_raw_input_equal(t,e){return t==e}static are_values_equal(t,e){return t==e}isDefault(){return this._raw_input==this._default_value}setNode(t){this.set(t.path())}processRawInput(){this._value.path()!=this._raw_input&&(this._value.set_path(this._raw_input),this._findTarget(),this.setDirty(),this.emitController.emit(Ms.VALUE_UPDATED))}async processComputation(){this._findTarget()}_findTarget(){if(!this.node)return;const t=this._raw_input;let e=null;const n=null!=t&&\\\\\\\"\\\\\\\"!==t;this.scene().referencesController.reset_reference_from_param(this),this.decomposed_path.reset(),n&&(e=xi.findNode(this.node,t,this.decomposed_path));const i=this._value.node(),r=e;if(this.scene().referencesController.set_named_nodes_from_param(this),e&&this.scene().referencesController.set_reference_from_param(this,e),(null==i?void 0:i.graphNodeId())!==(null==r?void 0:r.graphNodeId())){const t=this.options.dependentOnFoundNode(),n=this._value.node();n&&t&&this.removeGraphInput(n),e?this._assign_found_node(e):this._value.set_node(null),this.options.executeCallback()}n&&!e&&this.scene().loadingController.loaded()&&n&&this.states.error.set(`no node found at path '${t}'`),this.removeDirtyState()}_assign_found_node(t){const e=this.options.dependentOnFoundNode();this._isNodeExpectedContext(t)?this._is_node_expected_type(t)?(this.states.error.clear(),this._value.set_node(t),e&&this.addGraphInput(t)):this.states.error.set(`node type is ${t.type()} but the params expects one of ${(this._expected_node_types()||[]).join(\\\\\\\", \\\\\\\")}`):this.states.error.set(`node context is ${t.context()} but the params expects a ${this._expectedContext()}`)}_expectedContext(){return this.options.nodeSelectionContext()}_isNodeExpectedContext(t){var e,n;const i=this._expectedContext();if(null==i)return!0;return i==(null===(n=null===(e=t.parent())||void 0===e?void 0:e.childrenController)||void 0===n?void 0:n.context)}_expected_node_types(){return this.options.nodeSelectionTypes()}_is_node_expected_type(t){const e=this._expected_node_types();return null==e||(null==e?void 0:e.includes(t.type()))}notify_path_rebuild_required(t){this.decomposed_path.update_from_name_change(t);const e=this.decomposed_path.to_path();this.set(e)}notify_target_param_owner_params_updated(t){this.setDirty()}},[Es.RAMP]:xo,[Es.STRING]:bo,[Es.VECTOR2]:class extends ro{constructor(){super(...arguments),this._value=new d.a,this._copied_value=[0,0]}static type(){return Es.VECTOR2}componentNames(){return wo}defaultValueSerialized(){return m.isArray(this._default_value)?this._default_value:this._default_value.toArray()}valueSerialized(){return this.value.toArray()}_copy_value(t){t.value.toArray(this._copied_value),this.set(this._copied_value)}_clone_raw_input(t){if(t instanceof d.a)return t.clone();{const e=[t[0],t[1]];return null==e[0]&&(e[0]=e[0]||0),null==e[1]&&(e[1]=e[1]||e[0]),e}}static are_raw_input_equal(t,e){return t instanceof d.a?e instanceof d.a?t.equals(e):t.x==e[0]&&t.y==e[1]:e instanceof d.a?t[0]==e.x&&t[1]==e.y:t[0]==e[0]&&t[1]==e[1]}static are_values_equal(t,e){return t.equals(e)}initComponents(){super.initComponents(),this.x=this.components[0],this.y=this.components[1]}set_value_from_components(){this._value.x=this.x.value,this._value.y=this.y.value}},[Es.VECTOR3]:class extends ro{constructor(){super(...arguments),this._value=new p.a,this._copied_value=[0,0,0]}static type(){return Es.VECTOR3}componentNames(){return To}defaultValueSerialized(){return m.isArray(this._default_value)?this._default_value:this._default_value.toArray()}valueSerialized(){return this.value.toArray()}_copy_value(t){t.value.toArray(this._copied_value),this.set(this._copied_value)}_clone_raw_input(t){if(t instanceof p.a)return t.clone();{const e=[t[0],t[1],t[2]];return null==e[0]&&(e[0]=e[0]||0),null==e[1]&&(e[1]=e[1]||e[0]),null==e[2]&&(e[2]=e[2]||e[1]),e}}static are_raw_input_equal(t,e){return t instanceof p.a?e instanceof p.a?t.equals(e):t.x==e[0]&&t.y==e[1]&&t.z==e[2]:e instanceof p.a?t[0]==e.x&&t[1]==e.y&&t[2]==e.z:t[0]==e[0]&&t[1]==e[1]&&t[2]==e[2]}static are_values_equal(t,e){return t.equals(e)}initComponents(){super.initComponents(),this.x=this.components[0],this.y=this.components[1],this.z=this.components[2]}set_value_from_components(){this._value.x=this.x.value,this._value.y=this.y.value,this._value.z=this.z.value}},[Es.VECTOR4]:class extends ro{constructor(){super(...arguments),this._value=new _.a,this._copied_value=[0,0,0,0]}static type(){return Es.VECTOR4}componentNames(){return Ao}defaultValueSerialized(){return m.isArray(this._default_value)?this._default_value:this._default_value.toArray()}valueSerialized(){return this.value.toArray()}_copy_value(t){t.value.toArray(this._copied_value),this.set(this._copied_value)}_clone_raw_input(t){if(t instanceof _.a)return t.clone();{const e=[t[0],t[1],t[2],t[3]];return null==e[0]&&(e[0]=e[0]||0),null==e[1]&&(e[1]=e[1]||e[0]),null==e[2]&&(e[2]=e[2]||e[1]),null==e[3]&&(e[3]=e[3]||e[2]),e}}static are_raw_input_equal(t,e){return t instanceof _.a?e instanceof _.a?t.equals(e):t.x==e[0]&&t.y==e[1]&&t.z==e[2]&&t.w==e[3]:e instanceof _.a?t[0]==e.x&&t[1]==e.y&&t[2]==e.z&&t[3]==e.w:t[0]==e[0]&&t[1]==e[1]&&t[2]==e[2]&&t[3]==e[3]}static are_values_equal(t,e){return t.equals(e)}initComponents(){super.initComponents(),this.x=this.components[0],this.y=this.components[1],this.z=this.components[2],this.w=this.components[3]}set_value_from_components(){this._value.x=this.x.value,this._value.y=this.y.value,this._value.z=this.z.value,this._value.w=this.w.value}}};class Mo{dispose(){this._callback=void 0}params(){return this._params}callback(){return this._callback}init(t,e){if(this._params=t,e)this._callback=e;else{const t=this._params[0];switch(t.type()){case Es.STRING:return this._handle_string_param(t);case Es.OPERATOR_PATH:return this._handle_operator_path_param(t);case Es.NODE_PATH:return this._handle_node_path_param(t);case Es.PARAM_PATH:return this._handle_param_path_param(t);case Es.FLOAT:case Es.INTEGER:return this._handle_number_param(t)}}}_handle_string_param(t){this._callback=()=>t.value}_handle_operator_path_param(t){this._callback=()=>t.value}_handle_node_path_param(t){this._callback=()=>t.value.path()}_handle_param_path_param(t){this._callback=()=>t.value.path()}_handle_number_param(t){this._callback=()=>`${t.value}`}}class So{constructor(t){this.node=t,this._param_create_mode=!1,this._params_created=!1,this._params_by_name={},this._params_list=[],this._param_names=[],this._non_spare_params=[],this._spare_params=[],this._non_spare_param_names=[],this._spare_param_names=[],this._params_added_since_last_params_eval=!1}get label(){return this._label_controller=this._label_controller||new Mo}hasLabelController(){return null!=this._label_controller}dispose(){var t;this._params_node&&this._params_node.dispose();for(let t of this.all)t.dispose();this._post_create_params_hook_names=void 0,this._post_create_params_hooks=void 0,this._on_scene_load_hooks=void 0,this._on_scene_load_hook_names=void 0,null===(t=this._label_controller)||void 0===t||t.dispose()}initDependencyNode(){this._params_node||(this._params_node=new Ai(this.node.scene(),\\\\\\\"params\\\\\\\"),this.node.addGraphInput(this._params_node,!1))}init(){this.initDependencyNode(),this._param_create_mode=!0,this._initFromParamsConfig(),this.node.createParams(),this._postCreateParams()}_postCreateParams(){this._updateCaches(),this._initParamAccessors(),this._param_create_mode=!1,this._params_created=!0,this._runPostCreateParamsHooks()}postCreateSpareParams(){this._updateCaches(),this._initParamAccessors(),this.node.scene().referencesController.notify_params_updated(this.node),this.node.emit(Ei.PARAMS_UPDATED)}updateParams(t){let e=!1,n=!1;if(t.namesToDelete)for(let e of t.namesToDelete)this.has(e)&&(this._deleteParam(e),n=!0);if(t.toAdd)for(let n of t.toAdd){const t=this.addParam(n.type,n.name,n.init_value,n.options);t&&(null!=n.raw_input&&t.set(n.raw_input),e=!0)}(n||e)&&this.postCreateSpareParams()}_initFromParamsConfig(){const t=this.node.paramsConfig;let e=!1;if(t)for(let n of Object.keys(t)){const i=t[n];let r;this.node.params_init_value_overrides&&(r=this.node.params_init_value_overrides[n],e=!0),this.addParam(i.type,n,i.init_value,i.options,r)}e&&this.node.setDirty(),this.node.params_init_value_overrides=void 0}_initParamAccessors(){let t=Object.getOwnPropertyNames(this.node.pv);this._removeUnneededAccessors(t),t=Object.getOwnPropertyNames(this.node.pv);for(let e of this.all){const n=e.options.isSpare();(!t.includes(e.name())||n)&&(Object.defineProperty(this.node.pv,e.name(),{get:()=>e.value,configurable:n}),Object.defineProperty(this.node.p,e.name(),{get:()=>e,configurable:n}))}}_removeUnneededAccessors(t){const e=this._param_names,n=[];for(let i of t)e.includes(i)||n.push(i);for(let t of n)Object.defineProperty(this.node.pv,t,{get:()=>{},configurable:!0}),Object.defineProperty(this.node.p,t,{get:()=>{},configurable:!0})}get params_node(){return this._params_node}get all(){return this._params_list}get non_spare(){return this._non_spare_params}get spare(){return this._spare_params}get names(){return this._param_names}get non_spare_names(){return this._non_spare_param_names}get spare_names(){return this._spare_param_names}set_with_type(t,e,n){const i=this.param_with_type(t,n);i?i.set(e):ai.warn(`param ${t} not found with type ${n}`)}set_float(t,e){this.set_with_type(t,e,Es.FLOAT)}set_vector3(t,e){this.set_with_type(t,e,Es.VECTOR3)}has_param(t){return null!=this._params_by_name[t]}has(t){return this.has_param(t)}get(t){return this.param(t)}param_with_type(t,e){const n=this.param(t);if(n&&n.type()==e)return n}get_float(t){return this.param_with_type(t,Es.FLOAT)}get_operator_path(t){return this.param_with_type(t,Es.OPERATOR_PATH)}value(t){var e;return null===(e=this.param(t))||void 0===e?void 0:e.value}value_with_type(t,e){var n;return null===(n=this.param_with_type(t,e))||void 0===n?void 0:n.value}boolean(t){return this.value_with_type(t,Es.BOOLEAN)}float(t){return this.value_with_type(t,Es.FLOAT)}integer(t){return this.value_with_type(t,Es.INTEGER)}string(t){return this.value_with_type(t,Es.STRING)}vector2(t){return this.value_with_type(t,Es.VECTOR2)}vector3(t){return this.value_with_type(t,Es.VECTOR3)}color(t){return this.value_with_type(t,Es.COLOR)}param(t){const e=this._params_by_name[t];return null!=e?e:(ai.warn(`tried to access param '${t}' in node ${this.node.path()}, but existing params are: ${this.names} on node ${this.node.path()}`),null)}_deleteParam(t){const e=this._params_by_name[t];if(!e)throw new Error(`param '${t}' does not exist on node ${this.node.path()}`);if(this._params_node&&this._params_node.removeGraphInput(this._params_by_name[t]),e._setupNodeDependencies(null),delete this._params_by_name[t],e.isMultiple()&&e.components)for(let t of e.components){const e=t.name();delete this._params_by_name[e]}}addParam(t,e,n,i={},r){const s=i.spare||!1;!1!==this._param_create_mode||s||ai.warn(`node ${this.node.path()} (${this.node.type()}) param '${e}' cannot be created outside of create_params`),null==this.node.scene()&&ai.warn(`node ${this.node.path()} (${this.node.type()}) has no scene assigned`);const o=Eo[t];if(null!=o){const a=this._params_by_name[e];a&&(s?a.type()!=t&&this._deleteParam(a.name()):ai.warn(`a param named ${e} already exists`,this.node));const l=new o(this.node.scene(),this.node);if(l.options.set(i),l.setName(e),l.setInitValue(n),l.initComponents(),null==r)l.set(n);else if(l.options.isExpressionForEntities()&&l.set(n),null!=r.raw_input)l.set(r.raw_input);else if(null!=r.simple_data)l.set(r.simple_data);else if(null!=r.complex_data){const t=r.complex_data.raw_input;t?l.set(t):l.set(n);const e=r.complex_data.overriden_options;if(null!=e){const t=Object.keys(e);for(let n of t)l.options.setOption(n,e[n])}}if(l._setupNodeDependencies(this.node),this._params_by_name[l.name()]=l,l.isMultiple()&&l.components)for(let t of l.components)this._params_by_name[t.name()]=t;return this._params_added_since_last_params_eval=!0,l}}_updateCaches(){this._params_list=Object.values(this._params_by_name),this._param_names=Object.keys(this._params_by_name),this._non_spare_params=Object.values(this._params_by_name).filter((t=>!t.options.isSpare())),this._spare_params=Object.values(this._params_by_name).filter((t=>t.options.isSpare())),this._non_spare_param_names=Object.values(this._params_by_name).filter((t=>!t.options.isSpare())).map((t=>t.name())),this._spare_param_names=Object.values(this._params_by_name).filter((t=>t.options.isSpare())).map((t=>t.name()))}async _evalParam(t){t.isDirty()&&(await t.compute(),t.states.error.active()&&this.node.states.error.set(`param '${t.name()}' error: ${t.states.error.message()}`))}async evalParams(t){const e=[];for(let n of t)n.isDirty()&&e.push(this._evalParam(n));await Promise.all(e),this.node.states.error.active()&&this.node._setContainer(null)}paramsEvalRequired(){return null!=this._params_node&&(this._params_node.isDirty()||this._params_added_since_last_params_eval)}async evalAll(){var t;this.paramsEvalRequired()&&(await this.evalParams(this._params_list),null===(t=this._params_node)||void 0===t||t.removeDirtyState(),this._params_added_since_last_params_eval=!1)}onParamsCreated(t,e){if(this._params_created)e();else{if(this._post_create_params_hook_names&&this._post_create_params_hook_names.includes(t))return void ai.error(`hook name ${t} already exists`);this._post_create_params_hook_names=this._post_create_params_hook_names||[],this._post_create_params_hook_names.push(t),this._post_create_params_hooks=this._post_create_params_hooks||[],this._post_create_params_hooks.push(e)}}addOnSceneLoadHook(t,e){this._on_scene_load_hook_names=this._on_scene_load_hook_names||[],this._on_scene_load_hooks=this._on_scene_load_hooks||[],this._on_scene_load_hook_names.includes(t)?ai.warn(`hook with name ${t} already exists`,this.node):(this._on_scene_load_hook_names.push(t),this._on_scene_load_hooks.push(e))}_runPostCreateParamsHooks(){if(this._post_create_params_hooks)for(let t of this._post_create_params_hooks)t()}runOnSceneLoadHooks(){if(this._on_scene_load_hooks)for(let t of this._on_scene_load_hooks)t()}}class Co{constructor(){}}class No{constructor(t,e,n=0,i=0){if(this._node_src=t,this._node_dest=e,this._output_index=n,this._input_index=i,null==this._output_index)throw\\\\\\\"bad output index\\\\\\\";if(null==this._input_index)throw\\\\\\\"bad input index\\\\\\\";this._id=No._next_id++,this._node_src.io.connections&&this._node_dest.io.connections&&(this._node_src.io.connections.addOutputConnection(this),this._node_dest.io.connections.addInputConnection(this))}get id(){return this._id}get node_src(){return this._node_src}get node_dest(){return this._node_dest}get output_index(){return this._output_index}get input_index(){return this._input_index}src_connection_point(){const t=this._node_src,e=this._output_index;return t.io.outputs.namedOutputConnectionPoints()[e]}dest_connection_point(){const t=this._node_dest,e=this._input_index;return t.io.inputs.namedInputConnectionPoints()[e]}disconnect(t={}){this._node_src.io.connections&&this._node_dest.io.connections&&(this._node_src.io.connections.removeOutputConnection(this),this._node_dest.io.connections.removeInputConnection(this)),!0===t.setInput&&this._node_dest.io.inputs.setInput(this._input_index,null)}}No._next_id=0;class Lo{constructor(t){this.inputs_controller=t,this._clone_required_states=[],this._overridden=!1,this.node=t.node}initInputsClonedState(t){m.isArray(t)?this._cloned_states=t:this._cloned_state=t,this._update_clone_required_state()}overrideClonedStateAllowed(){if(this._cloned_states)for(let t of this._cloned_states)if(t==Qi.FROM_NODE)return!0;return!!this._cloned_state&&this._cloned_state==Qi.FROM_NODE}cloneRequiredState(t){return this._clone_required_states[t]}cloneRequiredStates(){return this._clone_required_states}_get_clone_required_state(t){const e=this._cloned_states;if(e){const n=e[t];if(null!=n)return this.clone_required_from_state(n)}return!this._cloned_state||this.clone_required_from_state(this._cloned_state)}clone_required_from_state(t){switch(t){case Qi.ALWAYS:return!0;case Qi.NEVER:return!1;case Qi.FROM_NODE:return!this._overridden}return ar.unreachable(t)}overrideClonedState(t){this._overridden=t,this._update_clone_required_state(),this.node.emit(Ei.OVERRIDE_CLONABLE_STATE_UPDATE),this.node.setDirty()}overriden(){return this._overridden}_update_clone_required_state(){if(this._cloned_states){const t=[];for(let e=0;e<this._cloned_states.length;e++)t[e]=this._get_clone_required_state(e);this._clone_required_states=t}else if(this._cloned_state){const t=this.inputs_controller.maxInputsCount(),e=[];for(let n=0;n<t;n++)e[n]=this._get_clone_required_state(n);this._clone_required_states=e}else;}}class Oo{constructor(t){this.node=t,this._graph_node_inputs=[],this._inputs=[],this._has_named_inputs=!1,this._min_inputs_count=0,this._max_inputs_count=0,this._maxInputsCountOnInput=0,this._depends_on_inputs=!0}dispose(){this._graph_node&&this._graph_node.dispose();for(let t of this._graph_node_inputs)t&&t.dispose();this._on_update_hooks=void 0,this._on_update_hook_names=void 0}set_depends_on_inputs(t){this._depends_on_inputs=t}set_min_inputs_count(t){this._min_inputs_count=t}set_max_inputs_count(t){0==this._max_inputs_count&&(this._maxInputsCountOnInput=t),this._max_inputs_count=t,this.init_graph_node_inputs()}namedInputConnectionPointsByName(t){if(this._named_input_connection_points)for(let e of this._named_input_connection_points)if(e&&e.name()==t)return e}setNamedInputConnectionPoints(t){this._has_named_inputs=!0;const e=this.node.io.connections.inputConnections();if(e)for(let n of e)n&&n.input_index>=t.length&&n.disconnect({setInput:!0});this._named_input_connection_points=t,this.set_min_inputs_count(0),this.set_max_inputs_count(t.length),this.init_graph_node_inputs(),this.node.emit(Ei.NAMED_INPUTS_UPDATED)}hasNamedInputs(){return this._has_named_inputs}namedInputConnectionPoints(){return this._named_input_connection_points||[]}init_graph_node_inputs(){for(let t=0;t<this._max_inputs_count;t++)this._graph_node_inputs[t]=this._graph_node_inputs[t]||this._create_graph_node_input(t)}_create_graph_node_input(t){const e=new Ai(this.node.scene(),`input_${t}`);return this._graph_node||(this._graph_node=new Ai(this.node.scene(),\\\\\\\"inputs\\\\\\\"),this.node.addGraphInput(this._graph_node,!1)),this._graph_node.addGraphInput(e,!1),e}maxInputsCount(){return this._max_inputs_count||0}maxInputsCountOverriden(){return this._max_inputs_count!=this._maxInputsCountOnInput}input_graph_node(t){return this._graph_node_inputs[t]}setCount(t,e){null==e&&(e=t),this.set_min_inputs_count(t),this.set_max_inputs_count(e),this.init_connections_controller_inputs()}init_connections_controller_inputs(){this.node.io.connections.initInputs()}is_any_input_dirty(){var t;return(null===(t=this._graph_node)||void 0===t?void 0:t.isDirty())||!1}async containers_without_evaluation(){const t=[];for(let e=0;e<this._inputs.length;e++){const n=this._inputs[e];let i;n&&(i=await n.compute()),t.push(i)}return t}existing_input_indices(){const t=[];if(this._max_inputs_count>0)for(let e=0;e<this._inputs.length;e++)this._inputs[e]&&t.push(e);return t}async eval_required_inputs(){var t;let e=[];if(this._max_inputs_count>0){const n=this.existing_input_indices();if(n.length<this._min_inputs_count)this.node.states.error.set(\\\\\\\"inputs are missing\\\\\\\");else if(n.length>0){const n=[];let i;for(let t=0;t<this._inputs.length;t++)i=this._inputs[t],i&&n.push(this.eval_required_input(t));e=await Promise.all(n),null===(t=this._graph_node)||void 0===t||t.removeDirtyState()}}return e}async eval_required_input(t){let e;const n=this.input(t);if(n&&(e=await n.compute(),this._graph_node_inputs[t].removeDirtyState()),e&&e.coreContent());else{const e=this.input(t);if(e){const n=e.states.error.message();n&&this.node.states.error.set(`input ${t} is invalid (error: ${n})`)}}return e}get_named_input_index(t){var e;if(this._named_input_connection_points)for(let n=0;n<this._named_input_connection_points.length;n++)if((null===(e=this._named_input_connection_points[n])||void 0===e?void 0:e.name())==t)return n;return-1}get_input_index(t){if(m.isString(t)){if(this.hasNamedInputs())return this.get_named_input_index(t);throw new Error(`node ${this.node.path()} has no named inputs`)}return t}setInput(t,e,n=0){const i=this.get_input_index(t)||0;if(i<0){const e=`invalid input (${t}) for node ${this.node.path()}`;throw console.warn(e),new Error(e)}let r=0;if(e&&e.io.outputs.hasNamedOutputs()&&(r=e.io.outputs.getOutputIndex(n),null==r||r<0)){const t=e.io.outputs.namedOutputConnectionPoints().map((t=>t.name()));return void console.warn(`node ${e.path()} does not have an output named ${n}. inputs are: ${t.join(\\\\\\\", \\\\\\\")}`)}const s=this._graph_node_inputs[i];if(null==s){const t=`graph_input_node not found at index ${i}`;throw console.warn(t),new Error(t)}if(e&&this.node.parent()!=e.parent())return;const o=this._inputs[i];let a,l=null;this.node.io.connections&&(a=this.node.io.connections.inputConnection(i)),a&&(l=a.output_index),e===o&&r==l||(null!=o&&this._depends_on_inputs&&s.removeGraphInput(o),null!=e?s.addGraphInput(e)?(this._depends_on_inputs||s.removeGraphInput(e),a&&a.disconnect({setInput:!1}),this._inputs[i]=e,new No(e,this.node,r,i)):console.warn(`cannot connect ${e.path()} to ${this.node.path()}`):(this._inputs[i]=null,a&&a.disconnect({setInput:!1})),this._run_on_set_input_hooks(),s.setSuccessorsDirty(),this.node.emit(Ei.INPUTS_UPDATED))}remove_input(t){const e=this.inputs();let n;for(let i=0;i<e.length;i++)n=e[i],null!=n&&null!=t&&n.graphNodeId()===t.graphNodeId()&&this.setInput(i,null)}input(t){return this._inputs[t]}named_input(t){if(this.hasNamedInputs()){const e=this.get_input_index(t);return this._inputs[e]}return null}named_input_connection_point(t){if(this.hasNamedInputs()&&this._named_input_connection_points){const e=this.get_input_index(t);return this._named_input_connection_points[e]}}has_named_input(t){return this.get_named_input_index(t)>=0}has_input(t){return null!=this._inputs[t]}inputs(){return this._inputs}initInputsClonedState(t){this._cloned_states_controller||(this._cloned_states_controller=new Lo(this),this._cloned_states_controller.initInputsClonedState(t))}overrideClonedStateAllowed(){var t;return(null===(t=this._cloned_states_controller)||void 0===t?void 0:t.overrideClonedStateAllowed())||!1}overrideClonedState(t){var e;null===(e=this._cloned_states_controller)||void 0===e||e.overrideClonedState(t)}clonedStateOverriden(){var t;return(null===(t=this._cloned_states_controller)||void 0===t?void 0:t.overriden())||!1}cloneRequired(t){var e;const n=null===(e=this._cloned_states_controller)||void 0===e?void 0:e.cloneRequiredState(t);return null==n||n}cloneRequiredStates(){var t;const e=null===(t=this._cloned_states_controller)||void 0===t?void 0:t.cloneRequiredStates();return null==e||e}add_on_set_input_hook(t,e){this._on_update_hooks=this._on_update_hooks||[],this._on_update_hook_names=this._on_update_hook_names||[],this._on_update_hook_names.includes(t)?console.warn(`hook with name ${t} already exists`,this.node):(this._on_update_hooks.push(e),this._on_update_hook_names.push(t))}_run_on_set_input_hooks(){if(this._on_update_hooks)for(let t of this._on_update_hooks)t()}}class Ro{constructor(t){this.node=t,this._has_outputs=!1,this._has_named_outputs=!1}setHasOneOutput(){this._has_outputs=!0}setHasNoOutput(){this._has_outputs=!1}hasOutputs(){return this._has_outputs}hasNamedOutputs(){return this._has_named_outputs}hasNamedOutput(t){return this.getNamedOutputIndex(t)>=0}namedOutputConnectionPoints(){return this._named_output_connection_points||[]}namedOutputConnection(t){if(this._named_output_connection_points)return this._named_output_connection_points[t]}getNamedOutputIndex(t){var e;if(this._named_output_connection_points)for(let n=0;n<this._named_output_connection_points.length;n++)if((null===(e=this._named_output_connection_points[n])||void 0===e?void 0:e.name())==t)return n;return-1}getOutputIndex(t){return null!=t?m.isString(t)?this.hasNamedOutputs()?this.getNamedOutputIndex(t):(console.warn(`node ${this.node.path()} has no named outputs`),-1):t:-1}namedOutputConnectionPointsByName(t){if(this._named_output_connection_points)for(let e of this._named_output_connection_points)if((null==e?void 0:e.name())==t)return e}setNamedOutputConnectionPoints(t,e=!0){this._has_named_outputs=!0;const n=this.node.io.connections.outputConnections();if(n)for(let e of n)e&&e.output_index>=t.length&&e.disconnect({setInput:!0});this._named_output_connection_points=t,e&&this.node.scene()&&this.node.setDirty(this.node),this.node.emit(Ei.NAMED_OUTPUTS_UPDATED)}used_output_names(){var t;const e=this.node.io.connections;if(e){let n=e.outputConnections().map((t=>t?t.output_index:null));n=f.uniq(n);const i=[];n.forEach((t=>{m.isNumber(t)&&i.push(t)}));const r=[];for(let e of i){const n=null===(t=this.namedOutputConnectionPoints()[e])||void 0===t?void 0:t.name();n&&r.push(n)}return r}return[]}}class Po{constructor(t){this._node=t,this._output_connections=new Map}initInputs(){const t=this._node.io.inputs.maxInputsCount();for(this._input_connections=this._input_connections||new Array(t);this._input_connections.length<t;)this._input_connections.push(void 0)}addInputConnection(t){this._input_connections?this._input_connections[t.input_index]=t:console.warn(\\\\\\\"input connections array not initialized\\\\\\\")}removeInputConnection(t){if(this._input_connections)if(t.input_index<this._input_connections.length){this._input_connections[t.input_index]=void 0;let e=!0;for(let n=t.input_index;n<this._input_connections.length;n++)this._input_connections[n]&&(e=!1);e&&(this._input_connections=this._input_connections.slice(0,t.input_index))}else console.warn(`attempt to remove an input connection at index ${t.input_index}`);else console.warn(\\\\\\\"input connections array not initialized\\\\\\\")}inputConnection(t){if(this._input_connections)return this._input_connections[t]}firstInputConnection(){return this._input_connections?f.compact(this._input_connections)[0]:null}inputConnections(){return this._input_connections}existingInputConnections(){const t=this._input_connections;if(t)for(;t.length>1&&void 0===t[t.length-1];)t.pop();return t}addOutputConnection(t){const e=t.output_index,n=t.id;let i=this._output_connections.get(e);i||(i=new Map,this._output_connections.set(e,i)),i.set(n,t)}removeOutputConnection(t){const e=t.output_index,n=t.id;let i=this._output_connections.get(e);i&&i.delete(n)}outputConnections(){let t=[];return this._output_connections.forEach(((e,n)=>{e.forEach(((e,n)=>{e&&t.push(e)}))})),t}}class Io{constructor(t){this._node=t}set_in(t){this._in=t}set_out(t){this._out=t}clear(){this._in=void 0,this._out=void 0}in(){return this._in}out(){return this._out}}class Fo{constructor(t,e,n){this._name=t,this._type=e,this._init_value=n}get init_value(){return this._init_value}name(){return this._name}type(){return this._type}are_types_matched(t,e){return!0}toJSON(){return this._json=this._json||this._create_json()}_create_json(){return{name:this._name,type:this._type}}}var Do;!function(t){t.BOOL=\\\\\\\"bool\\\\\\\",t.INT=\\\\\\\"int\\\\\\\",t.FLOAT=\\\\\\\"float\\\\\\\",t.VEC2=\\\\\\\"vec2\\\\\\\",t.VEC3=\\\\\\\"vec3\\\\\\\",t.VEC4=\\\\\\\"vec4\\\\\\\",t.SAMPLER_2D=\\\\\\\"sampler2D\\\\\\\",t.SSS_MODEL=\\\\\\\"SSSModel\\\\\\\"}(Do||(Do={}));const ko=[Do.BOOL,Do.INT,Do.FLOAT,Do.VEC2,Do.VEC3,Do.VEC4],Bo={[Do.BOOL]:Es.BOOLEAN,[Do.INT]:Es.INTEGER,[Do.FLOAT]:Es.FLOAT,[Do.VEC2]:Es.VECTOR2,[Do.VEC3]:Es.VECTOR3,[Do.VEC4]:Es.VECTOR4,[Do.SAMPLER_2D]:Es.RAMP,[Do.SSS_MODEL]:Es.STRING},zo={[Es.BOOLEAN]:Do.BOOL,[Es.COLOR]:Do.VEC3,[Es.INTEGER]:Do.INT,[Es.FLOAT]:Do.FLOAT,[Es.FOLDER]:void 0,[Es.VECTOR2]:Do.VEC2,[Es.VECTOR3]:Do.VEC3,[Es.VECTOR4]:Do.VEC4,[Es.BUTTON]:void 0,[Es.OPERATOR_PATH]:void 0,[Es.PARAM_PATH]:void 0,[Es.NODE_PATH]:void 0,[Es.RAMP]:void 0,[Es.STRING]:void 0},Uo={[Do.BOOL]:!1,[Do.INT]:0,[Do.FLOAT]:0,[Do.VEC2]:[0,0],[Do.VEC3]:[0,0,0],[Do.VEC4]:[0,0,0,0],[Do.SAMPLER_2D]:xo.DEFAULT_VALUE_JSON,[Do.SSS_MODEL]:\\\\\\\"SSSModel()\\\\\\\"},Go={[Do.BOOL]:1,[Do.INT]:1,[Do.FLOAT]:1,[Do.VEC2]:2,[Do.VEC3]:3,[Do.VEC4]:4,[Do.SAMPLER_2D]:1,[Do.SSS_MODEL]:1};class Vo extends Fo{constructor(t,e,n){super(t,e),this._name=t,this._type=e,this._init_value=n,this._init_value=this._init_value||Uo[this._type]}type(){return this._type}are_types_matched(t,e){return t==e}get param_type(){return Bo[this._type]}get init_value(){return this._init_value}toJSON(){return this._json=this._json||this._create_json()}_create_json(){return{name:this._name,type:this._type}}}var Ho;!function(t){t.BOOL=\\\\\\\"bool\\\\\\\",t.INT=\\\\\\\"int\\\\\\\",t.FLOAT=\\\\\\\"float\\\\\\\",t.VEC2=\\\\\\\"vec2\\\\\\\",t.VEC3=\\\\\\\"vec3\\\\\\\",t.VEC4=\\\\\\\"vec4\\\\\\\"}(Ho||(Ho={}));const jo=[Ho.BOOL,Ho.INT,Ho.FLOAT,Ho.VEC2,Ho.VEC3,Ho.VEC4],Wo={[Ho.BOOL]:Es.BOOLEAN,[Ho.INT]:Es.INTEGER,[Ho.FLOAT]:Es.FLOAT,[Ho.VEC2]:Es.VECTOR2,[Ho.VEC3]:Es.VECTOR3,[Ho.VEC4]:Es.VECTOR4},qo={[Es.BOOLEAN]:Ho.BOOL,[Es.COLOR]:Ho.VEC3,[Es.INTEGER]:Ho.INT,[Es.FLOAT]:Ho.FLOAT,[Es.FOLDER]:void 0,[Es.VECTOR2]:Ho.VEC2,[Es.VECTOR3]:Ho.VEC3,[Es.VECTOR4]:Ho.VEC4,[Es.BUTTON]:void 0,[Es.OPERATOR_PATH]:void 0,[Es.PARAM_PATH]:void 0,[Es.NODE_PATH]:void 0,[Es.RAMP]:void 0,[Es.STRING]:void 0},Xo={[Ho.BOOL]:!1,[Ho.INT]:0,[Ho.FLOAT]:0,[Ho.VEC2]:[0,0],[Ho.VEC3]:[0,0,0],[Ho.VEC4]:[0,0,0,0]};Ho.BOOL,Ho.INT,Ho.FLOAT,Ho.VEC2,Ho.VEC3,Ho.VEC4;class Yo extends Fo{constructor(t,e){super(t,e),this._name=t,this._type=e,this._init_value=Xo[this._type]}type(){return this._type}are_types_matched(t,e){return t==e}get param_type(){return Wo[this._type]}get init_value(){return this._init_value}toJSON(){return this._json=this._json||this._create_json()}_create_json(){return{name:this._name,type:this._type}}}var $o;!function(t){t.BASE=\\\\\\\"base\\\\\\\",t.DRAG=\\\\\\\"drag\\\\\\\",t.KEYBOARD=\\\\\\\"keyboard\\\\\\\",t.MOUSE=\\\\\\\"mouse\\\\\\\",t.POINTER=\\\\\\\"pointer\\\\\\\"}($o||($o={}));class Jo extends Fo{constructor(t,e,n){super(t,e),this._name=t,this._type=e,this._event_listener=n}type(){return this._type}get param_type(){return Es.FLOAT}are_types_matched(t,e){return e==$o.BASE||t==e}get event_listener(){return this._event_listener}toJSON(){return this._json=this._json||this._create_json()}_create_json(){return{name:this._name,type:this._type}}}const Zo={[Ki.ANIM]:void 0,[Ki.COP]:void 0,[Ki.EVENT]:$o.BASE,[Ki.GL]:Do.FLOAT,[Ki.JS]:Ho.FLOAT,[Ki.MANAGER]:void 0,[Ki.MAT]:void 0,[Ki.OBJ]:void 0,[Ki.POST]:void 0,[Ki.ROP]:void 0,[Ki.SOP]:void 0};function Qo(t,e,n){switch(t){case Ki.EVENT:return new Jo(e,n);case Ki.GL:return new Vo(e,n);case Ki.JS:return new Yo(e,n);default:return}}class Ko{constructor(t,e){this.node=t,this._context=e,this._raw_input_serialized_by_param_name=new Map,this._default_value_serialized_by_param_name=new Map,this._initialized=!1}initializeNode(){this._initialized?console.warn(\\\\\\\"already initialized\\\\\\\",this.node):(this._initialized=!0,this.node.params.onParamsCreated(\\\\\\\"create_inputs_from_params\\\\\\\",this.create_inputs_from_params.bind(this)))}initialized(){return this._initialized}create_inputs_from_params(){const t=function(t){switch(t){case Ki.EVENT:return;case Ki.GL:return zo;case Ki.JS:return qo;default:return}}(this._context);if(!t)return;const e=[];for(let n of this.node.params.names){let i=!0;if(this._inputless_param_names&&this._inputless_param_names.length>0&&this._inputless_param_names.includes(n)&&(i=!1),i&&this.node.params.has(n)){const i=this.node.params.get(n);if(i&&!i.parent_param){const n=t[i.type()];if(n){const t=Qo(this._context,i.name(),n);t&&e.push(t)}}}}this.node.io.inputs.setNamedInputConnectionPoints(e)}set_inputless_param_names(t){return this._inputless_param_names=t}createSpareParameters(){if(this.node.scene().loadingController.isLoading())return;const t=this.node.params.spare_names,e={};for(let n of t)if(this.node.params.has(n)){const t=this.node.params.get(n);t&&(this._raw_input_serialized_by_param_name.set(n,t.rawInputSerialized()),this._default_value_serialized_by_param_name.set(n,t.defaultValueSerialized()),e.namesToDelete=e.namesToDelete||[],e.namesToDelete.push(n))}for(let t of this.node.io.inputs.namedInputConnectionPoints())if(t){const n=t.name(),i=t.param_type;let r=t.init_value;const s=this._default_value_serialized_by_param_name.get(n);let o=this.node.paramDefaultValue(n);if(r=null!=o?o:null!=s?s:t.init_value,m.isArray(t.init_value))if(m.isNumber(r)){const e=new Array(t.init_value.length);e.fill(r),r=e}else m.isArray(r)&&r.length==t.init_value.length&&null!=s&&(r=t.init_value);null!=r&&(e.toAdd=e.toAdd||[],e.toAdd.push({name:n,type:i,init_value:b.clone(r),raw_input:b.clone(r),options:{spare:!0}}))}this.node.params.updateParams(e);for(let t of this.node.params.spare)if(!t.parent_param){const e=this._raw_input_serialized_by_param_name.get(t.name());e&&t.set(e)}}}class ta{constructor(t,e){this.node=t,this._context=e,this._create_spare_params_from_inputs=!0,this._functions_overridden=!1,this._input_name_function=t=>`in${t}`,this._output_name_function=t=>0==t?\\\\\\\"val\\\\\\\":`val${t}`,this._expected_input_types_function=()=>{const t=this.first_input_connection_type()||this.default_connection_type();return[t,t]},this._expected_output_types_function=()=>[this._expected_input_types_function()[0]],this._update_signature_if_required_bound=this.update_signature_if_required.bind(this),this._initialized=!1,this._spare_params_controller=new Ko(this.node,this._context)}default_connection_type(){return Zo[this._context]}create_connection_point(t,e){return Qo(this._context,t,e)}functions_overridden(){return this._functions_overridden}initialized(){return this._initialized}set_create_spare_params_from_inputs(t){this._create_spare_params_from_inputs=t}set_input_name_function(t){this._initialize_if_required(),this._input_name_function=t}set_output_name_function(t){this._initialize_if_required(),this._output_name_function=t}set_expected_input_types_function(t){this._initialize_if_required(),this._functions_overridden=!0,this._expected_input_types_function=t}set_expected_output_types_function(t){this._initialize_if_required(),this._functions_overridden=!0,this._expected_output_types_function=t}input_name(t){return this._wrapped_input_name_function(t)}output_name(t){return this._wrapped_output_name_function(t)}initializeNode(){this._initialized?console.warn(\\\\\\\"already initialized\\\\\\\",this.node):(this._initialized=!0,this.node.io.inputs.add_on_set_input_hook(\\\\\\\"_update_signature_if_required\\\\\\\",this._update_signature_if_required_bound),this.node.params.addOnSceneLoadHook(\\\\\\\"_update_signature_if_required\\\\\\\",this._update_signature_if_required_bound),this.node.params.onParamsCreated(\\\\\\\"_update_signature_if_required_bound\\\\\\\",this._update_signature_if_required_bound),this.node.addPostDirtyHook(\\\\\\\"_update_signature_if_required\\\\\\\",this._update_signature_if_required_bound),this._spare_params_controller.initialized()||this._spare_params_controller.initializeNode())}_initialize_if_required(){this._initialized||this.initializeNode()}get spare_params(){return this._spare_params_controller}update_signature_if_required(t){this.node.lifecycle.creation_completed&&this._connections_match_inputs()||(this.update_connection_types(),this.node.removeDirtyState(),this.node.scene().loadingController.isLoading()||this.make_successors_update_signatures())}make_successors_update_signatures(){const t=this.node.graphAllSuccessors();if(this.node.childrenAllowed()){const e=this.node.nodesByType(er.INPUT),n=this.node.nodesByType(er.OUTPUT);for(let n of e)t.push(n);for(let e of n)t.push(e)}for(let e of t){const t=e;t.io&&t.io.has_connection_points_controller&&t.io.connection_points.initialized()&&t.io.connection_points.update_signature_if_required(this.node)}}update_connection_types(){const t=this._wrapped_expected_input_types_function(),e=this._wrapped_expected_output_types_function(),n=[];for(let e=0;e<t.length;e++){const i=t[e],r=this.create_connection_point(this._wrapped_input_name_function(e),i);n.push(r)}const i=[];for(let t=0;t<e.length;t++){const n=e[t],r=this.create_connection_point(this._wrapped_output_name_function(t),n);i.push(r)}this.node.io.inputs.setNamedInputConnectionPoints(n),this.node.io.outputs.setNamedOutputConnectionPoints(i,!1),this._create_spare_params_from_inputs&&this._spare_params_controller.createSpareParameters()}_connections_match_inputs(){const t=this.node.io.inputs.namedInputConnectionPoints().map((t=>null==t?void 0:t.type())),e=this.node.io.outputs.namedOutputConnectionPoints().map((t=>null==t?void 0:t.type())),n=this._wrapped_expected_input_types_function(),i=this._wrapped_expected_output_types_function();if(n.length!=t.length)return!1;if(i.length!=e.length)return!1;for(let e=0;e<t.length;e++)if(t[e]!=n[e])return!1;for(let t=0;t<e.length;t++)if(e[t]!=i[t])return!1;return!0}_wrapped_expected_input_types_function(){if(this.node.scene().loadingController.isLoading()){const t=this.node.io.saved_connection_points_data.in();if(t)return t.map((t=>t.type))}return this._expected_input_types_function()}_wrapped_expected_output_types_function(){if(this.node.scene().loadingController.isLoading()){const t=this.node.io.saved_connection_points_data.out();if(t)return t.map((t=>t.type))}return this._expected_output_types_function()}_wrapped_input_name_function(t){if(this.node.scene().loadingController.isLoading()){const e=this.node.io.saved_connection_points_data.in();if(e)return e[t].name}return this._input_name_function(t)}_wrapped_output_name_function(t){if(this.node.scene().loadingController.isLoading()){const e=this.node.io.saved_connection_points_data.out();if(e)return e[t].name}return this._output_name_function(t)}first_input_connection_type(){return this.input_connection_type(0)}input_connection_type(t){const e=this.node.io.connections.inputConnections();if(e){const n=e[t];if(n)return n.src_connection_point().type()}}}class ea{constructor(t){this.node=t,this._connections=new Po(this.node)}get connections(){return this._connections}get inputs(){return this._inputs=this._inputs||new Oo(this.node)}has_inputs(){return null!=this._inputs}get outputs(){return this._outputs=this._outputs||new Ro(this.node)}has_outputs(){return null!=this._outputs}get connection_points(){return this._connection_points=this._connection_points||new ta(this.node,this.node.context())}get has_connection_points_controller(){return null!=this._connection_points}get saved_connection_points_data(){return this._saved_connection_points_data=this._saved_connection_points_data||new Io(this.node)}clear_saved_connection_points_data(){this._saved_connection_points_data&&(this._saved_connection_points_data.clear(),this._saved_connection_points_data=void 0)}}class na{constructor(){}}class ia extends Ai{constructor(t,e=\\\\\\\"BaseNode\\\\\\\",n){super(t,e),this.params_init_value_overrides=n,this.containerController=new xs(this),this.pv=new Co,this.p=new na,this._initialized=!1}copy_param_values(t){const e=this.params.non_spare;for(let n of e){const e=t.params.get(n.name());e&&n.copy_value(e)}}get parentController(){return this._parent_controller=this._parent_controller||new Wi(this)}static displayedInputNames(){return[]}get childrenControllerContext(){return this._children_controller_context}_create_children_controller(){if(this._children_controller_context)return new hr(this,this._children_controller_context)}get childrenController(){return this._children_controller=this._children_controller||this._create_children_controller()}childrenAllowed(){return null!=this._children_controller_context}get uiData(){return this._ui_data=this._ui_data||new Mi(this)}get states(){return this._states=this._states||new Hi(this)}get lifecycle(){return this._lifecycle=this._lifecycle||new dr(this)}get serializer(){return this._serializer=this._serializer||new As(this)}get cookController(){return this._cook_controller=this._cook_controller||new Ts(this)}get io(){return this._io=this._io||new ea(this)}get nameController(){return this._name_controller=this._name_controller||new ji(this)}setName(t){this.nameController.setName(t)}_set_core_name(t){this._name=t}get params(){return this._params_controller=this._params_controller||new So(this)}initialize_base_and_node(){var t;this._initialized?console.warn(\\\\\\\"node already initialized\\\\\\\"):(this._initialized=!0,null===(t=this.displayNodeController)||void 0===t||t.initializeNode(),this.initializeBaseNode(),this.initializeNode(),this.polyNodeController&&this.polyNodeController.initializeNode())}initializeBaseNode(){}initializeNode(){}static type(){throw\\\\\\\"type to be overriden\\\\\\\"}type(){return this.constructor.type()}static context(){throw console.error(\\\\\\\"node has no node_context\\\\\\\",this),\\\\\\\"context requires override\\\\\\\"}context(){return this.constructor.context()}static require_webgl2(){return!1}require_webgl2(){return this.constructor.require_webgl2()}setParent(t){this.parentController.setParent(t)}parent(){return this.parentController.parent()}root(){return this._scene.root()}path(t){return this.parentController.path(t)}createParams(){}addParam(t,e,n,i){var r;return null===(r=this._params_controller)||void 0===r?void 0:r.addParam(t,e,n,i)}paramDefaultValue(t){return null}cook(t){return null}onCookEnd(t,e){this.cookController.registerOnCookEnd(t,e)}async compute(){var t,e;return this.isDirty()||(null===(e=null===(t=this.flags)||void 0===t?void 0:t.bypass)||void 0===e?void 0:e.active())?await this.containerController.compute():this.containerController.container()}_setContainer(t,e=null){this.containerController.container().set_content(t),null!=t&&(t.name||(t.name=this.path()),t.node||(t.node=this)),this.cookController.endCook(e)}createNode(t,e){var n;return null===(n=this.childrenController)||void 0===n?void 0:n.createNode(t,e)}create_operation_container(t,e,n){var i;return null===(i=this.childrenController)||void 0===i?void 0:i.create_operation_container(t,e,n)}removeNode(t){var e;null===(e=this.childrenController)||void 0===e||e.removeNode(t)}dispose(){var t,e;super.dispose(),this.setParent(null),this.io.inputs.dispose(),this.lifecycle.dispose(),null===(t=this.displayNodeController)||void 0===t||t.dispose(),this.nameController.dispose(),null===(e=this.childrenController)||void 0===e||e.dispose(),this.params.dispose()}children(){var t;return(null===(t=this.childrenController)||void 0===t?void 0:t.children())||[]}node(t){var e;return(null===(e=this.parentController)||void 0===e?void 0:e.findNode(t))||null}nodeSibbling(t){var e;const n=this.parent();if(n){const i=null===(e=n.childrenController)||void 0===e?void 0:e.child_by_name(t);if(i)return i}return null}nodesByType(t){var e;return(null===(e=this.childrenController)||void 0===e?void 0:e.nodesByType(t))||[]}setInput(t,e,n=0){this.io.inputs.setInput(t,e,n)}emit(t,e=null){this.scene().dispatchController.dispatch(this,t,e)}toJSON(t=!1){return this.serializer.toJSON(t)}async requiredModules(){}usedAssembler(){}integrationData(){}}class ra extends ia{static context(){return Ki.MANAGER}}class sa{constructor(t,e,n){this.type=t,this.init_value=e,this.options=n}}class oa{static BUTTON(t,e){return new sa(Es.BUTTON,t,e)}static BOOLEAN(t,e){return new sa(Es.BOOLEAN,t,e)}static COLOR(t,e){return t instanceof D.a&&(t=t.toArray()),new sa(Es.COLOR,t,e)}static FLOAT(t,e){return new sa(Es.FLOAT,t,e)}static FOLDER(t=null,e){return new sa(Es.FOLDER,t,e)}static INTEGER(t,e){return new sa(Es.INTEGER,t,e)}static RAMP(t=xo.DEFAULT_VALUE,e){return new sa(Es.RAMP,t,e)}static STRING(t=\\\\\\\"\\\\\\\",e){return new sa(Es.STRING,t,e)}static VECTOR2(t,e){return t instanceof d.a&&(t=t.toArray()),new sa(Es.VECTOR2,t,e)}static VECTOR3(t,e){return t instanceof p.a&&(t=t.toArray()),new sa(Es.VECTOR3,t,e)}static VECTOR4(t,e){return t instanceof _.a&&(t=t.toArray()),new sa(Es.VECTOR4,t,e)}static OPERATOR_PATH(t,e){return new sa(Es.OPERATOR_PATH,t,e)}static NODE_PATH(t,e){return new sa(Es.NODE_PATH,t,e)}static PARAM_PATH(t,e){return new sa(Es.PARAM_PATH,t,e)}}class aa{}class la{constructor(t){this.scene=t}findObjectByMask(t){return this.findObjectByMaskInObject(t,this.scene.threejsScene())}findObjectByMaskInObject(t,e,n=\\\\\\\"\\\\\\\"){for(let i of e.children){const e=this._removeTrailingOrHeadingSlash(i.name),r=`${n=this._removeTrailingOrHeadingSlash(n)}/${e}`;if(sr.matchMask(r,t))return i;const s=this.findObjectByMaskInObject(t,i,r);if(s)return s}}objectsByMask(t){return this.objectsByMaskInObject(t,this.scene.threejsScene(),[],\\\\\\\"\\\\\\\")}objectsByMaskInObject(t,e,n=[],i=\\\\\\\"\\\\\\\"){for(let r of e.children){const e=this._removeTrailingOrHeadingSlash(r.name),s=`${i=this._removeTrailingOrHeadingSlash(i)}/${e}`;sr.matchMask(s,t)&&n.push(r),this.objectsByMaskInObject(t,r,n,s)}return n}_removeTrailingOrHeadingSlash(t){return\\\\\\\"/\\\\\\\"==t[0]&&(t=t.substr(1)),\\\\\\\"/\\\\\\\"==t[t.length-1]&&(t=t.substr(0,t.length-1)),t}}const ca={computeOnDirty:!1,callback:t=>{ha.update(t)}};function ua(t){return class extends t{constructor(){super(...arguments),this.autoUpdate=oa.BOOLEAN(1,ca)}}}ua(aa);class ha{constructor(t){this.node=t}async update(){const t=this.node.object,e=this.node.pv;e.autoUpdate!=t.autoUpdate&&(t.autoUpdate=e.autoUpdate)}static async update(t){t.sceneAutoUpdateController.update()}}var da;!function(t){t.NONE=\\\\\\\"none\\\\\\\",t.COLOR=\\\\\\\"color\\\\\\\",t.TEXTURE=\\\\\\\"texture\\\\\\\"}(da||(da={}));const pa=[da.NONE,da.COLOR,da.TEXTURE],_a={computeOnDirty:!1,callback:t=>{fa.update(t)}};function ma(t){return class extends t{constructor(){super(...arguments),this.backgroundMode=oa.INTEGER(pa.indexOf(da.NONE),{menu:{entries:pa.map(((t,e)=>({name:t,value:e})))},..._a}),this.bgColor=oa.COLOR([0,0,0],{visibleIf:{backgroundMode:pa.indexOf(da.COLOR)},..._a}),this.bgTexture=oa.NODE_PATH(\\\\\\\"\\\\\\\",{visibleIf:{backgroundMode:pa.indexOf(da.TEXTURE)},nodeSelection:{context:Ki.COP},dependentOnFoundNode:!1,..._a})}}}ma(aa);class fa{constructor(t){this.node=t}update(){const t=this.node.object,e=this.node.pv;if(e.backgroundMode==pa.indexOf(da.NONE))t.background=null;else if(e.backgroundMode==pa.indexOf(da.COLOR))t.background=e.bgColor;else{const n=e.bgTexture.nodeWithContext(Ki.COP);n?n.compute().then((e=>{t.background=e.texture()})):this.node.states.error.set(\\\\\\\"bgTexture node not found\\\\\\\")}}static update(t){t.sceneBackgroundController.update()}}const ga={computeOnDirty:!1,callback:t=>{ya.update(t)}};function va(t){return class extends t{constructor(){super(...arguments),this.useEnvironment=oa.BOOLEAN(0,ga),this.environment=oa.NODE_PATH(\\\\\\\"\\\\\\\",{visibleIf:{useEnvironment:1},nodeSelection:{context:Ki.COP},dependentOnFoundNode:!1,...ga})}}}va(aa);class ya{constructor(t){this.node=t}async update(){const t=this.node.object,e=this.node.pv;if(e.useEnvironment){const n=e.environment.nodeWithContext(Ki.COP);n?n.compute().then((e=>{t.environment=e.texture()})):this.node.states.error.set(\\\\\\\"bgTexture node not found\\\\\\\")}else t.environment=null}static async update(t){t.sceneEnvController.update()}}class xa{constructor(t,e=1,n=1e3){this.name=\\\\\\\"\\\\\\\",this.color=new D.a(t),this.near=e,this.far=n}clone(){return new xa(this.color,this.near,this.far)}toJSON(){return{type:\\\\\\\"Fog\\\\\\\",color:this.color.getHex(),near:this.near,far:this.far}}}xa.prototype.isFog=!0;class ba{constructor(t,e=25e-5){this.name=\\\\\\\"\\\\\\\",this.color=new D.a(t),this.density=e}clone(){return new ba(this.color,this.density)}toJSON(){return{type:\\\\\\\"FogExp2\\\\\\\",color:this.color.getHex(),density:this.density}}}ba.prototype.isFogExp2=!0;const wa={computeOnDirty:!1,callback:t=>{Ma.update(t)}};var Ta;!function(t){t.LINEAR=\\\\\\\"linear\\\\\\\",t.EXPONENTIAL=\\\\\\\"exponential\\\\\\\"}(Ta||(Ta={}));const Aa=[Ta.LINEAR,Ta.EXPONENTIAL];function Ea(t){return class extends t{constructor(){super(...arguments),this.useFog=oa.BOOLEAN(0,wa),this.fogType=oa.INTEGER(Aa.indexOf(Ta.EXPONENTIAL),{visibleIf:{useFog:1},menu:{entries:Aa.map(((t,e)=>({name:t,value:e})))},...wa}),this.fogColor=oa.COLOR([1,1,1],{visibleIf:{useFog:1},...wa}),this.fogNear=oa.FLOAT(1,{range:[0,100],rangeLocked:[!0,!1],visibleIf:{useFog:1,fogType:Aa.indexOf(Ta.LINEAR)},...wa}),this.fogFar=oa.FLOAT(100,{range:[0,100],rangeLocked:[!0,!1],visibleIf:{useFog:1,fogType:Aa.indexOf(Ta.LINEAR)},...wa}),this.fogDensity=oa.FLOAT(25e-5,{visibleIf:{useFog:1,fogType:Aa.indexOf(Ta.EXPONENTIAL)},...wa})}}}Ea(aa);class Ma{constructor(t){this.node=t}async update(){const t=this.node.object,e=this.node.pv;if(e.useFog)if(e.fogType==Aa.indexOf(Ta.LINEAR)){const n=this.fog2(e);t.fog=n,n.color=e.fogColor,n.near=e.fogNear,n.far=e.fogFar}else{const n=this.fogExp2(e);t.fog=this.fogExp2(e),n.color=e.fogColor,n.density=e.fogDensity}else{t.fog&&(t.fog=null)}}fog2(t){return this._fog=this._fog||new xa(16777215,t.fogNear,t.fogFar)}fogExp2(t){return this._fogExp2=this._fogExp2||new ba(16777215,t.fogDensity)}static async update(t){t.sceneFogController.update()}}const Sa={computeOnDirty:!1,callback:t=>{Na.update(t)}};function Ca(t){return class extends t{constructor(){super(...arguments),this.useOverrideMaterial=oa.BOOLEAN(0,Sa),this.overrideMaterial=oa.NODE_PATH(\\\\\\\"\\\\\\\",{visibleIf:{useOverrideMaterial:1},nodeSelection:{context:Ki.MAT},dependentOnFoundNode:!1,...Sa})}}}Ca(aa);class Na{constructor(t){this.node=t}async update(){const t=this.node.object,e=this.node.pv;if(e.useOverrideMaterial){const n=e.overrideMaterial.nodeWithContext(Ki.MAT);n?n.compute().then((e=>{t.overrideMaterial=e.material()})):this.node.states.error.set(\\\\\\\"bgTexture node not found\\\\\\\")}else t.overrideMaterial=null}static async update(t){t.SceneMaterialOverrideController.update()}}class La extends(Ca(va(Ea(ma(ua(aa)))))){}const Oa=new La;class Ra extends ra{constructor(){super(...arguments),this.paramsConfig=Oa,this._object=this._createScene(),this._queued_nodes_by_id=new Map,this.sceneAutoUpdateController=new ha(this),this.sceneBackgroundController=new fa(this),this.sceneEnvController=new ya(this),this.sceneFogController=new Ma(this),this.sceneMaterialOverrideController=new Na(this),this._children_controller_context=Ki.OBJ}static type(){return\\\\\\\"obj\\\\\\\"}initializeNode(){this._object.matrixAutoUpdate=!1,this.lifecycle.add_on_child_add_hook(this._on_child_add.bind(this)),this.lifecycle.add_on_child_remove_hook(this._on_child_remove.bind(this))}_createScene(){const t=new fr;return t.name=\\\\\\\"/\\\\\\\",t.matrixAutoUpdate=!1,t}get object(){return this._object}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}_updateScene(){this.sceneAutoUpdateController.update(),this.sceneBackgroundController.update(),this.sceneEnvController.update(),this.sceneFogController.update(),this.sceneMaterialOverrideController.update()}_addToQueue(t){const e=t.graphNodeId();return this._queued_nodes_by_id.has(e)||this._queued_nodes_by_id.set(e,t),t}async processQueue(){this._updateScene();const t=new Map,e=[];this._queued_nodes_by_id.forEach(((n,i)=>{const r=`_____${n.renderOrder}__${n.path()}`;e.push(r),t.set(r,n)})),this._queued_nodes_by_id.clear();for(let n of e){const e=t.get(n);e&&(t.delete(n),this._addToScene(e))}}_update_object(t){return this.scene().loadingController.autoUpdating()?this._addToScene(t):this._addToQueue(t)}getParentForNode(t){if(t.attachableToHierarchy()){const e=t.io.inputs.input(0);return e?e.children_group:this._object}return null}_addToScene(t){var e;if(t.attachableToHierarchy()){const n=this.getParentForNode(t);n&&(t.usedInScene()?(null===(e=t.childrenDisplayController)||void 0===e||e.request_display_node_container(),t.addObjectToParent(n)):t.removeObjectFromParent())}}_removeFromScene(t){t.removeObjectFromParent()}areChildrenCooking(){const t=this.children();for(let e of t)if(e.cookController.isCooking()||e.isDisplayNodeCooking())return!0;return!1}addToParentTransform(t){this._update_object(t)}removeFromParentTransform(t){this._update_object(t)}_on_child_add(t){t&&this._update_object(t)}_on_child_remove(t){t&&this._removeFromScene(t)}}class Pa{constructor(t){this.scene=t,this._node_context_signatures={},this._instanciated_nodes_by_context_and_type={}}init(){this._root=new Ra(this.scene),this._root.initialize_base_and_node(),this._root.params.init(),this._root._set_core_name(\\\\\\\"RootNode\\\\\\\")}root(){return this._root}_traverseNode(t,e){const n=t.children();if(n&&0!=n.length)for(let t of n)e(t),t.childrenController&&this._traverseNode(t,e)}clear(){var t;const e=this.root().children();for(let n of e)null===(t=this.root().childrenController)||void 0===t||t.removeNode(n)}node(t){return\\\\\\\"/\\\\\\\"===t?this.root():this.root().node(t)}allNodes(){let t=[this.root()],e=[this.root()],n=0;for(;e.length>0&&n<10;){const i=e.map((t=>t.childrenAllowed()?t.children():[])).flat();t=t.concat(i),e=i,n+=1}return t.flat()}nodesFromMask(t){const e=this.allNodes(),n=[];for(let i of e){const e=i.path();sr.matchMask(e,t)&&n.push(i)}return n}reset_node_context_signatures(){this._node_context_signatures={}}register_node_context_signature(t){t.childrenAllowed()&&t.childrenController&&(this._node_context_signatures[t.childrenController.node_context_signature()]=!0)}node_context_signatures(){return Object.keys(this._node_context_signatures).sort().map((t=>t.toLowerCase()))}addToInstanciatedNode(t){const e=t.context(),n=t.type();this._instanciated_nodes_by_context_and_type[e]=this._instanciated_nodes_by_context_and_type[e]||{},this._instanciated_nodes_by_context_and_type[e][n]=this._instanciated_nodes_by_context_and_type[e][n]||{},this._instanciated_nodes_by_context_and_type[e][n][t.graphNodeId()]=t}removeFromInstanciatedNode(t){const e=t.context(),n=t.type();delete this._instanciated_nodes_by_context_and_type[e][n][t.graphNodeId()]}nodesByType(t){const e=[];return this._traverseNode(this.scene.root(),(n=>{n.type()==t&&e.push(n)})),e}nodesByContextAndType(t,e){const n=[],i=this._instanciated_nodes_by_context_and_type[t];if(i){const t=i[e];if(t)for(let e of Object.keys(t))n.push(t[e])}return n}}class Ia{constructor(t){this.scene=t}toJSON(t=!1){const e={},n={};for(let i of this.scene.nodesController.allNodes()){const r=new As(i);e[i.graphNodeId()]=r.toJSON(t);const s=i.params.all;for(let t of s)n[t.graphNodeId()]=t.toJSON()}return{nodes_by_graph_node_id:e,params_by_graph_node_id:n}}}var Fa;!function(t){t.auxclick=\\\\\\\"auxclick\\\\\\\",t.click=\\\\\\\"click\\\\\\\",t.contextmenu=\\\\\\\"contextmenu\\\\\\\",t.dblclick=\\\\\\\"dblclick\\\\\\\",t.mousedown=\\\\\\\"mousedown\\\\\\\",t.mouseenter=\\\\\\\"mouseenter\\\\\\\",t.mouseleave=\\\\\\\"mouseleave\\\\\\\",t.mousemove=\\\\\\\"mousemove\\\\\\\",t.mouseover=\\\\\\\"mouseover\\\\\\\",t.mouseout=\\\\\\\"mouseout\\\\\\\",t.mouseup=\\\\\\\"mouseup\\\\\\\",t.pointerlockchange=\\\\\\\"pointerlockchange\\\\\\\",t.pointerlockerror=\\\\\\\"pointerlockerror\\\\\\\",t.select=\\\\\\\"select\\\\\\\",t.wheel=\\\\\\\"wheel\\\\\\\"}(Fa||(Fa={}));const Da=[Fa.auxclick,Fa.click,Fa.contextmenu,Fa.dblclick,Fa.mousedown,Fa.mouseenter,Fa.mouseleave,Fa.mousemove,Fa.mouseover,Fa.mouseout,Fa.mouseup,Fa.pointerlockchange,Fa.pointerlockerror,Fa.select,Fa.wheel];class ka extends di{constructor(){super(...arguments),this._require_canvas_event_listeners=!0}type(){return\\\\\\\"mouse\\\\\\\"}acceptedEventTypes(){return Da.map((t=>`${t}`))}}class Ba extends ia{constructor(){super(...arguments),this._cook_without_inputs_bound=this._cook_without_inputs.bind(this)}static context(){return Ki.EVENT}initializeBaseNode(){this.uiData.setLayoutHorizontal(),this.addPostDirtyHook(\\\\\\\"cook_without_inputs_on_dirty\\\\\\\",this._cook_without_inputs_bound),this.io.inputs.set_depends_on_inputs(!1),this.io.connections.initInputs(),this.io.connection_points.spare_params.initializeNode()}_cook_without_inputs(){this.cookController.cookMainWithoutInputs()}cook(){this.cookController.endCook()}processEventViaConnectionPoint(t,e){e.event_listener?e.event_listener(t):this.processEvent(t)}processEvent(t){}async dispatchEventToOutput(t,e){this.run_on_dispatch_hook(t,e);const n=this.io.outputs.getOutputIndex(t);if(n>=0){const t=this.io.connections.outputConnections().filter((t=>t.output_index==n));let i;for(let n of t){i=n.node_dest;const t=i.io.inputs.namedInputConnectionPoints()[n.input_index];i.processEventViaConnectionPoint(e,t)}}else console.warn(`requested output '${t}' does not exist on node '${this.path()}'`)}onDispatch(t,e){this._on_dispatch_hooks_by_output_name=this._on_dispatch_hooks_by_output_name||new Map,u.pushOnArrayAtEntry(this._on_dispatch_hooks_by_output_name,t,e)}run_on_dispatch_hook(t,e){if(this._on_dispatch_hooks_by_output_name){const n=this._on_dispatch_hooks_by_output_name.get(t);if(n)for(let t of n)t(e)}}}var za;!function(t){t.CANVAS=\\\\\\\"canvas\\\\\\\",t.DOCUMENT=\\\\\\\"document\\\\\\\"}(za||(za={}));const Ua=[za.CANVAS,za.DOCUMENT];class Ga{constructor(t){this.viewer=t,this._bound_listener_map_by_event_controller_type=new Map}updateEvents(t){const e=this.canvas();if(!e)return;const n=t.type();let i=this._bound_listener_map_by_event_controller_type.get(n);i||(i=new Map,this._bound_listener_map_by_event_controller_type.set(n,i)),i.forEach(((t,n)=>{this._eventOwner(t.data,e).removeEventListener(n,t.listener)})),i.clear();const r=e=>{this.processEvent(e,t)};for(let n of t.activeEventDatas()){this._eventOwner(n,e).addEventListener(n.type,r),i.set(n.type,{listener:r,data:n})}}_eventOwner(t,e){return\\\\\\\"resize\\\\\\\"==t.type?window:t.emitter==za.CANVAS?e:document}cameraNode(){return this.viewer.camerasController.cameraNode()}canvas(){return this.viewer.canvas()}init(){this.canvas&&this.viewer.scene().eventsDispatcher.traverseControllers((t=>{this.updateEvents(t)}))}registeredEventTypes(){const t=[];return this._bound_listener_map_by_event_controller_type.forEach((e=>{e.forEach(((e,n)=>{t.push(n)}))})),t}dispose(){const t=this.canvas();this._bound_listener_map_by_event_controller_type.forEach((e=>{t&&e.forEach(((e,n)=>{this._eventOwner(e.data,t).removeEventListener(n,e.listener)}))}))}processEvent(t,e){if(!this.canvas())return;const n={viewer:this.viewer,event:t,cameraNode:this.cameraNode()};e.processEvent(n)}}const Va={visibleIf:{active:1},callback:t=>{ja.PARAM_CALLBACK_updateRegister(t)}};class Ha extends Ba{constructor(){super(...arguments),this._activeEventDatas=[]}initializeBaseNode(){super.initializeBaseNode();this.lifecycle.add_on_add_hook((()=>{this.scene().eventsDispatcher.registerEventNode(this)})),this.lifecycle.add_delete_hook((()=>{this.scene().eventsDispatcher.unregisterEventNode(this)})),this.params.onParamsCreated(\\\\\\\"update_register\\\\\\\",(()=>{this._updateRegister()}))}processEvent(t){this.pv.active&&t.event&&this.dispatchEventToOutput(t.event.type,t)}static PARAM_CALLBACK_updateRegister(t){t._updateRegister()}_updateRegister(){this._updateActiveEventDatas(),this.scene().eventsDispatcher.updateViewerEventListeners(this)}_updateActiveEventDatas(){if(this._activeEventDatas=[],this.pv.active){const t=this.acceptedEventTypes();for(let e of t){const t=this.params.get(e);t&&t.value&&this._activeEventDatas.push({type:e,emitter:Ua[this.pv.element]})}}}activeEventDatas(){return this._activeEventDatas}}class ja extends Ha{acceptedEventTypes(){return[]}}const Wa=new class extends aa{constructor(){super(...arguments),this.active=oa.BOOLEAN(!0,{callback:t=>{qa.PARAM_CALLBACK_updateRegister(t)},separatorAfter:!0}),this.element=oa.INTEGER(Ua.indexOf(za.CANVAS),{menu:{entries:Ua.map(((t,e)=>({name:t,value:e})))},separatorAfter:!0}),this.auxclick=oa.BOOLEAN(0,Va),this.click=oa.BOOLEAN(0,Va),this.contextmenu=oa.BOOLEAN(0,Va),this.dblclick=oa.BOOLEAN(0,Va),this.mousedown=oa.BOOLEAN(1,Va),this.mouseenter=oa.BOOLEAN(0,Va),this.mouseleave=oa.BOOLEAN(0,Va),this.mousemove=oa.BOOLEAN(1,Va),this.mouseover=oa.BOOLEAN(0,Va),this.mouseout=oa.BOOLEAN(0,Va),this.mouseup=oa.BOOLEAN(1,Va),this.pointerlockchange=oa.BOOLEAN(0,Va),this.pointerlockerror=oa.BOOLEAN(0,Va),this.select=oa.BOOLEAN(0,Va),this.wheel=oa.BOOLEAN(0,Va),this.ctrlKey=oa.BOOLEAN(0,{...Va,separatorBefore:!0}),this.altKey=oa.BOOLEAN(0,Va),this.shiftKey=oa.BOOLEAN(0,Va),this.metaKey=oa.BOOLEAN(0,Va)}};class qa extends Ha{constructor(){super(...arguments),this.paramsConfig=Wa}static type(){return\\\\\\\"mouse\\\\\\\"}acceptedEventTypes(){return Da.map((t=>`${t}`))}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints(Da.map((t=>new Jo(t,$o.MOUSE)))),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{const t=[this.p.auxclick,this.p.click,this.p.dblclick,this.p.mousedown,this.p.mouseenter,this.p.mouseleave,this.p.mousemove,this.p.mouseout,this.p.mouseout,this.p.mouseup,this.p.pointerlockchange,this.p.pointerlockerror,this.p.select,this.p.wheel];this.params.label.init(t,(()=>t.map((t=>t.value?t.name():void 0)).filter((t=>t)).join(\\\\\\\", \\\\\\\")))}))}))}processEvent(t){if(!this.pv.active)return;if(!t.event)return;const e=t.event;e.ctrlKey==this.pv.ctrlKey&&e.shiftKey==this.pv.shiftKey&&e.altKey==this.pv.altKey&&e.metaKey==this.pv.metaKey&&this.dispatchEventToOutput(t.event.type,t)}}var Xa;!function(t){t.pointerdown=\\\\\\\"pointerdown\\\\\\\",t.pointermove=\\\\\\\"pointermove\\\\\\\",t.pointerup=\\\\\\\"pointerup\\\\\\\"}(Xa||(Xa={}));const Ya=[Xa.pointerdown,Xa.pointermove,Xa.pointerup];class $a extends di{constructor(){super(...arguments),this._require_canvas_event_listeners=!0}type(){return\\\\\\\"pointer\\\\\\\"}acceptedEventTypes(){return Ya.map((t=>`${t}`))}}const Ja=new class extends aa{constructor(){super(...arguments),this.active=oa.BOOLEAN(!0,{callback:t=>{Za.PARAM_CALLBACK_updateRegister(t)},separatorAfter:!0}),this.element=oa.INTEGER(Ua.indexOf(za.CANVAS),{menu:{entries:Ua.map(((t,e)=>({name:t,value:e})))},separatorAfter:!0}),this.pointerdown=oa.BOOLEAN(1,Va),this.pointermove=oa.BOOLEAN(0,Va),this.pointerup=oa.BOOLEAN(0,Va),this.ctrlKey=oa.BOOLEAN(0,{...Va,separatorBefore:!0}),this.altKey=oa.BOOLEAN(0,Va),this.shiftKey=oa.BOOLEAN(0,Va),this.metaKey=oa.BOOLEAN(0,Va)}};class Za extends Ha{constructor(){super(...arguments),this.paramsConfig=Ja}static type(){return\\\\\\\"pointer\\\\\\\"}acceptedEventTypes(){return Ya.map((t=>`${t}`))}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints(Ya.map((t=>new Jo(t,$o.POINTER)))),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{const t=[this.p.pointerdown,this.p.pointermove,this.p.pointerup];this.params.label.init(t,(()=>t.map((t=>t.value?t.name():void 0)).filter((t=>t)).join(\\\\\\\", \\\\\\\")))}))}))}processEvent(t){if(!this.pv.active)return;if(!t.event)return;const e=t.event;e.ctrlKey==this.pv.ctrlKey&&e.shiftKey==this.pv.shiftKey&&e.altKey==this.pv.altKey&&e.metaKey==this.pv.metaKey&&this.dispatchEventToOutput(t.event.type,t)}}var Qa,Ka;!function(t){t.SET_FRAME=\\\\\\\"setFrame\\\\\\\"}(Qa||(Qa={})),function(t){t.TIME_REACHED=\\\\\\\"timeReached\\\\\\\"}(Ka||(Ka={}));const tl=new class extends aa{constructor(){super(...arguments),this.active=oa.BOOLEAN(!0,{callback:(t,e)=>{el.PARAM_CALLBACK_updateRegister(t)},separatorAfter:!0}),this.element=oa.INTEGER(0,{hidden:!0}),this.sceneLoaded=oa.BOOLEAN(1,Va),this.play=oa.BOOLEAN(1,Va),this.pause=oa.BOOLEAN(1,Va),this.tick=oa.BOOLEAN(1,{separatorAfter:!0,...Va}),this.treachedTime=oa.BOOLEAN(0,{callback:t=>{el.PARAM_CALLBACK_update_time_dependency(t)}}),this.reachedTime=oa.INTEGER(10,{visibleIf:{treachedTime:1},range:[0,100],separatorAfter:!0}),this.setFrameValue=oa.INTEGER(1,{range:[0,100]}),this.setFrame=oa.BUTTON(null,{callback:t=>{el.PARAM_CALLBACK_setFrame(t)}})}};class el extends Ha{constructor(){super(...arguments),this.paramsConfig=tl}static type(){return\\\\\\\"scene\\\\\\\"}acceptedEventTypes(){return _i.map((t=>`${t}`))}dispose(){var t;null===(t=this.graph_node)||void 0===t||t.dispose(),super.dispose()}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new Jo(Qa.SET_FRAME,$o.BASE,this.onSetFrame.bind(this))]);const t=_i.map((t=>new Jo(t,$o.BASE)));t.push(new Jo(Ka.TIME_REACHED,$o.BASE)),this.io.outputs.setNamedOutputConnectionPoints(t),this.params.onParamsCreated(\\\\\\\"update_time_dependency\\\\\\\",(()=>{this.update_time_dependency()}))}onSetFrame(t){this.scene().setFrame(this.pv.setFrameValue)}on_frame_update(){this.scene().time()>=this.pv.reachedTime&&this.dispatchEventToOutput(Ka.TIME_REACHED,{})}update_time_dependency(){this.pv.treachedTime?(this.graph_node=this.graph_node||new Ai(this.scene(),\\\\\\\"scene_node_time_graph_node\\\\\\\"),this.graph_node.addGraphInput(this.scene().timeController.graphNode),this.graph_node.addPostDirtyHook(\\\\\\\"time_update\\\\\\\",this.on_frame_update.bind(this))):this.graph_node&&this.graph_node.graphDisconnectPredecessors()}static PARAM_CALLBACK_setFrame(t){t.onSetFrame({})}static PARAM_CALLBACK_update_time_dependency(t){t.update_time_dependency()}}var nl;!function(t){t.keydown=\\\\\\\"keydown\\\\\\\",t.keypress=\\\\\\\"keypress\\\\\\\",t.keyup=\\\\\\\"keyup\\\\\\\"}(nl||(nl={}));const il=[nl.keydown,nl.keypress,nl.keyup];class rl extends di{constructor(){super(...arguments),this._require_canvas_event_listeners=!0}type(){return\\\\\\\"keyboard\\\\\\\"}acceptedEventTypes(){return il.map((t=>`${t}`))}}const sl=new class extends aa{constructor(){super(...arguments),this.active=oa.BOOLEAN(!0,{callback:(t,e)=>{ol.PARAM_CALLBACK_updateRegister(t)},separatorAfter:!0}),this.element=oa.INTEGER(Ua.indexOf(za.CANVAS),{menu:{entries:Ua.map(((t,e)=>({name:t,value:e})))},separatorAfter:!0}),this.keydown=oa.BOOLEAN(1,Va),this.keypress=oa.BOOLEAN(0,Va),this.keyup=oa.BOOLEAN(0,Va),this.keyCodes=oa.STRING(\\\\\\\"Digit1 KeyE ArrowDown\\\\\\\",Va),this.ctrlKey=oa.BOOLEAN(0,Va),this.altKey=oa.BOOLEAN(0,Va),this.shiftKey=oa.BOOLEAN(0,Va),this.metaKey=oa.BOOLEAN(0,Va)}};class ol extends Ha{constructor(){super(...arguments),this.paramsConfig=sl}static type(){return\\\\\\\"keyboard\\\\\\\"}acceptedEventTypes(){return il.map((t=>`${t}`))}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints(il.map((t=>new Jo(t,$o.KEYBOARD)))),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{const t=[this.p.keydown,this.p.keypress,this.p.keyup];this.params.label.init(t.concat([this.p.keyCodes]),(()=>`${t.map((t=>t.value?t.name():void 0)).filter((t=>t)).join(\\\\\\\", \\\\\\\")} (${this.pv.keyCodes})`))}))}))}processEvent(t){if(!this.pv.active)return;if(!t.event)return;const e=t.event;if(e.ctrlKey!=this.pv.ctrlKey)return;if(e.shiftKey!=this.pv.shiftKey)return;if(e.altKey!=this.pv.altKey)return;if(e.metaKey!=this.pv.metaKey)return;if(this.pv.keyCodes.trim().length>0){if(!this.pv.keyCodes.split(\\\\\\\" \\\\\\\").includes(e.code))return}this.dispatchEventToOutput(t.event.type,t)}}var al;!function(t){t.resize=\\\\\\\"resize\\\\\\\"}(al||(al={}));const ll=[al.resize];class cl extends di{constructor(){super(...arguments),this._require_canvas_event_listeners=!0}type(){return\\\\\\\"window\\\\\\\"}acceptedEventTypes(){return ll.map((t=>`${t}`))}}const ul=new class extends aa{constructor(){super(...arguments),this.active=oa.BOOLEAN(!0,{callback:t=>{hl.PARAM_CALLBACK_updateRegister(t)},separatorAfter:!0}),this.element=oa.INTEGER(0,{hidden:!0}),this.resize=oa.BOOLEAN(1,Va)}};class hl extends Ha{constructor(){super(...arguments),this.paramsConfig=ul}static type(){return\\\\\\\"window\\\\\\\"}acceptedEventTypes(){return ll.map((t=>`${t}`))}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints(ll.map((t=>new Jo(t,$o.POINTER)))),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{const t=[this.p.resize];this.params.label.init(t,(()=>t.map((t=>t.value?t.name():void 0)).filter((t=>t)).join(\\\\\\\", \\\\\\\")))}))}))}processEvent(t){this.pv.active&&t.event&&this.dispatchEventToOutput(t.event.type,t)}}var dl;!function(t){t.dragover=\\\\\\\"dragover\\\\\\\"}(dl||(dl={}));const pl=[dl.dragover];class _l extends di{constructor(){super(...arguments),this._require_canvas_event_listeners=!0}type(){return\\\\\\\"drag\\\\\\\"}acceptedEventTypes(){return pl.map((t=>`${t}`))}}var ml;!function(t){t.touchstart=\\\\\\\"touchstart\\\\\\\",t.touchmove=\\\\\\\"touchmove\\\\\\\",t.touchend=\\\\\\\"touchend\\\\\\\"}(ml||(ml={}));const fl=[ml.touchstart,ml.touchmove,ml.touchend];class gl extends di{constructor(){super(...arguments),this._require_canvas_event_listeners=!0}type(){return\\\\\\\"touch\\\\\\\"}acceptedEventTypes(){return fl.map((t=>`${t}`))}}const vl=new class extends aa{constructor(){super(...arguments),this.active=oa.BOOLEAN(!0,{callback:t=>{yl.PARAM_CALLBACK_updateRegister(t)},separatorAfter:!0}),this.element=oa.INTEGER(Ua.indexOf(za.CANVAS),{menu:{entries:Ua.map(((t,e)=>({name:t,value:e})))},separatorAfter:!0}),this.dragover=oa.BOOLEAN(1,Va),this.ctrlKey=oa.BOOLEAN(0,{...Va,separatorBefore:!0}),this.altKey=oa.BOOLEAN(0,Va),this.shiftKey=oa.BOOLEAN(0,Va),this.metaKey=oa.BOOLEAN(0,Va)}};class yl extends Ha{constructor(){super(...arguments),this.paramsConfig=vl}static type(){return\\\\\\\"drag\\\\\\\"}acceptedEventTypes(){return pl.map((t=>`${t}`))}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints(pl.map((t=>new Jo(t,$o.DRAG)))),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{const t=[this.p.dragover];this.params.label.init(t,(()=>t.map((t=>t.value?t.name():void 0)).filter((t=>t)).join(\\\\\\\", \\\\\\\")))}))}))}processEvent(t){if(!this.pv.active)return;if(!t.event)return;const e=t.event;e.ctrlKey==this.pv.ctrlKey&&e.shiftKey==this.pv.shiftKey&&e.altKey==this.pv.altKey&&e.metaKey==this.pv.metaKey&&this.dispatchEventToOutput(t.event.type,t)}}const xl=new class extends aa{constructor(){super(...arguments),this.active=oa.BOOLEAN(!0,{callback:t=>{bl.PARAM_CALLBACK_updateRegister(t)},separatorAfter:!0}),this.element=oa.INTEGER(Ua.indexOf(za.CANVAS),{menu:{entries:Ua.map(((t,e)=>({name:t,value:e})))},separatorAfter:!0}),this.touchstart=oa.BOOLEAN(1,Va),this.touchmove=oa.BOOLEAN(0,Va),this.touchend=oa.BOOLEAN(0,Va)}};class bl extends Ha{constructor(){super(...arguments),this.paramsConfig=xl}static type(){return\\\\\\\"touch\\\\\\\"}acceptedEventTypes(){return fl.map((t=>`${t}`))}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints(fl.map((t=>new Jo(t,$o.DRAG)))),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{const t=[this.p.touchstart,this.p.touchmove,this.p.touchend];this.params.label.init(t,(()=>t.map((t=>t.value?t.name():void 0)).filter((t=>t)).join(\\\\\\\", \\\\\\\")))}))}))}processEvent(t){this.pv.active&&t.event&&this.dispatchEventToOutput(t.event.type,t)}}class wl{constructor(t){this.scene=t,this._controllers=[]}registerEventNode(t){const e=this._find_or_create_controller_for_node(t);e&&e.registerNode(t)}unregisterEventNode(t){const e=this._find_or_create_controller_for_node(t);e&&e.unregisterNode(t)}updateViewerEventListeners(t){const e=this._find_or_create_controller_for_node(t);e&&e.updateViewerEventListeners()}traverseControllers(t){for(let e of this._controllers)t(e)}_find_or_create_controller_for_node(t){switch(t.type()){case ol.type():return this.keyboardEventsController;case qa.type():return this.mouseEventsController;case yl.type():return this.dragEventsController;case Za.type():return this.pointerEventsController;case el.type():return this.sceneEventsController;case bl.type():return this.touchEventsController;case hl.type():return this.windowEventsController}}get keyboardEventsController(){return this._keyboard_events_controller=this._keyboard_events_controller||this._create_controller(rl)}get mouseEventsController(){return this._mouse_events_controller=this._mouse_events_controller||this._create_controller(ka)}get dragEventsController(){return this._drag_events_controller=this._drag_events_controller||this._create_controller(_l)}get pointerEventsController(){return this._pointer_events_controller=this._pointer_events_controller||this._create_controller($a)}get sceneEventsController(){return this._scene_events_controller=this._scene_events_controller||this._create_controller(mi)}get windowEventsController(){return this._window_events_controller=this._window_events_controller||this._create_controller(cl)}get touchEventsController(){return this._touch_events_controller=this._touch_events_controller||this._create_controller(gl)}_create_controller(t){const e=new t(this);return this._controllers.includes(e)||this._controllers.push(e),e}}class Tl{constructor(t){this.scene=t,this._referenced_nodes_by_src_param_id=new Map,this._referencing_params_by_referenced_node_id=new Map,this._referencing_params_by_all_named_node_ids=new Map}set_reference_from_param(t,e){this._referenced_nodes_by_src_param_id.set(t.graphNodeId(),e),u.pushOnArrayAtEntry(this._referencing_params_by_referenced_node_id,e.graphNodeId(),t)}set_named_nodes_from_param(t){const e=t.decomposed_path.named_nodes();for(let n of e)u.pushOnArrayAtEntry(this._referencing_params_by_all_named_node_ids,n.graphNodeId(),t)}reset_reference_from_param(t){const e=this._referenced_nodes_by_src_param_id.get(t.graphNodeId());if(e){u.popFromArrayAtEntry(this._referencing_params_by_referenced_node_id,e.graphNodeId(),t);const n=t.decomposed_path.named_nodes();for(let e of n)u.popFromArrayAtEntry(this._referencing_params_by_all_named_node_ids,e.graphNodeId(),t);this._referenced_nodes_by_src_param_id.delete(t.graphNodeId())}}referencing_params(t){return this._referencing_params_by_referenced_node_id.get(t.graphNodeId())}referencing_nodes(t){const e=this._referencing_params_by_referenced_node_id.get(t.graphNodeId());if(e){const t=new Map;for(let n of e){const e=n.node;t.set(e.graphNodeId(),e)}const n=[];return t.forEach((t=>{n.push(t)})),n}}nodes_referenced_by(t){const e=new Set([Es.OPERATOR_PATH,Es.NODE_PATH]),n=[];for(let i of t.params.all)e.has(i.type())&&n.push(i);const i=new Map,r=[];for(let t of n)this._check_param(t,i,r);for(let t of r)i.set(t.node.graphNodeId(),t.node);const s=[];return i.forEach((t=>{s.push(t)})),s}_check_param(t,e,n){if(t instanceof po){const i=t.found_node(),r=t.found_param();return i&&e.set(i.graphNodeId(),i),void(r&&n.push(r))}}notify_name_updated(t){const e=this._referencing_params_by_all_named_node_ids.get(t.graphNodeId());if(e)for(let n of e)n.notify_path_rebuild_required(t)}notify_params_updated(t){const e=this._referencing_params_by_all_named_node_ids.get(t.graphNodeId());if(e)for(let n of e)n.options.isSelectingParam()&&n.notify_target_param_owner_params_updated(t)}}var Al;!function(t){t.MAX_FRAME_UPDATED=\\\\\\\"scene_maxFrameUpdated\\\\\\\",t.REALTIME_STATUS_UPDATED=\\\\\\\"scene_realtime_status_updated\\\\\\\",t.FRAME_UPDATED=\\\\\\\"scene_frame_updated\\\\\\\",t.PLAY_STATE_UPDATED=\\\\\\\"scene_play_state_updated\\\\\\\"}(Al||(Al={}));const El=ai.performance.performanceManager();class Ml{constructor(t){this.scene=t,this._frame=0,this._time=0,this._prev_performance_now=0,this._realtimeState=!0,this._maxFrame=600,this._maxFrameLocked=!1,this._playing=!1,this._graph_node=new Ai(t,\\\\\\\"time controller\\\\\\\")}get PLAY_EVENT_CONTEXT(){return this._PLAY_EVENT_CONTEXT=this._PLAY_EVENT_CONTEXT||{event:new Event(pi.PLAY)}}get PAUSE_EVENT_CONTEXT(){return this._PAUSE_EVENT_CONTEXT=this._PAUSE_EVENT_CONTEXT||{event:new Event(pi.PAUSE)}}get TICK_EVENT_CONTEXT(){return this._TICK_EVENT_CONTEXT=this._TICK_EVENT_CONTEXT||{event:new Event(pi.TICK)}}get graphNode(){return this._graph_node}frame(){return this._frame}time(){return this._time}maxFrame(){return this._maxFrame}maxFrameLocked(){return this._maxFrameLocked}realtimeState(){return this._realtimeState}setMaxFrame(t){this._maxFrame=Math.floor(t),this.scene.dispatchController.dispatch(this._graph_node,Al.MAX_FRAME_UPDATED)}setMaxFrameLocked(t){this._maxFrameLocked=t,this.scene.dispatchController.dispatch(this._graph_node,Al.MAX_FRAME_UPDATED)}setRealtimeState(t){this._realtimeState=t,this.scene.dispatchController.dispatch(this._graph_node,Al.REALTIME_STATUS_UPDATED)}setTime(t,e=!0){if(t!=this._time){if(this._time=t,this._onBeforeTickCallbacks)for(let t of this._onBeforeTickCallbacks)t();if(e){const t=Math.floor(60*this._time),e=this._ensureFrameWithinBounds(t);t!=e?this.setFrame(e,!0):this._frame=t}if(this.scene.dispatchController.dispatch(this._graph_node,Al.FRAME_UPDATED),this.scene.uniformsController.updateTimeDependentUniformOwners(),this.scene.cooker.block(),this.graphNode.setSuccessorsDirty(),this.scene.cooker.unblock(),this.scene.eventsDispatcher.sceneEventsController.processEvent(this.TICK_EVENT_CONTEXT),this._onAfterTickCallbacks)for(let t of this._onAfterTickCallbacks)t()}}setFrame(t,e=!0){t!=this._frame&&(t=this._ensureFrameWithinBounds(t))!=this._frame&&(this._frame=t,e&&this.setTime(this._frame/60,!1))}setFrameToStart(){this.setFrame(Ml.START_FRAME,!0)}incrementTimeIfPlaying(){this._playing&&(this.scene.root().areChildrenCooking()||this.incrementTime())}incrementTime(){if(this._realtimeState){const t=El.now(),e=(t-this._prev_performance_now)/1e3,n=this._time+e;this._prev_performance_now=t,this.setTime(n)}else this.setFrame(this.frame()+1)}_ensureFrameWithinBounds(t){if(this._playing){if(this._maxFrameLocked&&t>this._maxFrame)return Ml.START_FRAME}else{if(this._maxFrameLocked&&t>this._maxFrame)return this._maxFrame;if(t<Ml.START_FRAME)return Ml.START_FRAME}return t}playing(){return!0===this._playing}pause(){1==this._playing&&(this._playing=!1,this.scene.dispatchController.dispatch(this._graph_node,Al.PLAY_STATE_UPDATED),this.scene.eventsDispatcher.sceneEventsController.processEvent(this.PAUSE_EVENT_CONTEXT))}play(){!0!==this._playing&&(this._playing=!0,this._prev_performance_now=El.now(),this.scene.dispatchController.dispatch(this._graph_node,Al.PLAY_STATE_UPDATED),this.scene.eventsDispatcher.sceneEventsController.processEvent(this.PLAY_EVENT_CONTEXT))}togglePlayPause(){this.playing()?this.pause():this.play()}registerOnBeforeTick(t,e){this._onBeforeTickCallbackNames=this._onBeforeTickCallbackNames||[],this._onBeforeTickCallbacks=this._onBeforeTickCallbacks||[],this._registerCallback(t,e,this._onBeforeTickCallbackNames,this._onBeforeTickCallbacks)}unRegisterOnBeforeTick(t){this._unregisterCallback(t,this._onBeforeTickCallbackNames,this._onBeforeTickCallbacks)}registeredBeforeTickCallbackNames(){return this._onBeforeTickCallbackNames}registerOnAfterTick(t,e){this._onAfterTickCallbacks=this._onAfterTickCallbacks||[],this._onAfterTickCallbackNames=this._onAfterTickCallbackNames||[],this._registerCallback(t,e,this._onAfterTickCallbackNames,this._onAfterTickCallbacks)}unRegisterOnAfterTick(t){this._unregisterCallback(t,this._onAfterTickCallbackNames,this._onAfterTickCallbacks)}registeredAfterTickCallbackNames(){return this._onAfterTickCallbackNames}_registerCallback(t,e,n,i){(null==n?void 0:n.includes(t))?console.warn(`callback ${t} already registered`):(i.push(e),n.push(t))}_unregisterCallback(t,e,n){if(!e||!n)return;const i=e.indexOf(t);e.splice(i,1),n.splice(i,1)}}Ml.START_FRAME=0;class Sl{constructor(t){this.scene=t,this._time_dependent_uniform_owners={},this._time_dependent_uniform_owners_ids=null,this._resolution=new d.a(1,1),this._resolution_dependent_uniform_owners={},this._resolution_dependent_uniform_owners_ids=[]}addTimeDependentUniformOwner(t,e){this._time_dependent_uniform_owners[t]=e,this._time_dependent_uniform_owners_ids||(this._time_dependent_uniform_owners_ids=[]),this._time_dependent_uniform_owners_ids.includes(t)||this._time_dependent_uniform_owners_ids.push(t)}removeTimeDependentUniformOwner(t){if(delete this._time_dependent_uniform_owners[t],this._time_dependent_uniform_owners_ids){const e=this._time_dependent_uniform_owners_ids.indexOf(t);e>=0&&this._time_dependent_uniform_owners_ids.splice(e,1)}}updateTimeDependentUniformOwners(){const t=this.scene.time();if(this._time_dependent_uniform_owners_ids)for(let e of this._time_dependent_uniform_owners_ids){this._time_dependent_uniform_owners[e].time.value=t}}addResolutionDependentUniformOwner(t,e){this._resolution_dependent_uniform_owners[t]=e,this._resolution_dependent_uniform_owners_ids||(this._resolution_dependent_uniform_owners_ids=[]),this._resolution_dependent_uniform_owners_ids.includes(t)||this._resolution_dependent_uniform_owners_ids.push(t),this._resolution&&this.updateResolutionDependentUniforms(e)}removeResolutionDependentUniformOwner(t){if(delete this._resolution_dependent_uniform_owners[t],this._resolution_dependent_uniform_owners_ids){const e=this._resolution_dependent_uniform_owners_ids.indexOf(t);e>=0&&this._resolution_dependent_uniform_owners_ids.splice(e,1)}}updateResolutionDependentUniformOwners(t){this._resolution.copy(t);for(let t of this._resolution_dependent_uniform_owners_ids){const e=this._resolution_dependent_uniform_owners[t];this.updateResolutionDependentUniforms(e)}}updateResolutionDependentUniforms(t){t.resolution.value.x=this._resolution.x,t.resolution.value.y=this._resolution.y}}class Cl{constructor(t){this.scene=t,this._viewers_by_id=new Map}registerViewer(t){this._viewers_by_id.set(t.id(),t)}unregisterViewer(t){this._viewers_by_id.delete(t.id())}traverseViewers(t){this._viewers_by_id.forEach(t)}}class Nl{constructor(){this._require_webgl2=!1}require_webgl2(){return this._require_webgl2}set_require_webgl2(){this._require_webgl2||(this._require_webgl2=!0,ai.renderersController.setRequireWebGL2())}}class Ll{constructor(t){this._scene=t,this._onWindowResizeBound=this._onWindowResize.bind(this)}graphNode(){return this._coreGraphNode=this._coreGraphNode||this._createGraphNode()}_createGraphNode(){const t=new Ai(this._scene,\\\\\\\"SceneWindowController\\\\\\\");return window.addEventListener(\\\\\\\"resize\\\\\\\",this._onWindowResizeBound),t}_onWindowResize(){this.graphNode().setSuccessorsDirty()}dispose(){window.removeEventListener(\\\\\\\"resize\\\\\\\",this._onWindowResizeBound)}}class Ol{constructor(){this._params_by_id=new Map,this._assets_root=null}register_param(t){this._params_by_id.set(t.graphNodeId(),t)}deregister_param(t){this._params_by_id.delete(t.graphNodeId())}traverse_params(t){this._params_by_id.forEach(((e,n)=>{t(e)}))}root(){return this._assets_root}setRoot(t){\\\\\\\"\\\\\\\"==t&&(t=null),this._assets_root=t}}class Rl{constructor(){this._cameras_controller=new s(this),this._cooker=new o(this),this.cookController=new a,this._graph=new l,this._missing_expression_references_controller=new wi(this),this._expressions_controller=new ui,this._nodes_controller=new Pa(this),this._objects_controller=new la(this),this._references_controller=new Tl(this),this._time_controller=new Ml(this),this._read_only=!1,this._graph.setScene(this),this.nodesController.init()}threejsScene(){return this.root().object}setUuid(t){return this._uuid=t}get uuid(){return this._uuid}setName(t){return t=sr.sanitizeName(t),this._name=t}name(){return this._name}get camerasController(){return this._cameras_controller}mainCameraNode(){return this.camerasController.mainCameraNode()}get cooker(){return this._cooker}get assets(){return this._assets_controller=this._assets_controller||new Ol}async waitForCooksCompleted(){return this.cookController.waitForCooksCompleted()}get dispatchController(){return this._dispatch_controller=this._dispatch_controller||new ci(this)}get eventsDispatcher(){return this._events_dispatcher=this._events_dispatcher||new wl(this)}get graph(){return this._graph}get lifecycleController(){return this._lifecycle_controller=this._lifecycle_controller||new hi(this)}get loadingController(){return this._loading_controller=this._loading_controller||new fi(this)}get missingExpressionReferencesController(){return this._missing_expression_references_controller}get expressionsController(){return this._expressions_controller}get nodesController(){return this._nodes_controller}createNode(t,e){return this.root().createNode(t,e)}nodesByType(t){return this.nodesController.nodesByType(t)}get objectsController(){return this._objects_controller}findObjectByMask(t){return this._objects_controller.findObjectByMask(t)}objectsByMask(t){return this._objects_controller.objectsByMask(t)}get referencesController(){return this._references_controller}get performance(){return this._performance=this._performance||new li}get viewersRegister(){return this._viewers_register=this._viewers_register||new Cl(this)}get timeController(){return this._time_controller}setFrame(t){this.timeController.setFrame(t)}setFrameToStart(){this.timeController.setFrameToStart()}frame(){return this.timeController.frame()}time(){return this.timeController.time()}maxFrame(){return this.timeController.maxFrame()}play(){this.timeController.play()}pause(){this.timeController.pause()}get serializer(){return this._serializer=this._serializer||new Ia(this)}toJSON(){return this.serializer.toJSON()}markAsReadOnly(t){this._read_only||(this._read_only_requester=t,this._read_only=!0)}readOnly(){return this._read_only}readOnlyRequester(){return this._read_only_requester}get uniformsController(){return this._uniformsController=this._uniformsController||new Sl(this)}get webgl_controller(){return this._webgl_controller=this._webgl_controller||new Nl}get windowController(){return this._windowController=this._windowController||new Ll(this)}dispose(){var t;null===(t=this._windowController)||void 0===t||t.dispose()}batchUpdates(t){this._cooker.block(),t(),this._cooker.unblock()}node(t){return this.nodesController.node(t)}root(){return this.nodesController.root()}registerOnBeforeTick(t,e){this.timeController.registerOnBeforeTick(t,e)}unRegisterOnBeforeTick(t){this.timeController.unRegisterOnBeforeTick(t)}registeredBeforeTickCallbackNames(){return this.timeController.registeredBeforeTickCallbackNames()}registerOnAfterTick(t,e){this.timeController.registerOnAfterTick(t,e)}unRegisterOnAfterTick(t){this.timeController.unRegisterOnAfterTick(t)}registeredAfterTickCallbackNames(){return this.timeController.registeredAfterTickCallbackNames()}}class Pl{constructor(t){this._param=t}process_data(t){const e=t.raw_input;void 0!==e&&this._param.set(e),this.add_main(t)}add_main(t){}static spare_params_data(t){return this.params_data(!0,t)}static non_spare_params_data_value(t){return this.params_data_value(!1,t)}static params_data(t,e){let n;if(e){n={};const t=Object.keys(e);let i;for(let r of t)i=e[r],i&&(n[r]=e)}return n}static params_data_value(t,e){let n;if(e){n={};const i=Object.keys(e);let r;for(let s of i)if(r=e[s],null!=r){const e=r.options,i=r.overriden_options;if(e||i){const o=r;e&&e.spare==t?null!=o.raw_input&&(n[s]={complex_data:o}):i&&(n[s]={complex_data:o})}else{const t=r;(i||null!=t)&&(n[s]={simple_data:t})}}}return n}}const Il=\\\\\\\"operationsComposer\\\\\\\";class Fl{constructor(t,e,n){this._scene=t,this.states=e,this._node=n}static type(){throw\\\\\\\"type to be overriden\\\\\\\"}type(){return this.constructor.type()}static context(){throw console.error(\\\\\\\"operation has no node_context\\\\\\\",this),\\\\\\\"context requires override\\\\\\\"}context(){return this.constructor.context()}scene(){return this._scene}cook(t,e){}}Fl.DEFAULT_PARAMS={},Fl.INPUT_CLONED_STATE=[];class Dl{constructor(t){this._node=t,this._nodes=[],this._optimized_root_node_names=new Set,this._operation_containers_by_name=new Map,this._node_inputs=[]}nodes(){return this._nodes}process_data(t,e){var n,i,r;if(!e)return;if(!this._node.childrenAllowed()||!this._node.childrenController)return;const{optimized_names:s}=Dl.child_names_by_optimized_state(e);this._nodes=[],this._optimized_root_node_names=new Set;for(let t of s)Dl.is_optimized_root_node(e,t)&&this._optimized_root_node_names.add(t);for(let s of this._optimized_root_node_names){const o=e[s],a=this._node.createNode(Il);if(a){a.setName(s),this._nodes.push(a),(null===(n=o.flags)||void 0===n?void 0:n.display)&&(null===(r=null===(i=a.flags)||void 0===i?void 0:i.display)||void 0===r||r.set(!0));const e=this._create_operation_container(t,a,o,a.name());a.set_output_operation_container(e)}}for(let n of this._nodes){const i=n.output_operation_container();if(i){this._node_inputs=[],this._add_optimized_node_inputs(t,n,e,n.name(),i),n.io.inputs.setCount(this._node_inputs.length);for(let t=0;t<this._node_inputs.length;t++)n.setInput(t,this._node_inputs[t])}}}_add_optimized_node_inputs(t,e,n,i,r){var s;const o=n[i],a=o.inputs;if(a){for(let i of a)if(m.isString(i)){const o=n[i];if(o)if(Dl.is_node_optimized(o)&&!this._optimized_root_node_names.has(i)){let s=this._operation_containers_by_name.get(i);s||(s=this._create_operation_container(t,e,o,i),s&&this._add_optimized_node_inputs(t,e,n,i,s)),r.add_input(s)}else{const t=null===(s=e.parent())||void 0===s?void 0:s.node(i);if(t){this._node_inputs.push(t);const n=this._node_inputs.length-1;e.add_input_config(r,{operation_input_index:r.current_input_index(),node_input_index:n}),r.increment_input_index()}}}1==o.cloned_state_overriden&&r.override_input_clone_state(o.cloned_state_overriden)}}static child_names_by_optimized_state(t){const e=Object.keys(t),n=[],i=[];for(let r of e){const e=t[r];ai.playerMode()&&this.is_node_optimized(e)?n.push(r):i.push(r)}return{optimized_names:n,non_optimized_names:i}}static is_optimized_root_node_generic(t){return 0==t.outputs_count||t.non_optimized_count>0}static is_optimized_root_node(t,e){const n=this.node_outputs(t,e);let i=0;return n.forEach((e=>{const n=t[e];this.is_node_optimized(n)||i++})),this.is_optimized_root_node_generic({outputs_count:n.size,non_optimized_count:i})}static is_optimized_root_node_from_node(t){var e,n,i,r;if(!(null===(n=null===(e=t.flags)||void 0===e?void 0:e.optimize)||void 0===n?void 0:n.active()))return!1;const s=t.io.connections.outputConnections().map((t=>t.node_dest));let o=0;for(let t of s)(null===(r=null===(i=t.flags)||void 0===i?void 0:i.optimize)||void 0===r?void 0:r.active())||o++;return this.is_optimized_root_node_generic({outputs_count:s.length,non_optimized_count:o})}static node_outputs(t,e){const n=Object.keys(t),i=new Set;for(let r of n)if(r!=e){const n=t[r].inputs;if(n)for(let t of n)if(m.isString(t)){t==e&&i.add(r)}}return i}_create_operation_container(t,e,n,i){const r=Pl.non_spare_params_data_value(n.params),s=Dl.operation_type(n),o=this._node.create_operation_container(s,i,r);return o&&(this._operation_containers_by_name.set(i,o),o.path_param_resolve_required()&&(e.add_operation_container_with_path_param_resolve_required(o),t.add_operations_composer_node_with_path_param_resolve_required(e))),o}static operation_type(t){return Dl.is_node_bypassed(t)?\\\\\\\"null\\\\\\\":t.type}static is_node_optimized(t){const e=t.flags;return!(!e||!e.optimize)}static is_node_bypassed(t){const e=t.flags;return!(!e||!e.bypass)}}class kl{constructor(t){this._node=t}process_data(t,e){var n;if(!e)return;if(!this._node.childrenAllowed()||!this._node.childrenController)return;const{optimized_names:i,non_optimized_names:r}=Dl.child_names_by_optimized_state(e),s=[];for(let n of r){const i=e[n],r=i.type.toLowerCase(),o=Pl.non_spare_params_data_value(i.params);try{const t=this._node.createNode(r,o);t&&(t.setName(n),s.push(t))}catch(e){console.error(`error importing node: cannot create with type ${r}`,e);const i=sr.camelCase(r);try{const t=this._node.createNode(i,o);t&&(t.setName(n),s.push(t))}catch(e){const a=`${r}Network`;try{const t=this._node.createNode(a,o);t&&(t.setName(n),s.push(t))}catch(e){const n=`failed to create node with type '${r}', '${i}' or '${a}'`;t.report.addWarning(n),ai.warn(n,e)}}}}if(i.length>0){const i=new Dl(this._node);if(i.process_data(t,e),this._node.childrenController.context==Ki.SOP){const t=Object.keys(e);let r;for(let i of t){(null===(n=e[i].flags)||void 0===n?void 0:n.display)&&(r=i)}if(r){const t=s.map((t=>t.name())),e=i.nodes();for(let n of e)t.push(n.name());if(!t.includes(r)){const t=`node '${`${this._node.path()}/${r}`}' with display flag has been optimized and does not exist in player mode`;console.error(t)}}}}const o=new Map;for(let n of s){if(e[n.name()]){const i=Wl.dispatch_node(n);o.set(n.name(),i),i.process_data(t,e[n.name()])}else ai.warn(`possible import error for node ${n.name()}`)}for(let t of s){const n=o.get(t.name());n&&n.process_inputs_data(e[t.name()])}}}const Bl=[\\\\\\\"overriden_options\\\\\\\",\\\\\\\"type\\\\\\\"];class zl{constructor(t){this._node=t}process_data(t,e){if(this.set_connection_points(e.connection_points),this._node.childrenAllowed()&&this.create_nodes(t,e.nodes),this.set_selection(e.selection),this._node.io.inputs.overrideClonedStateAllowed()){const t=e.cloned_state_overriden;t&&this._node.io.inputs.overrideClonedState(t)}this.set_flags(e),this.set_params(e.params),e.persisted_config&&this.set_persisted_config(e.persisted_config),this.from_data_custom(e)}process_inputs_data(t){const e=t.maxInputsCount;null!=e&&this._node.io.inputs.setCount(1,e),this.setInputs(t.inputs)}process_ui_data(t,e){if(!e)return;if(ai.playerMode())return;const n=this._node.uiData,i=e.pos;if(i){const t=(new d.a).fromArray(i);n.setPosition(t)}const r=e.comment;r&&n.setComment(r),this._node.childrenAllowed()&&this.process_nodes_ui_data(t,e.nodes)}create_nodes(t,e){if(!e)return;new kl(this._node).process_data(t,e)}set_selection(t){if(this._node.childrenAllowed()&&this._node.childrenController&&t&&t.length>0){const e=[];t.forEach((t=>{const n=this._node.node(t);n&&e.push(n)})),this._node.childrenController.selection.set(e)}}set_flags(t){var e,n,i,r,s,o;const a=t.flags;if(a){const t=a.bypass;null!=t&&(null===(n=null===(e=this._node.flags)||void 0===e?void 0:e.bypass)||void 0===n||n.set(t));const l=a.display;null!=l&&(null===(r=null===(i=this._node.flags)||void 0===i?void 0:i.display)||void 0===r||r.set(l));const c=a.optimize;null!=c&&(null===(o=null===(s=this._node.flags)||void 0===s?void 0:s.optimize)||void 0===o||o.set(c))}}set_connection_points(t){t&&(t.in&&this._node.io.saved_connection_points_data.set_in(t.in),t.out&&this._node.io.saved_connection_points_data.set_out(t.out),this._node.io.has_connection_points_controller&&this._node.io.connection_points.update_signature_if_required())}setInputs(t){if(!t)return;let e;for(let n=0;n<t.length;n++)if(e=t[n],e&&this._node.parent())if(m.isString(e)){const t=e,i=this._node.nodeSibbling(t);this._node.setInput(n,i)}else{const t=this._node.nodeSibbling(e.node),n=e.index;this._node.setInput(n,t,e.output)}}process_nodes_ui_data(t,e){if(!e)return;if(ai.playerMode())return;const n=Object.keys(e);for(let i of n){const n=this._node.node(i);if(n){const r=e[i];Wl.dispatch_node(n).process_ui_data(t,r)}}}set_params(t){if(!t)return;const e=Object.keys(t),n={};for(let i of e){const e=t[i],r=e.options;0;const s=e.type;let o,a=!1;this._node.params.has_param(i)&&(o=this._node.params.get(i),(o&&o.type()==s||null==s)&&(a=!0)),a?this._is_param_data_complex(e)?this._process_param_data_complex(i,e):this._process_param_data_simple(i,e):(n.namesToDelete=n.namesToDelete||[],n.namesToDelete.push(i),n.toAdd=n.toAdd||[],n.toAdd.push({name:i,type:s,init_value:e.default_value,raw_input:e.raw_input,options:r}))}const i=n.namesToDelete&&n.namesToDelete.length>0,r=n.toAdd&&n.toAdd.length>0;if(i||r){this._node.params.updateParams(n);for(let e of this._node.params.spare){const n=t[e.name()];!e.parent_param&&n&&(this._is_param_data_complex(n)?this._process_param_data_complex(e.name(),n):this._process_param_data_simple(e.name(),n))}}this._node.params.runOnSceneLoadHooks()}_process_param_data_simple(t,e){var n;null===(n=this._node.params.get(t))||void 0===n||n.set(e)}_process_param_data_complex(t,e){const n=this._node.params.get(t);n&&Wl.dispatch_param(n).process_data(e)}_is_param_data_complex(t){if(m.isString(t)||m.isNumber(t)||m.isArray(t)||m.isBoolean(t))return!1;if(m.isObject(t)){const e=Object.keys(t);for(let t of Bl)if(e.includes(t))return!0}return!1}set_persisted_config(t){this._node.persisted_config&&this._node.persisted_config.load(t)}from_data_custom(t){}}class Ul extends Pl{add_main(t){}}const Gl=/\\\\\\\\n+/g;class Vl extends Pl{add_main(t){let e=t.raw_input;void 0!==e&&(e=e.replace(Gl,\\\\\\\"\\\\n\\\\\\\"),this._param.set(e))}}class Hl extends Pl{add_main(t){const e=t.raw_input;e&&this._param.set(e)}}class jl extends zl{create_nodes(t,e){const n=this._node.polyNodeController;n&&n.createChildNodesFromDefinition()}}class Wl{static dispatch_node(t){return t.polyNodeController?new jl(t):new zl(t)}static dispatch_param(t){return t instanceof ro?new Ul(t):t instanceof bo?new Vl(t):t instanceof xo?new Hl(t):new Pl(t)}}class ql{constructor(t){this._warnings=[]}warnings(){return this._warnings}reset(){this._warnings=[]}addWarning(t){this._warnings.push(t)}}class Xl{constructor(t){this._data=t,this.report=new ql(this)}static async loadData(t){const e=new Xl(t);return await e.scene()}async scene(){const t=new Rl;t.loadingController.markAsLoading();const e=this._data.properties;if(e){const n=e.maxFrame||600;t.timeController.setMaxFrame(n);const i=e.maxFrameLocked;i&&t.timeController.setMaxFrameLocked(i);const r=e.realtimeState;null!=r&&t.timeController.setRealtimeState(r),t.setFrame(e.frame||Ml.START_FRAME),e.mainCameraNodePath&&t.camerasController.setMainCameraNodePath(e.mainCameraNodePath)}t.cooker.block(),this._base_operations_composer_nodes_with_resolve_required=void 0;const n=Wl.dispatch_node(t.root());return this._data.root&&n.process_data(this,this._data.root),this._data.ui&&n.process_ui_data(this,this._data.ui),this._resolve_operation_containers_with_path_param_resolve(),await t.loadingController.markAsLoaded(),t.cooker.unblock(),t}add_operations_composer_node_with_path_param_resolve_required(t){this._base_operations_composer_nodes_with_resolve_required||(this._base_operations_composer_nodes_with_resolve_required=[]),this._base_operations_composer_nodes_with_resolve_required.push(t)}_resolve_operation_containers_with_path_param_resolve(){if(this._base_operations_composer_nodes_with_resolve_required)for(let t of this._base_operations_composer_nodes_with_resolve_required)t.resolve_operation_containers_path_params()}}class Yl{static async importSceneData(t){null==t.editorMode&&(t.editorMode=!1);const{manifest:e,urlPrefix:n}=t,i=Object.keys(e.nodes),r=[];for(let t of i){const i=`${n}/root/${t}.json?t=${e.nodes[t]}`;r.push(i)}const s=[`${n}/root.json?t=${e.root}`,`${n}/properties.json?t=${e.properties}`];if(t.editorMode){const t=Date.now();s.push(`${n}/ui.json?t=${t}`)}for(let t of r)s.push(t);let o=0;const a=s.length,l=s.map((async e=>{const n=await fetch(e);return t.onProgress&&(o++,t.onProgress({count:o,total:a})),n})),c=await Promise.all(l),u=[];for(let t of c)u.push(await t.json());const h={root:u[0],properties:u[1]};let d=2;t.editorMode&&(h.ui=u[2],d+=1);const p={},_=Object.keys(e.nodes);for(let t=0;t<_.length;t++){const e=_[t],n=u[t+d];p[e]=n}return this.assemble(h,_,p)}static async assemble(t,e,n){const i={root:t.root,properties:t.properties,ui:t.ui};for(let t=0;t<e.length;t++){const r=e[t],s=n[r];this.insert_child_data(i.root,r,s)}return i}static insert_child_data(t,e,n){const i=e.split(\\\\\\\"/\\\\\\\");if(1==i.length)t.nodes||(t.nodes={}),t.nodes[e]=n;else{const e=i.shift(),r=i.join(\\\\\\\"/\\\\\\\"),s=t.nodes[e];this.insert_child_data(s,r,n)}}}async function $l(t){const e=t.scenesSrcRoot||\\\\\\\"/src/polygonjs/scenes\\\\\\\",n=t.scenesSrcRoot||\\\\\\\"/public/polygonjs/scenes\\\\\\\",i=t.sceneName;const r=await async function(){const t=await fetch(`${e}/${i}/manifest.json`);return await t.json()}(),s=await async function(t){return await Yl.importSceneData({manifest:t,urlPrefix:`${n}/${i}`})}(r);return await async function(e){const n=new Xl(e),i=await n.scene(),r=i.mainCameraNode();if(!r)return void console.warn(\\\\\\\"no master camera found\\\\\\\");const s=m.isString(t.domElement)?document.getElementById(t.domElement):t.domElement;if(!s)return void console.warn(\\\\\\\"no element to mount the viewer onto\\\\\\\");const o=r.createViewer(s);return{scene:i,cameraNode:r,viewer:o}}(s)}const Jl=\\\\\\\"networks\\\\\\\",Zl=\\\\\\\"misc\\\\\\\",Ql=\\\\\\\"modifiers\\\\\\\",Kl=Jl,tc=\\\\\\\"prop\\\\\\\",ec=\\\\\\\"timing\\\\\\\",nc=\\\\\\\"advanced\\\\\\\",ic=\\\\\\\"inputs\\\\\\\",rc=\\\\\\\"misc\\\\\\\",sc=Jl,oc=\\\\\\\"cameras\\\\\\\",ac=\\\\\\\"inputs\\\\\\\",lc=\\\\\\\"misc\\\\\\\",cc=\\\\\\\"scene\\\\\\\",uc=Jl,hc=\\\\\\\"color\\\\\\\",dc=\\\\\\\"conversion\\\\\\\",pc=\\\\\\\"geometry\\\\\\\",_c=\\\\\\\"globals\\\\\\\",mc=\\\\\\\"lighting\\\\\\\",fc=\\\\\\\"logic\\\\\\\",gc=\\\\\\\"math\\\\\\\",vc=\\\\\\\"physics\\\\\\\",yc=\\\\\\\"quat\\\\\\\",xc=\\\\\\\"trigo\\\\\\\",bc=\\\\\\\"util\\\\\\\",wc=\\\\\\\"globals\\\\\\\",Tc=\\\\\\\"advanced\\\\\\\",Ac=\\\\\\\"lines\\\\\\\",Ec=\\\\\\\"meshes\\\\\\\",Mc=Jl,Sc=\\\\\\\"points\\\\\\\",Cc=\\\\\\\"volumes\\\\\\\",Nc=\\\\\\\"advanced\\\\\\\",Lc=\\\\\\\"audio\\\\\\\",Oc=\\\\\\\"cameras\\\\\\\",Rc=\\\\\\\"geometries\\\\\\\",Pc=\\\\\\\"lights\\\\\\\",Ic=Jl,Fc=\\\\\\\"transform\\\\\\\",Dc=\\\\\\\"css\\\\\\\",kc=Jl,Bc=\\\\\\\"webgl\\\\\\\",zc=\\\\\\\"advanced\\\\\\\",Uc=\\\\\\\"animation\\\\\\\",Gc=\\\\\\\"attributes\\\\\\\",Vc=\\\\\\\"dynamics\\\\\\\",Hc=\\\\\\\"inputs\\\\\\\",jc=\\\\\\\"lights\\\\\\\",Wc=\\\\\\\"misc\\\\\\\",qc=\\\\\\\"modifiers\\\\\\\",Xc=Jl,Yc=\\\\\\\"primitives\\\\\\\",$c=\\\\\\\"render\\\\\\\",Jc=\\\\\\\"blur\\\\\\\",Zc=\\\\\\\"color\\\\\\\",Qc=\\\\\\\"effect\\\\\\\",Kc=\\\\\\\"misc\\\\\\\",tu=Jl,eu=\\\\\\\"input animation clip\\\\\\\",nu=[eu,eu,eu,eu];class iu extends ia{constructor(){super(...arguments),this.flags=new Di(this)}static context(){return Ki.ANIM}static displayedInputNames(){return nu}initializeBaseNode(){this.io.outputs.setHasOneOutput()}setTimelineBuilder(t){this._setContainer(t)}}class ru extends Ai{constructor(t){super(t,\\\\\\\"CopyStamp\\\\\\\"),this._global_index=0}set_global_index(t){this._global_index=t,this.setDirty(),this.removeDirtyState()}value(t){return this._global_index}}class su extends ru{}var ou,au=n(8);!function(t){t.NONE=\\\\\\\"none\\\\\\\",t.POWER1=\\\\\\\"power1\\\\\\\",t.POWER2=\\\\\\\"power2\\\\\\\",t.POWER3=\\\\\\\"power3\\\\\\\",t.POWER4=\\\\\\\"power4\\\\\\\",t.BACK=\\\\\\\"back\\\\\\\",t.ELASTIC=\\\\\\\"elastic\\\\\\\",t.BOUNCE=\\\\\\\"bounce\\\\\\\",t.SLOW=\\\\\\\"slow\\\\\\\",t.STEPS=\\\\\\\"steps\\\\\\\",t.CIRC=\\\\\\\"circ\\\\\\\",t.EXPO=\\\\\\\"expo\\\\\\\",t.SINE=\\\\\\\"sine\\\\\\\"}(ou||(ou={}));const lu=[ou.NONE,ou.POWER1,ou.POWER2,ou.POWER3,ou.POWER4,ou.BACK,ou.ELASTIC,ou.BOUNCE,ou.SLOW,ou.STEPS,ou.CIRC,ou.EXPO,ou.SINE];var cu;!function(t){t.IN=\\\\\\\"in\\\\\\\",t.OUT=\\\\\\\"out\\\\\\\",t.IN_OUT=\\\\\\\"inOut\\\\\\\"}(cu||(cu={}));const uu=[cu.IN,cu.OUT,cu.IN_OUT];class hu{constructor(){this._debug=!1}setName(t){this._property_name=t}setTargetValue(t){this._target_value=t}name(){return this._property_name}targetValue(){return this._target_value}setDebug(t){this._debug=t}_printDebug(t){this._debug&&console.log(t)}clone(){const t=new hu;if(this._property_name&&t.setName(this._property_name),null!=this._target_value){const e=m.isNumber(this._target_value)?this._target_value:this._target_value.clone();t.setTargetValue(e)}return t}addToTimeline(t,e,n){const i=n.objects();i&&this._populateWithObjects(i,t,e);const r=n.node();r&&this._populateWithNode(r,t,e)}_populateWithObjects(t,e,n){if(this._printDebug([\\\\\\\"_populateWithObjects\\\\\\\",t]),!this._property_name)return void ai.warn(\\\\\\\"no property name given\\\\\\\");if(null==this._target_value)return void ai.warn(\\\\\\\"no target value given\\\\\\\");const i=e.operation(),r=e.updateCallback();for(let s of t){const t=this._sceneGraphProps(s,this._property_name);if(t){let{target_property:o,to_target:a,property_names:l}=t;const c=this._commonVars(e);if(r&&r.updateMatrix()){const t=s.matrixAutoUpdate;c.onStart=()=>{s.matrixAutoUpdate=!0},c.onComplete=()=>{s.matrixAutoUpdate=t,s.matrixAutoUpdate||s.updateMatrix()}}if(o instanceof au.a&&this._target_value instanceof au.a){const t={value:0},e=o,n=(new au.a).copy(o),i=this._target_value;c.onUpdate=()=>{e.slerpQuaternions(n,i,t.value)},a=t,c.value=1}if(m.isNumber(this._target_value)){if(m.isNumber(o))for(let t of l)c[t]=this.withOp(o,this._target_value,i)}else if(!m.isNumber(o))for(let t of l)c[t]=this.withOp(o[t],this._target_value[t],i);a&&this._startTimeline(e,n,c,a)}}}_sceneGraphProps(t,e){const n=e.split(\\\\\\\".\\\\\\\");if(!(n.length>1)){const n=t[e];let i=null;const r=[];return m.isNumber(n)?(i=t,r.push(e)):(i=n,this._target_value instanceof d.a&&r.push(\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\"),this._target_value instanceof p.a&&r.push(\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\"),this._target_value instanceof _.a&&r.push(\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\",\\\\\\\"w\\\\\\\"),this._target_value,au.a),{target_property:n,to_target:i,property_names:r}}{const e=t[n.shift()];if(e){const t=n.join(\\\\\\\".\\\\\\\");return this._sceneGraphProps(e,t)}}}_populateWithNode(t,e,n){this._printDebug([\\\\\\\"_populateWithNode\\\\\\\",t]);const i=t.p[this._property_name];this._printDebug([\\\\\\\"target_param\\\\\\\",i]),i?i&&this._populateVarsForParam(i,e,n):ai.warn(`${this._property_name} not found on node ${t.path()}`)}_populateVarsForParam(t,e,n){switch(this._printDebug([\\\\\\\"_populateVarsForParam\\\\\\\",t]),t.type()){case Es.INTEGER:return this._populateVarsForParamInteger(t,e,n);case Es.FLOAT:return this._populateVarsForParamFloat(t,e,n);case Es.VECTOR2:return this._populateVarsForParamVector2(t,e,n);case Es.VECTOR3:return this._populateVarsForParamVector3(t,e,n);case Es.VECTOR4:return this._populateVarsForParamVector4(t,e,n)}this._printDebug(`param type cannot be animated (yet): '${t.type()}' '${t.path()}'`)}_populateVarsForParamInteger(t,e,n){if(!m.isNumber(this._target_value))return void ai.warn(\\\\\\\"value is not a numbber\\\\\\\",this._target_value);const i=this._commonVars(e),r={num:t.value};i.onUpdate=()=>{t.set(r.num)};const s=e.operation();i.num=this.withOp(t.value,this._target_value,s),this._startTimeline(e,n,i,r)}_populateVarsForParamFloat(t,e,n){if(!m.isNumber(this._target_value))return void ai.warn(\\\\\\\"value is not a numbber\\\\\\\",this._target_value);const i=this._commonVars(e),r={num:t.value};i.onUpdate=()=>{t.set(r.num)};const s=e.operation();i.num=this.withOp(t.value,this._target_value,s),this._startTimeline(e,n,i,r)}_populateVarsForParamVector2(t,e,n){if(!(this._target_value instanceof d.a))return;const i=this._commonVars(e),r=t.value.clone(),s=[0,0];i.onUpdate=()=>{r.toArray(s),t.set(s)};const o=e.operation();i.x=this.withOp(t.value.x,this._target_value.x,o),i.y=this.withOp(t.value.y,this._target_value.y,o),this._startTimeline(e,n,i,r)}_populateVarsForParamVector3(t,e,n){if(!(this._target_value instanceof p.a))return;const i=this._commonVars(e),r=t.value.clone(),s=[0,0,0];i.onUpdate=()=>{r.toArray(s),t.set(s)};const o=e.operation();i.x=this.withOp(t.value.x,this._target_value.x,o),i.y=this.withOp(t.value.y,this._target_value.y,o),i.z=this.withOp(t.value.z,this._target_value.z,o),this._startTimeline(e,n,i,r)}_populateVarsForParamVector4(t,e,n){if(!(this._target_value instanceof _.a))return;const i=this._commonVars(e),r=t.value.clone(),s=[0,0,0,0];i.onUpdate=()=>{r.toArray(s),t.set(s)};const o=e.operation();i.x=this.withOp(t.value.x,this._target_value.x,o),i.y=this.withOp(t.value.y,this._target_value.y,o),i.z=this.withOp(t.value.z,this._target_value.z,o),i.w=this.withOp(t.value.w,this._target_value.w,o),this._startTimeline(e,n,i,r)}withOp(t,e,n){switch(n){case N_.SET:return e;case N_.ADD:return t+e;case N_.SUBSTRACT:return t-e}ar.unreachable(n)}_commonVars(t){const e={duration:t.duration()},n=t.easing()||ou.NONE;n&&(e.ease=n);const i=t.delay();null!=i&&(e.delay=i);const r=t.repeatParams();return r&&(e.repeat=r.count,e.repeatDelay=r.delay,e.yoyo=r.yoyo),e}_startTimeline(t,e,n,i){const r=t.position(),s=r?r.toParameter():void 0;e.to(i,n,s)}}function du(t){if(void 0===t)throw new ReferenceError(\\\\\\\"this hasn't been initialised - super() hasn't been called\\\\\\\");return t}function pu(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e}var _u,mu,fu,gu,vu,yu,xu,bu,wu,Tu,Au,Eu,Mu,Su={autoSleep:120,force3D:\\\\\\\"auto\\\\\\\",nullTargetWarn:1,units:{lineHeight:\\\\\\\"\\\\\\\"}},Cu={duration:.5,overwrite:!1,delay:0},Nu=1e8,Lu=1e-8,Ou=2*Math.PI,Ru=Ou/4,Pu=0,Iu=Math.sqrt,Fu=Math.cos,Du=Math.sin,ku=function(t){return\\\\\\\"string\\\\\\\"==typeof t},Bu=function(t){return\\\\\\\"function\\\\\\\"==typeof t},zu=function(t){return\\\\\\\"number\\\\\\\"==typeof t},Uu=function(t){return void 0===t},Gu=function(t){return\\\\\\\"object\\\\\\\"==typeof t},Vu=function(t){return!1!==t},Hu=function(){return\\\\\\\"undefined\\\\\\\"!=typeof window},ju=function(t){return Bu(t)||ku(t)},Wu=\\\\\\\"function\\\\\\\"==typeof ArrayBuffer&&ArrayBuffer.isView||function(){},qu=Array.isArray,Xu=/(?:-?\\\\.?\\\\d|\\\\.)+/gi,Yu=/[-+=.]*\\\\d+[.e\\\\-+]*\\\\d*[e\\\\-+]*\\\\d*/g,$u=/[-+=.]*\\\\d+[.e-]*\\\\d*[a-z%]*/g,Ju=/[-+=.]*\\\\d+\\\\.?\\\\d*(?:e-|e\\\\+)?\\\\d*/gi,Zu=/[+-]=-?[.\\\\d]+/,Qu=/[#\\\\-+.]*\\\\b[a-z\\\\d-=+%.]+/gi,Ku=/[\\\\d.+\\\\-=]+(?:e[-+]\\\\d*)*/i,th={},eh={},nh=function(t){return(eh=Ch(t,th))&&pp},ih=function(t,e){return console.warn(\\\\\\\"Invalid property\\\\\\\",t,\\\\\\\"set to\\\\\\\",e,\\\\\\\"Missing plugin? gsap.registerPlugin()\\\\\\\")},rh=function(t,e){return!e&&console.warn(t)},sh=function(t,e){return t&&(th[t]=e)&&eh&&(eh[t]=e)||th},oh=function(){return 0},ah={},lh=[],ch={},uh={},hh={},dh=30,ph=[],_h=\\\\\\\"\\\\\\\",mh=function(t){var e,n,i=t[0];if(Gu(i)||Bu(i)||(t=[t]),!(e=(i._gsap||{}).harness)){for(n=ph.length;n--&&!ph[n].targetTest(i););e=ph[n]}for(n=t.length;n--;)t[n]&&(t[n]._gsap||(t[n]._gsap=new Bd(t[n],e)))||t.splice(n,1);return t},fh=function(t){return t._gsap||mh(id(t))[0]._gsap},gh=function(t,e,n){return(n=t[e])&&Bu(n)?t[e]():Uu(n)&&t.getAttribute&&t.getAttribute(e)||n},vh=function(t,e){return(t=t.split(\\\\\\\",\\\\\\\")).forEach(e)||t},yh=function(t){return Math.round(1e5*t)/1e5||0},xh=function(t,e){for(var n=e.length,i=0;t.indexOf(e[i])<0&&++i<n;);return i<n},bh=function(t,e,n){var i,r=zu(t[1]),s=(r?2:1)+(e<2?0:1),o=t[s];if(r&&(o.duration=t[1]),o.parent=n,e){for(i=o;n&&!(\\\\\\\"immediateRender\\\\\\\"in i);)i=n.vars.defaults||{},n=Vu(n.vars.inherit)&&n.parent;o.immediateRender=Vu(i.immediateRender),e<2?o.runBackwards=1:o.startAt=t[s-1]}return o},wh=function(){var t,e,n=lh.length,i=lh.slice(0);for(ch={},lh.length=0,t=0;t<n;t++)(e=i[t])&&e._lazy&&(e.render(e._lazy[0],e._lazy[1],!0)._lazy=0)},Th=function(t,e,n,i){lh.length&&wh(),t.render(e,n,i),lh.length&&wh()},Ah=function(t){var e=parseFloat(t);return(e||0===e)&&(t+\\\\\\\"\\\\\\\").match(Qu).length<2?e:ku(t)?t.trim():t},Eh=function(t){return t},Mh=function(t,e){for(var n in e)n in t||(t[n]=e[n]);return t},Sh=function(t,e){for(var n in e)n in t||\\\\\\\"duration\\\\\\\"===n||\\\\\\\"ease\\\\\\\"===n||(t[n]=e[n])},Ch=function(t,e){for(var n in e)t[n]=e[n];return t},Nh=function t(e,n){for(var i in n)\\\\\\\"__proto__\\\\\\\"!==i&&\\\\\\\"constructor\\\\\\\"!==i&&\\\\\\\"prototype\\\\\\\"!==i&&(e[i]=Gu(n[i])?t(e[i]||(e[i]={}),n[i]):n[i]);return e},Lh=function(t,e){var n,i={};for(n in t)n in e||(i[n]=t[n]);return i},Oh=function(t){var e=t.parent||mu,n=t.keyframes?Sh:Mh;if(Vu(t.inherit))for(;e;)n(t,e.vars.defaults),e=e.parent||e._dp;return t},Rh=function(t,e,n,i){void 0===n&&(n=\\\\\\\"_first\\\\\\\"),void 0===i&&(i=\\\\\\\"_last\\\\\\\");var r=e._prev,s=e._next;r?r._next=s:t[n]===e&&(t[n]=s),s?s._prev=r:t[i]===e&&(t[i]=r),e._next=e._prev=e.parent=null},Ph=function(t,e){t.parent&&(!e||t.parent.autoRemoveChildren)&&t.parent.remove(t),t._act=0},Ih=function(t,e){if(t&&(!e||e._end>t._dur||e._start<0))for(var n=t;n;)n._dirty=1,n=n.parent;return t},Fh=function(t){for(var e=t.parent;e&&e.parent;)e._dirty=1,e.totalDuration(),e=e.parent;return t},Dh=function t(e){return!e||e._ts&&t(e.parent)},kh=function(t){return t._repeat?Bh(t._tTime,t=t.duration()+t._rDelay)*t:0},Bh=function(t,e){var n=Math.floor(t/=e);return t&&n===t?n-1:n},zh=function(t,e){return(t-e._start)*e._ts+(e._ts>=0?0:e._dirty?e.totalDuration():e._tDur)},Uh=function(t){return t._end=yh(t._start+(t._tDur/Math.abs(t._ts||t._rts||Lu)||0))},Gh=function(t,e){var n=t._dp;return n&&n.smoothChildTiming&&t._ts&&(t._start=yh(n._time-(t._ts>0?e/t._ts:((t._dirty?t.totalDuration():t._tDur)-e)/-t._ts)),Uh(t),n._dirty||Ih(n,t)),t},Vh=function(t,e){var n;if((e._time||e._initted&&!e._dur)&&(n=zh(t.rawTime(),e),(!e._dur||Qh(0,e.totalDuration(),n)-e._tTime>Lu)&&e.render(n,!0)),Ih(t,e)._dp&&t._initted&&t._time>=t._dur&&t._ts){if(t._dur<t.duration())for(n=t;n._dp;)n.rawTime()>=0&&n.totalTime(n._tTime),n=n._dp;t._zTime=-1e-8}},Hh=function(t,e,n,i){return e.parent&&Ph(e),e._start=yh(n+e._delay),e._end=yh(e._start+(e.totalDuration()/Math.abs(e.timeScale())||0)),function(t,e,n,i,r){void 0===n&&(n=\\\\\\\"_first\\\\\\\"),void 0===i&&(i=\\\\\\\"_last\\\\\\\");var s,o=t[i];if(r)for(s=e[r];o&&o[r]>s;)o=o._prev;o?(e._next=o._next,o._next=e):(e._next=t[n],t[n]=e),e._next?e._next._prev=e:t[i]=e,e._prev=o,e.parent=e._dp=t}(t,e,\\\\\\\"_first\\\\\\\",\\\\\\\"_last\\\\\\\",t._sort?\\\\\\\"_start\\\\\\\":0),t._recent=e,i||Vh(t,e),t},jh=function(t,e){return(th.ScrollTrigger||ih(\\\\\\\"scrollTrigger\\\\\\\",e))&&th.ScrollTrigger.create(e,t)},Wh=function(t,e,n,i){return Wd(t,e),t._initted?!n&&t._pt&&(t._dur&&!1!==t.vars.lazy||!t._dur&&t.vars.lazy)&&xu!==Ed.frame?(lh.push(t),t._lazy=[e,i],1):void 0:1},qh=function t(e){var n=e.parent;return n&&n._ts&&n._initted&&!n._lock&&(n.rawTime()<0||t(n))},Xh=function(t,e,n,i){var r=t._repeat,s=yh(e)||0,o=t._tTime/t._tDur;return o&&!i&&(t._time*=s/t._dur),t._dur=s,t._tDur=r?r<0?1e10:yh(s*(r+1)+t._rDelay*r):s,o&&!i?Gh(t,t._tTime=t._tDur*o):t.parent&&Uh(t),n||Ih(t.parent,t),t},Yh=function(t){return t instanceof Ud?Ih(t):Xh(t,t._dur)},$h={_start:0,endTime:oh},Jh=function t(e,n){var i,r,s=e.labels,o=e._recent||$h,a=e.duration()>=Nu?o.endTime(!1):e._dur;return ku(n)&&(isNaN(n)||n in s)?\\\\\\\"<\\\\\\\"===(i=n.charAt(0))||\\\\\\\">\\\\\\\"===i?(\\\\\\\"<\\\\\\\"===i?o._start:o.endTime(o._repeat>=0))+(parseFloat(n.substr(1))||0):(i=n.indexOf(\\\\\\\"=\\\\\\\"))<0?(n in s||(s[n]=a),s[n]):(r=+(n.charAt(i-1)+n.substr(i+1)),i>1?t(e,n.substr(0,i-1))+r:a+r):null==n?a:+n},Zh=function(t,e){return t||0===t?e(t):e},Qh=function(t,e,n){return n<t?t:n>e?e:n},Kh=function(t){if(\\\\\\\"string\\\\\\\"!=typeof t)return\\\\\\\"\\\\\\\";var e=Ku.exec(t);return e?t.substr(e.index+e[0].length):\\\\\\\"\\\\\\\"},td=[].slice,ed=function(t,e){return t&&Gu(t)&&\\\\\\\"length\\\\\\\"in t&&(!e&&!t.length||t.length-1 in t&&Gu(t[0]))&&!t.nodeType&&t!==fu},nd=function(t,e,n){return void 0===n&&(n=[]),t.forEach((function(t){var i;return ku(t)&&!e||ed(t,1)?(i=n).push.apply(i,id(t)):n.push(t)}))||n},id=function(t,e){return!ku(t)||e||!gu&&Md()?qu(t)?nd(t,e):ed(t)?td.call(t,0):t?[t]:[]:td.call(vu.querySelectorAll(t),0)},rd=function(t){return t.sort((function(){return.5-Math.random()}))},sd=function(t){if(Bu(t))return t;var e=Gu(t)?t:{each:t},n=Pd(e.ease),i=e.from||0,r=parseFloat(e.base)||0,s={},o=i>0&&i<1,a=isNaN(i)||o,l=e.axis,c=i,u=i;return ku(i)?c=u={center:.5,edges:.5,end:1}[i]||0:!o&&a&&(c=i[0],u=i[1]),function(t,o,h){var d,p,_,m,f,g,v,y,x,b=(h||e).length,w=s[b];if(!w){if(!(x=\\\\\\\"auto\\\\\\\"===e.grid?0:(e.grid||[1,Nu])[1])){for(v=-Nu;v<(v=h[x++].getBoundingClientRect().left)&&x<b;);x--}for(w=s[b]=[],d=a?Math.min(x,b)*c-.5:i%x,p=a?b*u/x-.5:i/x|0,v=0,y=Nu,g=0;g<b;g++)_=g%x-d,m=p-(g/x|0),w[g]=f=l?Math.abs(\\\\\\\"y\\\\\\\"===l?m:_):Iu(_*_+m*m),f>v&&(v=f),f<y&&(y=f);\\\\\\\"random\\\\\\\"===i&&rd(w),w.max=v-y,w.min=y,w.v=b=(parseFloat(e.amount)||parseFloat(e.each)*(x>b?b-1:l?\\\\\\\"y\\\\\\\"===l?b/x:x:Math.max(x,b/x))||0)*(\\\\\\\"edges\\\\\\\"===i?-1:1),w.b=b<0?r-b:r,w.u=Kh(e.amount||e.each)||0,n=n&&b<0?Od(n):n}return b=(w[t]-w.min)/w.max||0,yh(w.b+(n?n(b):b)*w.v)+w.u}},od=function(t){var e=t<1?Math.pow(10,(t+\\\\\\\"\\\\\\\").length-2):1;return function(n){var i=Math.round(parseFloat(n)/t)*t*e;return(i-i%1)/e+(zu(n)?0:Kh(n))}},ad=function(t,e){var n,i,r=qu(t);return!r&&Gu(t)&&(n=r=t.radius||Nu,t.values?(t=id(t.values),(i=!zu(t[0]))&&(n*=n)):t=od(t.increment)),Zh(e,r?Bu(t)?function(e){return i=t(e),Math.abs(i-e)<=n?i:e}:function(e){for(var r,s,o=parseFloat(i?e.x:e),a=parseFloat(i?e.y:0),l=Nu,c=0,u=t.length;u--;)(r=i?(r=t[u].x-o)*r+(s=t[u].y-a)*s:Math.abs(t[u]-o))<l&&(l=r,c=u);return c=!n||l<=n?t[c]:e,i||c===e||zu(e)?c:c+Kh(e)}:od(t))},ld=function(t,e,n,i){return Zh(qu(t)?!e:!0===n?!!(n=0):!i,(function(){return qu(t)?t[~~(Math.random()*t.length)]:(n=n||1e-5)&&(i=n<1?Math.pow(10,(n+\\\\\\\"\\\\\\\").length-2):1)&&Math.floor(Math.round((t-n/2+Math.random()*(e-t+.99*n))/n)*n*i)/i}))},cd=function(t,e,n){return Zh(n,(function(n){return t[~~e(n)]}))},ud=function(t){for(var e,n,i,r,s=0,o=\\\\\\\"\\\\\\\";~(e=t.indexOf(\\\\\\\"random(\\\\\\\",s));)i=t.indexOf(\\\\\\\")\\\\\\\",e),r=\\\\\\\"[\\\\\\\"===t.charAt(e+7),n=t.substr(e+7,i-e-7).match(r?Qu:Xu),o+=t.substr(s,e-s)+ld(r?n:+n[0],r?0:+n[1],+n[2]||1e-5),s=i+1;return o+t.substr(s,t.length-s)},hd=function(t,e,n,i,r){var s=e-t,o=i-n;return Zh(r,(function(e){return n+((e-t)/s*o||0)}))},dd=function(t,e,n){var i,r,s,o=t.labels,a=Nu;for(i in o)(r=o[i]-e)<0==!!n&&r&&a>(r=Math.abs(r))&&(s=i,a=r);return s},pd=function(t,e,n){var i,r,s=t.vars,o=s[e];if(o)return i=s[e+\\\\\\\"Params\\\\\\\"],r=s.callbackScope||t,n&&lh.length&&wh(),i?o.apply(r,i):o.call(r)},_d=function(t){return Ph(t),t.scrollTrigger&&t.scrollTrigger.kill(!1),t.progress()<1&&pd(t,\\\\\\\"onInterrupt\\\\\\\"),t},md=function(t){var e=(t=!t.name&&t.default||t).name,n=Bu(t),i=e&&!n&&t.init?function(){this._props=[]}:t,r={init:oh,render:rp,add:Hd,kill:op,modifier:sp,rawVars:0},s={targetTest:0,get:0,getSetter:tp,aliases:{},register:0};if(Md(),t!==i){if(uh[e])return;Mh(i,Mh(Lh(t,r),s)),Ch(i.prototype,Ch(r,Lh(t,s))),uh[i.prop=e]=i,t.targetTest&&(ph.push(i),ah[e]=1),e=(\\\\\\\"css\\\\\\\"===e?\\\\\\\"CSS\\\\\\\":e.charAt(0).toUpperCase()+e.substr(1))+\\\\\\\"Plugin\\\\\\\"}sh(e,i),t.register&&t.register(pp,i,cp)},fd=255,gd={aqua:[0,fd,fd],lime:[0,fd,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,fd],navy:[0,0,128],white:[fd,fd,fd],olive:[128,128,0],yellow:[fd,fd,0],orange:[fd,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[fd,0,0],pink:[fd,192,203],cyan:[0,fd,fd],transparent:[fd,fd,fd,0]},vd=function(t,e,n){return(6*(t=t<0?t+1:t>1?t-1:t)<1?e+(n-e)*t*6:t<.5?n:3*t<2?e+(n-e)*(2/3-t)*6:e)*fd+.5|0},yd=function(t,e,n){var i,r,s,o,a,l,c,u,h,d,p=t?zu(t)?[t>>16,t>>8&fd,t&fd]:0:gd.black;if(!p){if(\\\\\\\",\\\\\\\"===t.substr(-1)&&(t=t.substr(0,t.length-1)),gd[t])p=gd[t];else if(\\\\\\\"#\\\\\\\"===t.charAt(0)){if(t.length<6&&(i=t.charAt(1),r=t.charAt(2),s=t.charAt(3),t=\\\\\\\"#\\\\\\\"+i+i+r+r+s+s+(5===t.length?t.charAt(4)+t.charAt(4):\\\\\\\"\\\\\\\")),9===t.length)return[(p=parseInt(t.substr(1,6),16))>>16,p>>8&fd,p&fd,parseInt(t.substr(7),16)/255];p=[(t=parseInt(t.substr(1),16))>>16,t>>8&fd,t&fd]}else if(\\\\\\\"hsl\\\\\\\"===t.substr(0,3))if(p=d=t.match(Xu),e){if(~t.indexOf(\\\\\\\"=\\\\\\\"))return p=t.match(Yu),n&&p.length<4&&(p[3]=1),p}else o=+p[0]%360/360,a=+p[1]/100,i=2*(l=+p[2]/100)-(r=l<=.5?l*(a+1):l+a-l*a),p.length>3&&(p[3]*=1),p[0]=vd(o+1/3,i,r),p[1]=vd(o,i,r),p[2]=vd(o-1/3,i,r);else p=t.match(Xu)||gd.transparent;p=p.map(Number)}return e&&!d&&(i=p[0]/fd,r=p[1]/fd,s=p[2]/fd,l=((c=Math.max(i,r,s))+(u=Math.min(i,r,s)))/2,c===u?o=a=0:(h=c-u,a=l>.5?h/(2-c-u):h/(c+u),o=c===i?(r-s)/h+(r<s?6:0):c===r?(s-i)/h+2:(i-r)/h+4,o*=60),p[0]=~~(o+.5),p[1]=~~(100*a+.5),p[2]=~~(100*l+.5)),n&&p.length<4&&(p[3]=1),p},xd=function(t){var e=[],n=[],i=-1;return t.split(wd).forEach((function(t){var r=t.match($u)||[];e.push.apply(e,r),n.push(i+=r.length+1)})),e.c=n,e},bd=function(t,e,n){var i,r,s,o,a=\\\\\\\"\\\\\\\",l=(t+a).match(wd),c=e?\\\\\\\"hsla(\\\\\\\":\\\\\\\"rgba(\\\\\\\",u=0;if(!l)return t;if(l=l.map((function(t){return(t=yd(t,e,1))&&c+(e?t[0]+\\\\\\\",\\\\\\\"+t[1]+\\\\\\\"%,\\\\\\\"+t[2]+\\\\\\\"%,\\\\\\\"+t[3]:t.join(\\\\\\\",\\\\\\\"))+\\\\\\\")\\\\\\\"})),n&&(s=xd(t),(i=n.c).join(a)!==s.c.join(a)))for(o=(r=t.replace(wd,\\\\\\\"1\\\\\\\").split($u)).length-1;u<o;u++)a+=r[u]+(~i.indexOf(u)?l.shift()||c+\\\\\\\"0,0,0,0)\\\\\\\":(s.length?s:l.length?l:n).shift());if(!r)for(o=(r=t.split(wd)).length-1;u<o;u++)a+=r[u]+l[u];return a+r[o]},wd=function(){var t,e=\\\\\\\"(?:\\\\\\\\b(?:(?:rgb|rgba|hsl|hsla)\\\\\\\\(.+?\\\\\\\\))|\\\\\\\\B#(?:[0-9a-f]{3,4}){1,2}\\\\\\\\b\\\\\\\";for(t in gd)e+=\\\\\\\"|\\\\\\\"+t+\\\\\\\"\\\\\\\\b\\\\\\\";return new RegExp(e+\\\\\\\")\\\\\\\",\\\\\\\"gi\\\\\\\")}(),Td=/hsl[a]?\\\\(/,Ad=function(t){var e,n=t.join(\\\\\\\" \\\\\\\");if(wd.lastIndex=0,wd.test(n))return e=Td.test(n),t[1]=bd(t[1],e),t[0]=bd(t[0],e,xd(t[1])),!0},Ed=function(){var t,e,n,i,r,s,o=Date.now,a=500,l=33,c=o(),u=c,h=1e3/240,d=h,p=[],_=function n(_){var m,f,g,v,y=o()-u,x=!0===_;if(y>a&&(c+=y-l),((m=(g=(u+=y)-c)-d)>0||x)&&(v=++i.frame,r=g-1e3*i.time,i.time=g/=1e3,d+=m+(m>=h?4:h-m),f=1),x||(t=e(n)),f)for(s=0;s<p.length;s++)p[s](g,r,v,_)};return i={time:0,frame:0,tick:function(){_(!0)},deltaRatio:function(t){return r/(1e3/(t||60))},wake:function(){yu&&(!gu&&Hu()&&(fu=gu=window,vu=fu.document||{},th.gsap=pp,(fu.gsapVersions||(fu.gsapVersions=[])).push(pp.version),nh(eh||fu.GreenSockGlobals||!fu.gsap&&fu||{}),n=fu.requestAnimationFrame),t&&i.sleep(),e=n||function(t){return setTimeout(t,d-1e3*i.time+1|0)},wu=1,_(2))},sleep:function(){(n?fu.cancelAnimationFrame:clearTimeout)(t),wu=0,e=oh},lagSmoothing:function(t,e){a=t||1e8,l=Math.min(e,a,0)},fps:function(t){h=1e3/(t||240),d=1e3*i.time+h},add:function(t){p.indexOf(t)<0&&p.push(t),Md()},remove:function(t){var e;~(e=p.indexOf(t))&&p.splice(e,1)&&s>=e&&s--},_listeners:p}}(),Md=function(){return!wu&&Ed.wake()},Sd={},Cd=/^[\\\\d.\\\\-M][\\\\d.\\\\-,\\\\s]/,Nd=/[\\\\\\\"']/g,Ld=function(t){for(var e,n,i,r={},s=t.substr(1,t.length-3).split(\\\\\\\":\\\\\\\"),o=s[0],a=1,l=s.length;a<l;a++)n=s[a],e=a!==l-1?n.lastIndexOf(\\\\\\\",\\\\\\\"):n.length,i=n.substr(0,e),r[o]=isNaN(i)?i.replace(Nd,\\\\\\\"\\\\\\\").trim():+i,o=n.substr(e+1).trim();return r},Od=function(t){return function(e){return 1-t(1-e)}},Rd=function t(e,n){for(var i,r=e._first;r;)r instanceof Ud?t(r,n):!r.vars.yoyoEase||r._yoyo&&r._repeat||r._yoyo===n||(r.timeline?t(r.timeline,n):(i=r._ease,r._ease=r._yEase,r._yEase=i,r._yoyo=n)),r=r._next},Pd=function(t,e){return t&&(Bu(t)?t:Sd[t]||function(t){var e,n,i,r,s=(t+\\\\\\\"\\\\\\\").split(\\\\\\\"(\\\\\\\"),o=Sd[s[0]];return o&&s.length>1&&o.config?o.config.apply(null,~t.indexOf(\\\\\\\"{\\\\\\\")?[Ld(s[1])]:(e=t,n=e.indexOf(\\\\\\\"(\\\\\\\")+1,i=e.indexOf(\\\\\\\")\\\\\\\"),r=e.indexOf(\\\\\\\"(\\\\\\\",n),e.substring(n,~r&&r<i?e.indexOf(\\\\\\\")\\\\\\\",i+1):i)).split(\\\\\\\",\\\\\\\").map(Ah)):Sd._CE&&Cd.test(t)?Sd._CE(\\\\\\\"\\\\\\\",t):o}(t))||e},Id=function(t,e,n,i){void 0===n&&(n=function(t){return 1-e(1-t)}),void 0===i&&(i=function(t){return t<.5?e(2*t)/2:1-e(2*(1-t))/2});var r,s={easeIn:e,easeOut:n,easeInOut:i};return vh(t,(function(t){for(var e in Sd[t]=th[t]=s,Sd[r=t.toLowerCase()]=n,s)Sd[r+(\\\\\\\"easeIn\\\\\\\"===e?\\\\\\\".in\\\\\\\":\\\\\\\"easeOut\\\\\\\"===e?\\\\\\\".out\\\\\\\":\\\\\\\".inOut\\\\\\\")]=Sd[t+\\\\\\\".\\\\\\\"+e]=s[e]})),s},Fd=function(t){return function(e){return e<.5?(1-t(1-2*e))/2:.5+t(2*(e-.5))/2}},Dd=function t(e,n,i){var r=n>=1?n:1,s=(i||(e?.3:.45))/(n<1?n:1),o=s/Ou*(Math.asin(1/r)||0),a=function(t){return 1===t?1:r*Math.pow(2,-10*t)*Du((t-o)*s)+1},l=\\\\\\\"out\\\\\\\"===e?a:\\\\\\\"in\\\\\\\"===e?function(t){return 1-a(1-t)}:Fd(a);return s=Ou/s,l.config=function(n,i){return t(e,n,i)},l},kd=function t(e,n){void 0===n&&(n=1.70158);var i=function(t){return t?--t*t*((n+1)*t+n)+1:0},r=\\\\\\\"out\\\\\\\"===e?i:\\\\\\\"in\\\\\\\"===e?function(t){return 1-i(1-t)}:Fd(i);return r.config=function(n){return t(e,n)},r};vh(\\\\\\\"Linear,Quad,Cubic,Quart,Quint,Strong\\\\\\\",(function(t,e){var n=e<5?e+1:e;Id(t+\\\\\\\",Power\\\\\\\"+(n-1),e?function(t){return Math.pow(t,n)}:function(t){return t},(function(t){return 1-Math.pow(1-t,n)}),(function(t){return t<.5?Math.pow(2*t,n)/2:1-Math.pow(2*(1-t),n)/2}))})),Sd.Linear.easeNone=Sd.none=Sd.Linear.easeIn,Id(\\\\\\\"Elastic\\\\\\\",Dd(\\\\\\\"in\\\\\\\"),Dd(\\\\\\\"out\\\\\\\"),Dd()),Tu=7.5625,Eu=1/(Au=2.75),Id(\\\\\\\"Bounce\\\\\\\",(function(t){return 1-Mu(1-t)}),Mu=function(t){return t<Eu?Tu*t*t:t<.7272727272727273?Tu*Math.pow(t-1.5/Au,2)+.75:t<.9090909090909092?Tu*(t-=2.25/Au)*t+.9375:Tu*Math.pow(t-2.625/Au,2)+.984375}),Id(\\\\\\\"Expo\\\\\\\",(function(t){return t?Math.pow(2,10*(t-1)):0})),Id(\\\\\\\"Circ\\\\\\\",(function(t){return-(Iu(1-t*t)-1)})),Id(\\\\\\\"Sine\\\\\\\",(function(t){return 1===t?1:1-Fu(t*Ru)})),Id(\\\\\\\"Back\\\\\\\",kd(\\\\\\\"in\\\\\\\"),kd(\\\\\\\"out\\\\\\\"),kd()),Sd.SteppedEase=Sd.steps=th.SteppedEase={config:function(t,e){void 0===t&&(t=1);var n=1/t,i=t+(e?0:1),r=e?1:0;return function(t){return((i*Qh(0,.99999999,t)|0)+r)*n}}},Cu.ease=Sd[\\\\\\\"quad.out\\\\\\\"],vh(\\\\\\\"onComplete,onUpdate,onStart,onRepeat,onReverseComplete,onInterrupt\\\\\\\",(function(t){return _h+=t+\\\\\\\",\\\\\\\"+t+\\\\\\\"Params,\\\\\\\"}));var Bd=function(t,e){this.id=Pu++,t._gsap=this,this.target=t,this.harness=e,this.get=e?e.get:gh,this.set=e?e.getSetter:tp},zd=function(){function t(t,e){var n=t.parent||mu;this.vars=t,this._delay=+t.delay||0,(this._repeat=t.repeat===1/0?-2:t.repeat||0)&&(this._rDelay=t.repeatDelay||0,this._yoyo=!!t.yoyo||!!t.yoyoEase),this._ts=1,Xh(this,+t.duration,1,1),this.data=t.data,wu||Ed.wake(),n&&Hh(n,this,e||0===e?e:n._time,1),t.reversed&&this.reverse(),t.paused&&this.paused(!0)}var e=t.prototype;return e.delay=function(t){return t||0===t?(this.parent&&this.parent.smoothChildTiming&&this.startTime(this._start+t-this._delay),this._delay=t,this):this._delay},e.duration=function(t){return arguments.length?this.totalDuration(this._repeat>0?t+(t+this._rDelay)*this._repeat:t):this.totalDuration()&&this._dur},e.totalDuration=function(t){return arguments.length?(this._dirty=0,Xh(this,this._repeat<0?t:(t-this._repeat*this._rDelay)/(this._repeat+1))):this._tDur},e.totalTime=function(t,e){if(Md(),!arguments.length)return this._tTime;var n=this._dp;if(n&&n.smoothChildTiming&&this._ts){for(Gh(this,t),!n._dp||n.parent||Vh(n,this);n.parent;)n.parent._time!==n._start+(n._ts>=0?n._tTime/n._ts:(n.totalDuration()-n._tTime)/-n._ts)&&n.totalTime(n._tTime,!0),n=n.parent;!this.parent&&this._dp.autoRemoveChildren&&(this._ts>0&&t<this._tDur||this._ts<0&&t>0||!this._tDur&&!t)&&Hh(this._dp,this,this._start-this._delay)}return(this._tTime!==t||!this._dur&&!e||this._initted&&Math.abs(this._zTime)===Lu||!t&&!this._initted&&(this.add||this._ptLookup))&&(this._ts||(this._pTime=t),Th(this,t,e)),this},e.time=function(t,e){return arguments.length?this.totalTime(Math.min(this.totalDuration(),t+kh(this))%this._dur||(t?this._dur:0),e):this._time},e.totalProgress=function(t,e){return arguments.length?this.totalTime(this.totalDuration()*t,e):this.totalDuration()?Math.min(1,this._tTime/this._tDur):this.ratio},e.progress=function(t,e){return arguments.length?this.totalTime(this.duration()*(!this._yoyo||1&this.iteration()?t:1-t)+kh(this),e):this.duration()?Math.min(1,this._time/this._dur):this.ratio},e.iteration=function(t,e){var n=this.duration()+this._rDelay;return arguments.length?this.totalTime(this._time+(t-1)*n,e):this._repeat?Bh(this._tTime,n)+1:1},e.timeScale=function(t){if(!arguments.length)return-1e-8===this._rts?0:this._rts;if(this._rts===t)return this;var e=this.parent&&this._ts?zh(this.parent._time,this):this._tTime;return this._rts=+t||0,this._ts=this._ps||-1e-8===t?0:this._rts,Fh(this.totalTime(Qh(-this._delay,this._tDur,e),!0))},e.paused=function(t){return arguments.length?(this._ps!==t&&(this._ps=t,t?(this._pTime=this._tTime||Math.max(-this._delay,this.rawTime()),this._ts=this._act=0):(Md(),this._ts=this._rts,this.totalTime(this.parent&&!this.parent.smoothChildTiming?this.rawTime():this._tTime||this._pTime,1===this.progress()&&(this._tTime-=Lu)&&Math.abs(this._zTime)!==Lu))),this):this._ps},e.startTime=function(t){if(arguments.length){this._start=t;var e=this.parent||this._dp;return e&&(e._sort||!this.parent)&&Hh(e,this,t-this._delay),this}return this._start},e.endTime=function(t){return this._start+(Vu(t)?this.totalDuration():this.duration())/Math.abs(this._ts)},e.rawTime=function(t){var e=this.parent||this._dp;return e?t&&(!this._ts||this._repeat&&this._time&&this.totalProgress()<1)?this._tTime%(this._dur+this._rDelay):this._ts?zh(e.rawTime(t),this):this._tTime:this._tTime},e.globalTime=function(t){for(var e=this,n=arguments.length?t:e.rawTime();e;)n=e._start+n/(e._ts||1),e=e._dp;return n},e.repeat=function(t){return arguments.length?(this._repeat=t===1/0?-2:t,Yh(this)):-2===this._repeat?1/0:this._repeat},e.repeatDelay=function(t){return arguments.length?(this._rDelay=t,Yh(this)):this._rDelay},e.yoyo=function(t){return arguments.length?(this._yoyo=t,this):this._yoyo},e.seek=function(t,e){return this.totalTime(Jh(this,t),Vu(e))},e.restart=function(t,e){return this.play().totalTime(t?-this._delay:0,Vu(e))},e.play=function(t,e){return null!=t&&this.seek(t,e),this.reversed(!1).paused(!1)},e.reverse=function(t,e){return null!=t&&this.seek(t||this.totalDuration(),e),this.reversed(!0).paused(!1)},e.pause=function(t,e){return null!=t&&this.seek(t,e),this.paused(!0)},e.resume=function(){return this.paused(!1)},e.reversed=function(t){return arguments.length?(!!t!==this.reversed()&&this.timeScale(-this._rts||(t?-1e-8:0)),this):this._rts<0},e.invalidate=function(){return this._initted=this._act=0,this._zTime=-1e-8,this},e.isActive=function(){var t,e=this.parent||this._dp,n=this._start;return!(e&&!(this._ts&&this._initted&&e.isActive()&&(t=e.rawTime(!0))>=n&&t<this.endTime(!0)-Lu))},e.eventCallback=function(t,e,n){var i=this.vars;return arguments.length>1?(e?(i[t]=e,n&&(i[t+\\\\\\\"Params\\\\\\\"]=n),\\\\\\\"onUpdate\\\\\\\"===t&&(this._onUpdate=e)):delete i[t],this):i[t]},e.then=function(t){var e=this;return new Promise((function(n){var i=Bu(t)?t:Eh,r=function(){var t=e.then;e.then=null,Bu(i)&&(i=i(e))&&(i.then||i===e)&&(e.then=t),n(i),e.then=t};e._initted&&1===e.totalProgress()&&e._ts>=0||!e._tTime&&e._ts<0?r():e._prom=r}))},e.kill=function(){_d(this)},t}();Mh(zd.prototype,{_time:0,_start:0,_end:0,_tTime:0,_tDur:0,_dirty:0,_repeat:0,_yoyo:!1,parent:null,_initted:!1,_rDelay:0,_ts:1,_dp:0,ratio:0,_zTime:-1e-8,_prom:0,_ps:!1,_rts:1});var Ud=function(t){function e(e,n){var i;return void 0===e&&(e={}),(i=t.call(this,e,n)||this).labels={},i.smoothChildTiming=!!e.smoothChildTiming,i.autoRemoveChildren=!!e.autoRemoveChildren,i._sort=Vu(e.sortChildren),i.parent&&Vh(i.parent,du(i)),e.scrollTrigger&&jh(du(i),e.scrollTrigger),i}pu(e,t);var n=e.prototype;return n.to=function(t,e,n){return new $d(t,bh(arguments,0,this),Jh(this,zu(e)?arguments[3]:n)),this},n.from=function(t,e,n){return new $d(t,bh(arguments,1,this),Jh(this,zu(e)?arguments[3]:n)),this},n.fromTo=function(t,e,n,i){return new $d(t,bh(arguments,2,this),Jh(this,zu(e)?arguments[4]:i)),this},n.set=function(t,e,n){return e.duration=0,e.parent=this,Oh(e).repeatDelay||(e.repeat=0),e.immediateRender=!!e.immediateRender,new $d(t,e,Jh(this,n),1),this},n.call=function(t,e,n){return Hh(this,$d.delayedCall(0,t,e),Jh(this,n))},n.staggerTo=function(t,e,n,i,r,s,o){return n.duration=e,n.stagger=n.stagger||i,n.onComplete=s,n.onCompleteParams=o,n.parent=this,new $d(t,n,Jh(this,r)),this},n.staggerFrom=function(t,e,n,i,r,s,o){return n.runBackwards=1,Oh(n).immediateRender=Vu(n.immediateRender),this.staggerTo(t,e,n,i,r,s,o)},n.staggerFromTo=function(t,e,n,i,r,s,o,a){return i.startAt=n,Oh(i).immediateRender=Vu(i.immediateRender),this.staggerTo(t,e,i,r,s,o,a)},n.render=function(t,e,n){var i,r,s,o,a,l,c,u,h,d,p,_,m=this._time,f=this._dirty?this.totalDuration():this._tDur,g=this._dur,v=this!==mu&&t>f-Lu&&t>=0?f:t<Lu?0:t,y=this._zTime<0!=t<0&&(this._initted||!g);if(v!==this._tTime||n||y){if(m!==this._time&&g&&(v+=this._time-m,t+=this._time-m),i=v,h=this._start,l=!(u=this._ts),y&&(g||(m=this._zTime),(t||!e)&&(this._zTime=t)),this._repeat){if(p=this._yoyo,a=g+this._rDelay,this._repeat<-1&&t<0)return this.totalTime(100*a+t,e,n);if(i=yh(v%a),v===f?(o=this._repeat,i=g):((o=~~(v/a))&&o===v/a&&(i=g,o--),i>g&&(i=g)),d=Bh(this._tTime,a),!m&&this._tTime&&d!==o&&(d=o),p&&1&o&&(i=g-i,_=1),o!==d&&!this._lock){var x=p&&1&d,b=x===(p&&1&o);if(o<d&&(x=!x),m=x?0:g,this._lock=1,this.render(m||(_?0:yh(o*a)),e,!g)._lock=0,!e&&this.parent&&pd(this,\\\\\\\"onRepeat\\\\\\\"),this.vars.repeatRefresh&&!_&&(this.invalidate()._lock=1),m&&m!==this._time||l!==!this._ts||this.vars.onRepeat&&!this.parent&&!this._act)return this;if(g=this._dur,f=this._tDur,b&&(this._lock=2,m=x?g:-1e-4,this.render(m,!0)),this._lock=0,!this._ts&&!l)return this;Rd(this,_)}}if(this._hasPause&&!this._forcing&&this._lock<2&&(c=function(t,e,n){var i;if(n>e)for(i=t._first;i&&i._start<=n;){if(!i._dur&&\\\\\\\"isPause\\\\\\\"===i.data&&i._start>e)return i;i=i._next}else for(i=t._last;i&&i._start>=n;){if(!i._dur&&\\\\\\\"isPause\\\\\\\"===i.data&&i._start<e)return i;i=i._prev}}(this,yh(m),yh(i)))&&(v-=i-(i=c._start)),this._tTime=v,this._time=i,this._act=!u,this._initted||(this._onUpdate=this.vars.onUpdate,this._initted=1,this._zTime=t,m=0),!m&&i&&!e&&pd(this,\\\\\\\"onStart\\\\\\\"),i>=m&&t>=0)for(r=this._first;r;){if(s=r._next,(r._act||i>=r._start)&&r._ts&&c!==r){if(r.parent!==this)return this.render(t,e,n);if(r.render(r._ts>0?(i-r._start)*r._ts:(r._dirty?r.totalDuration():r._tDur)+(i-r._start)*r._ts,e,n),i!==this._time||!this._ts&&!l){c=0,s&&(v+=this._zTime=-1e-8);break}}r=s}else{r=this._last;for(var w=t<0?t:i;r;){if(s=r._prev,(r._act||w<=r._end)&&r._ts&&c!==r){if(r.parent!==this)return this.render(t,e,n);if(r.render(r._ts>0?(w-r._start)*r._ts:(r._dirty?r.totalDuration():r._tDur)+(w-r._start)*r._ts,e,n),i!==this._time||!this._ts&&!l){c=0,s&&(v+=this._zTime=w?-1e-8:Lu);break}}r=s}}if(c&&!e&&(this.pause(),c.render(i>=m?0:-1e-8)._zTime=i>=m?1:-1,this._ts))return this._start=h,Uh(this),this.render(t,e,n);this._onUpdate&&!e&&pd(this,\\\\\\\"onUpdate\\\\\\\",!0),(v===f&&f>=this.totalDuration()||!v&&m)&&(h!==this._start&&Math.abs(u)===Math.abs(this._ts)||this._lock||((t||!g)&&(v===f&&this._ts>0||!v&&this._ts<0)&&Ph(this,1),e||t<0&&!m||!v&&!m||(pd(this,v===f?\\\\\\\"onComplete\\\\\\\":\\\\\\\"onReverseComplete\\\\\\\",!0),this._prom&&!(v<f&&this.timeScale()>0)&&this._prom())))}return this},n.add=function(t,e){var n=this;if(zu(e)||(e=Jh(this,e)),!(t instanceof zd)){if(qu(t))return t.forEach((function(t){return n.add(t,e)})),this;if(ku(t))return this.addLabel(t,e);if(!Bu(t))return this;t=$d.delayedCall(0,t)}return this!==t?Hh(this,t,e):this},n.getChildren=function(t,e,n,i){void 0===t&&(t=!0),void 0===e&&(e=!0),void 0===n&&(n=!0),void 0===i&&(i=-Nu);for(var r=[],s=this._first;s;)s._start>=i&&(s instanceof $d?e&&r.push(s):(n&&r.push(s),t&&r.push.apply(r,s.getChildren(!0,e,n)))),s=s._next;return r},n.getById=function(t){for(var e=this.getChildren(1,1,1),n=e.length;n--;)if(e[n].vars.id===t)return e[n]},n.remove=function(t){return ku(t)?this.removeLabel(t):Bu(t)?this.killTweensOf(t):(Rh(this,t),t===this._recent&&(this._recent=this._last),Ih(this))},n.totalTime=function(e,n){return arguments.length?(this._forcing=1,!this._dp&&this._ts&&(this._start=yh(Ed.time-(this._ts>0?e/this._ts:(this.totalDuration()-e)/-this._ts))),t.prototype.totalTime.call(this,e,n),this._forcing=0,this):this._tTime},n.addLabel=function(t,e){return this.labels[t]=Jh(this,e),this},n.removeLabel=function(t){return delete this.labels[t],this},n.addPause=function(t,e,n){var i=$d.delayedCall(0,e||oh,n);return i.data=\\\\\\\"isPause\\\\\\\",this._hasPause=1,Hh(this,i,Jh(this,t))},n.removePause=function(t){var e=this._first;for(t=Jh(this,t);e;)e._start===t&&\\\\\\\"isPause\\\\\\\"===e.data&&Ph(e),e=e._next},n.killTweensOf=function(t,e,n){for(var i=this.getTweensOf(t,n),r=i.length;r--;)Gd!==i[r]&&i[r].kill(t,e);return this},n.getTweensOf=function(t,e){for(var n,i=[],r=id(t),s=this._first,o=zu(e);s;)s instanceof $d?xh(s._targets,r)&&(o?(!Gd||s._initted&&s._ts)&&s.globalTime(0)<=e&&s.globalTime(s.totalDuration())>e:!e||s.isActive())&&i.push(s):(n=s.getTweensOf(r,e)).length&&i.push.apply(i,n),s=s._next;return i},n.tweenTo=function(t,e){e=e||{};var n=this,i=Jh(n,t),r=e,s=r.startAt,o=r.onStart,a=r.onStartParams,l=r.immediateRender,c=$d.to(n,Mh({ease:e.ease||\\\\\\\"none\\\\\\\",lazy:!1,immediateRender:!1,time:i,overwrite:\\\\\\\"auto\\\\\\\",duration:e.duration||Math.abs((i-(s&&\\\\\\\"time\\\\\\\"in s?s.time:n._time))/n.timeScale())||Lu,onStart:function(){n.pause();var t=e.duration||Math.abs((i-n._time)/n.timeScale());c._dur!==t&&Xh(c,t,0,1).render(c._time,!0,!0),o&&o.apply(c,a||[])}},e));return l?c.render(0):c},n.tweenFromTo=function(t,e,n){return this.tweenTo(e,Mh({startAt:{time:Jh(this,t)}},n))},n.recent=function(){return this._recent},n.nextLabel=function(t){return void 0===t&&(t=this._time),dd(this,Jh(this,t))},n.previousLabel=function(t){return void 0===t&&(t=this._time),dd(this,Jh(this,t),1)},n.currentLabel=function(t){return arguments.length?this.seek(t,!0):this.previousLabel(this._time+Lu)},n.shiftChildren=function(t,e,n){void 0===n&&(n=0);for(var i,r=this._first,s=this.labels;r;)r._start>=n&&(r._start+=t,r._end+=t),r=r._next;if(e)for(i in s)s[i]>=n&&(s[i]+=t);return Ih(this)},n.invalidate=function(){var e=this._first;for(this._lock=0;e;)e.invalidate(),e=e._next;return t.prototype.invalidate.call(this)},n.clear=function(t){void 0===t&&(t=!0);for(var e,n=this._first;n;)e=n._next,this.remove(n),n=e;return this._dp&&(this._time=this._tTime=this._pTime=0),t&&(this.labels={}),Ih(this)},n.totalDuration=function(t){var e,n,i,r=0,s=this,o=s._last,a=Nu;if(arguments.length)return s.timeScale((s._repeat<0?s.duration():s.totalDuration())/(s.reversed()?-t:t));if(s._dirty){for(i=s.parent;o;)e=o._prev,o._dirty&&o.totalDuration(),(n=o._start)>a&&s._sort&&o._ts&&!s._lock?(s._lock=1,Hh(s,o,n-o._delay,1)._lock=0):a=n,n<0&&o._ts&&(r-=n,(!i&&!s._dp||i&&i.smoothChildTiming)&&(s._start+=n/s._ts,s._time-=n,s._tTime-=n),s.shiftChildren(-n,!1,-Infinity),a=0),o._end>r&&o._ts&&(r=o._end),o=e;Xh(s,s===mu&&s._time>r?s._time:r,1,1),s._dirty=0}return s._tDur},e.updateRoot=function(t){if(mu._ts&&(Th(mu,zh(t,mu)),xu=Ed.frame),Ed.frame>=dh){dh+=Su.autoSleep||120;var e=mu._first;if((!e||!e._ts)&&Su.autoSleep&&Ed._listeners.length<2){for(;e&&!e._ts;)e=e._next;e||Ed.sleep()}}},e}(zd);Mh(Ud.prototype,{_lock:0,_hasPause:0,_forcing:0});var Gd,Vd=function(t,e,n,i,r,s,o){var a,l,c,u,h,d,p,_,m=new cp(this._pt,t,e,0,1,ip,null,r),f=0,g=0;for(m.b=n,m.e=i,n+=\\\\\\\"\\\\\\\",(p=~(i+=\\\\\\\"\\\\\\\").indexOf(\\\\\\\"random(\\\\\\\"))&&(i=ud(i)),s&&(s(_=[n,i],t,e),n=_[0],i=_[1]),l=n.match(Ju)||[];a=Ju.exec(i);)u=a[0],h=i.substring(f,a.index),c?c=(c+1)%5:\\\\\\\"rgba(\\\\\\\"===h.substr(-5)&&(c=1),u!==l[g++]&&(d=parseFloat(l[g-1])||0,m._pt={_next:m._pt,p:h||1===g?h:\\\\\\\",\\\\\\\",s:d,c:\\\\\\\"=\\\\\\\"===u.charAt(1)?parseFloat(u.substr(2))*(\\\\\\\"-\\\\\\\"===u.charAt(0)?-1:1):parseFloat(u)-d,m:c&&c<4?Math.round:0},f=Ju.lastIndex);return m.c=f<i.length?i.substring(f,i.length):\\\\\\\"\\\\\\\",m.fp=o,(Zu.test(i)||p)&&(m.e=0),this._pt=m,m},Hd=function(t,e,n,i,r,s,o,a,l){Bu(i)&&(i=i(r||0,t,s));var c,u=t[e],h=\\\\\\\"get\\\\\\\"!==n?n:Bu(u)?l?t[e.indexOf(\\\\\\\"set\\\\\\\")||!Bu(t[\\\\\\\"get\\\\\\\"+e.substr(3)])?e:\\\\\\\"get\\\\\\\"+e.substr(3)](l):t[e]():u,d=Bu(u)?l?Qd:Zd:Jd;if(ku(i)&&(~i.indexOf(\\\\\\\"random(\\\\\\\")&&(i=ud(i)),\\\\\\\"=\\\\\\\"===i.charAt(1)&&(i=parseFloat(h)+parseFloat(i.substr(2))*(\\\\\\\"-\\\\\\\"===i.charAt(0)?-1:1)+(Kh(h)||0))),h!==i)return isNaN(h*i)?(!u&&!(e in t)&&ih(e,i),Vd.call(this,t,e,h,i,d,a||Su.stringFilter,l)):(c=new cp(this._pt,t,e,+h||0,i-(h||0),\\\\\\\"boolean\\\\\\\"==typeof u?np:ep,0,d),l&&(c.fp=l),o&&c.modifier(o,this,t),this._pt=c)},jd=function(t,e,n,i,r,s){var o,a,l,c;if(uh[t]&&!1!==(o=new uh[t]).init(r,o.rawVars?e[t]:function(t,e,n,i,r){if(Bu(t)&&(t=qd(t,r,e,n,i)),!Gu(t)||t.style&&t.nodeType||qu(t)||Wu(t))return ku(t)?qd(t,r,e,n,i):t;var s,o={};for(s in t)o[s]=qd(t[s],r,e,n,i);return o}(e[t],i,r,s,n),n,i,s)&&(n._pt=a=new cp(n._pt,r,t,0,1,o.render,o,0,o.priority),n!==bu))for(l=n._ptLookup[n._targets.indexOf(r)],c=o._props.length;c--;)l[o._props[c]]=a;return o},Wd=function t(e,n){var i,r,s,o,a,l,c,u,h,d,p,_,m,f=e.vars,g=f.ease,v=f.startAt,y=f.immediateRender,x=f.lazy,b=f.onUpdate,w=f.onUpdateParams,T=f.callbackScope,A=f.runBackwards,E=f.yoyoEase,M=f.keyframes,S=f.autoRevert,C=e._dur,N=e._startAt,L=e._targets,O=e.parent,R=O&&\\\\\\\"nested\\\\\\\"===O.data?O.parent._targets:L,P=\\\\\\\"auto\\\\\\\"===e._overwrite&&!_u,I=e.timeline;if(I&&(!M||!g)&&(g=\\\\\\\"none\\\\\\\"),e._ease=Pd(g,Cu.ease),e._yEase=E?Od(Pd(!0===E?g:E,Cu.ease)):0,E&&e._yoyo&&!e._repeat&&(E=e._yEase,e._yEase=e._ease,e._ease=E),!I){if(_=(u=L[0]?fh(L[0]).harness:0)&&f[u.prop],i=Lh(f,ah),N&&N.render(-1,!0).kill(),v)if(Ph(e._startAt=$d.set(L,Mh({data:\\\\\\\"isStart\\\\\\\",overwrite:!1,parent:O,immediateRender:!0,lazy:Vu(x),startAt:null,delay:0,onUpdate:b,onUpdateParams:w,callbackScope:T,stagger:0},v))),y){if(n>0)S||(e._startAt=0);else if(C&&!(n<0&&N))return void(n&&(e._zTime=n))}else!1===S&&(e._startAt=0);else if(A&&C)if(N)!S&&(e._startAt=0);else if(n&&(y=!1),s=Mh({overwrite:!1,data:\\\\\\\"isFromStart\\\\\\\",lazy:y&&Vu(x),immediateRender:y,stagger:0,parent:O},i),_&&(s[u.prop]=_),Ph(e._startAt=$d.set(L,s)),y){if(!n)return}else t(e._startAt,Lu);for(e._pt=0,x=C&&Vu(x)||x&&!C,r=0;r<L.length;r++){if(c=(a=L[r])._gsap||mh(L)[r]._gsap,e._ptLookup[r]=d={},ch[c.id]&&lh.length&&wh(),p=R===L?r:R.indexOf(a),u&&!1!==(h=new u).init(a,_||i,e,p,R)&&(e._pt=o=new cp(e._pt,a,h.name,0,1,h.render,h,0,h.priority),h._props.forEach((function(t){d[t]=o})),h.priority&&(l=1)),!u||_)for(s in i)uh[s]&&(h=jd(s,i,e,p,a,R))?h.priority&&(l=1):d[s]=o=Hd.call(e,a,s,\\\\\\\"get\\\\\\\",i[s],p,R,0,f.stringFilter);e._op&&e._op[r]&&e.kill(a,e._op[r]),P&&e._pt&&(Gd=e,mu.killTweensOf(a,d,e.globalTime(0)),m=!e.parent,Gd=0),e._pt&&x&&(ch[c.id]=1)}l&&lp(e),e._onInit&&e._onInit(e)}e._from=!I&&!!f.runBackwards,e._onUpdate=b,e._initted=(!e._op||e._pt)&&!m},qd=function(t,e,n,i,r){return Bu(t)?t.call(e,n,i,r):ku(t)&&~t.indexOf(\\\\\\\"random(\\\\\\\")?ud(t):t},Xd=_h+\\\\\\\"repeat,repeatDelay,yoyo,repeatRefresh,yoyoEase\\\\\\\",Yd=(Xd+\\\\\\\",id,stagger,delay,duration,paused,scrollTrigger\\\\\\\").split(\\\\\\\",\\\\\\\"),$d=function(t){function e(e,n,i,r){var s;\\\\\\\"number\\\\\\\"==typeof n&&(i.duration=n,n=i,i=null);var o,a,l,c,u,h,d,p,_=(s=t.call(this,r?n:Oh(n),i)||this).vars,m=_.duration,f=_.delay,g=_.immediateRender,v=_.stagger,y=_.overwrite,x=_.keyframes,b=_.defaults,w=_.scrollTrigger,T=_.yoyoEase,A=s.parent,E=(qu(e)||Wu(e)?zu(e[0]):\\\\\\\"length\\\\\\\"in n)?[e]:id(e);if(s._targets=E.length?mh(E):rh(\\\\\\\"GSAP target \\\\\\\"+e+\\\\\\\" not found. https://greensock.com\\\\\\\",!Su.nullTargetWarn)||[],s._ptLookup=[],s._overwrite=y,x||v||ju(m)||ju(f)){if(n=s.vars,(o=s.timeline=new Ud({data:\\\\\\\"nested\\\\\\\",defaults:b||{}})).kill(),o.parent=o._dp=du(s),o._start=0,x)Mh(o.vars.defaults,{ease:\\\\\\\"none\\\\\\\"}),x.forEach((function(t){return o.to(E,t,\\\\\\\">\\\\\\\")}));else{if(c=E.length,d=v?sd(v):oh,Gu(v))for(u in v)~Xd.indexOf(u)&&(p||(p={}),p[u]=v[u]);for(a=0;a<c;a++){for(u in l={},n)Yd.indexOf(u)<0&&(l[u]=n[u]);l.stagger=0,T&&(l.yoyoEase=T),p&&Ch(l,p),h=E[a],l.duration=+qd(m,du(s),a,h,E),l.delay=(+qd(f,du(s),a,h,E)||0)-s._delay,!v&&1===c&&l.delay&&(s._delay=f=l.delay,s._start+=f,l.delay=0),o.to(h,l,d(a,h,E))}o.duration()?m=f=0:s.timeline=0}m||s.duration(m=o.duration())}else s.timeline=0;return!0!==y||_u||(Gd=du(s),mu.killTweensOf(E),Gd=0),A&&Vh(A,du(s)),(g||!m&&!x&&s._start===yh(A._time)&&Vu(g)&&Dh(du(s))&&\\\\\\\"nested\\\\\\\"!==A.data)&&(s._tTime=-1e-8,s.render(Math.max(0,-f))),w&&jh(du(s),w),s}pu(e,t);var n=e.prototype;return n.render=function(t,e,n){var i,r,s,o,a,l,c,u,h,d=this._time,p=this._tDur,_=this._dur,m=t>p-Lu&&t>=0?p:t<Lu?0:t;if(_){if(m!==this._tTime||!t||n||!this._initted&&this._tTime||this._startAt&&this._zTime<0!=t<0){if(i=m,u=this.timeline,this._repeat){if(o=_+this._rDelay,this._repeat<-1&&t<0)return this.totalTime(100*o+t,e,n);if(i=yh(m%o),m===p?(s=this._repeat,i=_):((s=~~(m/o))&&s===m/o&&(i=_,s--),i>_&&(i=_)),(l=this._yoyo&&1&s)&&(h=this._yEase,i=_-i),a=Bh(this._tTime,o),i===d&&!n&&this._initted)return this;s!==a&&(u&&this._yEase&&Rd(u,l),!this.vars.repeatRefresh||l||this._lock||(this._lock=n=1,this.render(yh(o*s),!0).invalidate()._lock=0))}if(!this._initted){if(Wh(this,t<0?t:i,n,e))return this._tTime=0,this;if(_!==this._dur)return this.render(t,e,n)}for(this._tTime=m,this._time=i,!this._act&&this._ts&&(this._act=1,this._lazy=0),this.ratio=c=(h||this._ease)(i/_),this._from&&(this.ratio=c=1-c),i&&!d&&!e&&pd(this,\\\\\\\"onStart\\\\\\\"),r=this._pt;r;)r.r(c,r.d),r=r._next;u&&u.render(t<0?t:!i&&l?-1e-8:u._dur*c,e,n)||this._startAt&&(this._zTime=t),this._onUpdate&&!e&&(t<0&&this._startAt&&this._startAt.render(t,!0,n),pd(this,\\\\\\\"onUpdate\\\\\\\")),this._repeat&&s!==a&&this.vars.onRepeat&&!e&&this.parent&&pd(this,\\\\\\\"onRepeat\\\\\\\"),m!==this._tDur&&m||this._tTime!==m||(t<0&&this._startAt&&!this._onUpdate&&this._startAt.render(t,!0,!0),(t||!_)&&(m===this._tDur&&this._ts>0||!m&&this._ts<0)&&Ph(this,1),e||t<0&&!d||!m&&!d||(pd(this,m===p?\\\\\\\"onComplete\\\\\\\":\\\\\\\"onReverseComplete\\\\\\\",!0),this._prom&&!(m<p&&this.timeScale()>0)&&this._prom()))}}else!function(t,e,n,i){var r,s,o,a=t.ratio,l=e<0||!e&&(!t._start&&qh(t)||(t._ts<0||t._dp._ts<0)&&\\\\\\\"isFromStart\\\\\\\"!==t.data&&\\\\\\\"isStart\\\\\\\"!==t.data)?0:1,c=t._rDelay,u=0;if(c&&t._repeat&&(u=Qh(0,t._tDur,e),s=Bh(u,c),o=Bh(t._tTime,c),t._yoyo&&1&s&&(l=1-l),s!==o&&(a=1-l,t.vars.repeatRefresh&&t._initted&&t.invalidate())),l!==a||i||t._zTime===Lu||!e&&t._zTime){if(!t._initted&&Wh(t,e,i,n))return;for(o=t._zTime,t._zTime=e||(n?Lu:0),n||(n=e&&!o),t.ratio=l,t._from&&(l=1-l),t._time=0,t._tTime=u,r=t._pt;r;)r.r(l,r.d),r=r._next;t._startAt&&e<0&&t._startAt.render(e,!0,!0),t._onUpdate&&!n&&pd(t,\\\\\\\"onUpdate\\\\\\\"),u&&t._repeat&&!n&&t.parent&&pd(t,\\\\\\\"onRepeat\\\\\\\"),(e>=t._tDur||e<0)&&t.ratio===l&&(l&&Ph(t,1),n||(pd(t,l?\\\\\\\"onComplete\\\\\\\":\\\\\\\"onReverseComplete\\\\\\\",!0),t._prom&&t._prom()))}else t._zTime||(t._zTime=e)}(this,t,e,n);return this},n.targets=function(){return this._targets},n.invalidate=function(){return this._pt=this._op=this._startAt=this._onUpdate=this._lazy=this.ratio=0,this._ptLookup=[],this.timeline&&this.timeline.invalidate(),t.prototype.invalidate.call(this)},n.kill=function(t,e){if(void 0===e&&(e=\\\\\\\"all\\\\\\\"),!(t||e&&\\\\\\\"all\\\\\\\"!==e))return this._lazy=this._pt=0,this.parent?_d(this):this;if(this.timeline){var n=this.timeline.totalDuration();return this.timeline.killTweensOf(t,e,Gd&&!0!==Gd.vars.overwrite)._first||_d(this),this.parent&&n!==this.timeline.totalDuration()&&Xh(this,this._dur*this.timeline._tDur/n,0,1),this}var i,r,s,o,a,l,c,u=this._targets,h=t?id(t):u,d=this._ptLookup,p=this._pt;if((!e||\\\\\\\"all\\\\\\\"===e)&&function(t,e){for(var n=t.length,i=n===e.length;i&&n--&&t[n]===e[n];);return n<0}(u,h))return\\\\\\\"all\\\\\\\"===e&&(this._pt=0),_d(this);for(i=this._op=this._op||[],\\\\\\\"all\\\\\\\"!==e&&(ku(e)&&(a={},vh(e,(function(t){return a[t]=1})),e=a),e=function(t,e){var n,i,r,s,o=t[0]?fh(t[0]).harness:0,a=o&&o.aliases;if(!a)return e;for(i in n=Ch({},e),a)if(i in n)for(r=(s=a[i].split(\\\\\\\",\\\\\\\")).length;r--;)n[s[r]]=n[i];return n}(u,e)),c=u.length;c--;)if(~h.indexOf(u[c]))for(a in r=d[c],\\\\\\\"all\\\\\\\"===e?(i[c]=e,o=r,s={}):(s=i[c]=i[c]||{},o=e),o)(l=r&&r[a])&&(\\\\\\\"kill\\\\\\\"in l.d&&!0!==l.d.kill(a)||Rh(this,l,\\\\\\\"_pt\\\\\\\"),delete r[a]),\\\\\\\"all\\\\\\\"!==s&&(s[a]=1);return this._initted&&!this._pt&&p&&_d(this),this},e.to=function(t,n){return new e(t,n,arguments[2])},e.from=function(t,n){return new e(t,bh(arguments,1))},e.delayedCall=function(t,n,i,r){return new e(n,0,{immediateRender:!1,lazy:!1,overwrite:!1,delay:t,onComplete:n,onReverseComplete:n,onCompleteParams:i,onReverseCompleteParams:i,callbackScope:r})},e.fromTo=function(t,n,i){return new e(t,bh(arguments,2))},e.set=function(t,n){return n.duration=0,n.repeatDelay||(n.repeat=0),new e(t,n)},e.killTweensOf=function(t,e,n){return mu.killTweensOf(t,e,n)},e}(zd);Mh($d.prototype,{_targets:[],_lazy:0,_startAt:0,_op:0,_onInit:0}),vh(\\\\\\\"staggerTo,staggerFrom,staggerFromTo\\\\\\\",(function(t){$d[t]=function(){var e=new Ud,n=td.call(arguments,0);return n.splice(\\\\\\\"staggerFromTo\\\\\\\"===t?5:4,0,0),e[t].apply(e,n)}}));var Jd=function(t,e,n){return t[e]=n},Zd=function(t,e,n){return t[e](n)},Qd=function(t,e,n,i){return t[e](i.fp,n)},Kd=function(t,e,n){return t.setAttribute(e,n)},tp=function(t,e){return Bu(t[e])?Zd:Uu(t[e])&&t.setAttribute?Kd:Jd},ep=function(t,e){return e.set(e.t,e.p,Math.round(1e4*(e.s+e.c*t))/1e4,e)},np=function(t,e){return e.set(e.t,e.p,!!(e.s+e.c*t),e)},ip=function(t,e){var n=e._pt,i=\\\\\\\"\\\\\\\";if(!t&&e.b)i=e.b;else if(1===t&&e.e)i=e.e;else{for(;n;)i=n.p+(n.m?n.m(n.s+n.c*t):Math.round(1e4*(n.s+n.c*t))/1e4)+i,n=n._next;i+=e.c}e.set(e.t,e.p,i,e)},rp=function(t,e){for(var n=e._pt;n;)n.r(t,n.d),n=n._next},sp=function(t,e,n,i){for(var r,s=this._pt;s;)r=s._next,s.p===i&&s.modifier(t,e,n),s=r},op=function(t){for(var e,n,i=this._pt;i;)n=i._next,i.p===t&&!i.op||i.op===t?Rh(this,i,\\\\\\\"_pt\\\\\\\"):i.dep||(e=1),i=n;return!e},ap=function(t,e,n,i){i.mSet(t,e,i.m.call(i.tween,n,i.mt),i)},lp=function(t){for(var e,n,i,r,s=t._pt;s;){for(e=s._next,n=i;n&&n.pr>s.pr;)n=n._next;(s._prev=n?n._prev:r)?s._prev._next=s:i=s,(s._next=n)?n._prev=s:r=s,s=e}t._pt=i},cp=function(){function t(t,e,n,i,r,s,o,a,l){this.t=e,this.s=i,this.c=r,this.p=n,this.r=s||ep,this.d=o||this,this.set=a||Jd,this.pr=l||0,this._next=t,t&&(t._prev=this)}return t.prototype.modifier=function(t,e,n){this.mSet=this.mSet||this.set,this.set=ap,this.m=t,this.mt=n,this.tween=e},t}();vh(_h+\\\\\\\"parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert,scrollTrigger\\\\\\\",(function(t){return ah[t]=1})),th.TweenMax=th.TweenLite=$d,th.TimelineLite=th.TimelineMax=Ud,mu=new Ud({sortChildren:!1,defaults:Cu,autoRemoveChildren:!0,id:\\\\\\\"root\\\\\\\",smoothChildTiming:!0}),Su.stringFilter=Ad;var up={registerPlugin:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];e.forEach((function(t){return md(t)}))},timeline:function(t){return new Ud(t)},getTweensOf:function(t,e){return mu.getTweensOf(t,e)},getProperty:function(t,e,n,i){ku(t)&&(t=id(t)[0]);var r=fh(t||{}).get,s=n?Eh:Ah;return\\\\\\\"native\\\\\\\"===n&&(n=\\\\\\\"\\\\\\\"),t?e?s((uh[e]&&uh[e].get||r)(t,e,n,i)):function(e,n,i){return s((uh[e]&&uh[e].get||r)(t,e,n,i))}:t},quickSetter:function(t,e,n){if((t=id(t)).length>1){var i=t.map((function(t){return pp.quickSetter(t,e,n)})),r=i.length;return function(t){for(var e=r;e--;)i[e](t)}}t=t[0]||{};var s=uh[e],o=fh(t),a=o.harness&&(o.harness.aliases||{})[e]||e,l=s?function(e){var i=new s;bu._pt=0,i.init(t,n?e+n:e,bu,0,[t]),i.render(1,i),bu._pt&&rp(1,bu)}:o.set(t,a);return s?l:function(e){return l(t,a,n?e+n:e,o,1)}},isTweening:function(t){return mu.getTweensOf(t,!0).length>0},defaults:function(t){return t&&t.ease&&(t.ease=Pd(t.ease,Cu.ease)),Nh(Cu,t||{})},config:function(t){return Nh(Su,t||{})},registerEffect:function(t){var e=t.name,n=t.effect,i=t.plugins,r=t.defaults,s=t.extendTimeline;(i||\\\\\\\"\\\\\\\").split(\\\\\\\",\\\\\\\").forEach((function(t){return t&&!uh[t]&&!th[t]&&rh(e+\\\\\\\" effect requires \\\\\\\"+t+\\\\\\\" plugin.\\\\\\\")})),hh[e]=function(t,e,i){return n(id(t),Mh(e||{},r),i)},s&&(Ud.prototype[e]=function(t,n,i){return this.add(hh[e](t,Gu(n)?n:(i=n)&&{},this),i)})},registerEase:function(t,e){Sd[t]=Pd(e)},parseEase:function(t,e){return arguments.length?Pd(t,e):Sd},getById:function(t){return mu.getById(t)},exportRoot:function(t,e){void 0===t&&(t={});var n,i,r=new Ud(t);for(r.smoothChildTiming=Vu(t.smoothChildTiming),mu.remove(r),r._dp=0,r._time=r._tTime=mu._time,n=mu._first;n;)i=n._next,!e&&!n._dur&&n instanceof $d&&n.vars.onComplete===n._targets[0]||Hh(r,n,n._start-n._delay),n=i;return Hh(mu,r,0),r},utils:{wrap:function t(e,n,i){var r=n-e;return qu(e)?cd(e,t(0,e.length),n):Zh(i,(function(t){return(r+(t-e)%r)%r+e}))},wrapYoyo:function t(e,n,i){var r=n-e,s=2*r;return qu(e)?cd(e,t(0,e.length-1),n):Zh(i,(function(t){return e+((t=(s+(t-e)%s)%s||0)>r?s-t:t)}))},distribute:sd,random:ld,snap:ad,normalize:function(t,e,n){return hd(t,e,0,1,n)},getUnit:Kh,clamp:function(t,e,n){return Zh(n,(function(n){return Qh(t,e,n)}))},splitColor:yd,toArray:id,mapRange:hd,pipe:function(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]=arguments[n];return function(t){return e.reduce((function(t,e){return e(t)}),t)}},unitize:function(t,e){return function(n){return t(parseFloat(n))+(e||Kh(n))}},interpolate:function t(e,n,i,r){var s=isNaN(e+n)?0:function(t){return(1-t)*e+t*n};if(!s){var o,a,l,c,u,h=ku(e),d={};if(!0===i&&(r=1)&&(i=null),h)e={p:e},n={p:n};else if(qu(e)&&!qu(n)){for(l=[],c=e.length,u=c-2,a=1;a<c;a++)l.push(t(e[a-1],e[a]));c--,s=function(t){t*=c;var e=Math.min(u,~~t);return l[e](t-e)},i=n}else r||(e=Ch(qu(e)?[]:{},e));if(!l){for(o in n)Hd.call(d,e,o,\\\\\\\"get\\\\\\\",n[o]);s=function(t){return rp(t,d)||(h?e.p:e)}}}return Zh(i,s)},shuffle:rd},install:nh,effects:hh,ticker:Ed,updateRoot:Ud.updateRoot,plugins:uh,globalTimeline:mu,core:{PropTween:cp,globals:sh,Tween:$d,Timeline:Ud,Animation:zd,getCache:fh,_removeLinkedListItem:Rh,suppressOverwrites:function(t){return _u=t}}};vh(\\\\\\\"to,from,fromTo,delayedCall,set,killTweensOf\\\\\\\",(function(t){return up[t]=$d[t]})),Ed.add(Ud.updateRoot),bu=up.to({},{duration:0});var hp=function(t,e){for(var n=t._pt;n&&n.p!==e&&n.op!==e&&n.fp!==e;)n=n._next;return n},dp=function(t,e){return{name:t,rawVars:1,init:function(t,n,i){i._onInit=function(t){var i,r;if(ku(n)&&(i={},vh(n,(function(t){return i[t]=1})),n=i),e){for(r in i={},n)i[r]=e(n[r]);n=i}!function(t,e){var n,i,r,s=t._targets;for(n in e)for(i=s.length;i--;)(r=t._ptLookup[i][n])&&(r=r.d)&&(r._pt&&(r=hp(r,n)),r&&r.modifier&&r.modifier(e[n],t,s[i],n))}(t,n)}}}},pp=up.registerPlugin({name:\\\\\\\"attr\\\\\\\",init:function(t,e,n,i,r){var s,o;for(s in e)(o=this.add(t,\\\\\\\"setAttribute\\\\\\\",(t.getAttribute(s)||0)+\\\\\\\"\\\\\\\",e[s],i,r,0,0,s))&&(o.op=s),this._props.push(s)}},{name:\\\\\\\"endArray\\\\\\\",init:function(t,e){for(var n=e.length;n--;)this.add(t,n,t[n]||0,e[n])}},dp(\\\\\\\"roundProps\\\\\\\",od),dp(\\\\\\\"modifiers\\\\\\\"),dp(\\\\\\\"snap\\\\\\\",ad))||up;$d.version=Ud.version=pp.version=\\\\\\\"3.6.1\\\\\\\",yu=1,Hu()&&Md();Sd.Power0,Sd.Power1,Sd.Power2,Sd.Power3,Sd.Power4,Sd.Linear,Sd.Quad,Sd.Cubic,Sd.Quart,Sd.Quint,Sd.Strong,Sd.Elastic,Sd.Back,Sd.SteppedEase,Sd.Bounce,Sd.Sine,Sd.Expo,Sd.Circ;var _p,mp,fp,gp,vp,yp,xp,bp={},wp=180/Math.PI,Tp=Math.PI/180,Ap=Math.atan2,Ep=/([A-Z])/g,Mp=/(?:left|right|width|margin|padding|x)/i,Sp=/[\\\\s,\\\\(]\\\\S/,Cp={autoAlpha:\\\\\\\"opacity,visibility\\\\\\\",scale:\\\\\\\"scaleX,scaleY\\\\\\\",alpha:\\\\\\\"opacity\\\\\\\"},Np=function(t,e){return e.set(e.t,e.p,Math.round(1e4*(e.s+e.c*t))/1e4+e.u,e)},Lp=function(t,e){return e.set(e.t,e.p,1===t?e.e:Math.round(1e4*(e.s+e.c*t))/1e4+e.u,e)},Op=function(t,e){return e.set(e.t,e.p,t?Math.round(1e4*(e.s+e.c*t))/1e4+e.u:e.b,e)},Rp=function(t,e){var n=e.s+e.c*t;e.set(e.t,e.p,~~(n+(n<0?-.5:.5))+e.u,e)},Pp=function(t,e){return e.set(e.t,e.p,t?e.e:e.b,e)},Ip=function(t,e){return e.set(e.t,e.p,1!==t?e.b:e.e,e)},Fp=function(t,e,n){return t.style[e]=n},Dp=function(t,e,n){return t.style.setProperty(e,n)},kp=function(t,e,n){return t._gsap[e]=n},Bp=function(t,e,n){return t._gsap.scaleX=t._gsap.scaleY=n},zp=function(t,e,n,i,r){var s=t._gsap;s.scaleX=s.scaleY=n,s.renderTransform(r,s)},Up=function(t,e,n,i,r){var s=t._gsap;s[e]=n,s.renderTransform(r,s)},Gp=\\\\\\\"transform\\\\\\\",Vp=Gp+\\\\\\\"Origin\\\\\\\",Hp=function(t,e){var n=mp.createElementNS?mp.createElementNS((e||\\\\\\\"http://www.w3.org/1999/xhtml\\\\\\\").replace(/^https/,\\\\\\\"http\\\\\\\"),t):mp.createElement(t);return n.style?n:mp.createElement(t)},jp=function t(e,n,i){var r=getComputedStyle(e);return r[n]||r.getPropertyValue(n.replace(Ep,\\\\\\\"-$1\\\\\\\").toLowerCase())||r.getPropertyValue(n)||!i&&t(e,qp(n)||n,1)||\\\\\\\"\\\\\\\"},Wp=\\\\\\\"O,Moz,ms,Ms,Webkit\\\\\\\".split(\\\\\\\",\\\\\\\"),qp=function(t,e,n){var i=(e||vp).style,r=5;if(t in i&&!n)return t;for(t=t.charAt(0).toUpperCase()+t.substr(1);r--&&!(Wp[r]+t in i););return r<0?null:(3===r?\\\\\\\"ms\\\\\\\":r>=0?Wp[r]:\\\\\\\"\\\\\\\")+t},Xp=function(){\\\\\\\"undefined\\\\\\\"!=typeof window&&window.document&&(_p=window,mp=_p.document,fp=mp.documentElement,vp=Hp(\\\\\\\"div\\\\\\\")||{style:{}},Hp(\\\\\\\"div\\\\\\\"),Gp=qp(Gp),Vp=Gp+\\\\\\\"Origin\\\\\\\",vp.style.cssText=\\\\\\\"border-width:0;line-height:0;position:absolute;padding:0\\\\\\\",xp=!!qp(\\\\\\\"perspective\\\\\\\"),gp=1)},Yp=function t(e){var n,i=Hp(\\\\\\\"svg\\\\\\\",this.ownerSVGElement&&this.ownerSVGElement.getAttribute(\\\\\\\"xmlns\\\\\\\")||\\\\\\\"http://www.w3.org/2000/svg\\\\\\\"),r=this.parentNode,s=this.nextSibling,o=this.style.cssText;if(fp.appendChild(i),i.appendChild(this),this.style.display=\\\\\\\"block\\\\\\\",e)try{n=this.getBBox(),this._gsapBBox=this.getBBox,this.getBBox=t}catch(t){}else this._gsapBBox&&(n=this._gsapBBox());return r&&(s?r.insertBefore(this,s):r.appendChild(this)),fp.removeChild(i),this.style.cssText=o,n},$p=function(t,e){for(var n=e.length;n--;)if(t.hasAttribute(e[n]))return t.getAttribute(e[n])},Jp=function(t){var e;try{e=t.getBBox()}catch(n){e=Yp.call(t,!0)}return e&&(e.width||e.height)||t.getBBox===Yp||(e=Yp.call(t,!0)),!e||e.width||e.x||e.y?e:{x:+$p(t,[\\\\\\\"x\\\\\\\",\\\\\\\"cx\\\\\\\",\\\\\\\"x1\\\\\\\"])||0,y:+$p(t,[\\\\\\\"y\\\\\\\",\\\\\\\"cy\\\\\\\",\\\\\\\"y1\\\\\\\"])||0,width:0,height:0}},Zp=function(t){return!(!t.getCTM||t.parentNode&&!t.ownerSVGElement||!Jp(t))},Qp=function(t,e){if(e){var n=t.style;e in bp&&e!==Vp&&(e=Gp),n.removeProperty?(\\\\\\\"ms\\\\\\\"!==e.substr(0,2)&&\\\\\\\"webkit\\\\\\\"!==e.substr(0,6)||(e=\\\\\\\"-\\\\\\\"+e),n.removeProperty(e.replace(Ep,\\\\\\\"-$1\\\\\\\").toLowerCase())):n.removeAttribute(e)}},Kp=function(t,e,n,i,r,s){var o=new cp(t._pt,e,n,0,1,s?Ip:Pp);return t._pt=o,o.b=i,o.e=r,t._props.push(n),o},t_={deg:1,rad:1,turn:1},e_=function t(e,n,i,r){var s,o,a,l,c=parseFloat(i)||0,u=(i+\\\\\\\"\\\\\\\").trim().substr((c+\\\\\\\"\\\\\\\").length)||\\\\\\\"px\\\\\\\",h=vp.style,d=Mp.test(n),p=\\\\\\\"svg\\\\\\\"===e.tagName.toLowerCase(),_=(p?\\\\\\\"client\\\\\\\":\\\\\\\"offset\\\\\\\")+(d?\\\\\\\"Width\\\\\\\":\\\\\\\"Height\\\\\\\"),m=100,f=\\\\\\\"px\\\\\\\"===r,g=\\\\\\\"%\\\\\\\"===r;return r===u||!c||t_[r]||t_[u]?c:(\\\\\\\"px\\\\\\\"!==u&&!f&&(c=t(e,n,i,\\\\\\\"px\\\\\\\")),l=e.getCTM&&Zp(e),!g&&\\\\\\\"%\\\\\\\"!==u||!bp[n]&&!~n.indexOf(\\\\\\\"adius\\\\\\\")?(h[d?\\\\\\\"width\\\\\\\":\\\\\\\"height\\\\\\\"]=m+(f?u:r),o=~n.indexOf(\\\\\\\"adius\\\\\\\")||\\\\\\\"em\\\\\\\"===r&&e.appendChild&&!p?e:e.parentNode,l&&(o=(e.ownerSVGElement||{}).parentNode),o&&o!==mp&&o.appendChild||(o=mp.body),(a=o._gsap)&&g&&a.width&&d&&a.time===Ed.time?yh(c/a.width*m):((g||\\\\\\\"%\\\\\\\"===u)&&(h.position=jp(e,\\\\\\\"position\\\\\\\")),o===e&&(h.position=\\\\\\\"static\\\\\\\"),o.appendChild(vp),s=vp[_],o.removeChild(vp),h.position=\\\\\\\"absolute\\\\\\\",d&&g&&((a=fh(o)).time=Ed.time,a.width=o[_]),yh(f?s*c/m:s&&c?m/s*c:0))):(s=l?e.getBBox()[d?\\\\\\\"width\\\\\\\":\\\\\\\"height\\\\\\\"]:e[_],yh(g?c/s*m:c/100*s)))},n_=function(t,e,n,i){var r;return gp||Xp(),e in Cp&&\\\\\\\"transform\\\\\\\"!==e&&~(e=Cp[e]).indexOf(\\\\\\\",\\\\\\\")&&(e=e.split(\\\\\\\",\\\\\\\")[0]),bp[e]&&\\\\\\\"transform\\\\\\\"!==e?(r=p_(t,i),r=\\\\\\\"transformOrigin\\\\\\\"!==e?r[e]:__(jp(t,Vp))+\\\\\\\" \\\\\\\"+r.zOrigin+\\\\\\\"px\\\\\\\"):(!(r=t.style[e])||\\\\\\\"auto\\\\\\\"===r||i||~(r+\\\\\\\"\\\\\\\").indexOf(\\\\\\\"calc(\\\\\\\"))&&(r=o_[e]&&o_[e](t,e,n)||jp(t,e)||gh(t,e)||(\\\\\\\"opacity\\\\\\\"===e?1:0)),n&&!~(r+\\\\\\\"\\\\\\\").trim().indexOf(\\\\\\\" \\\\\\\")?e_(t,e,r,n)+n:r},i_=function(t,e,n,i){if(!n||\\\\\\\"none\\\\\\\"===n){var r=qp(e,t,1),s=r&&jp(t,r,1);s&&s!==n?(e=r,n=s):\\\\\\\"borderColor\\\\\\\"===e&&(n=jp(t,\\\\\\\"borderTopColor\\\\\\\"))}var o,a,l,c,u,h,d,p,_,m,f,g,v=new cp(this._pt,t.style,e,0,1,ip),y=0,x=0;if(v.b=n,v.e=i,n+=\\\\\\\"\\\\\\\",\\\\\\\"auto\\\\\\\"===(i+=\\\\\\\"\\\\\\\")&&(t.style[e]=i,i=jp(t,e)||i,t.style[e]=n),Ad(o=[n,i]),i=o[1],l=(n=o[0]).match($u)||[],(i.match($u)||[]).length){for(;a=$u.exec(i);)d=a[0],_=i.substring(y,a.index),u?u=(u+1)%5:\\\\\\\"rgba(\\\\\\\"!==_.substr(-5)&&\\\\\\\"hsla(\\\\\\\"!==_.substr(-5)||(u=1),d!==(h=l[x++]||\\\\\\\"\\\\\\\")&&(c=parseFloat(h)||0,f=h.substr((c+\\\\\\\"\\\\\\\").length),(g=\\\\\\\"=\\\\\\\"===d.charAt(1)?+(d.charAt(0)+\\\\\\\"1\\\\\\\"):0)&&(d=d.substr(2)),p=parseFloat(d),m=d.substr((p+\\\\\\\"\\\\\\\").length),y=$u.lastIndex-m.length,m||(m=m||Su.units[e]||f,y===i.length&&(i+=m,v.e+=m)),f!==m&&(c=e_(t,e,h,m)||0),v._pt={_next:v._pt,p:_||1===x?_:\\\\\\\",\\\\\\\",s:c,c:g?g*p:p-c,m:u&&u<4||\\\\\\\"zIndex\\\\\\\"===e?Math.round:0});v.c=y<i.length?i.substring(y,i.length):\\\\\\\"\\\\\\\"}else v.r=\\\\\\\"display\\\\\\\"===e&&\\\\\\\"none\\\\\\\"===i?Ip:Pp;return Zu.test(i)&&(v.e=0),this._pt=v,v},r_={top:\\\\\\\"0%\\\\\\\",bottom:\\\\\\\"100%\\\\\\\",left:\\\\\\\"0%\\\\\\\",right:\\\\\\\"100%\\\\\\\",center:\\\\\\\"50%\\\\\\\"},s_=function(t,e){if(e.tween&&e.tween._time===e.tween._dur){var n,i,r,s=e.t,o=s.style,a=e.u,l=s._gsap;if(\\\\\\\"all\\\\\\\"===a||!0===a)o.cssText=\\\\\\\"\\\\\\\",i=1;else for(r=(a=a.split(\\\\\\\",\\\\\\\")).length;--r>-1;)n=a[r],bp[n]&&(i=1,n=\\\\\\\"transformOrigin\\\\\\\"===n?Vp:Gp),Qp(s,n);i&&(Qp(s,Gp),l&&(l.svg&&s.removeAttribute(\\\\\\\"transform\\\\\\\"),p_(s,1),l.uncache=1))}},o_={clearProps:function(t,e,n,i,r){if(\\\\\\\"isFromStart\\\\\\\"!==r.data){var s=t._pt=new cp(t._pt,e,n,0,0,s_);return s.u=i,s.pr=-10,s.tween=r,t._props.push(n),1}}},a_=[1,0,0,1,0,0],l_={},c_=function(t){return\\\\\\\"matrix(1, 0, 0, 1, 0, 0)\\\\\\\"===t||\\\\\\\"none\\\\\\\"===t||!t},u_=function(t){var e=jp(t,Gp);return c_(e)?a_:e.substr(7).match(Yu).map(yh)},h_=function(t,e){var n,i,r,s,o=t._gsap||fh(t),a=t.style,l=u_(t);return o.svg&&t.getAttribute(\\\\\\\"transform\\\\\\\")?\\\\\\\"1,0,0,1,0,0\\\\\\\"===(l=[(r=t.transform.baseVal.consolidate().matrix).a,r.b,r.c,r.d,r.e,r.f]).join(\\\\\\\",\\\\\\\")?a_:l:(l!==a_||t.offsetParent||t===fp||o.svg||(r=a.display,a.display=\\\\\\\"block\\\\\\\",(n=t.parentNode)&&t.offsetParent||(s=1,i=t.nextSibling,fp.appendChild(t)),l=u_(t),r?a.display=r:Qp(t,\\\\\\\"display\\\\\\\"),s&&(i?n.insertBefore(t,i):n?n.appendChild(t):fp.removeChild(t))),e&&l.length>6?[l[0],l[1],l[4],l[5],l[12],l[13]]:l)},d_=function(t,e,n,i,r,s){var o,a,l,c=t._gsap,u=r||h_(t,!0),h=c.xOrigin||0,d=c.yOrigin||0,p=c.xOffset||0,_=c.yOffset||0,m=u[0],f=u[1],g=u[2],v=u[3],y=u[4],x=u[5],b=e.split(\\\\\\\" \\\\\\\"),w=parseFloat(b[0])||0,T=parseFloat(b[1])||0;n?u!==a_&&(a=m*v-f*g)&&(l=w*(-f/a)+T*(m/a)-(m*x-f*y)/a,w=w*(v/a)+T*(-g/a)+(g*x-v*y)/a,T=l):(w=(o=Jp(t)).x+(~b[0].indexOf(\\\\\\\"%\\\\\\\")?w/100*o.width:w),T=o.y+(~(b[1]||b[0]).indexOf(\\\\\\\"%\\\\\\\")?T/100*o.height:T)),i||!1!==i&&c.smooth?(y=w-h,x=T-d,c.xOffset=p+(y*m+x*g)-y,c.yOffset=_+(y*f+x*v)-x):c.xOffset=c.yOffset=0,c.xOrigin=w,c.yOrigin=T,c.smooth=!!i,c.origin=e,c.originIsAbsolute=!!n,t.style[Vp]=\\\\\\\"0px 0px\\\\\\\",s&&(Kp(s,c,\\\\\\\"xOrigin\\\\\\\",h,w),Kp(s,c,\\\\\\\"yOrigin\\\\\\\",d,T),Kp(s,c,\\\\\\\"xOffset\\\\\\\",p,c.xOffset),Kp(s,c,\\\\\\\"yOffset\\\\\\\",_,c.yOffset)),t.setAttribute(\\\\\\\"data-svg-origin\\\\\\\",w+\\\\\\\" \\\\\\\"+T)},p_=function(t,e){var n=t._gsap||new Bd(t);if(\\\\\\\"x\\\\\\\"in n&&!e&&!n.uncache)return n;var i,r,s,o,a,l,c,u,h,d,p,_,m,f,g,v,y,x,b,w,T,A,E,M,S,C,N,L,O,R,P,I,F=t.style,D=n.scaleX<0,k=\\\\\\\"px\\\\\\\",B=\\\\\\\"deg\\\\\\\",z=jp(t,Vp)||\\\\\\\"0\\\\\\\";return i=r=s=l=c=u=h=d=p=0,o=a=1,n.svg=!(!t.getCTM||!Zp(t)),f=h_(t,n.svg),n.svg&&(M=!n.uncache&&!e&&t.getAttribute(\\\\\\\"data-svg-origin\\\\\\\"),d_(t,M||z,!!M||n.originIsAbsolute,!1!==n.smooth,f)),_=n.xOrigin||0,m=n.yOrigin||0,f!==a_&&(x=f[0],b=f[1],w=f[2],T=f[3],i=A=f[4],r=E=f[5],6===f.length?(o=Math.sqrt(x*x+b*b),a=Math.sqrt(T*T+w*w),l=x||b?Ap(b,x)*wp:0,(h=w||T?Ap(w,T)*wp+l:0)&&(a*=Math.abs(Math.cos(h*Tp))),n.svg&&(i-=_-(_*x+m*w),r-=m-(_*b+m*T))):(I=f[6],R=f[7],N=f[8],L=f[9],O=f[10],P=f[11],i=f[12],r=f[13],s=f[14],c=(g=Ap(I,O))*wp,g&&(M=A*(v=Math.cos(-g))+N*(y=Math.sin(-g)),S=E*v+L*y,C=I*v+O*y,N=A*-y+N*v,L=E*-y+L*v,O=I*-y+O*v,P=R*-y+P*v,A=M,E=S,I=C),u=(g=Ap(-w,O))*wp,g&&(v=Math.cos(-g),P=T*(y=Math.sin(-g))+P*v,x=M=x*v-N*y,b=S=b*v-L*y,w=C=w*v-O*y),l=(g=Ap(b,x))*wp,g&&(M=x*(v=Math.cos(g))+b*(y=Math.sin(g)),S=A*v+E*y,b=b*v-x*y,E=E*v-A*y,x=M,A=S),c&&Math.abs(c)+Math.abs(l)>359.9&&(c=l=0,u=180-u),o=yh(Math.sqrt(x*x+b*b+w*w)),a=yh(Math.sqrt(E*E+I*I)),g=Ap(A,E),h=Math.abs(g)>2e-4?g*wp:0,p=P?1/(P<0?-P:P):0),n.svg&&(M=t.getAttribute(\\\\\\\"transform\\\\\\\"),n.forceCSS=t.setAttribute(\\\\\\\"transform\\\\\\\",\\\\\\\"\\\\\\\")||!c_(jp(t,Gp)),M&&t.setAttribute(\\\\\\\"transform\\\\\\\",M))),Math.abs(h)>90&&Math.abs(h)<270&&(D?(o*=-1,h+=l<=0?180:-180,l+=l<=0?180:-180):(a*=-1,h+=h<=0?180:-180)),n.x=i-((n.xPercent=i&&(n.xPercent||(Math.round(t.offsetWidth/2)===Math.round(-i)?-50:0)))?t.offsetWidth*n.xPercent/100:0)+k,n.y=r-((n.yPercent=r&&(n.yPercent||(Math.round(t.offsetHeight/2)===Math.round(-r)?-50:0)))?t.offsetHeight*n.yPercent/100:0)+k,n.z=s+k,n.scaleX=yh(o),n.scaleY=yh(a),n.rotation=yh(l)+B,n.rotationX=yh(c)+B,n.rotationY=yh(u)+B,n.skewX=h+B,n.skewY=d+B,n.transformPerspective=p+k,(n.zOrigin=parseFloat(z.split(\\\\\\\" \\\\\\\")[2])||0)&&(F[Vp]=__(z)),n.xOffset=n.yOffset=0,n.force3D=Su.force3D,n.renderTransform=n.svg?b_:xp?x_:f_,n.uncache=0,n},__=function(t){return(t=t.split(\\\\\\\" \\\\\\\"))[0]+\\\\\\\" \\\\\\\"+t[1]},m_=function(t,e,n){var i=Kh(e);return yh(parseFloat(e)+parseFloat(e_(t,\\\\\\\"x\\\\\\\",n+\\\\\\\"px\\\\\\\",i)))+i},f_=function(t,e){e.z=\\\\\\\"0px\\\\\\\",e.rotationY=e.rotationX=\\\\\\\"0deg\\\\\\\",e.force3D=0,x_(t,e)},g_=\\\\\\\"0deg\\\\\\\",v_=\\\\\\\"0px\\\\\\\",y_=\\\\\\\") \\\\\\\",x_=function(t,e){var n=e||this,i=n.xPercent,r=n.yPercent,s=n.x,o=n.y,a=n.z,l=n.rotation,c=n.rotationY,u=n.rotationX,h=n.skewX,d=n.skewY,p=n.scaleX,_=n.scaleY,m=n.transformPerspective,f=n.force3D,g=n.target,v=n.zOrigin,y=\\\\\\\"\\\\\\\",x=\\\\\\\"auto\\\\\\\"===f&&t&&1!==t||!0===f;if(v&&(u!==g_||c!==g_)){var b,w=parseFloat(c)*Tp,T=Math.sin(w),A=Math.cos(w);w=parseFloat(u)*Tp,b=Math.cos(w),s=m_(g,s,T*b*-v),o=m_(g,o,-Math.sin(w)*-v),a=m_(g,a,A*b*-v+v)}m!==v_&&(y+=\\\\\\\"perspective(\\\\\\\"+m+y_),(i||r)&&(y+=\\\\\\\"translate(\\\\\\\"+i+\\\\\\\"%, \\\\\\\"+r+\\\\\\\"%) \\\\\\\"),(x||s!==v_||o!==v_||a!==v_)&&(y+=a!==v_||x?\\\\\\\"translate3d(\\\\\\\"+s+\\\\\\\", \\\\\\\"+o+\\\\\\\", \\\\\\\"+a+\\\\\\\") \\\\\\\":\\\\\\\"translate(\\\\\\\"+s+\\\\\\\", \\\\\\\"+o+y_),l!==g_&&(y+=\\\\\\\"rotate(\\\\\\\"+l+y_),c!==g_&&(y+=\\\\\\\"rotateY(\\\\\\\"+c+y_),u!==g_&&(y+=\\\\\\\"rotateX(\\\\\\\"+u+y_),h===g_&&d===g_||(y+=\\\\\\\"skew(\\\\\\\"+h+\\\\\\\", \\\\\\\"+d+y_),1===p&&1===_||(y+=\\\\\\\"scale(\\\\\\\"+p+\\\\\\\", \\\\\\\"+_+y_),g.style[Gp]=y||\\\\\\\"translate(0, 0)\\\\\\\"},b_=function(t,e){var n,i,r,s,o,a=e||this,l=a.xPercent,c=a.yPercent,u=a.x,h=a.y,d=a.rotation,p=a.skewX,_=a.skewY,m=a.scaleX,f=a.scaleY,g=a.target,v=a.xOrigin,y=a.yOrigin,x=a.xOffset,b=a.yOffset,w=a.forceCSS,T=parseFloat(u),A=parseFloat(h);d=parseFloat(d),p=parseFloat(p),(_=parseFloat(_))&&(p+=_=parseFloat(_),d+=_),d||p?(d*=Tp,p*=Tp,n=Math.cos(d)*m,i=Math.sin(d)*m,r=Math.sin(d-p)*-f,s=Math.cos(d-p)*f,p&&(_*=Tp,o=Math.tan(p-_),r*=o=Math.sqrt(1+o*o),s*=o,_&&(o=Math.tan(_),n*=o=Math.sqrt(1+o*o),i*=o)),n=yh(n),i=yh(i),r=yh(r),s=yh(s)):(n=m,s=f,i=r=0),(T&&!~(u+\\\\\\\"\\\\\\\").indexOf(\\\\\\\"px\\\\\\\")||A&&!~(h+\\\\\\\"\\\\\\\").indexOf(\\\\\\\"px\\\\\\\"))&&(T=e_(g,\\\\\\\"x\\\\\\\",u,\\\\\\\"px\\\\\\\"),A=e_(g,\\\\\\\"y\\\\\\\",h,\\\\\\\"px\\\\\\\")),(v||y||x||b)&&(T=yh(T+v-(v*n+y*r)+x),A=yh(A+y-(v*i+y*s)+b)),(l||c)&&(o=g.getBBox(),T=yh(T+l/100*o.width),A=yh(A+c/100*o.height)),o=\\\\\\\"matrix(\\\\\\\"+n+\\\\\\\",\\\\\\\"+i+\\\\\\\",\\\\\\\"+r+\\\\\\\",\\\\\\\"+s+\\\\\\\",\\\\\\\"+T+\\\\\\\",\\\\\\\"+A+\\\\\\\")\\\\\\\",g.setAttribute(\\\\\\\"transform\\\\\\\",o),w&&(g.style[Gp]=o)},w_=function(t,e,n,i,r,s){var o,a,l=360,c=ku(r),u=parseFloat(r)*(c&&~r.indexOf(\\\\\\\"rad\\\\\\\")?wp:1),h=s?u*s:u-i,d=i+h+\\\\\\\"deg\\\\\\\";return c&&(\\\\\\\"short\\\\\\\"===(o=r.split(\\\\\\\"_\\\\\\\")[1])&&(h%=l)!==h%180&&(h+=h<0?l:-360),\\\\\\\"cw\\\\\\\"===o&&h<0?h=(h+36e9)%l-~~(h/l)*l:\\\\\\\"ccw\\\\\\\"===o&&h>0&&(h=(h-36e9)%l-~~(h/l)*l)),t._pt=a=new cp(t._pt,e,n,i,h,Lp),a.e=d,a.u=\\\\\\\"deg\\\\\\\",t._props.push(n),a},T_=function(t,e){for(var n in e)t[n]=e[n];return t},A_=function(t,e,n){var i,r,s,o,a,l,c,u=T_({},n._gsap),h=n.style;for(r in u.svg?(s=n.getAttribute(\\\\\\\"transform\\\\\\\"),n.setAttribute(\\\\\\\"transform\\\\\\\",\\\\\\\"\\\\\\\"),h[Gp]=e,i=p_(n,1),Qp(n,Gp),n.setAttribute(\\\\\\\"transform\\\\\\\",s)):(s=getComputedStyle(n)[Gp],h[Gp]=e,i=p_(n,1),h[Gp]=s),bp)(s=u[r])!==(o=i[r])&&\\\\\\\"perspective,force3D,transformOrigin,svgOrigin\\\\\\\".indexOf(r)<0&&(a=Kh(s)!==(c=Kh(o))?e_(n,r,s,c):parseFloat(s),l=parseFloat(o),t._pt=new cp(t._pt,i,r,a,l-a,Np),t._pt.u=c||0,t._props.push(r));T_(i,u)};vh(\\\\\\\"padding,margin,Width,Radius\\\\\\\",(function(t,e){var n=\\\\\\\"Top\\\\\\\",i=\\\\\\\"Right\\\\\\\",r=\\\\\\\"Bottom\\\\\\\",s=\\\\\\\"Left\\\\\\\",o=(e<3?[n,i,r,s]:[n+s,n+i,r+i,r+s]).map((function(n){return e<2?t+n:\\\\\\\"border\\\\\\\"+n+t}));o_[e>1?\\\\\\\"border\\\\\\\"+t:t]=function(t,e,n,i,r){var s,a;if(arguments.length<4)return s=o.map((function(e){return n_(t,e,n)})),5===(a=s.join(\\\\\\\" \\\\\\\")).split(s[0]).length?s[0]:a;s=(i+\\\\\\\"\\\\\\\").split(\\\\\\\" \\\\\\\"),a={},o.forEach((function(t,e){return a[t]=s[e]=s[e]||s[(e-1)/2|0]})),t.init(e,a,r)}}));var E_,M_,S_,C_={name:\\\\\\\"css\\\\\\\",register:Xp,targetTest:function(t){return t.style&&t.nodeType},init:function(t,e,n,i,r){var s,o,a,l,c,u,h,d,p,_,m,f,g,v,y,x,b,w,T,A=this._props,E=t.style,M=n.vars.startAt;for(h in gp||Xp(),e)if(\\\\\\\"autoRound\\\\\\\"!==h&&(o=e[h],!uh[h]||!jd(h,e,n,i,t,r)))if(c=typeof o,u=o_[h],\\\\\\\"function\\\\\\\"===c&&(c=typeof(o=o.call(n,i,t,r))),\\\\\\\"string\\\\\\\"===c&&~o.indexOf(\\\\\\\"random(\\\\\\\")&&(o=ud(o)),u)u(this,t,h,o,n)&&(y=1);else if(\\\\\\\"--\\\\\\\"===h.substr(0,2))s=(getComputedStyle(t).getPropertyValue(h)+\\\\\\\"\\\\\\\").trim(),o+=\\\\\\\"\\\\\\\",wd.lastIndex=0,wd.test(s)||(d=Kh(s),p=Kh(o)),p?d!==p&&(s=e_(t,h,s,p)+p):d&&(o+=d),this.add(E,\\\\\\\"setProperty\\\\\\\",s,o,i,r,0,0,h);else if(\\\\\\\"undefined\\\\\\\"!==c){if(M&&h in M?(s=\\\\\\\"function\\\\\\\"==typeof M[h]?M[h].call(n,i,t,r):M[h],h in Su.units&&!Kh(s)&&(s+=Su.units[h]),\\\\\\\"=\\\\\\\"===(s+\\\\\\\"\\\\\\\").charAt(1)&&(s=n_(t,h))):s=n_(t,h),l=parseFloat(s),(_=\\\\\\\"string\\\\\\\"===c&&\\\\\\\"=\\\\\\\"===o.charAt(1)?+(o.charAt(0)+\\\\\\\"1\\\\\\\"):0)&&(o=o.substr(2)),a=parseFloat(o),h in Cp&&(\\\\\\\"autoAlpha\\\\\\\"===h&&(1===l&&\\\\\\\"hidden\\\\\\\"===n_(t,\\\\\\\"visibility\\\\\\\")&&a&&(l=0),Kp(this,E,\\\\\\\"visibility\\\\\\\",l?\\\\\\\"inherit\\\\\\\":\\\\\\\"hidden\\\\\\\",a?\\\\\\\"inherit\\\\\\\":\\\\\\\"hidden\\\\\\\",!a)),\\\\\\\"scale\\\\\\\"!==h&&\\\\\\\"transform\\\\\\\"!==h&&~(h=Cp[h]).indexOf(\\\\\\\",\\\\\\\")&&(h=h.split(\\\\\\\",\\\\\\\")[0])),m=h in bp)if(f||((g=t._gsap).renderTransform&&!e.parseTransform||p_(t,e.parseTransform),v=!1!==e.smoothOrigin&&g.smooth,(f=this._pt=new cp(this._pt,E,Gp,0,1,g.renderTransform,g,0,-1)).dep=1),\\\\\\\"scale\\\\\\\"===h)this._pt=new cp(this._pt,g,\\\\\\\"scaleY\\\\\\\",g.scaleY,_?_*a:a-g.scaleY),A.push(\\\\\\\"scaleY\\\\\\\",h),h+=\\\\\\\"X\\\\\\\";else{if(\\\\\\\"transformOrigin\\\\\\\"===h){b=void 0,w=void 0,T=void 0,b=(x=o).split(\\\\\\\" \\\\\\\"),w=b[0],T=b[1]||\\\\\\\"50%\\\\\\\",\\\\\\\"top\\\\\\\"!==w&&\\\\\\\"bottom\\\\\\\"!==w&&\\\\\\\"left\\\\\\\"!==T&&\\\\\\\"right\\\\\\\"!==T||(x=w,w=T,T=x),b[0]=r_[w]||w,b[1]=r_[T]||T,o=b.join(\\\\\\\" \\\\\\\"),g.svg?d_(t,o,0,v,0,this):((p=parseFloat(o.split(\\\\\\\" \\\\\\\")[2])||0)!==g.zOrigin&&Kp(this,g,\\\\\\\"zOrigin\\\\\\\",g.zOrigin,p),Kp(this,E,h,__(s),__(o)));continue}if(\\\\\\\"svgOrigin\\\\\\\"===h){d_(t,o,1,v,0,this);continue}if(h in l_){w_(this,g,h,l,o,_);continue}if(\\\\\\\"smoothOrigin\\\\\\\"===h){Kp(this,g,\\\\\\\"smooth\\\\\\\",g.smooth,o);continue}if(\\\\\\\"force3D\\\\\\\"===h){g[h]=o;continue}if(\\\\\\\"transform\\\\\\\"===h){A_(this,o,t);continue}}else h in E||(h=qp(h)||h);if(m||(a||0===a)&&(l||0===l)&&!Sp.test(o)&&h in E)a||(a=0),(d=(s+\\\\\\\"\\\\\\\").substr((l+\\\\\\\"\\\\\\\").length))!==(p=Kh(o)||(h in Su.units?Su.units[h]:d))&&(l=e_(t,h,s,p)),this._pt=new cp(this._pt,m?g:E,h,l,_?_*a:a-l,m||\\\\\\\"px\\\\\\\"!==p&&\\\\\\\"zIndex\\\\\\\"!==h||!1===e.autoRound?Np:Rp),this._pt.u=p||0,d!==p&&(this._pt.b=s,this._pt.r=Op);else if(h in E)i_.call(this,t,h,s,o);else{if(!(h in t)){ih(h,o);continue}this.add(t,h,t[h],o,i,r)}A.push(h)}y&&lp(this)},get:n_,aliases:Cp,getSetter:function(t,e,n){var i=Cp[e];return i&&i.indexOf(\\\\\\\",\\\\\\\")<0&&(e=i),e in bp&&e!==Vp&&(t._gsap.x||n_(t,\\\\\\\"x\\\\\\\"))?n&&yp===n?\\\\\\\"scale\\\\\\\"===e?Bp:kp:(yp=n||{})&&(\\\\\\\"scale\\\\\\\"===e?zp:Up):t.style&&!Uu(t.style[e])?Fp:~e.indexOf(\\\\\\\"-\\\\\\\")?Dp:tp(t,e)},core:{_removeProperty:Qp,_getMatrix:h_}};pp.utils.checkPrefix=qp,S_=vh((E_=\\\\\\\"x,y,z,scale,scaleX,scaleY,xPercent,yPercent\\\\\\\")+\\\\\\\",\\\\\\\"+(M_=\\\\\\\"rotation,rotationX,rotationY,skewX,skewY\\\\\\\")+\\\\\\\",transform,transformOrigin,svgOrigin,force3D,smoothOrigin,transformPerspective\\\\\\\",(function(t){bp[t]=1})),vh(M_,(function(t){Su.units[t]=\\\\\\\"deg\\\\\\\",l_[t]=1})),Cp[S_[13]]=E_+\\\\\\\",\\\\\\\"+M_,vh(\\\\\\\"0:translateX,1:translateY,2:translateZ,8:rotate,8:rotationZ,8:rotateZ,9:rotateX,10:rotateY\\\\\\\",(function(t){var e=t.split(\\\\\\\":\\\\\\\");Cp[e[1]]=S_[e[0]]})),vh(\\\\\\\"x,y,z,top,right,bottom,left,width,height,fontSize,padding,margin,perspective\\\\\\\",(function(t){Su.units[t]=\\\\\\\"px\\\\\\\"})),pp.registerPlugin(C_);var N_,L_=pp.registerPlugin(C_)||pp;L_.core.Tween;!function(t){t.SET=\\\\\\\"set\\\\\\\",t.ADD=\\\\\\\"add\\\\\\\",t.SUBSTRACT=\\\\\\\"substract\\\\\\\"}(N_||(N_={}));const O_=[N_.SET,N_.ADD,N_.SUBSTRACT];class R_{constructor(){this._timeline_builders=[],this._duration=1,this._operation=N_.SET,this._delay=0,this._debug=!1}setDebug(t){this._debug=t}_printDebug(t){this._debug&&console.log(t)}addTimelineBuilder(t){this._timeline_builders.push(t),t.setParent(this)}timelineBuilders(){return this._timeline_builders}setParent(t){this._parent=t}parent(){return this._parent}setTarget(t){this._target=t;for(let e of this._timeline_builders)e.setTarget(t)}target(){return this._target}setDuration(t){if(t>=0){this._duration=t;for(let e of this._timeline_builders)e.setDuration(t)}}duration(){return this._duration}setEasing(t){this._easing=t;for(let e of this._timeline_builders)e.setEasing(t)}easing(){return this._easing}setOperation(t){this._operation=t;for(let e of this._timeline_builders)e.setOperation(t)}operation(){return this._operation}setRepeatParams(t){this._repeat_params=t;for(let e of this._timeline_builders)e.setRepeatParams(t)}repeatParams(){return this._repeat_params}setDelay(t){this._delay=t;for(let e of this._timeline_builders)e.setDelay(t)}delay(){return this._delay}setPosition(t){this._position=t}position(){return this._position}setUpdateCallback(t){this._update_callback=t}updateCallback(){return this._update_callback}clone(){const t=new R_;if(t.setDuration(this._duration),t.setOperation(this._operation),t.setDelay(this._delay),this._target&&t.setTarget(this._target.clone()),this._easing&&t.setEasing(this._easing),this._delay&&t.setDelay(this._delay),this._update_callback&&t.setUpdateCallback(this._update_callback.clone()),this._repeat_params&&t.setRepeatParams({count:this._repeat_params.count,delay:this._repeat_params.delay,yoyo:this._repeat_params.yoyo}),this._property){const e=this._property.name();e&&t.setPropertyName(e);const n=this._property.targetValue();null!=n&&t.setPropertyValue(n)}this._position&&t.setPosition(this._position.clone());for(let e of this._timeline_builders){const n=e.clone();t.addTimelineBuilder(n)}return t}setPropertyName(t){this.property().setName(t)}property(){return this._property=this._property||new hu}propertyName(){return this.property().name()}setPropertyValue(t){this.property().setTargetValue(t)}populate(t){var e;this._printDebug([\\\\\\\"populate\\\\\\\",this,t]);for(let n of this._timeline_builders){const i=L_.timeline();n.setDebug(this._debug),n.populate(i);const r=(null===(e=n.position())||void 0===e?void 0:e.toParameter())||void 0;t.add(i,r)}this._property&&this._target&&(this._property.setDebug(this._debug),this._property.addToTimeline(this,t,this._target))}}const P_=new class extends aa{constructor(){super(...arguments),this.count=oa.INTEGER(1,{range:[1,20],rangeLocked:[!0,!1]})}};class I_ extends iu{constructor(){super(...arguments),this.paramsConfig=P_}static type(){return\\\\\\\"copy\\\\\\\"}initializeNode(){this.io.inputs.setCount(1)}async cook(t){const e=new R_;for(let t=0;t<this.pv.count;t++){this.stampNode().set_global_index(t);const n=await this.containerController.requestInputContainer(0);if(n){const t=n.coreContentCloned();t&&e.addTimelineBuilder(t)}}this.setTimelineBuilder(e)}stamp_value(t){return this.stampNode().value(t)}stampNode(){return this._stamp_node=this._stamp_node||this.create_stamp_node()}create_stamp_node(){const t=new su(this.scene());return this.dirtyController.setForbiddenTriggerNodes([t]),t}}const F_=new class extends aa{constructor(){super(...arguments),this.delay=oa.FLOAT(1)}};class D_ extends iu{constructor(){super(...arguments),this.paramsConfig=F_}static type(){return\\\\\\\"delay\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.delay])}))}))}cook(t){const e=t[0]||new R_;e.setDelay(this.pv.delay),this.setTimelineBuilder(e)}}const k_=new class extends aa{constructor(){super(...arguments),this.duration=oa.FLOAT(1,{range:[0,10],rangeLocked:[!0,!1]})}};class B_ extends iu{constructor(){super(...arguments),this.paramsConfig=k_}static type(){return\\\\\\\"duration\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.duration])}))}))}cook(t){const e=t[0]||new R_;e.setDuration(this.pv.duration),this.setTimelineBuilder(e)}}const z_=new class extends aa{constructor(){super(...arguments),this.name=oa.INTEGER(lu.indexOf(ou.POWER4),{menu:{entries:lu.map(((t,e)=>({name:t,value:e})))}}),this.inOut=oa.INTEGER(uu.indexOf(cu.OUT),{menu:{entries:uu.map(((t,e)=>({name:t,value:e})))}})}};class U_ extends iu{constructor(){super(...arguments),this.paramsConfig=z_}static type(){return\\\\\\\"easing\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.name,this.p.inOut],(()=>this.easing_full_name()))}))}))}easing_full_name(){const t=lu[this.pv.name];if(t==ou.NONE)return t;return`${t}.${uu[this.pv.inOut]}`}cook(t){const e=t[0]||new R_,n=this.easing_full_name();e.setEasing(n),this.setTimelineBuilder(e)}}var G_;!function(t){t.RELATIVE=\\\\\\\"relative\\\\\\\",t.ABSOLUTE=\\\\\\\"absolute\\\\\\\"}(G_||(G_={}));const V_=[G_.RELATIVE,G_.ABSOLUTE];var H_;!function(t){t.START=\\\\\\\"start\\\\\\\",t.END=\\\\\\\"end\\\\\\\"}(H_||(H_={}));const j_=[H_.START,H_.END];class W_{constructor(){this._mode=G_.RELATIVE,this._relativeTo=H_.END,this._offset=0}clone(){const t=new W_;return t.setMode(this._mode),t.setRelativeTo(this._relativeTo),t.setOffset(this._offset),t}setMode(t){this._mode=t}mode(){return this._mode}setRelativeTo(t){this._relativeTo=t}relativeTo(){return this._relativeTo}setOffset(t){this._offset=t}offset(){return this._offset}toParameter(){switch(this._mode){case G_.RELATIVE:return this._relative_position_param();case G_.ABSOLUTE:return this._absolutePositionParam()}ar.unreachable(this._mode)}_relative_position_param(){switch(this._relativeTo){case H_.END:return this._offsetString();case H_.START:return`<${this._offset}`}ar.unreachable(this._relativeTo)}_absolutePositionParam(){return this._offset}_offsetString(){return this._offset>0?`+=${this._offset}`:`-=${Math.abs(this._offset)}`}}var q_;!function(t){t.ALL_TOGETHER=\\\\\\\"play all together\\\\\\\",t.ONE_AT_A_TIME=\\\\\\\"play one at a time\\\\\\\"}(q_||(q_={}));const X_=[q_.ALL_TOGETHER,q_.ONE_AT_A_TIME];const Y_=new class extends aa{constructor(){super(...arguments),this.mode=oa.INTEGER(0,{menu:{entries:X_.map(((t,e)=>({name:t,value:e})))}}),this.offset=oa.FLOAT(0,{range:[-1,1]}),this.overridePositions=oa.BOOLEAN(0),this.inputsCount=oa.INTEGER(4,{range:[1,32],rangeLocked:[!0,!1],callback:t=>{$_.PARAM_CALLBACK_setInputsCount(t)}})}};class $_ extends iu{constructor(){super(...arguments),this.paramsConfig=Y_}static type(){return\\\\\\\"merge\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,4),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.mode],(()=>X_[this.pv.mode]))})),this.params.addOnSceneLoadHook(\\\\\\\"update inputs\\\\\\\",(()=>{this._callbackUpdateInputsCount()}))}))}cook(t){const e=new R_;let n=0;for(let i of t)i&&(n>0&&this._update_timeline_builder(i),e.addTimelineBuilder(i),n++);this.setTimelineBuilder(e)}_update_timeline_builder(t){const e=X_[this.pv.mode];switch(e){case q_.ALL_TOGETHER:return this._set_play_all_together(t);case q_.ONE_AT_A_TIME:return this._set_play_one_at_a_time(t)}ar.unreachable(e)}_set_play_all_together(t){let e=t.position();e&&!this.pv.overridePositions||(e=new W_,e.setMode(G_.RELATIVE),e.setRelativeTo(H_.START),e.setOffset(this.pv.offset),t.setPosition(e))}_set_play_one_at_a_time(t){let e=t.position();e&&!this.pv.overridePositions||(e=new W_,e.setMode(G_.RELATIVE),e.setRelativeTo(H_.END),e.setOffset(this.pv.offset),t.setPosition(e))}_callbackUpdateInputsCount(){this.io.inputs.setCount(1,this.pv.inputsCount),this.emit(Ei.INPUTS_UPDATED)}static PARAM_CALLBACK_setInputsCount(t){t._callbackUpdateInputsCount()}}const J_=new class extends aa{constructor(){super(...arguments),this.play=oa.BUTTON(null,{callback:t=>{Z_.PARAM_CALLBACK_play(t)}}),this.pause=oa.BUTTON(null,{callback:t=>{Z_.PARAM_CALLBACK_pause(t)}}),this.debug=oa.BOOLEAN(0)}};class Z_ extends iu{constructor(){super(...arguments),this.paramsConfig=J_}static type(){return\\\\\\\"null\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}cook(t){const e=t[0]||new R_;this.setTimelineBuilder(e)}async play(){return new Promise((async t=>{const e=await this.compute();e&&(this._timeline_builder=e.coreContent(),this._timeline_builder&&(this._timeline&&this._timeline.kill(),this._timeline=L_.timeline({onComplete:t}),this.pv.debug&&console.log(`play from '${this.path()}'`),this._timeline_builder.setDebug(this.pv.debug),this._timeline_builder.populate(this._timeline)))}))}async pause(){this._timeline&&this._timeline.pause()}static PARAM_CALLBACK_play(t){t.play()}static PARAM_CALLBACK_pause(t){t.pause()}}const Q_=new class extends aa{constructor(){super(...arguments),this.operation=oa.INTEGER(0,{menu:{entries:O_.map(((t,e)=>({value:e,name:t})))}})}};class K_ extends iu{constructor(){super(...arguments),this.paramsConfig=Q_}static type(){return\\\\\\\"operation\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.operation],(()=>O_[this.pv.operation]))}))}))}cook(t){const e=t[0]||new R_;e.setOperation(O_[this.pv.operation]),this.setTimelineBuilder(e)}}const tm=new class extends aa{constructor(){super(...arguments),this.mode=oa.INTEGER(0,{menu:{entries:V_.map(((t,e)=>({name:t,value:e})))}}),this.relativeTo=oa.INTEGER(0,{menu:{entries:j_.map(((t,e)=>({name:t,value:e})))}}),this.offset=oa.FLOAT(0)}};class em extends iu{constructor(){super(...arguments),this.paramsConfig=tm}static type(){return\\\\\\\"position\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.mode,this.p.relativeTo,this.p.offset],(()=>{switch(V_[this.pv.mode]){case G_.RELATIVE:return this._relative_label();case G_.ABSOLUTE:return this._absolute_label()}}))}))}))}_relative_label(){const t=this.pv.offset>0?\\\\\\\"after\\\\\\\":\\\\\\\"before\\\\\\\",e=j_[this.pv.relativeTo];return`${Math.abs(this.pv.offset)} ${t} ${e}`}_absolute_label(){return\\\\\\\"absolute\\\\\\\"}cook(t){const e=t[0]||new R_,n=new W_;n.setMode(V_[this.pv.mode]),n.setRelativeTo(j_[this.pv.relativeTo]),n.setOffset(this.pv.offset),e.setPosition(n),this.setTimelineBuilder(e)}}const nm=new class extends aa{constructor(){super(...arguments),this.name=oa.STRING(\\\\\\\"position\\\\\\\")}};class im extends iu{constructor(){super(...arguments),this.paramsConfig=nm}static type(){return\\\\\\\"propertyName\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.name])}))}))}cook(t){const e=t[0]||new R_;e.setPropertyName(this.pv.name),this.setTimelineBuilder(e)}}var rm;!function(t){t.CUSTOM=\\\\\\\"custom\\\\\\\",t.FROM_SCENE_GRAPH=\\\\\\\"from scene graph\\\\\\\",t.FROM_NODE=\\\\\\\"from node\\\\\\\"}(rm||(rm={}));const sm=[rm.CUSTOM,rm.FROM_SCENE_GRAPH,rm.FROM_NODE],om=sm.indexOf(rm.CUSTOM),am=sm.indexOf(rm.FROM_SCENE_GRAPH),lm=sm.indexOf(rm.FROM_NODE);const cm=new class extends aa{constructor(){super(...arguments),this.mode=oa.INTEGER(om,{menu:{entries:sm.map(((t,e)=>({name:t,value:e})))}}),this.nodePath=oa.NODE_PATH(\\\\\\\"\\\\\\\",{visibleIf:{mode:lm}}),this.objectMask=oa.STRING(\\\\\\\"*geo1\\\\\\\",{visibleIf:{mode:am}}),this.printResolve=oa.BUTTON(null,{visibleIf:{mode:am},callback:t=>{um.PARAM_CALLBACK_print_resolve(t)}}),this.overridePropertyName=oa.BOOLEAN(0,{visibleIf:[{mode:am},{mode:lm}]}),this.propertyName=oa.STRING(\\\\\\\"\\\\\\\",{visibleIf:[{overridePropertyName:!0,mode:am},{overridePropertyName:!0,mode:lm}]}),this.size=oa.INTEGER(3,{range:[1,4],rangeLocked:[!0,!0],visibleIf:{mode:om}}),this.value1=oa.FLOAT(0,{visibleIf:{mode:om,size:1}}),this.value2=oa.VECTOR2([0,0],{visibleIf:{mode:om,size:2}}),this.value3=oa.VECTOR3([0,0,0],{visibleIf:{mode:om,size:3}}),this.value4=oa.VECTOR4([0,0,0,0],{visibleIf:{mode:om,size:4}})}};class um extends iu{constructor(){super(...arguments),this.paramsConfig=cm}static type(){return\\\\\\\"propertyValue\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1)}async cook(t){const e=t[0]||new R_;await this._prepare_timeline_builder(e),this.setTimelineBuilder(e)}setMode(t){this.p.mode.set(sm.indexOf(t))}async _prepare_timeline_builder(t){const e=sm[this.pv.mode];switch(e){case rm.CUSTOM:return this._prepare_timebuilder_custom(t);case rm.FROM_SCENE_GRAPH:return this._prepare_timebuilder_from_scene_graph(t);case rm.FROM_NODE:return await this._prepare_timebuilder_from_node(t)}ar.unreachable(e)}_prepare_timebuilder_custom(t){const e=[this.pv.value1,this.pv.value2.clone(),this.pv.value3.clone(),this.pv.value4.clone()][this.pv.size-1];t.setPropertyValue(e)}_prepare_timebuilder_from_scene_graph(t){const e=this.pv.overridePropertyName?this.pv.propertyName:t.propertyName();if(!e)return;const n=this._foundObjectFromSceneGraph();if(n){const i=n[e];i&&(m.isNumber(i)||m.isVector(i)||i instanceof au.a)&&t.setPropertyValue(i)}}async _prepare_timebuilder_from_node(t){const e=this.pv.overridePropertyName?this.pv.propertyName:t.propertyName();if(!e)return;const n=this.pv.nodePath.node();if(!n)return;const i=n.params.get(e);if(!i)return;i.isDirty()&&await i.compute();const r=i.value;r&&(m.isNumber(r)||m.isVector(r))&&t.setPropertyValue(r)}static PARAM_CALLBACK_print_resolve(t){t.printResolve()}_foundObjectFromSceneGraph(){return this.scene().findObjectByMask(this.pv.objectMask)}printResolve(){const t=this._foundObjectFromSceneGraph();console.log(t)}}const hm=new class extends aa{constructor(){super(...arguments),this.unlimited=oa.BOOLEAN(0),this.count=oa.INTEGER(1,{range:[0,10],visibleIf:{unlimited:0}}),this.delay=oa.FLOAT(0),this.yoyo=oa.BOOLEAN(0)}};class dm extends iu{constructor(){super(...arguments),this.paramsConfig=hm}static type(){return\\\\\\\"repeat\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.unlimited,this.p.count,this.p.yoyo],(()=>`${`${this.p.unlimited?\\\\\\\"unlimited\\\\\\\":this.pv.count}`} (yoyo: ${this.pv.yoyo})`))}))}))}_repeat_params(){return{count:this.pv.unlimited?-1:this.pv.count,delay:this.pv.delay,yoyo:this.pv.yoyo}}cook(t){const e=t[0]||new R_;e.setRepeatParams(this._repeat_params()),this.setTimelineBuilder(e)}}const pm=new class extends aa{constructor(){super(...arguments),this.input=oa.INTEGER(0,{range:[0,3],rangeLocked:[!0,!0]})}};class _m extends iu{constructor(){super(...arguments),this.paramsConfig=pm}static type(){return\\\\\\\"switch\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,4)}cook(t){const e=t[this.pv.input];e?this.setTimelineBuilder(e):this.states.error.set(`input ${this.pv.input} is not valid`)}}class mm{constructor(t,e){this._scene=t,this._options=e}clone(){return new mm(this._scene,this._options)}objects(){const t=this._options.objectMask;if(t)return this._scene.objectsByMask(t)}node(){if(!this._options.node)return;const t=this._options.node;return t.relativeTo.node(t.path)}}class fm{constructor(){this._update_matrix=!1}clone(){const t=new fm;return t.setUpdateMatrix(this._update_matrix),t}setUpdateMatrix(t){this._update_matrix=t}updateMatrix(){return this._update_matrix}}var gm;!function(t){t.SCENE_GRAPH=\\\\\\\"scene graph\\\\\\\",t.NODE=\\\\\\\"node\\\\\\\"}(gm||(gm={}));const vm=[gm.SCENE_GRAPH,gm.NODE],ym=vm.indexOf(gm.SCENE_GRAPH),xm=vm.indexOf(gm.NODE);const bm=new class extends aa{constructor(){super(...arguments),this.type=oa.INTEGER(ym,{menu:{entries:vm.map(((t,e)=>({name:t,value:e})))}}),this.nodePath=oa.OPERATOR_PATH(\\\\\\\"\\\\\\\",{visibleIf:{type:xm}}),this.objectMask=oa.STRING(\\\\\\\"/geo*\\\\\\\",{visibleIf:{type:ym}}),this.updateMatrix=oa.BOOLEAN(0,{visibleIf:{type:ym}}),this.printResolve=oa.BUTTON(null,{callback:(t,e)=>{wm.PARAM_CALLBACK_print_resolve(t)}})}};class wm extends iu{constructor(){super(...arguments),this.paramsConfig=bm}static type(){return\\\\\\\"target\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.type,this.p.nodePath,this.p.objectMask],(()=>{const t=vm[this.pv.type];switch(t){case gm.NODE:return this.pv.nodePath;case gm.SCENE_GRAPH:return this.pv.objectMask}ar.unreachable(t)}))}))}))}cook(t){const e=t[0]||new R_,n=this._create_target(e);e.setTarget(n),this._set_update_callback(e),this.setTimelineBuilder(e)}setTargetType(t){this.p.type.set(vm.indexOf(t))}_create_target(t){const e=vm[this.pv.type];switch(e){case gm.NODE:return new mm(this.scene(),{node:{path:this.pv.nodePath,relativeTo:this}});case gm.SCENE_GRAPH:return new mm(this.scene(),{objectMask:this.pv.objectMask})}ar.unreachable(e)}_set_update_callback(t){const e=vm[this.pv.type];let n=t.updateCallback();switch(e){case gm.NODE:return;case gm.SCENE_GRAPH:return void(this.pv.updateMatrix&&(n=n||new fm,n.setUpdateMatrix(this.pv.updateMatrix),t.setUpdateCallback(n)))}ar.unreachable(e)}static PARAM_CALLBACK_print_resolve(t){t.print_resolve()}print_resolve(){const t=vm[this.pv.type],e=new R_,n=this._create_target(e);switch(t){case gm.NODE:return console.log(n.node());case gm.SCENE_GRAPH:return console.log(n.objects())}}}class Tm extends ia{static context(){return Ki.ANIM}cook(){this.cookController.endCook()}}class Am extends Tm{}class Em extends Am{constructor(){super(...arguments),this._children_controller_context=Ki.ANIM}static type(){return tr.ANIM}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class Mm extends Am{constructor(){super(...arguments),this._children_controller_context=Ki.COP}static type(){return tr.COP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class Sm extends Am{constructor(){super(...arguments),this._children_controller_context=Ki.EVENT}static type(){return tr.EVENT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class Cm extends Am{constructor(){super(...arguments),this._children_controller_context=Ki.MAT}static type(){return tr.MAT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}const Nm={dependsOnDisplayNode:!0};class Lm{constructor(t,e,n=Nm){this.node=t,this.options=n,this._initialized=!1,this._display_node=void 0,this._graph_node=new Ai(t.scene(),\\\\\\\"DisplayNodeController\\\\\\\"),this._graph_node.node=t,this._on_display_node_remove_callback=e.onDisplayNodeRemove,this._on_display_node_set_callback=e.onDisplayNodeSet,this._on_display_node_update_callback=e.onDisplayNodeUpdate}dispose(){this._graph_node.dispose()}displayNode(){return this._display_node}initializeNode(){this._initialized?console.error(\\\\\\\"display node controller already initialed\\\\\\\",this.node):(this._initialized=!0,this.node.lifecycle.add_on_child_add_hook((t=>{var e,n;this._display_node||null===(n=null===(e=t.flags)||void 0===e?void 0:e.display)||void 0===n||n.set(!0)})),this.node.lifecycle.add_on_child_remove_hook((t=>{var e,n,i;if(t.graphNodeId()==(null===(e=this._display_node)||void 0===e?void 0:e.graphNodeId())){const t=this.node.children(),e=t[t.length-1];e?null===(i=null===(n=e.flags)||void 0===n?void 0:n.display)||void 0===i||i.set(!0):this.setDisplayNode(void 0)}})),this._graph_node.dirtyController.addPostDirtyHook(\\\\\\\"_request_display_node_container\\\\\\\",(()=>{this._on_display_node_update_callback&&this._on_display_node_update_callback()})))}async setDisplayNode(t){if(this._initialized||console.error(\\\\\\\"display node controller not initialized\\\\\\\",this.node),this._display_node!=t){const e=this._display_node;e&&(e.flags.display.set(!1),this.options.dependsOnDisplayNode&&this._graph_node.removeGraphInput(e),this._on_display_node_remove_callback&&this._on_display_node_remove_callback()),this._display_node=t,this._display_node&&(this.options.dependsOnDisplayNode&&this._graph_node.addGraphInput(this._display_node),this._on_display_node_set_callback&&this._on_display_node_set_callback())}}}class Om{constructor(t=!0){this.autoStart=t,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=Rm(),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 t=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){const e=Rm();t=(e-this.oldTime)/1e3,this.oldTime=e,this.elapsedTime+=t}return t}}function Rm(){return(\\\\\\\"undefined\\\\\\\"==typeof performance?Date:performance).now()}var Pm={uniforms:{tDiffuse:{value:null},opacity:{value:1}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform float opacity;\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec4 texel = texture2D( tDiffuse, vUv );\\\\n\\\\t\\\\t\\\\tgl_FragColor = opacity * texel;\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};class Im{constructor(){this.enabled=!0,this.needsSwap=!0,this.clear=!1,this.renderToScreen=!1}setSize(){}render(){console.error(\\\\\\\"THREE.Pass: .render() must be implemented in derived pass.\\\\\\\")}}const Fm=new st.a(-1,1,1,-1,0,1),Dm=new S.a;Dm.setAttribute(\\\\\\\"position\\\\\\\",new C.c([-1,3,0,-1,-1,0,3,-1,0],3)),Dm.setAttribute(\\\\\\\"uv\\\\\\\",new C.c([0,2,0,0,2,0],2));class km{constructor(t){this._mesh=new k.a(Dm,t)}dispose(){this._mesh.geometry.dispose()}render(t){t.render(this._mesh,Fm)}get material(){return this._mesh.material}set material(t){this._mesh.material=t}}class Bm extends Im{constructor(t,e){super(),this.textureID=void 0!==e?e:\\\\\\\"tDiffuse\\\\\\\",t instanceof F?(this.uniforms=t.uniforms,this.material=t):t&&(this.uniforms=I.clone(t.uniforms),this.material=new F({defines:Object.assign({},t.defines),uniforms:this.uniforms,vertexShader:t.vertexShader,fragmentShader:t.fragmentShader})),this.fsQuad=new km(this.material)}render(t,e,n){this.uniforms[this.textureID]&&(this.uniforms[this.textureID].value=n.texture),this.fsQuad.material=this.material,this.renderToScreen?(t.setRenderTarget(null),this.fsQuad.render(t)):(t.setRenderTarget(e),this.clear&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),this.fsQuad.render(t))}}class zm extends Im{constructor(t,e){super(),this.scene=t,this.camera=e,this.clear=!0,this.needsSwap=!1,this.inverse=!1}render(t,e,n){const i=t.getContext(),r=t.state;let s,o;r.buffers.color.setMask(!1),r.buffers.depth.setMask(!1),r.buffers.color.setLocked(!0),r.buffers.depth.setLocked(!0),this.inverse?(s=0,o=1):(s=1,o=0),r.buffers.stencil.setTest(!0),r.buffers.stencil.setOp(i.REPLACE,i.REPLACE,i.REPLACE),r.buffers.stencil.setFunc(i.ALWAYS,s,4294967295),r.buffers.stencil.setClear(o),r.buffers.stencil.setLocked(!0),t.setRenderTarget(n),this.clear&&t.clear(),t.render(this.scene,this.camera),t.setRenderTarget(e),this.clear&&t.clear(),t.render(this.scene,this.camera),r.buffers.color.setLocked(!1),r.buffers.depth.setLocked(!1),r.buffers.stencil.setLocked(!1),r.buffers.stencil.setFunc(i.EQUAL,1,4294967295),r.buffers.stencil.setOp(i.KEEP,i.KEEP,i.KEEP),r.buffers.stencil.setLocked(!0)}}class Um extends Im{constructor(){super(),this.needsSwap=!1}render(t){t.state.buffers.stencil.setLocked(!1),t.state.buffers.stencil.setTest(!1)}}class Gm{constructor(t,e){if(this.renderer=t,void 0===e){const n={minFilter:w.V,magFilter:w.V,format:w.Ib},i=t.getSize(new d.a);this._pixelRatio=t.getPixelRatio(),this._width=i.width,this._height=i.height,(e=new Z(this._width*this._pixelRatio,this._height*this._pixelRatio,n)).texture.name=\\\\\\\"EffectComposer.rt1\\\\\\\"}else this._pixelRatio=1,this._width=e.width,this._height=e.height;this.renderTarget1=e,this.renderTarget2=e.clone(),this.renderTarget2.texture.name=\\\\\\\"EffectComposer.rt2\\\\\\\",this.writeBuffer=this.renderTarget1,this.readBuffer=this.renderTarget2,this.renderToScreen=!0,this.passes=[],void 0===Pm&&console.error(\\\\\\\"THREE.EffectComposer relies on CopyShader\\\\\\\"),void 0===Bm&&console.error(\\\\\\\"THREE.EffectComposer relies on ShaderPass\\\\\\\"),this.copyPass=new Bm(Pm),this.clock=new Om}swapBuffers(){const t=this.readBuffer;this.readBuffer=this.writeBuffer,this.writeBuffer=t}addPass(t){this.passes.push(t),t.setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)}insertPass(t,e){this.passes.splice(e,0,t),t.setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)}removePass(t){const e=this.passes.indexOf(t);-1!==e&&this.passes.splice(e,1)}isLastEnabledPass(t){for(let e=t+1;e<this.passes.length;e++)if(this.passes[e].enabled)return!1;return!0}render(t){void 0===t&&(t=this.clock.getDelta());const e=this.renderer.getRenderTarget();let n=!1;for(let e=0,i=this.passes.length;e<i;e++){const i=this.passes[e];if(!1!==i.enabled){if(i.renderToScreen=this.renderToScreen&&this.isLastEnabledPass(e),i.render(this.renderer,this.writeBuffer,this.readBuffer,t,n),i.needsSwap){if(n){const e=this.renderer.getContext(),n=this.renderer.state.buffers.stencil;n.setFunc(e.NOTEQUAL,1,4294967295),this.copyPass.render(this.renderer,this.writeBuffer,this.readBuffer,t),n.setFunc(e.EQUAL,1,4294967295)}this.swapBuffers()}void 0!==zm&&(i instanceof zm?n=!0:i instanceof Um&&(n=!1))}}this.renderer.setRenderTarget(e)}reset(t){if(void 0===t){const e=this.renderer.getSize(new d.a);this._pixelRatio=this.renderer.getPixelRatio(),this._width=e.width,this._height=e.height,(t=this.renderTarget1.clone()).setSize(this._width*this._pixelRatio,this._height*this._pixelRatio)}this.renderTarget1.dispose(),this.renderTarget2.dispose(),this.renderTarget1=t,this.renderTarget2=t.clone(),this.writeBuffer=this.renderTarget1,this.readBuffer=this.renderTarget2}setSize(t,e){this._width=t,this._height=e;const n=this._width*this._pixelRatio,i=this._height*this._pixelRatio;this.renderTarget1.setSize(n,i),this.renderTarget2.setSize(n,i);for(let t=0;t<this.passes.length;t++)this.passes[t].setSize(n,i)}setPixelRatio(t){this._pixelRatio=t,this.setSize(this._width,this._height)}}new st.a(-1,1,1,-1,0,1);const Vm=new S.a;Vm.setAttribute(\\\\\\\"position\\\\\\\",new C.c([-1,3,0,-1,-1,0,3,-1,0],3)),Vm.setAttribute(\\\\\\\"uv\\\\\\\",new C.c([0,2,0,0,2,0],2));class Hm extends Im{constructor(t,e,n,i,r){super(),this.scene=t,this.camera=e,this.overrideMaterial=n,this.clearColor=i,this.clearAlpha=void 0!==r?r:0,this.clear=!0,this.clearDepth=!1,this.needsSwap=!1,this._oldClearColor=new D.a}render(t,e,n){const i=t.autoClear;let r,s;t.autoClear=!1,void 0!==this.overrideMaterial&&(s=this.scene.overrideMaterial,this.scene.overrideMaterial=this.overrideMaterial),this.clearColor&&(t.getClearColor(this._oldClearColor),r=t.getClearAlpha(),t.setClearColor(this.clearColor,this.clearAlpha)),this.clearDepth&&t.clearDepth(),t.setRenderTarget(this.renderToScreen?null:n),this.clear&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),t.render(this.scene,this.camera),this.clearColor&&t.setClearColor(this._oldClearColor,r),void 0!==this.overrideMaterial&&(this.scene.overrideMaterial=s),t.autoClear=i}}const jm=[{LinearFilter:w.V},{NearestFilter:w.ob}],Wm=[{NearestFilter:w.ob},{NearestMipMapNearestFilter:w.qb},{NearestMipMapLinearFilter:w.pb},{LinearFilter:w.V},{LinearMipMapNearestFilter:w.X},{LinearMipMapLinearFilter:w.W}],qm=Object.values(jm[0])[0],Xm=Object.values(Wm[5])[0],Ym=jm.map((t=>({name:Object.keys(t)[0],value:Object.values(t)[0]}))),$m=Wm.map((t=>({name:Object.keys(t)[0],value:Object.values(t)[0]})));class Jm extends aa{constructor(){super(...arguments),this.prependRenderPass=oa.BOOLEAN(1),this.useRenderTarget=oa.BOOLEAN(1),this.tmagFilter=oa.BOOLEAN(0,{visibleIf:{useRenderTarget:1}}),this.magFilter=oa.INTEGER(qm,{visibleIf:{useRenderTarget:1,tmagFilter:1},menu:{entries:Ym}}),this.tminFilter=oa.BOOLEAN(0,{visibleIf:{useRenderTarget:1}}),this.minFilter=oa.INTEGER(Xm,{visibleIf:{useRenderTarget:1,tminFilter:1},menu:{entries:$m}}),this.stencilBuffer=oa.BOOLEAN(0,{visibleIf:{useRenderTarget:1}}),this.sampling=oa.INTEGER(1,{range:[1,4],rangeLocked:[!0,!1]})}}class Zm{constructor(t){this.node=t,this._renderer_size=new d.a}displayNodeControllerCallbacks(){return{onDisplayNodeRemove:()=>{},onDisplayNodeSet:()=>{this.node.setDirty()},onDisplayNodeUpdate:()=>{this.node.setDirty()}}}createEffectsComposer(t){const e=t.renderer;let n;if(this.node.pv.useRenderTarget){const t=this._create_render_target(e);n=new Gm(e,t)}else n=new Gm(e);return n.setPixelRatio(window.devicePixelRatio*this.node.pv.sampling),this._build_passes(n,t),n}_create_render_target(t){let e;t.autoClear=!1;const n={format:w.ic,stencilBuffer:this.node.pv.stencilBuffer};return this.node.pv.tminFilter&&(n.minFilter=this.node.pv.minFilter),this.node.pv.tmagFilter&&(n.magFilter=this.node.pv.magFilter),t.getDrawingBufferSize(this._renderer_size),e=ai.renderersController.renderTarget(this._renderer_size.x,this._renderer_size.y,n),e}_build_passes(t,e){if(this.node.pv.prependRenderPass){const n=new Hm(e.scene,e.camera);t.addPass(n)}const n=this.node.displayNodeController.displayNode();n&&n.setupComposer({composer:t,camera:e.camera,resolution:e.resolution,camera_node:e.camera_node,scene:e.scene,requester:e.requester})}}class Qm extends Tm{constructor(){super(...arguments),this.paramsConfig=new Jm,this.effectsComposerController=new Zm(this),this.displayNodeController=new Lm(this,this.effectsComposerController.displayNodeControllerCallbacks()),this._children_controller_context=Ki.POST}static type(){return tr.POST}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class Km extends Am{constructor(){super(...arguments),this._children_controller_context=Ki.ROP}static type(){return tr.ROP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}var tf=n(43);const ef=\\\\\\\"input texture\\\\\\\",nf=[ef,ef,ef,ef];for(var rf=new Uint16Array(32),sf=0;sf<32;sf++)rf[sf]=28898;const of=new mo.a(rf,32,1,w.gb,w.M);class af extends ia{constructor(t){super(t,\\\\\\\"BaseCopNode\\\\\\\"),this.flags=new Bi(this)}static context(){return Ki.COP}static displayedInputNames(){return nf}initializeBaseNode(){this.io.outputs.setHasOneOutput()}setTexture(t){t.name=this.path();const e=this.containerController.container().texture();if(e){if(e.uuid!=t.uuid){const n=Object.keys(t);for(let i of n)e[i]=t[i];e.needsUpdate=!0}this._setContainer(e)}else this._setContainer(t)}_clearTexture(){this._setContainer(of)}}class lf extends af{}class cf{constructor(){this._id=cf.__next_id++}id(){return this._id}handle_globals_node(t,e,n){}}cf.__next_id=0;class uf{static any(t){return m.isString(t)?t:m.isBoolean(t)?`${t}`:m.isNumber(t)?`${sr.ensureFloat(t)}`:m.isArray(t)?this.numeric_array(t):t instanceof d.a||t instanceof p.a||t instanceof _.a||t instanceof D.a?this.numeric_array(t.toArray()):`ThreeToGl error: unknown value type '${t}'`}static numeric_array(t){const e=new Array(t.length);for(let n=0;n<t.length;n++)e[n]=`${sr.ensureFloat(t[n])}`;return`${`vec${t.length}`}(${e.join(\\\\\\\", \\\\\\\")})`}static vector4(t){if(m.isString(t))return t;return`vec4(${t.toArray().map((t=>`${sr.ensureFloat(t)}`)).join(\\\\\\\", \\\\\\\")})`}static vector3(t){if(m.isString(t))return t;return`vec3(${t.toArray().map((t=>`${sr.ensureFloat(t)}`)).join(\\\\\\\", \\\\\\\")})`}static vector2(t){if(m.isString(t))return t;return`vec2(${t.toArray().map((t=>`${sr.ensureFloat(t)}`)).join(\\\\\\\", \\\\\\\")})`}static vector3_float(t,e){return m.isNumber(e)&&(e=sr.ensureFloat(e)),`vec4(${this.vector3(t)}, ${e})`}static float4(t,e,n,i){return m.isNumber(t)&&(t=sr.ensureFloat(t)),m.isNumber(e)&&(e=sr.ensureFloat(e)),m.isNumber(n)&&(n=sr.ensureFloat(n)),m.isNumber(i)&&(i=sr.ensureFloat(i)),`vec4(${t}, ${e}, ${n}, ${i})`}static float3(t,e,n){return m.isNumber(t)&&(t=sr.ensureFloat(t)),m.isNumber(e)&&(e=sr.ensureFloat(e)),m.isNumber(n)&&(n=sr.ensureFloat(n)),`vec3(${t}, ${e}, ${n})`}static float2(t,e){return m.isNumber(t)&&(t=sr.ensureFloat(t)),m.isNumber(e)&&(e=sr.ensureFloat(e)),`vec2(${t}, ${e})`}static float(t){if(m.isNumber(t))return sr.ensureFloat(t);{const e=parseFloat(t);return m.isNaN(e)?t:sr.ensureFloat(e)}}static integer(t){if(m.isNumber(t))return sr.ensureInteger(t);{const e=parseInt(t);return m.isNaN(e)?t:sr.ensureInteger(e)}}static bool(t){return m.isBoolean(t)?`${t}`:t}}const hf=/\\\\/+/g;class df extends ia{static context(){return Ki.GL}initializeBaseNode(){this.uiData.setLayoutHorizontal(),this.io.connections.initInputs(),this.io.connection_points.spare_params.initializeNode()}cook(){console.warn(\\\\\\\"gl nodes should never cook\\\\\\\")}_set_mat_to_recompile(){var t,e;null===(e=null===(t=this.material_node)||void 0===t?void 0:t.assemblerController)||void 0===e||e.set_compilation_required_and_dirty(this)}get material_node(){var t;const e=this.parent();if(e)return e.context()==Ki.GL?null===(t=e)||void 0===t?void 0:t.material_node:e}glVarName(t){return`v_POLY_${this.path(this.material_node).replace(hf,\\\\\\\"_\\\\\\\")}_${t}`}variableForInputParam(t){return this.variableForInput(t.name())}variableForInput(t){var e;const n=this.io.inputs.get_input_index(t),i=this.io.connections.inputConnection(n);if(i){const e=i.node_src,n=e.io.outputs.namedOutputConnectionPoints()[i.output_index];if(n){const t=n.name();return e.glVarName(t)}throw console.warn(`no output called '${t}' for gl node ${e.path()}`),\\\\\\\"variable_for_input ERROR\\\\\\\"}if(this.params.has(t))return uf.any(null===(e=this.params.get(t))||void 0===e?void 0:e.value);{const t=this.io.inputs.namedInputConnectionPoints()[n];return uf.any(t.init_value)}}setLines(t){}reset_code(){var t;null===(t=this._param_configs_controller)||void 0===t||t.reset()}setParamConfigs(){}param_configs(){var t;return null===(t=this._param_configs_controller)||void 0===t?void 0:t.list()}paramsGenerating(){return!1}paramDefaultValue(t){return null}}const pf=new class extends aa{};class _f extends df{constructor(){super(...arguments),this.paramsConfig=pf}}const mf=[Do.FLOAT,Do.VEC2,Do.VEC3,Do.VEC4];const ff=new class extends aa{constructor(){super(...arguments),this.name=oa.STRING(\\\\\\\"\\\\\\\"),this.type=oa.INTEGER(0,{menu:{entries:mf.map(((t,e)=>({name:t,value:e})))}}),this.texportWhenConnected=oa.BOOLEAN(0,{hidden:!0}),this.exportWhenConnected=oa.BOOLEAN(0,{visibleIf:{texportWhenConnected:1}})}};class gf extends df{constructor(){super(...arguments),this.paramsConfig=ff,this._on_create_set_name_if_none_bound=this._on_create_set_name_if_none.bind(this),this._bound_setExportWhenConnectedStatus=this._setExportWhenConnectedStatus.bind(this)}static type(){return ir.ATTRIBUTE}initializeNode(){this.addPostDirtyHook(\\\\\\\"_set_mat_to_recompile\\\\\\\",this._set_mat_to_recompile_if_is_exporting.bind(this)),this.lifecycle.add_on_create_hook(this._on_create_set_name_if_none_bound),this.io.connection_points.initializeNode(),this.io.connection_points.set_expected_input_types_function((()=>{var t,e;return(null===(e=null===(t=this.material_node)||void 0===t?void 0:t.assemblerController)||void 0===e?void 0:e.allow_attribute_exports())?[mf[this.pv.type]]:[]})),this.io.connection_points.set_input_name_function((t=>gf.INPUT_NAME)),this.io.connection_points.set_expected_output_types_function((()=>[mf[this.pv.type]])),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.name,this.p.exportWhenConnected],(()=>this.pv.exportWhenConnected?`${this.pv.name} (EXPORTED)`:this.pv.name))}))})),this.lifecycle.add_on_add_hook(this._bound_setExportWhenConnectedStatus),this.params.addOnSceneLoadHook(\\\\\\\"prepare params\\\\\\\",this._bound_setExportWhenConnectedStatus)}_setExportWhenConnectedStatus(){var t,e;(null===(e=null===(t=this.material_node)||void 0===t?void 0:t.assemblerController)||void 0===e?void 0:e.allow_attribute_exports())&&this.p.texportWhenConnected.set(1)}setAttribSize(t){this.p.type.set(t-1)}get input_name(){return gf.INPUT_NAME}get output_name(){return gf.OUTPUT_NAME}setLines(t){t.assembler().set_node_lines_attribute(this,t)}get attribute_name(){return this.pv.name.trim()}gl_type(){return this.io.outputs.namedOutputConnectionPoints()[0].type()}set_gl_type(t){this.p.type.set(mf.indexOf(t))}connected_input_node(){return this.io.inputs.named_input(gf.INPUT_NAME)}connected_input_connection_point(){return this.io.inputs.named_input_connection_point(gf.INPUT_NAME)}output_connection_point(){return this.io.outputs.namedOutputConnectionPointsByName(this.output_name)}isImporting(){return this.io.outputs.used_output_names().length>0}isExporting(){if(this.pv.exportWhenConnected){return null!=this.io.inputs.named_input(gf.INPUT_NAME)}return!1}_set_mat_to_recompile_if_is_exporting(){this.isExporting()&&this._set_mat_to_recompile()}_on_create_set_name_if_none(){\\\\\\\"\\\\\\\"==this.pv.name&&this.p.name.set(this.name())}}gf.INPUT_NAME=\\\\\\\"in\\\\\\\",gf.OUTPUT_NAME=\\\\\\\"val\\\\\\\";class vf{constructor(t=[]){this._definitions=t,this._errored=!1}get errored(){return this._errored}get error_message(){return this._error_message}uniq(){const t=new Map,e=[];for(let n of this._definitions)if(!this._errored){const i=n.name(),r=t.get(i);r?r.data_type!=n.data_type&&(this._errored=!0,this._error_message=`attempt to create '${n.name()}' with types '${n.data_type}' by node '${n.node.path()}', when there is already an existing with type ${r.data_type} from node '${r.node.path()}'`,console.warn(\\\\\\\"emitting error message:\\\\\\\",this._error_message)):(t.set(i,n),e.push(i))}const n=[];for(let i of e){const e=t.get(i);e&&n.push(e)}return n}}var yf,xf;!function(t){t.ATTRIBUTE=\\\\\\\"attribute\\\\\\\",t.FUNCTION=\\\\\\\"function\\\\\\\",t.UNIFORM=\\\\\\\"uniform\\\\\\\",t.VARYING=\\\\\\\"varying\\\\\\\"}(yf||(yf={}));class bf{constructor(t,e,n,i){this._definition_type=t,this._data_type=e,this._node=n,this._name=i}get definition_type(){return this._definition_type}get data_type(){return this._data_type}get node(){return this._node}name(){return this._name}collection_instance(){return new vf}}class wf extends bf{constructor(t,e,n){super(yf.ATTRIBUTE,e,t,n),this._node=t,this._data_type=e,this._name=n}get line(){return`attribute ${this.data_type} ${this.name()}`}}class Tf extends bf{constructor(t,e){super(yf.FUNCTION,Do.FLOAT,t,e),this._node=t,this._name=e}get line(){return this.name()}}class Af extends bf{constructor(t,e,n){super(yf.UNIFORM,e,t,n),this._node=t,this._data_type=e,this._name=n}get line(){return`uniform ${this.data_type} ${this.name()}`}}class Ef extends bf{constructor(t,e,n){super(yf.VARYING,e,t,n),this._node=t,this._data_type=e,this._name=n}get line(){return`varying ${this.data_type} ${this.name()}`}}!function(t){t.VERTEX=\\\\\\\"vertex\\\\\\\",t.FRAGMENT=\\\\\\\"fragment\\\\\\\",t.LEAVES_FROM_NODES_SHADER=\\\\\\\"leaves_from_nodes_shader\\\\\\\"}(xf||(xf={}));const Mf={position:\\\\\\\"vec3( position )\\\\\\\"};class Sf extends cf{handle_globals_node(t,e,n){var i,r;const s=t.io.outputs.namedOutputConnectionPointsByName(e);if(!s)return;const o=t.glVarName(e),a=s.type(),l=new Ef(t,a,o);n.addDefinitions(t,[l]);const c=null===(r=null===(i=t.material_node)||void 0===i?void 0:i.assemblerController)||void 0===r?void 0:r.assembler;if(!c)return;const u=c.shader_config(n.current_shader_name);if(!u)return;const h=u.dependencies(),d=[],p=`${o} = modelMatrix * vec4( position, 1.0 )`,_=`${o} = normalize( mat3( modelMatrix[0].xyz, modelMatrix[1].xyz, modelMatrix[2].xyz ) * normal )`;switch(e){case\\\\\\\"worldPosition\\\\\\\":d.push(p);break;case\\\\\\\"worldNormal\\\\\\\":d.push(_);break;default:d.push(`${o} = ${a}(${e})`)}for(let e of h)n.addDefinitions(t,[l],e),n.addBodyLines(t,d,e);0==h.length&&n.addBodyLines(t,d)}static variable_config_default(t){return Mf[t]}variable_config_default(t){return Sf.variable_config_default(t)}read_attribute(t,e,n,i){return Sf.read_attribute(t,e,n,i)}static read_attribute(t,e,n,i){var r,s;Sf.PRE_DEFINED_ATTRIBUTES.indexOf(n)<0&&i.addDefinitions(t,[new wf(t,e,n)],xf.VERTEX);const o=i.current_shader_name;switch(o){case xf.VERTEX:return n;case xf.FRAGMENT:{if(!(t instanceof gf))return;const a=\\\\\\\"varying_\\\\\\\"+t.glVarName(t.output_name),l=new Ef(t,e,a),c=new Map;c.set(xf.FRAGMENT,[]);const h=new Map;h.set(xf.FRAGMENT,[]),u.pushOnArrayAtEntry(c,o,l);const d=`${a} = ${e}(${n})`,p=null===(s=null===(r=t.material_node)||void 0===r?void 0:r.assemblerController)||void 0===s?void 0:s.assembler.shader_config(o);if(p){const e=p.dependencies();for(let t of e)u.pushOnArrayAtEntry(c,t,l),u.pushOnArrayAtEntry(h,t,d);c.forEach(((e,n)=>{i.addDefinitions(t,e,n)})),h.forEach(((e,n)=>{i.addBodyLines(t,e,n)}))}return a}}}handle_attribute_node(t,e,n,i){return Sf.read_attribute(t,e,n,i)}}Sf.PRE_DEFINED_ATTRIBUTES=[\\\\\\\"position\\\\\\\",\\\\\\\"color\\\\\\\",\\\\\\\"normal\\\\\\\",\\\\\\\"uv\\\\\\\",\\\\\\\"uv2\\\\\\\",\\\\\\\"morphTarget0\\\\\\\",\\\\\\\"morphTarget1\\\\\\\",\\\\\\\"morphTarget2\\\\\\\",\\\\\\\"morphTarget3\\\\\\\",\\\\\\\"skinIndex\\\\\\\",\\\\\\\"skinWeight\\\\\\\"],Sf.IF_RULE={uv:\\\\\\\"defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\\\\\\\"};const Cf=[Do.FLOAT,Do.VEC2,Do.VEC3,Do.VEC4];const Nf=new class extends aa{constructor(){super(...arguments),this.name=oa.STRING(\\\\\\\"\\\\\\\"),this.type=oa.INTEGER(0,{menu:{entries:Cf.map(((t,e)=>({name:t,value:e})))}})}};class Lf extends df{constructor(){super(...arguments),this.paramsConfig=Nf,this._on_create_set_name_if_none_bound=this._on_create_set_name_if_none.bind(this)}static type(){return\\\\\\\"varyingWrite\\\\\\\"}initializeNode(){this.addPostDirtyHook(\\\\\\\"_set_mat_to_recompile\\\\\\\",this._set_mat_to_recompile.bind(this)),this.lifecycle.add_on_create_hook(this._on_create_set_name_if_none_bound),this.io.connection_points.initializeNode(),this.io.connection_points.set_input_name_function((()=>this.input_name)),this.io.connection_points.set_expected_input_types_function((()=>[Cf[this.pv.type]])),this.io.connection_points.set_expected_output_types_function((()=>[])),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.name])}))}))}get input_name(){return Lf.INPUT_NAME}setLines(t){if(t.current_shader_name==xf.VERTEX){const e=this.gl_type();if(!e)return;const n=this.pv.name,i=new Ef(this,e,n),r=`${n} = ${uf.any(this.variableForInput(Lf.INPUT_NAME))}`;t.addDefinitions(this,[i],xf.VERTEX),t.addBodyLines(this,[r],xf.VERTEX)}}get attribute_name(){return this.pv.name.trim()}gl_type(){const t=this.io.inputs.namedInputConnectionPoints()[0];if(t)return t.type()}set_gl_type(t){this.p.type.set(Cf.indexOf(t))}_on_create_set_name_if_none(){\\\\\\\"\\\\\\\"==this.pv.name&&this.p.name.set(this.name())}}Lf.INPUT_NAME=\\\\\\\"vertex\\\\\\\";class Of{static findOutputNodes(t){return t.nodesByType(\\\\\\\"output\\\\\\\")}static findParamGeneratingNodes(t){var e;const n=[];return null===(e=t.childrenController)||void 0===e||e.traverse_children((t=>{const e=t;e.paramsGenerating()&&n.push(e)})),n}static findVaryingNodes(t){return t.nodesByType(Lf.type())}static findAttributeExportNodes(t){return t.nodesByType(gf.type()).filter((t=>t.isExporting()))}}class Rf{static overlay(t,e){return new Promise(((n,i)=>{let r=document.createElement(\\\\\\\"canvas\\\\\\\");r.width=Math.max(t.width,e.width),r.height=Math.max(t.height,e.height);let s=r.getContext(\\\\\\\"2d\\\\\\\");s.drawImage(t,0,0,t.width,t.height),s.drawImage(e,0,0,e.width,e.height);const o=r.toDataURL(\\\\\\\"image/png\\\\\\\"),a=new Image;a.onload=()=>{n(a)},a.src=o}))}static create_white_image(t,e){return new Promise(((n,i)=>{let r=document.createElement(\\\\\\\"canvas\\\\\\\");r.width=t,r.height=e;let s=r.getContext(\\\\\\\"2d\\\\\\\");s.beginPath(),s.rect(0,0,t,e),s.fillStyle=\\\\\\\"white\\\\\\\",s.fill();const o=r.toDataURL(\\\\\\\"image/png\\\\\\\"),a=new Image;a.onload=()=>{n(a)},a.src=o}))}static make_square(t){return new Promise(((e,n)=>{let i=document.createElement(\\\\\\\"canvas\\\\\\\");const r=Math.min(t.width,t.height),s=t.width/t.height;i.width=r,i.height=r;let o=i.getContext(\\\\\\\"2d\\\\\\\");const a=s>1,l=a?(t.width-r)/2:(t.height-r)/2;a?o.drawImage(t,l,0,r,r,0,0,r,r):o.drawImage(t,0,l,r,r,0,0,r,r);const c=i.toDataURL(\\\\\\\"image/png\\\\\\\"),u=new Image;u.onload=()=>{e(u)},u.src=c}))}static async image_to_blob(t){return new Promise((function(e,n){try{let i=new XMLHttpRequest;i.open(\\\\\\\"GET\\\\\\\",t.src),i.responseType=\\\\\\\"blob\\\\\\\",i.onerror=function(){n(\\\\\\\"Network error.\\\\\\\")},i.onload=function(){200===i.status?e(i.response):n(\\\\\\\"Loading error:\\\\\\\"+i.statusText)},i.send()}catch(t){n(t.message)}}))}static data_from_url(t){return new Promise(((e,n)=>{const i=new Image;i.crossOrigin=\\\\\\\"Anonymous\\\\\\\",i.onload=()=>{const t=this.data_from_image(i);e(t)},i.src=t}))}static data_from_image(t){const e=document.createElement(\\\\\\\"canvas\\\\\\\");e.width=t.width,e.height=t.height;const n=e.getContext(\\\\\\\"2d\\\\\\\");return n.drawImage(t,0,0,t.width,t.height),n.getImageData(0,0,t.width,t.height)}}var Pf;!function(t){t.Uint8Array=\\\\\\\"Uint8Array\\\\\\\",t.Uint8ClampedArray=\\\\\\\"Uint8ClampedArray\\\\\\\",t.Float32Array=\\\\\\\"Float32Array\\\\\\\"}(Pf||(Pf={}));class If{constructor(t){this.buffer_type=t}from_render_target(t,e){return this._data_texture&&this._same_dimensions(e.texture)||(this._data_texture=this._create_data_texture(e.texture)),this._copy_to_data_texture(t,e),this._data_texture}from_texture(t){const e=Rf.data_from_image(t.image);this._data_texture&&this._same_dimensions(t)||(this._data_texture=this._create_data_texture(t));const n=e.width*e.height,i=e.data,r=this._data_texture.image.data,s=4*n;for(let t=0;t<s;t++)r[t]=i[t];return this._data_texture}get data_texture(){return this._data_texture}reset(){this._data_texture=void 0}_copy_to_data_texture(t,e){const n=e.texture.image;this._data_texture=this._data_texture||this._create_data_texture(e.texture),t.readRenderTargetPixels(e,0,0,n.width,n.height,this._data_texture.image.data),this._data_texture.needsUpdate=!0}_create_data_texture(t){const e=t.image,n=this._create_pixel_buffer(e.width,e.height);return new mo.a(n,e.width,e.height,t.format,t.type,t.mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.anisotropy,t.encoding)}_create_pixel_buffer(t,e){const n=t*e*4;switch(this.buffer_type){case Pf.Uint8Array:return new Uint8Array(n);case Pf.Uint8ClampedArray:return new Uint8ClampedArray(n);case Pf.Float32Array:return new Float32Array(n)}ar.unreachable(this.buffer_type)}_same_dimensions(t){if(this._data_texture){const e=this._data_texture.image.width==t.image.width,n=this._data_texture.image.height==t.image.height;return e&&n}return!0}}new class extends aa{};class Ff{constructor(t){this.node=t}async renderer(){return await this.cameraRenderer()}reset(){var t;null===(t=this._renderer)||void 0===t||t.dispose(),this._renderer=void 0}async cameraRenderer(){let t=ai.renderersController.firstRenderer();return t||await ai.renderersController.waitForRenderer()}save_state(){this.make_linear()}make_linear(){}restore_state(){}}var Df=n(21),kf=n(13);class Bf extends O.a{constructor(t){super(),this.type=\\\\\\\"ShadowMaterial\\\\\\\",this.color=new D.a(0),this.transparent=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this}}Bf.prototype.isShadowMaterial=!0;class zf extends O.a{constructor(t){super(),this.type=\\\\\\\"SpriteMaterial\\\\\\\",this.color=new D.a(16777215),this.map=null,this.alphaMap=null,this.rotation=0,this.sizeAttenuation=!0,this.transparent=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.alphaMap=t.alphaMap,this.rotation=t.rotation,this.sizeAttenuation=t.sizeAttenuation,this}}zf.prototype.isSpriteMaterial=!0;var Uf=n(65),Gf=n(56);class Vf extends O.a{constructor(t){super(),this.defines={TOON:\\\\\\\"\\\\\\\"},this.type=\\\\\\\"MeshToonMaterial\\\\\\\",this.color=new D.a(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new D.a(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=w.Uc,this.normalScale=new d.a(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\\\\\\\"round\\\\\\\",this.wireframeLinejoin=\\\\\\\"round\\\\\\\",this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.gradientMap=t.gradientMap,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this}}Vf.prototype.isMeshToonMaterial=!0;class Hf extends O.a{constructor(t){super(),this.type=\\\\\\\"MeshNormalMaterial\\\\\\\",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=w.Uc,this.normalScale=new d.a(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.flatShading=t.flatShading,this}}Hf.prototype.isMeshNormalMaterial=!0;class jf extends O.a{constructor(t){super(),this.defines={MATCAP:\\\\\\\"\\\\\\\"},this.type=\\\\\\\"MeshMatcapMaterial\\\\\\\",this.color=new D.a(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=w.Uc,this.normalScale=new d.a(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.defines={MATCAP:\\\\\\\"\\\\\\\"},this.color.copy(t.color),this.matcap=t.matcap,this.map=t.map,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.flatShading=t.flatShading,this}}jf.prototype.isMeshMatcapMaterial=!0;class Wf extends wr.a{constructor(t){super(),this.type=\\\\\\\"LineDashedMaterial\\\\\\\",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(t)}copy(t){return super.copy(t),this.scale=t.scale,this.dashSize=t.dashSize,this.gapSize=t.gapSize,this}}Wf.prototype.isLineDashedMaterial=!0;class qf extends kf.a{constructor(t){super(t),this.textures={}}load(t,e,n,i){const r=this,s=new Df.a(r.manager);s.setPath(r.path),s.setRequestHeader(r.requestHeader),s.setWithCredentials(r.withCredentials),s.load(t,(function(n){try{e(r.parse(JSON.parse(n)))}catch(e){i?i(e):console.error(e),r.manager.itemError(t)}}),n,i)}parse(t){const e=this.textures;function n(t){return void 0===e[t]&&console.warn(\\\\\\\"THREE.MaterialLoader: Undefined texture\\\\\\\",t),e[t]}const r=new i[t.type];if(void 0!==t.uuid&&(r.uuid=t.uuid),void 0!==t.name&&(r.name=t.name),void 0!==t.color&&void 0!==r.color&&r.color.setHex(t.color),void 0!==t.roughness&&(r.roughness=t.roughness),void 0!==t.metalness&&(r.metalness=t.metalness),void 0!==t.sheen&&(r.sheen=t.sheen),void 0!==t.sheenTint&&(r.sheenTint=(new D.a).setHex(t.sheenTint)),void 0!==t.sheenRoughness&&(r.sheenRoughness=t.sheenRoughness),void 0!==t.emissive&&void 0!==r.emissive&&r.emissive.setHex(t.emissive),void 0!==t.specular&&void 0!==r.specular&&r.specular.setHex(t.specular),void 0!==t.specularIntensity&&(r.specularIntensity=t.specularIntensity),void 0!==t.specularTint&&void 0!==r.specularTint&&r.specularTint.setHex(t.specularTint),void 0!==t.shininess&&(r.shininess=t.shininess),void 0!==t.clearcoat&&(r.clearcoat=t.clearcoat),void 0!==t.clearcoatRoughness&&(r.clearcoatRoughness=t.clearcoatRoughness),void 0!==t.transmission&&(r.transmission=t.transmission),void 0!==t.thickness&&(r.thickness=t.thickness),void 0!==t.attenuationDistance&&(r.attenuationDistance=t.attenuationDistance),void 0!==t.attenuationTint&&void 0!==r.attenuationTint&&r.attenuationTint.setHex(t.attenuationTint),void 0!==t.fog&&(r.fog=t.fog),void 0!==t.flatShading&&(r.flatShading=t.flatShading),void 0!==t.blending&&(r.blending=t.blending),void 0!==t.combine&&(r.combine=t.combine),void 0!==t.side&&(r.side=t.side),void 0!==t.shadowSide&&(r.shadowSide=t.shadowSide),void 0!==t.opacity&&(r.opacity=t.opacity),void 0!==t.format&&(r.format=t.format),void 0!==t.transparent&&(r.transparent=t.transparent),void 0!==t.alphaTest&&(r.alphaTest=t.alphaTest),void 0!==t.depthTest&&(r.depthTest=t.depthTest),void 0!==t.depthWrite&&(r.depthWrite=t.depthWrite),void 0!==t.colorWrite&&(r.colorWrite=t.colorWrite),void 0!==t.stencilWrite&&(r.stencilWrite=t.stencilWrite),void 0!==t.stencilWriteMask&&(r.stencilWriteMask=t.stencilWriteMask),void 0!==t.stencilFunc&&(r.stencilFunc=t.stencilFunc),void 0!==t.stencilRef&&(r.stencilRef=t.stencilRef),void 0!==t.stencilFuncMask&&(r.stencilFuncMask=t.stencilFuncMask),void 0!==t.stencilFail&&(r.stencilFail=t.stencilFail),void 0!==t.stencilZFail&&(r.stencilZFail=t.stencilZFail),void 0!==t.stencilZPass&&(r.stencilZPass=t.stencilZPass),void 0!==t.wireframe&&(r.wireframe=t.wireframe),void 0!==t.wireframeLinewidth&&(r.wireframeLinewidth=t.wireframeLinewidth),void 0!==t.wireframeLinecap&&(r.wireframeLinecap=t.wireframeLinecap),void 0!==t.wireframeLinejoin&&(r.wireframeLinejoin=t.wireframeLinejoin),void 0!==t.rotation&&(r.rotation=t.rotation),1!==t.linewidth&&(r.linewidth=t.linewidth),void 0!==t.dashSize&&(r.dashSize=t.dashSize),void 0!==t.gapSize&&(r.gapSize=t.gapSize),void 0!==t.scale&&(r.scale=t.scale),void 0!==t.polygonOffset&&(r.polygonOffset=t.polygonOffset),void 0!==t.polygonOffsetFactor&&(r.polygonOffsetFactor=t.polygonOffsetFactor),void 0!==t.polygonOffsetUnits&&(r.polygonOffsetUnits=t.polygonOffsetUnits),void 0!==t.dithering&&(r.dithering=t.dithering),void 0!==t.alphaToCoverage&&(r.alphaToCoverage=t.alphaToCoverage),void 0!==t.premultipliedAlpha&&(r.premultipliedAlpha=t.premultipliedAlpha),void 0!==t.visible&&(r.visible=t.visible),void 0!==t.toneMapped&&(r.toneMapped=t.toneMapped),void 0!==t.userData&&(r.userData=t.userData),void 0!==t.vertexColors&&(\\\\\\\"number\\\\\\\"==typeof t.vertexColors?r.vertexColors=t.vertexColors>0:r.vertexColors=t.vertexColors),void 0!==t.uniforms)for(const e in t.uniforms){const i=t.uniforms[e];switch(r.uniforms[e]={},i.type){case\\\\\\\"t\\\\\\\":r.uniforms[e].value=n(i.value);break;case\\\\\\\"c\\\\\\\":r.uniforms[e].value=(new D.a).setHex(i.value);break;case\\\\\\\"v2\\\\\\\":r.uniforms[e].value=(new d.a).fromArray(i.value);break;case\\\\\\\"v3\\\\\\\":r.uniforms[e].value=(new p.a).fromArray(i.value);break;case\\\\\\\"v4\\\\\\\":r.uniforms[e].value=(new _.a).fromArray(i.value);break;case\\\\\\\"m3\\\\\\\":r.uniforms[e].value=(new U.a).fromArray(i.value);break;case\\\\\\\"m4\\\\\\\":r.uniforms[e].value=(new A.a).fromArray(i.value);break;default:r.uniforms[e].value=i.value}}if(void 0!==t.defines&&(r.defines=t.defines),void 0!==t.vertexShader&&(r.vertexShader=t.vertexShader),void 0!==t.fragmentShader&&(r.fragmentShader=t.fragmentShader),void 0!==t.extensions)for(const e in t.extensions)r.extensions[e]=t.extensions[e];if(void 0!==t.shading&&(r.flatShading=1===t.shading),void 0!==t.size&&(r.size=t.size),void 0!==t.sizeAttenuation&&(r.sizeAttenuation=t.sizeAttenuation),void 0!==t.map&&(r.map=n(t.map)),void 0!==t.matcap&&(r.matcap=n(t.matcap)),void 0!==t.alphaMap&&(r.alphaMap=n(t.alphaMap)),void 0!==t.bumpMap&&(r.bumpMap=n(t.bumpMap)),void 0!==t.bumpScale&&(r.bumpScale=t.bumpScale),void 0!==t.normalMap&&(r.normalMap=n(t.normalMap)),void 0!==t.normalMapType&&(r.normalMapType=t.normalMapType),void 0!==t.normalScale){let e=t.normalScale;!1===Array.isArray(e)&&(e=[e,e]),r.normalScale=(new d.a).fromArray(e)}return void 0!==t.displacementMap&&(r.displacementMap=n(t.displacementMap)),void 0!==t.displacementScale&&(r.displacementScale=t.displacementScale),void 0!==t.displacementBias&&(r.displacementBias=t.displacementBias),void 0!==t.roughnessMap&&(r.roughnessMap=n(t.roughnessMap)),void 0!==t.metalnessMap&&(r.metalnessMap=n(t.metalnessMap)),void 0!==t.emissiveMap&&(r.emissiveMap=n(t.emissiveMap)),void 0!==t.emissiveIntensity&&(r.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap&&(r.specularMap=n(t.specularMap)),void 0!==t.specularIntensityMap&&(r.specularIntensityMap=n(t.specularIntensityMap)),void 0!==t.specularTintMap&&(r.specularTintMap=n(t.specularTintMap)),void 0!==t.envMap&&(r.envMap=n(t.envMap)),void 0!==t.envMapIntensity&&(r.envMapIntensity=t.envMapIntensity),void 0!==t.reflectivity&&(r.reflectivity=t.reflectivity),void 0!==t.refractionRatio&&(r.refractionRatio=t.refractionRatio),void 0!==t.lightMap&&(r.lightMap=n(t.lightMap)),void 0!==t.lightMapIntensity&&(r.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap&&(r.aoMap=n(t.aoMap)),void 0!==t.aoMapIntensity&&(r.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap&&(r.gradientMap=n(t.gradientMap)),void 0!==t.clearcoatMap&&(r.clearcoatMap=n(t.clearcoatMap)),void 0!==t.clearcoatRoughnessMap&&(r.clearcoatRoughnessMap=n(t.clearcoatRoughnessMap)),void 0!==t.clearcoatNormalMap&&(r.clearcoatNormalMap=n(t.clearcoatNormalMap)),void 0!==t.clearcoatNormalScale&&(r.clearcoatNormalScale=(new d.a).fromArray(t.clearcoatNormalScale)),void 0!==t.transmissionMap&&(r.transmissionMap=n(t.transmissionMap)),void 0!==t.thicknessMap&&(r.thicknessMap=n(t.thicknessMap)),r}setTextures(t){return this.textures=t,this}}class Xf{constructor(t){this.node=t,this._found_uniform_texture_by_id=new Map,this._found_uniform_textures_id_by_uniform_name=new Map,this._found_param_texture_by_id=new Map,this._found_param_textures_id_by_uniform_name=new Map}toJSON(){}load(t){}_materialToJson(t,e){let n;this._unassignTextures(t);try{n=t.toJSON({}),n&&(n.shadowSide=t.shadowSide,n.colorWrite=t.colorWrite)}catch(e){console.error(\\\\\\\"failed to save material data\\\\\\\"),console.log(t)}return n&&null!=t.lights&&(n.lights=t.lights),n&&(n.uuid=`${e.node.path()}-${e.suffix}`),this._reassignTextures(t),n}_unassignTextures(t){this._found_uniform_texture_by_id.clear(),this._found_uniform_textures_id_by_uniform_name.clear(),this._found_param_texture_by_id.clear(),this._found_param_textures_id_by_uniform_name.clear();const e=t.uniforms,n=Object.keys(e);for(let t of n){const n=e[t].value;if(n&&n.uuid){const i=n;this._found_uniform_texture_by_id.set(i.uuid,n),this._found_uniform_textures_id_by_uniform_name.set(t,i.uuid),e[t].value=null}}const i=Object.keys(t);for(let e of i){const n=t[e];if(n&&n.uuid){const i=n;this._found_param_texture_by_id.set(i.uuid,i),this._found_param_textures_id_by_uniform_name.set(e,i.uuid),t[e]=null}}}_reassignTextures(t){const e=[],n=[];this._found_uniform_textures_id_by_uniform_name.forEach(((t,n)=>{e.push(n)})),this._found_param_textures_id_by_uniform_name.forEach(((t,e)=>{n.push(e)}));const i=t.uniforms;for(let t of e){const e=this._found_uniform_textures_id_by_uniform_name.get(t);if(e){const n=this._found_uniform_texture_by_id.get(e);n&&(i[t].value=n)}}for(let e of n){const n=this._found_param_textures_id_by_uniform_name.get(e);if(n){const i=this._found_param_texture_by_id.get(n);i&&(t[e]=i)}}}_loadMaterial(t){t.color=void 0;const e=(new qf).parse(t);t.shadowSide&&(e.shadowSide=t.shadowSide),null!=t.lights&&(e.lights=t.lights);const n=e.uniforms.uv2Transform;n&&this.mat4ToMat3(n);const i=e.uniforms.uvTransform;return i&&this.mat4ToMat3(i),e}mat4ToMat3(t){const e=t.value;if(null==e.elements[e.elements.length-1]){const n=new U.a;for(let t=0;t<n.elements.length;t++)n.elements[t]=e.elements[t];t.value=n}}}class Yf{constructor(t,e,n){this._type=t,this._name=e,this._default_value=n}static from_param(t){return new Yf(t.type(),t.name(),t.defaultValue())}type(){return this._type}name(){return this._name}get default_value(){return this._default_value}get param_options(){const t=this._callback.bind(this);switch(this._type){case Es.OPERATOR_PATH:return{callback:t,nodeSelection:{context:Ki.COP}};default:return{callback:t}}}_callback(t,e){}}class $f extends Yf{constructor(t,e,n,i){super(t,e,n),this._uniform_name=i}get uniform_name(){return this._uniform_name}get uniform(){return this._uniform=this._uniform||this._create_uniform()}_create_uniform(){return $f.uniform_by_type(this._type)}execute_callback(t,e){this._callback(t,e)}_callback(t,e){$f.callback(e,this.uniform)}static callback(t,e){switch(t.type()){case Es.RAMP:return void(e.value=t.rampTexture());case Es.OPERATOR_PATH:return void $f.set_uniform_value_from_texture(t,e);case Es.NODE_PATH:return void $f.set_uniform_value_from_texture_from_node_path_param(t,e);default:e.value=t.value}}static uniform_by_type(t){switch(t){case Es.BOOLEAN:case Es.BUTTON:return{value:0};case Es.COLOR:return{value:new D.a(0,0,0)};case Es.FLOAT:case Es.FOLDER:case Es.INTEGER:case Es.OPERATOR_PATH:case Es.NODE_PATH:case Es.PARAM_PATH:return{value:0};case Es.RAMP:case Es.STRING:return{value:null};case Es.VECTOR2:return{value:new d.a(0,0)};case Es.VECTOR3:return{value:new p.a(0,0,0)};case Es.VECTOR4:return{value:new _.a(0,0,0,0)}}ar.unreachable(t)}static set_uniform_value_from_texture(t,e){const n=t.found_node();if(n)if(n.isDirty())n.compute().then((t=>{const n=t.texture();e.value=n}));else{const t=n.containerController.container().texture();e.value=t}else e.value=null}static async set_uniform_value_from_texture_from_node_path_param(t,e){t.isDirty()&&await t.compute();const n=t.value.nodeWithContext(Ki.COP);if(n)if(n.isDirty())n.compute().then((t=>{const n=t.texture();e.value=n}));else{const t=n.containerController.container().texture();e.value=t}else e.value=null}set_uniform_value_from_ramp(t,e){e.value=t.rampTexture()}}class Jf extends Xf{constructor(t){super(t),this.node=t}toJSON(){const t=this.node.assemblerController;if(!t)return;const e=[],n=t.assembler.param_configs();for(let t of n)e.push([t.name(),t.uniform_name]);return{fragment_shader:this.node.texture_material.fragmentShader,uniforms:this.node.texture_material.uniforms,param_uniform_pairs:e,uniforms_time_dependent:t.assembler.uniformsTimeDependent(),uniforms_resolution_dependent:t.assembler.uniforms_resolution_dependent()}}load(t){this.node.texture_material.fragmentShader=t.fragment_shader,this.node.texture_material.uniforms=t.uniforms,tg.handle_dependencies(this.node,t.uniforms_time_dependent||!1,t.uniforms);for(let e of t.param_uniform_pairs){const n=this.node.params.get(e[0]),i=t.uniforms[e[1]];n&&i&&n.options.set({callback:()=>{$f.callback(n,i)}})}}}class Zf{static isChrome(){return navigator&&null!=navigator.userAgent&&-1!=navigator.userAgent.indexOf(\\\\\\\"Chrome\\\\\\\")}static isMobile(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}static isiOS(){return/(iPad|iPhone|iPod)/g.test(navigator.userAgent)}static isAndroid(){return/(Android)/g.test(navigator.userAgent)}static isTouchDevice(){var t=document.createElement(\\\\\\\"div\\\\\\\");return t.setAttribute(\\\\\\\"ongesturestart\\\\\\\",\\\\\\\"return;\\\\\\\"),\\\\\\\"function\\\\\\\"==typeof t.ongesturestart}}const Qf=[256,256];const Kf=new class extends aa{constructor(){super(...arguments),this.resolution=oa.VECTOR2(Qf),this.useCameraRenderer=oa.BOOLEAN(0)}};class tg extends af{constructor(){super(...arguments),this.paramsConfig=Kf,this.persisted_config=new Jf(this),this._assembler_controller=this._create_assembler_controller(),this._texture_mesh=new k.a(new L(2,2)),this.texture_material=new F({uniforms:{},vertexShader:\\\\\\\"\\\\nvoid main()\\\\t{\\\\n\\\\tgl_Position = vec4( position, 1.0 );\\\\n}\\\\n\\\\\\\",fragmentShader:\\\\\\\"\\\\\\\"}),this._texture_scene=new fr,this._texture_camera=new tf.a,this._children_controller_context=Ki.GL,this._cook_main_without_inputs_when_dirty_bound=this._cook_main_without_inputs_when_dirty.bind(this)}static type(){return\\\\\\\"builder\\\\\\\"}usedAssembler(){return Hn.GL_TEXTURE}_create_assembler_controller(){const t=ai.assemblersRegister.assembler(this,this.usedAssembler());if(t){const e=new Sf;return t.set_assembler_globals_handler(e),t}}get assemblerController(){return this._assembler_controller}initializeNode(){this._texture_mesh.material=this.texture_material,this._texture_mesh.scale.multiplyScalar(.25),this._texture_scene.add(this._texture_mesh),this._texture_camera.position.z=1,this.addPostDirtyHook(\\\\\\\"_cook_main_without_inputs_when_dirty\\\\\\\",(()=>{setTimeout(this._cook_main_without_inputs_when_dirty_bound,0)}))}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}childrenAllowed(){return this.assemblerController?super.childrenAllowed():(this.scene().markAsReadOnly(this),!1)}async _cook_main_without_inputs_when_dirty(){await this.cookController.cookMainWithoutInputs()}async cook(){this.compileIfRequired(),this.renderOnTarget()}shaders_by_name(){return{fragment:this._fragment_shader}}compileIfRequired(){var t;(null===(t=this.assemblerController)||void 0===t?void 0:t.compileRequired())&&this.compile()}compile(){const t=this.assemblerController;if(!t)return;const e=Of.findOutputNodes(this);if(e.length>1)return void this.states.error.set(\\\\\\\"only one output node allowed\\\\\\\");if(e[0]){const n=e;t.assembler.set_root_nodes(n),t.assembler.update_fragment_shader();const i=t.assembler.fragment_shader(),r=t.assembler.uniforms();i&&r&&(this._fragment_shader=i,this._uniforms=r),tg.handle_dependencies(this,t.assembler.uniformsTimeDependent())}this._fragment_shader&&this._uniforms&&(this.texture_material.fragmentShader=this._fragment_shader,this.texture_material.uniforms=this._uniforms,this.texture_material.needsUpdate=!0,this.texture_material.uniforms.resolution={value:this.pv.resolution}),t.post_compile()}static handle_dependencies(t,e,n){const i=t.scene(),r=`${t.graphNodeId()}`;e?(t.states.timeDependent.forceTimeDependent(),n&&i.uniformsController.addTimeDependentUniformOwner(r,n)):(t.states.timeDependent.unforceTimeDependent(),i.uniformsController.removeTimeDependentUniformOwner(r))}async renderOnTarget(){if(this.createRenderTargetIfRequired(),!this._render_target)return;this._renderer_controller=this._renderer_controller||new Ff(this);const t=await this._renderer_controller.renderer(),e=t.getRenderTarget();if(t.setRenderTarget(this._render_target),t.clear(),t.render(this._texture_scene,this._texture_camera),t.setRenderTarget(e),this._render_target.texture)if(this.pv.useCameraRenderer)this.setTexture(this._render_target.texture);else{this._data_texture_controller=this._data_texture_controller||new If(Pf.Float32Array);const e=this._data_texture_controller.from_render_target(t,this._render_target);this.setTexture(e)}else this.cookController.endCook()}renderTarget(){return this._render_target=this._render_target||this._createRenderTarget(this.pv.resolution.x,this.pv.resolution.y)}createRenderTargetIfRequired(){var t;this._render_target&&this._renderTargetResolutionValid()||(this._render_target=this._createRenderTarget(this.pv.resolution.x,this.pv.resolution.y),null===(t=this._data_texture_controller)||void 0===t||t.reset())}_renderTargetResolutionValid(){if(this._render_target){const t=this._render_target.texture.image;return t.width==this.pv.resolution.x&&t.height==this.pv.resolution.y}return!1}_createRenderTarget(t,e){if(this._render_target){const n=this._render_target.texture.image;if(n.width==t&&n.height==e)return this._render_target}const n=w.n,i=w.n,r=w.V,s=w.ob;var o=new Z(t,e,{wrapS:n,wrapT:i,minFilter:r,magFilter:s,format:w.Ib,type:Zf.isiOS()?w.M:w.G,stencilBuffer:!1,depthBuffer:!1});return ai.warn(\\\\\\\"created render target\\\\\\\",this.path(),t,e),o}}const eg=[{LinearEncoding:w.U},{sRGBEncoding:w.ld},{GammaEncoding:w.J},{RGBEEncoding:w.gc},{LogLuvEncoding:w.bb},{RGBM7Encoding:w.lc},{RGBM16Encoding:w.kc},{RGBDEncoding:w.fc},{BasicDepthPacking:w.j},{RGBADepthPacking:w.Hb}],ng=[{ClampToEdgeWrapping:w.n},{RepeatWrapping:w.wc},{MirroredRepeatWrapping:w.kb}],ig=[{UVMapping:w.Yc},{CubeReflectionMapping:w.o},{CubeRefractionMapping:w.p},{EquirectangularReflectionMapping:w.D},{EquirectangularRefractionMapping:w.E},{CubeUVReflectionMapping:w.q},{CubeUVRefractionMapping:w.r}],rg=[{UnsignedByteType:w.Zc},{ByteType:w.l},{ShortType:w.Mc},{UnsignedShortType:w.fd},{IntType:w.N},{UnsignedIntType:w.bd},{FloatType:w.G},{HalfFloatType:w.M},{UnsignedShort4444Type:w.cd},{UnsignedShort5551Type:w.dd},{UnsignedShort565Type:w.ed},{UnsignedInt248Type:w.ad}],sg=[{AlphaFormat:w.f},{RedFormat:w.tc},{RedIntegerFormat:w.uc},{RGFormat:w.rc},{RGIntegerFormat:w.sc},{RGBFormat:w.ic},{RGBIntegerFormat:w.jc},{RGBAFormat:w.Ib},{RGBAIntegerFormat:w.Jb},{LuminanceFormat:w.gb},{LuminanceAlphaFormat:w.fb},{DepthFormat:w.x},{DepthStencilFormat:w.y}];function og(t){return{cook:!1,callback:e=>{wg[t](e)}}}const ag={ENCODING:w.U,FORMAT:w.Ib,MAPPING:w.Yc,MIN_FILTER:w.V,MAG_FILTER:w.V,TYPE:w.Zc,WRAPPING:w.wc},lg=og(\\\\\\\"PARAM_CALLBACK_update_encoding\\\\\\\"),cg=og(\\\\\\\"PARAM_CALLBACK_update_mapping\\\\\\\"),ug=og(\\\\\\\"PARAM_CALLBACK_update_wrap\\\\\\\"),hg=og(\\\\\\\"PARAM_CALLBACK_update_filter\\\\\\\"),dg=og(\\\\\\\"PARAM_CALLBACK_update_anisotropy\\\\\\\"),pg=og(\\\\\\\"PARAM_CALLBACK_update_flipY\\\\\\\"),_g=og(\\\\\\\"PARAM_CALLBACK_update_transform\\\\\\\"),mg=og(\\\\\\\"PARAM_CALLBACK_update_repeat\\\\\\\"),fg=og(\\\\\\\"PARAM_CALLBACK_update_offset\\\\\\\"),gg=og(\\\\\\\"PARAM_CALLBACK_update_rotation\\\\\\\"),vg=og(\\\\\\\"PARAM_CALLBACK_update_center\\\\\\\"),yg=og(\\\\\\\"PARAM_CALLBACK_update_advanced\\\\\\\");function xg(t){return class extends t{constructor(){super(...arguments),this.tencoding=oa.BOOLEAN(0,{...lg}),this.encoding=oa.INTEGER(ag.ENCODING,{visibleIf:{tencoding:1},menu:{entries:eg.map((t=>({name:Object.keys(t)[0],value:Object.values(t)[0]})))},...lg}),this.tmapping=oa.BOOLEAN(0,{...cg}),this.mapping=oa.INTEGER(ag.MAPPING,{visibleIf:{tmapping:1},menu:{entries:ig.map((t=>({name:Object.keys(t)[0],value:Object.values(t)[0]})))},...cg}),this.twrap=oa.BOOLEAN(0,{...ug}),this.wrapS=oa.INTEGER(ag.WRAPPING,{visibleIf:{twrap:1},menu:{entries:ng.map((t=>({name:Object.keys(t)[0],value:Object.values(t)[0]})))},...ug}),this.wrapT=oa.INTEGER(ag.WRAPPING,{visibleIf:{twrap:1},menu:{entries:ng.map((t=>({name:Object.keys(t)[0],value:Object.values(t)[0]})))},separatorAfter:!0,...ug}),this.tminFilter=oa.BOOLEAN(0,{...hg}),this.minFilter=oa.INTEGER(Xm,{visibleIf:{tminFilter:1},menu:{entries:$m},...hg}),this.tmagFilter=oa.BOOLEAN(0,{...hg}),this.magFilter=oa.INTEGER(qm,{visibleIf:{tmagFilter:1},menu:{entries:Ym},...hg}),this.tanisotropy=oa.BOOLEAN(0,{...dg}),this.useRendererMaxAnisotropy=oa.BOOLEAN(0,{visibleIf:{tanisotropy:1},...dg}),this.anisotropy=oa.INTEGER(2,{visibleIf:{tanisotropy:1,useRendererMaxAnisotropy:0},range:[0,32],rangeLocked:[!0,!1],...dg}),this.tflipY=oa.BOOLEAN(0,{...pg}),this.flipY=oa.BOOLEAN(0,{visibleIf:{tflipY:1},...pg}),this.ttransform=oa.BOOLEAN(0,{..._g}),this.offset=oa.VECTOR2([0,0],{visibleIf:{ttransform:1},...fg}),this.repeat=oa.VECTOR2([1,1],{visibleIf:{ttransform:1},...mg}),this.rotation=oa.FLOAT(0,{range:[-1,1],visibleIf:{ttransform:1},...gg}),this.center=oa.VECTOR2([0,0],{visibleIf:{ttransform:1},...vg}),this.tadvanced=oa.BOOLEAN(0,{...yg}),this.tformat=oa.BOOLEAN(0,{visibleIf:{tadvanced:1},...yg}),this.format=oa.INTEGER(ag.FORMAT,{visibleIf:{tadvanced:1,tformat:1},menu:{entries:sg.map((t=>({name:Object.keys(t)[0],value:Object.values(t)[0]})))},...yg}),this.ttype=oa.BOOLEAN(0,{visibleIf:{tadvanced:1},...yg}),this.type=oa.INTEGER(ag.TYPE,{visibleIf:{tadvanced:1,ttype:1},menu:{entries:rg.map((t=>({name:Object.keys(t)[0],value:Object.values(t)[0]})))},...yg})}}}class bg extends(xg(aa)){}new bg;class wg{constructor(t){this.node=t}async update(t){const e=this.node.pv;this._updateEncoding(t,e),this._updateAdvanced(t,e),this._updateMapping(t,e),this._updateWrap(t,e),this._updateFilter(t,e),this._updateFlip(t,e),await this._updateAnisotropy(t,e),this._updateTransform(t)}_updateEncoding(t,e){e.tencoding?t.encoding=e.encoding:t.encoding=ag.ENCODING,t.needsUpdate=!0}_updateAdvanced(t,e){e.tadvanced&&(e.tformat?t.format=e.format:t.format=ag.FORMAT,e.ttype?t.type=e.type:t.type=ag.TYPE),t.needsUpdate=!0}_updateMapping(t,e){e.tmapping?t.mapping=e.mapping:t.mapping=ag.MAPPING,t.needsUpdate=!0}_updateWrap(t,e){e.twrap?(t.wrapS=e.wrapS,t.wrapT=e.wrapT):(t.wrapS=ag.WRAPPING,t.wrapT=ag.WRAPPING),t.needsUpdate=!0}_updateFilter(t,e){e.tminFilter?t.minFilter=e.minFilter:t.minFilter=w.V,e.tmagFilter?t.magFilter=e.magFilter:t.magFilter=w.V,t.needsUpdate=!0}_updateFlip(t,e){t.flipY=e.tflipY&&e.flipY,t.needsUpdate=!0}async _updateAnisotropy(t,e){if(e.tanisotropy){if(e.useRendererMaxAnisotropy)t.anisotropy=await this._maxRendererAnisotropy();else{const n=e.anisotropy;t.anisotropy=n<=2?n:Math.min(n,await this._maxRendererAnisotropy())}t.needsUpdate=!0}else t.anisotropy=1}async _maxRendererAnisotropy(){this._renderer_controller=this._renderer_controller||new Ff(this.node);return(await this._renderer_controller.renderer()).capabilities.getMaxAnisotropy()}_updateTransform(t){if(!this.node.pv.ttransform)return t.offset.set(0,0),t.rotation=0,t.repeat.set(1,1),void t.center.set(0,0);this._updateTransformOffset(t,!1),this._updateTransformRepeat(t,!1),this._updateTransformRotation(t,!1),this._updateTransformCenter(t,!1),t.updateMatrix()}async _updateTransformOffset(t,e){t.offset.copy(this.node.pv.offset),e&&t.updateMatrix()}async _updateTransformRepeat(t,e){t.repeat.copy(this.node.pv.repeat),e&&t.updateMatrix()}async _updateTransformRotation(t,e){t.rotation=this.node.pv.rotation,e&&t.updateMatrix()}async _updateTransformCenter(t,e){t.center.copy(this.node.pv.center),e&&t.updateMatrix()}static PARAM_CALLBACK_update_encoding(t){const e=t.containerController.container().texture();e&&t.textureParamsController._updateEncoding(e,t.pv)}static PARAM_CALLBACK_update_mapping(t){const e=t.containerController.container().texture();e&&t.textureParamsController._updateMapping(e,t.pv)}static PARAM_CALLBACK_update_wrap(t){const e=t.containerController.container().texture();e&&t.textureParamsController._updateWrap(e,t.pv)}static PARAM_CALLBACK_update_filter(t){const e=t.containerController.container().texture();e&&t.textureParamsController._updateFilter(e,t.pv)}static PARAM_CALLBACK_update_anisotropy(t){const e=t.containerController.container().texture();e&&t.textureParamsController._updateAnisotropy(e,t.pv)}static PARAM_CALLBACK_update_flipY(t){const e=t.containerController.container().texture();e&&t.textureParamsController._updateFlip(e,t.pv)}static PARAM_CALLBACK_update_transform(t){const e=t.containerController.container().texture();e&&t.textureParamsController._updateTransform(e)}static PARAM_CALLBACK_update_offset(t){const e=t.containerController.container().texture();e&&t.textureParamsController._updateTransformOffset(e,!0)}static PARAM_CALLBACK_update_repeat(t){const e=t.containerController.container().texture();e&&t.textureParamsController._updateTransformRepeat(e,!0)}static PARAM_CALLBACK_update_rotation(t){const e=t.containerController.container().texture();e&&t.textureParamsController._updateTransformRotation(e,!0)}static PARAM_CALLBACK_update_center(t){const e=t.containerController.container().texture();e&&t.textureParamsController._updateTransformCenter(e,!0)}static PARAM_CALLBACK_update_advanced(t){const e=t.containerController.container().texture();e&&t.textureParamsController._updateAdvanced(e,t.pv)}static copyTextureAttributes(t,e){t.encoding=e.encoding,t.mapping=e.mapping,t.wrapS=e.wrapS,t.wrapT=e.wrapT,t.minFilter=e.minFilter,t.magFilter=e.magFilter,t.magFilter=e.magFilter,t.anisotropy=e.anisotropy,t.flipY=e.flipY,t.repeat.copy(e.repeat),t.offset.copy(e.offset),t.center.copy(e.center),t.rotation=e.rotation,t.type=e.type,t.format=e.format,t.needsUpdate=!0}paramLabelsParams(){const t=this.node.p;return[t.tencoding,t.encoding,t.tmapping,t.mapping,t.twrap,t.wrapS,t.wrapT,t.tminFilter,t.minFilter,t.tmagFilter,t.magFilter,t.tflipY,t.flipY]}paramLabels(){const t=[],e=this.node.pv;if(e.tencoding)for(let n of eg){const i=Object.keys(n)[0];n[i]==e.encoding&&t.push(`encoding: ${i}`)}if(e.tmapping)for(let n of ig){const i=Object.keys(n)[0];n[i]==e.mapping&&t.push(`mapping: ${i}`)}if(e.twrap){function n(n){for(let i of ng){const r=Object.keys(i)[0];i[r]==e[n]&&t.push(`${n}: ${r}`)}}n(\\\\\\\"wrapS\\\\\\\"),n(\\\\\\\"wrapT\\\\\\\")}if(e.tminFilter)for(let n of Wm){const i=Object.keys(n)[0];n[i]==e.minFilter&&t.push(`minFilter: ${i}`)}if(e.tmagFilter)for(let n of jm){const i=Object.keys(n)[0];n[i]==e.magFilter&&t.push(`magFilter: ${i}`)}return e.tflipY&&t.push(`flipY: ${e.flipY}`),t}}class Tg extends J.a{constructor(t,e,n,i,r,s,o,a,l){super(t,e,n,i,r,s,o,a,l),this.needsUpdate=!0}}Tg.prototype.isCanvasTexture=!0;class Ag extends(xg(function(t){return class extends t{constructor(){super(...arguments),this.canvasId=oa.STRING(\\\\\\\"canvas-id\\\\\\\"),this.update=oa.BUTTON(null,{cook:!1,callback:t=>{Mg.PARAM_CALLBACK_update(t)}})}}}(aa))){}const Eg=new Ag;class Mg extends af{constructor(){super(...arguments),this.paramsConfig=Eg,this.textureParamsController=new wg(this)}static type(){return\\\\\\\"canvas\\\\\\\"}async cook(){const t=this.pv.canvasId,e=document.getElementById(t);if(!e)return this.states.error.set(`element with id '${t}' not found`),void this.cookController.endCook();if(!(e instanceof HTMLCanvasElement))return this.states.error.set(\\\\\\\"element found is not a canvas\\\\\\\"),void this.cookController.endCook();const n=new Tg(e);await this.textureParamsController.update(n),this.setTexture(n)}static PARAM_CALLBACK_update(t){t.markTextureNeedsUpdate()}markTextureNeedsUpdate(){const t=this.containerController.container().texture();t&&(t.needsUpdate=!0)}}const Sg=new class extends aa{constructor(){super(...arguments),this.resolution=oa.VECTOR2([256,256],{callback:t=>{Cg.PARAM_CALLBACK_reset(t)}}),this.color=oa.COLOR([1,1,1])}};class Cg extends af{constructor(){super(...arguments),this.paramsConfig=Sg}static type(){return\\\\\\\"color\\\\\\\"}cook(){const t=this.pv.resolution.x,e=this.pv.resolution.y;this._data_texture=this._data_texture||this._create_data_texture(t,e);const n=e*t,i=this.pv.color.toArray(),r=255*i[0],s=255*i[1],o=255*i[2],a=this._data_texture.image.data;for(let t=0;t<n;t++)a[4*t+0]=r,a[4*t+1]=s,a[4*t+2]=o,a[4*t+3]=255;this._data_texture.needsUpdate=!0,this.setTexture(this._data_texture)}_create_data_texture(t,e){const n=this._create_pixel_buffer(t,e);return new mo.a(n,t,e)}_create_pixel_buffer(t,e){return new Uint8Array(t*e*4)}static PARAM_CALLBACK_reset(t){t._reset()}_reset(){this._data_texture=void 0}}var Ng,Lg,Og;!function(t){t.GEO=\\\\\\\"geo\\\\\\\",t.CUBE_CAMERA=\\\\\\\"cubeCamera\\\\\\\",t.AUDIO_LISTENER=\\\\\\\"audioListener\\\\\\\",t.POSITIONAL_AUDIO=\\\\\\\"positionalAudio\\\\\\\"}(Ng||(Ng={})),function(t){t.CUBE_CAMERA=\\\\\\\"cubeCamera\\\\\\\",t.VIDEO=\\\\\\\"video\\\\\\\",t.WEB_CAM=\\\\\\\"webCam\\\\\\\"}(Lg||(Lg={})),function(t){t.REFLECTION=\\\\\\\"reflection\\\\\\\",t.REFRACTION=\\\\\\\"refraction\\\\\\\"}(Og||(Og={}));const Rg=[Og.REFLECTION,Og.REFRACTION];const Pg=new class extends aa{constructor(){super(...arguments),this.cubeCamera=oa.NODE_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:Ki.OBJ,types:[Ng.CUBE_CAMERA]}}),this.mode=oa.INTEGER(0,{menu:{entries:Rg.map(((t,e)=>({name:t,value:e})))}})}};class Ig extends af{constructor(){super(...arguments),this.paramsConfig=Pg}static type(){return Lg.CUBE_CAMERA}async cook(){const t=this.pv.cubeCamera.nodeWithContext(Ki.OBJ,this.states.error);if(!t)return this.states.error.set(`cubeCamera not found at '${this.pv.cubeCamera.path()}'`),this.cookController.endCook();const e=t.renderTarget();if(!e)return this.states.error.set(\\\\\\\"cubeCamera has no render target'\\\\\\\"),this.cookController.endCook();const n=e.texture;Rg[this.pv.mode]==Og.REFLECTION?n.mapping=w.o:n.mapping=w.p,this.setTexture(n)}}var Fg;!function(t){t.REFLECTION=\\\\\\\"reflection\\\\\\\",t.REFRACTION=\\\\\\\"refraction\\\\\\\"}(Fg||(Fg={}));const Dg=[Fg.REFLECTION,Fg.REFRACTION];const kg=new class extends aa{constructor(){super(...arguments),this.useCameraRenderer=oa.BOOLEAN(1),this.mode=oa.INTEGER(0,{menu:{entries:Dg.map(((t,e)=>({name:t,value:e})))}})}};class Bg extends af{constructor(){super(...arguments),this.paramsConfig=kg}static type(){return\\\\\\\"envMap\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.NEVER)}async cook(t){const e=t[0];this.convert_texture_to_env_map(e)}async convert_texture_to_env_map(t){this._renderer_controller=this._renderer_controller||new Ff(this);const e=await this._renderer_controller.renderer();if(e){const n=new wt(e).fromEquirectangular(t);if(this.pv.useCameraRenderer)this._set_mapping(n.texture),this.setTexture(n.texture);else{this._data_texture_controller=this._data_texture_controller||new If(Pf.Uint8Array);const t=this._data_texture_controller.from_render_target(e,n);this._set_mapping(t),this.setTexture(t)}}else this.states.error.set(\\\\\\\"no renderer found to convert the texture to an env map\\\\\\\"),this.cookController.endCook()}_set_mapping(t){Dg[this.pv.mode]==Fg.REFLECTION?t.mapping=w.q:t.mapping=w.r}}class zg extends J.a{constructor(t,e,n,i,r,s,o,a,l){super(t,e,n,i,r,s,o,a,l),this.format=void 0!==o?o:w.ic,this.minFilter=void 0!==s?s:w.V,this.magFilter=void 0!==r?r:w.V,this.generateMipmaps=!1;const c=this;\\\\\\\"requestVideoFrameCallback\\\\\\\"in t&&t.requestVideoFrameCallback((function e(){c.needsUpdate=!0,t.requestVideoFrameCallback(e)}))}clone(){return new this.constructor(this.image).copy(this)}update(){const t=this.image;!1===\\\\\\\"requestVideoFrameCallback\\\\\\\"in t&&t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}zg.prototype.isVideoTexture=!0;var Ug=n(80);const Gg=\\\\\\\"https://raw.githubusercontent.com/polygonjs/polygonjs-assets/master/\\\\\\\";var Vg=n(29);const Hg=new Vg.b;Hg.setURLModifier((t=>{const e=ai.assetUrls.remapedUrl(t);if(e)return e;const n=ai.blobs.blobUrl(t);return n||t}));class jg{constructor(t,e,n){this._url=t,this._scene=e,this._node=n,this.loadingManager=Hg}static extension(t){let e=null;try{e=new URL(t).searchParams.get(\\\\\\\"ext\\\\\\\")}catch(t){}if(!e){const n=t.split(\\\\\\\"?\\\\\\\")[0].split(\\\\\\\".\\\\\\\");e=n[n.length-1].toLowerCase()}return e}extension(){return jg.extension(this._url)}async _urlToLoad(){let t=this._url;const e=this._url.split(\\\\\\\"?\\\\\\\")[0];if(\\\\\\\"h\\\\\\\"!=t[0]){const e=this._scene.assets.root();e&&(t=`${e}${t}`)}this._node&&await ai.blobs.fetchBlobForNode({storedUrl:e,fullUrl:t,node:this._node});return ai.blobs.blobUrl(e)||t}static async _loadMultipleBlobGlobal(t){const e=[];for(let n of t.files){const i=n.storedUrl,r=n.fullUrl,s=t.node;e.push(ai.blobs.fetchBlobGlobal({storedUrl:i,fullUrl:r,node:s}))}const n=await Promise.all(e);for(let e of n)e.error&&t.node.states.error.set(t.error)}}var Wg;jg.loadingManager=Hg,function(t){t.JPG=\\\\\\\"jpg\\\\\\\",t.JPEG=\\\\\\\"jpeg\\\\\\\",t.PNG=\\\\\\\"png\\\\\\\",t.EXR=\\\\\\\"exr\\\\\\\",t.BASIS=\\\\\\\"basis\\\\\\\",t.HDR=\\\\\\\"hdr\\\\\\\"}(Wg||(Wg={}));Wg.JPEG,Wg.JPG,Wg.PNG,Wg.EXR,Wg.BASIS,Wg.HDR;class qg extends jg{constructor(t,e,n,i){super(t,i,n),this._param=e,this._node=n,this._scene=i}static onTextureLoaded(t){this._onTextureLoadedCallback=t}async load_texture_from_url_or_op(t){let e=null,n=null;if(\\\\\\\"op:\\\\\\\"==this._url.substring(0,3)){const t=this._url.substring(3);if(n=xi.findNode(this._node,t),n)if(n instanceof lf){e=(await n.compute()).texture()}else this._node.states.error.set(\\\\\\\"found node is not a texture node\\\\\\\");else this._node.states.error.set(`no node found in path '${t}'`)}else e=await this._loadUrl(t),e||this._node.states.error.set(`could not load texture ${this._url}`);return n&&this._param.graphPredecessors()[0]!=n&&(this._param.graphDisconnectPredecessors(),this._param.addGraphInput(n)),e}async _loadUrl(t){return new Promise((async(e,n)=>{const i=this.extension(),r=await this._urlToLoad();if(qg.VIDEO_EXTENSIONS.includes(i)){const t=await this._load_as_video(r);e(t)}else this.loader_for_ext(i,t).then((async t=>{t?(qg.increment_in_progress_loads_count(),await qg.wait_for_max_concurrent_loads_queue_freed(),t.load(r,(t=>{qg.decrement_in_progress_loads_count();const n=qg._onTextureLoadedCallback;n&&n(r,t),e(t)}),void 0,(t=>{qg.decrement_in_progress_loads_count(),ai.warn(\\\\\\\"error\\\\\\\",t),n()}))):n()}))}))}static module_names(t){switch(t){case Wg.EXR:return[Vn.EXRLoader];case Wg.HDR:return[Vn.RGBELoader];case Wg.BASIS:return[Vn.BasisTextureLoader]}}async loader_for_ext(t,e){switch(t.toLowerCase()){case Wg.EXR:return await this._exr_loader(e);case Wg.HDR:return await this._hdr_loader(e);case Wg.BASIS:return await qg._basis_loader(this._node)}return new Ug.a(this.loadingManager)}async _exr_loader(t){const e=await ai.modulesRegister.module(Vn.EXRLoader);if(e){const n=new e(this.loadingManager);return t.tdataType&&n.setDataType(t.dataType),n}}async _hdr_loader(t){const e=await ai.modulesRegister.module(Vn.RGBELoader);if(e){const n=new e(this.loadingManager);return t.tdataType&&n.setDataType(t.dataType),n}}static async _basis_loader(t){const e=await ai.modulesRegister.module(Vn.BasisTextureLoader);if(e){const n=new e(this.loadingManager),i=ai.libs.root(),r=ai.libs.BASISPath();if(i||r){const e=`${i||\\\\\\\"\\\\\\\"}${r||\\\\\\\"\\\\\\\"}/`;if(t){const n=[\\\\\\\"basis_transcoder.js\\\\\\\",\\\\\\\"basis_transcoder.wasm\\\\\\\"];await this._loadMultipleBlobGlobal({files:n.map((t=>({storedUrl:`${r}/${t}`,fullUrl:`${e}${t}`}))),node:t,error:\\\\\\\"failed to load basis libraries. Make sure to install them to load .basis files\\\\\\\"})}n.setTranscoderPath(e)}else n.setTranscoderPath(void 0);const s=await ai.renderersController.waitForRenderer();return s?n.detectSupport(s):ai.warn(\\\\\\\"texture loader found no renderer for basis texture loader\\\\\\\"),n}}_load_as_video(t){return new Promise(((e,n)=>{const i=document.createElement(\\\\\\\"video\\\\\\\");i.setAttribute(\\\\\\\"crossOrigin\\\\\\\",\\\\\\\"anonymous\\\\\\\"),i.setAttribute(\\\\\\\"autoplay\\\\\\\",\\\\\\\"true\\\\\\\"),i.setAttribute(\\\\\\\"loop\\\\\\\",\\\\\\\"true\\\\\\\"),i.onloadedmetadata=function(){i.pause();const t=new zg(i);e(t)};const r=document.createElement(\\\\\\\"source\\\\\\\"),s=jg.extension(t);let o=qg.VIDEO_SOURCE_TYPE_BY_EXT[s];o=o||qg._default_video_source_type(t),r.setAttribute(\\\\\\\"type\\\\\\\",o),r.setAttribute(\\\\\\\"src\\\\\\\",t),i.appendChild(r);let a=t;a=\\\\\\\"mp4\\\\\\\"==s?qg.replaceExtension(t,\\\\\\\"ogv\\\\\\\"):qg.replaceExtension(t,\\\\\\\"mp4\\\\\\\");const l=document.createElement(\\\\\\\"source\\\\\\\"),c=jg.extension(a);o=qg.VIDEO_SOURCE_TYPE_BY_EXT[c],o=o||qg._default_video_source_type(t),l.setAttribute(\\\\\\\"type\\\\\\\",o),l.setAttribute(\\\\\\\"src\\\\\\\",t),i.appendChild(l)}))}static _default_video_source_type(t){return`video/${jg.extension(t)}`}static pixel_data(t){const e=t.image,n=document.createElement(\\\\\\\"canvas\\\\\\\");n.width=e.width,n.height=e.height;const i=n.getContext(\\\\\\\"2d\\\\\\\");if(i)return i.drawImage(e,0,0,e.width,e.height),i.getImageData(0,0,e.width,e.height)}static replaceExtension(t,e){const n=t.split(\\\\\\\"?\\\\\\\"),i=n[0].split(\\\\\\\".\\\\\\\");return i.pop(),i.push(e),[i.join(\\\\\\\".\\\\\\\"),n[1]].join(\\\\\\\"?\\\\\\\")}static setMaxConcurrentLoadsCount(t){this._maxConcurrentLoadsCountMethod=t}static _init_max_concurrent_loads_count(){return this._maxConcurrentLoadsCountMethod?this._maxConcurrentLoadsCountMethod():Zf.isChrome()?10:4}static _init_concurrent_loads_delay(){return Zf.isChrome()?0:10}static increment_in_progress_loads_count(){this.in_progress_loads_count++}static decrement_in_progress_loads_count(){this.in_progress_loads_count--;const t=this._queue.pop();if(t){const e=this.CONCURRENT_LOADS_DELAY;setTimeout((()=>{t()}),e)}}static async wait_for_max_concurrent_loads_queue_freed(){return this.in_progress_loads_count<=this.MAX_CONCURRENT_LOADS_COUNT?void 0:new Promise((t=>{this._queue.push(t)}))}}qg.PARAM_DEFAULT=`${Gg}/textures/uv.jpg`,qg.PARAM_ENV_DEFAULT=`${Gg}/textures/piz_compressed.exr`,qg.VIDEO_EXTENSIONS=[\\\\\\\"mp4\\\\\\\",\\\\\\\"webm\\\\\\\",\\\\\\\"ogv\\\\\\\"],qg.VIDEO_SOURCE_TYPE_BY_EXT={ogg:'video/ogg; codecs=\\\\\\\"theora, vorbis\\\\\\\"',ogv:'video/ogg; codecs=\\\\\\\"theora, vorbis\\\\\\\"',mp4:'video/mp4; codecs=\\\\\\\"avc1.42E01E, mp4a.40.2\\\\\\\"'},qg.MAX_CONCURRENT_LOADS_COUNT=qg._init_max_concurrent_loads_count(),qg.CONCURRENT_LOADS_DELAY=qg._init_concurrent_loads_delay(),qg.in_progress_loads_count=0,qg._queue=[];var Xg=n(115);class Yg extends(xg(function(t){return class extends t{constructor(){super(...arguments),this.url=oa.STRING(qg.PARAM_DEFAULT,{fileBrowse:{type:[Ls.TEXTURE_IMAGE]}}),this.reload=oa.BUTTON(null,{callback:(t,e)=>{Jg.PARAM_CALLBACK_reload(t)}}),this.play=oa.BOOLEAN(1,{cook:!1,callback:t=>{Jg.PARAM_CALLBACK_gifUpdatePlay(t)}}),this.gifFrame=oa.INTEGER(0,{cook:!1,range:[0,100],rangeLocked:[!0,!1],callback:t=>{Jg.PARAM_CALLBACK_gifUpdateFrameIndex(t)}})}}}(aa))){}const $g=new Yg;class Jg extends af{constructor(){super(...arguments),this.paramsConfig=$g,this.textureParamsController=new wg(this),this._gifCanvasContext=null,this._tmpCanvasContext=null,this._parsedFrames=[],this._frameDelay=100,this._frameIndex=0}static type(){return\\\\\\\"gif\\\\\\\"}async requiredModules(){this.p.url.isDirty()&&await this.p.url.compute();const t=jg.extension(this.pv.url||\\\\\\\"\\\\\\\");return qg.module_names(t)}static displayedInputNames(){return[\\\\\\\"optional texture to copy attributes from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(Qi.NEVER),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{let t=[this.p.url];t=t.concat(this.textureParamsController.paramLabelsParams()),this.params.label.init(t,(()=>{const t=this.p.url.rawInput();if(t){const e=t.split(\\\\\\\"/\\\\\\\"),n=e[e.length-1],i=this.textureParamsController.paramLabels();return[n].concat(i)}return\\\\\\\"\\\\\\\"}))}))}))}async cook(t){const e=await fetch(this.pv.url),n=await e.arrayBuffer(),i=await Object(Xg.parseGIF)(n);this._parsedFrames=await Object(Xg.decompressFrames)(i,!0);const r=this._parsedFrames[0];if(this._frameDelay=r.delay,this._frameIndex=this.pv.gifFrame-1,this._createCanvas(),this._gifCanvasElement){const t=new Tg(this._gifCanvasElement);await this.textureParamsController.update(t),this.setTexture(t)}else this.states.error.set(\\\\\\\"failed to create canvas\\\\\\\")}_createCanvas(){const t=this._parsedFrames[0];this._gifCanvasElement=document.createElement(\\\\\\\"canvas\\\\\\\"),this._tmpCanvasElement=document.createElement(\\\\\\\"canvas\\\\\\\"),this._gifCanvasElement.width=t.dims.width,this._gifCanvasElement.height=t.dims.height,this._tmpCanvasElement.width=t.dims.width,this._tmpCanvasElement.height=t.dims.height,this._gifCanvasContext=this._gifCanvasElement.getContext(\\\\\\\"2d\\\\\\\"),this._tmpCanvasContext=this._tmpCanvasElement.getContext(\\\\\\\"2d\\\\\\\"),this._drawNextFrame()}_drawOnCanvas(){if(!(this._gifCanvasContext&&this._tmpCanvasElement&&this._tmpCanvasContext))return;let t=this._parsedFrames[this._frameIndex];if(t||(console.warn(`no frame at index ${this._frameIndex}, using last frame`),t=this._parsedFrames[this._parsedFrames.length-1]),t){const e=t.dims;this._frameImageData&&e.width==this._frameImageData.width&&e.height==this._frameImageData.height||(this._tmpCanvasElement.width=e.width,this._tmpCanvasElement.height=e.height,this._frameImageData=this._tmpCanvasContext.createImageData(e.width,e.height)),this._frameImageData.data.set(t.patch),this._tmpCanvasContext.putImageData(this._frameImageData,0,0),this._gifCanvasContext.drawImage(this._tmpCanvasElement,e.left,e.top);const n=this.containerController.container().texture();if(!n)return;n.needsUpdate=!0}}_drawNextFrame(){this._frameIndex++,this._frameIndex>=this._parsedFrames.length&&(this._frameIndex=0),this._drawOnCanvas(),this.pv.play&&setTimeout((()=>{this._drawNextFrame()}),this._frameDelay)}gifUpdateFrameIndex(){this._frameIndex=this.pv.gifFrame,this._drawOnCanvas()}static PARAM_CALLBACK_reload(t){t.paramCallbackReload()}paramCallbackReload(){this.p.url.setDirty()}static PARAM_CALLBACK_gifUpdatePlay(t){t.gifUpdatePlay()}gifUpdatePlay(){this.pv.play&&this._drawNextFrame()}static PARAM_CALLBACK_gifUpdateFrameIndex(t){t.gifUpdateFrameIndex()}}const Zg=[\\\\\\\"mp4\\\\\\\",\\\\\\\"ogv\\\\\\\"];class Qg{static isStaticImageUrl(t){const e=t.split(\\\\\\\"?\\\\\\\")[0].split(\\\\\\\".\\\\\\\"),n=e[e.length-1];return!Zg.includes(n)}}class Kg extends(xg(function(t){return class extends t{constructor(){super(...arguments),this.url=oa.STRING(qg.PARAM_DEFAULT,{fileBrowse:{type:[Ls.TEXTURE_IMAGE]}}),this.reload=oa.BUTTON(null,{callback:(t,e)=>{ev.PARAM_CALLBACK_reload(t,e)}})}}}(aa))){}const tv=new Kg;class ev extends af{constructor(){super(...arguments),this.paramsConfig=tv,this.textureParamsController=new wg(this)}static type(){return\\\\\\\"image\\\\\\\"}async requiredModules(){this.p.url.isDirty()&&await this.p.url.compute();const t=jg.extension(this.pv.url||\\\\\\\"\\\\\\\");return qg.module_names(t)}static displayedInputNames(){return[\\\\\\\"optional texture to copy attributes from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(Qi.NEVER),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{let t=[this.p.url];t=t.concat(this.textureParamsController.paramLabelsParams()),this.params.label.init(t,(()=>{const t=this.p.url.rawInput();if(t){const e=t.split(\\\\\\\"/\\\\\\\"),n=e[e.length-1],i=this.textureParamsController.paramLabels();return[n].concat(i)}return\\\\\\\"\\\\\\\"}))}))}))}async cook(t){if(Qg.isStaticImageUrl(this.pv.url)){const e=await this._loadTexture(this.pv.url);if(e){const n=t[0];n&&wg.copyTextureAttributes(e,n),await this.textureParamsController.update(e),this.setTexture(e)}else this._clearTexture()}else this.states.error.set(\\\\\\\"input is not an image\\\\\\\")}static PARAM_CALLBACK_reload(t,e){t.paramCallbackReload()}paramCallbackReload(){this.p.url.setDirty()}async _loadTexture(t){let e=null;const n=this.p.url,i=new qg(t,n,this,this.scene());try{e=await i.load_texture_from_url_or_op({tdataType:this.pv.ttype&&this.pv.tadvanced,dataType:this.pv.type}),e&&(e.matrixAutoUpdate=!1)}catch(t){}return e||this.states.error.set(`could not load texture '${t}'`),e}}var nv=n(32);const iv=.005;class rv{constructor(t,e=1024){this.renderer=t,this.res=e,this.objectTargets=[],this.lights=[],this.scene=new fr,this.buffer1Active=!1,this._params={lightRadius:1,iterations:1,iterationBlend:iv,blur:!1,blurAmount:0},this._objectStateByObject=new WeakMap,this._previousRenderTarget=null,this._lightHierarchyStateByLight=new WeakMap,this._lightMatrixStateByLight=new WeakMap,this._t=new p.a,this._q=new au.a,this._s=new p.a;const n=Zf.isAndroid()||Zf.isiOS()?w.M:w.G;this.progressiveLightMap1=new Z(this.res,this.res,{type:n}),this.progressiveLightMap2=new Z(this.res,this.res,{type:n}),this.uvMat=this._createUVMat()}textureRenderTarget(){return this.progressiveLightMap2}texture(){return this.textureRenderTarget().texture}setParams(t){this._params.lightRadius=t.lightRadius,this._params.iterations=t.iterations,this._params.iterationBlend=t.iterationBlend,this._params.blur=t.blur,this._params.blurAmount=t.blurAmount}init(t,e){this._setObjects(t),this._setLights(e)}_setObjects(t){this.objectTargets=[];for(let e of t)null==this.blurringPlane&&this._initializeBlurPlane(this.res,this.progressiveLightMap1),this.objectTargets.push(e);this._saveObjectsState()}_setLights(t){this.lights=t;for(let e of t)this._saveLightHierarchyState(e),this.scene.attach(e),this._saveLightMatrixState(e)}_saveLightHierarchyState(t){this._lightHierarchyStateByLight.set(t,{parent:t.parent,matrixAutoUpdate:t.matrixAutoUpdate}),t.matrixAutoUpdate=!0}_saveLightMatrixState(t){t.updateMatrix(),t.matrix.decompose(this._t,this._q,this._s),this._lightMatrixStateByLight.set(t,{matrix:t.matrix.clone(),position:this._t.clone()})}_saveObjectsState(){let t=0;for(let e of this.objectTargets)this._objectStateByObject.set(e,{frustumCulled:e.frustumCulled,material:e.material,parent:e.parent,castShadow:e.castShadow,receiveShadow:e.receiveShadow}),e.material=this.uvMat,e.frustumCulled=!1,e.castShadow=!0,e.receiveShadow=!0,e.renderOrder=1e3+t,this.scene.attach(e),t++;this._previousRenderTarget=this.renderer.getRenderTarget()}_moveLights(){const t=this._params.lightRadius;for(let e of this.lights){const n=this._lightMatrixStateByLight.get(e);if(n){const i=n.position;e.position.x=i.x+t*(Math.random()-.5),e.position.y=i.y+t*(Math.random()-.5),e.position.z=i.z+t*(Math.random()-.5)}}}restoreState(){this._restoreObjectsState(),this._restoreLightsState(),this.renderer.setRenderTarget(this._previousRenderTarget)}_restoreObjectsState(){for(let t of this.objectTargets){const e=this._objectStateByObject.get(t);if(e){t.frustumCulled=e.frustumCulled,t.castShadow=e.castShadow,t.receiveShadow=e.receiveShadow,t.material=e.material;const n=e.parent;n&&n.add(t)}}}_restoreLightsState(){var t;for(let e of this.lights){const n=this._lightHierarchyStateByLight.get(e),i=this._lightMatrixStateByLight.get(e);n&&i&&(e.matrixAutoUpdate=n.matrixAutoUpdate,e.matrix.copy(i.matrix),e.matrix.decompose(e.position,e.quaternion,e.scale),e.updateMatrix(),null===(t=n.parent)||void 0===t||t.attach(e))}}runUpdates(t){if(!this.blurMaterial)return;if(null==this.blurringPlane)return;const e=this._params.iterations;this.blurMaterial.uniforms.pixelOffset.value=this._params.blurAmount/this.res,this.blurringPlane.visible=this._params.blur,this.uvMat.uniforms.iterationBlend.value=this._params.iterationBlend,this._clear(t);for(let n=0;n<e;n++)this._moveLights(),this._update(t)}_clear(t){this.scene.visible=!1,this._update(t),this._update(t),this.scene.visible=!0}_update(t){if(!this.blurMaterial)return;const e=this.buffer1Active?this.progressiveLightMap1:this.progressiveLightMap2,n=this.buffer1Active?this.progressiveLightMap2:this.progressiveLightMap1;this.renderer.setRenderTarget(e),this.uvMat.uniforms.previousShadowMap.value=n.texture,this.blurMaterial.uniforms.previousShadowMap.value=n.texture,this.buffer1Active=!this.buffer1Active,this.renderer.render(this.scene,t)}_initializeBlurPlane(t,e){this.blurMaterial=this._createBlurPlaneMaterial(t,e),this.blurringPlane=new k.a(new L(1,1),this.blurMaterial),this.blurringPlane.name=\\\\\\\"Blurring Plane\\\\\\\",this.blurringPlane.frustumCulled=!1,this.blurringPlane.renderOrder=0,this.blurMaterial.depthWrite=!1,this.scene.add(this.blurringPlane)}_createBlurPlaneMaterial(t,e){const n=new at.a;return n.uniforms={previousShadowMap:{value:null},pixelOffset:{value:1/t}},n.onBeforeCompile=i=>{i.vertexShader=\\\\\\\"#define USE_UV\\\\n\\\\\\\"+i.vertexShader.slice(0,-2)+\\\\\\\"\\\\tgl_Position = vec4((uv - 0.5) * 2.0, 1.0, 1.0); }\\\\\\\";const r=i.fragmentShader.indexOf(\\\\\\\"void main() {\\\\\\\");i.fragmentShader=\\\\\\\"#define USE_UV\\\\n\\\\\\\"+i.fragmentShader.slice(0,r)+\\\\\\\"\\\\tuniform sampler2D previousShadowMap;\\\\n\\\\tuniform float pixelOffset;\\\\n\\\\\\\"+i.fragmentShader.slice(r-1,-2)+\\\\\\\"\\\\tgl_FragColor.rgb = (\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\ttexture2D(previousShadowMap, vUv + vec2( pixelOffset,  0.0        )).rgb +\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\ttexture2D(previousShadowMap, vUv + vec2( 0.0        ,  pixelOffset)).rgb +\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\ttexture2D(previousShadowMap, vUv + vec2( 0.0        , -pixelOffset)).rgb +\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\ttexture2D(previousShadowMap, vUv + vec2(-pixelOffset,  0.0        )).rgb +\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\ttexture2D(previousShadowMap, vUv + vec2( pixelOffset,  pixelOffset)).rgb +\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\ttexture2D(previousShadowMap, vUv + vec2(-pixelOffset,  pixelOffset)).rgb +\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\ttexture2D(previousShadowMap, vUv + vec2( pixelOffset, -pixelOffset)).rgb +\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\ttexture2D(previousShadowMap, vUv + vec2(-pixelOffset, -pixelOffset)).rgb)/8.0;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\";const s={previousShadowMap:{value:e.texture},pixelOffset:{value:.5/t}};i.uniforms.previousShadowMap=s.previousShadowMap,i.uniforms.pixelOffset=s.pixelOffset,n.uniforms.previousShadowMap=s.previousShadowMap,n.uniforms.pixelOffset=s.pixelOffset,n.userData.shader=i},n}_createUVMat(){const t=new Gf.a;return t.uniforms={previousShadowMap:{value:null},iterationBlend:{value:iv}},t.name=\\\\\\\"uvMat\\\\\\\",t.onBeforeCompile=e=>{e.vertexShader=\\\\\\\"#define USE_LIGHTMAP\\\\n\\\\\\\"+e.vertexShader.slice(0,-2)+\\\\\\\"\\\\tgl_Position = vec4((uv2 - 0.5) * 2.0, 1.0, 1.0); }\\\\\\\";const n=e.fragmentShader.indexOf(\\\\\\\"void main() {\\\\\\\");e.fragmentShader=\\\\\\\"varying vec2 vUv2;\\\\n\\\\\\\"+e.fragmentShader.slice(0,n)+\\\\\\\"\\\\tuniform sampler2D previousShadowMap;\\\\n\\\\tuniform float iterationBlend;\\\\n\\\\\\\"+e.fragmentShader.slice(n-1,-2)+\\\\\\\"\\\\nvec3 texelOld = texture2D(previousShadowMap, vUv2).rgb;\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor.rgb = mix(texelOld, gl_FragColor.rgb, iterationBlend);\\\\n\\\\t\\\\t\\\\t\\\\t// gl_FragColor.rgb = vec3(vUv2,1.0);\\\\n\\\\t\\\\t\\\\t}\\\\\\\";const i={previousShadowMap:{value:this.progressiveLightMap1.texture},iterationBlend:{value:iv}};e.uniforms.previousShadowMap=i.previousShadowMap,e.uniforms.iterationBlend=i.iterationBlend,t.uniforms.previousShadowMap=i.previousShadowMap,t.uniforms.iterationBlend=i.iterationBlend,t.userData.shader=e},t}}const sv=new class extends aa{constructor(){super(...arguments),this.update=oa.BUTTON(null,{callback:t=>{ov.PARAM_CALLBACK_updateManual(t)}}),this.useCameraRenderer=oa.BOOLEAN(1),this.lightMapRes=oa.INTEGER(1024,{range:[1,2048],rangeLocked:[!0,!1]}),this.iterations=oa.INTEGER(512,{range:[1,2048],rangeLocked:[!0,!1]}),this.iterationBlend=oa.FLOAT(iv,{range:[0,1],rangeLocked:[!0,!0]}),this.blur=oa.BOOLEAN(1),this.blurAmount=oa.FLOAT(1,{visibleIf:{blur:1},range:[0,1],rangeLocked:[!0,!1]}),this.lightRadius=oa.FLOAT(1,{range:[0,10]}),this.objectsMask=oa.STRING(\\\\\\\"\\\\\\\"),this.lightsMask=oa.STRING(\\\\\\\"*\\\\\\\"),this.printResolveObjectsList=oa.BUTTON(null,{callback:t=>{ov.PARAM_CALLBACK_printResolveObjectsList(t)}})}};class ov extends af{constructor(){super(...arguments),this.paramsConfig=sv,this._includedObjects=[],this._includedLights=[]}static type(){return\\\\\\\"lightMap\\\\\\\"}async cook(){this._updateManual()}async _createLightMapController(){const t=await ai.renderersController.firstRenderer();if(!t)return void console.warn(\\\\\\\"no renderer found\\\\\\\");return new rv(t,this.pv.lightMapRes)}static PARAM_CALLBACK_update_updateMode(t){}async _updateManual(){if(this.lightMapController=this.lightMapController||await this._createLightMapController(),!this.lightMapController)return;const t=this.scene().mainCameraNode();if(!t)return;this._updateObjectsAndLightsList(),this.lightMapController.init(this._includedObjects,this._includedLights);const e=t.camera();this.lightMapController.setParams({lightRadius:this.pv.lightRadius,iterations:this.pv.iterations,iterationBlend:this.pv.iterationBlend,blur:this.pv.blur,blurAmount:this.pv.blurAmount}),this.lightMapController.runUpdates(e),this.lightMapController.restoreState();const n=this.lightMapController.textureRenderTarget();if(this.pv.useCameraRenderer)this.setTexture(n.texture);else{this._data_texture_controller=this._data_texture_controller||new If(Pf.Float32Array),this._renderer_controller=this._renderer_controller||new Ff(this);const t=await this._renderer_controller.renderer(),e=this._data_texture_controller.from_render_target(t,n);this.setTexture(e)}}static PARAM_CALLBACK_updateManual(t){t._updateManual()}_updateObjectsAndLightsList(){let t=[],e=[];this._includedLights=[],this._includedObjects=[];const n=new WeakSet;if(\\\\\\\"\\\\\\\"!=this.pv.lightsMask){e=this.scene().objectsByMask(this.pv.lightsMask);for(let t of e)t instanceof nv.a&&(this._includedLights.push(t),n.add(t))}if(\\\\\\\"\\\\\\\"!=this.pv.objectsMask){t=this.scene().objectsByMask(this.pv.objectsMask);for(let e of t)e instanceof nv.a||!n.has(e)&&e instanceof k.a&&this._includedObjects.push(e)}}static PARAM_CALLBACK_printResolveObjectsList(t){t._printResolveObjectsList()}_printResolveObjectsList(){this._updateObjectsAndLightsList(),console.log(\\\\\\\"included objects:\\\\\\\"),console.log(this._includedObjects),console.log(\\\\\\\"included lights:\\\\\\\"),console.log(this._includedLights)}}const av=new aa;class lv extends af{constructor(){super(...arguments),this.paramsConfig=av}static type(){return\\\\\\\"null\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.NEVER)}async cook(t){const e=t[0];this.setTexture(e)}}const cv=[nr.ORTHOGRAPHIC,nr.PERSPECTIVE];class uv extends(xg(function(t){return class extends t{constructor(){super(...arguments),this.camera=oa.NODE_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:Ki.OBJ,types:cv}}),this.resolution=oa.VECTOR2([1024,1024]),this.useCameraRenderer=oa.BOOLEAN(1),this.render=oa.BUTTON(null,{callback:t=>{dv.PARAM_CALLBACK_render(t)}})}}}(aa))){}const hv=new uv;class dv extends af{constructor(){super(...arguments),this.paramsConfig=hv,this.textureParamsController=new wg(this)}static type(){return\\\\\\\"render\\\\\\\"}async cook(){this._texture_scene=this.scene().threejsScene(),this._camera_node=this.pv.camera.nodeWithContext(Ki.OBJ),this._camera_node&&cv.includes(this._camera_node.type())?(this._texture_camera=this._camera_node.object,await this._camera_node.compute(),this.renderOnTarget()):this._texture_camera=void 0}async renderOnTarget(){if(await this.createRenderTargetIfRequired(),!(this._render_target&&this._texture_scene&&this._texture_camera))return;this._renderer_controller=this._renderer_controller||new Ff(this);const t=await this._renderer_controller.renderer(),e=t.getRenderTarget();if(t.setRenderTarget(this._render_target),t.clear(),t.render(this._texture_scene,this._texture_camera),t.setRenderTarget(e),this._render_target.texture)if(this.pv.useCameraRenderer)this.setTexture(this._render_target.texture);else{this._data_texture_controller=this._data_texture_controller||new If(Pf.Float32Array);const e=this._data_texture_controller.from_render_target(t,this._render_target);await this.textureParamsController.update(e),this.setTexture(e)}else this.cookController.endCook()}async renderTarget(){return this._render_target=this._render_target||await this._createRenderTarget(this.pv.resolution.x,this.pv.resolution.y)}async createRenderTargetIfRequired(){var t;this._render_target&&this._renderTargetResolutionValid()||(this._render_target=await this._createRenderTarget(this.pv.resolution.x,this.pv.resolution.y),null===(t=this._data_texture_controller)||void 0===t||t.reset())}_renderTargetResolutionValid(){if(this._render_target){const t=this._render_target.texture.image;return t.width==this.pv.resolution.x&&t.height==this.pv.resolution.y}return!1}async _createRenderTarget(t,e){if(this._render_target){const n=this._render_target.texture.image;if(n.width==t&&n.height==e)return this._render_target}const n=w.n,i=w.n,r=w.V,s=w.ob;var o=new Z(t,e,{wrapS:n,wrapT:i,minFilter:r,magFilter:s,format:w.Ib,generateMipmaps:!0,type:Zf.isiOS()?w.M:w.G,stencilBuffer:!1,depthBuffer:!1});return await this.textureParamsController.update(o.texture),ai.warn(\\\\\\\"created render target\\\\\\\",this.path(),t,e),o}static PARAM_CALLBACK_render(t){t.renderOnTarget()}}const pv=new class extends aa{constructor(){super(...arguments),this.input=oa.INTEGER(0,{range:[0,3],rangeLocked:[!0,!0]})}};class _v extends af{constructor(){super(...arguments),this.paramsConfig=pv}static type(){return\\\\\\\"switch\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,4),this.io.inputs.initInputsClonedState(Qi.NEVER),this.cookController.disallowInputsEvaluation()}async cook(){const t=this.pv.input;if(this.io.inputs.has_input(t)){const e=await this.containerController.requestInputContainer(t);if(e)return void this.setTexture(e.texture())}else this.states.error.set(`no input ${t}`);this.cookController.endCook()}}class mv extends(xg(aa)){}const fv=new mv;class gv extends af{constructor(){super(...arguments),this.paramsConfig=fv,this.textureParamsController=new wg(this)}static type(){return\\\\\\\"textureProperties\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState([Qi.FROM_NODE])}async cook(t){const e=t[0];this.textureParamsController.update(e),this.setTexture(e)}}class vv extends(xg(function(t){return class extends t{constructor(){super(...arguments),this.url=oa.STRING(qg.PARAM_DEFAULT,{fileBrowse:{type:[Ls.TEXTURE_VIDEO]}}),this.reload=oa.BUTTON(null,{callback:(t,e)=>{xv.PARAM_CALLBACK_reload(t,e)}}),this.play=oa.BOOLEAN(1,{cook:!1,callback:t=>{xv.PARAM_CALLBACK_video_update_play(t)}}),this.muted=oa.BOOLEAN(1,{cook:!1,callback:t=>{xv.PARAM_CALLBACK_video_update_muted(t)}}),this.loop=oa.BOOLEAN(1,{cook:!1,callback:t=>{xv.PARAM_CALLBACK_video_update_loop(t)}}),this.videoTime=oa.FLOAT(0,{cook:!1}),this.setVideoTime=oa.BUTTON(null,{cook:!1,callback:t=>{xv.PARAM_CALLBACK_video_update_time(t)}})}}}(aa))){}const yv=new vv;class xv extends af{constructor(){super(...arguments),this.paramsConfig=yv,this.textureParamsController=new wg(this)}static type(){return Lg.VIDEO}async requiredModules(){this.p.url.isDirty()&&await this.p.url.compute();const t=jg.extension(this.pv.url||\\\\\\\"\\\\\\\");return qg.module_names(t)}HTMLVideoElement(){return this._video}static displayedInputNames(){return[\\\\\\\"optional texture to copy attributes from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(Qi.NEVER),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.url],(()=>{const t=this.p.url.rawInput();if(t){const e=t.split(\\\\\\\"/\\\\\\\");return e[e.length-1]}return\\\\\\\"\\\\\\\"}))}))}))}async cook(t){if(Qg.isStaticImageUrl(this.pv.url))this.states.error.set(\\\\\\\"input is not a video\\\\\\\");else{const e=await this._load_texture(this.pv.url);if(e){this._video=e.image,this._video&&document.body.appendChild(this._video);const n=t[0];n&&wg.copyTextureAttributes(e,n),this.video_update_loop(),this.video_update_muted(),this.video_update_play(),this.video_update_time(),await this.textureParamsController.update(e),this.setTexture(e)}else this.cookController.endCook()}}static PARAM_CALLBACK_video_update_time(t){t.video_update_time()}static PARAM_CALLBACK_video_update_play(t){t.video_update_play()}static PARAM_CALLBACK_video_update_muted(t){t.video_update_muted()}static PARAM_CALLBACK_video_update_loop(t){t.video_update_loop()}async video_update_time(){if(this._video){const t=this.p.videoTime;t.isDirty()&&await t.compute(),this._video.currentTime=t.value}}video_update_muted(){this._video&&(this._video.muted=this.pv.muted)}video_update_loop(){this._video&&(this._video.loop=this.pv.loop)}video_update_play(){this._video&&(this.pv.play?this._video.play():this._video.pause())}static PARAM_CALLBACK_reload(t,e){t.paramCallbackReload()}paramCallbackReload(){this.p.url.setDirty()}async _load_texture(t){let e=null;const n=this.p.url;this._texture_loader=this._texture_loader||new qg(t,n,this,this.scene());try{e=await this._texture_loader.load_texture_from_url_or_op({tdataType:this.pv.ttype&&this.pv.tadvanced,dataType:this.pv.type}),e&&(e.matrixAutoUpdate=!1)}catch(t){}return e||this.states.error.set(`could not load texture '${t}'`),e}}class bv extends(xg(function(t){return class extends t{constructor(){super(...arguments),this.res=oa.VECTOR2([1024,1024])}}}(aa))){}const wv=new bv;class Tv extends af{constructor(){super(...arguments),this.paramsConfig=wv,this.textureParamsController=new wg(this)}static type(){return Lg.WEB_CAM}HTMLVideoElement(){return this._video}static displayedInputNames(){return[\\\\\\\"optional texture to copy attributes from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(Qi.NEVER)}_createHTMLVideoElement(){this._video&&document.body.removeChild(this._video);const t=document.createElement(\\\\\\\"video\\\\\\\");return t.style.display=\\\\\\\"none\\\\\\\",t.width=this.pv.res.x,t.height=this.pv.res.y,t.autoplay=!0,t.setAttribute(\\\\\\\"autoplay\\\\\\\",\\\\\\\"true\\\\\\\"),t.setAttribute(\\\\\\\"muted\\\\\\\",\\\\\\\"true\\\\\\\"),t.setAttribute(\\\\\\\"playsinline\\\\\\\",\\\\\\\"true\\\\\\\"),document.body.appendChild(t),t}async cook(t){this._video=this._createHTMLVideoElement();const e=new zg(this._video),n=t[0];if(n&&wg.copyTextureAttributes(e,n),await this.textureParamsController.update(e),navigator&&navigator.mediaDevices&&navigator.mediaDevices.getUserMedia){const t={video:{width:this.pv.res.x,height:this.pv.res.y,facingMode:\\\\\\\"user\\\\\\\"}};navigator.mediaDevices.getUserMedia(t).then((t=>{this._video&&(this._video.srcObject=t,this._video.play(),this.setTexture(e))})).catch((t=>{this.states.error.set(\\\\\\\"Unable to access the camera/webcam\\\\\\\")}))}else this.states.error.set(\\\\\\\"MediaDevices interface not available.\\\\\\\")}}class Av extends ia{static context(){return Ki.COP}cook(){this.cookController.endCook()}}class Ev extends Av{}class Mv extends Ev{constructor(){super(...arguments),this._children_controller_context=Ki.ANIM}static type(){return tr.ANIM}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class Sv extends Ev{constructor(){super(...arguments),this._children_controller_context=Ki.EVENT}static type(){return tr.EVENT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class Cv extends Ev{constructor(){super(...arguments),this._children_controller_context=Ki.COP}static type(){return tr.COP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class Nv extends Ev{constructor(){super(...arguments),this._children_controller_context=Ki.MAT}static type(){return tr.MAT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class Lv extends Av{constructor(){super(...arguments),this.paramsConfig=new Jm,this.effectsComposerController=new Zm(this),this.displayNodeController=new Lm(this,this.effectsComposerController.displayNodeControllerCallbacks()),this._children_controller_context=Ki.POST}static type(){return tr.POST}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class Ov extends Ev{constructor(){super(...arguments),this._children_controller_context=Ki.ROP}static type(){return tr.ROP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}var Rv,Pv;!function(t){t.START=\\\\\\\"start\\\\\\\",t.STOP=\\\\\\\"stop\\\\\\\",t.UPDATE=\\\\\\\"update\\\\\\\"}(Rv||(Rv={})),function(t){t.START=\\\\\\\"start\\\\\\\",t.COMPLETE=\\\\\\\"completed\\\\\\\"}(Pv||(Pv={}));const Iv=new class extends aa{constructor(){super(...arguments),this.animation=oa.NODE_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:Ki.ANIM},dependentOnFoundNode:!1}),this.play=oa.BUTTON(null,{callback:t=>{Fv.PARAM_CALLBACK_play(t)}}),this.pause=oa.BUTTON(null,{callback:t=>{Fv.PARAM_CALLBACK_pause(t)}})}};class Fv extends Ba{constructor(){super(...arguments),this.paramsConfig=Iv}static type(){return\\\\\\\"animation\\\\\\\"}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new Jo(Rv.START,$o.BASE,this._play.bind(this)),new Jo(Rv.STOP,$o.BASE,this._pause.bind(this))]),this.io.outputs.setNamedOutputConnectionPoints([new Jo(Pv.START,$o.BASE),new Jo(Pv.COMPLETE,$o.BASE)]),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.animation],(()=>this.pv.animation.path()))}))}))}processEvent(t){}static PARAM_CALLBACK_play(t){t._play({})}static PARAM_CALLBACK_pause(t){t._pause()}async _play(t){const e=this.p.animation;e.isDirty()&&await e.compute();const n=e.value.nodeWithContext(Ki.ANIM);if(!n)return;const i=await n.compute();i&&(this._timeline_builder=i.coreContent(),this._timeline_builder&&(this._timeline&&this._timeline.kill(),this._timeline=L_.timeline(),this._timeline_builder.populate(this._timeline),this._timeline.vars.onStart=()=>{this.trigger_animation_started(t)},this._timeline.vars.onComplete=()=>{this._timeline&&this._timeline.kill(),this.trigger_animation_completed(t)}))}_pause(){this._timeline&&this._timeline.pause()}trigger_animation_started(t){this.dispatchEventToOutput(Pv.START,t)}trigger_animation_completed(t){this.dispatchEventToOutput(Pv.COMPLETE,t)}}const Dv=\\\\\\\"event\\\\\\\";const kv=new class extends aa{constructor(){super(...arguments),this.active=oa.BOOLEAN(1),this.inputsCount=oa.INTEGER(5,{range:[1,10],rangeLocked:[!0,!1]})}};class Bv extends Ba{constructor(){super(...arguments),this.paramsConfig=kv}static type(){return\\\\\\\"any\\\\\\\"}initializeNode(){this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_input_name_function(this._input_name.bind(this)),this.io.connection_points.set_output_name_function((()=>Dv)),this.io.connection_points.set_expected_output_types_function((()=>[$o.BASE]))}_expected_input_types(){const t=new Array(this.pv.inputsCount);return t.fill($o.BASE),t}_input_name(t){return`trigger${t}`}async processEvent(t){this.p.active.isDirty()&&await this.p.active.compute(),this.pv.active&&this.dispatchEventToOutput(Dv,t)}}const zv=new class extends aa{constructor(){super(...arguments),this.blocking=oa.BOOLEAN(1)}};class Uv extends Ba{constructor(){super(...arguments),this.paramsConfig=zv}static type(){return\\\\\\\"block\\\\\\\"}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new Jo(\\\\\\\"in\\\\\\\",$o.BASE,this._process_incoming_event.bind(this))]),this.io.outputs.setNamedOutputConnectionPoints([new Jo(Uv.OUTPUT,$o.BASE)]),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.blocking],(()=>this.pv.blocking?\\\\\\\"blocking (X)\\\\\\\":\\\\\\\"pass-through (--\\\\x3e)\\\\\\\"))}))}))}trigger_output(t){this.dispatchEventToOutput(Uv.OUTPUT,t)}_process_incoming_event(t){this.pv.blocking||this.trigger_output(t)}}var Gv;Uv.OUTPUT=\\\\\\\"output\\\\\\\",function(t){t.OUT=\\\\\\\"out\\\\\\\"}(Gv||(Gv={}));const Vv=new class extends aa{constructor(){super(...arguments),this.dispatch=oa.BUTTON(null,{callback:t=>{Hv.PARAM_CALLBACK_execute(t)}})}};class Hv extends Ba{constructor(){super(...arguments),this.paramsConfig=Vv}static type(){return\\\\\\\"button\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new Jo(Gv.OUT,$o.BASE)])}processEvent(t){}process_event_execute(t){this.dispatchEventToOutput(Gv.OUT,t)}static PARAM_CALLBACK_execute(t){t.process_event_execute({})}}class jv extends Ba{constructor(){super(...arguments),this._controls_by_viewer=new Map}async apply_controls(t,e){var n;null===(n=e.controlsController)||void 0===n||n.dispose_controls();const i=e.canvas();if(!i)return;const r=await this.create_controls_instance(t,i),s=this._controls_by_viewer.get(e);s&&s.dispose(),this._controls_by_viewer.set(e,r);const o=ai.performance.performanceManager().now();return r.name=`${this.path()}:${t.name}:${o}:${this.controls_id()}`,await this.params.evalAll(),this.setup_controls(r),r}controls_id(){return JSON.stringify(this.params.all.map((t=>t.valueSerialized())))}}var Wv=n(28);const qv=new p.a(0,0,1),Xv=new Wv.a,Yv=new au.a,$v=new au.a(-Math.sqrt(.5),0,0,Math.sqrt(.5)),Jv={type:\\\\\\\"change\\\\\\\"};class Zv extends $.a{constructor(t){super(),!1===window.isSecureContext&&console.error(\\\\\\\"THREE.DeviceOrientationControls: DeviceOrientationEvent is only available in secure contexts (https)\\\\\\\");const e=this,n=new au.a;this.object=t,this.object.rotation.reorder(\\\\\\\"YXZ\\\\\\\"),this.enabled=!0,this.deviceOrientation={},this.screenOrientation=0,this.alphaOffset=0;const i=function(t){e.deviceOrientation=t},r=function(){e.screenOrientation=window.orientation||0};this.connect=function(){r(),void 0!==window.DeviceOrientationEvent&&\\\\\\\"function\\\\\\\"==typeof window.DeviceOrientationEvent.requestPermission?window.DeviceOrientationEvent.requestPermission().then((function(t){\\\\\\\"granted\\\\\\\"==t&&(window.addEventListener(\\\\\\\"orientationchange\\\\\\\",r),window.addEventListener(\\\\\\\"deviceorientation\\\\\\\",i))})).catch((function(t){console.error(\\\\\\\"THREE.DeviceOrientationControls: Unable to use DeviceOrientation API:\\\\\\\",t)})):(window.addEventListener(\\\\\\\"orientationchange\\\\\\\",r),window.addEventListener(\\\\\\\"deviceorientation\\\\\\\",i)),e.enabled=!0},this.disconnect=function(){window.removeEventListener(\\\\\\\"orientationchange\\\\\\\",r),window.removeEventListener(\\\\\\\"deviceorientation\\\\\\\",i),e.enabled=!1},this.update=function(){if(!1===e.enabled)return;const t=e.deviceOrientation;if(t){const i=t.alpha?Ln.e(t.alpha)+e.alphaOffset:0,r=t.beta?Ln.e(t.beta):0,s=t.gamma?Ln.e(t.gamma):0,o=e.screenOrientation?Ln.e(e.screenOrientation):0;!function(t,e,n,i,r){Xv.set(n,e,-i,\\\\\\\"YXZ\\\\\\\"),t.setFromEuler(Xv),t.multiply($v),t.multiply(Yv.setFromAxisAngle(qv,-r))}(e.object.quaternion,i,r,s,o),8*(1-n.dot(e.object.quaternion))>1e-6&&(n.copy(e.object.quaternion),e.dispatchEvent(Jv))}},this.dispose=function(){e.disconnect()},this.connect()}}const Qv=new class extends aa{constructor(){super(...arguments),this.enabled=oa.BOOLEAN(1)}};class Kv extends jv{constructor(){super(...arguments),this.paramsConfig=Qv,this._controls_by_element_id=new Map}static type(){return rr.DEVICE_ORIENTATION}endEventName(){return\\\\\\\"end\\\\\\\"}async create_controls_instance(t,e){const n=new Zv(t);return this._controls_by_element_id.set(e.id,n),n}setup_controls(t){t.enabled=this.pv.enabled}update_required(){return!0}dispose_controls_for_html_element_id(t){const e=this._controls_by_element_id.get(t);e&&(e.dispose(),this._controls_by_element_id.delete(t))}}class ty{constructor(t=1,e=0,n=0){return this.radius=t,this.phi=e,this.theta=n,this}set(t,e,n){return this.radius=t,this.phi=e,this.theta=n,this}copy(t){return this.radius=t.radius,this.phi=t.phi,this.theta=t.theta,this}makeSafe(){const t=1e-6;return this.phi=Math.max(t,Math.min(Math.PI-t,this.phi)),this}setFromVector3(t){return this.setFromCartesianCoords(t.x,t.y,t.z)}setFromCartesianCoords(t,e,n){return this.radius=Math.sqrt(t*t+e*e+n*n),0===this.radius?(this.theta=0,this.phi=0):(this.theta=Math.atan2(t,n),this.phi=Math.acos(Ln.d(e/this.radius,-1,1))),this}clone(){return(new this.constructor).copy(this)}}const ey={type:\\\\\\\"change\\\\\\\"},ny={type:\\\\\\\"start\\\\\\\"},iy={type:\\\\\\\"end\\\\\\\"};class ry extends $.a{constructor(t,e){super(),void 0===e&&console.warn('THREE.OrbitControls: The second parameter \\\\\\\"domElement\\\\\\\" is now mandatory.'),e===document&&console.error('THREE.OrbitControls: \\\\\\\"document\\\\\\\" should not be used as the target \\\\\\\"domElement\\\\\\\". Please use \\\\\\\"renderer.domElement\\\\\\\" instead.'),this.object=t,this.domElement=e,this.domElement.style.touchAction=\\\\\\\"none\\\\\\\",this.enabled=!0,this.target=new p.a,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.autoRotate=!1,this.autoRotateSpeed=2,this.enableKeys=!0,this.keyMode=\\\\\\\"pan\\\\\\\",this.keyRotateSpeedVertical=1,this.keyRotateSpeedHorizontal=1,this.keys={LEFT:\\\\\\\"ArrowLeft\\\\\\\",UP:\\\\\\\"ArrowUp\\\\\\\",RIGHT:\\\\\\\"ArrowRight\\\\\\\",BOTTOM:\\\\\\\"ArrowDown\\\\\\\"},this.mouseButtons={LEFT:w.hb.ROTATE,MIDDLE:w.hb.DOLLY,RIGHT:w.hb.PAN},this.touches={ONE:w.Tc.ROTATE,TWO:w.Tc.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this._domElementKeyEvents=null,this.getPolarAngle=function(){return o.phi},this.getAzimuthalAngle=function(){return o.theta},this.getDistance=function(){return this.object.position.distanceTo(this.target)},this.listenToKeyEvents=function(t){t.addEventListener(\\\\\\\"keydown\\\\\\\",q),this._domElementKeyEvents=t},this.saveState=function(){n.target0.copy(n.target),n.position0.copy(n.object.position),n.zoom0=n.object.zoom},this.reset=function(){n.target.copy(n.target0),n.object.position.copy(n.position0),n.object.zoom=n.zoom0,n.object.updateProjectionMatrix(),n.dispatchEvent(ey),n.update(),r=i.NONE},this.update=function(){const e=new p.a,h=(new au.a).setFromUnitVectors(t.up,new p.a(0,1,0)),d=h.clone().invert(),_=new p.a,m=new au.a,f=2*Math.PI;let g=!1;return function(){const t=n.object.position;if(e.copy(t).sub(n.target),e.applyQuaternion(h),o.setFromVector3(e),n.autoRotate&&r===i.NONE&&M(2*Math.PI/60/60*n.autoRotateSpeed),n.enableDamping){const t=a.theta*n.dampingFactor,e=a.phi*n.dampingFactor;t<s&&e<s?g||(n.dispatchEvent(iy),g=!0):g=!1,o.theta+=t,o.phi+=e}else o.theta+=a.theta,o.phi+=a.phi;let p=n.minAzimuthAngle,v=n.maxAzimuthAngle;return isFinite(p)&&isFinite(v)&&(p<-Math.PI?p+=f:p>Math.PI&&(p-=f),v<-Math.PI?v+=f:v>Math.PI&&(v-=f),o.theta=p<v?Math.max(p,Math.min(v,o.theta)):o.theta>(p+v)/2?Math.max(p,o.theta):Math.min(v,o.theta)),o.phi=Math.max(n.minPolarAngle,Math.min(n.maxPolarAngle,o.phi)),o.makeSafe(),o.radius*=l,o.radius=Math.max(n.minDistance,Math.min(n.maxDistance,o.radius)),!0===n.enableDamping?n.target.addScaledVector(c,n.dampingFactor):n.target.add(c),e.setFromSpherical(o),e.applyQuaternion(d),t.copy(n.target).add(e),n.object.lookAt(n.target),!0===n.enableDamping?(a.theta*=1-n.dampingFactor,a.phi*=1-n.dampingFactor,c.multiplyScalar(1-n.dampingFactor)):(a.set(0,0,0),c.set(0,0,0)),l=1,!!(u||_.distanceToSquared(n.object.position)>s||8*(1-m.dot(n.object.quaternion))>s)&&(n.dispatchEvent(ey),_.copy(n.object.position),m.copy(n.object.quaternion),u=!1,!0)}}(),this.dispose=function(){n.domElement.removeEventListener(\\\\\\\"contextmenu\\\\\\\",X,!1),n.domElement.removeEventListener(\\\\\\\"pointerdown\\\\\\\",G,!1),n.domElement.removeEventListener(\\\\\\\"pointercancel\\\\\\\",j),n.domElement.removeEventListener(\\\\\\\"wheel\\\\\\\",W,!1),n.domElement.ownerDocument.removeEventListener(\\\\\\\"pointermove\\\\\\\",V,!1),n.domElement.ownerDocument.removeEventListener(\\\\\\\"pointerup\\\\\\\",H,!1),null!==n._domElementKeyEvents&&n._domElementKeyEvents.removeEventListener(\\\\\\\"keydown\\\\\\\",q)};const n=this,i={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6};let r=i.NONE;const s=1e-6,o=new ty,a=new ty;let l=1;const c=new p.a;let u=!1;const h=new d.a,_=new d.a,m=new d.a,f=new d.a,g=new d.a,v=new d.a,y=new d.a,x=new d.a,b=new d.a,T=[],A={};function E(){return Math.pow(.95,n.zoomSpeed)}function M(t){a.theta-=t}function S(t){a.phi-=t}const C=function(){const t=new p.a;return function(e,n){t.setFromMatrixColumn(n,0),t.multiplyScalar(-e),c.add(t)}}(),N=function(){const t=new p.a;return function(e,i){!0===n.screenSpacePanning?t.setFromMatrixColumn(i,1):(t.setFromMatrixColumn(i,0),t.crossVectors(n.object.up,t)),t.multiplyScalar(e),c.add(t)}}(),L=function(){const t=new p.a;return function(e,i){const r=n.domElement;if(n.object.isPerspectiveCamera){const s=n.object.position;t.copy(s).sub(n.target);let o=t.length();o*=Math.tan(n.object.fov/2*Math.PI/180),C(2*e*o/r.clientHeight,n.object.matrix),N(2*i*o/r.clientHeight,n.object.matrix)}else n.object.isOrthographicCamera?(C(e*(n.object.right-n.object.left)/n.object.zoom/r.clientWidth,n.object.matrix),N(i*(n.object.top-n.object.bottom)/n.object.zoom/r.clientHeight,n.object.matrix)):(console.warn(\\\\\\\"WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.\\\\\\\"),n.enablePan=!1)}}();function O(t){n.object.isPerspectiveCamera?l/=t:n.object.isOrthographicCamera?(n.object.zoom=Math.max(n.minZoom,Math.min(n.maxZoom,n.object.zoom*t)),n.object.updateProjectionMatrix(),u=!0):(console.warn(\\\\\\\"WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.\\\\\\\"),n.enableZoom=!1)}function R(t){n.object.isPerspectiveCamera?l*=t:n.object.isOrthographicCamera?(n.object.zoom=Math.max(n.minZoom,Math.min(n.maxZoom,n.object.zoom/t)),n.object.updateProjectionMatrix(),u=!0):(console.warn(\\\\\\\"WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.\\\\\\\"),n.enableZoom=!1)}function P(t){h.set(t.clientX,t.clientY)}function I(t){f.set(t.clientX,t.clientY)}function F(){if(1===T.length)h.set(T[0].pageX,T[0].pageY);else{const t=.5*(T[0].pageX+T[1].pageX),e=.5*(T[0].pageY+T[1].pageY);h.set(t,e)}}function D(){if(1===T.length)f.set(T[0].pageX,T[0].pageY);else{const t=.5*(T[0].pageX+T[1].pageX),e=.5*(T[0].pageY+T[1].pageY);f.set(t,e)}}function k(){const t=T[0].pageX-T[1].pageX,e=T[0].pageY-T[1].pageY,n=Math.sqrt(t*t+e*e);y.set(0,n)}function B(t){if(1==T.length)_.set(t.pageX,t.pageY);else{const e=J(t),n=.5*(t.pageX+e.x),i=.5*(t.pageY+e.y);_.set(n,i)}m.subVectors(_,h).multiplyScalar(n.rotateSpeed);const e=n.domElement;M(2*Math.PI*m.x/e.clientHeight),S(2*Math.PI*m.y/e.clientHeight),h.copy(_)}function z(t){if(1===T.length)g.set(t.pageX,t.pageY);else{const e=J(t),n=.5*(t.pageX+e.x),i=.5*(t.pageY+e.y);g.set(n,i)}v.subVectors(g,f).multiplyScalar(n.panSpeed),L(v.x,v.y),f.copy(g)}function U(t){const e=J(t),i=t.pageX-e.x,r=t.pageY-e.y,s=Math.sqrt(i*i+r*r);x.set(0,s),b.set(0,Math.pow(x.y/y.y,n.zoomSpeed)),O(b.y),y.copy(x)}function G(t){!1!==n.enabled&&(0===T.length&&(n.domElement.setPointerCapture(t.pointerId),n.domElement.ownerDocument.addEventListener(\\\\\\\"pointermove\\\\\\\",V),n.domElement.ownerDocument.addEventListener(\\\\\\\"pointerup\\\\\\\",H)),function(t){T.push(t)}(t),\\\\\\\"touch\\\\\\\"===t.pointerType?function(t){switch($(t),T.length){case 1:switch(n.touches.ONE){case w.Tc.ROTATE:if(!1===n.enableRotate)return;F(),r=i.TOUCH_ROTATE;break;case w.Tc.PAN:if(!1===n.enablePan)return;D(),r=i.TOUCH_PAN;break;default:r=i.NONE}break;case 2:switch(n.touches.TWO){case w.Tc.DOLLY_PAN:if(!1===n.enableZoom&&!1===n.enablePan)return;n.enableZoom&&k(),n.enablePan&&D(),r=i.TOUCH_DOLLY_PAN;break;case w.Tc.DOLLY_ROTATE:if(!1===n.enableZoom&&!1===n.enableRotate)return;n.enableZoom&&k(),n.enableRotate&&F(),r=i.TOUCH_DOLLY_ROTATE;break;default:r=i.NONE}break;default:r=i.NONE}r!==i.NONE&&n.dispatchEvent(ny)}(t):function(t){let e;switch(t.button){case 0:e=n.mouseButtons.LEFT;break;case 1:e=n.mouseButtons.MIDDLE;break;case 2:e=n.mouseButtons.RIGHT;break;default:e=-1}switch(e){case w.hb.DOLLY:if(!1===n.enableZoom)return;!function(t){y.set(t.clientX,t.clientY)}(t),r=i.DOLLY;break;case w.hb.ROTATE:if(t.ctrlKey||t.metaKey||t.shiftKey){if(!1===n.enablePan)return;I(t),r=i.PAN}else{if(!1===n.enableRotate)return;P(t),r=i.ROTATE}break;case w.hb.PAN:if(t.ctrlKey||t.metaKey||t.shiftKey){if(!1===n.enableRotate)return;P(t),r=i.ROTATE}else{if(!1===n.enablePan)return;I(t),r=i.PAN}break;default:r=i.NONE}r!==i.NONE&&n.dispatchEvent(ny)}(t))}function V(t){!1!==n.enabled&&(\\\\\\\"touch\\\\\\\"===t.pointerType?function(t){switch($(t),r){case i.TOUCH_ROTATE:if(!1===n.enableRotate)return;B(t),n.update();break;case i.TOUCH_PAN:if(!1===n.enablePan)return;z(t),n.update();break;case i.TOUCH_DOLLY_PAN:if(!1===n.enableZoom&&!1===n.enablePan)return;!function(t){n.enableZoom&&U(t),n.enablePan&&z(t)}(t),n.update();break;case i.TOUCH_DOLLY_ROTATE:if(!1===n.enableZoom&&!1===n.enableRotate)return;!function(t){n.enableZoom&&U(t),n.enableRotate&&B(t)}(t),n.update();break;default:r=i.NONE}}(t):function(t){if(!1===n.enabled)return;switch(r){case i.ROTATE:if(!1===n.enableRotate)return;!function(t){_.set(t.clientX,t.clientY),m.subVectors(_,h).multiplyScalar(n.rotateSpeed);var e=n.domElement;M(2*Math.PI*m.x/e.clientHeight),S(2*Math.PI*m.y/e.clientHeight),h.copy(_),n.update()}(t);break;case i.DOLLY:if(!1===n.enableZoom)return;!function(t){x.set(t.clientX,t.clientY),b.subVectors(x,y),b.y>0?O(E()):b.y<0&&R(E()),y.copy(x),n.update()}(t);break;case i.PAN:if(!1===n.enablePan)return;!function(t){g.set(t.clientX,t.clientY),v.subVectors(g,f).multiplyScalar(n.panSpeed),L(v.x,v.y),f.copy(g),n.update()}(t)}}(t))}function H(t){!1!==n.enabled&&(t.pointerType,n.dispatchEvent(iy),r=i.NONE,Y(t),0===T.length&&(n.domElement.releasePointerCapture(t.pointerId),n.domElement.ownerDocument.removeEventListener(\\\\\\\"pointermove\\\\\\\",V),n.domElement.ownerDocument.removeEventListener(\\\\\\\"pointerup\\\\\\\",H)))}function j(t){Y(t)}function W(t){!1===n.enabled||!1===n.enableZoom||r!==i.NONE&&r!==i.ROTATE||(t.preventDefault(),n.dispatchEvent(ny),function(t){t.deltaY<0?R(E()):t.deltaY>0&&O(E()),n.update()}(t),n.dispatchEvent(iy))}function q(t){!1!==n.enabled&&!1!==n.enablePan&&function(t){let e=!1;if(\\\\\\\"pan\\\\\\\"==n.keyMode)switch(t.code){case n.keys.UP:L(0,n.keyPanSpeed),e=!0;break;case n.keys.BOTTOM:L(0,-n.keyPanSpeed),e=!0;break;case n.keys.LEFT:L(n.keyPanSpeed,0),e=!0;break;case n.keys.RIGHT:L(-n.keyPanSpeed,0),e=!0}else switch(t.code){case n.keys.UP:S(n.keyRotateSpeedVertical),e=!0;break;case n.keys.BOTTOM:S(-n.keyRotateSpeedVertical),e=!0;break;case n.keys.LEFT:M(n.keyRotateSpeedHorizontal),e=!0;break;case n.keys.RIGHT:M(-n.keyRotateSpeedHorizontal),e=!0}e&&(t.preventDefault(),n.update())}(t)}function X(t){!1!==n.enabled&&t.preventDefault()}function Y(t){delete A[t.pointerId];for(let e=0;e<T.length;e++)if(T[e].pointerId==t.pointerId)return void T.splice(e,1)}function $(t){let e=A[t.pointerId];void 0===e&&(e=new d.a,A[t.pointerId]=e),e.set(t.pageX,t.pageY)}function J(t){const e=t.pointerId===T[0].pointerId?T[1]:T[0];return A[e.pointerId]}n.domElement.addEventListener(\\\\\\\"contextmenu\\\\\\\",X),n.domElement.addEventListener(\\\\\\\"pointerdown\\\\\\\",G),n.domElement.addEventListener(\\\\\\\"pointercancel\\\\\\\",j),n.domElement.addEventListener(\\\\\\\"wheel\\\\\\\",W,{passive:!1}),this.update()}}class sy extends ry{constructor(t,e){super(t,e),this.screenSpacePanning=!1,this.mouseButtons.LEFT=w.hb.PAN,this.mouseButtons.RIGHT=w.hb.ROTATE,this.touches.ONE=w.Tc.PAN,this.touches.TWO=w.Tc.DOLLY_ROTATE}}const oy=\\\\\\\"start\\\\\\\",ay=\\\\\\\"change\\\\\\\";var ly;!function(t){t.PAN=\\\\\\\"pan\\\\\\\",t.ROTATE=\\\\\\\"rotate\\\\\\\"}(ly||(ly={}));const cy=[ly.PAN,ly.ROTATE];const uy=new class extends aa{constructor(){super(...arguments),this.enabled=oa.BOOLEAN(1),this.allowPan=oa.BOOLEAN(1),this.allowRotate=oa.BOOLEAN(1),this.allowZoom=oa.BOOLEAN(1),this.tdamping=oa.BOOLEAN(1),this.damping=oa.FLOAT(.1,{visibleIf:{tdamping:!0}}),this.screenSpacePanning=oa.BOOLEAN(1),this.rotateSpeed=oa.FLOAT(.5),this.minDistance=oa.FLOAT(1,{range:[0,100],rangeLocked:[!0,!1]}),this.maxDistance=oa.FLOAT(50,{range:[0,100],rangeLocked:[!0,!1]}),this.limitAzimuthAngle=oa.BOOLEAN(0),this.azimuthAngleRange=oa.VECTOR2([\\\\\\\"-2*$PI\\\\\\\",\\\\\\\"2*$PI\\\\\\\"],{visibleIf:{limitAzimuthAngle:1}}),this.polarAngleRange=oa.VECTOR2([0,\\\\\\\"$PI\\\\\\\"]),this.target=oa.VECTOR3([0,0,0],{cook:!1,computeOnDirty:!0,callback:t=>{hy.PARAM_CALLBACK_update_target(t)}}),this.enableKeys=oa.BOOLEAN(0),this.keysMode=oa.INTEGER(cy.indexOf(ly.PAN),{visibleIf:{enableKeys:1},menu:{entries:cy.map(((t,e)=>({name:t,value:e})))}}),this.keysPanSpeed=oa.FLOAT(7,{range:[0,10],rangeLocked:[!1,!1],visibleIf:{enableKeys:1,keysMode:cy.indexOf(ly.PAN)}}),this.keysRotateSpeedVertical=oa.FLOAT(1,{range:[0,1],rangeLocked:[!1,!1],visibleIf:{enableKeys:1,keysMode:cy.indexOf(ly.ROTATE)}}),this.keysRotateSpeedHorizontal=oa.FLOAT(1,{range:[0,1],rangeLocked:[!1,!1],visibleIf:{enableKeys:1,keysMode:cy.indexOf(ly.ROTATE)}})}};class hy extends jv{constructor(){super(...arguments),this.paramsConfig=uy,this._controls_by_element_id=new Map,this._target_array=[0,0,0]}static type(){return rr.ORBIT}endEventName(){return\\\\\\\"end\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new Jo(oy,$o.BASE),new Jo(ay,$o.BASE),new Jo(\\\\\\\"end\\\\\\\",$o.BASE)])}async create_controls_instance(t,e){const n=new ry(t,e);return n.addEventListener(\\\\\\\"end\\\\\\\",(()=>{this._on_controls_end(n)})),this._controls_by_element_id.set(e.id,n),this._bind_listeners_to_controls_instance(n),n}_bind_listeners_to_controls_instance(t){t.addEventListener(\\\\\\\"start\\\\\\\",(()=>{this.dispatchEventToOutput(oy,{})})),t.addEventListener(\\\\\\\"change\\\\\\\",(()=>{this.dispatchEventToOutput(ay,{})})),t.addEventListener(\\\\\\\"end\\\\\\\",(()=>{this.dispatchEventToOutput(\\\\\\\"end\\\\\\\",{})}))}setup_controls(t){t.enabled=this.pv.enabled,t.enablePan=this.pv.allowPan,t.enableRotate=this.pv.allowRotate,t.enableZoom=this.pv.allowZoom,t.enableDamping=this.pv.tdamping,t.dampingFactor=this.pv.damping,t.rotateSpeed=this.pv.rotateSpeed,t.screenSpacePanning=this.pv.screenSpacePanning,t.minDistance=this.pv.minDistance,t.maxDistance=this.pv.maxDistance,this._set_azimuth_angle(t),t.minPolarAngle=this.pv.polarAngleRange.x,t.maxPolarAngle=this.pv.polarAngleRange.y,t.target.copy(this.pv.target),t.enabled&&t.update(),t.enableKeys=this.pv.enableKeys,t.enableKeys&&(t.keyMode=cy[this.pv.keysMode],t.keyRotateSpeedVertical=this.pv.keysRotateSpeedVertical,t.keyRotateSpeedHorizontal=this.pv.keysRotateSpeedHorizontal,t.keyPanSpeed=this.pv.keysPanSpeed)}_set_azimuth_angle(t){this.pv.limitAzimuthAngle?(t.minAzimuthAngle=this.pv.azimuthAngleRange.x,t.maxAzimuthAngle=this.pv.azimuthAngleRange.y):(t.minAzimuthAngle=1/0,t.maxAzimuthAngle=1/0)}update_required(){return this.pv.tdamping}_on_controls_end(t){this.pv.allowPan&&(t.target.toArray(this._target_array),this.p.target.set(this._target_array))}static PARAM_CALLBACK_update_target(t){t._update_target()}_update_target(){const t=this.pv.target;this._controls_by_element_id.forEach(((e,n)=>{const i=e.target;i.equals(t)||(i.copy(t),e.update())}))}dispose_controls_for_html_element_id(t){this._controls_by_element_id.get(t)&&this._controls_by_element_id.delete(t)}}class dy extends hy{static type(){return rr.MAP}async create_controls_instance(t,e){const n=new sy(t,e);return this._bind_listeners_to_controls_instance(n),n}}const py=new class extends aa{constructor(){super(...arguments),this.delay=oa.INTEGER(1e3,{range:[0,1e3],rangeLocked:[!0,!1]})}};class _y extends Ba{constructor(){super(...arguments),this.paramsConfig=py}static type(){return\\\\\\\"delay\\\\\\\"}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new Jo(\\\\\\\"in\\\\\\\",$o.BASE,this._process_input.bind(this))]),this.io.outputs.setNamedOutputConnectionPoints([new Jo(\\\\\\\"out\\\\\\\",$o.BASE)])}_process_input(t){setTimeout((()=>{this.dispatchEventToOutput(\\\\\\\"out\\\\\\\",t)}),this.pv.delay)}}const my=100,fy=301,gy=302,vy=303,yy=304,xy=306,by=307,wy=1e3,Ty=1001,Ay=1002,Ey=1003,My=1004,Sy=1005,Cy=1006,Ny=1007,Ly=1008,Oy=1009,Ry=1012,Py=1014,Iy=1015,Fy=1016,Dy=1020,ky=1022,By=1023,zy=1026,Uy=1027,Gy=2300,Vy=2301,Hy=2302,jy=2400,Wy=2401,qy=2402,Xy=2500,Yy=3e3,$y=3001,Jy=3007,Zy=3002,Qy=7680,Ky=35044,tx=35048,ex=\\\\\\\"300 es\\\\\\\";class nx{addEventListener(t,e){void 0===this._listeners&&(this._listeners={});const n=this._listeners;void 0===n[t]&&(n[t]=[]),-1===n[t].indexOf(e)&&n[t].push(e)}hasEventListener(t,e){if(void 0===this._listeners)return!1;const n=this._listeners;return void 0!==n[t]&&-1!==n[t].indexOf(e)}removeEventListener(t,e){if(void 0===this._listeners)return;const n=this._listeners[t];if(void 0!==n){const t=n.indexOf(e);-1!==t&&n.splice(t,1)}}dispatchEvent(t){if(void 0===this._listeners)return;const e=this._listeners[t.type];if(void 0!==e){t.target=this;const n=e.slice(0);for(let e=0,i=n.length;e<i;e++)n[e].call(this,t);t.target=null}}}let ix=1234567;const rx=Math.PI/180,sx=180/Math.PI,ox=[];for(let t=0;t<256;t++)ox[t]=(t<16?\\\\\\\"0\\\\\\\":\\\\\\\"\\\\\\\")+t.toString(16);const ax=\\\\\\\"undefined\\\\\\\"!=typeof crypto&&\\\\\\\"randomUUID\\\\\\\"in crypto;function lx(){if(ax)return crypto.randomUUID().toUpperCase();const t=4294967295*Math.random()|0,e=4294967295*Math.random()|0,n=4294967295*Math.random()|0,i=4294967295*Math.random()|0;return(ox[255&t]+ox[t>>8&255]+ox[t>>16&255]+ox[t>>24&255]+\\\\\\\"-\\\\\\\"+ox[255&e]+ox[e>>8&255]+\\\\\\\"-\\\\\\\"+ox[e>>16&15|64]+ox[e>>24&255]+\\\\\\\"-\\\\\\\"+ox[63&n|128]+ox[n>>8&255]+\\\\\\\"-\\\\\\\"+ox[n>>16&255]+ox[n>>24&255]+ox[255&i]+ox[i>>8&255]+ox[i>>16&255]+ox[i>>24&255]).toUpperCase()}function cx(t,e,n){return Math.max(e,Math.min(n,t))}function ux(t,e){return(t%e+e)%e}function hx(t,e,n){return(1-n)*t+n*e}function dx(t){return 0==(t&t-1)&&0!==t}function px(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))}function _x(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))}var mx=Object.freeze({__proto__:null,DEG2RAD:rx,RAD2DEG:sx,generateUUID:lx,clamp:cx,euclideanModulo:ux,mapLinear:function(t,e,n,i,r){return i+(t-e)*(r-i)/(n-e)},inverseLerp:function(t,e,n){return t!==e?(n-t)/(e-t):0},lerp:hx,damp:function(t,e,n,i){return hx(t,e,1-Math.exp(-n*i))},pingpong:function(t,e=1){return e-Math.abs(ux(t,2*e)-e)},smoothstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*(3-2*t)},smootherstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},seededRandom:function(t){return void 0!==t&&(ix=t%2147483647),ix=16807*ix%2147483647,(ix-1)/2147483646},degToRad:function(t){return t*rx},radToDeg:function(t){return t*sx},isPowerOfTwo:dx,ceilPowerOfTwo:px,floorPowerOfTwo:_x,setQuaternionFromProperEuler:function(t,e,n,i,r){const s=Math.cos,o=Math.sin,a=s(n/2),l=o(n/2),c=s((e+i)/2),u=o((e+i)/2),h=s((e-i)/2),d=o((e-i)/2),p=s((i-e)/2),_=o((i-e)/2);switch(r){case\\\\\\\"XYX\\\\\\\":t.set(a*u,l*h,l*d,a*c);break;case\\\\\\\"YZY\\\\\\\":t.set(l*d,a*u,l*h,a*c);break;case\\\\\\\"ZXZ\\\\\\\":t.set(l*h,l*d,a*u,a*c);break;case\\\\\\\"XZX\\\\\\\":t.set(a*u,l*_,l*p,a*c);break;case\\\\\\\"YXY\\\\\\\":t.set(l*p,a*u,l*_,a*c);break;case\\\\\\\"ZYZ\\\\\\\":t.set(l*_,l*p,a*u,a*c);break;default:console.warn(\\\\\\\"THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: \\\\\\\"+r)}}});class fx{constructor(t=0,e=0){this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error(\\\\\\\"index is out of range: \\\\\\\"+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error(\\\\\\\"index is out of range: \\\\\\\"+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\\\\\\\"),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\\\\\\\"),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}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(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.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(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn(\\\\\\\"THREE.Vector2: offset has been removed from .fromBufferAttribute().\\\\\\\"),this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),i=Math.sin(e),r=this.x-t.x,s=this.y-t.y;return this.x=r*n-s*i+t.x,this.y=r*i+s*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}fx.prototype.isVector2=!0;class gx{constructor(){this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error(\\\\\\\"THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.\\\\\\\")}set(t,e,n,i,r,s,o,a,l){const c=this.elements;return c[0]=t,c[1]=i,c[2]=o,c[3]=e,c[4]=r,c[5]=a,c[6]=n,c[7]=s,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,s=n[0],o=n[3],a=n[6],l=n[1],c=n[4],u=n[7],h=n[2],d=n[5],p=n[8],_=i[0],m=i[3],f=i[6],g=i[1],v=i[4],y=i[7],x=i[2],b=i[5],w=i[8];return r[0]=s*_+o*g+a*x,r[3]=s*m+o*v+a*b,r[6]=s*f+o*y+a*w,r[1]=l*_+c*g+u*x,r[4]=l*m+c*v+u*b,r[7]=l*f+c*y+u*w,r[2]=h*_+d*g+p*x,r[5]=h*m+d*v+p*b,r[8]=h*f+d*y+p*w,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],o=t[5],a=t[6],l=t[7],c=t[8];return e*s*c-e*o*l-n*r*c+n*o*a+i*r*l-i*s*a}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],o=t[5],a=t[6],l=t[7],c=t[8],u=c*s-o*l,h=o*a-c*r,d=l*r-s*a,p=e*u+n*h+i*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const _=1/p;return t[0]=u*_,t[1]=(i*l-c*n)*_,t[2]=(o*n-i*s)*_,t[3]=h*_,t[4]=(c*e-i*a)*_,t[5]=(i*r-o*e)*_,t[6]=d*_,t[7]=(n*a-l*e)*_,t[8]=(s*e-n*r)*_,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,r,s,o){const a=Math.cos(r),l=Math.sin(r);return this.set(n*a,n*l,-n*(a*s+l*o)+s+t,-i*l,i*a,-i*(-l*s+a*o)+o+e,0,0,1),this}scale(t,e){const n=this.elements;return n[0]*=t,n[3]*=t,n[6]*=t,n[1]*=e,n[4]*=e,n[7]*=e,this}rotate(t){const e=Math.cos(t),n=Math.sin(t),i=this.elements,r=i[0],s=i[3],o=i[6],a=i[1],l=i[4],c=i[7];return i[0]=e*r+n*a,i[3]=e*s+n*l,i[6]=e*o+n*c,i[1]=-n*r+e*a,i[4]=-n*s+e*l,i[7]=-n*o+e*c,this}translate(t,e){const n=this.elements;return n[0]+=t*n[2],n[3]+=t*n[5],n[6]+=t*n[8],n[1]+=e*n[2],n[4]+=e*n[5],n[7]+=e*n[8],this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<9;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}clone(){return(new this.constructor).fromArray(this.elements)}}function vx(t){if(0===t.length)return-1/0;let e=t[0];for(let n=1,i=t.length;n<i;++n)t[n]>e&&(e=t[n]);return e}gx.prototype.isMatrix3=!0;Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array;function yx(t){return document.createElementNS(\\\\\\\"http://www.w3.org/1999/xhtml\\\\\\\",t)}let xx;class bx{static getDataURL(t){if(/^data:/i.test(t.src))return t.src;if(\\\\\\\"undefined\\\\\\\"==typeof HTMLCanvasElement)return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{void 0===xx&&(xx=yx(\\\\\\\"canvas\\\\\\\")),xx.width=t.width,xx.height=t.height;const n=xx.getContext(\\\\\\\"2d\\\\\\\");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=xx}return e.width>2048||e.height>2048?(console.warn(\\\\\\\"THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons\\\\\\\",t),e.toDataURL(\\\\\\\"image/jpeg\\\\\\\",.6)):e.toDataURL(\\\\\\\"image/png\\\\\\\")}}let wx=0;class Tx extends nx{constructor(t=Tx.DEFAULT_IMAGE,e=Tx.DEFAULT_MAPPING,n=1001,i=1001,r=1006,s=1008,o=1023,a=1009,l=1,c=3e3){super(),Object.defineProperty(this,\\\\\\\"id\\\\\\\",{value:wx++}),this.uuid=lx(),this.name=\\\\\\\"\\\\\\\",this.image=t,this.mipmaps=[],this.mapping=e,this.wrapS=n,this.wrapT=i,this.magFilter=r,this.minFilter=s,this.anisotropy=l,this.format=o,this.internalFormat=null,this.type=a,this.offset=new fx(0,0),this.repeat=new fx(1,1),this.center=new fx(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new gx,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=c,this.version=0,this.onUpdate=null,this.isRenderTargetTexture=!1}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(t){return this.name=t.name,this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this}toJSON(t){const e=void 0===t||\\\\\\\"string\\\\\\\"==typeof t;if(!e&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];const n={metadata:{version:4.5,type:\\\\\\\"Texture\\\\\\\",generator:\\\\\\\"Texture.toJSON\\\\\\\"},uuid:this.uuid,name:this.name,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,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){const i=this.image;if(void 0===i.uuid&&(i.uuid=lx()),!e&&void 0===t.images[i.uuid]){let e;if(Array.isArray(i)){e=[];for(let t=0,n=i.length;t<n;t++)i[t].isDataTexture?e.push(Ax(i[t].image)):e.push(Ax(i[t]))}else e=Ax(i);t.images[i.uuid]={uuid:i.uuid,url:e}}n.image=i.uuid}return e||(t.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:\\\\\\\"dispose\\\\\\\"})}transformUv(t){if(300!==this.mapping)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case wy:t.x=t.x-Math.floor(t.x);break;case Ty:t.x=t.x<0?0:1;break;case Ay:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case wy:t.y=t.y-Math.floor(t.y);break;case Ty:t.y=t.y<0?0:1;break;case Ay:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){!0===t&&this.version++}}function Ax(t){return\\\\\\\"undefined\\\\\\\"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||\\\\\\\"undefined\\\\\\\"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||\\\\\\\"undefined\\\\\\\"!=typeof ImageBitmap&&t instanceof ImageBitmap?bx.getDataURL(t):t.data?{data:Array.prototype.slice.call(t.data),width:t.width,height:t.height,type:t.data.constructor.name}:(console.warn(\\\\\\\"THREE.Texture: Unable to serialize Texture.\\\\\\\"),{})}Tx.DEFAULT_IMAGE=void 0,Tx.DEFAULT_MAPPING=300,Tx.prototype.isTexture=!0;class Ex{constructor(t=0,e=0,n=0,i=1){this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error(\\\\\\\"index is out of range: \\\\\\\"+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error(\\\\\\\"index is out of range: \\\\\\\"+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\\\\\\\"),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\\\\\\\"),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=this.w,s=t.elements;return this.x=s[0]*e+s[4]*n+s[8]*i+s[12]*r,this.y=s[1]*e+s[5]*n+s[9]*i+s[13]*r,this.z=s[2]*e+s[6]*n+s[10]*i+s[14]*r,this.w=s[3]*e+s[7]*n+s[11]*i+s[15]*r,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,r;const s=.01,o=.1,a=t.elements,l=a[0],c=a[4],u=a[8],h=a[1],d=a[5],p=a[9],_=a[2],m=a[6],f=a[10];if(Math.abs(c-h)<s&&Math.abs(u-_)<s&&Math.abs(p-m)<s){if(Math.abs(c+h)<o&&Math.abs(u+_)<o&&Math.abs(p+m)<o&&Math.abs(l+d+f-3)<o)return this.set(1,0,0,0),this;e=Math.PI;const t=(l+1)/2,a=(d+1)/2,g=(f+1)/2,v=(c+h)/4,y=(u+_)/4,x=(p+m)/4;return t>a&&t>g?t<s?(n=0,i=.707106781,r=.707106781):(n=Math.sqrt(t),i=v/n,r=y/n):a>g?a<s?(n=.707106781,i=0,r=.707106781):(i=Math.sqrt(a),n=v/i,r=x/i):g<s?(n=.707106781,i=.707106781,r=0):(r=Math.sqrt(g),n=y/r,i=x/r),this.set(n,i,r,e),this}let g=Math.sqrt((m-p)*(m-p)+(u-_)*(u-_)+(h-c)*(h-c));return Math.abs(g)<.001&&(g=1),this.x=(m-p)/g,this.y=(u-_)/g,this.z=(h-c)/g,this.w=Math.acos((l+d+f-1)/2),this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this.w=Math.max(t.w,Math.min(e.w,this.w)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this.w=Math.max(t,Math.min(e,this.w)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}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(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.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(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this.w=t.w+(e.w-t.w)*n,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn(\\\\\\\"THREE.Vector4: offset has been removed from .fromBufferAttribute().\\\\\\\"),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),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}}Ex.prototype.isVector4=!0;class Mx extends nx{constructor(t,e,n={}){super(),this.width=t,this.height=e,this.depth=1,this.scissor=new Ex(0,0,t,e),this.scissorTest=!1,this.viewport=new Ex(0,0,t,e),this.texture=new Tx(void 0,n.mapping,n.wrapS,n.wrapT,n.magFilter,n.minFilter,n.format,n.type,n.anisotropy,n.encoding),this.texture.isRenderTargetTexture=!0,this.texture.image={width:t,height:e,depth:1},this.texture.generateMipmaps=void 0!==n.generateMipmaps&&n.generateMipmaps,this.texture.internalFormat=void 0!==n.internalFormat?n.internalFormat:null,this.texture.minFilter=void 0!==n.minFilter?n.minFilter:Cy,this.depthBuffer=void 0===n.depthBuffer||n.depthBuffer,this.stencilBuffer=void 0!==n.stencilBuffer&&n.stencilBuffer,this.depthTexture=void 0!==n.depthTexture?n.depthTexture:null}setTexture(t){t.image={width:this.width,height:this.height,depth:this.depth},this.texture=t}setSize(t,e,n=1){this.width===t&&this.height===e&&this.depth===n||(this.width=t,this.height=e,this.depth=n,this.texture.image.width=t,this.texture.image.height=e,this.texture.image.depth=n,this.dispose()),this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)}clone(){return(new this.constructor).copy(this)}copy(t){return this.width=t.width,this.height=t.height,this.depth=t.depth,this.viewport.copy(t.viewport),this.texture=t.texture.clone(),this.texture.image={...this.texture.image},this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this}dispose(){this.dispatchEvent({type:\\\\\\\"dispose\\\\\\\"})}}Mx.prototype.isWebGLRenderTarget=!0;(class extends Mx{constructor(t,e,n){super(t,e);const i=this.texture;this.texture=[];for(let t=0;t<n;t++)this.texture[t]=i.clone()}setSize(t,e,n=1){if(this.width!==t||this.height!==e||this.depth!==n){this.width=t,this.height=e,this.depth=n;for(let i=0,r=this.texture.length;i<r;i++)this.texture[i].image.width=t,this.texture[i].image.height=e,this.texture[i].image.depth=n;this.dispose()}return this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e),this}copy(t){this.dispose(),this.width=t.width,this.height=t.height,this.depth=t.depth,this.viewport.set(0,0,this.width,this.height),this.scissor.set(0,0,this.width,this.height),this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this.texture.length=0;for(let e=0,n=t.texture.length;e<n;e++)this.texture[e]=t.texture[e].clone();return this}}).prototype.isWebGLMultipleRenderTargets=!0;class Sx extends Mx{constructor(t,e,n){super(t,e,n),this.samples=4}copy(t){return super.copy.call(this,t),this.samples=t.samples,this}}Sx.prototype.isWebGLMultisampleRenderTarget=!0;class Cx{constructor(t=0,e=0,n=0,i=1){this._x=t,this._y=e,this._z=n,this._w=i}static slerp(t,e,n,i){return console.warn(\\\\\\\"THREE.Quaternion: Static .slerp() has been deprecated. Use qm.slerpQuaternions( qa, qb, t ) instead.\\\\\\\"),n.slerpQuaternions(t,e,i)}static slerpFlat(t,e,n,i,r,s,o){let a=n[i+0],l=n[i+1],c=n[i+2],u=n[i+3];const h=r[s+0],d=r[s+1],p=r[s+2],_=r[s+3];if(0===o)return t[e+0]=a,t[e+1]=l,t[e+2]=c,void(t[e+3]=u);if(1===o)return t[e+0]=h,t[e+1]=d,t[e+2]=p,void(t[e+3]=_);if(u!==_||a!==h||l!==d||c!==p){let t=1-o;const e=a*h+l*d+c*p+u*_,n=e>=0?1:-1,i=1-e*e;if(i>Number.EPSILON){const r=Math.sqrt(i),s=Math.atan2(r,e*n);t=Math.sin(t*s)/r,o=Math.sin(o*s)/r}const r=o*n;if(a=a*t+h*r,l=l*t+d*r,c=c*t+p*r,u=u*t+_*r,t===1-o){const t=1/Math.sqrt(a*a+l*l+c*c+u*u);a*=t,l*=t,c*=t,u*=t}}t[e]=a,t[e+1]=l,t[e+2]=c,t[e+3]=u}static multiplyQuaternionsFlat(t,e,n,i,r,s){const o=n[i],a=n[i+1],l=n[i+2],c=n[i+3],u=r[s],h=r[s+1],d=r[s+2],p=r[s+3];return t[e]=o*p+c*u+a*d-l*h,t[e+1]=a*p+c*h+l*u-o*d,t[e+2]=l*p+c*d+o*h-a*u,t[e+3]=c*p-o*u-a*h-l*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e){if(!t||!t.isEuler)throw new Error(\\\\\\\"THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.\\\\\\\");const n=t._x,i=t._y,r=t._z,s=t._order,o=Math.cos,a=Math.sin,l=o(n/2),c=o(i/2),u=o(r/2),h=a(n/2),d=a(i/2),p=a(r/2);switch(s){case\\\\\\\"XYZ\\\\\\\":this._x=h*c*u+l*d*p,this._y=l*d*u-h*c*p,this._z=l*c*p+h*d*u,this._w=l*c*u-h*d*p;break;case\\\\\\\"YXZ\\\\\\\":this._x=h*c*u+l*d*p,this._y=l*d*u-h*c*p,this._z=l*c*p-h*d*u,this._w=l*c*u+h*d*p;break;case\\\\\\\"ZXY\\\\\\\":this._x=h*c*u-l*d*p,this._y=l*d*u+h*c*p,this._z=l*c*p+h*d*u,this._w=l*c*u-h*d*p;break;case\\\\\\\"ZYX\\\\\\\":this._x=h*c*u-l*d*p,this._y=l*d*u+h*c*p,this._z=l*c*p-h*d*u,this._w=l*c*u+h*d*p;break;case\\\\\\\"YZX\\\\\\\":this._x=h*c*u+l*d*p,this._y=l*d*u+h*c*p,this._z=l*c*p-h*d*u,this._w=l*c*u-h*d*p;break;case\\\\\\\"XZY\\\\\\\":this._x=h*c*u-l*d*p,this._y=l*d*u-h*c*p,this._z=l*c*p+h*d*u,this._w=l*c*u+h*d*p;break;default:console.warn(\\\\\\\"THREE.Quaternion: .setFromEuler() encountered an unknown order: \\\\\\\"+s)}return!1!==e&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],i=e[4],r=e[8],s=e[1],o=e[5],a=e[9],l=e[2],c=e[6],u=e[10],h=n+o+u;if(h>0){const t=.5/Math.sqrt(h+1);this._w=.25/t,this._x=(c-a)*t,this._y=(r-l)*t,this._z=(s-i)*t}else if(n>o&&n>u){const t=2*Math.sqrt(1+n-o-u);this._w=(c-a)/t,this._x=.25*t,this._y=(i+s)/t,this._z=(r+l)/t}else if(o>u){const t=2*Math.sqrt(1+o-n-u);this._w=(r-l)/t,this._x=(i+s)/t,this._y=.25*t,this._z=(a+c)/t}else{const t=2*Math.sqrt(1+u-n-o);this._w=(s-i)/t,this._x=(r+l)/t,this._y=(a+c)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return n<Number.EPSILON?(n=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(cx(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(0===n)return this;const i=Math.min(1,e/n);return this.slerp(t,i),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(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._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 t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.\\\\\\\"),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,i=t._y,r=t._z,s=t._w,o=e._x,a=e._y,l=e._z,c=e._w;return this._x=n*c+s*o+i*l-r*a,this._y=i*c+s*a+r*o-n*l,this._z=r*c+s*l+n*a-i*o,this._w=s*c-n*o-i*a-r*l,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const n=this._x,i=this._y,r=this._z,s=this._w;let o=s*t._w+n*t._x+i*t._y+r*t._z;if(o<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,o=-o):this.copy(t),o>=1)return this._w=s,this._x=n,this._y=i,this._z=r,this;const a=1-o*o;if(a<=Number.EPSILON){const t=1-e;return this._w=t*s+e*this._w,this._x=t*n+e*this._x,this._y=t*i+e*this._y,this._z=t*r+e*this._z,this.normalize(),this._onChangeCallback(),this}const l=Math.sqrt(a),c=Math.atan2(l,o),u=Math.sin((1-e)*c)/l,h=Math.sin(e*c)/l;return this._w=s*u+this._w*h,this._x=n*u+this._x*h,this._y=i*u+this._y*h,this._z=r*u+this._z*h,this._onChangeCallback(),this}slerpQuaternions(t,e,n){this.copy(t).slerp(e,n)}random(){const t=Math.random(),e=Math.sqrt(1-t),n=Math.sqrt(t),i=2*Math.PI*Math.random(),r=2*Math.PI*Math.random();return this.set(e*Math.cos(i),n*Math.sin(r),n*Math.cos(r),e*Math.sin(i))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}Cx.prototype.isQuaternion=!0;class Nx{constructor(t=0,e=0,n=0){this.x=t,this.y=e,this.z=n}set(t,e,n){return void 0===n&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error(\\\\\\\"index is out of range: \\\\\\\"+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error(\\\\\\\"index is out of range: \\\\\\\"+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\\\\\\\"),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\\\\\\\"),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.\\\\\\\"),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return t&&t.isEuler||console.error(\\\\\\\"THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.\\\\\\\"),this.applyQuaternion(Ox.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(Ox.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6]*i,this.y=r[1]*e+r[4]*n+r[7]*i,this.z=r[2]*e+r[5]*n+r[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=t.elements,s=1/(r[3]*e+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*e+r[4]*n+r[8]*i+r[12])*s,this.y=(r[1]*e+r[5]*n+r[9]*i+r[13])*s,this.z=(r[2]*e+r[6]*n+r[10]*i+r[14])*s,this}applyQuaternion(t){const e=this.x,n=this.y,i=this.z,r=t.x,s=t.y,o=t.z,a=t.w,l=a*e+s*i-o*n,c=a*n+o*e-r*i,u=a*i+r*n-s*e,h=-r*e-s*n-o*i;return this.x=l*a+h*-r+c*-o-u*-s,this.y=c*a+h*-s+u*-r-l*-o,this.z=u*a+h*-o+l*-s-c*-r,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i,this.y=r[1]*e+r[5]*n+r[9]*i,this.z=r[2]*e+r[6]*n+r[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}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(t){return this.x*t.x+this.y*t.y+this.z*t.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(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.\\\\\\\"),this.crossVectors(t,e)):this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,i=t.y,r=t.z,s=e.x,o=e.y,a=e.z;return this.x=i*a-r*o,this.y=r*s-n*a,this.z=n*o-i*s,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return Lx.copy(this).projectOnVector(t),this.sub(Lx)}reflect(t){return this.sub(Lx.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(cx(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e,n){return void 0!==n&&console.warn(\\\\\\\"THREE.Vector3: offset has been removed from .fromBufferAttribute().\\\\\\\"),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=2*(Math.random()-.5),e=Math.random()*Math.PI*2,n=Math.sqrt(1-t**2);return this.x=n*Math.cos(e),this.y=n*Math.sin(e),this.z=t,this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}Nx.prototype.isVector3=!0;const Lx=new Nx,Ox=new Cx;class Rx{constructor(t=new Nx(1/0,1/0,1/0),e=new Nx(-1/0,-1/0,-1/0)){this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){let e=1/0,n=1/0,i=1/0,r=-1/0,s=-1/0,o=-1/0;for(let a=0,l=t.length;a<l;a+=3){const l=t[a],c=t[a+1],u=t[a+2];l<e&&(e=l),c<n&&(n=c),u<i&&(i=u),l>r&&(r=l),c>s&&(s=c),u>o&&(o=u)}return this.min.set(e,n,i),this.max.set(r,s,o),this}setFromBufferAttribute(t){let e=1/0,n=1/0,i=1/0,r=-1/0,s=-1/0,o=-1/0;for(let a=0,l=t.count;a<l;a++){const l=t.getX(a),c=t.getY(a),u=t.getZ(a);l<e&&(e=l),c<n&&(n=c),u<i&&(i=u),l>r&&(r=l),c>s&&(s=c),u>o&&(o=u)}return this.min.set(e,n,i),this.max.set(r,s,o),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;e<n;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){const n=Ix.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(n),this.max.copy(t).add(n),this}setFromObject(t){return this.makeEmpty(),this.expandByObject(t)}clone(){return(new this.constructor).copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.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(t){return this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}expandByObject(t){t.updateWorldMatrix(!1,!1);const e=t.geometry;void 0!==e&&(null===e.boundingBox&&e.computeBoundingBox(),Fx.copy(e.boundingBox),Fx.applyMatrix4(t.matrixWorld),this.union(Fx));const n=t.children;for(let t=0,e=n.length;t<e;t++)this.expandByObject(n[t]);return this}containsPoint(t){return!(t.x<this.min.x||t.x>this.max.x||t.y<this.min.y||t.y>this.max.y||t.z<this.min.z||t.z>this.max.z)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.x<this.min.x||t.min.x>this.max.x||t.max.y<this.min.y||t.min.y>this.max.y||t.max.z<this.min.z||t.min.z>this.max.z)}intersectsSphere(t){return this.clampPoint(t.center,Ix),Ix.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(Vx),Hx.subVectors(this.max,Vx),Dx.subVectors(t.a,Vx),kx.subVectors(t.b,Vx),Bx.subVectors(t.c,Vx),zx.subVectors(kx,Dx),Ux.subVectors(Bx,kx),Gx.subVectors(Dx,Bx);let e=[0,-zx.z,zx.y,0,-Ux.z,Ux.y,0,-Gx.z,Gx.y,zx.z,0,-zx.x,Ux.z,0,-Ux.x,Gx.z,0,-Gx.x,-zx.y,zx.x,0,-Ux.y,Ux.x,0,-Gx.y,Gx.x,0];return!!qx(e,Dx,kx,Bx,Hx)&&(e=[1,0,0,0,1,0,0,0,1],!!qx(e,Dx,kx,Bx,Hx)&&(jx.crossVectors(zx,Ux),e=[jx.x,jx.y,jx.z],qx(e,Dx,kx,Bx,Hx)))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return Ix.copy(t).clamp(this.min,this.max).sub(t).length()}getBoundingSphere(t){return this.getCenter(t.center),t.radius=.5*this.getSize(Ix).length(),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(Px[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),Px[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),Px[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),Px[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),Px[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),Px[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),Px[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),Px[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(Px)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}Rx.prototype.isBox3=!0;const Px=[new Nx,new Nx,new Nx,new Nx,new Nx,new Nx,new Nx,new Nx],Ix=new Nx,Fx=new Rx,Dx=new Nx,kx=new Nx,Bx=new Nx,zx=new Nx,Ux=new Nx,Gx=new Nx,Vx=new Nx,Hx=new Nx,jx=new Nx,Wx=new Nx;function qx(t,e,n,i,r){for(let s=0,o=t.length-3;s<=o;s+=3){Wx.fromArray(t,s);const o=r.x*Math.abs(Wx.x)+r.y*Math.abs(Wx.y)+r.z*Math.abs(Wx.z),a=e.dot(Wx),l=n.dot(Wx),c=i.dot(Wx);if(Math.max(-Math.max(a,l,c),Math.min(a,l,c))>o)return!1}return!0}const Xx=new Rx,Yx=new Nx,$x=new Nx,Jx=new Nx;class Zx{constructor(t=new Nx,e=-1){this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;void 0!==e?n.copy(e):Xx.setFromPoints(t).getCenter(n);let i=0;for(let e=0,r=t.length;e<r;e++)i=Math.max(i,n.distanceToSquared(t[e]));return this.radius=Math.sqrt(i),this}copy(t){return this.center.copy(t.center),this.radius=t.radius,this}isEmpty(){return this.radius<0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(t){return t.distanceToSquared(this.center)<=this.radius*this.radius}distanceToPoint(t){return t.distanceTo(this.center)-this.radius}intersectsSphere(t){const e=this.radius+t.radius;return t.center.distanceToSquared(this.center)<=e*e}intersectsBox(t){return t.intersectsSphere(this)}intersectsPlane(t){return Math.abs(t.distanceToPoint(this.center))<=this.radius}clampPoint(t,e){const n=this.center.distanceToSquared(t);return e.copy(t),n>this.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){Jx.subVectors(t,this.center);const e=Jx.lengthSq();if(e>this.radius*this.radius){const t=Math.sqrt(e),n=.5*(t-this.radius);this.center.add(Jx.multiplyScalar(n/t)),this.radius+=n}return this}union(t){return $x.subVectors(t.center,this.center).normalize().multiplyScalar(t.radius),this.expandByPoint(Yx.copy(t.center).add($x)),this.expandByPoint(Yx.copy(t.center).sub($x)),this}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return(new this.constructor).copy(this)}}const Qx=new Nx,Kx=new Nx,tb=new Nx,eb=new Nx,nb=new Nx,ib=new Nx,rb=new Nx;class sb{constructor(t=new Nx,e=new Nx(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.direction).multiplyScalar(t).add(this.origin)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,Qx)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=Qx.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(Qx.copy(this.direction).multiplyScalar(e).add(this.origin),Qx.distanceToSquared(t))}distanceSqToSegment(t,e,n,i){Kx.copy(t).add(e).multiplyScalar(.5),tb.copy(e).sub(t).normalize(),eb.copy(this.origin).sub(Kx);const r=.5*t.distanceTo(e),s=-this.direction.dot(tb),o=eb.dot(this.direction),a=-eb.dot(tb),l=eb.lengthSq(),c=Math.abs(1-s*s);let u,h,d,p;if(c>0)if(u=s*a-o,h=s*o-a,p=r*c,u>=0)if(h>=-p)if(h<=p){const t=1/c;u*=t,h*=t,d=u*(u+s*h+2*o)+h*(s*u+h+2*a)+l}else h=r,u=Math.max(0,-(s*h+o)),d=-u*u+h*(h+2*a)+l;else h=-r,u=Math.max(0,-(s*h+o)),d=-u*u+h*(h+2*a)+l;else h<=-p?(u=Math.max(0,-(-s*r+o)),h=u>0?-r:Math.min(Math.max(-r,-a),r),d=-u*u+h*(h+2*a)+l):h<=p?(u=0,h=Math.min(Math.max(-r,-a),r),d=h*(h+2*a)+l):(u=Math.max(0,-(s*r+o)),h=u>0?r:Math.min(Math.max(-r,-a),r),d=-u*u+h*(h+2*a)+l);else h=s>0?-r:r,u=Math.max(0,-(s*h+o)),d=-u*u+h*(h+2*a)+l;return n&&n.copy(this.direction).multiplyScalar(u).add(this.origin),i&&i.copy(tb).multiplyScalar(h).add(Kx),d}intersectSphere(t,e){Qx.subVectors(t.center,this.origin);const n=Qx.dot(this.direction),i=Qx.dot(Qx)-n*n,r=t.radius*t.radius;if(i>r)return null;const s=Math.sqrt(r-i),o=n-s,a=n+s;return o<0&&a<0?null:o<0?this.at(a,e):this.at(o,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return null===n?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e<0}intersectBox(t,e){let n,i,r,s,o,a;const l=1/this.direction.x,c=1/this.direction.y,u=1/this.direction.z,h=this.origin;return l>=0?(n=(t.min.x-h.x)*l,i=(t.max.x-h.x)*l):(n=(t.max.x-h.x)*l,i=(t.min.x-h.x)*l),c>=0?(r=(t.min.y-h.y)*c,s=(t.max.y-h.y)*c):(r=(t.max.y-h.y)*c,s=(t.min.y-h.y)*c),n>s||r>i?null:((r>n||n!=n)&&(n=r),(s<i||i!=i)&&(i=s),u>=0?(o=(t.min.z-h.z)*u,a=(t.max.z-h.z)*u):(o=(t.max.z-h.z)*u,a=(t.min.z-h.z)*u),n>a||o>i?null:((o>n||n!=n)&&(n=o),(a<i||i!=i)&&(i=a),i<0?null:this.at(n>=0?n:i,e)))}intersectsBox(t){return null!==this.intersectBox(t,Qx)}intersectTriangle(t,e,n,i,r){nb.subVectors(e,t),ib.subVectors(n,t),rb.crossVectors(nb,ib);let s,o=this.direction.dot(rb);if(o>0){if(i)return null;s=1}else{if(!(o<0))return null;s=-1,o=-o}eb.subVectors(this.origin,t);const a=s*this.direction.dot(ib.crossVectors(eb,ib));if(a<0)return null;const l=s*this.direction.dot(nb.cross(eb));if(l<0)return null;if(a+l>o)return null;const c=-s*eb.dot(rb);return c<0?null:this.at(c/o,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}class ob{constructor(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error(\\\\\\\"THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.\\\\\\\")}set(t,e,n,i,r,s,o,a,l,c,u,h,d,p,_,m){const f=this.elements;return f[0]=t,f[4]=e,f[8]=n,f[12]=i,f[1]=r,f[5]=s,f[9]=o,f[13]=a,f[2]=l,f[6]=c,f[10]=u,f[14]=h,f[3]=d,f[7]=p,f[11]=_,f[15]=m,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 ob).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,i=1/ab.setFromMatrixColumn(t,0).length(),r=1/ab.setFromMatrixColumn(t,1).length(),s=1/ab.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*r,e[5]=n[5]*r,e[6]=n[6]*r,e[7]=0,e[8]=n[8]*s,e[9]=n[9]*s,e[10]=n[10]*s,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){t&&t.isEuler||console.error(\\\\\\\"THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.\\\\\\\");const e=this.elements,n=t.x,i=t.y,r=t.z,s=Math.cos(n),o=Math.sin(n),a=Math.cos(i),l=Math.sin(i),c=Math.cos(r),u=Math.sin(r);if(\\\\\\\"XYZ\\\\\\\"===t.order){const t=s*c,n=s*u,i=o*c,r=o*u;e[0]=a*c,e[4]=-a*u,e[8]=l,e[1]=n+i*l,e[5]=t-r*l,e[9]=-o*a,e[2]=r-t*l,e[6]=i+n*l,e[10]=s*a}else if(\\\\\\\"YXZ\\\\\\\"===t.order){const t=a*c,n=a*u,i=l*c,r=l*u;e[0]=t+r*o,e[4]=i*o-n,e[8]=s*l,e[1]=s*u,e[5]=s*c,e[9]=-o,e[2]=n*o-i,e[6]=r+t*o,e[10]=s*a}else if(\\\\\\\"ZXY\\\\\\\"===t.order){const t=a*c,n=a*u,i=l*c,r=l*u;e[0]=t-r*o,e[4]=-s*u,e[8]=i+n*o,e[1]=n+i*o,e[5]=s*c,e[9]=r-t*o,e[2]=-s*l,e[6]=o,e[10]=s*a}else if(\\\\\\\"ZYX\\\\\\\"===t.order){const t=s*c,n=s*u,i=o*c,r=o*u;e[0]=a*c,e[4]=i*l-n,e[8]=t*l+r,e[1]=a*u,e[5]=r*l+t,e[9]=n*l-i,e[2]=-l,e[6]=o*a,e[10]=s*a}else if(\\\\\\\"YZX\\\\\\\"===t.order){const t=s*a,n=s*l,i=o*a,r=o*l;e[0]=a*c,e[4]=r-t*u,e[8]=i*u+n,e[1]=u,e[5]=s*c,e[9]=-o*c,e[2]=-l*c,e[6]=n*u+i,e[10]=t-r*u}else if(\\\\\\\"XZY\\\\\\\"===t.order){const t=s*a,n=s*l,i=o*a,r=o*l;e[0]=a*c,e[4]=-u,e[8]=l*c,e[1]=t*u+r,e[5]=s*c,e[9]=n*u-i,e[2]=i*u-n,e[6]=o*c,e[10]=r*u+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(cb,t,ub)}lookAt(t,e,n){const i=this.elements;return pb.subVectors(t,e),0===pb.lengthSq()&&(pb.z=1),pb.normalize(),hb.crossVectors(n,pb),0===hb.lengthSq()&&(1===Math.abs(n.z)?pb.x+=1e-4:pb.z+=1e-4,pb.normalize(),hb.crossVectors(n,pb)),hb.normalize(),db.crossVectors(pb,hb),i[0]=hb.x,i[4]=db.x,i[8]=pb.x,i[1]=hb.y,i[5]=db.y,i[9]=pb.y,i[2]=hb.z,i[6]=db.z,i[10]=pb.z,this}multiply(t,e){return void 0!==e?(console.warn(\\\\\\\"THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.\\\\\\\"),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,s=n[0],o=n[4],a=n[8],l=n[12],c=n[1],u=n[5],h=n[9],d=n[13],p=n[2],_=n[6],m=n[10],f=n[14],g=n[3],v=n[7],y=n[11],x=n[15],b=i[0],w=i[4],T=i[8],A=i[12],E=i[1],M=i[5],S=i[9],C=i[13],N=i[2],L=i[6],O=i[10],R=i[14],P=i[3],I=i[7],F=i[11],D=i[15];return r[0]=s*b+o*E+a*N+l*P,r[4]=s*w+o*M+a*L+l*I,r[8]=s*T+o*S+a*O+l*F,r[12]=s*A+o*C+a*R+l*D,r[1]=c*b+u*E+h*N+d*P,r[5]=c*w+u*M+h*L+d*I,r[9]=c*T+u*S+h*O+d*F,r[13]=c*A+u*C+h*R+d*D,r[2]=p*b+_*E+m*N+f*P,r[6]=p*w+_*M+m*L+f*I,r[10]=p*T+_*S+m*O+f*F,r[14]=p*A+_*C+m*R+f*D,r[3]=g*b+v*E+y*N+x*P,r[7]=g*w+v*M+y*L+x*I,r[11]=g*T+v*S+y*O+x*F,r[15]=g*A+v*C+y*R+x*D,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],i=t[8],r=t[12],s=t[1],o=t[5],a=t[9],l=t[13],c=t[2],u=t[6],h=t[10],d=t[14];return t[3]*(+r*a*u-i*l*u-r*o*h+n*l*h+i*o*d-n*a*d)+t[7]*(+e*a*d-e*l*h+r*s*h-i*s*d+i*l*c-r*a*c)+t[11]*(+e*l*u-e*o*d-r*s*u+n*s*d+r*o*c-n*l*c)+t[15]*(-i*o*c-e*a*u+e*o*h+i*s*u-n*s*h+n*a*c)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],o=t[5],a=t[6],l=t[7],c=t[8],u=t[9],h=t[10],d=t[11],p=t[12],_=t[13],m=t[14],f=t[15],g=u*m*l-_*h*l+_*a*d-o*m*d-u*a*f+o*h*f,v=p*h*l-c*m*l-p*a*d+s*m*d+c*a*f-s*h*f,y=c*_*l-p*u*l+p*o*d-s*_*d-c*o*f+s*u*f,x=p*u*a-c*_*a-p*o*h+s*_*h+c*o*m-s*u*m,b=e*g+n*v+i*y+r*x;if(0===b)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const w=1/b;return t[0]=g*w,t[1]=(_*h*r-u*m*r-_*i*d+n*m*d+u*i*f-n*h*f)*w,t[2]=(o*m*r-_*a*r+_*i*l-n*m*l-o*i*f+n*a*f)*w,t[3]=(u*a*r-o*h*r-u*i*l+n*h*l+o*i*d-n*a*d)*w,t[4]=v*w,t[5]=(c*m*r-p*h*r+p*i*d-e*m*d-c*i*f+e*h*f)*w,t[6]=(p*a*r-s*m*r-p*i*l+e*m*l+s*i*f-e*a*f)*w,t[7]=(s*h*r-c*a*r+c*i*l-e*h*l-s*i*d+e*a*d)*w,t[8]=y*w,t[9]=(p*u*r-c*_*r-p*n*d+e*_*d+c*n*f-e*u*f)*w,t[10]=(s*_*r-p*o*r+p*n*l-e*_*l-s*n*f+e*o*f)*w,t[11]=(c*o*r-s*u*r-c*n*l+e*u*l+s*n*d-e*o*d)*w,t[12]=x*w,t[13]=(c*_*i-p*u*i+p*n*h-e*_*h-c*n*m+e*u*m)*w,t[14]=(p*o*i-s*_*i-p*n*a+e*_*a+s*n*m-e*o*m)*w,t[15]=(s*u*i-c*o*i+c*n*a-e*u*a-s*n*h+e*o*h)*w,this}scale(t){const e=this.elements,n=t.x,i=t.y,r=t.z;return e[0]*=n,e[4]*=i,e[8]*=r,e[1]*=n,e[5]*=i,e[9]*=r,e[2]*=n,e[6]*=i,e[10]*=r,e[3]*=n,e[7]*=i,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),i=Math.sin(e),r=1-n,s=t.x,o=t.y,a=t.z,l=r*s,c=r*o;return this.set(l*s+n,l*o-i*a,l*a+i*o,0,l*o+i*a,c*o+n,c*a-i*s,0,l*a-i*o,c*a+i*s,r*a*a+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n,i,r,s){return this.set(1,n,r,0,t,1,s,0,e,i,1,0,0,0,0,1),this}compose(t,e,n){const i=this.elements,r=e._x,s=e._y,o=e._z,a=e._w,l=r+r,c=s+s,u=o+o,h=r*l,d=r*c,p=r*u,_=s*c,m=s*u,f=o*u,g=a*l,v=a*c,y=a*u,x=n.x,b=n.y,w=n.z;return i[0]=(1-(_+f))*x,i[1]=(d+y)*x,i[2]=(p-v)*x,i[3]=0,i[4]=(d-y)*b,i[5]=(1-(h+f))*b,i[6]=(m+g)*b,i[7]=0,i[8]=(p+v)*w,i[9]=(m-g)*w,i[10]=(1-(h+_))*w,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){const i=this.elements;let r=ab.set(i[0],i[1],i[2]).length();const s=ab.set(i[4],i[5],i[6]).length(),o=ab.set(i[8],i[9],i[10]).length();this.determinant()<0&&(r=-r),t.x=i[12],t.y=i[13],t.z=i[14],lb.copy(this);const a=1/r,l=1/s,c=1/o;return lb.elements[0]*=a,lb.elements[1]*=a,lb.elements[2]*=a,lb.elements[4]*=l,lb.elements[5]*=l,lb.elements[6]*=l,lb.elements[8]*=c,lb.elements[9]*=c,lb.elements[10]*=c,e.setFromRotationMatrix(lb),n.x=r,n.y=s,n.z=o,this}makePerspective(t,e,n,i,r,s){void 0===s&&console.warn(\\\\\\\"THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.\\\\\\\");const o=this.elements,a=2*r/(e-t),l=2*r/(n-i),c=(e+t)/(e-t),u=(n+i)/(n-i),h=-(s+r)/(s-r),d=-2*s*r/(s-r);return o[0]=a,o[4]=0,o[8]=c,o[12]=0,o[1]=0,o[5]=l,o[9]=u,o[13]=0,o[2]=0,o[6]=0,o[10]=h,o[14]=d,o[3]=0,o[7]=0,o[11]=-1,o[15]=0,this}makeOrthographic(t,e,n,i,r,s){const o=this.elements,a=1/(e-t),l=1/(n-i),c=1/(s-r),u=(e+t)*a,h=(n+i)*l,d=(s+r)*c;return o[0]=2*a,o[4]=0,o[8]=0,o[12]=-u,o[1]=0,o[5]=2*l,o[9]=0,o[13]=-h,o[2]=0,o[6]=0,o[10]=-2*c,o[14]=-d,o[3]=0,o[7]=0,o[11]=0,o[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t<16;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}ob.prototype.isMatrix4=!0;const ab=new Nx,lb=new ob,cb=new Nx(0,0,0),ub=new Nx(1,1,1),hb=new Nx,db=new Nx,pb=new Nx,_b=new ob,mb=new Cx;class fb{constructor(t=0,e=0,n=0,i=fb.DefaultOrder){this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i=this._order){return this._x=t,this._y=e,this._z=n,this._order=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,n=!0){const i=t.elements,r=i[0],s=i[4],o=i[8],a=i[1],l=i[5],c=i[9],u=i[2],h=i[6],d=i[10];switch(e){case\\\\\\\"XYZ\\\\\\\":this._y=Math.asin(cx(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-c,d),this._z=Math.atan2(-s,r)):(this._x=Math.atan2(h,l),this._z=0);break;case\\\\\\\"YXZ\\\\\\\":this._x=Math.asin(-cx(c,-1,1)),Math.abs(c)<.9999999?(this._y=Math.atan2(o,d),this._z=Math.atan2(a,l)):(this._y=Math.atan2(-u,r),this._z=0);break;case\\\\\\\"ZXY\\\\\\\":this._x=Math.asin(cx(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(-u,d),this._z=Math.atan2(-s,l)):(this._y=0,this._z=Math.atan2(a,r));break;case\\\\\\\"ZYX\\\\\\\":this._y=Math.asin(-cx(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(h,d),this._z=Math.atan2(a,r)):(this._x=0,this._z=Math.atan2(-s,l));break;case\\\\\\\"YZX\\\\\\\":this._z=Math.asin(cx(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(-c,l),this._y=Math.atan2(-u,r)):(this._x=0,this._y=Math.atan2(o,d));break;case\\\\\\\"XZY\\\\\\\":this._z=Math.asin(-cx(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(h,l),this._y=Math.atan2(o,r)):(this._x=Math.atan2(-c,d),this._y=0);break;default:console.warn(\\\\\\\"THREE.Euler: .setFromRotationMatrix() encountered an unknown order: \\\\\\\"+e)}return this._order=e,!0===n&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return _b.makeRotationFromQuaternion(t),this.setFromRotationMatrix(_b,e,n)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return mb.setFromEuler(this),this.setFromQuaternion(mb,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}toVector3(t){return t?t.set(this._x,this._y,this._z):new Nx(this._x,this._y,this._z)}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}fb.prototype.isEuler=!0,fb.DefaultOrder=\\\\\\\"XYZ\\\\\\\",fb.RotationOrders=[\\\\\\\"XYZ\\\\\\\",\\\\\\\"YZX\\\\\\\",\\\\\\\"ZXY\\\\\\\",\\\\\\\"XZY\\\\\\\",\\\\\\\"YXZ\\\\\\\",\\\\\\\"ZYX\\\\\\\"];class gb{constructor(){this.mask=1}set(t){this.mask=1<<t|0}enable(t){this.mask|=1<<t|0}enableAll(){this.mask=-1}toggle(t){this.mask^=1<<t|0}disable(t){this.mask&=~(1<<t|0)}disableAll(){this.mask=0}test(t){return 0!=(this.mask&t.mask)}}let vb=0;const yb=new Nx,xb=new Cx,bb=new ob,wb=new Nx,Tb=new Nx,Ab=new Nx,Eb=new Cx,Mb=new Nx(1,0,0),Sb=new Nx(0,1,0),Cb=new Nx(0,0,1),Nb={type:\\\\\\\"added\\\\\\\"},Lb={type:\\\\\\\"removed\\\\\\\"};class Ob extends nx{constructor(){super(),Object.defineProperty(this,\\\\\\\"id\\\\\\\",{value:vb++}),this.uuid=lx(),this.name=\\\\\\\"\\\\\\\",this.type=\\\\\\\"Object3D\\\\\\\",this.parent=null,this.children=[],this.up=Ob.DefaultUp.clone();const t=new Nx,e=new fb,n=new Cx,i=new Nx(1,1,1);e._onChange((function(){n.setFromEuler(e,!1)})),n._onChange((function(){e.setFromQuaternion(n,void 0,!1)})),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:e},quaternion:{configurable:!0,enumerable:!0,value:n},scale:{configurable:!0,enumerable:!0,value:i},modelViewMatrix:{value:new ob},normalMatrix:{value:new gx}}),this.matrix=new ob,this.matrixWorld=new ob,this.matrixAutoUpdate=Ob.DefaultMatrixAutoUpdate,this.matrixWorldNeedsUpdate=!1,this.layers=new gb,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.userData={}}onBeforeRender(){}onAfterRender(){}applyMatrix4(t){this.matrixAutoUpdate&&this.updateMatrix(),this.matrix.premultiply(t),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(t){return this.quaternion.premultiply(t),this}setRotationFromAxisAngle(t,e){this.quaternion.setFromAxisAngle(t,e)}setRotationFromEuler(t){this.quaternion.setFromEuler(t,!0)}setRotationFromMatrix(t){this.quaternion.setFromRotationMatrix(t)}setRotationFromQuaternion(t){this.quaternion.copy(t)}rotateOnAxis(t,e){return xb.setFromAxisAngle(t,e),this.quaternion.multiply(xb),this}rotateOnWorldAxis(t,e){return xb.setFromAxisAngle(t,e),this.quaternion.premultiply(xb),this}rotateX(t){return this.rotateOnAxis(Mb,t)}rotateY(t){return this.rotateOnAxis(Sb,t)}rotateZ(t){return this.rotateOnAxis(Cb,t)}translateOnAxis(t,e){return yb.copy(t).applyQuaternion(this.quaternion),this.position.add(yb.multiplyScalar(e)),this}translateX(t){return this.translateOnAxis(Mb,t)}translateY(t){return this.translateOnAxis(Sb,t)}translateZ(t){return this.translateOnAxis(Cb,t)}localToWorld(t){return t.applyMatrix4(this.matrixWorld)}worldToLocal(t){return t.applyMatrix4(bb.copy(this.matrixWorld).invert())}lookAt(t,e,n){t.isVector3?wb.copy(t):wb.set(t,e,n);const i=this.parent;this.updateWorldMatrix(!0,!1),Tb.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?bb.lookAt(Tb,wb,this.up):bb.lookAt(wb,Tb,this.up),this.quaternion.setFromRotationMatrix(bb),i&&(bb.extractRotation(i.matrixWorld),xb.setFromRotationMatrix(bb),this.quaternion.premultiply(xb.invert()))}add(t){if(arguments.length>1){for(let t=0;t<arguments.length;t++)this.add(arguments[t]);return this}return t===this?(console.error(\\\\\\\"THREE.Object3D.add: object can't be added as a child of itself.\\\\\\\",t),this):(t&&t.isObject3D?(null!==t.parent&&t.parent.remove(t),t.parent=this,this.children.push(t),t.dispatchEvent(Nb)):console.error(\\\\\\\"THREE.Object3D.add: object not an instance of THREE.Object3D.\\\\\\\",t),this)}remove(t){if(arguments.length>1){for(let t=0;t<arguments.length;t++)this.remove(arguments[t]);return this}const e=this.children.indexOf(t);return-1!==e&&(t.parent=null,this.children.splice(e,1),t.dispatchEvent(Lb)),this}removeFromParent(){const t=this.parent;return null!==t&&t.remove(this),this}clear(){for(let t=0;t<this.children.length;t++){const e=this.children[t];e.parent=null,e.dispatchEvent(Lb)}return this.children.length=0,this}attach(t){return this.updateWorldMatrix(!0,!1),bb.copy(this.matrixWorld).invert(),null!==t.parent&&(t.parent.updateWorldMatrix(!0,!1),bb.multiply(t.parent.matrixWorld)),t.applyMatrix4(bb),this.add(t),t.updateWorldMatrix(!1,!0),this}getObjectById(t){return this.getObjectByProperty(\\\\\\\"id\\\\\\\",t)}getObjectByName(t){return this.getObjectByProperty(\\\\\\\"name\\\\\\\",t)}getObjectByProperty(t,e){if(this[t]===e)return this;for(let n=0,i=this.children.length;n<i;n++){const i=this.children[n].getObjectByProperty(t,e);if(void 0!==i)return i}}getWorldPosition(t){return this.updateWorldMatrix(!0,!1),t.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(Tb,t,Ab),t}getWorldScale(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(Tb,Eb,t),t}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(e[8],e[9],e[10]).normalize()}raycast(){}traverse(t){t(this);const e=this.children;for(let n=0,i=e.length;n<i;n++)e[n].traverse(t)}traverseVisible(t){if(!1===this.visible)return;t(this);const e=this.children;for(let n=0,i=e.length;n<i;n++)e[n].traverseVisible(t)}traverseAncestors(t){const e=this.parent;null!==e&&(t(e),e.traverseAncestors(t))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(t){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||t)&&(null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1,t=!0);const e=this.children;for(let n=0,i=e.length;n<i;n++)e[n].updateMatrixWorld(t)}updateWorldMatrix(t,e){const n=this.parent;if(!0===t&&null!==n&&n.updateWorldMatrix(!0,!1),this.matrixAutoUpdate&&this.updateMatrix(),null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),!0===e){const t=this.children;for(let e=0,n=t.length;e<n;e++)t[e].updateWorldMatrix(!1,!0)}}toJSON(t){const e=void 0===t||\\\\\\\"string\\\\\\\"==typeof t,n={};e&&(t={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{}},n.metadata={version:4.5,type:\\\\\\\"Object\\\\\\\",generator:\\\\\\\"Object3D.toJSON\\\\\\\"});const i={};function r(e,n){return void 0===e[n.uuid]&&(e[n.uuid]=n.toJSON(t)),n.uuid}if(i.uuid=this.uuid,i.type=this.type,\\\\\\\"\\\\\\\"!==this.name&&(i.name=this.name),!0===this.castShadow&&(i.castShadow=!0),!0===this.receiveShadow&&(i.receiveShadow=!0),!1===this.visible&&(i.visible=!1),!1===this.frustumCulled&&(i.frustumCulled=!1),0!==this.renderOrder&&(i.renderOrder=this.renderOrder),\\\\\\\"{}\\\\\\\"!==JSON.stringify(this.userData)&&(i.userData=this.userData),i.layers=this.layers.mask,i.matrix=this.matrix.toArray(),!1===this.matrixAutoUpdate&&(i.matrixAutoUpdate=!1),this.isInstancedMesh&&(i.type=\\\\\\\"InstancedMesh\\\\\\\",i.count=this.count,i.instanceMatrix=this.instanceMatrix.toJSON(),null!==this.instanceColor&&(i.instanceColor=this.instanceColor.toJSON())),this.isScene)this.background&&(this.background.isColor?i.background=this.background.toJSON():this.background.isTexture&&(i.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&(i.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){i.geometry=r(t.geometries,this.geometry);const e=this.geometry.parameters;if(void 0!==e&&void 0!==e.shapes){const n=e.shapes;if(Array.isArray(n))for(let e=0,i=n.length;e<i;e++){const i=n[e];r(t.shapes,i)}else r(t.shapes,n)}}if(this.isSkinnedMesh&&(i.bindMode=this.bindMode,i.bindMatrix=this.bindMatrix.toArray(),void 0!==this.skeleton&&(r(t.skeletons,this.skeleton),i.skeleton=this.skeleton.uuid)),void 0!==this.material)if(Array.isArray(this.material)){const e=[];for(let n=0,i=this.material.length;n<i;n++)e.push(r(t.materials,this.material[n]));i.material=e}else i.material=r(t.materials,this.material);if(this.children.length>0){i.children=[];for(let e=0;e<this.children.length;e++)i.children.push(this.children[e].toJSON(t).object)}if(this.animations.length>0){i.animations=[];for(let e=0;e<this.animations.length;e++){const n=this.animations[e];i.animations.push(r(t.animations,n))}}if(e){const e=s(t.geometries),i=s(t.materials),r=s(t.textures),o=s(t.images),a=s(t.shapes),l=s(t.skeletons),c=s(t.animations);e.length>0&&(n.geometries=e),i.length>0&&(n.materials=i),r.length>0&&(n.textures=r),o.length>0&&(n.images=o),a.length>0&&(n.shapes=a),l.length>0&&(n.skeletons=l),c.length>0&&(n.animations=c)}return n.object=i,n;function s(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}}clone(t){return(new this.constructor).copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e<t.children.length;e++){const n=t.children[e];this.add(n.clone())}return this}}Ob.DefaultUp=new Nx(0,1,0),Ob.DefaultMatrixAutoUpdate=!0,Ob.prototype.isObject3D=!0;const Rb=new Nx,Pb=new Nx,Ib=new Nx,Fb=new Nx,Db=new Nx,kb=new Nx,Bb=new Nx,zb=new Nx,Ub=new Nx,Gb=new Nx;class Vb{constructor(t=new Nx,e=new Nx,n=new Nx){this.a=t,this.b=e,this.c=n}static getNormal(t,e,n,i){i.subVectors(n,e),Rb.subVectors(t,e),i.cross(Rb);const r=i.lengthSq();return r>0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(t,e,n,i,r){Rb.subVectors(i,e),Pb.subVectors(n,e),Ib.subVectors(t,e);const s=Rb.dot(Rb),o=Rb.dot(Pb),a=Rb.dot(Ib),l=Pb.dot(Pb),c=Pb.dot(Ib),u=s*l-o*o;if(0===u)return r.set(-2,-1,-1);const h=1/u,d=(l*a-o*c)*h,p=(s*c-o*a)*h;return r.set(1-d-p,p,d)}static containsPoint(t,e,n,i){return this.getBarycoord(t,e,n,i,Fb),Fb.x>=0&&Fb.y>=0&&Fb.x+Fb.y<=1}static getUV(t,e,n,i,r,s,o,a){return this.getBarycoord(t,e,n,i,Fb),a.set(0,0),a.addScaledVector(r,Fb.x),a.addScaledVector(s,Fb.y),a.addScaledVector(o,Fb.z),a}static isFrontFacing(t,e,n,i){return Rb.subVectors(n,e),Pb.subVectors(t,e),Rb.cross(Pb).dot(i)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}setFromAttributeAndIndices(t,e,n,i){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,n),this.c.fromBufferAttribute(t,i),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return Rb.subVectors(this.c,this.b),Pb.subVectors(this.a,this.b),.5*Rb.cross(Pb).length()}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return Vb.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return Vb.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,n,i,r){return Vb.getUV(t,this.a,this.b,this.c,e,n,i,r)}containsPoint(t){return Vb.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return Vb.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const n=this.a,i=this.b,r=this.c;let s,o;Db.subVectors(i,n),kb.subVectors(r,n),zb.subVectors(t,n);const a=Db.dot(zb),l=kb.dot(zb);if(a<=0&&l<=0)return e.copy(n);Ub.subVectors(t,i);const c=Db.dot(Ub),u=kb.dot(Ub);if(c>=0&&u<=c)return e.copy(i);const h=a*u-c*l;if(h<=0&&a>=0&&c<=0)return s=a/(a-c),e.copy(n).addScaledVector(Db,s);Gb.subVectors(t,r);const d=Db.dot(Gb),p=kb.dot(Gb);if(p>=0&&d<=p)return e.copy(r);const _=d*l-a*p;if(_<=0&&l>=0&&p<=0)return o=l/(l-p),e.copy(n).addScaledVector(kb,o);const m=c*p-d*u;if(m<=0&&u-c>=0&&d-p>=0)return Bb.subVectors(r,i),o=(u-c)/(u-c+(d-p)),e.copy(i).addScaledVector(Bb,o);const f=1/(m+_+h);return s=_*f,o=h*f,e.copy(n).addScaledVector(Db,s).addScaledVector(kb,o)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}let Hb=0;class jb extends nx{constructor(){super(),Object.defineProperty(this,\\\\\\\"id\\\\\\\",{value:Hb++}),this.uuid=lx(),this.name=\\\\\\\"\\\\\\\",this.type=\\\\\\\"Material\\\\\\\",this.fog=!0,this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.format=By,this.transparent=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=my,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=Qy,this.stencilZFail=Qy,this.stencilZPass=Qy,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.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(t){this._alphaTest>0!=t>0&&this.version++,this._alphaTest=t}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(void 0!==t)for(const e in t){const n=t[e];if(void 0===n){console.warn(\\\\\\\"THREE.Material: '\\\\\\\"+e+\\\\\\\"' parameter is undefined.\\\\\\\");continue}if(\\\\\\\"shading\\\\\\\"===e){console.warn(\\\\\\\"THREE.\\\\\\\"+this.type+\\\\\\\": .shading has been removed. Use the boolean .flatShading instead.\\\\\\\"),this.flatShading=1===n;continue}const i=this[e];void 0!==i?i&&i.isColor?i.set(n):i&&i.isVector3&&n&&n.isVector3?i.copy(n):this[e]=n:console.warn(\\\\\\\"THREE.\\\\\\\"+this.type+\\\\\\\": '\\\\\\\"+e+\\\\\\\"' is not a property of this material.\\\\\\\")}}toJSON(t){const e=void 0===t||\\\\\\\"string\\\\\\\"==typeof t;e&&(t={textures:{},images:{}});const n={metadata:{version:4.5,type:\\\\\\\"Material\\\\\\\",generator:\\\\\\\"Material.toJSON\\\\\\\"}};function i(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}if(n.uuid=this.uuid,n.type=this.type,\\\\\\\"\\\\\\\"!==this.name&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),void 0!==this.roughness&&(n.roughness=this.roughness),void 0!==this.metalness&&(n.metalness=this.metalness),void 0!==this.sheen&&(n.sheen=this.sheen),this.sheenTint&&this.sheenTint.isColor&&(n.sheenTint=this.sheenTint.getHex()),void 0!==this.sheenRoughness&&(n.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.emissiveIntensity&&1!==this.emissiveIntensity&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),void 0!==this.specularIntensity&&(n.specularIntensity=this.specularIntensity),this.specularTint&&this.specularTint.isColor&&(n.specularTint=this.specularTint.getHex()),void 0!==this.shininess&&(n.shininess=this.shininess),void 0!==this.clearcoat&&(n.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(t).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(t).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(t).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(t).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(t).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(n.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularTintMap&&this.specularTintMap.isTexture&&(n.specularTintMap=this.specularTintMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(t).uuid,void 0!==this.combine&&(n.combine=this.combine)),void 0!==this.envMapIntensity&&(n.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity&&(n.reflectivity=this.reflectivity),void 0!==this.refractionRatio&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.transmission&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(t).uuid),void 0!==this.thickness&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(t).uuid),void 0!==this.attenuationDistance&&(n.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationTint&&(n.attenuationTint=this.attenuationTint.getHex()),void 0!==this.size&&(n.size=this.size),null!==this.shadowSide&&(n.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation&&(n.sizeAttenuation=this.sizeAttenuation),1!==this.blending&&(n.blending=this.blending),0!==this.side&&(n.side=this.side),this.vertexColors&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),this.format!==By&&(n.format=this.format),!0===this.transparent&&(n.transparent=this.transparent),n.depthFunc=this.depthFunc,n.depthTest=this.depthTest,n.depthWrite=this.depthWrite,n.colorWrite=this.colorWrite,n.stencilWrite=this.stencilWrite,n.stencilWriteMask=this.stencilWriteMask,n.stencilFunc=this.stencilFunc,n.stencilRef=this.stencilRef,n.stencilFuncMask=this.stencilFuncMask,n.stencilFail=this.stencilFail,n.stencilZFail=this.stencilZFail,n.stencilZPass=this.stencilZPass,this.rotation&&0!==this.rotation&&(n.rotation=this.rotation),!0===this.polygonOffset&&(n.polygonOffset=!0),0!==this.polygonOffsetFactor&&(n.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits&&(n.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth&&1!==this.linewidth&&(n.linewidth=this.linewidth),void 0!==this.dashSize&&(n.dashSize=this.dashSize),void 0!==this.gapSize&&(n.gapSize=this.gapSize),void 0!==this.scale&&(n.scale=this.scale),!0===this.dithering&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),!0===this.alphaToCoverage&&(n.alphaToCoverage=this.alphaToCoverage),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(n.wireframe=this.wireframe),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),\\\\\\\"round\\\\\\\"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),\\\\\\\"round\\\\\\\"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading&&(n.flatShading=this.flatShading),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),\\\\\\\"{}\\\\\\\"!==JSON.stringify(this.userData)&&(n.userData=this.userData),e){const e=i(t.textures),r=i(t.images);e.length>0&&(n.textures=e),r.length>0&&(n.images=r)}return n}clone(){return(new this.constructor).copy(this)}copy(t){this.name=t.name,this.fog=t.fog,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.format=t.format,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(null!==e){const t=e.length;n=new Array(t);for(let i=0;i!==t;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:\\\\\\\"dispose\\\\\\\"})}set needsUpdate(t){!0===t&&this.version++}}jb.prototype.isMaterial=!0;const Wb={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},qb={h:0,s:0,l:0},Xb={h:0,s:0,l:0};function Yb(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}function $b(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function Jb(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}class Zb{constructor(t,e,n){return void 0===e&&void 0===n?this.set(t):this.setRGB(t,e,n)}set(t){return t&&t.isColor?this.copy(t):\\\\\\\"number\\\\\\\"==typeof t?this.setHex(t):\\\\\\\"string\\\\\\\"==typeof t&&this.setStyle(t),this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this}setRGB(t,e,n){return this.r=t,this.g=e,this.b=n,this}setHSL(t,e,n){if(t=ux(t,1),e=cx(e,0,1),n=cx(n,0,1),0===e)this.r=this.g=this.b=n;else{const i=n<=.5?n*(1+e):n+e-n*e,r=2*n-i;this.r=Yb(r,i,t+1/3),this.g=Yb(r,i,t),this.b=Yb(r,i,t-1/3)}return this}setStyle(t){function e(e){void 0!==e&&parseFloat(e)<1&&console.warn(\\\\\\\"THREE.Color: Alpha component of \\\\\\\"+t+\\\\\\\" will be ignored.\\\\\\\")}let n;if(n=/^((?:rgb|hsl)a?)\\\\(([^\\\\)]*)\\\\)/.exec(t)){let t;const i=n[1],r=n[2];switch(i){case\\\\\\\"rgb\\\\\\\":case\\\\\\\"rgba\\\\\\\":if(t=/^\\\\s*(\\\\d+)\\\\s*,\\\\s*(\\\\d+)\\\\s*,\\\\s*(\\\\d+)\\\\s*(?:,\\\\s*(\\\\d*\\\\.?\\\\d+)\\\\s*)?$/.exec(r))return this.r=Math.min(255,parseInt(t[1],10))/255,this.g=Math.min(255,parseInt(t[2],10))/255,this.b=Math.min(255,parseInt(t[3],10))/255,e(t[4]),this;if(t=/^\\\\s*(\\\\d+)\\\\%\\\\s*,\\\\s*(\\\\d+)\\\\%\\\\s*,\\\\s*(\\\\d+)\\\\%\\\\s*(?:,\\\\s*(\\\\d*\\\\.?\\\\d+)\\\\s*)?$/.exec(r))return this.r=Math.min(100,parseInt(t[1],10))/100,this.g=Math.min(100,parseInt(t[2],10))/100,this.b=Math.min(100,parseInt(t[3],10))/100,e(t[4]),this;break;case\\\\\\\"hsl\\\\\\\":case\\\\\\\"hsla\\\\\\\":if(t=/^\\\\s*(\\\\d*\\\\.?\\\\d+)\\\\s*,\\\\s*(\\\\d+)\\\\%\\\\s*,\\\\s*(\\\\d+)\\\\%\\\\s*(?:,\\\\s*(\\\\d*\\\\.?\\\\d+)\\\\s*)?$/.exec(r)){const n=parseFloat(t[1])/360,i=parseInt(t[2],10)/100,r=parseInt(t[3],10)/100;return e(t[4]),this.setHSL(n,i,r)}}}else if(n=/^\\\\#([A-Fa-f\\\\d]+)$/.exec(t)){const t=n[1],e=t.length;if(3===e)return this.r=parseInt(t.charAt(0)+t.charAt(0),16)/255,this.g=parseInt(t.charAt(1)+t.charAt(1),16)/255,this.b=parseInt(t.charAt(2)+t.charAt(2),16)/255,this;if(6===e)return this.r=parseInt(t.charAt(0)+t.charAt(1),16)/255,this.g=parseInt(t.charAt(2)+t.charAt(3),16)/255,this.b=parseInt(t.charAt(4)+t.charAt(5),16)/255,this}return t&&t.length>0?this.setColorName(t):this}setColorName(t){const e=Wb[t.toLowerCase()];return void 0!==e?this.setHex(e):console.warn(\\\\\\\"THREE.Color: Unknown color \\\\\\\"+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copyGammaToLinear(t,e=2){return this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this}copyLinearToGamma(t,e=2){const n=e>0?1/e:1;return this.r=Math.pow(t.r,n),this.g=Math.pow(t.g,n),this.b=Math.pow(t.b,n),this}convertGammaToLinear(t){return this.copyGammaToLinear(this,t),this}convertLinearToGamma(t){return this.copyLinearToGamma(this,t),this}copySRGBToLinear(t){return this.r=$b(t.r),this.g=$b(t.g),this.b=$b(t.b),this}copyLinearToSRGB(t){return this.r=Jb(t.r),this.g=Jb(t.g),this.b=Jb(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0}getHexString(){return(\\\\\\\"000000\\\\\\\"+this.getHex().toString(16)).slice(-6)}getHSL(t){const e=this.r,n=this.g,i=this.b,r=Math.max(e,n,i),s=Math.min(e,n,i);let o,a;const l=(s+r)/2;if(s===r)o=0,a=0;else{const t=r-s;switch(a=l<=.5?t/(r+s):t/(2-r-s),r){case e:o=(n-i)/t+(n<i?6:0);break;case n:o=(i-e)/t+2;break;case i:o=(e-n)/t+4}o/=6}return t.h=o,t.s=a,t.l=l,t}getStyle(){return\\\\\\\"rgb(\\\\\\\"+(255*this.r|0)+\\\\\\\",\\\\\\\"+(255*this.g|0)+\\\\\\\",\\\\\\\"+(255*this.b|0)+\\\\\\\")\\\\\\\"}offsetHSL(t,e,n){return this.getHSL(qb),qb.h+=t,qb.s+=e,qb.l+=n,this.setHSL(qb.h,qb.s,qb.l),this}add(t){return this.r+=t.r,this.g+=t.g,this.b+=t.b,this}addColors(t,e){return this.r=t.r+e.r,this.g=t.g+e.g,this.b=t.b+e.b,this}addScalar(t){return this.r+=t,this.g+=t,this.b+=t,this}sub(t){return this.r=Math.max(0,this.r-t.r),this.g=Math.max(0,this.g-t.g),this.b=Math.max(0,this.b-t.b),this}multiply(t){return this.r*=t.r,this.g*=t.g,this.b*=t.b,this}multiplyScalar(t){return this.r*=t,this.g*=t,this.b*=t,this}lerp(t,e){return this.r+=(t.r-this.r)*e,this.g+=(t.g-this.g)*e,this.b+=(t.b-this.b)*e,this}lerpColors(t,e,n){return this.r=t.r+(e.r-t.r)*n,this.g=t.g+(e.g-t.g)*n,this.b=t.b+(e.b-t.b)*n,this}lerpHSL(t,e){this.getHSL(qb),t.getHSL(Xb);const n=hx(qb.h,Xb.h,e),i=hx(qb.s,Xb.s,e),r=hx(qb.l,Xb.l,e);return this.setHSL(n,i,r),this}equals(t){return t.r===this.r&&t.g===this.g&&t.b===this.b}fromArray(t,e=0){return this.r=t[e],this.g=t[e+1],this.b=t[e+2],this}toArray(t=[],e=0){return t[e]=this.r,t[e+1]=this.g,t[e+2]=this.b,t}fromBufferAttribute(t,e){return this.r=t.getX(e),this.g=t.getY(e),this.b=t.getZ(e),!0===t.normalized&&(this.r/=255,this.g/=255,this.b/=255),this}toJSON(){return this.getHex()}}Zb.NAMES=Wb,Zb.prototype.isColor=!0,Zb.prototype.r=1,Zb.prototype.g=1,Zb.prototype.b=1;class Qb extends jb{constructor(t){super(),this.type=\\\\\\\"MeshBasicMaterial\\\\\\\",this.color=new Zb(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.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this}}Qb.prototype.isMeshBasicMaterial=!0;const Kb=new Nx,tw=new fx;class ew{constructor(t,e,n){if(Array.isArray(t))throw new TypeError(\\\\\\\"THREE.BufferAttribute: array should be a Typed Array.\\\\\\\");this.name=\\\\\\\"\\\\\\\",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=!0===n,this.usage=Ky,this.updateRange={offset:0,count:-1},this.version=0}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this}copyAt(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let i=0,r=this.itemSize;i<r;i++)this.array[t+i]=e.array[n+i];return this}copyArray(t){return this.array.set(t),this}copyColorsArray(t){const e=this.array;let n=0;for(let i=0,r=t.length;i<r;i++){let r=t[i];void 0===r&&(console.warn(\\\\\\\"THREE.BufferAttribute.copyColorsArray(): color is undefined\\\\\\\",i),r=new Zb),e[n++]=r.r,e[n++]=r.g,e[n++]=r.b}return this}copyVector2sArray(t){const e=this.array;let n=0;for(let i=0,r=t.length;i<r;i++){let r=t[i];void 0===r&&(console.warn(\\\\\\\"THREE.BufferAttribute.copyVector2sArray(): vector is undefined\\\\\\\",i),r=new fx),e[n++]=r.x,e[n++]=r.y}return this}copyVector3sArray(t){const e=this.array;let n=0;for(let i=0,r=t.length;i<r;i++){let r=t[i];void 0===r&&(console.warn(\\\\\\\"THREE.BufferAttribute.copyVector3sArray(): vector is undefined\\\\\\\",i),r=new Nx),e[n++]=r.x,e[n++]=r.y,e[n++]=r.z}return this}copyVector4sArray(t){const e=this.array;let n=0;for(let i=0,r=t.length;i<r;i++){let r=t[i];void 0===r&&(console.warn(\\\\\\\"THREE.BufferAttribute.copyVector4sArray(): vector is undefined\\\\\\\",i),r=new Ex),e[n++]=r.x,e[n++]=r.y,e[n++]=r.z,e[n++]=r.w}return this}applyMatrix3(t){if(2===this.itemSize)for(let e=0,n=this.count;e<n;e++)tw.fromBufferAttribute(this,e),tw.applyMatrix3(t),this.setXY(e,tw.x,tw.y);else if(3===this.itemSize)for(let e=0,n=this.count;e<n;e++)Kb.fromBufferAttribute(this,e),Kb.applyMatrix3(t),this.setXYZ(e,Kb.x,Kb.y,Kb.z);return this}applyMatrix4(t){for(let e=0,n=this.count;e<n;e++)Kb.x=this.getX(e),Kb.y=this.getY(e),Kb.z=this.getZ(e),Kb.applyMatrix4(t),this.setXYZ(e,Kb.x,Kb.y,Kb.z);return this}applyNormalMatrix(t){for(let e=0,n=this.count;e<n;e++)Kb.x=this.getX(e),Kb.y=this.getY(e),Kb.z=this.getZ(e),Kb.applyNormalMatrix(t),this.setXYZ(e,Kb.x,Kb.y,Kb.z);return this}transformDirection(t){for(let e=0,n=this.count;e<n;e++)Kb.x=this.getX(e),Kb.y=this.getY(e),Kb.z=this.getZ(e),Kb.transformDirection(t),this.setXYZ(e,Kb.x,Kb.y,Kb.z);return this}set(t,e=0){return this.array.set(t,e),this}getX(t){return this.array[t*this.itemSize]}setX(t,e){return this.array[t*this.itemSize]=e,this}getY(t){return this.array[t*this.itemSize+1]}setY(t,e){return this.array[t*this.itemSize+1]=e,this}getZ(t){return this.array[t*this.itemSize+2]}setZ(t,e){return this.array[t*this.itemSize+2]=e,this}getW(t){return this.array[t*this.itemSize+3]}setW(t,e){return this.array[t*this.itemSize+3]=e,this}setXY(t,e,n){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=n,this}setXYZ(t,e,n,i){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=n,this.array[t+2]=i,this}setXYZW(t,e,n,i,r){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=n,this.array[t+2]=i,this.array[t+3]=r,this}onUpload(t){return this.onUploadCallback=t,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){const t={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.prototype.slice.call(this.array),normalized:this.normalized};return\\\\\\\"\\\\\\\"!==this.name&&(t.name=this.name),this.usage!==Ky&&(t.usage=this.usage),0===this.updateRange.offset&&-1===this.updateRange.count||(t.updateRange=this.updateRange),t}}ew.prototype.isBufferAttribute=!0;class nw extends ew{constructor(t,e,n){super(new Uint16Array(t),e,n)}}class iw extends ew{constructor(t,e,n){super(new Uint32Array(t),e,n)}}(class extends ew{constructor(t,e,n){super(new Uint16Array(t),e,n)}}).prototype.isFloat16BufferAttribute=!0;class rw extends ew{constructor(t,e,n){super(new Float32Array(t),e,n)}}let sw=0;const ow=new ob,aw=new Ob,lw=new Nx,cw=new Rx,uw=new Rx,hw=new Nx;class dw extends nx{constructor(){super(),Object.defineProperty(this,\\\\\\\"id\\\\\\\",{value:sw++}),this.uuid=lx(),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(t){return Array.isArray(t)?this.index=new(vx(t)>65535?iw:nw)(t,1):this.index=t,this}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return void 0!==this.attributes[t]}addGroup(t,e,n=0){this.groups.push({start:t,count:e,materialIndex:n})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){const e=this.attributes.position;void 0!==e&&(e.applyMatrix4(t),e.needsUpdate=!0);const n=this.attributes.normal;if(void 0!==n){const e=(new gx).getNormalMatrix(t);n.applyNormalMatrix(e),n.needsUpdate=!0}const i=this.attributes.tangent;return void 0!==i&&(i.transformDirection(t),i.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this}applyQuaternion(t){return ow.makeRotationFromQuaternion(t),this.applyMatrix4(ow),this}rotateX(t){return ow.makeRotationX(t),this.applyMatrix4(ow),this}rotateY(t){return ow.makeRotationY(t),this.applyMatrix4(ow),this}rotateZ(t){return ow.makeRotationZ(t),this.applyMatrix4(ow),this}translate(t,e,n){return ow.makeTranslation(t,e,n),this.applyMatrix4(ow),this}scale(t,e,n){return ow.makeScale(t,e,n),this.applyMatrix4(ow),this}lookAt(t){return aw.lookAt(t),aw.updateMatrix(),this.applyMatrix4(aw.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(lw).negate(),this.translate(lw.x,lw.y,lw.z),this}setFromPoints(t){const e=[];for(let n=0,i=t.length;n<i;n++){const i=t[n];e.push(i.x,i.y,i.z||0)}return this.setAttribute(\\\\\\\"position\\\\\\\",new rw(e,3)),this}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new Rx);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute)return console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \\\\\\\"mesh.frustumCulled\\\\\\\" to \\\\\\\"false\\\\\\\".',this),void this.boundingBox.set(new Nx(-1/0,-1/0,-1/0),new Nx(1/0,1/0,1/0));if(void 0!==t){if(this.boundingBox.setFromBufferAttribute(t),e)for(let t=0,n=e.length;t<n;t++){const n=e[t];cw.setFromBufferAttribute(n),this.morphTargetsRelative?(hw.addVectors(this.boundingBox.min,cw.min),this.boundingBox.expandByPoint(hw),hw.addVectors(this.boundingBox.max,cw.max),this.boundingBox.expandByPoint(hw)):(this.boundingBox.expandByPoint(cw.min),this.boundingBox.expandByPoint(cw.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 Zx);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute)return console.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \\\\\\\"mesh.frustumCulled\\\\\\\" to \\\\\\\"false\\\\\\\".',this),void this.boundingSphere.set(new Nx,1/0);if(t){const n=this.boundingSphere.center;if(cw.setFromBufferAttribute(t),e)for(let t=0,n=e.length;t<n;t++){const n=e[t];uw.setFromBufferAttribute(n),this.morphTargetsRelative?(hw.addVectors(cw.min,uw.min),cw.expandByPoint(hw),hw.addVectors(cw.max,uw.max),cw.expandByPoint(hw)):(cw.expandByPoint(uw.min),cw.expandByPoint(uw.max))}cw.getCenter(n);let i=0;for(let e=0,r=t.count;e<r;e++)hw.fromBufferAttribute(t,e),i=Math.max(i,n.distanceToSquared(hw));if(e)for(let r=0,s=e.length;r<s;r++){const s=e[r],o=this.morphTargetsRelative;for(let e=0,r=s.count;e<r;e++)hw.fromBufferAttribute(s,e),o&&(lw.fromBufferAttribute(t,e),hw.add(lw)),i=Math.max(i,n.distanceToSquared(hw))}this.boundingSphere.radius=Math.sqrt(i),isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \\\\\\\"position\\\\\\\" attribute is likely to have NaN values.',this)}}computeTangents(){const t=this.index,e=this.attributes;if(null===t||void 0===e.position||void 0===e.normal||void 0===e.uv)return void console.error(\\\\\\\"THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)\\\\\\\");const n=t.array,i=e.position.array,r=e.normal.array,s=e.uv.array,o=i.length/3;void 0===e.tangent&&this.setAttribute(\\\\\\\"tangent\\\\\\\",new ew(new Float32Array(4*o),4));const a=e.tangent.array,l=[],c=[];for(let t=0;t<o;t++)l[t]=new Nx,c[t]=new Nx;const u=new Nx,h=new Nx,d=new Nx,p=new fx,_=new fx,m=new fx,f=new Nx,g=new Nx;function v(t,e,n){u.fromArray(i,3*t),h.fromArray(i,3*e),d.fromArray(i,3*n),p.fromArray(s,2*t),_.fromArray(s,2*e),m.fromArray(s,2*n),h.sub(u),d.sub(u),_.sub(p),m.sub(p);const r=1/(_.x*m.y-m.x*_.y);isFinite(r)&&(f.copy(h).multiplyScalar(m.y).addScaledVector(d,-_.y).multiplyScalar(r),g.copy(d).multiplyScalar(_.x).addScaledVector(h,-m.x).multiplyScalar(r),l[t].add(f),l[e].add(f),l[n].add(f),c[t].add(g),c[e].add(g),c[n].add(g))}let y=this.groups;0===y.length&&(y=[{start:0,count:n.length}]);for(let t=0,e=y.length;t<e;++t){const e=y[t],i=e.start;for(let t=i,r=i+e.count;t<r;t+=3)v(n[t+0],n[t+1],n[t+2])}const x=new Nx,b=new Nx,w=new Nx,T=new Nx;function A(t){w.fromArray(r,3*t),T.copy(w);const e=l[t];x.copy(e),x.sub(w.multiplyScalar(w.dot(e))).normalize(),b.crossVectors(T,e);const n=b.dot(c[t])<0?-1:1;a[4*t]=x.x,a[4*t+1]=x.y,a[4*t+2]=x.z,a[4*t+3]=n}for(let t=0,e=y.length;t<e;++t){const e=y[t],i=e.start;for(let t=i,r=i+e.count;t<r;t+=3)A(n[t+0]),A(n[t+1]),A(n[t+2])}}computeVertexNormals(){const t=this.index,e=this.getAttribute(\\\\\\\"position\\\\\\\");if(void 0!==e){let n=this.getAttribute(\\\\\\\"normal\\\\\\\");if(void 0===n)n=new ew(new Float32Array(3*e.count),3),this.setAttribute(\\\\\\\"normal\\\\\\\",n);else for(let t=0,e=n.count;t<e;t++)n.setXYZ(t,0,0,0);const i=new Nx,r=new Nx,s=new Nx,o=new Nx,a=new Nx,l=new Nx,c=new Nx,u=new Nx;if(t)for(let h=0,d=t.count;h<d;h+=3){const d=t.getX(h+0),p=t.getX(h+1),_=t.getX(h+2);i.fromBufferAttribute(e,d),r.fromBufferAttribute(e,p),s.fromBufferAttribute(e,_),c.subVectors(s,r),u.subVectors(i,r),c.cross(u),o.fromBufferAttribute(n,d),a.fromBufferAttribute(n,p),l.fromBufferAttribute(n,_),o.add(c),a.add(c),l.add(c),n.setXYZ(d,o.x,o.y,o.z),n.setXYZ(p,a.x,a.y,a.z),n.setXYZ(_,l.x,l.y,l.z)}else for(let t=0,o=e.count;t<o;t+=3)i.fromBufferAttribute(e,t+0),r.fromBufferAttribute(e,t+1),s.fromBufferAttribute(e,t+2),c.subVectors(s,r),u.subVectors(i,r),c.cross(u),n.setXYZ(t+0,c.x,c.y,c.z),n.setXYZ(t+1,c.x,c.y,c.z),n.setXYZ(t+2,c.x,c.y,c.z);this.normalizeNormals(),n.needsUpdate=!0}}merge(t,e){if(!t||!t.isBufferGeometry)return void console.error(\\\\\\\"THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.\\\\\\\",t);void 0===e&&(e=0,console.warn(\\\\\\\"THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.\\\\\\\"));const n=this.attributes;for(const i in n){if(void 0===t.attributes[i])continue;const r=n[i].array,s=t.attributes[i],o=s.array,a=s.itemSize*e,l=Math.min(o.length,r.length-a);for(let t=0,e=a;t<l;t++,e++)r[e]=o[t]}return this}normalizeNormals(){const t=this.attributes.normal;for(let e=0,n=t.count;e<n;e++)hw.fromBufferAttribute(t,e),hw.normalize(),t.setXYZ(e,hw.x,hw.y,hw.z)}toNonIndexed(){function t(t,e){const n=t.array,i=t.itemSize,r=t.normalized,s=new n.constructor(e.length*i);let o=0,a=0;for(let r=0,l=e.length;r<l;r++){o=t.isInterleavedBufferAttribute?e[r]*t.data.stride+t.offset:e[r]*i;for(let t=0;t<i;t++)s[a++]=n[o++]}return new ew(s,i,r)}if(null===this.index)return console.warn(\\\\\\\"THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.\\\\\\\"),this;const e=new dw,n=this.index.array,i=this.attributes;for(const r in i){const s=t(i[r],n);e.setAttribute(r,s)}const r=this.morphAttributes;for(const i in r){const s=[],o=r[i];for(let e=0,i=o.length;e<i;e++){const i=t(o[e],n);s.push(i)}e.morphAttributes[i]=s}e.morphTargetsRelative=this.morphTargetsRelative;const s=this.groups;for(let t=0,n=s.length;t<n;t++){const n=s[t];e.addGroup(n.start,n.count,n.materialIndex)}return e}toJSON(){const t={metadata:{version:4.5,type:\\\\\\\"BufferGeometry\\\\\\\",generator:\\\\\\\"BufferGeometry.toJSON\\\\\\\"}};if(t.uuid=this.uuid,t.type=this.type,\\\\\\\"\\\\\\\"!==this.name&&(t.name=this.name),Object.keys(this.userData).length>0&&(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]&&(t[n]=e[n]);return t}t.data={attributes:{}};const e=this.index;null!==e&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const e in n){const i=n[e];t.data.attributes[e]=i.toJSON(t.data)}const i={};let r=!1;for(const e in this.morphAttributes){const n=this.morphAttributes[e],s=[];for(let e=0,i=n.length;e<i;e++){const i=n[e];s.push(i.toJSON(t.data))}s.length>0&&(i[e]=s,r=!0)}r&&(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);const s=this.groups;s.length>0&&(t.data.groups=JSON.parse(JSON.stringify(s)));const o=this.boundingSphere;return null!==o&&(t.data.boundingSphere={center:o.center.toArray(),radius:o.radius}),t}clone(){return(new this.constructor).copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;null!==n&&this.setIndex(n.clone(e));const i=t.attributes;for(const t in i){const n=i[t];this.setAttribute(t,n.clone(e))}const r=t.morphAttributes;for(const t in r){const n=[],i=r[t];for(let t=0,r=i.length;t<r;t++)n.push(i[t].clone(e));this.morphAttributes[t]=n}this.morphTargetsRelative=t.morphTargetsRelative;const s=t.groups;for(let t=0,e=s.length;t<e;t++){const e=s[t];this.addGroup(e.start,e.count,e.materialIndex)}const o=t.boundingBox;null!==o&&(this.boundingBox=o.clone());const a=t.boundingSphere;return null!==a&&(this.boundingSphere=a.clone()),this.drawRange.start=t.drawRange.start,this.drawRange.count=t.drawRange.count,this.userData=t.userData,void 0!==t.parameters&&(this.parameters=Object.assign({},t.parameters)),this}dispose(){this.dispatchEvent({type:\\\\\\\"dispose\\\\\\\"})}}dw.prototype.isBufferGeometry=!0;const pw=new ob,_w=new sb,mw=new Zx,fw=new Nx,gw=new Nx,vw=new Nx,yw=new Nx,xw=new Nx,bw=new Nx,ww=new Nx,Tw=new Nx,Aw=new Nx,Ew=new fx,Mw=new fx,Sw=new fx,Cw=new Nx,Nw=new Nx;class Lw extends Ob{constructor(t=new dw,e=new Qb){super(),this.type=\\\\\\\"Mesh\\\\\\\",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t){return super.copy(t),void 0!==t.morphTargetInfluences&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),void 0!==t.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=t.material,this.geometry=t.geometry,this}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e<n;e++){const n=t[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[n]=e}}}}else{const e=t.morphTargets;void 0!==e&&e.length>0&&console.error(\\\\\\\"THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\")}}raycast(t,e){const n=this.geometry,i=this.material,r=this.matrixWorld;if(void 0===i)return;if(null===n.boundingSphere&&n.computeBoundingSphere(),mw.copy(n.boundingSphere),mw.applyMatrix4(r),!1===t.ray.intersectsSphere(mw))return;if(pw.copy(r).invert(),_w.copy(t.ray).applyMatrix4(pw),null!==n.boundingBox&&!1===_w.intersectsBox(n.boundingBox))return;let s;if(n.isBufferGeometry){const r=n.index,o=n.attributes.position,a=n.morphAttributes.position,l=n.morphTargetsRelative,c=n.attributes.uv,u=n.attributes.uv2,h=n.groups,d=n.drawRange;if(null!==r)if(Array.isArray(i))for(let n=0,p=h.length;n<p;n++){const p=h[n],_=i[p.materialIndex];for(let n=Math.max(p.start,d.start),i=Math.min(r.count,Math.min(p.start+p.count,d.start+d.count));n<i;n+=3){const i=r.getX(n),h=r.getX(n+1),d=r.getX(n+2);s=Ow(this,_,t,_w,o,a,l,c,u,i,h,d),s&&(s.faceIndex=Math.floor(n/3),s.face.materialIndex=p.materialIndex,e.push(s))}}else{for(let n=Math.max(0,d.start),h=Math.min(r.count,d.start+d.count);n<h;n+=3){const h=r.getX(n),d=r.getX(n+1),p=r.getX(n+2);s=Ow(this,i,t,_w,o,a,l,c,u,h,d,p),s&&(s.faceIndex=Math.floor(n/3),e.push(s))}}else if(void 0!==o)if(Array.isArray(i))for(let n=0,r=h.length;n<r;n++){const r=h[n],p=i[r.materialIndex];for(let n=Math.max(r.start,d.start),i=Math.min(o.count,Math.min(r.start+r.count,d.start+d.count));n<i;n+=3){s=Ow(this,p,t,_w,o,a,l,c,u,n,n+1,n+2),s&&(s.faceIndex=Math.floor(n/3),s.face.materialIndex=r.materialIndex,e.push(s))}}else{for(let n=Math.max(0,d.start),r=Math.min(o.count,d.start+d.count);n<r;n+=3){s=Ow(this,i,t,_w,o,a,l,c,u,n,n+1,n+2),s&&(s.faceIndex=Math.floor(n/3),e.push(s))}}}else n.isGeometry&&console.error(\\\\\\\"THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\")}}function Ow(t,e,n,i,r,s,o,a,l,c,u,h){fw.fromBufferAttribute(r,c),gw.fromBufferAttribute(r,u),vw.fromBufferAttribute(r,h);const d=t.morphTargetInfluences;if(s&&d){ww.set(0,0,0),Tw.set(0,0,0),Aw.set(0,0,0);for(let t=0,e=s.length;t<e;t++){const e=d[t],n=s[t];0!==e&&(yw.fromBufferAttribute(n,c),xw.fromBufferAttribute(n,u),bw.fromBufferAttribute(n,h),o?(ww.addScaledVector(yw,e),Tw.addScaledVector(xw,e),Aw.addScaledVector(bw,e)):(ww.addScaledVector(yw.sub(fw),e),Tw.addScaledVector(xw.sub(gw),e),Aw.addScaledVector(bw.sub(vw),e)))}fw.add(ww),gw.add(Tw),vw.add(Aw)}t.isSkinnedMesh&&(t.boneTransform(c,fw),t.boneTransform(u,gw),t.boneTransform(h,vw));const p=function(t,e,n,i,r,s,o,a){let l;if(l=1===e.side?i.intersectTriangle(o,s,r,!0,a):i.intersectTriangle(r,s,o,2!==e.side,a),null===l)return null;Nw.copy(a),Nw.applyMatrix4(t.matrixWorld);const c=n.ray.origin.distanceTo(Nw);return c<n.near||c>n.far?null:{distance:c,point:Nw.clone(),object:t}}(t,e,n,i,fw,gw,vw,Cw);if(p){a&&(Ew.fromBufferAttribute(a,c),Mw.fromBufferAttribute(a,u),Sw.fromBufferAttribute(a,h),p.uv=Vb.getUV(Cw,fw,gw,vw,Ew,Mw,Sw,new fx)),l&&(Ew.fromBufferAttribute(l,c),Mw.fromBufferAttribute(l,u),Sw.fromBufferAttribute(l,h),p.uv2=Vb.getUV(Cw,fw,gw,vw,Ew,Mw,Sw,new fx));const t={a:c,b:u,c:h,normal:new Nx,materialIndex:0};Vb.getNormal(fw,gw,vw,t.normal),p.face=t}return p}Lw.prototype.isMesh=!0;class Rw extends dw{constructor(t=1,e=1,n=1,i=1,r=1,s=1){super(),this.type=\\\\\\\"BoxGeometry\\\\\\\",this.parameters={width:t,height:e,depth:n,widthSegments:i,heightSegments:r,depthSegments:s};const o=this;i=Math.floor(i),r=Math.floor(r),s=Math.floor(s);const a=[],l=[],c=[],u=[];let h=0,d=0;function p(t,e,n,i,r,s,p,_,m,f,g){const v=s/m,y=p/f,x=s/2,b=p/2,w=_/2,T=m+1,A=f+1;let E=0,M=0;const S=new Nx;for(let s=0;s<A;s++){const o=s*y-b;for(let a=0;a<T;a++){const h=a*v-x;S[t]=h*i,S[e]=o*r,S[n]=w,l.push(S.x,S.y,S.z),S[t]=0,S[e]=0,S[n]=_>0?1:-1,c.push(S.x,S.y,S.z),u.push(a/m),u.push(1-s/f),E+=1}}for(let t=0;t<f;t++)for(let e=0;e<m;e++){const n=h+e+T*t,i=h+e+T*(t+1),r=h+(e+1)+T*(t+1),s=h+(e+1)+T*t;a.push(n,i,s),a.push(i,r,s),M+=6}o.addGroup(d,M,g),d+=M,h+=E}p(\\\\\\\"z\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"x\\\\\\\",-1,-1,n,e,t,s,r,0),p(\\\\\\\"z\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"x\\\\\\\",1,-1,n,e,-t,s,r,1),p(\\\\\\\"x\\\\\\\",\\\\\\\"z\\\\\\\",\\\\\\\"y\\\\\\\",1,1,t,n,e,i,s,2),p(\\\\\\\"x\\\\\\\",\\\\\\\"z\\\\\\\",\\\\\\\"y\\\\\\\",1,-1,t,n,-e,i,s,3),p(\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\",1,-1,t,e,n,i,r,4),p(\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\",-1,-1,t,e,-n,i,r,5),this.setIndex(a),this.setAttribute(\\\\\\\"position\\\\\\\",new rw(l,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new rw(c,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new rw(u,2))}static fromJSON(t){return new Rw(t.width,t.height,t.depth,t.widthSegments,t.heightSegments,t.depthSegments)}}function Pw(t){const e={};for(const n in t){e[n]={};for(const i in t[n]){const r=t[n][i];r&&(r.isColor||r.isMatrix3||r.isMatrix4||r.isVector2||r.isVector3||r.isVector4||r.isTexture||r.isQuaternion)?e[n][i]=r.clone():Array.isArray(r)?e[n][i]=r.slice():e[n][i]=r}}return e}function Iw(t){const e={};for(let n=0;n<t.length;n++){const i=Pw(t[n]);for(const t in i)e[t]=i[t]}return e}const Fw={clone:Pw,merge:Iw};class Dw extends jb{constructor(t){super(),this.type=\\\\\\\"ShaderMaterial\\\\\\\",this.defines={},this.uniforms={},this.vertexShader=\\\\\\\"void main() {\\\\n\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n}\\\\\\\",this.fragmentShader=\\\\\\\"void main() {\\\\n\\\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\\\n}\\\\\\\",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!==t&&(void 0!==t.attributes&&console.error(\\\\\\\"THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.\\\\\\\"),this.setValues(t))}copy(t){return super.copy(t),this.fragmentShader=t.fragmentShader,this.vertexShader=t.vertexShader,this.uniforms=Pw(t.uniforms),this.defines=Object.assign({},t.defines),this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.lights=t.lights,this.clipping=t.clipping,this.extensions=Object.assign({},t.extensions),this.glslVersion=t.glslVersion,this}toJSON(t){const e=super.toJSON(t);e.glslVersion=this.glslVersion,e.uniforms={};for(const n in this.uniforms){const i=this.uniforms[n].value;i&&i.isTexture?e.uniforms[n]={type:\\\\\\\"t\\\\\\\",value:i.toJSON(t).uuid}:i&&i.isColor?e.uniforms[n]={type:\\\\\\\"c\\\\\\\",value:i.getHex()}:i&&i.isVector2?e.uniforms[n]={type:\\\\\\\"v2\\\\\\\",value:i.toArray()}:i&&i.isVector3?e.uniforms[n]={type:\\\\\\\"v3\\\\\\\",value:i.toArray()}:i&&i.isVector4?e.uniforms[n]={type:\\\\\\\"v4\\\\\\\",value:i.toArray()}:i&&i.isMatrix3?e.uniforms[n]={type:\\\\\\\"m3\\\\\\\",value:i.toArray()}:i&&i.isMatrix4?e.uniforms[n]={type:\\\\\\\"m4\\\\\\\",value:i.toArray()}:e.uniforms[n]={value:i}}Object.keys(this.defines).length>0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;const n={};for(const t in this.extensions)!0===this.extensions[t]&&(n[t]=!0);return Object.keys(n).length>0&&(e.extensions=n),e}}Dw.prototype.isShaderMaterial=!0;class kw extends Ob{constructor(){super(),this.type=\\\\\\\"Camera\\\\\\\",this.matrixWorldInverse=new ob,this.projectionMatrix=new ob,this.projectionMatrixInverse=new ob}copy(t,e){return super.copy(t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()}updateMatrixWorld(t){super.updateMatrixWorld(t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(t,e){super.updateWorldMatrix(t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return(new this.constructor).copy(this)}}kw.prototype.isCamera=!0;class Bw extends kw{constructor(t=50,e=1,n=.1,i=2e3){super(),this.type=\\\\\\\"PerspectiveCamera\\\\\\\",this.fov=t,this.zoom=1,this.near=n,this.far=i,this.focus=10,this.aspect=e,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this}setFocalLength(t){const e=.5*this.getFilmHeight()/t;this.fov=2*sx*Math.atan(e),this.updateProjectionMatrix()}getFocalLength(){const t=Math.tan(.5*rx*this.fov);return.5*this.getFilmHeight()/t}getEffectiveFOV(){return 2*sx*Math.atan(Math.tan(.5*rx*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(t,e,n,i,r,s){this.aspect=t/e,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=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=this.near;let e=t*Math.tan(.5*rx*this.fov)/this.zoom,n=2*e,i=this.aspect*n,r=-.5*i;const s=this.view;if(null!==this.view&&this.view.enabled){const t=s.fullWidth,o=s.fullHeight;r+=s.offsetX*i/t,e-=s.offsetY*n/o,i*=s.width/t,n*=s.height/o}const o=this.filmOffset;0!==o&&(r+=t*o/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+i,e,e-n,t,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}}Bw.prototype.isPerspectiveCamera=!0;const zw=90;class Uw extends Ob{constructor(t,e,n){if(super(),this.type=\\\\\\\"CubeCamera\\\\\\\",!0!==n.isWebGLCubeRenderTarget)return void console.error(\\\\\\\"THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.\\\\\\\");this.renderTarget=n;const i=new Bw(zw,1,t,e);i.layers=this.layers,i.up.set(0,-1,0),i.lookAt(new Nx(1,0,0)),this.add(i);const r=new Bw(zw,1,t,e);r.layers=this.layers,r.up.set(0,-1,0),r.lookAt(new Nx(-1,0,0)),this.add(r);const s=new Bw(zw,1,t,e);s.layers=this.layers,s.up.set(0,0,1),s.lookAt(new Nx(0,1,0)),this.add(s);const o=new Bw(zw,1,t,e);o.layers=this.layers,o.up.set(0,0,-1),o.lookAt(new Nx(0,-1,0)),this.add(o);const a=new Bw(zw,1,t,e);a.layers=this.layers,a.up.set(0,-1,0),a.lookAt(new Nx(0,0,1)),this.add(a);const l=new Bw(zw,1,t,e);l.layers=this.layers,l.up.set(0,-1,0),l.lookAt(new Nx(0,0,-1)),this.add(l)}update(t,e){null===this.parent&&this.updateMatrixWorld();const n=this.renderTarget,[i,r,s,o,a,l]=this.children,c=t.xr.enabled,u=t.getRenderTarget();t.xr.enabled=!1;const h=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0),t.render(e,i),t.setRenderTarget(n,1),t.render(e,r),t.setRenderTarget(n,2),t.render(e,s),t.setRenderTarget(n,3),t.render(e,o),t.setRenderTarget(n,4),t.render(e,a),n.texture.generateMipmaps=h,t.setRenderTarget(n,5),t.render(e,l),t.setRenderTarget(u),t.xr.enabled=c}}class Gw extends Tx{constructor(t,e,n,i,r,s,o,a,l,c){super(t=void 0!==t?t:[],e=void 0!==e?e:fy,n,i,r,s,o,a,l,c),this.flipY=!1}get images(){return this.image}set images(t){this.image=t}}Gw.prototype.isCubeTexture=!0;class Vw extends Mx{constructor(t,e,n){Number.isInteger(e)&&(console.warn(\\\\\\\"THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )\\\\\\\"),e=n),super(t,t,e),e=e||{},this.texture=new Gw(void 0,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.encoding),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=void 0!==e.generateMipmaps&&e.generateMipmaps,this.texture.minFilter=void 0!==e.minFilter?e.minFilter:Cy,this.texture._needsFlipEnvMap=!1}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.format=By,this.texture.encoding=e.encoding,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvarying vec3 vWorldDirection;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvWorldDirection = transformDirection( position, modelMatrix );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t#include <begin_vertex>\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t#include <project_vertex>\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D tEquirect;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvarying vec3 vWorldDirection;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t#include <common>\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec3 direction = normalize( vWorldDirection );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec2 sampleUV = equirectUv( direction );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\\\\"},i=new Rw(5,5,5),r=new Dw({name:\\\\\\\"CubemapFromEquirect\\\\\\\",uniforms:Pw(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});r.uniforms.tEquirect.value=e;const s=new Lw(i,r),o=e.minFilter;e.minFilter===Ly&&(e.minFilter=Cy);return new Uw(1,10,this).update(t,s),e.minFilter=o,s.geometry.dispose(),s.material.dispose(),this}clear(t,e,n,i){const r=t.getRenderTarget();for(let r=0;r<6;r++)t.setRenderTarget(this,r),t.clear(e,n,i);t.setRenderTarget(r)}}Vw.prototype.isWebGLCubeRenderTarget=!0;const Hw=new Nx,jw=new Nx,Ww=new gx;class qw{constructor(t=new Nx(1,0,0),e=0){this.normal=t,this.constant=e}set(t,e){return this.normal.copy(t),this.constant=e,this}setComponents(t,e,n,i){return this.normal.set(t,e,n),this.constant=i,this}setFromNormalAndCoplanarPoint(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this}setFromCoplanarPoints(t,e,n){const i=Hw.subVectors(n,e).cross(jw.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(i,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){const t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}distanceToSphere(t){return this.distanceToPoint(t.center)-t.radius}projectPoint(t,e){return e.copy(this.normal).multiplyScalar(-this.distanceToPoint(t)).add(t)}intersectLine(t,e){const n=t.delta(Hw),i=this.normal.dot(n);if(0===i)return 0===this.distanceToPoint(t.start)?e.copy(t.start):null;const r=-(t.start.dot(this.normal)+this.constant)/i;return r<0||r>1?null:e.copy(n).multiplyScalar(r).add(t.start)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||Ww.getNormalMatrix(t),i=this.coplanarPoint(Hw).applyMatrix4(t),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return(new this.constructor).copy(this)}}qw.prototype.isPlane=!0;const Xw=new Zx,Yw=new Nx;class $w{constructor(t=new qw,e=new qw,n=new qw,i=new qw,r=new qw,s=new qw){this.planes=[t,e,n,i,r,s]}set(t,e,n,i,r,s){const o=this.planes;return o[0].copy(t),o[1].copy(e),o[2].copy(n),o[3].copy(i),o[4].copy(r),o[5].copy(s),this}copy(t){const e=this.planes;for(let n=0;n<6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t){const e=this.planes,n=t.elements,i=n[0],r=n[1],s=n[2],o=n[3],a=n[4],l=n[5],c=n[6],u=n[7],h=n[8],d=n[9],p=n[10],_=n[11],m=n[12],f=n[13],g=n[14],v=n[15];return e[0].setComponents(o-i,u-a,_-h,v-m).normalize(),e[1].setComponents(o+i,u+a,_+h,v+m).normalize(),e[2].setComponents(o+r,u+l,_+d,v+f).normalize(),e[3].setComponents(o-r,u-l,_-d,v-f).normalize(),e[4].setComponents(o-s,u-c,_-p,v-g).normalize(),e[5].setComponents(o+s,u+c,_+p,v+g).normalize(),this}intersectsObject(t){const e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),Xw.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere(Xw)}intersectsSprite(t){return Xw.center.set(0,0,0),Xw.radius=.7071067811865476,Xw.applyMatrix4(t.matrixWorld),this.intersectsSphere(Xw)}intersectsSphere(t){const e=this.planes,n=t.center,i=-t.radius;for(let t=0;t<6;t++){if(e[t].distanceToPoint(n)<i)return!1}return!0}intersectsBox(t){const e=this.planes;for(let n=0;n<6;n++){const i=e[n];if(Yw.x=i.normal.x>0?t.max.x:t.min.x,Yw.y=i.normal.y>0?t.max.y:t.min.y,Yw.z=i.normal.z>0?t.max.z:t.min.z,i.distanceToPoint(Yw)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}clone(){return(new this.constructor).copy(this)}}function Jw(){let t=null,e=!1,n=null,i=null;function r(e,s){n(e,s),i=t.requestAnimationFrame(r)}return{start:function(){!0!==e&&null!==n&&(i=t.requestAnimationFrame(r),e=!0)},stop:function(){t.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(t){n=t},setContext:function(e){t=e}}}function Zw(t,e){const n=e.isWebGL2,i=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute&&(t=t.data),i.get(t)},remove:function(e){e.isInterleavedBufferAttribute&&(e=e.data);const n=i.get(e);n&&(t.deleteBuffer(n.buffer),i.delete(e))},update:function(e,r){if(e.isGLBufferAttribute){const t=i.get(e);return void((!t||t.version<e.version)&&i.set(e,{buffer:e.buffer,type:e.type,bytesPerElement:e.elementSize,version:e.version}))}e.isInterleavedBufferAttribute&&(e=e.data);const s=i.get(e);void 0===s?i.set(e,function(e,i){const r=e.array,s=e.usage,o=t.createBuffer();t.bindBuffer(i,o),t.bufferData(i,r,s),e.onUploadCallback();let a=5126;return r instanceof Float32Array?a=5126:r instanceof Float64Array?console.warn(\\\\\\\"THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.\\\\\\\"):r instanceof Uint16Array?e.isFloat16BufferAttribute?n?a=5131:console.warn(\\\\\\\"THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.\\\\\\\"):a=5123:r instanceof Int16Array?a=5122:r instanceof Uint32Array?a=5125:r instanceof Int32Array?a=5124:r instanceof Int8Array?a=5120:(r instanceof Uint8Array||r instanceof Uint8ClampedArray)&&(a=5121),{buffer:o,type:a,bytesPerElement:r.BYTES_PER_ELEMENT,version:e.version}}(e,r)):s.version<e.version&&(!function(e,i,r){const s=i.array,o=i.updateRange;t.bindBuffer(r,e),-1===o.count?t.bufferSubData(r,0,s):(n?t.bufferSubData(r,o.offset*s.BYTES_PER_ELEMENT,s,o.offset,o.count):t.bufferSubData(r,o.offset*s.BYTES_PER_ELEMENT,s.subarray(o.offset,o.offset+o.count)),o.count=-1)}(s.buffer,e,r),s.version=e.version)}}}class Qw extends dw{constructor(t=1,e=1,n=1,i=1){super(),this.type=\\\\\\\"PlaneGeometry\\\\\\\",this.parameters={width:t,height:e,widthSegments:n,heightSegments:i};const r=t/2,s=e/2,o=Math.floor(n),a=Math.floor(i),l=o+1,c=a+1,u=t/o,h=e/a,d=[],p=[],_=[],m=[];for(let t=0;t<c;t++){const e=t*h-s;for(let n=0;n<l;n++){const i=n*u-r;p.push(i,-e,0),_.push(0,0,1),m.push(n/o),m.push(1-t/a)}}for(let t=0;t<a;t++)for(let e=0;e<o;e++){const n=e+l*t,i=e+l*(t+1),r=e+1+l*(t+1),s=e+1+l*t;d.push(n,i,s),d.push(i,r,s)}this.setIndex(d),this.setAttribute(\\\\\\\"position\\\\\\\",new rw(p,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new rw(_,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new rw(m,2))}static fromJSON(t){return new Qw(t.width,t.height,t.widthSegments,t.heightSegments)}}const Kw={alphamap_fragment:\\\\\\\"#ifdef USE_ALPHAMAP\\\\n\\\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\\\n#endif\\\\\\\",alphamap_pars_fragment:\\\\\\\"#ifdef USE_ALPHAMAP\\\\n\\\\tuniform sampler2D alphaMap;\\\\n#endif\\\\\\\",alphatest_fragment:\\\\\\\"#ifdef USE_ALPHATEST\\\\n\\\\tif ( diffuseColor.a < alphaTest ) discard;\\\\n#endif\\\\\\\",alphatest_pars_fragment:\\\\\\\"#ifdef USE_ALPHATEST\\\\n\\\\tuniform float alphaTest;\\\\n#endif\\\\\\\",aomap_fragment:\\\\\\\"#ifdef USE_AOMAP\\\\n\\\\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\\\n\\\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\\\n\\\\t#if defined( USE_ENVMAP ) && defined( STANDARD )\\\\n\\\\t\\\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\\\n\\\\t\\\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\\\\n\\\\t#endif\\\\n#endif\\\\\\\",aomap_pars_fragment:\\\\\\\"#ifdef USE_AOMAP\\\\n\\\\tuniform sampler2D aoMap;\\\\n\\\\tuniform float aoMapIntensity;\\\\n#endif\\\\\\\",begin_vertex:\\\\\\\"vec3 transformed = vec3( position );\\\\\\\",beginnormal_vertex:\\\\\\\"vec3 objectNormal = vec3( normal );\\\\n#ifdef USE_TANGENT\\\\n\\\\tvec3 objectTangent = vec3( tangent.xyz );\\\\n#endif\\\\\\\",bsdfs:\\\\\\\"vec3 BRDF_Lambert( const in vec3 diffuseColor ) {\\\\n\\\\treturn RECIPROCAL_PI * diffuseColor;\\\\n}\\\\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\\\\n\\\\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\\\\n\\\\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\\\\n}\\\\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\\\n\\\\tfloat a2 = pow2( alpha );\\\\n\\\\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\\\n\\\\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\\\n\\\\treturn 0.5 / max( gv + gl, EPSILON );\\\\n}\\\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\\\n\\\\tfloat a2 = pow2( alpha );\\\\n\\\\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\\\\n\\\\treturn RECIPROCAL_PI * a2 / pow2( denom );\\\\n}\\\\nvec3 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 ) {\\\\n\\\\tfloat alpha = pow2( roughness );\\\\n\\\\tvec3 halfDir = normalize( lightDir + viewDir );\\\\n\\\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\\\n\\\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\\\n\\\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\\\n\\\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\\\n\\\\tvec3 F = F_Schlick( f0, f90, dotVH );\\\\n\\\\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\\\n\\\\tfloat D = D_GGX( alpha, dotNH );\\\\n\\\\treturn F * ( V * D );\\\\n}\\\\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\\\\n\\\\tconst float LUT_SIZE = 64.0;\\\\n\\\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\\\n\\\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\\\n\\\\tfloat dotNV = saturate( dot( N, V ) );\\\\n\\\\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\\\\n\\\\tuv = uv * LUT_SCALE + LUT_BIAS;\\\\n\\\\treturn uv;\\\\n}\\\\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\\\\n\\\\tfloat l = length( f );\\\\n\\\\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\\\\n}\\\\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\\\\n\\\\tfloat x = dot( v1, v2 );\\\\n\\\\tfloat y = abs( x );\\\\n\\\\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\\\\n\\\\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\\\\n\\\\tfloat v = a / b;\\\\n\\\\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\\\\n\\\\treturn cross( v1, v2 ) * theta_sintheta;\\\\n}\\\\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\\\\n\\\\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\\\\n\\\\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\\\\n\\\\tvec3 lightNormal = cross( v1, v2 );\\\\n\\\\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\\\\n\\\\tvec3 T1, T2;\\\\n\\\\tT1 = normalize( V - N * dot( V, N ) );\\\\n\\\\tT2 = - cross( N, T1 );\\\\n\\\\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\\\\n\\\\tvec3 coords[ 4 ];\\\\n\\\\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\\\\n\\\\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\\\\n\\\\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\\\\n\\\\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\\\\n\\\\tcoords[ 0 ] = normalize( coords[ 0 ] );\\\\n\\\\tcoords[ 1 ] = normalize( coords[ 1 ] );\\\\n\\\\tcoords[ 2 ] = normalize( coords[ 2 ] );\\\\n\\\\tcoords[ 3 ] = normalize( coords[ 3 ] );\\\\n\\\\tvec3 vectorFormFactor = vec3( 0.0 );\\\\n\\\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\\\\n\\\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\\\\n\\\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\\\\n\\\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\\\\n\\\\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\\\\n\\\\treturn vec3( result );\\\\n}\\\\nfloat G_BlinnPhong_Implicit( ) {\\\\n\\\\treturn 0.25;\\\\n}\\\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\\\n\\\\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\\\\n}\\\\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\\\\n\\\\tvec3 halfDir = normalize( lightDir + viewDir );\\\\n\\\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\\\n\\\\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\\\\n\\\\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\\\\n\\\\tfloat G = G_BlinnPhong_Implicit( );\\\\n\\\\tfloat D = D_BlinnPhong( shininess, dotNH );\\\\n\\\\treturn F * ( G * D );\\\\n}\\\\n#if defined( USE_SHEEN )\\\\nfloat D_Charlie( float roughness, float dotNH ) {\\\\n\\\\tfloat alpha = pow2( roughness );\\\\n\\\\tfloat invAlpha = 1.0 / alpha;\\\\n\\\\tfloat cos2h = dotNH * dotNH;\\\\n\\\\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\\\\n\\\\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\\\\n}\\\\nfloat V_Neubelt( float dotNV, float dotNL ) {\\\\n\\\\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\\\\n}\\\\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenTint, const in float sheenRoughness ) {\\\\n\\\\tvec3 halfDir = normalize( lightDir + viewDir );\\\\n\\\\tfloat dotNL = saturate( dot( normal, lightDir ) );\\\\n\\\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\\\n\\\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\\\n\\\\tfloat D = D_Charlie( sheenRoughness, dotNH );\\\\n\\\\tfloat V = V_Neubelt( dotNV, dotNL );\\\\n\\\\treturn sheenTint * ( D * V );\\\\n}\\\\n#endif\\\\\\\",bumpmap_pars_fragment:\\\\\\\"#ifdef USE_BUMPMAP\\\\n\\\\tuniform sampler2D bumpMap;\\\\n\\\\tuniform float bumpScale;\\\\n\\\\tvec2 dHdxy_fwd() {\\\\n\\\\t\\\\tvec2 dSTdx = dFdx( vUv );\\\\n\\\\t\\\\tvec2 dSTdy = dFdy( vUv );\\\\n\\\\t\\\\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\\\n\\\\t\\\\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\\\n\\\\t\\\\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\\\\n\\\\t\\\\treturn vec2( dBx, dBy );\\\\n\\\\t}\\\\n\\\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\\\\n\\\\t\\\\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\\\\n\\\\t\\\\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\\\\n\\\\t\\\\tvec3 vN = surf_norm;\\\\n\\\\t\\\\tvec3 R1 = cross( vSigmaY, vN );\\\\n\\\\t\\\\tvec3 R2 = cross( vN, vSigmaX );\\\\n\\\\t\\\\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\\\\n\\\\t\\\\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\\\n\\\\t\\\\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\\\n\\\\t}\\\\n#endif\\\\\\\",clipping_planes_fragment:\\\\\\\"#if NUM_CLIPPING_PLANES > 0\\\\n\\\\tvec4 plane;\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\\\n\\\\t\\\\tplane = clippingPlanes[ i ];\\\\n\\\\t\\\\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\\\n\\\\t\\\\tbool clipped = true;\\\\n\\\\t\\\\t#pragma unroll_loop_start\\\\n\\\\t\\\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\\\n\\\\t\\\\t\\\\tplane = clippingPlanes[ i ];\\\\n\\\\t\\\\t\\\\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\t#pragma unroll_loop_end\\\\n\\\\t\\\\tif ( clipped ) discard;\\\\n\\\\t#endif\\\\n#endif\\\\\\\",clipping_planes_pars_fragment:\\\\\\\"#if NUM_CLIPPING_PLANES > 0\\\\n\\\\tvarying vec3 vClipPosition;\\\\n\\\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\\\n#endif\\\\\\\",clipping_planes_pars_vertex:\\\\\\\"#if NUM_CLIPPING_PLANES > 0\\\\n\\\\tvarying vec3 vClipPosition;\\\\n#endif\\\\\\\",clipping_planes_vertex:\\\\\\\"#if NUM_CLIPPING_PLANES > 0\\\\n\\\\tvClipPosition = - mvPosition.xyz;\\\\n#endif\\\\\\\",color_fragment:\\\\\\\"#if defined( USE_COLOR_ALPHA )\\\\n\\\\tdiffuseColor *= vColor;\\\\n#elif defined( USE_COLOR )\\\\n\\\\tdiffuseColor.rgb *= vColor;\\\\n#endif\\\\\\\",color_pars_fragment:\\\\\\\"#if defined( USE_COLOR_ALPHA )\\\\n\\\\tvarying vec4 vColor;\\\\n#elif defined( USE_COLOR )\\\\n\\\\tvarying vec3 vColor;\\\\n#endif\\\\\\\",color_pars_vertex:\\\\\\\"#if defined( USE_COLOR_ALPHA )\\\\n\\\\tvarying vec4 vColor;\\\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\\\n\\\\tvarying vec3 vColor;\\\\n#endif\\\\\\\",color_vertex:\\\\\\\"#if defined( USE_COLOR_ALPHA )\\\\n\\\\tvColor = vec4( 1.0 );\\\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\\\n\\\\tvColor = vec3( 1.0 );\\\\n#endif\\\\n#ifdef USE_COLOR\\\\n\\\\tvColor *= color;\\\\n#endif\\\\n#ifdef USE_INSTANCING_COLOR\\\\n\\\\tvColor.xyz *= instanceColor.xyz;\\\\n#endif\\\\\\\",common:\\\\\\\"#define PI 3.141592653589793\\\\n#define PI2 6.283185307179586\\\\n#define PI_HALF 1.5707963267948966\\\\n#define RECIPROCAL_PI 0.3183098861837907\\\\n#define RECIPROCAL_PI2 0.15915494309189535\\\\n#define EPSILON 1e-6\\\\n#ifndef saturate\\\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\\\n#endif\\\\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\\\\nfloat pow2( const in float x ) { return x*x; }\\\\nfloat pow3( const in float x ) { return x*x*x; }\\\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\\\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\\\\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\\\\nhighp float rand( const in vec2 uv ) {\\\\n\\\\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\\\n\\\\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\\\n\\\\treturn fract( sin( sn ) * c );\\\\n}\\\\n#ifdef HIGH_PRECISION\\\\n\\\\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\\\\n#else\\\\n\\\\tfloat precisionSafeLength( vec3 v ) {\\\\n\\\\t\\\\tfloat maxComponent = max3( abs( v ) );\\\\n\\\\t\\\\treturn length( v / maxComponent ) * maxComponent;\\\\n\\\\t}\\\\n#endif\\\\nstruct IncidentLight {\\\\n\\\\tvec3 color;\\\\n\\\\tvec3 direction;\\\\n\\\\tbool visible;\\\\n};\\\\nstruct ReflectedLight {\\\\n\\\\tvec3 directDiffuse;\\\\n\\\\tvec3 directSpecular;\\\\n\\\\tvec3 indirectDiffuse;\\\\n\\\\tvec3 indirectSpecular;\\\\n};\\\\nstruct GeometricContext {\\\\n\\\\tvec3 position;\\\\n\\\\tvec3 normal;\\\\n\\\\tvec3 viewDir;\\\\n#ifdef USE_CLEARCOAT\\\\n\\\\tvec3 clearcoatNormal;\\\\n#endif\\\\n};\\\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\\\n\\\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\\\n}\\\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\\\n\\\\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\\\n}\\\\nmat3 transposeMat3( const in mat3 m ) {\\\\n\\\\tmat3 tmp;\\\\n\\\\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\\\\n\\\\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\\\\n\\\\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\\\\n\\\\treturn tmp;\\\\n}\\\\nfloat linearToRelativeLuminance( const in vec3 color ) {\\\\n\\\\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\\\\n\\\\treturn dot( weights, color.rgb );\\\\n}\\\\nbool isPerspectiveMatrix( mat4 m ) {\\\\n\\\\treturn m[ 2 ][ 3 ] == - 1.0;\\\\n}\\\\nvec2 equirectUv( in vec3 dir ) {\\\\n\\\\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\\\\n\\\\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\\\n\\\\treturn vec2( u, v );\\\\n}\\\\\\\",cube_uv_reflection_fragment:\\\\\\\"#ifdef ENVMAP_TYPE_CUBE_UV\\\\n\\\\t#define cubeUV_maxMipLevel 8.0\\\\n\\\\t#define cubeUV_minMipLevel 4.0\\\\n\\\\t#define cubeUV_maxTileSize 256.0\\\\n\\\\t#define cubeUV_minTileSize 16.0\\\\n\\\\tfloat getFace( vec3 direction ) {\\\\n\\\\t\\\\tvec3 absDirection = abs( direction );\\\\n\\\\t\\\\tfloat face = - 1.0;\\\\n\\\\t\\\\tif ( absDirection.x > absDirection.z ) {\\\\n\\\\t\\\\t\\\\tif ( absDirection.x > absDirection.y )\\\\n\\\\t\\\\t\\\\t\\\\tface = direction.x > 0.0 ? 0.0 : 3.0;\\\\n\\\\t\\\\t\\\\telse\\\\n\\\\t\\\\t\\\\t\\\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\tif ( absDirection.z > absDirection.y )\\\\n\\\\t\\\\t\\\\t\\\\tface = direction.z > 0.0 ? 2.0 : 5.0;\\\\n\\\\t\\\\t\\\\telse\\\\n\\\\t\\\\t\\\\t\\\\tface = direction.y > 0.0 ? 1.0 : 4.0;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn face;\\\\n\\\\t}\\\\n\\\\tvec2 getUV( vec3 direction, float face ) {\\\\n\\\\t\\\\tvec2 uv;\\\\n\\\\t\\\\tif ( face == 0.0 ) {\\\\n\\\\t\\\\t\\\\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\\\\n\\\\t\\\\t} else if ( face == 1.0 ) {\\\\n\\\\t\\\\t\\\\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\\\\n\\\\t\\\\t} else if ( face == 2.0 ) {\\\\n\\\\t\\\\t\\\\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\\\\n\\\\t\\\\t} else if ( face == 3.0 ) {\\\\n\\\\t\\\\t\\\\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\\\\n\\\\t\\\\t} else if ( face == 4.0 ) {\\\\n\\\\t\\\\t\\\\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn 0.5 * ( uv + 1.0 );\\\\n\\\\t}\\\\n\\\\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\\\\n\\\\t\\\\tfloat face = getFace( direction );\\\\n\\\\t\\\\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\\\\n\\\\t\\\\tmipInt = max( mipInt, cubeUV_minMipLevel );\\\\n\\\\t\\\\tfloat faceSize = exp2( mipInt );\\\\n\\\\t\\\\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\\\\n\\\\t\\\\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\\\\n\\\\t\\\\tvec2 f = fract( uv );\\\\n\\\\t\\\\tuv += 0.5 - f;\\\\n\\\\t\\\\tif ( face > 2.0 ) {\\\\n\\\\t\\\\t\\\\tuv.y += faceSize;\\\\n\\\\t\\\\t\\\\tface -= 3.0;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tuv.x += face * faceSize;\\\\n\\\\t\\\\tif ( mipInt < cubeUV_maxMipLevel ) {\\\\n\\\\t\\\\t\\\\tuv.y += 2.0 * cubeUV_maxTileSize;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\\\\n\\\\t\\\\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\\\\n\\\\t\\\\tuv *= texelSize;\\\\n\\\\t\\\\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\\\n\\\\t\\\\tuv.x += texelSize;\\\\n\\\\t\\\\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\\\n\\\\t\\\\tuv.y += texelSize;\\\\n\\\\t\\\\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\\\n\\\\t\\\\tuv.x -= texelSize;\\\\n\\\\t\\\\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\\\n\\\\t\\\\tvec3 tm = mix( tl, tr, f.x );\\\\n\\\\t\\\\tvec3 bm = mix( bl, br, f.x );\\\\n\\\\t\\\\treturn mix( tm, bm, f.y );\\\\n\\\\t}\\\\n\\\\t#define r0 1.0\\\\n\\\\t#define v0 0.339\\\\n\\\\t#define m0 - 2.0\\\\n\\\\t#define r1 0.8\\\\n\\\\t#define v1 0.276\\\\n\\\\t#define m1 - 1.0\\\\n\\\\t#define r4 0.4\\\\n\\\\t#define v4 0.046\\\\n\\\\t#define m4 2.0\\\\n\\\\t#define r5 0.305\\\\n\\\\t#define v5 0.016\\\\n\\\\t#define m5 3.0\\\\n\\\\t#define r6 0.21\\\\n\\\\t#define v6 0.0038\\\\n\\\\t#define m6 4.0\\\\n\\\\tfloat roughnessToMip( float roughness ) {\\\\n\\\\t\\\\tfloat mip = 0.0;\\\\n\\\\t\\\\tif ( roughness >= r1 ) {\\\\n\\\\t\\\\t\\\\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\\\\n\\\\t\\\\t} else if ( roughness >= r4 ) {\\\\n\\\\t\\\\t\\\\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\\\\n\\\\t\\\\t} else if ( roughness >= r5 ) {\\\\n\\\\t\\\\t\\\\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\\\\n\\\\t\\\\t} else if ( roughness >= r6 ) {\\\\n\\\\t\\\\t\\\\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\tmip = - 2.0 * log2( 1.16 * roughness );\\\\t\\\\t}\\\\n\\\\t\\\\treturn mip;\\\\n\\\\t}\\\\n\\\\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\\\\n\\\\t\\\\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\\\\n\\\\t\\\\tfloat mipF = fract( mip );\\\\n\\\\t\\\\tfloat mipInt = floor( mip );\\\\n\\\\t\\\\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\\\\n\\\\t\\\\tif ( mipF == 0.0 ) {\\\\n\\\\t\\\\t\\\\treturn vec4( color0, 1.0 );\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\\\\n\\\\t\\\\t\\\\treturn vec4( mix( color0, color1, mipF ), 1.0 );\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n#endif\\\\\\\",defaultnormal_vertex:\\\\\\\"vec3 transformedNormal = objectNormal;\\\\n#ifdef USE_INSTANCING\\\\n\\\\tmat3 m = mat3( instanceMatrix );\\\\n\\\\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\\\\n\\\\ttransformedNormal = m * transformedNormal;\\\\n#endif\\\\ntransformedNormal = normalMatrix * transformedNormal;\\\\n#ifdef FLIP_SIDED\\\\n\\\\ttransformedNormal = - transformedNormal;\\\\n#endif\\\\n#ifdef USE_TANGENT\\\\n\\\\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\\\n\\\\t#ifdef FLIP_SIDED\\\\n\\\\t\\\\ttransformedTangent = - transformedTangent;\\\\n\\\\t#endif\\\\n#endif\\\\\\\",displacementmap_pars_vertex:\\\\\\\"#ifdef USE_DISPLACEMENTMAP\\\\n\\\\tuniform sampler2D displacementMap;\\\\n\\\\tuniform float displacementScale;\\\\n\\\\tuniform float displacementBias;\\\\n#endif\\\\\\\",displacementmap_vertex:\\\\\\\"#ifdef USE_DISPLACEMENTMAP\\\\n\\\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\\\\n#endif\\\\\\\",emissivemap_fragment:\\\\\\\"#ifdef USE_EMISSIVEMAP\\\\n\\\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\\\n\\\\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\\\\n\\\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\\\n#endif\\\\\\\",emissivemap_pars_fragment:\\\\\\\"#ifdef USE_EMISSIVEMAP\\\\n\\\\tuniform sampler2D emissiveMap;\\\\n#endif\\\\\\\",encodings_fragment:\\\\\\\"gl_FragColor = linearToOutputTexel( gl_FragColor );\\\\\\\",encodings_pars_fragment:\\\\\\\"\\\\nvec4 LinearToLinear( in vec4 value ) {\\\\n\\\\treturn value;\\\\n}\\\\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\\\\n\\\\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\\\\n}\\\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\\\n\\\\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\\\\n}\\\\nvec4 sRGBToLinear( in vec4 value ) {\\\\n\\\\treturn 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 );\\\\n}\\\\nvec4 LinearTosRGB( in vec4 value ) {\\\\n\\\\treturn 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 );\\\\n}\\\\nvec4 RGBEToLinear( in vec4 value ) {\\\\n\\\\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\\\\n}\\\\nvec4 LinearToRGBE( in vec4 value ) {\\\\n\\\\tfloat maxComponent = max( max( value.r, value.g ), value.b );\\\\n\\\\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\\\\n\\\\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\\\\n}\\\\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\\\\n\\\\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\\\\n}\\\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\\\n\\\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\\\n\\\\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\\\\n\\\\tM = ceil( M * 255.0 ) / 255.0;\\\\n\\\\treturn vec4( value.rgb / ( M * maxRange ), M );\\\\n}\\\\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\\\\n\\\\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\\\\n}\\\\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\\\\n\\\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\\\n\\\\tfloat D = max( maxRange / maxRGB, 1.0 );\\\\n\\\\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\\\\n\\\\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\\\\n}\\\\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\\\\nvec4 LinearToLogLuv( in vec4 value ) {\\\\n\\\\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\\\\n\\\\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\\\\n\\\\tvec4 vResult;\\\\n\\\\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\\\\n\\\\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\\\\n\\\\tvResult.w = fract( Le );\\\\n\\\\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\\\\n\\\\treturn vResult;\\\\n}\\\\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\\\\nvec4 LogLuvToLinear( in vec4 value ) {\\\\n\\\\tfloat Le = value.z * 255.0 + value.w;\\\\n\\\\tvec3 Xp_Y_XYZp;\\\\n\\\\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\\\\n\\\\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\\\\n\\\\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\\\\n\\\\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\\\\n\\\\treturn vec4( max( vRGB, 0.0 ), 1.0 );\\\\n}\\\\\\\",envmap_fragment:\\\\\\\"#ifdef USE_ENVMAP\\\\n\\\\t#ifdef ENV_WORLDPOS\\\\n\\\\t\\\\tvec3 cameraToFrag;\\\\n\\\\t\\\\tif ( isOrthographic ) {\\\\n\\\\t\\\\t\\\\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\\\n\\\\t\\\\t#ifdef ENVMAP_MODE_REFLECTION\\\\n\\\\t\\\\t\\\\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\\\\n\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\\\\n\\\\t\\\\t#endif\\\\n\\\\t#else\\\\n\\\\t\\\\tvec3 reflectVec = vReflect;\\\\n\\\\t#endif\\\\n\\\\t#ifdef ENVMAP_TYPE_CUBE\\\\n\\\\t\\\\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\\\n\\\\t\\\\tenvColor = envMapTexelToLinear( envColor );\\\\n\\\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\\\n\\\\t\\\\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\\\\n\\\\t#else\\\\n\\\\t\\\\tvec4 envColor = vec4( 0.0 );\\\\n\\\\t#endif\\\\n\\\\t#ifdef ENVMAP_BLENDING_MULTIPLY\\\\n\\\\t\\\\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\\\n\\\\t#elif defined( ENVMAP_BLENDING_MIX )\\\\n\\\\t\\\\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\\\n\\\\t#elif defined( ENVMAP_BLENDING_ADD )\\\\n\\\\t\\\\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\\\n\\\\t#endif\\\\n#endif\\\\\\\",envmap_common_pars_fragment:\\\\\\\"#ifdef USE_ENVMAP\\\\n\\\\tuniform float envMapIntensity;\\\\n\\\\tuniform float flipEnvMap;\\\\n\\\\tuniform int maxMipLevel;\\\\n\\\\t#ifdef ENVMAP_TYPE_CUBE\\\\n\\\\t\\\\tuniform samplerCube envMap;\\\\n\\\\t#else\\\\n\\\\t\\\\tuniform sampler2D envMap;\\\\n\\\\t#endif\\\\n\\\\t\\\\n#endif\\\\\\\",envmap_pars_fragment:\\\\\\\"#ifdef USE_ENVMAP\\\\n\\\\tuniform float reflectivity;\\\\n\\\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\\\n\\\\t\\\\t#define ENV_WORLDPOS\\\\n\\\\t#endif\\\\n\\\\t#ifdef ENV_WORLDPOS\\\\n\\\\t\\\\tvarying vec3 vWorldPosition;\\\\n\\\\t\\\\tuniform float refractionRatio;\\\\n\\\\t#else\\\\n\\\\t\\\\tvarying vec3 vReflect;\\\\n\\\\t#endif\\\\n#endif\\\\\\\",envmap_pars_vertex:\\\\\\\"#ifdef USE_ENVMAP\\\\n\\\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\\\\n\\\\t\\\\t#define ENV_WORLDPOS\\\\n\\\\t#endif\\\\n\\\\t#ifdef ENV_WORLDPOS\\\\n\\\\t\\\\t\\\\n\\\\t\\\\tvarying vec3 vWorldPosition;\\\\n\\\\t#else\\\\n\\\\t\\\\tvarying vec3 vReflect;\\\\n\\\\t\\\\tuniform float refractionRatio;\\\\n\\\\t#endif\\\\n#endif\\\\\\\",envmap_physical_pars_fragment:\\\\\\\"#if defined( USE_ENVMAP )\\\\n\\\\t#ifdef ENVMAP_MODE_REFRACTION\\\\n\\\\t\\\\tuniform float refractionRatio;\\\\n\\\\t#endif\\\\n\\\\tvec3 getIBLIrradiance( const in vec3 normal ) {\\\\n\\\\t\\\\t#if defined( ENVMAP_TYPE_CUBE_UV )\\\\n\\\\t\\\\t\\\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\\\n\\\\t\\\\t\\\\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\\\\n\\\\t\\\\t\\\\treturn PI * envMapColor.rgb * envMapIntensity;\\\\n\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\treturn vec3( 0.0 );\\\\n\\\\t\\\\t#endif\\\\n\\\\t}\\\\n\\\\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\\\\n\\\\t\\\\t#if defined( ENVMAP_TYPE_CUBE_UV )\\\\n\\\\t\\\\t\\\\tvec3 reflectVec;\\\\n\\\\t\\\\t\\\\t#ifdef ENVMAP_MODE_REFLECTION\\\\n\\\\t\\\\t\\\\t\\\\treflectVec = reflect( - viewDir, normal );\\\\n\\\\t\\\\t\\\\t\\\\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\\\n\\\\t\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\treflectVec = refract( - viewDir, normal, refractionRatio );\\\\n\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\\\n\\\\t\\\\t\\\\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\\\\n\\\\t\\\\t\\\\treturn envMapColor.rgb * envMapIntensity;\\\\n\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\treturn vec3( 0.0 );\\\\n\\\\t\\\\t#endif\\\\n\\\\t}\\\\n#endif\\\\\\\",envmap_vertex:\\\\\\\"#ifdef USE_ENVMAP\\\\n\\\\t#ifdef ENV_WORLDPOS\\\\n\\\\t\\\\tvWorldPosition = worldPosition.xyz;\\\\n\\\\t#else\\\\n\\\\t\\\\tvec3 cameraToVertex;\\\\n\\\\t\\\\tif ( isOrthographic ) {\\\\n\\\\t\\\\t\\\\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\\\n\\\\t\\\\t#ifdef ENVMAP_MODE_REFLECTION\\\\n\\\\t\\\\t\\\\tvReflect = reflect( cameraToVertex, worldNormal );\\\\n\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\\\n\\\\t\\\\t#endif\\\\n\\\\t#endif\\\\n#endif\\\\\\\",fog_vertex:\\\\\\\"#ifdef USE_FOG\\\\n\\\\tvFogDepth = - mvPosition.z;\\\\n#endif\\\\\\\",fog_pars_vertex:\\\\\\\"#ifdef USE_FOG\\\\n\\\\tvarying float vFogDepth;\\\\n#endif\\\\\\\",fog_fragment:\\\\\\\"#ifdef USE_FOG\\\\n\\\\t#ifdef FOG_EXP2\\\\n\\\\t\\\\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\\\\n\\\\t#else\\\\n\\\\t\\\\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\\\\n\\\\t#endif\\\\n\\\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\\\n#endif\\\\\\\",fog_pars_fragment:\\\\\\\"#ifdef USE_FOG\\\\n\\\\tuniform vec3 fogColor;\\\\n\\\\tvarying float vFogDepth;\\\\n\\\\t#ifdef FOG_EXP2\\\\n\\\\t\\\\tuniform float fogDensity;\\\\n\\\\t#else\\\\n\\\\t\\\\tuniform float fogNear;\\\\n\\\\t\\\\tuniform float fogFar;\\\\n\\\\t#endif\\\\n#endif\\\\\\\",gradientmap_pars_fragment:\\\\\\\"#ifdef USE_GRADIENTMAP\\\\n\\\\tuniform sampler2D gradientMap;\\\\n#endif\\\\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\\\n\\\\tfloat dotNL = dot( normal, lightDirection );\\\\n\\\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\\\n\\\\t#ifdef USE_GRADIENTMAP\\\\n\\\\t\\\\treturn texture2D( gradientMap, coord ).rgb;\\\\n\\\\t#else\\\\n\\\\t\\\\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\\\n\\\\t#endif\\\\n}\\\\\\\",lightmap_fragment:\\\\\\\"#ifdef USE_LIGHTMAP\\\\n\\\\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\\\\n\\\\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\\\n\\\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\\\n\\\\t\\\\tlightMapIrradiance *= PI;\\\\n\\\\t#endif\\\\n\\\\treflectedLight.indirectDiffuse += lightMapIrradiance;\\\\n#endif\\\\\\\",lightmap_pars_fragment:\\\\\\\"#ifdef USE_LIGHTMAP\\\\n\\\\tuniform sampler2D lightMap;\\\\n\\\\tuniform float lightMapIntensity;\\\\n#endif\\\\\\\",lights_lambert_vertex:\\\\\\\"vec3 diffuse = vec3( 1.0 );\\\\nGeometricContext geometry;\\\\ngeometry.position = mvPosition.xyz;\\\\ngeometry.normal = normalize( transformedNormal );\\\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\\\\nGeometricContext backGeometry;\\\\nbackGeometry.position = geometry.position;\\\\nbackGeometry.normal = -geometry.normal;\\\\nbackGeometry.viewDir = geometry.viewDir;\\\\nvLightFront = vec3( 0.0 );\\\\nvIndirectFront = vec3( 0.0 );\\\\n#ifdef DOUBLE_SIDED\\\\n\\\\tvLightBack = vec3( 0.0 );\\\\n\\\\tvIndirectBack = vec3( 0.0 );\\\\n#endif\\\\nIncidentLight directLight;\\\\nfloat dotNL;\\\\nvec3 directLightColor_Diffuse;\\\\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\\\\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry.normal );\\\\n#ifdef DOUBLE_SIDED\\\\n\\\\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\\\\n\\\\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry.normal );\\\\n#endif\\\\n#if NUM_POINT_LIGHTS > 0\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\\\n\\\\t\\\\tgetPointLightInfo( pointLights[ i ], geometry, directLight );\\\\n\\\\t\\\\tdotNL = dot( geometry.normal, directLight.direction );\\\\n\\\\t\\\\tdirectLightColor_Diffuse = directLight.color;\\\\n\\\\t\\\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\\\n\\\\t\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\t\\\\t\\\\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\\\\n\\\\t\\\\t#endif\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n#endif\\\\n#if NUM_SPOT_LIGHTS > 0\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\\\n\\\\t\\\\tgetSpotLightInfo( spotLights[ i ], geometry, directLight );\\\\n\\\\t\\\\tdotNL = dot( geometry.normal, directLight.direction );\\\\n\\\\t\\\\tdirectLightColor_Diffuse = directLight.color;\\\\n\\\\t\\\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\\\n\\\\t\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\t\\\\t\\\\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\\\\n\\\\t\\\\t#endif\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n#endif\\\\n#if NUM_DIR_LIGHTS > 0\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\\\n\\\\t\\\\tgetDirectionalLightInfo( directionalLights[ i ], geometry, directLight );\\\\n\\\\t\\\\tdotNL = dot( geometry.normal, directLight.direction );\\\\n\\\\t\\\\tdirectLightColor_Diffuse = directLight.color;\\\\n\\\\t\\\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\\\n\\\\t\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\t\\\\t\\\\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\\\\n\\\\t\\\\t#endif\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n#endif\\\\n#if NUM_HEMI_LIGHTS > 0\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\\\n\\\\t\\\\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\\\\n\\\\t\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\t\\\\t\\\\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry.normal );\\\\n\\\\t\\\\t#endif\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n#endif\\\\\\\",lights_pars_begin:\\\\\\\"uniform bool receiveShadow;\\\\nuniform vec3 ambientLightColor;\\\\nuniform vec3 lightProbe[ 9 ];\\\\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\\\\n\\\\tfloat x = normal.x, y = normal.y, z = normal.z;\\\\n\\\\tvec3 result = shCoefficients[ 0 ] * 0.886227;\\\\n\\\\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\\\\n\\\\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\\\\n\\\\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\\\\n\\\\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\\\\n\\\\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\\\\n\\\\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\\\\n\\\\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\\\\n\\\\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\\\\n\\\\treturn result;\\\\n}\\\\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\\\\n\\\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\\\n\\\\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\\\\n\\\\treturn irradiance;\\\\n}\\\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\\\n\\\\tvec3 irradiance = ambientLightColor;\\\\n\\\\treturn irradiance;\\\\n}\\\\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\\\n\\\\t#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\\\n\\\\t\\\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\\\n\\\\t\\\\tif ( cutoffDistance > 0.0 ) {\\\\n\\\\t\\\\t\\\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn distanceFalloff;\\\\n\\\\t#else\\\\n\\\\t\\\\tif ( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\\\\n\\\\t\\\\t\\\\treturn pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn 1.0;\\\\n\\\\t#endif\\\\n}\\\\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\\\\n\\\\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\\\\n}\\\\n#if NUM_DIR_LIGHTS > 0\\\\n\\\\tstruct DirectionalLight {\\\\n\\\\t\\\\tvec3 direction;\\\\n\\\\t\\\\tvec3 color;\\\\n\\\\t};\\\\n\\\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\\\n\\\\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) {\\\\n\\\\t\\\\tlight.color = directionalLight.color;\\\\n\\\\t\\\\tlight.direction = directionalLight.direction;\\\\n\\\\t\\\\tlight.visible = true;\\\\n\\\\t}\\\\n#endif\\\\n#if NUM_POINT_LIGHTS > 0\\\\n\\\\tstruct PointLight {\\\\n\\\\t\\\\tvec3 position;\\\\n\\\\t\\\\tvec3 color;\\\\n\\\\t\\\\tfloat distance;\\\\n\\\\t\\\\tfloat decay;\\\\n\\\\t};\\\\n\\\\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\\\n\\\\tvoid getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) {\\\\n\\\\t\\\\tvec3 lVector = pointLight.position - geometry.position;\\\\n\\\\t\\\\tlight.direction = normalize( lVector );\\\\n\\\\t\\\\tfloat lightDistance = length( lVector );\\\\n\\\\t\\\\tlight.color = pointLight.color;\\\\n\\\\t\\\\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\\\\n\\\\t\\\\tlight.visible = ( light.color != vec3( 0.0 ) );\\\\n\\\\t}\\\\n#endif\\\\n#if NUM_SPOT_LIGHTS > 0\\\\n\\\\tstruct SpotLight {\\\\n\\\\t\\\\tvec3 position;\\\\n\\\\t\\\\tvec3 direction;\\\\n\\\\t\\\\tvec3 color;\\\\n\\\\t\\\\tfloat distance;\\\\n\\\\t\\\\tfloat decay;\\\\n\\\\t\\\\tfloat coneCos;\\\\n\\\\t\\\\tfloat penumbraCos;\\\\n\\\\t};\\\\n\\\\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\\\n\\\\tvoid getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) {\\\\n\\\\t\\\\tvec3 lVector = spotLight.position - geometry.position;\\\\n\\\\t\\\\tlight.direction = normalize( lVector );\\\\n\\\\t\\\\tfloat angleCos = dot( light.direction, spotLight.direction );\\\\n\\\\t\\\\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\\\n\\\\t\\\\tif ( spotAttenuation > 0.0 ) {\\\\n\\\\t\\\\t\\\\tfloat lightDistance = length( lVector );\\\\n\\\\t\\\\t\\\\tlight.color = spotLight.color * spotAttenuation;\\\\n\\\\t\\\\t\\\\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\\\\n\\\\t\\\\t\\\\tlight.visible = ( light.color != vec3( 0.0 ) );\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\tlight.color = vec3( 0.0 );\\\\n\\\\t\\\\t\\\\tlight.visible = false;\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n#endif\\\\n#if NUM_RECT_AREA_LIGHTS > 0\\\\n\\\\tstruct RectAreaLight {\\\\n\\\\t\\\\tvec3 color;\\\\n\\\\t\\\\tvec3 position;\\\\n\\\\t\\\\tvec3 halfWidth;\\\\n\\\\t\\\\tvec3 halfHeight;\\\\n\\\\t};\\\\n\\\\tuniform sampler2D ltc_1;\\\\tuniform sampler2D ltc_2;\\\\n\\\\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\\\\n#endif\\\\n#if NUM_HEMI_LIGHTS > 0\\\\n\\\\tstruct HemisphereLight {\\\\n\\\\t\\\\tvec3 direction;\\\\n\\\\t\\\\tvec3 skyColor;\\\\n\\\\t\\\\tvec3 groundColor;\\\\n\\\\t};\\\\n\\\\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\\\\n\\\\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\\\\n\\\\t\\\\tfloat dotNL = dot( normal, hemiLight.direction );\\\\n\\\\t\\\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\\\n\\\\t\\\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\\\n\\\\t\\\\treturn irradiance;\\\\n\\\\t}\\\\n#endif\\\\\\\",lights_toon_fragment:\\\\\\\"ToonMaterial material;\\\\nmaterial.diffuseColor = diffuseColor.rgb;\\\\\\\",lights_toon_pars_fragment:\\\\\\\"varying vec3 vViewPosition;\\\\nstruct ToonMaterial {\\\\n\\\\tvec3 diffuseColor;\\\\n};\\\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\\\n\\\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\\\n}\\\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\\\n}\\\\n#define RE_Direct\\\\t\\\\t\\\\t\\\\tRE_Direct_Toon\\\\n#define RE_IndirectDiffuse\\\\t\\\\tRE_IndirectDiffuse_Toon\\\\n#define Material_LightProbeLOD( material )\\\\t(0)\\\\\\\",lights_phong_fragment:\\\\\\\"BlinnPhongMaterial material;\\\\nmaterial.diffuseColor = diffuseColor.rgb;\\\\nmaterial.specularColor = specular;\\\\nmaterial.specularShininess = shininess;\\\\nmaterial.specularStrength = specularStrength;\\\\\\\",lights_phong_pars_fragment:\\\\\\\"varying vec3 vViewPosition;\\\\nstruct BlinnPhongMaterial {\\\\n\\\\tvec3 diffuseColor;\\\\n\\\\tvec3 specularColor;\\\\n\\\\tfloat specularShininess;\\\\n\\\\tfloat specularStrength;\\\\n};\\\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\\\n\\\\tvec3 irradiance = dotNL * directLight.color;\\\\n\\\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\\\n\\\\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;\\\\n}\\\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\\\n}\\\\n#define RE_Direct\\\\t\\\\t\\\\t\\\\tRE_Direct_BlinnPhong\\\\n#define RE_IndirectDiffuse\\\\t\\\\tRE_IndirectDiffuse_BlinnPhong\\\\n#define Material_LightProbeLOD( material )\\\\t(0)\\\\\\\",lights_physical_fragment:\\\\\\\"PhysicalMaterial material;\\\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\\\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\\\\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\\\\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\\\\nmaterial.roughness = min( material.roughness, 1.0 );\\\\n#ifdef IOR\\\\n\\\\t#ifdef SPECULAR\\\\n\\\\t\\\\tfloat specularIntensityFactor = specularIntensity;\\\\n\\\\t\\\\tvec3 specularTintFactor = specularTint;\\\\n\\\\t\\\\t#ifdef USE_SPECULARINTENSITYMAP\\\\n\\\\t\\\\t\\\\tspecularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t#ifdef USE_SPECULARTINTMAP\\\\n\\\\t\\\\t\\\\tspecularTintFactor *= specularTintMapTexelToLinear( texture2D( specularTintMap, vUv ) ).rgb;\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\\\\n\\\\t#else\\\\n\\\\t\\\\tfloat specularIntensityFactor = 1.0;\\\\n\\\\t\\\\tvec3 specularTintFactor = vec3( 1.0 );\\\\n\\\\t\\\\tmaterial.specularF90 = 1.0;\\\\n\\\\t#endif\\\\n\\\\tmaterial.specularColor = mix( min( pow2( ( ior - 1.0 ) / ( ior + 1.0 ) ) * specularTintFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\\\\n#else\\\\n\\\\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\\\\n\\\\tmaterial.specularF90 = 1.0;\\\\n#endif\\\\n#ifdef USE_CLEARCOAT\\\\n\\\\tmaterial.clearcoat = clearcoat;\\\\n\\\\tmaterial.clearcoatRoughness = clearcoatRoughness;\\\\n\\\\tmaterial.clearcoatF0 = vec3( 0.04 );\\\\n\\\\tmaterial.clearcoatF90 = 1.0;\\\\n\\\\t#ifdef USE_CLEARCOATMAP\\\\n\\\\t\\\\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\\\\n\\\\t#endif\\\\n\\\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\\\n\\\\t\\\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\\\\n\\\\t#endif\\\\n\\\\tmaterial.clearcoat = saturate( material.clearcoat );\\\\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\\\\n\\\\tmaterial.clearcoatRoughness += geometryRoughness;\\\\n\\\\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\\\\n#endif\\\\n#ifdef USE_SHEEN\\\\n\\\\tmaterial.sheenTint = sheenTint;\\\\n\\\\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\\\\n#endif\\\\\\\",lights_physical_pars_fragment:\\\\\\\"struct PhysicalMaterial {\\\\n\\\\tvec3 diffuseColor;\\\\n\\\\tfloat roughness;\\\\n\\\\tvec3 specularColor;\\\\n\\\\tfloat specularF90;\\\\n\\\\t#ifdef USE_CLEARCOAT\\\\n\\\\t\\\\tfloat clearcoat;\\\\n\\\\t\\\\tfloat clearcoatRoughness;\\\\n\\\\t\\\\tvec3 clearcoatF0;\\\\n\\\\t\\\\tfloat clearcoatF90;\\\\n\\\\t#endif\\\\n\\\\t#ifdef USE_SHEEN\\\\n\\\\t\\\\tvec3 sheenTint;\\\\n\\\\t\\\\tfloat sheenRoughness;\\\\n\\\\t#endif\\\\n};\\\\nvec3 clearcoatSpecular = vec3( 0.0 );\\\\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\\\\n\\\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\\\n\\\\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\\\\n\\\\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\\\\n\\\\tvec4 r = roughness * c0 + c1;\\\\n\\\\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\\\\n\\\\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\\\\n\\\\treturn fab;\\\\n}\\\\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\\\\n\\\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\\\n\\\\treturn specularColor * fab.x + specularF90 * fab.y;\\\\n}\\\\nvoid 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 ) {\\\\n\\\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\\\n\\\\tvec3 FssEss = specularColor * fab.x + specularF90 * fab.y;\\\\n\\\\tfloat Ess = fab.x + fab.y;\\\\n\\\\tfloat Ems = 1.0 - Ess;\\\\n\\\\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\\\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\\\n\\\\tsingleScatter += FssEss;\\\\n\\\\tmultiScatter += Fms * Ems;\\\\n}\\\\n#if NUM_RECT_AREA_LIGHTS > 0\\\\n\\\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\t\\\\tvec3 normal = geometry.normal;\\\\n\\\\t\\\\tvec3 viewDir = geometry.viewDir;\\\\n\\\\t\\\\tvec3 position = geometry.position;\\\\n\\\\t\\\\tvec3 lightPos = rectAreaLight.position;\\\\n\\\\t\\\\tvec3 halfWidth = rectAreaLight.halfWidth;\\\\n\\\\t\\\\tvec3 halfHeight = rectAreaLight.halfHeight;\\\\n\\\\t\\\\tvec3 lightColor = rectAreaLight.color;\\\\n\\\\t\\\\tfloat roughness = material.roughness;\\\\n\\\\t\\\\tvec3 rectCoords[ 4 ];\\\\n\\\\t\\\\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\\\\t\\\\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\\\\n\\\\t\\\\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\\\\n\\\\t\\\\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\\\\n\\\\t\\\\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\\\\n\\\\t\\\\tvec4 t1 = texture2D( ltc_1, uv );\\\\n\\\\t\\\\tvec4 t2 = texture2D( ltc_2, uv );\\\\n\\\\t\\\\tmat3 mInv = mat3(\\\\n\\\\t\\\\t\\\\tvec3( t1.x, 0, t1.y ),\\\\n\\\\t\\\\t\\\\tvec3(    0, 1,    0 ),\\\\n\\\\t\\\\t\\\\tvec3( t1.z, 0, t1.w )\\\\n\\\\t\\\\t);\\\\n\\\\t\\\\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\\\\n\\\\t\\\\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\\\\n\\\\t\\\\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\\\\n\\\\t}\\\\n#endif\\\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\\\n\\\\tvec3 irradiance = dotNL * directLight.color;\\\\n\\\\t#ifdef USE_CLEARCOAT\\\\n\\\\t\\\\tfloat dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\\\\n\\\\t\\\\tvec3 ccIrradiance = dotNLcc * directLight.color;\\\\n\\\\t\\\\tclearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\\\n\\\\t#endif\\\\n\\\\t#ifdef USE_SHEEN\\\\n\\\\t\\\\treflectedLight.directSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenTint, material.sheenRoughness );\\\\n\\\\t#endif\\\\n\\\\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );\\\\n\\\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\\\n}\\\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\\\n\\\\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\\\n}\\\\nvoid 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) {\\\\n\\\\t#ifdef USE_CLEARCOAT\\\\n\\\\t\\\\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\\\n\\\\t#endif\\\\n\\\\tvec3 singleScattering = vec3( 0.0 );\\\\n\\\\tvec3 multiScattering = vec3( 0.0 );\\\\n\\\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\\\n\\\\tcomputeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\\\\n\\\\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\\\\n\\\\treflectedLight.indirectSpecular += radiance * singleScattering;\\\\n\\\\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\\\\n\\\\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\\\\n}\\\\n#define RE_Direct\\\\t\\\\t\\\\t\\\\tRE_Direct_Physical\\\\n#define RE_Direct_RectArea\\\\t\\\\tRE_Direct_RectArea_Physical\\\\n#define RE_IndirectDiffuse\\\\t\\\\tRE_IndirectDiffuse_Physical\\\\n#define RE_IndirectSpecular\\\\t\\\\tRE_IndirectSpecular_Physical\\\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\\\n\\\\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\\\n}\\\\\\\",lights_fragment_begin:\\\\\\\"\\\\nGeometricContext geometry;\\\\ngeometry.position = - vViewPosition;\\\\ngeometry.normal = normal;\\\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\\\n#ifdef USE_CLEARCOAT\\\\n\\\\tgeometry.clearcoatNormal = clearcoatNormal;\\\\n#endif\\\\nIncidentLight directLight;\\\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\\\n\\\\tPointLight pointLight;\\\\n\\\\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\\\\n\\\\tPointLightShadow pointLightShadow;\\\\n\\\\t#endif\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\\\n\\\\t\\\\tpointLight = pointLights[ i ];\\\\n\\\\t\\\\tgetPointLightInfo( pointLight, geometry, directLight );\\\\n\\\\t\\\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\\\\n\\\\t\\\\tpointLightShadow = pointLightShadows[ i ];\\\\n\\\\t\\\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\tRE_Direct( directLight, geometry, material, reflectedLight );\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n#endif\\\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\\\n\\\\tSpotLight spotLight;\\\\n\\\\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\\\\n\\\\tSpotLightShadow spotLightShadow;\\\\n\\\\t#endif\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\\\n\\\\t\\\\tspotLight = spotLights[ i ];\\\\n\\\\t\\\\tgetSpotLightInfo( spotLight, geometry, directLight );\\\\n\\\\t\\\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\\\\n\\\\t\\\\tspotLightShadow = spotLightShadows[ i ];\\\\n\\\\t\\\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\tRE_Direct( directLight, geometry, material, reflectedLight );\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n#endif\\\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\\\n\\\\tDirectionalLight directionalLight;\\\\n\\\\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\\\\n\\\\tDirectionalLightShadow directionalLightShadow;\\\\n\\\\t#endif\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\\\n\\\\t\\\\tdirectionalLight = directionalLights[ i ];\\\\n\\\\t\\\\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\\\\n\\\\t\\\\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\\\\n\\\\t\\\\tdirectionalLightShadow = directionalLightShadows[ i ];\\\\n\\\\t\\\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\tRE_Direct( directLight, geometry, material, reflectedLight );\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n#endif\\\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\\\n\\\\tRectAreaLight rectAreaLight;\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\\\n\\\\t\\\\trectAreaLight = rectAreaLights[ i ];\\\\n\\\\t\\\\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n#endif\\\\n#if defined( RE_IndirectDiffuse )\\\\n\\\\tvec3 iblIrradiance = vec3( 0.0 );\\\\n\\\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\\\n\\\\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\\\\n\\\\t#if ( NUM_HEMI_LIGHTS > 0 )\\\\n\\\\t\\\\t#pragma unroll_loop_start\\\\n\\\\t\\\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\\\n\\\\t\\\\t\\\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\t#pragma unroll_loop_end\\\\n\\\\t#endif\\\\n#endif\\\\n#if defined( RE_IndirectSpecular )\\\\n\\\\tvec3 radiance = vec3( 0.0 );\\\\n\\\\tvec3 clearcoatRadiance = vec3( 0.0 );\\\\n#endif\\\\\\\",lights_fragment_maps:\\\\\\\"#if defined( RE_IndirectDiffuse )\\\\n\\\\t#ifdef USE_LIGHTMAP\\\\n\\\\t\\\\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\\\\n\\\\t\\\\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\\\n\\\\t\\\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\\\n\\\\t\\\\t\\\\tlightMapIrradiance *= PI;\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\tirradiance += lightMapIrradiance;\\\\n\\\\t#endif\\\\n\\\\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\\\\n\\\\t\\\\tiblIrradiance += getIBLIrradiance( geometry.normal );\\\\n\\\\t#endif\\\\n#endif\\\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\\\n\\\\tradiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );\\\\n\\\\t#ifdef USE_CLEARCOAT\\\\n\\\\t\\\\tclearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );\\\\n\\\\t#endif\\\\n#endif\\\\\\\",lights_fragment_end:\\\\\\\"#if defined( RE_IndirectDiffuse )\\\\n\\\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\\\n#endif\\\\n#if defined( RE_IndirectSpecular )\\\\n\\\\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\\\\n#endif\\\\\\\",logdepthbuf_fragment:\\\\\\\"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\\\n\\\\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\\\n#endif\\\\\\\",logdepthbuf_pars_fragment:\\\\\\\"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\\\n\\\\tuniform float logDepthBufFC;\\\\n\\\\tvarying float vFragDepth;\\\\n\\\\tvarying float vIsPerspective;\\\\n#endif\\\\\\\",logdepthbuf_pars_vertex:\\\\\\\"#ifdef USE_LOGDEPTHBUF\\\\n\\\\t#ifdef USE_LOGDEPTHBUF_EXT\\\\n\\\\t\\\\tvarying float vFragDepth;\\\\n\\\\t\\\\tvarying float vIsPerspective;\\\\n\\\\t#else\\\\n\\\\t\\\\tuniform float logDepthBufFC;\\\\n\\\\t#endif\\\\n#endif\\\\\\\",logdepthbuf_vertex:\\\\\\\"#ifdef USE_LOGDEPTHBUF\\\\n\\\\t#ifdef USE_LOGDEPTHBUF_EXT\\\\n\\\\t\\\\tvFragDepth = 1.0 + gl_Position.w;\\\\n\\\\t\\\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\\\n\\\\t#else\\\\n\\\\t\\\\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\\\\n\\\\t\\\\t\\\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\\\n\\\\t\\\\t\\\\tgl_Position.z *= gl_Position.w;\\\\n\\\\t\\\\t}\\\\n\\\\t#endif\\\\n#endif\\\\\\\",map_fragment:\\\\\\\"#ifdef USE_MAP\\\\n\\\\tvec4 texelColor = texture2D( map, vUv );\\\\n\\\\ttexelColor = mapTexelToLinear( texelColor );\\\\n\\\\tdiffuseColor *= texelColor;\\\\n#endif\\\\\\\",map_pars_fragment:\\\\\\\"#ifdef USE_MAP\\\\n\\\\tuniform sampler2D map;\\\\n#endif\\\\\\\",map_particle_fragment:\\\\\\\"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\\\n\\\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\\\n#endif\\\\n#ifdef USE_MAP\\\\n\\\\tvec4 mapTexel = texture2D( map, uv );\\\\n\\\\tdiffuseColor *= mapTexelToLinear( mapTexel );\\\\n#endif\\\\n#ifdef USE_ALPHAMAP\\\\n\\\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\\\n#endif\\\\\\\",map_particle_pars_fragment:\\\\\\\"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\\\n\\\\tuniform mat3 uvTransform;\\\\n#endif\\\\n#ifdef USE_MAP\\\\n\\\\tuniform sampler2D map;\\\\n#endif\\\\n#ifdef USE_ALPHAMAP\\\\n\\\\tuniform sampler2D alphaMap;\\\\n#endif\\\\\\\",metalnessmap_fragment:\\\\\\\"float metalnessFactor = metalness;\\\\n#ifdef USE_METALNESSMAP\\\\n\\\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\\\n\\\\tmetalnessFactor *= texelMetalness.b;\\\\n#endif\\\\\\\",metalnessmap_pars_fragment:\\\\\\\"#ifdef USE_METALNESSMAP\\\\n\\\\tuniform sampler2D metalnessMap;\\\\n#endif\\\\\\\",morphnormal_vertex:\\\\\\\"#ifdef USE_MORPHNORMALS\\\\n\\\\tobjectNormal *= morphTargetBaseInfluence;\\\\n\\\\t#ifdef MORPHTARGETS_TEXTURE\\\\n\\\\t\\\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\\\n\\\\t\\\\t\\\\tif ( morphTargetInfluences[ i ] > 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1, 2 ) * morphTargetInfluences[ i ];\\\\n\\\\t\\\\t}\\\\n\\\\t#else\\\\n\\\\t\\\\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\\\\n\\\\t\\\\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\\\\n\\\\t\\\\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\\\\n\\\\t\\\\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\\\\n\\\\t#endif\\\\n#endif\\\\\\\",morphtarget_pars_vertex:\\\\\\\"#ifdef USE_MORPHTARGETS\\\\n\\\\tuniform float morphTargetBaseInfluence;\\\\n\\\\t#ifdef MORPHTARGETS_TEXTURE\\\\n\\\\t\\\\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\\\\n\\\\t\\\\tuniform sampler2DArray morphTargetsTexture;\\\\n\\\\t\\\\tuniform vec2 morphTargetsTextureSize;\\\\n\\\\t\\\\tvec3 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset, const in int stride ) {\\\\n\\\\t\\\\t\\\\tfloat texelIndex = float( vertexIndex * stride + offset );\\\\n\\\\t\\\\t\\\\tfloat y = floor( texelIndex / morphTargetsTextureSize.x );\\\\n\\\\t\\\\t\\\\tfloat x = texelIndex - y * morphTargetsTextureSize.x;\\\\n\\\\t\\\\t\\\\tvec3 morphUV = vec3( ( x + 0.5 ) / morphTargetsTextureSize.x, y / morphTargetsTextureSize.y, morphTargetIndex );\\\\n\\\\t\\\\t\\\\treturn texture( morphTargetsTexture, morphUV ).xyz;\\\\n\\\\t\\\\t}\\\\n\\\\t#else\\\\n\\\\t\\\\t#ifndef USE_MORPHNORMALS\\\\n\\\\t\\\\t\\\\tuniform float morphTargetInfluences[ 8 ];\\\\n\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\tuniform float morphTargetInfluences[ 4 ];\\\\n\\\\t\\\\t#endif\\\\n\\\\t#endif\\\\n#endif\\\\\\\",morphtarget_vertex:\\\\\\\"#ifdef USE_MORPHTARGETS\\\\n\\\\ttransformed *= morphTargetBaseInfluence;\\\\n\\\\t#ifdef MORPHTARGETS_TEXTURE\\\\n\\\\t\\\\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\\\\n\\\\t\\\\t\\\\t#ifndef USE_MORPHNORMALS\\\\n\\\\t\\\\t\\\\t\\\\tif ( morphTargetInfluences[ i ] > 0.0 ) transformed += getMorph( gl_VertexID, i, 0, 1 ) * morphTargetInfluences[ i ];\\\\n\\\\t\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\tif ( morphTargetInfluences[ i ] > 0.0 ) transformed += getMorph( gl_VertexID, i, 0, 2 ) * morphTargetInfluences[ i ];\\\\n\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t}\\\\n\\\\t#else\\\\n\\\\t\\\\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\\\\n\\\\t\\\\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\\\\n\\\\t\\\\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\\\\n\\\\t\\\\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\\\\n\\\\t\\\\t#ifndef USE_MORPHNORMALS\\\\n\\\\t\\\\t\\\\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\\\\n\\\\t\\\\t\\\\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\\\\n\\\\t\\\\t\\\\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\\\\n\\\\t\\\\t\\\\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\\\\n\\\\t\\\\t#endif\\\\n\\\\t#endif\\\\n#endif\\\\\\\",normal_fragment_begin:\\\\\\\"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\\\\n#ifdef FLAT_SHADED\\\\n\\\\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\\\\n\\\\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\\\\n\\\\tvec3 normal = normalize( cross( fdx, fdy ) );\\\\n#else\\\\n\\\\tvec3 normal = normalize( vNormal );\\\\n\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\t\\\\tnormal = normal * faceDirection;\\\\n\\\\t#endif\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\t\\\\tvec3 tangent = normalize( vTangent );\\\\n\\\\t\\\\tvec3 bitangent = normalize( vBitangent );\\\\n\\\\t\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\t\\\\t\\\\ttangent = tangent * faceDirection;\\\\n\\\\t\\\\t\\\\tbitangent = bitangent * faceDirection;\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\\\\n\\\\t\\\\t\\\\tmat3 vTBN = mat3( tangent, bitangent, normal );\\\\n\\\\t\\\\t#endif\\\\n\\\\t#endif\\\\n#endif\\\\nvec3 geometryNormal = normal;\\\\\\\",normal_fragment_maps:\\\\\\\"#ifdef OBJECTSPACE_NORMALMAP\\\\n\\\\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\\\n\\\\t#ifdef FLIP_SIDED\\\\n\\\\t\\\\tnormal = - normal;\\\\n\\\\t#endif\\\\n\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\t\\\\tnormal = normal * faceDirection;\\\\n\\\\t#endif\\\\n\\\\tnormal = normalize( normalMatrix * normal );\\\\n#elif defined( TANGENTSPACE_NORMALMAP )\\\\n\\\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\\\n\\\\tmapN.xy *= normalScale;\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\t\\\\tnormal = normalize( vTBN * mapN );\\\\n\\\\t#else\\\\n\\\\t\\\\tnormal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection );\\\\n\\\\t#endif\\\\n#elif defined( USE_BUMPMAP )\\\\n\\\\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\\\\n#endif\\\\\\\",normal_pars_fragment:\\\\\\\"#ifndef FLAT_SHADED\\\\n\\\\tvarying vec3 vNormal;\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\t\\\\tvarying vec3 vTangent;\\\\n\\\\t\\\\tvarying vec3 vBitangent;\\\\n\\\\t#endif\\\\n#endif\\\\\\\",normal_pars_vertex:\\\\\\\"#ifndef FLAT_SHADED\\\\n\\\\tvarying vec3 vNormal;\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\t\\\\tvarying vec3 vTangent;\\\\n\\\\t\\\\tvarying vec3 vBitangent;\\\\n\\\\t#endif\\\\n#endif\\\\\\\",normal_vertex:\\\\\\\"#ifndef FLAT_SHADED\\\\n\\\\tvNormal = normalize( transformedNormal );\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\t\\\\tvTangent = normalize( transformedTangent );\\\\n\\\\t\\\\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\\\\n\\\\t#endif\\\\n#endif\\\\\\\",normalmap_pars_fragment:\\\\\\\"#ifdef USE_NORMALMAP\\\\n\\\\tuniform sampler2D normalMap;\\\\n\\\\tuniform vec2 normalScale;\\\\n#endif\\\\n#ifdef OBJECTSPACE_NORMALMAP\\\\n\\\\tuniform mat3 normalMatrix;\\\\n#endif\\\\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\\\\n\\\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\\\\n\\\\t\\\\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\\\\n\\\\t\\\\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\\\\n\\\\t\\\\tvec2 st0 = dFdx( vUv.st );\\\\n\\\\t\\\\tvec2 st1 = dFdy( vUv.st );\\\\n\\\\t\\\\tvec3 N = surf_norm;\\\\n\\\\t\\\\tvec3 q1perp = cross( q1, N );\\\\n\\\\t\\\\tvec3 q0perp = cross( N, q0 );\\\\n\\\\t\\\\tvec3 T = q1perp * st0.x + q0perp * st1.x;\\\\n\\\\t\\\\tvec3 B = q1perp * st0.y + q0perp * st1.y;\\\\n\\\\t\\\\tfloat det = max( dot( T, T ), dot( B, B ) );\\\\n\\\\t\\\\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\\\\n\\\\t\\\\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\\\\n\\\\t}\\\\n#endif\\\\\\\",clearcoat_normal_fragment_begin:\\\\\\\"#ifdef USE_CLEARCOAT\\\\n\\\\tvec3 clearcoatNormal = geometryNormal;\\\\n#endif\\\\\\\",clearcoat_normal_fragment_maps:\\\\\\\"#ifdef USE_CLEARCOAT_NORMALMAP\\\\n\\\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\\\\n\\\\tclearcoatMapN.xy *= clearcoatNormalScale;\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\t\\\\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\\\\n\\\\t#else\\\\n\\\\t\\\\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\\\\n\\\\t#endif\\\\n#endif\\\\\\\",clearcoat_pars_fragment:\\\\\\\"#ifdef USE_CLEARCOATMAP\\\\n\\\\tuniform sampler2D clearcoatMap;\\\\n#endif\\\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\\\n\\\\tuniform sampler2D clearcoatRoughnessMap;\\\\n#endif\\\\n#ifdef USE_CLEARCOAT_NORMALMAP\\\\n\\\\tuniform sampler2D clearcoatNormalMap;\\\\n\\\\tuniform vec2 clearcoatNormalScale;\\\\n#endif\\\\\\\",output_fragment:\\\\\\\"#ifdef OPAQUE\\\\ndiffuseColor.a = 1.0;\\\\n#endif\\\\n#ifdef USE_TRANSMISSION\\\\ndiffuseColor.a *= transmissionAlpha + 0.1;\\\\n#endif\\\\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );\\\\\\\",packing:\\\\\\\"vec3 packNormalToRGB( const in vec3 normal ) {\\\\n\\\\treturn normalize( normal ) * 0.5 + 0.5;\\\\n}\\\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\\\n\\\\treturn 2.0 * rgb.xyz - 1.0;\\\\n}\\\\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\\\\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\\\\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\\\\nconst float ShiftRight8 = 1. / 256.;\\\\nvec4 packDepthToRGBA( const in float v ) {\\\\n\\\\tvec4 r = vec4( fract( v * PackFactors ), v );\\\\n\\\\tr.yzw -= r.xyz * ShiftRight8;\\\\treturn r * PackUpscale;\\\\n}\\\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\\\n\\\\treturn dot( v, UnpackFactors );\\\\n}\\\\nvec4 pack2HalfToRGBA( vec2 v ) {\\\\n\\\\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\\\\n\\\\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\\\\n}\\\\nvec2 unpackRGBATo2Half( vec4 v ) {\\\\n\\\\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\\\\n}\\\\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\\\n\\\\treturn ( viewZ + near ) / ( near - far );\\\\n}\\\\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\\\\n\\\\treturn linearClipZ * ( near - far ) - near;\\\\n}\\\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\\\n\\\\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\\\\n}\\\\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\\\\n\\\\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\\\\n}\\\\\\\",premultiplied_alpha_fragment:\\\\\\\"#ifdef PREMULTIPLIED_ALPHA\\\\n\\\\tgl_FragColor.rgb *= gl_FragColor.a;\\\\n#endif\\\\\\\",project_vertex:\\\\\\\"vec4 mvPosition = vec4( transformed, 1.0 );\\\\n#ifdef USE_INSTANCING\\\\n\\\\tmvPosition = instanceMatrix * mvPosition;\\\\n#endif\\\\nmvPosition = modelViewMatrix * mvPosition;\\\\ngl_Position = projectionMatrix * mvPosition;\\\\\\\",dithering_fragment:\\\\\\\"#ifdef DITHERING\\\\n\\\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\\\n#endif\\\\\\\",dithering_pars_fragment:\\\\\\\"#ifdef DITHERING\\\\n\\\\tvec3 dithering( vec3 color ) {\\\\n\\\\t\\\\tfloat grid_position = rand( gl_FragCoord.xy );\\\\n\\\\t\\\\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\\\\n\\\\t\\\\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\\\\n\\\\t\\\\treturn color + dither_shift_RGB;\\\\n\\\\t}\\\\n#endif\\\\\\\",roughnessmap_fragment:\\\\\\\"float roughnessFactor = roughness;\\\\n#ifdef USE_ROUGHNESSMAP\\\\n\\\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\\\n\\\\troughnessFactor *= texelRoughness.g;\\\\n#endif\\\\\\\",roughnessmap_pars_fragment:\\\\\\\"#ifdef USE_ROUGHNESSMAP\\\\n\\\\tuniform sampler2D roughnessMap;\\\\n#endif\\\\\\\",shadowmap_pars_fragment:\\\\\\\"#ifdef USE_SHADOWMAP\\\\n\\\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\\\n\\\\t\\\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tstruct DirectionalLightShadow {\\\\n\\\\t\\\\t\\\\tfloat shadowBias;\\\\n\\\\t\\\\t\\\\tfloat shadowNormalBias;\\\\n\\\\t\\\\t\\\\tfloat shadowRadius;\\\\n\\\\t\\\\t\\\\tvec2 shadowMapSize;\\\\n\\\\t\\\\t};\\\\n\\\\t\\\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\\\n\\\\t#endif\\\\n\\\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\\\n\\\\t\\\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tstruct SpotLightShadow {\\\\n\\\\t\\\\t\\\\tfloat shadowBias;\\\\n\\\\t\\\\t\\\\tfloat shadowNormalBias;\\\\n\\\\t\\\\t\\\\tfloat shadowRadius;\\\\n\\\\t\\\\t\\\\tvec2 shadowMapSize;\\\\n\\\\t\\\\t};\\\\n\\\\t\\\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\\\n\\\\t#endif\\\\n\\\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\\\n\\\\t\\\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tstruct PointLightShadow {\\\\n\\\\t\\\\t\\\\tfloat shadowBias;\\\\n\\\\t\\\\t\\\\tfloat shadowNormalBias;\\\\n\\\\t\\\\t\\\\tfloat shadowRadius;\\\\n\\\\t\\\\t\\\\tvec2 shadowMapSize;\\\\n\\\\t\\\\t\\\\tfloat shadowCameraNear;\\\\n\\\\t\\\\t\\\\tfloat shadowCameraFar;\\\\n\\\\t\\\\t};\\\\n\\\\t\\\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\\\n\\\\t#endif\\\\n\\\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\\\n\\\\t\\\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\\\n\\\\t}\\\\n\\\\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\\\\n\\\\t\\\\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\\\\n\\\\t}\\\\n\\\\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\\\\n\\\\t\\\\tfloat occlusion = 1.0;\\\\n\\\\t\\\\tvec2 distribution = texture2DDistribution( shadow, uv );\\\\n\\\\t\\\\tfloat hard_shadow = step( compare , distribution.x );\\\\n\\\\t\\\\tif (hard_shadow != 1.0 ) {\\\\n\\\\t\\\\t\\\\tfloat distance = compare - distribution.x ;\\\\n\\\\t\\\\t\\\\tfloat variance = max( 0.00000, distribution.y * distribution.y );\\\\n\\\\t\\\\t\\\\tfloat softness_probability = variance / (variance + distance * distance );\\\\t\\\\t\\\\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\\\\t\\\\t\\\\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn occlusion;\\\\n\\\\t}\\\\n\\\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\\\n\\\\t\\\\tfloat shadow = 1.0;\\\\n\\\\t\\\\tshadowCoord.xyz /= shadowCoord.w;\\\\n\\\\t\\\\tshadowCoord.z += shadowBias;\\\\n\\\\t\\\\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\\\\n\\\\t\\\\tbool inFrustum = all( inFrustumVec );\\\\n\\\\t\\\\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\\\\n\\\\t\\\\tbool frustumTest = all( frustumTestVec );\\\\n\\\\t\\\\tif ( frustumTest ) {\\\\n\\\\t\\\\t#if defined( SHADOWMAP_TYPE_PCF )\\\\n\\\\t\\\\t\\\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\\\n\\\\t\\\\t\\\\tfloat dx0 = - texelSize.x * shadowRadius;\\\\n\\\\t\\\\t\\\\tfloat dy0 = - texelSize.y * shadowRadius;\\\\n\\\\t\\\\t\\\\tfloat dx1 = + texelSize.x * shadowRadius;\\\\n\\\\t\\\\t\\\\tfloat dy1 = + texelSize.y * shadowRadius;\\\\n\\\\t\\\\t\\\\tfloat dx2 = dx0 / 2.0;\\\\n\\\\t\\\\t\\\\tfloat dy2 = dy0 / 2.0;\\\\n\\\\t\\\\t\\\\tfloat dx3 = dx1 / 2.0;\\\\n\\\\t\\\\t\\\\tfloat dy3 = dy1 / 2.0;\\\\n\\\\t\\\\t\\\\tshadow = (\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\\\n\\\\t\\\\t\\\\t) * ( 1.0 / 17.0 );\\\\n\\\\t\\\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\\\n\\\\t\\\\t\\\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\\\n\\\\t\\\\t\\\\tfloat dx = texelSize.x;\\\\n\\\\t\\\\t\\\\tfloat dy = texelSize.y;\\\\n\\\\t\\\\t\\\\tvec2 uv = shadowCoord.xy;\\\\n\\\\t\\\\t\\\\tvec2 f = fract( uv * shadowMapSize + 0.5 );\\\\n\\\\t\\\\t\\\\tuv -= f * texelSize;\\\\n\\\\t\\\\t\\\\tshadow = (\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\\\\n\\\\t\\\\t\\\\t\\\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \\\\n\\\\t\\\\t\\\\t\\\\t\\\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t f.x ) +\\\\n\\\\t\\\\t\\\\t\\\\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \\\\n\\\\t\\\\t\\\\t\\\\t\\\\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t f.x ) +\\\\n\\\\t\\\\t\\\\t\\\\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \\\\n\\\\t\\\\t\\\\t\\\\t\\\\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t f.y ) +\\\\n\\\\t\\\\t\\\\t\\\\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \\\\n\\\\t\\\\t\\\\t\\\\t\\\\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t f.y ) +\\\\n\\\\t\\\\t\\\\t\\\\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t  texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t  f.x ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t  texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t  f.x ),\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t f.y )\\\\n\\\\t\\\\t\\\\t) * ( 1.0 / 9.0 );\\\\n\\\\t\\\\t#elif defined( SHADOWMAP_TYPE_VSM )\\\\n\\\\t\\\\t\\\\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\\\\n\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn shadow;\\\\n\\\\t}\\\\n\\\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\\\n\\\\t\\\\tvec3 absV = abs( v );\\\\n\\\\t\\\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\\\n\\\\t\\\\tabsV *= scaleToCube;\\\\n\\\\t\\\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\\\n\\\\t\\\\tvec2 planar = v.xy;\\\\n\\\\t\\\\tfloat almostATexel = 1.5 * texelSizeY;\\\\n\\\\t\\\\tfloat almostOne = 1.0 - almostATexel;\\\\n\\\\t\\\\tif ( absV.z >= almostOne ) {\\\\n\\\\t\\\\t\\\\tif ( v.z > 0.0 )\\\\n\\\\t\\\\t\\\\t\\\\tplanar.x = 4.0 - v.x;\\\\n\\\\t\\\\t} else if ( absV.x >= almostOne ) {\\\\n\\\\t\\\\t\\\\tfloat signX = sign( v.x );\\\\n\\\\t\\\\t\\\\tplanar.x = v.z * signX + 2.0 * signX;\\\\n\\\\t\\\\t} else if ( absV.y >= almostOne ) {\\\\n\\\\t\\\\t\\\\tfloat signY = sign( v.y );\\\\n\\\\t\\\\t\\\\tplanar.x = v.x + 2.0 * signY + 2.0;\\\\n\\\\t\\\\t\\\\tplanar.y = v.z * signY - 2.0;\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\\\n\\\\t}\\\\n\\\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\\\n\\\\t\\\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\\\n\\\\t\\\\tvec3 lightToPosition = shadowCoord.xyz;\\\\n\\\\t\\\\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\\\t\\\\tdp += shadowBias;\\\\n\\\\t\\\\tvec3 bd3D = normalize( lightToPosition );\\\\n\\\\t\\\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\\\\n\\\\t\\\\t\\\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\\\n\\\\t\\\\t\\\\treturn (\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\\\n\\\\t\\\\t\\\\t\\\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\\\n\\\\t\\\\t\\\\t) * ( 1.0 / 9.0 );\\\\n\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\\\n\\\\t\\\\t#endif\\\\n\\\\t}\\\\n#endif\\\\\\\",shadowmap_pars_vertex:\\\\\\\"#ifdef USE_SHADOWMAP\\\\n\\\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\\\n\\\\t\\\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tstruct DirectionalLightShadow {\\\\n\\\\t\\\\t\\\\tfloat shadowBias;\\\\n\\\\t\\\\t\\\\tfloat shadowNormalBias;\\\\n\\\\t\\\\t\\\\tfloat shadowRadius;\\\\n\\\\t\\\\t\\\\tvec2 shadowMapSize;\\\\n\\\\t\\\\t};\\\\n\\\\t\\\\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\\\\n\\\\t#endif\\\\n\\\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\\\n\\\\t\\\\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tstruct SpotLightShadow {\\\\n\\\\t\\\\t\\\\tfloat shadowBias;\\\\n\\\\t\\\\t\\\\tfloat shadowNormalBias;\\\\n\\\\t\\\\t\\\\tfloat shadowRadius;\\\\n\\\\t\\\\t\\\\tvec2 shadowMapSize;\\\\n\\\\t\\\\t};\\\\n\\\\t\\\\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\\\\n\\\\t#endif\\\\n\\\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\\\n\\\\t\\\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\\\\n\\\\t\\\\tstruct PointLightShadow {\\\\n\\\\t\\\\t\\\\tfloat shadowBias;\\\\n\\\\t\\\\t\\\\tfloat shadowNormalBias;\\\\n\\\\t\\\\t\\\\tfloat shadowRadius;\\\\n\\\\t\\\\t\\\\tvec2 shadowMapSize;\\\\n\\\\t\\\\t\\\\tfloat shadowCameraNear;\\\\n\\\\t\\\\t\\\\tfloat shadowCameraFar;\\\\n\\\\t\\\\t};\\\\n\\\\t\\\\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\\\\n\\\\t#endif\\\\n#endif\\\\\\\",shadowmap_vertex:\\\\\\\"#ifdef USE_SHADOWMAP\\\\n\\\\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\\\\n\\\\t\\\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\\\n\\\\t\\\\tvec4 shadowWorldPosition;\\\\n\\\\t#endif\\\\n\\\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\\\n\\\\t\\\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\\\n\\\\t\\\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\t#endif\\\\n\\\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\\\n\\\\t\\\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\\\\n\\\\t\\\\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\t#endif\\\\n\\\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\\\n\\\\t\\\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\\\n\\\\t\\\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\t#endif\\\\n#endif\\\\\\\",shadowmask_pars_fragment:\\\\\\\"float getShadowMask() {\\\\n\\\\tfloat shadow = 1.0;\\\\n\\\\t#ifdef USE_SHADOWMAP\\\\n\\\\t#if NUM_DIR_LIGHT_SHADOWS > 0\\\\n\\\\tDirectionalLightShadow directionalLight;\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\\\n\\\\t\\\\tdirectionalLight = directionalLightShadows[ i ];\\\\n\\\\t\\\\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\t#endif\\\\n\\\\t#if NUM_SPOT_LIGHT_SHADOWS > 0\\\\n\\\\tSpotLightShadow spotLight;\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\\\n\\\\t\\\\tspotLight = spotLightShadows[ i ];\\\\n\\\\t\\\\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\t#endif\\\\n\\\\t#if NUM_POINT_LIGHT_SHADOWS > 0\\\\n\\\\tPointLightShadow pointLight;\\\\n\\\\t#pragma unroll_loop_start\\\\n\\\\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\\\n\\\\t\\\\tpointLight = pointLightShadows[ i ];\\\\n\\\\t\\\\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\\\n\\\\t}\\\\n\\\\t#pragma unroll_loop_end\\\\n\\\\t#endif\\\\n\\\\t#endif\\\\n\\\\treturn shadow;\\\\n}\\\\\\\",skinbase_vertex:\\\\\\\"#ifdef USE_SKINNING\\\\n\\\\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\\\n\\\\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\\\n\\\\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\\\n\\\\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\\\n#endif\\\\\\\",skinning_pars_vertex:\\\\\\\"#ifdef USE_SKINNING\\\\n\\\\tuniform mat4 bindMatrix;\\\\n\\\\tuniform mat4 bindMatrixInverse;\\\\n\\\\t#ifdef BONE_TEXTURE\\\\n\\\\t\\\\tuniform highp sampler2D boneTexture;\\\\n\\\\t\\\\tuniform int boneTextureSize;\\\\n\\\\t\\\\tmat4 getBoneMatrix( const in float i ) {\\\\n\\\\t\\\\t\\\\tfloat j = i * 4.0;\\\\n\\\\t\\\\t\\\\tfloat x = mod( j, float( boneTextureSize ) );\\\\n\\\\t\\\\t\\\\tfloat y = floor( j / float( boneTextureSize ) );\\\\n\\\\t\\\\t\\\\tfloat dx = 1.0 / float( boneTextureSize );\\\\n\\\\t\\\\t\\\\tfloat dy = 1.0 / float( boneTextureSize );\\\\n\\\\t\\\\t\\\\ty = dy * ( y + 0.5 );\\\\n\\\\t\\\\t\\\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\\\n\\\\t\\\\t\\\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\\\n\\\\t\\\\t\\\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\\\n\\\\t\\\\t\\\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\\\n\\\\t\\\\t\\\\tmat4 bone = mat4( v1, v2, v3, v4 );\\\\n\\\\t\\\\t\\\\treturn bone;\\\\n\\\\t\\\\t}\\\\n\\\\t#else\\\\n\\\\t\\\\tuniform mat4 boneMatrices[ MAX_BONES ];\\\\n\\\\t\\\\tmat4 getBoneMatrix( const in float i ) {\\\\n\\\\t\\\\t\\\\tmat4 bone = boneMatrices[ int(i) ];\\\\n\\\\t\\\\t\\\\treturn bone;\\\\n\\\\t\\\\t}\\\\n\\\\t#endif\\\\n#endif\\\\\\\",skinning_vertex:\\\\\\\"#ifdef USE_SKINNING\\\\n\\\\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\\\n\\\\tvec4 skinned = vec4( 0.0 );\\\\n\\\\tskinned += boneMatX * skinVertex * skinWeight.x;\\\\n\\\\tskinned += boneMatY * skinVertex * skinWeight.y;\\\\n\\\\tskinned += boneMatZ * skinVertex * skinWeight.z;\\\\n\\\\tskinned += boneMatW * skinVertex * skinWeight.w;\\\\n\\\\ttransformed = ( bindMatrixInverse * skinned ).xyz;\\\\n#endif\\\\\\\",skinnormal_vertex:\\\\\\\"#ifdef USE_SKINNING\\\\n\\\\tmat4 skinMatrix = mat4( 0.0 );\\\\n\\\\tskinMatrix += skinWeight.x * boneMatX;\\\\n\\\\tskinMatrix += skinWeight.y * boneMatY;\\\\n\\\\tskinMatrix += skinWeight.z * boneMatZ;\\\\n\\\\tskinMatrix += skinWeight.w * boneMatW;\\\\n\\\\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\\\\n\\\\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\\\n\\\\t#ifdef USE_TANGENT\\\\n\\\\t\\\\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\\\n\\\\t#endif\\\\n#endif\\\\\\\",specularmap_fragment:\\\\\\\"float specularStrength;\\\\n#ifdef USE_SPECULARMAP\\\\n\\\\tvec4 texelSpecular = texture2D( specularMap, vUv );\\\\n\\\\tspecularStrength = texelSpecular.r;\\\\n#else\\\\n\\\\tspecularStrength = 1.0;\\\\n#endif\\\\\\\",specularmap_pars_fragment:\\\\\\\"#ifdef USE_SPECULARMAP\\\\n\\\\tuniform sampler2D specularMap;\\\\n#endif\\\\\\\",tonemapping_fragment:\\\\\\\"#if defined( TONE_MAPPING )\\\\n\\\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\\\n#endif\\\\\\\",tonemapping_pars_fragment:\\\\\\\"#ifndef saturate\\\\n#define saturate( a ) clamp( a, 0.0, 1.0 )\\\\n#endif\\\\nuniform float toneMappingExposure;\\\\nvec3 LinearToneMapping( vec3 color ) {\\\\n\\\\treturn toneMappingExposure * color;\\\\n}\\\\nvec3 ReinhardToneMapping( vec3 color ) {\\\\n\\\\tcolor *= toneMappingExposure;\\\\n\\\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\\\n}\\\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\\\n\\\\tcolor *= toneMappingExposure;\\\\n\\\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\\\n\\\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\\\n}\\\\nvec3 RRTAndODTFit( vec3 v ) {\\\\n\\\\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\\\\n\\\\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\\\\n\\\\treturn a / b;\\\\n}\\\\nvec3 ACESFilmicToneMapping( vec3 color ) {\\\\n\\\\tconst mat3 ACESInputMat = mat3(\\\\n\\\\t\\\\tvec3( 0.59719, 0.07600, 0.02840 ),\\\\t\\\\tvec3( 0.35458, 0.90834, 0.13383 ),\\\\n\\\\t\\\\tvec3( 0.04823, 0.01566, 0.83777 )\\\\n\\\\t);\\\\n\\\\tconst mat3 ACESOutputMat = mat3(\\\\n\\\\t\\\\tvec3(  1.60475, -0.10208, -0.00327 ),\\\\t\\\\tvec3( -0.53108,  1.10813, -0.07276 ),\\\\n\\\\t\\\\tvec3( -0.07367, -0.00605,  1.07602 )\\\\n\\\\t);\\\\n\\\\tcolor *= toneMappingExposure / 0.6;\\\\n\\\\tcolor = ACESInputMat * color;\\\\n\\\\tcolor = RRTAndODTFit( color );\\\\n\\\\tcolor = ACESOutputMat * color;\\\\n\\\\treturn saturate( color );\\\\n}\\\\nvec3 CustomToneMapping( vec3 color ) { return color; }\\\\\\\",transmission_fragment:\\\\\\\"#ifdef USE_TRANSMISSION\\\\n\\\\tfloat transmissionAlpha = 1.0;\\\\n\\\\tfloat transmissionFactor = transmission;\\\\n\\\\tfloat thicknessFactor = thickness;\\\\n\\\\t#ifdef USE_TRANSMISSIONMAP\\\\n\\\\t\\\\ttransmissionFactor *= texture2D( transmissionMap, vUv ).r;\\\\n\\\\t#endif\\\\n\\\\t#ifdef USE_THICKNESSMAP\\\\n\\\\t\\\\tthicknessFactor *= texture2D( thicknessMap, vUv ).g;\\\\n\\\\t#endif\\\\n\\\\tvec3 pos = vWorldPosition;\\\\n\\\\tvec3 v = normalize( cameraPosition - pos );\\\\n\\\\tvec3 n = inverseTransformDirection( normal, viewMatrix );\\\\n\\\\tvec4 transmission = getIBLVolumeRefraction(\\\\n\\\\t\\\\tn, v, roughnessFactor, material.diffuseColor, material.specularColor, material.specularF90,\\\\n\\\\t\\\\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\\\\n\\\\t\\\\tattenuationTint, attenuationDistance );\\\\n\\\\ttotalDiffuse = mix( totalDiffuse, transmission.rgb, transmissionFactor );\\\\n\\\\ttransmissionAlpha = mix( transmissionAlpha, transmission.a, transmissionFactor );\\\\n#endif\\\\\\\",transmission_pars_fragment:\\\\\\\"#ifdef USE_TRANSMISSION\\\\n\\\\tuniform float transmission;\\\\n\\\\tuniform float thickness;\\\\n\\\\tuniform float attenuationDistance;\\\\n\\\\tuniform vec3 attenuationTint;\\\\n\\\\t#ifdef USE_TRANSMISSIONMAP\\\\n\\\\t\\\\tuniform sampler2D transmissionMap;\\\\n\\\\t#endif\\\\n\\\\t#ifdef USE_THICKNESSMAP\\\\n\\\\t\\\\tuniform sampler2D thicknessMap;\\\\n\\\\t#endif\\\\n\\\\tuniform vec2 transmissionSamplerSize;\\\\n\\\\tuniform sampler2D transmissionSamplerMap;\\\\n\\\\tuniform mat4 modelMatrix;\\\\n\\\\tuniform mat4 projectionMatrix;\\\\n\\\\tvarying vec3 vWorldPosition;\\\\n\\\\tvec3 getVolumeTransmissionRay( vec3 n, vec3 v, float thickness, float ior, mat4 modelMatrix ) {\\\\n\\\\t\\\\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\\\\n\\\\t\\\\tvec3 modelScale;\\\\n\\\\t\\\\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\\\\n\\\\t\\\\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\\\\n\\\\t\\\\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\\\\n\\\\t\\\\treturn normalize( refractionVector ) * thickness * modelScale;\\\\n\\\\t}\\\\n\\\\tfloat applyIorToRoughness( float roughness, float ior ) {\\\\n\\\\t\\\\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\\\\n\\\\t}\\\\n\\\\tvec4 getTransmissionSample( vec2 fragCoord, float roughness, float ior ) {\\\\n\\\\t\\\\tfloat framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\\\\n\\\\t\\\\t#ifdef TEXTURE_LOD_EXT\\\\n\\\\t\\\\t\\\\treturn texture2DLodEXT( transmissionSamplerMap, fragCoord.xy, framebufferLod );\\\\n\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\treturn texture2D( transmissionSamplerMap, fragCoord.xy, framebufferLod );\\\\n\\\\t\\\\t#endif\\\\n\\\\t}\\\\n\\\\tvec3 applyVolumeAttenuation( vec3 radiance, float transmissionDistance, vec3 attenuationColor, float attenuationDistance ) {\\\\n\\\\t\\\\tif ( attenuationDistance == 0.0 ) {\\\\n\\\\t\\\\t\\\\treturn radiance;\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\\\\n\\\\t\\\\t\\\\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\\\\t\\\\t\\\\treturn transmittance * radiance;\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\tvec4 getIBLVolumeRefraction( vec3 n, vec3 v, float roughness, vec3 diffuseColor, vec3 specularColor, float specularF90,\\\\n\\\\t\\\\tvec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness,\\\\n\\\\t\\\\tvec3 attenuationColor, float attenuationDistance ) {\\\\n\\\\t\\\\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\\\\n\\\\t\\\\tvec3 refractedRayExit = position + transmissionRay;\\\\n\\\\t\\\\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\\\\n\\\\t\\\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\\\n\\\\t\\\\trefractionCoords += 1.0;\\\\n\\\\t\\\\trefractionCoords /= 2.0;\\\\n\\\\t\\\\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\\\\n\\\\t\\\\tvec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\\\\n\\\\t\\\\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\\\\n\\\\t\\\\treturn vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\\\\n\\\\t}\\\\n#endif\\\\\\\",uv_pars_fragment:\\\\\\\"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\\\\n\\\\tvarying vec2 vUv;\\\\n#endif\\\\\\\",uv_pars_vertex:\\\\\\\"#ifdef USE_UV\\\\n\\\\t#ifdef UVS_VERTEX_ONLY\\\\n\\\\t\\\\tvec2 vUv;\\\\n\\\\t#else\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\t#endif\\\\n\\\\tuniform mat3 uvTransform;\\\\n#endif\\\\\\\",uv_vertex:\\\\\\\"#ifdef USE_UV\\\\n\\\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\\\n#endif\\\\\\\",uv2_pars_fragment:\\\\\\\"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\\\n\\\\tvarying vec2 vUv2;\\\\n#endif\\\\\\\",uv2_pars_vertex:\\\\\\\"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\\\n\\\\tattribute vec2 uv2;\\\\n\\\\tvarying vec2 vUv2;\\\\n\\\\tuniform mat3 uv2Transform;\\\\n#endif\\\\\\\",uv2_vertex:\\\\\\\"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\\\n\\\\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\\\\n#endif\\\\\\\",worldpos_vertex:\\\\\\\"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION )\\\\n\\\\tvec4 worldPosition = vec4( transformed, 1.0 );\\\\n\\\\t#ifdef USE_INSTANCING\\\\n\\\\t\\\\tworldPosition = instanceMatrix * worldPosition;\\\\n\\\\t#endif\\\\n\\\\tworldPosition = modelMatrix * worldPosition;\\\\n#endif\\\\\\\",background_vert:\\\\\\\"varying vec2 vUv;\\\\nuniform mat3 uvTransform;\\\\nvoid main() {\\\\n\\\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\\\n\\\\tgl_Position = vec4( position.xy, 1.0, 1.0 );\\\\n}\\\\\\\",background_frag:\\\\\\\"uniform sampler2D t2D;\\\\nvarying vec2 vUv;\\\\nvoid main() {\\\\n\\\\tvec4 texColor = texture2D( t2D, vUv );\\\\n\\\\tgl_FragColor = mapTexelToLinear( texColor );\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n}\\\\\\\",cube_vert:\\\\\\\"varying vec3 vWorldDirection;\\\\n#include <common>\\\\nvoid main() {\\\\n\\\\tvWorldDirection = transformDirection( position, modelMatrix );\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\tgl_Position.z = gl_Position.w;\\\\n}\\\\\\\",cube_frag:\\\\\\\"#include <envmap_common_pars_fragment>\\\\nuniform float opacity;\\\\nvarying vec3 vWorldDirection;\\\\n#include <cube_uv_reflection_fragment>\\\\nvoid main() {\\\\n\\\\tvec3 vReflect = vWorldDirection;\\\\n\\\\t#include <envmap_fragment>\\\\n\\\\tgl_FragColor = envColor;\\\\n\\\\tgl_FragColor.a *= opacity;\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n}\\\\\\\",depth_vert:\\\\\\\"#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\nvarying vec2 vHighPrecisionZW;\\\\nvoid main() {\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#ifdef USE_DISPLACEMENTMAP\\\\n\\\\t\\\\t#include <beginnormal_vertex>\\\\n\\\\t\\\\t#include <morphnormal_vertex>\\\\n\\\\t\\\\t#include <skinnormal_vertex>\\\\n\\\\t#endif\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\tvHighPrecisionZW = gl_Position.zw;\\\\n}\\\\\\\",depth_frag:\\\\\\\"#if DEPTH_PACKING == 3200\\\\n\\\\tuniform float opacity;\\\\n#endif\\\\n#include <common>\\\\n#include <packing>\\\\n#include <uv_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\nvarying vec2 vHighPrecisionZW;\\\\nvoid main() {\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\tvec4 diffuseColor = vec4( 1.0 );\\\\n\\\\t#if DEPTH_PACKING == 3200\\\\n\\\\t\\\\tdiffuseColor.a = opacity;\\\\n\\\\t#endif\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\\\\n\\\\t#if DEPTH_PACKING == 3200\\\\n\\\\t\\\\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\\\\n\\\\t#elif DEPTH_PACKING == 3201\\\\n\\\\t\\\\tgl_FragColor = packDepthToRGBA( fragCoordZ );\\\\n\\\\t#endif\\\\n}\\\\\\\",distanceRGBA_vert:\\\\\\\"#define DISTANCE\\\\nvarying vec3 vWorldPosition;\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\nvoid main() {\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#ifdef USE_DISPLACEMENTMAP\\\\n\\\\t\\\\t#include <beginnormal_vertex>\\\\n\\\\t\\\\t#include <morphnormal_vertex>\\\\n\\\\t\\\\t#include <skinnormal_vertex>\\\\n\\\\t#endif\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\tvWorldPosition = worldPosition.xyz;\\\\n}\\\\\\\",distanceRGBA_frag:\\\\\\\"#define DISTANCE\\\\nuniform vec3 referencePosition;\\\\nuniform float nearDistance;\\\\nuniform float farDistance;\\\\nvarying vec3 vWorldPosition;\\\\n#include <common>\\\\n#include <packing>\\\\n#include <uv_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\nvoid main () {\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\tvec4 diffuseColor = vec4( 1.0 );\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\tfloat dist = length( vWorldPosition - referencePosition );\\\\n\\\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\\\n\\\\tdist = saturate( dist );\\\\n\\\\tgl_FragColor = packDepthToRGBA( dist );\\\\n}\\\\\\\",equirect_vert:\\\\\\\"varying vec3 vWorldDirection;\\\\n#include <common>\\\\nvoid main() {\\\\n\\\\tvWorldDirection = transformDirection( position, modelMatrix );\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <project_vertex>\\\\n}\\\\\\\",equirect_frag:\\\\\\\"uniform sampler2D tEquirect;\\\\nvarying vec3 vWorldDirection;\\\\n#include <common>\\\\nvoid main() {\\\\n\\\\tvec3 direction = normalize( vWorldDirection );\\\\n\\\\tvec2 sampleUV = equirectUv( direction );\\\\n\\\\tvec4 texColor = texture2D( tEquirect, sampleUV );\\\\n\\\\tgl_FragColor = mapTexelToLinear( texColor );\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n}\\\\\\\",linedashed_vert:\\\\\\\"uniform float scale;\\\\nattribute float lineDistance;\\\\nvarying float vLineDistance;\\\\n#include <common>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\nvoid main() {\\\\n\\\\tvLineDistance = scale * lineDistance;\\\\n\\\\t#include <color_vertex>\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n}\\\\\\\",linedashed_frag:\\\\\\\"uniform vec3 diffuse;\\\\nuniform float opacity;\\\\nuniform float dashSize;\\\\nuniform float totalSize;\\\\nvarying float vLineDistance;\\\\n#include <common>\\\\n#include <color_pars_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\nvoid main() {\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\\\n\\\\t\\\\tdiscard;\\\\n\\\\t}\\\\n\\\\tvec3 outgoingLight = vec3( 0.0 );\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\toutgoingLight = diffuseColor.rgb;\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n}\\\\\\\",meshbasic_vert:\\\\\\\"#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <uv2_pars_vertex>\\\\n#include <envmap_pars_vertex>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\nvoid main() {\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <uv2_vertex>\\\\n\\\\t#include <color_vertex>\\\\n\\\\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\\\\n\\\\t\\\\t#include <beginnormal_vertex>\\\\n\\\\t\\\\t#include <morphnormal_vertex>\\\\n\\\\t\\\\t#include <skinbase_vertex>\\\\n\\\\t\\\\t#include <skinnormal_vertex>\\\\n\\\\t\\\\t#include <defaultnormal_vertex>\\\\n\\\\t#endif\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <envmap_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n}\\\\\\\",meshbasic_frag:\\\\\\\"uniform vec3 diffuse;\\\\nuniform float opacity;\\\\n#ifndef FLAT_SHADED\\\\n\\\\tvarying vec3 vNormal;\\\\n#endif\\\\n#include <common>\\\\n#include <dithering_pars_fragment>\\\\n#include <color_pars_fragment>\\\\n#include <uv_pars_fragment>\\\\n#include <uv2_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <aomap_pars_fragment>\\\\n#include <lightmap_pars_fragment>\\\\n#include <envmap_common_pars_fragment>\\\\n#include <envmap_pars_fragment>\\\\n#include <cube_uv_reflection_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <specularmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\nvoid main() {\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\t#include <specularmap_fragment>\\\\n\\\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\\\n\\\\t#ifdef USE_LIGHTMAP\\\\n\\\\t\\\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\\\n\\\\t\\\\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\\\n\\\\t#else\\\\n\\\\t\\\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\\\n\\\\t#endif\\\\n\\\\t#include <aomap_fragment>\\\\n\\\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\\\n\\\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\\\n\\\\t#include <envmap_fragment>\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\t#include <dithering_fragment>\\\\n}\\\\\\\",meshlambert_vert:\\\\\\\"#define LAMBERT\\\\nvarying vec3 vLightFront;\\\\nvarying vec3 vIndirectFront;\\\\n#ifdef DOUBLE_SIDED\\\\n\\\\tvarying vec3 vLightBack;\\\\n\\\\tvarying vec3 vIndirectBack;\\\\n#endif\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <uv2_pars_vertex>\\\\n#include <envmap_pars_vertex>\\\\n#include <bsdfs>\\\\n#include <lights_pars_begin>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <shadowmap_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\nvoid main() {\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <uv2_vertex>\\\\n\\\\t#include <color_vertex>\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <envmap_vertex>\\\\n\\\\t#include <lights_lambert_vertex>\\\\n\\\\t#include <shadowmap_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n}\\\\\\\",meshlambert_frag:\\\\\\\"uniform vec3 diffuse;\\\\nuniform vec3 emissive;\\\\nuniform float opacity;\\\\nvarying vec3 vLightFront;\\\\nvarying vec3 vIndirectFront;\\\\n#ifdef DOUBLE_SIDED\\\\n\\\\tvarying vec3 vLightBack;\\\\n\\\\tvarying vec3 vIndirectBack;\\\\n#endif\\\\n#include <common>\\\\n#include <packing>\\\\n#include <dithering_pars_fragment>\\\\n#include <color_pars_fragment>\\\\n#include <uv_pars_fragment>\\\\n#include <uv2_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <aomap_pars_fragment>\\\\n#include <lightmap_pars_fragment>\\\\n#include <emissivemap_pars_fragment>\\\\n#include <envmap_common_pars_fragment>\\\\n#include <envmap_pars_fragment>\\\\n#include <cube_uv_reflection_fragment>\\\\n#include <bsdfs>\\\\n#include <lights_pars_begin>\\\\n#include <fog_pars_fragment>\\\\n#include <shadowmap_pars_fragment>\\\\n#include <shadowmask_pars_fragment>\\\\n#include <specularmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\nvoid main() {\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\\\n\\\\tvec3 totalEmissiveRadiance = emissive;\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\t#include <specularmap_fragment>\\\\n\\\\t#include <emissivemap_fragment>\\\\n\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\t\\\\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\\\\n\\\\t#else\\\\n\\\\t\\\\treflectedLight.indirectDiffuse += vIndirectFront;\\\\n\\\\t#endif\\\\n\\\\t#include <lightmap_fragment>\\\\n\\\\treflectedLight.indirectDiffuse *= BRDF_Lambert( diffuseColor.rgb );\\\\n\\\\t#ifdef DOUBLE_SIDED\\\\n\\\\t\\\\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\\\\n\\\\t#else\\\\n\\\\t\\\\treflectedLight.directDiffuse = vLightFront;\\\\n\\\\t#endif\\\\n\\\\treflectedLight.directDiffuse *= BRDF_Lambert( diffuseColor.rgb ) * getShadowMask();\\\\n\\\\t#include <aomap_fragment>\\\\n\\\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\\\n\\\\t#include <envmap_fragment>\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\t#include <dithering_fragment>\\\\n}\\\\\\\",meshmatcap_vert:\\\\\\\"#define MATCAP\\\\nvarying vec3 vViewPosition;\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <color_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <normal_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\nvoid main() {\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <color_vertex>\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\t#include <normal_vertex>\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n\\\\tvViewPosition = - mvPosition.xyz;\\\\n}\\\\\\\",meshmatcap_frag:\\\\\\\"#define MATCAP\\\\nuniform vec3 diffuse;\\\\nuniform float opacity;\\\\nuniform sampler2D matcap;\\\\nvarying vec3 vViewPosition;\\\\n#include <common>\\\\n#include <dithering_pars_fragment>\\\\n#include <color_pars_fragment>\\\\n#include <uv_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <normal_pars_fragment>\\\\n#include <bumpmap_pars_fragment>\\\\n#include <normalmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\nvoid main() {\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\t#include <normal_fragment_begin>\\\\n\\\\t#include <normal_fragment_maps>\\\\n\\\\tvec3 viewDir = normalize( vViewPosition );\\\\n\\\\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\\\\n\\\\tvec3 y = cross( viewDir, x );\\\\n\\\\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\\\\n\\\\t#ifdef USE_MATCAP\\\\n\\\\t\\\\tvec4 matcapColor = texture2D( matcap, uv );\\\\n\\\\t\\\\tmatcapColor = matcapTexelToLinear( matcapColor );\\\\n\\\\t#else\\\\n\\\\t\\\\tvec4 matcapColor = vec4( 1.0 );\\\\n\\\\t#endif\\\\n\\\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\t#include <dithering_fragment>\\\\n}\\\\\\\",meshnormal_vert:\\\\\\\"#define NORMAL\\\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\\\n\\\\tvarying vec3 vViewPosition;\\\\n#endif\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <normal_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\nvoid main() {\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\t#include <normal_vertex>\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\\\n\\\\tvViewPosition = - mvPosition.xyz;\\\\n#endif\\\\n}\\\\\\\",meshnormal_frag:\\\\\\\"#define NORMAL\\\\nuniform float opacity;\\\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\\\n\\\\tvarying vec3 vViewPosition;\\\\n#endif\\\\n#include <packing>\\\\n#include <uv_pars_fragment>\\\\n#include <normal_pars_fragment>\\\\n#include <bumpmap_pars_fragment>\\\\n#include <normalmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\nvoid main() {\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <normal_fragment_begin>\\\\n\\\\t#include <normal_fragment_maps>\\\\n\\\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\\\n}\\\\\\\",meshphong_vert:\\\\\\\"#define PHONG\\\\nvarying vec3 vViewPosition;\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <uv2_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <envmap_pars_vertex>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <normal_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <shadowmap_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\nvoid main() {\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <uv2_vertex>\\\\n\\\\t#include <color_vertex>\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\t#include <normal_vertex>\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\tvViewPosition = - mvPosition.xyz;\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <envmap_vertex>\\\\n\\\\t#include <shadowmap_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n}\\\\\\\",meshphong_frag:\\\\\\\"#define PHONG\\\\nuniform vec3 diffuse;\\\\nuniform vec3 emissive;\\\\nuniform vec3 specular;\\\\nuniform float shininess;\\\\nuniform float opacity;\\\\n#include <common>\\\\n#include <packing>\\\\n#include <dithering_pars_fragment>\\\\n#include <color_pars_fragment>\\\\n#include <uv_pars_fragment>\\\\n#include <uv2_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <aomap_pars_fragment>\\\\n#include <lightmap_pars_fragment>\\\\n#include <emissivemap_pars_fragment>\\\\n#include <envmap_common_pars_fragment>\\\\n#include <envmap_pars_fragment>\\\\n#include <cube_uv_reflection_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <bsdfs>\\\\n#include <lights_pars_begin>\\\\n#include <normal_pars_fragment>\\\\n#include <lights_phong_pars_fragment>\\\\n#include <shadowmap_pars_fragment>\\\\n#include <bumpmap_pars_fragment>\\\\n#include <normalmap_pars_fragment>\\\\n#include <specularmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\nvoid main() {\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\\\n\\\\tvec3 totalEmissiveRadiance = emissive;\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\t#include <specularmap_fragment>\\\\n\\\\t#include <normal_fragment_begin>\\\\n\\\\t#include <normal_fragment_maps>\\\\n\\\\t#include <emissivemap_fragment>\\\\n\\\\t#include <lights_phong_fragment>\\\\n\\\\t#include <lights_fragment_begin>\\\\n\\\\t#include <lights_fragment_maps>\\\\n\\\\t#include <lights_fragment_end>\\\\n\\\\t#include <aomap_fragment>\\\\n\\\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\\\n\\\\t#include <envmap_fragment>\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\t#include <dithering_fragment>\\\\n}\\\\\\\",meshphysical_vert:\\\\\\\"#define STANDARD\\\\nvarying vec3 vViewPosition;\\\\n#ifdef USE_TRANSMISSION\\\\n\\\\tvarying vec3 vWorldPosition;\\\\n#endif\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <uv2_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <normal_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <shadowmap_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\nvoid main() {\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <uv2_vertex>\\\\n\\\\t#include <color_vertex>\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\t#include <normal_vertex>\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\tvViewPosition = - mvPosition.xyz;\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <shadowmap_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n#ifdef USE_TRANSMISSION\\\\n\\\\tvWorldPosition = worldPosition.xyz;\\\\n#endif\\\\n}\\\\\\\",meshphysical_frag:\\\\\\\"#define STANDARD\\\\n#ifdef PHYSICAL\\\\n\\\\t#define IOR\\\\n\\\\t#define SPECULAR\\\\n#endif\\\\nuniform vec3 diffuse;\\\\nuniform vec3 emissive;\\\\nuniform float roughness;\\\\nuniform float metalness;\\\\nuniform float opacity;\\\\n#ifdef IOR\\\\n\\\\tuniform float ior;\\\\n#endif\\\\n#ifdef SPECULAR\\\\n\\\\tuniform float specularIntensity;\\\\n\\\\tuniform vec3 specularTint;\\\\n\\\\t#ifdef USE_SPECULARINTENSITYMAP\\\\n\\\\t\\\\tuniform sampler2D specularIntensityMap;\\\\n\\\\t#endif\\\\n\\\\t#ifdef USE_SPECULARTINTMAP\\\\n\\\\t\\\\tuniform sampler2D specularTintMap;\\\\n\\\\t#endif\\\\n#endif\\\\n#ifdef USE_CLEARCOAT\\\\n\\\\tuniform float clearcoat;\\\\n\\\\tuniform float clearcoatRoughness;\\\\n#endif\\\\n#ifdef USE_SHEEN\\\\n\\\\tuniform vec3 sheenTint;\\\\n\\\\tuniform float sheenRoughness;\\\\n#endif\\\\nvarying vec3 vViewPosition;\\\\n#include <common>\\\\n#include <packing>\\\\n#include <dithering_pars_fragment>\\\\n#include <color_pars_fragment>\\\\n#include <uv_pars_fragment>\\\\n#include <uv2_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <aomap_pars_fragment>\\\\n#include <lightmap_pars_fragment>\\\\n#include <emissivemap_pars_fragment>\\\\n#include <bsdfs>\\\\n#include <cube_uv_reflection_fragment>\\\\n#include <envmap_common_pars_fragment>\\\\n#include <envmap_physical_pars_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <lights_pars_begin>\\\\n#include <normal_pars_fragment>\\\\n#include <lights_physical_pars_fragment>\\\\n#include <transmission_pars_fragment>\\\\n#include <shadowmap_pars_fragment>\\\\n#include <bumpmap_pars_fragment>\\\\n#include <normalmap_pars_fragment>\\\\n#include <clearcoat_pars_fragment>\\\\n#include <roughnessmap_pars_fragment>\\\\n#include <metalnessmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\nvoid main() {\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\\\n\\\\tvec3 totalEmissiveRadiance = emissive;\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\t#include <roughnessmap_fragment>\\\\n\\\\t#include <metalnessmap_fragment>\\\\n\\\\t#include <normal_fragment_begin>\\\\n\\\\t#include <normal_fragment_maps>\\\\n\\\\t#include <clearcoat_normal_fragment_begin>\\\\n\\\\t#include <clearcoat_normal_fragment_maps>\\\\n\\\\t#include <emissivemap_fragment>\\\\n\\\\t#include <lights_physical_fragment>\\\\n\\\\t#include <lights_fragment_begin>\\\\n\\\\t#include <lights_fragment_maps>\\\\n\\\\t#include <lights_fragment_end>\\\\n\\\\t#include <aomap_fragment>\\\\n\\\\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\\\\n\\\\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\\\\n\\\\t#include <transmission_fragment>\\\\n\\\\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\\\\n\\\\t#ifdef USE_CLEARCOAT\\\\n\\\\t\\\\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\\\\n\\\\t\\\\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\\\\n\\\\t\\\\toutgoingLight = outgoingLight * ( 1.0 - clearcoat * Fcc ) + clearcoatSpecular * clearcoat;\\\\n\\\\t#endif\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\t#include <dithering_fragment>\\\\n}\\\\\\\",meshtoon_vert:\\\\\\\"#define TOON\\\\nvarying vec3 vViewPosition;\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <uv2_pars_vertex>\\\\n#include <displacementmap_pars_vertex>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <normal_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <shadowmap_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\nvoid main() {\\\\n\\\\t#include <uv_vertex>\\\\n\\\\t#include <uv2_vertex>\\\\n\\\\t#include <color_vertex>\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\t#include <normal_vertex>\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <displacementmap_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\tvViewPosition = - mvPosition.xyz;\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <shadowmap_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n}\\\\\\\",meshtoon_frag:\\\\\\\"#define TOON\\\\nuniform vec3 diffuse;\\\\nuniform vec3 emissive;\\\\nuniform float opacity;\\\\n#include <common>\\\\n#include <packing>\\\\n#include <dithering_pars_fragment>\\\\n#include <color_pars_fragment>\\\\n#include <uv_pars_fragment>\\\\n#include <uv2_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <aomap_pars_fragment>\\\\n#include <lightmap_pars_fragment>\\\\n#include <emissivemap_pars_fragment>\\\\n#include <gradientmap_pars_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <bsdfs>\\\\n#include <lights_pars_begin>\\\\n#include <normal_pars_fragment>\\\\n#include <lights_toon_pars_fragment>\\\\n#include <shadowmap_pars_fragment>\\\\n#include <bumpmap_pars_fragment>\\\\n#include <normalmap_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\nvoid main() {\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\\\n\\\\tvec3 totalEmissiveRadiance = emissive;\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\t#include <normal_fragment_begin>\\\\n\\\\t#include <normal_fragment_maps>\\\\n\\\\t#include <emissivemap_fragment>\\\\n\\\\t#include <lights_toon_fragment>\\\\n\\\\t#include <lights_fragment_begin>\\\\n\\\\t#include <lights_fragment_maps>\\\\n\\\\t#include <lights_fragment_end>\\\\n\\\\t#include <aomap_fragment>\\\\n\\\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n\\\\t#include <dithering_fragment>\\\\n}\\\\\\\",points_vert:\\\\\\\"uniform float size;\\\\nuniform float scale;\\\\n#include <common>\\\\n#include <color_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\nvoid main() {\\\\n\\\\t#include <color_vertex>\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\tgl_PointSize = size;\\\\n\\\\t#ifdef USE_SIZEATTENUATION\\\\n\\\\t\\\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\\\n\\\\t\\\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\\\n\\\\t#endif\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n}\\\\\\\",points_frag:\\\\\\\"uniform vec3 diffuse;\\\\nuniform float opacity;\\\\n#include <common>\\\\n#include <color_pars_fragment>\\\\n#include <map_particle_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\nvoid main() {\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\tvec3 outgoingLight = vec3( 0.0 );\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_particle_fragment>\\\\n\\\\t#include <color_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\toutgoingLight = diffuseColor.rgb;\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n\\\\t#include <premultiplied_alpha_fragment>\\\\n}\\\\\\\",shadow_vert:\\\\\\\"#include <common>\\\\n#include <fog_pars_vertex>\\\\n#include <morphtarget_pars_vertex>\\\\n#include <skinning_pars_vertex>\\\\n#include <shadowmap_pars_vertex>\\\\nvoid main() {\\\\n\\\\t#include <beginnormal_vertex>\\\\n\\\\t#include <morphnormal_vertex>\\\\n\\\\t#include <skinbase_vertex>\\\\n\\\\t#include <skinnormal_vertex>\\\\n\\\\t#include <defaultnormal_vertex>\\\\n\\\\t#include <begin_vertex>\\\\n\\\\t#include <morphtarget_vertex>\\\\n\\\\t#include <skinning_vertex>\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <shadowmap_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n}\\\\\\\",shadow_frag:\\\\\\\"uniform vec3 color;\\\\nuniform float opacity;\\\\n#include <common>\\\\n#include <packing>\\\\n#include <fog_pars_fragment>\\\\n#include <bsdfs>\\\\n#include <lights_pars_begin>\\\\n#include <shadowmap_pars_fragment>\\\\n#include <shadowmask_pars_fragment>\\\\nvoid main() {\\\\n\\\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n}\\\\\\\",sprite_vert:\\\\\\\"uniform float rotation;\\\\nuniform vec2 center;\\\\n#include <common>\\\\n#include <uv_pars_vertex>\\\\n#include <fog_pars_vertex>\\\\n#include <logdepthbuf_pars_vertex>\\\\n#include <clipping_planes_pars_vertex>\\\\nvoid main() {\\\\n\\\\t#include <uv_vertex>\\\\n\\\\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\\\n\\\\tvec2 scale;\\\\n\\\\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\\\\n\\\\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\\\\n\\\\t#ifndef USE_SIZEATTENUATION\\\\n\\\\t\\\\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\\\\n\\\\t\\\\tif ( isPerspective ) scale *= - mvPosition.z;\\\\n\\\\t#endif\\\\n\\\\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\\\\n\\\\tvec2 rotatedPosition;\\\\n\\\\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\\\\n\\\\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\\\\n\\\\tmvPosition.xy += rotatedPosition;\\\\n\\\\tgl_Position = projectionMatrix * mvPosition;\\\\n\\\\t#include <logdepthbuf_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\t#include <fog_vertex>\\\\n}\\\\\\\",sprite_frag:\\\\\\\"uniform vec3 diffuse;\\\\nuniform float opacity;\\\\n#include <common>\\\\n#include <uv_pars_fragment>\\\\n#include <map_pars_fragment>\\\\n#include <alphamap_pars_fragment>\\\\n#include <alphatest_pars_fragment>\\\\n#include <fog_pars_fragment>\\\\n#include <logdepthbuf_pars_fragment>\\\\n#include <clipping_planes_pars_fragment>\\\\nvoid main() {\\\\n\\\\t#include <clipping_planes_fragment>\\\\n\\\\tvec3 outgoingLight = vec3( 0.0 );\\\\n\\\\tvec4 diffuseColor = vec4( diffuse, opacity );\\\\n\\\\t#include <logdepthbuf_fragment>\\\\n\\\\t#include <map_fragment>\\\\n\\\\t#include <alphamap_fragment>\\\\n\\\\t#include <alphatest_fragment>\\\\n\\\\toutgoingLight = diffuseColor.rgb;\\\\n\\\\t#include <output_fragment>\\\\n\\\\t#include <tonemapping_fragment>\\\\n\\\\t#include <encodings_fragment>\\\\n\\\\t#include <fog_fragment>\\\\n}\\\\\\\"},tT={common:{diffuse:{value:new Zb(16777215)},opacity:{value:1},map:{value:null},uvTransform:{value:new gx},uv2Transform:{value:new gx},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},maxMipLevel:{value:0}},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 fx(1,1)}},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 Zb(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:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{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 Zb(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new gx}},sprite:{diffuse:{value:new Zb(16777215)},opacity:{value:1},center:{value:new fx(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new gx}}},eT={basic:{uniforms:Iw([tT.common,tT.specularmap,tT.envmap,tT.aomap,tT.lightmap,tT.fog]),vertexShader:Kw.meshbasic_vert,fragmentShader:Kw.meshbasic_frag},lambert:{uniforms:Iw([tT.common,tT.specularmap,tT.envmap,tT.aomap,tT.lightmap,tT.emissivemap,tT.fog,tT.lights,{emissive:{value:new Zb(0)}}]),vertexShader:Kw.meshlambert_vert,fragmentShader:Kw.meshlambert_frag},phong:{uniforms:Iw([tT.common,tT.specularmap,tT.envmap,tT.aomap,tT.lightmap,tT.emissivemap,tT.bumpmap,tT.normalmap,tT.displacementmap,tT.fog,tT.lights,{emissive:{value:new Zb(0)},specular:{value:new Zb(1118481)},shininess:{value:30}}]),vertexShader:Kw.meshphong_vert,fragmentShader:Kw.meshphong_frag},standard:{uniforms:Iw([tT.common,tT.envmap,tT.aomap,tT.lightmap,tT.emissivemap,tT.bumpmap,tT.normalmap,tT.displacementmap,tT.roughnessmap,tT.metalnessmap,tT.fog,tT.lights,{emissive:{value:new Zb(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Kw.meshphysical_vert,fragmentShader:Kw.meshphysical_frag},toon:{uniforms:Iw([tT.common,tT.aomap,tT.lightmap,tT.emissivemap,tT.bumpmap,tT.normalmap,tT.displacementmap,tT.gradientmap,tT.fog,tT.lights,{emissive:{value:new Zb(0)}}]),vertexShader:Kw.meshtoon_vert,fragmentShader:Kw.meshtoon_frag},matcap:{uniforms:Iw([tT.common,tT.bumpmap,tT.normalmap,tT.displacementmap,tT.fog,{matcap:{value:null}}]),vertexShader:Kw.meshmatcap_vert,fragmentShader:Kw.meshmatcap_frag},points:{uniforms:Iw([tT.points,tT.fog]),vertexShader:Kw.points_vert,fragmentShader:Kw.points_frag},dashed:{uniforms:Iw([tT.common,tT.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Kw.linedashed_vert,fragmentShader:Kw.linedashed_frag},depth:{uniforms:Iw([tT.common,tT.displacementmap]),vertexShader:Kw.depth_vert,fragmentShader:Kw.depth_frag},normal:{uniforms:Iw([tT.common,tT.bumpmap,tT.normalmap,tT.displacementmap,{opacity:{value:1}}]),vertexShader:Kw.meshnormal_vert,fragmentShader:Kw.meshnormal_frag},sprite:{uniforms:Iw([tT.sprite,tT.fog]),vertexShader:Kw.sprite_vert,fragmentShader:Kw.sprite_frag},background:{uniforms:{uvTransform:{value:new gx},t2D:{value:null}},vertexShader:Kw.background_vert,fragmentShader:Kw.background_frag},cube:{uniforms:Iw([tT.envmap,{opacity:{value:1}}]),vertexShader:Kw.cube_vert,fragmentShader:Kw.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Kw.equirect_vert,fragmentShader:Kw.equirect_frag},distanceRGBA:{uniforms:Iw([tT.common,tT.displacementmap,{referencePosition:{value:new Nx},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Kw.distanceRGBA_vert,fragmentShader:Kw.distanceRGBA_frag},shadow:{uniforms:Iw([tT.lights,tT.fog,{color:{value:new Zb(0)},opacity:{value:1}}]),vertexShader:Kw.shadow_vert,fragmentShader:Kw.shadow_frag}};function nT(t,e,n,i,r){const s=new Zb(0);let o,a,l=0,c=null,u=0,h=null;function d(t,e){n.buffers.color.setClear(t.r,t.g,t.b,e,r)}return{getClearColor:function(){return s},setClearColor:function(t,e=1){s.set(t),l=e,d(s,l)},getClearAlpha:function(){return l},setClearAlpha:function(t){l=t,d(s,l)},render:function(n,r){let p=!1,_=!0===r.isScene?r.background:null;_&&_.isTexture&&(_=e.get(_));const m=t.xr,f=m.getSession&&m.getSession();f&&\\\\\\\"additive\\\\\\\"===f.environmentBlendMode&&(_=null),null===_?d(s,l):_&&_.isColor&&(d(_,1),p=!0),(t.autoClear||p)&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),_&&(_.isCubeTexture||_.mapping===xy)?(void 0===a&&(a=new Lw(new Rw(1,1,1),new Dw({name:\\\\\\\"BackgroundCubeMaterial\\\\\\\",uniforms:Pw(eT.cube.uniforms),vertexShader:eT.cube.vertexShader,fragmentShader:eT.cube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1})),a.geometry.deleteAttribute(\\\\\\\"normal\\\\\\\"),a.geometry.deleteAttribute(\\\\\\\"uv\\\\\\\"),a.onBeforeRender=function(t,e,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(a.material,\\\\\\\"envMap\\\\\\\",{get:function(){return this.uniforms.envMap.value}}),i.update(a)),a.material.uniforms.envMap.value=_,a.material.uniforms.flipEnvMap.value=_.isCubeTexture&&!1===_.isRenderTargetTexture?-1:1,c===_&&u===_.version&&h===t.toneMapping||(a.material.needsUpdate=!0,c=_,u=_.version,h=t.toneMapping),n.unshift(a,a.geometry,a.material,0,0,null)):_&&_.isTexture&&(void 0===o&&(o=new Lw(new Qw(2,2),new Dw({name:\\\\\\\"BackgroundMaterial\\\\\\\",uniforms:Pw(eT.background.uniforms),vertexShader:eT.background.vertexShader,fragmentShader:eT.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1})),o.geometry.deleteAttribute(\\\\\\\"normal\\\\\\\"),Object.defineProperty(o.material,\\\\\\\"map\\\\\\\",{get:function(){return this.uniforms.t2D.value}}),i.update(o)),o.material.uniforms.t2D.value=_,!0===_.matrixAutoUpdate&&_.updateMatrix(),o.material.uniforms.uvTransform.value.copy(_.matrix),c===_&&u===_.version&&h===t.toneMapping||(o.material.needsUpdate=!0,c=_,u=_.version,h=t.toneMapping),n.unshift(o,o.geometry,o.material,0,0,null))}}}function iT(t,e,n,i){const r=t.getParameter(34921),s=i.isWebGL2?null:e.get(\\\\\\\"OES_vertex_array_object\\\\\\\"),o=i.isWebGL2||null!==s,a={},l=d(null);let c=l;function u(e){return i.isWebGL2?t.bindVertexArray(e):s.bindVertexArrayOES(e)}function h(e){return i.isWebGL2?t.deleteVertexArray(e):s.deleteVertexArrayOES(e)}function d(t){const e=[],n=[],i=[];for(let t=0;t<r;t++)e[t]=0,n[t]=0,i[t]=0;return{geometry:null,program:null,wireframe:!1,newAttributes:e,enabledAttributes:n,attributeDivisors:i,object:t,attributes:{},index:null}}function p(){const t=c.newAttributes;for(let e=0,n=t.length;e<n;e++)t[e]=0}function _(t){m(t,0)}function m(n,r){const s=c.newAttributes,o=c.enabledAttributes,a=c.attributeDivisors;if(s[n]=1,0===o[n]&&(t.enableVertexAttribArray(n),o[n]=1),a[n]!==r){(i.isWebGL2?t:e.get(\\\\\\\"ANGLE_instanced_arrays\\\\\\\"))[i.isWebGL2?\\\\\\\"vertexAttribDivisor\\\\\\\":\\\\\\\"vertexAttribDivisorANGLE\\\\\\\"](n,r),a[n]=r}}function f(){const e=c.newAttributes,n=c.enabledAttributes;for(let i=0,r=n.length;i<r;i++)n[i]!==e[i]&&(t.disableVertexAttribArray(i),n[i]=0)}function g(e,n,r,s,o,a){!0!==i.isWebGL2||5124!==r&&5125!==r?t.vertexAttribPointer(e,n,r,s,o,a):t.vertexAttribIPointer(e,n,r,o,a)}function v(){y(),c!==l&&(c=l,u(c.object))}function y(){l.geometry=null,l.program=null,l.wireframe=!1}return{setup:function(r,l,h,v,y){let x=!1;if(o){const e=function(e,n,r){const o=!0===r.wireframe;let l=a[e.id];void 0===l&&(l={},a[e.id]=l);let c=l[n.id];void 0===c&&(c={},l[n.id]=c);let u=c[o];void 0===u&&(u=d(i.isWebGL2?t.createVertexArray():s.createVertexArrayOES()),c[o]=u);return u}(v,h,l);c!==e&&(c=e,u(c.object)),x=function(t,e){const n=c.attributes,i=t.attributes;let r=0;for(const t in i){const e=n[t],s=i[t];if(void 0===e)return!0;if(e.attribute!==s)return!0;if(e.data!==s.data)return!0;r++}return c.attributesNum!==r||c.index!==e}(v,y),x&&function(t,e){const n={},i=t.attributes;let r=0;for(const t in i){const e=i[t],s={};s.attribute=e,e.data&&(s.data=e.data),n[t]=s,r++}c.attributes=n,c.attributesNum=r,c.index=e}(v,y)}else{const t=!0===l.wireframe;c.geometry===v.id&&c.program===h.id&&c.wireframe===t||(c.geometry=v.id,c.program=h.id,c.wireframe=t,x=!0)}!0===r.isInstancedMesh&&(x=!0),null!==y&&n.update(y,34963),x&&(!function(r,s,o,a){if(!1===i.isWebGL2&&(r.isInstancedMesh||a.isInstancedBufferGeometry)&&null===e.get(\\\\\\\"ANGLE_instanced_arrays\\\\\\\"))return;p();const l=a.attributes,c=o.getAttributes(),u=s.defaultAttributeValues;for(const e in c){const i=c[e];if(i.location>=0){let s=l[e];if(void 0===s&&(\\\\\\\"instanceMatrix\\\\\\\"===e&&r.instanceMatrix&&(s=r.instanceMatrix),\\\\\\\"instanceColor\\\\\\\"===e&&r.instanceColor&&(s=r.instanceColor)),void 0!==s){const e=s.normalized,o=s.itemSize,l=n.get(s);if(void 0===l)continue;const c=l.buffer,u=l.type,h=l.bytesPerElement;if(s.isInterleavedBufferAttribute){const n=s.data,l=n.stride,d=s.offset;if(n&&n.isInstancedInterleavedBuffer){for(let t=0;t<i.locationSize;t++)m(i.location+t,n.meshPerAttribute);!0!==r.isInstancedMesh&&void 0===a._maxInstanceCount&&(a._maxInstanceCount=n.meshPerAttribute*n.count)}else for(let t=0;t<i.locationSize;t++)_(i.location+t);t.bindBuffer(34962,c);for(let t=0;t<i.locationSize;t++)g(i.location+t,o/i.locationSize,u,e,l*h,(d+o/i.locationSize*t)*h)}else{if(s.isInstancedBufferAttribute){for(let t=0;t<i.locationSize;t++)m(i.location+t,s.meshPerAttribute);!0!==r.isInstancedMesh&&void 0===a._maxInstanceCount&&(a._maxInstanceCount=s.meshPerAttribute*s.count)}else for(let t=0;t<i.locationSize;t++)_(i.location+t);t.bindBuffer(34962,c);for(let t=0;t<i.locationSize;t++)g(i.location+t,o/i.locationSize,u,e,o*h,o/i.locationSize*t*h)}}else if(void 0!==u){const n=u[e];if(void 0!==n)switch(n.length){case 2:t.vertexAttrib2fv(i.location,n);break;case 3:t.vertexAttrib3fv(i.location,n);break;case 4:t.vertexAttrib4fv(i.location,n);break;default:t.vertexAttrib1fv(i.location,n)}}}}f()}(r,l,h,v),null!==y&&t.bindBuffer(34963,n.get(y).buffer))},reset:v,resetDefaultState:y,dispose:function(){v();for(const t in a){const e=a[t];for(const t in e){const n=e[t];for(const t in n)h(n[t].object),delete n[t];delete e[t]}delete a[t]}},releaseStatesOfGeometry:function(t){if(void 0===a[t.id])return;const e=a[t.id];for(const t in e){const n=e[t];for(const t in n)h(n[t].object),delete n[t];delete e[t]}delete a[t.id]},releaseStatesOfProgram:function(t){for(const e in a){const n=a[e];if(void 0===n[t.id])continue;const i=n[t.id];for(const t in i)h(i[t].object),delete i[t];delete n[t.id]}},initAttributes:p,enableAttribute:_,disableUnusedAttributes:f}}function rT(t,e,n,i){const r=i.isWebGL2;let s;this.setMode=function(t){s=t},this.render=function(e,i){t.drawArrays(s,e,i),n.update(i,s,1)},this.renderInstances=function(i,o,a){if(0===a)return;let l,c;if(r)l=t,c=\\\\\\\"drawArraysInstanced\\\\\\\";else if(l=e.get(\\\\\\\"ANGLE_instanced_arrays\\\\\\\"),c=\\\\\\\"drawArraysInstancedANGLE\\\\\\\",null===l)return void console.error(\\\\\\\"THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\\\\\\\");l[c](s,i,o,a),n.update(o,s,a)}}function sT(t,e,n){let i;function r(e){if(\\\\\\\"highp\\\\\\\"===e){if(t.getShaderPrecisionFormat(35633,36338).precision>0&&t.getShaderPrecisionFormat(35632,36338).precision>0)return\\\\\\\"highp\\\\\\\";e=\\\\\\\"mediump\\\\\\\"}return\\\\\\\"mediump\\\\\\\"===e&&t.getShaderPrecisionFormat(35633,36337).precision>0&&t.getShaderPrecisionFormat(35632,36337).precision>0?\\\\\\\"mediump\\\\\\\":\\\\\\\"lowp\\\\\\\"}const s=\\\\\\\"undefined\\\\\\\"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||\\\\\\\"undefined\\\\\\\"!=typeof WebGL2ComputeRenderingContext&&t instanceof WebGL2ComputeRenderingContext;let o=void 0!==n.precision?n.precision:\\\\\\\"highp\\\\\\\";const a=r(o);a!==o&&(console.warn(\\\\\\\"THREE.WebGLRenderer:\\\\\\\",o,\\\\\\\"not supported, using\\\\\\\",a,\\\\\\\"instead.\\\\\\\"),o=a);const l=s||e.has(\\\\\\\"WEBGL_draw_buffers\\\\\\\"),c=!0===n.logarithmicDepthBuffer,u=t.getParameter(34930),h=t.getParameter(35660),d=t.getParameter(3379),p=t.getParameter(34076),_=t.getParameter(34921),m=t.getParameter(36347),f=t.getParameter(36348),g=t.getParameter(36349),v=h>0,y=s||e.has(\\\\\\\"OES_texture_float\\\\\\\");return{isWebGL2:s,drawBuffers:l,getMaxAnisotropy:function(){if(void 0!==i)return i;if(!0===e.has(\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\")){const n=e.get(\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\");i=t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else i=0;return i},getMaxPrecision:r,precision:o,logarithmicDepthBuffer:c,maxTextures:u,maxVertexTextures:h,maxTextureSize:d,maxCubemapSize:p,maxAttributes:_,maxVertexUniforms:m,maxVaryings:f,maxFragmentUniforms:g,vertexTextures:v,floatFragmentTextures:y,floatVertexTextures:v&&y,maxSamples:s?t.getParameter(36183):0}}function oT(t){const e=this;let n=null,i=0,r=!1,s=!1;const o=new qw,a=new gx,l={value:null,needsUpdate:!1};function c(){l.value!==n&&(l.value=n,l.needsUpdate=i>0),e.numPlanes=i,e.numIntersection=0}function u(t,n,i,r){const s=null!==t?t.length:0;let c=null;if(0!==s){if(c=l.value,!0!==r||null===c){const e=i+4*s,r=n.matrixWorldInverse;a.getNormalMatrix(r),(null===c||c.length<e)&&(c=new Float32Array(e));for(let e=0,n=i;e!==s;++e,n+=4)o.copy(t[e]).applyMatrix4(r,a),o.normal.toArray(c,n),c[n+3]=o.constant}l.value=c,l.needsUpdate=!0}return e.numPlanes=s,e.numIntersection=0,c}this.uniform=l,this.numPlanes=0,this.numIntersection=0,this.init=function(t,e,s){const o=0!==t.length||e||0!==i||r;return r=e,n=u(t,s,0),i=t.length,o},this.beginShadows=function(){s=!0,u(null)},this.endShadows=function(){s=!1,c()},this.setState=function(e,o,a){const h=e.clippingPlanes,d=e.clipIntersection,p=e.clipShadows,_=t.get(e);if(!r||null===h||0===h.length||s&&!p)s?u(null):c();else{const t=s?0:i,e=4*t;let r=_.clippingState||null;l.value=r,r=u(h,o,e,a);for(let t=0;t!==e;++t)r[t]=n[t];_.clippingState=r,this.numIntersection=d?this.numPlanes:0,this.numPlanes+=t}}}function aT(t){let e=new WeakMap;function n(t,e){return e===vy?t.mapping=fy:e===yy&&(t.mapping=gy),t}function i(t){const n=t.target;n.removeEventListener(\\\\\\\"dispose\\\\\\\",i);const r=e.get(n);void 0!==r&&(e.delete(n),r.dispose())}return{get:function(r){if(r&&r.isTexture&&!1===r.isRenderTargetTexture){const s=r.mapping;if(s===vy||s===yy){if(e.has(r)){return n(e.get(r).texture,r.mapping)}{const s=r.image;if(s&&s.height>0){const o=t.getRenderTarget(),a=new Vw(s.height/2);return a.fromEquirectangularTexture(t,r),e.set(r,a),t.setRenderTarget(o),r.addEventListener(\\\\\\\"dispose\\\\\\\",i),n(a.texture,r.mapping)}return null}}}return r},dispose:function(){e=new WeakMap}}}eT.physical={uniforms:Iw([eT.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new fx(1,1)},clearcoatNormalMap:{value:null},sheen:{value:0},sheenTint:{value:new Zb(0)},sheenRoughness:{value:0},transmission:{value:0},transmissionMap:{value:null},transmissionSamplerSize:{value:new fx},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},attenuationDistance:{value:0},attenuationTint:{value:new Zb(0)},specularIntensity:{value:0},specularIntensityMap:{value:null},specularTint:{value:new Zb(1,1,1)},specularTintMap:{value:null}}]),vertexShader:Kw.meshphysical_vert,fragmentShader:Kw.meshphysical_frag};class lT extends kw{constructor(t=-1,e=1,n=1,i=-1,r=.1,s=2e3){super(),this.type=\\\\\\\"OrthographicCamera\\\\\\\",this.zoom=1,this.view=null,this.left=t,this.right=e,this.top=n,this.bottom=i,this.near=r,this.far=s,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.left=t.left,this.right=t.right,this.top=t.top,this.bottom=t.bottom,this.near=t.near,this.far=t.far,this.zoom=t.zoom,this.view=null===t.view?null:Object.assign({},t.view),this}setViewOffset(t,e,n,i,r,s){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=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=(this.right-this.left)/(2*this.zoom),e=(this.top-this.bottom)/(2*this.zoom),n=(this.right+this.left)/2,i=(this.top+this.bottom)/2;let r=n-t,s=n+t,o=i+e,a=i-e;if(null!==this.view&&this.view.enabled){const t=(this.right-this.left)/this.view.fullWidth/this.zoom,e=(this.top-this.bottom)/this.view.fullHeight/this.zoom;r+=t*this.view.offsetX,s=r+t*this.view.width,o-=e*this.view.offsetY,a=o-e*this.view.height}this.projectionMatrix.makeOrthographic(r,s,o,a,this.near,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.zoom=this.zoom,e.object.left=this.left,e.object.right=this.right,e.object.top=this.top,e.object.bottom=this.bottom,e.object.near=this.near,e.object.far=this.far,null!==this.view&&(e.object.view=Object.assign({},this.view)),e}}lT.prototype.isOrthographicCamera=!0;class cT extends Dw{constructor(t){super(t),this.type=\\\\\\\"RawShaderMaterial\\\\\\\"}}cT.prototype.isRawShaderMaterial=!0;const uT=Math.pow(2,8),hT=[.125,.215,.35,.446,.526,.582],dT=5+hT.length,pT=20,_T={[Yy]:0,[$y]:1,[Zy]:2,3004:3,3005:4,3006:5,[Jy]:6},mT=new lT,{_lodPlanes:fT,_sizeLods:gT,_sigmas:vT}=MT(),yT=new Zb;let xT=null;const bT=(1+Math.sqrt(5))/2,wT=1/bT,TT=[new Nx(1,1,1),new Nx(-1,1,1),new Nx(1,1,-1),new Nx(-1,1,-1),new Nx(0,bT,wT),new Nx(0,bT,-wT),new Nx(wT,0,bT),new Nx(-wT,0,bT),new Nx(bT,wT,0),new Nx(-bT,wT,0)];class AT{constructor(t){this._renderer=t,this._pingPongRenderTarget=null,this._blurMaterial=function(t){const e=new Float32Array(t),n=new Nx(0,1,0);return new cT({name:\\\\\\\"SphericalGaussianBlur\\\\\\\",defines:{n:t},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:e},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:n},inputEncoding:{value:_T[3e3]},outputEncoding:{value:_T[3e3]}},vertexShader:OT(),fragmentShader:`\\\\n\\\\n\\\\t\\\\t\\\\tprecision mediump float;\\\\n\\\\t\\\\t\\\\tprecision mediump int;\\\\n\\\\n\\\\t\\\\t\\\\tvarying vec3 vOutputDirection;\\\\n\\\\n\\\\t\\\\t\\\\tuniform sampler2D envMap;\\\\n\\\\t\\\\t\\\\tuniform int samples;\\\\n\\\\t\\\\t\\\\tuniform float weights[ n ];\\\\n\\\\t\\\\t\\\\tuniform bool latitudinal;\\\\n\\\\t\\\\t\\\\tuniform float dTheta;\\\\n\\\\t\\\\t\\\\tuniform float mipInt;\\\\n\\\\t\\\\t\\\\tuniform vec3 poleAxis;\\\\n\\\\n\\\\t\\\\t\\\\t${RT()}\\\\n\\\\n\\\\t\\\\t\\\\t#define ENVMAP_TYPE_CUBE_UV\\\\n\\\\t\\\\t\\\\t#include <cube_uv_reflection_fragment>\\\\n\\\\n\\\\t\\\\t\\\\tvec3 getSample( float theta, vec3 axis ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tfloat cosTheta = cos( theta );\\\\n\\\\t\\\\t\\\\t\\\\t// Rodrigues' axis-angle rotation\\\\n\\\\t\\\\t\\\\t\\\\tvec3 sampleDirection = vOutputDirection * cosTheta\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t+ cross( axis, vOutputDirection ) * sin( theta )\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t\\\\taxis = normalize( axis );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tfor ( int i = 1; i < n; i++ ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tif ( i >= samples ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tbreak;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat theta = dTheta * float( i );\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor = linearToOutputTexel( gl_FragColor );\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t`,blending:0,depthTest:!1,depthWrite:!1})}(pT),this._equirectShader=null,this._cubemapShader=null,this._compileMaterial(this._blurMaterial)}fromScene(t,e=0,n=.1,i=100){xT=this._renderer.getRenderTarget();const r=this._allocateTargets();return this._sceneToCubeUV(t,n,i,r),e>0&&this._blur(r,0,0,e),this._applyPMREM(r),this._cleanup(r),r}fromEquirectangular(t){return this._fromTexture(t)}fromCubemap(t){return this._fromTexture(t)}compileCubemapShader(){null===this._cubemapShader&&(this._cubemapShader=LT(),this._compileMaterial(this._cubemapShader))}compileEquirectangularShader(){null===this._equirectShader&&(this._equirectShader=NT(),this._compileMaterial(this._equirectShader))}dispose(){this._blurMaterial.dispose(),null!==this._cubemapShader&&this._cubemapShader.dispose(),null!==this._equirectShader&&this._equirectShader.dispose();for(let t=0;t<fT.length;t++)fT[t].dispose()}_cleanup(t){this._pingPongRenderTarget.dispose(),this._renderer.setRenderTarget(xT),t.scissorTest=!1,CT(t,0,0,t.width,t.height)}_fromTexture(t){xT=this._renderer.getRenderTarget();const e=this._allocateTargets(t);return this._textureToCubeUV(t,e),this._applyPMREM(e),this._cleanup(e),e}_allocateTargets(t){const e={magFilter:Ey,minFilter:Ey,generateMipmaps:!1,type:Oy,format:1023,encoding:ET(t)?t.encoding:Zy,depthBuffer:!1},n=ST(e);return n.depthBuffer=!t,this._pingPongRenderTarget=ST(e),n}_compileMaterial(t){const e=new Lw(fT[0],t);this._renderer.compile(e,mT)}_sceneToCubeUV(t,e,n,i){const r=new Bw(90,1,e,n),s=[1,-1,1,1,1,1],o=[1,1,1,-1,-1,-1],a=this._renderer,l=a.autoClear,c=a.outputEncoding,u=a.toneMapping;a.getClearColor(yT),a.toneMapping=0,a.outputEncoding=Yy,a.autoClear=!1;const h=new Qb({name:\\\\\\\"PMREM.Background\\\\\\\",side:1,depthWrite:!1,depthTest:!1}),d=new Lw(new Rw,h);let p=!1;const _=t.background;_?_.isColor&&(h.color.copy(_),t.background=null,p=!0):(h.color.copy(yT),p=!0);for(let e=0;e<6;e++){const n=e%3;0==n?(r.up.set(0,s[e],0),r.lookAt(o[e],0,0)):1==n?(r.up.set(0,0,s[e]),r.lookAt(0,o[e],0)):(r.up.set(0,s[e],0),r.lookAt(0,0,o[e])),CT(i,n*uT,e>2?uT:0,uT,uT),a.setRenderTarget(i),p&&a.render(d,r),a.render(t,r)}d.geometry.dispose(),d.material.dispose(),a.toneMapping=u,a.outputEncoding=c,a.autoClear=l,t.background=_}_setEncoding(t,e){!0===this._renderer.capabilities.isWebGL2&&e.format===By&&e.type===Oy&&e.encoding===$y?t.value=_T[3e3]:t.value=_T[e.encoding]}_textureToCubeUV(t,e){const n=this._renderer;t.isCubeTexture?null==this._cubemapShader&&(this._cubemapShader=LT()):null==this._equirectShader&&(this._equirectShader=NT());const i=t.isCubeTexture?this._cubemapShader:this._equirectShader,r=new Lw(fT[0],i),s=i.uniforms;s.envMap.value=t,t.isCubeTexture||s.texelSize.value.set(1/t.image.width,1/t.image.height),this._setEncoding(s.inputEncoding,t),this._setEncoding(s.outputEncoding,e.texture),CT(e,0,0,3*uT,2*uT),n.setRenderTarget(e),n.render(r,mT)}_applyPMREM(t){const e=this._renderer,n=e.autoClear;e.autoClear=!1;for(let e=1;e<dT;e++){const n=Math.sqrt(vT[e]*vT[e]-vT[e-1]*vT[e-1]),i=TT[(e-1)%TT.length];this._blur(t,e-1,e,n,i)}e.autoClear=n}_blur(t,e,n,i,r){const s=this._pingPongRenderTarget;this._halfBlur(t,s,e,n,i,\\\\\\\"latitudinal\\\\\\\",r),this._halfBlur(s,t,n,n,i,\\\\\\\"longitudinal\\\\\\\",r)}_halfBlur(t,e,n,i,r,s,o){const a=this._renderer,l=this._blurMaterial;\\\\\\\"latitudinal\\\\\\\"!==s&&\\\\\\\"longitudinal\\\\\\\"!==s&&console.error(\\\\\\\"blur direction must be either latitudinal or longitudinal!\\\\\\\");const c=new Lw(fT[i],l),u=l.uniforms,h=gT[n]-1,d=isFinite(r)?Math.PI/(2*h):2*Math.PI/39,p=r/d,_=isFinite(r)?1+Math.floor(3*p):pT;_>pT&&console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${_} samples when the maximum is set to 20`);const m=[];let f=0;for(let t=0;t<pT;++t){const e=t/p,n=Math.exp(-e*e/2);m.push(n),0==t?f+=n:t<_&&(f+=2*n)}for(let t=0;t<m.length;t++)m[t]=m[t]/f;u.envMap.value=t.texture,u.samples.value=_,u.weights.value=m,u.latitudinal.value=\\\\\\\"latitudinal\\\\\\\"===s,o&&(u.poleAxis.value=o),u.dTheta.value=d,u.mipInt.value=8-n,this._setEncoding(u.inputEncoding,t.texture),this._setEncoding(u.outputEncoding,t.texture);const g=gT[i];CT(e,3*Math.max(0,uT-2*g),(0===i?0:2*uT)+2*g*(i>4?i-8+4:0),3*g,2*g),a.setRenderTarget(e),a.render(c,mT)}}function ET(t){return void 0!==t&&t.type===Oy&&(t.encoding===Yy||t.encoding===$y||t.encoding===Jy)}function MT(){const t=[],e=[],n=[];let i=8;for(let r=0;r<dT;r++){const s=Math.pow(2,i);e.push(s);let o=1/s;r>4?o=hT[r-8+4-1]:0==r&&(o=0),n.push(o);const a=1/(s-1),l=-a/2,c=1+a/2,u=[l,l,c,l,c,c,l,l,c,c,l,c],h=6,d=6,p=3,_=2,m=1,f=new Float32Array(p*d*h),g=new Float32Array(_*d*h),v=new Float32Array(m*d*h);for(let t=0;t<h;t++){const e=t%3*2/3-1,n=t>2?0:-1,i=[e,n,0,e+2/3,n,0,e+2/3,n+1,0,e,n,0,e+2/3,n+1,0,e,n+1,0];f.set(i,p*d*t),g.set(u,_*d*t);const r=[t,t,t,t,t,t];v.set(r,m*d*t)}const y=new dw;y.setAttribute(\\\\\\\"position\\\\\\\",new ew(f,p)),y.setAttribute(\\\\\\\"uv\\\\\\\",new ew(g,_)),y.setAttribute(\\\\\\\"faceIndex\\\\\\\",new ew(v,m)),t.push(y),i>4&&i--}return{_lodPlanes:t,_sizeLods:e,_sigmas:n}}function ST(t){const e=new Mx(3*uT,3*uT,t);return e.texture.mapping=xy,e.texture.name=\\\\\\\"PMREM.cubeUv\\\\\\\",e.scissorTest=!0,e}function CT(t,e,n,i,r){t.viewport.set(e,n,i,r),t.scissor.set(e,n,i,r)}function NT(){const t=new fx(1,1);return new cT({name:\\\\\\\"EquirectangularToCubeUV\\\\\\\",uniforms:{envMap:{value:null},texelSize:{value:t},inputEncoding:{value:_T[3e3]},outputEncoding:{value:_T[3e3]}},vertexShader:OT(),fragmentShader:`\\\\n\\\\n\\\\t\\\\t\\\\tprecision mediump float;\\\\n\\\\t\\\\t\\\\tprecision mediump int;\\\\n\\\\n\\\\t\\\\t\\\\tvarying vec3 vOutputDirection;\\\\n\\\\n\\\\t\\\\t\\\\tuniform sampler2D envMap;\\\\n\\\\t\\\\t\\\\tuniform vec2 texelSize;\\\\n\\\\n\\\\t\\\\t\\\\t${RT()}\\\\n\\\\n\\\\t\\\\t\\\\t#include <common>\\\\n\\\\n\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvec3 outputDirection = normalize( vOutputDirection );\\\\n\\\\t\\\\t\\\\t\\\\tvec2 uv = equirectUv( outputDirection );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvec2 f = fract( uv / texelSize - 0.5 );\\\\n\\\\t\\\\t\\\\t\\\\tuv -= f * texelSize;\\\\n\\\\t\\\\t\\\\t\\\\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\\\n\\\\t\\\\t\\\\t\\\\tuv.x += texelSize.x;\\\\n\\\\t\\\\t\\\\t\\\\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\\\n\\\\t\\\\t\\\\t\\\\tuv.y += texelSize.y;\\\\n\\\\t\\\\t\\\\t\\\\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\\\n\\\\t\\\\t\\\\t\\\\tuv.x -= texelSize.x;\\\\n\\\\t\\\\t\\\\t\\\\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvec3 tm = mix( tl, tr, f.x );\\\\n\\\\t\\\\t\\\\t\\\\tvec3 bm = mix( bl, br, f.x );\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor.rgb = mix( tm, bm, f.y );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor = linearToOutputTexel( gl_FragColor );\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t`,blending:0,depthTest:!1,depthWrite:!1})}function LT(){return new cT({name:\\\\\\\"CubemapToCubeUV\\\\\\\",uniforms:{envMap:{value:null},inputEncoding:{value:_T[3e3]},outputEncoding:{value:_T[3e3]}},vertexShader:OT(),fragmentShader:`\\\\n\\\\n\\\\t\\\\t\\\\tprecision mediump float;\\\\n\\\\t\\\\t\\\\tprecision mediump int;\\\\n\\\\n\\\\t\\\\t\\\\tvarying vec3 vOutputDirection;\\\\n\\\\n\\\\t\\\\t\\\\tuniform samplerCube envMap;\\\\n\\\\n\\\\t\\\\t\\\\t${RT()}\\\\n\\\\n\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor = linearToOutputTexel( gl_FragColor );\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t`,blending:0,depthTest:!1,depthWrite:!1})}function OT(){return\\\\\\\"\\\\n\\\\n\\\\t\\\\tprecision mediump float;\\\\n\\\\t\\\\tprecision mediump int;\\\\n\\\\n\\\\t\\\\tattribute vec3 position;\\\\n\\\\t\\\\tattribute vec2 uv;\\\\n\\\\t\\\\tattribute float faceIndex;\\\\n\\\\n\\\\t\\\\tvarying vec3 vOutputDirection;\\\\n\\\\n\\\\t\\\\t// RH coordinate system; PMREM face-indexing convention\\\\n\\\\t\\\\tvec3 getDirection( vec2 uv, float face ) {\\\\n\\\\n\\\\t\\\\t\\\\tuv = 2.0 * uv - 1.0;\\\\n\\\\n\\\\t\\\\t\\\\tvec3 direction = vec3( uv, 1.0 );\\\\n\\\\n\\\\t\\\\t\\\\tif ( face == 0.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tdirection = direction.zyx; // ( 1, v, u ) pos x\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( face == 1.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tdirection = direction.xzy;\\\\n\\\\t\\\\t\\\\t\\\\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( face == 2.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( face == 3.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tdirection = direction.zyx;\\\\n\\\\t\\\\t\\\\t\\\\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( face == 4.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tdirection = direction.xzy;\\\\n\\\\t\\\\t\\\\t\\\\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( face == 5.0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\treturn direction;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvOutputDirection = getDirection( uv, faceIndex );\\\\n\\\\t\\\\t\\\\tgl_Position = vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\\\\"}function RT(){return\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform int inputEncoding;\\\\n\\\\t\\\\tuniform int outputEncoding;\\\\n\\\\n\\\\t\\\\t#include <encodings_pars_fragment>\\\\n\\\\n\\\\t\\\\tvec4 inputTexelToLinear( vec4 value ) {\\\\n\\\\n\\\\t\\\\t\\\\tif ( inputEncoding == 0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn value;\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( inputEncoding == 1 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn sRGBToLinear( value );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( inputEncoding == 2 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn RGBEToLinear( value );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( inputEncoding == 3 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn RGBMToLinear( value, 7.0 );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( inputEncoding == 4 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn RGBMToLinear( value, 16.0 );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( inputEncoding == 5 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn RGBDToLinear( value, 256.0 );\\\\n\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn GammaToLinear( value, 2.2 );\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvec4 linearToOutputTexel( vec4 value ) {\\\\n\\\\n\\\\t\\\\t\\\\tif ( outputEncoding == 0 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn value;\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( outputEncoding == 1 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn LinearTosRGB( value );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( outputEncoding == 2 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn LinearToRGBE( value );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( outputEncoding == 3 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn LinearToRGBM( value, 7.0 );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( outputEncoding == 4 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn LinearToRGBM( value, 16.0 );\\\\n\\\\n\\\\t\\\\t\\\\t} else if ( outputEncoding == 5 ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn LinearToRGBD( value, 256.0 );\\\\n\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\treturn LinearToGamma( value, 2.2 );\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvec4 envMapTexelToLinear( vec4 color ) {\\\\n\\\\n\\\\t\\\\t\\\\treturn inputTexelToLinear( color );\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\\\\"}function PT(t){let e=new WeakMap,n=null;function i(t){const n=t.target;n.removeEventListener(\\\\\\\"dispose\\\\\\\",i);const r=e.get(n);void 0!==r&&(e.delete(n),r.dispose())}return{get:function(r){if(r&&r.isTexture&&!1===r.isRenderTargetTexture){const s=r.mapping,o=s===vy||s===yy,a=s===fy||s===gy;if(o||a){if(e.has(r))return e.get(r).texture;{const s=r.image;if(o&&s&&s.height>0||a&&s&&function(t){let e=0;const n=6;for(let i=0;i<n;i++)void 0!==t[i]&&e++;return e===n}(s)){const s=t.getRenderTarget();null===n&&(n=new AT(t));const a=o?n.fromEquirectangular(r):n.fromCubemap(r);return e.set(r,a),t.setRenderTarget(s),r.addEventListener(\\\\\\\"dispose\\\\\\\",i),a.texture}return null}}}return r},dispose:function(){e=new WeakMap,null!==n&&(n.dispose(),n=null)}}}function IT(t){const e={};function n(n){if(void 0!==e[n])return e[n];let i;switch(n){case\\\\\\\"WEBGL_depth_texture\\\\\\\":i=t.getExtension(\\\\\\\"WEBGL_depth_texture\\\\\\\")||t.getExtension(\\\\\\\"MOZ_WEBGL_depth_texture\\\\\\\")||t.getExtension(\\\\\\\"WEBKIT_WEBGL_depth_texture\\\\\\\");break;case\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\":i=t.getExtension(\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\")||t.getExtension(\\\\\\\"MOZ_EXT_texture_filter_anisotropic\\\\\\\")||t.getExtension(\\\\\\\"WEBKIT_EXT_texture_filter_anisotropic\\\\\\\");break;case\\\\\\\"WEBGL_compressed_texture_s3tc\\\\\\\":i=t.getExtension(\\\\\\\"WEBGL_compressed_texture_s3tc\\\\\\\")||t.getExtension(\\\\\\\"MOZ_WEBGL_compressed_texture_s3tc\\\\\\\")||t.getExtension(\\\\\\\"WEBKIT_WEBGL_compressed_texture_s3tc\\\\\\\");break;case\\\\\\\"WEBGL_compressed_texture_pvrtc\\\\\\\":i=t.getExtension(\\\\\\\"WEBGL_compressed_texture_pvrtc\\\\\\\")||t.getExtension(\\\\\\\"WEBKIT_WEBGL_compressed_texture_pvrtc\\\\\\\");break;default:i=t.getExtension(n)}return e[n]=i,i}return{has:function(t){return null!==n(t)},init:function(t){t.isWebGL2?n(\\\\\\\"EXT_color_buffer_float\\\\\\\"):(n(\\\\\\\"WEBGL_depth_texture\\\\\\\"),n(\\\\\\\"OES_texture_float\\\\\\\"),n(\\\\\\\"OES_texture_half_float\\\\\\\"),n(\\\\\\\"OES_texture_half_float_linear\\\\\\\"),n(\\\\\\\"OES_standard_derivatives\\\\\\\"),n(\\\\\\\"OES_element_index_uint\\\\\\\"),n(\\\\\\\"OES_vertex_array_object\\\\\\\"),n(\\\\\\\"ANGLE_instanced_arrays\\\\\\\")),n(\\\\\\\"OES_texture_float_linear\\\\\\\"),n(\\\\\\\"EXT_color_buffer_half_float\\\\\\\")},get:function(t){const e=n(t);return null===e&&console.warn(\\\\\\\"THREE.WebGLRenderer: \\\\\\\"+t+\\\\\\\" extension not supported.\\\\\\\"),e}}}function FT(t,e,n,i){const r={},s=new WeakMap;function o(t){const a=t.target;null!==a.index&&e.remove(a.index);for(const t in a.attributes)e.remove(a.attributes[t]);a.removeEventListener(\\\\\\\"dispose\\\\\\\",o),delete r[a.id];const l=s.get(a);l&&(e.remove(l),s.delete(a)),i.releaseStatesOfGeometry(a),!0===a.isInstancedBufferGeometry&&delete a._maxInstanceCount,n.memory.geometries--}function a(t){const n=[],i=t.index,r=t.attributes.position;let o=0;if(null!==i){const t=i.array;o=i.version;for(let e=0,i=t.length;e<i;e+=3){const i=t[e+0],r=t[e+1],s=t[e+2];n.push(i,r,r,s,s,i)}}else{const t=r.array;o=r.version;for(let e=0,i=t.length/3-1;e<i;e+=3){const t=e+0,i=e+1,r=e+2;n.push(t,i,i,r,r,t)}}const a=new(vx(n)>65535?iw:nw)(n,1);a.version=o;const l=s.get(t);l&&e.remove(l),s.set(t,a)}return{get:function(t,e){return!0===r[e.id]||(e.addEventListener(\\\\\\\"dispose\\\\\\\",o),r[e.id]=!0,n.memory.geometries++),e},update:function(t){const n=t.attributes;for(const t in n)e.update(n[t],34962);const i=t.morphAttributes;for(const t in i){const n=i[t];for(let t=0,i=n.length;t<i;t++)e.update(n[t],34962)}},getWireframeAttribute:function(t){const e=s.get(t);if(e){const n=t.index;null!==n&&e.version<n.version&&a(t)}else a(t);return s.get(t)}}}function DT(t,e,n,i){const r=i.isWebGL2;let s,o,a;this.setMode=function(t){s=t},this.setIndex=function(t){o=t.type,a=t.bytesPerElement},this.render=function(e,i){t.drawElements(s,i,o,e*a),n.update(i,s,1)},this.renderInstances=function(i,l,c){if(0===c)return;let u,h;if(r)u=t,h=\\\\\\\"drawElementsInstanced\\\\\\\";else if(u=e.get(\\\\\\\"ANGLE_instanced_arrays\\\\\\\"),h=\\\\\\\"drawElementsInstancedANGLE\\\\\\\",null===u)return void console.error(\\\\\\\"THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\\\\\\\");u[h](s,l,o,i*a,c),n.update(l,s,c)}}function kT(t){const e={frame:0,calls:0,triangles:0,points:0,lines:0};return{memory:{geometries:0,textures:0},render:e,programs:null,autoReset:!0,reset:function(){e.frame++,e.calls=0,e.triangles=0,e.points=0,e.lines=0},update:function(t,n,i){switch(e.calls++,n){case 4:e.triangles+=i*(t/3);break;case 1:e.lines+=i*(t/2);break;case 3:e.lines+=i*(t-1);break;case 2:e.lines+=i*t;break;case 0:e.points+=i*t;break;default:console.error(\\\\\\\"THREE.WebGLInfo: Unknown draw mode:\\\\\\\",n)}}}}class BT extends Tx{constructor(t=null,e=1,n=1,i=1){super(null),this.image={data:t,width:e,height:n,depth:i},this.magFilter=Ey,this.minFilter=Ey,this.wrapR=Ty,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}}function zT(t,e){return t[0]-e[0]}function UT(t,e){return Math.abs(e[1])-Math.abs(t[1])}function GT(t,e){let n=1;const i=e.isInterleavedBufferAttribute?e.data.array:e.array;i instanceof Int8Array?n=127:i instanceof Int16Array?n=32767:i instanceof Int32Array?n=2147483647:console.error(\\\\\\\"THREE.WebGLMorphtargets: Unsupported morph attribute data type: \\\\\\\",i),t.divideScalar(n)}function VT(t,e,n){const i={},r=new Float32Array(8),s=new WeakMap,o=new Nx,a=[];for(let t=0;t<8;t++)a[t]=[t,0];return{update:function(l,c,u,h){const d=l.morphTargetInfluences;if(!0===e.isWebGL2){const i=c.morphAttributes.position.length;let r=s.get(c);if(void 0===r||r.count!==i){void 0!==r&&r.texture.dispose();const t=void 0!==c.morphAttributes.normal,n=c.morphAttributes.position,a=c.morphAttributes.normal||[],l=!0===t?2:1;let u=c.attributes.position.count*l,h=1;u>e.maxTextureSize&&(h=Math.ceil(u/e.maxTextureSize),u=e.maxTextureSize);const d=new Float32Array(u*h*4*i),p=new BT(d,u,h,i);p.format=By,p.type=Iy;const _=4*l;for(let e=0;e<i;e++){const i=n[e],r=a[e],s=u*h*4*e;for(let e=0;e<i.count;e++){o.fromBufferAttribute(i,e),!0===i.normalized&&GT(o,i);const n=e*_;d[s+n+0]=o.x,d[s+n+1]=o.y,d[s+n+2]=o.z,d[s+n+3]=0,!0===t&&(o.fromBufferAttribute(r,e),!0===r.normalized&&GT(o,r),d[s+n+4]=o.x,d[s+n+5]=o.y,d[s+n+6]=o.z,d[s+n+7]=0)}}r={count:i,texture:p,size:new fx(u,h)},s.set(c,r)}let a=0;for(let t=0;t<d.length;t++)a+=d[t];const l=c.morphTargetsRelative?1:1-a;h.getUniforms().setValue(t,\\\\\\\"morphTargetBaseInfluence\\\\\\\",l),h.getUniforms().setValue(t,\\\\\\\"morphTargetInfluences\\\\\\\",d),h.getUniforms().setValue(t,\\\\\\\"morphTargetsTexture\\\\\\\",r.texture,n),h.getUniforms().setValue(t,\\\\\\\"morphTargetsTextureSize\\\\\\\",r.size)}else{const e=void 0===d?0:d.length;let n=i[c.id];if(void 0===n||n.length!==e){n=[];for(let t=0;t<e;t++)n[t]=[t,0];i[c.id]=n}for(let t=0;t<e;t++){const e=n[t];e[0]=t,e[1]=d[t]}n.sort(UT);for(let t=0;t<8;t++)t<e&&n[t][1]?(a[t][0]=n[t][0],a[t][1]=n[t][1]):(a[t][0]=Number.MAX_SAFE_INTEGER,a[t][1]=0);a.sort(zT);const s=c.morphAttributes.position,o=c.morphAttributes.normal;let l=0;for(let t=0;t<8;t++){const e=a[t],n=e[0],i=e[1];n!==Number.MAX_SAFE_INTEGER&&i?(s&&c.getAttribute(\\\\\\\"morphTarget\\\\\\\"+t)!==s[n]&&c.setAttribute(\\\\\\\"morphTarget\\\\\\\"+t,s[n]),o&&c.getAttribute(\\\\\\\"morphNormal\\\\\\\"+t)!==o[n]&&c.setAttribute(\\\\\\\"morphNormal\\\\\\\"+t,o[n]),r[t]=i,l+=i):(s&&!0===c.hasAttribute(\\\\\\\"morphTarget\\\\\\\"+t)&&c.deleteAttribute(\\\\\\\"morphTarget\\\\\\\"+t),o&&!0===c.hasAttribute(\\\\\\\"morphNormal\\\\\\\"+t)&&c.deleteAttribute(\\\\\\\"morphNormal\\\\\\\"+t),r[t]=0)}const u=c.morphTargetsRelative?1:1-l;h.getUniforms().setValue(t,\\\\\\\"morphTargetBaseInfluence\\\\\\\",u),h.getUniforms().setValue(t,\\\\\\\"morphTargetInfluences\\\\\\\",r)}}}}function HT(t,e,n,i){let r=new WeakMap;function s(t){const e=t.target;e.removeEventListener(\\\\\\\"dispose\\\\\\\",s),n.remove(e.instanceMatrix),null!==e.instanceColor&&n.remove(e.instanceColor)}return{update:function(t){const o=i.render.frame,a=t.geometry,l=e.get(t,a);return r.get(l)!==o&&(e.update(l),r.set(l,o)),t.isInstancedMesh&&(!1===t.hasEventListener(\\\\\\\"dispose\\\\\\\",s)&&t.addEventListener(\\\\\\\"dispose\\\\\\\",s),n.update(t.instanceMatrix,34962),null!==t.instanceColor&&n.update(t.instanceColor,34962)),l},dispose:function(){r=new WeakMap}}}BT.prototype.isDataTexture2DArray=!0;class jT extends Tx{constructor(t=null,e=1,n=1,i=1){super(null),this.image={data:t,width:e,height:n,depth:i},this.magFilter=Ey,this.minFilter=Ey,this.wrapR=Ty,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}}jT.prototype.isDataTexture3D=!0;const WT=new Tx,qT=new BT,XT=new jT,YT=new Gw,$T=[],JT=[],ZT=new Float32Array(16),QT=new Float32Array(9),KT=new Float32Array(4);function tA(t,e,n){const i=t[0];if(i<=0||i>0)return t;const r=e*n;let s=$T[r];if(void 0===s&&(s=new Float32Array(r),$T[r]=s),0!==e){i.toArray(s,0);for(let i=1,r=0;i!==e;++i)r+=n,t[i].toArray(s,r)}return s}function eA(t,e){if(t.length!==e.length)return!1;for(let n=0,i=t.length;n<i;n++)if(t[n]!==e[n])return!1;return!0}function nA(t,e){for(let n=0,i=e.length;n<i;n++)t[n]=e[n]}function iA(t,e){let n=JT[e];void 0===n&&(n=new Int32Array(e),JT[e]=n);for(let i=0;i!==e;++i)n[i]=t.allocateTextureUnit();return n}function rA(t,e){const n=this.cache;n[0]!==e&&(t.uniform1f(this.addr,e),n[0]=e)}function sA(t,e){const n=this.cache;if(void 0!==e.x)n[0]===e.x&&n[1]===e.y||(t.uniform2f(this.addr,e.x,e.y),n[0]=e.x,n[1]=e.y);else{if(eA(n,e))return;t.uniform2fv(this.addr,e),nA(n,e)}}function oA(t,e){const n=this.cache;if(void 0!==e.x)n[0]===e.x&&n[1]===e.y&&n[2]===e.z||(t.uniform3f(this.addr,e.x,e.y,e.z),n[0]=e.x,n[1]=e.y,n[2]=e.z);else if(void 0!==e.r)n[0]===e.r&&n[1]===e.g&&n[2]===e.b||(t.uniform3f(this.addr,e.r,e.g,e.b),n[0]=e.r,n[1]=e.g,n[2]=e.b);else{if(eA(n,e))return;t.uniform3fv(this.addr,e),nA(n,e)}}function aA(t,e){const n=this.cache;if(void 0!==e.x)n[0]===e.x&&n[1]===e.y&&n[2]===e.z&&n[3]===e.w||(t.uniform4f(this.addr,e.x,e.y,e.z,e.w),n[0]=e.x,n[1]=e.y,n[2]=e.z,n[3]=e.w);else{if(eA(n,e))return;t.uniform4fv(this.addr,e),nA(n,e)}}function lA(t,e){const n=this.cache,i=e.elements;if(void 0===i){if(eA(n,e))return;t.uniformMatrix2fv(this.addr,!1,e),nA(n,e)}else{if(eA(n,i))return;KT.set(i),t.uniformMatrix2fv(this.addr,!1,KT),nA(n,i)}}function cA(t,e){const n=this.cache,i=e.elements;if(void 0===i){if(eA(n,e))return;t.uniformMatrix3fv(this.addr,!1,e),nA(n,e)}else{if(eA(n,i))return;QT.set(i),t.uniformMatrix3fv(this.addr,!1,QT),nA(n,i)}}function uA(t,e){const n=this.cache,i=e.elements;if(void 0===i){if(eA(n,e))return;t.uniformMatrix4fv(this.addr,!1,e),nA(n,e)}else{if(eA(n,i))return;ZT.set(i),t.uniformMatrix4fv(this.addr,!1,ZT),nA(n,i)}}function hA(t,e){const n=this.cache;n[0]!==e&&(t.uniform1i(this.addr,e),n[0]=e)}function dA(t,e){const n=this.cache;eA(n,e)||(t.uniform2iv(this.addr,e),nA(n,e))}function pA(t,e){const n=this.cache;eA(n,e)||(t.uniform3iv(this.addr,e),nA(n,e))}function _A(t,e){const n=this.cache;eA(n,e)||(t.uniform4iv(this.addr,e),nA(n,e))}function mA(t,e){const n=this.cache;n[0]!==e&&(t.uniform1ui(this.addr,e),n[0]=e)}function fA(t,e){const n=this.cache;eA(n,e)||(t.uniform2uiv(this.addr,e),nA(n,e))}function gA(t,e){const n=this.cache;eA(n,e)||(t.uniform3uiv(this.addr,e),nA(n,e))}function vA(t,e){const n=this.cache;eA(n,e)||(t.uniform4uiv(this.addr,e),nA(n,e))}function yA(t,e,n){const i=this.cache,r=n.allocateTextureUnit();i[0]!==r&&(t.uniform1i(this.addr,r),i[0]=r),n.safeSetTexture2D(e||WT,r)}function xA(t,e,n){const i=this.cache,r=n.allocateTextureUnit();i[0]!==r&&(t.uniform1i(this.addr,r),i[0]=r),n.setTexture3D(e||XT,r)}function bA(t,e,n){const i=this.cache,r=n.allocateTextureUnit();i[0]!==r&&(t.uniform1i(this.addr,r),i[0]=r),n.safeSetTextureCube(e||YT,r)}function wA(t,e,n){const i=this.cache,r=n.allocateTextureUnit();i[0]!==r&&(t.uniform1i(this.addr,r),i[0]=r),n.setTexture2DArray(e||qT,r)}function TA(t,e){t.uniform1fv(this.addr,e)}function AA(t,e){const n=tA(e,this.size,2);t.uniform2fv(this.addr,n)}function EA(t,e){const n=tA(e,this.size,3);t.uniform3fv(this.addr,n)}function MA(t,e){const n=tA(e,this.size,4);t.uniform4fv(this.addr,n)}function SA(t,e){const n=tA(e,this.size,4);t.uniformMatrix2fv(this.addr,!1,n)}function CA(t,e){const n=tA(e,this.size,9);t.uniformMatrix3fv(this.addr,!1,n)}function NA(t,e){const n=tA(e,this.size,16);t.uniformMatrix4fv(this.addr,!1,n)}function LA(t,e){t.uniform1iv(this.addr,e)}function OA(t,e){t.uniform2iv(this.addr,e)}function RA(t,e){t.uniform3iv(this.addr,e)}function PA(t,e){t.uniform4iv(this.addr,e)}function IA(t,e){t.uniform1uiv(this.addr,e)}function FA(t,e){t.uniform2uiv(this.addr,e)}function DA(t,e){t.uniform3uiv(this.addr,e)}function kA(t,e){t.uniform4uiv(this.addr,e)}function BA(t,e,n){const i=e.length,r=iA(n,i);t.uniform1iv(this.addr,r);for(let t=0;t!==i;++t)n.safeSetTexture2D(e[t]||WT,r[t])}function zA(t,e,n){const i=e.length,r=iA(n,i);t.uniform1iv(this.addr,r);for(let t=0;t!==i;++t)n.safeSetTextureCube(e[t]||YT,r[t])}function UA(t,e,n){this.id=t,this.addr=n,this.cache=[],this.setValue=function(t){switch(t){case 5126:return rA;case 35664:return sA;case 35665:return oA;case 35666:return aA;case 35674:return lA;case 35675:return cA;case 35676:return uA;case 5124:case 35670:return hA;case 35667:case 35671:return dA;case 35668:case 35672:return pA;case 35669:case 35673:return _A;case 5125:return mA;case 36294:return fA;case 36295:return gA;case 36296:return vA;case 35678:case 36198:case 36298:case 36306:case 35682:return yA;case 35679:case 36299:case 36307:return xA;case 35680:case 36300:case 36308:case 36293:return bA;case 36289:case 36303:case 36311:case 36292:return wA}}(e.type)}function GA(t,e,n){this.id=t,this.addr=n,this.cache=[],this.size=e.size,this.setValue=function(t){switch(t){case 5126:return TA;case 35664:return AA;case 35665:return EA;case 35666:return MA;case 35674:return SA;case 35675:return CA;case 35676:return NA;case 5124:case 35670:return LA;case 35667:case 35671:return OA;case 35668:case 35672:return RA;case 35669:case 35673:return PA;case 5125:return IA;case 36294:return FA;case 36295:return DA;case 36296:return kA;case 35678:case 36198:case 36298:case 36306:case 35682:return BA;case 35680:case 36300:case 36308:case 36293:return zA}}(e.type)}function VA(t){this.id=t,this.seq=[],this.map={}}GA.prototype.updateCache=function(t){const e=this.cache;t instanceof Float32Array&&e.length!==t.length&&(this.cache=new Float32Array(t.length)),nA(e,t)},VA.prototype.setValue=function(t,e,n){const i=this.seq;for(let r=0,s=i.length;r!==s;++r){const s=i[r];s.setValue(t,e[s.id],n)}};const HA=/(\\\\w+)(\\\\])?(\\\\[|\\\\.)?/g;function jA(t,e){t.seq.push(e),t.map[e.id]=e}function WA(t,e,n){const i=t.name,r=i.length;for(HA.lastIndex=0;;){const s=HA.exec(i),o=HA.lastIndex;let a=s[1];const l=\\\\\\\"]\\\\\\\"===s[2],c=s[3];if(l&&(a|=0),void 0===c||\\\\\\\"[\\\\\\\"===c&&o+2===r){jA(n,void 0===c?new UA(a,t,e):new GA(a,t,e));break}{let t=n.map[a];void 0===t&&(t=new VA(a),jA(n,t)),n=t}}}function qA(t,e){this.seq=[],this.map={};const n=t.getProgramParameter(e,35718);for(let i=0;i<n;++i){const n=t.getActiveUniform(e,i);WA(n,t.getUniformLocation(e,n.name),this)}}function XA(t,e,n){const i=t.createShader(e);return t.shaderSource(i,n),t.compileShader(i),i}qA.prototype.setValue=function(t,e,n,i){const r=this.map[e];void 0!==r&&r.setValue(t,n,i)},qA.prototype.setOptional=function(t,e,n){const i=e[n];void 0!==i&&this.setValue(t,n,i)},qA.upload=function(t,e,n,i){for(let r=0,s=e.length;r!==s;++r){const s=e[r],o=n[s.id];!1!==o.needsUpdate&&s.setValue(t,o.value,i)}},qA.seqWithValue=function(t,e){const n=[];for(let i=0,r=t.length;i!==r;++i){const r=t[i];r.id in e&&n.push(r)}return n};let YA=0;function $A(t){switch(t){case Yy:return[\\\\\\\"Linear\\\\\\\",\\\\\\\"( value )\\\\\\\"];case $y:return[\\\\\\\"sRGB\\\\\\\",\\\\\\\"( value )\\\\\\\"];case Zy:return[\\\\\\\"RGBE\\\\\\\",\\\\\\\"( value )\\\\\\\"];case 3004:return[\\\\\\\"RGBM\\\\\\\",\\\\\\\"( value, 7.0 )\\\\\\\"];case 3005:return[\\\\\\\"RGBM\\\\\\\",\\\\\\\"( value, 16.0 )\\\\\\\"];case 3006:return[\\\\\\\"RGBD\\\\\\\",\\\\\\\"( value, 256.0 )\\\\\\\"];case Jy:return[\\\\\\\"Gamma\\\\\\\",\\\\\\\"( value, float( GAMMA_FACTOR ) )\\\\\\\"];case 3003:return[\\\\\\\"LogLuv\\\\\\\",\\\\\\\"( value )\\\\\\\"];default:return console.warn(\\\\\\\"THREE.WebGLProgram: Unsupported encoding:\\\\\\\",t),[\\\\\\\"Linear\\\\\\\",\\\\\\\"( value )\\\\\\\"]}}function JA(t,e,n){const i=t.getShaderParameter(e,35713),r=t.getShaderInfoLog(e).trim();return i&&\\\\\\\"\\\\\\\"===r?\\\\\\\"\\\\\\\":n.toUpperCase()+\\\\\\\"\\\\n\\\\n\\\\\\\"+r+\\\\\\\"\\\\n\\\\n\\\\\\\"+function(t){const e=t.split(\\\\\\\"\\\\n\\\\\\\");for(let t=0;t<e.length;t++)e[t]=t+1+\\\\\\\": \\\\\\\"+e[t];return e.join(\\\\\\\"\\\\n\\\\\\\")}(t.getShaderSource(e))}function ZA(t,e){const n=$A(e);return\\\\\\\"vec4 \\\\\\\"+t+\\\\\\\"( vec4 value ) { return \\\\\\\"+n[0]+\\\\\\\"ToLinear\\\\\\\"+n[1]+\\\\\\\"; }\\\\\\\"}function QA(t,e){const n=$A(e);return\\\\\\\"vec4 \\\\\\\"+t+\\\\\\\"( vec4 value ) { return LinearTo\\\\\\\"+n[0]+n[1]+\\\\\\\"; }\\\\\\\"}function KA(t,e){let n;switch(e){case 1:n=\\\\\\\"Linear\\\\\\\";break;case 2:n=\\\\\\\"Reinhard\\\\\\\";break;case 3:n=\\\\\\\"OptimizedCineon\\\\\\\";break;case 4:n=\\\\\\\"ACESFilmic\\\\\\\";break;case 5:n=\\\\\\\"Custom\\\\\\\";break;default:console.warn(\\\\\\\"THREE.WebGLProgram: Unsupported toneMapping:\\\\\\\",e),n=\\\\\\\"Linear\\\\\\\"}return\\\\\\\"vec3 \\\\\\\"+t+\\\\\\\"( vec3 color ) { return \\\\\\\"+n+\\\\\\\"ToneMapping( color ); }\\\\\\\"}function tE(t){return\\\\\\\"\\\\\\\"!==t}function eE(t,e){return t.replace(/NUM_DIR_LIGHTS/g,e.numDirLights).replace(/NUM_SPOT_LIGHTS/g,e.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g,e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,e.numPointLights).replace(/NUM_HEMI_LIGHTS/g,e.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,e.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS/g,e.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,e.numPointLightShadows)}function nE(t,e){return t.replace(/NUM_CLIPPING_PLANES/g,e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,e.numClippingPlanes-e.numClipIntersection)}const iE=/^[ \\\\t]*#include +<([\\\\w\\\\d./]+)>/gm;function rE(t){return t.replace(iE,sE)}function sE(t,e){const n=Kw[e];if(void 0===n)throw new Error(\\\\\\\"Can not resolve #include <\\\\\\\"+e+\\\\\\\">\\\\\\\");return rE(n)}const oE=/#pragma unroll_loop[\\\\s]+?for \\\\( int i \\\\= (\\\\d+)\\\\; i < (\\\\d+)\\\\; i \\\\+\\\\+ \\\\) \\\\{([\\\\s\\\\S]+?)(?=\\\\})\\\\}/g,aE=/#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 lE(t){return t.replace(aE,uE).replace(oE,cE)}function cE(t,e,n,i){return console.warn(\\\\\\\"WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.\\\\\\\"),uE(t,e,n,i)}function uE(t,e,n,i){let r=\\\\\\\"\\\\\\\";for(let t=parseInt(e);t<parseInt(n);t++)r+=i.replace(/\\\\[\\\\s*i\\\\s*\\\\]/g,\\\\\\\"[ \\\\\\\"+t+\\\\\\\" ]\\\\\\\").replace(/UNROLLED_LOOP_INDEX/g,t);return r}function hE(t){let e=\\\\\\\"precision \\\\\\\"+t.precision+\\\\\\\" float;\\\\nprecision \\\\\\\"+t.precision+\\\\\\\" int;\\\\\\\";return\\\\\\\"highp\\\\\\\"===t.precision?e+=\\\\\\\"\\\\n#define HIGH_PRECISION\\\\\\\":\\\\\\\"mediump\\\\\\\"===t.precision?e+=\\\\\\\"\\\\n#define MEDIUM_PRECISION\\\\\\\":\\\\\\\"lowp\\\\\\\"===t.precision&&(e+=\\\\\\\"\\\\n#define LOW_PRECISION\\\\\\\"),e}function dE(t,e,n,i){const r=t.getContext(),s=n.defines;let o=n.vertexShader,a=n.fragmentShader;const l=function(t){let e=\\\\\\\"SHADOWMAP_TYPE_BASIC\\\\\\\";return 1===t.shadowMapType?e=\\\\\\\"SHADOWMAP_TYPE_PCF\\\\\\\":2===t.shadowMapType?e=\\\\\\\"SHADOWMAP_TYPE_PCF_SOFT\\\\\\\":3===t.shadowMapType&&(e=\\\\\\\"SHADOWMAP_TYPE_VSM\\\\\\\"),e}(n),c=function(t){let e=\\\\\\\"ENVMAP_TYPE_CUBE\\\\\\\";if(t.envMap)switch(t.envMapMode){case fy:case gy:e=\\\\\\\"ENVMAP_TYPE_CUBE\\\\\\\";break;case xy:case by:e=\\\\\\\"ENVMAP_TYPE_CUBE_UV\\\\\\\"}return e}(n),u=function(t){let e=\\\\\\\"ENVMAP_MODE_REFLECTION\\\\\\\";if(t.envMap)switch(t.envMapMode){case gy:case by:e=\\\\\\\"ENVMAP_MODE_REFRACTION\\\\\\\"}return e}(n),h=function(t){let e=\\\\\\\"ENVMAP_BLENDING_NONE\\\\\\\";if(t.envMap)switch(t.combine){case 0:e=\\\\\\\"ENVMAP_BLENDING_MULTIPLY\\\\\\\";break;case 1:e=\\\\\\\"ENVMAP_BLENDING_MIX\\\\\\\";break;case 2:e=\\\\\\\"ENVMAP_BLENDING_ADD\\\\\\\"}return e}(n),d=t.gammaFactor>0?t.gammaFactor:1,p=n.isWebGL2?\\\\\\\"\\\\\\\":function(t){return[t.extensionDerivatives||t.envMapCubeUV||t.bumpMap||t.tangentSpaceNormalMap||t.clearcoatNormalMap||t.flatShading||\\\\\\\"physical\\\\\\\"===t.shaderID?\\\\\\\"#extension GL_OES_standard_derivatives : enable\\\\\\\":\\\\\\\"\\\\\\\",(t.extensionFragDepth||t.logarithmicDepthBuffer)&&t.rendererExtensionFragDepth?\\\\\\\"#extension GL_EXT_frag_depth : enable\\\\\\\":\\\\\\\"\\\\\\\",t.extensionDrawBuffers&&t.rendererExtensionDrawBuffers?\\\\\\\"#extension GL_EXT_draw_buffers : require\\\\\\\":\\\\\\\"\\\\\\\",(t.extensionShaderTextureLOD||t.envMap||t.transmission)&&t.rendererExtensionShaderTextureLod?\\\\\\\"#extension GL_EXT_shader_texture_lod : enable\\\\\\\":\\\\\\\"\\\\\\\"].filter(tE).join(\\\\\\\"\\\\n\\\\\\\")}(n),_=function(t){const e=[];for(const n in t){const i=t[n];!1!==i&&e.push(\\\\\\\"#define \\\\\\\"+n+\\\\\\\" \\\\\\\"+i)}return e.join(\\\\\\\"\\\\n\\\\\\\")}(s),m=r.createProgram();let f,g,v=n.glslVersion?\\\\\\\"#version \\\\\\\"+n.glslVersion+\\\\\\\"\\\\n\\\\\\\":\\\\\\\"\\\\\\\";n.isRawShaderMaterial?(f=[_].filter(tE).join(\\\\\\\"\\\\n\\\\\\\"),f.length>0&&(f+=\\\\\\\"\\\\n\\\\\\\"),g=[p,_].filter(tE).join(\\\\\\\"\\\\n\\\\\\\"),g.length>0&&(g+=\\\\\\\"\\\\n\\\\\\\")):(f=[hE(n),\\\\\\\"#define SHADER_NAME \\\\\\\"+n.shaderName,_,n.instancing?\\\\\\\"#define USE_INSTANCING\\\\\\\":\\\\\\\"\\\\\\\",n.instancingColor?\\\\\\\"#define USE_INSTANCING_COLOR\\\\\\\":\\\\\\\"\\\\\\\",n.supportsVertexTextures?\\\\\\\"#define VERTEX_TEXTURES\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"#define GAMMA_FACTOR \\\\\\\"+d,\\\\\\\"#define MAX_BONES \\\\\\\"+n.maxBones,n.useFog&&n.fog?\\\\\\\"#define USE_FOG\\\\\\\":\\\\\\\"\\\\\\\",n.useFog&&n.fogExp2?\\\\\\\"#define FOG_EXP2\\\\\\\":\\\\\\\"\\\\\\\",n.map?\\\\\\\"#define USE_MAP\\\\\\\":\\\\\\\"\\\\\\\",n.envMap?\\\\\\\"#define USE_ENVMAP\\\\\\\":\\\\\\\"\\\\\\\",n.envMap?\\\\\\\"#define \\\\\\\"+u:\\\\\\\"\\\\\\\",n.lightMap?\\\\\\\"#define USE_LIGHTMAP\\\\\\\":\\\\\\\"\\\\\\\",n.aoMap?\\\\\\\"#define USE_AOMAP\\\\\\\":\\\\\\\"\\\\\\\",n.emissiveMap?\\\\\\\"#define USE_EMISSIVEMAP\\\\\\\":\\\\\\\"\\\\\\\",n.bumpMap?\\\\\\\"#define USE_BUMPMAP\\\\\\\":\\\\\\\"\\\\\\\",n.normalMap?\\\\\\\"#define USE_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.normalMap&&n.objectSpaceNormalMap?\\\\\\\"#define OBJECTSPACE_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.normalMap&&n.tangentSpaceNormalMap?\\\\\\\"#define TANGENTSPACE_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoatMap?\\\\\\\"#define USE_CLEARCOATMAP\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoatRoughnessMap?\\\\\\\"#define USE_CLEARCOAT_ROUGHNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoatNormalMap?\\\\\\\"#define USE_CLEARCOAT_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.displacementMap&&n.supportsVertexTextures?\\\\\\\"#define USE_DISPLACEMENTMAP\\\\\\\":\\\\\\\"\\\\\\\",n.specularMap?\\\\\\\"#define USE_SPECULARMAP\\\\\\\":\\\\\\\"\\\\\\\",n.specularIntensityMap?\\\\\\\"#define USE_SPECULARINTENSITYMAP\\\\\\\":\\\\\\\"\\\\\\\",n.specularTintMap?\\\\\\\"#define USE_SPECULARTINTMAP\\\\\\\":\\\\\\\"\\\\\\\",n.roughnessMap?\\\\\\\"#define USE_ROUGHNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.metalnessMap?\\\\\\\"#define USE_METALNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.alphaMap?\\\\\\\"#define USE_ALPHAMAP\\\\\\\":\\\\\\\"\\\\\\\",n.transmission?\\\\\\\"#define USE_TRANSMISSION\\\\\\\":\\\\\\\"\\\\\\\",n.transmissionMap?\\\\\\\"#define USE_TRANSMISSIONMAP\\\\\\\":\\\\\\\"\\\\\\\",n.thicknessMap?\\\\\\\"#define USE_THICKNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.vertexTangents?\\\\\\\"#define USE_TANGENT\\\\\\\":\\\\\\\"\\\\\\\",n.vertexColors?\\\\\\\"#define USE_COLOR\\\\\\\":\\\\\\\"\\\\\\\",n.vertexAlphas?\\\\\\\"#define USE_COLOR_ALPHA\\\\\\\":\\\\\\\"\\\\\\\",n.vertexUvs?\\\\\\\"#define USE_UV\\\\\\\":\\\\\\\"\\\\\\\",n.uvsVertexOnly?\\\\\\\"#define UVS_VERTEX_ONLY\\\\\\\":\\\\\\\"\\\\\\\",n.flatShading?\\\\\\\"#define FLAT_SHADED\\\\\\\":\\\\\\\"\\\\\\\",n.skinning?\\\\\\\"#define USE_SKINNING\\\\\\\":\\\\\\\"\\\\\\\",n.useVertexTexture?\\\\\\\"#define BONE_TEXTURE\\\\\\\":\\\\\\\"\\\\\\\",n.morphTargets?\\\\\\\"#define USE_MORPHTARGETS\\\\\\\":\\\\\\\"\\\\\\\",n.morphNormals&&!1===n.flatShading?\\\\\\\"#define USE_MORPHNORMALS\\\\\\\":\\\\\\\"\\\\\\\",n.morphTargets&&n.isWebGL2?\\\\\\\"#define MORPHTARGETS_TEXTURE\\\\\\\":\\\\\\\"\\\\\\\",n.morphTargets&&n.isWebGL2?\\\\\\\"#define MORPHTARGETS_COUNT \\\\\\\"+n.morphTargetsCount:\\\\\\\"\\\\\\\",n.doubleSided?\\\\\\\"#define DOUBLE_SIDED\\\\\\\":\\\\\\\"\\\\\\\",n.flipSided?\\\\\\\"#define FLIP_SIDED\\\\\\\":\\\\\\\"\\\\\\\",n.shadowMapEnabled?\\\\\\\"#define USE_SHADOWMAP\\\\\\\":\\\\\\\"\\\\\\\",n.shadowMapEnabled?\\\\\\\"#define \\\\\\\"+l:\\\\\\\"\\\\\\\",n.sizeAttenuation?\\\\\\\"#define USE_SIZEATTENUATION\\\\\\\":\\\\\\\"\\\\\\\",n.logarithmicDepthBuffer?\\\\\\\"#define USE_LOGDEPTHBUF\\\\\\\":\\\\\\\"\\\\\\\",n.logarithmicDepthBuffer&&n.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\\\\\\\",\\\\\\\"\\\\tattribute mat4 instanceMatrix;\\\\\\\",\\\\\\\"#endif\\\\\\\",\\\\\\\"#ifdef USE_INSTANCING_COLOR\\\\\\\",\\\\\\\"\\\\tattribute vec3 instanceColor;\\\\\\\",\\\\\\\"#endif\\\\\\\",\\\\\\\"attribute vec3 position;\\\\\\\",\\\\\\\"attribute vec3 normal;\\\\\\\",\\\\\\\"attribute vec2 uv;\\\\\\\",\\\\\\\"#ifdef USE_TANGENT\\\\\\\",\\\\\\\"\\\\tattribute vec4 tangent;\\\\\\\",\\\\\\\"#endif\\\\\\\",\\\\\\\"#if defined( USE_COLOR_ALPHA )\\\\\\\",\\\\\\\"\\\\tattribute vec4 color;\\\\\\\",\\\\\\\"#elif defined( USE_COLOR )\\\\\\\",\\\\\\\"\\\\tattribute vec3 color;\\\\\\\",\\\\\\\"#endif\\\\\\\",\\\\\\\"#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )\\\\\\\",\\\\\\\"\\\\tattribute vec3 morphTarget0;\\\\\\\",\\\\\\\"\\\\tattribute vec3 morphTarget1;\\\\\\\",\\\\\\\"\\\\tattribute vec3 morphTarget2;\\\\\\\",\\\\\\\"\\\\tattribute vec3 morphTarget3;\\\\\\\",\\\\\\\"\\\\t#ifdef USE_MORPHNORMALS\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphNormal0;\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphNormal1;\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphNormal2;\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphNormal3;\\\\\\\",\\\\\\\"\\\\t#else\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphTarget4;\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphTarget5;\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphTarget6;\\\\\\\",\\\\\\\"\\\\t\\\\tattribute vec3 morphTarget7;\\\\\\\",\\\\\\\"\\\\t#endif\\\\\\\",\\\\\\\"#endif\\\\\\\",\\\\\\\"#ifdef USE_SKINNING\\\\\\\",\\\\\\\"\\\\tattribute vec4 skinIndex;\\\\\\\",\\\\\\\"\\\\tattribute vec4 skinWeight;\\\\\\\",\\\\\\\"#endif\\\\\\\",\\\\\\\"\\\\n\\\\\\\"].filter(tE).join(\\\\\\\"\\\\n\\\\\\\"),g=[p,hE(n),\\\\\\\"#define SHADER_NAME \\\\\\\"+n.shaderName,_,\\\\\\\"#define GAMMA_FACTOR \\\\\\\"+d,n.useFog&&n.fog?\\\\\\\"#define USE_FOG\\\\\\\":\\\\\\\"\\\\\\\",n.useFog&&n.fogExp2?\\\\\\\"#define FOG_EXP2\\\\\\\":\\\\\\\"\\\\\\\",n.map?\\\\\\\"#define USE_MAP\\\\\\\":\\\\\\\"\\\\\\\",n.matcap?\\\\\\\"#define USE_MATCAP\\\\\\\":\\\\\\\"\\\\\\\",n.envMap?\\\\\\\"#define USE_ENVMAP\\\\\\\":\\\\\\\"\\\\\\\",n.envMap?\\\\\\\"#define \\\\\\\"+c:\\\\\\\"\\\\\\\",n.envMap?\\\\\\\"#define \\\\\\\"+u:\\\\\\\"\\\\\\\",n.envMap?\\\\\\\"#define \\\\\\\"+h:\\\\\\\"\\\\\\\",n.lightMap?\\\\\\\"#define USE_LIGHTMAP\\\\\\\":\\\\\\\"\\\\\\\",n.aoMap?\\\\\\\"#define USE_AOMAP\\\\\\\":\\\\\\\"\\\\\\\",n.emissiveMap?\\\\\\\"#define USE_EMISSIVEMAP\\\\\\\":\\\\\\\"\\\\\\\",n.bumpMap?\\\\\\\"#define USE_BUMPMAP\\\\\\\":\\\\\\\"\\\\\\\",n.normalMap?\\\\\\\"#define USE_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.normalMap&&n.objectSpaceNormalMap?\\\\\\\"#define OBJECTSPACE_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.normalMap&&n.tangentSpaceNormalMap?\\\\\\\"#define TANGENTSPACE_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoat?\\\\\\\"#define USE_CLEARCOAT\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoatMap?\\\\\\\"#define USE_CLEARCOATMAP\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoatRoughnessMap?\\\\\\\"#define USE_CLEARCOAT_ROUGHNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.clearcoatNormalMap?\\\\\\\"#define USE_CLEARCOAT_NORMALMAP\\\\\\\":\\\\\\\"\\\\\\\",n.specularMap?\\\\\\\"#define USE_SPECULARMAP\\\\\\\":\\\\\\\"\\\\\\\",n.specularIntensityMap?\\\\\\\"#define USE_SPECULARINTENSITYMAP\\\\\\\":\\\\\\\"\\\\\\\",n.specularTintMap?\\\\\\\"#define USE_SPECULARTINTMAP\\\\\\\":\\\\\\\"\\\\\\\",n.roughnessMap?\\\\\\\"#define USE_ROUGHNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.metalnessMap?\\\\\\\"#define USE_METALNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.alphaMap?\\\\\\\"#define USE_ALPHAMAP\\\\\\\":\\\\\\\"\\\\\\\",n.alphaTest?\\\\\\\"#define USE_ALPHATEST\\\\\\\":\\\\\\\"\\\\\\\",n.sheen?\\\\\\\"#define USE_SHEEN\\\\\\\":\\\\\\\"\\\\\\\",n.transmission?\\\\\\\"#define USE_TRANSMISSION\\\\\\\":\\\\\\\"\\\\\\\",n.transmissionMap?\\\\\\\"#define USE_TRANSMISSIONMAP\\\\\\\":\\\\\\\"\\\\\\\",n.thicknessMap?\\\\\\\"#define USE_THICKNESSMAP\\\\\\\":\\\\\\\"\\\\\\\",n.vertexTangents?\\\\\\\"#define USE_TANGENT\\\\\\\":\\\\\\\"\\\\\\\",n.vertexColors||n.instancingColor?\\\\\\\"#define USE_COLOR\\\\\\\":\\\\\\\"\\\\\\\",n.vertexAlphas?\\\\\\\"#define USE_COLOR_ALPHA\\\\\\\":\\\\\\\"\\\\\\\",n.vertexUvs?\\\\\\\"#define USE_UV\\\\\\\":\\\\\\\"\\\\\\\",n.uvsVertexOnly?\\\\\\\"#define UVS_VERTEX_ONLY\\\\\\\":\\\\\\\"\\\\\\\",n.gradientMap?\\\\\\\"#define USE_GRADIENTMAP\\\\\\\":\\\\\\\"\\\\\\\",n.flatShading?\\\\\\\"#define FLAT_SHADED\\\\\\\":\\\\\\\"\\\\\\\",n.doubleSided?\\\\\\\"#define DOUBLE_SIDED\\\\\\\":\\\\\\\"\\\\\\\",n.flipSided?\\\\\\\"#define FLIP_SIDED\\\\\\\":\\\\\\\"\\\\\\\",n.shadowMapEnabled?\\\\\\\"#define USE_SHADOWMAP\\\\\\\":\\\\\\\"\\\\\\\",n.shadowMapEnabled?\\\\\\\"#define \\\\\\\"+l:\\\\\\\"\\\\\\\",n.premultipliedAlpha?\\\\\\\"#define PREMULTIPLIED_ALPHA\\\\\\\":\\\\\\\"\\\\\\\",n.physicallyCorrectLights?\\\\\\\"#define PHYSICALLY_CORRECT_LIGHTS\\\\\\\":\\\\\\\"\\\\\\\",n.logarithmicDepthBuffer?\\\\\\\"#define USE_LOGDEPTHBUF\\\\\\\":\\\\\\\"\\\\\\\",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?\\\\\\\"#define USE_LOGDEPTHBUF_EXT\\\\\\\":\\\\\\\"\\\\\\\",(n.extensionShaderTextureLOD||n.envMap)&&n.rendererExtensionShaderTextureLod?\\\\\\\"#define TEXTURE_LOD_EXT\\\\\\\":\\\\\\\"\\\\\\\",\\\\\\\"uniform mat4 viewMatrix;\\\\\\\",\\\\\\\"uniform vec3 cameraPosition;\\\\\\\",\\\\\\\"uniform bool isOrthographic;\\\\\\\",0!==n.toneMapping?\\\\\\\"#define TONE_MAPPING\\\\\\\":\\\\\\\"\\\\\\\",0!==n.toneMapping?Kw.tonemapping_pars_fragment:\\\\\\\"\\\\\\\",0!==n.toneMapping?KA(\\\\\\\"toneMapping\\\\\\\",n.toneMapping):\\\\\\\"\\\\\\\",n.dithering?\\\\\\\"#define DITHERING\\\\\\\":\\\\\\\"\\\\\\\",n.format===ky?\\\\\\\"#define OPAQUE\\\\\\\":\\\\\\\"\\\\\\\",Kw.encodings_pars_fragment,n.map?ZA(\\\\\\\"mapTexelToLinear\\\\\\\",n.mapEncoding):\\\\\\\"\\\\\\\",n.matcap?ZA(\\\\\\\"matcapTexelToLinear\\\\\\\",n.matcapEncoding):\\\\\\\"\\\\\\\",n.envMap?ZA(\\\\\\\"envMapTexelToLinear\\\\\\\",n.envMapEncoding):\\\\\\\"\\\\\\\",n.emissiveMap?ZA(\\\\\\\"emissiveMapTexelToLinear\\\\\\\",n.emissiveMapEncoding):\\\\\\\"\\\\\\\",n.specularTintMap?ZA(\\\\\\\"specularTintMapTexelToLinear\\\\\\\",n.specularTintMapEncoding):\\\\\\\"\\\\\\\",n.lightMap?ZA(\\\\\\\"lightMapTexelToLinear\\\\\\\",n.lightMapEncoding):\\\\\\\"\\\\\\\",QA(\\\\\\\"linearToOutputTexel\\\\\\\",n.outputEncoding),n.depthPacking?\\\\\\\"#define DEPTH_PACKING \\\\\\\"+n.depthPacking:\\\\\\\"\\\\\\\",\\\\\\\"\\\\n\\\\\\\"].filter(tE).join(\\\\\\\"\\\\n\\\\\\\")),o=rE(o),o=eE(o,n),o=nE(o,n),a=rE(a),a=eE(a,n),a=nE(a,n),o=lE(o),a=lE(a),n.isWebGL2&&!0!==n.isRawShaderMaterial&&(v=\\\\\\\"#version 300 es\\\\n\\\\\\\",f=[\\\\\\\"precision mediump sampler2DArray;\\\\\\\",\\\\\\\"#define attribute in\\\\\\\",\\\\\\\"#define varying out\\\\\\\",\\\\\\\"#define texture2D texture\\\\\\\"].join(\\\\\\\"\\\\n\\\\\\\")+\\\\\\\"\\\\n\\\\\\\"+f,g=[\\\\\\\"#define varying in\\\\\\\",n.glslVersion===ex?\\\\\\\"\\\\\\\":\\\\\\\"out highp vec4 pc_fragColor;\\\\\\\",n.glslVersion===ex?\\\\\\\"\\\\\\\":\\\\\\\"#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(\\\\\\\"\\\\n\\\\\\\")+\\\\\\\"\\\\n\\\\\\\"+g);const y=v+g+a,x=XA(r,35633,v+f+o),b=XA(r,35632,y);if(r.attachShader(m,x),r.attachShader(m,b),void 0!==n.index0AttributeName?r.bindAttribLocation(m,0,n.index0AttributeName):!0===n.morphTargets&&r.bindAttribLocation(m,0,\\\\\\\"position\\\\\\\"),r.linkProgram(m),t.debug.checkShaderErrors){const t=r.getProgramInfoLog(m).trim(),e=r.getShaderInfoLog(x).trim(),n=r.getShaderInfoLog(b).trim();let i=!0,s=!0;if(!1===r.getProgramParameter(m,35714)){i=!1;const e=JA(r,x,\\\\\\\"vertex\\\\\\\"),n=JA(r,b,\\\\\\\"fragment\\\\\\\");console.error(\\\\\\\"THREE.WebGLProgram: Shader Error \\\\\\\"+r.getError()+\\\\\\\" - VALIDATE_STATUS \\\\\\\"+r.getProgramParameter(m,35715)+\\\\\\\"\\\\n\\\\nProgram Info Log: \\\\\\\"+t+\\\\\\\"\\\\n\\\\\\\"+e+\\\\\\\"\\\\n\\\\\\\"+n)}else\\\\\\\"\\\\\\\"!==t?console.warn(\\\\\\\"THREE.WebGLProgram: Program Info Log:\\\\\\\",t):\\\\\\\"\\\\\\\"!==e&&\\\\\\\"\\\\\\\"!==n||(s=!1);s&&(this.diagnostics={runnable:i,programLog:t,vertexShader:{log:e,prefix:f},fragmentShader:{log:n,prefix:g}})}let w,T;return r.deleteShader(x),r.deleteShader(b),this.getUniforms=function(){return void 0===w&&(w=new qA(r,m)),w},this.getAttributes=function(){return void 0===T&&(T=function(t,e){const n={},i=t.getProgramParameter(e,35721);for(let r=0;r<i;r++){const i=t.getActiveAttrib(e,r),s=i.name;let o=1;35674===i.type&&(o=2),35675===i.type&&(o=3),35676===i.type&&(o=4),n[s]={type:i.type,location:t.getAttribLocation(e,s),locationSize:o}}return n}(r,m)),T},this.destroy=function(){i.releaseStatesOfProgram(this),r.deleteProgram(m),this.program=void 0},this.name=n.shaderName,this.id=YA++,this.cacheKey=e,this.usedTimes=1,this.program=m,this.vertexShader=x,this.fragmentShader=b,this}function pE(t,e,n,i,r,s,o){const a=[],l=r.isWebGL2,c=r.logarithmicDepthBuffer,u=r.floatVertexTextures,h=r.maxVertexUniforms,d=r.vertexTextures;let p=r.precision;const _={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\\\\\\\"},m=[\\\\\\\"precision\\\\\\\",\\\\\\\"isWebGL2\\\\\\\",\\\\\\\"supportsVertexTextures\\\\\\\",\\\\\\\"outputEncoding\\\\\\\",\\\\\\\"instancing\\\\\\\",\\\\\\\"instancingColor\\\\\\\",\\\\\\\"map\\\\\\\",\\\\\\\"mapEncoding\\\\\\\",\\\\\\\"matcap\\\\\\\",\\\\\\\"matcapEncoding\\\\\\\",\\\\\\\"envMap\\\\\\\",\\\\\\\"envMapMode\\\\\\\",\\\\\\\"envMapEncoding\\\\\\\",\\\\\\\"envMapCubeUV\\\\\\\",\\\\\\\"lightMap\\\\\\\",\\\\\\\"lightMapEncoding\\\\\\\",\\\\\\\"aoMap\\\\\\\",\\\\\\\"emissiveMap\\\\\\\",\\\\\\\"emissiveMapEncoding\\\\\\\",\\\\\\\"bumpMap\\\\\\\",\\\\\\\"normalMap\\\\\\\",\\\\\\\"objectSpaceNormalMap\\\\\\\",\\\\\\\"tangentSpaceNormalMap\\\\\\\",\\\\\\\"clearcoat\\\\\\\",\\\\\\\"clearcoatMap\\\\\\\",\\\\\\\"clearcoatRoughnessMap\\\\\\\",\\\\\\\"clearcoatNormalMap\\\\\\\",\\\\\\\"displacementMap\\\\\\\",\\\\\\\"specularMap\\\\\\\",\\\\\\\"specularIntensityMap\\\\\\\",\\\\\\\"specularTintMap\\\\\\\",\\\\\\\"specularTintMapEncoding\\\\\\\",\\\\\\\"roughnessMap\\\\\\\",\\\\\\\"metalnessMap\\\\\\\",\\\\\\\"gradientMap\\\\\\\",\\\\\\\"alphaMap\\\\\\\",\\\\\\\"alphaTest\\\\\\\",\\\\\\\"combine\\\\\\\",\\\\\\\"vertexColors\\\\\\\",\\\\\\\"vertexAlphas\\\\\\\",\\\\\\\"vertexTangents\\\\\\\",\\\\\\\"vertexUvs\\\\\\\",\\\\\\\"uvsVertexOnly\\\\\\\",\\\\\\\"fog\\\\\\\",\\\\\\\"useFog\\\\\\\",\\\\\\\"fogExp2\\\\\\\",\\\\\\\"flatShading\\\\\\\",\\\\\\\"sizeAttenuation\\\\\\\",\\\\\\\"logarithmicDepthBuffer\\\\\\\",\\\\\\\"skinning\\\\\\\",\\\\\\\"maxBones\\\\\\\",\\\\\\\"useVertexTexture\\\\\\\",\\\\\\\"morphTargets\\\\\\\",\\\\\\\"morphNormals\\\\\\\",\\\\\\\"morphTargetsCount\\\\\\\",\\\\\\\"premultipliedAlpha\\\\\\\",\\\\\\\"numDirLights\\\\\\\",\\\\\\\"numPointLights\\\\\\\",\\\\\\\"numSpotLights\\\\\\\",\\\\\\\"numHemiLights\\\\\\\",\\\\\\\"numRectAreaLights\\\\\\\",\\\\\\\"numDirLightShadows\\\\\\\",\\\\\\\"numPointLightShadows\\\\\\\",\\\\\\\"numSpotLightShadows\\\\\\\",\\\\\\\"shadowMapEnabled\\\\\\\",\\\\\\\"shadowMapType\\\\\\\",\\\\\\\"toneMapping\\\\\\\",\\\\\\\"physicallyCorrectLights\\\\\\\",\\\\\\\"doubleSided\\\\\\\",\\\\\\\"flipSided\\\\\\\",\\\\\\\"numClippingPlanes\\\\\\\",\\\\\\\"numClipIntersection\\\\\\\",\\\\\\\"depthPacking\\\\\\\",\\\\\\\"dithering\\\\\\\",\\\\\\\"format\\\\\\\",\\\\\\\"sheen\\\\\\\",\\\\\\\"transmission\\\\\\\",\\\\\\\"transmissionMap\\\\\\\",\\\\\\\"thicknessMap\\\\\\\"];function f(t){let e;return t&&t.isTexture?e=t.encoding:t&&t.isWebGLRenderTarget?(console.warn(\\\\\\\"THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead.\\\\\\\"),e=t.texture.encoding):e=Yy,l&&t&&t.isTexture&&t.format===By&&t.type===Oy&&t.encoding===$y&&(e=Yy),e}return{getParameters:function(s,a,m,g,v){const y=g.fog,x=s.isMeshStandardMaterial?g.environment:null,b=(s.isMeshStandardMaterial?n:e).get(s.envMap||x),w=_[s.type],T=v.isSkinnedMesh?function(t){const e=t.skeleton.bones;if(u)return 1024;{const t=h,n=Math.floor((t-20)/4),i=Math.min(n,e.length);return i<e.length?(console.warn(\\\\\\\"THREE.WebGLRenderer: Skeleton has \\\\\\\"+e.length+\\\\\\\" bones. This GPU supports \\\\\\\"+i+\\\\\\\".\\\\\\\"),0):i}}(v):0;let A,E;if(null!==s.precision&&(p=r.getMaxPrecision(s.precision),p!==s.precision&&console.warn(\\\\\\\"THREE.WebGLProgram.getParameters:\\\\\\\",s.precision,\\\\\\\"not supported, using\\\\\\\",p,\\\\\\\"instead.\\\\\\\")),w){const t=eT[w];A=t.vertexShader,E=t.fragmentShader}else A=s.vertexShader,E=s.fragmentShader;const M=t.getRenderTarget(),S=s.alphaTest>0,C=s.clearcoat>0;return{isWebGL2:l,shaderID:w,shaderName:s.type,vertexShader:A,fragmentShader:E,defines:s.defines,isRawShaderMaterial:!0===s.isRawShaderMaterial,glslVersion:s.glslVersion,precision:p,instancing:!0===v.isInstancedMesh,instancingColor:!0===v.isInstancedMesh&&null!==v.instanceColor,supportsVertexTextures:d,outputEncoding:null!==M?f(M.texture):t.outputEncoding,map:!!s.map,mapEncoding:f(s.map),matcap:!!s.matcap,matcapEncoding:f(s.matcap),envMap:!!b,envMapMode:b&&b.mapping,envMapEncoding:f(b),envMapCubeUV:!!b&&(b.mapping===xy||b.mapping===by),lightMap:!!s.lightMap,lightMapEncoding:f(s.lightMap),aoMap:!!s.aoMap,emissiveMap:!!s.emissiveMap,emissiveMapEncoding:f(s.emissiveMap),bumpMap:!!s.bumpMap,normalMap:!!s.normalMap,objectSpaceNormalMap:1===s.normalMapType,tangentSpaceNormalMap:0===s.normalMapType,clearcoat:C,clearcoatMap:C&&!!s.clearcoatMap,clearcoatRoughnessMap:C&&!!s.clearcoatRoughnessMap,clearcoatNormalMap:C&&!!s.clearcoatNormalMap,displacementMap:!!s.displacementMap,roughnessMap:!!s.roughnessMap,metalnessMap:!!s.metalnessMap,specularMap:!!s.specularMap,specularIntensityMap:!!s.specularIntensityMap,specularTintMap:!!s.specularTintMap,specularTintMapEncoding:f(s.specularTintMap),alphaMap:!!s.alphaMap,alphaTest:S,gradientMap:!!s.gradientMap,sheen:s.sheen>0,transmission:s.transmission>0,transmissionMap:!!s.transmissionMap,thicknessMap:!!s.thicknessMap,combine:s.combine,vertexTangents:!!s.normalMap&&!!v.geometry&&!!v.geometry.attributes.tangent,vertexColors:s.vertexColors,vertexAlphas:!0===s.vertexColors&&!!v.geometry&&!!v.geometry.attributes.color&&4===v.geometry.attributes.color.itemSize,vertexUvs:!!(s.map||s.bumpMap||s.normalMap||s.specularMap||s.alphaMap||s.emissiveMap||s.roughnessMap||s.metalnessMap||s.clearcoatMap||s.clearcoatRoughnessMap||s.clearcoatNormalMap||s.displacementMap||s.transmissionMap||s.thicknessMap||s.specularIntensityMap||s.specularTintMap),uvsVertexOnly:!(s.map||s.bumpMap||s.normalMap||s.specularMap||s.alphaMap||s.emissiveMap||s.roughnessMap||s.metalnessMap||s.clearcoatNormalMap||s.transmission>0||s.transmissionMap||s.thicknessMap||s.specularIntensityMap||s.specularTintMap||!s.displacementMap),fog:!!y,useFog:s.fog,fogExp2:y&&y.isFogExp2,flatShading:!!s.flatShading,sizeAttenuation:s.sizeAttenuation,logarithmicDepthBuffer:c,skinning:!0===v.isSkinnedMesh&&T>0,maxBones:T,useVertexTexture:u,morphTargets:!!v.geometry&&!!v.geometry.morphAttributes.position,morphNormals:!!v.geometry&&!!v.geometry.morphAttributes.normal,morphTargetsCount:v.geometry&&v.geometry.morphAttributes.position?v.geometry.morphAttributes.position.length:0,numDirLights:a.directional.length,numPointLights:a.point.length,numSpotLights:a.spot.length,numRectAreaLights:a.rectArea.length,numHemiLights:a.hemi.length,numDirLightShadows:a.directionalShadowMap.length,numPointLightShadows:a.pointShadowMap.length,numSpotLightShadows:a.spotShadowMap.length,numClippingPlanes:o.numPlanes,numClipIntersection:o.numIntersection,format:s.format,dithering:s.dithering,shadowMapEnabled:t.shadowMap.enabled&&m.length>0,shadowMapType:t.shadowMap.type,toneMapping:s.toneMapped?t.toneMapping:0,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:s.premultipliedAlpha,doubleSided:2===s.side,flipSided:1===s.side,depthPacking:void 0!==s.depthPacking&&s.depthPacking,index0AttributeName:s.index0AttributeName,extensionDerivatives:s.extensions&&s.extensions.derivatives,extensionFragDepth:s.extensions&&s.extensions.fragDepth,extensionDrawBuffers:s.extensions&&s.extensions.drawBuffers,extensionShaderTextureLOD:s.extensions&&s.extensions.shaderTextureLOD,rendererExtensionFragDepth:l||i.has(\\\\\\\"EXT_frag_depth\\\\\\\"),rendererExtensionDrawBuffers:l||i.has(\\\\\\\"WEBGL_draw_buffers\\\\\\\"),rendererExtensionShaderTextureLod:l||i.has(\\\\\\\"EXT_shader_texture_lod\\\\\\\"),customProgramCacheKey:s.customProgramCacheKey()}},getProgramCacheKey:function(e){const n=[];if(e.shaderID?n.push(e.shaderID):(n.push(e.fragmentShader),n.push(e.vertexShader)),void 0!==e.defines)for(const t in e.defines)n.push(t),n.push(e.defines[t]);if(!1===e.isRawShaderMaterial){for(let t=0;t<m.length;t++)n.push(e[m[t]]);n.push(t.outputEncoding),n.push(t.gammaFactor)}return n.push(e.customProgramCacheKey),n.join()},getUniforms:function(t){const e=_[t.type];let n;if(e){const t=eT[e];n=Fw.clone(t.uniforms)}else n=t.uniforms;return n},acquireProgram:function(e,n){let i;for(let t=0,e=a.length;t<e;t++){const e=a[t];if(e.cacheKey===n){i=e,++i.usedTimes;break}}return void 0===i&&(i=new dE(t,n,e,s),a.push(i)),i},releaseProgram:function(t){if(0==--t.usedTimes){const e=a.indexOf(t);a[e]=a[a.length-1],a.pop(),t.destroy()}},programs:a}}function _E(){let t=new WeakMap;return{get:function(e){let n=t.get(e);return void 0===n&&(n={},t.set(e,n)),n},remove:function(e){t.delete(e)},update:function(e,n,i){t.get(e)[n]=i},dispose:function(){t=new WeakMap}}}function mE(t,e){return t.groupOrder!==e.groupOrder?t.groupOrder-e.groupOrder:t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.program!==e.program?t.program.id-e.program.id:t.material.id!==e.material.id?t.material.id-e.material.id:t.z!==e.z?t.z-e.z:t.id-e.id}function fE(t,e){return t.groupOrder!==e.groupOrder?t.groupOrder-e.groupOrder:t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.z!==e.z?e.z-t.z:t.id-e.id}function gE(t){const e=[];let n=0;const i=[],r=[],s=[],o={id:-1};function a(i,r,s,a,l,c){let u=e[n];const h=t.get(s);return void 0===u?(u={id:i.id,object:i,geometry:r,material:s,program:h.program||o,groupOrder:a,renderOrder:i.renderOrder,z:l,group:c},e[n]=u):(u.id=i.id,u.object=i,u.geometry=r,u.material=s,u.program=h.program||o,u.groupOrder=a,u.renderOrder=i.renderOrder,u.z=l,u.group=c),n++,u}return{opaque:i,transmissive:r,transparent:s,init:function(){n=0,i.length=0,r.length=0,s.length=0},push:function(t,e,n,o,l,c){const u=a(t,e,n,o,l,c);n.transmission>0?r.push(u):!0===n.transparent?s.push(u):i.push(u)},unshift:function(t,e,n,o,l,c){const u=a(t,e,n,o,l,c);n.transmission>0?r.unshift(u):!0===n.transparent?s.unshift(u):i.unshift(u)},finish:function(){for(let t=n,i=e.length;t<i;t++){const n=e[t];if(null===n.id)break;n.id=null,n.object=null,n.geometry=null,n.material=null,n.program=null,n.group=null}},sort:function(t,e){i.length>1&&i.sort(t||mE),r.length>1&&r.sort(e||fE),s.length>1&&s.sort(e||fE)}}}function vE(t){let e=new WeakMap;return{get:function(n,i){let r;return!1===e.has(n)?(r=new gE(t),e.set(n,[r])):i>=e.get(n).length?(r=new gE(t),e.get(n).push(r)):r=e.get(n)[i],r},dispose:function(){e=new WeakMap}}}function yE(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case\\\\\\\"DirectionalLight\\\\\\\":n={direction:new Nx,color:new Zb};break;case\\\\\\\"SpotLight\\\\\\\":n={position:new Nx,direction:new Nx,color:new Zb,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case\\\\\\\"PointLight\\\\\\\":n={position:new Nx,color:new Zb,distance:0,decay:0};break;case\\\\\\\"HemisphereLight\\\\\\\":n={direction:new Nx,skyColor:new Zb,groundColor:new Zb};break;case\\\\\\\"RectAreaLight\\\\\\\":n={color:new Zb,position:new Nx,halfWidth:new Nx,halfHeight:new Nx}}return t[e.id]=n,n}}}let xE=0;function bE(t,e){return(e.castShadow?1:0)-(t.castShadow?1:0)}function wE(t,e){const n=new yE,i=function(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case\\\\\\\"DirectionalLight\\\\\\\":case\\\\\\\"SpotLight\\\\\\\":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new fx};break;case\\\\\\\"PointLight\\\\\\\":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new fx,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=n,n}}}(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]};for(let t=0;t<9;t++)r.probe.push(new Nx);const s=new Nx,o=new ob,a=new ob;return{setup:function(s,o){let a=0,l=0,c=0;for(let t=0;t<9;t++)r.probe[t].set(0,0,0);let u=0,h=0,d=0,p=0,_=0,m=0,f=0,g=0;s.sort(bE);const v=!0!==o?Math.PI:1;for(let t=0,e=s.length;t<e;t++){const e=s[t],o=e.color,y=e.intensity,x=e.distance,b=e.shadow&&e.shadow.map?e.shadow.map.texture:null;if(e.isAmbientLight)a+=o.r*y*v,l+=o.g*y*v,c+=o.b*y*v;else if(e.isLightProbe)for(let t=0;t<9;t++)r.probe[t].addScaledVector(e.sh.coefficients[t],y);else if(e.isDirectionalLight){const t=n.get(e);if(t.color.copy(e.color).multiplyScalar(e.intensity*v),e.castShadow){const t=e.shadow,n=i.get(e);n.shadowBias=t.bias,n.shadowNormalBias=t.normalBias,n.shadowRadius=t.radius,n.shadowMapSize=t.mapSize,r.directionalShadow[u]=n,r.directionalShadowMap[u]=b,r.directionalShadowMatrix[u]=e.shadow.matrix,m++}r.directional[u]=t,u++}else if(e.isSpotLight){const t=n.get(e);if(t.position.setFromMatrixPosition(e.matrixWorld),t.color.copy(o).multiplyScalar(y*v),t.distance=x,t.coneCos=Math.cos(e.angle),t.penumbraCos=Math.cos(e.angle*(1-e.penumbra)),t.decay=e.decay,e.castShadow){const t=e.shadow,n=i.get(e);n.shadowBias=t.bias,n.shadowNormalBias=t.normalBias,n.shadowRadius=t.radius,n.shadowMapSize=t.mapSize,r.spotShadow[d]=n,r.spotShadowMap[d]=b,r.spotShadowMatrix[d]=e.shadow.matrix,g++}r.spot[d]=t,d++}else if(e.isRectAreaLight){const t=n.get(e);t.color.copy(o).multiplyScalar(y),t.halfWidth.set(.5*e.width,0,0),t.halfHeight.set(0,.5*e.height,0),r.rectArea[p]=t,p++}else if(e.isPointLight){const t=n.get(e);if(t.color.copy(e.color).multiplyScalar(e.intensity*v),t.distance=e.distance,t.decay=e.decay,e.castShadow){const t=e.shadow,n=i.get(e);n.shadowBias=t.bias,n.shadowNormalBias=t.normalBias,n.shadowRadius=t.radius,n.shadowMapSize=t.mapSize,n.shadowCameraNear=t.camera.near,n.shadowCameraFar=t.camera.far,r.pointShadow[h]=n,r.pointShadowMap[h]=b,r.pointShadowMatrix[h]=e.shadow.matrix,f++}r.point[h]=t,h++}else if(e.isHemisphereLight){const t=n.get(e);t.skyColor.copy(e.color).multiplyScalar(y*v),t.groundColor.copy(e.groundColor).multiplyScalar(y*v),r.hemi[_]=t,_++}}p>0&&(e.isWebGL2||!0===t.has(\\\\\\\"OES_texture_float_linear\\\\\\\")?(r.rectAreaLTC1=tT.LTC_FLOAT_1,r.rectAreaLTC2=tT.LTC_FLOAT_2):!0===t.has(\\\\\\\"OES_texture_half_float_linear\\\\\\\")?(r.rectAreaLTC1=tT.LTC_HALF_1,r.rectAreaLTC2=tT.LTC_HALF_2):console.error(\\\\\\\"THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.\\\\\\\")),r.ambient[0]=a,r.ambient[1]=l,r.ambient[2]=c;const y=r.hash;y.directionalLength===u&&y.pointLength===h&&y.spotLength===d&&y.rectAreaLength===p&&y.hemiLength===_&&y.numDirectionalShadows===m&&y.numPointShadows===f&&y.numSpotShadows===g||(r.directional.length=u,r.spot.length=d,r.rectArea.length=p,r.point.length=h,r.hemi.length=_,r.directionalShadow.length=m,r.directionalShadowMap.length=m,r.pointShadow.length=f,r.pointShadowMap.length=f,r.spotShadow.length=g,r.spotShadowMap.length=g,r.directionalShadowMatrix.length=m,r.pointShadowMatrix.length=f,r.spotShadowMatrix.length=g,y.directionalLength=u,y.pointLength=h,y.spotLength=d,y.rectAreaLength=p,y.hemiLength=_,y.numDirectionalShadows=m,y.numPointShadows=f,y.numSpotShadows=g,r.version=xE++)},setupView:function(t,e){let n=0,i=0,l=0,c=0,u=0;const h=e.matrixWorldInverse;for(let e=0,d=t.length;e<d;e++){const d=t[e];if(d.isDirectionalLight){const t=r.directional[n];t.direction.setFromMatrixPosition(d.matrixWorld),s.setFromMatrixPosition(d.target.matrixWorld),t.direction.sub(s),t.direction.transformDirection(h),n++}else if(d.isSpotLight){const t=r.spot[l];t.position.setFromMatrixPosition(d.matrixWorld),t.position.applyMatrix4(h),t.direction.setFromMatrixPosition(d.matrixWorld),s.setFromMatrixPosition(d.target.matrixWorld),t.direction.sub(s),t.direction.transformDirection(h),l++}else if(d.isRectAreaLight){const t=r.rectArea[c];t.position.setFromMatrixPosition(d.matrixWorld),t.position.applyMatrix4(h),a.identity(),o.copy(d.matrixWorld),o.premultiply(h),a.extractRotation(o),t.halfWidth.set(.5*d.width,0,0),t.halfHeight.set(0,.5*d.height,0),t.halfWidth.applyMatrix4(a),t.halfHeight.applyMatrix4(a),c++}else if(d.isPointLight){const t=r.point[i];t.position.setFromMatrixPosition(d.matrixWorld),t.position.applyMatrix4(h),i++}else if(d.isHemisphereLight){const t=r.hemi[u];t.direction.setFromMatrixPosition(d.matrixWorld),t.direction.transformDirection(h),t.direction.normalize(),u++}}},state:r}}function TE(t,e){const n=new wE(t,e),i=[],r=[];return{init:function(){i.length=0,r.length=0},state:{lightsArray:i,shadowsArray:r,lights:n},setupLights:function(t){n.setup(i,t)},setupLightsView:function(t){n.setupView(i,t)},pushLight:function(t){i.push(t)},pushShadow:function(t){r.push(t)}}}function AE(t,e){let n=new WeakMap;return{get:function(i,r=0){let s;return!1===n.has(i)?(s=new TE(t,e),n.set(i,[s])):r>=n.get(i).length?(s=new TE(t,e),n.get(i).push(s)):s=n.get(i)[r],s},dispose:function(){n=new WeakMap}}}class EE extends jb{constructor(t){super(),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.fog=!1,this.setValues(t)}copy(t){return super.copy(t),this.depthPacking=t.depthPacking,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this}}EE.prototype.isMeshDepthMaterial=!0;class ME extends jb{constructor(t){super(),this.type=\\\\\\\"MeshDistanceMaterial\\\\\\\",this.referencePosition=new Nx,this.nearDistance=1,this.farDistance=1e3,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.setValues(t)}copy(t){return super.copy(t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this}}ME.prototype.isMeshDistanceMaterial=!0;function SE(t,e,n){let i=new $w;const r=new fx,s=new fx,o=new Ex,a=new EE({depthPacking:3201}),l=new ME,c={},u=n.maxTextureSize,h={0:1,1:0,2:2},d=new Dw({uniforms:{shadow_pass:{value:null},resolution:{value:new fx},radius:{value:4},samples:{value:8}},vertexShader:\\\\\\\"void main() {\\\\n\\\\tgl_Position = vec4( position, 1.0 );\\\\n}\\\\\\\",fragmentShader:\\\\\\\"uniform sampler2D shadow_pass;\\\\nuniform vec2 resolution;\\\\nuniform float radius;\\\\nuniform float samples;\\\\n#include <packing>\\\\nvoid main() {\\\\n\\\\tfloat mean = 0.0;\\\\n\\\\tfloat squared_mean = 0.0;\\\\n\\\\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\\\\n\\\\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\\\\n\\\\tfor ( float i = 0.0; i < samples; i ++ ) {\\\\n\\\\t\\\\tfloat uvOffset = uvStart + i * uvStride;\\\\n\\\\t\\\\t#ifdef HORIZONTAL_PASS\\\\n\\\\t\\\\t\\\\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\\\\n\\\\t\\\\t\\\\tmean += distribution.x;\\\\n\\\\t\\\\t\\\\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\\\\n\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\\\\n\\\\t\\\\t\\\\tmean += depth;\\\\n\\\\t\\\\t\\\\tsquared_mean += depth * depth;\\\\n\\\\t\\\\t#endif\\\\n\\\\t}\\\\n\\\\tmean = mean / samples;\\\\n\\\\tsquared_mean = squared_mean / samples;\\\\n\\\\tfloat std_dev = sqrt( squared_mean - mean * mean );\\\\n\\\\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\\\\n}\\\\\\\"}),p=d.clone();p.defines.HORIZONTAL_PASS=1;const _=new dw;_.setAttribute(\\\\\\\"position\\\\\\\",new ew(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const m=new Lw(_,d),f=this;function g(n,i){const r=e.update(m);d.uniforms.shadow_pass.value=n.map.texture,d.uniforms.resolution.value=n.mapSize,d.uniforms.radius.value=n.radius,d.uniforms.samples.value=n.blurSamples,t.setRenderTarget(n.mapPass),t.clear(),t.renderBufferDirect(i,null,r,d,m,null),p.uniforms.shadow_pass.value=n.mapPass.texture,p.uniforms.resolution.value=n.mapSize,p.uniforms.radius.value=n.radius,p.uniforms.samples.value=n.blurSamples,t.setRenderTarget(n.map),t.clear(),t.renderBufferDirect(i,null,r,p,m,null)}function v(e,n,i,r,s,o,u){let d=null;const p=!0===r.isPointLight?e.customDistanceMaterial:e.customDepthMaterial;if(d=void 0!==p?p:!0===r.isPointLight?l:a,t.localClippingEnabled&&!0===i.clipShadows&&0!==i.clippingPlanes.length||i.displacementMap&&0!==i.displacementScale||i.alphaMap&&i.alphaTest>0){const t=d.uuid,e=i.uuid;let n=c[t];void 0===n&&(n={},c[t]=n);let r=n[e];void 0===r&&(r=d.clone(),n[e]=r),d=r}return d.visible=i.visible,d.wireframe=i.wireframe,d.side=3===u?null!==i.shadowSide?i.shadowSide:i.side:null!==i.shadowSide?i.shadowSide:h[i.side],d.alphaMap=i.alphaMap,d.alphaTest=i.alphaTest,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=o),d}function y(n,r,s,o,a){if(!1===n.visible)return;if(n.layers.test(r.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&3===a)&&(!n.frustumCulled||i.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(s.matrixWorldInverse,n.matrixWorld);const i=e.update(n),r=n.material;if(Array.isArray(r)){const e=i.groups;for(let l=0,c=e.length;l<c;l++){const c=e[l],u=r[c.materialIndex];if(u&&u.visible){const e=v(n,0,u,o,s.near,s.far,a);t.renderBufferDirect(s,null,i,e,n,c)}}}else if(r.visible){const e=v(n,0,r,o,s.near,s.far,a);t.renderBufferDirect(s,null,i,e,n,null)}}const l=n.children;for(let t=0,e=l.length;t<e;t++)y(l[t],r,s,o,a)}this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=1,this.render=function(e,n,a){if(!1===f.enabled)return;if(!1===f.autoUpdate&&!1===f.needsUpdate)return;if(0===e.length)return;const l=t.getRenderTarget(),c=t.getActiveCubeFace(),h=t.getActiveMipmapLevel(),d=t.state;d.setBlending(0),d.buffers.color.setClear(1,1,1,1),d.buffers.depth.setTest(!0),d.setScissorTest(!1);for(let l=0,c=e.length;l<c;l++){const c=e[l],h=c.shadow;if(void 0===h){console.warn(\\\\\\\"THREE.WebGLShadowMap:\\\\\\\",c,\\\\\\\"has no shadow.\\\\\\\");continue}if(!1===h.autoUpdate&&!1===h.needsUpdate)continue;r.copy(h.mapSize);const p=h.getFrameExtents();if(r.multiply(p),s.copy(h.mapSize),(r.x>u||r.y>u)&&(r.x>u&&(s.x=Math.floor(u/p.x),r.x=s.x*p.x,h.mapSize.x=s.x),r.y>u&&(s.y=Math.floor(u/p.y),r.y=s.y*p.y,h.mapSize.y=s.y)),null===h.map&&!h.isPointLightShadow&&3===this.type){const t={minFilter:Cy,magFilter:Cy,format:By};h.map=new Mx(r.x,r.y,t),h.map.texture.name=c.name+\\\\\\\".shadowMap\\\\\\\",h.mapPass=new Mx(r.x,r.y,t),h.camera.updateProjectionMatrix()}if(null===h.map){const t={minFilter:Ey,magFilter:Ey,format:By};h.map=new Mx(r.x,r.y,t),h.map.texture.name=c.name+\\\\\\\".shadowMap\\\\\\\",h.camera.updateProjectionMatrix()}t.setRenderTarget(h.map),t.clear();const _=h.getViewportCount();for(let t=0;t<_;t++){const e=h.getViewport(t);o.set(s.x*e.x,s.y*e.y,s.x*e.z,s.y*e.w),d.viewport(o),h.updateMatrices(c,t),i=h.getFrustum(),y(n,a,h.camera,c,this.type)}h.isPointLightShadow||3!==this.type||g(h,a),h.needsUpdate=!1}f.needsUpdate=!1,t.setRenderTarget(l,c,h)}}function CE(t,e,n){const i=n.isWebGL2;const r=new function(){let e=!1;const n=new Ex;let i=null;const r=new Ex(0,0,0,0);return{setMask:function(n){i===n||e||(t.colorMask(n,n,n,n),i=n)},setLocked:function(t){e=t},setClear:function(e,i,s,o,a){!0===a&&(e*=o,i*=o,s*=o),n.set(e,i,s,o),!1===r.equals(n)&&(t.clearColor(e,i,s,o),r.copy(n))},reset:function(){e=!1,i=null,r.set(-1,0,0,0)}}},s=new function(){let e=!1,n=null,i=null,r=null;return{setTest:function(t){t?k(2929):B(2929)},setMask:function(i){n===i||e||(t.depthMask(i),n=i)},setFunc:function(e){if(i!==e){if(e)switch(e){case 0:t.depthFunc(512);break;case 1:t.depthFunc(519);break;case 2:t.depthFunc(513);break;case 3:t.depthFunc(515);break;case 4:t.depthFunc(514);break;case 5:t.depthFunc(518);break;case 6:t.depthFunc(516);break;case 7:t.depthFunc(517);break;default:t.depthFunc(515)}else t.depthFunc(515);i=e}},setLocked:function(t){e=t},setClear:function(e){r!==e&&(t.clearDepth(e),r=e)},reset:function(){e=!1,n=null,i=null,r=null}}},o=new function(){let e=!1,n=null,i=null,r=null,s=null,o=null,a=null,l=null,c=null;return{setTest:function(t){e||(t?k(2960):B(2960))},setMask:function(i){n===i||e||(t.stencilMask(i),n=i)},setFunc:function(e,n,o){i===e&&r===n&&s===o||(t.stencilFunc(e,n,o),i=e,r=n,s=o)},setOp:function(e,n,i){o===e&&a===n&&l===i||(t.stencilOp(e,n,i),o=e,a=n,l=i)},setLocked:function(t){e=t},setClear:function(e){c!==e&&(t.clearStencil(e),c=e)},reset:function(){e=!1,n=null,i=null,r=null,s=null,o=null,a=null,l=null,c=null}}};let a={},l=null,c={},u=null,h=!1,d=null,p=null,_=null,m=null,f=null,g=null,v=null,y=!1,x=null,b=null,w=null,T=null,A=null;const E=t.getParameter(35661);let M=!1,S=0;const C=t.getParameter(7938);-1!==C.indexOf(\\\\\\\"WebGL\\\\\\\")?(S=parseFloat(/^WebGL (\\\\d)/.exec(C)[1]),M=S>=1):-1!==C.indexOf(\\\\\\\"OpenGL ES\\\\\\\")&&(S=parseFloat(/^OpenGL ES (\\\\d)/.exec(C)[1]),M=S>=2);let N=null,L={};const O=t.getParameter(3088),R=t.getParameter(2978),P=(new Ex).fromArray(O),I=(new Ex).fromArray(R);function F(e,n,i){const r=new Uint8Array(4),s=t.createTexture();t.bindTexture(e,s),t.texParameteri(e,10241,9728),t.texParameteri(e,10240,9728);for(let e=0;e<i;e++)t.texImage2D(n+e,0,6408,1,1,0,6408,5121,r);return s}const D={};function k(e){!0!==a[e]&&(t.enable(e),a[e]=!0)}function B(e){!1!==a[e]&&(t.disable(e),a[e]=!1)}D[3553]=F(3553,3553,1),D[34067]=F(34067,34069,6),r.setClear(0,0,0,1),s.setClear(1),o.setClear(0),k(2929),s.setFunc(3),V(!1),H(1),k(2884),G(0);const z={[my]:32774,101:32778,102:32779};if(i)z[103]=32775,z[104]=32776;else{const t=e.get(\\\\\\\"EXT_blend_minmax\\\\\\\");null!==t&&(z[103]=t.MIN_EXT,z[104]=t.MAX_EXT)}const U={200:0,201:1,202:768,204:770,210:776,208:774,206:772,203:769,205:771,209:775,207:773};function G(e,n,i,r,s,o,a,l){if(0!==e){if(!1===h&&(k(3042),h=!0),5===e)s=s||n,o=o||i,a=a||r,n===p&&s===f||(t.blendEquationSeparate(z[n],z[s]),p=n,f=s),i===_&&r===m&&o===g&&a===v||(t.blendFuncSeparate(U[i],U[r],U[o],U[a]),_=i,m=r,g=o,v=a),d=e,y=null;else if(e!==d||l!==y){if(p===my&&f===my||(t.blendEquation(32774),p=my,f=my),l)switch(e){case 1:t.blendFuncSeparate(1,771,1,771);break;case 2:t.blendFunc(1,1);break;case 3:t.blendFuncSeparate(0,0,769,771);break;case 4:t.blendFuncSeparate(0,768,0,770);break;default:console.error(\\\\\\\"THREE.WebGLState: Invalid blending: \\\\\\\",e)}else switch(e){case 1:t.blendFuncSeparate(770,771,1,771);break;case 2:t.blendFunc(770,1);break;case 3:t.blendFunc(0,769);break;case 4:t.blendFunc(0,768);break;default:console.error(\\\\\\\"THREE.WebGLState: Invalid blending: \\\\\\\",e)}_=null,m=null,g=null,v=null,d=e,y=l}}else!0===h&&(B(3042),h=!1)}function V(e){x!==e&&(e?t.frontFace(2304):t.frontFace(2305),x=e)}function H(e){0!==e?(k(2884),e!==b&&(1===e?t.cullFace(1029):2===e?t.cullFace(1028):t.cullFace(1032))):B(2884),b=e}function j(e,n,i){e?(k(32823),T===n&&A===i||(t.polygonOffset(n,i),T=n,A=i)):B(32823)}function W(e){void 0===e&&(e=33984+E-1),N!==e&&(t.activeTexture(e),N=e)}return{buffers:{color:r,depth:s,stencil:o},enable:k,disable:B,bindFramebuffer:function(e,n){return null===n&&null!==l&&(n=l),c[e]!==n&&(t.bindFramebuffer(e,n),c[e]=n,i&&(36009===e&&(c[36160]=n),36160===e&&(c[36009]=n)),!0)},bindXRFramebuffer:function(e){e!==l&&(t.bindFramebuffer(36160,e),l=e)},useProgram:function(e){return u!==e&&(t.useProgram(e),u=e,!0)},setBlending:G,setMaterial:function(t,e){2===t.side?B(2884):k(2884);let n=1===t.side;e&&(n=!n),V(n),1===t.blending&&!1===t.transparent?G(0):G(t.blending,t.blendEquation,t.blendSrc,t.blendDst,t.blendEquationAlpha,t.blendSrcAlpha,t.blendDstAlpha,t.premultipliedAlpha),s.setFunc(t.depthFunc),s.setTest(t.depthTest),s.setMask(t.depthWrite),r.setMask(t.colorWrite);const i=t.stencilWrite;o.setTest(i),i&&(o.setMask(t.stencilWriteMask),o.setFunc(t.stencilFunc,t.stencilRef,t.stencilFuncMask),o.setOp(t.stencilFail,t.stencilZFail,t.stencilZPass)),j(t.polygonOffset,t.polygonOffsetFactor,t.polygonOffsetUnits),!0===t.alphaToCoverage?k(32926):B(32926)},setFlipSided:V,setCullFace:H,setLineWidth:function(e){e!==w&&(M&&t.lineWidth(e),w=e)},setPolygonOffset:j,setScissorTest:function(t){t?k(3089):B(3089)},activeTexture:W,bindTexture:function(e,n){null===N&&W();let i=L[N];void 0===i&&(i={type:void 0,texture:void 0},L[N]=i),i.type===e&&i.texture===n||(t.bindTexture(e,n||D[e]),i.type=e,i.texture=n)},unbindTexture:function(){const e=L[N];void 0!==e&&void 0!==e.type&&(t.bindTexture(e.type,null),e.type=void 0,e.texture=void 0)},compressedTexImage2D:function(){try{t.compressedTexImage2D.apply(t,arguments)}catch(t){console.error(\\\\\\\"THREE.WebGLState:\\\\\\\",t)}},texImage2D:function(){try{t.texImage2D.apply(t,arguments)}catch(t){console.error(\\\\\\\"THREE.WebGLState:\\\\\\\",t)}},texImage3D:function(){try{t.texImage3D.apply(t,arguments)}catch(t){console.error(\\\\\\\"THREE.WebGLState:\\\\\\\",t)}},scissor:function(e){!1===P.equals(e)&&(t.scissor(e.x,e.y,e.z,e.w),P.copy(e))},viewport:function(e){!1===I.equals(e)&&(t.viewport(e.x,e.y,e.z,e.w),I.copy(e))},reset:function(){t.disable(3042),t.disable(2884),t.disable(2929),t.disable(32823),t.disable(3089),t.disable(2960),t.disable(32926),t.blendEquation(32774),t.blendFunc(1,0),t.blendFuncSeparate(1,0,1,0),t.colorMask(!0,!0,!0,!0),t.clearColor(0,0,0,0),t.depthMask(!0),t.depthFunc(513),t.clearDepth(1),t.stencilMask(4294967295),t.stencilFunc(519,0,4294967295),t.stencilOp(7680,7680,7680),t.clearStencil(0),t.cullFace(1029),t.frontFace(2305),t.polygonOffset(0,0),t.activeTexture(33984),t.bindFramebuffer(36160,null),!0===i&&(t.bindFramebuffer(36009,null),t.bindFramebuffer(36008,null)),t.useProgram(null),t.lineWidth(1),t.scissor(0,0,t.canvas.width,t.canvas.height),t.viewport(0,0,t.canvas.width,t.canvas.height),a={},N=null,L={},l=null,c={},u=null,h=!1,d=null,p=null,_=null,m=null,f=null,g=null,v=null,y=!1,x=null,b=null,w=null,T=null,A=null,P.set(0,0,t.canvas.width,t.canvas.height),I.set(0,0,t.canvas.width,t.canvas.height),r.reset(),s.reset(),o.reset()}}}function NE(t,e,n,i,r,s,o){const a=r.isWebGL2,l=r.maxTextures,c=r.maxCubemapSize,u=r.maxTextureSize,h=r.maxSamples,d=new WeakMap;let p,_=!1;try{_=\\\\\\\"undefined\\\\\\\"!=typeof OffscreenCanvas&&null!==new OffscreenCanvas(1,1).getContext(\\\\\\\"2d\\\\\\\")}catch(t){}function m(t,e){return _?new OffscreenCanvas(t,e):yx(\\\\\\\"canvas\\\\\\\")}function f(t,e,n,i){let r=1;if((t.width>i||t.height>i)&&(r=i/Math.max(t.width,t.height)),r<1||!0===e){if(\\\\\\\"undefined\\\\\\\"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||\\\\\\\"undefined\\\\\\\"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||\\\\\\\"undefined\\\\\\\"!=typeof ImageBitmap&&t instanceof ImageBitmap){const i=e?_x:Math.floor,s=i(r*t.width),o=i(r*t.height);void 0===p&&(p=m(s,o));const a=n?m(s,o):p;a.width=s,a.height=o;return a.getContext(\\\\\\\"2d\\\\\\\").drawImage(t,0,0,s,o),console.warn(\\\\\\\"THREE.WebGLRenderer: Texture has been resized from (\\\\\\\"+t.width+\\\\\\\"x\\\\\\\"+t.height+\\\\\\\") to (\\\\\\\"+s+\\\\\\\"x\\\\\\\"+o+\\\\\\\").\\\\\\\"),a}return\\\\\\\"data\\\\\\\"in t&&console.warn(\\\\\\\"THREE.WebGLRenderer: Image in DataTexture is too big (\\\\\\\"+t.width+\\\\\\\"x\\\\\\\"+t.height+\\\\\\\").\\\\\\\"),t}return t}function g(t){return dx(t.width)&&dx(t.height)}function v(t,e){return t.generateMipmaps&&e&&t.minFilter!==Ey&&t.minFilter!==Cy}function y(e,n,r,s,o=1){t.generateMipmap(e);i.get(n).__maxMipLevel=Math.log2(Math.max(r,s,o))}function x(n,i,r,s){if(!1===a)return i;if(null!==n){if(void 0!==t[n])return t[n];console.warn(\\\\\\\"THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '\\\\\\\"+n+\\\\\\\"'\\\\\\\")}let o=i;return 6403===i&&(5126===r&&(o=33326),5131===r&&(o=33325),5121===r&&(o=33321)),6407===i&&(5126===r&&(o=34837),5131===r&&(o=34843),5121===r&&(o=32849)),6408===i&&(5126===r&&(o=34836),5131===r&&(o=34842),5121===r&&(o=s===$y?35907:32856)),33325!==o&&33326!==o&&34842!==o&&34836!==o||e.get(\\\\\\\"EXT_color_buffer_float\\\\\\\"),o}function b(t){return t===Ey||t===My||t===Sy?9728:9729}function w(e){const n=e.target;n.removeEventListener(\\\\\\\"dispose\\\\\\\",w),function(e){const n=i.get(e);if(void 0===n.__webglInit)return;t.deleteTexture(n.__webglTexture),i.remove(e)}(n),n.isVideoTexture&&d.delete(n),o.memory.textures--}function T(e){const n=e.target;n.removeEventListener(\\\\\\\"dispose\\\\\\\",T),function(e){const n=e.texture,r=i.get(e),s=i.get(n);if(!e)return;void 0!==s.__webglTexture&&(t.deleteTexture(s.__webglTexture),o.memory.textures--);e.depthTexture&&e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(let e=0;e<6;e++)t.deleteFramebuffer(r.__webglFramebuffer[e]),r.__webglDepthbuffer&&t.deleteRenderbuffer(r.__webglDepthbuffer[e]);else t.deleteFramebuffer(r.__webglFramebuffer),r.__webglDepthbuffer&&t.deleteRenderbuffer(r.__webglDepthbuffer),r.__webglMultisampledFramebuffer&&t.deleteFramebuffer(r.__webglMultisampledFramebuffer),r.__webglColorRenderbuffer&&t.deleteRenderbuffer(r.__webglColorRenderbuffer),r.__webglDepthRenderbuffer&&t.deleteRenderbuffer(r.__webglDepthRenderbuffer);if(e.isWebGLMultipleRenderTargets)for(let e=0,r=n.length;e<r;e++){const r=i.get(n[e]);r.__webglTexture&&(t.deleteTexture(r.__webglTexture),o.memory.textures--),i.remove(n[e])}i.remove(n),i.remove(e)}(n)}let A=0;function E(t,e){const r=i.get(t);if(t.isVideoTexture&&function(t){const e=o.render.frame;d.get(t)!==e&&(d.set(t,e),t.update())}(t),t.version>0&&r.__version!==t.version){const n=t.image;if(void 0===n)console.warn(\\\\\\\"THREE.WebGLRenderer: Texture marked for update but image is undefined\\\\\\\");else{if(!1!==n.complete)return void O(r,t,e);console.warn(\\\\\\\"THREE.WebGLRenderer: Texture marked for update but image is incomplete\\\\\\\")}}n.activeTexture(33984+e),n.bindTexture(3553,r.__webglTexture)}function M(e,r){const o=i.get(e);e.version>0&&o.__version!==e.version?function(e,i,r){if(6!==i.image.length)return;L(e,i),n.activeTexture(33984+r),n.bindTexture(34067,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment),t.pixelStorei(37443,0);const o=i&&(i.isCompressedTexture||i.image[0].isCompressedTexture),l=i.image[0]&&i.image[0].isDataTexture,u=[];for(let t=0;t<6;t++)u[t]=o||l?l?i.image[t].image:i.image[t]:f(i.image[t],!1,!0,c);const h=u[0],d=g(h)||a,p=s.convert(i.format),_=s.convert(i.type),m=x(i.internalFormat,p,_,i.encoding);let b;if(N(34067,i,d),o){for(let t=0;t<6;t++){b=u[t].mipmaps;for(let e=0;e<b.length;e++){const r=b[e];i.format!==By&&i.format!==ky?null!==p?n.compressedTexImage2D(34069+t,e,m,r.width,r.height,0,r.data):console.warn(\\\\\\\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()\\\\\\\"):n.texImage2D(34069+t,e,m,r.width,r.height,0,p,_,r.data)}}e.__maxMipLevel=b.length-1}else{b=i.mipmaps;for(let t=0;t<6;t++)if(l){n.texImage2D(34069+t,0,m,u[t].width,u[t].height,0,p,_,u[t].data);for(let e=0;e<b.length;e++){const i=b[e].image[t].image;n.texImage2D(34069+t,e+1,m,i.width,i.height,0,p,_,i.data)}}else{n.texImage2D(34069+t,0,m,p,_,u[t]);for(let e=0;e<b.length;e++){const i=b[e];n.texImage2D(34069+t,e+1,m,p,_,i.image[t])}}e.__maxMipLevel=b.length}v(i,d)&&y(34067,i,h.width,h.height);e.__version=i.version,i.onUpdate&&i.onUpdate(i)}(o,e,r):(n.activeTexture(33984+r),n.bindTexture(34067,o.__webglTexture))}const S={[wy]:10497,[Ty]:33071,[Ay]:33648},C={[Ey]:9728,[My]:9984,[Sy]:9986,[Cy]:9729,[Ny]:9985,[Ly]:9987};function N(n,s,o){if(o?(t.texParameteri(n,10242,S[s.wrapS]),t.texParameteri(n,10243,S[s.wrapT]),32879!==n&&35866!==n||t.texParameteri(n,32882,S[s.wrapR]),t.texParameteri(n,10240,C[s.magFilter]),t.texParameteri(n,10241,C[s.minFilter])):(t.texParameteri(n,10242,33071),t.texParameteri(n,10243,33071),32879!==n&&35866!==n||t.texParameteri(n,32882,33071),s.wrapS===Ty&&s.wrapT===Ty||console.warn(\\\\\\\"THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.\\\\\\\"),t.texParameteri(n,10240,b(s.magFilter)),t.texParameteri(n,10241,b(s.minFilter)),s.minFilter!==Ey&&s.minFilter!==Cy&&console.warn(\\\\\\\"THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.\\\\\\\")),!0===e.has(\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\")){const o=e.get(\\\\\\\"EXT_texture_filter_anisotropic\\\\\\\");if(s.type===Iy&&!1===e.has(\\\\\\\"OES_texture_float_linear\\\\\\\"))return;if(!1===a&&s.type===Fy&&!1===e.has(\\\\\\\"OES_texture_half_float_linear\\\\\\\"))return;(s.anisotropy>1||i.get(s).__currentAnisotropy)&&(t.texParameterf(n,o.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(s.anisotropy,r.getMaxAnisotropy())),i.get(s).__currentAnisotropy=s.anisotropy)}}function L(e,n){void 0===e.__webglInit&&(e.__webglInit=!0,n.addEventListener(\\\\\\\"dispose\\\\\\\",w),e.__webglTexture=t.createTexture(),o.memory.textures++)}function O(e,i,r){let o=3553;i.isDataTexture2DArray&&(o=35866),i.isDataTexture3D&&(o=32879),L(e,i),n.activeTexture(33984+r),n.bindTexture(o,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment),t.pixelStorei(37443,0);const l=function(t){return!a&&(t.wrapS!==Ty||t.wrapT!==Ty||t.minFilter!==Ey&&t.minFilter!==Cy)}(i)&&!1===g(i.image),c=f(i.image,l,!1,u),h=g(c)||a,d=s.convert(i.format);let p,_=s.convert(i.type),m=x(i.internalFormat,d,_,i.encoding);N(o,i,h);const b=i.mipmaps;if(i.isDepthTexture)m=6402,a?m=i.type===Iy?36012:i.type===Py?33190:i.type===Dy?35056:33189:i.type===Iy&&console.error(\\\\\\\"WebGLRenderer: Floating point depth texture requires WebGL2.\\\\\\\"),i.format===zy&&6402===m&&i.type!==Ry&&i.type!==Py&&(console.warn(\\\\\\\"THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.\\\\\\\"),i.type=Ry,_=s.convert(i.type)),i.format===Uy&&6402===m&&(m=34041,i.type!==Dy&&(console.warn(\\\\\\\"THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.\\\\\\\"),i.type=Dy,_=s.convert(i.type))),n.texImage2D(3553,0,m,c.width,c.height,0,d,_,null);else if(i.isDataTexture)if(b.length>0&&h){for(let t=0,e=b.length;t<e;t++)p=b[t],n.texImage2D(3553,t,m,p.width,p.height,0,d,_,p.data);i.generateMipmaps=!1,e.__maxMipLevel=b.length-1}else n.texImage2D(3553,0,m,c.width,c.height,0,d,_,c.data),e.__maxMipLevel=0;else if(i.isCompressedTexture){for(let t=0,e=b.length;t<e;t++)p=b[t],i.format!==By&&i.format!==ky?null!==d?n.compressedTexImage2D(3553,t,m,p.width,p.height,0,p.data):console.warn(\\\\\\\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()\\\\\\\"):n.texImage2D(3553,t,m,p.width,p.height,0,d,_,p.data);e.__maxMipLevel=b.length-1}else if(i.isDataTexture2DArray)n.texImage3D(35866,0,m,c.width,c.height,c.depth,0,d,_,c.data),e.__maxMipLevel=0;else if(i.isDataTexture3D)n.texImage3D(32879,0,m,c.width,c.height,c.depth,0,d,_,c.data),e.__maxMipLevel=0;else if(b.length>0&&h){for(let t=0,e=b.length;t<e;t++)p=b[t],n.texImage2D(3553,t,m,d,_,p);i.generateMipmaps=!1,e.__maxMipLevel=b.length-1}else n.texImage2D(3553,0,m,d,_,c),e.__maxMipLevel=0;v(i,h)&&y(o,i,c.width,c.height),e.__version=i.version,i.onUpdate&&i.onUpdate(i)}function R(e,r,o,a,l){const c=s.convert(o.format),u=s.convert(o.type),h=x(o.internalFormat,c,u,o.encoding);32879===l||35866===l?n.texImage3D(l,0,h,r.width,r.height,r.depth,0,c,u,null):n.texImage2D(l,0,h,r.width,r.height,0,c,u,null),n.bindFramebuffer(36160,e),t.framebufferTexture2D(36160,a,l,i.get(o).__webglTexture,0),n.bindFramebuffer(36160,null)}function P(e,n,i){if(t.bindRenderbuffer(36161,e),n.depthBuffer&&!n.stencilBuffer){let r=33189;if(i){const e=n.depthTexture;e&&e.isDepthTexture&&(e.type===Iy?r=36012:e.type===Py&&(r=33190));const i=F(n);t.renderbufferStorageMultisample(36161,i,r,n.width,n.height)}else t.renderbufferStorage(36161,r,n.width,n.height);t.framebufferRenderbuffer(36160,36096,36161,e)}else if(n.depthBuffer&&n.stencilBuffer){if(i){const e=F(n);t.renderbufferStorageMultisample(36161,e,35056,n.width,n.height)}else t.renderbufferStorage(36161,34041,n.width,n.height);t.framebufferRenderbuffer(36160,33306,36161,e)}else{const e=!0===n.isWebGLMultipleRenderTargets?n.texture[0]:n.texture,r=s.convert(e.format),o=s.convert(e.type),a=x(e.internalFormat,r,o,e.encoding);if(i){const e=F(n);t.renderbufferStorageMultisample(36161,e,a,n.width,n.height)}else t.renderbufferStorage(36161,a,n.width,n.height)}t.bindRenderbuffer(36161,null)}function I(e){const r=i.get(e),s=!0===e.isWebGLCubeRenderTarget;if(e.depthTexture){if(s)throw new Error(\\\\\\\"target.depthTexture not supported in Cube render targets\\\\\\\");!function(e,r){if(r&&r.isWebGLCubeRenderTarget)throw new Error(\\\\\\\"Depth Texture with cube render targets is not supported\\\\\\\");if(n.bindFramebuffer(36160,e),!r.depthTexture||!r.depthTexture.isDepthTexture)throw new Error(\\\\\\\"renderTarget.depthTexture must be an instance of THREE.DepthTexture\\\\\\\");i.get(r.depthTexture).__webglTexture&&r.depthTexture.image.width===r.width&&r.depthTexture.image.height===r.height||(r.depthTexture.image.width=r.width,r.depthTexture.image.height=r.height,r.depthTexture.needsUpdate=!0),E(r.depthTexture,0);const s=i.get(r.depthTexture).__webglTexture;if(r.depthTexture.format===zy)t.framebufferTexture2D(36160,36096,3553,s,0);else{if(r.depthTexture.format!==Uy)throw new Error(\\\\\\\"Unknown depthTexture format\\\\\\\");t.framebufferTexture2D(36160,33306,3553,s,0)}}(r.__webglFramebuffer,e)}else if(s){r.__webglDepthbuffer=[];for(let i=0;i<6;i++)n.bindFramebuffer(36160,r.__webglFramebuffer[i]),r.__webglDepthbuffer[i]=t.createRenderbuffer(),P(r.__webglDepthbuffer[i],e,!1)}else n.bindFramebuffer(36160,r.__webglFramebuffer),r.__webglDepthbuffer=t.createRenderbuffer(),P(r.__webglDepthbuffer,e,!1);n.bindFramebuffer(36160,null)}function F(t){return a&&t.isWebGLMultisampleRenderTarget?Math.min(h,t.samples):0}let D=!1,k=!1;this.allocateTextureUnit=function(){const t=A;return t>=l&&console.warn(\\\\\\\"THREE.WebGLTextures: Trying to use \\\\\\\"+t+\\\\\\\" texture units while this GPU supports only \\\\\\\"+l),A+=1,t},this.resetTextureUnits=function(){A=0},this.setTexture2D=E,this.setTexture2DArray=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?O(r,t,e):(n.activeTexture(33984+e),n.bindTexture(35866,r.__webglTexture))},this.setTexture3D=function(t,e){const r=i.get(t);t.version>0&&r.__version!==t.version?O(r,t,e):(n.activeTexture(33984+e),n.bindTexture(32879,r.__webglTexture))},this.setTextureCube=M,this.setupRenderTarget=function(e){const l=e.texture,c=i.get(e),u=i.get(l);e.addEventListener(\\\\\\\"dispose\\\\\\\",T),!0!==e.isWebGLMultipleRenderTargets&&(u.__webglTexture=t.createTexture(),u.__version=l.version,o.memory.textures++);const h=!0===e.isWebGLCubeRenderTarget,d=!0===e.isWebGLMultipleRenderTargets,p=!0===e.isWebGLMultisampleRenderTarget,_=l.isDataTexture3D||l.isDataTexture2DArray,m=g(e)||a;if(!a||l.format!==ky||l.type!==Iy&&l.type!==Fy||(l.format=By,console.warn(\\\\\\\"THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.\\\\\\\")),h){c.__webglFramebuffer=[];for(let e=0;e<6;e++)c.__webglFramebuffer[e]=t.createFramebuffer()}else if(c.__webglFramebuffer=t.createFramebuffer(),d)if(r.drawBuffers){const n=e.texture;for(let e=0,r=n.length;e<r;e++){const r=i.get(n[e]);void 0===r.__webglTexture&&(r.__webglTexture=t.createTexture(),o.memory.textures++)}}else console.warn(\\\\\\\"THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.\\\\\\\");else if(p)if(a){c.__webglMultisampledFramebuffer=t.createFramebuffer(),c.__webglColorRenderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,c.__webglColorRenderbuffer);const i=s.convert(l.format),r=s.convert(l.type),o=x(l.internalFormat,i,r,l.encoding),a=F(e);t.renderbufferStorageMultisample(36161,a,o,e.width,e.height),n.bindFramebuffer(36160,c.__webglMultisampledFramebuffer),t.framebufferRenderbuffer(36160,36064,36161,c.__webglColorRenderbuffer),t.bindRenderbuffer(36161,null),e.depthBuffer&&(c.__webglDepthRenderbuffer=t.createRenderbuffer(),P(c.__webglDepthRenderbuffer,e,!0)),n.bindFramebuffer(36160,null)}else console.warn(\\\\\\\"THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.\\\\\\\");if(h){n.bindTexture(34067,u.__webglTexture),N(34067,l,m);for(let t=0;t<6;t++)R(c.__webglFramebuffer[t],e,l,36064,34069+t);v(l,m)&&y(34067,l,e.width,e.height),n.unbindTexture()}else if(d){const t=e.texture;for(let r=0,s=t.length;r<s;r++){const s=t[r],o=i.get(s);n.bindTexture(3553,o.__webglTexture),N(3553,s,m),R(c.__webglFramebuffer,e,s,36064+r,3553),v(s,m)&&y(3553,s,e.width,e.height)}n.unbindTexture()}else{let t=3553;if(_)if(a){t=l.isDataTexture3D?32879:35866}else console.warn(\\\\\\\"THREE.DataTexture3D and THREE.DataTexture2DArray only supported with WebGL2.\\\\\\\");n.bindTexture(t,u.__webglTexture),N(t,l,m),R(c.__webglFramebuffer,e,l,36064,t),v(l,m)&&y(t,l,e.width,e.height,e.depth),n.unbindTexture()}e.depthBuffer&&I(e)},this.updateRenderTargetMipmap=function(t){const e=g(t)||a,r=!0===t.isWebGLMultipleRenderTargets?t.texture:[t.texture];for(let s=0,o=r.length;s<o;s++){const o=r[s];if(v(o,e)){const e=t.isWebGLCubeRenderTarget?34067:3553,r=i.get(o).__webglTexture;n.bindTexture(e,r),y(e,o,t.width,t.height),n.unbindTexture()}}},this.updateMultisampleRenderTarget=function(e){if(e.isWebGLMultisampleRenderTarget)if(a){const r=e.width,s=e.height;let o=16384;e.depthBuffer&&(o|=256),e.stencilBuffer&&(o|=1024);const a=i.get(e);n.bindFramebuffer(36008,a.__webglMultisampledFramebuffer),n.bindFramebuffer(36009,a.__webglFramebuffer),t.blitFramebuffer(0,0,r,s,0,0,r,s,o,9728),n.bindFramebuffer(36008,null),n.bindFramebuffer(36009,a.__webglMultisampledFramebuffer)}else console.warn(\\\\\\\"THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.\\\\\\\")},this.safeSetTexture2D=function(t,e){t&&t.isWebGLRenderTarget&&(!1===D&&(console.warn(\\\\\\\"THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead.\\\\\\\"),D=!0),t=t.texture),E(t,e)},this.safeSetTextureCube=function(t,e){t&&t.isWebGLCubeRenderTarget&&(!1===k&&(console.warn(\\\\\\\"THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead.\\\\\\\"),k=!0),t=t.texture),M(t,e)}}function LE(t,e,n){const i=n.isWebGL2;return{convert:function(t){let n;if(t===Oy)return 5121;if(1017===t)return 32819;if(1018===t)return 32820;if(1019===t)return 33635;if(1010===t)return 5120;if(1011===t)return 5122;if(t===Ry)return 5123;if(1013===t)return 5124;if(t===Py)return 5125;if(t===Iy)return 5126;if(t===Fy)return i?5131:(n=e.get(\\\\\\\"OES_texture_half_float\\\\\\\"),null!==n?n.HALF_FLOAT_OES:null);if(1021===t)return 6406;if(t===ky)return 6407;if(t===By)return 6408;if(1024===t)return 6409;if(1025===t)return 6410;if(t===zy)return 6402;if(t===Uy)return 34041;if(1028===t)return 6403;if(1029===t)return 36244;if(1030===t)return 33319;if(1031===t)return 33320;if(1032===t)return 36248;if(1033===t)return 36249;if(33776===t||33777===t||33778===t||33779===t){if(n=e.get(\\\\\\\"WEBGL_compressed_texture_s3tc\\\\\\\"),null===n)return null;if(33776===t)return n.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===t)return n.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===t)return n.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===t)return n.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(35840===t||35841===t||35842===t||35843===t){if(n=e.get(\\\\\\\"WEBGL_compressed_texture_pvrtc\\\\\\\"),null===n)return null;if(35840===t)return n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===t)return n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===t)return n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===t)return n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===t)return n=e.get(\\\\\\\"WEBGL_compressed_texture_etc1\\\\\\\"),null!==n?n.COMPRESSED_RGB_ETC1_WEBGL:null;if((37492===t||37496===t)&&(n=e.get(\\\\\\\"WEBGL_compressed_texture_etc\\\\\\\"),null!==n)){if(37492===t)return n.COMPRESSED_RGB8_ETC2;if(37496===t)return n.COMPRESSED_RGBA8_ETC2_EAC}return 37808===t||37809===t||37810===t||37811===t||37812===t||37813===t||37814===t||37815===t||37816===t||37817===t||37818===t||37819===t||37820===t||37821===t||37840===t||37841===t||37842===t||37843===t||37844===t||37845===t||37846===t||37847===t||37848===t||37849===t||37850===t||37851===t||37852===t||37853===t?(n=e.get(\\\\\\\"WEBGL_compressed_texture_astc\\\\\\\"),null!==n?t:null):36492===t?(n=e.get(\\\\\\\"EXT_texture_compression_bptc\\\\\\\"),null!==n?t:null):t===Dy?i?34042:(n=e.get(\\\\\\\"WEBGL_depth_texture\\\\\\\"),null!==n?n.UNSIGNED_INT_24_8_WEBGL:null):void 0}}}class OE extends Bw{constructor(t=[]){super(),this.cameras=t}}OE.prototype.isArrayCamera=!0;class RE extends Ob{constructor(){super(),this.type=\\\\\\\"Group\\\\\\\"}}RE.prototype.isGroup=!0;const PE={type:\\\\\\\"move\\\\\\\"};class IE{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return null===this._hand&&(this._hand=new RE,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 RE,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new Nx,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new Nx),this._targetRay}getGripSpace(){return null===this._grip&&(this._grip=new RE,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new Nx,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new Nx),this._grip}dispatchEvent(t){return null!==this._targetRay&&this._targetRay.dispatchEvent(t),null!==this._grip&&this._grip.dispatchEvent(t),null!==this._hand&&this._hand.dispatchEvent(t),this}disconnect(t){return this.dispatchEvent({type:\\\\\\\"disconnected\\\\\\\",data:t}),null!==this._targetRay&&(this._targetRay.visible=!1),null!==this._grip&&(this._grip.visible=!1),null!==this._hand&&(this._hand.visible=!1),this}update(t,e,n){let i=null,r=null,s=null;const o=this._targetRay,a=this._grip,l=this._hand;if(t&&\\\\\\\"visible-blurred\\\\\\\"!==e.session.visibilityState)if(null!==o&&(i=e.getPose(t.targetRaySpace,n),null!==i&&(o.matrix.fromArray(i.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),i.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(i.linearVelocity)):o.hasLinearVelocity=!1,i.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(i.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(PE))),l&&t.hand){s=!0;for(const i of t.hand.values()){const t=e.getJointPose(i,n);if(void 0===l.joints[i.jointName]){const t=new RE;t.matrixAutoUpdate=!1,t.visible=!1,l.joints[i.jointName]=t,l.add(t)}const r=l.joints[i.jointName];null!==t&&(r.matrix.fromArray(t.transform.matrix),r.matrix.decompose(r.position,r.rotation,r.scale),r.jointRadius=t.radius),r.visible=null!==t}const i=l.joints[\\\\\\\"index-finger-tip\\\\\\\"],r=l.joints[\\\\\\\"thumb-tip\\\\\\\"],o=i.position.distanceTo(r.position),a=.02,c=.005;l.inputState.pinching&&o>a+c?(l.inputState.pinching=!1,this.dispatchEvent({type:\\\\\\\"pinchend\\\\\\\",handedness:t.handedness,target:this})):!l.inputState.pinching&&o<=a-c&&(l.inputState.pinching=!0,this.dispatchEvent({type:\\\\\\\"pinchstart\\\\\\\",handedness:t.handedness,target:this}))}else null!==a&&t.gripSpace&&(r=e.getPose(t.gripSpace,n),null!==r&&(a.matrix.fromArray(r.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale),r.linearVelocity?(a.hasLinearVelocity=!0,a.linearVelocity.copy(r.linearVelocity)):a.hasLinearVelocity=!1,r.angularVelocity?(a.hasAngularVelocity=!0,a.angularVelocity.copy(r.angularVelocity)):a.hasAngularVelocity=!1));return null!==o&&(o.visible=null!==i),null!==a&&(a.visible=null!==r),null!==l&&(l.visible=null!==s),this}}class FE extends nx{constructor(t,e){super();const n=this,i=t.state;let r=null,s=1,o=null,a=\\\\\\\"local-floor\\\\\\\",l=null,c=null,u=null,h=null,d=null,p=!1,_=null,m=null,f=null,g=null,v=null,y=null;const x=[],b=new Map,w=new Bw;w.layers.enable(1),w.viewport=new Ex;const T=new Bw;T.layers.enable(2),T.viewport=new Ex;const A=[w,T],E=new OE;E.layers.enable(1),E.layers.enable(2);let M=null,S=null;function C(t){const e=b.get(t.inputSource);e&&e.dispatchEvent({type:t.type,data:t.inputSource})}function N(){b.forEach((function(t,e){t.disconnect(e)})),b.clear(),M=null,S=null,i.bindXRFramebuffer(null),t.setRenderTarget(t.getRenderTarget()),u&&e.deleteFramebuffer(u),_&&e.deleteFramebuffer(_),m&&e.deleteRenderbuffer(m),f&&e.deleteRenderbuffer(f),u=null,_=null,m=null,f=null,d=null,h=null,c=null,r=null,F.stop(),n.isPresenting=!1,n.dispatchEvent({type:\\\\\\\"sessionend\\\\\\\"})}function L(t){const e=r.inputSources;for(let t=0;t<x.length;t++)b.set(e[t],x[t]);for(let e=0;e<t.removed.length;e++){const n=t.removed[e],i=b.get(n);i&&(i.dispatchEvent({type:\\\\\\\"disconnected\\\\\\\",data:n}),b.delete(n))}for(let e=0;e<t.added.length;e++){const n=t.added[e],i=b.get(n);i&&i.dispatchEvent({type:\\\\\\\"connected\\\\\\\",data:n})}}this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(t){let e=x[t];return void 0===e&&(e=new IE,x[t]=e),e.getTargetRaySpace()},this.getControllerGrip=function(t){let e=x[t];return void 0===e&&(e=new IE,x[t]=e),e.getGripSpace()},this.getHand=function(t){let e=x[t];return void 0===e&&(e=new IE,x[t]=e),e.getHandSpace()},this.setFramebufferScaleFactor=function(t){s=t,!0===n.isPresenting&&console.warn(\\\\\\\"THREE.WebXRManager: Cannot change framebuffer scale while presenting.\\\\\\\")},this.setReferenceSpaceType=function(t){a=t,!0===n.isPresenting&&console.warn(\\\\\\\"THREE.WebXRManager: Cannot change reference space type while presenting.\\\\\\\")},this.getReferenceSpace=function(){return o},this.getBaseLayer=function(){return null!==h?h:d},this.getBinding=function(){return c},this.getFrame=function(){return g},this.getSession=function(){return r},this.setSession=async function(t){if(r=t,null!==r){r.addEventListener(\\\\\\\"select\\\\\\\",C),r.addEventListener(\\\\\\\"selectstart\\\\\\\",C),r.addEventListener(\\\\\\\"selectend\\\\\\\",C),r.addEventListener(\\\\\\\"squeeze\\\\\\\",C),r.addEventListener(\\\\\\\"squeezestart\\\\\\\",C),r.addEventListener(\\\\\\\"squeezeend\\\\\\\",C),r.addEventListener(\\\\\\\"end\\\\\\\",N),r.addEventListener(\\\\\\\"inputsourceschange\\\\\\\",L);const t=e.getContextAttributes();if(!0!==t.xrCompatible&&await e.makeXRCompatible(),void 0===r.renderState.layers){const n={antialias:t.antialias,alpha:t.alpha,depth:t.depth,stencil:t.stencil,framebufferScaleFactor:s};d=new XRWebGLLayer(r,e,n),r.updateRenderState({baseLayer:d})}else if(e instanceof WebGLRenderingContext){const n={antialias:!0,alpha:t.alpha,depth:t.depth,stencil:t.stencil,framebufferScaleFactor:s};d=new XRWebGLLayer(r,e,n),r.updateRenderState({layers:[d]})}else{p=t.antialias;let n=null;t.depth&&(y=256,t.stencil&&(y|=1024),v=t.stencil?33306:36096,n=t.stencil?35056:33190);const o={colorFormat:t.alpha?32856:32849,depthFormat:n,scaleFactor:s};c=new XRWebGLBinding(r,e),h=c.createProjectionLayer(o),u=e.createFramebuffer(),r.updateRenderState({layers:[h]}),p&&(_=e.createFramebuffer(),m=e.createRenderbuffer(),e.bindRenderbuffer(36161,m),e.renderbufferStorageMultisample(36161,4,32856,h.textureWidth,h.textureHeight),i.bindFramebuffer(36160,_),e.framebufferRenderbuffer(36160,36064,36161,m),e.bindRenderbuffer(36161,null),null!==n&&(f=e.createRenderbuffer(),e.bindRenderbuffer(36161,f),e.renderbufferStorageMultisample(36161,4,n,h.textureWidth,h.textureHeight),e.framebufferRenderbuffer(36160,v,36161,f),e.bindRenderbuffer(36161,null)),i.bindFramebuffer(36160,null))}o=await r.requestReferenceSpace(a),F.setContext(r),F.start(),n.isPresenting=!0,n.dispatchEvent({type:\\\\\\\"sessionstart\\\\\\\"})}};const O=new Nx,R=new Nx;function P(t,e){null===e?t.matrixWorld.copy(t.matrix):t.matrixWorld.multiplyMatrices(e.matrixWorld,t.matrix),t.matrixWorldInverse.copy(t.matrixWorld).invert()}this.updateCamera=function(t){if(null===r)return;E.near=T.near=w.near=t.near,E.far=T.far=w.far=t.far,M===E.near&&S===E.far||(r.updateRenderState({depthNear:E.near,depthFar:E.far}),M=E.near,S=E.far);const e=t.parent,n=E.cameras;P(E,e);for(let t=0;t<n.length;t++)P(n[t],e);E.matrixWorld.decompose(E.position,E.quaternion,E.scale),t.position.copy(E.position),t.quaternion.copy(E.quaternion),t.scale.copy(E.scale),t.matrix.copy(E.matrix),t.matrixWorld.copy(E.matrixWorld);const i=t.children;for(let t=0,e=i.length;t<e;t++)i[t].updateMatrixWorld(!0);2===n.length?function(t,e,n){O.setFromMatrixPosition(e.matrixWorld),R.setFromMatrixPosition(n.matrixWorld);const i=O.distanceTo(R),r=e.projectionMatrix.elements,s=n.projectionMatrix.elements,o=r[14]/(r[10]-1),a=r[14]/(r[10]+1),l=(r[9]+1)/r[5],c=(r[9]-1)/r[5],u=(r[8]-1)/r[0],h=(s[8]+1)/s[0],d=o*u,p=o*h,_=i/(-u+h),m=_*-u;e.matrixWorld.decompose(t.position,t.quaternion,t.scale),t.translateX(m),t.translateZ(_),t.matrixWorld.compose(t.position,t.quaternion,t.scale),t.matrixWorldInverse.copy(t.matrixWorld).invert();const f=o+_,g=a+_,v=d-m,y=p+(i-m),x=l*a/g*f,b=c*a/g*f;t.projectionMatrix.makePerspective(v,y,x,b,f,g)}(E,w,T):E.projectionMatrix.copy(w.projectionMatrix)},this.getCamera=function(){return E},this.getFoveation=function(){return null!==h?h.fixedFoveation:null!==d?d.fixedFoveation:void 0},this.setFoveation=function(t){null!==h&&(h.fixedFoveation=t),null!==d&&void 0!==d.fixedFoveation&&(d.fixedFoveation=t)};let I=null;const F=new Jw;F.setAnimationLoop((function(t,n){if(l=n.getViewerPose(o),g=n,null!==l){const t=l.views;null!==d&&i.bindXRFramebuffer(d.framebuffer);let n=!1;t.length!==E.cameras.length&&(E.cameras.length=0,n=!0);for(let r=0;r<t.length;r++){const s=t[r];let o=null;if(null!==d)o=d.getViewport(s);else{const t=c.getViewSubImage(h,s);i.bindXRFramebuffer(u),void 0!==t.depthStencilTexture&&e.framebufferTexture2D(36160,v,3553,t.depthStencilTexture,0),e.framebufferTexture2D(36160,36064,3553,t.colorTexture,0),o=t.viewport}const a=A[r];a.matrix.fromArray(s.transform.matrix),a.projectionMatrix.fromArray(s.projectionMatrix),a.viewport.set(o.x,o.y,o.width,o.height),0===r&&E.matrix.copy(a.matrix),!0===n&&E.cameras.push(a)}p&&(i.bindXRFramebuffer(_),null!==y&&e.clear(y))}const s=r.inputSources;for(let t=0;t<x.length;t++){const e=x[t],i=s[t];e.update(i,n,o)}if(I&&I(t,n),p){const t=h.textureWidth,n=h.textureHeight;i.bindFramebuffer(36008,_),i.bindFramebuffer(36009,u),e.invalidateFramebuffer(36008,[v]),e.invalidateFramebuffer(36009,[v]),e.blitFramebuffer(0,0,t,n,0,0,t,n,16384,9728),e.invalidateFramebuffer(36008,[36064]),i.bindFramebuffer(36008,null),i.bindFramebuffer(36009,null),i.bindFramebuffer(36160,_)}g=null})),this.setAnimationLoop=function(t){I=t},this.dispose=function(){}}}function DE(t){function e(e,n){e.opacity.value=n.opacity,n.color&&e.diffuse.value.copy(n.color),n.emissive&&e.emissive.value.copy(n.emissive).multiplyScalar(n.emissiveIntensity),n.map&&(e.map.value=n.map),n.alphaMap&&(e.alphaMap.value=n.alphaMap),n.specularMap&&(e.specularMap.value=n.specularMap),n.alphaTest>0&&(e.alphaTest.value=n.alphaTest);const i=t.get(n).envMap;if(i){e.envMap.value=i,e.flipEnvMap.value=i.isCubeTexture&&!1===i.isRenderTargetTexture?-1:1,e.reflectivity.value=n.reflectivity,e.ior.value=n.ior,e.refractionRatio.value=n.refractionRatio;const r=t.get(i).__maxMipLevel;void 0!==r&&(e.maxMipLevel.value=r)}let r,s;n.lightMap&&(e.lightMap.value=n.lightMap,e.lightMapIntensity.value=n.lightMapIntensity),n.aoMap&&(e.aoMap.value=n.aoMap,e.aoMapIntensity.value=n.aoMapIntensity),n.map?r=n.map:n.specularMap?r=n.specularMap:n.displacementMap?r=n.displacementMap:n.normalMap?r=n.normalMap:n.bumpMap?r=n.bumpMap:n.roughnessMap?r=n.roughnessMap:n.metalnessMap?r=n.metalnessMap:n.alphaMap?r=n.alphaMap:n.emissiveMap?r=n.emissiveMap:n.clearcoatMap?r=n.clearcoatMap:n.clearcoatNormalMap?r=n.clearcoatNormalMap:n.clearcoatRoughnessMap?r=n.clearcoatRoughnessMap:n.specularIntensityMap?r=n.specularIntensityMap:n.specularTintMap?r=n.specularTintMap:n.transmissionMap?r=n.transmissionMap:n.thicknessMap&&(r=n.thicknessMap),void 0!==r&&(r.isWebGLRenderTarget&&(r=r.texture),!0===r.matrixAutoUpdate&&r.updateMatrix(),e.uvTransform.value.copy(r.matrix)),n.aoMap?s=n.aoMap:n.lightMap&&(s=n.lightMap),void 0!==s&&(s.isWebGLRenderTarget&&(s=s.texture),!0===s.matrixAutoUpdate&&s.updateMatrix(),e.uv2Transform.value.copy(s.matrix))}function n(e,n){e.roughness.value=n.roughness,e.metalness.value=n.metalness,n.roughnessMap&&(e.roughnessMap.value=n.roughnessMap),n.metalnessMap&&(e.metalnessMap.value=n.metalnessMap),n.emissiveMap&&(e.emissiveMap.value=n.emissiveMap),n.bumpMap&&(e.bumpMap.value=n.bumpMap,e.bumpScale.value=n.bumpScale,1===n.side&&(e.bumpScale.value*=-1)),n.normalMap&&(e.normalMap.value=n.normalMap,e.normalScale.value.copy(n.normalScale),1===n.side&&e.normalScale.value.negate()),n.displacementMap&&(e.displacementMap.value=n.displacementMap,e.displacementScale.value=n.displacementScale,e.displacementBias.value=n.displacementBias);t.get(n).envMap&&(e.envMapIntensity.value=n.envMapIntensity)}return{refreshFogUniforms:function(t,e){t.fogColor.value.copy(e.color),e.isFog?(t.fogNear.value=e.near,t.fogFar.value=e.far):e.isFogExp2&&(t.fogDensity.value=e.density)},refreshMaterialUniforms:function(t,i,r,s,o){i.isMeshBasicMaterial?e(t,i):i.isMeshLambertMaterial?(e(t,i),function(t,e){e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap)}(t,i)):i.isMeshToonMaterial?(e(t,i),function(t,e){e.gradientMap&&(t.gradientMap.value=e.gradientMap);e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap);e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,1===e.side&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),1===e.side&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshPhongMaterial?(e(t,i),function(t,e){t.specular.value.copy(e.specular),t.shininess.value=Math.max(e.shininess,1e-4),e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap);e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,1===e.side&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),1===e.side&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshStandardMaterial?(e(t,i),i.isMeshPhysicalMaterial?function(t,e,i){n(t,e),t.ior.value=e.ior,e.sheen>0&&(t.sheenTint.value.copy(e.sheenTint).multiplyScalar(e.sheen),t.sheenRoughness.value=e.sheenRoughness);e.clearcoat>0&&(t.clearcoat.value=e.clearcoat,t.clearcoatRoughness.value=e.clearcoatRoughness,e.clearcoatMap&&(t.clearcoatMap.value=e.clearcoatMap),e.clearcoatRoughnessMap&&(t.clearcoatRoughnessMap.value=e.clearcoatRoughnessMap),e.clearcoatNormalMap&&(t.clearcoatNormalScale.value.copy(e.clearcoatNormalScale),t.clearcoatNormalMap.value=e.clearcoatNormalMap,1===e.side&&t.clearcoatNormalScale.value.negate()));e.transmission>0&&(t.transmission.value=e.transmission,t.transmissionSamplerMap.value=i.texture,t.transmissionSamplerSize.value.set(i.width,i.height),e.transmissionMap&&(t.transmissionMap.value=e.transmissionMap),t.thickness.value=e.thickness,e.thicknessMap&&(t.thicknessMap.value=e.thicknessMap),t.attenuationDistance.value=e.attenuationDistance,t.attenuationTint.value.copy(e.attenuationTint));t.specularIntensity.value=e.specularIntensity,t.specularTint.value.copy(e.specularTint),e.specularIntensityMap&&(t.specularIntensityMap.value=e.specularIntensityMap);e.specularTintMap&&(t.specularTintMap.value=e.specularTintMap)}(t,i,o):n(t,i)):i.isMeshMatcapMaterial?(e(t,i),function(t,e){e.matcap&&(t.matcap.value=e.matcap);e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,1===e.side&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),1===e.side&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshDepthMaterial?(e(t,i),function(t,e){e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshDistanceMaterial?(e(t,i),function(t,e){e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias);t.referencePosition.value.copy(e.referencePosition),t.nearDistance.value=e.nearDistance,t.farDistance.value=e.farDistance}(t,i)):i.isMeshNormalMaterial?(e(t,i),function(t,e){e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,1===e.side&&(t.bumpScale.value*=-1));e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),1===e.side&&t.normalScale.value.negate());e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isLineBasicMaterial?(function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity}(t,i),i.isLineDashedMaterial&&function(t,e){t.dashSize.value=e.dashSize,t.totalSize.value=e.dashSize+e.gapSize,t.scale.value=e.scale}(t,i)):i.isPointsMaterial?function(t,e,n,i){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.size.value=e.size*n,t.scale.value=.5*i,e.map&&(t.map.value=e.map);e.alphaMap&&(t.alphaMap.value=e.alphaMap);e.alphaTest>0&&(t.alphaTest.value=e.alphaTest);let r;e.map?r=e.map:e.alphaMap&&(r=e.alphaMap);void 0!==r&&(!0===r.matrixAutoUpdate&&r.updateMatrix(),t.uvTransform.value.copy(r.matrix))}(t,i,r,s):i.isSpriteMaterial?function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.rotation.value=e.rotation,e.map&&(t.map.value=e.map);e.alphaMap&&(t.alphaMap.value=e.alphaMap);e.alphaTest>0&&(t.alphaTest.value=e.alphaTest);let n;e.map?n=e.map:e.alphaMap&&(n=e.alphaMap);void 0!==n&&(!0===n.matrixAutoUpdate&&n.updateMatrix(),t.uvTransform.value.copy(n.matrix))}(t,i):i.isShadowMaterial?(t.color.value.copy(i.color),t.opacity.value=i.opacity):i.isShaderMaterial&&(i.uniformsNeedUpdate=!1)}}}function kE(t={}){const e=void 0!==t.canvas?t.canvas:function(){const t=yx(\\\\\\\"canvas\\\\\\\");return t.style.display=\\\\\\\"block\\\\\\\",t}(),n=void 0!==t.context?t.context:null,i=void 0!==t.alpha&&t.alpha,r=void 0===t.depth||t.depth,s=void 0===t.stencil||t.stencil,o=void 0!==t.antialias&&t.antialias,a=void 0===t.premultipliedAlpha||t.premultipliedAlpha,l=void 0!==t.preserveDrawingBuffer&&t.preserveDrawingBuffer,c=void 0!==t.powerPreference?t.powerPreference:\\\\\\\"default\\\\\\\",u=void 0!==t.failIfMajorPerformanceCaveat&&t.failIfMajorPerformanceCaveat;let h=null,d=null;const p=[],_=[];this.domElement=e,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.gammaFactor=2,this.outputEncoding=Yy,this.physicallyCorrectLights=!1,this.toneMapping=0,this.toneMappingExposure=1;const m=this;let f=!1,g=0,v=0,y=null,x=-1,b=null;const w=new Ex,T=new Ex;let A=null,E=e.width,M=e.height,S=1,C=null,N=null;const L=new Ex(0,0,E,M),O=new Ex(0,0,E,M);let R=!1;const P=[],I=new $w;let F=!1,D=!1,k=null;const B=new ob,z=new Nx,U={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};function G(){return null===y?S:1}let V,H,j,W,q,X,Y,$,J,Z,Q,K,tt,et,nt,it,rt,st,ot,at,lt,ct,ut,ht=n;function dt(t,n){for(let i=0;i<t.length;i++){const r=t[i],s=e.getContext(r,n);if(null!==s)return s}return null}try{const t={alpha:i,depth:r,stencil:s,antialias:o,premultipliedAlpha:a,preserveDrawingBuffer:l,powerPreference:c,failIfMajorPerformanceCaveat:u};if(e.addEventListener(\\\\\\\"webglcontextlost\\\\\\\",mt,!1),e.addEventListener(\\\\\\\"webglcontextrestored\\\\\\\",ft,!1),null===ht){const e=[\\\\\\\"webgl2\\\\\\\",\\\\\\\"webgl\\\\\\\",\\\\\\\"experimental-webgl\\\\\\\"];if(!0===m.isWebGL1Renderer&&e.shift(),ht=dt(e,t),null===ht)throw dt(e)?new Error(\\\\\\\"Error creating WebGL context with your selected attributes.\\\\\\\"):new Error(\\\\\\\"Error creating WebGL context.\\\\\\\")}void 0===ht.getShaderPrecisionFormat&&(ht.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}})}catch(t){throw console.error(\\\\\\\"THREE.WebGLRenderer: \\\\\\\"+t.message),t}function pt(){V=new IT(ht),H=new sT(ht,V,t),V.init(H),ct=new LE(ht,V,H),j=new CE(ht,V,H),P[0]=1029,W=new kT(ht),q=new _E,X=new NE(ht,V,j,q,H,ct,W),Y=new aT(m),$=new PT(m),J=new Zw(ht,H),ut=new iT(ht,V,J,H),Z=new FT(ht,J,W,ut),Q=new HT(ht,Z,J,W),ot=new VT(ht,H,X),it=new oT(q),K=new pE(m,Y,$,V,H,ut,it),tt=new DE(q),et=new vE(q),nt=new AE(V,H),st=new nT(m,Y,j,Q,a),rt=new SE(m,Q,H),at=new rT(ht,V,W,H),lt=new DT(ht,V,W,H),W.programs=K.programs,m.capabilities=H,m.extensions=V,m.properties=q,m.renderLists=et,m.shadowMap=rt,m.state=j,m.info=W}pt();const _t=new FE(m,ht);function mt(t){t.preventDefault(),console.log(\\\\\\\"THREE.WebGLRenderer: Context Lost.\\\\\\\"),f=!0}function ft(){console.log(\\\\\\\"THREE.WebGLRenderer: Context Restored.\\\\\\\"),f=!1;const t=W.autoReset,e=rt.enabled,n=rt.autoUpdate,i=rt.needsUpdate,r=rt.type;pt(),W.autoReset=t,rt.enabled=e,rt.autoUpdate=n,rt.needsUpdate=i,rt.type=r}function gt(t){const e=t.target;e.removeEventListener(\\\\\\\"dispose\\\\\\\",gt),function(t){(function(t){const e=q.get(t).programs;void 0!==e&&e.forEach((function(t){K.releaseProgram(t)}))})(t),q.remove(t)}(e)}this.xr=_t,this.getContext=function(){return ht},this.getContextAttributes=function(){return ht.getContextAttributes()},this.forceContextLoss=function(){const t=V.get(\\\\\\\"WEBGL_lose_context\\\\\\\");t&&t.loseContext()},this.forceContextRestore=function(){const t=V.get(\\\\\\\"WEBGL_lose_context\\\\\\\");t&&t.restoreContext()},this.getPixelRatio=function(){return S},this.setPixelRatio=function(t){void 0!==t&&(S=t,this.setSize(E,M,!1))},this.getSize=function(t){return t.set(E,M)},this.setSize=function(t,n,i){_t.isPresenting?console.warn(\\\\\\\"THREE.WebGLRenderer: Can't change size while VR device is presenting.\\\\\\\"):(E=t,M=n,e.width=Math.floor(t*S),e.height=Math.floor(n*S),!1!==i&&(e.style.width=t+\\\\\\\"px\\\\\\\",e.style.height=n+\\\\\\\"px\\\\\\\"),this.setViewport(0,0,t,n))},this.getDrawingBufferSize=function(t){return t.set(E*S,M*S).floor()},this.setDrawingBufferSize=function(t,n,i){E=t,M=n,S=i,e.width=Math.floor(t*i),e.height=Math.floor(n*i),this.setViewport(0,0,t,n)},this.getCurrentViewport=function(t){return t.copy(w)},this.getViewport=function(t){return t.copy(L)},this.setViewport=function(t,e,n,i){t.isVector4?L.set(t.x,t.y,t.z,t.w):L.set(t,e,n,i),j.viewport(w.copy(L).multiplyScalar(S).floor())},this.getScissor=function(t){return t.copy(O)},this.setScissor=function(t,e,n,i){t.isVector4?O.set(t.x,t.y,t.z,t.w):O.set(t,e,n,i),j.scissor(T.copy(O).multiplyScalar(S).floor())},this.getScissorTest=function(){return R},this.setScissorTest=function(t){j.setScissorTest(R=t)},this.setOpaqueSort=function(t){C=t},this.setTransparentSort=function(t){N=t},this.getClearColor=function(t){return t.copy(st.getClearColor())},this.setClearColor=function(){st.setClearColor.apply(st,arguments)},this.getClearAlpha=function(){return st.getClearAlpha()},this.setClearAlpha=function(){st.setClearAlpha.apply(st,arguments)},this.clear=function(t,e,n){let i=0;(void 0===t||t)&&(i|=16384),(void 0===e||e)&&(i|=256),(void 0===n||n)&&(i|=1024),ht.clear(i)},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(){e.removeEventListener(\\\\\\\"webglcontextlost\\\\\\\",mt,!1),e.removeEventListener(\\\\\\\"webglcontextrestored\\\\\\\",ft,!1),et.dispose(),nt.dispose(),q.dispose(),Y.dispose(),$.dispose(),Q.dispose(),ut.dispose(),_t.dispose(),_t.removeEventListener(\\\\\\\"sessionstart\\\\\\\",yt),_t.removeEventListener(\\\\\\\"sessionend\\\\\\\",xt),k&&(k.dispose(),k=null),bt.stop()},this.renderBufferImmediate=function(t,e){ut.initAttributes();const n=q.get(t);t.hasPositions&&!n.position&&(n.position=ht.createBuffer()),t.hasNormals&&!n.normal&&(n.normal=ht.createBuffer()),t.hasUvs&&!n.uv&&(n.uv=ht.createBuffer()),t.hasColors&&!n.color&&(n.color=ht.createBuffer());const i=e.getAttributes();t.hasPositions&&(ht.bindBuffer(34962,n.position),ht.bufferData(34962,t.positionArray,35048),ut.enableAttribute(i.position.location),ht.vertexAttribPointer(i.position.location,3,5126,!1,0,0)),t.hasNormals&&(ht.bindBuffer(34962,n.normal),ht.bufferData(34962,t.normalArray,35048),ut.enableAttribute(i.normal.location),ht.vertexAttribPointer(i.normal.location,3,5126,!1,0,0)),t.hasUvs&&(ht.bindBuffer(34962,n.uv),ht.bufferData(34962,t.uvArray,35048),ut.enableAttribute(i.uv.location),ht.vertexAttribPointer(i.uv.location,2,5126,!1,0,0)),t.hasColors&&(ht.bindBuffer(34962,n.color),ht.bufferData(34962,t.colorArray,35048),ut.enableAttribute(i.color.location),ht.vertexAttribPointer(i.color.location,3,5126,!1,0,0)),ut.disableUnusedAttributes(),ht.drawArrays(4,0,t.count),t.count=0},this.renderBufferDirect=function(t,e,n,i,r,s){null===e&&(e=U);const o=r.isMesh&&r.matrixWorld.determinant()<0,a=Ct(t,e,n,i,r);j.setMaterial(i,o);let l=n.index;const c=n.attributes.position;if(null===l){if(void 0===c||0===c.count)return}else if(0===l.count)return;let u,h=1;!0===i.wireframe&&(l=Z.getWireframeAttribute(n),h=2),ut.setup(r,i,a,n,l);let d=at;null!==l&&(u=J.get(l),d=lt,d.setIndex(u));const p=null!==l?l.count:c.count,_=n.drawRange.start*h,m=n.drawRange.count*h,f=null!==s?s.start*h:0,g=null!==s?s.count*h:1/0,v=Math.max(_,f),y=Math.min(p,_+m,f+g)-1,x=Math.max(0,y-v+1);if(0!==x){if(r.isMesh)!0===i.wireframe?(j.setLineWidth(i.wireframeLinewidth*G()),d.setMode(1)):d.setMode(4);else if(r.isLine){let t=i.linewidth;void 0===t&&(t=1),j.setLineWidth(t*G()),r.isLineSegments?d.setMode(1):r.isLineLoop?d.setMode(2):d.setMode(3)}else r.isPoints?d.setMode(0):r.isSprite&&d.setMode(4);if(r.isInstancedMesh)d.renderInstances(v,x,r.count);else if(n.isInstancedBufferGeometry){const t=Math.min(n.instanceCount,n._maxInstanceCount);d.renderInstances(v,x,t)}else d.render(v,x)}},this.compile=function(t,e){d=nt.get(t),d.init(),_.push(d),t.traverseVisible((function(t){t.isLight&&t.layers.test(e.layers)&&(d.pushLight(t),t.castShadow&&d.pushShadow(t))})),d.setupLights(m.physicallyCorrectLights),t.traverse((function(e){const n=e.material;if(n)if(Array.isArray(n))for(let i=0;i<n.length;i++){Mt(n[i],t,e)}else Mt(n,t,e)})),_.pop(),d=null};let vt=null;function yt(){bt.stop()}function xt(){bt.start()}const bt=new Jw;function wt(t,e,n,i){if(!1===t.visible)return;if(t.layers.test(e.layers))if(t.isGroup)n=t.renderOrder;else if(t.isLOD)!0===t.autoUpdate&&t.update(e);else if(t.isLight)d.pushLight(t),t.castShadow&&d.pushShadow(t);else if(t.isSprite){if(!t.frustumCulled||I.intersectsSprite(t)){i&&z.setFromMatrixPosition(t.matrixWorld).applyMatrix4(B);const e=Q.update(t),r=t.material;r.visible&&h.push(t,e,r,n,z.z,null)}}else if(t.isImmediateRenderObject)i&&z.setFromMatrixPosition(t.matrixWorld).applyMatrix4(B),h.push(t,null,t.material,n,z.z,null);else if((t.isMesh||t.isLine||t.isPoints)&&(t.isSkinnedMesh&&t.skeleton.frame!==W.render.frame&&(t.skeleton.update(),t.skeleton.frame=W.render.frame),!t.frustumCulled||I.intersectsObject(t))){i&&z.setFromMatrixPosition(t.matrixWorld).applyMatrix4(B);const e=Q.update(t),r=t.material;if(Array.isArray(r)){const i=e.groups;for(let s=0,o=i.length;s<o;s++){const o=i[s],a=r[o.materialIndex];a&&a.visible&&h.push(t,e,a,n,z.z,o)}}else r.visible&&h.push(t,e,r,n,z.z,null)}const r=t.children;for(let t=0,s=r.length;t<s;t++)wt(r[t],e,n,i)}function Tt(t,e,n,i){const r=t.opaque,s=t.transmissive,a=t.transparent;d.setupLightsView(n),s.length>0&&function(t,e,n){if(null===k){const t=!0===o&&!0===H.isWebGL2;k=new(t?Sx:Mx)(1024,1024,{generateMipmaps:!0,type:null!==ct.convert(Fy)?Fy:Oy,minFilter:Ly,magFilter:Ey,wrapS:Ty,wrapT:Ty})}const i=m.getRenderTarget();m.setRenderTarget(k),m.clear();const r=m.toneMapping;m.toneMapping=0,At(t,e,n),m.toneMapping=r,X.updateMultisampleRenderTarget(k),X.updateRenderTargetMipmap(k),m.setRenderTarget(i)}(r,e,n),i&&j.viewport(w.copy(i)),r.length>0&&At(r,e,n),s.length>0&&At(s,e,n),a.length>0&&At(a,e,n)}function At(t,e,n){const i=!0===e.isScene?e.overrideMaterial:null;for(let r=0,s=t.length;r<s;r++){const s=t[r],o=s.object,a=s.geometry,l=null===i?s.material:i,c=s.group;o.layers.test(n.layers)&&Et(o,e,n,a,l,c)}}function Et(t,e,n,i,r,s){if(t.onBeforeRender(m,e,n,i,r,s),t.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse,t.matrixWorld),t.normalMatrix.getNormalMatrix(t.modelViewMatrix),r.onBeforeRender(m,e,n,i,t,s),t.isImmediateRenderObject){const s=Ct(n,e,i,r,t);j.setMaterial(r),ut.reset(),function(t,e){t.render((function(t){m.renderBufferImmediate(t,e)}))}(t,s)}else!0===r.transparent&&2===r.side?(r.side=1,r.needsUpdate=!0,m.renderBufferDirect(n,e,i,r,t,s),r.side=0,r.needsUpdate=!0,m.renderBufferDirect(n,e,i,r,t,s),r.side=2):m.renderBufferDirect(n,e,i,r,t,s);t.onAfterRender(m,e,n,i,r,s)}function Mt(t,e,n){!0!==e.isScene&&(e=U);const i=q.get(t),r=d.state.lights,s=d.state.shadowsArray,o=r.state.version,a=K.getParameters(t,r.state,s,e,n),l=K.getProgramCacheKey(a);let c=i.programs;i.environment=t.isMeshStandardMaterial?e.environment:null,i.fog=e.fog,i.envMap=(t.isMeshStandardMaterial?$:Y).get(t.envMap||i.environment),void 0===c&&(t.addEventListener(\\\\\\\"dispose\\\\\\\",gt),c=new Map,i.programs=c);let u=c.get(l);if(void 0!==u){if(i.currentProgram===u&&i.lightsStateVersion===o)return St(t,a),u}else a.uniforms=K.getUniforms(t),t.onBuild(a,m),t.onBeforeCompile(a,m),u=K.acquireProgram(a,l),c.set(l,u),i.uniforms=a.uniforms;const h=i.uniforms;(t.isShaderMaterial||t.isRawShaderMaterial)&&!0!==t.clipping||(h.clippingPlanes=it.uniform),St(t,a),i.needsLights=function(t){return t.isMeshLambertMaterial||t.isMeshToonMaterial||t.isMeshPhongMaterial||t.isMeshStandardMaterial||t.isShadowMaterial||t.isShaderMaterial&&!0===t.lights}(t),i.lightsStateVersion=o,i.needsLights&&(h.ambientLightColor.value=r.state.ambient,h.lightProbe.value=r.state.probe,h.directionalLights.value=r.state.directional,h.directionalLightShadows.value=r.state.directionalShadow,h.spotLights.value=r.state.spot,h.spotLightShadows.value=r.state.spotShadow,h.rectAreaLights.value=r.state.rectArea,h.ltc_1.value=r.state.rectAreaLTC1,h.ltc_2.value=r.state.rectAreaLTC2,h.pointLights.value=r.state.point,h.pointLightShadows.value=r.state.pointShadow,h.hemisphereLights.value=r.state.hemi,h.directionalShadowMap.value=r.state.directionalShadowMap,h.directionalShadowMatrix.value=r.state.directionalShadowMatrix,h.spotShadowMap.value=r.state.spotShadowMap,h.spotShadowMatrix.value=r.state.spotShadowMatrix,h.pointShadowMap.value=r.state.pointShadowMap,h.pointShadowMatrix.value=r.state.pointShadowMatrix);const p=u.getUniforms(),_=qA.seqWithValue(p.seq,h);return i.currentProgram=u,i.uniformsList=_,u}function St(t,e){const n=q.get(t);n.outputEncoding=e.outputEncoding,n.instancing=e.instancing,n.skinning=e.skinning,n.morphTargets=e.morphTargets,n.morphNormals=e.morphNormals,n.morphTargetsCount=e.morphTargetsCount,n.numClippingPlanes=e.numClippingPlanes,n.numIntersection=e.numClipIntersection,n.vertexAlphas=e.vertexAlphas,n.vertexTangents=e.vertexTangents}function Ct(t,e,n,i,r){!0!==e.isScene&&(e=U),X.resetTextureUnits();const s=e.fog,o=i.isMeshStandardMaterial?e.environment:null,a=null===y?m.outputEncoding:y.texture.encoding,l=(i.isMeshStandardMaterial?$:Y).get(i.envMap||o),c=!0===i.vertexColors&&!!n&&!!n.attributes.color&&4===n.attributes.color.itemSize,u=!!i.normalMap&&!!n&&!!n.attributes.tangent,h=!!n&&!!n.morphAttributes.position,p=!!n&&!!n.morphAttributes.normal,_=n&&n.morphAttributes.position?n.morphAttributes.position.length:0,f=q.get(i),g=d.state.lights;if(!0===F&&(!0===D||t!==b)){const e=t===b&&i.id===x;it.setState(i,t,e)}let v=!1;i.version===f.__version?f.needsLights&&f.lightsStateVersion!==g.state.version||f.outputEncoding!==a||r.isInstancedMesh&&!1===f.instancing?v=!0:r.isInstancedMesh||!0!==f.instancing?r.isSkinnedMesh&&!1===f.skinning?v=!0:r.isSkinnedMesh||!0!==f.skinning?f.envMap!==l||i.fog&&f.fog!==s?v=!0:void 0===f.numClippingPlanes||f.numClippingPlanes===it.numPlanes&&f.numIntersection===it.numIntersection?(f.vertexAlphas!==c||f.vertexTangents!==u||f.morphTargets!==h||f.morphNormals!==p||!0===H.isWebGL2&&f.morphTargetsCount!==_)&&(v=!0):v=!0:v=!0:v=!0:(v=!0,f.__version=i.version);let w=f.currentProgram;!0===v&&(w=Mt(i,e,r));let T=!1,A=!1,E=!1;const C=w.getUniforms(),N=f.uniforms;if(j.useProgram(w.program)&&(T=!0,A=!0,E=!0),i.id!==x&&(x=i.id,A=!0),T||b!==t){if(C.setValue(ht,\\\\\\\"projectionMatrix\\\\\\\",t.projectionMatrix),H.logarithmicDepthBuffer&&C.setValue(ht,\\\\\\\"logDepthBufFC\\\\\\\",2/(Math.log(t.far+1)/Math.LN2)),b!==t&&(b=t,A=!0,E=!0),i.isShaderMaterial||i.isMeshPhongMaterial||i.isMeshToonMaterial||i.isMeshStandardMaterial||i.envMap){const e=C.map.cameraPosition;void 0!==e&&e.setValue(ht,z.setFromMatrixPosition(t.matrixWorld))}(i.isMeshPhongMaterial||i.isMeshToonMaterial||i.isMeshLambertMaterial||i.isMeshBasicMaterial||i.isMeshStandardMaterial||i.isShaderMaterial)&&C.setValue(ht,\\\\\\\"isOrthographic\\\\\\\",!0===t.isOrthographicCamera),(i.isMeshPhongMaterial||i.isMeshToonMaterial||i.isMeshLambertMaterial||i.isMeshBasicMaterial||i.isMeshStandardMaterial||i.isShaderMaterial||i.isShadowMaterial||r.isSkinnedMesh)&&C.setValue(ht,\\\\\\\"viewMatrix\\\\\\\",t.matrixWorldInverse)}if(r.isSkinnedMesh){C.setOptional(ht,r,\\\\\\\"bindMatrix\\\\\\\"),C.setOptional(ht,r,\\\\\\\"bindMatrixInverse\\\\\\\");const t=r.skeleton;t&&(H.floatVertexTextures?(null===t.boneTexture&&t.computeBoneTexture(),C.setValue(ht,\\\\\\\"boneTexture\\\\\\\",t.boneTexture,X),C.setValue(ht,\\\\\\\"boneTextureSize\\\\\\\",t.boneTextureSize)):C.setOptional(ht,t,\\\\\\\"boneMatrices\\\\\\\"))}var L,O;return!n||void 0===n.morphAttributes.position&&void 0===n.morphAttributes.normal||ot.update(r,n,i,w),(A||f.receiveShadow!==r.receiveShadow)&&(f.receiveShadow=r.receiveShadow,C.setValue(ht,\\\\\\\"receiveShadow\\\\\\\",r.receiveShadow)),A&&(C.setValue(ht,\\\\\\\"toneMappingExposure\\\\\\\",m.toneMappingExposure),f.needsLights&&(O=E,(L=N).ambientLightColor.needsUpdate=O,L.lightProbe.needsUpdate=O,L.directionalLights.needsUpdate=O,L.directionalLightShadows.needsUpdate=O,L.pointLights.needsUpdate=O,L.pointLightShadows.needsUpdate=O,L.spotLights.needsUpdate=O,L.spotLightShadows.needsUpdate=O,L.rectAreaLights.needsUpdate=O,L.hemisphereLights.needsUpdate=O),s&&i.fog&&tt.refreshFogUniforms(N,s),tt.refreshMaterialUniforms(N,i,S,M,k),qA.upload(ht,f.uniformsList,N,X)),i.isShaderMaterial&&!0===i.uniformsNeedUpdate&&(qA.upload(ht,f.uniformsList,N,X),i.uniformsNeedUpdate=!1),i.isSpriteMaterial&&C.setValue(ht,\\\\\\\"center\\\\\\\",r.center),C.setValue(ht,\\\\\\\"modelViewMatrix\\\\\\\",r.modelViewMatrix),C.setValue(ht,\\\\\\\"normalMatrix\\\\\\\",r.normalMatrix),C.setValue(ht,\\\\\\\"modelMatrix\\\\\\\",r.matrixWorld),w}bt.setAnimationLoop((function(t){vt&&vt(t)})),\\\\\\\"undefined\\\\\\\"!=typeof window&&bt.setContext(window),this.setAnimationLoop=function(t){vt=t,_t.setAnimationLoop(t),null===t?bt.stop():bt.start()},_t.addEventListener(\\\\\\\"sessionstart\\\\\\\",yt),_t.addEventListener(\\\\\\\"sessionend\\\\\\\",xt),this.render=function(t,e){if(void 0!==e&&!0!==e.isCamera)return void console.error(\\\\\\\"THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.\\\\\\\");if(!0===f)return;!0===t.autoUpdate&&t.updateMatrixWorld(),null===e.parent&&e.updateMatrixWorld(),!0===_t.enabled&&!0===_t.isPresenting&&(!0===_t.cameraAutoUpdate&&_t.updateCamera(e),e=_t.getCamera()),!0===t.isScene&&t.onBeforeRender(m,t,e,y),d=nt.get(t,_.length),d.init(),_.push(d),B.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),I.setFromProjectionMatrix(B),D=this.localClippingEnabled,F=it.init(this.clippingPlanes,D,e),h=et.get(t,p.length),h.init(),p.push(h),wt(t,e,0,m.sortObjects),h.finish(),!0===m.sortObjects&&h.sort(C,N),!0===F&&it.beginShadows();const n=d.state.shadowsArray;if(rt.render(n,t,e),!0===F&&it.endShadows(),!0===this.info.autoReset&&this.info.reset(),st.render(h,t),d.setupLights(m.physicallyCorrectLights),e.isArrayCamera){const n=e.cameras;for(let e=0,i=n.length;e<i;e++){const i=n[e];Tt(h,t,i,i.viewport)}}else Tt(h,t,e);null!==y&&(X.updateMultisampleRenderTarget(y),X.updateRenderTargetMipmap(y)),!0===t.isScene&&t.onAfterRender(m,t,e),j.buffers.depth.setTest(!0),j.buffers.depth.setMask(!0),j.buffers.color.setMask(!0),j.setPolygonOffset(!1),ut.resetDefaultState(),x=-1,b=null,_.pop(),d=_.length>0?_[_.length-1]:null,p.pop(),h=p.length>0?p[p.length-1]:null},this.getActiveCubeFace=function(){return g},this.getActiveMipmapLevel=function(){return v},this.getRenderTarget=function(){return y},this.setRenderTarget=function(t,e=0,n=0){y=t,g=e,v=n,t&&void 0===q.get(t).__webglFramebuffer&&X.setupRenderTarget(t);let i=null,r=!1,s=!1;if(t){const n=t.texture;(n.isDataTexture3D||n.isDataTexture2DArray)&&(s=!0);const o=q.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(i=o[e],r=!0):i=t.isWebGLMultisampleRenderTarget?q.get(t).__webglMultisampledFramebuffer:o,w.copy(t.viewport),T.copy(t.scissor),A=t.scissorTest}else w.copy(L).multiplyScalar(S).floor(),T.copy(O).multiplyScalar(S).floor(),A=R;if(j.bindFramebuffer(36160,i)&&H.drawBuffers){let e=!1;if(t)if(t.isWebGLMultipleRenderTargets){const n=t.texture;if(P.length!==n.length||36064!==P[0]){for(let t=0,e=n.length;t<e;t++)P[t]=36064+t;P.length=n.length,e=!0}}else 1===P.length&&36064===P[0]||(P[0]=36064,P.length=1,e=!0);else 1===P.length&&1029===P[0]||(P[0]=1029,P.length=1,e=!0);e&&(H.isWebGL2?ht.drawBuffers(P):V.get(\\\\\\\"WEBGL_draw_buffers\\\\\\\").drawBuffersWEBGL(P))}if(j.viewport(w),j.scissor(T),j.setScissorTest(A),r){const i=q.get(t.texture);ht.framebufferTexture2D(36160,36064,34069+e,i.__webglTexture,n)}else if(s){const i=q.get(t.texture),r=e||0;ht.framebufferTextureLayer(36160,36064,i.__webglTexture,n||0,r)}x=-1},this.readRenderTargetPixels=function(t,e,n,i,r,s,o){if(!t||!t.isWebGLRenderTarget)return void console.error(\\\\\\\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.\\\\\\\");let a=q.get(t).__webglFramebuffer;if(t.isWebGLCubeRenderTarget&&void 0!==o&&(a=a[o]),a){j.bindFramebuffer(36160,a);try{const o=t.texture,a=o.format,l=o.type;if(a!==By&&ct.convert(a)!==ht.getParameter(35739))return void console.error(\\\\\\\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.\\\\\\\");const c=l===Fy&&(V.has(\\\\\\\"EXT_color_buffer_half_float\\\\\\\")||H.isWebGL2&&V.has(\\\\\\\"EXT_color_buffer_float\\\\\\\"));if(!(l===Oy||ct.convert(l)===ht.getParameter(35738)||l===Iy&&(H.isWebGL2||V.has(\\\\\\\"OES_texture_float\\\\\\\")||V.has(\\\\\\\"WEBGL_color_buffer_float\\\\\\\"))||c))return void console.error(\\\\\\\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.\\\\\\\");36053===ht.checkFramebufferStatus(36160)?e>=0&&e<=t.width-i&&n>=0&&n<=t.height-r&&ht.readPixels(e,n,i,r,ct.convert(a),ct.convert(l),s):console.error(\\\\\\\"THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.\\\\\\\")}finally{const t=null!==y?q.get(y).__webglFramebuffer:null;j.bindFramebuffer(36160,t)}}},this.copyFramebufferToTexture=function(t,e,n=0){const i=Math.pow(2,-n),r=Math.floor(e.image.width*i),s=Math.floor(e.image.height*i);let o=ct.convert(e.format);H.isWebGL2&&(6407===o&&(o=32849),6408===o&&(o=32856)),X.setTexture2D(e,0),ht.copyTexImage2D(3553,n,o,t.x,t.y,r,s,0),j.unbindTexture()},this.copyTextureToTexture=function(t,e,n,i=0){const r=e.image.width,s=e.image.height,o=ct.convert(n.format),a=ct.convert(n.type);X.setTexture2D(n,0),ht.pixelStorei(37440,n.flipY),ht.pixelStorei(37441,n.premultiplyAlpha),ht.pixelStorei(3317,n.unpackAlignment),e.isDataTexture?ht.texSubImage2D(3553,i,t.x,t.y,r,s,o,a,e.image.data):e.isCompressedTexture?ht.compressedTexSubImage2D(3553,i,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,o,e.mipmaps[0].data):ht.texSubImage2D(3553,i,t.x,t.y,o,a,e.image),0===i&&n.generateMipmaps&&ht.generateMipmap(3553),j.unbindTexture()},this.copyTextureToTexture3D=function(t,e,n,i,r=0){if(m.isWebGL1Renderer)return void console.warn(\\\\\\\"THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.\\\\\\\");const s=t.max.x-t.min.x+1,o=t.max.y-t.min.y+1,a=t.max.z-t.min.z+1,l=ct.convert(i.format),c=ct.convert(i.type);let u;if(i.isDataTexture3D)X.setTexture3D(i,0),u=32879;else{if(!i.isDataTexture2DArray)return void console.warn(\\\\\\\"THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.\\\\\\\");X.setTexture2DArray(i,0),u=35866}ht.pixelStorei(37440,i.flipY),ht.pixelStorei(37441,i.premultiplyAlpha),ht.pixelStorei(3317,i.unpackAlignment);const h=ht.getParameter(3314),d=ht.getParameter(32878),p=ht.getParameter(3316),_=ht.getParameter(3315),f=ht.getParameter(32877),g=n.isCompressedTexture?n.mipmaps[0]:n.image;ht.pixelStorei(3314,g.width),ht.pixelStorei(32878,g.height),ht.pixelStorei(3316,t.min.x),ht.pixelStorei(3315,t.min.y),ht.pixelStorei(32877,t.min.z),n.isDataTexture||n.isDataTexture3D?ht.texSubImage3D(u,r,e.x,e.y,e.z,s,o,a,l,c,g.data):n.isCompressedTexture?(console.warn(\\\\\\\"THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture.\\\\\\\"),ht.compressedTexSubImage3D(u,r,e.x,e.y,e.z,s,o,a,l,g.data)):ht.texSubImage3D(u,r,e.x,e.y,e.z,s,o,a,l,c,g),ht.pixelStorei(3314,h),ht.pixelStorei(32878,d),ht.pixelStorei(3316,p),ht.pixelStorei(3315,_),ht.pixelStorei(32877,f),0===r&&i.generateMipmaps&&ht.generateMipmap(u),j.unbindTexture()},this.initTexture=function(t){X.setTexture2D(t,0),j.unbindTexture()},this.resetState=function(){g=0,v=0,y=null,j.reset(),ut.reset()},\\\\\\\"undefined\\\\\\\"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\\\\\\\"observe\\\\\\\",{detail:this}))}(class extends kE{}).prototype.isWebGL1Renderer=!0;class BE{constructor(t,e=25e-5){this.name=\\\\\\\"\\\\\\\",this.color=new Zb(t),this.density=e}clone(){return new BE(this.color,this.density)}toJSON(){return{type:\\\\\\\"FogExp2\\\\\\\",color:this.color.getHex(),density:this.density}}}BE.prototype.isFogExp2=!0;class zE{constructor(t,e=1,n=1e3){this.name=\\\\\\\"\\\\\\\",this.color=new Zb(t),this.near=e,this.far=n}clone(){return new zE(this.color,this.near,this.far)}toJSON(){return{type:\\\\\\\"Fog\\\\\\\",color:this.color.getHex(),near:this.near,far:this.far}}}zE.prototype.isFog=!0;class UE extends Ob{constructor(){super(),this.type=\\\\\\\"Scene\\\\\\\",this.background=null,this.environment=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0,\\\\\\\"undefined\\\\\\\"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\\\\\\\"observe\\\\\\\",{detail:this}))}copy(t,e){return super.copy(t,e),null!==t.background&&(this.background=t.background.clone()),null!==t.environment&&(this.environment=t.environment.clone()),null!==t.fog&&(this.fog=t.fog.clone()),null!==t.overrideMaterial&&(this.overrideMaterial=t.overrideMaterial.clone()),this.autoUpdate=t.autoUpdate,this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return null!==this.fog&&(e.object.fog=this.fog.toJSON()),e}}UE.prototype.isScene=!0;class GE{constructor(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=Ky,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=lx()}onUploadCallback(){}set needsUpdate(t){!0===t&&this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this}copyAt(t,e,n){t*=this.stride,n*=e.stride;for(let i=0,r=this.stride;i<r;i++)this.array[t+i]=e.array[n+i];return this}set(t,e=0){return this.array.set(t,e),this}clone(t){void 0===t.arrayBuffers&&(t.arrayBuffers={}),void 0===this.array.buffer._uuid&&(this.array.buffer._uuid=lx()),void 0===t.arrayBuffers[this.array.buffer._uuid]&&(t.arrayBuffers[this.array.buffer._uuid]=this.array.slice(0).buffer);const e=new this.array.constructor(t.arrayBuffers[this.array.buffer._uuid]),n=new this.constructor(e,this.stride);return n.setUsage(this.usage),n}onUpload(t){return this.onUploadCallback=t,this}toJSON(t){return void 0===t.arrayBuffers&&(t.arrayBuffers={}),void 0===this.array.buffer._uuid&&(this.array.buffer._uuid=lx()),void 0===t.arrayBuffers[this.array.buffer._uuid]&&(t.arrayBuffers[this.array.buffer._uuid]=Array.prototype.slice.call(new Uint32Array(this.array.buffer))),{uuid:this.uuid,buffer:this.array.buffer._uuid,type:this.array.constructor.name,stride:this.stride}}}GE.prototype.isInterleavedBuffer=!0;const VE=new Nx;class HE{constructor(t,e,n,i=!1){this.name=\\\\\\\"\\\\\\\",this.data=t,this.itemSize=e,this.offset=n,this.normalized=!0===i}get count(){return this.data.count}get array(){return this.data.array}set needsUpdate(t){this.data.needsUpdate=t}applyMatrix4(t){for(let e=0,n=this.data.count;e<n;e++)VE.x=this.getX(e),VE.y=this.getY(e),VE.z=this.getZ(e),VE.applyMatrix4(t),this.setXYZ(e,VE.x,VE.y,VE.z);return this}applyNormalMatrix(t){for(let e=0,n=this.count;e<n;e++)VE.x=this.getX(e),VE.y=this.getY(e),VE.z=this.getZ(e),VE.applyNormalMatrix(t),this.setXYZ(e,VE.x,VE.y,VE.z);return this}transformDirection(t){for(let e=0,n=this.count;e<n;e++)VE.x=this.getX(e),VE.y=this.getY(e),VE.z=this.getZ(e),VE.transformDirection(t),this.setXYZ(e,VE.x,VE.y,VE.z);return this}setX(t,e){return this.data.array[t*this.data.stride+this.offset]=e,this}setY(t,e){return this.data.array[t*this.data.stride+this.offset+1]=e,this}setZ(t,e){return this.data.array[t*this.data.stride+this.offset+2]=e,this}setW(t,e){return this.data.array[t*this.data.stride+this.offset+3]=e,this}getX(t){return this.data.array[t*this.data.stride+this.offset]}getY(t){return this.data.array[t*this.data.stride+this.offset+1]}getZ(t){return this.data.array[t*this.data.stride+this.offset+2]}getW(t){return this.data.array[t*this.data.stride+this.offset+3]}setXY(t,e,n){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=n,this}setXYZ(t,e,n,i){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=n,this.data.array[t+2]=i,this}setXYZW(t,e,n,i,r){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=n,this.data.array[t+2]=i,this.data.array[t+3]=r,this}clone(t){if(void 0===t){console.log(\\\\\\\"THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.\\\\\\\");const t=[];for(let e=0;e<this.count;e++){const n=e*this.data.stride+this.offset;for(let e=0;e<this.itemSize;e++)t.push(this.data.array[n+e])}return new ew(new this.array.constructor(t),this.itemSize,this.normalized)}return void 0===t.interleavedBuffers&&(t.interleavedBuffers={}),void 0===t.interleavedBuffers[this.data.uuid]&&(t.interleavedBuffers[this.data.uuid]=this.data.clone(t)),new HE(t.interleavedBuffers[this.data.uuid],this.itemSize,this.offset,this.normalized)}toJSON(t){if(void 0===t){console.log(\\\\\\\"THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.\\\\\\\");const t=[];for(let e=0;e<this.count;e++){const n=e*this.data.stride+this.offset;for(let e=0;e<this.itemSize;e++)t.push(this.data.array[n+e])}return{itemSize:this.itemSize,type:this.array.constructor.name,array:t,normalized:this.normalized}}return void 0===t.interleavedBuffers&&(t.interleavedBuffers={}),void 0===t.interleavedBuffers[this.data.uuid]&&(t.interleavedBuffers[this.data.uuid]=this.data.toJSON(t)),{isInterleavedBufferAttribute:!0,itemSize:this.itemSize,data:this.data.uuid,offset:this.offset,normalized:this.normalized}}}HE.prototype.isInterleavedBufferAttribute=!0;class jE extends jb{constructor(t){super(),this.type=\\\\\\\"SpriteMaterial\\\\\\\",this.color=new Zb(16777215),this.map=null,this.alphaMap=null,this.rotation=0,this.sizeAttenuation=!0,this.transparent=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.alphaMap=t.alphaMap,this.rotation=t.rotation,this.sizeAttenuation=t.sizeAttenuation,this}}let WE;jE.prototype.isSpriteMaterial=!0;const qE=new Nx,XE=new Nx,YE=new Nx,$E=new fx,JE=new fx,ZE=new ob,QE=new Nx,KE=new Nx,tM=new Nx,eM=new fx,nM=new fx,iM=new fx;class rM extends Ob{constructor(t){if(super(),this.type=\\\\\\\"Sprite\\\\\\\",void 0===WE){WE=new dw;const t=new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]),e=new GE(t,5);WE.setIndex([0,1,2,0,2,3]),WE.setAttribute(\\\\\\\"position\\\\\\\",new HE(e,3,0,!1)),WE.setAttribute(\\\\\\\"uv\\\\\\\",new HE(e,2,3,!1))}this.geometry=WE,this.material=void 0!==t?t:new jE,this.center=new fx(.5,.5)}raycast(t,e){null===t.camera&&console.error('THREE.Sprite: \\\\\\\"Raycaster.camera\\\\\\\" needs to be set in order to raycast against sprites.'),XE.setFromMatrixScale(this.matrixWorld),ZE.copy(t.camera.matrixWorld),this.modelViewMatrix.multiplyMatrices(t.camera.matrixWorldInverse,this.matrixWorld),YE.setFromMatrixPosition(this.modelViewMatrix),t.camera.isPerspectiveCamera&&!1===this.material.sizeAttenuation&&XE.multiplyScalar(-YE.z);const n=this.material.rotation;let i,r;0!==n&&(r=Math.cos(n),i=Math.sin(n));const s=this.center;sM(QE.set(-.5,-.5,0),YE,s,XE,i,r),sM(KE.set(.5,-.5,0),YE,s,XE,i,r),sM(tM.set(.5,.5,0),YE,s,XE,i,r),eM.set(0,0),nM.set(1,0),iM.set(1,1);let o=t.ray.intersectTriangle(QE,KE,tM,!1,qE);if(null===o&&(sM(KE.set(-.5,.5,0),YE,s,XE,i,r),nM.set(0,1),o=t.ray.intersectTriangle(QE,tM,KE,!1,qE),null===o))return;const a=t.ray.origin.distanceTo(qE);a<t.near||a>t.far||e.push({distance:a,point:qE.clone(),uv:Vb.getUV(qE,QE,KE,tM,eM,nM,iM,new fx),face:null,object:this})}copy(t){return super.copy(t),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}}function sM(t,e,n,i,r,s){$E.subVectors(t,n).addScalar(.5).multiply(i),void 0!==r?(JE.x=s*$E.x-r*$E.y,JE.y=r*$E.x+s*$E.y):JE.copy($E),t.copy(e),t.x+=JE.x,t.y+=JE.y,t.applyMatrix4(ZE)}rM.prototype.isSprite=!0;const oM=new Nx,aM=new Ex,lM=new Ex,cM=new Nx,uM=new ob;class hM extends Lw{constructor(t,e){super(t,e),this.type=\\\\\\\"SkinnedMesh\\\\\\\",this.bindMode=\\\\\\\"attached\\\\\\\",this.bindMatrix=new ob,this.bindMatrixInverse=new ob}copy(t){return super.copy(t),this.bindMode=t.bindMode,this.bindMatrix.copy(t.bindMatrix),this.bindMatrixInverse.copy(t.bindMatrixInverse),this.skeleton=t.skeleton,this}bind(t,e){this.skeleton=t,void 0===e&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),e=this.matrixWorld),this.bindMatrix.copy(e),this.bindMatrixInverse.copy(e).invert()}pose(){this.skeleton.pose()}normalizeSkinWeights(){const t=new Ex,e=this.geometry.attributes.skinWeight;for(let n=0,i=e.count;n<i;n++){t.x=e.getX(n),t.y=e.getY(n),t.z=e.getZ(n),t.w=e.getW(n);const i=1/t.manhattanLength();i!==1/0?t.multiplyScalar(i):t.set(1,0,0,0),e.setXYZW(n,t.x,t.y,t.z,t.w)}}updateMatrixWorld(t){super.updateMatrixWorld(t),\\\\\\\"attached\\\\\\\"===this.bindMode?this.bindMatrixInverse.copy(this.matrixWorld).invert():\\\\\\\"detached\\\\\\\"===this.bindMode?this.bindMatrixInverse.copy(this.bindMatrix).invert():console.warn(\\\\\\\"THREE.SkinnedMesh: Unrecognized bindMode: \\\\\\\"+this.bindMode)}boneTransform(t,e){const n=this.skeleton,i=this.geometry;aM.fromBufferAttribute(i.attributes.skinIndex,t),lM.fromBufferAttribute(i.attributes.skinWeight,t),oM.copy(e).applyMatrix4(this.bindMatrix),e.set(0,0,0);for(let t=0;t<4;t++){const i=lM.getComponent(t);if(0!==i){const r=aM.getComponent(t);uM.multiplyMatrices(n.bones[r].matrixWorld,n.boneInverses[r]),e.addScaledVector(cM.copy(oM).applyMatrix4(uM),i)}}return e.applyMatrix4(this.bindMatrixInverse)}}hM.prototype.isSkinnedMesh=!0;class dM extends Ob{constructor(){super(),this.type=\\\\\\\"Bone\\\\\\\"}}dM.prototype.isBone=!0;class pM extends Tx{constructor(t=null,e=1,n=1,i,r,s,o,a,l=1003,c=1003,u,h){super(null,s,o,a,l,c,i,r,u,h),this.image={data:t,width:e,height:n},this.magFilter=l,this.minFilter=c,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}}pM.prototype.isDataTexture=!0;class _M extends ew{constructor(t,e,n,i=1){\\\\\\\"number\\\\\\\"==typeof n&&(i=n,n=!1,console.error(\\\\\\\"THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.\\\\\\\")),super(t,e,n),this.meshPerAttribute=i}copy(t){return super.copy(t),this.meshPerAttribute=t.meshPerAttribute,this}toJSON(){const t=super.toJSON();return t.meshPerAttribute=this.meshPerAttribute,t.isInstancedBufferAttribute=!0,t}}_M.prototype.isInstancedBufferAttribute=!0;const mM=new ob,fM=new ob,gM=[],vM=new Lw;class yM extends Lw{constructor(t,e,n){super(t,e),this.instanceMatrix=new _M(new Float32Array(16*n),16),this.instanceColor=null,this.count=n,this.frustumCulled=!1}copy(t){return super.copy(t),this.instanceMatrix.copy(t.instanceMatrix),null!==t.instanceColor&&(this.instanceColor=t.instanceColor.clone()),this.count=t.count,this}getColorAt(t,e){e.fromArray(this.instanceColor.array,3*t)}getMatrixAt(t,e){e.fromArray(this.instanceMatrix.array,16*t)}raycast(t,e){const n=this.matrixWorld,i=this.count;if(vM.geometry=this.geometry,vM.material=this.material,void 0!==vM.material)for(let r=0;r<i;r++){this.getMatrixAt(r,mM),fM.multiplyMatrices(n,mM),vM.matrixWorld=fM,vM.raycast(t,gM);for(let t=0,n=gM.length;t<n;t++){const n=gM[t];n.instanceId=r,n.object=this,e.push(n)}gM.length=0}}setColorAt(t,e){null===this.instanceColor&&(this.instanceColor=new _M(new Float32Array(3*this.instanceMatrix.count),3)),e.toArray(this.instanceColor.array,3*t)}setMatrixAt(t,e){e.toArray(this.instanceMatrix.array,16*t)}updateMorphTargets(){}dispose(){this.dispatchEvent({type:\\\\\\\"dispose\\\\\\\"})}}yM.prototype.isInstancedMesh=!0;class xM extends jb{constructor(t){super(),this.type=\\\\\\\"LineBasicMaterial\\\\\\\",this.color=new Zb(16777215),this.linewidth=1,this.linecap=\\\\\\\"round\\\\\\\",this.linejoin=\\\\\\\"round\\\\\\\",this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.linewidth=t.linewidth,this.linecap=t.linecap,this.linejoin=t.linejoin,this}}xM.prototype.isLineBasicMaterial=!0;const bM=new Nx,wM=new Nx,TM=new ob,AM=new sb,EM=new Zx;class MM extends Ob{constructor(t=new dw,e=new xM){super(),this.type=\\\\\\\"Line\\\\\\\",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t){return super.copy(t),this.material=t.material,this.geometry=t.geometry,this}computeLineDistances(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[0];for(let t=1,i=e.count;t<i;t++)bM.fromBufferAttribute(e,t-1),wM.fromBufferAttribute(e,t),n[t]=n[t-1],n[t]+=bM.distanceTo(wM);t.setAttribute(\\\\\\\"lineDistance\\\\\\\",new rw(n,1))}else console.warn(\\\\\\\"THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.\\\\\\\");else t.isGeometry&&console.error(\\\\\\\"THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\");return this}raycast(t,e){const n=this.geometry,i=this.matrixWorld,r=t.params.Line.threshold,s=n.drawRange;if(null===n.boundingSphere&&n.computeBoundingSphere(),EM.copy(n.boundingSphere),EM.applyMatrix4(i),EM.radius+=r,!1===t.ray.intersectsSphere(EM))return;TM.copy(i).invert(),AM.copy(t.ray).applyMatrix4(TM);const o=r/((this.scale.x+this.scale.y+this.scale.z)/3),a=o*o,l=new Nx,c=new Nx,u=new Nx,h=new Nx,d=this.isLineSegments?2:1;if(n.isBufferGeometry){const i=n.index,r=n.attributes.position;if(null!==i){for(let n=Math.max(0,s.start),o=Math.min(i.count,s.start+s.count)-1;n<o;n+=d){const s=i.getX(n),o=i.getX(n+1);l.fromBufferAttribute(r,s),c.fromBufferAttribute(r,o);if(AM.distanceSqToSegment(l,c,h,u)>a)continue;h.applyMatrix4(this.matrixWorld);const d=t.ray.origin.distanceTo(h);d<t.near||d>t.far||e.push({distance:d,point:u.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}else{for(let n=Math.max(0,s.start),i=Math.min(r.count,s.start+s.count)-1;n<i;n+=d){l.fromBufferAttribute(r,n),c.fromBufferAttribute(r,n+1);if(AM.distanceSqToSegment(l,c,h,u)>a)continue;h.applyMatrix4(this.matrixWorld);const i=t.ray.origin.distanceTo(h);i<t.near||i>t.far||e.push({distance:i,point:u.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}}else n.isGeometry&&console.error(\\\\\\\"THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\")}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e<n;e++){const n=t[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[n]=e}}}}else{const e=t.morphTargets;void 0!==e&&e.length>0&&console.error(\\\\\\\"THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\")}}}MM.prototype.isLine=!0;const SM=new Nx,CM=new Nx;class NM extends MM{constructor(t,e){super(t,e),this.type=\\\\\\\"LineSegments\\\\\\\"}computeLineDistances(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[];for(let t=0,i=e.count;t<i;t+=2)SM.fromBufferAttribute(e,t),CM.fromBufferAttribute(e,t+1),n[t]=0===t?0:n[t-1],n[t+1]=n[t]+SM.distanceTo(CM);t.setAttribute(\\\\\\\"lineDistance\\\\\\\",new rw(n,1))}else console.warn(\\\\\\\"THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.\\\\\\\");else t.isGeometry&&console.error(\\\\\\\"THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\");return this}}NM.prototype.isLineSegments=!0;class LM extends MM{constructor(t,e){super(t,e),this.type=\\\\\\\"LineLoop\\\\\\\"}}LM.prototype.isLineLoop=!0;class OM extends jb{constructor(t){super(),this.type=\\\\\\\"PointsMaterial\\\\\\\",this.color=new Zb(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.alphaMap=t.alphaMap,this.size=t.size,this.sizeAttenuation=t.sizeAttenuation,this}}OM.prototype.isPointsMaterial=!0;const RM=new ob,PM=new sb,IM=new Zx,FM=new Nx;class DM extends Ob{constructor(t=new dw,e=new OM){super(),this.type=\\\\\\\"Points\\\\\\\",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t){return super.copy(t),this.material=t.material,this.geometry=t.geometry,this}raycast(t,e){const n=this.geometry,i=this.matrixWorld,r=t.params.Points.threshold,s=n.drawRange;if(null===n.boundingSphere&&n.computeBoundingSphere(),IM.copy(n.boundingSphere),IM.applyMatrix4(i),IM.radius+=r,!1===t.ray.intersectsSphere(IM))return;RM.copy(i).invert(),PM.copy(t.ray).applyMatrix4(RM);const o=r/((this.scale.x+this.scale.y+this.scale.z)/3),a=o*o;if(n.isBufferGeometry){const r=n.index,o=n.attributes.position;if(null!==r){for(let n=Math.max(0,s.start),l=Math.min(r.count,s.start+s.count);n<l;n++){const s=r.getX(n);FM.fromBufferAttribute(o,s),kM(FM,s,a,i,t,e,this)}}else{for(let n=Math.max(0,s.start),r=Math.min(o.count,s.start+s.count);n<r;n++)FM.fromBufferAttribute(o,n),kM(FM,n,a,i,t,e,this)}}else console.error(\\\\\\\"THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\")}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length>0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e<n;e++){const n=t[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[n]=e}}}}else{const e=t.morphTargets;void 0!==e&&e.length>0&&console.error(\\\\\\\"THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\")}}}function kM(t,e,n,i,r,s,o){const a=PM.distanceSqToPoint(t);if(a<n){const n=new Nx;PM.closestPointToPoint(t,n),n.applyMatrix4(i);const l=r.ray.origin.distanceTo(n);if(l<r.near||l>r.far)return;s.push({distance:l,distanceToRay:Math.sqrt(a),point:n,index:e,face:null,object:o})}}DM.prototype.isPoints=!0;(class extends Tx{constructor(t,e,n,i,r,s,o,a,l){super(t,e,n,i,r,s,o,a,l),this.format=void 0!==o?o:ky,this.minFilter=void 0!==s?s:Cy,this.magFilter=void 0!==r?r:Cy,this.generateMipmaps=!1;const c=this;\\\\\\\"requestVideoFrameCallback\\\\\\\"in t&&t.requestVideoFrameCallback((function e(){c.needsUpdate=!0,t.requestVideoFrameCallback(e)}))}clone(){return new this.constructor(this.image).copy(this)}update(){const t=this.image;!1===\\\\\\\"requestVideoFrameCallback\\\\\\\"in t&&t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}).prototype.isVideoTexture=!0;class BM extends Tx{constructor(t,e,n,i,r,s,o,a,l,c,u,h){super(null,s,o,a,l,c,i,r,u,h),this.image={width:e,height:n},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}}BM.prototype.isCompressedTexture=!0;(class extends Tx{constructor(t,e,n,i,r,s,o,a,l){super(t,e,n,i,r,s,o,a,l),this.needsUpdate=!0}}).prototype.isCanvasTexture=!0;(class extends Tx{constructor(t,e,n,i,r,s,o,a,l,c){if((c=void 0!==c?c:zy)!==zy&&c!==Uy)throw new Error(\\\\\\\"DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat\\\\\\\");void 0===n&&c===zy&&(n=Ry),void 0===n&&c===Uy&&(n=Dy),super(null,i,r,s,o,a,c,n,l),this.image={width:t,height:e},this.magFilter=void 0!==o?o:Ey,this.minFilter=void 0!==a?a:Ey,this.flipY=!1,this.generateMipmaps=!1}}).prototype.isDepthTexture=!0;new Nx,new Nx,new Nx,new Vb;class zM{constructor(){this.type=\\\\\\\"Curve\\\\\\\",this.arcLengthDivisions=200}getPoint(){return console.warn(\\\\\\\"THREE.Curve: .getPoint() not implemented.\\\\\\\"),null}getPointAt(t,e){const n=this.getUtoTmapping(t);return this.getPoint(n,e)}getPoints(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPoint(n/t));return e}getSpacedPoints(t=5){const e=[];for(let n=0;n<=t;n++)e.push(this.getPointAt(n/t));return e}getLength(){const t=this.getLengths();return t[t.length-1]}getLengths(t=this.arcLengthDivisions){if(this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const e=[];let n,i=this.getPoint(0),r=0;e.push(0);for(let s=1;s<=t;s++)n=this.getPoint(s/t),r+=n.distanceTo(i),e.push(r),i=n;return this.cacheArcLengths=e,e}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(t,e){const n=this.getLengths();let i=0;const r=n.length;let s;s=e||t*n[r-1];let o,a=0,l=r-1;for(;a<=l;)if(i=Math.floor(a+(l-a)/2),o=n[i]-s,o<0)a=i+1;else{if(!(o>0)){l=i;break}l=i-1}if(i=l,n[i]===s)return i/(r-1);const c=n[i];return(i+(s-c)/(n[i+1]-c))/(r-1)}getTangent(t,e){const n=1e-4;let i=t-n,r=t+n;i<0&&(i=0),r>1&&(r=1);const s=this.getPoint(i),o=this.getPoint(r),a=e||(s.isVector2?new fx:new Nx);return a.copy(o).sub(s).normalize(),a}getTangentAt(t,e){const n=this.getUtoTmapping(t);return this.getTangent(n,e)}computeFrenetFrames(t,e){const n=new Nx,i=[],r=[],s=[],o=new Nx,a=new ob;for(let e=0;e<=t;e++){const n=e/t;i[e]=this.getTangentAt(n,new Nx)}r[0]=new Nx,s[0]=new Nx;let l=Number.MAX_VALUE;const c=Math.abs(i[0].x),u=Math.abs(i[0].y),h=Math.abs(i[0].z);c<=l&&(l=c,n.set(1,0,0)),u<=l&&(l=u,n.set(0,1,0)),h<=l&&n.set(0,0,1),o.crossVectors(i[0],n).normalize(),r[0].crossVectors(i[0],o),s[0].crossVectors(i[0],r[0]);for(let e=1;e<=t;e++){if(r[e]=r[e-1].clone(),s[e]=s[e-1].clone(),o.crossVectors(i[e-1],i[e]),o.length()>Number.EPSILON){o.normalize();const t=Math.acos(cx(i[e-1].dot(i[e]),-1,1));r[e].applyMatrix4(a.makeRotationAxis(o,t))}s[e].crossVectors(i[e],r[e])}if(!0===e){let e=Math.acos(cx(r[0].dot(r[t]),-1,1));e/=t,i[0].dot(o.crossVectors(r[0],r[t]))>0&&(e=-e);for(let n=1;n<=t;n++)r[n].applyMatrix4(a.makeRotationAxis(i[n],e*n)),s[n].crossVectors(i[n],r[n])}return{tangents:i,normals:r,binormals:s}}clone(){return(new this.constructor).copy(this)}copy(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}toJSON(){const t={metadata:{version:4.5,type:\\\\\\\"Curve\\\\\\\",generator:\\\\\\\"Curve.toJSON\\\\\\\"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t}fromJSON(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}class UM extends zM{constructor(t=0,e=0,n=1,i=1,r=0,s=2*Math.PI,o=!1,a=0){super(),this.type=\\\\\\\"EllipseCurve\\\\\\\",this.aX=t,this.aY=e,this.xRadius=n,this.yRadius=i,this.aStartAngle=r,this.aEndAngle=s,this.aClockwise=o,this.aRotation=a}getPoint(t,e){const n=e||new fx,i=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const s=Math.abs(r)<Number.EPSILON;for(;r<0;)r+=i;for(;r>i;)r-=i;r<Number.EPSILON&&(r=s?0:i),!0!==this.aClockwise||s||(r===i?r=-i:r-=i);const o=this.aStartAngle+t*r;let a=this.aX+this.xRadius*Math.cos(o),l=this.aY+this.yRadius*Math.sin(o);if(0!==this.aRotation){const t=Math.cos(this.aRotation),e=Math.sin(this.aRotation),n=a-this.aX,i=l-this.aY;a=n*t-i*e+this.aX,l=n*e+i*t+this.aY}return n.set(a,l)}copy(t){return super.copy(t),this.aX=t.aX,this.aY=t.aY,this.xRadius=t.xRadius,this.yRadius=t.yRadius,this.aStartAngle=t.aStartAngle,this.aEndAngle=t.aEndAngle,this.aClockwise=t.aClockwise,this.aRotation=t.aRotation,this}toJSON(){const t=super.toJSON();return t.aX=this.aX,t.aY=this.aY,t.xRadius=this.xRadius,t.yRadius=this.yRadius,t.aStartAngle=this.aStartAngle,t.aEndAngle=this.aEndAngle,t.aClockwise=this.aClockwise,t.aRotation=this.aRotation,t}fromJSON(t){return super.fromJSON(t),this.aX=t.aX,this.aY=t.aY,this.xRadius=t.xRadius,this.yRadius=t.yRadius,this.aStartAngle=t.aStartAngle,this.aEndAngle=t.aEndAngle,this.aClockwise=t.aClockwise,this.aRotation=t.aRotation,this}}UM.prototype.isEllipseCurve=!0;class GM extends UM{constructor(t,e,n,i,r,s){super(t,e,n,n,i,r,s),this.type=\\\\\\\"ArcCurve\\\\\\\"}}function VM(){let t=0,e=0,n=0,i=0;function r(r,s,o,a){t=r,e=o,n=-3*r+3*s-2*o-a,i=2*r-2*s+o+a}return{initCatmullRom:function(t,e,n,i,s){r(e,n,s*(n-t),s*(i-e))},initNonuniformCatmullRom:function(t,e,n,i,s,o,a){let l=(e-t)/s-(n-t)/(s+o)+(n-e)/o,c=(n-e)/o-(i-e)/(o+a)+(i-n)/a;l*=o,c*=o,r(e,n,l,c)},calc:function(r){const s=r*r;return t+e*r+n*s+i*(s*r)}}}GM.prototype.isArcCurve=!0;const HM=new Nx,jM=new VM,WM=new VM,qM=new VM;class XM extends zM{constructor(t=[],e=!1,n=\\\\\\\"centripetal\\\\\\\",i=.5){super(),this.type=\\\\\\\"CatmullRomCurve3\\\\\\\",this.points=t,this.closed=e,this.curveType=n,this.tension=i}getPoint(t,e=new Nx){const n=e,i=this.points,r=i.length,s=(r-(this.closed?0:1))*t;let o,a,l=Math.floor(s),c=s-l;this.closed?l+=l>0?0:(Math.floor(Math.abs(l)/r)+1)*r:0===c&&l===r-1&&(l=r-2,c=1),this.closed||l>0?o=i[(l-1)%r]:(HM.subVectors(i[0],i[1]).add(i[0]),o=HM);const u=i[l%r],h=i[(l+1)%r];if(this.closed||l+2<r?a=i[(l+2)%r]:(HM.subVectors(i[r-1],i[r-2]).add(i[r-1]),a=HM),\\\\\\\"centripetal\\\\\\\"===this.curveType||\\\\\\\"chordal\\\\\\\"===this.curveType){const t=\\\\\\\"chordal\\\\\\\"===this.curveType?.5:.25;let e=Math.pow(o.distanceToSquared(u),t),n=Math.pow(u.distanceToSquared(h),t),i=Math.pow(h.distanceToSquared(a),t);n<1e-4&&(n=1),e<1e-4&&(e=n),i<1e-4&&(i=n),jM.initNonuniformCatmullRom(o.x,u.x,h.x,a.x,e,n,i),WM.initNonuniformCatmullRom(o.y,u.y,h.y,a.y,e,n,i),qM.initNonuniformCatmullRom(o.z,u.z,h.z,a.z,e,n,i)}else\\\\\\\"catmullrom\\\\\\\"===this.curveType&&(jM.initCatmullRom(o.x,u.x,h.x,a.x,this.tension),WM.initCatmullRom(o.y,u.y,h.y,a.y,this.tension),qM.initCatmullRom(o.z,u.z,h.z,a.z,this.tension));return n.set(jM.calc(c),WM.calc(c),qM.calc(c)),n}copy(t){super.copy(t),this.points=[];for(let e=0,n=t.points.length;e<n;e++){const n=t.points[e];this.points.push(n.clone())}return this.closed=t.closed,this.curveType=t.curveType,this.tension=t.tension,this}toJSON(){const t=super.toJSON();t.points=[];for(let e=0,n=this.points.length;e<n;e++){const n=this.points[e];t.points.push(n.toArray())}return t.closed=this.closed,t.curveType=this.curveType,t.tension=this.tension,t}fromJSON(t){super.fromJSON(t),this.points=[];for(let e=0,n=t.points.length;e<n;e++){const n=t.points[e];this.points.push((new Nx).fromArray(n))}return this.closed=t.closed,this.curveType=t.curveType,this.tension=t.tension,this}}function YM(t,e,n,i,r){const s=.5*(i-e),o=.5*(r-n),a=t*t;return(2*n-2*i+s+o)*(t*a)+(-3*n+3*i-2*s-o)*a+s*t+n}function $M(t,e,n,i){return function(t,e){const n=1-t;return n*n*e}(t,e)+function(t,e){return 2*(1-t)*t*e}(t,n)+function(t,e){return t*t*e}(t,i)}function JM(t,e,n,i,r){return function(t,e){const n=1-t;return n*n*n*e}(t,e)+function(t,e){const n=1-t;return 3*n*n*t*e}(t,n)+function(t,e){return 3*(1-t)*t*t*e}(t,i)+function(t,e){return t*t*t*e}(t,r)}XM.prototype.isCatmullRomCurve3=!0;class ZM extends zM{constructor(t=new fx,e=new fx,n=new fx,i=new fx){super(),this.type=\\\\\\\"CubicBezierCurve\\\\\\\",this.v0=t,this.v1=e,this.v2=n,this.v3=i}getPoint(t,e=new fx){const n=e,i=this.v0,r=this.v1,s=this.v2,o=this.v3;return n.set(JM(t,i.x,r.x,s.x,o.x),JM(t,i.y,r.y,s.y,o.y)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this.v3.copy(t.v3),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t.v3=this.v3.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this.v3.fromArray(t.v3),this}}ZM.prototype.isCubicBezierCurve=!0;class QM extends zM{constructor(t=new Nx,e=new Nx,n=new Nx,i=new Nx){super(),this.type=\\\\\\\"CubicBezierCurve3\\\\\\\",this.v0=t,this.v1=e,this.v2=n,this.v3=i}getPoint(t,e=new Nx){const n=e,i=this.v0,r=this.v1,s=this.v2,o=this.v3;return n.set(JM(t,i.x,r.x,s.x,o.x),JM(t,i.y,r.y,s.y,o.y),JM(t,i.z,r.z,s.z,o.z)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this.v3.copy(t.v3),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t.v3=this.v3.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this.v3.fromArray(t.v3),this}}QM.prototype.isCubicBezierCurve3=!0;class KM extends zM{constructor(t=new fx,e=new fx){super(),this.type=\\\\\\\"LineCurve\\\\\\\",this.v1=t,this.v2=e}getPoint(t,e=new fx){const n=e;return 1===t?n.copy(this.v2):(n.copy(this.v2).sub(this.v1),n.multiplyScalar(t).add(this.v1)),n}getPointAt(t,e){return this.getPoint(t,e)}getTangent(t,e){const n=e||new fx;return n.copy(this.v2).sub(this.v1).normalize(),n}copy(t){return super.copy(t),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}KM.prototype.isLineCurve=!0;class tS extends zM{constructor(t=new fx,e=new fx,n=new fx){super(),this.type=\\\\\\\"QuadraticBezierCurve\\\\\\\",this.v0=t,this.v1=e,this.v2=n}getPoint(t,e=new fx){const n=e,i=this.v0,r=this.v1,s=this.v2;return n.set($M(t,i.x,r.x,s.x),$M(t,i.y,r.y,s.y)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}tS.prototype.isQuadraticBezierCurve=!0;class eS extends zM{constructor(t=new Nx,e=new Nx,n=new Nx){super(),this.type=\\\\\\\"QuadraticBezierCurve3\\\\\\\",this.v0=t,this.v1=e,this.v2=n}getPoint(t,e=new Nx){const n=e,i=this.v0,r=this.v1,s=this.v2;return n.set($M(t,i.x,r.x,s.x),$M(t,i.y,r.y,s.y),$M(t,i.z,r.z,s.z)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}eS.prototype.isQuadraticBezierCurve3=!0;class nS extends zM{constructor(t=[]){super(),this.type=\\\\\\\"SplineCurve\\\\\\\",this.points=t}getPoint(t,e=new fx){const n=e,i=this.points,r=(i.length-1)*t,s=Math.floor(r),o=r-s,a=i[0===s?s:s-1],l=i[s],c=i[s>i.length-2?i.length-1:s+1],u=i[s>i.length-3?i.length-1:s+2];return n.set(YM(o,a.x,l.x,c.x,u.x),YM(o,a.y,l.y,c.y,u.y)),n}copy(t){super.copy(t),this.points=[];for(let e=0,n=t.points.length;e<n;e++){const n=t.points[e];this.points.push(n.clone())}return this}toJSON(){const t=super.toJSON();t.points=[];for(let e=0,n=this.points.length;e<n;e++){const n=this.points[e];t.points.push(n.toArray())}return t}fromJSON(t){super.fromJSON(t),this.points=[];for(let e=0,n=t.points.length;e<n;e++){const n=t.points[e];this.points.push((new fx).fromArray(n))}return this}}nS.prototype.isSplineCurve=!0;var iS=Object.freeze({__proto__:null,ArcCurve:GM,CatmullRomCurve3:XM,CubicBezierCurve:ZM,CubicBezierCurve3:QM,EllipseCurve:UM,LineCurve:KM,LineCurve3:class extends zM{constructor(t=new Nx,e=new Nx){super(),this.type=\\\\\\\"LineCurve3\\\\\\\",this.isLineCurve3=!0,this.v1=t,this.v2=e}getPoint(t,e=new Nx){const n=e;return 1===t?n.copy(this.v2):(n.copy(this.v2).sub(this.v1),n.multiplyScalar(t).add(this.v1)),n}getPointAt(t,e){return this.getPoint(t,e)}copy(t){return super.copy(t),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}},QuadraticBezierCurve:tS,QuadraticBezierCurve3:eS,SplineCurve:nS});class rS extends zM{constructor(){super(),this.type=\\\\\\\"CurvePath\\\\\\\",this.curves=[],this.autoClose=!1}add(t){this.curves.push(t)}closePath(){const t=this.curves[0].getPoint(0),e=this.curves[this.curves.length-1].getPoint(1);t.equals(e)||this.curves.push(new KM(e,t))}getPoint(t,e){const n=t*this.getLength(),i=this.getCurveLengths();let r=0;for(;r<i.length;){if(i[r]>=n){const t=i[r]-n,s=this.curves[r],o=s.getLength(),a=0===o?0:1-t/o;return s.getPointAt(a,e)}r++}return null}getLength(){const t=this.getCurveLengths();return t[t.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;const t=[];let e=0;for(let n=0,i=this.curves.length;n<i;n++)e+=this.curves[n].getLength(),t.push(e);return this.cacheLengths=t,t}getSpacedPoints(t=40){const e=[];for(let n=0;n<=t;n++)e.push(this.getPoint(n/t));return this.autoClose&&e.push(e[0]),e}getPoints(t=12){const e=[];let n;for(let i=0,r=this.curves;i<r.length;i++){const s=r[i],o=s&&s.isEllipseCurve?2*t:s&&(s.isLineCurve||s.isLineCurve3)?1:s&&s.isSplineCurve?t*s.points.length:t,a=s.getPoints(o);for(let t=0;t<a.length;t++){const i=a[t];n&&n.equals(i)||(e.push(i),n=i)}}return this.autoClose&&e.length>1&&!e[e.length-1].equals(e[0])&&e.push(e[0]),e}copy(t){super.copy(t),this.curves=[];for(let e=0,n=t.curves.length;e<n;e++){const n=t.curves[e];this.curves.push(n.clone())}return this.autoClose=t.autoClose,this}toJSON(){const t=super.toJSON();t.autoClose=this.autoClose,t.curves=[];for(let e=0,n=this.curves.length;e<n;e++){const n=this.curves[e];t.curves.push(n.toJSON())}return t}fromJSON(t){super.fromJSON(t),this.autoClose=t.autoClose,this.curves=[];for(let e=0,n=t.curves.length;e<n;e++){const n=t.curves[e];this.curves.push((new iS[n.type]).fromJSON(n))}return this}}class sS extends rS{constructor(t){super(),this.type=\\\\\\\"Path\\\\\\\",this.currentPoint=new fx,t&&this.setFromPoints(t)}setFromPoints(t){this.moveTo(t[0].x,t[0].y);for(let e=1,n=t.length;e<n;e++)this.lineTo(t[e].x,t[e].y);return this}moveTo(t,e){return this.currentPoint.set(t,e),this}lineTo(t,e){const n=new KM(this.currentPoint.clone(),new fx(t,e));return this.curves.push(n),this.currentPoint.set(t,e),this}quadraticCurveTo(t,e,n,i){const r=new tS(this.currentPoint.clone(),new fx(t,e),new fx(n,i));return this.curves.push(r),this.currentPoint.set(n,i),this}bezierCurveTo(t,e,n,i,r,s){const o=new ZM(this.currentPoint.clone(),new fx(t,e),new fx(n,i),new fx(r,s));return this.curves.push(o),this.currentPoint.set(r,s),this}splineThru(t){const e=[this.currentPoint.clone()].concat(t),n=new nS(e);return this.curves.push(n),this.currentPoint.copy(t[t.length-1]),this}arc(t,e,n,i,r,s){const o=this.currentPoint.x,a=this.currentPoint.y;return this.absarc(t+o,e+a,n,i,r,s),this}absarc(t,e,n,i,r,s){return this.absellipse(t,e,n,n,i,r,s),this}ellipse(t,e,n,i,r,s,o,a){const l=this.currentPoint.x,c=this.currentPoint.y;return this.absellipse(t+l,e+c,n,i,r,s,o,a),this}absellipse(t,e,n,i,r,s,o,a){const l=new UM(t,e,n,i,r,s,o,a);if(this.curves.length>0){const t=l.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(l);const c=l.getPoint(1);return this.currentPoint.copy(c),this}copy(t){return super.copy(t),this.currentPoint.copy(t.currentPoint),this}toJSON(){const t=super.toJSON();return t.currentPoint=this.currentPoint.toArray(),t}fromJSON(t){return super.fromJSON(t),this.currentPoint.fromArray(t.currentPoint),this}}class oS extends sS{constructor(t){super(t),this.uuid=lx(),this.type=\\\\\\\"Shape\\\\\\\",this.holes=[]}getPointsHoles(t){const e=[];for(let n=0,i=this.holes.length;n<i;n++)e[n]=this.holes[n].getPoints(t);return e}extractPoints(t){return{shape:this.getPoints(t),holes:this.getPointsHoles(t)}}copy(t){super.copy(t),this.holes=[];for(let e=0,n=t.holes.length;e<n;e++){const n=t.holes[e];this.holes.push(n.clone())}return this}toJSON(){const t=super.toJSON();t.uuid=this.uuid,t.holes=[];for(let e=0,n=this.holes.length;e<n;e++){const n=this.holes[e];t.holes.push(n.toJSON())}return t}fromJSON(t){super.fromJSON(t),this.uuid=t.uuid,this.holes=[];for(let e=0,n=t.holes.length;e<n;e++){const n=t.holes[e];this.holes.push((new sS).fromJSON(n))}return this}}const aS=function(t,e,n=2){const i=e&&e.length,r=i?e[0]*n:t.length;let s=lS(t,0,r,n,!0);const o=[];if(!s||s.next===s.prev)return o;let a,l,c,u,h,d,p;if(i&&(s=function(t,e,n,i){const r=[];let s,o,a,l,c;for(s=0,o=e.length;s<o;s++)a=e[s]*i,l=s<o-1?e[s+1]*i:t.length,c=lS(t,a,l,i,!1),c===c.next&&(c.steiner=!0),r.push(yS(c));for(r.sort(mS),s=0;s<r.length;s++)fS(r[s],n),n=cS(n,n.next);return n}(t,e,s,n)),t.length>80*n){a=c=t[0],l=u=t[1];for(let e=n;e<r;e+=n)h=t[e],d=t[e+1],h<a&&(a=h),d<l&&(l=d),h>c&&(c=h),d>u&&(u=d);p=Math.max(c-a,u-l),p=0!==p?1/p:0}return uS(s,o,n,a,l,p),o};function lS(t,e,n,i,r){let s,o;if(r===function(t,e,n,i){let r=0;for(let s=e,o=n-i;s<n;s+=i)r+=(t[o]-t[s])*(t[s+1]+t[o+1]),o=s;return r}(t,e,n,i)>0)for(s=e;s<n;s+=i)o=NS(s,t[s],t[s+1],o);else for(s=n-i;s>=e;s-=i)o=NS(s,t[s],t[s+1],o);return o&&TS(o,o.next)&&(LS(o),o=o.next),o}function cS(t,e){if(!t)return t;e||(e=t);let n,i=t;do{if(n=!1,i.steiner||!TS(i,i.next)&&0!==wS(i.prev,i,i.next))i=i.next;else{if(LS(i),i=e=i.prev,i===i.next)break;n=!0}}while(n||i!==e);return e}function uS(t,e,n,i,r,s,o){if(!t)return;!o&&s&&function(t,e,n,i){let r=t;do{null===r.z&&(r.z=vS(r.x,r.y,e,n,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let e,n,i,r,s,o,a,l,c=1;do{for(n=t,t=null,s=null,o=0;n;){for(o++,i=n,a=0,e=0;e<c&&(a++,i=i.nextZ,i);e++);for(l=c;a>0||l>0&&i;)0!==a&&(0===l||!i||n.z<=i.z)?(r=n,n=n.nextZ,a--):(r=i,i=i.nextZ,l--),s?s.nextZ=r:t=r,r.prevZ=s,s=r;n=i}s.nextZ=null,c*=2}while(o>1)}(r)}(t,i,r,s);let a,l,c=t;for(;t.prev!==t.next;)if(a=t.prev,l=t.next,s?dS(t,i,r,s):hS(t))e.push(a.i/n),e.push(t.i/n),e.push(l.i/n),LS(t),t=l.next,c=l.next;else if((t=l)===c){o?1===o?uS(t=pS(cS(t),e,n),e,n,i,r,s,2):2===o&&_S(t,e,n,i,r,s):uS(cS(t),e,n,i,r,s,1);break}}function hS(t){const e=t.prev,n=t,i=t.next;if(wS(e,n,i)>=0)return!1;let r=t.next.next;for(;r!==t.prev;){if(xS(e.x,e.y,n.x,n.y,i.x,i.y,r.x,r.y)&&wS(r.prev,r,r.next)>=0)return!1;r=r.next}return!0}function dS(t,e,n,i){const r=t.prev,s=t,o=t.next;if(wS(r,s,o)>=0)return!1;const a=r.x<s.x?r.x<o.x?r.x:o.x:s.x<o.x?s.x:o.x,l=r.y<s.y?r.y<o.y?r.y:o.y:s.y<o.y?s.y:o.y,c=r.x>s.x?r.x>o.x?r.x:o.x:s.x>o.x?s.x:o.x,u=r.y>s.y?r.y>o.y?r.y:o.y:s.y>o.y?s.y:o.y,h=vS(a,l,e,n,i),d=vS(c,u,e,n,i);let p=t.prevZ,_=t.nextZ;for(;p&&p.z>=h&&_&&_.z<=d;){if(p!==t.prev&&p!==t.next&&xS(r.x,r.y,s.x,s.y,o.x,o.y,p.x,p.y)&&wS(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,_!==t.prev&&_!==t.next&&xS(r.x,r.y,s.x,s.y,o.x,o.y,_.x,_.y)&&wS(_.prev,_,_.next)>=0)return!1;_=_.nextZ}for(;p&&p.z>=h;){if(p!==t.prev&&p!==t.next&&xS(r.x,r.y,s.x,s.y,o.x,o.y,p.x,p.y)&&wS(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;_&&_.z<=d;){if(_!==t.prev&&_!==t.next&&xS(r.x,r.y,s.x,s.y,o.x,o.y,_.x,_.y)&&wS(_.prev,_,_.next)>=0)return!1;_=_.nextZ}return!0}function pS(t,e,n){let i=t;do{const r=i.prev,s=i.next.next;!TS(r,s)&&AS(r,i,i.next,s)&&SS(r,s)&&SS(s,r)&&(e.push(r.i/n),e.push(i.i/n),e.push(s.i/n),LS(i),LS(i.next),i=t=s),i=i.next}while(i!==t);return cS(i)}function _S(t,e,n,i,r,s){let o=t;do{let t=o.next.next;for(;t!==o.prev;){if(o.i!==t.i&&bS(o,t)){let a=CS(o,t);return o=cS(o,o.next),a=cS(a,a.next),uS(o,e,n,i,r,s),void uS(a,e,n,i,r,s)}t=t.next}o=o.next}while(o!==t)}function mS(t,e){return t.x-e.x}function fS(t,e){if(e=function(t,e){let n=e;const i=t.x,r=t.y;let s,o=-1/0;do{if(r<=n.y&&r>=n.next.y&&n.next.y!==n.y){const t=n.x+(r-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(t<=i&&t>o){if(o=t,t===i){if(r===n.y)return n;if(r===n.next.y)return n.next}s=n.x<n.next.x?n:n.next}}n=n.next}while(n!==e);if(!s)return null;if(i===o)return s;const a=s,l=s.x,c=s.y;let u,h=1/0;n=s;do{i>=n.x&&n.x>=l&&i!==n.x&&xS(r<c?i:o,r,l,c,r<c?o:i,r,n.x,n.y)&&(u=Math.abs(r-n.y)/(i-n.x),SS(n,t)&&(u<h||u===h&&(n.x>s.x||n.x===s.x&&gS(s,n)))&&(s=n,h=u)),n=n.next}while(n!==a);return s}(t,e)){const n=CS(e,t);cS(e,e.next),cS(n,n.next)}}function gS(t,e){return wS(t.prev,t,e.prev)<0&&wS(e.next,t,t.next)<0}function vS(t,e,n,i,r){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-n)*r)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-i)*r)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function yS(t){let e=t,n=t;do{(e.x<n.x||e.x===n.x&&e.y<n.y)&&(n=e),e=e.next}while(e!==t);return n}function xS(t,e,n,i,r,s,o,a){return(r-o)*(e-a)-(t-o)*(s-a)>=0&&(t-o)*(i-a)-(n-o)*(e-a)>=0&&(n-o)*(s-a)-(r-o)*(i-a)>=0}function bS(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){let n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&AS(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)&&(SS(t,e)&&SS(e,t)&&function(t,e){let n=t,i=!1;const r=(t.x+e.x)/2,s=(t.y+e.y)/2;do{n.y>s!=n.next.y>s&&n.next.y!==n.y&&r<(n.next.x-n.x)*(s-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next}while(n!==t);return i}(t,e)&&(wS(t.prev,t,e.prev)||wS(t,e.prev,e))||TS(t,e)&&wS(t.prev,t,t.next)>0&&wS(e.prev,e,e.next)>0)}function wS(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function TS(t,e){return t.x===e.x&&t.y===e.y}function AS(t,e,n,i){const r=MS(wS(t,e,n)),s=MS(wS(t,e,i)),o=MS(wS(n,i,t)),a=MS(wS(n,i,e));return r!==s&&o!==a||(!(0!==r||!ES(t,n,e))||(!(0!==s||!ES(t,i,e))||(!(0!==o||!ES(n,t,i))||!(0!==a||!ES(n,e,i)))))}function ES(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function MS(t){return t>0?1:t<0?-1:0}function SS(t,e){return wS(t.prev,t,t.next)<0?wS(t,e,t.next)>=0&&wS(t,t.prev,e)>=0:wS(t,e,t.prev)<0||wS(t,t.next,e)<0}function CS(t,e){const n=new OS(t.i,t.x,t.y),i=new OS(e.i,e.x,e.y),r=t.next,s=e.prev;return t.next=e,e.prev=t,n.next=r,r.prev=n,i.next=n,n.prev=i,s.next=i,i.prev=s,i}function NS(t,e,n,i){const r=new OS(t,e,n);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function LS(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function OS(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}class RS{static area(t){const e=t.length;let n=0;for(let i=e-1,r=0;r<e;i=r++)n+=t[i].x*t[r].y-t[r].x*t[i].y;return.5*n}static isClockWise(t){return RS.area(t)<0}static triangulateShape(t,e){const n=[],i=[],r=[];PS(t),IS(n,t);let s=t.length;e.forEach(PS);for(let t=0;t<e.length;t++)i.push(s),s+=e[t].length,IS(n,e[t]);const o=aS(n,i);for(let t=0;t<o.length;t+=3)r.push(o.slice(t,t+3));return r}}function PS(t){const e=t.length;e>2&&t[e-1].equals(t[0])&&t.pop()}function IS(t,e){for(let n=0;n<e.length;n++)t.push(e[n].x),t.push(e[n].y)}class FS extends dw{constructor(t=new oS([new fx(.5,.5),new fx(-.5,.5),new fx(-.5,-.5),new fx(.5,-.5)]),e={}){super(),this.type=\\\\\\\"ExtrudeGeometry\\\\\\\",this.parameters={shapes:t,options:e},t=Array.isArray(t)?t:[t];const n=this,i=[],r=[];for(let e=0,n=t.length;e<n;e++){s(t[e])}function s(t){const s=[],o=void 0!==e.curveSegments?e.curveSegments:12,a=void 0!==e.steps?e.steps:1;let l=void 0!==e.depth?e.depth:1,c=void 0===e.bevelEnabled||e.bevelEnabled,u=void 0!==e.bevelThickness?e.bevelThickness:.2,h=void 0!==e.bevelSize?e.bevelSize:u-.1,d=void 0!==e.bevelOffset?e.bevelOffset:0,p=void 0!==e.bevelSegments?e.bevelSegments:3;const _=e.extrudePath,m=void 0!==e.UVGenerator?e.UVGenerator:DS;void 0!==e.amount&&(console.warn(\\\\\\\"THREE.ExtrudeBufferGeometry: amount has been renamed to depth.\\\\\\\"),l=e.amount);let f,g,v,y,x,b=!1;_&&(f=_.getSpacedPoints(a),b=!0,c=!1,g=_.computeFrenetFrames(a,!1),v=new Nx,y=new Nx,x=new Nx),c||(p=0,u=0,h=0,d=0);const w=t.extractPoints(o);let T=w.shape;const A=w.holes;if(!RS.isClockWise(T)){T=T.reverse();for(let t=0,e=A.length;t<e;t++){const e=A[t];RS.isClockWise(e)&&(A[t]=e.reverse())}}const E=RS.triangulateShape(T,A),M=T;for(let t=0,e=A.length;t<e;t++){const e=A[t];T=T.concat(e)}function S(t,e,n){return e||console.error(\\\\\\\"THREE.ExtrudeGeometry: vec does not exist\\\\\\\"),e.clone().multiplyScalar(n).add(t)}const C=T.length,N=E.length;function L(t,e,n){let i,r,s;const o=t.x-e.x,a=t.y-e.y,l=n.x-t.x,c=n.y-t.y,u=o*o+a*a,h=o*c-a*l;if(Math.abs(h)>Number.EPSILON){const h=Math.sqrt(u),d=Math.sqrt(l*l+c*c),p=e.x-a/h,_=e.y+o/h,m=((n.x-c/d-p)*c-(n.y+l/d-_)*l)/(o*c-a*l);i=p+o*m-t.x,r=_+a*m-t.y;const f=i*i+r*r;if(f<=2)return new fx(i,r);s=Math.sqrt(f/2)}else{let t=!1;o>Number.EPSILON?l>Number.EPSILON&&(t=!0):o<-Number.EPSILON?l<-Number.EPSILON&&(t=!0):Math.sign(a)===Math.sign(c)&&(t=!0),t?(i=-a,r=o,s=Math.sqrt(u)):(i=o,r=a,s=Math.sqrt(u/2))}return new fx(i/s,r/s)}const O=[];for(let t=0,e=M.length,n=e-1,i=t+1;t<e;t++,n++,i++)n===e&&(n=0),i===e&&(i=0),O[t]=L(M[t],M[n],M[i]);const R=[];let P,I=O.concat();for(let t=0,e=A.length;t<e;t++){const e=A[t];P=[];for(let t=0,n=e.length,i=n-1,r=t+1;t<n;t++,i++,r++)i===n&&(i=0),r===n&&(r=0),P[t]=L(e[t],e[i],e[r]);R.push(P),I=I.concat(P)}for(let t=0;t<p;t++){const e=t/p,n=u*Math.cos(e*Math.PI/2),i=h*Math.sin(e*Math.PI/2)+d;for(let t=0,e=M.length;t<e;t++){const e=S(M[t],O[t],i);k(e.x,e.y,-n)}for(let t=0,e=A.length;t<e;t++){const e=A[t];P=R[t];for(let t=0,r=e.length;t<r;t++){const r=S(e[t],P[t],i);k(r.x,r.y,-n)}}}const F=h+d;for(let t=0;t<C;t++){const e=c?S(T[t],I[t],F):T[t];b?(y.copy(g.normals[0]).multiplyScalar(e.x),v.copy(g.binormals[0]).multiplyScalar(e.y),x.copy(f[0]).add(y).add(v),k(x.x,x.y,x.z)):k(e.x,e.y,0)}for(let t=1;t<=a;t++)for(let e=0;e<C;e++){const n=c?S(T[e],I[e],F):T[e];b?(y.copy(g.normals[t]).multiplyScalar(n.x),v.copy(g.binormals[t]).multiplyScalar(n.y),x.copy(f[t]).add(y).add(v),k(x.x,x.y,x.z)):k(n.x,n.y,l/a*t)}for(let t=p-1;t>=0;t--){const e=t/p,n=u*Math.cos(e*Math.PI/2),i=h*Math.sin(e*Math.PI/2)+d;for(let t=0,e=M.length;t<e;t++){const e=S(M[t],O[t],i);k(e.x,e.y,l+n)}for(let t=0,e=A.length;t<e;t++){const e=A[t];P=R[t];for(let t=0,r=e.length;t<r;t++){const r=S(e[t],P[t],i);b?k(r.x,r.y+f[a-1].y,f[a-1].x+n):k(r.x,r.y,l+n)}}}function D(t,e){let n=t.length;for(;--n>=0;){const i=n;let r=n-1;r<0&&(r=t.length-1);for(let t=0,n=a+2*p;t<n;t++){const n=C*t,s=C*(t+1);z(e+i+n,e+r+n,e+r+s,e+i+s)}}}function k(t,e,n){s.push(t),s.push(e),s.push(n)}function B(t,e,r){U(t),U(e),U(r);const s=i.length/3,o=m.generateTopUV(n,i,s-3,s-2,s-1);G(o[0]),G(o[1]),G(o[2])}function z(t,e,r,s){U(t),U(e),U(s),U(e),U(r),U(s);const o=i.length/3,a=m.generateSideWallUV(n,i,o-6,o-3,o-2,o-1);G(a[0]),G(a[1]),G(a[3]),G(a[1]),G(a[2]),G(a[3])}function U(t){i.push(s[3*t+0]),i.push(s[3*t+1]),i.push(s[3*t+2])}function G(t){r.push(t.x),r.push(t.y)}!function(){const t=i.length/3;if(c){let t=0,e=C*t;for(let t=0;t<N;t++){const n=E[t];B(n[2]+e,n[1]+e,n[0]+e)}t=a+2*p,e=C*t;for(let t=0;t<N;t++){const n=E[t];B(n[0]+e,n[1]+e,n[2]+e)}}else{for(let t=0;t<N;t++){const e=E[t];B(e[2],e[1],e[0])}for(let t=0;t<N;t++){const e=E[t];B(e[0]+C*a,e[1]+C*a,e[2]+C*a)}}n.addGroup(t,i.length/3-t,0)}(),function(){const t=i.length/3;let e=0;D(M,e),e+=M.length;for(let t=0,n=A.length;t<n;t++){const n=A[t];D(n,e),e+=n.length}n.addGroup(t,i.length/3-t,1)}()}this.setAttribute(\\\\\\\"position\\\\\\\",new rw(i,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new rw(r,2)),this.computeVertexNormals()}toJSON(){const t=super.toJSON();return function(t,e,n){if(n.shapes=[],Array.isArray(t))for(let e=0,i=t.length;e<i;e++){const i=t[e];n.shapes.push(i.uuid)}else n.shapes.push(t.uuid);void 0!==e.extrudePath&&(n.options.extrudePath=e.extrudePath.toJSON());return n}(this.parameters.shapes,this.parameters.options,t)}static fromJSON(t,e){const n=[];for(let i=0,r=t.shapes.length;i<r;i++){const r=e[t.shapes[i]];n.push(r)}const i=t.options.extrudePath;return void 0!==i&&(t.options.extrudePath=(new iS[i.type]).fromJSON(i)),new FS(n,t.options)}}const DS={generateTopUV:function(t,e,n,i,r){const s=e[3*n],o=e[3*n+1],a=e[3*i],l=e[3*i+1],c=e[3*r],u=e[3*r+1];return[new fx(s,o),new fx(a,l),new fx(c,u)]},generateSideWallUV:function(t,e,n,i,r,s){const o=e[3*n],a=e[3*n+1],l=e[3*n+2],c=e[3*i],u=e[3*i+1],h=e[3*i+2],d=e[3*r],p=e[3*r+1],_=e[3*r+2],m=e[3*s],f=e[3*s+1],g=e[3*s+2];return Math.abs(a-u)<Math.abs(o-c)?[new fx(o,1-l),new fx(c,1-h),new fx(d,1-_),new fx(m,1-g)]:[new fx(a,1-l),new fx(u,1-h),new fx(p,1-_),new fx(f,1-g)]}};class kS extends dw{constructor(t=new oS([new fx(0,.5),new fx(-.5,-.5),new fx(.5,-.5)]),e=12){super(),this.type=\\\\\\\"ShapeGeometry\\\\\\\",this.parameters={shapes:t,curveSegments:e};const n=[],i=[],r=[],s=[];let o=0,a=0;if(!1===Array.isArray(t))l(t);else for(let e=0;e<t.length;e++)l(t[e]),this.addGroup(o,a,e),o+=a,a=0;function l(t){const o=i.length/3,l=t.extractPoints(e);let c=l.shape;const u=l.holes;!1===RS.isClockWise(c)&&(c=c.reverse());for(let t=0,e=u.length;t<e;t++){const e=u[t];!0===RS.isClockWise(e)&&(u[t]=e.reverse())}const h=RS.triangulateShape(c,u);for(let t=0,e=u.length;t<e;t++){const e=u[t];c=c.concat(e)}for(let t=0,e=c.length;t<e;t++){const e=c[t];i.push(e.x,e.y,0),r.push(0,0,1),s.push(e.x,e.y)}for(let t=0,e=h.length;t<e;t++){const e=h[t],i=e[0]+o,r=e[1]+o,s=e[2]+o;n.push(i,r,s),a+=3}}this.setIndex(n),this.setAttribute(\\\\\\\"position\\\\\\\",new rw(i,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new rw(r,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new rw(s,2))}toJSON(){const t=super.toJSON();return function(t,e){if(e.shapes=[],Array.isArray(t))for(let n=0,i=t.length;n<i;n++){const i=t[n];e.shapes.push(i.uuid)}else e.shapes.push(t.uuid);return e}(this.parameters.shapes,t)}static fromJSON(t,e){const n=[];for(let i=0,r=t.shapes.length;i<r;i++){const r=e[t.shapes[i]];n.push(r)}return new kS(n,t.curveSegments)}}class BS extends jb{constructor(t){super(),this.type=\\\\\\\"ShadowMaterial\\\\\\\",this.color=new Zb(0),this.transparent=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this}}BS.prototype.isShadowMaterial=!0;class zS extends jb{constructor(t){super(),this.defines={STANDARD:\\\\\\\"\\\\\\\"},this.type=\\\\\\\"MeshStandardMaterial\\\\\\\",this.color=new Zb(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Zb(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new fx(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\\\\\\\"round\\\\\\\",this.wireframeLinejoin=\\\\\\\"round\\\\\\\",this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.defines={STANDARD:\\\\\\\"\\\\\\\"},this.color.copy(t.color),this.roughness=t.roughness,this.metalness=t.metalness,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.roughnessMap=t.roughnessMap,this.metalnessMap=t.metalnessMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapIntensity=t.envMapIntensity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this}}zS.prototype.isMeshStandardMaterial=!0;class US extends zS{constructor(t){super(),this.defines={STANDARD:\\\\\\\"\\\\\\\",PHYSICAL:\\\\\\\"\\\\\\\"},this.type=\\\\\\\"MeshPhysicalMaterial\\\\\\\",this.clearcoatMap=null,this.clearcoatRoughness=0,this.clearcoatRoughnessMap=null,this.clearcoatNormalScale=new fx(1,1),this.clearcoatNormalMap=null,this.ior=1.5,Object.defineProperty(this,\\\\\\\"reflectivity\\\\\\\",{get:function(){return cx(2.5*(this.ior-1)/(this.ior+1),0,1)},set:function(t){this.ior=(1+.4*t)/(1-.4*t)}}),this.sheenTint=new Zb(0),this.sheenRoughness=1,this.transmissionMap=null,this.thickness=.01,this.thicknessMap=null,this.attenuationDistance=0,this.attenuationTint=new Zb(1,1,1),this.specularIntensity=1,this.specularIntensityMap=null,this.specularTint=new Zb(1,1,1),this.specularTintMap=null,this._sheen=0,this._clearcoat=0,this._transmission=0,this.setValues(t)}get sheen(){return this._sheen}set sheen(t){this._sheen>0!=t>0&&this.version++,this._sheen=t}get clearcoat(){return this._clearcoat}set clearcoat(t){this._clearcoat>0!=t>0&&this.version++,this._clearcoat=t}get transmission(){return this._transmission}set transmission(t){this._transmission>0!=t>0&&this.version++,this._transmission=t}copy(t){return super.copy(t),this.defines={STANDARD:\\\\\\\"\\\\\\\",PHYSICAL:\\\\\\\"\\\\\\\"},this.clearcoat=t.clearcoat,this.clearcoatMap=t.clearcoatMap,this.clearcoatRoughness=t.clearcoatRoughness,this.clearcoatRoughnessMap=t.clearcoatRoughnessMap,this.clearcoatNormalMap=t.clearcoatNormalMap,this.clearcoatNormalScale.copy(t.clearcoatNormalScale),this.ior=t.ior,this.sheen=t.sheen,this.sheenTint.copy(t.sheenTint),this.sheenRoughness=t.sheenRoughness,this.transmission=t.transmission,this.transmissionMap=t.transmissionMap,this.thickness=t.thickness,this.thicknessMap=t.thicknessMap,this.attenuationDistance=t.attenuationDistance,this.attenuationTint.copy(t.attenuationTint),this.specularIntensity=t.specularIntensity,this.specularIntensityMap=t.specularIntensityMap,this.specularTint.copy(t.specularTint),this.specularTintMap=t.specularTintMap,this}}US.prototype.isMeshPhysicalMaterial=!0;class GS extends jb{constructor(t){super(),this.type=\\\\\\\"MeshPhongMaterial\\\\\\\",this.color=new Zb(16777215),this.specular=new Zb(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Zb(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new fx(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,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.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.specular.copy(t.specular),this.shininess=t.shininess,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this}}GS.prototype.isMeshPhongMaterial=!0;class VS extends jb{constructor(t){super(),this.defines={TOON:\\\\\\\"\\\\\\\"},this.type=\\\\\\\"MeshToonMaterial\\\\\\\",this.color=new Zb(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Zb(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new fx(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\\\\\\\"round\\\\\\\",this.wireframeLinejoin=\\\\\\\"round\\\\\\\",this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.gradientMap=t.gradientMap,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this}}VS.prototype.isMeshToonMaterial=!0;class HS extends jb{constructor(t){super(),this.type=\\\\\\\"MeshNormalMaterial\\\\\\\",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new fx(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.flatShading=t.flatShading,this}}HS.prototype.isMeshNormalMaterial=!0;class jS extends jb{constructor(t){super(),this.type=\\\\\\\"MeshLambertMaterial\\\\\\\",this.color=new Zb(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Zb(0),this.emissiveIntensity=1,this.emissiveMap=null,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.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this}}jS.prototype.isMeshLambertMaterial=!0;class WS extends jb{constructor(t){super(),this.defines={MATCAP:\\\\\\\"\\\\\\\"},this.type=\\\\\\\"MeshMatcapMaterial\\\\\\\",this.color=new Zb(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new fx(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.defines={MATCAP:\\\\\\\"\\\\\\\"},this.color.copy(t.color),this.matcap=t.matcap,this.map=t.map,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.flatShading=t.flatShading,this}}WS.prototype.isMeshMatcapMaterial=!0;class qS extends xM{constructor(t){super(),this.type=\\\\\\\"LineDashedMaterial\\\\\\\",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(t)}copy(t){return super.copy(t),this.scale=t.scale,this.dashSize=t.dashSize,this.gapSize=t.gapSize,this}}qS.prototype.isLineDashedMaterial=!0;const XS={arraySlice:function(t,e,n){return XS.isTypedArray(t)?new t.constructor(t.subarray(e,void 0!==n?n:t.length)):t.slice(e,n)},convertArray:function(t,e,n){return!t||!n&&t.constructor===e?t:\\\\\\\"number\\\\\\\"==typeof e.BYTES_PER_ELEMENT?new e(t):Array.prototype.slice.call(t)},isTypedArray:function(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)},getKeyframeOrder:function(t){const e=t.length,n=new Array(e);for(let t=0;t!==e;++t)n[t]=t;return n.sort((function(e,n){return t[e]-t[n]})),n},sortedArray:function(t,e,n){const i=t.length,r=new t.constructor(i);for(let s=0,o=0;o!==i;++s){const i=n[s]*e;for(let n=0;n!==e;++n)r[o++]=t[i+n]}return r},flattenJSON:function(t,e,n,i){let r=1,s=t[0];for(;void 0!==s&&void 0===s[i];)s=t[r++];if(void 0===s)return;let o=s[i];if(void 0!==o)if(Array.isArray(o))do{o=s[i],void 0!==o&&(e.push(s.time),n.push.apply(n,o)),s=t[r++]}while(void 0!==s);else if(void 0!==o.toArray)do{o=s[i],void 0!==o&&(e.push(s.time),o.toArray(n,n.length)),s=t[r++]}while(void 0!==s);else do{o=s[i],void 0!==o&&(e.push(s.time),n.push(o)),s=t[r++]}while(void 0!==s)},subclip:function(t,e,n,i,r=30){const s=t.clone();s.name=e;const o=[];for(let t=0;t<s.tracks.length;++t){const e=s.tracks[t],a=e.getValueSize(),l=[],c=[];for(let t=0;t<e.times.length;++t){const s=e.times[t]*r;if(!(s<n||s>=i)){l.push(e.times[t]);for(let n=0;n<a;++n)c.push(e.values[t*a+n])}}0!==l.length&&(e.times=XS.convertArray(l,e.times.constructor),e.values=XS.convertArray(c,e.values.constructor),o.push(e))}s.tracks=o;let a=1/0;for(let t=0;t<s.tracks.length;++t)a>s.tracks[t].times[0]&&(a=s.tracks[t].times[0]);for(let t=0;t<s.tracks.length;++t)s.tracks[t].shift(-1*a);return s.resetDuration(),s},makeClipAdditive:function(t,e=0,n=t,i=30){i<=0&&(i=30);const r=n.tracks.length,s=e/i;for(let e=0;e<r;++e){const i=n.tracks[e],r=i.ValueTypeName;if(\\\\\\\"bool\\\\\\\"===r||\\\\\\\"string\\\\\\\"===r)continue;const o=t.tracks.find((function(t){return t.name===i.name&&t.ValueTypeName===r}));if(void 0===o)continue;let a=0;const l=i.getValueSize();i.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline&&(a=l/3);let c=0;const u=o.getValueSize();o.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline&&(c=u/3);const h=i.times.length-1;let d;if(s<=i.times[0]){const t=a,e=l-a;d=XS.arraySlice(i.values,t,e)}else if(s>=i.times[h]){const t=h*l+a,e=t+l-a;d=XS.arraySlice(i.values,t,e)}else{const t=i.createInterpolant(),e=a,n=l-a;t.evaluate(s),d=XS.arraySlice(t.resultBuffer,e,n)}if(\\\\\\\"quaternion\\\\\\\"===r){(new Cx).fromArray(d).normalize().conjugate().toArray(d)}const p=o.times.length;for(let t=0;t<p;++t){const e=t*u+c;if(\\\\\\\"quaternion\\\\\\\"===r)Cx.multiplyQuaternionsFlat(o.values,e,d,0,o.values,e);else{const t=u-2*c;for(let n=0;n<t;++n)o.values[e+n]-=d[n]}}}return t.blendMode=2501,t}};class YS{constructor(t,e,n,i){this.parameterPositions=t,this._cachedIndex=0,this.resultBuffer=void 0!==i?i:new e.constructor(n),this.sampleValues=e,this.valueSize=n,this.settings=null,this.DefaultSettings_={}}evaluate(t){const e=this.parameterPositions;let n=this._cachedIndex,i=e[n],r=e[n-1];t:{e:{let s;n:{i:if(!(t<i)){for(let s=n+2;;){if(void 0===i){if(t<r)break i;return n=e.length,this._cachedIndex=n,this.afterEnd_(n-1,t,r)}if(n===s)break;if(r=i,i=e[++n],t<i)break e}s=e.length;break n}if(t>=r)break t;{const o=e[1];t<o&&(n=2,r=o);for(let s=n-2;;){if(void 0===r)return this._cachedIndex=0,this.beforeStart_(0,t,i);if(n===s)break;if(i=r,r=e[--n-1],t>=r)break e}s=n,n=0}}for(;n<s;){const i=n+s>>>1;t<e[i]?s=i:n=i+1}if(i=e[n],r=e[n-1],void 0===r)return this._cachedIndex=0,this.beforeStart_(0,t,i);if(void 0===i)return n=e.length,this._cachedIndex=n,this.afterEnd_(n-1,r,t)}this._cachedIndex=n,this.intervalChanged_(n,r,i)}return this.interpolate_(n,r,t,i)}getSettings_(){return this.settings||this.DefaultSettings_}copySampleValue_(t){const e=this.resultBuffer,n=this.sampleValues,i=this.valueSize,r=t*i;for(let t=0;t!==i;++t)e[t]=n[r+t];return e}interpolate_(){throw new Error(\\\\\\\"call to abstract method\\\\\\\")}intervalChanged_(){}}YS.prototype.beforeStart_=YS.prototype.copySampleValue_,YS.prototype.afterEnd_=YS.prototype.copySampleValue_;class $S extends YS{constructor(t,e,n,i){super(t,e,n,i),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0,this.DefaultSettings_={endingStart:jy,endingEnd:jy}}intervalChanged_(t,e,n){const i=this.parameterPositions;let r=t-2,s=t+1,o=i[r],a=i[s];if(void 0===o)switch(this.getSettings_().endingStart){case Wy:r=t,o=2*e-n;break;case qy:r=i.length-2,o=e+i[r]-i[r+1];break;default:r=t,o=n}if(void 0===a)switch(this.getSettings_().endingEnd){case Wy:s=t,a=2*n-e;break;case qy:s=1,a=n+i[1]-i[0];break;default:s=t-1,a=e}const l=.5*(n-e),c=this.valueSize;this._weightPrev=l/(e-o),this._weightNext=l/(a-n),this._offsetPrev=r*c,this._offsetNext=s*c}interpolate_(t,e,n,i){const r=this.resultBuffer,s=this.sampleValues,o=this.valueSize,a=t*o,l=a-o,c=this._offsetPrev,u=this._offsetNext,h=this._weightPrev,d=this._weightNext,p=(n-e)/(i-e),_=p*p,m=_*p,f=-h*m+2*h*_-h*p,g=(1+h)*m+(-1.5-2*h)*_+(-.5+h)*p+1,v=(-1-d)*m+(1.5+d)*_+.5*p,y=d*m-d*_;for(let t=0;t!==o;++t)r[t]=f*s[c+t]+g*s[l+t]+v*s[a+t]+y*s[u+t];return r}}class JS extends YS{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){const r=this.resultBuffer,s=this.sampleValues,o=this.valueSize,a=t*o,l=a-o,c=(n-e)/(i-e),u=1-c;for(let t=0;t!==o;++t)r[t]=s[l+t]*u+s[a+t]*c;return r}}class ZS extends YS{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t){return this.copySampleValue_(t-1)}}class QS{constructor(t,e,n,i){if(void 0===t)throw new Error(\\\\\\\"THREE.KeyframeTrack: track name is undefined\\\\\\\");if(void 0===e||0===e.length)throw new Error(\\\\\\\"THREE.KeyframeTrack: no keyframes in track named \\\\\\\"+t);this.name=t,this.times=XS.convertArray(e,this.TimeBufferType),this.values=XS.convertArray(n,this.ValueBufferType),this.setInterpolation(i||this.DefaultInterpolation)}static toJSON(t){const e=t.constructor;let n;if(e.toJSON!==this.toJSON)n=e.toJSON(t);else{n={name:t.name,times:XS.convertArray(t.times,Array),values:XS.convertArray(t.values,Array)};const e=t.getInterpolation();e!==t.DefaultInterpolation&&(n.interpolation=e)}return n.type=t.ValueTypeName,n}InterpolantFactoryMethodDiscrete(t){return new ZS(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodLinear(t){return new JS(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodSmooth(t){return new $S(this.times,this.values,this.getValueSize(),t)}setInterpolation(t){let e;switch(t){case Gy:e=this.InterpolantFactoryMethodDiscrete;break;case Vy:e=this.InterpolantFactoryMethodLinear;break;case Hy:e=this.InterpolantFactoryMethodSmooth}if(void 0===e){const e=\\\\\\\"unsupported interpolation for \\\\\\\"+this.ValueTypeName+\\\\\\\" keyframe track named \\\\\\\"+this.name;if(void 0===this.createInterpolant){if(t===this.DefaultInterpolation)throw new Error(e);this.setInterpolation(this.DefaultInterpolation)}return console.warn(\\\\\\\"THREE.KeyframeTrack:\\\\\\\",e),this}return this.createInterpolant=e,this}getInterpolation(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return Gy;case this.InterpolantFactoryMethodLinear:return Vy;case this.InterpolantFactoryMethodSmooth:return Hy}}getValueSize(){return this.values.length/this.times.length}shift(t){if(0!==t){const e=this.times;for(let n=0,i=e.length;n!==i;++n)e[n]+=t}return this}scale(t){if(1!==t){const e=this.times;for(let n=0,i=e.length;n!==i;++n)e[n]*=t}return this}trim(t,e){const n=this.times,i=n.length;let r=0,s=i-1;for(;r!==i&&n[r]<t;)++r;for(;-1!==s&&n[s]>e;)--s;if(++s,0!==r||s!==i){r>=s&&(s=Math.max(s,1),r=s-1);const t=this.getValueSize();this.times=XS.arraySlice(n,r,s),this.values=XS.arraySlice(this.values,r*t,s*t)}return this}validate(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0&&(console.error(\\\\\\\"THREE.KeyframeTrack: Invalid value size in track.\\\\\\\",this),t=!1);const n=this.times,i=this.values,r=n.length;0===r&&(console.error(\\\\\\\"THREE.KeyframeTrack: Track is empty.\\\\\\\",this),t=!1);let s=null;for(let e=0;e!==r;e++){const i=n[e];if(\\\\\\\"number\\\\\\\"==typeof i&&isNaN(i)){console.error(\\\\\\\"THREE.KeyframeTrack: Time is not a valid number.\\\\\\\",this,e,i),t=!1;break}if(null!==s&&s>i){console.error(\\\\\\\"THREE.KeyframeTrack: Out of order keys.\\\\\\\",this,e,i,s),t=!1;break}s=i}if(void 0!==i&&XS.isTypedArray(i))for(let e=0,n=i.length;e!==n;++e){const n=i[e];if(isNaN(n)){console.error(\\\\\\\"THREE.KeyframeTrack: Value is not a valid number.\\\\\\\",this,e,n),t=!1;break}}return t}optimize(){const t=XS.arraySlice(this.times),e=XS.arraySlice(this.values),n=this.getValueSize(),i=this.getInterpolation()===Hy,r=t.length-1;let s=1;for(let o=1;o<r;++o){let r=!1;const a=t[o];if(a!==t[o+1]&&(1!==o||a!==t[0]))if(i)r=!0;else{const t=o*n,i=t-n,s=t+n;for(let o=0;o!==n;++o){const n=e[t+o];if(n!==e[i+o]||n!==e[s+o]){r=!0;break}}}if(r){if(o!==s){t[s]=t[o];const i=o*n,r=s*n;for(let t=0;t!==n;++t)e[r+t]=e[i+t]}++s}}if(r>0){t[s]=t[r];for(let t=r*n,i=s*n,o=0;o!==n;++o)e[i+o]=e[t+o];++s}return s!==t.length?(this.times=XS.arraySlice(t,0,s),this.values=XS.arraySlice(e,0,s*n)):(this.times=t,this.values=e),this}clone(){const t=XS.arraySlice(this.times,0),e=XS.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}QS.prototype.TimeBufferType=Float32Array,QS.prototype.ValueBufferType=Float32Array,QS.prototype.DefaultInterpolation=Vy;class KS extends QS{}KS.prototype.ValueTypeName=\\\\\\\"bool\\\\\\\",KS.prototype.ValueBufferType=Array,KS.prototype.DefaultInterpolation=Gy,KS.prototype.InterpolantFactoryMethodLinear=void 0,KS.prototype.InterpolantFactoryMethodSmooth=void 0;class tC extends QS{}tC.prototype.ValueTypeName=\\\\\\\"color\\\\\\\";class eC extends QS{}eC.prototype.ValueTypeName=\\\\\\\"number\\\\\\\";class nC extends YS{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){const r=this.resultBuffer,s=this.sampleValues,o=this.valueSize,a=(n-e)/(i-e);let l=t*o;for(let t=l+o;l!==t;l+=4)Cx.slerpFlat(r,0,s,l-o,s,l,a);return r}}class iC extends QS{InterpolantFactoryMethodLinear(t){return new nC(this.times,this.values,this.getValueSize(),t)}}iC.prototype.ValueTypeName=\\\\\\\"quaternion\\\\\\\",iC.prototype.DefaultInterpolation=Vy,iC.prototype.InterpolantFactoryMethodSmooth=void 0;class rC extends QS{}rC.prototype.ValueTypeName=\\\\\\\"string\\\\\\\",rC.prototype.ValueBufferType=Array,rC.prototype.DefaultInterpolation=Gy,rC.prototype.InterpolantFactoryMethodLinear=void 0,rC.prototype.InterpolantFactoryMethodSmooth=void 0;class sC extends QS{}sC.prototype.ValueTypeName=\\\\\\\"vector\\\\\\\";class oC{constructor(t,e=-1,n,i=2500){this.name=t,this.tracks=n,this.duration=e,this.blendMode=i,this.uuid=lx(),this.duration<0&&this.resetDuration()}static parse(t){const e=[],n=t.tracks,i=1/(t.fps||1);for(let t=0,r=n.length;t!==r;++t)e.push(aC(n[t]).scale(i));const r=new this(t.name,t.duration,e,t.blendMode);return r.uuid=t.uuid,r}static toJSON(t){const e=[],n=t.tracks,i={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode};for(let t=0,i=n.length;t!==i;++t)e.push(QS.toJSON(n[t]));return i}static CreateFromMorphTargetSequence(t,e,n,i){const r=e.length,s=[];for(let t=0;t<r;t++){let o=[],a=[];o.push((t+r-1)%r,t,(t+1)%r),a.push(0,1,0);const l=XS.getKeyframeOrder(o);o=XS.sortedArray(o,1,l),a=XS.sortedArray(a,1,l),i||0!==o[0]||(o.push(r),a.push(a[0])),s.push(new eC(\\\\\\\".morphTargetInfluences[\\\\\\\"+e[t].name+\\\\\\\"]\\\\\\\",o,a).scale(1/n))}return new this(t,-1,s)}static findByName(t,e){let n=t;if(!Array.isArray(t)){const e=t;n=e.geometry&&e.geometry.animations||e.animations}for(let t=0;t<n.length;t++)if(n[t].name===e)return n[t];return null}static CreateClipsFromMorphTargetSequences(t,e,n){const i={},r=/^([\\\\w-]*?)([\\\\d]+)$/;for(let e=0,n=t.length;e<n;e++){const n=t[e],s=n.name.match(r);if(s&&s.length>1){const t=s[1];let e=i[t];e||(i[t]=e=[]),e.push(n)}}const s=[];for(const t in i)s.push(this.CreateFromMorphTargetSequence(t,i[t],e,n));return s}static parseAnimation(t,e){if(!t)return console.error(\\\\\\\"THREE.AnimationClip: No animation in JSONLoader data.\\\\\\\"),null;const n=function(t,e,n,i,r){if(0!==n.length){const s=[],o=[];XS.flattenJSON(n,s,o,i),0!==s.length&&r.push(new t(e,s,o))}},i=[],r=t.name||\\\\\\\"default\\\\\\\",s=t.fps||30,o=t.blendMode;let a=t.length||-1;const l=t.hierarchy||[];for(let t=0;t<l.length;t++){const r=l[t].keys;if(r&&0!==r.length)if(r[0].morphTargets){const t={};let e;for(e=0;e<r.length;e++)if(r[e].morphTargets)for(let n=0;n<r[e].morphTargets.length;n++)t[r[e].morphTargets[n]]=-1;for(const n in t){const t=[],s=[];for(let i=0;i!==r[e].morphTargets.length;++i){const i=r[e];t.push(i.time),s.push(i.morphTarget===n?1:0)}i.push(new eC(\\\\\\\".morphTargetInfluence[\\\\\\\"+n+\\\\\\\"]\\\\\\\",t,s))}a=t.length*(s||1)}else{const s=\\\\\\\".bones[\\\\\\\"+e[t].name+\\\\\\\"]\\\\\\\";n(sC,s+\\\\\\\".position\\\\\\\",r,\\\\\\\"pos\\\\\\\",i),n(iC,s+\\\\\\\".quaternion\\\\\\\",r,\\\\\\\"rot\\\\\\\",i),n(sC,s+\\\\\\\".scale\\\\\\\",r,\\\\\\\"scl\\\\\\\",i)}}if(0===i.length)return null;return new this(r,a,i,o)}resetDuration(){let t=0;for(let e=0,n=this.tracks.length;e!==n;++e){const n=this.tracks[e];t=Math.max(t,n.times[n.times.length-1])}return this.duration=t,this}trim(){for(let t=0;t<this.tracks.length;t++)this.tracks[t].trim(0,this.duration);return this}validate(){let t=!0;for(let e=0;e<this.tracks.length;e++)t=t&&this.tracks[e].validate();return t}optimize(){for(let t=0;t<this.tracks.length;t++)this.tracks[t].optimize();return this}clone(){const t=[];for(let e=0;e<this.tracks.length;e++)t.push(this.tracks[e].clone());return new this.constructor(this.name,this.duration,t,this.blendMode)}toJSON(){return this.constructor.toJSON(this)}}function aC(t){if(void 0===t.type)throw new Error(\\\\\\\"THREE.KeyframeTrack: track type undefined, can not parse\\\\\\\");const e=function(t){switch(t.toLowerCase()){case\\\\\\\"scalar\\\\\\\":case\\\\\\\"double\\\\\\\":case\\\\\\\"float\\\\\\\":case\\\\\\\"number\\\\\\\":case\\\\\\\"integer\\\\\\\":return eC;case\\\\\\\"vector\\\\\\\":case\\\\\\\"vector2\\\\\\\":case\\\\\\\"vector3\\\\\\\":case\\\\\\\"vector4\\\\\\\":return sC;case\\\\\\\"color\\\\\\\":return tC;case\\\\\\\"quaternion\\\\\\\":return iC;case\\\\\\\"bool\\\\\\\":case\\\\\\\"boolean\\\\\\\":return KS;case\\\\\\\"string\\\\\\\":return rC}throw new Error(\\\\\\\"THREE.KeyframeTrack: Unsupported typeName: \\\\\\\"+t)}(t.type);if(void 0===t.times){const e=[],n=[];XS.flattenJSON(t.keys,e,n,\\\\\\\"value\\\\\\\"),t.times=e,t.values=n}return void 0!==e.parse?e.parse(t):new e(t.name,t.times,t.values,t.interpolation)}const lC={enabled:!1,files:{},add:function(t,e){!1!==this.enabled&&(this.files[t]=e)},get:function(t){if(!1!==this.enabled)return this.files[t]},remove:function(t){delete this.files[t]},clear:function(){this.files={}}};class cC{constructor(t,e,n){const i=this;let r,s=!1,o=0,a=0;const l=[];this.onStart=void 0,this.onLoad=t,this.onProgress=e,this.onError=n,this.itemStart=function(t){a++,!1===s&&void 0!==i.onStart&&i.onStart(t,o,a),s=!0},this.itemEnd=function(t){o++,void 0!==i.onProgress&&i.onProgress(t,o,a),o===a&&(s=!1,void 0!==i.onLoad&&i.onLoad())},this.itemError=function(t){void 0!==i.onError&&i.onError(t)},this.resolveURL=function(t){return r?r(t):t},this.setURLModifier=function(t){return r=t,this},this.addHandler=function(t,e){return l.push(t,e),this},this.removeHandler=function(t){const e=l.indexOf(t);return-1!==e&&l.splice(e,2),this},this.getHandler=function(t){for(let e=0,n=l.length;e<n;e+=2){const n=l[e],i=l[e+1];if(n.global&&(n.lastIndex=0),n.test(t))return i}return null}}}const uC=new cC;class hC{constructor(t){this.manager=void 0!==t?t:uC,this.crossOrigin=\\\\\\\"anonymous\\\\\\\",this.withCredentials=!1,this.path=\\\\\\\"\\\\\\\",this.resourcePath=\\\\\\\"\\\\\\\",this.requestHeader={}}load(){}loadAsync(t,e){const n=this;return new Promise((function(i,r){n.load(t,i,e,r)}))}parse(){}setCrossOrigin(t){return this.crossOrigin=t,this}setWithCredentials(t){return this.withCredentials=t,this}setPath(t){return this.path=t,this}setResourcePath(t){return this.resourcePath=t,this}setRequestHeader(t){return this.requestHeader=t,this}}const dC={};class pC extends hC{constructor(t){super(t)}load(t,e,n,i){void 0===t&&(t=\\\\\\\"\\\\\\\"),void 0!==this.path&&(t=this.path+t),t=this.manager.resolveURL(t);const r=this,s=lC.get(t);if(void 0!==s)return r.manager.itemStart(t),setTimeout((function(){e&&e(s),r.manager.itemEnd(t)}),0),s;if(void 0!==dC[t])return void dC[t].push({onLoad:e,onProgress:n,onError:i});const o=t.match(/^data:(.*?)(;base64)?,(.*)$/);let a;if(o){const n=o[1],s=!!o[2];let a=o[3];a=decodeURIComponent(a),s&&(a=atob(a));try{let i;const s=(this.responseType||\\\\\\\"\\\\\\\").toLowerCase();switch(s){case\\\\\\\"arraybuffer\\\\\\\":case\\\\\\\"blob\\\\\\\":const t=new Uint8Array(a.length);for(let e=0;e<a.length;e++)t[e]=a.charCodeAt(e);i=\\\\\\\"blob\\\\\\\"===s?new Blob([t.buffer],{type:n}):t.buffer;break;case\\\\\\\"document\\\\\\\":const e=new DOMParser;i=e.parseFromString(a,n);break;case\\\\\\\"json\\\\\\\":i=JSON.parse(a);break;default:i=a}setTimeout((function(){e&&e(i),r.manager.itemEnd(t)}),0)}catch(e){setTimeout((function(){i&&i(e),r.manager.itemError(t),r.manager.itemEnd(t)}),0)}}else{dC[t]=[],dC[t].push({onLoad:e,onProgress:n,onError:i}),a=new XMLHttpRequest,a.open(\\\\\\\"GET\\\\\\\",t,!0),a.addEventListener(\\\\\\\"load\\\\\\\",(function(e){const n=this.response,i=dC[t];if(delete dC[t],200===this.status||0===this.status){0===this.status&&console.warn(\\\\\\\"THREE.FileLoader: HTTP Status 0 received.\\\\\\\"),lC.add(t,n);for(let t=0,e=i.length;t<e;t++){const e=i[t];e.onLoad&&e.onLoad(n)}r.manager.itemEnd(t)}else{for(let t=0,n=i.length;t<n;t++){const n=i[t];n.onError&&n.onError(e)}r.manager.itemError(t),r.manager.itemEnd(t)}}),!1),a.addEventListener(\\\\\\\"progress\\\\\\\",(function(e){const n=dC[t];for(let t=0,i=n.length;t<i;t++){const i=n[t];i.onProgress&&i.onProgress(e)}}),!1),a.addEventListener(\\\\\\\"error\\\\\\\",(function(e){const n=dC[t];delete dC[t];for(let t=0,i=n.length;t<i;t++){const i=n[t];i.onError&&i.onError(e)}r.manager.itemError(t),r.manager.itemEnd(t)}),!1),a.addEventListener(\\\\\\\"abort\\\\\\\",(function(e){const n=dC[t];delete dC[t];for(let t=0,i=n.length;t<i;t++){const i=n[t];i.onError&&i.onError(e)}r.manager.itemError(t),r.manager.itemEnd(t)}),!1),void 0!==this.responseType&&(a.responseType=this.responseType),void 0!==this.withCredentials&&(a.withCredentials=this.withCredentials),a.overrideMimeType&&a.overrideMimeType(void 0!==this.mimeType?this.mimeType:\\\\\\\"text/plain\\\\\\\");for(const t in this.requestHeader)a.setRequestHeader(t,this.requestHeader[t]);a.send(null)}return r.manager.itemStart(t),a}setResponseType(t){return this.responseType=t,this}setMimeType(t){return this.mimeType=t,this}}class _C extends hC{constructor(t){super(t)}load(t,e,n,i){void 0!==this.path&&(t=this.path+t),t=this.manager.resolveURL(t);const r=this,s=lC.get(t);if(void 0!==s)return r.manager.itemStart(t),setTimeout((function(){e&&e(s),r.manager.itemEnd(t)}),0),s;const o=yx(\\\\\\\"img\\\\\\\");function a(){o.removeEventListener(\\\\\\\"load\\\\\\\",a,!1),o.removeEventListener(\\\\\\\"error\\\\\\\",l,!1),lC.add(t,this),e&&e(this),r.manager.itemEnd(t)}function l(e){o.removeEventListener(\\\\\\\"load\\\\\\\",a,!1),o.removeEventListener(\\\\\\\"error\\\\\\\",l,!1),i&&i(e),r.manager.itemError(t),r.manager.itemEnd(t)}return o.addEventListener(\\\\\\\"load\\\\\\\",a,!1),o.addEventListener(\\\\\\\"error\\\\\\\",l,!1),\\\\\\\"data:\\\\\\\"!==t.substr(0,5)&&void 0!==this.crossOrigin&&(o.crossOrigin=this.crossOrigin),r.manager.itemStart(t),o.src=t,o}}class mC extends hC{constructor(t){super(t)}load(t,e,n,i){const r=new Gw,s=new _C(this.manager);s.setCrossOrigin(this.crossOrigin),s.setPath(this.path);let o=0;function a(n){s.load(t[n],(function(t){r.images[n]=t,o++,6===o&&(r.needsUpdate=!0,e&&e(r))}),void 0,i)}for(let e=0;e<t.length;++e)a(e);return r}}class fC extends hC{constructor(t){super(t)}load(t,e,n,i){const r=new Tx,s=new _C(this.manager);return s.setCrossOrigin(this.crossOrigin),s.setPath(this.path),s.load(t,(function(t){r.image=t,r.needsUpdate=!0,void 0!==e&&e(r)}),n,i),r}}class gC extends Ob{constructor(t,e=1){super(),this.type=\\\\\\\"Light\\\\\\\",this.color=new Zb(t),this.intensity=e}dispose(){}copy(t){return super.copy(t),this.color.copy(t.color),this.intensity=t.intensity,this}toJSON(t){const e=super.toJSON(t);return e.object.color=this.color.getHex(),e.object.intensity=this.intensity,void 0!==this.groundColor&&(e.object.groundColor=this.groundColor.getHex()),void 0!==this.distance&&(e.object.distance=this.distance),void 0!==this.angle&&(e.object.angle=this.angle),void 0!==this.decay&&(e.object.decay=this.decay),void 0!==this.penumbra&&(e.object.penumbra=this.penumbra),void 0!==this.shadow&&(e.object.shadow=this.shadow.toJSON()),e}}gC.prototype.isLight=!0;class vC extends gC{constructor(t,e,n){super(t,n),this.type=\\\\\\\"HemisphereLight\\\\\\\",this.position.copy(Ob.DefaultUp),this.updateMatrix(),this.groundColor=new Zb(e)}copy(t){return gC.prototype.copy.call(this,t),this.groundColor.copy(t.groundColor),this}}vC.prototype.isHemisphereLight=!0;const yC=new ob,xC=new Nx,bC=new Nx;class wC{constructor(t){this.camera=t,this.bias=0,this.normalBias=0,this.radius=1,this.blurSamples=8,this.mapSize=new fx(512,512),this.map=null,this.mapPass=null,this.matrix=new ob,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new $w,this._frameExtents=new fx(1,1),this._viewportCount=1,this._viewports=[new Ex(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(t){const e=this.camera,n=this.matrix;xC.setFromMatrixPosition(t.matrixWorld),e.position.copy(xC),bC.setFromMatrixPosition(t.target.matrixWorld),e.lookAt(bC),e.updateMatrixWorld(),yC.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),this._frustum.setFromProjectionMatrix(yC),n.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),n.multiply(e.projectionMatrix),n.multiply(e.matrixWorldInverse)}getViewport(t){return this._viewports[t]}getFrameExtents(){return this._frameExtents}dispose(){this.map&&this.map.dispose(),this.mapPass&&this.mapPass.dispose()}copy(t){return this.camera=t.camera.clone(),this.bias=t.bias,this.radius=t.radius,this.mapSize.copy(t.mapSize),this}clone(){return(new this.constructor).copy(this)}toJSON(){const t={};return 0!==this.bias&&(t.bias=this.bias),0!==this.normalBias&&(t.normalBias=this.normalBias),1!==this.radius&&(t.radius=this.radius),512===this.mapSize.x&&512===this.mapSize.y||(t.mapSize=this.mapSize.toArray()),t.camera=this.camera.toJSON(!1).object,delete t.camera.matrix,t}}class TC extends wC{constructor(){super(new Bw(50,1,.5,500)),this.focus=1}updateMatrices(t){const e=this.camera,n=2*sx*t.angle*this.focus,i=this.mapSize.width/this.mapSize.height,r=t.distance||e.far;n===e.fov&&i===e.aspect&&r===e.far||(e.fov=n,e.aspect=i,e.far=r,e.updateProjectionMatrix()),super.updateMatrices(t)}copy(t){return super.copy(t),this.focus=t.focus,this}}TC.prototype.isSpotLightShadow=!0;class AC extends gC{constructor(t,e,n=0,i=Math.PI/3,r=0,s=1){super(t,e),this.type=\\\\\\\"SpotLight\\\\\\\",this.position.copy(Ob.DefaultUp),this.updateMatrix(),this.target=new Ob,this.distance=n,this.angle=i,this.penumbra=r,this.decay=s,this.shadow=new TC}get power(){return this.intensity*Math.PI}set power(t){this.intensity=t/Math.PI}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.distance=t.distance,this.angle=t.angle,this.penumbra=t.penumbra,this.decay=t.decay,this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}AC.prototype.isSpotLight=!0;const EC=new ob,MC=new Nx,SC=new Nx;class CC extends wC{constructor(){super(new Bw(90,1,.5,500)),this._frameExtents=new fx(4,2),this._viewportCount=6,this._viewports=[new Ex(2,1,1,1),new Ex(0,1,1,1),new Ex(3,1,1,1),new Ex(1,1,1,1),new Ex(3,0,1,1),new Ex(1,0,1,1)],this._cubeDirections=[new Nx(1,0,0),new Nx(-1,0,0),new Nx(0,0,1),new Nx(0,0,-1),new Nx(0,1,0),new Nx(0,-1,0)],this._cubeUps=[new Nx(0,1,0),new Nx(0,1,0),new Nx(0,1,0),new Nx(0,1,0),new Nx(0,0,1),new Nx(0,0,-1)]}updateMatrices(t,e=0){const n=this.camera,i=this.matrix,r=t.distance||n.far;r!==n.far&&(n.far=r,n.updateProjectionMatrix()),MC.setFromMatrixPosition(t.matrixWorld),n.position.copy(MC),SC.copy(n.position),SC.add(this._cubeDirections[e]),n.up.copy(this._cubeUps[e]),n.lookAt(SC),n.updateMatrixWorld(),i.makeTranslation(-MC.x,-MC.y,-MC.z),EC.multiplyMatrices(n.projectionMatrix,n.matrixWorldInverse),this._frustum.setFromProjectionMatrix(EC)}}CC.prototype.isPointLightShadow=!0;class NC extends gC{constructor(t,e,n=0,i=1){super(t,e),this.type=\\\\\\\"PointLight\\\\\\\",this.distance=n,this.decay=i,this.shadow=new CC}get power(){return 4*this.intensity*Math.PI}set power(t){this.intensity=t/(4*Math.PI)}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.distance=t.distance,this.decay=t.decay,this.shadow=t.shadow.clone(),this}}NC.prototype.isPointLight=!0;class LC extends wC{constructor(){super(new lT(-5,5,5,-5,.5,500))}}LC.prototype.isDirectionalLightShadow=!0;class OC extends gC{constructor(t,e){super(t,e),this.type=\\\\\\\"DirectionalLight\\\\\\\",this.position.copy(Ob.DefaultUp),this.updateMatrix(),this.target=new Ob,this.shadow=new LC}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}OC.prototype.isDirectionalLight=!0;class RC extends gC{constructor(t,e){super(t,e),this.type=\\\\\\\"AmbientLight\\\\\\\"}}RC.prototype.isAmbientLight=!0;class PC extends gC{constructor(t,e,n=10,i=10){super(t,e),this.type=\\\\\\\"RectAreaLight\\\\\\\",this.width=n,this.height=i}get power(){return this.intensity*this.width*this.height*Math.PI}set power(t){this.intensity=t/(this.width*this.height*Math.PI)}copy(t){return super.copy(t),this.width=t.width,this.height=t.height,this}toJSON(t){const e=super.toJSON(t);return e.object.width=this.width,e.object.height=this.height,e}}PC.prototype.isRectAreaLight=!0;class IC{constructor(){this.coefficients=[];for(let t=0;t<9;t++)this.coefficients.push(new Nx)}set(t){for(let e=0;e<9;e++)this.coefficients[e].copy(t[e]);return this}zero(){for(let t=0;t<9;t++)this.coefficients[t].set(0,0,0);return this}getAt(t,e){const n=t.x,i=t.y,r=t.z,s=this.coefficients;return e.copy(s[0]).multiplyScalar(.282095),e.addScaledVector(s[1],.488603*i),e.addScaledVector(s[2],.488603*r),e.addScaledVector(s[3],.488603*n),e.addScaledVector(s[4],n*i*1.092548),e.addScaledVector(s[5],i*r*1.092548),e.addScaledVector(s[6],.315392*(3*r*r-1)),e.addScaledVector(s[7],n*r*1.092548),e.addScaledVector(s[8],.546274*(n*n-i*i)),e}getIrradianceAt(t,e){const n=t.x,i=t.y,r=t.z,s=this.coefficients;return e.copy(s[0]).multiplyScalar(.886227),e.addScaledVector(s[1],1.023328*i),e.addScaledVector(s[2],1.023328*r),e.addScaledVector(s[3],1.023328*n),e.addScaledVector(s[4],.858086*n*i),e.addScaledVector(s[5],.858086*i*r),e.addScaledVector(s[6],.743125*r*r-.247708),e.addScaledVector(s[7],.858086*n*r),e.addScaledVector(s[8],.429043*(n*n-i*i)),e}add(t){for(let e=0;e<9;e++)this.coefficients[e].add(t.coefficients[e]);return this}addScaledSH(t,e){for(let n=0;n<9;n++)this.coefficients[n].addScaledVector(t.coefficients[n],e);return this}scale(t){for(let e=0;e<9;e++)this.coefficients[e].multiplyScalar(t);return this}lerp(t,e){for(let n=0;n<9;n++)this.coefficients[n].lerp(t.coefficients[n],e);return this}equals(t){for(let e=0;e<9;e++)if(!this.coefficients[e].equals(t.coefficients[e]))return!1;return!0}copy(t){return this.set(t.coefficients)}clone(){return(new this.constructor).copy(this)}fromArray(t,e=0){const n=this.coefficients;for(let i=0;i<9;i++)n[i].fromArray(t,e+3*i);return this}toArray(t=[],e=0){const n=this.coefficients;for(let i=0;i<9;i++)n[i].toArray(t,e+3*i);return t}static getBasisAt(t,e){const n=t.x,i=t.y,r=t.z;e[0]=.282095,e[1]=.488603*i,e[2]=.488603*r,e[3]=.488603*n,e[4]=1.092548*n*i,e[5]=1.092548*i*r,e[6]=.315392*(3*r*r-1),e[7]=1.092548*n*r,e[8]=.546274*(n*n-i*i)}}IC.prototype.isSphericalHarmonics3=!0;class FC extends gC{constructor(t=new IC,e=1){super(void 0,e),this.sh=t}copy(t){return super.copy(t),this.sh.copy(t.sh),this}fromJSON(t){return this.intensity=t.intensity,this.sh.fromArray(t.sh),this}toJSON(t){const e=super.toJSON(t);return e.object.sh=this.sh.toArray(),e}}FC.prototype.isLightProbe=!0;class DC{static decodeText(t){if(\\\\\\\"undefined\\\\\\\"!=typeof TextDecoder)return(new TextDecoder).decode(t);let e=\\\\\\\"\\\\\\\";for(let n=0,i=t.length;n<i;n++)e+=String.fromCharCode(t[n]);try{return decodeURIComponent(escape(e))}catch(t){return e}}static extractUrlBase(t){const e=t.lastIndexOf(\\\\\\\"/\\\\\\\");return-1===e?\\\\\\\"./\\\\\\\":t.substr(0,e+1)}}class kC extends dw{constructor(){super(),this.type=\\\\\\\"InstancedBufferGeometry\\\\\\\",this.instanceCount=1/0}copy(t){return super.copy(t),this.instanceCount=t.instanceCount,this}clone(){return(new this.constructor).copy(this)}toJSON(){const t=super.toJSON(this);return t.instanceCount=this.instanceCount,t.isInstancedBufferGeometry=!0,t}}kC.prototype.isInstancedBufferGeometry=!0;let BC;(class extends hC{constructor(t){super(t),\\\\\\\"undefined\\\\\\\"==typeof createImageBitmap&&console.warn(\\\\\\\"THREE.ImageBitmapLoader: createImageBitmap() not supported.\\\\\\\"),\\\\\\\"undefined\\\\\\\"==typeof fetch&&console.warn(\\\\\\\"THREE.ImageBitmapLoader: fetch() not supported.\\\\\\\"),this.options={premultiplyAlpha:\\\\\\\"none\\\\\\\"}}setOptions(t){return this.options=t,this}load(t,e,n,i){void 0===t&&(t=\\\\\\\"\\\\\\\"),void 0!==this.path&&(t=this.path+t),t=this.manager.resolveURL(t);const r=this,s=lC.get(t);if(void 0!==s)return r.manager.itemStart(t),setTimeout((function(){e&&e(s),r.manager.itemEnd(t)}),0),s;const o={};o.credentials=\\\\\\\"anonymous\\\\\\\"===this.crossOrigin?\\\\\\\"same-origin\\\\\\\":\\\\\\\"include\\\\\\\",o.headers=this.requestHeader,fetch(t,o).then((function(t){return t.blob()})).then((function(t){return createImageBitmap(t,Object.assign(r.options,{colorSpaceConversion:\\\\\\\"none\\\\\\\"}))})).then((function(n){lC.add(t,n),e&&e(n),r.manager.itemEnd(t)})).catch((function(e){i&&i(e),r.manager.itemError(t),r.manager.itemEnd(t)})),r.manager.itemStart(t)}}).prototype.isImageBitmapLoader=!0;const zC=function(){return void 0===BC&&(BC=new(window.AudioContext||window.webkitAudioContext)),BC};class UC extends hC{constructor(t){super(t)}load(t,e,n,i){const r=this,s=new pC(this.manager);s.setResponseType(\\\\\\\"arraybuffer\\\\\\\"),s.setPath(this.path),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(t,(function(n){try{const t=n.slice(0);zC().decodeAudioData(t,(function(t){e(t)}))}catch(e){i?i(e):console.error(e),r.manager.itemError(t)}}),n,i)}}(class extends FC{constructor(t,e,n=1){super(void 0,n);const i=(new Zb).set(t),r=(new Zb).set(e),s=new Nx(i.r,i.g,i.b),o=new Nx(r.r,r.g,r.b),a=Math.sqrt(Math.PI),l=a*Math.sqrt(.75);this.sh.coefficients[0].copy(s).add(o).multiplyScalar(a),this.sh.coefficients[1].copy(s).sub(o).multiplyScalar(l)}}).prototype.isHemisphereLightProbe=!0;(class extends FC{constructor(t,e=1){super(void 0,e);const n=(new Zb).set(t);this.sh.coefficients[0].set(n.r,n.g,n.b).multiplyScalar(2*Math.sqrt(Math.PI))}}).prototype.isAmbientLightProbe=!0;class GC extends Ob{constructor(t){super(),this.type=\\\\\\\"Audio\\\\\\\",this.listener=t,this.context=t.context,this.gain=this.context.createGain(),this.gain.connect(t.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType=\\\\\\\"empty\\\\\\\",this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(t){return this.hasPlaybackControl=!1,this.sourceType=\\\\\\\"audioNode\\\\\\\",this.source=t,this.connect(),this}setMediaElementSource(t){return this.hasPlaybackControl=!1,this.sourceType=\\\\\\\"mediaNode\\\\\\\",this.source=this.context.createMediaElementSource(t),this.connect(),this}setMediaStreamSource(t){return this.hasPlaybackControl=!1,this.sourceType=\\\\\\\"mediaStreamNode\\\\\\\",this.source=this.context.createMediaStreamSource(t),this.connect(),this}setBuffer(t){return this.buffer=t,this.sourceType=\\\\\\\"buffer\\\\\\\",this.autoplay&&this.play(),this}play(t=0){if(!0===this.isPlaying)return void console.warn(\\\\\\\"THREE.Audio: Audio is already playing.\\\\\\\");if(!1===this.hasPlaybackControl)return void console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\");this._startedAt=this.context.currentTime+t;const e=this.context.createBufferSource();return e.buffer=this.buffer,e.loop=this.loop,e.loopStart=this.loopStart,e.loopEnd=this.loopEnd,e.onended=this.onEnded.bind(this),e.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=e,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(!1!==this.hasPlaybackControl)return!0===this.isPlaying&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,!0===this.loop&&(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this;console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\")}stop(){if(!1!==this.hasPlaybackControl)return this._progress=0,this.source.stop(),this.source.onended=null,this.isPlaying=!1,this;console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\")}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t<e;t++)this.filters[t-1].connect(this.filters[t]);this.filters[this.filters.length-1].connect(this.getOutput())}else this.source.connect(this.getOutput());return this._connected=!0,this}disconnect(){if(this.filters.length>0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t<e;t++)this.filters[t-1].disconnect(this.filters[t]);this.filters[this.filters.length-1].disconnect(this.getOutput())}else this.source.disconnect(this.getOutput());return this._connected=!1,this}getFilters(){return this.filters}setFilters(t){return t||(t=[]),!0===this._connected?(this.disconnect(),this.filters=t.slice(),this.connect()):this.filters=t.slice(),this}setDetune(t){if(this.detune=t,void 0!==this.source.detune)return!0===this.isPlaying&&this.source.detune.setTargetAtTime(this.detune,this.context.currentTime,.01),this}getDetune(){return this.detune}getFilter(){return this.getFilters()[0]}setFilter(t){return this.setFilters(t?[t]:[])}setPlaybackRate(t){if(!1!==this.hasPlaybackControl)return this.playbackRate=t,!0===this.isPlaying&&this.source.playbackRate.setTargetAtTime(this.playbackRate,this.context.currentTime,.01),this;console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\")}getPlaybackRate(){return this.playbackRate}onEnded(){this.isPlaying=!1}getLoop(){return!1===this.hasPlaybackControl?(console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\"),!1):this.loop}setLoop(t){if(!1!==this.hasPlaybackControl)return this.loop=t,!0===this.isPlaying&&(this.source.loop=this.loop),this;console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\")}setLoopStart(t){return this.loopStart=t,this}setLoopEnd(t){return this.loopEnd=t,this}getVolume(){return this.gain.gain.value}setVolume(t){return this.gain.gain.setTargetAtTime(t,this.context.currentTime,.01),this}}class VC{constructor(t,e,n){let i,r,s;switch(this.binding=t,this.valueSize=n,e){case\\\\\\\"quaternion\\\\\\\":i=this._slerp,r=this._slerpAdditive,s=this._setAdditiveIdentityQuaternion,this.buffer=new Float64Array(6*n),this._workIndex=5;break;case\\\\\\\"string\\\\\\\":case\\\\\\\"bool\\\\\\\":i=this._select,r=this._select,s=this._setAdditiveIdentityOther,this.buffer=new Array(5*n);break;default:i=this._lerp,r=this._lerpAdditive,s=this._setAdditiveIdentityNumeric,this.buffer=new Float64Array(5*n)}this._mixBufferRegion=i,this._mixBufferRegionAdditive=r,this._setIdentity=s,this._origIndex=3,this._addIndex=4,this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,this.useCount=0,this.referenceCount=0}accumulate(t,e){const n=this.buffer,i=this.valueSize,r=t*i+i;let s=this.cumulativeWeight;if(0===s){for(let t=0;t!==i;++t)n[r+t]=n[t];s=e}else{s+=e;const t=e/s;this._mixBufferRegion(n,r,0,t,i)}this.cumulativeWeight=s}accumulateAdditive(t){const e=this.buffer,n=this.valueSize,i=n*this._addIndex;0===this.cumulativeWeightAdditive&&this._setIdentity(),this._mixBufferRegionAdditive(e,i,0,t,n),this.cumulativeWeightAdditive+=t}apply(t){const e=this.valueSize,n=this.buffer,i=t*e+e,r=this.cumulativeWeight,s=this.cumulativeWeightAdditive,o=this.binding;if(this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,r<1){const t=e*this._origIndex;this._mixBufferRegion(n,i,t,1-r,e)}s>0&&this._mixBufferRegionAdditive(n,i,this._addIndex*e,1,e);for(let t=e,r=e+e;t!==r;++t)if(n[t]!==n[t+e]){o.setValue(n,i);break}}saveOriginalState(){const t=this.binding,e=this.buffer,n=this.valueSize,i=n*this._origIndex;t.getValue(e,i);for(let t=n,r=i;t!==r;++t)e[t]=e[i+t%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)}_setAdditiveIdentityNumeric(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let n=t;n<e;n++)this.buffer[n]=0}_setAdditiveIdentityQuaternion(){this._setAdditiveIdentityNumeric(),this.buffer[this._addIndex*this.valueSize+3]=1}_setAdditiveIdentityOther(){const t=this._origIndex*this.valueSize,e=this._addIndex*this.valueSize;for(let n=0;n<this.valueSize;n++)this.buffer[e+n]=this.buffer[t+n]}_select(t,e,n,i,r){if(i>=.5)for(let i=0;i!==r;++i)t[e+i]=t[n+i]}_slerp(t,e,n,i){Cx.slerpFlat(t,e,t,e,t,n,i)}_slerpAdditive(t,e,n,i,r){const s=this._workIndex*r;Cx.multiplyQuaternionsFlat(t,s,t,e,t,n),Cx.slerpFlat(t,e,t,e,t,s,i)}_lerp(t,e,n,i,r){const s=1-i;for(let o=0;o!==r;++o){const r=e+o;t[r]=t[r]*s+t[n+o]*i}}_lerpAdditive(t,e,n,i,r){for(let s=0;s!==r;++s){const r=e+s;t[r]=t[r]+t[n+s]*i}}}const HC=\\\\\\\"\\\\\\\\[\\\\\\\\]\\\\\\\\.:\\\\\\\\/\\\\\\\",jC=new RegExp(\\\\\\\"[\\\\\\\\[\\\\\\\\]\\\\\\\\.:\\\\\\\\/]\\\\\\\",\\\\\\\"g\\\\\\\"),WC=\\\\\\\"[^\\\\\\\\[\\\\\\\\]\\\\\\\\.:\\\\\\\\/]\\\\\\\",qC=\\\\\\\"[^\\\\\\\"+HC.replace(\\\\\\\"\\\\\\\\.\\\\\\\",\\\\\\\"\\\\\\\")+\\\\\\\"]\\\\\\\",XC=/((?:WC+[\\\\/:])*)/.source.replace(\\\\\\\"WC\\\\\\\",WC),YC=/(WCOD+)?/.source.replace(\\\\\\\"WCOD\\\\\\\",qC),$C=/(?:\\\\.(WC+)(?:\\\\[(.+)\\\\])?)?/.source.replace(\\\\\\\"WC\\\\\\\",WC),JC=/\\\\.(WC+)(?:\\\\[(.+)\\\\])?/.source.replace(\\\\\\\"WC\\\\\\\",WC),ZC=new RegExp(\\\\\\\"^\\\\\\\"+XC+YC+$C+JC+\\\\\\\"$\\\\\\\"),QC=[\\\\\\\"material\\\\\\\",\\\\\\\"materials\\\\\\\",\\\\\\\"bones\\\\\\\"];class KC{constructor(t,e,n){this.path=e,this.parsedPath=n||KC.parseTrackName(e),this.node=KC.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,e,n){return t&&t.isAnimationObjectGroup?new KC.Composite(t,e,n):new KC(t,e,n)}static sanitizeNodeName(t){return t.replace(/\\\\s/g,\\\\\\\"_\\\\\\\").replace(jC,\\\\\\\"\\\\\\\")}static parseTrackName(t){const e=ZC.exec(t);if(!e)throw new Error(\\\\\\\"PropertyBinding: Cannot parse trackName: \\\\\\\"+t);const n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=n.nodeName&&n.nodeName.lastIndexOf(\\\\\\\".\\\\\\\");if(void 0!==i&&-1!==i){const t=n.nodeName.substring(i+1);-1!==QC.indexOf(t)&&(n.nodeName=n.nodeName.substring(0,i),n.objectName=t)}if(null===n.propertyName||0===n.propertyName.length)throw new Error(\\\\\\\"PropertyBinding: can not parse propertyName from trackName: \\\\\\\"+t);return n}static findNode(t,e){if(!e||\\\\\\\"\\\\\\\"===e||\\\\\\\".\\\\\\\"===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const n=t.skeleton.getBoneByName(e);if(void 0!==n)return n}if(t.children){const n=function(t){for(let i=0;i<t.length;i++){const r=t[i];if(r.name===e||r.uuid===e)return r;const s=n(r.children);if(s)return s}return null},i=n(t.children);if(i)return i}return null}_getValue_unavailable(){}_setValue_unavailable(){}_getValue_direct(t,e){t[e]=this.targetObject[this.propertyName]}_getValue_array(t,e){const n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)t[e++]=n[i]}_getValue_arrayElement(t,e){t[e]=this.resolvedProperty[this.propertyIndex]}_getValue_toArray(t,e){this.resolvedProperty.toArray(t,e)}_setValue_direct(t,e){this.targetObject[this.propertyName]=t[e]}_setValue_direct_setNeedsUpdate(t,e){this.targetObject[this.propertyName]=t[e],this.targetObject.needsUpdate=!0}_setValue_direct_setMatrixWorldNeedsUpdate(t,e){this.targetObject[this.propertyName]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_array(t,e){const n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)n[i]=t[e++]}_setValue_array_setNeedsUpdate(t,e){const n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)n[i]=t[e++];this.targetObject.needsUpdate=!0}_setValue_array_setMatrixWorldNeedsUpdate(t,e){const n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)n[i]=t[e++];this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_arrayElement(t,e){this.resolvedProperty[this.propertyIndex]=t[e]}_setValue_arrayElement_setNeedsUpdate(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.needsUpdate=!0}_setValue_arrayElement_setMatrixWorldNeedsUpdate(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_fromArray(t,e){this.resolvedProperty.fromArray(t,e)}_setValue_fromArray_setNeedsUpdate(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.needsUpdate=!0}_setValue_fromArray_setMatrixWorldNeedsUpdate(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.matrixWorldNeedsUpdate=!0}_getValue_unbound(t,e){this.bind(),this.getValue(t,e)}_setValue_unbound(t,e){this.bind(),this.setValue(t,e)}bind(){let t=this.node;const e=this.parsedPath,n=e.objectName,i=e.propertyName;let r=e.propertyIndex;if(t||(t=KC.findNode(this.rootNode,e.nodeName)||this.rootNode,this.node=t),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!t)return void console.error(\\\\\\\"THREE.PropertyBinding: Trying to update node for track: \\\\\\\"+this.path+\\\\\\\" but it wasn't found.\\\\\\\");if(n){let i=e.objectIndex;switch(n){case\\\\\\\"materials\\\\\\\":if(!t.material)return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to material as node does not have a material.\\\\\\\",this);if(!t.material.materials)return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.\\\\\\\",this);t=t.material.materials;break;case\\\\\\\"bones\\\\\\\":if(!t.skeleton)return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.\\\\\\\",this);t=t.skeleton.bones;for(let e=0;e<t.length;e++)if(t[e].name===i){i=e;break}break;default:if(void 0===t[n])return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to objectName of node undefined.\\\\\\\",this);t=t[n]}if(void 0!==i){if(void 0===t[i])return void console.error(\\\\\\\"THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.\\\\\\\",this,t);t=t[i]}}const s=t[i];if(void 0===s){const n=e.nodeName;return void console.error(\\\\\\\"THREE.PropertyBinding: Trying to update property for track: \\\\\\\"+n+\\\\\\\".\\\\\\\"+i+\\\\\\\" but it wasn't found.\\\\\\\",t)}let o=this.Versioning.None;this.targetObject=t,void 0!==t.needsUpdate?o=this.Versioning.NeedsUpdate:void 0!==t.matrixWorldNeedsUpdate&&(o=this.Versioning.MatrixWorldNeedsUpdate);let a=this.BindingType.Direct;if(void 0!==r){if(\\\\\\\"morphTargetInfluences\\\\\\\"===i){if(!t.geometry)return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.\\\\\\\",this);if(!t.geometry.isBufferGeometry)return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.\\\\\\\",this);if(!t.geometry.morphAttributes)return void console.error(\\\\\\\"THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.\\\\\\\",this);void 0!==t.morphTargetDictionary[r]&&(r=t.morphTargetDictionary[r])}a=this.BindingType.ArrayElement,this.resolvedProperty=s,this.propertyIndex=r}else void 0!==s.fromArray&&void 0!==s.toArray?(a=this.BindingType.HasFromToArray,this.resolvedProperty=s):Array.isArray(s)?(a=this.BindingType.EntireArray,this.resolvedProperty=s):this.propertyName=i;this.getValue=this.GetterByBindingType[a],this.setValue=this.SetterByBindingTypeAndVersioning[a][o]}unbind(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}}KC.Composite=class{constructor(t,e,n){const i=n||KC.parseTrackName(e);this._targetGroup=t,this._bindings=t.subscribe_(e,i)}getValue(t,e){this.bind();const n=this._targetGroup.nCachedObjects_,i=this._bindings[n];void 0!==i&&i.getValue(t,e)}setValue(t,e){const n=this._bindings;for(let i=this._targetGroup.nCachedObjects_,r=n.length;i!==r;++i)n[i].setValue(t,e)}bind(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].bind()}unbind(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].unbind()}},KC.prototype.BindingType={Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},KC.prototype.Versioning={None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},KC.prototype.GetterByBindingType=[KC.prototype._getValue_direct,KC.prototype._getValue_array,KC.prototype._getValue_arrayElement,KC.prototype._getValue_toArray],KC.prototype.SetterByBindingTypeAndVersioning=[[KC.prototype._setValue_direct,KC.prototype._setValue_direct_setNeedsUpdate,KC.prototype._setValue_direct_setMatrixWorldNeedsUpdate],[KC.prototype._setValue_array,KC.prototype._setValue_array_setNeedsUpdate,KC.prototype._setValue_array_setMatrixWorldNeedsUpdate],[KC.prototype._setValue_arrayElement,KC.prototype._setValue_arrayElement_setNeedsUpdate,KC.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate],[KC.prototype._setValue_fromArray,KC.prototype._setValue_fromArray_setNeedsUpdate,KC.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]];class tN{constructor(t,e,n=null,i=e.blendMode){this._mixer=t,this._clip=e,this._localRoot=n,this.blendMode=i;const r=e.tracks,s=r.length,o=new Array(s),a={endingStart:jy,endingEnd:jy};for(let t=0;t!==s;++t){const e=r[t].createInterpolant(null);o[t]=e,e.settings=a}this._interpolantSettings=a,this._interpolants=o,this._propertyBindings=new Array(s),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(t){return this._startTime=t,this}setLoop(t,e){return this.loop=t,this.repetitions=e,this}setEffectiveWeight(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(t){return this._scheduleFading(t,0,1)}fadeOut(t){return this._scheduleFading(t,1,0)}crossFadeFrom(t,e,n){if(t.fadeOut(e),this.fadeIn(e),n){const n=this._clip.duration,i=t._clip.duration,r=i/n,s=n/i;t.warp(1,r,e),this.warp(s,1,e)}return this}crossFadeTo(t,e,n){return t.crossFadeFrom(this,e,n)}stopFading(){const t=this._weightInterpolant;return null!==t&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}setEffectiveTimeScale(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(t){return this.timeScale=this._clip.duration/t,this.stopWarping()}syncWith(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()}halt(t){return this.warp(this._effectiveTimeScale,0,t)}warp(t,e,n){const i=this._mixer,r=i.time,s=this.timeScale;let o=this._timeScaleInterpolant;null===o&&(o=i._lendControlInterpolant(),this._timeScaleInterpolant=o);const a=o.parameterPositions,l=o.sampleValues;return a[0]=r,a[1]=r+n,l[0]=t/s,l[1]=e/s,this}stopWarping(){const t=this._timeScaleInterpolant;return null!==t&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(t,e,n,i){if(!this.enabled)return void this._updateWeight(t);const r=this._startTime;if(null!==r){const i=(t-r)*n;if(i<0||0===n)return;this._startTime=null,e=n*i}e*=this._updateTimeScale(t);const s=this._updateTime(e),o=this._updateWeight(t);if(o>0){const t=this._interpolants,e=this._propertyBindings;switch(this.blendMode){case 2501:for(let n=0,i=t.length;n!==i;++n)t[n].evaluate(s),e[n].accumulateAdditive(o);break;case Xy:default:for(let n=0,r=t.length;n!==r;++n)t[n].evaluate(s),e[n].accumulate(i,o)}}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const n=this._weightInterpolant;if(null!==n){const i=n.evaluate(t)[0];e*=i,t>n.parameterPositions[1]&&(this.stopFading(),0===i&&(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,n=this.loop;let i=this.time+t,r=this._loopCount;const s=2202===n;if(0===t)return-1===r?i:s&&1==(1&r)?e-i:i;if(2200===n){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(i>=e)i=e;else{if(!(i<0)){this.time=i;break t}i=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:\\\\\\\"finished\\\\\\\",action:this,direction:t<0?-1:1})}}else{if(-1===r&&(t>=0?(r=0,this._setEndings(!0,0===this.repetitions,s)):this._setEndings(0===this.repetitions,!0,s)),i>=e||i<0){const n=Math.floor(i/e);i-=e*n,r+=Math.abs(n);const o=this.repetitions-r;if(o<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,i=t>0?e:0,this.time=i,this._mixer.dispatchEvent({type:\\\\\\\"finished\\\\\\\",action:this,direction:t>0?1:-1});else{if(1===o){const e=t<0;this._setEndings(e,!e,s)}else this._setEndings(!1,!1,s);this._loopCount=r,this.time=i,this._mixer.dispatchEvent({type:\\\\\\\"loop\\\\\\\",action:this,loopDelta:n})}}else this.time=i;if(s&&1==(1&r))return e-i}return i}_setEndings(t,e,n){const i=this._interpolantSettings;n?(i.endingStart=Wy,i.endingEnd=Wy):(i.endingStart=t?this.zeroSlopeAtStart?Wy:jy:qy,i.endingEnd=e?this.zeroSlopeAtEnd?Wy:jy:qy)}_scheduleFading(t,e,n){const i=this._mixer,r=i.time;let s=this._weightInterpolant;null===s&&(s=i._lendControlInterpolant(),this._weightInterpolant=s);const o=s.parameterPositions,a=s.sampleValues;return o[0]=r,a[0]=e,o[1]=r+t,a[1]=n,this}}(class extends nx{constructor(t){super(),this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(t,e){const n=t._localRoot||this._root,i=t._clip.tracks,r=i.length,s=t._propertyBindings,o=t._interpolants,a=n.uuid,l=this._bindingsByRootAndName;let c=l[a];void 0===c&&(c={},l[a]=c);for(let t=0;t!==r;++t){const r=i[t],l=r.name;let u=c[l];if(void 0!==u)s[t]=u;else{if(u=s[t],void 0!==u){null===u._cacheIndex&&(++u.referenceCount,this._addInactiveBinding(u,a,l));continue}const i=e&&e._propertyBindings[t].binding.parsedPath;u=new VC(KC.create(n,l,i),r.ValueTypeName,r.getValueSize()),++u.referenceCount,this._addInactiveBinding(u,a,l),s[t]=u}o[t].resultBuffer=u.buffer}}_activateAction(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){const e=(t._localRoot||this._root).uuid,n=t._clip.uuid,i=this._actionsByClip[n];this._bindAction(t,i&&i.knownActions[0]),this._addInactiveAction(t,n,e)}const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==n.useCount++&&(this._lendBinding(n),n.saveOriginalState())}this._lendAction(t)}}_deactivateAction(t){if(this._isActiveAction(t)){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.useCount&&(n.restoreOriginalState(),this._takeBackBinding(n))}this._takeBackAction(t)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}}_isActiveAction(t){const e=t._cacheIndex;return null!==e&&e<this._nActiveActions}_addInactiveAction(t,e,n){const i=this._actions,r=this._actionsByClip;let s=r[e];if(void 0===s)s={knownActions:[t],actionByRoot:{}},t._byClipCacheIndex=0,r[e]=s;else{const e=s.knownActions;t._byClipCacheIndex=e.length,e.push(t)}t._cacheIndex=i.length,i.push(t),s.actionByRoot[n]=t}_removeInactiveAction(t){const e=this._actions,n=e[e.length-1],i=t._cacheIndex;n._cacheIndex=i,e[i]=n,e.pop(),t._cacheIndex=null;const r=t._clip.uuid,s=this._actionsByClip,o=s[r],a=o.knownActions,l=a[a.length-1],c=t._byClipCacheIndex;l._byClipCacheIndex=c,a[c]=l,a.pop(),t._byClipCacheIndex=null;delete o.actionByRoot[(t._localRoot||this._root).uuid],0===a.length&&delete s[r],this._removeInactiveBindingsForAction(t)}_removeInactiveBindingsForAction(t){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.referenceCount&&this._removeInactiveBinding(n)}}_lendAction(t){const e=this._actions,n=t._cacheIndex,i=this._nActiveActions++,r=e[i];t._cacheIndex=i,e[i]=t,r._cacheIndex=n,e[n]=r}_takeBackAction(t){const e=this._actions,n=t._cacheIndex,i=--this._nActiveActions,r=e[i];t._cacheIndex=i,e[i]=t,r._cacheIndex=n,e[n]=r}_addInactiveBinding(t,e,n){const i=this._bindingsByRootAndName,r=this._bindings;let s=i[e];void 0===s&&(s={},i[e]=s),s[n]=t,t._cacheIndex=r.length,r.push(t)}_removeInactiveBinding(t){const e=this._bindings,n=t.binding,i=n.rootNode.uuid,r=n.path,s=this._bindingsByRootAndName,o=s[i],a=e[e.length-1],l=t._cacheIndex;a._cacheIndex=l,e[l]=a,e.pop(),delete o[r],0===Object.keys(o).length&&delete s[i]}_lendBinding(t){const e=this._bindings,n=t._cacheIndex,i=this._nActiveBindings++,r=e[i];t._cacheIndex=i,e[i]=t,r._cacheIndex=n,e[n]=r}_takeBackBinding(t){const e=this._bindings,n=t._cacheIndex,i=--this._nActiveBindings,r=e[i];t._cacheIndex=i,e[i]=t,r._cacheIndex=n,e[n]=r}_lendControlInterpolant(){const t=this._controlInterpolants,e=this._nActiveControlInterpolants++;let n=t[e];return void 0===n&&(n=new JS(new Float32Array(2),new Float32Array(2),1,this._controlInterpolantsResultBuffer),n.__cacheIndex=e,t[e]=n),n}_takeBackControlInterpolant(t){const e=this._controlInterpolants,n=t.__cacheIndex,i=--this._nActiveControlInterpolants,r=e[i];t.__cacheIndex=i,e[i]=t,r.__cacheIndex=n,e[n]=r}clipAction(t,e,n){const i=e||this._root,r=i.uuid;let s=\\\\\\\"string\\\\\\\"==typeof t?oC.findByName(i,t):t;const o=null!==s?s.uuid:t,a=this._actionsByClip[o];let l=null;if(void 0===n&&(n=null!==s?s.blendMode:Xy),void 0!==a){const t=a.actionByRoot[r];if(void 0!==t&&t.blendMode===n)return t;l=a.knownActions[0],null===s&&(s=l._clip)}if(null===s)return null;const c=new tN(this,s,e,n);return this._bindAction(c,l),this._addInactiveAction(c,o,r),c}existingAction(t,e){const n=e||this._root,i=n.uuid,r=\\\\\\\"string\\\\\\\"==typeof t?oC.findByName(n,t):t,s=r?r.uuid:t,o=this._actionsByClip[s];return void 0!==o&&o.actionByRoot[i]||null}stopAllAction(){const t=this._actions;for(let e=this._nActiveActions-1;e>=0;--e)t[e].stop();return this}update(t){t*=this.timeScale;const e=this._actions,n=this._nActiveActions,i=this.time+=t,r=Math.sign(t),s=this._accuIndex^=1;for(let o=0;o!==n;++o){e[o]._update(i,t,r,s)}const o=this._bindings,a=this._nActiveBindings;for(let t=0;t!==a;++t)o[t].apply(s);return this}setTime(t){this.time=0;for(let t=0;t<this._actions.length;t++)this._actions[t].time=0;return this.update(t)}getRoot(){return this._root}uncacheClip(t){const e=this._actions,n=t.uuid,i=this._actionsByClip,r=i[n];if(void 0!==r){const t=r.knownActions;for(let n=0,i=t.length;n!==i;++n){const i=t[n];this._deactivateAction(i);const r=i._cacheIndex,s=e[e.length-1];i._cacheIndex=null,i._byClipCacheIndex=null,s._cacheIndex=r,e[r]=s,e.pop(),this._removeInactiveBindingsForAction(i)}delete i[n]}}uncacheRoot(t){const e=t.uuid,n=this._actionsByClip;for(const t in n){const i=n[t].actionByRoot[e];void 0!==i&&(this._deactivateAction(i),this._removeInactiveAction(i))}const i=this._bindingsByRootAndName[e];if(void 0!==i)for(const t in i){const e=i[t];e.restoreOriginalState(),this._removeInactiveBinding(e)}}uncacheAction(t,e){const n=this.existingAction(t,e);null!==n&&(this._deactivateAction(n),this._removeInactiveAction(n))}}).prototype._controlInterpolantsResultBuffer=new Float32Array(1);class eN{constructor(t){\\\\\\\"string\\\\\\\"==typeof t&&(console.warn(\\\\\\\"THREE.Uniform: Type parameter is no longer needed.\\\\\\\"),t=arguments[1]),this.value=t}clone(){return new eN(void 0===this.value.clone?this.value:this.value.clone())}}(class extends GE{constructor(t,e,n=1){super(t,e),this.meshPerAttribute=n}copy(t){return super.copy(t),this.meshPerAttribute=t.meshPerAttribute,this}clone(t){const e=super.clone(t);return e.meshPerAttribute=this.meshPerAttribute,e}toJSON(t){const e=super.toJSON(t);return e.isInstancedInterleavedBuffer=!0,e.meshPerAttribute=this.meshPerAttribute,e}}).prototype.isInstancedInterleavedBuffer=!0;const nN=new fx;class iN{constructor(t=new fx(1/0,1/0),e=new fx(-1/0,-1/0)){this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;e<n;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){const n=nN.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(n),this.max.copy(t).add(n),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.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(t){return this.isEmpty()?t.set(0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}containsPoint(t){return!(t.x<this.min.x||t.x>this.max.x||t.y<this.min.y||t.y>this.max.y)}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return!(t.max.x<this.min.x||t.min.x>this.max.x||t.max.y<this.min.y||t.min.y>this.max.y)}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return nN.copy(t).clamp(this.min,this.max).sub(t).length()}intersect(t){return this.min.max(t.min),this.max.min(t.max),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}iN.prototype.isBox2=!0;const rN=new Nx,sN=new Nx;class oN{constructor(t=new Nx,e=new Nx){this.start=t,this.end=e}set(t,e){return this.start.copy(t),this.end.copy(e),this}copy(t){return this.start.copy(t.start),this.end.copy(t.end),this}getCenter(t){return t.addVectors(this.start,this.end).multiplyScalar(.5)}delta(t){return t.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(t,e){return this.delta(e).multiplyScalar(t).add(this.start)}closestPointToPointParameter(t,e){rN.subVectors(t,this.start),sN.subVectors(this.end,this.start);const n=sN.dot(sN);let i=sN.dot(rN)/n;return e&&(i=cx(i,0,1)),i}closestPointToPoint(t,e,n){const i=this.closestPointToPointParameter(t,e);return this.delta(n).multiplyScalar(i).add(this.start)}applyMatrix4(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this}equals(t){return t.start.equals(this.start)&&t.end.equals(this.end)}clone(){return(new this.constructor).copy(this)}}(class extends Ob{constructor(t){super(),this.material=t,this.render=function(){},this.hasPositions=!1,this.hasNormals=!1,this.hasColors=!1,this.hasUvs=!1,this.positionArray=null,this.normalArray=null,this.colorArray=null,this.uvArray=null,this.count=0}}).prototype.isImmediateRenderObject=!0;const aN=new Nx,lN=new ob,cN=new ob;function uN(t){const e=[];t&&t.isBone&&e.push(t);for(let n=0;n<t.children.length;n++)e.push.apply(e,uN(t.children[n]));return e}const hN=new Float32Array(1);new Int32Array(hN.buffer);zM.create=function(t,e){return console.log(\\\\\\\"THREE.Curve.create() has been deprecated\\\\\\\"),t.prototype=Object.create(zM.prototype),t.prototype.constructor=t,t.prototype.getPoint=e,t},sS.prototype.fromPoints=function(t){return console.warn(\\\\\\\"THREE.Path: .fromPoints() has been renamed to .setFromPoints().\\\\\\\"),this.setFromPoints(t)},class extends NM{constructor(t=10,e=10,n=4473924,i=8947848){n=new Zb(n),i=new Zb(i);const r=e/2,s=t/e,o=t/2,a=[],l=[];for(let t=0,c=0,u=-o;t<=e;t++,u+=s){a.push(-o,0,u,o,0,u),a.push(u,0,-o,u,0,o);const e=t===r?n:i;e.toArray(l,c),c+=3,e.toArray(l,c),c+=3,e.toArray(l,c),c+=3,e.toArray(l,c),c+=3}const c=new dw;c.setAttribute(\\\\\\\"position\\\\\\\",new rw(a,3)),c.setAttribute(\\\\\\\"color\\\\\\\",new rw(l,3));super(c,new xM({vertexColors:!0,toneMapped:!1})),this.type=\\\\\\\"GridHelper\\\\\\\"}}.prototype.setColors=function(){console.error(\\\\\\\"THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.\\\\\\\")},class extends NM{constructor(t){const e=uN(t),n=new dw,i=[],r=[],s=new Zb(0,0,1),o=new Zb(0,1,0);for(let t=0;t<e.length;t++){const n=e[t];n.parent&&n.parent.isBone&&(i.push(0,0,0),i.push(0,0,0),r.push(s.r,s.g,s.b),r.push(o.r,o.g,o.b))}n.setAttribute(\\\\\\\"position\\\\\\\",new rw(i,3)),n.setAttribute(\\\\\\\"color\\\\\\\",new rw(r,3));super(n,new xM({vertexColors:!0,depthTest:!1,depthWrite:!1,toneMapped:!1,transparent:!0})),this.type=\\\\\\\"SkeletonHelper\\\\\\\",this.isSkeletonHelper=!0,this.root=t,this.bones=e,this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1}updateMatrixWorld(t){const e=this.bones,n=this.geometry,i=n.getAttribute(\\\\\\\"position\\\\\\\");cN.copy(this.root.matrixWorld).invert();for(let t=0,n=0;t<e.length;t++){const r=e[t];r.parent&&r.parent.isBone&&(lN.multiplyMatrices(cN,r.matrixWorld),aN.setFromMatrixPosition(lN),i.setXYZ(n,aN.x,aN.y,aN.z),lN.multiplyMatrices(cN,r.parent.matrixWorld),aN.setFromMatrixPosition(lN),i.setXYZ(n+1,aN.x,aN.y,aN.z),n+=2)}n.getAttribute(\\\\\\\"position\\\\\\\").needsUpdate=!0,super.updateMatrixWorld(t)}}.prototype.update=function(){console.error(\\\\\\\"THREE.SkeletonHelper: update() no longer needs to be called.\\\\\\\")},hC.prototype.extractUrlBase=function(t){return console.warn(\\\\\\\"THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.\\\\\\\"),DC.extractUrlBase(t)},hC.Handlers={add:function(){console.error(\\\\\\\"THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.\\\\\\\")},get:function(){console.error(\\\\\\\"THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.\\\\\\\")}},iN.prototype.center=function(t){return console.warn(\\\\\\\"THREE.Box2: .center() has been renamed to .getCenter().\\\\\\\"),this.getCenter(t)},iN.prototype.empty=function(){return console.warn(\\\\\\\"THREE.Box2: .empty() has been renamed to .isEmpty().\\\\\\\"),this.isEmpty()},iN.prototype.isIntersectionBox=function(t){return console.warn(\\\\\\\"THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().\\\\\\\"),this.intersectsBox(t)},iN.prototype.size=function(t){return console.warn(\\\\\\\"THREE.Box2: .size() has been renamed to .getSize().\\\\\\\"),this.getSize(t)},Rx.prototype.center=function(t){return console.warn(\\\\\\\"THREE.Box3: .center() has been renamed to .getCenter().\\\\\\\"),this.getCenter(t)},Rx.prototype.empty=function(){return console.warn(\\\\\\\"THREE.Box3: .empty() has been renamed to .isEmpty().\\\\\\\"),this.isEmpty()},Rx.prototype.isIntersectionBox=function(t){return console.warn(\\\\\\\"THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().\\\\\\\"),this.intersectsBox(t)},Rx.prototype.isIntersectionSphere=function(t){return console.warn(\\\\\\\"THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().\\\\\\\"),this.intersectsSphere(t)},Rx.prototype.size=function(t){return console.warn(\\\\\\\"THREE.Box3: .size() has been renamed to .getSize().\\\\\\\"),this.getSize(t)},Zx.prototype.empty=function(){return console.warn(\\\\\\\"THREE.Sphere: .empty() has been renamed to .isEmpty().\\\\\\\"),this.isEmpty()},$w.prototype.setFromMatrix=function(t){return console.warn(\\\\\\\"THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().\\\\\\\"),this.setFromProjectionMatrix(t)},oN.prototype.center=function(t){return console.warn(\\\\\\\"THREE.Line3: .center() has been renamed to .getCenter().\\\\\\\"),this.getCenter(t)},gx.prototype.flattenToArrayOffset=function(t,e){return console.warn(\\\\\\\"THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\\\\\\\"),this.toArray(t,e)},gx.prototype.multiplyVector3=function(t){return console.warn(\\\\\\\"THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.\\\\\\\"),t.applyMatrix3(this)},gx.prototype.multiplyVector3Array=function(){console.error(\\\\\\\"THREE.Matrix3: .multiplyVector3Array() has been removed.\\\\\\\")},gx.prototype.applyToBufferAttribute=function(t){return console.warn(\\\\\\\"THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.\\\\\\\"),t.applyMatrix3(this)},gx.prototype.applyToVector3Array=function(){console.error(\\\\\\\"THREE.Matrix3: .applyToVector3Array() has been removed.\\\\\\\")},gx.prototype.getInverse=function(t){return console.warn(\\\\\\\"THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.\\\\\\\"),this.copy(t).invert()},ob.prototype.extractPosition=function(t){return console.warn(\\\\\\\"THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().\\\\\\\"),this.copyPosition(t)},ob.prototype.flattenToArrayOffset=function(t,e){return console.warn(\\\\\\\"THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\\\\\\\"),this.toArray(t,e)},ob.prototype.getPosition=function(){return console.warn(\\\\\\\"THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.\\\\\\\"),(new Nx).setFromMatrixColumn(this,3)},ob.prototype.setRotationFromQuaternion=function(t){return console.warn(\\\\\\\"THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().\\\\\\\"),this.makeRotationFromQuaternion(t)},ob.prototype.multiplyToArray=function(){console.warn(\\\\\\\"THREE.Matrix4: .multiplyToArray() has been removed.\\\\\\\")},ob.prototype.multiplyVector3=function(t){return console.warn(\\\\\\\"THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.\\\\\\\"),t.applyMatrix4(this)},ob.prototype.multiplyVector4=function(t){return console.warn(\\\\\\\"THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.\\\\\\\"),t.applyMatrix4(this)},ob.prototype.multiplyVector3Array=function(){console.error(\\\\\\\"THREE.Matrix4: .multiplyVector3Array() has been removed.\\\\\\\")},ob.prototype.rotateAxis=function(t){console.warn(\\\\\\\"THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.\\\\\\\"),t.transformDirection(this)},ob.prototype.crossVector=function(t){return console.warn(\\\\\\\"THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.\\\\\\\"),t.applyMatrix4(this)},ob.prototype.translate=function(){console.error(\\\\\\\"THREE.Matrix4: .translate() has been removed.\\\\\\\")},ob.prototype.rotateX=function(){console.error(\\\\\\\"THREE.Matrix4: .rotateX() has been removed.\\\\\\\")},ob.prototype.rotateY=function(){console.error(\\\\\\\"THREE.Matrix4: .rotateY() has been removed.\\\\\\\")},ob.prototype.rotateZ=function(){console.error(\\\\\\\"THREE.Matrix4: .rotateZ() has been removed.\\\\\\\")},ob.prototype.rotateByAxis=function(){console.error(\\\\\\\"THREE.Matrix4: .rotateByAxis() has been removed.\\\\\\\")},ob.prototype.applyToBufferAttribute=function(t){return console.warn(\\\\\\\"THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.\\\\\\\"),t.applyMatrix4(this)},ob.prototype.applyToVector3Array=function(){console.error(\\\\\\\"THREE.Matrix4: .applyToVector3Array() has been removed.\\\\\\\")},ob.prototype.makeFrustum=function(t,e,n,i,r,s){return console.warn(\\\\\\\"THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.\\\\\\\"),this.makePerspective(t,e,i,n,r,s)},ob.prototype.getInverse=function(t){return console.warn(\\\\\\\"THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.\\\\\\\"),this.copy(t).invert()},qw.prototype.isIntersectionLine=function(t){return console.warn(\\\\\\\"THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().\\\\\\\"),this.intersectsLine(t)},Cx.prototype.multiplyVector3=function(t){return console.warn(\\\\\\\"THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.\\\\\\\"),t.applyQuaternion(this)},Cx.prototype.inverse=function(){return console.warn(\\\\\\\"THREE.Quaternion: .inverse() has been renamed to invert().\\\\\\\"),this.invert()},sb.prototype.isIntersectionBox=function(t){return console.warn(\\\\\\\"THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().\\\\\\\"),this.intersectsBox(t)},sb.prototype.isIntersectionPlane=function(t){return console.warn(\\\\\\\"THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().\\\\\\\"),this.intersectsPlane(t)},sb.prototype.isIntersectionSphere=function(t){return console.warn(\\\\\\\"THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().\\\\\\\"),this.intersectsSphere(t)},Vb.prototype.area=function(){return console.warn(\\\\\\\"THREE.Triangle: .area() has been renamed to .getArea().\\\\\\\"),this.getArea()},Vb.prototype.barycoordFromPoint=function(t,e){return console.warn(\\\\\\\"THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().\\\\\\\"),this.getBarycoord(t,e)},Vb.prototype.midpoint=function(t){return console.warn(\\\\\\\"THREE.Triangle: .midpoint() has been renamed to .getMidpoint().\\\\\\\"),this.getMidpoint(t)},Vb.prototypenormal=function(t){return console.warn(\\\\\\\"THREE.Triangle: .normal() has been renamed to .getNormal().\\\\\\\"),this.getNormal(t)},Vb.prototype.plane=function(t){return console.warn(\\\\\\\"THREE.Triangle: .plane() has been renamed to .getPlane().\\\\\\\"),this.getPlane(t)},Vb.barycoordFromPoint=function(t,e,n,i,r){return console.warn(\\\\\\\"THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().\\\\\\\"),Vb.getBarycoord(t,e,n,i,r)},Vb.normal=function(t,e,n,i){return console.warn(\\\\\\\"THREE.Triangle: .normal() has been renamed to .getNormal().\\\\\\\"),Vb.getNormal(t,e,n,i)},oS.prototype.extractAllPoints=function(t){return console.warn(\\\\\\\"THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.\\\\\\\"),this.extractPoints(t)},oS.prototype.extrude=function(t){return console.warn(\\\\\\\"THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.\\\\\\\"),new FS(this,t)},oS.prototype.makeGeometry=function(t){return console.warn(\\\\\\\"THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.\\\\\\\"),new kS(this,t)},fx.prototype.fromAttribute=function(t,e,n){return console.warn(\\\\\\\"THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().\\\\\\\"),this.fromBufferAttribute(t,e,n)},fx.prototype.distanceToManhattan=function(t){return console.warn(\\\\\\\"THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().\\\\\\\"),this.manhattanDistanceTo(t)},fx.prototype.lengthManhattan=function(){return console.warn(\\\\\\\"THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().\\\\\\\"),this.manhattanLength()},Nx.prototype.setEulerFromRotationMatrix=function(){console.error(\\\\\\\"THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.\\\\\\\")},Nx.prototype.setEulerFromQuaternion=function(){console.error(\\\\\\\"THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.\\\\\\\")},Nx.prototype.getPositionFromMatrix=function(t){return console.warn(\\\\\\\"THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().\\\\\\\"),this.setFromMatrixPosition(t)},Nx.prototype.getScaleFromMatrix=function(t){return console.warn(\\\\\\\"THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().\\\\\\\"),this.setFromMatrixScale(t)},Nx.prototype.getColumnFromMatrix=function(t,e){return console.warn(\\\\\\\"THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().\\\\\\\"),this.setFromMatrixColumn(e,t)},Nx.prototype.applyProjection=function(t){return console.warn(\\\\\\\"THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.\\\\\\\"),this.applyMatrix4(t)},Nx.prototype.fromAttribute=function(t,e,n){return console.warn(\\\\\\\"THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().\\\\\\\"),this.fromBufferAttribute(t,e,n)},Nx.prototype.distanceToManhattan=function(t){return console.warn(\\\\\\\"THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().\\\\\\\"),this.manhattanDistanceTo(t)},Nx.prototype.lengthManhattan=function(){return console.warn(\\\\\\\"THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().\\\\\\\"),this.manhattanLength()},Ex.prototype.fromAttribute=function(t,e,n){return console.warn(\\\\\\\"THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().\\\\\\\"),this.fromBufferAttribute(t,e,n)},Ex.prototype.lengthManhattan=function(){return console.warn(\\\\\\\"THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().\\\\\\\"),this.manhattanLength()},Ob.prototype.getChildByName=function(t){return console.warn(\\\\\\\"THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().\\\\\\\"),this.getObjectByName(t)},Ob.prototype.renderDepth=function(){console.warn(\\\\\\\"THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.\\\\\\\")},Ob.prototype.translate=function(t,e){return console.warn(\\\\\\\"THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.\\\\\\\"),this.translateOnAxis(e,t)},Ob.prototype.getWorldRotation=function(){console.error(\\\\\\\"THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.\\\\\\\")},Ob.prototype.applyMatrix=function(t){return console.warn(\\\\\\\"THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().\\\\\\\"),this.applyMatrix4(t)},Object.defineProperties(Ob.prototype,{eulerOrder:{get:function(){return console.warn(\\\\\\\"THREE.Object3D: .eulerOrder is now .rotation.order.\\\\\\\"),this.rotation.order},set:function(t){console.warn(\\\\\\\"THREE.Object3D: .eulerOrder is now .rotation.order.\\\\\\\"),this.rotation.order=t}},useQuaternion:{get:function(){console.warn(\\\\\\\"THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.\\\\\\\")},set:function(){console.warn(\\\\\\\"THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.\\\\\\\")}}}),Lw.prototype.setDrawMode=function(){console.error(\\\\\\\"THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.\\\\\\\")},Object.defineProperties(Lw.prototype,{drawMode:{get:function(){return console.error(\\\\\\\"THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.\\\\\\\"),0},set:function(){console.error(\\\\\\\"THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.\\\\\\\")}}}),hM.prototype.initBones=function(){console.error(\\\\\\\"THREE.SkinnedMesh: initBones() has been removed.\\\\\\\")},Bw.prototype.setLens=function(t,e){console.warn(\\\\\\\"THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup.\\\\\\\"),void 0!==e&&(this.filmGauge=e),this.setFocalLength(t)},Object.defineProperties(gC.prototype,{onlyShadow:{set:function(){console.warn(\\\\\\\"THREE.Light: .onlyShadow has been removed.\\\\\\\")}},shadowCameraFov:{set:function(t){console.warn(\\\\\\\"THREE.Light: .shadowCameraFov is now .shadow.camera.fov.\\\\\\\"),this.shadow.camera.fov=t}},shadowCameraLeft:{set:function(t){console.warn(\\\\\\\"THREE.Light: .shadowCameraLeft is now .shadow.camera.left.\\\\\\\"),this.shadow.camera.left=t}},shadowCameraRight:{set:function(t){console.warn(\\\\\\\"THREE.Light: .shadowCameraRight is now .shadow.camera.right.\\\\\\\"),this.shadow.camera.right=t}},shadowCameraTop:{set:function(t){console.warn(\\\\\\\"THREE.Light: .shadowCameraTop is now .shadow.camera.top.\\\\\\\"),this.shadow.camera.top=t}},shadowCameraBottom:{set:function(t){console.warn(\\\\\\\"THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.\\\\\\\"),this.shadow.camera.bottom=t}},shadowCameraNear:{set:function(t){console.warn(\\\\\\\"THREE.Light: .shadowCameraNear is now .shadow.camera.near.\\\\\\\"),this.shadow.camera.near=t}},shadowCameraFar:{set:function(t){console.warn(\\\\\\\"THREE.Light: .shadowCameraFar is now .shadow.camera.far.\\\\\\\"),this.shadow.camera.far=t}},shadowCameraVisible:{set:function(){console.warn(\\\\\\\"THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.\\\\\\\")}},shadowBias:{set:function(t){console.warn(\\\\\\\"THREE.Light: .shadowBias is now .shadow.bias.\\\\\\\"),this.shadow.bias=t}},shadowDarkness:{set:function(){console.warn(\\\\\\\"THREE.Light: .shadowDarkness has been removed.\\\\\\\")}},shadowMapWidth:{set:function(t){console.warn(\\\\\\\"THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.\\\\\\\"),this.shadow.mapSize.width=t}},shadowMapHeight:{set:function(t){console.warn(\\\\\\\"THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.\\\\\\\"),this.shadow.mapSize.height=t}}}),Object.defineProperties(ew.prototype,{length:{get:function(){return console.warn(\\\\\\\"THREE.BufferAttribute: .length has been deprecated. Use .count instead.\\\\\\\"),this.array.length}},dynamic:{get:function(){return console.warn(\\\\\\\"THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.\\\\\\\"),this.usage===tx},set:function(){console.warn(\\\\\\\"THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.\\\\\\\"),this.setUsage(tx)}}}),ew.prototype.setDynamic=function(t){return console.warn(\\\\\\\"THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.\\\\\\\"),this.setUsage(!0===t?tx:Ky),this},ew.prototype.copyIndicesArray=function(){console.error(\\\\\\\"THREE.BufferAttribute: .copyIndicesArray() has been removed.\\\\\\\")},ew.prototype.setArray=function(){console.error(\\\\\\\"THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers\\\\\\\")},dw.prototype.addIndex=function(t){console.warn(\\\\\\\"THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().\\\\\\\"),this.setIndex(t)},dw.prototype.addAttribute=function(t,e){return console.warn(\\\\\\\"THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().\\\\\\\"),e&&e.isBufferAttribute||e&&e.isInterleavedBufferAttribute?\\\\\\\"index\\\\\\\"===t?(console.warn(\\\\\\\"THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.\\\\\\\"),this.setIndex(e),this):this.setAttribute(t,e):(console.warn(\\\\\\\"THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).\\\\\\\"),this.setAttribute(t,new ew(arguments[1],arguments[2])))},dw.prototype.addDrawCall=function(t,e,n){void 0!==n&&console.warn(\\\\\\\"THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.\\\\\\\"),console.warn(\\\\\\\"THREE.BufferGeometry: .addDrawCall() is now .addGroup().\\\\\\\"),this.addGroup(t,e)},dw.prototype.clearDrawCalls=function(){console.warn(\\\\\\\"THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().\\\\\\\"),this.clearGroups()},dw.prototype.computeOffsets=function(){console.warn(\\\\\\\"THREE.BufferGeometry: .computeOffsets() has been removed.\\\\\\\")},dw.prototype.removeAttribute=function(t){return console.warn(\\\\\\\"THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().\\\\\\\"),this.deleteAttribute(t)},dw.prototype.applyMatrix=function(t){return console.warn(\\\\\\\"THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().\\\\\\\"),this.applyMatrix4(t)},Object.defineProperties(dw.prototype,{drawcalls:{get:function(){return console.error(\\\\\\\"THREE.BufferGeometry: .drawcalls has been renamed to .groups.\\\\\\\"),this.groups}},offsets:{get:function(){return console.warn(\\\\\\\"THREE.BufferGeometry: .offsets has been renamed to .groups.\\\\\\\"),this.groups}}}),GE.prototype.setDynamic=function(t){return console.warn(\\\\\\\"THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.\\\\\\\"),this.setUsage(!0===t?tx:Ky),this},GE.prototype.setArray=function(){console.error(\\\\\\\"THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers\\\\\\\")},FS.prototype.getArrays=function(){console.error(\\\\\\\"THREE.ExtrudeGeometry: .getArrays() has been removed.\\\\\\\")},FS.prototype.addShapeList=function(){console.error(\\\\\\\"THREE.ExtrudeGeometry: .addShapeList() has been removed.\\\\\\\")},FS.prototype.addShape=function(){console.error(\\\\\\\"THREE.ExtrudeGeometry: .addShape() has been removed.\\\\\\\")},UE.prototype.dispose=function(){console.error(\\\\\\\"THREE.Scene: .dispose() has been removed.\\\\\\\")},eN.prototype.onUpdate=function(){return console.warn(\\\\\\\"THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.\\\\\\\"),this},Object.defineProperties(jb.prototype,{wrapAround:{get:function(){console.warn(\\\\\\\"THREE.Material: .wrapAround has been removed.\\\\\\\")},set:function(){console.warn(\\\\\\\"THREE.Material: .wrapAround has been removed.\\\\\\\")}},overdraw:{get:function(){console.warn(\\\\\\\"THREE.Material: .overdraw has been removed.\\\\\\\")},set:function(){console.warn(\\\\\\\"THREE.Material: .overdraw has been removed.\\\\\\\")}},wrapRGB:{get:function(){return console.warn(\\\\\\\"THREE.Material: .wrapRGB has been removed.\\\\\\\"),new Zb}},shading:{get:function(){console.error(\\\\\\\"THREE.\\\\\\\"+this.type+\\\\\\\": .shading has been removed. Use the boolean .flatShading instead.\\\\\\\")},set:function(t){console.warn(\\\\\\\"THREE.\\\\\\\"+this.type+\\\\\\\": .shading has been removed. Use the boolean .flatShading instead.\\\\\\\"),this.flatShading=1===t}},stencilMask:{get:function(){return console.warn(\\\\\\\"THREE.\\\\\\\"+this.type+\\\\\\\": .stencilMask has been removed. Use .stencilFuncMask instead.\\\\\\\"),this.stencilFuncMask},set:function(t){console.warn(\\\\\\\"THREE.\\\\\\\"+this.type+\\\\\\\": .stencilMask has been removed. Use .stencilFuncMask instead.\\\\\\\"),this.stencilFuncMask=t}},vertexTangents:{get:function(){console.warn(\\\\\\\"THREE.\\\\\\\"+this.type+\\\\\\\": .vertexTangents has been removed.\\\\\\\")},set:function(){console.warn(\\\\\\\"THREE.\\\\\\\"+this.type+\\\\\\\": .vertexTangents has been removed.\\\\\\\")}}}),Object.defineProperties(Dw.prototype,{derivatives:{get:function(){return console.warn(\\\\\\\"THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.\\\\\\\"),this.extensions.derivatives},set:function(t){console.warn(\\\\\\\"THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.\\\\\\\"),this.extensions.derivatives=t}}}),kE.prototype.clearTarget=function(t,e,n,i){console.warn(\\\\\\\"THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.\\\\\\\"),this.setRenderTarget(t),this.clear(e,n,i)},kE.prototype.animate=function(t){console.warn(\\\\\\\"THREE.WebGLRenderer: .animate() is now .setAnimationLoop().\\\\\\\"),this.setAnimationLoop(t)},kE.prototype.getCurrentRenderTarget=function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().\\\\\\\"),this.getRenderTarget()},kE.prototype.getMaxAnisotropy=function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().\\\\\\\"),this.capabilities.getMaxAnisotropy()},kE.prototype.getPrecision=function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.\\\\\\\"),this.capabilities.precision},kE.prototype.resetGLState=function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .resetGLState() is now .state.reset().\\\\\\\"),this.state.reset()},kE.prototype.supportsFloatTextures=function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' ).\\\\\\\"),this.extensions.get(\\\\\\\"OES_texture_float\\\\\\\")},kE.prototype.supportsHalfFloatTextures=function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' ).\\\\\\\"),this.extensions.get(\\\\\\\"OES_texture_half_float\\\\\\\")},kE.prototype.supportsStandardDerivatives=function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' ).\\\\\\\"),this.extensions.get(\\\\\\\"OES_standard_derivatives\\\\\\\")},kE.prototype.supportsCompressedTextureS3TC=function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' ).\\\\\\\"),this.extensions.get(\\\\\\\"WEBGL_compressed_texture_s3tc\\\\\\\")},kE.prototype.supportsCompressedTexturePVRTC=function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' ).\\\\\\\"),this.extensions.get(\\\\\\\"WEBGL_compressed_texture_pvrtc\\\\\\\")},kE.prototype.supportsBlendMinMax=function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' ).\\\\\\\"),this.extensions.get(\\\\\\\"EXT_blend_minmax\\\\\\\")},kE.prototype.supportsVertexTextures=function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.\\\\\\\"),this.capabilities.vertexTextures},kE.prototype.supportsInstancedArrays=function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' ).\\\\\\\"),this.extensions.get(\\\\\\\"ANGLE_instanced_arrays\\\\\\\")},kE.prototype.enableScissorTest=function(t){console.warn(\\\\\\\"THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().\\\\\\\"),this.setScissorTest(t)},kE.prototype.initMaterial=function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .initMaterial() has been removed.\\\\\\\")},kE.prototype.addPrePlugin=function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .addPrePlugin() has been removed.\\\\\\\")},kE.prototype.addPostPlugin=function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .addPostPlugin() has been removed.\\\\\\\")},kE.prototype.updateShadowMap=function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .updateShadowMap() has been removed.\\\\\\\")},kE.prototype.setFaceCulling=function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .setFaceCulling() has been removed.\\\\\\\")},kE.prototype.allocTextureUnit=function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .allocTextureUnit() has been removed.\\\\\\\")},kE.prototype.setTexture=function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .setTexture() has been removed.\\\\\\\")},kE.prototype.setTexture2D=function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .setTexture2D() has been removed.\\\\\\\")},kE.prototype.setTextureCube=function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .setTextureCube() has been removed.\\\\\\\")},kE.prototype.getActiveMipMapLevel=function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().\\\\\\\"),this.getActiveMipmapLevel()},Object.defineProperties(kE.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(t){console.warn(\\\\\\\"THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.\\\\\\\"),this.shadowMap.enabled=t}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(t){console.warn(\\\\\\\"THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.\\\\\\\"),this.shadowMap.type=t}},shadowMapCullFace:{get:function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.\\\\\\\")},set:function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.\\\\\\\")}},context:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.\\\\\\\"),this.getContext()}},vr:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .vr has been renamed to .xr\\\\\\\"),this.xr}},gammaInput:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.\\\\\\\"),!1},set:function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.\\\\\\\")}},gammaOutput:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.\\\\\\\"),!1},set:function(t){console.warn(\\\\\\\"THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.\\\\\\\"),this.outputEncoding=!0===t?$y:Yy}},toneMappingWhitePoint:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.\\\\\\\"),1},set:function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.\\\\\\\")}}}),Object.defineProperties(SE.prototype,{cullFace:{get:function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.\\\\\\\")},set:function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.\\\\\\\")}},renderReverseSided:{get:function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.\\\\\\\")},set:function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.\\\\\\\")}},renderSingleSided:{get:function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.\\\\\\\")},set:function(){console.warn(\\\\\\\"THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.\\\\\\\")}}}),Object.defineProperties(Mx.prototype,{wrapS:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.\\\\\\\"),this.texture.wrapS},set:function(t){console.warn(\\\\\\\"THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.\\\\\\\"),this.texture.wrapS=t}},wrapT:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.\\\\\\\"),this.texture.wrapT},set:function(t){console.warn(\\\\\\\"THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.\\\\\\\"),this.texture.wrapT=t}},magFilter:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.\\\\\\\"),this.texture.magFilter},set:function(t){console.warn(\\\\\\\"THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.\\\\\\\"),this.texture.magFilter=t}},minFilter:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.\\\\\\\"),this.texture.minFilter},set:function(t){console.warn(\\\\\\\"THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.\\\\\\\"),this.texture.minFilter=t}},anisotropy:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.\\\\\\\"),this.texture.anisotropy},set:function(t){console.warn(\\\\\\\"THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.\\\\\\\"),this.texture.anisotropy=t}},offset:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderTarget: .offset is now .texture.offset.\\\\\\\"),this.texture.offset},set:function(t){console.warn(\\\\\\\"THREE.WebGLRenderTarget: .offset is now .texture.offset.\\\\\\\"),this.texture.offset=t}},repeat:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderTarget: .repeat is now .texture.repeat.\\\\\\\"),this.texture.repeat},set:function(t){console.warn(\\\\\\\"THREE.WebGLRenderTarget: .repeat is now .texture.repeat.\\\\\\\"),this.texture.repeat=t}},format:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderTarget: .format is now .texture.format.\\\\\\\"),this.texture.format},set:function(t){console.warn(\\\\\\\"THREE.WebGLRenderTarget: .format is now .texture.format.\\\\\\\"),this.texture.format=t}},type:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderTarget: .type is now .texture.type.\\\\\\\"),this.texture.type},set:function(t){console.warn(\\\\\\\"THREE.WebGLRenderTarget: .type is now .texture.type.\\\\\\\"),this.texture.type=t}},generateMipmaps:{get:function(){return console.warn(\\\\\\\"THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.\\\\\\\"),this.texture.generateMipmaps},set:function(t){console.warn(\\\\\\\"THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.\\\\\\\"),this.texture.generateMipmaps=t}}}),GC.prototype.load=function(t){console.warn(\\\\\\\"THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.\\\\\\\");const e=this;return(new UC).load(t,(function(t){e.setBuffer(t)})),this},Uw.prototype.updateCubeMap=function(t,e){return console.warn(\\\\\\\"THREE.CubeCamera: .updateCubeMap() is now .update().\\\\\\\"),this.update(t,e)},Uw.prototype.clear=function(t,e,n,i){return console.warn(\\\\\\\"THREE.CubeCamera: .clear() is now .renderTarget.clear().\\\\\\\"),this.renderTarget.clear(t,e,n,i)},bx.crossOrigin=void 0,bx.loadTexture=function(t,e,n,i){console.warn(\\\\\\\"THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.\\\\\\\");const r=new fC;r.setCrossOrigin(this.crossOrigin);const s=r.load(t,n,void 0,i);return e&&(s.mapping=e),s},bx.loadTextureCube=function(t,e,n,i){console.warn(\\\\\\\"THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.\\\\\\\");const r=new mC;r.setCrossOrigin(this.crossOrigin);const s=r.load(t,n,void 0,i);return e&&(s.mapping=e),s},bx.loadCompressedTexture=function(){console.error(\\\\\\\"THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.\\\\\\\")},bx.loadCompressedTextureCube=function(){console.error(\\\\\\\"THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.\\\\\\\")};\\\\\\\"undefined\\\\\\\"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\\\\\\\"register\\\\\\\",{detail:{revision:\\\\\\\"133\\\\\\\"}})),\\\\\\\"undefined\\\\\\\"!=typeof window&&(window.__THREE__?console.warn(\\\\\\\"WARNING: Multiple instances of Three.js being imported.\\\\\\\"):window.__THREE__=\\\\\\\"133\\\\\\\");const dN=new Nx,pN=new Nx,_N=new Nx;class mN{constructor(t=new Nx(0,0,0),e=new Nx(0,1,0),n=1){this.start=t,this.end=e,this.radius=n}clone(){return new mN(this.start.clone(),this.end.clone(),this.radius)}set(t,e,n){this.start.copy(t),this.end.copy(e),this.radius=n}copy(t){this.start.copy(t.start),this.end.copy(t.end),this.radius=t.radius}getCenter(t){return t.copy(this.end).add(this.start).multiplyScalar(.5)}translate(t){this.start.add(t),this.end.add(t)}checkAABBAxis(t,e,n,i,r,s,o,a,l){return(r-t<l||r-n<l)&&(t-s<l||n-s<l)&&(o-e<l||o-i<l)&&(e-a<l||i-a<l)}intersectsBox(t){return this.checkAABBAxis(this.start.x,this.start.y,this.end.x,this.end.y,t.min.x,t.max.x,t.min.y,t.max.y,this.radius)&&this.checkAABBAxis(this.start.x,this.start.z,this.end.x,this.end.z,t.min.x,t.max.x,t.min.z,t.max.z,this.radius)&&this.checkAABBAxis(this.start.y,this.start.z,this.end.y,this.end.z,t.min.y,t.max.y,t.min.z,t.max.z,this.radius)}lineLineMinimumPoints(t,e){const n=dN.copy(t.end).sub(t.start),i=pN.copy(e.end).sub(e.start),r=_N.copy(e.start).sub(t.start),s=n.dot(i),o=n.dot(n),a=i.dot(i),l=i.dot(r),c=n.dot(r);let u,h;const d=o*a-s*s;if(Math.abs(d)<1e-10){const t=-l/a,e=(s-l)/a;Math.abs(t-.5)<Math.abs(e-.5)?(u=0,h=t):(u=1,h=e)}else u=(l*s+c*a)/d,h=(u*s-l)/a;h=Math.max(0,Math.min(1,h)),u=Math.max(0,Math.min(1,u));return[n.multiplyScalar(u).add(t.start),i.multiplyScalar(h).add(e.start)]}}const fN=new Nx,gN=new Nx,vN=new qw,yN=new oN,xN=new oN,bN=new Zx,wN=new mN;class TN{constructor(t){this.triangles=[],this.box=t,this.subTrees=[]}addTriangle(t){return this.bounds||(this.bounds=new Rx),this.bounds.min.x=Math.min(this.bounds.min.x,t.a.x,t.b.x,t.c.x),this.bounds.min.y=Math.min(this.bounds.min.y,t.a.y,t.b.y,t.c.y),this.bounds.min.z=Math.min(this.bounds.min.z,t.a.z,t.b.z,t.c.z),this.bounds.max.x=Math.max(this.bounds.max.x,t.a.x,t.b.x,t.c.x),this.bounds.max.y=Math.max(this.bounds.max.y,t.a.y,t.b.y,t.c.y),this.bounds.max.z=Math.max(this.bounds.max.z,t.a.z,t.b.z,t.c.z),this.triangles.push(t),this}calcBox(){return this.box=this.bounds.clone(),this.box.min.x-=.01,this.box.min.y-=.01,this.box.min.z-=.01,this}split(t){if(!this.box)return;const e=[],n=gN.copy(this.box.max).sub(this.box.min).multiplyScalar(.5);for(let t=0;t<2;t++)for(let i=0;i<2;i++)for(let r=0;r<2;r++){const s=new Rx,o=fN.set(t,i,r);s.min.copy(this.box.min).add(o.multiply(n)),s.max.copy(s.min).add(n),e.push(new TN(s))}let i;for(;i=this.triangles.pop();)for(let t=0;t<e.length;t++)e[t].box.intersectsTriangle(i)&&e[t].triangles.push(i);for(let n=0;n<e.length;n++){const i=e[n].triangles.length;i>8&&t<16&&e[n].split(t+1),0!==i&&this.subTrees.push(e[n])}return this}build(){return this.calcBox(),this.split(0),this}getRayTriangles(t,e){for(let n=0;n<this.subTrees.length;n++){const i=this.subTrees[n];if(t.intersectsBox(i.box))if(i.triangles.length>0)for(let t=0;t<i.triangles.length;t++)-1===e.indexOf(i.triangles[t])&&e.push(i.triangles[t]);else i.getRayTriangles(t,e)}return e}triangleCapsuleIntersect(t,e){e.getPlane(vN);const n=vN.distanceToPoint(t.start)-t.radius,i=vN.distanceToPoint(t.end)-t.radius;if(n>0&&i>0||n<-t.radius&&i<-t.radius)return!1;const r=Math.abs(n/(Math.abs(n)+Math.abs(i))),s=fN.copy(t.start).lerp(t.end,r);if(e.containsPoint(s))return{normal:vN.normal.clone(),point:s.clone(),depth:Math.abs(Math.min(n,i))};const o=t.radius*t.radius,a=yN.set(t.start,t.end),l=[[e.a,e.b],[e.b,e.c],[e.c,e.a]];for(let e=0;e<l.length;e++){const n=xN.set(l[e][0],l[e][1]),[i,r]=t.lineLineMinimumPoints(a,n);if(i.distanceToSquared(r)<o)return{normal:i.clone().sub(r).normalize(),point:r.clone(),depth:t.radius-i.distanceTo(r)}}return!1}triangleSphereIntersect(t,e){if(e.getPlane(vN),!t.intersectsPlane(vN))return!1;const n=Math.abs(vN.distanceToSphere(t)),i=t.radius*t.radius-n*n,r=vN.projectPoint(t.center,fN);if(e.containsPoint(t.center))return{normal:vN.normal.clone(),point:r.clone(),depth:Math.abs(vN.distanceToSphere(t))};const s=[[e.a,e.b],[e.b,e.c],[e.c,e.a]];for(let e=0;e<s.length;e++){yN.set(s[e][0],s[e][1]),yN.closestPointToPoint(r,!0,gN);const n=gN.distanceToSquared(t.center);if(n<i)return{normal:t.center.clone().sub(gN).normalize(),point:gN.clone(),depth:t.radius-Math.sqrt(n)}}return!1}getSphereTriangles(t,e){for(let n=0;n<this.subTrees.length;n++){const i=this.subTrees[n];if(t.intersectsBox(i.box))if(i.triangles.length>0)for(let t=0;t<i.triangles.length;t++)-1===e.indexOf(i.triangles[t])&&e.push(i.triangles[t]);else i.getSphereTriangles(t,e)}}getCapsuleTriangles(t,e){for(let n=0;n<this.subTrees.length;n++){const i=this.subTrees[n];if(t.intersectsBox(i.box))if(i.triangles.length>0)for(let t=0;t<i.triangles.length;t++)-1===e.indexOf(i.triangles[t])&&e.push(i.triangles[t]);else i.getCapsuleTriangles(t,e)}}sphereIntersect(t){bN.copy(t);const e=[];let n,i=!1;this.getSphereTriangles(t,e);for(let t=0;t<e.length;t++)(n=this.triangleSphereIntersect(bN,e[t]))&&(i=!0,bN.center.add(n.normal.multiplyScalar(n.depth)));if(i){const e=bN.center.clone().sub(t.center),n=e.length();return{normal:e.normalize(),depth:n}}return!1}capsuleIntersect(t){wN.copy(t);const e=[];let n,i=!1;this.getCapsuleTriangles(wN,e);for(let t=0;t<e.length;t++)(n=this.triangleCapsuleIntersect(wN,e[t]))&&(i=!0,wN.translate(n.normal.multiplyScalar(n.depth)));if(i){const e=wN.getCenter(new Nx).sub(t.getCenter(fN)),n=e.length();return{normal:e.normalize(),depth:n}}return!1}rayIntersect(t){if(0===t.direction.length())return;const e=[];let n,i,r=1e100;this.getRayTriangles(t,e);for(let s=0;s<e.length;s++){const o=t.intersectTriangle(e[s].a,e[s].b,e[s].c,!0,fN);if(o){const a=o.sub(t.origin).length();r>a&&(i=o.clone().add(t.origin),r=a,n=e[s])}}return r<1e100&&{distance:r,triangle:n,position:i}}fromGraphNode(t){return t.updateWorldMatrix(!0,!0),t.traverse((t=>{if(!0===t.isMesh){let e,n=!1;null!==t.geometry.index?(n=!0,e=t.geometry.toNonIndexed()):e=t.geometry;const i=e.getAttribute(\\\\\\\"position\\\\\\\");for(let e=0;e<i.count;e+=3){const n=(new Nx).fromBufferAttribute(i,e),r=(new Nx).fromBufferAttribute(i,e+1),s=(new Nx).fromBufferAttribute(i,e+2);n.applyMatrix4(t.matrixWorld),r.applyMatrix4(t.matrixWorld),s.applyMatrix4(t.matrixWorld),this.addTriangle(new Vb(n,r,s))}n&&e.dispose()}})),this.build(),this}}class AN{constructor(t){this._object=t,this._octree=new TN,this._capsule=new mN(new p.a(0,.35,0),new p.a(0,1,0),.6),this._octree.fromGraphNode(this._object)}setCapsule(t){this._capsule.copy(t)}testPosition(t){return this._capsule.start.x=t.x,this._capsule.start.z=t.z,this._capsule.end.x=t.x,this._capsule.end.z=t.z,this._octree.capsuleIntersect(this._capsule)}}class EN extends $.a{setCheckCollisions(t){if(t){let e;t.traverse((t=>{if(!e){const n=t;n.geometry&&(e=n)}})),e?this._playerCollisionController=new AN(e):console.error(\\\\\\\"no geo found in\\\\\\\",t)}else this._playerCollisionController=void 0}setCollisionCapsule(t){var e;null===(e=this._playerCollisionController)||void 0===e||e.setCapsule(t)}}const MN={type:\\\\\\\"change\\\\\\\"},SN={type:\\\\\\\"lock\\\\\\\"},CN={type:\\\\\\\"unlock\\\\\\\"},NN=Math.PI/2;class LN extends EN{constructor(t,e){super(),this.camera=t,this.domElement=e,this.isLocked=!1,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.speed=1,this.euler=new Wv.a(0,0,0,\\\\\\\"YXZ\\\\\\\"),this.vec=new p.a,this.boundMethods={onMouseMove:this.onMouseMove.bind(this),onPointerlockChange:this.onPointerlockChange.bind(this),onPointerlockError:this.onPointerlockError.bind(this)},this._cameraTmp=new tf.a,this.velocity=new p.a,this.direction=new p.a,this._moveForward=!1,this._moveBackward=!1,this._moveLeft=!1,this._moveRight=!1,this.prevTime=0,this.connect()}onMouseMove(t){if(!1!==this.isLocked){var e=t.movementX||t.mozMovementX||t.webkitMovementX||0,n=t.movementY||t.mozMovementY||t.webkitMovementY||0;this.euler.setFromQuaternion(this.camera.quaternion),this.euler.y-=.002*e,this.euler.x-=.002*n,this.euler.x=Math.max(NN-this.maxPolarAngle,Math.min(NN-this.minPolarAngle,this.euler.x)),this.camera.quaternion.setFromEuler(this.euler),this.dispatchEvent(MN)}}onPointerlockChange(){this.velocity.set(0,0,0),this.domElement.ownerDocument.pointerLockElement===this.domElement?(this.dispatchEvent(SN),this.isLocked=!0):(this.dispatchEvent(CN),this.isLocked=!1)}onPointerlockError(){console.error(\\\\\\\"THREE.PointerLockControls: Unable to use Pointer Lock API (Note that you need to wait for 2 seconds to lock the pointer after having just unlocked it)\\\\\\\")}connect(){this.domElement.ownerDocument.addEventListener(\\\\\\\"mousemove\\\\\\\",this.boundMethods.onMouseMove),this.domElement.ownerDocument.addEventListener(\\\\\\\"pointerlockchange\\\\\\\",this.boundMethods.onPointerlockChange),this.domElement.ownerDocument.addEventListener(\\\\\\\"pointerlockerror\\\\\\\",this.boundMethods.onPointerlockError)}disconnect(){this.domElement.ownerDocument.removeEventListener(\\\\\\\"mousemove\\\\\\\",this.boundMethods.onMouseMove),this.domElement.ownerDocument.removeEventListener(\\\\\\\"pointerlockchange\\\\\\\",this.boundMethods.onPointerlockChange),this.domElement.ownerDocument.removeEventListener(\\\\\\\"pointerlockerror\\\\\\\",this.boundMethods.onPointerlockError)}dispose(){this.disconnect()}getObject(){return this.camera}moveForward(t,e){this.vec.setFromMatrixColumn(t.matrix,0),this.vec.crossVectors(t.up,this.vec),t.position.addScaledVector(this.vec,e)}moveRight(t,e){this.vec.setFromMatrixColumn(t.matrix,0),t.position.addScaledVector(this.vec,e)}_copyToCameraTmp(){this._cameraTmp.position.copy(this.camera.position),this._cameraTmp.matrix.copy(this.camera.matrix),this._cameraTmp.up.copy(this.camera.up)}lock(){this.domElement.requestPointerLock()}unlock(){this.domElement.ownerDocument.exitPointerLock()}setMoveForward(t){this._moveForward=t}setMoveBackward(t){this._moveBackward=t}setMoveLeft(t){this._moveLeft=t}setMoveRight(t){this._moveRight=t}update(){const t=performance.now();if(!0===this.isLocked){const e=(t-this.prevTime)/1e3;if(this.velocity.x-=10*this.velocity.x*e,this.velocity.z-=10*this.velocity.z*e,this.velocity.y-=9.8*100*e,this.direction.z=Number(this._moveForward)-Number(this._moveBackward),this.direction.x=Number(this._moveRight)-Number(this._moveLeft),this.direction.normalize(),(this._moveForward||this._moveBackward)&&(this.velocity.z-=400*this.direction.z*e*this.speed),(this._moveLeft||this._moveRight)&&(this.velocity.x-=400*this.direction.x*e*this.speed),this._playerCollisionController){this._copyToCameraTmp(),this.moveRight(this._cameraTmp,-this.velocity.x*e),this.moveForward(this._cameraTmp,-this.velocity.z*e);const t=this._playerCollisionController.testPosition(this._cameraTmp.position);t?(this._cameraTmp.position.add(t.normal.multiplyScalar(t.depth)),this.camera.position.copy(this._cameraTmp.position)):this._applyVelocity(e)}this._applyVelocity(e)}this.prevTime=t}_applyVelocity(t){this.moveRight(this.camera,-this.velocity.x*t),this.moveForward(this.camera,-this.velocity.z*t)}}async function ON(t,e){var n;if(e.pv.collideWithGeo){const i=e.pv.collidingGeo.nodeWithContext(Ki.OBJ);if(i){await i.compute();const r=await(null===(n=i.displayNodeController)||void 0===n?void 0:n.displayNode()),s=(await(null==r?void 0:r.compute())).coreContent();if(!s)return void console.error(\\\\\\\"obj node contains invalid sop\\\\\\\");const o=s.objectsWithGeo()[0];t.setCheckCollisions(o),t.setCollisionCapsule(new mN(new p.a(0,e.pv.capsuleHeightRange.x,0),new p.a(e.pv.capsuleHeightRange.y),e.pv.capsuleRadius))}}else t.setCheckCollisions()}const RN=\\\\\\\"lock\\\\\\\",PN=\\\\\\\"change\\\\\\\",IN=\\\\\\\"unlock\\\\\\\";const FN=new class extends aa{constructor(){super(...arguments),this.lock=oa.BUTTON(null,{callback:t=>{DN.PARAM_CALLBACK_lock_controls(t)}}),this.minPolarAngle=oa.FLOAT(0,{range:[0,Math.PI],rangeLocked:[!0,!0]}),this.maxPolarAngle=oa.FLOAT(\\\\\\\"$PI\\\\\\\",{range:[0,Math.PI],rangeLocked:[!0,!0]}),this.speed=oa.FLOAT(1),this.collideWithGeo=oa.BOOLEAN(0),this.collidingGeo=oa.NODE_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:Ki.OBJ,types:[Ng.GEO]},visibleIf:{collideWithGeo:!0}}),this.recomputeCollidingGeo=oa.BUTTON(null,{callback:t=>{DN.PARAM_CALLBACK_recomputeCollidingGeo(t)},visibleIf:{collideWithGeo:!0}}),this.capsuleHeightRange=oa.VECTOR2([.3,1],{visibleIf:{collideWithGeo:!0}}),this.capsuleRadius=oa.FLOAT(.3,{visibleIf:{collideWithGeo:!0}})}};class DN extends jv{constructor(){super(...arguments),this.paramsConfig=FN,this._controls_by_element_id=new Map}static type(){return rr.FIRST_PERSON}endEventName(){return\\\\\\\"unlock\\\\\\\"}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new Jo(RN,$o.BASE,this.lockControls.bind(this))]),this.io.outputs.setNamedOutputConnectionPoints([new Jo(RN,$o.BASE),new Jo(PN,$o.BASE),new Jo(IN,$o.BASE)])}async create_controls_instance(t,e){const n=new LN(t,e);return this._controls_by_element_id.set(e.id,n),this._bind_listeners_to_controls_instance(n),n}_bind_listeners_to_controls_instance(t){t.addEventListener(RN,(()=>{this._createKeysEvents(t),this.dispatchEventToOutput(RN,{})})),t.addEventListener(PN,(()=>{this.dispatchEventToOutput(PN,{})})),t.addEventListener(IN,(()=>{this._removeKeysEvents(),this.dispatchEventToOutput(IN,{})}))}update_required(){return!0}setup_controls(t){t.minPolarAngle=this.pv.minPolarAngle,t.maxPolarAngle=this.pv.maxPolarAngle,t.speed=this.pv.speed,this._setupCollisionGeo(t)}async _setupCollisionGeo(t){ON(t,this)}dispose_controls_for_html_element_id(t){this._controls_by_element_id.get(t)&&this._controls_by_element_id.delete(t)}static PARAM_CALLBACK_recomputeCollidingGeo(t){t._recomputeCollidingGeo()}_recomputeCollidingGeo(){this._controls_by_element_id.forEach(((t,e)=>{this._setupCollisionGeo(t)}))}lockControls(){let t;this._controls_by_element_id.forEach(((e,n)=>{t=t||e})),t&&t.lock()}static PARAM_CALLBACK_lock_controls(t){t.lockControls()}_onKeyDown(t,e){switch(t.code){case\\\\\\\"ArrowUp\\\\\\\":case\\\\\\\"KeyW\\\\\\\":e.setMoveForward(!0);break;case\\\\\\\"ArrowLeft\\\\\\\":case\\\\\\\"KeyA\\\\\\\":e.setMoveLeft(!0);break;case\\\\\\\"ArrowDown\\\\\\\":case\\\\\\\"KeyS\\\\\\\":e.setMoveBackward(!0);break;case\\\\\\\"ArrowRight\\\\\\\":case\\\\\\\"KeyD\\\\\\\":e.setMoveRight(!0)}}_onKeyUp(t,e){switch(t.code){case\\\\\\\"ArrowUp\\\\\\\":case\\\\\\\"KeyW\\\\\\\":e.setMoveForward(!1);break;case\\\\\\\"ArrowLeft\\\\\\\":case\\\\\\\"KeyA\\\\\\\":e.setMoveLeft(!1);break;case\\\\\\\"ArrowDown\\\\\\\":case\\\\\\\"KeyS\\\\\\\":e.setMoveBackward(!1);break;case\\\\\\\"ArrowRight\\\\\\\":case\\\\\\\"KeyD\\\\\\\":e.setMoveRight(!1)}}_createKeysEvents(t){this._onKeyDownBound=e=>{this._onKeyDown(e,t)},this._onKeyUpBound=e=>{this._onKeyUp(e,t)},document.addEventListener(\\\\\\\"keydown\\\\\\\",this._onKeyDownBound),document.addEventListener(\\\\\\\"keyup\\\\\\\",this._onKeyUpBound)}_removeKeysEvents(){this._onKeyDownBound&&this._onKeyUpBound&&(document.removeEventListener(\\\\\\\"keydown\\\\\\\",this._onKeyDownBound),document.removeEventListener(\\\\\\\"keyup\\\\\\\",this._onKeyUpBound))}}var kN,BN;!function(t){t.TRIGGER=\\\\\\\"trigger\\\\\\\",t.RESET=\\\\\\\"reset\\\\\\\"}(kN||(kN={})),function(t){t.OUT=\\\\\\\"out\\\\\\\",t.LAST=\\\\\\\"last\\\\\\\"}(BN||(BN={}));const zN=new class extends aa{constructor(){super(...arguments),this.maxCount=oa.INTEGER(5,{range:[0,10],rangeLocked:[!0,!1]}),this.reset=oa.BUTTON(null,{callback:t=>{UN.PARAM_CALLBACK_reset(t)}})}};class UN extends Ba{constructor(){super(...arguments),this.paramsConfig=zN,this._process_count=0,this._last_dispatched=!1}static type(){return\\\\\\\"limit\\\\\\\"}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new Jo(kN.TRIGGER,$o.BASE,this.process_event_trigger.bind(this)),new Jo(kN.RESET,$o.BASE,this.process_event_reset.bind(this))]),this.io.outputs.setNamedOutputConnectionPoints([new Jo(BN.OUT,$o.BASE),new Jo(BN.LAST,$o.BASE)])}processEvent(t){}process_event_trigger(t){this._process_count<this.pv.maxCount?(this._process_count+=1,this.dispatchEventToOutput(BN.OUT,t)):this._last_dispatched||(this._last_dispatched=!0,this.dispatchEventToOutput(BN.LAST,t))}process_event_reset(t){this._process_count=0,this._last_dispatched=!1}static PARAM_CALLBACK_reset(t){t.process_event_reset({})}}const GN=new class extends aa{constructor(){super(...arguments),this.alert=oa.BOOLEAN(0),this.console=oa.BOOLEAN(1)}};class VN extends Ba{constructor(){super(...arguments),this.paramsConfig=GN}static type(){return\\\\\\\"message\\\\\\\"}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new Jo(\\\\\\\"trigger\\\\\\\",$o.BASE,this._process_trigger_event.bind(this))]),this.io.outputs.setNamedOutputConnectionPoints([new Jo(VN.OUTPUT,$o.BASE)])}trigger_output(t){this.dispatchEventToOutput(VN.OUTPUT,t)}_process_trigger_event(t){this.pv.alert&&alert(t),this.pv.console&&console.log(this.path(),Date.now(),t),this.trigger_output(t)}}VN.OUTPUT=\\\\\\\"output\\\\\\\";const HN=t=>(t.preventDefault(),!1);class jN{static disableContextMenu(){document.addEventListener(\\\\\\\"contextmenu\\\\\\\",HN)}static reEstablishContextMenu(){document.removeEventListener(\\\\\\\"contextmenu\\\\\\\",HN)}}const WN={rotationSpeed:1,rotationRange:{min:.25*-Math.PI,max:.25*Math.PI},translationSpeed:.1},qN={type:\\\\\\\"change\\\\\\\"};class XN extends EN{constructor(t,e){super(),this._camera=t,this.domElement=e,this.translationData={direction:{x:0,y:0}},this.rotationData={direction:{x:0,y:0}},this._boundMethods={onRotateStart:this._onRotateStart.bind(this),onRotateMove:this._onRotateMove.bind(this),onRotateEnd:this._onRotateEnd.bind(this),onTranslateStart:this._onTranslateStart.bind(this),onTranslateMove:this._onTranslateMove.bind(this),onTranslateEnd:this._onTranslateEnd.bind(this)},this._startCameraRotation=new Wv.a,this._velocity=new p.a,this._rotationSpeed=WN.rotationSpeed,this._rotationRange={min:WN.rotationRange.min,max:WN.rotationRange.max},this._translationSpeed=WN.translationSpeed,this._translateDomElement=this._createTranslateDomElement(),this._translateDomElementRect=this._translateDomElement.getBoundingClientRect(),this.vLeft=new p.a,this.vRight=new p.a,this.vTop=new p.a,this.vBottom=new p.a,this.angleY=0,this.angleX=0,this._rotationStartPosition=new d.a,this._rotationMovePosition=new d.a,this._rotationDelta=new d.a,this._startCameraPosition=new p.a,this._translationStartPosition=new d.a,this._translationMovePosition=new d.a,this._translationDelta=new d.a,this.prevTime=performance.now(),this._camTmpPost=new p.a,this._camWorldDir=new p.a,this._up=new p.a(0,1,0),this._camSideVector=new p.a,this._camera.rotation.order=\\\\\\\"ZYX\\\\\\\",this._addEvents()}dispose(){this._removeEvents()}_createTranslateDomElement(){const t=document.createElement(\\\\\\\"div\\\\\\\"),e=this.domElement.getBoundingClientRect(),n=Math.min(e.width,e.height),i=Math.round(.4*n),r=Math.round(.1*n);return t.style.width=`${i}px`,t.style.height=t.style.width,t.style.border=\\\\\\\"1px solid black\\\\\\\",t.style.borderRadius=`${i}px`,t.style.position=\\\\\\\"absolute\\\\\\\",t.style.bottom=`${r}px`,t.style.left=`${r}px`,t}_addEvents(){var t;jN.disableContextMenu(),this.domElement.addEventListener(\\\\\\\"touchstart\\\\\\\",this._boundMethods.onRotateStart),this.domElement.addEventListener(\\\\\\\"touchmove\\\\\\\",this._boundMethods.onRotateMove),this.domElement.addEventListener(\\\\\\\"touchend\\\\\\\",this._boundMethods.onRotateEnd),this._translateDomElement.addEventListener(\\\\\\\"touchstart\\\\\\\",this._boundMethods.onTranslateStart),this._translateDomElement.addEventListener(\\\\\\\"touchmove\\\\\\\",this._boundMethods.onTranslateMove),this._translateDomElement.addEventListener(\\\\\\\"touchend\\\\\\\",this._boundMethods.onTranslateEnd),null===(t=this.domElement.parentElement)||void 0===t||t.append(this._translateDomElement)}_removeEvents(){var t;jN.reEstablishContextMenu(),this.domElement.removeEventListener(\\\\\\\"touchstart\\\\\\\",this._boundMethods.onRotateStart),this.domElement.removeEventListener(\\\\\\\"touchmove\\\\\\\",this._boundMethods.onRotateMove),this.domElement.removeEventListener(\\\\\\\"touchend\\\\\\\",this._boundMethods.onRotateEnd),this._translateDomElement.removeEventListener(\\\\\\\"touchstart\\\\\\\",this._boundMethods.onTranslateStart),this._translateDomElement.removeEventListener(\\\\\\\"touchmove\\\\\\\",this._boundMethods.onTranslateMove),this._translateDomElement.removeEventListener(\\\\\\\"touchend\\\\\\\",this._boundMethods.onTranslateEnd),null===(t=this.domElement.parentElement)||void 0===t||t.removeChild(this._translateDomElement)}setRotationSpeed(t){this._rotationSpeed=t}setRotationRange(t){this._rotationRange.min=t.min,this._rotationRange.max=t.max}setTranslationSpeed(t){this._translationSpeed=t}_onRotateStart(t){this._startCameraRotation.copy(this._camera.rotation);const e=this._getTouch(t,this.domElement);e&&(this._rotationStartPosition.set(e.clientX,e.clientY),this.vLeft.set(-1,0,.5),this.vRight.set(1,0,.5),[this.vLeft,this.vRight].forEach((t=>{t.unproject(this._camera),this._camera.worldToLocal(t)})),this.angleY=this.vLeft.angleTo(this.vRight),this.vTop.set(0,1,.5),this.vBottom.set(0,-1,.5),[this.vTop,this.vBottom].forEach((t=>{t.unproject(this._camera),this._camera.worldToLocal(t)})),this.angleX=this.vTop.angleTo(this.vBottom))}_onRotateMove(t){const e=this._getTouch(t,this.domElement);e&&(this._rotationMovePosition.set(e.clientX,e.clientY),this._rotationDelta.copy(this._rotationMovePosition).sub(this._rotationStartPosition),this.rotationData.direction.x=this._rotationDelta.x/this.domElement.clientWidth,this.rotationData.direction.y=this._rotationDelta.y/this.domElement.clientHeight,this._rotateCamera(this.rotationData))}_onRotateEnd(){this.rotationData.direction.x=0,this.rotationData.direction.y=0}_rotateCamera(t){let e=this.angleY*t.direction.x*this._rotationSpeed;this._camera.rotation.y=this._startCameraRotation.y+-e;let n=this.angleX*t.direction.y*this._rotationSpeed;this._camera.rotation.x=rs.clamp(this._startCameraRotation.x+-n,this._rotationRange.min,this._rotationRange.max),this.dispatchEvent(qN)}_onTranslateStart(t){this._startCameraPosition.copy(this._camera.position);const e=this._getTouch(t,this._translateDomElement);e&&(this._translationStartPosition.set(e.clientX,e.clientY),this._translateDomElementRect=this._translateDomElement.getBoundingClientRect())}_onTranslateMove(t){const e=this._getTouch(t,this._translateDomElement);e&&(this._translationMovePosition.set(e.clientX,e.clientY),this._translationDelta.copy(this._translationMovePosition).sub(this._translationStartPosition),this.translationData.direction.x=this._translationSpeed*this._translationDelta.x/this._translateDomElementRect.width,this.translationData.direction.y=this._translationSpeed*-this._translationDelta.y/this._translateDomElementRect.height,this.dispatchEvent(qN))}_onTranslateEnd(){this.translationData.direction.x=0,this.translationData.direction.y=0}update(){const t=performance.now(),e=t-this.prevTime;this.prevTime=t,this._translateCamera(this.translationData,e)}_translateCamera(t,e){this._camera.getWorldDirection(this._camWorldDir),this._camWorldDir.y=0,this._camWorldDir.normalize(),this._camSideVector.crossVectors(this._up,this._camWorldDir),this._camSideVector.normalize(),this._camSideVector.multiplyScalar(-t.direction.x),this._camWorldDir.multiplyScalar(t.direction.y),this._velocity.copy(this._camWorldDir),this._velocity.add(this._camSideVector);const n=this._camera.position.y;if(this._camTmpPost.copy(this._camera.position),this._playerCollisionController){const t=1;this._velocity.addScaledVector(this._velocity,t);const n=this._velocity.clone().multiplyScalar(e);this._camTmpPost.add(n);const i=this._playerCollisionController.testPosition(this._camTmpPost);i&&this._camTmpPost.add(i.normal.multiplyScalar(i.depth)),this._camera.position.copy(this._camTmpPost)}else this._camTmpPost.add(this._camSideVector),this._camTmpPost.add(this._camWorldDir),this._camera.position.copy(this._camTmpPost);this._camera.position.y=n}_getTouch(t,e){for(let n=0;n<t.touches.length;n++){const i=t.touches[n];if(i.target===e)return i}}}const YN=\\\\\\\"start\\\\\\\",$N=\\\\\\\"change\\\\\\\",JN=\\\\\\\"end\\\\\\\";const ZN=new class extends aa{constructor(){super(...arguments),this.minPolarAngle=oa.FLOAT(0,{range:[0,Math.PI],rangeLocked:[!0,!0]}),this.maxPolarAngle=oa.FLOAT(\\\\\\\"$PI\\\\\\\",{range:[0,Math.PI],rangeLocked:[!0,!0]}),this.rotationSpeed=oa.FLOAT(WN.rotationSpeed),this.translationSpeed=oa.FLOAT(WN.translationSpeed),this.collideWithGeo=oa.BOOLEAN(0),this.collidingGeo=oa.NODE_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:Ki.OBJ,types:[Ng.GEO]},visibleIf:{collideWithGeo:!0}}),this.recomputeCollidingGeo=oa.BUTTON(null,{callback:t=>{QN.PARAM_CALLBACK_recomputeCollidingGeo(t)},visibleIf:{collideWithGeo:!0}}),this.capsuleHeightRange=oa.VECTOR2([.3,1],{visibleIf:{collideWithGeo:!0}}),this.capsuleRadius=oa.FLOAT(.3,{visibleIf:{collideWithGeo:!0}})}};class QN extends jv{constructor(){super(...arguments),this.paramsConfig=ZN,this._controls_by_element_id=new Map}static type(){return rr.MOBILE_JOYSTICK}endEventName(){return\\\\\\\"end\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new Jo(YN,$o.BASE),new Jo($N,$o.BASE),new Jo(JN,$o.BASE)])}async create_controls_instance(t,e){const n=new XN(t,e);return this._controls_by_element_id.set(e.id,n),this._bind_listeners_to_controls_instance(n),n}_bind_listeners_to_controls_instance(t){t.addEventListener(YN,(()=>{this.dispatchEventToOutput(YN,{})})),t.addEventListener($N,(()=>{this.dispatchEventToOutput($N,{})})),t.addEventListener(JN,(()=>{this.dispatchEventToOutput(JN,{})}))}update_required(){return!0}setup_controls(t){t.setRotationSpeed(this.pv.rotationSpeed),t.setRotationRange({min:this.pv.minPolarAngle,max:this.pv.maxPolarAngle}),t.setTranslationSpeed(this.pv.translationSpeed),this._setupCollisionGeo(t)}async _setupCollisionGeo(t){ON(t,this)}dispose_controls_for_html_element_id(t){this._controls_by_element_id.get(t)&&this._controls_by_element_id.delete(t)}static PARAM_CALLBACK_recomputeCollidingGeo(t){t._recomputeCollidingGeo()}_recomputeCollidingGeo(){this._controls_by_element_id.forEach(((t,e)=>{this._setupCollisionGeo(t)}))}}var KN;!function(t){t.ALL_TOGETHER=\\\\\\\"all together\\\\\\\",t.BATCH=\\\\\\\"batch\\\\\\\"}(KN||(KN={}));const tL=[KN.ALL_TOGETHER,KN.BATCH];const eL=new class extends aa{constructor(){super(...arguments),this.mask=oa.STRING(\\\\\\\"/geo*\\\\\\\",{callback:t=>{nL.PARAM_CALLBACK_update_resolved_nodes(t)}}),this.force=oa.BOOLEAN(0),this.cookMode=oa.INTEGER(tL.indexOf(KN.ALL_TOGETHER),{menu:{entries:tL.map(((t,e)=>({name:t,value:e})))}}),this.batchSize=oa.INTEGER(1,{visibleIf:{cookMode:tL.indexOf(KN.BATCH)},separatorAfter:!0}),this.updateResolve=oa.BUTTON(null,{callback:(t,e)=>{nL.PARAM_CALLBACK_update_resolve(t)}}),this.printResolve=oa.BUTTON(null,{callback:(t,e)=>{nL.PARAM_CALLBACK_print_resolve(t)}})}};class nL extends Ba{constructor(){super(...arguments),this.paramsConfig=eL,this._resolved_nodes=[],this._dispatched_first_node_cooked=!1,this._dispatched_all_nodes_cooked=!1,this._cook_state_by_node_id=new Map}static type(){return\\\\\\\"nodeCook\\\\\\\"}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new Jo(nL.INPUT_TRIGGER,$o.BASE,this.process_event_trigger.bind(this))]),this.io.outputs.setNamedOutputConnectionPoints([new Jo(nL.OUTPUT_FIRST_NODE,$o.BASE),new Jo(nL.OUTPUT_EACH_NODE,$o.BASE),new Jo(nL.OUTPUT_ALL_NODES,$o.BASE)])}trigger(){this.process_event_trigger({})}cook(){this._update_resolved_nodes(),this.cookController.endCook()}dispose(){super.dispose(),this._reset()}process_event_trigger(t){this._cook_nodes_with_mode()}_cook_nodes_with_mode(){this._update_resolved_nodes();const t=tL[this.pv.cookMode];switch(t){case KN.ALL_TOGETHER:return this._cook_nodes_all_together();case KN.BATCH:return this._cook_nodes_batch()}ar.unreachable(t)}_cook_nodes_all_together(){this._cook_nodes(this._resolved_nodes)}async _cook_nodes_batch(){const t=this.pv.batchSize,e=Math.ceil(this._resolved_nodes.length/t);for(let n=0;n<e;n++){const e=n*t,i=(n+1)*t,r=this._resolved_nodes.slice(e,i);await this._cook_nodes(r)}}async _cook_nodes(t){const e=[];for(let n of t)e.push(this._cook_node(n));return await Promise.all(e)}_cook_node(t){return this.pv.force&&t.setDirty(this),t.compute()}static PARAM_CALLBACK_update_resolved_nodes(t){t._update_resolved_nodes()}_update_resolved_nodes(){this._reset(),this._resolved_nodes=this.scene().nodesController.nodesFromMask(this.pv.mask||\\\\\\\"\\\\\\\");for(let t of this._resolved_nodes)t.cookController.registerOnCookEnd(this._callbackNameForNode(t),(()=>{this._on_node_cook_complete(t)})),this._cook_state_by_node_id.set(t.graphNodeId(),!1)}_callbackNameForNode(t){return`owner-${this.graphNodeId()}-target-${t.graphNodeId()}`}_reset(){this._dispatched_first_node_cooked=!1,this._cook_state_by_node_id.clear();for(let t of this._resolved_nodes)t.cookController.deregisterOnCookEnd(this._callbackNameForNode(t));this._resolved_nodes=[]}_all_nodes_have_cooked(){for(let t of this._resolved_nodes){if(!this._cook_state_by_node_id.get(t.graphNodeId()))return!1}return!0}_on_node_cook_complete(t){const e={value:{node:t}};this._dispatched_first_node_cooked||(this._dispatched_first_node_cooked=!0,this.dispatchEventToOutput(nL.OUTPUT_FIRST_NODE,e)),this._cook_state_by_node_id.get(t.graphNodeId())||this.dispatchEventToOutput(nL.OUTPUT_EACH_NODE,e),this._cook_state_by_node_id.set(t.graphNodeId(),!0),this._dispatched_all_nodes_cooked||this._all_nodes_have_cooked()&&(this._dispatched_all_nodes_cooked=!0,this.dispatchEventToOutput(nL.OUTPUT_ALL_NODES,{}))}static PARAM_CALLBACK_update_resolve(t){t._update_resolved_nodes()}static PARAM_CALLBACK_print_resolve(t){t.print_resolve()}print_resolve(){console.log(this._resolved_nodes)}}var iL,rL;nL.INPUT_TRIGGER=\\\\\\\"trigger\\\\\\\",nL.OUTPUT_FIRST_NODE=\\\\\\\"first\\\\\\\",nL.OUTPUT_EACH_NODE=\\\\\\\"each\\\\\\\",nL.OUTPUT_ALL_NODES=\\\\\\\"all\\\\\\\",function(t){t.TRIGGER=\\\\\\\"trigger\\\\\\\"}(iL||(iL={})),function(t){t.OUT=\\\\\\\"out\\\\\\\"}(rL||(rL={}));const sL=new class extends aa{};class oL extends Ba{constructor(){super(...arguments),this.paramsConfig=sL}static type(){return\\\\\\\"null\\\\\\\"}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new Jo(iL.TRIGGER,$o.BASE,this.process_event_trigger.bind(this))]),this.io.outputs.setNamedOutputConnectionPoints([new Jo(rL.OUT,$o.BASE)])}processEvent(t){}process_event_trigger(t){this.dispatchEventToOutput(rL.OUT,t)}}var aL,lL=n(39),cL=n(36);class uL{constructor(t,e,n=0,i=1/0){this.ray=new lL.a(t,e),this.near=n,this.far=i,this.camera=null,this.layers=new cL.a,this.params={Mesh:{},Line:{threshold:1},LOD:{},Points:{threshold:1},Sprite:{}}}set(t,e){this.ray.set(t,e)}setFromCamera(t,e){e&&e.isPerspectiveCamera?(this.ray.origin.setFromMatrixPosition(e.matrixWorld),this.ray.direction.set(t.x,t.y,.5).unproject(e).sub(this.ray.origin).normalize(),this.camera=e):e&&e.isOrthographicCamera?(this.ray.origin.set(t.x,t.y,(e.near+e.far)/(e.near-e.far)).unproject(e),this.ray.direction.set(0,0,-1).transformDirection(e.matrixWorld),this.camera=e):console.error(\\\\\\\"THREE.Raycaster: Unsupported camera type: \\\\\\\"+e.type)}intersectObject(t,e=!0,n=[]){return dL(t,this,n,e),n.sort(hL),n}intersectObjects(t,e=!0,n=[]){for(let i=0,r=t.length;i<r;i++)dL(t[i],this,n,e);return n.sort(hL),n}}function hL(t,e){return t.distance-e.distance}function dL(t,e,n,i){if(t.layers.test(e.layers)&&t.raycast(e,n),!0===i){const i=t.children;for(let t=0,r=i.length;t<r;t++)dL(i[t],e,n,!0)}}!function(t){t.GEOMETRY=\\\\\\\"geometry\\\\\\\",t.PLANE=\\\\\\\"plane\\\\\\\"}(aL||(aL={}));aL.GEOMETRY,aL.PLANE;class pL{constructor(t){this._node=t,this._set_pos_timestamp=-1,this._hit_velocity=new p.a(0,0,0),this._hit_velocity_array=[0,0,0]}process(t){if(!this._node.pv.tvelocity)return;if(!this._prev_position)return this._prev_position=this._prev_position||new p.a,void this._prev_position.copy(t);const e=ai.performance.performanceManager().now(),n=e-this._set_pos_timestamp;if(this._set_pos_timestamp=e,this._hit_velocity.copy(t).sub(this._prev_position).divideScalar(n).multiplyScalar(1e3),this._hit_velocity.toArray(this._hit_velocity_array),this._node.pv.tvelocityTarget){if(ai.playerMode())this._found_velocity_target_param=this._found_velocity_target_param||this._node.pv.velocityTarget.paramWithType(Es.VECTOR3);else{const t=this._node.pv.velocityTarget;this._found_velocity_target_param=t.paramWithType(Es.VECTOR3)}this._found_velocity_target_param&&this._found_velocity_target_param.set(this._hit_velocity_array)}else this._node.p.velocity.set(this._hit_velocity_array);this._prev_position.copy(t)}reset(){this._prev_position=void 0}}var _L;!function(t){t.GEOMETRY=\\\\\\\"geometry\\\\\\\",t.PLANE=\\\\\\\"plane\\\\\\\"}(_L||(_L={}));const mL=[_L.GEOMETRY,_L.PLANE];function fL(t,e,n){var i=e.getBoundingClientRect();n.offsetX=t.pageX-i.left,n.offsetY=t.pageY-i.top}class gL{constructor(t){this._node=t,this._offset={offsetX:0,offsetY:0},this._mouse=new d.a,this._mouse_array=[0,0],this._raycaster=new uL,this._plane=new X.a,this._plane_intersect_target=new p.a,this._intersections=[],this._hit_position_array=[0,0,0],this.velocity_controller=new pL(this._node)}updateMouse(t){var e;const n=null===(e=t.viewer)||void 0===e?void 0:e.canvas(),i=t.cameraNode;if(!n||!i)return;const r=t.event;if((r instanceof MouseEvent||r instanceof DragEvent||r instanceof PointerEvent)&&fL(r,n,this._offset),window.TouchEvent&&r instanceof TouchEvent){fL(r.touches[0],n,this._offset)}(t=>{this._mouse.x=t.offsetX/n.offsetWidth*2-1,this._mouse.y=-t.offsetY/n.offsetHeight*2+1,this._mouse.toArray(this._mouse_array),this._node.p.mouse.set(this._mouse_array)})(this._offset),this._raycaster.setFromCamera(this._mouse,i.object)}processEvent(t){this._prepareRaycaster(t);const e=mL[this._node.pv.intersectWith];switch(e){case _L.GEOMETRY:return this._intersect_with_geometry(t);case _L.PLANE:return this._intersect_with_plane(t)}ar.unreachable(e)}_intersect_with_plane(t){this._plane.normal.copy(this._node.pv.planeDirection),this._plane.constant=this._node.pv.planeOffset,this._raycaster.ray.intersectPlane(this._plane,this._plane_intersect_target),this._set_position_param(this._plane_intersect_target),this._node.trigger_hit(t)}_intersect_with_geometry(t){if(this._resolved_targets||this.update_target(),this._resolved_targets){this._intersections.length=0;const e=this._raycaster.intersectObjects(this._resolved_targets,this._node.pv.traverseChildren,this._intersections)[0];e?(this._set_position_param(e.point),this._node.pv.geoAttribute&&this._resolve_geometry_attribute(e),t.value={intersect:e},this._node.trigger_hit(t)):this._node.trigger_miss(t)}}_resolve_geometry_attribute(t){const e=kr[this._node.pv.geoAttributeType],n=gL.resolve_geometry_attribute(t,this._node.pv.geoAttributeName,e);if(null!=n){switch(e){case Dr.NUMERIC:return void this._node.p.geoAttributeValue1.set(n);case Dr.STRING:return void(m.isString(n)&&this._node.p.geoAttributeValues.set(n))}ar.unreachable(e)}}static resolve_geometry_attribute(t,e,n){switch(Nr(t.object.constructor)){case Sr.MESH:return this.resolve_geometry_attribute_for_mesh(t,e,n);case Sr.POINTS:return this.resolve_geometry_attribute_for_point(t,e,n)}}static resolve_geometry_attribute_for_mesh(t,e,n){const i=t.object.geometry;if(i){const r=i.getAttribute(e);if(r){switch(n){case Dr.NUMERIC:{const e=i.getAttribute(\\\\\\\"position\\\\\\\");return t.face?(this._vA.fromBufferAttribute(e,t.face.a),this._vB.fromBufferAttribute(e,t.face.b),this._vC.fromBufferAttribute(e,t.face.c),this._uvA.fromBufferAttribute(r,t.face.a),this._uvB.fromBufferAttribute(r,t.face.b),this._uvC.fromBufferAttribute(r,t.face.c),t.uv=Qr.a.getUV(t.point,this._vA,this._vB,this._vC,this._uvA,this._uvB,this._uvC,this._hitUV),this._hitUV.x):void 0}case Dr.STRING:{const t=new ps(i).points()[0];return t?t.stringAttribValue(e):void 0}}ar.unreachable(n)}}}static resolve_geometry_attribute_for_point(t,e,n){const i=t.object.geometry;if(i&&null!=t.index){switch(n){case Dr.NUMERIC:{const n=i.getAttribute(e);return n?n.array[t.index]:void 0}case Dr.STRING:{const n=new ps(i).points()[t.index];return n?n.stringAttribValue(e):void 0}}ar.unreachable(n)}}_set_position_param(t){if(t.toArray(this._hit_position_array),this._node.pv.tpositionTarget){if(ai.playerMode())this._found_position_target_param=this._found_position_target_param||this._node.pv.positionTarget.paramWithType(Es.VECTOR3);else{const t=this._node.pv.positionTarget;this._found_position_target_param=t.paramWithType(Es.VECTOR3)}this._found_position_target_param&&this._found_position_target_param.set(this._hit_position_array)}else this._node.p.position.set(this._hit_position_array);this.velocity_controller.process(t)}_prepareRaycaster(t){const e=this._raycaster.params.Points;e&&(e.threshold=this._node.pv.pointsThreshold);let n=t.cameraNode;if(this._node.pv.overrideCamera)if(this._node.pv.overrideRay)this._raycaster.ray.origin.copy(this._node.pv.rayOrigin),this._raycaster.ray.direction.copy(this._node.pv.rayDirection);else{const t=this._node.p.camera.found_node_with_context(Ki.OBJ);t&&(n=t)}n&&!this._node.pv.overrideRay&&n.prepareRaycaster(this._mouse,this._raycaster)}update_target(){const t=SL[this._node.pv.targetType];switch(t){case ML.NODE:return this._update_target_from_node();case ML.SCENE_GRAPH:return this._update_target_from_scene_graph()}ar.unreachable(t)}_update_target_from_node(){const t=this._node.p.targetNode.value.nodeWithContext(Ki.OBJ);if(t){const e=this._node.pv.traverseChildren?t.object:t.childrenDisplayController.sopGroup();this._resolved_targets=e?[e]:void 0}else this._node.states.error.set(\\\\\\\"node is not an object\\\\\\\")}_update_target_from_scene_graph(){const t=this._node.scene().objectsByMask(this._node.pv.objectMask);t.length>0?this._resolved_targets=t:this._resolved_targets=void 0}async update_position_target(){this._node.p.positionTarget.isDirty()&&await this._node.p.positionTarget.compute()}static PARAM_CALLBACK_update_target(t){t.cpuController.update_target()}static PARAM_CALLBACK_print_resolve(t){t.cpuController.print_resolve()}print_resolve(){this.update_target(),console.log(this._resolved_targets)}}gL._vA=new p.a,gL._vB=new p.a,gL._vC=new p.a,gL._uvA=new d.a,gL._uvB=new d.a,gL._uvC=new d.a,gL._hitUV=new d.a;class vL{constructor(t){this._node=t,this._resolved_material=null,this._restore_context={scene:{overrideMaterial:null},renderer:{toneMapping:-1,outputEncoding:-1}},this._mouse=new d.a,this._mouse_array=[0,0],this._read=new Float32Array(4),this._param_read=[0,0,0,0]}updateMouse(t){var e;const n=null===(e=t.viewer)||void 0===e?void 0:e.canvas();n&&t.event&&(t.event instanceof MouseEvent||t.event instanceof DragEvent||t.event instanceof PointerEvent?(this._mouse.x=t.event.offsetX/n.offsetWidth,this._mouse.y=1-t.event.offsetY/n.offsetHeight,this._mouse.toArray(this._mouse_array),this._node.p.mouse.set(this._mouse_array)):console.warn(\\\\\\\"event type not implemented\\\\\\\"))}processEvent(t){var e;const n=null===(e=t.viewer)||void 0===e?void 0:e.canvas();if(!n||!t.cameraNode)return;const i=t.cameraNode,r=i.renderController;if(r){if(this._render_target=this._render_target||new Z(n.offsetWidth,n.offsetHeight,{minFilter:w.V,magFilter:w.ob,format:w.Ib,type:w.G}),!this._resolved_material)return this.update_material(),void console.warn(\\\\\\\"no material found\\\\\\\");const e=i,s=r.resolved_scene||i.scene().threejsScene(),o=r.renderer(n);this._modify_scene_and_renderer(s,o),o.setRenderTarget(this._render_target),o.clear(),o.render(s,e.object),o.setRenderTarget(null),this._restore_scene_and_renderer(s,o),o.readRenderTargetPixels(this._render_target,Math.round(this._mouse.x*n.offsetWidth),Math.round(this._mouse.y*n.offsetHeight),1,1,this._read),this._param_read[0]=this._read[0],this._param_read[1]=this._read[1],this._param_read[2]=this._read[2],this._param_read[3]=this._read[3],this._node.p.pixelValue.set(this._param_read),this._node.pv.pixelValue.x>this._node.pv.hitThreshold?this._node.trigger_hit(t):this._node.trigger_miss(t)}}_modify_scene_and_renderer(t,e){this._restore_context.scene.overrideMaterial=t.overrideMaterial,this._restore_context.renderer.outputEncoding=e.outputEncoding,this._restore_context.renderer.toneMapping=e.toneMapping,t.overrideMaterial=this._resolved_material,e.toneMapping=w.vb,e.outputEncoding=w.U}_restore_scene_and_renderer(t,e){t.overrideMaterial=this._restore_context.scene.overrideMaterial,e.outputEncoding=this._restore_context.renderer.outputEncoding,e.toneMapping=this._restore_context.renderer.toneMapping}update_material(){const t=this._node.p.material.found_node();t?t.context()==Ki.MAT?this._resolved_material=t.material:this._node.states.error.set(\\\\\\\"target is not an obj\\\\\\\"):this._node.states.error.set(\\\\\\\"no target found\\\\\\\")}static PARAM_CALLBACK_update_material(t){t.gpuController.update_material()}}const yL=1e3/60;var xL;!function(t){t.CPU=\\\\\\\"cpu\\\\\\\",t.GPU=\\\\\\\"gpu\\\\\\\"}(xL||(xL={}));const bL=[xL.CPU,xL.GPU];function wL(t={}){return t.mode=bL.indexOf(xL.CPU),{visibleIf:t}}function TL(t={}){return t.mode=bL.indexOf(xL.CPU),t.intersectWith=mL.indexOf(_L.GEOMETRY),{visibleIf:t}}function AL(t={}){return t.mode=bL.indexOf(xL.CPU),t.intersectWith=mL.indexOf(_L.PLANE),{visibleIf:t}}function EL(t={}){return t.mode=bL.indexOf(xL.GPU),{visibleIf:t}}var ML;!function(t){t.SCENE_GRAPH=\\\\\\\"scene graph\\\\\\\",t.NODE=\\\\\\\"node\\\\\\\"}(ML||(ML={}));const SL=[ML.SCENE_GRAPH,ML.NODE];const CL=new class extends aa{constructor(){super(...arguments),this.mode=oa.INTEGER(bL.indexOf(xL.CPU),{menu:{entries:bL.map(((t,e)=>({name:t,value:e})))}}),this.mouse=oa.VECTOR2([0,0],{cook:!1}),this.overrideCamera=oa.BOOLEAN(0),this.overrideRay=oa.BOOLEAN(0,{visibleIf:{mode:bL.indexOf(xL.CPU),overrideCamera:1}}),this.camera=oa.OPERATOR_PATH(\\\\\\\"/perspective_camera1\\\\\\\",{nodeSelection:{context:Ki.OBJ},dependentOnFoundNode:!1,visibleIf:{overrideCamera:1,overrideRay:0}}),this.rayOrigin=oa.VECTOR3([0,0,0],{visibleIf:{overrideCamera:1,overrideRay:1}}),this.rayDirection=oa.VECTOR3([0,0,1],{visibleIf:{overrideCamera:1,overrideRay:1}}),this.material=oa.OPERATOR_PATH(\\\\\\\"/MAT/mesh_basic_builder1\\\\\\\",{nodeSelection:{context:Ki.MAT},dependentOnFoundNode:!1,callback:(t,e)=>{vL.PARAM_CALLBACK_update_material(t)},...EL()}),this.pixelValue=oa.VECTOR4([0,0,0,0],{cook:!1,...EL()}),this.hitThreshold=oa.FLOAT(.5,{cook:!1,...EL()}),this.intersectWith=oa.INTEGER(mL.indexOf(_L.GEOMETRY),{menu:{entries:mL.map(((t,e)=>({name:t,value:e})))},...wL()}),this.pointsThreshold=oa.FLOAT(1,{range:[0,100],rangeLocked:[!0,!1],...wL()}),this.planeDirection=oa.VECTOR3([0,1,0],{...AL()}),this.planeOffset=oa.FLOAT(0,{...AL()}),this.targetType=oa.INTEGER(0,{menu:{entries:SL.map(((t,e)=>({name:t,value:e})))},...TL()}),this.targetNode=oa.NODE_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:Ki.OBJ},dependentOnFoundNode:!1,callback:(t,e)=>{gL.PARAM_CALLBACK_update_target(t)},...TL({targetType:SL.indexOf(ML.NODE)})}),this.objectMask=oa.STRING(\\\\\\\"*geo1*\\\\\\\",{callback:(t,e)=>{gL.PARAM_CALLBACK_update_target(t)},...TL({targetType:SL.indexOf(ML.SCENE_GRAPH)})}),this.printFoundObjectsFromMask=oa.BUTTON(null,{callback:(t,e)=>{gL.PARAM_CALLBACK_print_resolve(t)},...TL({targetType:SL.indexOf(ML.SCENE_GRAPH)})}),this.traverseChildren=oa.BOOLEAN(!0,{callback:(t,e)=>{gL.PARAM_CALLBACK_update_target(t)},...TL(),separatorAfter:!0}),this.tpositionTarget=oa.BOOLEAN(0,{cook:!1,...wL()}),this.position=oa.VECTOR3([0,0,0],{cook:!1,...wL({tpositionTarget:0})}),this.positionTarget=oa.PARAM_PATH(\\\\\\\"\\\\\\\",{cook:!1,...wL({tpositionTarget:1}),paramSelection:Es.VECTOR3,computeOnDirty:!0}),this.tvelocity=oa.BOOLEAN(0,{cook:!1}),this.tvelocityTarget=oa.BOOLEAN(0,{cook:!1,...wL({tvelocity:1})}),this.velocity=oa.VECTOR3([0,0,0],{cook:!1,...wL({tvelocity:1,tvelocityTarget:0})}),this.velocityTarget=oa.PARAM_PATH(\\\\\\\"\\\\\\\",{cook:!1,...wL({tvelocity:1,tvelocityTarget:1}),paramSelection:Es.VECTOR3,computeOnDirty:!0}),this.geoAttribute=oa.BOOLEAN(0,TL()),this.geoAttributeName=oa.STRING(\\\\\\\"id\\\\\\\",{cook:!1,...TL({geoAttribute:1})}),this.geoAttributeType=oa.INTEGER(kr.indexOf(Dr.NUMERIC),{menu:{entries:Br},...TL({geoAttribute:1})}),this.geoAttributeValue1=oa.FLOAT(0,{cook:!1,...TL({geoAttribute:1,geoAttributeType:kr.indexOf(Dr.NUMERIC)})}),this.geoAttributeValues=oa.STRING(\\\\\\\"\\\\\\\",{...TL({geoAttribute:1,geoAttributeType:kr.indexOf(Dr.STRING)})})}};class NL extends Ba{constructor(){super(...arguments),this.paramsConfig=CL,this.cpuController=new gL(this),this.gpuController=new vL(this),this._last_event_processed_at=-1}static type(){return\\\\\\\"raycast\\\\\\\"}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new Jo(NL.INPUT_TRIGGER,$o.BASE,this._process_trigger_event_throttled.bind(this)),new Jo(NL.INPUT_MOUSE,$o.MOUSE,this._process_mouse_event.bind(this)),new Jo(NL.INPUT_UPDATE_OBJECTS,$o.BASE,this._process_trigger_update_objects.bind(this)),new Jo(NL.INPUT_TRIGGER_VEL_RESET,$o.BASE,this._process_trigger_vel_reset.bind(this))]),this.io.outputs.setNamedOutputConnectionPoints([new Jo(NL.OUTPUT_HIT,$o.BASE),new Jo(NL.OUTPUT_MISS,$o.BASE)])}trigger_hit(t){this.dispatchEventToOutput(NL.OUTPUT_HIT,t)}trigger_miss(t){this.dispatchEventToOutput(NL.OUTPUT_MISS,t)}_process_mouse_event(t){this.pv.mode==bL.indexOf(xL.CPU)?this.cpuController.updateMouse(t):this.gpuController.updateMouse(t)}_process_trigger_event_throttled(t){const e=this._last_event_processed_at,n=ai.performance.performanceManager().now();this._last_event_processed_at=n;const i=n-e;i<yL?setTimeout((()=>{this._process_trigger_event(t)}),yL-i):this._process_trigger_event(t)}_process_trigger_event(t){this.pv.mode==bL.indexOf(xL.CPU)?this.cpuController.processEvent(t):this.gpuController.processEvent(t)}_process_trigger_update_objects(t){this.pv.mode==bL.indexOf(xL.CPU)&&this.cpuController.update_target()}_process_trigger_vel_reset(t){this.pv.mode==bL.indexOf(xL.CPU)&&this.cpuController.velocity_controller.reset()}}var LL;NL.INPUT_TRIGGER=\\\\\\\"trigger\\\\\\\",NL.INPUT_MOUSE=\\\\\\\"mouse\\\\\\\",NL.INPUT_UPDATE_OBJECTS=\\\\\\\"updateObjects\\\\\\\",NL.INPUT_TRIGGER_VEL_RESET=\\\\\\\"triggerVelReset\\\\\\\",NL.OUTPUT_HIT=\\\\\\\"hit\\\\\\\",NL.OUTPUT_MISS=\\\\\\\"miss\\\\\\\",function(t){t.SET=\\\\\\\"set\\\\\\\",t.TOGGLE=\\\\\\\"toggle\\\\\\\"}(LL||(LL={}));const OL=[LL.SET,LL.TOGGLE];const RL=new class extends aa{constructor(){super(...arguments),this.mask=oa.STRING(\\\\\\\"/geo*\\\\\\\",{separatorAfter:!0}),this.tdisplay=oa.BOOLEAN(0),this.displayMode=oa.INTEGER(OL.indexOf(LL.SET),{visibleIf:{tdisplay:1},menu:{entries:OL.map(((t,e)=>({name:t,value:e})))}}),this.display=oa.BOOLEAN(0,{visibleIf:{tdisplay:1,displayMode:OL.indexOf(LL.SET)},separatorAfter:!0}),this.tbypass=oa.BOOLEAN(0),this.bypassMode=oa.INTEGER(OL.indexOf(LL.SET),{visibleIf:{tbypass:1},menu:{entries:OL.map(((t,e)=>({name:t,value:e})))}}),this.bypass=oa.BOOLEAN(0,{visibleIf:{tbypass:1,displayMode:OL.indexOf(LL.SET)}}),this.execute=oa.BUTTON(null,{callback:t=>{PL.PARAM_CALLBACK_execute(t)}})}};class PL extends Ba{constructor(){super(...arguments),this.paramsConfig=RL}static type(){return\\\\\\\"setFlag\\\\\\\"}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new Jo(\\\\\\\"trigger\\\\\\\",$o.BASE)])}async processEvent(t){let e=this.pv.mask;if(t.value){const n=t.value.node;if(n){const t=n.parent();t&&(e=`${t.path()}/${e}`)}}const n=this.scene().nodesController.nodesFromMask(e);for(let t of n)this._update_node_flags(t)}_update_node_flags(t){this._update_node_display_flag(t),this._update_node_bypass_flag(t)}_update_node_display_flag(t){var e;if(!this.pv.tdisplay)return;if(!(null===(e=t.flags)||void 0===e?void 0:e.hasDisplay()))return;const n=t.flags.display;if(!n)return;const i=OL[this.pv.displayMode];switch(i){case LL.SET:return void n.set(this.pv.display);case LL.TOGGLE:return void n.set(!n.active())}ar.unreachable(i)}_update_node_bypass_flag(t){var e;if(!this.pv.tbypass)return;if(!(null===(e=t.flags)||void 0===e?void 0:e.hasBypass()))return;const n=t.flags.bypass;if(!n)return;const i=OL[this.pv.bypassMode];switch(i){case LL.SET:return void n.set(this.pv.bypass);case LL.TOGGLE:return void n.set(!n.active())}ar.unreachable(i)}static PARAM_CALLBACK_execute(t){t.processEvent({})}}var IL;!function(t){t.BOOLEAN=\\\\\\\"boolean\\\\\\\",t.BUTTON=\\\\\\\"button\\\\\\\",t.NUMBER=\\\\\\\"number\\\\\\\",t.VECTOR2=\\\\\\\"vector2\\\\\\\",t.VECTOR3=\\\\\\\"vector3\\\\\\\",t.VECTOR4=\\\\\\\"vector4\\\\\\\",t.STRING=\\\\\\\"string\\\\\\\"}(IL||(IL={}));const FL=[IL.BOOLEAN,IL.BUTTON,IL.NUMBER,IL.VECTOR2,IL.VECTOR3,IL.VECTOR4,IL.STRING],DL=FL.indexOf(IL.BOOLEAN),kL=FL.indexOf(IL.NUMBER),BL=FL.indexOf(IL.VECTOR2),zL=FL.indexOf(IL.VECTOR3),UL=FL.indexOf(IL.VECTOR4),GL=FL.indexOf(IL.STRING),VL=\\\\\\\"output\\\\\\\";const HL=new class extends aa{constructor(){super(...arguments),this.param=oa.PARAM_PATH(\\\\\\\"\\\\\\\",{paramSelection:!0,computeOnDirty:!0}),this.type=oa.INTEGER(kL,{menu:{entries:FL.map(((t,e)=>({name:t,value:e})))}}),this.toggle=oa.BOOLEAN(0,{visibleIf:{type:DL}}),this.boolean=oa.BOOLEAN(0,{visibleIf:{type:DL,toggle:0}}),this.number=oa.FLOAT(0,{visibleIf:{type:kL}}),this.vector2=oa.VECTOR2([0,0],{visibleIf:{type:BL}}),this.vector3=oa.VECTOR3([0,0,0],{visibleIf:{type:zL}}),this.vector4=oa.VECTOR4([0,0,0,0],{visibleIf:{type:UL}}),this.increment=oa.BOOLEAN(0,{visibleIf:[{type:kL},{type:BL},{type:zL},{type:UL}]}),this.string=oa.STRING(\\\\\\\"\\\\\\\",{visibleIf:{type:GL}}),this.execute=oa.BUTTON(null,{callback:t=>{jL.PARAM_CALLBACK_execute(t)}})}};class jL extends Ba{constructor(){super(...arguments),this.paramsConfig=HL,this._tmp_vector2=new d.a,this._tmp_vector3=new p.a,this._tmp_vector4=new _.a,this._tmp_array2=[0,0],this._tmp_array3=[0,0,0],this._tmp_array4=[0,0,0,0]}static type(){return\\\\\\\"setParam\\\\\\\"}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new Jo(\\\\\\\"trigger\\\\\\\",$o.BASE)]),this.io.outputs.setNamedOutputConnectionPoints([new Jo(VL,$o.BASE)]),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.param])}))}))}async processEvent(t){this.p.param.isDirty()&&await this.p.param.compute();const e=this.p.param.value.param();if(e){const t=await this._new_param_value(e);null!=t&&e.set(t)}else this.states.error.set(\\\\\\\"target param not found\\\\\\\");this.dispatchEventToOutput(VL,t)}async _new_param_value(t){const e=FL[this.pv.type];switch(e){case IL.BOOLEAN:return await this._compute_params_if_dirty([this.p.toggle]),this.pv.toggle?t.value?0:1:this.pv.boolean?1:0;case IL.BUTTON:return t.options.executeCallback();case IL.NUMBER:return await this._compute_params_if_dirty([this.p.increment,this.p.number]),this.pv.increment?t.type()==Es.FLOAT?t.value+this.pv.number:t.value:this.pv.number;case IL.VECTOR2:return await this._compute_params_if_dirty([this.p.increment,this.p.vector2]),this.pv.increment?t.type()==Es.VECTOR2?(this._tmp_vector2.copy(t.value),this._tmp_vector2.add(this.pv.vector2),this._tmp_vector2.toArray(this._tmp_array2)):t.value.toArray(this._tmp_array2):this.pv.vector2.toArray(this._tmp_array2),this._tmp_array2;case IL.VECTOR3:return await this._compute_params_if_dirty([this.p.increment,this.p.vector3]),this.pv.increment?t.type()==Es.VECTOR3?(this._tmp_vector3.copy(t.value),this._tmp_vector3.add(this.pv.vector3),this._tmp_vector3.toArray(this._tmp_array3)):t.value.toArray(this._tmp_array3):this.pv.vector3.toArray(this._tmp_array3),this._tmp_array3;case IL.VECTOR4:return await this._compute_params_if_dirty([this.p.increment,this.p.vector4]),this.pv.increment?t.type()==Es.VECTOR4?(this._tmp_vector4.copy(t.value),this._tmp_vector4.add(this.pv.vector4),this._tmp_vector4.toArray(this._tmp_array4)):t.value.toArray(this._tmp_array4):this.pv.vector4.toArray(this._tmp_array4),this._tmp_array4;case IL.STRING:return await this._compute_params_if_dirty([this.p.string]),this.pv.string}ar.unreachable(e)}static PARAM_CALLBACK_execute(t){t.processEvent({})}async _compute_params_if_dirty(t){const e=[];for(let n of t)n.isDirty()&&e.push(n);const n=[];for(let t of e)n.push(t.compute());return await Promise.all(n)}}const WL=new class extends aa{constructor(){super(...arguments),this.outputsCount=oa.INTEGER(5,{range:[1,10],rangeLocked:[!0,!1]})}};class qL extends Ba{constructor(){super(...arguments),this.paramsConfig=WL}static type(){return\\\\\\\"sequence\\\\\\\"}initializeNode(){this.io.connection_points.set_input_name_function((()=>\\\\\\\"trigger\\\\\\\")),this.io.connection_points.set_expected_input_types_function((()=>[$o.BASE])),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this)),this.io.connection_points.set_output_name_function(this._output_name.bind(this))}_expected_output_types(){const t=new Array(this.pv.outputsCount);return t.fill($o.BASE),t}_output_name(t){return`out${t}`}processEvent(t){const e=this.pv.outputsCount;for(let n=0;n<e;n++){const e=this.io.outputs.namedOutputConnectionPoints()[n];this.dispatchEventToOutput(e.name(),t)}}}const XL=\\\\\\\"tick\\\\\\\";const YL=new class extends aa{constructor(){super(...arguments),this.period=oa.INTEGER(1e3),this.count=oa.INTEGER(-1)}};class $L extends Ba{constructor(){super(...arguments),this.paramsConfig=YL,this._timer_active=!1,this._current_count=0}static type(){return\\\\\\\"timer\\\\\\\"}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new Jo(\\\\\\\"start\\\\\\\",$o.BASE,this._start_timer.bind(this)),new Jo(\\\\\\\"stop\\\\\\\",$o.BASE,this._stop_timer.bind(this))]),this.io.outputs.setNamedOutputConnectionPoints([new Jo(XL,$o.BASE)])}_start_timer(t){this._timer_active||(this._timer_active=!0,this._current_count=0),this._run_timer(t)}_stop_timer(){this._timer_active=!1}_run_timer(t){setTimeout((()=>{this._timer_active&&(this.pv.count<=0||this._current_count<this.pv.count?(this.dispatchEventToOutput(XL,t),this._current_count+=1,this._run_timer(t)):this._stop_timer())}),this.pv.period)}}const JL=new class extends aa{constructor(){super(...arguments),this.className=oa.STRING(\\\\\\\"active\\\\\\\")}};class ZL extends Ba{constructor(){super(...arguments),this.paramsConfig=JL}static type(){return\\\\\\\"viewer\\\\\\\"}initializeNode(){this.io.inputs.setNamedInputConnectionPoints([new Jo(\\\\\\\"setCss\\\\\\\",$o.BASE,this._process_trigger_setClass.bind(this)),new Jo(\\\\\\\"unSetCss\\\\\\\",$o.BASE,this._process_trigger_unsetClass.bind(this)),new Jo(\\\\\\\"createControls\\\\\\\",$o.BASE,this._process_trigger_createControls.bind(this)),new Jo(\\\\\\\"disposeControls\\\\\\\",$o.BASE,this._process_trigger_disposeControls.bind(this))])}_process_trigger_setClass(t){var e;const n=null===(e=t.viewer)||void 0===e?void 0:e.canvas();n&&n.classList.add(this.pv.className)}_process_trigger_unsetClass(t){var e;const n=null===(e=t.viewer)||void 0===e?void 0:e.canvas();n&&n.classList.remove(this.pv.className)}_process_trigger_createControls(t){this.scene().viewersRegister.traverseViewers((t=>{var e;null===(e=t.controlsController)||void 0===e||e.create_controls()}))}_process_trigger_disposeControls(t){this.scene().viewersRegister.traverseViewers((t=>{var e;null===(e=t.controlsController)||void 0===e||e.dispose_controls()}))}}class QL extends ia{static context(){return Ki.EVENT}cook(){this.cookController.endCook()}}class KL extends QL{}class tO extends KL{constructor(){super(...arguments),this._children_controller_context=Ki.ANIM}static type(){return tr.ANIM}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class eO extends KL{constructor(){super(...arguments),this._children_controller_context=Ki.COP}static type(){return tr.COP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class nO extends KL{constructor(){super(...arguments),this._children_controller_context=Ki.EVENT}static type(){return tr.EVENT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class iO extends KL{constructor(){super(...arguments),this._children_controller_context=Ki.MAT}static type(){return tr.MAT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class rO extends QL{constructor(){super(...arguments),this.paramsConfig=new Jm,this.effectsComposerController=new Zm(this),this.displayNodeController=new Lm(this,this.effectsComposerController.displayNodeControllerCallbacks()),this._children_controller_context=Ki.POST}static type(){return tr.POST}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class sO extends KL{constructor(){super(...arguments),this._children_controller_context=Ki.ROP}static type(){return tr.ROP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}const oO=\\\\\\\"int\\\\\\\";const aO=new class extends aa{constructor(){super(...arguments),this.float=oa.FLOAT(0)}};class lO extends df{constructor(){super(...arguments),this.paramsConfig=aO}static type(){return\\\\\\\"floatToInt\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new Vo(oO,Do.INT)])}setLines(t){const e=this.variableForInputParam(this.p.float),n=`int ${this.glVarName(oO)} = int(${uf.float(e)})`;t.addBodyLines(this,[n])}}const cO=\\\\\\\"float\\\\\\\";const uO=new class extends aa{constructor(){super(...arguments),this.int=oa.INTEGER(0)}};class hO extends df{constructor(){super(...arguments),this.paramsConfig=uO}static type(){return\\\\\\\"intToFloat\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new Vo(cO,Do.FLOAT)])}setLines(t){const e=this.variableForInputParam(this.p.int),n=`float ${this.glVarName(cO)} = float(${uf.integer(e)})`;t.addBodyLines(this,[n])}}const dO=\\\\\\\"bool\\\\\\\";const pO=new class extends aa{constructor(){super(...arguments),this.int=oa.INTEGER(0)}};class _O extends df{constructor(){super(...arguments),this.paramsConfig=pO}static type(){return\\\\\\\"intToBool\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new Vo(dO,Do.BOOL)])}setLines(t){const e=this.variableForInputParam(this.p.int),n=`bool ${this.glVarName(dO)} = bool(${uf.integer(e)})`;t.addBodyLines(this,[n])}}const mO=new class extends aa{constructor(){super(...arguments),this.bool=oa.BOOLEAN(0)}};class fO extends df{constructor(){super(...arguments),this.paramsConfig=mO}static type(){return\\\\\\\"boolToInt\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new Vo(oO,Do.INT)])}setLines(t){const e=this.variableForInputParam(this.p.bool),n=`int ${this.glVarName(oO)} = int(${uf.bool(e)})`;t.addBodyLines(this,[n])}}const gO=new class extends aa{constructor(){super(...arguments),this.x=oa.FLOAT(0),this.y=oa.FLOAT(0)}};class vO extends df{constructor(){super(...arguments),this.paramsConfig=gO}static type(){return\\\\\\\"floatToVec2\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new Vo(vO.OUTPUT_NAME,Do.VEC2)])}setLines(t){const e=this.variableForInputParam(this.p.x),n=this.variableForInputParam(this.p.y),i=`vec2 ${this.glVarName(vO.OUTPUT_NAME)} = ${uf.float2(e,n)}`;t.addBodyLines(this,[i])}}vO.OUTPUT_NAME=\\\\\\\"vec2\\\\\\\";const yO=new class extends aa{constructor(){super(...arguments),this.x=oa.FLOAT(0),this.y=oa.FLOAT(0),this.z=oa.FLOAT(0)}};class xO extends df{constructor(){super(...arguments),this.paramsConfig=yO}static type(){return\\\\\\\"floatToVec3\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new Vo(xO.OUTPUT_NAME,Do.VEC3)])}setLines(t){const e=this.variableForInputParam(this.p.x),n=this.variableForInputParam(this.p.y),i=this.variableForInputParam(this.p.z),r=`vec3 ${this.glVarName(xO.OUTPUT_NAME)} = ${uf.float3(e,n,i)}`;t.addBodyLines(this,[r])}}xO.OUTPUT_NAME=\\\\\\\"vec3\\\\\\\";const bO=new class extends aa{constructor(){super(...arguments),this.x=oa.FLOAT(0),this.y=oa.FLOAT(0),this.z=oa.FLOAT(0),this.w=oa.FLOAT(0)}};class wO extends df{constructor(){super(...arguments),this.paramsConfig=bO}static type(){return\\\\\\\"floatToVec4\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new Vo(wO.OUTPUT_NAME,Do.VEC4)])}setLines(t){const e=this.variableForInputParam(this.p.x),n=this.variableForInputParam(this.p.y),i=this.variableForInputParam(this.p.z),r=this.variableForInputParam(this.p.w),s=`vec4 ${this.glVarName(wO.OUTPUT_NAME)} = ${uf.float4(e,n,i,r)}`;t.addBodyLines(this,[s])}}wO.OUTPUT_NAME=\\\\\\\"vec4\\\\\\\";const TO=new class extends aa{};class AO extends df{constructor(){super(...arguments),this.paramsConfig=TO}}function EO(t,e){const n=e.components,i=e.param_type;return class extends AO{static type(){return t}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints(n.map((t=>new Vo(t,Do.FLOAT))))}createParams(){this.addParam(i,\\\\\\\"vec\\\\\\\",n.map((t=>0)))}setLines(t){const e=[],n=this.variableForInput(\\\\\\\"vec\\\\\\\");this.io.outputs.used_output_names().forEach((t=>{const i=this.glVarName(t);e.push(`float ${i} = ${n}.${t}`)})),t.addBodyLines(this,e)}}}const MO=[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\"],SO=[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\"],CO=[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\",\\\\\\\"w\\\\\\\"];class NO extends(EO(\\\\\\\"vec2ToFloat\\\\\\\",{components:[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\"],param_type:Es.VECTOR2})){}class LO extends(EO(\\\\\\\"vec3ToFloat\\\\\\\",{components:[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\"],param_type:Es.VECTOR3})){}class OO extends(EO(\\\\\\\"vec4ToFloat\\\\\\\",{components:CO,param_type:Es.VECTOR4})){}class RO extends AO{static type(){return\\\\\\\"vec4ToVec3\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new Vo(RO.OUTPUT_NAME_VEC3,Do.VEC3),new Vo(RO.OUTPUT_NAME_W,Do.FLOAT)])}createParams(){this.addParam(Es.VECTOR4,RO.INPUT_NAME_VEC4,CO.map((t=>0)))}setLines(t){const e=[],n=RO.INPUT_NAME_VEC4,i=RO.OUTPUT_NAME_VEC3,r=RO.OUTPUT_NAME_W,s=this.variableForInput(n),o=this.io.outputs.used_output_names();if(o.indexOf(i)>=0){const t=this.glVarName(i);e.push(`vec3 ${t} = ${s}.xyz`)}if(o.indexOf(r)>=0){const t=this.glVarName(r);e.push(`float ${t} = ${s}.w`)}t.addBodyLines(this,e)}}RO.INPUT_NAME_VEC4=\\\\\\\"vec4\\\\\\\",RO.OUTPUT_NAME_VEC3=\\\\\\\"vec3\\\\\\\",RO.OUTPUT_NAME_W=\\\\\\\"w\\\\\\\";class PO extends AO{static type(){return\\\\\\\"vec3ToVec2\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new Vo(PO.OUTPUT_NAME_VEC2,Do.VEC2),new Vo(PO.OUTPUT_NAME_Z,Do.FLOAT)])}createParams(){this.addParam(Es.VECTOR3,PO.INPUT_NAME_VEC3,SO.map((t=>0)))}setLines(t){const e=[],n=PO.INPUT_NAME_VEC3,i=PO.OUTPUT_NAME_VEC2,r=PO.OUTPUT_NAME_Z,s=this.variableForInput(n),o=this.io.outputs.used_output_names();if(o.indexOf(i)>=0){const t=this.glVarName(i);e.push(`vec2 ${t} = ${s}.xy`)}if(o.indexOf(r)>=0){const t=this.glVarName(r);e.push(`float ${t} = ${s}.z`)}t.addBodyLines(this,e)}}PO.INPUT_NAME_VEC3=\\\\\\\"vec3\\\\\\\",PO.OUTPUT_NAME_VEC2=\\\\\\\"vec2\\\\\\\",PO.OUTPUT_NAME_Z=\\\\\\\"z\\\\\\\";class IO extends AO{static type(){return\\\\\\\"vec2ToVec3\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new Vo(IO.OUTPUT_NAME_VEC3,Do.VEC3)])}createParams(){this.addParam(Es.VECTOR2,IO.INPUT_NAME_VEC2,MO.map((t=>0))),this.addParam(Es.FLOAT,IO.INPUT_NAME_Z,0)}setLines(t){const e=[],n=IO.INPUT_NAME_VEC2,i=IO.INPUT_NAME_Z,r=IO.OUTPUT_NAME_VEC3,s=this.variableForInput(n),o=this.variableForInput(i),a=this.glVarName(r);e.push(`vec3 ${a} = vec3(${s}.xy, ${o})`),t.addBodyLines(this,e)}}IO.INPUT_NAME_VEC2=\\\\\\\"vec3\\\\\\\",IO.INPUT_NAME_Z=\\\\\\\"z\\\\\\\",IO.OUTPUT_NAME_VEC3=\\\\\\\"vec3\\\\\\\";class FO extends AO{static type(){return\\\\\\\"vec3ToVec4\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new Vo(FO.OUTPUT_NAME_VEC4,Do.VEC4)])}createParams(){this.addParam(Es.VECTOR3,FO.INPUT_NAME_VEC3,SO.map((t=>0))),this.addParam(Es.FLOAT,FO.INPUT_NAME_W,0)}setLines(t){const e=[],n=FO.INPUT_NAME_VEC3,i=FO.INPUT_NAME_W,r=FO.OUTPUT_NAME_VEC4,s=this.variableForInput(n),o=this.variableForInput(i),a=this.glVarName(r);e.push(`vec4 ${a} = vec4(${s}.xyz, ${o})`),t.addBodyLines(this,e)}}FO.INPUT_NAME_VEC3=\\\\\\\"vec3\\\\\\\",FO.INPUT_NAME_W=\\\\\\\"w\\\\\\\",FO.OUTPUT_NAME_VEC4=\\\\\\\"vec4\\\\\\\";const DO=new class extends aa{};class kO extends df{constructor(){super(...arguments),this.paramsConfig=DO}gl_method_name(){return\\\\\\\"\\\\\\\"}gl_function_definitions(){return[]}initializeNode(){super.initializeNode(),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this)),this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this))}_expected_input_types(){const t=this.io.connection_points.first_input_connection_type()||Do.FLOAT;if(this.io.connections.firstInputConnection()){const e=this.io.connections.inputConnections();if(e){let n=Math.max(f.compact(e).length+1,2);return f.range(n).map((e=>t))}return[]}return f.range(2).map((e=>t))}_expected_output_types(){return[this._expected_input_types()[0]]}_gl_input_name(t){return\\\\\\\"in\\\\\\\"}setLines(t){const e=this.io.outputs.namedOutputConnectionPoints()[0].type(),n=this.io.inputs.namedInputConnectionPoints().map(((t,e)=>{const n=t.name();return uf.any(this.variableForInput(n))})).join(\\\\\\\", \\\\\\\"),i=`${e} ${this.glVarName(this.io.connection_points.output_name(0))} = ${this.gl_method_name()}(${n})`;t.addBodyLines(this,[i]),t.addDefinitions(this,this.gl_function_definitions())}}class BO extends kO{_gl_input_name(t){return\\\\\\\"in\\\\\\\"}_expected_input_types(){return[this.io.connection_points.first_input_connection_type()||Do.FLOAT]}}class zO extends kO{_expected_input_types(){const t=this.io.connection_points.first_input_connection_type()||Do.FLOAT;return[t,t]}}class UO extends kO{_expected_input_types(){const t=this.io.connection_points.first_input_connection_type()||Do.FLOAT;return[t,t,t]}}class GO extends kO{_expected_input_types(){const t=this.io.connection_points.first_input_connection_type()||Do.FLOAT;return[t,t,t,t]}}class VO extends kO{_expected_input_types(){const t=this.io.connection_points.first_input_connection_type()||Do.FLOAT;return[t,t,t,t,t]}}function HO(t,e={}){const n=e.method||t,i=e.out||\\\\\\\"val\\\\\\\",r=e.in||\\\\\\\"in\\\\\\\";return class extends BO{static type(){return t}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this)),this.io.connection_points.set_output_name_function(this._gl_output_name.bind(this))}_gl_input_name(t){return r}_gl_output_name(t){return i}gl_method_name(){return n}}}class jO extends(HO(\\\\\\\"abs\\\\\\\")){}class WO extends(HO(\\\\\\\"acos\\\\\\\",{out:\\\\\\\"radians\\\\\\\"})){}class qO extends(HO(\\\\\\\"asin\\\\\\\",{out:\\\\\\\"radians\\\\\\\"})){}class XO extends(HO(\\\\\\\"atan\\\\\\\",{out:\\\\\\\"radians\\\\\\\"})){}class YO extends(HO(\\\\\\\"ceil\\\\\\\")){}class $O extends(HO(\\\\\\\"cos\\\\\\\",{in:\\\\\\\"radians\\\\\\\"})){}class JO extends(HO(\\\\\\\"degrees\\\\\\\",{in:\\\\\\\"radians\\\\\\\",out:\\\\\\\"degrees\\\\\\\"})){}class ZO extends(HO(\\\\\\\"exp\\\\\\\")){}class QO extends(HO(\\\\\\\"exp2\\\\\\\")){}class KO extends(HO(\\\\\\\"floor\\\\\\\")){}class tR extends(HO(\\\\\\\"fract\\\\\\\")){}class eR extends(HO(\\\\\\\"inverseSqrt\\\\\\\",{method:\\\\\\\"inversesqrt\\\\\\\"})){}class nR extends(HO(\\\\\\\"log\\\\\\\")){}class iR extends(HO(\\\\\\\"log2\\\\\\\")){}class rR extends(HO(\\\\\\\"normalize\\\\\\\",{out:\\\\\\\"normalized\\\\\\\"})){}class sR extends(HO(\\\\\\\"radians\\\\\\\",{in:\\\\\\\"degrees\\\\\\\",out:\\\\\\\"radians\\\\\\\"})){}class oR extends(HO(\\\\\\\"sign\\\\\\\")){}class aR extends(HO(\\\\\\\"sin\\\\\\\",{in:\\\\\\\"radians\\\\\\\"})){}class lR extends(HO(\\\\\\\"sqrt\\\\\\\")){}class cR extends(HO(\\\\\\\"tan\\\\\\\")){}function uR(t,e={}){const n=e.method||t,i=e.out||\\\\\\\"val\\\\\\\",r=e.in||[\\\\\\\"in0\\\\\\\",\\\\\\\"in1\\\\\\\"],s=e.default_in_type,o=e.allowed_in_types,a=e.out_type,l=e.functions||[];return class extends zO{static type(){return t}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this)),this.io.connection_points.set_output_name_function(this._gl_output_name.bind(this)),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),a&&this.io.connection_points.set_expected_output_types_function((()=>[a]))}_gl_input_name(t){return r[t]}_gl_output_name(t){return i}gl_method_name(){return n}gl_function_definitions(){return l?l.map((t=>new Tf(this,t))):[]}_expected_input_types(){let t=this.io.connection_points.first_input_connection_type();if(t&&o&&!o.includes(t)){const e=this.io.inputs.namedInputConnectionPoints()[0];t=e?e.type():s}const e=t||s||Do.FLOAT;return[e,e]}}}class hR extends(uR(\\\\\\\"distance\\\\\\\",{in:[\\\\\\\"p0\\\\\\\",\\\\\\\"p1\\\\\\\"],default_in_type:Do.VEC3,allowed_in_types:[Do.VEC2,Do.VEC3,Do.VEC4],out_type:Do.FLOAT})){}class dR extends(uR(\\\\\\\"dot\\\\\\\",{in:[\\\\\\\"vec0\\\\\\\",\\\\\\\"vec1\\\\\\\"],default_in_type:Do.VEC3,allowed_in_types:[Do.VEC2,Do.VEC3,Do.VEC4],out_type:Do.FLOAT})){}class pR extends(uR(\\\\\\\"max\\\\\\\")){}class _R extends(uR(\\\\\\\"min\\\\\\\")){}class mR extends(uR(\\\\\\\"mod\\\\\\\")){paramDefaultValue(t){return{in1:1}[t]}_expected_input_types(){const t=Do.FLOAT;return[t,t]}}class fR extends(uR(\\\\\\\"pow\\\\\\\",{in:[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\"]})){}class gR extends(uR(\\\\\\\"reflect\\\\\\\",{in:[\\\\\\\"I\\\\\\\",\\\\\\\"N\\\\\\\"],default_in_type:Do.VEC3})){}class vR extends(uR(\\\\\\\"step\\\\\\\",{in:[\\\\\\\"edge\\\\\\\",\\\\\\\"x\\\\\\\"]})){}function yR(t,e={}){const n=e.method||t,i=e.out||\\\\\\\"val\\\\\\\",r=e.in||[\\\\\\\"in0\\\\\\\",\\\\\\\"in1\\\\\\\",\\\\\\\"in2\\\\\\\"],s=e.default||{},o=e.out_type||Do.FLOAT,a=e.functions||[];return class extends UO{static type(){return t}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this)),this.io.connection_points.set_output_name_function(this._gl_output_name.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this))}_gl_input_name(t){return r[t]}_gl_output_name(t){return i}gl_method_name(){return n}_expected_output_types(){return[o]}paramDefaultValue(t){return s[t]}gl_function_definitions(){return a.map((t=>new Tf(this,t)))}}}class xR extends(yR(\\\\\\\"clamp\\\\\\\",{in:[\\\\\\\"value\\\\\\\",\\\\\\\"min\\\\\\\",\\\\\\\"max\\\\\\\"],default:{max:1}})){_expected_output_types(){return[this._expected_input_types()[0]]}}class bR extends(yR(\\\\\\\"faceForward\\\\\\\",{in:[\\\\\\\"N\\\\\\\",\\\\\\\"I\\\\\\\",\\\\\\\"Nref\\\\\\\"]})){}class wR extends(yR(\\\\\\\"smoothstep\\\\\\\",{in:[\\\\\\\"edge0\\\\\\\",\\\\\\\"edge1\\\\\\\",\\\\\\\"x\\\\\\\"],default:{edge1:1}})){_expected_output_types(){return[this._expected_input_types()[0]]}}function TR(t,e){const n=e.in_prefix||t,i=e.out||\\\\\\\"val\\\\\\\",r=e.operation,s=e.allowed_in_types;return class extends zO{static type(){return t}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this)),this.io.connection_points.set_output_name_function(this._gl_output_name.bind(this)),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this))}setLines(t){const e=this.io.outputs.namedOutputConnectionPoints()[0].type(),n=this.io.inputs.namedInputConnectionPoints().map(((t,e)=>{const n=t.name(),i=this.variableForInput(n);if(i)return uf.any(i)})).join(` ${this.gl_operation()} `),i=`${e} ${this.glVarName(this.io.connection_points.output_name(0))} = ${this.gl_method_name()}(${n})`;t.addBodyLines(this,[i])}_gl_input_name(t){return`${n}${t}`}_gl_output_name(t){return i}gl_operation(){return r}_expected_input_types(){let t=this.io.connection_points.first_input_connection_type();if(t&&s&&!s.includes(t)){const e=this.io.inputs.namedInputConnectionPoints()[0];e&&(t=e.type())}const e=t||Do.FLOAT,n=this.io.connections.existingInputConnections(),i=n?Math.max(n.length+1,2):2,r=[];for(let t=0;t<i;t++)r.push(e);return r}_expected_output_types(){const t=this._expected_input_types();return[t[1]||t[0]||Do.FLOAT]}}}class AR extends(TR(\\\\\\\"add\\\\\\\",{in_prefix:\\\\\\\"add\\\\\\\",out:\\\\\\\"sum\\\\\\\",operation:\\\\\\\"+\\\\\\\"})){}class ER extends(TR(\\\\\\\"divide\\\\\\\",{in_prefix:\\\\\\\"div\\\\\\\",out:\\\\\\\"divide\\\\\\\",operation:\\\\\\\"/\\\\\\\"})){paramDefaultValue(t){return 1}}class MR extends(TR(\\\\\\\"substract\\\\\\\",{in_prefix:\\\\\\\"sub\\\\\\\",out:\\\\\\\"substract\\\\\\\",operation:\\\\\\\"-\\\\\\\"})){}class SR extends(TR(\\\\\\\"mult\\\\\\\",{in_prefix:\\\\\\\"mult\\\\\\\",out:\\\\\\\"product\\\\\\\",operation:\\\\\\\"*\\\\\\\"})){static type(){return\\\\\\\"mult\\\\\\\"}paramDefaultValue(t){return 1}initializeNode(){super.initializeNode(),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this))}_expected_output_type(){const t=this._expected_input_types();return[t[t.length-1]]}_expected_input_types(){const t=this.io.connections.existingInputConnections();if(t){const e=t[0];if(e){const n=e.node_src.io.outputs.namedOutputConnectionPoints()[e.output_index].type(),i=Math.max(t.length+1,2),r=new Array(i);if(n==Do.FLOAT){const e=t[1];if(e){const t=e.node_src.io.outputs.namedOutputConnectionPoints()[e.output_index].type();return t==Do.FLOAT?r.fill(n):[n,t]}return[n,n]}return r.fill(n)}}return[Do.FLOAT,Do.FLOAT]}}class CR extends zO{initializeNode(){super.initializeNode(),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this))}_expected_input_types(){return[Do.BOOL,Do.BOOL]}_expected_output_types(){return[Do.BOOL]}setLines(t){const e=this.io.inputs.namedInputConnectionPoints().map(((t,e)=>{const n=t.name();return uf.any(this.variableForInput(n))})).join(` ${this.boolean_operation()} `),n=`bool ${this.glVarName(this.io.connection_points.output_name(0))} = ${e}`;t.addBodyLines(this,[n])}}function NR(t,e){return class extends CR{static type(){return t}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this)),this.io.connection_points.set_output_name_function(this._gl_output_name.bind(this))}boolean_operation(){return e.op}_gl_output_name(e){return t}_gl_input_name(e=0){return`${t}${e}`}}}class LR extends(NR(\\\\\\\"and\\\\\\\",{op:\\\\\\\"&&\\\\\\\"})){}class OR extends(NR(\\\\\\\"or\\\\\\\",{op:\\\\\\\"||\\\\\\\"})){}var RR;!function(t){t.TIME=\\\\\\\"time\\\\\\\",t.DELTA_TIME=\\\\\\\"delta_time\\\\\\\"}(RR||(RR={}));var PR,IR;!function(t){t.POSITION=\\\\\\\"position\\\\\\\",t.VELOCITY=\\\\\\\"velocity\\\\\\\",t.MASS=\\\\\\\"mass\\\\\\\",t.FORCE=\\\\\\\"force\\\\\\\"}(PR||(PR={})),function(t){t.POSITION=\\\\\\\"position\\\\\\\",t.VELOCITY=\\\\\\\"velocity\\\\\\\"}(IR||(IR={}));const FR=[PR.POSITION,PR.VELOCITY,PR.MASS,PR.FORCE],DR=[IR.POSITION,IR.VELOCITY],kR={[PR.POSITION]:[0,0,0],[PR.VELOCITY]:[0,0,0],[PR.MASS]:1,[PR.FORCE]:[0,-9.8,0]};const BR=new class extends aa{};class zR extends df{constructor(){super(...arguments),this.paramsConfig=BR}static type(){return\\\\\\\"acceleration\\\\\\\"}initializeNode(){super.initializeNode(),this.io.outputs.setNamedOutputConnectionPoints([new Vo(IR.POSITION,Do.VEC3),new Vo(IR.VELOCITY,Do.VEC3)]),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this)),this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this)),this.io.connection_points.set_output_name_function(this._gl_output_name.bind(this))}_expected_input_types(){const t=this.io.connection_points.first_input_connection_type()||Do.VEC3;return[t,t,Do.FLOAT,t]}_expected_output_types(){const t=this._expected_input_types()[0];return[t,t]}_gl_input_name(t){return FR[t]}_gl_output_name(t){return DR[t]}paramDefaultValue(t){return kR[t]}setLines(t){const e=this.io.outputs.namedOutputConnectionPoints()[0].type(),n=new Af(this,Do.FLOAT,RR.DELTA_TIME),i=new Tf(this,\\\\\\\"float compute_velocity_from_acceleration(float vel, float force, float mass, float time_delta){\\\\n\\\\tfloat impulse = (force * mass) * time_delta;\\\\n\\\\treturn vel + impulse;\\\\n}\\\\nvec2 compute_velocity_from_acceleration(vec2 vel, vec2 force, float mass, float time_delta){\\\\n\\\\tvec2 impulse = (force * mass) * time_delta;\\\\n\\\\treturn vel + impulse;\\\\n}\\\\nvec3 compute_velocity_from_acceleration(vec3 vel, vec3 force, float mass, float time_delta){\\\\n\\\\tvec3 impulse = (force * mass) * time_delta;\\\\n\\\\treturn vel + impulse;\\\\n}\\\\nvec4 compute_velocity_from_acceleration(vec4 vel, vec4 force, float mass, float time_delta){\\\\n\\\\tvec4 impulse = (force * mass) * time_delta;\\\\n\\\\treturn vel + impulse;\\\\n}\\\\nfloat compute_position_from_velocity(float position, float velocity, float time_delta){\\\\n\\\\treturn position + (velocity * time_delta);\\\\n}\\\\nvec2 compute_position_from_velocity(vec2 position, vec2 velocity, float time_delta){\\\\n\\\\treturn position + (velocity * time_delta);\\\\n}\\\\nvec3 compute_position_from_velocity(vec3 position, vec3 velocity, float time_delta){\\\\n\\\\treturn position + (velocity * time_delta);\\\\n}\\\\nvec4 compute_position_from_velocity(vec4 position, vec4 velocity, float time_delta){\\\\n\\\\treturn position + (velocity * time_delta);\\\\n}\\\\\\\");t.addDefinitions(this,[n,i]);const r=uf.any(this.variableForInput(PR.POSITION)),s=uf.any(this.variableForInput(PR.VELOCITY)),o=uf.float(this.variableForInput(PR.MASS)),a=uf.any(this.variableForInput(PR.FORCE)),l=this.glVarName(IR.POSITION),c=this.glVarName(IR.VELOCITY),u=`${e} ${c} = compute_velocity_from_acceleration(${[s,a,o,RR.DELTA_TIME].join(\\\\\\\", \\\\\\\")})`,h=`${e} ${l} = compute_position_from_velocity(${[r,c,RR.DELTA_TIME].join(\\\\\\\", \\\\\\\")})`;t.addBodyLines(this,[u,h])}}var UR,GR=\\\\\\\"\\\\n\\\\n// https://github.com/mattatz/ShibuyaCrowd/blob/master/source/shaders/common/quaternion.glsl\\\\nvec4 quatMult(vec4 q1, vec4 q2)\\\\n{\\\\n\\\\treturn vec4(\\\\n\\\\tq1.w * q2.x + q1.x * q2.w + q1.z * q2.y - q1.y * q2.z,\\\\n\\\\tq1.w * q2.y + q1.y * q2.w + q1.x * q2.z - q1.z * q2.x,\\\\n\\\\tq1.w * q2.z + q1.z * q2.w + q1.y * q2.x - q1.x * q2.y,\\\\n\\\\tq1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z\\\\n\\\\t);\\\\n}\\\\n// http://glmatrix.net/docs/quat.js.html#line97\\\\n//   let ax = a[0], ay = a[1], az = a[2], aw = a[3];\\\\n\\\\n//   let bx = b[0], by = b[1], bz = b[2], bw = b[3];\\\\n\\\\n//   out[0] = ax * bw + aw * bx + ay * bz - az * by;\\\\n\\\\n//   out[1] = ay * bw + aw * by + az * bx - ax * bz;\\\\n\\\\n//   out[2] = az * bw + aw * bz + ax * by - ay * bx;\\\\n\\\\n//   out[3] = aw * bw - ax * bx - ay * by - az * bz;\\\\n\\\\n//   return out\\\\n\\\\n\\\\n\\\\n// http://www.neilmendoza.com/glsl-rotation-about-an-arbitrary-axis/\\\\nmat4 rotationMatrix(vec3 axis, float angle)\\\\n{\\\\n\\\\taxis = normalize(axis);\\\\n\\\\tfloat s = sin(angle);\\\\n\\\\tfloat c = cos(angle);\\\\n\\\\tfloat oc = 1.0 - c;\\\\n\\\\n \\\\treturn mat4(oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s,  oc * axis.z * axis.x + axis.y * s, 0.0, oc * axis.x * axis.y + axis.z * s,  oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s,  0.0, oc * axis.z * axis.x - axis.y * s,  oc * axis.y * axis.z + axis.x * s,  oc * axis.z * axis.z + c, 0.0, 0.0, 0.0, 0.0, 1.0);\\\\n}\\\\n\\\\n// https://www.geeks3d.com/20141201/how-to-rotate-a-vertex-by-a-quaternion-in-glsl/\\\\nvec4 quatFromAxisAngle(vec3 axis, float angle)\\\\n{\\\\n\\\\tvec4 qr;\\\\n\\\\tfloat half_angle = (angle * 0.5); // * 3.14159 / 180.0;\\\\n\\\\tfloat sin_half_angle = sin(half_angle);\\\\n\\\\tqr.x = axis.x * sin_half_angle;\\\\n\\\\tqr.y = axis.y * sin_half_angle;\\\\n\\\\tqr.z = axis.z * sin_half_angle;\\\\n\\\\tqr.w = cos(half_angle);\\\\n\\\\treturn qr;\\\\n}\\\\nvec3 rotateWithAxisAngle(vec3 position, vec3 axis, float angle)\\\\n{\\\\n\\\\tvec4 q = quatFromAxisAngle(axis, angle);\\\\n\\\\tvec3 v = position.xyz;\\\\n\\\\treturn v + 2.0 * cross(q.xyz, cross(q.xyz, v) + q.w * v);\\\\n}\\\\n// vec3 applyQuaternionToVector( vec4 q, vec3 v ){\\\\n// \\\\treturn v + 2.0 * cross( q.xyz, cross( q.xyz, v ) + q.w * v );\\\\n// }\\\\nvec3 rotateWithQuat( vec3 v, vec4 q )\\\\n{\\\\n\\\\t// vec4 qv = multQuat( quat, vec4(vec, 0.0) );\\\\n\\\\t// return multQuat( qv, vec4(-quat.x, -quat.y, -quat.z, quat.w) ).xyz;\\\\n\\\\treturn v + 2.0 * cross( q.xyz, cross( q.xyz, v ) + q.w * v );\\\\n}\\\\n// https://github.com/glslify/glsl-look-at/blob/gh-pages/index.glsl\\\\n// mat3 rotation_matrix(vec3 origin, vec3 target, float roll) {\\\\n// \\\\tvec3 rr = vec3(sin(roll), cos(roll), 0.0);\\\\n// \\\\tvec3 ww = normalize(target - origin);\\\\n// \\\\tvec3 uu = normalize(cross(ww, rr));\\\\n// \\\\tvec3 vv = normalize(cross(uu, ww));\\\\n\\\\n// \\\\treturn mat3(uu, vv, ww);\\\\n// }\\\\n// mat3 rotation_matrix(vec3 target, float roll) {\\\\n// \\\\tvec3 rr = vec3(sin(roll), cos(roll), 0.0);\\\\n// \\\\tvec3 ww = normalize(target);\\\\n// \\\\tvec3 uu = normalize(cross(ww, rr));\\\\n// \\\\tvec3 vv = normalize(cross(uu, ww));\\\\n\\\\n// \\\\treturn mat3(uu, vv, ww);\\\\n// }\\\\n\\\\nfloat vectorAngle(vec3 start, vec3 dest){\\\\n\\\\tstart = normalize(start);\\\\n\\\\tdest = normalize(dest);\\\\n\\\\n\\\\tfloat cosTheta = dot(start, dest);\\\\n\\\\tvec3 c1 = cross(start, dest);\\\\n\\\\t// We use the dot product of the cross with the Y axis.\\\\n\\\\t// This is a little arbitrary, but can still give a good sense of direction\\\\n\\\\tvec3 y_axis = vec3(0.0, 1.0, 0.0);\\\\n\\\\tfloat d1 = dot(c1, y_axis);\\\\n\\\\tfloat angle = acos(cosTheta) * sign(d1);\\\\n\\\\treturn angle;\\\\n}\\\\n\\\\n// http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-17-quaternions/#i-need-an-equivalent-of-glulookat-how-do-i-orient-an-object-towards-a-point-\\\\nvec4 vectorAlign(vec3 start, vec3 dest){\\\\n\\\\tstart = normalize(start);\\\\n\\\\tdest = normalize(dest);\\\\n\\\\n\\\\tfloat cosTheta = dot(start, dest);\\\\n\\\\tvec3 axis;\\\\n\\\\n\\\\t// if (cosTheta < -1 + 0.001f){\\\\n\\\\t// \\\\t// special case when vectors in opposite directions:\\\\n\\\\t// \\\\t// there is no ideal rotation axis\\\\n\\\\t// \\\\t// So guess one; any will do as long as it's perpendicular to start\\\\n\\\\t// \\\\taxis = cross(vec3(0.0f, 0.0f, 1.0f), start);\\\\n\\\\t// \\\\tif (length2(axis) < 0.01 ) // bad luck, they were parallel, try again!\\\\n\\\\t// \\\\t\\\\taxis = cross(vec3(1.0f, 0.0f, 0.0f), start);\\\\n\\\\n\\\\t// \\\\taxis = normalize(axis);\\\\n\\\\t// \\\\treturn gtx::quaternion::angleAxis(glm::radians(180.0f), axis);\\\\n\\\\t// }\\\\n\\\\tif(cosTheta > (1.0 - 0.0001) || cosTheta < (-1.0 + 0.0001) ){\\\\n\\\\t\\\\taxis = normalize(cross(start, vec3(0.0, 1.0, 0.0)));\\\\n\\\\t\\\\tif (length(axis) < 0.001 ){ // bad luck, they were parallel, try again!\\\\n\\\\t\\\\t\\\\taxis = normalize(cross(start, vec3(1.0, 0.0, 0.0)));\\\\n\\\\t\\\\t}\\\\n\\\\t} else {\\\\n\\\\t\\\\taxis = normalize(cross(start, dest));\\\\n\\\\t}\\\\n\\\\n\\\\tfloat angle = acos(cosTheta);\\\\n\\\\n\\\\treturn quatFromAxisAngle(axis, angle);\\\\n}\\\\nvec4 vectorAlignWithUp(vec3 start, vec3 dest, vec3 up){\\\\n\\\\tvec4 rot1 = vectorAlign(start, dest);\\\\n\\\\tup = normalize(up);\\\\n\\\\n\\\\t// Recompute desiredUp so that it's perpendicular to the direction\\\\n\\\\t// You can skip that part if you really want to force desiredUp\\\\n\\\\t// vec3 right = normalize(cross(dest, up));\\\\n\\\\t// up = normalize(cross(right, dest));\\\\n\\\\n\\\\t// Because of the 1rst rotation, the up is probably completely screwed up.\\\\n\\\\t// Find the rotation between the up of the rotated object, and the desired up\\\\n\\\\tvec3 newUp = rotateWithQuat(vec3(0.0, 1.0, 0.0), rot1);//rot1 * vec3(0.0, 1.0, 0.0);\\\\n\\\\tvec4 rot2 = vectorAlign(up, newUp);\\\\n\\\\n\\\\t// return rot1;\\\\n\\\\treturn rot2;\\\\n\\\\t// return multQuat(rot1, rot2);\\\\n\\\\t// return rot2 * rot1;\\\\n\\\\n}\\\\n\\\\n// https://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\\\\nfloat quatToAngle(vec4 q){\\\\n\\\\treturn 2.0 * acos(q.w);\\\\n}\\\\nvec3 quatToAxis(vec4 q){\\\\n\\\\treturn vec3(\\\\n\\\\t\\\\tq.x / sqrt(1.0-q.w*q.w),\\\\n\\\\t\\\\tq.y / sqrt(1.0-q.w*q.w),\\\\n\\\\t\\\\tq.z / sqrt(1.0-q.w*q.w)\\\\n\\\\t);\\\\n}\\\\n\\\\nvec4 align(vec3 dir, vec3 up){\\\\n\\\\tvec3 start_dir = vec3(0.0, 0.0, 1.0);\\\\n\\\\tvec3 start_up = vec3(0.0, 1.0, 0.0);\\\\n\\\\tvec4 rot1 = vectorAlign(start_dir, dir);\\\\n\\\\tup = normalize(up);\\\\n\\\\n\\\\t// Recompute desiredUp so that it's perpendicular to the direction\\\\n\\\\t// You can skip that part if you really want to force desiredUp\\\\n\\\\tvec3 right = normalize(cross(dir, up));\\\\n\\\\tif(length(right)<0.001){\\\\n\\\\t\\\\tright = vec3(1.0, 0.0, 0.0);\\\\n\\\\t}\\\\n\\\\tup = normalize(cross(right, dir));\\\\n\\\\n\\\\t// Because of the 1rst rotation, the up is probably completely screwed up.\\\\n\\\\t// Find the rotation between the up of the rotated object, and the desired up\\\\n\\\\tvec3 newUp = rotateWithQuat(start_up, rot1);//rot1 * vec3(0.0, 1.0, 0.0);\\\\n\\\\tvec4 rot2 = vectorAlign(normalize(newUp), up);\\\\n\\\\n\\\\t// return rot1;\\\\n\\\\treturn quatMult(rot1, rot2);\\\\n\\\\t// return rot2 * rot1;\\\\n\\\\n}\\\\\\\";!function(t){t.DIR=\\\\\\\"dir\\\\\\\",t.UP=\\\\\\\"up\\\\\\\"}(UR||(UR={}));const VR=[UR.DIR,UR.UP],HR={[UR.DIR]:[0,0,1],[UR.UP]:[0,1,0]};class jR extends zO{static type(){return\\\\\\\"align\\\\\\\"}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function((t=>VR[t])),this.io.connection_points.set_expected_input_types_function((()=>[Do.VEC3,Do.VEC3])),this.io.connection_points.set_expected_output_types_function((()=>[Do.VEC4]))}paramDefaultValue(t){return HR[t]}gl_method_name(){return\\\\\\\"align\\\\\\\"}gl_function_definitions(){return[new Tf(this,GR)]}}var WR;!function(t){t.LINEAR=\\\\\\\"Linear\\\\\\\",t.GAMMA=\\\\\\\"Gamma\\\\\\\",t.SRGB=\\\\\\\"sRGB\\\\\\\",t.RGBE=\\\\\\\"RGBE\\\\\\\",t.RGBM=\\\\\\\"RGBM\\\\\\\",t.RGBD=\\\\\\\"RGBD\\\\\\\",t.LogLuv=\\\\\\\"LogLuv\\\\\\\"}(WR||(WR={}));const qR=[WR.LINEAR,WR.GAMMA,WR.SRGB,WR.RGBE,WR.RGBM,WR.RGBD,WR.LogLuv];const XR=new class extends aa{constructor(){super(...arguments),this.color=oa.VECTOR4([1,1,1,1]),this.from=oa.INTEGER(qR.indexOf(WR.LINEAR),{menu:{entries:qR.map(((t,e)=>({name:t,value:e})))}}),this.to=oa.INTEGER(qR.indexOf(WR.GAMMA),{menu:{entries:qR.map(((t,e)=>({name:t,value:e})))}}),this.gammaFactor=oa.FLOAT(2.2)}};class YR extends df{constructor(){super(...arguments),this.paramsConfig=XR}static type(){return\\\\\\\"colorCorrect\\\\\\\"}initializeNode(){this.io.connection_points.spare_params.set_inputless_param_names([\\\\\\\"to\\\\\\\",\\\\\\\"from\\\\\\\"]),this.io.outputs.setNamedOutputConnectionPoints([new Vo(YR.OUTPUT_NAME,Do.VEC4)])}setLines(t){const e=qR[this.pv.from],n=qR[this.pv.to],i=this.glVarName(YR.OUTPUT_NAME),r=uf.any(this.variableForInput(YR.INPUT_NAME)),s=[];if(e!=n){const t=`${e}To${n}`,o=[];if(o.push(r),e==WR.GAMMA||n==WR.GAMMA){const t=uf.any(this.variableForInputParam(this.p.gammaFactor));o.push(t)}s.push(`vec4 ${i} = ${t}(${o.join(\\\\\\\", \\\\\\\")})`)}else s.push(`vec4 ${i} = ${r}`);t.addBodyLines(this,s)}}var $R,JR;YR.INPUT_NAME=\\\\\\\"color\\\\\\\",YR.INPUT_GAMMA_FACTOR=\\\\\\\"gammaFactor\\\\\\\",YR.OUTPUT_NAME=\\\\\\\"out\\\\\\\",function(t){t.EQUAL=\\\\\\\"Equal\\\\\\\",t.LESS_THAN=\\\\\\\"Less Than\\\\\\\",t.GREATER_THAN=\\\\\\\"Greater Than\\\\\\\",t.LESS_THAN_OR_EQUAL=\\\\\\\"Less Than Or Equal\\\\\\\",t.GREATER_THAN_OR_EQUAL=\\\\\\\"Greater Than Or Equal\\\\\\\",t.NOT_EQUAL=\\\\\\\"Not Equal\\\\\\\"}($R||($R={})),function(t){t.EQUAL=\\\\\\\"==\\\\\\\",t.LESS_THAN=\\\\\\\"<\\\\\\\",t.GREATER_THAN=\\\\\\\">\\\\\\\",t.LESS_THAN_OR_EQUAL=\\\\\\\"<=\\\\\\\",t.GREATER_THAN_OR_EQUAL=\\\\\\\">=\\\\\\\",t.NOT_EQUAL=\\\\\\\"!=\\\\\\\"}(JR||(JR={}));const ZR=[$R.EQUAL,$R.LESS_THAN,$R.GREATER_THAN,$R.LESS_THAN_OR_EQUAL,$R.GREATER_THAN_OR_EQUAL,$R.NOT_EQUAL],QR=[JR.EQUAL,JR.LESS_THAN,JR.GREATER_THAN,JR.LESS_THAN_OR_EQUAL,JR.GREATER_THAN_OR_EQUAL,JR.NOT_EQUAL],KR=[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\",\\\\\\\"w\\\\\\\"];const tP=new class extends aa{constructor(){super(...arguments),this.test=oa.INTEGER(0,{menu:{entries:ZR.map(((t,e)=>({name:`${QR[e].padEnd(2,\\\\\\\" \\\\\\\")} (${t})`,value:e})))}})}};class eP extends df{constructor(){super(...arguments),this.paramsConfig=tP}static type(){return\\\\\\\"compare\\\\\\\"}initializeNode(){super.initializeNode(),this.io.connection_points.spare_params.set_inputless_param_names([\\\\\\\"test\\\\\\\"]),this.io.connection_points.initializeNode(),this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this)),this.io.connection_points.set_output_name_function((t=>\\\\\\\"val\\\\\\\")),this.io.connection_points.set_expected_input_types_function(this._expected_input_type.bind(this)),this.io.connection_points.set_expected_output_types_function((()=>[Do.BOOL]))}set_test_name(t){this.p.test.set(ZR.indexOf(t))}_gl_input_name(t){return[\\\\\\\"value0\\\\\\\",\\\\\\\"value1\\\\\\\"][t]}_expected_input_type(){const t=this.io.connection_points.first_input_connection_type()||Do.FLOAT;return[t,t]}setLines(t){const e=[],n=this.glVarName(\\\\\\\"val\\\\\\\"),i=QR[this.pv.test],r=uf.any(this.variableForInput(this._gl_input_name(0))),s=uf.any(this.variableForInput(this._gl_input_name(1))),o=this.io.inputs.namedInputConnectionPoints()[0];let a=1;if(o&&(a=Go[o.type()]||1),a>1){let t=[];for(let n=0;n<a;n++){const o=this.glVarName(`tmp_value_${n}`),a=KR[n];t.push(o),e.push(`bool ${o} = (${r}.${a} ${i} ${s}.${a})`)}e.push(`bool ${n} = (${t.join(\\\\\\\" && \\\\\\\")})`)}else e.push(`bool ${n} = (${r} ${i} ${s})`);t.addBodyLines(this,e)}}class nP extends BO{static type(){return\\\\\\\"complement\\\\\\\"}gl_method_name(){return\\\\\\\"complement\\\\\\\"}gl_function_definitions(){return[new Tf(this,\\\\\\\"float complement(float x){return 1.0-x;}\\\\nvec2 complement(vec2 x){return vec2(1.0-x.x, 1.0-x.y);}\\\\nvec3 complement(vec3 x){return vec3(1.0-x.x, 1.0-x.y, 1.0-x.z);}\\\\nvec4 complement(vec4 x){return vec4(1.0-x.x, 1.0-x.y, 1.0-x.z, 1.0-x.w);}\\\\n\\\\\\\")]}}function iP(t){return{visibleIf:{type:ko.indexOf(t)}}}const rP=new class extends aa{constructor(){super(...arguments),this.type=oa.INTEGER(ko.indexOf(Do.FLOAT),{menu:{entries:ko.map(((t,e)=>({name:t,value:e})))}}),this.bool=oa.BOOLEAN(0,iP(Do.BOOL)),this.int=oa.INTEGER(0,iP(Do.INT)),this.float=oa.FLOAT(0,iP(Do.FLOAT)),this.vec2=oa.VECTOR2([0,0],iP(Do.VEC2)),this.vec3=oa.VECTOR3([0,0,0],iP(Do.VEC3)),this.vec4=oa.VECTOR4([0,0,0,0],iP(Do.VEC4))}};class sP extends df{constructor(){super(...arguments),this.paramsConfig=rP,this._allow_inputs_created_from_params=!1}static type(){return\\\\\\\"constant\\\\\\\"}initializeNode(){this.io.connection_points.set_output_name_function((t=>sP.OUTPUT_NAME)),this.io.connection_points.set_expected_input_types_function((()=>[])),this.io.connection_points.set_expected_output_types_function((()=>[this._current_connection_type]))}setLines(t){const e=this._current_param;if(e){const n=this._current_connection_type;let i=uf.any(e.value);e.name()==this.p.int.name()&&m.isNumber(e.value)&&(i=uf.integer(e.value));const r=`${n} ${this._current_var_name} = ${i}`;t.addBodyLines(this,[r])}else console.warn(`no param found for constant node for type '${this.pv.type}'`)}get _current_connection_type(){null==this.pv.type&&console.warn(\\\\\\\"constant gl node type if not valid\\\\\\\");const t=ko[this.pv.type];return null==t&&console.warn(\\\\\\\"constant gl node type if not valid\\\\\\\"),t}get _current_param(){this._params_by_type=this._params_by_type||new Map([[Do.BOOL,this.p.bool],[Do.INT,this.p.int],[Do.FLOAT,this.p.float],[Do.VEC2,this.p.vec2],[Do.VEC3,this.p.vec3],[Do.VEC4,this.p.vec4]]);const t=ko[this.pv.type];return this._params_by_type.get(t)}get _current_var_name(){return this.glVarName(sP.OUTPUT_NAME)}set_gl_type(t){this.p.type.set(ko.indexOf(t))}}sP.OUTPUT_NAME=\\\\\\\"val\\\\\\\";const oP=\\\\\\\"cross\\\\\\\";const aP=new class extends aa{constructor(){super(...arguments),this.x=oa.VECTOR3([0,0,1]),this.y=oa.VECTOR3([0,1,0])}};class lP extends df{constructor(){super(...arguments),this.paramsConfig=aP}static type(){return\\\\\\\"cross\\\\\\\"}initializeNode(){super.initializeNode(),this.io.outputs.setNamedOutputConnectionPoints([new Vo(oP,Do.VEC3)])}setLines(t){const e=uf.float(this.variableForInputParam(this.p.x)),n=uf.float(this.variableForInputParam(this.p.y)),i=`vec3 ${this.glVarName(oP)} = cross(${e}, ${n})`;t.addBodyLines(this,[i])}}class cP extends(yR(\\\\\\\"cycle\\\\\\\",{in:[\\\\\\\"in\\\\\\\",\\\\\\\"min\\\\\\\",\\\\\\\"max\\\\\\\"],default:{max:1},functions:[\\\\\\\"float cycle(float val, float val_min, float val_max){\\\\n\\\\tif(val >= val_min && val < val_max){\\\\n\\\\t\\\\treturn val;\\\\n\\\\t} else {\\\\n\\\\t\\\\tfloat range = val_max - val_min;\\\\n\\\\t\\\\tif(val >= val_max){\\\\n\\\\t\\\\t\\\\tfloat delta = (val - val_max);\\\\n\\\\t\\\\t\\\\treturn val_min + mod(delta, range);\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\tfloat delta = (val_min - val);\\\\n\\\\t\\\\t\\\\treturn val_max - mod(delta, range);\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n}\\\\\\\"]})){}var uP=\\\\\\\"float disk_feather(float dist, float radius, float feather){\\\\n\\\\tif(feather <= 0.0){\\\\n\\\\t\\\\tif(dist < radius){return 1.0;}else{return 0.0;}\\\\n\\\\t} else {\\\\n\\\\t\\\\tfloat half_feather = feather * 0.5;\\\\n\\\\t\\\\tif(dist < (radius - half_feather)){\\\\n\\\\t\\\\t\\\\treturn 1.0;\\\\n\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\tif(dist > (radius + half_feather)){\\\\n\\\\t\\\\t\\\\t\\\\treturn 0.0;\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\t\\\\tfloat feather_start = (radius - half_feather);\\\\n\\\\t\\\\t\\\\t\\\\tfloat blend = 1.0 - (dist - feather_start) / feather;\\\\n\\\\t\\\\t\\\\t\\\\treturn blend;\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n}\\\\n\\\\nfloat disk2d(vec2 pos, vec2 center, float radius, float feather){\\\\n\\\\tfloat dist = distance(pos, center);\\\\n\\\\treturn disk_feather(dist, radius, feather);\\\\n}\\\\n\\\\n// function could be called sphere, but is an overload of disk, and is the same\\\\nfloat disk3d(vec3 pos, vec3 center, float radius, float feather){\\\\n\\\\tfloat dist = distance(pos, center);\\\\n\\\\treturn disk_feather(dist, radius, feather);\\\\n}\\\\\\\";const hP=new class extends aa{constructor(){super(...arguments),this.position=oa.VECTOR2([0,0]),this.center=oa.VECTOR2([0,0]),this.radius=oa.FLOAT(1),this.feather=oa.FLOAT(.1)}};class dP extends df{constructor(){super(...arguments),this.paramsConfig=hP}static type(){return\\\\\\\"disk\\\\\\\"}initializeNode(){super.initializeNode(),this.io.outputs.setNamedOutputConnectionPoints([new Vo(\\\\\\\"float\\\\\\\",Do.FLOAT)])}setLines(t){const e=uf.vector2(this.variableForInputParam(this.p.position)),n=uf.vector2(this.variableForInputParam(this.p.center)),i=uf.float(this.variableForInputParam(this.p.radius)),r=uf.float(this.variableForInputParam(this.p.feather)),s=`float ${this.glVarName(\\\\\\\"float\\\\\\\")} = disk2d(${e}, ${n}, ${i}, ${r})`;t.addBodyLines(this,[s]),t.addDefinitions(this,[new Tf(this,uP)])}}var pP=\\\\\\\"\\\\nfloat bounceOut(float t) {\\\\n  const float a = 4.0 / 11.0;\\\\n  const float b = 8.0 / 11.0;\\\\n  const float c = 9.0 / 10.0;\\\\n\\\\n  const float ca = 4356.0 / 361.0;\\\\n  const float cb = 35442.0 / 1805.0;\\\\n  const float cc = 16061.0 / 1805.0;\\\\n\\\\n  float t2 = t * t;\\\\n\\\\n  return t < a\\\\n    ? 7.5625 * t2\\\\n    : t < b\\\\n      ? 9.075 * t2 - 9.9 * t + 3.4\\\\n      : t < c\\\\n        ? ca * t2 - cb * t + cc\\\\n        : 10.8 * t * t - 20.52 * t + 10.72;\\\\n}\\\\n\\\\n\\\\\\\";const _P=[\\\\\\\"back-in-out\\\\\\\",\\\\\\\"back-in\\\\\\\",\\\\\\\"back-out\\\\\\\",\\\\\\\"bounce-in-out\\\\\\\",\\\\\\\"bounce-in\\\\\\\",\\\\\\\"bounce-out\\\\\\\",\\\\\\\"circular-in-out\\\\\\\",\\\\\\\"circular-in\\\\\\\",\\\\\\\"circular-out\\\\\\\",\\\\\\\"cubic-in-out\\\\\\\",\\\\\\\"cubic-in\\\\\\\",\\\\\\\"cubic-out\\\\\\\",\\\\\\\"elastic-in-out\\\\\\\",\\\\\\\"elastic-in\\\\\\\",\\\\\\\"elastic-out\\\\\\\",\\\\\\\"exponential-in-out\\\\\\\",\\\\\\\"exponential-in\\\\\\\",\\\\\\\"exponential-out\\\\\\\",\\\\\\\"linear\\\\\\\",\\\\\\\"quadratic-in-out\\\\\\\",\\\\\\\"quadratic-in\\\\\\\",\\\\\\\"quadratic-out\\\\\\\",\\\\\\\"sine-in-out\\\\\\\",\\\\\\\"sine-in\\\\\\\",\\\\\\\"sine-out\\\\\\\"],mP={\\\\\\\"circular-in-out\\\\\\\":\\\\\\\"float circularInOut(float t) {\\\\n  return t < 0.5\\\\n    ? 0.5 * (1.0 - sqrt(1.0 - 4.0 * t * t))\\\\n    : 0.5 * (sqrt((3.0 - 2.0 * t) * (2.0 * t - 1.0)) + 1.0);\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"exponential-in-out\\\\\\\":\\\\\\\"float exponentialInOut(float t) {\\\\n  return t == 0.0 || t == 1.0\\\\n    ? t\\\\n    : t < 0.5\\\\n      ? +0.5 * pow(2.0, (20.0 * t) - 10.0)\\\\n      : -0.5 * pow(2.0, 10.0 - (t * 20.0)) + 1.0;\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"circular-in\\\\\\\":\\\\\\\"float circularIn(float t) {\\\\n  return 1.0 - sqrt(1.0 - t * t);\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"elastic-out\\\\\\\":\\\\\\\"#ifndef HALF_PI\\\\n#define HALF_PI 1.5707963267948966\\\\n#endif\\\\n\\\\nfloat elasticOut(float t) {\\\\n  return sin(-13.0 * (t + 1.0) * HALF_PI) * pow(2.0, -10.0 * t) + 1.0;\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"cubic-in\\\\\\\":\\\\\\\"float cubicIn(float t) {\\\\n  return t * t * t;\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"exponential-out\\\\\\\":\\\\\\\"float exponentialOut(float t) {\\\\n  return t == 1.0 ? t : 1.0 - pow(2.0, -10.0 * t);\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"quintic-out\\\\\\\":\\\\\\\"float quinticOut(float t) {\\\\n  return 1.0 - (pow(t - 1.0, 5.0));\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"elastic-in-out\\\\\\\":\\\\\\\"#ifndef HALF_PI\\\\n#define HALF_PI 1.5707963267948966\\\\n#endif\\\\n\\\\nfloat elasticInOut(float t) {\\\\n  return t < 0.5\\\\n    ? 0.5 * sin(+13.0 * HALF_PI * 2.0 * t) * pow(2.0, 10.0 * (2.0 * t - 1.0))\\\\n    : 0.5 * sin(-13.0 * HALF_PI * ((2.0 * t - 1.0) + 1.0)) * pow(2.0, -10.0 * (2.0 * t - 1.0)) + 1.0;\\\\n}\\\\n\\\\n\\\\\\\",linear:\\\\\\\"float linear(float t) {\\\\n  return t;\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"circular-out\\\\\\\":\\\\\\\"float circularOut(float t) {\\\\n  return sqrt((2.0 - t) * t);\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"back-in-out\\\\\\\":\\\\\\\"\\\\nfloat backInOut(float t) {\\\\n  float f = t < 0.5\\\\n    ? 2.0 * t\\\\n    : 1.0 - (2.0 * t - 1.0);\\\\n\\\\n  float g = pow(f, 3.0) - f * sin(f * PI);\\\\n\\\\n  return t < 0.5\\\\n    ? 0.5 * g\\\\n    : 0.5 * (1.0 - g) + 0.5;\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"back-in\\\\\\\":\\\\\\\"\\\\nfloat backIn(float t) {\\\\n  return pow(t, 3.0) - t * sin(t * PI);\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"sine-in\\\\\\\":\\\\\\\"#ifndef HALF_PI\\\\n#define HALF_PI 1.5707963267948966\\\\n#endif\\\\n\\\\nfloat sineIn(float t) {\\\\n  return sin((t - 1.0) * HALF_PI) + 1.0;\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"back-out\\\\\\\":\\\\\\\"\\\\nfloat backOut(float t) {\\\\n  float f = 1.0 - t;\\\\n  return 1.0 - (pow(f, 3.0) - f * sin(f * PI));\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"quartic-in-out\\\\\\\":\\\\\\\"float quarticInOut(float t) {\\\\n  return t < 0.5\\\\n    ? +8.0 * pow(t, 4.0)\\\\n    : -8.0 * pow(t - 1.0, 4.0) + 1.0;\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"quadratic-in\\\\\\\":\\\\\\\"float quadraticIn(float t) {\\\\n  return t * t;\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"cubic-in-out\\\\\\\":\\\\\\\"float cubicInOut(float t) {\\\\n  return t < 0.5\\\\n    ? 4.0 * t * t * t\\\\n    : 0.5 * pow(2.0 * t - 2.0, 3.0) + 1.0;\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"elastic-in\\\\\\\":\\\\\\\"#ifndef HALF_PI\\\\n#define HALF_PI 1.5707963267948966\\\\n#endif\\\\n\\\\nfloat elasticIn(float t) {\\\\n  return sin(13.0 * t * HALF_PI) * pow(2.0, 10.0 * (t - 1.0));\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"bounce-out\\\\\\\":pP,\\\\\\\"quadratic-in-out\\\\\\\":\\\\\\\"float quadraticInOut(float t) {\\\\n  float p = 2.0 * t * t;\\\\n  return t < 0.5 ? p : -p + (4.0 * t) - 1.0;\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"exponential-in\\\\\\\":\\\\\\\"float exponentialIn(float t) {\\\\n  return t == 0.0 ? t : pow(2.0, 10.0 * (t - 1.0));\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"quintic-in-out\\\\\\\":\\\\\\\"float quinticInOut(float t) {\\\\n  return t < 0.5\\\\n    ? +16.0 * pow(t, 5.0)\\\\n    : -0.5 * pow(2.0 * t - 2.0, 5.0) + 1.0;\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"sine-in-out\\\\\\\":\\\\\\\"\\\\nfloat sineInOut(float t) {\\\\n  return -0.5 * (cos(PI * t) - 1.0);\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"cubic-out\\\\\\\":\\\\\\\"float cubicOut(float t) {\\\\n  float f = t - 1.0;\\\\n  return f * f * f + 1.0;\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"quadratic-out\\\\\\\":\\\\\\\"float quadraticOut(float t) {\\\\n  return -t * (t - 2.0);\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"bounce-in-out\\\\\\\":\\\\\\\"\\\\nfloat bounceInOut(float t) {\\\\n  return t < 0.5\\\\n    ? 0.5 * (1.0 - bounceOut(1.0 - t * 2.0))\\\\n    : 0.5 * bounceOut(t * 2.0 - 1.0) + 0.5;\\\\n}\\\\n\\\\n\\\\n\\\\n\\\\\\\",\\\\\\\"quintic-in\\\\\\\":\\\\\\\"float quinticIn(float t) {\\\\n  return pow(t, 5.0);\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"quartic-in\\\\\\\":\\\\\\\"float quarticIn(float t) {\\\\n  return pow(t, 4.0);\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"quartic-out\\\\\\\":\\\\\\\"float quarticOut(float t) {\\\\n  return pow(t - 1.0, 3.0) * (1.0 - t) + 1.0;\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"bounce-in\\\\\\\":\\\\\\\"\\\\nfloat bounceIn(float t) {\\\\n  return 1.0 - bounceOut(1.0 - t);\\\\n}\\\\n\\\\n\\\\\\\",\\\\\\\"sine-out\\\\\\\":\\\\\\\"#ifndef HALF_PI\\\\n#define HALF_PI 1.5707963267948966\\\\n#endif\\\\n\\\\nfloat sineOut(float t) {\\\\n  return sin(t * HALF_PI);\\\\n}\\\\n\\\\n\\\\\\\"},fP={\\\\\\\"bounce-in\\\\\\\":[pP],\\\\\\\"bounce-in-out\\\\\\\":[pP]},gP={\\\\\\\"circular-in-out\\\\\\\":\\\\\\\"circularInOut\\\\\\\",\\\\\\\"exponential-in-out\\\\\\\":\\\\\\\"exponentialInOut\\\\\\\",\\\\\\\"circular-in\\\\\\\":\\\\\\\"circularIn\\\\\\\",\\\\\\\"elastic-out\\\\\\\":\\\\\\\"elasticOut\\\\\\\",\\\\\\\"cubic-in\\\\\\\":\\\\\\\"cubicIn\\\\\\\",\\\\\\\"exponential-out\\\\\\\":\\\\\\\"exponentialOut\\\\\\\",\\\\\\\"quintic-out\\\\\\\":\\\\\\\"quinticOut\\\\\\\",\\\\\\\"elastic-in-out\\\\\\\":\\\\\\\"elasticInOut\\\\\\\",linear:\\\\\\\"linear\\\\\\\",\\\\\\\"circular-out\\\\\\\":\\\\\\\"circularOut\\\\\\\",\\\\\\\"back-in-out\\\\\\\":\\\\\\\"backInOut\\\\\\\",\\\\\\\"back-in\\\\\\\":\\\\\\\"backIn\\\\\\\",\\\\\\\"sine-in\\\\\\\":\\\\\\\"sineIn\\\\\\\",\\\\\\\"back-out\\\\\\\":\\\\\\\"backOut\\\\\\\",\\\\\\\"quartic-in-out\\\\\\\":\\\\\\\"quarticInOut\\\\\\\",\\\\\\\"quadratic-in\\\\\\\":\\\\\\\"quadraticIn\\\\\\\",\\\\\\\"cubic-in-out\\\\\\\":\\\\\\\"cubicInOut\\\\\\\",\\\\\\\"elastic-in\\\\\\\":\\\\\\\"elasticIn\\\\\\\",\\\\\\\"bounce-out\\\\\\\":\\\\\\\"bounceOut\\\\\\\",\\\\\\\"quadratic-in-out\\\\\\\":\\\\\\\"quadraticInOut\\\\\\\",\\\\\\\"exponential-in\\\\\\\":\\\\\\\"exponentialIn\\\\\\\",\\\\\\\"quintic-in-out\\\\\\\":\\\\\\\"quinticInOut\\\\\\\",\\\\\\\"sine-in-out\\\\\\\":\\\\\\\"sineInOut\\\\\\\",\\\\\\\"cubic-out\\\\\\\":\\\\\\\"cubicOut\\\\\\\",\\\\\\\"quadratic-out\\\\\\\":\\\\\\\"quadraticOut\\\\\\\",\\\\\\\"bounce-in-out\\\\\\\":\\\\\\\"bounceInOut\\\\\\\",\\\\\\\"quintic-in\\\\\\\":\\\\\\\"quinticIn\\\\\\\",\\\\\\\"quartic-in\\\\\\\":\\\\\\\"quarticIn\\\\\\\",\\\\\\\"quartic-out\\\\\\\":\\\\\\\"quarticOut\\\\\\\",\\\\\\\"bounce-in\\\\\\\":\\\\\\\"bounceIn\\\\\\\",\\\\\\\"sine-out\\\\\\\":\\\\\\\"sineOut\\\\\\\"},vP=_P.indexOf(\\\\\\\"sine-in-out\\\\\\\");const yP=new class extends aa{constructor(){super(...arguments),this.type=oa.INTEGER(vP,{menu:{entries:_P.map(((t,e)=>({name:t,value:e})))}}),this.input=oa.FLOAT(0)}};class xP extends df{constructor(){super(...arguments),this.paramsConfig=yP}static type(){return\\\\\\\"easing\\\\\\\"}initializeNode(){super.initializeNode(),this.io.connection_points.spare_params.set_inputless_param_names([\\\\\\\"type\\\\\\\"]),this.io.outputs.setNamedOutputConnectionPoints([new Vo(\\\\\\\"out\\\\\\\",Do.FLOAT)])}setLines(t){const e=_P[this.pv.type],n=gP[e];let i=[new Tf(this,mP[e])];const r=(fP[e]||[]).map((t=>new Tf(this,t)));r&&(i=r.concat(i));const s=uf.float(this.variableForInputParam(this.p.input)),o=`float ${this.glVarName(\\\\\\\"out\\\\\\\")} = ${n}(${s})`;t.addDefinitions(this,i),t.addBodyLines(this,[o])}}var bP=\\\\\\\"//\\\\n//\\\\n// FIT\\\\n//\\\\n//\\\\nfloat fit(float val, float srcMin, float srcMax, float destMin, float destMax){\\\\n\\\\tfloat src_range = srcMax - srcMin;\\\\n\\\\tfloat dest_range = destMax - destMin;\\\\n\\\\n\\\\tfloat r = (val - srcMin) / src_range;\\\\n\\\\treturn (r * dest_range) + destMin;\\\\n}\\\\nvec2 fit(vec2 val, vec2 srcMin, vec2 srcMax, vec2 destMin, vec2 destMax){\\\\n\\\\treturn vec2(\\\\n\\\\t\\\\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\\\\n\\\\t\\\\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y)\\\\n\\\\t);\\\\n}\\\\nvec3 fit(vec3 val, vec3 srcMin, vec3 srcMax, vec3 destMin, vec3 destMax){\\\\n\\\\treturn vec3(\\\\n\\\\t\\\\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\\\\n\\\\t\\\\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y),\\\\n\\\\t\\\\tfit(val.z, srcMin.z, srcMax.z, destMin.z, destMax.z)\\\\n\\\\t);\\\\n}\\\\nvec4 fit(vec4 val, vec4 srcMin, vec4 srcMax, vec4 destMin, vec4 destMax){\\\\n\\\\treturn vec4(\\\\n\\\\t\\\\tfit(val.x, srcMin.x, srcMax.x, destMin.x, destMax.x),\\\\n\\\\t\\\\tfit(val.y, srcMin.y, srcMax.y, destMin.y, destMax.y),\\\\n\\\\t\\\\tfit(val.z, srcMin.z, srcMax.z, destMin.z, destMax.z),\\\\n\\\\t\\\\tfit(val.w, srcMin.w, srcMax.w, destMin.w, destMax.w)\\\\n\\\\t);\\\\n}\\\\n\\\\n//\\\\n//\\\\n// FIT TO 01\\\\n// fits the range [srcMin, srcMax] to [0, 1]\\\\n//\\\\nfloat fitTo01(float val, float srcMin, float srcMax){\\\\n\\\\tfloat size = srcMax - srcMin;\\\\n\\\\treturn (val - srcMin) / size;\\\\n}\\\\nvec2 fitTo01(vec2 val, vec2 srcMin, vec2 srcMax){\\\\n\\\\treturn vec2(\\\\n\\\\t\\\\tfitTo01(val.x, srcMin.x, srcMax.x),\\\\n\\\\t\\\\tfitTo01(val.y, srcMin.y, srcMax.y)\\\\n\\\\t);\\\\n}\\\\nvec3 fitTo01(vec3 val, vec3 srcMin, vec3 srcMax){\\\\n\\\\treturn vec3(\\\\n\\\\t\\\\tfitTo01(val.x, srcMin.x, srcMax.x),\\\\n\\\\t\\\\tfitTo01(val.y, srcMin.y, srcMax.y),\\\\n\\\\t\\\\tfitTo01(val.z, srcMin.z, srcMax.z)\\\\n\\\\t);\\\\n}\\\\nvec4 fitTo01(vec4 val, vec4 srcMin, vec4 srcMax){\\\\n\\\\treturn vec4(\\\\n\\\\t\\\\tfitTo01(val.x, srcMin.x, srcMax.x),\\\\n\\\\t\\\\tfitTo01(val.y, srcMin.y, srcMax.y),\\\\n\\\\t\\\\tfitTo01(val.z, srcMin.z, srcMax.z),\\\\n\\\\t\\\\tfitTo01(val.w, srcMin.w, srcMax.w)\\\\n\\\\t);\\\\n}\\\\n\\\\n//\\\\n//\\\\n// FIT FROM 01\\\\n// fits the range [0, 1] to [destMin, destMax]\\\\n//\\\\nfloat fitFrom01(float val, float destMin, float destMax){\\\\n\\\\treturn fit(val, 0.0, 1.0, destMin, destMax);\\\\n}\\\\nvec2 fitFrom01(vec2 val, vec2 srcMin, vec2 srcMax){\\\\n\\\\treturn vec2(\\\\n\\\\t\\\\tfitFrom01(val.x, srcMin.x, srcMax.x),\\\\n\\\\t\\\\tfitFrom01(val.y, srcMin.y, srcMax.y)\\\\n\\\\t);\\\\n}\\\\nvec3 fitFrom01(vec3 val, vec3 srcMin, vec3 srcMax){\\\\n\\\\treturn vec3(\\\\n\\\\t\\\\tfitFrom01(val.x, srcMin.x, srcMax.x),\\\\n\\\\t\\\\tfitFrom01(val.y, srcMin.y, srcMax.y),\\\\n\\\\t\\\\tfitFrom01(val.z, srcMin.z, srcMax.z)\\\\n\\\\t);\\\\n}\\\\nvec4 fitFrom01(vec4 val, vec4 srcMin, vec4 srcMax){\\\\n\\\\treturn vec4(\\\\n\\\\t\\\\tfitFrom01(val.x, srcMin.x, srcMax.x),\\\\n\\\\t\\\\tfitFrom01(val.y, srcMin.y, srcMax.y),\\\\n\\\\t\\\\tfitFrom01(val.z, srcMin.z, srcMax.z),\\\\n\\\\t\\\\tfitFrom01(val.w, srcMin.w, srcMax.w)\\\\n\\\\t);\\\\n}\\\\n\\\\n//\\\\n//\\\\n// FIT FROM 01 TO VARIANCE\\\\n// fits the range [0, 1] to [center - variance, center + variance]\\\\n//\\\\nfloat fitFrom01ToVariance(float val, float center, float variance){\\\\n\\\\treturn fitFrom01(val, center - variance, center + variance);\\\\n}\\\\nvec2 fitFrom01ToVariance(vec2 val, vec2 center, vec2 variance){\\\\n\\\\treturn vec2(\\\\n\\\\t\\\\tfitFrom01ToVariance(val.x, center.x, variance.x),\\\\n\\\\t\\\\tfitFrom01ToVariance(val.y, center.y, variance.y)\\\\n\\\\t);\\\\n}\\\\nvec3 fitFrom01ToVariance(vec3 val, vec3 center, vec3 variance){\\\\n\\\\treturn vec3(\\\\n\\\\t\\\\tfitFrom01ToVariance(val.x, center.x, variance.x),\\\\n\\\\t\\\\tfitFrom01ToVariance(val.y, center.y, variance.y),\\\\n\\\\t\\\\tfitFrom01ToVariance(val.z, center.z, variance.z)\\\\n\\\\t);\\\\n}\\\\nvec4 fitFrom01ToVariance(vec4 val, vec4 center, vec4 variance){\\\\n\\\\treturn vec4(\\\\n\\\\t\\\\tfitFrom01ToVariance(val.x, center.x, variance.x),\\\\n\\\\t\\\\tfitFrom01ToVariance(val.y, center.y, variance.y),\\\\n\\\\t\\\\tfitFrom01ToVariance(val.z, center.z, variance.z),\\\\n\\\\t\\\\tfitFrom01ToVariance(val.w, center.w, variance.w)\\\\n\\\\t);\\\\n}\\\\\\\";const wP={srcMin:0,srcMax:1,destMin:0,destMax:1};class TP extends VO{static type(){return\\\\\\\"fit\\\\\\\"}_gl_input_name(t){return[\\\\\\\"val\\\\\\\",\\\\\\\"srcMin\\\\\\\",\\\\\\\"srcMax\\\\\\\",\\\\\\\"destMin\\\\\\\",\\\\\\\"destMax\\\\\\\"][t]}paramDefaultValue(t){return wP[t]}gl_method_name(){return\\\\\\\"fit\\\\\\\"}gl_function_definitions(){return[new Tf(this,bP)]}}const AP={srcMin:0,srcMax:1};class EP extends UO{static type(){return\\\\\\\"fitTo01\\\\\\\"}_gl_input_name(t){return[\\\\\\\"val\\\\\\\",\\\\\\\"srcMin\\\\\\\",\\\\\\\"srcMax\\\\\\\"][t]}paramDefaultValue(t){return AP[t]}gl_method_name(){return\\\\\\\"fitTo01\\\\\\\"}gl_function_definitions(){return[new Tf(this,bP)]}}const MP={destMin:0,destMax:1};class SP extends UO{static type(){return\\\\\\\"fitFrom01\\\\\\\"}_gl_input_name(t){return[\\\\\\\"val\\\\\\\",\\\\\\\"destMin\\\\\\\",\\\\\\\"destMax\\\\\\\"][t]}paramDefaultValue(t){return MP[t]}gl_method_name(){return\\\\\\\"fitFrom01\\\\\\\"}gl_function_definitions(){return[new Tf(this,bP)]}}const CP={center:.5,variance:.5};class NP extends UO{static type(){return\\\\\\\"fitFrom01ToVariance\\\\\\\"}_gl_input_name(t){return[\\\\\\\"val\\\\\\\",\\\\\\\"center\\\\\\\",\\\\\\\"variance\\\\\\\"][t]}paramDefaultValue(t){return CP[t]}gl_method_name(){return\\\\\\\"fitFrom01ToVariance\\\\\\\"}gl_function_definitions(){return[new Tf(this,bP)]}}const LP=\\\\\\\"color\\\\\\\";const OP=new class extends aa{constructor(){super(...arguments),this.mvPosition=oa.VECTOR4([0,0,0,0]),this.baseColor=oa.COLOR([0,0,0]),this.fogColor=oa.COLOR([1,1,1]),this.near=oa.FLOAT(0),this.far=oa.FLOAT(0)}};class RP extends df{constructor(){super(...arguments),this.paramsConfig=OP}static type(){return\\\\\\\"fog\\\\\\\"}initializeNode(){super.initializeNode(),this.io.outputs.setNamedOutputConnectionPoints([new Vo(LP,Do.VEC3)])}setLines(t){if(t.current_shader_name==xf.FRAGMENT){const e=this.glVarName(this.name()),n=new Ef(this,Do.VEC4,e),i=`${e} = modelViewMatrix * vec4(position, 1.0)`;t.addDefinitions(this,[n],xf.VERTEX),t.addBodyLines(this,[i],xf.VERTEX);const r=new Tf(this,\\\\\\\"vec3 compute_fog(vec4 mvPosition, vec3 base_color, vec3 fog_color, float near, float far) {\\\\n\\\\tfloat blend = (-mvPosition.z - near) / (far - near);\\\\n\\\\tblend = clamp(blend, 0.0, 1.0);\\\\n\\\\treturn blend * fog_color + (1.0 - blend) * base_color;\\\\n}\\\\\\\"),s=uf.vector4(this.variableForInputParam(this.p.mvPosition)),o=uf.vector3(this.variableForInputParam(this.p.baseColor)),a=uf.vector3(this.variableForInputParam(this.p.fogColor)),l=uf.vector3(this.variableForInputParam(this.p.near)),c=uf.vector3(this.variableForInputParam(this.p.far)),u=`vec3 ${this.glVarName(LP)} = compute_fog(${[s,o,a,l,c].join(\\\\\\\", \\\\\\\")})`;t.addDefinitions(this,[n,r]),t.addBodyLines(this,[u])}}}const PP=new class extends aa{};class IP extends df{constructor(){super(...arguments),this.paramsConfig=PP}static type(){return er.OUTPUT}initializeNode(){this.io.connection_points.set_input_name_function(this._expected_input_name.bind(this)),this.io.connection_points.set_expected_output_types_function((()=>[])),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_create_spare_params_from_inputs(!1),this.addPostDirtyHook(\\\\\\\"setParentDirty\\\\\\\",(()=>{var t;null===(t=this.parent())||void 0===t||t.setDirty(this)}))}parent(){return super.parent()}_expected_input_name(t){const e=this.parent();return(null==e?void 0:e.child_expected_output_connection_point_name(t))||`in${t}`}_expected_input_types(){const t=this.parent();return(null==t?void 0:t.child_expected_output_connection_point_types())||[]}setLines(t){const e=this.parent();if(!e)return;const n=[],i=this.io.connections.inputConnections();if(i)for(let t of i)if(t){const i=t.dest_connection_point(),r=uf.any(this.variableForInput(i.name())),s=`\\\\t${e.glVarName(i.name())} = ${r}`;n.push(s)}t.addBodyLines(this,n),e.set_lines_block_end(t,this)}}class FP extends df{constructor(){super(...arguments),this._children_controller_context=Ki.GL}initializeNode(){var t;null===(t=this.childrenController)||void 0===t||t.set_output_node_find_method((()=>this.nodesByType(IP.type())[0])),this.io.connection_points.set_input_name_function(this._expected_input_name.bind(this)),this.io.connection_points.set_output_name_function(this._expected_output_name.bind(this)),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this))}_expected_inputs_count(){const t=this.io.connections.inputConnections();return t?t.length+1:1}_expected_input_types(){const t=[],e=Do.FLOAT,n=this.io.connections.inputConnections(),i=this._expected_inputs_count();for(let r=0;r<i;r++)if(n){const i=n[r];if(i){const e=i.src_connection_point().type();t.push(e)}else t.push(e)}else t.push(e);return t}_expected_output_types(){const t=[],e=this._expected_input_types();for(let n=0;n<e.length;n++)t.push(e[n]);return t}_expected_input_name(t){const e=this.io.connections.inputConnection(t);if(e){return e.src_connection_point().name()}return`in${t}`}_expected_output_name(t){return this._expected_input_name(t)}child_expected_input_connection_point_types(){return this._expected_input_types()}child_expected_output_connection_point_types(){return this._expected_output_types()}child_expected_input_connection_point_name(t){return this._expected_input_name(t)}child_expected_output_connection_point_name(t){return this._expected_output_name(t)}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}set_lines_block_start(t,e){const n=[],i=this.io.inputs.namedInputConnectionPoints();for(let t=0;t<i.length;t++){const e=i[t],r=`${e.type()} ${this.glVarName(e.name())} = ${uf.any(this.variableForInput(e.name()))}`;n.push(r)}n.push(\\\\\\\"if(true){\\\\\\\");const r=this.io.connections.inputConnections();if(r)for(let t of r)if(t){const i=t.dest_connection_point(),r=uf.any(this.variableForInput(i.name())),s=`\\\\t${i.type()} ${e.glVarName(i.name())} = ${r}`;n.push(s)}t.addBodyLines(e,n)}set_lines_block_end(t,e){t.addBodyLines(e,[\\\\\\\"}\\\\\\\"])}setLines(t){}}const DP=new class extends aa{};class kP extends FP{constructor(){super(...arguments),this.paramsConfig=DP}static type(){return\\\\\\\"subnet\\\\\\\"}}var BP;!function(t){t.START_INDEX=\\\\\\\"i\\\\\\\",t.MAX=\\\\\\\"max\\\\\\\",t.STEP=\\\\\\\"step\\\\\\\"}(BP||(BP={}));const zP={[BP.START_INDEX]:0,[BP.MAX]:10,[BP.STEP]:1};const UP=new class extends aa{constructor(){super(...arguments),this.start=oa.FLOAT(0),this.max=oa.FLOAT(10,{range:[0,100],rangeLocked:[!1,!1]}),this.step=oa.FLOAT(1)}};class GP extends FP{constructor(){super(...arguments),this.paramsConfig=UP}static type(){return\\\\\\\"forLoop\\\\\\\"}paramDefaultValue(t){return zP[t]}_expected_inputs_count(){const t=this.io.connections.inputConnections();return t?t.length+1:1}_expected_input_types(){const t=[],e=Do.FLOAT,n=this.io.connections.inputConnections(),i=this._expected_inputs_count();for(let r=0;r<i;r++)if(n){const i=n[r];if(i){const e=i.src_connection_point().type();t.push(e)}else t.push(e)}else t.push(e);return t}_expected_output_types(){const t=[],e=this._expected_input_types();for(let n=0;n<e.length;n++)t.push(e[n]);return t}_expected_input_name(t){const e=this.io.connections.inputConnection(t);if(e){return e.src_connection_point().name()}return`in${t}`}_expected_output_name(t){return this._expected_input_name(t+0)}child_expected_input_connection_point_types(){return this._expected_input_types()}child_expected_input_connection_point_name(t){return this._expected_input_name(t)}child_expected_output_connection_point_types(){return this._expected_output_types()}child_expected_output_connection_point_name(t){return this._expected_output_name(t)}set_lines_block_start(t,e){const n=[],i=this.io.inputs.namedInputConnectionPoints();for(let t=0;t<i.length;t++){const e=i[t],r=`${e.type()} ${this.glVarName(e.name())} = ${uf.any(this.variableForInput(e.name()))}`;n.push(r)}const r=this.io.connections.inputConnections();if(r)for(let t of r)if(t&&t.input_index>=0){const e=t.dest_connection_point(),i=uf.any(this.variableForInput(e.name())),r=`${e.type()} ${this.glVarName(e.name())} = ${i}`;n.push(r)}const s=this.pv.start,o=this.pv.max,a=this.pv.step,l=uf.float(s),c=uf.float(o),u=uf.float(a),h=this.glVarName(\\\\\\\"i\\\\\\\"),d=`for(float ${h} = ${l}; ${h} < ${c}; ${h}+= ${u}){`;n.push(d);const p=`\\\\tfloat ${e.glVarName(BP.START_INDEX)} = ${h}`;if(n.push(p),r)for(let t of r)if(t&&t.input_index>=0){const i=t.dest_connection_point(),r=this.glVarName(i.name()),s=`\\\\t${i.type()} ${e.glVarName(i.name())} = ${r}`;n.push(s)}t.addBodyLines(e,n)}setLines(t){}}const VP=new class extends aa{};class HP extends df{constructor(){super(...arguments),this.paramsConfig=VP}static type(){return\\\\\\\"globals\\\\\\\"}initializeNode(){super.initializeNode(),this.lifecycle.add_on_add_hook((()=>{var t,e;null===(e=null===(t=this.material_node)||void 0===t?void 0:t.assemblerController)||void 0===e||e.add_globals_outputs(this)}))}setLines(t){t.assembler().set_node_lines_globals(this,t)}}const jP=new class extends aa{constructor(){super(...arguments),this.hsluv=oa.VECTOR3([1,1,1])}};class WP extends df{constructor(){super(...arguments),this.paramsConfig=jP}static type(){return\\\\\\\"hsluvToRgb\\\\\\\"}initializeNode(){super.initializeNode(),this.io.outputs.setNamedOutputConnectionPoints([new Vo(\\\\\\\"rgb\\\\\\\",Do.VEC3)])}setLines(t){const e=[],n=[];e.push(new Tf(this,\\\\\\\"// from https://github.com/williammalo/hsluv-glsl\\\\n/*\\\\nHSLUV-GLSL v4.2\\\\nHSLUV is a human-friendly alternative to HSL. ( http://www.hsluv.org )\\\\nGLSL port by William Malo ( https://github.com/williammalo )\\\\nPut this code in your fragment shader.\\\\n*/\\\\n\\\\nvec3 hsluv_intersectLineLine(vec3 line1x, vec3 line1y, vec3 line2x, vec3 line2y) {\\\\n\\\\treturn (line1y - line2y) / (line2x - line1x);\\\\n}\\\\n\\\\nvec3 hsluv_distanceFromPole(vec3 pointx,vec3 pointy) {\\\\n\\\\treturn sqrt(pointx*pointx + pointy*pointy);\\\\n}\\\\n\\\\nvec3 hsluv_lengthOfRayUntilIntersect(float theta, vec3 x, vec3 y) {\\\\n\\\\tvec3 len = y / (sin(theta) - x * cos(theta));\\\\n\\\\tif (len.r < 0.0) {len.r=1000.0;}\\\\n\\\\tif (len.g < 0.0) {len.g=1000.0;}\\\\n\\\\tif (len.b < 0.0) {len.b=1000.0;}\\\\n\\\\treturn len;\\\\n}\\\\n\\\\nfloat hsluv_maxSafeChromaForL(float L){\\\\n\\\\tmat3 m2 = mat3(\\\\n\\\\t\\\\t 3.2409699419045214  ,-0.96924363628087983 , 0.055630079696993609,\\\\n\\\\t\\\\t-1.5373831775700935  , 1.8759675015077207  ,-0.20397695888897657 ,\\\\n\\\\t\\\\t-0.49861076029300328 , 0.041555057407175613, 1.0569715142428786  \\\\n\\\\t);\\\\n\\\\tfloat sub0 = L + 16.0;\\\\n\\\\tfloat sub1 = sub0 * sub0 * sub0 * .000000641;\\\\n\\\\tfloat sub2 = sub1 > 0.0088564516790356308 ? sub1 : L / 903.2962962962963;\\\\n\\\\n\\\\tvec3 top1   = (284517.0 * m2[0] - 94839.0  * m2[2]) * sub2;\\\\n\\\\tvec3 bottom = (632260.0 * m2[2] - 126452.0 * m2[1]) * sub2;\\\\n\\\\tvec3 top2   = (838422.0 * m2[2] + 769860.0 * m2[1] + 731718.0 * m2[0]) * L * sub2;\\\\n\\\\n\\\\tvec3 bounds0x = top1 / bottom;\\\\n\\\\tvec3 bounds0y = top2 / bottom;\\\\n\\\\n\\\\tvec3 bounds1x =              top1 / (bottom+126452.0);\\\\n\\\\tvec3 bounds1y = (top2-769860.0*L) / (bottom+126452.0);\\\\n\\\\n\\\\tvec3 xs0 = hsluv_intersectLineLine(bounds0x, bounds0y, -1.0/bounds0x, vec3(0.0) );\\\\n\\\\tvec3 xs1 = hsluv_intersectLineLine(bounds1x, bounds1y, -1.0/bounds1x, vec3(0.0) );\\\\n\\\\n\\\\tvec3 lengths0 = hsluv_distanceFromPole( xs0, bounds0y + xs0 * bounds0x );\\\\n\\\\tvec3 lengths1 = hsluv_distanceFromPole( xs1, bounds1y + xs1 * bounds1x );\\\\n\\\\n\\\\treturn  min(lengths0.r,\\\\n\\\\t\\\\t\\\\tmin(lengths1.r,\\\\n\\\\t\\\\t\\\\tmin(lengths0.g,\\\\n\\\\t\\\\t\\\\tmin(lengths1.g,\\\\n\\\\t\\\\t\\\\tmin(lengths0.b,\\\\n\\\\t\\\\t\\\\t\\\\tlengths1.b)))));\\\\n}\\\\n\\\\nfloat hsluv_maxChromaForLH(float L, float H) {\\\\n\\\\n\\\\tfloat hrad = radians(H);\\\\n\\\\n\\\\tmat3 m2 = mat3(\\\\n\\\\t\\\\t 3.2409699419045214  ,-0.96924363628087983 , 0.055630079696993609,\\\\n\\\\t\\\\t-1.5373831775700935  , 1.8759675015077207  ,-0.20397695888897657 ,\\\\n\\\\t\\\\t-0.49861076029300328 , 0.041555057407175613, 1.0569715142428786  \\\\n\\\\t);\\\\n\\\\tfloat sub1 = pow(L + 16.0, 3.0) / 1560896.0;\\\\n\\\\tfloat sub2 = sub1 > 0.0088564516790356308 ? sub1 : L / 903.2962962962963;\\\\n\\\\n\\\\tvec3 top1   = (284517.0 * m2[0] - 94839.0  * m2[2]) * sub2;\\\\n\\\\tvec3 bottom = (632260.0 * m2[2] - 126452.0 * m2[1]) * sub2;\\\\n\\\\tvec3 top2   = (838422.0 * m2[2] + 769860.0 * m2[1] + 731718.0 * m2[0]) * L * sub2;\\\\n\\\\n\\\\tvec3 bound0x = top1 / bottom;\\\\n\\\\tvec3 bound0y = top2 / bottom;\\\\n\\\\n\\\\tvec3 bound1x =              top1 / (bottom+126452.0);\\\\n\\\\tvec3 bound1y = (top2-769860.0*L) / (bottom+126452.0);\\\\n\\\\n\\\\tvec3 lengths0 = hsluv_lengthOfRayUntilIntersect(hrad, bound0x, bound0y );\\\\n\\\\tvec3 lengths1 = hsluv_lengthOfRayUntilIntersect(hrad, bound1x, bound1y );\\\\n\\\\n\\\\treturn  min(lengths0.r,\\\\n\\\\t\\\\t\\\\tmin(lengths1.r,\\\\n\\\\t\\\\t\\\\tmin(lengths0.g,\\\\n\\\\t\\\\t\\\\tmin(lengths1.g,\\\\n\\\\t\\\\t\\\\tmin(lengths0.b,\\\\n\\\\t\\\\t\\\\t\\\\tlengths1.b)))));\\\\n}\\\\n\\\\nfloat hsluv_fromLinear(float c) {\\\\n\\\\treturn c <= 0.0031308 ? 12.92 * c : 1.055 * pow(c, 1.0 / 2.4) - 0.055;\\\\n}\\\\nvec3 hsluv_fromLinear(vec3 c) {\\\\n\\\\treturn vec3( hsluv_fromLinear(c.r), hsluv_fromLinear(c.g), hsluv_fromLinear(c.b) );\\\\n}\\\\n\\\\nfloat hsluv_toLinear(float c) {\\\\n\\\\treturn c > 0.04045 ? pow((c + 0.055) / (1.0 + 0.055), 2.4) : c / 12.92;\\\\n}\\\\n\\\\nvec3 hsluv_toLinear(vec3 c) {\\\\n\\\\treturn vec3( hsluv_toLinear(c.r), hsluv_toLinear(c.g), hsluv_toLinear(c.b) );\\\\n}\\\\n\\\\nfloat hsluv_yToL(float Y){\\\\n\\\\treturn Y <= 0.0088564516790356308 ? Y * 903.2962962962963 : 116.0 * pow(Y, 1.0 / 3.0) - 16.0;\\\\n}\\\\n\\\\nfloat hsluv_lToY(float L) {\\\\n\\\\treturn L <= 8.0 ? L / 903.2962962962963 : pow((L + 16.0) / 116.0, 3.0);\\\\n}\\\\n\\\\nvec3 xyzToRgb(vec3 tuple) {\\\\n\\\\tconst mat3 m = mat3( \\\\n\\\\t\\\\t3.2409699419045214  ,-1.5373831775700935 ,-0.49861076029300328 ,\\\\n\\\\t\\\\t-0.96924363628087983 , 1.8759675015077207 , 0.041555057407175613,\\\\n\\\\t\\\\t0.055630079696993609,-0.20397695888897657, 1.0569715142428786  );\\\\n\\\\t\\\\n\\\\treturn hsluv_fromLinear(tuple*m);\\\\n}\\\\n\\\\nvec3 rgbToXyz(vec3 tuple) {\\\\n\\\\tconst mat3 m = mat3(\\\\n\\\\t\\\\t0.41239079926595948 , 0.35758433938387796, 0.18048078840183429 ,\\\\n\\\\t\\\\t0.21263900587151036 , 0.71516867876775593, 0.072192315360733715,\\\\n\\\\t\\\\t0.019330818715591851, 0.11919477979462599, 0.95053215224966058 \\\\n\\\\t);\\\\n\\\\treturn hsluv_toLinear(tuple) * m;\\\\n}\\\\n\\\\nvec3 xyzToLuv(vec3 tuple){\\\\n\\\\tfloat X = tuple.x;\\\\n\\\\tfloat Y = tuple.y;\\\\n\\\\tfloat Z = tuple.z;\\\\n\\\\n\\\\tfloat L = hsluv_yToL(Y);\\\\n\\\\t\\\\n\\\\tfloat div = 1./dot(tuple,vec3(1,15,3)); \\\\n\\\\n\\\\treturn vec3(\\\\n\\\\t\\\\t1.,\\\\n\\\\t\\\\t(52. * (X*div) - 2.57179),\\\\n\\\\t\\\\t(117.* (Y*div) - 6.08816)\\\\n\\\\t) * L;\\\\n}\\\\n\\\\n\\\\nvec3 luvToXyz(vec3 tuple) {\\\\n\\\\tfloat L = tuple.x;\\\\n\\\\n\\\\tfloat U = tuple.y / (13.0 * L) + 0.19783000664283681;\\\\n\\\\tfloat V = tuple.z / (13.0 * L) + 0.468319994938791;\\\\n\\\\n\\\\tfloat Y = hsluv_lToY(L);\\\\n\\\\tfloat X = 2.25 * U * Y / V;\\\\n\\\\tfloat Z = (3./V - 5.)*Y - (X/3.);\\\\n\\\\n\\\\treturn vec3(X, Y, Z);\\\\n}\\\\n\\\\nvec3 luvToLch(vec3 tuple) {\\\\n\\\\tfloat L = tuple.x;\\\\n\\\\tfloat U = tuple.y;\\\\n\\\\tfloat V = tuple.z;\\\\n\\\\n\\\\tfloat C = length(tuple.yz);\\\\n\\\\tfloat H = degrees(atan(V,U));\\\\n\\\\tif (H < 0.0) {\\\\n\\\\t\\\\tH = 360.0 + H;\\\\n\\\\t}\\\\n\\\\t\\\\n\\\\treturn vec3(L, C, H);\\\\n}\\\\n\\\\nvec3 lchToLuv(vec3 tuple) {\\\\n\\\\tfloat hrad = radians(tuple.b);\\\\n\\\\treturn vec3(\\\\n\\\\t\\\\ttuple.r,\\\\n\\\\t\\\\tcos(hrad) * tuple.g,\\\\n\\\\t\\\\tsin(hrad) * tuple.g\\\\n\\\\t);\\\\n}\\\\n\\\\nvec3 hsluvToLch(vec3 tuple) {\\\\n\\\\ttuple.g *= hsluv_maxChromaForLH(tuple.b, tuple.r) * .01;\\\\n\\\\treturn tuple.bgr;\\\\n}\\\\n\\\\nvec3 lchToHsluv(vec3 tuple) {\\\\n\\\\ttuple.g /= hsluv_maxChromaForLH(tuple.r, tuple.b) * .01;\\\\n\\\\treturn tuple.bgr;\\\\n}\\\\n\\\\nvec3 hpluvToLch(vec3 tuple) {\\\\n\\\\ttuple.g *= hsluv_maxSafeChromaForL(tuple.b) * .01;\\\\n\\\\treturn tuple.bgr;\\\\n}\\\\n\\\\nvec3 lchToHpluv(vec3 tuple) {\\\\n\\\\ttuple.g /= hsluv_maxSafeChromaForL(tuple.r) * .01;\\\\n\\\\treturn tuple.bgr;\\\\n}\\\\n\\\\nvec3 lchToRgb(vec3 tuple) {\\\\n\\\\treturn xyzToRgb(luvToXyz(lchToLuv(tuple)));\\\\n}\\\\n\\\\nvec3 rgbToLch(vec3 tuple) {\\\\n\\\\treturn luvToLch(xyzToLuv(rgbToXyz(tuple)));\\\\n}\\\\n\\\\nvec3 hsluvToRgb(vec3 tuple) {\\\\n\\\\treturn lchToRgb(hsluvToLch(tuple));\\\\n}\\\\n\\\\nvec3 rgbToHsluv(vec3 tuple) {\\\\n\\\\treturn lchToHsluv(rgbToLch(tuple));\\\\n}\\\\n\\\\nvec3 hpluvToRgb(vec3 tuple) {\\\\n\\\\treturn lchToRgb(hpluvToLch(tuple));\\\\n}\\\\n\\\\nvec3 rgbToHpluv(vec3 tuple) {\\\\n\\\\treturn lchToHpluv(rgbToLch(tuple));\\\\n}\\\\n\\\\nvec3 luvToRgb(vec3 tuple){\\\\n\\\\treturn xyzToRgb(luvToXyz(tuple));\\\\n}\\\\n\\\\n// allow vec4's\\\\nvec4   xyzToRgb(vec4 c) {return vec4(   xyzToRgb( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4   rgbToXyz(vec4 c) {return vec4(   rgbToXyz( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4   xyzToLuv(vec4 c) {return vec4(   xyzToLuv( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4   luvToXyz(vec4 c) {return vec4(   luvToXyz( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4   luvToLch(vec4 c) {return vec4(   luvToLch( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4   lchToLuv(vec4 c) {return vec4(   lchToLuv( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4 hsluvToLch(vec4 c) {return vec4( hsluvToLch( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4 lchToHsluv(vec4 c) {return vec4( lchToHsluv( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4 hpluvToLch(vec4 c) {return vec4( hpluvToLch( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4 lchToHpluv(vec4 c) {return vec4( lchToHpluv( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4   lchToRgb(vec4 c) {return vec4(   lchToRgb( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4   rgbToLch(vec4 c) {return vec4(   rgbToLch( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4 hsluvToRgb(vec4 c) {return vec4( hsluvToRgb( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4 rgbToHsluv(vec4 c) {return vec4( rgbToHsluv( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4 hpluvToRgb(vec4 c) {return vec4( hpluvToRgb( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4 rgbToHpluv(vec4 c) {return vec4( rgbToHpluv( vec3(c.x,c.y,c.z) ), c.a);}\\\\nvec4   luvToRgb(vec4 c) {return vec4(   luvToRgb( vec3(c.x,c.y,c.z) ), c.a);}\\\\n// allow 3 floats\\\\nvec3   xyzToRgb(float x, float y, float z) {return   xyzToRgb( vec3(x,y,z) );}\\\\nvec3   rgbToXyz(float x, float y, float z) {return   rgbToXyz( vec3(x,y,z) );}\\\\nvec3   xyzToLuv(float x, float y, float z) {return   xyzToLuv( vec3(x,y,z) );}\\\\nvec3   luvToXyz(float x, float y, float z) {return   luvToXyz( vec3(x,y,z) );}\\\\nvec3   luvToLch(float x, float y, float z) {return   luvToLch( vec3(x,y,z) );}\\\\nvec3   lchToLuv(float x, float y, float z) {return   lchToLuv( vec3(x,y,z) );}\\\\nvec3 hsluvToLch(float x, float y, float z) {return hsluvToLch( vec3(x,y,z) );}\\\\nvec3 lchToHsluv(float x, float y, float z) {return lchToHsluv( vec3(x,y,z) );}\\\\nvec3 hpluvToLch(float x, float y, float z) {return hpluvToLch( vec3(x,y,z) );}\\\\nvec3 lchToHpluv(float x, float y, float z) {return lchToHpluv( vec3(x,y,z) );}\\\\nvec3   lchToRgb(float x, float y, float z) {return   lchToRgb( vec3(x,y,z) );}\\\\nvec3   rgbToLch(float x, float y, float z) {return   rgbToLch( vec3(x,y,z) );}\\\\nvec3 hsluvToRgb(float x, float y, float z) {return hsluvToRgb( vec3(x,y,z) );}\\\\nvec3 rgbToHsluv(float x, float y, float z) {return rgbToHsluv( vec3(x,y,z) );}\\\\nvec3 hpluvToRgb(float x, float y, float z) {return hpluvToRgb( vec3(x,y,z) );}\\\\nvec3 rgbToHpluv(float x, float y, float z) {return rgbToHpluv( vec3(x,y,z) );}\\\\nvec3   luvToRgb(float x, float y, float z) {return   luvToRgb( vec3(x,y,z) );}\\\\n// allow 4 floats\\\\nvec4   xyzToRgb(float x, float y, float z, float a) {return   xyzToRgb( vec4(x,y,z,a) );}\\\\nvec4   rgbToXyz(float x, float y, float z, float a) {return   rgbToXyz( vec4(x,y,z,a) );}\\\\nvec4   xyzToLuv(float x, float y, float z, float a) {return   xyzToLuv( vec4(x,y,z,a) );}\\\\nvec4   luvToXyz(float x, float y, float z, float a) {return   luvToXyz( vec4(x,y,z,a) );}\\\\nvec4   luvToLch(float x, float y, float z, float a) {return   luvToLch( vec4(x,y,z,a) );}\\\\nvec4   lchToLuv(float x, float y, float z, float a) {return   lchToLuv( vec4(x,y,z,a) );}\\\\nvec4 hsluvToLch(float x, float y, float z, float a) {return hsluvToLch( vec4(x,y,z,a) );}\\\\nvec4 lchToHsluv(float x, float y, float z, float a) {return lchToHsluv( vec4(x,y,z,a) );}\\\\nvec4 hpluvToLch(float x, float y, float z, float a) {return hpluvToLch( vec4(x,y,z,a) );}\\\\nvec4 lchToHpluv(float x, float y, float z, float a) {return lchToHpluv( vec4(x,y,z,a) );}\\\\nvec4   lchToRgb(float x, float y, float z, float a) {return   lchToRgb( vec4(x,y,z,a) );}\\\\nvec4   rgbToLch(float x, float y, float z, float a) {return   rgbToLch( vec4(x,y,z,a) );}\\\\nvec4 hsluvToRgb(float x, float y, float z, float a) {return hsluvToRgb( vec4(x,y,z,a) );}\\\\nvec4 rgbToHslul(float x, float y, float z, float a) {return rgbToHsluv( vec4(x,y,z,a) );}\\\\nvec4 hpluvToRgb(float x, float y, float z, float a) {return hpluvToRgb( vec4(x,y,z,a) );}\\\\nvec4 rgbToHpluv(float x, float y, float z, float a) {return rgbToHpluv( vec4(x,y,z,a) );}\\\\nvec4   luvToRgb(float x, float y, float z, float a) {return   luvToRgb( vec4(x,y,z,a) );}\\\\n\\\\n/*\\\\nEND HSLUV-GLSL\\\\n*/\\\\n\\\\n\\\\n// from https://gist.github.com/mattatz/44f081cac87e2f7c8980\\\\n// converted to glsl by gui@polygonjs.com\\\\n// and made function names consistent with the ones above\\\\n/*\\\\n * Conversion between RGB and LAB colorspace.\\\\n * Import from flowabs glsl program : https://code.google.com/p/flowabs/source/browse/glsl/?r=f36cbdcf7790a28d90f09e2cf89ec9a64911f138\\\\n */\\\\n\\\\n\\\\n\\\\nvec3 xyzToLab( vec3 c ) {\\\\n\\\\tvec3 n = c / vec3(95.047, 100, 108.883);\\\\n\\\\tvec3 v;\\\\n\\\\tv.x = ( n.x > 0.008856 ) ? pow( n.x, 1.0 / 3.0 ) : ( 7.787 * n.x ) + ( 16.0 / 116.0 );\\\\n\\\\tv.y = ( n.y > 0.008856 ) ? pow( n.y, 1.0 / 3.0 ) : ( 7.787 * n.y ) + ( 16.0 / 116.0 );\\\\n\\\\tv.z = ( n.z > 0.008856 ) ? pow( n.z, 1.0 / 3.0 ) : ( 7.787 * n.z ) + ( 16.0 / 116.0 );\\\\n\\\\treturn vec3(( 116.0 * v.y ) - 16.0, 500.0 * ( v.x - v.y ), 200.0 * ( v.y - v.z ));\\\\n}\\\\n\\\\nvec3 rgbToLab( vec3 c ) {\\\\n\\\\tvec3 lab = xyzToLab( rgbToXyz( c ) );\\\\n\\\\treturn vec3( lab.x / 100.0, 0.5 + 0.5 * ( lab.y / 127.0 ), 0.5 + 0.5 * ( lab.z / 127.0 ));\\\\n}\\\\n\\\\nvec3 labToXyz( vec3 c ) {\\\\n\\\\tfloat fy = ( c.x + 16.0 ) / 116.0;\\\\n\\\\tfloat fx = c.y / 500.0 + fy;\\\\n\\\\tfloat fz = fy - c.z / 200.0;\\\\n\\\\treturn vec3(\\\\n\\\\t\\\\t 95.047 * (( fx > 0.206897 ) ? fx * fx * fx : ( fx - 16.0 / 116.0 ) / 7.787),\\\\n\\\\t\\\\t100.000 * (( fy > 0.206897 ) ? fy * fy * fy : ( fy - 16.0 / 116.0 ) / 7.787),\\\\n\\\\t\\\\t108.883 * (( fz > 0.206897 ) ? fz * fz * fz : ( fz - 16.0 / 116.0 ) / 7.787)\\\\n\\\\t);\\\\n}\\\\n\\\\n\\\\n\\\\nvec3 labToRgb( vec3 c ) {\\\\n\\\\treturn xyzToRgb( labToXyz( vec3(100.0 * c.x, 2.0 * 127.0 * (c.y - 0.5), 2.0 * 127.0 * (c.z - 0.5)) ) );\\\\n}\\\\\\\"));const i=uf.vector3(this.variableForInputParam(this.p.hsluv)),r=this.glVarName(\\\\\\\"rgb\\\\\\\");n.push(`vec3 ${r} = hsluvToRgb(${i}.x * 360.0, ${i}.y * 100.0, ${i}.z * 100.0)`),t.addDefinitions(this,e),t.addBodyLines(this,n)}}const qP=new class extends aa{constructor(){super(...arguments),this.hsv=oa.VECTOR3([1,1,1])}};class XP extends df{constructor(){super(...arguments),this.paramsConfig=qP}static type(){return\\\\\\\"hsvToRgb\\\\\\\"}initializeNode(){super.initializeNode(),this.io.outputs.setNamedOutputConnectionPoints([new Vo(\\\\\\\"rgb\\\\\\\",Do.VEC3)])}setLines(t){const e=[],n=[];e.push(new Tf(this,\\\\\\\"// https://github.com/hughsk/glsl-hsv2rgb\\\\n// https://stackoverflow.com/questions/15095909/from-rgb-to-hsv-in-opengl-glsl\\\\nvec3 hsv2rgb(vec3 c) {\\\\n\\\\tvec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);\\\\n\\\\tvec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);\\\\n\\\\treturn c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);\\\\n}\\\\\\\"));const i=uf.vector3(this.variableForInputParam(this.p.hsv)),r=this.glVarName(\\\\\\\"rgb\\\\\\\");n.push(`vec3 ${r} = hsv2rgb(${i})`),t.addDefinitions(this,e),t.addBodyLines(this,n)}}const YP=\\\\\\\"condition\\\\\\\";const $P=new class extends aa{};class JP extends kP{constructor(){super(...arguments),this.paramsConfig=$P}static type(){return\\\\\\\"ifThen\\\\\\\"}_expected_inputs_count(){const t=this.io.connections.inputConnections();return t?Math.max(t.length+1,2):2}_expected_input_types(){const t=[Do.BOOL],e=Do.FLOAT,n=this.io.connections.inputConnections(),i=this._expected_inputs_count();for(let r=1;r<i;r++)if(n){const i=n[r];if(i){const e=i.src_connection_point().type();t.push(e)}else t.push(e)}else t.push(e);return t}_expected_output_types(){const t=[],e=this._expected_input_types();for(let n=1;n<e.length;n++)t.push(e[n]);return t}_expected_input_name(t){if(0==t)return YP;{const e=this.io.connections.inputConnection(t);if(e){return e.src_connection_point().name()}return`in${t}`}}_expected_output_name(t){return this._expected_input_name(t+1)}child_expected_input_connection_point_types(){return this._expected_output_types()}child_expected_input_connection_point_name(t){return this._expected_output_name(t)}child_expected_output_connection_point_types(){return this._expected_output_types()}child_expected_output_connection_point_name(t){return this._expected_output_name(t)}set_lines_block_start(t,e){const n=[],i=this.io.inputs.namedInputConnectionPoints();for(let t=1;t<i.length;t++){const e=i[t],r=`${e.type()} ${this.glVarName(e.name())} = ${uf.any(this.variableForInput(e.name()))}`;n.push(r)}const r=`if(${uf.any(this.variableForInput(YP))}){`;n.push(r);const s=this.io.connections.inputConnections();if(s)for(let t of s)if(t&&0!=t.input_index){const i=t.dest_connection_point(),r=uf.any(this.variableForInput(i.name())),s=`\\\\t${i.type()} ${e.glVarName(i.name())} = ${r}`;n.push(s)}t.addBodyLines(e,n)}setLines(t){}}const ZP=new class extends aa{constructor(){super(...arguments),this.center=oa.VECTOR3([0,0,0]),this.cameraPos=oa.VECTOR3([0,0,0]),this.uv=oa.VECTOR2([0,0]),this.tilesCount=oa.INTEGER(8,{range:[0,32],rangeLocked:[!0,!1]}),this.offset=oa.FLOAT(0)}};class QP extends df{constructor(){super(...arguments),this.paramsConfig=ZP}static type(){return\\\\\\\"impostorUv\\\\\\\"}initializeNode(){super.initializeNode(),this.io.outputs.setNamedOutputConnectionPoints([new Vo(\\\\\\\"uv\\\\\\\",Do.VEC2)])}setLines(t){const e=[];t.addDefinitions(this,[new Tf(this,GR),new Tf(this,\\\\\\\"// ANGLE_NORMALIZER = 1 / (2*PI)\\\\n# define IMPOSTOR_UV_ANGLE_NORMALIZER 0.15915494309189535\\\\nvec2 impostor_uv(vec3 center, vec3 camera_pos, vec2 imp_uv, float tiles_count, float offset){\\\\n\\\\timp_uv.x /= tiles_count;\\\\n\\\\n\\\\tcamera_pos.y = center.y;\\\\n\\\\tvec3 delta = normalize(center - camera_pos);\\\\n\\\\tvec3 angle_start = vec3(-1.0,0.0,0.0);\\\\n\\\\tfloat angle = vector_angle(delta, angle_start) + offset;\\\\n\\\\tangle *= IMPOSTOR_UV_ANGLE_NORMALIZER;\\\\n\\\\tangle *= tiles_count;\\\\n\\\\tangle = floor(angle);\\\\n\\\\tangle /= tiles_count;\\\\n\\\\timp_uv.x -= angle;\\\\n\\\\n\\\\treturn imp_uv;\\\\n}\\\\n\\\\\\\")]);const n=uf.vector3(this.variableForInputParam(this.p.center)),i=uf.vector3(this.variableForInputParam(this.p.cameraPos)),r=uf.vector2(this.variableForInputParam(this.p.uv)),s=uf.float(this.variableForInputParam(this.p.tilesCount)),o=uf.float(this.variableForInputParam(this.p.offset)),a=this.glVarName(\\\\\\\"uv\\\\\\\"),l=[n,i,r,s,o].join(\\\\\\\", \\\\\\\");e.push(`vec2 ${a} = impostor_uv(${l})`),t.addBodyLines(this,e)}}const KP=\\\\\\\"position\\\\\\\",tI=\\\\\\\"normal\\\\\\\",eI=\\\\\\\"instancePosition\\\\\\\",nI=\\\\\\\"instanceOrientation\\\\\\\",iI=\\\\\\\"instanceScale\\\\\\\";const rI=new class extends aa{constructor(){super(...arguments),this.position=oa.VECTOR3([0,0,0]),this.normal=oa.VECTOR3([0,0,1]),this.instancePosition=oa.VECTOR3([0,0,0]),this.instanceOrientation=oa.VECTOR4([0,0,0,0]),this.instanceScale=oa.VECTOR3([1,1,1])}};class sI extends df{constructor(){super(...arguments),this.paramsConfig=rI}static type(){return\\\\\\\"instanceTransform\\\\\\\"}initializeNode(){super.initializeNode(),this.io.outputs.setNamedOutputConnectionPoints([new Vo(this.gl_output_name_position(),Do.VEC3),new Vo(this.gl_output_name_normal(),Do.VEC3)])}setLines(t){const e=[],n=[];n.push(new Tf(this,GR));const i=this.io.inputs.named_input(this.p.position.name())?uf.float(this.variableForInputParam(this.p.position)):this._default_position(),r=this.io.inputs.named_input(this.p.normal.name())?uf.float(this.variableForInputParam(this.p.normal)):this._default_normal(),s=this.io.inputs.named_input(this.p.instancePosition.name())?uf.float(this.variableForInputParam(this.p.instancePosition)):this._default_instancePosition(t),o=this.io.inputs.named_input(this.p.instanceOrientation.name())?uf.float(this.variableForInputParam(this.p.instanceOrientation)):this._default_input_instanceOrientation(t),a=this.io.inputs.named_input(this.p.instanceScale.name())?uf.float(this.variableForInputParam(this.p.instanceScale)):this._default_input_instanceScale(t),l=this.glVarName(this.gl_output_name_position()),c=this.glVarName(this.gl_output_name_normal());e.push(`vec3 ${l} = vec3(${i})`),e.push(`${l} *= ${a}`),e.push(`${l} = rotateWithQuat( ${l}, ${o} )`),e.push(`${l} += ${s}`),e.push(`vec3 ${c} = vec3(${r})`),e.push(`${c} = rotateWithQuat( ${c}, ${o} )`),t.addBodyLines(this,e),t.addDefinitions(this,n)}gl_output_name_position(){return\\\\\\\"position\\\\\\\"}gl_output_name_normal(){return\\\\\\\"normal\\\\\\\"}_default_position(){return KP}_default_normal(){return tI}_default_instancePosition(t){var e;return null===(e=t.assembler().globals_handler)||void 0===e?void 0:e.read_attribute(this,Do.VEC3,eI,t)}_default_input_instanceOrientation(t){var e;return null===(e=t.assembler().globals_handler)||void 0===e?void 0:e.read_attribute(this,Do.VEC4,nI,t)}_default_input_instanceScale(t){var e;return null===(e=t.assembler().globals_handler)||void 0===e?void 0:e.read_attribute(this,Do.VEC3,iI,t)}}class oI extends BO{static type(){return\\\\\\\"length\\\\\\\"}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this))}_gl_input_name(t){return[\\\\\\\"x\\\\\\\"][t]}gl_method_name(){return\\\\\\\"length\\\\\\\"}_expected_output_types(){return[Do.FLOAT]}}const aI=new class extends aa{constructor(){super(...arguments),this.color=oa.VECTOR3([1,1,1])}};class lI extends df{constructor(){super(...arguments),this.paramsConfig=aI}static type(){return\\\\\\\"luminance\\\\\\\"}initializeNode(){super.initializeNode(),this.io.outputs.setNamedOutputConnectionPoints([new Vo(\\\\\\\"lum\\\\\\\",Do.FLOAT)])}setLines(t){const e=uf.vector3(this.variableForInputParam(this.p.color)),n=`float ${this.glVarName(\\\\\\\"lum\\\\\\\")} = linearToRelativeLuminance(${e})`;t.addBodyLines(this,[n])}}const cI={max:1};class uI extends zO{static type(){return\\\\\\\"maxLength\\\\\\\"}_expected_input_types(){return[this.io.connection_points.first_input_connection_type()||Do.VEC3,Do.FLOAT]}_gl_input_name(t){return[\\\\\\\"val\\\\\\\",\\\\\\\"max\\\\\\\"][t]}paramDefaultValue(t){return cI[t]}gl_method_name(){return\\\\\\\"maxLength\\\\\\\"}gl_function_definitions(){return[new Tf(this,\\\\\\\"//\\\\n//\\\\n// CLAMP_LENGTH\\\\n//\\\\n//\\\\nfloat maxLength(float val, float max_l){\\\\n\\\\treturn min(val, max_l);\\\\n}\\\\nvec2 maxLength(vec2 val, float max_l){\\\\n\\\\tfloat vec_length = length(val);\\\\n\\\\tif(vec_length == 0.0){\\\\n\\\\t\\\\treturn val;\\\\n\\\\t} else {\\\\n\\\\t\\\\tfloat new_length = min(vec_length, max_l);\\\\n\\\\t\\\\treturn new_length * normalize(val);\\\\n\\\\t}\\\\n}\\\\nvec3 maxLength(vec3 val, float max_l){\\\\n\\\\tfloat vec_length = length(val);\\\\n\\\\tif(vec_length == 0.0){\\\\n\\\\t\\\\treturn val;\\\\n\\\\t} else {\\\\n\\\\t\\\\tfloat new_length = min(vec_length, max_l);\\\\n\\\\t\\\\treturn new_length * normalize(val);\\\\n\\\\t}\\\\n}\\\\nvec4 maxLength(vec4 val, float max_l){\\\\n\\\\tfloat vec_length = length(val);\\\\n\\\\tif(vec_length == 0.0){\\\\n\\\\t\\\\treturn val;\\\\n\\\\t} else {\\\\n\\\\t\\\\tfloat new_length = min(vec_length, max_l);\\\\n\\\\t\\\\treturn new_length * normalize(val);\\\\n\\\\t}\\\\n}\\\\n\\\\\\\")]}}const hI={blend:.5};class dI extends kO{static type(){return\\\\\\\"mix\\\\\\\"}gl_method_name(){return\\\\\\\"mix\\\\\\\"}paramDefaultValue(t){return hI[t]}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function((t=>[\\\\\\\"value0\\\\\\\",\\\\\\\"value1\\\\\\\",\\\\\\\"blend\\\\\\\"][t])),this.io.connection_points.set_output_name_function(this._gl_output_name.bind(this)),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this))}_gl_output_name(){return\\\\\\\"mix\\\\\\\"}_expected_input_types(){const t=this.io.connection_points.first_input_connection_type()||Do.FLOAT;return[t,t,Do.FLOAT]}_expected_output_types(){return[this._expected_input_types()[0]]}}const pI=\\\\\\\"mvMult\\\\\\\";const _I=new class extends aa{constructor(){super(...arguments),this.vector=oa.VECTOR3([0,0,0])}};class mI extends df{constructor(){super(...arguments),this.paramsConfig=_I}static type(){return\\\\\\\"modelViewMatrixMult\\\\\\\"}initializeNode(){super.initializeNode(),this.io.outputs.setNamedOutputConnectionPoints([new Vo(pI,Do.VEC4)])}setLines(t){if(t.current_shader_name==xf.VERTEX){const e=uf.vector3(this.variableForInputParam(this.p.vector)),n=`vec4 ${this.glVarName(pI)} = modelViewMatrix * vec4(${e}, 1.0)`;t.addBodyLines(this,[n],xf.VERTEX)}}}const fI={mult:1};var gI;!function(t){t.VALUE=\\\\\\\"value\\\\\\\",t.PRE_ADD=\\\\\\\"preAdd\\\\\\\",t.MULT=\\\\\\\"mult\\\\\\\",t.POST_ADD=\\\\\\\"postAdd\\\\\\\"}(gI||(gI={}));class vI extends GO{static type(){return\\\\\\\"multAdd\\\\\\\"}_gl_input_name(t){return[gI.VALUE,gI.PRE_ADD,gI.MULT,gI.POST_ADD][t]}paramDefaultValue(t){return fI[t]}setLines(t){const e=uf.any(this.variableForInput(gI.VALUE)),n=uf.any(this.variableForInput(gI.PRE_ADD)),i=uf.any(this.variableForInput(gI.MULT)),r=uf.any(this.variableForInput(gI.POST_ADD)),s=this._expected_output_types()[0],o=this.io.outputs.namedOutputConnectionPoints()[0].name(),a=`${s} ${this.glVarName(o)} = (${i}*(${e} + ${n})) + ${r}`;t.addBodyLines(this,[a])}}class yI extends BO{static type(){return\\\\\\\"negate\\\\\\\"}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function((t=>[\\\\\\\"in\\\\\\\"][t]))}_gl_input_name(t){return[\\\\\\\"in\\\\\\\"][t]}setLines(t){const e=uf.any(this.variableForInput(this._gl_input_name(0))),n=`${this.io.inputs.namedInputConnectionPoints()[0].type()} ${this.glVarName(this.io.connection_points.output_name(0))} = -1.0 * ${e}`;t.addBodyLines(this,[n])}}var xI;!function(t){t.CLASSIC_PERLIN_2D=\\\\\\\"Classic Perlin 2D\\\\\\\",t.CLASSIC_PERLIN_3D=\\\\\\\"Classic Perlin 3D\\\\\\\",t.CLASSIC_PERLIN_4D=\\\\\\\"Classic Perlin 4D\\\\\\\",t.NOISE_2D=\\\\\\\"noise2D\\\\\\\",t.NOISE_3D=\\\\\\\"noise3D\\\\\\\",t.NOISE_4D=\\\\\\\"noise4D\\\\\\\"}(xI||(xI={}));const bI=[xI.CLASSIC_PERLIN_2D,xI.CLASSIC_PERLIN_3D,xI.CLASSIC_PERLIN_4D,xI.NOISE_2D,xI.NOISE_3D,xI.NOISE_4D],wI={[xI.CLASSIC_PERLIN_2D]:'//\\\\n// GLSL textureless classic 2D noise \\\\\\\"cnoise\\\\\\\",\\\\n// with an RSL-style periodic variant \\\\\\\"pnoise\\\\\\\".\\\\n// Author:  Stefan Gustavson (stefan.gustavson@liu.se)\\\\n// Version: 2011-08-22\\\\n//\\\\n// Many thanks to Ian McEwan of Ashima Arts for the\\\\n// ideas for permutation and gradient selection.\\\\n//\\\\n// Copyright (c) 2011 Stefan Gustavson. All rights reserved.\\\\n// Distributed under the MIT license. See LICENSE file.\\\\n// https://github.com/stegu/webgl-noise\\\\n//\\\\n\\\\n\\\\n// Classic Perlin noise\\\\nfloat cnoise(vec2 P)\\\\n{\\\\n  vec4 Pi = floor(P.xyxy) + vec4(0.0, 0.0, 1.0, 1.0);\\\\n  vec4 Pf = fract(P.xyxy) - vec4(0.0, 0.0, 1.0, 1.0);\\\\n  Pi = mod289(Pi); // To avoid truncation effects in permutation\\\\n  vec4 ix = Pi.xzxz;\\\\n  vec4 iy = Pi.yyww;\\\\n  vec4 fx = Pf.xzxz;\\\\n  vec4 fy = Pf.yyww;\\\\n\\\\n  vec4 i = permute(permute(ix) + iy);\\\\n\\\\n  vec4 gx = fract(i * (1.0 / 41.0)) * 2.0 - 1.0 ;\\\\n  vec4 gy = abs(gx) - 0.5 ;\\\\n  vec4 tx = floor(gx + 0.5);\\\\n  gx = gx - tx;\\\\n\\\\n  vec2 g00 = vec2(gx.x,gy.x);\\\\n  vec2 g10 = vec2(gx.y,gy.y);\\\\n  vec2 g01 = vec2(gx.z,gy.z);\\\\n  vec2 g11 = vec2(gx.w,gy.w);\\\\n\\\\n  vec4 norm = taylorInvSqrt(vec4(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11)));\\\\n  g00 *= norm.x;  \\\\n  g01 *= norm.y;  \\\\n  g10 *= norm.z;  \\\\n  g11 *= norm.w;  \\\\n\\\\n  float n00 = dot(g00, vec2(fx.x, fy.x));\\\\n  float n10 = dot(g10, vec2(fx.y, fy.y));\\\\n  float n01 = dot(g01, vec2(fx.z, fy.z));\\\\n  float n11 = dot(g11, vec2(fx.w, fy.w));\\\\n\\\\n  vec2 fade_xy = fade(Pf.xy);\\\\n  vec2 n_x = mix(vec2(n00, n01), vec2(n10, n11), fade_xy.x);\\\\n  float n_xy = mix(n_x.x, n_x.y, fade_xy.y);\\\\n  return 2.3 * n_xy;\\\\n}\\\\n\\\\n// Classic Perlin noise, periodic variant\\\\nfloat pnoise(vec2 P, vec2 rep)\\\\n{\\\\n  vec4 Pi = floor(P.xyxy) + vec4(0.0, 0.0, 1.0, 1.0);\\\\n  vec4 Pf = fract(P.xyxy) - vec4(0.0, 0.0, 1.0, 1.0);\\\\n  Pi = mod(Pi, rep.xyxy); // To create noise with explicit period\\\\n  Pi = mod289(Pi);        // To avoid truncation effects in permutation\\\\n  vec4 ix = Pi.xzxz;\\\\n  vec4 iy = Pi.yyww;\\\\n  vec4 fx = Pf.xzxz;\\\\n  vec4 fy = Pf.yyww;\\\\n\\\\n  vec4 i = permute(permute(ix) + iy);\\\\n\\\\n  vec4 gx = fract(i * (1.0 / 41.0)) * 2.0 - 1.0 ;\\\\n  vec4 gy = abs(gx) - 0.5 ;\\\\n  vec4 tx = floor(gx + 0.5);\\\\n  gx = gx - tx;\\\\n\\\\n  vec2 g00 = vec2(gx.x,gy.x);\\\\n  vec2 g10 = vec2(gx.y,gy.y);\\\\n  vec2 g01 = vec2(gx.z,gy.z);\\\\n  vec2 g11 = vec2(gx.w,gy.w);\\\\n\\\\n  vec4 norm = taylorInvSqrt(vec4(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11)));\\\\n  g00 *= norm.x;  \\\\n  g01 *= norm.y;  \\\\n  g10 *= norm.z;  \\\\n  g11 *= norm.w;  \\\\n\\\\n  float n00 = dot(g00, vec2(fx.x, fy.x));\\\\n  float n10 = dot(g10, vec2(fx.y, fy.y));\\\\n  float n01 = dot(g01, vec2(fx.z, fy.z));\\\\n  float n11 = dot(g11, vec2(fx.w, fy.w));\\\\n\\\\n  vec2 fade_xy = fade(Pf.xy);\\\\n  vec2 n_x = mix(vec2(n00, n01), vec2(n10, n11), fade_xy.x);\\\\n  float n_xy = mix(n_x.x, n_x.y, fade_xy.y);\\\\n  return 2.3 * n_xy;\\\\n}\\\\n',[xI.CLASSIC_PERLIN_3D]:'//\\\\n// GLSL textureless classic 3D noise \\\\\\\"cnoise\\\\\\\",\\\\n// with an RSL-style periodic variant \\\\\\\"pnoise\\\\\\\".\\\\n// Author:  Stefan Gustavson (stefan.gustavson@liu.se)\\\\n// Version: 2011-10-11\\\\n//\\\\n// Many thanks to Ian McEwan of Ashima Arts for the\\\\n// ideas for permutation and gradient selection.\\\\n//\\\\n// Copyright (c) 2011 Stefan Gustavson. All rights reserved.\\\\n// Distributed under the MIT license. See LICENSE file.\\\\n// https://github.com/stegu/webgl-noise\\\\n//\\\\n\\\\n// Classic Perlin noise\\\\nfloat cnoise(vec3 P)\\\\n{\\\\n  vec3 Pi0 = floor(P); // Integer part for indexing\\\\n  vec3 Pi1 = Pi0 + vec3(1.0); // Integer part + 1\\\\n  Pi0 = mod289(Pi0);\\\\n  Pi1 = mod289(Pi1);\\\\n  vec3 Pf0 = fract(P); // Fractional part for interpolation\\\\n  vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0\\\\n  vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\\\\n  vec4 iy = vec4(Pi0.yy, Pi1.yy);\\\\n  vec4 iz0 = Pi0.zzzz;\\\\n  vec4 iz1 = Pi1.zzzz;\\\\n\\\\n  vec4 ixy = permute(permute(ix) + iy);\\\\n  vec4 ixy0 = permute(ixy + iz0);\\\\n  vec4 ixy1 = permute(ixy + iz1);\\\\n\\\\n  vec4 gx0 = ixy0 * (1.0 / 7.0);\\\\n  vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5;\\\\n  gx0 = fract(gx0);\\\\n  vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0);\\\\n  vec4 sz0 = step(gz0, vec4(0.0));\\\\n  gx0 -= sz0 * (step(0.0, gx0) - 0.5);\\\\n  gy0 -= sz0 * (step(0.0, gy0) - 0.5);\\\\n\\\\n  vec4 gx1 = ixy1 * (1.0 / 7.0);\\\\n  vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5;\\\\n  gx1 = fract(gx1);\\\\n  vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1);\\\\n  vec4 sz1 = step(gz1, vec4(0.0));\\\\n  gx1 -= sz1 * (step(0.0, gx1) - 0.5);\\\\n  gy1 -= sz1 * (step(0.0, gy1) - 0.5);\\\\n\\\\n  vec3 g000 = vec3(gx0.x,gy0.x,gz0.x);\\\\n  vec3 g100 = vec3(gx0.y,gy0.y,gz0.y);\\\\n  vec3 g010 = vec3(gx0.z,gy0.z,gz0.z);\\\\n  vec3 g110 = vec3(gx0.w,gy0.w,gz0.w);\\\\n  vec3 g001 = vec3(gx1.x,gy1.x,gz1.x);\\\\n  vec3 g101 = vec3(gx1.y,gy1.y,gz1.y);\\\\n  vec3 g011 = vec3(gx1.z,gy1.z,gz1.z);\\\\n  vec3 g111 = vec3(gx1.w,gy1.w,gz1.w);\\\\n\\\\n  vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));\\\\n  g000 *= norm0.x;\\\\n  g010 *= norm0.y;\\\\n  g100 *= norm0.z;\\\\n  g110 *= norm0.w;\\\\n  vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));\\\\n  g001 *= norm1.x;\\\\n  g011 *= norm1.y;\\\\n  g101 *= norm1.z;\\\\n  g111 *= norm1.w;\\\\n\\\\n  float n000 = dot(g000, Pf0);\\\\n  float n100 = dot(g100, vec3(Pf1.x, Pf0.yz));\\\\n  float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z));\\\\n  float n110 = dot(g110, vec3(Pf1.xy, Pf0.z));\\\\n  float n001 = dot(g001, vec3(Pf0.xy, Pf1.z));\\\\n  float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z));\\\\n  float n011 = dot(g011, vec3(Pf0.x, Pf1.yz));\\\\n  float n111 = dot(g111, Pf1);\\\\n\\\\n  vec3 fade_xyz = fade(Pf0);\\\\n  vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z);\\\\n  vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y);\\\\n  float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); \\\\n  return 2.2 * n_xyz;\\\\n}\\\\n\\\\n// Classic Perlin noise, periodic variant\\\\nfloat pnoise(vec3 P, vec3 rep)\\\\n{\\\\n  vec3 Pi0 = mod(floor(P), rep); // Integer part, modulo period\\\\n  vec3 Pi1 = mod(Pi0 + vec3(1.0), rep); // Integer part + 1, mod period\\\\n  Pi0 = mod289(Pi0);\\\\n  Pi1 = mod289(Pi1);\\\\n  vec3 Pf0 = fract(P); // Fractional part for interpolation\\\\n  vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0\\\\n  vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\\\\n  vec4 iy = vec4(Pi0.yy, Pi1.yy);\\\\n  vec4 iz0 = Pi0.zzzz;\\\\n  vec4 iz1 = Pi1.zzzz;\\\\n\\\\n  vec4 ixy = permute(permute(ix) + iy);\\\\n  vec4 ixy0 = permute(ixy + iz0);\\\\n  vec4 ixy1 = permute(ixy + iz1);\\\\n\\\\n  vec4 gx0 = ixy0 * (1.0 / 7.0);\\\\n  vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5;\\\\n  gx0 = fract(gx0);\\\\n  vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0);\\\\n  vec4 sz0 = step(gz0, vec4(0.0));\\\\n  gx0 -= sz0 * (step(0.0, gx0) - 0.5);\\\\n  gy0 -= sz0 * (step(0.0, gy0) - 0.5);\\\\n\\\\n  vec4 gx1 = ixy1 * (1.0 / 7.0);\\\\n  vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5;\\\\n  gx1 = fract(gx1);\\\\n  vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1);\\\\n  vec4 sz1 = step(gz1, vec4(0.0));\\\\n  gx1 -= sz1 * (step(0.0, gx1) - 0.5);\\\\n  gy1 -= sz1 * (step(0.0, gy1) - 0.5);\\\\n\\\\n  vec3 g000 = vec3(gx0.x,gy0.x,gz0.x);\\\\n  vec3 g100 = vec3(gx0.y,gy0.y,gz0.y);\\\\n  vec3 g010 = vec3(gx0.z,gy0.z,gz0.z);\\\\n  vec3 g110 = vec3(gx0.w,gy0.w,gz0.w);\\\\n  vec3 g001 = vec3(gx1.x,gy1.x,gz1.x);\\\\n  vec3 g101 = vec3(gx1.y,gy1.y,gz1.y);\\\\n  vec3 g011 = vec3(gx1.z,gy1.z,gz1.z);\\\\n  vec3 g111 = vec3(gx1.w,gy1.w,gz1.w);\\\\n\\\\n  vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));\\\\n  g000 *= norm0.x;\\\\n  g010 *= norm0.y;\\\\n  g100 *= norm0.z;\\\\n  g110 *= norm0.w;\\\\n  vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));\\\\n  g001 *= norm1.x;\\\\n  g011 *= norm1.y;\\\\n  g101 *= norm1.z;\\\\n  g111 *= norm1.w;\\\\n\\\\n  float n000 = dot(g000, Pf0);\\\\n  float n100 = dot(g100, vec3(Pf1.x, Pf0.yz));\\\\n  float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z));\\\\n  float n110 = dot(g110, vec3(Pf1.xy, Pf0.z));\\\\n  float n001 = dot(g001, vec3(Pf0.xy, Pf1.z));\\\\n  float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z));\\\\n  float n011 = dot(g011, vec3(Pf0.x, Pf1.yz));\\\\n  float n111 = dot(g111, Pf1);\\\\n\\\\n  vec3 fade_xyz = fade(Pf0);\\\\n  vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z);\\\\n  vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y);\\\\n  float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); \\\\n  return 2.2 * n_xyz;\\\\n}\\\\n',[xI.CLASSIC_PERLIN_4D]:'//\\\\n// GLSL textureless classic 4D noise \\\\\\\"cnoise\\\\\\\",\\\\n// with an RSL-style periodic variant \\\\\\\"pnoise\\\\\\\".\\\\n// Author:  Stefan Gustavson (stefan.gustavson@liu.se)\\\\n// Version: 2011-08-22\\\\n//\\\\n// Many thanks to Ian McEwan of Ashima Arts for the\\\\n// ideas for permutation and gradient selection.\\\\n//\\\\n// Copyright (c) 2011 Stefan Gustavson. All rights reserved.\\\\n// Distributed under the MIT license. See LICENSE file.\\\\n// https://github.com/stegu/webgl-noise\\\\n//\\\\n\\\\n\\\\n\\\\n// Classic Perlin noise\\\\nfloat cnoise(vec4 P)\\\\n{\\\\n  vec4 Pi0 = floor(P); // Integer part for indexing\\\\n  vec4 Pi1 = Pi0 + 1.0; // Integer part + 1\\\\n  Pi0 = mod289(Pi0);\\\\n  Pi1 = mod289(Pi1);\\\\n  vec4 Pf0 = fract(P); // Fractional part for interpolation\\\\n  vec4 Pf1 = Pf0 - 1.0; // Fractional part - 1.0\\\\n  vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\\\\n  vec4 iy = vec4(Pi0.yy, Pi1.yy);\\\\n  vec4 iz0 = vec4(Pi0.zzzz);\\\\n  vec4 iz1 = vec4(Pi1.zzzz);\\\\n  vec4 iw0 = vec4(Pi0.wwww);\\\\n  vec4 iw1 = vec4(Pi1.wwww);\\\\n\\\\n  vec4 ixy = permute(permute(ix) + iy);\\\\n  vec4 ixy0 = permute(ixy + iz0);\\\\n  vec4 ixy1 = permute(ixy + iz1);\\\\n  vec4 ixy00 = permute(ixy0 + iw0);\\\\n  vec4 ixy01 = permute(ixy0 + iw1);\\\\n  vec4 ixy10 = permute(ixy1 + iw0);\\\\n  vec4 ixy11 = permute(ixy1 + iw1);\\\\n\\\\n  vec4 gx00 = ixy00 * (1.0 / 7.0);\\\\n  vec4 gy00 = floor(gx00) * (1.0 / 7.0);\\\\n  vec4 gz00 = floor(gy00) * (1.0 / 6.0);\\\\n  gx00 = fract(gx00) - 0.5;\\\\n  gy00 = fract(gy00) - 0.5;\\\\n  gz00 = fract(gz00) - 0.5;\\\\n  vec4 gw00 = vec4(0.75) - abs(gx00) - abs(gy00) - abs(gz00);\\\\n  vec4 sw00 = step(gw00, vec4(0.0));\\\\n  gx00 -= sw00 * (step(0.0, gx00) - 0.5);\\\\n  gy00 -= sw00 * (step(0.0, gy00) - 0.5);\\\\n\\\\n  vec4 gx01 = ixy01 * (1.0 / 7.0);\\\\n  vec4 gy01 = floor(gx01) * (1.0 / 7.0);\\\\n  vec4 gz01 = floor(gy01) * (1.0 / 6.0);\\\\n  gx01 = fract(gx01) - 0.5;\\\\n  gy01 = fract(gy01) - 0.5;\\\\n  gz01 = fract(gz01) - 0.5;\\\\n  vec4 gw01 = vec4(0.75) - abs(gx01) - abs(gy01) - abs(gz01);\\\\n  vec4 sw01 = step(gw01, vec4(0.0));\\\\n  gx01 -= sw01 * (step(0.0, gx01) - 0.5);\\\\n  gy01 -= sw01 * (step(0.0, gy01) - 0.5);\\\\n\\\\n  vec4 gx10 = ixy10 * (1.0 / 7.0);\\\\n  vec4 gy10 = floor(gx10) * (1.0 / 7.0);\\\\n  vec4 gz10 = floor(gy10) * (1.0 / 6.0);\\\\n  gx10 = fract(gx10) - 0.5;\\\\n  gy10 = fract(gy10) - 0.5;\\\\n  gz10 = fract(gz10) - 0.5;\\\\n  vec4 gw10 = vec4(0.75) - abs(gx10) - abs(gy10) - abs(gz10);\\\\n  vec4 sw10 = step(gw10, vec4(0.0));\\\\n  gx10 -= sw10 * (step(0.0, gx10) - 0.5);\\\\n  gy10 -= sw10 * (step(0.0, gy10) - 0.5);\\\\n\\\\n  vec4 gx11 = ixy11 * (1.0 / 7.0);\\\\n  vec4 gy11 = floor(gx11) * (1.0 / 7.0);\\\\n  vec4 gz11 = floor(gy11) * (1.0 / 6.0);\\\\n  gx11 = fract(gx11) - 0.5;\\\\n  gy11 = fract(gy11) - 0.5;\\\\n  gz11 = fract(gz11) - 0.5;\\\\n  vec4 gw11 = vec4(0.75) - abs(gx11) - abs(gy11) - abs(gz11);\\\\n  vec4 sw11 = step(gw11, vec4(0.0));\\\\n  gx11 -= sw11 * (step(0.0, gx11) - 0.5);\\\\n  gy11 -= sw11 * (step(0.0, gy11) - 0.5);\\\\n\\\\n  vec4 g0000 = vec4(gx00.x,gy00.x,gz00.x,gw00.x);\\\\n  vec4 g1000 = vec4(gx00.y,gy00.y,gz00.y,gw00.y);\\\\n  vec4 g0100 = vec4(gx00.z,gy00.z,gz00.z,gw00.z);\\\\n  vec4 g1100 = vec4(gx00.w,gy00.w,gz00.w,gw00.w);\\\\n  vec4 g0010 = vec4(gx10.x,gy10.x,gz10.x,gw10.x);\\\\n  vec4 g1010 = vec4(gx10.y,gy10.y,gz10.y,gw10.y);\\\\n  vec4 g0110 = vec4(gx10.z,gy10.z,gz10.z,gw10.z);\\\\n  vec4 g1110 = vec4(gx10.w,gy10.w,gz10.w,gw10.w);\\\\n  vec4 g0001 = vec4(gx01.x,gy01.x,gz01.x,gw01.x);\\\\n  vec4 g1001 = vec4(gx01.y,gy01.y,gz01.y,gw01.y);\\\\n  vec4 g0101 = vec4(gx01.z,gy01.z,gz01.z,gw01.z);\\\\n  vec4 g1101 = vec4(gx01.w,gy01.w,gz01.w,gw01.w);\\\\n  vec4 g0011 = vec4(gx11.x,gy11.x,gz11.x,gw11.x);\\\\n  vec4 g1011 = vec4(gx11.y,gy11.y,gz11.y,gw11.y);\\\\n  vec4 g0111 = vec4(gx11.z,gy11.z,gz11.z,gw11.z);\\\\n  vec4 g1111 = vec4(gx11.w,gy11.w,gz11.w,gw11.w);\\\\n\\\\n  vec4 norm00 = taylorInvSqrt(vec4(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100)));\\\\n  g0000 *= norm00.x;\\\\n  g0100 *= norm00.y;\\\\n  g1000 *= norm00.z;\\\\n  g1100 *= norm00.w;\\\\n\\\\n  vec4 norm01 = taylorInvSqrt(vec4(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101)));\\\\n  g0001 *= norm01.x;\\\\n  g0101 *= norm01.y;\\\\n  g1001 *= norm01.z;\\\\n  g1101 *= norm01.w;\\\\n\\\\n  vec4 norm10 = taylorInvSqrt(vec4(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110)));\\\\n  g0010 *= norm10.x;\\\\n  g0110 *= norm10.y;\\\\n  g1010 *= norm10.z;\\\\n  g1110 *= norm10.w;\\\\n\\\\n  vec4 norm11 = taylorInvSqrt(vec4(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111)));\\\\n  g0011 *= norm11.x;\\\\n  g0111 *= norm11.y;\\\\n  g1011 *= norm11.z;\\\\n  g1111 *= norm11.w;\\\\n\\\\n  float n0000 = dot(g0000, Pf0);\\\\n  float n1000 = dot(g1000, vec4(Pf1.x, Pf0.yzw));\\\\n  float n0100 = dot(g0100, vec4(Pf0.x, Pf1.y, Pf0.zw));\\\\n  float n1100 = dot(g1100, vec4(Pf1.xy, Pf0.zw));\\\\n  float n0010 = dot(g0010, vec4(Pf0.xy, Pf1.z, Pf0.w));\\\\n  float n1010 = dot(g1010, vec4(Pf1.x, Pf0.y, Pf1.z, Pf0.w));\\\\n  float n0110 = dot(g0110, vec4(Pf0.x, Pf1.yz, Pf0.w));\\\\n  float n1110 = dot(g1110, vec4(Pf1.xyz, Pf0.w));\\\\n  float n0001 = dot(g0001, vec4(Pf0.xyz, Pf1.w));\\\\n  float n1001 = dot(g1001, vec4(Pf1.x, Pf0.yz, Pf1.w));\\\\n  float n0101 = dot(g0101, vec4(Pf0.x, Pf1.y, Pf0.z, Pf1.w));\\\\n  float n1101 = dot(g1101, vec4(Pf1.xy, Pf0.z, Pf1.w));\\\\n  float n0011 = dot(g0011, vec4(Pf0.xy, Pf1.zw));\\\\n  float n1011 = dot(g1011, vec4(Pf1.x, Pf0.y, Pf1.zw));\\\\n  float n0111 = dot(g0111, vec4(Pf0.x, Pf1.yzw));\\\\n  float n1111 = dot(g1111, Pf1);\\\\n\\\\n  vec4 fade_xyzw = fade(Pf0);\\\\n  vec4 n_0w = mix(vec4(n0000, n1000, n0100, n1100), vec4(n0001, n1001, n0101, n1101), fade_xyzw.w);\\\\n  vec4 n_1w = mix(vec4(n0010, n1010, n0110, n1110), vec4(n0011, n1011, n0111, n1111), fade_xyzw.w);\\\\n  vec4 n_zw = mix(n_0w, n_1w, fade_xyzw.z);\\\\n  vec2 n_yzw = mix(n_zw.xy, n_zw.zw, fade_xyzw.y);\\\\n  float n_xyzw = mix(n_yzw.x, n_yzw.y, fade_xyzw.x);\\\\n  return 2.2 * n_xyzw;\\\\n}\\\\n\\\\n// Classic Perlin noise, periodic version\\\\nfloat pnoise(vec4 P, vec4 rep)\\\\n{\\\\n  vec4 Pi0 = mod(floor(P), rep); // Integer part modulo rep\\\\n  vec4 Pi1 = mod(Pi0 + 1.0, rep); // Integer part + 1 mod rep\\\\n  Pi0 = mod289(Pi0);\\\\n  Pi1 = mod289(Pi1);\\\\n  vec4 Pf0 = fract(P); // Fractional part for interpolation\\\\n  vec4 Pf1 = Pf0 - 1.0; // Fractional part - 1.0\\\\n  vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\\\\n  vec4 iy = vec4(Pi0.yy, Pi1.yy);\\\\n  vec4 iz0 = vec4(Pi0.zzzz);\\\\n  vec4 iz1 = vec4(Pi1.zzzz);\\\\n  vec4 iw0 = vec4(Pi0.wwww);\\\\n  vec4 iw1 = vec4(Pi1.wwww);\\\\n\\\\n  vec4 ixy = permute(permute(ix) + iy);\\\\n  vec4 ixy0 = permute(ixy + iz0);\\\\n  vec4 ixy1 = permute(ixy + iz1);\\\\n  vec4 ixy00 = permute(ixy0 + iw0);\\\\n  vec4 ixy01 = permute(ixy0 + iw1);\\\\n  vec4 ixy10 = permute(ixy1 + iw0);\\\\n  vec4 ixy11 = permute(ixy1 + iw1);\\\\n\\\\n  vec4 gx00 = ixy00 * (1.0 / 7.0);\\\\n  vec4 gy00 = floor(gx00) * (1.0 / 7.0);\\\\n  vec4 gz00 = floor(gy00) * (1.0 / 6.0);\\\\n  gx00 = fract(gx00) - 0.5;\\\\n  gy00 = fract(gy00) - 0.5;\\\\n  gz00 = fract(gz00) - 0.5;\\\\n  vec4 gw00 = vec4(0.75) - abs(gx00) - abs(gy00) - abs(gz00);\\\\n  vec4 sw00 = step(gw00, vec4(0.0));\\\\n  gx00 -= sw00 * (step(0.0, gx00) - 0.5);\\\\n  gy00 -= sw00 * (step(0.0, gy00) - 0.5);\\\\n\\\\n  vec4 gx01 = ixy01 * (1.0 / 7.0);\\\\n  vec4 gy01 = floor(gx01) * (1.0 / 7.0);\\\\n  vec4 gz01 = floor(gy01) * (1.0 / 6.0);\\\\n  gx01 = fract(gx01) - 0.5;\\\\n  gy01 = fract(gy01) - 0.5;\\\\n  gz01 = fract(gz01) - 0.5;\\\\n  vec4 gw01 = vec4(0.75) - abs(gx01) - abs(gy01) - abs(gz01);\\\\n  vec4 sw01 = step(gw01, vec4(0.0));\\\\n  gx01 -= sw01 * (step(0.0, gx01) - 0.5);\\\\n  gy01 -= sw01 * (step(0.0, gy01) - 0.5);\\\\n\\\\n  vec4 gx10 = ixy10 * (1.0 / 7.0);\\\\n  vec4 gy10 = floor(gx10) * (1.0 / 7.0);\\\\n  vec4 gz10 = floor(gy10) * (1.0 / 6.0);\\\\n  gx10 = fract(gx10) - 0.5;\\\\n  gy10 = fract(gy10) - 0.5;\\\\n  gz10 = fract(gz10) - 0.5;\\\\n  vec4 gw10 = vec4(0.75) - abs(gx10) - abs(gy10) - abs(gz10);\\\\n  vec4 sw10 = step(gw10, vec4(0.0));\\\\n  gx10 -= sw10 * (step(0.0, gx10) - 0.5);\\\\n  gy10 -= sw10 * (step(0.0, gy10) - 0.5);\\\\n\\\\n  vec4 gx11 = ixy11 * (1.0 / 7.0);\\\\n  vec4 gy11 = floor(gx11) * (1.0 / 7.0);\\\\n  vec4 gz11 = floor(gy11) * (1.0 / 6.0);\\\\n  gx11 = fract(gx11) - 0.5;\\\\n  gy11 = fract(gy11) - 0.5;\\\\n  gz11 = fract(gz11) - 0.5;\\\\n  vec4 gw11 = vec4(0.75) - abs(gx11) - abs(gy11) - abs(gz11);\\\\n  vec4 sw11 = step(gw11, vec4(0.0));\\\\n  gx11 -= sw11 * (step(0.0, gx11) - 0.5);\\\\n  gy11 -= sw11 * (step(0.0, gy11) - 0.5);\\\\n\\\\n  vec4 g0000 = vec4(gx00.x,gy00.x,gz00.x,gw00.x);\\\\n  vec4 g1000 = vec4(gx00.y,gy00.y,gz00.y,gw00.y);\\\\n  vec4 g0100 = vec4(gx00.z,gy00.z,gz00.z,gw00.z);\\\\n  vec4 g1100 = vec4(gx00.w,gy00.w,gz00.w,gw00.w);\\\\n  vec4 g0010 = vec4(gx10.x,gy10.x,gz10.x,gw10.x);\\\\n  vec4 g1010 = vec4(gx10.y,gy10.y,gz10.y,gw10.y);\\\\n  vec4 g0110 = vec4(gx10.z,gy10.z,gz10.z,gw10.z);\\\\n  vec4 g1110 = vec4(gx10.w,gy10.w,gz10.w,gw10.w);\\\\n  vec4 g0001 = vec4(gx01.x,gy01.x,gz01.x,gw01.x);\\\\n  vec4 g1001 = vec4(gx01.y,gy01.y,gz01.y,gw01.y);\\\\n  vec4 g0101 = vec4(gx01.z,gy01.z,gz01.z,gw01.z);\\\\n  vec4 g1101 = vec4(gx01.w,gy01.w,gz01.w,gw01.w);\\\\n  vec4 g0011 = vec4(gx11.x,gy11.x,gz11.x,gw11.x);\\\\n  vec4 g1011 = vec4(gx11.y,gy11.y,gz11.y,gw11.y);\\\\n  vec4 g0111 = vec4(gx11.z,gy11.z,gz11.z,gw11.z);\\\\n  vec4 g1111 = vec4(gx11.w,gy11.w,gz11.w,gw11.w);\\\\n\\\\n  vec4 norm00 = taylorInvSqrt(vec4(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100)));\\\\n  g0000 *= norm00.x;\\\\n  g0100 *= norm00.y;\\\\n  g1000 *= norm00.z;\\\\n  g1100 *= norm00.w;\\\\n\\\\n  vec4 norm01 = taylorInvSqrt(vec4(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101)));\\\\n  g0001 *= norm01.x;\\\\n  g0101 *= norm01.y;\\\\n  g1001 *= norm01.z;\\\\n  g1101 *= norm01.w;\\\\n\\\\n  vec4 norm10 = taylorInvSqrt(vec4(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110)));\\\\n  g0010 *= norm10.x;\\\\n  g0110 *= norm10.y;\\\\n  g1010 *= norm10.z;\\\\n  g1110 *= norm10.w;\\\\n\\\\n  vec4 norm11 = taylorInvSqrt(vec4(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111)));\\\\n  g0011 *= norm11.x;\\\\n  g0111 *= norm11.y;\\\\n  g1011 *= norm11.z;\\\\n  g1111 *= norm11.w;\\\\n\\\\n  float n0000 = dot(g0000, Pf0);\\\\n  float n1000 = dot(g1000, vec4(Pf1.x, Pf0.yzw));\\\\n  float n0100 = dot(g0100, vec4(Pf0.x, Pf1.y, Pf0.zw));\\\\n  float n1100 = dot(g1100, vec4(Pf1.xy, Pf0.zw));\\\\n  float n0010 = dot(g0010, vec4(Pf0.xy, Pf1.z, Pf0.w));\\\\n  float n1010 = dot(g1010, vec4(Pf1.x, Pf0.y, Pf1.z, Pf0.w));\\\\n  float n0110 = dot(g0110, vec4(Pf0.x, Pf1.yz, Pf0.w));\\\\n  float n1110 = dot(g1110, vec4(Pf1.xyz, Pf0.w));\\\\n  float n0001 = dot(g0001, vec4(Pf0.xyz, Pf1.w));\\\\n  float n1001 = dot(g1001, vec4(Pf1.x, Pf0.yz, Pf1.w));\\\\n  float n0101 = dot(g0101, vec4(Pf0.x, Pf1.y, Pf0.z, Pf1.w));\\\\n  float n1101 = dot(g1101, vec4(Pf1.xy, Pf0.z, Pf1.w));\\\\n  float n0011 = dot(g0011, vec4(Pf0.xy, Pf1.zw));\\\\n  float n1011 = dot(g1011, vec4(Pf1.x, Pf0.y, Pf1.zw));\\\\n  float n0111 = dot(g0111, vec4(Pf0.x, Pf1.yzw));\\\\n  float n1111 = dot(g1111, Pf1);\\\\n\\\\n  vec4 fade_xyzw = fade(Pf0);\\\\n  vec4 n_0w = mix(vec4(n0000, n1000, n0100, n1100), vec4(n0001, n1001, n0101, n1101), fade_xyzw.w);\\\\n  vec4 n_1w = mix(vec4(n0010, n1010, n0110, n1110), vec4(n0011, n1011, n0111, n1111), fade_xyzw.w);\\\\n  vec4 n_zw = mix(n_0w, n_1w, fade_xyzw.z);\\\\n  vec2 n_yzw = mix(n_zw.xy, n_zw.zw, fade_xyzw.y);\\\\n  float n_xyzw = mix(n_yzw.x, n_yzw.y, fade_xyzw.x);\\\\n  return 2.2 * n_xyzw;\\\\n}\\\\n',[xI.NOISE_2D]:\\\\\\\"//\\\\n// Description : Array and textureless GLSL 2D simplex noise function.\\\\n//      Author : Ian McEwan, Ashima Arts.\\\\n//  Maintainer : stegu\\\\n//     Lastmod : 20110822 (ijm)\\\\n//     License : Copyright (C) 2011 Ashima Arts. All rights reserved.\\\\n//               Distributed under the MIT License. See LICENSE file.\\\\n//               https://github.com/ashima/webgl-noise\\\\n//               https://github.com/stegu/webgl-noise\\\\n// \\\\n\\\\n\\\\nfloat snoise(vec2 v)\\\\n  {\\\\n  const vec4 C = vec4(0.211324865405187,  // (3.0-sqrt(3.0))/6.0\\\\n                      0.366025403784439,  // 0.5*(sqrt(3.0)-1.0)\\\\n                     -0.577350269189626,  // -1.0 + 2.0 * C.x\\\\n                      0.024390243902439); // 1.0 / 41.0\\\\n// First corner\\\\n  vec2 i  = floor(v + dot(v, C.yy) );\\\\n  vec2 x0 = v -   i + dot(i, C.xx);\\\\n\\\\n// Other corners\\\\n  vec2 i1;\\\\n  //i1.x = step( x0.y, x0.x ); // x0.x > x0.y ? 1.0 : 0.0\\\\n  //i1.y = 1.0 - i1.x;\\\\n  i1 = (x0.x > x0.y) ? vec2(1.0, 0.0) : vec2(0.0, 1.0);\\\\n  // x0 = x0 - 0.0 + 0.0 * C.xx ;\\\\n  // x1 = x0 - i1 + 1.0 * C.xx ;\\\\n  // x2 = x0 - 1.0 + 2.0 * C.xx ;\\\\n  vec4 x12 = x0.xyxy + C.xxzz;\\\\n  x12.xy -= i1;\\\\n\\\\n// Permutations\\\\n  i = mod289(i); // Avoid truncation effects in permutation\\\\n  vec3 p = permute( permute( i.y + vec3(0.0, i1.y, 1.0 ))\\\\n\\\\t\\\\t+ i.x + vec3(0.0, i1.x, 1.0 ));\\\\n\\\\n  vec3 m = max(0.5 - vec3(dot(x0,x0), dot(x12.xy,x12.xy), dot(x12.zw,x12.zw)), 0.0);\\\\n  m = m*m ;\\\\n  m = m*m ;\\\\n\\\\n// Gradients: 41 points uniformly over a line, mapped onto a diamond.\\\\n// The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287)\\\\n\\\\n  vec3 x = 2.0 * fract(p * C.www) - 1.0;\\\\n  vec3 h = abs(x) - 0.5;\\\\n  vec3 ox = floor(x + 0.5);\\\\n  vec3 a0 = x - ox;\\\\n\\\\n// Normalise gradients implicitly by scaling m\\\\n// Approximation of: m *= inversesqrt( a0*a0 + h*h );\\\\n  m *= 1.79284291400159 - 0.85373472095314 * ( a0*a0 + h*h );\\\\n\\\\n// Compute final noise value at P\\\\n  vec3 g;\\\\n  g.x  = a0.x  * x0.x  + h.x  * x0.y;\\\\n  g.yz = a0.yz * x12.xz + h.yz * x12.yw;\\\\n  return 130.0 * dot(m, g);\\\\n}\\\\n\\\\\\\",[xI.NOISE_3D]:\\\\\\\"//\\\\n// Description : Array and textureless GLSL 2D/3D/4D simplex \\\\n//               noise functions.\\\\n//      Author : Ian McEwan, Ashima Arts.\\\\n//  Maintainer : stegu\\\\n//     Lastmod : 20110822 (ijm)\\\\n//     License : Copyright (C) 2011 Ashima Arts. All rights reserved.\\\\n//               Distributed under the MIT License. See LICENSE file.\\\\n//               https://github.com/ashima/webgl-noise\\\\n//               https://github.com/stegu/webgl-noise\\\\n// \\\\n\\\\n\\\\n\\\\nfloat snoise(vec3 v)\\\\n  { \\\\n  const vec2  C = vec2(1.0/6.0, 1.0/3.0) ;\\\\n  const vec4  D = vec4(0.0, 0.5, 1.0, 2.0);\\\\n\\\\n// First corner\\\\n  vec3 i  = floor(v + dot(v, C.yyy) );\\\\n  vec3 x0 =   v - i + dot(i, C.xxx) ;\\\\n\\\\n// Other corners\\\\n  vec3 g = step(x0.yzx, x0.xyz);\\\\n  vec3 l = 1.0 - g;\\\\n  vec3 i1 = min( g.xyz, l.zxy );\\\\n  vec3 i2 = max( g.xyz, l.zxy );\\\\n\\\\n  //   x0 = x0 - 0.0 + 0.0 * C.xxx;\\\\n  //   x1 = x0 - i1  + 1.0 * C.xxx;\\\\n  //   x2 = x0 - i2  + 2.0 * C.xxx;\\\\n  //   x3 = x0 - 1.0 + 3.0 * C.xxx;\\\\n  vec3 x1 = x0 - i1 + C.xxx;\\\\n  vec3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y\\\\n  vec3 x3 = x0 - D.yyy;      // -1.0+3.0*C.x = -0.5 = -D.y\\\\n\\\\n// Permutations\\\\n  i = mod289(i); \\\\n  vec4 p = permute( permute( permute( \\\\n             i.z + vec4(0.0, i1.z, i2.z, 1.0 ))\\\\n           + i.y + vec4(0.0, i1.y, i2.y, 1.0 )) \\\\n           + i.x + vec4(0.0, i1.x, i2.x, 1.0 ));\\\\n\\\\n// Gradients: 7x7 points over a square, mapped onto an octahedron.\\\\n// The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)\\\\n  float n_ = 0.142857142857; // 1.0/7.0\\\\n  vec3  ns = n_ * D.wyz - D.xzx;\\\\n\\\\n  vec4 j = p - 49.0 * floor(p * ns.z * ns.z);  //  mod(p,7*7)\\\\n\\\\n  vec4 x_ = floor(j * ns.z);\\\\n  vec4 y_ = floor(j - 7.0 * x_ );    // mod(j,N)\\\\n\\\\n  vec4 x = x_ *ns.x + ns.yyyy;\\\\n  vec4 y = y_ *ns.x + ns.yyyy;\\\\n  vec4 h = 1.0 - abs(x) - abs(y);\\\\n\\\\n  vec4 b0 = vec4( x.xy, y.xy );\\\\n  vec4 b1 = vec4( x.zw, y.zw );\\\\n\\\\n  //vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0;\\\\n  //vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0;\\\\n  vec4 s0 = floor(b0)*2.0 + 1.0;\\\\n  vec4 s1 = floor(b1)*2.0 + 1.0;\\\\n  vec4 sh = -step(h, vec4(0.0));\\\\n\\\\n  vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;\\\\n  vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;\\\\n\\\\n  vec3 p0 = vec3(a0.xy,h.x);\\\\n  vec3 p1 = vec3(a0.zw,h.y);\\\\n  vec3 p2 = vec3(a1.xy,h.z);\\\\n  vec3 p3 = vec3(a1.zw,h.w);\\\\n\\\\n//Normalise gradients\\\\n  vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));\\\\n  p0 *= norm.x;\\\\n  p1 *= norm.y;\\\\n  p2 *= norm.z;\\\\n  p3 *= norm.w;\\\\n\\\\n// Mix final noise value\\\\n  vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);\\\\n  m = m * m;\\\\n  return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1), \\\\n                                dot(p2,x2), dot(p3,x3) ) );\\\\n  }\\\\n\\\\\\\",[xI.NOISE_4D]:\\\\\\\"//\\\\n// Description : Array and textureless GLSL 2D/3D/4D simplex \\\\n//               noise functions.\\\\n//      Author : Ian McEwan, Ashima Arts.\\\\n//  Maintainer : stegu\\\\n//     Lastmod : 20110822 (ijm)\\\\n//     License : Copyright (C) 2011 Ashima Arts. All rights reserved.\\\\n//               Distributed under the MIT License. See LICENSE file.\\\\n//               https://github.com/ashima/webgl-noise\\\\n//               https://github.com/stegu/webgl-noise\\\\n// \\\\n\\\\n\\\\n\\\\n\\\\n\\\\n\\\\n\\\\nvec4 grad4(float j, vec4 ip)\\\\n  {\\\\n  const vec4 ones = vec4(1.0, 1.0, 1.0, -1.0);\\\\n  vec4 p,s;\\\\n\\\\n  p.xyz = floor( fract (vec3(j) * ip.xyz) * 7.0) * ip.z - 1.0;\\\\n  p.w = 1.5 - dot(abs(p.xyz), ones.xyz);\\\\n  s = vec4(lessThan(p, vec4(0.0)));\\\\n  p.xyz = p.xyz + (s.xyz*2.0 - 1.0) * s.www; \\\\n\\\\n  return p;\\\\n  }\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\n// (sqrt(5) - 1)/4 = F4, used once below\\\\n#define F4 0.309016994374947451\\\\n\\\\nfloat snoise(vec4 v)\\\\n  {\\\\n  const vec4  C = vec4( 0.138196601125011,  // (5 - sqrt(5))/20  G4\\\\n                        0.276393202250021,  // 2 * G4\\\\n                        0.414589803375032,  // 3 * G4\\\\n                       -0.447213595499958); // -1 + 4 * G4\\\\n\\\\n// First corner\\\\n  vec4 i  = floor(v + dot(v, vec4(F4)) );\\\\n  vec4 x0 = v -   i + dot(i, C.xxxx);\\\\n\\\\n// Other corners\\\\n\\\\n// Rank sorting originally contributed by Bill Licea-Kane, AMD (formerly ATI)\\\\n  vec4 i0;\\\\n  vec3 isX = step( x0.yzw, x0.xxx );\\\\n  vec3 isYZ = step( x0.zww, x0.yyz );\\\\n//  i0.x = dot( isX, vec3( 1.0 ) );\\\\n  i0.x = isX.x + isX.y + isX.z;\\\\n  i0.yzw = 1.0 - isX;\\\\n//  i0.y += dot( isYZ.xy, vec2( 1.0 ) );\\\\n  i0.y += isYZ.x + isYZ.y;\\\\n  i0.zw += 1.0 - isYZ.xy;\\\\n  i0.z += isYZ.z;\\\\n  i0.w += 1.0 - isYZ.z;\\\\n\\\\n  // i0 now contains the unique values 0,1,2,3 in each channel\\\\n  vec4 i3 = clamp( i0, 0.0, 1.0 );\\\\n  vec4 i2 = clamp( i0-1.0, 0.0, 1.0 );\\\\n  vec4 i1 = clamp( i0-2.0, 0.0, 1.0 );\\\\n\\\\n  //  x0 = x0 - 0.0 + 0.0 * C.xxxx\\\\n  //  x1 = x0 - i1  + 1.0 * C.xxxx\\\\n  //  x2 = x0 - i2  + 2.0 * C.xxxx\\\\n  //  x3 = x0 - i3  + 3.0 * C.xxxx\\\\n  //  x4 = x0 - 1.0 + 4.0 * C.xxxx\\\\n  vec4 x1 = x0 - i1 + C.xxxx;\\\\n  vec4 x2 = x0 - i2 + C.yyyy;\\\\n  vec4 x3 = x0 - i3 + C.zzzz;\\\\n  vec4 x4 = x0 + C.wwww;\\\\n\\\\n// Permutations\\\\n  i = mod289(i); \\\\n  float j0 = permute( permute( permute( permute(i.w) + i.z) + i.y) + i.x);\\\\n  vec4 j1 = permute( permute( permute( permute (\\\\n             i.w + vec4(i1.w, i2.w, i3.w, 1.0 ))\\\\n           + i.z + vec4(i1.z, i2.z, i3.z, 1.0 ))\\\\n           + i.y + vec4(i1.y, i2.y, i3.y, 1.0 ))\\\\n           + i.x + vec4(i1.x, i2.x, i3.x, 1.0 ));\\\\n\\\\n// Gradients: 7x7x6 points over a cube, mapped onto a 4-cross polytope\\\\n// 7*7*6 = 294, which is close to the ring size 17*17 = 289.\\\\n  vec4 ip = vec4(1.0/294.0, 1.0/49.0, 1.0/7.0, 0.0) ;\\\\n\\\\n  vec4 p0 = grad4(j0,   ip);\\\\n  vec4 p1 = grad4(j1.x, ip);\\\\n  vec4 p2 = grad4(j1.y, ip);\\\\n  vec4 p3 = grad4(j1.z, ip);\\\\n  vec4 p4 = grad4(j1.w, ip);\\\\n\\\\n// Normalise gradients\\\\n  vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));\\\\n  p0 *= norm.x;\\\\n  p1 *= norm.y;\\\\n  p2 *= norm.z;\\\\n  p3 *= norm.w;\\\\n  p4 *= taylorInvSqrt(dot(p4,p4));\\\\n\\\\n// Mix contributions from the five corners\\\\n  vec3 m0 = max(0.6 - vec3(dot(x0,x0), dot(x1,x1), dot(x2,x2)), 0.0);\\\\n  vec2 m1 = max(0.6 - vec2(dot(x3,x3), dot(x4,x4)            ), 0.0);\\\\n  m0 = m0 * m0;\\\\n  m1 = m1 * m1;\\\\n  return 49.0 * ( dot(m0*m0, vec3( dot( p0, x0 ), dot( p1, x1 ), dot( p2, x2 )))\\\\n               + dot(m1*m1, vec2( dot( p3, x3 ), dot( p4, x4 ) ) ) ) ;\\\\n\\\\n  }\\\\n\\\\\\\"},TI={[xI.CLASSIC_PERLIN_2D]:Do.VEC2,[xI.CLASSIC_PERLIN_3D]:Do.VEC3,[xI.CLASSIC_PERLIN_4D]:Do.VEC4,[xI.NOISE_2D]:Do.VEC2,[xI.NOISE_3D]:Do.VEC3,[xI.NOISE_4D]:Do.VEC4},AI={[xI.CLASSIC_PERLIN_2D]:Do.FLOAT,[xI.CLASSIC_PERLIN_3D]:Do.FLOAT,[xI.CLASSIC_PERLIN_4D]:Do.FLOAT,[xI.NOISE_2D]:Do.FLOAT,[xI.NOISE_3D]:Do.FLOAT,[xI.NOISE_4D]:Do.FLOAT},EI={[xI.CLASSIC_PERLIN_2D]:\\\\\\\"cnoise\\\\\\\",[xI.CLASSIC_PERLIN_3D]:\\\\\\\"cnoise\\\\\\\",[xI.CLASSIC_PERLIN_4D]:\\\\\\\"cnoise\\\\\\\",[xI.NOISE_2D]:\\\\\\\"snoise\\\\\\\",[xI.NOISE_3D]:\\\\\\\"snoise\\\\\\\",[xI.NOISE_4D]:\\\\\\\"snoise\\\\\\\"};var MI;!function(t){t[t.NoChange=0]=\\\\\\\"NoChange\\\\\\\",t[t.Float=1]=\\\\\\\"Float\\\\\\\",t[t.Vec2=2]=\\\\\\\"Vec2\\\\\\\",t[t.Vec3=3]=\\\\\\\"Vec3\\\\\\\",t[t.Vec4=4]=\\\\\\\"Vec4\\\\\\\"}(MI||(MI={}));const SI=[MI.NoChange,MI.Float,MI.Vec2,MI.Vec3,MI.Vec4],CI={[MI.NoChange]:\\\\\\\"Same as noise\\\\\\\",[MI.Float]:\\\\\\\"Float\\\\\\\",[MI.Vec2]:\\\\\\\"Vec2\\\\\\\",[MI.Vec3]:\\\\\\\"Vec3\\\\\\\",[MI.Vec4]:\\\\\\\"Vec4\\\\\\\"},NI={[MI.NoChange]:Do.FLOAT,[MI.Float]:Do.FLOAT,[MI.Vec2]:Do.VEC2,[MI.Vec3]:Do.VEC3,[MI.Vec4]:Do.VEC4},LI=[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\",\\\\\\\"w\\\\\\\"],OI=\\\\\\\"noise\\\\\\\",RI=bI.indexOf(xI.NOISE_3D),PI=MI.NoChange,II={amp:1,freq:1};var FI;!function(t){t.AMP=\\\\\\\"amp\\\\\\\",t.POSITION=\\\\\\\"position\\\\\\\",t.FREQ=\\\\\\\"freq\\\\\\\",t.OFFSET=\\\\\\\"offset\\\\\\\"}(FI||(FI={}));const DI=new class extends aa{constructor(){super(...arguments),this.type=oa.INTEGER(RI,{menu:{entries:bI.map(((t,e)=>({name:`${t} (output: ${AI[t]})`,value:e})))}}),this.outputType=oa.INTEGER(PI,{menu:{entries:SI.map((t=>{const e=SI[t];return{name:CI[e],value:e}}))}}),this.octaves=oa.INTEGER(3,{range:[1,10],rangeLocked:[!0,!1]}),this.ampAttenuation=oa.FLOAT(.5,{range:[0,1]}),this.freqIncrease=oa.FLOAT(2,{range:[0,10],separatorAfter:!0})}};class kI extends df{constructor(){super(...arguments),this.paramsConfig=DI}static type(){return\\\\\\\"noise\\\\\\\"}initializeNode(){super.initializeNode(),this.io.connection_points.initializeNode(),this.io.connection_points.spare_params.set_inputless_param_names([\\\\\\\"octaves\\\\\\\",\\\\\\\"ampAttenuation\\\\\\\",\\\\\\\"freqIncrease\\\\\\\"]),this.io.outputs.setNamedOutputConnectionPoints([new Vo(OI,Do.FLOAT)]),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this)),this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this)),this.io.connection_points.set_output_name_function((()=>OI))}_gl_input_name(t){return[FI.AMP,FI.POSITION,FI.FREQ,FI.OFFSET][t]}paramDefaultValue(t){return II[t]}_expected_input_types(){const t=bI[this.pv.type],e=this._expected_output_types()[0],n=TI[t];return[e,n,n,n]}_expected_output_types(){const t=bI[this.pv.type],e=SI[this.pv.outputType];return e==MI.NoChange?[TI[t]]:[NI[e]]}setLines(t){const e=[],n=[],i=bI[this.pv.type],r=wI[i],s=AI[i];e.push(new Tf(this,\\\\\\\"// Modulo 289 without a division (only multiplications)\\\\nfloat mod289(float x) {\\\\n  return x - floor(x * (1.0 / 289.0)) * 289.0;\\\\n}\\\\nvec2 mod289(vec2 x) {\\\\n  return x - floor(x * (1.0 / 289.0)) * 289.0;\\\\n}\\\\nvec3 mod289(vec3 x) {\\\\n  return x - floor(x * (1.0 / 289.0)) * 289.0;\\\\n}\\\\nvec4 mod289(vec4 x) {\\\\n  return x - floor(x * (1.0 / 289.0)) * 289.0;\\\\n}\\\\n// Modulo 7 without a division\\\\nvec3 mod7(vec3 x) {\\\\n  return x - floor(x * (1.0 / 7.0)) * 7.0;\\\\n}\\\\n\\\\n// Permutation polynomial: (34x^2 + x) mod 289\\\\nfloat permute(float x) {\\\\n     return mod289(((x*34.0)+1.0)*x);\\\\n}\\\\nvec3 permute(vec3 x) {\\\\n  return mod289((34.0 * x + 1.0) * x);\\\\n}\\\\nvec4 permute(vec4 x) {\\\\n     return mod289(((x*34.0)+1.0)*x);\\\\n}\\\\n\\\\nfloat taylorInvSqrt(float r)\\\\n{\\\\n  return 1.79284291400159 - 0.85373472095314 * r;\\\\n}\\\\nvec4 taylorInvSqrt(vec4 r)\\\\n{\\\\n  return 1.79284291400159 - 0.85373472095314 * r;\\\\n}\\\\n\\\\nvec2 fade(vec2 t) {\\\\n  return t*t*t*(t*(t*6.0-15.0)+10.0);\\\\n}\\\\nvec3 fade(vec3 t) {\\\\n  return t*t*t*(t*(t*6.0-15.0)+10.0);\\\\n}\\\\nvec4 fade(vec4 t) {\\\\n  return t*t*t*(t*(t*6.0-15.0)+10.0);\\\\n}\\\\\\\")),e.push(new Tf(this,r)),e.push(new Tf(this,this.fbm_function()));const o=this._expected_output_types()[0];if(o==s){const t=this.single_noise_line();n.push(t)}else{const t=Go[o],e=[],r=this.glVarName(\\\\\\\"noise\\\\\\\");for(let s=0;s<t;s++){const t=LI[s];e.push(`${r}${t}`);const o=TI[i],a=Go[o],l=`${o}(${f.range(a).map((t=>uf.float(1e3*s))).join(\\\\\\\", \\\\\\\")})`,c=this.single_noise_line(t,t,l);n.push(c)}const s=`vec${t} ${r} = vec${t}(${e.join(\\\\\\\", \\\\\\\")})`;n.push(s)}t.addDefinitions(this,e),t.addBodyLines(this,n)}fbm_method_name(){const t=bI[this.pv.type];return`fbm_${EI[t]}_${this.name()}`}fbm_function(){const t=bI[this.pv.type],e=EI[t],n=TI[t];return`\\\\nfloat ${this.fbm_method_name()} (in ${n} st) {\\\\n\\\\tfloat value = 0.0;\\\\n\\\\tfloat amplitude = 1.0;\\\\n\\\\tfor (int i = 0; i < ${uf.integer(this.pv.octaves)}; i++) {\\\\n\\\\t\\\\tvalue += amplitude * ${e}(st);\\\\n\\\\t\\\\tst *= ${uf.float(this.pv.freqIncrease)};\\\\n\\\\t\\\\tamplitude *= ${uf.float(this.pv.ampAttenuation)};\\\\n\\\\t}\\\\n\\\\treturn value;\\\\n}\\\\n`}single_noise_line(t,e,n){const i=this.fbm_method_name(),r=uf.any(this.variableForInput(FI.AMP)),s=uf.any(this.variableForInput(FI.POSITION)),o=uf.any(this.variableForInput(FI.FREQ));let a=uf.any(this.variableForInput(FI.OFFSET));n&&(a=`(${a}+${n})`);const l=[`(${s}*${o})+${a}`].join(\\\\\\\", \\\\\\\"),c=this.glVarName(OI),u=`${r}*${i}(${l})`;if(e)return`float ${c}${t} = (${u}).${e}`;return`${this.io.outputs.namedOutputConnectionPoints()[0].type()} ${c} = ${u}`}}class BI extends BO{static type(){return\\\\\\\"null\\\\\\\"}setLines(t){const e=uf.any(this.variableForInput(this._gl_input_name(0))),n=this.io.outputs.namedOutputConnectionPoints()[0],i=`${n.type()} ${this.glVarName(n.name())} = ${e}`;t.addBodyLines(this,[i])}}const zI=new class extends aa{};class UI extends df{constructor(){super(...arguments),this.paramsConfig=zI}static type(){return\\\\\\\"output\\\\\\\"}initializeNode(){super.initializeNode(),this.addPostDirtyHook(\\\\\\\"_set_mat_to_recompile\\\\\\\",this._set_mat_to_recompile.bind(this)),this.lifecycle.add_on_add_hook((()=>{var t,e;null===(e=null===(t=this.material_node)||void 0===t?void 0:t.assemblerController)||void 0===e||e.add_output_inputs(this)}))}setLines(t){t.assembler().set_node_lines_output(this,t)}}class GI{constructor(){this._param_configs=[]}reset(){this._param_configs=[]}push(t){this._param_configs.push(t)}list(){return this._param_configs}}const VI=new class extends aa{constructor(){super(...arguments),this.name=oa.STRING(\\\\\\\"\\\\\\\"),this.type=oa.INTEGER(ko.indexOf(Do.FLOAT),{menu:{entries:ko.map(((t,e)=>({name:t,value:e})))}}),this.asColor=oa.BOOLEAN(0,{visibleIf:{type:ko.indexOf(Do.VEC3)}})}};class HI extends df{constructor(){super(...arguments),this.paramsConfig=VI,this._allow_inputs_created_from_params=!1,this._on_create_set_name_if_none_bound=this._on_create_set_name_if_none.bind(this)}static type(){return\\\\\\\"param\\\\\\\"}initializeNode(){this.addPostDirtyHook(\\\\\\\"_set_mat_to_recompile\\\\\\\",this._set_mat_to_recompile.bind(this)),this.lifecycle.add_on_create_hook(this._on_create_set_name_if_none_bound),this.io.connection_points.initializeNode(),this.io.connection_points.set_expected_input_types_function((()=>[])),this.io.connection_points.set_expected_output_types_function((()=>[ko[this.pv.type]])),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.name])}))}))}setLines(t){const e=[],n=ko[this.pv.type],i=this.uniform_name();e.push(new Af(this,n,i)),t.addDefinitions(this,e)}paramsGenerating(){return!0}setParamConfigs(){const t=ko[this.pv.type],e=Uo[t];let n=Bo[t];if(this._param_configs_controller=this._param_configs_controller||new GI,this._param_configs_controller.reset(),n==Es.VECTOR3&&this.p.asColor.value&&m.isArray(e)&&3==e.length){const t=new $f(Es.COLOR,this.pv.name,e,this.uniform_name());this._param_configs_controller.push(t)}else{const t=new $f(n,this.pv.name,e,this.uniform_name());this._param_configs_controller.push(t)}}uniform_name(){const t=this.io.outputs.namedOutputConnectionPoints()[0];return this.glVarName(t.name())}set_gl_type(t){const e=ko.indexOf(t);this.p.type.set(e)}_on_create_set_name_if_none(){\\\\\\\"\\\\\\\"==this.pv.name&&this.p.name.set(this.name())}}class jI extends kO{static type(){return\\\\\\\"refract\\\\\\\"}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function((t=>[\\\\\\\"I\\\\\\\",\\\\\\\"N\\\\\\\",\\\\\\\"eta\\\\\\\"][t])),this.io.connection_points.set_output_name_function((t=>\\\\\\\"refract\\\\\\\")),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this))}gl_method_name(){return\\\\\\\"refract\\\\\\\"}_expected_input_types(){const t=this.io.connection_points.first_input_connection_type()||Do.VEC3;return[t,t,Do.FLOAT]}_expected_output_types(){return[this._expected_input_types()[0]]}}const WI=\\\\\\\"SSSModel\\\\\\\";const qI=new class extends aa{constructor(){super(...arguments),this.color=oa.COLOR([1,1,1]),this.thickness=oa.FLOAT(.1),this.power=oa.FLOAT(2),this.scale=oa.FLOAT(16),this.distortion=oa.FLOAT(.1),this.ambient=oa.FLOAT(.4),this.attenuation=oa.FLOAT(.8)}};class XI extends df{constructor(){super(...arguments),this.paramsConfig=qI}static type(){return\\\\\\\"SSSModel\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new Vo(WI,Do.SSS_MODEL)])}setLines(t){const e=[],n=this.glVarName(WI);e.push(`SSSModel ${n}`),e.push(`${n}.isActive = true;`),e.push(this._paramLineFloat(n,this.p.color)),e.push(this._paramLineFloat(n,this.p.thickness)),e.push(this._paramLineFloat(n,this.p.power)),e.push(this._paramLineFloat(n,this.p.scale)),e.push(this._paramLineFloat(n,this.p.distortion)),e.push(this._paramLineFloat(n,this.p.ambient)),e.push(this._paramLineFloat(n,this.p.attenuation)),t.addBodyLines(this,e)}_paramLineFloat(t,e){return`${t}.${e.name()} = ${uf.vector3(this.variableForInputParam(e))};`}}class YI extends BO{static type(){return\\\\\\\"quatMult\\\\\\\"}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function((t=>[\\\\\\\"quat0\\\\\\\",\\\\\\\"quat1\\\\\\\"][t])),this.io.connection_points.set_expected_input_types_function((()=>[Do.VEC4,Do.VEC4])),this.io.connection_points.set_expected_output_types_function((()=>[Do.VEC4]))}gl_method_name(){return\\\\\\\"quatMult\\\\\\\"}gl_function_definitions(){return[new Tf(this,GR)]}}var $I;!function(t){t.AXIS=\\\\\\\"axis\\\\\\\",t.ANGLE=\\\\\\\"angle\\\\\\\"}($I||($I={}));const JI=[$I.AXIS,$I.ANGLE],ZI={[$I.AXIS]:[0,0,1],[$I.ANGLE]:0};class QI extends zO{static type(){return\\\\\\\"quatFromAxisAngle\\\\\\\"}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function((t=>JI[t])),this.io.connection_points.set_expected_input_types_function((()=>[Do.VEC3,Do.FLOAT])),this.io.connection_points.set_expected_output_types_function((()=>[Do.VEC4]))}paramDefaultValue(t){return ZI[t]}gl_method_name(){return\\\\\\\"quatFromAxisAngle\\\\\\\"}gl_function_definitions(){return[new Tf(this,GR)]}}class KI extends BO{static type(){return\\\\\\\"quatToAngle\\\\\\\"}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function((t=>[\\\\\\\"quat\\\\\\\"][t])),this.io.connection_points.set_expected_input_types_function((()=>[Do.VEC4])),this.io.connection_points.set_expected_output_types_function((()=>[Do.FLOAT]))}gl_method_name(){return\\\\\\\"quatToAngle\\\\\\\"}gl_function_definitions(){return[new Tf(this,GR)]}}class tF extends BO{static type(){return\\\\\\\"quatToAxis\\\\\\\"}initializeNode(){super.initializeNode(),this.io.connection_points.set_input_name_function((t=>[\\\\\\\"quat\\\\\\\"][t])),this.io.connection_points.set_expected_input_types_function((()=>[Do.VEC4])),this.io.connection_points.set_expected_output_types_function((()=>[Do.VEC3]))}gl_method_name(){return\\\\\\\"quatToAxis\\\\\\\"}gl_function_definitions(){return[new Tf(this,GR)]}}const eF=\\\\\\\"val\\\\\\\";const nF=new class extends aa{constructor(){super(...arguments),this.name=oa.STRING(\\\\\\\"ramp\\\\\\\"),this.input=oa.FLOAT(0)}};class iF extends df{constructor(){super(...arguments),this.paramsConfig=nF}static type(){return\\\\\\\"ramp\\\\\\\"}initializeNode(){super.initializeNode(),this.addPostDirtyHook(\\\\\\\"_set_mat_to_recompile\\\\\\\",this._set_mat_to_recompile.bind(this)),this.io.outputs.setNamedOutputConnectionPoints([new Vo(eF,Do.FLOAT)]),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.name])}))}))}setLines(t){const e=Do.FLOAT,n=this._uniform_name(),i=this.glVarName(eF),r=new Af(this,Do.SAMPLER_2D,n);t.addDefinitions(this,[r]);const s=this.variableForInputParam(this.p.input),o=`${e} ${i} = texture2D(${this._uniform_name()}, vec2(${s}, 0.0)).x`;t.addBodyLines(this,[o])}paramsGenerating(){return!0}setParamConfigs(){this._param_configs_controller=this._param_configs_controller||new GI,this._param_configs_controller.reset();const t=new $f(Es.RAMP,this.pv.name,xo.DEFAULT_VALUE,this._uniform_name());this._param_configs_controller.push(t)}_uniform_name(){return\\\\\\\"ramp_texture_\\\\\\\"+this.glVarName(eF)}}const rF=\\\\\\\"rand\\\\\\\";const sF=new class extends aa{constructor(){super(...arguments),this.seed=oa.VECTOR2([1,1])}};class oF extends df{constructor(){super(...arguments),this.paramsConfig=sF}static type(){return\\\\\\\"random\\\\\\\"}initializeNode(){super.initializeNode(),this.io.outputs.setNamedOutputConnectionPoints([new Vo(rF,Do.FLOAT)])}setLines(t){const e=this.io.inputs.namedInputConnectionPoints()[0].name(),n=uf.vector2(this.variableForInput(e)),i=`float ${this.glVarName(rF)} = rand(${n})`;t.addBodyLines(this,[i])}}const aF=new class extends aa{constructor(){super(...arguments),this.rgb=oa.VECTOR3([1,1,1])}};class lF extends df{constructor(){super(...arguments),this.paramsConfig=aF}static type(){return\\\\\\\"rgbToHsv\\\\\\\"}initializeNode(){this.io.outputs.setNamedOutputConnectionPoints([new Vo(\\\\\\\"hsv\\\\\\\",Do.VEC3)])}setLines(t){const e=[],n=[];e.push(new Tf(this,\\\\\\\"// https://stackoverflow.com/questions/15095909/from-rgb-to-hsv-in-opengl-glsl\\\\nvec3 rgb2hsv(vec3 c)\\\\n{\\\\n\\\\tvec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);\\\\n\\\\tvec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g));\\\\n\\\\tvec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r));\\\\n\\\\n\\\\tfloat d = q.x - min(q.w, q.y);\\\\n\\\\tfloat e = 1.0e-10;\\\\n\\\\treturn vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);\\\\n}\\\\\\\"));const i=uf.vector3(this.variableForInputParam(this.p.rgb)),r=this.glVarName(\\\\\\\"hsv\\\\\\\");n.push(`vec3 ${r} = rgb2hsv(${i})`),t.addDefinitions(this,e),t.addBodyLines(this,n)}}var cF;!function(t){t[t.AXIS=0]=\\\\\\\"AXIS\\\\\\\",t[t.QUAT=1]=\\\\\\\"QUAT\\\\\\\"}(cF||(cF={}));const uF=[cF.AXIS,cF.QUAT],hF={[cF.AXIS]:\\\\\\\"from axis + angle\\\\\\\",[cF.QUAT]:\\\\\\\"from quaternion\\\\\\\"},dF={[cF.AXIS]:[\\\\\\\"vector\\\\\\\",\\\\\\\"axis\\\\\\\",\\\\\\\"angle\\\\\\\"],[cF.QUAT]:[\\\\\\\"vector\\\\\\\",\\\\\\\"quat\\\\\\\"]},pF={[cF.AXIS]:\\\\\\\"rotateWithAxisAngle\\\\\\\",[cF.QUAT]:\\\\\\\"rotateWithQuat\\\\\\\"},_F={[cF.AXIS]:[Do.VEC3,Do.VEC3,Do.FLOAT],[cF.QUAT]:[Do.VEC3,Do.VEC4]},mF={vector:[0,0,1],axis:[0,1,0]};const fF=new class extends aa{constructor(){super(...arguments),this.signature=oa.INTEGER(cF.AXIS,{menu:{entries:uF.map(((t,e)=>({name:hF[t],value:e})))}})}};class gF extends df{constructor(){super(...arguments),this.paramsConfig=fF}static type(){return\\\\\\\"rotate\\\\\\\"}initializeNode(){super.initializeNode(),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this)),this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this))}set_signature(t){const e=uF.indexOf(t);this.p.signature.set(e)}_gl_input_name(t){const e=uF[this.pv.signature];return dF[e][t]}paramDefaultValue(t){return mF[t]}gl_method_name(){const t=uF[this.pv.signature];return pF[t]}_expected_input_types(){const t=uF[this.pv.signature];return _F[t]}_expected_output_types(){return[Do.VEC3]}gl_function_definitions(){return[new Tf(this,GR)]}setLines(t){const e=this.io.outputs.namedOutputConnectionPoints()[0].type(),n=this.io.inputs.namedInputConnectionPoints().map(((t,e)=>{const n=t.name();return uf.any(this.variableForInput(n))})).join(\\\\\\\", \\\\\\\"),i=`${e} ${this.glVarName(this.io.connection_points.output_name(0))} = ${this.gl_method_name()}(${n})`;t.addBodyLines(this,[i]),t.addDefinitions(this,this.gl_function_definitions())}}const vF=[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\",\\\\\\\"w\\\\\\\"];class yF extends BO{static type(){return\\\\\\\"round\\\\\\\"}setLines(t){const e=this.io.inputs.namedInputConnectionPoints()[0],n=uf.vector2(this.variableForInput(e.name())),i=this.io.outputs.namedOutputConnectionPoints()[0],r=this.glVarName(i.name()),s=[];if(1==Go[i.type()])s.push(`${i.type()} ${r} = ${this._simple_line(n)}`);else{const t=vF.map((t=>this._simple_line(`${n}.${t}`)));s.push(`${i.type()} ${r} = ${i.type()}(${t.join(\\\\\\\",\\\\\\\")})`)}t.addBodyLines(this,s)}_simple_line(t){return`sign(${t})*floor(abs(${t})+0.5)`}}const xF=new class extends aa{constructor(){super(...arguments),this.position=oa.VECTOR3([0,0,0]),this.center=oa.VECTOR3([0,0,0]),this.radius=oa.FLOAT(1),this.feather=oa.FLOAT(.1)}};class bF extends df{constructor(){super(...arguments),this.paramsConfig=xF}static type(){return\\\\\\\"sphere\\\\\\\"}initializeNode(){super.initializeNode(),this.io.outputs.setNamedOutputConnectionPoints([new Vo(\\\\\\\"float\\\\\\\",Do.FLOAT)])}setLines(t){const e=uf.vector2(this.variableForInputParam(this.p.position)),n=uf.vector2(this.variableForInputParam(this.p.center)),i=uf.float(this.variableForInputParam(this.p.radius)),r=uf.float(this.variableForInputParam(this.p.feather)),s=`float ${this.glVarName(\\\\\\\"float\\\\\\\")} = disk3d(${e}, ${n}, ${i}, ${r})`;t.addBodyLines(this,[s]),t.addDefinitions(this,[new Tf(this,uP)])}}const wF=new class extends aa{};class TF extends df{constructor(){super(...arguments),this.paramsConfig=wF}static type(){return er.INPUT}initializeNode(){this.io.connection_points.set_output_name_function(this._expected_output_names.bind(this)),this.io.connection_points.set_expected_input_types_function((()=>[])),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this))}parent(){return super.parent()}_expected_output_names(t){const e=this.parent();return(null==e?void 0:e.child_expected_input_connection_point_name(t))||`out${t}`}_expected_output_types(){const t=this.parent();return(null==t?void 0:t.child_expected_input_connection_point_types())||[]}setLines(t){const e=this.parent();e&&e.set_lines_block_start(t,this)}}const AF=new class extends aa{};class EF extends df{constructor(){super(...arguments),this.paramsConfig=AF}static type(){return\\\\\\\"switch\\\\\\\"}initializeNode(){this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this)),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this))}_gl_input_name(t){return 0==t?EF.INPUT_INDEX:\\\\\\\"in\\\\\\\"+(t-1)}_expected_input_types(){const t=this.io.connection_points.input_connection_type(1)||Do.FLOAT,e=this.io.connections.inputConnections(),n=e?rs.clamp(e.length,2,16):2,i=[Do.INT];for(let e=0;e<n;e++)i.push(t);return i}_expected_output_types(){return[this._expected_input_types()[1]||Do.FLOAT]}setLines(t){const e=this.io.outputs.namedOutputConnectionPoints()[0].type(),n=this.glVarName(this.io.connection_points.output_name(0)),i=this.io.connection_points.input_name(0),r=uf.integer(this.variableForInput(i)),s=this.glVarName(\\\\\\\"index\\\\\\\"),o=[`${e} ${n};`,`int ${s} = ${r}`],a=this._expected_input_types().length-1;for(let t=0;t<a;t++){const e=0==t?\\\\\\\"if\\\\\\\":\\\\\\\"else if\\\\\\\",i=`${s} == ${t}`,r=this.io.connection_points.input_name(t+1),a=`${e}(${i}){${`${n} = ${uf.any(this.variableForInput(r))};`}}`;o.push(a)}t.addBodyLines(this,o)}}EF.INPUT_INDEX=\\\\\\\"index\\\\\\\";const MF=new class extends aa{constructor(){super(...arguments),this.paramName=oa.STRING(\\\\\\\"textureMap\\\\\\\"),this.defaultValue=oa.STRING(gi.UV),this.uv=oa.VECTOR2([0,0])}};class SF extends df{constructor(){super(...arguments),this.paramsConfig=MF}static type(){return\\\\\\\"texture\\\\\\\"}initializeNode(){this.addPostDirtyHook(\\\\\\\"_set_mat_to_recompile\\\\\\\",this._set_mat_to_recompile.bind(this)),this.io.outputs.setNamedOutputConnectionPoints([new Vo(SF.OUTPUT_NAME,Do.VEC4)]),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.paramName])}))}))}setLines(t){const e=uf.vector2(this.variableForInputParam(this.p.uv)),n=this.glVarName(SF.OUTPUT_NAME),i=this._uniform_name(),r=new Af(this,Do.SAMPLER_2D,i),s=`vec4 ${n} = texture2D(${i}, ${e})`;t.addDefinitions(this,[r]),t.addBodyLines(this,[s])}paramsGenerating(){return!0}setParamConfigs(){this._param_configs_controller=this._param_configs_controller||new GI,this._param_configs_controller.reset();const t=new $f(Es.OPERATOR_PATH,this.pv.paramName,this.pv.defaultValue,this._uniform_name());this._param_configs_controller.push(t)}_uniform_name(){return this.glVarName(this.pv.paramName)}}var CF;SF.OUTPUT_NAME=\\\\\\\"rgba\\\\\\\",function(t){t.POSITION=\\\\\\\"position\\\\\\\",t.DIR_VEC=\\\\\\\"direction vector\\\\\\\"}(CF||(CF={}));const NF=[CF.POSITION,CF.DIR_VEC];const LF=new class extends aa{constructor(){super(...arguments),this.vec=oa.VECTOR3([0,0,0]),this.interpretation=oa.INTEGER(0,{menu:{entries:NF.map(((t,e)=>({name:t,value:e})))}})}};class OF extends df{constructor(){super(...arguments),this.paramsConfig=LF}static type(){return\\\\\\\"toWorldSpace\\\\\\\"}initializeNode(){this.io.connection_points.spare_params.set_inputless_param_names([\\\\\\\"interpretation\\\\\\\"]),this.io.outputs.setNamedOutputConnectionPoints([new Vo(\\\\\\\"out\\\\\\\",Do.VEC3)])}setLines(t){const e=[],n=uf.vector3(this.variableForInputParam(this.p.vec)),i=this.glVarName(\\\\\\\"out\\\\\\\");switch(NF[this.pv.interpretation]){case CF.POSITION:e.push(`vec3 ${i} = (modelMatrix * vec4( ${n}, 1.0 )).xyz`);break;case CF.DIR_VEC:e.push(`vec3 ${i} = normalize( mat3( modelMatrix[0].xyz, modelMatrix[1].xyz, modelMatrix[2].xyz ) * ${n} )`)}t.addBodyLines(this,e)}}var RF;!function(t){t.CONDITION=\\\\\\\"condition\\\\\\\",t.IF_TRUE=\\\\\\\"ifTrue\\\\\\\",t.IF_FALSE=\\\\\\\"ifFalse\\\\\\\"}(RF||(RF={}));const PF=[RF.CONDITION,RF.IF_TRUE,RF.IF_FALSE];class IF extends _f{static type(){return\\\\\\\"twoWaySwitch\\\\\\\"}initializeNode(){super.initializeNode(),this.io.connection_points.initializeNode(),this.io.connection_points.set_expected_input_types_function(this._expected_input_types.bind(this)),this.io.connection_points.set_expected_output_types_function(this._expected_output_types.bind(this)),this.io.connection_points.set_input_name_function(this._gl_input_name.bind(this)),this.io.connection_points.set_output_name_function(this._gl_output_name.bind(this))}_gl_input_name(t){return PF[t]}_gl_output_name(){return\\\\\\\"val\\\\\\\"}_expected_input_types(){const t=this.io.connections.inputConnection(1)||this.io.connections.inputConnection(2),e=t?t.src_connection_point().type():Do.FLOAT;return[Do.BOOL,e,e]}_expected_output_types(){return[this._expected_input_types()[1]]}setLines(t){const e=[],n=this.glVarName(\\\\\\\"val\\\\\\\"),i=uf.bool(this.variableForInput(RF.CONDITION)),r=uf.any(this.variableForInput(RF.IF_TRUE)),s=uf.any(this.variableForInput(RF.IF_FALSE)),o=this._expected_output_types()[0];e.push(`${o} ${n}`),e.push(`if(${i}){`),e.push(`${n} = ${r}`),e.push(\\\\\\\"} else {\\\\\\\"),e.push(`${n} = ${s}`),e.push(\\\\\\\"}\\\\\\\"),t.addBodyLines(this,e)}}const FF=[Do.FLOAT,Do.VEC2,Do.VEC3,Do.VEC4];const DF=new class extends aa{constructor(){super(...arguments),this.name=oa.STRING(\\\\\\\"\\\\\\\"),this.type=oa.INTEGER(0,{menu:{entries:FF.map(((t,e)=>({name:t,value:e})))}})}};class kF extends df{constructor(){super(...arguments),this.paramsConfig=DF,this._on_create_set_name_if_none_bound=this._on_create_set_name_if_none.bind(this)}static type(){return\\\\\\\"varyingRead\\\\\\\"}initializeNode(){this.addPostDirtyHook(\\\\\\\"_set_mat_to_recompile\\\\\\\",this._set_mat_to_recompile.bind(this)),this.lifecycle.add_on_create_hook(this._on_create_set_name_if_none_bound),this.io.connection_points.initializeNode(),this.io.connection_points.set_output_name_function((()=>this.output_name)),this.io.connection_points.set_expected_input_types_function((()=>[])),this.io.connection_points.set_expected_output_types_function((()=>[FF[this.pv.type]])),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.name])}))}))}get output_name(){return kF.OUTPUT_NAME}setLines(t){if(t.current_shader_name==xf.FRAGMENT){const e=this.pv.name,n=new Ef(this,this.gl_type(),e),i=this.glVarName(kF.OUTPUT_NAME),r=`${this.gl_type()} ${i} = ${e}`;t.addDefinitions(this,[n]),t.addBodyLines(this,[r])}}get attribute_name(){return this.pv.name.trim()}gl_type(){return this.io.outputs.namedOutputConnectionPoints()[0].type()}set_gl_type(t){this.p.type.set(FF.indexOf(t))}_on_create_set_name_if_none(){\\\\\\\"\\\\\\\"==this.pv.name&&this.p.name.set(this.name())}}kF.OUTPUT_NAME=\\\\\\\"fragment\\\\\\\";const BF={start:[0,0,1],end:[1,0,0],up:[0,1,0]};class zF extends(yR(\\\\\\\"vectorAlign\\\\\\\",{in:[\\\\\\\"start\\\\\\\",\\\\\\\"end\\\\\\\",\\\\\\\"up\\\\\\\"],method:\\\\\\\"vectorAlignWithUp\\\\\\\",functions:[GR]})){_expected_input_types(){const t=Do.VEC3;return[t,t,t]}_expected_output_types(){return[Do.VEC4]}paramDefaultValue(t){return BF[t]}}const UF={start:[0,0,1],end:[1,0,0]};class GF extends(uR(\\\\\\\"vectorAngle\\\\\\\",{in:[\\\\\\\"start\\\\\\\",\\\\\\\"end\\\\\\\"],method:\\\\\\\"vectorAngle\\\\\\\",functions:[GR]})){_expected_input_types(){const t=Do.VEC3;return[t,t]}_expected_output_types(){return[Do.FLOAT]}paramDefaultValue(t){return UF[t]}}const VF={only:[`${JP.context()}/${JP.type()}`,`${kP.context()}/${kP.type()}`,`${GP.context()}/${GP.type()}`]};class HF extends ia{static context(){return Ki.JS}initializeBaseNode(){this.uiData.setLayoutHorizontal(),this.io.connection_points.initializeNode()}cook(){console.warn(\\\\\\\"js nodes should never cook\\\\\\\")}_set_function_node_to_recompile(){var t;null===(t=this.function_node)||void 0===t||t.assembler_controller.set_compilation_required_and_dirty(this)}get function_node(){var t;const e=this.parent();if(e)return e.type()==this.type()?null===(t=e)||void 0===t?void 0:t.function_node:e}js_var_name(t){return`v_POLY_${this.name()}_${t}`}variableForInput(t){const e=this.io.inputs.get_input_index(t),n=this.io.connections.inputConnection(e);if(n){const e=n.node_src,i=e.io.outputs.namedOutputConnectionPoints()[n.output_index];if(i){const t=i.name();return e.js_var_name(t)}throw console.warn(`no output called '${t}' for gl node ${e.path()}`),\\\\\\\"variable_for_input ERROR\\\\\\\"}return\\\\\\\"to debug...\\\\\\\"}setLines(t){}reset_code(){var t;null===(t=this._param_configs_controller)||void 0===t||t.reset()}setParamConfigs(){}param_configs(){var t;return null===(t=this._param_configs_controller)||void 0===t?void 0:t.list()}js_input_default_value(t){return null}}new class extends aa{};const jF=[Ho.FLOAT,Ho.VEC2,Ho.VEC3,Ho.VEC4];const WF=new class extends aa{constructor(){super(...arguments),this.name=oa.STRING(\\\\\\\"\\\\\\\"),this.type=oa.INTEGER(0,{menu:{entries:jF.map(((t,e)=>({name:t,value:e})))}})}};class qF extends HF{constructor(){super(...arguments),this.paramsConfig=WF,this._on_create_set_name_if_none_bound=this._on_create_set_name_if_none.bind(this)}static type(){return\\\\\\\"attribute\\\\\\\"}initializeNode(){this.lifecycle.add_on_create_hook(this._on_create_set_name_if_none_bound),this.io.connection_points.initializeNode(),this.io.connection_points.set_expected_input_types_function((()=>[])),this.io.connection_points.set_expected_output_types_function((()=>[jF[this.pv.type]]))}get input_name(){return qF.INPUT_NAME}get output_name(){return qF.OUTPUT_NAME}setLines(t){var e;null===(e=this.function_node)||void 0===e||e.assembler_controller.assembler.set_node_lines_attribute(this,t)}get attribute_name(){return this.pv.name.trim()}gl_type(){return this.io.outputs.namedOutputConnectionPoints()[0].type()}set_gl_type(t){this.p.type.set(jF.indexOf(t))}connected_input_node(){return this.io.inputs.named_input(qF.INPUT_NAME)}connected_input_connection_point(){return this.io.inputs.named_input_connection_point(qF.INPUT_NAME)}output_connection_point(){return this.io.outputs.namedOutputConnectionPointsByName(this.input_name)}get is_importing(){return this.io.outputs.used_output_names().length>0}_on_create_set_name_if_none(){\\\\\\\"\\\\\\\"==this.pv.name&&this.p.name.set(this.name())}}qF.INPUT_NAME=\\\\\\\"export\\\\\\\",qF.OUTPUT_NAME=\\\\\\\"val\\\\\\\";const XF=new class extends aa{};class YF extends HF{constructor(){super(...arguments),this.paramsConfig=XF}static type(){return\\\\\\\"globals\\\\\\\"}createParams(){var t;null===(t=this.function_node)||void 0===t||t.assembler_controller.add_globals_outputs(this)}setLines(t){var e,n;null===(n=null===(e=this.function_node)||void 0===e?void 0:e.assembler_controller)||void 0===n||n.assembler.set_node_lines_globals(this,t)}}const $F=new class extends aa{};class JF extends HF{constructor(){super(...arguments),this.paramsConfig=$F}static type(){return\\\\\\\"output\\\\\\\"}initializeNode(){super.initializeNode(),this.addPostDirtyHook(\\\\\\\"_set_mat_to_recompile\\\\\\\",this._set_function_node_to_recompile.bind(this))}createParams(){var t;null===(t=this.function_node)||void 0===t||t.assembler_controller.add_output_inputs(this)}setLines(t){var e;null===(e=this.function_node)||void 0===e||e.assembler_controller.assembler.set_node_lines_output(this,t)}}class ZF{constructor(t=[]){this._definitions=t,this._errored=!1}get errored(){return this._errored}get error_message(){return this._error_message}uniq(){const t=new Map,e=[];for(let n of this._definitions)if(!this._errored){const i=n.name(),r=t.get(i);r?r.data_type!=n.data_type&&(this._errored=!0,this._error_message=`attempt to create '${n.name()}' with types '${n.data_type}' by node '${n.node.path()}', when there is already an existing with type ${r.data_type} from node '${r.node.path()}'`,console.warn(\\\\\\\"emitting error message:\\\\\\\",this._error_message)):(t.set(i,n),e.push(i))}const n=[];for(let i of e){const e=t.get(i);e&&n.push(e)}return n}}var QF;!function(t){t.ATTRIBUTE=\\\\\\\"attribute\\\\\\\",t.FUNCTION=\\\\\\\"function\\\\\\\",t.UNIFORM=\\\\\\\"uniform\\\\\\\"}(QF||(QF={}));class KF{constructor(t,e,n,i){this._definition_type=t,this._data_type=e,this._node=n,this._name=i}get definition_type(){return this._definition_type}get data_type(){return this._data_type}get node(){return this._node}name(){return this._name}collection_instance(){return new ZF}}class tD extends KF{constructor(t,e,n){super(QF.UNIFORM,e,t,n),this._node=t,this._data_type=e,this._name=n}get line(){return`uniform ${this.data_type} ${this.name()}`}}class eD extends Yf{constructor(t,e,n,i){super(t,e,n),this._uniform_name=i}get uniform_name(){return this._uniform_name}static uniform_by_type(t){switch(t){case Es.BOOLEAN:case Es.BUTTON:return{value:0};case Es.COLOR:return{value:new D.a(0,0,0)};case Es.FLOAT:case Es.FOLDER:case Es.INTEGER:case Es.OPERATOR_PATH:case Es.NODE_PATH:case Es.PARAM_PATH:return{value:0};case Es.RAMP:case Es.STRING:return{value:null};case Es.VECTOR2:return{value:new d.a(0,0)};case Es.VECTOR3:return{value:new p.a(0,0,0)};case Es.VECTOR4:return{value:new _.a(0,0,0,0)}}ar.unreachable(t)}}const nD=new class extends aa{constructor(){super(...arguments),this.name=oa.STRING(\\\\\\\"\\\\\\\"),this.type=oa.INTEGER(jo.indexOf(Ho.FLOAT),{menu:{entries:jo.map(((t,e)=>({name:t,value:e})))}}),this.asColor=oa.BOOLEAN(0,{visibleIf:{type:jo.indexOf(Ho.VEC3)}})}};class iD extends HF{constructor(){super(...arguments),this.paramsConfig=nD,this._allow_inputs_created_from_params=!1,this._on_create_set_name_if_none_bound=this._on_create_set_name_if_none.bind(this)}static type(){return\\\\\\\"param\\\\\\\"}initializeNode(){this.addPostDirtyHook(\\\\\\\"_set_mat_to_recompile\\\\\\\",this._set_function_node_to_recompile.bind(this)),this.lifecycle.add_on_create_hook(this._on_create_set_name_if_none_bound),this.io.connection_points.initializeNode(),this.io.connection_points.set_expected_input_types_function((()=>[])),this.io.connection_points.set_expected_output_types_function((()=>[jo[this.pv.type]]))}setLines(t){const e=[],n=jo[this.pv.type],i=this.uniform_name();e.push(new tD(this,n,i)),t.addDefinitions(this,e)}setParamConfigs(){const t=jo[this.pv.type],e=Xo[t];let n=Wo[t];if(this._param_configs_controller=this._param_configs_controller||new GI,this._param_configs_controller.reset(),n==Es.VECTOR3&&this.p.asColor.value&&m.isArray(e)&&3==e.length){const t=new eD(Es.COLOR,this.pv.name,e,this.uniform_name());this._param_configs_controller.push(t)}else{const t=new eD(n,this.pv.name,e,this.uniform_name());this._param_configs_controller.push(t)}}uniform_name(){const t=this.io.outputs.namedOutputConnectionPoints()[0];return this.js_var_name(t.name())}set_gl_type(t){const e=jo.indexOf(t);this.p.type.set(e)}_on_create_set_name_if_none(){\\\\\\\"\\\\\\\"==this.pv.name&&this.p.name.set(this.name())}}class rD extends ia{constructor(){super(...arguments),this._cook_main_without_inputs_when_dirty_bound=this._cook_main_without_inputs_when_dirty.bind(this)}static context(){return Ki.MAT}initializeBaseNode(){super.initializeBaseNode(),this.nameController.add_post_set_fullPath_hook(this.set_material_name.bind(this)),this.addPostDirtyHook(\\\\\\\"_cook_main_without_inputs_when_dirty\\\\\\\",(()=>{setTimeout(this._cook_main_without_inputs_when_dirty_bound,0)}))}async _cook_main_without_inputs_when_dirty(){await this.cookController.cookMainWithoutInputs()}set_material_name(){this._material&&(this._material.name=this.path())}get material(){return this._material=this._material||this.createMaterial()}setMaterial(t){this._setContainer(t)}}class sD{constructor(t){this.node=t}add_params(){}update(){}get material(){return this.node.material}}const oD={NoBlending:w.ub,NormalBlending:w.xb,AdditiveBlending:w.e,SubtractiveBlending:w.Sc,MultiplyBlending:w.mb},aD=Object.keys(oD);function lD(t){return class extends t{constructor(){super(...arguments),this.doubleSided=oa.BOOLEAN(0),this.front=oa.BOOLEAN(1,{visibleIf:{doubleSided:!1}}),this.overrideShadowSide=oa.BOOLEAN(0),this.shadowDoubleSided=oa.BOOLEAN(0,{visibleIf:{overrideShadowSide:!0}}),this.shadowFront=oa.BOOLEAN(1,{visibleIf:{overrideShadowSide:!0,shadowDoubleSided:!1}}),this.colorWrite=oa.BOOLEAN(1,{separatorBefore:!0,cook:!1,callback:(t,e)=>{cD.update(t)}}),this.depthWrite=oa.BOOLEAN(1,{cook:!1,callback:(t,e)=>{cD.update(t)}}),this.depthTest=oa.BOOLEAN(1,{cook:!1,callback:(t,e)=>{cD.update(t)}}),this.premultipliedAlpha=oa.BOOLEAN(!1,{separatorAfter:!0}),this.blending=oa.INTEGER(w.xb,{menu:{entries:aD.map((t=>({name:t,value:oD[t]})))}}),this.dithering=oa.BOOLEAN(0),this.polygonOffset=oa.BOOLEAN(!1,{separatorBefore:!0}),this.polygonOffsetFactor=oa.INTEGER(0,{range:[0,1e3],visibleIf:{polygonOffset:1}}),this.polygonOffsetUnits=oa.INTEGER(0,{range:[0,1e3],visibleIf:{polygonOffset:1}})}}}lD(aa);class cD extends sD{constructor(t){super(t),this.node=t}initializeNode(){}async update(){const t=this.node.material,e=this.node.pv;this._updateSides(t,e),t.colorWrite=e.colorWrite,t.depthWrite=e.depthWrite,t.depthTest=e.depthTest,t.blending=e.blending,t.premultipliedAlpha=e.premultipliedAlpha,t.dithering=e.dithering,t.polygonOffset=e.polygonOffset,t.polygonOffset&&(t.polygonOffsetFactor=e.polygonOffsetFactor,t.polygonOffsetUnits=e.polygonOffsetUnits,t.needsUpdate=!0)}_updateSides(t,e){const n=e.front?w.H:w.i,i=e.doubleSided?w.z:n;if(i!=t.side&&(t.side=i,t.needsUpdate=!0),e.overrideShadowSide){const t=e.shadowFront?w.H:w.i,n=e.shadowDoubleSided?w.z:t,i=this.node.material;n!=i.shadowSide&&(i.shadowSide=n,i.needsUpdate=!0)}else t.shadowSide=null;const r=t.customMaterials;if(r){const t=Object.keys(r);for(let n of t){const t=r[n];t&&this._updateSides(t,e)}}}static async update(t){t.controllers.advancedCommon.update()}}class uD extends(lD(aa)){constructor(){super(...arguments),this.color=oa.COLOR([1,1,1]),this.lineWidth=oa.FLOAT(1,{range:[1,10],rangeLocked:[!0,!1]})}}const hD=new uD;class dD extends rD{constructor(){super(...arguments),this.paramsConfig=hD,this.controllers={advancedCommon:new cD(this)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"lineBasic\\\\\\\"}createMaterial(){return new wr.a({color:16777215,linewidth:1})}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();this.material.color.copy(this.pv.color),this.material.linewidth=this.pv.lineWidth,this.setMaterial(this.material)}}function pD(t){return class extends t{constructor(){super(...arguments),this.transparent=oa.BOOLEAN(0),this.opacity=oa.FLOAT(1),this.alphaTest=oa.FLOAT(0)}}}pD(aa);class _D extends sD{constructor(t){super(t),this.node=t}static update(t){const e=t.material,n=t.pv;this._updateTransparency(e,n)}static _updateTransparency(t,e){t.transparent=e.transparent,this._updateCommon(t,e)}static _updateCommon(t,e){t.uniforms.opacity&&(t.uniforms.opacity.value=e.opacity),t.opacity=e.opacity,t.alphaTest=e.alphaTest;const n=t.customMaterials;if(n){const t=Object.keys(n);for(let i of t){const t=n[i];t&&this._updateCommon(t,e)}}}}class mD extends Xf{constructor(t){super(t),this.node=t}toJSON(){const t=this.node.assemblerController;if(!t)return;const e={},n=this.node.material.customMaterials;if(n){const t=Object.keys(n);for(let i of t){const t=n[i];if(t){const n=this._materialToJson(t,{node:this.node,suffix:i});n&&(e[i]=n)}}}const i=[],r=t.assembler.param_configs();for(let t of r)i.push([t.name(),t.uniform_name]);const s=this._materialToJson(this.node.material,{node:this.node,suffix:\\\\\\\"main\\\\\\\"});s||console.warn(\\\\\\\"failed to save material from node\\\\\\\",this.node.path());return{material:s||{},uniforms_time_dependent:t.assembler.uniformsTimeDependent(),uniforms_resolution_dependent:t.assembler.uniforms_resolution_dependent(),param_uniform_pairs:i,customMaterials:e}}load(t){if(this._material=this._loadMaterial(t.material),this._material){if(this._material.customMaterials=this._material.customMaterials||{},t.customMaterials){const e=Object.keys(t.customMaterials);for(let n of e){const e=t.customMaterials[n],i=this._loadMaterial(e);i&&(this._material.customMaterials[n]=i)}}if(t.uniforms_time_dependent&&this.node.scene().uniformsController.addTimeDependentUniformOwner(this._material.uuid,this._material.uniforms),t.uniforms_resolution_dependent&&this.node.scene().uniformsController.addResolutionDependentUniformOwner(this._material.uuid,this._material.uniforms),t.param_uniform_pairs)for(let e of t.param_uniform_pairs){const t=e[0],n=e[1],i=this.node.params.get(t),r=this._material.uniforms[n],s=Object.keys(this._material.customMaterials);let o;for(let t of s){const e=this._material.customMaterials[t],i=null==e?void 0:e.uniforms[n];i&&(o=o||[],o.push(i))}i&&(r||o)&&i.options.setOption(\\\\\\\"callback\\\\\\\",(()=>{if(r&&$f.callback(i,r),o)for(let t of o)$f.callback(i,t)}))}}}material(){if(ai.playerMode())return this._material}}function fD(t){return class extends t{constructor(){super(...arguments),this.setBuilderNode=oa.BOOLEAN(0,{callback:t=>{gD.PARAM_CALLBACK_setCompileRequired(t)}}),this.builderNode=oa.NODE_PATH(\\\\\\\"\\\\\\\",{visibleIf:{setBuilderNode:!0},callback:t=>{gD.PARAM_CALLBACK_setCompileRequired(t)}})}}}fD(aa);class gD extends rD{constructor(){super(...arguments),this._children_controller_context=Ki.GL,this.persisted_config=new mD(this)}createMaterial(){var t;let e;return this.persisted_config&&(e=this.persisted_config.material()),e||(e=null===(t=this.assemblerController)||void 0===t?void 0:t.assembler.createMaterial()),e}get assemblerController(){return this._assembler_controller=this._assembler_controller||this._create_assembler_controller()}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}childrenAllowed(){return this.assemblerController?super.childrenAllowed():(this.scene().markAsReadOnly(this),!1)}compileIfRequired(){var t;(null===(t=this.assemblerController)||void 0===t?void 0:t.compileRequired())&&this._compile()}_compile(){const t=this.assemblerController;this.material&&t&&(t.assembler.setGlParentNode(this),this._setAssemblerGlParentNode(t),t.assembler.compileMaterial(this.material),t.post_compile())}_setAssemblerGlParentNode(t){if(!this.pv.setBuilderNode)return;const e=this.pv.builderNode.nodeWithContext(Ki.MAT);if(!e)return;const n=e;n.assemblerController?n.type()==this.type()?t.assembler.setGlParentNode(n):this.states.error.set(`resolved node '${e.path()}' does not have the same type '${e.type()}' as current node '${this.type()}'`):this.states.error.set(`resolved node '${e.path()}' is not a builder node`)}static PARAM_CALLBACK_setCompileRequired(t){t.PARAM_CALLBACK_setCompileRequired()}PARAM_CALLBACK_setCompileRequired(){var t;null===(t=this.assemblerController)||void 0===t||t.setCompilationRequired(!0)}}function vD(t){return class extends t{constructor(){super(...arguments),this.useFog=oa.BOOLEAN(0)}}}vD(aa);class yD extends sD{constructor(t){super(t),this.node=t}static update(t){const e=t.material,n=t.pv;e.fog=n.useFog}}function xD(t){return class extends t{constructor(){super(...arguments),this.default=oa.FOLDER(null)}}}function bD(t){return class extends t{constructor(){super(...arguments),this.advanced=oa.FOLDER(null)}}}class wD extends(vD(lD(fD(bD(pD(xD(aa))))))){constructor(){super(...arguments),this.linewidth=oa.FLOAT(1,{range:[0,10],rangeLocked:[!0,!1]})}}const TD=new wD;class AD extends gD{constructor(){super(...arguments),this.paramsConfig=TD,this.controllers={advancedCommon:new cD(this)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"lineBasicBuilder\\\\\\\"}usedAssembler(){return Hn.GL_LINE}_create_assembler_controller(){return ai.assemblersRegister.assembler(this,this.usedAssembler())}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();_D.update(this),yD.update(this),this.compileIfRequired(),this.material.linewidth=this.pv.linewidth,this.setMaterial(this.material)}}function ED(t){return class extends t{constructor(){super(...arguments),this.color=oa.COLOR([1,1,1],{conversion:so.SRGB_TO_LINEAR}),this.useVertexColors=oa.BOOLEAN(0,{separatorAfter:!0}),this.transparent=oa.BOOLEAN(0),this.opacity=oa.FLOAT(1),this.alphaTest=oa.FLOAT(0)}}}O.a;ED(aa);class MD extends sD{constructor(t){super(t),this.node=t}static update(t){const e=t.material,n=t.pv;e.color.copy(n.color);const i=n.useVertexColors;i!=e.vertexColors&&(e.vertexColors=i,e.needsUpdate=!0),e.opacity=n.opacity,e.transparent=n.transparent,e.alphaTest=n.alphaTest}}function SD(t){return class extends t{constructor(){super(...arguments),this.useFog=oa.BOOLEAN(0)}}}SD(aa);class CD extends sD{constructor(t){super(t),this.node=t}static update(t){const e=t.material,n=t.pv;e.fog=n.useFog}}function ND(t){return{cook:!1,callback:(e,n)=>{t.update(e)}}}function LD(t,e,n){return{visibleIf:{[e]:1},nodeSelection:{context:Ki.COP,types:null==n?void 0:n.types},cook:!1,callback:(e,n)=>{t.update(e)}}}class OD extends sD{constructor(t,e){super(t),this.node=t,this._update_options=e}add_hooks(t,e){t.addPostDirtyHook(\\\\\\\"TextureController\\\\\\\",(()=>{this.update()})),e.addPostDirtyHook(\\\\\\\"TextureController\\\\\\\",(()=>{this.update()}))}static update(t){}async _update(t,e,n,i){if(this._update_options.uniforms){const r=t,s=e;await this._update_texture_on_uniforms(r,s,n,i)}if(this._update_options.directParams){const r=t,s=e;await this._update_texture_on_material(r,s,n,i)}}async _update_texture_on_uniforms(t,e,n,i){this._update_required_attribute(t,t.uniforms,e,n,i,this._apply_texture_on_uniforms.bind(this),this._remove_texture_from_uniforms.bind(this))}_apply_texture_on_uniforms(t,e,n,i){const r=null!=e[n]&&null!=e[n].value;let s=!1;if(r){e[n].value.uuid!=i.uuid&&(s=!0)}if(!r||s){e[n]&&(e[n].value=i),this._apply_texture_on_material(t,t,n,i),t.needsUpdate=!0;const r=t.customMaterials;if(r){const t=Object.keys(r);for(let e of t){const t=r[e];t&&this._apply_texture_on_uniforms(t,t.uniforms,n,i)}}}}_remove_texture_from_uniforms(t,e,n){if(e[n]){if(e[n].value){e[n].value=null,this._remove_texture_from_material(t,t,n),t.needsUpdate=!0;const i=t.customMaterials;if(i){const t=Object.keys(i);for(let e of t){const t=i[e];t&&this._remove_texture_from_uniforms(t,t.uniforms,n)}}}}else ai.warn(`'${n}' uniform not found. existing uniforms are:`,Object.keys(e).sort())}async _update_texture_on_material(t,e,n,i){this._update_required_attribute(t,t,e,n,i,this._apply_texture_on_material.bind(this),this._remove_texture_from_material.bind(this))}_apply_texture_on_material(t,e,n,i){const r=null!=e[n];let s=!1;if(r){e[n].uuid!=i.uuid&&(s=!0)}r&&!s||(e[n]=i,t.needsUpdate=!0)}_remove_texture_from_material(t,e,n){e[n]&&(e[n]=null,t.needsUpdate=!0)}async _update_required_attribute(t,e,n,i,r,s,o){i.isDirty()&&await i.compute();if(i.value){r.isDirty()&&await r.compute();const i=r.value.nodeWithContext(Ki.COP);if(i){const r=(await i.compute()).texture();if(r)return void s(t,e,n,r)}}o(t,e,n)}}function RD(t){return class extends t{constructor(){super(...arguments),this.useMap=oa.BOOLEAN(0,ND(PD)),this.map=oa.NODE_PATH(gi.EMPTY,LD(PD,\\\\\\\"useMap\\\\\\\"))}}}O.a;RD(aa);class PD extends OD{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useMap,this.node.p.map)}async update(){this._update(this.node.material,\\\\\\\"map\\\\\\\",this.node.p.useMap,this.node.p.map)}static async update(t){t.controllers.map.update()}}function ID(t){return class extends t{constructor(){super(...arguments),this.useAlphaMap=oa.BOOLEAN(0,{separatorBefore:!0,...ND(FD)}),this.alphaMap=oa.NODE_PATH(gi.EMPTY,LD(FD,\\\\\\\"useAlphaMap\\\\\\\"))}}}O.a;ID(aa);class FD extends OD{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useAlphaMap,this.node.p.alphaMap)}async update(){this._update(this.node.material,\\\\\\\"alphaMap\\\\\\\",this.node.p.useAlphaMap,this.node.p.alphaMap)}static async update(t){t.controllers.alphaMap.update()}}function DD(t){return class extends t{constructor(){super(...arguments),this.useAOMap=oa.BOOLEAN(0,{separatorBefore:!0,...ND(kD)}),this.aoMap=oa.NODE_PATH(gi.EMPTY,LD(kD,\\\\\\\"useAOMap\\\\\\\")),this.aoMapIntensity=oa.FLOAT(1,{range:[0,1],rangeLocked:[!1,!1],visibleIf:{useAOMap:1}})}}}O.a;DD(aa);class kD extends OD{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useAOMap,this.node.p.aoMap)}async update(){if(this._update(this.node.material,\\\\\\\"aoMap\\\\\\\",this.node.p.useAOMap,this.node.p.aoMap),this._update_options.uniforms){this.node.material.uniforms.aoMapIntensity.value=this.node.pv.aoMapIntensity}if(this._update_options.directParams){this.node.material.aoMapIntensity=this.node.pv.aoMapIntensity}}static async update(t){t.controllers.aoMap.update()}}var BD;!function(t){t.MULT=\\\\\\\"mult\\\\\\\",t.ADD=\\\\\\\"add\\\\\\\",t.MIX=\\\\\\\"mix\\\\\\\"}(BD||(BD={}));const zD=[BD.MULT,BD.ADD,BD.MIX],UD={[BD.MULT]:w.nb,[BD.ADD]:w.c,[BD.MIX]:w.lb};function GD(t){return class extends t{constructor(){super(...arguments),this.useEnvMap=oa.BOOLEAN(0,ND(VD)),this.envMap=oa.NODE_PATH(gi.EMPTY,LD(VD,\\\\\\\"useEnvMap\\\\\\\",{types:[Lg.CUBE_CAMERA]})),this.combine=oa.INTEGER(0,{visibleIf:{useEnvMap:1},menu:{entries:zD.map(((t,e)=>({name:t,value:e})))}}),this.reflectivity=oa.FLOAT(1,{visibleIf:{useEnvMap:1}}),this.refractionRatio=oa.FLOAT(.98,{range:[-1,1],rangeLocked:[!1,!1],visibleIf:{useEnvMap:1}})}}}GD(aa);class VD extends OD{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useEnvMap,this.node.p.envMap)}async update(){this._update(this.node.material,\\\\\\\"envMap\\\\\\\",this.node.p.useEnvMap,this.node.p.envMap);const t=UD[zD[this.node.pv.combine]];if(this._update_options.uniforms){const t=this.node.material;t.uniforms.reflectivity.value=this.node.pv.reflectivity,t.uniforms.refractionRatio.value=this.node.pv.refractionRatio}if(this._update_options.directParams){const e=this.node.material;e.combine=t,e.reflectivity=this.node.pv.reflectivity,e.refractionRatio=this.node.pv.refractionRatio}}static async update(t){t.controllers.envMap.update()}}function HD(t){return class extends t{constructor(){super(...arguments),this.useLightMap=oa.BOOLEAN(0,{separatorBefore:!0,...ND(jD)}),this.lightMap=oa.NODE_PATH(gi.EMPTY,LD(jD,\\\\\\\"useLightMap\\\\\\\")),this.lightMapIntensity=oa.FLOAT(1,{visibleIf:{useLightMap:1}})}}}O.a;HD(aa);class jD extends OD{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useLightMap,this.node.p.lightMap)}async update(){if(this._update(this.node.material,\\\\\\\"lightMap\\\\\\\",this.node.p.useLightMap,this.node.p.lightMap),this._update_options.uniforms){this.node.material.uniforms.lightMapIntensity.value=this.node.pv.lightMapIntensity}if(this._update_options.directParams){this.node.material.lightMapIntensity=this.node.pv.lightMapIntensity}}static async update(t){t.controllers.lightMap.update()}}var WD;!function(t){t.ROUND=\\\\\\\"round\\\\\\\",t.BUTT=\\\\\\\"butt\\\\\\\",t.SQUARE=\\\\\\\"square\\\\\\\"}(WD||(WD={}));const qD=[WD.ROUND,WD.BUTT,WD.SQUARE];var XD;!function(t){t.ROUND=\\\\\\\"round\\\\\\\",t.BEVEL=\\\\\\\"bevel\\\\\\\",t.MITER=\\\\\\\"miter\\\\\\\"}(XD||(XD={}));const YD=[XD.ROUND,XD.BEVEL,XD.MITER];function $D(t){return class extends t{constructor(){super(...arguments),this.wireframe=oa.BOOLEAN(0,{separatorBefore:!0}),this.wireframeLinecap=oa.INTEGER(0,{menu:{entries:qD.map(((t,e)=>({name:t,value:e})))},visibleIf:{wireframe:1}}),this.wireframeLinejoin=oa.INTEGER(0,{menu:{entries:YD.map(((t,e)=>({name:t,value:e})))},visibleIf:{wireframe:1}})}}}O.a;$D(aa);class JD extends sD{constructor(t){super(t),this.node=t}static update(t){const e=t.material,n=t.pv;e.wireframe=n.wireframe,e.wireframeLinecap=qD[n.wireframeLinecap],e.wireframeLinejoin=YD[n.wireframeLinejoin],e.needsUpdate=!0}}function ZD(t){return class extends t{constructor(){super(...arguments),this.textures=oa.FOLDER(null)}}}const QD={directParams:!0};class KD extends(SD($D(lD(bD(HD(GD(DD(ID(RD(ZD(ED(xD(aa))))))))))))){}const tk=new KD;class ek extends rD{constructor(){super(...arguments),this.paramsConfig=tk,this.controllers={advancedCommon:new cD(this),alphaMap:new FD(this,QD),aoMap:new kD(this,QD),envMap:new VD(this,QD),lightMap:new jD(this,QD),map:new PD(this,QD)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshBasic\\\\\\\"}createMaterial(){return new at.a({vertexColors:!1,side:w.H,color:16777215,opacity:1})}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();MD.update(this),CD.update(this),JD.update(this),this.setMaterial(this.material)}}function nk(t){return class extends t{constructor(){super(...arguments),this.wireframe=oa.BOOLEAN(0)}}}nk(aa);class ik extends sD{constructor(t){super(t),this.node=t}static update(t){const e=t.material,n=t.pv;e.wireframe=n.wireframe,e.needsUpdate=!0}}const rk={uniforms:!0};class sk extends(vD(nk(lD(fD(bD(GD(DD(ID(RD(ZD(pD(xD(aa))))))))))))){}const ok=new sk;class ak extends gD{constructor(){super(...arguments),this.paramsConfig=ok,this.controllers={advancedCommon:new cD(this),alphaMap:new FD(this,rk),aoMap:new kD(this,rk),envMap:new VD(this,rk),map:new PD(this,rk)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshBasicBuilder\\\\\\\"}usedAssembler(){return Hn.GL_MESH_BASIC}_create_assembler_controller(){return ai.assemblersRegister.assembler(this,this.usedAssembler())}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();_D.update(this),yD.update(this),ik.update(this),this.compileIfRequired(),this.setMaterial(this.material)}}function lk(t){return class extends t{constructor(){super(...arguments),this.emissive=oa.COLOR([0,0,0],{separatorBefore:!0}),this.useEmissiveMap=oa.BOOLEAN(0,ND(ck)),this.emissiveMap=oa.NODE_PATH(gi.EMPTY,LD(ck,\\\\\\\"useEmissiveMap\\\\\\\")),this.emissiveIntensity=oa.FLOAT(1)}}}O.a;lk(aa);class ck extends OD{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useEmissiveMap,this.node.p.emissiveMap)}async update(){if(this._update(this.node.material,\\\\\\\"emissiveMap\\\\\\\",this.node.p.useEmissiveMap,this.node.p.emissiveMap),this._update_options.uniforms){this.node.material.uniforms.emissive.value.copy(this.node.pv.emissive)}if(this._update_options.directParams){const t=this.node.material;t.emissive.copy(this.node.pv.emissive),t.emissiveIntensity=this.node.pv.emissiveIntensity}}static async update(t){t.controllers.emissiveMap.update()}}const uk={directParams:!0};class hk extends(SD($D(lD(bD(HD(GD(lk(DD(ID(RD(ZD(ED(xD(aa)))))))))))))){}const dk=new hk;class pk extends rD{constructor(){super(...arguments),this.paramsConfig=dk,this.controllers={advancedCommon:new cD(this),alphaMap:new FD(this,uk),aoMap:new kD(this,uk),emissiveMap:new ck(this,uk),envMap:new VD(this,uk),lightMap:new jD(this,uk),map:new PD(this,uk)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshLambert\\\\\\\"}createMaterial(){return new br.a({vertexColors:!1,side:w.H,color:16777215,opacity:1})}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();MD.update(this),CD.update(this),JD.update(this),this.setMaterial(this.material)}}function _k(t){return class extends t{constructor(){super(...arguments),this.shadowPCSS=oa.BOOLEAN(0,{callback:t=>{mk.PARAM_CALLBACK_setRecompileRequired(t)},separatorBefore:!0}),this.shadowPCSSSamplesCount=oa.INTEGER(16,{visibleIf:{shadowPCSS:1},range:[0,128],rangeLocked:[!0,!1]}),this.shadowPCSSFilterSize=oa.FLOAT(1,{visibleIf:{shadowPCSS:1},range:[0,10],rangeLocked:[!0,!1]})}}}_k(aa);class mk extends sD{constructor(t){super(t),this.node=t}initializeNode(){}static filterFragmentShader(t,e){const n=`\\\\n#define NUM_SAMPLES ${uf.integer(t.pv.shadowPCSSSamplesCount)}\\\\n#define PCSS_FILTER_SIZE ${uf.float(t.pv.shadowPCSSFilterSize)}\\\\n#define LIGHT_WORLD_SIZE 0.005\\\\n// #define LIGHT_FRUSTUM_WIDTH 1.0\\\\n// #define PCSS_FILTER_SIZE 1.0\\\\n#define LIGHT_SIZE_UV (PCSS_FILTER_SIZE * LIGHT_WORLD_SIZE)\\\\n#define NEAR_PLANE 9.5\\\\n\\\\n// #define NUM_SAMPLES 32\\\\n#define NUM_RINGS 11\\\\n#define BLOCKER_SEARCH_NUM_SAMPLES NUM_SAMPLES\\\\n#define PCF_NUM_SAMPLES NUM_SAMPLES\\\\n\\\\nvec2 poissonDisk[NUM_SAMPLES];\\\\n\\\\nvoid initPoissonSamples( const in vec2 randomSeed ) {\\\\n\\\\tfloat ANGLE_STEP = PI2 * float( NUM_RINGS ) / float( NUM_SAMPLES );\\\\n\\\\tfloat INV_NUM_SAMPLES = 1.0 / float( NUM_SAMPLES );\\\\n\\\\n\\\\t// jsfiddle that shows sample pattern: https://jsfiddle.net/a16ff1p7/\\\\n\\\\tfloat angle = rand( randomSeed ) * PI2;\\\\n\\\\tfloat radius = INV_NUM_SAMPLES;\\\\n\\\\tfloat radiusStep = radius;\\\\n\\\\n\\\\tfor( int i = 0; i < NUM_SAMPLES; i ++ ) {\\\\n\\\\t\\\\tpoissonDisk[i] = vec2( cos( angle ), sin( angle ) ) * pow( radius, 0.75 );\\\\n\\\\t\\\\tradius += radiusStep;\\\\n\\\\t\\\\tangle += ANGLE_STEP;\\\\n\\\\t}\\\\n}\\\\n\\\\nfloat penumbraSize( const in float zReceiver, const in float zBlocker ) { // Parallel plane estimation\\\\n\\\\treturn (zReceiver - zBlocker) / zBlocker;\\\\n}\\\\n\\\\nfloat findBlocker( sampler2D shadowMap, const in vec2 uv, const in float zReceiver ) {\\\\n\\\\t// This uses similar triangles to compute what\\\\n\\\\t// area of the shadow map we should search\\\\n\\\\tfloat searchRadius = LIGHT_SIZE_UV * ( zReceiver - NEAR_PLANE ) / zReceiver;\\\\n\\\\tfloat blockerDepthSum = 0.0;\\\\n\\\\tint numBlockers = 0;\\\\n\\\\n\\\\tfor( int i = 0; i < BLOCKER_SEARCH_NUM_SAMPLES; i++ ) {\\\\n\\\\t\\\\tfloat shadowMapDepth = unpackRGBAToDepth(texture2D(shadowMap, uv + poissonDisk[i] * searchRadius));\\\\n\\\\t\\\\tif ( shadowMapDepth < zReceiver ) {\\\\n\\\\t\\\\t\\\\tblockerDepthSum += shadowMapDepth;\\\\n\\\\t\\\\t\\\\tnumBlockers ++;\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\tif( numBlockers == 0 ) return -1.0;\\\\n\\\\n\\\\treturn blockerDepthSum / float( numBlockers );\\\\n}\\\\n\\\\nfloat PCF_Filter(sampler2D shadowMap, vec2 uv, float zReceiver, float filterRadius ) {\\\\n\\\\tfloat sum = 0.0;\\\\n\\\\tfor( int i = 0; i < PCF_NUM_SAMPLES; i ++ ) {\\\\n\\\\t\\\\tfloat depth = unpackRGBAToDepth( texture2D( shadowMap, uv + poissonDisk[ i ] * filterRadius ) );\\\\n\\\\t\\\\tif( zReceiver <= depth ) sum += 1.0;\\\\n\\\\t}\\\\n\\\\tfor( int i = 0; i < PCF_NUM_SAMPLES; i ++ ) {\\\\n\\\\t\\\\tfloat depth = unpackRGBAToDepth( texture2D( shadowMap, uv + -poissonDisk[ i ].yx * filterRadius ) );\\\\n\\\\t\\\\tif( zReceiver <= depth ) sum += 1.0;\\\\n\\\\t}\\\\n\\\\treturn sum / ( 2.0 * float( PCF_NUM_SAMPLES ) );\\\\n}\\\\n\\\\nfloat PCSS ( sampler2D shadowMap, vec4 coords ) {\\\\n\\\\tvec2 uv = coords.xy;\\\\n\\\\tfloat zReceiver = coords.z; // Assumed to be eye-space z in this code\\\\n\\\\n\\\\tinitPoissonSamples( uv );\\\\n\\\\t// STEP 1: blocker search\\\\n\\\\tfloat avgBlockerDepth = findBlocker( shadowMap, uv, zReceiver );\\\\n\\\\n\\\\t//There are no occluders so early out (this saves filtering)\\\\n\\\\tif( avgBlockerDepth == -1.0 ) return 1.0;\\\\n\\\\n\\\\t// STEP 2: penumbra size\\\\n\\\\tfloat penumbraRatio = penumbraSize( zReceiver, avgBlockerDepth );\\\\n\\\\tfloat filterRadius = penumbraRatio * LIGHT_SIZE_UV * NEAR_PLANE / zReceiver;\\\\n\\\\n\\\\t// STEP 3: filtering\\\\n\\\\t//return avgBlockerDepth;\\\\n\\\\treturn PCF_Filter( shadowMap, uv, zReceiver, filterRadius );\\\\n}\\\\n`;let i=B;return i=i.replace(\\\\\\\"#ifdef USE_SHADOWMAP\\\\\\\",`#ifdef USE_SHADOWMAP\\\\n${n}\\\\n\\\\t\\\\t\\\\t\\\\t`),i=i.replace(\\\\\\\"#if defined( SHADOWMAP_TYPE_PCF )\\\\\\\",\\\\\\\"\\\\n\\\\t\\\\t\\\\t\\\\treturn PCSS( shadowMap, shadowCoord );\\\\n\\\\t\\\\t\\\\t\\\\t#if defined( SHADOWMAP_TYPE_PCF )\\\\\\\"),e=e.replace(\\\\\\\"#include <shadowmap_pars_fragment>\\\\\\\",i)}async update(){const t=this.node;if(!t.assemblerController)return;const e=\\\\\\\"PCSS\\\\\\\";this.node.pv.shadowPCSS?t.assemblerController.addFilterFragmentShaderCallback(e,(t=>mk.filterFragmentShader(this.node,t))):t.assemblerController.removeFilterFragmentShaderCallback(e)}static async update(t){t.controllers.PCSS.update()}static PARAM_CALLBACK_setRecompileRequired(t){t.controllers.PCSS.update()}}const fk={uniforms:!0};class gk extends(_k(vD(nk(lD(fD(bD(HD(GD(lk(DD(ID(RD(ZD(pD(xD(aa)))))))))))))))){}const vk=new gk;class yk extends gD{constructor(){super(...arguments),this.paramsConfig=vk,this.controllers={advancedCommon:new cD(this),alphaMap:new FD(this,fk),aoMap:new kD(this,fk),emissiveMap:new ck(this,fk),envMap:new VD(this,fk),lightMap:new jD(this,fk),map:new PD(this,fk),PCSS:new mk(this)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshLambertBuilder\\\\\\\"}usedAssembler(){return Hn.GL_MESH_LAMBERT}_create_assembler_controller(){return ai.assemblersRegister.assembler(this,this.usedAssembler())}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();_D.update(this),yD.update(this),ik.update(this),this.compileIfRequired(),this.setMaterial(this.material)}}function xk(t){return class extends t{constructor(){super(...arguments),this.useBumpMap=oa.BOOLEAN(0,{separatorBefore:!0,...ND(bk)}),this.bumpMap=oa.NODE_PATH(\\\\\\\"\\\\\\\",LD(bk,\\\\\\\"useBumpMap\\\\\\\")),this.bumpScale=oa.FLOAT(1,{range:[0,1],rangeLocked:[!1,!1],...LD(bk,\\\\\\\"useBumpMap\\\\\\\")}),this.bumpBias=oa.FLOAT(0,{range:[0,1],rangeLocked:[!1,!1],...LD(bk,\\\\\\\"useBumpMap\\\\\\\")})}}}O.a;xk(aa);class bk extends OD{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useBumpMap,this.node.p.bumpMap)}async update(){if(this._update(this.node.material,\\\\\\\"bumpMap\\\\\\\",this.node.p.useBumpMap,this.node.p.bumpMap),this._update_options.uniforms){this.node.material.uniforms.bumpScale.value=this.node.pv.bumpScale}if(this._update_options.directParams){this.node.material.bumpScale=this.node.pv.bumpScale}}static async update(t){t.controllers.bumpMap.update()}}var wk;!function(t){t.TANGENT=\\\\\\\"tangent\\\\\\\",t.OBJECT=\\\\\\\"object\\\\\\\"}(wk||(wk={}));const Tk=[wk.TANGENT,wk.OBJECT],Ak={[wk.TANGENT]:w.Uc,[wk.OBJECT]:w.zb};function Ek(t){return class extends t{constructor(){super(...arguments),this.useNormalMap=oa.BOOLEAN(0,{separatorBefore:!0,...ND(Mk)}),this.normalMap=oa.NODE_PATH(gi.EMPTY,LD(Mk,\\\\\\\"useNormalMap\\\\\\\")),this.normalMapType=oa.INTEGER(0,{visibleIf:{useNormalMap:1},menu:{entries:Tk.map(((t,e)=>({name:t,value:e})))}}),this.normalScale=oa.VECTOR2([1,1],{visibleIf:{useNormalMap:1}})}}}O.a;Ek(aa);class Mk extends OD{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useNormalMap,this.node.p.normalMap)}async update(){this._update(this.node.material,\\\\\\\"normalMap\\\\\\\",this.node.p.useNormalMap,this.node.p.normalMap);const t=Ak[Tk[this.node.pv.normalMapType]];if(this._update_options.uniforms){this.node.material.uniforms.normalScale.value.copy(this.node.pv.normalScale)}const e=this.node.material;e.normalMapType=t,this._update_options.directParams&&e.normalScale.copy(this.node.pv.normalScale)}static async update(t){t.controllers.normalMap.update()}}function Sk(t){return class extends t{constructor(){super(...arguments),this.useDisplacementMap=oa.BOOLEAN(0,{separatorBefore:!0,...ND(Ck)}),this.displacementMap=oa.NODE_PATH(\\\\\\\"\\\\\\\",LD(Ck,\\\\\\\"useDisplacementMap\\\\\\\")),this.displacementScale=oa.FLOAT(1,{range:[0,1],rangeLocked:[!1,!1],...LD(Ck,\\\\\\\"useDisplacementMap\\\\\\\")}),this.displacementBias=oa.FLOAT(0,{range:[0,1],rangeLocked:[!1,!1],...LD(Ck,\\\\\\\"useDisplacementMap\\\\\\\")})}}}O.a;Sk(aa);class Ck extends OD{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useDisplacementMap,this.node.p.displacementMap)}async update(){if(this._update(this.node.material,\\\\\\\"displacementMap\\\\\\\",this.node.p.useDisplacementMap,this.node.p.displacementMap),this._update_options.uniforms){const t=this.node.material;t.uniforms.displacementScale.value=this.node.pv.displacementScale,t.uniforms.displacementBias.value=this.node.pv.displacementBias}if(this._update_options.directParams){const t=this.node.material;t.displacementScale=this.node.pv.displacementScale,t.displacementBias=this.node.pv.displacementBias}}static async update(t){t.controllers.displacementMap.update()}}function Nk(t){return class extends t{constructor(){super(...arguments),this.useMatcapMap=oa.BOOLEAN(0,ND(Lk)),this.matcapMap=oa.NODE_PATH(gi.EMPTY,LD(Lk,\\\\\\\"useMatcapMap\\\\\\\"))}}}O.a;Nk(aa);class Lk extends OD{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useMatcapMap,this.node.p.matcapMap)}async update(){this._update(this.node.material,\\\\\\\"matcap\\\\\\\",this.node.p.useMatcapMap,this.node.p.matcapMap)}static async update(t){t.controllers.matcap.update()}}const Ok={directParams:!0};class Rk extends(SD(lD(bD(Ek(Sk(xk(ID(RD(Nk(ZD(ED(xD(aa))))))))))))){}const Pk=new Rk;class Ik extends rD{constructor(){super(...arguments),this.paramsConfig=Pk,this.controllers={advancedCommon:new cD(this),alphaMap:new FD(this,Ok),bumpMap:new bk(this,Ok),displacementMap:new Ck(this,Ok),map:new PD(this,Ok),matcap:new Lk(this,Ok),normalMap:new Mk(this,Ok)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshMatcap\\\\\\\"}createMaterial(){return new jf({vertexColors:!1,side:w.H,color:16777215,opacity:1})}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();MD.update(this),CD.update(this),this.setMaterial(this.material)}}function Fk(t){return class extends t{constructor(){super(...arguments),this.useSpecularMap=oa.BOOLEAN(0,ND(Dk)),this.specularMap=oa.NODE_PATH(gi.EMPTY,LD(Dk,\\\\\\\"useSpecularMap\\\\\\\"))}}}O.a;Fk(aa);class Dk extends OD{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useSpecularMap,this.node.p.specularMap)}async update(){this._update(this.node.material,\\\\\\\"specularMap\\\\\\\",this.node.p.useSpecularMap,this.node.p.specularMap)}static async update(t){t.controllers.specularMap.update()}}const kk={directParams:!0};class Bk extends(SD($D(lD(bD(Fk(Ek(HD(GD(lk(Sk(xk(DD(ID(RD(ZD(ED(xD(aa)))))))))))))))))){constructor(){super(...arguments),this.flatShading=oa.BOOLEAN(0)}}const zk=new Bk;class Uk extends rD{constructor(){super(...arguments),this.paramsConfig=zk,this.controllers={advancedCommon:new cD(this),alphaMap:new FD(this,kk),aoMap:new kD(this,kk),bumpMap:new bk(this,kk),displacementMap:new Ck(this,kk),emissiveMap:new ck(this,kk),envMap:new VD(this,kk),lightMap:new jD(this,kk),map:new PD(this,kk),normalMap:new Mk(this,kk),specularMap:new Dk(this,kk)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshPhong\\\\\\\"}createMaterial(){return new Gf.a({vertexColors:!1,side:w.H,color:16777215,opacity:1})}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();MD.update(this),CD.update(this),JD.update(this),this.material.flatShading!=this.pv.flatShading&&(this.material.flatShading=this.pv.flatShading,this.material.needsUpdate=!0),this.setMaterial(this.material)}}const Gk={uniforms:!0};class Vk extends(_k(vD(nk(lD(fD(bD(Fk(Ek(HD(GD(lk(Sk(xk(DD(ID(RD(ZD(pD(xD(aa)))))))))))))))))))){}const Hk=new Vk;class jk extends gD{constructor(){super(...arguments),this.paramsConfig=Hk,this.controllers={advancedCommon:new cD(this),alphaMap:new FD(this,Gk),aoMap:new kD(this,Gk),bumpMap:new bk(this,Gk),displacementMap:new Ck(this,Gk),emissiveMap:new ck(this,Gk),envMap:new VD(this,Gk),lightMap:new jD(this,Gk),map:new PD(this,Gk),normalMap:new Mk(this,Gk),specularMap:new Dk(this,Gk),PCSS:new mk(this)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshPhongBuilder\\\\\\\"}usedAssembler(){return Hn.GL_MESH_PHONG}_create_assembler_controller(){return ai.assemblersRegister.assembler(this,this.usedAssembler())}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();_D.update(this),yD.update(this),ik.update(this),this.compileIfRequired(),this.setMaterial(this.material)}}function Wk(t){return class extends t{constructor(){super(...arguments),this.useEnvMap=oa.BOOLEAN(0,{separatorBefore:!0,...ND(qk)}),this.envMap=oa.NODE_PATH(gi.EMPTY,LD(qk,\\\\\\\"useEnvMap\\\\\\\")),this.envMapIntensity=oa.FLOAT(1,{visibleIf:{useEnvMap:1}}),this.refractionRatio=oa.FLOAT(.98,{range:[-1,1],rangeLocked:[!1,!1],visibleIf:{useEnvMap:1}})}}}Wk(aa);class qk extends OD{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useEnvMap,this.node.p.envMap)}async update(){if(this._update(this.node.material,\\\\\\\"envMap\\\\\\\",this.node.p.useEnvMap,this.node.p.envMap),this._update_options.uniforms){const t=this.node.material;t.uniforms.envMapIntensity.value=this.node.pv.envMapIntensity,t.uniforms.refractionRatio.value=this.node.pv.refractionRatio}if(this._update_options.directParams){const t=this.node.material;t.envMapIntensity=this.node.pv.envMapIntensity,t.refractionRatio=this.node.pv.refractionRatio}}static async update(t){t.controllers.envMap.update()}}function Xk(t){return class extends t{constructor(){super(...arguments),this.useMetalnessMap=oa.BOOLEAN(0,{separatorBefore:!0,...ND(Yk)}),this.metalnessMap=oa.NODE_PATH(gi.EMPTY,LD(Yk,\\\\\\\"useMetalnessMap\\\\\\\")),this.metalness=oa.FLOAT(1),this.useRoughnessMap=oa.BOOLEAN(0,{separatorBefore:!0,...ND(Yk)}),this.roughnessMap=oa.NODE_PATH(gi.EMPTY,LD(Yk,\\\\\\\"useRoughnessMap\\\\\\\")),this.roughness=oa.FLOAT(.5)}}}O.a;Xk(aa);class Yk extends OD{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useMetalnessMap,this.node.p.metalnessMap)}async update(){if(this._update(this.node.material,\\\\\\\"metalnessMap\\\\\\\",this.node.p.useMetalnessMap,this.node.p.metalnessMap),this._update_options.uniforms){this.node.material.uniforms.metalness.value=this.node.pv.metalness}if(this._update_options.directParams){this.node.material.metalness=this.node.pv.metalness}if(this._update(this.node.material,\\\\\\\"roughnessMap\\\\\\\",this.node.p.useRoughnessMap,this.node.p.roughnessMap),this._update_options.uniforms){this.node.material.uniforms.roughness.value=this.node.pv.roughness}if(this._update_options.directParams){this.node.material.roughness=this.node.pv.roughness}}static async update(t){t.controllers.metalnessRoughnessMap.update()}}function $k(t){return class extends t{constructor(){super(...arguments),this.clearcoat=oa.FLOAT(0,{separatorBefore:!0}),this.useClearCoatMap=oa.BOOLEAN(0,ND(Jk)),this.clearcoatMap=oa.NODE_PATH(gi.EMPTY,LD(Jk,\\\\\\\"useClearCoatMap\\\\\\\")),this.useClearCoatNormalMap=oa.BOOLEAN(0,ND(Jk)),this.clearcoatNormalMap=oa.NODE_PATH(gi.EMPTY,LD(Jk,\\\\\\\"useClearCoatNormalMap\\\\\\\")),this.clearcoatNormalScale=oa.VECTOR2([1,1],{visibleIf:{useClearCoatNormalMap:1}}),this.clearcoatRoughness=oa.FLOAT(0),this.useClearCoatRoughnessMap=oa.BOOLEAN(0,ND(Jk)),this.clearcoatRoughnessMap=oa.NODE_PATH(gi.EMPTY,LD(Jk,\\\\\\\"useClearCoatRoughnessMap\\\\\\\")),this.useSheen=oa.BOOLEAN(0),this.sheen=oa.FLOAT(0,{range:[0,1],rangeLocked:[!0,!1],visibleIf:{useSheen:1}}),this.sheenRoughness=oa.FLOAT(1,{range:[0,1],rangeLocked:[!0,!1],visibleIf:{useSheen:1}}),this.sheenColor=oa.COLOR([1,1,1],{visibleIf:{useSheen:1}}),this.reflectivity=oa.FLOAT(.5,{range:[0,1],rangeLocked:[!0,!0]}),this.transmission=oa.FLOAT(0,{range:[0,1]}),this.useTransmissionMap=oa.BOOLEAN(0),this.transmissionMap=oa.NODE_PATH(gi.EMPTY,{visibleIf:{useTransmissionMap:1}}),this.thickness=oa.FLOAT(.01,{range:[0,1],rangeLocked:[!0,!1]}),this.useThicknessMap=oa.BOOLEAN(0),this.thicknessMap=oa.NODE_PATH(gi.EMPTY,{visibleIf:{useThicknessMap:1}}),this.attenuationDistance=oa.FLOAT(0),this.attenuationColor=oa.COLOR([1,1,1])}}}$k(aa);class Jk extends OD{constructor(t,e){super(t,e),this.node=t,this._sheenColorClone=new D.a}initializeNode(){this.add_hooks(this.node.p.useClearCoatMap,this.node.p.clearcoatMap),this.add_hooks(this.node.p.useClearCoatNormalMap,this.node.p.clearcoatNormalMap),this.add_hooks(this.node.p.useClearCoatRoughnessMap,this.node.p.clearcoatRoughnessMap),this.add_hooks(this.node.p.useTransmissionMap,this.node.p.transmissionMap),this.add_hooks(this.node.p.useThicknessMap,this.node.p.thicknessMap)}async update(){this._update(this.node.material,\\\\\\\"clearcoatMap\\\\\\\",this.node.p.useClearCoatMap,this.node.p.clearcoatMap),this._update(this.node.material,\\\\\\\"clearcoatNormalMap\\\\\\\",this.node.p.useClearCoatNormalMap,this.node.p.clearcoatNormalMap),this._update(this.node.material,\\\\\\\"clearcoatRoughnessMap\\\\\\\",this.node.p.useClearCoatRoughnessMap,this.node.p.clearcoatRoughnessMap),this._update(this.node.material,\\\\\\\"transmissionMap\\\\\\\",this.node.p.useTransmissionMap,this.node.p.transmissionMap),this._update(this.node.material,\\\\\\\"thicknessMap\\\\\\\",this.node.p.useThicknessMap,this.node.p.thicknessMap);const t=this.node.pv;if(this._update_options.uniforms){const e=this.node.material;e.uniforms.clearcoat.value=t.clearcoat,e.uniforms.clearcoatNormalScale.value.copy(t.clearcoatNormalScale),e.uniforms.clearcoatRoughness.value=t.clearcoatRoughness,e.uniforms.reflectivity.value=t.reflectivity,e.uniforms.transmission.value=t.transmission,e.uniforms.thickness.value=t.thickness,e.uniforms.attenuationDistance.value=t.attenuationDistance,e.uniforms.attenuationTint.value=t.attenuationColor,t.useSheen?(this._sheenColorClone.copy(t.sheenColor),e.uniforms.sheen.value=t.sheen,e.uniforms.sheenRoughness.value=t.sheenRoughness,e.uniforms.sheenTint.value=this._sheenColorClone):e.uniforms.sheen.value=0}if(this._update_options.directParams){const e=this.node.material;e.clearcoat=t.clearcoat,e.clearcoatNormalScale.copy(t.clearcoatNormalScale),e.clearcoatRoughness=t.clearcoatRoughness,e.reflectivity=t.reflectivity,t.useSheen?(this._sheenColorClone.copy(t.sheenColor),e.sheen=t.sheen,e.sheenRoughness=t.sheenRoughness,e.sheenTint=this._sheenColorClone):e.sheen=0,e.transmission=t.transmission,e.thickness=t.thickness,e.attenuationDistance=t.attenuationDistance,e.attenuationTint=t.attenuationColor}}static async update(t){t.controllers.physical.update()}}const Zk={directParams:!0};class Qk extends(SD($D(lD(bD($k(Xk(Ek(HD(Wk(lk(Sk(xk(DD(ID(RD(ZD(ED(xD(aa))))))))))))))))))){}const Kk=new Qk;class tB extends rD{constructor(){super(...arguments),this.paramsConfig=Kk,this.controllers={advancedCommon:new cD(this),alphaMap:new FD(this,Zk),aoMap:new kD(this,Zk),bumpMap:new bk(this,Zk),displacementMap:new Ck(this,Zk),emissiveMap:new ck(this,Zk),envMap:new qk(this,Zk),lightMap:new jD(this,Zk),map:new PD(this,Zk),metalnessRoughnessMap:new Yk(this,Zk),normalMap:new Mk(this,Zk),physical:new Jk(this,Zk)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshPhysical\\\\\\\"}createMaterial(){return new Uf.a({vertexColors:!1,side:w.H,color:16777215,opacity:1,metalness:1,roughness:0})}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();MD.update(this),CD.update(this),JD.update(this),this.setMaterial(this.material)}}const eB={uniforms:!0};class nB extends(function(t){return class extends(_k(vD(nk(lD(fD(t)))))){}}(bD($k(Xk(Ek(HD(Wk(lk(Sk(xk(DD(ID(RD(ZD(pD(xD(aa))))))))))))))))){}const iB=new nB;class rB extends gD{constructor(){super(...arguments),this.paramsConfig=iB,this.controllers={advancedCommon:new cD(this),alphaMap:new FD(this,eB),aoMap:new kD(this,eB),bumpMap:new bk(this,eB),displacementMap:new Ck(this,eB),emissiveMap:new ck(this,eB),envMap:new qk(this,eB),lightMap:new jD(this,eB),map:new PD(this,eB),metalnessRoughnessMap:new Yk(this,eB),normalMap:new Mk(this,eB),physical:new Jk(this,eB),PCSS:new mk(this)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshPhysicalBuilder\\\\\\\"}usedAssembler(){return Hn.GL_MESH_PHYSICAL}_create_assembler_controller(){return ai.assemblersRegister.assembler(this,this.usedAssembler())}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();_D.update(this),yD.update(this),ik.update(this),this.compileIfRequired(),this.setMaterial(this.material)}}const sB={directParams:!0};class oB extends(SD($D(lD(bD(Xk(Ek(HD(Wk(lk(Sk(xk(DD(ID(RD(ZD(ED(xD(aa)))))))))))))))))){}const aB=new oB;class lB extends rD{constructor(){super(...arguments),this.paramsConfig=aB,this.controllers={advancedCommon:new cD(this),alphaMap:new FD(this,sB),aoMap:new kD(this,sB),bumpMap:new bk(this,sB),displacementMap:new Ck(this,sB),emissiveMap:new ck(this,sB),envMap:new qk(this,sB),lightMap:new jD(this,sB),map:new PD(this,sB),metalnessRoughnessMap:new Yk(this,sB),normalMap:new Mk(this,sB)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshStandard\\\\\\\"}createMaterial(){return new xr.a({vertexColors:!1,side:w.H,color:16777215,opacity:1,metalness:1,roughness:0})}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();MD.update(this),CD.update(this),JD.update(this),this.setMaterial(this.material)}}const cB={uniforms:!0};class uB extends(_k(vD(nk(lD(fD(bD(Xk(Ek(HD(Wk(lk(Sk(xk(DD(ID(RD(ZD(pD(xD(aa)))))))))))))))))))){}const hB=new uB;class dB extends gD{constructor(){super(...arguments),this.paramsConfig=hB,this.controllers={advancedCommon:new cD(this),alphaMap:new FD(this,cB),aoMap:new kD(this,cB),bumpMap:new bk(this,cB),displacementMap:new Ck(this,cB),emissiveMap:new ck(this,cB),envMap:new qk(this,cB),lightMap:new jD(this,cB),map:new PD(this,cB),metalnessRoughnessMap:new Yk(this,cB),normalMap:new Mk(this,cB),PCSS:new mk(this)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshStandardBuilder\\\\\\\"}usedAssembler(){return Hn.GL_MESH_STANDARD}_create_assembler_controller(){return ai.assemblersRegister.assembler(this,this.usedAssembler())}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();_D.update(this),yD.update(this),ik.update(this),this.compileIfRequired(),this.setMaterial(this.material)}}const pB=z.meshphong_frag.slice(0,z.meshphong_frag.indexOf(\\\\\\\"void main() {\\\\\\\")),_B=z.meshphong_frag.slice(z.meshphong_frag.indexOf(\\\\\\\"void main() {\\\\\\\")),mB={uniforms:I.merge([V.phong.uniforms,{thicknessMap:{value:null},thicknessColor:{value:new D.a(16777215)},thicknessDistortion:{value:.1},thicknessAmbient:{value:0},thicknessAttenuation:{value:.1},thicknessPower:{value:2},thicknessScale:{value:10}}]),vertexShader:[\\\\\\\"#define USE_UV\\\\\\\",z.meshphong_vert].join(\\\\\\\"\\\\n\\\\\\\"),fragmentShader:[\\\\\\\"#define USE_UV\\\\\\\",\\\\\\\"#define SUBSURFACE\\\\\\\",pB,\\\\\\\"uniform sampler2D thicknessMap;\\\\\\\",\\\\\\\"uniform float thicknessPower;\\\\\\\",\\\\\\\"uniform float thicknessScale;\\\\\\\",\\\\\\\"uniform float thicknessDistortion;\\\\\\\",\\\\\\\"uniform float thicknessAmbient;\\\\\\\",\\\\\\\"uniform float thicknessAttenuation;\\\\\\\",\\\\\\\"uniform vec3 thicknessColor;\\\\\\\",\\\\\\\"void RE_Direct_Scattering(const in IncidentLight directLight, const in vec2 uv, const in GeometricContext geometry, inout ReflectedLight reflectedLight) {\\\\\\\",\\\\\\\"\\\\tvec3 thickness = thicknessColor * texture2D(thicknessMap, uv).r;\\\\\\\",\\\\\\\"\\\\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * thicknessDistortion));\\\\\\\",\\\\\\\"\\\\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), thicknessPower) * thicknessScale;\\\\\\\",\\\\\\\"\\\\tvec3 scatteringIllu = (scatteringDot + thicknessAmbient) * thickness;\\\\\\\",\\\\\\\"\\\\treflectedLight.directDiffuse += scatteringIllu * thicknessAttenuation * directLight.color;\\\\\\\",\\\\\\\"}\\\\\\\",_B.replace(\\\\\\\"#include <lights_fragment_begin>\\\\\\\",(fB=z.lights_fragment_begin,gB=\\\\\\\"RE_Direct( directLight, geometry, material, reflectedLight );\\\\\\\",vB=[\\\\\\\"RE_Direct( directLight, geometry, material, reflectedLight );\\\\\\\",\\\\\\\"#if defined( SUBSURFACE ) && defined( USE_UV )\\\\\\\",\\\\\\\" RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight);\\\\\\\",\\\\\\\"#endif\\\\\\\"].join(\\\\\\\"\\\\n\\\\\\\"),fB.split(gB).join(vB)))].join(\\\\\\\"\\\\n\\\\\\\")};var fB,gB,vB;function yB(t){return{cook:!1,callback:(e,n)=>{AB.PARAM_CALLBACK_update_uniformColor(e,n,t)}}}function xB(t){return{cook:!1,callback:(e,n)=>{AB.PARAM_CALLBACK_update_uniformN(e,n,t)}}}const bB={uniforms:!0};class wB extends(SD(nk(lD(bD(ID(RD(ZD(function(t){return class extends t{constructor(){var t;super(...arguments),this.diffuse=oa.COLOR([1,1,1],{...yB(\\\\\\\"diffuse\\\\\\\")}),this.shininess=oa.FLOAT(1,{range:[0,1e3]}),this.thicknessMap=oa.NODE_PATH(gi.EMPTY,{nodeSelection:{context:Ki.COP},...(t=\\\\\\\"thicknessMap\\\\\\\",{cook:!1,callback:(e,n)=>{AB.PARAM_CALLBACK_update_uniformTexture(e,n,t)}})}),this.thicknessColor=oa.COLOR([.5,.3,0],{...yB(\\\\\\\"thicknessColor\\\\\\\")}),this.thicknessDistortion=oa.FLOAT(.1,{...xB(\\\\\\\"thicknessDistortion\\\\\\\")}),this.thicknessAmbient=oa.FLOAT(.4,{...xB(\\\\\\\"thicknessAmbient\\\\\\\")}),this.thicknessAttenuation=oa.FLOAT(.8,{...xB(\\\\\\\"thicknessAttenuation\\\\\\\")}),this.thicknessPower=oa.FLOAT(2,{range:[0,10],...xB(\\\\\\\"thicknessPower\\\\\\\")}),this.thicknessScale=oa.FLOAT(16,{range:[0,100],...xB(\\\\\\\"thicknessScale\\\\\\\")})}}}(xD(aa)))))))))){}const TB=new wB;class AB extends rD{constructor(){super(...arguments),this.paramsConfig=TB,this.controllers={advancedCommon:new cD(this),alphaMap:new FD(this,bB),map:new PD(this,bB)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshSubsurfaceScattering\\\\\\\"}createMaterial(){const t=I.clone(mB.uniforms),e=new F({uniforms:t,vertexShader:mB.vertexShader,fragmentShader:mB.fragmentShader,lights:!0});return e.extensions.derivatives=!0,e}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();CD.update(this),ik.update(this),this.update_map(this.p.thicknessMap,\\\\\\\"thicknessMap\\\\\\\"),this.material.uniforms.diffuse.value.copy(this.pv.diffuse),this.material.uniforms.shininess.value=this.pv.shininess,this.material.uniforms.thicknessColor.value.copy(this.pv.thicknessColor),this.material.uniforms.thicknessDistortion.value=this.pv.thicknessDistortion,this.material.uniforms.thicknessAmbient.value=this.pv.thicknessAmbient,this.material.uniforms.thicknessAttenuation.value=this.pv.thicknessAttenuation,this.material.uniforms.thicknessPower.value=this.pv.thicknessPower,this.material.uniforms.thicknessScale.value=this.pv.thicknessScale,this.setMaterial(this.material)}static PARAM_CALLBACK_update_uniformN(t,e,n){t.material.uniforms[n].value=e.value}static PARAM_CALLBACK_update_uniformColor(t,e,n){e.parent_param&&t.material.uniforms[n].value.copy(e.parent_param.value)}static PARAM_CALLBACK_update_uniformTexture(t,e,n){t.update_map(e,n)}async update_map(t,e){const n=t.value.nodeWithContext(Ki.COP);n||(this.material.uniforms[e].value=null);const i=n,r=await i.compute();this.material.uniforms[e].value=r.texture()}}function EB(t){return class extends t{constructor(){super(...arguments),this.useGradientMap=oa.BOOLEAN(0,ND(MB)),this.gradientMap=oa.NODE_PATH(gi.EMPTY,LD(MB,\\\\\\\"useGradientMap\\\\\\\"))}}}O.a;EB(aa);class MB extends OD{constructor(t,e){super(t,e),this.node=t}initializeNode(){this.add_hooks(this.node.p.useGradientMap,this.node.p.gradientMap)}async update(){this._update(this.node.material,\\\\\\\"gradientMap\\\\\\\",this.node.p.useGradientMap,this.node.p.gradientMap)}static async update(t){t.controllers.gradientMap.update()}}const SB={directParams:!0};class CB extends(SD($D(lD(bD(Ek(HD(EB(lk(Sk(xk(DD(ID(RD(ZD(ED(xD(aa))))))))))))))))){}const NB=new CB;class LB extends rD{constructor(){super(...arguments),this.paramsConfig=NB,this.controllers={advancedCommon:new cD(this),alphaMap:new FD(this,SB),aoMap:new kD(this,SB),bumpMap:new bk(this,SB),displacementMap:new Ck(this,SB),emissiveMap:new ck(this,SB),gradientMap:new MB(this,SB),lightMap:new jD(this,SB),map:new PD(this,SB),normalMap:new Mk(this,SB)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"meshToon\\\\\\\"}createMaterial(){return new Vf({vertexColors:!1,side:w.H,color:16777215,opacity:1})}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();MD.update(this),CD.update(this),JD.update(this),this.setMaterial(this.material)}}const OB={directParams:!0};class RB extends(vD(lD(bD(ID(RD(ZD(ED(function(t){return class extends t{constructor(){super(...arguments),this.size=oa.FLOAT(1),this.sizeAttenuation=oa.BOOLEAN(1)}}}(xD(aa)))))))))){}const PB=new RB;class IB extends rD{constructor(){super(...arguments),this.paramsConfig=PB,this.controllers={advancedCommon:new cD(this),alphaMap:new FD(this,OB),map:new PD(this,OB)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"points\\\\\\\"}createMaterial(){return new yr.a({vertexColors:!1,side:w.H,color:16777215,opacity:1})}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();MD.update(this),yD.update(this),this.material.size=this.pv.size,this.material.sizeAttenuation=this.pv.sizeAttenuation,this.setMaterial(this.material)}}class FB extends(vD(lD(fD(bD(pD(xD(aa))))))){}const DB=new FB;class kB extends gD{constructor(){super(...arguments),this.paramsConfig=DB,this.controllers={advancedCommon:new cD(this)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"pointsBuilder\\\\\\\"}usedAssembler(){return Hn.GL_POINTS}_create_assembler_controller(){return ai.assemblersRegister.assembler(this,this.usedAssembler())}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();_D.update(this),yD.update(this),this.compileIfRequired(),this.setMaterial(this.material)}}class BB extends(lD(ED(aa))){}const zB=new BB;class UB extends rD{constructor(){super(...arguments),this.paramsConfig=zB,this.controllers={advancedCommon:new cD(this)},this.controllerNames=Object.keys(this.controllers)}static type(){return\\\\\\\"shadow\\\\\\\"}createMaterial(){return new Bf({vertexColors:!1,side:w.H,color:16777215,opacity:1})}initializeNode(){this.params.onParamsCreated(\\\\\\\"init controllers\\\\\\\",(()=>{for(let t of this.controllerNames)this.controllers[t].initializeNode()}))}async cook(){for(let t of this.controllerNames)this.controllers[t].update();MD.update(this),this.setMaterial(this.material)}}class GB extends k.a{constructor(){const t=GB.SkyShader,e=new F({name:\\\\\\\"SkyShader\\\\\\\",fragmentShader:t.fragmentShader,vertexShader:t.vertexShader,uniforms:I.clone(t.uniforms),side:w.i,depthWrite:!1});super(new N(1,1,1),e)}}GB.prototype.isSky=!0,GB.SkyShader={uniforms:{turbidity:{value:2},rayleigh:{value:1},mieCoefficient:{value:.005},mieDirectionalG:{value:.8},sunPosition:{value:new p.a},up:{value:new p.a(0,1,0)}},vertexShader:\\\\\\\"\\\\n\\\\t\\\\tuniform vec3 sunPosition;\\\\n\\\\t\\\\tuniform float rayleigh;\\\\n\\\\t\\\\tuniform float turbidity;\\\\n\\\\t\\\\tuniform float mieCoefficient;\\\\n\\\\t\\\\tuniform vec3 up;\\\\n\\\\n\\\\t\\\\tvarying vec3 vWorldPosition;\\\\n\\\\t\\\\tvarying vec3 vSunDirection;\\\\n\\\\t\\\\tvarying float vSunfade;\\\\n\\\\t\\\\tvarying vec3 vBetaR;\\\\n\\\\t\\\\tvarying vec3 vBetaM;\\\\n\\\\t\\\\tvarying float vSunE;\\\\n\\\\n\\\\t\\\\t// constants for atmospheric scattering\\\\n\\\\t\\\\tconst float e = 2.71828182845904523536028747135266249775724709369995957;\\\\n\\\\t\\\\tconst float pi = 3.141592653589793238462643383279502884197169;\\\\n\\\\n\\\\t\\\\t// wavelength of used primaries, according to preetham\\\\n\\\\t\\\\tconst vec3 lambda = vec3( 680E-9, 550E-9, 450E-9 );\\\\n\\\\t\\\\t// this pre-calcuation replaces older TotalRayleigh(vec3 lambda) function:\\\\n\\\\t\\\\t// (8.0 * pow(pi, 3.0) * pow(pow(n, 2.0) - 1.0, 2.0) * (6.0 + 3.0 * pn)) / (3.0 * N * pow(lambda, vec3(4.0)) * (6.0 - 7.0 * pn))\\\\n\\\\t\\\\tconst vec3 totalRayleigh = vec3( 5.804542996261093E-6, 1.3562911419845635E-5, 3.0265902468824876E-5 );\\\\n\\\\n\\\\t\\\\t// mie stuff\\\\n\\\\t\\\\t// K coefficient for the primaries\\\\n\\\\t\\\\tconst float v = 4.0;\\\\n\\\\t\\\\tconst vec3 K = vec3( 0.686, 0.678, 0.666 );\\\\n\\\\t\\\\t// MieConst = pi * pow( ( 2.0 * pi ) / lambda, vec3( v - 2.0 ) ) * K\\\\n\\\\t\\\\tconst vec3 MieConst = vec3( 1.8399918514433978E14, 2.7798023919660528E14, 4.0790479543861094E14 );\\\\n\\\\n\\\\t\\\\t// earth shadow hack\\\\n\\\\t\\\\t// cutoffAngle = pi / 1.95;\\\\n\\\\t\\\\tconst float cutoffAngle = 1.6110731556870734;\\\\n\\\\t\\\\tconst float steepness = 1.5;\\\\n\\\\t\\\\tconst float EE = 1000.0;\\\\n\\\\n\\\\t\\\\tfloat sunIntensity( float zenithAngleCos ) {\\\\n\\\\t\\\\t\\\\tzenithAngleCos = clamp( zenithAngleCos, -1.0, 1.0 );\\\\n\\\\t\\\\t\\\\treturn EE * max( 0.0, 1.0 - pow( e, -( ( cutoffAngle - acos( zenithAngleCos ) ) / steepness ) ) );\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvec3 totalMie( float T ) {\\\\n\\\\t\\\\t\\\\tfloat c = ( 0.2 * T ) * 10E-18;\\\\n\\\\t\\\\t\\\\treturn 0.434 * c * MieConst;\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\\\\n\\\\t\\\\t\\\\tvWorldPosition = worldPosition.xyz;\\\\n\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\t\\\\t\\\\tgl_Position.z = gl_Position.w; // set z to camera.far\\\\n\\\\n\\\\t\\\\t\\\\tvSunDirection = normalize( sunPosition );\\\\n\\\\n\\\\t\\\\t\\\\tvSunE = sunIntensity( dot( vSunDirection, up ) );\\\\n\\\\n\\\\t\\\\t\\\\tvSunfade = 1.0 - clamp( 1.0 - exp( ( sunPosition.y / 450000.0 ) ), 0.0, 1.0 );\\\\n\\\\n\\\\t\\\\t\\\\tfloat rayleighCoefficient = rayleigh - ( 1.0 * ( 1.0 - vSunfade ) );\\\\n\\\\n\\\\t\\\\t\\\\t// extinction (absorbtion + out scattering)\\\\n\\\\t\\\\t\\\\t// rayleigh coefficients\\\\n\\\\t\\\\t\\\\tvBetaR = totalRayleigh * rayleighCoefficient;\\\\n\\\\n\\\\t\\\\t\\\\t// mie coefficients\\\\n\\\\t\\\\t\\\\tvBetaM = totalMie( turbidity ) * mieCoefficient;\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\t\\\\tvarying vec3 vWorldPosition;\\\\n\\\\t\\\\tvarying vec3 vSunDirection;\\\\n\\\\t\\\\tvarying float vSunfade;\\\\n\\\\t\\\\tvarying vec3 vBetaR;\\\\n\\\\t\\\\tvarying vec3 vBetaM;\\\\n\\\\t\\\\tvarying float vSunE;\\\\n\\\\n\\\\t\\\\tuniform float mieDirectionalG;\\\\n\\\\t\\\\tuniform vec3 up;\\\\n\\\\n\\\\t\\\\tconst vec3 cameraPos = vec3( 0.0, 0.0, 0.0 );\\\\n\\\\n\\\\t\\\\t// constants for atmospheric scattering\\\\n\\\\t\\\\tconst float pi = 3.141592653589793238462643383279502884197169;\\\\n\\\\n\\\\t\\\\tconst float n = 1.0003; // refractive index of air\\\\n\\\\t\\\\tconst float N = 2.545E25; // number of molecules per unit volume for air at 288.15K and 1013mb (sea level -45 celsius)\\\\n\\\\n\\\\t\\\\t// optical length at zenith for molecules\\\\n\\\\t\\\\tconst float rayleighZenithLength = 8.4E3;\\\\n\\\\t\\\\tconst float mieZenithLength = 1.25E3;\\\\n\\\\t\\\\t// 66 arc seconds -> degrees, and the cosine of that\\\\n\\\\t\\\\tconst float sunAngularDiameterCos = 0.999956676946448443553574619906976478926848692873900859324;\\\\n\\\\n\\\\t\\\\t// 3.0 / ( 16.0 * pi )\\\\n\\\\t\\\\tconst float THREE_OVER_SIXTEENPI = 0.05968310365946075;\\\\n\\\\t\\\\t// 1.0 / ( 4.0 * pi )\\\\n\\\\t\\\\tconst float ONE_OVER_FOURPI = 0.07957747154594767;\\\\n\\\\n\\\\t\\\\tfloat rayleighPhase( float cosTheta ) {\\\\n\\\\t\\\\t\\\\treturn THREE_OVER_SIXTEENPI * ( 1.0 + pow( cosTheta, 2.0 ) );\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tfloat hgPhase( float cosTheta, float g ) {\\\\n\\\\t\\\\t\\\\tfloat g2 = pow( g, 2.0 );\\\\n\\\\t\\\\t\\\\tfloat inverse = 1.0 / pow( 1.0 - 2.0 * g * cosTheta + g2, 1.5 );\\\\n\\\\t\\\\t\\\\treturn ONE_OVER_FOURPI * ( ( 1.0 - g2 ) * inverse );\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec3 direction = normalize( vWorldPosition - cameraPos );\\\\n\\\\n\\\\t\\\\t\\\\t// optical length\\\\n\\\\t\\\\t\\\\t// cutoff angle at 90 to avoid singularity in next formula.\\\\n\\\\t\\\\t\\\\tfloat zenithAngle = acos( max( 0.0, dot( up, direction ) ) );\\\\n\\\\t\\\\t\\\\tfloat inverse = 1.0 / ( cos( zenithAngle ) + 0.15 * pow( 93.885 - ( ( zenithAngle * 180.0 ) / pi ), -1.253 ) );\\\\n\\\\t\\\\t\\\\tfloat sR = rayleighZenithLength * inverse;\\\\n\\\\t\\\\t\\\\tfloat sM = mieZenithLength * inverse;\\\\n\\\\n\\\\t\\\\t\\\\t// combined extinction factor\\\\n\\\\t\\\\t\\\\tvec3 Fex = exp( -( vBetaR * sR + vBetaM * sM ) );\\\\n\\\\n\\\\t\\\\t\\\\t// in scattering\\\\n\\\\t\\\\t\\\\tfloat cosTheta = dot( direction, vSunDirection );\\\\n\\\\n\\\\t\\\\t\\\\tfloat rPhase = rayleighPhase( cosTheta * 0.5 + 0.5 );\\\\n\\\\t\\\\t\\\\tvec3 betaRTheta = vBetaR * rPhase;\\\\n\\\\n\\\\t\\\\t\\\\tfloat mPhase = hgPhase( cosTheta, mieDirectionalG );\\\\n\\\\t\\\\t\\\\tvec3 betaMTheta = vBetaM * mPhase;\\\\n\\\\n\\\\t\\\\t\\\\tvec3 Lin = pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * ( 1.0 - Fex ), vec3( 1.5 ) );\\\\n\\\\t\\\\t\\\\tLin *= mix( vec3( 1.0 ), pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * Fex, vec3( 1.0 / 2.0 ) ), clamp( pow( 1.0 - dot( up, vSunDirection ), 5.0 ), 0.0, 1.0 ) );\\\\n\\\\n\\\\t\\\\t\\\\t// nightsky\\\\n\\\\t\\\\t\\\\tfloat theta = acos( direction.y ); // elevation --\\\\x3e y-axis, [-pi/2, pi/2]\\\\n\\\\t\\\\t\\\\tfloat phi = atan( direction.z, direction.x ); // azimuth --\\\\x3e x-axis [-pi/2, pi/2]\\\\n\\\\t\\\\t\\\\tvec2 uv = vec2( phi, theta ) / vec2( 2.0 * pi, pi ) + vec2( 0.5, 0.0 );\\\\n\\\\t\\\\t\\\\tvec3 L0 = vec3( 0.1 ) * Fex;\\\\n\\\\n\\\\t\\\\t\\\\t// composition + solar disc\\\\n\\\\t\\\\t\\\\tfloat sundisk = smoothstep( sunAngularDiameterCos, sunAngularDiameterCos + 0.00002, cosTheta );\\\\n\\\\t\\\\t\\\\tL0 += ( vSunE * 19000.0 * Fex ) * sundisk;\\\\n\\\\n\\\\t\\\\t\\\\tvec3 texColor = ( Lin + L0 ) * 0.04 + vec3( 0.0, 0.0003, 0.00075 );\\\\n\\\\n\\\\t\\\\t\\\\tvec3 retColor = pow( texColor, vec3( 1.0 / ( 1.2 + ( 1.2 * vSunfade ) ) ) );\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor = vec4( retColor, 1.0 );\\\\n\\\\n\\\\t\\\\t\\\\t#include <tonemapping_fragment>\\\\n\\\\t\\\\t\\\\t#include <encodings_fragment>\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};const VB=new class extends aa{constructor(){super(...arguments),this.turbidity=oa.FLOAT(2,{range:[0,20]}),this.rayleigh=oa.FLOAT(1,{range:[0,4]}),this.mieCoefficient=oa.FLOAT(.005),this.mieDirectional=oa.FLOAT(.8),this.inclination=oa.FLOAT(.5),this.azimuth=oa.FLOAT(.25),this.up=oa.VECTOR3([0,1,0])}};class HB extends rD{constructor(){super(...arguments),this.paramsConfig=VB}static type(){return\\\\\\\"sky\\\\\\\"}createMaterial(){const t=(new GB).material;return t.depthWrite=!0,t}async cook(){const t=this.material.uniforms;t.turbidity.value=this.pv.turbidity,t.rayleigh.value=this.pv.rayleigh,t.mieCoefficient.value=this.pv.mieCoefficient,t.mieDirectionalG.value=this.pv.mieDirectional,t.up.value.copy(this.pv.up);const e=Math.PI*(this.pv.inclination-.5),n=2*Math.PI*(this.pv.azimuth-.5);t.sunPosition.value.x=Math.cos(n),t.sunPosition.value.y=Math.sin(n)*Math.sin(e),t.sunPosition.value.z=Math.sin(n)*Math.cos(e),this.setMaterial(this.material)}}var jB=\\\\\\\"precision highp float;\\\\nprecision highp int;\\\\n\\\\nvarying vec3 vPw;\\\\n\\\\n#include <common>\\\\n\\\\nvoid main()\\\\t{\\\\n\\\\n\\\\t// start builder body code\\\\n\\\\n\\\\tvPw = position;\\\\n\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n}\\\\\\\",WB=\\\\\\\"precision highp float;\\\\nprecision highp int;\\\\n\\\\n#include <common>\\\\n\\\\n#define DIR_LIGHTS_COUNT 1\\\\n#define MAX_STEPS_COUNT 4096\\\\n\\\\nuniform vec3 u_Color;\\\\nuniform float u_VolumeDensity;\\\\nuniform float u_ShadowDensity;\\\\nuniform float u_StepSize;\\\\nuniform vec3 u_BoundingBoxMin;\\\\nuniform vec3 u_BoundingBoxMax;\\\\n//const int u_PointsCount = 3;\\\\n//uniform vec3 u_Points[3];\\\\nuniform sampler2D u_Map;\\\\n\\\\n//const int u_DirectionalLightsCount = 1;\\\\nuniform vec3 u_DirectionalLightDirection; //[DIR_LIGHTS_COUNT];\\\\n\\\\nvarying vec3 vPw;\\\\n// varying vec3 vN;\\\\n// varying vec2 vUV;\\\\n//varying vec3 vPCameraSpace;\\\\n// varying vec4 vCd;\\\\n\\\\nvec3 normalize_in_bbox(vec3 point){\\\\n\\\\n\\\\tvec3 min = u_BoundingBoxMin;\\\\n\\\\tvec3 max = u_BoundingBoxMax;\\\\n\\\\n\\\\treturn vec3(\\\\n\\\\t\\\\t(point.x - min.x) / (max.x - min.x),\\\\n\\\\t\\\\t(point.y - min.y) / (max.y - min.y),\\\\n\\\\t\\\\t(point.z - min.z) / (max.z - min.z)\\\\n\\\\t);\\\\n}\\\\n\\\\nbool is_inside_bbox(vec3 Pw){\\\\n\\\\n\\\\tvec3 min = u_BoundingBoxMin;\\\\n\\\\tvec3 max = u_BoundingBoxMax;\\\\n\\\\n\\\\treturn (\\\\n\\\\t\\\\tPw.x > min.x &&\\\\n\\\\t\\\\tPw.y > min.y &&\\\\n\\\\t\\\\tPw.z > min.z &&\\\\n\\\\n\\\\t\\\\tPw.x < max.x &&\\\\n\\\\t\\\\tPw.y < max.y &&\\\\n\\\\t\\\\tPw.z < max.z\\\\n\\\\t\\\\t);\\\\n}\\\\n\\\\nfloat density_to_opacity(float density, float step_size){\\\\n\\\\tfloat curent_density = density;\\\\n\\\\tcurent_density = max(0.0, curent_density);\\\\n\\\\n\\\\tfloat opacity = (1.0-exp(-curent_density * step_size));\\\\n\\\\treturn max(opacity,0.0);\\\\n}\\\\n\\\\nfloat density_function(vec3 position_for_step){\\\\n\\\\tfloat density = 1.0;\\\\n\\\\t// start builder body code\\\\n\\\\n\\\\treturn density;\\\\n}\\\\n\\\\nvec4 raymarch_light(vec3 ray_dir, vec3 start_pos){\\\\n\\\\n\\\\tfloat step_size = u_StepSize;\\\\n\\\\tvec3 step_vector = ray_dir * step_size;\\\\n\\\\n\\\\tvec3 current_pos = start_pos + step_vector*rand(start_pos.x*ray_dir.xy);\\\\n\\\\tfloat opacity = 0.0;\\\\n\\\\tfor(int i=0; i<MAX_STEPS_COUNT; i++){\\\\n\\\\t\\\\tif(opacity >= 0.99){ break; }\\\\n\\\\n\\\\t\\\\tif( is_inside_bbox(current_pos) ){\\\\n\\\\n\\\\t\\\\t\\\\tfloat density = density_function(current_pos) * u_ShadowDensity;\\\\n\\\\t\\\\t\\\\topacity += density_to_opacity(density, step_size);\\\\n\\\\t\\\\t\\\\tcurrent_pos += step_vector;\\\\n\\\\n\\\\t\\\\t}else{\\\\n\\\\t\\\\t\\\\tbreak;\\\\n\\\\t\\\\t}\\\\n\\\\t}\\\\n\\\\n\\\\tvec3 light_color = vec3(1.0, 1.0, 1.0) * u_Color;\\\\n\\\\tlight_color *= (1.0-opacity);\\\\n\\\\treturn vec4(light_color, 1.0-opacity);\\\\n}\\\\n\\\\nvec4 raymarch_bbox(vec3 start_pos, vec3 ray_dir){\\\\n\\\\n\\\\tfloat step_size = u_StepSize;\\\\n\\\\tvec3 step_vector = ray_dir * step_size;\\\\n\\\\n\\\\tvec3 current_pos = start_pos - step_vector*rand(ray_dir.xz);\\\\n\\\\tfloat opacity = 0.0;\\\\n\\\\tvec3 color = vec3(0.0, 0.0, 0.0);\\\\n\\\\tfloat steps_count = 0.0;\\\\n\\\\tbool was_inside_bbox = false;\\\\n\\\\tfor(int i=0; i<MAX_STEPS_COUNT; i++){\\\\n\\\\t\\\\tif(opacity >= 0.99){ break; }\\\\n\\\\n\\\\t\\\\tif( i==0 || is_inside_bbox(current_pos) ){\\\\n\\\\t\\\\t\\\\twas_inside_bbox = true;\\\\n\\\\n\\\\t\\\\t\\\\tfloat density = density_function(current_pos) * u_VolumeDensity;\\\\n\\\\t\\\\t\\\\topacity += density_to_opacity(density, step_size);\\\\n\\\\n\\\\t\\\\t\\\\tvec4 light_color = vec4(0.0,0.0,0.0,1.0); //vec4(1.0,1.0,1.0,1.0);\\\\n\\\\t\\\\t\\\\t// vec3 directional_light_direction;\\\\n\\\\t\\\\t\\\\t// for ( int l = 0; l < DIR_LIGHTS_COUNT; l++ ) {\\\\n\\\\t\\\\t\\\\t// directional_light_direction = u_DirectionalLightsDirection[ l ];\\\\n\\\\t\\\\t\\\\tlight_color += raymarch_light(-u_DirectionalLightDirection, current_pos);\\\\n\\\\t\\\\t\\\\t// }\\\\n\\\\t\\\\t\\\\tfloat blend = 1.0-opacity;\\\\n\\\\t\\\\t\\\\tcolor = mix( color.xyz, light_color.xyz, vec3(blend, blend, blend) );\\\\n\\\\t\\\\t\\\\tsteps_count += 1.0;\\\\n\\\\n\\\\t\\\\t}else{\\\\n\\\\t\\\\t\\\\tif (was_inside_bbox) { break; }\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\tcurrent_pos += step_vector;\\\\n\\\\t}\\\\n\\\\n\\\\treturn vec4(color, opacity);\\\\n\\\\t// steps_count = steps_count / 5.0;\\\\n\\\\t// return vec4(vec3(steps_count, steps_count, steps_count), 1.0);\\\\n}\\\\n\\\\nvoid main()\\\\t{\\\\n\\\\n\\\\tvec3 eye = normalize(vPw - cameraPosition);\\\\n\\\\t// we can start from the bbox, as we are front facing\\\\n\\\\tvec3 start_pos = vPw;\\\\n\\\\n\\\\tvec4 color = raymarch_bbox(start_pos, eye);\\\\n\\\\tgl_FragColor = color;\\\\n\\\\n}\\\\\\\";const qB={u_Color:{value:new D.a(1,1,1)},u_VolumeDensity:{value:5},u_ShadowDensity:{value:2},u_StepSize:{value:.01},u_BoundingBoxMin:{value:new p.a(-1,-1,-1)},u_BoundingBoxMax:{value:new p.a(1,1,1)},u_DirectionalLightDirection:{value:new p.a(-1,-1,-1)}};var XB=n(16);function YB(t){return class extends t{constructor(){super(...arguments),this.color=oa.COLOR([1,1,1]),this.stepSize=oa.FLOAT(.01),this.density=oa.FLOAT(1),this.shadowDensity=oa.FLOAT(1),this.lightDir=oa.VECTOR3([-1,-1,-1])}}}YB(aa);class $B{constructor(t){this.node=t}static render_hook(t,e,n,i,r,s,o){if(o){this._object_bbox.setFromObject(o);const t=r;t.uniforms.u_BoundingBoxMin.value.copy(this._object_bbox.min),t.uniforms.u_BoundingBoxMax.value.copy(this._object_bbox.max)}}update_uniforms_from_params(){const t=this.node.material.uniforms;t.u_Color.value.copy(this.node.pv.color),t.u_StepSize.value=this.node.pv.stepSize,t.u_VolumeDensity.value=this.node.pv.density,t.u_ShadowDensity.value=this.node.pv.shadowDensity;const e=t.u_DirectionalLightDirection.value,n=this.node.pv.lightDir;e&&(e.x=n.x,e.y=n.y,e.z=n.z)}}$B._object_bbox=new XB.a;class JB extends(YB(aa)){}const ZB=new JB;class QB extends rD{constructor(){super(...arguments),this.paramsConfig=ZB,this._volume_controller=new $B(this)}static type(){return\\\\\\\"volume\\\\\\\"}createMaterial(){const t=new F({vertexShader:jB,fragmentShader:WB,side:w.H,transparent:!0,depthTest:!0,uniforms:I.clone(qB)});return fs.add_user_data_render_hook(t,$B.render_hook.bind($B)),t}initializeNode(){}async cook(){this._volume_controller.update_uniforms_from_params(),this.setMaterial(this.material)}}class KB extends(fD(YB(aa))){}const tz=new KB;class ez extends gD{constructor(){super(...arguments),this.paramsConfig=tz,this._volume_controller=new $B(this)}static type(){return\\\\\\\"volumeBuilder\\\\\\\"}usedAssembler(){return Hn.GL_VOLUME}_create_assembler_controller(){return ai.assemblersRegister.assembler(this,this.usedAssembler())}initializeNode(){}async cook(){this._volume_controller.update_uniforms_from_params(),this.compileIfRequired(),this.setMaterial(this.material)}}class nz extends ia{static context(){return Ki.MAT}cook(){this.cookController.endCook()}}class iz extends nz{}class rz extends iz{constructor(){super(...arguments),this._children_controller_context=Ki.ANIM}static type(){return tr.ANIM}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class sz extends iz{constructor(){super(...arguments),this._children_controller_context=Ki.COP}static type(){return tr.COP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class oz extends iz{constructor(){super(...arguments),this._children_controller_context=Ki.EVENT}static type(){return tr.EVENT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class az extends iz{constructor(){super(...arguments),this._children_controller_context=Ki.MAT}static type(){return tr.MAT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class lz extends nz{constructor(){super(...arguments),this.paramsConfig=new Jm,this.effectsComposerController=new Zm(this),this.displayNodeController=new Lm(this,this.effectsComposerController.displayNodeControllerCallbacks()),this._children_controller_context=Ki.POST}static type(){return tr.POST}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class cz extends iz{constructor(){super(...arguments),this._children_controller_context=Ki.ROP}static type(){return tr.ROP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}var uz=n(87);const hz=\\\\\\\"parent object\\\\\\\",dz=[hz,hz,hz,hz];var pz;!function(t){t[t.MANAGER=0]=\\\\\\\"MANAGER\\\\\\\",t[t.CAMERA=2]=\\\\\\\"CAMERA\\\\\\\",t[t.LIGHT=3]=\\\\\\\"LIGHT\\\\\\\"}(pz||(pz={}));class _z extends ia{constructor(){super(...arguments),this.renderOrder=pz.MANAGER,this._children_group=this._create_children_group(),this._attachableToHierarchy=!0,this._used_in_scene=!0}static context(){return Ki.OBJ}static displayedInputNames(){return dz}_create_children_group(){const t=new In.a;return t.matrixAutoUpdate=!1,t}attachableToHierarchy(){return this._attachableToHierarchy}usedInScene(){return this._used_in_scene}addObjectToParent(t){this.attachableToHierarchy()&&t.add(this.object)}removeObjectFromParent(){if(this.attachableToHierarchy()){const t=this.object.parent;t&&t.remove(this.object)}}initializeBaseNode(){this._object=this._create_object_with_attributes(),this.nameController.add_post_set_fullPath_hook(this.set_object_name.bind(this)),this.set_object_name()}get children_group(){return this._children_group}get object(){return this._object}_create_object_with_attributes(){const t=this.createObject();return t.node=this,t.add(this._children_group),t}set_object_name(){this._object&&(this._object.name=this.path(),this._children_group.name=`${this.path()}:parented_outputs`)}createObject(){const t=new Q.a;return t.matrixAutoUpdate=!1,t}isDisplayNodeCooking(){if(this.displayNodeController){const t=this.displayNodeController.displayNode();if(t)return t.cookController.isCooking()}return!1}isDisplayed(){var t,e;return(null===(e=null===(t=this.flags)||void 0===t?void 0:t.display)||void 0===e?void 0:e.active())||!1}}class mz extends _z{constructor(){super(...arguments),this.flags=new Fi(this),this.renderOrder=pz.LIGHT,this._color_with_intensity=new D.a(0),this._used_in_scene=!0,this._cook_main_without_inputs_when_dirty_bound=this._cook_main_without_inputs_when_dirty.bind(this)}get light(){return this._light}initializeBaseNode(){super.initializeBaseNode(),this._light=this.createLight(),this.object.add(this._light),this.flags.display.onUpdate((()=>{this._updateLightAttachment()})),this.dirtyController.addPostDirtyHook(\\\\\\\"_cook_main_without_inputs_when_dirty\\\\\\\",this._cook_main_without_inputs_when_dirty_bound)}async _cook_main_without_inputs_when_dirty(){await this.cookController.cookMainWithoutInputs()}set_object_name(){super.set_object_name(),this._light&&(this._light.name=`${this.path()}:light`)}_updateLightAttachment(){this.flags.display.active()?(this.object.add(this.light),this._cook_main_without_inputs_when_dirty()):this.object.remove(this.light)}cook(){this.updateLightParams(),this.updateShadowParams(),this.cookController.endCook()}updateLightParams(){}updateShadowParams(){}}const fz=new class extends aa{constructor(){super(...arguments),this.color=oa.COLOR([1,1,1],{conversion:so.SRGB_TO_LINEAR}),this.intensity=oa.FLOAT(1)}};class gz extends mz{constructor(){super(...arguments),this.paramsConfig=fz}static type(){return\\\\\\\"ambientLight\\\\\\\"}createLight(){const t=new uz.a;return t.matrixAutoUpdate=!1,t}initializeNode(){this.io.inputs.setCount(0,1)}updateLightParams(){this.light.color=this.pv.color,this.light.intensity=this.pv.intensity}}class vz extends nv.a{constructor(t,e,n=10,i=10){super(t,e),this.type=\\\\\\\"RectAreaLight\\\\\\\",this.width=n,this.height=i}get power(){return this.intensity*this.width*this.height*Math.PI}set power(t){this.intensity=t/(this.width*this.height*Math.PI)}copy(t){return super.copy(t),this.width=t.width,this.height=t.height,this}toJSON(t){const e=super.toJSON(t);return e.object.width=this.width,e.object.height=this.height,e}}vz.prototype.isRectAreaLight=!0;var yz,xz=n(60);class bz{static init(){const t=[1,0,0,2e-5,1,0,0,503905e-9,1,0,0,.00201562,1,0,0,.00453516,1,0,0,.00806253,1,0,0,.0125978,1,0,0,.018141,1,0,0,.0246924,1,0,0,.0322525,1,0,0,.0408213,1,0,0,.0503999,1,0,0,.0609894,1,0,0,.0725906,1,0,0,.0852058,1,0,0,.0988363,1,0,0,.113484,1,0,0,.129153,1,0,0,.145839,1,0,0,.163548,1,0,0,.182266,1,0,0,.201942,1,0,0,.222314,1,0,0,.241906,1,0,0,.262314,1,0,0,.285754,1,0,0,.310159,1,0,0,.335426,1,0,0,.361341,1,0,0,.387445,1,0,0,.412784,1,0,0,.438197,1,0,0,.466966,1,0,0,.49559,1,0,0,.523448,1,0,0,.549938,1,0,0,.57979,1,0,0,.608746,1,0,0,.636185,1,0,0,.664748,1,0,0,.69313,1,0,0,.71966,1,0,0,.747662,1,0,0,.774023,1,0,0,.799775,1,0,0,.825274,1,0,0,.849156,1,0,0,.873248,1,0,0,.89532,1,0,0,.917565,1,0,0,.937863,1,0,0,.958139,1,0,0,.976563,1,0,0,.994658,1,0,0,1.0112,1,0,0,1.02712,1,0,0,1.04189,1,0,0,1.05568,1,0,0,1.06877,1,0,0,1.08058,1,0,0,1.09194,1,0,0,1.10191,1,0,0,1.11161,1,0,0,1.1199,1,0,0,1.12813,.999547,-4.48815e-7,.0224417,199902e-10,.999495,-113079e-10,.0224406,503651e-9,.999496,-452317e-10,.0224406,.00201461,.999496,-101772e-9,.0224406,.00453287,.999495,-180928e-9,.0224406,.00805845,.999497,-282702e-9,.0224406,.0125914,.999496,-407096e-9,.0224406,.0181319,.999498,-554114e-9,.0224406,.02468,.999499,-723768e-9,.0224406,.0322363,.999495,-916058e-9,.0224405,.0408009,.999499,-.00113101,.0224408,.050375,.999494,-.00136863,.0224405,.0609586,.999489,-.00162896,.0224401,.0725537,.999489,-.00191201,.0224414,.0851619,.999498,-.00221787,.0224413,.0987867,.999492,-.00254642,.0224409,.113426,.999507,-.00289779,.0224417,.129088,.999494,-.0032716,.0224386,.145767,.999546,-.0036673,.0224424,.163472,.999543,-.00408166,.0224387,.182182,.999499,-.00450056,.0224338,.201843,.999503,-.00483661,.0224203,.222198,.999546,-.00452928,.022315,.241714,.999508,-.00587403,.0224329,.262184,.999509,-.00638806,.0224271,.285609,.999501,-.00691028,.0224166,.309998,.999539,-.00741979,.0223989,.335262,.999454,-.00786282,.0223675,.361154,.999529,-.00811928,.0222828,.387224,.999503,-.00799941,.0221063,.41252,.999561,-.00952753,.0223057,.438006,.999557,-.0099134,.0222065,.466735,.999541,-.0100935,.0220402,.495332,.999562,-.00996821,.0218067,.523197,.999556,-.0105031,.0217096,.550223,.999561,-.0114191,.0217215,.579498,.999588,-.0111818,.0213357,.608416,.999633,-.0107725,.0208689,.635965,.999527,-.0121671,.0210149,.664476,.999508,-.0116005,.020431,.692786,.999568,-.0115604,.0199791,.719709,.999671,-.0121117,.0197415,.74737,.999688,-.0110769,.0188846,.773692,.99962,-.0122368,.0188452,.799534,.999823,-.0110325,.0178001,.825046,.999599,-.0114923,.0174221,.849075,.999619,-.0105923,.0164345,.872999,.999613,-.0105988,.0158227,.895371,.99964,-.00979861,.0148131,.917364,.99977,-.00967238,.0140721,.938002,.999726,-.00869175,.0129543,.957917,.99973,-.00866872,.0122329,.976557,.999773,-.00731956,.0108958,.994459,.999811,-.00756027,.0102715,1.01118,.999862,-.00583732,.00878781,1.02701,.999835,-.00631438,.00827529,1.04186,.999871,-.00450785,.00674583,1.05569,.999867,-.00486079,.00621041,1.06861,.999939,-.00322072,.00478301,1.08064,.999918,-.00318199,.00406395,1.09181,1.00003,-.00193348,.00280682,1.10207,.999928,-.00153729,.00198741,1.11152,.999933,-623666e-9,917714e-9,1.12009,1,-102387e-11,9.07581e-7,1.12813,.997866,-8.96716e-7,.0448334,199584e-10,.997987,-225945e-10,.0448389,502891e-9,.997987,-903781e-10,.0448388,.00201156,.997985,-203351e-9,.0448388,.00452602,.997986,-361514e-9,.0448388,.00804629,.997987,-56487e-8,.0448389,.0125724,.997988,-813423e-9,.0448389,.0181045,.997984,-.00110718,.0448387,.0246427,.997985,-.00144616,.0448388,.0321875,.997987,-.00183038,.044839,.0407392,.997983,-.00225987,.0448387,.0502986,.997991,-.00273467,.0448389,.0608667,.997984,-.00325481,.0448384,.0724444,.998002,-.00382043,.044839,.0850348,.997997,-.00443145,.0448396,.0986372,.998007,-.00508796,.0448397,.113255,.998008,-.00578985,.04484,.128891,.998003,-.00653683,.0448384,.145548,.997983,-.00732713,.0448358,.163221,.997985,-.00815454,.0448358,.181899,.998005,-.00898985,.0448286,.201533,.998026,-.00964404,.0447934,.221821,.998055,-.00922677,.044611,.241282,.99804,-.0117361,.0448245,.261791,.998048,-.0127628,.0448159,.285181,.998088,-.0138055,.0447996,.30954,.998058,-.0148206,.0447669,.334751,.998099,-.0156998,.044697,.36061,.998116,-.0161976,.0445122,.386603,.998195,-.015945,.0441711,.411844,.998168,-.0183947,.0444255,.43773,.998184,-.0197913,.0443809,.466009,.998251,-.0201426,.0440689,.494574,.998305,-.0198847,.0435632,.522405,.998273,-.0210577,.043414,.549967,.998254,-.0227901,.0433943,.578655,.998349,-.0223108,.0426529,.60758,.99843,-.0223088,.042,.635524,.998373,-.0241141,.0418987,.663621,.998425,-.0231446,.0408118,.691906,.998504,-.0233684,.0400565,.719339,.998443,-.0241652,.0394634,.74643,.99848,-.0228715,.0380002,.773086,.998569,-.023519,.0372322,.798988,.998619,-.0223108,.0356468,.824249,.998594,-.0223105,.034523,.848808,.998622,-.0213426,.0328887,.87227,.998669,-.0207912,.0314374,.895157,.998705,-.0198416,.0296925,.916769,.998786,-.0189168,.0279634,.937773,.998888,-.0178811,.0261597,.957431,.99906,-.0166845,.0242159,.976495,.999038,-.0155464,.0222638,.994169,.999237,-.0141349,.0201967,1.01112,.999378,-.0129324,.0181744,1.02692,.999433,-.0113192,.0159898,1.04174,.999439,-.0101244,.0140385,1.05559,.999614,-.00837456,.0117826,1.06852,.999722,-.00721769,.00983745,1.08069,.999817,-.00554067,.00769002,1.09176,.99983,-.00426961,.005782,1.10211,.999964,-.00273904,.00374503,1.11152,1.00001,-.00136739,.00187176,1.12031,.999946,393227e-10,-28919e-9,1.12804,.995847,-13435e-10,.0671785,19916e-9,.995464,-338387e-10,.0671527,501622e-9,.99547,-135355e-9,.0671531,.00200649,.995471,-30455e-8,.0671532,.00451461,.99547,-541423e-9,.0671531,.008026,.995471,-84598e-8,.0671531,.0125407,.99547,-.00121823,.0671531,.0180589,.99547,-.00165817,.0671531,.0245806,.995463,-.00216583,.0671526,.0321062,.995468,-.00274127,.0671527,.0406366,.995474,-.00338447,.0671534,.0501717,.995473,-.00409554,.0671533,.0607131,.995478,-.00487451,.0671531,.0722618,.995476,-.00572148,.0671532,.0848191,.995477,-.00663658,.0671539,.0983882,.995498,-.00761986,.0671541,.112972,.995509,-.00867094,.0671542,.128568,.995509,-.00978951,.0671531,.145183,.995503,-.0109725,.0671491,.162808,.995501,-.012211,.0671465,.181441,.99553,-.0134565,.0671371,.201015,.99555,-.014391,.0670831,.221206,.99558,-.014351,.0668883,.240813,.995577,-.0173997,.0671055,.261257,.995602,-.0191111,.0671178,.284467,.995623,-.0206705,.0670946,.308765,.995658,-.022184,.0670472,.333905,.995705,-.0234832,.0669417,.359677,.995719,-.0241933,.0666714,.385554,.995786,-.0243539,.066266,.410951,.995887,-.0271866,.0664367,.437163,.995944,-.0296012,.0664931,.464842,.996004,-.0301045,.0660105,.49332,.996128,-.0298311,.0652694,.521131,.996253,-.0316426,.0650739,.549167,.996244,-.0339043,.0649433,.57737,.996309,-.033329,.0638926,.606073,.996417,-.0338935,.0630849,.634527,.996372,-.0353104,.0625083,.66256,.996542,-.0348942,.0611986,.690516,.996568,-.0351614,.060069,.718317,.996711,-.0354317,.0588522,.74528,.996671,-.0349513,.0571902,.772061,.996865,-.0345622,.0555321,.798089,.996802,-.0342566,.0537816,.823178,.996992,-.0330862,.0516095,.847949,.996944,-.0324666,.0495537,.871431,.997146,-.0309544,.0470302,.894357,.997189,-.0299372,.0446043,.916142,.997471,-.0281389,.0418812,.937193,.997515,-.0268702,.0391823,.957,.997812,-.0247166,.0361338,.975936,.998027,-.0233525,.0333945,.99391,.998233,-.0209839,.0301917,1.01075,.998481,-.0194309,.027271,1.02669,.998859,-.0169728,.0240162,1.04173,.99894,-.0152322,.0210517,1.05551,.999132,-.0127497,.0178632,1.06856,.999369,-.0108282,.014787,1.08054,.999549,-.00845886,.0116185,1.09185,.999805,-.0063937,.00867209,1.10207,.99985,-.00414582,.00566823,1.1117,.999912,-.00207443,.00277562,1.12022,1.00001,870226e-10,-53766e-9,1.12832,.991943,-178672e-11,.0893382,198384e-10,.991952,-450183e-10,.089339,499849e-9,.991956,-180074e-9,.0893394,.0019994,.991955,-405167e-9,.0893393,.00449867,.991953,-720298e-9,.0893391,.00799764,.991955,-.00112548,.0893393,.0124964,.991957,-.0016207,.0893395,.0179951,.991958,-.00220601,.0893396,.0244939,.991947,-.00288137,.0893385,.0319929,.991962,-.00364693,.0893399,.0404933,.991965,-.00450264,.0893399,.049995,.99198,-.00544862,.0893411,.0604995,.99197,-.00648491,.0893397,.0720074,.991976,-.00761164,.089341,.0845207,.99198,-.00882891,.0893405,.0980413,.991982,-.0101367,.0893396,.112571,.992008,-.011535,.0893415,.128115,.992026,-.0130228,.0893414,.144672,.992064,-.0145966,.0893418,.162241,.992041,-.0162421,.0893359,.180801,.992086,-.0178888,.0893214,.200302,.992157,-.0190368,.0892401,.220332,.992181,-.0195584,.0890525,.240144,.992175,-.0227257,.0892153,.260728,.99221,-.0254195,.089304,.283473,.99222,-.0274883,.0892703,.307673,.992317,-.0294905,.0892027,.332729,.992374,-.0311861,.0890577,.358387,.992505,-.0320656,.0886994,.384102,.992568,-.0329715,.0883198,.409767,.992675,-.036006,.0883602,.436145,.992746,-.0392897,.0884591,.463217,.992873,-.0399337,.0878287,.491557,.992934,-.040231,.0870108,.519516,.993091,-.0422013,.0865857,.547741,.993259,-.0443503,.0861937,.575792,.993455,-.0446368,.0851187,.604233,.993497,-.0454299,.0840576,.632925,.993694,-.0463296,.0829671,.660985,.993718,-.0470619,.0817185,.688714,.993973,-.0468838,.0800294,.716743,.994207,-.046705,.0781286,.74377,.994168,-.0469698,.0763337,.77042,.9945,-.0456816,.0738184,.796659,.994356,-.0455518,.0715545,.821868,.994747,-.0439488,.0686085,.846572,.994937,-.0430056,.065869,.870435,.995142,-.0413414,.0626446,.893272,.995451,-.0396521,.05929,.915376,.995445,-.0378453,.0558503,.936196,.995967,-.0355219,.0520949,.956376,.996094,-.0335146,.048377,.975327,.996622,-.030682,.0442575,.993471,.996938,-.0285504,.0404693,1.01052,.997383,-.0253399,.0360903,1.02637,.997714,-.0231651,.0322176,1.04139,.998249,-.0198138,.0278433,1.05542,.998596,-.0174337,.0238759,1.06846,.998946,-.0141349,.0195944,1.08056,.99928,-.0115603,.0156279,1.09181,.999507,-.00839065,.0114607,1.10213,.999697,-.005666,.00763325,1.11169,.999869,-.00269902,.00364946,1.12042,1.00001,623836e-10,-319288e-10,1.12832,.987221,-222675e-11,.111332,197456e-10,.98739,-561116e-10,.111351,497563e-9,.987448,-224453e-9,.111357,.00199031,.987441,-505019e-9,.111357,.0044782,.987442,-897816e-9,.111357,.00796129,.987442,-.00140284,.111357,.0124396,.987444,-.00202012,.111357,.0179132,.987442,-.00274964,.111357,.0243824,.987446,-.00359147,.111357,.0318474,.987435,-.00454562,.111356,.0403086,.987461,-.00561225,.111358,.0497678,.987458,-.00679125,.111358,.0602239,.987443,-.0080828,.111356,.0716792,.987476,-.0094872,.111358,.0841364,.98749,-.0110044,.111361,.097597,.987508,-.0126344,.111362,.112062,.987494,-.0143767,.111357,.127533,.987526,-.0162307,.111359,.144015,.987558,-.0181912,.111361,.161502,.987602,-.0202393,.111355,.179979,.987692,-.022273,.111346,.199386,.987702,-.0235306,.111215,.219183,.987789,-.0247628,.111061,.239202,.987776,-.0280668,.111171,.259957,.987856,-.0316751,.111327,.282198,.987912,-.0342468,.111282,.306294,.988,-.0367205,.111198,.331219,.988055,-.0387766,.110994,.356708,.988241,-.0397722,.110547,.382234,.988399,-.0416076,.110198,.408227,.988539,-.0448192,.110137,.434662,.988661,-.0483793,.110143,.461442,.988967,-.0495895,.109453,.489318,.989073,-.0506797,.108628,.517516,.989274,-.0526953,.108003,.545844,.989528,-.054578,.107255,.573823,.989709,-.0561503,.106294,.601944,.989991,-.056866,.104896,.630855,.990392,-.0572914,.103336,.658925,.990374,-.0586224,.10189,.686661,.990747,-.0584764,.099783,.714548,.991041,-.0582662,.0974309,.74186,.991236,-.0584118,.0951678,.768422,.991585,-.0573055,.0921581,.794817,.991984,-.0564241,.0891167,.820336,.9921,-.0553608,.085805,.84493,.992749,-.0533816,.0820354,.868961,.99288,-.0518661,.0782181,.891931,.993511,-.0492492,.0738935,.914186,.993617,-.0471956,.0696402,.93532,.99411,-.044216,.0649659,.95543,.994595,-.0416654,.0603177,.974685,.994976,-.0384314,.0553493,.992807,.995579,-.0353491,.0503942,1.00996,.996069,-.0319787,.0452123,1.02606,.996718,-.028472,.0400112,1.04114,.997173,-.0250789,.0349456,1.05517,.997818,-.0213326,.029653,1.0683,.998318,-.0178509,.024549,1.0805,.998853,-.0141118,.0194197,1.09177,.999218,-.0105914,.0143869,1.1022,.999594,-.00693474,.00943517,1.11175,.99975,-.00340478,.00464051,1.12056,1.00001,109172e-9,-112821e-9,1.12853,.983383,-266524e-11,.133358,196534e-10,.981942,-671009e-10,.133162,494804e-9,.981946,-268405e-9,.133163,.00197923,.981944,-603912e-9,.133163,.00445326,.981941,-.00107362,.133162,.00791693,.981946,-.00167755,.133163,.0123703,.981944,-.00241569,.133162,.0178135,.981945,-.00328807,.133163,.0242466,.981945,-.00429472,.133162,.03167,.981955,-.00543573,.133164,.0400846,.981951,-.00671105,.133163,.0494901,.981968,-.00812092,.133165,.0598886,.981979,-.00966541,.133166,.0712811,.981996,-.0113446,.133168,.083669,.982014,-.0131585,.133169,.0970533,.982011,-.0151073,.133167,.111438,.982062,-.0171906,.133172,.126826,.9821,-.0194067,.133175,.143215,.982149,-.0217502,.133176,.160609,.982163,-.0241945,.133173,.178981,.982247,-.0265907,.133148,.198249,.982291,-.027916,.132974,.217795,.982396,-.0299663,.132868,.238042,.982456,-.0334544,.132934,.258901,.982499,-.0378636,.133137,.280639,.982617,-.0409274,.133085,.304604,.98274,-.0438523,.132985,.329376,.982944,-.0462288,.132728,.354697,.98308,-.0475995,.132228,.380102,.983391,-.0501901,.131924,.406256,.983514,-.0535899,.131737,.432735,.98373,-.0571858,.131567,.459359,.984056,-.0592353,.130932,.486637,.984234,-.0610488,.130092,.51509,.984748,-.0630758,.12923,.543461,.985073,-.0647398,.128174,.571376,.985195,-.0671941,.127133,.599414,.985734,-.0681345,.125576,.628134,.986241,-.0686089,.123639,.656399,.986356,-.0698511,.121834,.684258,.986894,-.0700931,.119454,.711818,.987382,-.0698321,.116718,.739511,.988109,-.0693975,.113699,.766267,.988363,-.0689584,.110454,.792456,.989112,-.0672353,.106602,.81813,.989241,-.0662034,.10267,.842889,.990333,-.0638938,.0981381,.867204,.990591,-.0618534,.0935388,.89038,.991106,-.0593117,.088553,.912576,.991919,-.0562676,.0832187,.934118,.992111,-.0534085,.0778302,.954254,.992997,-.0495459,.0720453,.973722,.993317,-.0463707,.0663458,.991949,.994133,-.0421245,.0601883,1.00936,.994705,-.0384977,.0542501,1.02559,.995495,-.0340956,.0479862,1.04083,.996206,-.030105,.041887,1.05497,.996971,-.0256095,.0355355,1.06824,.997796,-.0213932,.0293655,1.08056,.998272,-.0169612,.0232926,1.09182,.998857,-.0126756,.0172786,1.10219,.99939,-.00832486,.0113156,1.11192,.999752,-.00410826,.00557892,1.12075,1,150957e-9,-119101e-9,1.12885,.975169,-309397e-11,.154669,195073e-10,.975439,-779608e-10,.154712,491534e-9,.975464,-311847e-9,.154716,.00196617,.975464,-701656e-9,.154716,.00442387,.975462,-.0012474,.154715,.0078647,.975461,-.00194906,.154715,.0122886,.975464,-.00280667,.154715,.0176959,.975468,-.00382025,.154716,.0240867,.975471,-.00498985,.154716,.0314612,.975472,-.00631541,.154717,.0398199,.975486,-.00779719,.154718,.0491639,.975489,-.00943505,.154718,.0594932,.975509,-.0112295,.154721,.0708113,.97554,-.0131802,.154724,.0831176,.975557,-.0152876,.154726,.096415,.975585,-.0175512,.154728,.110705,.975605,-.0199713,.154729,.125992,.975645,-.0225447,.154729,.142272,.975711,-.0252649,.154735,.159549,.975788,-.0280986,.154736,.177805,.975872,-.0308232,.154704,.196911,.975968,-.0324841,.154525,.216324,.976063,-.0351281,.154432,.236628,.976157,-.0388618,.15446,.257539,.976204,-.0437704,.154665,.278975,.976358,-.047514,.154652,.302606,.976571,-.0508638,.154535,.327204,.976725,-.0534995,.154221,.352276,.977013,-.0555547,.153737,.377696,.977294,-.0586728,.153403,.403855,.977602,-.0622715,.15312,.430333,.977932,-.0658166,.152755,.456855,.978241,-.0689877,.152233,.483668,.978602,-.0712805,.15132,.512097,.979234,-.0732775,.150235,.540455,.97977,-.075163,.148978,.568486,.979995,-.0778026,.147755,.596524,.98078,-.0791854,.146019,.624825,.981628,-.0799666,.143906,.653403,.982067,-.0808532,.141561,.681445,.98271,-.0816024,.139025,.708918,.983734,-.0812511,.135764,.736594,.98431,-.0806201,.132152,.763576,.985071,-.0801605,.12846,.789797,.98618,-.0784208,.124084,.815804,.986886,-.0766643,.1193,.840869,.987485,-.0747744,.114236,.864952,.988431,-.0716701,.108654,.888431,.988886,-.0691609,.102994,.910963,.990024,-.0654048,.0967278,.932629,.990401,-.0619765,.090384,.95313,.991093,-.0579296,.0837885,.972587,.992018,-.0536576,.0770171,.991184,.992536,-.0493719,.0701486,1.00863,.993421,-.0444813,.062953,1.02494,.993928,-.040008,.0560455,1.04017,.994994,-.0347982,.04856,1.05463,.995866,-.0301017,.0416152,1.06807,.996916,-.0248225,.0342597,1.08039,.997766,-.0199229,.0271668,1.09177,.998479,-.0147422,.0201387,1.10235,.99921,-.00980173,.0131944,1.11206,.999652,-.0047426,.00640712,1.12104,.999998,891673e-10,-10379e-8,1.12906,.967868,-351885e-11,.175947,193569e-10,.968001,-886733e-10,.175972,487782e-9,.96801,-354697e-9,.175973,.00195115,.968012,-798063e-9,.175974,.00439006,.968011,-.00141879,.175973,.00780461,.968011,-.00221686,.175973,.0121948,.968016,-.00319231,.175974,.0175607,.968019,-.00434515,.175974,.0239027,.968018,-.00567538,.175974,.0312208,.968033,-.00718308,.175977,.0395158,.968049,-.00886836,.175979,.0487885,.968047,-.0107312,.175978,.0590394,.968072,-.0127719,.175981,.0702705,.968108,-.0149905,.175986,.0824836,.968112,-.0173866,.175985,.0956783,.968173,-.0199611,.175993,.109862,.96827,-.0227128,.176008,.125033,.968292,-.025639,.17601,.141193,.968339,-.0287299,.176007,.158336,.968389,-.0319399,.176001,.176441,.968501,-.034941,.175962,.195359,.968646,-.0370812,.175793,.214686,.968789,-.0402329,.175708,.234973,.96886,-.0442601,.1757,.255871,.969013,-.049398,.175876,.277238,.969242,-.0539932,.17594,.300326,.969419,-.0577299,.175781,.324702,.969763,-.0605643,.175432,.349527,.970093,-.0634488,.174992,.374976,.970361,-.0670589,.174611,.401097,.970825,-.0708246,.174226,.427496,.971214,-.0742871,.173684,.453858,.971622,-.0782608,.173186,.480637,.972175,-.0813151,.172288,.508655,.972944,-.0832678,.170979,.536973,.973595,-.0855964,.169573,.565138,.974345,-.0882163,.168152,.593222,.975233,-.0901671,.166314,.621201,.976239,-.0912111,.163931,.649919,.977289,-.0916959,.161106,.678011,.978076,-.0927061,.158272,.705717,.979533,-.0925562,.15475,.733228,.980335,-.0918159,.150638,.760454,.981808,-.0908508,.146201,.786918,.983061,-.0896172,.141386,.812953,.984148,-.0871588,.135837,.838281,.985047,-.0850624,.130135,.862594,.986219,-.0818541,.123882,.88633,.987043,-.0784523,.117126,.908952,.988107,-.0749601,.110341,.930744,.988955,-.0703548,.102885,.951728,.989426,-.0662798,.0954167,.971166,.990421,-.0610834,.0876331,.989984,.991032,-.0562936,.0797785,1.00765,.992041,-.0508154,.0718166,1.02434,.992794,-.0454045,.0637125,1.03976,.993691,-.0398194,.0555338,1.05418,.994778,-.0341482,.0473388,1.06772,.995915,-.028428,.0391016,1.08028,.997109,-.022642,.0309953,1.09185,.998095,-.0168738,.0230288,1.10247,.998985,-.0111274,.0150722,1.11229,.999581,-.00543881,.00740605,1.12131,1.00003,162239e-9,-105549e-9,1.12946,.959505,-393734e-11,.196876,191893e-10,.959599,-992157e-10,.196895,483544e-9,.959641,-396868e-9,.196903,.0019342,.959599,-892948e-9,.196895,.00435193,.959603,-.00158747,.196896,.0077368,.959604,-.00248042,.196896,.0120888,.959605,-.00357184,.196896,.0174082,.959605,-.00486169,.196896,.0236949,.959613,-.00635008,.196897,.0309497,.959619,-.00803696,.196898,.0391725,.959636,-.00992255,.196901,.0483649,.959634,-.0120067,.1969,.0585266,.959675,-.0142898,.196906,.0696609,.959712,-.0167717,.196911,.0817678,.959752,-.0194524,.196918,.0948494,.959807,-.0223321,.196925,.10891,.959828,-.0254091,.196924,.123947,.959906,-.0286815,.196934,.139968,.960005,-.0321371,.196944,.156968,.960071,-.0357114,.196936,.17491,.960237,-.0389064,.196882,.193597,.960367,-.041623,.196731,.21285,.960562,-.0452655,.196654,.233075,.960735,-.0496207,.196643,.253941,.960913,-.0549379,.196774,.275278,.961121,-.0603414,.196893,.297733,.96139,-.0644244,.196717,.321877,.961818,-.067556,.196314,.346476,.962175,-.0712709,.195917,.371907,.96255,-.0752848,.1955,.397916,.963164,-.0792073,.195026,.424229,.963782,-.0828225,.194424,.450637,.964306,-.0873119,.193831,.477288,.964923,-.0911051,.192973,.504716,.966048,-.093251,.19151,.533053,.967024,-.0958983,.190013,.561366,.968038,-.09835,.188253,.589464,.969152,-.100754,.186257,.617433,.970557,-.102239,.183775,.645801,.972104,-.102767,.180645,.674278,.973203,-.103492,.177242,.702004,.975123,-.103793,.17345,.729529,.97641,-.102839,.168886,.756712,.978313,-.101687,.163892,.783801,.980036,-.100314,.158439,.809671,.981339,-.097836,.152211,.835402,.982794,-.0950006,.145679,.860081,.984123,-.0920994,.138949,.883757,.984918,-.0878641,.131283,.90685,.985999,-.083939,.123464,.928786,.987151,-.0791234,.115324,.94983,.987827,-.0739332,.106854,.96962,.988806,-.0688088,.0982691,.98861,.989588,-.0628962,.0893456,1.00667,.990438,-.0573146,.0805392,1.02344,.991506,-.0509433,.0713725,1.03933,.992492,-.0448724,.0623732,1.05378,.993663,-.0383497,.0530838,1.06747,.994956,-.0319593,.0439512,1.08007,.99634,-.025401,.0347803,1.09182,.99761,-.0189687,.0257954,1.1025,.99863,-.0124441,.0169893,1.11247,.99947,-.00614003,.00829498,1.12151,1.00008,216624e-9,-146107e-9,1.12993,.950129,-434955e-11,.217413,190081e-10,.950264,-10957e-8,.217444,47884e-8,.9503,-438299e-9,.217451,.00191543,.950246,-986124e-9,.21744,.00430951,.950246,-.00175311,.21744,.00766137,.950245,-.00273923,.21744,.011971,.950253,-.00394453,.217441,.0172385,.950258,-.00536897,.217442,.0234641,.950267,-.00701262,.217444,.030648,.950277,-.00887551,.217446,.038791,.950284,-.0109576,.217446,.0478931,.950312,-.0132591,.217451,.0579568,.950334,-.01578,.217454,.0689821,.950378,-.0185204,.217462,.0809714,.950417,-.0214803,.217467,.0939265,.950488,-.0246594,.217479,.10785,.950534,-.0280565,.217483,.122743,.950633,-.0316685,.217498,.138611,.950698,-.0354787,.217499,.155442,.950844,-.0394003,.217507,.173208,.950999,-.0426812,.217419,.191605,.951221,-.0461302,.217317,.21084,.951412,-.0502131,.217238,.230945,.951623,-.0549183,.21722,.251745,.951867,-.0604493,.217306,.273001,.952069,-.0665189,.217466,.294874,.952459,-.0709179,.217266,.318732,.952996,-.0746112,.216891,.34318,.953425,-.0789252,.216503,.36849,.953885,-.0833293,.216042,.394373,.954617,-.087371,.215469,.420505,.955429,-.0914054,.214802,.446907,.956068,-.0961671,.214146,.473522,.957094,-.10048,.213286,.50052,.958372,-.103248,.211796,.528715,.959654,-.106033,.21016,.557065,.961305,-.108384,.208149,.585286,.962785,-.111122,.206024,.613334,.964848,-.112981,.203442,.641334,.966498,-.113717,.19996,.669955,.968678,-.114121,.196105,.698094,.970489,-.114524,.191906,.725643,.972903,-.113792,.186963,.752856,.974701,-.112406,.181343,.780013,.976718,-.110685,.175185,.806268,.978905,-.108468,.168535,.832073,.980267,-.105061,.161106,.857149,.981967,-.101675,.153387,.881145,.983063,-.0974492,.145199,.904255,.984432,-.0925815,.136527,.926686,.985734,-.0877983,.127584,.947901,.986228,-.081884,.118125,.968111,.98719,-.0761208,.108594,.98719,.988228,-.0698196,.0989996,1.00559,.989046,-.0632739,.0890074,1.02246,.990242,-.056522,.0790832,1.03841,.991252,-.0495272,.0689182,1.05347,.992542,-.0425373,.0588592,1.06724,.994096,-.0353198,.0486833,1.08009,.995593,-.028235,.0385977,1.09177,.99711,-.0209511,.0286457,1.10274,.998263,-.0139289,.0188497,1.11262,.999254,-.0067359,.009208,1.12191,.999967,141846e-9,-657764e-10,1.13024,.935608,-474692e-11,.236466,187817e-10,.93996,-11971e-8,.237568,473646e-9,.939959,-478845e-9,.237567,.0018946,.939954,-.0010774,.237566,.00426284,.939956,-.00191538,.237566,.00757842,.939954,-.00299277,.237566,.0118413,.93996,-.00430961,.237567,.0170518,.939969,-.00586589,.237569,.02321,.939982,-.00766166,.237572,.0303164,.939987,-.00969686,.237572,.0383711,.939997,-.0119715,.237574,.0473751,.940031,-.0144858,.237581,.0573298,.940073,-.0172399,.237589,.0682366,.94012,-.0202335,.237598,.080097,.940162,-.0234663,.237604,.0929116,.940237,-.0269387,.237615,.106686,.940328,-.0306489,.237632,.121421,.940419,-.0345917,.237645,.137115,.940522,-.0387481,.237654,.153766,.940702,-.0429906,.237661,.17133,.940871,-.0465089,.237561,.189502,.941103,-.050531,.23748,.208616,.941369,-.0550657,.237423,.228595,.941641,-.0601337,.237399,.249287,.941903,-.0658804,.237443,.270467,.942224,-.0722674,.237597,.292024,.942633,-.0771788,.237419,.315272,.943172,-.0815623,.237068,.339579,.943691,-.0863973,.236682,.364717,.944382,-.0911536,.236213,.390435,.945392,-.0952967,.235562,.416425,.946185,-.0998948,.234832,.442772,.947212,-.104796,.234114,.469347,.948778,-.10928,.233222,.496162,.950149,-.113081,.231845,.523978,.951989,-.115893,.230005,.552295,.953921,-.11846,.227862,.580569,.955624,-.12115,.225439,.608698,.958234,-.123373,.222635,.636696,.960593,-.124519,.219093,.665208,.963201,-.124736,.214749,.693557,.965642,-.125012,.210059,.721334,.968765,-.124661,.204935,.748613,.971753,-.122996,.198661,.776224,.973751,-.120998,.191823,.802461,.976709,-.118583,.184359,.828399,.977956,-.115102,.176437,.853693,.979672,-.111077,.167681,.877962,.981816,-.10688,.158872,.901564,.98238,-.101469,.149398,.924057,.983964,-.0960013,.139436,.945751,.984933,-.0899626,.12943,.966272,.985694,-.0832973,.11894,.985741,.986822,-.0767082,.108349,1.00407,.987725,-.0693614,.0976026,1.02154,.98877,-.06211,.086652,1.03757,.990129,-.0544143,.0756182,1.05296,.991337,-.046744,.0645753,1.06683,.992978,-.0387931,.0534683,1.0798,.994676,-.030973,.0424137,1.09181,.99645,-.0230311,.0314035,1.10286,.997967,-.0152065,.0206869,1.11291,.99922,-.00744837,.010155,1.12237,1.00002,240209e-9,-752767e-10,1.13089,.922948,-515351e-11,.255626,186069e-10,.928785,-129623e-9,.257244,468009e-9,.928761,-51849e-8,.257237,.00187202,.928751,-.0011666,.257235,.00421204,.928751,-.00207395,.257234,.0074881,.928754,-.00324055,.257235,.0117002,.92876,-.00466639,.257236,.0168486,.928763,-.00635149,.257237,.0229334,.928774,-.00829584,.257239,.029955,.928791,-.0104995,.257243,.0379139,.928804,-.0129623,.257245,.0468108,.928847,-.0156846,.257255,.0566473,.92889,-.0186661,.257263,.0674246,.928924,-.0219067,.257268,.0791433,.928989,-.0254066,.257282,.0918076,.92909,-.0291651,.257301,.105419,.92918,-.0331801,.257316,.119978,.92929,-.0374469,.257332,.135491,.929453,-.041939,.257357,.151948,.929586,-.0464612,.257347,.169275,.929858,-.0503426,.257269,.187257,.930125,-.0548409,.257199,.206204,.930403,-.0598063,.257149,.22601,.930726,-.0652437,.257122,.246561,.931098,-.0712376,.257153,.267618,.931396,-.0777506,.257237,.288993,.931947,-.0832374,.257124,.311527,.932579,-.0883955,.25683,.335697,.933194,-.0937037,.256444,.360634,.934013,-.0987292,.255939,.386126,.935307,-.103215,.255282,.412018,.936374,-.108234,.254538,.438292,.93776,-.113234,.253728,.464805,.939599,-.118013,.25275,.491464,.941036,-.122661,.251404,.518751,.94337,-.125477,.249435,.547133,.945318,-.128374,.247113,.575456,.947995,-.130996,.244441,.60372,.950818,-.133438,.241352,.63174,.954378,-.135004,.237849,.659971,.957151,-.135313,.233188,.688478,.960743,-.13521,.228001,.716767,.964352,-.135007,.222249,.744349,.967273,-.133523,.21542,.771786,.969767,-.131155,.208039,.798639,.973195,-.128492,.200076,.824774,.975557,-.125094,.191451,.850222,.977692,-.120578,.18184,.874761,.98026,-.115882,.172102,.898497,.981394,-.110372,.161859,.921636,.982386,-.10415,.15108,.943467,.983783,-.0978128,.140407,.964045,.98422,-.0906171,.129058,.98398,.985447,-.0832921,.117614,1.00276,.986682,-.0754412,.10585,1.02047,.987326,-.0673885,.0940943,1.03678,.988707,-.0592565,.0822093,1.05218,.990185,-.050717,.070192,1.06652,.991866,-.0423486,.0582081,1.07965,.993897,-.0336118,.0460985,1.09188,.995841,-.0252178,.0342737,1.10307,.997605,-.0164893,.0224829,1.11324,.999037,-.00817112,.0110647,1.12262,1.00003,291686e-9,-168673e-9,1.13139,.915304,-552675e-11,.275999,183285e-10,.91668,-139285e-9,.276414,461914e-9,.916664,-55713e-8,.276409,.00184763,.916653,-.00125354,.276406,.00415715,.916651,-.00222851,.276405,.00739053,.916655,-.00348205,.276406,.0115478,.916653,-.00501414,.276405,.0166291,.916667,-.00682478,.276409,.0226346,.91668,-.00891398,.276412,.0295648,.91669,-.0112817,.276413,.0374199,.916727,-.013928,.276422,.0462016,.916759,-.0168528,.276429,.0559101,.916793,-.0200558,.276436,.0665466,.916849,-.0235373,.276448,.0781139,.916964,-.0272973,.276474,.0906156,.917047,-.0313344,.276491,.104051,.917152,-.0356465,.276511,.118424,.917286,-.0402271,.276533,.133736,.917469,-.0450408,.276564,.149978,.917686,-.0497872,.276563,.167057,.917953,-.0540937,.276493,.184846,.918228,-.0590709,.276437,.203614,.918572,-.0644277,.276398,.223212,.918918,-.0702326,.276362,.243584,.919356,-.076484,.276383,.264465,.919842,-.0830808,.276434,.285701,.920451,-.0892972,.276407,.307559,.921113,-.095016,.276128,.331501,.921881,-.100771,.275754,.356207,.923027,-.106029,.275254,.381477,.924364,-.111029,.274595,.40722,.925818,-.116345,.273841,.433385,.92746,-.121424,.272913,.459848,.929167,-.12657,.271837,.486493,.931426,-.131581,.270575,.513432,.934001,-.135038,.268512,.541502,.936296,-.138039,.266135,.569658,.939985,-.140687,.263271,.598375,.943516,-.143247,.260058,.626563,.94782,-.145135,.256138,.654711,.951023,-.145733,.251154,.683285,.955338,-.145554,.245562,.711831,.959629,-.145008,.239265,.739573,.963123,-.144003,.232064,.767027,.966742,-.141289,.224036,.794359,.969991,-.138247,.215305,.820361,.973403,-.134786,.206051,.846548,.975317,-.129966,.195914,.871541,.977647,-.12471,.185184,.895313,.980137,-.119086,.174161,.918398,.981031,-.112297,.162792,.940679,.982037,-.105372,.150952,.961991,.983164,-.097821,.138921,.981913,.983757,-.0897245,.126611,1.00109,.985036,-.0815974,.114228,1.01902,.986289,-.0727725,.101389,1.03604,.987329,-.0639323,.0886476,1.05149,.989193,-.0548109,.0756837,1.06619,.990716,-.045687,.0627581,1.07948,.992769,-.0364315,.0498337,1.09172,.99524,-.0271761,.0370305,1.1033,.997154,-.0179609,.0243959,1.11353,.998845,-.00878063,.0119567,1.12319,1.00002,259038e-9,-108146e-9,1.13177,.903945,-591681e-11,.295126,181226e-10,.903668,-148672e-9,.295037,455367e-9,.903677,-594683e-9,.29504,.00182145,.903673,-.00133805,.295039,.00409831,.903666,-.00237872,.295036,.00728584,.903668,-.00371676,.295037,.0113842,.903679,-.00535212,.29504,.0163936,.903684,-.00728479,.295041,.0223141,.903698,-.00951473,.295044,.0291462,.903718,-.0120419,.295049,.0368904,.903754,-.0148664,.295058,.0455477,.903801,-.017988,.29507,.0551194,.903851,-.0214064,.295082,.0656058,.903921,-.0251219,.295097,.0770109,.904002,-.0291337,.295116,.0893354,.904111,-.033441,.29514,.102583,.904246,-.0380415,.295169,.116755,.904408,-.0429258,.295202,.131853,.904637,-.0480468,.295245,.147869,.904821,-.0529208,.295214,.164658,.905163,-.0577748,.295185,.182274,.905469,-.0631763,.295143,.200828,.905851,-.068917,.295112,.2202,.906322,-.0750861,.295104,.240372,.906761,-.0815855,.295086,.261082,.90735,-.0882138,.295095,.282123,.908087,-.095082,.295139,.303563,.908826,-.101488,.29492,.327028,.909832,-.107577,.294577,.351464,.911393,-.113033,.294115,.376497,.912804,-.118629,.293446,.402115,.914081,-.124232,.292581,.428111,.91637,-.129399,.29166,.454442,.91814,-.134892,.290422,.481024,.921179,-.140069,.289194,.507924,.924544,-.144431,.287421,.535557,.927995,-.147498,.284867,.563984,.931556,-.150197,.281722,.5923,.935777,-.152711,.278207,.620832,.940869,-.154836,.274148,.649069,.945994,-.155912,.269057,.677746,.949634,-.155641,.262799,.706293,.955032,-.154809,.256097,.734278,.95917,-.153678,.248618,.761751,.962931,-.151253,.239794,.789032,.966045,-.147625,.230281,.815422,.96971,-.143964,.220382,.841787,.972747,-.139464,.209846,.867446,.975545,-.133459,.198189,.892004,.978381,-.127424,.186362,.915458,.979935,-.120506,.173964,.937948,.980948,-.11282,.161429,.959732,.982234,-.104941,.148557,.980118,.982767,-.0962905,.135508,.999463,.983544,-.0873625,.122338,1.01756,.984965,-.0783447,.108669,1.03492,.986233,-.0684798,.0949911,1.05087,.987796,-.0590867,.0811386,1.0656,.989885,-.0489145,.0673099,1.0794,.991821,-.0391,.0535665,1.09174,.99448,-.029087,.0397529,1.10341,.996769,-.019114,.0261463,1.11383,.998641,-.00947007,.0128731,1.1237,.999978,446316e-9,-169093e-9,1.13253,.888362,-627064e-11,.312578,178215e-10,.889988,-157791e-9,.313148,448451e-9,.889825,-631076e-9,.313092,.00179356,.88984,-.00141994,.313097,.00403554,.889828,-.0025243,.313092,.00717429,.889831,-.00394421,.313093,.0112099,.889831,-.00567962,.313093,.0161425,.889844,-.00773051,.313096,.0219724,.889858,-.0100968,.3131,.0286999,.889882,-.0127786,.313106,.0363256,.889918,-.0157757,.313116,.0448509,.889967,-.0190878,.313129,.0542758,.89003,-.022715,.313145,.0646032,.890108,-.0266566,.313165,.0758339,.890218,-.0309131,.313193,.0879729,.890351,-.0354819,.313226,.101019,.89051,-.0403613,.313263,.114979,.890672,-.0455385,.313294,.129848,.890882,-.0509444,.313333,.145616,.891189,-.0559657,.313324,.162122,.891457,-.0613123,.313281,.179524,.891856,-.0671488,.313281,.197855,.892312,-.0732732,.313268,.216991,.892819,-.0797865,.313263,.236924,.893369,-.0865269,.313247,.257433,.894045,-.0931592,.313205,.278215,.894884,-.100532,.313276,.299467,.895832,-.107716,.313205,.322276,.897043,-.114099,.312873,.34642,.898515,-.119941,.312331,.371187,.900191,-.126044,.311731,.396656,.90188,-.131808,.310859,.422488,.904359,-.137289,.309857,.448744,.906923,-.142991,.308714,.475239,.910634,-.148253,.307465,.501983,.914502,-.153332,.305774,.529254,.919046,-.156646,.303156,.557709,.923194,-.159612,.299928,.586267,.928858,-.162027,.296245,.614925,.934464,-.164203,.291832,.643187,.939824,-.165602,.286565,.671601,.944582,-.165383,.280073,.700213,.949257,-.164439,.272891,.728432,.954389,-.162953,.264771,.756082,.958595,-.161007,.255927,.78369,.962138,-.157243,.245769,.810769,.966979,-.152872,.235127,.836999,.969566,-.148209,.22347,.862684,.972372,-.142211,.211147,.887847,.975916,-.135458,.198606,.911843,.978026,-.128398,.185498,.934795,.979686,-.120313,.17171,.956787,.980748,-.11166,.158159,.978046,.981622,-.103035,.144399,.997693,.982356,-.0930328,.13001,1.01642,.983308,-.0834627,.115778,1.03366,.985037,-.0732249,.101327,1.05014,.986493,-.0628145,.086554,1.06507,.988484,-.0526556,.0720413,1.07907,.991051,-.0415744,.0571151,1.09189,.993523,-.0314275,.0426643,1.10369,.99628,-.0203603,.0279325,1.11423,.998344,-.0102446,.0138182,1.12421,.999997,42612e-8,-193628e-9,1.1333,.871555,-660007e-11,.329176,174749e-10,.875255,-166579e-9,.330571,441051e-9,.875644,-666394e-9,.330718,.00176441,.875159,-.00149903,.330536,.00396899,.87516,-.00266493,.330536,.007056,.875158,-.00416393,.330535,.0110251,.87516,-.00599598,.330535,.0158764,.875163,-.00816108,.330536,.0216101,.875174,-.0106591,.330538,.0282266,.875199,-.0134899,.330545,.0357266,.875257,-.0166538,.330563,.0441117,.875304,-.0201501,.330575,.0533821,.875373,-.0239785,.330595,.0635395,.875464,-.0281389,.330619,.0745872,.875565,-.0326301,.330645,.0865255,.875691,-.0374516,.330676,.0993599,.875897,-.0425993,.330733,.113093,.876091,-.0480576,.330776,.127722,.876353,-.0537216,.330826,.143227,.876649,-.0589807,.330809,.159462,.877034,-.0647865,.330819,.176642,.877443,-.0709789,.330817,.194702,.877956,-.0774782,.330832,.213577,.878499,-.0843175,.330822,.233246,.879144,-.0912714,.330804,.253512,.879982,-.0980824,.330766,.274137,.88097,-.105823,.330864,.295209,.882051,-.113671,.330896,.317226,.883397,-.120303,.330545,.341068,.884987,-.12667,.330068,.365613,.886789,-.133118,.329418,.390807,.889311,-.139024,.328683,.416494,.891995,-.144971,.327729,.442618,.895106,-.150747,.326521,.469131,.899527,-.156283,.325229,.495921,.90504,-.161707,.32378,.523162,.909875,-.165661,.32122,.55092,.91561,-.168755,.317942,.579928,.921225,-.171193,.313983,.608539,.927308,-.17319,.309636,.636854,.933077,-.174819,.304262,.66523,.938766,-.175002,.297563,.693609,.943667,-.173946,.289613,.722157,.949033,-.172221,.281227,.750021,.953765,-.169869,.271545,.777466,.95804,-.166578,.261034,.804853,.962302,-.161761,.249434,.831569,.966544,-.156636,.237484,.857779,.969372,-.150784,.224395,.883051,.972486,-.143672,.210786,.907864,.975853,-.135772,.196556,.931223,.977975,-.127942,.182307,.954061,.979122,-.118347,.167607,.97531,.980719,-.109112,.152739,.995666,.981223,-.0991789,.137932,1.01475,.98216,-.0883553,.122692,1.03253,.983379,-.0780825,.107493,1.04917,.985434,-.0665646,.0917791,1.06464,.987332,-.0557714,.0764949,1.07896,.990004,-.0442805,.060721,1.09199,.992975,-.0331676,.0452284,1.10393,.995811,-.0219547,.0297934,1.11476,.9982,-.0107613,.0146415,1.12484,1.00002,248678e-9,-14555e-8,1.13413,.859519,-693595e-11,.347264,171673e-10,.859843,-17503e-8,.347394,433219e-9,.859656,-700076e-9,.347319,.00173277,.859671,-.00157517,.347325,.00389875,.859669,-.00280028,.347324,.00693112,.85967,-.0043754,.347324,.01083,.859665,-.00630049,.347321,.0155954,.859685,-.0085755,.347328,.0212278,.859694,-.0112003,.347329,.0277273,.859718,-.0141747,.347336,.0350946,.85976,-.0174988,.347348,.0433314,.85982,-.0211722,.347366,.0524384,.859892,-.0251941,.347387,.0624168,.860006,-.0295649,.347422,.0732708,.860122,-.0342825,.347453,.0849999,.860282,-.0393462,.347499,.0976102,.860482,-.0447513,.347554,.111104,.860719,-.0504775,.347614,.125479,.860998,-.0563577,.347666,.140703,.861322,-.0619473,.347662,.156681,.861724,-.0681277,.347684,.173597,.862198,-.0746567,.347709,.191371,.862733,-.0815234,.347727,.209976,.863371,-.0886643,.347744,.229351,.86414,-.0957908,.347734,.24934,.865138,-.102912,.34772,.269797,.866182,-.110924,.3478,.290654,.867436,-.119223,.347911,.312074,.869087,-.126197,.347649,.335438,.870859,-.133145,.347222,.359732,.872997,-.139869,.346645,.38467,.875939,-.146089,.345935,.41019,.879012,-.152334,.345012,.436218,.883353,-.15821,.343924,.462641,.888362,-.164097,.342636,.489449,.895026,-.169528,.341351,.516629,.900753,-.174408,.339115,.544109,.906814,-.17751,.335809,.572857,.912855,-.180101,.331597,.601554,.919438,-.182116,.32698,.630198,.925962,-.183494,.321449,.658404,.931734,-.184159,.314595,.686625,.93762,-.18304,.306462,.71531,.943858,-.181323,.297514,.744272,.948662,-.178683,.287447,.771462,.953299,-.175379,.276166,.798593,.957346,-.170395,.263758,.8256,.962565,-.165042,.251019,.852575,.966075,-.158655,.237011,.878316,.969048,-.151707,.222518,.90329,.972423,-.143271,.207848,.927745,.975833,-.134824,.192463,.950859,.977629,-.125444,.1768,.972947,.978995,-.114949,.161033,.993263,.980533,-.104936,.145523,1.01337,.980745,-.0935577,.129799,1.03128,.981814,-.0822956,.113486,1.04825,.983943,-.0710082,.0972925,1.06405,.986141,-.0587931,.0808138,1.0785,.988878,-.0472755,.0644915,1.09204,.992132,-.0349128,.0478128,1.10413,.9953,-.0232407,.031621,1.11527,.998117,-.0112713,.0154935,1.12551,1.00003,339743e-9,-195763e-9,1.13504,.845441,-729126e-11,.364305,169208e-10,.843588,-183164e-9,.363506,425067e-9,.843412,-73253e-8,.36343,.00169999,.843401,-.00164818,.363426,.00382495,.843399,-.00293008,.363425,.00679993,.843401,-.00457822,.363425,.010625,.843394,-.00659249,.363421,.0153002,.843398,-.00897282,.363421,.0208258,.843415,-.0117191,.363426,.0272024,.843438,-.0148312,.363432,.0344305,.843483,-.018309,.363447,.0425116,.84356,-.0221521,.363472,.0514471,.843646,-.0263597,.363499,.061238,.843743,-.0309315,.363527,.0718873,.84388,-.0358658,.363569,.0833969,.844079,-.0411624,.363631,.0957742,.844279,-.0468128,.363688,.109015,.844549,-.0527923,.363761,.123124,.844858,-.0588204,.363817,.138044,.84522,-.0647573,.36383,.153755,.845669,-.0713181,.363879,.170394,.846155,-.0781697,.363908,.187861,.846789,-.0853913,.363969,.206176,.847502,-.0928086,.363999,.225244,.8484,-.10005,.363997,.244926,.849461,-.107615,.364008,.265188,.850562,-.115814,.364055,.28587,.851962,-.124334,.364179,.306926,.854326,-.131995,.364233,.329605,.856295,-.139338,.363856,.35359,.858857,-.146346,.363347,.37831,.862428,-.152994,.362807,.403722,.866203,-.159463,.361963,.429537,.871629,-.165623,.36112,.456,.877365,-.171649,.359917,.482773,.883744,-.177151,.35848,.509705,.890693,-.182381,.356523,.537215,.897278,-.186076,.3533,.565493,.903958,-.188602,.349095,.594293,.910908,-.190755,.344215,.623165,.918117,-.192063,.338606,.651573,.924644,-.192758,.331544,.679869,.931054,-.192238,.323163,.708668,.937303,-.190035,.313529,.737201,.943387,-.187162,.303152,.764977,.948494,-.183876,.29146,.792683,.952546,-.178901,.277917,.819228,.958077,-.173173,.264753,.846559,.962462,-.16645,.25002,.872962,.966569,-.159452,.234873,.898729,.969108,-.15074,.218752,.923126,.973072,-.141523,.202673,.947278,.975452,-.132075,.186326,.969938,.977784,-.121257,.169396,.991325,.97899,-.110182,.153044,1.01123,.979777,-.0989634,.136485,1.0299,.980865,-.0865894,.119343,1.04727,.982432,-.0746115,.102452,1.06341,.984935,-.0621822,.0852423,1.07834,.987776,-.0495694,.0678546,1.092,.99103,-.0372386,.0506917,1.1043,.99474,-.0244353,.0333316,1.11576,.997768,-.0121448,.0164348,1.12617,1.00003,31774e-8,-169504e-9,1.13598,.825551,-756799e-11,.378425,165099e-10,.82664,-190922e-9,.378923,416504e-9,.826323,-763495e-9,.378779,.0016656,.826359,-.00171789,.378795,.00374768,.82636,-.00305402,.378795,.00666259,.826368,-.00477185,.378798,.0104104,.826364,-.00687131,.378795,.0149912,.826368,-.00935232,.378795,.0204054,.826376,-.0122146,.378797,.0266532,.826399,-.0154581,.378803,.0337355,.82646,-.0190825,.378824,.0416537,.826525,-.0230873,.378846,.0504091,.826614,-.0274719,.378876,.0600032,.82674,-.0322355,.378917,.0704393,.826888,-.0373766,.378964,.0817195,.827078,-.0428936,.379024,.0938492,.827318,-.0487778,.379099,.106828,.82764,-.0549935,.379199,.120659,.827926,-.0611058,.379227,.13526,.828325,-.0675054,.379275,.150713,.828801,-.0743455,.379332,.167034,.8294,-.0815523,.379415,.184209,.830094,-.0890779,.379495,.202203,.8309,-.096736,.379555,.220945,.831943,-.104135,.379577,.240306,.833037,-.112106,.379604,.260317,.834278,-.120554,.379668,.2808,.836192,-.129128,.3799,.301654,.838671,-.137541,.380109,.323502,.840939,-.14523,.379809,.347176,.844575,-.15248,.379593,.371706,.848379,-.159607,.37909,.39688,.853616,-.166267,.378617,.422702,.858921,-.172698,.377746,.448919,.865324,-.178823,.376749,.475661,.872207,-.184542,.375363,.502599,.880018,-.189836,.373657,.529914,.88694,-.194294,.370673,.557683,.894779,-.197022,.36662,.586848,.902242,-.199108,.36138,.615831,.909914,-.200398,.355434,.644478,.917088,-.20094,.348173,.672905,.923888,-.200671,.339482,.701327,.930495,-.198773,.32956,.730101,.937247,-.195394,.318363,.758383,.943108,-.191956,.306323,.786539,.948296,-.187227,.292576,.813637,.953472,-.181165,.278234,.840793,.958485,-.174119,.263054,.867712,.962714,-.166564,.246756,.893635,.966185,-.158181,.229945,.919028,.970146,-.148275,.212633,.943413,.973491,-.138157,.195229,.966627,.975741,-.127574,.178048,.988817,.977238,-.11554,.160312,1.00924,.978411,-.10364,.142857,1.02845,.979811,-.0913122,.125317,1.04648,.98116,-.0782558,.107627,1.06284,.983543,-.0655957,.0895862,1.07798,.986789,-.0520411,.0713756,1.092,.990292,-.0389727,.053228,1.10484,.994187,-.025808,.0351945,1.11642,.997499,-.0126071,.0173198,1.12703,.999999,275604e-9,-148602e-9,1.13674,.81075,-78735e-10,.394456,161829e-10,.808692,-198293e-9,.393453,407564e-9,.80846,-792877e-9,.39334,.00162965,.808595,-.00178416,.393407,.00366711,.808597,-.00317182,.393408,.00651934,.808598,-.00495589,.393408,.0101866,.808591,-.00713627,.393403,.0146689,.808592,-.00971285,.393402,.0199667,.80861,-.0126855,.393407,.0260803,.808633,-.0160538,.393413,.0330107,.80868,-.0198175,.393429,.0407589,.808748,-.0239758,.393453,.0493264,.808854,-.0285286,.39349,.0587161,.808992,-.0334748,.39354,.0689304,.809141,-.0388116,.393588,.0799707,.809352,-.0445375,.39366,.0918432,.809608,-.0506427,.393742,.104549,.809915,-.0570708,.393834,.118085,.810253,-.0633526,.393885,.132377,.810687,-.0700966,.393953,.147537,.811233,-.0772274,.394047,.163543,.811865,-.0847629,.394148,.180394,.812648,-.0925663,.394265,.198051,.813583,-.100416,.394363,.216443,.814683,-.108119,.394402,.235502,.815948,-.11644,.394489,.255242,.817278,-.125036,.394542,.275441,.819605,-.133655,.39486,.296094,.822256,-.142682,.395248,.317309,.825349,-.150756,.395241,.340516,.829605,-.158392,.395285,.364819,.83391,-.165801,.394922,.389736,.839808,-.172677,.394691,.415409,.845708,-.179448,.394006,.441546,.853025,-.185746,.393279,.46832,.859666,-.191684,.391655,.495302,.86789,-.197146,.390068,.52262,.875845,-.201904,.38727,.550336,.882634,-.205023,.382688,.578825,.891076,-.207098,.377543,.608103,.900589,-.208474,.371752,.63723,.90791,-.209068,.364016,.665769,.915971,-.208655,.355593,.694428,.923455,-.20729,.345439,.723224,.931514,-.203821,.334099,.751925,.937885,-.19986,.321069,.780249,.943136,-.194993,.306571,.8077,.948818,-.189132,.291556,.83497,.954433,-.181617,.275745,.86188,.959078,-.173595,.258695,.888562,.962705,-.164855,.240825,.914008,.966753,-.155129,.22268,.939145,.970704,-.144241,.204542,.963393,.973367,-.133188,.185927,.985983,.975984,-.121146,.167743,1.00704,.976994,-.108366,.149218,1.02715,.978485,-.0956746,.13131,1.0455,.980074,-.0820733,.112513,1.06221,.98225,-.0684061,.0938323,1.07782,.98553,-.0549503,.0749508,1.09199,.989529,-.0407857,.055848,1.10508,.993536,-.0271978,.0368581,1.11684,.997247,-.0132716,.0181845,1.12789,1,431817e-9,-198809e-9,1.13792,.785886,-812608e-11,.405036,157669e-10,.790388,-205278e-9,.407355,398297e-9,.790145,-820824e-9,.407231,.00159263,.790135,-.00184681,.407226,.00358336,.790119,-.00328316,.407218,.00637039,.790126,-.00512988,.40722,.0099539,.79013,-.00738684,.407221,.0143339,.790135,-.0100538,.407221,.0195107,.790134,-.0131306,.407217,.0254848,.79016,-.0166169,.407224,.0322572,.790197,-.020512,.407236,.0398284,.790273,-.0248157,.407263,.0482014,.790381,-.029527,.407304,.0573777,.790521,-.0346446,.407355,.0673602,.790704,-.0401665,.40742,.0781522,.790925,-.0460896,.407499,.0897582,.791195,-.0524017,.407589,.10218,.791522,-.0590121,.407691,.11541,.791878,-.0654876,.407748,.12939,.792361,-.0725207,.407849,.144237,.792942,-.0799844,.407963,.159924,.79362,-.0877896,.408087,.176425,.794529,-.0958451,.408259,.193733,.795521,-.103827,.408362,.211756,.796778,-.111937,.408482,.230524,.798027,-.120521,.408547,.249967,.799813,-.129242,.408721,.269926,.802387,-.138048,.409148,.290338,.805279,-.147301,.409641,.311193,.809251,-.155895,.410154,.333611,.813733,-.163942,.410297,.357615,.819081,-.171666,.410373,.382339,.825427,-.178905,.410348,.407828,.83172,-.185812,.409486,.434034,.83877,-.192318,.408776,.460493,.845817,-.198249,.407176,.487346,.854664,-.204034,.405719,.514832,.863495,-.208908,.403282,.542401,.871883,-.212765,.399293,.570683,.88065,-.214911,.393803,.599947,.89004,-.216214,.387536,.62932,.898476,-.216745,.379846,.658319,.906738,-.216387,.370625,.687138,.914844,-.215053,.360139,.71601,.923877,-.212007,.348849,.745124,.931925,-.207481,.335639,.773366,.938054,-.202418,.320798,.801636,.943895,-.196507,.304772,.829055,.949468,-.189009,.288033,.856097,.955152,-.180539,.270532,.88301,.959403,-.171437,.251639,.909296,.963309,-.161661,.232563,.934868,.967399,-.150425,.213231,.959662,.972009,-.138659,.194247,.98302,.97433,-.126595,.174718,1.00517,.975823,-.113205,.155518,1.02566,.976371,-.0996096,.136709,1.04418,.978705,-.0860754,.117571,1.06146,.981477,-.0714438,.0980046,1.07777,.984263,-.0572304,.0782181,1.09214,.988423,-.0428875,.0584052,1.10553,.993,-.0282442,.038522,1.11758,.99704,-.0140183,.0190148,1.12864,.999913,369494e-9,-145203e-9,1.13901,.777662,-84153e-10,.423844,154403e-10,.770458,-211714e-9,.419915,38845e-8,.770716,-846888e-9,.420055,.00155386,.770982,-.00190567,.420202,.00349653,.770981,-.00338782,.420201,.00621606,.77098,-.00529338,.4202,.00971274,.770983,-.00762223,.4202,.0139867,.770985,-.0103741,.420198,.0190381,.770996,-.0135489,.4202,.0248677,.771029,-.0171461,.420212,.0314764,.771052,-.0211647,.420215,.0388648,.771131,-.0256048,.420245,.047036,.771235,-.0304647,.420284,.0559911,.771383,-.0357436,.420341,.0657346,.771591,-.0414392,.420423,.0762694,.771819,-.0475462,.420506,.0875984,.772123,-.0540506,.420617,.099727,.772464,-.060797,.42072,.112637,.772855,-.0675393,.420799,.126313,.773317,-.0748323,.420893,.140824,.773981,-.0825681,.421058,.15617,.774746,-.0906307,.421226,.172322,.77566,-.0988982,.421397,.189253,.776837,-.106994,.421569,.206912,.778097,-.115528,.421704,.225359,.779588,-.124317,.421849,.24447,.781574,-.133139,.422097,.264156,.784451,-.142179,.422615,.284318,.787682,-.15165,.423269,.304902,.792433,-.160771,.424396,.3265,.797359,-.169166,.424772,.35014,.803986,-.177149,.425475,.374768,.809504,-.184745,.424996,.399928,.815885,-.19173,.424247,.425796,.823513,-.198525,.423515,.452287,.832549,-.204709,.422787,.479321,.841653,-.210447,.421187,.506718,.850401,-.215501,.418519,.53432,.859854,-.219752,.414715,.56242,.869364,-.222305,.409462,.591558,.878837,-.223744,.402926,.621074,.888636,-.224065,.395043,.650538,.898132,-.223742,.38564,.679538,.907181,-.222308,.375378,.708674,.915621,-.219837,.363212,.737714,.9239,-.215233,.349313,.767014,.931644,-.209592,.334162,.795133,.938887,-.203644,.317943,.823228,.945282,-.196349,.300581,.850822,.950758,-.18742,.282195,.877594,.956146,-.177879,.262481,.904564,.960355,-.167643,.242487,.930741,.965256,-.156671,.222668,.955868,.968029,-.144123,.201907,.979869,.97251,-.131305,.18202,1.00291,.974925,-.118335,.161909,1.02392,.975402,-.103714,.142129,1.0433,.976987,-.089415,.122447,1.06089,.979677,-.0748858,.102248,1.07713,.983184,-.0596086,.0814851,1.09218,.987466,-.0447671,.0609484,1.10585,.992348,-.0295217,.0401835,1.11829,.996674,-.0143917,.0198163,1.12966,1.00003,321364e-9,-149983e-9,1.1402,.757901,-869074e-11,.436176,151011e-10,.751195,-217848e-9,.432317,378533e-9,.751178,-871373e-9,.432307,.0015141,.751195,-.00196061,.432317,.0034068,.751198,-.00348552,.432318,.00605659,.751195,-.00544599,.432315,.00946353,.751207,-.00784203,.43232,.013628,.751213,-.0106732,.43232,.0185499,.751221,-.0139393,.432319,.0242302,.751244,-.0176398,.432325,.0306694,.7513,-.0217743,.432348,.0378698,.751358,-.0263412,.432367,.0458321,.751458,-.0313396,.432404,.0545587,.751608,-.0367682,.432464,.0640543,.7518,-.0426246,.43254,.0743222,.752065,-.0489031,.432645,.0853668,.752376,-.0555828,.432762,.0971911,.752715,-.0623861,.432859,.109768,.753137,-.069415,.432958,.123126,.753676,-.0770039,.433099,.137308,.754345,-.084971,.433272,.15229,.755235,-.0932681,.433504,.168075,.756186,-.10171,.433693,.184625,.757363,-.110019,.433857,.201897,.75884,-.11887,.434102,.220014,.760467,-.127881,.434306,.238778,.762969,-.136766,.434751,.258172,.765823,-.14612,.43529,.278062,.769676,-.15566,.436236,.298437,.774909,-.165177,.437754,.319532,.77994,-.17402,.438343,.342505,.785757,-.182201,.438609,.366693,.792487,-.190104,.438762,.391668,.80038,-.197438,.438795,.417494,.808494,-.204365,.438226,.443933,.817695,-.210714,.437283,.470929,.828111,-.216651,.436087,.498569,.837901,-.221804,.433717,.526165,.847813,-.226318,.430133,.554155,.858314,-.229297,.425213,.582822,.868891,-.230999,.418576,.612847,.878941,-.231155,.410405,.642445,.888809,-.230935,.400544,.672024,.898089,-.229343,.389613,.701366,.908081,-.226886,.377197,.730763,.916819,-.222676,.363397,.759642,.924968,-.216835,.347437,.788775,.932906,-.210245,.32995,.817135,.940025,-.202992,.312262,.844912,.946101,-.19436,.293313,.872164,.952835,-.184125,.273638,.899443,.957347,-.173657,.252385,.926389,.961434,-.162204,.231038,.951947,.965522,-.14979,.209834,.976751,.969412,-.136307,.188821,1.00022,.973902,-.122527,.168013,1.02229,.974045,-.108213,.147634,1.04199,.975775,-.0927397,.12705,1.06019,.978383,-.0778212,.106309,1.07711,.98211,-.0621216,.0849279,1.09245,.986517,-.0463847,.0633519,1.10651,.991696,-.0309353,.0419698,1.11903,.996349,-.0150914,.0206272,1.13073,1.00003,442449e-9,-231396e-9,1.14146,.727498,-885074e-11,.441528,145832e-10,.730897,-223525e-9,.443589,368298e-9,.730796,-893996e-9,.443528,.00147303,.730805,-.00201149,.443533,.00331433,.730814,-.00357596,.443538,.00589222,.730815,-.00558734,.443538,.00920678,.730822,-.00804544,.44354,.0132582,.730836,-.0109501,.443545,.0180468,.730848,-.0143008,.443546,.0235732,.730871,-.0180969,.443552,.0298382,.730915,-.022338,.443567,.0368438,.730982,-.0270225,.443591,.044591,.731076,-.0321491,.443627,.0530831,.731245,-.0377166,.443699,.0623243,.73144,-.0437216,.443777,.0723181,.7317,-.0501576,.443881,.0830691,.732034,-.0569942,.444014,.0945809,.732388,-.0638756,.444113,.106825,.732853,-.071203,.444247,.119859,.733473,-.0790076,.444442,.13369,.734195,-.0871937,.444645,.148304,.735069,-.095696,.444877,.163702,.736169,-.10426,.445133,.179861,.73747,-.112853,.44537,.196778,.738991,-.12199,.445651,.214496,.740865,-.131153,.445958,.232913,.743637,-.140245,.446548,.251977,.746797,-.149722,.447246,.271551,.751517,-.159341,.448656,.291774,.756156,-.169106,.449866,.312455,.761519,-.178436,.450919,.334552,.768295,-.186904,.451776,.358491,.776613,-.195117,.452832,.383446,.783966,-.202695,.45249,.408945,.793542,-.20985,.452587,.435364,.803192,-.216403,.451852,.462336,.813892,-.22251,.450708,.48987,.824968,-.227676,.4486,.517697,.835859,-.232443,.445156,.545975,.846825,-.235775,.440351,.574483,.858085,-.237897,.433641,.604246,.868825,-.238074,.425354,.634101,.879638,-.237661,.415383,.664201,.889966,-.236186,.404136,.693918,.899479,-.233599,.390917,.723481,.908769,-.229737,.376352,.75258,.917966,-.223836,.360372,.781764,.926304,-.217067,.342551,.811139,.934626,-.209309,.324238,.839585,.941841,-.20071,.304484,.867044,.94789,-.190602,.283607,.894579,.954196,-.179253,.262205,.921743,.958383,-.167646,.239847,.948026,.963119,-.155073,.218078,.973296,.966941,-.141426,.195899,.998135,.970836,-.126849,.174121,1.02021,.973301,-.112296,.153052,1.04085,.97448,-.0964965,.131733,1.05946,.977045,-.080489,.10997,1.07693,.980751,-.064844,.0881657,1.09254,.985475,-.0481938,.0657987,1.10697,.991089,-.0319185,.0435215,1.12004,.996122,-.0158088,.0214779,1.13173,1.00001,372455e-9,-200295e-9,1.14291,.708622,-907597e-11,.45304,141962e-10,.711162,-228911e-9,.454662,358052e-9,.709812,-914446e-9,.453797,.00143034,.709865,-.00205819,.453834,.00321935,.709864,-.00365894,.453833,.00572331,.709855,-.00571692,.453826,.00894278,.709862,-.00823201,.453828,.012878,.709875,-.011204,.453832,.0175295,.709896,-.0146323,.453839,.0228978,.709925,-.0185163,.453847,.0289839,.709974,-.0228551,.453866,.0357894,.710045,-.0276473,.453892,.0433161,.710133,-.032891,.453924,.0515665,.710292,-.0385851,.453992,.0605458,.710485,-.0447254,.45407,.0702574,.710769,-.0513051,.454192,.0807077,.711106,-.0582733,.454329,.091896,.711516,-.0652866,.45446,.103814,.712071,-.0728426,.454653,.116508,.712676,-.0808307,.45484,.129968,.713476,-.0892216,.455096,.144206,.714377,-.0979047,.455346,.159212,.715579,-.106531,.455647,.174973,.716977,-.115492,.455961,.191504,.71862,-.124821,.456315,.208835,.72084,-.134079,.4568,.226869,.723786,-.143427,.457521,.245582,.727464,-.153061,.458475,.264957,.732771,-.162768,.460239,.284948,.736515,-.172627,.460899,.30522,.743519,-.182487,.463225,.326717,.750041,-.191295,.464027,.350113,.758589,-.199746,.465227,.374782,.767703,-.207584,.465877,.400226,.777484,-.214973,.465996,.426442,.788792,-.221796,.466019,.453688,.800194,-.228038,.465083,.481246,.811234,-.233346,.462506,.509086,.822859,-.238073,.459257,.537338,.835082,-.241764,.454863,.566108,.846332,-.244241,.448163,.595126,.858355,-.244736,.439709,.625574,.87034,-.244278,.429837,.65617,.881027,-.24255,.418002,.686029,.891007,-.239912,.404325,.716039,.900874,-.236133,.389222,.745518,.911072,-.230672,.373269,.775026,.920359,-.22356,.355083,.804521,.928604,-.215591,.335533,.834045,.937175,-.206503,.315278,.861612,.942825,-.196684,.293653,.889131,.949805,-.185116,.271503,.916853,.955535,-.172703,.248821,.943541,.959843,-.159978,.225591,.970132,.964393,-.146375,.202719,.994709,.968008,-.131269,.179928,1.0186,.971013,-.11569,.158007,1.03928,.973334,-.1003,.13624,1.05887,.975775,-.0833352,.1138,1.07652,.979579,-.0668981,.0913141,1.09297,.984323,-.0500902,.0683051,1.10734,.990351,-.0332377,.0451771,1.12084,.995823,-.0161491,.0221705,1.13296,1.0001,234083e-9,-108712e-9,1.14441,.683895,-924677e-11,.46015,137429e-10,.68833,-233383e-9,.463134,346865e-9,.688368,-933547e-9,.463159,.00138748,.688367,-.00210049,.463159,.00312187,.688369,-.00373415,.463159,.00555004,.688377,-.00583449,.463163,.00867216,.688386,-.00840128,.463166,.0124884,.688398,-.0114343,.463169,.0169993,.688418,-.0149329,.463175,.0222054,.688453,-.0188964,.463188,.028108,.688515,-.0233239,.463214,.0347085,.68857,-.0282136,.463231,.0420091,.688679,-.033564,.463276,.0500132,.688854,-.0393733,.463356,.0587255,.689038,-.0456354,.46343,.0681476,.689321,-.0523433,.463553,.0782897,.689662,-.059412,.463693,.0891501,.690188,-.0665736,.4639,.100735,.690755,-.0743106,.464107,.113074,.691405,-.0824722,.464329,.126161,.692198,-.0910484,.464585,.140007,.693196,-.0998778,.464893,.154612,.69454,-.108651,.465285,.169984,.695921,-.117855,.465596,.186106,.697749,-.12734,.466056,.203034,.700375,-.136714,.466771,.220703,.703395,-.146386,.467579,.239062,.707904,-.156096,.469067,.258188,.711673,-.165904,.469851,.277759,.717489,-.175812,.471815,.297935,.724051,-.185931,.47389,.318916,.731965,-.195238,.47587,.341591,.741151,-.204021,.477523,.366062,.751416,-.212113,.478881,.391396,.761848,-.21979,.479226,.417599,.771886,-.2267,.478495,.444401,.783998,-.232991,.477622,.472084,.796523,-.238645,.475833,.500193,.808851,-.243396,.472568,.52865,.821191,-.247226,.467857,.557362,.834261,-.250102,.461871,.586768,.846762,-.251056,.453543,.617085,.859867,-.250604,.443494,.647659,.871948,-.248783,.431711,.678119,.882967,-.245855,.417911,.708399,.892826,-.242168,.401993,.738256,.90332,-.237062,.385371,.767999,.913633,-.22997,.366837,.798191,.922774,-.221687,.346372,.827756,.931371,-.212345,.325682,.856425,.938929,-.20206,.303665,.884299,.944821,-.190981,.280786,.912023,.951792,-.178065,.2573,.939669,.957712,-.164634,.233448,.96655,.961912,-.150863,.209504,.992366,.966382,-.13577,.18597,1.01633,.969588,-.119593,.162905,1.03843,.971777,-.103203,.14053,1.05841,.97433,-.0865888,.117909,1.07632,.978686,-.0690829,.0944101,1.09326,.983281,-.0516568,.0705671,1.10796,.989562,-.034558,.0468592,1.12182,.995465,-.0167808,.0229846,1.1342,.999991,373016e-9,-235606e-9,1.1459,.662251,-939016e-11,.468575,132714e-10,.666634,-237624e-9,.471675,335842e-9,.666411,-950385e-9,.471516,.00134321,.666399,-.00213833,.471509,.00302221,.666386,-.0038014,.471499,.00537283,.666405,-.00593958,.471511,.00839533,.666406,-.00855253,.471508,.0120898,.666428,-.0116401,.471519,.0164569,.666444,-.0152015,.471522,.0214971,.66649,-.0192362,.471543,.027212,.666537,-.0237428,.471558,.033603,.666617,-.0287198,.471591,.0406728,.666718,-.0341647,.471631,.0484238,.666889,-.0400759,.47171,.0568621,.667104,-.0464479,.471805,.0659915,.667374,-.0532677,.471923,.0758178,.667772,-.0603805,.472098,.0863425,.668371,-.0677392,.472363,.0975917,.668971,-.0756028,.472596,.109567,.669696,-.0839293,.472869,.122272,.670481,-.0926683,.473126,.135718,.6715,-.1016,.473442,.149914,.672911,-.110566,.47389,.164882,.674512,-.119984,.474354,.180602,.67651,-.129574,.474922,.19711,.679292,-.139106,.475764,.214371,.682798,-.148993,.476886,.232405,.686955,-.158737,.478179,.251153,.691406,-.168754,.479432,.270436,.697438,-.178703,.481481,.290374,.704761,-.188955,.484143,.311044,.713599,-.198814,.487007,.333003,.723194,-.207869,.488962,.357144,.732601,-.216189,.489815,.382169,.744193,-.22398,.490888,.408227,.754907,-.231156,.490355,.434928,.767403,-.23747,.489548,.462599,.78107,-.243503,.488274,.490908,.793893,-.248114,.484843,.519421,.807296,-.25222,.4803,.548561,.820529,-.255265,.474097,.577772,.833716,-.256741,.466041,.607782,.848403,-.25637,.456547,.638807,.860755,-.254804,.443946,.670058,.874012,-.251834,.430852,.700749,.885619,-.247867,.414903,.731446,.896069,-.242634,.397276,.761191,.906266,-.236093,.378535,.791053,.916759,-.227543,.358038,.821298,.92523,-.21783,.335705,.850747,.93436,-.207534,.313797,.879258,.941631,-.195983,.289671,.907734,.947564,-.183567,.265319,.935206,.953681,-.169345,.240815,.962739,.960008,-.154909,.216119,.989227,.964145,-.140161,.192096,1.01465,.968171,-.123411,.167855,1.03737,.969859,-.106525,.144817,1.05767,.972666,-.0891023,.12149,1.0761,.977055,-.0718094,.0975306,1.09336,.982527,-.0534213,.0730217,1.10878,.989001,-.0355579,.0483366,1.12285,.99512,-.0176383,.023938,1.13548,1.00007,368831e-9,-211581e-9,1.14744,.651047,-960845e-11,.484101,12922e-9,.644145,-241347e-9,.478968,324578e-9,.64396,-965142e-9,.478831,.00129798,.64396,-.00217154,.47883,.00292046,.643968,-.00386049,.478835,.00519202,.643974,-.00603186,.478838,.0081128,.643977,-.0086854,.478836,.011683,.643982,-.0118207,.478834,.0159031,.644024,-.0154374,.478856,.0207743,.644059,-.0195343,.478868,.0262975,.644122,-.0241103,.478896,.0324747,.644207,-.0291638,.478933,.039309,.64432,-.0346919,.478981,.0468029,.644481,-.0406919,.479053,.0549614,.644722,-.047159,.479169,.0637909,.645013,-.0540748,.479302,.0732974,.645503,-.0612001,.479541,.0834898,.646117,-.0687303,.479829,.0943873,.646707,-.0767846,.480061,.105991,.647431,-.0852465,.480343,.11831,.64831,-.0940719,.48066,.131348,.649486,-.103056,.481083,.14514,.650864,-.112261,.481528,.159676,.652604,-.121852,.482102,.174979,.654825,-.131505,.482813,.191079,.657876,-.141189,.483876,.207927,.661339,-.151239,.48499,.225586,.665463,-.161091,.486279,.243947,.670542,-.171235,.487968,.262957,.677361,-.181347,.49053,.282781,.685672,-.191679,.493862,.303311,.694551,-.201781,.49699,.324607,.703753,-.211164,.498884,.347916,.713703,-.219675,.500086,.372628,.725911,-.227836,.501554,.398694,.73862,-.23533,.502193,.425529,.752118,-.241786,.501811,.453209,.76579,-.247865,.500185,.481381,.779568,-.252696,.497159,.51011,.793991,-.256802,.492765,.539322,.808182,-.259942,.486827,.569078,.821698,-.261703,.478386,.598818,.836009,-.262006,.468772,.629762,.849824,-.260333,.456352,.661366,.863888,-.257398,.442533,.69295,.876585,-.253264,.426573,.723608,.888665,-.248026,.408964,.754378,.899537,-.241487,.389677,.784761,.9094,-.233463,.368516,.814688,.920166,-.223397,.346624,.845009,.928899,-.21255,.322717,.874431,.937156,-.200869,.298698,.902922,.943861,-.188387,.273491,.931356,.949557,-.174341,.247866,.958854,.955862,-.158994,.222496,.986098,.961721,-.143664,.197522,1.01229,.965976,-.127412,.17302,1.03571,.968652,-.109798,.148954,1.05699,.971084,-.0916787,.125044,1.07587,.975584,-.0739634,.100577,1.09372,.98122,-.055322,.0753666,1.10948,.988253,-.0366825,.0498899,1.12394,.99482,-.0180389,.024611,1.13694,1.00001,229839e-9,-188283e-9,1.14919,.613867,-964198e-11,.479449,123452e-10,.621485,-244534e-9,.485399,313091e-9,.621429,-978202e-9,.485353,.00125245,.62112,-.00220004,.485114,.00281687,.621119,-.0039111,.485112,.00500783,.621122,-.00611091,.485112,.00782498,.621133,-.00879922,.485117,.0112687,.621152,-.0119756,.485125,.0153394,.621183,-.0156396,.485139,.0200382,.621227,-.0197898,.485158,.0253663,.621298,-.0244253,.485192,.0313261,.621388,-.0295441,.485233,.0379204,.621507,-.0351432,.485286,.0451523,.621693,-.0412198,.485378,.0530277,.621933,-.0477673,.485495,.0615522,.622232,-.0547574,.485635,.0707316,.622809,-.0619417,.485943,.0805883,.623407,-.069625,.486232,.0911267,.62406,-.077796,.486516,.102354,.624835,-.0863731,.486838,.114279,.625758,-.095251,.487188,.126902,.627043,-.104299,.487695,.140285,.628438,-.113724,.488163,.154397,.630325,-.123417,.488858,.169267,.632801,-.133137,.489754,.184941,.635784,-.143052,.490815,.20136,.639406,-.153132,.492048,.218643,.643872,-.163143,.49363,.236615,.6499,-.17333,.496009,.255449,.657201,-.183622,.498994,.275006,.666221,-.194019,.502888,.295354,.674419,-.204192,.505459,.316244,.683729,-.21406,.507771,.33849,.695584,-.222854,.510245,.363166,.708583,-.231315,.512293,.389071,.721233,-.238911,.512747,.415737,.735134,-.245657,.512482,.443331,.750179,-.251879,.511526,.471891,.765073,-.256911,.508935,.500892,.779794,-.261144,.504341,.530294,.794801,-.264316,.498515,.560144,.810339,-.266276,.491015,.590213,.824818,-.266981,.481126,.620865,.839375,-.265778,.468685,.652687,.853043,-.262748,.453925,.684759,.867335,-.258474,.437912,.716209,.88037,-.253187,.419648,.747508,.891711,-.246476,.39982,.77797,.902896,-.238735,.37879,.808586,.913601,-.22885,.355891,.838843,.923019,-.217656,.331773,.869014,.933432,-.205539,.307356,.898512,.939691,-.192595,.281321,.9269,.946938,-.178945,.255441,.955297,.952372,-.163587,.229013,.983231,.95909,-.147214,.203179,1.00971,.963675,-.13064,.17792,1.03438,.968247,-.113121,.152898,1.05625,.97001,-.0945824,.128712,1.07598,.974458,-.0755648,.103349,1.094,.980168,-.0571998,.0776731,1.1104,.987295,-.0377994,.0514445,1.12491,.994432,-.0186417,.025429,1.13851,.999975,542714e-9,-282356e-9,1.15108,.592656,-980249e-11,.486018,119532e-10,.598467,-247275e-9,.490781,301531e-9,.597934,-988317e-9,.490343,.00120517,.597903,-.00222366,.490319,.0027116,.597913,-.00395315,.490327,.00482077,.597919,-.00617653,.490329,.00753264,.597936,-.00889375,.490339,.0108478,.597956,-.0121043,.490347,.0147668,.597992,-.0158073,.490365,.0192905,.598032,-.0200017,.490382,.0244204,.598109,-.0246865,.49042,.0301593,.598215,-.0298594,.490474,.03651,.59833,-.0355167,.490524,.0434757,.598525,-.0416559,.490624,.0510629,.598778,-.0482692,.490753,.0592781,.599135,-.0553114,.49094,.0681304,.599802,-.062542,.491328,.0776467,.600361,-.0703638,.491598,.0878184,.60101,-.0786256,.491882,.0986573,.601811,-.0872962,.492232,.11018,.602861,-.0962284,.492684,.1224,.604167,-.10538,.493213,.135354,.605693,-.114896,.493799,.149034,.607682,-.124654,.494576,.163469,.610672,-.13456,.4959,.178747,.613313,-.144581,.496713,.194723,.617603,-.154703,.498499,.211617,.622174,-.16489,.500188,.229183,.628855,-.175164,.503072,.247786,.636963,-.185565,.506798,.267116,.644866,-.195911,.509719,.28702,.653741,-.206104,.512776,.307763,.664942,-.216447,.516812,.329631,.67633,-.22552,.519181,.353515,.690012,-.234316,.521681,.379226,.704243,-.242032,.523129,.405901,.719396,-.249172,.523768,.433585,.734471,-.255543,.522541,.462085,.750539,-.260697,.520217,.491233,.766365,-.26501,.516293,.521094,.781677,-.268409,.509708,.551014,.797132,-.270399,.501944,.581463,.812655,-.271247,.492025,.612402,.828592,-.270708,.480424,.643798,.844044,-.268085,.465955,.67682,.857305,-.263459,.448425,.708496,.87114,-.258151,.430243,.74046,.884936,-.251171,.410578,.771583,.895772,-.243305,.38862,.802234,.906961,-.234037,.365214,.833179,.917775,-.222714,.34116,.86353,.927883,-.210175,.31572,.893557,.936617,-.196925,.289159,.922976,.943384,-.182788,.261996,.951606,.949713,-.167965,.235324,.979958,.955818,-.151109,.208408,1.00765,.961344,-.133834,.182591,1.03329,.965469,-.115987,.156958,1.0557,.968693,-.09746,.132239,1.07583,.973165,-.0778514,.106195,1.09451,.979387,-.0585067,.0797669,1.11137,.98671,-.0390409,.0530263,1.12643,.994093,-.019408,.0263163,1.14016,1.00002,540029e-9,-194487e-9,1.15299,.574483,-989066e-11,.494533,114896e-10,.574478,-249127e-9,.494528,289403e-9,.574607,-996811e-9,.494637,.00115797,.574396,-.00224241,.494458,.00260498,.574377,-.00398632,.49444,.00463102,.574386,-.00622836,.494445,.00723623,.574401,-.0089683,.494453,.010421,.574419,-.0122056,.49446,.0141859,.574459,-.0159396,.494481,.0185322,.574525,-.0201692,.49452,.0234617,.574587,-.0248924,.494547,.0289762,.574697,-.0301074,.494604,.0350797,.574853,-.0358114,.494688,.0417767,.575027,-.041999,.494772,.0490718,.575294,-.0486618,.494915,.0569728,.575733,-.0557148,.495173,.0654955,.576356,-.0630489,.495537,.0746612,.576944,-.0709285,.495836,.0844615,.57765,-.0792723,.496177,.0949142,.578491,-.0880167,.496563,.10603,.579639,-.0969462,.497096,.117841,.580989,-.10622,.497684,.130367,.582587,-.115861,.498337,.143609,.584951,-.125605,.499414,.157625,.587602,-.135608,.500518,.172413,.59076,-.145742,.501767,.187999,.594992,-.155934,.503542,.20445,.600656,-.166303,.506135,.221764,.607816,-.176681,.509542,.24002,.61522,-.187071,.51263,.258992,.623702,-.197465,.516021,.278773,.634192,-.207816,.520422,.299377,.644936,-.218183,.524073,.320802,.657888,-.2278,.528049,.34384,.670666,-.236747,.52986,.36916,.685626,-.24484,.531892,.395867,.701304,-.252071,.532727,.423488,.717727,-.258714,.532146,.452201,.733914,-.264211,.529883,.481579,.750529,-.26859,.5259,.511558,.76747,-.272046,.51999,.542042,.785189,-.274225,.513083,.572799,.800954,-.275189,.502936,.603816,.816962,-.274946,.490921,.635461,.83336,-.272695,.47684,.6676,.848143,-.268223,.459405,.70051,.861818,-.262768,.440319,.732902,.876828,-.255872,.420123,.765084,.889312,-.247703,.398379,.796391,.900412,-.238381,.374496,.827333,.912251,-.227783,.349874,.858385,.921792,-.214832,.323181,.888652,.931273,-.200949,.296624,.917763,.940295,-.186537,.269211,.947878,.946812,-.171538,.241447,.977016,.953588,-.155254,.213829,1.00501,.958841,-.137156,.186807,1.03179,.963746,-.118699,.160706,1.05502,.966468,-.0998358,.135504,1.07568,.971178,-.0805186,.109131,1.09479,.97831,-.0599348,.0818293,1.1123,.985886,-.0399661,.0545872,1.12771,.994021,-.0198682,.0269405,1.14186,1.00009,271022e-9,-12989e-8,1.15514,.538716,-990918e-11,.486732,109675e-10,.550656,-250642e-9,.497518,277412e-9,.55057,-.00100265,.497441,.00110974,.550903,-.00225672,.497733,.00249779,.550568,-.00401046,.497438,.00443906,.550574,-.00626613,.49744,.00693637,.550591,-.0090226,.497449,.00998921,.550623,-.0122795,.497469,.0135984,.550667,-.0160361,.497495,.0177654,.550724,-.0202908,.497526,.0224915,.550792,-.0250421,.497557,.0277795,.550918,-.0302878,.49763,.0336334,.551058,-.0360241,.497701,.0400573,.551276,-.0422473,.497824,.0470585,.551551,-.0489441,.497977,.0546433,.552074,-.0559596,.498312,.0628367,.552681,-.0633978,.498679,.071646,.553324,-.0713176,.499031,.0810746,.554011,-.0797268,.499365,.091129,.55488,-.0885238,.499779,.101837,.556171,-.0974417,.500444,.113239,.557498,-.106841,.501025,.125316,.559299,-.116533,.501864,.138128,.561647,-.126298,.502967,.151695,.564347,-.136388,.504129,.16604,.567863,-.146576,.505713,.181207,.572569,-.156832,.507953,.197259,.578919,-.167323,.511186,.214258,.585387,-.177712,.514042,.232038,.593134,-.188184,.517484,.250733,.603295,-.198717,.522345,.270454,.613854,-.209177,.526751,.290807,.626092,-.219644,.531595,.312202,.637868,-.229494,.534721,.334435,.652458,-.238718,.538304,.359184,.666985,-.247061,.539875,.385637,.683301,-.254652,.541042,.41328,.69998,-.261376,.540735,.441903,.717824,-.267085,.539139,.471609,.734617,-.271465,.534958,.501446,.753663,-.27528,.53032,.532571,.770512,-.277617,.522134,.563641,.787356,-.278525,.51206,.595067,.806252,-.278512,.50119,.627226,.822061,-.277023,.486791,.659402,.838959,-.273175,.470467,.692874,.85379,-.267238,.450688,.725702,.868268,-.260327,.429741,.75832,.881994,-.251946,.407223,.790189,.893885,-.242432,.383214,.821625,.905118,-.231904,.357297,.853011,.916045,-.219545,.330733,.883773,.927614,-.205378,.303916,.914435,.936005,-.190388,.275941,.944502,.944533,-.1749,.247493,.974439,.950758,-.158588,.218996,1.00286,.957078,-.141027,.191559,1.0304,.962448,-.121507,.164457,1.05466,.964993,-.102068,.138636,1.0761,.970017,-.0822598,.111861,1.09541,.97661,-.062033,.0843438,1.11317,.985073,-.0409832,.0558496,1.12911,.993515,-.020146,.0275331,1.1438,1.00006,27329e-8,-107883e-9,1.15736,.525324,-999341e-11,.498153,105385e-10,.526513,-251605e-9,.499277,265329e-9,.526517,-.00100641,.499282,.0010613,.526588,-.00226466,.499337,.00238823,.526539,-.0040255,.499302,.00424535,.526547,-.00628954,.499306,.00663364,.526561,-.00905628,.499313,.00955337,.526593,-.0123253,.499334,.0130054,.526642,-.0160957,.499365,.0169911,.5267,-.0203661,.499396,.0215122,.526792,-.0251347,.499451,.0265718,.526904,-.0303985,.499511,.0321732,.527079,-.0361554,.499617,.0383231,.527285,-.0423982,.499731,.045026,.527602,-.0491121,.499924,.0522936,.528166,-.0561127,.500306,.0601528,.52879,-.0635988,.5007,.0686059,.529421,-.071581,.501048,.0776518,.530144,-.0799854,.501421,.0873148,.531062,-.0888032,.501884,.0976084,.532374,-.0977643,.50259,.108588,.533828,-.107197,.50329,.120234,.53581,-.116887,.504312,.132602,.538063,-.126755,.505365,.145721,.5409,-.136819,.506668,.159617,.544882,-.147117,.508731,.174369,.550238,-.157446,.511601,.190028,.556038,-.167988,.514431,.206587,.563031,-.178364,.517808,.224046,.571543,-.189007,.521937,.242503,.582255,-.199546,.527415,.261977,.59272,-.210084,.531682,.282162,.605648,-.220448,.537123,.303426,.61785,-.230593,.540664,.325323,.632223,-.240238,.544467,.348993,.648819,-.24887,.547594,.375462,.665825,-.256657,.54912,.403024,.683389,-.263711,.549294,.431773,.701495,-.269666,.547649,.461494,.719197,-.274169,.543786,.491623,.737906,-.278124,.538644,.522994,.756652,-.280632,.531057,.554775,.775279,-.281741,.521972,.586441,.792688,-.281652,.509613,.618596,.811894,-.280345,.496497,.651462,.827938,-.277128,.47968,.684023,.844837,-.271646,.460688,.718024,.859239,-.264397,.438872,.751207,.874088,-.256144,.41577,.784232,.887693,-.246311,.391369,.816191,.899402,-.235497,.365872,.847828,.910973,-.223631,.338618,.87934,.92204,-.209874,.310803,.910325,.930987,-.194265,.281802,.940695,.94,-.178125,.252836,.970958,.948018,-.161479,.224239,1.00078,.955141,-.144038,.195857,1.0288,.960513,-.124915,.168487,1.05371,.963964,-.104284,.141495,1.07596,.968713,-.0838732,.114437,1.09628,.975524,-.0635579,.0863105,1.11448,.98431,-.042291,.0574774,1.13069,.992916,-.0209131,.0284343,1.14568,.999926,743097e-9,-379265e-9,1.15955,.501042,-998428e-11,.498726,100306e-10,.502992,-252112e-9,.500665,253283e-9,.502417,-.00100791,.500092,.00101259,.502965,-.00226919,.500621,.00227978,.502318,-.00403109,.499994,.00405011,.502333,-.00629832,.500005,.00632868,.502362,-.00906907,.500027,.00911446,.502369,-.0123423,.500023,.0124078,.50243,-.0161178,.500066,.016211,.502493,-.0203937,.500103,.0205256,.502592,-.0251684,.500166,.0253548,.502707,-.0304389,.50023,.0307029,.502881,-.0362015,.500335,.0365753,.503124,-.0424507,.500488,.0429798,.503443,-.0491582,.500686,.0499268,.504083,-.0561476,.501155,.0574541,.504668,-.0636846,.501524,.0655408,.505319,-.0716834,.501904,.0742072,.50609,-.0800925,.502321,.0834699,.507122,-.0888425,.502896,.0933603,.508414,-.097855,.503603,.10391,.509955,-.107304,.504416,.115113,.512061,-.116921,.505565,.127054,.514419,-.12689,.506732,.139709,.517529,-.136934,.508338,.153173,.522085,-.147327,.510987,.167528,.526986,-.157612,.513527,.182708,.533122,-.168213,.516717,.198881,.540807,-.178688,.520832,.215986,.550687,-.189511,.52632,.234335,.560567,-.199998,.531009,.253375,.571698,-.210652,.535839,.273499,.584364,-.220917,.541091,.294355,.599066,-.23137,.546875,.316525,.614148,-.241206,.551306,.339671,.631157,-.250379,.555187,.36531,.647919,-.258397,.556595,.392767,.666112,-.265528,.556949,.421397,.686158,-.271827,.556617,.451433,.704838,-.27674,.552975,.482131,.723957,-.280733,.547814,.513458,.74262,-.283359,.53997,.545446,.762009,-.284541,.530422,.57775,.781314,-.284507,.518546,.610434,.799116,-.283309,.504178,.643178,.817604,-.280378,.48843,.676248,.83459,-.275619,.469457,.709698,.850974,-.26856,.447698,.744245,.866747,-.260094,.424791,.777695,.881412,-.249929,.399913,.810392,.8936,-.239137,.37308,.842872,.905943,-.226818,.345705,.874677,.916408,-.213699,.31706,.906257,.927215,-.198428,.288444,.936881,.935625,-.181643,.258329,.96795,.944076,-.164386,.228488,.998216,.951229,-.146339,.199763,1.02689,.958793,-.127709,.172153,1.0535,.963219,-.107244,.144989,1.07646,.967562,-.0857764,.11685,1.09675,.974866,-.0645377,.0880571,1.11576,.983353,-.0431732,.0587352,1.13227,.992503,-.0218356,.0294181,1.1478,1.00003,605203e-9,-231013e-9,1.16207,.482935,-101177e-10,.504695,968142e-11,.477554,-251521e-9,.499071,240676e-9,.477904,-.00100683,.499436,96342e-8,.478368,-.00226636,.499899,.0021687,.477977,-.00402719,.499513,.00385384,.477993,-.00629226,.499525,.0060221,.478011,-.00906011,.499536,.00867289,.478051,-.0123305,.499566,.0118074,.478089,-.016102,.499587,.0154269,.478171,-.0203736,.499645,.0195341,.478254,-.025143,.499692,.0241318,.47839,-.0304071,.499779,.0292247,.478588,-.0361631,.499911,.0348196,.478812,-.0424023,.500046,.0409231,.479208,-.0490724,.500326,.047552,.479841,-.0560722,.500805,.0547377,.480392,-.0636125,.501152,.0624607,.481068,-.0716134,.501561,.0707473,.481898,-.0800062,.502054,.0796118,.483022,-.0886568,.502728,.0890974,.484332,-.0977553,.503479,.0992099,.486126,-.107173,.504546,.10999,.488066,-.11677,.50557,.121476,.490521,-.126725,.506849,.133672,.494232,-.136793,.50911,.146731,.498302,-.147116,.511345,.160577,.503565,-.157446,.514344,.175335,.510902,-.168121,.518824,.191207,.519263,-.178799,.523666,.208058,.528204,-.189407,.528296,.225875,.538854,-.200145,.533724,.244782,.551278,-.210701,.539833,.264753,.565222,-.221303,.546131,.285745,.579403,-.231688,.551496,.307592,.595469,-.241718,.556809,.330582,.610929,-.250992,.559641,.354995,.629433,-.259602,.562379,.382471,.648504,-.267038,.563676,.411126,.66756,-.273388,.562092,.440924,.689143,-.278788,.560807,.472118,.709056,-.282783,.555701,.503774,.729855,-.285836,.548698,.536364,.748954,-.287078,.538544,.56895,.768373,-.287133,.526711,.601991,.78827,-.285839,.512511,.635403,.807465,-.283238,.496323,.668797,.825194,-.27906,.477638,.702584,.842203,-.272286,.456253,.736393,.857749,-.263854,.432412,.77096,.874799,-.253943,.407806,.80489,.887497,-.24237,.38033,.83771,.89966,-.230278,.352446,.870376,.911753,-.21646,.323268,.902256,.923011,-.202071,.294314,.933306,.932375,-.185519,.264104,.965177,.940537,-.167604,.234035,.996303,.948904,-.149068,.20412,1.0261,.955263,-.129539,.175431,1.05304,.960303,-.109932,.148116,1.07617,.965512,-.0880572,.119693,1.09742,.973466,-.0660548,.0901619,1.11721,.98284,-.0439228,.0599875,1.13436,.992216,-.0219588,.0298975,1.15006,.999946,119402e-9,-208547e-10,1.16471,.447827,-100414e-10,.491543,914833e-11,.454778,-251257e-9,.499172,22891e-8,.453519,-.00100342,.497787,914184e-9,.45357,-.00225776,.497847,.00205701,.453578,-.00401371,.497855,.00365705,.45357,-.00627107,.497841,.00571453,.453598,-.00902968,.497864,.00823019,.453627,-.0122888,.497882,.0112049,.453684,-.0160475,.497923,.0146405,.453764,-.0203044,.49798,.0185394,.453866,-.0250576,.498049,.0229054,.453996,-.0303028,.49813,.0277424,.454196,-.0360379,.498267,.0330587,.454457,-.0422521,.498445,.0388613,.454926,-.0488393,.498812,.0451767,.455525,-.0558653,.499272,.0520153,.456074,-.0633772,.499625,.0593754,.456752,-.0713606,.500049,.0672751,.457648,-.07971,.500615,.0757447,.458849,-.0883032,.501399,.0848231,.46029,-.0974095,.502293,.0945135,.462,-.106729,.503301,.104848,.464121,-.116354,.504533,.115884,.466889,-.126214,.506172,.127652,.470744,-.136324,.508667,.14024,.47488,-.146595,.510995,.153673,.480845,-.157027,.514832,.168053,.488262,-.167658,.519506,.183508,.496547,-.178343,.524347,.199948,.506254,-.188916,.52983,.217503,.517961,-.199975,.536357,.236272,.531484,-.210624,.543641,.256096,.545496,-.221227,.550048,.277085,.559497,-.231568,.555076,.298615,.575752,-.241698,.560541,.321547,.591999,-.251172,.564156,.345602,.610654,-.260178,.567607,.371851,.630484,-.268094,.56923,.40076,.651807,-.274661,.569779,.430801,.67239,-.280331,.566791,.461939,.693024,-.284501,.562007,.493854,.715473,-.287852,.555791,.526992,.736323,-.28929,.546345,.560102,.755771,-.289405,.534,.593543,.775424,-.2881,.519114,.627256,.795447,-.285562,.502543,.661464,.815319,-.281416,.484773,.695206,.831769,-.275523,.463445,.729044,.849464,-.267516,.440269,.764069,.866775,-.257584,.415049,.799089,.881252,-.245817,.388049,.831948,.894209,-.233127,.35889,.865526,.906922,-.219579,.329915,.89818,.919686,-.204491,.300441,.930013,.929044,-.188962,.269445,.962061,.938393,-.171079,.238402,.994214,.94661,-.15199,.208204,1.02533,.953095,-.131953,.178653,1.0529,.958644,-.111233,.150684,1.0771,.963925,-.0903098,.122359,1.09855,.971995,-.0680505,.0923342,1.11874,.981658,-.0448512,.0614195,1.13635,.991649,-.0221931,.0303582,1.15238,.999985,393403e-9,-111086e-9,1.16772,.396806,-971563e-11,.457671,842355e-11,.429186,-249421e-9,.495017,21625e-8,.429324,-998052e-9,.495173,865322e-9,.429175,-.00224487,.494999,.00194637,.429129,-.00399041,.494952,.00346004,.429153,-.00623476,.494974,.00540684,.429168,-.0089773,.494983,.00778714,.429207,-.0122175,.495012,.0106022,.429257,-.0159542,.495047,.0138535,.429338,-.0201864,.495106,.0175443,.429431,-.0249104,.495165,.0216774,.429587,-.0301252,.495279,.0262594,.429796,-.0358249,.495432,.0312968,.430065,-.0419972,.495621,.0367985,.430588,-.0485144,.496061,.042798,.43113,-.0555028,.496472,.0492914,.431743,-.0629852,.496904,.0562907,.432448,-.0709256,.497369,.0638056,.433414,-.0791942,.498032,.071885,.434638,-.0877346,.498854,.0805517,.43611,-.0968056,.499812,.0898047,.437859,-.106002,.500891,.0997142,.440017,-.115648,.502198,.110289,.443236,-.125427,.504389,.121644,.44697,-.135492,.506809,.133769,.451689,-.145746,.509858,.146787,.45811,-.156219,.514247,.160793,.465305,-.166834,.518816,.175791,.474085,-.177546,.524331,.191906,.484808,-.188262,.53104,.209199,.49732,-.199346,.538511,.227825,.509693,-.209951,.544554,.247269,.524367,-.220533,.551616,.267978,.539228,-.231082,.557368,.289672,.55644,-.241342,.563782,.31268,.574204,-.250964,.568851,.33651,.593388,-.260306,.57312,.362219,.613358,-.268667,.574916,.390322,.634512,-.275591,.575053,.420478,.65563,-.281328,.572404,.451614,.678265,-.285948,.568893,.484112,.70011,-.289408,.561878,.517348,.723005,-.291328,.55359,.551355,.743744,-.291418,.541099,.585109,.763949,-.290252,.526489,.619487,.784186,-.287648,.509496,.65404,.804304,-.283782,.491484,.688649,.823629,-.278067,.470517,.723133,.84094,-.270588,.44705,.757163,.857852,-.261188,.421252,.792816,.874934,-.249313,.394191,.827248,.888709,-.236492,.365359,.861074,.902589,-.222185,.336016,.894417,.914201,-.207314,.30527,.926825,.925978,-.191146,.274532,.9595,.93512,-.174135,.243393,.991583,.943656,-.155231,.212414,1.02356,.951719,-.134403,.182005,1.05239,.957164,-.113023,.153043,1.07754,.962656,-.0914493,.124186,1.09984,.970695,-.0694179,.0941654,1.12,.980749,-.0466199,.0629671,1.13849,.991205,-.0227032,.0311146,1.15494,.999884,632388e-9,-254483e-9,1.1706,.379821,-957289e-11,.460637,789337e-11,.405188,-247483e-9,.491396,204064e-9,.404796,-989434e-9,.490914,815853e-9,.40483,-.00222607,.490949,.00183559,.40473,-.00395723,.49084,.00326332,.404731,-.00618287,.490836,.00509945,.404768,-.00890258,.490871,.00734463,.404791,-.0121156,.490883,.00999992,.404857,-.0158214,.490938,.0130676,.404943,-.0200178,.491004,.0165503,.405059,-.0247027,.491093,.0204521,.405213,-.0298729,.491205,.0247788,.405399,-.0355226,.491333,.0295373,.405731,-.0416352,.491604,.034741,.406303,-.0480807,.492116,.0404255,.406814,-.0550458,.492506,.0465732,.407404,-.0624652,.492926,.0532058,.408149,-.0702958,.493442,.0603442,.409128,-.0784623,.494136,.0680297,.410408,-.087007,.495054,.0762786,.411813,-.0959639,.495962,.0851046,.413735,-.105075,.497257,.0945878,.416137,-.114646,.498882,.104725,.41934,-.124394,.501132,.11563,.423326,-.134328,.503883,.127325,.428419,-.14458,.50747,.139911,.43484,-.154979,.511964,.153481,.442641,-.165628,.517328,.168114,.452511,-.176365,.524258,.183995,.463473,-.187298,.531248,.200953,.475564,-.198244,.538367,.219176,.488664,-.208938,.545175,.238514,.504073,-.219599,.553227,.259129,.520832,-.230378,.560653,.280997,.538455,-.240703,.567523,.303821,.55709,-.250548,.573287,.327948,.576646,-.259964,.577795,.353362,.596705,-.268721,.580077,.380336,.618053,-.276054,.58018,.4101,.640303,-.282176,.578747,.44161,.662365,-.286931,.574294,.474106,.684542,-.290521,.567035,.507549,.707984,-.292672,.558687,.541853,.730913,-.293189,.547606,.576581,.752948,-.292199,.533471,.61172,.773452,-.289508,.516395,.646339,.794715,-.285716,.497873,.682131,.814251,-.280051,.476845,.716396,.833057,-.272873,.453449,.751503,.84959,-.263982,.427857,.786085,.867022,-.252745,.400335,.821355,.882277,-.239655,.371304,.85646,.895375,-.225386,.340397,.890828,.909347,-.209587,.310005,.923532,.921885,-.193433,.2796,.956419,.932127,-.176135,.247276,.989445,.941869,-.157872,.216186,1.02221,.949735,-.137577,.185602,1.05195,.956617,-.115285,.155767,1.07822,.961974,-.0928418,.126103,1.10149,.96972,-.0700592,.0956758,1.12207,.98012,-.0474671,.0643269,1.1408,.990825,-.0238113,.0320863,1.1577,.999876,381574e-9,-812203e-10,1.17403,.367636,-961342e-11,.469176,753287e-11,.380377,-244772e-9,.485434,191797e-9,.380416,-978857e-9,.485475,767015e-9,.380376,-.00220165,.485435,.00172522,.380419,-.00391408,.485487,.00306734,.380438,-.00611549,.485505,.00479332,.380462,-.00880558,.485525,.00690391,.380496,-.0119837,.485551,.00940039,.38056,-.0156487,.485605,.0122848,.38064,-.0197988,.485666,.0155601,.380767,-.0244324,.48577,.0192313,.380909,-.0295444,.485871,.0233032,.381142,-.0351321,.48606,.0277861,.381472,-.0411535,.486336,.0326939,.382015,-.0475408,.486833,.0380565,.382523,-.0544395,.487231,.0438615,.383129,-.061784,.487683,.0501332,.383952,-.0695085,.488313,.0568996,.38498,-.0775819,.489077,.0641952,.386331,-.0860443,.490113,.0720324,.387788,-.0948406,.491099,.0804379,.389808,-.103899,.492566,.0894899,.39252,-.113313,.494601,.0992098,.395493,-.123007,.496619,.109641,.399826,-.132859,.499912,.120919,.405341,-.143077,.504061,.133107,.411932,-.153465,.508905,.146263,.420591,-.164108,.515482,.160544,.43101,-.174893,.523191,.176123,.441881,-.185839,.53026,.192757,.453919,-.196633,.537295,.210535,.468715,-.207611,.546156,.229886,.485182,-.218517,.555173,.250543,.501926,-.229249,.562728,.27221,.51785,-.239481,.567494,.294892,.536947,-.249395,.573889,.318987,.557115,-.259,.578831,.344348,.577966,-.268075,.582055,.371223,.599489,-.276115,.583307,.399834,.62479,-.282523,.583902,.431415,.647504,-.287663,.57953,.464301,.670601,-.291538,.573103,.498123,.693539,-.293842,.563731,.532662,.717385,-.294681,.553169,.567925,.741533,-.293717,.539908,.603502,.762142,-.291156,.521902,.639074,.783014,-.28719,.502815,.674439,.805158,-.281773,.482598,.710497,.823646,-.274682,.458949,.7456,.841879,-.266184,.433129,.781085,.859515,-.255682,.406064,.816,.875335,-.242849,.376509,.851074,.890147,-.228329,.345502,.886473,.903144,-.212491,.31428,.920751,.916618,-.195695,.282994,.954606,.927953,-.178267,.251091,.988402,.937414,-.159549,.219107,1.02141,.946823,-.140022,.18896,1.05167,.954651,-.118154,.158667,1.07819,.959955,-.0946636,.128808,1.1025,.96858,-.0711792,.0973787,1.12391,.97938,-.0475046,.0650965,1.14322,.990498,-.024059,.0326267,1.16077,.999844,-512408e-10,112444e-9,1.17727,.316912,-934977e-11,.425996,695559e-11,.356423,-241372e-9,.479108,179562e-9,.356272,-965292e-9,.478897,71811e-8,.356262,-.00217182,.478894,.00161574,.356265,-.00386092,.478895,.00287261,.356278,-.0060324,.478905,.00448907,.356293,-.00868565,.478914,.00646572,.356346,-.0118207,.478965,.00880438,.356395,-.0154355,.479001,.0115066,.356484,-.019529,.479075,.0145762,.356609,-.0240991,.47918,.018018,.356766,-.0291413,.479305,.0218379,.357009,-.0346498,.479512,.0260454,.357424,-.0405462,.479909,.0306657,.357899,-.0468825,.480337,.0357054,.358424,-.0536887,.480771,.0411728,.359041,-.0609416,.481242,.0470841,.359903,-.0685239,.481943,.0534831,.360932,-.0764883,.482741,.0603795,.362196,-.0848364,.483688,.0678028,.363847,-.0935002,.484947,.0758086,.365972,-.102471,.486588,.0844173,.368741,-.111751,.488787,.0937199,.372146,-.121334,.491405,.103732,.377114,-.131147,.495604,.114608,.38226,-.141213,.499436,.126345,.389609,-.151632,.505334,.139116,.397925,-.162073,.51168,.152995,.407824,-.172819,.518876,.168071,.420014,-.183929,.527639,.184495,.434266,-.195032,.537588,.20232,.447352,-.205792,.544379,.221189,.463726,-.216704,.553422,.241616,.481406,-.227531,.562074,.263298,.498707,-.238017,.568227,.286116,.518039,-.247936,.574473,.3101,.538277,-.257437,.579191,.335401,.561166,-.266829,.584807,.362246,.583189,-.275329,.586476,.390609,.606024,-.28234,.585578,.420998,.632419,-.287924,.584496,.454357,.656128,-.291972,.577766,.488233,.679953,-.29456,.56875,.523248,.704654,-.295816,.558388,.559168,.729016,-.295157,.544826,.595326,.752062,-.292779,.528273,.631864,.773138,-.288681,.508482,.667793,.794869,-.283358,.487341,.704035,.815101,-.27608,.46354,.739925,.834212,-.26767,.438672,.775539,.852368,-.257397,.411239,.810895,.870207,-.245689,.3829,.846472,.884063,-.231452,.351496,.881788,.898284,-.215561,.31895,.917438,.912964,-.198208,.287367,.952422,.924666,-.180426,.254487,.987551,.934429,-.161525,.222226,1.02142,.943485,-.141197,.191143,1.05218,.9521,-.120085,.161112,1.07937,.957876,-.0975881,.130982,1.10403,.966943,-.0726842,.0990553,1.12616,.978313,-.0483705,.0662818,1.14619,.990048,-.0239072,.0329243,1.16413,.999984,461885e-9,-772859e-10,1.18099,.321287,-935049e-11,.455413,659662e-11,.332595,-237513e-9,.471437,167562e-9,.332729,-949964e-9,.471618,670192e-9,.332305,-.00213618,.471028,.00150712,.332326,-.00379765,.471055,.00267959,.332344,-.00593353,.471072,.00418751,.332356,-.00854349,.471077,.00603172,.332403,-.0116268,.471121,.00821362,.332461,-.0151824,.47117,.0107357,.332552,-.0192088,.471251,.0136014,.332657,-.0237024,.47133,.0168152,.332835,-.0286615,.471487,.0203853,.333083,-.0340765,.471708,.0243212,.333547,-.0398563,.47219,.0286518,.333989,-.0460916,.472587,.0333763,.334532,-.0527897,.473054,.0385084,.335167,-.0599284,.473568,.0440638,.33608,-.0673514,.474362,.0500962,.337146,-.0752237,.475231,.0566022,.338462,-.083418,.476282,.0636272,.34014,-.0919382,.477615,.0712153,.342341,-.100741,.479404,.079417,.345088,-.109905,.481618,.0882631,.349049,-.119369,.485081,.0978851,.353939,-.129033,.489317,.108336,.359893,-.139038,.494309,.119698,.366945,-.149411,.499983,.132024,.375814,-.159843,.507185,.145558,.387112,-.170664,.516392,.160433,.40023,-.181897,.526519,.176648,.412555,-.192785,.53423,.193922,.427023,-.203663,.542741,.212662,.443685,-.214695,.552066,.232944,.461499,-.225561,.560762,.254495,.480975,-.236257,.569421,.277531,.501,-.24639,.576101,.301724,.521691,-.256101,.581493,.327112,.543478,-.265289,.585221,.353917,.566094,-.273938,.587614,.381941,.589578,-.281679,.587991,.41172,.614583,-.287655,.585928,.444148,.641813,-.292228,.582092,.478617,.666189,-.295172,.57398,.51397,.690475,-.29648,.561676,.550118,.715543,-.296203,.548758,.586933,.740405,-.293999,.532792,.62384,.762183,-.28998,.512735,.660723,.786069,-.28478,.492402,.69807,.806812,-.277568,.469058,.734422,.826987,-.268951,.443017,.770946,.844588,-.259049,.415501,.80699,.863725,-.2471,.387328,.842107,.879137,-.234157,.356108,.878078,.894634,-.218719,.324315,.914058,.909162,-.201293,.291813,.949922,.92072,-.18267,.258474,.985337,.93158,-.163212,.225593,1.0205,.941238,-.142771,.193986,1.05273,.949293,-.120956,.163392,1.08075,.956226,-.0985743,.132934,1.10559,.96546,-.075118,.101255,1.12823,.977403,-.0497921,.0675441,1.149,.989648,-.0241574,.0334681,1.16765,1.00001,5762e-7,-184807e-9,1.18519,.303474,-916603e-11,.4542,61243e-10,.308894,-232869e-9,.462306,155592e-9,.309426,-931661e-9,.463093,622499e-9,.308643,-.0020949,.461933,.00139979,.308651,-.0037242,.461941,.00248874,.308662,-.00581873,.46195,.00388933,.308687,-.00837818,.461974,.00560247,.308728,-.0114016,.462011,.00762948,.308789,-.0148884,.462067,.00997326,.308882,-.0188369,.462151,.0126375,.309007,-.0232436,.462263,.0156271,.30918,-.0281054,.462417,.0189498,.309442,-.0334065,.462667,.0226167,.309901,-.0390589,.463162,.0266614,.310331,-.0452042,.463555,.0310715,.310858,-.0517735,.464019,.0358698,.311576,-.0587359,.464669,.0410848,.312436,-.0660383,.465406,.0467453,.313526,-.0737266,.466339,.0528718,.314903,-.0817574,.467504,.0595039,.316814,-.090167,.469226,.0666888,.318965,-.0987555,.470981,.0744658,.322077,-.107792,.473814,.082912,.325947,-.117098,.477241,.0920846,.331008,-.126602,.48184,.102137,.337893,-.136619,.488334,.113135,.345106,-.146838,.494415,.12511,.355111,-.157357,.503275,.138356,.365095,-.167955,.510966,.152686,.378344,-.179157,.521508,.16856,.391599,-.190143,.530455,.18561,.407786,-.20123,.541275,.204308,.425294,-.212456,.551784,.224623,.444021,-.223568,.561493,.246172,.463418,-.234154,.569886,.268979,.484077,-.244546,.577116,.293411,.505513,-.254301,.582914,.318936,.527672,-.263564,.587208,.345856,.550565,-.272332,.589277,.374054,.573656,-.280011,.588426,.403276,.59827,-.286924,.587504,.43474,.624731,-.291994,.583401,.468767,.652396,-.295159,.576997,.504411,.67732,-.296954,.565863,.54114,.703147,-.296877,.552316,.57816,.728715,-.295147,.536773,.616124,.752448,-.291275,.51771,.653885,.775169,-.285905,.496087,.691537,.799307,-.279064,.474232,.729251,.819482,-.270294,.447676,.766267,.837659,-.260032,.419656,.802616,.856903,-.248497,.391328,.838583,.873325,-.235252,.360285,.874711,.889788,-.221126,.329215,.91077,.904486,-.204304,.296392,.94653,.917711,-.185562,.262159,.983828,.928969,-.165635,.229142,1.01955,.939707,-.14442,.19673,1.05317,.948167,-.122147,.165095,1.0823,.955222,-.099098,.13451,1.10791,.964401,-.0755332,.102476,1.1312,.976605,-.0513817,.0689667,1.15218,.989085,-.0258499,.034506,1.17129,.999908,617773e-9,-271268e-9,1.18961,.285803,-905752e-11,.452348,572272e-11,.284689,-22732e-8,.450581,143626e-9,.285263,-910214e-9,.451482,575099e-9,.285302,-.00204784,.451553,.00129395,.285318,-.00364057,.451574,.0023006,.28533,-.00568813,.451585,.00359547,.285361,-.00819001,.451618,.00517934,.285397,-.0111458,.45165,.007054,.285447,-.0145536,.451688,.00922167,.285527,-.0184127,.451758,.0116869,.285688,-.0227207,.451929,.0144555,.28584,-.0274712,.452055,.0175341,.286136,-.0326278,.452369,.0209406,.286574,-.0381792,.452853,.0246965,.287012,-.0441879,.453272,.0287996,.287542,-.0506096,.453752,.033268,.288299,-.0573634,.454488,.0381504,.289186,-.0645458,.455294,.0434447,.290302,-.0720405,.456301,.0491973,.291776,-.0799046,.457648,.0554453,.29372,-.088117,.459483,.0622311,.296052,-.0965328,.461571,.0695992,.299563,-.105409,.465085,.077658,.30335,-.114553,.468506,.0864176,.309167,-.123917,.474423,.0961078,.31529,-.13381,.47995,.106643,.324163,-.144021,.488592,.118322,.333272,-.154382,.496461,.131133,.344224,-.165015,.50562,.145208,.357733,-.176168,.516719,.16073,.373046,-.187468,.528513,.177807,.38788,-.198488,.537713,.196072,.405133,-.209545,.547999,.21605,.423845,-.220724,.55759,.237484,.443777,-.231518,.566246,.26039,.464824,-.242035,.574326,.284835,.486635,-.251898,.58037,.310518,.51012,-.261304,.58568,.337678,.535301,-.270384,.590197,.366242,.559193,-.27841,.590569,.395873,.583544,-.285325,.588161,.426857,.608834,-.291113,.584249,.459477,.635753,-.294882,.57763,.494734,.664367,-.297088,.569479,.532023,.689688,-.297364,.555064,.569629,.715732,-.295949,.539522,.608124,.741307,-.292259,.521613,.646231,.764949,-.287063,.49969,.684938,.788599,-.28012,.476747,.723548,.81048,-.27153,.45116,.761135,.831372,-.261289,.424101,.798916,.850092,-.249559,.39443,.835952,.867777,-.236348,.363849,.871606,.884632,-.221569,.332477,.907843,.90047,-.20618,.300667,.944187,.914524,-.188771,.266552,.981371,.926892,-.168362,.232349,1.01841,.937951,-.146761,.199359,1.05308,.947236,-.123813,.1675,1.0839,.954367,-.099984,.136166,1.11047,.963907,-.0759278,.103808,1.13414,.976218,-.0511367,.0697061,1.15575,.988772,-.0267415,.0352529,1.17531,.999888,-520778e-9,289926e-9,1.19389,.263546,-883274e-11,.441896,526783e-11,.262352,-221849e-9,.439889,132311e-9,.262325,-886683e-9,.439848,528824e-9,.26228,-.00199476,.439765,.00118975,.262372,-.00354671,.439922,.00211568,.26239,-.00554141,.439941,.00330652,.262412,-.00797888,.439961,.00476346,.262453,-.0108584,.440002,.00648818,.262528,-.0141788,.440085,.0084835,.262615,-.017938,.440166,.0107533,.262744,-.0221346,.440291,.0133044,.262939,-.026762,.440493,.0161445,.263277,-.0317573,.440889,.0192974,.26368,-.0371832,.441338,.0227699,.264106,-.0430371,.441753,.0265698,.264624,-.0493035,.442227,.0307178,.265378,-.0558669,.442985,.0352616,.266253,-.0628718,.443795,.0401968,.267478,-.0701569,.445008,.04559,.269062,-.077845,.446599,.0514539,.270926,-.0857941,.448349,.0578382,.273693,-.0940773,.451221,.0648363,.276746,-.102704,.454097,.0724389,.281693,-.111735,.459517,.0808744,.287335,-.121004,.46531,.0901551,.29448,-.130734,.472605,.100371,.30257,-.140777,.480251,.111644,.312465,-.15111,.489444,.124111,.324856,-.16189,.500919,.137979,.33774,-.172946,.511317,.153163,.35255,-.184152,.522684,.169817,.367786,-.19522,.53248,.187886,.385474,-.20632,.543326,.207634,.404976,-.217744,.554109,.229165,.425203,-.228691,.563395,.252068,.446704,-.239299,.571565,.276471,.468951,-.249348,.577935,.302323,.493487,-.258933,.584309,.329882,.517861,-.268009,.58773,.358525,.543309,-.276238,.589612,.388585,.569704,-.28356,.589294,.419787,.594871,-.289497,.585137,.452114,.622555,-.294452,.580356,.486466,.651167,-.296918,.57185,.523079,.677332,-.297647,.558428,.5611,.703718,-.296321,.542232,.599592,.730262,-.293339,.524541,.639138,.754304,-.288036,.502691,.677978,.778051,-.281018,.479212,.716537,.801557,-.272414,.454071,.75586,.822559,-.262419,.425952,.794477,.843051,-.250702,.397313,.832664,.86232,-.237264,.366534,.869876,.879044,-.222716,.334816,.906973,.896362,-.206827,.303143,.943558,.910342,-.189659,.269699,.979759,.924119,-.171108,.236411,1.01718,.935374,-.149579,.202224,1.05289,.944295,-.126295,.16989,1.08496,.952227,-.101511,.138089,1.11256,.962041,-.0766392,.105053,1.1375,.97528,-.0511967,.070329,1.15983,.988476,-.025463,.0351268,1.17987,.999962,286808e-10,145564e-10,1.19901,.227089,-841413e-11,.404216,472707e-11,.239725,-215083e-9,.426708,120833e-9,.239904,-860718e-9,.427028,483555e-9,.239911,-.00193661,.427039,.00108806,.239914,-.00344276,.42704,.00193457,.239933,-.00537907,.427064,.00302363,.239944,-.00774482,.427065,.00435604,.239993,-.01054,.427122,.00593398,.240052,-.0137626,.427179,.00775987,.240148,-.0174115,.427279,.00983854,.240278,-.021484,.42741,.0121763,.240472,-.0259729,.427618,.0147827,.240839,-.0308131,.428086,.0176837,.241201,-.0360893,.428482,.0208775,.241626,-.0417723,.428907,.0243821,.242207,-.0478337,.42952,.0282228,.24298,-.0542199,.430332,.0324333,.243881,-.0610015,.431222,.0370252,.245123,-.0680874,.432512,.0420535,.24667,-.0755482,.434088,.0475414,.248779,-.0832873,.436323,.0535542,.251665,-.0913546,.439509,.0601716,.255305,-.0998489,.443478,.0674282,.260049,-.108576,.448713,.0754673,.266192,-.117754,.455524,.084339,.273158,-.127294,.4627,.0941683,.282131,-.137311,.472068,.10515,.293332,-.147736,.483565,.117402,.304667,-.158357,.493702,.130824,.317785,-.169274,.504708,.145724,.333245,-.180595,.517107,.16215,.349843,-.191892,.528849,.180149,.367944,-.203168,.540301,.199746,.387579,-.214443,.551514,.221047,.408247,-.225624,.560906,.243981,.43014,-.236422,.56959,.268513,.452669,-.24654,.576098,.294409,.476196,-.256157,.580925,.322002,.501157,-.265289,.584839,.351052,.527632,-.273671,.587614,.3812,.555754,-.281254,.589119,.412994,.581682,-.287448,.585204,.445498,.608196,-.292614,.579006,.479505,.635661,-.296068,.571297,.514643,.664999,-.297395,.560855,.552213,.691039,-.296645,.544525,.591365,.7179,-.293785,.526535,.630883,.744059,-.289089,.50545,.670932,.76863,-.282239,.482514,.710904,.793273,-.273688,.457246,.750259,.814731,-.26328,.428872,.78948,.835603,-.251526,.399384,.828597,.85489,-.238339,.368811,.866892,.872828,-.223607,.336617,.90563,.889462,-.207538,.303997,.943538,.904929,-.190297,.270812,.980591,.919101,-.172034,.237453,1.01935,.930536,-.152058,.204431,1.05498,.941223,-.129515,.172495,1.08717,.94982,-.104263,.140175,1.11551,.960592,-.0781944,.106465,1.14098,.974629,-.051688,.0711592,1.16418,.98811,-.0253929,.0354432,1.18465,1.00004,804378e-9,-330876e-9,1.20462,.214668,-821282e-11,.406619,433582e-11,.218053,-208144e-9,.413025,109887e-9,.217987,-832212e-9,.412901,439362e-9,.217971,-.00187246,.412876,988623e-9,.217968,-.00332855,.41286,.00175772,.217985,-.00520055,.412882,.00274729,.218014,-.00748814,.412916,.00395842,.218054,-.0101901,.412957,.00539274,.218106,-.0133057,.413005,.00705348,.218217,-.0168342,.413139,.00894581,.218338,-.0207707,.413258,.0110754,.21855,-.0251001,.413509,.0134551,.218913,-.0297861,.413992,.0161081,.219265,-.0348956,.414383,.0190307,.219696,-.0403909,.414839,.0222458,.220329,-.0462003,.415567,.025792,.220989,-.0524208,.41621,.0296637,.222027,-.058948,.417385,.0339323,.223301,-.0658208,.418779,.0386055,.224988,-.0730347,.420665,.0437355,.227211,-.0805274,.423198,.0493844,.230131,-.088395,.426566,.0556135,.233908,-.0966208,.43091,.0624829,.239092,-.105223,.437148,.0701636,.245315,-.11424,.444302,.0786949,.253166,-.12368,.453262,.0882382,.262374,-.133569,.463211,.0988682,.273145,-.143836,.474271,.110727,.285512,-.154577,.4863,.123945,.299512,-.165501,.498817,.138581,.314287,-.176698,.510341,.154676,.331083,-.188066,.522583,.172459,.349615,-.199597,.534879,.191979,.369318,-.210843,.546083,.21309,.390377,-.222068,.5562,.235998,.412411,-.233059,.564704,.260518,.435715,-.24357,.572314,.286795,.461196,-.253356,.579395,.314559,.485587,-.262362,.581985,.343581,.511908,-.270895,.584347,.374367,.539798,-.278452,.58505,.406015,.567974,-.284877,.583344,.439168,.594303,-.290124,.577348,.473005,.622951,-.294183,.570751,.508534,.652404,-.296389,.561541,.544764,.679291,-.296605,.546426,.582927,.706437,-.294095,.528599,.622681,.734485,-.28978,.508676,.663567,.758841,-.283363,.484768,.704092,.78537,-.275015,.460434,.745101,.807315,-.264689,.432166,.784712,.8271,-.252597,.401807,.824241,.849191,-.239154,.371458,.863803,.867046,-.224451,.338873,.903063,.8852,-.208342,.306175,.942763,.901771,-.190684,.272759,.981559,.915958,-.172105,.239306,1.02048,.928046,-.152214,.206071,1.05765,.939961,-.130247,.17367,1.08999,.948711,-.10672,.142201,1.11829,.959305,-.0808688,.108454,1.14467,.973009,-.0539145,.0728109,1.16839,.987631,-.0262947,.0360625,1.19004,.999978,.00132758,-559424e-9,1.21058,.193925,-793421e-11,.391974,392537e-11,.196746,-200315e-9,.397675,991033e-10,.19667,-801099e-9,.397521,396342e-9,.196633,-.00180246,.397445,891829e-9,.196654,-.00320443,.397482,.00158582,.196659,-.00500647,.39748,.00247867,.196683,-.0072086,.397506,.00357167,.196728,-.00981001,.397562,.00486675,.196792,-.0128096,.397633,.00636707,.19689,-.0162055,.397746,.00807752,.197017,-.0199943,.397884,.0100052,.19729,-.024139,.39827,.0121691,.197583,-.0286671,.398639,.0145755,.197927,-.0335858,.399034,.0172355,.198383,-.0388806,.399554,.0201718,.199002,-.0444736,.400289,.0234194,.199739,-.0504583,.401111,.026984,.200784,-.056729,.402349,.0309217,.202075,-.0633643,.403841,.0352496,.203898,-.0703247,.406076,.0400313,.206199,-.0775565,.408841,.0453282,.209252,-.085184,.41259,.0511794,.213638,-.0931994,.418288,.0577459,.21881,-.101617,.424681,.0650508,.225642,-.11052,.433429,.0732759,.233717,-.119772,.442897,.0824683,.242823,-.129505,.452888,.0927484,.254772,-.139906,.466407,.104417,.266603,-.150402,.477413,.117211,.28073,-.161395,.490519,.131598,.295399,-.172465,.50201,.147407,.312705,-.183982,.515311,.165031,.331335,-.195532,.52786,.184336,.351037,-.206971,.5392,.205361,.372175,-.218117,.54941,.228043,.394548,-.229327,.558642,.25267,.419598,-.240052,.567861,.279071,.443922,-.249937,.573332,.306882,.471495,-.259407,.58013,.33661,.496769,-.267749,.580564,.367328,.524951,-.275524,.581696,.399753,.55318,-.282148,.579885,.433134,.581577,-.287533,.575471,.467534,.609231,-.291612,.567445,.502943,.637478,-.293911,.557657,.53871,.667795,-.295096,.546535,.576568,.694272,-.294073,.529561,.614929,.722937,-.290386,.510561,.655909,.749682,-.284481,.487846,.697663,.774754,-.276188,.462487,.738515,.799301,-.266215,.43481,.779802,.820762,-.254116,.404879,.820045,.843231,-.240393,.374559,.860294,.861857,-.225503,.341582,.900965,.880815,-.209382,.308778,.941727,.89766,-.19155,.275232,.980916,.912926,-.172346,.240938,1.02162,.926391,-.151799,.207223,1.0597,.938429,-.129968,.17484,1.09291,.947834,-.10651,.142984,1.12248,.958432,-.0824098,.109902,1.149,.972402,-.0565242,.0744454,1.1733,.987191,-.028427,.0373794,1.19538,.999975,385685e-10,-4203e-8,1.21676,.178114,-766075e-11,.385418,354027e-11,.176074,-191966e-9,.381002,887135e-10,.17601,-767549e-9,.380861,354715e-9,.17598,-.00172696,.380798,798168e-9,.175994,-.00307012,.380824,.00141928,.176017,-.00479684,.380858,.00221859,.176019,-.00690648,.380839,.00319714,.176072,-.00939888,.380913,.0043572,.176131,-.0122726,.380979,.005702,.176239,-.0155264,.38112,.00723689,.176371,-.0191551,.381272,.00896907,.176638,-.023117,.381669,.0109194,.176912,-.0274633,.382015,.0130903,.177279,-.032173,.382476,.0154949,.17774,-.0372219,.383041,.0181669,.178344,-.0426132,.38378,.0211209,.179153,-.0483309,.384773,.0243899,.180197,-.0543447,.386076,.0280062,.181581,-.0607122,.387809,.032004,.18344,-.0673855,.390205,.036453,.186139,-.0743989,.393944,.0414162,.189432,-.0817731,.39832,.0469394,.193795,-.0895464,.404188,.0531442,.199641,-.0978264,.4121,.0601374,.206679,-.106499,.421425,.0680078,.214865,-.115654,.431504,.076919,.224406,-.125268,.442526,.0868835,.235876,-.135475,.455465,.0981875,.248335,-.146023,.4681,.110759,.262868,-.157016,.482069,.124885,.278962,-.168245,.496182,.140645,.295082,-.17958,.507401,.157838,.313738,-.191227,.520252,.17695,.333573,-.202718,.531708,.197817,.356433,-.214424,.544509,.220785,.378853,-.225492,.55373,.245306,.402717,-.236236,.561348,.271593,.428375,-.246568,.568538,.299776,.454724,-.255941,.573462,.329433,.482291,-.264511,.576356,.360598,.509706,-.272129,.576446,.393204,.538805,-.278979,.575298,.427227,.568919,-.284528,.572154,.462157,.596804,-.288801,.564691,.497997,.625987,-.291334,.555134,.534467,.656414,-.292722,.545051,.571736,.683916,-.292185,.528813,.610158,.711809,-.290043,.51106,.649061,.739547,-.285246,.490103,.690081,.766914,-.277647,.465523,.732554,.791375,-.267603,.437718,.773982,.814772,-.256109,.40882,.81609,.836691,-.242281,.377823,.856849,.856984,-.227155,.34496,.898363,.876332,-.210395,.311335,.939471,.894988,-.192612,.277703,.980799,.911113,-.173236,.243019,1.02215,.924092,-.152258,.209037,1.06139,.936828,-.129575,.175909,1.09635,.946869,-.10594,.143852,1.12707,.958284,-.081318,.110289,1.15419,.972325,-.0556133,.0747232,1.17909,.986878,-.0297899,.0383149,1.20163,.999936,-.00197169,912402e-9,1.22338,.151174,-720365e-11,.351531,309789e-11,.155594,-18279e-8,.361806,78608e-9,.156099,-731569e-9,.362982,314615e-9,.156053,-.00164578,.362869,707845e-9,.156093,-.0029261,.362961,.00125884,.156099,-.00457155,.362959,.00196783,.15612,-.00658224,.362982,.00283622,.156168,-.00895774,.363048,.00386625,.156221,-.0116962,.363101,.00506109,.156324,-.0147973,.363241,.00642675,.156476,-.0182503,.363448,.00797175,.156731,-.0220266,.36384,.00971484,.156994,-.026176,.364179,.0116575,.157341,-.0306701,.36462,.0138207,.157867,-.0354591,.365364,.0162356,.15846,-.0406141,.366111,.0189092,.159308,-.0460519,.367248,.021885,.160426,-.0518096,.368767,.0252004,.161877,-.0578906,.370745,.0288825,.163995,-.0642812,.373831,.0330139,.16655,-.0710067,.377366,.0376283,.170237,-.0781522,.382799,.0428493,.175096,-.0857172,.389915,.0487324,.181069,-.0938025,.398487,.0554214,.188487,-.102363,.408799,.0630189,.197029,-.111343,.419991,.071634,.206684,-.120812,.431455,.0812797,.218698,-.131033,.445746,.0923651,.230726,-.141373,.457471,.104545,.245516,-.152387,.472388,.118449,.261551,-.163628,.486671,.133923,.277437,-.174814,.49762,.150849,.296662,-.186713,.51162,.169924,.31795,-.198513,.525435,.190848,.339422,-.210119,.536267,.213504,.362143,-.221354,.545982,.237947,.387198,-.23224,.555364,.264427,.412349,-.24257,.561489,.292519,.439274,-.252284,.566903,.322561,.466779,-.261023,.569614,.353952,.496011,-.26899,.571589,.387278,.524964,-.275498,.570325,.421356,.556518,-.281449,.568792,.457314,.584363,-.285526,.560268,.493199,.614214,-.28844,.55205,.530276,.645684,-.289777,.541906,.56855,.673446,-.289722,.526464,.606927,.701924,-.287792,.509872,.645945,.73037,-.284315,.490649,.685564,.757405,-.278804,.467964,.726511,.784025,-.269543,.441468,.768601,.808255,-.258117,.41216,.811321,.830739,-.244728,.380606,.853496,.851914,-.229428,.348111,.895374,.872586,-.212508,.314732,.937674,.891581,-.194025,.280338,.979869,.907641,-.174711,.245203,1.02253,.922233,-.153509,.21077,1.06371,.935878,-.130418,.177399,1.09972,.946338,-.105558,.144507,1.13124,.957265,-.080059,.110508,1.15973,.971668,-.0539766,.0742311,1.18515,.9866,-.0277101,.0375224,1.20858,1.00021,-515531e-9,135226e-9,1.23135,.137468,-686011e-11,.345041,273315e-11,.13703,-173378e-9,.343936,690761e-10,.136986,-693048e-9,.34383,276126e-9,.136964,-.00155931,.343761,621337e-9,.137003,-.00277211,.343863,.00110494,.137012,-.00433103,.343868,.00172744,.137043,-.00623606,.343916,.00249022,.13709,-.0084868,.343986,.00339559,.137145,-.0110814,.344045,.00444687,.137242,-.0140187,.344177,.00565007,.137431,-.0172713,.344491,.00701868,.137644,-.0208605,.344805,.00856042,.13791,-.024792,.345172,.0102863,.138295,-.0290461,.345734,.0122185,.138764,-.0335957,.346371,.0143771,.139415,-.038467,.347298,.0167894,.140272,-.0436176,.348527,.0194895,.141457,-.0491016,.350276,.0225043,.14303,-.0548764,.352646,.0258962,.145289,-.0610096,.356206,.0297168,.148502,-.0674777,.361488,.0340562,.152188,-.074345,.367103,.0389534,.157359,-.0817442,.375247,.0445541,.16379,-.0896334,.385064,.0509535,.171376,-.098005,.396082,.0582611,.179901,-.106817,.407418,.06654,.189892,-.116239,.420031,.075994,.201838,-.12627,.434321,.0867239,.214311,-.136701,.447631,.0987517,.228902,-.147616,.462046,.112353,.245107,-.158871,.476942,.127605,.262292,-.170261,.490285,.144469,.281215,-.182017,.503783,.163282,.301058,-.193729,.515505,.183873,.322752,-.205512,.52682,.206466,.347547,-.217214,.539473,.231194,.370969,-.227966,.546625,.257288,.397533,-.238555,.55472,.285789,.42398,-.248278,.559468,.315746,.452928,-.257422,.564095,.347724,.482121,-.265306,.565426,.380922,.510438,-.272043,.563205,.415639,.541188,-.277614,.561087,.451702,.571667,-.281927,.554922,.48845,.602432,-.285015,.546838,.526442,.634126,-.286512,.537415,.564896,.662816,-.286388,.522906,.604037,.692411,-.284734,.507003,.643795,.720946,-.281297,.488398,.68298,.748293,-.276262,.466353,.723466,.776931,-.269978,.443573,.764565,.801065,-.260305,.415279,.805838,.825843,-.247426,.384773,.849985,.84807,-.232437,.352555,.893174,.869122,-.215806,.318642,.936564,.888963,-.197307,.28381,.980253,.905547,-.177203,.247888,1.02463,.918554,-.155542,.212904,1.06714,.931395,-.131948,.1787,1.10451,.941749,-.106723,.145902,1.13694,.954551,-.0804939,.111193,1.1666,.970279,-.0534239,.0744697,1.19249,.986117,-.0257452,.0368788,1.21665,.999938,.00190634,-.0010291,1.23981,.118493,-647439e-11,.32272,23772e-10,.118765,-163023e-9,.323456,598573e-10,.118772,-65212e-8,.323477,239447e-9,.118843,-.00146741,.323657,538881e-9,.118804,-.00260846,.323553,95826e-8,.118826,-.00407576,.323595,.00149845,.118846,-.00586826,.323617,.00216047,.118886,-.00798578,.32367,.00294679,.118947,-.0104273,.323753,.00386124,.119055,-.0131909,.323922,.00490999,.119241,-.0162444,.324251,.00610804,.11944,-.0196339,.324544,.00745805,.119739,-.0233378,.325026,.00897805,.12011,-.0273179,.325586,.0106895,.120571,-.0316143,.326231,.0126073,.12124,-.0361939,.327264,.0147654,.122162,-.0410511,.328733,.0172001,.123378,-.0462233,.330659,.0199375,.125183,-.0517109,.333754,.0230498,.127832,-.0575652,.338507,.026597,.130909,-.0637441,.343666,.0306345,.135221,-.0704302,.351063,.035273,.14082,-.0776364,.360604,.0406137,.146781,-.0852293,.369638,.0466788,.155121,-.0935351,.3827,.0537628,.16398,-.102234,.39522,.0617985,.173926,-.111465,.40793,.07097,.185137,-.121296,.42105,.0813426,.19826,-.13169,.435735,.0931596,.212938,-.142614,.450932,.106547,.229046,-.153884,.465726,.121575,.246246,-.165382,.479461,.138286,.264637,-.176806,.492106,.15666,.284959,-.188793,.504774,.17728,.308157,-.200763,.518805,.19988,.330951,-.21239,.528231,.224293,.3549,-.223521,.536376,.250541,.381502,-.234169,.544846,.278902,.409529,-.244077,.551717,.309227,.437523,-.253363,.55517,.341426,.467624,-.261659,.557772,.37518,.497268,-.268498,.556442,.41007,.528294,-.274018,.553915,.446445,.559053,-.278169,.549153,.483779,.589329,-.281229,.539878,.522249,.622503,-.282902,.53162,.561754,.652382,-.282815,.518119,.601544,.681847,-.281247,.502187,.641574,.712285,-.277986,.484824,.682633,.740094,-.273017,.463483,.723426,.768478,-.266692,.441299,.763747,.794556,-.258358,.415238,.805565,.819408,-.248807,.386912,.847254,.843411,-.236214,.356165,.891091,.862397,-.219794,.320562,.936174,.883113,-.201768,.285322,.982562,.90023,-.181672,.249713,1.02862,.915192,-.159279,.214546,1.07163,.928458,-.134725,.180285,1.10995,.94069,-.10913,.147119,1.14354,.953409,-.0821315,.112492,1.17372,.969537,-.0542677,.0752014,1.20043,.985612,-.0259096,.0370361,1.22528,.999835,.00298198,-.00151801,1.24959,.10097,-602574e-11,.300277,202619e-11,.101577,-152164e-9,.302077,511662e-10,.101572,-608889e-9,.302066,204751e-9,.101566,-.00136997,.302047,460753e-9,.101592,-.00243557,.302114,819497e-9,.101608,-.0038053,.30214,.00128154,.101627,-.00547906,.30216,.0018483,.101669,-.00745647,.302224,.00252223,.101732,-.00973615,.302318,.00330716,.101844,-.0123097,.302513,.00421061,.102025,-.0151681,.30285,.00524481,.102224,-.0183334,.303166,.0064154,.102515,-.0217819,.303654,.00774063,.102886,-.0255067,.304243,.0092398,.103395,-.029514,.305089,.0109339,.104109,-.0337912,.306301,.0128561,.105074,-.0383565,.30798,.0150338,.10654,-.0432132,.310726,.0175228,.108478,-.0484244,.314351,.0203648,.111015,-.0539339,.319032,.0236325,.114682,-.0598885,.32605,.0274188,.11911,-.0663375,.334109,.0317905,.124736,-.0733011,.344013,.0368502,.131479,-.0807744,.355358,.0427104,.139283,-.0888204,.367614,.0494788,.148054,-.0973394,.380072,.0572367,.159037,-.10665,.395678,.0662704,.169794,-.116221,.40795,.0763192,.18314,-.126632,.423546,.087956,.197515,-.137383,.438213,.101042,.213514,-.148641,.453248,.115827,.23065,-.160117,.46688,.132283,.249148,-.171807,.479962,.150644,.270219,-.183695,.494618,.171073,.292338,-.195574,.506937,.193378,.314999,-.207205,.516463,.217585,.340991,-.218955,.528123,.24428,.367982,-.229917,.537025,.272784,.39432,-.239737,.541627,.302742,.423364,-.249048,.546466,.335112,.453751,-.257329,.549466,.369032,.48416,-.264623,.549503,.404577,.515262,-.270411,.547008,.441337,.547036,-.274581,.542249,.479162,.576614,-.277266,.533015,.517904,.611143,-.279144,.525512,.558508,.640989,-.279001,.51154,.598995,.671182,-.277324,.495641,.639935,.700848,-.273908,.477526,.681017,.729862,-.269063,.457955,.722764,.758273,-.262282,.434846,.764349,.784121,-.254281,.409203,.806206,.809798,-.24505,.382694,.848617,.834953,-.233861,.354034,.892445,.856817,-.221308,.321764,.936263,.877609,-.205996,.288118,.982401,.897489,-.186702,.253277,1.02975,.913792,-.164618,.217963,1.07488,.92785,-.140023,.183221,1.11487,.940378,-.11328,.149385,1.14947,.95273,-.0853958,.114152,1.1807,.969059,-.0568698,.0769845,1.20912,.985574,-.0276502,.0381186,1.23498,.999943,.00239052,-.00126861,1.25987,.0852715,-560067e-11,.279021,171162e-11,.0854143,-140871e-9,.279483,430516e-10,.0854191,-563385e-9,.2795,172184e-9,.0854188,-.00126753,.279493,387464e-9,.0854229,-.00225337,.279501,68918e-8,.0854443,-.00352086,.279549,.00107803,.0854697,-.00506962,.279591,.00155536,.0855093,-.00689873,.279652,.00212354,.0855724,-.00900821,.279752,.00278703,.0856991,-.0113799,.280011,.0035551,.085855,-.0140314,.280297,.00443449,.0860682,-.016963,.280682,.00543636,.086344,-.0201438,.281159,.0065788,.0867426,-.0235999,.281886,.00787977,.087239,-.0273069,.282745,.0093606,.0879815,-.031269,.284139,.011056,.0891258,-.035531,.28647,.0130065,.0906909,-.0400947,.289708,.0152495,.0927624,-.0449638,.293904,.0178454,.0958376,-.0502427,.300471,.0208915,.0995827,-.0559514,.30806,.0244247,.104526,-.0622152,.317874,.0285721,.110532,-.0690046,.329332,.0334227,.117385,-.0763068,.341217,.0390466,.12522,-.084184,.353968,.0455786,.134037,-.0925248,.366797,.0530773,.144014,-.101487,.380209,.0617424,.156013,-.111273,.395956,.071777,.168872,-.121431,.41053,.0830905,.183089,-.132105,.425073,.0959341,.198763,-.143286,.439833,.110448,.216159,-.154841,.454507,.126769,.234859,-.166588,.468368,.14495,.255879,-.178626,.482846,.165233,.27677,-.190218,.493489,.187217,.301184,-.202227,.506549,.211659,.325852,-.213764,.5158,.237922,.352824,-.22487,.525442,.26632,.380882,-.235246,.532487,.296691,.410137,-.244847,.537703,.329179,.439787,-.253122,.540361,.363135,.472291,-.260517,.542734,.399222,.501856,-.266519,.538826,.436352,.534816,-.270905,.535152,.474505,.565069,-.273826,.525979,.513988,.597154,-.275333,.516394,.554852,.630473,-.275314,.506206,.596592,.660574,-.273323,.489769,.638117,.692015,-.270008,.472578,.680457,.720647,-.265001,.452134,.723008,.750528,-.258311,.430344,.765954,.777568,-.250046,.405624,.809012,.80387,-.240114,.378339,.852425,.828439,-.228737,.349877,.895346,.851472,-.216632,.318968,.940695,.873906,-.202782,.287489,.987235,.89467,-.187059,.254394,1.03348,.912281,-.168818,.221294,1.07812,.927358,-.146494,.18675,1.11928,.940385,-.120009,.152322,1.15609,.952672,-.0917183,.117514,1.18875,.968496,-.0620321,.0797405,1.21821,.985236,-.0314945,.0402383,1.24523,.99998,-575153e-9,110644e-9,1.27133,.0702429,-512222e-11,.255273,140947e-11,.0702981,-128826e-9,.255469,354488e-10,.0703691,-515562e-9,.255727,141874e-9,.0703805,-.00116,.255754,31929e-8,.0703961,-.00206224,.255813,567999e-9,.0704102,-.00322223,.255839,88871e-8,.0704298,-.00463928,.255863,.00128272,.0704759,-.00631375,.255953,.00175283,.0705434,-.00824317,.256079,.00230342,.0706693,-.010412,.25636,.0029443,.0708189,-.0128439,.256647,.00368031,.0710364,-.0155177,.257084,.00452614,.0713223,-.0184374,.257637,.00549706,.0717182,-.0216002,.258416,.00661246,.072321,-.0249966,.259699,.00790147,.0731446,-.0286566,.261475,.0093884,.0743352,-.0325888,.264132,.0111186,.0760676,-.036843,.26815,.013145,.078454,-.0414292,.273636,.0155251,.0818618,-.0464634,.281653,.0183525,.0857382,-.0519478,.289992,.0216642,.0908131,-.0579836,.30066,.0255956,.0967512,-.0645124,.312204,.0301954,.103717,-.0716505,.325001,.0356017,.111596,-.0793232,.338129,.041896,.120933,-.087645,.352853,.0492447,.130787,-.096492,.366192,.0576749,.142311,-.105973,.380864,.0673969,.155344,-.116182,.396575,.0785899,.169535,-.126815,.411443,.0912377,.185173,-.138015,.426256,.105607,.201755,-.149325,.439607,.121551,.221334,-.161207,.455467,.139608,.241461,-.173162,.469096,.159591,.26294,-.18504,.481014,.18156,.286776,-.196881,.493291,.205781,.311596,-.208311,.503556,.231819,.338667,-.219671,.513268,.260274,.366021,-.230451,.519414,.290862,.395875,-.240131,.526766,.323196,.425564,-.248566,.52905,.357071,.457094,-.256195,.530796,.393262,.488286,-.262331,.528703,.430797,.522291,-.267141,.52727,.470231,.554172,-.270411,.519848,.510477,.586427,-.271986,.510307,.551594,.619638,-.27192,.499158,.593849,.650656,-.269817,.483852,.636314,.68284,-.266267,.467515,.679679,.714356,-.26113,.44931,.723884,.742717,-.254067,.425789,.767245,.770894,-.245652,.401144,.811819,.797358,-.235554,.374224,.856315,.823377,-.223896,.346167,.901077,.847456,-.210865,.316056,.946502,.870697,-.196574,.284503,.993711,.891068,-.180814,.251628,1.04134,.909267,-.163314,.219065,1.08609,.925653,-.143304,.186446,1.12702,.940017,-.121322,.153416,1.16371,.952398,-.0973872,.120334,1.19712,.967568,-.0698785,.08352,1.22791,.984772,-.0390031,.0439209,1.25672,1.00026,-.0070087,.00315668,1.28428,.0556653,-459654e-11,.227325,112556e-11,.0565238,-116382e-9,.230826,284985e-10,.0565717,-465666e-9,.231026,114036e-9,.0565859,-.00104773,.231079,256656e-9,.0565761,-.00186255,.231025,45663e-8,.0565913,-.00291002,.231058,714664e-9,.0566108,-.00418998,.231085,.00103224,.0566532,-.00570206,.231169,.00141202,.0567473,-.00743666,.231417,.00186018,.0568567,-.00940298,.231661,.00238264,.0569859,-.0115991,.231895,.00298699,.0572221,-.0140096,.232456,.00368957,.057519,-.0166508,.233096,.00450303,.0579534,-.01951,.234094,.00544945,.0585922,-.0225991,.235629,.00655564,.0595647,-.0259416,.238106,.00785724,.0609109,-.0295661,.241557,.00939127,.0628751,-.0335126,.246652,.0112198,.0656908,-.0378604,.254091,.0134168,.0691347,-.0426543,.262666,.0160374,.0732165,-.0478967,.272029,.0191514,.0782863,-.0536716,.283007,.0228597,.0843973,-.0600683,.295732,.0272829,.0913598,-.0670095,.308779,.032484,.0994407,-.0745516,.322886,.0385886,.108189,-.082712,.336408,.0457133,.118574,-.0914927,.351692,.0539832,.129989,-.100854,.366502,.0635162,.142722,-.110837,.381675,.0744386,.156654,-.121353,.3963,.0868483,.172151,-.132414,.411477,.100963,.188712,-.143809,.42508,.116795,.208093,-.155765,.441328,.134715,.227936,-.167608,.454328,.154396,.249495,-.179579,.467235,.176179,.27362,-.191488,.480248,.200193,.296371,-.202618,.487886,.225775,.324234,-.214133,.499632,.25441,.353049,-.225212,.509532,.285077,.381785,-.234875,.514265,.317047,.414038,-.244205,.521282,.351874,.445251,-.252145,.522931,.388279,.476819,-.258433,.520947,.425825,.509209,-.263411,.517669,.465104,.542759,-.266732,.512841,.505741,.574822,-.268263,.503317,.547611,.609324,-.268489,.493035,.590953,.641772,-.266941,.478816,.63488,.674049,-.263297,.462863,.679072,.705071,-.257618,.442931,.723487,.734709,-.250625,.421299,.768708,.763704,-.24179,.397085,.814375,.791818,-.231115,.370577,.859907,.817439,-.21922,.34232,.906715,.843202,-.205658,.312627,.953943,.866639,-.190563,.280933,1.00185,.888129,-.173978,.248393,1.05105,.907239,-.155485,.216007,1.09704,.923893,-.134782,.183233,1.13857,.938882,-.11249,.150376,1.17539,.952464,-.0890706,.117177,1.20924,.968529,-.0646523,.0813095,1.24055,.984763,-.038606,.0439378,1.27018,1.00053,-.01238,.00598668,1.29873,.0437928,-409594e-11,.204012,8.79224e-7,.0440166,-103395e-9,.205049,221946e-10,.0440529,-413633e-9,.205225,887981e-10,.0440493,-930594e-9,.2052,199858e-9,.0439884,-.00165352,.204901,355495e-9,.0440716,-.0025849,.205255,556983e-9,.0440968,-.00372222,.205311,805326e-9,.0441359,-.00506478,.205391,.00110333,.0442231,-.00660384,.205638,.00145768,.0443254,-.00835246,.205877,.00187275,.0444832,-.0102992,.20627,.00235938,.0447001,-.0124449,.206796,.0029299,.0450168,-.0147935,.207593,.0036005,.0454816,-.017336,.208819,.00439246,.0462446,-.0201156,.211036,.00533864,.0473694,-.0231568,.214388,.00646984,.0490191,-.0264941,.219357,.00783856,.0512776,-.030184,.226061,.00950182,.0541279,-.0342661,.234094,.0115156,.0578989,-.0388539,.244297,.0139687,.0620835,-.0438735,.254457,.0169015,.0673497,-.04951,.266706,.0204554,.0731759,-.0556263,.278753,.0246606,.0803937,-.0624585,.29309,.0297126,.0879287,-.0697556,.305856,.0355868,.0970669,-.0778795,.321059,.0425768,.106508,-.0863541,.333873,.05056,.11776,-.0955935,.349008,.0598972,.130081,-.105438,.363776,.0706314,.144454,-.115899,.380112,.0828822,.1596,-.126827,.394843,.0967611,.176097,-.138161,.409033,.112381,.194726,-.149904,.424257,.129952,.213944,-.161675,.436945,.149333,.235516,-.173659,.450176,.170892,.260564,-.185963,.466305,.194984,.285183,-.197582,.477328,.220805,.311095,-.208697,.486566,.248694,.338924,-.219519,.494811,.279015,.369757,-.229766,.504065,.311725,.3996,-.238879,.507909,.345844,.430484,-.246802,.509805,.381749,.46413,-.253924,.511436,.420251,.497077,-.259319,.508787,.459957,.530434,-.263297,.50394,.501356,.565725,-.265619,.49804,.544252,.599254,-.265842,.487346,.587856,.631251,-.263978,.472975,.631969,.663972,-.26043,.457135,.677471,.697724,-.255358,.439844,.723744,.727725,-.248308,.417872,.770653,.756417,-.239181,.39273,.817357,.785419,-.22814,.367839,.864221,.81266,-.215681,.339449,.912701,.839391,-.201623,.309279,.962419,.86366,-.185624,.278029,1.0122,.885028,-.16797,.245294,1.06186,.904639,-.148336,.212689,1.10934,.922048,-.12637,.179616,1.15063,.936952,-.102928,.146749,1.18885,.951895,-.0785268,.112733,1.22352,.967198,-.0530153,.0760056,1.25681,.984405,-.02649,.0383183,1.28762,1.00021,70019e-8,-20039e-8,1.31656,.0325964,-355447e-11,.176706,6.55682e-7,.0329333,-899174e-10,.178527,165869e-10,.0329181,-359637e-9,.178453,663498e-10,.0329085,-808991e-9,.178383,149332e-9,.0329181,-.00143826,.178394,265873e-9,.0329425,-.00224678,.178517,416597e-9,.0329511,-.00323575,.17849,603299e-9,.033011,-.00439875,.178695,829422e-9,.0330733,-.00574059,.178843,.00109908,.0331857,-.00725896,.179176,.00141933,.0333445,-.00895289,.179618,.0017999,.0335674,-.0108219,.180238,.00225316,.033939,-.0128687,.181417,.00279765,.0345239,-.015114,.183395,.0034564,.0354458,-.017596,.186616,.00425864,.0368313,-.0203524,.191547,.00524936,.0386115,-.0234105,.197508,.00647033,.0410303,-.0268509,.205395,.00798121,.0442245,-.0307481,.215365,.0098557,.0478659,-.0350863,.225595,.0121417,.0522416,-.0399506,.236946,.0149385,.0574513,-.045357,.249442,.0183189,.0631208,-.0512863,.261222,.0223644,.0701124,-.0579273,.275418,.0272418,.0777331,-.0650652,.288989,.0329458,.0862709,-.0728813,.302546,.0396819,.096103,-.081363,.317164,.04757,.106976,-.0904463,.331733,.0567012,.119175,-.100105,.34661,.067202,.132919,-.110375,.362249,.0792588,.147727,-.121115,.376978,.0928672,.163618,-.132299,.390681,.108228,.182234,-.143887,.406571,.125502,.201809,-.155827,.42042,.144836,.225041,-.168357,.438411,.166706,.247621,-.18004,.450368,.189909,.27097,-.191536,.460083,.215251,.296658,-.203024,.469765,.243164,.325892,-.214056,.481837,.273388,.35406,-.224104,.487474,.305344,.384372,-.233489,.492773,.339741,.41749,-.241874,.498451,.376287,.45013,-.248834,.499632,.414195,.481285,-.254658,.495233,.454077,.519183,-.259367,.496401,.496352,.551544,-.261818,.487686,.538798,.587349,-.262964,.479453,.583626,.621679,-.262128,.467709,.629451,.654991,-.258998,.452123,.67566,.686873,-.254119,.433495,.723248,.719801,-.246946,.413657,.771156,.750355,-.237709,.390366,.81989,.780033,-.226549,.364947,.868601,.809254,-.214186,.337256,.920034,.836576,-.199639,.307395,.971706,.861774,-.183169,.275431,1.02479,.885707,-.165111,.243431,1.07837,.904742,-.144363,.210921,1.12783,.915604,-.121305,.17647,1.17254,.930959,-.0962119,.143106,1.21012,.948404,-.069969,.108112,1.24474,.967012,-.0427586,.0708478,1.27718,.984183,-.0147043,.032335,1.3083,.999577,.0142165,-.00726867,1.3382,.0229227,-299799e-11,.148623,4.62391e-7,.0232194,-758796e-10,.15054,117033e-10,.0232315,-303636e-9,.15063,468397e-10,.0232354,-683189e-9,.150624,105472e-9,.0232092,-.0012136,.150445,187744e-9,.0232523,-.00189765,.150679,294847e-9,.0232828,-.00273247,.150789,428013e-9,.0233371,-.00371287,.150995,591134e-9,.0234015,-.00484794,.15118,787642e-9,.023514,-.00612877,.151562,.00102547,.023679,-.00756125,.152116,.00131351,.0239559,-.00914651,.153162,.00166594,.0244334,-.010904,.155133,.00210182,.025139,-.0128615,.158035,.00264406,.0262598,-.0150628,.162751,.00332923,.0277875,-.0175532,.168944,.00419773,.0298472,-.0203981,.176835,.00530034,.0325444,-.023655,.186686,.00669777,.0355581,-.0272982,.196248,.00842661,.0392841,-.0314457,.207352,.0105854,.0436815,-.0361157,.219279,.0132458,.0485272,-.0412932,.230728,.0164736,.0541574,-.0470337,.242994,.0203715,.0609479,-.0535002,.257042,.0250953,.0685228,-.0605409,.27102,.0306856,.0768042,-.0680553,.28406,.037193,.0864844,-.0765011,.299186,.0449795,.0969415,-.0852674,.3132,.0538316,.108478,-.0947333,.327138,.0641149,.121705,-.10481,.342345,.0759185,.136743,-.115474,.358472,.0894116,.152986,-.126536,.374067,.104562,.170397,-.138061,.388267,.121632,.191392,-.150203,.406467,.140996,.211566,-.161751,.418641,.161696,.233567,-.173407,.430418,.184557,.257769,-.185397,.44277,.210092,.28531,-.197048,.457191,.237827,.311726,-.20784,.464712,.267253,.340537,-.218345,.472539,.299332,.372921,-.228306,.482331,.333988,.402924,-.236665,.484378,.369722,.434475,-.244097,.484717,.407836,.469736,-.250547,.487093,.448465,.505045,-.25511,.485575,.490263,.540262,-.258444,.481225,.534495,.576347,-.259903,.473481,.579451,.608656,-.259572,.4603,.625604,.646679,-.257908,.450341,.674511,.679902,-.253663,.431561,.723269,.714159,-.247419,.412684,.773263,.745345,-.239122,.389388,.824182,.778248,-.228837,.365361,.876634,.807208,-.216197,.337667,.92945,.835019,-.201772,.307197,.985261,.860261,-.185291,.274205,1.04299,.877601,-.165809,.240178,1.09816,.898211,-.143897,.207571,1.14694,.915789,-.119513,.174904,1.19008,.931831,-.0932919,.141423,1.2297,.949244,-.0656528,.105603,1.26553,.967527,-.0370262,.0679551,1.29986,.984139,-.00730117,.0283133,1.33252,.999713,.0234648,-.0121785,1.36397,.0152135,-245447e-11,.122795,3.04092e-7,.0151652,-615778e-10,.122399,76292e-10,.0151181,-245948e-9,.122023,304802e-10,.0151203,-553394e-9,.12203,686634e-10,.015125,-983841e-9,.122037,122463e-9,.0151427,-.00153774,.12214,192706e-9,.0151708,-.0022103,.122237,281219e-9,.0152115,-.00300741,.12238,390804e-9,.0152877,-.00392494,.1227,526317e-9,.015412,-.00496597,.123244,69443e-8,.0156201,-.00613314,.124228,90547e-8,.0159658,-.00744113,.125945,.0011732,.0165674,-.00892546,.129098,.00151888,.017487,-.010627,.133865,.00197007,.018839,-.0126043,.140682,.0025637,.020554,-.0148814,.148534,.00333637,.0226727,-.0175123,.157381,.00433738,.0251879,-.0205266,.166685,.00561664,.0283635,-.0240319,.177796,.00725563,.0318694,-.0279432,.188251,.00928811,.0361044,-.0324313,.200038,.011835,.0406656,-.0373527,.210685,.0149146,.0463846,-.0430132,.224182,.0187254,.0525696,-.0491013,.23634,.0232283,.0598083,-.0559175,.250013,.0286521,.0679437,-.0633657,.263981,.0350634,.0771181,-.0714602,.278072,.0425882,.0881273,-.0803502,.29511,.0514487,.0996628,-.0896903,.309976,.0615766,.112702,-.099644,.325611,.0732139,.126488,-.109829,.339321,.0862324,.142625,-.120859,.35574,.101275,.15953,-.131956,.369845,.117892,.176991,-.143145,.38146,.136205,.199715,-.155292,.40052,.157252,.220787,-.167066,.412055,.179966,.243697,-.178396,.423133,.204418,.272106,-.190433,.439524,.232141,.297637,-.201265,.447041,.261109,.325273,-.211834,.454488,.292627,.357219,-.221889,.465004,.326669,.387362,-.230729,.468527,.362426,.423131,-.23924,.475836,.401533,.45543,-.246067,.475017,.441902,.493393,-.251557,.478017,.484239,.526253,-.255571,.4709,.528586,.560554,-.257752,.463167,.574346,.599306,-.258076,.456452,.621655,.634541,-.256471,.443725,.670492,.668907,-.253283,.428719,.721943,.705619,-.247562,.411348,.772477,.739034,-.240626,.388939,.8264,.771408,-.231493,.36425,.881702,.803312,-.220125,.337321,.9385,.828457,-.206645,.305364,.997437,.854819,-.190664,.273715,1.05693,.878666,-.171429,.242218,1.11251,.898404,-.149235,.209556,1.16398,.917416,-.12435,.176863,1.21014,.933133,-.0972703,.142775,1.25178,.95066,-.0683607,.106735,1.29028,.968589,-.0378724,.0681609,1.32703,.984776,-.00605712,.0273966,1.36158,.99994,.0263276,-.0138124,1.3943,.00867437,-186005e-11,.0928979,1.73682e-7,.00864003,-466389e-10,.0925237,435505e-11,.00864593,-186594e-9,.0925806,174322e-10,.00864095,-419639e-9,.0924903,392862e-10,.00863851,-746272e-9,.0924589,702598e-10,.00868531,-.00116456,.0929,111188e-9,.00869667,-.00167711,.0928529,163867e-9,.00874332,-.00228051,.0930914,23104e-8,.00882709,-.00297864,.0935679,31741e-8,.00898874,-.00377557,.0946165,430186e-9,.00929346,-.00469247,.0967406,580383e-9,.00978271,-.00575491,.100084,783529e-9,.0105746,-.00701514,.105447,.00106304,.0116949,-.00851797,.112494,.00144685,.0130419,-.0102757,.119876,.00196439,.0148375,-.012381,.129034,.00266433,.0168725,-.01482,.137812,.00358364,.0193689,-.0176563,.147696,.00478132,.0222691,-.0209211,.157795,.00631721,.0256891,-.0246655,.168431,.00826346,.0294686,-.0288597,.178587,.0106714,.0340412,-.0336441,.190251,.0136629,.0393918,-.039033,.202999,.0173272,.0453947,-.0450087,.215655,.0217448,.0521936,-.0515461,.228686,.0269941,.0600279,-.058817,.242838,.033272,.0692398,-.0667228,.258145,.0406457,.0793832,-.0752401,.273565,.0492239,.0902297,-.0841851,.287735,.0590105,.102014,-.0936479,.301161,.0702021,.116054,-.103967,.317438,.0832001,.13191,-.114622,.334166,.0977951,.148239,-.125452,.348192,.113985,.165809,-.136453,.361094,.131928,.184616,-.147648,.373534,.151811,.207491,-.159607,.39101,.174476,.230106,-.171119,.402504,.198798,.257036,-.182906,.418032,.225796,.281172,-.193605,.425468,.254027,.312034,-.204771,.440379,.285713,.340402,-.214988,.445406,.319196,.370231,-.224711,.44968,.35537,.407105,-.233516,.460747,.393838,.439037,-.240801,.460624,.433747,.47781,-.24762,.465957,.477234,.510655,-.251823,.460054,.52044,.550584,-.255552,.459172,.567853,.585872,-.257036,.450311,.615943,.620466,-.257535,.437763,.667693,.660496,-.255248,.426639,.718988,.695578,-.251141,.409185,.772503,.732176,-.244718,.39015,.827023,.760782,-.236782,.362594,.885651,.79422,-.225923,.33711,.943756,.824521,-.213855,.308272,1.00874,.854964,-.197723,.278529,1.06764,.878065,-.179209,.246208,1.12836,.899834,-.157569,.21329,1.18318,.918815,-.133206,.181038,1.23161,.934934,-.106545,.146993,1.27644,.952115,-.0780574,.111175,1.31842,.96906,-.0478279,.0728553,1.35839,.985178,-.0160014,.032579,1.39697,1.00039,.0173126,-.0095256,1.43312,.00384146,-124311e-11,.0613583,7.78271e-8,.00390023,-314043e-10,.0622919,196626e-11,.00389971,-125622e-9,.0622632,787379e-11,.00389491,-282352e-9,.0620659,1778e-8,.00391618,-502512e-9,.0624687,320918e-10,.00392662,-784458e-9,.0625113,515573e-10,.00396053,-.00112907,.0628175,778668e-10,.00401911,-.00153821,.0633286,113811e-9,.00414994,-.0020208,.0646443,16445e-8,.00441223,-.00260007,.0673886,237734e-9,.00484427,-.0033097,.0716528,345929e-9,.00549109,-.00418966,.0774998,505987e-9,.00636293,-.00527331,.0844758,739208e-9,.00746566,-.00660428,.0921325,.00107347,.00876625,-.00818826,.0997067,.00153691,.0103125,-.0100811,.107433,.00217153,.0123309,-.0123643,.117088,.00303427,.0146274,-.0150007,.126438,.00416018,.0172295,-.0180531,.135672,.00561513,.0204248,-.0215962,.146244,.007478,.0241597,-.0256234,.157481,.00981046,.0284693,-.0302209,.169125,.0127148,.033445,-.0353333,.181659,.0162453,.0391251,-.0410845,.1944,.0205417,.0454721,-.0473451,.207082,.0256333,.0530983,-.0542858,.221656,.0317036,.0615356,-.0618384,.236036,.0388319,.0703363,-.0697631,.248398,.046974,.0810391,-.0784757,.263611,.0565246,.0920144,-.0873488,.275857,.0671724,.105584,-.0973652,.292555,.0798105,.119506,-.107271,.306333,.0935945,.134434,-.117608,.318888,.109106,.153399,-.128938,.337552,.127074,.171258,-.139944,.349955,.14643,.191059,-.151288,.361545,.168,.215069,-.163018,.378421,.192082,.237838,-.174226,.38879,.217838,.266965,-.186063,.405857,.246931,.292827,-.196909,.414146,.277505,.324352,-.207473,.426955,.310711,.354427,-.217713,.433429,.346794,.389854,-.227183,.443966,.385237,.420749,-.235131,.44471,.424955,.459597,-.242786,.451729,.468446,.495316,-.248767,.45072,.513422,.534903,-.253351,.450924,.560618,.572369,-.256277,.445266,.609677,.612383,-.2576,.438798,.660995,.644037,-.256931,.421693,.713807,.686749,-.254036,.4109,.767616,.719814,-.249785,.390151,.82533,.754719,-.244283,.367847,.888311,.792022,-.235076,.345013,.948177,.822404,-.225061,.316193,1.01661,.853084,-.211113,.287013,1.08075,.879871,-.19449,.255424,1.14501,.901655,-.174023,.222879,1.20203,.919957,-.1509,.18989,1.25698,.938412,-.124923,.15606,1.30588,.953471,-.0968139,.120512,1.3529,.970451,-.066734,.0828515,1.3986,.985522,-.034734,.0424458,1.44148,1.00099,-.00102222,678929e-9,1.48398,965494e-9,-6.27338e-7,.0306409,1.97672e-8,99168e-8,-158573e-10,.0314638,4.99803e-7,991068e-9,-634012e-10,.031363,200682e-11,974567e-9,-14144e-8,.03036,457312e-11,998079e-9,-252812e-9,.031496,860131e-11,.00102243,-396506e-9,.0319955,148288e-10,.00107877,-577593e-9,.0331376,249141e-10,.00121622,-816816e-9,.0359396,423011e-10,.0014455,-.00113761,.0399652,724613e-10,.00178791,-.00156959,.0450556,123929e-9,.00225668,-.00214064,.0508025,208531e-9,.00285627,-.00287655,.0568443,341969e-9,.0035991,-.00380271,.0630892,544158e-9,.00455524,-.00496264,.0702204,842423e-9,.00569143,-.0063793,.0773426,.00126704,.00716928,-.00813531,.0860839,.00186642,.00885307,-.0101946,.0944079,.00267014,.0109316,-.0126386,.103951,.00374033,.0133704,-.0154876,.113786,.0051304,.0161525,-.0187317,.123477,.00688858,.0194267,-.0224652,.133986,.00910557,.0230967,-.0265976,.143979,.0118074,.0273627,-.0312848,.154645,.0151266,.0323898,-.0365949,.166765,.0191791,.0379225,-.0422914,.177932,.0239236,.0447501,-.0487469,.19167,.0296568,.0519391,-.0556398,.203224,.0362924,.0599464,-.0631646,.215652,.0440585,.0702427,-.0714308,.232089,.0531619,.0806902,-.0800605,.245258,.0634564,.0923194,-.0892815,.258609,.0752481,.106938,-.09931,.276654,.0888914,.121238,-.109575,.289847,.104055,.138817,-.120461,.307566,.121266,.15595,-.131209,.320117,.139944,.178418,-.143049,.339677,.161591,.197875,-.154074,.349886,.184303,.224368,-.166307,.369352,.210669,.252213,-.178051,.386242,.238895,.277321,-.189335,.395294,.269182,.310332,-.200683,.412148,.302508,.338809,-.210856,.418266,.337264,.372678,-.220655,.428723,.374881,.405632,-.230053,.433887,.415656,.442293,-.237993,.439911,.457982,.477256,-.244897,.440175,.502831,.515592,-.250657,.441079,.550277,.550969,-.255459,.435219,.601102,.592883,-.257696,.432882,.651785,.629092,-.259894,.421054,.708961,.672033,-.258592,.41177,.763806,.709147,-.256525,.395267,.824249,.745367,-.254677,.375013,.8951,.784715,-.247892,.353906,.959317,.818107,-.240162,.327801,1.03153,.847895,-.229741,.298821,1.10601,.879603,-.213084,.269115,1.164,.902605,-.195242,.236606,1.22854,.922788,-.174505,.203442,1.29017,.944831,-.150169,.169594,1.34157,.959656,-.124099,.135909,1.3956,.972399,-.0960626,.0990563,1.45128,.986549,-.0657097,.0602348,1.50312,1.00013,-.0333558,.0186694,1.55364,619747e-11,-1e-7,.00778326,796756e-16,2.37499e-8,-9.99999e-8,282592e-10,1.14596e-10,100292e-11,-166369e-11,250354e-9,6.77492e-9,350752e-11,-637769e-11,357289e-9,6.31655e-8,826445e-11,-174689e-10,516179e-9,3.1851e-7,242481e-10,-450868e-10,.0010223,130577e-11,455631e-10,-89044e-9,.00144302,374587e-11,971222e-10,-178311e-9,.00241912,102584e-10,171403e-9,-313976e-9,.00354938,236481e-10,292747e-9,-520026e-9,.00513765,496014e-10,789827e-9,-.00118187,.0238621,139056e-9,.00114093,-.00171827,.0286691,244093e-9,.00176119,-.00249667,.0368565,420623e-9,.0022233,-.00333742,.0400469,65673e-8,.00343382,-.00481976,.0535751,.00109323,.00427602,-.00600755,.057099,.00155268,.00461435,-.00737637,.0551084,.00215031,.00695698,-.00971401,.0715767,.00316529,.00867619,-.0120943,.0793314,.00436995,.0106694,-.0148202,.0869391,.0058959,.0140351,-.0183501,.101572,.00798757,.0168939,-.022006,.11018,.0104233,.020197,-.0261568,.119041,.0134167,.0254702,-.0312778,.135404,.0173009,.0298384,-.0362469,.1437,.0215428,.035159,-.042237,.15512,.0268882,.0427685,-.0488711,.17128,.033235,.0494848,-.0557997,.181813,.0404443,.0592394,-.0635578,.198745,.0490043,.0681463,-.071838,.210497,.0588239,.0804753,-.0809297,.228864,.0702835,.0942205,-.0906488,.247008,.0834012,.106777,-.100216,.258812,.0975952,.124471,-.110827,.278617,.114162,.138389,-.121193,.287049,.131983,.159543,-.13253,.307151,.152541,.176432,-.143611,.31564,.174673,.201723,-.15548,.33538,.199842,.229721,-.167166,.355256,.227097,.250206,-.178238,.360047,.256014,.282118,-.189905,.378761,.28855,.312821,-.201033,.39181,.323348,.341482,-.211584,.397716,.360564,.377368,-.221314,.410141,.400004,.418229,-.230474,.423485,.442371,.444881,-.239443,.418874,.488796,.488899,-.245987,.427545,.535012,.520317,-.253948,.422147,.589678,.568566,-.256616,.42719,.637683,.599607,-.26376,.415114,.703363,.64222,-.268687,.408715,.771363,.685698,-.2694,.399722,.83574,.732327,-.266642,.388651,.897764,.769873,-.267712,.369198,.983312,.806733,-.263479,.346802,1.06222,.843466,-.254575,.321368,1.13477,.873008,-.242749,.29211,1.20712,.908438,-.22725,.262143,1.27465,.936321,-.207621,.228876,1.33203,.950353,-.187932,.19484,1.40439,.96442,-.165154,.163178,1.4732,.979856,-.139302,.127531,1.53574,.982561,-.11134,.0903457,1.59982,.996389,-.0808124,.0489007,1.6577],e=[1,0,0,0,1,791421e-36,0,0,1,104392e-29,0,0,1,349405e-26,0,0,1,109923e-23,0,0,1,947414e-22,0,0,1,359627e-20,0,0,1,772053e-19,0,0,1,108799e-17,0,0,1,110655e-16,0,0,1,865818e-16,0,0,.999998,5.45037e-10,0,0,.999994,2.85095e-9,0,0,.999989,1.26931e-8,0,0,.999973,4.89938e-8,0,0,.999947,1.66347e-7,0,0,.999894,5.02694e-7,0,0,.999798,136532e-11,0,0,.999617,335898e-11,0,0,.999234,752126e-11,0,0,.998258,152586e-10,0,0,.99504,266207e-10,0,0,.980816,236802e-10,0,0,.967553,207684e-11,0,0,.966877,403733e-11,0,0,.965752,741174e-11,0,0,.96382,127746e-10,0,0,.960306,202792e-10,0,0,.953619,280232e-10,0,0,.941103,278816e-10,0,0,.926619,160221e-10,0,0,.920983,235164e-10,0,0,.912293,311924e-10,0,.0158731,.899277,348118e-10,0,.0476191,.880884,26041e-9,0,.0793651,.870399,338726e-10,0,.111111,.856138,392906e-10,0,.142857,.837436,372874e-10,0,.174603,.820973,392558e-10,0,.206349,.803583,434658e-10,0,.238095,.782168,40256e-9,0,.269841,.764107,448159e-10,0,.301587,.743092,457627e-10,0,.333333,.721626,455314e-10,0,.365079,.700375,477335e-10,0,.396825,.677334,461072e-10,0,.428571,.655702,484393e-10,0,.460317,.632059,464583e-10,0,.492064,.610125,483923e-10,0,.52381,.58653,464342e-10,0,.555556,.564508,477033e-10,0,.587302,.541405,459263e-10,0,.619048,.519556,46412e-9,0,.650794,.497292,448913e-10,0,.68254,.475898,445789e-10,0,.714286,.454722,433496e-10,0,.746032,.434042,423054e-10,0,.777778,.414126,413737e-10,0,.809524,.394387,397265e-10,0,.84127,.375841,390709e-10,0,.873016,.357219,369938e-10,0,.904762,.340084,365618e-10,0,.936508,.322714,342533e-10,0,.968254,.306974,339596e-10,0,1,1,101524e-23,0,0,1,10292e-22,0,0,1,130908e-23,0,0,1,473331e-23,0,0,1,625319e-22,0,0,1,107932e-20,0,0,1,163779e-19,0,0,1,203198e-18,0,0,1,204717e-17,0,0,.999999,168995e-16,0,0,.999998,1.15855e-10,0,0,.999996,6.6947e-10,0,0,.999991,3.30863e-9,0,0,.999983,1.41737e-8,0,0,.999968,5.32626e-8,0,0,.99994,1.77431e-7,0,0,.999891,5.28835e-7,0,0,.999797,142169e-11,0,0,.999617,347057e-11,0,0,.999227,77231e-10,0,0,.998239,155753e-10,0,0,.994937,268495e-10,0,0,.980225,213742e-10,0,0,.967549,21631e-10,0,0,.966865,417989e-11,0,0,.965739,763341e-11,0,0,.963794,130892e-10,0,0,.960244,206456e-10,0,0,.953495,282016e-10,0,148105e-9,.940876,271581e-10,0,.002454,.926569,164159e-10,0,.00867491,.920905,239521e-10,0,.01956,.912169,315127e-10,0,.035433,.899095,346626e-10,0,.056294,.882209,290223e-10,0,.0818191,.870272,342992e-10,0,.111259,.855977,394164e-10,0,.142857,.837431,372343e-10,0,.174603,.820826,396691e-10,0,.206349,.803408,435395e-10,0,.238095,.782838,419579e-10,0,.269841,.763941,450953e-10,0,.301587,.742904,455847e-10,0,.333333,.721463,458833e-10,0,.365079,.700197,477159e-10,0,.396825,.677501,470641e-10,0,.428571,.655527,484732e-10,0,.460317,.6324,476834e-10,0,.492064,.609964,484213e-10,0,.52381,.586839,475541e-10,0,.555556,.564353,476951e-10,0,.587302,.541589,467611e-10,0,.619048,.519413,463493e-10,0,.650794,.497337,453994e-10,0,.68254,.475797,445308e-10,0,.714286,.454659,435787e-10,0,.746032,.434065,424839e-10,0,.777778,.414018,41436e-9,0,.809524,.39455,401902e-10,0,.84127,.375742,390813e-10,0,.873016,.357501,377116e-10,0,.904762,.339996,36535e-9,0,.936508,.323069,351265e-10,0,.968254,.306897,339112e-10,0,1,1,10396e-19,0,0,1,104326e-20,0,0,1,110153e-20,0,0,1,144668e-20,0,0,1,34528e-19,0,0,1,175958e-19,0,0,1,12627e-17,0,0,1,936074e-18,0,0,1,645742e-17,0,0,.999998,401228e-16,0,0,.999997,2.22338e-10,0,0,.999995,1.0967e-9,0,0,.999991,4.82132e-9,0,0,.999981,1.89434e-8,0,0,.999967,6.67716e-8,0,0,.999938,2.12066e-7,0,0,.999886,6.0977e-7,0,0,.999792,159504e-11,0,0,.999608,381191e-11,0,0,.999209,833727e-11,0,0,.998179,165288e-10,0,0,.994605,274387e-10,0,0,.979468,167316e-10,0,0,.967529,242877e-11,0,0,.966836,461696e-11,0,0,.96569,830977e-11,0,0,.963706,140427e-10,0,244659e-11,.960063,217353e-10,0,760774e-9,.953113,286606e-10,0,.00367261,.940192,247691e-10,0,.00940263,.927731,195814e-10,0,.018333,.920669,252531e-10,0,.0306825,.911799,324277e-10,0,.0465556,.89857,340982e-10,0,.0659521,.883283,319622e-10,0,.0887677,.86989,35548e-9,0,.114784,.855483,397143e-10,0,.143618,.837987,391665e-10,0,.174606,.820546,411306e-10,0,.206349,.802878,436753e-10,0,.238095,.783402,444e-7,0,.269841,.763439,458726e-10,0,.301587,.742925,467097e-10,0,.333333,.721633,478887e-10,0,.365079,.69985,481251e-10,0,.396825,.67783,491811e-10,0,.428571,.655126,488199e-10,0,.460318,.632697,496025e-10,0,.492064,.609613,48829e-9,0,.52381,.587098,492754e-10,0,.555556,.564119,482625e-10,0,.587302,.541813,482807e-10,0,.619048,.519342,471552e-10,0,.650794,.497514,466765e-10,0,.68254,.475879,455582e-10,0,.714286,.454789,446007e-10,0,.746032,.434217,435382e-10,0,.777778,.414086,421753e-10,0,.809524,.394744,412093e-10,0,.84127,.375782,396634e-10,0,.873016,.357707,386419e-10,0,.904762,.340038,370345e-10,0,.936508,.323284,359725e-10,0,.968254,.306954,3436e-8,0,1,1,599567e-19,0,0,1,600497e-19,0,0,1,614839e-19,0,0,1,686641e-19,0,0,1,972658e-19,0,0,1,221271e-18,0,0,1,833195e-18,0,0,1,403601e-17,0,0,.999999,206001e-16,0,0,.999998,1.01739e-10,0,0,.999997,4.70132e-10,0,0,.999993,2.00436e-9,0,0,.999988,7.83682e-9,0,0,.999979,2.80338e-8,0,0,.999962,9.17033e-8,0,0,.999933,2.74514e-7,0,0,.999881,7.53201e-7,0,0,.999783,189826e-11,0,0,.999594,440279e-11,0,0,.999178,93898e-10,0,0,.998073,181265e-10,0,0,.993993,280487e-10,0,0,.979982,149422e-10,0,0,.968145,378481e-11,0,0,.966786,53771e-10,0,0,.965611,947508e-11,0,388934e-10,.963557,156616e-10,0,9693e-7,.959752,235144e-10,0,.00370329,.952461,291568e-10,0,.00868428,.940193,240102e-10,0,.0161889,.929042,231235e-10,0,.0263948,.920266,273968e-10,0,.0394088,.911178,337915e-10,0,.0552818,.897873,333629e-10,0,.0740138,.884053,351405e-10,0,.0955539,.869455,378034e-10,0,.119795,.854655,399378e-10,0,.14656,.838347,419108e-10,0,.175573,.820693,440831e-10,0,.206388,.802277,445599e-10,0,.238095,.783634,472691e-10,0,.269841,.763159,476984e-10,0,.301587,.742914,491487e-10,0,.333333,.721662,502312e-10,0,.365079,.699668,502817e-10,0,.396825,.677839,51406e-9,0,.428571,.655091,511095e-10,0,.460317,.632665,516067e-10,0,.492064,.609734,512255e-10,0,.52381,.587043,510263e-10,0,.555556,.564298,50565e-9,0,.587302,.541769,497951e-10,0,.619048,.519529,492698e-10,0,.650794,.497574,482066e-10,0,.68254,.476028,473689e-10,0,.714286,.454961,461941e-10,0,.746032,.434341,450618e-10,0,.777778,.414364,438355e-10,0,.809524,.394832,424196e-10,0,.84127,.376109,412563e-10,0,.873016,.35779,396226e-10,0,.904762,.340379,384886e-10,0,.936508,.323385,368214e-10,0,.968254,.307295,356636e-10,0,1,1,106465e-17,0,0,1,106555e-17,0,0,1,107966e-17,0,0,1,114601e-17,0,0,1,137123e-17,0,0,1,21243e-16,0,0,.999999,489653e-17,0,0,.999999,160283e-16,0,0,.999998,62269e-15,0,0,.999997,2.51859e-10,0,0,.999996,9.96192e-10,0,0,.999992,3.74531e-9,0,0,.999986,1.32022e-8,0,0,.999975,4.33315e-8,0,0,.999959,1.31956e-7,0,0,.999927,3.72249e-7,0,0,.999871,9.72461e-7,0,0,.999771,235343e-11,0,0,.999572,52768e-10,0,0,.999133,109237e-10,0,0,.997912,203675e-10,0,0,.993008,279396e-10,0,0,.980645,139604e-10,0,0,.970057,646596e-11,0,0,.966717,65089e-10,0,474145e-10,.965497,111863e-10,0,89544e-8,.96334,179857e-10,0,.0032647,.959294,259045e-10,0,.0075144,.951519,292327e-10,0,.0138734,.940517,249769e-10,0,.0224952,.93014,26803e-9,0,.0334828,.91972,303656e-10,0,.0468973,.910294,353323e-10,0,.0627703,.897701,351002e-10,0,.0811019,.884522,388104e-10,0,.10186,.869489,412932e-10,0,.124985,.853983,415781e-10,0,.150372,.838425,454066e-10,0,.177868,.820656,471624e-10,0,.207245,.801875,475243e-10,0,.238143,.783521,505621e-10,0,.269841,.763131,50721e-9,0,.301587,.74261,523293e-10,0,.333333,.72148,528699e-10,0,.365079,.699696,538677e-10,0,.396825,.677592,539255e-10,0,.428571,.65525,546367e-10,0,.460317,.632452,541348e-10,0,.492064,.609903,544976e-10,0,.52381,.586928,536201e-10,0,.555556,.564464,535185e-10,0,.587302,.541801,524949e-10,0,.619048,.519681,51812e-9,0,.650794,.497685,507687e-10,0,.68254,.47622,496243e-10,0,.714286,.455135,485714e-10,0,.746032,.4346,471847e-10,0,.777778,.414564,459294e-10,0,.809524,.395165,444705e-10,0,.84127,.376333,430772e-10,0,.873016,.358197,416229e-10,0,.904762,.34064,401019e-10,0,.936508,.323816,386623e-10,0,.968254,.307581,370933e-10,0,1,1,991541e-17,0,0,1,992077e-17,0,0,1,100041e-16,0,0,1,10385e-15,0,0,1,115777e-16,0,0,1,150215e-16,0,0,.999999,254738e-16,0,0,.999999,598822e-16,0,0,.999998,1.79597e-10,0,0,.999997,6.02367e-10,0,0,.999994,2.06835e-9,0,0,.99999,6.94952e-9,0,0,.999984,2.23363e-8,0,0,.999972,6.78578e-8,0,0,.999952,1.93571e-7,0,0,.999919,5.16594e-7,0,0,.99986,128739e-11,0,0,.999753,299298e-11,0,0,.999546,648258e-11,0,0,.999074,129985e-10,0,0,.997671,232176e-10,0,0,.991504,256701e-10,0,0,.981148,131141e-10,0,0,.971965,869048e-11,0,280182e-10,.966624,808301e-11,0,695475e-9,.965344,135235e-10,0,.00265522,.963048,210592e-10,0,.00622975,.958673,287473e-10,0,.0116234,.950262,281379e-10,0,.018976,.940836,271089e-10,0,.0283844,.930996,30926e-9,0,.0399151,.919848,348359e-10,0,.0536063,.909136,366092e-10,0,.0694793,.897554,384162e-10,0,.0875342,.884691,430971e-10,0,.107749,.869414,447803e-10,0,.130087,.853462,452858e-10,0,.154481,.838187,495769e-10,0,.180833,.820381,502709e-10,0,.209005,.801844,522713e-10,0,.238791,.783061,541505e-10,0,.269869,.763205,553712e-10,0,.301587,.742362,564909e-10,0,.333333,.721393,572646e-10,0,.365079,.699676,581012e-10,0,.396825,.677395,58096e-9,0,.428571,.655208,585766e-10,0,.460317,.632451,583602e-10,0,.492064,.609839,580234e-10,0,.52381,.587093,577161e-10,0,.555556,.564467,568447e-10,0,.587302,.542043,563166e-10,0,.619048,.519826,55156e-9,0,.650794,.497952,541682e-10,0,.68254,.476477,528971e-10,0,.714286,.455412,514952e-10,0,.746032,.434926,502222e-10,0,.777778,.4149,485779e-10,0,.809524,.395552,472242e-10,0,.84127,.376712,454891e-10,0,.873016,.358622,440924e-10,0,.904762,.341048,422984e-10,0,.936508,.324262,408582e-10,0,.968254,.308013,390839e-10,0,1,1,613913e-16,0,0,1,614145e-16,0,0,1,617708e-16,0,0,1,633717e-16,0,0,1,681648e-16,0,0,1,808291e-16,0,0,1,1.14608e-10,0,0,.999998,2.10507e-10,0,0,.999997,4.99595e-10,0,0,.999995,1.39897e-9,0,0,.999994,4.19818e-9,0,0,.999988,1.27042e-8,0,0,.999979,3.75153e-8,0,0,.999965,1.06206e-7,0,0,.999945,2.85381e-7,0,0,.999908,7.23611e-7,0,0,.999846,17255e-10,0,0,.999733,386104e-11,0,0,.999511,808493e-11,0,0,.998993,156884e-10,0,0,.997326,265538e-10,0,0,.989706,206466e-10,0,0,.981713,130756e-10,0,70005e-10,.973636,106473e-10,0,464797e-9,.966509,10194e-9,0,.00201743,.965149,165881e-10,0,.00497549,.962669,249147e-10,0,.00953262,.95786,317449e-10,0,.0158211,.949334,281045e-10,0,.0239343,.941041,303263e-10,0,.0339372,.931575,356754e-10,0,.0458738,.920102,397075e-10,0,.059772,.908002,384886e-10,0,.075645,.897269,43027e-9,0,.0934929,.884559,479925e-10,0,.113302,.869161,48246e-9,0,.135045,.853342,509505e-10,0,.158678,.837633,542846e-10,0,.184136,.820252,554139e-10,0,.211325,.801872,581412e-10,0,.240113,.782418,585535e-10,0,.270306,.7631,610923e-10,0,.301594,.742183,613678e-10,0,.333333,.721098,627275e-10,0,.365079,.699512,629413e-10,0,.396825,.677372,636351e-10,0,.428571,.655059,633555e-10,0,.460317,.632567,636513e-10,0,.492064,.609784,628965e-10,0,.52381,.587237,625546e-10,0,.555556,.564525,615825e-10,0,.587302,.542181,605048e-10,0,.619048,.520017,596329e-10,0,.650794,.498204,581516e-10,0,.68254,.476742,569186e-10,0,.714286,.455803,553833e-10,0,.746032,.435251,537807e-10,0,.777778,.415374,522025e-10,0,.809524,.395921,503421e-10,0,.84127,.377253,488211e-10,0,.873016,.359021,468234e-10,0,.904762,.341637,453269e-10,0,.936508,.3247,433014e-10,0,.968254,.308625,418007e-10,0,1,1,2.86798e-10,0,0,1,2.86877e-10,0,0,1,2.88094e-10,0,0,1,2.93506e-10,0,0,1,3.09262e-10,0,0,.999999,3.48593e-10,0,0,.999999,4.44582e-10,0,0,.999998,6.88591e-10,0,0,.999996,1.34391e-9,0,0,.999993,3.17438e-9,0,0,.999989,8.35609e-9,0,0,.999983,2.28677e-8,0,0,.999974,6.23361e-8,0,0,.999959,1.65225e-7,0,0,.999936,4.19983e-7,0,0,.999896,101546e-11,0,0,.99983,232376e-11,0,0,.999709,50156e-10,0,0,.999469,10167e-9,0,0,.998886,190775e-10,0,0,.996819,300511e-10,0,0,.988837,185092e-10,0,1.68222e-7,.982178,134622e-10,0,259622e-9,.975017,125961e-10,0,.00142595,.967101,13507e-9,0,.00382273,.964905,205003e-10,0,.00764164,.96218,29546e-9,0,.0130121,.956821,343738e-10,0,.0200253,.948829,305063e-10,0,.0287452,.941092,346487e-10,0,.039218,.931883,412061e-10,0,.0514748,.920211,444651e-10,0,.0655351,.907307,431252e-10,0,.0814082,.89684,490382e-10,0,.0990939,.884119,53334e-9,0,.118583,.869148,54114e-9,0,.139856,.853377,578536e-10,0,.162882,.836753,592285e-10,0,.187615,.820063,622787e-10,0,.213991,.801694,645492e-10,0,.241918,.782116,65353e-9,0,.271267,.762673,674344e-10,0,.301847,.742133,682788e-10,0,.333333,.720779,691959e-10,0,.365079,.699386,696817e-10,0,.396826,.67732,699583e-10,0,.428572,.654888,698447e-10,0,.460318,.632499,694063e-10,0,.492064,.609825,691612e-10,0,.52381,.587287,681576e-10,0,.555556,.564743,674138e-10,0,.587302,.542409,661617e-10,0,.619048,.520282,647785e-10,0,.650794,.498506,633836e-10,0,.68254,.477102,615905e-10,0,.714286,.456167,601013e-10,0,.746032,.435728,581457e-10,0,.777778,.415809,564215e-10,0,.809524,.396517,544997e-10,0,.84127,.377737,525061e-10,0,.873016,.359698,506831e-10,0,.904762,.342164,48568e-9,0,.936508,.325417,467826e-10,0,.968254,.309186,446736e-10,0,1,1,1.09018e-9,0,0,1,1.0904e-9,0,0,1,1.09393e-9,0,0,1,1.1095e-9,0,0,1,1.154e-9,0,0,1,1.26089e-9,0,0,.999999,1.5059e-9,0,0,.999997,2.07899e-9,0,0,.999994,3.48164e-9,0,0,.999993,7.05728e-9,0,0,.999987,1.63692e-8,0,0,.999981,4.06033e-8,0,0,.999969,1.0245e-7,0,0,.999953,2.55023e-7,0,0,.999925,6.1511e-7,0,0,.999881,142218e-11,0,0,.99981,313086e-11,0,0,.99968,653119e-11,0,0,.999418,12832e-9,0,0,.998748,232497e-10,0,0,.996066,329522e-10,0,0,.988379,179613e-10,0,108799e-9,.982567,143715e-10,0,921302e-9,.976097,148096e-10,0,.00280738,.968475,178905e-10,0,.00596622,.964606,253921e-10,0,.0105284,.961564,348623e-10,0,.0165848,.955517,357612e-10,0,.0242,.948381,343493e-10,0,.03342,.941095,405849e-10,0,.0442777,.931923,475394e-10,0,.0567958,.91996,484328e-10,0,.0709879,.907419,502146e-10,0,.086861,.89618,561654e-10,0,.104415,.88337,587612e-10,0,.123643,.869046,618057e-10,0,.144531,.853278,657392e-10,0,.167057,.836091,66303e-9,0,.191188,.819644,704445e-10,0,.216878,.801246,714071e-10,0,.244062,.782031,740093e-10,0,.272649,.762066,74685e-9,0,.302509,.741964,766647e-10,0,.333442,.720554,766328e-10,0,.365079,.699098,777857e-10,0,.396826,.677189,774633e-10,0,.428572,.65484,776235e-10,0,.460318,.632496,770316e-10,0,.492064,.609908,762669e-10,0,.52381,.587312,753972e-10,0,.555556,.564938,739994e-10,0,.587302,.542577,728382e-10,0,.619048,.52062,71112e-9,0,.650794,.498819,694004e-10,0,.68254,.477555,675575e-10,0,.714286,.456568,653449e-10,0,.746032,.436278,636068e-10,0,.777778,.41637,613466e-10,0,.809524,.397144,594177e-10,0,.84127,.378412,570987e-10,0,.873016,.360376,550419e-10,0,.904762,.342906,527422e-10,0,.936508,.326136,506544e-10,0,.968254,.30997,484307e-10,0,1,1,3.54014e-9,0,0,1,3.54073e-9,0,0,1,3.54972e-9,0,0,1,3.58929e-9,0,0,1,3.70093e-9,0,0,.999999,3.96194e-9,0,0,.999998,4.53352e-9,0,0,.999997,5.78828e-9,0,0,.999994,8.63812e-9,0,0,.999991,1.53622e-8,0,0,.999985,3.16356e-8,0,0,.999977,7.12781e-8,0,0,.999964,1.66725e-7,0,0,.999945,3.90501e-7,0,0,.999912,8.95622e-7,0,0,.999866,198428e-11,0,0,.999786,421038e-11,0,0,.999647,850239e-11,0,0,.999356,162059e-10,0,0,.998563,282652e-10,0,0,.994928,336309e-10,0,244244e-10,.987999,178458e-10,0,523891e-9,.982893,159162e-10,0,.00194729,.977044,178056e-10,0,.00451099,.969972,230624e-10,0,.00835132,.964237,313922e-10,0,.013561,.960791,406145e-10,0,.0202056,.954292,372796e-10,0,.0283321,.948052,403199e-10,0,.0379739,.940938,479537e-10,0,.0491551,.931689,545292e-10,0,.0618918,.91987,54038e-9,0,.0761941,.907665,589909e-10,0,.0920672,.895281,642651e-10,0,.109511,.882621,659707e-10,0,.12852,.86873,709973e-10,0,.149085,.853008,742221e-10,0,.171189,.835944,761754e-10,0,.194809,.818949,797052e-10,0,.21991,.800951,812434e-10,0,.246447,.781847,838075e-10,0,.274352,.761649,84501e-9,0,.303535,.74152,860258e-10,0,.333857,.720495,866233e-10,0,.365104,.698742,868326e-10,0,.396826,.677096,87133e-9,0,.428572,.654782,863497e-10,0,.460318,.632335,860206e-10,0,.492064,.610031,849337e-10,0,.52381,.587457,838279e-10,0,.555556,.56513,82309e-9,0,.587302,.542877,803542e-10,0,.619048,.5209,786928e-10,0,.650794,.499291,765171e-10,0,.68254,.477971,744753e-10,0,.714286,.457221,72209e-9,0,.746032,.436803,697448e-10,0,.777778,.417083,675333e-10,0,.809524,.397749,648058e-10,0,.84127,.379177,625759e-10,0,.873016,.361061,598584e-10,0,.904762,.343713,575797e-10,0,.936508,.326894,549999e-10,0,.968254,.310816,527482e-10,0,1,1,1.0153e-8,0,0,1,1.01544e-8,0,0,1,1.01751e-8,0,0,1,1.02662e-8,0,0,1,1.0521e-8,0,0,.999999,1.11049e-8,0,0,.999999,1.23408e-8,0,0,.999996,1.4924e-8,0,0,.999992,2.04471e-8,0,0,.999989,3.26539e-8,0,0,.99998,6.03559e-8,0,0,.999971,1.23936e-7,0,0,.999955,2.69058e-7,0,0,.999933,5.93604e-7,0,0,.999901,129633e-11,0,0,.999847,275621e-11,0,0,.999761,564494e-11,0,0,.999607,110485e-10,0,0,.999282,204388e-10,0,0,.99831,341084e-10,0,2.2038e-7,.993288,294949e-10,0,242388e-9,.987855,192736e-10,0,.0012503,.983167,182383e-10,0,.0032745,.977908,218633e-10,0,.00646321,.971194,290662e-10,0,.0109133,.963867,386401e-10,0,.0166927,.95982,462827e-10,0,.0238494,.953497,420705e-10,0,.0324178,.947621,477743e-10,0,.0424225,.940611,568258e-10,0,.0538808,.931174,618061e-10,0,.0668047,.919919,627098e-10,0,.0812014,.907856,694714e-10,0,.0970745,.894509,735008e-10,0,.114424,.881954,763369e-10,0,.133246,.868309,821896e-10,0,.153534,.852511,83769e-9,0,.175275,.835821,881615e-10,0,.198453,.817981,896368e-10,0,.223042,.800504,930906e-10,0,.249009,.78141,945056e-10,0,.276304,.761427,963605e-10,0,.304862,.74094,968088e-10,0,.334584,.720233,981481e-10,0,.365322,.698592,979122e-10,0,.396826,.676763,981057e-10,0,.428571,.654808,973956e-10,0,.460318,.632326,962619e-10,0,.492064,.610049,952996e-10,0,.52381,.58763,933334e-10,0,.555556,.565261,917573e-10,0,.587302,.543244,896636e-10,0,.619048,.521273,873304e-10,0,.650794,.499818,852648e-10,0,.68254,.478536,823961e-10,0,.714286,.457826,79939e-9,0,.746032,.437549,77126e-9,0,.777778,.41776,743043e-10,0,.809524,.39863,716426e-10,0,.84127,.379954,686456e-10,0,.873016,.362025,660514e-10,0,.904762,.344581,630755e-10,0,.936508,.327909,605439e-10,0,.968254,.311736,576345e-10,0,1,1,2.63344e-8,0,0,1,2.63373e-8,0,0,1,2.63815e-8,0,0,1,2.65753e-8,0,0,1,2.71132e-8,0,0,.999999,2.83279e-8,0,0,.999997,3.0833e-8,0,0,.999995,3.58711e-8,0,0,.999992,4.61266e-8,0,0,.999985,6.7574e-8,0,0,.999977,1.1358e-7,0,0,.999966,2.13657e-7,0,0,.999948,4.31151e-7,0,0,.999923,8.96656e-7,0,0,.999884,186603e-11,0,0,.999826,381115e-11,0,0,.999732,754184e-11,0,0,.999561,143192e-10,0,0,.999191,257061e-10,0,0,.997955,405724e-10,0,744132e-10,.992228,276537e-10,0,716477e-9,.987638,208885e-10,0,.0022524,.983395,215226e-10,0,.00484816,.978614,270795e-10,0,.00860962,.972389,365282e-10,0,.0136083,.964392,474747e-10,0,.0198941,.95861,509141e-10,0,.0275023,.952806,48963e-9,0,.0364584,.94712,571119e-10,0,.04678,.940104,671704e-10,0,.0584799,.930398,687586e-10,0,.0715665,.919866,738161e-10,0,.086045,.907853,813235e-10,0,.101918,.894078,834582e-10,0,.119186,.881177,892093e-10,0,.137845,.867575,944548e-10,0,.157891,.852107,969607e-10,0,.179316,.835502,101456e-9,0,.202106,.81756,103256e-9,0,.226243,.79984,106954e-9,0,.251704,.780998,108066e-9,0,.278451,.761132,110111e-9,0,.306436,.740429,110459e-9,0,.335586,.719836,111219e-9,0,.365796,.698467,11145e-8,0,.3969,.676446,110393e-9,0,.428571,.654635,110035e-9,0,.460318,.632411,108548e-9,0,.492064,.609986,106963e-9,0,.52381,.587872,105238e-9,0,.555556,.565528,102665e-9,0,.587302,.543563,100543e-9,0,.619048,.52176,976182e-10,0,.650794,.500188,947099e-10,0,.68254,.479204,919929e-10,0,.714286,.458413,886139e-10,0,.746032,.438314,857839e-10,0,.777778,.418573,82411e-9,0,.809524,.39947,792211e-10,0,.84127,.380892,759546e-10,0,.873016,.362953,727571e-10,0,.904762,.345601,695738e-10,0,.936508,.328895,664907e-10,0,.968254,.312808,634277e-10,0,1,1,6.28647e-8,0,0,1,6.28705e-8,0,0,1,6.29587e-8,0,0,1,6.33441e-8,0,0,.999999,6.44087e-8,0,0,.999998,6.67856e-8,0,0,.999997,7.15889e-8,0,0,.999995,8.09577e-8,0,0,.999989,9.92764e-8,0,0,.999983,1.35834e-7,0,0,.999974,2.10482e-7,0,0,.999959,3.65215e-7,0,0,.999939,6.86693e-7,0,0,.999911,13472e-10,0,0,.999868,26731e-10,0,0,.999804,524756e-11,0,0,.9997,100403e-10,0,0,.99951,185019e-10,0,0,.999078,322036e-10,0,620676e-11,.997428,470002e-10,0,341552e-9,.99162,287123e-10,0,.00143727,.987479,234706e-10,0,.00349201,.983582,260083e-10,0,.0066242,.979186,337927e-10,0,.0109113,.97325,454689e-10,0,.0164064,.965221,573759e-10,0,.0231463,.957262,544114e-10,0,.0311571,.952211,587006e-10,0,.0404572,.946631,692256e-10,0,.0510592,.939391,787819e-10,0,.0629723,.929795,792368e-10,0,.0762025,.91965,875075e-10,0,.090753,.907737,950903e-10,0,.106626,.893899,972963e-10,0,.123822,.880239,10459e-8,0,.142337,.866562,107689e-9,0,.16217,.85164,113081e-9,0,.183314,.835021,116636e-9,0,.20576,.817311,120074e-9,0,.229496,.798845,121921e-9,0,.254502,.780479,12475e-8,0,.280753,.760694,125255e-9,0,.308212,.740142,126719e-9,0,.336825,.719248,12636e-8,0,.366517,.698209,126712e-9,0,.397167,.676398,125769e-9,0,.428578,.654378,124432e-9,0,.460318,.632484,123272e-9,0,.492064,.610113,12085e-8,0,.52381,.587931,118411e-9,0,.555556,.565872,11569e-8,0,.587302,.543814,112521e-9,0,.619048,.522265,109737e-9,0,.650794,.500835,106228e-9,0,.68254,.479818,102591e-9,0,.714286,.459258,991288e-10,0,.746032,.439061,952325e-10,0,.777778,.419552,91895e-9,0,.809524,.400399,879051e-10,0,.84127,.381976,844775e-10,0,.873016,.364009,806316e-10,0,.904762,.346761,771848e-10,0,.936508,.330049,735429e-10,0,.968254,.314018,702103e-10,0,1,1,1.39968e-7,0,0,1,1.39979e-7,0,0,1,1.40145e-7,0,0,1,1.4087e-7,0,0,.999999,1.42865e-7,0,0,.999998,1.47279e-7,0,0,.999997,1.56057e-7,0,0,.999992,1.7276e-7,0,0,.999989,2.04352e-7,0,0,.99998,2.6494e-7,0,0,.999969,3.83435e-7,0,0,.999953,6.18641e-7,0,0,.999929,108755e-11,0,0,.999898,201497e-11,0,0,.999849,381346e-11,0,0,.999778,719815e-11,0,0,.999661,133215e-10,0,0,.999451,238313e-10,0,0,.998936,401343e-10,0,113724e-9,.99662,517346e-10,0,820171e-9,.991094,304323e-10,0,.00238143,.987487,281757e-10,0,.00493527,.983731,320048e-10,0,.00856859,.979647,423905e-10,0,.0133393,.973837,562935e-10,0,.0192863,.96584,677442e-10,0,.0264369,.956309,623073e-10,0,.03481,.951523,704131e-10,0,.0444184,.946003,836594e-10,0,.0552713,.938454,911736e-10,0,.0673749,.929279,938264e-10,0,.0807329,.919239,103754e-9,0,.0953479,.907293,109928e-9,0,.111221,.893936,115257e-9,0,.128352,.879674,122265e-9,0,.14674,.865668,125733e-9,0,.166382,.850998,132305e-9,0,.187276,.834498,134844e-9,0,.209413,.816903,139276e-9,0,.232786,.798235,140984e-9,0,.257382,.779724,14378e-8,0,.283181,.760251,144623e-9,0,.310156,.739808,145228e-9,0,.338269,.718762,14539e-8,0,.367461,.697815,144432e-9,0,.397646,.67631,143893e-9,0,.428685,.654278,141846e-9,0,.460318,.632347,13935e-8,0,.492064,.610296,137138e-9,0,.52381,.588039,133806e-9,0,.555556,.566218,130755e-9,0,.587302,.544346,127128e-9,0,.619048,.522701,123002e-9,0,.650794,.501542,119443e-9,0,.68254,.480508,115055e-9,0,.714286,.460092,111032e-9,0,.746032,.440021,106635e-9,0,.777778,.420446,102162e-9,0,.809524,.401512,98184e-9,0,.84127,.38299,936497e-10,0,.873016,.365232,89813e-9,0,.904762,.347865,853073e-10,0,.936508,.331342,817068e-10,0,.968254,.315202,773818e-10,0,1,1,2.9368e-7,0,0,1,2.937e-7,0,0,1,2.93998e-7,0,0,1,2.95298e-7,0,0,.999999,2.98865e-7,0,0,.999998,3.067e-7,0,0,.999995,3.22082e-7,0,0,.999992,3.50767e-7,0,0,.999986,4.03538e-7,0,0,.999976,5.01372e-7,0,0,.999964,6.8562e-7,0,0,.999945,10374e-10,0,0,.999919,171269e-11,0,0,.999882,300175e-11,0,0,.999829,542144e-11,0,0,.999749,984182e-11,0,0,.99962,176213e-10,0,0,.999382,305995e-10,0,138418e-10,.998751,496686e-10,0,389844e-9,.995344,510733e-10,0,.00150343,.990768,345829e-10,0,.00352451,.987464,342841e-10,0,.00655379,.983846,399072e-10,0,.0106554,.980007,533219e-10,0,.0158723,.974494,696992e-10,0,.0222333,.96622,776754e-10,0,.029758,.956273,747718e-10,0,.0384596,.950952,864611e-10,0,.0483473,.945215,100464e-9,0,.0594266,.937287,103729e-9,0,.0717019,.928649,111665e-9,0,.0851752,.918791,12353e-8,0,.0998479,.906685,127115e-9,0,.115721,.893706,13628e-8,0,.132794,.879248,142427e-9,0,.151067,.864685,148091e-9,0,.170538,.850032,153517e-9,0,.191204,.833853,157322e-9,0,.213063,.816353,161086e-9,0,.236107,.797834,164111e-9,0,.260329,.778831,165446e-9,0,.285714,.759756,167492e-9,0,.312243,.739419,166928e-9,0,.339887,.718491,167e-6,0,.368604,.697392,165674e-9,0,.398329,.676102,163815e-9,0,.428961,.654243,162003e-9,0,.460331,.632176,158831e-9,0,.492064,.610407,155463e-9,0,.52381,.588394,152062e-9,0,.555556,.56645,147665e-9,0,.587302,.5449,14375e-8,0,.619048,.523276,138905e-9,0,.650794,.502179,134189e-9,0,.68254,.481359,129392e-9,0,.714286,.46092,124556e-9,0,.746032,.441084,11957e-8,0,.777778,.421517,114652e-9,0,.809524,.402721,109688e-9,0,.84127,.384222,104667e-9,0,.873016,.366534,999633e-10,0,.904762,.349205,950177e-10,0,.936508,.332702,907301e-10,0,.968254,.316599,859769e-10,0,1,1,5.85473e-7,0,0,1,5.85507e-7,0,0,1,5.8602e-7,0,0,.999999,5.88259e-7,0,0,.999999,5.94381e-7,0,0,.999998,6.07754e-7,0,0,.999995,6.33729e-7,0,0,.99999,6.8137e-7,0,0,.999984,7.67003e-7,0,0,.999973,9.21212e-7,0,0,.999959,120218e-11,0,0,.999936,172024e-11,0,0,.999907,268088e-11,0,0,.999866,445512e-11,0,0,.999806,768481e-11,0,0,.999716,1342e-8,0,0,.999576,232473e-10,0,0,.9993,391694e-10,0,129917e-9,.998498,608429e-10,0,845035e-9,.994132,489743e-10,0,.00237616,.99031,384644e-10,0,.00484456,.987409,421768e-10,0,.00832472,.983981,504854e-10,0,.0128643,.980268,671028e-10,0,.0184947,.974875,852749e-10,0,.025237,.966063,85531e-9,0,.0331046,.956779,900588e-10,0,.0421067,.950259,10577e-8,0,.0522487,.944239,119458e-9,0,.0635343,.936341,122164e-9,0,.0759654,.928047,134929e-9,0,.0895434,.918065,145544e-9,0,.104269,.906267,150531e-9,0,.120142,.893419,161652e-9,0,.137163,.878758,16593e-8,0,.15533,.863699,174014e-9,0,.174645,.848876,177877e-9,0,.195106,.833032,184049e-9,0,.21671,.815557,186088e-9,0,.239454,.797323,19054e-8,0,.263332,.778124,191765e-9,0,.288336,.758929,192535e-9,0,.314451,.738979,192688e-9,0,.341658,.718213,191522e-9,0,.369924,.696947,190491e-9,0,.399202,.675807,187913e-9,0,.429416,.654147,184451e-9,0,.460447,.63229,181442e-9,0,.492064,.610499,177139e-9,0,.523809,.588747,172596e-9,0,.555555,.566783,167457e-9,0,.587301,.545359,162518e-9,0,.619048,.523984,156818e-9,0,.650794,.502917,151884e-9,0,.68254,.482294,145514e-9,0,.714286,.461945,140199e-9,0,.746032,.442133,134101e-9,0,.777778,.422705,128374e-9,0,.809524,.403916,122996e-9,0,.84127,.38554,116808e-9,0,.873016,.367909,111973e-9,0,.904762,.350651,105938e-9,0,.936508,.334208,101355e-9,0,.968254,.318123,957629e-10,0,1,1,111633e-11,0,0,1,111639e-11,0,0,1,111725e-11,0,0,1,112096e-11,0,0,.999999,11311e-10,0,0,.999997,115315e-11,0,0,.999995,11956e-10,0,0,.999989,127239e-11,0,0,.999981,140772e-11,0,0,.999969,164541e-11,0,0,.999952,206607e-11,0,0,.999928,281783e-11,0,0,.999895,416835e-11,0,0,.999848,658728e-11,0,0,.999781,108648e-10,0,0,.999682,182579e-10,0,0,.999523,306003e-10,0,159122e-10,.999205,499862e-10,0,391184e-9,.998131,73306e-9,0,.00147534,.993334,513229e-10,0,.0034227,.99016,467783e-10,0,.00632232,.987321,523413e-10,0,.0102295,.984099,64267e-9,0,.0151794,.980432,843042e-10,0,.0211947,.974976,102819e-9,0,.0282899,.966429,996234e-10,0,.0364739,.957633,111074e-9,0,.0457522,.949422,128644e-9,0,.0561278,.943045,140076e-9,0,.0676023,.935448,146349e-9,0,.0801762,.927225,161854e-9,0,.0938499,.917033,169135e-9,0,.108623,.905762,179987e-9,0,.124496,.892879,189832e-9,0,.141469,.878435,195881e-9,0,.159541,.863114,20466e-8,0,.178713,.84776,209473e-9,0,.198985,.832084,214861e-9,0,.220355,.814915,217695e-9,0,.242823,.796711,220313e-9,0,.266385,.777603,22313e-8,0,.291036,.757991,222471e-9,0,.316767,.738371,222869e-9,0,.343563,.717872,221243e-9,0,.371402,.696619,218089e-9,0,.400248,.675379,21562e-8,0,.430047,.65411,21169e-8,0,.460709,.63241,206947e-9,0,.492079,.61046,201709e-9,0,.52381,.58903,196753e-9,0,.555556,.567267,189637e-9,0,.587302,.545886,184735e-9,0,.619048,.524714,177257e-9,0,.650794,.503789,171424e-9,0,.68254,.483204,164688e-9,0,.714286,.462976,157172e-9,0,.746032,.443294,151341e-9,0,.777778,.423988,143737e-9,0,.809524,.405325,138098e-9,0,.84127,.386981,130698e-9,0,.873016,.369436,125276e-9,0,.904762,.35219,118349e-9,0,.936508,.335804,11312e-8,0,.968254,.319749,106687e-9,0,1,1,204685e-11,0,0,1,204694e-11,0,0,1,204831e-11,0,0,.999999,205428e-11,0,0,.999999,207056e-11,0,0,.999997,210581e-11,0,0,.999993,21732e-10,0,0,.999987,229365e-11,0,0,.999979,250243e-11,0,0,.999965,286127e-11,0,0,.999947,348028e-11,0,0,.999918,455588e-11,0,0,.999881,643303e-11,0,0,.999828,970064e-11,0,0,.999753,153233e-10,0,0,.999642,24793e-9,0,0,.999464,402032e-10,0,122947e-9,.999089,635852e-10,0,807414e-9,.997567,857026e-10,0,.00227206,.992903,594912e-10,0,.00462812,.990011,578515e-10,0,.00794162,.987192,65399e-9,0,.0122534,.98418,819675e-10,0,.0175888,.980491,105514e-9,0,.0239635,.974779,121532e-9,0,.031387,.96675,119144e-9,0,.0398644,.958248,136125e-9,0,.0493982,.948884,155408e-9,0,.0599896,.941673,162281e-9,0,.0716382,.934521,176754e-9,0,.0843437,.926205,192873e-9,0,.0981056,.916089,200038e-9,0,.112923,.904963,213624e-9,0,.128796,.892089,221834e-9,0,.145725,.878028,232619e-9,0,.163709,.86249,238632e-9,0,.182749,.846587,247002e-9,0,.202847,.830988,250702e-9,0,.224001,.814165,255562e-9,0,.246214,.796135,257505e-9,0,.269482,.777052,258625e-9,0,.293805,.757201,258398e-9,0,.319176,.737655,256714e-9,0,.345587,.717477,255187e-9,0,.373021,.696433,251792e-9,0,.401454,.675084,247223e-9,0,.430844,.653907,242213e-9,0,.461125,.632561,237397e-9,0,.492187,.610658,229313e-9,0,.52381,.589322,224402e-9,0,.555556,.567857,216116e-9,0,.587302,.54652,209124e-9,0,.619048,.525433,201601e-9,0,.650794,.504679,192957e-9,0,.68254,.484203,186052e-9,0,.714286,.464203,177672e-9,0,.746032,.444549,170005e-9,0,.777778,.425346,162401e-9,0,.809524,.406706,1544e-7,0,.84127,.388576,147437e-9,0,.873016,.37094,139493e-9,0,.904762,.353996,133219e-9,0,.936508,.337391,125573e-9,0,.968254,.321648,119867e-9,0,1,1,362511e-11,0,0,1,362525e-11,0,0,1,362739e-11,0,0,.999999,363673e-11,0,0,.999998,366214e-11,0,0,.999996,371698e-11,0,0,.999992,382116e-11,0,0,.999986,400554e-11,0,0,.999976,432058e-11,0,0,.999961,485194e-11,0,0,.999938,574808e-11,0,0,.999908,726643e-11,0,0,.999865,984707e-11,0,0,.999807,142217e-10,0,0,.999723,215581e-10,0,0,.999602,336114e-10,0,119113e-10,.999398,527353e-10,0,355813e-9,.998946,805809e-10,0,.00137768,.996647,942908e-10,0,.00322469,.992298,668733e-10,0,.00597897,.989802,716564e-10,0,.00968903,.987019,821355e-10,0,.0143845,.984219,104555e-9,0,.0200831,.980425,131245e-9,0,.0267948,.974241,139613e-9,0,.034525,.967006,145931e-9,0,.0432757,.95893,167153e-9,0,.0530471,.949157,188146e-9,0,.0638386,.94062,194625e-9,0,.0756487,.933509,213721e-9,0,.0884762,.925088,229616e-9,0,.10232,.915178,239638e-9,0,.117178,.904093,254814e-9,0,.133051,.891337,263685e-9,0,.149939,.877326,274789e-9,0,.167841,.861794,280534e-9,0,.18676,.845758,289534e-9,0,.206696,.829792,294446e-9,0,.22765,.813037,296877e-9,0,.249625,.795285,300217e-9,0,.27262,.776323,299826e-9,0,.296636,.756673,299787e-9,0,.321671,.736856,297867e-9,0,.347718,.716883,294052e-9,0,.374768,.696089,289462e-9,0,.402804,.67505,285212e-9,0,.431796,.653509,27653e-8,0,.461695,.63258,271759e-9,0,.49242,.61104,262811e-9,0,.523822,.589567,255151e-9,0,.555556,.568322,246434e-9,0,.587302,.547235,237061e-9,0,.619048,.52616,228343e-9,0,.650794,.505716,219236e-9,0,.68254,.485274,209595e-9,0,.714286,.465411,201011e-9,0,.746032,.445854,19109e-8,0,.777778,.426911,182897e-9,0,.809524,.408222,173569e-9,0,.84127,.390307,165496e-9,0,.873016,.372624,156799e-9,0,.904762,.355804,14917e-8,0,.936508,.33924,140907e-9,0,.968254,.323534,134062e-9,0,1,1,622487e-11,0,0,1,62251e-10,0,0,1,622837e-11,0,0,.999999,624259e-11,0,0,.999998,628127e-11,0,0,.999996,636451e-11,0,0,.999991,65218e-10,0,0,.999984,679782e-11,0,0,.999973,726361e-11,0,0,.999955,803644e-11,0,0,.999931,931397e-11,0,0,.999896,114299e-10,0,0,.999847,149402e-10,0,0,.999784,207461e-10,0,0,.999692,302493e-10,0,0,.999554,454957e-10,0,997275e-10,.999326,690762e-10,0,724813e-9,.998757,101605e-9,0,.0020972,.995367,958745e-10,0,.00432324,.99209,832808e-10,0,.00746347,.989517,887601e-10,0,.0115534,.987008,10564e-8,0,.0166134,.98421,133179e-9,0,.0226552,.98021,161746e-9,0,.0296838,.973676,161821e-9,0,.0377016,.967052,178635e-9,0,.0467079,.959385,206765e-9,0,.0567013,.949461,22476e-8,0,.0676796,.939578,23574e-8,0,.0796403,.932416,25893e-8,0,.0925812,.923759,271228e-9,0,.106501,.914223,289165e-9,0,.121397,.902942,301156e-9,0,.13727,.890419,313852e-9,0,.15412,.876639,324408e-9,0,.171946,.861316,33249e-8,0,.190751,.84496,338497e-9,0,.210537,.828427,345861e-9,0,.231305,.811871,347863e-9,0,.253057,.794397,350225e-9,0,.275797,.775726,349915e-9,0,.299525,.75617,347297e-9,0,.324242,.736091,344232e-9,0,.349947,.716213,340835e-9,0,.376633,.695736,332369e-9,0,.404289,.674961,327943e-9,0,.432895,.653518,318533e-9,0,.462415,.632574,310391e-9,0,.492788,.61134,300755e-9,0,.523909,.590017,290506e-9,0,.555556,.568752,280446e-9,0,.587302,.548061,269902e-9,0,.619048,.52711,258815e-9,0,.650794,.506682,248481e-9,0,.68254,.486524,237141e-9,0,.714286,.466812,226872e-9,0,.746032,.44732,216037e-9,0,.777778,.428473,205629e-9,0,.809524,.409921,195691e-9,0,.84127,.392028,185457e-9,0,.873016,.374606,176436e-9,0,.904762,.357601,166508e-9,0,.936508,.341348,158385e-9,0,.968254,.32542,149203e-9,0,1,1,103967e-10,0,0,1,10397e-9,0,0,1,104019e-10,0,0,.999999,104231e-10,0,0,.999998,104806e-10,0,0,.999995,106042e-10,0,0,.999991,108366e-10,0,0,.999982,112415e-10,0,0,.999968,119174e-10,0,0,.99995,130227e-10,0,0,.999922,148176e-10,0,0,.999884,177303e-10,0,0,.99983,224564e-10,0,0,.999758,300966e-10,0,0,.999654,423193e-10,0,549083e-11,.999503,614848e-10,0,296087e-9,.999237,903576e-10,0,.00123144,.998491,1271e-7,0,.00295954,.994594,107754e-9,0,.00555829,.99178,103025e-9,0,.00907209,.989265,11154e-8,0,.0135257,.986998,136296e-9,0,.0189327,.984137,169154e-9,0,.0252993,.979798,196671e-9,0,.0326272,.97337,196678e-9,0,.0409157,.967239,223121e-9,0,.0501623,.959543,253809e-9,0,.0603638,.949466,265972e-9,0,.0715171,.939074,288372e-9,0,.0836187,.931118,310983e-9,0,.0966657,.922525,325561e-9,0,.110656,.912983,345725e-9,0,.125588,.901617,3556e-7,0,.141461,.889487,374012e-9,0,.158275,.875787,383445e-9,0,.176031,.860654,393972e-9,0,.19473,.844417,400311e-9,0,.214374,.82741,405004e-9,0,.234967,.810545,407378e-9,0,.256512,.793312,407351e-9,0,.279011,.774847,406563e-9,0,.302468,.755621,404903e-9,0,.326887,.735511,397486e-9,0,.352266,.715435,39357e-8,0,.378605,.695403,384739e-9,0,.405897,.674681,376108e-9,0,.43413,.65359,365997e-9,0,.463277,.632471,354957e-9,0,.493295,.61151,343593e-9,0,.524106,.59064,331841e-9,0,.555561,.569386,318891e-9,0,.587302,.548785,3072e-7,0,.619048,.528146,29361e-8,0,.650794,.507872,281709e-9,0,.68254,.487805,268627e-9,0,.714286,.468196,255887e-9,0,.746032,.448922,243997e-9,0,.777778,.430093,231662e-9,0,.809524,.411845,220339e-9,0,.84127,.393808,208694e-9,0,.873016,.376615,198045e-9,0,.904762,.359655,187375e-9,0,.936508,.343452,177371e-9,0,.968254,.32765,167525e-9,0,1,1,169351e-10,0,0,1,169356e-10,0,0,1,169427e-10,0,0,.999999,169736e-10,0,0,.999998,170575e-10,0,0,.999995,172372e-10,0,0,.99999,175739e-10,0,0,.999979,181568e-10,0,0,.999966,191206e-10,0,0,.999944,20677e-9,0,0,.999912,231644e-10,0,0,.999869,271268e-10,0,0,.999811,334272e-10,0,0,.99973,433979e-10,0,0,.999617,590083e-10,0,680315e-10,.999445,829497e-10,0,612796e-9,.999138,118019e-9,0,.00187408,.998095,156712e-9,0,.00395791,.993919,125054e-9,0,.00692144,.991333,126091e-9,0,.0107962,.989226,144912e-9,0,.0155986,.986954,175737e-9,0,.0213364,.983982,213883e-9,0,.0280114,.979128,234526e-9,0,.0356226,.973327,243725e-9,0,.0441668,.967416,2773e-7,0,.0536399,.959729,308799e-9,0,.0640376,.949758,322447e-9,0,.0753554,.939173,350021e-9,0,.0875893,.9296,370089e-9,0,.100736,.921181,391365e-9,0,.114793,.91164,413636e-9,0,.129759,.900435,427068e-9,0,.145632,.888183,441046e-9,0,.162412,.874772,454968e-9,0,.180101,.859566,461882e-9,0,.1987,.843579,471556e-9,0,.218213,.826453,474335e-9,0,.238641,.809164,477078e-9,0,.259989,.792179,47755e-8,0,.282262,.773866,472573e-9,0,.305464,.754944,469765e-9,0,.329599,.735133,462371e-9,0,.35467,.714858,453674e-9,0,.380678,.694829,443888e-9,0,.407622,.674453,432052e-9,0,.435493,.653685,420315e-9,0,.464275,.632666,406829e-9,0,.493938,.611676,392234e-9,0,.524422,.591193,379208e-9,0,.555624,.570145,36319e-8,0,.587302,.549566,349111e-9,0,.619048,.529278,334166e-9,0,.650794,.509026,318456e-9,0,.68254,.489186,30449e-8,0,.714286,.469662,289051e-9,0,.746032,.450691,275494e-9,0,.777778,.431841,261437e-9,0,.809524,.413752,247846e-9,0,.84127,.395951,235085e-9,0,.873016,.378633,222245e-9,0,.904762,.36194,210533e-9,0,.936508,.345599,198494e-9,0,.968254,.329999,188133e-9,0,1,1,269663e-10,0,0,1,26967e-9,0,0,1,269772e-10,0,0,.999999,270214e-10,0,0,.999998,271415e-10,0,0,.999994,27398e-9,0,0,.999988,278771e-10,0,0,.999977,287019e-10,0,0,.999961,300544e-10,0,0,.999937,322138e-10,0,0,.999904,356163e-10,0,0,.999854,409465e-10,0,0,.99979,492651e-10,0,0,.999699,621722e-10,0,8.8288e-7,.999572,819715e-10,0,223369e-9,.999381,111689e-9,0,.00105414,.999016,153862e-9,0,.0026493,.997437,187667e-9,0,.00508608,.993545,155672e-9,0,.00840554,.991135,161455e-9,0,.012629,.989157,188241e-9,0,.0177661,.986874,226229e-9,0,.0238198,.983714,268668e-9,0,.0307887,.978301,277109e-9,0,.0386688,.973227,303446e-9,0,.0474554,.967317,341851e-9,0,.0571428,.959477,370885e-9,0,.0677256,.950012,392753e-9,0,.0791988,.939484,42781e-8,0,.0915576,.928135,443866e-9,0,.104798,.919819,472959e-9,0,.118918,.910049,491551e-9,0,.133915,.899181,512616e-9,0,.149788,.886881,523563e-9,0,.166537,.87359,540183e-9,0,.184164,.858613,547386e-9,0,.202669,.842809,554809e-9,0,.222056,.825727,558316e-9,0,.242329,.808086,557824e-9,0,.263492,.790728,556346e-9,0,.285551,.772987,552672e-9,0,.30851,.7541,543738e-9,0,.332376,.734669,536107e-9,0,.357153,.714411,523342e-9,0,.382845,.694196,512238e-9,0,.409454,.674252,497465e-9,0,.436977,.65357,481096e-9,0,.465404,.632999,467054e-9,0,.494713,.611994,448771e-9,0,.524864,.591604,431889e-9,0,.555779,.571134,415238e-9,0,.587302,.550528,396369e-9,0,.619048,.530292,379477e-9,0,.650794,.510364,361488e-9,0,.68254,.490749,343787e-9,0,.714286,.471266,327822e-9,0,.746032,.452462,310626e-9,0,.777778,.433907,295352e-9,0,.809524,.415659,279179e-9,0,.84127,.398138,264685e-9,0,.873016,.380833,249905e-9,0,.904762,.364247,236282e-9,0,.936508,.348041,222905e-9,0,.968254,.332389,210522e-9,0,1,1,420604e-10,0,0,1,420614e-10,0,0,1,420757e-10,0,0,.999999,42138e-9,0,0,.999997,423067e-10,0,0,.999993,426668e-10,0,0,.999986,433372e-10,0,0,.999974,444857e-10,0,0,.999956,463554e-10,0,0,.99993,493105e-10,0,0,.999892,539077e-10,0,0,.999838,610005e-10,0,0,.999767,718822e-10,0,0,.999666,884581e-10,0,365471e-10,.999525,113398e-9,0,485623e-9,.999311,150043e-9,0,.00162096,.998865,200063e-9,0,.00355319,.996278,211014e-9,0,.00633818,.992956,189672e-9,0,.0100043,.991017,210262e-9,0,.0145648,.989055,244292e-9,0,.0200237,.986741,290481e-9,0,.0263798,.983288,334303e-9,0,.033629,.977784,340307e-9,0,.0417652,.973037,377864e-9,0,.0507821,.967181,4239e-7,0,.060673,.958971,443854e-9,0,.0714314,.950093,483039e-9,0,.0830518,.939552,517934e-9,0,.0955288,.927678,539449e-9,0,.108859,.918278,568604e-9,0,.123038,.908449,588505e-9,0,.138065,.897713,612473e-9,0,.153938,.885533,625575e-9,0,.170657,.872131,63854e-8,0,.188224,.857517,647034e-9,0,.20664,.841796,65209e-8,0,.225909,.824726,6544e-7,0,.246035,.807297,655744e-9,0,.267022,.789058,646716e-9,0,.288878,.77189,643898e-9,0,.311607,.753082,629973e-9,0,.335216,.7341,621564e-9,0,.359713,.714094,605171e-9,0,.385103,.693839,588752e-9,0,.41139,.673891,573294e-9,0,.438576,.653565,552682e-9,0,.466656,.633326,533446e-9,0,.495617,.612582,514635e-9,0,.525431,.59205,49303e-8,0,.556041,.571918,471842e-9,0,.587338,.551572,451713e-9,0,.619048,.531553,430049e-9,0,.650794,.51175,410445e-9,0,.68254,.49238,390098e-9,0,.714286,.473143,370033e-9,0,.746032,.45423,351205e-9,0,.777778,.435963,332049e-9,0,.809524,.41787,315021e-9,0,.84127,.400387,297315e-9,0,.873016,.383332,281385e-9,0,.904762,.366665,265397e-9,0,.936508,.350633,250601e-9,0,.968254,.334964,23589e-8,0,1,1,643736e-10,0,0,1,64375e-9,0,0,1,643947e-10,0,0,.999999,64481e-9,0,0,.999997,647143e-10,0,0,.999994,652119e-10,0,0,.999985,661359e-10,0,0,.999972,677116e-10,0,0,.999952,702599e-10,0,0,.999922,742517e-10,0,0,.99988,803906e-10,0,0,.99982,897315e-10,0,0,.999741,103838e-9,0,0,.999629,12496e-8,0,149024e-9,.999474,156161e-9,0,861027e-9,.999229,201034e-9,0,.00231198,.998662,259069e-9,0,.00458147,.995299,245439e-9,0,.00770895,.992732,24498e-8,0,.0117126,.990847,273211e-9,0,.0165989,.988911,316492e-9,0,.0223674,.98654,37161e-8,0,.0290135,.982636,410352e-9,0,.0365309,.977346,421756e-9,0,.0449117,.972909,475578e-9,0,.0541481,.966821,522482e-9,0,.0642326,.958686,545008e-9,0,.075158,.949754,589286e-9,0,.0869181,.939184,619995e-9,0,.0995074,.927505,654266e-9,0,.112922,.916606,682362e-9,0,.127157,.906707,704286e-9,0,.142212,.895937,725909e-9,0,.158085,.883913,743939e-9,0,.174776,.870642,755157e-9,0,.192287,.856241,764387e-9,0,.210619,.84069,771032e-9,0,.229775,.823728,765906e-9,0,.249761,.806481,767604e-9,0,.270582,.787924,754385e-9,0,.292243,.770588,749668e-9,0,.314753,.751991,731613e-9,0,.338118,.733407,717655e-9,0,.362347,.713688,700604e-9,0,.387447,.693595,678765e-9,0,.413424,.673426,657042e-9,0,.440284,.65359,635892e-9,0,.468027,.633576,611569e-9,0,.496645,.613144,586011e-9,0,.526122,.592711,563111e-9,0,.556417,.572722,537699e-9,0,.587451,.552762,512556e-9,0,.619048,.532985,489757e-9,0,.650794,.513219,464139e-9,0,.68254,.493992,442193e-9,0,.714286,.47509,418629e-9,0,.746032,.456287,397045e-9,0,.777778,.438152,375504e-9,0,.809524,.420294,35492e-8,0,.84127,.402749,335327e-9,0,.873016,.385879,316422e-9,0,.904762,.369352,298333e-9,0,.936508,.353301,281417e-9,0,.968254,.337781,265203e-9,0,1,1,968267e-10,0,0,1,968284e-10,0,0,1,968556e-10,0,0,.999999,969733e-10,0,0,.999997,972913e-10,0,0,.999993,979688e-10,0,0,.999984,992239e-10,0,0,.999969,101356e-9,0,0,.999946,104784e-9,0,0,.999913,110111e-9,0,0,.999868,118217e-9,0,0,.999801,130396e-9,0,0,.999712,148523e-9,0,124907e-10,.999589,175233e-9,0,355405e-9,.999416,213999e-9,0,.0013528,.999136,268529e-9,0,.00312557,.998367,333088e-9,0,.00573045,.994701,304757e-9,0,.00919397,.992497,318031e-9,0,.0135261,.990608,353863e-9,0,.0187278,.988715,409044e-9,0,.0247947,.986241,472967e-9,0,.0317196,.981696,495104e-9,0,.039494,.977097,532873e-9,0,.0481087,.972583,594447e-9,0,.0575549,.966142,636867e-9,0,.0678242,.95823,669899e-9,0,.0789089,.949677,719499e-9,0,.0908023,.939226,750584e-9,0,.103499,.927501,793183e-9,0,.116993,.915199,81995e-8,0,.131282,.90498,847654e-9,0,.146364,.894243,868929e-9,0,.162237,.882154,884278e-9,0,.178902,.869161,898108e-9,0,.196358,.854751,901254e-9,0,.21461,.839368,90679e-8,0,.23366,.822874,901541e-9,0,.253512,.805514,897297e-9,0,.274174,.78716,881856e-9,0,.29565,.769061,870032e-9,0,.31795,.751,851719e-9,0,.341081,.732614,830671e-9,0,.365053,.713171,806569e-9,0,.389874,.693472,78338e-8,0,.415553,.673528,756404e-9,0,.442098,.653397,726872e-9,0,.469512,.633781,700494e-9,0,.497794,.613877,67105e-8,0,.526935,.593506,640361e-9,0,.556908,.573667,613502e-9,0,.587657,.553932,583177e-9,0,.61906,.534345,554375e-9,0,.650794,.515042,527811e-9,0,.68254,.495674,499367e-9,0,.714286,.477132,47429e-8,0,.746032,.458609,447726e-9,0,.777778,.440354,424205e-9,0,.809524,.422765,399549e-9,0,.84127,.405472,378315e-9,0,.873016,.388482,355327e-9,0,.904762,.372191,336122e-9,0,.936508,.356099,315247e-9,0,.968254,.340737,29794e-8,0,1,1,143327e-9,0,0,1,14333e-8,0,0,1,143366e-9,0,0,.999999,143524e-9,0,0,.999996,143952e-9,0,0,.999991,144862e-9,0,0,.999981,146544e-9,0,0,.999966,149391e-9,0,0,.999941,153946e-9,0,0,.999905,160971e-9,0,0,.999852,171562e-9,0,0,.99978,18729e-8,0,0,.999681,210386e-9,0,826239e-10,.999546,243906e-9,0,664807e-9,.999352,291739e-9,0,.00196192,.999027,357419e-9,0,.00405941,.997886,422349e-9,0,.00699664,.99419,385008e-9,0,.0107896,.99214,409775e-9,0,.0154415,.990274,456418e-9,0,.0209488,.988455,527008e-9,0,.0273037,.985804,597685e-9,0,.0344969,.98103,613124e-9,0,.0425183,.976674,668321e-9,0,.0513575,.972021,736985e-9,0,.0610046,.965274,773789e-9,0,.0714508,.958046,830852e-9,0,.0826877,.949333,875766e-9,0,.0947085,.939135,917088e-9,0,.107507,.927119,952244e-9,0,.121078,.91469,990626e-9,0,.135419,.903006,.00101304,0,.150526,.892368,.00103834,0,.166399,.880231,.00105002,0,.183038,.867432,.00106331,0,.200443,.853208,.00106783,0,.218618,.837956,.00106458,0,.237566,.821772,.00105945,0,.257291,.804328,.00104685,0,.2778,.786465,.00103178,0,.2991,.768004,.00101077,0,.321199,.74972,985504e-9,0,.344106,.731682,962893e-9,0,.36783,.712813,932146e-9,0,.392383,.693139,89871e-8,0,.417774,.673566,869678e-9,0,.444013,.653483,835525e-9,0,.471107,.633891,799853e-9,0,.49906,.614433,766838e-9,0,.527869,.594586,732227e-9,0,.557517,.574769,696442e-9,0,.587966,.555149,663935e-9,0,.61913,.535898,629826e-9,0,.650794,.516753,596486e-9,0,.68254,.497816,567078e-9,0,.714286,.479034,534399e-9,0,.746032,.460975,507013e-9,0,.777778,.442935,477421e-9,0,.809524,.425263,451101e-9,0,.84127,.408248,424964e-9,0,.873016,.391339,39993e-8,0,.904762,.37513,377619e-9,0,.936508,.359172,354418e-9,0,.968254,.343876,334823e-9,0,1,1,209042e-9,0,0,1,209045e-9,0,0,1,209093e-9,0,0,.999999,209304e-9,0,0,.999996,209871e-9,0,0,.999991,211078e-9,0,0,.999979,213304e-9,0,0,.999963,217061e-9,0,0,.999933,223042e-9,0,0,.999894,232206e-9,0,0,.999837,245901e-9,0,0,.999756,266023e-9,0,102927e-11,.999648,295204e-9,0,233468e-9,.999499,336958e-9,0,.00108237,.999283,395563e-9,0,.00268832,.998896,473785e-9,0,.00511138,.997006,520008e-9,0,.00837705,.993819,497261e-9,0,.0124928,.991632,523722e-9,0,.0174561,.989875,587258e-9,0,.0232596,.988109,676329e-9,0,.0298932,.985155,747701e-9,0,.0373453,.980479,768803e-9,0,.0456045,.976271,841054e-9,0,.0546593,.971347,911469e-9,0,.0644994,.964528,953057e-9,0,.0751152,.957632,.00102221,0,.0864981,.948681,.00106122,0,.0986407,.938716,.00111857,0,.111537,.926629,.00114762,0,.125182,.914025,.00118995,0,.139571,.901026,.00121228,0,.154703,.890358,.00123946,0,.170576,.878283,.0012527,0,.18719,.865459,.00125536,0,.204547,.851407,.00126134,0,.222648,.836276,.00124759,0,.241498,.820436,.00124443,0,.261101,.803253,.00122071,0,.281465,.785562,.00120107,0,.302595,.76718,.00117762,0,.324501,.748551,.00114289,0,.347192,.730564,.00110872,0,.370679,.712253,.00107636,0,.394973,.692867,.00103646,0,.420085,.673695,996793e-9,0,.446027,.653912,95675e-8,0,.47281,.634129,916739e-9,0,.500441,.615004,874401e-9,0,.528921,.595587,833411e-9,0,.558244,.575965,794556e-9,0,.588384,.5566,75196e-8,0,.619281,.537428,716381e-9,0,.650795,.518623,676558e-9,0,.68254,.499964,64074e-8,0,.714286,.481356,605984e-9,0,.746032,.463279,570256e-9,0,.777778,.445673,540138e-9,0,.809524,.428032,507299e-9,0,.84127,.411112,479553e-9,0,.873016,.394444,450737e-9,0,.904762,.378247,424269e-9,0,.936508,.362415,399111e-9,0,.968254,.347103,375274e-9,0,1,1,300729e-9,0,0,1,300733e-9,0,0,1,300797e-9,0,0,.999998,301072e-9,0,0,.999996,301817e-9,0,0,.999989,303398e-9,0,0,.999977,306309e-9,0,0,.999958,311209e-9,0,0,.999927,318975e-9,0,0,.999884,330804e-9,0,0,.99982,34834e-8,0,0,.999733,373854e-9,0,326995e-10,.999613,410424e-9,0,477174e-9,.999447,462047e-9,0,.00161099,.999204,533322e-9,0,.00353153,.998725,624964e-9,0,.00627965,.995871,631786e-9,0,.0098693,.993194,632017e-9,0,.0143011,.991541,68923e-8,0,.019568,.989773,766892e-9,0,.0256593,.987647,863668e-9,0,.0325625,.984193,922089e-9,0,.0402647,.980016,970749e-9,0,.0487532,.975859,.00106027,0,.058016,.970514,.00112239,0,.0680419,.963625,.00117212,0,.0788208,.956959,.00125211,0,.0903439,.947956,.00129411,0,.102604,.93809,.00135879,0,.115594,.92659,.00139309,0,.129309,.913829,.00143253,0,.143745,.90005,.00145809,0,.158901,.888129,.0014748,0,.174774,.87607,.00148756,0,.191365,.863461,.00148714,0,.208674,.849594,.00148892,0,.226705,.834531,.00146496,0,.245461,.81903,.0014579,0,.264947,.802122,.00143039,0,.28517,.78445,.00139717,0,.306137,.766434,.00136312,0,.327857,.747816,.00132597,0,.350341,.729519,.00128323,0,.373598,.711454,.00123803,0,.397642,.692699,.00119097,0,.422485,.673723,.00114565,0,.448139,.654386,.00109552,0,.474619,.634673,.00104553,0,.501933,.615554,99985e-8,0,.530089,.596462,948207e-9,0,.559087,.577385,902299e-9,0,.588913,.558257,856448e-9,0,.619525,.5392,810395e-9,0,.650826,.520543,768558e-9,0,.68254,.502206,7239e-7,0,.714286,.48402,685794e-9,0,.746032,.465779,64471e-8,0,.777778,.448455,609583e-9,0,.809524,.431091,57227e-8,0,.84127,.414147,54042e-8,0,.873016,.39765,506545e-9,0,.904762,.381576,477635e-9,0,.936508,.365881,448446e-9,0,.968254,.350582,421424e-9,0,1,1,427144e-9,0,0,1,427151e-9,0,0,1,427232e-9,0,0,.999998,42759e-8,0,0,.999995,428555e-9,0,0,.999988,430603e-9,0,0,.999976,434368e-9,0,0,.999952,440688e-9,0,0,.999919,450667e-9,0,0,.999871,46578e-8,0,0,.999801,488024e-9,0,0,.999704,520092e-9,0,129791e-9,.999572,565553e-9,0,821056e-9,.999389,628906e-9,0,.00225241,.999114,714911e-9,0,.00449109,.998488,819218e-9,0,.00756249,.995234,80415e-8,0,.0114716,.993021,830181e-9,0,.0162131,.991407,902645e-9,0,.021776,.989625,996934e-9,0,.0281471,.987064,.00109707,0,.0353118,.983265,.00114353,0,.0432562,.979535,.0012272,0,.0519665,.975224,.00132642,0,.0614298,.969574,.00138092,0,.0716348,.963021,.00145896,0,.0825709,.956046,.00152834,0,.094229,.947136,.00158217,0,.106602,.937313,.0016347,0,.119682,.926073,.00168383,0,.133465,.913121,.00171627,0,.147947,.899165,.00174229,0,.163125,.885891,.00176137,0,.178998,.873783,.00176406,0,.195566,.861331,.00176156,0,.21283,.847569,.00175346,0,.230793,.832785,.00172753,0,.249459,.817442,.00170204,0,.268832,.800613,.00166576,0,.28892,.783597,.00162909,0,.30973,.76571,.0015826,0,.331271,.747021,.00153106,0,.353554,.728593,.00148036,0,.37659,.710661,.00142808,0,.400391,.692426,.00136906,0,.424973,.673623,.00131066,0,.450347,.65494,.00125569,0,.476531,.635448,.00119517,0,.503535,.616221,.00113828,0,.531372,.597531,.0010816,0,.560047,.578795,.00102673,0,.589554,.559892,970985e-9,0,.619869,.541307,919773e-9,0,.650923,.522608,868479e-9,0,.68254,.504484,82137e-8,0,.714286,.486603,772916e-9,0,.746032,.468802,730353e-9,0,.777778,.451172,684955e-9,0,.809524,.434348,647565e-9,0,.84127,.417445,605863e-9,0,.873016,.401077,571885e-9,0,.904762,.385039,536034e-9,0,.936508,.369483,504227e-9,0,.968254,.354272,473165e-9,0,1,1,599525e-9,0,0,1,599533e-9,0,0,1,599639e-9,0,0,.999998,600097e-9,0,0,.999994,601336e-9,0,0,.999987,603958e-9,0,0,.999972,608775e-9,0,0,.999949,616842e-9,0,0,.999912,629534e-9,0,0,.999857,648658e-9,0,0,.999781,676615e-9,0,538873e-11,.999674,716574e-9,0,308602e-9,.999528,772641e-9,0,.00127003,.999326,849806e-9,0,.00300783,.999009,952682e-9,0,.00556637,.998112,.00106394,0,.00895889,.994496,.00102228,0,.0131827,.992806,.00108586,0,.0182277,.991211,.0011759,0,.0240795,.989415,.00128955,0,.030723,.986499,.00139038,0,.0381418,.982679,.00144539,0,.046321,.978839,.00153954,0,.0552459,.974295,.00164417,0,.0649034,.968784,.00171517,0,.0752814,.962324,.00180282,0,.0863693,.954956,.00186387,0,.0981578,.94624,.00193817,0,.110639,.936517,.00198156,0,.123806,.925186,.00203042,0,.137655,.91252,.0020664,0,.15218,.898441,.00207822,0,.16738,.884394,.0020992,0,.183253,.871273,.00208748,0,.199799,.859057,.00208686,0,.21702,.845243,.00205519,0,.234918,.830723,.00202868,0,.253496,.815801,.00199501,0,.272761,.79914,.00194193,0,.292719,.782372,.00188824,0,.313377,.76482,.00183695,0,.334745,.746586,.00177418,0,.356833,.7281,.00170628,0,.379654,.709842,.00164063,0,.403221,.692019,.00157355,0,.427548,.67364,.00150262,0,.452651,.655277,.00143473,0,.478545,.636438,.00136371,0,.505246,.617364,.00129911,0,.532768,.598603,.00123014,0,.561122,.580195,.00116587,0,.590309,.561786,.00110398,0,.620318,.543377,.00104148,0,.651102,.525093,983984e-9,0,.682545,.506791,92667e-8,0,.714286,.489291,874326e-9,0,.746032,.471811,821734e-9,0,.777778,.454435,774698e-9,0,.809524,.437493,727302e-9,0,.84127,.420977,684039e-9,0,.873016,.404729,64373e-8,0,.904762,.388756,60285e-8,0,.936508,.373344,56765e-8,0,.968254,.358191,531929e-9,0,1,1,832169e-9,0,0,1,832178e-9,0,0,1,83231e-8,0,0,.999998,832893e-9,0,0,.999995,834465e-9,0,0,.999985,837791e-9,0,0,.999969,843893e-9,0,0,.999944,854086e-9,0,0,.999903,870071e-9,0,0,.999843,894042e-9,0,0,.999759,928865e-9,0,531805e-10,.999643,978242e-9,0,579365e-9,.99948,.00104684,0,.00182774,.999255,.00114012,0,.00387804,.998885,.00126188,0,.00675709,.997405,.00135888,0,.010468,.99424,.00133626,0,.0150018,.992458,.00140905,0,.0203443,.990929,.00152305,0,.0264786,.989116,.00165882,0,.0333875,.985624,.00174128,0,.0410536,.982003,.00182108,0,.0494609,.978336,.00194498,0,.0585941,.973184,.00202708,0,.0684396,.9678,.00212166,0,.0789851,.961348,.00221366,0,.0902199,.953841,.00228219,0,.102134,.94534,.00235662,0,.114721,.935552,.00240572,0,.127972,.924064,.00244405,0,.141884,.911827,.00247557,0,.156451,.897731,.00248374,0,.171672,.883409,.00249863,0,.187545,.868625,.00246688,0,.20407,.856529,.00246523,0,.221249,.842999,.00242368,0,.239083,.828505,.00237354,0,.257578,.813825,.00232588,0,.276738,.797813,.00226731,0,.296569,.781097,.00219704,0,.31708,.764038,.00212394,0,.338281,.746067,.00204786,0,.360181,.727687,.00196728,0,.382794,.709571,.00188779,0,.406133,.691503,.00180532,0,.430213,.673673,.00171849,0,.45505,.655732,.00164147,0,.480662,.637399,.00155858,0,.507065,.618616,.00147641,0,.534278,.60005,.00140125,0,.562313,.581713,.00132441,0,.59118,.563546,.00125014,0,.620875,.545605,.00118249,0,.651373,.527559,.0011116,0,.682593,.509764,.00104979,0,.714286,.49193,985977e-9,0,.746032,.475011,928592e-9,0,.777778,.457878,873466e-9,0,.809524,.440979,819585e-9,0,.84127,.424613,772365e-9,0,.873016,.408549,722195e-9,0,.904762,.392771,680014e-9,0,.936508,.377317,636797e-9,0,.968254,.362352,598318e-9,0,1,1,.00114313,0,0,1,.00114314,0,0,.999999,.00114331,0,0,.999998,.00114404,0,0,.999994,.00114601,0,0,.999984,.00115019,0,0,.999967,.00115784,0,0,.999937,.0011706,0,0,.999894,.00119054,0,0,.999828,.00122031,0,0,.999735,.00126331,0,169263e-9,.999606,.00132382,0,949167e-9,.999426,.0014071,0,.00249668,.999173,.00151895,0,.00486392,.99873,.00166102,0,.00806323,.996243,.0017023,0,.0120895,.993779,.00172782,0,.0169288,.9919,.0018108,0,.0225633,.990524,.00196028,0,.028974,.98868,.00212014,0,.036142,.984663,.00217598,0,.044049,.981457,.00230563,0,.0526781,.977608,.00243966,0,.0620137,.972215,.00251336,0,.0720418,.966798,.0026285,0,.0827499,.960241,.00271409,0,.0941271,.952489,.00278381,0,.106164,.944127,.00285399,0,.118852,.934282,.00290994,0,.132185,.923271,.00294558,0,.146157,.910803,.00296269,0,.160766,.896705,.00296803,0,.176007,.88238,.00296637,0,.19188,.867116,.00293163,0,.208385,.853636,.00289418,0,.225523,.840469,.00284663,0,.243296,.82639,.00278594,0,.261709,.811759,.00271618,0,.280767,.796113,.00263187,0,.300476,.779518,.00254589,0,.320845,.763142,.00246003,0,.341883,.745464,.00236529,0,.363601,.727491,.00226536,0,.386011,.709414,.00216375,0,.409128,.691396,.00207127,0,.432967,.67368,.00197106,0,.457545,.656049,.00187022,0,.482881,.638188,.00177605,0,.508992,.620177,.00168482,0,.535899,.601506,.00158909,0,.563619,.58362,.00150583,0,.592165,.565496,.00141791,0,.621544,.54789,.00133693,0,.651743,.530323,.00126038,0,.682709,.512795,.00118556,0,.714286,.495199,.00111527,0,.746032,.478101,.0010489,0,.777778,.461511,984264e-9,0,.809524,.444879,92591e-8,0,.84127,.428424,866582e-9,0,.873016,.412495,814463e-9,0,.904762,.396975,764498e-9,0,.936508,.381614,715967e-9,0,.968254,.366732,672483e-9,0,1,1,.00155501,0,0,1,.00155503,0,0,1,.00155524,0,0,.999998,.00155615,0,0,.999994,.0015586,0,0,.999983,.00156379,0,0,.999963,.0015733,0,0,.999932,.00158911,0,0,.999882,.00161376,0,0,.99981,.00165041,0,100875e-10,.999708,.00170304,0,367658e-9,.999565,.00177658,0,.0014234,.999368,.00187688,0,.00327939,.999081,.00200989,0,.00596629,.99852,.00217177,0,.0094852,.99549,.0021745,0,.013824,.993252,.00222357,0,.0189642,.991727,.00235022,0,.0248856,.989951,.00250561,0,.0315669,.988029,.00268829,0,.0389882,.984029,.0027496,0,.0471302,.980683,.00289793,0,.0559754,.976554,.00303315,0,.0655081,.97139,.00313257,0,.0757138,.965544,.00323656,0,.08658,.95912,.00333432,0,.0980954,.951183,.0034039,0,.110251,.942974,.00347515,0,.123038,.932642,.00350381,0,.13645,.922158,.00354519,0,.150482,.909404,.00353851,0,.165129,.896071,.0035435,0,.18039,.881206,.00349936,0,.196263,.866077,.00347256,0,.212748,.85093,.003415,0,.229847,.837703,.00333367,0,.247561,.823878,.003249,0,.265895,.809449,.00316347,0,.284854,.794379,.00306351,0,.304445,.778138,.0029499,0,.324675,.761997,.00284099,0,.345555,.744938,.00272104,0,.367095,.727212,.00260715,0,.389309,.709549,.00248855,0,.41221,.691704,.00236783,0,.435814,.673689,.00225178,0,.460138,.656453,.00213765,0,.485203,.639128,.00202178,0,.511028,.621512,.00191443,0,.537634,.603598,.00180977,0,.565041,.58559,.00170456,0,.593268,.567852,.00160927,0,.622327,.5503,.00151395,0,.652217,.533033,.00142499,0,.682907,.515942,.00133955,0,.714296,.498814,.0012602,0,.746032,.481595,.00118188,0,.777778,.465117,.00111171,0,.809524,.448865,.00104091,0,.84127,.432711,976618e-9,0,.873016,.416822,91859e-8,0,.904762,.401272,857704e-9,0,.936508,.386226,807172e-9,0,.968254,.371321,75464e-8,0,1,1,.00209596,0,0,1,.00209598,0,0,1,.00209624,0,0,.999997,.00209736,0,0,.999991,.00210039,0,0,.999979,.00210678,0,0,.999959,.00211847,0,0,.999925,.0021379,0,0,.99987,.00216809,0,0,.999791,.00221281,0,681487e-10,.999677,.00227669,0,658161e-9,.999521,.00236533,0,.00200635,.999301,.00248514,0,.0041779,.998977,.00264185,0,.00718648,.998191,.00281695,0,.0110239,.994801,.00278518,0,.015672,.993091,.00288774,0,.0211091,.991571,.00303931,0,.0273123,.9897,.00321643,0,.034259,.987023,.00337332,0,.0419282,.983289,.00346146,0,.0502998,.979892,.00363704,0,.0593562,.975111,.00373601,0,.069081,.970351,.0038842,0,.0794598,.964131,.00397053,0,.0904798,.957747,.00408078,0,.10213,.949536,.00413533,0,.1144,.941372,.00420305,0,.127284,.931049,.00422815,0,.140772,.920647,.00425048,0,.154862,.908033,.0042281,0,.169548,.895028,.00422026,0,.184828,.879968,.00415042,0,.200701,.864875,.00408821,0,.217167,.84918,.00400909,0,.234227,.834934,.00391178,0,.251884,.821397,.00380066,0,.270141,.807135,.00367974,0,.289004,.792363,.00355172,0,.308479,.776661,.003411,0,.328575,.760705,.00328123,0,.349301,.744408,.00314003,0,.370668,.726994,.0029906,0,.392689,.709598,.00285034,0,.415379,.692112,.00271179,0,.438754,.674435,.00257185,0,.46283,.65676,.00243425,0,.48763,.639982,.00230351,0,.513173,.622983,.0021777,0,.539482,.605471,.00204991,0,.566579,.58796,.00193759,0,.594488,.570463,.00181976,0,.623226,.553058,.00171497,0,.6528,.535894,.00161109,0,.683198,.519089,.00151394,0,.714354,.502454,.00142122,0,.746032,.485681,.00133488,0,.777778,.468935,.00124975,0,.809524,.452951,.00117309,0,.84127,.437139,.00110155,0,.873016,.421446,.00103124,0,.904762,.405951,966387e-9,0,.936508,.391003,908119e-9,0,.968254,.376198,848057e-9,0,1,1,.00280076,0,0,1,.00280078,0,0,.999999,.00280109,0,0,.999997,.00280246,0,0,.999992,.00280616,0,0,.999979,.00281396,0,0,.999956,.00282822,0,0,.999916,.00285186,0,0,.999857,.0028885,0,0,.999768,.00294259,0,196026e-9,.999645,.00301946,0,.00104842,.99947,.00312541,0,.00270199,.999229,.00326733,0,.00519449,.998852,.00344992,0,.00852602,.997558,.00361052,0,.0126804,.994417,.0035898,0,.017635,.992824,.00372393,0,.023365,.991344,.00390695,0,.0298456,.989337,.00410392,0,.0370529,.985811,.00420987,0,.0449651,.982772,.00437488,0,.0535615,.979001,.00455069,0,.0628243,.974102,.00464462,0,.0727368,.969197,.00480577,0,.0832844,.962759,.00487818,0,.0944545,.956207,.00498176,0,.106236,.947909,.00503392,0,.118619,.939596,.00507474,0,.131595,.929642,.00509798,0,.145159,.918807,.00508476,0,.159305,.906921,.00505634,0,.174028,.893312,.00498845,0,.189327,.878933,.0049133,0,.2052,.863986,.0048259,0,.221647,.847936,.00470848,0,.23867,.832253,.00456889,0,.25627,.818619,.00442726,0,.274453,.804788,.00427677,0,.293222,.790241,.00411906,0,.312585,.775162,.00394833,0,.33255,.759463,.00377366,0,.353126,.743598,.00361026,0,.374324,.72697,.00343627,0,.396158,.709646,.00326422,0,.418641,.69277,.00309717,0,.44179,.675371,.0029356,0,.465624,.657863,.00277712,0,.490163,.640772,.00261738,0,.515429,.624441,.0024737,0,.541445,.607497,.00233125,0,.568236,.590438,.00218994,0,.595828,.573224,.0020664,0,.624242,.556168,.00193526,0,.653496,.539232,.00182463,0,.683588,.522352,.00170735,0,.714482,.506172,.00160555,0,.746032,.489842,.00150451,0,.777778,.473463,.00140938,0,.809524,.457266,.00132568,0,.84127,.441609,.0012376,0,.873016,.426348,.00116265,0,.904762,.411002,.00108935,0,.936508,.396045,.00101946,0,.968254,.381448,955665e-9,0,1,1,.0037121,0,0,1,.00371213,0,0,1,.00371251,0,0,.999997,.00371417,0,0,.99999,.00371863,0,0,.999977,.00372807,0,0,.99995,.00374529,0,0,.999908,.0037738,0,0,.999843,.00381789,0,123596e-10,.999745,.00388273,0,407442e-9,.999608,.00397443,0,.0015447,.999415,.00409998,0,.00351385,.999143,.00426662,0,.0063316,.9987,.00447625,0,.00998679,.996363,.00455323,0,.0144569,.994021,.00461052,0,.0197151,.992372,.00476359,0,.0257344,.991007,.00499101,0,.0324882,.988767,.0051972,0,.0399517,.984872,.00528407,0,.0481022,.982004,.00548926,0,.0569191,.977714,.00564385,0,.0663839,.973076,.0057693,0,.0764801,.967565,.0058924,0,.0871928,.961384,.00599629,0,.0985095,.954435,.00605998,0,.110419,.946303,.0061133,0,.122912,.937662,.00612028,0,.13598,.927867,.00612209,0,.149617,.916475,.00604813,0,.163817,.90541,.00603088,0,.178577,.891591,.00592218,0,.193894,.877573,.00578854,0,.209767,.862511,.00566648,0,.226196,.846861,.00551481,0,.243182,.83068,.00533754,0,.260728,.815725,.00515487,0,.278837,.802321,.0049655,0,.297515,.787826,.00475421,0,.316768,.773454,.00456002,0,.336605,.758224,.00434727,0,.357034,.74265,.00414444,0,.378067,.726729,.00393738,0,.399717,.710155,.00373575,0,.421998,.693312,.00353736,0,.444928,.67653,.00334368,0,.468523,.659444,.00315981,0,.492806,.642051,.00297809,0,.517798,.625758,.00280592,0,.543525,.609615,.00264254,0,.570012,.592919,.00248459,0,.597288,.576298,.00233327,0,.625379,.559489,.00219519,0,.654307,.542891,.00205441,0,.684084,.526255,.00193385,0,.714693,.509853,.00180745,0,.746044,.494131,.00169817,0,.777778,.478114,.0015913,0,.809524,.462274,.00148981,0,.84127,.446412,.00139537,0,.873016,.431274,.00130984,0,.904762,.41635,.00122403,0,.936508,.401476,.00114809,0,.968254,.386993,.00107563,0,1,1,.00488216,0,0,1,.0048822,0,0,1,.00488265,0,0,.999997,.00488463,0,0,.999988,.00488999,0,0,.999974,.00490129,0,0,.999946,.00492191,0,0,.999897,.00495598,0,0,.999825,.00500855,0,744791e-10,.999718,.00508559,0,712744e-9,.999565,.005194,0,.00215249,.999352,.00534147,0,.00444576,.999046,.00553523,0,.00759218,.998492,.00577016,0,.0115714,.995564,.00578487,0,.0163557,.993339,.00586414,0,.021915,.991834,.00606002,0,.0282201,.990496,.00633312,0,.0352433,.987826,.00651941,0,.042959,.98383,.00660842,0,.0513439,.98109,.00685523,0,.0603772,.976131,.00695778,0,.0700402,.971922,.00714236,0,.0803163,.965901,.00721437,0,.0911908,.959606,.00732017,0,.102651,.952504,.00735788,0,.114686,.944365,.00738493,0,.127286,.935652,.00737969,0,.140443,.925813,.00733612,0,.154151,.914397,.00723094,0,.168405,.903257,.00714002,0,.183201,.890015,.00700149,0,.198536,.876014,.00682813,0,.214409,.861436,.00665567,0,.23082,.845752,.00644526,0,.24777,.829169,.00621635,0,.265263,.813435,.00597789,0,.283301,.799701,.00575694,0,.301889,.785726,.00549866,0,.321035,.77152,.0052503,0,.340746,.75683,.00499619,0,.361032,.741951,.0047543,0,.381904,.726367,.0045084,0,.403374,.710537,.00426784,0,.425457,.693965,.00403487,0,.448169,.677724,.0038075,0,.47153,.66117,.00359431,0,.495561,.644274,.00338354,0,.520284,.627449,.00318163,0,.545725,.611645,.00299672,0,.571911,.595614,.00281016,0,.598873,.579426,.00264252,0,.62664,.563016,.00247509,0,.655239,.546728,.00232647,0,.684692,.530539,.00217803,0,.714999,.514164,.00204216,0,.746106,.498344,.00191403,0,.777778,.482957,.00179203,0,.809524,.467336,.00167695,0,.84127,.451994,.00157567,0,.873016,.436514,.00147113,0,.904762,.42178,.00138034,0,.936508,.407271,.00129219,0,.968254,.392822,.0012098,0,1,1,.00637427,0,0,1,.00637431,0,0,.999999,.00637485,0,0,.999996,.00637721,0,0,.999987,.00638357,0,0,.999971,.006397,0,0,.999939,.00642142,0,0,.999888,.00646177,0,0,.999807,.00652387,0,207916e-9,.999689,.00661454,0,.00112051,.99952,.00674155,0,.00287719,.999283,.00691313,0,.00550145,.998936,.00713598,0,.00897928,.998165,.00738501,0,.0132829,.994847,.00734388,0,.01838,.993182,.00749991,0,.0242381,.991665,.0077246,0,.030826,.989708,.00797579,0,.0381152,.986663,.00813011,0,.0460794,.983288,.00830365,0,.0546951,.980104,.00853496,0,.0639411,.974855,.00861045,0,.0737988,.97045,.00879133,0,.0842516,.964509,.00886377,0,.0952848,.957594,.00890346,0,.106886,.950546,.00893289,0,.119044,.942225,.00890074,0,.131749,.933365,.00886826,0,.144994,.923202,.0087316,0,.158772,.912605,.00863082,0,.173078,.901099,.00847403,0,.187908,.888177,.00825838,0,.203261,.873955,.00801834,0,.219134,.860091,.00779026,0,.235527,.84434,.00752478,0,.252443,.828517,.00724074,0,.269883,.81239,.00693769,0,.287851,.79721,.00664817,0,.306352,.783489,.00634763,0,.325393,.769514,.00604221,0,.344981,.755419,.00573568,0,.365126,.741083,.00544359,0,.385839,.726059,.00515515,0,.407132,.710809,.00487139,0,.42902,.695052,.00459846,0,.45152,.678886,.00433412,0,.474651,.663042,.00407981,0,.498433,.646634,.00384264,0,.52289,.630117,.00360897,0,.548048,.613804,.00338863,0,.573936,.598338,.00318486,0,.600584,.582687,.00298377,0,.628027,.566809,.00280082,0,.656295,.550817,.00262255,0,.685417,.534937,.00245835,0,.715406,.519151,.00230574,0,.74624,.503118,.0021549,0,.777778,.487723,.00202008,0,.809524,.472725,.00189355,0,.84127,.457599,.00177108,0,.873016,.442558,.00165843,0,.904762,.427624,.00155494,0,.936508,.413171,.00145273,0,.968254,.399122,.00136454,0,1,1,.00826496,0,0,1,.00826499,0,0,1,.00826564,0,0,.999996,.00826842,0,0,.999987,.00827589,0,0,.999967,.00829167,0,0,.999933,.00832037,0,0,.999876,.00836768,0,109338e-10,.999786,.00844031,0,427145e-9,.999655,.00854603,0,.0016384,.999468,.00869337,0,.00372392,.999203,.008891,0,.00668513,.998803,.00914387,0,.0104968,.99748,.00935838,0,.015125,.994446,.00933309,0,.0205338,.99292,.00953084,0,.0266884,.991414,.0097893,0,.0335565,.989049,.0100228,0,.0411086,.98582,.0101664,0,.0493181,.982441,.0103582,0,.0581613,.978595,.0105292,0,.0676169,.973495,.0106274,0,.0776661,.968405,.0107261,0,.0882926,.962717,.0108234,0,.0994817,.955478,.0108102,0,.111221,.948275,.0107914,0,.123499,.940006,.0107161,0,.136308,.930831,.0106309,0,.149639,.920648,.0104083,0,.163485,.910205,.0102312,0,.177843,.898445,.0100051,0,.192707,.885986,.00971928,0,.208077,.872204,.00940747,0,.22395,.858436,.0091085,0,.240326,.843454,.00876595,0,.257208,.827437,.00839794,0,.274596,.811488,.00803692,0,.292496,.796039,.00767352,0,.310911,.781083,.0073097,0,.329849,.767642,.00694032,0,.349316,.753901,.00657476,0,.369323,.740131,.00622699,0,.38988,.725845,.0058838,0,.410999,.710991,.00555586,0,.432696,.696002,.00523089,0,.454987,.680461,.00492494,0,.47789,.664875,.00463464,0,.501426,.649273,.00435422,0,.52562,.63302,.0040875,0,.550498,.61705,.00384075,0,.576089,.601154,.00359557,0,.602427,.586008,.00337636,0,.629544,.570699,.00316019,0,.657479,.555166,.00296033,0,.686264,.539645,.00277552,0,.715924,.524159,.00259499,0,.746459,.508682,.00243257,0,.777789,.493163,.00227851,0,.809524,.478004,.00213083,0,.84127,.46347,.00199502,0,.873016,.448778,.00186967,0,.904762,.434105,.00174732,0,.936508,.419576,.00163861,0,.968254,.405541,.00153341,0,1,1,.0106462,0,0,1,.0106462,0,0,.999999,.010647,0,0,.999995,.0106502,0,0,.999985,.0106589,0,0,.999964,.0106773,0,0,.999925,.0107106,0,0,.999861,.0107655,0,712986e-10,.999763,.0108497,0,743959e-9,.999616,.0109716,0,.00227361,.999408,.0111408,0,.0046983,.999112,.0113659,0,.00800158,.998637,.0116475,0,.0121493,.996223,.0117231,0,.0171023,.994006,.0118064,0,.0228218,.992444,.0120254,0,.0292711,.991028,.0123314,0,.036417,.98803,.0124954,0,.0442295,.984816,.0126538,0,.0526815,.981399,.0128537,0,.0617492,.977085,.0129694,0,.0714114,.972154,.013091,0,.0816495,.966617,.0131166,0,.0924472,.960628,.0131583,0,.10379,.953295,.0131094,0,.115665,.94575,.0129966,0,.128062,.937654,.0128796,0,.140972,.927716,.0126477,0,.154387,.917932,.0123889,0,.168301,.907719,.012131,0,.182709,.89584,.0118013,0,.197608,.883526,.0114145,0,.212994,.870301,.0110075,0,.228867,.856272,.0106019,0,.245227,.842251,.0101938,0,.262074,.826466,.00973254,0,.279412,.810859,.0092846,0,.297244,.795051,.00883304,0,.315575,.780053,.00840272,0,.334412,.76575,.00796438,0,.35376,.752298,.00752526,0,.373631,.739153,.00711486,0,.394034,.725514,.00670361,0,.414983,.711473,.00632656,0,.436491,.696936,.00595206,0,.458575,.682126,.00559191,0,.481253,.667027,.00525362,0,.504547,.651875,.00493805,0,.528481,.636463,.00462848,0,.553081,.620641,.00433936,0,.578377,.604931,.00407,0,.604404,.589549,.00380864,0,.631197,.574712,.00357049,0,.658795,.559775,.00334466,0,.687238,.544514,.00312505,0,.716559,.529555,.00293199,0,.746776,.514402,.00274204,0,.777849,.499302,.00256647,0,.809524,.484114,.00239901,0,.84127,.469308,.00225148,0,.873016,.455133,.00210178,0,.904762,.440939,.0019727,0,.936508,.426627,.00184382,0,.968254,.412509,.00172548,0,1,1,.013628,0,0,1,.0136281,0,0,.999999,.0136289,0,0,.999995,.0136327,0,0,.999983,.0136427,0,0,.99996,.0136638,0,0,.999917,.0137022,0,0,.999846,.0137652,0,204597e-9,.999736,.0138615,0,.00116837,.999573,.0140007,0,.00303325,.99934,.0141927,0,.00580613,.999004,.0144457,0,.00945626,.998407,.0147489,0,.0139421,.995464,.014731,0,.0192202,.993328,.0148283,0,.0252495,.991799,.0150797,0,.0319921,.990397,.0154316,0,.0394138,.986835,.0155005,0,.0474843,.983938,.0157308,0,.0561763,.980154,.0158753,0,.0654661,.975659,.0159581,0,.0753326,.970171,.0159832,0,.0857571,.964803,.0160084,0,.0967236,.958366,.0159484,0,.108218,.950613,.0158001,0,.120227,.942874,.0155845,0,.132741,.935005,.0154292,0,.145751,.924991,.0150742,0,.159249,.914814,.0146757,0,.17323,.904743,.0143097,0,.187687,.893216,.0138695,0,.202619,.880769,.0133706,0,.218021,.868136,.0128606,0,.233894,.85469,.0123403,0,.250238,.840593,.0118091,0,.267052,.825808,.011253,0,.284341,.81009,.0107099,0,.302106,.79504,.0101636,0,.320354,.779757,.00964041,0,.33909,.764697,.00911896,0,.358322,.750913,.00859533,0,.378059,.738175,.00811592,0,.398311,.725242,.00764504,0,.41909,.711864,.00718885,0,.440412,.698009,.00675843,0,.462292,.683841,.00634984,0,.484748,.669391,.00595502,0,.507802,.654731,.00558671,0,.531477,.639805,.00523578,0,.555802,.624789,.00490834,0,.580805,.609325,.00459448,0,.606522,.593975,.00430342,0,.63299,.578983,.00403019,0,.66025,.564442,.0037707,0,.688346,.549835,.0035316,0,.717319,.535039,.00330255,0,.7472,.520403,.00308932,0,.777982,.505687,.00289335,0,.809524,.490939,.00270818,0,.84127,.476233,.0025343,0,.873016,.461624,.00237097,0,.904762,.447833,.00222065,0,.936508,.433992,.00207561,0,.968254,.420147,.00194955,0,1,1,.0173415,0,0,1,.0173416,0,0,.999999,.0173426,0,0,.999995,.0173468,0,0,.999983,.0173582,0,0,.999954,.0173822,0,0,.999908,.0174258,0,669501e-11,.999828,.0174973,0,427399e-9,.999705,.0176063,0,.00171019,.999524,.0177631,0,.0039248,.999263,.0179781,0,.00705382,.998878,.018258,0,.0110552,.998012,.0185551,0,.0158812,.994614,.0184264,0,.0214852,.993132,.0186385,0,.0278239,.991563,.0189067,0,.0348585,.989298,.0191577,0,.0425544,.986036,.0192522,0,.050881,.982558,.0194063,0,.059811,.978531,.019486,0,.0693209,.974198,.0195847,0,.0793895,.968148,.0194749,0,.0899984,.962565,.0194277,0,.101132,.956041,.0192991,0,.112775,.947749,.0189893,0,.124917,.94018,.018704,0,.137547,.93165,.0183458,0,.150655,.921798,.0178775,0,.164236,.911573,.0173618,0,.178281,.901569,.0168482,0,.192788,.890341,.016265,0,.207752,.877835,.0156199,0,.223171,.865472,.0149516,0,.239044,.852905,.0143274,0,.255371,.838906,.0136643,0,.272153,.824888,.0129903,0,.289393,.809977,.0123218,0,.307093,.794697,.0116572,0,.325259,.780028,.0110307,0,.343896,.765124,.0104236,0,.363012,.750411,.0098219,0,.382617,.737264,.00924397,0,.402719,.724799,.00868719,0,.423332,.712253,.00816476,0,.444469,.699267,.00767262,0,.466146,.685618,.00719746,0,.488383,.671736,.00673916,0,.511199,.657777,.00631937,0,.534618,.643497,.00592411,0,.558668,.62889,.00553928,0,.58338,.614299,.0051934,0,.608787,.599197,.00485985,0,.634929,.584175,.00454357,0,.661849,.569541,.00425787,0,.689594,.555193,.00397905,0,.718211,.540947,.00372364,0,.747742,.526593,.00348599,0,.778205,.512335,.00326103,0,.80953,.498017,.00305137,0,.84127,.483609,.00285485,0,.873016,.469368,.00267472,0,.904762,.455037,.00249945,0,.936508,.441493,.00234792,0,.968254,.428147,.00219936,0,1,1,.0219422,0,0,1,.0219423,0,0,.999998,.0219434,0,0,.999993,.0219481,0,0,.999981,.021961,0,0,.999949,.0219879,0,0,.999896,.0220367,0,593194e-10,.999808,.0221167,0,75364e-8,.99967,.0222383,0,.00237884,.999466,.0224125,0,.00495612,.999174,.0226495,0,.00844887,.998725,.0229525,0,.0128058,.996979,.0231123,0,.0179742,.994317,.0230742,0,.0239047,.992781,.0232895,0,.0305526,.991191,.0235734,0,.0378786,.987787,.0236152,0,.0458475,.985092,.0237994,0,.0544287,.981121,.0238553,0,.0635952,.976924,.0238706,0,.0733233,.97218,.0238704,0,.0835922,.965956,.0236598,0,.0943839,.959998,.0234735,0,.105682,.953245,.0232277,0,.117474,.944445,.0226973,0,.129747,.937087,.0223527,0,.142491,.928341,.0218144,0,.155697,.9184,.0211516,0,.169358,.907959,.0204553,0,.183469,.89808,.0197673,0,.198024,.887047,.0189915,0,.21302,.875221,.0182082,0,.228455,.86269,.0173584,0,.244329,.850735,.0165718,0,.260639,.837545,.0157524,0,.277389,.823639,.0149482,0,.29458,.809699,.0141431,0,.312216,.794797,.0133527,0,.3303,.780578,.0126193,0,.34884,.766019,.0118914,0,.367842,.751447,.0111839,0,.387315,.737275,.010514,0,.40727,.724545,.00987277,0,.427717,.712644,.00926569,0,.448671,.700432,.00869029,0,.470149,.687664,.00814691,0,.492167,.674288,.00763012,0,.514746,.660966,.00714437,0,.537911,.647264,.00668457,0,.561688,.633431,.00626581,0,.586108,.619133,.00585593,0,.611206,.604935,.00548188,0,.637022,.590236,.00513288,0,.663599,.575473,.0047906,0,.690989,.561228,.00448895,0,.719242,.547054,.00420233,0,.748411,.533175,.00392869,0,.778531,.519163,.00367445,0,.809583,.505328,.00344097,0,.84127,.491446,.00322003,0,.873016,.477356,.00301283,0,.904762,.46356,.00282592,0,.936508,.449623,.00264956,0,.968254,.436068,.00246956,0,1,1,.0276135,0,0,1,.0276136,0,0,.999998,.0276148,0,0,.999993,.0276201,0,0,.999976,.0276342,0,0,.999945,.027664,0,0,.999884,.0277179,0,18679e-8,.999784,.027806,0,.00119607,.99963,.0279394,0,.00318407,.999401,.0281295,0,.00613601,.999066,.0283858,0,.00999963,.998524,.0287027,0,.0147164,.995702,.0286256,0,.0202295,.993593,.0286733,0,.0264876,.992067,.0288989,0,.0334452,.990548,.0292135,0,.0410621,.986775,.0291296,0,.0493032,.984054,.0293099,0,.0581381,.979481,.0291881,0,.0675397,.975297,.0291598,0,.0774848,.96981,.028954,0,.0879528,.963524,.028628,0,.0989258,.957398,.0283135,0,.110388,.950088,.0278469,0,.122327,.941538,.0271798,0,.134729,.933332,.0265388,0,.147587,.924392,.0257776,0,.160889,.914581,.024916,0,.174631,.904347,.0240242,0,.188806,.894324,.0231229,0,.203409,.883724,.022153,0,.218437,.872207,.0211355,0,.233888,.859927,.0201048,0,.249761,.848373,.0191263,0,.266056,.836023,.0181306,0,.282774,.82289,.0171718,0,.299917,.809324,.0162196,0,.317488,.795361,.0152622,0,.335493,.781253,.01439,0,.353936,.767338,.013533,0,.372825,.753156,.0127244,0,.392168,.739122,.0119454,0,.411976,.725358,.0112054,0,.432259,.712949,.010487,0,.453032,.701621,.00984032,0,.47431,.689703,.00921495,0,.496111,.677216,.00862492,0,.518456,.664217,.00806882,0,.541367,.65137,.00755922,0,.564872,.638,.00705705,0,.589001,.62453,.00661266,0,.613789,.610601,.00618432,0,.639277,.59676,.00578033,0,.66551,.582433,.00540927,0,.692539,.568026,.00506104,0,.720422,.55414,.0047353,0,.749216,.540178,.00442889,0,.778974,.526513,.00414363,0,.809711,.512954,.00388237,0,.84127,.499403,.00362875,0,.873016,.486026,.00340827,0,.904762,.472345,.00318598,0,.936508,.458828,.00297635,0,.968254,.445379,.00279447,0,1,1,.0345716,0,0,1,.0345717,0,0,.999999,.034573,0,0,.999991,.0345787,0,0,.999974,.0345941,0,0,.999937,.0346263,0,188589e-11,.999869,.0346847,0,409238e-9,.999757,.0347798,0,.0017674,.999582,.0349233,0,.00413658,.999322,.0351265,0,.00747408,.998939,.0353967,0,.0117157,.998219,.0357018,0,.0167966,.994974,.0354726,0,.0226572,.993201,.0355621,0,.0292445,.991573,.0357641,0,.0365123,.989301,.0359252,0,.0444203,.985712,.0358017,0,.0529334,.982411,.0358353,0,.0620214,.977827,.035617,0,.0716574,.973278,.0354398,0,.0818186,.967397,.0350483,0,.0924846,.960696,.0344795,0,.103638,.954349,.0339861,0,.115263,.946066,.0331323,0,.127348,.938012,.032359,0,.13988,.929413,.0314413,0,.152849,.920355,.0304103,0,.166248,.910586,.0292785,0,.18007,.900609,.0281391,0,.194308,.890093,.0269103,0,.208958,.880013,.0257269,0,.224018,.869001,.0244671,0,.239485,.85751,.0232252,0,.255359,.84582,.0220117,0,.271638,.834383,.0208274,0,.288324,.822158,.0196628,0,.305419,.809056,.0185306,0,.322927,.795832,.0174174,0,.340851,.782547,.0163758,0,.359199,.7689,.015391,0,.377975,.755526,.0144488,0,.397189,.741681,.0135372,0,.416851,.728178,.0126957,0,.436971,.714642,.0118812,0,.457564,.702756,.0111165,0,.478644,.69175,.0104145,0,.500229,.680159,.00974439,0,.522339,.668073,.00911926,0,.544997,.655405,.00851393,0,.56823,.642921,.00797637,0,.592068,.629993,.00745119,0,.616546,.616828,.00696972,0,.641705,.603305,.00652425,0,.66759,.589833,.00610188,0,.694255,.575945,.00570834,0,.72176,.561745,.00533384,0,.750168,.548277,.00500001,0,.779545,.534467,.00467582,0,.809933,.521032,.00438092,0,.841272,.507877,.00410348,0,.873016,.494654,.00383618,0,.904762,.481592,.00358699,0,.936508,.468509,.00337281,0,.968254,.455293,.00316196,0,1,1,.0430698,0,0,1,.0430699,0,0,.999998,.0430713,0,0,.999991,.0430773,0,0,.99997,.0430936,0,0,.999928,.0431277,0,406396e-10,.999852,.0431893,0,744376e-9,.999724,.0432895,0,.0024806,.999527,.0434397,0,.00524779,.99923,.0436507,0,.00898164,.998783,.0439255,0,.0136083,.997507,.0441104,0,.0190582,.994418,.0438225,0,.0252694,.992864,.0439396,0,.0321879,.991127,.0440962,0,.039767,.987331,.0438408,0,.0479667,.984819,.0438991,0,.056752,.980384,.0435906,0,.0660929,.975846,.0432543,0,.075963,.970748,.0428293,0,.0863398,.964303,.042153,0,.0972035,.95772,.0414111,0,.108537,.950747,.0405893,0,.120325,.942533,.0394887,0,.132554,.934045,.0383544,0,.145215,.924942,.037057,0,.158296,.915811,.0356993,0,.17179,.90612,.0342401,0,.185691,.896434,.0328078,0,.199993,.886021,.031288,0,.214691,.876081,.0297776,0,.229782,.865608,.0282334,0,.245265,.854924,.026749,0,.261138,.843607,.02526,0,.277401,.832456,.0238214,0,.294056,.821342,.0224682,0,.311104,.809303,.0211297,0,.328548,.796468,.0198387,0,.346394,.784046,.0186227,0,.364645,.771262,.0174561,0,.38331,.758118,.0163806,0,.402396,.745075,.0153287,0,.421912,.731926,.0143647,0,.44187,.71863,.0134363,0,.462283,.705414,.0125603,0,.483165,.693792,.0117508,0,.504535,.683108,.0110016,0,.52641,.67183,.0102757,0,.548816,.66015,.00962044,0,.571776,.647907,.00898031,0,.595323,.635734,.00840811,0,.619489,.623208,.00786211,0,.644317,.610438,.00734953,0,.669852,.597345,.00687688,0,.696148,.584138,.00643469,0,.723267,.5707,.00602236,0,.75128,.556966,.0056324,0,.780258,.543607,.00528277,0,.810268,.530213,.00493999,0,.841311,.516912,.00462265,0,.873016,.503916,.0043307,0,.904762,.491146,.00406858,0,.936508,.478439,.00381436,0,.968254,.465834,.00358003,0,1,1,.0534039,0,0,1,.053404,0,0,.999998,.0534055,0,0,.999989,.0534116,0,0,.999968,.0534283,0,0,.999918,.0534633,0,155895e-9,.99983,.0535262,0,.00120914,.999685,.0536281,0,.00334944,.999461,.0537799,0,.00653077,.999119,.0539902,0,.0106718,.998582,.0542524,0,.0156907,.995919,.0540318,0,.0215147,.993735,.0538914,0,.0280801,.992126,.0539557,0,.0353323,.990266,.0540401,0,.0432247,.986317,.0536064,0,.0517172,.983213,.0534425,0,.0607754,.978303,.0528622,0,.0703698,.973665,.0523363,0,.0804742,.968091,.0516165,0,.0910667,.961026,.0505434,0,.102128,.954333,.049523,0,.113641,.946372,.0481698,0,.125591,.938254,.0467674,0,.137965,.929516,.0452341,0,.150754,.920106,.0435083,0,.163947,.910899,.0417399,0,.177537,.901532,.0399389,0,.191516,.891919,.0380901,0,.205881,.882006,.0362341,0,.220626,.871965,.0343444,0,.235749,.862145,.0324832,0,.251248,.852058,.0306681,0,.267121,.84161,.0289097,0,.283368,.830806,.0272079,0,.299992,.820476,.0256089,0,.316992,.809514,.0240394,0,.334374,.797865,.0225379,0,.35214,.785621,.0211235,0,.370296,.773765,.0197908,0,.388849,.761629,.0185235,0,.407807,.748891,.0173358,0,.427178,.736437,.0162305,0,.446974,.723707,.0151778,0,.467207,.710606,.0141791,0,.487892,.698019,.0132592,0,.509046,.686203,.0123887,0,.530687,.675692,.0115976,0,.552839,.664826,.0108325,0,.575527,.65349,.0101348,0,.59878,.641774,.00947756,0,.622634,.629794,.00886058,0,.647128,.617647,.00828526,0,.672308,.60534,.00775312,0,.698231,.592718,.00726033,0,.724958,.579746,.00679731,0,.752563,.566763,.00636111,0,.781127,.553515,.00595228,0,.810733,.540118,.00556876,0,.841426,.527325,.00523051,0,.873016,.514265,.00490712,0,.904762,.501406,.00460297,0,.936508,.488922,.00431247,0,.968254,.476541,.0040472,0,1,1,.0659184,0,0,1,.0659185,0,0,.999998,.06592,0,0,.999988,.0659259,0,0,.999963,.0659423,0,0,.999907,.0659764,0,374198e-9,.999806,.0660376,0,.00182071,.999639,.0661361,0,.0043894,.999378,.0662814,0,.00800055,.998985,.0664779,0,.0125594,.998285,.0666914,0,.0179786,.995071,.0661989,0,.0241822,.993172,.0660454,0,.031106,.991438,.0660105,0,.0386952,.988428,.0656875,0,.0469032,.985218,.0652913,0,.0556905,.981128,.0647107,0,.065023,.976015,.0638491,0,.0748717,.97097,.062993,0,.0852112,.964582,.0617927,0,.0960199,.957383,.0603626,0,.107279,.949969,.0588128,0,.118971,.941843,.0570274,0,.131084,.933624,.0551885,0,.143604,.924543,.053122,0,.156521,.914919,.0508897,0,.169825,.905773,.0486418,0,.18351,.896434,.0463364,0,.197569,.887195,.0440623,0,.211997,.877706,.0417799,0,.226789,.867719,.03945,0,.241944,.858587,.037243,0,.257458,.849317,.0350956,0,.273331,.839585,.0329852,0,.289563,.829856,.0310028,0,.306154,.819589,.0290953,0,.323108,.809714,.0272738,0,.340426,.79934,.0255631,0,.358113,.788224,.0239175,0,.376175,.776619,.0223831,0,.394616,.76521,.0209298,0,.413445,.753716,.0195786,0,.432671,.741564,.0183001,0,.452305,.729413,.0171259,0,.472358,.717146,.0159933,0,.492845,.70436,.0149495,0,.513783,.69219,.0139681,0,.535189,.680289,.0130577,0,.557087,.669611,.0122198,0,.5795,.659113,.0114174,0,.602459,.648148,.0106729,0,.625997,.636905,.00998997,0,.650154,.625154,.00934313,0,.674976,.613481,.00874839,0,.700518,.60154,.00818265,0,.726845,.58943,.00766889,0,.754032,.576828,.00717153,0,.782167,.564194,.00672696,0,.811344,.551501,.00630863,0,.841644,.538635,.00592177,0,.873016,.525724,.00554888,0,.904762,.513209,.00520225,0,.936508,.500457,.00488231,0,.968254,.48799,.00457153,0,1,1,.0810131,0,0,1,.0810133,0,0,.999997,.0810145,0,0,.999985,.08102,0,0,.999956,.0810347,0,195026e-10,.999893,.0810656,0,719316e-9,.999777,.0811205,0,.00259774,.999583,.081208,0,.00561807,.999281,.0813343,0,.00967472,.998813,.0814969,0,.0146627,.997597,.0815217,0,.0204902,.994379,.0808502,0,.0270802,.992744,.0806792,0,.0343674,.990745,.0804589,0,.0422974,.986646,.0796107,0,.0508242,.983611,.0790913,0,.0599087,.978869,.0780746,0,.0695175,.973475,.0768218,0,.0796223,.967845,.0754926,0,.0901983,.960778,.0737063,0,.101224,.953333,.0718052,0,.112682,.945274,.0695946,0,.124555,.936955,.0672492,0,.136831,.928319,.0647732,0,.149496,.919075,.0620947,0,.162542,.909114,.0591816,0,.175958,.900137,.0563917,0,.189739,.891069,.0535392,0,.203877,.882262,.0507642,0,.218368,.873232,.0479793,0,.233208,.864042,.045226,0,.248393,.855002,.0425413,0,.263923,.846569,.0400126,0,.279796,.837714,.0375269,0,.296012,.828918,.0352027,0,.312573,.819783,.0330011,0,.329479,.810129,.0308908,0,.346734,.800866,.0289112,0,.364342,.79093,.0270255,0,.382307,.780593,.0252758,0,.400637,.769511,.0236178,0,.419337,.758558,.0220652,0,.438418,.747632,.0206289,0,.457889,.736146,.0192873,0,.477761,.724093,.0180333,0,.49805,.71234,.0168264,0,.51877,.700201,.015746,0,.53994,.687949,.0147027,0,.561581,.676163,.0137512,0,.583718,.665001,.0128655,0,.60638,.65472,.0120366,0,.629599,.644213,.0112604,0,.653415,.633382,.0105413,0,.677874,.62212,.00986498,0,.70303,.610631,.00923308,0,.728948,.599078,.00864206,0,.755706,.587519,.00811784,0,.783396,.575505,.00761237,0,.812121,.563148,.00713949,0,.841989,.550828,.00668379,0,.873035,.538458,.00627715,0,.904762,.525905,.00588336,0,.936508,.513517,.00552687,0,.968254,.501395,.00519681,0,1,1,.0991506,0,0,1,.0991504,0,0,.999996,.0991515,0,0,.999984,.0991558,0,0,.999947,.0991672,0,114389e-9,.999874,.0991912,0,.00121503,.999739,.0992331,0,.00356108,.999514,.0992983,0,.00705578,.999159,.0993877,0,.011574,.998586,.0994837,0,.017003,.995731,.0988425,0,.0232484,.993384,.098276,0,.0302318,.991615,.0979269,0,.0378884,.989029,.0973432,0,.0461641,.985373,.0963539,0,.0550136,.981278,.0952306,0,.0643988,.975777,.0936233,0,.0742868,.970526,.0920219,0,.0846501,.963755,.0898912,0,.0954644,.956676,.0876064,0,.106709,.948099,.0847751,0,.118367,.939718,.0818638,0,.130423,.931305,.078857,0,.142862,.922342,.0756127,0,.155674,.912842,.0721473,0,.168849,.903304,.0686195,0,.182378,.89411,.0650589,0,.196255,.885512,.0616022,0,.210473,.877193,.0582434,0,.225027,.86877,.0548979,0,.239915,.860267,.0516095,0,.255132,.851915,.048468,0,.270678,.843912,.0454447,0,.286551,.83604,.0425612,0,.302751,.828245,.0398752,0,.31928,.820159,.0373198,0,.336138,.81167,.034916,0,.35333,.802659,.0326402,0,.370858,.793921,.0304901,0,.388728,.784713,.0284857,0,.406944,.774946,.0266186,0,.425515,.76448,.0248593,0,.444449,.753793,.0232114,0,.463756,.743506,.0217039,0,.483447,.732555,.0202841,0,.503535,.720965,.0189648,0,.524036,.709422,.0177189,0,.544968,.697756,.0165626,0,.56635,.685565,.015483,0,.588208,.673987,.0144892,0,.610569,.66244,.0135607,0,.633466,.651675,.0126956,0,.656936,.641598,.0118788,0,.681025,.63121,.0111261,0,.705788,.620514,.010437,0,.731289,.609366,.00978747,0,.757606,.598137,.00917257,0,.784834,.586966,.00859778,0,.813085,.575549,.00806803,0,.842485,.563797,.00757294,0,.87313,.551758,.00710592,0,.904762,.539894,.0066841,0,.936508,.527901,.00627901,0,.968254,.515819,.00590506,0,1,1,.120864,0,0,1,.120864,0,0,.999996,.120864,0,0,.99998,.120867,0,0,.99994,.120872,0,323781e-9,.999852,.120884,0,.00188693,.999693,.120903,0,.00473489,.999426,.120929,0,.00872704,.999002,.120955,0,.0137237,.998235,.120918,0,.0196068,.994608,.119764,0,.0262803,.992997,.119265,0,.0336657,.990968,.11863,0,.0416987,.987002,.117261,0,.0503261,.983524,.116009,0,.0595035,.97875,.114252,0,.0691935,.972652,.11193,0,.0793645,.966613,.109555,0,.0899894,.959275,.106612,0,.101045,.951272,.103375,0,.112512,.942323,.0996594,0,.124372,.933679,.0958841,0,.136611,.924822,.0919265,0,.149216,.915742,.0878061,0,.162176,.906348,.0834894,0,.175482,.896883,.079085,0,.189125,.88774,.0746745,0,.203098,.87986,.0705773,0,.217396,.871998,.0665005,0,.232015,.864325,.0625413,0,.24695,.856685,.0586781,0,.2622,.84925,.0550063,0,.277761,.841719,.0514727,0,.293634,.834755,.0481398,0,.309819,.827853,.0450172,0,.326315,.820888,.0420969,0,.343126,.813616,.0393702,0,.360254,.805767,.0367771,0,.377701,.797338,.0343274,0,.395474,.789122,.0320529,0,.413577,.780601,.0299485,0,.432018,.771424,.0279812,0,.450804,.761502,.0261054,0,.469944,.751166,.0243942,0,.489451,.741276,.0228087,0,.509337,.730898,.0213265,0,.529617,.719878,.0199307,0,.550307,.708379,.0186574,0,.571428,.697165,.0174446,0,.593003,.685554,.0163144,0,.615059,.673631,.015276,0,.637628,.662385,.0143003,0,.660746,.651059,.0134112,0,.68446,.640451,.0125794,0,.70882,.630536,.011793,0,.733893,.620316,.0110547,0,.759756,.609722,.0103668,0,.786505,.598804,.00973009,0,.814259,.587871,.00912812,0,.843157,.577121,.00858916,0,.87334,.566019,.00807333,0,.904762,.554664,.00759687,0,.936508,.543101,.00714759,0,.968254,.531558,.00673418,0,1,1,.146767,0,0,1,.146767,0,0,.999997,.146767,0,0,.999977,.146765,0,320658e-11,.999929,.146762,0,682576e-9,.999823,.146753,0,.00276402,.999633,.146735,0,.00614771,.999314,.146699,0,.0106613,.998796,.14662,0,.0161546,.997124,.146107,0,.0225063,.994062,.144857,0,.0296198,.992154,.144011,0,.037417,.989186,.142712,0,.0458348,.985279,.140926,0,.0548211,.980826,.13885,0,.0643326,.975056,.136168,0,.074333,.969005,.133217,0,.0847917,.961554,.12959,0,.0956828,.954206,.125886,0,.106984,.945046,.121335,0,.118675,.935678,.116492,0,.130741,.926748,.111635,0,.143166,.917764,.106625,0,.155939,.908358,.101325,0,.169049,.899219,.0960249,0,.182487,.890089,.0906527,0,.196245,.881488,.0853905,0,.210317,.874031,.0804177,0,.224697,.866932,.0756005,0,.23938,.859976,.0709019,0,.254364,.853375,.0664391,0,.269646,.846971,.0622012,0,.285223,.840483,.058129,0,.301096,.833969,.0542762,0,.317265,.82806,.0507042,0,.333729,.822128,.047368,0,.350491,.815989,.044272,0,.367554,.809336,.0413444,0,.38492,.802177,.038601,0,.402594,.79441,.0360227,0,.420582,.786573,.0336383,0,.438891,.778619,.0314321,0,.457527,.77,.029362,0,.476499,.760698,.0274102,0,.49582,.750932,.0256146,0,.5155,.740993,.023974,0,.535555,.731159,.0224182,0,.556,.720836,.0209889,0,.576855,.709913,.0196411,0,.598143,.698415,.0183824,0,.619888,.68745,.0172222,0,.642123,.676154,.0161509,0,.664883,.664383,.0151397,0,.688211,.6533,.0141873,0,.71216,.642072,.0133105,0,.736792,.631412,.0124932,0,.762186,.621622,.0117408,0,.788439,.611681,.0110358,0,.815672,.60142,.0103775,0,.844034,.59083,.00975623,0,.873699,.580254,.00918084,0,.904765,.569841,.00864721,0,.936508,.559224,.00815731,0,.968254,.548315,.00767924,0,1,1,.177563,0,0,1,.177563,0,0,.999994,.177562,0,0,.999972,.177555,0,664171e-10,.999914,.177536,0,.0012276,.999787,.177496,0,.00388025,.999556,.17742,0,.00783463,.999165,.177285,0,.0128953,.9985,.177037,0,.0189053,.995388,.175634,0,.025742,.993102,.174375,0,.033309,.990992,.173121,0,.0415298,.986932,.170896,0,.0503425,.982786,.16847,0,.0596964,.977592,.165455,0,.0695498,.971075,.161676,0,.0798676,.963967,.157458,0,.0906201,.956397,.152836,0,.101783,.947489,.147467,0,.113333,.937564,.14145,0,.125254,.928182,.135383,0,.137529,.919027,.129212,0,.150144,.909618,.12276,0,.163088,.900492,.116273,0,.176351,.891671,.1098,0,.189924,.883146,.103362,0,.203799,.875151,.0970799,0,.21797,.868338,.0911732,0,.232433,.862033,.0854966,0,.247182,.856107,.0800691,0,.262216,.850644,.0749618,0,.27753,.845261,.070079,0,.293124,.839885,.0654321,0,.308997,.834609,.0610975,0,.325149,.829083,.0569741,0,.341581,.82404,.0531736,0,.358294,.818968,.049665,0,.37529,.813496,.0463856,0,.392573,.807533,.0433217,0,.410148,.80099,.0404402,0,.428019,.793891,.0377578,0,.446192,.786281,.0352616,0,.464676,.778773,.0329577,0,.483478,.770737,.030808,0,.502608,.762094,.0287964,0,.522079,.752898,.0269254,0,.541905,.743306,.0251926,0,.5621,.733416,.023595,0,.582684,.723742,.0221155,0,.603677,.713542,.0207435,0,.625106,.702755,.019434,0,.646998,.691484,.0182046,0,.66939,.680531,.0170771,0,.692324,.66953,.0160339,0,.715849,.658126,.0150677,0,.740028,.646933,.0141551,0,.764937,.636107,.0133179,0,.790673,.625271,.0125284,0,.817358,.615225,.0117937,0,.84515,.605678,.0111181,0,.874244,.59583,.0104759,0,.904828,.585704,.00986672,0,.936508,.575413,.00929712,0,.968254,.565373,.00876713,0,1,1,.214058,0,0,.999999,.214058,0,0,.999994,.214055,0,0,.999966,.214039,0,259642e-9,.999893,.213998,0,.00200075,.999737,.21391,0,.00527775,.999449,.213745,0,.00983959,.99896,.213458,0,.0154755,.9979,.212855,0,.0220249,.994278,.210779,0,.0293654,.992254,.20926,0,.0374021,.98881,.206908,0,.0460604,.984715,.204009,0,.0552802,.979738,.200471,0,.0650127,.972884,.195813,0,.0752175,.965996,.190856,0,.0858612,.957974,.185077,0,.0969155,.949155,.17868,0,.108356,.939288,.171513,0,.120163,.928996,.163838,0,.132319,.919563,.156246,0,.144808,.910004,.148359,0,.157618,.900791,.140417,0,.170737,.892135,.132569,0,.184155,.883803,.124741,0,.197866,.876034,.117091,0,.211861,.869219,.109835,0,.226134,.863062,.102859,0,.240682,.857795,.0962928,0,.255499,.853009,.0900725,0,.270583,.848603,.0842101,0,.285931,.844335,.0786527,0,.301542,.840208,.0734397,0,.317415,.836035,.0685334,0,.33355,.83172,.0639275,0,.349948,.827135,.0595909,0,.36661,.822797,.0556204,0,.383539,.818387,.0519394,0,.400738,.813565,.0485317,0,.41821,.808142,.0453138,0,.435961,.802212,.0423354,0,.453997,.79573,.0395553,0,.472324,.788741,.036988,0,.490951,.781093,.0345688,0,.509887,.773597,.0323297,0,.529144,.765622,.0302719,0,.548735,.757083,.0283477,0,.568674,.747992,.0265562,0,.588979,.738591,.0248844,0,.609671,.728719,.0233342,0,.630773,.719146,.0219081,0,.652314,.709165,.0205711,0,.674328,.69875,.0193248,0,.696854,.687884,.0181582,0,.719942,.676818,.0170746,0,.743651,.666247,.0160718,0,.768057,.655284,.0151262,0,.793253,.64401,.0142561,0,.819363,.633353,.0134327,0,.846547,.622674,.012653,0,.875017,.612265,.0119354,0,.905021,.602455,.0112533,0,.936508,.593147,.0106234,0,.968254,.583592,.0100213,0,1,1,.25717,0,0,1,.25717,0,0,.999992,.257164,0,0,.999958,.257135,0,641715e-9,.999864,.25706,0,.00305314,.999666,.256897,0,.00700975,.999302,.256596,0,.0122194,.998663,.25607,0,.0184622,.995607,.254123,0,.0255773,.993094,.252081,0,.0334439,.9907,.249867,0,.0419696,.98594,.246118,0,.0510823,.981214,.242049,0,.0607242,.974966,.236869,0,.0708486,.967589,.230724,0,.081417,.95915,.223635,0,.0923974,.950257,.21596,0,.103763,.940165,.207296,0,.115491,.929396,.197901,0,.127562,.919288,.188437,0,.13996,.909428,.178762,0,.15267,.900105,.169072,0,.165679,.891418,.159478,0,.178979,.883347,.15002,0,.192558,.875992,.140813,0,.20641,.869466,.13196,0,.220529,.863699,.123501,0,.234907,.858553,.115436,0,.249542,.854379,.107901,0,.264428,.850894,.10088,0,.279564,.847632,.0942296,0,.294947,.844571,.0879861,0,.310575,.84163,.0821534,0,.326448,.838542,.0766409,0,.342566,.835412,.0715322,0,.358929,.831899,.0666883,0,.37554,.828177,.0622175,0,.392399,.82416,.0580452,0,.409511,.820393,.054267,0,.426878,.816068,.0507172,0,.444506,.811201,.0474041,0,.4624,.805785,.0443174,0,.480566,.799878,.0414562,0,.499013,.793469,.0388147,0,.517749,.786473,.0363453,0,.536785,.778874,.0340225,0,.556134,.771277,.0318599,0,.575809,.763426,.0298859,0,.595827,.755044,.0280357,0,.616207,.746161,.0262979,0,.636973,.737124,.0247295,0,.65815,.72761,.0232514,0,.679772,.717822,.0218755,0,.701876,.708279,.0205942,0,.724509,.698333,.0193947,0,.74773,.68802,.0182717,0,.771609,.677321,.0172044,0,.79624,.666504,.0162122,0,.821743,.656184,.0152924,0,.84828,.64556,.0144326,0,.876069,.634636,.0136157,0,.905404,.624124,.0128612,0,.936508,.613914,.0121435,0,.968254,.603589,.0114887,0,1,1,.307946,0,0,.999999,.307945,0,0,.999988,.307934,0,204479e-10,.999944,.307886,0,.00127833,.999824,.307756,0,.00445047,.999565,.30748,0,.00914673,.999085,.306966,0,.0150498,.998103,.306004,0,.0219367,.994249,.303028,0,.0296485,.991807,.300435,0,.038068,.987773,.296554,0,.0471062,.982673,.2916,0,.0566942,.976623,.285641,0,.0667768,.968757,.27815,0,.0773099,.959849,.269529,0,.088257,.950663,.260248,0,.0995879,.940129,.249704,0,.111277,.92895,.238291,0,.123304,.917996,.226501,0,.13565,.907813,.214669,0,.148299,.898305,.202835,0,.161237,.889626,.191158,0,.174455,.88175,.179695,0,.187941,.874715,.168548,0,.201687,.868746,.15792,0,.215687,.863703,.147807,0,.229933,.859315,.138149,0,.24442,.855538,.128993,0,.259145,.852428,.120414,0,.274103,.850168,.112498,0,.289293,.848132,.105054,0,.304711,.846291,.0981087,0,.320357,.844431,.0915942,0,.33623,.842493,.0855056,0,.35233,.840368,.0798204,0,.368658,.83798,.0745097,0,.385214,.83523,.0695424,0,.402002,.832091,.0649092,0,.419023,.828667,.0606291,0,.436282,.824805,.0566523,0,.453782,.820988,.0530229,0,.471529,.816635,.0496364,0,.489528,.811725,.0464658,0,.507788,.806316,.0435082,0,.526317,.800469,.0407873,0,.545124,.794107,.038255,0,.564221,.787218,.0358825,0,.583621,.779872,.0336785,0,.603341,.772097,.0316379,0,.623397,.764484,.0297379,0,.643812,.756428,.0279581,0,.664611,.748022,.0263153,0,.685824,.739268,.0247799,0,.707488,.73024,.0233385,0,.729646,.720893,.0220035,0,.752354,.71119,.0207555,0,.77568,.701791,.0195843,0,.799715,.692184,.0184891,0,.824574,.682258,.0174541,0,.850417,.67206,.0164873,0,.877466,.661717,.0155959,0,.90604,.651462,.0147519,0,.936528,.641467,.0139727,0,.968254,.631229,.0132363,0,1,1,.367573,0,0,.999999,.367571,0,0,.999984,.367553,0,183382e-9,.999925,.367473,0,.00225254,.999759,.367259,0,.00628165,.99941,.366801,0,.0117858,.998739,.365946,0,.0184359,.995529,.363191,0,.0260114,.992875,.360171,0,.0343581,.989135,.355981,0,.0433637,.984166,.350401,0,.0529438,.977871,.343348,0,.0630334,.96951,.334341,0,.0735805,.959964,.323862,0,.0845437,.950162,.312521,0,.095889,.938882,.299577,0,.107588,.926992,.285573,0,.119617,.915589,.271212,0,.131957,.904791,.256611,0,.144591,.895177,.242224,0,.157503,.886403,.227952,0,.170682,.878957,.214192,0,.184117,.872418,.200795,0,.197799,.867029,.188015,0,.21172,.862835,.175975,0,.225873,.859411,.164526,0,.240253,.856655,.153693,0,.254854,.854519,.14352,0,.269673,.852828,.13397,0,.284707,.851412,.124984,0,.299953,.850609,.116748,0,.315408,.849855,.10905,0,.331073,.849017,.101839,0,.346946,.848079,.0951359,0,.363028,.846911,.0888774,0,.379318,.845445,.0830375,0,.395818,.84362,.0775844,0,.41253,.841411,.0725054,0,.429457,.838768,.0677691,0,.446602,.835801,.0634016,0,.463968,.832341,.0593095,0,.481561,.828424,.0555121,0,.499386,.824312,.052024,0,.51745,.819918,.0487865,0,.535761,.815072,.0457801,0,.554328,.809863,.0430184,0,.573162,.804164,.0404245,0,.592275,.798034,.0380146,0,.611681,.791436,.0357436,0,.631398,.784498,.0336475,0,.651445,.777125,.0316666,0,.671845,.769365,.0298122,0,.692628,.761579,.0281001,0,.713827,.753746,.0265049,0,.735484,.745573,.0250067,0,.75765,.737083,.0236026,0,.78039,.728545,.0223302,0,.803789,.719691,.0211243,0,.82796,.710569,.0199983,0,.853056,.701216,.0189569,0,.879298,.692094,.0179702,0,.907014,.682909,.0170418,0,.936691,.673509,.0161732,0,.968254,.663863,.0153406,0,1,1,.437395,0,0,.999998,.437394,0,0,.99998,.437363,0,616704e-9,.999891,.437232,0,.00367925,.999656,.436877,0,.00867446,.999148,.436121,0,.0150679,.997959,.434564,0,.022531,.993464,.430134,0,.0308507,.990606,.426077,0,.0398805,.985027,.419397,0,.0495148,.978491,.41118,0,.0596749,.969643,.40048,0,.0703001,.959189,.38769,0,.0813427,.948223,.373575,0,.0927641,.935955,.357622,0,.104533,.923237,.34043,0,.116624,.911074,.322735,0,.129015,.899724,.30479,0,.141687,.890189,.287392,0,.154626,.881796,.270248,0,.167818,.874781,.253659,0,.181252,.869166,.237786,0,.194918,.864725,.222618,0,.208807,.861565,.208356,0,.222913,.859284,.194867,0,.237229,.857677,.18212,0,.25175,.856714,.17018,0,.266473,.856155,.158969,0,.281392,.8558,.148413,0,.296505,.855672,.138578,0,.311811,.855538,.129345,0,.327306,.855689,.120861,0,.342991,.855767,.112969,0,.358864,.855618,.105593,0,.374925,.85525,.0987451,0,.391176,.854583,.0923727,0,.407616,.853534,.0864143,0,.424249,.852061,.0808338,0,.441076,.850253,.0756771,0,.4581,.848004,.0708612,0,.475324,.845333,.0663784,0,.492754,.842376,.0622631,0,.510394,.838956,.0584112,0,.528251,.835121,.0548328,0,.546331,.830842,.0514838,0,.564644,.826212,.048355,0,.583198,.821522,.0454714,0,.602005,.816551,.0428263,0,.621078,.811211,.0403612,0,.640434,.805479,.038039,0,.660089,.799409,.0358739,0,.680066,.79306,.0338727,0,.70039,.786395,.0319985,0,.721094,.779416,.030241,0,.742215,.77214,.0285951,0,.7638,.764636,.0270747,0,.785912,.756836,.0256354,0,.808628,.749315,.0243027,0,.832055,.741561,.0230497,0,.856338,.733589,.0218801,0,.88169,.725479,.020784,0,.908441,.717255,.0197702,0,.937125,.708829,.0188168,0,.968254,.700191,.0179113,0,1,1,.518937,0,0,.999998,.518933,0,0,.999967,.518883,0,.00147741,.999832,.51866,0,.00573221,.999466,.518057,0,.011826,.998644,.516752,0,.0192116,.994458,.512347,0,.027573,.991223,.507675,0,.0367099,.985515,.500188,0,.046487,.978308,.490408,0,.0568071,.968359,.477357,0,.0675984,.95682,.461752,0,.0788059,.943929,.443796,0,.090386,.930224,.423893,0,.102304,.916514,.402682,0,.114532,.903653,.380914,0,.127047,.892315,.359212,0,.139828,.882942,.338102,0,.152861,.875438,.31773,0,.16613,.869642,.298186,0,.179624,.865304,.279491,0,.193332,.862382,.261804,0,.207247,.860666,.245146,0,.22136,.859788,.229406,0,.235666,.859608,.214605,0,.250158,.859912,.200691,0,.264832,.86053,.187623,0,.279684,.861368,.17539,0,.294711,.862237,.163901,0,.309911,.863127,.153175,0,.32528,.863923,.143147,0,.340819,.864567,.133781,0,.356524,.865013,.125042,0,.372397,.86539,.116952,0,.388438,.865591,.109476,0,.404645,.865517,.102542,0,.421022,.865084,.0960688,0,.437569,.864309,.0900499,0,.454287,.863151,.0844328,0,.471181,.861649,.0792218,0,.488253,.859742,.0743482,0,.505507,.857446,.0697963,0,.522947,.854757,.0655364,0,.54058,.851783,.061608,0,.558412,.848516,.0579701,0,.576449,.844897,.0545742,0,.594701,.840956,.0514167,0,.613178,.836676,.0484598,0,.631892,.832075,.0456934,0,.650856,.827191,.0431178,0,.670088,.822295,.0407718,0,.689606,.817294,.0386032,0,.709434,.812013,.0365675,0,.7296,.806465,.0346547,0,.750138,.800691,.0328717,0,.771093,.794709,.031211,0,.792519,.788493,.0296504,0,.814488,.782049,.0281782,0,.837097,.775403,.0267965,0,.860481,.76857,.0255002,0,.884842,.761536,.0242759,0,.910494,.754303,.0231142,0,.937985,.74692,.0220305,0,.968254,.739745,.0210192,0,1,1,.613914,0,0,.999996,.613907,0,963597e-10,.999942,.613814,0,.00301247,.999704,.613407,0,.00870385,.999046,.612302,0,.0160714,.995516,.608266,0,.0245899,.991726,.602863,0,.0339681,.985157,.593956,0,.0440254,.97642,.581748,0,.0546409,.964404,.565183,0,.0657284,.950601,.545273,0,.0772246,.935158,.522129,0,.0890812,.919364,.496782,0,.10126,.904754,.470571,0,.113731,.89176,.444037,0,.126469,.881492,.418322,0,.139454,.873656,.393522,0,.15267,.868053,.369795,0,.166101,.864336,.347171,0,.179736,.862259,.325737,0,.193565,.861556,.305532,0,.207578,.861776,.286416,0,.221769,.862661,.268355,0,.23613,.864015,.251334,0,.250656,.865711,.235352,0,.265343,.867519,.220302,0,.280187,.869351,.206161,0,.295183,.871144,.192908,0,.31033,.872839,.180505,0,.325624,.874307,.168848,0,.341065,.875667,.158021,0,.35665,.876758,.147877,0,.37238,.87764,.138441,0,.388253,.878237,.129627,0,.404269,.878563,.121415,0,.42043,.878572,.113741,0,.436735,.87842,.106652,0,.453187,.878057,.100097,0,.469786,.877413,.0940128,0,.486536,.87646,.0883462,0,.503439,.875233,.0830924,0,.520498,.8737,.0781975,0,.537717,.871873,.07364,0,.555102,.86978,.0694103,0,.572657,.867405,.0654696,0,.59039,.864751,.0617914,0,.608307,.861818,.0583491,0,.626419,.858645,.0551443,0,.644733,.855307,.0521894,0,.663264,.851736,.0494334,0,.682025,.847927,.0468504,0,.701032,.843888,.0444261,0,.720308,.839629,.0421497,0,.739875,.835158,.0400082,0,.759764,.830509,.0380076,0,.780014,.825714,.0361488,0,.800673,.820729,.0343956,0,.821803,.815751,.0327781,0,.843492,.810752,.031275,0,.86586,.805587,.0298542,0,.889087,.800317,.0285397,0,.913466,.79489,.0272948,0,.93952,.789314,.0261139,0,.96835,.783593,.0249938,0,1,1,.724258,0,0,.999992,.724243,0,726889e-9,.99987,.724044,0,.00569574,.999336,.72317,0,.0131702,.996271,.719432,0,.0220738,.991159,.712576,0,.0319405,.982465,.700927,0,.0425202,.97049,.684297,0,.0536599,.953973,.661244,0,.065258,.935546,.633804,0,.0772427,.916596,.603071,0,.0895616,.899353,.57105,0,.102175,.885216,.539206,0,.11505,.875076,.508714,0,.128164,.868334,.479571,0,.141495,.864414,.451796,0,.155026,.862678,.425328,0,.168745,.862835,.400352,0,.182639,.864067,.376532,0,.196699,.866086,.35391,0,.210915,.868557,.332424,0,.225282,.871271,.312053,0,.239792,.874058,.292764,0,.25444,.8768,.27453,0,.269223,.87939,.257297,0,.284135,.8819,.24114,0,.299174,.884187,.225934,0,.314337,.886262,.211669,0,.329622,.888119,.198311,0,.345026,.889709,.185783,0,.360549,.891054,.174063,0,.376189,.892196,.163143,0,.391946,.893101,.152952,0,.407819,.893803,.143475,0,.423808,.894277,.134647,0,.439914,.894532,.126434,0,.456137,.894576,.1188,0,.472479,.894393,.111694,0,.48894,.893976,.105069,0,.505523,.893346,.0989077,0,.52223,.892502,.0931724,0,.539064,.891441,.0878276,0,.556028,.890276,.082903,0,.573125,.888972,.0783505,0,.590361,.887469,.0741083,0,.607741,.885785,.0701633,0,.62527,.883914,.0664835,0,.642957,.881872,.0630567,0,.660809,.879651,.0598527,0,.678836,.877267,.0568615,0,.69705,.874717,.05406,0,.715465,.872012,.0514378,0,.734098,.869157,.0489805,0,.752968,.866155,.0466727,0,.772101,.863014,.0445056,0,.791529,.859748,.0424733,0,.81129,.856416,.0405957,0,.831438,.852958,.0388273,0,.852044,.849382,.0371619,0,.87321,.845694,.0355959,0,.89509,.841893,.0341155,0,.917932,.837981,.0327141,0,.942204,.833963,.0313856,0,.968981,.829847,.0301275,0,1,1,.85214,0,0,.999969,.852095,0,.00279627,.999483,.851408,0,.0107635,.994545,.84579,0,.0206454,.986188,.835231,0,.0315756,.969847,.814687,0,.0432021,.945951,.783735,0,.0553396,.91917,.746074,0,.0678766,.895488,.706938,0,.0807395,.878232,.669534,0,.0938767,.868252,.635168,0,.10725,.863873,.603069,0,.120832,.863369,.572514,0,.134598,.86545,.543169,0,.148533,.868803,.514578,0,.16262,.872794,.486762,0,.176849,.87702,.459811,0,.19121,.881054,.433654,0,.205694,.884974,.408574,0,.220294,.888587,.384525,0,.235005,.891877,.36156,0,.24982,.894793,.339661,0,.264737,.89743,.318913,0,.279751,.899796,.299302,0,.294859,.901943,.280843,0,.310058,.903858,.263481,0,.325346,.905574,.247197,0,.340721,.907069,.231915,0,.356181,.908379,.217614,0,.371725,.90952,.20425,0,.387353,.910483,.191758,0,.403063,.91128,.180092,0,.418854,.911936,.169222,0,.434727,.912454,.159098,0,.450682,.912835,.149668,0,.466718,.913078,.140884,0,.482837,.913192,.132709,0,.499038,.913175,.125095,0,.515324,.91304,.118012,0,.531695,.912781,.111417,0,.548153,.91241,.105281,0,.5647,.911924,.0995691,0,.581338,.911331,.0942531,0,.59807,.910637,.0893076,0,.6149,.90984,.0846998,0,.63183,.908941,.0804044,0,.648865,.907944,.0763984,0,.666011,.906857,.0726638,0,.683273,.90568,.0691783,0,.700659,.904416,.0659222,0,.718176,.903067,.0628782,0,.735834,.901637,.0600307,0,.753646,.900128,.0573647,0,.771625,.898544,.0548668,0,.78979,.89689,.052527,0,.808162,.895165,.0503306,0,.826771,.893371,.0482668,0,.845654,.891572,.0463605,0,.864863,.889763,.0445998,0,.884472,.887894,.0429451,0,.904592,.885967,.0413884,0,.925407,.883984,.0399225,0,.947271,.881945,.0385405,0,.97105,.879854,.0372362,0,1,.999804,.995833,0,0,.938155,.933611,0,.0158731,.864755,.854311,0,.0317461,.888594,.865264,0,.0476191,.905575,.863922,0,.0634921,.915125,.850558,0,.0793651,.920665,.829254,0,.0952381,.924073,.802578,0,.111111,.926304,.772211,0,.126984,.927829,.739366,0,.142857,.928924,.705033,0,.15873,.92973,.670019,0,.174603,.930339,.634993,0,.190476,.930811,.600485,0,.206349,.931191,.566897,0,.222222,.93149,.534485,0,.238095,.931737,.503429,0,.253968,.931939,.473811,0,.269841,.932108,.445668,0,.285714,.93225,.418993,0,.301587,.932371,.393762,0,.31746,.932474,.369939,0,.333333,.932562,.347479,0,.349206,.932638,.326336,0,.365079,.932703,.306462,0,.380952,.93276,.287805,0,.396825,.932809,.270313,0,.412698,.932851,.253933,0,.428571,.932887,.23861,0,.444444,.932917,.224289,0,.460317,.932943,.210917,0,.47619,.932965,.19844,0,.492063,.932982,.186807,0,.507937,.932995,.175966,0,.52381,.933005,.165869,0,.539683,.933011,.156468,0,.555556,.933013,.147719,0,.571429,.933013,.139579,0,.587302,.93301,.132007,0,.603175,.933004,.124965,0,.619048,.932994,.118416,0,.634921,.932982,.112326,0,.650794,.932968,.106663,0,.666667,.93295,.101397,0,.68254,.932931,.0964993,0,.698413,.932908,.0919438,0,.714286,.932883,.0877057,0,.730159,.932856,.0837623,0,.746032,.932827,.0800921,0,.761905,.932796,.0766754,0,.777778,.932762,.0734936,0,.793651,.932727,.0705296,0,.809524,.932689,.0677676,0,.825397,.93265,.0651929,0,.84127,.932609,.0627917,0,.857143,.932565,.0605515,0,.873016,.932521,.0584606,0,.888889,.932474,.0565082,0,.904762,.932427,.0546841,0,.920635,.932377,.0529793,0,.936508,.932326,.0513851,0,.952381,.932274,.0498936,0,.968254,.93222,.0484975,0,.984127,.932164,.0471899,0,1],n=new Float32Array(t),i=new Float32Array(e);G.LTC_FLOAT_1=new mo.a(n,64,64,w.Ib,w.G,w.Yc,w.n,w.n,w.V,w.ob,1),G.LTC_FLOAT_2=new mo.a(i,64,64,w.Ib,w.G,w.Yc,w.n,w.n,w.V,w.ob,1);const r=new Uint16Array(t.length);t.forEach((function(t,e){r[e]=xz.a.toHalfFloat(t)}));const s=new Uint16Array(e.length);e.forEach((function(t,e){s[e]=xz.a.toHalfFloat(t)})),G.LTC_HALF_1=new mo.a(r,64,64,w.Ib,w.M,w.Yc,w.n,w.n,w.V,w.ob,1),G.LTC_HALF_2=new mo.a(s,64,64,w.Ib,w.M,w.Yc,w.n,w.n,w.V,w.ob,1)}}!function(t){t.OBJECTS=\\\\\\\"objects\\\\\\\",t.GEOMETRIES=\\\\\\\"geometries\\\\\\\"}(yz||(yz={}));const wz=[yz.GEOMETRIES,yz.OBJECTS];var Tz;!function(t){t.XYZ=\\\\\\\"XYZ\\\\\\\",t.XZY=\\\\\\\"XZY\\\\\\\",t.YXZ=\\\\\\\"YXZ\\\\\\\",t.YZX=\\\\\\\"YZX\\\\\\\",t.ZYX=\\\\\\\"ZYX\\\\\\\",t.ZXY=\\\\\\\"ZXY\\\\\\\"}(Tz||(Tz={}));const Az=[Tz.XYZ,Tz.XZY,Tz.YXZ,Tz.YZX,Tz.ZXY,Tz.ZYX],Ez=Tz.XYZ;class Mz{constructor(){this._translation_matrix=new A.a,this._translation_matrix_q=new au.a,this._translation_matrix_s=new p.a(1,1,1),this._matrix=(new A.a).identity(),this._matrix_q=new au.a,this._matrix_euler=new Wv.a,this._matrix_s=new p.a,this._rotate_geometry_m=new A.a,this._rotate_geometry_q=new au.a,this._rotate_geometry_vec_dest=new p.a}static set_params_from_matrix(t,e,n={}){let i=n.scale;null==i&&(i=!0),t.decompose(this.set_params_from_matrix_position,this.set_params_from_matrix_quaternion,this.set_params_from_matrix_scale),this.set_params_from_matrix_euler.setFromQuaternion(this.set_params_from_matrix_quaternion),this.set_params_from_matrix_euler.toVector3(this.set_params_from_matrix_rotation),this.set_params_from_matrix_rotation.divideScalar(Math.PI/180),this.set_params_from_matrix_position.toArray(this.set_params_from_matrix_t),this.set_params_from_matrix_rotation.toArray(this.set_params_from_matrix_r),this.set_params_from_matrix_scale.toArray(this.set_params_from_matrix_s),e.scene().batchUpdates((()=>{e.params.set_vector3(\\\\\\\"t\\\\\\\",this.set_params_from_matrix_t),e.params.set_vector3(\\\\\\\"r\\\\\\\",this.set_params_from_matrix_r),e.params.set_vector3(\\\\\\\"s\\\\\\\",this.set_params_from_matrix_s),i&&e.params.set_float(\\\\\\\"scale\\\\\\\",1)}))}static set_params_from_object(t,e){t.position.toArray(this.set_params_from_object_position_array),t.rotation.toArray(this.set_params_from_object_rotation_array),this.set_params_from_object_rotation_deg.fromArray(this.set_params_from_object_rotation_array),this.set_params_from_object_rotation_deg.multiplyScalar(180/Math.PI),this.set_params_from_object_rotation_deg.toArray(this.set_params_from_object_rotation_array),e.scene().batchUpdates((()=>{e.params.set_vector3(\\\\\\\"t\\\\\\\",this.set_params_from_object_position_array),e.params.set_vector3(\\\\\\\"r\\\\\\\",this.set_params_from_object_rotation_array)}))}translation_matrix(t){return this._translation_matrix.compose(t,this._translation_matrix_q,this._translation_matrix_s),this._translation_matrix}matrix(t,e,n,i,r){return this._matrix_euler.set(Object(Ln.e)(e.x),Object(Ln.e)(e.y),Object(Ln.e)(e.z),r),this._matrix_q.setFromEuler(this._matrix_euler),this._matrix_s.copy(n).multiplyScalar(i),this._matrix.compose(t,this._matrix_q,this._matrix_s),this._matrix}rotate_geometry(t,e,n){this._rotate_geometry_vec_dest.copy(n),this._rotate_geometry_vec_dest.normalize(),this._rotate_geometry_q.setFromUnitVectors(e,this._rotate_geometry_vec_dest),this._rotate_geometry_m.makeRotationFromQuaternion(this._rotate_geometry_q),t.applyMatrix4(this._rotate_geometry_m)}static decompose_matrix(t){t.matrix.decompose(t.position,t.quaternion,t.scale)}}function Sz(t,e){const n=(null==e?void 0:e.matrixAutoUpdate)||!1;return class extends t{constructor(){super(...arguments),this.transform=oa.FOLDER(),this.keepPosWhenParenting=oa.BOOLEAN(0),this.rotationOrder=oa.INTEGER(Az.indexOf(Tz.XYZ),{menu:{entries:Az.map(((t,e)=>({name:t,value:e})))}}),this.t=oa.VECTOR3([0,0,0]),this.r=oa.VECTOR3([0,0,0]),this.s=oa.VECTOR3([1,1,1]),this.scale=oa.FLOAT(1),this.matrixAutoUpdate=oa.BOOLEAN(n?1:0),this.updateTransformFromObject=oa.BUTTON(null,{callback:t=>{Nz.PARAM_CALLBACK_update_transform_from_object(t)}})}}}Mz.set_params_from_matrix_position=new p.a,Mz.set_params_from_matrix_quaternion=new au.a,Mz.set_params_from_matrix_scale=new p.a,Mz.set_params_from_matrix_euler=new Wv.a,Mz.set_params_from_matrix_rotation=new p.a,Mz.set_params_from_matrix_t=[0,0,0],Mz.set_params_from_matrix_r=[0,0,0],Mz.set_params_from_matrix_s=[0,0,0],Mz.set_params_from_object_position_array=[0,0,0],Mz.set_params_from_object_rotation_deg=new p.a,Mz.set_params_from_object_rotation_array=[0,0,0];Sz(aa);const Cz=\\\\\\\"_cook_main_without_inputs_when_dirty\\\\\\\";class Nz{constructor(t){this.node=t,this._cook_main_without_inputs_when_dirty_bound=this._cook_main_without_inputs_when_dirty.bind(this),this._core_transform=new Mz,this._keep_pos_when_parenting_m_object=new A.a,this._keep_pos_when_parenting_m_new_parent_inv=new A.a}initializeNode(){this.node.dirtyController.hasHook(Cz)||this.node.dirtyController.addPostDirtyHook(Cz,this._cook_main_without_inputs_when_dirty_bound)}async _cook_main_without_inputs_when_dirty(){await this.node.cookController.cookMainWithoutInputs()}update(){this.update_transform_with_matrix();this.node.object.matrixAutoUpdate=this.node.pv.matrixAutoUpdate}update_transform_with_matrix(t){const e=this.node.object;null==t||t.equals(e.matrix)?this._update_matrix_from_params_with_core_transform():(e.matrix.copy(t),e.dispatchEvent({type:\\\\\\\"change\\\\\\\"}))}_update_matrix_from_params_with_core_transform(){const t=this.node.object;let e=t.matrixAutoUpdate;e&&(t.matrixAutoUpdate=!1);const n=this._core_transform.matrix(this.node.pv.t,this.node.pv.r,this.node.pv.s,this.node.pv.scale,Az[this.node.pv.rotationOrder]);t.matrix.identity(),t.applyMatrix4(n),this._apply_look_at(),t.updateMatrix(),e&&(t.matrixAutoUpdate=!0),t.dispatchEvent({type:\\\\\\\"change\\\\\\\"})}_apply_look_at(){}set_params_from_matrix(t,e={}){Mz.set_params_from_matrix(t,this.node,e)}static update_node_transform_params_if_required(t,e){t.transformController.update_node_transform_params_if_required(e)}update_node_transform_params_if_required(t){if(!this.node.pv.keepPosWhenParenting)return;if(!this.node.scene().loadingController.loaded())return;if(t==this.node.object.parent)return;const e=this.node.object;e.updateMatrixWorld(!0),t.updateMatrixWorld(!0),this._keep_pos_when_parenting_m_object.copy(e.matrixWorld),this._keep_pos_when_parenting_m_new_parent_inv.copy(t.matrixWorld),this._keep_pos_when_parenting_m_new_parent_inv.invert(),this._keep_pos_when_parenting_m_object.premultiply(this._keep_pos_when_parenting_m_new_parent_inv),Mz.set_params_from_matrix(this._keep_pos_when_parenting_m_object,this.node,{scale:!0})}update_node_transform_params_from_object(t=!1){const e=this.node.object;t&&e.updateMatrix(),Mz.set_params_from_matrix(e.matrix,this.node,{scale:!0})}static PARAM_CALLBACK_update_transform_from_object(t){t.transformController.update_node_transform_params_from_object()}}class Lz{constructor(t){this.node=t}initializeNode(){this.node.io.inputs.setCount(0,1),this.node.io.inputs.set_depends_on_inputs(!1),this.node.io.outputs.setHasOneOutput(),this.node.io.inputs.add_on_set_input_hook(\\\\\\\"on_input_updated:update_parent\\\\\\\",(()=>{this.on_input_updated()}))}static on_input_updated(t){const e=t.root().getParentForNode(t);t.transformController&&e&&Nz.update_node_transform_params_if_required(t,e),null!=t.io.inputs.input(0)?t.root().addToParentTransform(t):t.root().removeFromParentTransform(t)}on_input_updated(){Lz.on_input_updated(this.node)}}Sz(aa);class Oz extends mz{constructor(){super(...arguments),this.flags=new Fi(this),this.hierarchyController=new Lz(this),this.transformController=new Nz(this)}initializeBaseNode(){super.initializeBaseNode(),this.hierarchyController.initializeNode(),this.transformController.initializeNode()}cook(){this.transformController.update(),this.updateLightParams(),this.updateShadowParams(),this.cookController.endCook()}}class Rz{constructor(t,e,n){this.node=t,this._helperConstructor=e,this._name=n}initializeNode(){this.node.flags.display.onUpdate((()=>{this.update()}))}visible(){return this.node.flags.display.active()&&this.node.pv.showHelper}_createHelper(){const t=new this._helperConstructor(this.node,this._name);return t.build(),t}update(){this.visible()?(this._helper||(this._helper=this._createHelper()),this._helper&&(this.node.light.add(this._helper.object),this._helper.update())):this._helper&&this.node.light.remove(this._helper.object)}}var Pz=n(41);class Iz extends Pz.a{constructor(t,e){const n=new S.a;n.setAttribute(\\\\\\\"position\\\\\\\",new C.c([1,1,0,-1,1,0,-1,-1,0,1,-1,0,1,1,0],3)),n.computeBoundingSphere();super(n,new wr.a({fog:!1})),this.light=t,this.color=e,this.type=\\\\\\\"RectAreaLightHelper\\\\\\\";const i=new S.a;i.setAttribute(\\\\\\\"position\\\\\\\",new C.c([1,1,0,-1,1,0,-1,-1,0,1,1,0,-1,-1,0,1,-1,0],3)),i.computeBoundingSphere(),this.add(new k.a(i,new at.a({side:w.i,fog:!1})))}updateMatrixWorld(){if(this.scale.set(.5*this.light.width,.5*this.light.height,1),void 0!==this.color)this.material.color.set(this.color),this.children[0].material.color.set(this.color);else{this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);const t=this.material.color,e=Math.max(t.r,t.g,t.b);e>1&&t.multiplyScalar(1/e),this.children[0].material.color.copy(this.material.color)}this.matrixWorld.extractRotation(this.light.matrixWorld).scale(this.scale).copyPosition(this.light.matrixWorld),this.children[0].matrixWorld.copy(this.matrixWorld)}dispose(){this.geometry.dispose(),this.material.dispose(),this.children[0].geometry.dispose(),this.children[0].material.dispose()}}Fz=aa;var Fz;class Dz{constructor(t,e){this.node=t,this._name=e,this._object=this.createObject(),this._material=new at.a({wireframe:!0,fog:!1})}build(){this._object.matrixAutoUpdate=!1,this._object.name=this._name,this.buildHelper()}get object(){return this._object}}class kz extends Dz{createObject(){return new Iz(this.node.light)}buildHelper(){}update(){this._object.updateMatrixWorld()}}class Bz extends(function(t){return class extends t{constructor(){super(...arguments),this.light=oa.FOLDER(),this.color=oa.COLOR([1,1,1],{conversion:so.SRGB_TO_LINEAR}),this.intensity=oa.FLOAT(1,{range:[0,10]}),this.width=oa.FLOAT(1,{range:[0,10]}),this.height=oa.FLOAT(1,{range:[0,10]}),this.showHelper=oa.BOOLEAN(0)}}}(Sz(aa))){}const zz=new Bz;class Uz extends Oz{constructor(){super(...arguments),this.paramsConfig=zz,this._helperController=new Rz(this,kz,\\\\\\\"RectAreaLightObjNodeHelper\\\\\\\")}static type(){return\\\\\\\"areaLight\\\\\\\"}initializeNode(){this._helperController.initializeNode()}createLight(){const t=new vz(16777215,1,1,1);return t.matrixAutoUpdate=!1,bz.initialized||(bz.init(),bz.initialized=!0),t}updateLightParams(){this.light.color=this.pv.color,this.light.intensity=this.pv.intensity,this.light.width=this.pv.width,this.light.height=this.pv.height,this._helperController.update()}}var Gz=n(72);const Vz=new p.a,Hz=new tf.a;class jz extends Tr.a{constructor(t){const e=new S.a,n=new wr.a({color:16777215,vertexColors:!0,toneMapped:!1}),i=[],r=[],s={},o=new D.a(16755200),a=new D.a(16711680),l=new D.a(43775),c=new D.a(16777215),u=new D.a(3355443);function h(t,e,n){d(t,n),d(e,n)}function d(t,e){i.push(0,0,0),r.push(e.r,e.g,e.b),void 0===s[t]&&(s[t]=[]),s[t].push(i.length/3-1)}h(\\\\\\\"n1\\\\\\\",\\\\\\\"n2\\\\\\\",o),h(\\\\\\\"n2\\\\\\\",\\\\\\\"n4\\\\\\\",o),h(\\\\\\\"n4\\\\\\\",\\\\\\\"n3\\\\\\\",o),h(\\\\\\\"n3\\\\\\\",\\\\\\\"n1\\\\\\\",o),h(\\\\\\\"f1\\\\\\\",\\\\\\\"f2\\\\\\\",o),h(\\\\\\\"f2\\\\\\\",\\\\\\\"f4\\\\\\\",o),h(\\\\\\\"f4\\\\\\\",\\\\\\\"f3\\\\\\\",o),h(\\\\\\\"f3\\\\\\\",\\\\\\\"f1\\\\\\\",o),h(\\\\\\\"n1\\\\\\\",\\\\\\\"f1\\\\\\\",o),h(\\\\\\\"n2\\\\\\\",\\\\\\\"f2\\\\\\\",o),h(\\\\\\\"n3\\\\\\\",\\\\\\\"f3\\\\\\\",o),h(\\\\\\\"n4\\\\\\\",\\\\\\\"f4\\\\\\\",o),h(\\\\\\\"p\\\\\\\",\\\\\\\"n1\\\\\\\",a),h(\\\\\\\"p\\\\\\\",\\\\\\\"n2\\\\\\\",a),h(\\\\\\\"p\\\\\\\",\\\\\\\"n3\\\\\\\",a),h(\\\\\\\"p\\\\\\\",\\\\\\\"n4\\\\\\\",a),h(\\\\\\\"u1\\\\\\\",\\\\\\\"u2\\\\\\\",l),h(\\\\\\\"u2\\\\\\\",\\\\\\\"u3\\\\\\\",l),h(\\\\\\\"u3\\\\\\\",\\\\\\\"u1\\\\\\\",l),h(\\\\\\\"c\\\\\\\",\\\\\\\"t\\\\\\\",c),h(\\\\\\\"p\\\\\\\",\\\\\\\"c\\\\\\\",u),h(\\\\\\\"cn1\\\\\\\",\\\\\\\"cn2\\\\\\\",u),h(\\\\\\\"cn3\\\\\\\",\\\\\\\"cn4\\\\\\\",u),h(\\\\\\\"cf1\\\\\\\",\\\\\\\"cf2\\\\\\\",u),h(\\\\\\\"cf3\\\\\\\",\\\\\\\"cf4\\\\\\\",u),e.setAttribute(\\\\\\\"position\\\\\\\",new C.c(i,3)),e.setAttribute(\\\\\\\"color\\\\\\\",new C.c(r,3)),super(e,n),this.type=\\\\\\\"CameraHelper\\\\\\\",this.camera=t,this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix(),this.matrixAutoUpdate=!1,this.pointMap=s,this.update()}update(){const t=this.geometry,e=this.pointMap;Hz.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),Wz(\\\\\\\"c\\\\\\\",e,t,Hz,0,0,-1),Wz(\\\\\\\"t\\\\\\\",e,t,Hz,0,0,1),Wz(\\\\\\\"n1\\\\\\\",e,t,Hz,-1,-1,-1),Wz(\\\\\\\"n2\\\\\\\",e,t,Hz,1,-1,-1),Wz(\\\\\\\"n3\\\\\\\",e,t,Hz,-1,1,-1),Wz(\\\\\\\"n4\\\\\\\",e,t,Hz,1,1,-1),Wz(\\\\\\\"f1\\\\\\\",e,t,Hz,-1,-1,1),Wz(\\\\\\\"f2\\\\\\\",e,t,Hz,1,-1,1),Wz(\\\\\\\"f3\\\\\\\",e,t,Hz,-1,1,1),Wz(\\\\\\\"f4\\\\\\\",e,t,Hz,1,1,1),Wz(\\\\\\\"u1\\\\\\\",e,t,Hz,.7,1.1,-1),Wz(\\\\\\\"u2\\\\\\\",e,t,Hz,-.7,1.1,-1),Wz(\\\\\\\"u3\\\\\\\",e,t,Hz,0,2,-1),Wz(\\\\\\\"cf1\\\\\\\",e,t,Hz,-1,0,1),Wz(\\\\\\\"cf2\\\\\\\",e,t,Hz,1,0,1),Wz(\\\\\\\"cf3\\\\\\\",e,t,Hz,0,-1,1),Wz(\\\\\\\"cf4\\\\\\\",e,t,Hz,0,1,1),Wz(\\\\\\\"cn1\\\\\\\",e,t,Hz,-1,0,-1),Wz(\\\\\\\"cn2\\\\\\\",e,t,Hz,1,0,-1),Wz(\\\\\\\"cn3\\\\\\\",e,t,Hz,0,-1,-1),Wz(\\\\\\\"cn4\\\\\\\",e,t,Hz,0,1,-1),t.getAttribute(\\\\\\\"position\\\\\\\").needsUpdate=!0}}function Wz(t,e,n,i,r,s,o){Vz.set(r,s,o).unproject(i);const a=e[t];if(void 0!==a){const t=n.getAttribute(\\\\\\\"position\\\\\\\");for(let e=0,n=a.length;e<n;e++)t.setXYZ(a[e],Vz.x,Vz.y,Vz.z)}}class qz extends Dz{constructor(){super(...arguments),this._square=new Pz.a,this._line_material=new wr.a({fog:!1})}createObject(){return new k.a}buildHelper(){const t=new S.a;t.setAttribute(\\\\\\\"position\\\\\\\",new C.c([-1,1,0,1,1,0,1,-1,0,-1,-1,0,-1,1,0],3)),this._square.geometry=t,this._square.material=this._line_material,this._square.rotateX(.5*Math.PI),this._square.updateMatrix(),this._square.matrixAutoUpdate=!1,this.object.add(this._square),this._cameraHelper=new jz(this.node.light.shadow.camera),this._cameraHelper.rotateX(.5*-Math.PI),this._cameraHelper.updateMatrix(),this._cameraHelper.matrixAutoUpdate=!1,this.object.add(this._cameraHelper)}update(){this._object.updateMatrix(),this._cameraHelper.update(),this._line_material.color.copy(this.node.light.color)}}var Xz,Yz;!function(t){t.DIRECTIONAL=\\\\\\\"directionalLight\\\\\\\",t.HEMISPHERE=\\\\\\\"hemisphereLight\\\\\\\",t.POINT=\\\\\\\"pointLight\\\\\\\",t.SPOT=\\\\\\\"spotLight\\\\\\\"}(Xz||(Xz={})),function(t){t.DIRECTIONAL=\\\\\\\"DirectionalLight\\\\\\\",t.HEMISPHERE=\\\\\\\"HemisphereLight\\\\\\\",t.POINT=\\\\\\\"PointLight\\\\\\\",t.SPOT=\\\\\\\"SpotLight\\\\\\\"}(Yz||(Yz={}));class $z extends(function(t){return class extends t{constructor(){super(...arguments),this.light=oa.FOLDER(),this.color=oa.COLOR([1,1,1],{conversion:so.SRGB_TO_LINEAR}),this.intensity=oa.FLOAT(1),this.distance=oa.FLOAT(100,{range:[0,100]}),this.showHelper=oa.BOOLEAN(0),this.shadow=oa.FOLDER(),this.castShadow=oa.BOOLEAN(1),this.shadowRes=oa.VECTOR2([1024,1024],{visibleIf:{castShadow:!0}}),this.shadowSize=oa.VECTOR2([2,2],{visibleIf:{castShadow:!0}}),this.shadowBias=oa.FLOAT(.001,{visibleIf:{castShadow:!0}}),this.shadowRadius=oa.FLOAT(0,{visibleIf:{castShadow:1},range:[0,10],rangeLocked:[!0,!1]})}}}(Sz(aa))){}const Jz=new $z;class Zz extends Oz{constructor(){super(...arguments),this.paramsConfig=Jz,this._helperController=new Rz(this,qz,\\\\\\\"DirectionalLightHelper\\\\\\\")}static type(){return Xz.DIRECTIONAL}initializeNode(){this._helperController.initializeNode()}createLight(){const t=new Gz.a;return t.matrixAutoUpdate=!1,t.castShadow=!0,t.shadow.bias=-.001,t.shadow.mapSize.x=1024,t.shadow.mapSize.y=1024,t.shadow.camera.near=.1,this._target_target=t.target,this._target_target.name=\\\\\\\"DirectionalLight Default Target\\\\\\\",this.object.add(this._target_target),t}updateLightParams(){this.light.color=this.pv.color,this.light.intensity=this.pv.intensity,this.light.shadow.camera.far=this.pv.distance}updateShadowParams(){this.light.castShadow=this.pv.castShadow,this.light.shadow.mapSize.copy(this.pv.shadowRes),this.light.shadow.bias=this.pv.shadowBias,this.light.shadow.radius=this.pv.shadowRadius;const t=this.light.shadow.camera,e=this.pv.shadowSize;t.left=.5*-e.x,t.right=.5*e.x,t.top=.5*e.y,t.bottom=.5*-e.y,this.light.shadow.camera.updateProjectionMatrix(),this._helperController.update()}}class Qz extends nv.a{constructor(t,e,n){super(t,n),this.type=\\\\\\\"HemisphereLight\\\\\\\",this.position.copy(Q.a.DefaultUp),this.updateMatrix(),this.groundColor=new D.a(e)}copy(t){return nv.a.prototype.copy.call(this,t),this.groundColor.copy(t.groundColor),this}}Qz.prototype.isHemisphereLight=!0;class Kz extends S.a{constructor(t=[],e=[],n=1,i=0){super(),this.type=\\\\\\\"PolyhedronGeometry\\\\\\\",this.parameters={vertices:t,indices:e,radius:n,detail:i};const r=[],s=[];function o(t,e,n,i){const r=i+1,s=[];for(let i=0;i<=r;i++){s[i]=[];const o=t.clone().lerp(n,i/r),a=e.clone().lerp(n,i/r),l=r-i;for(let t=0;t<=l;t++)s[i][t]=0===t&&i===r?o:o.clone().lerp(a,t/l)}for(let t=0;t<r;t++)for(let e=0;e<2*(r-t)-1;e++){const n=Math.floor(e/2);e%2==0?(a(s[t][n+1]),a(s[t+1][n]),a(s[t][n])):(a(s[t][n+1]),a(s[t+1][n+1]),a(s[t+1][n]))}}function a(t){r.push(t.x,t.y,t.z)}function l(e,n){const i=3*e;n.x=t[i+0],n.y=t[i+1],n.z=t[i+2]}function c(t,e,n,i){i<0&&1===t.x&&(s[e]=t.x-1),0===n.x&&0===n.z&&(s[e]=i/2/Math.PI+.5)}function u(t){return Math.atan2(t.z,-t.x)}!function(t){const n=new p.a,i=new p.a,r=new p.a;for(let s=0;s<e.length;s+=3)l(e[s+0],n),l(e[s+1],i),l(e[s+2],r),o(n,i,r,t)}(i),function(t){const e=new p.a;for(let n=0;n<r.length;n+=3)e.x=r[n+0],e.y=r[n+1],e.z=r[n+2],e.normalize().multiplyScalar(t),r[n+0]=e.x,r[n+1]=e.y,r[n+2]=e.z}(n),function(){const t=new p.a;for(let n=0;n<r.length;n+=3){t.x=r[n+0],t.y=r[n+1],t.z=r[n+2];const i=u(t)/2/Math.PI+.5,o=(e=t,Math.atan2(-e.y,Math.sqrt(e.x*e.x+e.z*e.z))/Math.PI+.5);s.push(i,1-o)}var e;(function(){const t=new p.a,e=new p.a,n=new p.a,i=new p.a,o=new d.a,a=new d.a,l=new d.a;for(let h=0,d=0;h<r.length;h+=9,d+=6){t.set(r[h+0],r[h+1],r[h+2]),e.set(r[h+3],r[h+4],r[h+5]),n.set(r[h+6],r[h+7],r[h+8]),o.set(s[d+0],s[d+1]),a.set(s[d+2],s[d+3]),l.set(s[d+4],s[d+5]),i.copy(t).add(e).add(n).divideScalar(3);const p=u(i);c(o,d+0,t,p),c(a,d+2,e,p),c(l,d+4,n,p)}})(),function(){for(let t=0;t<s.length;t+=6){const e=s[t+0],n=s[t+2],i=s[t+4],r=Math.max(e,n,i),o=Math.min(e,n,i);r>.9&&o<.1&&(e<.2&&(s[t+0]+=1),n<.2&&(s[t+2]+=1),i<.2&&(s[t+4]+=1))}}()}(),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(r,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new C.c(r.slice(),3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(s,2)),0===i?this.computeVertexNormals():this.normalizeNormals()}static fromJSON(t){return new Kz(t.vertices,t.indices,t.radius,t.details)}}class tU extends Kz{constructor(t=1,e=0){super([1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],t,e),this.type=\\\\\\\"OctahedronGeometry\\\\\\\",this.parameters={radius:t,detail:e}}static fromJSON(t){return new tU(t.radius,t.detail)}}class eU extends Dz{constructor(){super(...arguments),this._geometry=new tU(1),this._quat=new au.a,this._default_position=new p.a(0,1,0),this._color1=new D.a,this._color2=new D.a}createObject(){return new k.a}buildHelper(){this._geometry.rotateZ(.5*Math.PI),this._material.vertexColors=!0;const t=this._geometry.getAttribute(\\\\\\\"position\\\\\\\"),e=new Float32Array(3*t.count);this._geometry.setAttribute(\\\\\\\"color\\\\\\\",new C.a(e,3)),this._object.geometry=this._geometry,this._object.material=this._material,this._object.matrixAutoUpdate=!1}update(){if(!this.node.pv.position)return;this._object.position.copy(this.node.pv.position).multiplyScalar(-1),this._quat.setFromUnitVectors(this._default_position,this.node.pv.position),this._object.setRotationFromQuaternion(this._quat),this._object.scale.setScalar(this.node.pv.helperSize),this._object.updateMatrix();const t=this._geometry.getAttribute(\\\\\\\"color\\\\\\\");this._color1.copy(this.node.light.color),this._color2.copy(this.node.light.groundColor);for(let e=0,n=t.count;e<n;e++){const i=e<n/2?this._color1:this._color2;t.setXYZ(e,i.r,i.g,i.b)}t.needsUpdate=!0}}const nU={skyColor:new D.a(1,1,1),groundColor:new D.a(0,0,0)};const iU=new class extends aa{constructor(){super(...arguments),this.skyColor=oa.COLOR(nU.skyColor,{conversion:so.SRGB_TO_LINEAR}),this.groundColor=oa.COLOR(nU.groundColor,{conversion:so.SRGB_TO_LINEAR}),this.intensity=oa.FLOAT(1),this.position=oa.VECTOR3([0,1,0]),this.showHelper=oa.BOOLEAN(0),this.helperSize=oa.FLOAT(1,{visibleIf:{showHelper:1}})}};class rU extends mz{constructor(){super(...arguments),this.paramsConfig=iU,this._helperController=new Rz(this,eU,\\\\\\\"HemisphereLightHelper\\\\\\\")}static type(){return Xz.HEMISPHERE}createLight(){const t=new Qz;return t.matrixAutoUpdate=!1,t.color.copy(nU.skyColor),t.groundColor.copy(nU.groundColor),t}initializeNode(){this.io.inputs.setCount(0,1),this._helperController.initializeNode()}updateLightParams(){this.light.color=this.pv.skyColor,this.light.groundColor=this.pv.groundColor,this.light.position.copy(this.pv.position),this.light.intensity=this.pv.intensity,this._helperController.update()}}var sU=n(58);class oU extends S.a{constructor(t=1,e=32,n=16,i=0,r=2*Math.PI,s=0,o=Math.PI){super(),this.type=\\\\\\\"SphereGeometry\\\\\\\",this.parameters={radius:t,widthSegments:e,heightSegments:n,phiStart:i,phiLength:r,thetaStart:s,thetaLength:o},e=Math.max(3,Math.floor(e)),n=Math.max(2,Math.floor(n));const a=Math.min(s+o,Math.PI);let l=0;const c=[],u=new p.a,h=new p.a,d=[],_=[],m=[],f=[];for(let d=0;d<=n;d++){const p=[],g=d/n;let v=0;0==d&&0==s?v=.5/e:d==n&&a==Math.PI&&(v=-.5/e);for(let n=0;n<=e;n++){const a=n/e;u.x=-t*Math.cos(i+a*r)*Math.sin(s+g*o),u.y=t*Math.cos(s+g*o),u.z=t*Math.sin(i+a*r)*Math.sin(s+g*o),_.push(u.x,u.y,u.z),h.copy(u).normalize(),m.push(h.x,h.y,h.z),f.push(a+v,1-g),p.push(l++)}c.push(p)}for(let t=0;t<n;t++)for(let i=0;i<e;i++){const e=c[t][i+1],r=c[t][i],o=c[t+1][i],l=c[t+1][i+1];(0!==t||s>0)&&d.push(e,r,l),(t!==n-1||a<Math.PI)&&d.push(r,o,l)}this.setIndex(d),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(_,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new C.c(m,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(f,2))}static fromJSON(t){return new oU(t.radius,t.widthSegments,t.heightSegments,t.phiStart,t.phiLength,t.thetaStart,t.thetaLength)}}class aU extends Dz{constructor(){super(...arguments),this._matrix_scale=new p.a(1,1,1)}createObject(){return new k.a}buildHelper(){this._object.geometry=new oU(1,4,2),this._object.matrixAutoUpdate=!1,this._object.material=this._material}update(){const t=this.node.pv.helperSize;this._matrix_scale.set(t,t,t),this._object.matrix.identity(),this._object.matrix.scale(this._matrix_scale),this._material.color.copy(this.node.light.color)}}class lU extends(Sz(aa)){constructor(){super(...arguments),this.light=oa.FOLDER(),this.color=oa.COLOR([1,1,1],{conversion:so.SRGB_TO_LINEAR}),this.intensity=oa.FLOAT(1),this.decay=oa.FLOAT(.1),this.distance=oa.FLOAT(100),this.castShadows=oa.BOOLEAN(1),this.shadowRes=oa.VECTOR2([1024,1024],{visibleIf:{castShadows:1}}),this.shadowBias=oa.FLOAT(.001,{visibleIf:{castShadows:1}}),this.shadowNear=oa.FLOAT(1,{visibleIf:{castShadows:1}}),this.shadowFar=oa.FLOAT(100,{visibleIf:{castShadows:1}}),this.showHelper=oa.BOOLEAN(0),this.helperSize=oa.FLOAT(1,{visibleIf:{showHelper:1}})}}const cU=new lU;class uU extends Oz{constructor(){super(...arguments),this.paramsConfig=cU,this._helperController=new Rz(this,aU,\\\\\\\"PointLightHelper\\\\\\\")}static type(){return Xz.POINT}initializeNode(){this._helperController.initializeNode()}createLight(){const t=new sU.a;return t.matrixAutoUpdate=!1,t.castShadow=!0,t.shadow.bias=-.001,t.shadow.mapSize.x=1024,t.shadow.mapSize.y=1024,t.shadow.camera.near=.1,t}updateLightParams(){this.light.color=this.pv.color,this.light.intensity=this.pv.intensity,this.light.decay=this.pv.decay,this.light.distance=this.pv.distance,this._helperController.update()}updateShadowParams(){this.light.castShadow=this.pv.castShadows,this.light.shadow.mapSize.copy(this.pv.shadowRes),this.light.shadow.camera.near=this.pv.shadowNear,this.light.shadow.camera.far=this.pv.shadowFar,this.light.shadow.bias=this.pv.shadowBias}}var hU=n(73);class dU extends Dz{constructor(){super(...arguments),this._cone=new Tr.a,this._line_material=new wr.a({fog:!1})}createObject(){return new k.a}static buildConeGeometry(){const t=new S.a,e=[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 t=0,n=1,i=32;t<i;t++,n++){const r=t/i*Math.PI*2,s=n/i*Math.PI*2;e.push(Math.cos(r),Math.sin(r),1,Math.cos(s),Math.sin(s),1)}return t.setAttribute(\\\\\\\"position\\\\\\\",new C.c(e,3)),t}static updateConeObject(t,e){const n=(e.distance?e.distance:1e3)*e.sizeMult,i=n*Math.tan(e.angle);this._matrix_scale.set(i,i,n),t.matrix.identity(),t.matrix.makeRotationX(.5*Math.PI),t.matrix.scale(this._matrix_scale)}buildHelper(){this._cone.geometry=dU.buildConeGeometry(),this._cone.material=this._line_material,this._cone.matrixAutoUpdate=!1,this.object.add(this._cone)}update(){dU.updateConeObject(this._cone,{sizeMult:this.node.pv.helperSize,distance:this.node.light.distance,angle:this.node.light.angle}),this._line_material.color.copy(this.node.light.color)}}dU._matrix_scale=new p.a;class pU extends S.a{constructor(t=1,e=1,n=1,i=8,r=1,s=!1,o=0,a=2*Math.PI){super(),this.type=\\\\\\\"CylinderGeometry\\\\\\\",this.parameters={radiusTop:t,radiusBottom:e,height:n,radialSegments:i,heightSegments:r,openEnded:s,thetaStart:o,thetaLength:a};const l=this;i=Math.floor(i),r=Math.floor(r);const c=[],u=[],h=[],_=[];let m=0;const f=[],g=n/2;let v=0;function y(n){const r=m,s=new d.a,f=new p.a;let y=0;const x=!0===n?t:e,b=!0===n?1:-1;for(let t=1;t<=i;t++)u.push(0,g*b,0),h.push(0,b,0),_.push(.5,.5),m++;const w=m;for(let t=0;t<=i;t++){const e=t/i*a+o,n=Math.cos(e),r=Math.sin(e);f.x=x*r,f.y=g*b,f.z=x*n,u.push(f.x,f.y,f.z),h.push(0,b,0),s.x=.5*n+.5,s.y=.5*r*b+.5,_.push(s.x,s.y),m++}for(let t=0;t<i;t++){const e=r+t,i=w+t;!0===n?c.push(i,i+1,e):c.push(i+1,i,e),y+=3}l.addGroup(v,y,!0===n?1:2),v+=y}!function(){const s=new p.a,d=new p.a;let y=0;const x=(e-t)/n;for(let l=0;l<=r;l++){const c=[],p=l/r,v=p*(e-t)+t;for(let t=0;t<=i;t++){const e=t/i,r=e*a+o,l=Math.sin(r),f=Math.cos(r);d.x=v*l,d.y=-p*n+g,d.z=v*f,u.push(d.x,d.y,d.z),s.set(l,x,f).normalize(),h.push(s.x,s.y,s.z),_.push(e,1-p),c.push(m++)}f.push(c)}for(let t=0;t<i;t++)for(let e=0;e<r;e++){const n=f[e][t],i=f[e+1][t],r=f[e+1][t+1],s=f[e][t+1];c.push(n,i,s),c.push(i,r,s),y+=6}l.addGroup(v,y,0),v+=y}(),!1===s&&(t>0&&y(!0),e>0&&y(!1)),this.setIndex(c),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(u,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new C.c(h,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(_,2))}static fromJSON(t){return new pU(t.radiusTop,t.radiusBottom,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class _U extends pU{constructor(t=1,e=1,n=8,i=1,r=!1,s=0,o=2*Math.PI){super(0,t,e,n,i,r,s,o),this.type=\\\\\\\"ConeGeometry\\\\\\\",this.parameters={radius:t,height:e,radialSegments:n,heightSegments:i,openEnded:r,thetaStart:s,thetaLength:o}}static fromJSON(t){return new _U(t.radius,t.height,t.radialSegments,t.heightSegments,t.openEnded,t.thetaStart,t.thetaLength)}}class mU{constructor(t){this.node=t}update(){const t=this.node.pv;if(t.tvolumetric){const e=this.object(),n=this.node.light;dU.updateConeObject(e,{sizeMult:t.helperSize,distance:n.distance,angle:n.angle});const i=e.material.uniforms;i.lightColor.value.copy(n.color),i.attenuation.value=t.volAttenuation,i.anglePower.value=t.volAnglePower,this.node.light.add(e)}else this._mesh&&this.node.light.remove(this._mesh)}object(){return this._mesh=this._mesh||this._createMesh()}_createMesh(){const t=new _U(1,1,256,1);t.applyMatrix4((new A.a).makeTranslation(0,-.5,0)),t.applyMatrix4((new A.a).makeRotationX(-Math.PI/2));const e=this._createMaterial(),n=new k.a(t,e);return n.matrixAutoUpdate=!1,n.name=\\\\\\\"Volumetric\\\\\\\",e.uniforms.lightColor.value.set(\\\\\\\"white\\\\\\\"),n}_createMaterial(){return new F({uniforms:{attenuation:{value:5},anglePower:{value:1.2},lightColor:{value:new D.a(\\\\\\\"cyan\\\\\\\")}},vertexShader:\\\\\\\"varying vec3 vNormal;\\\\nvarying vec3 vWorldPosition;\\\\nvarying vec3 vWorldOrigin;\\\\n\\\\nvoid main(){\\\\n\\\\t// compute intensity\\\\n\\\\tvNormal\\\\t\\\\t= normalize( normalMatrix * normal );\\\\n\\\\n\\\\tvec4 worldPosition\\\\t= modelMatrix * vec4( position, 1.0 );\\\\n\\\\tvWorldPosition\\\\t\\\\t= worldPosition.xyz;\\\\n\\\\n\\\\tvec4 worldOrigin\\\\t= modelMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\\\\n\\\\tvWorldOrigin\\\\t\\\\t= worldOrigin.xyz;\\\\n\\\\n\\\\t// set gl_Position\\\\n\\\\tgl_Position\\\\t= projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n}\\\\\\\",fragmentShader:\\\\\\\"varying vec3 vNormal;\\\\nvarying vec3 vWorldPosition;\\\\nvarying vec3 vWorldOrigin;\\\\n\\\\nuniform vec3 lightColor;\\\\n\\\\n// uniform vec3 spotPosition;\\\\n\\\\nuniform float attenuation;\\\\nuniform float anglePower;\\\\n\\\\nvoid main(){\\\\n\\\\n\\\\t//////////////////////////////////////////////////////////\\\\n\\\\t// distance attenuation   //\\\\n\\\\t//////////////////////////////////////////////////////////\\\\n\\\\tfloat intensity = distance(vWorldPosition, vWorldOrigin) / attenuation;\\\\n\\\\tintensity = 1.0 - clamp(intensity, 0.0, 1.0);\\\\n\\\\n\\\\t//////////////////////////////////////////////////////////\\\\n\\\\t// intensity on angle   //\\\\n\\\\t//////////////////////////////////////////////////////////\\\\n\\\\tvec3 normal = vec3(vNormal.x, vNormal.y, abs(vNormal.z));\\\\n\\\\tfloat angleIntensity = pow( dot(normal, vec3(0.0, 0.0, 1.0)), anglePower );\\\\n\\\\tintensity = intensity * angleIntensity;\\\\n\\\\t// 'gl_FragColor = vec4( lightColor, intensity );\\\\n\\\\n\\\\t//////////////////////////////////////////////////////////\\\\n\\\\t// final color   //\\\\n\\\\t//////////////////////////////////////////////////////////\\\\n\\\\n\\\\t// set the final color\\\\n\\\\tgl_FragColor = vec4( lightColor, intensity);\\\\n}\\\\\\\",transparent:!0,depthWrite:!1})}}class fU extends(Sz(aa)){constructor(){super(...arguments),this.light=oa.FOLDER(),this.color=oa.COLOR([1,1,1],{conversion:so.SRGB_TO_LINEAR}),this.intensity=oa.FLOAT(1),this.angle=oa.FLOAT(45,{range:[0,180]}),this.penumbra=oa.FLOAT(.1),this.decay=oa.FLOAT(.1,{range:[0,1]}),this.distance=oa.FLOAT(100,{range:[0,100]}),this.showHelper=oa.BOOLEAN(0),this.helperSize=oa.FLOAT(1,{visibleIf:{showHelper:1}}),this.shadow=oa.FOLDER(),this.castShadow=oa.BOOLEAN(1),this.shadowAutoUpdate=oa.BOOLEAN(1,{visibleIf:{castShadow:1}}),this.shadowUpdateOnNextRender=oa.BOOLEAN(0,{visibleIf:{castShadow:1,shadowAutoUpdate:0}}),this.shadowRes=oa.VECTOR2([256,256],{visibleIf:{castShadow:1}}),this.shadowBias=oa.FLOAT(.001,{visibleIf:{castShadow:1},range:[-.01,.01],rangeLocked:[!1,!1]}),this.shadowNear=oa.FLOAT(.1,{visibleIf:{castShadow:1},range:[0,100],rangeLocked:[!0,!1]}),this.shadowFar=oa.FLOAT(100,{visibleIf:{castShadow:1},range:[0,100],rangeLocked:[!0,!1]}),this.shadowRadius=oa.FLOAT(0,{visibleIf:{castShadow:1},range:[0,10],rangeLocked:[!0,!1]}),this.volumetric=oa.FOLDER(),this.tvolumetric=oa.BOOLEAN(0),this.volAttenuation=oa.FLOAT(5,{range:[0,10],rangeLocked:[!0,!1]}),this.volAnglePower=oa.FLOAT(10,{range:[0,20],rangeLocked:[!0,!1]})}}const gU=new fU;class vU extends Oz{constructor(){super(...arguments),this.paramsConfig=gU,this._helperController=new Rz(this,dU,\\\\\\\"SpotLightHelper\\\\\\\"),this._volumetricController=new mU(this)}static type(){return Xz.SPOT}initializeNode(){this._helperController.initializeNode()}createLight(){const t=new hU.a;return t.matrixAutoUpdate=!1,t.castShadow=!0,t.shadow.bias=-.001,t.shadow.mapSize.x=256,t.shadow.mapSize.y=256,t.shadow.camera.near=.1,this._target_target=t.target,this._target_target.name=\\\\\\\"SpotLight Default Target\\\\\\\",this._target_target.matrixAutoUpdate=!1,this.object.add(this._target_target),t}updateLightParams(){this.light.color=this.pv.color,this.light.intensity=this.pv.intensity,this.light.angle=this.pv.angle*(Math.PI/180),this.light.penumbra=this.pv.penumbra,this.light.decay=this.pv.decay,this.light.distance=this.pv.distance,this._helperController.update(),this._volumetricController.update()}updateShadowParams(){this.light.castShadow=this.pv.castShadow,this.light.shadow.autoUpdate=this.pv.shadowAutoUpdate,this.light.shadow.needsUpdate=this.pv.shadowUpdateOnNextRender,this.light.shadow.mapSize.copy(this.pv.shadowRes),this.light.shadow.camera.near=this.pv.shadowNear,this.light.shadow.camera.far=this.pv.shadowFar,this.light.shadow.bias=this.pv.shadowBias,this.light.shadow.radius=this.pv.shadowRadius}}let yU;const xU=function(){return void 0===yU&&(yU=new(window.AudioContext||window.webkitAudioContext)),yU},bU=new p.a,wU=new au.a,TU=new p.a,AU=new p.a;class EU extends Q.a{constructor(){super(),this.type=\\\\\\\"AudioListener\\\\\\\",this.context=xU(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null,this.timeDelta=0,this._clock=new Om}getInput(){return this.gain}removeFilter(){return null!==this.filter&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null),this}getFilter(){return this.filter}setFilter(t){return null!==this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination),this.filter=t,this.gain.connect(this.filter),this.filter.connect(this.context.destination),this}getMasterVolume(){return this.gain.gain.value}setMasterVolume(t){return this.gain.gain.setTargetAtTime(t,this.context.currentTime,.01),this}updateMatrixWorld(t){super.updateMatrixWorld(t);const e=this.context.listener,n=this.up;if(this.timeDelta=this._clock.getDelta(),this.matrixWorld.decompose(bU,wU,TU),AU.set(0,0,-1).applyQuaternion(wU),e.positionX){const t=this.context.currentTime+this.timeDelta;e.positionX.linearRampToValueAtTime(bU.x,t),e.positionY.linearRampToValueAtTime(bU.y,t),e.positionZ.linearRampToValueAtTime(bU.z,t),e.forwardX.linearRampToValueAtTime(AU.x,t),e.forwardY.linearRampToValueAtTime(AU.y,t),e.forwardZ.linearRampToValueAtTime(AU.z,t),e.upX.linearRampToValueAtTime(n.x,t),e.upY.linearRampToValueAtTime(n.y,t),e.upZ.linearRampToValueAtTime(n.z,t)}else e.setPosition(bU.x,bU.y,bU.z),e.setOrientation(AU.x,AU.y,AU.z,n.x,n.y,n.z)}}class MU extends(Sz(aa)){}const SU=new MU;class CU extends _z{constructor(){super(...arguments),this.paramsConfig=SU,this.hierarchyController=new Lz(this),this.transformController=new Nz(this),this.flags=new Fi(this)}static type(){return Ng.AUDIO_LISTENER}createObject(){const t=new EU;return t.matrixAutoUpdate=!1,t}initializeNode(){this.hierarchyController.initializeNode(),this.transformController.initializeNode()}cook(){this.transformController.update(),this.cookController.endCook()}}class NU extends Tr.a{constructor(t=1){const e=[0,0,0,t,0,0,0,0,0,0,t,0,0,0,0,0,0,t],n=new S.a;n.setAttribute(\\\\\\\"position\\\\\\\",new C.c(e,3)),n.setAttribute(\\\\\\\"color\\\\\\\",new C.c([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],3));super(n,new wr.a({vertexColors:!0,toneMapped:!1})),this.type=\\\\\\\"AxesHelper\\\\\\\"}setColors(t,e,n){const i=new D.a,r=this.geometry.attributes.color.array;return i.set(t),i.toArray(r,0),i.toArray(r,3),i.set(e),i.toArray(r,6),i.toArray(r,9),i.set(n),i.toArray(r,12),i.toArray(r,15),this.geometry.attributes.color.needsUpdate=!0,this}dispose(){this.geometry.dispose(),this.material.dispose()}}var LU;!function(t){t.TOGETHER=\\\\\\\"translate + rotate together\\\\\\\",t.SEPARATELY=\\\\\\\"translate + rotate separately\\\\\\\"}(LU||(LU={}));const OU=[LU.TOGETHER,LU.SEPARATELY];const RU=new class extends aa{constructor(){super(...arguments),this.object0=oa.OPERATOR_PATH(\\\\\\\"/geo1\\\\\\\",{nodeSelection:{context:Ki.OBJ}}),this.object1=oa.OPERATOR_PATH(\\\\\\\"/geo2\\\\\\\",{nodeSelection:{context:Ki.OBJ}}),this.mode=oa.INTEGER(OU.indexOf(LU.TOGETHER),{menu:{entries:OU.map(((t,e)=>({name:t,value:e})))}}),this.blend=oa.FLOAT(0,{visibleIf:{mode:OU.indexOf(LU.TOGETHER)},range:[0,1],rangeLocked:[!1,!1]}),this.blendT=oa.FLOAT(0,{visibleIf:{mode:OU.indexOf(LU.SEPARATELY)},range:[0,1],rangeLocked:[!1,!1]}),this.blendR=oa.FLOAT(0,{visibleIf:{mode:OU.indexOf(LU.SEPARATELY)},range:[0,1],rangeLocked:[!1,!1]})}};class PU extends _z{constructor(){super(...arguments),this.paramsConfig=RU,this.hierarchyController=new Lz(this),this.flags=new Fi(this),this._helper=new NU(1),this._t0=new p.a,this._q0=new au.a,this._s0=new p.a,this._t1=new p.a,this._q1=new au.a,this._s1=new p.a}static type(){return\\\\\\\"blend\\\\\\\"}createObject(){const t=new In.a;return t.matrixAutoUpdate=!1,t}initializeNode(){this.hierarchyController.initializeNode(),this.io.inputs.setCount(0),this.addPostDirtyHook(\\\\\\\"blend_on_dirty\\\\\\\",(()=>{this.cookController.cookMainWithoutInputs()})),this._updateHelperHierarchy(),this.flags.display.onUpdate((()=>{this._updateHelperHierarchy()}))}_updateHelperHierarchy(){this.flags.display.active()?this.object.add(this._helper):this.object.remove(this._helper)}cook(){const t=this.p.object0.found_node_with_context(Ki.OBJ),e=this.p.object1.found_node_with_context(Ki.OBJ);t&&e&&this._blend(t.object,e.object),this.cookController.endCook()}_blend(t,e){const n=OU[this.pv.mode];switch(n){case LU.TOGETHER:return this._blend_together(t,e);case LU.SEPARATELY:return this._blend_separately(t,e)}ar.unreachable(n)}_blend_together(t,e){this._decompose_matrices(t,e),this._object.position.copy(this._t0).lerp(this._t1,this.pv.blend),this._object.quaternion.copy(this._q0).slerp(this._q1,this.pv.blend),this._object.matrixAutoUpdate||this._object.updateMatrix()}_blend_separately(t,e){this._decompose_matrices(t,e),this._object.position.copy(this._t0).lerp(this._t1,this.pv.blendT),this._object.quaternion.copy(this._q0).slerp(this._q1,this.pv.blendR),this._object.matrixAutoUpdate||this._object.updateMatrix()}_decompose_matrices(t,e){t.matrixWorld.decompose(this._t0,this._q0,this._s0),e.matrixWorld.decompose(this._t1,this._q1,this._s1)}}var IU={uniforms:{tDiffuse:{value:null},h:{value:1/512}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\t\\\\tuniform float h;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec4 sum = vec4( 0.0 );\\\\n\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x - 4.0 * h, vUv.y ) ) * 0.051;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x - 3.0 * h, vUv.y ) ) * 0.0918;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x - 2.0 * h, vUv.y ) ) * 0.12245;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x - 1.0 * h, vUv.y ) ) * 0.1531;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x + 1.0 * h, vUv.y ) ) * 0.1531;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x + 2.0 * h, vUv.y ) ) * 0.12245;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x + 3.0 * h, vUv.y ) ) * 0.0918;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x + 4.0 * h, vUv.y ) ) * 0.051;\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor = sum;\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};const FU={uniforms:{tDiffuse:{value:null},v:{value:1/512}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\t\\\\tuniform float v;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec4 sum = vec4( 0.0 );\\\\n\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 4.0 * v ) ) * 0.051;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 3.0 * v ) ) * 0.0918;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 2.0 * v ) ) * 0.12245;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 1.0 * v ) ) * 0.1531;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 1.0 * v ) ) * 0.1531;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 2.0 * v ) ) * 0.12245;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 3.0 * v ) ) * 0.0918;\\\\n\\\\t\\\\t\\\\tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 4.0 * v ) ) * 0.051;\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor = sum;\\\\n\\\\n\\\\t\\\\t}\\\\\\\"},DU=1/256e3;class kU{constructor(t){this._renderTargetBlur=this._createRenderTarget(t),this._camera=this._createCamera(),this._blurPlane=this._createBlurPlane(),this._horizontalBlurMaterial=new F(IU),this._horizontalBlurMaterial.depthTest=!1,this._verticalBlurMaterial=new F(FU),this._verticalBlurMaterial.depthTest=!1}setSize(t,e){this._renderTargetBlur.setSize(t,e)}_createRenderTarget(t){const e=new Z(t.x,t.y);return e.texture.generateMipmaps=!1,e}_createCamera(){const t=new st.a(-.5,.5,.5,-.5,0,1);return t.position.z=.5,t}_createBlurPlane(){const t=new L(1,1);return new k.a(t)}applyBlur(t,e,n,i){const r=Math.max(this._renderTargetBlur.width,this._renderTargetBlur.height);this._horizontalBlurMaterial.uniforms.tDiffuse.value=t.texture,this._horizontalBlurMaterial.uniforms.h.value=n*r*DU,this._blurPlane.material=this._horizontalBlurMaterial,e.setRenderTarget(this._renderTargetBlur),e.render(this._blurPlane,this._camera),this._verticalBlurMaterial.uniforms.tDiffuse.value=this._renderTargetBlur.texture,this._verticalBlurMaterial.uniforms.v.value=i*r*DU,this._blurPlane.material=this._verticalBlurMaterial,e.setRenderTarget(t),e.render(this._blurPlane,this._camera)}}var BU;!function(t){t.ON_RENDER=\\\\\\\"On Every Render\\\\\\\",t.MANUAL=\\\\\\\"Manual\\\\\\\"}(BU||(BU={}));const zU=[BU.ON_RENDER,BU.MANUAL];class UU extends(Sz(aa)){constructor(){super(...arguments),this.shadow=oa.FOLDER(),this.dist=oa.FLOAT(1,{range:[0,10],rangeLocked:[!0,!1]}),this.planeSize=oa.VECTOR2([1,1]),this.shadowRes=oa.VECTOR2([256,256]),this.blur=oa.FLOAT(1,{range:[0,10],rangeLocked:[!0,!1]}),this.tblur2=oa.BOOLEAN(1),this.blur2=oa.FLOAT(1,{range:[0,10],rangeLocked:[!0,!1],visibleIf:{tblur2:1}}),this.darkness=oa.FLOAT(1),this.opacity=oa.FLOAT(1),this.showHelper=oa.BOOLEAN(0),this.updateMode=oa.INTEGER(zU.indexOf(BU.ON_RENDER),{callback:t=>{HU.PARAM_CALLBACK_update_updateMode(t)},menu:{entries:zU.map(((t,e)=>({name:t,value:e})))}}),this.update=oa.BUTTON(null,{callback:t=>{HU.PARAM_CALLBACK_updateManual(t)},visibleIf:{updateMode:zU.indexOf(BU.MANUAL)}}),this.scene=oa.FOLDER(),this.include=oa.STRING(\\\\\\\"\\\\\\\"),this.exclude=oa.STRING(\\\\\\\"\\\\\\\"),this.updateObjectsList=oa.BUTTON(null,{callback:t=>{HU.PARAM_CALLBACK_updateObjectsList(t)}}),this.printResolveObjectsList=oa.BUTTON(null,{callback:t=>{HU.PARAM_CALLBACK_printResolveObjectsList(t)}})}}const GU=new UU,VU=new d.a(256,256);class HU extends _z{constructor(){super(...arguments),this.paramsConfig=GU,this.hierarchyController=new Lz(this),this.flags=new Fi(this),this._renderTarget=this._createRenderTarget(VU),this._coreRenderBlur=this._createCoreRenderBlur(VU),this._includedObjects=[],this._includedAncestors=[],this._excludedObjects=[],this.transformController=new Nz(this),this._darknessUniform={value:1},this._emptyOnBeforeRender=()=>{},this._emptyRenderHook=()=>{},this._on_object_before_render_bound=this._update.bind(this),this._initialVisibilityState=new WeakMap}static type(){return\\\\\\\"contactShadow\\\\\\\"}_createRenderTarget(t){const e=new Z(t.x,t.y);return e.texture.generateMipmaps=!1,e}_createCoreRenderBlur(t){return new kU(t)}createObject(){const t=new In.a;this._shadowGroup=new In.a,t.add(this._shadowGroup),this._shadowGroup.name=\\\\\\\"shadowGroup\\\\\\\";const e=new L(1,1).rotateX(-Math.PI/2),n=e.getAttribute(\\\\\\\"uv\\\\\\\").array;for(let t of[1,3,5,7])n[t]=1-n[t];return this._planeMaterial=new at.a({map:this._renderTarget.texture,opacity:1,transparent:!0,depthWrite:!1}),this._plane=new k.a(e,this._planeMaterial),this._plane.renderOrder=1,this._plane.matrixAutoUpdate=!1,this._shadowGroup.add(this._plane),this._createDepthCamera(this._shadowGroup),this._createMaterials(),t}initializeNode(){this.hierarchyController.initializeNode(),this.transformController.initializeNode(),this._updateShadowGroupVisibility(),this._updateHelperVisibility(),this.flags.display.onUpdate((()=>{this._updateShadowGroupVisibility(),this._updateHelperVisibility()}))}async cook(){this.transformController.update(),this._updateRenderHook(),this._updateHelperVisibility(),this._updateObjectsList(),this._planeMaterial&&(this._planeMaterial.opacity=this.pv.opacity),this._darknessUniform.value=this.pv.darkness,this._plane&&this._shadowCamera&&this._helper&&(this._plane.scale.x=this.pv.planeSize.x,this._plane.scale.z=this.pv.planeSize.y,this._plane.updateMatrix(),this._shadowCamera.left=-this.pv.planeSize.x/2,this._shadowCamera.right=this.pv.planeSize.x/2,this._shadowCamera.bottom=-this.pv.planeSize.y/2,this._shadowCamera.top=this.pv.planeSize.y/2,this._shadowCamera.far=this.pv.dist,this._shadowCamera.updateProjectionMatrix(),this._helper.update()),this._renderTarget.width==this.pv.shadowRes.x&&this._renderTarget.height==this.pv.shadowRes.y||this._planeMaterial&&(this._renderTarget=this._createRenderTarget(this.pv.shadowRes),this._coreRenderBlur=this._createCoreRenderBlur(this.pv.shadowRes),this._planeMaterial.map=this._renderTarget.texture),this.cookController.endCook()}_createDepthCamera(t){this._shadowCamera=new st.a(-.5,.5,.5,-.5,0,1),this._shadowCamera.rotation.x=Math.PI/2,t.add(this._shadowCamera),this._helper=new jz(this._shadowCamera),this._helper.visible=!1,this._shadowCamera.add(this._helper)}_createMaterials(){this._depthMaterial=new Mn,this._depthMaterial.onBeforeCompile=t=>{t.uniforms.darkness=this._darknessUniform,t.fragmentShader=`\\\\n\\\\t\\\\t\\\\tuniform float darkness;\\\\n\\\\t\\\\t\\\\t${t.fragmentShader.replace(\\\\\\\"gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\\\\\\\",\\\\\\\"gl_FragColor = vec4( vec3( 0.0 ), ( 1.0 - fragCoordZ ) * darkness );\\\\\\\")}\\\\n\\\\t\\\\t`},this._depthMaterial.depthTest=!1,this._depthMaterial.depthWrite=!1}_renderShadow(t,e){if(!this._helper)return;if(!this._depthMaterial)return;if(!this._shadowCamera)return;if(!this._helper)return;if(!this._plane)return;const n=this._plane.onBeforeRender,i=e.background,r=this._helper.visible;e.background=null,this._plane.onBeforeRender=this._emptyOnBeforeRender,this._helper.visible=!1,e.overrideMaterial=this._depthMaterial,this._initVisibility(e),t.setRenderTarget(this._renderTarget),t.render(e,this._shadowCamera),this._coreRenderBlur.applyBlur(this._renderTarget,t,this.pv.blur,this.pv.blur),this.pv.tblur2&&this._coreRenderBlur.applyBlur(this._renderTarget,t,this.pv.blur2,this.pv.blur2),this._restoreVisibility(e),e.overrideMaterial=null,this._helper.visible=r,t.setRenderTarget(null),e.background=i,this._plane.onBeforeRender=n}_updateShadowGroupVisibility(){this._shadowGroup&&(this.flags.display.active()?this._shadowGroup.visible=!0:this._shadowGroup.visible=!1)}_updateHelperVisibility(){this._helper&&(this.flags.display.active()&&this.pv.showHelper?this._helper.visible=!0:this._helper.visible=!1)}_updateRenderHook(){const t=zU[this.pv.updateMode];switch(t){case BU.ON_RENDER:return this._addRenderHook();case BU.MANUAL:return this._removeRenderHook()}ar.unreachable(t)}_addRenderHook(){this._plane&&this._plane.onBeforeRender!=this._on_object_before_render_bound&&(this._plane.onBeforeRender=this._on_object_before_render_bound)}_removeRenderHook(){this._plane&&this._plane.onBeforeRender!=this._emptyRenderHook&&(this._plane.onBeforeRender=this._emptyRenderHook)}_update(t,e,n,i,r,s){t&&e?this._renderShadow(t,e):console.log(\\\\\\\"no renderer or scene\\\\\\\")}_updateManual(){const t=ai.renderersController.firstRenderer();if(!t)return void console.log(\\\\\\\"no renderer found\\\\\\\");const e=this.scene().threejsScene();this._renderShadow(t,e)}static PARAM_CALLBACK_update_updateMode(t){t._updateRenderHook()}static PARAM_CALLBACK_updateManual(t){t._updateManual()}static PARAM_CALLBACK_updateObjectsList(t){t._updateObjectsList()}_updateObjectsList(){\\\\\\\"\\\\\\\"!=this.pv.include?this._includedObjects=this.scene().objectsByMask(this.pv.include):this._includedObjects=[];const t=new Map;for(let e of this._includedObjects)e.traverseAncestors((e=>{t.set(e.uuid,e)}));this._includedAncestors=[],t.forEach(((t,e)=>{this._includedAncestors.push(t)})),\\\\\\\"\\\\\\\"!=this.pv.exclude?this._excludedObjects=this.scene().objectsByMask(this.pv.exclude):this._excludedObjects=[]}static PARAM_CALLBACK_printResolveObjectsList(t){t._printResolveObjectsList()}_printResolveObjectsList(){console.log(\\\\\\\"included objects:\\\\\\\"),console.log(this._includedObjects),console.log(\\\\\\\"included parents:\\\\\\\"),console.log(this._includedAncestors),console.log(\\\\\\\"excluded objects:\\\\\\\"),console.log(this._excludedObjects)}_initVisibility(t){this._includedObjects.length>0?t.traverse((t=>{this._initialVisibilityState.set(t,t.visible),t.visible=!1})):(this._storeObjectsVisibility(this._includedObjects),this._storeObjectsVisibility(this._includedAncestors),this._storeObjectsVisibility(this._excludedObjects)),this._setObjectsVisibility(this._includedObjects,!0),this._setObjectsVisibility(this._includedAncestors,!0),this._setObjectsVisibility(this._excludedObjects,!1)}_storeObjectsVisibility(t){for(let e of t)this._initialVisibilityState.set(e,e.visible)}_setObjectsVisibility(t,e){for(let n of t)n.visible=e}_restoreVisibility(t){this._includedObjects.length>0?t.traverse((t=>{const e=this._initialVisibilityState.get(t);e&&(t.visible=e)})):(this._restoreObjectsVisibility(this._includedObjects),this._restoreObjectsVisibility(this._includedAncestors),this._restoreObjectsVisibility(this._excludedObjects))}_restoreObjectsVisibility(t){for(let e of t){const t=this._initialVisibilityState.get(e);t&&(e.visible=t)}}}const jU=\\\\\\\"display\\\\\\\";class WU{constructor(t){this.node=t,this._children_uuids_dict=new Map,this._children_length=0,this._sop_group=this._create_sop_group()}_create_sop_group(){const t=new In.a;return t.matrixAutoUpdate=!1,t}sopGroup(){return this._sop_group}set_sop_group_name(){this._sop_group.name=`${this.node.name()}:sop_group`}displayNodeControllerCallbacks(){return{onDisplayNodeRemove:()=>{this.remove_children()},onDisplayNodeSet:()=>{setTimeout((()=>{this.request_display_node_container()}),0)},onDisplayNodeUpdate:()=>{this.request_display_node_container()}}}initializeNode(){var t;this.node.object.add(this.sopGroup()),this.node.nameController.add_post_set_fullPath_hook(this.set_sop_group_name.bind(this)),this._create_sop_group();const e=null===(t=this.node.flags)||void 0===t?void 0:t.display;e&&e.onUpdate((()=>{this._updateSopGroupHierarchy(),e.active()&&this.request_display_node_container()}))}_updateSopGroupHierarchy(){var t;if(null===(t=this.node.flags)||void 0===t?void 0:t.display){const t=this.sopGroup();this.usedInScene()?(t.visible=!0,this.node.object.add(t),t.updateMatrix()):(t.visible=!1,this.node.object.remove(t))}}usedInScene(){var t,e;const n=this.node.params.has(jU),i=this.node.params.boolean(jU),r=this.node.usedInScene(),s=(null===(e=null===(t=this.node.flags)||void 0===t?void 0:t.display)||void 0===e?void 0:e.active())||!1;return r&&s&&(!n||i)}async request_display_node_container(){this.node.scene().loadingController.loaded()&&this.usedInScene()&&await this._set_content_under_sop_group()}remove_children(){if(0==this._sop_group.children.length)return;let t;for(;t=this._sop_group.children[0];)this._sop_group.remove(t);this._children_uuids_dict.clear(),this._children_length=0}async _set_content_under_sop_group(){var t;const e=this.node.displayNodeController.displayNode();if(e&&(null===(t=e.parent())||void 0===t?void 0:t.graphNodeId())==this.node.graphNodeId()){const t=(await e.compute()).coreContent();if(t){const e=t.objects();let n=e.length!=this._children_length;if(!n)for(let t of e)this._children_uuids_dict.get(t.uuid)||(n=!0);if(n){this.remove_children();for(let t of e)this._sop_group.add(t),t.updateMatrix(),this._children_uuids_dict.set(t.uuid,!0);this._children_length=e.length}return}}this.remove_children()}}class qU extends(Sz(aa)){constructor(){super(...arguments),this.display=oa.BOOLEAN(1),this.renderOrder=oa.INTEGER(0,{range:[0,10],rangeLocked:[!0,!1]})}}const XU=new qU;class YU extends _z{constructor(){super(...arguments),this.paramsConfig=XU,this.hierarchyController=new Lz(this),this.transformController=new Nz(this),this.flags=new Fi(this),this.childrenDisplayController=new WU(this),this.displayNodeController=new Lm(this,this.childrenDisplayController.displayNodeControllerCallbacks()),this._children_controller_context=Ki.SOP,this._onChildAddBound=this._onChildAdd.bind(this)}static type(){return Ng.GEO}createObject(){const t=new In.a;return t.matrixAutoUpdate=!1,t}initializeNode(){this.lifecycle.add_on_child_add_hook(this._onChildAddBound),this.hierarchyController.initializeNode(),this.transformController.initializeNode(),this.childrenDisplayController.initializeNode()}isDisplayNodeCooking(){if(this.flags.display.active()){const t=this.displayNodeController.displayNode();return!!t&&t.isDirty()}return!1}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}_onChildAdd(t){var e,n;this.scene().loadingController.loaded()&&1==this.children().length&&(null===(n=null===(e=t.flags)||void 0===e?void 0:e.display)||void 0===n||n.set(!0))}cook(){this.transformController.update(),this.object.visible=this.pv.display,this.object.renderOrder=this.pv.renderOrder,this.cookController.endCook()}}class $U extends(Sz(aa)){}const JU=new $U;class ZU extends _z{constructor(){super(...arguments),this.paramsConfig=JU,this.hierarchyController=new Lz(this),this.transformController=new Nz(this),this.flags=new Fi(this),this._helper=new NU(1)}static type(){return\\\\\\\"null\\\\\\\"}createObject(){const t=new In.a;return t.matrixAutoUpdate=!1,t}initializeNode(){this.hierarchyController.initializeNode(),this.transformController.initializeNode(),this._updateHelperHierarchy(),this._helper.matrixAutoUpdate=!1,this.flags.display.onUpdate((()=>{this._updateHelperHierarchy()}))}_updateHelperHierarchy(){this.flags.display.active()?(this.object.add(this._helper),this._helper.updateMatrix()):this.object.remove(this._helper)}cook(){this.transformController.update(),this.cookController.endCook()}}const QU=new class extends aa{constructor(){super(...arguments),this.center=oa.VECTOR3([0,0,0]),this.longitude=oa.FLOAT(0,{range:[0,360]}),this.latitude=oa.FLOAT(0,{range:[-180,180]}),this.depth=oa.FLOAT(1,{range:[0,10]})}},KU=\\\\\\\"_cook_main_without_inputs_when_dirty\\\\\\\",tG=new p.a(0,1,0),eG=new p.a(-1,0,0);class nG extends _z{constructor(){super(...arguments),this.paramsConfig=QU,this.hierarchyController=new Lz(this),this.flags=new Fi(this),this._helper=new NU(1),this._cook_main_without_inputs_when_dirty_bound=this._cook_main_without_inputs_when_dirty.bind(this),this._centerMatrix=new A.a,this._longitudeMatrix=new A.a,this._latitudeMatrix=new A.a,this._depthMatrix=new A.a,this._fullMatrix=new A.a,this._decomposed={t:new p.a,q:new au.a,s:new p.a}}static type(){return\\\\\\\"polarTransform\\\\\\\"}createObject(){const t=new In.a;return t.matrixAutoUpdate=!1,t}initializeNode(){this.hierarchyController.initializeNode(),this.dirtyController.hasHook(KU)||this.dirtyController.addPostDirtyHook(KU,this._cook_main_without_inputs_when_dirty_bound),this._updateHelperHierarchy(),this._helper.matrixAutoUpdate=!1,this.flags.display.onUpdate((()=>{this._updateHelperHierarchy()}))}_updateHelperHierarchy(){this.flags.display.active()?(this.object.add(this._helper),this._helper.updateMatrix()):this.object.remove(this._helper)}async _cook_main_without_inputs_when_dirty(){await this.cookController.cookMainWithoutInputs()}cook(){const t=this.object;this._centerMatrix.identity(),this._longitudeMatrix.identity(),this._latitudeMatrix.identity(),this._depthMatrix.identity(),this._centerMatrix.makeTranslation(this.pv.center.x,this.pv.center.y,this.pv.center.z),this._longitudeMatrix.makeRotationAxis(tG,Object(Ln.e)(this.pv.longitude)),this._latitudeMatrix.makeRotationAxis(eG,Object(Ln.e)(this.pv.latitude)),this._depthMatrix.makeTranslation(0,0,this.pv.depth),this._fullMatrix.copy(this._centerMatrix).multiply(this._longitudeMatrix).multiply(this._latitudeMatrix).multiply(this._depthMatrix),this._fullMatrix.decompose(this._decomposed.t,this._decomposed.q,this._decomposed.s),t.position.copy(this._decomposed.t),t.quaternion.copy(this._decomposed.q),t.scale.copy(this._decomposed.s),t.updateMatrix(),this.cookController.endCook()}}class iG{constructor(t){this._scene=t,this._data={}}data(t){this._scene.nodesController.reset_node_context_signatures();const e=hG.dispatch_node(this._scene.root()),n=e.data(),i=e.ui_data();return this._data={properties:{frame:this._scene.frame()||Ml.START_FRAME,maxFrame:this._scene.maxFrame(),maxFrameLocked:this._scene.timeController.maxFrameLocked(),realtimeState:this._scene.timeController.realtimeState(),mainCameraNodePath:this._scene.camerasController.mainCameraNodePath(),versions:t},root:n,ui:i},this._data}static sanitize_string(t){return t=t.replace(/'/g,\\\\\\\"'\\\\\\\"),t=sr.escapeLineBreaks(t)}}class rG{constructor(t){this._node=t}data(t={}){var e,n,i,r,s,o,a;this.is_root()||this._node.scene().nodesController.register_node_context_signature(this._node),this._data={type:this._node.type()};const l=this.nodes_data(t);Object.keys(l).length>0&&(this._data.nodes=l);const c=this.params_data();if(Object.keys(c).length>0&&(this._data.params=c),!this.is_root()){this._node.io.inputs.maxInputsCountOverriden()&&(this._data.maxInputsCount=this._node.io.inputs.maxInputsCount());const t=this.inputs_data();t.length>0&&(this._data.inputs=t);const e=this.connection_points_data();e&&(this._data.connection_points=e)}if(this._node.flags){const t={};(this._node.flags.hasBypass()||this._node.flags.hasDisplay()||this._node.flags.hasOptimize())&&(this._node.flags.hasBypass()&&(null===(e=this._node.flags.bypass)||void 0===e?void 0:e.active())&&(t.bypass=this._node.flags.bypass.active()),this._node.flags.hasDisplay()&&(!(null===(n=this._node.flags.display)||void 0===n?void 0:n.active())&&(null===(i=this._node.parent())||void 0===i?void 0:i.displayNodeController)||(t.display=null===(r=this._node.flags.display)||void 0===r?void 0:r.active())),this._node.flags.hasOptimize()&&(null===(s=this._node.flags.optimize)||void 0===s?void 0:s.active())&&(t.optimize=null===(o=this._node.flags.optimize)||void 0===o?void 0:o.active())),Object.keys(t).length>0&&(this._data.flags=t)}if(this._node.childrenAllowed()){const t=null===(a=this._node.childrenController)||void 0===a?void 0:a.selection;if(t&&this._node.children().length>0){const e=[],n={};for(let e of t.nodes())n[e.graphNodeId()]=!0;for(let t of this._node.children())t.graphNodeId()in n&&e.push(t);const i=e.map((t=>t.name()));i.length>0&&(this._data.selection=i)}}if(this._node.io.inputs.overrideClonedStateAllowed()){const t=this._node.io.inputs.clonedStateOverriden();t&&(this._data.cloned_state_overriden=t)}if(this._node.persisted_config){const t=this._node.persisted_config.toJSON();t&&(this._data.persisted_config=t)}return this.add_custom(),this._data}ui_data(t={}){const e=this.ui_data_without_children(),n=this._node.children();return n.length>0&&(e.nodes={},n.forEach((n=>{const i=hG.dispatch_node(n);e.nodes[n.name()]=i.ui_data(t)}))),e}ui_data_without_children(){const t={};if(!this.is_root()){const e=this._node.uiData;t.pos=e.position().toArray();const n=e.comment();n&&(t.comment=iG.sanitize_string(n))}return t}is_root(){return null===this._node.parent()&&this._node.graphNodeId()==this._node.root().graphNodeId()}inputs_data(){const t=[];return this._node.io.inputs.inputs().forEach(((e,n)=>{var i;if(e){const r=this._node.io.connections.inputConnection(n);if(this._node.io.inputs.hasNamedInputs()){const s=r.output_index,o=null===(i=e.io.outputs.namedOutputConnectionPoints()[s])||void 0===i?void 0:i.name();o&&(t[n]={index:n,node:e.name(),output:o})}else t[n]=e.name()}})),t}connection_points_data(){if(this._node.io.has_connection_points_controller&&this._node.io.connection_points.initialized()&&(this._node.io.inputs.hasNamedInputs()||this._node.io.outputs.hasNamedOutputs())){const t={};if(this._node.io.inputs.hasNamedInputs()){t.in=[];for(let e of this._node.io.inputs.namedInputConnectionPoints())e&&t.in.push(e.toJSON())}if(this._node.io.outputs.hasNamedOutputs()){t.out=[];for(let e of this._node.io.outputs.namedOutputConnectionPoints())e&&t.out.push(e.toJSON())}return t}}params_data(){const t={};for(let e of this._node.params.names){const n=this._node.params.get(e);if(n&&!n.parent_param){const e=hG.dispatch_param(n);if(e.required()){const i=e.data();t[n.name()]=i}}}return t}nodes_data(t={}){const e={};for(let n of this._node.children()){const i=hG.dispatch_node(n);e[n.name()]=i.data(t)}return e}add_custom(){}}class sG{constructor(t){this._param=t,this._complex_data={}}required(){const t=this._param.options.isSpare()&&!this._param.parent_param,e=!this._param.isDefault();return t||e||this._param.options.hasOptionsOverridden()}data(){if(this._param.parent_param)throw console.warn(\\\\\\\"no component should be saved\\\\\\\"),\\\\\\\"no component should be saved\\\\\\\";return this._require_data_complex()?this._data_complex():this._data_simple()}_data_simple(){return this._param.rawInputSerialized()}_data_complex(){if(this._complex_data={},this._param.options.isSpare()&&!this._param.parent_param&&(this._complex_data.type=this._param.type(),this._complex_data.default_value=this._param.defaultValueSerialized(),this._complex_data.options=this._param.options.current()),this._param.isDefault()||(this._complex_data.raw_input=this._param.rawInputSerialized()),this._param.options.hasOptionsOverridden()){const t={},e=this._param.options.overriddenOptions();for(let n of Object.keys(e)){const i=e[n];m.isString(i)||m.isNumber(i)?t[n]=i:t[n]=JSON.stringify(i)}this._complex_data.overriden_options=t}return this._complex_data}_require_data_complex(){return!!this._param.options.isSpare()||!!this._param.options.hasOptionsOverridden()}add_main(){}}class oG extends sG{add_main(){if(!this._require_data_complex())return this._param.rawInputSerialized();this._complex_data.raw_input=this._param.rawInputSerialized()}}class aG extends sG{add_main(){let t=this._param.rawInput();if(t=iG.sanitize_string(t),!this._require_data_complex())return t;this._complex_data.raw_input=t}}class lG extends sG{add_main(){let t=this._param.rawInput();if(t=iG.sanitize_string(t),!this._require_data_complex())return t;this._complex_data.raw_input=t}}class cG extends sG{add_main(){if(!this._require_data_complex())return this._param.rawInputSerialized();this._complex_data.raw_input=this._param.rawInputSerialized()}}class uG extends rG{nodes_data(t={}){return t.showPolyNodesData?super.nodes_data(t):{}}ui_data(t={}){return t.showPolyNodesData?super.ui_data(t):this.ui_data_without_children()}}class hG{static dispatch_node(t){return t.polyNodeController?new uG(t):new rG(t)}static dispatch_param(t){return t instanceof no?new oG(t):t instanceof po?new aG(t):t instanceof bo?new lG(t):t instanceof xo?new cG(t):new sG(t)}}class dG{constructor(){this._objects=[],this._objects_with_geo=[],this.touch()}timestamp(){return this._timestamp}touch(){const t=ai.performance.performanceManager();this._timestamp=t.now(),this.reset()}reset(){this._bounding_box=void 0,this._core_geometries=void 0,this._core_objects=void 0}clone(){const t=new dG;if(this._objects){const e=[];for(let t of this._objects)e.push(vs.clone(t));t.setObjects(e)}return t}setObjects(t){this._objects=t,this._objects_with_geo=t.filter((t=>null!=t.geometry)),this.touch()}objects(){return this._objects}objectsWithGeo(){return this._objects_with_geo}coreObjects(){return this._core_objects=this._core_objects||this._create_core_objects()}_create_core_objects(){return this._objects?this._objects.map(((t,e)=>new vs(t,e))):[]}objectsData(){return this._objects?this._objects.map((t=>this._objectData(t))):[]}_objectData(t){let e=0;return t.geometry&&(e=ps.pointsCount(t.geometry)),{type:Nr(t.constructor),name:t.name,children_count:t.children.length,points_count:e}}geometries(){const t=[];for(let e of this.coreObjects()){const n=e.object().geometry;n&&t.push(n)}return t}coreGeometries(){return this._core_geometries=this._core_geometries||this._createCoreGeometries()}_createCoreGeometries(){const t=[];for(let e of this.geometries())t.push(new ps(e));return t}static geometryFromObject(t){return t.isMesh||t.isLine||t.isPoints?t.geometry:null}faces(){const t=[];for(let e of this.objectsWithGeo())if(e.geometry){const n=new ps(e.geometry).faces();for(let i of n)i.applyMatrix4(e.matrix),t.push(i)}return t}points(){return this.coreGeometries().map((t=>t.points())).flat()}pointsCount(){return f.sum(this.coreGeometries().map((t=>t.pointsCount())))}totalPointsCount(){if(this._objects){let t=0;for(let e of this._objects)e.traverse((e=>{const n=e.geometry;n&&(t+=ps.pointsCount(n))}));return t}return 0}pointsFromGroup(t){if(t){const e=sr.indices(t),n=this.points();return f.compact(e.map((t=>n[t])))}return this.points()}static _fromObjects(t){const e=new dG;return e.setObjects(t),e}objectsFromGroup(t){return this.coreObjectsFromGroup(t).map((t=>t.object()))}coreObjectsFromGroup(t){if(\\\\\\\"\\\\\\\"!==(t=t.trim())){const e=parseInt(t);return m.isNaN(e)?this.coreObjects().filter((e=>sr.matchMask(t,e.name()))):f.compact([this.coreObjects()[e]])}return this.coreObjects()}boundingBox(){return this._bounding_box=this._bounding_box||this._compute_bounding_box()}center(){const t=new p.a;return this.boundingBox().getCenter(t),t}size(){const t=new p.a;return this.boundingBox().getSize(t),t}_compute_bounding_box(){let t;if(this._objects)for(let e of this._objects){const n=e.geometry;n&&(n.computeBoundingBox(),t?t.expandByObject(e):n.boundingBox&&(t=n.boundingBox.clone()))}return t=t||new XB.a(new p.a(-1,-1,-1),new p.a(1,1,1)),t}computeVertexNormals(){for(let t of this.coreObjects())t.computeVertexNormals()}hasAttrib(t){let e;return null!=(e=this.coreGeometries()[0])&&e.hasAttrib(t)}attribType(t){const e=this.coreGeometries()[0];return null!=e?e.attribType(t):null}objectAttribType(t){const e=this.coreObjects()[0];return null!=e?e.attribType(t):null}renameAttrib(t,e,n){switch(n){case Vr.ATTRIB_CLASS.VERTEX:if(this.hasAttrib(t)&&this._objects)for(let n of this._objects)n.traverse((n=>{const i=dG.geometryFromObject(n);if(i){new ps(i).renameAttrib(t,e)}}));break;case Vr.ATTRIB_CLASS.OBJECT:if(this.hasAttrib(t)&&this._objects)for(let n of this._objects)n.traverse((n=>{new vs(n,0).renameAttrib(t,e)}))}}attribNames(){let t;return null!=(t=this.coreGeometries()[0])?t.attribNames():[]}objectAttribNames(){let t;return null!=(t=this.coreObjects()[0])?t.attribNames():[]}attribNamesMatchingMask(t){const e=sr.attribNames(t),n=[];for(let t of this.attribNames())for(let i of e)if(sr.matchMask(t,i))n.push(t);else{t==Wr.remapName(i)&&n.push(t)}return f.uniq(n)}attribSizes(){let t;return null!=(t=this.coreGeometries()[0])?t.attribSizes():{}}objectAttribSizes(){let t;return null!=(t=this.coreObjects()[0])?t.attribSizes():{}}attribSize(t){let e;return null!=(e=this.coreGeometries()[0])?e.attribSize(t):0}addNumericVertexAttrib(t,e,n){null==n&&(n=Wr.default_value(e));for(let i of this.coreGeometries())i.addNumericAttrib(t,e,n)}static clone(t){const e=new In.a;return t.children.forEach((t=>{const n=vs.clone(t);e.add(n)})),e}}class pG extends Fl{static context(){return Ki.SOP}cook(t,e){}createCoreGroupFromObjects(t){const e=new dG;return e.setObjects(t),e}createCoreGroupFromGeometry(t,e=Sr.MESH){const n=pG.createObject(t,e);return this.createCoreGroupFromObjects([n])}createObject(t,e,n){return pG.createObject(t,e,n)}static createObject(t,e,n){this.createIndexIfNone(t);const i=new(0,Cr[e])(t,n=n||Vr.MATERIALS[e].clone());return i.castShadow=!0,i.receiveShadow=!0,i.frustumCulled=!1,i.matrixAutoUpdate=!1,i}createIndexIfNone(t){pG.createIndexIfNone(t)}static createIndexIfNone(t){hs.createIndexIfNone(t)}}var _G;!function(t){t.FROM_SET_CORE_GROUP=\\\\\\\"from set_core_group\\\\\\\",t.FROM_SET_GROUP=\\\\\\\"from set_group\\\\\\\",t.FROM_SET_OBJECTS=\\\\\\\"from set_objects\\\\\\\",t.FROM_SET_OBJECT=\\\\\\\"from set_object\\\\\\\",t.FROM_SET_GEOMETRIES=\\\\\\\"from set_geometries\\\\\\\",t.FROM_SET_GEOMETRY=\\\\\\\"from set_geometry\\\\\\\"}(_G||(_G={}));const mG=\\\\\\\"input geometry\\\\\\\",fG=[mG,mG,mG,mG];class gG extends ia{constructor(){super(...arguments),this.flags=new zi(this)}static context(){return Ki.SOP}static displayedInputNames(){return fG}initializeBaseNode(){this.flags.display.set(!1),this.flags.display.onUpdate((()=>{if(this.flags.display.active()){const t=this.parent();t&&t.displayNodeController&&t.displayNodeController.setDisplayNode(this)}})),this.io.outputs.setHasOneOutput()}setCoreGroup(t){this._setContainer(t,_G.FROM_SET_CORE_GROUP)}setObject(t){this._setContainerObjects([t],_G.FROM_SET_OBJECT)}setObjects(t){this._setContainerObjects(t,_G.FROM_SET_OBJECTS)}setGeometry(t,e=Sr.MESH){const n=this.createObject(t,e);this._setContainerObjects([n],_G.FROM_SET_GEOMETRY)}setGeometries(t,e=Sr.MESH){const n=[];let i;for(let r of t)i=this.createObject(r,e),n.push(i);this._setContainerObjects(n,_G.FROM_SET_GEOMETRIES)}_setContainerObjects(t,e){const n=this.containerController.container().coreContent()||new dG;n.setObjects(t),n.touch(),this._setContainer(n)}static createObject(t,e,n){return pG.createObject(t,e,n)}createObject(t,e,n){return gG.createObject(t,e,n)}static createIndexIfNone(t){pG.createIndexIfNone(t)}_createIndexIfNone(t){gG.createIndexIfNone(t)}}const vG=new class extends aa{};class yG extends gG{constructor(){super(...arguments),this.paramsConfig=vG}static type(){return er.OUTPUT}initializeNode(){this.io.inputs.setCount(1),this.io.outputs.setHasNoOutput(),this.io.inputs.initInputsClonedState(Qi.NEVER)}cook(t){this.setCoreGroup(t[0])}}class xG extends gG{constructor(){super(...arguments),this.childrenDisplayController=new wG(this),this.displayNodeController=new Lm(this,this.childrenDisplayController.displayNodeControllerCallbacks()),this._children_controller_context=Ki.SOP}initializeBaseNode(){super.initializeBaseNode(),this.childrenDisplayController.initializeNode(),this.cookController.disallowInputsEvaluation()}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}async cook(t){const e=this.childrenDisplayController.output_node();if(e){const t=(await e.compute()).coreContent();t?this.setCoreGroup(t):e.states.error.active()?this.states.error.set(e.states.error.message()):this.setObjects([])}else this.states.error.set(\\\\\\\"no output node found inside subnet\\\\\\\")}}const bG={dependsOnDisplayNode:!0};class wG{constructor(t,e=bG){this.node=t,this.options=e,this._output_node_needs_update=!0}dispose(){var t;null===(t=this._graph_node)||void 0===t||t.dispose()}displayNodeControllerCallbacks(){return{onDisplayNodeRemove:()=>{this.node.setDirty()},onDisplayNodeSet:()=>{this.node.setDirty()},onDisplayNodeUpdate:()=>{this.node.setDirty()}}}output_node(){return this._output_node_needs_update&&this._update_output_node(),this._output_node}initializeNode(){var t;const e=null===(t=this.node.flags)||void 0===t?void 0:t.display;e&&e.onUpdate((()=>{e.active()&&this.node.setDirty()})),this.node.lifecycle.add_on_child_add_hook((()=>{this._output_node_needs_update=!0,this.node.setDirty()})),this.node.lifecycle.add_on_child_remove_hook((()=>{this._output_node_needs_update=!0,this.node.setDirty()}))}_update_output_node(){const t=this.node.nodesByType(yG.type())[0];null!=this._output_node&&null!=t&&this._output_node.graphNodeId()==t.graphNodeId()||(this._graph_node&&this._output_node&&this._graph_node.removeGraphInput(this._output_node),this._output_node=t,this._output_node&&this.options.dependsOnDisplayNode&&(this._graph_node=this._graph_node||this._create_graph_node(),this._graph_node.addGraphInput(this._output_node)))}_create_graph_node(){const t=new Ai(this.node.scene(),\\\\\\\"subnetChildrenDisplayController\\\\\\\");return t.addPostDirtyHook(\\\\\\\"subnetChildrenDisplayController\\\\\\\",(()=>{this.node.setDirty()})),t}}function TG(t,e){const n=new class extends aa{constructor(){super(...arguments),this.template=oa.OPERATOR_PATH(\\\\\\\"../template\\\\\\\"),this.debug=oa.BUTTON(null,{callback:t=>{i.PARAM_CALLBACK_debug(t)}})}};class i extends xG{constructor(){super(...arguments),this.paramsConfig=n,this.polyNodeController=new MG(this,e)}static type(){return t}static PARAM_CALLBACK_debug(t){t._debug()}_debug(){this.polyNodeController.debug(this.p.template)}}return i}const AG=TG(\\\\\\\"poly\\\\\\\",{nodeContext:Ki.SOP,inputs:[0,4]});class EG extends AG{}class MG{constructor(t,e){this.node=t,this._definition=e}initializeNode(){this.init_inputs(),this.node.params.onParamsCreated(\\\\\\\"poly_node_init\\\\\\\",(()=>{this.create_params_from_definition()})),this.node.lifecycle.add_on_create_hook((()=>{this.create_params_from_definition(),this.createChildNodesFromDefinition()}))}init_inputs(){const t=this._definition.inputs;t&&this.node.io.inputs.setCount(t[0],t[1])}create_params_from_definition(){const t=this._definition.params;if(t){for(let e of t)e.options=e.options||{},e.options.spare=!0;this.node.params.updateParams({toAdd:t})}}createChildNodesFromDefinition(){const t=this._definition.nodes;if(!t)return;const e=this.node.scene().loadingController.loaded();e&&this.node.scene().loadingController.markAsLoading();const n=new Xl({}),i=new zl(this.node);i.create_nodes(n,t);const r=this._definition.ui;r&&i.process_nodes_ui_data(n,r),e&&this.node.scene().loadingController.markAsLoaded()}debug(t){const e=t.found_node();if(e){const t=hG.dispatch_node(e),n=t.data({showPolyNodesData:!0}),i=t.ui_data({showPolyNodesData:!0}),r={nodeContext:e.context(),inputs:[0,0],params:[],nodes:n.nodes,ui:i.nodes};console.log(JSON.stringify(r))}}static createNodeClass(t,e,n){switch(e){case Ki.SOP:return TG(t,n);case Ki.OBJ:return SG(t,n)}}}function SG(t,e){const n=new class extends aa{constructor(){super(...arguments),this.display=oa.BOOLEAN(1),this.template=oa.OPERATOR_PATH(\\\\\\\"../template\\\\\\\"),this.debug=oa.BUTTON(null,{callback:t=>{i.PARAM_CALLBACK_debug(t)}})}};class i extends _z{constructor(){super(...arguments),this.paramsConfig=n,this.hierarchyController=new Lz(this),this.flags=new Fi(this),this.childrenDisplayController=new WU(this),this.displayNodeController=new Lm(this,this.childrenDisplayController.displayNodeControllerCallbacks()),this._children_controller_context=Ki.SOP,this.polyNodeController=new MG(this,e)}static type(){return t}createObject(){const t=new In.a;return t.matrixAutoUpdate=!1,t}initializeNode(){this.hierarchyController.initializeNode(),this.childrenDisplayController.initializeNode()}isDisplayNodeCooking(){if(this.flags.display.active()){const t=this.displayNodeController.displayNode();return!!t&&t.isDirty()}return!1}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}cook(){this.object.visible=this.pv.display,this.cookController.endCook()}static PARAM_CALLBACK_debug(t){t._debug()}_debug(){this.polyNodeController.debug(this.p.template)}}return i}const CG=SG(\\\\\\\"poly\\\\\\\",{nodeContext:Ki.OBJ});class NG extends CG{}class LG extends Q.a{constructor(t){super(),this.type=\\\\\\\"Audio\\\\\\\",this.listener=t,this.context=t.context,this.gain=this.context.createGain(),this.gain.connect(t.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType=\\\\\\\"empty\\\\\\\",this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(t){return this.hasPlaybackControl=!1,this.sourceType=\\\\\\\"audioNode\\\\\\\",this.source=t,this.connect(),this}setMediaElementSource(t){return this.hasPlaybackControl=!1,this.sourceType=\\\\\\\"mediaNode\\\\\\\",this.source=this.context.createMediaElementSource(t),this.connect(),this}setMediaStreamSource(t){return this.hasPlaybackControl=!1,this.sourceType=\\\\\\\"mediaStreamNode\\\\\\\",this.source=this.context.createMediaStreamSource(t),this.connect(),this}setBuffer(t){return this.buffer=t,this.sourceType=\\\\\\\"buffer\\\\\\\",this.autoplay&&this.play(),this}play(t=0){if(!0===this.isPlaying)return void console.warn(\\\\\\\"THREE.Audio: Audio is already playing.\\\\\\\");if(!1===this.hasPlaybackControl)return void console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\");this._startedAt=this.context.currentTime+t;const e=this.context.createBufferSource();return e.buffer=this.buffer,e.loop=this.loop,e.loopStart=this.loopStart,e.loopEnd=this.loopEnd,e.onended=this.onEnded.bind(this),e.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=e,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(!1!==this.hasPlaybackControl)return!0===this.isPlaying&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,!0===this.loop&&(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this;console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\")}stop(){if(!1!==this.hasPlaybackControl)return this._progress=0,this.source.stop(),this.source.onended=null,this.isPlaying=!1,this;console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\")}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t<e;t++)this.filters[t-1].connect(this.filters[t]);this.filters[this.filters.length-1].connect(this.getOutput())}else this.source.connect(this.getOutput());return this._connected=!0,this}disconnect(){if(this.filters.length>0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t<e;t++)this.filters[t-1].disconnect(this.filters[t]);this.filters[this.filters.length-1].disconnect(this.getOutput())}else this.source.disconnect(this.getOutput());return this._connected=!1,this}getFilters(){return this.filters}setFilters(t){return t||(t=[]),!0===this._connected?(this.disconnect(),this.filters=t.slice(),this.connect()):this.filters=t.slice(),this}setDetune(t){if(this.detune=t,void 0!==this.source.detune)return!0===this.isPlaying&&this.source.detune.setTargetAtTime(this.detune,this.context.currentTime,.01),this}getDetune(){return this.detune}getFilter(){return this.getFilters()[0]}setFilter(t){return this.setFilters(t?[t]:[])}setPlaybackRate(t){if(!1!==this.hasPlaybackControl)return this.playbackRate=t,!0===this.isPlaying&&this.source.playbackRate.setTargetAtTime(this.playbackRate,this.context.currentTime,.01),this;console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\")}getPlaybackRate(){return this.playbackRate}onEnded(){this.isPlaying=!1}getLoop(){return!1===this.hasPlaybackControl?(console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\"),!1):this.loop}setLoop(t){if(!1!==this.hasPlaybackControl)return this.loop=t,!0===this.isPlaying&&(this.source.loop=this.loop),this;console.warn(\\\\\\\"THREE.Audio: this Audio has no playback control.\\\\\\\")}setLoopStart(t){return this.loopStart=t,this}setLoopEnd(t){return this.loopEnd=t,this}getVolume(){return this.gain.gain.value}setVolume(t){return this.gain.gain.setTargetAtTime(t,this.context.currentTime,.01),this}}const OG=new p.a,RG=new au.a,PG=new p.a,IG=new p.a;class FG extends LG{constructor(t){super(t),this.panner=this.context.createPanner(),this.panner.panningModel=\\\\\\\"HRTF\\\\\\\",this.panner.connect(this.gain)}getOutput(){return this.panner}getRefDistance(){return this.panner.refDistance}setRefDistance(t){return this.panner.refDistance=t,this}getRolloffFactor(){return this.panner.rolloffFactor}setRolloffFactor(t){return this.panner.rolloffFactor=t,this}getDistanceModel(){return this.panner.distanceModel}setDistanceModel(t){return this.panner.distanceModel=t,this}getMaxDistance(){return this.panner.maxDistance}setMaxDistance(t){return this.panner.maxDistance=t,this}setDirectionalCone(t,e,n){return this.panner.coneInnerAngle=t,this.panner.coneOuterAngle=e,this.panner.coneOuterGain=n,this}updateMatrixWorld(t){if(super.updateMatrixWorld(t),!0===this.hasPlaybackControl&&!1===this.isPlaying)return;this.matrixWorld.decompose(OG,RG,PG),IG.set(0,0,1).applyQuaternion(RG);const e=this.panner;if(e.positionX){const t=this.context.currentTime+this.listener.timeDelta;e.positionX.linearRampToValueAtTime(OG.x,t),e.positionY.linearRampToValueAtTime(OG.y,t),e.positionZ.linearRampToValueAtTime(OG.z,t),e.orientationX.linearRampToValueAtTime(IG.x,t),e.orientationY.linearRampToValueAtTime(IG.y,t),e.orientationZ.linearRampToValueAtTime(IG.z,t)}else e.setPosition(OG.x,OG.y,OG.z),e.setOrientation(IG.x,IG.y,IG.z)}}class DG extends Pz.a{constructor(t,e=1,n=16,i=2){const r=new S.a,s=new Float32Array(3*(3*(n+2*i)+3));r.setAttribute(\\\\\\\"position\\\\\\\",new C.a(s,3));const o=new wr.a({color:65280});super(r,[new wr.a({color:16776960}),o]),this.audio=t,this.range=e,this.divisionsInnerAngle=n,this.divisionsOuterAngle=i,this.type=\\\\\\\"PositionalAudioHelper\\\\\\\",this.update()}update(){const t=this.audio,e=this.range,n=this.divisionsInnerAngle,i=this.divisionsOuterAngle,r=Ln.e(t.panner.coneInnerAngle),s=Ln.e(t.panner.coneOuterAngle),o=r/2,a=s/2;let l,c,u=0,h=0;const d=this.geometry,p=d.attributes.position;function _(t,n,i,r){const s=(n-t)/i;for(p.setXYZ(u,0,0,0),h++,l=t;l<n;l+=s)c=u+h,p.setXYZ(c,Math.sin(l)*e,0,Math.cos(l)*e),p.setXYZ(c+1,Math.sin(Math.min(l+s,n))*e,0,Math.cos(Math.min(l+s,n))*e),p.setXYZ(c+2,0,0,0),h+=3;d.addGroup(u,h,r),u+=h,h=0}d.clearGroups(),_(-a,-o,i,0),_(-o,o,n,1),_(o,a,i,0),p.needsUpdate=!0,r===s&&(this.material[0].visible=!1)}dispose(){this.geometry.dispose(),this.material[0].dispose(),this.material[1].dispose()}}class kG extends kf.a{constructor(t){super(t)}load(t,e,n,i){const r=this,s=new Df.a(this.manager);s.setResponseType(\\\\\\\"arraybuffer\\\\\\\"),s.setPath(this.path),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(t,(function(n){try{const t=n.slice(0);xU().decodeAudioData(t,(function(t){e(t)}))}catch(e){i?i(e):console.error(e),r.manager.itemError(t)}}),n,i)}}var BG;!function(t){t.MP3=\\\\\\\"mp3\\\\\\\",t.WAV=\\\\\\\"wav\\\\\\\"}(BG||(BG={}));BG.MP3,BG.WAV;class zG extends jg{async load(){const t=new kG(this.loadingManager),e=await this._urlToLoad();return new Promise((n=>{t.load(e,(function(t){n(t)}))}))}}var UG;!function(t){t.LINEAR=\\\\\\\"linear\\\\\\\",t.INVERSE=\\\\\\\"inverse\\\\\\\",t.EXPONENTIAL=\\\\\\\"exponential\\\\\\\"}(UG||(UG={}));const GG=[UG.LINEAR,UG.INVERSE,UG.EXPONENTIAL];class VG extends(Sz(aa)){constructor(){super(...arguments),this.audio=oa.FOLDER(),this.listener=oa.NODE_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:Ki.OBJ,types:[Ng.AUDIO_LISTENER]}}),this.url=oa.STRING(\\\\\\\"\\\\\\\",{fileBrowse:{type:[Ls.AUDIO]}}),this.volume=oa.FLOAT(1),this.loop=oa.BOOLEAN(1,{separatorBefore:!0}),this.loopStart=oa.FLOAT(0,{visibleIf:{loop:1}}),this.loopEnd=oa.FLOAT(0,{visibleIf:{loop:1},separatorAfter:!0}),this.refDistance=oa.FLOAT(10,{range:[0,10],rangeLocked:[!0,!1]}),this.rolloffFactor=oa.FLOAT(10,{range:[0,10],rangeLocked:[!0,!1]}),this.maxDistance=oa.FLOAT(100,{range:[.001,100],rangeLocked:[!0,!1]}),this.distanceModel=oa.INTEGER(GG.indexOf(UG.LINEAR),{menu:{entries:GG.map(((t,e)=>({name:t,value:e})))}}),this.coneInnerAngle=oa.FLOAT(180,{range:[0,360],rangeLocked:[!0,!0]}),this.coneOuterAngle=oa.FLOAT(230,{range:[0,360],rangeLocked:[!0,!0]}),this.coneOuterGain=oa.FLOAT(.1,{range:[0,1],rangeLocked:[!0,!0]}),this.autoplay=oa.BOOLEAN(1),this.showHelper=oa.BOOLEAN(0),this.play=oa.BUTTON(null,{callback:t=>{jG.PARAM_CALLBACK_play(t)}}),this.pause=oa.BUTTON(null,{callback:t=>{jG.PARAM_CALLBACK_pause(t)}})}}const HG=new VG;class jG extends _z{constructor(){super(...arguments),this.paramsConfig=HG,this.hierarchyController=new Lz(this),this.transformController=new Nz(this),this.flags=new Fi(this)}static type(){return Ng.POSITIONAL_AUDIO}createObject(){const t=new In.a;return t.matrixAutoUpdate=!1,t}initializeNode(){this.hierarchyController.initializeNode(),this.transformController.initializeNode(),this._updateHelperHierarchy(),this.flags.display.onUpdate((()=>{this._updateHelperHierarchy()}))}_updateHelperHierarchy(){this._helper&&(this.flags.display.active()?this.object.add(this._helper):this.object.remove(this._helper))}cook(){this.transformController.update(),this._updatePositionalAudio(),this.cookController.endCook()}async _updatePositionalAudio(){this.p.listener.isDirty()&&await this.p.listener.compute();const t=this.pv.url;if(this._loadedUrl!=t)try{await this._createPositionalAudio()}catch(t){this.states.error.set(`error when creating audio: ${t}`)}this._positionalAudio&&(this._positionalAudio.setVolume(this.pv.volume),this._positionalAudio.setLoop(this.pv.loop),this._positionalAudio.setLoopStart(this.pv.loopStart),this._positionalAudio.setLoopEnd(this.pv.loopEnd),this._positionalAudio.setRefDistance(this.pv.refDistance),this._positionalAudio.setRolloffFactor(this.pv.rolloffFactor),this._positionalAudio.setMaxDistance(this.pv.maxDistance),this._positionalAudio.setDistanceModel(GG[this.pv.distanceModel]),this._positionalAudio.setDirectionalCone(this.pv.coneInnerAngle,this.pv.coneOuterAngle,this.pv.coneOuterGain),this.pv.showHelper&&(this._helper=this._helper||this._createHelper(this._positionalAudio),this.object.add(this._helper)),this._helper&&(this._helper.visible=this.pv.showHelper,this._helper.update()))}_createHelper(t){const e=new DG(t);return e.matrixAutoUpdate=!1,e}async _createPositionalAudio(){const t=this.pv.listener.nodeWithContext(Ki.OBJ);if(!t)return;const e=t.object;this._positionalAudio&&(this._positionalAudio.source&&(this._positionalAudio.stop(),this._positionalAudio.disconnect()),this.object.remove(this._positionalAudio),this._positionalAudio=void 0),this._helper&&(this._helper.dispose(),this._helper=void 0),this._positionalAudio=new FG(e),this._positionalAudio.matrixAutoUpdate=!1;const n=new zG(this.pv.url,this.scene(),this),i=await n.load();this._loadedUrl=this.pv.url,this._positionalAudio.autoplay=this.pv.autoplay,this._positionalAudio.setBuffer(i),this.object.add(this._positionalAudio)}isPlaying(){return!!this._positionalAudio&&this._positionalAudio.isPlaying}static PARAM_CALLBACK_play(t){t.PARAM_CALLBACK_play()}static PARAM_CALLBACK_pause(t){t.PARAM_CALLBACK_pause()}PARAM_CALLBACK_play(){this._positionalAudio&&(this.isPlaying()||this._positionalAudio.play())}PARAM_CALLBACK_pause(){this._positionalAudio&&this.isPlaying()&&this._positionalAudio.pause()}}var WG;!function(t){t.ON_RENDER=\\\\\\\"On Every Render\\\\\\\",t.MANUAL=\\\\\\\"Manual\\\\\\\"}(WG||(WG={}));const qG=[WG.ON_RENDER,WG.MANUAL];const XG=new class extends aa{constructor(){super(...arguments),this.object=oa.OPERATOR_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:Ki.OBJ},dependentOnFoundNode:!1,computeOnDirty:!0,callback:t=>{YG.PARAM_CALLBACK_update_resolved_object(t)}}),this.pointIndex=oa.INTEGER(0,{range:[0,100]}),this.updateMode=oa.INTEGER(qG.indexOf(WG.ON_RENDER),{callback:t=>{YG.PARAM_CALLBACK_update_updateMode(t)},menu:{entries:qG.map(((t,e)=>({name:t,value:e})))}}),this.update=oa.BUTTON(null,{callback:t=>{YG.PARAM_CALLBACK_update(t)},visibleIf:{updateMode:qG.indexOf(WG.MANUAL)}})}};class YG extends _z{constructor(){super(...arguments),this.paramsConfig=XG,this.hierarchyController=new Lz(this),this.flags=new Fi(this),this._helper=new NU(1),this._found_point_post=new p.a,this._on_object_before_render_bound=this._update.bind(this)}static type(){return\\\\\\\"rivet\\\\\\\"}createObject(){const t=new k.a;return t.matrixAutoUpdate=!1,t}initializeNode(){this.hierarchyController.initializeNode(),this.addPostDirtyHook(\\\\\\\"rivet_on_dirty\\\\\\\",(()=>{this.cookController.cookMainWithoutInputs()})),this._updateHelperHierarchy(),this.flags.display.onUpdate((()=>{this._updateHelperHierarchy()}))}_updateHelperHierarchy(){this.flags.display.active()?this.object.add(this._helper):this.object.remove(this._helper)}async cook(){await this._update_resolved_object(),this._update_render_hook(),this.cookController.endCook()}_update_render_hook(){const t=qG[this.pv.updateMode];switch(t){case WG.ON_RENDER:return this._add_render_hook();case WG.MANUAL:return this._remove_render_hook()}ar.unreachable(t)}_add_render_hook(){this.object.onBeforeRender=this._on_object_before_render_bound,this.object.frustumCulled=!1}_remove_render_hook(){this.object.onBeforeRender=()=>{}}_update(t,e,n,i,r,s){const o=this._resolved_object();if(o){const t=o.geometry;if(t){const e=t.attributes.position;if(e){const t=e.array;this._found_point_post.fromArray(t,3*this.pv.pointIndex),o.updateWorldMatrix(!0,!1),o.localToWorld(this._found_point_post),this.object.matrix.makeTranslation(this._found_point_post.x,this._found_point_post.y,this._found_point_post.z)}}}}static PARAM_CALLBACK_update_resolved_object(t){t._update_resolved_object()}async _update_resolved_object(){this.p.object.isDirty()&&await this.p.object.compute();const t=this.p.object.found_node();if(t)if(t.context()==Ki.OBJ&&t.type()==YU.type()){const e=t;this._resolved_sop_group=e.childrenDisplayController.sopGroup()}else this.states.error.set(\\\\\\\"found node is not a geo node\\\\\\\")}_resolved_object(){if(!this._resolved_sop_group)return;const t=this._resolved_sop_group.children[0];return t||void 0}static PARAM_CALLBACK_update_updateMode(t){t._update_render_hook()}static PARAM_CALLBACK_update(t){t._update()}}class $G extends(Ca(Ea(va(ma(ua(aa)))))){}const JG=new $G;class ZG extends _z{constructor(){super(...arguments),this.paramsConfig=JG,this.hierarchyController=new Lz(this),this.SceneAutoUpdateController=new ha(this),this.sceneBackgroundController=new fa(this),this.SceneEnvController=new ya(this),this.sceneFogController=new Ma(this),this.sceneMaterialOverrideController=new Na(this)}static type(){return\\\\\\\"scene\\\\\\\"}createObject(){const t=new fr;return t.matrixAutoUpdate=!1,t}initializeNode(){this.hierarchyController.initializeNode()}cook(){this.SceneAutoUpdateController.update(),this.sceneBackgroundController.update(),this.SceneEnvController.update(),this.sceneFogController.update(),this.sceneMaterialOverrideController.update(),this.cookController.endCook()}}class QG{constructor(t,e,n){this._camera_node_id=t,this._controls_node=e,this._controls=n,this._update_required=this._controls_node.update_required()}update_required(){return this._update_required}get camera_node_id(){return this._camera_node_id}get controls(){return this._controls}get controls_node(){return this._controls_node}is_equal(t){return t.camera_node_id==this._camera_node_id&&t.controls_node.graphNodeId()==this._controls_node.graphNodeId()}}const KG=\\\\\\\"controls\\\\\\\";class tV{constructor(t){this.node=t,this._applied_controls_by_element_id=new Map,this._controls_node=null}controls_param(){return this.node.params.has(KG)?this.node.params.get(KG):null}async controls_node(){const t=this.node.p.controls,e=t.rawInput();if(e&&\\\\\\\"\\\\\\\"!=e){t.isDirty()&&await t.compute();const e=t.value.node();if(e){if(pr.includes(e.type()))return e;this.node.states.error.set(\\\\\\\"found node is not of a camera control type\\\\\\\")}else this.node.states.error.set(\\\\\\\"no node has been found\\\\\\\")}return null}async update_controls(){const t=await this.controls_node();t&&this._controls_node!=t&&this._dispose_control_refs(),this._controls_node=t}async apply_controls(t){const e=t.canvas();if(!e)return;const n=await this.controls_node();if(n){this._controlsEndEventName=n.endEventName();const i=n.controls_id();let r=!1,s=this._applied_controls_by_element_id.get(e.id);if(s&&s.get(i)&&(r=!0),!r){s=new Map,this._applied_controls_by_element_id.set(e.id,s),s.set(i,n);const r=await n.apply_controls(this.node.object,t);if(!r)return;const o=new QG(this.node.graphNodeId(),n,r);return this.set_controls_events(r),o}}}_dispose_control_refs(){this._applied_controls_by_element_id.forEach(((t,e)=>{this._dispose_controls_for_element_id(e)})),this._applied_controls_by_element_id.clear(),this._controlsEndEventName=void 0}_dispose_controls_for_element_id(t){const e=this._applied_controls_by_element_id.get(t);e&&e.forEach(((e,n)=>{e.dispose_controls_for_html_element_id(t)})),this._applied_controls_by_element_id.delete(t)}async dispose_controls(t){this._dispose_controls_for_element_id(t.id)}set_controls_events(t){const e=qV[this.node.pv.updateFromControlsMode];switch(e){case WV.ON_END:return this._set_controls_events_to_update_on_end(t);case WV.ALWAYS:return this._set_controls_events_to_update_always(t);case WV.NEVER:return this._reset(t)}ar.unreachable(e)}_reset(t){this.controls_change_listener&&(t.removeEventListener(\\\\\\\"change\\\\\\\",this.controls_change_listener),this.controls_change_listener=void 0),this.controls_end_listener&&this._controlsEndEventName&&(t.removeEventListener(this._controlsEndEventName,this.controls_end_listener),this.controls_end_listener=void 0)}_set_controls_events_to_update_on_end(t){this._reset(t),this._controlsEndEventName&&(this.controls_end_listener=()=>{this.node.update_transform_params_from_object()},t.addEventListener(this._controlsEndEventName,this.controls_end_listener))}_set_controls_events_to_update_always(t){this._reset(t),this.controls_change_listener=()=>{this.node.update_transform_params_from_object()},t.addEventListener(\\\\\\\"change\\\\\\\",this.controls_change_listener)}}function eV(t){return class extends t{constructor(){super(...arguments),this.layer=oa.INTEGER(0,{range:[0,31],rangeLocked:[!0,!0]})}}}class nV{constructor(t){this.node=t}update(){const t=this.node.object;t.layers.set(0),t.layers.enable(this.node.params.integer(\\\\\\\"layer\\\\\\\"))}}const iV={callback:t=>{eH.PARAM_CALLBACK_reset_effects_composer(t)}};function rV(t){return class extends t{constructor(){super(...arguments),this.doPostProcess=oa.BOOLEAN(0),this.postProcessNode=oa.NODE_PATH(\\\\\\\"\\\\\\\",{visibleIf:{doPostProcess:1},nodeSelection:{types:[tr.POST]},...iV})}}}class sV{constructor(t){this.node=t,this._composers_by_canvas_id={},this.node.p.postProcessNode?this._add_param_dirty_hook():this.node.params.onParamsCreated(\\\\\\\"post process add param dirty hook\\\\\\\",(()=>{this._add_param_dirty_hook()}))}_add_param_dirty_hook(){this.node.p.postProcessNode.addPostDirtyHook(\\\\\\\"on_post_node_dirty\\\\\\\",(()=>{this.reset()}))}render(t,e){const n=this.composer(t);n&&(e&&n.setSize(e.x,e.y),n.render())}reset(){const t=Object.keys(this._composers_by_canvas_id);for(let e of t)delete this._composers_by_canvas_id[e]}composer(t){return this._composers_by_canvas_id[t.id]=this._composers_by_canvas_id[t.id]||this._create_composer(t)}_create_composer(t){const e=this.node.renderController.renderer(t);if(e){const n=this.node.renderController.resolved_scene||this.node.scene().threejsScene(),i=this.node.object,r=this.node.p.postProcessNode.value.node();if(r){if(r.type()==tr.POST){const s=r,o=this.node.renderController.canvas_resolution(t);return s.effectsComposerController.createEffectsComposer({renderer:e,scene:n,camera:i,resolution:o,requester:this.node,camera_node:this.node})}this.node.states.error.set(\\\\\\\"found node is not a post process node\\\\\\\")}else this.node.states.error.set(\\\\\\\"no post node found\\\\\\\")}}}class oV extends ia{constructor(){super(...arguments),this.flags=new Oi(this)}static context(){return Ki.ROP}initializeBaseNode(){this.dirtyController.addPostDirtyHook(\\\\\\\"cook_immediately\\\\\\\",(()=>{this.cookController.cookMainWithoutInputs()}))}cook(){this.cookController.endCook()}}var aV,lV,cV,uV;!function(t){t.CSS2D=\\\\\\\"CSS2DRenderer\\\\\\\",t.CSS3D=\\\\\\\"CSS3DRenderer\\\\\\\",t.WEBGL=\\\\\\\"WebGLRenderer\\\\\\\"}(aV||(aV={})),function(t){t.Linear=\\\\\\\"Linear\\\\\\\",t.sRGB=\\\\\\\"sRGB\\\\\\\",t.Gamma=\\\\\\\"Gamma\\\\\\\",t.RGBE=\\\\\\\"RGBE\\\\\\\",t.LogLuv=\\\\\\\"LogLuv\\\\\\\",t.RGBM7=\\\\\\\"RGBM7\\\\\\\",t.RGBM16=\\\\\\\"RGBM16\\\\\\\",t.RGBD=\\\\\\\"RGBD\\\\\\\"}(lV||(lV={})),(uV=cV||(cV={}))[uV.Linear=w.U]=\\\\\\\"Linear\\\\\\\",uV[uV.sRGB=w.ld]=\\\\\\\"sRGB\\\\\\\",uV[uV.Gamma=w.J]=\\\\\\\"Gamma\\\\\\\",uV[uV.RGBE=w.gc]=\\\\\\\"RGBE\\\\\\\",uV[uV.LogLuv=w.bb]=\\\\\\\"LogLuv\\\\\\\",uV[uV.RGBM7=w.lc]=\\\\\\\"RGBM7\\\\\\\",uV[uV.RGBM16=w.kc]=\\\\\\\"RGBM16\\\\\\\",uV[uV.RGBD=w.fc]=\\\\\\\"RGBD\\\\\\\";const hV=[lV.Linear,lV.sRGB,lV.Gamma,lV.RGBE,lV.LogLuv,lV.RGBM7,lV.RGBM16,lV.RGBD],dV=[cV.Linear,cV.sRGB,cV.Gamma,cV.RGBE,cV.LogLuv,cV.RGBM7,cV.RGBM16,cV.RGBD],pV=cV.sRGB;var _V,mV,fV;!function(t){t.No=\\\\\\\"No\\\\\\\",t.Linear=\\\\\\\"Linear\\\\\\\",t.Reinhard=\\\\\\\"Reinhard\\\\\\\",t.Cineon=\\\\\\\"Cineon\\\\\\\",t.ACESFilmic=\\\\\\\"ACESFilmic\\\\\\\"}(_V||(_V={})),(fV=mV||(mV={}))[fV.No=w.vb]=\\\\\\\"No\\\\\\\",fV[fV.Linear=w.ab]=\\\\\\\"Linear\\\\\\\",fV[fV.Reinhard=w.vc]=\\\\\\\"Reinhard\\\\\\\",fV[fV.Cineon=w.m]=\\\\\\\"Cineon\\\\\\\",fV[fV.ACESFilmic=w.a]=\\\\\\\"ACESFilmic\\\\\\\";const gV=[_V.No,_V.Linear,_V.Reinhard,_V.Cineon,_V.ACESFilmic],vV=[mV.No,mV.Linear,mV.Reinhard,mV.Cineon,mV.ACESFilmic],yV=mV.ACESFilmic,xV=gV.map(((t,e)=>({name:t,value:vV[e]})));var bV;!function(t){t.HIGH=\\\\\\\"highp\\\\\\\",t.MEDIUM=\\\\\\\"mediump\\\\\\\",t.LOW=\\\\\\\"lowp\\\\\\\"}(bV||(bV={}));const wV=[bV.HIGH,bV.MEDIUM,bV.LOW];var TV;!function(t){t.HIGH=\\\\\\\"high-performance\\\\\\\",t.LOW=\\\\\\\"low-power\\\\\\\",t.DEFAULT=\\\\\\\"default\\\\\\\"}(TV||(TV={}));const AV=[TV.HIGH,TV.LOW,TV.DEFAULT];var EV,MV,SV;!function(t){t.Basic=\\\\\\\"Basic\\\\\\\",t.PCF=\\\\\\\"PCF\\\\\\\",t.PCFSoft=\\\\\\\"PCFSoft\\\\\\\",t.VSM=\\\\\\\"VSM\\\\\\\"}(EV||(EV={})),(SV=MV||(MV={}))[SV.Basic=w.k]=\\\\\\\"Basic\\\\\\\",SV[SV.PCF=w.Fb]=\\\\\\\"PCF\\\\\\\",SV[SV.PCFSoft=w.Gb]=\\\\\\\"PCFSoft\\\\\\\",SV[SV.VSM=w.gd]=\\\\\\\"VSM\\\\\\\";const CV=[EV.Basic,EV.PCF,EV.PCFSoft,EV.VSM],NV=[MV.Basic,MV.PCF,MV.PCFSoft,MV.VSM],LV=(w.k,w.Fb,w.Gb,w.gd,MV.PCFSoft),OV={alpha:!1,precision:bV.HIGH,premultipliedAlpha:!0,antialias:!1,stencil:!0,preserveDrawingBuffer:!1,powerPreference:TV.DEFAULT,depth:!0,logarithmicDepthBuffer:!1};const RV=new class extends aa{constructor(){super(...arguments),this.tprecision=oa.BOOLEAN(0),this.precision=oa.INTEGER(wV.indexOf(bV.HIGH),{visibleIf:{tprecision:1},menu:{entries:wV.map(((t,e)=>({value:e,name:t})))}}),this.tpowerPreference=oa.BOOLEAN(0),this.powerPreference=oa.INTEGER(AV.indexOf(TV.DEFAULT),{visibleIf:{tpowerPreference:1},menu:{entries:AV.map(((t,e)=>({value:e,name:t})))}}),this.alpha=oa.BOOLEAN(1),this.premultipliedAlpha=oa.BOOLEAN(1),this.antialias=oa.BOOLEAN(1),this.stencil=oa.BOOLEAN(1),this.depth=oa.BOOLEAN(1),this.logarithmicDepthBuffer=oa.BOOLEAN(0),this.toneMapping=oa.INTEGER(yV,{menu:{entries:xV}}),this.toneMappingExposure=oa.FLOAT(1,{range:[0,2]}),this.outputEncoding=oa.INTEGER(pV,{menu:{entries:hV.map(((t,e)=>({name:t,value:dV[e]})))}}),this.physicallyCorrectLights=oa.BOOLEAN(1),this.sortObjects=oa.BOOLEAN(1),this.tpixelRatio=oa.BOOLEAN(0),this.pixelRatio=oa.INTEGER(2,{visibleIf:{tpixelRatio:!0},range:[1,4],rangeLocked:[!0,!1]}),this.tshadowMap=oa.BOOLEAN(1),this.shadowMapAutoUpdate=oa.BOOLEAN(1,{visibleIf:{tshadowMap:1}}),this.shadowMapNeedsUpdate=oa.BOOLEAN(0,{visibleIf:{tshadowMap:1}}),this.shadowMapType=oa.INTEGER(LV,{visibleIf:{tshadowMap:1},menu:{entries:CV.map(((t,e)=>({name:t,value:NV[e]})))}})}};class PV extends oV{constructor(){super(...arguments),this.paramsConfig=RV,this._renderers_by_canvas_id={}}static type(){return aV.WEBGL}createRenderer(t,e){const n={},i=Object.keys(OV);let r;for(r of i)n[r]=OV[r];if(this.pv.tprecision){const t=wV[this.pv.precision];n.precision=t}if(this.pv.tpowerPreference){const t=AV[this.pv.powerPreference];n.powerPreference=t}n.antialias=this.pv.antialias,n.antialias=this.pv.antialias,n.alpha=this.pv.alpha,n.premultipliedAlpha=this.pv.premultipliedAlpha,n.depth=this.pv.depth,n.stencil=this.pv.stencil,n.logarithmicDepthBuffer=this.pv.logarithmicDepthBuffer,n.canvas=t,n.context=e;const s=ai.renderersController.createWebGLRenderer(n);return ai.renderersController.printDebug()&&(ai.renderersController.printDebugMessage(`create renderer from node '${this.path()}'`),ai.renderersController.printDebugMessage({params:n})),this._update_renderer(s),this._renderers_by_canvas_id[t.id]=s,s}cook(){const t=Object.keys(this._renderers_by_canvas_id);for(let e of t){const t=this._renderers_by_canvas_id[e];this._update_renderer(t)}this._traverse_scene_and_update_materials(),this.cookController.endCook()}_update_renderer(t){t.physicallyCorrectLights=this.pv.physicallyCorrectLights,t.outputEncoding=this.pv.outputEncoding,t.toneMapping=this.pv.toneMapping,t.toneMappingExposure=this.pv.toneMappingExposure,t.shadowMap.enabled=this.pv.tshadowMap,t.shadowMap.autoUpdate=this.pv.shadowMapAutoUpdate,t.shadowMap.needsUpdate=this.pv.shadowMapNeedsUpdate,t.shadowMap.type=this.pv.shadowMapType,t.sortObjects=this.pv.sortObjects;const e=this.pv.tpixelRatio?this.pv.pixelRatio:FV.defaultPixelRatio();ai.renderersController.printDebug()&&(ai.renderersController.printDebugMessage(`set renderer pixelRatio from '${this.path()}'`),ai.renderersController.printDebugMessage({pixelRatio:e})),t.setPixelRatio(e)}_traverse_scene_and_update_materials(){this.scene().threejsScene().traverse((t=>{const e=t.material;if(e)if(m.isArray(e))for(let t of e)t.needsUpdate=!0;else e.needsUpdate=!0}))}}function IV(t){return class extends t{constructor(){super(...arguments),this.render=oa.FOLDER(),this.setScene=oa.BOOLEAN(0),this.scene=oa.OPERATOR_PATH(\\\\\\\"\\\\\\\",{visibleIf:{setScene:1},nodeSelection:{context:Ki.OBJ,types:[ZG.type()]}}),this.setRenderer=oa.BOOLEAN(0),this.renderer=oa.OPERATOR_PATH(\\\\\\\"\\\\\\\",{visibleIf:{setRenderer:1},nodeSelection:{context:Ki.ROP,types:[PV.type()]}}),this.setCSSRenderer=oa.BOOLEAN(0),this.CSSRenderer=oa.OPERATOR_PATH(\\\\\\\"\\\\\\\",{visibleIf:{setCSSRenderer:1},nodeSelection:{context:Ki.ROP,types:[aV.CSS2D,aV.CSS3D]}})}}}class FV{constructor(t){this.node=t,this._renderers_by_canvas_id={},this._resolution_by_canvas_id={},this._super_sampling_size=new d.a}render(t,e,n){if(this.node.pv.doPostProcess?this.node.postProcessController.render(t,e):this.render_with_renderer(t),this._resolved_cssRenderer_rop&&this._resolved_scene&&this.node.pv.setCSSRenderer){const e=this.cssRenderer(t);e&&e.render(this._resolved_scene,this.node.object)}}render_with_renderer(t){const e=this.renderer(t);e&&this._resolved_scene&&e.render(this._resolved_scene,this.node.object)}async update(){this.update_scene(),this.update_renderer(),this.update_cssRenderer()}get resolved_scene(){return this._resolved_scene}update_scene(){if(this.node.pv.setScene){const t=this.node.p.scene;t.isDirty()&&t.find_target();const e=t.found_node_with_context_and_type(Ki.OBJ,ZG.type());e&&(e.isDirty()&&e.cookController.cookMainWithoutInputs(),this._resolved_scene=e.object)}else this._resolved_scene=this.node.scene().threejsScene()}update_renderer(){if(this.node.pv.setRenderer){const t=this.node.p.renderer;t.isDirty()&&t.find_target(),this._resolved_renderer_rop=t.found_node_with_context_and_type(Ki.ROP,aV.WEBGL)}else this._resolved_renderer_rop=void 0}update_cssRenderer(){if(this.node.pv.setCSSRenderer){const t=this.node.p.CSSRenderer;t.isDirty()&&t.find_target(),this._resolved_cssRenderer_rop=t.found_node_with_context_and_type(Ki.ROP,[aV.CSS2D,aV.CSS3D])}else this._resolved_cssRenderer_rop,this._resolved_cssRenderer_rop=void 0}renderer(t){return this._renderers_by_canvas_id[t.id]}cssRenderer(t){if(this._resolved_cssRenderer_rop&&this.node.pv.setCSSRenderer)return this._resolved_cssRenderer_rop.renderer(t)}createRenderer(t,e){const n=ai.renderersController.createRenderingContext(t);if(!n)return void console.error(\\\\\\\"failed to create webgl context\\\\\\\");let i;return this.node.pv.setRenderer&&(this.update_renderer(),this._resolved_renderer_rop&&(i=this._resolved_renderer_rop.createRenderer(t,n))),i||(i=FV._createDefaultRenderer(t,n)),ai.renderersController.registerRenderer(i),this._renderers_by_canvas_id[t.id]=i,this._super_sampling_size.copy(e),this.set_renderer_size(t,this._super_sampling_size),i}static defaultPixelRatio(){return Zf.isMobile()?1:Math.max(2,window.devicePixelRatio)}static _createDefaultRenderer(t,e){const n={canvas:t,antialias:!1,alpha:!1,context:e},i=ai.renderersController.createWebGLRenderer(n),r=this.defaultPixelRatio();return i.setPixelRatio(r),i.shadowMap.enabled=!0,i.shadowMap.type=LV,i.physicallyCorrectLights=!0,i.toneMapping=yV,i.toneMappingExposure=1,i.outputEncoding=pV,ai.renderersController.printDebug()&&(ai.renderersController.printDebugMessage(\\\\\\\"create default renderer\\\\\\\"),ai.renderersController.printDebugMessage({params:n,pixelRatio:r})),i}delete_renderer(t){const e=this.renderer(t);e&&ai.renderersController.deregisterRenderer(e)}canvas_resolution(t){return this._resolution_by_canvas_id[t.id]}set_renderer_size(t,e){this._resolution_by_canvas_id[t.id]=this._resolution_by_canvas_id[t.id]||new d.a,this._resolution_by_canvas_id[t.id].copy(e);const n=this.renderer(t);if(n){const t=!1;n.setSize(e.x,e.y,t)}if(this._resolved_cssRenderer_rop){const n=this.cssRenderer(t);n&&n.setSize(e.x,e.y)}}}class DV{constructor(t){this.viewer=t,this._active=!1,this._controls=null,this._bound_on_controls_start=this._on_controls_start.bind(this),this._bound_on_controls_end=this._on_controls_end.bind(this),this._update_graph_node()}controls(){return this._controls}async create_controls(){var t;this.dispose_controls();this.viewer.canvas()&&(this._config=await(null===(t=this.viewer.cameraControlsController)||void 0===t?void 0:t.apply_controls(this.viewer)),this._config&&(this._controls=this._config.controls,this._controls&&(this.viewer.active()?(this._controls.addEventListener(\\\\\\\"start\\\\\\\",this._bound_on_controls_start),this._controls.addEventListener(\\\\\\\"end\\\\\\\",this._bound_on_controls_end)):this.dispose_controls())))}update(){this._config&&this._controls&&this._config.update_required()&&this._controls.update()}dispose(){var t;null===(t=this._graph_node)||void 0===t||t.graphDisconnectPredecessors(),this.dispose_controls()}dispose_controls(){var t;if(this._controls){const e=this.viewer.canvas();e&&(null===(t=this.viewer)||void 0===t||t.cameraControlsController.dispose_controls(e)),this._bound_on_controls_start&&this._controls.removeEventListener(\\\\\\\"start\\\\\\\",this._bound_on_controls_start),this._bound_on_controls_end&&this._controls.removeEventListener(\\\\\\\"end\\\\\\\",this._bound_on_controls_end),this._controls.dispose(),this._controls=null}}_on_controls_start(){this._active=!0}_on_controls_end(){this._active=!1}_update_graph_node(){const t=this.viewer.cameraNode().p.controls;this._graph_node=this._graph_node||this._create_graph_node(),this._graph_node&&(this._graph_node.graphDisconnectPredecessors(),this._graph_node.addGraphInput(t))}_create_graph_node(){const t=new Ai(this.viewer.cameraNode().scene(),\\\\\\\"viewer-controls\\\\\\\");return t.addPostDirtyHook(\\\\\\\"this.viewer.controls_controller\\\\\\\",(async()=>{await this.viewer.controlsController.create_controls()})),t}}class kV{constructor(t){this._viewer=t,this._size=new d.a(100,100),this._aspect=1}cameraNode(){return this._viewer.cameraNode()}get size(){return this._size}get aspect(){return this._aspect}computeSizeAndAspect(){this._updateSize(),this.cameraNode().scene().uniformsController.updateResolutionDependentUniformOwners(this._size),this._aspect=this._getAspect()}_updateSize(){this._size.x=this._viewer.domElement().offsetWidth,this._size.y=this._viewer.domElement().offsetHeight}_getAspect(){return this._size.x/this._size.y}updateCameraAspect(){this.cameraNode().setupForAspectRatio(this._aspect)}async prepareCurrentCamera(){await this.cameraNode().compute(),await this._updateFromCameraContainer()}async _updateFromCameraContainer(){var t;this.updateCameraAspect(),await(null===(t=this._viewer.controlsController)||void 0===t?void 0:t.create_controls())}}class BV{constructor(t){this.viewer=t}init(){const t=this.viewer.canvas();t&&(t.onwebglcontextlost=this._on_webglcontextlost.bind(this),t.onwebglcontextrestored=this._on_webglcontextrestored.bind(this))}_on_webglcontextlost(){console.warn(\\\\\\\"context lost at frame\\\\\\\",this.viewer.scene().frame()),this.request_animation_frame_id?cancelAnimationFrame(this.request_animation_frame_id):console.warn(\\\\\\\"request_animation_frame_id not initialized\\\\\\\"),console.warn(\\\\\\\"not canceled\\\\\\\",this.request_animation_frame_id)}_on_webglcontextrestored(){console.log(\\\\\\\"context restored\\\\\\\")}}const zV=\\\\\\\"hovered\\\\\\\";class UV{constructor(t,e,n){this._container=t,this._scene=e,this._camera_node=n,this._active=!1,this._id=UV._next_viewer_id++,this._scene.viewersRegister.registerViewer(this)}active(){return this._active}activate(){this._active=!0}deactivate(){this._active=!1}get camerasController(){return this._cameras_controller=this._cameras_controller||new kV(this)}get controlsController(){return this._controls_controller}get eventsController(){return this._events_controller=this._events_controller||new Ga(this)}get webglController(){return this._webgl_controller=this._webgl_controller||new BV(this)}domElement(){return this._container}scene(){return this._scene}canvas(){return this._canvas}cameraNode(){return this._camera_node}get cameraControlsController(){}id(){return this._id}dispose(){let t;for(this._scene.viewersRegister.unregisterViewer(this),this.eventsController.dispose();t=this._container.children[0];)this._container.removeChild(t)}resetContainerClass(){this.domElement().classList.remove(zV)}setContainerClassHovered(){this.domElement().classList.add(zV)}registerOnBeforeTick(t,e){this._onBeforeTickCallbackNames=this._onBeforeTickCallbackNames||[],this._onBeforeTickCallbacks=this._onBeforeTickCallbacks||[],this._registerCallback(t,e,this._onBeforeTickCallbackNames,this._onBeforeTickCallbacks)}unRegisterOnBeforeTick(t){this._unregisterCallback(t,this._onBeforeTickCallbackNames,this._onBeforeTickCallbacks)}registeredBeforeTickCallbackNames(){return this._onBeforeTickCallbackNames}registerOnAfterTick(t,e){this._onAfterTickCallbacks=this._onAfterTickCallbacks||[],this._onAfterTickCallbackNames=this._onAfterTickCallbackNames||[],this._registerCallback(t,e,this._onAfterTickCallbackNames,this._onAfterTickCallbacks)}unRegisterOnAfterTick(t){this._unregisterCallback(t,this._onAfterTickCallbackNames,this._onAfterTickCallbacks)}registeredAfterTickCallbackNames(){return this._onAfterTickCallbackNames}registerOnBeforeRender(t,e){this._onBeforeRenderCallbackNames=this._onBeforeRenderCallbackNames||[],this._onBeforeRenderCallbacks=this._onBeforeRenderCallbacks||[],this._registerCallback(t,e,this._onBeforeRenderCallbackNames,this._onBeforeRenderCallbacks)}unRegisterOnBeforeRender(t){this._unregisterCallback(t,this._onBeforeRenderCallbackNames,this._onBeforeRenderCallbacks)}registeredBeforeRenderCallbackNames(){return this._onBeforeRenderCallbackNames}registerOnAfterRender(t,e){this._onAfterRenderCallbackNames=this._onAfterRenderCallbackNames||[],this._onAfterRenderCallbacks=this._onAfterRenderCallbacks||[],this._registerCallback(t,e,this._onAfterRenderCallbackNames,this._onAfterRenderCallbacks)}unRegisterOnAfterRender(t){this._unregisterCallback(t,this._onAfterRenderCallbackNames,this._onAfterRenderCallbacks)}registeredAfterRenderCallbackNames(){return this._onAfterRenderCallbackNames}_registerCallback(t,e,n,i){(null==n?void 0:n.includes(t))?console.warn(`callback ${t} already registered`):(i.push(e),n.push(t))}_unregisterCallback(t,e,n){if(!e||!n)return;const i=e.indexOf(t);e.splice(i,1),n.splice(i,1)}}UV._next_viewer_id=0;class GV extends UV{constructor(t,e,n,i){super(t,e,n),this._scene=e,this._camera_node=n,this._properties=i,this._do_render=!0,this._animate_method=this.animate.bind(this),this._onResizeBound=this.onResize.bind(this),this._do_render=null==this._properties||this._properties.autoRender,this._canvas=document.createElement(\\\\\\\"canvas\\\\\\\"),this._canvas.id=`canvas_id_${Math.random()}`.replace(\\\\\\\".\\\\\\\",\\\\\\\"_\\\\\\\"),this._canvas.style.display=\\\\\\\"block\\\\\\\",this._canvas.style.outline=\\\\\\\"none\\\\\\\",this._container.appendChild(this._canvas),this._container.classList.add(\\\\\\\"CoreThreejsViewer\\\\\\\"),this._build(),this._setEvents()}get controlsController(){return this._controls_controller=this._controls_controller||new DV(this)}_build(){this._init_display(),this.activate()}dispose(){this._cancel_animate(),this.controlsController.dispose(),this._disposeEvents(),super.dispose()}get cameraControlsController(){return this._camera_node.controls_controller}_setEvents(){this.eventsController.init(),this.webglController.init(),window.addEventListener(\\\\\\\"resize\\\\\\\",this._onResizeBound.bind(this),!1)}_disposeEvents(){window.removeEventListener(\\\\\\\"resize\\\\\\\",this._onResizeBound.bind(this),!1)}onResize(){const t=this.canvas();t&&(this.camerasController.computeSizeAndAspect(),this._camera_node.renderController.set_renderer_size(t,this.camerasController.size),this.camerasController.updateCameraAspect())}_init_display(){if(!this._canvas)return void console.warn(\\\\\\\"no canvas found for viewer\\\\\\\");this.camerasController.computeSizeAndAspect();const t=this.camerasController.size;this._camera_node.renderController.createRenderer(this._canvas,t),this.camerasController.prepareCurrentCamera(),this.animate()}setAutoRender(t=!0){this._do_render=t,this._do_render&&this.animate()}animate(){var t;if(this._do_render){if(this._request_animation_frame_id=requestAnimationFrame(this._animate_method),this._onBeforeTickCallbacks)for(let t of this._onBeforeTickCallbacks)t();if(this._scene.timeController.incrementTimeIfPlaying(),this._onAfterTickCallbacks)for(let t of this._onAfterTickCallbacks)t();this.render(),null===(t=this._controls_controller)||void 0===t||t.update()}}_cancel_animate(){this._do_render=!1,this._request_animation_frame_id&&cancelAnimationFrame(this._request_animation_frame_id),this._canvas&&this._camera_node.renderController.delete_renderer(this._canvas)}render(){if(this.camerasController.cameraNode()&&this._canvas){if(this._onBeforeRenderCallbacks)for(let t of this._onBeforeRenderCallbacks)t();const t=this.camerasController.size,e=this.camerasController.aspect;if(this._camera_node.renderController.render(this._canvas,t,e),this._onAfterRenderCallbacks)for(let t of this._onAfterRenderCallbacks)t()}else console.warn(\\\\\\\"no camera to render with\\\\\\\")}renderer(){if(this._canvas)return this._camera_node.renderController.renderer(this._canvas)}}const VV={type:\\\\\\\"change\\\\\\\"},HV=1,jV=100;var WV;!function(t){t.ON_END=\\\\\\\"on move end\\\\\\\",t.ALWAYS=\\\\\\\"always\\\\\\\",t.NEVER=\\\\\\\"never\\\\\\\"}(WV||(WV={}));const qV=[WV.ON_END,WV.ALWAYS,WV.NEVER];function XV(t){return class extends t{constructor(){super(...arguments),this.setMainCamera=oa.BUTTON(null,{callback:(t,e)=>{tH.PARAM_CALLBACK_setMasterCamera(t)}})}}}function YV(t){return class extends t{constructor(){super(...arguments),this.camera=oa.FOLDER(),this.controls=oa.NODE_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:Ki.EVENT}}),this.updateFromControlsMode=oa.INTEGER(qV.indexOf(WV.ON_END),{menu:{entries:qV.map(((t,e)=>({name:t,value:e})))}}),this.near=oa.FLOAT(HV,{range:[0,100],cook:!1,computeOnDirty:!0,callback:(t,e)=>{eH.PARAM_CALLBACK_update_near_far_from_param(t,e)}}),this.far=oa.FLOAT(jV,{range:[0,100],cook:!1,computeOnDirty:!0,callback:(t,e)=>{eH.PARAM_CALLBACK_update_near_far_from_param(t,e)}}),this.display=oa.BOOLEAN(1),this.showHelper=oa.BOOLEAN(0)}}}var $V;!function(t){t.DEFAULT=\\\\\\\"default\\\\\\\",t.COVER=\\\\\\\"cover\\\\\\\",t.CONTAIN=\\\\\\\"contain\\\\\\\"}($V||($V={}));const JV=[$V.DEFAULT,$V.COVER,$V.CONTAIN];function ZV(t){return class extends t{constructor(){super(...arguments),this.fovAdjustMode=oa.INTEGER(JV.indexOf($V.DEFAULT),{menu:{entries:JV.map(((t,e)=>({name:t,value:e})))}}),this.expectedAspectRatio=oa.FLOAT(\\\\\\\"16/9\\\\\\\",{visibleIf:[{fovAdjustMode:JV.indexOf($V.COVER)},{fovAdjustMode:JV.indexOf($V.CONTAIN)}],range:[0,2],rangeLocked:[!0,!1]})}}}XV(aa);rV(IV(Sz(eV(YV(XV(aa))))));class QV extends _z{constructor(){super(...arguments),this.renderOrder=pz.CAMERA,this._aspect=-1}get object(){return this._object}async cook(){this.updateCamera(),this._object.dispatchEvent(VV),this.cookController.endCook()}on_create(){}on_delete(){}prepareRaycaster(t,e){}camera(){return this._object}updateCamera(){}static PARAM_CALLBACK_setMasterCamera(t){t.set_as_master_camera()}set_as_master_camera(){this.scene().camerasController.setMainCameraNodePath(this.path())}setupForAspectRatio(t){}_updateForAspectRatio(){}update_transform_params_from_object(){Mz.set_params_from_object(this._object,this)}static PARAM_CALLBACK_update_from_param(t,e){t.object[e.name()]=t.pv[e.name()]}}class KV extends QV{constructor(){super(...arguments),this.flags=new Fi(this),this.hierarchyController=new Lz(this),this.transformController=new Nz(this),this.childrenDisplayController=new WU(this),this.displayNodeController=new Lm(this,this.childrenDisplayController.displayNodeControllerCallbacks()),this._children_controller_context=Ki.SOP}get controls_controller(){return this._controls_controller=this._controls_controller||new tV(this)}get layers_controller(){return this._layers_controller=this._layers_controller||new nV(this)}get renderController(){return this._render_controller=this._render_controller||new FV(this)}get postProcessController(){return this._post_process_controller=this._post_process_controller||new sV(this)}initializeBaseNode(){super.initializeBaseNode(),this.io.outputs.setHasOneOutput(),this.hierarchyController.initializeNode(),this.transformController.initializeNode(),this.childrenDisplayController.initializeNode(),this.initHelperHook()}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}prepareRaycaster(t,e){e.setFromCamera(t,this._object)}async cook(){this.transformController.update(),this.layers_controller.update(),this.updateNearFar(),this.renderController.update(),this.updateCamera(),this._updateHelper(),this.controls_controller.update_controls(),this._object.dispatchEvent(VV),this.cookController.endCook()}static PARAM_CALLBACK_update_near_far_from_param(t,e){t.updateNearFar()}updateNearFar(){this._object.near==this.pv.near&&this._object.far==this.pv.far||(this._object.near=this.pv.near,this._object.far=this.pv.far,this._object.updateProjectionMatrix(),this._updateHelper())}setupForAspectRatio(t){m.isNaN(t)||t&&this._aspect!=t&&(this._aspect=t,this._updateForAspectRatio())}createViewer(t,e){return new GV(t,this.scene(),this,e)}static PARAM_CALLBACK_reset_effects_composer(t){t.postProcessController.reset()}initHelperHook(){this.flags.display.onUpdate((()=>{this._updateHelper()}))}helperVisible(){return this.flags.display.active()&&this.pv.showHelper}_createHelper(){const t=new jz(this.object);return t.update(),t}_updateHelper(){this.helperVisible()?(this._helper||(this._helper=this._createHelper()),this._helper&&(this.object.add(this._helper),this._helper.update())):this._helper&&this.object.remove(this._helper)}}class tH extends QV{}class eH extends KV{PARAM_CALLBACK_update_effects_composer(t){}}const nH=-.5,iH=.5,rH=.5,sH=-.5;class oH extends(rV(IV(eV(XV(ZV(function(t){return class extends t{constructor(){super(...arguments),this.size=oa.FLOAT(1)}}}(YV(Sz(aa,{matrixAutoUpdate:!0}))))))))){}const aH=new oH;class lH extends KV{constructor(){super(...arguments),this.paramsConfig=aH}static type(){return nr.ORTHOGRAPHIC}createObject(){return new st.a(2*nH,2*iH,2*rH,2*sH,HV,jV)}updateCamera(){this._updateForAspectRatio()}_updateForAspectRatio(){this._aspect&&(this._adjustFOVFromMode(),this._object.updateProjectionMatrix())}_adjustFOVFromMode(){const t=JV[this.pv.fovAdjustMode];switch(t){case $V.DEFAULT:return this._adjustFOVFromModeDefault();case $V.COVER:return this._adjustFOVFromModeCover();case $V.CONTAIN:return this._adjustFOVFromModeContain()}ar.unreachable(t)}_adjustFOVFromModeDefault(){this._adjustFOVFromSize(this.pv.size||1)}_adjustFOVFromModeCover(){const t=this.pv.size||1;this._aspect>this.pv.expectedAspectRatio?this._adjustFOVFromSize(this.pv.expectedAspectRatio*t/this._aspect):this._adjustFOVFromSize(t)}_adjustFOVFromModeContain(){const t=this.pv.size||1;this._aspect>this.pv.expectedAspectRatio?this._adjustFOVFromSize(t):this._adjustFOVFromSize(this.pv.expectedAspectRatio*t/this._aspect)}_adjustFOVFromSize(t){const e=t*this._aspect;this._object.left=nH*e*1,this._object.right=iH*e*1,this._object.top=rH*t*1,this._object.bottom=sH*t*1}}const cH=50;class uH extends(rV(IV(eV(XV(ZV(function(t){return class extends t{constructor(){super(...arguments),this.fov=oa.FLOAT(cH,{range:[0,100]})}}}(YV(Sz(aa,{matrixAutoUpdate:!0}))))))))){}const hH=new uH;class dH extends KV{constructor(){super(...arguments),this.paramsConfig=hH}static type(){return nr.PERSPECTIVE}createObject(){return new K.a(cH,1,HV,jV)}updateCamera(){this._object.fov!=this.pv.fov&&(this._object.fov=this.pv.fov,this._object.updateProjectionMatrix()),this._updateForAspectRatio()}_updateForAspectRatio(){this._aspect&&(this._object.aspect=this._aspect,this._adjustFOVFromMode(),this._object.updateProjectionMatrix())}_adjustFOVFromMode(){const t=JV[this.pv.fovAdjustMode];switch(t){case $V.DEFAULT:return this._adjustFOVFromModeDefault();case $V.COVER:return this._adjustFOVFromModeCover();case $V.CONTAIN:return this._adjustFOVFromModeContain()}ar.unreachable(t)}_adjustFOVFromModeDefault(){this._object.fov=this.pv.fov}_adjustFOVFromModeCover(){if(this._object.aspect>this.pv.expectedAspectRatio){const t=Math.tan(Object(Ln.e)(this.pv.fov/2))/(this._object.aspect/this.pv.expectedAspectRatio);this._object.fov=2*Object(Ln.k)(Math.atan(t))}else this._object.fov=this.pv.fov}_adjustFOVFromModeContain(){if(this._object.aspect>this.pv.expectedAspectRatio)this._object.fov=this.pv.fov;else{const t=Math.tan(Object(Ln.e)(this.pv.fov/2))/(this._object.aspect/this.pv.expectedAspectRatio);this._object.fov=2*Object(Ln.k)(Math.atan(t))}}}class pH extends(function(t){return class extends t{constructor(){super(...arguments),this.main=oa.FOLDER(),this.resolution=oa.INTEGER(256),this.excludedObjects=oa.STRING(\\\\\\\"*`$OS`\\\\\\\"),this.printResolve=oa.BUTTON(null,{callback:t=>{mH.PARAM_CALLBACK_printResolve(t)}}),this.near=oa.FLOAT(1),this.far=oa.FLOAT(100),this.render=oa.BUTTON(null,{callback:t=>{mH.PARAM_CALLBACK_render(t)}}),this.renderTarget=oa.FOLDER(),this.tencoding=oa.BOOLEAN(0),this.encoding=oa.INTEGER(w.ld,{visibleIf:{tencoding:1},menu:{entries:eg.map((t=>({name:Object.keys(t)[0],value:Object.values(t)[0]})))}}),this.tminFilter=oa.BOOLEAN(0),this.minFilter=oa.INTEGER(Xm,{visibleIf:{tminFilter:1},menu:{entries:$m}}),this.tmagFilter=oa.BOOLEAN(0),this.magFilter=oa.INTEGER(qm,{visibleIf:{tmagFilter:1},menu:{entries:Ym}})}}}(Sz(aa))){}const _H=new pH;class mH extends _z{constructor(){super(...arguments),this.paramsConfig=_H,this.hierarchyController=new Lz(this),this.transformController=new Nz(this),this.flags=new Fi(this),this._excludedObjects=[],this._previousVisibleStateByUuid=new Map,this._helper=new NU(1)}static type(){return Ng.CUBE_CAMERA}initializeNode(){this.hierarchyController.initializeNode(),this.transformController.initializeNode(),this._updateHelperHierarchy(),this._helper.matrixAutoUpdate=!1,this.flags.display.onUpdate((()=>{this._updateHelperHierarchy()})),this.io.inputs.setCount(0,1)}createObject(){const t=new In.a;return t.matrixAutoUpdate=!0,t}cook(){this.transformController.update(),this._resolveObjects();const t=this._setupCubeCamera();this._cubeCamera&&!t||this._createCubeCamera(),this.cookController.endCook()}_updateHelperHierarchy(){this.flags.display.active()?this.object.add(this._helper):this.object.remove(this._helper)}_setupCubeCamera(){let t=!1;if(this._cubeCamera){const e=this._cubeCamera.children[0],n=e.near,i=e.far,r=this._cubeCamera.renderTarget.width;n==this.pv.near&&i==this.pv.far&&r==this.pv.resolution||(t=!0),t&&this.object.remove(this._cubeCamera)}return t}_createCubeCamera(){const t=new it(this.pv.resolution,{encoding:this.pv.tencoding?this.pv.encoding:w.ld,minFilter:this.pv.tminFilter?this.pv.minFilter:void 0,magFilter:this.pv.tmagFilter?this.pv.magFilter:void 0});this._cubeCamera=new et(this.pv.near,this.pv.far,t),this._cubeCamera.matrixAutoUpdate=!0,this.object.add(this._cubeCamera)}renderTarget(){if(this._cubeCamera)return this._cubeCamera.renderTarget}render(){const t=ai.renderersController.firstRenderer();if(t)if(this._cubeCamera){for(let t of this._excludedObjects)this._previousVisibleStateByUuid.set(t.uuid,t.visible),t.visible=!1;this._cubeCamera.update(t,this.scene().threejsScene());for(let t of this._excludedObjects){const e=this._previousVisibleStateByUuid.get(t.uuid);e&&(t.visible=e)}this._previousVisibleStateByUuid.clear()}else console.warn(`no cubeCamera for ${this.path()}`);else console.warn(`no renderer found for ${this.path()}`)}_resolveObjects(){const t=this.scene().objectsByMask(this.pv.excludedObjects),e=new Map;for(let n of t)e.set(n.uuid,n);this._excludedObjects=[];for(let n of t){const t=n.parent;t&&(e.get(t.uuid)||this._excludedObjects.push(n))}}static PARAM_CALLBACK_printResolve(t){t.param_callback_printResolve()}param_callback_printResolve(){this._resolveObjects(),console.log(this._excludedObjects)}static PARAM_CALLBACK_render(t){t.param_callback_render()}param_callback_render(){this.render()}}class fH extends _z{constructor(){super(...arguments),this._attachableToHierarchy=!1}createObject(){const t=new In.a;return t.matrixAutoUpdate=!1,t}cook(){this.cookController.endCook()}}class gH extends fH{}class vH extends gH{constructor(){super(...arguments),this._children_controller_context=Ki.ANIM}static type(){return tr.ANIM}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class yH extends vH{constructor(){super(...arguments),this.renderOrder=pz.MANAGER}}class xH extends gH{constructor(){super(...arguments),this._children_controller_context=Ki.COP}static type(){return tr.COP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class bH extends gH{constructor(){super(...arguments),this.renderOrder=pz.MANAGER,this._children_controller_context=Ki.EVENT}static type(){return tr.EVENT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class wH extends gH{constructor(){super(...arguments),this.renderOrder=pz.MANAGER,this._children_controller_context=Ki.MAT}static type(){return tr.MAT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class TH extends fH{constructor(){super(...arguments),this.paramsConfig=new Jm,this.effectsComposerController=new Zm(this),this.displayNodeController=new Lm(this,this.effectsComposerController.displayNodeControllerCallbacks()),this._children_controller_context=Ki.POST}static type(){return tr.POST}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class AH extends gH{constructor(){super(...arguments),this.renderOrder=pz.MANAGER,this._children_controller_context=Ki.ROP}static type(){return tr.ROP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}const EH=[\\\\\\\"input pass\\\\\\\"];const MH={cook:!1,callback:function(t,e){SH.PARAM_CALLBACK_updatePasses(t)},computeOnDirty:!0};class SH extends ia{constructor(){super(...arguments),this.flags=new ki(this),this._passes_by_requester_id=new Map,this._update_pass_bound=this.updatePass.bind(this)}static context(){return Ki.POST}static displayedInputNames(){return EH}initializeNode(){this.flags.display.set(!1),this.flags.display.onUpdate((()=>{if(this.flags.display.active()){const t=this.parent();t&&t.displayNodeController&&t.displayNodeController.setDisplayNode(this)}})),this.io.inputs.setCount(0,1),this.io.outputs.setHasOneOutput()}cook(){this.cookController.endCook()}setupComposer(t){if(this._addPassFromInput(0,t),!this.flags.bypass.active()){let e=this._passes_by_requester_id.get(t.requester.graphNodeId());e||(e=this._createPass(t),e&&this._passes_by_requester_id.set(t.requester.graphNodeId(),e)),e&&t.composer.addPass(e)}}_addPassFromInput(t,e){const n=this.io.inputs.input(t);n&&n.setupComposer(e)}_createPass(t){}static PARAM_CALLBACK_updatePasses(t){t._updatePasses()}_updatePasses(){this._passes_by_requester_id.forEach(this._update_pass_bound)}updatePass(t){}}const CH={uniforms:{tDiffuse:{value:null}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\t#include <common>\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec4 texel = texture2D( tDiffuse, vUv );\\\\n\\\\n\\\\t\\\\t\\\\tfloat l = linearToRelativeLuminance( texel.rgb );\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor = vec4( l, l, l, texel.w );\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};var NH={uniforms:{tDiffuse:{value:null},averageLuminance:{value:1},luminanceMap:{value:null},maxLuminance:{value:16},minLuminance:{value:.01},middleGrey:{value:.6}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\t#include <common>\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tuniform float middleGrey;\\\\n\\\\t\\\\tuniform float minLuminance;\\\\n\\\\t\\\\tuniform float maxLuminance;\\\\n\\\\t\\\\t#ifdef ADAPTED_LUMINANCE\\\\n\\\\t\\\\t\\\\tuniform sampler2D luminanceMap;\\\\n\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\tuniform float averageLuminance;\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\tvec3 ToneMap( vec3 vColor ) {\\\\n\\\\t\\\\t\\\\t#ifdef ADAPTED_LUMINANCE\\\\n\\\\t\\\\t\\\\t\\\\t// Get the calculated average luminance\\\\n\\\\t\\\\t\\\\t\\\\tfloat fLumAvg = texture2D(luminanceMap, vec2(0.5, 0.5)).r;\\\\n\\\\t\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\tfloat fLumAvg = averageLuminance;\\\\n\\\\t\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\t\\\\t// Calculate the luminance of the current pixel\\\\n\\\\t\\\\t\\\\tfloat fLumPixel = linearToRelativeLuminance( vColor );\\\\n\\\\n\\\\t\\\\t\\\\t// Apply the modified operator (Eq. 4)\\\\n\\\\t\\\\t\\\\tfloat fLumScaled = (fLumPixel * middleGrey) / max( minLuminance, fLumAvg );\\\\n\\\\n\\\\t\\\\t\\\\tfloat fLumCompressed = (fLumScaled * (1.0 + (fLumScaled / (maxLuminance * maxLuminance)))) / (1.0 + fLumScaled);\\\\n\\\\t\\\\t\\\\treturn fLumCompressed * vColor;\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec4 texel = texture2D( tDiffuse, vUv );\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor = vec4( ToneMap( texel.xyz ), texel.w );\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};class LH extends Im{constructor(t,e){super(),this.resolution=void 0!==e?e:256,this.needsInit=!0,this.adaptive=void 0===t||!!t,this.luminanceRT=null,this.previousLuminanceRT=null,this.currentLuminanceRT=null,void 0===Pm&&console.error(\\\\\\\"THREE.AdaptiveToneMappingPass relies on CopyShader\\\\\\\");const n=Pm;this.copyUniforms=I.clone(n.uniforms),this.materialCopy=new F({uniforms:this.copyUniforms,vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,blending:w.ub,depthTest:!1}),void 0===CH&&console.error(\\\\\\\"THREE.AdaptiveToneMappingPass relies on LuminosityShader\\\\\\\"),this.materialLuminance=new F({uniforms:I.clone(CH.uniforms),vertexShader:CH.vertexShader,fragmentShader:CH.fragmentShader,blending:w.ub}),this.adaptLuminanceShader={defines:{MIP_LEVEL_1X1:(Math.log(this.resolution)/Math.log(2)).toFixed(1)},uniforms:{lastLum:{value:null},currentLum:{value:null},minLuminance:{value:.01},delta:{value:.016},tau:{value:1}},vertexShader:\\\\\\\"varying vec2 vUv;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"varying vec2 vUv;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D lastLum;\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D currentLum;\\\\n\\\\t\\\\t\\\\t\\\\tuniform float minLuminance;\\\\n\\\\t\\\\t\\\\t\\\\tuniform float delta;\\\\n\\\\t\\\\t\\\\t\\\\tuniform float tau;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 lastLum = texture2D( lastLum, vUv, MIP_LEVEL_1X1 );\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 currentLum = texture2D( currentLum, vUv, MIP_LEVEL_1X1 );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat fLastLum = max( minLuminance, lastLum.r );\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat fCurrentLum = max( minLuminance, currentLum.r );\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t//The adaption seems to work better in extreme lighting differences\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t//if the input luminance is squared.\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfCurrentLum *= fCurrentLum;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t// Adapt the luminance using Pattanaik's technique\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat fAdaptedLum = fLastLum + (fCurrentLum - fLastLum) * (1.0 - exp(-delta * tau));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t// \\\\\\\\\\\"fAdaptedLum = sqrt(fAdaptedLum);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_FragColor.r = fAdaptedLum;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\"},this.materialAdaptiveLum=new F({uniforms:I.clone(this.adaptLuminanceShader.uniforms),vertexShader:this.adaptLuminanceShader.vertexShader,fragmentShader:this.adaptLuminanceShader.fragmentShader,defines:Object.assign({},this.adaptLuminanceShader.defines),blending:w.ub}),void 0===NH&&console.error(\\\\\\\"THREE.AdaptiveToneMappingPass relies on ToneMapShader\\\\\\\"),this.materialToneMap=new F({uniforms:I.clone(NH.uniforms),vertexShader:NH.vertexShader,fragmentShader:NH.fragmentShader,blending:w.ub}),this.fsQuad=new km(null)}render(t,e,n,i){this.needsInit&&(this.reset(t),this.luminanceRT.texture.type=n.texture.type,this.previousLuminanceRT.texture.type=n.texture.type,this.currentLuminanceRT.texture.type=n.texture.type,this.needsInit=!1),this.adaptive&&(this.fsQuad.material=this.materialLuminance,this.materialLuminance.uniforms.tDiffuse.value=n.texture,t.setRenderTarget(this.currentLuminanceRT),this.fsQuad.render(t),this.fsQuad.material=this.materialAdaptiveLum,this.materialAdaptiveLum.uniforms.delta.value=i,this.materialAdaptiveLum.uniforms.lastLum.value=this.previousLuminanceRT.texture,this.materialAdaptiveLum.uniforms.currentLum.value=this.currentLuminanceRT.texture,t.setRenderTarget(this.luminanceRT),this.fsQuad.render(t),this.fsQuad.material=this.materialCopy,this.copyUniforms.tDiffuse.value=this.luminanceRT.texture,t.setRenderTarget(this.previousLuminanceRT),this.fsQuad.render(t)),this.fsQuad.material=this.materialToneMap,this.materialToneMap.uniforms.tDiffuse.value=n.texture,this.renderToScreen?(t.setRenderTarget(null),this.fsQuad.render(t)):(t.setRenderTarget(e),this.clear&&t.clear(),this.fsQuad.render(t))}reset(){this.luminanceRT&&this.luminanceRT.dispose(),this.currentLuminanceRT&&this.currentLuminanceRT.dispose(),this.previousLuminanceRT&&this.previousLuminanceRT.dispose();const t={minFilter:w.V,magFilter:w.V,format:w.Ib};this.luminanceRT=new Z(this.resolution,this.resolution,t),this.luminanceRT.texture.name=\\\\\\\"AdaptiveToneMappingPass.l\\\\\\\",this.luminanceRT.texture.generateMipmaps=!1,this.previousLuminanceRT=new Z(this.resolution,this.resolution,t),this.previousLuminanceRT.texture.name=\\\\\\\"AdaptiveToneMappingPass.pl\\\\\\\",this.previousLuminanceRT.texture.generateMipmaps=!1,t.minFilter=w.Y,t.generateMipmaps=!0,this.currentLuminanceRT=new Z(this.resolution,this.resolution,t),this.currentLuminanceRT.texture.name=\\\\\\\"AdaptiveToneMappingPass.cl\\\\\\\",this.adaptive&&(this.materialToneMap.defines.ADAPTED_LUMINANCE=\\\\\\\"\\\\\\\",this.materialToneMap.uniforms.luminanceMap.value=this.luminanceRT.texture),this.fsQuad.material=new at.a({color:7829367}),this.materialLuminance.needsUpdate=!0,this.materialAdaptiveLum.needsUpdate=!0,this.materialToneMap.needsUpdate=!0}setAdaptive(t){t?(this.adaptive=!0,this.materialToneMap.defines.ADAPTED_LUMINANCE=\\\\\\\"\\\\\\\",this.materialToneMap.uniforms.luminanceMap.value=this.luminanceRT.texture):(this.adaptive=!1,delete this.materialToneMap.defines.ADAPTED_LUMINANCE,this.materialToneMap.uniforms.luminanceMap.value=null),this.materialToneMap.needsUpdate=!0}setAdaptionRate(t){t&&(this.materialAdaptiveLum.uniforms.tau.value=Math.abs(t))}setMinLuminance(t){t&&(this.materialToneMap.uniforms.minLuminance.value=t,this.materialAdaptiveLum.uniforms.minLuminance.value=t)}setMaxLuminance(t){t&&(this.materialToneMap.uniforms.maxLuminance.value=t)}setAverageLuminance(t){t&&(this.materialToneMap.uniforms.averageLuminance.value=t)}setMiddleGrey(t){t&&(this.materialToneMap.uniforms.middleGrey.value=t)}dispose(){this.luminanceRT&&this.luminanceRT.dispose(),this.previousLuminanceRT&&this.previousLuminanceRT.dispose(),this.currentLuminanceRT&&this.currentLuminanceRT.dispose(),this.materialLuminance&&this.materialLuminance.dispose(),this.materialAdaptiveLum&&this.materialAdaptiveLum.dispose(),this.materialCopy&&this.materialCopy.dispose(),this.materialToneMap&&this.materialToneMap.dispose()}}const OH=new class extends aa{constructor(){super(...arguments),this.adaptive=oa.BOOLEAN(1,{...MH}),this.averageLuminance=oa.FLOAT(.7,{...MH}),this.midGrey=oa.FLOAT(.04,{...MH}),this.maxLuminance=oa.FLOAT(16,{range:[0,20],...MH}),this.adaptiveRange=oa.FLOAT(2,{range:[0,10],...MH})}};class RH extends SH{constructor(){super(...arguments),this.paramsConfig=OH}static type(){return\\\\\\\"adaptiveToneMapping\\\\\\\"}_createPass(t){const e=new LH(this.pv.adaptive,t.resolution.x);return this.updatePass(e),e}updatePass(t){t.setMaxLuminance(this.pv.maxLuminance),t.setMiddleGrey(this.pv.midGrey),t.setAverageLuminance(this.pv.averageLuminance)}}const PH={uniforms:{damp:{value:.96},tOld:{value:null},tNew:{value:null}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform float damp;\\\\n\\\\n\\\\t\\\\tuniform sampler2D tOld;\\\\n\\\\t\\\\tuniform sampler2D tNew;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvec4 when_gt( vec4 x, float y ) {\\\\n\\\\n\\\\t\\\\t\\\\treturn max( sign( x - y ), 0.0 );\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec4 texelOld = texture2D( tOld, vUv );\\\\n\\\\t\\\\t\\\\tvec4 texelNew = texture2D( tNew, vUv );\\\\n\\\\n\\\\t\\\\t\\\\ttexelOld *= damp * when_gt( texelOld, 0.1 );\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor = max(texelNew, texelOld);\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};class IH extends Im{constructor(t=.96){super(),void 0===PH&&console.error(\\\\\\\"THREE.AfterimagePass relies on AfterimageShader\\\\\\\"),this.shader=PH,this.uniforms=I.clone(this.shader.uniforms),this.uniforms.damp.value=t,this.textureComp=new Z(window.innerWidth,window.innerHeight,{minFilter:w.V,magFilter:w.ob,format:w.Ib}),this.textureOld=new Z(window.innerWidth,window.innerHeight,{minFilter:w.V,magFilter:w.ob,format:w.Ib}),this.shaderMaterial=new F({uniforms:this.uniforms,vertexShader:this.shader.vertexShader,fragmentShader:this.shader.fragmentShader}),this.compFsQuad=new km(this.shaderMaterial);const e=new at.a;this.copyFsQuad=new km(e)}render(t,e,n){this.uniforms.tOld.value=this.textureOld.texture,this.uniforms.tNew.value=n.texture,t.setRenderTarget(this.textureComp),this.compFsQuad.render(t),this.copyFsQuad.material.map=this.textureComp.texture,this.renderToScreen?(t.setRenderTarget(null),this.copyFsQuad.render(t)):(t.setRenderTarget(e),this.clear&&t.clear(),this.copyFsQuad.render(t));const i=this.textureOld;this.textureOld=this.textureComp,this.textureComp=i}setSize(t,e){this.textureComp.setSize(t,e),this.textureOld.setSize(t,e)}}const FH=new class extends aa{constructor(){super(...arguments),this.damp=oa.FLOAT(.96,{range:[0,1],rangeLocked:[!0,!0],...MH})}};class DH extends SH{constructor(){super(...arguments),this.paramsConfig=FH}static type(){return\\\\\\\"afterImage\\\\\\\"}_createPass(t){const e=new IH;return this.updatePass(e),e}updatePass(t){t.uniforms.damp.value=this.pv.damp}}const kH={uniforms:{tDiffuse:{value:null},opacity:{value:1}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform float opacity;\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec4 base = texture2D( tDiffuse, vUv );\\\\n\\\\n\\\\t\\\\t\\\\tvec3 lumCoeff = vec3( 0.25, 0.65, 0.1 );\\\\n\\\\t\\\\t\\\\tfloat lum = dot( lumCoeff, base.rgb );\\\\n\\\\t\\\\t\\\\tvec3 blend = vec3( lum );\\\\n\\\\n\\\\t\\\\t\\\\tfloat L = min( 1.0, max( 0.0, 10.0 * ( lum - 0.45 ) ) );\\\\n\\\\n\\\\t\\\\t\\\\tvec3 result1 = 2.0 * base.rgb * blend;\\\\n\\\\t\\\\t\\\\tvec3 result2 = 1.0 - 2.0 * ( 1.0 - blend ) * ( 1.0 - base.rgb );\\\\n\\\\n\\\\t\\\\t\\\\tvec3 newColor = mix( result1, result2, L );\\\\n\\\\n\\\\t\\\\t\\\\tfloat A2 = opacity * base.a;\\\\n\\\\t\\\\t\\\\tvec3 mixRGB = A2 * newColor.rgb;\\\\n\\\\t\\\\t\\\\tmixRGB += ( ( 1.0 - A2 ) * base.rgb );\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor = vec4( mixRGB, base.a );\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};const BH=new class extends aa{constructor(){super(...arguments),this.opacity=oa.FLOAT(.95,{range:[-5,5],rangeLocked:[!0,!0],...MH})}};class zH extends SH{constructor(){super(...arguments),this.paramsConfig=BH}static type(){return\\\\\\\"bleach\\\\\\\"}_createPass(t){const e=new Bm(kH);return this.updatePass(e),e}updatePass(t){t.uniforms.opacity.value=this.pv.opacity}}const UH={uniforms:{tDiffuse:{value:null},brightness:{value:0},contrast:{value:0}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\t\\\\tuniform float brightness;\\\\n\\\\t\\\\tuniform float contrast;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor = texture2D( tDiffuse, vUv );\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor.rgb += brightness;\\\\n\\\\n\\\\t\\\\t\\\\tif (contrast > 0.0) {\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor.rgb = (gl_FragColor.rgb - 0.5) / (1.0 - contrast) + 0.5;\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\t\\\\tgl_FragColor.rgb = (gl_FragColor.rgb - 0.5) * (1.0 + contrast) + 0.5;\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};const GH=new class extends aa{constructor(){super(...arguments),this.brightness=oa.FLOAT(0,{range:[-1,1],rangeLocked:[!1,!1],...MH}),this.contrast=oa.FLOAT(0,{range:[-1,1],rangeLocked:[!1,!1],...MH}),this.transparent=oa.BOOLEAN(1,MH)}};class VH extends SH{constructor(){super(...arguments),this.paramsConfig=GH}static type(){return\\\\\\\"brightnessContrast\\\\\\\"}_createPass(t){const e=new Bm(UH);return console.log(\\\\\\\"brightness\\\\\\\",e),e.fsQuad.material.transparent=!0,this.updatePass(e),e}updatePass(t){t.uniforms.brightness.value=this.pv.brightness,t.uniforms.contrast.value=this.pv.contrast,t.material.transparent=this.pv.transparent}}class HH extends Im{constructor(t,e){super(),this.needsSwap=!1,this.clearColor=void 0!==t?t:0,this.clearAlpha=void 0!==e?e:0,this._oldClearColor=new D.a}render(t,e,n){let i;this.clearColor&&(t.getClearColor(this._oldClearColor),i=t.getClearAlpha(),t.setClearColor(this.clearColor,this.clearAlpha)),t.setRenderTarget(this.renderToScreen?null:n),t.clear(),this.clearColor&&t.setClearColor(this._oldClearColor,i)}}const jH=new class extends aa{};class WH extends SH{constructor(){super(...arguments),this.paramsConfig=jH}static type(){return\\\\\\\"clear\\\\\\\"}_createPass(t){const e=new HH;return this.updatePass(e),e}updatePass(t){}}const qH=new class extends aa{};class XH extends SH{constructor(){super(...arguments),this.paramsConfig=qH}static type(){return\\\\\\\"clearMask\\\\\\\"}_createPass(t){const e=new Um;return this.updatePass(e),e}updatePass(t){}}const YH={uniforms:{tDiffuse:{value:null},powRGB:{value:new p.a(2,2,2)},mulRGB:{value:new p.a(1,1,1)},addRGB:{value:new p.a(0,0,0)}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\t\\\\tuniform vec3 powRGB;\\\\n\\\\t\\\\tuniform vec3 mulRGB;\\\\n\\\\t\\\\tuniform vec3 addRGB;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor = texture2D( tDiffuse, vUv );\\\\n\\\\t\\\\t\\\\tgl_FragColor.rgb = mulRGB * pow( ( gl_FragColor.rgb + addRGB ), powRGB );\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};const $H=new class extends aa{constructor(){super(...arguments),this.pow=oa.VECTOR3([2,2,2],{...MH}),this.mult=oa.COLOR([1,1,1],{...MH}),this.add=oa.COLOR([0,0,0],{...MH})}};class JH extends SH{constructor(){super(...arguments),this.paramsConfig=$H}static type(){return\\\\\\\"colorCorrection\\\\\\\"}_createPass(t){const e=new Bm(YH);return this.updatePass(e),e}updatePass(t){t.uniforms.powRGB.value.copy(this.pv.pow),t.uniforms.mulRGB.value.set(this.pv.mult.r,this.pv.mult.g,this.pv.mult.b),t.uniforms.addRGB.value.set(this.pv.add.r,this.pv.add.g,this.pv.add.b)}}const ZH=new class extends aa{constructor(){super(...arguments),this.opacity=oa.FLOAT(1,{range:[0,1],rangeLocked:[!0,!0],...MH}),this.transparent=oa.BOOLEAN(1,MH)}};class QH extends SH{constructor(){super(...arguments),this.paramsConfig=ZH}static type(){return\\\\\\\"copy\\\\\\\"}_createPass(t){const e=new Bm(Pm);return this.updatePass(e),e}updatePass(t){t.uniforms.opacity.value=this.pv.opacity,t.material.transparent=this.pv.transparent}}const KH={uniforms:{textureWidth:{value:1},textureHeight:{value:1},focalDepth:{value:1},focalLength:{value:24},fstop:{value:.9},tColor:{value:null},tDepth:{value:null},maxblur:{value:1},showFocus:{value:0},manualdof:{value:0},vignetting:{value:0},depthblur:{value:0},threshold:{value:.5},gain:{value:2},bias:{value:.5},fringe:{value:.7},znear:{value:.1},zfar:{value:100},noise:{value:1},dithering:{value:1e-4},pentagon:{value:0},shaderFocus:{value:1},focusCoords:{value:new d.a}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\t#include <common>\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tuniform sampler2D tColor;\\\\n\\\\t\\\\tuniform sampler2D tDepth;\\\\n\\\\t\\\\tuniform float textureWidth;\\\\n\\\\t\\\\tuniform float textureHeight;\\\\n\\\\n\\\\t\\\\tuniform float focalDepth;  //focal distance value in meters, but you may use autofocus option below\\\\n\\\\t\\\\tuniform float focalLength; //focal length in mm\\\\n\\\\t\\\\tuniform float fstop; //f-stop value\\\\n\\\\t\\\\tuniform bool showFocus; //show debug focus point and focal range (red = focal point, green = focal range)\\\\n\\\\n\\\\t\\\\t/*\\\\n\\\\t\\\\tmake sure that these two values are the same for your camera, otherwise distances will be wrong.\\\\n\\\\t\\\\t*/\\\\n\\\\n\\\\t\\\\tuniform float znear; // camera clipping start\\\\n\\\\t\\\\tuniform float zfar; // camera clipping end\\\\n\\\\n\\\\t\\\\t//------------------------------------------\\\\n\\\\t\\\\t//user variables\\\\n\\\\n\\\\t\\\\tconst int samples = SAMPLES; //samples on the first ring\\\\n\\\\t\\\\tconst int rings = RINGS; //ring count\\\\n\\\\n\\\\t\\\\tconst int maxringsamples = rings * samples;\\\\n\\\\n\\\\t\\\\tuniform bool manualdof; // manual dof calculation\\\\n\\\\t\\\\tfloat ndofstart = 1.0; // near dof blur start\\\\n\\\\t\\\\tfloat ndofdist = 2.0; // near dof blur falloff distance\\\\n\\\\t\\\\tfloat fdofstart = 1.0; // far dof blur start\\\\n\\\\t\\\\tfloat fdofdist = 3.0; // far dof blur falloff distance\\\\n\\\\n\\\\t\\\\tfloat CoC = 0.03; //circle of confusion size in mm (35mm film = 0.03mm)\\\\n\\\\n\\\\t\\\\tuniform bool vignetting; // use optical lens vignetting\\\\n\\\\n\\\\t\\\\tfloat vignout = 1.3; // vignetting outer border\\\\n\\\\t\\\\tfloat vignin = 0.0; // vignetting inner border\\\\n\\\\t\\\\tfloat vignfade = 22.0; // f-stops till vignete fades\\\\n\\\\n\\\\t\\\\tuniform bool shaderFocus;\\\\n\\\\t\\\\t// disable if you use external focalDepth value\\\\n\\\\n\\\\t\\\\tuniform vec2 focusCoords;\\\\n\\\\t\\\\t// autofocus point on screen (0.0,0.0 - left lower corner, 1.0,1.0 - upper right)\\\\n\\\\t\\\\t// if center of screen use vec2(0.5, 0.5);\\\\n\\\\n\\\\t\\\\tuniform float maxblur;\\\\n\\\\t\\\\t//clamp value of max blur (0.0 = no blur, 1.0 default)\\\\n\\\\n\\\\t\\\\tuniform float threshold; // highlight threshold;\\\\n\\\\t\\\\tuniform float gain; // highlight gain;\\\\n\\\\n\\\\t\\\\tuniform float bias; // bokeh edge bias\\\\n\\\\t\\\\tuniform float fringe; // bokeh chromatic aberration / fringing\\\\n\\\\n\\\\t\\\\tuniform bool noise; //use noise instead of pattern for sample dithering\\\\n\\\\n\\\\t\\\\tuniform float dithering;\\\\n\\\\n\\\\t\\\\tuniform bool depthblur; // blur the depth buffer\\\\n\\\\t\\\\tfloat dbsize = 1.25; // depth blur size\\\\n\\\\n\\\\t\\\\t/*\\\\n\\\\t\\\\tnext part is experimental\\\\n\\\\t\\\\tnot looking good with small sample and ring count\\\\n\\\\t\\\\tlooks okay starting from samples = 4, rings = 4\\\\n\\\\t\\\\t*/\\\\n\\\\n\\\\t\\\\tuniform bool pentagon; //use pentagon as bokeh shape?\\\\n\\\\t\\\\tfloat feather = 0.4; //pentagon shape feather\\\\n\\\\n\\\\t\\\\t//------------------------------------------\\\\n\\\\n\\\\t\\\\tfloat penta(vec2 coords) {\\\\n\\\\t\\\\t\\\\t//pentagonal shape\\\\n\\\\t\\\\t\\\\tfloat scale = float(rings) - 1.3;\\\\n\\\\t\\\\t\\\\tvec4  HS0 = vec4( 1.0,         0.0,         0.0,  1.0);\\\\n\\\\t\\\\t\\\\tvec4  HS1 = vec4( 0.309016994, 0.951056516, 0.0,  1.0);\\\\n\\\\t\\\\t\\\\tvec4  HS2 = vec4(-0.809016994, 0.587785252, 0.0,  1.0);\\\\n\\\\t\\\\t\\\\tvec4  HS3 = vec4(-0.809016994,-0.587785252, 0.0,  1.0);\\\\n\\\\t\\\\t\\\\tvec4  HS4 = vec4( 0.309016994,-0.951056516, 0.0,  1.0);\\\\n\\\\t\\\\t\\\\tvec4  HS5 = vec4( 0.0        ,0.0         , 1.0,  1.0);\\\\n\\\\n\\\\t\\\\t\\\\tvec4  one = vec4( 1.0 );\\\\n\\\\n\\\\t\\\\t\\\\tvec4 P = vec4((coords),vec2(scale, scale));\\\\n\\\\n\\\\t\\\\t\\\\tvec4 dist = vec4(0.0);\\\\n\\\\t\\\\t\\\\tfloat inorout = -4.0;\\\\n\\\\n\\\\t\\\\t\\\\tdist.x = dot( P, HS0 );\\\\n\\\\t\\\\t\\\\tdist.y = dot( P, HS1 );\\\\n\\\\t\\\\t\\\\tdist.z = dot( P, HS2 );\\\\n\\\\t\\\\t\\\\tdist.w = dot( P, HS3 );\\\\n\\\\n\\\\t\\\\t\\\\tdist = smoothstep( -feather, feather, dist );\\\\n\\\\n\\\\t\\\\t\\\\tinorout += dot( dist, one );\\\\n\\\\n\\\\t\\\\t\\\\tdist.x = dot( P, HS4 );\\\\n\\\\t\\\\t\\\\tdist.y = HS5.w - abs( P.z );\\\\n\\\\n\\\\t\\\\t\\\\tdist = smoothstep( -feather, feather, dist );\\\\n\\\\t\\\\t\\\\tinorout += dist.x;\\\\n\\\\n\\\\t\\\\t\\\\treturn clamp( inorout, 0.0, 1.0 );\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tfloat bdepth(vec2 coords) {\\\\n\\\\t\\\\t\\\\t// Depth buffer blur\\\\n\\\\t\\\\t\\\\tfloat d = 0.0;\\\\n\\\\t\\\\t\\\\tfloat kernel[9];\\\\n\\\\t\\\\t\\\\tvec2 offset[9];\\\\n\\\\n\\\\t\\\\t\\\\tvec2 wh = vec2(1.0/textureWidth,1.0/textureHeight) * dbsize;\\\\n\\\\n\\\\t\\\\t\\\\toffset[0] = vec2(-wh.x,-wh.y);\\\\n\\\\t\\\\t\\\\toffset[1] = vec2( 0.0, -wh.y);\\\\n\\\\t\\\\t\\\\toffset[2] = vec2( wh.x -wh.y);\\\\n\\\\n\\\\t\\\\t\\\\toffset[3] = vec2(-wh.x,  0.0);\\\\n\\\\t\\\\t\\\\toffset[4] = vec2( 0.0,   0.0);\\\\n\\\\t\\\\t\\\\toffset[5] = vec2( wh.x,  0.0);\\\\n\\\\n\\\\t\\\\t\\\\toffset[6] = vec2(-wh.x, wh.y);\\\\n\\\\t\\\\t\\\\toffset[7] = vec2( 0.0,  wh.y);\\\\n\\\\t\\\\t\\\\toffset[8] = vec2( wh.x, wh.y);\\\\n\\\\n\\\\t\\\\t\\\\tkernel[0] = 1.0/16.0;   kernel[1] = 2.0/16.0;   kernel[2] = 1.0/16.0;\\\\n\\\\t\\\\t\\\\tkernel[3] = 2.0/16.0;   kernel[4] = 4.0/16.0;   kernel[5] = 2.0/16.0;\\\\n\\\\t\\\\t\\\\tkernel[6] = 1.0/16.0;   kernel[7] = 2.0/16.0;   kernel[8] = 1.0/16.0;\\\\n\\\\n\\\\n\\\\t\\\\t\\\\tfor( int i=0; i<9; i++ ) {\\\\n\\\\t\\\\t\\\\t\\\\tfloat tmp = texture2D(tDepth, coords + offset[i]).r;\\\\n\\\\t\\\\t\\\\t\\\\td += tmp * kernel[i];\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\treturn d;\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\n\\\\t\\\\tvec3 color(vec2 coords,float blur) {\\\\n\\\\t\\\\t\\\\t//processing the sample\\\\n\\\\n\\\\t\\\\t\\\\tvec3 col = vec3(0.0);\\\\n\\\\t\\\\t\\\\tvec2 texel = vec2(1.0/textureWidth,1.0/textureHeight);\\\\n\\\\n\\\\t\\\\t\\\\tcol.r = texture2D(tColor,coords + vec2(0.0,1.0)*texel*fringe*blur).r;\\\\n\\\\t\\\\t\\\\tcol.g = texture2D(tColor,coords + vec2(-0.866,-0.5)*texel*fringe*blur).g;\\\\n\\\\t\\\\t\\\\tcol.b = texture2D(tColor,coords + vec2(0.866,-0.5)*texel*fringe*blur).b;\\\\n\\\\n\\\\t\\\\t\\\\tvec3 lumcoeff = vec3(0.299,0.587,0.114);\\\\n\\\\t\\\\t\\\\tfloat lum = dot(col.rgb, lumcoeff);\\\\n\\\\t\\\\t\\\\tfloat thresh = max((lum-threshold)*gain, 0.0);\\\\n\\\\t\\\\t\\\\treturn col+mix(vec3(0.0),col,thresh*blur);\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvec3 debugFocus(vec3 col, float blur, float depth) {\\\\n\\\\t\\\\t\\\\tfloat edge = 0.002*depth; //distance based edge smoothing\\\\n\\\\t\\\\t\\\\tfloat m = clamp(smoothstep(0.0,edge,blur),0.0,1.0);\\\\n\\\\t\\\\t\\\\tfloat e = clamp(smoothstep(1.0-edge,1.0,blur),0.0,1.0);\\\\n\\\\n\\\\t\\\\t\\\\tcol = mix(col,vec3(1.0,0.5,0.0),(1.0-m)*0.6);\\\\n\\\\t\\\\t\\\\tcol = mix(col,vec3(0.0,0.5,1.0),((1.0-e)-(1.0-m))*0.2);\\\\n\\\\n\\\\t\\\\t\\\\treturn col;\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tfloat linearize(float depth) {\\\\n\\\\t\\\\t\\\\treturn -zfar * znear / (depth * (zfar - znear) - zfar);\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tfloat vignette() {\\\\n\\\\t\\\\t\\\\tfloat dist = distance(vUv.xy, vec2(0.5,0.5));\\\\n\\\\t\\\\t\\\\tdist = smoothstep(vignout+(fstop/vignfade), vignin+(fstop/vignfade), dist);\\\\n\\\\t\\\\t\\\\treturn clamp(dist,0.0,1.0);\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tfloat gather(float i, float j, int ringsamples, inout vec3 col, float w, float h, float blur) {\\\\n\\\\t\\\\t\\\\tfloat rings2 = float(rings);\\\\n\\\\t\\\\t\\\\tfloat step = PI*2.0 / float(ringsamples);\\\\n\\\\t\\\\t\\\\tfloat pw = cos(j*step)*i;\\\\n\\\\t\\\\t\\\\tfloat ph = sin(j*step)*i;\\\\n\\\\t\\\\t\\\\tfloat p = 1.0;\\\\n\\\\t\\\\t\\\\tif (pentagon) {\\\\n\\\\t\\\\t\\\\t\\\\tp = penta(vec2(pw,ph));\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\tcol += color(vUv.xy + vec2(pw*w,ph*h), blur) * mix(1.0, i/rings2, bias) * p;\\\\n\\\\t\\\\t\\\\treturn 1.0 * mix(1.0, i /rings2, bias) * p;\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\t//scene depth calculation\\\\n\\\\n\\\\t\\\\t\\\\tfloat depth = linearize(texture2D(tDepth,vUv.xy).x);\\\\n\\\\n\\\\t\\\\t\\\\t// Blur depth?\\\\n\\\\t\\\\t\\\\tif ( depthblur ) {\\\\n\\\\t\\\\t\\\\t\\\\tdepth = linearize(bdepth(vUv.xy));\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t//focal plane calculation\\\\n\\\\n\\\\t\\\\t\\\\tfloat fDepth = focalDepth;\\\\n\\\\n\\\\t\\\\t\\\\tif (shaderFocus) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tfDepth = linearize(texture2D(tDepth,focusCoords).x);\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t// dof blur factor calculation\\\\n\\\\n\\\\t\\\\t\\\\tfloat blur = 0.0;\\\\n\\\\n\\\\t\\\\t\\\\tif (manualdof) {\\\\n\\\\t\\\\t\\\\t\\\\tfloat a = depth-fDepth; // Focal plane\\\\n\\\\t\\\\t\\\\t\\\\tfloat b = (a-fdofstart)/fdofdist; // Far DoF\\\\n\\\\t\\\\t\\\\t\\\\tfloat c = (-a-ndofstart)/ndofdist; // Near Dof\\\\n\\\\t\\\\t\\\\t\\\\tblur = (a>0.0) ? b : c;\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\t\\\\tfloat f = focalLength; // focal length in mm\\\\n\\\\t\\\\t\\\\t\\\\tfloat d = fDepth*1000.0; // focal plane in mm\\\\n\\\\t\\\\t\\\\t\\\\tfloat o = depth*1000.0; // depth in mm\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tfloat a = (o*f)/(o-f);\\\\n\\\\t\\\\t\\\\t\\\\tfloat b = (d*f)/(d-f);\\\\n\\\\t\\\\t\\\\t\\\\tfloat c = (d-f)/(d*fstop*CoC);\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tblur = abs(a-b)*c;\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\tblur = clamp(blur,0.0,1.0);\\\\n\\\\n\\\\t\\\\t\\\\t// calculation of pattern for dithering\\\\n\\\\n\\\\t\\\\t\\\\tvec2 noise = vec2(rand(vUv.xy), rand( vUv.xy + vec2( 0.4, 0.6 ) ) )*dithering*blur;\\\\n\\\\n\\\\t\\\\t\\\\t// getting blur x and y step factor\\\\n\\\\n\\\\t\\\\t\\\\tfloat w = (1.0/textureWidth)*blur*maxblur+noise.x;\\\\n\\\\t\\\\t\\\\tfloat h = (1.0/textureHeight)*blur*maxblur+noise.y;\\\\n\\\\n\\\\t\\\\t\\\\t// calculation of final color\\\\n\\\\n\\\\t\\\\t\\\\tvec3 col = vec3(0.0);\\\\n\\\\n\\\\t\\\\t\\\\tif(blur < 0.05) {\\\\n\\\\t\\\\t\\\\t\\\\t//some optimization thingy\\\\n\\\\t\\\\t\\\\t\\\\tcol = texture2D(tColor, vUv.xy).rgb;\\\\n\\\\t\\\\t\\\\t} else {\\\\n\\\\t\\\\t\\\\t\\\\tcol = texture2D(tColor, vUv.xy).rgb;\\\\n\\\\t\\\\t\\\\t\\\\tfloat s = 1.0;\\\\n\\\\t\\\\t\\\\t\\\\tint ringsamples;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tfor (int i = 1; i <= rings; i++) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t/*unboxstart*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tringsamples = i * samples;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfor (int j = 0 ; j < maxringsamples ; j++) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif (j >= ringsamples) break;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\ts += gather(float(i), float(j), ringsamples, col, w, h, blur);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t/*unboxend*/\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tcol /= s; //divide by sample count\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\tif (showFocus) {\\\\n\\\\t\\\\t\\\\t\\\\tcol = debugFocus(col, blur, depth);\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\tif (vignetting) {\\\\n\\\\t\\\\t\\\\t\\\\tcol *= vignette();\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor.rgb = col;\\\\n\\\\t\\\\t\\\\tgl_FragColor.a = 1.0;\\\\n\\\\t\\\\t}\\\\\\\"},tj={uniforms:{mNear:{value:1},mFar:{value:1e3}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying float vViewZDepth;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t#include <begin_vertex>\\\\n\\\\t\\\\t\\\\t#include <project_vertex>\\\\n\\\\n\\\\t\\\\t\\\\tvViewZDepth = - mvPosition.z;\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform float mNear;\\\\n\\\\t\\\\tuniform float mFar;\\\\n\\\\n\\\\t\\\\tvarying float vViewZDepth;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tfloat color = 1.0 - smoothstep( mNear, mFar, vViewZDepth );\\\\n\\\\t\\\\t\\\\tgl_FragColor = vec4( vec3( color ), 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};class ej{constructor(t){this._scene=t}scene(){return this._scene}with_overriden_material(t,e,n,i){const r={};let s;this._scene.traverse((i=>{const o=i;if(o.material){const i=o.geometry;if(i){const a=o.customDepthDOFMaterial;if(a){if(s=a,s.uniforms)for(let t of Object.keys(n))s.uniforms[t].value=n[t].value}else s=ps.markedAsInstance(i)?e:t;s&&(r[o.uuid]=o.material,o.material=s)}}})),i(),this._scene.traverse((t=>{const e=t;if(e.material){e.geometry&&(e.material=r[e.uuid])}}));for(let t of Object.keys(r))delete r[t]}}class nj{constructor(t,e,n,i){this._depth_of_field_node=t,this._scene=e,this._camera=n,this._resolution=i,this._camera_uniforms={mNear:{value:0},mFar:{value:0}},this.enabled=!0,this.needsSwap=!0,this.clear=!0,this.renderToScreen=!0,this._processing_scene=new fr,this.clear_color=new D.a(1,1,1),this._prev_clear_color=new D.a,this._core_scene=new ej(this._scene);const r=3,s=4;this._processing_camera=new st.a(this._resolution.x/-2,this._resolution.x/2,this._resolution.y/2,this._resolution.y/-2,-1e4,1e4),this._processing_camera.position.z=100,this._processing_scene.add(this._processing_camera);var o={minFilter:w.V,magFilter:w.V,format:w.ic};this._rtTextureDepth=new Z(this._resolution.x,this._resolution.y,o),this._rtTextureColor=new Z(this._resolution.x,this._resolution.y,o);var a=KH;a||console.error(\\\\\\\"BokehPass relies on BokehShader\\\\\\\"),this.bokeh_uniforms=I.clone(a.uniforms),this.bokeh_uniforms.tColor.value=this._rtTextureColor.texture,this.bokeh_uniforms.tDepth.value=this._rtTextureDepth.texture,this.bokeh_uniforms.textureWidth.value=this._resolution.x,this.bokeh_uniforms.textureHeight.value=this._resolution.y,this.bokeh_material=new F({uniforms:this.bokeh_uniforms,vertexShader:a.vertexShader,fragmentShader:a.fragmentShader,defines:{RINGS:r,SAMPLES:s}}),this._quad=new k.a(new L(this._resolution.x,this._resolution.y),this.bokeh_material),this._quad.position.z=-500,this._processing_scene.add(this._quad);var l=tj;l||console.error(\\\\\\\"BokehPass relies on BokehDepthShader\\\\\\\"),this.materialDepth=new F({uniforms:l.uniforms,vertexShader:l.vertexShader,fragmentShader:l.fragmentShader}),this.materialDepthInstance=new F({uniforms:l.uniforms,vertexShader:\\\\\\\"#include <common>\\\\n\\\\nvec3 rotate_with_quat( vec3 v, vec4 q )\\\\n{\\\\n\\\\treturn v + 2.0 * cross( q.xyz, cross( q.xyz, v ) + q.w * v );\\\\n}\\\\n\\\\n\\\\nattribute vec4 instanceOrientation;\\\\nattribute vec3 instancePosition;\\\\nattribute vec3 instanceScale;\\\\nvarying float vViewZDepth;\\\\n\\\\n\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvec3 v_POLYGON_instance_transform1_position = vec3(position);\\\\n\\\\tv_POLYGON_instance_transform1_position *= instanceScale;\\\\n\\\\tv_POLYGON_instance_transform1_position = rotate_with_quat( v_POLYGON_instance_transform1_position, instanceOrientation );\\\\n\\\\tv_POLYGON_instance_transform1_position += instancePosition;\\\\n\\\\t\\\\n\\\\t// replaces #include <begin_vertex>\\\\n\\\\tvec3 transformed = v_POLYGON_instance_transform1_position;\\\\n\\\\n\\\\n\\\\t#include <project_vertex>\\\\n\\\\n\\\\tvViewZDepth = - mvPosition.z;\\\\n}\\\\\\\",fragmentShader:l.fragmentShader}),this.update_camera_uniforms_with_node(this._depth_of_field_node,this._camera)}setSize(t,e){this._rtTextureDepth.setSize(t,e),this._rtTextureColor.setSize(t,e),this.bokeh_uniforms.textureWidth.value=t,this.bokeh_uniforms.textureHeight.value=e}dispose(){this._rtTextureDepth.dispose(),this._rtTextureColor.dispose()}render(t,e,n){t.getClearColor(this._prev_clear_color),t.setClearColor(this.clear_color),t.clear(),t.setRenderTarget(this._rtTextureColor),t.clear(),t.render(this._scene,this._camera),t.setClearColor(0),this._core_scene.with_overriden_material(this.materialDepth,this.materialDepthInstance,this._camera_uniforms,(()=>{t.setRenderTarget(this._rtTextureDepth),t.clear(),t.render(this._scene,this._camera)})),t.setRenderTarget(null),t.clear(),t.render(this._processing_scene,this._processing_camera),t.setClearColor(this._prev_clear_color)}update_camera_uniforms_with_node(t,e){this.bokeh_uniforms.focalLength.value=e.getFocalLength(),this.bokeh_uniforms.znear.value=e.near,this.bokeh_uniforms.zfar.value=e.far;var n=rj.smoothstep(e.near,e.far,t.pv.focalDepth),i=rj.linearize(1-n,e.near,e.far);this.bokeh_uniforms.focalDepth.value=i,this._camera_uniforms={mNear:{value:e.near},mFar:{value:e.far}};for(let t of[this.materialDepth,this.materialDepthInstance])t.uniforms.mNear.value=this._camera_uniforms.mNear.value,t.uniforms.mFar.value=this._camera_uniforms.mFar.value}}const ij=new class extends aa{constructor(){super(...arguments),this.focalDepth=oa.FLOAT(10,{range:[0,50],rangeLocked:[!0,!1],step:.001,...MH}),this.fStep=oa.FLOAT(10,{range:[.1,22],rangeLocked:[!0,!0],...MH}),this.maxBlur=oa.FLOAT(2,{range:[0,10],rangeLocked:[!0,!1],...MH}),this.vignetting=oa.BOOLEAN(0,{...MH}),this.depthBlur=oa.BOOLEAN(0,{...MH}),this.threshold=oa.FLOAT(.5,{range:[0,1],rangeLocked:[!0,!0],step:.001,...MH}),this.gain=oa.FLOAT(1,{range:[0,100],rangeLocked:[!0,!0],step:.001,...MH}),this.bias=oa.FLOAT(1,{range:[0,3],rangeLocked:[!0,!0],step:.001,...MH}),this.fringe=oa.FLOAT(.7,{range:[0,5],rangeLocked:[!0,!1],step:.001,...MH}),this.noise=oa.BOOLEAN(0,{...MH}),this.dithering=oa.FLOAT(0,{range:[0,.001],rangeLocked:[!0,!0],step:1e-4,...MH}),this.pentagon=oa.BOOLEAN(0,{...MH}),this.rings=oa.INTEGER(3,{range:[1,8],rangeLocked:[!0,!0],...MH}),this.samples=oa.INTEGER(4,{range:[1,13],rangeLocked:[!0,!0],...MH}),this.clearColor=oa.COLOR([1,1,1],{...MH})}};class rj extends SH{constructor(){super(...arguments),this.paramsConfig=ij}static type(){return\\\\\\\"depthOfField\\\\\\\"}static saturate(t){return Math.max(0,Math.min(1,t))}static linearize(t,e,n){return-n*e/(t*(n-e)-n)}static smoothstep(t,e,n){var i=this.saturate((n-t)/(e-t));return i*i*(3-2*i)}_createPass(t){if(t.camera.isPerspectiveCamera){const e=t.camera_node;if(e){const n=new nj(this,t.scene,e.object,t.resolution);this.updatePass(n);const i=new Ai(this.scene(),\\\\\\\"DOF\\\\\\\");return i.addGraphInput(e.p.near),i.addGraphInput(e.p.far),i.addGraphInput(e.p.fov),i.addGraphInput(this.p.focalDepth),i.addPostDirtyHook(\\\\\\\"post/DOF\\\\\\\",(()=>{this.update_pass_from_camera_node(n,e)})),n}}}update_pass_from_camera_node(t,e){t.update_camera_uniforms_with_node(this,e.object)}updatePass(t){t.bokeh_uniforms.fstop.value=this.pv.fStep,t.bokeh_uniforms.maxblur.value=this.pv.maxBlur,t.bokeh_uniforms.threshold.value=this.pv.threshold,t.bokeh_uniforms.gain.value=this.pv.gain,t.bokeh_uniforms.bias.value=this.pv.bias,t.bokeh_uniforms.fringe.value=this.pv.fringe,t.bokeh_uniforms.dithering.value=this.pv.dithering,t.bokeh_uniforms.noise.value=this.pv.noise?1:0,t.bokeh_uniforms.pentagon.value=this.pv.pentagon?1:0,t.bokeh_uniforms.vignetting.value=this.pv.vignetting?1:0,t.bokeh_uniforms.depthblur.value=this.pv.depthBlur?1:0,t.bokeh_uniforms.shaderFocus.value=0,t.bokeh_uniforms.showFocus.value=0,t.bokeh_uniforms.manualdof.value=0,t.bokeh_uniforms.focusCoords.value.set(.5,.5),t.bokeh_material.defines.RINGS=this.pv.rings,t.bokeh_material.defines.SAMPLES=this.pv.samples,t.bokeh_material.needsUpdate=!0,t.clear_color.copy(this.pv.clearColor)}}const sj={uniforms:{tDiffuse:{value:null},tSize:{value:new d.a(256,256)},center:{value:new d.a(.5,.5)},angle:{value:1.57},scale:{value:1}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform vec2 center;\\\\n\\\\t\\\\tuniform float angle;\\\\n\\\\t\\\\tuniform float scale;\\\\n\\\\t\\\\tuniform vec2 tSize;\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tfloat pattern() {\\\\n\\\\n\\\\t\\\\t\\\\tfloat s = sin( angle ), c = cos( angle );\\\\n\\\\n\\\\t\\\\t\\\\tvec2 tex = vUv * tSize - center;\\\\n\\\\t\\\\t\\\\tvec2 point = vec2( c * tex.x - s * tex.y, s * tex.x + c * tex.y ) * scale;\\\\n\\\\n\\\\t\\\\t\\\\treturn ( sin( point.x ) * sin( point.y ) ) * 4.0;\\\\n\\\\n\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec4 color = texture2D( tDiffuse, vUv );\\\\n\\\\n\\\\t\\\\t\\\\tfloat average = ( color.r + color.g + color.b ) / 3.0;\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor = vec4( vec3( average * 10.0 - 5.0 + pattern() ), color.a );\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};const oj=new class extends aa{constructor(){super(...arguments),this.center=oa.VECTOR2([.5,.5],{...MH}),this.angle=oa.FLOAT(\\\\\\\"$PI*0.5\\\\\\\",{range:[0,10],rangeLocked:[!1,!1],...MH}),this.scale=oa.FLOAT(1,{range:[0,1],rangeLocked:[!1,!1],...MH})}};class aj extends SH{constructor(){super(...arguments),this.paramsConfig=oj}static type(){return\\\\\\\"dotScreen\\\\\\\"}_createPass(t){const e=new Bm(sj);return this.updatePass(e),e}updatePass(t){t.uniforms.center.value=this.pv.center,t.uniforms.angle.value=this.pv.angle,t.uniforms.scale.value=this.pv.scale}}const lj={uniforms:{tDiffuse:{value:null},time:{value:0},nIntensity:{value:.5},sIntensity:{value:.05},sCount:{value:4096},grayscale:{value:1}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\t#include <common>\\\\n\\\\n\\\\t\\\\t// control parameter\\\\n\\\\t\\\\tuniform float time;\\\\n\\\\n\\\\t\\\\tuniform bool grayscale;\\\\n\\\\n\\\\t\\\\t// noise effect intensity value (0 = no effect, 1 = full effect)\\\\n\\\\t\\\\tuniform float nIntensity;\\\\n\\\\n\\\\t\\\\t// scanlines effect intensity value (0 = no effect, 1 = full effect)\\\\n\\\\t\\\\tuniform float sIntensity;\\\\n\\\\n\\\\t\\\\t// scanlines effect count value (0 = no effect, 4096 = full effect)\\\\n\\\\t\\\\tuniform float sCount;\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t// sample the source\\\\n\\\\t\\\\t\\\\tvec4 cTextureScreen = texture2D( tDiffuse, vUv );\\\\n\\\\n\\\\t\\\\t// make some noise\\\\n\\\\t\\\\t\\\\tfloat dx = rand( vUv + time );\\\\n\\\\n\\\\t\\\\t// add noise\\\\n\\\\t\\\\t\\\\tvec3 cResult = cTextureScreen.rgb + cTextureScreen.rgb * clamp( 0.1 + dx, 0.0, 1.0 );\\\\n\\\\n\\\\t\\\\t// get us a sine and cosine\\\\n\\\\t\\\\t\\\\tvec2 sc = vec2( sin( vUv.y * sCount ), cos( vUv.y * sCount ) );\\\\n\\\\n\\\\t\\\\t// add scanlines\\\\n\\\\t\\\\t\\\\tcResult += cTextureScreen.rgb * vec3( sc.x, sc.y, sc.x ) * sIntensity;\\\\n\\\\n\\\\t\\\\t// interpolate between source and result by intensity\\\\n\\\\t\\\\t\\\\tcResult = cTextureScreen.rgb + clamp( nIntensity, 0.0,1.0 ) * ( cResult - cTextureScreen.rgb );\\\\n\\\\n\\\\t\\\\t// convert to grayscale if desired\\\\n\\\\t\\\\t\\\\tif( grayscale ) {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tcResult = vec3( cResult.r * 0.3 + cResult.g * 0.59 + cResult.b * 0.11 );\\\\n\\\\n\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor =  vec4( cResult, cTextureScreen.a );\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};class cj extends Im{constructor(t,e,n,i){super(),void 0===lj&&console.error(\\\\\\\"THREE.FilmPass relies on FilmShader\\\\\\\");const r=lj;this.uniforms=I.clone(r.uniforms),this.material=new F({uniforms:this.uniforms,vertexShader:r.vertexShader,fragmentShader:r.fragmentShader}),void 0!==i&&(this.uniforms.grayscale.value=i),void 0!==t&&(this.uniforms.nIntensity.value=t),void 0!==e&&(this.uniforms.sIntensity.value=e),void 0!==n&&(this.uniforms.sCount.value=n),this.fsQuad=new km(this.material)}render(t,e,n,i){this.uniforms.tDiffuse.value=n.texture,this.uniforms.time.value+=i,this.renderToScreen?(t.setRenderTarget(null),this.fsQuad.render(t)):(t.setRenderTarget(e),this.clear&&t.clear(),this.fsQuad.render(t))}}const uj=new class extends aa{constructor(){super(...arguments),this.noiseIntensity=oa.FLOAT(.5,{range:[0,1],rangeLocked:[!1,!1],...MH}),this.scanlinesIntensity=oa.FLOAT(.05,{range:[0,1],rangeLocked:[!0,!1],...MH}),this.scanlinesCount=oa.FLOAT(4096,{range:[0,4096],rangeLocked:[!0,!1],...MH}),this.grayscale=oa.BOOLEAN(1,{...MH})}};class hj extends SH{constructor(){super(...arguments),this.paramsConfig=uj}static type(){return\\\\\\\"film\\\\\\\"}_createPass(t){const e=new cj(this.pv.noiseIntensity,this.pv.scanlinesIntensity,this.pv.scanlinesCount,this.pv.grayscale?1:0);return this.updatePass(e),e}updatePass(t){t.uniforms.nIntensity.value=this.pv.noiseIntensity,t.uniforms.sIntensity.value=this.pv.scanlinesIntensity,t.uniforms.sCount.value=this.pv.scanlinesCount,t.uniforms.grayscale.value=this.pv.grayscale?1:0}}const dj={uniforms:{tDiffuse:{value:null},resolution:{value:new d.a(1/1024,1/512)}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:'\\\\n\\\\n\\\\t\\\\tprecision highp float;\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\n\\\\t\\\\tuniform vec2 resolution;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\t#define FXAA_PC 1\\\\n\\\\t\\\\t#define FXAA_GLSL_100 1\\\\n\\\\t\\\\t#define FXAA_QUALITY_PRESET 12\\\\n\\\\n\\\\t\\\\t#define FXAA_GREEN_AS_LUMA 1\\\\n\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#ifndef FXAA_PC_CONSOLE\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// The console algorithm for PC is included\\\\n\\\\t\\\\t\\\\t\\\\t// for developers targeting really low spec machines.\\\\n\\\\t\\\\t\\\\t\\\\t// Likely better to just run FXAA_PC, and use a really low preset.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_PC_CONSOLE 0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#ifndef FXAA_GLSL_120\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_GLSL_120 0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#ifndef FXAA_GLSL_130\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_GLSL_130 0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#ifndef FXAA_HLSL_3\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_HLSL_3 0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#ifndef FXAA_HLSL_4\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_HLSL_4 0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#ifndef FXAA_HLSL_5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_HLSL_5 0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*==========================================================================*/\\\\n\\\\t\\\\t#ifndef FXAA_GREEN_AS_LUMA\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// For those using non-linear color,\\\\n\\\\t\\\\t\\\\t\\\\t// and either not able to get luma in alpha, or not wanting to,\\\\n\\\\t\\\\t\\\\t\\\\t// this enables FXAA to run using green as a proxy for luma.\\\\n\\\\t\\\\t\\\\t\\\\t// So with this enabled, no need to pack luma in alpha.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// This will turn off AA on anything which lacks some amount of green.\\\\n\\\\t\\\\t\\\\t\\\\t// Pure red and blue or combination of only R and B, will get no AA.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Might want to lower the settings for both,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t\\\\tfxaaConsoleEdgeThresholdMin\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t\\\\tfxaaQualityEdgeThresholdMin\\\\n\\\\t\\\\t\\\\t\\\\t// In order to insure AA does not get turned off on colors\\\\n\\\\t\\\\t\\\\t\\\\t// which contain a minor amount of green.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// 1 = On.\\\\n\\\\t\\\\t\\\\t\\\\t// 0 = Off.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_GREEN_AS_LUMA 0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#ifndef FXAA_EARLY_EXIT\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Controls algorithm\\\\'s early exit path.\\\\n\\\\t\\\\t\\\\t\\\\t// On PS3 turning this ON adds 2 cycles to the shader.\\\\n\\\\t\\\\t\\\\t\\\\t// On 360 turning this OFF adds 10ths of a millisecond to the shader.\\\\n\\\\t\\\\t\\\\t\\\\t// Turning this off on console will result in a more blurry image.\\\\n\\\\t\\\\t\\\\t\\\\t// So this defaults to on.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// 1 = On.\\\\n\\\\t\\\\t\\\\t\\\\t// 0 = Off.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_EARLY_EXIT 1\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#ifndef FXAA_DISCARD\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Only valid for PC OpenGL currently.\\\\n\\\\t\\\\t\\\\t\\\\t// Probably will not work when FXAA_GREEN_AS_LUMA = 1.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// 1 = Use discard on pixels which don\\\\'t need AA.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t\\\\t For APIs which enable concurrent TEX+ROP from same surface.\\\\n\\\\t\\\\t\\\\t\\\\t// 0 = Return unchanged color on pixels which don\\\\'t need AA.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_DISCARD 0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#ifndef FXAA_FAST_PIXEL_OFFSET\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Used for GLSL 120 only.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// 1 = GL API supports fast pixel offsets\\\\n\\\\t\\\\t\\\\t\\\\t// 0 = do not use fast pixel offsets\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t#ifdef GL_EXT_gpu_shader4\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FXAA_FAST_PIXEL_OFFSET 1\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t#ifdef GL_NV_gpu_shader5\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FXAA_FAST_PIXEL_OFFSET 1\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t#ifdef GL_ARB_gpu_shader5\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FXAA_FAST_PIXEL_OFFSET 1\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t#ifndef FXAA_FAST_PIXEL_OFFSET\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FXAA_FAST_PIXEL_OFFSET 0\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#ifndef FXAA_GATHER4_ALPHA\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// 1 = API supports gather4 on alpha channel.\\\\n\\\\t\\\\t\\\\t\\\\t// 0 = API does not support gather4 on alpha channel.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t#if (FXAA_HLSL_5 == 1)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FXAA_GATHER4_ALPHA 1\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t#ifdef GL_ARB_gpu_shader5\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FXAA_GATHER4_ALPHA 1\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t#ifdef GL_NV_gpu_shader5\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FXAA_GATHER4_ALPHA 1\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t#ifndef FXAA_GATHER4_ALPHA\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FXAA_GATHER4_ALPHA 0\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\n\\\\t\\\\t/*============================================================================\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFXAA QUALITY - TUNING KNOBS\\\\n\\\\t\\\\t------------------------------------------------------------------------------\\\\n\\\\t\\\\tNOTE the other tuning knobs are now in the shader function inputs!\\\\n\\\\t\\\\t============================================================================*/\\\\n\\\\t\\\\t#ifndef FXAA_QUALITY_PRESET\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Choose the quality preset.\\\\n\\\\t\\\\t\\\\t\\\\t// This needs to be compiled into the shader as it effects code.\\\\n\\\\t\\\\t\\\\t\\\\t// Best option to include multiple presets is to\\\\n\\\\t\\\\t\\\\t\\\\t// in each shader define the preset, then include this file.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// OPTIONS\\\\n\\\\t\\\\t\\\\t\\\\t// -----------------------------------------------------------------------\\\\n\\\\t\\\\t\\\\t\\\\t// 10 to 15 - default medium dither (10=fastest, 15=highest quality)\\\\n\\\\t\\\\t\\\\t\\\\t// 20 to 29 - less dither, more expensive (20=fastest, 29=highest quality)\\\\n\\\\t\\\\t\\\\t\\\\t// 39\\\\t\\\\t\\\\t - no dither, very expensive\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// NOTES\\\\n\\\\t\\\\t\\\\t\\\\t// -----------------------------------------------------------------------\\\\n\\\\t\\\\t\\\\t\\\\t// 12 = slightly faster then FXAA 3.9 and higher edge quality (default)\\\\n\\\\t\\\\t\\\\t\\\\t// 13 = about same speed as FXAA 3.9 and better than 12\\\\n\\\\t\\\\t\\\\t\\\\t// 23 = closest to FXAA 3.9 visually and performance wise\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t_ = the lowest digit is directly related to performance\\\\n\\\\t\\\\t\\\\t\\\\t// _\\\\t= the highest digit is directly related to style\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PRESET 12\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\n\\\\t\\\\t/*============================================================================\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t FXAA QUALITY - PRESETS\\\\n\\\\n\\\\t\\\\t============================================================================*/\\\\n\\\\n\\\\t\\\\t/*============================================================================\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t FXAA QUALITY - MEDIUM DITHER PRESETS\\\\n\\\\t\\\\t============================================================================*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 10)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 3\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 3.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 12.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 11)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 4\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 3.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 12.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 12)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 4.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P4 12.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 13)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 6\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P4 4.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P5 12.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 14)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 7\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P4 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P5 4.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P6 12.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 15)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 8\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P4 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P5 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P6 4.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P7 12.0\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\t/*============================================================================\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t FXAA QUALITY - LOW DITHER PRESETS\\\\n\\\\t\\\\t============================================================================*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 20)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 3\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 8.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 21)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 4\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 8.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 22)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P4 8.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 23)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 6\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P4 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P5 8.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 24)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 7\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P4 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P5 3.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P6 8.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 25)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 8\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P4 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P5 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P6 4.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P7 8.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 26)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 9\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P4 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P5 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P6 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P7 4.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P8 8.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 27)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 10\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P4 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P5 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P6 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P7 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P8 4.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P9 8.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 28)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 11\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P4 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P5 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P6 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P7 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P8 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P9 4.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P10 8.0\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 29)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 12\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P4 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P5 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P6 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P7 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P8 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P9 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P10 4.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P11 8.0\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\t/*============================================================================\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t FXAA QUALITY - EXTREME QUALITY\\\\n\\\\t\\\\t============================================================================*/\\\\n\\\\t\\\\t#if (FXAA_QUALITY_PRESET == 39)\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_PS 12\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P0 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P1 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P2 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P3 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P4 1.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P5 1.5\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P6 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P7 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P8 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P9 2.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P10 4.0\\\\n\\\\t\\\\t\\\\t\\\\t#define FXAA_QUALITY_P11 8.0\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\n\\\\n\\\\t\\\\t/*============================================================================\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tAPI PORTING\\\\n\\\\n\\\\t\\\\t============================================================================*/\\\\n\\\\t\\\\t#if (FXAA_GLSL_100 == 1) || (FXAA_GLSL_120 == 1) || (FXAA_GLSL_130 == 1)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaBool bool\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaDiscard discard\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaFloat float\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaFloat2 vec2\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaFloat3 vec3\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaFloat4 vec4\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaHalf float\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaHalf2 vec2\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaHalf3 vec3\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaHalf4 vec4\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaInt2 ivec2\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaSat(x) clamp(x, 0.0, 1.0)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTex sampler2D\\\\n\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaBool bool\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaDiscard clip(-1)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaFloat float\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaFloat2 float2\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaFloat3 float3\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaFloat4 float4\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaHalf half\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaHalf2 half2\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaHalf3 half3\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaHalf4 half4\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaSat(x) saturate(x)\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_GLSL_100 == 1)\\\\n\\\\t\\\\t\\\\t#define FxaaTexTop(t, p) texture2D(t, p, 0.0)\\\\n\\\\t\\\\t\\\\t#define FxaaTexOff(t, p, o, r) texture2D(t, p + (o * r), 0.0)\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_GLSL_120 == 1)\\\\n\\\\t\\\\t\\\\t\\\\t// Requires,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t#version 120\\\\n\\\\t\\\\t\\\\t\\\\t// And at least,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t#extension GL_EXT_gpu_shader4 : enable\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t(or set FXAA_FAST_PIXEL_OFFSET 1 to work like DX9)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTexTop(t, p) texture2DLod(t, p, 0.0)\\\\n\\\\t\\\\t\\\\t\\\\t#if (FXAA_FAST_PIXEL_OFFSET == 1)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FxaaTexOff(t, p, o, r) texture2DLodOffset(t, p, 0.0, o)\\\\n\\\\t\\\\t\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FxaaTexOff(t, p, o, r) texture2DLod(t, p + (o * r), 0.0)\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t#if (FXAA_GATHER4_ALPHA == 1)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t// use #extension GL_ARB_gpu_shader5 : enable\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FxaaTexAlpha4(t, p) textureGather(t, p, 3)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FxaaTexGreen4(t, p) textureGather(t, p, 1)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_GLSL_130 == 1)\\\\n\\\\t\\\\t\\\\t\\\\t// Requires \\\\\\\"#version 130\\\\\\\" or better\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTexTop(t, p) textureLod(t, p, 0.0)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o)\\\\n\\\\t\\\\t\\\\t\\\\t#if (FXAA_GATHER4_ALPHA == 1)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t// use #extension GL_ARB_gpu_shader5 : enable\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FxaaTexAlpha4(t, p) textureGather(t, p, 3)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FxaaTexGreen4(t, p) textureGather(t, p, 1)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_HLSL_3 == 1)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaInt2 float2\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTex sampler2D\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTexTop(t, p) tex2Dlod(t, float4(p, 0.0, 0.0))\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTexOff(t, p, o, r) tex2Dlod(t, float4(p + (o * r), 0, 0))\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_HLSL_4 == 1)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaInt2 int2\\\\n\\\\t\\\\t\\\\t\\\\tstruct FxaaTex { SamplerState smpl; Texture2D tex; };\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)\\\\n\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t#if (FXAA_HLSL_5 == 1)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaInt2 int2\\\\n\\\\t\\\\t\\\\t\\\\tstruct FxaaTex { SamplerState smpl; Texture2D tex; };\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTexAlpha4(t, p) t.tex.GatherAlpha(t.smpl, p)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTexOffAlpha4(t, p, o) t.tex.GatherAlpha(t.smpl, p, o)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTexGreen4(t, p) t.tex.GatherGreen(t.smpl, p)\\\\n\\\\t\\\\t\\\\t\\\\t#define FxaaTexOffGreen4(t, p, o) t.tex.GatherGreen(t.smpl, p, o)\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\n\\\\t\\\\t/*============================================================================\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t GREEN AS LUMA OPTION SUPPORT FUNCTION\\\\n\\\\t\\\\t============================================================================*/\\\\n\\\\t\\\\t#if (FXAA_GREEN_AS_LUMA == 0)\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.w; }\\\\n\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; }\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\n\\\\n\\\\n\\\\t\\\\t/*============================================================================\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t FXAA3 QUALITY - PC\\\\n\\\\n\\\\t\\\\t============================================================================*/\\\\n\\\\t\\\\t#if (FXAA_PC == 1)\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\tFxaaFloat4 FxaaPixelShader(\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Use noperspective interpolation here (turn off perspective interpolation).\\\\n\\\\t\\\\t\\\\t\\\\t// {xy} = center of pixel\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat2 pos,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Used only for FXAA Console, and not used on the 360 version.\\\\n\\\\t\\\\t\\\\t\\\\t// Use noperspective interpolation here (turn off perspective interpolation).\\\\n\\\\t\\\\t\\\\t\\\\t// {xy_} = upper left of pixel\\\\n\\\\t\\\\t\\\\t\\\\t// {_zw} = lower right of pixel\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat4 fxaaConsolePosPos,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Input color texture.\\\\n\\\\t\\\\t\\\\t\\\\t// {rgb_} = color in linear or perceptual color space\\\\n\\\\t\\\\t\\\\t\\\\t// if (FXAA_GREEN_AS_LUMA == 0)\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t\\\\t {__a} = luma in perceptual color space (not linear)\\\\n\\\\t\\\\t\\\\t\\\\tFxaaTex tex,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Only used on the optimized 360 version of FXAA Console.\\\\n\\\\t\\\\t\\\\t\\\\t// For everything but 360, just use the same input here as for \\\\\\\"tex\\\\\\\".\\\\n\\\\t\\\\t\\\\t\\\\t// For 360, same texture, just alias with a 2nd sampler.\\\\n\\\\t\\\\t\\\\t\\\\t// This sampler needs to have an exponent bias of -1.\\\\n\\\\t\\\\t\\\\t\\\\tFxaaTex fxaaConsole360TexExpBiasNegOne,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Only used on the optimized 360 version of FXAA Console.\\\\n\\\\t\\\\t\\\\t\\\\t// For everything but 360, just use the same input here as for \\\\\\\"tex\\\\\\\".\\\\n\\\\t\\\\t\\\\t\\\\t// For 360, same texture, just alias with a 3nd sampler.\\\\n\\\\t\\\\t\\\\t\\\\t// This sampler needs to have an exponent bias of -2.\\\\n\\\\t\\\\t\\\\t\\\\tFxaaTex fxaaConsole360TexExpBiasNegTwo,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Only used on FXAA Quality.\\\\n\\\\t\\\\t\\\\t\\\\t// This must be from a constant/uniform.\\\\n\\\\t\\\\t\\\\t\\\\t// {x_} = 1.0/screenWidthInPixels\\\\n\\\\t\\\\t\\\\t\\\\t// {_y} = 1.0/screenHeightInPixels\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat2 fxaaQualityRcpFrame,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Only used on FXAA Console.\\\\n\\\\t\\\\t\\\\t\\\\t// This must be from a constant/uniform.\\\\n\\\\t\\\\t\\\\t\\\\t// This effects sub-pixel AA quality and inversely sharpness.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t Where N ranges between,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t\\\\t N = 0.50 (default)\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t\\\\t N = 0.33 (sharper)\\\\n\\\\t\\\\t\\\\t\\\\t// {x__} = -N/screenWidthInPixels\\\\n\\\\t\\\\t\\\\t\\\\t// {_y_} = -N/screenHeightInPixels\\\\n\\\\t\\\\t\\\\t\\\\t// {_z_} =\\\\tN/screenWidthInPixels\\\\n\\\\t\\\\t\\\\t\\\\t// {__w} =\\\\tN/screenHeightInPixels\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat4 fxaaConsoleRcpFrameOpt,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Only used on FXAA Console.\\\\n\\\\t\\\\t\\\\t\\\\t// Not used on 360, but used on PS3 and PC.\\\\n\\\\t\\\\t\\\\t\\\\t// This must be from a constant/uniform.\\\\n\\\\t\\\\t\\\\t\\\\t// {x__} = -2.0/screenWidthInPixels\\\\n\\\\t\\\\t\\\\t\\\\t// {_y_} = -2.0/screenHeightInPixels\\\\n\\\\t\\\\t\\\\t\\\\t// {_z_} =\\\\t2.0/screenWidthInPixels\\\\n\\\\t\\\\t\\\\t\\\\t// {__w} =\\\\t2.0/screenHeightInPixels\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat4 fxaaConsoleRcpFrameOpt2,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Only used on FXAA Console.\\\\n\\\\t\\\\t\\\\t\\\\t// Only used on 360 in place of fxaaConsoleRcpFrameOpt2.\\\\n\\\\t\\\\t\\\\t\\\\t// This must be from a constant/uniform.\\\\n\\\\t\\\\t\\\\t\\\\t// {x__} =\\\\t8.0/screenWidthInPixels\\\\n\\\\t\\\\t\\\\t\\\\t// {_y_} =\\\\t8.0/screenHeightInPixels\\\\n\\\\t\\\\t\\\\t\\\\t// {_z_} = -4.0/screenWidthInPixels\\\\n\\\\t\\\\t\\\\t\\\\t// {__w} = -4.0/screenHeightInPixels\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat4 fxaaConsole360RcpFrameOpt2,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Only used on FXAA Quality.\\\\n\\\\t\\\\t\\\\t\\\\t// This used to be the FXAA_QUALITY_SUBPIX define.\\\\n\\\\t\\\\t\\\\t\\\\t// It is here now to allow easier tuning.\\\\n\\\\t\\\\t\\\\t\\\\t// Choose the amount of sub-pixel aliasing removal.\\\\n\\\\t\\\\t\\\\t\\\\t// This can effect sharpness.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 1.00 - upper limit (softer)\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.75 - default amount of filtering\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.50 - lower limit (sharper, less sub-pixel aliasing removal)\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.25 - almost off\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.00 - completely off\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat fxaaQualitySubpix,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Only used on FXAA Quality.\\\\n\\\\t\\\\t\\\\t\\\\t// This used to be the FXAA_QUALITY_EDGE_THRESHOLD define.\\\\n\\\\t\\\\t\\\\t\\\\t// It is here now to allow easier tuning.\\\\n\\\\t\\\\t\\\\t\\\\t// The minimum amount of local contrast required to apply algorithm.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.333 - too little (faster)\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.250 - low quality\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.166 - default\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.125 - high quality\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.063 - overkill (slower)\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat fxaaQualityEdgeThreshold,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Only used on FXAA Quality.\\\\n\\\\t\\\\t\\\\t\\\\t// This used to be the FXAA_QUALITY_EDGE_THRESHOLD_MIN define.\\\\n\\\\t\\\\t\\\\t\\\\t// It is here now to allow easier tuning.\\\\n\\\\t\\\\t\\\\t\\\\t// Trims the algorithm from processing darks.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.0833 - upper limit (default, the start of visible unfiltered edges)\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.0625 - high quality (faster)\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.0312 - visible limit (slower)\\\\n\\\\t\\\\t\\\\t\\\\t// Special notes when using FXAA_GREEN_AS_LUMA,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t Likely want to set this to zero.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t As colors that are mostly not-green\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t will appear very dark in the green channel!\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t Tune by looking at mostly non-green content,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t then start at zero and increase until aliasing is a problem.\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat fxaaQualityEdgeThresholdMin,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Only used on FXAA Console.\\\\n\\\\t\\\\t\\\\t\\\\t// This used to be the FXAA_CONSOLE_EDGE_SHARPNESS define.\\\\n\\\\t\\\\t\\\\t\\\\t// It is here now to allow easier tuning.\\\\n\\\\t\\\\t\\\\t\\\\t// This does not effect PS3, as this needs to be compiled in.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t Use FXAA_CONSOLE_PS3_EDGE_SHARPNESS for PS3.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t Due to the PS3 being ALU bound,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t there are only three safe values here: 2 and 4 and 8.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t These options use the shaders ability to a free *|/ by 2|4|8.\\\\n\\\\t\\\\t\\\\t\\\\t// For all other platforms can be a non-power of two.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 8.0 is sharper (default!!!)\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 4.0 is softer\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 2.0 is really soft (good only for vector graphics inputs)\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat fxaaConsoleEdgeSharpness,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Only used on FXAA Console.\\\\n\\\\t\\\\t\\\\t\\\\t// This used to be the FXAA_CONSOLE_EDGE_THRESHOLD define.\\\\n\\\\t\\\\t\\\\t\\\\t// It is here now to allow easier tuning.\\\\n\\\\t\\\\t\\\\t\\\\t// This does not effect PS3, as this needs to be compiled in.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t Use FXAA_CONSOLE_PS3_EDGE_THRESHOLD for PS3.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t Due to the PS3 being ALU bound,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t there are only two safe values here: 1/4 and 1/8.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t These options use the shaders ability to a free *|/ by 2|4|8.\\\\n\\\\t\\\\t\\\\t\\\\t// The console setting has a different mapping than the quality setting.\\\\n\\\\t\\\\t\\\\t\\\\t// Other platforms can use other values.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.125 leaves less aliasing, but is softer (default!!!)\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.25 leaves more aliasing, and is sharper\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat fxaaConsoleEdgeThreshold,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Only used on FXAA Console.\\\\n\\\\t\\\\t\\\\t\\\\t// This used to be the FXAA_CONSOLE_EDGE_THRESHOLD_MIN define.\\\\n\\\\t\\\\t\\\\t\\\\t// It is here now to allow easier tuning.\\\\n\\\\t\\\\t\\\\t\\\\t// Trims the algorithm from processing darks.\\\\n\\\\t\\\\t\\\\t\\\\t// The console setting has a different mapping than the quality setting.\\\\n\\\\t\\\\t\\\\t\\\\t// This only applies when FXAA_EARLY_EXIT is 1.\\\\n\\\\t\\\\t\\\\t\\\\t// This does not apply to PS3,\\\\n\\\\t\\\\t\\\\t\\\\t// PS3 was simplified to avoid more shader instructions.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.06 - faster but more aliasing in darks\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.05 - default\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t 0.04 - slower and less aliasing in darks\\\\n\\\\t\\\\t\\\\t\\\\t// Special notes when using FXAA_GREEN_AS_LUMA,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t Likely want to set this to zero.\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t As colors that are mostly not-green\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t will appear very dark in the green channel!\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t Tune by looking at mostly non-green content,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\t then start at zero and increase until aliasing is a problem.\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat fxaaConsoleEdgeThresholdMin,\\\\n\\\\t\\\\t\\\\t\\\\t//\\\\n\\\\t\\\\t\\\\t\\\\t// Extra constants for 360 FXAA Console only.\\\\n\\\\t\\\\t\\\\t\\\\t// Use zeros or anything else for other platforms.\\\\n\\\\t\\\\t\\\\t\\\\t// These must be in physical constant registers and NOT immediates.\\\\n\\\\t\\\\t\\\\t\\\\t// Immediates will result in compiler un-optimizing.\\\\n\\\\t\\\\t\\\\t\\\\t// {xyzw} = float4(1.0, -1.0, 0.25, -0.25)\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat4 fxaaConsole360ConstDir\\\\n\\\\t\\\\t) {\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat2 posM;\\\\n\\\\t\\\\t\\\\t\\\\tposM.x = pos.x;\\\\n\\\\t\\\\t\\\\t\\\\tposM.y = pos.y;\\\\n\\\\t\\\\t\\\\t\\\\t#if (FXAA_GATHER4_ALPHA == 1)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_DISCARD == 0)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat4 rgbyM = FxaaTexTop(tex, posM);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_GREEN_AS_LUMA == 0)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define lumaM rgbyM.w\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define lumaM rgbyM.y\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_GREEN_AS_LUMA == 0)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat4 luma4A = FxaaTexAlpha4(tex, posM);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat4 luma4B = FxaaTexOffAlpha4(tex, posM, FxaaInt2(-1, -1));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat4 luma4A = FxaaTexGreen4(tex, posM);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat4 luma4B = FxaaTexOffGreen4(tex, posM, FxaaInt2(-1, -1));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_DISCARD == 1)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define lumaM luma4A.w\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define lumaE luma4A.z\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define lumaS luma4A.x\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define lumaSE luma4A.y\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define lumaNW luma4B.w\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define lumaN luma4B.z\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define lumaW luma4B.x\\\\n\\\\t\\\\t\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat4 rgbyM = FxaaTexTop(tex, posM);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_GREEN_AS_LUMA == 0)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define lumaM rgbyM.w\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#define lumaM rgbyM.y\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_GLSL_100 == 1)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 0.0, 1.0), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0, 0.0), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 0.0,-1.0), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0, 0.0), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0, 1), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 0), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0,-1), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 0), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat maxSM = max(lumaS, lumaM);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat minSM = min(lumaS, lumaM);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat maxESM = max(lumaE, maxSM);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat minESM = min(lumaE, minSM);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat maxWN = max(lumaN, lumaW);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat minWN = min(lumaN, lumaW);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat rangeMax = max(maxWN, maxESM);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat rangeMin = min(minWN, minESM);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat range = rangeMax - rangeMin;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaBool earlyExit = range < rangeMaxClamped;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tif(earlyExit)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_DISCARD == 1)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaDiscard;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\treturn rgbyM;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t#if (FXAA_GATHER4_ALPHA == 0)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_GLSL_100 == 1)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0,-1.0), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0, 1.0), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0,-1.0), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0, 1.0), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1,-1), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 1), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1,-1), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(1, -1), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaNS = lumaN + lumaS;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaWE = lumaW + lumaE;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat subpixRcpRange = 1.0/range;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat subpixNSWE = lumaNS + lumaWE;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat edgeHorz1 = (-2.0 * lumaM) + lumaNS;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat edgeVert1 = (-2.0 * lumaM) + lumaWE;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaNESE = lumaNE + lumaSE;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaNWNE = lumaNW + lumaNE;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat edgeHorz2 = (-2.0 * lumaE) + lumaNESE;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat edgeVert2 = (-2.0 * lumaN) + lumaNWNE;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaNWSW = lumaNW + lumaSW;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaSWSE = lumaSW + lumaSE;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat edgeVert3 = (-2.0 * lumaS) + lumaSWSE;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat edgeHorz = abs(edgeHorz3) + edgeHorz4;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat edgeVert = abs(edgeVert3) + edgeVert4;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat subpixNWSWNESE = lumaNWSW + lumaNESE;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat lengthSign = fxaaQualityRcpFrame.x;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaBool horzSpan = edgeHorz >= edgeVert;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tif(!horzSpan) lumaN = lumaW;\\\\n\\\\t\\\\t\\\\t\\\\tif(!horzSpan) lumaS = lumaE;\\\\n\\\\t\\\\t\\\\t\\\\tif(horzSpan) lengthSign = fxaaQualityRcpFrame.y;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat subpixB = (subpixA * (1.0/12.0)) - lumaM;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat gradientN = lumaN - lumaM;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat gradientS = lumaS - lumaM;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaNN = lumaN + lumaM;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaSS = lumaS + lumaM;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaBool pairN = abs(gradientN) >= abs(gradientS);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat gradient = max(abs(gradientN), abs(gradientS));\\\\n\\\\t\\\\t\\\\t\\\\tif(pairN) lengthSign = -lengthSign;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat subpixC = FxaaSat(abs(subpixB) * subpixRcpRange);\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat2 posB;\\\\n\\\\t\\\\t\\\\t\\\\tposB.x = posM.x;\\\\n\\\\t\\\\t\\\\t\\\\tposB.y = posM.y;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat2 offNP;\\\\n\\\\t\\\\t\\\\t\\\\toffNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;\\\\n\\\\t\\\\t\\\\t\\\\toffNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;\\\\n\\\\t\\\\t\\\\t\\\\tif(!horzSpan) posB.x += lengthSign * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\tif( horzSpan) posB.y += lengthSign * 0.5;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat2 posN;\\\\n\\\\t\\\\t\\\\t\\\\tposN.x = posB.x - offNP.x * FXAA_QUALITY_P0;\\\\n\\\\t\\\\t\\\\t\\\\tposN.y = posB.y - offNP.y * FXAA_QUALITY_P0;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat2 posP;\\\\n\\\\t\\\\t\\\\t\\\\tposP.x = posB.x + offNP.x * FXAA_QUALITY_P0;\\\\n\\\\t\\\\t\\\\t\\\\tposP.y = posB.y + offNP.y * FXAA_QUALITY_P0;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat subpixD = ((-2.0)*subpixC) + 3.0;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaEndN = FxaaLuma(FxaaTexTop(tex, posN));\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat subpixE = subpixC * subpixC;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaEndP = FxaaLuma(FxaaTexTop(tex, posP));\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tif(!pairN) lumaNN = lumaSS;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat gradientScaled = gradient * 1.0/4.0;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat lumaMM = lumaM - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat subpixF = subpixD * subpixE;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaBool lumaMLTZero = lumaMM < 0.0;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tlumaEndN -= lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\tlumaEndP -= lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaBool doneN = abs(lumaEndN) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaBool doneP = abs(lumaEndP) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P1;\\\\n\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P1;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaBool doneNP = (!doneN) || (!doneP);\\\\n\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P1;\\\\n\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P1;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tif(doneNP) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneN = abs(lumaEndN) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneP = abs(lumaEndP) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P2;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P2;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneNP = (!doneN) || (!doneP);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P2;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P2;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_QUALITY_PS > 3)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(doneNP) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneN = abs(lumaEndN) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneP = abs(lumaEndP) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P3;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P3;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneNP = (!doneN) || (!doneP);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P3;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P3;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_QUALITY_PS > 4)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(doneNP) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneN = abs(lumaEndN) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneP = abs(lumaEndP) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P4;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P4;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneNP = (!doneN) || (!doneP);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P4;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P4;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_QUALITY_PS > 5)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(doneNP) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneN = abs(lumaEndN) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneP = abs(lumaEndP) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneNP = (!doneN) || (!doneP);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P5;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_QUALITY_PS > 6)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(doneNP) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneN = abs(lumaEndN) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneP = abs(lumaEndP) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P6;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P6;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneNP = (!doneN) || (!doneP);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P6;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P6;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_QUALITY_PS > 7)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(doneNP) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneN = abs(lumaEndN) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneP = abs(lumaEndP) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P7;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P7;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneNP = (!doneN) || (!doneP);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P7;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P7;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t#if (FXAA_QUALITY_PS > 8)\\\\n\\\\t\\\\t\\\\t\\\\tif(doneNP) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneN = abs(lumaEndN) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneP = abs(lumaEndP) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P8;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P8;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneNP = (!doneN) || (!doneP);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P8;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P8;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_QUALITY_PS > 9)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(doneNP) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneN = abs(lumaEndN) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneP = abs(lumaEndP) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P9;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P9;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneNP = (!doneN) || (!doneP);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P9;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P9;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_QUALITY_PS > 10)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(doneNP) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneN = abs(lumaEndN) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneP = abs(lumaEndP) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P10;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P10;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneNP = (!doneN) || (!doneP);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P10;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P10;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_QUALITY_PS > 11)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(doneNP) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneN = abs(lumaEndN) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneP = abs(lumaEndP) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P11;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P11;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneNP = (!doneN) || (!doneP);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P11;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P11;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#if (FXAA_QUALITY_PS > 12)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(doneNP) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneN = abs(lumaEndN) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneP = abs(lumaEndP) >= gradientScaled;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P12;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P12;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdoneNP = (!doneN) || (!doneP);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.x += offNP.x * FXAA_QUALITY_P12;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tif(!doneP) posP.y += offNP.y * FXAA_QUALITY_P12;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat dstN = posM.x - posN.x;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat dstP = posP.x - posM.x;\\\\n\\\\t\\\\t\\\\t\\\\tif(!horzSpan) dstN = posM.y - posN.y;\\\\n\\\\t\\\\t\\\\t\\\\tif(!horzSpan) dstP = posP.y - posM.y;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tFxaaBool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat spanLength = (dstP + dstN);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaBool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat spanLengthRcp = 1.0/spanLength;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tFxaaBool directionN = dstN < dstP;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat dst = min(dstN, dstP);\\\\n\\\\t\\\\t\\\\t\\\\tFxaaBool goodSpan = directionN ? goodSpanN : goodSpanP;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat subpixG = subpixF * subpixF;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat pixelOffset = (dst * (-spanLengthRcp)) + 0.5;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat subpixH = subpixG * fxaaQualitySubpix;\\\\n\\\\t\\\\t/*--------------------------------------------------------------------------*/\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat pixelOffsetGood = goodSpan ? pixelOffset : 0.0;\\\\n\\\\t\\\\t\\\\t\\\\tFxaaFloat pixelOffsetSubpix = max(pixelOffsetGood, subpixH);\\\\n\\\\t\\\\t\\\\t\\\\tif(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign;\\\\n\\\\t\\\\t\\\\t\\\\tif( horzSpan) posM.y += pixelOffsetSubpix * lengthSign;\\\\n\\\\t\\\\t\\\\t\\\\t#if (FXAA_DISCARD == 1)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\treturn FxaaTexTop(tex, posM);\\\\n\\\\t\\\\t\\\\t\\\\t#else\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\treturn FxaaFloat4(FxaaTexTop(tex, posM).xyz, lumaM);\\\\n\\\\t\\\\t\\\\t\\\\t#endif\\\\n\\\\t\\\\t}\\\\n\\\\t\\\\t/*==========================================================================*/\\\\n\\\\t\\\\t#endif\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\tgl_FragColor = FxaaPixelShader(\\\\n\\\\t\\\\t\\\\t\\\\tvUv,\\\\n\\\\t\\\\t\\\\t\\\\tvec4(0.0),\\\\n\\\\t\\\\t\\\\t\\\\ttDiffuse,\\\\n\\\\t\\\\t\\\\t\\\\ttDiffuse,\\\\n\\\\t\\\\t\\\\t\\\\ttDiffuse,\\\\n\\\\t\\\\t\\\\t\\\\tresolution,\\\\n\\\\t\\\\t\\\\t\\\\tvec4(0.0),\\\\n\\\\t\\\\t\\\\t\\\\tvec4(0.0),\\\\n\\\\t\\\\t\\\\t\\\\tvec4(0.0),\\\\n\\\\t\\\\t\\\\t\\\\t0.75,\\\\n\\\\t\\\\t\\\\t\\\\t0.166,\\\\n\\\\t\\\\t\\\\t\\\\t0.0833,\\\\n\\\\t\\\\t\\\\t\\\\t0.0,\\\\n\\\\t\\\\t\\\\t\\\\t0.0,\\\\n\\\\t\\\\t\\\\t\\\\t0.0,\\\\n\\\\t\\\\t\\\\t\\\\tvec4(0.0)\\\\n\\\\t\\\\t\\\\t);\\\\n\\\\n\\\\t\\\\t\\\\t// TODO avoid querying texture twice for same texel\\\\n\\\\t\\\\t\\\\tgl_FragColor.a = texture2D(tDiffuse, vUv).a;\\\\n\\\\t\\\\t}'};const pj=new class extends aa{constructor(){super(...arguments),this.transparent=oa.BOOLEAN(1,MH)}};class _j extends SH{constructor(){super(...arguments),this.paramsConfig=pj}static type(){return\\\\\\\"FXAA\\\\\\\"}_createPass(t){const e=new Bm(dj);return e.uniforms.resolution.value.set(1/t.resolution.x,1/t.resolution.y),e.material.transparent=!0,this.updatePass(e),e}updatePass(t){t.material.transparent=this.pv.transparent}}const mj={uniforms:{tDiffuse:{value:null}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec4 tex = texture2D( tDiffuse, vUv );\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor = LinearTosRGB( tex ); // optional: LinearToGamma( tex, float( GAMMA_FACTOR ) );\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};const fj=new class extends aa{};class gj extends SH{constructor(){super(...arguments),this.paramsConfig=fj}static type(){return\\\\\\\"gammaCorrection\\\\\\\"}_createPass(t){const e=new Bm(mj);return this.updatePass(e),e}updatePass(t){}}const vj=new class extends aa{constructor(){super(...arguments),this.amount=oa.FLOAT(2,{range:[0,10],rangeLocked:[!0,!1],step:.01,...MH}),this.transparent=oa.BOOLEAN(1,MH)}};class yj extends SH{constructor(){super(...arguments),this.paramsConfig=vj}static type(){return\\\\\\\"horizontalBlur\\\\\\\"}_createPass(t){const e=new Bm(IU);return e.resolution_x=t.resolution.x,this.updatePass(e),e}updatePass(t){t.uniforms.h.value=this.pv.amount/(t.resolution_x*window.devicePixelRatio),t.material.transparent=this.pv.transparent}}const xj=new class extends aa{constructor(){super(...arguments),this.map=oa.OPERATOR_PATH(gi.UV,{nodeSelection:{context:Ki.COP},...MH}),this.darkness=oa.FLOAT(0,{range:[0,2],rangeLocked:[!0,!1],...MH}),this.offset=oa.FLOAT(0,{range:[0,2],rangeLocked:[!0,!1],...MH})}};class bj extends SH{constructor(){super(...arguments),this.paramsConfig=xj}static type(){return\\\\\\\"image\\\\\\\"}static _create_shader(){return{uniforms:{tDiffuse:{value:null},map:{value:null},offset:{value:1},darkness:{value:1}},vertexShader:\\\\\\\"varying vec2 vUv;\\\\nvoid main() {\\\\n\\\\tvUv = uv;\\\\n\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n}\\\\\\\",fragmentShader:\\\\\\\"uniform float offset;\\\\nuniform float darkness;\\\\nuniform sampler2D tDiffuse;\\\\nuniform sampler2D map;\\\\nvarying vec2 vUv;\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvec4 texel = texture2D( tDiffuse, vUv );\\\\n\\\\tvec4 map_val = texture2D( map, vUv );\\\\n\\\\tvec2 uv = ( vUv - vec2( 0.5 ) ) * vec2( offset );\\\\n\\\\t// gl_FragColor = vec4( mix( texel.rgb, vec3( 1.0 - darkness ), dot( uv, uv ) ), texel.a );\\\\n\\\\tgl_FragColor = vec4( mix( texel.rgb, map_val.rgb, map_val.a ), texel.a );\\\\n\\\\n}\\\\n\\\\\\\"}}_createPass(t){const e=new Bm(bj._create_shader());return this.updatePass(e),e}updatePass(t){t.uniforms.darkness.value=this.pv.darkness,t.uniforms.offset.value=this.pv.offset,this._update_map(t)}async _update_map(t){this.p.map.isDirty()&&await this.p.map.compute();const e=this.p.map.found_node();if(e)if(e.context()==Ki.COP){const n=e,i=(await n.compute()).coreContent();t.uniforms.map.value=i}else this.states.error.set(\\\\\\\"node is not COP\\\\\\\");else this.states.error.set(\\\\\\\"no map found\\\\\\\")}}const wj={tDiffuse:{value:null},texture1:{value:null},texture2:{value:null},h:{value:1/512}},Tj=\\\\\\\"varying vec2 vUv;\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvUv = uv;\\\\n\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n}\\\\\\\",Aj=\\\\\\\"uniform sampler2D texture1;\\\\nuniform sampler2D texture2;\\\\nvarying vec2 vUv;\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvec4 t1 = texture2D( texture1, vUv);\\\\n\\\\tvec4 t2 = texture2D( texture2, vUv);\\\\n\\\\n\\\\tvec3 c1 = t1.rgb * t1.a * (1.0-t2.a);\\\\n\\\\tvec3 c2 = t2.rgb * t2.a;\\\\n\\\\tfloat a = t2.a + t1.a;\\\\n\\\\tvec3 c = max(c1,c2);\\\\n\\\\n\\\\tgl_FragColor = vec4(c,a);\\\\n\\\\n}\\\\\\\";class Ej extends Im{constructor(t,e){super(),this._composer1=t,this._composer2=e,this.uniforms=I.clone(wj),this.material=new F({uniforms:this.uniforms,vertexShader:Tj,fragmentShader:Aj,transparent:!0}),this.fsQuad=new km(this.material)}render(t,e){this._composer1.render(),this._composer2.render(),this.uniforms.texture1.value=this._composer1.readBuffer.texture,this.uniforms.texture2.value=this._composer2.readBuffer.texture,this.renderToScreen?(t.setRenderTarget(null),this.fsQuad.render(t)):(t.setRenderTarget(e),this.clear&&t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),this.fsQuad.render(t))}}const Mj=new class extends aa{};class Sj extends SH{constructor(){super(...arguments),this.paramsConfig=Mj}static type(){return\\\\\\\"layer\\\\\\\"}initializeNode(){super.initializeNode(),this.io.inputs.setCount(2)}setupComposer(t){const e=t.composer.renderer,n={minFilter:w.V,magFilter:w.V,format:w.Ib,stencilBuffer:!0},i=ai.renderersController.renderTarget(e.domElement.offsetWidth,e.domElement.offsetHeight,n),r=ai.renderersController.renderTarget(e.domElement.offsetWidth,e.domElement.offsetHeight,n),s=new Gm(e,i),o=new Gm(e,r);s.renderToScreen=!1,o.renderToScreen=!1;const a={...t},l={...t};a.composer=s,l.composer=o,this._addPassFromInput(0,a),this._addPassFromInput(1,l);const c=new Ej(s,o);this.updatePass(c),t.composer.addPass(c)}updatePass(t){}}const Cj=new class extends aa{constructor(){super(...arguments),this.overrideScene=oa.BOOLEAN(0,MH),this.scene=oa.OPERATOR_PATH(\\\\\\\"/scene1\\\\\\\",{visibleIf:{overrideScene:1},nodeSelection:{context:Ki.OBJ,types:[ZG.type()]},...MH}),this.overrideCamera=oa.BOOLEAN(0,MH),this.camera=oa.OPERATOR_PATH(\\\\\\\"/perspective_camera1\\\\\\\",{visibleIf:{overrideCamera:1},nodeSelection:{context:Ki.OBJ},...MH}),this.inverse=oa.BOOLEAN(0,MH)}};class Nj extends SH{constructor(){super(...arguments),this.paramsConfig=Cj}static type(){return\\\\\\\"mask\\\\\\\"}_createPass(t){const e=new zm(t.scene,t.camera);return e.context={scene:t.scene,camera:t.camera},this.updatePass(e),e}updatePass(t){t.inverse=this.pv.inverse,this._update_scene(t),this._updateCamera(t)}async _update_scene(t){if(this.pv.overrideScene){this.p.scene.isDirty()&&await this.p.scene.compute();const e=this.p.scene.found_node_with_expected_type();if(e)return void(t.scene=e.object)}t.scene=t.context.scene}async _updateCamera(t){if(this.pv.overrideCamera){this.p.camera.isDirty()&&await this.p.camera.compute();const e=this.p.camera.found_node_with_expected_type();if(e)return void(t.camera=e.object)}t.camera=t.context.camera}}const Lj=new class extends aa{};class Oj extends SH{constructor(){super(...arguments),this.paramsConfig=Lj}static type(){return\\\\\\\"null\\\\\\\"}}class Rj extends Im{constructor(t,e,n,i){super(),this.renderScene=e,this.renderCamera=n,this.selectedObjects=void 0!==i?i:[],this.visibleEdgeColor=new D.a(1,1,1),this.hiddenEdgeColor=new D.a(.1,.04,.02),this.edgeGlow=0,this.usePatternTexture=!1,this.edgeThickness=1,this.edgeStrength=3,this.downSampleRatio=2,this.pulsePeriod=0,this._visibilityCache=new Map,this.resolution=void 0!==t?new d.a(t.x,t.y):new d.a(256,256);const r={minFilter:w.V,magFilter:w.V,format:w.Ib},s=Math.round(this.resolution.x/this.downSampleRatio),o=Math.round(this.resolution.y/this.downSampleRatio);this.maskBufferMaterial=new at.a({color:16777215}),this.maskBufferMaterial.side=w.z,this.renderTargetMaskBuffer=new Z(this.resolution.x,this.resolution.y,r),this.renderTargetMaskBuffer.texture.name=\\\\\\\"OutlinePass.mask\\\\\\\",this.renderTargetMaskBuffer.texture.generateMipmaps=!1,this.depthMaterial=new Mn,this.depthMaterial.side=w.z,this.depthMaterial.depthPacking=w.Hb,this.depthMaterial.blending=w.ub,this.prepareMaskMaterial=this.getPrepareMaskMaterial(),this.prepareMaskMaterial.side=w.z,this.prepareMaskMaterial.fragmentShader=function(t,e){var n=e.isPerspectiveCamera?\\\\\\\"perspective\\\\\\\":\\\\\\\"orthographic\\\\\\\";return t.replace(/DEPTH_TO_VIEW_Z/g,n+\\\\\\\"DepthToViewZ\\\\\\\")}(this.prepareMaskMaterial.fragmentShader,this.renderCamera),this.renderTargetDepthBuffer=new Z(this.resolution.x,this.resolution.y,r),this.renderTargetDepthBuffer.texture.name=\\\\\\\"OutlinePass.depth\\\\\\\",this.renderTargetDepthBuffer.texture.generateMipmaps=!1,this.renderTargetMaskDownSampleBuffer=new Z(s,o,r),this.renderTargetMaskDownSampleBuffer.texture.name=\\\\\\\"OutlinePass.depthDownSample\\\\\\\",this.renderTargetMaskDownSampleBuffer.texture.generateMipmaps=!1,this.renderTargetBlurBuffer1=new Z(s,o,r),this.renderTargetBlurBuffer1.texture.name=\\\\\\\"OutlinePass.blur1\\\\\\\",this.renderTargetBlurBuffer1.texture.generateMipmaps=!1,this.renderTargetBlurBuffer2=new Z(Math.round(s/2),Math.round(o/2),r),this.renderTargetBlurBuffer2.texture.name=\\\\\\\"OutlinePass.blur2\\\\\\\",this.renderTargetBlurBuffer2.texture.generateMipmaps=!1,this.edgeDetectionMaterial=this.getEdgeDetectionMaterial(),this.renderTargetEdgeBuffer1=new Z(s,o,r),this.renderTargetEdgeBuffer1.texture.name=\\\\\\\"OutlinePass.edge1\\\\\\\",this.renderTargetEdgeBuffer1.texture.generateMipmaps=!1,this.renderTargetEdgeBuffer2=new Z(Math.round(s/2),Math.round(o/2),r),this.renderTargetEdgeBuffer2.texture.name=\\\\\\\"OutlinePass.edge2\\\\\\\",this.renderTargetEdgeBuffer2.texture.generateMipmaps=!1;this.separableBlurMaterial1=this.getSeperableBlurMaterial(4),this.separableBlurMaterial1.uniforms.texSize.value.set(s,o),this.separableBlurMaterial1.uniforms.kernelRadius.value=1,this.separableBlurMaterial2=this.getSeperableBlurMaterial(4),this.separableBlurMaterial2.uniforms.texSize.value.set(Math.round(s/2),Math.round(o/2)),this.separableBlurMaterial2.uniforms.kernelRadius.value=4,this.overlayMaterial=this.getOverlayMaterial(),void 0===Pm&&console.error(\\\\\\\"THREE.OutlinePass relies on CopyShader\\\\\\\");const a=Pm;this.copyUniforms=I.clone(a.uniforms),this.copyUniforms.opacity.value=1,this.materialCopy=new F({uniforms:this.copyUniforms,vertexShader:a.vertexShader,fragmentShader:a.fragmentShader,blending:w.ub,depthTest:!1,depthWrite:!1,transparent:!0}),this.enabled=!0,this.needsSwap=!1,this._oldClearColor=new D.a,this.oldClearAlpha=1,this.fsQuad=new km(null),this.tempPulseColor1=new D.a,this.tempPulseColor2=new D.a,this.textureMatrix=new A.a}dispose(){this.renderTargetMaskBuffer.dispose(),this.renderTargetDepthBuffer.dispose(),this.renderTargetMaskDownSampleBuffer.dispose(),this.renderTargetBlurBuffer1.dispose(),this.renderTargetBlurBuffer2.dispose(),this.renderTargetEdgeBuffer1.dispose(),this.renderTargetEdgeBuffer2.dispose()}setSize(t,e){this.renderTargetMaskBuffer.setSize(t,e),this.renderTargetDepthBuffer.setSize(t,e);let n=Math.round(t/this.downSampleRatio),i=Math.round(e/this.downSampleRatio);this.renderTargetMaskDownSampleBuffer.setSize(n,i),this.renderTargetBlurBuffer1.setSize(n,i),this.renderTargetEdgeBuffer1.setSize(n,i),this.separableBlurMaterial1.uniforms.texSize.value.set(n,i),n=Math.round(n/2),i=Math.round(i/2),this.renderTargetBlurBuffer2.setSize(n,i),this.renderTargetEdgeBuffer2.setSize(n,i),this.separableBlurMaterial2.uniforms.texSize.value.set(n,i)}changeVisibilityOfSelectedObjects(t){const e=this._visibilityCache;function n(n){n.isMesh&&(!0===t?n.visible=e.get(n):(e.set(n,n.visible),n.visible=t))}for(let t=0;t<this.selectedObjects.length;t++){this.selectedObjects[t].traverse(n)}}changeVisibilityOfNonSelectedObjects(t){const e=this._visibilityCache,n=[];function i(t){t.isMesh&&n.push(t)}for(let t=0;t<this.selectedObjects.length;t++){this.selectedObjects[t].traverse(i)}this.renderScene.traverse((function(i){if(i.isMesh||i.isSprite){let r=!1;for(let t=0;t<n.length;t++){if(n[t].id===i.id){r=!0;break}}if(!1===r){const n=i.visible;!1!==t&&!0!==e.get(i)||(i.visible=t),e.set(i,n)}}else(i.isPoints||i.isLine)&&(!0===t?i.visible=e.get(i):(e.set(i,i.visible),i.visible=t))}))}updateTextureMatrix(){this.textureMatrix.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),this.textureMatrix.multiply(this.renderCamera.projectionMatrix),this.textureMatrix.multiply(this.renderCamera.matrixWorldInverse)}render(t,e,n,i,r){if(this.selectedObjects.length>0){t.getClearColor(this._oldClearColor),this.oldClearAlpha=t.getClearAlpha();const e=t.autoClear;t.autoClear=!1,r&&t.state.buffers.stencil.setTest(!1),t.setClearColor(16777215,1),this.changeVisibilityOfSelectedObjects(!1);const i=this.renderScene.background;if(this.renderScene.background=null,this.renderScene.overrideMaterial=this.depthMaterial,t.setRenderTarget(this.renderTargetDepthBuffer),t.clear(),t.render(this.renderScene,this.renderCamera),this.changeVisibilityOfSelectedObjects(!0),this._visibilityCache.clear(),this.updateTextureMatrix(),this.changeVisibilityOfNonSelectedObjects(!1),this.renderScene.overrideMaterial=this.prepareMaskMaterial,this.prepareMaskMaterial.uniforms.cameraNearFar.value.set(this.renderCamera.near,this.renderCamera.far),this.prepareMaskMaterial.uniforms.depthTexture.value=this.renderTargetDepthBuffer.texture,this.prepareMaskMaterial.uniforms.textureMatrix.value=this.textureMatrix,t.setRenderTarget(this.renderTargetMaskBuffer),t.clear(),t.render(this.renderScene,this.renderCamera),this.renderScene.overrideMaterial=null,this.changeVisibilityOfNonSelectedObjects(!0),this._visibilityCache.clear(),this.renderScene.background=i,this.fsQuad.material=this.materialCopy,this.copyUniforms.tDiffuse.value=this.renderTargetMaskBuffer.texture,t.setRenderTarget(this.renderTargetMaskDownSampleBuffer),t.clear(),this.fsQuad.render(t),this.tempPulseColor1.copy(this.visibleEdgeColor),this.tempPulseColor2.copy(this.hiddenEdgeColor),this.pulsePeriod>0){const t=.625+.75*Math.cos(.01*performance.now()/this.pulsePeriod)/2;this.tempPulseColor1.multiplyScalar(t),this.tempPulseColor2.multiplyScalar(t)}this.fsQuad.material=this.edgeDetectionMaterial,this.edgeDetectionMaterial.uniforms.maskTexture.value=this.renderTargetMaskDownSampleBuffer.texture,this.edgeDetectionMaterial.uniforms.texSize.value.set(this.renderTargetMaskDownSampleBuffer.width,this.renderTargetMaskDownSampleBuffer.height),this.edgeDetectionMaterial.uniforms.visibleEdgeColor.value=this.tempPulseColor1,this.edgeDetectionMaterial.uniforms.hiddenEdgeColor.value=this.tempPulseColor2,t.setRenderTarget(this.renderTargetEdgeBuffer1),t.clear(),this.fsQuad.render(t),this.fsQuad.material=this.separableBlurMaterial1,this.separableBlurMaterial1.uniforms.colorTexture.value=this.renderTargetEdgeBuffer1.texture,this.separableBlurMaterial1.uniforms.direction.value=Rj.BlurDirectionX,this.separableBlurMaterial1.uniforms.kernelRadius.value=this.edgeThickness,t.setRenderTarget(this.renderTargetBlurBuffer1),t.clear(),this.fsQuad.render(t),this.separableBlurMaterial1.uniforms.colorTexture.value=this.renderTargetBlurBuffer1.texture,this.separableBlurMaterial1.uniforms.direction.value=Rj.BlurDirectionY,t.setRenderTarget(this.renderTargetEdgeBuffer1),t.clear(),this.fsQuad.render(t),this.fsQuad.material=this.separableBlurMaterial2,this.separableBlurMaterial2.uniforms.colorTexture.value=this.renderTargetEdgeBuffer1.texture,this.separableBlurMaterial2.uniforms.direction.value=Rj.BlurDirectionX,t.setRenderTarget(this.renderTargetBlurBuffer2),t.clear(),this.fsQuad.render(t),this.separableBlurMaterial2.uniforms.colorTexture.value=this.renderTargetBlurBuffer2.texture,this.separableBlurMaterial2.uniforms.direction.value=Rj.BlurDirectionY,t.setRenderTarget(this.renderTargetEdgeBuffer2),t.clear(),this.fsQuad.render(t),this.fsQuad.material=this.overlayMaterial,this.overlayMaterial.uniforms.maskTexture.value=this.renderTargetMaskBuffer.texture,this.overlayMaterial.uniforms.edgeTexture1.value=this.renderTargetEdgeBuffer1.texture,this.overlayMaterial.uniforms.edgeTexture2.value=this.renderTargetEdgeBuffer2.texture,this.overlayMaterial.uniforms.patternTexture.value=this.patternTexture,this.overlayMaterial.uniforms.edgeStrength.value=this.edgeStrength,this.overlayMaterial.uniforms.edgeGlow.value=this.edgeGlow,this.overlayMaterial.uniforms.usePatternTexture.value=this.usePatternTexture,r&&t.state.buffers.stencil.setTest(!0),t.setRenderTarget(n),this.fsQuad.render(t),t.setClearColor(this._oldClearColor,this.oldClearAlpha),t.autoClear=e}this.renderToScreen&&(this.fsQuad.material=this.materialCopy,this.copyUniforms.tDiffuse.value=n.texture,t.setRenderTarget(null),this.fsQuad.render(t))}getPrepareMaskMaterial(){return new F({uniforms:{depthTexture:{value:null},cameraNearFar:{value:new d.a(.5,.5)},textureMatrix:{value:null}},vertexShader:\\\\\\\"#include <morphtarget_pars_vertex>\\\\n\\\\t\\\\t\\\\t\\\\t#include <skinning_pars_vertex>\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvarying vec4 projTexCoord;\\\\n\\\\t\\\\t\\\\t\\\\tvarying vec4 vPosition;\\\\n\\\\t\\\\t\\\\t\\\\tuniform mat4 textureMatrix;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t#include <skinbase_vertex>\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t#include <begin_vertex>\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t#include <morphtarget_vertex>\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t#include <skinning_vertex>\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t#include <project_vertex>\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvPosition = mvPosition;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tprojTexCoord = textureMatrix * worldPosition;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"#include <packing>\\\\n\\\\t\\\\t\\\\t\\\\tvarying vec4 vPosition;\\\\n\\\\t\\\\t\\\\t\\\\tvarying vec4 projTexCoord;\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D depthTexture;\\\\n\\\\t\\\\t\\\\t\\\\tuniform vec2 cameraNearFar;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat depth = unpackRGBAToDepth(texture2DProj( depthTexture, projTexCoord ));\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat viewZ = - DEPTH_TO_VIEW_Z( depth, cameraNearFar.x, cameraNearFar.y );\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat depthTest = (-vPosition.z > viewZ) ? 1.0 : 0.0;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_FragColor = vec4(0.0, depthTest, 1.0, 1.0);\\\\n\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\"})}getEdgeDetectionMaterial(){return new F({uniforms:{maskTexture:{value:null},texSize:{value:new d.a(.5,.5)},visibleEdgeColor:{value:new p.a(1,1,1)},hiddenEdgeColor:{value:new p.a(1,1,1)}},vertexShader:\\\\\\\"varying vec2 vUv;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"varying vec2 vUv;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D maskTexture;\\\\n\\\\t\\\\t\\\\t\\\\tuniform vec2 texSize;\\\\n\\\\t\\\\t\\\\t\\\\tuniform vec3 visibleEdgeColor;\\\\n\\\\t\\\\t\\\\t\\\\tuniform vec3 hiddenEdgeColor;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec2 invSize = 1.0 / texSize;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 uvOffset = vec4(1.0, 0.0, 0.0, 1.0) * vec4(invSize, invSize);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 c1 = texture2D( maskTexture, vUv + uvOffset.xy);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 c2 = texture2D( maskTexture, vUv - uvOffset.xy);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 c3 = texture2D( maskTexture, vUv + uvOffset.yw);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 c4 = texture2D( maskTexture, vUv - uvOffset.yw);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat diff1 = (c1.r - c2.r)*0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat diff2 = (c3.r - c4.r)*0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat d = length( vec2(diff1, diff2) );\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat a1 = min(c1.g, c2.g);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat a2 = min(c3.g, c4.g);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat visibilityFactor = min(a1, a2);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec3 edgeColor = 1.0 - visibilityFactor > 0.001 ? visibleEdgeColor : hiddenEdgeColor;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_FragColor = vec4(edgeColor, 1.0) * vec4(d);\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\"})}getSeperableBlurMaterial(t){return new F({defines:{MAX_RADIUS:t},uniforms:{colorTexture:{value:null},texSize:{value:new d.a(.5,.5)},direction:{value:new d.a(.5,.5)},kernelRadius:{value:1}},vertexShader:\\\\\\\"varying vec2 vUv;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"#include <common>\\\\n\\\\t\\\\t\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D colorTexture;\\\\n\\\\t\\\\t\\\\t\\\\tuniform vec2 texSize;\\\\n\\\\t\\\\t\\\\t\\\\tuniform vec2 direction;\\\\n\\\\t\\\\t\\\\t\\\\tuniform float kernelRadius;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tfloat gaussianPdf(in float x, in float sigma) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\treturn 0.39894 * exp( -0.5 * x * x/( sigma * sigma))/sigma;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec2 invSize = 1.0 / texSize;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat weightSum = gaussianPdf(0.0, kernelRadius);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 diffuseSum = texture2D( colorTexture, vUv) * weightSum;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec2 delta = direction * invSize * kernelRadius/float(MAX_RADIUS);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec2 uvOffset = delta;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfor( int i = 1; i <= MAX_RADIUS; i ++ ) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tfloat w = gaussianPdf(uvOffset.x, kernelRadius);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tvec4 sample1 = texture2D( colorTexture, vUv + uvOffset);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tvec4 sample2 = texture2D( colorTexture, vUv - uvOffset);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdiffuseSum += ((sample1 + sample2) * w);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tweightSum += (2.0 * w);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tuvOffset += delta;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_FragColor = diffuseSum/weightSum;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\"})}getOverlayMaterial(){return new F({uniforms:{maskTexture:{value:null},edgeTexture1:{value:null},edgeTexture2:{value:null},patternTexture:{value:null},edgeStrength:{value:1},edgeGlow:{value:1},usePatternTexture:{value:0}},vertexShader:\\\\\\\"varying vec2 vUv;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"varying vec2 vUv;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D maskTexture;\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D edgeTexture1;\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D edgeTexture2;\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D patternTexture;\\\\n\\\\t\\\\t\\\\t\\\\tuniform float edgeStrength;\\\\n\\\\t\\\\t\\\\t\\\\tuniform float edgeGlow;\\\\n\\\\t\\\\t\\\\t\\\\tuniform bool usePatternTexture;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 edgeValue1 = texture2D(edgeTexture1, vUv);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 edgeValue2 = texture2D(edgeTexture2, vUv);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 maskColor = texture2D(maskTexture, vUv);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 patternColor = texture2D(patternTexture, 6.0 * vUv);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat visibilityFactor = 1.0 - maskColor.g > 0.0 ? 1.0 : 0.5;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 edgeValue = edgeValue1 + edgeValue2 * edgeGlow;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec4 finalColor = edgeStrength * maskColor.r * edgeValue;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tif(usePatternTexture)\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tfinalColor += + visibilityFactor * (1.0 - maskColor.r) * (1.0 - patternColor.r);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_FragColor = finalColor;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\",blending:w.e,depthTest:!1,depthWrite:!1,transparent:!0})}}Rj.BlurDirectionX=new d.a(1,0),Rj.BlurDirectionY=new d.a(0,1);const Pj=new class extends aa{constructor(){super(...arguments),this.objectsMask=oa.STRING(\\\\\\\"*outlined*\\\\\\\",{...MH}),this.refreshObjects=oa.BUTTON(null,{...MH}),this.printObjects=oa.BUTTON(null,{cook:!1,callback:t=>{Ij.PARAM_CALLBACK_printResolve(t)}}),this.edgeStrength=oa.FLOAT(3,{range:[0,10],rangeLocked:[!0,!1],...MH}),this.edgeThickness=oa.FLOAT(1,{range:[0,4],rangeLocked:[!0,!1],...MH}),this.edgeGlow=oa.FLOAT(0,{range:[0,1],rangeLocked:[!0,!1],...MH}),this.pulsePeriod=oa.FLOAT(0,{range:[0,5],rangeLocked:[!0,!1],...MH}),this.visibleEdgeColor=oa.COLOR([1,1,1],{...MH}),this.hiddenEdgeColor=oa.COLOR([.2,.1,.4],{...MH})}};class Ij extends SH{constructor(){super(...arguments),this.paramsConfig=Pj,this._resolvedObjects=[],this._map=new Map}static type(){return\\\\\\\"outline\\\\\\\"}_createPass(t){const e=new Rj(new d.a(t.resolution.x,t.resolution.y),t.scene,t.camera,t.scene.children);return this.updatePass(e),e}updatePass(t){t.edgeStrength=this.pv.edgeStrength,t.edgeThickness=this.pv.edgeThickness,t.edgeGlow=this.pv.edgeGlow,t.pulsePeriod=this.pv.pulsePeriod,t.visibleEdgeColor=this.pv.visibleEdgeColor,t.hiddenEdgeColor=this.pv.hiddenEdgeColor,this._setSelectedObjects(t)}_setSelectedObjects(t){const e=this.scene().objectsByMask(this.pv.objectsMask);this._map.clear();for(let t of e)this._map.set(t.uuid,t);this._resolvedObjects=e.filter((t=>{let e=!1;return t.traverseAncestors((t=>{this._map.has(t.uuid)&&(e=!0)})),!e})),t.selectedObjects=this._resolvedObjects}static PARAM_CALLBACK_printResolve(t){t.printResolve()}printResolve(){console.log(this._resolvedObjects)}}const Fj={uniforms:{tDiffuse:{value:null},resolution:{value:null},pixelSize:{value:1}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying highp vec2 vUv;\\\\n\\\\n\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\t\\\\tuniform float pixelSize;\\\\n\\\\t\\\\tuniform vec2 resolution;\\\\n\\\\n\\\\t\\\\tvarying highp vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main(){\\\\n\\\\n\\\\t\\\\t\\\\tvec2 dxy = pixelSize / resolution;\\\\n\\\\t\\\\t\\\\tvec2 coord = dxy * floor( vUv / dxy );\\\\n\\\\t\\\\t\\\\tgl_FragColor = texture2D(tDiffuse, coord);\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};const Dj=new class extends aa{constructor(){super(...arguments),this.pixelSize=oa.INTEGER(16,{range:[1,50],rangeLocked:[!0,!1],...MH})}};class kj extends SH{constructor(){super(...arguments),this.paramsConfig=Dj}static type(){return\\\\\\\"pixel\\\\\\\"}_createPass(t){const e=new Bm(Fj);return e.uniforms.resolution.value=t.resolution,e.uniforms.resolution.value.multiplyScalar(window.devicePixelRatio),this.updatePass(e),e}updatePass(t){t.uniforms.pixelSize.value=this.pv.pixelSize}}const Bj=new class extends aa{constructor(){super(...arguments),this.overrideScene=oa.BOOLEAN(0,MH),this.scene=oa.OPERATOR_PATH(\\\\\\\"/scene1\\\\\\\",{visibleIf:{overrideScene:1},nodeSelection:{context:Ki.OBJ,types:[ZG.type()]},...MH}),this.overrideCamera=oa.BOOLEAN(0,MH),this.camera=oa.OPERATOR_PATH(\\\\\\\"/perspective_camera1\\\\\\\",{visibleIf:{overrideCamera:1},nodeSelection:{context:Ki.OBJ},...MH})}};class zj extends SH{constructor(){super(...arguments),this.paramsConfig=Bj}static type(){return\\\\\\\"render\\\\\\\"}_createPass(t){const e=new Hm(t.scene,t.camera);return e.context={camera:t.camera,scene:t.scene},this.updatePass(e),e}updatePass(t){this._updateCamera(t),this._update_scene(t)}async _updateCamera(t){if(this.pv.overrideCamera){this.p.camera.isDirty()&&await this.p.camera.compute();const e=this.p.camera.found_node_with_context(Ki.OBJ);if(e&&(e.type()==nr.PERSPECTIVE||e.type()==nr.ORTHOGRAPHIC)){const n=e.object;t.camera=n}}else t.camera=t.context.camera}async _update_scene(t){if(this.pv.overrideScene){this.p.camera.isDirty()&&await this.p.scene.compute();const e=this.p.scene.found_node_with_context(Ki.OBJ);if(e&&e.type()==ZG.type()){const n=e.object;t.scene=n}}else t.scene=t.context.scene}}const Uj={uniforms:{tDiffuse:{value:null},amount:{value:.005},angle:{value:0}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\t\\\\tuniform float amount;\\\\n\\\\t\\\\tuniform float angle;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec2 offset = amount * vec2( cos(angle), sin(angle));\\\\n\\\\t\\\\t\\\\tvec4 cr = texture2D(tDiffuse, vUv + offset);\\\\n\\\\t\\\\t\\\\tvec4 cga = texture2D(tDiffuse, vUv);\\\\n\\\\t\\\\t\\\\tvec4 cb = texture2D(tDiffuse, vUv - offset);\\\\n\\\\t\\\\t\\\\tgl_FragColor = vec4(cr.r, cga.g, cb.b, cga.a);\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};const Gj=new class extends aa{constructor(){super(...arguments),this.amount=oa.FLOAT(.005,{range:[0,1],rangeLocked:[!0,!1],...MH}),this.angle=oa.FLOAT(0,{range:[0,10],rangeLocked:[!0,!1],...MH})}};class Vj extends SH{constructor(){super(...arguments),this.paramsConfig=Gj}static type(){return\\\\\\\"RGBShift\\\\\\\"}_createPass(t){const e=new Bm(Uj);return this.updatePass(e),e}updatePass(t){t.uniforms.amount.value=this.pv.amount,t.uniforms.angle.value=this.pv.angle}}const Hj={uniforms:{tDiffuse:{value:null},amount:{value:1}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform float amount;\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec4 color = texture2D( tDiffuse, vUv );\\\\n\\\\t\\\\t\\\\tvec3 c = color.rgb;\\\\n\\\\n\\\\t\\\\t\\\\tcolor.r = dot( c, vec3( 1.0 - 0.607 * amount, 0.769 * amount, 0.189 * amount ) );\\\\n\\\\t\\\\t\\\\tcolor.g = dot( c, vec3( 0.349 * amount, 1.0 - 0.314 * amount, 0.168 * amount ) );\\\\n\\\\t\\\\t\\\\tcolor.b = dot( c, vec3( 0.272 * amount, 0.534 * amount, 1.0 - 0.869 * amount ) );\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor = vec4( min( vec3( 1.0 ), color.rgb ), color.a );\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};const jj=new class extends aa{constructor(){super(...arguments),this.amount=oa.FLOAT(.5,{range:[0,2],rangeLocked:[!1,!1],...MH})}};class Wj extends SH{constructor(){super(...arguments),this.paramsConfig=jj}static type(){return\\\\\\\"sepia\\\\\\\"}_createPass(t){const e=new Bm(Hj);return this.updatePass(e),e}updatePass(t){t.uniforms.amount.value=this.pv.amount}}const qj=new class extends aa{};class Xj extends SH{constructor(){super(...arguments),this.paramsConfig=qj}static type(){return\\\\\\\"sequence\\\\\\\"}initializeNode(){super.initializeNode(),this.io.inputs.setCount(0,4)}setupComposer(t){this._addPassFromInput(0,t),this._addPassFromInput(1,t),this._addPassFromInput(2,t),this._addPassFromInput(3,t)}}const Yj=I.clone(IU.uniforms);Yj.delta={value:new d.a};const $j={uniforms:Yj,vertexShader:IU.vertexShader,fragmentShader:\\\\\\\"\\\\n#include <common>\\\\n#define ITERATIONS 10.0\\\\nuniform sampler2D tDiffuse;\\\\nuniform vec2 delta;\\\\nvarying vec2 vUv;\\\\nvoid main() {\\\\n\\\\tvec4 color = vec4( 0.0 );\\\\n\\\\tfloat total = 0.0;\\\\n\\\\tfloat offset = rand( vUv );\\\\n\\\\tfor ( float t = -ITERATIONS; t <= ITERATIONS; t ++ ) {\\\\n\\\\t\\\\tfloat percent = ( t + offset - 0.5 ) / ITERATIONS;\\\\n\\\\t\\\\tfloat weight = 1.0 - abs( percent );\\\\n\\\\t\\\\tcolor += texture2D( tDiffuse, vUv + delta * percent ) * weight;\\\\n\\\\t\\\\ttotal += weight;\\\\n\\\\t}\\\\n\\\\tgl_FragColor = color / total;\\\\n}\\\\\\\"};const Jj=new class extends aa{constructor(){super(...arguments),this.delta=oa.VECTOR2([2,2],{...MH})}};class Zj extends SH{constructor(){super(...arguments),this.paramsConfig=Jj}static type(){return\\\\\\\"triangleBlur\\\\\\\"}_createPass(t){const e=new Bm($j);return e.resolution=t.resolution.clone(),this.updatePass(e),e}updatePass(t){t.uniforms.delta.value.copy(this.pv.delta).divide(t.resolution).multiplyScalar(window.devicePixelRatio)}}const Qj={shaderID:\\\\\\\"luminosityHighPass\\\\\\\",uniforms:{tDiffuse:{value:null},luminosityThreshold:{value:1},smoothWidth:{value:1},defaultColor:{value:new D.a(0)},defaultOpacity:{value:0}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\t\\\\tuniform vec3 defaultColor;\\\\n\\\\t\\\\tuniform float defaultOpacity;\\\\n\\\\t\\\\tuniform float luminosityThreshold;\\\\n\\\\t\\\\tuniform float smoothWidth;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvec4 texel = texture2D( tDiffuse, vUv );\\\\n\\\\n\\\\t\\\\t\\\\tvec3 luma = vec3( 0.299, 0.587, 0.114 );\\\\n\\\\n\\\\t\\\\t\\\\tfloat v = dot( texel.xyz, luma );\\\\n\\\\n\\\\t\\\\t\\\\tvec4 outputColor = vec4( defaultColor.rgb, defaultOpacity );\\\\n\\\\n\\\\t\\\\t\\\\tfloat alpha = smoothstep( luminosityThreshold, luminosityThreshold + smoothWidth, v );\\\\n\\\\n\\\\t\\\\t\\\\tgl_FragColor = mix( outputColor, texel, alpha );\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};class Kj extends Im{constructor(t,e,n,i){super(),this.strength=void 0!==e?e:1,this.radius=n,this.threshold=i,this.resolution=void 0!==t?new d.a(t.x,t.y):new d.a(256,256),this.clearColor=new D.a(0,0,0);const r={minFilter:w.V,magFilter:w.V,format:w.Ib};this.renderTargetsHorizontal=[],this.renderTargetsVertical=[],this.nMips=5;let s=Math.round(this.resolution.x/2),o=Math.round(this.resolution.y/2);this.renderTargetBright=new Z(s,o,r),this.renderTargetBright.texture.name=\\\\\\\"UnrealBloomPass.bright\\\\\\\",this.renderTargetBright.texture.generateMipmaps=!1;for(let t=0;t<this.nMips;t++){const e=new Z(s,o,r);e.texture.name=\\\\\\\"UnrealBloomPass.h\\\\\\\"+t,e.texture.generateMipmaps=!1,this.renderTargetsHorizontal.push(e);const n=new Z(s,o,r);n.texture.name=\\\\\\\"UnrealBloomPass.v\\\\\\\"+t,n.texture.generateMipmaps=!1,this.renderTargetsVertical.push(n),s=Math.round(s/2),o=Math.round(o/2)}void 0===Qj&&console.error(\\\\\\\"THREE.UnrealBloomPass relies on LuminosityHighPassShader\\\\\\\");const a=Qj;this.highPassUniforms=I.clone(a.uniforms),this.highPassUniforms.luminosityThreshold.value=i,this.highPassUniforms.smoothWidth.value=.01,this.materialHighPassFilter=new F({uniforms:this.highPassUniforms,vertexShader:a.vertexShader,fragmentShader:a.fragmentShader,defines:{}}),this.separableBlurMaterials=[];const l=[3,5,7,9,11];s=Math.round(this.resolution.x/2),o=Math.round(this.resolution.y/2);for(let t=0;t<this.nMips;t++)this.separableBlurMaterials.push(this.getSeperableBlurMaterial(l[t])),this.separableBlurMaterials[t].uniforms.texSize.value=new d.a(s,o),s=Math.round(s/2),o=Math.round(o/2);this.compositeMaterial=this.getCompositeMaterial(this.nMips),this.compositeMaterial.uniforms.blurTexture1.value=this.renderTargetsVertical[0].texture,this.compositeMaterial.uniforms.blurTexture2.value=this.renderTargetsVertical[1].texture,this.compositeMaterial.uniforms.blurTexture3.value=this.renderTargetsVertical[2].texture,this.compositeMaterial.uniforms.blurTexture4.value=this.renderTargetsVertical[3].texture,this.compositeMaterial.uniforms.blurTexture5.value=this.renderTargetsVertical[4].texture,this.compositeMaterial.uniforms.bloomStrength.value=e,this.compositeMaterial.uniforms.bloomRadius.value=.1,this.compositeMaterial.needsUpdate=!0;this.compositeMaterial.uniforms.bloomFactors.value=[1,.8,.6,.4,.2],this.bloomTintColors=[new p.a(1,1,1),new p.a(1,1,1),new p.a(1,1,1),new p.a(1,1,1),new p.a(1,1,1)],this.compositeMaterial.uniforms.bloomTintColors.value=this.bloomTintColors,void 0===Pm&&console.error(\\\\\\\"THREE.UnrealBloomPass relies on CopyShader\\\\\\\");const c=Pm;this.copyUniforms=I.clone(c.uniforms),this.copyUniforms.opacity.value=1,this.materialCopy=new F({uniforms:this.copyUniforms,vertexShader:c.vertexShader,fragmentShader:c.fragmentShader,blending:w.e,depthTest:!1,depthWrite:!1,transparent:!0}),this.enabled=!0,this.needsSwap=!1,this._oldClearColor=new D.a,this.oldClearAlpha=1,this.basic=new at.a,this.fsQuad=new km(null)}dispose(){for(let t=0;t<this.renderTargetsHorizontal.length;t++)this.renderTargetsHorizontal[t].dispose();for(let t=0;t<this.renderTargetsVertical.length;t++)this.renderTargetsVertical[t].dispose();this.renderTargetBright.dispose()}setSize(t,e){let n=Math.round(t/2),i=Math.round(e/2);this.renderTargetBright.setSize(n,i);for(let t=0;t<this.nMips;t++)this.renderTargetsHorizontal[t].setSize(n,i),this.renderTargetsVertical[t].setSize(n,i),this.separableBlurMaterials[t].uniforms.texSize.value=new d.a(n,i),n=Math.round(n/2),i=Math.round(i/2)}render(t,e,n,i,r){t.getClearColor(this._oldClearColor),this.oldClearAlpha=t.getClearAlpha();const s=t.autoClear;t.autoClear=!1,t.setClearColor(this.clearColor,0),r&&t.state.buffers.stencil.setTest(!1),this.renderToScreen&&(this.fsQuad.material=this.basic,this.basic.map=n.texture,t.setRenderTarget(null),t.clear(),this.fsQuad.render(t)),this.highPassUniforms.tDiffuse.value=n.texture,this.highPassUniforms.luminosityThreshold.value=this.threshold,this.fsQuad.material=this.materialHighPassFilter,t.setRenderTarget(this.renderTargetBright),t.clear(),this.fsQuad.render(t);let o=this.renderTargetBright;for(let e=0;e<this.nMips;e++)this.fsQuad.material=this.separableBlurMaterials[e],this.separableBlurMaterials[e].uniforms.colorTexture.value=o.texture,this.separableBlurMaterials[e].uniforms.direction.value=Kj.BlurDirectionX,t.setRenderTarget(this.renderTargetsHorizontal[e]),t.clear(),this.fsQuad.render(t),this.separableBlurMaterials[e].uniforms.colorTexture.value=this.renderTargetsHorizontal[e].texture,this.separableBlurMaterials[e].uniforms.direction.value=Kj.BlurDirectionY,t.setRenderTarget(this.renderTargetsVertical[e]),t.clear(),this.fsQuad.render(t),o=this.renderTargetsVertical[e];this.fsQuad.material=this.compositeMaterial,this.compositeMaterial.uniforms.bloomStrength.value=this.strength,this.compositeMaterial.uniforms.bloomRadius.value=this.radius,this.compositeMaterial.uniforms.bloomTintColors.value=this.bloomTintColors,t.setRenderTarget(this.renderTargetsHorizontal[0]),t.clear(),this.fsQuad.render(t),this.fsQuad.material=this.materialCopy,this.copyUniforms.tDiffuse.value=this.renderTargetsHorizontal[0].texture,r&&t.state.buffers.stencil.setTest(!0),this.renderToScreen?(t.setRenderTarget(null),this.fsQuad.render(t)):(t.setRenderTarget(n),this.fsQuad.render(t)),t.setClearColor(this._oldClearColor,this.oldClearAlpha),t.autoClear=s}getSeperableBlurMaterial(t){return new F({defines:{KERNEL_RADIUS:t,SIGMA:t},uniforms:{colorTexture:{value:null},texSize:{value:new d.a(.5,.5)},direction:{value:new d.a(.5,.5)}},vertexShader:\\\\\\\"varying vec2 vUv;\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"#include <common>\\\\n\\\\t\\\\t\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D colorTexture;\\\\n\\\\t\\\\t\\\\t\\\\tuniform vec2 texSize;\\\\n\\\\t\\\\t\\\\t\\\\tuniform vec2 direction;\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tfloat gaussianPdf(in float x, in float sigma) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\treturn 0.39894 * exp( -0.5 * x * x/( sigma * sigma))/sigma;\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec2 invSize = 1.0 / texSize;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat fSigma = float(SIGMA);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat weightSum = gaussianPdf(0.0, fSigma);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvec3 diffuseSum = texture2D( colorTexture, vUv).rgb * weightSum;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfor( int i = 1; i < KERNEL_RADIUS; i ++ ) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tfloat x = float(i);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tfloat w = gaussianPdf(x, fSigma);\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tvec2 uvOffset = direction * invSize * x;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tvec3 sample1 = texture2D( colorTexture, vUv + uvOffset).rgb;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tvec3 sample2 = texture2D( colorTexture, vUv - uvOffset).rgb;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tdiffuseSum += (sample1 + sample2) * w;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tweightSum += 2.0 * w;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_FragColor = vec4(diffuseSum/weightSum, 1.0);\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\"})}getCompositeMaterial(t){return new F({defines:{NUM_MIPS:t},uniforms:{blurTexture1:{value:null},blurTexture2:{value:null},blurTexture3:{value:null},blurTexture4:{value:null},blurTexture5:{value:null},dirtTexture:{value:null},bloomStrength:{value:1},bloomFactors:{value:null},bloomTintColors:{value:null},bloomRadius:{value:0}},vertexShader:\\\\\\\"varying vec2 vUv;\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"varying vec2 vUv;\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D blurTexture1;\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D blurTexture2;\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D blurTexture3;\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D blurTexture4;\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D blurTexture5;\\\\n\\\\t\\\\t\\\\t\\\\tuniform sampler2D dirtTexture;\\\\n\\\\t\\\\t\\\\t\\\\tuniform float bloomStrength;\\\\n\\\\t\\\\t\\\\t\\\\tuniform float bloomRadius;\\\\n\\\\t\\\\t\\\\t\\\\tuniform float bloomFactors[NUM_MIPS];\\\\n\\\\t\\\\t\\\\t\\\\tuniform vec3 bloomTintColors[NUM_MIPS];\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tfloat lerpBloomFactor(const in float factor) {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tfloat mirrorFactor = 1.2 - factor;\\\\n\\\\t\\\\t\\\\t\\\\t\\\\treturn mix(factor, mirrorFactor, bloomRadius);\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\n\\\\n\\\\t\\\\t\\\\t\\\\tvoid main() {\\\\n\\\\t\\\\t\\\\t\\\\t\\\\tgl_FragColor = bloomStrength * ( lerpBloomFactor(bloomFactors[0]) * vec4(bloomTintColors[0], 1.0) * texture2D(blurTexture1, vUv) +\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tlerpBloomFactor(bloomFactors[1]) * vec4(bloomTintColors[1], 1.0) * texture2D(blurTexture2, vUv) +\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tlerpBloomFactor(bloomFactors[2]) * vec4(bloomTintColors[2], 1.0) * texture2D(blurTexture3, vUv) +\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tlerpBloomFactor(bloomFactors[3]) * vec4(bloomTintColors[3], 1.0) * texture2D(blurTexture4, vUv) +\\\\n\\\\t\\\\t\\\\t\\\\t\\\\t\\\\tlerpBloomFactor(bloomFactors[4]) * vec4(bloomTintColors[4], 1.0) * texture2D(blurTexture5, vUv) );\\\\n\\\\t\\\\t\\\\t\\\\t}\\\\\\\"})}}Kj.BlurDirectionX=new d.a(1,0),Kj.BlurDirectionY=new d.a(0,1);const tW=new class extends aa{constructor(){super(...arguments),this.strength=oa.FLOAT(1.5,{range:[0,3],rangeLocked:[!0,!1],...MH}),this.radius=oa.FLOAT(1,{...MH}),this.threshold=oa.FLOAT(0,{...MH})}};class eW extends SH{constructor(){super(...arguments),this.paramsConfig=tW}static type(){return\\\\\\\"unrealBloom\\\\\\\"}_createPass(t){return new Kj(new d.a(t.resolution.x,t.resolution.y),this.pv.strength,this.pv.radius,this.pv.threshold)}updatePass(t){t.strength=this.pv.strength,t.radius=this.pv.radius,t.threshold=this.pv.threshold}}const nW=new class extends aa{constructor(){super(...arguments),this.amount=oa.FLOAT(2,{range:[0,10],rangeLocked:[!0,!1],step:.01,...MH}),this.transparent=oa.BOOLEAN(1,MH)}};class iW extends SH{constructor(){super(...arguments),this.paramsConfig=nW}static type(){return\\\\\\\"verticalBlur\\\\\\\"}_createPass(t){const e=new Bm(FU);return e.resolution_y=t.resolution.y,this.updatePass(e),e}updatePass(t){t.uniforms.v.value=this.pv.amount/(t.resolution_y*window.devicePixelRatio),t.material.transparent=this.pv.transparent}}const rW={uniforms:{tDiffuse:{value:null},offset:{value:1},darkness:{value:1}},vertexShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\tvUv = uv;\\\\n\\\\t\\\\t\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n\\\\t\\\\t}\\\\\\\",fragmentShader:\\\\\\\"\\\\n\\\\n\\\\t\\\\tuniform float offset;\\\\n\\\\t\\\\tuniform float darkness;\\\\n\\\\n\\\\t\\\\tuniform sampler2D tDiffuse;\\\\n\\\\n\\\\t\\\\tvarying vec2 vUv;\\\\n\\\\n\\\\t\\\\tvoid main() {\\\\n\\\\n\\\\t\\\\t\\\\t// Eskil's vignette\\\\n\\\\n\\\\t\\\\t\\\\tvec4 texel = texture2D( tDiffuse, vUv );\\\\n\\\\t\\\\t\\\\tvec2 uv = ( vUv - vec2( 0.5 ) ) * vec2( offset );\\\\n\\\\t\\\\t\\\\tgl_FragColor = vec4( mix( texel.rgb, vec3( 1.0 - darkness ), dot( uv, uv ) ), texel.a );\\\\n\\\\n\\\\t\\\\t}\\\\\\\"};const sW=new class extends aa{constructor(){super(...arguments),this.offset=oa.FLOAT(1,{range:[0,1],rangeLocked:[!1,!1],...MH}),this.darkness=oa.FLOAT(1,{range:[0,2],rangeLocked:[!0,!1],...MH})}};class oW extends SH{constructor(){super(...arguments),this.paramsConfig=sW}static type(){return\\\\\\\"vignette\\\\\\\"}_createPass(t){const e=new Bm(rW);return this.updatePass(e),e}updatePass(t){t.uniforms.offset.value=this.pv.offset,t.uniforms.darkness.value=this.pv.darkness}}class aW extends ia{static context(){return Ki.POST}cook(){this.cookController.endCook()}}class lW extends aW{}class cW extends lW{constructor(){super(...arguments),this._children_controller_context=Ki.ANIM}static type(){return tr.ANIM}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class uW extends lW{constructor(){super(...arguments),this._children_controller_context=Ki.COP}static type(){return tr.COP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class hW extends lW{constructor(){super(...arguments),this._children_controller_context=Ki.EVENT}static type(){return tr.EVENT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class dW extends lW{constructor(){super(...arguments),this._children_controller_context=Ki.MAT}static type(){return tr.MAT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class pW extends aW{constructor(){super(...arguments),this.paramsConfig=new Jm,this.effectsComposerController=new Zm(this),this.displayNodeController=new Lm(this,this.effectsComposerController.displayNodeControllerCallbacks()),this._children_controller_context=Ki.POST}static type(){return tr.POST}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class _W extends lW{constructor(){super(...arguments),this._children_controller_context=Ki.ROP}static type(){return tr.ROP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class mW extends ia{static context(){return Ki.ROP}cook(){this.cookController.endCook()}}class fW extends mW{}class gW extends fW{constructor(){super(...arguments),this._children_controller_context=Ki.COP}static type(){return tr.COP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class vW extends Q.a{constructor(t){super(),this._element=t,this._element.style.position=\\\\\\\"absolute\\\\\\\",this.addEventListener(\\\\\\\"removed\\\\\\\",this._on_removed.bind(this))}_on_removed(){this.traverse((function(t){t instanceof vW&&t.element instanceof Element&&null!==t.element.parentNode&&t.element.parentNode.removeChild(t.element)}))}get element(){return this._element}copy(t,e){return Q.a.prototype.copy.call(this,t,e),this._element=t.element.cloneNode(!0),this.matrixAutoUpdate=t.matrixAutoUpdate,this}}class yW{constructor(){this._width=0,this._height=0,this._widthHalf=0,this._heightHalf=0,this.vector=new p.a,this.viewMatrix=new A.a,this.viewProjectionMatrix=new A.a,this.cache_distanceToCameraSquared=new WeakMap,this.domElement=document.createElement(\\\\\\\"div\\\\\\\"),this._sort_objects=!1,this._use_fog=!1,this._fog_near=1,this._fog_far=100,this.a=new p.a,this.b=new p.a,this.domElement.classList.add(\\\\\\\"polygonjs-CSS2DRenderer\\\\\\\")}getSize(){return{width:this._width,height:this._height}}setSize(t,e){this._width=t,this._height=e,this._widthHalf=this._width/2,this._heightHalf=this._height/2,this.domElement.style.width=t+\\\\\\\"px\\\\\\\",this.domElement.style.height=e+\\\\\\\"px\\\\\\\"}renderObject(t,e,n){if(t instanceof vW){this.vector.setFromMatrixPosition(t.matrixWorld),this.vector.applyMatrix4(this.viewProjectionMatrix);var i=t.element,r=\\\\\\\"translate(-50%,-50%) translate(\\\\\\\"+(this.vector.x*this._widthHalf+this._widthHalf)+\\\\\\\"px,\\\\\\\"+(-this.vector.y*this._heightHalf+this._heightHalf)+\\\\\\\"px)\\\\\\\";if(i.style.webkitTransform=r,i.style.transform=r,i.style.display=t.visible&&this.vector.z>=-1&&this.vector.z<=1?\\\\\\\"\\\\\\\":\\\\\\\"none\\\\\\\",this._sort_objects||this._use_fog){const e=this.getDistanceToSquared(n,t);if(this._use_fog){const t=Math.sqrt(e),n=rs.fit(t,this._fog_near,this._fog_far,0,1),r=rs.clamp(1-n,0,1);i.style.opacity=`${r}`,0==r&&(i.style.display=\\\\\\\"none\\\\\\\")}this.cache_distanceToCameraSquared.set(t,e)}i.parentNode!==this.domElement&&this.domElement.appendChild(i)}for(var s=0,o=t.children.length;s<o;s++)this.renderObject(t.children[s],e,n)}getDistanceToSquared(t,e){return this.a.setFromMatrixPosition(t.matrixWorld),this.b.setFromMatrixPosition(e.matrixWorld),this.a.distanceToSquared(this.b)}filterAndFlatten(t){const e=[];return t.traverse((function(t){t instanceof vW&&e.push(t)})),e}render(t,e){!0===t.autoUpdate&&t.updateMatrixWorld(),null===e.parent&&e.updateMatrixWorld(),this.viewMatrix.copy(e.matrixWorldInverse),this.viewProjectionMatrix.multiplyMatrices(e.projectionMatrix,this.viewMatrix),this.renderObject(t,t,e),this._sort_objects&&this.zOrder(t)}set_sorting(t){this._sort_objects=t}zOrder(t){const e=this.filterAndFlatten(t).sort(((t,e)=>{const n=this.cache_distanceToCameraSquared.get(t),i=this.cache_distanceToCameraSquared.get(e);return null!=n&&null!=i?n-i:0})),n=e.length;for(let t=0,i=e.length;t<i;t++)e[t].element.style.zIndex=\\\\\\\"\\\\\\\"+(n-t)}set_use_fog(t){this._use_fog=t}set_fog_range(t,e){this._fog_near=t,this._fog_far=e}}const xW=new class extends aa{constructor(){super(...arguments),this.css=oa.STRING(\\\\\\\"\\\\\\\",{multiline:!0}),this.sortObjects=oa.BOOLEAN(0),this.useFog=oa.BOOLEAN(0),this.fogNear=oa.FLOAT(1,{range:[0,100],rangeLocked:[!0,!1],visibleIf:{useFog:1}}),this.fogFar=oa.FLOAT(100,{range:[0,100],rangeLocked:[!0,!1],visibleIf:{useFog:1}})}};class bW extends oV{constructor(){super(...arguments),this.paramsConfig=xW,this._renderers_by_canvas_id=new Map}static type(){return aV.CSS2D}createRenderer(t){const e=new yW;this._renderers_by_canvas_id.set(t.id,e);const n=t.parentElement;n&&(n.prepend(e.domElement),n.style.position=\\\\\\\"relative\\\\\\\"),e.domElement.style.position=\\\\\\\"absolute\\\\\\\",e.domElement.style.top=\\\\\\\"0px\\\\\\\",e.domElement.style.left=\\\\\\\"0px\\\\\\\",e.domElement.style.pointerEvents=\\\\\\\"none\\\\\\\";const i=t.getBoundingClientRect();return e.setSize(i.width,i.height),this._update_renderer(e),e}renderer(t){return this._renderers_by_canvas_id.get(t.id)||this.createRenderer(t)}cook(){this._update_css(),this._renderers_by_canvas_id.forEach((t=>{this._update_renderer(t)})),this.cookController.endCook()}_update_renderer(t){t.set_sorting(this.pv.sortObjects),t.set_use_fog(this.pv.useFog),t.set_fog_range(this.pv.fogNear,this.pv.fogFar)}_update_css(){this.css_element().innerHTML=this.pv.css}css_element(){return this._css_element=this._css_element||this._find_element()||this._create_element()}_find_element(){return document.getElementById(this._css_element_id())}_create_element(){const t=document.createElement(\\\\\\\"style\\\\\\\");return t.appendChild(document.createTextNode(\\\\\\\"\\\\\\\")),document.head.appendChild(t),t.id=this._css_element_id(),t}_css_element_id(){return`css_2d_renderer-${this.graphNodeId()}`}}class wW extends fW{constructor(){super(...arguments),this._children_controller_context=Ki.ANIM}static type(){return tr.ANIM}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class TW extends fW{constructor(){super(...arguments),this._children_controller_context=Ki.EVENT}static type(){return tr.EVENT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class AW extends fW{constructor(){super(...arguments),this._children_controller_context=Ki.MAT}static type(){return tr.MAT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class EW extends mW{constructor(){super(...arguments),this.paramsConfig=new Jm,this.effectsComposerController=new Zm(this),this.displayNodeController=new Lm(this,this.effectsComposerController.displayNodeControllerCallbacks()),this._children_controller_context=Ki.POST}static type(){return tr.POST}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class MW extends fW{constructor(){super(...arguments),this._children_controller_context=Ki.ROP}static type(){return tr.ROP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class SW extends pG{static type(){return\\\\\\\"add\\\\\\\"}cook(t,e){const n=[];return this._create_point(n,e),this._create_polygon(t[0],n,e),this.createCoreGroupFromObjects(n)}_create_point(t,e){if(!e.createPoint)return;const n=new S.a,i=[];for(let t=0;t<e.pointsCount;t++)e.position.toArray(i,3*t);n.setAttribute(\\\\\\\"position\\\\\\\",new C.a(new Float32Array(i),3));const r=this.createObject(n,Sr.POINTS);t&&t.push(r)}_create_polygon(t,e,n){if(!n.connectInputPoints)return;t.points().length>0&&this._create_polygon_open(t,e,n)}_create_polygon_open(t,e,n){const i=t.points();let r=[];const s=[];let o;for(let t=0;t<i.length;t++)o=i[t],o.position().toArray(r,3*t),t>0&&(s.push(t-1),s.push(t));if(i.length>2&&n.connectToLastPoint){i[0].position().toArray(r,r.length);const t=s[s.length-1];s.push(t),s.push(0)}const a=new S.a;a.setAttribute(\\\\\\\"position\\\\\\\",new C.c(r,3)),a.setIndex(s);const l=this.createObject(a,Sr.LINE_SEGMENTS);e.push(l)}}SW.DEFAULT_PARAMS={createPoint:!0,pointsCount:1,position:new p.a(0,0,0),connectInputPoints:!1,connectToLastPoint:!1};const CW=SW.DEFAULT_PARAMS;const NW=new class extends aa{constructor(){super(...arguments),this.createPoint=oa.BOOLEAN(CW.createPoint),this.pointsCount=oa.INTEGER(CW.pointsCount,{range:[1,100],rangeLocked:[!0,!1],visibleIf:{createPoint:!0}}),this.position=oa.VECTOR3(CW.position,{visibleIf:{createPoint:!0}}),this.connectInputPoints=oa.BOOLEAN(CW.connectInputPoints),this.connectToLastPoint=oa.BOOLEAN(CW.connectToLastPoint)}};class LW extends gG{constructor(){super(...arguments),this.paramsConfig=NW}static type(){return\\\\\\\"add\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to create polygons from (optional)\\\\\\\"]}initializeNode(){this.io.inputs.setCount(0,1)}cook(t){this._operation=this._operation||new SW(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const OW=new class extends aa{};class RW extends gG{constructor(){super(...arguments),this.paramsConfig=OW}static type(){return\\\\\\\"animationCopy\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to copy animation to\\\\\\\",\\\\\\\"geometry to copy animation from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(2),this.io.inputs.initInputsClonedState([Qi.FROM_NODE,Qi.NEVER])}cook(t){const e=t[0],n=t[1].objects()[0],i=e.objects()[0],r=n.animations;r?(i.animations=r.map((t=>t.clone())),this.setCoreGroup(e)):this.states.error.set(\\\\\\\"no animation found\\\\\\\")}}class PW{constructor(t,e,n=null,i=e.blendMode){this._mixer=t,this._clip=e,this._localRoot=n,this.blendMode=i;const r=e.tracks,s=r.length,o=new Array(s),a={endingStart:w.id,endingEnd:w.id};for(let t=0;t!==s;++t){const e=r[t].createInterpolant(null);o[t]=e,e.settings=a}this._interpolantSettings=a,this._interpolants=o,this._propertyBindings=new Array(s),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=w.eb,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(t){return this._startTime=t,this}setLoop(t,e){return this.loop=t,this.repetitions=e,this}setEffectiveWeight(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(t){return this._scheduleFading(t,0,1)}fadeOut(t){return this._scheduleFading(t,1,0)}crossFadeFrom(t,e,n){if(t.fadeOut(e),this.fadeIn(e),n){const n=this._clip.duration,i=t._clip.duration,r=i/n,s=n/i;t.warp(1,r,e),this.warp(s,1,e)}return this}crossFadeTo(t,e,n){return t.crossFadeFrom(this,e,n)}stopFading(){const t=this._weightInterpolant;return null!==t&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}setEffectiveTimeScale(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(t){return this.timeScale=this._clip.duration/t,this.stopWarping()}syncWith(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()}halt(t){return this.warp(this._effectiveTimeScale,0,t)}warp(t,e,n){const i=this._mixer,r=i.time,s=this.timeScale;let o=this._timeScaleInterpolant;null===o&&(o=i._lendControlInterpolant(),this._timeScaleInterpolant=o);const a=o.parameterPositions,l=o.sampleValues;return a[0]=r,a[1]=r+n,l[0]=t/s,l[1]=e/s,this}stopWarping(){const t=this._timeScaleInterpolant;return null!==t&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(t,e,n,i){if(!this.enabled)return void this._updateWeight(t);const r=this._startTime;if(null!==r){const i=(t-r)*n;if(i<0||0===n)return;this._startTime=null,e=n*i}e*=this._updateTimeScale(t);const s=this._updateTime(e),o=this._updateWeight(t);if(o>0){const t=this._interpolants,e=this._propertyBindings;switch(this.blendMode){case w.d:for(let n=0,i=t.length;n!==i;++n)t[n].evaluate(s),e[n].accumulateAdditive(o);break;case w.wb:default:for(let n=0,r=t.length;n!==r;++n)t[n].evaluate(s),e[n].accumulate(i,o)}}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const n=this._weightInterpolant;if(null!==n){const i=n.evaluate(t)[0];e*=i,t>n.parameterPositions[1]&&(this.stopFading(),0===i&&(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,n=this.loop;let i=this.time+t,r=this._loopCount;const s=n===w.db;if(0===t)return-1===r?i:s&&1==(1&r)?e-i:i;if(n===w.cb){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(i>=e)i=e;else{if(!(i<0)){this.time=i;break t}i=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:\\\\\\\"finished\\\\\\\",action:this,direction:t<0?-1:1})}}else{if(-1===r&&(t>=0?(r=0,this._setEndings(!0,0===this.repetitions,s)):this._setEndings(0===this.repetitions,!0,s)),i>=e||i<0){const n=Math.floor(i/e);i-=e*n,r+=Math.abs(n);const o=this.repetitions-r;if(o<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,i=t>0?e:0,this.time=i,this._mixer.dispatchEvent({type:\\\\\\\"finished\\\\\\\",action:this,direction:t>0?1:-1});else{if(1===o){const e=t<0;this._setEndings(e,!e,s)}else this._setEndings(!1,!1,s);this._loopCount=r,this.time=i,this._mixer.dispatchEvent({type:\\\\\\\"loop\\\\\\\",action:this,loopDelta:n})}}else this.time=i;if(s&&1==(1&r))return e-i}return i}_setEndings(t,e,n){const i=this._interpolantSettings;n?(i.endingStart=w.kd,i.endingEnd=w.kd):(i.endingStart=t?this.zeroSlopeAtStart?w.kd:w.id:w.hd,i.endingEnd=e?this.zeroSlopeAtEnd?w.kd:w.id:w.hd)}_scheduleFading(t,e,n){const i=this._mixer,r=i.time;let s=this._weightInterpolant;null===s&&(s=i._lendControlInterpolant(),this._weightInterpolant=s);const o=s.parameterPositions,a=s.sampleValues;return o[0]=r,a[0]=e,o[1]=r+t,a[1]=n,this}}var IW=n(71),FW=n(66);class DW{constructor(t,e,n){let i,r,s;switch(this.binding=t,this.valueSize=n,e){case\\\\\\\"quaternion\\\\\\\":i=this._slerp,r=this._slerpAdditive,s=this._setAdditiveIdentityQuaternion,this.buffer=new Float64Array(6*n),this._workIndex=5;break;case\\\\\\\"string\\\\\\\":case\\\\\\\"bool\\\\\\\":i=this._select,r=this._select,s=this._setAdditiveIdentityOther,this.buffer=new Array(5*n);break;default:i=this._lerp,r=this._lerpAdditive,s=this._setAdditiveIdentityNumeric,this.buffer=new Float64Array(5*n)}this._mixBufferRegion=i,this._mixBufferRegionAdditive=r,this._setIdentity=s,this._origIndex=3,this._addIndex=4,this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,this.useCount=0,this.referenceCount=0}accumulate(t,e){const n=this.buffer,i=this.valueSize,r=t*i+i;let s=this.cumulativeWeight;if(0===s){for(let t=0;t!==i;++t)n[r+t]=n[t];s=e}else{s+=e;const t=e/s;this._mixBufferRegion(n,r,0,t,i)}this.cumulativeWeight=s}accumulateAdditive(t){const e=this.buffer,n=this.valueSize,i=n*this._addIndex;0===this.cumulativeWeightAdditive&&this._setIdentity(),this._mixBufferRegionAdditive(e,i,0,t,n),this.cumulativeWeightAdditive+=t}apply(t){const e=this.valueSize,n=this.buffer,i=t*e+e,r=this.cumulativeWeight,s=this.cumulativeWeightAdditive,o=this.binding;if(this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,r<1){const t=e*this._origIndex;this._mixBufferRegion(n,i,t,1-r,e)}s>0&&this._mixBufferRegionAdditive(n,i,this._addIndex*e,1,e);for(let t=e,r=e+e;t!==r;++t)if(n[t]!==n[t+e]){o.setValue(n,i);break}}saveOriginalState(){const t=this.binding,e=this.buffer,n=this.valueSize,i=n*this._origIndex;t.getValue(e,i);for(let t=n,r=i;t!==r;++t)e[t]=e[i+t%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)}_setAdditiveIdentityNumeric(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let n=t;n<e;n++)this.buffer[n]=0}_setAdditiveIdentityQuaternion(){this._setAdditiveIdentityNumeric(),this.buffer[this._addIndex*this.valueSize+3]=1}_setAdditiveIdentityOther(){const t=this._origIndex*this.valueSize,e=this._addIndex*this.valueSize;for(let n=0;n<this.valueSize;n++)this.buffer[e+n]=this.buffer[t+n]}_select(t,e,n,i,r){if(i>=.5)for(let i=0;i!==r;++i)t[e+i]=t[n+i]}_slerp(t,e,n,i){au.a.slerpFlat(t,e,t,e,t,n,i)}_slerpAdditive(t,e,n,i,r){const s=this._workIndex*r;au.a.multiplyQuaternionsFlat(t,s,t,e,t,n),au.a.slerpFlat(t,e,t,e,t,s,i)}_lerp(t,e,n,i,r){const s=1-i;for(let o=0;o!==r;++o){const r=e+o;t[r]=t[r]*s+t[n+o]*i}}_lerpAdditive(t,e,n,i,r){for(let s=0;s!==r;++s){const r=e+s;t[r]=t[r]+t[n+s]*i}}}var kW=n(63);class BW extends $.a{constructor(t){super(),this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(t,e){const n=t._localRoot||this._root,i=t._clip.tracks,r=i.length,s=t._propertyBindings,o=t._interpolants,a=n.uuid,l=this._bindingsByRootAndName;let c=l[a];void 0===c&&(c={},l[a]=c);for(let t=0;t!==r;++t){const r=i[t],l=r.name;let u=c[l];if(void 0!==u)s[t]=u;else{if(u=s[t],void 0!==u){null===u._cacheIndex&&(++u.referenceCount,this._addInactiveBinding(u,a,l));continue}const i=e&&e._propertyBindings[t].binding.parsedPath;u=new DW(FW.a.create(n,l,i),r.ValueTypeName,r.getValueSize()),++u.referenceCount,this._addInactiveBinding(u,a,l),s[t]=u}o[t].resultBuffer=u.buffer}}_activateAction(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){const e=(t._localRoot||this._root).uuid,n=t._clip.uuid,i=this._actionsByClip[n];this._bindAction(t,i&&i.knownActions[0]),this._addInactiveAction(t,n,e)}const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==n.useCount++&&(this._lendBinding(n),n.saveOriginalState())}this._lendAction(t)}}_deactivateAction(t){if(this._isActiveAction(t)){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.useCount&&(n.restoreOriginalState(),this._takeBackBinding(n))}this._takeBackAction(t)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}}_isActiveAction(t){const e=t._cacheIndex;return null!==e&&e<this._nActiveActions}_addInactiveAction(t,e,n){const i=this._actions,r=this._actionsByClip;let s=r[e];if(void 0===s)s={knownActions:[t],actionByRoot:{}},t._byClipCacheIndex=0,r[e]=s;else{const e=s.knownActions;t._byClipCacheIndex=e.length,e.push(t)}t._cacheIndex=i.length,i.push(t),s.actionByRoot[n]=t}_removeInactiveAction(t){const e=this._actions,n=e[e.length-1],i=t._cacheIndex;n._cacheIndex=i,e[i]=n,e.pop(),t._cacheIndex=null;const r=t._clip.uuid,s=this._actionsByClip,o=s[r],a=o.knownActions,l=a[a.length-1],c=t._byClipCacheIndex;l._byClipCacheIndex=c,a[c]=l,a.pop(),t._byClipCacheIndex=null;delete o.actionByRoot[(t._localRoot||this._root).uuid],0===a.length&&delete s[r],this._removeInactiveBindingsForAction(t)}_removeInactiveBindingsForAction(t){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.referenceCount&&this._removeInactiveBinding(n)}}_lendAction(t){const e=this._actions,n=t._cacheIndex,i=this._nActiveActions++,r=e[i];t._cacheIndex=i,e[i]=t,r._cacheIndex=n,e[n]=r}_takeBackAction(t){const e=this._actions,n=t._cacheIndex,i=--this._nActiveActions,r=e[i];t._cacheIndex=i,e[i]=t,r._cacheIndex=n,e[n]=r}_addInactiveBinding(t,e,n){const i=this._bindingsByRootAndName,r=this._bindings;let s=i[e];void 0===s&&(s={},i[e]=s),s[n]=t,t._cacheIndex=r.length,r.push(t)}_removeInactiveBinding(t){const e=this._bindings,n=t.binding,i=n.rootNode.uuid,r=n.path,s=this._bindingsByRootAndName,o=s[i],a=e[e.length-1],l=t._cacheIndex;a._cacheIndex=l,e[l]=a,e.pop(),delete o[r],0===Object.keys(o).length&&delete s[i]}_lendBinding(t){const e=this._bindings,n=t._cacheIndex,i=this._nActiveBindings++,r=e[i];t._cacheIndex=i,e[i]=t,r._cacheIndex=n,e[n]=r}_takeBackBinding(t){const e=this._bindings,n=t._cacheIndex,i=--this._nActiveBindings,r=e[i];t._cacheIndex=i,e[i]=t,r._cacheIndex=n,e[n]=r}_lendControlInterpolant(){const t=this._controlInterpolants,e=this._nActiveControlInterpolants++;let n=t[e];return void 0===n&&(n=new IW.a(new Float32Array(2),new Float32Array(2),1,this._controlInterpolantsResultBuffer),n.__cacheIndex=e,t[e]=n),n}_takeBackControlInterpolant(t){const e=this._controlInterpolants,n=t.__cacheIndex,i=--this._nActiveControlInterpolants,r=e[i];t.__cacheIndex=i,e[i]=t,r.__cacheIndex=n,e[n]=r}clipAction(t,e,n){const i=e||this._root,r=i.uuid;let s=\\\\\\\"string\\\\\\\"==typeof t?kW.a.findByName(i,t):t;const o=null!==s?s.uuid:t,a=this._actionsByClip[o];let l=null;if(void 0===n&&(n=null!==s?s.blendMode:w.wb),void 0!==a){const t=a.actionByRoot[r];if(void 0!==t&&t.blendMode===n)return t;l=a.knownActions[0],null===s&&(s=l._clip)}if(null===s)return null;const c=new PW(this,s,e,n);return this._bindAction(c,l),this._addInactiveAction(c,o,r),c}existingAction(t,e){const n=e||this._root,i=n.uuid,r=\\\\\\\"string\\\\\\\"==typeof t?kW.a.findByName(n,t):t,s=r?r.uuid:t,o=this._actionsByClip[s];return void 0!==o&&o.actionByRoot[i]||null}stopAllAction(){const t=this._actions;for(let e=this._nActiveActions-1;e>=0;--e)t[e].stop();return this}update(t){t*=this.timeScale;const e=this._actions,n=this._nActiveActions,i=this.time+=t,r=Math.sign(t),s=this._accuIndex^=1;for(let o=0;o!==n;++o){e[o]._update(i,t,r,s)}const o=this._bindings,a=this._nActiveBindings;for(let t=0;t!==a;++t)o[t].apply(s);return this}setTime(t){this.time=0;for(let t=0;t<this._actions.length;t++)this._actions[t].time=0;return this.update(t)}getRoot(){return this._root}uncacheClip(t){const e=this._actions,n=t.uuid,i=this._actionsByClip,r=i[n];if(void 0!==r){const t=r.knownActions;for(let n=0,i=t.length;n!==i;++n){const i=t[n];this._deactivateAction(i);const r=i._cacheIndex,s=e[e.length-1];i._cacheIndex=null,i._byClipCacheIndex=null,s._cacheIndex=r,e[r]=s,e.pop(),this._removeInactiveBindingsForAction(i)}delete i[n]}}uncacheRoot(t){const e=t.uuid,n=this._actionsByClip;for(const t in n){const i=n[t].actionByRoot[e];void 0!==i&&(this._deactivateAction(i),this._removeInactiveAction(i))}const i=this._bindingsByRootAndName[e];if(void 0!==i)for(const t in i){const e=i[t];e.restoreOriginalState(),this._removeInactiveBinding(e)}}uncacheAction(t,e){const n=this.existingAction(t,e);null!==n&&(this._deactivateAction(n),this._removeInactiveAction(n))}}BW.prototype._controlInterpolantsResultBuffer=new Float32Array(1);const zW=new class extends aa{constructor(){super(...arguments),this.time=oa.FLOAT(\\\\\\\"$T\\\\\\\",{range:[0,10]}),this.clip=oa.OPERATOR_PATH(\\\\\\\"/ANIM/OUT\\\\\\\",{nodeSelection:{context:Ki.ANIM},dependentOnFoundNode:!1}),this.reset=oa.BUTTON(null,{callback:(t,e)=>{UW.PARAM_CALLBACK_reset(t,e)}})}};class UW extends gG{constructor(){super(...arguments),this.paramsConfig=zW}static type(){return\\\\\\\"animationMixer\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to be animated\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.NEVER)}async cook(t){const e=t[0].objects()[0];e&&(await this.create_mixer_if_required(e),this._update_mixer()),this.setObjects([e])}async create_mixer_if_required(t){if(!this._mixer){const e=await this._create_mixer(t);e&&(this._mixer=e)}}async _create_mixer(t){this.p.clip.isDirty()&&await this.p.clip.compute();if(this.p.clip.found_node_with_context(Ki.ANIM)){return new BW(t)}}_update_mixer(){this._set_mixer_time()}_set_mixer_time(){this.pv.time!=this._previous_time&&(this._mixer&&this._mixer.setTime(this.pv.time),this._previous_time=this.pv.time)}static PARAM_CALLBACK_reset(t,e){e.setDirty(),t.reset_animation_mixer()}async reset_animation_mixer(){this._mixer=void 0,this._previous_time=void 0,this.setDirty()}}class GW extends pG{static type(){return\\\\\\\"attribAddMult\\\\\\\"}cook(t,e){const n=t[0],i=n.attribNamesMatchingMask(e.name);for(let t of i){const i=n.geometries();for(let n of i)this._update_attrib(t,n,e)}return n}_update_attrib(t,e,n){const i=e.getAttribute(t);if(i){const t=i.array,e=n.preAdd,r=n.mult,s=n.postAdd;for(let n=0;n<t.length;n++){const i=t[n];t[n]=(i+e)*r+s}i.needsUpdate=!0}}}GW.DEFAULT_PARAMS={name:\\\\\\\"\\\\\\\",preAdd:0,mult:1,postAdd:0},GW.INPUT_CLONED_STATE=Qi.FROM_NODE;const VW=GW.DEFAULT_PARAMS;const HW=new class extends aa{constructor(){super(...arguments),this.name=oa.STRING(VW.name),this.preAdd=oa.FLOAT(VW.preAdd,{range:[0,1]}),this.mult=oa.FLOAT(VW.mult,{range:[0,1]}),this.postAdd=oa.FLOAT(VW.postAdd,{range:[0,1]})}};class jW extends gG{constructor(){super(...arguments),this.paramsConfig=HW}static type(){return\\\\\\\"attribAddMult\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(GW.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new GW(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}var WW;!function(t){t.Float64BufferAttribute=\\\\\\\"Float64BufferAttribute\\\\\\\",t.Float32BufferAttribute=\\\\\\\"Float32BufferAttribute\\\\\\\",t.Float16BufferAttribute=\\\\\\\"Float16BufferAttribute\\\\\\\",t.Uint32BufferAttribute=\\\\\\\"Uint32BufferAttribute\\\\\\\",t.Int32BufferAttribute=\\\\\\\"Int32BufferAttribute\\\\\\\",t.Uint16BufferAttribute=\\\\\\\"Uint16BufferAttribute\\\\\\\",t.Int16BufferAttribute=\\\\\\\"Int16BufferAttribute\\\\\\\",t.Uint8ClampedBufferAttribute=\\\\\\\"Uint8ClampedBufferAttribute\\\\\\\",t.Uint8BufferAttribute=\\\\\\\"Uint8BufferAttribute\\\\\\\",t.Int8BufferAttribute=\\\\\\\"Int8BufferAttribute\\\\\\\"}(WW||(WW={}));const qW=[WW.Float64BufferAttribute,WW.Float32BufferAttribute,WW.Float16BufferAttribute,WW.Uint32BufferAttribute,WW.Int32BufferAttribute,WW.Uint16BufferAttribute,WW.Int16BufferAttribute,WW.Uint8ClampedBufferAttribute,WW.Uint8BufferAttribute,WW.Int8BufferAttribute],XW={[WW.Float64BufferAttribute]:C.d,[WW.Float32BufferAttribute]:C.c,[WW.Float16BufferAttribute]:C.b,[WW.Uint32BufferAttribute]:C.i,[WW.Int32BufferAttribute]:C.f,[WW.Uint16BufferAttribute]:C.h,[WW.Int16BufferAttribute]:C.e,[WW.Uint8ClampedBufferAttribute]:C.k,[WW.Uint8BufferAttribute]:C.j,[WW.Int8BufferAttribute]:C.g},YW={[WW.Float64BufferAttribute]:Float64Array,[WW.Float32BufferAttribute]:Float32Array,[WW.Float16BufferAttribute]:Uint16Array,[WW.Uint32BufferAttribute]:Uint32Array,[WW.Int32BufferAttribute]:Int32Array,[WW.Uint16BufferAttribute]:Uint16Array,[WW.Int16BufferAttribute]:Int16Array,[WW.Uint8ClampedBufferAttribute]:Uint8Array,[WW.Uint8BufferAttribute]:Uint8Array,[WW.Int8BufferAttribute]:Int8Array};class $W extends pG{static type(){return\\\\\\\"attribCast\\\\\\\"}cook(t,e){const n=t[0],i=n.objectsWithGeo();for(let t of i)this._castGeoAttributes(t.geometry,e);return n}_castGeoAttributes(t,e){const n=qW[e.type],i=XW[n],r=YW[n];if(e.castAttributes){const n=ps.attribNamesMatchingMask(t,e.mask);for(let e of n){const n=t.attributes[e],s=n.array,o=new r(n.count*n.itemSize);for(let t=0;t<s.length;t++)o[t]=s[t];const a=new i(o,1);t.setAttribute(e,a)}}if(e.castIndex){const e=t.getIndex();if(e){const n=e.array,s=new r(e.count*1);for(let t=0;t<n.length;t++)s[t]=n[t];const o=new i(s,1);t.setIndex(o)}}}}$W.DEFAULT_PARAMS={castAttributes:!0,mask:\\\\\\\"*\\\\\\\",castIndex:!1,type:qW.indexOf(WW.Float32BufferAttribute)},$W.INPUT_CLONED_STATE=Qi.FROM_NODE;const JW=$W.DEFAULT_PARAMS;const ZW=new class extends aa{constructor(){super(...arguments),this.castAttributes=oa.BOOLEAN(JW.castAttributes),this.mask=oa.STRING(JW.mask,{visibleIf:{castAttributes:1}}),this.castIndex=oa.BOOLEAN(JW.castIndex),this.type=oa.INTEGER(JW.type,{menu:{entries:qW.map(((t,e)=>({name:t,value:e})))}})}};class QW extends gG{constructor(){super(...arguments),this.paramsConfig=ZW}static type(){return\\\\\\\"attribCast\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState($W.INPUT_CLONED_STATE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.type],(()=>qW[this.pv.type]))}))}))}cook(t){this._operation=this._operation||new $W(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class KW extends pG{static type(){return\\\\\\\"attribCopy\\\\\\\"}cook(t,e){const n=t[0],i=t[1]||n,r=i.attribNamesMatchingMask(e.name);for(let t of r)this.copy_vertex_attribute_between_core_groups(n,i,t,e);return n}copy_vertex_attribute_between_core_groups(t,e,n,i){var r;const s=e.objectsWithGeo(),o=t.objectsWithGeo();if(o.length>s.length)null===(r=this.states)||void 0===r||r.error.set(\\\\\\\"second input does not have enough objects to copy attributes from\\\\\\\");else for(let t=0;t<o.length;t++){const e=o[t].geometry,r=s[t].geometry;this.copy_vertex_attribute_between_geometries(e,r,n,i)}}copy_vertex_attribute_between_geometries(t,e,n,i){var r,s;const o=e.getAttribute(n);if(o){const s=o.itemSize,a=e.getAttribute(\\\\\\\"position\\\\\\\").array.length/3,l=t.getAttribute(\\\\\\\"position\\\\\\\").array.length/3;l>a&&(null===(r=this.states)||void 0===r||r.error.set(\\\\\\\"not enough points in second input\\\\\\\"));const c=i.tnewName?i.newName:n;let u=t.getAttribute(c);if(u)this._fill_dest_array(u,o,i),u.needsUpdate=!0;else{const e=o.array.slice(0,l*s);t.setAttribute(c,new C.c(e,s))}}else null===(s=this.states)||void 0===s||s.error.set(`attribute '${n}' does not exist on second input`)}_fill_dest_array(t,e,n){const i=t.array,r=e.array,s=i.length,o=t.itemSize,a=e.itemSize,l=n.srcOffset,c=n.destOffset;if(t.itemSize==e.itemSize){t.copyArray(e.array);for(let t=0;t<s;t++)i[t]=r[t]}else{const t=i.length/o;if(o<a)for(let e=0;e<t;e++)for(let t=0;t<o;t++)i[e*o+t+c]=r[e*a+t+l];else for(let e=0;e<t;e++)for(let t=0;t<a;t++)i[e*o+t+c]=r[e*a+t+l]}}}KW.DEFAULT_PARAMS={name:\\\\\\\"\\\\\\\",tnewName:!1,newName:\\\\\\\"\\\\\\\",srcOffset:0,destOffset:0},KW.INPUT_CLONED_STATE=[Qi.FROM_NODE,Qi.NEVER];const tq=KW.DEFAULT_PARAMS;const eq=new class extends aa{constructor(){super(...arguments),this.name=oa.STRING(tq.name),this.tnewName=oa.BOOLEAN(tq.tnewName),this.newName=oa.STRING(tq.newName,{visibleIf:{tnewName:1}}),this.srcOffset=oa.INTEGER(tq.srcOffset,{range:[0,3],rangeLocked:[!0,!0]}),this.destOffset=oa.INTEGER(tq.destOffset,{range:[0,3],rangeLocked:[!0,!0]})}};class nq extends gG{constructor(){super(...arguments),this.paramsConfig=eq}static type(){return\\\\\\\"attribCopy\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to copy attributes to\\\\\\\",\\\\\\\"geometry to copy attributes from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1,2),this.io.inputs.initInputsClonedState(KW.INPUT_CLONED_STATE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.name,this.p.tnewName,this.p.newName],(()=>this.pv.tnewName?`${this.pv.name} -> ${this.pv.newName}`:this.pv.name))}))}))}cook(t){this._operation=this._operation||new KW(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class iq extends pG{static type(){return\\\\\\\"attribCreate\\\\\\\"}cook(t,e){var n;const i=t[0];return e.name&&\\\\\\\"\\\\\\\"!=e.name.trim()?this._add_attribute(Ir[e.class],i,e):null===(n=this.states)||void 0===n||n.error.set(\\\\\\\"attribute name is not valid\\\\\\\"),i}async _add_attribute(t,e,n){const i=kr[n.type];switch(t){case Pr.VERTEX:return void await this.add_point_attribute(i,e,n);case Pr.OBJECT:return void await this.add_object_attribute(i,e,n)}ar.unreachable(t)}async add_point_attribute(t,e,n){const i=e.coreObjects();switch(t){case Dr.NUMERIC:for(let t=0;t<i.length;t++)await this.add_numeric_attribute_to_points(i[t],n);return;case Dr.STRING:for(let t=0;t<i.length;t++)await this.add_string_attribute_to_points(i[t],n);return}ar.unreachable(t)}async add_object_attribute(t,e,n){const i=e.coreObjectsFromGroup(n.group);switch(t){case Dr.NUMERIC:return void await this.add_numeric_attribute_to_object(i,n);case Dr.STRING:return void await this.add_string_attribute_to_object(i,n)}ar.unreachable(t)}async add_numeric_attribute_to_points(t,e){if(!t.coreGeometry())return;const n=[e.value1,e.value2,e.value3,e.value4][e.size-1];t.addNumericVertexAttrib(e.name,e.size,n)}async add_numeric_attribute_to_object(t,e){const n=[e.value1,e.value2,e.value3,e.value4][e.size-1];for(let i of t)i.setAttribValue(e.name,n)}async add_string_attribute_to_points(t,e){const n=t.pointsFromGroup(e.group),i=e.string,r=new Array(n.length);for(let t=0;t<n.length;t++)r[t]=i;const s=Wr.arrayToIndexedArrays(r),o=t.coreGeometry();o&&o.setIndexedAttribute(e.name,s.values,s.indices)}async add_string_attribute_to_object(t,e){const n=e.string;for(let i of t)i.setAttribValue(e.name,n)}}iq.DEFAULT_PARAMS={group:\\\\\\\"\\\\\\\",class:Ir.indexOf(Pr.VERTEX),type:kr.indexOf(Dr.NUMERIC),name:\\\\\\\"new_attrib\\\\\\\",size:1,value1:0,value2:new d.a(0,0),value3:new p.a(0,0,0),value4:new _.a(0,0,0,0),string:\\\\\\\"\\\\\\\"},iq.INPUT_CLONED_STATE=Qi.FROM_NODE;const rq=[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\",\\\\\\\"w\\\\\\\"],sq=iq.DEFAULT_PARAMS;const oq=new class extends aa{constructor(){super(...arguments),this.group=oa.STRING(sq.group),this.class=oa.INTEGER(sq.class,{menu:{entries:Fr}}),this.type=oa.INTEGER(sq.type,{menu:{entries:Br}}),this.name=oa.STRING(sq.name),this.size=oa.INTEGER(sq.size,{range:[1,4],rangeLocked:[!0,!0],visibleIf:{type:Dr.NUMERIC}}),this.value1=oa.FLOAT(sq.value1,{visibleIf:{type:Dr.NUMERIC,size:1},expression:{forEntities:!0}}),this.value2=oa.VECTOR2(sq.value2,{visibleIf:{type:Dr.NUMERIC,size:2},expression:{forEntities:!0}}),this.value3=oa.VECTOR3(sq.value3,{visibleIf:{type:Dr.NUMERIC,size:3},expression:{forEntities:!0}}),this.value4=oa.VECTOR4(sq.value4,{visibleIf:{type:Dr.NUMERIC,size:4},expression:{forEntities:!0}}),this.string=oa.STRING(sq.string,{visibleIf:{type:Dr.STRING},expression:{forEntities:!0}})}};class aq extends gG{constructor(){super(...arguments),this.paramsConfig=oq,this._x_arrays_by_geometry_uuid={},this._y_arrays_by_geometry_uuid={},this._z_arrays_by_geometry_uuid={},this._w_arrays_by_geometry_uuid={}}static type(){return\\\\\\\"attribCreate\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(iq.INPUT_CLONED_STATE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.name])}))}))}cook(t){if(this._is_using_expression())this.pv.name&&\\\\\\\"\\\\\\\"!=this.pv.name.trim()?this._add_attribute(Ir[this.pv.class],t[0]):this.states.error.set(\\\\\\\"attribute name is not valid\\\\\\\");else{this._operation=this._operation||new iq(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}async _add_attribute(t,e){const n=kr[this.pv.type];switch(t){case Pr.VERTEX:return await this.add_point_attribute(n,e),this.setCoreGroup(e);case Pr.OBJECT:return await this.add_object_attribute(n,e),this.setCoreGroup(e)}ar.unreachable(t)}async add_point_attribute(t,e){const n=e.coreObjects();switch(t){case Dr.NUMERIC:for(let t=0;t<n.length;t++)await this.add_numeric_attribute_to_points(n[t]);return;case Dr.STRING:for(let t=0;t<n.length;t++)await this.add_string_attribute_to_points(n[t]);return}ar.unreachable(t)}async add_object_attribute(t,e){const n=e.coreObjectsFromGroup(this.pv.group);switch(t){case Dr.NUMERIC:return void await this.add_numeric_attribute_to_object(n);case Dr.STRING:return void await this.add_string_attribute_to_object(n)}ar.unreachable(t)}async add_numeric_attribute_to_points(t){const e=t.coreGeometry();if(!e)return;const n=t.pointsFromGroup(this.pv.group),i=[this.p.value1,this.p.value2,this.p.value3,this.p.value4][this.pv.size-1];if(i.hasExpression()){e.hasAttrib(this.pv.name)||e.addNumericAttrib(this.pv.name,this.pv.size,i.value);const t=e.geometry(),r=t.getAttribute(this.pv.name).array;if(1==this.pv.size)this.p.value1.expressionController&&await this.p.value1.expressionController.compute_expression_for_points(n,((t,e)=>{r[t.index()*this.pv.size+0]=e}));else{let e=[this.p.value2,this.p.value3,this.p.value4][this.pv.size-2].components;const i=new Array(e.length);let s;const o=[this._x_arrays_by_geometry_uuid,this._y_arrays_by_geometry_uuid,this._z_arrays_by_geometry_uuid,this._w_arrays_by_geometry_uuid];for(let a=0;a<e.length;a++)if(s=e[a],s.hasExpression()&&s.expressionController)i[a]=this._init_array_if_required(t,o[a],n.length),await s.expressionController.compute_expression_for_points(n,((t,e)=>{i[a][t.index()]=e}));else{const t=s.value;for(let e of n)r[e.index()*this.pv.size+a]=t}for(let t=0;t<i.length;t++){const e=i[t];if(e)for(let n=0;n<e.length;n++)r[n*this.pv.size+t]=e[n]}}}}async add_numeric_attribute_to_object(t){if([this.p.value1,this.p.value2,this.p.value3,this.p.value4][this.pv.size-1].hasExpression())if(1==this.pv.size)this.p.value1.expressionController&&await this.p.value1.expressionController.compute_expression_for_objects(t,((t,e)=>{t.setAttribValue(this.pv.name,e)}));else{let e=[this.p.value2,this.p.value3,this.p.value4][this.pv.size-2].components,n={};const i=this._vector_by_attrib_size(this.pv.size);if(i){for(let e of t)n[e.index()]=i;for(let i=0;i<e.length;i++){const r=e[i],s=rq[i];if(r.hasExpression()&&r.expressionController)await r.expressionController.compute_expression_for_objects(t,((t,e)=>{n[t.index()][s]=e}));else for(let e of t){n[e.index()][s]=r.value}}for(let e=0;e<t.length;e++){const i=t[e],r=n[i.index()];i.setAttribValue(this.pv.name,r)}}}}_vector_by_attrib_size(t){switch(t){case 2:return new d.a(0,0);case 3:return new p.a(0,0,0);case 4:return new _.a(0,0,0,0)}}async add_string_attribute_to_points(t){const e=t.pointsFromGroup(this.pv.group),n=this.p.string,i=new Array(e.length);n.hasExpression()&&n.expressionController&&await n.expressionController.compute_expression_for_points(e,((t,e)=>{i[t.index()]=e}));const r=Wr.arrayToIndexedArrays(i),s=t.coreGeometry();s&&s.setIndexedAttribute(this.pv.name,r.values,r.indices)}async add_string_attribute_to_object(t){const e=this.p.string;e.hasExpression()&&e.expressionController&&await e.expressionController.compute_expression_for_objects(t,((t,e)=>{t.setAttribValue(this.pv.name,e)}))}_init_array_if_required(t,e,n){const i=t.uuid,r=e[i];return r?r.length<n&&(e[i]=new Array(n)):e[i]=new Array(n),e[i]}_is_using_expression(){switch(kr[this.pv.type]){case Dr.NUMERIC:return[this.p.value1,this.p.value2,this.p.value3,this.p.value4][this.pv.size-1].hasExpression();case Dr.STRING:return this.p.string.hasExpression()}}setType(t){this.p.type.set(kr.indexOf(t))}}const lq=new class extends aa{constructor(){super(...arguments),this.class=oa.INTEGER(Pr.VERTEX,{menu:{entries:Fr}}),this.name=oa.STRING(\\\\\\\"\\\\\\\")}};class cq extends gG{constructor(){super(...arguments),this.paramsConfig=lq}static type(){return\\\\\\\"attribDelete\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to delete attributes from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.name])}))}))}cook(t){const e=t[0],n=e.attribNamesMatchingMask(this.pv.name);for(let t of n)switch(this.pv.class){case Pr.VERTEX:this.delete_vertex_attribute(e,t);case Pr.OBJECT:this.delete_object_attribute(e,t)}this.setCoreGroup(e)}delete_vertex_attribute(t,e){for(let n of t.objects())n.traverse((t=>{const n=t;if(n.geometry){new ps(n.geometry).deleteAttribute(e)}}))}delete_object_attribute(t,e){for(let n of t.objects()){let t=0;n.traverse((n=>{new vs(n,t).deleteAttribute(e),t++}))}}}class uq{set_attrib(t){const e=t.geometry,n=t.targetAttribSize;if(n<1||n>4)return;const i=t.add,r=t.mult,s=this._data_from_texture(t.texture);if(!s)return;const{data:o,resx:a,resy:l}=s,c=o.length/(a*l),u=e.getAttribute(t.uvAttribName).array,h=u.length/2,d=new Array(h*n);let p,_,m,f,g,v,y,x,b;const w=rs.clamp;for(v=0;v<h;v++)for(p=2*v,_=w(u[p],0,1),m=w(u[p+1],0,1),f=Math.floor((a-1)*_),g=Math.floor((l-1)*(1-m)),y=g*a+f,b=0;b<n;b++)x=o[c*y+b],d[v*n+b]=r*x+i;const T=Wr.remapName(t.targetAttribName),A=new Float32Array(d);e.setAttribute(T,new C.a(A,n))}_data_from_texture(t){if(t.image)return t.image.data?this._data_from_data_texture(t):this._data_from_default_texture(t)}_data_from_default_texture(t){const e=t.image.width,n=t.image.height;return{data:Rf.data_from_image(t.image).data,resx:e,resy:n}}_data_from_data_texture(t){return{data:t.image.data,resx:t.image.width,resy:t.image.height}}}class hq extends pG{static type(){return\\\\\\\"attribFromTexture\\\\\\\"}async cook(t,e){var n;const i=t[0],r=e.texture.nodeWithContext(Ki.COP,null===(n=this.states)||void 0===n?void 0:n.error);if(!r)return i;const s=(await r.compute()).texture();for(let t of i.coreObjects())this._set_position_from_data_texture(t,s,e);return i}_set_position_from_data_texture(t,e,n){var i,r;const s=null===(i=t.coreGeometry())||void 0===i?void 0:i.geometry();if(!s)return;if(null==s.getAttribute(n.uvAttrib))return void(null===(r=this.states)||void 0===r||r.error.set(`param '${n.uvAttrib} not found'`));(new uq).set_attrib({geometry:s,texture:e,uvAttribName:n.uvAttrib,targetAttribName:n.attrib,targetAttribSize:n.attribSize,add:n.add,mult:n.mult})}}hq.DEFAULT_PARAMS={texture:new vi(gi.EMPTY),uvAttrib:\\\\\\\"uv\\\\\\\",attrib:\\\\\\\"pscale\\\\\\\",attribSize:1,add:0,mult:1},hq.INPUT_CLONED_STATE=Qi.FROM_NODE;const dq=hq.DEFAULT_PARAMS;const pq=new class extends aa{constructor(){super(...arguments),this.texture=oa.NODE_PATH(dq.texture.path(),{nodeSelection:{context:Ki.COP}}),this.uvAttrib=oa.STRING(dq.uvAttrib),this.attrib=oa.STRING(dq.attrib),this.attribSize=oa.INTEGER(dq.attribSize,{range:[1,3],rangeLocked:[!0,!0]}),this.add=oa.FLOAT(dq.add),this.mult=oa.FLOAT(dq.mult)}};class _q extends gG{constructor(){super(...arguments),this.paramsConfig=pq}static type(){return\\\\\\\"attribFromTexture\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.attrib])}))}))}async cook(t){this._operation=this._operation||new hq(this.scene(),this.states);const e=await this._operation.cook(t,this.pv);this.setCoreGroup(e)}}var mq;!function(t){t.MIN_MAX_TO_01=\\\\\\\"min/max to 0/1\\\\\\\",t.VECTOR_TO_LENGTH_1=\\\\\\\"vectors to length 1\\\\\\\"}(mq||(mq={}));const fq=[mq.MIN_MAX_TO_01,mq.VECTOR_TO_LENGTH_1];class gq extends pG{constructor(){super(...arguments),this.min3=new p.a,this.max3=new p.a,this._vec=new p.a}static type(){return\\\\\\\"attribNormalize\\\\\\\"}cook(t,e){const n=t[0],i=t[0].objectsWithGeo(),r=sr.attribNames(e.name);for(let t of i){const n=t.geometry;for(let t of r){const i=n.getAttribute(t);if(i){let t=i;e.changeName&&\\\\\\\"\\\\\\\"!=e.newName&&(t=n.getAttribute(e.newName),t&&(t.needsUpdate=!0),t=t||i.clone()),this._normalize_attribute(i,t,e)}}}return n}_normalize_attribute(t,e,n){switch(fq[n.mode]){case mq.MIN_MAX_TO_01:return this._normalize_from_min_max_to_01(t,e);case mq.VECTOR_TO_LENGTH_1:return this._normalize_vectors(t,e)}}_normalize_from_min_max_to_01(t,e){const n=t.itemSize,i=t.array,r=e.array;switch(n){case 1:{const t=Math.min(...i),e=Math.max(...i);for(let n=0;n<r.length;n++)r[n]=(i[n]-t)/(e-t);return}case 3:{const t=i.length/n,e=new Array(t),s=new Array(t),o=new Array(t);let a=0;for(let r=0;r<t;r++)a=r*n,e[r]=i[a+0],s[r]=i[a+1],o[r]=i[a+2];this.min3.set(Math.min(...e),Math.min(...s),Math.min(...o)),this.max3.set(Math.max(...e),Math.max(...s),Math.max(...o));for(let i=0;i<t;i++)a=i*n,r[a+0]=(e[i]-this.min3.x)/(this.max3.x-this.min3.x),r[a+1]=(s[i]-this.min3.y)/(this.max3.y-this.min3.y),r[a+2]=(o[i]-this.min3.z)/(this.max3.z-this.min3.z);return}}}_normalize_vectors(t,e){const n=t.array,i=e.array,r=n.length;if(3==t.itemSize)for(let t=0;t<r;t+=3)this._vec.fromArray(n,t),this._vec.normalize(),this._vec.toArray(i,t)}}gq.DEFAULT_PARAMS={mode:0,name:\\\\\\\"position\\\\\\\",changeName:!1,newName:\\\\\\\"\\\\\\\"},gq.INPUT_CLONED_STATE=Qi.FROM_NODE;const vq=gq.DEFAULT_PARAMS;const yq=new class extends aa{constructor(){super(...arguments),this.mode=oa.INTEGER(vq.mode,{menu:{entries:fq.map(((t,e)=>({name:t,value:e})))}}),this.name=oa.STRING(vq.name),this.changeName=oa.BOOLEAN(vq.changeName),this.newName=oa.STRING(vq.newName,{visibleIf:{changeName:1}})}};class xq extends gG{constructor(){super(...arguments),this.paramsConfig=yq}static type(){return\\\\\\\"attribNormalize\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(gq.INPUT_CLONED_STATE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.name])}))}))}set_mode(t){this.p.mode.set(fq.indexOf(t))}cook(t){this._operation=this._operation||new gq(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}var bq;!function(t){t[t.MIN=0]=\\\\\\\"MIN\\\\\\\",t[t.MAX=1]=\\\\\\\"MAX\\\\\\\",t[t.FIRST_FOUND=2]=\\\\\\\"FIRST_FOUND\\\\\\\"}(bq||(bq={}));class wq extends pG{constructor(){super(...arguments),this._values_per_attrib_name={},this._filtered_values_per_attrib_name={}}static type(){return\\\\\\\"attribPromote\\\\\\\"}cook(t,e){this._core_group=t[0],this._values_per_attrib_name={},this._filtered_values_per_attrib_name={};for(let t of this._core_group.coreObjects())this._core_object=t,this.find_values(e),this.filter_values(e),this.set_values(e);return this._core_group}find_values(t){const e=sr.attribNames(t.name);for(let n of e)this._find_values_for_attrib_name(n,t)}_find_values_for_attrib_name(t,e){switch(e.classFrom){case Pr.VERTEX:return this.find_values_from_points(t,e);case Pr.OBJECT:return this.find_values_from_object(t,e)}}find_values_from_points(t,e){if(this._core_object){const e=this._core_object.points(),n=e[0];if(n&&!n.isAttribIndexed(t)){const n=new Array(e.length);let i;for(let r=0;r<e.length;r++)i=e[r],n[r]=i.attribValue(t);this._values_per_attrib_name[t]=n}}}find_values_from_object(t,e){this._values_per_attrib_name[t]=[],this._core_object&&this._values_per_attrib_name[t].push(this._core_object.attribValue(t))}filter_values(t){const e=Object.keys(this._values_per_attrib_name);for(let n of e){const e=this._values_per_attrib_name[n];switch(t.mode){case bq.MIN:this._filtered_values_per_attrib_name[n]=f.min(e);break;case bq.MAX:this._filtered_values_per_attrib_name[n]=f.max(e);break;case bq.FIRST_FOUND:this._filtered_values_per_attrib_name[n]=e[0]}}}set_values(t){const e=Object.keys(this._filtered_values_per_attrib_name);for(let n of e){const e=this._filtered_values_per_attrib_name[n];if(null!=e)switch(t.classTo){case Pr.VERTEX:this.set_values_to_points(n,e,t);break;case Pr.OBJECT:this.set_values_to_object(n,e,t)}}}set_values_to_points(t,e,n){if(this._core_group&&this._core_object){if(!this._core_group.hasAttrib(t)){const n=Wr.attribSizeFromValue(e);n&&this._core_group.addNumericVertexAttrib(t,n,e)}const n=this._core_object.points();for(let i of n)i.setAttribValue(t,e)}}set_values_to_object(t,e,n){var i;null===(i=this._core_object)||void 0===i||i.setAttribValue(t,e)}}wq.DEFAULT_PARAMS={classFrom:Pr.VERTEX,classTo:Pr.OBJECT,mode:bq.FIRST_FOUND,name:\\\\\\\"\\\\\\\"},wq.INPUT_CLONED_STATE=Qi.FROM_NODE;const Tq=[{name:\\\\\\\"min\\\\\\\",value:bq.MIN},{name:\\\\\\\"max\\\\\\\",value:bq.MAX},{name:\\\\\\\"first_found\\\\\\\",value:bq.FIRST_FOUND}],Aq=wq.DEFAULT_PARAMS;const Eq=new class extends aa{constructor(){super(...arguments),this.classFrom=oa.INTEGER(Aq.classFrom,{menu:{entries:Fr}}),this.classTo=oa.INTEGER(Aq.classTo,{menu:{entries:Fr}}),this.mode=oa.INTEGER(Aq.mode,{menu:{entries:Tq}}),this.name=oa.STRING(Aq.name)}};class Mq extends gG{constructor(){super(...arguments),this.paramsConfig=Eq}static type(){return\\\\\\\"attribPromote\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(wq.INPUT_CLONED_STATE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.name,this.p.classFrom,this.p.classTo],(()=>{if(\\\\\\\"\\\\\\\"!=this.pv.name){const t=Fr.filter((t=>t.value==this.pv.classFrom))[0].name,e=Fr.filter((t=>t.value==this.pv.classTo))[0].name;return`${this.pv.name} (${t} -> ${e})`}return\\\\\\\"\\\\\\\"}))}))}))}cook(t){this._operation=this._operation||new wq(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const Sq=new class extends aa{constructor(){super(...arguments),this.name=oa.STRING(),this.ramp=oa.RAMP(),this.changeName=oa.BOOLEAN(0),this.newName=oa.STRING(\\\\\\\"\\\\\\\",{visibleIf:{changeName:1}})}};class Cq extends gG{constructor(){super(...arguments),this.paramsConfig=Sq}static type(){return\\\\\\\"attribRemap\\\\\\\"}initializeNode(){this.io.inputs.setCount(1)}cook(t){const e=t[0];this._remap_attribute(e),this.setCoreGroup(e)}_remap_attribute(t){const e=t.points();if(0===e.length)return;if(\\\\\\\"\\\\\\\"===this.pv.name)return;const n=e[0].attribSize(this.pv.name),i=e.map((t=>t.attribValue(this.pv.name)));let r=new Array(e.length);this._get_remaped_values(n,i,r);let s=this.pv.name;this.pv.changeName&&(s=this.pv.newName,t.hasAttrib(s)||t.addNumericVertexAttrib(s,n,0));let o=0;for(let t of r){e[o].setAttribValue(s,t),o++}}_get_remaped_values(t,e,n){switch(t){case zr.FLOAT:return this._get_normalized_float(e,n);case zr.VECTOR2:return this._get_normalized_vector2(e,n);case zr.VECTOR3:return this._get_normalized_vector3(e,n);case zr.VECTOR4:return this._get_normalized_vector4(e,n)}ar.unreachable(t)}_get_normalized_float(t,e){const n=t,i=this.p.ramp;for(let t=0;t<n.length;t++){const r=n[t],s=i.value_at_position(r);e[t]=s}}_get_normalized_vector2(t,e){const n=t,i=this.p.ramp;for(let t=0;t<n.length;t++){const r=n[t],s=new d.a(i.value_at_position(r.x),i.value_at_position(r.y));e[t]=s}}_get_normalized_vector3(t,e){const n=t,i=this.p.ramp;for(let t=0;t<n.length;t++){const r=n[t],s=new p.a(i.value_at_position(r.x),i.value_at_position(r.y),i.value_at_position(r.z));e[t]=s}}_get_normalized_vector4(t,e){const n=t,i=this.p.ramp;for(let t=0;t<n.length;t++){const r=n[t],s=new _.a(i.value_at_position(r.x),i.value_at_position(r.y),i.value_at_position(r.z),i.value_at_position(r.w));e[t]=s}}}const Nq=new class extends aa{constructor(){super(...arguments),this.class=oa.INTEGER(Pr.VERTEX,{menu:{entries:Fr}}),this.oldName=oa.STRING(),this.newName=oa.STRING()}};class Lq extends gG{constructor(){super(...arguments),this.paramsConfig=Nq}static type(){return\\\\\\\"attribRename\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.oldName,this.p.newName],(()=>\\\\\\\"\\\\\\\"!=this.pv.oldName&&\\\\\\\"\\\\\\\"!=this.pv.newName?`${this.pv.oldName} -> ${this.pv.newName}`:\\\\\\\"\\\\\\\"))}))}))}cook(t){const e=t[0];e.renameAttrib(this.pv.oldName,this.pv.newName,this.pv.class),this.setCoreGroup(e)}}var Oq=n(18);class Rq{constructor(t,e=0){this._bbox=t,this._level=e,this._leaves_by_octant={},this._points_by_octant_id={},this._leaves=[],this._bounding_boxes_by_octant={},this._bounding_boxes_by_octant_prepared=!1,this._center=this._bbox.max.clone().add(this._bbox.min).multiplyScalar(.5)}level(){return this._level}traverse(t){t(this);Object.values(this._leaves_by_octant).forEach((e=>{e.traverse(t)}))}intersects_sphere(t){return!!this._bbox&&this._bbox.intersectsSphere(t)}points_in_sphere(t,e){if(0==this._leaves.length){Object.values(this._points_by_octant_id).flat().filter((e=>t.containsPoint(e.position()))).forEach((t=>{e.push(t)}))}else{this._leaves.filter((e=>e.intersects_sphere(t))).forEach((n=>n.points_in_sphere(t,e)))}}bounding_box(){return this._bbox}set_points(t){this._points_by_octant_id={};for(let e of t)this.add_point(e);const e=Object.keys(this._points_by_octant_id);e.length>1&&e.forEach((t=>{this.create_leaf(t)}))}create_leaf(t){const e=this._leaf_bbox(t),n=new Rq(e,this._level+1);this._leaves_by_octant[t]=n,this._leaves.push(n),n.set_points(this._points_by_octant_id[t])}add_point(t){const e=this._octant_id(t.position());null==this._points_by_octant_id[e]&&(this._points_by_octant_id[e]=[]),this._points_by_octant_id[e].push(t)}_octant_id(t){return`${t.x>this._center.x?1:0}${t.y>this._center.y?1:0}${t.z>this._center.z?1:0}`}_leaf_bbox(t){return this._bounding_boxes_by_octant_prepared||(this._prepare_leaves_bboxes(),this._bounding_boxes_by_octant_prepared=!0),this._bounding_boxes_by_octant[t]}_bbox_center(t,e,n){const i=this._bbox.min.clone();return t&&(i.x=this._bbox.max.x),e&&(i.y=this._bbox.max.y),n&&(i.z=this._bbox.max.z),i.clone().add(this._center).multiplyScalar(.5)}_prepare_leaves_bboxes(){const t=[];t.push(this._bbox_center(0,0,0)),t.push(this._bbox_center(0,0,1)),t.push(this._bbox_center(0,1,0)),t.push(this._bbox_center(0,1,1)),t.push(this._bbox_center(1,0,0)),t.push(this._bbox_center(1,0,1)),t.push(this._bbox_center(1,1,0)),t.push(this._bbox_center(1,1,1));const e=this._bbox.max.clone().sub(this._bbox.min).multiplyScalar(.25);for(let n of t){const t=this._octant_id(n),i=new XB.a(n.clone().sub(e),n.clone().add(e));this._bounding_boxes_by_octant[t]=i}}}class Pq{constructor(t){this._root=new Rq(t)}set_points(t){this._root.set_points(t)}traverse(t){this._root.traverse(t)}find_points(t,e,n){const i=new Oq.a(t,e);let r=[];return this._root.intersects_sphere(i)&&this._root.points_in_sphere(i,r),null==n||r.length>n&&(r=f.sortBy(r,(e=>e.position().distanceTo(t))),r=r.slice(0,n)),r}}class Iq{constructor(t={}){this._array_index=0,this._count=0,this._current_count_index=0,this._resolve=null,this._max_time_per_chunk=t.max_time_per_chunk||10,this._check_every_interations=t.check_every_interations||100}async startWithCount(t,e){if(this._count=t,this._current_count_index=0,this._iteratee_method_count=e,this._bound_next_with_count=this.nextWithCount.bind(this),this._resolve)throw\\\\\\\"an iterator cannot be started twice\\\\\\\";return new Promise(((t,e)=>{this._resolve=t,this.nextWithCount()}))}nextWithCount(){const t=ai.performance.performanceManager(),e=t.now();if(this._iteratee_method_count&&this._bound_next_with_count)for(;this._current_count_index<this._count;)if(this._iteratee_method_count(this._current_count_index),this._current_count_index++,this._current_count_index%this._check_every_interations==0&&t.now()-e>this._max_time_per_chunk){setTimeout(this._bound_next_with_count,1);break}this._current_count_index>=this._count&&this._resolve&&this._resolve()}async startWithArray(t,e){if(this._array=t,this._array_index=0,this._iteratee_method_array=e,this._bound_next_with_array=this.nextWithArray.bind(this),this._resolve)throw\\\\\\\"an iterator cannot be started twice\\\\\\\";return new Promise(((t,e)=>{this._resolve=t,this.nextWithArray()}))}nextWithArray(){const t=ai.performance.performanceManager(),e=t.now();if(this._iteratee_method_array&&this._bound_next_with_array&&this._array)for(;this._current_array_element=this._array[this._array_index];)if(this._iteratee_method_array(this._current_array_element,this._array_index),this._array_index++,this._array_index%this._check_every_interations==0&&t.now()-e>this._max_time_per_chunk){setTimeout(this._bound_next_with_array,1);break}void 0===this._current_array_element&&this._resolve&&this._resolve()}}const Fq=new class extends aa{constructor(){super(...arguments),this.srcGroup=oa.STRING(),this.destGroup=oa.STRING(),this.name=oa.STRING(),this.maxSamplesCount=oa.INTEGER(1,{range:[1,10],rangeLocked:[!0,!1]}),this.distanceThreshold=oa.FLOAT(1),this.blendWidth=oa.FLOAT(0)}};class Dq extends gG{constructor(){super(...arguments),this.paramsConfig=Fq}static type(){return\\\\\\\"attribTransfer\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to transfer attributes to\\\\\\\",\\\\\\\"geometry to transfer attributes from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(2),this.io.inputs.initInputsClonedState([Qi.FROM_NODE,Qi.NEVER])}async cook(t){this._core_group_dest=t[0];const e=this._core_group_dest.pointsFromGroup(this.pv.destGroup);this._core_group_src=t[1],this._attrib_names=this._core_group_src.attribNamesMatchingMask(this.pv.name),this._error_if_attribute_not_found_on_second_input(),this._build_octree_if_required(this._core_group_src),this._add_attribute_if_required(),await this._transfer_attributes(e),this.setCoreGroup(this._core_group_dest)}_error_if_attribute_not_found_on_second_input(){for(let t of this._attrib_names)this._core_group_src.hasAttrib(t)||this.states.error.set(`attribute '${t}' not found on second input`)}_build_octree_if_required(t){const e=null==this._octree_timestamp||this._octree_timestamp!==t.timestamp();if(this._prev_param_srcGroup!==this.pv.srcGroup||e){this._octree_timestamp=t.timestamp(),this._prev_param_srcGroup=this.pv.srcGroup;const e=this._core_group_src.pointsFromGroup(this.pv.srcGroup);this._octree=new Pq(this._core_group_src.boundingBox()),this._octree.set_points(e)}}_add_attribute_if_required(){for(let t of this._attrib_names)if(!this._core_group_dest.hasAttrib(t)){const e=this._core_group_src.attribSize(t);this._core_group_dest.addNumericVertexAttrib(t,e,0)}}async _transfer_attributes(t){const e=new Iq;await e.startWithArray(t,this._transfer_attributes_for_point.bind(this))}_transfer_attributes_for_point(t){var e;const n=this.pv.distanceThreshold+this.pv.blendWidth,i=(null===(e=this._octree)||void 0===e?void 0:e.find_points(t.position(),n,this.pv.maxSamplesCount))||[];for(let e of this._attrib_names)this._interpolate_points(t,i,e)}_interpolate_points(t,e,n){let i;i=class{static perform(t,e,n,i,r){switch(e.length){case 0:return t.attribValue(n);case 1:return this._interpolate_with_1_point(t,e[0],n,i,r);default:return this._interpolate_with_multiple_points(t,e,n,i,r)}}static _interpolate_with_1_point(t,e,n,i,r){const s=t.position(),o=e.position(),a=s.distanceTo(o),l=e.attribValue(n);return m.isNumber(l)?this._weighted_value_from_distance(t,l,n,a,i,r):(console.warn(\\\\\\\"value is not a number\\\\\\\",l),0)}static _weight_from_distance(t,e,n){return(t-e)/n}static _weighted_value_from_distance(t,e,n,i,r,s){if(i<=r)return e;{const o=t.attribValue(n);if(m.isNumber(o)){const t=this._weight_from_distance(i,r,s);return t*o+(1-t)*e}return console.warn(\\\\\\\"value is not a number\\\\\\\",o),0}}static _interpolate_with_multiple_points(t,e,n,i,r){const s=e.map((e=>this._interpolate_with_1_point(t,e,n,i,r)));return f.max(s)||0}static weights(t,e){switch(e.length){case 1:return 1;case 2:return this._weights_from_2(t,e);default:return e=e.slice(0,3),this._weights_from_3(t,e)}}static _weights_from_2(t,e){const n=e.map((e=>t.distanceTo(e))),i=f.sum(n);return[n[1]/i,n[0]/i]}static _weights_from_3(t,e){const n=e.map((e=>t.distanceTo(e))),i=f.sum([n[0]*n[1],n[0]*n[2],n[1]*n[2]]);return[n[1]*n[2]/i,n[0]*n[2]/i,n[0]*n[1]/i]}}.perform(t,e,n,this.pv.distanceThreshold,this.pv.blendWidth),null!=i&&t.setAttribValue(n,i)}}const kq=new class extends aa{constructor(){super(...arguments),this.stepSize=oa.FLOAT(.1)}};class Bq extends gG{constructor(){super(...arguments),this.paramsConfig=kq}static type(){return\\\\\\\"bboxScatter\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to create points from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1)}cook(t){const e=t[0],n=this.pv.stepSize,i=e.boundingBox(),r=i.min,s=i.max,o=[];for(let t=r.x;t<=s.x;t+=n)for(let e=r.y;e<=s.y;e+=n)for(let i=r.z;i<=s.z;i+=n)o.push(t),o.push(e),o.push(i);const a=new S.a;a.setAttribute(\\\\\\\"position\\\\\\\",new C.a(new Float32Array(o),3)),this.setGeometry(a,Sr.POINTS)}}const zq=new class extends aa{constructor(){super(...arguments),this.attribName=oa.STRING(\\\\\\\"position\\\\\\\"),this.blend=oa.FLOAT(.5,{range:[0,1],rangeLocked:[!0,!0]})}};class Uq extends gG{constructor(){super(...arguments),this.paramsConfig=zq}static type(){return\\\\\\\"blend\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to blend from\\\\\\\",\\\\\\\"geometry to blend to\\\\\\\"]}initializeNode(){this.io.inputs.setCount(2),this.io.inputs.initInputsClonedState([Qi.FROM_NODE,Qi.NEVER])}cook(t){const e=t[0],n=t[1],i=e.objects(),r=n.objects();let s,o;for(let t=0;t<i.length;t++)s=i[t],o=r[t],this.blend(s,o,this.pv.blend);this.setCoreGroup(e)}blend(t,e,n){const i=t.geometry,r=e.geometry;if(null==i||null==r)return;const s=i.getAttribute(this.pv.attribName),o=r.getAttribute(this.pv.attribName);if(null==s||null==o)return;const a=s.array,l=o.array;let c,u;for(let t=0;t<a.length;t++)c=a[t],u=l[t],null!=u&&(a[t]=(1-n)*c+n*u);i.computeVertexNormals()}}class Gq{constructor(){this.polygons=[]}clone(){let t=new Gq;return t.polygons=this.polygons.map((function(t){return t.clone()})),t}toPolygons(){return this.polygons}union(t){let e=new Yq(this.clone().polygons),n=new Yq(t.clone().polygons);return e.clipTo(n),n.clipTo(e),n.invert(),n.clipTo(e),n.invert(),e.build(n.allPolygons()),Gq.fromPolygons(e.allPolygons())}subtract(t){let e=new Yq(this.clone().polygons),n=new Yq(t.clone().polygons);return e.invert(),e.clipTo(n),n.clipTo(e),n.invert(),n.clipTo(e),n.invert(),e.build(n.allPolygons()),e.invert(),Gq.fromPolygons(e.allPolygons())}intersect(t){let e=new Yq(this.clone().polygons),n=new Yq(t.clone().polygons);return e.invert(),n.clipTo(e),n.invert(),e.clipTo(n),n.clipTo(e),e.build(n.allPolygons()),e.invert(),Gq.fromPolygons(e.allPolygons())}inverse(){let t=this.clone();return t.polygons.forEach((t=>t.flip())),t}}Gq.fromPolygons=function(t){let e=new Gq;return e.polygons=t,e};class Vq{constructor(t=0,e=0,n=0){this.x=t,this.y=e,this.z=n}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}clone(){return new Vq(this.x,this.y,this.z)}negate(){return this.x*=-1,this.y*=-1,this.z*=-1,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}times(t){return this.x*=t,this.y*=t,this.z*=t,this}dividedBy(t){return this.x/=t,this.y/=t,this.z/=t,this}lerp(t,e){return this.add(Hq.copy(t).sub(this).times(e))}unit(){return this.dividedBy(this.length())}length(){return Math.sqrt(this.x**2+this.y**2+this.z**2)}normalize(){return this.unit()}cross(t){let e=this;const n=e.x,i=e.y,r=e.z,s=t.x,o=t.y,a=t.z;return this.x=i*a-r*o,this.y=r*s-n*a,this.z=n*o-i*s,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}}let Hq=new Vq,jq=new Vq;class Wq{constructor(t,e,n,i){this.pos=(new Vq).copy(t),this.normal=(new Vq).copy(e),this.uv=(new Vq).copy(n),this.uv.z=0,i&&(this.color=(new Vq).copy(i))}clone(){return new Wq(this.pos,this.normal,this.uv,this.color)}flip(){this.normal.negate()}interpolate(t,e){return new Wq(this.pos.clone().lerp(t.pos,e),this.normal.clone().lerp(t.normal,e),this.uv.clone().lerp(t.uv,e),this.color&&t.color&&this.color.clone().lerp(t.color,e))}}class qq{constructor(t,e){this.normal=t,this.w=e}clone(){return new qq(this.normal.clone(),this.w)}flip(){this.normal.negate(),this.w=-this.w}splitPolygon(t,e,n,i,r){let s=0,o=[];for(let e=0;e<t.vertices.length;e++){let n=this.normal.dot(t.vertices[e].pos)-this.w,i=n<-qq.EPSILON?2:n>qq.EPSILON?1:0;s|=i,o.push(i)}switch(s){case 0:(this.normal.dot(t.plane.normal)>0?e:n).push(t);break;case 1:i.push(t);break;case 2:r.push(t);break;case 3:let s=[],a=[];for(let e=0;e<t.vertices.length;e++){let n=(e+1)%t.vertices.length,i=o[e],r=o[n],l=t.vertices[e],c=t.vertices[n];if(2!=i&&s.push(l),1!=i&&a.push(2!=i?l.clone():l),3==(i|r)){let t=(this.w-this.normal.dot(l.pos))/this.normal.dot(Hq.copy(c.pos).sub(l.pos)),e=l.interpolate(c,t);s.push(e),a.push(e.clone())}}s.length>=3&&i.push(new Xq(s,t.shared)),a.length>=3&&r.push(new Xq(a,t.shared))}}}qq.EPSILON=1e-5,qq.fromPoints=function(t,e,n){let i=Hq.copy(e).sub(t).cross(jq.copy(n).sub(t)).normalize();return new qq(i.clone(),i.dot(t))};class Xq{constructor(t,e){this.vertices=t,this.shared=e,this.plane=qq.fromPoints(t[0].pos,t[1].pos,t[2].pos)}clone(){return new Xq(this.vertices.map((t=>t.clone())),this.shared)}flip(){this.vertices.reverse().map((t=>t.flip())),this.plane.flip()}}class Yq{constructor(t){this.plane=null,this.front=null,this.back=null,this.polygons=[],t&&this.build(t)}clone(){let t=new Yq;return t.plane=this.plane&&this.plane.clone(),t.front=this.front&&this.front.clone(),t.back=this.back&&this.back.clone(),t.polygons=this.polygons.map((t=>t.clone())),t}invert(){for(let t=0;t<this.polygons.length;t++)this.polygons[t].flip();this.plane&&this.plane.flip(),this.front&&this.front.invert(),this.back&&this.back.invert();let t=this.front;this.front=this.back,this.back=t}clipPolygons(t){if(!this.plane)return t.slice();let e=[],n=[];for(let i=0;i<t.length;i++)this.plane.splitPolygon(t[i],e,n,e,n);return this.front&&(e=this.front.clipPolygons(e)),n=this.back?this.back.clipPolygons(n):[],e.concat(n)}clipTo(t){this.polygons=t.clipPolygons(this.polygons),this.front&&this.front.clipTo(t),this.back&&this.back.clipTo(t)}allPolygons(){let t=this.polygons.slice();return this.front&&(t=t.concat(this.front.allPolygons())),this.back&&(t=t.concat(this.back.allPolygons())),t}build(t){if(!t.length)return;this.plane||(this.plane=t[0].plane.clone());let e=[],n=[];for(let i=0;i<t.length;i++)this.plane.splitPolygon(t[i],this.polygons,this.polygons,e,n);e.length&&(this.front||(this.front=new Yq),this.front.build(e)),n.length&&(this.back||(this.back=new Yq),this.back.build(n))}}Gq.fromJSON=function(t){return Gq.fromPolygons(t.polygons.map((t=>new Xq(t.vertices.map((t=>new Wq(t.pos,t.normal,t.uv))),t.shared))))},Gq.fromGeometry=function(t,e){let n=[];if(t.isGeometry){let i=t.faces,r=t.vertices,s=[\\\\\\\"a\\\\\\\",\\\\\\\"b\\\\\\\",\\\\\\\"c\\\\\\\"];for(let o=0;o<i.length;o++){let a=i[o],l=[];for(let e=0;e<3;e++)l.push(new Wq(r[a[s[e]]],a.vertexNormals[e],t.faceVertexUvs[0][o][e]));n.push(new Xq(l,e))}}else if(t.isBufferGeometry){let i,r=t.attributes.position,s=t.attributes.normal,o=t.attributes.uv,a=t.attributes.color;if(t.index)i=t.index.array;else{i=new Array(r.array.length/r.itemSize|0);for(let t=0;t<i.length;t++)i[t]=t}let l=i.length/3|0;n=new Array(l);for(let t=0,l=0,c=i.length;t<c;t+=3,l++){let c=new Array(3);for(let e=0;e<3;e++){let n=i[t+e],l=3*n,u=2*n,h=r.array[l],d=r.array[l+1],p=r.array[l+2],_=s.array[l],m=s.array[l+1],f=s.array[l+2],g=o.array[u],v=o.array[u+1];c[e]=new Wq({x:h,y:d,z:p},{x:_,y:m,z:f},{x:g,y:v,z:0},a&&{x:a.array[u],y:a.array[u+1],z:a.array[u+2]})}n[l]=new Xq(c,e)}}else console.error(\\\\\\\"Unsupported CSG input type:\\\\\\\"+t.type);return Gq.fromPolygons(n)};let $q=new p.a,Jq=new U.a;Gq.fromMesh=function(t,e){let n=Gq.fromGeometry(t.geometry,e);Jq.getNormalMatrix(t.matrix);for(let e=0;e<n.polygons.length;e++){let i=n.polygons[e];for(let e=0;e<i.vertices.length;e++){let n=i.vertices[e];n.pos.copy($q.copy(n.pos).applyMatrix4(t.matrix)),n.normal.copy($q.copy(n.normal).applyMatrix3(Jq))}}return n};let Zq=t=>({top:0,array:new Float32Array(t),write:function(t){this.array[this.top++]=t.x,this.array[this.top++]=t.y,this.array[this.top++]=t.z}}),Qq=t=>({top:0,array:new Float32Array(t),write:function(t){this.array[this.top++]=t.x,this.array[this.top++]=t.y}});var Kq;Gq.toMesh=function(t,e,n){let i,r,s=t.polygons;{let t=0;s.forEach((e=>t+=e.vertices.length-2)),i=new S.a;let e,n=Zq(3*t*3),o=Zq(3*t*3),a=Qq(2*t*3),l=[];if(s.forEach((i=>{let r=i.vertices,s=r.length;void 0!==i.shared&&(l[i.shared]||(l[i.shared]=[])),s&&void 0!==r[0].color&&(e||(e=Zq(3*t*3)));for(let t=3;t<=s;t++)void 0!==i.shared&&l[i.shared].push(n.top/3,n.top/3+1,n.top/3+2),n.write(r[0].pos),n.write(r[t-2].pos),n.write(r[t-1].pos),o.write(r[0].normal),o.write(r[t-2].normal),o.write(r[t-1].normal),a.write(r[0].uv),a.write(r[t-2].uv),a.write(r[t-1].uv),e&&(e.write(r[0].color)||e.write(r[t-2].color)||e.write(r[t-1].color))})),i.setAttribute(\\\\\\\"position\\\\\\\",new C.a(n.array,3)),i.setAttribute(\\\\\\\"normal\\\\\\\",new C.a(o.array,3)),i.setAttribute(\\\\\\\"uv\\\\\\\",new C.a(a.array,2)),e&&i.setAttribute(\\\\\\\"color\\\\\\\",new C.a(e.array,3)),l.length){let t=[],e=0;for(let n=0;n<l.length;n++)i.addGroup(e,l[n].length,n),e+=l[n].length,t=t.concat(l[n]);i.setIndex(t)}r=i}let o=(new A.a).copy(e).invert();i.applyMatrix4(o),i.computeBoundingSphere(),i.computeBoundingBox();let a=new k.a(i,n);return a.matrix.copy(e),a.matrix.decompose(a.position,a.quaternion,a.scale),a.rotation.setFromQuaternion(a.quaternion),a.updateMatrixWorld(),a.castShadow=a.receiveShadow=!0,a},function(t){t.INTERSECT=\\\\\\\"intersect\\\\\\\",t.SUBSTRACT=\\\\\\\"substract\\\\\\\",t.UNION=\\\\\\\"union\\\\\\\"}(Kq||(Kq={}));const tX=[Kq.INTERSECT,Kq.SUBSTRACT,Kq.UNION];class eX extends pG{static type(){return\\\\\\\"boolean\\\\\\\"}cook(t,e){const n=t[0].objectsWithGeo()[0],i=t[1].objectsWithGeo()[0],r=this._applyBooleaOperation(n,i,e);let s=n.material;if(e.useBothMaterials){s=m.isArray(s)?s[0]:s;let t=i.material;t=m.isArray(t)?t[0]:t,s=[s,t]}const o=Gq.toMesh(r,n.matrix,s);return this.createCoreGroupFromObjects([o])}_applyBooleaOperation(t,e,n){const i=tX[n.operation];let r=Gq.fromMesh(t,0),s=Gq.fromMesh(e,1);switch(i){case Kq.INTERSECT:return r.intersect(s);case Kq.SUBSTRACT:return r.subtract(s);case Kq.UNION:return r.union(s)}ar.unreachable(i)}}eX.DEFAULT_PARAMS={operation:tX.indexOf(Kq.INTERSECT),useBothMaterials:!0},eX.INPUT_CLONED_STATE=[Qi.FROM_NODE,Qi.NEVER];const nX=eX.DEFAULT_PARAMS;const iX=new class extends aa{constructor(){super(...arguments),this.operation=oa.INTEGER(nX.operation,{menu:{entries:tX.map(((t,e)=>({name:t,value:e})))}}),this.useBothMaterials=oa.BOOLEAN(nX.useBothMaterials)}};class rX extends gG{constructor(){super(...arguments),this.paramsConfig=iX}static type(){return\\\\\\\"boolean\\\\\\\"}initializeNode(){super.initializeNode(),this.io.inputs.setCount(2),this.io.inputs.initInputsClonedState(eX.INPUT_CLONED_STATE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.operation],(()=>tX[this.pv.operation]))}))}))}setOperation(t){this.p.operation.set(tX.indexOf(t))}async cook(t){this._operation=this._operation||new eX(this.scene(),this.states,this);const e=await this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class sX extends pG{constructor(){super(...arguments),this._core_transform=new Mz}static type(){return\\\\\\\"box\\\\\\\"}cook(t,e){const n=t[0],i=n?this._cook_with_input(n,e):this._cook_without_input(e);return this.createCoreGroupFromGeometry(i)}_cook_without_input(t){const e=t.divisions,n=t.size,i=new N(n,n,n,e,e,e);return i.translate(t.center.x,t.center.y,t.center.z),i.computeVertexNormals(),i}_cook_with_input(t,e){const n=e.divisions,i=t.boundingBox(),r=i.max.clone().sub(i.min),s=i.max.clone().add(i.min).multiplyScalar(.5),o=new N(r.x,r.y,r.z,n,n,n),a=this._core_transform.translation_matrix(s);return o.applyMatrix4(a),o}}sX.DEFAULT_PARAMS={size:1,divisions:1,center:new p.a(0,0,0)},sX.INPUT_CLONED_STATE=Qi.NEVER;const oX=sX.DEFAULT_PARAMS;const aX=new class extends aa{constructor(){super(...arguments),this.size=oa.FLOAT(oX.size),this.divisions=oa.INTEGER(oX.divisions,{range:[1,10],rangeLocked:[!0,!1]}),this.center=oa.VECTOR3(oX.center)}};class lX extends gG{constructor(){super(...arguments),this.paramsConfig=aX}static type(){return\\\\\\\"box\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to create bounding box from (optional)\\\\\\\"]}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(sX.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new sX(this._scene,this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class cX extends C.a{constructor(t,e,n,i=1){\\\\\\\"number\\\\\\\"==typeof n&&(i=n,n=!1,console.error(\\\\\\\"THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.\\\\\\\")),super(t,e,n),this.meshPerAttribute=i}copy(t){return super.copy(t),this.meshPerAttribute=t.meshPerAttribute,this}toJSON(){const t=super.toJSON();return t.meshPerAttribute=this.meshPerAttribute,t.isInstancedBufferAttribute=!0,t}}cX.prototype.isInstancedBufferAttribute=!0;const uX=new A.a,hX=new A.a,dX=[],pX=new k.a;class _X extends k.a{constructor(t,e,n){super(t,e),this.instanceMatrix=new cX(new Float32Array(16*n),16),this.instanceColor=null,this.count=n,this.frustumCulled=!1}copy(t){return super.copy(t),this.instanceMatrix.copy(t.instanceMatrix),null!==t.instanceColor&&(this.instanceColor=t.instanceColor.clone()),this.count=t.count,this}getColorAt(t,e){e.fromArray(this.instanceColor.array,3*t)}getMatrixAt(t,e){e.fromArray(this.instanceMatrix.array,16*t)}raycast(t,e){const n=this.matrixWorld,i=this.count;if(pX.geometry=this.geometry,pX.material=this.material,void 0!==pX.material)for(let r=0;r<i;r++){this.getMatrixAt(r,uX),hX.multiplyMatrices(n,uX),pX.matrixWorld=hX,pX.raycast(t,dX);for(let t=0,n=dX.length;t<n;t++){const n=dX[t];n.instanceId=r,n.object=this,e.push(n)}dX.length=0}}setColorAt(t,e){null===this.instanceColor&&(this.instanceColor=new cX(new Float32Array(3*this.instanceMatrix.count),3)),e.toArray(this.instanceColor.array,3*t)}setMatrixAt(t,e){e.toArray(this.instanceMatrix.array,16*t)}updateMorphTargets(){}dispose(){this.dispatchEvent({type:\\\\\\\"dispose\\\\\\\"})}}let mX;_X.prototype.isInstancedMesh=!0;const fX=new p.a,gX=new p.a,vX=new p.a,yX=new d.a,xX=new d.a,bX=new A.a,wX=new p.a,TX=new p.a,AX=new p.a,EX=new d.a,MX=new d.a,SX=new d.a;class CX extends Q.a{constructor(t){if(super(),this.type=\\\\\\\"Sprite\\\\\\\",void 0===mX){mX=new S.a;const t=new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]),e=new as.a(t,5);mX.setIndex([0,1,2,0,2,3]),mX.setAttribute(\\\\\\\"position\\\\\\\",new ls.a(e,3,0,!1)),mX.setAttribute(\\\\\\\"uv\\\\\\\",new ls.a(e,2,3,!1))}this.geometry=mX,this.material=void 0!==t?t:new zf,this.center=new d.a(.5,.5)}raycast(t,e){null===t.camera&&console.error('THREE.Sprite: \\\\\\\"Raycaster.camera\\\\\\\" needs to be set in order to raycast against sprites.'),gX.setFromMatrixScale(this.matrixWorld),bX.copy(t.camera.matrixWorld),this.modelViewMatrix.multiplyMatrices(t.camera.matrixWorldInverse,this.matrixWorld),vX.setFromMatrixPosition(this.modelViewMatrix),t.camera.isPerspectiveCamera&&!1===this.material.sizeAttenuation&&gX.multiplyScalar(-vX.z);const n=this.material.rotation;let i,r;0!==n&&(r=Math.cos(n),i=Math.sin(n));const s=this.center;NX(wX.set(-.5,-.5,0),vX,s,gX,i,r),NX(TX.set(.5,-.5,0),vX,s,gX,i,r),NX(AX.set(.5,.5,0),vX,s,gX,i,r),EX.set(0,0),MX.set(1,0),SX.set(1,1);let o=t.ray.intersectTriangle(wX,TX,AX,!1,fX);if(null===o&&(NX(TX.set(-.5,.5,0),vX,s,gX,i,r),MX.set(0,1),o=t.ray.intersectTriangle(wX,AX,TX,!1,fX),null===o))return;const a=t.ray.origin.distanceTo(fX);a<t.near||a>t.far||e.push({distance:a,point:fX.clone(),uv:Qr.a.getUV(fX,wX,TX,AX,EX,MX,SX,new d.a),face:null,object:this})}copy(t){return super.copy(t),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}}function NX(t,e,n,i,r,s){yX.subVectors(t,n).addScalar(.5).multiply(i),void 0!==r?(xX.x=s*yX.x-r*yX.y,xX.y=r*yX.x+s*yX.y):xX.copy(yX),t.copy(e),t.x+=xX.x,t.y+=xX.y,t.applyMatrix4(bX)}CX.prototype.isSprite=!0;var LX=n(94),OX=n(81),RX=n(46);class PX{constructor(){this.coefficients=[];for(let t=0;t<9;t++)this.coefficients.push(new p.a)}set(t){for(let e=0;e<9;e++)this.coefficients[e].copy(t[e]);return this}zero(){for(let t=0;t<9;t++)this.coefficients[t].set(0,0,0);return this}getAt(t,e){const n=t.x,i=t.y,r=t.z,s=this.coefficients;return e.copy(s[0]).multiplyScalar(.282095),e.addScaledVector(s[1],.488603*i),e.addScaledVector(s[2],.488603*r),e.addScaledVector(s[3],.488603*n),e.addScaledVector(s[4],n*i*1.092548),e.addScaledVector(s[5],i*r*1.092548),e.addScaledVector(s[6],.315392*(3*r*r-1)),e.addScaledVector(s[7],n*r*1.092548),e.addScaledVector(s[8],.546274*(n*n-i*i)),e}getIrradianceAt(t,e){const n=t.x,i=t.y,r=t.z,s=this.coefficients;return e.copy(s[0]).multiplyScalar(.886227),e.addScaledVector(s[1],1.023328*i),e.addScaledVector(s[2],1.023328*r),e.addScaledVector(s[3],1.023328*n),e.addScaledVector(s[4],.858086*n*i),e.addScaledVector(s[5],.858086*i*r),e.addScaledVector(s[6],.743125*r*r-.247708),e.addScaledVector(s[7],.858086*n*r),e.addScaledVector(s[8],.429043*(n*n-i*i)),e}add(t){for(let e=0;e<9;e++)this.coefficients[e].add(t.coefficients[e]);return this}addScaledSH(t,e){for(let n=0;n<9;n++)this.coefficients[n].addScaledVector(t.coefficients[n],e);return this}scale(t){for(let e=0;e<9;e++)this.coefficients[e].multiplyScalar(t);return this}lerp(t,e){for(let n=0;n<9;n++)this.coefficients[n].lerp(t.coefficients[n],e);return this}equals(t){for(let e=0;e<9;e++)if(!this.coefficients[e].equals(t.coefficients[e]))return!1;return!0}copy(t){return this.set(t.coefficients)}clone(){return(new this.constructor).copy(this)}fromArray(t,e=0){const n=this.coefficients;for(let i=0;i<9;i++)n[i].fromArray(t,e+3*i);return this}toArray(t=[],e=0){const n=this.coefficients;for(let i=0;i<9;i++)n[i].toArray(t,e+3*i);return t}static getBasisAt(t,e){const n=t.x,i=t.y,r=t.z;e[0]=.282095,e[1]=.488603*i,e[2]=.488603*r,e[3]=.488603*n,e[4]=1.092548*n*i,e[5]=1.092548*i*r,e[6]=.315392*(3*r*r-1),e[7]=1.092548*n*r,e[8]=.546274*(n*n-i*i)}}PX.prototype.isSphericalHarmonics3=!0;class IX extends nv.a{constructor(t=new PX,e=1){super(void 0,e),this.sh=t}copy(t){return super.copy(t),this.sh.copy(t.sh),this}fromJSON(t){return this.intensity=t.intensity,this.sh.fromArray(t.sh),this}toJSON(t){const e=super.toJSON(t);return e.object.sh=this.sh.toArray(),e}}IX.prototype.isLightProbe=!0;var FX=n(62),DX=n(44);class kX extends S.a{constructor(){super(),this.type=\\\\\\\"InstancedBufferGeometry\\\\\\\",this.instanceCount=1/0}copy(t){return super.copy(t),this.instanceCount=t.instanceCount,this}clone(){return(new this.constructor).copy(this)}toJSON(){const t=super.toJSON(this);return t.instanceCount=this.instanceCount,t.isInstancedBufferGeometry=!0,t}}kX.prototype.isInstancedBufferGeometry=!0;class BX extends kf.a{constructor(t){super(t)}load(t,e,n,i){const r=this,s=new Df.a(r.manager);s.setPath(r.path),s.setRequestHeader(r.requestHeader),s.setWithCredentials(r.withCredentials),s.load(t,(function(n){try{e(r.parse(JSON.parse(n)))}catch(e){i?i(e):console.error(e),r.manager.itemError(t)}}),n,i)}parse(t){const e={},n={};function i(t,i){if(void 0!==e[i])return e[i];const r=t.interleavedBuffers[i],s=function(t,e){if(void 0!==n[e])return n[e];const i=t.arrayBuffers[e],r=new Uint32Array(i).buffer;return n[e]=r,r}(t,r.buffer),o=Object(Pt.c)(r.type,s),a=new as.a(o,r.stride);return a.uuid=r.uuid,e[i]=a,a}const r=t.isInstancedBufferGeometry?new kX:new S.a,s=t.data.index;if(void 0!==s){const t=Object(Pt.c)(s.type,s.array);r.setIndex(new C.a(t,1))}const o=t.data.attributes;for(const e in o){const n=o[e];let s;if(n.isInterleavedBufferAttribute){const e=i(t.data,n.data);s=new ls.a(e,n.itemSize,n.offset,n.normalized)}else{const t=Object(Pt.c)(n.type,n.array);s=new(n.isInstancedBufferAttribute?cX:C.a)(t,n.itemSize,n.normalized)}void 0!==n.name&&(s.name=n.name),void 0!==n.usage&&s.setUsage(n.usage),void 0!==n.updateRange&&(s.updateRange.offset=n.updateRange.offset,s.updateRange.count=n.updateRange.count),r.setAttribute(e,s)}const a=t.data.morphAttributes;if(a)for(const e in a){const n=a[e],s=[];for(let e=0,r=n.length;e<r;e++){const r=n[e];let o;if(r.isInterleavedBufferAttribute){const e=i(t.data,r.data);o=new ls.a(e,r.itemSize,r.offset,r.normalized)}else{const t=Object(Pt.c)(r.type,r.array);o=new C.a(t,r.itemSize,r.normalized)}void 0!==r.name&&(o.name=r.name),s.push(o)}r.morphAttributes[e]=s}t.data.morphTargetsRelative&&(r.morphTargetsRelative=!0);const l=t.data.groups||t.data.drawcalls||t.data.offsets;if(void 0!==l)for(let t=0,e=l.length;t!==e;++t){const e=l[t];r.addGroup(e.start,e.count,e.materialIndex)}const c=t.data.boundingSphere;if(void 0!==c){const t=new p.a;void 0!==c.center&&t.fromArray(c.center),r.boundingSphere=new Oq.a(t,c.radius)}return t.name&&(r.name=t.name),t.userData&&(r.userData=t.userData),r}}class zX extends S.a{constructor(t=1,e=8,n=0,i=2*Math.PI){super(),this.type=\\\\\\\"CircleGeometry\\\\\\\",this.parameters={radius:t,segments:e,thetaStart:n,thetaLength:i},e=Math.max(3,e);const r=[],s=[],o=[],a=[],l=new p.a,c=new d.a;s.push(0,0,0),o.push(0,0,1),a.push(.5,.5);for(let r=0,u=3;r<=e;r++,u+=3){const h=n+r/e*i;l.x=t*Math.cos(h),l.y=t*Math.sin(h),s.push(l.x,l.y,l.z),o.push(0,0,1),c.x=(s[u]/t+1)/2,c.y=(s[u+1]/t+1)/2,a.push(c.x,c.y)}for(let t=1;t<=e;t++)r.push(t,t+1,0);this.setIndex(r),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(s,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new C.c(o,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(a,2))}static fromJSON(t){return new zX(t.radius,t.segments,t.thetaStart,t.thetaLength)}}class UX extends Kz{constructor(t=1,e=0){const n=(1+Math.sqrt(5))/2,i=1/n;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,-i,-n,0,-i,n,0,i,-n,0,i,n,-i,-n,0,-i,n,0,i,-n,0,i,n,0,-n,0,-i,n,0,-i,-n,0,i,n,0,i],[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,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],t,e),this.type=\\\\\\\"DodecahedronGeometry\\\\\\\",this.parameters={radius:t,detail:e}}static fromJSON(t){return new UX(t.radius,t.detail)}}const GX=new p.a,VX=new p.a,HX=new p.a,jX=new Qr.a;class WX extends S.a{constructor(t=null,e=1){if(super(),this.type=\\\\\\\"EdgesGeometry\\\\\\\",this.parameters={geometry:t,thresholdAngle:e},null!==t){const n=4,i=Math.pow(10,n),r=Math.cos(Ln.a*e),s=t.getIndex(),o=t.getAttribute(\\\\\\\"position\\\\\\\"),a=s?s.count:o.count,l=[0,0,0],c=[\\\\\\\"a\\\\\\\",\\\\\\\"b\\\\\\\",\\\\\\\"c\\\\\\\"],u=new Array(3),h={},d=[];for(let t=0;t<a;t+=3){s?(l[0]=s.getX(t),l[1]=s.getX(t+1),l[2]=s.getX(t+2)):(l[0]=t,l[1]=t+1,l[2]=t+2);const{a:e,b:n,c:a}=jX;if(e.fromBufferAttribute(o,l[0]),n.fromBufferAttribute(o,l[1]),a.fromBufferAttribute(o,l[2]),jX.getNormal(HX),u[0]=`${Math.round(e.x*i)},${Math.round(e.y*i)},${Math.round(e.z*i)}`,u[1]=`${Math.round(n.x*i)},${Math.round(n.y*i)},${Math.round(n.z*i)}`,u[2]=`${Math.round(a.x*i)},${Math.round(a.y*i)},${Math.round(a.z*i)}`,u[0]!==u[1]&&u[1]!==u[2]&&u[2]!==u[0])for(let t=0;t<3;t++){const e=(t+1)%3,n=u[t],i=u[e],s=jX[c[t]],o=jX[c[e]],a=`${n}_${i}`,p=`${i}_${n}`;p in h&&h[p]?(HX.dot(h[p].normal)<=r&&(d.push(s.x,s.y,s.z),d.push(o.x,o.y,o.z)),h[p]=null):a in h||(h[a]={index0:l[t],index1:l[e],normal:HX.clone()})}}for(const t in h)if(h[t]){const{index0:e,index1:n}=h[t];GX.fromBufferAttribute(o,e),VX.fromBufferAttribute(o,n),d.push(GX.x,GX.y,GX.z),d.push(VX.x,VX.y,VX.z)}this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(d,3))}}}var qX=n(79),XX=n(53);class YX extends S.a{constructor(t=new RX.a([new d.a(.5,.5),new d.a(-.5,.5),new d.a(-.5,-.5),new d.a(.5,-.5)]),e={}){super(),this.type=\\\\\\\"ExtrudeGeometry\\\\\\\",this.parameters={shapes:t,options:e},t=Array.isArray(t)?t:[t];const n=this,i=[],r=[];for(let e=0,n=t.length;e<n;e++){s(t[e])}function s(t){const s=[],o=void 0!==e.curveSegments?e.curveSegments:12,a=void 0!==e.steps?e.steps:1;let l=void 0!==e.depth?e.depth:1,c=void 0===e.bevelEnabled||e.bevelEnabled,u=void 0!==e.bevelThickness?e.bevelThickness:.2,h=void 0!==e.bevelSize?e.bevelSize:u-.1,_=void 0!==e.bevelOffset?e.bevelOffset:0,m=void 0!==e.bevelSegments?e.bevelSegments:3;const f=e.extrudePath,g=void 0!==e.UVGenerator?e.UVGenerator:$X;void 0!==e.amount&&(console.warn(\\\\\\\"THREE.ExtrudeBufferGeometry: amount has been renamed to depth.\\\\\\\"),l=e.amount);let v,y,x,b,w,T=!1;f&&(v=f.getSpacedPoints(a),T=!0,c=!1,y=f.computeFrenetFrames(a,!1),x=new p.a,b=new p.a,w=new p.a),c||(m=0,u=0,h=0,_=0);const A=t.extractPoints(o);let E=A.shape;const M=A.holes;if(!XX.a.isClockWise(E)){E=E.reverse();for(let t=0,e=M.length;t<e;t++){const e=M[t];XX.a.isClockWise(e)&&(M[t]=e.reverse())}}const S=XX.a.triangulateShape(E,M),C=E;for(let t=0,e=M.length;t<e;t++){const e=M[t];E=E.concat(e)}function N(t,e,n){return e||console.error(\\\\\\\"THREE.ExtrudeGeometry: vec does not exist\\\\\\\"),e.clone().multiplyScalar(n).add(t)}const L=E.length,O=S.length;function R(t,e,n){let i,r,s;const o=t.x-e.x,a=t.y-e.y,l=n.x-t.x,c=n.y-t.y,u=o*o+a*a,h=o*c-a*l;if(Math.abs(h)>Number.EPSILON){const h=Math.sqrt(u),p=Math.sqrt(l*l+c*c),_=e.x-a/h,m=e.y+o/h,f=((n.x-c/p-_)*c-(n.y+l/p-m)*l)/(o*c-a*l);i=_+o*f-t.x,r=m+a*f-t.y;const g=i*i+r*r;if(g<=2)return new d.a(i,r);s=Math.sqrt(g/2)}else{let t=!1;o>Number.EPSILON?l>Number.EPSILON&&(t=!0):o<-Number.EPSILON?l<-Number.EPSILON&&(t=!0):Math.sign(a)===Math.sign(c)&&(t=!0),t?(i=-a,r=o,s=Math.sqrt(u)):(i=o,r=a,s=Math.sqrt(u/2))}return new d.a(i/s,r/s)}const P=[];for(let t=0,e=C.length,n=e-1,i=t+1;t<e;t++,n++,i++)n===e&&(n=0),i===e&&(i=0),P[t]=R(C[t],C[n],C[i]);const I=[];let F,D=P.concat();for(let t=0,e=M.length;t<e;t++){const e=M[t];F=[];for(let t=0,n=e.length,i=n-1,r=t+1;t<n;t++,i++,r++)i===n&&(i=0),r===n&&(r=0),F[t]=R(e[t],e[i],e[r]);I.push(F),D=D.concat(F)}for(let t=0;t<m;t++){const e=t/m,n=u*Math.cos(e*Math.PI/2),i=h*Math.sin(e*Math.PI/2)+_;for(let t=0,e=C.length;t<e;t++){const e=N(C[t],P[t],i);z(e.x,e.y,-n)}for(let t=0,e=M.length;t<e;t++){const e=M[t];F=I[t];for(let t=0,r=e.length;t<r;t++){const r=N(e[t],F[t],i);z(r.x,r.y,-n)}}}const k=h+_;for(let t=0;t<L;t++){const e=c?N(E[t],D[t],k):E[t];T?(b.copy(y.normals[0]).multiplyScalar(e.x),x.copy(y.binormals[0]).multiplyScalar(e.y),w.copy(v[0]).add(b).add(x),z(w.x,w.y,w.z)):z(e.x,e.y,0)}for(let t=1;t<=a;t++)for(let e=0;e<L;e++){const n=c?N(E[e],D[e],k):E[e];T?(b.copy(y.normals[t]).multiplyScalar(n.x),x.copy(y.binormals[t]).multiplyScalar(n.y),w.copy(v[t]).add(b).add(x),z(w.x,w.y,w.z)):z(n.x,n.y,l/a*t)}for(let t=m-1;t>=0;t--){const e=t/m,n=u*Math.cos(e*Math.PI/2),i=h*Math.sin(e*Math.PI/2)+_;for(let t=0,e=C.length;t<e;t++){const e=N(C[t],P[t],i);z(e.x,e.y,l+n)}for(let t=0,e=M.length;t<e;t++){const e=M[t];F=I[t];for(let t=0,r=e.length;t<r;t++){const r=N(e[t],F[t],i);T?z(r.x,r.y+v[a-1].y,v[a-1].x+n):z(r.x,r.y,l+n)}}}function B(t,e){let n=t.length;for(;--n>=0;){const i=n;let r=n-1;r<0&&(r=t.length-1);for(let t=0,n=a+2*m;t<n;t++){const n=L*t,s=L*(t+1);G(e+i+n,e+r+n,e+r+s,e+i+s)}}}function z(t,e,n){s.push(t),s.push(e),s.push(n)}function U(t,e,r){V(t),V(e),V(r);const s=i.length/3,o=g.generateTopUV(n,i,s-3,s-2,s-1);H(o[0]),H(o[1]),H(o[2])}function G(t,e,r,s){V(t),V(e),V(s),V(e),V(r),V(s);const o=i.length/3,a=g.generateSideWallUV(n,i,o-6,o-3,o-2,o-1);H(a[0]),H(a[1]),H(a[3]),H(a[1]),H(a[2]),H(a[3])}function V(t){i.push(s[3*t+0]),i.push(s[3*t+1]),i.push(s[3*t+2])}function H(t){r.push(t.x),r.push(t.y)}!function(){const t=i.length/3;if(c){let t=0,e=L*t;for(let t=0;t<O;t++){const n=S[t];U(n[2]+e,n[1]+e,n[0]+e)}t=a+2*m,e=L*t;for(let t=0;t<O;t++){const n=S[t];U(n[0]+e,n[1]+e,n[2]+e)}}else{for(let t=0;t<O;t++){const e=S[t];U(e[2],e[1],e[0])}for(let t=0;t<O;t++){const e=S[t];U(e[0]+L*a,e[1]+L*a,e[2]+L*a)}}n.addGroup(t,i.length/3-t,0)}(),function(){const t=i.length/3;let e=0;B(C,e),e+=C.length;for(let t=0,n=M.length;t<n;t++){const n=M[t];B(n,e),e+=n.length}n.addGroup(t,i.length/3-t,1)}()}this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(i,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(r,2)),this.computeVertexNormals()}toJSON(){const t=super.toJSON();return function(t,e,n){if(n.shapes=[],Array.isArray(t))for(let e=0,i=t.length;e<i;e++){const i=t[e];n.shapes.push(i.uuid)}else n.shapes.push(t.uuid);void 0!==e.extrudePath&&(n.options.extrudePath=e.extrudePath.toJSON());return n}(this.parameters.shapes,this.parameters.options,t)}static fromJSON(t,e){const n=[];for(let i=0,r=t.shapes.length;i<r;i++){const r=e[t.shapes[i]];n.push(r)}const i=t.options.extrudePath;return void 0!==i&&(t.options.extrudePath=(new qX[i.type]).fromJSON(i)),new YX(n,t.options)}}const $X={generateTopUV:function(t,e,n,i,r){const s=e[3*n],o=e[3*n+1],a=e[3*i],l=e[3*i+1],c=e[3*r],u=e[3*r+1];return[new d.a(s,o),new d.a(a,l),new d.a(c,u)]},generateSideWallUV:function(t,e,n,i,r,s){const o=e[3*n],a=e[3*n+1],l=e[3*n+2],c=e[3*i],u=e[3*i+1],h=e[3*i+2],p=e[3*r],_=e[3*r+1],m=e[3*r+2],f=e[3*s],g=e[3*s+1],v=e[3*s+2];return Math.abs(a-u)<Math.abs(o-c)?[new d.a(o,1-l),new d.a(c,1-h),new d.a(p,1-m),new d.a(f,1-v)]:[new d.a(a,1-l),new d.a(u,1-h),new d.a(_,1-m),new d.a(g,1-v)]}};class JX extends Kz{constructor(t=1,e=0){const n=(1+Math.sqrt(5))/2;super([-1,n,0,1,n,0,-1,-n,0,1,-n,0,0,-1,n,0,1,n,0,-1,-n,0,1,-n,n,0,-1,n,0,1,-n,0,-1,-n,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],t,e),this.type=\\\\\\\"IcosahedronGeometry\\\\\\\",this.parameters={radius:t,detail:e}}static fromJSON(t){return new JX(t.radius,t.detail)}}class ZX extends S.a{constructor(t=[new d.a(0,.5),new d.a(.5,0),new d.a(0,-.5)],e=12,n=0,i=2*Math.PI){super(),this.type=\\\\\\\"LatheGeometry\\\\\\\",this.parameters={points:t,segments:e,phiStart:n,phiLength:i},e=Math.floor(e),i=Ln.d(i,0,2*Math.PI);const r=[],s=[],o=[],a=1/e,l=new p.a,c=new d.a;for(let r=0;r<=e;r++){const u=n+r*a*i,h=Math.sin(u),d=Math.cos(u);for(let n=0;n<=t.length-1;n++)l.x=t[n].x*h,l.y=t[n].y,l.z=t[n].x*d,s.push(l.x,l.y,l.z),c.x=r/e,c.y=n/(t.length-1),o.push(c.x,c.y)}for(let n=0;n<e;n++)for(let e=0;e<t.length-1;e++){const i=e+n*t.length,s=i,o=i+t.length,a=i+t.length+1,l=i+1;r.push(s,o,l),r.push(o,a,l)}if(this.setIndex(r),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(s,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(o,2)),this.computeVertexNormals(),i===2*Math.PI){const n=this.attributes.normal.array,i=new p.a,r=new p.a,s=new p.a,o=e*t.length*3;for(let e=0,a=0;e<t.length;e++,a+=3)i.x=n[a+0],i.y=n[a+1],i.z=n[a+2],r.x=n[o+a+0],r.y=n[o+a+1],r.z=n[o+a+2],s.addVectors(i,r).normalize(),n[a+0]=n[o+a+0]=s.x,n[a+1]=n[o+a+1]=s.y,n[a+2]=n[o+a+2]=s.z}}static fromJSON(t){return new ZX(t.points,t.segments,t.phiStart,t.phiLength)}}class QX extends S.a{constructor(t=.5,e=1,n=8,i=1,r=0,s=2*Math.PI){super(),this.type=\\\\\\\"RingGeometry\\\\\\\",this.parameters={innerRadius:t,outerRadius:e,thetaSegments:n,phiSegments:i,thetaStart:r,thetaLength:s},n=Math.max(3,n);const o=[],a=[],l=[],c=[];let u=t;const h=(e-t)/(i=Math.max(1,i)),_=new p.a,m=new d.a;for(let t=0;t<=i;t++){for(let t=0;t<=n;t++){const i=r+t/n*s;_.x=u*Math.cos(i),_.y=u*Math.sin(i),a.push(_.x,_.y,_.z),l.push(0,0,1),m.x=(_.x/e+1)/2,m.y=(_.y/e+1)/2,c.push(m.x,m.y)}u+=h}for(let t=0;t<i;t++){const e=t*(n+1);for(let t=0;t<n;t++){const i=t+e,r=i,s=i+n+1,a=i+n+2,l=i+1;o.push(r,s,l),o.push(s,a,l)}}this.setIndex(o),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(a,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new C.c(l,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(c,2))}static fromJSON(t){return new QX(t.innerRadius,t.outerRadius,t.thetaSegments,t.phiSegments,t.thetaStart,t.thetaLength)}}class KX extends S.a{constructor(t=new RX.a([new d.a(0,.5),new d.a(-.5,-.5),new d.a(.5,-.5)]),e=12){super(),this.type=\\\\\\\"ShapeGeometry\\\\\\\",this.parameters={shapes:t,curveSegments:e};const n=[],i=[],r=[],s=[];let o=0,a=0;if(!1===Array.isArray(t))l(t);else for(let e=0;e<t.length;e++)l(t[e]),this.addGroup(o,a,e),o+=a,a=0;function l(t){const o=i.length/3,l=t.extractPoints(e);let c=l.shape;const u=l.holes;!1===XX.a.isClockWise(c)&&(c=c.reverse());for(let t=0,e=u.length;t<e;t++){const e=u[t];!0===XX.a.isClockWise(e)&&(u[t]=e.reverse())}const h=XX.a.triangulateShape(c,u);for(let t=0,e=u.length;t<e;t++){const e=u[t];c=c.concat(e)}for(let t=0,e=c.length;t<e;t++){const e=c[t];i.push(e.x,e.y,0),r.push(0,0,1),s.push(e.x,e.y)}for(let t=0,e=h.length;t<e;t++){const e=h[t],i=e[0]+o,r=e[1]+o,s=e[2]+o;n.push(i,r,s),a+=3}}this.setIndex(n),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(i,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new C.c(r,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(s,2))}toJSON(){const t=super.toJSON();return function(t,e){if(e.shapes=[],Array.isArray(t))for(let n=0,i=t.length;n<i;n++){const i=t[n];e.shapes.push(i.uuid)}else e.shapes.push(t.uuid);return e}(this.parameters.shapes,t)}static fromJSON(t,e){const n=[];for(let i=0,r=t.shapes.length;i<r;i++){const r=e[t.shapes[i]];n.push(r)}return new KX(n,t.curveSegments)}}class tY extends Kz{constructor(t=1,e=0){super([1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],t,e),this.type=\\\\\\\"TetrahedronGeometry\\\\\\\",this.parameters={radius:t,detail:e}}static fromJSON(t){return new tY(t.radius,t.detail)}}class eY extends S.a{constructor(t=1,e=.4,n=8,i=6,r=2*Math.PI){super(),this.type=\\\\\\\"TorusGeometry\\\\\\\",this.parameters={radius:t,tube:e,radialSegments:n,tubularSegments:i,arc:r},n=Math.floor(n),i=Math.floor(i);const s=[],o=[],a=[],l=[],c=new p.a,u=new p.a,h=new p.a;for(let s=0;s<=n;s++)for(let d=0;d<=i;d++){const p=d/i*r,_=s/n*Math.PI*2;u.x=(t+e*Math.cos(_))*Math.cos(p),u.y=(t+e*Math.cos(_))*Math.sin(p),u.z=e*Math.sin(_),o.push(u.x,u.y,u.z),c.x=t*Math.cos(p),c.y=t*Math.sin(p),h.subVectors(u,c).normalize(),a.push(h.x,h.y,h.z),l.push(d/i),l.push(s/n)}for(let t=1;t<=n;t++)for(let e=1;e<=i;e++){const n=(i+1)*t+e-1,r=(i+1)*(t-1)+e-1,o=(i+1)*(t-1)+e,a=(i+1)*t+e;s.push(n,r,a),s.push(r,o,a)}this.setIndex(s),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(o,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new C.c(a,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(l,2))}static fromJSON(t){return new eY(t.radius,t.tube,t.radialSegments,t.tubularSegments,t.arc)}}class nY extends S.a{constructor(t=1,e=.4,n=64,i=8,r=2,s=3){super(),this.type=\\\\\\\"TorusKnotGeometry\\\\\\\",this.parameters={radius:t,tube:e,tubularSegments:n,radialSegments:i,p:r,q:s},n=Math.floor(n),i=Math.floor(i);const o=[],a=[],l=[],c=[],u=new p.a,h=new p.a,d=new p.a,_=new p.a,m=new p.a,f=new p.a,g=new p.a;for(let o=0;o<=n;++o){const p=o/n*r*Math.PI*2;v(p,r,s,t,d),v(p+.01,r,s,t,_),f.subVectors(_,d),g.addVectors(_,d),m.crossVectors(f,g),g.crossVectors(m,f),m.normalize(),g.normalize();for(let t=0;t<=i;++t){const r=t/i*Math.PI*2,s=-e*Math.cos(r),p=e*Math.sin(r);u.x=d.x+(s*g.x+p*m.x),u.y=d.y+(s*g.y+p*m.y),u.z=d.z+(s*g.z+p*m.z),a.push(u.x,u.y,u.z),h.subVectors(u,d).normalize(),l.push(h.x,h.y,h.z),c.push(o/n),c.push(t/i)}}for(let t=1;t<=n;t++)for(let e=1;e<=i;e++){const n=(i+1)*(t-1)+(e-1),r=(i+1)*t+(e-1),s=(i+1)*t+e,a=(i+1)*(t-1)+e;o.push(n,r,a),o.push(r,s,a)}function v(t,e,n,i,r){const s=Math.cos(t),o=Math.sin(t),a=n/e*t,l=Math.cos(a);r.x=i*(2+l)*.5*s,r.y=i*(2+l)*o*.5,r.z=i*Math.sin(a)*.5}this.setIndex(o),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(a,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new C.c(l,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(c,2))}static fromJSON(t){return new nY(t.radius,t.tube,t.tubularSegments,t.radialSegments,t.p,t.q)}}var iY=n(92);class rY extends S.a{constructor(t=new iY.a(new p.a(-1,-1,0),new p.a(-1,1,0),new p.a(1,1,0)),e=64,n=1,i=8,r=!1){super(),this.type=\\\\\\\"TubeGeometry\\\\\\\",this.parameters={path:t,tubularSegments:e,radius:n,radialSegments:i,closed:r};const s=t.computeFrenetFrames(e,r);this.tangents=s.tangents,this.normals=s.normals,this.binormals=s.binormals;const o=new p.a,a=new p.a,l=new d.a;let c=new p.a;const u=[],h=[],_=[],m=[];function f(r){c=t.getPointAt(r/e,c);const l=s.normals[r],d=s.binormals[r];for(let t=0;t<=i;t++){const e=t/i*Math.PI*2,r=Math.sin(e),s=-Math.cos(e);a.x=s*l.x+r*d.x,a.y=s*l.y+r*d.y,a.z=s*l.z+r*d.z,a.normalize(),h.push(a.x,a.y,a.z),o.x=c.x+n*a.x,o.y=c.y+n*a.y,o.z=c.z+n*a.z,u.push(o.x,o.y,o.z)}}!function(){for(let t=0;t<e;t++)f(t);f(!1===r?e:0),function(){for(let t=0;t<=e;t++)for(let n=0;n<=i;n++)l.x=t/e,l.y=n/i,_.push(l.x,l.y)}(),function(){for(let t=1;t<=e;t++)for(let e=1;e<=i;e++){const n=(i+1)*(t-1)+(e-1),r=(i+1)*t+(e-1),s=(i+1)*t+e,o=(i+1)*(t-1)+e;m.push(n,r,o),m.push(r,s,o)}}()}(),this.setIndex(m),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(u,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new C.c(h,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(_,2))}toJSON(){const t=super.toJSON();return t.path=this.parameters.path.toJSON(),t}static fromJSON(t){return new rY((new qX[t.path.type]).fromJSON(t.path),t.tubularSegments,t.radius,t.radialSegments,t.closed)}}class sY extends S.a{constructor(t=null){if(super(),this.type=\\\\\\\"WireframeGeometry\\\\\\\",this.parameters={geometry:t},null!==t){const e=[],n=new Set,i=new p.a,r=new p.a;if(null!==t.index){const s=t.attributes.position,o=t.index;let a=t.groups;0===a.length&&(a=[{start:0,count:o.count,materialIndex:0}]);for(let t=0,l=a.length;t<l;++t){const l=a[t],c=l.start;for(let t=c,a=c+l.count;t<a;t+=3)for(let a=0;a<3;a++){const l=o.getX(t+a),c=o.getX(t+(a+1)%3);i.fromBufferAttribute(s,l),r.fromBufferAttribute(s,c),!0===oY(i,r,n)&&(e.push(i.x,i.y,i.z),e.push(r.x,r.y,r.z))}}}else{const s=t.attributes.position;for(let t=0,o=s.count/3;t<o;t++)for(let o=0;o<3;o++){const a=3*t+o,l=3*t+(o+1)%3;i.fromBufferAttribute(s,a),r.fromBufferAttribute(s,l),!0===oY(i,r,n)&&(e.push(i.x,i.y,i.z),e.push(r.x,r.y,r.z))}}this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(e,3))}}}function oY(t,e,n){const i=`${t.x},${t.y},${t.z}-${e.x},${e.y},${e.z}`,r=`${e.x},${e.y},${e.z}-${t.x},${t.y},${t.z}`;return!0!==n.has(i)&&!0!==n.has(r)&&(n.add(i,r),!0)}class aY extends kf.a{constructor(t){super(t)}load(t,e,n,i){const r=this,s=\\\\\\\"\\\\\\\"===this.path?DX.a.extractUrlBase(t):this.path;this.resourcePath=this.resourcePath||s;const o=new Df.a(this.manager);o.setPath(this.path),o.setRequestHeader(this.requestHeader),o.setWithCredentials(this.withCredentials),o.load(t,(function(n){let s=null;try{s=JSON.parse(n)}catch(e){return void 0!==i&&i(e),void console.error(\\\\\\\"THREE:ObjectLoader: Can't parse \\\\\\\"+t+\\\\\\\".\\\\\\\",e.message)}const o=s.metadata;void 0!==o&&void 0!==o.type&&\\\\\\\"geometry\\\\\\\"!==o.type.toLowerCase()?r.parse(s,e):console.error(\\\\\\\"THREE.ObjectLoader: Can't load \\\\\\\"+t)}),n,i)}async loadAsync(t,e){const n=\\\\\\\"\\\\\\\"===this.path?DX.a.extractUrlBase(t):this.path;this.resourcePath=this.resourcePath||n;const i=new Df.a(this.manager);i.setPath(this.path),i.setRequestHeader(this.requestHeader),i.setWithCredentials(this.withCredentials);const r=await i.loadAsync(t,e),s=JSON.parse(r),o=s.metadata;if(void 0===o||void 0===o.type||\\\\\\\"geometry\\\\\\\"===o.type.toLowerCase())throw new Error(\\\\\\\"THREE.ObjectLoader: Can't load \\\\\\\"+t);return await this.parseAsync(s)}parse(t,e){const n=this.parseAnimations(t.animations),i=this.parseShapes(t.shapes),r=this.parseGeometries(t.geometries,i),s=this.parseImages(t.images,(function(){void 0!==e&&e(l)})),o=this.parseTextures(t.textures,s),a=this.parseMaterials(t.materials,o),l=this.parseObject(t.object,r,a,o,n),c=this.parseSkeletons(t.skeletons,l);if(this.bindSkeletons(l,c),void 0!==e){let t=!1;for(const e in s)if(s[e]instanceof HTMLImageElement){t=!0;break}!1===t&&e(l)}return l}async parseAsync(t){const e=this.parseAnimations(t.animations),n=this.parseShapes(t.shapes),i=this.parseGeometries(t.geometries,n),r=await this.parseImagesAsync(t.images),s=this.parseTextures(t.textures,r),o=this.parseMaterials(t.materials,s),a=this.parseObject(t.object,i,o,s,e),l=this.parseSkeletons(t.skeletons,a);return this.bindSkeletons(a,l),a}parseShapes(t){const e={};if(void 0!==t)for(let n=0,i=t.length;n<i;n++){const i=(new RX.a).fromJSON(t[n]);e[i.uuid]=i}return e}parseSkeletons(t,e){const n={},i={};if(e.traverse((function(t){t.isBone&&(i[t.uuid]=t)})),void 0!==t)for(let e=0,r=t.length;e<r;e++){const r=(new OX.a).fromJSON(t[e],i);n[r.uuid]=r}return n}parseGeometries(t,e){const n={};if(void 0!==t){const i=new BX;for(let s=0,o=t.length;s<o;s++){let o;const a=t[s];switch(a.type){case\\\\\\\"BufferGeometry\\\\\\\":case\\\\\\\"InstancedBufferGeometry\\\\\\\":o=i.parse(a);break;case\\\\\\\"Geometry\\\\\\\":console.error(\\\\\\\"THREE.ObjectLoader: The legacy Geometry type is no longer supported.\\\\\\\");break;default:a.type in r?o=r[a.type].fromJSON(a,e):console.warn(`THREE.ObjectLoader: Unsupported geometry type \\\\\\\"${a.type}\\\\\\\"`)}o.uuid=a.uuid,void 0!==a.name&&(o.name=a.name),!0===o.isBufferGeometry&&void 0!==a.userData&&(o.userData=a.userData),n[a.uuid]=o}}return n}parseMaterials(t,e){const n={},i={};if(void 0!==t){const r=new qf;r.setTextures(e);for(let e=0,s=t.length;e<s;e++){const s=t[e];if(\\\\\\\"MultiMaterial\\\\\\\"===s.type){const t=[];for(let e=0;e<s.materials.length;e++){const i=s.materials[e];void 0===n[i.uuid]&&(n[i.uuid]=r.parse(i)),t.push(n[i.uuid])}i[s.uuid]=t}else void 0===n[s.uuid]&&(n[s.uuid]=r.parse(s)),i[s.uuid]=n[s.uuid]}}return i}parseAnimations(t){const e={};if(void 0!==t)for(let n=0;n<t.length;n++){const i=t[n],r=kW.a.parse(i);e[r.uuid]=r}return e}parseImages(t,e){const n=this,i={};let r;function s(t){if(\\\\\\\"string\\\\\\\"==typeof t){const e=t;return function(t){return n.manager.itemStart(t),r.load(t,(function(){n.manager.itemEnd(t)}),void 0,(function(){n.manager.itemError(t),n.manager.itemEnd(t)}))}(/^(\\\\/\\\\/)|([a-z]+:(\\\\/\\\\/)?)/i.test(e)?e:n.resourcePath+e)}return t.data?{data:Object(Pt.c)(t.type,t.data),width:t.width,height:t.height}:null}if(void 0!==t&&t.length>0){const n=new Vg.b(e);r=new FX.a(n),r.setCrossOrigin(this.crossOrigin);for(let e=0,n=t.length;e<n;e++){const n=t[e],r=n.url;if(Array.isArray(r)){i[n.uuid]=[];for(let t=0,e=r.length;t<e;t++){const e=s(r[t]);null!==e&&(e instanceof HTMLImageElement?i[n.uuid].push(e):i[n.uuid].push(new mo.a(e.data,e.width,e.height)))}}else{const t=s(n.url);null!==t&&(i[n.uuid]=t)}}}return i}async parseImagesAsync(t){const e=this,n={};let i;async function r(t){if(\\\\\\\"string\\\\\\\"==typeof t){const n=t,r=/^(\\\\/\\\\/)|([a-z]+:(\\\\/\\\\/)?)/i.test(n)?n:e.resourcePath+n;return await i.loadAsync(r)}return t.data?{data:Object(Pt.c)(t.type,t.data),width:t.width,height:t.height}:null}if(void 0!==t&&t.length>0){i=new FX.a(this.manager),i.setCrossOrigin(this.crossOrigin);for(let e=0,i=t.length;e<i;e++){const i=t[e],s=i.url;if(Array.isArray(s)){n[i.uuid]=[];for(let t=0,e=s.length;t<e;t++){const e=s[t],o=await r(e);null!==o&&(o instanceof HTMLImageElement?n[i.uuid].push(o):n[i.uuid].push(new mo.a(o.data,o.width,o.height)))}}else{const t=await r(i.url);null!==t&&(n[i.uuid]=t)}}}return n}parseTextures(t,e){function n(t,e){return\\\\\\\"number\\\\\\\"==typeof t?t:(console.warn(\\\\\\\"THREE.ObjectLoader.parseTexture: Constant should be in numeric form.\\\\\\\",t),e[t])}const i={};if(void 0!==t)for(let r=0,s=t.length;r<s;r++){const s=t[r];let o;void 0===s.image&&console.warn('THREE.ObjectLoader: No \\\\\\\"image\\\\\\\" specified for',s.uuid),void 0===e[s.image]&&console.warn(\\\\\\\"THREE.ObjectLoader: Undefined image\\\\\\\",s.image);const a=e[s.image];Array.isArray(a)?(o=new nt(a),6===a.length&&(o.needsUpdate=!0)):(o=a&&a.data?new mo.a(a.data,a.width,a.height):new J.a(a),a&&(o.needsUpdate=!0)),o.uuid=s.uuid,void 0!==s.name&&(o.name=s.name),void 0!==s.mapping&&(o.mapping=n(s.mapping,lY)),void 0!==s.offset&&o.offset.fromArray(s.offset),void 0!==s.repeat&&o.repeat.fromArray(s.repeat),void 0!==s.center&&o.center.fromArray(s.center),void 0!==s.rotation&&(o.rotation=s.rotation),void 0!==s.wrap&&(o.wrapS=n(s.wrap[0],cY),o.wrapT=n(s.wrap[1],cY)),void 0!==s.format&&(o.format=s.format),void 0!==s.type&&(o.type=s.type),void 0!==s.encoding&&(o.encoding=s.encoding),void 0!==s.minFilter&&(o.minFilter=n(s.minFilter,uY)),void 0!==s.magFilter&&(o.magFilter=n(s.magFilter,uY)),void 0!==s.anisotropy&&(o.anisotropy=s.anisotropy),void 0!==s.flipY&&(o.flipY=s.flipY),void 0!==s.premultiplyAlpha&&(o.premultiplyAlpha=s.premultiplyAlpha),void 0!==s.unpackAlignment&&(o.unpackAlignment=s.unpackAlignment),i[s.uuid]=o}return i}parseObject(t,e,n,i,r){let s,o,a;function l(t){return void 0===e[t]&&console.warn(\\\\\\\"THREE.ObjectLoader: Undefined geometry\\\\\\\",t),e[t]}function c(t){if(void 0!==t){if(Array.isArray(t)){const e=[];for(let i=0,r=t.length;i<r;i++){const r=t[i];void 0===n[r]&&console.warn(\\\\\\\"THREE.ObjectLoader: Undefined material\\\\\\\",r),e.push(n[r])}return e}return void 0===n[t]&&console.warn(\\\\\\\"THREE.ObjectLoader: Undefined material\\\\\\\",t),n[t]}}function u(t){return void 0===i[t]&&console.warn(\\\\\\\"THREE.ObjectLoader: Undefined texture\\\\\\\",t),i[t]}switch(t.type){case\\\\\\\"Scene\\\\\\\":s=new fr,void 0!==t.background&&(Number.isInteger(t.background)?s.background=new D.a(t.background):s.background=u(t.background)),void 0!==t.environment&&(s.environment=u(t.environment)),void 0!==t.fog&&(\\\\\\\"Fog\\\\\\\"===t.fog.type?s.fog=new xa(t.fog.color,t.fog.near,t.fog.far):\\\\\\\"FogExp2\\\\\\\"===t.fog.type&&(s.fog=new ba(t.fog.color,t.fog.density)));break;case\\\\\\\"PerspectiveCamera\\\\\\\":s=new K.a(t.fov,t.aspect,t.near,t.far),void 0!==t.focus&&(s.focus=t.focus),void 0!==t.zoom&&(s.zoom=t.zoom),void 0!==t.filmGauge&&(s.filmGauge=t.filmGauge),void 0!==t.filmOffset&&(s.filmOffset=t.filmOffset),void 0!==t.view&&(s.view=Object.assign({},t.view));break;case\\\\\\\"OrthographicCamera\\\\\\\":s=new st.a(t.left,t.right,t.top,t.bottom,t.near,t.far),void 0!==t.zoom&&(s.zoom=t.zoom),void 0!==t.view&&(s.view=Object.assign({},t.view));break;case\\\\\\\"AmbientLight\\\\\\\":s=new uz.a(t.color,t.intensity);break;case\\\\\\\"DirectionalLight\\\\\\\":s=new Gz.a(t.color,t.intensity);break;case\\\\\\\"PointLight\\\\\\\":s=new sU.a(t.color,t.intensity,t.distance,t.decay);break;case\\\\\\\"RectAreaLight\\\\\\\":s=new vz(t.color,t.intensity,t.width,t.height);break;case\\\\\\\"SpotLight\\\\\\\":s=new hU.a(t.color,t.intensity,t.distance,t.angle,t.penumbra,t.decay);break;case\\\\\\\"HemisphereLight\\\\\\\":s=new Qz(t.color,t.groundColor,t.intensity);break;case\\\\\\\"LightProbe\\\\\\\":s=(new IX).fromJSON(t);break;case\\\\\\\"SkinnedMesh\\\\\\\":o=l(t.geometry),a=c(t.material),s=new mr.a(o,a),void 0!==t.bindMode&&(s.bindMode=t.bindMode),void 0!==t.bindMatrix&&s.bindMatrix.fromArray(t.bindMatrix),void 0!==t.skeleton&&(s.skeleton=t.skeleton);break;case\\\\\\\"Mesh\\\\\\\":o=l(t.geometry),a=c(t.material),s=new k.a(o,a);break;case\\\\\\\"InstancedMesh\\\\\\\":o=l(t.geometry),a=c(t.material);const e=t.count,n=t.instanceMatrix,i=t.instanceColor;s=new _X(o,a,e),s.instanceMatrix=new cX(new Float32Array(n.array),16),void 0!==i&&(s.instanceColor=new cX(new Float32Array(i.array),i.itemSize));break;case\\\\\\\"LOD\\\\\\\":s=new Mr;break;case\\\\\\\"Line\\\\\\\":s=new Pz.a(l(t.geometry),c(t.material));break;case\\\\\\\"LineLoop\\\\\\\":s=new LX.a(l(t.geometry),c(t.material));break;case\\\\\\\"LineSegments\\\\\\\":s=new Tr.a(l(t.geometry),c(t.material));break;case\\\\\\\"PointCloud\\\\\\\":case\\\\\\\"Points\\\\\\\":s=new gr.a(l(t.geometry),c(t.material));break;case\\\\\\\"Sprite\\\\\\\":s=new CX(c(t.material));break;case\\\\\\\"Group\\\\\\\":s=new In.a;break;case\\\\\\\"Bone\\\\\\\":s=new vr.a;break;default:s=new Q.a}if(s.uuid=t.uuid,void 0!==t.name&&(s.name=t.name),void 0!==t.matrix?(s.matrix.fromArray(t.matrix),void 0!==t.matrixAutoUpdate&&(s.matrixAutoUpdate=t.matrixAutoUpdate),s.matrixAutoUpdate&&s.matrix.decompose(s.position,s.quaternion,s.scale)):(void 0!==t.position&&s.position.fromArray(t.position),void 0!==t.rotation&&s.rotation.fromArray(t.rotation),void 0!==t.quaternion&&s.quaternion.fromArray(t.quaternion),void 0!==t.scale&&s.scale.fromArray(t.scale)),void 0!==t.castShadow&&(s.castShadow=t.castShadow),void 0!==t.receiveShadow&&(s.receiveShadow=t.receiveShadow),t.shadow&&(void 0!==t.shadow.bias&&(s.shadow.bias=t.shadow.bias),void 0!==t.shadow.normalBias&&(s.shadow.normalBias=t.shadow.normalBias),void 0!==t.shadow.radius&&(s.shadow.radius=t.shadow.radius),void 0!==t.shadow.mapSize&&s.shadow.mapSize.fromArray(t.shadow.mapSize),void 0!==t.shadow.camera&&(s.shadow.camera=this.parseObject(t.shadow.camera))),void 0!==t.visible&&(s.visible=t.visible),void 0!==t.frustumCulled&&(s.frustumCulled=t.frustumCulled),void 0!==t.renderOrder&&(s.renderOrder=t.renderOrder),void 0!==t.userData&&(s.userData=t.userData),void 0!==t.layers&&(s.layers.mask=t.layers),void 0!==t.children){const o=t.children;for(let t=0;t<o.length;t++)s.add(this.parseObject(o[t],e,n,i,r))}if(void 0!==t.animations){const e=t.animations;for(let t=0;t<e.length;t++){const n=e[t];s.animations.push(r[n])}}if(\\\\\\\"LOD\\\\\\\"===t.type){void 0!==t.autoUpdate&&(s.autoUpdate=t.autoUpdate);const e=t.levels;for(let t=0;t<e.length;t++){const n=e[t],i=s.getObjectByProperty(\\\\\\\"uuid\\\\\\\",n.object);void 0!==i&&s.addLevel(i,n.distance)}}return s}bindSkeletons(t,e){0!==Object.keys(e).length&&t.traverse((function(t){if(!0===t.isSkinnedMesh&&void 0!==t.skeleton){const n=e[t.skeleton];void 0===n?console.warn(\\\\\\\"THREE.ObjectLoader: No skeleton found with UUID:\\\\\\\",t.skeleton):t.bind(n,t.bindMatrix)}}))}setTexturePath(t){return console.warn(\\\\\\\"THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath().\\\\\\\"),this.setResourcePath(t)}}const lY={UVMapping:w.Yc,CubeReflectionMapping:w.o,CubeRefractionMapping:w.p,EquirectangularReflectionMapping:w.D,EquirectangularRefractionMapping:w.E,CubeUVReflectionMapping:w.q,CubeUVRefractionMapping:w.r},cY={RepeatWrapping:w.wc,ClampToEdgeWrapping:w.n,MirroredRepeatWrapping:w.kb},uY={NearestFilter:w.ob,NearestMipmapNearestFilter:w.sb,NearestMipmapLinearFilter:w.rb,LinearFilter:w.V,LinearMipmapNearestFilter:w.Z,LinearMipmapLinearFilter:w.Y};const hY=new class extends aa{constructor(){super(...arguments),this.cache=oa.STRING(\\\\\\\"\\\\\\\",{hidden:!0}),this.reset=oa.BUTTON(null,{callback:(t,e)=>{dY.PARAM_CALLBACK_reset(t,e)}})}};class dY extends gG{constructor(){super(...arguments),this.paramsConfig=hY}static type(){return\\\\\\\"cache\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to cache\\\\\\\"]}initializeNode(){this.io.inputs.setCount(0,1)}cook(t){const e=\\\\\\\"\\\\\\\"==this.pv.cache||null==this.pv.cache,n=t[0];if(e&&n){const t=[];for(let e of n.objects())t.push(e.toJSON());this.setCoreGroup(n),this.p.cache.set(JSON.stringify(t))}else if(this.pv.cache){const t=new aY,e=JSON.parse(this.pv.cache),n=[];for(let i of e){const e=t.parse(i);n.push(e)}this.setObjects(n)}else this.setObjects([])}static PARAM_CALLBACK_reset(t,e){t.param_callback_PARAM_CALLBACK_reset()}async param_callback_PARAM_CALLBACK_reset(){this.p.cache.set(\\\\\\\"\\\\\\\"),this.compute()}}const pY=[nr.ORTHOGRAPHIC,nr.PERSPECTIVE],_Y={direction:new p.a(0,1,0)},mY=[new d.a(-1,-1),new d.a(-1,1),new d.a(1,1),new d.a(1,-1)],fY=new p.a(0,0,1);const gY=new class extends aa{constructor(){super(...arguments),this.camera=oa.NODE_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:Ki.OBJ,types:pY}}),this.direction=oa.VECTOR3(_Y.direction),this.offset=oa.FLOAT(0,{range:[-10,10],rangeLocked:[!1,!1]}),this.useSegmentsCount=oa.BOOLEAN(!0),this.stepSize=oa.FLOAT(1,{range:[.001,1],rangeLocked:[!1,!1],visibleIf:{useSegmentsCount:0}}),this.segments=oa.VECTOR2([10,10],{visibleIf:{useSegmentsCount:1}}),this.sizeMult=oa.FLOAT(1,{range:[0,2],rangeLocked:[!0,!1]}),this.updateOnWindowResize=oa.BOOLEAN(1),this.update=oa.BUTTON(null,{callback:t=>{vY.PARAM_CALLBACK_update(t)}})}};class vY extends gG{constructor(){super(...arguments),this.paramsConfig=gY,this._plane=new X.a,this._raycaster=new uL,this._planeCorners=[new p.a,new p.a,new p.a,new p.a],this._planeCenter=new p.a,this._core_transform=new Mz,this.segments_count=new d.a(1,1),this.planeSize=new d.a}static type(){return\\\\\\\"cameraPlane\\\\\\\"}cook(){this._updateWindowControllerDependency();const t=this.pv.camera.nodeWithContext(Ki.OBJ);if(!t)return this.states.error.set(\\\\\\\"no camera found\\\\\\\"),void this.cookController.endCook();if(!pY.includes(t.type()))return this.states.error.set(\\\\\\\"node found is not a camera\\\\\\\"),void this.cookController.endCook();const e=t.object;this._computePlaneParams(e)}_updateWindowControllerDependency(){this.pv.updateOnWindowResize?this.addGraphInput(this.scene().windowController.graphNode()):this.removeGraphInput(this.scene().windowController.graphNode())}_computePlaneParams(t){this._plane.normal.copy(this.pv.direction),this._plane.constant=this.pv.offset;let e=0;this._planeCenter.set(0,0,0);for(let n of mY){this._raycaster.setFromCamera(n,t);const i=this._planeCorners[e];this._raycaster.ray.intersectPlane(this._plane,i),this._planeCenter.add(i),e++}this._planeCenter.multiplyScalar(.25);const n=this._planeCorners[1].distanceTo(this._planeCorners[2]),i=this._planeCorners[0].distanceTo(this._planeCorners[3]),r=this._planeCorners[0].distanceTo(this._planeCorners[1]),s=this._planeCorners[2].distanceTo(this._planeCorners[3]),o=Math.max(n,i)*this.pv.sizeMult,a=Math.max(r,s)*this.pv.sizeMult;this.planeSize.set(o,a);const l=this._createPlane(this.planeSize);this._core_transform.rotate_geometry(l,fY,this.pv.direction);const c=this._core_transform.translation_matrix(this._planeCenter);l.applyMatrix4(c),this.setGeometry(l)}_createPlane(t){return t=t.clone(),this.pv.useSegmentsCount?(this.segments_count.x=Math.floor(this.pv.segments.x),this.segments_count.y=Math.floor(this.pv.segments.y)):this.pv.stepSize>0&&(this.segments_count.x=Math.floor(t.x/this.pv.stepSize),this.segments_count.y=Math.floor(t.y/this.pv.stepSize),t.x=this.segments_count.x*this.pv.stepSize,t.y=this.segments_count.y*this.pv.stepSize),new L(t.x,t.y,this.segments_count.x,this.segments_count.y)}static PARAM_CALLBACK_update(t){t._paramCallbackUpdate()}_paramCallbackUpdate(){this.setDirty()}}class yY extends pG{constructor(){super(...arguments),this._geo_center=new p.a}static type(){return\\\\\\\"center\\\\\\\"}cook(t,e){var n;const i=t[0].objectsWithGeo(),r=new Array(3*i.length);r.fill(0);for(let t=0;t<i.length;t++){const e=i[t],s=e.geometry;s.computeBoundingBox(),s.boundingBox&&(null===(n=s.boundingBox)||void 0===n||n.getCenter(this._geo_center),e.updateMatrixWorld(),this._geo_center.applyMatrix4(e.matrixWorld),this._geo_center.toArray(r,3*t))}const s=new S.a;s.setAttribute(\\\\\\\"position\\\\\\\",new C.a(new Float32Array(r),3));const o=this.createObject(s,Sr.POINTS);return this.createCoreGroupFromObjects([o])}}yY.DEFAULT_PARAMS={},yY.INPUT_CLONED_STATE=Qi.FROM_NODE;const xY=new class extends aa{};class bY extends gG{constructor(){super(...arguments),this.paramsConfig=xY}static type(){return\\\\\\\"center\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(yY.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new yY(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class wY{static positions(t,e,n=360){const i=rs.degrees_to_radians(n)/e,r=[];for(let n=0;n<e;n++){const e=i*n,s=t*Math.cos(e),o=t*Math.sin(e);r.push(new d.a(s,o))}return r}static create(t,e,n=360){const i=this.positions(t,e,n),r=[],s=[];let o;for(let t=0;t<i.length;t++)o=i[t],r.push(o.x),r.push(o.y),r.push(0),t>0&&(s.push(t-1),s.push(t));s.push(e-1),s.push(0);const a=new S.a;return a.setAttribute(\\\\\\\"position\\\\\\\",new C.c(r,3)),a.setIndex(s),a}}const TY=new p.a(0,0,1);class AY extends pG{constructor(){super(...arguments),this._core_transform=new Mz}static type(){return\\\\\\\"circle\\\\\\\"}cook(t,e){return e.open?this._create_circle(e):this._create_disk(e)}_create_circle(t){const e=wY.create(t.radius,t.segments,t.arcAngle);return this._core_transform.rotate_geometry(e,TY,t.direction),this.createCoreGroupFromGeometry(e,Sr.LINE_SEGMENTS)}_create_disk(t){const e=new zX(t.radius,t.segments);return this._core_transform.rotate_geometry(e,TY,t.direction),this.createCoreGroupFromGeometry(e)}}AY.DEFAULT_PARAMS={radius:1,segments:12,open:!0,arcAngle:360,direction:new p.a(0,1,0)};const EY=AY.DEFAULT_PARAMS;const MY=new class extends aa{constructor(){super(...arguments),this.radius=oa.FLOAT(EY.radius),this.segments=oa.INTEGER(EY.segments,{range:[1,50],rangeLocked:[!0,!1]}),this.open=oa.BOOLEAN(EY.open),this.arcAngle=oa.FLOAT(EY.arcAngle,{range:[0,360],rangeLocked:[!1,!1],visibleIf:{open:1}}),this.direction=oa.VECTOR3(EY.direction)}};class SY extends gG{constructor(){super(...arguments),this.paramsConfig=MY}static type(){return\\\\\\\"circle\\\\\\\"}initializeNode(){}cook(){this._operation=this._operation||new AY(this._scene,this.states);const t=this._operation.cook([],this.pv);this.setCoreGroup(t)}}var CY;!function(t){t.SEGMENTS_COUNT=\\\\\\\"segments count\\\\\\\",t.SEGMENTS_LENGTH=\\\\\\\"segments length\\\\\\\"}(CY||(CY={}));const NY=[CY.SEGMENTS_COUNT,CY.SEGMENTS_LENGTH];var LY;!function(t){t.ABC=\\\\\\\"abc\\\\\\\",t.ACB=\\\\\\\"acb\\\\\\\",t.AB=\\\\\\\"ab\\\\\\\",t.BC=\\\\\\\"bc\\\\\\\",t.AC=\\\\\\\"ac\\\\\\\"}(LY||(LY={}));const OY=[LY.ABC,LY.ACB,LY.AB,LY.AC,LY.BC];class RY{constructor(t){this.params=t,this.a=new p.a,this.b=new p.a,this.c=new p.a,this.an=new p.a,this.bn=new p.a,this.cn=new p.a,this.ac=new p.a,this.ab=new p.a,this.ab_x_ac=new p.a,this.part0=new p.a,this.part1=new p.a,this.divider=1,this.a_center=new p.a,this.center=new p.a,this.normal=new p.a,this.radius=1,this.x=new p.a,this.y=new p.a,this.z=new p.a,this.angle_ab=1,this.angle_ac=1,this.angle_bc=1,this.angle=2*Math.PI,this.x_rotated=new p.a,this._created_geometries={}}created_geometries(){return this._created_geometries}create(t,e,n){this.a.copy(t),this.b.copy(e),this.c.copy(n),this._compute_axis(),this._create_arc(),this._create_center()}_create_arc(){this._compute_angle();const t=this._points_count(),e=new Array(3*t),n=new Array(t),i=this.angle/(t-1);this.x_rotated.copy(this.x).multiplyScalar(this.radius);let r=0;for(r=0;r<t;r++)this.x_rotated.copy(this.x).applyAxisAngle(this.normal,i*r).multiplyScalar(this.radius).add(this.center),this.x_rotated.toArray(e,3*r),r>0&&(n[2*(r-1)]=r-1,n[2*(r-1)+1]=r);this.params.full&&(n.push(r-1),n.push(0));const s=new S.a;if(s.setAttribute(\\\\\\\"position\\\\\\\",new C.a(new Float32Array(e),3)),s.setIndex(n),this.params.addIdAttribute||this.params.addIdnAttribute){const e=new Array(t);for(let t=0;t<e.length;t++)e[t]=t;this.params.addIdAttribute&&s.setAttribute(\\\\\\\"id\\\\\\\",new C.a(new Float32Array(e),1));const n=e.map((e=>e/(t-1)));this.params.addIdnAttribute&&s.setAttribute(\\\\\\\"idn\\\\\\\",new C.a(new Float32Array(n),1))}this._created_geometries.arc=s}_create_center(){if(!this.params.center)return;const t=new S.a,e=[this.center.x,this.center.y,this.center.z];t.setAttribute(\\\\\\\"position\\\\\\\",new C.a(new Float32Array(e),3)),this._created_geometries.center=t}_compute_axis(){this.ac.copy(this.c).sub(this.a),this.ab.copy(this.b).sub(this.a),this.ab_x_ac.copy(this.ab).cross(this.ac),this.divider=2*this.ab_x_ac.lengthSq(),this.part0.copy(this.ab_x_ac).cross(this.ab).multiplyScalar(this.ac.lengthSq()),this.part1.copy(this.ac).cross(this.ab_x_ac).multiplyScalar(this.ab.lengthSq()),this.a_center.copy(this.part0).add(this.part1).divideScalar(this.divider),this.radius=this.a_center.length(),this.normal.copy(this.ab_x_ac).normalize(),this.center.copy(this.a).add(this.a_center)}_compute_angle(){this.params.arc&&(this.params.full?(this.x.copy(this.a).sub(this.center).normalize(),this.angle=2*Math.PI):(this.an.copy(this.a).sub(this.center).normalize(),this.bn.copy(this.b).sub(this.center).normalize(),this.cn.copy(this.c).sub(this.center).normalize(),this._set_x_from_joinMode(),this.y.copy(this.normal),this.z.copy(this.x).cross(this.y).normalize(),this.angle_ab=this.an.angleTo(this.bn),this.angle_ac=this.an.angleTo(this.cn),this.angle_bc=this.bn.angleTo(this.cn),this._set_angle_from_joinMode()))}_points_count(){const t=this.params.pointsCountMode;switch(t){case CY.SEGMENTS_COUNT:return this.params.segmentsCount+1;case CY.SEGMENTS_LENGTH:{let t=Math.PI*this.radius*this.radius;return this.params.full||(t*=Math.abs(this.angle)/(2*Math.PI)),Math.ceil(t/this.params.segmentsLength)}}ar.unreachable(t)}_set_x_from_joinMode(){const t=this.params.joinMode;switch(this.x.copy(this.a).sub(this.center).normalize(),t){case LY.ABC:case LY.ACB:case LY.AB:case LY.AC:return this.x.copy(this.an);case LY.BC:return this.x.copy(this.bn)}ar.unreachable(t)}_set_angle_from_joinMode(){const t=this.params.joinMode;switch(t){case LY.ABC:return void(this.angle=this.angle_ab+this.angle_bc);case LY.ACB:return this.angle=this.angle_ac+this.angle_bc,void(this.angle*=-1);case LY.AB:return void(this.angle=this.angle_ab);case LY.AC:return this.angle=this.angle_ac,void(this.angle*=-1);case LY.BC:return void(this.angle=this.angle_bc)}ar.unreachable(t)}}const PY=new class extends aa{constructor(){super(...arguments),this.arc=oa.BOOLEAN(1),this.pointsCountMode=oa.INTEGER(NY.indexOf(CY.SEGMENTS_COUNT),{visibleIf:{arc:1},menu:{entries:NY.map(((t,e)=>({value:e,name:t})))}}),this.segmentsLength=oa.FLOAT(.1,{visibleIf:{arc:1,pointsCountMode:NY.indexOf(CY.SEGMENTS_LENGTH)},range:[0,1],rangeLocked:[!0,!1]}),this.segmentsCount=oa.INTEGER(100,{visibleIf:{arc:1,pointsCountMode:NY.indexOf(CY.SEGMENTS_COUNT)},range:[1,100],rangeLocked:[!0,!1]}),this.full=oa.BOOLEAN(1,{visibleIf:{arc:1}}),this.joinMode=oa.INTEGER(OY.indexOf(LY.ABC),{visibleIf:{arc:1,full:0},menu:{entries:OY.map(((t,e)=>({value:e,name:t})))}}),this.addIdAttribute=oa.BOOLEAN(1),this.addIdnAttribute=oa.BOOLEAN(1),this.center=oa.BOOLEAN(0)}};class IY extends gG{constructor(){super(...arguments),this.paramsConfig=PY,this.a=new p.a,this.b=new p.a,this.c=new p.a}static type(){return\\\\\\\"circle3Points\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState([Qi.NEVER])}cook(t){const e=t[0].points();e.length<3?this.states.error.set(`only ${e.length} points found, when 3 are required`):this._create_circle(e)}_create_circle(t){const e=new RY({arc:this.pv.arc,center:this.pv.center,pointsCountMode:NY[this.pv.pointsCountMode],segmentsLength:this.pv.segmentsLength,segmentsCount:this.pv.segmentsCount,full:this.pv.full,joinMode:OY[this.pv.joinMode],addIdAttribute:this.pv.addIdAttribute,addIdnAttribute:this.pv.addIdnAttribute});t[0].getPosition(this.a),t[1].getPosition(this.b),t[2].getPosition(this.c),e.create(this.a,this.b,this.c);const n=[],i=e.created_geometries();i.arc&&n.push(this.createObject(i.arc,Sr.LINE_SEGMENTS)),i.center&&n.push(this.createObject(i.center,Sr.POINTS)),this.setObjects(n)}}class FY extends pG{static type(){return\\\\\\\"color\\\\\\\"}cook(t,e){}}FY.DEFAULT_PARAMS={fromAttribute:!1,attribName:\\\\\\\"\\\\\\\",color:new D.a(1,1,1),asHsv:!1};const DY=new D.a(1,1,1),kY=\\\\\\\"color\\\\\\\",BY=FY.DEFAULT_PARAMS;const zY=new class extends aa{constructor(){super(...arguments),this.fromAttribute=oa.BOOLEAN(BY.fromAttribute),this.attribName=oa.STRING(BY.attribName,{visibleIf:{fromAttribute:1}}),this.color=oa.COLOR(BY.color,{visibleIf:{fromAttribute:0},expression:{forEntities:!0}}),this.asHsv=oa.BOOLEAN(BY.asHsv,{visibleIf:{fromAttribute:0}})}};class UY extends gG{constructor(){super(...arguments),this.paramsConfig=zY,this._r_arrays_by_geometry_uuid={},this._g_arrays_by_geometry_uuid={},this._b_arrays_by_geometry_uuid={}}static type(){return\\\\\\\"color\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to update color of\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}async cook(t){const e=t[0],n=e.coreObjects();for(let t of n)if(this.pv.fromAttribute)this._set_fromAttribute(t);else{this.p.color.hasExpression()?await this._eval_expressions(t):this._eval_simple_values(t)}if(!this.io.inputs.cloneRequired(0)){const t=e.geometries();for(let e of t)e.getAttribute(kY).needsUpdate=!0}this.setCoreGroup(e)}_set_fromAttribute(t){const e=t.coreGeometry();if(!e)return;this._create_init_color(e,DY);const n=e.points(),i=e.attribSize(this.pv.attribName),r=e.geometry(),s=r.getAttribute(this.pv.attribName).array,o=r.getAttribute(kY).array;switch(i){case 1:for(let t=0;t<n.length;t++){const e=3*t;o[e+0]=s[t],o[e+1]=1-s[t],o[e+2]=0}break;case 2:for(let t=0;t<n.length;t++){const e=3*t,n=2*t;o[e+0]=s[n+0],o[e+1]=s[n+1],o[e+2]=0}break;case 3:for(let t=0;t<s.length;t++)o[t]=s[t];break;case 4:for(let t=0;t<n.length;t++){const e=3*t,n=4*t;o[e+0]=s[n+0],o[e+1]=s[n+1],o[e+2]=s[n+2]}}}_create_init_color(t,e){t.hasAttrib(kY)||t.addNumericAttrib(kY,3,DY)}_eval_simple_values(t){const e=t.coreGeometry();if(!e)return;let n;this._create_init_color(e,DY),this.pv.asHsv?(n=new D.a,oo.set_hsv(this.pv.color.r,this.pv.color.g,this.pv.color.b,n)):n=this.pv.color,e.addNumericAttrib(kY,3,n)}async _eval_expressions(t){const e=t.points(),n=t.object(),i=t.coreGeometry();i&&this._create_init_color(i,DY);const r=n.geometry;if(r){const t=r.getAttribute(kY).array,n=await this._update_from_param(r,t,e,0),i=await this._update_from_param(r,t,e,1),s=await this._update_from_param(r,t,e,2);if(n&&this._commit_tmp_values(n,t,0),i&&this._commit_tmp_values(i,t,1),s&&this._commit_tmp_values(s,t,2),this.pv.asHsv){let n,i=new D.a,r=new D.a;for(let s of e)n=3*s.index(),i.fromArray(t,n),oo.set_hsv(i.r,i.g,i.b,r),r.toArray(t,n)}}}async _update_from_param(t,e,n,i){const r=this.p.color.components[i],s=[this.pv.color.r,this.pv.color.g,this.pv.color.b][i],o=[this._r_arrays_by_geometry_uuid,this._g_arrays_by_geometry_uuid,this._b_arrays_by_geometry_uuid][i];let a;if(r.hasExpression()&&r.expressionController)a=this._init_array_if_required(t,o,n.length),await r.expressionController.compute_expression_for_points(n,((t,e)=>{a[t.index()]=e}));else for(let t of n)e[3*t.index()+i]=s;return a}_init_array_if_required(t,e,n){const i=t.uuid,r=e[i];return r?r.length<n&&(e[i]=new Array(n)):e[i]=new Array(n),e[i]}_commit_tmp_values(t,e,n){for(let i=0;i<t.length;i++)e[3*i+n]=t[i]}}const GY=new p.a(0,1,0);const VY=new class extends aa{constructor(){super(...arguments),this.radius=oa.FLOAT(1,{range:[0,1]}),this.height=oa.FLOAT(1,{range:[0,1]}),this.segmentsRadial=oa.INTEGER(12,{range:[3,20],rangeLocked:[!0,!1]}),this.segmentsHeight=oa.INTEGER(1,{range:[1,20],rangeLocked:[!0,!1]}),this.cap=oa.BOOLEAN(1),this.thetaStart=oa.FLOAT(1,{range:[0,2*Math.PI]}),this.thetaLength=oa.FLOAT(\\\\\\\"2*$PI\\\\\\\",{range:[0,2*Math.PI]}),this.center=oa.VECTOR3([0,0,0]),this.direction=oa.VECTOR3([0,0,1])}};class HY extends gG{constructor(){super(...arguments),this.paramsConfig=VY,this._core_transform=new Mz}static type(){return\\\\\\\"cone\\\\\\\"}cook(){const t=new _U(this.pv.radius,this.pv.height,this.pv.segmentsRadial,this.pv.segmentsHeight,!this.pv.cap,this.pv.thetaStart,this.pv.thetaLength);this._core_transform.rotate_geometry(t,GY,this.pv.direction),t.translate(this.pv.center.x,this.pv.center.y,this.pv.center.z),this.setGeometry(t)}}const jY={SCALE:new p.a(1,1,1),PSCALE:1,EYE:new p.a(0,0,0),UP:new p.a(0,1,0)},WY=new p.a(1,1,1),qY=new d.a(0,0),XY=\\\\\\\"color\\\\\\\";var YY,$Y;!function(t){t.POSITION=\\\\\\\"instancePosition\\\\\\\",t.SCALE=\\\\\\\"instanceScale\\\\\\\",t.ORIENTATION=\\\\\\\"instanceOrientation\\\\\\\",t.COLOR=\\\\\\\"instanceColor\\\\\\\",t.UV=\\\\\\\"instanceUv\\\\\\\"}(YY||(YY={}));class JY{constructor(t){this._group_wrapper=t,this._matrices={},this._point_scale=new p.a,this._point_normal=new p.a,this._point_up=new p.a,this._is_pscale_present=this._group_wrapper.hasAttrib(\\\\\\\"pscale\\\\\\\"),this._is_scale_present=this._group_wrapper.hasAttrib(\\\\\\\"scale\\\\\\\"),this._is_normal_present=this._group_wrapper.hasAttrib(\\\\\\\"normal\\\\\\\"),this._is_up_present=this._group_wrapper.hasAttrib(\\\\\\\"up\\\\\\\"),this._do_rotate_matrices=this._is_normal_present}matrices(){return this._matrices={},this._matrices.translate=new A.a,this._matrices.rotate=new A.a,this._matrices.scale=new A.a,this._group_wrapper.points().map((t=>{const e=new A.a;return this._matrix_from_point(t,e),e}))}_matrix_from_point(t,e){const n=t.position();this._is_scale_present?t.attribValue(\\\\\\\"scale\\\\\\\",this._point_scale):this._point_scale.copy(jY.SCALE);const i=this._is_pscale_present?t.attribValue(\\\\\\\"pscale\\\\\\\"):jY.PSCALE;this._point_scale.multiplyScalar(i);const r=this._matrices.scale;r.makeScale(this._point_scale.x,this._point_scale.y,this._point_scale.z);const s=this._matrices.translate;if(s.makeTranslation(n.x,n.y,n.z),e.multiply(s),this._do_rotate_matrices){const n=this._matrices.rotate,i=jY.EYE;t.attribValue(\\\\\\\"normal\\\\\\\",this._point_normal),this._point_normal.multiplyScalar(-1),this._is_up_present?t.attribValue(\\\\\\\"up\\\\\\\",this._point_up):this._point_up.copy(jY.UP),this._point_up.normalize(),n.lookAt(i,this._point_normal,this._point_up),e.multiply(n)}e.multiply(r)}static create_instance_buffer_geo(t,e,n){const i=e.points(),r=new kX;r.copy(t),r.instanceCount=1/0;const s=i.length,o=new Float32Array(3*s),a=new Float32Array(3*s),l=new Float32Array(3*s),c=new Float32Array(4*s),u=e.hasAttrib(XY),h=new p.a(0,0,0),d=new au.a,_=new p.a(1,1,1),f=new JY(e).matrices();i.forEach(((t,e)=>{const n=3*e,i=4*e;f[e].decompose(h,d,_),h.toArray(o,n),d.toArray(c,i),_.toArray(l,n);(u?t.attribValue(XY,this._point_color):WY).toArray(a,n)}));const g=e.hasAttrib(\\\\\\\"uv\\\\\\\");if(g){const t=new Float32Array(2*s);i.forEach(((e,n)=>{const i=2*n;(g?e.attribValue(\\\\\\\"uv\\\\\\\",this._point_uv):qY).toArray(t,i)})),r.setAttribute(YY.UV,new cX(t,2))}r.setAttribute(YY.POSITION,new cX(o,3)),r.setAttribute(YY.SCALE,new cX(l,3)),r.setAttribute(YY.ORIENTATION,new cX(c,4)),r.setAttribute(YY.COLOR,new cX(a,3));e.attribNamesMatchingMask(n).forEach((t=>{const n=e.attribSize(t),o=new Float32Array(s*n);i.forEach(((e,i)=>{const r=e.attribValue(t);m.isNumber(r)?o[i]=r:r.toArray(o,i*n)})),r.setAttribute(t,new cX(o,n))}));return new ps(r).markAsInstance(),r}}JY._point_color=new p.a,JY._point_uv=new d.a;class ZY extends ru{set_point(t){this._point=t,this.setDirty(),this.removeDirtyState()}value(t){return this._point?t?this._point.attribValue(t):this._point.index():this._global_index}}!function(t){t[t.OBJECT=0]=\\\\\\\"OBJECT\\\\\\\",t[t.GEOMETRY=1]=\\\\\\\"GEOMETRY\\\\\\\"}($Y||($Y={}));const QY=[$Y.OBJECT,$Y.GEOMETRY],KY=[{name:\\\\\\\"object\\\\\\\",value:$Y.OBJECT},{name:\\\\\\\"geometry\\\\\\\",value:$Y.GEOMETRY}];const t$=new class extends aa{constructor(){super(...arguments),this.count=oa.INTEGER(1,{range:[1,20],rangeLocked:[!0,!1]}),this.transformOnly=oa.BOOLEAN(0),this.transformMode=oa.INTEGER(0,{menu:{entries:KY}}),this.copyAttributes=oa.BOOLEAN(0),this.attributesToCopy=oa.STRING(\\\\\\\"\\\\\\\",{visibleIf:{copyAttributes:!0}}),this.useCopyExpr=oa.BOOLEAN(0)}};class e$ extends gG{constructor(){super(...arguments),this.paramsConfig=t$,this._attribute_names_to_copy=[],this._objects=[],this._object_position=new p.a}static type(){return\\\\\\\"copy\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to be copied\\\\\\\",\\\\\\\"points to copy to\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1,2),this.io.inputs.initInputsClonedState([Qi.ALWAYS,Qi.NEVER])}async cook(t){const e=t[0];if(!this.io.inputs.has_input(1))return void await this.cook_without_template(e);const n=t[1];n?await this.cook_with_template(e,n):this.states.error.set(\\\\\\\"second input invalid\\\\\\\")}async cook_with_template(t,e){this._objects=[];const n=e.points();let i=new JY(e).matrices();const r=new p.a,s=new au.a,o=new p.a;i[0].decompose(r,s,o),this._attribute_names_to_copy=sr.attribNames(this.pv.attributesToCopy).filter((t=>e.hasAttrib(t))),await this._copy_moved_objects_on_template_points(t,i,n),this.setObjects(this._objects)}async _copy_moved_objects_on_template_points(t,e,n){for(let i=0;i<n.length;i++)await this._copy_moved_object_on_template_point(t,e,n,i)}async _copy_moved_object_on_template_point(t,e,n,i){const r=e[i],s=n[i];this.stamp_node.set_point(s);const o=await this._get_moved_objects_for_template_point(t,i);for(let t of o)this.pv.copyAttributes&&this._copyAttributes_from_template(t,s),this.pv.transformOnly?t.applyMatrix4(r):this._apply_matrix_to_object_or_geometry(t,r),this._objects.push(t)}_apply_matrix_to_object_or_geometry(t,e){const n=QY[this.pv.transformMode];switch(n){case $Y.OBJECT:return void this._apply_matrix_to_object(t,e);case $Y.GEOMETRY:{const n=t.geometry;return void(n&&n.applyMatrix4(e))}}ar.unreachable(n)}_apply_matrix_to_object(t,e){this._object_position.copy(t.position),t.position.multiplyScalar(0),t.updateMatrix(),t.applyMatrix4(e),t.position.add(this._object_position),t.updateMatrix()}async _get_moved_objects_for_template_point(t,e){const n=await this._stamp_instance_group_if_required(t);if(n){return this.pv.transformOnly?f.compact([n.objects()[e]]):n.clone().objects()}return[]}async _stamp_instance_group_if_required(t){if(!this.pv.useCopyExpr)return t;{const t=await this.containerController.requestInputContainer(0);if(t){const e=t.coreContent();return e||void 0}this.states.error.set(`input failed for index ${this.stamp_value()}`)}}async _copy_moved_objects_for_each_instance(t){for(let e=0;e<this.pv.count;e++)await this._copy_moved_objects_for_instance(t,e)}async _copy_moved_objects_for_instance(t,e){this.stamp_node.set_global_index(e);const n=await this._stamp_instance_group_if_required(t);n&&n.objects().forEach((t=>{const e=vs.clone(t);this._objects.push(e)}))}async cook_without_template(t){this._objects=[],await this._copy_moved_objects_for_each_instance(t),this.setObjects(this._objects)}_copyAttributes_from_template(t,e){this._attribute_names_to_copy.forEach(((n,i)=>{const r=e.attribValue(n);new vs(t,i).addAttribute(n,r)}))}stamp_value(t){return this.stamp_node.value(t)}get stamp_node(){return this._stamp_node=this._stamp_node||this.create_stamp_node()}create_stamp_node(){const t=new ZY(this.scene());return this.dirtyController.setForbiddenTriggerNodes([t]),t}dispose(){super.dispose(),this._stamp_node&&this._stamp_node.dispose()}}const n$=\\\\\\\"id\\\\\\\",i$=\\\\\\\"class\\\\\\\",r$=\\\\\\\"html\\\\\\\";class s$ extends pG{static type(){return\\\\\\\"CSS2DObject\\\\\\\"}cook(t,e){const n=t[0];if(n){const t=this._create_objects_from_input_points(n,e);return this.createCoreGroupFromObjects(t)}{const t=this._create_object_from_scratch(e);return this.createCoreGroupFromObjects([t])}}_create_objects_from_input_points(t,e){const n=t.points(),i=[];for(let t of n){const n=e.useIdAttrib?t.attribValue(n$):e.className,r=e.useClassAttrib?t.attribValue(i$):e.className,s=e.useHtmlAttrib?t.attribValue(r$):e.html,o=s$.create_css_object({id:n,className:r,html:s}),a=o.element;if(e.copyAttributes){const n=sr.attribNames(e.attributesToCopy);for(let e of n){const n=t.attribValue(e);m.isString(n)?a.setAttribute(e,n):m.isNumber(n)&&a.setAttribute(e,`${n}`)}}o.position.copy(t.position()),o.updateMatrix(),i.push(o)}return i}_create_object_from_scratch(t){return s$.create_css_object({id:t.id,className:t.className,html:t.html})}static create_css_object(t){const e=document.createElement(\\\\\\\"div\\\\\\\");e.id=t.id,e.className=t.className,e.innerHTML=t.html;const n=new vW(e);return n.matrixAutoUpdate=!1,n}}s$.DEFAULT_PARAMS={useIdAttrib:!1,id:\\\\\\\"my_css_object\\\\\\\",useClassAttrib:!1,className:\\\\\\\"CSS2DObject\\\\\\\",useHtmlAttrib:!1,html:\\\\\\\"<div>default html</div>\\\\\\\",copyAttributes:!1,attributesToCopy:\\\\\\\"\\\\\\\"},s$.INPUT_CLONED_STATE=Qi.FROM_NODE;const o$=s$.DEFAULT_PARAMS;const a$=new class extends aa{constructor(){super(...arguments),this.useIdAttrib=oa.BOOLEAN(o$.useIdAttrib),this.id=oa.STRING(o$.id,{visibleIf:{useIdAttrib:0}}),this.useClassAttrib=oa.BOOLEAN(o$.useClassAttrib),this.className=oa.STRING(o$.className,{visibleIf:{useClassAttrib:0}}),this.useHtmlAttrib=oa.BOOLEAN(o$.useHtmlAttrib),this.html=oa.STRING(o$.html,{visibleIf:{useHtmlAttrib:0},multiline:!0}),this.copyAttributes=oa.BOOLEAN(o$.copyAttributes),this.attributesToCopy=oa.STRING(o$.attributesToCopy,{visibleIf:{copyAttributes:!0}})}};class l$ extends gG{constructor(){super(...arguments),this.paramsConfig=a$}static type(){return\\\\\\\"CSS2DObject\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1)}cook(t){this._operation=this._operation||new s$(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class c${constructor(t,e){this._size=t,this._type=e}size(){return this._size}type(){return this._type}static from_value(t){const e=m.isString(t)?Dr.STRING:Dr.NUMERIC;return new this(m.isArray(t)?t.length:1,e)}}class u${constructor(t={}){this._attribute_datas_by_name={},this._options={},this._options.dataKeysPrefix=t.dataKeysPrefix,this._options.skipEntries=t.skipEntries,this._options.doConvert=t.doConvert||!1,this._options.convertToNumeric=t.convertToNumeric}dataKeysPrefix(){return this._options.dataKeysPrefix}get_prefixed_json(t,e){if(0==e.length)return t;{const n=e.shift();if(n)return this.get_prefixed_json(t[n],e)}return[]}setJSON(t){return this._json=t}createObject(){const t=new S.a,e=new ps(t);if(null!=this._json){const n=this._json.length;e.initPositionAttribute(n),this._find_attributes();const i=sr.attribNames(this._options.convertToNumeric||\\\\\\\"\\\\\\\");for(let n of Object.keys(this._attribute_datas_by_name)){const r=Wr.remapName(n);let s=this._attribute_values_for_name(n).flat();const o=this._attribute_datas_by_name[n],a=o.size();if(o.type()===Dr.STRING)if(this._options.doConvert&&sr.matchesOneMask(n,i)){const e=s.map((t=>m.isString(t)?parseFloat(t)||0:t));t.setAttribute(r,new C.c(e,a))}else{const t=Wr.arrayToIndexedArrays(s);e.setIndexedAttribute(r,t.values,t.indices)}else{const e=s;t.setAttribute(r,new C.c(e,a))}}}return t}_find_attributes(){let t;const e=sr.attribNames(this._options.skipEntries||\\\\\\\"\\\\\\\");if(this._json&&null!=(t=this._json[0]))for(let n of Object.keys(t)){const i=t[n];if(this._value_has_subentries(i))for(let t of Object.keys(i)){const r=[n,t].join(\\\\\\\":\\\\\\\"),s=i[n];sr.matchesOneMask(r,e)||(this._attribute_datas_by_name[r]=c$.from_value(s))}else sr.matchesOneMask(n,e)||(this._attribute_datas_by_name[n]=c$.from_value(i))}}_attribute_values_for_name(t){return this._json?this._json.map((e=>{const n=t.split(\\\\\\\":\\\\\\\")[0],i=e[n];if(this._value_has_subentries(i)){return i[t.substring(n.length+1)]||0}return i||0})):[]}_value_has_subentries(t){return m.isObject(t)&&!m.isArray(t)}}const h$=JSON.stringify([{value:-40},{value:-30},{value:-20},{value:-10},{value:0},{value:10},{value:20},{value:30},{value:40},{value:50},{value:60},{value:70},{value:80}]);const d$=new class extends aa{constructor(){super(...arguments),this.data=oa.STRING(h$)}};class p$ extends gG{constructor(){super(...arguments),this.paramsConfig=d$}static type(){return\\\\\\\"data\\\\\\\"}cook(){let t=null;try{t=JSON.parse(this.pv.data)}catch(t){this.states.error.set(\\\\\\\"could not parse json\\\\\\\")}if(t)try{const e=new u$;e.setJSON(t);const n=e.createObject();this.setGeometry(n,Sr.POINTS)}catch(t){this.states.error.set(\\\\\\\"could not build geometry from json\\\\\\\")}else this.cookController.endCook()}}class _$ extends jg{constructor(t,e,n={},i){super(t,e,i),this._node=i,this._parser=new u$(n)}async load(t,e,n){const i=await this._urlToLoad();fetch(i).then((async e=>{let n=await e.json();const i=this._parser.dataKeysPrefix();null!=i&&\\\\\\\"\\\\\\\"!=i&&(n=this._parser.get_prefixed_json(n,i.split(\\\\\\\".\\\\\\\"))),this._parser.setJSON(n);const r=this._parser.createObject();t(r)})).catch((t=>{ai.error(\\\\\\\"error\\\\\\\",t),n(t)}))}}const m$=\\\\\\\"position\\\\\\\";class f${constructor(t){this.attribute_names=t,this.attribute_names_from_first_line=!1,this.lines=[],this.points_count=0,this.attribute_values_by_name={},this.attribute_data_by_name={},this._loading=!1,this.attribute_names||(this.attribute_names_from_first_line=!0)}async load(t){if(this._loading)return void console.warn(\\\\\\\"is already loading\\\\\\\");this._loading=!0,this.points_count=0,await this.load_data(t),this.infer_types(),this.read_values();return this.create_points()}async load_data(t){const e=await fetch(t),n=await e.text();this.lines=n.split(\\\\\\\"\\\\n\\\\\\\"),this.attribute_names||(this.attribute_names=this.lines[0].split(f$.SEPARATOR)),this.attribute_names=this.attribute_names.map((t=>Wr.remapName(t)));for(let t of this.attribute_names)this.attribute_values_by_name[t]=[]}infer_types(){const t=this.attribute_names_from_first_line?1:0;let e=this.lines[t].split(f$.SEPARATOR);for(let t=0;t<e.length;t++){const n=this.attribute_names[t],i=e[t],r=this._value_from_line_element(i);this.attribute_data_by_name[n]=c$.from_value(r)}}_value_from_line_element(t){if(m.isString(t)){if(`${parseFloat(t)}`===t)return parseFloat(t);if(\\\\\\\"[\\\\\\\"===t[0]&&\\\\\\\"]\\\\\\\"===t[t.length-1]){return t.substring(1,t.length-1).split(f$.VECTOR_SEPARATOR).map((t=>parseFloat(t)))}return t}return t}read_values(){if(!this.attribute_names)return;let t;for(let e=this.attribute_names_from_first_line?1:0;e<this.lines.length;e++){t=this.lines[e];const n=t.split(f$.SEPARATOR);if(n.length>=this.attribute_names.length){for(let t=0;t<n.length;t++){const e=this.attribute_names[t];if(e){const i=n[t],r=this._value_from_line_element(i);this.attribute_values_by_name[e].push(r)}}this.points_count+=1}}if(!this.attribute_values_by_name.position){const t=new Array(3*this.points_count);t.fill(0),this.attribute_values_by_name.position=t,this.attribute_data_by_name.position=new c$(3,Dr.NUMERIC),this.attribute_names.push(m$)}}create_points(){if(!this.attribute_names)return;const t=new S.a,e=new ps(t);for(let n of this.attribute_names){const i=this.attribute_values_by_name[n].flat(),r=this.attribute_data_by_name[n].size();if(this.attribute_data_by_name[n].type()==Dr.STRING){const t=Wr.arrayToIndexedArrays(i);e.setIndexedAttribute(n,t.values,t.indices)}else t.setAttribute(n,new C.c(i,r))}const n=new Array(this.points_count);for(let t=0;t<this.points_count;t++)n.push(t);return t.setIndex(n),t}}var g$;f$.SEPARATOR=\\\\\\\",\\\\\\\",f$.VECTOR_SEPARATOR=\\\\\\\",\\\\\\\",function(t){t.JSON=\\\\\\\"json\\\\\\\",t.CSV=\\\\\\\"csv\\\\\\\"}(g$||(g$={}));const v$=[g$.JSON,g$.CSV],y$=`${Gg}/nodes/sop/DataUrl/basic.json`;const x$=new class extends aa{constructor(){super(...arguments),this.dataType=oa.INTEGER(v$.indexOf(g$.JSON),{menu:{entries:v$.map(((t,e)=>({name:t,value:e})))}}),this.url=oa.STRING(y$,{fileBrowse:{type:[Ls.JSON]}}),this.jsonDataKeysPrefix=oa.STRING(\\\\\\\"\\\\\\\",{visibleIf:{dataType:v$.indexOf(g$.JSON)}}),this.skipEntries=oa.STRING(\\\\\\\"\\\\\\\",{visibleIf:{dataType:v$.indexOf(g$.JSON)}}),this.convert=oa.BOOLEAN(0,{visibleIf:{dataType:v$.indexOf(g$.JSON)}}),this.convertToNumeric=oa.STRING(\\\\\\\"\\\\\\\",{visibleIf:{dataType:v$.indexOf(g$.JSON),convert:1}}),this.readAttribNamesFromFile=oa.BOOLEAN(1,{visibleIf:{dataType:v$.indexOf(g$.CSV)}}),this.attribNames=oa.STRING(\\\\\\\"height scale\\\\\\\",{visibleIf:{dataType:v$.indexOf(g$.CSV),readAttribNamesFromFile:0}}),this.reload=oa.BUTTON(null,{callback:(t,e)=>{b$.PARAM_CALLBACK_reload(t,e)}})}};class b$ extends gG{constructor(){super(...arguments),this.paramsConfig=x$}static type(){return\\\\\\\"dataUrl\\\\\\\"}initializeNode(){this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.url],(()=>{const t=this.p.url.rawInput();if(t){const e=t.split(\\\\\\\"/\\\\\\\");return e[e.length-1]}return\\\\\\\"\\\\\\\"}))}))}))}async cook(){switch(v$[this.pv.dataType]){case g$.JSON:return this._load_json();case g$.CSV:return this._load_csv()}}_url(){const t=this.scene().assets.root();return t?`${t}${this.pv.url}`:this.pv.url}_load_json(){new _$(this._url(),this.scene(),{dataKeysPrefix:this.pv.jsonDataKeysPrefix,skipEntries:this.pv.skipEntries,doConvert:this.pv.convert,convertToNumeric:this.pv.convertToNumeric},this).load(this._on_load.bind(this),void 0,this._on_error.bind(this))}_on_load(t){this.setGeometry(t,Sr.POINTS)}_on_error(t){this.states.error.set(`could not load geometry from ${this._url()} (${t})`),this.cookController.endCook()}async _load_csv(){const t=this.pv.readAttribNamesFromFile?void 0:this.pv.attribNames.split(\\\\\\\" \\\\\\\"),e=new f$(t),n=await e.load(this._url());n?this.setGeometry(n,Sr.POINTS):this.states.error.set(\\\\\\\"could not generate points\\\\\\\")}static PARAM_CALLBACK_reload(t,e){t.param_callback_reload()}param_callback_reload(){this.p.url.setDirty()}}class w$ extends S.a{constructor(t,e,n,i){super();const r=[],s=[],o=[],a=new p.a,l=new A.a;l.makeRotationFromEuler(n),l.setPosition(e);const c=new A.a;function u(e,n,i){n.applyMatrix4(t.matrixWorld),n.applyMatrix4(c),i.transformDirection(t.matrixWorld),e.push(new T$(n.clone(),i.clone()))}function h(t,e){const n=[],r=.5*Math.abs(i.dot(e));for(let i=0;i<t.length;i+=3){let s,o,a,l,c=0;const u=t[i+0].position.dot(e)-r>0,h=t[i+1].position.dot(e)-r>0,p=t[i+2].position.dot(e)-r>0;switch(c=(u?1:0)+(h?1:0)+(p?1:0),c){case 0:n.push(t[i]),n.push(t[i+1]),n.push(t[i+2]);break;case 1:if(u&&(s=t[i+1],o=t[i+2],a=d(t[i],s,e,r),l=d(t[i],o,e,r)),h){s=t[i],o=t[i+2],a=d(t[i+1],s,e,r),l=d(t[i+1],o,e,r),n.push(a),n.push(o.clone()),n.push(s.clone()),n.push(o.clone()),n.push(a.clone()),n.push(l);break}p&&(s=t[i],o=t[i+1],a=d(t[i+2],s,e,r),l=d(t[i+2],o,e,r)),n.push(s.clone()),n.push(o.clone()),n.push(a),n.push(l),n.push(a.clone()),n.push(o.clone());break;case 2:u||(s=t[i].clone(),o=d(s,t[i+1],e,r),a=d(s,t[i+2],e,r),n.push(s),n.push(o),n.push(a)),h||(s=t[i+1].clone(),o=d(s,t[i+2],e,r),a=d(s,t[i],e,r),n.push(s),n.push(o),n.push(a)),p||(s=t[i+2].clone(),o=d(s,t[i],e,r),a=d(s,t[i+1],e,r),n.push(s),n.push(o),n.push(a))}}return n}function d(t,e,n,i){const r=t.position.dot(n)-i,s=r/(r-(e.position.dot(n)-i));return new T$(new p.a(t.position.x+s*(e.position.x-t.position.x),t.position.y+s*(e.position.y-t.position.y),t.position.z+s*(e.position.z-t.position.z)),new p.a(t.normal.x+s*(e.normal.x-t.normal.x),t.normal.y+s*(e.normal.y-t.normal.y),t.normal.z+s*(e.normal.z-t.normal.z)))}c.copy(l).invert(),function(){let e=[];const n=new p.a,c=new p.a;if(!0===t.geometry.isGeometry)return void console.error(\\\\\\\"THREE.DecalGeometry no longer supports THREE.Geometry. Use BufferGeometry instead.\\\\\\\");const d=t.geometry,_=d.attributes.position,m=d.attributes.normal;if(null!==d.index){const t=d.index;for(let i=0;i<t.count;i++)n.fromBufferAttribute(_,t.getX(i)),c.fromBufferAttribute(m,t.getX(i)),u(e,n,c)}else for(let t=0;t<_.count;t++)n.fromBufferAttribute(_,t),c.fromBufferAttribute(m,t),u(e,n,c);e=h(e,a.set(1,0,0)),e=h(e,a.set(-1,0,0)),e=h(e,a.set(0,1,0)),e=h(e,a.set(0,-1,0)),e=h(e,a.set(0,0,1)),e=h(e,a.set(0,0,-1));for(let t=0;t<e.length;t++){const n=e[t];o.push(.5+n.position.x/i.x,.5+n.position.y/i.y),n.position.applyMatrix4(l),r.push(n.position.x,n.position.y,n.position.z),s.push(n.normal.x,n.normal.y,n.normal.z)}}(),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(r,3)),this.setAttribute(\\\\\\\"normal\\\\\\\",new C.c(s,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(o,2))}}class T${constructor(t,e){this.position=t,this.normal=e}clone(){return new this.constructor(this.position.clone(),this.normal.clone())}}class A$ extends pG{constructor(){super(...arguments),this._r=new p.a,this._rotation=new Wv.a(0,0,0),this._scale=new p.a(1,1,1)}static type(){return\\\\\\\"decal\\\\\\\"}cook(t,e){const n=t[0];this._r.copy(e.r).multiplyScalar(Ln.a),this._rotation.set(this._r.x,this._r.y,this._r.z),this._scale.copy(e.s).multiplyScalar(e.scale);const i=n.objectsWithGeo(),r=[];for(let t of i)if(t.isMesh){const n=new w$(t,e.t,this._rotation,this._scale),i=new k.a(n,t.material);r.push(i)}return this.createCoreGroupFromObjects(r)}}A$.DEFAULT_PARAMS={t:new p.a(0,0,0),r:new p.a(0,0,0),s:new p.a(1,1,1),scale:1},A$.INPUT_CLONED_STATE=Qi.NEVER;const E$=A$.DEFAULT_PARAMS;const M$=new class extends aa{constructor(){super(...arguments),this.t=oa.VECTOR3(E$.t),this.r=oa.VECTOR3(E$.r),this.s=oa.VECTOR3(E$.s),this.scale=oa.FLOAT(E$.scale)}};class S$ extends gG{constructor(){super(...arguments),this.paramsConfig=M$}static type(){return\\\\\\\"decal\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to create decal from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(A$.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new A$(this._scene,this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const C$=new class extends aa{constructor(){super(...arguments),this.duration=oa.INTEGER(1e3,{range:[0,1e3],rangeLocked:[!0,!1]})}};class N$ extends gG{constructor(){super(...arguments),this.paramsConfig=C$}static type(){return\\\\\\\"delay\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.ALWAYS)}cook(t){const e=t[0];setTimeout((()=>{this.setCoreGroup(e)}),Math.max(this.pv.duration,0))}}class L${constructor(t){this.node=t,this.selected_state=new Map,this._entities_count=0,this._selected_entities_count=0}init(t){this.selected_state.clear();for(let e of t)this.selected_state.set(e,!1);this._entities_count=t.length,this._selected_entities_count=0}select(t){const e=this.selected_state.get(t);null!=e&&0==e&&(this.selected_state.set(t,!0),this._selected_entities_count++)}entities_to_keep(){return this._entities_for_state(this.node.pv.invert)}entities_to_delete(){return this._entities_for_state(!this.node.pv.invert)}_entities_for_state(t){const e=!!t,n=t?this._selected_entities_count:this._entities_count-this._selected_entities_count;if(0==n)return[];{const t=new Array(n);let i=0;return this.selected_state.forEach(((n,r)=>{n==e&&(t[i]=r,i++)})),t}}}var O$;!function(t){t.EQUAL=\\\\\\\"==\\\\\\\",t.LESS_THAN=\\\\\\\"<\\\\\\\",t.EQUAL_OR_LESS_THAN=\\\\\\\"<=\\\\\\\",t.EQUAL_OR_GREATER_THAN=\\\\\\\">=\\\\\\\",t.GREATER_THAN=\\\\\\\">\\\\\\\",t.DIFFERENT=\\\\\\\"!=\\\\\\\"}(O$||(O$={}));const R$=[O$.EQUAL,O$.LESS_THAN,O$.EQUAL_OR_LESS_THAN,O$.EQUAL_OR_GREATER_THAN,O$.GREATER_THAN,O$.DIFFERENT],P$={[O$.EQUAL]:(t,e)=>t==e,[O$.LESS_THAN]:(t,e)=>t<e,[O$.EQUAL_OR_LESS_THAN]:(t,e)=>t<=e,[O$.EQUAL_OR_GREATER_THAN]:(t,e)=>t>=e,[O$.GREATER_THAN]:(t,e)=>t>e,[O$.DIFFERENT]:(t,e)=>t!=e},I$=R$.map(((t,e)=>({name:t,value:e})));class F${constructor(t){this.node=t}evalForEntities(t){const e=kr[this.node.pv.attribType];switch(e){case Dr.NUMERIC:return void this._eval_for_numeric(t);case Dr.STRING:return void this._eval_for_string(t)}ar.unreachable(e)}_eval_for_string(t){let e;for(let n of t)e=n.stringAttribValue(this.node.pv.attribName),e==this.node.pv.attrib_string&&this.node.entitySelectionHelper.select(n)}_eval_for_numeric(t){const e=Ur[this.node.pv.attribSize-1];switch(e){case zr.FLOAT:return this._eval_for_points_numeric_float(t);case zr.VECTOR2:return this._eval_for_points_numeric_vector2(t);case zr.VECTOR3:return this._eval_for_points_numeric_vector3(t);case zr.VECTOR4:return this._eval_for_points_numeric_vector4(t)}ar.unreachable(e)}_eval_for_points_numeric_float(t){let e=this.node.pv.attribName;const n=this.node.pv.attribValue1;let i;const r=R$[this.node.pv.attribComparisonOperator],s=P$[r];for(let r of t)i=r.attribValue(e),s(i,n)&&this.node.entitySelectionHelper.select(r)}_eval_for_points_numeric_vector2(t){let e=this.node.pv.attribName;const n=this.node.pv.attribValue2;let i=new d.a;for(let r of t){const t=r.attribValue(e,i);n.equals(t)&&this.node.entitySelectionHelper.select(r)}}_eval_for_points_numeric_vector3(t){let e=this.node.pv.attribName;const n=this.node.pv.attribValue3;let i=new p.a;for(let r of t){const t=r.attribValue(e,i);n.equals(t)&&this.node.entitySelectionHelper.select(r)}}_eval_for_points_numeric_vector4(t){let e=this.node.pv.attribName;const n=this.node.pv.attribValue4;let i=new _.a;for(let r of t){const t=r.attribValue(e,i);n.equals(t)&&this.node.entitySelectionHelper.select(r)}}}class D${constructor(t){this.node=t}async evalForEntities(t){const e=this.node.p.expression;this.node.p.expression.hasExpression()&&e.expressionController?await this.eval_expressions_for_points_with_expression(t):this.eval_expressions_without_expression(t)}async eval_expressions_for_points_with_expression(t){const e=this.node.p.expression;e.expressionController&&await e.expressionController.compute_expression_for_entities(t,((t,e)=>{e&&this.node.entitySelectionHelper.select(t)}))}eval_expressions_without_expression(t){if(this.node.pv.expression)for(let e of t)this.node.entitySelectionHelper.select(e)}}class k${constructor(t){this.node=t,this._point_position=new p.a}evalForPoints(t){const e=this._createBbox();for(let n of t){e.containsPoint(n.getPosition(this._point_position))&&this.node.entitySelectionHelper.select(n)}}_createBbox(){return new XB.a(this.node.pv.bboxCenter.clone().sub(this.node.pv.bboxSize.clone().multiplyScalar(.5)),this.node.pv.bboxCenter.clone().add(this.node.pv.bboxSize.clone().multiplyScalar(.5)))}}class B${constructor(t){this.node=t}eval_for_objects(t){const e=Lr[this.node.pv.objectType];for(let n of t){Nr(n.object().constructor)==e&&this.node.entitySelectionHelper.select(n)}}}class z${constructor(){this._sidePropertyByMaterial=new WeakMap,this._bound_setMat=this._setObjectMaterialDoubleSided.bind(this),this._bound_restoreMat=this._restoreObjectMaterialSide.bind(this)}setCoreGroupMaterialDoubleSided(t){const e=t.objects();for(let t of e)t.traverse(this._bound_setMat)}restoreMaterialSideProperty(t){const e=t.objects();for(let t of e)t.traverse(this._bound_restoreMat)}_setObjectMaterialDoubleSided(t){const e=t.material;if(e)if(m.isArray(e))for(let t of e)this._setMaterialDoubleSided(t);else this._setMaterialDoubleSided(e)}_restoreObjectMaterialSide(t){const e=t.material;if(e)if(m.isArray(e))for(let t of e)this._restoreMaterialDoubleSided(t);else this._restoreMaterialDoubleSided(e)}_setMaterialDoubleSided(t){this._sidePropertyByMaterial.set(t,t.side),t.side=w.z}_restoreMaterialDoubleSided(t){t.side=this._sidePropertyByMaterial.get(t)||w.z}}const U$=new p.a(0,1,0),G$=new p.a(0,-1,0);class V${constructor(t){this.node=t,this._matDoubleSideTmpSetter=new z$,this._point_position=new p.a,this._raycaster=new uL,this._intersections=[]}evalForPoints(t,e){if(!e)return;const n=null==e?void 0:e.objectsWithGeo()[0];if(!n)return;const i=n;if(!i.isMesh)return;this._matDoubleSideTmpSetter.setCoreGroupMaterialDoubleSided(e);const r=n.geometry;r.computeBoundingBox();const s=r.boundingBox;for(let e of t)e.getPosition(this._point_position),s.containsPoint(this._point_position)?this._isPositionInObject(this._point_position,i,U$)&&this._isPositionInObject(this._point_position,i,G$)&&this.node.entitySelectionHelper.select(e):this.node.entitySelectionHelper.select(e);this._matDoubleSideTmpSetter.restoreMaterialSideProperty(e)}_isPositionInObject(t,e,n){var i;this._raycaster.ray.direction.copy(n),this._raycaster.ray.origin.copy(t),this._intersections.length=0;const r=this._raycaster.intersectObject(e,!1,this._intersections);if(!r)return!1;if(0==r.length)return!1;const s=null===(i=r[0].face)||void 0===i?void 0:i.normal;if(!s)return!1;return this._raycaster.ray.direction.dot(s)>=0}}const H$=new class extends aa{constructor(){super(...arguments),this.class=oa.INTEGER(Ir.indexOf(Pr.VERTEX),{menu:{entries:Fr}}),this.invert=oa.BOOLEAN(0),this.byObjectType=oa.BOOLEAN(0,{visibleIf:{class:Ir.indexOf(Pr.OBJECT)}}),this.objectType=oa.INTEGER(Lr.indexOf(Sr.MESH),{menu:{entries:Or},visibleIf:{class:Ir.indexOf(Pr.OBJECT),byObjectType:!0},separatorAfter:!0}),this.byExpression=oa.BOOLEAN(0),this.expression=oa.BOOLEAN(\\\\\\\"@ptnum==0\\\\\\\",{visibleIf:{byExpression:!0},expression:{forEntities:!0},separatorAfter:!0}),this.byAttrib=oa.BOOLEAN(0),this.attribType=oa.INTEGER(kr.indexOf(Dr.NUMERIC),{menu:{entries:Br},visibleIf:{byAttrib:1}}),this.attribName=oa.STRING(\\\\\\\"\\\\\\\",{visibleIf:{byAttrib:1}}),this.attribSize=oa.INTEGER(1,{range:Gr,rangeLocked:[!0,!0],visibleIf:{byAttrib:1,attribType:kr.indexOf(Dr.NUMERIC)}}),this.attribComparisonOperator=oa.INTEGER(R$.indexOf(O$.EQUAL),{menu:{entries:I$},visibleIf:{byAttrib:!0,attribType:kr.indexOf(Dr.NUMERIC),attribSize:zr.FLOAT}}),this.attribValue1=oa.FLOAT(0,{visibleIf:{byAttrib:1,attribType:kr.indexOf(Dr.NUMERIC),attribSize:1}}),this.attribValue2=oa.VECTOR2([0,0],{visibleIf:{byAttrib:1,attribType:kr.indexOf(Dr.NUMERIC),attribSize:2}}),this.attribValue3=oa.VECTOR3([0,0,0],{visibleIf:{byAttrib:1,attribType:kr.indexOf(Dr.NUMERIC),attribSize:3}}),this.attribValue4=oa.VECTOR4([0,0,0,0],{visibleIf:{byAttrib:1,attribType:kr.indexOf(Dr.NUMERIC),attribSize:4}}),this.attribString=oa.STRING(\\\\\\\"\\\\\\\",{visibleIf:{byAttrib:1,attribType:kr.indexOf(Dr.STRING)},separatorAfter:!0}),this.byBbox=oa.BOOLEAN(0,{visibleIf:{class:Ir.indexOf(Pr.VERTEX)}}),this.bboxSize=oa.VECTOR3([1,1,1],{visibleIf:{class:Ir.indexOf(Pr.VERTEX),byBbox:!0}}),this.bboxCenter=oa.VECTOR3([0,0,0],{visibleIf:{class:Ir.indexOf(Pr.VERTEX),byBbox:!0},separatorAfter:!0}),this.byBoundingObject=oa.BOOLEAN(0,{visibleIf:{class:Ir.indexOf(Pr.VERTEX)}}),this.keepPoints=oa.BOOLEAN(0,{visibleIf:{class:Ir.indexOf(Pr.OBJECT)}})}};class j$ extends gG{constructor(){super(...arguments),this.paramsConfig=H$,this._marked_for_deletion_per_object_index=new Map,this.entitySelectionHelper=new L$(this),this.byExpressionHelper=new D$(this),this.byAttributeHelper=new F$(this),this.byObjectTypeHelper=new B$(this),this.byBboxHelper=new k$(this),this.byBoundingObjectHelper=new V$(this)}static type(){return\\\\\\\"delete\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to delete from\\\\\\\",\\\\\\\"points inside this geometry will be deleted (optional)\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1,2),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}async cook(t){const e=t[0],n=t[1];switch(this.pv.class){case Pr.VERTEX:await this._eval_for_points(e,n);break;case Pr.OBJECT:await this._eval_for_objects(e)}}set_class(t){this.p.class.set(t)}async _eval_for_objects(t){const e=t.coreObjects();this.entitySelectionHelper.init(e),this._marked_for_deletion_per_object_index=new Map;for(let t of e)this._marked_for_deletion_per_object_index.set(t.index(),!1);this.pv.byExpression&&await this.byExpressionHelper.evalForEntities(e),this.pv.byObjectType&&this.byObjectTypeHelper.eval_for_objects(e),this.pv.byAttrib&&\\\\\\\"\\\\\\\"!=this.pv.attribName&&this.byAttributeHelper.evalForEntities(e);const n=this.entitySelectionHelper.entities_to_keep().map((t=>t.object()));if(this.pv.keepPoints){const t=this.entitySelectionHelper.entities_to_delete();for(let e of t){const t=this._point_object(e);t&&n.push(t)}}this.setObjects(n)}async _eval_for_points(t,e){const n=t.coreObjects();let i,r=[];for(let t=0;t<n.length;t++){i=n[t];let s=i.coreGeometry();if(s){const t=i.object(),n=s.pointsFromGeometry();this.entitySelectionHelper.init(n);const o=n.length;this.pv.byExpression&&await this.byExpressionHelper.evalForEntities(n),this.pv.byAttrib&&\\\\\\\"\\\\\\\"!=this.pv.attribName&&this.byAttributeHelper.evalForEntities(n),this.pv.byBbox&&this.byBboxHelper.evalForPoints(n),this.pv.byBoundingObject&&this.byBoundingObjectHelper.evalForPoints(n,e);const a=this.entitySelectionHelper.entities_to_keep();if(a.length==o)r.push(t);else if(s.geometry().dispose(),a.length>0){const e=ps.geometryFromPoints(a,Nr(t.constructor));e&&(t.geometry=e,r.push(t))}}}this.setObjects(r)}_point_object(t){const e=t.points(),n=ps.geometryFromPoints(e,Sr.POINTS);if(n)return this.createObject(n,Sr.POINTS)}}const W$=new class extends aa{constructor(){super(...arguments),this.start=oa.INTEGER(0,{range:[0,100],rangeLocked:[!0,!1]}),this.useCount=oa.BOOLEAN(0),this.count=oa.INTEGER(0,{range:[0,100],rangeLocked:[!0,!1],visibleIf:{useCount:1}})}};class q$ extends gG{constructor(){super(...arguments),this.paramsConfig=W$}static type(){return\\\\\\\"drawRange\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}cook(t){const e=t[0],n=e.objects();for(let t of n){const e=t.geometry;if(e){const t=e.drawRange;t.start=this.pv.start,this.pv.useCount?t.count=this.pv.count:t.count=1/0}}this.setCoreGroup(e)}}class X${constructor(){this.pluginCallbacks=[],this.register((function(t){return new bJ(t)})),this.register((function(t){return new wJ(t)})),this.register((function(t){return new TJ(t)})),this.register((function(t){return new AJ(t)})),this.register((function(t){return new EJ(t)}))}register(t){return-1===this.pluginCallbacks.indexOf(t)&&this.pluginCallbacks.push(t),this}unregister(t){return-1!==this.pluginCallbacks.indexOf(t)&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(t),1),this}parse(t,e,n){const i=new xJ,r=[];for(let t=0,e=this.pluginCallbacks.length;t<e;t++)r.push(this.pluginCallbacks[t](i));i.setPlugins(r),i.write(t,e,n)}}const Y$=0,$$=1,J$=2,Z$=3,Q$=4,K$=5121,tJ=5123,eJ=5126,nJ=5125,iJ=34962,rJ=34963,sJ=9728,oJ=9729,aJ=9984,lJ=9985,cJ=9986,uJ=9987,hJ=33071,dJ=33648,pJ=10497,_J={};_J[1003]=sJ,_J[1004]=aJ,_J[1005]=cJ,_J[1006]=oJ,_J[1007]=lJ,_J[1008]=uJ,_J[1001]=hJ,_J[1e3]=pJ,_J[1002]=dJ;const mJ={scale:\\\\\\\"scale\\\\\\\",position:\\\\\\\"translation\\\\\\\",quaternion:\\\\\\\"rotation\\\\\\\",morphTargetInfluences:\\\\\\\"weights\\\\\\\"};function fJ(t,e){return t.length===e.length&&t.every((function(t,n){return t===e[n]}))}function gJ(t){return 4*Math.ceil(t/4)}function vJ(t,e=0){const n=gJ(t.byteLength);if(n!==t.byteLength){const i=new Uint8Array(n);if(i.set(new Uint8Array(t)),0!==e)for(let r=t.byteLength;r<n;r++)i[r]=e;return i.buffer}return t}let yJ=null;class xJ{constructor(){this.plugins=[],this.options={},this.pending=[],this.buffers=[],this.byteOffset=0,this.buffers=[],this.nodeMap=new Map,this.skins=[],this.extensionsUsed={},this.uids=new Map,this.uid=0,this.json={asset:{version:\\\\\\\"2.0\\\\\\\",generator:\\\\\\\"THREE.GLTFExporter\\\\\\\"}},this.cache={meshes:new Map,attributes:new Map,attributesNormalized:new Map,materials:new Map,textures:new Map,images:new Map}}setPlugins(t){this.plugins=t}write(t,e,n){this.options=Object.assign({},{binary:!1,trs:!1,onlyVisible:!0,truncateDrawRange:!0,embedImages:!0,maxTextureSize:1/0,animations:[],includeCustomExtensions:!1},n),this.options.animations.length>0&&(this.options.trs=!0),this.processInput(t);const i=this;Promise.all(this.pending).then((function(){const t=i.buffers,n=i.json,r=i.options,s=i.extensionsUsed,o=new Blob(t,{type:\\\\\\\"application/octet-stream\\\\\\\"}),a=Object.keys(s);if(a.length>0&&(n.extensionsUsed=a),n.buffers&&n.buffers.length>0&&(n.buffers[0].byteLength=o.size),!0===r.binary){const t=new window.FileReader;t.readAsArrayBuffer(o),t.onloadend=function(){const i=vJ(t.result),r=new DataView(new ArrayBuffer(8));r.setUint32(0,i.byteLength,!0),r.setUint32(4,5130562,!0);const s=vJ(function(t){if(void 0!==window.TextEncoder)return(new TextEncoder).encode(t).buffer;const e=new Uint8Array(new ArrayBuffer(t.length));for(let n=0,i=t.length;n<i;n++){const i=t.charCodeAt(n);e[n]=i>255?32:i}return e.buffer}(JSON.stringify(n)),32),o=new DataView(new ArrayBuffer(8));o.setUint32(0,s.byteLength,!0),o.setUint32(4,1313821514,!0);const a=new ArrayBuffer(12),l=new DataView(a);l.setUint32(0,1179937895,!0),l.setUint32(4,2,!0);const c=12+o.byteLength+s.byteLength+r.byteLength+i.byteLength;l.setUint32(8,c,!0);const u=new Blob([a,o,s,r,i],{type:\\\\\\\"application/octet-stream\\\\\\\"}),h=new window.FileReader;h.readAsArrayBuffer(u),h.onloadend=function(){e(h.result)}}}else if(n.buffers&&n.buffers.length>0){const t=new window.FileReader;t.readAsDataURL(o),t.onloadend=function(){const i=t.result;n.buffers[0].uri=i,e(n)}}else e(n)}))}serializeUserData(t,e){if(0===Object.keys(t.userData).length)return;const n=this.options,i=this.extensionsUsed;try{const r=JSON.parse(JSON.stringify(t.userData));if(n.includeCustomExtensions&&r.gltfExtensions){void 0===e.extensions&&(e.extensions={});for(const t in r.gltfExtensions)e.extensions[t]=r.gltfExtensions[t],i[t]=!0;delete r.gltfExtensions}Object.keys(r).length>0&&(e.extras=r)}catch(e){console.warn(\\\\\\\"THREE.GLTFExporter: userData of '\\\\\\\"+t.name+\\\\\\\"' won't be serialized because of JSON.stringify error - \\\\\\\"+e.message)}}getUID(t){return this.uids.has(t)||this.uids.set(t,this.uid++),this.uids.get(t)}isNormalizedNormalAttribute(t){if(this.cache.attributesNormalized.has(t))return!1;const e=new Nx;for(let n=0,i=t.count;n<i;n++)if(Math.abs(e.fromBufferAttribute(t,n).length()-1)>5e-4)return!1;return!0}createNormalizedNormalAttribute(t){const e=this.cache;if(e.attributesNormalized.has(t))return e.attributesNormalized.get(t);const n=t.clone(),i=new Nx;for(let t=0,e=n.count;t<e;t++)i.fromBufferAttribute(n,t),0===i.x&&0===i.y&&0===i.z?i.setX(1):i.normalize(),n.setXYZ(t,i.x,i.y,i.z);return e.attributesNormalized.set(t,n),n}applyTextureTransform(t,e){let n=!1;const i={};0===e.offset.x&&0===e.offset.y||(i.offset=e.offset.toArray(),n=!0),0!==e.rotation&&(i.rotation=e.rotation,n=!0),1===e.repeat.x&&1===e.repeat.y||(i.scale=e.repeat.toArray(),n=!0),n&&(t.extensions=t.extensions||{},t.extensions.KHR_texture_transform=i,this.extensionsUsed.KHR_texture_transform=!0)}processBuffer(t){const e=this.json,n=this.buffers;return e.buffers||(e.buffers=[{byteLength:0}]),n.push(t),0}processBufferView(t,e,n,i,r){const s=this.json;let o;s.bufferViews||(s.bufferViews=[]),o=e===K$?1:e===tJ?2:4;const a=gJ(i*t.itemSize*o),l=new DataView(new ArrayBuffer(a));let c=0;for(let r=n;r<n+i;r++)for(let n=0;n<t.itemSize;n++){let i;t.itemSize>4?i=t.array[r*t.itemSize+n]:0===n?i=t.getX(r):1===n?i=t.getY(r):2===n?i=t.getZ(r):3===n&&(i=t.getW(r)),e===eJ?l.setFloat32(c,i,!0):e===nJ?l.setUint32(c,i,!0):e===tJ?l.setUint16(c,i,!0):e===K$&&l.setUint8(c,i),c+=o}const u={buffer:this.processBuffer(l.buffer),byteOffset:this.byteOffset,byteLength:a};void 0!==r&&(u.target=r),r===iJ&&(u.byteStride=t.itemSize*o),this.byteOffset+=a,s.bufferViews.push(u);return{id:s.bufferViews.length-1,byteLength:0}}processBufferViewImage(t){const e=this,n=e.json;return n.bufferViews||(n.bufferViews=[]),new Promise((function(i){const r=new window.FileReader;r.readAsArrayBuffer(t),r.onloadend=function(){const t=vJ(r.result),s={buffer:e.processBuffer(t),byteOffset:e.byteOffset,byteLength:t.byteLength};e.byteOffset+=t.byteLength,i(n.bufferViews.push(s)-1)}}))}processAccessor(t,e,n,i){const r=this.options,s=this.json;let o;if(t.array.constructor===Float32Array)o=eJ;else if(t.array.constructor===Uint32Array)o=nJ;else if(t.array.constructor===Uint16Array)o=tJ;else{if(t.array.constructor!==Uint8Array)throw new Error(\\\\\\\"THREE.GLTFExporter: Unsupported bufferAttribute component type.\\\\\\\");o=K$}if(void 0===n&&(n=0),void 0===i&&(i=t.count),r.truncateDrawRange&&void 0!==e&&null===e.index){const r=n+i,s=e.drawRange.count===1/0?t.count:e.drawRange.start+e.drawRange.count;n=Math.max(n,e.drawRange.start),(i=Math.min(r,s)-n)<0&&(i=0)}if(0===i)return null;const a=function(t,e,n){const i={min:new Array(t.itemSize).fill(Number.POSITIVE_INFINITY),max:new Array(t.itemSize).fill(Number.NEGATIVE_INFINITY)};for(let r=e;r<e+n;r++)for(let e=0;e<t.itemSize;e++){let n;t.itemSize>4?n=t.array[r*t.itemSize+e]:0===e?n=t.getX(r):1===e?n=t.getY(r):2===e?n=t.getZ(r):3===e&&(n=t.getW(r)),i.min[e]=Math.min(i.min[e],n),i.max[e]=Math.max(i.max[e],n)}return i}(t,n,i);let l;void 0!==e&&(l=t===e.index?rJ:iJ);const c=this.processBufferView(t,o,n,i,l),u={bufferView:c.id,byteOffset:c.byteOffset,componentType:o,count:i,max:a.max,min:a.min,type:{1:\\\\\\\"SCALAR\\\\\\\",2:\\\\\\\"VEC2\\\\\\\",3:\\\\\\\"VEC3\\\\\\\",4:\\\\\\\"VEC4\\\\\\\",16:\\\\\\\"MAT4\\\\\\\"}[t.itemSize]};return!0===t.normalized&&(u.normalized=!0),s.accessors||(s.accessors=[]),s.accessors.push(u)-1}processImage(t,e,n){const i=this,r=i.cache,s=i.json,o=i.options,a=i.pending;r.images.has(t)||r.images.set(t,{});const l=r.images.get(t),c=e===By?\\\\\\\"image/png\\\\\\\":\\\\\\\"image/jpeg\\\\\\\",u=c+\\\\\\\":flipY/\\\\\\\"+n.toString();if(void 0!==l[u])return l[u];s.images||(s.images=[]);const h={mimeType:c};if(o.embedImages){const r=yJ=yJ||document.createElement(\\\\\\\"canvas\\\\\\\");r.width=Math.min(t.width,o.maxTextureSize),r.height=Math.min(t.height,o.maxTextureSize);const s=r.getContext(\\\\\\\"2d\\\\\\\");if(!0===n&&(s.translate(0,r.height),s.scale(1,-1)),\\\\\\\"undefined\\\\\\\"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||\\\\\\\"undefined\\\\\\\"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||\\\\\\\"undefined\\\\\\\"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas||\\\\\\\"undefined\\\\\\\"!=typeof ImageBitmap&&t instanceof ImageBitmap)s.drawImage(t,0,0,r.width,r.height);else{e!==By&&e!==ky&&console.error(\\\\\\\"GLTFExporter: Only RGB and RGBA formats are supported.\\\\\\\"),(t.width>o.maxTextureSize||t.height>o.maxTextureSize)&&console.warn(\\\\\\\"GLTFExporter: Image size is bigger than maxTextureSize\\\\\\\",t);const n=new Uint8ClampedArray(t.height*t.width*4);if(e===By)for(let e=0;e<n.length;e+=4)n[e+0]=t.data[e+0],n[e+1]=t.data[e+1],n[e+2]=t.data[e+2],n[e+3]=t.data[e+3];else for(let e=0,i=0;e<n.length;e+=4,i+=3)n[e+0]=t.data[i+0],n[e+1]=t.data[i+1],n[e+2]=t.data[i+2],n[e+3]=255;s.putImageData(new ImageData(n,t.width,t.height),0,0)}!0===o.binary?a.push(new Promise((function(t){r.toBlob((function(e){i.processBufferViewImage(e).then((function(e){h.bufferView=e,t()}))}),c)}))):h.uri=r.toDataURL(c)}else h.uri=t.src;const d=s.images.push(h)-1;return l[u]=d,d}processSampler(t){const e=this.json;e.samplers||(e.samplers=[]);const n={magFilter:_J[t.magFilter],minFilter:_J[t.minFilter],wrapS:_J[t.wrapS],wrapT:_J[t.wrapT]};return e.samplers.push(n)-1}processTexture(t){const e=this.cache,n=this.json;if(e.textures.has(t))return e.textures.get(t);n.textures||(n.textures=[]);const i={sampler:this.processSampler(t),source:this.processImage(t.image,t.format,t.flipY)};t.name&&(i.name=t.name),this._invokeAll((function(e){e.writeTexture&&e.writeTexture(t,i)}));const r=n.textures.push(i)-1;return e.textures.set(t,r),r}processMaterial(t){const e=this.cache,n=this.json;if(e.materials.has(t))return e.materials.get(t);if(t.isShaderMaterial)return console.warn(\\\\\\\"GLTFExporter: THREE.ShaderMaterial not supported.\\\\\\\"),null;n.materials||(n.materials=[]);const i={pbrMetallicRoughness:{}};!0!==t.isMeshStandardMaterial&&!0!==t.isMeshBasicMaterial&&console.warn(\\\\\\\"GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.\\\\\\\");const r=t.color.toArray().concat([t.opacity]);if(fJ(r,[1,1,1,1])||(i.pbrMetallicRoughness.baseColorFactor=r),t.isMeshStandardMaterial?(i.pbrMetallicRoughness.metallicFactor=t.metalness,i.pbrMetallicRoughness.roughnessFactor=t.roughness):(i.pbrMetallicRoughness.metallicFactor=.5,i.pbrMetallicRoughness.roughnessFactor=.5),t.metalnessMap||t.roughnessMap)if(t.metalnessMap===t.roughnessMap){const e={index:this.processTexture(t.metalnessMap)};this.applyTextureTransform(e,t.metalnessMap),i.pbrMetallicRoughness.metallicRoughnessTexture=e}else console.warn(\\\\\\\"THREE.GLTFExporter: Ignoring metalnessMap and roughnessMap because they are not the same Texture.\\\\\\\");if(t.map){const e={index:this.processTexture(t.map)};this.applyTextureTransform(e,t.map),i.pbrMetallicRoughness.baseColorTexture=e}if(t.emissive){const e=t.emissive.clone().multiplyScalar(t.emissiveIntensity),n=Math.max(e.r,e.g,e.b);if(n>1&&(e.multiplyScalar(1/n),console.warn(\\\\\\\"THREE.GLTFExporter: Some emissive components exceed 1; emissive has been limited\\\\\\\")),n>0&&(i.emissiveFactor=e.toArray()),t.emissiveMap){const e={index:this.processTexture(t.emissiveMap)};this.applyTextureTransform(e,t.emissiveMap),i.emissiveTexture=e}}if(t.normalMap){const e={index:this.processTexture(t.normalMap)};t.normalScale&&1!==t.normalScale.x&&(e.scale=t.normalScale.x),this.applyTextureTransform(e,t.normalMap),i.normalTexture=e}if(t.aoMap){const e={index:this.processTexture(t.aoMap),texCoord:1};1!==t.aoMapIntensity&&(e.strength=t.aoMapIntensity),this.applyTextureTransform(e,t.aoMap),i.occlusionTexture=e}t.transparent?i.alphaMode=\\\\\\\"BLEND\\\\\\\":t.alphaTest>0&&(i.alphaMode=\\\\\\\"MASK\\\\\\\",i.alphaCutoff=t.alphaTest),2===t.side&&(i.doubleSided=!0),\\\\\\\"\\\\\\\"!==t.name&&(i.name=t.name),this.serializeUserData(t,i),this._invokeAll((function(e){e.writeMaterial&&e.writeMaterial(t,i)}));const s=n.materials.push(i)-1;return e.materials.set(t,s),s}processMesh(t){const e=this.cache,n=this.json,i=[t.geometry.uuid];if(Array.isArray(t.material))for(let e=0,n=t.material.length;e<n;e++)i.push(t.material[e].uuid);else i.push(t.material.uuid);const r=i.join(\\\\\\\":\\\\\\\");if(e.meshes.has(r))return e.meshes.get(r);const s=t.geometry;let o;if(o=t.isLineSegments?$$:t.isLineLoop?J$:t.isLine?Z$:t.isPoints?Y$:t.material.wireframe?$$:Q$,!0!==s.isBufferGeometry)throw new Error(\\\\\\\"THREE.GLTFExporter: Geometry is not of type THREE.BufferGeometry.\\\\\\\");const a={},l={},c=[],u=[],h={uv:\\\\\\\"TEXCOORD_0\\\\\\\",uv2:\\\\\\\"TEXCOORD_1\\\\\\\",color:\\\\\\\"COLOR_0\\\\\\\",skinWeight:\\\\\\\"WEIGHTS_0\\\\\\\",skinIndex:\\\\\\\"JOINTS_0\\\\\\\"},d=s.getAttribute(\\\\\\\"normal\\\\\\\");void 0===d||this.isNormalizedNormalAttribute(d)||(console.warn(\\\\\\\"THREE.GLTFExporter: Creating normalized normal attribute from the non-normalized one.\\\\\\\"),s.setAttribute(\\\\\\\"normal\\\\\\\",this.createNormalizedNormalAttribute(d)));let p=null;for(let t in s.attributes){if(\\\\\\\"morph\\\\\\\"===t.substr(0,5))continue;const n=s.attributes[t];t=h[t]||t.toUpperCase();if(/^(POSITION|NORMAL|TANGENT|TEXCOORD_\\\\d+|COLOR_\\\\d+|JOINTS_\\\\d+|WEIGHTS_\\\\d+)$/.test(t)||(t=\\\\\\\"_\\\\\\\"+t),e.attributes.has(this.getUID(n))){l[t]=e.attributes.get(this.getUID(n));continue}p=null;const i=n.array;\\\\\\\"JOINTS_0\\\\\\\"!==t||i instanceof Uint16Array||i instanceof Uint8Array||(console.warn('GLTFExporter: Attribute \\\\\\\"skinIndex\\\\\\\" converted to type UNSIGNED_SHORT.'),p=new ew(new Uint16Array(i),n.itemSize,n.normalized));const r=this.processAccessor(p||n,s);null!==r&&(l[t]=r,e.attributes.set(this.getUID(n),r))}if(void 0!==d&&s.setAttribute(\\\\\\\"normal\\\\\\\",d),0===Object.keys(l).length)return null;if(void 0!==t.morphTargetInfluences&&t.morphTargetInfluences.length>0){const n=[],i=[],r={};if(void 0!==t.morphTargetDictionary)for(const e in t.morphTargetDictionary)r[t.morphTargetDictionary[e]]=e;for(let o=0;o<t.morphTargetInfluences.length;++o){const a={};let l=!1;for(const t in s.morphAttributes){if(\\\\\\\"position\\\\\\\"!==t&&\\\\\\\"normal\\\\\\\"!==t){l||(console.warn(\\\\\\\"GLTFExporter: Only POSITION and NORMAL morph are supported.\\\\\\\"),l=!0);continue}const n=s.morphAttributes[t][o],i=t.toUpperCase(),r=s.attributes[t];if(e.attributes.has(this.getUID(n))){a[i]=e.attributes.get(this.getUID(n));continue}const c=n.clone();if(!s.morphTargetsRelative)for(let t=0,e=n.count;t<e;t++)c.setXYZ(t,n.getX(t)-r.getX(t),n.getY(t)-r.getY(t),n.getZ(t)-r.getZ(t));a[i]=this.processAccessor(c,s),e.attributes.set(this.getUID(r),a[i])}u.push(a),n.push(t.morphTargetInfluences[o]),void 0!==t.morphTargetDictionary&&i.push(r[o])}a.weights=n,i.length>0&&(a.extras={},a.extras.targetNames=i)}const _=Array.isArray(t.material);if(_&&0===s.groups.length)return null;const m=_?t.material:[t.material],f=_?s.groups:[{materialIndex:0,start:void 0,count:void 0}];for(let t=0,n=f.length;t<n;t++){const n={mode:o,attributes:l};if(this.serializeUserData(s,n),u.length>0&&(n.targets=u),null!==s.index){let i=this.getUID(s.index);void 0===f[t].start&&void 0===f[t].count||(i+=\\\\\\\":\\\\\\\"+f[t].start+\\\\\\\":\\\\\\\"+f[t].count),e.attributes.has(i)?n.indices=e.attributes.get(i):(n.indices=this.processAccessor(s.index,s,f[t].start,f[t].count),e.attributes.set(i,n.indices)),null===n.indices&&delete n.indices}const i=this.processMaterial(m[f[t].materialIndex]);null!==i&&(n.material=i),c.push(n)}a.primitives=c,n.meshes||(n.meshes=[]),this._invokeAll((function(e){e.writeMesh&&e.writeMesh(t,a)}));const g=n.meshes.push(a)-1;return e.meshes.set(r,g),g}processCamera(t){const e=this.json;e.cameras||(e.cameras=[]);const n=t.isOrthographicCamera,i={type:n?\\\\\\\"orthographic\\\\\\\":\\\\\\\"perspective\\\\\\\"};return n?i.orthographic={xmag:2*t.right,ymag:2*t.top,zfar:t.far<=0?.001:t.far,znear:t.near<0?0:t.near}:i.perspective={aspectRatio:t.aspect,yfov:mx.degToRad(t.fov),zfar:t.far<=0?.001:t.far,znear:t.near<0?0:t.near},\\\\\\\"\\\\\\\"!==t.name&&(i.name=t.type),e.cameras.push(i)-1}processAnimation(t,e){const n=this.json,i=this.nodeMap;n.animations||(n.animations=[]);const r=(t=X$.Utils.mergeMorphTargetTracks(t.clone(),e)).tracks,s=[],o=[];for(let t=0;t<r.length;++t){const n=r[t],a=KC.parseTrackName(n.name);let l=KC.findNode(e,a.nodeName);const c=mJ[a.propertyName];if(\\\\\\\"bones\\\\\\\"===a.objectName&&(l=!0===l.isSkinnedMesh?l.skeleton.getBoneByName(a.objectIndex):void 0),!l||!c)return console.warn('THREE.GLTFExporter: Could not export animation track \\\\\\\"%s\\\\\\\".',n.name),null;const u=1;let h,d=n.values.length/n.times.length;c===mJ.morphTargetInfluences&&(d/=l.morphTargetInfluences.length),!0===n.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline?(h=\\\\\\\"CUBICSPLINE\\\\\\\",d/=3):h=n.getInterpolation()===Gy?\\\\\\\"STEP\\\\\\\":\\\\\\\"LINEAR\\\\\\\",o.push({input:this.processAccessor(new ew(n.times,u)),output:this.processAccessor(new ew(n.values,d)),interpolation:h}),s.push({sampler:o.length-1,target:{node:i.get(l),path:c}})}return n.animations.push({name:t.name||\\\\\\\"clip_\\\\\\\"+n.animations.length,samplers:o,channels:s}),n.animations.length-1}processSkin(t){const e=this.json,n=this.nodeMap,i=e.nodes[n.get(t)],r=t.skeleton;if(void 0===r)return null;const s=t.skeleton.bones[0];if(void 0===s)return null;const o=[],a=new Float32Array(16*r.bones.length),l=new ob;for(let e=0;e<r.bones.length;++e)o.push(n.get(r.bones[e])),l.copy(r.boneInverses[e]),l.multiply(t.bindMatrix).toArray(a,16*e);void 0===e.skins&&(e.skins=[]),e.skins.push({inverseBindMatrices:this.processAccessor(new ew(a,16)),joints:o,skeleton:n.get(s)});return i.skin=e.skins.length-1}processNode(t){const e=this.json,n=this.options,i=this.nodeMap;e.nodes||(e.nodes=[]);const r={};if(n.trs){const e=t.quaternion.toArray(),n=t.position.toArray(),i=t.scale.toArray();fJ(e,[0,0,0,1])||(r.rotation=e),fJ(n,[0,0,0])||(r.translation=n),fJ(i,[1,1,1])||(r.scale=i)}else t.matrixAutoUpdate&&t.updateMatrix(),!1===fJ(t.matrix.elements,[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])&&(r.matrix=t.matrix.elements);if(\\\\\\\"\\\\\\\"!==t.name&&(r.name=String(t.name)),this.serializeUserData(t,r),t.isMesh||t.isLine||t.isPoints){const e=this.processMesh(t);null!==e&&(r.mesh=e)}else t.isCamera&&(r.camera=this.processCamera(t));if(t.isSkinnedMesh&&this.skins.push(t),t.children.length>0){const e=[];for(let i=0,r=t.children.length;i<r;i++){const r=t.children[i];if(r.visible||!1===n.onlyVisible){const t=this.processNode(r);null!==t&&e.push(t)}}e.length>0&&(r.children=e)}this._invokeAll((function(e){e.writeNode&&e.writeNode(t,r)}));const s=e.nodes.push(r)-1;return i.set(t,s),s}processScene(t){const e=this.json,n=this.options;e.scenes||(e.scenes=[],e.scene=0);const i={};\\\\\\\"\\\\\\\"!==t.name&&(i.name=t.name),e.scenes.push(i);const r=[];for(let e=0,i=t.children.length;e<i;e++){const i=t.children[e];if(i.visible||!1===n.onlyVisible){const t=this.processNode(i);null!==t&&r.push(t)}}r.length>0&&(i.nodes=r),this.serializeUserData(t,i)}processObjects(t){const e=new UE;e.name=\\\\\\\"AuxScene\\\\\\\";for(let n=0;n<t.length;n++)e.children.push(t[n]);this.processScene(e)}processInput(t){const e=this.options;t=t instanceof Array?t:[t],this._invokeAll((function(e){e.beforeParse&&e.beforeParse(t)}));const n=[];for(let e=0;e<t.length;e++)t[e]instanceof UE?this.processScene(t[e]):n.push(t[e]);n.length>0&&this.processObjects(n);for(let t=0;t<this.skins.length;++t)this.processSkin(this.skins[t]);for(let n=0;n<e.animations.length;++n)this.processAnimation(e.animations[n],t[0]);this._invokeAll((function(e){e.afterParse&&e.afterParse(t)}))}_invokeAll(t){for(let e=0,n=this.plugins.length;e<n;e++)t(this.plugins[e])}}class bJ{constructor(t){this.writer=t,this.name=\\\\\\\"KHR_lights_punctual\\\\\\\"}writeNode(t,e){if(!t.isLight)return;if(!t.isDirectionalLight&&!t.isPointLight&&!t.isSpotLight)return void console.warn(\\\\\\\"THREE.GLTFExporter: Only directional, point, and spot lights are supported.\\\\\\\",t);const n=this.writer,i=n.json,r=n.extensionsUsed,s={};t.name&&(s.name=t.name),s.color=t.color.toArray(),s.intensity=t.intensity,t.isDirectionalLight?s.type=\\\\\\\"directional\\\\\\\":t.isPointLight?(s.type=\\\\\\\"point\\\\\\\",t.distance>0&&(s.range=t.distance)):t.isSpotLight&&(s.type=\\\\\\\"spot\\\\\\\",t.distance>0&&(s.range=t.distance),s.spot={},s.spot.innerConeAngle=(t.penumbra-1)*t.angle*-1,s.spot.outerConeAngle=t.angle),void 0!==t.decay&&2!==t.decay&&console.warn(\\\\\\\"THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, and expects light.decay=2.\\\\\\\"),!t.target||t.target.parent===t&&0===t.target.position.x&&0===t.target.position.y&&-1===t.target.position.z||console.warn(\\\\\\\"THREE.GLTFExporter: Light direction may be lost. For best results, make light.target a child of the light with position 0,0,-1.\\\\\\\"),r[this.name]||(i.extensions=i.extensions||{},i.extensions[this.name]={lights:[]},r[this.name]=!0);const o=i.extensions[this.name].lights;o.push(s),e.extensions=e.extensions||{},e.extensions[this.name]={light:o.length-1}}}class wJ{constructor(t){this.writer=t,this.name=\\\\\\\"KHR_materials_unlit\\\\\\\"}writeMaterial(t,e){if(!t.isMeshBasicMaterial)return;const n=this.writer.extensionsUsed;e.extensions=e.extensions||{},e.extensions[this.name]={},n[this.name]=!0,e.pbrMetallicRoughness.metallicFactor=0,e.pbrMetallicRoughness.roughnessFactor=.9}}class TJ{constructor(t){this.writer=t,this.name=\\\\\\\"KHR_materials_pbrSpecularGlossiness\\\\\\\"}writeMaterial(t,e){if(!t.isGLTFSpecularGlossinessMaterial)return;const n=this.writer,i=n.extensionsUsed,r={};e.pbrMetallicRoughness.baseColorFactor&&(r.diffuseFactor=e.pbrMetallicRoughness.baseColorFactor);const s=[1,1,1];if(t.specular.toArray(s,0),r.specularFactor=s,r.glossinessFactor=t.glossiness,e.pbrMetallicRoughness.baseColorTexture&&(r.diffuseTexture=e.pbrMetallicRoughness.baseColorTexture),t.specularMap){const e={index:n.processTexture(t.specularMap)};n.applyTextureTransform(e,t.specularMap),r.specularGlossinessTexture=e}e.extensions=e.extensions||{},e.extensions[this.name]=r,i[this.name]=!0}}class AJ{constructor(t){this.writer=t,this.name=\\\\\\\"KHR_materials_transmission\\\\\\\"}writeMaterial(t,e){if(!t.isMeshPhysicalMaterial||0===t.transmission)return;const n=this.writer,i=n.extensionsUsed,r={};if(r.transmissionFactor=t.transmission,t.transmissionMap){const e={index:n.processTexture(t.transmissionMap)};n.applyTextureTransform(e,t.transmissionMap),r.transmissionTexture=e}e.extensions=e.extensions||{},e.extensions[this.name]=r,i[this.name]=!0}}class EJ{constructor(t){this.writer=t,this.name=\\\\\\\"KHR_materials_volume\\\\\\\"}writeMaterial(t,e){if(!t.isMeshPhysicalMaterial||0===t.thickness)return;const n=this.writer,i=n.extensionsUsed,r={};if(r.thicknessFactor=t.thickness,t.thicknessMap){const e={index:n.processTexture(t.thicknessMap)};n.applyTextureTransform(e,t.thicknessMap),r.thicknessTexture=e}r.attenuationDistance=t.attenuationDistance,r.attenuationColor=t.attenuationTint.toArray(),e.extensions=e.extensions||{},e.extensions[this.name]=r,i[this.name]=!0}}function MJ(t,e){const n=document.createElement(\\\\\\\"a\\\\\\\");n.style.display=\\\\\\\"none\\\\\\\",document.body.appendChild(n),n.href=URL.createObjectURL(t),n.download=e,n.click(),setTimeout((()=>{document.body.removeChild(n)}),10)}X$.Utils={insertKeyframe:function(t,e){const n=.001,i=t.getValueSize(),r=new t.TimeBufferType(t.times.length+1),s=new t.ValueBufferType(t.values.length+i),o=t.createInterpolant(new t.ValueBufferType(i));let a;if(0===t.times.length){r[0]=e;for(let t=0;t<i;t++)s[t]=0;a=0}else if(e<t.times[0]){if(Math.abs(t.times[0]-e)<n)return 0;r[0]=e,r.set(t.times,1),s.set(o.evaluate(e),0),s.set(t.values,i),a=0}else if(e>t.times[t.times.length-1]){if(Math.abs(t.times[t.times.length-1]-e)<n)return t.times.length-1;r[r.length-1]=e,r.set(t.times,0),s.set(t.values,0),s.set(o.evaluate(e),t.values.length),a=r.length-1}else for(let l=0;l<t.times.length;l++){if(Math.abs(t.times[l]-e)<n)return l;if(t.times[l]<e&&t.times[l+1]>e){r.set(t.times.slice(0,l+1),0),r[l+1]=e,r.set(t.times.slice(l+1),l+2),s.set(t.values.slice(0,(l+1)*i),0),s.set(o.evaluate(e),(l+1)*i),s.set(t.values.slice((l+1)*i),(l+2)*i),a=l+1;break}}return t.times=r,t.values=s,a},mergeMorphTargetTracks:function(t,e){const n=[],i={},r=t.tracks;for(let t=0;t<r.length;++t){let s=r[t];const o=KC.parseTrackName(s.name),a=KC.findNode(e,o.nodeName);if(\\\\\\\"morphTargetInfluences\\\\\\\"!==o.propertyName||void 0===o.propertyIndex){n.push(s);continue}if(s.createInterpolant!==s.InterpolantFactoryMethodDiscrete&&s.createInterpolant!==s.InterpolantFactoryMethodLinear){if(s.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline)throw new Error(\\\\\\\"THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation.\\\\\\\");console.warn(\\\\\\\"THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead.\\\\\\\"),s=s.clone(),s.setInterpolation(Vy)}const l=a.morphTargetInfluences.length,c=a.morphTargetDictionary[o.propertyIndex];if(void 0===c)throw new Error(\\\\\\\"THREE.GLTFExporter: Morph target name not found: \\\\\\\"+o.propertyIndex);let u;if(void 0===i[a.uuid]){u=s.clone();const t=new u.ValueBufferType(l*u.times.length);for(let e=0;e<u.times.length;e++)t[e*l+c]=u.values[e];u.name=(o.nodeName||\\\\\\\"\\\\\\\")+\\\\\\\".morphTargetInfluences\\\\\\\",u.values=t,i[a.uuid]=u,n.push(u);continue}const h=s.createInterpolant(new s.ValueBufferType(1));u=i[a.uuid];for(let t=0;t<u.times.length;t++)u.values[t*l+c]=h.evaluate(u.times[t]);for(let t=0;t<s.times.length;t++){const e=this.insertKeyframe(u,s.times[t]);u.values[e*l+c]=s.values[t]}}return t.tracks=n,t}};const SJ=new class extends aa{constructor(){super(...arguments),this.export=oa.BUTTON(null,{callback:t=>{CJ.PARAM_CALLBACK_export(t)}})}};class CJ extends gG{constructor(){super(...arguments),this.paramsConfig=SJ}static type(){return\\\\\\\"exporter\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.NEVER)}async cook(t){this.setCoreGroup(t[0])}static PARAM_CALLBACK_export(t){t._paramCallbackExport()}async _paramCallbackExport(){const t=(await this.compute()).coreContent();if(!t)return void console.error(\\\\\\\"input invalid\\\\\\\");const e=new WeakMap,n=t.objects();for(let t of n)e.set(t,t.parent);const i=new fr;for(let t of n)i.add(t);(new X$).parse(i,(t=>{if(t instanceof ArrayBuffer)i=\\\\\\\"scene.glb\\\\\\\",MJ(new Blob([t],{type:\\\\\\\"application/octet-stream\\\\\\\"}),i);else{!function(t,e){MJ(new Blob([t],{type:\\\\\\\"text/plain\\\\\\\"}),e)}(JSON.stringify(t,null,2),\\\\\\\"scene.gltf\\\\\\\")}var i;for(let t of n){const n=e.get(t);n&&n.add(t)}}),{embedImages:!0})}}const NJ=new class extends aa{constructor(){super(...arguments),this.makeFacesUnique=oa.BOOLEAN(0),this.addFaceCenterAttribute=oa.BOOLEAN(0,{visibleIf:{makeFacesUnique:1}}),this.addFaceId=oa.BOOLEAN(0,{visibleIf:{makeFacesUnique:1}}),this.transform=oa.BOOLEAN(0,{visibleIf:{makeFacesUnique:1}}),this.scale=oa.FLOAT(1,{visibleIf:{makeFacesUnique:1,transform:1}})}};class LJ extends gG{constructor(){super(...arguments),this.paramsConfig=NJ}static type(){return\\\\\\\"face\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}cook(t){const e=t[0];this.pv.makeFacesUnique&&(this._makeFacesUnique(e),this.pv.addFaceCenterAttribute&&this._addFaceCenterAttribute(e),this.pv.addFaceId&&this._addFaceId(e),this.pv.transform&&this._transform_faces(e)),this.setCoreGroup(e)}_makeFacesUnique(t){var e;for(let n of t.objects())if(n.isMesh){const t=n.geometry,i=f.chunk((null===(e=t.index)||void 0===e?void 0:e.array)||[],3),r=3*i.length;for(let e of Object.keys(t.attributes)){const n=t.attributes[e],s=n.itemSize,o=new Float32Array(r*s);let a=0;i.forEach((t=>{t.forEach((t=>{for(let e=0;e<s;e++){const i=n.array[t*s+e];o[a]=i,a+=1}}))})),t.setAttribute(e,new C.a(o,s))}const s=f.range(r);t.setIndex(s)}}_addFaceCenterAttribute(t){const e=\\\\\\\"face_center\\\\\\\",n=new p.a;let i,r,s,o;t.coreObjects().forEach((t=>{const a=t.object(),l=t.coreGeometry();if(a.isMesh&&l){i=l.faces(),l.hasAttrib(e)||l.addNumericAttrib(e,3,-1);for(let t=0;t<i.length;t++){r=i[t],r.center(n),s=r.points();for(let t=0;t<s.length;t++)o=s[t],o.setAttribValue(e,n)}}}))}_addFaceId(t){const e=\\\\\\\"face_id\\\\\\\";t.coreObjects().forEach((t=>{const n=t.object(),i=t.coreGeometry();if(n.isMesh&&i){const t=i.faces();i.hasAttrib(e)||i.addNumericAttrib(e,1,-1);for(let n=0;n<t.length;n++){const i=t[n].points();for(let t=0;t<i.length;t++){i[t].setAttribValue(e,n)}}}}))}_transform_faces(t){const e=\\\\\\\"position\\\\\\\",n=new p.a,i=new p.a,r=this.pv.scale;let s,o,a,l;t.coreObjects().forEach((t=>{const c=t.object(),u=t.coreGeometry();if(c.isMesh&&u){s=u.faces(),u.hasAttrib(e)||u.addNumericAttrib(e,3,-1);for(let t=0;t<s.length;t++){o=s[t],o.center(n),a=o.points();for(let t=0;t<a.length;t++){l=a[t];const s=l.position();i.x=s.x*r+n.x*(1-r),i.y=s.y*r+n.y*(1-r),i.z=s.z*r+n.z*(1-r),l.setAttribValue(e,i)}}}}))}}var OJ;!function(t){t.AUTO=\\\\\\\"auto\\\\\\\",t.DRC=\\\\\\\"drc\\\\\\\",t.FBX=\\\\\\\"fbx\\\\\\\",t.JSON=\\\\\\\"json\\\\\\\",t.GLTF=\\\\\\\"gltf\\\\\\\",t.GLTF_WITH_DRACO=\\\\\\\"gltf_with_draco\\\\\\\",t.OBJ=\\\\\\\"obj\\\\\\\",t.PDB=\\\\\\\"pdb\\\\\\\",t.PLY=\\\\\\\"ply\\\\\\\",t.STL=\\\\\\\"stl\\\\\\\"}(OJ||(OJ={}));const RJ=[OJ.AUTO,OJ.DRC,OJ.FBX,OJ.JSON,OJ.GLTF,OJ.GLTF_WITH_DRACO,OJ.OBJ,OJ.PDB,OJ.PLY,OJ.STL];var PJ;!function(t){t.DRC=\\\\\\\"drc\\\\\\\",t.FBX=\\\\\\\"fbx\\\\\\\",t.GLTF=\\\\\\\"gltf\\\\\\\",t.GLB=\\\\\\\"glb\\\\\\\",t.OBJ=\\\\\\\"obj\\\\\\\",t.PDB=\\\\\\\"pdb\\\\\\\",t.PLY=\\\\\\\"ply\\\\\\\",t.STL=\\\\\\\"stl\\\\\\\"}(PJ||(PJ={}));PJ.DRC,PJ.FBX,PJ.GLTF,PJ.GLB,PJ.OBJ,PJ.PDB,PJ.PLY,PJ.STL;class IJ extends jg{constructor(t,e,n){super(t.url,e,n),this._options=t,this._scene=e,this._node=n}load(t,e){this._load().then((e=>{t(e)})).catch((t=>{e(t)}))}_load(){return new Promise((async(t,e)=>{const n=await this._urlToLoad(),i=this.extension();if(i==OJ.JSON&&this._options.format==OJ.AUTO)IJ.increment_in_progress_loads_count(),await IJ.wait_for_max_concurrent_loads_queue_freed(),fetch(n).then((async e=>{const n=await e.json();new aY(this.loadingManager).parse(n,(e=>{IJ.decrement_in_progress_loads_count(),t(this.on_load_success(e.children[0]))}))})).catch((t=>{IJ.decrement_in_progress_loads_count(),e(t)}));else{const r=await this._loaderForFormat();if(r)IJ.increment_in_progress_loads_count(),await IJ.wait_for_max_concurrent_loads_queue_freed(),r.load(n,(e=>{this.on_load_success(e).then((e=>{IJ.decrement_in_progress_loads_count(),t(e)}))}),void 0,(t=>{ai.warn(\\\\\\\"error loading\\\\\\\",n,t),IJ.decrement_in_progress_loads_count(),e(t)}));else{e(`format not supported (${i})`)}}}))}async on_load_success(t){const e=this.extension();if(e==OJ.JSON)return[t];const n=t;if(n.isObject3D)switch(e){case PJ.PDB:return this.on_load_succes_pdb(t);case PJ.OBJ:default:return[n]}const i=t;if(i.isBufferGeometry)switch(e){case PJ.DRC:return this.on_load_succes_drc(i);default:return[new k.a(i)]}const r=t;if(null!=r.scene)switch(e){case PJ.GLTF:case PJ.GLB:return this.on_load_succes_gltf(r);default:return[n]}const s=t;if(s.geometryAtoms||s.geometryBonds)switch(e){case PJ.PDB:return this.on_load_succes_pdb(s);default:return[]}return[]}on_load_succes_drc(t){return[new k.a(t,IJ._default_mat_mesh)]}on_load_succes_gltf(t){const e=t.scene;return e.animations=t.animations,[e]}on_load_succes_pdb(t){return[new gr.a(t.geometryAtoms,IJ._default_mat_point),new Tr.a(t.geometryBonds,IJ._default_mat_line)]}static moduleNamesFromFormat(t,e){switch(t){case OJ.AUTO:return this.moduleNamesFromExt(e);case OJ.DRC:return[Vn.DRACOLoader];case OJ.FBX:return[Vn.FBXLoader];case OJ.JSON:return[];case OJ.GLTF:return[Vn.GLTFLoader];case OJ.GLTF_WITH_DRACO:return[Vn.GLTFLoader,Vn.DRACOLoader];case OJ.OBJ:return[Vn.OBJLoader];case OJ.PDB:return[Vn.PDBLoader];case OJ.PLY:return[Vn.PLYLoader];case OJ.STL:return[Vn.STLLoader]}ar.unreachable(t)}static moduleNamesFromExt(t){switch(t){case PJ.DRC:return[Vn.DRACOLoader];case PJ.FBX:return[Vn.FBXLoader];case PJ.GLTF:return[Vn.GLTFLoader];case PJ.GLB:return[Vn.GLTFLoader,Vn.DRACOLoader];case PJ.OBJ:return[Vn.OBJLoader];case PJ.PDB:return[Vn.PDBLoader];case PJ.PLY:return[Vn.PLYLoader];case PJ.STL:return[Vn.STLLoader]}}async _loaderForFormat(){const t=this._options.format;switch(t){case OJ.AUTO:return this._loaderForExt();case OJ.DRC:return this.loader_for_drc(this._node);case OJ.FBX:return this.loader_for_fbx();case OJ.JSON:return;case OJ.GLTF:return this.loader_for_gltf();case OJ.GLTF_WITH_DRACO:return this.loader_for_glb(this._node);case OJ.OBJ:return this.loader_for_obj();case OJ.PDB:return this.loader_for_pdb();case OJ.PLY:return this.loader_for_ply();case OJ.STL:return this.loader_for_stl()}ar.unreachable(t)}async _loaderForExt(){switch(this.extension().toLowerCase()){case PJ.DRC:return this.loader_for_drc(this._node);case PJ.FBX:return this.loader_for_fbx();case PJ.GLTF:return this.loader_for_gltf();case PJ.GLB:return this.loader_for_glb(this._node);case PJ.OBJ:return this.loader_for_obj();case PJ.PDB:return this.loader_for_pdb();case PJ.PLY:return this.loader_for_ply();case PJ.STL:return this.loader_for_stl()}}loader_for_fbx(){const t=ai.modulesRegister.module(Vn.FBXLoader);if(t)return new t(this.loadingManager)}loader_for_gltf(){const t=ai.modulesRegister.module(Vn.GLTFLoader);if(t)return new t(this.loadingManager)}static async loader_for_drc(t){const e=ai.modulesRegister.module(Vn.DRACOLoader);if(e){const n=new e(this.loadingManager),i=ai.libs.root(),r=ai.libs.DRACOPath();if(i||r){const e=`${i||\\\\\\\"\\\\\\\"}${r||\\\\\\\"\\\\\\\"}/`;if(t){const n=[\\\\\\\"draco_decoder.js\\\\\\\",\\\\\\\"draco_decoder.wasm\\\\\\\",\\\\\\\"draco_wasm_wrapper.js\\\\\\\"];await this._loadMultipleBlobGlobal({files:n.map((t=>({storedUrl:`${r}/${t}`,fullUrl:`${e}${t}`}))),node:t,error:\\\\\\\"failed to load draco libraries. Make sure to install them to load .glb files\\\\\\\"})}n.setDecoderPath(e)}else n.setDecoderPath(void 0);return n.setDecoderConfig({type:\\\\\\\"js\\\\\\\"}),n}}loader_for_drc(t){return IJ.loader_for_drc(t)}static async loader_for_glb(t){const e=ai.modulesRegister.module(Vn.GLTFLoader),n=ai.modulesRegister.module(Vn.DRACOLoader);if(e&&n){this.gltf_loader=this.gltf_loader||new e(this.loadingManager),this.draco_loader=this.draco_loader||new n(this.loadingManager);const i=ai.libs.root(),r=ai.libs.DRACOGLTFPath();if(i||r){const e=`${i||\\\\\\\"\\\\\\\"}${r||\\\\\\\"\\\\\\\"}/`;if(t){const n=[\\\\\\\"draco_decoder.js\\\\\\\",\\\\\\\"draco_decoder.wasm\\\\\\\",\\\\\\\"draco_wasm_wrapper.js\\\\\\\"];await this._loadMultipleBlobGlobal({files:n.map((t=>({storedUrl:`${r}/${t}`,fullUrl:`${e}${t}`}))),node:t,error:\\\\\\\"failed to load draco libraries. Make sure to install them to load .glb files\\\\\\\"})}this.draco_loader.setDecoderPath(e)}else this.draco_loader.setDecoderPath(void 0);return this.gltf_loader.setDRACOLoader(this.draco_loader),this.gltf_loader}}loader_for_glb(t){return IJ.loader_for_glb(t)}loader_for_obj(){const t=ai.modulesRegister.module(Vn.OBJLoader);if(t)return new t(this.loadingManager)}loader_for_pdb(){const t=ai.modulesRegister.module(Vn.PDBLoader);if(t)return new t(this.loadingManager)}loader_for_ply(){const t=ai.modulesRegister.module(Vn.PLYLoader);if(t)return new t(this.loadingManager)}loader_for_stl(){const t=ai.modulesRegister.module(Vn.STLLoader);if(t)return new t(this.loadingManager)}static setMaxConcurrentLoadsCount(t){this._maxConcurrentLoadsCountMethod=t}static _init_max_concurrent_loads_count(){return this._maxConcurrentLoadsCountMethod?this._maxConcurrentLoadsCountMethod():Zf.isChrome()?4:1}static _init_concurrent_loads_delay(){return Zf.isChrome()?1:10}static increment_in_progress_loads_count(){this.in_progress_loads_count++}static decrement_in_progress_loads_count(){this.in_progress_loads_count--;const t=this._queue.pop();if(t){const e=this.CONCURRENT_LOADS_DELAY;setTimeout((()=>{t()}),e)}}static async wait_for_max_concurrent_loads_queue_freed(){return this.in_progress_loads_count<=this.MAX_CONCURRENT_LOADS_COUNT?void 0:new Promise((t=>{this._queue.push(t)}))}}IJ._default_mat_mesh=new br.a,IJ._default_mat_point=new yr.a,IJ._default_mat_line=new wr.a,IJ.MAX_CONCURRENT_LOADS_COUNT=IJ._init_max_concurrent_loads_count(),IJ.CONCURRENT_LOADS_DELAY=IJ._init_concurrent_loads_delay(),IJ.in_progress_loads_count=0,IJ._queue=[];const FJ=`${Gg}/models/wolf.obj`;class DJ extends pG{static type(){return\\\\\\\"file\\\\\\\"}cook(t,e){const n=new IJ({url:e.url,format:e.format},this.scene(),this._node);return new Promise((t=>{n.load((e=>{const n=this._on_load(e);t(this.createCoreGroupFromObjects(n))}),(t=>{this._on_error(t,e)}))}))}_on_load(t){t=t.flat();for(let e of t)e.traverse((t=>{this._ensure_geometry_has_index(t),t.matrixAutoUpdate=!1}));return t}_on_error(t,e){var n;null===(n=this.states)||void 0===n||n.error.set(`could not load geometry from ${e.url} (${t})`)}_ensure_geometry_has_index(t){const e=t.geometry;e&&this.createIndexIfNone(e)}}DJ.DEFAULT_PARAMS={url:FJ,format:OJ.AUTO};const kJ=DJ.DEFAULT_PARAMS;const BJ=new class extends aa{constructor(){super(...arguments),this.url=oa.STRING(kJ.url,{fileBrowse:{type:[Ls.GEOMETRY]}}),this.format=oa.STRING(kJ.format,{menuString:{entries:RJ.map((t=>({name:t,value:t})))}}),this.reload=oa.BUTTON(null,{callback:t=>{zJ.PARAM_CALLBACK_reload(t)}})}};class zJ extends gG{constructor(){super(...arguments),this.paramsConfig=BJ}static type(){return\\\\\\\"file\\\\\\\"}async requiredModules(){for(let t of[this.p.url,this.p.format])t.isDirty()&&await t.compute();const t=jg.extension(this.pv.url||\\\\\\\"\\\\\\\"),e=this.pv.format;return IJ.moduleNamesFromFormat(e,t)}initializeNode(){this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.url],(()=>{const t=this.p.url.rawInput();if(t){const e=t.split(\\\\\\\"/\\\\\\\");return e[e.length-1]}return\\\\\\\"\\\\\\\"}))}))}))}async cook(t){this._operation=this._operation||new DJ(this.scene(),this.states,this);const e=await this._operation.cook(t,this.pv);this.setCoreGroup(e)}static PARAM_CALLBACK_reload(t){t._paramCallbackReload()}_paramCallbackReload(){this.p.url.setDirty()}}const UJ=new class extends aa{constructor(){super(...arguments),this.dist=oa.FLOAT(.1,{range:[0,1],rangeLocked:[!0,!1]})}};class GJ extends gG{constructor(){super(...arguments),this.paramsConfig=UJ}static type(){return\\\\\\\"fuse\\\\\\\"}static displayedInputNames(){return[\\\\\\\"points to fuse together\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}cook(t){const e=t[0],n=[];let i;for(let t of e.coreObjects())i=this._fuse_core_object(t),i&&n.push(i);this.setObjects(n)}_fuse_core_object(t){const e=t.object();if(!e)return;const n=t.points(),i=this.pv.dist,r={};for(let t of n){const e=t.position(),n=new p.a(Math.round(e.x/i),Math.round(e.y/i),Math.round(e.z/i)).toArray().join(\\\\\\\"-\\\\\\\");r[n]=r[n]||[],r[n].push(t)}const s=[];if(Object.keys(r).forEach((t=>{s.push(r[t][0])})),e.geometry.dispose(),s.length>0){const t=ps.geometryFromPoints(s,Nr(e.constructor));return t&&(e.geometry=t),e}}}class VJ{constructor(t,e,n){this._param_size=t,this._param_hexagon_radius=e,this._param_points_only=n}process(){const t=this._param_hexagon_radius,e=.5*t,n=t,i=Math.cos(Math.PI/6)*this._param_hexagon_radius,r=Math.floor(this._param_size.x/n),s=Math.floor(this._param_size.y/i);let o=[],a=[];for(let t=0;t<s;t++)for(let s=0;s<r;s++)o.push([-.5*this._param_size.x+s*n+(t%2==0?e:0),0,-.5*this._param_size.y+t*i]),this._param_points_only||t>=1&&(0==s||s==r-1?0==s?a.push([s+1+(t-1)*r,s+(t-1)*r,s+t*r]):a.push([s+t*r,s+(t-1)*r,s-1+t*r]):(a.push([s+t*r,s+(t-1)*r,s-1+t*r]),a.push([s+t*r,s+1+(t-1)*r,s+(t-1)*r])));const l=new S.a;return l.setAttribute(\\\\\\\"position\\\\\\\",new C.a(new Float32Array(o.flat()),3)),this._param_points_only||(l.setIndex(a.flat()),l.computeVertexNormals()),l}}const HJ=new p.a(0,1,0);const jJ=new class extends aa{constructor(){super(...arguments),this.size=oa.VECTOR2([1,1]),this.hexagonRadius=oa.FLOAT(.1,{range:[.001,1],rangeLocked:[!1,!1]}),this.direction=oa.VECTOR3([0,1,0]),this.pointsOnly=oa.BOOLEAN(0)}};class WJ extends gG{constructor(){super(...arguments),this.paramsConfig=jJ,this._core_transform=new Mz}static type(){return\\\\\\\"hexagons\\\\\\\"}initializeNode(){}cook(){if(this.pv.hexagonRadius>0){const t=new VJ(this.pv.size,this.pv.hexagonRadius,this.pv.pointsOnly).process();this._core_transform.rotate_geometry(t,HJ,this.pv.direction),this.pv.pointsOnly?this.setGeometry(t,Sr.POINTS):this.setGeometry(t)}else this.setObjects([])}}var qJ;!function(t){t.ADD_PARENT=\\\\\\\"add_parent\\\\\\\",t.REMOVE_PARENT=\\\\\\\"remove_parent\\\\\\\",t.ADD_CHILD=\\\\\\\"add_child\\\\\\\"}(qJ||(qJ={}));const XJ=[qJ.ADD_PARENT,qJ.REMOVE_PARENT,qJ.ADD_CHILD];class YJ extends pG{static type(){return\\\\\\\"hierarchy\\\\\\\"}cook(t,e){const n=t[0],i=XJ[e.mode];switch(i){case qJ.ADD_PARENT:{const t=this._add_parent_to_core_group(n,e);return this.createCoreGroupFromObjects(t)}case qJ.REMOVE_PARENT:{const t=this._remove_parent_from_core_group(n,e);return this.createCoreGroupFromObjects(t)}case qJ.ADD_CHILD:{const i=this._add_child_to_core_group(n,t[1],e);return this.createCoreGroupFromObjects(i)}}ar.unreachable(i)}_add_parent_to_core_group(t,e){if(0==e.levels)return t.objects();return[this._add_parent_to_object(t.objects(),e)]}_add_parent_to_object(t,e){let n=new In.a;if(n.matrixAutoUpdate=!1,n.add(...t),e.levels>0)for(let t=0;t<e.levels-1;t++)n=this._add_new_parent(n,e);return n}_add_new_parent(t,e){const n=new In.a;return n.matrixAutoUpdate=!1,n.add(t),n}_remove_parent_from_core_group(t,e){if(0==e.levels)return t.objects();{const n=[];for(let i of t.objects()){const t=this._remove_parent_from_object(i,e);for(let e of t)n.push(e)}return n}}_remove_parent_from_object(t,e){let n=t.children;for(let t=0;t<e.levels-1;t++)n=this._get_children_from_objects(n,e);return n}_get_children_from_objects(t,e){let n;const i=[];for(;n=t.pop();)if(n.children)for(let t of n.children)i.push(t);return i}_add_child_to_core_group(t,e,n){var i,r;const s=t.objects();if(!e)return null===(i=this.states)||void 0===i||i.error.set(\\\\\\\"input 1 is invalid\\\\\\\"),[];const o=e.objects(),a=n.objectMask.trim(),l=\\\\\\\"\\\\\\\"!=a?this._findObjectsByMaskFromObjects(a,s):s;n.debugObjectMask&&console.log(l);for(let t=0;t<l.length;t++){const e=l[t],n=o[t]||o[0];if(!n)return null===(r=this.states)||void 0===r||r.error.set(\\\\\\\"no objects found in input 1\\\\\\\"),[];e.add(n)}return s}_findObjectsByMaskFromObjects(t,e){const n=[];for(let i of e)this.scene().objectsController.objectsByMaskInObject(t,i,n);return n}}YJ.DEFAULT_PARAMS={mode:0,levels:1,objectMask:\\\\\\\"\\\\\\\",debugObjectMask:!1},YJ.INPUT_CLONED_STATE=Qi.FROM_NODE;const $J=[qJ.ADD_PARENT,qJ.REMOVE_PARENT],JJ=YJ.DEFAULT_PARAMS;const ZJ=new class extends aa{constructor(){super(...arguments),this.mode=oa.INTEGER(JJ.mode,{menu:{entries:XJ.map(((t,e)=>({name:t,value:e})))}}),this.levels=oa.INTEGER(JJ.levels,{range:[0,5],visibleIf:[{mode:XJ.indexOf(qJ.ADD_PARENT)},{mode:XJ.indexOf(qJ.REMOVE_PARENT)}]}),this.objectMask=oa.STRING(\\\\\\\"\\\\\\\",{visibleIf:{mode:XJ.indexOf(qJ.ADD_CHILD)}}),this.debugObjectMask=oa.BOOLEAN(0,{visibleIf:{mode:XJ.indexOf(qJ.ADD_CHILD)}})}};class QJ extends gG{constructor(){super(...arguments),this.paramsConfig=ZJ}static type(){return\\\\\\\"hierarchy\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to add or remove parents to/from\\\\\\\",\\\\\\\"objects to use as parent or children (optional)\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1,2),this.io.inputs.initInputsClonedState(YJ.INPUT_CLONED_STATE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.mode,this.p.levels,this.p.objectMask],(()=>{const t=XJ[this.pv.mode];return $J.includes(t)?`${t} ${this.pv.levels}`:`${t} (with mask: ${this.pv.objectMask})`}))}))}))}cook(t){this._operation=this._operation||new YJ(this._scene,this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const KJ=new class extends aa{constructor(){super(...arguments),this.texture=oa.OPERATOR_PATH(gi.UV,{nodeSelection:{context:Ki.COP}}),this.mult=oa.FLOAT(1)}};class tZ extends gG{constructor(){super(...arguments),this.paramsConfig=KJ}static type(){return\\\\\\\"heightMap\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}async cook(t){const e=t[0],n=this.p.texture.found_node();if(n){if(n.context()==Ki.COP){const t=n,i=(await t.compute()).texture();for(let t of e.coreObjects())this._set_position_from_data_texture(t,i)}else this.states.error.set(\\\\\\\"found node is not a texture\\\\\\\")}e.computeVertexNormals(),this.setCoreGroup(e)}_set_position_from_data_texture(t,e){var n;const i=this._data_from_texture(e);if(!i)return;const{data:r,resx:s,resy:o}=i,a=r.length/(s*o),l=null===(n=t.coreGeometry())||void 0===n?void 0:n.geometry();if(!l)return;const c=l.getAttribute(\\\\\\\"position\\\\\\\").array,u=l.getAttribute(\\\\\\\"uv\\\\\\\"),h=l.getAttribute(\\\\\\\"normal\\\\\\\");if(null==u)return void this.states.error.set(\\\\\\\"uvs are required\\\\\\\");if(null==h)return void this.states.error.set(\\\\\\\"normals are required\\\\\\\");const d=u.array,p=h.array,_=c.length/3;let m,f,g,v,y,x,b,w=0;for(let t=0;t<_;t++)m=2*t,f=d[m],g=d[m+1],v=Math.floor((s-1)*f),y=Math.floor((o-1)*(1-g)),x=y*s+v,b=r[a*x],w=3*t,c[w+0]+=p[w+0]*b*this.pv.mult,c[w+1]+=p[w+1]*b*this.pv.mult,c[w+2]+=p[w+2]*b*this.pv.mult}_data_from_texture(t){if(t.image)return t.image.data?this._data_from_data_texture(t):this._data_from_default_texture(t)}_data_from_default_texture(t){const e=t.image.width,n=t.image.height;return{data:Rf.data_from_image(t.image).data,resx:e,resy:n}}_data_from_data_texture(t){return{data:t.image.data,resx:t.image.width,resy:t.image.height}}}function eZ(t){return Math.atan2(-t.y,Math.sqrt(t.x*t.x+t.z*t.z))}class nZ extends S.a{constructor(t,e,n,i,r){super(),this.type=\\\\\\\"PolyhedronBufferGeometry\\\\\\\",this.parameters={vertices:t,indices:e,radius:n,detail:i},n=n||1,i=i||0;const s=[],o=[],a=new Map;function l(t,e,n,i){const r=i+1,s=[];for(let i=0;i<=r;i++){s[i]=[];const o=t.clone().lerp(n,i/r),a=e.clone().lerp(n,i/r),l=r-i;for(let t=0;t<=l;t++)s[i][t]=0===t&&i===r?o:o.clone().lerp(a,t/l)}for(let t=0;t<r;t++)for(let e=0;e<2*(r-t)-1;e++){const n=Math.floor(e/2);e%2==0?(c(s[t][n+1]),c(s[t+1][n]),c(s[t][n])):(c(s[t][n+1]),c(s[t+1][n+1]),c(s[t+1][n]))}}function c(t){if(r){let e=a.get(t.x);if(e){const n=e.get(t.y);if(n&&n.has(t.z))return}e||(e=new Map,a.set(t.x,e));let n=e.get(t.y);n||(n=new Set,e.set(t.y,n)),n.add(t.z)}s.push(t.x,t.y,t.z)}function u(e,n){const i=3*e;n.x=t[i+0],n.y=t[i+1],n.z=t[i+2]}!function(t){const n=new p.a,i=new p.a,r=new p.a;for(let s=0;s<e.length;s+=3)u(e[s+0],n),u(e[s+1],i),u(e[s+2],r),l(n,i,r,t)}(i),function(t){const e=new p.a;for(let n=0;n<s.length;n+=3)e.x=s[n+0],e.y=s[n+1],e.z=s[n+2],e.normalize().multiplyScalar(t),s[n+0]=e.x,s[n+1]=e.y,s[n+2]=e.z}(n),function(){const t=new p.a;for(let n=0;n<s.length;n+=3){t.x=s[n+0],t.y=s[n+1],t.z=s[n+2];const i=(e=t,Math.atan2(e.z,-e.x)/2/Math.PI+.5),r=eZ(t)/Math.PI+.5;o.push(i,1-r)}var e}(),this.setAttribute(\\\\\\\"position\\\\\\\",new C.c(s,3)),this.setAttribute(\\\\\\\"uv\\\\\\\",new C.c(o,2)),r||(this.setAttribute(\\\\\\\"normal\\\\\\\",new C.c(s.slice(),3)),0===i?this.computeVertexNormals():this.normalizeNormals())}}class iZ extends nZ{constructor(t,e,n){const 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],t,e,n),this.type=\\\\\\\"IcosahedronBufferGeometry\\\\\\\",this.parameters={radius:t,detail:e}}}class rZ extends pG{static type(){return\\\\\\\"icosahedron\\\\\\\"}cook(t,e){const n=e.pointsOnly,i=new iZ(e.radius,e.detail,n);if(i.translate(e.center.x,e.center.y,e.center.z),n){const t=this.createObject(i,Sr.POINTS);return this.createCoreGroupFromObjects([t])}return i.computeVertexNormals(),this.createCoreGroupFromGeometry(i)}}rZ.DEFAULT_PARAMS={radius:1,detail:0,pointsOnly:!1,center:new p.a(0,0,0)};const sZ=rZ.DEFAULT_PARAMS;const oZ=new class extends aa{constructor(){super(...arguments),this.radius=oa.FLOAT(sZ.radius),this.detail=oa.INTEGER(sZ.detail,{range:[0,10],rangeLocked:[!0,!1]}),this.pointsOnly=oa.BOOLEAN(sZ.pointsOnly),this.center=oa.VECTOR3(sZ.center)}};class aZ extends gG{constructor(){super(...arguments),this.paramsConfig=oZ}static type(){return\\\\\\\"icosahedron\\\\\\\"}cook(){this._operation=this._operation||new rZ(this._scene,this.states);const t=this._operation.cook([],this.pv);this.setCoreGroup(t)}}class lZ extends pG{static type(){return\\\\\\\"instance\\\\\\\"}async cook(t,e){const n=t[0];this._geometry=void 0;const i=n.objectsWithGeo()[0];if(i){const n=i.geometry;if(n){const i=t[1];this._create_instance(n,i,e)}}if(this._geometry){const t=(r=i)instanceof k.a?Sr.MESH:r instanceof Tr.a?Sr.LINE_SEGMENTS:r instanceof gr.a?Sr.POINTS:r instanceof Q.a?Sr.OBJECT3D:void ai.warn(\\\\\\\"ObjectTypeByObject received an unknown object type\\\\\\\",r);if(t){const n=this.createObject(this._geometry,t);if(e.applyMaterial){const t=await this._get_material(e);t&&await this._applyMaterial(n,t)}return this.createCoreGroupFromObjects([n])}}var r;return this.createCoreGroupFromObjects([])}async _get_material(t){var e;if(t.applyMaterial){const n=t.material.nodeWithContext(Ki.MAT,null===(e=this.states)||void 0===e?void 0:e.error);if(n){this._globals_handler=this._globals_handler||new Sf;const t=n.assemblerController;t&&t.set_assembler_globals_handler(this._globals_handler);return(await n.compute()).material()}}}async _applyMaterial(t,e){t.material=e,fs.applyCustomMaterials(t,e)}_create_instance(t,e,n){this._geometry=JY.create_instance_buffer_geo(t,e,n.attributesToCopy)}}lZ.DEFAULT_PARAMS={attributesToCopy:\\\\\\\"instance*\\\\\\\",applyMaterial:!0,material:new vi(\\\\\\\"\\\\\\\")},lZ.INPUT_CLONED_STATE=[Qi.ALWAYS,Qi.NEVER];const cZ=lZ.DEFAULT_PARAMS;const uZ=new class extends aa{constructor(){super(...arguments),this.attributesToCopy=oa.STRING(cZ.attributesToCopy),this.applyMaterial=oa.BOOLEAN(cZ.applyMaterial),this.material=oa.NODE_PATH(cZ.material.path(),{visibleIf:{applyMaterial:1},nodeSelection:{context:Ki.MAT},dependentOnFoundNode:!1})}};class hZ extends gG{constructor(){super(...arguments),this.paramsConfig=uZ}static type(){return\\\\\\\"instance\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to be instanciated\\\\\\\",\\\\\\\"points to instance to\\\\\\\"]}initializeNode(){super.initializeNode(),this.io.inputs.setCount(2),this.io.inputs.initInputsClonedState(lZ.INPUT_CLONED_STATE)}async cook(t){this._operation=this._operation||new lZ(this.scene(),this.states);const e=await this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const dZ=new class extends aa{constructor(){super(...arguments),this.useMax=oa.BOOLEAN(0),this.max=oa.INTEGER(1,{range:[0,100],rangeLocked:[!0,!1],visibleIf:{useMax:1}})}};class pZ extends gG{constructor(){super(...arguments),this.paramsConfig=dZ}static type(){return\\\\\\\"instancesCount\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}async cook(t){const e=t[0],n=e.objectsWithGeo();for(let t of n){const e=t.geometry;e&&e instanceof kX&&(this.pv.useMax?e.instanceCount=this.pv.max:e.instanceCount=1/0)}this.setCoreGroup(e)}}class _Z extends pG{static type(){return\\\\\\\"jitter\\\\\\\"}cook(t,e){const n=t[0],i=n.points();let r;for(let t=0;t<i.length;t++){r=i[t];const n=new p.a(2*e.mult.x*(rs.randFloat(75*t+764+e.seed)-.5),2*e.mult.y*(rs.randFloat(5678*t+3653+e.seed)-.5),2*e.mult.z*(rs.randFloat(657*t+48464+e.seed)-.5));n.normalize(),n.multiplyScalar(e.amount*rs.randFloat(78*t+54+e.seed));const s=r.position().clone().add(n);r.setPosition(s)}return n}}_Z.DEFAULT_PARAMS={amount:1,mult:new p.a(1,1,1),seed:1},_Z.INPUT_CLONED_STATE=Qi.FROM_NODE;const mZ=_Z.DEFAULT_PARAMS;const fZ=new class extends aa{constructor(){super(...arguments),this.amount=oa.FLOAT(mZ.amount),this.mult=oa.VECTOR3(mZ.mult),this.seed=oa.INTEGER(mZ.seed,{range:[0,100]})}};class gZ extends gG{constructor(){super(...arguments),this.paramsConfig=fZ}static type(){return\\\\\\\"jitter\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to jitter points of\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(_Z.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new _Z(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}new class extends aa{};const vZ=new class extends aa{constructor(){super(...arguments),this.layer=oa.INTEGER(0,{range:[0,31],rangeLocked:[!0,!0]})}};class yZ extends gG{constructor(){super(...arguments),this.paramsConfig=vZ}static type(){return\\\\\\\"layer\\\\\\\"}static displayedInputNames(){return[\\\\\\\"objects to change layers of\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.layer])}))}))}cook(t){const e=t[0];for(let t of e.objects())t.layers.set(this.pv.layer);this.setCoreGroup(e)}}const xZ=new class extends aa{constructor(){super(...arguments),this.length=oa.FLOAT(1,{range:[0,10]}),this.pointsCount=oa.INTEGER(1,{range:[2,100],rangeLocked:[!0,!1]}),this.origin=oa.VECTOR3([0,0,0]),this.direction=oa.VECTOR3([0,1,0])}};class bZ extends gG{constructor(){super(...arguments),this.paramsConfig=xZ}static type(){return\\\\\\\"line\\\\\\\"}initializeNode(){}cook(){const t=Math.max(2,this.pv.pointsCount),e=new Array(3*t),n=new Array(t),i=this.pv.direction.clone().normalize().multiplyScalar(this.pv.length);for(let r=0;r<t;r++){const s=r/(t-1),o=i.clone().multiplyScalar(s);o.add(this.pv.origin),o.toArray(e,3*r),r>0&&(n[2*(r-1)]=r-1,n[2*(r-1)+1]=r)}const r=new S.a;r.setAttribute(\\\\\\\"position\\\\\\\",new C.c(e,3)),r.setIndex(n),this.setGeometry(r,Sr.LINE_SEGMENTS)}}const wZ=new class extends aa{constructor(){super(...arguments),this.distance0=oa.FLOAT(1),this.distance1=oa.FLOAT(2),this.autoUpdate=oa.BOOLEAN(1),this.update=oa.BUTTON(null,{callback:t=>{TZ.PARAM_CALLBACK_update(t)}}),this.camera=oa.OPERATOR_PATH(\\\\\\\"/perspective_camera1\\\\\\\",{visibleIf:{autoUpdate:0},dependentOnFoundNode:!1})}};class TZ extends gG{constructor(){super(...arguments),this.paramsConfig=wZ,this._lod=this._create_LOD()}static type(){return\\\\\\\"lod\\\\\\\"}static displayedInputNames(){return[\\\\\\\"high res\\\\\\\",\\\\\\\"mid res\\\\\\\",\\\\\\\"low res\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1,3),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}_create_LOD(){const t=new Mr;return t.matrixAutoUpdate=!1,t}cook(t){this._clear_lod(),this._add_level(t[0],0),this._add_level(t[1],this.pv.distance0),this._add_level(t[2],this.pv.distance1),this._lod.autoUpdate=this.pv.autoUpdate,this.setObject(this._lod)}_add_level(t,e){if(t){const n=t.objects();let i;for(let t=0;t<n.length;t++)i=n[t],i.visible=!0,this._lod.addLevel(i,e),0==e&&0==t&&(this._lod.matrix.copy(i.matrix),Mz.decompose_matrix(this._lod)),i.matrix.identity(),Mz.decompose_matrix(i)}}_clear_lod(){let t;for(;t=this._lod.children[0];)this._lod.remove(t),t.matrix.multiply(this._lod.matrix),Mz.decompose_matrix(t);for(;this._lod.levels.pop(););}static PARAM_CALLBACK_update(t){t._update_lod()}async _update_lod(){if(this.p.autoUpdate)return;const t=this.p.camera;t.isDirty()&&await t.compute();let e=t.found_node_with_context_and_type(Ki.OBJ,nr.PERSPECTIVE)||t.found_node_with_context_and_type(Ki.OBJ,nr.ORTHOGRAPHIC);if(e){const t=e.object;this._lod.update(t)}else this.states.error.set(\\\\\\\"no camera node found\\\\\\\")}}class AZ extends pG{constructor(){super(...arguments),this._globals_handler=new Sf,this._old_mat_by_old_new_id=new Map,this._materials_by_uuid=new Map}static type(){return\\\\\\\"material\\\\\\\"}async cook(t,e){const n=t[0];return this._old_mat_by_old_new_id.clear(),await this._apply_materials(n,e),this._swap_textures(n,e),n}async _apply_materials(t,e){var n,i,r;if(!e.assignMat)return;const s=e.material.nodeWithContext(Ki.MAT,null===(n=this.states)||void 0===n?void 0:n.error);if(s){const n=s.material,r=s.assemblerController;if(r&&r.set_assembler_globals_handler(this._globals_handler),await s.compute(),n){if(e.applyToChildren)for(let i of t.objects())i.traverse((t=>{this._apply_material(t,n,e)}));else for(let i of t.objectsFromGroup(e.group))this._apply_material(i,n,e);return t}null===(i=this.states)||void 0===i||i.error.set(`material invalid. (error: '${s.states.error.message()}')`)}else null===(r=this.states)||void 0===r||r.error.set(\\\\\\\"no material node found\\\\\\\")}_swap_textures(t,e){if(e.swapCurrentTex){this._materials_by_uuid.clear();for(let n of t.objectsFromGroup(e.group))if(e.applyToChildren)n.traverse((t=>{const e=n.material;this._materials_by_uuid.set(e.uuid,e)}));else{const t=n.material;this._materials_by_uuid.set(t.uuid,t)}this._materials_by_uuid.forEach(((t,n)=>{this._swap_texture(t,e)}))}}_apply_material(t,e,n){if(n.group&&!vs.isInGroup(n.group,t))return;const i=n.cloneMat?fs.clone(e):e;if(e instanceof F&&i instanceof F)for(let t in e.uniforms)i.uniforms[t]=e.uniforms[t];const r=t;this._old_mat_by_old_new_id.set(i.uuid,r.material),r.material=i,fs.apply_render_hook(t,i),fs.applyCustomMaterials(t,i)}_swap_texture(t,e){if(\\\\\\\"\\\\\\\"==e.texSrc0||\\\\\\\"\\\\\\\"==e.texDest0)return;let n=this._old_mat_by_old_new_id.get(t.uuid);n=n||t;const i=n[e.texSrc0];if(i){t[e.texDest0]=i;const n=t.uniforms;if(n){n[e.texDest0]&&(n[e.texDest0]={value:i})}}}}AZ.DEFAULT_PARAMS={group:\\\\\\\"\\\\\\\",assignMat:!0,material:new vi(\\\\\\\"\\\\\\\"),applyToChildren:!0,cloneMat:!1,shareUniforms:!0,swapCurrentTex:!1,texSrc0:\\\\\\\"emissiveMap\\\\\\\",texDest0:\\\\\\\"map\\\\\\\"},AZ.INPUT_CLONED_STATE=Qi.FROM_NODE;const EZ=AZ.DEFAULT_PARAMS;const MZ=new class extends aa{constructor(){super(...arguments),this.group=oa.STRING(EZ.group),this.assignMat=oa.BOOLEAN(EZ.assignMat),this.material=oa.NODE_PATH(EZ.material.path(),{nodeSelection:{context:Ki.MAT},dependentOnFoundNode:!1,visibleIf:{assignMat:1}}),this.applyToChildren=oa.BOOLEAN(EZ.applyToChildren,{visibleIf:{assignMat:1}}),this.cloneMat=oa.BOOLEAN(EZ.cloneMat,{visibleIf:{assignMat:1}}),this.shareUniforms=oa.BOOLEAN(EZ.shareUniforms,{visibleIf:{assignMat:1,cloneMat:1}}),this.swapCurrentTex=oa.BOOLEAN(EZ.swapCurrentTex),this.texSrc0=oa.STRING(EZ.texSrc0,{visibleIf:{swapCurrentTex:1}}),this.texDest0=oa.STRING(EZ.texDest0,{visibleIf:{swapCurrentTex:1}})}};class SZ extends gG{constructor(){super(...arguments),this.paramsConfig=MZ}static type(){return\\\\\\\"material\\\\\\\"}static displayedInputNames(){return[\\\\\\\"objects to assign material to\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(AZ.INPUT_CLONED_STATE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.material],(()=>this.p.material.rawInput()))}))}))}async cook(t){this._operation=this._operation||new AZ(this._scene,this.states);const e=await this._operation.cook(t,this.pv);this.setCoreGroup(e)}}var CZ=n(88);class NZ{static sleep(t){return new Promise(((e,n)=>{setTimeout((()=>{e()}),t)}))}}const LZ=[Lg.VIDEO,Lg.WEB_CAM];const OZ=new class extends aa{constructor(){super(...arguments),this.webcam=oa.NODE_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:Ki.COP,types:LZ}}),this.scale=oa.FLOAT(2,{range:[0,2],rangeLocked:[!0,!1]}),this.selfieMode=oa.BOOLEAN(0),this.minDetectionConfidence=oa.FLOAT(.5,{range:[0,1],rangeLocked:[!0,!0]}),this.maxDetectionConfidence=oa.FLOAT(.5,{range:[0,1],rangeLocked:[!0,!0]}),this.frames=oa.INTEGER(1,{range:[1,100],rangeLocked:[!0,!1]}),this.fps=oa.INTEGER(24,{range:[1,60],rangeLocked:[!0,!1]}),this.capture=oa.BUTTON(null,{callback:t=>{RZ.PARAM_CALLBACK_capture(t)}}),this.showAllMeshes=oa.BOOLEAN(1)}};class RZ extends gG{constructor(){super(...arguments),this.paramsConfig=OZ,this._faceMesh=this._createFaceMesh(),this._currentCapturedFrame=9999999,this._webcamSnapshotCanvases=[],this._webcamSnapshots=[],this._faceMeshObjects=[]}static type(){return\\\\\\\"mediapipeFaceMesh\\\\\\\"}initializeNode(){this._forceTimeDependent()}_forceTimeDependent(){this._graph_node||(this._graph_node=new Ai(this.scene(),\\\\\\\"facemesh_update_object\\\\\\\"),this._graph_node.addGraphInput(this.scene().timeController.graphNode),this._graph_node.addPostDirtyHook(\\\\\\\"on_time_change\\\\\\\",this.setDirty.bind(this)))}async cook(){if(this.pv.showAllMeshes)this.setObjects(this._faceMeshObjects);else{const t=this.scene().frame()%this._faceMeshObjects.length,e=this._faceMeshObjects[t];e?this.setObject(e):this.setObjects([])}}_createFaceMesh(){const t=new CZ.FaceMesh({locateFile:t=>`https://cdn.jsdelivr.net/npm/@mediapipe/face_mesh@0.4/${t}`});return t.onResults(this._onResults.bind(this)),t}async _getHTMLVideoElement(){const t=this.pv.webcam.nodeWithContext(Ki.COP);if(!t)return this.states.error.set(\\\\\\\"node is not a COP node\\\\\\\"),void this.cookController.endCook();if(!LZ.includes(t.type()))return this.states.error.set(`node type '${t.type()}' is not accepted by MediapipeFaceMesh (${LZ.join(\\\\\\\", \\\\\\\")})`),void this.cookController.endCook();const e=t;await e.compute();const n=e.HTMLVideoElement();if(n)return{videoElement:n};console.log(\\\\\\\"no video element found\\\\\\\")}_videoSnapshotCanvas(t){const e=document.createElement(\\\\\\\"canvas\\\\\\\");e.width=t.videoWidth,e.height=t.videoHeight;return e.getContext(\\\\\\\"2d\\\\\\\").drawImage(t,0,0,e.width,e.height),e}static _canvasToTexture(t,e){return new Promise((n=>{const i=t.toDataURL(\\\\\\\"image/png\\\\\\\"),r=new Image;console.log(`start ${e}`),r.onload=()=>{const t=new J.a(r);t.name=`facemesh-texture-${e}`,t.encoding=w.ld,t.needsUpdate=!0,console.log(`done ${e}`),n({texture:t,image:r})},r.src=i}))}async _initActiveHTMLVideoElement(){const t=await this._getHTMLVideoElement();if(!t)return;const{videoElement:e}=t;for(;e.paused;)console.log(\\\\\\\"video is paused\\\\\\\"),await NZ.sleep(500);this._activeHTMLVideoElement=e}_captureAllowed(){return this._currentCapturedFrame<this.pv.frames}async _capture(){console.log(\\\\\\\"capture start\\\\\\\"),await this._initActiveHTMLVideoElement(),this._currentCapturedFrame=0,await this._captureWebCamSnapshots(),console.log(\\\\\\\"capture complete\\\\\\\"),this._initFaceMeshObjects(),this._currentCapturedFrame=0,await this._sendToFaceMeshAll(),console.log(\\\\\\\"facemesh generation completed\\\\\\\")}_captureWebCamSnapshots(){return new Promise((t=>{this._webcamSnapshotCanvases=[],this._webcamSnapshots=[],this._captureSingleWebCamSnapshot(t)}))}async _captureSingleWebCamSnapshot(t){if(this._activeHTMLVideoElement)if(this._captureAllowed()){const e=this._videoSnapshotCanvas(this._activeHTMLVideoElement);this._webcamSnapshotCanvases.push(e),this._currentCapturedFrame++,console.log(\\\\\\\"capture\\\\\\\",this._currentCapturedFrame),setTimeout((()=>{this._captureSingleWebCamSnapshot(t)}),1e3/this.pv.fps)}else{console.log(\\\\\\\"converting snapshots to images and textures...\\\\\\\");let e=0;for(let t of this._webcamSnapshotCanvases){const n=await RZ._canvasToTexture(t,e);this._webcamSnapshots.push(n),e++}t()}else console.log(\\\\\\\"no video found\\\\\\\")}_initFaceMeshObjects(){this._faceMeshObjects=[];const t=this.pv.frames;for(let e=0;e<t;e++){const t=this._createFaceMeshObject(e);this._faceMeshObjects.push(t)}}async _sendToFaceMeshAll(){this._faceMesh.setOptions({enableFaceGeometry:!0,selfieMode:this.pv.selfieMode,maxNumFaces:1,minDetectionConfidence:this.pv.minDetectionConfidence,minTrackingConfidence:this.pv.maxDetectionConfidence});for(let t of this._webcamSnapshots)await this._sendToFaceMeshSingle(t)}_sendToFaceMeshSingle(t){return new Promise((e=>{this._onSendToFaceMeshSingleResolve=e,this._faceMesh.send({image:t.image})}))}_onResults(t){if(!this._captureAllowed())return;console.log(this._currentCapturedFrame);const e=t.multiFaceLandmarks[0];if(!e)return console.error(`no landmark found (${this._currentCapturedFrame})`),void console.log(\\\\\\\"results\\\\\\\",t);const n=this._faceMeshObjects[this._currentCapturedFrame];let i=0;const r=n.geometry.getAttribute(\\\\\\\"position\\\\\\\"),s=n.geometry.getAttribute(\\\\\\\"uv\\\\\\\"),o=r.array,a=s.array,l=this.pv.scale;for(let t of e)o[3*i+0]=(1-t.x)*l,o[3*i+1]=(1-t.y)*l,o[3*i+2]=t.z*l,a[2*i+0]=t.x,a[2*i+1]=1-t.y,i++;r.needsUpdate=!0,s.needsUpdate=!0,this._updateMaterial(this._currentCapturedFrame),this._currentCapturedFrame++,this._onSendToFaceMeshSingleResolve&&this._onSendToFaceMeshSingleResolve()}_updateMaterial(t){const e=this._faceMeshObjects[t].material;if(!m.isArray(e)){const n=e,i=this._webcamSnapshots[t].texture;n.map=i,n.needsUpdate=!0}}_createFaceMeshObject(t){const e=new S.a,n=[],i=[];for(let t=0;t<468;t++)n.push(t),n.push(t),n.push(t),i.push(t),i.push(t);const r=[],s=CZ.FACEMESH_TESSELATION.length/3;for(let t=0;t<s;t++)r.push(CZ.FACEMESH_TESSELATION[3*t+0][0]),r.push(CZ.FACEMESH_TESSELATION[3*t+1][0]),r.push(CZ.FACEMESH_TESSELATION[3*t+2][0]);e.setAttribute(\\\\\\\"position\\\\\\\",new C.a(new Float32Array(n),3)),e.setAttribute(\\\\\\\"uv\\\\\\\",new C.a(new Float32Array(i),2)),e.setIndex(r);const o=this.createObject(e,Sr.MESH,new at.a);return o.name=`${this.path()}-${t}`,o}static PARAM_CALLBACK_capture(t){t._paramCallbackCapture()}_paramCallbackCapture(){this._capture()}}class PZ extends pG{static type(){return\\\\\\\"merge\\\\\\\"}cook(t,e){let n=[];for(let i of t)if(i){const t=i.objects();if(e.compact)for(let e of t)e.traverse((t=>{n.push(t)}));else for(let t of i.objects())n.push(t)}e.compact&&(n=this._make_compact(n));for(let t of n)t.traverse((t=>{t.matrixAutoUpdate=!1}));return this.createCoreGroupFromObjects(n)}_make_compact(t){const e=new Map,n=new Map,i=[];for(let r of t)r.traverse((t=>{if(t instanceof In.a)return;const r=t;if(r.geometry){const t=Nr(r.constructor);if(i.includes(t)||i.push(t),t){e.get(t)||e.set(t,r.material),u.pushOnArrayAtEntry(n,t,r)}}}));const r=[];return i.forEach((t=>{var i,s;const o=n.get(t);if(o){const n=[];for(let t of o){const e=t.geometry;e.applyMatrix4(t.matrix),n.push(e)}try{const s=ps.mergeGeometries(n);if(s){const n=e.get(t),i=this.createObject(s,t,n);r.push(i)}else null===(i=this.states)||void 0===i||i.error.set(\\\\\\\"merge failed, check that input geometries have the same attributes\\\\\\\")}catch(t){null===(s=this.states)||void 0===s||s.error.set(t.message)}}})),r}}PZ.DEFAULT_PARAMS={compact:!1},PZ.INPUT_CLONED_STATE=Qi.FROM_NODE;const IZ=\\\\\\\"geometry to merge\\\\\\\",FZ=PZ.DEFAULT_PARAMS;const DZ=new class extends aa{constructor(){super(...arguments),this.compact=oa.BOOLEAN(FZ.compact),this.inputsCount=oa.INTEGER(4,{range:[1,32],rangeLocked:[!0,!1],callback:t=>{kZ.PARAM_CALLBACK_setInputsCount(t)}})}};class kZ extends gG{constructor(){super(...arguments),this.paramsConfig=DZ}static type(){return\\\\\\\"merge\\\\\\\"}static displayedInputNames(){return[IZ,IZ,IZ,IZ]}setCompactMode(t){this.p.compact.set(t)}initializeNode(){this.io.inputs.setCount(1,4),this.io.inputs.initInputsClonedState(PZ.INPUT_CLONED_STATE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.compact],(()=>this.pv.compact?\\\\\\\"compact\\\\\\\":\\\\\\\"separate objects\\\\\\\"))})),this.params.addOnSceneLoadHook(\\\\\\\"update inputs\\\\\\\",(()=>{this._callbackUpdateInputsCount()}))}))}cook(t){this._operation=this._operation||new PZ(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}_callbackUpdateInputsCount(){this.io.inputs.setCount(1,this.pv.inputsCount),this.emit(Ei.INPUTS_UPDATED)}static PARAM_CALLBACK_setInputsCount(t){t._callbackUpdateInputsCount()}}class BZ{constructor(t=Math){this.grad3=[[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]],this.grad4=[[0,1,1,1],[0,1,1,-1],[0,1,-1,1],[0,1,-1,-1],[0,-1,1,1],[0,-1,1,-1],[0,-1,-1,1],[0,-1,-1,-1],[1,0,1,1],[1,0,1,-1],[1,0,-1,1],[1,0,-1,-1],[-1,0,1,1],[-1,0,1,-1],[-1,0,-1,1],[-1,0,-1,-1],[1,1,0,1],[1,1,0,-1],[1,-1,0,1],[1,-1,0,-1],[-1,1,0,1],[-1,1,0,-1],[-1,-1,0,1],[-1,-1,0,-1],[1,1,1,0],[1,1,-1,0],[1,-1,1,0],[1,-1,-1,0],[-1,1,1,0],[-1,1,-1,0],[-1,-1,1,0],[-1,-1,-1,0]],this.p=[];for(let e=0;e<256;e++)this.p[e]=Math.floor(256*t.random());this.perm=[];for(let t=0;t<512;t++)this.perm[t]=this.p[255&t];this.simplex=[[0,1,2,3],[0,1,3,2],[0,0,0,0],[0,2,3,1],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,2,3,0],[0,2,1,3],[0,0,0,0],[0,3,1,2],[0,3,2,1],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,3,2,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[1,2,0,3],[0,0,0,0],[1,3,0,2],[0,0,0,0],[0,0,0,0],[0,0,0,0],[2,3,0,1],[2,3,1,0],[1,0,2,3],[1,0,3,2],[0,0,0,0],[0,0,0,0],[0,0,0,0],[2,0,3,1],[0,0,0,0],[2,1,3,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0],[2,0,1,3],[0,0,0,0],[0,0,0,0],[0,0,0,0],[3,0,1,2],[3,0,2,1],[0,0,0,0],[3,1,2,0],[2,1,0,3],[0,0,0,0],[0,0,0,0],[0,0,0,0],[3,1,0,2],[0,0,0,0],[3,2,0,1],[3,2,1,0]]}dot(t,e,n){return t[0]*e+t[1]*n}dot3(t,e,n,i){return t[0]*e+t[1]*n+t[2]*i}dot4(t,e,n,i,r){return t[0]*e+t[1]*n+t[2]*i+t[3]*r}noise(t,e){let n,i,r;const s=(t+e)*(.5*(Math.sqrt(3)-1)),o=Math.floor(t+s),a=Math.floor(e+s),l=(3-Math.sqrt(3))/6,c=(o+a)*l,u=t-(o-c),h=e-(a-c);let d,p;u>h?(d=1,p=0):(d=0,p=1);const _=u-d+l,m=h-p+l,f=u-1+2*l,g=h-1+2*l,v=255&o,y=255&a,x=this.perm[v+this.perm[y]]%12,b=this.perm[v+d+this.perm[y+p]]%12,w=this.perm[v+1+this.perm[y+1]]%12;let T=.5-u*u-h*h;T<0?n=0:(T*=T,n=T*T*this.dot(this.grad3[x],u,h));let A=.5-_*_-m*m;A<0?i=0:(A*=A,i=A*A*this.dot(this.grad3[b],_,m));let E=.5-f*f-g*g;return E<0?r=0:(E*=E,r=E*E*this.dot(this.grad3[w],f,g)),70*(n+i+r)}noise3d(t,e,n){let i,r,s,o;const a=(t+e+n)*(1/3),l=Math.floor(t+a),c=Math.floor(e+a),u=Math.floor(n+a),h=1/6,d=(l+c+u)*h,p=t-(l-d),_=e-(c-d),m=n-(u-d);let f,g,v,y,x,b;p>=_?_>=m?(f=1,g=0,v=0,y=1,x=1,b=0):p>=m?(f=1,g=0,v=0,y=1,x=0,b=1):(f=0,g=0,v=1,y=1,x=0,b=1):_<m?(f=0,g=0,v=1,y=0,x=1,b=1):p<m?(f=0,g=1,v=0,y=0,x=1,b=1):(f=0,g=1,v=0,y=1,x=1,b=0);const w=p-f+h,T=_-g+h,A=m-v+h,E=p-y+2*h,M=_-x+2*h,S=m-b+2*h,C=p-1+.5,N=_-1+.5,L=m-1+.5,O=255&l,R=255&c,P=255&u,I=this.perm[O+this.perm[R+this.perm[P]]]%12,F=this.perm[O+f+this.perm[R+g+this.perm[P+v]]]%12,D=this.perm[O+y+this.perm[R+x+this.perm[P+b]]]%12,k=this.perm[O+1+this.perm[R+1+this.perm[P+1]]]%12;let B=.6-p*p-_*_-m*m;B<0?i=0:(B*=B,i=B*B*this.dot3(this.grad3[I],p,_,m));let z=.6-w*w-T*T-A*A;z<0?r=0:(z*=z,r=z*z*this.dot3(this.grad3[F],w,T,A));let U=.6-E*E-M*M-S*S;U<0?s=0:(U*=U,s=U*U*this.dot3(this.grad3[D],E,M,S));let G=.6-C*C-N*N-L*L;return G<0?o=0:(G*=G,o=G*G*this.dot3(this.grad3[k],C,N,L)),32*(i+r+s+o)}noise4d(t,e,n,i){const r=this.grad4,s=this.simplex,o=this.perm,a=(Math.sqrt(5)-1)/4,l=(5-Math.sqrt(5))/20;let c,u,h,d,p;const _=(t+e+n+i)*a,m=Math.floor(t+_),f=Math.floor(e+_),g=Math.floor(n+_),v=Math.floor(i+_),y=(m+f+g+v)*l,x=t-(m-y),b=e-(f-y),w=n-(g-y),T=i-(v-y),A=(x>b?32:0)+(x>w?16:0)+(b>w?8:0)+(x>T?4:0)+(b>T?2:0)+(w>T?1:0),E=s[A][0]>=3?1:0,M=s[A][1]>=3?1:0,S=s[A][2]>=3?1:0,C=s[A][3]>=3?1:0,N=s[A][0]>=2?1:0,L=s[A][1]>=2?1:0,O=s[A][2]>=2?1:0,R=s[A][3]>=2?1:0,P=s[A][0]>=1?1:0,I=s[A][1]>=1?1:0,F=s[A][2]>=1?1:0,D=s[A][3]>=1?1:0,k=x-E+l,B=b-M+l,z=w-S+l,U=T-C+l,G=x-N+2*l,V=b-L+2*l,H=w-O+2*l,j=T-R+2*l,W=x-P+3*l,q=b-I+3*l,X=w-F+3*l,Y=T-D+3*l,$=x-1+4*l,J=b-1+4*l,Z=w-1+4*l,Q=T-1+4*l,K=255&m,tt=255&f,et=255&g,nt=255&v,it=o[K+o[tt+o[et+o[nt]]]]%32,rt=o[K+E+o[tt+M+o[et+S+o[nt+C]]]]%32,st=o[K+N+o[tt+L+o[et+O+o[nt+R]]]]%32,ot=o[K+P+o[tt+I+o[et+F+o[nt+D]]]]%32,at=o[K+1+o[tt+1+o[et+1+o[nt+1]]]]%32;let lt=.6-x*x-b*b-w*w-T*T;lt<0?c=0:(lt*=lt,c=lt*lt*this.dot4(r[it],x,b,w,T));let ct=.6-k*k-B*B-z*z-U*U;ct<0?u=0:(ct*=ct,u=ct*ct*this.dot4(r[rt],k,B,z,U));let ut=.6-G*G-V*V-H*H-j*j;ut<0?h=0:(ut*=ut,h=ut*ut*this.dot4(r[st],G,V,H,j));let ht=.6-W*W-q*q-X*X-Y*Y;ht<0?d=0:(ht*=ht,d=ht*ht*this.dot4(r[ot],W,q,X,Y));let dt=.6-$*$-J*J-Z*Z-Q*Q;return dt<0?p=0:(dt*=dt,p=dt*dt*this.dot4(r[at],$,J,Z,Q)),27*(c+u+h+d+p)}}var zZ;!function(t){t.ADD=\\\\\\\"add\\\\\\\",t.SET=\\\\\\\"set\\\\\\\",t.MULT=\\\\\\\"mult\\\\\\\",t.SUBSTRACT=\\\\\\\"substract\\\\\\\",t.DIVIDE=\\\\\\\"divide\\\\\\\"}(zZ||(zZ={}));const UZ=[zZ.ADD,zZ.SET,zZ.MULT,zZ.SUBSTRACT,zZ.DIVIDE];const GZ=new class extends aa{constructor(){super(...arguments),this.amplitude=oa.FLOAT(1),this.tamplitudeAttrib=oa.BOOLEAN(0),this.amplitudeAttrib=oa.STRING(\\\\\\\"amp\\\\\\\",{visibleIf:{tamplitudeAttrib:!0}}),this.freq=oa.VECTOR3([1,1,1]),this.offset=oa.VECTOR3([0,0,0]),this.octaves=oa.INTEGER(3,{range:[1,8],rangeLocked:[!0,!1]}),this.ampAttenuation=oa.FLOAT(.5,{range:[0,1]}),this.freqIncrease=oa.FLOAT(2,{range:[0,10]}),this.seed=oa.INTEGER(0,{range:[0,100],separatorAfter:!0}),this.useNormals=oa.BOOLEAN(0),this.attribName=oa.STRING(\\\\\\\"position\\\\\\\"),this.useRestAttributes=oa.BOOLEAN(0),this.restP=oa.STRING(\\\\\\\"restP\\\\\\\",{visibleIf:{useRestAttributes:!0}}),this.restN=oa.STRING(\\\\\\\"restN\\\\\\\",{visibleIf:{useRestAttributes:!0}}),this.operation=oa.INTEGER(UZ.indexOf(zZ.ADD),{menu:{entries:UZ.map((t=>({name:t,value:UZ.indexOf(t)})))}}),this.computeNormals=oa.BOOLEAN(1)}};class VZ extends gG{constructor(){super(...arguments),this.paramsConfig=GZ,this._simplex_by_seed=new Map,this._rest_pos=new p.a,this._rest_value2=new d.a,this._noise_value_v=new p.a}static type(){return\\\\\\\"noise\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to add noise to\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState([Qi.FROM_NODE])}setOperation(t){this.p.operation.set(UZ.indexOf(t))}async cook(t){const e=t[0],n=e.points(),i=this.pv.attribName;if(!e.hasAttrib(i))return this.states.error.set(`attribute ${i} not found`),void this.cookController.endCook();if(e.attribType(i)!=Dr.NUMERIC)return this.states.error.set(`attribute ${i} is not a numeric attribute`),void this.cookController.endCook();const r=this._get_simplex(),s=this.pv.useNormals&&e.hasAttrib(\\\\\\\"normal\\\\\\\"),o=e.attribSize(this.pv.attribName),a=UZ[this.pv.operation],l=this.pv.useRestAttributes,c=this.pv.amplitude,u=this.pv.tamplitudeAttrib;let h,f,g=new p.a;for(let t=0;t<n.length;t++){const e=n[t];f=e.attribValue(i),l?(g=e.attribValue(this.pv.restP),h=s?e.attribValue(this.pv.restN):void 0):(e.getPosition(g),h=s?e.attribValue(\\\\\\\"normal\\\\\\\"):void 0);const v=u?this._amplitude_from_attrib(e,c):c,y=this._noise_value(s,r,v,g,h),x=this._make_noise_value_correct_size(y,o);if(m.isNumber(f)&&m.isNumber(x)){const t=this._new_attrib_value_from_float(a,f,x);e.setAttribValue(i,t)}else if(f instanceof d.a&&x instanceof d.a){const t=this._new_attrib_value_from_vector2(a,f,x);e.setAttribValue(i,t)}else if(f instanceof p.a&&x instanceof p.a){const t=this._new_attrib_value_from_vector3(a,f,x);e.setAttribValue(i,t)}else if(f instanceof _.a&&x instanceof _.a){const t=this._new_attrib_value_from_vector4(a,f,x);e.setAttribValue(i,t)}}if(!this.io.inputs.cloneRequired(0))for(let t of e.geometries())t.getAttribute(i).needsUpdate=!0;this.pv.computeNormals&&e.computeVertexNormals(),this.setCoreGroup(e)}_noise_value(t,e,n,i,r){if(this._rest_pos.copy(i).add(this.pv.offset).multiply(this.pv.freq),t&&r){const t=n*this._fbm(e,this._rest_pos.x,this._rest_pos.y,this._rest_pos.z);return this._noise_value_v.copy(r),this._noise_value_v.multiplyScalar(t)}return this._noise_value_v.set(n*this._fbm(e,this._rest_pos.x+545,this._rest_pos.y+125454,this._rest_pos.z+2142),n*this._fbm(e,this._rest_pos.x-425,this._rest_pos.y-25746,this._rest_pos.z+95242),n*this._fbm(e,this._rest_pos.x+765132,this._rest_pos.y+21,this._rest_pos.z-9245)),this._noise_value_v}_make_noise_value_correct_size(t,e){switch(e){case 1:return t.x;case 2:return this._rest_value2.set(t.x,t.y),this._rest_value2;case 3:default:return t}}_new_attrib_value_from_float(t,e,n){switch(t){case zZ.ADD:return e+n;case zZ.SET:return n;case zZ.MULT:return e*n;case zZ.DIVIDE:return e/n;case zZ.SUBSTRACT:return e-n}ar.unreachable(t)}_new_attrib_value_from_vector2(t,e,n){switch(t){case zZ.ADD:return e.add(n);case zZ.SET:return n;case zZ.MULT:return e.multiply(n);case zZ.DIVIDE:return e.divide(n);case zZ.SUBSTRACT:return e.sub(n)}ar.unreachable(t)}_new_attrib_value_from_vector3(t,e,n){switch(t){case zZ.ADD:return e.add(n);case zZ.SET:return n;case zZ.MULT:return e.multiply(n);case zZ.DIVIDE:return e.divide(n);case zZ.SUBSTRACT:return e.sub(n)}ar.unreachable(t)}_new_attrib_value_from_vector4(t,e,n){switch(t){case zZ.ADD:return e.add(n);case zZ.SET:return n;case zZ.MULT:return e.multiplyScalar(n.x);case zZ.DIVIDE:return e.divideScalar(n.x);case zZ.SUBSTRACT:return e.sub(n)}ar.unreachable(t)}_amplitude_from_attrib(t,e){const n=t.attribValue(this.pv.amplitudeAttrib);return m.isNumber(n)?n*e:n instanceof d.a||n instanceof p.a||n instanceof _.a?n.x*e:1}_fbm(t,e,n,i){let r=0,s=1;for(let o=0;o<this.pv.octaves;o++)r+=s*t.noise3d(e,n,i),e*=this.pv.freqIncrease,n*=this.pv.freqIncrease,i*=this.pv.freqIncrease,s*=this.pv.ampAttenuation;return r}_get_simplex(){const t=this._simplex_by_seed.get(this.pv.seed);if(t)return t;{const t=this._create_simplex();return this._simplex_by_seed.set(this.pv.seed,t),t}}_create_simplex(){const t=this.pv.seed,e=new BZ({random:function(){return rs.randFloat(t)}});return this._simplex_by_seed.delete(t),e}}const HZ=new class extends aa{constructor(){super(...arguments),this.edit=oa.BOOLEAN(0),this.updateX=oa.BOOLEAN(0,{visibleIf:{edit:1}}),this.x=oa.FLOAT(\\\\\\\"@N.x\\\\\\\",{visibleIf:{updateX:1,edit:1},expression:{forEntities:!0}}),this.updateY=oa.BOOLEAN(0,{visibleIf:{edit:1}}),this.y=oa.FLOAT(\\\\\\\"@N.y\\\\\\\",{visibleIf:{updateY:1,edit:1},expression:{forEntities:!0}}),this.updateZ=oa.BOOLEAN(0,{visibleIf:{edit:1}}),this.z=oa.FLOAT(\\\\\\\"@N.z\\\\\\\",{visibleIf:{updateZ:1,edit:1},expression:{forEntities:!0}}),this.recompute=oa.BOOLEAN(1,{visibleIf:{edit:0}}),this.invert=oa.BOOLEAN(0)}};class jZ extends gG{constructor(){super(...arguments),this.paramsConfig=HZ}static type(){return\\\\\\\"normals\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to update normals of\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}async cook(t){const e=t[0];this.pv.edit?await this._eval_expressions_for_core_group(e):this.pv.recompute&&e.computeVertexNormals(),this.pv.invert&&this._invert_normals(e),this.setCoreGroup(e)}async _eval_expressions_for_core_group(t){const e=t.coreObjects();for(let t=0;t<e.length;t++)await this._eval_expressions_for_core_object(e[t])}async _eval_expressions_for_core_object(t){const e=t.object().geometry,n=t.points();let i=e.getAttribute(Hr.NORMAL);if(!i){new ps(e).addNumericAttrib(Hr.NORMAL,3,0),i=e.getAttribute(Hr.NORMAL)}const r=i.array;if(this.pv.updateX)if(this.p.x.hasExpression()&&this.p.x.expressionController)await this.p.x.expressionController.compute_expression_for_points(n,((t,e)=>{r[3*t.index()+0]=e}));else{let t;for(let e=0;e<n.length;e++)t=n[e],r[3*t.index()+0]=this.pv.x}if(this.pv.updateY)if(this.p.y.hasExpression()&&this.p.y.expressionController)await this.p.y.expressionController.compute_expression_for_points(n,((t,e)=>{r[3*t.index()+1]=e}));else{let t;for(let e=0;e<n.length;e++)t=n[e],r[3*t.index()+1]=this.pv.y}if(this.pv.updateZ)if(this.p.z.hasExpression()&&this.p.z.expressionController)await this.p.z.expressionController.compute_expression_for_points(n,((t,e)=>{r[3*t.index()+2]=e}));else{let t;for(let e=0;e<n.length;e++)t=n[e],r[3*t.index()+2]=this.pv.z}}_invert_normals(t){var e;for(let n of t.coreObjects()){const t=null===(e=n.coreGeometry())||void 0===e?void 0:e.geometry();if(t){const e=t.attributes[Hr.NORMAL];if(e){const t=e.array;for(let e=0;e<t.length;e++)t[e]*=-1}}}}}class WZ extends pG{static type(){return\\\\\\\"null\\\\\\\"}cook(t,e){const n=t[0];return n||this.createCoreGroupFromObjects([])}}WZ.DEFAULT_PARAMS={},WZ.INPUT_CLONED_STATE=Qi.FROM_NODE;const qZ=new class extends aa{};class XZ extends gG{constructor(){super(...arguments),this.paramsConfig=qZ}static type(){return\\\\\\\"null\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(WZ.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new WZ(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const YZ=new class extends aa{constructor(){super(...arguments),this.geometry=oa.OPERATOR_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:Ki.SOP}})}};class $Z extends gG{constructor(){super(...arguments),this.paramsConfig=YZ}static type(){return\\\\\\\"objectMerge\\\\\\\"}initializeNode(){}async cook(t){const e=this.p.geometry.found_node();if(e)if(e.context()==Ki.SOP){const t=await e.compute();this.import_input(e,t)}else this.states.error.set(\\\\\\\"found node is not a geometry\\\\\\\");else this.states.error.set(`node not found at path '${this.pv.geometry}'`)}import_input(t,e){let n;null!=(n=e.coreContentCloned())?this.setCoreGroup(n):this.states.error.set(\\\\\\\"invalid target\\\\\\\")}}class JZ extends pG{static type(){return\\\\\\\"objectProperties\\\\\\\"}cook(t,e){const n=t[0];for(let t of n.objects())e.applyToChildren?t.traverse((t=>{this._update_object(t,e)})):this._update_object(t,e);return n}_update_object(t,e){e.tname&&(t.name=e.name),e.trenderOrder&&(t.renderOrder=e.renderOrder),e.tfrustumCulled&&(t.frustumCulled=e.frustumCulled),e.tmatrixAutoUpdate&&(t.matrixAutoUpdate=e.matrixAutoUpdate),e.tvisible&&(t.visible=e.visible),e.tcastShadow&&(t.castShadow=e.castShadow),e.treceiveShadow&&(t.receiveShadow=e.receiveShadow)}}JZ.DEFAULT_PARAMS={applyToChildren:!0,tname:!1,name:\\\\\\\"\\\\\\\",trenderOrder:!1,renderOrder:0,tfrustumCulled:!1,frustumCulled:!0,tmatrixAutoUpdate:!1,matrixAutoUpdate:!1,tvisible:!1,visible:!0,tcastShadow:!1,castShadow:!0,treceiveShadow:!1,receiveShadow:!0},JZ.INPUT_CLONED_STATE=Qi.FROM_NODE;const ZZ=JZ.DEFAULT_PARAMS;const QZ=new class extends aa{constructor(){super(...arguments),this.applyToChildren=oa.BOOLEAN(ZZ.applyToChildren,{separatorAfter:!0}),this.tname=oa.BOOLEAN(ZZ.tname),this.name=oa.STRING(ZZ.name,{visibleIf:{tname:!0},separatorAfter:!0}),this.trenderOrder=oa.BOOLEAN(ZZ.trenderOrder),this.renderOrder=oa.INTEGER(ZZ.renderOrder,{visibleIf:{trenderOrder:!0},range:[0,10],rangeLocked:[!1,!1],separatorAfter:!0}),this.tfrustumCulled=oa.BOOLEAN(ZZ.tfrustumCulled),this.frustumCulled=oa.BOOLEAN(ZZ.frustumCulled,{visibleIf:{tfrustumCulled:!0},separatorAfter:!0}),this.tmatrixAutoUpdate=oa.BOOLEAN(ZZ.tmatrixAutoUpdate),this.matrixAutoUpdate=oa.BOOLEAN(ZZ.matrixAutoUpdate,{visibleIf:{tmatrixAutoUpdate:!0},separatorAfter:!0}),this.tvisible=oa.BOOLEAN(ZZ.tvisible),this.visible=oa.BOOLEAN(ZZ.visible,{visibleIf:{tvisible:!0},separatorAfter:!0}),this.tcastShadow=oa.BOOLEAN(ZZ.tcastShadow),this.castShadow=oa.BOOLEAN(ZZ.castShadow,{visibleIf:{tcastShadow:!0},separatorAfter:!0}),this.treceiveShadow=oa.BOOLEAN(ZZ.treceiveShadow),this.receiveShadow=oa.BOOLEAN(ZZ.receiveShadow,{visibleIf:{treceiveShadow:!0}})}};class KZ extends gG{constructor(){super(...arguments),this.paramsConfig=QZ}static type(){return\\\\\\\"objectProperties\\\\\\\"}static displayedInputNames(){return[\\\\\\\"objects to change properties of\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(JZ.INPUT_CLONED_STATE)}async cook(t){this._operation=this._operation||new JZ(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const tQ=new class extends aa{};class eQ extends gG{constructor(){super(...arguments),this.paramsConfig=tQ,this._input_configs_by_operation_container=new WeakMap}static type(){return Il}initializeNode(){this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}set_output_operation_container(t){this._output_operation_container=t}output_operation_container(){return this._output_operation_container}add_input_config(t,e){let n=this._input_configs_by_operation_container.get(t);n||(n=new Map,this._input_configs_by_operation_container.set(t,n)),n.set(e.operation_input_index,e.node_input_index)}add_operation_container_with_path_param_resolve_required(t){this._operation_containers_requiring_resolve||(this._operation_containers_requiring_resolve=[]),this._operation_containers_requiring_resolve.push(t)}resolve_operation_containers_path_params(){if(this._operation_containers_requiring_resolve)for(let t of this._operation_containers_requiring_resolve)t.resolve_path_params(this)}async cook(t){if(this._output_operation_container){this._output_operation_container.setDirty();const e=await this._output_operation_container.compute(t,this._input_configs_by_operation_container);e&&this.setCoreGroup(e)}}}class nQ extends cf{constructor(t){super(),this._uv_name=t}set_texture_allocations_controller(t){this._texture_allocations_controller=t}handle_globals_node(t,e,n){if(!this._texture_allocations_controller)return;const i=t.io.outputs.namedOutputConnectionPointsByName(e),r=t.glVarName(e);if(this._texture_allocations_controller.variable(e)&&i){const s=i.type(),o=`${s} ${r} = ${this.read_attribute(t,s,e,n)}`;n.addBodyLines(t,[o])}else this.globals_geometry_handler=this.globals_geometry_handler||new Sf,this.globals_geometry_handler.handle_globals_node(t,e,n)}read_attribute(t,e,n,i){if(!this._texture_allocations_controller)return;const r=this._texture_allocations_controller.variable(n);if(!r)return Sf.read_attribute(t,e,n,i);{this.add_particles_sim_uv_attribute(t,i);const e=r.component(),n=r.allocation();if(n){const r=n.textureName(),s=new Af(t,Do.SAMPLER_2D,r);i.addDefinitions(t,[s]);return`texture2D( ${r}, ${this._uv_name} ).${e}`}}}add_particles_sim_uv_attribute(t,e){const n=new wf(t,Do.VEC2,nQ.UV_ATTRIB),i=new Ef(t,Do.VEC2,nQ.UV_VARYING);e.addDefinitions(t,[n,i],xf.VERTEX),e.addDefinitions(t,[i],xf.FRAGMENT),e.addBodyLines(t,[`${nQ.UV_VARYING} = ${nQ.UV_ATTRIB}`],xf.VERTEX)}}nQ.UV_ATTRIB=\\\\\\\"particles_sim_uv_attrib\\\\\\\",nQ.UV_VARYING=\\\\\\\"particles_sim_uv_varying\\\\\\\",nQ.PARTICLE_SIM_UV=\\\\\\\"particleUV\\\\\\\";class iQ{constructor(t){this.node=t,this._particles_group_objects=[],this._all_shader_names=[],this._all_uniform_names=[],this.globals_handler=new nQ(nQ.UV_VARYING)}setShadersByName(t){this._shaders_by_name=t,this._all_shader_names=[],this._all_uniform_names=[],this._shaders_by_name.forEach(((t,e)=>{this._all_shader_names.push(e),this._all_uniform_names.push(`texture_${e}`)})),this.reset_render_material()}assign_render_material(){if(this._render_material){for(let t of this._particles_group_objects){const e=t;e.geometry&&(e.material=this._render_material,fs.applyCustomMaterials(e,this._render_material),e.matrixAutoUpdate=!1,e.updateMatrix())}this._render_material.needsUpdate=!0,this.update_render_material_uniforms()}}update_render_material_uniforms(){var t;if(!this._render_material)return;let e,n;for(let i=0;i<this._all_shader_names.length;i++){n=this._all_shader_names[i],e=this._all_uniform_names[i];const r=null===(t=this.node.gpuController.getCurrentRenderTarget(n))||void 0===t?void 0:t.texture;r&&(this._render_material.uniforms[e].value=r,fs.assign_custom_uniforms(this._render_material,e,r))}}reset_render_material(){this._render_material=void 0,this._particles_group_objects=[]}material(){return this._render_material}initialized(){return null!=this._render_material}init_core_group(t){for(let e of t.objectsWithGeo())this._particles_group_objects.push(e)}async init_render_material(){var t;const e=null===(t=this.node.assemblerController)||void 0===t?void 0:t.assembler;if(this._render_material)return;this.node.p.material.isDirty()&&await this.node.p.material.compute();const n=this.node.p.material.found_node();if(n){if(e){const t=e.textureAllocationsController().toJSON(this.node.scene()),i=n.assemblerController;i&&(this.globals_handler.set_texture_allocations_controller(e.textureAllocationsController()),i.set_assembler_globals_handler(this.globals_handler)),this._texture_allocations_json&&JSON.stringify(this._texture_allocations_json)==JSON.stringify(t)||(this._texture_allocations_json=b.cloneDeep(t),i&&i.set_compilation_required_and_dirty())}const t=await n.compute();this._render_material=t.material()}else this.node.states.error.set(\\\\\\\"render material not valid\\\\\\\");if(this._render_material){const t=this._render_material.uniforms;for(let e of this._all_uniform_names){const n={value:null};t[e]=n,this._render_material&&fs.init_custom_material_uniforms(this._render_material,e,n)}}this.assign_render_material()}}var rQ,sQ=function(t,e,n){this.variables=[],this.currentTextureIndex=0;var i=w.G,r=new fr;r.matrixAutoUpdate=!1;var s=new tf.a;s.position.z=1,s.matrixAutoUpdate=!1,s.updateMatrix();var o={passThruTexture:{value:null}},a=u(\\\\\\\"uniform sampler2D passThruTexture;\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvec2 uv = gl_FragCoord.xy / resolution.xy;\\\\n\\\\n\\\\tgl_FragColor = texture2D( passThruTexture, uv );\\\\n\\\\n}\\\\n\\\\\\\",o),l=new k.a(new L(2,2),a);function c(n){n.defines.resolution=\\\\\\\"vec2( \\\\\\\"+t.toFixed(1)+\\\\\\\", \\\\\\\"+e.toFixed(1)+\\\\\\\" )\\\\\\\"}function u(t,e){var n=new F({uniforms:e=e||{},vertexShader:\\\\\\\"void main()\\\\t{\\\\n\\\\n\\\\tgl_Position = vec4( position, 1.0 );\\\\n\\\\n}\\\\n\\\\\\\",fragmentShader:t});return c(n),n}l.matrixAutoUpdate=!1,l.updateMatrix(),r.add(l),this.setDataType=function(t){return i=t,this},this.addVariable=function(t,e,n){var i={name:t,initialValueTexture:n,material:this.createShaderMaterial(e),dependencies:null,renderTargets:[],wrapS:null,wrapT:null,minFilter:w.ob,magFilter:w.ob};return this.variables.push(i),i},this.setVariableDependencies=function(t,e){t.dependencies=e},this.init=function(){if(!1===n.capabilities.isWebGL2&&!1===n.extensions.has(\\\\\\\"OES_texture_float\\\\\\\"))return\\\\\\\"No OES_texture_float support for float textures.\\\\\\\";if(0===n.capabilities.maxVertexTextures)return\\\\\\\"No support for vertex shader textures.\\\\\\\";for(var i=0;i<this.variables.length;i++){var r=this.variables[i];r.renderTargets[0]=this.createRenderTarget(t,e,r.wrapS,r.wrapT,r.minFilter,r.magFilter),r.renderTargets[1]=this.createRenderTarget(t,e,r.wrapS,r.wrapT,r.minFilter,r.magFilter),this.renderTexture(r.initialValueTexture,r.renderTargets[0]),this.renderTexture(r.initialValueTexture,r.renderTargets[1]);var s=r.material.uniforms;if(null!==r.dependencies)for(var o=0;o<r.dependencies.length;o++){var a=r.dependencies[o];if(a.name!==r.name){for(var l=!1,c=0;c<this.variables.length;c++)if(a.name===this.variables[c].name){l=!0;break}if(!l)return\\\\\\\"Variable dependency not found. Variable=\\\\\\\"+r.name+\\\\\\\", dependency=\\\\\\\"+a.name}s[a.name]={value:null}}}return this.currentTextureIndex=0,null},this.compute=function(){for(var t=this.currentTextureIndex,e=0===this.currentTextureIndex?1:0,n=0,i=this.variables.length;n<i;n++){var r=this.variables[n];if(null!==r.dependencies)for(var s=r.material.uniforms,o=0,a=r.dependencies.length;o<a;o++){var l=r.dependencies[o];s[l.name].value=l.renderTargets[t].texture}this.doRenderTarget(r.material,r.renderTargets[e])}this.currentTextureIndex=e},this.getCurrentRenderTarget=function(t){return t.renderTargets[this.currentTextureIndex]},this.getAlternateRenderTarget=function(t){return t.renderTargets[0===this.currentTextureIndex?1:0]},this.addResolutionDefine=c,this.createShaderMaterial=u,this.createRenderTarget=function(n,r,s,o,a,l){return n=n||t,r=r||e,s=s||w.n,o=o||w.n,a=a||w.ob,l=l||w.ob,new Z(n,r,{wrapS:s,wrapT:o,minFilter:a,magFilter:l,format:w.Ib,type:i,depthBuffer:!1})},this.createTexture=function(){var n=new Float32Array(t*e*4);return new mo.a(n,t,e,w.Ib,w.G)},this.renderTexture=function(t,e){o.passThruTexture.value=t,this.doRenderTarget(a,e),o.passThruTexture.value=null},this.doRenderTarget=function(t,e){var i=n.getRenderTarget();l.material=t,n.setRenderTarget(e),n.render(r,s),l.material=a,n.setRenderTarget(i)}};!function(t){t.FLOAT=\\\\\\\"float\\\\\\\",t.HALF_FLOAT=\\\\\\\"half\\\\\\\"}(rQ||(rQ={}));const oQ=[rQ.FLOAT,rQ.HALF_FLOAT],aQ={[rQ.FLOAT]:w.G,[rQ.HALF_FLOAT]:w.M};class lQ{constructor(t){this.node=t,this._simulation_restart_required=!1,this._points=[],this.variables_by_name=new Map,this._all_variables=[],this._created_textures_by_name=new Map,this._delta_time=0,this._used_textures_size=new d.a}dispose(){this._graph_node&&this._graph_node.dispose()}set_persisted_texture_allocation_controller(t){this._persisted_texture_allocations_controller=t}setShadersByName(t){this._shaders_by_name=t,this.reset_gpu_compute()}allVariables(){return this._all_variables}async init(t){this.init_particle_group_points(t),await this.create_gpu_compute()}getCurrentRenderTarget(t){var e;const n=this.variables_by_name.get(t);if(n)return null===(e=this._gpu_compute)||void 0===e?void 0:e.getCurrentRenderTarget(n)}init_particle_group_points(t){this.reset_gpu_compute(),t&&(this._particles_core_group=t,this._points=this._get_points()||[])}compute_similation_if_required(){const t=this.node.scene().frame(),e=this.node.pv.startFrame;t>=e&&(null==this._last_simulated_frame&&(this._last_simulated_frame=e-1),null==this._last_simulated_time&&(this._last_simulated_time=this.node.scene().time()),t>this._last_simulated_frame&&this._compute_simulation(t-this._last_simulated_frame))}_compute_simulation(t=1){if(!this._gpu_compute||null==this._last_simulated_time)return;this.update_simulation_material_uniforms();for(let e=0;e<t;e++)this._gpu_compute.compute();this.node.renderController.update_render_material_uniforms(),this._last_simulated_frame=this.node.scene().frame();const e=this.node.scene().time();this._delta_time=e-this._last_simulated_time,this._last_simulated_time=e}_data_type(){const t=oQ[this.node.pv.dataType];return aQ[t]}_textureNameForShaderName(t){return`texture_${t}`}async create_gpu_compute(){var t,e;if(this.node.pv.autoTexturesSize){const t=rs.nearestPower2(Math.sqrt(this._points.length));this._used_textures_size.x=Math.min(t,this.node.pv.maxTexturesSize.x),this._used_textures_size.y=Math.min(t,this.node.pv.maxTexturesSize.y)}else{if(!Object(Ln.i)(this.node.pv.texturesSize.x)||!Object(Ln.i)(this.node.pv.texturesSize.y))return void this.node.states.error.set(\\\\\\\"texture size must be a power of 2\\\\\\\");const t=this.node.pv.texturesSize.x*this.node.pv.texturesSize.y;if(this._points.length>t)return void this.node.states.error.set(`max particles is set to (${this.node.pv.texturesSize.x}x${this.node.pv.texturesSize.y}=) ${t}`);this._used_textures_size.copy(this.node.pv.texturesSize)}this._forceTimeDependent(),this._init_particles_uvs(),this.node.renderController.reset_render_material();const n=await ai.renderersController.waitForRenderer();if(n?this._renderer=n:this.node.states.error.set(\\\\\\\"no renderer found\\\\\\\"),!this._renderer)return;const i=new sQ(this._used_textures_size.x,this._used_textures_size.y,this._renderer);if(i.setDataType(this._data_type()),this._gpu_compute=i,this._gpu_compute){this._last_simulated_frame=void 0,this.variables_by_name.forEach(((t,e)=>{t.renderTargets[0].dispose(),t.renderTargets[1].dispose(),this.variables_by_name.delete(e)})),this._all_variables=[],null===(t=this._shaders_by_name)||void 0===t||t.forEach(((t,e)=>{if(this._gpu_compute){const n=this._gpu_compute.addVariable(this._textureNameForShaderName(e),t,this._created_textures_by_name.get(e));this.variables_by_name.set(e,n),this._all_variables.push(n)}})),null===(e=this.variables_by_name)||void 0===e||e.forEach(((t,e)=>{this._gpu_compute&&this._gpu_compute.setVariableDependencies(t,this._all_variables)})),this._create_texture_render_targets(),this._fill_textures(),this.create_simulation_material_uniforms();var r=this._gpu_compute.init();null!==r&&(console.error(r),this.node.states.error.set(r))}else this.node.states.error.set(\\\\\\\"failed to create the GPUComputationRenderer\\\\\\\")}_forceTimeDependent(){this._graph_node||(this._graph_node=new Ai(this.node.scene(),\\\\\\\"gpu_compute\\\\\\\"),this._graph_node.addGraphInput(this.node.scene().timeController.graphNode),this._graph_node.addPostDirtyHook(\\\\\\\"on_time_change\\\\\\\",this._on_graph_node_dirty.bind(this)))}_on_graph_node_dirty(){this.node.is_on_frame_start()?this.node.setDirty():this.compute_similation_if_required()}materials(){const t=[];return this.variables_by_name.forEach(((e,n)=>{t.push(e.material)})),t}create_simulation_material_uniforms(){const t=this.node.assemblerController,e=null==t?void 0:t.assembler;if(!e&&!this._persisted_texture_allocations_controller)return;const n=[];this.variables_by_name.forEach(((t,e)=>{n.push(t.material)}));const i=this._readonlyAllocations();for(let t of n)t.uniforms[RR.TIME]={value:this.node.scene().time()},t.uniforms[RR.DELTA_TIME]={value:this.node.scene().time()},i&&this._assignReadonlyTextures(t,i);if(e)for(let t of n)for(let n of e.param_configs())t.uniforms[n.uniform_name]=n.uniform;else{const t=this.node.persisted_config.loaded_data();if(t){const e=this.node.persisted_config.uniforms();if(e){const r=t.param_uniform_pairs;for(let t of r){const r=t[0],s=t[1],o=this.node.params.get(r),a=e[s];for(let t of n)t.uniforms[s]=a,i&&this._assignReadonlyTextures(t,i);o&&a&&o.options.setOption(\\\\\\\"callback\\\\\\\",(()=>{for(let t of n)$f.callback(o,t.uniforms[s])}))}}}}}_assignReadonlyTextures(t,e){for(let n of e){const e=n.shaderName(),i=this._created_textures_by_name.get(e);if(i){const n=this._textureNameForShaderName(e);t.uniforms[n]={value:i}}}}update_simulation_material_uniforms(){for(let t of this._all_variables)t.material.uniforms[RR.TIME].value=this.node.scene().time(),t.material.uniforms[RR.DELTA_TIME].value=this._delta_time}_init_particles_uvs(){var t=new Float32Array(2*this._points.length);let e=0;for(var n=0,i=0;i<this._used_textures_size.x;i++)for(var r=0;r<this._used_textures_size.y&&(t[e++]=r/(this._used_textures_size.x-1),t[e++]=i/(this._used_textures_size.y-1),!((n+=2)>=t.length));r++);const s=nQ.UV_ATTRIB;if(this._particles_core_group)for(let e of this._particles_core_group.coreGeometries()){const n=e.geometry(),i=e.markedAsInstance()?cX:C.a;n.setAttribute(s,new i(t,2))}}createdTexturesByName(){return this._created_textures_by_name}_fill_textures(){const t=this._textureAllocationsController();t&&this._created_textures_by_name.forEach(((e,n)=>{const i=t.allocationForShaderName(n);if(!i)return void console.warn(`no allocation found for shader ${n}`);const r=i.variables();if(!r)return void console.warn(\\\\\\\"allocation has no variables\\\\\\\");const s=e.image.data;for(let t of r){const e=t.position();let n=t.name();const i=this._points[0];if(i){if(i.hasAttrib(n)){const t=i.attribSize(n);let r=e;for(let e of this._points){if(1==t){const t=e.attribValue(n);s[r]=t}else e.attribValue(n).toArray(s,r);r+=4}}}}}))}reset_gpu_compute(){this._gpu_compute=void 0,this._simulation_restart_required=!0}set_restart_not_required(){this._simulation_restart_required=!1}reset_gpu_compute_and_set_dirty(){this.reset_gpu_compute(),this.node.setDirty()}reset_particle_groups(){this._particles_core_group=void 0}initialized(){return null!=this._particles_core_group&&null!=this._gpu_compute}_create_texture_render_targets(){this._created_textures_by_name.forEach(((t,e)=>{t.dispose()})),this._created_textures_by_name.clear(),this.variables_by_name.forEach(((t,e)=>{this._gpu_compute&&this._created_textures_by_name.set(e,this._gpu_compute.createTexture())}));const t=this._readonlyAllocations();if(t&&this._gpu_compute)for(let e of t)this._created_textures_by_name.set(e.shaderName(),this._gpu_compute.createTexture())}_textureAllocationsController(){var t;return(null===(t=this.node.assemblerController)||void 0===t?void 0:t.assembler.textureAllocationsController())||this._persisted_texture_allocations_controller}_readonlyAllocations(){var t;return null===(t=this._textureAllocationsController())||void 0===t?void 0:t.readonlyAllocations()}restart_simulation_if_required(){this._simulation_restart_required&&this._restart_simulation()}_restart_simulation(){this._last_simulated_time=void 0,this._create_texture_render_targets();this._get_points()&&(this._fill_textures(),this.variables_by_name.forEach(((t,e)=>{const n=this._created_textures_by_name.get(e);this._gpu_compute&&n&&(this._gpu_compute.renderTexture(n,t.renderTargets[0]),this._gpu_compute.renderTexture(n,t.renderTargets[1]))})))}_get_points(){if(!this._particles_core_group)return;let t=this._particles_core_group.coreGeometries();const e=t[0];if(e){const n=e.markedAsInstance(),i=[];for(let e of t)e.markedAsInstance()==n&&i.push(e);const r=[];for(let t of i)for(let e of t.points())r.push(e);return r}return[]}}class cQ{constructor(t,e){if(this._name=t,this._size=e,this._position=-1,this._readonly=!1,!t)throw\\\\\\\"TextureVariable requires a name\\\\\\\"}merge(t){var e;t.readonly()||this.setReadonly(!1),null===(e=t.graphNodeIds())||void 0===e||e.forEach(((t,e)=>{this.addGraphNodeId(e)}))}setReadonly(t){this._readonly=t}readonly(){return this._readonly}setAllocation(t){this._allocation=t}allocation(){return this._allocation}graphNodeIds(){return this._graph_node_ids}addGraphNodeId(t){this._graph_node_ids=this._graph_node_ids||new Map,this._graph_node_ids.set(t,!0)}name(){return this._name}size(){return this._size}setPosition(t){this._position=t}position(){return this._position}component(){return\\\\\\\"xyzw\\\\\\\".split(\\\\\\\"\\\\\\\").splice(this._position,this._size).join(\\\\\\\"\\\\\\\")}static fromJSON(t){return new cQ(t.name,t.size)}toJSON(t){const e=[];return this._graph_node_ids&&this._graph_node_ids.forEach(((n,i)=>{const r=t.graph.nodeFromId(i);if(r){const t=r.path();t&&e.push(t)}})),{name:this.name(),size:this.size(),nodes:e}}}class uQ{constructor(){this._size=0}addVariable(t){this._variables=this._variables||[],this._variables.push(t),t.setPosition(this._size),t.setAllocation(this),this._size+=t.size()}hasSpaceForVariable(t){return this._size+t.size()<=4}shaderName(){var t;return((null===(t=this.variables())||void 0===t?void 0:t.map((t=>t.name())))||[\\\\\\\"no_variables_allocated\\\\\\\"]).join(\\\\\\\"_SEPARATOR_\\\\\\\")}textureName(){return`texture_${this.shaderName()}`}variables(){return this._variables}variablesForInputNode(t){var e;return null===(e=this._variables)||void 0===e?void 0:e.filter((e=>{var n;return(null===(n=e.graphNodeIds())||void 0===n?void 0:n.has(t.graphNodeId()))||!1}))}inputNamesForNode(t){const e=this.variablesForInputNode(t);if(e)return t.type()==ir.ATTRIBUTE?[gf.INPUT_NAME]:e.map((t=>t.name()))}variable(t){if(this._variables)for(let e of this._variables)if(e.name()==t)return e}static fromJSON(t){const e=new uQ;for(let n of t){const t=cQ.fromJSON(n);e.addVariable(t)}return e}toJSON(t){return this._variables?this._variables.map((e=>e.toJSON(t))):[]}}const hQ=[\\\\\\\"position\\\\\\\",\\\\\\\"normal\\\\\\\",\\\\\\\"color\\\\\\\",\\\\\\\"uv\\\\\\\"];class dQ{constructor(){this._writableAllocations=[],this._readonlyAllocations=[]}static _sortNodes(t){const e=t.filter((t=>t.type()==UI.type())),n=t.filter((t=>t.type()!=UI.type())),i=n.map((t=>t.name())).sort(),r=new Map;for(let t of n)r.set(t.name(),t);for(let t of i){const n=r.get(t);n&&e.push(n)}return e}allocateConnectionsFromRootNodes(t,e){const n=[];t=dQ._sortNodes(t),e=dQ._sortNodes(e);for(let e of t){const t=e.graphNodeId();switch(e.type()){case UI.type():for(let i of e.io.inputs.namedInputConnectionPoints()){if(e.io.inputs.named_input(i.name())){const e=new cQ(i.name(),Go[i.type()]);e.addGraphNodeId(t),n.push(e)}}break;case gf.type():{const i=e,r=i.connected_input_node(),s=i.connected_input_connection_point();if(r&&s){const e=new cQ(i.attribute_name,Go[s.type()]);e.addGraphNodeId(t),n.push(e)}break}}}for(let t of e){const e=t.graphNodeId();switch(t.type()){case HP.type():{const i=t;for(let t of i.io.outputs.used_output_names()){if(hQ.includes(t)){const r=i.io.outputs.namedOutputConnectionPointsByName(t);if(r){const i=r.type(),s=new cQ(t,Go[i]);s.addGraphNodeId(e),n.push(s)}}}break}case gf.type():{const i=t,r=i.output_connection_point();if(r){const t=new cQ(i.attribute_name,Go[r.type()]);i.isExporting()||t.setReadonly(!0),t.addGraphNodeId(e),n.push(t)}break}}}this._allocateVariables(n)}_allocateVariables(t){const e=f.sortBy(t,(t=>-t.size())),n=this._ensureVariablesAreUnique(e);for(let t of n)t.readonly()?this._allocateVariable(t,this._readonlyAllocations):this._allocateVariable(t,this._writableAllocations)}_ensureVariablesAreUnique(t){const e=new Map;for(let n of t)u.pushOnArrayAtEntry(e,n.name(),n);const n=[];return e.forEach(((t,e)=>{const i=t[0];n.push(i);for(let e=1;e<t.length;e++){const n=t[e];i.merge(n)}})),n}_allocateVariable(t,e){let n=this.hasVariable(t.name());if(n)throw\\\\\\\"no variable should be allocated since they have been made unique before\\\\\\\";if(!n)for(let i of e)!n&&i.hasSpaceForVariable(t)&&(i.addVariable(t),n=!0);if(!n){const n=new uQ;e.push(n),n.addVariable(t)}}_addWritableAllocation(t){this._writableAllocations.push(t)}_addReadonlyAllocation(t){this._readonlyAllocations.push(t)}readonlyAllocations(){return this._readonlyAllocations}shaderNames(){const t=this._writableAllocations.map((t=>t.shaderName()));return f.uniq(t)}createShaderConfigs(){return[]}allocationForShaderName(t){const e=this._writableAllocations.filter((e=>e.shaderName()==t))[0];return e||this._readonlyAllocations.filter((e=>e.shaderName()==t))[0]}inputNamesForShaderName(t,e){const n=this.allocationForShaderName(e);if(n)return n.inputNamesForNode(t)}variable(t){for(let e of this._writableAllocations){const n=e.variable(t);if(n)return n}for(let e of this._readonlyAllocations){const n=e.variable(t);if(n)return n}}variables(){const t=this._writableAllocations.map((t=>t.variables()||[])).flat(),e=this._writableAllocations.map((t=>t.variables()||[])).flat();return t.concat(e)}hasVariable(t){return this.variables().map((t=>t.name())).includes(t)}static fromJSON(t){const e=new dQ;for(let n of t.writable){const t=n[Object.keys(n)[0]],i=uQ.fromJSON(t);e._addWritableAllocation(i)}for(let n of t.readonly){const t=n[Object.keys(n)[0]],i=uQ.fromJSON(t);e._addReadonlyAllocation(i)}return e}toJSON(t){return{writable:this._writableAllocations.map((e=>({[e.shaderName()]:e.toJSON(t)}))),readonly:this._readonlyAllocations.map((e=>({[e.shaderName()]:e.toJSON(t)})))}}print(t){console.warn(JSON.stringify(this.toJSON(t),[\\\\\\\"\\\\\\\"],2))}}class pQ extends Xf{constructor(t){super(t),this.node=t}toJSON(){const t=this.node.assemblerController;if(!t)return;const e={};this.node.shaders_by_name().forEach(((t,n)=>{e[n]=t}));const n=t.assembler.textureAllocationsController().toJSON(this.node.scene()),i=[],r=new F,s=t.assembler.param_configs();for(let t of s)i.push([t.name(),t.uniform_name]),r.uniforms[t.uniform_name]=t.uniform;const o=this._materialToJson(r,{node:this.node,suffix:\\\\\\\"main\\\\\\\"});return{shaders_by_name:e,texture_allocations:n,param_uniform_pairs:i,uniforms_owner:o||{}}}load(t){ai.playerMode()&&(this._loaded_data=t,this.node.init_with_persisted_config())}loaded_data(){return this._loaded_data}shaders_by_name(){if(this._loaded_data){const t=new Map,e=Object.keys(this._loaded_data.shaders_by_name);for(let n of e)t.set(n,this._loaded_data.shaders_by_name[n]);return t}}texture_allocations_controller(){if(this._loaded_data)return dQ.fromJSON(this._loaded_data.texture_allocations)}uniforms(){if(this._loaded_data){const t=this._loadMaterial(this._loaded_data.uniforms_owner);return(null==t?void 0:t.uniforms)||{}}}}const _Q=new class extends aa{constructor(){super(...arguments),this.startFrame=oa.FLOAT(Ml.START_FRAME,{range:[0,1e3],rangeLocked:[!0,!1]}),this.autoTexturesSize=oa.BOOLEAN(1),this.maxTexturesSize=oa.VECTOR2([1024,1024],{visibleIf:{autoTexturesSize:1}}),this.texturesSize=oa.VECTOR2([64,64],{visibleIf:{autoTexturesSize:0}}),this.dataType=oa.INTEGER(0,{menu:{entries:oQ.map(((t,e)=>({value:e,name:t})))}}),this.reset=oa.BUTTON(null,{callback:(t,e)=>{mQ.PARAM_CALLBACK_reset(t)}}),this.material=oa.OPERATOR_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:Ki.MAT},dependentOnFoundNode:!1})}};class mQ extends gG{constructor(){super(...arguments),this.paramsConfig=_Q,this._assembler_controller=this._create_assembler_controller(),this.persisted_config=new pQ(this),this.globals_handler=new nQ(nQ.PARTICLE_SIM_UV),this._shaders_by_name=new Map,this.gpuController=new lQ(this),this.renderController=new iQ(this),this._reset_material_if_dirty_bound=this._reset_material_if_dirty.bind(this),this._children_controller_context=Ki.GL}static type(){return\\\\\\\"particlesSystemGpu\\\\\\\"}dispose(){super.dispose(),this.gpuController.dispose()}get assemblerController(){return this._assembler_controller}usedAssembler(){return Hn.GL_PARTICLES}_create_assembler_controller(){return ai.assemblersRegister.assembler(this,this.usedAssembler())}shaders_by_name(){return this._shaders_by_name}static require_webgl2(){return!0}static PARAM_CALLBACK_reset(t){t.PARAM_CALLBACK_reset()}PARAM_CALLBACK_reset(){this.gpuController.reset_gpu_compute_and_set_dirty()}static displayedInputNames(){return[\\\\\\\"points to emit particles from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.NEVER),this.addPostDirtyHook(\\\\\\\"_reset_material_if_dirty\\\\\\\",this._reset_material_if_dirty_bound)}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}childrenAllowed(){return this.assemblerController?super.childrenAllowed():(this.scene().markAsReadOnly(this),!1)}async _reset_material_if_dirty(){this.p.material.isDirty()&&(this.renderController.reset_render_material(),this.is_on_frame_start()||await this.renderController.init_render_material())}is_on_frame_start(){return this.scene().frame()==this.pv.startFrame}async cook(t){this.gpuController.set_restart_not_required();const e=t[0];this.compileIfRequired(),this.is_on_frame_start()&&this.gpuController.reset_particle_groups(),this.gpuController.initialized()||await this.gpuController.init(e),this.renderController.initialized()||(this.renderController.init_core_group(e),await this.renderController.init_render_material()),this.gpuController.restart_simulation_if_required(),this.gpuController.compute_similation_if_required(),this.is_on_frame_start()?this.setCoreGroup(e):this.cookController.endCook()}async compileIfRequired(){var t;(null===(t=this.assemblerController)||void 0===t?void 0:t.compileRequired())&&await this.run_assembler()}async run_assembler(){const t=this.assemblerController;if(!t)return;const e=this._find_export_nodes();if(e.length>0){const n=e;t.set_assembler_globals_handler(this.globals_handler),t.assembler.set_root_nodes(n),t.assembler.compile(),t.post_compile()}const n=t.assembler.shaders_by_name();this._setShaderNames(n)}_setShaderNames(t){this._shaders_by_name=t,this.gpuController.setShadersByName(this._shaders_by_name),this.renderController.setShadersByName(this._shaders_by_name),this.gpuController.reset_gpu_compute(),this.gpuController.reset_particle_groups()}init_with_persisted_config(){const t=this.persisted_config.shaders_by_name(),e=this.persisted_config.texture_allocations_controller();t&&e&&(this._setShaderNames(t),this.gpuController.set_persisted_texture_allocation_controller(e))}_find_export_nodes(){const t=Of.findAttributeExportNodes(this),e=Of.findOutputNodes(this);if(e.length>1)return this.states.error.set(\\\\\\\"only one output node is allowed\\\\\\\"),[];const n=e[0];return n&&t.push(n),t}}class fQ extends pG{static type(){return\\\\\\\"peak\\\\\\\"}cook(t,e){const n=t[0];let i,r;for(let t of n.objects())t.traverse((t=>{let n;if(null!=(n=t.geometry)){for(r of(i=new ps(n),i.points())){const t=r.normal(),n=r.position().clone().add(t.multiplyScalar(e.amount));r.setPosition(n)}i.geometry().getAttribute(\\\\\\\"position\\\\\\\").needsUpdate=!0}}));return t[0]}}fQ.DEFAULT_PARAMS={amount:0};const gQ=fQ.DEFAULT_PARAMS;const vQ=new class extends aa{constructor(){super(...arguments),this.amount=oa.FLOAT(gQ.amount,{range:[-1,1]})}};class yQ extends gG{constructor(){super(...arguments),this.paramsConfig=vQ}static type(){return\\\\\\\"peak\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}cook(t){this._operation=this._operation||new fQ(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const xQ=new p.a(0,0,1),bQ=new p.a(0,0,1),wQ=new p.a(0,1,0);class TQ extends pG{constructor(){super(...arguments),this._core_transform=new Mz,this._size=new p.a,this._center=new p.a,this._segmentsCount=new d.a(1,1)}static type(){return\\\\\\\"plane\\\\\\\"}cook(t,e){const n=t[0];return n?this._cook_with_input(n,e):this._cook_without_input(e)}_cook_without_input(t){const e=this._create_plane(t.size,t);this._core_transform.rotate_geometry(e,xQ,t.direction);const n=this._core_transform.translation_matrix(t.center);return e.applyMatrix4(n),this.createCoreGroupFromGeometry(e)}_cook_with_input(t,e){const n=t.boundingBox();n.getSize(this._size),n.getCenter(this._center);const i=new d.a(this._size.x,this._size.z),r=this._create_plane(i,e);this._core_transform.rotate_geometry(r,bQ,wQ);const s=this._core_transform.translation_matrix(this._center);return r.applyMatrix4(s),this.createCoreGroupFromGeometry(r)}_create_plane(t,e){return t=t.clone(),e.useSegmentsCount?(this._segmentsCount.x=Math.floor(e.segments.x),this._segmentsCount.y=Math.floor(e.segments.y)):e.stepSize>0&&(this._segmentsCount.x=Math.floor(t.x/e.stepSize),this._segmentsCount.y=Math.floor(t.y/e.stepSize),t.x=this._segmentsCount.x*e.stepSize,t.y=this._segmentsCount.y*e.stepSize),new L(t.x,t.y,this._segmentsCount.x,this._segmentsCount.y)}}TQ.DEFAULT_PARAMS={size:new d.a(1,1),useSegmentsCount:!1,stepSize:1,segments:new d.a(1,1),direction:new p.a(0,1,0),center:new p.a(0,0,0)},TQ.INPUT_CLONED_STATE=Qi.NEVER;const AQ=TQ.DEFAULT_PARAMS;const EQ=new class extends aa{constructor(){super(...arguments),this.size=oa.VECTOR2(AQ.size),this.useSegmentsCount=oa.BOOLEAN(AQ.useSegmentsCount),this.stepSize=oa.FLOAT(AQ.stepSize,{range:[.001,1],rangeLocked:[!1,!1],visibleIf:{useSegmentsCount:0}}),this.segments=oa.VECTOR2(AQ.segments,{visibleIf:{useSegmentsCount:1}}),this.direction=oa.VECTOR3(AQ.direction),this.center=oa.VECTOR3(AQ.center)}};class MQ extends gG{constructor(){super(...arguments),this.paramsConfig=EQ}static type(){return\\\\\\\"plane\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to create plane from (optional)\\\\\\\"]}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(TQ.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new TQ(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const SQ=\\\\\\\"position\\\\\\\";const CQ=new class extends aa{constructor(){super(...arguments),this.updateX=oa.BOOLEAN(0),this.x=oa.FLOAT(\\\\\\\"@P.x\\\\\\\",{visibleIf:{updateX:1},expression:{forEntities:!0}}),this.updateY=oa.BOOLEAN(0),this.y=oa.FLOAT(\\\\\\\"@P.y\\\\\\\",{visibleIf:{updateY:1},expression:{forEntities:!0}}),this.updateZ=oa.BOOLEAN(0),this.z=oa.FLOAT(\\\\\\\"@P.z\\\\\\\",{visibleIf:{updateZ:1},expression:{forEntities:!0}}),this.updateNormals=oa.BOOLEAN(1)}};class NQ extends gG{constructor(){super(...arguments),this.paramsConfig=CQ,this._x_arrays_by_geometry_uuid=new Map,this._y_arrays_by_geometry_uuid=new Map,this._z_arrays_by_geometry_uuid=new Map}static type(){return\\\\\\\"point\\\\\\\"}static displayedInputNames(){return[\\\\\\\"points to move\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}async cook(t){const e=t[0];await this._eval_expressions_for_core_group(e)}async _eval_expressions_for_core_group(t){const e=t.coreObjects();for(let t=0;t<e.length;t++)await this._eval_expressions_for_core_object(e[t]);this.pv.updateNormals&&t.computeVertexNormals();const n=t.geometries();for(let t of n)t.computeBoundingBox();if(!this.io.inputs.cloneRequired(0)){const e=t.geometries();for(let t of e){t.getAttribute(SQ).needsUpdate=!0}}this.setCoreGroup(t)}async _eval_expressions_for_core_object(t){const e=t.object().geometry,n=t.points(),i=e.getAttribute(SQ).array,r=await this._update_from_param(e,i,n,this.p.updateX,this.p.x,this.pv.x,this._x_arrays_by_geometry_uuid,0),s=await this._update_from_param(e,i,n,this.p.updateY,this.p.y,this.pv.y,this._y_arrays_by_geometry_uuid,1),o=await this._update_from_param(e,i,n,this.p.updateZ,this.p.z,this.pv.z,this._z_arrays_by_geometry_uuid,2);r&&this._commit_tmp_values(r,i,0),s&&this._commit_tmp_values(s,i,1),o&&this._commit_tmp_values(o,i,2)}async _update_from_param(t,e,n,i,r,s,o,a){const l=i,c=r;let u=this._init_array_if_required(t,o,n.length,a);if(l.value)if(c.hasExpression()&&c.expressionController)await c.expressionController.compute_expression_for_points(n,((t,e)=>{u[t.index()]=e}));else{let t;for(let e=0;e<n.length;e++)t=n[e],u[t.index()]=s}return u}_init_array_if_required(t,e,n,i){const r=t.uuid,s=e.get(r);if(s){if(s.length<n){const s=this._array_for_component(t,n,i);return e.set(r,s),s}return s}{const s=this._array_for_component(t,n,i);return e.set(r,s),s}}_array_for_component(t,e,n){const i=new Array(e),r=t.getAttribute(SQ).array;for(let t=0;t<i.length;t++)i[t]=r[3*t+n];return i}_commit_tmp_values(t,e,n){for(let i=0;i<t.length;i++)e[3*i+n]=t[i]}}class LQ extends pG{static type(){return\\\\\\\"pointLight\\\\\\\"}cook(t,e){const n=new sU.a;return n.matrixAutoUpdate=!1,n.castShadow=!0,n.shadow.bias=-.001,n.shadow.mapSize.x=1024,n.shadow.mapSize.y=1024,n.shadow.camera.near=.1,n.color=e.color,n.intensity=e.intensity,n.decay=e.decay,n.distance=e.distance,n.castShadow=e.castShadows,n.shadow.mapSize.copy(e.shadowRes),n.shadow.camera.near=e.shadowNear,n.shadow.camera.far=e.shadowFar,n.shadow.bias=e.shadowBias,this.createCoreGroupFromObjects([n])}}LQ.DEFAULT_PARAMS={color:new D.a(1,1,1),intensity:1,decay:.1,distance:100,castShadows:!1,shadowRes:new d.a(1024,1024),shadowBias:.001,shadowNear:1,shadowFar:100},LQ.INPUT_CLONED_STATE=Qi.NEVER;const OQ=LQ.DEFAULT_PARAMS;const RQ=new class extends aa{constructor(){super(...arguments),this.light=oa.FOLDER(),this.color=oa.COLOR(OQ.color.toArray(),{conversion:so.SRGB_TO_LINEAR}),this.intensity=oa.FLOAT(OQ.intensity),this.decay=oa.FLOAT(OQ.decay),this.distance=oa.FLOAT(OQ.distance),this.castShadows=oa.BOOLEAN(OQ.castShadows),this.shadowRes=oa.VECTOR2(OQ.shadowRes.toArray(),{visibleIf:{castShadows:1}}),this.shadowBias=oa.FLOAT(OQ.shadowBias,{visibleIf:{castShadows:1}}),this.shadowNear=oa.FLOAT(OQ.shadowNear,{visibleIf:{castShadows:1}}),this.shadowFar=oa.FLOAT(OQ.shadowFar,{visibleIf:{castShadows:1}})}};class PQ extends gG{constructor(){super(...arguments),this.paramsConfig=RQ}static type(){return\\\\\\\"pointLight\\\\\\\"}initializeNode(){this.io.inputs.setCount(0)}cook(t){this._operation=this._operation||new LQ(this._scene,this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const IQ=new p.a(0,1,0),FQ=new p.a(-1,0,0);class DQ extends pG{constructor(){super(...arguments),this._centerMatrix=new A.a,this._longitudeMatrix=new A.a,this._latitudeMatrix=new A.a,this._depthMatrix=new A.a,this._fullMatrix=new A.a,this._decomposed={t:new p.a,q:new au.a,s:new p.a}}static type(){return\\\\\\\"polarTransform\\\\\\\"}cook(t,e){const n=t[0].objects(),i=this.matrix(e);return this._apply_transform(n,e,i),t[0]}_apply_transform(t,e,n){const i=wz[e.applyOn];switch(i){case yz.GEOMETRIES:return this._apply_matrix_to_geometries(t,n);case yz.OBJECTS:return this._apply_matrix_to_objects(t,n)}ar.unreachable(i)}_apply_matrix_to_geometries(t,e){for(let n of t){const t=n.geometry;t&&t.applyMatrix4(e)}}_apply_matrix_to_objects(t,e){for(let n of t)e.decompose(this._decomposed.t,this._decomposed.q,this._decomposed.s),n.position.copy(this._decomposed.t),n.quaternion.copy(this._decomposed.q),n.scale.copy(this._decomposed.s),n.updateMatrix()}matrix(t){return this._centerMatrix.identity(),this._longitudeMatrix.identity(),this._latitudeMatrix.identity(),this._depthMatrix.identity(),this._centerMatrix.makeTranslation(t.center.x,t.center.y,t.center.z),this._longitudeMatrix.makeRotationAxis(IQ,Object(Ln.e)(t.longitude)),this._latitudeMatrix.makeRotationAxis(FQ,Object(Ln.e)(t.latitude)),this._depthMatrix.makeTranslation(0,0,t.depth),this._fullMatrix.copy(this._centerMatrix).multiply(this._longitudeMatrix).multiply(this._latitudeMatrix).multiply(this._depthMatrix),this._fullMatrix}}DQ.DEFAULT_PARAMS={applyOn:wz.indexOf(yz.GEOMETRIES),center:new p.a(0,0,0),longitude:0,latitude:0,depth:1},DQ.INPUT_CLONED_STATE=Qi.FROM_NODE;const kQ=DQ.DEFAULT_PARAMS;const BQ=new class extends aa{constructor(){super(...arguments),this.applyOn=oa.INTEGER(kQ.applyOn,{menu:{entries:wz.map(((t,e)=>({name:t,value:e})))}}),this.center=oa.VECTOR3(kQ.center.toArray()),this.longitude=oa.FLOAT(kQ.longitude,{range:[0,360]}),this.latitude=oa.FLOAT(kQ.latitude,{range:[-180,180]}),this.depth=oa.FLOAT(kQ.depth,{range:[0,10]})}};class zQ extends gG{constructor(){super(...arguments),this.paramsConfig=BQ}static type(){return\\\\\\\"polarTransform\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometries or objects to transform\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(DQ.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new DQ(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class UQ{static accumulated_curve_point_indices(t){let e=[];const n=[];let i,r=null;for(let s=0;s<t.length;s++)if(s%2==1){i=t[s];const o=t[s-1];null==r||o===r?(0===e.length&&e.push(o),e.push(i),r=i):(n.push(e),e=[o,i],r=i)}return n.push(e),n}static create_line_segment_geometry(t,e,n,i){const r=[],s={};n.forEach((t=>{s[t]=[]})),e.forEach(((e,o)=>{const a=t[e];n.forEach((t=>{const e=a.attribValue(t);let n;n=i[t]>1?e.toArray():[e],n.forEach((e=>{s[t].push(e)}))})),o>0&&(r.push(o-1),r.push(o))}));const o=new S.a;return n.forEach((t=>{const e=i[t],n=s[t];o.setAttribute(t,new C.c(n,e))})),o.setIndex(r),o}static line_segment_to_geometries(t){var e;const n=[],i=new ps(t),r=i.attribNames(),s=i.points(),o=(null===(e=t.getIndex())||void 0===e?void 0:e.array)||[],a=this.accumulated_curve_point_indices(o);if(a.length>0){const e=i.attribSizes();a.forEach(((i,o)=>{t=this.create_line_segment_geometry(s,i,r,e),n.push(t)}))}return n}}class GQ{constructor(t,e,n){this.geometry=t,this.geometry1=e,this.geometry0=n}process(){const t=new ps(this.geometry0),e=new ps(this.geometry1),n=t.segments(),i=e.segments();if(0===n.length||0===i.length)return;const r=n.length<i.length?[t,e]:[e,t],s=r[0],o=r[1],a=s.segments(),l=o.segments(),c=s.points(),u=o.points(),h=c.length,d=c.concat(u),p=[];a.forEach(((t,e)=>{const n=l[e];p.push(t[0]),p.push(t[1]),p.push(n[0]+h),p.push(t[1]),p.push(n[1]+h),p.push(n[0]+h)}));f.intersection(s.attribNames(),o.attribNames()).forEach((t=>{const e=s.attribSize(t);let n,i=d.map((e=>e.attribValue(t)));n=1==e?i:i.map((t=>t.toArray())).flat(),this.geometry.setAttribute(t,new C.c(n,e))})),this.geometry.setIndex(p),this.geometry.computeVertexNormals()}}const VQ=new p.a(0,0,0),HQ=new p.a(1,1,1);const jQ=new class extends aa{constructor(){super(...arguments),this.radius=oa.FLOAT(1),this.segmentsRadial=oa.INTEGER(8,{range:[3,20],rangeLocked:[!0,!1]}),this.closed=oa.BOOLEAN(0)}};class WQ extends gG{constructor(){super(...arguments),this.paramsConfig=jQ,this._core_transform=new Mz,this._geometries=[]}static type(){return\\\\\\\"polywire\\\\\\\"}static displayedInputNames(){return[\\\\\\\"lines to create tubes from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.NEVER)}cook(t){const e=t[0];this._geometries=[];for(let t of e.objects())t instanceof Tr.a&&this._create_tube(t);const n=ps.mergeGeometries(this._geometries);for(let t of this._geometries)t.dispose();if(n){const t=this.createObject(n,Sr.MESH);this.setObject(t)}else this.setObjects([])}_create_tube(t){var e;const n=t.geometry,i=new ps(n).points(),r=null===(e=n.getIndex())||void 0===e?void 0:e.array,s=UQ.accumulated_curve_point_indices(r);for(let t of s){const e=t.map((t=>i[t]));this._create_tube_from_points(e)}}_create_tube_from_points(t){if(t.length<=1)return;const e=t.map((t=>t.attribValue(\\\\\\\"position\\\\\\\"))),n=wY.create(this.pv.radius,this.pv.segmentsRadial),i=[];for(let t of e){const e=t,r=this._core_transform.matrix(e,VQ,HQ,1,Ez),s=n.clone();s.applyMatrix4(r),i.push(s)}for(let t=0;t<i.length;t++)if(t>0){const e=i[t],n=i[t-1],r=this._skin(n,e);this._geometries.push(r)}}_skin(t,e){const n=new S.a;return new GQ(n,t,e).process(),n}}const qQ=\\\\\\\"dist\\\\\\\";class XQ extends pG{constructor(){super(...arguments),this._matDoubleSideTmpSetter=new z$,this._raycaster=new uL,this._pointPos=new p.a,this._pointNormal=new p.a}static type(){return\\\\\\\"ray\\\\\\\"}cook(t,e){const n=t[0],i=t[1];return this._ray(n,i,e)}_ray(t,e,n){let i,r;this._matDoubleSideTmpSetter.setCoreGroupMaterialDoubleSided(e),n.addDistAttribute&&(t.hasAttrib(qQ)||t.addNumericVertexAttrib(qQ,1,-1));const s=t.points();for(let t of s)if(t.getPosition(this._pointPos),i=n.direction,n.useNormals&&(t.getNormal(this._pointNormal),i=this._pointNormal),this._raycaster.set(this._pointPos,i),r=this._raycaster.intersectObjects(e.objects(),!0)[0],r){if(n.transformPoints&&t.setPosition(r.point),n.addDistAttribute){const e=this._pointPos.distanceTo(r.point);console.log(e),t.setAttribValue(qQ,e)}n.transferFaceNormals&&r.face&&t.setNormal(r.face.normal)}return this._matDoubleSideTmpSetter.restoreMaterialSideProperty(e),t}}XQ.DEFAULT_PARAMS={useNormals:!0,direction:new p.a(0,-1,0),transformPoints:!0,transferFaceNormals:!0,addDistAttribute:!1},XQ.INPUT_CLONED_STATE=[Qi.FROM_NODE,Qi.ALWAYS];const YQ=XQ.DEFAULT_PARAMS;const $Q=new class extends aa{constructor(){super(...arguments),this.useNormals=oa.BOOLEAN(YQ.useNormals),this.direction=oa.VECTOR3(YQ.direction.toArray(),{visibleIf:{useNormals:0}}),this.transformPoints=oa.BOOLEAN(YQ.transformPoints),this.transferFaceNormals=oa.BOOLEAN(YQ.transferFaceNormals),this.addDistAttribute=oa.BOOLEAN(YQ.addDistAttribute)}};class JQ extends gG{constructor(){super(...arguments),this.paramsConfig=$Q}static type(){return\\\\\\\"ray\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to move\\\\\\\",\\\\\\\"geometry to ray onto\\\\\\\"]}initializeNode(){this.io.inputs.setCount(2),this.io.inputs.initInputsClonedState([Qi.FROM_NODE,Qi.ALWAYS])}cook(t){this._operation=this._operation||new XQ(this._scene,this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const ZQ={color:{value:null},tDiffuse:{value:null},textureMatrix:{value:null},opacity:{value:.5}},QQ=\\\\\\\"uniform mat4 textureMatrix;\\\\nvarying vec4 vUv;\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvUv = textureMatrix * vec4( position, 1.0 );\\\\n\\\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\\\n\\\\n}\\\\\\\",KQ=\\\\\\\"uniform vec3 color;\\\\nuniform sampler2D tDiffuse;\\\\nvarying vec4 vUv;\\\\nuniform float opacity;\\\\n\\\\nfloat blendOverlay( float base, float blend ) {\\\\n\\\\n\\\\treturn( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );\\\\n\\\\n}\\\\n\\\\nvec3 blendOverlay( vec3 base, vec3 blend ) {\\\\n\\\\n\\\\treturn vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );\\\\n\\\\n}\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvec4 base = texture2DProj( tDiffuse, vUv );\\\\n\\\\tgl_FragColor = vec4( blendOverlay( base.rgb, color ), opacity );\\\\n\\\\n}\\\\\\\",tK={minFilter:w.V,magFilter:w.V,format:w.ic};class eK extends k.a{constructor(t,e){super(),this.geometry=t,this._options=e,this.type=\\\\\\\"Reflector\\\\\\\",this.reflectorPlane=new X.a,this.normal=new p.a,this.reflectorWorldPosition=new p.a,this.cameraWorldPosition=new p.a,this.rotationMatrix=new A.a,this.lookAtPosition=new p.a(0,0,-1),this.clipPlane=new _.a,this.view=new p.a,this.target=new p.a,this.q=new _.a,this.textureMatrix=new A.a,this.virtualCamera=new K.a,this.onBeforeRender=this._onBeforeRender.bind(this),this._onWindowResizeBound=this._onWindowResize.bind(this);const{width:n,height:i}=this._getRendererSize(this._options.renderer);this.renderTarget=new Z(n,i,tK),Object(Ln.i)(n)&&Object(Ln.i)(i)||(this.renderTarget.texture.generateMipmaps=!1),this._coreRenderBlur=new kU(new d.a(n,i)),this.material=new F({uniforms:I.clone(ZQ),fragmentShader:KQ,vertexShader:QQ}),this.material.uniforms.tDiffuse.value=this.renderTarget.texture,this.material.uniforms.color.value=this._options.color,this.material.uniforms.textureMatrix.value=this.textureMatrix,this.material.uniforms.opacity.value=this._options.opacity,this.material.transparent=this._options.opacity<1,this._addWindowResizeEvent()}_addWindowResizeEvent(){window.addEventListener(\\\\\\\"resize\\\\\\\",this._onWindowResizeBound.bind(this),!1)}_removeWindowResizeEvent(){window.removeEventListener(\\\\\\\"resize\\\\\\\",this._onWindowResizeBound.bind(this),!1)}_onWindowResize(){this.traverseAncestors((t=>{t.parent||t.uuid!=this._options.scene.uuid&&this._removeWindowResizeEvent()}));const{width:t,height:e}=this._getRendererSize(this._options.renderer);this.renderTarget.setSize(t,e),this._coreRenderBlur.setSize(t,e)}_getRendererSize(t){const e=t.domElement;return{width:e.width*this._options.pixelRatio,height:e.height*this._options.pixelRatio}}_onBeforeRender(t,e,n,i,r,s){if(!this._options.active)return;const o=n;if(this.reflectorWorldPosition.setFromMatrixPosition(this.matrixWorld),this.cameraWorldPosition.setFromMatrixPosition(o.matrixWorld),this.rotationMatrix.extractRotation(this.matrixWorld),this.normal.set(0,0,1),this.normal.applyMatrix4(this.rotationMatrix),this.view.subVectors(this.reflectorWorldPosition,this.cameraWorldPosition),!(this.view.dot(this.normal)>0)){this.view.reflect(this.normal).negate(),this.view.add(this.reflectorWorldPosition),this.rotationMatrix.extractRotation(o.matrixWorld),this.lookAtPosition.set(0,0,-1),this.lookAtPosition.applyMatrix4(this.rotationMatrix),this.lookAtPosition.add(this.cameraWorldPosition),this.target.subVectors(this.reflectorWorldPosition,this.lookAtPosition),this.target.reflect(this.normal).negate(),this.target.add(this.reflectorWorldPosition),this.virtualCamera.position.copy(this.view),this.virtualCamera.up.set(0,1,0),this.virtualCamera.up.applyMatrix4(this.rotationMatrix),this.virtualCamera.up.reflect(this.normal),this.virtualCamera.lookAt(this.target),this.virtualCamera.far=o.far,this.virtualCamera.updateMatrixWorld(),this.virtualCamera.projectionMatrix.copy(o.projectionMatrix),this.textureMatrix.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),this.textureMatrix.multiply(this.virtualCamera.projectionMatrix),this.textureMatrix.multiply(this.virtualCamera.matrixWorldInverse),this.textureMatrix.multiply(this.matrixWorld),this.reflectorPlane.setFromNormalAndCoplanarPoint(this.normal,this.reflectorWorldPosition),this.reflectorPlane.applyMatrix4(this.virtualCamera.matrixWorldInverse),this.clipPlane.set(this.reflectorPlane.normal.x,this.reflectorPlane.normal.y,this.reflectorPlane.normal.z,this.reflectorPlane.constant);var a=this.virtualCamera.projectionMatrix;this.q.x=(Math.sign(this.clipPlane.x)+a.elements[8])/a.elements[0],this.q.y=(Math.sign(this.clipPlane.y)+a.elements[9])/a.elements[5],this.q.z=-1,this.q.w=(1+a.elements[10])/a.elements[14],this.clipPlane.multiplyScalar(2/this.clipPlane.dot(this.q)),a.elements[2]=this.clipPlane.x,a.elements[6]=this.clipPlane.y,a.elements[10]=this.clipPlane.z+1-this._options.clipBias,a.elements[14]=this.clipPlane.w,this.renderTarget.texture.encoding=t.outputEncoding,this.visible=!1;var l=t.getRenderTarget(),c=t.xr.enabled,u=t.shadowMap.autoUpdate;if(t.xr.enabled=!1,t.shadowMap.autoUpdate=!1,t.setRenderTarget(this.renderTarget),t.state.buffers.depth.setMask(!0),!1===t.autoClear&&t.clear(),t.render(e,this.virtualCamera),this._options.tblur){const e=this._options.blur*this._options.pixelRatio,n=e*this._options.verticalBlurMult;if(this._coreRenderBlur.applyBlur(this.renderTarget,t,e,n),this._options.tblur2){const e=this._options.blur2*this._options.pixelRatio,n=e*this._options.verticalBlur2Mult;this._coreRenderBlur.applyBlur(this.renderTarget,t,e,n)}}t.xr.enabled=c,t.shadowMap.autoUpdate=u,t.setRenderTarget(l);var h=o.viewport;void 0!==h&&t.state.viewport(h),this.visible=!0}}}class nK extends pG{static type(){return\\\\\\\"reflector\\\\\\\"}async cook(t,e){const n=t[0],i=[],r=await ai.renderersController.firstRenderer();if(!r)return this.createCoreGroupFromObjects(i);const s=n.objectsWithGeo();for(let t of s){const n=new eK(t.geometry,{clipBias:e.clipBias,renderer:r,scene:this.scene().threejsScene(),pixelRatio:e.pixelRatio,color:e.color,opacity:e.opacity,active:e.active,tblur:e.tblur,blur:e.blur,verticalBlurMult:e.verticalBlurMult,tblur2:e.tblur2,blur2:e.blur2,verticalBlur2Mult:e.verticalBlur2Mult});n.position.copy(t.position),n.rotation.copy(t.rotation),n.scale.copy(t.scale),n.updateMatrix(),i.push(n)}return this.createCoreGroupFromObjects(i)}}nK.DEFAULT_PARAMS={active:!0,clipBias:.003,color:new D.a(1,1,1),opacity:1,pixelRatio:1,tblur:!1,blur:1,verticalBlurMult:1,tblur2:!1,blur2:1,verticalBlur2Mult:1},nK.INPUT_CLONED_STATE=Qi.NEVER;const iK=nK.DEFAULT_PARAMS;const rK=new class extends aa{constructor(){super(...arguments),this.active=oa.BOOLEAN(iK.active),this.clipBias=oa.FLOAT(iK.clipBias),this.color=oa.COLOR(iK.color.toArray()),this.opacity=oa.FLOAT(iK.opacity),this.pixelRatio=oa.INTEGER(iK.pixelRatio,{range:[1,4],rangeLocked:[!0,!1]}),this.tblur=oa.BOOLEAN(iK.tblur),this.blur=oa.FLOAT(iK.blur,{visibleIf:{tblur:1}}),this.verticalBlurMult=oa.FLOAT(iK.verticalBlurMult,{visibleIf:{tblur:1}}),this.tblur2=oa.BOOLEAN(iK.tblur2,{visibleIf:{tblur:1}}),this.blur2=oa.FLOAT(iK.blur2,{visibleIf:{tblur:1,tblur2:1}}),this.verticalBlur2Mult=oa.FLOAT(iK.verticalBlur2Mult,{visibleIf:{tblur:1,tblur2:1}})}};class sK extends gG{constructor(){super(...arguments),this.paramsConfig=rK}static type(){return\\\\\\\"reflector\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to create a reflector from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(nK.INPUT_CLONED_STATE)}async cook(t){this._operation=this._operation||new nK(this._scene,this.states);const e=await this._operation.cook(t,this.pv);this.setCoreGroup(e)}}var oK=n(85);var aK;!function(t){t.POINTS_COUNT=\\\\\\\"pointsCount\\\\\\\",t.SEGMENT_LENGTH=\\\\\\\"segmentLength\\\\\\\"}(aK||(aK={}));const lK=[aK.POINTS_COUNT,aK.SEGMENT_LENGTH];var cK;!function(t){t.CENTRIPETAL=\\\\\\\"centripetal\\\\\\\",t.CHORDAL=\\\\\\\"chordal\\\\\\\",t.CATMULLROM=\\\\\\\"catmullrom\\\\\\\"}(cK||(cK={}));const uK=[cK.CENTRIPETAL,cK.CHORDAL,cK.CATMULLROM];const hK=new class extends aa{constructor(){super(...arguments),this.method=oa.INTEGER(lK.indexOf(aK.POINTS_COUNT),{menu:{entries:lK.map(((t,e)=>({name:t,value:e})))}}),this.curveType=oa.INTEGER(uK.indexOf(cK.CATMULLROM),{range:[0,2],rangeLocked:[!0,!0],menu:{entries:uK.map(((t,e)=>({name:t,value:e})))}}),this.tension=oa.FLOAT(.01,{range:[0,1],rangeLocked:[!0,!0]}),this.pointsCount=oa.INTEGER(100,{visibleIf:{method:lK.indexOf(aK.POINTS_COUNT)},range:[1,1e3],rangeLocked:[!0,!1]}),this.segmentLength=oa.FLOAT(1,{visibleIf:{method:lK.indexOf(aK.SEGMENT_LENGTH)}})}};class dK extends gG{constructor(){super(...arguments),this.paramsConfig=hK}static type(){return\\\\\\\"resample\\\\\\\"}initializeNode(){this.io.inputs.setCount(1)}cook(t){const e=t[0],n=[];if(this.pv.pointsCount>=2){const t=e.coreObjects();for(let e=0;e<t.length;e++){const i=t[e].object();if(i instanceof Tr.a){const t=this._resample(i);n.push(t)}}}this.setObjects(n)}_resample(t){var e;const n=t.geometry,i=new ps(n).points(),r=null===(e=n.getIndex())||void 0===e?void 0:e.array,s=UQ.accumulated_curve_point_indices(r),o=[];for(let t=0;t<s.length;t++){const e=s[t].map((t=>i[t])),n=this._create_curve_from_points(e);n&&o.push(n)}const a=cs(o);return this.createObject(a,Sr.LINE_SEGMENTS)}_create_curve_from_points(t){if(t.length<=1)return;const e=t.map((t=>t.attribValue(\\\\\\\"position\\\\\\\"))),n=uK[this.pv.curveType],i=this.pv.tension,r=new oK.a(e,!1,n,i),s=this._get_points_from_curve(r);let o=[];const a=[];for(let t=0;t<s.length;t++){const e=s[t].toArray();o.push(e),t>0&&(a.push(t-1),a.push(t))}const l=new S.a;return l.setAttribute(\\\\\\\"position\\\\\\\",new C.c(o.flat(),3)),l.setIndex(a),l}_get_points_from_curve(t){const e=lK[this.pv.method];switch(e){case aK.POINTS_COUNT:return t.getSpacedPoints(Math.max(2,this.pv.pointsCount));case aK.SEGMENT_LENGTH:var n=t.getLength(),i=0!==this.pv.segmentLength?1+n/this.pv.segmentLength:2;return i=Math.max(2,i),t.getSpacedPoints(i)}ar.unreachable(e)}}class pK extends pG{static type(){return\\\\\\\"restAttributes\\\\\\\"}cook(t,e){const n=t[0].objectsWithGeo();return e.tposition&&this._create_rest_attribute(n,e.position,e.restP),e.tnormal&&this._create_rest_attribute(n,e.normal,e.restN),this.createCoreGroupFromObjects(n)}_create_rest_attribute(t,e,n){for(let i of t){const t=i.geometry;if(t){const i=t.getAttribute(e);i&&t.setAttribute(n,i.clone())}}}}pK.DEFAULT_PARAMS={tposition:!0,position:\\\\\\\"position\\\\\\\",restP:\\\\\\\"restP\\\\\\\",tnormal:!0,normal:\\\\\\\"normal\\\\\\\",restN:\\\\\\\"restN\\\\\\\"};const _K=pK.DEFAULT_PARAMS;const mK=new class extends aa{constructor(){super(...arguments),this.tposition=oa.BOOLEAN(_K.tposition),this.position=oa.STRING(_K.position,{visibleIf:{tposition:!0}}),this.restP=oa.STRING(_K.restP,{visibleIf:{tposition:!0}}),this.tnormal=oa.BOOLEAN(_K.tnormal),this.normal=oa.STRING(_K.normal,{visibleIf:{tnormal:!0}}),this.restN=oa.STRING(_K.restN,{visibleIf:{tnormal:!0}})}};class fK extends gG{constructor(){super(...arguments),this.paramsConfig=mK}static type(){return\\\\\\\"restAttributes\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState([Qi.FROM_NODE])}cook(t){this._operation=this._operation||new pK(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const gK=new p.a;function vK(t,e,n,i,r,s){const o=2*Math.PI*r/4,a=Math.max(s-2*r,0),l=Math.PI/4;gK.copy(e),gK[i]=0,gK.normalize();const c=.5*o/(o+a),u=1-gK.angleTo(t)/l;if(1===Math.sign(gK[n]))return u*c;return a/(o+a)+c+c*(1-u)}class yK extends N{constructor(t=1,e=1,n=1,i=2,r=.1){if(i=2*i+1,r=Math.min(t/2,e/2,n/2,r),super(1,1,1,i,i,i),1===i)return;const s=this.toNonIndexed();this.index=null,this.attributes.position=s.attributes.position,this.attributes.normal=s.attributes.normal,this.attributes.uv=s.attributes.uv;const o=new p.a,a=new p.a,l=new p.a(t,e,n).divideScalar(2).subScalar(r),c=this.attributes.position.array,u=this.attributes.normal.array,h=this.attributes.uv.array,d=c.length/6,_=new p.a,m=.5/i;for(let i=0,s=0;i<c.length;i+=3,s+=2){o.fromArray(c,i),a.copy(o),a.x-=Math.sign(a.x)*m,a.y-=Math.sign(a.y)*m,a.z-=Math.sign(a.z)*m,a.normalize(),c[i+0]=l.x*Math.sign(o.x)+a.x*r,c[i+1]=l.y*Math.sign(o.y)+a.y*r,c[i+2]=l.z*Math.sign(o.z)+a.z*r,u[i+0]=a.x,u[i+1]=a.y,u[i+2]=a.z;switch(Math.floor(i/d)){case 0:_.set(1,0,0),h[s+0]=vK(_,a,\\\\\\\"z\\\\\\\",\\\\\\\"y\\\\\\\",r,n),h[s+1]=1-vK(_,a,\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\",r,e);break;case 1:_.set(-1,0,0),h[s+0]=1-vK(_,a,\\\\\\\"z\\\\\\\",\\\\\\\"y\\\\\\\",r,n),h[s+1]=1-vK(_,a,\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\",r,e);break;case 2:_.set(0,1,0),h[s+0]=1-vK(_,a,\\\\\\\"x\\\\\\\",\\\\\\\"z\\\\\\\",r,t),h[s+1]=vK(_,a,\\\\\\\"z\\\\\\\",\\\\\\\"x\\\\\\\",r,n);break;case 3:_.set(0,-1,0),h[s+0]=1-vK(_,a,\\\\\\\"x\\\\\\\",\\\\\\\"z\\\\\\\",r,t),h[s+1]=1-vK(_,a,\\\\\\\"z\\\\\\\",\\\\\\\"x\\\\\\\",r,n);break;case 4:_.set(0,0,1),h[s+0]=1-vK(_,a,\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",r,t),h[s+1]=1-vK(_,a,\\\\\\\"y\\\\\\\",\\\\\\\"x\\\\\\\",r,e);break;case 5:_.set(0,0,-1),h[s+0]=vK(_,a,\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",r,t),h[s+1]=1-vK(_,a,\\\\\\\"y\\\\\\\",\\\\\\\"x\\\\\\\",r,e)}}}}class xK extends pG{constructor(){super(...arguments),this._core_transform=new Mz}static type(){return\\\\\\\"roundedBox\\\\\\\"}cook(t,e){const n=t[0],i=n?this._cook_with_input(n,e):this._cook_without_input(e);return this.createCoreGroupFromGeometry(i)}_cook_without_input(t){const e=t.size,n=new yK(e,e,e,t.divisions,t.bevel);return n.translate(t.center.x,t.center.y,t.center.z),n.computeVertexNormals(),n}_cook_with_input(t,e){const n=e.divisions,i=t.boundingBox(),r=i.max.clone().sub(i.min),s=i.max.clone().add(i.min).multiplyScalar(.5),o=new yK(r.x,r.y,r.z,n,e.bevel),a=this._core_transform.translation_matrix(s);return o.applyMatrix4(a),o}}xK.DEFAULT_PARAMS={size:1,divisions:2,bevel:.1,center:new p.a(0,0,0)},xK.INPUT_CLONED_STATE=Qi.NEVER;const bK=xK.DEFAULT_PARAMS;const wK=new class extends aa{constructor(){super(...arguments),this.size=oa.FLOAT(bK.size),this.divisions=oa.INTEGER(bK.divisions,{range:[1,10],rangeLocked:[!0,!1]}),this.bevel=oa.FLOAT(bK.bevel,{range:[0,1],rangeLocked:[!0,!1]}),this.center=oa.VECTOR3(bK.center)}};class TK extends gG{constructor(){super(...arguments),this.paramsConfig=wK}static type(){return\\\\\\\"roundedBox\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to create bounding box from (optional)\\\\\\\"]}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(xK.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new xK(this._scene,this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class AK extends pG{static type(){return\\\\\\\"scatter\\\\\\\"}async cook(t,e){const n=t[0];let i=n.faces();const r=[];let s=0;const o=new Map;for(let t of i){const e=t.area();o.set(t.index(),e)}const a=f.sortBy(i,(t=>o.get(t.index())||-1));let l=0;for(let t of a)s+=o.get(t.index()),r[l]=s,l++;const c=[];let u=[];e.transferAttributes&&(u=n.attribNamesMatchingMask(e.attributesToTransfer));const h=new Map,d=new Map;for(let t of u)h.set(t,[]),d.set(t,n.attribSize(t));const p=new Iq,_=2454*e.seed%Number.MAX_SAFE_INTEGER;await p.startWithCount(e.pointsCount,(t=>{const e=rs.randFloat(_+t)*s;for(let t=0;t<r.length;t++){if(e<=r[t]){const n=a[t],i=n.random_position(e);i.toArray(c,c.length);for(let t of u){const e=n.attrib_value_at_position(t,i);e&&(m.isNumber(e)?h.get(t).push(e):e.toArray(h.get(t),h.get(t).length))}break}}}));const g=new S.a;g.setAttribute(\\\\\\\"position\\\\\\\",new C.a(new Float32Array(c),3));for(let t of u)g.setAttribute(t,new C.a(new Float32Array(h.get(t)),d.get(t)));if(e.addIdAttribute||e.addIdnAttribute){const t=e.pointsCount,n=f.range(t);e.addIdAttribute&&g.setAttribute(\\\\\\\"id\\\\\\\",new C.a(new Float32Array(n),1));const i=n.map((e=>e/(t-1)));e.addIdnAttribute&&g.setAttribute(\\\\\\\"idn\\\\\\\",new C.a(new Float32Array(i),1))}const v=this.createObject(g,Sr.POINTS);return this.createCoreGroupFromObjects([v])}}AK.DEFAULT_PARAMS={pointsCount:100,seed:0,transferAttributes:!0,attributesToTransfer:\\\\\\\"normal\\\\\\\",addIdAttribute:!0,addIdnAttribute:!0},AK.INPUT_CLONED_STATE=Qi.FROM_NODE;const EK=AK.DEFAULT_PARAMS;const MK=new class extends aa{constructor(){super(...arguments),this.pointsCount=oa.INTEGER(EK.pointsCount,{range:[0,100],rangeLocked:[!0,!1]}),this.seed=oa.INTEGER(EK.seed,{range:[0,100],rangeLocked:[!1,!1]}),this.transferAttributes=oa.BOOLEAN(EK.transferAttributes),this.attributesToTransfer=oa.STRING(EK.attributesToTransfer,{visibleIf:{transferAttributes:1}}),this.addIdAttribute=oa.BOOLEAN(EK.addIdAttribute),this.addIdnAttribute=oa.BOOLEAN(EK.addIdnAttribute)}};class SK extends gG{constructor(){super(...arguments),this.paramsConfig=MK}static type(){return\\\\\\\"scatter\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to scatter points onto\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.NEVER)}async cook(t){this._operation=this._operation||new AK(this.scene(),this.states);const e=await this._operation.cook(t,this.pv);this.setCoreGroup(e)}}var CK;!function(t){t.MATRIX=\\\\\\\"matrix\\\\\\\",t.AXIS=\\\\\\\"axis\\\\\\\"}(CK||(CK={}));const NK=[CK.MATRIX,CK.AXIS];var LK;!function(t){t.BBOX_CENTER=\\\\\\\"bbox center\\\\\\\",t.BBOX_CENTER_OFFSET=\\\\\\\"bbox center offset\\\\\\\",t.CUSTOM=\\\\\\\"custom\\\\\\\"}(LK||(LK={}));const OK=[LK.BBOX_CENTER,LK.BBOX_CENTER_OFFSET,LK.CUSTOM];class RK extends pG{constructor(){super(...arguments),this._m4=new A.a,this._axisNormalized=new p.a,this._center=new p.a,this._pointPos=new p.a,this._axisPlane=new X.a,this._pointOnPlane=new p.a,this._delta=new p.a,this._deltaNormalized=new p.a,this._offset=new p.a}static type(){return\\\\\\\"shear\\\\\\\"}cook(t,e){const n=t[0].objects();return this._applyShear(n,e),t[0]}_applyShear(t,e){const n=NK[e.mode];switch(n){case CK.MATRIX:return this._applyMatrixShear(t,e);case CK.AXIS:return this._applyAxisShear(t,e)}ar.unreachable(n)}_applyMatrixShear(t,e){this._m4.makeShear(e.xy,e.xz,e.yx,e.yz,e.zx,e.zy);for(let e of t){const t=e.geometry;t&&t.applyMatrix4(this._m4)}}_applyAxisShear(t,e){this._axisNormalized.copy(e.axis),this._axisNormalized.normalize();for(let n of t){const t=n.geometry;if(t){this._getAxisModeCenter(t,e),this._axisPlane.setFromNormalAndCoplanarPoint(e.planeAxis,this._center);const n=new ps(t).points();for(let t of n){t.getPosition(this._pointPos),this._axisPlane.projectPoint(this._pointPos,this._pointOnPlane),this._delta.copy(this._pointOnPlane).sub(this._pointPos);const n=this._delta.length();this._deltaNormalized.copy(this._delta).normalize(),this._offset.copy(this._axisNormalized).multiplyScalar(e.axisAmount*n),this._delta.dot(e.planeAxis)>0&&this._offset.multiplyScalar(-1),this._pointPos.add(this._offset),t.setPosition(this._pointPos)}}}}_getAxisModeCenter(t,e){const n=OK[e.centerMode];switch(n){case LK.BBOX_CENTER:return this._getAxisModeCenterBbox(t,e);case LK.BBOX_CENTER_OFFSET:return this._getAxisModeCenterBboxOffset(t,e);case LK.CUSTOM:return this._getAxisModeCenterCustom(e)}ar.unreachable(n)}_getAxisModeCenterBbox(t,e){t.computeBoundingBox();const n=t.boundingBox;n?n.getCenter(this._center):this._center.set(0,0,0)}_getAxisModeCenterBboxOffset(t,e){this._getAxisModeCenterBbox(t,e),this._center.add(e.centerOffset)}_getAxisModeCenterCustom(t){return this._center.copy(t.center)}}var PK;RK.DEFAULT_PARAMS={mode:NK.indexOf(CK.AXIS),xy:0,xz:0,yx:0,yz:0,zx:0,zy:0,centerMode:OK.indexOf(LK.BBOX_CENTER),centerOffset:new p.a(0,0,0),center:new p.a(0,0,0),planeAxis:new p.a(0,0,1),axis:new p.a(0,1,0),axisAmount:0},RK.INPUT_CLONED_STATE=Qi.FROM_NODE,function(t){t.SHEAR=\\\\\\\"shear\\\\\\\",t.TRANSFORM=\\\\\\\"transform\\\\\\\",t.UV_LAYOUT=\\\\\\\"uvLayout\\\\\\\",t.UV_TRANSFORM=\\\\\\\"uvTransform\\\\\\\",t.UV_UNWRAP=\\\\\\\"uvUnwrap\\\\\\\"}(PK||(PK={}));const IK=RK.DEFAULT_PARAMS;const FK=new class extends aa{constructor(){super(...arguments),this.mode=oa.INTEGER(IK.mode,{menu:{entries:NK.map(((t,e)=>({name:t,value:e})))}}),this.xy=oa.FLOAT(IK.xy,{visibleIf:{mode:NK.indexOf(CK.MATRIX)}}),this.xz=oa.FLOAT(IK.xz,{visibleIf:{mode:NK.indexOf(CK.MATRIX)}}),this.yx=oa.FLOAT(IK.yx,{visibleIf:{mode:NK.indexOf(CK.MATRIX)}}),this.yz=oa.FLOAT(IK.yz,{visibleIf:{mode:NK.indexOf(CK.MATRIX)}}),this.zx=oa.FLOAT(IK.zx,{visibleIf:{mode:NK.indexOf(CK.MATRIX)}}),this.zy=oa.FLOAT(IK.zy,{visibleIf:{mode:NK.indexOf(CK.MATRIX)}}),this.centerMode=oa.INTEGER(IK.centerMode,{visibleIf:{mode:NK.indexOf(CK.AXIS)},menu:{entries:OK.map(((t,e)=>({name:t,value:e})))}}),this.centerOffset=oa.VECTOR3(IK.centerOffset.toArray(),{visibleIf:{mode:NK.indexOf(CK.AXIS),centerMode:OK.indexOf(LK.BBOX_CENTER_OFFSET)}}),this.center=oa.VECTOR3(IK.center.toArray(),{visibleIf:{mode:NK.indexOf(CK.AXIS),centerMode:OK.indexOf(LK.CUSTOM)}}),this.planeAxis=oa.VECTOR3(IK.planeAxis.toArray(),{visibleIf:{mode:NK.indexOf(CK.AXIS)}}),this.axis=oa.VECTOR3(IK.axis.toArray(),{visibleIf:{mode:NK.indexOf(CK.AXIS)}}),this.axisAmount=oa.FLOAT(IK.axisAmount,{range:[-1,1],visibleIf:{mode:NK.indexOf(CK.AXIS)}})}};class DK extends gG{constructor(){super(...arguments),this.paramsConfig=FK}static type(){return PK.SHEAR}static displayedInputNames(){return[\\\\\\\"geometries or objects to transform\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(RK.INPUT_CLONED_STATE)}setMode(t){this.p.mode.set(NK.indexOf(t))}cook(t){this._operation=this._operation||new RK(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const kK=new class extends aa{};class BK extends gG{constructor(){super(...arguments),this.paramsConfig=kK}static type(){return\\\\\\\"skin\\\\\\\"}static displayedInputNames(){return[\\\\\\\"lines to create polygons from\\\\\\\",\\\\\\\"if used, lines from both inputs will be used\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1,2)}cook(t){switch(f.compact(this.io.inputs.inputs()).length){case 1:return this.process_one_input(t);case 2:return this.process_two_inputs(t);default:return this.states.error.set(\\\\\\\"inputs count not valid\\\\\\\")}}process_one_input(t){const e=t[0],n=this._get_line_segments(e),i=[];if(n){const t=n[0];if(t){const e=UQ.line_segment_to_geometries(t.geometry);e.forEach(((t,n)=>{if(n>0){const r=e[n-1],s=this._skin(r,t);i.push(s)}}))}}this.setGeometries(i)}process_two_inputs(t){const e=t[0],n=t[1],i=this._get_line_segments(e),r=this._get_line_segments(n),s=f.sortBy([i,r],(t=>-t.length)),o=s[0],a=s[1],l=[];o.forEach(((t,e)=>{const n=a[e];if(null!=t&&null!=n){const e=t.geometry,i=n.geometry,r=this._skin(e,i);l.push(r)}})),this.setGeometries(l)}_get_line_segments(t){return t.objects().filter((t=>t.isLineSegments))}_skin(t,e){const n=new S.a;return new GQ(n,t,e).process(),n}}var zK;!function(t){t.X=\\\\\\\"x\\\\\\\",t.Y=\\\\\\\"y\\\\\\\",t.Z=\\\\\\\"z\\\\\\\"}(zK||(zK={}));const UK=[zK.X,zK.Y,zK.Z];class GK extends pG{constructor(){super(...arguments),this._pointPos=new p.a,this._positions=[],this._indicesByPos=new Map,this._indexDest=new Map,this._debugActive=!1}static type(){return\\\\\\\"sort\\\\\\\"}cook(t,e){const n=t[0],i=n.objectsWithGeo();for(let t of i)this._sortObject(t,e);return n}_debug(t){this._debugActive}_sortObject(t,e){const n=new vs(t,0).points(),i=t.geometry.getIndex();if(!i)return void console.warn(\\\\\\\"geometry cannot be sorted since it has no index\\\\\\\");const r=i.array;this._positions=new Array(n.length),this._indicesByPos.clear(),this._indexDest.clear();const s=UK[e.axis];let o=0,a=0;for(let t of n){switch(t.getPosition(this._pointPos),s){case zK.X:o=this._pointPos.x;break;case zK.Y:o=this._pointPos.y;break;case zK.Z:o=this._pointPos.z}this._positions[a]=o,u.pushOnArrayAtEntry(this._indicesByPos,o,t.index()),a++}let l=this._positions.sort(((t,e)=>t-e));e.invert&&l.reverse();const c=new Array(n.length);a=0;const h=f.uniq(l);for(let t of h){const e=this._indicesByPos.get(t);if(e)for(let t of e)c[a]=t,this._indexDest.set(t,a),a++}const d=new Array(r.length);for(let t=0;t<r.length;t++){const e=r[t],n=this._indexDest.get(e);d[t]=n}t.geometry.setIndex(d);const p=ps.attribNames(t.geometry);for(let e of p){\\\\\\\"id\\\\\\\"==e&&(this._debugActive=!0);const n=t.geometry.getAttribute(e);this._updateAttribute(n,c),this._debugActive=!1}}_updateAttribute(t,e){const n=t.clone(),i=t.array,r=n.array,s=n.itemSize;this._debug(e);for(let t of e){const e=this._indexDest.get(t);if(this._debug(`${t} -> ${e}`),null!=e)for(let n=0;n<s;n++)r[e*s+n]=i[t*s+n];else console.warn(\\\\\\\"no old index found\\\\\\\")}t.array=r,t.needsUpdate=!0}}GK.DEFAULT_PARAMS={axis:UK.indexOf(zK.X),invert:!1},GK.INPUT_CLONED_STATE=Qi.FROM_NODE;const VK=GK.DEFAULT_PARAMS;const HK=new class extends aa{constructor(){super(...arguments),this.axis=oa.INTEGER(VK.axis,{menu:{entries:UK.map(((t,e)=>({name:t,value:e})))}}),this.invert=oa.BOOLEAN(VK.invert)}};class jK extends gG{constructor(){super(...arguments),this.paramsConfig=HK}static type(){return\\\\\\\"sort\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to sort\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState([Qi.FROM_NODE])}cook(t){this._operation=this._operation||new GK(this._scene,this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const WK=new class extends aa{constructor(){super(...arguments),this.startFrame=oa.INTEGER(Ml.START_FRAME)}};class qK extends xG{constructor(){super(...arguments),this.paramsConfig=WK,this._last_simulated_frame=null,this.childrenDisplayController=new wG(this,{dependsOnDisplayNode:!1}),this.displayNodeController=new Lm(this,{onDisplayNodeRemove:()=>{},onDisplayNodeSet:()=>{},onDisplayNodeUpdate:()=>{}},{dependsOnDisplayNode:!1})}static type(){return\\\\\\\"solver\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,4),this.io.inputs.initInputsClonedState(Qi.NEVER),this.addGraphInput(this.scene().timeController.graphNode)}previousFrameCoreGroup(){return this._previousFrameCoreGroup}async cook(t){this.pv.startFrame==this.scene().frame()&&this._reset(),this.computeSolverIfRequired()}_reset(){this._previousFrameCoreGroup=void 0,this._last_simulated_frame=null}computeSolverIfRequired(){const t=this.scene().frame(),e=this.pv.startFrame;t>=e&&(null==this._last_simulated_frame&&(this._last_simulated_frame=e-1),t>this._last_simulated_frame&&this._computeSolverMultipleTimes(t-this._last_simulated_frame))}_computeSolverMultipleTimes(t=1){for(let e=0;e<t;e++)this.computeSolver();this._last_simulated_frame=this.scene().frame()}async computeSolver(){const t=this.childrenDisplayController.output_node();if(t){const e=(await t.compute()).coreContent();e?(this._previousFrameCoreGroup=e,this.setCoreGroup(e)):t.states.error.active()?this.states.error.set(t.states.error.message()):(this._previousFrameCoreGroup=void 0,this.setObjects([]))}else this.states.error.set(\\\\\\\"no output node found inside subnet\\\\\\\")}isOnFrameStart(){return this.scene().frame()==this.pv.startFrame}}const XK=new class extends aa{};class YK extends gG{constructor(){super(...arguments),this.paramsConfig=XK}static type(){return\\\\\\\"solverPreviousFrame\\\\\\\"}initializeNode(){this.addGraphInput(this.scene().timeController.graphNode)}async cook(){const t=this.parent();(null==t?void 0:t.type())!=qK.type()&&(this.states.error.set(`the parent is not a '${qK.type()}'`),this.cookController.endCook());const e=t.previousFrameCoreGroup();e?this.setCoreGroup(e):this.setObjects([])}}var $K;!function(t){t.DEFAULT=\\\\\\\"default\\\\\\\",t.ISOCAHEDRON=\\\\\\\"isocahedron\\\\\\\"}($K||($K={}));const JK={default:0,isocahedron:1},ZK=[$K.DEFAULT,$K.ISOCAHEDRON];class QK extends pG{static type(){return\\\\\\\"sphere\\\\\\\"}cook(t,e){const n=t[0];return n?this._cook_with_input(n,e):this._cook_without_input(e)}_cook_without_input(t){const e=this._create_required_geometry(t);return e.translate(t.center.x,t.center.y,t.center.z),this.createCoreGroupFromGeometry(e)}_cook_with_input(t,e){const n=t.boundingBox(),i=n.max.clone().sub(n.min),r=n.max.clone().add(n.min).multiplyScalar(.5),s=this._create_required_geometry(e);return s.translate(e.center.x,e.center.y,e.center.z),s.translate(r.x,r.y,r.z),s.scale(i.x,i.y,i.z),this.createCoreGroupFromGeometry(s)}_create_required_geometry(t){return t.type==JK.default?this._create_default_sphere(t):this._create_default_isocahedron(t)}_create_default_sphere(t){return t.open?new oU(t.radius,t.resolution.x,t.resolution.y,t.phiStart,t.phiLength,t.thetaStart,t.thetaLength):new oU(t.radius,t.resolution.x,t.resolution.y)}_create_default_isocahedron(t){return new JX(t.radius,t.detail)}}QK.DEFAULT_PARAMS={type:JK.default,radius:1,resolution:new d.a(30,30),open:!1,phiStart:0,phiLength:2*Math.PI,thetaStart:0,thetaLength:Math.PI,detail:1,center:new p.a(0,0,0)},QK.INPUT_CLONED_STATE=Qi.FROM_NODE;const KK=QK.DEFAULT_PARAMS;const t0=new class extends aa{constructor(){super(...arguments),this.type=oa.INTEGER(KK.type,{menu:{entries:ZK.map((t=>({name:t,value:JK[t]})))}}),this.radius=oa.FLOAT(KK.radius,{visibleIf:{type:JK.default}}),this.resolution=oa.VECTOR2(KK.resolution,{visibleIf:{type:JK.default}}),this.open=oa.BOOLEAN(KK.open,{visibleIf:{type:JK.default}}),this.phiStart=oa.FLOAT(KK.phiStart,{range:[0,2*Math.PI],visibleIf:{type:JK.default,open:!0}}),this.phiLength=oa.FLOAT(\\\\\\\"$PI*2\\\\\\\",{range:[0,2*Math.PI],visibleIf:{type:JK.default,open:!0}}),this.thetaStart=oa.FLOAT(KK.thetaStart,{range:[0,Math.PI],visibleIf:{type:JK.default,open:!0}}),this.thetaLength=oa.FLOAT(\\\\\\\"$PI\\\\\\\",{range:[0,Math.PI],visibleIf:{type:JK.default,open:!0}}),this.detail=oa.INTEGER(KK.detail,{range:[0,5],rangeLocked:[!0,!1],visibleIf:{type:JK.isocahedron}}),this.center=oa.VECTOR3(KK.center)}};class e0 extends gG{constructor(){super(...arguments),this.paramsConfig=t0}static type(){return\\\\\\\"sphere\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,1),this.io.inputs.initInputsClonedState(QK.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new QK(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const n0=new class extends aa{constructor(){super(...arguments),this.attribType=oa.INTEGER(kr.indexOf(Dr.NUMERIC),{menu:{entries:Br}}),this.attribName=oa.STRING(\\\\\\\"\\\\\\\")}};class i0 extends gG{constructor(){super(...arguments),this.paramsConfig=n0,this._new_objects=[]}static type(){return\\\\\\\"split\\\\\\\"}static displayedInputNames(){return[\\\\\\\"geometry to split in multiple objects\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1)}async cook(t){const e=t[0];this._new_objects=[],\\\\\\\"\\\\\\\"!=this.pv.attribName&&this._split_core_group(e),this.setObjects(this._new_objects)}async _split_core_group(t){const e=t.coreObjects();for(let t of e)this._split_core_object(t)}_split_core_object(t){let e=t.coreGeometry(),n=this.pv.attribName,i=new Map;if(e){const r=t.object(),s=e.pointsFromGeometry(),o=s[0];if(o){if(o.attribSize(n)!=zr.FLOAT&&!o.isAttribIndexed(n))return void this.states.error.set(`attrib '${n}' must be a float or a string`);let t;if(o.isAttribIndexed(n))for(let e of s)t=e.indexedAttribValue(n),u.pushOnArrayAtEntry(i,t,e);else for(let e of s)t=e.attribValue(n),u.pushOnArrayAtEntry(i,t,e)}const a=Nr(r.constructor);i.forEach(((t,e)=>{const i=ps.geometryFromPoints(t,a);if(i){const t=this.createObject(i,a);vs.addAttribute(t,n,e),this._new_objects.push(t)}}))}}}const r0=new A.a,s0=new Q.a,o0=new p.a;class a0 extends $.a{constructor(){super(),this.uuid=Ln.h(),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(t){const e=(new U.a).getNormalMatrix(t);for(let e=0,n=this.vertices.length;e<n;e++){this.vertices[e].applyMatrix4(t)}for(let t=0,n=this.faces.length;t<n;t++){const n=this.faces[t];n.normal.applyMatrix3(e).normalize();for(let t=0,i=n.vertexNormals.length;t<i;t++)n.vertexNormals[t].applyMatrix3(e).normalize()}return null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this.verticesNeedUpdate=!0,this.normalsNeedUpdate=!0,this}rotateX(t){return r0.makeRotationX(t),this.applyMatrix4(r0),this}rotateY(t){return r0.makeRotationY(t),this.applyMatrix4(r0),this}rotateZ(t){return r0.makeRotationZ(t),this.applyMatrix4(r0),this}translate(t,e,n){return r0.makeTranslation(t,e,n),this.applyMatrix4(r0),this}scale(t,e,n){return r0.makeScale(t,e,n),this.applyMatrix4(r0),this}lookAt(t){return s0.lookAt(t),s0.updateMatrix(),this.applyMatrix4(s0.matrix),this}fromBufferGeometry(t){const e=this,n=null!==t.index?t.index:void 0,i=t.attributes;if(void 0===i.position)return console.error(\\\\\\\"THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion.\\\\\\\"),this;const r=i.position,s=i.normal,o=i.color,a=i.uv,l=i.uv2;void 0!==l&&(this.faceVertexUvs[1]=[]);for(let t=0;t<r.count;t++)e.vertices.push((new p.a).fromBufferAttribute(r,t)),void 0!==o&&e.colors.push((new D.a).fromBufferAttribute(o,t));function c(t,n,i,r){const c=void 0===o?[]:[e.colors[t].clone(),e.colors[n].clone(),e.colors[i].clone()],u=void 0===s?[]:[(new p.a).fromBufferAttribute(s,t),(new p.a).fromBufferAttribute(s,n),(new p.a).fromBufferAttribute(s,i)],h=new c0(t,n,i,u,c,r);e.faces.push(h),void 0!==a&&e.faceVertexUvs[0].push([(new d.a).fromBufferAttribute(a,t),(new d.a).fromBufferAttribute(a,n),(new d.a).fromBufferAttribute(a,i)]),void 0!==l&&e.faceVertexUvs[1].push([(new d.a).fromBufferAttribute(l,t),(new d.a).fromBufferAttribute(l,n),(new d.a).fromBufferAttribute(l,i)])}const u=t.groups;if(u.length>0)for(let t=0;t<u.length;t++){const e=u[t],i=e.start;for(let t=i,r=i+e.count;t<r;t+=3)void 0!==n?c(n.getX(t),n.getX(t+1),n.getX(t+2),e.materialIndex):c(t,t+1,t+2,e.materialIndex)}else if(void 0!==n)for(let t=0;t<n.count;t+=3)c(n.getX(t),n.getX(t+1),n.getX(t+2));else for(let t=0;t<r.count;t+=3)c(t,t+1,t+2);return this.computeFaceNormals(),null!==t.boundingBox&&(this.boundingBox=t.boundingBox.clone()),null!==t.boundingSphere&&(this.boundingSphere=t.boundingSphere.clone()),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(o0).negate(),this.translate(o0.x,o0.y,o0.z),this}normalize(){this.computeBoundingSphere();const t=this.boundingSphere.center,e=this.boundingSphere.radius,n=0===e?1:1/e,i=new A.a;return i.set(n,0,0,-n*t.x,0,n,0,-n*t.y,0,0,n,-n*t.z,0,0,0,1),this.applyMatrix4(i),this}computeFaceNormals(){const t=new p.a,e=new p.a;for(let n=0,i=this.faces.length;n<i;n++){const i=this.faces[n],r=this.vertices[i.a],s=this.vertices[i.b],o=this.vertices[i.c];t.subVectors(o,s),e.subVectors(r,s),t.cross(e),t.normalize(),i.normal.copy(t)}}computeVertexNormals(t=!0){const e=new Array(this.vertices.length);for(let t=0,n=this.vertices.length;t<n;t++)e[t]=new p.a;if(t){const t=new p.a,n=new p.a;for(let i=0,r=this.faces.length;i<r;i++){const r=this.faces[i],s=this.vertices[r.a],o=this.vertices[r.b],a=this.vertices[r.c];t.subVectors(a,o),n.subVectors(s,o),t.cross(n),e[r.a].add(t),e[r.b].add(t),e[r.c].add(t)}}else{this.computeFaceNormals();for(let t=0,n=this.faces.length;t<n;t++){const n=this.faces[t];e[n.a].add(n.normal),e[n.b].add(n.normal),e[n.c].add(n.normal)}}for(let t=0,n=this.vertices.length;t<n;t++)e[t].normalize();for(let t=0,n=this.faces.length;t<n;t++){const n=this.faces[t],i=n.vertexNormals;3===i.length?(i[0].copy(e[n.a]),i[1].copy(e[n.b]),i[2].copy(e[n.c])):(i[0]=e[n.a].clone(),i[1]=e[n.b].clone(),i[2]=e[n.c].clone())}this.faces.length>0&&(this.normalsNeedUpdate=!0)}computeFlatVertexNormals(){this.computeFaceNormals();for(let t=0,e=this.faces.length;t<e;t++){const e=this.faces[t],n=e.vertexNormals;3===n.length?(n[0].copy(e.normal),n[1].copy(e.normal),n[2].copy(e.normal)):(n[0]=e.normal.clone(),n[1]=e.normal.clone(),n[2]=e.normal.clone())}this.faces.length>0&&(this.normalsNeedUpdate=!0)}computeMorphNormals(){for(let t=0,e=this.faces.length;t<e;t++){const e=this.faces[t];e.__originalFaceNormal?e.__originalFaceNormal.copy(e.normal):e.__originalFaceNormal=e.normal.clone(),e.__originalVertexNormals||(e.__originalVertexNormals=[]);for(let t=0,n=e.vertexNormals.length;t<n;t++)e.__originalVertexNormals[t]?e.__originalVertexNormals[t].copy(e.vertexNormals[t]):e.__originalVertexNormals[t]=e.vertexNormals[t].clone()}const t=new a0;t.faces=this.faces;for(let e=0,n=this.morphTargets.length;e<n;e++){if(!this.morphNormals[e]){this.morphNormals[e]={},this.morphNormals[e].faceNormals=[],this.morphNormals[e].vertexNormals=[];const t=this.morphNormals[e].faceNormals,n=this.morphNormals[e].vertexNormals;for(let e=0,i=this.faces.length;e<i;e++){const e=new p.a,i={a:new p.a,b:new p.a,c:new p.a};t.push(e),n.push(i)}}const n=this.morphNormals[e];t.vertices=this.morphTargets[e].vertices,t.computeFaceNormals(),t.computeVertexNormals();for(let t=0,e=this.faces.length;t<e;t++){const e=this.faces[t],i=n.faceNormals[t],r=n.vertexNormals[t];i.copy(e.normal),r.a.copy(e.vertexNormals[0]),r.b.copy(e.vertexNormals[1]),r.c.copy(e.vertexNormals[2])}}for(let t=0,e=this.faces.length;t<e;t++){const e=this.faces[t];e.normal=e.__originalFaceNormal,e.vertexNormals=e.__originalVertexNormals}}computeBoundingBox(){null===this.boundingBox&&(this.boundingBox=new XB.a),this.boundingBox.setFromPoints(this.vertices)}computeBoundingSphere(){null===this.boundingSphere&&(this.boundingSphere=new Oq.a),this.boundingSphere.setFromPoints(this.vertices)}merge(t,e,n=0){if(!t||!t.isGeometry)return void console.error(\\\\\\\"THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.\\\\\\\",t);let i;const r=this.vertices.length,s=this.vertices,o=t.vertices,a=this.faces,l=t.faces,c=this.colors,u=t.colors;void 0!==e&&(i=(new U.a).getNormalMatrix(e));for(let t=0,n=o.length;t<n;t++){const n=o[t].clone();void 0!==e&&n.applyMatrix4(e),s.push(n)}for(let t=0,e=u.length;t<e;t++)c.push(u[t].clone());for(let t=0,e=l.length;t<e;t++){const e=l[t];let s,o;const c=e.vertexNormals,u=e.vertexColors,h=new c0(e.a+r,e.b+r,e.c+r);h.normal.copy(e.normal),void 0!==i&&h.normal.applyMatrix3(i).normalize();for(let t=0,e=c.length;t<e;t++)s=c[t].clone(),void 0!==i&&s.applyMatrix3(i).normalize(),h.vertexNormals.push(s);h.color.copy(e.color);for(let t=0,e=u.length;t<e;t++)o=u[t],h.vertexColors.push(o.clone());h.materialIndex=e.materialIndex+n,a.push(h)}for(let e=0,n=t.faceVertexUvs.length;e<n;e++){const n=t.faceVertexUvs[e];void 0===this.faceVertexUvs[e]&&(this.faceVertexUvs[e]=[]);for(let t=0,i=n.length;t<i;t++){const i=n[t],r=[];for(let t=0,e=i.length;t<e;t++)r.push(i[t].clone());this.faceVertexUvs[e].push(r)}}}mergeMesh(t){t&&t.isMesh?(t.matrixAutoUpdate&&t.updateMatrix(),this.merge(t.geometry,t.matrix)):console.error(\\\\\\\"THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.\\\\\\\",t)}mergeVertices(t=4){const e={},n=[],i=[],r=Math.pow(10,t);for(let t=0,s=this.vertices.length;t<s;t++){const s=this.vertices[t],o=Math.round(s.x*r)+\\\\\\\"_\\\\\\\"+Math.round(s.y*r)+\\\\\\\"_\\\\\\\"+Math.round(s.z*r);void 0===e[o]?(e[o]=t,n.push(this.vertices[t]),i[t]=n.length-1):i[t]=i[e[o]]}const s=[];for(let t=0,e=this.faces.length;t<e;t++){const e=this.faces[t];e.a=i[e.a],e.b=i[e.b],e.c=i[e.c];const n=[e.a,e.b,e.c];for(let e=0;e<3;e++)if(n[e]===n[(e+1)%3]){s.push(t);break}}for(let t=s.length-1;t>=0;t--){const e=s[t];this.faces.splice(e,1);for(let t=0,n=this.faceVertexUvs.length;t<n;t++)this.faceVertexUvs[t].splice(e,1)}const o=this.vertices.length-n.length;return this.vertices=n,o}setFromPoints(t){this.vertices=[];for(let e=0,n=t.length;e<n;e++){const n=t[e];this.vertices.push(new p.a(n.x,n.y,n.z||0))}return this}sortFacesByMaterialIndex(){const t=this.faces,e=t.length;for(let n=0;n<e;n++)t[n]._id=n;t.sort((function(t,e){return t.materialIndex-e.materialIndex}));const n=this.faceVertexUvs[0],i=this.faceVertexUvs[1];let r,s;n&&n.length===e&&(r=[]),i&&i.length===e&&(s=[]);for(let o=0;o<e;o++){const e=t[o]._id;r&&r.push(n[e]),s&&s.push(i[e])}r&&(this.faceVertexUvs[0]=r),s&&(this.faceVertexUvs[1]=s)}toJSON(){const t={metadata:{version:4.5,type:\\\\\\\"Geometry\\\\\\\",generator:\\\\\\\"Geometry.toJSON\\\\\\\"}};if(t.uuid=this.uuid,t.type=this.type,\\\\\\\"\\\\\\\"!==this.name&&(t.name=this.name),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]&&(t[n]=e[n]);return t}const e=[];for(let t=0;t<this.vertices.length;t++){const n=this.vertices[t];e.push(n.x,n.y,n.z)}const n=[],i=[],r={},s=[],o={},a=[],l={};for(let t=0;t<this.faces.length;t++){const e=this.faces[t],i=!0,r=!1,s=void 0!==this.faceVertexUvs[0][t],o=e.normal.length()>0,a=e.vertexNormals.length>0,l=1!==e.color.r||1!==e.color.g||1!==e.color.b,p=e.vertexColors.length>0;let _=0;if(_=c(_,0,0),_=c(_,1,i),_=c(_,2,r),_=c(_,3,s),_=c(_,4,o),_=c(_,5,a),_=c(_,6,l),_=c(_,7,p),n.push(_),n.push(e.a,e.b,e.c),n.push(e.materialIndex),s){const e=this.faceVertexUvs[0][t];n.push(d(e[0]),d(e[1]),d(e[2]))}if(o&&n.push(u(e.normal)),a){const t=e.vertexNormals;n.push(u(t[0]),u(t[1]),u(t[2]))}if(l&&n.push(h(e.color)),p){const t=e.vertexColors;n.push(h(t[0]),h(t[1]),h(t[2]))}}function c(t,e,n){return n?t|1<<e:t&~(1<<e)}function u(t){const e=t.x.toString()+t.y.toString()+t.z.toString();return void 0!==r[e]||(r[e]=i.length/3,i.push(t.x,t.y,t.z)),r[e]}function h(t){const e=t.r.toString()+t.g.toString()+t.b.toString();return void 0!==o[e]||(o[e]=s.length,s.push(t.getHex())),o[e]}function d(t){const e=t.x.toString()+t.y.toString();return void 0!==l[e]||(l[e]=a.length/2,a.push(t.x,t.y)),l[e]}return t.data={},t.data.vertices=e,t.data.normals=i,s.length>0&&(t.data.colors=s),a.length>0&&(t.data.uvs=[a]),t.data.faces=n,t}clone(){return(new a0).copy(this)}copy(t){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=t.name;const e=t.vertices;for(let t=0,n=e.length;t<n;t++)this.vertices.push(e[t].clone());const n=t.colors;for(let t=0,e=n.length;t<e;t++)this.colors.push(n[t].clone());const i=t.faces;for(let t=0,e=i.length;t<e;t++)this.faces.push(i[t].clone());for(let e=0,n=t.faceVertexUvs.length;e<n;e++){const n=t.faceVertexUvs[e];void 0===this.faceVertexUvs[e]&&(this.faceVertexUvs[e]=[]);for(let t=0,i=n.length;t<i;t++){const i=n[t],r=[];for(let t=0,e=i.length;t<e;t++){const e=i[t];r.push(e.clone())}this.faceVertexUvs[e].push(r)}}const r=t.morphTargets;for(let t=0,e=r.length;t<e;t++){const e={};if(e.name=r[t].name,void 0!==r[t].vertices){e.vertices=[];for(let n=0,i=r[t].vertices.length;n<i;n++)e.vertices.push(r[t].vertices[n].clone())}if(void 0!==r[t].normals){e.normals=[];for(let n=0,i=r[t].normals.length;n<i;n++)e.normals.push(r[t].normals[n].clone())}this.morphTargets.push(e)}const s=t.morphNormals;for(let t=0,e=s.length;t<e;t++){const e={};if(void 0!==s[t].vertexNormals){e.vertexNormals=[];for(let n=0,i=s[t].vertexNormals.length;n<i;n++){const i=s[t].vertexNormals[n],r={};r.a=i.a.clone(),r.b=i.b.clone(),r.c=i.c.clone(),e.vertexNormals.push(r)}}if(void 0!==s[t].faceNormals){e.faceNormals=[];for(let n=0,i=s[t].faceNormals.length;n<i;n++)e.faceNormals.push(s[t].faceNormals[n].clone())}this.morphNormals.push(e)}const o=t.skinWeights;for(let t=0,e=o.length;t<e;t++)this.skinWeights.push(o[t].clone());const a=t.skinIndices;for(let t=0,e=a.length;t<e;t++)this.skinIndices.push(a[t].clone());const l=t.lineDistances;for(let t=0,e=l.length;t<e;t++)this.lineDistances.push(l[t]);const c=t.boundingBox;null!==c&&(this.boundingBox=c.clone());const u=t.boundingSphere;return null!==u&&(this.boundingSphere=u.clone()),this.elementsNeedUpdate=t.elementsNeedUpdate,this.verticesNeedUpdate=t.verticesNeedUpdate,this.uvsNeedUpdate=t.uvsNeedUpdate,this.normalsNeedUpdate=t.normalsNeedUpdate,this.colorsNeedUpdate=t.colorsNeedUpdate,this.lineDistancesNeedUpdate=t.lineDistancesNeedUpdate,this.groupsNeedUpdate=t.groupsNeedUpdate,this}toBufferGeometry(){const t=(new l0).fromGeometry(this),e=new S.a,n=new Float32Array(3*t.vertices.length);if(e.setAttribute(\\\\\\\"position\\\\\\\",new C.a(n,3).copyVector3sArray(t.vertices)),t.normals.length>0){const n=new Float32Array(3*t.normals.length);e.setAttribute(\\\\\\\"normal\\\\\\\",new C.a(n,3).copyVector3sArray(t.normals))}if(t.colors.length>0){const n=new Float32Array(3*t.colors.length);e.setAttribute(\\\\\\\"color\\\\\\\",new C.a(n,3).copyColorsArray(t.colors))}if(t.uvs.length>0){const n=new Float32Array(2*t.uvs.length);e.setAttribute(\\\\\\\"uv\\\\\\\",new C.a(n,2).copyVector2sArray(t.uvs))}if(t.uvs2.length>0){const n=new Float32Array(2*t.uvs2.length);e.setAttribute(\\\\\\\"uv2\\\\\\\",new C.a(n,2).copyVector2sArray(t.uvs2))}e.groups=t.groups;for(const n in t.morphTargets){const i=[],r=t.morphTargets[n];for(let t=0,e=r.length;t<e;t++){const e=r[t],n=new C.c(3*e.data.length,3);n.name=e.name,i.push(n.copyVector3sArray(e.data))}e.morphAttributes[n]=i}if(t.skinIndices.length>0){const n=new C.c(4*t.skinIndices.length,4);e.setAttribute(\\\\\\\"skinIndex\\\\\\\",n.copyVector4sArray(t.skinIndices))}if(t.skinWeights.length>0){const n=new C.c(4*t.skinWeights.length,4);e.setAttribute(\\\\\\\"skinWeight\\\\\\\",n.copyVector4sArray(t.skinWeights))}return null!==t.boundingSphere&&(e.boundingSphere=t.boundingSphere.clone()),null!==t.boundingBox&&(e.boundingBox=t.boundingBox.clone()),e}computeTangents(){console.error(\\\\\\\"THREE.Geometry: .computeTangents() has been removed.\\\\\\\")}computeLineDistances(){console.error(\\\\\\\"THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.\\\\\\\")}applyMatrix(t){return console.warn(\\\\\\\"THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4().\\\\\\\"),this.applyMatrix4(t)}dispose(){this.dispatchEvent({type:\\\\\\\"dispose\\\\\\\"})}static createBufferGeometryFromObject(t){let e=new S.a;const n=t.geometry;if(t.isPoints||t.isLine){const t=new C.c(3*n.vertices.length,3),i=new C.c(3*n.colors.length,3);if(e.setAttribute(\\\\\\\"position\\\\\\\",t.copyVector3sArray(n.vertices)),e.setAttribute(\\\\\\\"color\\\\\\\",i.copyColorsArray(n.colors)),n.lineDistances&&n.lineDistances.length===n.vertices.length){const t=new C.c(n.lineDistances.length,1);e.setAttribute(\\\\\\\"lineDistance\\\\\\\",t.copyArray(n.lineDistances))}null!==n.boundingSphere&&(e.boundingSphere=n.boundingSphere.clone()),null!==n.boundingBox&&(e.boundingBox=n.boundingBox.clone())}else t.isMesh&&(e=n.toBufferGeometry());return e}}a0.prototype.isGeometry=!0;class l0{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(t){const e=[];let n,i,r;const s=t.faces;for(i=0;i<s.length;i++){const t=s[i];t.materialIndex!==r&&(r=t.materialIndex,void 0!==n&&(n.count=3*i-n.start,e.push(n)),n={start:3*i,materialIndex:r})}void 0!==n&&(n.count=3*i-n.start,e.push(n)),this.groups=e}fromGeometry(t){const e=t.faces,n=t.vertices,i=t.faceVertexUvs,r=i[0]&&i[0].length>0,s=i[1]&&i[1].length>0,o=t.morphTargets,a=o.length;let l;if(a>0){l=[];for(let t=0;t<a;t++)l[t]={name:o[t].name,data:[]};this.morphTargets.position=l}const c=t.morphNormals,u=c.length;let h;if(u>0){h=[];for(let t=0;t<u;t++)h[t]={name:c[t].name,data:[]};this.morphTargets.normal=h}const p=t.skinIndices,_=t.skinWeights,m=p.length===n.length,f=_.length===n.length;n.length>0&&0===e.length&&console.error(\\\\\\\"THREE.DirectGeometry: Faceless geometries are not supported.\\\\\\\");for(let t=0;t<e.length;t++){const g=e[t];this.vertices.push(n[g.a],n[g.b],n[g.c]);const v=g.vertexNormals;if(3===v.length)this.normals.push(v[0],v[1],v[2]);else{const t=g.normal;this.normals.push(t,t,t)}const y=g.vertexColors;if(3===y.length)this.colors.push(y[0],y[1],y[2]);else{const t=g.color;this.colors.push(t,t,t)}if(!0===r){const e=i[0][t];void 0!==e?this.uvs.push(e[0],e[1],e[2]):(console.warn(\\\\\\\"THREE.DirectGeometry.fromGeometry(): Undefined vertexUv \\\\\\\",t),this.uvs.push(new d.a,new d.a,new d.a))}if(!0===s){const e=i[1][t];void 0!==e?this.uvs2.push(e[0],e[1],e[2]):(console.warn(\\\\\\\"THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 \\\\\\\",t),this.uvs2.push(new d.a,new d.a,new d.a))}for(let t=0;t<a;t++){const e=o[t].vertices;l[t].data.push(e[g.a],e[g.b],e[g.c])}for(let e=0;e<u;e++){const n=c[e].vertexNormals[t];h[e].data.push(n.a,n.b,n.c)}m&&this.skinIndices.push(p[g.a],p[g.b],p[g.c]),f&&this.skinWeights.push(_[g.a],_[g.b],_[g.c])}return this.computeGroups(t),this.verticesNeedUpdate=t.verticesNeedUpdate,this.normalsNeedUpdate=t.normalsNeedUpdate,this.colorsNeedUpdate=t.colorsNeedUpdate,this.uvsNeedUpdate=t.uvsNeedUpdate,this.groupsNeedUpdate=t.groupsNeedUpdate,null!==t.boundingSphere&&(this.boundingSphere=t.boundingSphere.clone()),null!==t.boundingBox&&(this.boundingBox=t.boundingBox.clone()),this}}class c0{constructor(t,e,n,i,r,s=0){this.a=t,this.b=e,this.c=n,this.normal=i&&i.isVector3?i:new p.a,this.vertexNormals=Array.isArray(i)?i:[],this.color=r&&r.isColor?r:new D.a,this.vertexColors=Array.isArray(r)?r:[],this.materialIndex=s}clone(){return(new this.constructor).copy(this)}copy(t){this.a=t.a,this.b=t.b,this.c=t.c,this.normal.copy(t.normal),this.color.copy(t.color),this.materialIndex=t.materialIndex;for(let e=0,n=t.vertexNormals.length;e<n;e++)this.vertexNormals[e]=t.vertexNormals[e].clone();for(let e=0,n=t.vertexColors.length;e<n;e++)this.vertexColors[e]=t.vertexColors[e].clone();return this}}var u0=function(t){this.subdivisions=void 0===t?1:t};u0.prototype.modify=function(t){var e=t.isBufferGeometry;(t=e?(new a0).fromBufferGeometry(t):t.clone()).mergeVertices(6);for(var n=this.subdivisions;n-- >0;)this.smooth(t);return t.computeFaceNormals(),t.computeVertexNormals(),e?t.toBufferGeometry():t},function(){var t=[\\\\\\\"a\\\\\\\",\\\\\\\"b\\\\\\\",\\\\\\\"c\\\\\\\"];function e(t,e,n){return n[Math.min(t,e)+\\\\\\\"_\\\\\\\"+Math.max(t,e)]}function n(t,e,n,i,r,s){var o,a=Math.min(t,e),l=Math.max(t,e),c=a+\\\\\\\"_\\\\\\\"+l;c in i?o=i[c]:(o={a:n[a],b:n[l],newEdge:null,faces:[]},i[c]=o);o.faces.push(r),s[t].edges.push(o),s[e].edges.push(o)}function i(t,e,n,i,r){t.push(new c0(e,n,i,void 0,void 0,r))}function r(t,e){return Math.abs(e-t)/2+Math.min(t,e)}function s(t,e,n,i){t.push([e.clone(),n.clone(),i.clone()])}u0.prototype.smooth=function(o){var a,l,c,u,h,_,m,f,g,v,y,x,b,w=new p.a,T=[];a=o.vertices,l=o.faces;var A,E,M,S,C,N,L,O,R,P,I,F,D,k,B=void 0!==(c=o.faceVertexUvs)[0]&&c[0].length>0;if(B)for(var z=0;z<c.length;z++)T.push([]);for(m in function(t,e,i,r){var s,o,a;for(s=0,o=t.length;s<o;s++)i[s]={edges:[]};for(s=0,o=e.length;s<o;s++)n((a=e[s]).a,a.b,t,r,a,i),n(a.b,a.c,t,r,a,i),n(a.c,a.a,t,r,a,i)}(a,l,v=new Array(a.length),y={}),x=[],y){for(E=y[m],M=new p.a,C=3/8,N=1/8,2!=(L=E.faces.length)&&(C=.5,N=0),M.addVectors(E.a,E.b).multiplyScalar(C),w.set(0,0,0),z=0;z<L;z++){for(S=E.faces[z],g=0;g<3&&((A=a[S[t[g]]])===E.a||A===E.b);g++);w.add(A)}w.multiplyScalar(N),M.add(w),E.newEdge=x.length,x.push(M)}for(b=[],m=0,f=a.length;m<f;m++){for(D=a[m],3==(_=(F=v[m].edges).length)?O=3/16:_>3&&(O=3/(8*_)),R=1-_*O,P=O,_<=2&&2==_&&(R=3/4,P=1/8),k=D.clone().multiplyScalar(R),w.set(0,0,0),z=0;z<_;z++)A=(I=F[z]).a!==D?I.a:I.b,w.add(A);w.multiplyScalar(P),k.add(w),b.push(k)}u=b.concat(x);var U,G,V,H,j,W,q,X=b.length;h=[];var Y=new d.a,$=new d.a,J=new d.a;for(m=0,f=l.length;m<f;m++)if(i(h,U=e((S=l[m]).a,S.b,y).newEdge+X,G=e(S.b,S.c,y).newEdge+X,V=e(S.c,S.a,y).newEdge+X,S.materialIndex),i(h,S.a,U,V,S.materialIndex),i(h,S.b,G,U,S.materialIndex),i(h,S.c,V,G,S.materialIndex),B)for(z=0;z<c.length;z++)j=(H=c[z][m])[0],W=H[1],q=H[2],Y.set(r(j.x,W.x),r(j.y,W.y)),$.set(r(W.x,q.x),r(W.y,q.y)),J.set(r(j.x,q.x),r(j.y,q.y)),s(T[z],Y,$,J),s(T[z],j,Y,J),s(T[z],W,$,Y),s(T[z],q,J,$);o.vertices=u,o.faces=h,B&&(o.faceVertexUvs=T)}}();class h0 extends pG{static type(){return\\\\\\\"subdivide\\\\\\\"}cook(t,e){const n=t[0],i=new u0(e.subdivisions);for(let t of n.objects()){const e=t.geometry;if(e){const n=i.modify(e);t.geometry=n}}return n}}h0.DEFAULT_PARAMS={subdivisions:1};const d0=h0.DEFAULT_PARAMS;const p0=new class extends aa{constructor(){super(...arguments),this.subdivisions=oa.INTEGER(d0.subdivisions,{range:[0,5],rangeLocked:[!0,!1]})}};class _0 extends gG{constructor(){super(...arguments),this.paramsConfig=p0}static type(){return\\\\\\\"subdivide\\\\\\\"}initializeNode(){this.io.inputs.setCount(1)}cook(t){this._operation=this._operation||new h0(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const m0=new class extends aa{};class f0 extends xG{constructor(){super(...arguments),this.paramsConfig=m0}static type(){return\\\\\\\"subnet\\\\\\\"}initializeNode(){this.io.inputs.setCount(0,4),this.io.inputs.initInputsClonedState(Qi.NEVER)}}const g0=new class extends aa{constructor(){super(...arguments),this.input=oa.INTEGER(0,{range:[0,3],rangeLocked:[!0,!0],callback:t=>{v0.PARAM_CALLBACK_reset(t)}})}};class v0 extends gG{constructor(){super(...arguments),this.paramsConfig=g0}static type(){return er.INPUT}initializeNode(){this.io.inputs.setCount(0),this.lifecycle.add_on_add_hook((()=>{this.set_parent_input_dependency()}))}async cook(){const t=this.pv.input,e=this.parent();if(e){if(e.io.inputs.has_input(t)){const n=await e.containerController.requestInputContainer(t);if(n){const t=n.coreContent();if(t)return void this.setCoreGroup(t)}}else this.states.error.set(`parent has no input ${t}`);this.cookController.endCook()}else this.states.error.set(\\\\\\\"subnet input has no parent\\\\\\\")}static PARAM_CALLBACK_reset(t){t.set_parent_input_dependency()}set_parent_input_dependency(){this._current_parent_input_graph_node&&this.removeGraphInput(this._current_parent_input_graph_node);const t=this.parent();t&&(this._current_parent_input_graph_node=t.io.inputs.input_graph_node(this.pv.input),this.addGraphInput(this._current_parent_input_graph_node))}}var y0=n(82);class x0 extends jg{constructor(t,e,n){super(t,e,n)}load(t){return new Promise((async(e,n)=>{const i=new y0.a(this.loadingManager),r=await this._urlToLoad();i.load(r,(i=>{try{const n=this._onLoaded(i,t);e(n)}catch(t){n([])}}))}))}parse(t,e){const n=new y0.a(this.loadingManager).parse(t);return this._onLoaded(n,e)}_onLoaded(t,e){const n=t.paths,i=new In.a;for(let t=0;t<n.length;t++){const r=n[t],s=r.userData,o=s.style.fill;e.drawFillShapes&&void 0!==o&&\\\\\\\"none\\\\\\\"!==o&&this._drawShapes(i,r,e);const a=s.style.stroke;e.drawStrokes&&void 0!==a&&\\\\\\\"none\\\\\\\"!==a&&this._drawStrokes(i,r,e)}return i}_drawShapes(t,e,n){const i=e.userData,r=new at.a({color:(new D.a).setStyle(i.style.fill),opacity:i.style.fillOpacity,transparent:i.style.fillOpacity<1,side:w.z,depthWrite:!1,wireframe:n.fillShapesWireframe}),s=e.toShapes(!0);for(let e=0;e<s.length;e++){const n=s[e],i=new KX(n),o=new k.a(i,r);t.add(o)}}_drawStrokes(t,e,n){const i=e.userData;if(n.strokesWireframe){const n=new wr.a({color:(new D.a).setStyle(i.style.stroke),opacity:i.style.strokeOpacity,transparent:i.style.strokeOpacity<1,side:w.z,depthWrite:!1});for(let r=0,s=e.subPaths.length;r<s;r++){const s=e.subPaths[r],o=y0.a.pointsToStroke(s.getPoints(),i.style);if(o){const e=new Tr.a(o,n);t.add(e)}}}else{const n=new at.a({color:(new D.a).setStyle(i.style.stroke),opacity:i.style.strokeOpacity,transparent:i.style.strokeOpacity<1,side:w.z,depthWrite:!1});for(let r=0,s=e.subPaths.length;r<s;r++){const s=e.subPaths[r],o=y0.a.pointsToStroke(s.getPoints(),i.style);if(o){const e=new k.a(o,n);t.add(e)}}}}}const b0=`${Gg}/models/svg/tiger.svg`;class w0 extends pG{static type(){return\\\\\\\"svg\\\\\\\"}cook(t,e){const n=new x0(e.url,this.scene(),this._node);return new Promise((async t=>{const i=await n.load(e);for(let t of i.children)this._ensure_geometry_has_index(t);t(this.createCoreGroupFromObjects(i.children))}))}_ensure_geometry_has_index(t){const e=t.geometry;e&&this.createIndexIfNone(e)}}w0.DEFAULT_PARAMS={url:b0,drawFillShapes:!0,fillShapesWireframe:!1,drawStrokes:!0,strokesWireframe:!1};const T0=w0.DEFAULT_PARAMS;const A0=new class extends aa{constructor(){super(...arguments),this.url=oa.STRING(T0.url,{fileBrowse:{type:[Ls.SVG]}}),this.reload=oa.BUTTON(null,{callback:(t,e)=>{E0.PARAM_CALLBACK_reload(t)}}),this.drawFillShapes=oa.BOOLEAN(T0.drawFillShapes),this.fillShapesWireframe=oa.BOOLEAN(T0.fillShapesWireframe),this.drawStrokes=oa.BOOLEAN(T0.drawStrokes),this.strokesWireframe=oa.BOOLEAN(T0.strokesWireframe)}};class E0 extends gG{constructor(){super(...arguments),this.paramsConfig=A0}static type(){return\\\\\\\"svg\\\\\\\"}async requiredModules(){return[Vn.SVGLoader]}initializeNode(){this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.url],(()=>{const t=this.pv.url;if(t){const e=t.split(\\\\\\\"/\\\\\\\");return e[e.length-1]}return\\\\\\\"\\\\\\\"}))}))}))}async cook(t){this._operation=this._operation||new w0(this.scene(),this.states,this);const e=await this._operation.cook(t,this.pv);this.setCoreGroup(e)}static PARAM_CALLBACK_reload(t){t.param_callback_reload()}param_callback_reload(){this.p.url.setDirty()}}const M0=\\\\\\\"geometry to switch to\\\\\\\";const S0=new class extends aa{constructor(){super(...arguments),this.input=oa.INTEGER(0,{range:[0,3],rangeLocked:[!0,!0]})}};class C0 extends gG{constructor(){super(...arguments),this.paramsConfig=S0}static type(){return\\\\\\\"switch\\\\\\\"}static displayedInputNames(){return[M0,M0,M0,M0]}initializeNode(){this.io.inputs.setCount(0,4),this.io.inputs.initInputsClonedState(Qi.NEVER),this.cookController.disallowInputsEvaluation()}async cook(){const t=this.pv.input;if(this.io.inputs.has_input(t)){const e=await this.containerController.requestInputContainer(t);if(e){const t=e.coreContent();if(t)return void this.setCoreGroup(t)}}else this.states.error.set(`no input ${t}`);this.cookController.endCook()}}class N0 extends nZ{constructor(t,e,n){super([1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],t,e,n),this.type=\\\\\\\"TetrahedronBufferGeometry\\\\\\\",this.parameters={radius:t,detail:e}}}const L0=new class extends aa{constructor(){super(...arguments),this.radius=oa.FLOAT(1),this.detail=oa.INTEGER(0,{range:[0,10],rangeLocked:[!0,!1]}),this.pointsOnly=oa.BOOLEAN(0),this.center=oa.VECTOR3([0,0,0])}};class O0 extends gG{constructor(){super(...arguments),this.paramsConfig=L0}static type(){return\\\\\\\"tetrahedron\\\\\\\"}cook(){const t=this.pv.pointsOnly,e=new N0(this.pv.radius,this.pv.detail,t);if(e.translate(this.pv.center.x,this.pv.center.y,this.pv.center.z),t){const t=this.createObject(e,Sr.POINTS);this.setObject(t)}else e.computeVertexNormals(),this.setGeometry(e)}}class R0 extends YX{constructor(t,e={}){const n=e.font;if(!n||!n.isFont)return new S.a;const i=n.generateShapes(t,e.size);e.depth=void 0!==e.height?e.height:50,void 0===e.bevelThickness&&(e.bevelThickness=10),void 0===e.bevelSize&&(e.bevelSize=8),void 0===e.bevelEnabled&&(e.bevelEnabled=!1),super(i,e),this.type=\\\\\\\"TextGeometry\\\\\\\"}}var P0=n(48);class I0 extends kf.a{constructor(t){super(t)}load(t,e,n,i){const r=this,s=new Df.a(this.manager);s.setPath(this.path),s.setRequestHeader(this.requestHeader),s.setWithCredentials(r.withCredentials),s.load(t,(function(t){let n;try{n=JSON.parse(t)}catch(e){console.warn(\\\\\\\"THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.\\\\\\\"),n=JSON.parse(t.substring(65,t.length-2))}const i=r.parse(n);e&&e(i)}),n,i)}parse(t){return new F0(t)}}class F0{constructor(t){this.type=\\\\\\\"Font\\\\\\\",this.data=t}generateShapes(t,e=100){const n=[],i=function(t,e,n){const i=Array.from(t),r=e/n.resolution,s=(n.boundingBox.yMax-n.boundingBox.yMin+n.underlineThickness)*r,o=[];let a=0,l=0;for(let t=0;t<i.length;t++){const e=i[t];if(\\\\\\\"\\\\n\\\\\\\"===e)a=0,l-=s;else{const t=D0(e,r,a,l,n);a+=t.offsetX,o.push(t.path)}}return o}(t,e,this.data);for(let t=0,e=i.length;t<e;t++)Array.prototype.push.apply(n,i[t].toShapes());return n}}function D0(t,e,n,i,r){const s=r.glyphs[t]||r.glyphs[\\\\\\\"?\\\\\\\"];if(!s)return void console.error('THREE.Font: character \\\\\\\"'+t+'\\\\\\\" does not exists in font family '+r.familyName+\\\\\\\".\\\\\\\");const o=new P0.a;let a,l,c,u,h,d,p,_;if(s.o){const t=s._cachedOutline||(s._cachedOutline=s.o.split(\\\\\\\" \\\\\\\"));for(let r=0,s=t.length;r<s;){switch(t[r++]){case\\\\\\\"m\\\\\\\":a=t[r++]*e+n,l=t[r++]*e+i,o.moveTo(a,l);break;case\\\\\\\"l\\\\\\\":a=t[r++]*e+n,l=t[r++]*e+i,o.lineTo(a,l);break;case\\\\\\\"q\\\\\\\":c=t[r++]*e+n,u=t[r++]*e+i,h=t[r++]*e+n,d=t[r++]*e+i,o.quadraticCurveTo(h,d,c,u);break;case\\\\\\\"b\\\\\\\":c=t[r++]*e+n,u=t[r++]*e+i,h=t[r++]*e+n,d=t[r++]*e+i,p=t[r++]*e+n,_=t[r++]*e+i,o.bezierCurveTo(h,d,p,_,c,u)}}}return{offsetX:s.ha*e,path:o}}F0.prototype.isFont=!0;class k0 extends jg{constructor(t,e,n){super(t,e,n),this._font_loader=new I0(this.loadingManager)}async load(){const t=this.extension(),e=await this._urlToLoad();switch(t){case\\\\\\\"ttf\\\\\\\":return this._loadTTF(e);case\\\\\\\"json\\\\\\\":return this._loadJSON(e);default:return null}}static requiredModules(t){switch(this.extension(t)){case\\\\\\\"ttf\\\\\\\":return[Vn.TTFLoader];case\\\\\\\"json\\\\\\\":return[Vn.SVGLoader]}}_loadTTF(t){return new Promise((async(e,n)=>{const i=await this._loadTTFLoader();i&&i.load(t,(t=>{const n=this._font_loader.parse(t);e(n)}),void 0,(()=>{n()}))}))}_loadJSON(t){return new Promise(((e,n)=>{this._font_loader.load(t,(t=>{e(t)}),void 0,(()=>{n()}))}))}async _loadTTFLoader(){const t=await ai.modulesRegister.module(Vn.TTFLoader);if(t)return new t(this.loadingManager)}static async loadSVGLoader(){const t=await ai.modulesRegister.module(Vn.SVGLoader);if(t)return t}}var B0;!function(t){t.MESH=\\\\\\\"mesh\\\\\\\",t.FLAT=\\\\\\\"flat\\\\\\\",t.LINE=\\\\\\\"line\\\\\\\",t.STROKE=\\\\\\\"stroke\\\\\\\"}(B0||(B0={}));const z0=[B0.MESH,B0.FLAT,B0.LINE,B0.STROKE],U0=\\\\\\\"failed to generate geometry. Try to remove some characters\\\\\\\";const G0=new class extends aa{constructor(){super(...arguments),this.font=oa.STRING(\\\\\\\"https://raw.githubusercontent.com/polygonjs/polygonjs-assets/master/fonts/droid_sans_regular.typeface.json\\\\\\\",{fileBrowse:{type:[Ls.FONT]}}),this.text=oa.STRING(\\\\\\\"polygonjs\\\\\\\",{multiline:!0}),this.type=oa.INTEGER(0,{menu:{entries:z0.map(((t,e)=>({name:t,value:e})))}}),this.size=oa.FLOAT(1,{range:[0,1],rangeLocked:[!0,!1]}),this.extrude=oa.FLOAT(.1,{visibleIf:{type:z0.indexOf(B0.MESH)}}),this.segments=oa.INTEGER(1,{range:[1,20],rangeLocked:[!0,!1],visibleIf:{type:z0.indexOf(B0.MESH)}}),this.strokeWidth=oa.FLOAT(.02,{visibleIf:{type:z0.indexOf(B0.STROKE)}})}};class V0 extends gG{constructor(){super(...arguments),this.paramsConfig=G0,this._loaded_fonts={}}static type(){return\\\\\\\"text\\\\\\\"}initializeNode(){this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.text],(()=>this.p.text.rawInput()))}))}))}async cook(){try{this._loaded_fonts[this.pv.font]=this._loaded_fonts[this.pv.font]||await this._loadFont()}catch(t){return void this.states.error.set(`count not load font (${this.pv.font})`)}const t=this._loaded_fonts[this.pv.font];if(t)switch(z0[this.pv.type]){case B0.MESH:return this._create_geometry_from_type_mesh(t);case B0.FLAT:return this._create_geometry_from_type_flat(t);case B0.LINE:return this._create_geometry_from_type_line(t);case B0.STROKE:return this._create_geometry_from_type_stroke(t);default:console.warn(\\\\\\\"type is not valid\\\\\\\")}}_create_geometry_from_type_mesh(t){const e=this.displayed_text(),n={font:t,size:this.pv.size,height:this.pv.extrude,curveSegments:this.pv.segments};try{const t=new R0(e,n);if(!t.index){const e=t.getAttribute(\\\\\\\"position\\\\\\\").array;t.setIndex(f.range(e.length/3))}this.setGeometry(t)}catch(t){this.states.error.set(U0)}}_create_geometry_from_type_flat(t){const e=this._get_shapes(t);if(e){var n=new KX(e);this.setGeometry(n)}}_create_geometry_from_type_line(t){const e=this.shapes_from_font(t);if(e){const t=[],n=[];let i=0;for(let r=0;r<e.length;r++){const s=e[r].getPoints();for(let e=0;e<s.length;e++){const r=s[e];t.push(r.x),t.push(r.y),t.push(0),n.push(i),e>0&&e<s.length-1&&n.push(i),i+=1}}const r=new S.a;r.setAttribute(\\\\\\\"position\\\\\\\",new C.c(t,3)),r.setIndex(n),this.setGeometry(r,Sr.LINE_SEGMENTS)}}async _create_geometry_from_type_stroke(t){const e=this.shapes_from_font(t);if(e){const t=await k0.loadSVGLoader();if(!t)return;var n=t.getStrokeStyle(this.pv.strokeWidth,\\\\\\\"white\\\\\\\",\\\\\\\"miter\\\\\\\",\\\\\\\"butt\\\\\\\",4);const i=[];for(let r=0;r<e.length;r++){const s=e[r].getPoints(),o=12,a=.001,l=t.pointsToStroke(s,n,o,a);i.push(l)}const r=cs(i);this.setGeometry(r)}}shapes_from_font(t){const e=this._get_shapes(t);if(e){const t=[];for(let n=0;n<e.length;n++){const i=e[n];if(i.holes&&i.holes.length>0)for(let e=0;e<i.holes.length;e++){const n=i.holes[e];t.push(n)}}return e.push.apply(e,t),e}}_get_shapes(t){const e=this.displayed_text();try{return t.generateShapes(e,this.pv.size)}catch(t){this.states.error.set(U0)}}displayed_text(){return this.pv.text||\\\\\\\"\\\\\\\"}_loadFont(){return new k0(this.pv.font,this.scene(),this).load()}async requiredModules(){return this.p.font.isDirty()&&await this.p.font.compute(),k0.requiredModules(this.pv.font)}}class H0 extends pG{static type(){return\\\\\\\"TextureCopy\\\\\\\"}async cook(t,e){const n=t[0],i=t[1];let r;for(let t of i.objects())t.traverse((t=>{const n=t.material;n&&(m.isArray(n)||r||(r=n[e.textureName]))}));if(r)for(let t of n.objects())t.traverse((t=>{const n=t.material;if(n&&!m.isArray(n)){n[e.textureName]=r;const t=n.uniforms;if(t){const n=t[e.textureName];n&&(n.value=r)}n.needsUpdate=!0}}));return n}}H0.DEFAULT_PARAMS={textureName:\\\\\\\"map\\\\\\\"},H0.INPUT_CLONED_STATE=[Qi.FROM_NODE,Qi.NEVER];const j0=H0.DEFAULT_PARAMS;const W0=new class extends aa{constructor(){super(...arguments),this.textureName=oa.STRING(j0.textureName)}};class q0 extends gG{constructor(){super(...arguments),this.paramsConfig=W0}static type(){return\\\\\\\"TextureCopy\\\\\\\"}static displayedInputNames(){return[\\\\\\\"objects to copy textures to\\\\\\\",\\\\\\\"objects to copy textures from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(2),this.io.inputs.initInputsClonedState(H0.INPUT_CLONED_STATE)}async cook(t){this._operation=this._operation||new H0(this.scene(),this.states);const e=await this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class X0 extends pG{static type(){return\\\\\\\"textureProperties\\\\\\\"}async cook(t,e){const n=t[0],i=[];for(let t of n.objects())e.applyToChildren?t.traverse((t=>{i.push(t)})):i.push(t);const r=i.map((t=>this._update_object(t,e)));return await Promise.all(r),n}async _update_object(t,e){const n=t.material;n&&await this._update_material(n,e)}async _update_material(t,e){let n=t.map;n&&await this._update_texture(n,e)}async _update_texture(t,e){this._updateEncoding(t,e),this._updateMapping(t,e),this._updateWrap(t,e),await this._updateAnisotropy(t,e),this._updateFilter(t,e)}_updateEncoding(t,e){e.tencoding&&(t.encoding=e.encoding,t.needsUpdate=!0)}_updateMapping(t,e){e.tmapping&&(t.mapping=e.mapping)}_updateWrap(t,e){e.twrap&&(t.wrapS=e.wrapS,t.wrapT=e.wrapT)}async _updateAnisotropy(t,e){if(e.tanisotropy)if(e.useRendererMaxAnisotropy){const e=await ai.renderersController.firstRenderer();e&&(t.anisotropy=e.capabilities.getMaxAnisotropy())}else t.anisotropy=e.anisotropy}_updateFilter(t,e){e.tminFilter&&(t.minFilter=e.minFilter),e.tmagFilter&&(t.magFilter=e.magFilter)}}X0.DEFAULT_PARAMS={applyToChildren:!1,tencoding:!1,encoding:w.U,tmapping:!1,mapping:w.Yc,twrap:!1,wrapS:w.wc,wrapT:w.wc,tanisotropy:!1,useRendererMaxAnisotropy:!1,anisotropy:2,tminFilter:!1,minFilter:Xm,tmagFilter:!1,magFilter:qm},X0.INPUT_CLONED_STATE=Qi.FROM_NODE;const Y0=X0.DEFAULT_PARAMS;const $0=new class extends aa{constructor(){super(...arguments),this.applyToChildren=oa.BOOLEAN(Y0.applyToChildren,{separatorAfter:!0}),this.tencoding=oa.BOOLEAN(Y0.tencoding),this.encoding=oa.INTEGER(Y0.encoding,{visibleIf:{tencoding:1},menu:{entries:eg.map((t=>({name:Object.keys(t)[0],value:Object.values(t)[0]})))}}),this.tmapping=oa.BOOLEAN(Y0.tmapping),this.mapping=oa.INTEGER(Y0.mapping,{visibleIf:{tmapping:1},menu:{entries:ig.map((t=>({name:Object.keys(t)[0],value:Object.values(t)[0]})))}}),this.twrap=oa.BOOLEAN(Y0.twrap),this.wrapS=oa.INTEGER(Y0.wrapS,{visibleIf:{twrap:1},menu:{entries:ng.map((t=>({name:Object.keys(t)[0],value:Object.values(t)[0]})))}}),this.wrapT=oa.INTEGER(Y0.wrapT,{visibleIf:{twrap:1},menu:{entries:ng.map((t=>({name:Object.keys(t)[0],value:Object.values(t)[0]})))},separatorAfter:!0}),this.tanisotropy=oa.BOOLEAN(Y0.tanisotropy),this.useRendererMaxAnisotropy=oa.BOOLEAN(Y0.useRendererMaxAnisotropy,{visibleIf:{tanisotropy:1}}),this.anisotropy=oa.INTEGER(Y0.anisotropy,{visibleIf:{tanisotropy:1,useRendererMaxAnisotropy:0},range:[0,32],rangeLocked:[!0,!1]}),this.tminFilter=oa.BOOLEAN(0),this.minFilter=oa.INTEGER(Y0.minFilter,{visibleIf:{tminFilter:1},menu:{entries:$m}}),this.tmagFilter=oa.BOOLEAN(0),this.magFilter=oa.INTEGER(Y0.magFilter,{visibleIf:{tmagFilter:1},menu:{entries:Ym}})}};class J0 extends gG{constructor(){super(...arguments),this.paramsConfig=$0}static type(){return\\\\\\\"textureProperties\\\\\\\"}static displayedInputNames(){return[\\\\\\\"objects with textures to change properties of\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(X0.INPUT_CLONED_STATE)}async cook(t){this._operation=this._operation||new X0(this.scene(),this.states);const e=await this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const Z0=new p.a(0,0,1);class Q0 extends pG{constructor(){super(...arguments),this._core_transform=new Mz}static type(){return\\\\\\\"torus\\\\\\\"}cook(t,e){const n=e.radius,i=e.radiusTube,r=e.segmentsRadial,s=e.segmentsTube,o=new eY(n,i,r,s);return o.translate(e.center.x,e.center.y,e.center.z),this._core_transform.rotate_geometry(o,Z0,e.direction),this.createCoreGroupFromGeometry(o)}}Q0.DEFAULT_PARAMS={radius:1,radiusTube:1,segmentsRadial:20,segmentsTube:12,direction:new p.a(0,1,0),center:new p.a(0,0,0)},Q0.INPUT_CLONED_STATE=Qi.FROM_NODE;const K0=Q0.DEFAULT_PARAMS;const t1=new class extends aa{constructor(){super(...arguments),this.radius=oa.FLOAT(K0.radius,{range:[0,1]}),this.radiusTube=oa.FLOAT(K0.radiusTube,{range:[0,1]}),this.segmentsRadial=oa.INTEGER(K0.segmentsRadial,{range:[1,50],rangeLocked:[!0,!1]}),this.segmentsTube=oa.INTEGER(K0.segmentsTube,{range:[1,50],rangeLocked:[!0,!1]}),this.direction=oa.VECTOR3(K0.direction),this.center=oa.VECTOR3(K0.center)}};class e1 extends gG{constructor(){super(...arguments),this.paramsConfig=t1}static type(){return\\\\\\\"torus\\\\\\\"}cook(t){this._operation=this._operation||new Q0(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class n1 extends pG{static type(){return\\\\\\\"torusKnot\\\\\\\"}cook(t,e){const n=e.radius,i=e.radiusTube,r=e.segmentsRadial,s=e.segmentsTube,o=e.p,a=e.q,l=new nY(n,i,r,s,o,a);return l.translate(e.center.x,e.center.y,e.center.z),this.createCoreGroupFromGeometry(l)}}n1.DEFAULT_PARAMS={radius:1,radiusTube:1,segmentsRadial:64,segmentsTube:8,p:2,q:3,center:new p.a(0,0,0)},n1.INPUT_CLONED_STATE=Qi.FROM_NODE;const i1=n1.DEFAULT_PARAMS;const r1=new class extends aa{constructor(){super(...arguments),this.radius=oa.FLOAT(i1.radius),this.radiusTube=oa.FLOAT(i1.radiusTube),this.segmentsRadial=oa.INTEGER(i1.segmentsRadial,{range:[1,128]}),this.segmentsTube=oa.INTEGER(i1.segmentsTube,{range:[1,32]}),this.p=oa.INTEGER(i1.p,{range:[1,10]}),this.q=oa.INTEGER(i1.q,{range:[1,10]}),this.center=oa.VECTOR3(i1.center)}};class s1 extends gG{constructor(){super(...arguments),this.paramsConfig=r1}static type(){return\\\\\\\"torusKnot\\\\\\\"}initializeNode(){}cook(t){this._operation=this._operation||new n1(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}var o1;!function(t){t.SET_PARAMS=\\\\\\\"set params\\\\\\\",t.UPDATE_MATRIX=\\\\\\\"update matrix\\\\\\\"}(o1||(o1={}));const a1=[o1.SET_PARAMS,o1.UPDATE_MATRIX];class l1 extends pG{constructor(){super(...arguments),this._core_transform=new Mz,this._point_pos=new p.a,this._object_scale=new p.a,this._r=new p.a,this._object_position=new p.a}static type(){return\\\\\\\"transform\\\\\\\"}cook(t,e){const n=t[0].objects();return this._apply_transform(n,e),t[0]}_apply_transform(t,e){const n=wz[e.applyOn];switch(n){case yz.GEOMETRIES:return this._update_geometries(t,e);case yz.OBJECTS:return this._update_objects(t,e)}ar.unreachable(n)}_update_geometries(t,e){const n=this._matrix(e);if(\\\\\\\"\\\\\\\"===e.group.trim())for(let i of t){const t=i.geometry;t&&(t.translate(-e.pivot.x,-e.pivot.y,-e.pivot.z),t.applyMatrix4(n),t.translate(e.pivot.x,e.pivot.y,e.pivot.z))}else{const i=dG._fromObjects(t).pointsFromGroup(e.group);for(let t of i){const i=t.getPosition(this._point_pos).sub(e.pivot);i.applyMatrix4(n),t.setPosition(i.add(e.pivot))}}}_update_objects(t,e){const n=a1[e.objectMode];switch(n){case o1.SET_PARAMS:return this._update_objects_params(t,e);case o1.UPDATE_MATRIX:return this._update_objects_matrix(t,e)}ar.unreachable(n)}_update_objects_params(t,e){for(let n of t){n.position.copy(e.t);const t=Az[e.rotationOrder];this._r.copy(e.r).multiplyScalar(Ln.a),n.rotation.set(this._r.x,this._r.y,this._r.z,t),this._object_scale.copy(e.s).multiplyScalar(e.scale),n.scale.copy(this._object_scale),n.updateMatrix()}}_update_objects_matrix(t,e){const n=this._matrix(e);for(let e of t)this._object_position.copy(e.position),e.position.multiplyScalar(0),e.updateMatrix(),e.applyMatrix4(n),e.position.add(this._object_position),e.updateMatrix()}_matrix(t){return this._core_transform.matrix(t.t,t.r,t.s,t.scale,Az[t.rotationOrder])}}l1.DEFAULT_PARAMS={applyOn:wz.indexOf(yz.GEOMETRIES),objectMode:a1.indexOf(o1.SET_PARAMS),group:\\\\\\\"\\\\\\\",rotationOrder:Az.indexOf(Tz.XYZ),t:new p.a(0,0,0),r:new p.a(0,0,0),s:new p.a(1,1,1),scale:1,pivot:new p.a(0,0,0)},l1.INPUT_CLONED_STATE=Qi.FROM_NODE;const c1=l1.DEFAULT_PARAMS;const u1=new class extends aa{constructor(){super(...arguments),this.applyOn=oa.INTEGER(c1.applyOn,{menu:{entries:wz.map(((t,e)=>({name:t,value:e})))}}),this.objectMode=oa.INTEGER(c1.objectMode,{visibleIf:{applyOn:wz.indexOf(yz.OBJECTS)},menu:{entries:a1.map(((t,e)=>({name:t,value:e})))}}),this.group=oa.STRING(c1.group,{visibleIf:{applyOn:wz.indexOf(yz.GEOMETRIES)}}),this.rotationOrder=oa.INTEGER(c1.rotationOrder,{menu:{entries:Az.map(((t,e)=>({name:t,value:e})))}}),this.t=oa.VECTOR3(c1.t),this.r=oa.VECTOR3(c1.r),this.s=oa.VECTOR3(c1.s),this.scale=oa.FLOAT(c1.scale,{range:[0,10]}),this.pivot=oa.VECTOR3(c1.pivot,{visibleIf:{applyOn:wz.indexOf(yz.GEOMETRIES)}})}};class h1 extends gG{constructor(){super(...arguments),this.paramsConfig=u1}static type(){return PK.TRANSFORM}static displayedInputNames(){return[\\\\\\\"geometries or objects to transform\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(l1.INPUT_CLONED_STATE),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.applyOn],(()=>wz[this.pv.applyOn]))}))}))}setApplyOn(t){this.p.applyOn.set(wz.indexOf(t))}setObjectMode(t){this.p.objectMode.set(a1.indexOf(t))}cook(t){this._operation=this._operation||new l1(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}const d1=new class extends aa{constructor(){super(...arguments),this.useSecondInput=oa.BOOLEAN(1),this.reference=oa.OPERATOR_PATH(\\\\\\\"\\\\\\\",{nodeSelection:{context:Ki.SOP},visibleIf:{useSecondInput:0}})}};class p1 extends gG{constructor(){super(...arguments),this.paramsConfig=d1}static type(){return\\\\\\\"transformCopy\\\\\\\"}static displayedInputNames(){return[\\\\\\\"objects to transform\\\\\\\",\\\\\\\"objects to copy transform from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1,2),this.io.inputs.initInputsClonedState([Qi.FROM_NODE,Qi.NEVER])}cook(t){this.pv.useSecondInput&&t[1]?this._copy_from_src_objects(t[0].objects(),t[1].objects()):this._copy_from_found_node(t[0].objects())}_copy_from_src_objects(t,e){let n,i;for(let r=0;r<t.length;r++)n=t[r],i=e[r],i.updateMatrix(),n.matrix.copy(i.matrix),n.matrix.decompose(n.position,n.quaternion,n.scale);this.setObjects(t)}async _copy_from_found_node(t){const e=this.p.reference.found_node_with_context(Ki.SOP);if(e){const n=(await e.compute()).coreContent();if(n){const e=n.objects();return void this._copy_from_src_objects(t,e)}}this.setObjects(t)}}const _1=Az.indexOf(Tz.XYZ),m1={menu:{entries:Az.map(((t,e)=>({name:t,value:e})))}};function f1(t){const e=[];for(let n=t+1;n<=6;n++)e.push({count:n});return{visibleIf:e}}const g1=new class extends aa{constructor(){super(...arguments),this.applyOn=oa.INTEGER(wz.indexOf(yz.GEOMETRIES),{menu:{entries:wz.map(((t,e)=>({name:t,value:e})))}}),this.count=oa.INTEGER(2,{range:[0,6],rangeLocked:[!0,!0]}),this.rotationOrder0=oa.INTEGER(_1,{separatorBefore:!0,...m1,...f1(0)}),this.r0=oa.VECTOR3([0,0,0],{...f1(0)}),this.rotationOrder1=oa.INTEGER(_1,{separatorBefore:!0,...m1,...f1(1)}),this.r1=oa.VECTOR3([0,0,0],{...f1(1)}),this.rotationOrder2=oa.INTEGER(_1,{separatorBefore:!0,...m1,...f1(2)}),this.r2=oa.VECTOR3([0,0,0],{...f1(2)}),this.rotationOrder3=oa.INTEGER(_1,{separatorBefore:!0,...m1,...f1(3)}),this.r3=oa.VECTOR3([0,0,0],{...f1(3)}),this.rotationOrder4=oa.INTEGER(_1,{separatorBefore:!0,...m1,...f1(4)}),this.r4=oa.VECTOR3([0,0,0],{...f1(4)}),this.rotationOrder5=oa.INTEGER(_1,{separatorBefore:!0,...m1,...f1(5)}),this.r5=oa.VECTOR3([0,0,0],{...f1(5)})}};class v1 extends gG{constructor(){super(...arguments),this.paramsConfig=g1,this._core_transform=new Mz,this._t=new p.a(0,0,0),this._s=new p.a(1,1,1),this._scale=1}static type(){return\\\\\\\"transformMulti\\\\\\\"}static displayedInputNames(){return[\\\\\\\"objects to transform\\\\\\\",\\\\\\\"objects to copy initial transform from\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1,2),this.io.inputs.initInputsClonedState([Qi.FROM_NODE,Qi.NEVER]),this.scene().dispatchController.onAddListener((()=>{this.params.onParamsCreated(\\\\\\\"params_label\\\\\\\",(()=>{this.params.label.init([this.p.applyOn],(()=>wz[this.pv.applyOn]))}))})),this.params.onParamsCreated(\\\\\\\"cache param pairs\\\\\\\",(()=>{this._rot_and_index_pairs=[[this.p.r0,this.p.rotationOrder0],[this.p.r1,this.p.rotationOrder1],[this.p.r2,this.p.rotationOrder2],[this.p.r3,this.p.rotationOrder3],[this.p.r4,this.p.rotationOrder4],[this.p.r5,this.p.rotationOrder5]]}))}cook(t){const e=t[0].objectsWithGeo(),n=t[1]?t[1].objectsWithGeo()[0]:void 0;this._apply_transforms(e,n),this.setObjects(e)}_apply_transforms(t,e){const n=wz[this.pv.applyOn];switch(n){case yz.GEOMETRIES:return this._apply_matrix_to_geometries(t,e);case yz.OBJECTS:return this._apply_matrix_to_objects(t,e)}ar.unreachable(n)}_apply_matrix_to_geometries(t,e){if(!this._rot_and_index_pairs)return;if(e){const n=e.geometry;if(n){const e=[Hr.POSITION,Hr.NORMAL,Hr.TANGENT];for(let i of e){const e=n.attributes[i];for(let n of t){const t=n.geometry.attributes[i];e&&t&&Wr.copy(e,t)}}}}let n;for(let e=0;e<this.pv.count;e++){n=this._rot_and_index_pairs[e];const i=this._matrix(n[0].value,n[1].value);for(let e of t)e.geometry.applyMatrix4(i)}}_apply_matrix_to_objects(t,e){if(!this._rot_and_index_pairs)return;if(e)for(let n of t)n.matrix.copy(e.matrix),n.matrix.decompose(n.position,n.quaternion,n.scale);let n;for(let e=0;e<this.pv.count;e++){n=this._rot_and_index_pairs[e];const i=this._matrix(n[0].value,n[1].value);for(let e of t)e.applyMatrix4(i)}}_matrix(t,e){return this._core_transform.matrix(this._t,t,this._s,this._scale,Az[e])}}var y1;!function(t){t.RESET_OBJECT=\\\\\\\"reset objects transform\\\\\\\",t.CENTER_GEO=\\\\\\\"center geometries\\\\\\\",t.PROMOTE_GEO_TO_OBJECT=\\\\\\\"center geometry and transform object\\\\\\\"}(y1||(y1={}));const x1=[y1.RESET_OBJECT,y1.CENTER_GEO,y1.PROMOTE_GEO_TO_OBJECT];const b1=new class extends aa{constructor(){super(...arguments),this.mode=oa.INTEGER(x1.indexOf(y1.RESET_OBJECT),{menu:{entries:x1.map(((t,e)=>({name:t,value:e})))}})}};class w1 extends gG{constructor(){super(...arguments),this.paramsConfig=b1,this._bbox_center=new p.a,this._translate_matrix=new A.a}static type(){return\\\\\\\"transformReset\\\\\\\"}static displayedInputNames(){return[\\\\\\\"objects to reset transform\\\\\\\",\\\\\\\"optional reference for center\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1,2),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}setMode(t){this.p.mode.set(x1.indexOf(t))}cook(t){const e=x1[this.pv.mode];this._select_mode(e,t)}_select_mode(t,e){switch(t){case y1.RESET_OBJECT:return this._reset_objects(e);case y1.CENTER_GEO:return this._center_geos(e,!1);case y1.PROMOTE_GEO_TO_OBJECT:return this._center_geos(e,!0)}ar.unreachable(t)}_reset_objects(t){const e=t[0],n=e.objects();for(let t of n)t.matrix.identity(),Mz.decompose_matrix(t);this.setCoreGroup(e)}_center_geos(t,e){const n=t[0],i=n.objectsWithGeo();let r=i;const s=t[1];s&&(r=s.objectsWithGeo());for(let t=0;t<i.length;t++){const n=i[t],s=r[t]||r[r.length-1],o=n.geometry,a=s.geometry;if(o&&a){a.computeBoundingBox();const t=a.boundingBox;t&&(t.getCenter(this._bbox_center),s.updateMatrixWorld(),this._bbox_center.applyMatrix4(s.matrixWorld),e&&(this._translate_matrix.identity(),this._translate_matrix.makeTranslation(this._bbox_center.x,this._bbox_center.y,this._bbox_center.z),n.matrix.multiply(this._translate_matrix),Mz.decompose_matrix(n),n.updateWorldMatrix(!1,!1)),this._translate_matrix.identity(),this._translate_matrix.makeTranslation(-this._bbox_center.x,-this._bbox_center.y,-this._bbox_center.z),o.applyMatrix4(this._translate_matrix))}}this.setCoreGroup(n)}}const T1=new p.a(0,1,0);const A1=new class extends aa{constructor(){super(...arguments),this.radius=oa.FLOAT(1,{range:[0,1]}),this.height=oa.FLOAT(1,{range:[0,1]}),this.segmentsRadial=oa.INTEGER(12,{range:[3,20],rangeLocked:[!0,!1]}),this.segmentsHeight=oa.INTEGER(1,{range:[1,20],rangeLocked:[!0,!1]}),this.cap=oa.BOOLEAN(1),this.center=oa.VECTOR3([0,0,0]),this.direction=oa.VECTOR3([0,0,1])}};class E1 extends gG{constructor(){super(...arguments),this.paramsConfig=A1,this._core_transform=new Mz}static type(){return\\\\\\\"tube\\\\\\\"}cook(){const t=new pU(this.pv.radius,this.pv.radius,this.pv.height,this.pv.segmentsRadial,this.pv.segmentsHeight,!this.pv.cap);this._core_transform.rotate_geometry(t,T1,this.pv.direction),t.translate(this.pv.center.x,this.pv.center.y,this.pv.center.z),this.setGeometry(t)}}function M1(t){return function(t){let e=0,n=0;for(const i of t)e+=i.w*i.h,n=Math.max(n,i.w);t.sort(((t,e)=>e.h-t.h));const i=[{x:0,y:0,w:Math.max(Math.ceil(Math.sqrt(e/.95)),n),h:1/0}];let r=0,s=0;for(const e of t)for(let t=i.length-1;t>=0;t--){const n=i[t];if(!(e.w>n.w||e.h>n.h)){if(e.x=n.x,e.y=n.y,s=Math.max(s,e.y+e.h),r=Math.max(r,e.x+e.w),e.w===n.w&&e.h===n.h){const e=i.pop();t<i.length&&(i[t]=e)}else e.h===n.h?(n.x+=e.w,n.w-=e.w):e.w===n.w?(n.y+=e.h,n.h-=e.h):(i.push({x:n.x+e.w,y:n.y,w:n.w-e.w,h:e.h}),n.y+=e.h,n.h-=e.h);break}}return{w:r,h:s,fill:e/(r*s)||0}}(t)}class S1 extends pG{static type(){return PK.UV_LAYOUT}cook(t,e){const n=t[0].objectsWithGeo(),i=[];for(let t of n){const e=t;e.isMesh&&i.push(e)}return this._layoutUVs(i,e),t[0]}_layoutUVs(t,e){var n;const i=[],r=new WeakMap,s=e.padding/e.res;let o=0;for(let a of t){a.geometry.hasAttribute(e.uv)||null===(n=this.states)||void 0===n||n.error.set(`attribute ${e.uv} not found`);const t={w:1+2*s,h:1+2*s};i.push(t),r.set(t,o),o++}const a=M1(i);for(let n of i){const i=n,o=r.get(n);if(null!=o){const n=t[o],r=n.geometry.getAttribute(e.uv).clone(),l=r.array;for(let t=0;t<r.array.length;t+=r.itemSize)l[t]=(r.array[t]+i.x+s)/a.w,l[t+1]=(r.array[t+1]+i.y+s)/a.h;n.geometry.setAttribute(e.uv2,r),n.geometry.getAttribute(e.uv2).needsUpdate=!0}}}}S1.DEFAULT_PARAMS={res:1024,padding:3,uv:\\\\\\\"uv\\\\\\\",uv2:\\\\\\\"uv2\\\\\\\"},S1.INPUT_CLONED_STATE=Qi.FROM_NODE;const C1=new class extends aa{constructor(){super(...arguments),this.res=oa.INTEGER(1024),this.padding=oa.INTEGER(3),this.uv=oa.STRING(\\\\\\\"uv\\\\\\\"),this.uv2=oa.STRING(\\\\\\\"uv2\\\\\\\")}};class N1 extends gG{constructor(){super(...arguments),this.paramsConfig=C1}static type(){return PK.UV_LAYOUT}static displayedInputNames(){return[\\\\\\\"geometries to unwrap UVs\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(S1.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new S1(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}var L1;!function(t){t.CHANGE=\\\\\\\"change\\\\\\\",t.MOVEEND=\\\\\\\"moveend\\\\\\\"}(L1||(L1={}));class O1{constructor(t){this._callback=t,this._updateAlways=!0,this._listenerAdded=!1,this._listener=this._executeCallback.bind(this)}removeTarget(){this.setTarget(void 0)}setTarget(t){t||this._removeCameraEvent();const e=this._target;this._target=t,null!=this._target&&this._executeCallback(),(null!=this._target?this._target.uuid:void 0)!==(null!=e?e.uuid:void 0)&&this._addCameraEvent()}setUpdateAlways(t){this._removeCameraEvent(),this._updateAlways=t,this._addCameraEvent()}_currentEventName(){return this._updateAlways?L1.CHANGE:L1.MOVEEND}_addCameraEvent(){this._listenerAdded||null!=this._target&&(this._target.addEventListener(this._currentEventName(),this._listener),this._listenerAdded=!0)}_removeCameraEvent(){!0===this._listenerAdded&&null!=this._target&&(this._target.removeEventListener(this._currentEventName(),this._listener),this._listenerAdded=!1)}_executeCallback(){null!=this._target&&this._callback(this._target)}}const R1=new class extends aa{constructor(){super(...arguments),this.camera=oa.OPERATOR_PATH(\\\\\\\"/perspective_camera1\\\\\\\",{nodeSelection:{context:Ki.OBJ}})}};class P1 extends gG{constructor(){super(...arguments),this.paramsConfig=R1,this._cameraController=new O1(this._updateUVsFromCamera.bind(this))}static type(){return\\\\\\\"uvProject\\\\\\\"}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(Qi.FROM_NODE)}cook(t){this._processed_core_group=t[0];const e=this.p.camera.found_node();null!=e?(this._camera_object=e.object,this._cameraController.setTarget(this._camera_object)):(this._camera_object=void 0,this._cameraController.removeTarget()),this.setCoreGroup(this._processed_core_group)}_updateUVsFromCamera(t){const e=this.parent();if(this._processed_core_group&&e){const t=this._processed_core_group.points(),n=e.object.matrixWorld;for(let e of t){const t=e.position(),i=this._vectorInCameraSpace(t,n);if(i){const t={x:1-(.5*i[0]+.5),y:.5*i[1]+.5};e.setAttribValue(\\\\\\\"uv\\\\\\\",t)}}}}_vectorInCameraSpace(t,e){if(this._camera_object)return t.applyMatrix4(e),t.project(this._camera_object).toArray()}}class I1 extends pG{static type(){return PK.UV_TRANSFORM}cook(t,e){const n=t[0].objectsWithGeo();for(let t of n){const n=t.geometry.getAttribute(e.attribName),i=n.array,r=i.length/2;for(let t=0;t<r;t++)i[2*t+0]=e.t.x+e.pivot.x+e.s.x*(i[2*t+0]-e.pivot.x),i[2*t+1]=e.t.y+e.pivot.y+e.s.y*(i[2*t+1]-e.pivot.y);n.needsUpdate=!0}return t[0]}}I1.DEFAULT_PARAMS={attribName:\\\\\\\"uv\\\\\\\",t:new d.a(0,0),s:new d.a(1,1),pivot:new d.a(0,0)},I1.INPUT_CLONED_STATE=Qi.FROM_NODE;const F1=I1.DEFAULT_PARAMS;const D1=new class extends aa{constructor(){super(...arguments),this.attribName=oa.STRING(F1.attribName),this.t=oa.VECTOR2(F1.t.toArray()),this.s=oa.VECTOR2(F1.s.toArray()),this.pivot=oa.VECTOR2(F1.pivot.toArray())}};class k1 extends gG{constructor(){super(...arguments),this.paramsConfig=D1}static type(){return PK.UV_TRANSFORM}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(I1.INPUT_CLONED_STATE)}async cook(t){this._operation=this._operation||new I1(this.scene(),this.states,this);const e=await this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class B1 extends pG{static type(){return PK.UV_UNWRAP}cook(t,e){const n=t[0].objectsWithGeo();for(let t of n){const n=t;n.isMesh&&this._unwrapUVs(n,e)}return t[0]}_unwrapUVs(t,e){var n,i,r;const s=[],o=t.geometry,a=null===(n=o.getIndex())||void 0===n?void 0:n.array;if(!a)return;if(!(null===(i=o.attributes.position)||void 0===i?void 0:i.array))return;const l=null===(r=o.attributes[e.uv])||void 0===r?void 0:r.array;if(!l)return;const c=a.length/3;for(let t=0;t<c;t++)s.push({w:1,h:1});const u=M1(s),h=new Array(l.length);for(let t=0;t<c;t++){const e=s[t],n=e.x/u.w,i=e.y/u.h,r=e.w/u.w,o=e.h/u.h,l=2*a[3*t+0],c=2*a[3*t+1],d=2*a[3*t+2];h[l]=n,h[l+1]=i,h[c]=n+r,h[c+1]=i,h[d]=n,h[d+1]=i+o}o.setAttribute(e.uv,new C.c(h,2))}}B1.DEFAULT_PARAMS={uv:\\\\\\\"uv\\\\\\\"},B1.INPUT_CLONED_STATE=Qi.FROM_NODE;const z1=new class extends aa{constructor(){super(...arguments),this.uv=oa.STRING(\\\\\\\"uv\\\\\\\")}};class U1 extends gG{constructor(){super(...arguments),this.paramsConfig=z1}static type(){return PK.UV_UNWRAP}static displayedInputNames(){return[\\\\\\\"geometries to unwrap UVs\\\\\\\"]}initializeNode(){this.io.inputs.setCount(1),this.io.inputs.initInputsClonedState(B1.INPUT_CLONED_STATE)}cook(t){this._operation=this._operation||new B1(this.scene(),this.states);const e=this._operation.cook(t,this.pv);this.setCoreGroup(e)}}class G1 extends ia{static context(){return Ki.SOP}cook(){this.cookController.endCook()}}class V1 extends G1{}class H1 extends V1{constructor(){super(...arguments),this._children_controller_context=Ki.ANIM}static type(){return tr.ANIM}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class j1 extends V1{constructor(){super(...arguments),this._children_controller_context=Ki.COP}static type(){return tr.COP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class W1 extends V1{constructor(){super(...arguments),this._children_controller_context=Ki.EVENT}static type(){return tr.EVENT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class q1 extends V1{constructor(){super(...arguments),this._children_controller_context=Ki.MAT}static type(){return tr.MAT}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class X1 extends G1{constructor(){super(...arguments),this.paramsConfig=new Jm,this.effectsComposerController=new Zm(this),this.displayNodeController=new Lm(this,this.effectsComposerController.displayNodeControllerCallbacks()),this._children_controller_context=Ki.POST}static type(){return tr.POST}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class Y1 extends V1{constructor(){super(...arguments),this._children_controller_context=Ki.ROP}static type(){return tr.ROP}createNode(t,e){return super.createNode(t,e)}children(){return super.children()}nodesByType(t){return super.nodesByType(t)}}class $1{constructor(t){this.param=t,this._require_dependency=!1}require_dependency(){return this._require_dependency}node(){return this._node=this._node||this.param.node}static requiredArguments(){return console.warn(\\\\\\\"Expression.Method._Base.required_arguments virtual method call. Please override\\\\\\\"),[]}static optionalArguments(){return[]}static minAllowedArgumentsCount(){return this.requiredArguments().length}static maxAllowedArgumentsCount(){return this.minAllowedArgumentsCount()+this.optionalArguments().length}static allowedArgumentsCount(t){return t>=this.minAllowedArgumentsCount()&&t<=this.maxAllowedArgumentsCount()}processArguments(t){throw\\\\\\\"Expression.Method._Base.process_arguments virtual method call. Please override\\\\\\\"}async getReferencedNodeContainer(t){const e=this.getReferencedNode(t);if(e){let t;if(t=e.isDirty()?await e.compute():e.containerController.container(),t){if(t.coreContent())return t}throw`referenced node invalid: ${e.path()}`}throw`invalid input (${t})`}getReferencedParam(t,e){const n=this.node();return n?xi.findParam(n,t,e):null}findReferencedGraphNode(t,e){if(!m.isNumber(t)){const n=t;return this.getReferencedNode(n,e)}{const e=t,n=this.node();if(n){return n.io.inputs.input_graph_node(e)}}return null}getReferencedNode(t,e){let n=null;const i=this.node();if(m.isString(t)){if(i){const r=t;n=xi.findNode(i,r,e)}}else if(i){const e=t;n=i.io.inputs.input(e)}return n||null}findDependency(t){return null}createDependencyFromIndexOrPath(t){const e=new co,n=this.findReferencedGraphNode(t,e);return n?this.createDependency(n,t,e):(ai.warn(\\\\\\\"node not found for path\\\\\\\",t),null)}createDependency(t,e,n){return ks.create(this.param,e,t,n)}}class J1 extends $1{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"arguments list\\\\\\\"],[\\\\\\\"number\\\\\\\",\\\\\\\"index\\\\\\\"]]}processArguments(t){return new Promise(((e,n)=>{if(2==t.length){const n=t[0],i=t[1];e(n.split(\\\\\\\" \\\\\\\")[i])}else e(0)}))}}class Z1 extends $1{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"arguments list\\\\\\\"]]}processArguments(t){return new Promise(((e,n)=>{if(1==t.length){e(t[0].split(\\\\\\\" \\\\\\\").length)}else e(0)}))}}const Q1=[\\\\\\\"min\\\\\\\",\\\\\\\"max\\\\\\\",\\\\\\\"size\\\\\\\",\\\\\\\"center\\\\\\\"],K1=[\\\\\\\"x\\\\\\\",\\\\\\\"y\\\\\\\",\\\\\\\"z\\\\\\\"];class t2 extends $1{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"path to node\\\\\\\"],[\\\\\\\"string\\\\\\\",\\\\\\\"vector name, min, max, size or center\\\\\\\"],[\\\\\\\"string\\\\\\\",\\\\\\\"component_name, x,y or z\\\\\\\"]]}findDependency(t){return this.createDependencyFromIndexOrPath(t)}processArguments(t){let e=0;return new Promise((async(n,i)=>{if(t.length>=1){const r=t[0],s=t[1],o=t[2];let a=null;try{a=await this.getReferencedNodeContainer(r)}catch(t){i(t)}a&&(e=this._get_value_from_container(a,s,o),n(e))}else n(0)}))}_get_value_from_container(t,e,n){const i=t.boundingBox();if(!e)return i;if(Q1.indexOf(e)>=0){let t=new p.a;switch(e){case\\\\\\\"size\\\\\\\":i.getSize(t);break;case\\\\\\\"center\\\\\\\":i.getCenter(t);break;default:t=i[e]}return n?K1.indexOf(n)>=0?t[n]:-1:t}return-1}}class e2 extends $1{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"path to node\\\\\\\"],[\\\\\\\"string\\\\\\\",\\\\\\\"component_name, x,y or z\\\\\\\"]]}findDependency(t){return this.createDependencyFromIndexOrPath(t)}processArguments(t){return new Promise((async(e,n)=>{if(t.length>=1){const i=t[0],r=t[1];let s=null;try{s=await this.getReferencedNodeContainer(i)}catch(t){n(t)}if(s){const t=s.boundingBox(),n=t.min.clone().add(t.max).multiplyScalar(.5);if(r){const t=n[r];e(null!=t?t:0)}else e(n)}}else e(0)}))}}class n2 extends $1{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"path to param\\\\\\\"]]}findDependency(t){const e=new co,n=this.getReferencedParam(t,e);return n?this.createDependency(n,t,e):null}async processArguments(t){return new Promise((async(e,n)=>{let i=0;if(1==t.length){const r=t[0],s=this.getReferencedParam(r);if(s){s.isDirty()&&await s.compute();const t=s.value;null!=t&&(i=t,e(i))}else n(0)}}))}}class i2 extends $1{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"path to copy\\\\\\\"],[\\\\\\\"integer\\\\\\\",\\\\\\\"default value\\\\\\\"]]}static optionalArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"attribute name (optional)\\\\\\\"]]}findDependency(t){const e=this.findReferencedGraphNode(t);if(e&&\\\\\\\"copy\\\\\\\"==e.type()){const n=e.stamp_node;return this.createDependency(n,t)}return null}processArguments(t){return new Promise(((e,n)=>{if(2==t.length||3==t.length){const n=t[0],i=t[1],r=t[2],s=this.node(),o=s?xi.findNode(s,n):null;let a;o&&o.type()==e$.type()&&(a=o.stamp_value(r)),null==a&&(a=i),e(a)}else e(0)}))}}class r2 extends $1{constructor(){super(...arguments),this._require_dependency=!0,this._resolution=new d.a}static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"path to node\\\\\\\"],[\\\\\\\"string\\\\\\\",\\\\\\\"component_name: x or y\\\\\\\"]]}findDependency(t){return this.createDependencyFromIndexOrPath(t)}async processArguments(t){if(1==t.length||2==t.length){const e=t[0],n=t[1],i=await this.getReferencedNodeContainer(e);if(i){const t=i.resolution();if(!n)return this._resolution.set(t[0],t[1]),this._resolution;if([0,\\\\\\\"0\\\\\\\",\\\\\\\"x\\\\\\\"].includes(n))return t[0];if([1,\\\\\\\"1\\\\\\\",\\\\\\\"y\\\\\\\"].includes(n))return t[1]}}return-1}}class s2 extends $1{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[]}async processArguments(t){return new Promise((async(t,e)=>{t(Zf.isMobile())}))}}class o2 extends $1{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[]}async processArguments(t){return new Promise((async(t,e)=>{t(Zf.isTouchDevice())}))}}class a2 extends $1{static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"javascript expression\\\\\\\"]]}async processArguments(t){let e=0;if(1==t.length){const n=t[0];if(this._function=this._function||this._create_function(n),this._function)try{e=this._function(this.param.scene(),this.param.node,this.param)}catch(t){console.warn(\\\\\\\"expression error\\\\\\\"),console.warn(t)}}return e}_create_function(t){return new Function(\\\\\\\"scene\\\\\\\",\\\\\\\"node\\\\\\\",\\\\\\\"param\\\\\\\",`return ${t}`)}}class l2 extends $1{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"path to node\\\\\\\"],[\\\\\\\"string\\\\\\\",\\\\\\\"attribute name\\\\\\\"],[\\\\\\\"index\\\\\\\",\\\\\\\"object index\\\\\\\"]]}findDependency(t){return this.createDependencyFromIndexOrPath(t)}processArguments(t){return new Promise((async(e,n)=>{if(3==t.length){const i=t[0],r=t[1],s=t[2];let o=null;try{o=await this.getReferencedNodeContainer(i)}catch(t){n(t)}if(o){e(this._get_value_from_container(o,r,s))}}else console.warn(`${t.length} given when expected 3`),e(0)}))}_get_value_from_container(t,e,n){const i=t.coreContent();if(i){const t=i.coreObjects()[n];return t?t.attribValue(e):0}return null}}class c2 extends $1{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"path to node\\\\\\\"]]}findDependency(t){return this.createDependencyFromIndexOrPath(t)}processArguments(t){return new Promise((async(e,n)=>{if(1==t.length){const i=t[0];let r;try{r=await this.getReferencedNodeContainer(i)}catch(t){return void n(t)}if(r){e(r.objectsCount())}}else e(0)}))}}class u2 extends $1{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"path to node\\\\\\\"]]}findDependency(t){const e=this.findReferencedGraphNode(t);if(e){const n=e;if(n.nameController){const e=n.nameController.graph_node;return this.createDependency(e,t)}}return null}processArguments(t){return new Promise(((e,n)=>{if(1==t.length){const n=t[0],i=this.getReferencedNode(n);if(i){const t=i.name();e(sr.tailDigits(t))}else e(0)}else e(0)}))}}class h2 extends $1{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"path to node\\\\\\\"]]}findDependency(t){const e=this.findReferencedGraphNode(t);if(e){const n=e;if(n.nameController){const e=n.nameController.graph_node;return this.createDependency(e,t)}}return null}processArguments(t){return new Promise(((e,n)=>{if(1==t.length){const n=t[0],i=this.getReferencedNode(n);if(i){e(i.name())}else e(0)}else e(0)}))}}class d2 extends $1{static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"number\\\\\\\"]]}processArguments(t){return new Promise((e=>{const n=t[0]||2;e(`${t[1]||0}`.padStart(n,\\\\\\\"0\\\\\\\"))}))}}class p2 extends $1{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"path to node\\\\\\\"],[\\\\\\\"string\\\\\\\",\\\\\\\"attribute name\\\\\\\"],[\\\\\\\"index\\\\\\\",\\\\\\\"point index\\\\\\\"]]}findDependency(t){return this.createDependencyFromIndexOrPath(t)}processArguments(t){return new Promise((async(e,n)=>{if(3==t.length){const i=t[0],r=t[1],s=t[2];let o=null;try{o=await this.getReferencedNodeContainer(i)}catch(t){n(t)}if(o){e(this._get_value_from_container(o,r,s))}}else console.warn(`${t.length} given when expected 3`),e(0)}))}_get_value_from_container(t,e,n){const i=t.coreContent();if(i){const t=i.points()[n];return t?t.attribValue(e):0}return null}}class _2 extends $1{constructor(){super(...arguments),this._require_dependency=!0}static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"path to node\\\\\\\"]]}findDependency(t){return this.createDependencyFromIndexOrPath(t)}processArguments(t){return new Promise((async(e,n)=>{if(1==t.length){const i=t[0];let r;try{r=await this.getReferencedNodeContainer(i)}catch(t){return void n(t)}if(r){e(r.pointsCount())}}else e(0)}))}}class m2 extends $1{static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"string to count characters of\\\\\\\"]]}async processArguments(t){let e=0;if(1==t.length){e=t[0].length}return e}}class f2 extends $1{static requiredArguments(){return[]}async processArguments(t){let e=\\\\\\\"\\\\\\\";for(let n of t)null==n&&(n=\\\\\\\"\\\\\\\"),e+=`${n}`;return e}}class g2 extends $1{static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"string to get index from\\\\\\\"],[\\\\\\\"string\\\\\\\",\\\\\\\"char to find index of\\\\\\\"]]}async processArguments(t){let e=-1;if(2==t.length){const n=t[0],i=t[1];e=n.indexOf(i)}return e}}class v2 extends $1{static requiredArguments(){return[[\\\\\\\"string\\\\\\\",\\\\\\\"string to get range from\\\\\\\"],[\\\\\\\"integer\\\\\\\",\\\\\\\"range start\\\\\\\"],[\\\\\\\"integer\\\\\\\",\\\\\\\"range size\\\\\\\"]]}async processArguments(t){let e=\\\\\\\"\\\\\\\";const n=t[0],i=t[1]||0;let r=t[2]||1;return n&&(e=n.substr(i,r)),e}}class y2 extends $1{constructor(){super(...arguments),this._require_dependency=!0,this._windowSize=new d.a}static requiredArguments(){return[[]]}findDependency(t){return this.param.addGraphInput(this.param.scene().windowController.graphNode()),null}processArguments(t){return new Promise((t=>{this._windowSize.set(window.innerWidth,window.innerHeight),t(this._windowSize)}))}}class x2{constructor(t,e){this._controller=t,this._node=e,this._deleted_params_data=new Map,this._created_spare_param_names=[],this._raw_input_serialized_by_param_name=new Map,this._init_value_serialized_by_param_name=new Map}get assembler(){return this._controller.assembler}createSpareParameters(){var t;const e={},n=this.assembler.param_configs(),i=n.map((t=>t.name())),r=b.clone(i);if(0==this._validateNames(r))return;b.clone(this._created_spare_param_names).concat(r).forEach((t=>{const n=this._node.params.get(t);if(n){this._raw_input_serialized_by_param_name.set(n.name(),n.rawInputSerialized()),this._init_value_serialized_by_param_name.set(n.name(),n.defaultValueSerialized());const t=hG.dispatch_param(n);if(t.required()){const e=t.data();this._deleted_params_data.set(n.name(),e)}}e.namesToDelete=e.namesToDelete||[],e.namesToDelete.push(t)}));for(let t of n)if(r.indexOf(t.name())>=0){const n=b.clone(t.param_options),i={spare:!0,computeOnDirty:!0,cook:!1},r=b.merge(n,i);let s=this._init_value_serialized_by_param_name.get(t.name());null==s&&(s=t.default_value);let o=this._raw_input_serialized_by_param_name.get(t.name());null==o&&(o=t.default_value),e.toAdd=e.toAdd||[],e.toAdd.push({name:t.name(),type:t.type(),init_value:s,raw_input:o,options:r})}this._node.params.updateParams(e),this._created_spare_param_names=(null===(t=e.toAdd)||void 0===t?void 0:t.map((t=>t.name)))||[];for(let t of n){const e=this._node.params.get(t.name());e&&(t.execute_callback(this._node,e),e.type()==Es.OPERATOR_PATH&&setTimeout((async()=>{e.isDirty()&&await e.compute(),e.options.executeCallback()}),200))}}_validateNames(t){const e=b.clone(this._node.params.non_spare_names),n=f.intersection(t,e);if(n.length>0){const t=`${this._node.path()} attempts to create spare params called '${n.join(\\\\\\\", \\\\\\\")}' with same name as params`;return this._node.states.error.set(t),!1}return!0}}class b2{constructor(t,e){this.node=t,this._globals_handler=new Sf,this._compile_required=!0,this._assembler=new e(this.node),this._spare_params_controller=new x2(this,this.node)}set_assembler_globals_handler(t){(this._globals_handler?this._globals_handler.id():null)!=(t?t.id():null)&&(this._globals_handler=t,this.set_compilation_required_and_dirty(),this._assembler.reset_configs())}get assembler(){return this._assembler}get globals_handler(){return this._globals_handler}add_output_inputs(t){this._assembler.add_output_inputs(t)}add_globals_outputs(t){this._assembler.add_globals_outputs(t)}allow_attribute_exports(){return this._assembler.allow_attribute_exports()}setCompilationRequired(t=!0){this._compile_required=t}set_compilation_required_and_dirty(t){this.setCompilationRequired(),this.node.setDirty(t)}compileRequired(){return this._compile_required}post_compile(){this.createSpareParameters(),this.setCompilationRequired(!1)}createSpareParameters(){this._spare_params_controller.createSpareParameters()}addFilterFragmentShaderCallback(t,e){this.assembler._addFilterFragmentShaderCallback(t,e),this.setCompilationRequired()}removeFilterFragmentShaderCallback(t){this.assembler._removeFilterFragmentShaderCallback(t),this.setCompilationRequired()}}var w2;!function(t){t.FUNCTION_DECLARATION=\\\\\\\"function_declaration\\\\\\\",t.DEFINE=\\\\\\\"define\\\\\\\",t.BODY=\\\\\\\"body\\\\\\\"}(w2||(w2={}));class T2{constructor(t,e,n){this._name=t,this._input_names=e,this._dependencies=n}name(){return this._name}input_names(){return this._input_names}dependencies(){return this._dependencies}}class A2{constructor(t,e={}){this._name=t,this._options=e}name(){return this._name}default_from_attribute(){return this._options.default_from_attribute||!1}default(){return this._options.default}if_condition(){return this._options.if}prefix(){return this._options.prefix||\\\\\\\"\\\\\\\"}suffix(){return this._options.suffix||\\\\\\\"\\\\\\\"}postLines(){return this._options.postLines}}class E2{constructor(t){this._shader_name=t,this._definitions_by_node_id=new Map,this._body_lines_by_node_id=new Map}get shader_name(){return this._shader_name}addDefinitions(t,e){for(let n of e)u.pushOnArrayAtEntry(this._definitions_by_node_id,t.graphNodeId(),n)}definitions(t){return this._definitions_by_node_id.get(t.graphNodeId())}addBodyLines(t,e){for(let n of e)u.pushOnArrayAtEntry(this._body_lines_by_node_id,t.graphNodeId(),n)}body_lines(t){return this._body_lines_by_node_id.get(t.graphNodeId())}}class M2{constructor(t,e,n){this._shader_names=t,this._current_shader_name=e,this._assembler=n,this._lines_controller_by_shader_name=new Map;for(let t of this._shader_names)this._lines_controller_by_shader_name.set(t,new E2(t))}assembler(){return this._assembler}shaderNames(){return this._shader_names}set_current_shader_name(t){this._current_shader_name=t}get current_shader_name(){return this._current_shader_name}addDefinitions(t,e,n){if(0==e.length)return;n=n||this._current_shader_name;const i=this._lines_controller_by_shader_name.get(n);i&&i.addDefinitions(t,e)}definitions(t,e){const n=this._lines_controller_by_shader_name.get(t);if(n)return n.definitions(e)}addBodyLines(t,e,n){if(0==e.length)return;n=n||this._current_shader_name;const i=this._lines_controller_by_shader_name.get(n);i&&i.addBodyLines(t,e)}body_lines(t,e){const n=this._lines_controller_by_shader_name.get(t);if(n)return n.body_lines(e)}}const S2={[w2.FUNCTION_DECLARATION]:\\\\\\\"\\\\\\\",[w2.DEFINE]:\\\\\\\";\\\\\\\",[w2.BODY]:\\\\\\\";\\\\\\\"},C2={[w2.FUNCTION_DECLARATION]:\\\\\\\"\\\\\\\",[w2.DEFINE]:\\\\\\\"\\\\\\\",[w2.BODY]:\\\\\\\"\\\\t\\\\\\\"};class N2{static node_comment(t,e){let n=`// ${t.path()}`,i=C2[e];if(e==w2.BODY){let e=this.node_distance_to_material(t);t.type()==er.OUTPUT&&(e+=1),i=i.repeat(e)}return e==w2.BODY&&(n=`${i}${n}`),n}static line_wrap(t,e,n){let i=!0;0!=e.indexOf(\\\\\\\"#if\\\\\\\")&&0!=e.indexOf(\\\\\\\"#endif\\\\\\\")||(i=!1);let r=C2[n];if(n==w2.BODY&&(r=r.repeat(this.node_distance_to_material(t))),e=`${r}${e}`,i){const t=e[e.length-1],i=S2[n];t!=i&&\\\\\\\"{\\\\\\\"!=t&&\\\\\\\"}\\\\\\\"!=t&&(e+=i)}return e}static post_line_separator(t){return t==w2.BODY?\\\\\\\"\\\\t\\\\\\\":\\\\\\\"\\\\\\\"}static node_distance_to_material(t){const e=t.parent();if(!e)return 0;if(e.context()!=t.context())return 1;{let n=1;return t.type()!=er.INPUT&&t.type()!=er.OUTPUT||(n=0),n+this.node_distance_to_material(e)}}}class L2{constructor(t,e,n){this._node_traverser=t,this._root_nodes_for_shader_method=e,this._assembler=n,this._param_configs_controller=new GI,this._param_configs_set_allowed=!0,this._lines=new Map}shaderNames(){return this._node_traverser.shaderNames()}buildFromNodes(t,e){this._node_traverser.traverse(t);const n=new Map;for(let t of this.shaderNames()){const e=this._node_traverser.nodes_for_shader_name(t);n.set(t,e)}const i=this._node_traverser.sorted_nodes();for(let t of this.shaderNames()){const e=this._root_nodes_for_shader_method(t);for(let i of e)u.pushOnArrayAtEntry(n,t,i)}const r=new Map;for(let t of i)r.set(t.graphNodeId(),!0);for(let e of t)r.get(e.graphNodeId())||(i.push(e),r.set(e.graphNodeId(),!0));for(let t of i)t.reset_code();for(let t of e)t.reset_code();this._shaders_collection_controller=new M2(this.shaderNames(),this.shaderNames()[0],this._assembler),this.reset();for(let t of this.shaderNames()){let e=n.get(t)||[];if(e=f.uniq(e),this._shaders_collection_controller.set_current_shader_name(t),e)for(let t of e)t.setLines(this._shaders_collection_controller)}if(this._param_configs_set_allowed){for(let t of e)t.setParamConfigs();this.setParamConfigs(e)}this.set_code_lines(i)}shaders_collection_controller(){return this._shaders_collection_controller}disallow_new_param_configs(){this._param_configs_set_allowed=!1}allow_new_param_configs(){this._param_configs_set_allowed=!0}reset(){for(let t of this.shaderNames()){const e=new Map;this._lines.set(t,e)}}param_configs(){return this._param_configs_controller.list()||[]}lines(t,e){var n;return(null===(n=this._lines.get(t))||void 0===n?void 0:n.get(e))||[]}all_lines(){return this._lines}setParamConfigs(t){this._param_configs_controller.reset();for(let e of t){const t=e.param_configs();if(t)for(let e of t)this._param_configs_controller.push(e)}}set_code_lines(t){for(let e of this.shaderNames())this.add_code_lines(t,e)}add_code_lines(t,e){this.addDefinitions(t,e,yf.FUNCTION,w2.FUNCTION_DECLARATION),this.addDefinitions(t,e,yf.UNIFORM,w2.DEFINE),this.addDefinitions(t,e,yf.VARYING,w2.DEFINE),this.addDefinitions(t,e,yf.ATTRIBUTE,w2.DEFINE),this.add_code_line_for_nodes_and_line_type(t,e,w2.BODY)}addDefinitions(t,e,n,i){if(!this._shaders_collection_controller)return;const r=[];for(let i of t){let t=this._shaders_collection_controller.definitions(e,i);if(t){t=t.filter((t=>t.definition_type==n));for(let e of t)r.push(e)}}if(r.length>0){const t=new vf(r),n=t.uniq();if(t.errored)throw`code builder error: ${t.error_message}`;const s=new Map,o=new Map;for(let t of n){const e=t.node.graphNodeId();o.has(e)||o.set(e,!0),u.pushOnArrayAtEntry(s,e,t)}const a=this._lines.get(e);o.forEach(((t,e)=>{const n=s.get(e);if(n){const t=n[0];if(t){const e=N2.node_comment(t.node,i);u.pushOnArrayAtEntry(a,i,e);for(let e of n){const n=N2.line_wrap(t.node,e.line,i);u.pushOnArrayAtEntry(a,i,n)}const r=N2.post_line_separator(i);u.pushOnArrayAtEntry(a,i,r)}}}))}}add_code_line_for_nodes_and_line_type(t,e,n){var i=(t=t.filter((t=>{if(this._shaders_collection_controller){const n=this._shaders_collection_controller.body_lines(e,t);return n&&n.length>0}}))).length;for(let r=0;r<i;r++){const i=r==t.length-1;this.add_code_line_for_node_and_line_type(t[r],e,n,i)}}add_code_line_for_node_and_line_type(t,e,n,i){if(!this._shaders_collection_controller)return;const r=this._shaders_collection_controller.body_lines(e,t);if(r&&r.length>0){const s=this._lines.get(e),o=N2.node_comment(t,n);if(u.pushOnArrayAtEntry(s,n,o),f.uniq(r).forEach((e=>{e=N2.line_wrap(t,e,n),u.pushOnArrayAtEntry(s,n,e)})),n!=w2.BODY||!i){const t=N2.post_line_separator(n);u.pushOnArrayAtEntry(s,n,t)}}}}class O2{constructor(t,e,n){this._parent_node=t,this._shader_names=e,this._input_names_for_shader_name_method=n,this._leaves_graph_id=new Map,this._graph_ids_by_shader_name=new Map,this._outputs_by_graph_id=new Map,this._depth_by_graph_id=new Map,this._graph_id_by_depth=new Map,this._graph=this._parent_node.scene().graph}reset(){this._leaves_graph_id.clear(),this._graph_ids_by_shader_name.clear(),this._outputs_by_graph_id.clear(),this._depth_by_graph_id.clear(),this._graph_id_by_depth.clear(),this._shader_names.forEach((t=>{this._graph_ids_by_shader_name.set(t,new Map)}))}shaderNames(){return this._shader_names}input_names_for_shader_name(t,e){return this._input_names_for_shader_name_method(t,e)}traverse(t){this.reset();for(let t of this.shaderNames())this._leaves_graph_id.set(t,new Map);for(let e of this.shaderNames()){this._shader_name=e;for(let e of t)this.find_leaves_from_root_node(e),this.set_nodes_depth()}this._depth_by_graph_id.forEach(((t,e)=>{null!=t&&u.pushOnArrayAtEntry(this._graph_id_by_depth,t,e)}))}leaves_from_nodes(t){var e;this._shader_name=xf.LEAVES_FROM_NODES_SHADER,this._graph_ids_by_shader_name.set(this._shader_name,new Map),this._leaves_graph_id.set(this._shader_name,new Map);for(let e of t)this.find_leaves(e);const n=[];return null===(e=this._leaves_graph_id.get(this._shader_name))||void 0===e||e.forEach(((t,e)=>{n.push(e)})),this._graph.nodesFromIds(n)}nodes_for_shader_name(t){const e=[];this._graph_id_by_depth.forEach(((t,n)=>{e.push(n)})),e.sort(((t,e)=>t-e));const n=[],i=new Map;return e.forEach((e=>{const r=this._graph_id_by_depth.get(e);r&&r.forEach((e=>{var r;if(null===(r=this._graph_ids_by_shader_name.get(t))||void 0===r?void 0:r.get(e)){const r=this._graph.nodeFromId(e);this.add_nodes_with_children(r,i,n,t)}}))})),n}sorted_nodes(){const t=[];this._graph_id_by_depth.forEach(((e,n)=>{t.push(n)})),t.sort(((t,e)=>t-e));const e=[],n=new Map;return t.forEach((t=>{const i=this._graph_id_by_depth.get(t);if(i)for(let t of i){const i=this._graph.nodeFromId(t);i&&this.add_nodes_with_children(i,n,e)}})),e}add_nodes_with_children(t,e,n,i){if(e.get(t.graphNodeId())||(n.push(t),e.set(t.graphNodeId(),!0)),t.type()==er.INPUT){const r=t.parent();if(r){const s=this.sorted_nodes_for_shader_name_for_parent(r,i);for(let r of s)r.graphNodeId()!=t.graphNodeId()&&this.add_nodes_with_children(r,e,n,i)}}}sorted_nodes_for_shader_name_for_parent(t,e){const n=[];this._graph_id_by_depth.forEach(((t,e)=>{n.push(e)})),n.sort(((t,e)=>t-e));const i=[];n.forEach((n=>{const r=this._graph_id_by_depth.get(n);r&&r.forEach((n=>{var r;if(!e||(null===(r=this._graph_ids_by_shader_name.get(e))||void 0===r?void 0:r.get(n))){const e=this._graph.nodeFromId(n);e.parent()==t&&i.push(e)}}))}));const r=i[0];return t.context()==r.context()&&i.push(t),i}find_leaves_from_root_node(t){var e;null===(e=this._graph_ids_by_shader_name.get(this._shader_name))||void 0===e||e.set(t.graphNodeId(),!0);const n=this.input_names_for_shader_name(t,this._shader_name);if(n)for(let e of n){const n=t.io.inputs.named_input(e);n&&(u.pushOnArrayAtEntry(this._outputs_by_graph_id,n.graphNodeId(),t.graphNodeId()),this.find_leaves(n))}this._outputs_by_graph_id.forEach(((t,e)=>{this._outputs_by_graph_id.set(e,f.uniq(t))}))}find_leaves(t){var e;null===(e=this._graph_ids_by_shader_name.get(this._shader_name))||void 0===e||e.set(t.graphNodeId(),!0);const n=this._find_inputs_or_children(t),i=f.compact(n),r=f.uniq(i.map((t=>t.graphNodeId()))).map((t=>this._graph.nodeFromId(t)));if(r.length>0)for(let e of r)u.pushOnArrayAtEntry(this._outputs_by_graph_id,e.graphNodeId(),t.graphNodeId()),this.find_leaves(e);else this._leaves_graph_id.get(this._shader_name).set(t.graphNodeId(),!0)}_find_inputs_or_children(t){var e,n;if(t.type()==er.INPUT)return(null===(e=t.parent())||void 0===e?void 0:e.io.inputs.inputs())||[];if(t.childrenAllowed()){return[null===(n=t.childrenController)||void 0===n?void 0:n.output_node()]}return t.io.inputs.inputs()}set_nodes_depth(){this._leaves_graph_id.forEach(((t,e)=>{t.forEach(((t,e)=>{this.set_node_depth(e)}))}))}set_node_depth(t,e=0){const n=this._depth_by_graph_id.get(t);null!=n?this._depth_by_graph_id.set(t,Math.max(n,e)):this._depth_by_graph_id.set(t,e);const i=this._outputs_by_graph_id.get(t);i&&i.forEach((t=>{this.set_node_depth(t,e+1)}))}}const R2=new Map([[xf.VERTEX,\\\\\\\"#include <common>\\\\\\\"],[xf.FRAGMENT,\\\\\\\"#include <common>\\\\\\\"]]),P2=new Map([[xf.VERTEX,\\\\\\\"#include <color_vertex>\\\\\\\"],[xf.FRAGMENT,\\\\\\\"vec4 diffuseColor = vec4( diffuse, opacity );\\\\\\\"]]),I2=new Map([[xf.VERTEX,[\\\\\\\"#include <begin_vertex>\\\\\\\",\\\\\\\"#include <beginnormal_vertex>\\\\\\\"]],[xf.FRAGMENT,[]]]);class F2 extends class{}{constructor(t){super(),this._gl_parent_node=t,this._shaders_by_name=new Map,this._lines=new Map,this._root_nodes=[],this._leaf_nodes=[],this._uniforms_time_dependent=!1,this._uniforms_resolution_dependent=!1}setGlParentNode(t){this._overriden_gl_parent_node=t}currentGlParentNode(){return this._overriden_gl_parent_node||this._gl_parent_node}compile(){}_template_shader_for_shader_name(t){var e,n;switch(t){case xf.VERTEX:return null===(e=this.templateShader())||void 0===e?void 0:e.vertexShader;case xf.FRAGMENT:return null===(n=this.templateShader())||void 0===n?void 0:n.fragmentShader}}get globals_handler(){var t;return null===(t=this.currentGlParentNode().assemblerController)||void 0===t?void 0:t.globals_handler}compileAllowed(){var t;return null!=(null===(t=this.currentGlParentNode().assemblerController)||void 0===t?void 0:t.globals_handler)}shaders_by_name(){return this._shaders_by_name}_build_lines(){for(let t of this.shaderNames()){const e=this._template_shader_for_shader_name(t);e&&this._replace_template(e,t)}}set_root_nodes(t){this._root_nodes=t}templateShader(){}addUniforms(t){for(let e of this.param_configs())t[e.uniform_name]=e.uniform;this.uniformsTimeDependent()&&(t.time={value:this.currentGlParentNode().scene().time()}),this.uniforms_resolution_dependent()&&(t.resolution={value:new d.a(1e3,1e3)})}root_nodes_by_shader_name(t){const e=[];for(let t of this._root_nodes)switch(t.type()){case UI.type():case HI.type():e.push(t);break;case gf.type():case Lf.type():e.push(t)}return e}leaf_nodes_by_shader_name(t){const e=[];for(let t of this._leaf_nodes)switch(t.type()){case HP.type():e.push(t);break;case gf.type():}return e}set_node_lines_globals(t,e){}set_node_lines_output(t,e){}set_node_lines_attribute(t,e){}codeBuilder(){return this._code_builder=this._code_builder||this._create_code_builder()}_resetCodeBuilder(){this._code_builder=void 0}_create_code_builder(){const t=new O2(this.currentGlParentNode(),this.shaderNames(),((t,e)=>this.input_names_for_shader_name(t,e)));return new L2(t,(t=>this.root_nodes_by_shader_name(t)),this)}build_code_from_nodes(t){const e=Of.findParamGeneratingNodes(this.currentGlParentNode());this.codeBuilder().buildFromNodes(t,e)}allow_new_param_configs(){this.codeBuilder().allow_new_param_configs()}disallow_new_param_configs(){this.codeBuilder().disallow_new_param_configs()}builder_param_configs(){return this.codeBuilder().param_configs()}builder_lines(t,e){return this.codeBuilder().lines(t,e)}all_builder_lines(){return this.codeBuilder().all_lines()}param_configs(){return(this._param_config_owner||this.codeBuilder()).param_configs()}set_param_configs_owner(t){this._param_config_owner=t,this._param_config_owner?this.codeBuilder().disallow_new_param_configs():this.codeBuilder().allow_new_param_configs()}static output_input_connection_points(){return[new Vo(\\\\\\\"position\\\\\\\",Do.VEC3),new Vo(\\\\\\\"normal\\\\\\\",Do.VEC3),new Vo(\\\\\\\"color\\\\\\\",Do.VEC3),new Vo(\\\\\\\"alpha\\\\\\\",Do.FLOAT),new Vo(\\\\\\\"uv\\\\\\\",Do.VEC2)]}add_output_inputs(t){t.io.inputs.setNamedInputConnectionPoints(F2.output_input_connection_points())}static create_globals_node_output_connections(){return[new Vo(\\\\\\\"position\\\\\\\",Do.VEC3),new Vo(\\\\\\\"normal\\\\\\\",Do.VEC3),new Vo(\\\\\\\"color\\\\\\\",Do.VEC3),new Vo(\\\\\\\"uv\\\\\\\",Do.VEC2),new Vo(\\\\\\\"mvPosition\\\\\\\",Do.VEC4),new Vo(\\\\\\\"worldPosition\\\\\\\",Do.VEC4),new Vo(\\\\\\\"worldNormal\\\\\\\",Do.VEC3),new Vo(\\\\\\\"gl_Position\\\\\\\",Do.VEC4),new Vo(\\\\\\\"gl_FragCoord\\\\\\\",Do.VEC4),new Vo(\\\\\\\"cameraPosition\\\\\\\",Do.VEC3),new Vo(\\\\\\\"resolution\\\\\\\",Do.VEC2),new Vo(\\\\\\\"time\\\\\\\",Do.FLOAT)]}create_globals_node_output_connections(){return F2.create_globals_node_output_connections()}add_globals_outputs(t){t.io.outputs.setNamedOutputConnectionPoints(this.create_globals_node_output_connections())}allow_attribute_exports(){return!1}reset_configs(){this._reset_shader_configs(),this._reset_variable_configs(),this._resetUniformsTimeDependency(),this._reset_uniforms_resolution_dependency()}shaderConfigs(){return this._shader_configs=this._shader_configs||this.create_shader_configs()}set_shader_configs(t){this._shader_configs=t}shaderNames(){var t;return(null===(t=this.shaderConfigs())||void 0===t?void 0:t.map((t=>t.name())))||[]}_reset_shader_configs(){this._shader_configs=void 0}create_shader_configs(){return[new T2(xf.VERTEX,[\\\\\\\"position\\\\\\\",\\\\\\\"normal\\\\\\\",\\\\\\\"uv\\\\\\\",Lf.INPUT_NAME],[]),new T2(xf.FRAGMENT,[\\\\\\\"color\\\\\\\",\\\\\\\"alpha\\\\\\\"],[xf.VERTEX])]}shader_config(t){var e;return null===(e=this.shaderConfigs())||void 0===e?void 0:e.filter((e=>e.name()==t))[0]}variable_configs(){return this._variable_configs=this._variable_configs||this.create_variable_configs()}set_variable_configs(t){this._variable_configs=t}variable_config(t){return this.variable_configs().filter((e=>e.name()==t))[0]}static create_variable_configs(){return[new A2(\\\\\\\"position\\\\\\\",{default_from_attribute:!0,prefix:\\\\\\\"vec3 transformed = \\\\\\\"}),new A2(\\\\\\\"normal\\\\\\\",{default_from_attribute:!0,prefix:\\\\\\\"vec3 objectNormal = \\\\\\\",postLines:[\\\\\\\"#ifdef USE_TANGENT\\\\\\\",\\\\\\\"\\\\tvec3 objectTangent = vec3( tangent.xyz );\\\\\\\",\\\\\\\"#endif\\\\\\\"]}),new A2(\\\\\\\"color\\\\\\\",{prefix:\\\\\\\"diffuseColor.xyz = \\\\\\\"}),new A2(\\\\\\\"alpha\\\\\\\",{prefix:\\\\\\\"diffuseColor.a = \\\\\\\"}),new A2(\\\\\\\"uv\\\\\\\",{prefix:\\\\\\\"vUv = \\\\\\\",if:Sf.IF_RULE.uv})]}create_variable_configs(){return F2.create_variable_configs()}_reset_variable_configs(){this._variable_configs=void 0,this.variable_configs()}input_names_for_shader_name(t,e){var n;return(null===(n=this.shader_config(e))||void 0===n?void 0:n.input_names())||[]}_resetUniformsTimeDependency(){this._uniforms_time_dependent=!1}setUniformsTimeDependent(){this._uniforms_time_dependent=!0}uniformsTimeDependent(){return this._uniforms_time_dependent}_reset_uniforms_resolution_dependency(){this._uniforms_resolution_dependent=!1}set_uniforms_resolution_dependent(){this._uniforms_resolution_dependent=!0}uniforms_resolution_dependent(){return this._uniforms_resolution_dependent}insert_define_after(t){return R2.get(t)}insert_body_after(t){return P2.get(t)}lines_to_remove(t){return I2.get(t)}_replace_template(t,e){const n=this.builder_lines(e,w2.FUNCTION_DECLARATION),i=this.builder_lines(e,w2.DEFINE),r=this.builder_lines(e,w2.BODY);let s=t.split(\\\\\\\"\\\\n\\\\\\\");const o=[],a=this.insert_define_after(e),l=this.insert_body_after(e),c=this.lines_to_remove(e);let u=!1,h=!1;for(let t of s){1==u&&(n&&this._insert_lines(o,n),i&&this._insert_lines(o,i),u=!1),1==h&&(r&&this._insert_lines(o,r),h=!1);let e=!1;if(c)for(let n of c)t.indexOf(n)>=0&&(e=!0);e?(o.push(\\\\\\\"// removed:\\\\\\\"),o.push(`//${t}`)):o.push(t),a&&t.indexOf(a)>=0&&(u=!0),l&&t.indexOf(l)>=0&&(h=!0)}this._lines.set(e,o)}_insert_lines(t,e){if(e.length>0){for(let e=0;e<3;e++)t.push(\\\\\\\"\\\\\\\");for(let n of e)t.push(n);for(let e=0;e<3;e++)t.push(\\\\\\\"\\\\\\\")}}_addFilterFragmentShaderCallback(t,e){}_removeFilterFragmentShaderCallback(t){}getCustomMaterials(){return new Map}static expandShader(t){return function t(e){return e.replace(/^[ \\\\t]*#include +<([\\\\w\\\\d./]+)>/gm,(function(e,n){var i=z[n];if(void 0===i)throw new Error(\\\\\\\"Can not resolve #include <\\\\\\\"+n+\\\\\\\">\\\\\\\");return t(i)}))}(t)}}var D2,k2;!function(t){t.DISTANCE=\\\\\\\"customDistanceMaterial\\\\\\\",t.DEPTH=\\\\\\\"customDepthMaterial\\\\\\\",t.DEPTH_DOF=\\\\\\\"customDepthDOFMaterial\\\\\\\"}(D2||(D2={})),function(t){t.TIME=\\\\\\\"time\\\\\\\",t.RESOLUTION=\\\\\\\"resolution\\\\\\\",t.MV_POSITION=\\\\\\\"mvPosition\\\\\\\",t.GL_POSITION=\\\\\\\"gl_Position\\\\\\\",t.GL_FRAGCOORD=\\\\\\\"gl_FragCoord\\\\\\\",t.GL_POINTCOORD=\\\\\\\"gl_PointCoord\\\\\\\"}(k2||(k2={}));const B2=[k2.GL_FRAGCOORD,k2.GL_POINTCOORD];class z2 extends F2{constructor(){super(...arguments),this._assemblers_by_custom_name=new Map,this._filterFragmentShaderCallbacks=new Map}createMaterial(){return new F}custom_assembler_class_by_custom_name(){}_addCustomMaterials(t){const e=this.custom_assembler_class_by_custom_name();e&&e.forEach(((e,n)=>{this._add_custom_material(t,n,e)}))}_add_custom_material(t,e,n){let i=this._assemblers_by_custom_name.get(e);i||(i=new n(this.currentGlParentNode()),this._assemblers_by_custom_name.set(e,i)),t.customMaterials=t.customMaterials||{};const r=i.createMaterial();r.name=e,t.customMaterials[e]=r}compileCustomMaterials(t){const e=this.custom_assembler_class_by_custom_name();e&&e.forEach(((e,n)=>{if(this._code_builder){let i=this._assemblers_by_custom_name.get(n);i||(i=new e(this.currentGlParentNode()),this._assemblers_by_custom_name.set(n,i)),i.set_root_nodes(this._root_nodes),i.set_param_configs_owner(this._code_builder),i.set_shader_configs(this.shaderConfigs()),i.set_variable_configs(this.variable_configs());const r=t.customMaterials[n];r&&(i.setFilterFragmentShaderMethodOwner(this),i.compileMaterial(r),i.setFilterFragmentShaderMethodOwner(void 0))}}))}_resetFilterFragmentShaderCallbacks(){this._filterFragmentShaderCallbacks.clear()}_addFilterFragmentShaderCallback(t,e){this._filterFragmentShaderCallbacks.set(t,e)}_removeFilterFragmentShaderCallback(t){this._filterFragmentShaderCallbacks.delete(t)}setFilterFragmentShaderMethodOwner(t){this._filterFragmentShaderMethodOwner=t}filterFragmentShader(t){return this._filterFragmentShaderCallbacks.forEach(((e,n)=>{t=e(t)})),t}processFilterFragmentShader(t){return this._filterFragmentShaderMethodOwner?this._filterFragmentShaderMethodOwner.filterFragmentShader(t):this.filterFragmentShader(t)}compileMaterial(t){if(!this.compileAllowed())return;const e=Of.findOutputNodes(this.currentGlParentNode());e.length>1&&this.currentGlParentNode().states.error.set(\\\\\\\"only one output node allowed\\\\\\\");const n=Of.findVaryingNodes(this.currentGlParentNode()),i=e.concat(n);this.set_root_nodes(i),this._update_shaders();const r=this._shaders_by_name.get(xf.VERTEX),s=this._shaders_by_name.get(xf.FRAGMENT);r&&s&&(t.vertexShader=r,t.fragmentShader=this.processFilterFragmentShader(s),this.addUniforms(t.uniforms),t.needsUpdate=!0);const o=this.currentGlParentNode().scene();this.uniformsTimeDependent()?o.uniformsController.addTimeDependentUniformOwner(t.uuid,t.uniforms):o.uniformsController.removeTimeDependentUniformOwner(t.uuid),this.uniforms_resolution_dependent()?o.uniformsController.addResolutionDependentUniformOwner(t.uuid,t.uniforms):o.uniformsController.removeResolutionDependentUniformOwner(t.uuid),t.customMaterials&&this.compileCustomMaterials(t)}_update_shaders(){this._shaders_by_name=new Map,this._lines=new Map;for(let t of this.shaderNames()){const e=this._template_shader_for_shader_name(t);e&&this._lines.set(t,e.split(\\\\\\\"\\\\n\\\\\\\"))}this._root_nodes.length>0&&(this.build_code_from_nodes(this._root_nodes),this._build_lines());for(let t of this.shaderNames()){const e=this._lines.get(t);e&&this._shaders_by_name.set(t,e.join(\\\\\\\"\\\\n\\\\\\\"))}}shadow_assembler_class_by_custom_name(){return{}}add_output_body_line(t,e,n){var i;const r=t.io.inputs.named_input(n),s=t.variableForInput(n),o=this.variable_config(n);let a=null;if(r)a=uf.vector3(s);else if(o.default_from_attribute()){const r=t.io.inputs.namedInputConnectionPointsByName(n);if(r){const s=r.type(),o=null===(i=this.globals_handler)||void 0===i?void 0:i.read_attribute(t,s,n,e);o&&(a=o)}}else{const t=o.default();t&&(a=t)}if(a){const n=o.prefix(),i=o.suffix(),r=o.if_condition();r&&e.addBodyLines(t,[`#if ${r}`]),e.addBodyLines(t,[`${n}${a}${i}`]);const s=o.postLines();s&&e.addBodyLines(t,s),r&&e.addBodyLines(t,[\\\\\\\"#endif\\\\\\\"])}}set_node_lines_output(t,e){var n;const i=e.current_shader_name,r=null===(n=this.shader_config(i))||void 0===n?void 0:n.input_names();if(r)for(let n of r)t.io.inputs.has_named_input(n)&&this.add_output_body_line(t,e,n)}set_node_lines_attribute(t,e){var n;const i=t.gl_type(),r=null===(n=this.globals_handler)||void 0===n?void 0:n.read_attribute(t,i,t.attribute_name,e),s=t.glVarName(t.output_name);e.addBodyLines(t,[`${i} ${s} = ${r}`])}handle_globals_output_name(t){var e;switch(t.output_name){case k2.TIME:return void this.handleTime(t);case k2.RESOLUTION:return void this.handle_resolution(t);case k2.MV_POSITION:return void this.handle_mvPosition(t);case k2.GL_POSITION:return void this.handle_gl_Position(t);case k2.GL_FRAGCOORD:return void this.handle_gl_FragCoord(t);case k2.GL_POINTCOORD:return void this.handle_gl_PointCoord(t);default:null===(e=this.globals_handler)||void 0===e||e.handle_globals_node(t.globals_node,t.output_name,t.shaders_collection_controller)}}handleTime(t){const e=new Af(t.globals_node,Do.FLOAT,t.output_name);t.globals_shader_name&&u.pushOnArrayAtEntry(t.definitions_by_shader_name,t.globals_shader_name,e);const n=`float ${t.var_name} = ${t.output_name}`;for(let i of t.dependencies)u.pushOnArrayAtEntry(t.definitions_by_shader_name,i,e),u.pushOnArrayAtEntry(t.body_lines_by_shader_name,i,n);t.body_lines.push(n),this.setUniformsTimeDependent()}handle_resolution(t){t.body_lines.push(`vec2 ${t.var_name} = resolution`);const e=new Af(t.globals_node,Do.VEC2,t.output_name);t.globals_shader_name&&u.pushOnArrayAtEntry(t.definitions_by_shader_name,t.globals_shader_name,e);for(let n of t.dependencies)u.pushOnArrayAtEntry(t.definitions_by_shader_name,n,e);this.set_uniforms_resolution_dependent()}handle_mvPosition(t){if(t.shader_name==xf.FRAGMENT){const e=t.globals_node,n=t.shaders_collection_controller,i=new Ef(e,Do.VEC4,t.var_name),r=`${t.var_name} = modelViewMatrix * vec4(position, 1.0)`;n.addDefinitions(e,[i],xf.VERTEX),n.addBodyLines(e,[r],xf.VERTEX),n.addDefinitions(e,[i])}}handle_gl_Position(t){if(t.shader_name==xf.FRAGMENT){const e=t.globals_node,n=t.shaders_collection_controller,i=new Ef(e,Do.VEC4,t.var_name),r=`${t.var_name} = projectionMatrix * modelViewMatrix * vec4(position, 1.0)`;n.addDefinitions(e,[i],xf.VERTEX),n.addBodyLines(e,[r],xf.VERTEX),n.addDefinitions(e,[i])}}handle_gl_FragCoord(t){t.shader_name==xf.FRAGMENT&&t.body_lines.push(`vec4 ${t.var_name} = gl_FragCoord`)}handle_gl_PointCoord(t){t.shader_name==xf.FRAGMENT?t.body_lines.push(`vec2 ${t.var_name} = gl_PointCoord`):t.body_lines.push(`vec2 ${t.var_name} = vec2(0.0, 0.0)`)}set_node_lines_globals(t,e){const n=[],i=e.current_shader_name,r=this.shader_config(i);if(!r)return;const s=r.dependencies(),o=new Map,a=new Map,l=this.used_output_names_for_shader(t,i);for(let r of l){const l=t.glVarName(r),c=e.current_shader_name,u={globals_node:t,shaders_collection_controller:e,output_name:r,globals_shader_name:c,definitions_by_shader_name:o,body_lines:n,var_name:l,shader_name:i,dependencies:s,body_lines_by_shader_name:a};this.handle_globals_output_name(u)}o.forEach(((n,i)=>{e.addDefinitions(t,n,i)})),a.forEach(((n,i)=>{e.addBodyLines(t,n,i)})),e.addBodyLines(t,n)}used_output_names_for_shader(t,e){const n=t.io.outputs.used_output_names(),i=[];for(let t of n)e==xf.VERTEX&&B2.includes(t)||i.push(t);return i}}const U2=new Map([[xf.VERTEX,\\\\\\\"#include <begin_vertex>\\\\\\\"],[xf.FRAGMENT,\\\\\\\"vec4 diffuseColor = vec4( 1.0 );\\\\\\\"]]);const G2=new Map([[xf.VERTEX,\\\\\\\"#include <begin_vertex>\\\\\\\"],[xf.FRAGMENT,\\\\\\\"vec4 diffuseColor = vec4( 1.0 );\\\\\\\"]]);var V2=\\\\\\\"uniform float mNear;\\\\nuniform float mFar;\\\\n\\\\nvarying float vViewZDepth;\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tfloat color = 1.0 - smoothstep( mNear, mFar, vViewZDepth );\\\\n\\\\tgl_FragColor = vec4( vec3( color ), 1.0 );\\\\n\\\\n}\\\\n\\\\\\\";const H2=new Map([[xf.VERTEX,\\\\\\\"// INSERT DEFINES\\\\\\\"]]),j2=new Map([[xf.VERTEX,\\\\\\\"// INSERT BODY\\\\\\\"]]);const W2=new Map([]);W2.set(D2.DISTANCE,class extends z2{templateShader(){const t=V.distanceRGBA;return{vertexShader:t.vertexShader,fragmentShader:t.fragmentShader,uniforms:t.uniforms}}insert_body_after(t){return U2.get(t)}createMaterial(){const t=this.templateShader();return new F({defines:{DEPTH_PACKING:[w.Hb,w.j][0]},uniforms:I.clone(t.uniforms),vertexShader:t.vertexShader,fragmentShader:t.fragmentShader})}}),W2.set(D2.DEPTH,class extends z2{templateShader(){const t=V.depth;return{vertexShader:t.vertexShader,fragmentShader:t.fragmentShader,uniforms:t.uniforms}}insert_body_after(t){return G2.get(t)}createMaterial(){const t=this.templateShader();return new F({defines:{DEPTH_PACKING:[w.Hb,w.j][0]},uniforms:I.clone(t.uniforms),vertexShader:t.vertexShader,fragmentShader:t.fragmentShader})}}),W2.set(D2.DEPTH_DOF,class extends z2{templateShader(){return{vertexShader:\\\\\\\"#include <common>\\\\n\\\\nvarying float vViewZDepth;\\\\n\\\\n// INSERT DEFINES\\\\n\\\\n\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t// INSERT BODY\\\\n\\\\n\\\\n\\\\t#include <project_vertex>\\\\n\\\\n\\\\tvViewZDepth = - mvPosition.z;\\\\n}\\\\\\\",fragmentShader:V2,uniforms:{mNear:{value:0},mFar:{value:10}}}}insert_define_after(t){return H2.get(t)}insert_body_after(t){return j2.get(t)}createMaterial(){const t=this.templateShader();return new F({uniforms:I.clone(t.uniforms),vertexShader:t.vertexShader,fragmentShader:t.fragmentShader})}});class q2 extends z2{custom_assembler_class_by_custom_name(){return W2}}class X2 extends q2{templateShader(){const t=V.basic;return{vertexShader:t.vertexShader,fragmentShader:t.fragmentShader,uniforms:t.uniforms}}createMaterial(){const t=this.templateShader(),e=new F({lights:!1,uniforms:I.clone(t.uniforms),vertexShader:t.vertexShader,fragmentShader:t.fragmentShader});return this._addCustomMaterials(e),e}}class Y2 extends q2{templateShader(){const t=V.lambert;return{vertexShader:t.vertexShader,fragmentShader:t.fragmentShader,uniforms:t.uniforms}}createMaterial(){const t=this.templateShader(),e=new F({lights:!0,uniforms:I.clone(t.uniforms),vertexShader:t.vertexShader,fragmentShader:t.fragmentShader});return this._addCustomMaterials(e),e}}class $2 extends q2{templateShader(){const t=V.phong;return{vertexShader:t.vertexShader,fragmentShader:t.fragmentShader,uniforms:t.uniforms}}createMaterial(){const t=this.templateShader(),e=new F({lights:!0,uniforms:I.clone(t.uniforms),vertexShader:t.vertexShader,fragmentShader:t.fragmentShader});return this._addCustomMaterials(e),e}}var J2=\\\\\\\"SSSModel(/*isActive*/false,/*color*/vec3(1.0, 1.0, 1.0), /*thickness*/0.1, /*power*/2.0, /*scale*/16.0, /*distortion*/0.1,/*ambient*/0.4,/*attenuation*/0.8 )\\\\\\\";class Z2 extends q2{constructor(t){super(t),this._gl_parent_node=t,this._addFilterFragmentShaderCallback(\\\\\\\"MeshStandardBuilderMatNode\\\\\\\",Z2.filterFragmentShader)}isPhysical(){return!1}templateShader(){const t=this.isPhysical()?V.physical:V.standard;return{vertexShader:t.vertexShader,fragmentShader:t.fragmentShader,uniforms:t.uniforms}}static filterFragmentShader(t){return t=(t=(t=t.replace(\\\\\\\"#include <metalnessmap_fragment>\\\\\\\",\\\\\\\"float metalnessFactor = metalness * POLY_metalness;\\\\n\\\\n#ifdef USE_METALNESSMAP\\\\n\\\\n\\\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\\\n\\\\n\\\\t// reads channel B, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\\\\n\\\\tmetalnessFactor *= texelMetalness.b;\\\\n\\\\n#endif\\\\n\\\\\\\")).replace(\\\\\\\"#include <roughnessmap_fragment>\\\\\\\",\\\\\\\"float roughnessFactor = roughness * POLY_roughness;\\\\n\\\\n#ifdef USE_ROUGHNESSMAP\\\\n\\\\n\\\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\\\n\\\\n\\\\t// reads channel G, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\\\\n\\\\troughnessFactor *= texelRoughness.g;\\\\n\\\\n#endif\\\\n\\\\\\\")).replace(\\\\\\\"vec3 totalEmissiveRadiance = emissive;\\\\\\\",\\\\\\\"vec3 totalEmissiveRadiance = emissive * POLY_emissive;\\\\\\\"),Z2.USE_SSS&&(t=(t=t.replace(/void main\\\\s?\\\\(\\\\) {/,\\\\\\\"struct SSSModel {\\\\n\\\\tbool isActive;\\\\n\\\\tvec3 color;\\\\n\\\\tfloat thickness;\\\\n\\\\tfloat power;\\\\n\\\\tfloat scale;\\\\n\\\\tfloat distortion;\\\\n\\\\tfloat ambient;\\\\n\\\\tfloat attenuation;\\\\n};\\\\n\\\\nvoid RE_Direct_Scattering(\\\\n\\\\tconst in IncidentLight directLight,\\\\n\\\\tconst in GeometricContext geometry,\\\\n\\\\tconst in SSSModel sssModel,\\\\n\\\\tinout ReflectedLight reflectedLight\\\\n\\\\t){\\\\n\\\\tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * sssModel.distortion));\\\\n\\\\tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), sssModel.power) * sssModel.scale;\\\\n\\\\tvec3 scatteringIllu = (scatteringDot + sssModel.ambient) * (sssModel.color * (1.0-sssModel.thickness));\\\\n\\\\treflectedLight.directDiffuse += scatteringIllu * sssModel.attenuation * directLight.color;\\\\n}\\\\n\\\\nvoid main() {\\\\\\\")).replace(\\\\\\\"#include <lights_fragment_begin>\\\\\\\",\\\\\\\"#include <lights_fragment_begin>\\\\nif(POLY_SSSModel.isActive){\\\\n\\\\tRE_Direct_Scattering(directLight, geometry, POLY_SSSModel, reflectedLight);\\\\n}\\\\n\\\\n\\\\\\\")),t}createMaterial(){const t=this.templateShader(),e={lights:!0,extensions:{derivatives:!0},uniforms:I.clone(t.uniforms),vertexShader:t.vertexShader,fragmentShader:t.fragmentShader},n=new F(e);return this.isPhysical()&&(n.defines.PHYSICAL=!0),this._addCustomMaterials(n),n}add_output_inputs(t){const e=F2.output_input_connection_points();e.push(new Vo(\\\\\\\"metalness\\\\\\\",Do.FLOAT,1)),e.push(new Vo(\\\\\\\"roughness\\\\\\\",Do.FLOAT,1)),e.push(new Vo(\\\\\\\"emissive\\\\\\\",Do.VEC3,[1,1,1])),Z2.USE_SSS&&e.push(new Vo(\\\\\\\"SSSModel\\\\\\\",Do.SSS_MODEL,J2)),t.io.inputs.setNamedInputConnectionPoints(e)}create_shader_configs(){return[new T2(xf.VERTEX,[\\\\\\\"position\\\\\\\",\\\\\\\"normal\\\\\\\",\\\\\\\"uv\\\\\\\"],[]),new T2(xf.FRAGMENT,[\\\\\\\"color\\\\\\\",\\\\\\\"alpha\\\\\\\",\\\\\\\"metalness\\\\\\\",\\\\\\\"roughness\\\\\\\",\\\\\\\"emissive\\\\\\\",\\\\\\\"SSSModel\\\\\\\"],[xf.VERTEX])]}create_variable_configs(){const t=F2.create_variable_configs();return t.push(new A2(\\\\\\\"metalness\\\\\\\",{default:\\\\\\\"1.0\\\\\\\",prefix:\\\\\\\"float POLY_metalness = \\\\\\\"})),t.push(new A2(\\\\\\\"roughness\\\\\\\",{default:\\\\\\\"1.0\\\\\\\",prefix:\\\\\\\"float POLY_roughness = \\\\\\\"})),t.push(new A2(\\\\\\\"emissive\\\\\\\",{default:\\\\\\\"vec3(1.0, 1.0, 1.0)\\\\\\\",prefix:\\\\\\\"vec3 POLY_emissive = \\\\\\\"})),Z2.USE_SSS&&t.push(new A2(\\\\\\\"SSSModel\\\\\\\",{default:J2,prefix:\\\\\\\"SSSModel POLY_SSSModel = \\\\\\\"})),t}}Z2.USE_SSS=!0;class Q2 extends Z2{isPhysical(){return!0}}const K2=new Map([[xf.VERTEX,\\\\\\\"// INSERT DEFINES\\\\\\\"]]),t3=new Map([[xf.VERTEX,\\\\\\\"// INSERT BODY\\\\\\\"]]);const e3=new Map([[xf.VERTEX,\\\\\\\"// INSERT DEFINES\\\\\\\"]]),n3=new Map([[xf.VERTEX,\\\\\\\"// INSERT BODY\\\\\\\"]]);const i3=new Map([[xf.VERTEX,[\\\\\\\"#include <begin_vertex>\\\\\\\",\\\\\\\"gl_PointSize = size;\\\\\\\"]],[xf.FRAGMENT,[]]]),r3=new Map;r3.set(D2.DISTANCE,class extends z2{templateShader(){const t=V.distanceRGBA,e=I.clone(t.uniforms);return e.size={value:1},e.scale={value:1},{vertexShader:\\\\\\\"uniform float size;\\\\nuniform float scale;\\\\n#define DISTANCE\\\\nvarying vec3 vWorldPosition;\\\\n#include <common>\\\\n#include <clipping_planes_pars_vertex>\\\\nvarying float vViewZDepth;\\\\n\\\\n// INSERT DEFINES\\\\n\\\\n\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t// INSERT BODY\\\\n\\\\n\\\\n\\\\t#include <project_vertex>\\\\n\\\\t#include <worldpos_vertex>\\\\n\\\\t#include <clipping_planes_vertex>\\\\n\\\\n\\\\t#ifdef USE_SIZEATTENUATION\\\\n\\\\t\\\\tbool isPerspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 );\\\\n\\\\t\\\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\\\n\\\\t#endif\\\\n\\\\tvWorldPosition = worldPosition.xyz;\\\\n}\\\\n\\\\n// #define DISTANCE\\\\n// varying vec3 vWorldPosition;\\\\n// #include <common>\\\\n// #include <uv_pars_vertex>\\\\n// #include <displacementmap_pars_vertex>\\\\n// #include <morphtarget_pars_vertex>\\\\n// #include <skinning_pars_vertex>\\\\n// #include <clipping_planes_pars_vertex>\\\\n// void main() {\\\\n// \\\\t#include <uv_vertex>\\\\n// \\\\t#include <skinbase_vertex>\\\\n// \\\\t#ifdef USE_DISPLACEMENTMAP\\\\n// \\\\t\\\\t#include <beginnormal_vertex>\\\\n// \\\\t\\\\t#include <morphnormal_vertex>\\\\n// \\\\t\\\\t#include <skinnormal_vertex>\\\\n// \\\\t#endif\\\\n// \\\\t#include <begin_vertex>\\\\n// \\\\t#include <morphtarget_vertex>\\\\n// \\\\t#include <skinning_vertex>\\\\n// \\\\t#include <displacementmap_vertex>\\\\n// \\\\t#include <project_vertex>\\\\n// \\\\t#include <worldpos_vertex>\\\\n// \\\\t#include <clipping_planes_vertex>\\\\n// \\\\tvWorldPosition = worldPosition.xyz;\\\\n// }\\\\n\\\\n\\\\n\\\\\\\",fragmentShader:t.fragmentShader,uniforms:e}}insert_define_after(t){return K2.get(t)}insert_body_after(t){return t3.get(t)}createMaterial(){const t=this.templateShader();return new F({defines:{USE_SIZEATTENUATION:1,DEPTH_PACKING:[w.Hb,w.j][0]},uniforms:I.clone(t.uniforms),vertexShader:t.vertexShader,fragmentShader:t.fragmentShader})}}),r3.set(D2.DEPTH_DOF,class extends z2{templateShader(){return{vertexShader:\\\\\\\"uniform float size;\\\\nuniform float scale;\\\\n#include <common>\\\\n\\\\nvarying float vViewZDepth;\\\\n\\\\n// INSERT DEFINES\\\\n\\\\n\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t// INSERT BODY\\\\n\\\\n\\\\n\\\\t#include <project_vertex>\\\\n\\\\n\\\\tvViewZDepth = - mvPosition.z;\\\\n\\\\t#ifdef USE_SIZEATTENUATION\\\\n\\\\t\\\\tbool isPerspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 );\\\\n\\\\t\\\\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\\\\n\\\\t#endif\\\\n\\\\n}\\\\n\\\\n\\\\\\\",fragmentShader:V2,uniforms:{size:{value:1},scale:{value:1},mNear:{value:0},mFar:{value:10}}}}insert_define_after(t){return e3.get(t)}insert_body_after(t){return n3.get(t)}createMaterial(){const t=this.templateShader();return new F({depthTest:!0,defines:{USE_SIZEATTENUATION:1},uniforms:I.clone(t.uniforms),vertexShader:t.vertexShader,fragmentShader:t.fragmentShader})}});class s3 extends z2{custom_assembler_class_by_custom_name(){return r3}templateShader(){const t=V.points;return{vertexShader:t.vertexShader,fragmentShader:t.fragmentShader,uniforms:t.uniforms}}createMaterial(){const t=this.templateShader(),e=new F({transparent:!0,fog:!0,defines:{USE_SIZEATTENUATION:1},uniforms:I.clone(t.uniforms),vertexShader:t.vertexShader,fragmentShader:t.fragmentShader});return this._addCustomMaterials(e),e}add_output_inputs(t){const e=F2.output_input_connection_points();e.push(new Vo(\\\\\\\"gl_PointSize\\\\\\\",Do.FLOAT)),t.io.inputs.setNamedInputConnectionPoints(e)}create_globals_node_output_connections(){return F2.create_globals_node_output_connections().concat([new Vo(k2.GL_POINTCOORD,Do.VEC2)])}create_shader_configs(){return[new T2(xf.VERTEX,[\\\\\\\"position\\\\\\\",\\\\\\\"normal\\\\\\\",\\\\\\\"uv\\\\\\\",\\\\\\\"gl_PointSize\\\\\\\"],[]),new T2(xf.FRAGMENT,[\\\\\\\"color\\\\\\\",\\\\\\\"alpha\\\\\\\"],[xf.VERTEX])]}create_variable_configs(){return F2.create_variable_configs().concat([new A2(\\\\\\\"gl_PointSize\\\\\\\",{default:\\\\\\\"1.0\\\\\\\",prefix:\\\\\\\"gl_PointSize = \\\\\\\",suffix:\\\\\\\" * size * 10.0\\\\\\\"})])}lines_to_remove(t){return i3.get(t)}}const o3=new Map([[xf.VERTEX,\\\\\\\"// INSERT DEFINES\\\\\\\"]]),a3=new Map([[xf.VERTEX,\\\\\\\"// INSERT BODY\\\\\\\"]]);const l3=new Map([]);l3.set(D2.DEPTH_DOF,class extends z2{templateShader(){return{vertexShader:\\\\\\\"uniform float scale;\\\\nattribute float lineDistance;\\\\nvarying float vLineDistance;\\\\n#include <common>\\\\n\\\\nvarying float vViewZDepth;\\\\n\\\\n// INSERT DEFINES\\\\n\\\\n\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\t// INSERT BODY\\\\n\\\\n\\\\n\\\\tvLineDistance = scale * lineDistance;\\\\n\\\\tgl_Position = projectionMatrix * mvPosition;\\\\n\\\\n\\\\tvViewZDepth = - mvPosition.z;\\\\n\\\\n\\\\n}\\\\n\\\\n\\\\n\\\\n\\\\\\\",fragmentShader:V2,uniforms:{scale:{value:1},mNear:{value:0},mFar:{value:10}}}}insert_define_after(t){return o3.get(t)}insert_body_after(t){return a3.get(t)}createMaterial(){const t=this.templateShader();return new F({depthTest:!0,linewidth:100,uniforms:I.clone(t.uniforms),vertexShader:t.vertexShader,fragmentShader:t.fragmentShader})}});const c3=new Map([[xf.VERTEX,[\\\\\\\"#include <begin_vertex>\\\\\\\",\\\\\\\"#include <project_vertex>\\\\\\\"]],[xf.FRAGMENT,[]]]);class u3 extends z2{templateShader(){const t=V.dashed;return{vertexShader:t.vertexShader,fragmentShader:t.fragmentShader,uniforms:t.uniforms}}createMaterial(){const t=this.templateShader(),e=new F({depthTest:!0,alphaTest:.5,linewidth:1,uniforms:I.clone(t.uniforms),vertexShader:t.vertexShader,fragmentShader:t.fragmentShader});return this._addCustomMaterials(e),e}custom_assembler_class_by_custom_name(){return console.log(\\\\\\\"custom_assembler_class_by_custom_name\\\\\\\",l3),l3}create_shader_configs(){return[new T2(xf.VERTEX,[\\\\\\\"position\\\\\\\",\\\\\\\"uv\\\\\\\"],[]),new T2(xf.FRAGMENT,[\\\\\\\"color\\\\\\\",\\\\\\\"alpha\\\\\\\"],[xf.VERTEX])]}static output_input_connection_points(){return[new Vo(\\\\\\\"position\\\\\\\",Do.VEC3),new Vo(\\\\\\\"color\\\\\\\",Do.VEC3),new Vo(\\\\\\\"alpha\\\\\\\",Do.FLOAT),new Vo(\\\\\\\"uv\\\\\\\",Do.VEC2)]}add_output_inputs(t){t.io.inputs.setNamedInputConnectionPoints(u3.output_input_connection_points())}static create_globals_node_output_connections(){return[new Vo(\\\\\\\"position\\\\\\\",Do.VEC3),new Vo(\\\\\\\"color\\\\\\\",Do.VEC3),new Vo(\\\\\\\"uv\\\\\\\",Do.VEC2),new Vo(\\\\\\\"gl_FragCoord\\\\\\\",Do.VEC4),new Vo(\\\\\\\"resolution\\\\\\\",Do.VEC2),new Vo(\\\\\\\"time\\\\\\\",Do.FLOAT)]}create_globals_node_output_connections(){return u3.create_globals_node_output_connections()}create_variable_configs(){return[new A2(\\\\\\\"position\\\\\\\",{default:\\\\\\\"vec3( position )\\\\\\\",prefix:\\\\\\\"vec3 transformed = \\\\\\\",suffix:\\\\\\\";vec4 mvPosition = vec4( transformed, 1.0 ); gl_Position = projectionMatrix * modelViewMatrix * mvPosition;\\\\\\\"}),new A2(\\\\\\\"color\\\\\\\",{prefix:\\\\\\\"diffuseColor.xyz = \\\\\\\"}),new A2(\\\\\\\"alpha\\\\\\\",{prefix:\\\\\\\"diffuseColor.w = \\\\\\\"}),new A2(\\\\\\\"uv\\\\\\\",{prefix:\\\\\\\"vUv = \\\\\\\",if:Sf.IF_RULE.uv})]}lines_to_remove(t){return c3.get(t)}}class h3 extends F2{templateShader(){}_template_shader_for_shader_name(t){return\\\\\\\"#include <common>\\\\n\\\\n// INSERT DEFINE\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvec2 particleUV = (gl_FragCoord.xy / resolution.xy);\\\\n\\\\n\\\\t// INSERT BODY\\\\n\\\\n}\\\\\\\"}compile(){this.setup_shader_names_and_variables(),this.update_shaders()}root_nodes_by_shader_name(t){var e,n;const i=[];for(let r of this._root_nodes)switch(r.type()){case UI.type():i.push(r);break;case gf.type():{const s=r.attribute_name,o=null===(e=this._texture_allocations_controller)||void 0===e?void 0:e.variable(s);if(o&&o.allocation()){(null===(n=o.allocation())||void 0===n?void 0:n.shaderName())==t&&i.push(r)}break}}return i}leaf_nodes_by_shader_name(t){var e,n;const i=[];for(let r of this._leaf_nodes)switch(r.type()){case HP.type():i.push(r);break;case gf.type():{const s=r.attribute_name,o=null===(e=this._texture_allocations_controller)||void 0===e?void 0:e.variable(s);if(o&&o.allocation()){(null===(n=o.allocation())||void 0===n?void 0:n.shaderName())==t&&i.push(r)}break}}return i}setup_shader_names_and_variables(){var t;const e=new O2(this.currentGlParentNode(),this.shaderNames(),((t,e)=>this.input_names_for_shader_name(t,e)));this._leaf_nodes=e.leaves_from_nodes(this._root_nodes),this._texture_allocations_controller=new dQ,this._texture_allocations_controller.allocateConnectionsFromRootNodes(this._root_nodes,this._leaf_nodes),this.globals_handler&&(null===(t=this.globals_handler)||void 0===t||t.set_texture_allocations_controller(this._texture_allocations_controller)),this._reset_shader_configs()}update_shaders(){this._shaders_by_name.clear(),this._lines.clear();for(let t of this.shaderNames()){const e=this._template_shader_for_shader_name(t);this._lines.set(t,e.split(\\\\\\\"\\\\n\\\\\\\"))}this._root_nodes.length>0&&(this._resetCodeBuilder(),this.build_code_from_nodes(this._root_nodes),this._build_lines());for(let t of this.shaderNames()){const e=this._lines.get(t);e&&this._shaders_by_name.set(t,e.join(\\\\\\\"\\\\n\\\\\\\"))}}add_output_inputs(t){t.io.inputs.setNamedInputConnectionPoints([new Vo(\\\\\\\"position\\\\\\\",Do.VEC3),new Vo(\\\\\\\"velocity\\\\\\\",Do.VEC3)])}add_globals_outputs(t){t.io.outputs.setNamedOutputConnectionPoints([new Vo(\\\\\\\"position\\\\\\\",Do.VEC3),new Vo(\\\\\\\"velocity\\\\\\\",Do.VEC3),new Vo(\\\\\\\"time\\\\\\\",Do.FLOAT)])}allow_attribute_exports(){return!0}textureAllocationsController(){return this._texture_allocations_controller=this._texture_allocations_controller||new dQ}create_shader_configs(){var t;return(null===(t=this._texture_allocations_controller)||void 0===t?void 0:t.createShaderConfigs())||[]}create_variable_configs(){return[]}shaderNames(){return this.textureAllocationsController().shaderNames()||[]}input_names_for_shader_name(t,e){return this.textureAllocationsController().inputNamesForShaderName(t,e)||[]}insert_define_after(t){return\\\\\\\"// INSERT DEFINE\\\\\\\"}insert_body_after(t){return\\\\\\\"// INSERT BODY\\\\\\\"}lines_to_remove(t){return[\\\\\\\"// INSERT DEFINE\\\\\\\",\\\\\\\"// INSERT BODY\\\\\\\"]}add_export_body_line(t,e,n,i,r){var s;if(n){const n=t.variableForInput(e),o=uf.vector3(n);if(o){const e=this.textureAllocationsController().variable(i),n=r.current_shader_name;if(e&&(null===(s=e.allocation())||void 0===s?void 0:s.shaderName())==n){const i=`gl_FragColor.${e.component()} = ${o}`;r.addBodyLines(t,[i],n)}}}}set_node_lines_output(t,e){const n=e.current_shader_name,i=this.textureAllocationsController().inputNamesForShaderName(t,n);if(i)for(let n of i){const i=t.io.inputs.named_input(n);if(i){const r=n;this.add_export_body_line(t,n,i,r,e)}}}set_node_lines_attribute(t,e){var n,i;if(t.isImporting()){const r=t.gl_type(),s=t.attribute_name,o=null===(n=this.globals_handler)||void 0===n?void 0:n.read_attribute(t,r,s,e),a=t.glVarName(t.output_name),l=`${r} ${a} = ${o}`;e.addBodyLines(t,[l]);const c=this.textureAllocationsController().variable(s),u=e.current_shader_name;if(c&&(null===(i=c.allocation())||void 0===i?void 0:i.shaderName())==u){const n=this.textureAllocationsController().variable(s);if(n){const i=`gl_FragColor.${n.component()} = ${a}`;e.addBodyLines(t,[i])}}}if(t.isExporting()){const n=t.connected_input_node();if(n){const i=t.attribute_name;this.add_export_body_line(t,t.input_name,n,i,e)}}}set_node_lines_globals(t,e){for(let n of t.io.outputs.used_output_names())switch(n){case\\\\\\\"time\\\\\\\":this._handle_globals_time(t,n,e);break;default:this._handle_globals_default(t,n,e)}}_handle_globals_time(t,e,n){const i=new Af(t,Do.FLOAT,e);n.addDefinitions(t,[i]);const r=`float ${t.glVarName(e)} = ${e}`;n.addBodyLines(t,[r]),this.setUniformsTimeDependent()}_handle_globals_default(t,e,n){var i;const r=t.io.outputs.namedOutputConnectionPointsByName(e);if(r){const s=r.type(),o=null===(i=this.globals_handler)||void 0===i?void 0:i.read_attribute(t,s,e,n);if(o){const i=`${s} ${t.glVarName(e)} = ${o}`;n.addBodyLines(t,[i])}}}}class d3 extends F2{templateShader(){return{fragmentShader:\\\\\\\"#include <common>\\\\n\\\\nuniform vec2 resolution;\\\\n\\\\n// INSERT DEFINE\\\\n\\\\nvoid main() {\\\\n\\\\n\\\\tvec4 diffuseColor = vec4(0.0,0.0,0.0,1.0);\\\\n\\\\n\\\\n\\\\t// INSERT BODY\\\\n\\\\n\\\\tgl_FragColor = vec4( diffuseColor );\\\\n}\\\\\\\",vertexShader:void 0,uniforms:void 0}}fragment_shader(){return this._shaders_by_name.get(xf.FRAGMENT)}uniforms(){return this._uniforms}update_fragment_shader(){this._lines=new Map,this._shaders_by_name=new Map;for(let t of this.shaderNames())if(t==xf.FRAGMENT){const e=this.templateShader().fragmentShader;this._lines.set(t,e.split(\\\\\\\"\\\\n\\\\\\\"))}this._root_nodes.length>0&&(this.build_code_from_nodes(this._root_nodes),this._build_lines()),this._uniforms=this._uniforms||{},this.addUniforms(this._uniforms);for(let t of this.shaderNames()){const e=this._lines.get(t);e&&this._shaders_by_name.set(t,e.join(\\\\\\\"\\\\n\\\\\\\"))}tg.handle_dependencies(this.currentGlParentNode(),this.uniformsTimeDependent(),this._uniforms)}add_output_inputs(t){t.io.inputs.setNamedInputConnectionPoints([new Vo(\\\\\\\"color\\\\\\\",Do.VEC3),new Vo(\\\\\\\"alpha\\\\\\\",Do.FLOAT)])}add_globals_outputs(t){t.io.outputs.setNamedOutputConnectionPoints([new Vo(\\\\\\\"gl_FragCoord\\\\\\\",Do.VEC2),new Vo(\\\\\\\"time\\\\\\\",Do.FLOAT)])}create_shader_configs(){return[new T2(xf.FRAGMENT,[\\\\\\\"color\\\\\\\",\\\\\\\"alpha\\\\\\\"],[])]}create_variable_configs(){return[new A2(\\\\\\\"color\\\\\\\",{prefix:\\\\\\\"diffuseColor.xyz = \\\\\\\"}),new A2(\\\\\\\"alpha\\\\\\\",{prefix:\\\\\\\"diffuseColor.a = \\\\\\\",default:\\\\\\\"1.0\\\\\\\"})]}insert_define_after(t){return\\\\\\\"// INSERT DEFINE\\\\\\\"}insert_body_after(t){return\\\\\\\"// INSERT BODY\\\\\\\"}lines_to_remove(t){return[\\\\\\\"// INSERT DEFINE\\\\\\\",\\\\\\\"// INSERT BODY\\\\\\\"]}handle_gl_FragCoord(t,e,n){\\\\\\\"fragment\\\\\\\"==e&&t.push(`vec2 ${n} = vec2(gl_FragCoord.x / resolution.x, gl_FragCoord.y / resolution.y)`)}set_node_lines_output(t,e){const n=this.input_names_for_shader_name(t,e.current_shader_name);if(n)for(let i of n){if(t.io.inputs.named_input(i)){const n=t.variableForInput(i);let r;\\\\\\\"color\\\\\\\"==i&&(r=`diffuseColor.xyz = ${uf.any(n)}`),\\\\\\\"alpha\\\\\\\"==i&&(r=`diffuseColor.a = ${uf.any(n)}`),r&&e.addBodyLines(t,[r])}}}set_node_lines_globals(t,e){const n=e.current_shader_name;if(!this.shader_config(n))return;const i=[],r=[];for(let e of t.io.outputs.used_output_names()){const s=t.glVarName(e);switch(e){case\\\\\\\"time\\\\\\\":r.push(new Af(t,Do.FLOAT,e)),i.push(`float ${s} = ${e}`),this.setUniformsTimeDependent();break;case\\\\\\\"gl_FragCoord\\\\\\\":this.handle_gl_FragCoord(i,n,s)}}e.addDefinitions(t,r,n),e.addBodyLines(t,i)}}const p3=new Map([]);class _3 extends z2{custom_assembler_class_by_custom_name(){return p3}}const m3=new Map([[xf.VERTEX,\\\\\\\"// start builder body code\\\\\\\"],[xf.FRAGMENT,\\\\\\\"// start builder body code\\\\\\\"]]),f3=new Map([[xf.FRAGMENT,[]]]);class g3 extends _3{templateShader(){return{vertexShader:jB,fragmentShader:WB,uniforms:I.clone(qB)}}createMaterial(){const t=this.templateShader(),e=new F({vertexShader:t.vertexShader,fragmentShader:t.fragmentShader,side:w.H,transparent:!0,depthTest:!0,uniforms:I.clone(t.uniforms)});return fs.add_user_data_render_hook(e,$B.render_hook.bind($B)),this._addCustomMaterials(e),e}add_output_inputs(t){t.io.inputs.setNamedInputConnectionPoints([new Vo(\\\\\\\"density\\\\\\\",Do.FLOAT,1)])}static create_globals_node_output_connections(){return[new Vo(\\\\\\\"position\\\\\\\",Do.VEC3),new Vo(\\\\\\\"pos_normalized\\\\\\\",Do.VEC3),new Vo(\\\\\\\"time\\\\\\\",Do.FLOAT)]}create_globals_node_output_connections(){return g3.create_globals_node_output_connections()}insert_body_after(t){return m3.get(t)}lines_to_remove(t){return f3.get(t)}create_shader_configs(){return[new T2(xf.VERTEX,[],[]),new T2(xf.FRAGMENT,[\\\\\\\"density\\\\\\\"],[xf.VERTEX])]}static create_variable_configs(){return[new A2(\\\\\\\"position\\\\\\\",{}),new A2(\\\\\\\"density\\\\\\\",{prefix:\\\\\\\"density *= \\\\\\\"})]}create_variable_configs(){return g3.create_variable_configs()}set_node_lines_globals(t,e){const n=[],i=e.current_shader_name,r=this.shader_config(i);if(!r)return;const s=r.dependencies(),o=new Map,a=new Map;let l,c;for(let r of t.io.outputs.used_output_names()){const h=t.glVarName(r),d=e.current_shader_name;switch(r){case\\\\\\\"time\\\\\\\":l=new Af(t,Do.FLOAT,r),d&&u.pushOnArrayAtEntry(o,d,l),c=`float ${h} = ${r}`;for(let t of s)u.pushOnArrayAtEntry(o,t,l),u.pushOnArrayAtEntry(a,t,c);n.push(c),this.setUniformsTimeDependent();break;case\\\\\\\"position\\\\\\\":i==xf.FRAGMENT&&n.push(`vec3 ${h} = position_for_step`);break;case\\\\\\\"pos_normalized\\\\\\\":i==xf.FRAGMENT&&n.push(`vec3 ${h} = (position_for_step - u_BoundingBoxMax) / (u_BoundingBoxMax - u_BoundingBoxMin)`)}}o.forEach(((n,i)=>{e.addDefinitions(t,n,i)})),a.forEach(((n,i)=>{e.addBodyLines(t,n,i)})),e.addBodyLines(t,n)}}class v3{static async run(){this._started||(this._started=!0,class{static async run(t){(class{static run(t){t.registerNode(I_,Ql),t.registerNode(D_,ec),t.registerNode(B_,Ql),t.registerNode(U_,Ql),t.registerNode($_,Ql),t.registerNode(Z_,Zl),t.registerNode(K_,Ql),t.registerNode(em,ec),t.registerNode(im,tc),t.registerNode(um,tc),t.registerNode(dm,Ql),t.registerNode(_m,Zl),t.registerNode(wm,tc),t.registerNode(Em,Kl),t.registerNode(Mm,Kl),t.registerNode(Sm,Kl),t.registerNode(Cm,Kl),t.registerNode(Qm,Kl),t.registerNode(Km,Kl)}}).run(t),class{static run(t){t.registerNode(tg,nc),t.registerNode(Mg,ic),t.registerNode(Cg,ic),t.registerNode(Ig,ic),t.registerNode(Bg,ic),t.registerNode(Jg,ic),t.registerNode(ev,ic),t.registerNode(ov,rc),t.registerNode(lv,rc),t.registerNode(dv,rc),t.registerNode(_v,rc),t.registerNode(gv,nc),t.registerNode(xv,ic),t.registerNode(Tv,nc),t.registerNode(Mv,sc),t.registerNode(Cv,sc),t.registerNode(Sv,sc),t.registerNode(Nv,sc),t.registerNode(Lv,sc),t.registerNode(Ov,sc)}}.run(t),class{static run(t){t.registerNode(Fv,cc),t.registerNode(Bv,lc),t.registerNode(Uv,lc),t.registerNode(Hv,lc),t.registerNode(Kv,oc),t.registerNode(dy,oc),t.registerNode(hy,oc),t.registerNode(_y,lc),t.registerNode(yl,ac),t.registerNode(DN,oc),t.registerNode(ol,ac),t.registerNode(UN,lc),t.registerNode(VN,lc),t.registerNode(QN,oc),t.registerNode(qa,ac),t.registerNode(nL,cc),t.registerNode(oL,lc),t.registerNode(Za,ac),t.registerNode(NL,lc),t.registerNode(el,cc),t.registerNode(PL,cc),t.registerNode(jL,cc),t.registerNode(qL,lc),t.registerNode($L,lc),t.registerNode(bl,ac),t.registerNode(ZL,lc),t.registerNode(hl,ac),t.registerNode(tO,uc),t.registerNode(eO,uc),t.registerNode(nO,uc),t.registerNode(iO,uc),t.registerNode(rO,uc),t.registerNode(sO,uc)}}.run(t),class{static run(t){t.registerNode(jO,gc),t.registerNode(zR,vc),t.registerNode(WO,xc),t.registerNode(AR,gc),t.registerNode(jR,xc),t.registerNode(LR,fc),t.registerNode(qO,xc),t.registerNode(XO,xc),t.registerNode(gf,_c,{except:[`${Ki.COP}/builder`]}),t.registerNode(fO,dc),t.registerNode(YO,gc),t.registerNode(xR,gc),t.registerNode(YR,hc),t.registerNode(eP,fc),t.registerNode(nP,gc),t.registerNode(sP,_c),t.registerNode($O,xc),t.registerNode(lP,pc),t.registerNode(cP,gc),t.registerNode(JO,dc),t.registerNode(dP,pc),t.registerNode(hR,pc),t.registerNode(ER,gc),t.registerNode(dR,pc),t.registerNode(xP,gc),t.registerNode(ZO,gc),t.registerNode(QO,gc),t.registerNode(bR,pc),t.registerNode(TP,gc),t.registerNode(EP,gc),t.registerNode(SP,gc),t.registerNode(NP,gc),t.registerNode(lO,dc),t.registerNode(vO,dc),t.registerNode(xO,dc),t.registerNode(wO,dc),t.registerNode(KO,gc),t.registerNode(RP,hc),t.registerNode(GP,fc),t.registerNode(tR,gc),t.registerNode(HP,_c),t.registerNode(WP,hc),t.registerNode(XP,hc),t.registerNode(JP,fc),t.registerNode(QP,bc),t.registerNode(_O,dc),t.registerNode(hO,dc),t.registerNode(eR,gc),t.registerNode(sI,pc),t.registerNode(oI,pc),t.registerNode(lI,hc),t.registerNode(nR,gc),t.registerNode(iR,gc),t.registerNode(pR,gc),t.registerNode(uI,gc),t.registerNode(_R,gc),t.registerNode(mR,gc),t.registerNode(mI,gc),t.registerNode(dI,gc),t.registerNode(SR,gc),t.registerNode(vI,gc),t.registerNode(yI,gc),t.registerNode(BI,bc),t.registerNode(kI,pc),t.registerNode(rR,gc),t.registerNode(OR,fc),t.registerNode(UI,_c),t.registerNode(HI,_c),t.registerNode(fR,gc),t.registerNode(YI,yc),t.registerNode(QI,yc),t.registerNode(KI,yc),t.registerNode(tF,yc),t.registerNode(iF,_c),t.registerNode(oF,_c),t.registerNode(sR,dc),t.registerNode(gR,pc),t.registerNode(jI,pc),t.registerNode(lF,hc),t.registerNode(gF,pc),t.registerNode(yF,gc),t.registerNode(oR,gc),t.registerNode(aR,xc),t.registerNode(wR,gc),t.registerNode(bF,pc),t.registerNode(lR,gc),t.registerNode(XI,mc),t.registerNode(vR,pc),t.registerNode(kP,fc),t.registerNode(TF,fc,VF),t.registerNode(IP,fc,VF),t.registerNode(MR,gc),t.registerNode(EF,fc),t.registerNode(cR,xc),t.registerNode(SF,hc),t.registerNode(OF,_c),t.registerNode(IF,fc),t.registerNode(Lf,_c),t.registerNode(kF,_c),t.registerNode(NO,dc),t.registerNode(IO,dc),t.registerNode(LO,dc),t.registerNode(PO,dc),t.registerNode(FO,dc),t.registerNode(OO,dc),t.registerNode(RO,dc),t.registerNode(zF,pc),t.registerNode(GF,pc)}}.run(t),class{static run(t){t.registerNode(qF,wc),t.registerNode(YF,wc),t.registerNode(JF,wc),t.registerNode(iD,wc)}}.run(t),class{static run(t){t.registerNode(dD,Ac),t.registerNode(AD,Ac),t.registerNode(ek,Ec),t.registerNode(ak,Tc),t.registerNode(pk,Ec),t.registerNode(yk,Tc),t.registerNode(Ik,Ec),t.registerNode(Uk,Ec),t.registerNode(jk,Tc),t.registerNode(tB,Ec),t.registerNode(rB,Tc),t.registerNode(lB,Ec),t.registerNode(dB,Tc),t.registerNode(AB,Ec),t.registerNode(LB,Ec),t.registerNode(IB,Sc),t.registerNode(kB,Tc),t.registerNode(UB,Tc),t.registerNode(HB,Ec),t.registerNode(QB,Cc),t.registerNode(ez,Cc),t.registerNode(rz,Mc),t.registerNode(sz,Mc),t.registerNode(oz,Mc),t.registerNode(az,Mc),t.registerNode(lz,Mc),t.registerNode(cz,Mc)}}.run(t),class{static run(t){t.registerNode(gz,Pc),t.registerNode(Uz,Pc),t.registerNode(Zz,Pc),t.registerNode(rU,Pc),t.registerNode(uU,Pc),t.registerNode(vU,Pc),t.registerNode(CU,Lc),t.registerNode(PU,Fc),t.registerNode(HU,Nc),t.registerNode(YU,Rc),t.registerNode(ZU,Fc),t.registerNode(nG,Fc),t.registerNode(NG,Nc),t.registerNode(jG,Lc),t.registerNode(YG,Fc),t.registerNode(ZG,Nc),t.registerNode(lH,Oc),t.registerNode(dH,Oc),t.registerNode(mH,Oc),t.registerNode(yH,Ic),t.registerNode(xH,Ic),t.registerNode(bH,Ic),t.registerNode(wH,Ic),t.registerNode(TH,Ic),t.registerNode(AH,Ic)}}.run(t),class{static run(t){t.registerNode(RH,Qc),t.registerNode(DH,Qc),t.registerNode(zH,Zc),t.registerNode(VH,Zc),t.registerNode(WH,Kc),t.registerNode(XH,Kc),t.registerNode(JH,Kc),t.registerNode(QH,Kc),t.registerNode(aj,Qc),t.registerNode(rj,Qc),t.registerNode(hj,Qc),t.registerNode(_j,Kc),t.registerNode(gj,Zc),t.registerNode(yj,Jc),t.registerNode(bj,Kc),t.registerNode(Sj,Kc),t.registerNode(Nj,Kc),t.registerNode(Oj,Kc),t.registerNode(Ij,Qc),t.registerNode(kj,Qc),t.registerNode(zj,Kc),t.registerNode(Vj,Qc),t.registerNode(Wj,Zc),t.registerNode(Xj,Kc),t.registerNode(Zj,Jc),t.registerNode(eW,Qc),t.registerNode(iW,Jc),t.registerNode(oW,Qc),t.registerNode(cW,tu),t.registerNode(uW,tu),t.registerNode(hW,tu),t.registerNode(dW,tu),t.registerNode(pW,tu),t.registerNode(_W,tu)}}.run(t),class{static run(t){t.registerNode(bW,Dc),t.registerNode(PV,Bc),t.registerNode(wW,kc),t.registerNode(gW,kc),t.registerNode(TW,kc),t.registerNode(AW,kc),t.registerNode(EW,kc),t.registerNode(MW,kc)}}.run(t),class{static run(t){t.registerOperation(SW),t.registerOperation(GW),t.registerOperation($W),t.registerOperation(KW),t.registerOperation(iq),t.registerOperation(gq),t.registerOperation(hq),t.registerOperation(wq),t.registerOperation(eX),t.registerOperation(sX),t.registerOperation(yY),t.registerOperation(AY),t.registerOperation(s$),t.registerOperation(A$),t.registerOperation(DJ),t.registerOperation(YJ),t.registerOperation(rZ),t.registerOperation(lZ),t.registerOperation(_Z),t.registerOperation(PZ),t.registerOperation(AZ),t.registerOperation(WZ),t.registerOperation(JZ),t.registerOperation(fQ),t.registerOperation(TQ),t.registerOperation(LQ),t.registerOperation(DQ),t.registerOperation(XQ),t.registerOperation(nK),t.registerOperation(pK),t.registerOperation(xK),t.registerOperation(AK),t.registerOperation(RK),t.registerOperation(GK),t.registerOperation(QK),t.registerOperation(h0),t.registerOperation(w0),t.registerOperation(H0),t.registerOperation(X0),t.registerOperation(Q0),t.registerOperation(n1),t.registerOperation(l1),t.registerOperation(S1),t.registerOperation(I1),t.registerOperation(B1),t.registerNode(LW,Hc),t.registerNode(RW,Uc),t.registerNode(UW,Uc),t.registerNode(jW,Gc),t.registerNode(QW,Gc),t.registerNode(nq,Gc),t.registerNode(aq,Gc),t.registerNode(cq,Gc),t.registerNode(_q,Gc),t.registerNode(xq,Gc),t.registerNode(Mq,Gc),t.registerNode(Cq,Gc),t.registerNode(Lq,Gc),t.registerNode(Dq,Gc),t.registerNode(Bq,qc),t.registerNode(Uq,qc),t.registerNode(rX,qc),t.registerNode(lX,Yc),t.registerNode(dY,Wc),t.registerNode(vY,Yc),t.registerNode(bY,Yc),t.registerNode(SY,Yc),t.registerNode(IY,Yc),t.registerNode(UY,qc),t.registerNode(HY,Yc),t.registerNode(e$,qc),t.registerNode(l$,Yc),t.registerNode(p$,Hc),t.registerNode(b$,Hc),t.registerNode(S$,Wc),t.registerNode(N$,Wc),t.registerNode(j$,qc),t.registerNode(q$,qc),t.registerNode(CJ,zc),t.registerNode(LJ,qc),t.registerNode(zJ,Hc),t.registerNode(GJ,qc),t.registerNode(WJ,Yc),t.registerNode(tZ,qc),t.registerNode(QJ,Wc),t.registerNode(aZ,Yc),t.registerNode(hZ,$c),t.registerNode(pZ,$c),t.registerNode(gZ,qc),t.registerNode(yZ,qc),t.registerNode(bZ,Yc),t.registerNode(TZ,zc),t.registerNode(SZ,$c),t.registerNode(RZ,zc),t.registerNode(kZ,Wc),t.registerNode(VZ,Wc),t.registerNode(jZ,qc),t.registerNode(XZ,Wc),t.registerNode($Z,Hc),t.registerNode(KZ,qc),t.registerNode(eQ,zc,{userAllowed:!1}),t.registerNode(mQ,Vc),t.registerNode(yQ,qc),t.registerNode(MQ,Yc),t.registerNode(zQ,qc),t.registerNode(NQ,qc),t.registerNode(PQ,jc),t.registerNode(EG,zc),t.registerNode(WQ,qc),t.registerNode(JQ,qc),t.registerNode(sK,$c),t.registerNode(dK,qc),t.registerNode(fK,Gc),t.registerNode(TK,Hc),t.registerNode(SK,qc),t.registerNode(BK,qc),t.registerNode(DK,qc),t.registerNode(qK,zc),t.registerNode(YK,zc),t.registerNode(jK,qc),t.registerNode(e0,Yc),t.registerNode(i0,qc),t.registerNode(_0,qc),t.registerNode(f0,Wc),t.registerNode(v0,Wc),t.registerNode(yG,Wc),t.registerNode(E0,Hc),t.registerNode(C0,Wc),t.registerNode(O0,Yc),t.registerNode(V0,Yc),t.registerNode(q0,qc),t.registerNode(J0,qc),t.registerNode(e1,Yc),t.registerNode(s1,Yc),t.registerNode(h1,qc),t.registerNode(p1,qc),t.registerNode(v1,qc),t.registerNode(w1,qc),t.registerNode(E1,Yc),t.registerNode(N1,qc),t.registerNode(P1,qc),t.registerNode(k1,qc),t.registerNode(U1,qc),t.registerNode(H1,Xc),t.registerNode(j1,Xc),t.registerNode(W1,Xc),t.registerNode(q1,Xc),t.registerNode(X1,Xc),t.registerNode(Y1,Xc)}}.run(t)}}.run(ai),class{static run(t){t.registerCamera(lH),t.registerCamera(dH)}}.run(ai),class{static run(t){t.expressionsRegister.register(J1,\\\\\\\"arg\\\\\\\"),t.expressionsRegister.register(Z1,\\\\\\\"argc\\\\\\\"),t.expressionsRegister.register(t2,\\\\\\\"bbox\\\\\\\"),t.expressionsRegister.register(e2,\\\\\\\"centroid\\\\\\\"),t.expressionsRegister.register(n2,\\\\\\\"ch\\\\\\\"),t.expressionsRegister.register(i2,\\\\\\\"copy\\\\\\\"),t.expressionsRegister.register(r2,\\\\\\\"copRes\\\\\\\"),t.expressionsRegister.register(s2,\\\\\\\"isDeviceMobile\\\\\\\"),t.expressionsRegister.register(o2,\\\\\\\"isDeviceTouch\\\\\\\"),t.expressionsRegister.register(a2,\\\\\\\"js\\\\\\\"),t.expressionsRegister.register(l2,\\\\\\\"object\\\\\\\"),t.expressionsRegister.register(c2,\\\\\\\"objectsCount\\\\\\\"),t.expressionsRegister.register(u2,\\\\\\\"opdigits\\\\\\\"),t.expressionsRegister.register(h2,\\\\\\\"opname\\\\\\\"),t.expressionsRegister.register(d2,\\\\\\\"padzero\\\\\\\"),t.expressionsRegister.register(p2,\\\\\\\"point\\\\\\\"),t.expressionsRegister.register(_2,\\\\\\\"pointsCount\\\\\\\"),t.expressionsRegister.register(m2,\\\\\\\"strCharsCount\\\\\\\"),t.expressionsRegister.register(f2,\\\\\\\"strConcat\\\\\\\"),t.expressionsRegister.register(g2,\\\\\\\"strIndex\\\\\\\"),t.expressionsRegister.register(v2,\\\\\\\"strSub\\\\\\\"),t.expressionsRegister.register(y2,\\\\\\\"windowSize\\\\\\\")}}.run(ai),class{static run(t){t.assemblersRegister.register(Hn.GL_MESH_BASIC,b2,X2),t.assemblersRegister.register(Hn.GL_MESH_LAMBERT,b2,Y2),t.assemblersRegister.register(Hn.GL_MESH_PHONG,b2,$2),t.assemblersRegister.register(Hn.GL_MESH_STANDARD,b2,Z2),t.assemblersRegister.register(Hn.GL_MESH_PHYSICAL,b2,Q2),t.assemblersRegister.register(Hn.GL_PARTICLES,b2,h3),t.assemblersRegister.register(Hn.GL_POINTS,b2,s3),t.assemblersRegister.register(Hn.GL_LINE,b2,u3),t.assemblersRegister.register(Hn.GL_TEXTURE,b2,d3),t.assemblersRegister.register(Hn.GL_VOLUME,b2,g3)}}.run(ai))}}v3._started=!1,v3.run()}]);void 0===POLY&&console.error(\\\\\\\"esm-webpack-plugin: nothing exported!\\\\\\\");const _POLY$PolyScene=POLY.PolyScene,_POLY$Poly=POLY.Poly,_POLY$SceneJsonImporter=POLY.SceneJsonImporter,_POLY$SceneDataManifestImporter=POLY.SceneDataManifestImporter,_POLY$mountScene=POLY.mountScene;export{_POLY$PolyScene as PolyScene,_POLY$Poly as Poly,_POLY$SceneJsonImporter as SceneJsonImporter,_POLY$SceneDataManifestImporter as SceneDataManifestImporter,_POLY$mountScene as mountScene};\\n//# sourceMappingURL=all.js.map\"","status":200,"headers":{"content-type":"application/javascript","content-length":"2809283"}},"type":2,"external":true,"timestamp":1723910837319},{"data":{"url":"blob:https://ipfs.arkivo.art/78671595-8ad0-4e69-b31c-c4fd22d7248f","host":"","path":"https://ipfs.arkivo.art/78671595-8ad0-4e69-b31c-c4fd22d7248f","type":"http","query":"","method":"GET","headers":{"origin":"https://ipfs.arkivo.art","referer":"","user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/119.0.6045.9 Safari/537.36"},"fragment":"","postData":null,"protocol":"blob:"},"type":1,"external":false,"timestamp":1723910837325},{"data":{"url":"blob:https://ipfs.arkivo.art/78671595-8ad0-4e69-b31c-c4fd22d7248f","body":"\"// src/polygonjs/PolyConfig.js\\nfunction configurePolygonjs(poly) {\\n}\\nfunction configureScene(scene) {\\n}\\nexport {\\n  configurePolygonjs,\\n  configureScene\\n};\\n\"","status":200,"headers":{"content-type":"application/javascript","content-length":"155"}},"type":2,"external":true,"timestamp":1723910843228}],"browser":{"name":"chromium","version":"119.0.6045.9"},"viewport":{"width":2000,"height":2000},"screenshot":"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","consoleMessages":[{"text":"Unrecognized Content-Security-Policy directive 'prefetch-src'.","level":"error","timestamp":1723910836598},{"text":"brightness Bm","level":"log","timestamp":1723910837552},{"text":"[.WebGL-0x143001939500]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels","level":"warning","timestamp":1723910843249},{"text":"[.WebGL-0x143001939500]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels","level":"warning","timestamp":1723910843249},{"text":"[.WebGL-0x143001939500]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels","level":"warning","timestamp":1723910843249},{"text":"[.WebGL-0x143001939500]GL Driver Message (OpenGL, Performance, GL_CLOSE_PATH_NV, High): GPU stall due to ReadPixels (this message will no longer repeat)","level":"warning","timestamp":1723910843249}],"screenshotDelay":10000},"timestamp":1723910836153},"created_at":"2024-08-17T16:07:37.910+00:00","updated_at":"2024-08-17T16:07:37.910+00:00"}