@gui-chat-plugin/present3d 0.1.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/core.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./toThreeJS-MSLJncuP.cjs`);exports.TOOL_DEFINITION=e.w,exports.TOOL_NAME=e.T,exports.astToThreeJS=e.t,exports.executePresent3D=e.x,exports.parseShapeScript=e.y,exports.pluginCore=e.S,exports.present3D=e.C,exports.samples=e.b;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./toThreeJS-BE5vXH2S.cjs`);exports.TOOL_DEFINITION=e.w,exports.TOOL_NAME=e.T,exports.astToThreeJS=e.t,exports.executePresent3D=e.x,exports.parseShapeScript=e.y,exports.pluginCore=e.S,exports.present3D=e.C,exports.samples=e.b;
package/dist/core.js CHANGED
@@ -1,2 +1,2 @@
1
- import { C as e, S as t, T as n, b as r, t as i, w as a, x as o, y as s } from "./toThreeJS-Cmz9VcXY.js";
1
+ import { C as e, S as t, T as n, b as r, t as i, w as a, x as o, y as s } from "./toThreeJS-smhACxwN.js";
2
2
  export { a as TOOL_DEFINITION, n as TOOL_NAME, i as astToThreeJS, o as executePresent3D, s as parseShapeScript, t as pluginCore, e as present3D, r as samples };
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./toThreeJS-MSLJncuP.cjs`);require(`./core.cjs`),exports.TOOL_DEFINITION=e.w,exports.TOOL_NAME=e.T,exports.astToThreeJS=e.t,exports.executePresent3D=e.x,exports.parseShapeScript=e.y,exports.pluginCore=e.S,exports.present3D=e.C,exports.samples=e.b;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./toThreeJS-BE5vXH2S.cjs`);require(`./core.cjs`),exports.TOOL_DEFINITION=e.w,exports.TOOL_NAME=e.T,exports.astToThreeJS=e.t,exports.executePresent3D=e.x,exports.parseShapeScript=e.y,exports.pluginCore=e.S,exports.present3D=e.C,exports.samples=e.b;
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- import { C as e, S as t, T as n, b as r, t as i, w as a, x as o, y as s } from "./toThreeJS-Cmz9VcXY.js";
1
+ import { C as e, S as t, T as n, b as r, t as i, w as a, x as o, y as s } from "./toThreeJS-smhACxwN.js";
2
2
  import "./core.js";
3
3
  export { a as TOOL_DEFINITION, n as TOOL_NAME, i as astToThreeJS, o as executePresent3D, s as parseShapeScript, t as pluginCore, e as present3D, r as samples };
package/dist/style.css CHANGED
@@ -1,3 +1,3 @@
1
- /*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */
1
+ /*! tailwindcss v4.2.4 | MIT License | https://tailwindcss.com */
2
2
  @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-600:oklch(57.7% .245 27.325);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-800:oklch(43.2% .095 166.913);--color-indigo-100:oklch(93% .034 272.788);--color-indigo-200:oklch(87% .065 274.039);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-700:oklch(45.7% .24 277.023);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-800:oklch(27.8% .033 256.848);--color-white:#fff;--spacing:.25rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--font-weight-medium:500;--radius-md:.375rem;--radius-lg:.5rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.absolute{position:absolute}.relative{position:relative}.start{inset-inline-start:var(--spacing)}.m-0{margin:calc(var(--spacing) * 0)}.mx-auto{margin-inline:auto}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.inline{display:inline}.h-\[600px\]{height:600px}.w-full{width:100%}.max-w-3xl{max-width:var(--container-3xl)}.max-w-\[200px\]{max-width:200px}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-y{resize:vertical}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.overflow-x-auto{overflow-x:auto}.rounded{border-radius:.25rem}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-none{--tw-border-style:none;border-style:none}.border-emerald-200{border-color:var(--color-emerald-200)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-indigo-200{border-color:var(--color-indigo-200)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-white{background-color:var(--color-white)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.font-mono{font-family:var(--font-mono)}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.whitespace-pre-wrap{white-space:pre-wrap}.text-emerald-800{color:var(--color-emerald-800)}.text-gray-600{color:var(--color-gray-600)}.text-gray-800{color:var(--color-gray-800)}.text-indigo-700{color:var(--color-indigo-700)}.text-red-600{color:var(--color-red-600)}.text-white{color:var(--color-white)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.grayscale{--tw-grayscale:grayscale(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.hover\:border-indigo-300:hover{border-color:var(--color-indigo-300)}.hover\:bg-indigo-200:hover{background-color:var(--color-indigo-200)}.hover\:bg-indigo-700:hover{background-color:var(--color-indigo-700)}}.focus\:border-indigo-500:focus{border-color:var(--color-indigo-500)}.focus\:ring-\[3px\]:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-indigo-500\/10:focus{--tw-ring-color:#625fff1a}@supports (color:color-mix(in lab, red, red)){.focus\:ring-indigo-500\/10:focus{--tw-ring-color:color-mix(in oklab, var(--color-indigo-500) 10%, transparent)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}.present3d-container[data-v-daa337a0]{color:#fff;background:#1a1a1a;flex-direction:column;width:100%;height:100%;display:flex}.header[data-v-daa337a0]{background:#2a2a2a;border-bottom:1px solid #444;justify-content:space-between;align-items:center;padding:1rem;display:flex}.header h1[data-v-daa337a0]{margin:0;font-size:1.5rem;font-weight:600}.controls[data-v-daa337a0]{gap:.5rem;display:flex}.control-btn[data-v-daa337a0]{color:#fff;cursor:pointer;background:#3a3a3a;border:1px solid #555;border-radius:4px;align-items:center;gap:.25rem;padding:.5rem 1rem;font-size:.9rem;transition:background .2s;display:flex}.control-btn[data-v-daa337a0]:hover{background:#4a4a4a}.control-btn .material-icons[data-v-daa337a0]{font-size:1.2rem}.viewport[data-v-daa337a0]{flex:1;min-height:0;position:relative}.error[data-v-daa337a0]{color:#f66;background:#ff000020;border-bottom:1px solid #ff000040;padding:1rem;font-family:monospace}.script-source[data-v-daa337a0]{background:#00000040;border-top:1px solid #444;padding:.5rem;font-family:monospace;font-size:.85rem}.script-source summary[data-v-daa337a0]{cursor:pointer;-webkit-user-select:none;user-select:none;background:#2a2a2a;border-radius:4px;padding:.5rem}.script-source[open] summary[data-v-daa337a0]{margin-bottom:.5rem}.script-source summary[data-v-daa337a0]:hover{background:#3a3a3a}.script-editor[data-v-daa337a0]{color:#aaa;resize:vertical;background:#1a1a1a;border:1px solid #444;border-radius:4px;width:100%;min-height:150px;margin-bottom:.5rem;padding:1rem;font-family:Courier New,monospace;font-size:.9rem}.script-editor[data-v-daa337a0]:focus{background:#222;border-color:#666;outline:none}.apply-btn[data-v-daa337a0]{color:#fff;cursor:pointer;background:#4caf50;border:none;border-radius:4px;padding:.5rem 1rem;font-size:.9rem;transition:background .2s}.apply-btn[data-v-daa337a0]:hover{background:#45a049}.apply-btn[data-v-daa337a0]:active{background:#3d8b40}.apply-btn[data-v-daa337a0]:disabled{color:#666;cursor:not-allowed;opacity:.6;background:#ccc}.apply-btn[data-v-daa337a0]:disabled:hover{background:#ccc}.preview-container[data-v-75941188]{background:linear-gradient(135deg,#667eea 0%,#764ba2 100%);border-radius:8px;width:100%;height:100%;min-height:150px;position:relative;overflow:hidden}.preview-viewport[data-v-75941188]{width:100%;height:100%}.preview-title[data-v-75941188]{color:#fff;text-align:center;white-space:nowrap;text-overflow:ellipsis;background:#000000b3;padding:.5rem;font-size:.75rem;font-weight:500;position:absolute;bottom:0;left:0;right:0;overflow:hidden}
3
3
  /*$vite$:1*/
@@ -166,7 +166,7 @@ difference {
166
166
  gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
167
167
  }`,li=`void main() {
168
168
  gl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );
169
- }`,ui=class extends Er{constructor(e){super(),this.isShaderMaterial=!0,this.type=`ShaderMaterial`,this.defines={},this.uniforms={},this.uniformsGroups=[],this.vertexShader=ci,this.fragmentShader=li,this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.forceSinglePass=!0,this.extensions={clipCullDistance:!1,multiDraw:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv1:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,e!==void 0&&this.setValues(e)}copy(e){return super.copy(e),this.fragmentShader=e.fragmentShader,this.vertexShader=e.vertexShader,this.uniforms=ri(e.uniforms),this.uniformsGroups=ai(e.uniformsGroups),this.defines=Object.assign({},e.defines),this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.fog=e.fog,this.lights=e.lights,this.clipping=e.clipping,this.extensions=Object.assign({},e.extensions),this.glslVersion=e.glslVersion,this.defaultAttributeValues=Object.assign({},e.defaultAttributeValues),this.index0AttributeName=e.index0AttributeName,this.uniformsNeedUpdate=e.uniformsNeedUpdate,this}toJSON(e){let t=super.toJSON(e);t.glslVersion=this.glslVersion,t.uniforms={};for(let n in this.uniforms){let r=this.uniforms[n].value;r&&r.isTexture?t.uniforms[n]={type:`t`,value:r.toJSON(e).uuid}:r&&r.isColor?t.uniforms[n]={type:`c`,value:r.getHex()}:r&&r.isVector2?t.uniforms[n]={type:`v2`,value:r.toArray()}:r&&r.isVector3?t.uniforms[n]={type:`v3`,value:r.toArray()}:r&&r.isVector4?t.uniforms[n]={type:`v4`,value:r.toArray()}:r&&r.isMatrix3?t.uniforms[n]={type:`m3`,value:r.toArray()}:r&&r.isMatrix4?t.uniforms[n]={type:`m4`,value:r.toArray()}:t.uniforms[n]={value:r}}Object.keys(this.defines).length>0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader,t.lights=this.lights,t.clipping=this.clipping;let n={};for(let e in this.extensions)this.extensions[e]===!0&&(n[e]=!0);return Object.keys(n).length>0&&(t.extensions=n),t}},di=class extends ar{constructor(){super(),this.isCamera=!0,this.type=`Camera`,this.matrixWorldInverse=new q,this.projectionMatrix=new q,this.projectionMatrixInverse=new q,this.coordinateSystem=tt,this._reversedDepth=!1}get reversedDepth(){return this._reversedDepth}copy(e,t){return super.copy(e,t),this.matrixWorldInverse.copy(e.matrixWorldInverse),this.projectionMatrix.copy(e.projectionMatrix),this.projectionMatrixInverse.copy(e.projectionMatrixInverse),this.coordinateSystem=e.coordinateSystem,this}getWorldDirection(e){return super.getWorldDirection(e).negate()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(e,t){super.updateWorldMatrix(e,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return new this.constructor().copy(this)}},fi=new U,pi=new H,mi=new H,hi=class extends di{constructor(e=50,t=1,n=.1,r=2e3){super(),this.isPerspectiveCamera=!0,this.type=`PerspectiveCamera`,this.fov=e,this.zoom=1,this.near=n,this.far=r,this.focus=10,this.aspect=t,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.fov=e.fov,this.zoom=e.zoom,this.near=e.near,this.far=e.far,this.focus=e.focus,this.aspect=e.aspect,this.view=e.view===null?null:Object.assign({},e.view),this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this}setFocalLength(e){let t=.5*this.getFilmHeight()/e;this.fov=ht*2*Math.atan(t),this.updateProjectionMatrix()}getFocalLength(){let e=Math.tan(mt*.5*this.fov);return .5*this.getFilmHeight()/e}getEffectiveFOV(){return ht*2*Math.atan(Math.tan(mt*.5*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}getViewBounds(e,t,n){fi.set(-1,-1,.5).applyMatrix4(this.projectionMatrixInverse),t.set(fi.x,fi.y).multiplyScalar(-e/fi.z),fi.set(1,1,.5).applyMatrix4(this.projectionMatrixInverse),n.set(fi.x,fi.y).multiplyScalar(-e/fi.z)}getViewSize(e,t){return this.getViewBounds(e,pi,mi),t.subVectors(mi,pi)}setViewOffset(e,t,n,r,i,a){this.aspect=e/t,this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=n,this.view.offsetY=r,this.view.width=i,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){let e=this.near,t=e*Math.tan(mt*.5*this.fov)/this.zoom,n=2*t,r=this.aspect*n,i=-.5*r,a=this.view;if(this.view!==null&&this.view.enabled){let e=a.fullWidth,o=a.fullHeight;i+=a.offsetX*r/e,t-=a.offsetY*n/o,r*=a.width/e,n*=a.height/o}let o=this.filmOffset;o!==0&&(i+=e*o/this.getFilmWidth()),this.projectionMatrix.makePerspective(i,i+r,t,t-n,e,this.far,this.coordinateSystem,this.reversedDepth),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){let t=super.toJSON(e);return t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,this.view!==null&&(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}},gi=-90,_i=1,vi=class extends ar{constructor(e,t,n){super(),this.type=`CubeCamera`,this.renderTarget=n,this.coordinateSystem=null,this.activeMipmapLevel=0;let r=new hi(gi,_i,e,t);r.layers=this.layers,this.add(r);let i=new hi(gi,_i,e,t);i.layers=this.layers,this.add(i);let a=new hi(gi,_i,e,t);a.layers=this.layers,this.add(a);let o=new hi(gi,_i,e,t);o.layers=this.layers,this.add(o);let s=new hi(gi,_i,e,t);s.layers=this.layers,this.add(s);let c=new hi(gi,_i,e,t);c.layers=this.layers,this.add(c)}updateCoordinateSystem(){let e=this.coordinateSystem,t=this.children.concat(),[n,r,i,a,o,s]=t;for(let e of t)this.remove(e);if(e===2e3)n.up.set(0,1,0),n.lookAt(1,0,0),r.up.set(0,1,0),r.lookAt(-1,0,0),i.up.set(0,0,-1),i.lookAt(0,1,0),a.up.set(0,0,1),a.lookAt(0,-1,0),o.up.set(0,1,0),o.lookAt(0,0,1),s.up.set(0,1,0),s.lookAt(0,0,-1);else if(e===2001)n.up.set(0,-1,0),n.lookAt(-1,0,0),r.up.set(0,-1,0),r.lookAt(1,0,0),i.up.set(0,0,1),i.lookAt(0,1,0),a.up.set(0,0,-1),a.lookAt(0,-1,0),o.up.set(0,-1,0),o.lookAt(0,0,1),s.up.set(0,-1,0),s.lookAt(0,0,-1);else throw Error(`THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: `+e);for(let e of t)this.add(e),e.updateMatrixWorld()}update(e,t){this.parent===null&&this.updateMatrixWorld();let{renderTarget:n,activeMipmapLevel:r}=this;this.coordinateSystem!==e.coordinateSystem&&(this.coordinateSystem=e.coordinateSystem,this.updateCoordinateSystem());let[i,a,o,s,c,l]=this.children,u=e.getRenderTarget(),d=e.getActiveCubeFace(),f=e.getActiveMipmapLevel(),p=e.xr.enabled;e.xr.enabled=!1;let m=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,e.setRenderTarget(n,0,r),e.render(t,i),e.setRenderTarget(n,1,r),e.render(t,a),e.setRenderTarget(n,2,r),e.render(t,o),e.setRenderTarget(n,3,r),e.render(t,s),e.setRenderTarget(n,4,r),e.render(t,c),n.texture.generateMipmaps=m,e.setRenderTarget(n,5,r),e.render(t,l),e.setRenderTarget(u,d,f),e.xr.enabled=p,n.texture.needsPMREMUpdate=!0}},yi=class extends en{constructor(e=[],t=301,n,r,i,a,o,s,c,l){super(e,t,n,r,i,a,o,s,c,l),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(e){this.image=e}},bi=class extends nn{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;let n={width:e,height:e,depth:1};this.texture=new yi([n,n,n,n,n,n]),this._setTextureOptions(t),this.texture.isRenderTargetTexture=!0}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.colorSpace=t.colorSpace,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;let n={uniforms:{tEquirect:{value:null}},vertexShader:`
169
+ }`,ui=class extends Er{constructor(e){super(),this.isShaderMaterial=!0,this.type=`ShaderMaterial`,this.defines={},this.uniforms={},this.uniformsGroups=[],this.vertexShader=ci,this.fragmentShader=li,this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.forceSinglePass=!0,this.extensions={clipCullDistance:!1,multiDraw:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv1:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,e!==void 0&&this.setValues(e)}copy(e){return super.copy(e),this.fragmentShader=e.fragmentShader,this.vertexShader=e.vertexShader,this.uniforms=ri(e.uniforms),this.uniformsGroups=ai(e.uniformsGroups),this.defines=Object.assign({},e.defines),this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.fog=e.fog,this.lights=e.lights,this.clipping=e.clipping,this.extensions=Object.assign({},e.extensions),this.glslVersion=e.glslVersion,this.defaultAttributeValues=Object.assign({},e.defaultAttributeValues),this.index0AttributeName=e.index0AttributeName,this.uniformsNeedUpdate=e.uniformsNeedUpdate,this}toJSON(e){let t=super.toJSON(e);t.glslVersion=this.glslVersion,t.uniforms={};for(let n in this.uniforms){let r=this.uniforms[n].value;r&&r.isTexture?t.uniforms[n]={type:`t`,value:r.toJSON(e).uuid}:r&&r.isColor?t.uniforms[n]={type:`c`,value:r.getHex()}:r&&r.isVector2?t.uniforms[n]={type:`v2`,value:r.toArray()}:r&&r.isVector3?t.uniforms[n]={type:`v3`,value:r.toArray()}:r&&r.isVector4?t.uniforms[n]={type:`v4`,value:r.toArray()}:r&&r.isMatrix3?t.uniforms[n]={type:`m3`,value:r.toArray()}:r&&r.isMatrix4?t.uniforms[n]={type:`m4`,value:r.toArray()}:t.uniforms[n]={value:r}}Object.keys(this.defines).length>0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader,t.lights=this.lights,t.clipping=this.clipping;let n={};for(let e in this.extensions)this.extensions[e]===!0&&(n[e]=!0);return Object.keys(n).length>0&&(t.extensions=n),t}},di=class extends ar{constructor(){super(),this.isCamera=!0,this.type=`Camera`,this.matrixWorldInverse=new q,this.projectionMatrix=new q,this.projectionMatrixInverse=new q,this.coordinateSystem=tt,this._reversedDepth=!1}get reversedDepth(){return this._reversedDepth}copy(e,t){return super.copy(e,t),this.matrixWorldInverse.copy(e.matrixWorldInverse),this.projectionMatrix.copy(e.projectionMatrix),this.projectionMatrixInverse.copy(e.projectionMatrixInverse),this.coordinateSystem=e.coordinateSystem,this}getWorldDirection(e){return super.getWorldDirection(e).negate()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(e,t){super.updateWorldMatrix(e,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return new this.constructor().copy(this)}},fi=new U,pi=new H,mi=new H,hi=class extends di{constructor(e=50,t=1,n=.1,r=2e3){super(),this.isPerspectiveCamera=!0,this.type=`PerspectiveCamera`,this.fov=e,this.zoom=1,this.near=n,this.far=r,this.focus=10,this.aspect=t,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.fov=e.fov,this.zoom=e.zoom,this.near=e.near,this.far=e.far,this.focus=e.focus,this.aspect=e.aspect,this.view=e.view===null?null:Object.assign({},e.view),this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this}setFocalLength(e){let t=.5*this.getFilmHeight()/e;this.fov=ht*2*Math.atan(t),this.updateProjectionMatrix()}getFocalLength(){let e=Math.tan(mt*.5*this.fov);return .5*this.getFilmHeight()/e}getEffectiveFOV(){return ht*2*Math.atan(Math.tan(mt*.5*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}getViewBounds(e,t,n){fi.set(-1,-1,.5).applyMatrix4(this.projectionMatrixInverse),t.set(fi.x,fi.y).multiplyScalar(-e/fi.z),fi.set(1,1,.5).applyMatrix4(this.projectionMatrixInverse),n.set(fi.x,fi.y).multiplyScalar(-e/fi.z)}getViewSize(e,t){return this.getViewBounds(e,pi,mi),t.subVectors(mi,pi)}setViewOffset(e,t,n,r,i,a){this.aspect=e/t,this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=n,this.view.offsetY=r,this.view.width=i,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){let e=this.near,t=e*Math.tan(mt*.5*this.fov)/this.zoom,n=2*t,r=this.aspect*n,i=-.5*r,a=this.view;if(this.view!==null&&this.view.enabled){let e=a.fullWidth,o=a.fullHeight;i+=a.offsetX*r/e,t-=a.offsetY*n/o,r*=a.width/e,n*=a.height/o}let o=this.filmOffset;o!==0&&(i+=e*o/this.getFilmWidth()),this.projectionMatrix.makePerspective(i,i+r,t,t-n,e,this.far,this.coordinateSystem,this.reversedDepth),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){let t=super.toJSON(e);return t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,this.view!==null&&(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}},gi=-90,_i=1,vi=class extends ar{constructor(e,t,n){super(),this.type=`CubeCamera`,this.renderTarget=n,this.coordinateSystem=null,this.activeMipmapLevel=0;let r=new hi(gi,_i,e,t);r.layers=this.layers,this.add(r);let i=new hi(gi,_i,e,t);i.layers=this.layers,this.add(i);let a=new hi(gi,_i,e,t);a.layers=this.layers,this.add(a);let o=new hi(gi,_i,e,t);o.layers=this.layers,this.add(o);let s=new hi(gi,_i,e,t);s.layers=this.layers,this.add(s);let c=new hi(gi,_i,e,t);c.layers=this.layers,this.add(c)}updateCoordinateSystem(){let e=this.coordinateSystem,t=this.children.concat(),[n,r,i,a,o,s]=t;for(let e of t)this.remove(e);if(e===2e3)n.up.set(0,1,0),n.lookAt(1,0,0),r.up.set(0,1,0),r.lookAt(-1,0,0),i.up.set(0,0,-1),i.lookAt(0,1,0),a.up.set(0,0,1),a.lookAt(0,-1,0),o.up.set(0,1,0),o.lookAt(0,0,1),s.up.set(0,1,0),s.lookAt(0,0,-1);else if(e===2001)n.up.set(0,-1,0),n.lookAt(-1,0,0),r.up.set(0,-1,0),r.lookAt(1,0,0),i.up.set(0,0,1),i.lookAt(0,1,0),a.up.set(0,0,-1),a.lookAt(0,-1,0),o.up.set(0,-1,0),o.lookAt(0,0,1),s.up.set(0,-1,0),s.lookAt(0,0,-1);else throw Error(`THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: `+e);for(let e of t)this.add(e),e.updateMatrixWorld()}update(e,t){this.parent===null&&this.updateMatrixWorld();let{renderTarget:n,activeMipmapLevel:r}=this;this.coordinateSystem!==e.coordinateSystem&&(this.coordinateSystem=e.coordinateSystem,this.updateCoordinateSystem());let[i,a,o,s,c,l]=this.children,u=e.getRenderTarget(),d=e.getActiveCubeFace(),f=e.getActiveMipmapLevel(),p=e.xr.enabled;e.xr.enabled=!1;let m=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,e.setRenderTarget(n,0,r),e.render(t,i),e.setRenderTarget(n,1,r),e.render(t,a),e.setRenderTarget(n,2,r),e.render(t,o),e.setRenderTarget(n,3,r),e.render(t,s),e.setRenderTarget(n,4,r),e.render(t,c),n.texture.generateMipmaps=m,e.setRenderTarget(n,5,r),e.render(t,l),e.setRenderTarget(u,d,f),e.xr.enabled=p,n.texture.needsPMREMUpdate=!0}},yi=class extends en{constructor(e=[],t=301,n,r,i,a,o,s,c,l){super(e,t,n,r,i,a,o,s,c,l),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(e){this.image=e}},bi=class extends nn{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;let n={width:e,height:e,depth:1},r=[n,n,n,n,n,n];this.texture=new yi(r),this._setTextureOptions(t),this.texture.isRenderTargetTexture=!0}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.colorSpace=t.colorSpace,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;let n={uniforms:{tEquirect:{value:null}},vertexShader:`
170
170
 
171
171
  varying vec3 vWorldDirection;
172
172
 
@@ -4172,4 +4172,4 @@ void main() {
4172
4172
 
4173
4173
  }
4174
4174
 
4175
- }`,Ou=class{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(e,t){if(this.texture===null){let n=new Yi(e.texture);(e.depthNear!==t.depthNear||e.depthFar!==t.depthFar)&&(this.depthNear=e.depthNear,this.depthFar=e.depthFar),this.texture=n}}getMesh(e){if(this.texture!==null&&this.mesh===null){let t=e.cameras[0].viewport,n=new ui({vertexShader:Eu,fragmentShader:Du,uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new $r(new _o(20,20),n)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}},ku=class extends dt{constructor(e,t){super();let n=this,r=null,i=1,a=null,o=`local-floor`,s=1,c=null,l=null,u=null,d=null,f=null,p=null,m=typeof XRWebGLBinding<`u`,h=new Ou,g={},_=t.getContextAttributes(),v=null,y=null,b=[],x=[],C=new H,w=null,T=new hi;T.viewport=new K;let E=new hi;E.viewport=new K;let O=[T,E],k=new Xo,ee=null,te=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(e){let t=b[e];return t===void 0&&(t=new Ci,b[e]=t),t.getTargetRaySpace()},this.getControllerGrip=function(e){let t=b[e];return t===void 0&&(t=new Ci,b[e]=t),t.getGripSpace()},this.getHand=function(e){let t=b[e];return t===void 0&&(t=new Ci,b[e]=t),t.getHandSpace()};function A(e){let t=x.indexOf(e.inputSource);if(t===-1)return;let n=b[t];n!==void 0&&(n.update(e.inputSource,e.frame,c||a),n.dispatchEvent({type:e.type,data:e.inputSource}))}function j(){r.removeEventListener(`select`,A),r.removeEventListener(`selectstart`,A),r.removeEventListener(`selectend`,A),r.removeEventListener(`squeeze`,A),r.removeEventListener(`squeezestart`,A),r.removeEventListener(`squeezeend`,A),r.removeEventListener(`end`,j),r.removeEventListener(`inputsourceschange`,M);for(let e=0;e<b.length;e++){let t=x[e];t!==null&&(x[e]=null,b[e].disconnect(t))}ee=null,te=null,h.reset();for(let e in g)delete g[e];e.setRenderTarget(v),f=null,d=null,u=null,r=null,y=null,de.stop(),n.isPresenting=!1,e.setPixelRatio(w),e.setSize(C.width,C.height,!1),n.dispatchEvent({type:`sessionend`})}this.setFramebufferScaleFactor=function(e){i=e,n.isPresenting===!0&&z(`WebXRManager: Cannot change framebuffer scale while presenting.`)},this.setReferenceSpaceType=function(e){o=e,n.isPresenting===!0&&z(`WebXRManager: Cannot change reference space type while presenting.`)},this.getReferenceSpace=function(){return c||a},this.setReferenceSpace=function(e){c=e},this.getBaseLayer=function(){return d===null?f:d},this.getBinding=function(){return u===null&&m&&(u=new XRWebGLBinding(r,t)),u},this.getFrame=function(){return p},this.getSession=function(){return r},this.setSession=async function(l){if(r=l,r!==null){if(v=e.getRenderTarget(),r.addEventListener(`select`,A),r.addEventListener(`selectstart`,A),r.addEventListener(`selectend`,A),r.addEventListener(`squeeze`,A),r.addEventListener(`squeezestart`,A),r.addEventListener(`squeezeend`,A),r.addEventListener(`end`,j),r.addEventListener(`inputsourceschange`,M),_.xrCompatible!==!0&&await t.makeXRCompatible(),w=e.getPixelRatio(),e.getSize(C),m&&`createProjectionLayer`in XRWebGLBinding.prototype){let n=null,a=null,o=null;_.depth&&(o=_.stencil?t.DEPTH24_STENCIL8:t.DEPTH_COMPONENT24,n=_.stencil?ae:ie,a=_.stencil?ne:D);let s={colorFormat:t.RGBA8,depthFormat:o,scaleFactor:i};u=this.getBinding(),d=u.createProjectionLayer(s),r.updateRenderState({layers:[d]}),e.setPixelRatio(1),e.setSize(d.textureWidth,d.textureHeight,!1),y=new nn(d.textureWidth,d.textureHeight,{format:re,type:S,depthTexture:new qi(d.textureWidth,d.textureHeight,a,void 0,void 0,void 0,void 0,void 0,void 0,n),stencilBuffer:_.stencil,colorSpace:e.outputColorSpace,samples:_.antialias?4:0,resolveDepthBuffer:d.ignoreDepthValues===!1,resolveStencilBuffer:d.ignoreDepthValues===!1})}else{let n={antialias:_.antialias,alpha:!0,depth:_.depth,stencil:_.stencil,framebufferScaleFactor:i};f=new XRWebGLLayer(r,t,n),r.updateRenderState({baseLayer:f}),e.setPixelRatio(1),e.setSize(f.framebufferWidth,f.framebufferHeight,!1),y=new nn(f.framebufferWidth,f.framebufferHeight,{format:re,type:S,colorSpace:e.outputColorSpace,stencilBuffer:_.stencil,resolveDepthBuffer:f.ignoreDepthValues===!1,resolveStencilBuffer:f.ignoreDepthValues===!1})}y.isXRRenderTarget=!0,this.setFoveation(s),c=null,a=await r.requestReferenceSpace(o),de.setContext(r),de.start(),n.isPresenting=!0,n.dispatchEvent({type:`sessionstart`})}},this.getEnvironmentBlendMode=function(){if(r!==null)return r.environmentBlendMode},this.getDepthTexture=function(){return h.getDepthTexture()};function M(e){for(let t=0;t<e.removed.length;t++){let n=e.removed[t],r=x.indexOf(n);r>=0&&(x[r]=null,b[r].disconnect(n))}for(let t=0;t<e.added.length;t++){let n=e.added[t],r=x.indexOf(n);if(r===-1){for(let e=0;e<b.length;e++)if(e>=x.length){x.push(n),r=e;break}else if(x[e]===null){x[e]=n,r=e;break}if(r===-1)break}let i=b[r];i&&i.connect(n)}}let N=new U,oe=new U;function se(e,t,n){N.setFromMatrixPosition(t.matrixWorld),oe.setFromMatrixPosition(n.matrixWorld);let r=N.distanceTo(oe),i=t.projectionMatrix.elements,a=n.projectionMatrix.elements,o=i[14]/(i[10]-1),s=i[14]/(i[10]+1),c=(i[9]+1)/i[5],l=(i[9]-1)/i[5],u=(i[8]-1)/i[0],d=(a[8]+1)/a[0],f=o*u,p=o*d,m=r/(-u+d),h=m*-u;if(t.matrixWorld.decompose(e.position,e.quaternion,e.scale),e.translateX(h),e.translateZ(m),e.matrixWorld.compose(e.position,e.quaternion,e.scale),e.matrixWorldInverse.copy(e.matrixWorld).invert(),i[10]===-1)e.projectionMatrix.copy(t.projectionMatrix),e.projectionMatrixInverse.copy(t.projectionMatrixInverse);else{let t=o+m,n=s+m,i=f-h,a=p+(r-h),u=c*s/n*t,d=l*s/n*t;e.projectionMatrix.makePerspective(i,a,u,d,t,n),e.projectionMatrixInverse.copy(e.projectionMatrix).invert()}}function ce(e,t){t===null?e.matrixWorld.copy(e.matrix):e.matrixWorld.multiplyMatrices(t.matrixWorld,e.matrix),e.matrixWorldInverse.copy(e.matrixWorld).invert()}this.updateCamera=function(e){if(r===null)return;let t=e.near,n=e.far;h.texture!==null&&(h.depthNear>0&&(t=h.depthNear),h.depthFar>0&&(n=h.depthFar)),k.near=E.near=T.near=t,k.far=E.far=T.far=n,(ee!==k.near||te!==k.far)&&(r.updateRenderState({depthNear:k.near,depthFar:k.far}),ee=k.near,te=k.far),k.layers.mask=e.layers.mask|6,T.layers.mask=k.layers.mask&3,E.layers.mask=k.layers.mask&5;let i=e.parent,a=k.cameras;ce(k,i);for(let e=0;e<a.length;e++)ce(a[e],i);a.length===2?se(k,T,E):k.projectionMatrix.copy(T.projectionMatrix),le(e,k,i)};function le(e,t,n){n===null?e.matrix.copy(t.matrixWorld):(e.matrix.copy(n.matrixWorld),e.matrix.invert(),e.matrix.multiply(t.matrixWorld)),e.matrix.decompose(e.position,e.quaternion,e.scale),e.updateMatrixWorld(!0),e.projectionMatrix.copy(t.projectionMatrix),e.projectionMatrixInverse.copy(t.projectionMatrixInverse),e.isPerspectiveCamera&&(e.fov=ht*2*Math.atan(1/e.projectionMatrix.elements[5]),e.zoom=1)}this.getCamera=function(){return k},this.getFoveation=function(){if(!(d===null&&f===null))return s},this.setFoveation=function(e){s=e,d!==null&&(d.fixedFoveation=e),f!==null&&f.fixedFoveation!==void 0&&(f.fixedFoveation=e)},this.hasDepthSensing=function(){return h.texture!==null},this.getDepthSensingMesh=function(){return h.getMesh(k)},this.getCameraTexture=function(e){return g[e]};let P=null;function ue(t,i){if(l=i.getViewerPose(c||a),p=i,l!==null){let t=l.views;f!==null&&(e.setRenderTargetFramebuffer(y,f.framebuffer),e.setRenderTarget(y));let i=!1;t.length!==k.cameras.length&&(k.cameras.length=0,i=!0);for(let n=0;n<t.length;n++){let r=t[n],a=null;if(f!==null)a=f.getViewport(r);else{let t=u.getViewSubImage(d,r);a=t.viewport,n===0&&(e.setRenderTargetTextures(y,t.colorTexture,t.depthStencilTexture),e.setRenderTarget(y))}let o=O[n];o===void 0&&(o=new hi,o.layers.enable(n),o.viewport=new K,O[n]=o),o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.quaternion,o.scale),o.projectionMatrix.fromArray(r.projectionMatrix),o.projectionMatrixInverse.copy(o.projectionMatrix).invert(),o.viewport.set(a.x,a.y,a.width,a.height),n===0&&(k.matrix.copy(o.matrix),k.matrix.decompose(k.position,k.quaternion,k.scale)),i===!0&&k.cameras.push(o)}let a=r.enabledFeatures;if(a&&a.includes(`depth-sensing`)&&r.depthUsage==`gpu-optimized`&&m){u=n.getBinding();let e=u.getDepthInformation(t[0]);e&&e.isValid&&e.texture&&h.init(e,r.renderState)}if(a&&a.includes(`camera-access`)&&m){e.state.unbindTexture(),u=n.getBinding();for(let e=0;e<t.length;e++){let n=t[e].camera;if(n){let e=g[n];e||(e=new Yi,g[n]=e);let t=u.getCameraImage(n);e.sourceTexture=t}}}}for(let e=0;e<b.length;e++){let t=x[e],n=b[e];t!==null&&n!==void 0&&n.update(t,i,c||a)}P&&P(t,i),i.detectedPlanes&&n.dispatchEvent({type:`planesdetected`,data:i}),p=null}let de=new Ss;de.setAnimationLoop(ue),this.setAnimationLoop=function(e){P=e},this.dispose=function(){}}},Au=new Hn,ju=new q;function Mu(e,t){function n(e,t){e.matrixAutoUpdate===!0&&e.updateMatrix(),t.value.copy(e.matrix)}function r(t,n){n.color.getRGB(t.fogColor.value,oi(e)),n.isFog?(t.fogNear.value=n.near,t.fogFar.value=n.far):n.isFogExp2&&(t.fogDensity.value=n.density)}function i(e,t,n,r,i){t.isMeshBasicMaterial||t.isMeshLambertMaterial?a(e,t):t.isMeshToonMaterial?(a(e,t),d(e,t)):t.isMeshPhongMaterial?(a(e,t),u(e,t)):t.isMeshStandardMaterial?(a(e,t),f(e,t),t.isMeshPhysicalMaterial&&p(e,t,i)):t.isMeshMatcapMaterial?(a(e,t),m(e,t)):t.isMeshDepthMaterial?a(e,t):t.isMeshDistanceMaterial?(a(e,t),h(e,t)):t.isMeshNormalMaterial?a(e,t):t.isLineBasicMaterial?(o(e,t),t.isLineDashedMaterial&&s(e,t)):t.isPointsMaterial?c(e,t,n,r):t.isSpriteMaterial?l(e,t):t.isShadowMaterial?(e.color.value.copy(t.color),e.opacity.value=t.opacity):t.isShaderMaterial&&(t.uniformsNeedUpdate=!1)}function a(e,r){e.opacity.value=r.opacity,r.color&&e.diffuse.value.copy(r.color),r.emissive&&e.emissive.value.copy(r.emissive).multiplyScalar(r.emissiveIntensity),r.map&&(e.map.value=r.map,n(r.map,e.mapTransform)),r.alphaMap&&(e.alphaMap.value=r.alphaMap,n(r.alphaMap,e.alphaMapTransform)),r.bumpMap&&(e.bumpMap.value=r.bumpMap,n(r.bumpMap,e.bumpMapTransform),e.bumpScale.value=r.bumpScale,r.side===1&&(e.bumpScale.value*=-1)),r.normalMap&&(e.normalMap.value=r.normalMap,n(r.normalMap,e.normalMapTransform),e.normalScale.value.copy(r.normalScale),r.side===1&&e.normalScale.value.negate()),r.displacementMap&&(e.displacementMap.value=r.displacementMap,n(r.displacementMap,e.displacementMapTransform),e.displacementScale.value=r.displacementScale,e.displacementBias.value=r.displacementBias),r.emissiveMap&&(e.emissiveMap.value=r.emissiveMap,n(r.emissiveMap,e.emissiveMapTransform)),r.specularMap&&(e.specularMap.value=r.specularMap,n(r.specularMap,e.specularMapTransform)),r.alphaTest>0&&(e.alphaTest.value=r.alphaTest);let i=t.get(r),a=i.envMap,o=i.envMapRotation;a&&(e.envMap.value=a,Au.copy(o),Au.x*=-1,Au.y*=-1,Au.z*=-1,a.isCubeTexture&&a.isRenderTargetTexture===!1&&(Au.y*=-1,Au.z*=-1),e.envMapRotation.value.setFromMatrix4(ju.makeRotationFromEuler(Au)),e.flipEnvMap.value=a.isCubeTexture&&a.isRenderTargetTexture===!1?-1:1,e.reflectivity.value=r.reflectivity,e.ior.value=r.ior,e.refractionRatio.value=r.refractionRatio),r.lightMap&&(e.lightMap.value=r.lightMap,e.lightMapIntensity.value=r.lightMapIntensity,n(r.lightMap,e.lightMapTransform)),r.aoMap&&(e.aoMap.value=r.aoMap,e.aoMapIntensity.value=r.aoMapIntensity,n(r.aoMap,e.aoMapTransform))}function o(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,t.map&&(e.map.value=t.map,n(t.map,e.mapTransform))}function s(e,t){e.dashSize.value=t.dashSize,e.totalSize.value=t.dashSize+t.gapSize,e.scale.value=t.scale}function c(e,t,r,i){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,e.size.value=t.size*r,e.scale.value=i*.5,t.map&&(e.map.value=t.map,n(t.map,e.uvTransform)),t.alphaMap&&(e.alphaMap.value=t.alphaMap,n(t.alphaMap,e.alphaMapTransform)),t.alphaTest>0&&(e.alphaTest.value=t.alphaTest)}function l(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,e.rotation.value=t.rotation,t.map&&(e.map.value=t.map,n(t.map,e.mapTransform)),t.alphaMap&&(e.alphaMap.value=t.alphaMap,n(t.alphaMap,e.alphaMapTransform)),t.alphaTest>0&&(e.alphaTest.value=t.alphaTest)}function u(e,t){e.specular.value.copy(t.specular),e.shininess.value=Math.max(t.shininess,1e-4)}function d(e,t){t.gradientMap&&(e.gradientMap.value=t.gradientMap)}function f(e,t){e.metalness.value=t.metalness,t.metalnessMap&&(e.metalnessMap.value=t.metalnessMap,n(t.metalnessMap,e.metalnessMapTransform)),e.roughness.value=t.roughness,t.roughnessMap&&(e.roughnessMap.value=t.roughnessMap,n(t.roughnessMap,e.roughnessMapTransform)),t.envMap&&(e.envMapIntensity.value=t.envMapIntensity)}function p(e,t,r){e.ior.value=t.ior,t.sheen>0&&(e.sheenColor.value.copy(t.sheenColor).multiplyScalar(t.sheen),e.sheenRoughness.value=t.sheenRoughness,t.sheenColorMap&&(e.sheenColorMap.value=t.sheenColorMap,n(t.sheenColorMap,e.sheenColorMapTransform)),t.sheenRoughnessMap&&(e.sheenRoughnessMap.value=t.sheenRoughnessMap,n(t.sheenRoughnessMap,e.sheenRoughnessMapTransform))),t.clearcoat>0&&(e.clearcoat.value=t.clearcoat,e.clearcoatRoughness.value=t.clearcoatRoughness,t.clearcoatMap&&(e.clearcoatMap.value=t.clearcoatMap,n(t.clearcoatMap,e.clearcoatMapTransform)),t.clearcoatRoughnessMap&&(e.clearcoatRoughnessMap.value=t.clearcoatRoughnessMap,n(t.clearcoatRoughnessMap,e.clearcoatRoughnessMapTransform)),t.clearcoatNormalMap&&(e.clearcoatNormalMap.value=t.clearcoatNormalMap,n(t.clearcoatNormalMap,e.clearcoatNormalMapTransform),e.clearcoatNormalScale.value.copy(t.clearcoatNormalScale),t.side===1&&e.clearcoatNormalScale.value.negate())),t.dispersion>0&&(e.dispersion.value=t.dispersion),t.iridescence>0&&(e.iridescence.value=t.iridescence,e.iridescenceIOR.value=t.iridescenceIOR,e.iridescenceThicknessMinimum.value=t.iridescenceThicknessRange[0],e.iridescenceThicknessMaximum.value=t.iridescenceThicknessRange[1],t.iridescenceMap&&(e.iridescenceMap.value=t.iridescenceMap,n(t.iridescenceMap,e.iridescenceMapTransform)),t.iridescenceThicknessMap&&(e.iridescenceThicknessMap.value=t.iridescenceThicknessMap,n(t.iridescenceThicknessMap,e.iridescenceThicknessMapTransform))),t.transmission>0&&(e.transmission.value=t.transmission,e.transmissionSamplerMap.value=r.texture,e.transmissionSamplerSize.value.set(r.width,r.height),t.transmissionMap&&(e.transmissionMap.value=t.transmissionMap,n(t.transmissionMap,e.transmissionMapTransform)),e.thickness.value=t.thickness,t.thicknessMap&&(e.thicknessMap.value=t.thicknessMap,n(t.thicknessMap,e.thicknessMapTransform)),e.attenuationDistance.value=t.attenuationDistance,e.attenuationColor.value.copy(t.attenuationColor)),t.anisotropy>0&&(e.anisotropyVector.value.set(t.anisotropy*Math.cos(t.anisotropyRotation),t.anisotropy*Math.sin(t.anisotropyRotation)),t.anisotropyMap&&(e.anisotropyMap.value=t.anisotropyMap,n(t.anisotropyMap,e.anisotropyMapTransform))),e.specularIntensity.value=t.specularIntensity,e.specularColor.value.copy(t.specularColor),t.specularColorMap&&(e.specularColorMap.value=t.specularColorMap,n(t.specularColorMap,e.specularColorMapTransform)),t.specularIntensityMap&&(e.specularIntensityMap.value=t.specularIntensityMap,n(t.specularIntensityMap,e.specularIntensityMapTransform))}function m(e,t){t.matcap&&(e.matcap.value=t.matcap)}function h(e,n){let r=t.get(n).light;e.referencePosition.value.setFromMatrixPosition(r.matrixWorld),e.nearDistance.value=r.shadow.camera.near,e.farDistance.value=r.shadow.camera.far}return{refreshFogUniforms:r,refreshMaterialUniforms:i}}function Nu(e,t,n,r){let i={},a={},o=[],s=e.getParameter(e.MAX_UNIFORM_BUFFER_BINDINGS);function c(e,t){let n=t.program;r.uniformBlockBinding(e,n)}function l(e,n){let o=i[e.id];o===void 0&&(m(e),o=u(e),i[e.id]=o,e.addEventListener(`dispose`,g));let s=n.program;r.updateUBOMapping(e,s);let c=t.render.frame;a[e.id]!==c&&(f(e),a[e.id]=c)}function u(t){let n=d();t.__bindingPointIndex=n;let r=e.createBuffer(),i=t.__size,a=t.usage;return e.bindBuffer(e.UNIFORM_BUFFER,r),e.bufferData(e.UNIFORM_BUFFER,i,a),e.bindBuffer(e.UNIFORM_BUFFER,null),e.bindBufferBase(e.UNIFORM_BUFFER,n,r),r}function d(){for(let e=0;e<s;e++)if(o.indexOf(e)===-1)return o.push(e),e;return B(`WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached.`),0}function f(t){let n=i[t.id],r=t.uniforms,a=t.__cache;e.bindBuffer(e.UNIFORM_BUFFER,n);for(let t=0,n=r.length;t<n;t++){let n=Array.isArray(r[t])?r[t]:[r[t]];for(let r=0,i=n.length;r<i;r++){let i=n[r];if(p(i,t,r,a)===!0){let t=i.__offset,n=Array.isArray(i.value)?i.value:[i.value],r=0;for(let a=0;a<n.length;a++){let o=n[a],s=h(o);typeof o==`number`||typeof o==`boolean`?(i.__data[0]=o,e.bufferSubData(e.UNIFORM_BUFFER,t+r,i.__data)):o.isMatrix3?(i.__data[0]=o.elements[0],i.__data[1]=o.elements[1],i.__data[2]=o.elements[2],i.__data[3]=0,i.__data[4]=o.elements[3],i.__data[5]=o.elements[4],i.__data[6]=o.elements[5],i.__data[7]=0,i.__data[8]=o.elements[6],i.__data[9]=o.elements[7],i.__data[10]=o.elements[8],i.__data[11]=0):(o.toArray(i.__data,r),r+=s.storage/Float32Array.BYTES_PER_ELEMENT)}e.bufferSubData(e.UNIFORM_BUFFER,t,i.__data)}}}e.bindBuffer(e.UNIFORM_BUFFER,null)}function p(e,t,n,r){let i=e.value,a=t+`_`+n;if(r[a]===void 0)return typeof i==`number`||typeof i==`boolean`?r[a]=i:r[a]=i.clone(),!0;{let e=r[a];if(typeof i==`number`||typeof i==`boolean`){if(e!==i)return r[a]=i,!0}else if(e.equals(i)===!1)return e.copy(i),!0}return!1}function m(e){let t=e.uniforms,n=0;for(let e=0,r=t.length;e<r;e++){let r=Array.isArray(t[e])?t[e]:[t[e]];for(let e=0,t=r.length;e<t;e++){let t=r[e],i=Array.isArray(t.value)?t.value:[t.value];for(let e=0,r=i.length;e<r;e++){let r=i[e],a=h(r),o=n%16,s=o%a.boundary,c=o+s;n+=s,c!==0&&16-c<a.storage&&(n+=16-c),t.__data=new Float32Array(a.storage/Float32Array.BYTES_PER_ELEMENT),t.__offset=n,n+=a.storage}}}let r=n%16;return r>0&&(n+=16-r),e.__size=n,e.__cache={},this}function h(e){let t={boundary:0,storage:0};return typeof e==`number`||typeof e==`boolean`?(t.boundary=4,t.storage=4):e.isVector2?(t.boundary=8,t.storage=8):e.isVector3||e.isColor?(t.boundary=16,t.storage=12):e.isVector4?(t.boundary=16,t.storage=16):e.isMatrix3?(t.boundary=48,t.storage=48):e.isMatrix4?(t.boundary=64,t.storage=64):e.isTexture?z(`WebGLRenderer: Texture samplers can not be part of an uniforms group.`):z(`WebGLRenderer: Unsupported uniform value type.`,e),t}function g(t){let n=t.target;n.removeEventListener(`dispose`,g);let r=o.indexOf(n.__bindingPointIndex);o.splice(r,1),e.deleteBuffer(i[n.id]),delete i[n.id],delete a[n.id]}function _(){for(let t in i)e.deleteBuffer(i[t]);o=[],i={},a={}}return{bind:c,update:l,dispose:_}}var Pu=new Uint16Array([12469,15057,12620,14925,13266,14620,13807,14376,14323,13990,14545,13625,14713,13328,14840,12882,14931,12528,14996,12233,15039,11829,15066,11525,15080,11295,15085,10976,15082,10705,15073,10495,13880,14564,13898,14542,13977,14430,14158,14124,14393,13732,14556,13410,14702,12996,14814,12596,14891,12291,14937,11834,14957,11489,14958,11194,14943,10803,14921,10506,14893,10278,14858,9960,14484,14039,14487,14025,14499,13941,14524,13740,14574,13468,14654,13106,14743,12678,14818,12344,14867,11893,14889,11509,14893,11180,14881,10751,14852,10428,14812,10128,14765,9754,14712,9466,14764,13480,14764,13475,14766,13440,14766,13347,14769,13070,14786,12713,14816,12387,14844,11957,14860,11549,14868,11215,14855,10751,14825,10403,14782,10044,14729,9651,14666,9352,14599,9029,14967,12835,14966,12831,14963,12804,14954,12723,14936,12564,14917,12347,14900,11958,14886,11569,14878,11247,14859,10765,14828,10401,14784,10011,14727,9600,14660,9289,14586,8893,14508,8533,15111,12234,15110,12234,15104,12216,15092,12156,15067,12010,15028,11776,14981,11500,14942,11205,14902,10752,14861,10393,14812,9991,14752,9570,14682,9252,14603,8808,14519,8445,14431,8145,15209,11449,15208,11451,15202,11451,15190,11438,15163,11384,15117,11274,15055,10979,14994,10648,14932,10343,14871,9936,14803,9532,14729,9218,14645,8742,14556,8381,14461,8020,14365,7603,15273,10603,15272,10607,15267,10619,15256,10631,15231,10614,15182,10535,15118,10389,15042,10167,14963,9787,14883,9447,14800,9115,14710,8665,14615,8318,14514,7911,14411,7507,14279,7198,15314,9675,15313,9683,15309,9712,15298,9759,15277,9797,15229,9773,15166,9668,15084,9487,14995,9274,14898,8910,14800,8539,14697,8234,14590,7790,14479,7409,14367,7067,14178,6621,15337,8619,15337,8631,15333,8677,15325,8769,15305,8871,15264,8940,15202,8909,15119,8775,15022,8565,14916,8328,14804,8009,14688,7614,14569,7287,14448,6888,14321,6483,14088,6171,15350,7402,15350,7419,15347,7480,15340,7613,15322,7804,15287,7973,15229,8057,15148,8012,15046,7846,14933,7611,14810,7357,14682,7069,14552,6656,14421,6316,14251,5948,14007,5528,15356,5942,15356,5977,15353,6119,15348,6294,15332,6551,15302,6824,15249,7044,15171,7122,15070,7050,14949,6861,14818,6611,14679,6349,14538,6067,14398,5651,14189,5311,13935,4958,15359,4123,15359,4153,15356,4296,15353,4646,15338,5160,15311,5508,15263,5829,15188,6042,15088,6094,14966,6001,14826,5796,14678,5543,14527,5287,14377,4985,14133,4586,13869,4257,15360,1563,15360,1642,15358,2076,15354,2636,15341,3350,15317,4019,15273,4429,15203,4732,15105,4911,14981,4932,14836,4818,14679,4621,14517,4386,14359,4156,14083,3795,13808,3437,15360,122,15360,137,15358,285,15355,636,15344,1274,15322,2177,15281,2765,15215,3223,15120,3451,14995,3569,14846,3567,14681,3466,14511,3305,14344,3121,14037,2800,13753,2467,15360,0,15360,1,15359,21,15355,89,15346,253,15325,479,15287,796,15225,1148,15133,1492,15008,1749,14856,1882,14685,1886,14506,1783,14324,1608,13996,1398,13702,1183]),Fu=null;function Iu(){return Fu===null&&(Fu=new Ti(Pu,16,16,ce,k),Fu.name=`DFG_LUT`,Fu.minFilter=y,Fu.magFilter=y,Fu.wrapS=m,Fu.wrapT=m,Fu.generateMipmaps=!1,Fu.needsUpdate=!0),Fu}var Lu=class{constructor(e={}){let{canvas:t=at(),context:n=null,depth:r=!0,stencil:i=!1,alpha:a=!1,antialias:o=!1,premultipliedAlpha:s=!0,preserveDrawingBuffer:c=!1,powerPreference:l=`default`,failIfMajorPerformanceCaveat:u=!1,reversedDepthBuffer:d=!1,outputBufferType:f=S}=e;this.isWebGLRenderer=!0;let p;if(n!==null){if(typeof WebGLRenderingContext<`u`&&n instanceof WebGLRenderingContext)throw Error(`THREE.WebGLRenderer: WebGL 1 is not supported since r163.`);p=n.getContextAttributes().alpha}else p=a;let m=f,h=new Set([P,le,se]),g=new Set([S,D,T,ne,ee,te]),_=new Uint32Array(4),v=new Int32Array(4),y=null,b=null,C=[],w=[],E=null;this.domElement=t,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.toneMapping=0,this.toneMappingExposure=1,this.transmissionResolutionScale=1;let O=this,A=!1;this._outputColorSpace=Ye;let j=0,M=0,N=null,re=-1,ie=null,ae=new K,oe=new K,ce=null,ue=new J(0),de=0,fe=t.width,pe=t.height,me=1,he=null,ge=null,_e=new K(0,0,fe,pe),ve=new K(0,0,fe,pe),ye=!1,be=new Ni,xe=!1,Se=!1,Ce=new q,we=new U,Te=new K,Ee={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0},De=!1;function Oe(){return N===null?me:1}let F=n;function ke(e,n){return t.getContext(e,n)}try{let e={alpha:!0,depth:r,stencil:i,antialias:o,premultipliedAlpha:s,preserveDrawingBuffer:c,powerPreference:l,failIfMajorPerformanceCaveat:u};if(`setAttribute`in t&&t.setAttribute(`data-engine`,`three.js r182`),t.addEventListener(`webglcontextlost`,nt,!1),t.addEventListener(`webglcontextrestored`,rt,!1),t.addEventListener(`webglcontextcreationerror`,it,!1),F===null){let t=`webgl2`;if(F=ke(t,e),F===null)throw ke(t)?Error(`Error creating WebGL context with your selected attributes.`):Error(`Error creating WebGL context.`)}}catch(e){throw B(`WebGLRenderer: `+e.message),e}let Ae,je,I,Me,L,R,Ne,Pe,Fe,Ie,Le,Re,ze,Be,Ve,He,Ue,We,Ge,Ke,qe,Je,Ze,Qe;function $e(){Ae=new tc(F),Ae.init(),Je=new Tu(F,Ae),je=new js(F,Ae,e,Je),I=new Cu(F,Ae),je.reversedDepthBuffer&&d&&I.buffers.depth.setReversed(!0),Me=new ic(F),L=new nu,R=new wu(F,Ae,I,L,je,Je,Me),Ne=new Ns(O),Pe=new ec(O),Fe=new Cs(F),Ze=new ks(F,Fe),Ie=new nc(F,Fe,Me,Ze),Le=new oc(F,Ie,Fe,Me),Ge=new ac(F,je,R),He=new Ms(L),Re=new tu(O,Ne,Pe,Ae,je,Ze,He),ze=new Mu(O,L),Be=new ou,Ve=new pu(Ae),We=new Os(O,Ne,Pe,I,Le,p,s),Ue=new xu(O,Le,je),Qe=new Nu(F,Me,je,I),Ke=new As(F,Ae,Me),qe=new rc(F,Ae,Me),Me.programs=Re.programs,O.capabilities=je,O.extensions=Ae,O.properties=L,O.renderLists=Be,O.shadowMap=Ue,O.state=I,O.info=Me}$e(),m!==1009&&(E=new cc(m,t.width,t.height,r,i));let et=new ku(O,F);this.xr=et,this.getContext=function(){return F},this.getContextAttributes=function(){return F.getContextAttributes()},this.forceContextLoss=function(){let e=Ae.get(`WEBGL_lose_context`);e&&e.loseContext()},this.forceContextRestore=function(){let e=Ae.get(`WEBGL_lose_context`);e&&e.restoreContext()},this.getPixelRatio=function(){return me},this.setPixelRatio=function(e){e!==void 0&&(me=e,this.setSize(fe,pe,!1))},this.getSize=function(e){return e.set(fe,pe)},this.setSize=function(e,n,r=!0){if(et.isPresenting){z(`WebGLRenderer: Can't change size while VR device is presenting.`);return}fe=e,pe=n,t.width=Math.floor(e*me),t.height=Math.floor(n*me),r===!0&&(t.style.width=e+`px`,t.style.height=n+`px`),E!==null&&E.setSize(t.width,t.height),this.setViewport(0,0,e,n)},this.getDrawingBufferSize=function(e){return e.set(fe*me,pe*me).floor()},this.setDrawingBufferSize=function(e,n,r){fe=e,pe=n,me=r,t.width=Math.floor(e*r),t.height=Math.floor(n*r),this.setViewport(0,0,e,n)},this.setEffects=function(e){if(m===1009){console.error(`THREE.WebGLRenderer: setEffects() requires outputBufferType set to HalfFloatType or FloatType.`);return}if(e){for(let t=0;t<e.length;t++)if(e[t].isOutputPass===!0){console.warn(`THREE.WebGLRenderer: OutputPass is not needed in setEffects(). Tone mapping and color space conversion are applied automatically.`);break}}E.setEffects(e||[])},this.getCurrentViewport=function(e){return e.copy(ae)},this.getViewport=function(e){return e.copy(_e)},this.setViewport=function(e,t,n,r){e.isVector4?_e.set(e.x,e.y,e.z,e.w):_e.set(e,t,n,r),I.viewport(ae.copy(_e).multiplyScalar(me).round())},this.getScissor=function(e){return e.copy(ve)},this.setScissor=function(e,t,n,r){e.isVector4?ve.set(e.x,e.y,e.z,e.w):ve.set(e,t,n,r),I.scissor(oe.copy(ve).multiplyScalar(me).round())},this.getScissorTest=function(){return ye},this.setScissorTest=function(e){I.setScissorTest(ye=e)},this.setOpaqueSort=function(e){he=e},this.setTransparentSort=function(e){ge=e},this.getClearColor=function(e){return e.copy(We.getClearColor())},this.setClearColor=function(){We.setClearColor(...arguments)},this.getClearAlpha=function(){return We.getClearAlpha()},this.setClearAlpha=function(){We.setClearAlpha(...arguments)},this.clear=function(e=!0,t=!0,n=!0){let r=0;if(e){let e=!1;if(N!==null){let t=N.texture.format;e=h.has(t)}if(e){let e=N.texture.type,t=g.has(e),n=We.getClearColor(),r=We.getClearAlpha(),i=n.r,a=n.g,o=n.b;t?(_[0]=i,_[1]=a,_[2]=o,_[3]=r,F.clearBufferuiv(F.COLOR,0,_)):(v[0]=i,v[1]=a,v[2]=o,v[3]=r,F.clearBufferiv(F.COLOR,0,v))}else r|=F.COLOR_BUFFER_BIT}t&&(r|=F.DEPTH_BUFFER_BIT),n&&(r|=F.STENCIL_BUFFER_BIT,this.state.buffers.stencil.setMask(4294967295)),F.clear(r)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){t.removeEventListener(`webglcontextlost`,nt,!1),t.removeEventListener(`webglcontextrestored`,rt,!1),t.removeEventListener(`webglcontextcreationerror`,it,!1),We.dispose(),Be.dispose(),Ve.dispose(),L.dispose(),Ne.dispose(),Pe.dispose(),Le.dispose(),Ze.dispose(),Qe.dispose(),Re.dispose(),et.dispose(),et.removeEventListener(`sessionstart`,ht),et.removeEventListener(`sessionend`,gt),V.stop()};function nt(e){e.preventDefault(),ct(`WebGLRenderer: Context Lost.`),A=!0}function rt(){ct(`WebGLRenderer: Context Restored.`),A=!1;let e=Me.autoReset,t=Ue.enabled,n=Ue.autoUpdate,r=Ue.needsUpdate,i=Ue.type;$e(),Me.autoReset=e,Ue.enabled=t,Ue.autoUpdate=n,Ue.needsUpdate=r,Ue.type=i}function it(e){B(`WebGLRenderer: A WebGL context could not be created. Reason: `,e.statusMessage)}function ot(e){let t=e.target;t.removeEventListener(`dispose`,ot),st(t)}function st(e){dt(e),L.remove(e)}function dt(e){let t=L.get(e).programs;t!==void 0&&(t.forEach(function(e){Re.releaseProgram(e)}),e.isShaderMaterial&&Re.releaseShaderCache(e))}this.renderBufferDirect=function(e,t,n,r,i,a){t===null&&(t=Ee);let o=i.isMesh&&i.matrixWorld.determinant()<0,s=Tt(e,t,n,r,i);I.setMaterial(r,o);let c=n.index,l=1;if(r.wireframe===!0){if(c=Ie.getWireframeAttribute(n),c===void 0)return;l=2}let u=n.drawRange,d=n.attributes.position,f=u.start*l,p=(u.start+u.count)*l;a!==null&&(f=Math.max(f,a.start*l),p=Math.min(p,(a.start+a.count)*l)),c===null?d!=null&&(f=Math.max(f,0),p=Math.min(p,d.count)):(f=Math.max(f,0),p=Math.min(p,c.count));let m=p-f;if(m<0||m===1/0)return;Ze.setup(i,r,s,n,c);let h,g=Ke;if(c!==null&&(h=Fe.get(c),g=qe,g.setIndex(h)),i.isMesh)r.wireframe===!0?(I.setLineWidth(r.wireframeLinewidth*Oe()),g.setMode(F.LINES)):g.setMode(F.TRIANGLES);else if(i.isLine){let e=r.linewidth;e===void 0&&(e=1),I.setLineWidth(e*Oe()),i.isLineSegments?g.setMode(F.LINES):i.isLineLoop?g.setMode(F.LINE_LOOP):g.setMode(F.LINE_STRIP)}else i.isPoints?g.setMode(F.POINTS):i.isSprite&&g.setMode(F.TRIANGLES);if(i.isBatchedMesh)if(i._multiDrawInstances!==null)lt(`WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.`),g.renderMultiDrawInstances(i._multiDrawStarts,i._multiDrawCounts,i._multiDrawCount,i._multiDrawInstances);else if(Ae.get(`WEBGL_multi_draw`))g.renderMultiDraw(i._multiDrawStarts,i._multiDrawCounts,i._multiDrawCount);else{let e=i._multiDrawStarts,t=i._multiDrawCounts,n=i._multiDrawCount,a=c?Fe.get(c).bytesPerElement:1,o=L.get(r).currentProgram.getUniforms();for(let r=0;r<n;r++)o.setValue(F,`_gl_DrawID`,r),g.render(e[r]/a,t[r])}else if(i.isInstancedMesh)g.renderInstances(f,m,i.count);else if(n.isInstancedBufferGeometry){let e=n._maxInstanceCount===void 0?1/0:n._maxInstanceCount,t=Math.min(n.instanceCount,e);g.renderInstances(f,m,t)}else g.render(f,m)};function ft(e,t,n){e.transparent===!0&&e.side===2&&e.forceSinglePass===!1?(e.side=1,e.needsUpdate=!0,St(e,t,n),e.side=0,e.needsUpdate=!0,St(e,t,n),e.side=2):St(e,t,n)}this.compile=function(e,t,n=null){n===null&&(n=e),b=Ve.get(n),b.init(t),w.push(b),n.traverseVisible(function(e){e.isLight&&e.layers.test(t.layers)&&(b.pushLight(e),e.castShadow&&b.pushShadow(e))}),e!==n&&e.traverseVisible(function(e){e.isLight&&e.layers.test(t.layers)&&(b.pushLight(e),e.castShadow&&b.pushShadow(e))}),b.setupLights();let r=new Set;return e.traverse(function(e){if(!(e.isMesh||e.isPoints||e.isLine||e.isSprite))return;let t=e.material;if(t)if(Array.isArray(t))for(let i=0;i<t.length;i++){let a=t[i];ft(a,n,e),r.add(a)}else ft(t,n,e),r.add(t)}),b=w.pop(),r},this.compileAsync=function(e,t,n=null){let r=this.compile(e,t,n);return new Promise(t=>{function n(){if(r.forEach(function(e){L.get(e).currentProgram.isReady()&&r.delete(e)}),r.size===0){t(e);return}setTimeout(n,10)}Ae.get(`KHR_parallel_shader_compile`)===null?setTimeout(n,10):n()})};let pt=null;function mt(e){pt&&pt(e)}function ht(){V.stop()}function gt(){V.start()}let V=new Ss;V.setAnimationLoop(mt),typeof self<`u`&&V.setContext(self),this.setAnimationLoop=function(e){pt=e,et.setAnimationLoop(e),e===null?V.stop():V.start()},et.addEventListener(`sessionstart`,ht),et.addEventListener(`sessionend`,gt),this.render=function(e,t){if(t!==void 0&&t.isCamera!==!0){B(`WebGLRenderer.render: camera is not an instance of THREE.Camera.`);return}if(A===!0)return;let n=et.enabled===!0&&et.isPresenting===!0,r=E!==null&&(N===null||n)&&E.begin(O,N);if(e.matrixWorldAutoUpdate===!0&&e.updateMatrixWorld(),t.parent===null&&t.matrixWorldAutoUpdate===!0&&t.updateMatrixWorld(),et.enabled===!0&&et.isPresenting===!0&&(E===null||E.isCompositing()===!1)&&(et.cameraAutoUpdate===!0&&et.updateCamera(t),t=et.getCamera()),e.isScene===!0&&e.onBeforeRender(O,e,t,N),b=Ve.get(e,w.length),b.init(t),w.push(b),Ce.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),be.setFromProjectionMatrix(Ce,tt,t.reversedDepth),Se=this.localClippingEnabled,xe=He.init(this.clippingPlanes,Se),y=Be.get(e,C.length),y.init(),C.push(y),et.enabled===!0&&et.isPresenting===!0){let e=O.xr.getDepthSensingMesh();e!==null&&_t(e,t,-1/0,O.sortObjects)}_t(e,t,0,O.sortObjects),y.finish(),O.sortObjects===!0&&y.sort(he,ge),De=et.enabled===!1||et.isPresenting===!1||et.hasDepthSensing()===!1,De&&We.addToRenderList(y,e),this.info.render.frame++,xe===!0&&He.beginShadows();let i=b.state.shadowsArray;if(Ue.render(i,e,t),xe===!0&&He.endShadows(),this.info.autoReset===!0&&this.info.reset(),(r&&E.hasRenderPass())===!1){let n=y.opaque,r=y.transmissive;if(b.setupLights(),t.isArrayCamera){let i=t.cameras;if(r.length>0)for(let t=0,a=i.length;t<a;t++){let a=i[t];yt(n,r,e,a)}De&&We.render(e);for(let t=0,n=i.length;t<n;t++){let n=i[t];vt(y,e,n,n.viewport)}}else r.length>0&&yt(n,r,e,t),De&&We.render(e),vt(y,e,t)}N!==null&&M===0&&(R.updateMultisampleRenderTarget(N),R.updateRenderTargetMipmap(N)),r&&E.end(O),e.isScene===!0&&e.onAfterRender(O,e,t),Ze.resetDefaultState(),re=-1,ie=null,w.pop(),w.length>0?(b=w[w.length-1],xe===!0&&He.setGlobalState(O.clippingPlanes,b.state.camera)):b=null,C.pop(),y=C.length>0?C[C.length-1]:null};function _t(e,t,n,r){if(e.visible===!1)return;if(e.layers.test(t.layers)){if(e.isGroup)n=e.renderOrder;else if(e.isLOD)e.autoUpdate===!0&&e.update(t);else if(e.isLight)b.pushLight(e),e.castShadow&&b.pushShadow(e);else if(e.isSprite){if(!e.frustumCulled||be.intersectsSprite(e)){r&&Te.setFromMatrixPosition(e.matrixWorld).applyMatrix4(Ce);let t=Le.update(e),i=e.material;i.visible&&y.push(e,t,i,n,Te.z,null)}}else if((e.isMesh||e.isLine||e.isPoints)&&(!e.frustumCulled||be.intersectsObject(e))){let t=Le.update(e),i=e.material;if(r&&(e.boundingSphere===void 0?(t.boundingSphere===null&&t.computeBoundingSphere(),Te.copy(t.boundingSphere.center)):(e.boundingSphere===null&&e.computeBoundingSphere(),Te.copy(e.boundingSphere.center)),Te.applyMatrix4(e.matrixWorld).applyMatrix4(Ce)),Array.isArray(i)){let r=t.groups;for(let a=0,o=r.length;a<o;a++){let o=r[a],s=i[o.materialIndex];s&&s.visible&&y.push(e,t,s,n,Te.z,o)}}else i.visible&&y.push(e,t,i,n,Te.z,null)}}let i=e.children;for(let e=0,a=i.length;e<a;e++)_t(i[e],t,n,r)}function vt(e,t,n,r){let{opaque:i,transmissive:a,transparent:o}=e;b.setupLightsView(n),xe===!0&&He.setGlobalState(O.clippingPlanes,n),r&&I.viewport(ae.copy(r)),i.length>0&&bt(i,t,n),a.length>0&&bt(a,t,n),o.length>0&&bt(o,t,n),I.buffers.depth.setTest(!0),I.buffers.depth.setMask(!0),I.buffers.color.setMask(!0),I.setPolygonOffset(!1)}function yt(e,t,n,r){if((n.isScene===!0?n.overrideMaterial:null)!==null)return;if(b.state.transmissionRenderTarget[r.id]===void 0){let e=Ae.has(`EXT_color_buffer_half_float`)||Ae.has(`EXT_color_buffer_float`);b.state.transmissionRenderTarget[r.id]=new nn(1,1,{generateMipmaps:!0,type:e?k:S,minFilter:x,samples:je.samples,stencilBuffer:i,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:G.workingColorSpace})}let a=b.state.transmissionRenderTarget[r.id],o=r.viewport||ae;a.setSize(o.z*O.transmissionResolutionScale,o.w*O.transmissionResolutionScale);let s=O.getRenderTarget(),c=O.getActiveCubeFace(),l=O.getActiveMipmapLevel();O.setRenderTarget(a),O.getClearColor(ue),de=O.getClearAlpha(),de<1&&O.setClearColor(16777215,.5),O.clear(),De&&We.render(n);let u=O.toneMapping;O.toneMapping=0;let d=r.viewport;if(r.viewport!==void 0&&(r.viewport=void 0),b.setupLightsView(r),xe===!0&&He.setGlobalState(O.clippingPlanes,r),bt(e,n,r),R.updateMultisampleRenderTarget(a),R.updateRenderTargetMipmap(a),Ae.has(`WEBGL_multisampled_render_to_texture`)===!1){let e=!1;for(let i=0,a=t.length;i<a;i++){let{object:a,geometry:o,material:s,group:c}=t[i];if(s.side===2&&a.layers.test(r.layers)){let t=s.side;s.side=1,s.needsUpdate=!0,xt(a,n,r,o,s,c),s.side=t,s.needsUpdate=!0,e=!0}}e===!0&&(R.updateMultisampleRenderTarget(a),R.updateRenderTargetMipmap(a))}O.setRenderTarget(s,c,l),O.setClearColor(ue,de),d!==void 0&&(r.viewport=d),O.toneMapping=u}function bt(e,t,n){let r=t.isScene===!0?t.overrideMaterial:null;for(let i=0,a=e.length;i<a;i++){let a=e[i],{object:o,geometry:s,group:c}=a,l=a.material;l.allowOverride===!0&&r!==null&&(l=r),o.layers.test(n.layers)&&xt(o,t,n,s,l,c)}}function xt(e,t,n,r,i,a){e.onBeforeRender(O,t,n,r,i,a),e.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse,e.matrixWorld),e.normalMatrix.getNormalMatrix(e.modelViewMatrix),i.onBeforeRender(O,t,n,r,e,a),i.transparent===!0&&i.side===2&&i.forceSinglePass===!1?(i.side=1,i.needsUpdate=!0,O.renderBufferDirect(n,t,r,i,e,a),i.side=0,i.needsUpdate=!0,O.renderBufferDirect(n,t,r,i,e,a),i.side=2):O.renderBufferDirect(n,t,r,i,e,a),e.onAfterRender(O,t,n,r,i,a)}function St(e,t,n){t.isScene!==!0&&(t=Ee);let r=L.get(e),i=b.state.lights,a=b.state.shadowsArray,o=i.state.version,s=Re.getParameters(e,i.state,a,t,n),c=Re.getProgramCacheKey(s),l=r.programs;r.environment=e.isMeshStandardMaterial?t.environment:null,r.fog=t.fog,r.envMap=(e.isMeshStandardMaterial?Pe:Ne).get(e.envMap||r.environment),r.envMapRotation=r.environment!==null&&e.envMap===null?t.environmentRotation:e.envMapRotation,l===void 0&&(e.addEventListener(`dispose`,ot),l=new Map,r.programs=l);let u=l.get(c);if(u!==void 0){if(r.currentProgram===u&&r.lightsStateVersion===o)return wt(e,s),u}else s.uniforms=Re.getUniforms(e),e.onBeforeCompile(s,O),u=Re.acquireProgram(s,c),l.set(c,u),r.uniforms=s.uniforms;let d=r.uniforms;return(!e.isShaderMaterial&&!e.isRawShaderMaterial||e.clipping===!0)&&(d.clippingPlanes=He.uniform),wt(e,s),r.needsLights=Dt(e),r.lightsStateVersion=o,r.needsLights&&(d.ambientLightColor.value=i.state.ambient,d.lightProbe.value=i.state.probe,d.directionalLights.value=i.state.directional,d.directionalLightShadows.value=i.state.directionalShadow,d.spotLights.value=i.state.spot,d.spotLightShadows.value=i.state.spotShadow,d.rectAreaLights.value=i.state.rectArea,d.ltc_1.value=i.state.rectAreaLTC1,d.ltc_2.value=i.state.rectAreaLTC2,d.pointLights.value=i.state.point,d.pointLightShadows.value=i.state.pointShadow,d.hemisphereLights.value=i.state.hemi,d.directionalShadowMap.value=i.state.directionalShadowMap,d.directionalShadowMatrix.value=i.state.directionalShadowMatrix,d.spotShadowMap.value=i.state.spotShadowMap,d.spotLightMatrix.value=i.state.spotLightMatrix,d.spotLightMap.value=i.state.spotLightMap,d.pointShadowMap.value=i.state.pointShadowMap,d.pointShadowMatrix.value=i.state.pointShadowMatrix),r.currentProgram=u,r.uniformsList=null,u}function Ct(e){if(e.uniformsList===null){let t=e.currentProgram.getUniforms();e.uniformsList=hl.seqWithValue(t.seq,e.uniforms)}return e.uniformsList}function wt(e,t){let n=L.get(e);n.outputColorSpace=t.outputColorSpace,n.batching=t.batching,n.batchingColor=t.batchingColor,n.instancing=t.instancing,n.instancingColor=t.instancingColor,n.instancingMorph=t.instancingMorph,n.skinning=t.skinning,n.morphTargets=t.morphTargets,n.morphNormals=t.morphNormals,n.morphColors=t.morphColors,n.morphTargetsCount=t.morphTargetsCount,n.numClippingPlanes=t.numClippingPlanes,n.numIntersection=t.numClipIntersection,n.vertexAlphas=t.vertexAlphas,n.vertexTangents=t.vertexTangents,n.toneMapping=t.toneMapping}function Tt(e,t,n,r,i){t.isScene!==!0&&(t=Ee),R.resetTextureUnits();let a=t.fog,o=r.isMeshStandardMaterial?t.environment:null,s=N===null?O.outputColorSpace:N.isXRRenderTarget===!0?N.texture.colorSpace:Xe,c=(r.isMeshStandardMaterial?Pe:Ne).get(r.envMap||o),l=r.vertexColors===!0&&!!n.attributes.color&&n.attributes.color.itemSize===4,u=!!n.attributes.tangent&&(!!r.normalMap||r.anisotropy>0),d=!!n.morphAttributes.position,f=!!n.morphAttributes.normal,p=!!n.morphAttributes.color,m=0;r.toneMapped&&(N===null||N.isXRRenderTarget===!0)&&(m=O.toneMapping);let h=n.morphAttributes.position||n.morphAttributes.normal||n.morphAttributes.color,g=h===void 0?0:h.length,_=L.get(r),v=b.state.lights;if(xe===!0&&(Se===!0||e!==ie)){let t=e===ie&&r.id===re;He.setState(r,e,t)}let y=!1;r.version===_.__version?_.needsLights&&_.lightsStateVersion!==v.state.version?y=!0:_.outputColorSpace===s?i.isBatchedMesh&&_.batching===!1||!i.isBatchedMesh&&_.batching===!0||i.isBatchedMesh&&_.batchingColor===!0&&i.colorTexture===null||i.isBatchedMesh&&_.batchingColor===!1&&i.colorTexture!==null||i.isInstancedMesh&&_.instancing===!1||!i.isInstancedMesh&&_.instancing===!0||i.isSkinnedMesh&&_.skinning===!1||!i.isSkinnedMesh&&_.skinning===!0||i.isInstancedMesh&&_.instancingColor===!0&&i.instanceColor===null||i.isInstancedMesh&&_.instancingColor===!1&&i.instanceColor!==null||i.isInstancedMesh&&_.instancingMorph===!0&&i.morphTexture===null||i.isInstancedMesh&&_.instancingMorph===!1&&i.morphTexture!==null?y=!0:_.envMap===c?r.fog===!0&&_.fog!==a||_.numClippingPlanes!==void 0&&(_.numClippingPlanes!==He.numPlanes||_.numIntersection!==He.numIntersection)?y=!0:_.vertexAlphas===l&&_.vertexTangents===u&&_.morphTargets===d&&_.morphNormals===f&&_.morphColors===p&&_.toneMapping===m?_.morphTargetsCount!==g&&(y=!0):y=!0:y=!0:y=!0:(y=!0,_.__version=r.version);let x=_.currentProgram;y===!0&&(x=St(r,t,i));let S=!1,C=!1,w=!1,T=x.getUniforms(),E=_.uniforms;if(I.useProgram(x.program)&&(S=!0,C=!0,w=!0),r.id!==re&&(re=r.id,C=!0),S||ie!==e){I.buffers.depth.getReversed()&&e.reversedDepth!==!0&&(e._reversedDepth=!0,e.updateProjectionMatrix()),T.setValue(F,`projectionMatrix`,e.projectionMatrix),T.setValue(F,`viewMatrix`,e.matrixWorldInverse);let t=T.map.cameraPosition;t!==void 0&&t.setValue(F,we.setFromMatrixPosition(e.matrixWorld)),je.logarithmicDepthBuffer&&T.setValue(F,`logDepthBufFC`,2/(Math.log(e.far+1)/Math.LN2)),(r.isMeshPhongMaterial||r.isMeshToonMaterial||r.isMeshLambertMaterial||r.isMeshBasicMaterial||r.isMeshStandardMaterial||r.isShaderMaterial)&&T.setValue(F,`isOrthographic`,e.isOrthographicCamera===!0),ie!==e&&(ie=e,C=!0,w=!0)}if(_.needsLights&&(v.state.directionalShadowMap.length>0&&T.setValue(F,`directionalShadowMap`,v.state.directionalShadowMap,R),v.state.spotShadowMap.length>0&&T.setValue(F,`spotShadowMap`,v.state.spotShadowMap,R),v.state.pointShadowMap.length>0&&T.setValue(F,`pointShadowMap`,v.state.pointShadowMap,R)),i.isSkinnedMesh){T.setOptional(F,i,`bindMatrix`),T.setOptional(F,i,`bindMatrixInverse`);let e=i.skeleton;e&&(e.boneTexture===null&&e.computeBoneTexture(),T.setValue(F,`boneTexture`,e.boneTexture,R))}i.isBatchedMesh&&(T.setOptional(F,i,`batchingTexture`),T.setValue(F,`batchingTexture`,i._matricesTexture,R),T.setOptional(F,i,`batchingIdTexture`),T.setValue(F,`batchingIdTexture`,i._indirectTexture,R),T.setOptional(F,i,`batchingColorTexture`),i._colorsTexture!==null&&T.setValue(F,`batchingColorTexture`,i._colorsTexture,R));let D=n.morphAttributes;if((D.position!==void 0||D.normal!==void 0||D.color!==void 0)&&Ge.update(i,n,x),(C||_.receiveShadow!==i.receiveShadow)&&(_.receiveShadow=i.receiveShadow,T.setValue(F,`receiveShadow`,i.receiveShadow)),r.isMeshGouraudMaterial&&r.envMap!==null&&(E.envMap.value=c,E.flipEnvMap.value=c.isCubeTexture&&c.isRenderTargetTexture===!1?-1:1),r.isMeshStandardMaterial&&r.envMap===null&&t.environment!==null&&(E.envMapIntensity.value=t.environmentIntensity),E.dfgLUT!==void 0&&(E.dfgLUT.value=Iu()),C&&(T.setValue(F,`toneMappingExposure`,O.toneMappingExposure),_.needsLights&&Et(E,w),a&&r.fog===!0&&ze.refreshFogUniforms(E,a),ze.refreshMaterialUniforms(E,r,me,pe,b.state.transmissionRenderTarget[e.id]),hl.upload(F,Ct(_),E,R)),r.isShaderMaterial&&r.uniformsNeedUpdate===!0&&(hl.upload(F,Ct(_),E,R),r.uniformsNeedUpdate=!1),r.isSpriteMaterial&&T.setValue(F,`center`,i.center),T.setValue(F,`modelViewMatrix`,i.modelViewMatrix),T.setValue(F,`normalMatrix`,i.normalMatrix),T.setValue(F,`modelMatrix`,i.matrixWorld),r.isShaderMaterial||r.isRawShaderMaterial){let e=r.uniformsGroups;for(let t=0,n=e.length;t<n;t++){let n=e[t];Qe.update(n,x),Qe.bind(n,x)}}return x}function Et(e,t){e.ambientLightColor.needsUpdate=t,e.lightProbe.needsUpdate=t,e.directionalLights.needsUpdate=t,e.directionalLightShadows.needsUpdate=t,e.pointLights.needsUpdate=t,e.pointLightShadows.needsUpdate=t,e.spotLights.needsUpdate=t,e.spotLightShadows.needsUpdate=t,e.rectAreaLights.needsUpdate=t,e.hemisphereLights.needsUpdate=t}function Dt(e){return e.isMeshLambertMaterial||e.isMeshToonMaterial||e.isMeshPhongMaterial||e.isMeshStandardMaterial||e.isShadowMaterial||e.isShaderMaterial&&e.lights===!0}this.getActiveCubeFace=function(){return j},this.getActiveMipmapLevel=function(){return M},this.getRenderTarget=function(){return N},this.setRenderTargetTextures=function(e,t,n){let r=L.get(e);r.__autoAllocateDepthBuffer=e.resolveDepthBuffer===!1,r.__autoAllocateDepthBuffer===!1&&(r.__useRenderToTexture=!1),L.get(e.texture).__webglTexture=t,L.get(e.depthTexture).__webglTexture=r.__autoAllocateDepthBuffer?void 0:n,r.__hasExternalTextures=!0},this.setRenderTargetFramebuffer=function(e,t){let n=L.get(e);n.__webglFramebuffer=t,n.__useDefaultFramebuffer=t===void 0};let Ot=F.createFramebuffer();this.setRenderTarget=function(e,t=0,n=0){N=e,j=t,M=n;let r=null,i=!1,a=!1;if(e){let o=L.get(e);if(o.__useDefaultFramebuffer!==void 0){I.bindFramebuffer(F.FRAMEBUFFER,o.__webglFramebuffer),ae.copy(e.viewport),oe.copy(e.scissor),ce=e.scissorTest,I.viewport(ae),I.scissor(oe),I.setScissorTest(ce),re=-1;return}else if(o.__webglFramebuffer===void 0)R.setupRenderTarget(e);else if(o.__hasExternalTextures)R.rebindTextures(e,L.get(e.texture).__webglTexture,L.get(e.depthTexture).__webglTexture);else if(e.depthBuffer){let t=e.depthTexture;if(o.__boundDepthTexture!==t){if(t!==null&&L.has(t)&&(e.width!==t.image.width||e.height!==t.image.height))throw Error(`WebGLRenderTarget: Attached DepthTexture is initialized to the incorrect size.`);R.setupDepthRenderbuffer(e)}}let s=e.texture;(s.isData3DTexture||s.isDataArrayTexture||s.isCompressedArrayTexture)&&(a=!0);let c=L.get(e).__webglFramebuffer;e.isWebGLCubeRenderTarget?(r=Array.isArray(c[t])?c[t][n]:c[t],i=!0):r=e.samples>0&&R.useMultisampledRTT(e)===!1?L.get(e).__webglMultisampledFramebuffer:Array.isArray(c)?c[n]:c,ae.copy(e.viewport),oe.copy(e.scissor),ce=e.scissorTest}else ae.copy(_e).multiplyScalar(me).floor(),oe.copy(ve).multiplyScalar(me).floor(),ce=ye;if(n!==0&&(r=Ot),I.bindFramebuffer(F.FRAMEBUFFER,r)&&I.drawBuffers(e,r),I.viewport(ae),I.scissor(oe),I.setScissorTest(ce),i){let r=L.get(e.texture);F.framebufferTexture2D(F.FRAMEBUFFER,F.COLOR_ATTACHMENT0,F.TEXTURE_CUBE_MAP_POSITIVE_X+t,r.__webglTexture,n)}else if(a){let r=t;for(let t=0;t<e.textures.length;t++){let i=L.get(e.textures[t]);F.framebufferTextureLayer(F.FRAMEBUFFER,F.COLOR_ATTACHMENT0+t,i.__webglTexture,n,r)}}else if(e!==null&&n!==0){let t=L.get(e.texture);F.framebufferTexture2D(F.FRAMEBUFFER,F.COLOR_ATTACHMENT0,F.TEXTURE_2D,t.__webglTexture,n)}re=-1},this.readRenderTargetPixels=function(e,t,n,r,i,a,o,s=0){if(!(e&&e.isWebGLRenderTarget)){B(`WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.`);return}let c=L.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&o!==void 0&&(c=c[o]),c){I.bindFramebuffer(F.FRAMEBUFFER,c);try{let o=e.textures[s],c=o.format,l=o.type;if(!je.textureFormatReadable(c)){B(`WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.`);return}if(!je.textureTypeReadable(l)){B(`WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.`);return}t>=0&&t<=e.width-r&&n>=0&&n<=e.height-i&&(e.textures.length>1&&F.readBuffer(F.COLOR_ATTACHMENT0+s),F.readPixels(t,n,r,i,Je.convert(c),Je.convert(l),a))}finally{let e=N===null?null:L.get(N).__webglFramebuffer;I.bindFramebuffer(F.FRAMEBUFFER,e)}}},this.readRenderTargetPixelsAsync=async function(e,t,n,r,i,a,o,s=0){if(!(e&&e.isWebGLRenderTarget))throw Error(`THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.`);let c=L.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&o!==void 0&&(c=c[o]),c)if(t>=0&&t<=e.width-r&&n>=0&&n<=e.height-i){I.bindFramebuffer(F.FRAMEBUFFER,c);let o=e.textures[s],l=o.format,u=o.type;if(!je.textureFormatReadable(l))throw Error(`THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.`);if(!je.textureTypeReadable(u))throw Error(`THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.`);let d=F.createBuffer();F.bindBuffer(F.PIXEL_PACK_BUFFER,d),F.bufferData(F.PIXEL_PACK_BUFFER,a.byteLength,F.STREAM_READ),e.textures.length>1&&F.readBuffer(F.COLOR_ATTACHMENT0+s),F.readPixels(t,n,r,i,Je.convert(l),Je.convert(u),0);let f=N===null?null:L.get(N).__webglFramebuffer;I.bindFramebuffer(F.FRAMEBUFFER,f);let p=F.fenceSync(F.SYNC_GPU_COMMANDS_COMPLETE,0);return F.flush(),await ut(F,p,4),F.bindBuffer(F.PIXEL_PACK_BUFFER,d),F.getBufferSubData(F.PIXEL_PACK_BUFFER,0,a),F.deleteBuffer(d),F.deleteSync(p),a}else throw Error(`THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.`)},this.copyFramebufferToTexture=function(e,t=null,n=0){let r=2**-n,i=Math.floor(e.image.width*r),a=Math.floor(e.image.height*r),o=t===null?0:t.x,s=t===null?0:t.y;R.setTexture2D(e,0),F.copyTexSubImage2D(F.TEXTURE_2D,n,0,0,o,s,i,a),I.unbindTexture()};let kt=F.createFramebuffer(),At=F.createFramebuffer();this.copyTextureToTexture=function(e,t,n=null,r=null,i=0,a=null){a===null&&(i===0?a=0:(lt(`WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels.`),a=i,i=0));let o,s,c,l,u,d,f,p,m,h=e.isCompressedTexture?e.mipmaps[a]:e.image;if(n!==null)o=n.max.x-n.min.x,s=n.max.y-n.min.y,c=n.isBox3?n.max.z-n.min.z:1,l=n.min.x,u=n.min.y,d=n.isBox3?n.min.z:0;else{let t=2**-i;o=Math.floor(h.width*t),s=Math.floor(h.height*t),c=e.isDataArrayTexture?h.depth:e.isData3DTexture?Math.floor(h.depth*t):1,l=0,u=0,d=0}r===null?(f=0,p=0,m=0):(f=r.x,p=r.y,m=r.z);let g=Je.convert(t.format),_=Je.convert(t.type),v;t.isData3DTexture?(R.setTexture3D(t,0),v=F.TEXTURE_3D):t.isDataArrayTexture||t.isCompressedArrayTexture?(R.setTexture2DArray(t,0),v=F.TEXTURE_2D_ARRAY):(R.setTexture2D(t,0),v=F.TEXTURE_2D),F.pixelStorei(F.UNPACK_FLIP_Y_WEBGL,t.flipY),F.pixelStorei(F.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t.premultiplyAlpha),F.pixelStorei(F.UNPACK_ALIGNMENT,t.unpackAlignment);let y=F.getParameter(F.UNPACK_ROW_LENGTH),b=F.getParameter(F.UNPACK_IMAGE_HEIGHT),x=F.getParameter(F.UNPACK_SKIP_PIXELS),S=F.getParameter(F.UNPACK_SKIP_ROWS),C=F.getParameter(F.UNPACK_SKIP_IMAGES);F.pixelStorei(F.UNPACK_ROW_LENGTH,h.width),F.pixelStorei(F.UNPACK_IMAGE_HEIGHT,h.height),F.pixelStorei(F.UNPACK_SKIP_PIXELS,l),F.pixelStorei(F.UNPACK_SKIP_ROWS,u),F.pixelStorei(F.UNPACK_SKIP_IMAGES,d);let w=e.isDataArrayTexture||e.isData3DTexture,T=t.isDataArrayTexture||t.isData3DTexture;if(e.isDepthTexture){let n=L.get(e),r=L.get(t),h=L.get(n.__renderTarget),g=L.get(r.__renderTarget);I.bindFramebuffer(F.READ_FRAMEBUFFER,h.__webglFramebuffer),I.bindFramebuffer(F.DRAW_FRAMEBUFFER,g.__webglFramebuffer);for(let n=0;n<c;n++)w&&(F.framebufferTextureLayer(F.READ_FRAMEBUFFER,F.COLOR_ATTACHMENT0,L.get(e).__webglTexture,i,d+n),F.framebufferTextureLayer(F.DRAW_FRAMEBUFFER,F.COLOR_ATTACHMENT0,L.get(t).__webglTexture,a,m+n)),F.blitFramebuffer(l,u,o,s,f,p,o,s,F.DEPTH_BUFFER_BIT,F.NEAREST);I.bindFramebuffer(F.READ_FRAMEBUFFER,null),I.bindFramebuffer(F.DRAW_FRAMEBUFFER,null)}else if(i!==0||e.isRenderTargetTexture||L.has(e)){let n=L.get(e),r=L.get(t);I.bindFramebuffer(F.READ_FRAMEBUFFER,kt),I.bindFramebuffer(F.DRAW_FRAMEBUFFER,At);for(let e=0;e<c;e++)w?F.framebufferTextureLayer(F.READ_FRAMEBUFFER,F.COLOR_ATTACHMENT0,n.__webglTexture,i,d+e):F.framebufferTexture2D(F.READ_FRAMEBUFFER,F.COLOR_ATTACHMENT0,F.TEXTURE_2D,n.__webglTexture,i),T?F.framebufferTextureLayer(F.DRAW_FRAMEBUFFER,F.COLOR_ATTACHMENT0,r.__webglTexture,a,m+e):F.framebufferTexture2D(F.DRAW_FRAMEBUFFER,F.COLOR_ATTACHMENT0,F.TEXTURE_2D,r.__webglTexture,a),i===0?T?F.copyTexSubImage3D(v,a,f,p,m+e,l,u,o,s):F.copyTexSubImage2D(v,a,f,p,l,u,o,s):F.blitFramebuffer(l,u,o,s,f,p,o,s,F.COLOR_BUFFER_BIT,F.NEAREST);I.bindFramebuffer(F.READ_FRAMEBUFFER,null),I.bindFramebuffer(F.DRAW_FRAMEBUFFER,null)}else T?e.isDataTexture||e.isData3DTexture?F.texSubImage3D(v,a,f,p,m,o,s,c,g,_,h.data):t.isCompressedArrayTexture?F.compressedTexSubImage3D(v,a,f,p,m,o,s,c,g,h.data):F.texSubImage3D(v,a,f,p,m,o,s,c,g,_,h):e.isDataTexture?F.texSubImage2D(F.TEXTURE_2D,a,f,p,o,s,g,_,h.data):e.isCompressedTexture?F.compressedTexSubImage2D(F.TEXTURE_2D,a,f,p,h.width,h.height,g,h.data):F.texSubImage2D(F.TEXTURE_2D,a,f,p,o,s,g,_,h);F.pixelStorei(F.UNPACK_ROW_LENGTH,y),F.pixelStorei(F.UNPACK_IMAGE_HEIGHT,b),F.pixelStorei(F.UNPACK_SKIP_PIXELS,x),F.pixelStorei(F.UNPACK_SKIP_ROWS,S),F.pixelStorei(F.UNPACK_SKIP_IMAGES,C),a===0&&t.generateMipmaps&&F.generateMipmap(v),I.unbindTexture()},this.initRenderTarget=function(e){L.get(e).__webglFramebuffer===void 0&&R.setupRenderTarget(e)},this.initTexture=function(e){e.isCubeTexture?R.setTextureCube(e,0):e.isData3DTexture?R.setTexture3D(e,0):e.isDataArrayTexture||e.isCompressedArrayTexture?R.setTexture2DArray(e,0):R.setTexture2D(e,0),I.unbindTexture()},this.resetState=function(){j=0,M=0,N=null,I.reset(),Ze.reset()},typeof __THREE_DEVTOOLS__<`u`&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(`observe`,{detail:this}))}get coordinateSystem(){return tt}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(e){this._outputColorSpace=e;let t=this.getContext();t.drawingBufferColorSpace=G._getDrawingBufferColorSpace(e),t.unpackColorSpace=G._getUnpackColorSpace()}},Ru=1.25,zu=65535;zu<<16;var Bu=2**-24,Vu=Symbol(`SKIP_GENERATION`),Hu={strategy:0,maxDepth:40,maxLeafSize:10,useSharedArrayBuffer:!1,setBoundingBox:!0,onProgress:null,indirect:!1,verbose:!0,range:null,[Vu]:!1};function Uu(e,t,n){return n.min.x=t[e],n.min.y=t[e+1],n.min.z=t[e+2],n.max.x=t[e+3],n.max.y=t[e+4],n.max.z=t[e+5],n}function Wu(e){let t=-1,n=-1/0;for(let r=0;r<3;r++){let i=e[r+3]-e[r];i>n&&(n=i,t=r)}return t}function Gu(e,t){t.set(e)}function Ku(e,t,n){let r,i;for(let a=0;a<3;a++){let o=a+3;r=e[a],i=t[a],n[a]=r<i?r:i,r=e[o],i=t[o],n[o]=r>i?r:i}}function qu(e,t,n){for(let r=0;r<3;r++){let i=t[e+2*r],a=t[e+2*r+1],o=i-a,s=i+a;o<n[r]&&(n[r]=o),s>n[r+3]&&(n[r+3]=s)}}function Ju(e){let t=e[3]-e[0],n=e[4]-e[1],r=e[5]-e[2];return 2*(t*n+n*r+r*t)}function Yu(e,t){return t[e+15]===zu}function Xu(e,t){return t[e+6]}function Zu(e,t){return t[e+14]}function Qu(e){return e+8}function $u(e,t){return e+t[e+6]*8}function ed(e,t){return t[e+7]}function td(e){return e}function nd(e,t,n,r,i){let a=1/0,o=1/0,s=1/0,c=-1/0,l=-1/0,u=-1/0,d=1/0,f=1/0,p=1/0,m=-1/0,h=-1/0,g=-1/0,_=e.offset||0;for(let r=(t-_)*6,i=(t+n-_)*6;r<i;r+=6){let t=e[r+0],n=e[r+1],i=t-n,_=t+n;i<a&&(a=i),_>c&&(c=_),t<d&&(d=t),t>m&&(m=t);let v=e[r+2],y=e[r+3],b=v-y,x=v+y;b<o&&(o=b),x>l&&(l=x),v<f&&(f=v),v>h&&(h=v);let S=e[r+4],C=e[r+5],w=S-C,T=S+C;w<s&&(s=w),T>u&&(u=T),S<p&&(p=S),S>g&&(g=S)}r[0]=a,r[1]=o,r[2]=s,r[3]=c,r[4]=l,r[5]=u,i[0]=d,i[1]=f,i[2]=p,i[3]=m,i[4]=h,i[5]=g}var rd=32,id=(e,t)=>e.candidate-t.candidate,ad=Array(rd).fill().map(()=>({count:0,bounds:new Float32Array(6),rightCacheBounds:new Float32Array(6),leftCacheBounds:new Float32Array(6),candidate:0})),od=new Float32Array(6);function sd(e,t,n,r,i,a){let o=-1,s=0;if(a===0)o=Wu(t),o!==-1&&(s=(t[o]+t[o+3])/2);else if(a===1)o=Wu(e),o!==-1&&(s=cd(n,r,i,o));else if(a===2){let a=Ju(e),c=Ru*i,l=n.offset||0,u=(r-l)*6,d=(r+i-l)*6;for(let e=0;e<3;e++){let r=t[e],l=(t[e+3]-r)/rd;if(i<rd/4){let t=[...ad];t.length=i;let r=0;for(let i=u;i<d;i+=6,r++){let a=t[r];a.candidate=n[i+2*e],a.count=0;let{bounds:o,leftCacheBounds:s,rightCacheBounds:c}=a;for(let e=0;e<3;e++)c[e]=1/0,c[e+3]=-1/0,s[e]=1/0,s[e+3]=-1/0,o[e]=1/0,o[e+3]=-1/0;qu(i,n,o)}t.sort(id);let l=i;for(let e=0;e<l;e++){let n=t[e];for(;e+1<l&&t[e+1].candidate===n.candidate;)t.splice(e+1,1),l--}for(let r=u;r<d;r+=6){let i=n[r+2*e];for(let e=0;e<l;e++){let a=t[e];i>=a.candidate?qu(r,n,a.rightCacheBounds):(qu(r,n,a.leftCacheBounds),a.count++)}}for(let n=0;n<l;n++){let r=t[n],l=r.count,u=i-r.count,d=r.leftCacheBounds,f=r.rightCacheBounds,p=0;l!==0&&(p=Ju(d)/a);let m=0;u!==0&&(m=Ju(f)/a);let h=1+Ru*(p*l+m*u);h<c&&(o=e,c=h,s=r.candidate)}}else{for(let e=0;e<rd;e++){let t=ad[e];t.count=0,t.candidate=r+l+e*l;let n=t.bounds;for(let e=0;e<3;e++)n[e]=1/0,n[e+3]=-1/0}for(let t=u;t<d;t+=6){let i=~~((n[t+2*e]-r)/l);i>=rd&&(i=rd-1);let a=ad[i];a.count++,qu(t,n,a.bounds)}let t=ad[rd-1];Gu(t.bounds,t.rightCacheBounds);for(let e=rd-2;e>=0;e--){let t=ad[e],n=ad[e+1];Ku(t.bounds,n.rightCacheBounds,t.rightCacheBounds)}let f=0;for(let t=0;t<rd-1;t++){let n=ad[t],r=n.count,l=n.bounds,u=ad[t+1].rightCacheBounds;r!==0&&(f===0?Gu(l,od):Ku(l,od,od)),f+=r;let d=0,p=0;f!==0&&(d=Ju(od)/a);let m=i-f;m!==0&&(p=Ju(u)/a);let h=1+Ru*(d*f+p*m);h<c&&(o=e,c=h,s=n.candidate)}}}}else console.warn(`BVH: Invalid build strategy value ${a} used.`);return{axis:o,pos:s}}function cd(e,t,n,r){let i=0,a=e.offset;for(let o=t,s=t+n;o<s;o++)i+=e[(o-a)*6+r*2];return i/n}var ld=class{constructor(){this.boundingData=new Float32Array(6)}};function ud(e,t,n,r,i,a){let o=r,s=r+i-1,c=a.pos,l=a.axis*2,u=n.offset||0;for(;;){for(;o<=s&&n[(o-u)*6+l]<c;)o++;for(;o<=s&&n[(s-u)*6+l]>=c;)s--;if(o<s){for(let n=0;n<t;n++){let r=e[o*t+n];e[o*t+n]=e[s*t+n],e[s*t+n]=r}for(let e=0;e<6;e++){let t=o-u,r=s-u,i=n[t*6+e];n[t*6+e]=n[r*6+e],n[r*6+e]=i}o++,s--}else return o}}var dd,fd,pd,md,hd=2**32;function gd(e){return`count`in e?1:1+gd(e.left)+gd(e.right)}function _d(e,t,n){return dd=new Float32Array(n),fd=new Uint32Array(n),pd=new Uint16Array(n),md=new Uint8Array(n),vd(e,t)}function vd(e,t){let n=e/4,r=e/2,i=`count`in t,a=t.boundingData;for(let e=0;e<6;e++)dd[n+e]=a[e];if(i)return t.buffer?(md.set(new Uint8Array(t.buffer),e),e+t.buffer.byteLength):(fd[n+6]=t.offset,pd[r+14]=t.count,pd[r+15]=zu,e+32);{let{left:r,right:i,splitAxis:a}=t,o=vd(e+32,r),s=e/32,c=o/32-s;if(c>hd)throw Error(`MeshBVH: Cannot store relative child node offset greater than 32 bits.`);return fd[n+6]=c,fd[n+7]=a,vd(o,i)}}function yd(e,t,n,r,i,a){let{maxDepth:o,verbose:s,maxLeafSize:c,strategy:l,onProgress:u}=i,d=e.primitiveBuffer,f=e.primitiveBufferStride,p=new Float32Array(6),m=!1,h=new ld;return nd(t,n,r,h.boundingData,p),_(h,n,r,p),h;function g(e){u&&u((e-a.offset)/a.count)}function _(e,n,r,i=null,a=0){if(!m&&a>=o&&(m=!0,s&&console.warn(`BVH: Max depth of ${o} reached when generating BVH. Consider increasing maxDepth.`)),r<=c||a>=o)return g(n+r),e.offset=n,e.count=r,e;let u=sd(e.boundingData,i,t,n,r,l);if(u.axis===-1)return g(n+r),e.offset=n,e.count=r,e;let h=ud(d,f,t,n,r,u);if(h===n||h===n+r)g(n+r),e.offset=n,e.count=r;else{e.splitAxis=u.axis;let i=new ld,o=n,s=h-n;e.left=i,nd(t,o,s,i.boundingData,p),_(i,o,s,p,a+1);let c=new ld,l=h,d=r-s;e.right=c,nd(t,l,d,c.boundingData,p),_(c,l,d,p,a+1)}return e}}function bd(e,t){let n=t.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer,r=e.getRootRanges(t.range),i=r[0],a=r[r.length-1],o={offset:i.offset,count:a.offset+a.count-i.offset},s=new Float32Array(6*o.count);s.offset=o.offset,e.computePrimitiveBounds(o.offset,o.count,s),e._roots=r.map(r=>{let i=yd(e,s,r.offset,r.count,t,o),a=new n(32*gd(i));return _d(0,i,a),a})}var xd=class{constructor(e){this._getNewPrimitive=e,this._primitives=[]}getPrimitive(){let e=this._primitives;return e.length===0?this._getNewPrimitive():e.pop()}releasePrimitive(e){this._primitives.push(e)}},Q=new class{constructor(){this.float32Array=null,this.uint16Array=null,this.uint32Array=null;let e=[],t=null;this.setBuffer=n=>{t&&e.push(t),t=n,this.float32Array=new Float32Array(n),this.uint16Array=new Uint16Array(n),this.uint32Array=new Uint32Array(n)},this.clearBuffer=()=>{t=null,this.float32Array=null,this.uint16Array=null,this.uint32Array=null,e.length!==0&&this.setBuffer(e.pop())}}},Sd,Cd,wd=[],Td=new xd(()=>new on);function Ed(e,t,n,r,i,a){Sd=Td.getPrimitive(),Cd=Td.getPrimitive(),wd.push(Sd,Cd),Q.setBuffer(e._roots[t]);let o=Dd(0,e.geometry,n,r,i,a);Q.clearBuffer(),Td.releasePrimitive(Sd),Td.releasePrimitive(Cd),wd.pop(),wd.pop();let s=wd.length;return s>0&&(Cd=wd[s-1],Sd=wd[s-2]),o}function Dd(e,t,n,r,i=null,a=0,o=0){let{float32Array:s,uint16Array:c,uint32Array:l}=Q,u=e*2;if(Yu(u,c)){let t=Xu(e,l),n=Zu(u,c);return Uu(td(e),s,Sd),r(t,n,!1,o,a+e/8,Sd)}else{let u=Qu(e),p=$u(e,l),m=u,h=p,g,_,v,y;if(i&&(v=Sd,y=Cd,Uu(td(m),s,v),Uu(td(h),s,y),g=i(v),_=i(y),_<g)){m=p,h=u;let e=g;g=_,_=e,v=y}v||(v=Sd,Uu(td(m),s,v));let b=Yu(m*2,c),x=n(v,b,g,o+1,a+m/8),S;if(x===2){let e=d(m);S=r(e,f(m)-e,!0,o+1,a+m/8,v)}else S=x&&Dd(m,t,n,r,i,a,o+1);if(S)return!0;y=Cd,Uu(td(h),s,y);let C=Yu(h*2,c),w=n(y,C,_,o+1,a+h/8),T;if(w===2){let e=d(h);T=r(e,f(h)-e,!0,o+1,a+h/8,y)}else T=w&&Dd(h,t,n,r,i,a,o+1);if(T)return!0;return!1;function d(e){let{uint16Array:t,uint32Array:n}=Q,r=e*2;for(;!Yu(r,t);)e=Qu(e),r=e*2;return Xu(e,n)}function f(e){let{uint16Array:t,uint32Array:n}=Q,r=e*2;for(;!Yu(r,t);)e=$u(e,n),r=e*2;return Xu(e,n)+Zu(r,t)}}}var Od=new Q.constructor,kd=new Q.constructor,Ad=new xd(()=>new on),jd=new on,Md=new on,Nd=new on,Pd=new on,Fd=!1;function Id(e,t,n,r){if(Fd)throw Error(`MeshBVH: Recursive calls to bvhcast not supported.`);Fd=!0;let i=e._roots,a=t._roots,o,s=0,c=0,l=new q().copy(n).invert();for(let e=0,t=i.length;e<t;e++){Od.setBuffer(i[e]),c=0;let t=Ad.getPrimitive();Uu(td(0),Od.float32Array,t),t.applyMatrix4(l);for(let e=0,i=a.length;e<i&&(kd.setBuffer(a[e]),o=Ld(0,0,n,l,r,s,c,0,0,t),kd.clearBuffer(),c+=a[e].byteLength/32,!o);e++);if(Ad.releasePrimitive(t),Od.clearBuffer(),s+=i[e].byteLength/32,o)break}return Fd=!1,o}function Ld(e,t,n,r,i,a=0,o=0,s=0,c=0,l=null,u=!1){let d,f;u?(d=kd,f=Od):(d=Od,f=kd);let p=d.float32Array,m=d.uint32Array,h=d.uint16Array,g=f.float32Array,_=f.uint32Array,v=f.uint16Array,y=e*2,b=t*2,x=Yu(y,h),S=Yu(b,v),C=!1;if(S&&x)C=u?i(Xu(t,_),Zu(t*2,v),Xu(e,m),Zu(e*2,h),c,o+t/8,s,a+e/8):i(Xu(e,m),Zu(e*2,h),Xu(t,_),Zu(t*2,v),s,a+e/8,c,o+t/8);else if(S){let l=Ad.getPrimitive();Uu(td(t),g,l),l.applyMatrix4(n);let d=Qu(e),f=$u(e,m);Uu(td(d),p,jd),Uu(td(f),p,Md);let h=l.intersectsBox(jd),_=l.intersectsBox(Md);C=h&&Ld(t,d,r,n,i,o,a,c,s+1,l,!u)||_&&Ld(t,f,r,n,i,o,a,c,s+1,l,!u),Ad.releasePrimitive(l)}else{let d=Qu(t),f=$u(t,_);Uu(td(d),g,Nd),Uu(td(f),g,Pd);let h=l.intersectsBox(Nd),v=l.intersectsBox(Pd);if(h&&v)C=Ld(e,d,n,r,i,a,o,s,c+1,l,u)||Ld(e,f,n,r,i,a,o,s,c+1,l,u);else if(h)if(x)C=Ld(e,d,n,r,i,a,o,s,c+1,l,u);else{let t=Ad.getPrimitive();t.copy(Nd).applyMatrix4(n);let l=Qu(e),f=$u(e,m);Uu(td(l),p,jd),Uu(td(f),p,Md);let h=t.intersectsBox(jd),g=t.intersectsBox(Md);C=h&&Ld(d,l,r,n,i,o,a,c,s+1,t,!u)||g&&Ld(d,f,r,n,i,o,a,c,s+1,t,!u),Ad.releasePrimitive(t)}else if(v)if(x)C=Ld(e,f,n,r,i,a,o,s,c+1,l,u);else{let t=Ad.getPrimitive();t.copy(Pd).applyMatrix4(n);let l=Qu(e),d=$u(e,m);Uu(td(l),p,jd),Uu(td(d),p,Md);let h=t.intersectsBox(jd),g=t.intersectsBox(Md);C=h&&Ld(f,l,r,n,i,o,a,c,s+1,t,!u)||g&&Ld(f,d,r,n,i,o,a,c,s+1,t,!u),Ad.releasePrimitive(t)}}return C}var Rd=new on,zd=new Float32Array(6),Bd=class{constructor(){this._roots=null,this.primitiveBuffer=null,this.primitiveBufferStride=null}init(e){e={...Hu,...e},bd(this,e)}getRootRanges(){throw Error(`BVH: getRootRanges() not implemented`)}writePrimitiveBounds(){throw Error(`BVH: writePrimitiveBounds() not implemented`)}writePrimitiveRangeBounds(e,t,n,r){let i=1/0,a=1/0,o=1/0,s=-1/0,c=-1/0,l=-1/0;for(let n=e,r=e+t;n<r;n++){this.writePrimitiveBounds(n,zd,0);let[e,t,r,u,d,f]=zd;e<i&&(i=e),u>s&&(s=u),t<a&&(a=t),d>c&&(c=d),r<o&&(o=r),f>l&&(l=f)}return n[r+0]=i,n[r+1]=a,n[r+2]=o,n[r+3]=s,n[r+4]=c,n[r+5]=l,n}computePrimitiveBounds(e,t,n){let r=n.offset||0;for(let i=e,a=e+t;i<a;i++){this.writePrimitiveBounds(i,zd,0);let[e,t,a,o,s,c]=zd,l=(e+o)/2,u=(t+s)/2,d=(a+c)/2,f=(o-e)/2,p=(s-t)/2,m=(c-a)/2,h=(i-r)*6;n[h+0]=l,n[h+1]=f+(Math.abs(l)+f)*Bu,n[h+2]=u,n[h+3]=p+(Math.abs(u)+p)*Bu,n[h+4]=d,n[h+5]=m+(Math.abs(d)+m)*Bu}return n}shiftPrimitiveOffsets(e){let t=this._indirectBuffer;if(t)for(let n=0,r=t.length;n<r;n++)t[n]+=e;else{let t=this._roots;for(let n=0;n<t.length;n++){let r=t[n],i=new Uint32Array(r),a=new Uint16Array(r),o=r.byteLength/32;for(let t=0;t<o;t++){let n=8*t;Yu(2*n,a)&&(i[n+6]+=e)}}}}traverse(e,t=0){let n=this._roots[t],r=new Uint32Array(n),i=new Uint16Array(n);a(0);function a(t,o=0){let s=t*2,c=Yu(s,i);if(c){let a=r[t+6],l=i[s+14];e(o,c,new Float32Array(n,t*4,6),a,l)}else{let i=Qu(t),s=$u(t,r),l=ed(t,r);e(o,c,new Float32Array(n,t*4,6),l)||(a(i,o+1),a(s,o+1))}}}refit(){let e=this._roots;for(let t=0,n=e.length;t<n;t++){let n=e[t],r=new Uint32Array(n),i=new Uint16Array(n),a=new Float32Array(n),o=n.byteLength/32;for(let e=o-1;e>=0;e--){let t=e*8,n=t*2;if(Yu(n,i)){let e=Xu(t,r),o=Zu(n,i);this.writePrimitiveRangeBounds(e,o,zd,0),a.set(zd,t)}else{let e=Qu(t),n=$u(t,r);for(let r=0;r<3;r++){let i=a[e+r],o=a[e+r+3],s=a[n+r],c=a[n+r+3];a[t+r]=i<s?i:s,a[t+r+3]=o>c?o:c}}}}}getBoundingBox(e){return e.makeEmpty(),this._roots.forEach(t=>{Uu(0,new Float32Array(t),Rd),e.union(Rd)}),e}shapecast(e){let{boundsTraverseOrder:t,intersectsBounds:n,intersectsRange:r,intersectsPrimitive:i,scratchPrimitive:a,iterate:o}=e;if(r&&i){let e=r;r=(t,n,r,s,c)=>e(t,n,r,s,c)?!0:o(t,n,this,i,r,s,a)}else r||=i?(e,t,n,r)=>o(e,t,this,i,n,r,a):(e,t,n)=>n;let s=!1,c=0,l=this._roots;for(let e=0,i=l.length;e<i;e++){let i=l[e];if(s=Ed(this,e,n,r,t,c),s)break;c+=i.byteLength/32}return s}bvhcast(e,t,n){let{intersectsRanges:r}=n;return Id(this,e,t,r)}};function Vd(){return typeof SharedArrayBuffer<`u`}function Hd(e){return e.index?e.index.count:e.attributes.position.count}function Ud(e){return Hd(e)/3}function Wd(e,t=ArrayBuffer){return e>65535?new Uint32Array(new t(4*e)):new Uint16Array(new t(2*e))}function Gd(e,t){if(!e.index){let n=e.attributes.position.count,r=Wd(n,t.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer);e.setIndex(new jr(r,1));for(let e=0;e<n;e++)r[e]=e}}function Kd(e,t,n){let r=Hd(e)/n,i=t||e.drawRange,a=i.start/n,o=(i.start+i.count)/n,s=Math.max(0,a),c=Math.min(r,o)-s;return{offset:Math.floor(s),count:Math.floor(c)}}function qd(e,t){return e.groups.map(e=>({offset:e.start/t,count:e.count/t}))}function Jd(e,t,n){let r=Kd(e,t,n),i=qd(e,n);if(!i.length)return[r];let a=[],o=r.offset,s=r.offset+r.count,c=Hd(e)/n,l=[];for(let e of i){let{offset:t,count:n}=e,r=t,i=t+(isFinite(n)?n:c-t);r<s&&i>o&&(l.push({pos:Math.max(o,r),isStart:!0}),l.push({pos:Math.min(s,i),isStart:!1}))}l.sort((e,t)=>e.pos===t.pos?e.type===`end`?-1:1:e.pos-t.pos);let u=0,d=null;for(let e of l){let t=e.pos;u!==0&&t!==d&&a.push({offset:d,count:t-d}),u+=e.isStart?1:-1,d=t}return a}function Yd(e,t){let n=e[e.length-1],r=n.offset+n.count>2**16,i=e.reduce((e,t)=>e+t.count,0),a=r?4:2,o=t?new SharedArrayBuffer(i*a):new ArrayBuffer(i*a),s=r?new Uint32Array(o):new Uint16Array(o),c=0;for(let t=0;t<e.length;t++){let{offset:n,count:r}=e[t];for(let e=0;e<r;e++)s[c+e]=n+e;c+=r}return s}var Xd=class extends Bd{get indirect(){return!!this._indirectBuffer}get primitiveStride(){return null}get primitiveBufferStride(){return this.indirect?1:this.primitiveStride}set primitiveBufferStride(e){}get primitiveBuffer(){return this.indirect?this._indirectBuffer:this.geometry.index.array}set primitiveBuffer(e){}constructor(e,t={}){if(!e.isBufferGeometry)throw Error(`BVH: Only BufferGeometries are supported.`);if(e.index&&e.index.isInterleavedBufferAttribute)throw Error(`BVH: InterleavedBufferAttribute is not supported for the index attribute.`);if(t.useSharedArrayBuffer&&!Vd())throw Error(`BVH: SharedArrayBuffer is not available.`);super(),this.geometry=e,this.resolvePrimitiveIndex=t.indirect?e=>this._indirectBuffer[e]:e=>e,this.primitiveBuffer=null,this.primitiveBufferStride=null,this._indirectBuffer=null,t={...Hu,...t},t[Vu]||this.init(t)}init(e){let{geometry:t,primitiveStride:n}=this;e.indirect?this._indirectBuffer=Yd(Jd(t,e.range,n),e.useSharedArrayBuffer):Gd(t,e),super.init(e),!t.boundingBox&&e.setBoundingBox&&(t.boundingBox=this.getBoundingBox(new on))}getRootRanges(e){return this.indirect?[{offset:0,count:this._indirectBuffer.length}]:Jd(this.geometry,e,this.primitiveStride)}raycastObject3D(){throw Error(`BVH: raycastObject3D() not implemented`)}},Zd=class{constructor(){this.min=1/0,this.max=-1/0}setFromPointsField(e,t){let n=1/0,r=-1/0;for(let i=0,a=e.length;i<a;i++){let a=e[i][t];n=a<n?a:n,r=a>r?a:r}this.min=n,this.max=r}setFromPoints(e,t){let n=1/0,r=-1/0;for(let i=0,a=t.length;i<a;i++){let a=t[i],o=e.dot(a);n=o<n?o:n,r=o>r?o:r}this.min=n,this.max=r}isSeparated(e){return this.min>e.max||e.min>this.max}};Zd.prototype.setFromBox=(function(){let e=new U;return function(t,n){let r=n.min,i=n.max,a=1/0,o=-1/0;for(let n=0;n<=1;n++)for(let s=0;s<=1;s++)for(let c=0;c<=1;c++){e.x=r.x*n+i.x*(1-n),e.y=r.y*s+i.y*(1-s),e.z=r.z*c+i.z*(1-c);let l=t.dot(e);a=Math.min(l,a),o=Math.max(l,o)}this.min=a,this.max=o}})(),(function(){let e=new Zd;return function(t,n){let r=t.points,i=t.satAxes,a=t.satBounds,o=n.points,s=n.satAxes,c=n.satBounds;for(let t=0;t<3;t++){let n=a[t],r=i[t];if(e.setFromPoints(r,o),n.isSeparated(e))return!1}for(let t=0;t<3;t++){let n=c[t],i=s[t];if(e.setFromPoints(i,r),n.isSeparated(e))return!1}}})();var Qd=(function(){let e=new U,t=new U,n=new U;return function(r,i,a){let o=r.start,s=e,c=i.start,l=t;n.subVectors(o,c),e.subVectors(r.end,r.start),t.subVectors(i.end,i.start);let u=n.dot(l),d=l.dot(s),f=l.dot(l),p=n.dot(s),m=s.dot(s)*f-d*d,h,g;h=m===0?0:(u*d-p*f)/m,g=(u+h*d)/f,a.x=h,a.y=g}})(),$d=(function(){let e=new H,t=new U,n=new U;return function(r,i,a,o){Qd(r,i,e);let s=e.x,c=e.y;if(s>=0&&s<=1&&c>=0&&c<=1){r.at(s,a),i.at(c,o);return}else if(s>=0&&s<=1){c<0?i.at(0,o):i.at(1,o),r.closestPointToPoint(o,!0,a);return}else if(c>=0&&c<=1){s<0?r.at(0,a):r.at(1,a),i.closestPointToPoint(a,!0,o);return}else{let e;e=s<0?r.start:r.end;let l;l=c<0?i.start:i.end;let u=t,d=n;if(r.closestPointToPoint(l,!0,t),i.closestPointToPoint(e,!0,n),u.distanceToSquared(l)<=d.distanceToSquared(e)){a.copy(u),o.copy(l);return}else{a.copy(e),o.copy(d);return}}}})(),ef=(function(){let e=new U,t=new U,n=new ki,r=new _s;return function(i,a){let{radius:o,center:s}=i,{a:c,b:l,c:u}=a;if(r.start=c,r.end=l,r.closestPointToPoint(s,!0,e).distanceTo(s)<=o||(r.start=c,r.end=u,r.closestPointToPoint(s,!0,e).distanceTo(s)<=o)||(r.start=l,r.end=u,r.closestPointToPoint(s,!0,e).distanceTo(s)<=o))return!0;let d=a.getPlane(n);if(Math.abs(d.distanceToPoint(s))<=o){let e=d.projectPoint(s,t);if(a.containsPoint(e))return!0}return!1}})(),tf=[`x`,`y`,`z`],nf=1e-15,rf=nf*nf;function af(e){return Math.abs(e)<nf}var of=class extends yr{constructor(...e){super(...e),this.isExtendedTriangle=!0,this.satAxes=[,,,,].fill().map(()=>new U),this.satBounds=[,,,,].fill().map(()=>new Zd),this.points=[this.a,this.b,this.c],this.plane=new ki,this.isDegenerateIntoSegment=!1,this.isDegenerateIntoPoint=!1,this.degenerateSegment=new _s,this.needsUpdate=!0}intersectsSphere(e){return ef(e,this)}update(){let e=this.a,t=this.b,n=this.c,r=this.points,i=this.satAxes,a=this.satBounds,o=i[0],s=a[0];this.getNormal(o),s.setFromPoints(o,r);let c=i[1],l=a[1];c.subVectors(e,t),l.setFromPoints(c,r);let u=i[2],d=a[2];u.subVectors(t,n),d.setFromPoints(u,r);let f=i[3],p=a[3];f.subVectors(n,e),p.setFromPoints(f,r);let m=c.length(),h=u.length(),g=f.length();this.isDegenerateIntoPoint=!1,this.isDegenerateIntoSegment=!1,m<nf?h<nf||g<nf?this.isDegenerateIntoPoint=!0:(this.isDegenerateIntoSegment=!0,this.degenerateSegment.start.copy(e),this.degenerateSegment.end.copy(n)):h<nf?g<nf?this.isDegenerateIntoPoint=!0:(this.isDegenerateIntoSegment=!0,this.degenerateSegment.start.copy(t),this.degenerateSegment.end.copy(e)):g<nf&&(this.isDegenerateIntoSegment=!0,this.degenerateSegment.start.copy(n),this.degenerateSegment.end.copy(t)),this.plane.setFromNormalAndCoplanarPoint(o,e),this.needsUpdate=!1}};of.prototype.closestPointToSegment=(function(){let e=new U,t=new U,n=new _s;return function(r,i=null,a=null){let{start:o,end:s}=r,c=this.points,l,u=1/0;for(let o=0;o<3;o++){let s=(o+1)%3;n.start.copy(c[o]),n.end.copy(c[s]),$d(n,r,e,t),l=e.distanceToSquared(t),l<u&&(u=l,i&&i.copy(e),a&&a.copy(t))}return this.closestPointToPoint(o,e),l=o.distanceToSquared(e),l<u&&(u=l,i&&i.copy(e),a&&a.copy(o)),this.closestPointToPoint(s,e),l=s.distanceToSquared(e),l<u&&(u=l,i&&i.copy(e),a&&a.copy(s)),Math.sqrt(u)}})(),of.prototype.intersectsTriangle=(function(){let e=new of,t=new Zd,n=new Zd,r=new U,i=new U,a=new U,o=new U,s=new _s,c=new _s,l=new U,u=new H,d=new H;function f(e,i,a,s){let c=r;!e.isDegenerateIntoPoint&&!e.isDegenerateIntoSegment?c.copy(e.plane.normal):c.copy(i.plane.normal);let l=e.satBounds,u=e.satAxes;for(let r=1;r<4;r++){let a=l[r],s=u[r];if(t.setFromPoints(s,i.points),a.isSeparated(t)||(o.copy(c).cross(s),t.setFromPoints(o,e.points),n.setFromPoints(o,i.points),t.isSeparated(n)))return!1}let d=i.satBounds,f=i.satAxes;for(let r=1;r<4;r++){let a=d[r],s=f[r];if(t.setFromPoints(s,e.points),a.isSeparated(t)||(o.crossVectors(c,s),t.setFromPoints(o,e.points),n.setFromPoints(o,i.points),t.isSeparated(n)))return!1}return a&&(s||console.warn(`ExtendedTriangle.intersectsTriangle: Triangles are coplanar which does not support an output edge. Setting edge to 0, 0, 0.`),a.start.set(0,0,0),a.end.set(0,0,0)),!0}function p(e,t,n,r,i,a,o,s,c,l,u){let d=o/(o-s);l.x=r+(i-r)*d,u.start.subVectors(t,e).multiplyScalar(d).add(e),d=o/(o-c),l.y=r+(a-r)*d,u.end.subVectors(n,e).multiplyScalar(d).add(e)}function m(e,t,n,r,i,a,o,s,c,l,u){if(i>0)p(e.c,e.a,e.b,r,t,n,c,o,s,l,u);else if(a>0)p(e.b,e.a,e.c,n,t,r,s,o,c,l,u);else if(s*c>0||o!=0)p(e.a,e.b,e.c,t,n,r,o,s,c,l,u);else if(s!=0)p(e.b,e.a,e.c,n,t,r,s,o,c,l,u);else if(c!=0)p(e.c,e.a,e.b,r,t,n,c,o,s,l,u);else return!0;return!1}function h(e,t,n,i){let a=t.degenerateSegment,o=e.plane.distanceToPoint(a.start),s=e.plane.distanceToPoint(a.end);return af(o)?af(s)?f(e,t,n,i):(n&&(n.start.copy(a.start),n.end.copy(a.start)),e.containsPoint(a.start)):af(s)?(n&&(n.start.copy(a.end),n.end.copy(a.end)),e.containsPoint(a.end)):e.plane.intersectLine(a,r)==null?!1:(n&&(n.start.copy(r),n.end.copy(r)),e.containsPoint(r))}function g(e,t,n){let r=t.a;return af(e.plane.distanceToPoint(r))&&e.containsPoint(r)?(n&&(n.start.copy(r),n.end.copy(r)),!0):!1}function _(e,t,n){let i=e.degenerateSegment,a=t.a;return i.closestPointToPoint(a,!0,r),a.distanceToSquared(r)<rf?(n&&(n.start.copy(a),n.end.copy(a)),!0):!1}function v(e,t,n,o){if(e.isDegenerateIntoSegment)if(t.isDegenerateIntoSegment){let o=e.degenerateSegment,s=t.degenerateSegment,c=i,l=a;o.delta(c),s.delta(l);let u=r.subVectors(s.start,o.start),d=c.x*l.y-c.y*l.x;if(af(d))return!1;let f=(u.x*l.y-u.y*l.x)/d,p=-(c.x*u.y-c.y*u.x)/d;return f<0||f>1||p<0||p>1?!1:af(o.start.z+c.z*f-(s.start.z+l.z*p))?(n&&(n.start.copy(o.start).addScaledVector(c,f),n.end.copy(o.start).addScaledVector(c,f)),!0):!1}else if(t.isDegenerateIntoPoint)return _(e,t,n);else return h(t,e,n,o);else if(e.isDegenerateIntoPoint)return t.isDegenerateIntoPoint?t.a.distanceToSquared(e.a)<rf?(n&&(n.start.copy(e.a),n.end.copy(e.a)),!0):!1:t.isDegenerateIntoSegment?_(t,e,n):g(t,e,n);else if(t.isDegenerateIntoPoint)return g(e,t,n);else if(t.isDegenerateIntoSegment)return h(e,t,n,o)}return function(t,n=null,r=!1){this.needsUpdate&&this.update(),t.isExtendedTriangle?t.needsUpdate&&t.update():(e.copy(t),e.update(),t=e);let o=v(this,t,n,r);if(o!==void 0)return o;let p=this.plane,h=t.plane,g=h.distanceToPoint(this.a),_=h.distanceToPoint(this.b),y=h.distanceToPoint(this.c);af(g)&&(g=0),af(_)&&(_=0),af(y)&&(y=0);let b=g*_,x=g*y;if(b>0&&x>0)return!1;let S=p.distanceToPoint(t.a),C=p.distanceToPoint(t.b),w=p.distanceToPoint(t.c);af(S)&&(S=0),af(C)&&(C=0),af(w)&&(w=0);let T=S*C,E=S*w;if(T>0&&E>0)return!1;i.copy(p.normal),a.copy(h.normal);let D=i.cross(a),O=0,k=Math.abs(D.x),ee=Math.abs(D.y);ee>k&&(k=ee,O=1),Math.abs(D.z)>k&&(O=2);let te=tf[O],ne=this.a[te],A=this.b[te],j=this.c[te],M=t.a[te],N=t.b[te],re=t.c[te];if(m(this,ne,A,j,b,x,g,_,y,u,s)||m(t,M,N,re,T,E,S,C,w,d,c))return f(this,t,n,r);if(u.y<u.x){let e=u.y;u.y=u.x,u.x=e,l.copy(s.start),s.start.copy(s.end),s.end.copy(l)}if(d.y<d.x){let e=d.y;d.y=d.x,d.x=e,l.copy(c.start),c.start.copy(c.end),c.end.copy(l)}return u.y<d.x||d.y<u.x?!1:(n&&(d.x>u.x?n.start.copy(c.start):n.start.copy(s.start),d.y<u.y?n.end.copy(c.end):n.end.copy(s.end)),!0)}})(),of.prototype.distanceToPoint=(function(){let e=new U;return function(t){return this.closestPointToPoint(t,e),t.distanceTo(e)}})(),of.prototype.distanceToTriangle=(function(){let e=new U,t=new U,n=[`a`,`b`,`c`],r=new _s,i=new _s;return function(a,o=null,s=null){let c=o||s?r:null;if(this.intersectsTriangle(a,c))return(o||s)&&(o&&c.getCenter(o),s&&c.getCenter(s)),0;let l=1/0;for(let t=0;t<3;t++){let r,i=n[t],c=a[i];this.closestPointToPoint(c,e),r=c.distanceToSquared(e),r<l&&(l=r,o&&o.copy(e),s&&s.copy(c));let u=this[i];a.closestPointToPoint(u,e),r=u.distanceToSquared(e),r<l&&(l=r,o&&o.copy(u),s&&s.copy(e))}for(let c=0;c<3;c++){let u=n[c],d=n[(c+1)%3];r.set(this[u],this[d]);for(let c=0;c<3;c++){let u=n[c],d=n[(c+1)%3];i.set(a[u],a[d]),$d(r,i,e,t);let f=e.distanceToSquared(t);f<l&&(l=f,o&&o.copy(e),s&&s.copy(t))}}return Math.sqrt(l)}})();var sf=class{constructor(e,t,n){this.isOrientedBox=!0,this.min=new U,this.max=new U,this.matrix=new q,this.invMatrix=new q,this.points=Array(8).fill().map(()=>new U),this.satAxes=[,,,].fill().map(()=>new U),this.satBounds=[,,,].fill().map(()=>new Zd),this.alignedSatBounds=[,,,].fill().map(()=>new Zd),this.needsUpdate=!1,e&&this.min.copy(e),t&&this.max.copy(t),n&&this.matrix.copy(n)}set(e,t,n){this.min.copy(e),this.max.copy(t),this.matrix.copy(n),this.needsUpdate=!0}copy(e){this.min.copy(e.min),this.max.copy(e.max),this.matrix.copy(e.matrix),this.needsUpdate=!0}};sf.prototype.update=(function(){return function(){let e=this.matrix,t=this.min,n=this.max,r=this.points;for(let i=0;i<=1;i++)for(let a=0;a<=1;a++)for(let o=0;o<=1;o++){let s=r[1*i|2*a|4*o];s.x=i?n.x:t.x,s.y=a?n.y:t.y,s.z=o?n.z:t.z,s.applyMatrix4(e)}let i=this.satBounds,a=this.satAxes,o=r[0];for(let e=0;e<3;e++){let t=a[e],n=i[e],s=r[1<<e];t.subVectors(o,s),n.setFromPoints(t,r)}let s=this.alignedSatBounds;s[0].setFromPointsField(r,`x`),s[1].setFromPointsField(r,`y`),s[2].setFromPointsField(r,`z`),this.invMatrix.copy(this.matrix).invert(),this.needsUpdate=!1}})(),sf.prototype.intersectsBox=(function(){let e=new Zd;return function(t){this.needsUpdate&&this.update();let n=t.min,r=t.max,i=this.satBounds,a=this.satAxes,o=this.alignedSatBounds;if(e.min=n.x,e.max=r.x,o[0].isSeparated(e)||(e.min=n.y,e.max=r.y,o[1].isSeparated(e))||(e.min=n.z,e.max=r.z,o[2].isSeparated(e)))return!1;for(let n=0;n<3;n++){let r=a[n],o=i[n];if(e.setFromBox(r,t),o.isSeparated(e))return!1}return!0}})(),sf.prototype.intersectsTriangle=(function(){let e=new of,t=[,,,],n=new Zd,r=new Zd,i=new U;return function(a){this.needsUpdate&&this.update(),a.isExtendedTriangle?a.needsUpdate&&a.update():(e.copy(a),e.update(),a=e);let o=this.satBounds,s=this.satAxes;t[0]=a.a,t[1]=a.b,t[2]=a.c;for(let e=0;e<3;e++){let r=o[e],i=s[e];if(n.setFromPoints(i,t),r.isSeparated(n))return!1}let c=a.satBounds,l=a.satAxes,u=this.points;for(let e=0;e<3;e++){let t=c[e],r=l[e];if(n.setFromPoints(r,u),t.isSeparated(n))return!1}for(let e=0;e<3;e++){let a=s[e];for(let e=0;e<4;e++){let o=l[e];if(i.crossVectors(a,o),n.setFromPoints(i,t),r.setFromPoints(i,u),n.isSeparated(r))return!1}}return!0}})(),sf.prototype.closestPointToPoint=(function(){return function(e,t){return this.needsUpdate&&this.update(),t.copy(e).applyMatrix4(this.invMatrix).clamp(this.min,this.max).applyMatrix4(this.matrix),t}})(),sf.prototype.distanceToPoint=(function(){let e=new U;return function(t){return this.closestPointToPoint(t,e),t.distanceTo(e)}})(),sf.prototype.distanceToBox=(function(){let e=[`x`,`y`,`z`],t=Array(12).fill().map(()=>new _s),n=Array(12).fill().map(()=>new _s),r=new U,i=new U;return function(a,o=0,s=null,c=null){if(this.needsUpdate&&this.update(),this.intersectsBox(a))return(s||c)&&(a.getCenter(i),this.closestPointToPoint(i,r),a.closestPointToPoint(r,i),s&&s.copy(r),c&&c.copy(i)),0;let l=o*o,u=a.min,d=a.max,f=this.points,p=1/0;for(let e=0;e<8;e++){let t=f[e];i.copy(t).clamp(u,d);let n=t.distanceToSquared(i);if(n<p&&(p=n,s&&s.copy(t),c&&c.copy(i),n<l))return Math.sqrt(n)}let m=0;for(let r=0;r<3;r++)for(let i=0;i<=1;i++)for(let a=0;a<=1;a++){let o=(r+1)%3,s=(r+2)%3,c=i<<o|a<<s,l=1<<r|i<<o|a<<s,p=f[c],h=f[l];t[m].set(p,h);let g=e[r],_=e[o],v=e[s],y=n[m],b=y.start,x=y.end;b[g]=u[g],b[_]=i?u[_]:d[_],b[v]=a?u[v]:d[_],x[g]=d[g],x[_]=i?u[_]:d[_],x[v]=a?u[v]:d[_],m++}for(let e=0;e<=1;e++)for(let t=0;t<=1;t++)for(let n=0;n<=1;n++){i.x=e?d.x:u.x,i.y=t?d.y:u.y,i.z=n?d.z:u.z,this.closestPointToPoint(i,r);let a=i.distanceToSquared(r);if(a<p&&(p=a,s&&s.copy(r),c&&c.copy(i),a<l))return Math.sqrt(a)}for(let e=0;e<12;e++){let a=t[e];for(let e=0;e<12;e++){let t=n[e];$d(a,t,r,i);let o=r.distanceToSquared(i);if(o<p&&(p=o,s&&s.copy(r),c&&c.copy(i),o<l))return Math.sqrt(o)}}return Math.sqrt(p)}})();var cf=new class extends xd{constructor(){super(()=>new of)}},lf=new U,uf=new U;function df(e,t,n={},r=0,i=1/0){let a=r*r,o=i*i,s=1/0,c=null;if(e.shapecast({boundsTraverseOrder:e=>(lf.copy(t).clamp(e.min,e.max),lf.distanceToSquared(t)),intersectsBounds:(e,t,n)=>n<s&&n<o,intersectsTriangle:(e,n)=>{e.closestPointToPoint(t,lf);let r=t.distanceToSquared(lf);return r<s&&(uf.copy(lf),s=r,c=n),r<a}}),s===1/0)return null;let l=Math.sqrt(s);return n.point?n.point.copy(uf):n.point=uf.clone(),n.distance=l,n.faceIndex=c,n}var ff=!0,pf=!1,mf=new U,hf=new U,gf=new U,_f=new H,vf=new H,yf=new H,bf=new U,xf=new U,Sf=new U,Cf=new U;function wf(e,t,n,r,i,a,o,s){let c;if(c=a===1?e.intersectTriangle(r,n,t,!0,i):e.intersectTriangle(t,n,r,a!==2,i),c===null)return null;let l=e.origin.distanceTo(i);return l<o||l>s?null:{distance:l,point:i.clone()}}function Tf(e,t,n,r,i,a,o,s,c,l,u){mf.fromBufferAttribute(t,a),hf.fromBufferAttribute(t,o),gf.fromBufferAttribute(t,s);let d=wf(e,mf,hf,gf,Cf,c,l,u);if(d){if(r){_f.fromBufferAttribute(r,a),vf.fromBufferAttribute(r,o),yf.fromBufferAttribute(r,s),d.uv=new H;let e=yr.getInterpolation(Cf,mf,hf,gf,_f,vf,yf,d.uv);ff||(d.uv=e)}if(i){_f.fromBufferAttribute(i,a),vf.fromBufferAttribute(i,o),yf.fromBufferAttribute(i,s),d.uv1=new H;let e=yr.getInterpolation(Cf,mf,hf,gf,_f,vf,yf,d.uv1);ff||(d.uv1=e),pf&&(d.uv2=d.uv1)}if(n){bf.fromBufferAttribute(n,a),xf.fromBufferAttribute(n,o),Sf.fromBufferAttribute(n,s),d.normal=new U;let t=yr.getInterpolation(Cf,mf,hf,gf,bf,xf,Sf,d.normal);d.normal.dot(e.direction)>0&&d.normal.multiplyScalar(-1),ff||(d.normal=t)}let t={a,b:o,c:s,normal:new U,materialIndex:0};if(yr.getNormal(mf,hf,gf,t.normal),d.face=t,d.faceIndex=a,ff){let e=new U;yr.getBarycoord(Cf,mf,hf,gf,e),d.barycoord=e}}return d}function Ef(e){return e&&e.isMaterial?e.side:e}function Df(e,t,n,r,i,a,o){let s=r*3,c=s+0,l=s+1,u=s+2,{index:d,groups:f}=e;e.index&&(c=d.getX(c),l=d.getX(l),u=d.getX(u));let{position:p,normal:m,uv:h,uv1:g}=e.attributes;if(Array.isArray(t)){let e=r*3;for(let s=0,d=f.length;s<d;s++){let{start:d,count:_,materialIndex:v}=f[s];if(e>=d&&e<d+_){let e=Ef(t[v]),s=Tf(n,p,m,h,g,c,l,u,e,a,o);if(s)if(s.faceIndex=r,s.face.materialIndex=v,i)i.push(s);else return s}}}else{let e=Ef(t),s=Tf(n,p,m,h,g,c,l,u,e,a,o);if(s)if(s.faceIndex=r,s.face.materialIndex=0,i)i.push(s);else return s}return null}function Of(e,t,n,r){let i=e.a,a=e.b,o=e.c,s=t,c=t+1,l=t+2;n&&(s=n.getX(s),c=n.getX(c),l=n.getX(l)),i.x=r.getX(s),i.y=r.getY(s),i.z=r.getZ(s),a.x=r.getX(c),a.y=r.getY(c),a.z=r.getZ(c),o.x=r.getX(l),o.y=r.getY(l),o.z=r.getZ(l)}function kf(e,t,n,r,i,a,o,s){let{geometry:c,_indirectBuffer:l}=e;for(let e=r,l=r+i;e<l;e++)Df(c,t,n,e,a,o,s)}function Af(e,t,n,r,i,a,o){let{geometry:s,_indirectBuffer:c}=e,l=1/0,u=null;for(let e=r,c=r+i;e<c;e++){let r;r=Df(s,t,n,e,null,a,o),r&&r.distance<l&&(u=r,l=r.distance)}return u}function jf(e,t,n,r,i,a,o){let{geometry:s}=n,{index:c}=s,l=s.attributes.position;for(let n=e,s=t+e;n<s;n++){let e;if(e=n,Of(o,e*3,c,l),o.needsUpdate=!0,r(o,e,i,a))return!0}return!1}function Mf(e,t=null){t&&Array.isArray(t)&&(t=new Set(t));let n=e.geometry,r=n.index?n.index.array:null,i=n.attributes.position,a,o,s,c,l=0,u=e._roots;for(let e=0,t=u.length;e<t;e++)a=u[e],o=new Uint32Array(a),s=new Uint16Array(a),c=new Float32Array(a),d(0,l),l+=a.byteLength;function d(e,n,a=!1){let l=e*2;if(Yu(l,s)){let t=Xu(e,o),n=Zu(l,s),a=1/0,u=1/0,d=1/0,f=-1/0,p=-1/0,m=-1/0;for(let e=3*t,o=3*(t+n);e<o;e++){let t=r[e],n=i.getX(t),o=i.getY(t),s=i.getZ(t);n<a&&(a=n),n>f&&(f=n),o<u&&(u=o),o>p&&(p=o),s<d&&(d=s),s>m&&(m=s)}return c[e+0]!==a||c[e+1]!==u||c[e+2]!==d||c[e+3]!==f||c[e+4]!==p||c[e+5]!==m?(c[e+0]=a,c[e+1]=u,c[e+2]=d,c[e+3]=f,c[e+4]=p,c[e+5]=m,!0):!1}else{let r=Qu(e),i=$u(e,o),s=a,l=!1,u=!1;if(t){if(!s){let e=r/8+n/32,a=i/8+n/32;l=t.has(e),u=t.has(a),s=!l&&!u}}else l=!0,u=!0;let f=s||l,p=s||u,m=!1;f&&(m=d(r,n,s));let h=!1;p&&(h=d(i,n,s));let g=m||h;if(g)for(let t=0;t<3;t++){let n=r+t,a=i+t,o=c[n],s=c[n+3],l=c[a],u=c[a+3];c[e+t]=o<l?o:l,c[e+t+3]=s>u?s:u}return g}}}function Nf(e,t,n,r,i){let a,o,s,c,l,u,d=1/n.direction.x,f=1/n.direction.y,p=1/n.direction.z,m=n.origin.x,h=n.origin.y,g=n.origin.z,_=t[e],v=t[e+3],y=t[e+1],b=t[e+3+1],x=t[e+2],S=t[e+3+2];return d>=0?(a=(_-m)*d,o=(v-m)*d):(a=(v-m)*d,o=(_-m)*d),f>=0?(s=(y-h)*f,c=(b-h)*f):(s=(b-h)*f,c=(y-h)*f),a>c||s>o||((s>a||isNaN(a))&&(a=s),(c<o||isNaN(o))&&(o=c),p>=0?(l=(x-g)*p,u=(S-g)*p):(l=(S-g)*p,u=(x-g)*p),a>u||l>o)?!1:((l>a||a!==a)&&(a=l),(u<o||o!==o)&&(o=u),a<=i&&o>=r)}function Pf(e,t,n,r,i,a,o,s){let{geometry:c,_indirectBuffer:l}=e;for(let e=r,u=r+i;e<u;e++)Df(c,t,n,l?l[e]:e,a,o,s)}function Ff(e,t,n,r,i,a,o){let{geometry:s,_indirectBuffer:c}=e,l=1/0,u=null;for(let e=r,d=r+i;e<d;e++){let r;r=Df(s,t,n,c?c[e]:e,null,a,o),r&&r.distance<l&&(u=r,l=r.distance)}return u}function If(e,t,n,r,i,a,o){let{geometry:s}=n,{index:c}=s,l=s.attributes.position;for(let s=e,u=t+e;s<u;s++){let e;if(e=n.resolveTriangleIndex(s),Of(o,e*3,c,l),o.needsUpdate=!0,r(o,e,i,a))return!0}return!1}function Lf(e,t,n,r,i,a,o){Q.setBuffer(e._roots[t]),Rf(0,e,n,r,i,a,o),Q.clearBuffer()}function Rf(e,t,n,r,i,a,o){let{float32Array:s,uint16Array:c,uint32Array:l}=Q,u=e*2;if(Yu(u,c))kf(t,n,r,Xu(e,l),Zu(u,c),i,a,o);else{let c=Qu(e);Nf(c,s,r,a,o)&&Rf(c,t,n,r,i,a,o);let u=$u(e,l);Nf(u,s,r,a,o)&&Rf(u,t,n,r,i,a,o)}}var zf=[`x`,`y`,`z`];function Bf(e,t,n,r,i,a){Q.setBuffer(e._roots[t]);let o=Vf(0,e,n,r,i,a);return Q.clearBuffer(),o}function Vf(e,t,n,r,i,a){let{float32Array:o,uint16Array:s,uint32Array:c}=Q,l=e*2;if(Yu(l,s))return Af(t,n,r,Xu(e,c),Zu(l,s),i,a);{let s=ed(e,c),l=zf[s],u=r.direction[l]>=0,d,f;u?(d=Qu(e),f=$u(e,c)):(d=$u(e,c),f=Qu(e));let p=Nf(d,o,r,i,a)?Vf(d,t,n,r,i,a):null;if(p){let e=p.point[l];if(u?e<=o[f+s]:e>=o[f+s+3])return p}let m=Nf(f,o,r,i,a)?Vf(f,t,n,r,i,a):null;return p&&m?p.distance<=m.distance?p:m:p||m||null}}var Hf=new on,Uf=new of,Wf=new of,Gf=new q,Kf=new sf,qf=new sf;function Jf(e,t,n,r){Q.setBuffer(e._roots[t]);let i=Yf(0,e,n,r);return Q.clearBuffer(),i}function Yf(e,t,n,r,i=null){let{float32Array:a,uint16Array:o,uint32Array:s}=Q,c=e*2;if(i===null&&(n.boundingBox||n.computeBoundingBox(),Kf.set(n.boundingBox.min,n.boundingBox.max,r),i=Kf),Yu(c,o)){let i=t.geometry,l=i.index,u=i.attributes.position,d=n.index,f=n.attributes.position,p=Xu(e,s),m=Zu(c,o);if(Gf.copy(r).invert(),n.boundsTree)return Uu(td(e),a,qf),qf.matrix.copy(Gf),qf.needsUpdate=!0,n.boundsTree.shapecast({intersectsBounds:e=>qf.intersectsBox(e),intersectsTriangle:e=>{e.a.applyMatrix4(r),e.b.applyMatrix4(r),e.c.applyMatrix4(r),e.needsUpdate=!0;for(let t=p*3,n=(m+p)*3;t<n;t+=3)if(Of(Wf,t,l,u),Wf.needsUpdate=!0,e.intersectsTriangle(Wf))return!0;return!1}});{let e=Ud(n);for(let t=p*3,n=(m+p)*3;t<n;t+=3){Of(Uf,t,l,u),Uf.a.applyMatrix4(Gf),Uf.b.applyMatrix4(Gf),Uf.c.applyMatrix4(Gf),Uf.needsUpdate=!0;for(let t=0,n=e*3;t<n;t+=3)if(Of(Wf,t,d,f),Wf.needsUpdate=!0,Uf.intersectsTriangle(Wf))return!0}}}else{let o=Qu(e),c=$u(e,s);return Uu(td(o),a,Hf),!!(i.intersectsBox(Hf)&&Yf(o,t,n,r,i)||(Uu(td(c),a,Hf),i.intersectsBox(Hf)&&Yf(c,t,n,r,i)))}}var Xf=new q,Zf=new sf,Qf=new sf,$f=new U,ep=new U,tp=new U,np=new U;function rp(e,t,n,r={},i={},a=0,o=1/0){t.boundingBox||t.computeBoundingBox(),Zf.set(t.boundingBox.min,t.boundingBox.max,n),Zf.needsUpdate=!0;let s=e.geometry,c=s.attributes.position,l=s.index,u=t.attributes.position,d=t.index,f=cf.getPrimitive(),p=cf.getPrimitive(),m=$f,h=ep,g=null,_=null;i&&(g=tp,_=np);let v=1/0,y=null,b=null;return Xf.copy(n).invert(),Qf.matrix.copy(Xf),e.shapecast({boundsTraverseOrder:e=>Zf.distanceToBox(e),intersectsBounds:(e,t,n)=>n<v&&n<o?(t&&(Qf.min.copy(e.min),Qf.max.copy(e.max),Qf.needsUpdate=!0),!0):!1,intersectsRange:(e,r)=>{if(t.boundsTree)return t.boundsTree.shapecast({boundsTraverseOrder:e=>Qf.distanceToBox(e),intersectsBounds:(e,t,n)=>n<v&&n<o,intersectsRange:(t,i)=>{for(let o=t,s=t+i;o<s;o++){Of(p,3*o,d,u),p.a.applyMatrix4(n),p.b.applyMatrix4(n),p.c.applyMatrix4(n),p.needsUpdate=!0;for(let t=e,n=e+r;t<n;t++){Of(f,3*t,l,c),f.needsUpdate=!0;let e=f.distanceToTriangle(p,m,g);if(e<v&&(h.copy(m),_&&_.copy(g),v=e,y=t,b=o),e<a)return!0}}}});{let i=Ud(t);for(let t=0,o=i;t<o;t++){Of(p,3*t,d,u),p.a.applyMatrix4(n),p.b.applyMatrix4(n),p.c.applyMatrix4(n),p.needsUpdate=!0;for(let n=e,i=e+r;n<i;n++){Of(f,3*n,l,c),f.needsUpdate=!0;let e=f.distanceToTriangle(p,m,g);if(e<v&&(h.copy(m),_&&_.copy(g),v=e,y=n,b=t),e<a)return!0}}}}}),cf.releasePrimitive(f),cf.releasePrimitive(p),v===1/0?null:(r.point?r.point.copy(h):r.point=h.clone(),r.distance=v,r.faceIndex=y,i&&(i.point?i.point.copy(_):i.point=_.clone(),i.point.applyMatrix4(Xf),h.applyMatrix4(Xf),i.distance=h.sub(i.point).length(),i.faceIndex=b),r)}function ip(e,t=null){t&&Array.isArray(t)&&(t=new Set(t));let n=e.geometry,r=n.index?n.index.array:null,i=n.attributes.position,a,o,s,c,l=0,u=e._roots;for(let e=0,t=u.length;e<t;e++)a=u[e],o=new Uint32Array(a),s=new Uint16Array(a),c=new Float32Array(a),d(0,l),l+=a.byteLength;function d(n,a,l=!1){let u=n*2;if(Yu(u,s)){let t=Xu(n,o),a=Zu(u,s),l=1/0,d=1/0,f=1/0,p=-1/0,m=-1/0,h=-1/0;for(let n=t,o=t+a;n<o;n++){let t=3*e.resolveTriangleIndex(n);for(let e=0;e<3;e++){let n=t+e;n=r?r[n]:n;let a=i.getX(n),o=i.getY(n),s=i.getZ(n);a<l&&(l=a),a>p&&(p=a),o<d&&(d=o),o>m&&(m=o),s<f&&(f=s),s>h&&(h=s)}}return c[n+0]!==l||c[n+1]!==d||c[n+2]!==f||c[n+3]!==p||c[n+4]!==m||c[n+5]!==h?(c[n+0]=l,c[n+1]=d,c[n+2]=f,c[n+3]=p,c[n+4]=m,c[n+5]=h,!0):!1}else{let e=Qu(n),r=$u(n,o),i=l,s=!1,u=!1;if(t){if(!i){let n=e/8+a/32,o=r/8+a/32;s=t.has(n),u=t.has(o),i=!s&&!u}}else s=!0,u=!0;let f=i||s,p=i||u,m=!1;f&&(m=d(e,a,i));let h=!1;p&&(h=d(r,a,i));let g=m||h;if(g)for(let t=0;t<3;t++){let i=e+t,a=r+t,o=c[i],s=c[i+3],l=c[a],u=c[a+3];c[n+t]=o<l?o:l,c[n+t+3]=s>u?s:u}return g}}}function ap(e,t,n,r,i,a,o){Q.setBuffer(e._roots[t]),op(0,e,n,r,i,a,o),Q.clearBuffer()}function op(e,t,n,r,i,a,o){let{float32Array:s,uint16Array:c,uint32Array:l}=Q,u=e*2;if(Yu(u,c))Pf(t,n,r,Xu(e,l),Zu(u,c),i,a,o);else{let c=Qu(e);Nf(c,s,r,a,o)&&op(c,t,n,r,i,a,o);let u=$u(e,l);Nf(u,s,r,a,o)&&op(u,t,n,r,i,a,o)}}var sp=[`x`,`y`,`z`];function cp(e,t,n,r,i,a){Q.setBuffer(e._roots[t]);let o=lp(0,e,n,r,i,a);return Q.clearBuffer(),o}function lp(e,t,n,r,i,a){let{float32Array:o,uint16Array:s,uint32Array:c}=Q,l=e*2;if(Yu(l,s))return Ff(t,n,r,Xu(e,c),Zu(l,s),i,a);{let s=ed(e,c),l=sp[s],u=r.direction[l]>=0,d,f;u?(d=Qu(e),f=$u(e,c)):(d=$u(e,c),f=Qu(e));let p=Nf(d,o,r,i,a)?lp(d,t,n,r,i,a):null;if(p){let e=p.point[l];if(u?e<=o[f+s]:e>=o[f+s+3])return p}let m=Nf(f,o,r,i,a)?lp(f,t,n,r,i,a):null;return p&&m?p.distance<=m.distance?p:m:p||m||null}}var up=new on,dp=new of,fp=new of,pp=new q,mp=new sf,hp=new sf;function gp(e,t,n,r){Q.setBuffer(e._roots[t]);let i=_p(0,e,n,r);return Q.clearBuffer(),i}function _p(e,t,n,r,i=null){let{float32Array:a,uint16Array:o,uint32Array:s}=Q,c=e*2;if(i===null&&(n.boundingBox||n.computeBoundingBox(),mp.set(n.boundingBox.min,n.boundingBox.max,r),i=mp),Yu(c,o)){let i=t.geometry,l=i.index,u=i.attributes.position,d=n.index,f=n.attributes.position,p=Xu(e,s),m=Zu(c,o);if(pp.copy(r).invert(),n.boundsTree)return Uu(td(e),a,hp),hp.matrix.copy(pp),hp.needsUpdate=!0,n.boundsTree.shapecast({intersectsBounds:e=>hp.intersectsBox(e),intersectsTriangle:e=>{e.a.applyMatrix4(r),e.b.applyMatrix4(r),e.c.applyMatrix4(r),e.needsUpdate=!0;for(let n=p,r=m+p;n<r;n++)if(Of(fp,3*t.resolveTriangleIndex(n),l,u),fp.needsUpdate=!0,e.intersectsTriangle(fp))return!0;return!1}});{let e=Ud(n);for(let n=p,r=m+p;n<r;n++){Of(dp,3*t.resolveTriangleIndex(n),l,u),dp.a.applyMatrix4(pp),dp.b.applyMatrix4(pp),dp.c.applyMatrix4(pp),dp.needsUpdate=!0;for(let t=0,n=e*3;t<n;t+=3)if(Of(fp,t,d,f),fp.needsUpdate=!0,dp.intersectsTriangle(fp))return!0}}}else{let o=Qu(e),c=$u(e,s);return Uu(td(o),a,up),!!(i.intersectsBox(up)&&_p(o,t,n,r,i)||(Uu(td(c),a,up),i.intersectsBox(up)&&_p(c,t,n,r,i)))}}var vp=new q,yp=new sf,bp=new sf,xp=new U,Sp=new U,Cp=new U,wp=new U;function Tp(e,t,n,r={},i={},a=0,o=1/0){t.boundingBox||t.computeBoundingBox(),yp.set(t.boundingBox.min,t.boundingBox.max,n),yp.needsUpdate=!0;let s=e.geometry,c=s.attributes.position,l=s.index,u=t.attributes.position,d=t.index,f=cf.getPrimitive(),p=cf.getPrimitive(),m=xp,h=Sp,g=null,_=null;i&&(g=Cp,_=wp);let v=1/0,y=null,b=null;return vp.copy(n).invert(),bp.matrix.copy(vp),e.shapecast({boundsTraverseOrder:e=>yp.distanceToBox(e),intersectsBounds:(e,t,n)=>n<v&&n<o?(t&&(bp.min.copy(e.min),bp.max.copy(e.max),bp.needsUpdate=!0),!0):!1,intersectsRange:(r,i)=>{if(t.boundsTree){let s=t.boundsTree;return s.shapecast({boundsTraverseOrder:e=>bp.distanceToBox(e),intersectsBounds:(e,t,n)=>n<v&&n<o,intersectsRange:(t,o)=>{for(let x=t,S=t+o;x<S;x++){Of(p,3*s.resolveTriangleIndex(x),d,u),p.a.applyMatrix4(n),p.b.applyMatrix4(n),p.c.applyMatrix4(n),p.needsUpdate=!0;for(let t=r,n=r+i;t<n;t++){Of(f,3*e.resolveTriangleIndex(t),l,c),f.needsUpdate=!0;let n=f.distanceToTriangle(p,m,g);if(n<v&&(h.copy(m),_&&_.copy(g),v=n,y=t,b=x),n<a)return!0}}}})}else{let o=Ud(t);for(let t=0,s=o;t<s;t++){Of(p,3*t,d,u),p.a.applyMatrix4(n),p.b.applyMatrix4(n),p.c.applyMatrix4(n),p.needsUpdate=!0;for(let n=r,o=r+i;n<o;n++){Of(f,3*e.resolveTriangleIndex(n),l,c),f.needsUpdate=!0;let r=f.distanceToTriangle(p,m,g);if(r<v&&(h.copy(m),_&&_.copy(g),v=r,y=n,b=t),r<a)return!0}}}}}),cf.releasePrimitive(f),cf.releasePrimitive(p),v===1/0?null:(r.point?r.point.copy(h):r.point=h.clone(),r.distance=v,r.faceIndex=y,i&&(i.point?i.point.copy(_):i.point=_.clone(),i.point.applyMatrix4(vp),h.applyMatrix4(vp),i.distance=h.sub(i.point).length(),i.faceIndex=b),r)}function Ep(e,t,n){return e===null?null:(e.point.applyMatrix4(t.matrixWorld),e.distance=e.point.distanceTo(n.ray.origin),e.object=t,e)}var Dp=new sf,Op=new Mn,kp=new U,Ap=new q,jp=new U,Mp=[`getX`,`getY`,`getZ`],Np=class e extends Xd{static serialize(e,t={}){t={cloneBuffers:!0,...t};let n=e.geometry,r=e._roots,i=e._indirectBuffer,a=n.getIndex(),o={version:1,roots:null,index:null,indirectBuffer:null};return t.cloneBuffers?(o.roots=r.map(e=>e.slice()),o.index=a?a.array.slice():null,o.indirectBuffer=i?i.slice():null):(o.roots=r,o.index=a?a.array:null,o.indirectBuffer=i),o}static deserialize(t,n,r={}){r={setIndex:!0,indirect:!!t.indirectBuffer,...r};let{index:i,roots:a,indirectBuffer:o}=t;t.version||(console.warn(`MeshBVH.deserialize: Serialization format has been changed and will be fixed up. It is recommended to regenerate any stored serialized data.`),c(a));let s=new e(n,{...r,[Vu]:!0});if(s._roots=a,s._indirectBuffer=o||null,r.setIndex){let e=n.getIndex();if(e===null){let e=new jr(t.index,1,!1);n.setIndex(e)}else e.array!==i&&(e.array.set(i),e.needsUpdate=!0)}return s;function c(e){for(let t=0;t<e.length;t++){let n=e[t],r=new Uint32Array(n),i=new Uint16Array(n);for(let e=0,t=n.byteLength/32;e<t;e++){let t=8*e;Yu(2*t,i)||(r[t+6]=r[t+6]/8-e)}}}}get primitiveStride(){return 3}get resolveTriangleIndex(){return this.resolvePrimitiveIndex}constructor(e,t={}){t.maxLeafTris&&(console.warn(`MeshBVH: "maxLeafTris" option has been deprecated. Use maxLeafSize, instead.`),t={...t,maxLeafSize:t.maxLeafTris}),super(e,t)}shiftTriangleOffsets(e){return super.shiftPrimitiveOffsets(e)}writePrimitiveBounds(e,t,n){let r=this.geometry,i=this._indirectBuffer,a=r.attributes.position,o=r.index?r.index.array:null,s=(i?i[e]:e)*3,c=s+0,l=s+1,u=s+2;o&&(c=o[c],l=o[l],u=o[u]);for(let e=0;e<3;e++){let r=a[Mp[e]](c),i=a[Mp[e]](l),o=a[Mp[e]](u),s=r;i<s&&(s=i),o<s&&(s=o);let d=r;i>d&&(d=i),o>d&&(d=o),t[n+e]=s,t[n+e+3]=d}return t}computePrimitiveBounds(e,t,n){let r=this.geometry,i=this._indirectBuffer,a=r.attributes.position,o=r.index?r.index.array:null,s=a.normalized;if(e<0||t+e-n.offset>n.length/6)throw Error(`MeshBVH: compute triangle bounds range is invalid.`);let c=a.array,l=a.offset||0,u=3;a.isInterleavedBufferAttribute&&(u=a.data.stride);let d=[`getX`,`getY`,`getZ`],f=n.offset;for(let r=e,p=e+t;r<p;r++){let e=(i?i[r]:r)*3,t=(r-f)*6,p=e+0,m=e+1,h=e+2;o&&(p=o[p],m=o[m],h=o[h]),s||(p=p*u+l,m=m*u+l,h=h*u+l);for(let e=0;e<3;e++){let r,i,o;s?(r=a[d[e]](p),i=a[d[e]](m),o=a[d[e]](h)):(r=c[p+e],i=c[m+e],o=c[h+e]);let l=r;i<l&&(l=i),o<l&&(l=o);let u=r;i>u&&(u=i),o>u&&(u=o);let f=(u-l)/2,g=e*2;n[t+g+0]=l+f,n[t+g+1]=f+(Math.abs(l)+f)*Bu}}return n}raycastObject3D(e,t,n=[]){let{material:r}=e;if(r===void 0)return;Ap.copy(e.matrixWorld).invert(),Op.copy(t.ray).applyMatrix4(Ap),jp.setFromMatrixScale(e.matrixWorld),kp.copy(Op.direction).multiply(jp);let i=kp.length(),a=t.near/i,o=t.far/i;if(t.firstHitOnly===!0){let i=this.raycastFirst(Op,r,a,o);i=Ep(i,e,t),i&&n.push(i)}else{let i=this.raycast(Op,r,a,o);for(let r=0,a=i.length;r<a;r++){let a=Ep(i[r],e,t);a&&n.push(a)}}return n}refit(e=null){return(this.indirect?ip:Mf)(this,e)}raycast(e,t=0,n=0,r=1/0){let i=this._roots,a=[],o=this.indirect?ap:Lf;for(let s=0,c=i.length;s<c;s++)o(this,s,t,e,a,n,r);return a}raycastFirst(e,t=0,n=0,r=1/0){let i=this._roots,a=null,o=this.indirect?cp:Bf;for(let s=0,c=i.length;s<c;s++){let i=o(this,s,t,e,n,r);i!=null&&(a==null||i.distance<a.distance)&&(a=i)}return a}intersectsGeometry(e,t){let n=!1,r=this._roots,i=this.indirect?gp:Jf;for(let a=0,o=r.length;a<o&&(n=i(this,a,e,t),!n);a++);return n}shapecast(e){let t=cf.getPrimitive(),n=super.shapecast({...e,intersectsPrimitive:e.intersectsTriangle,scratchPrimitive:t,iterate:this.indirect?If:jf});return cf.releasePrimitive(t),n}bvhcast(t,n,r){let{intersectsRanges:i,intersectsTriangles:a}=r,o=cf.getPrimitive(),s=this.geometry.index,c=this.geometry.attributes.position,l=this.indirect?e=>{Of(o,this.resolveTriangleIndex(e)*3,s,c)}:e=>{Of(o,e*3,s,c)},u=cf.getPrimitive(),d=t.geometry.index,f=t.geometry.attributes.position,p=t.indirect?e=>{Of(u,t.resolveTriangleIndex(e)*3,d,f)}:e=>{Of(u,e*3,d,f)};if(a){if(!(t instanceof e))throw Error(`MeshBVH: "intersectsTriangles" callback can only be used with another MeshBVH.`);let r=(e,t,r,i,s,c,d,f)=>{for(let m=r,h=r+i;m<h;m++){p(m),u.a.applyMatrix4(n),u.b.applyMatrix4(n),u.c.applyMatrix4(n),u.needsUpdate=!0;for(let n=e,r=e+t;n<r;n++)if(l(n),o.needsUpdate=!0,a(o,u,n,m,s,c,d,f))return!0}return!1};if(i){let e=i;i=function(t,n,i,a,o,s,c,l){return e(t,n,i,a,o,s,c,l)?!0:r(t,n,i,a,o,s,c,l)}}else i=r}return super.bvhcast(t,n,{intersectsRanges:i})}intersectsBox(e,t){return Dp.set(e.min,e.max,t),Dp.needsUpdate=!0,this.shapecast({intersectsBounds:e=>Dp.intersectsBox(e),intersectsTriangle:e=>Dp.intersectsTriangle(e)})}intersectsSphere(e){return this.shapecast({intersectsBounds:t=>e.intersectsBox(t),intersectsTriangle:t=>t.intersectsSphere(e)})}closestPointToGeometry(e,t,n={},r={},i=0,a=1/0){return(this.indirect?Tp:rp)(this,e,t,n,r,i,a)}closestPointToPoint(e,t={},n=0,r=1/0){return df(this,e,t,n,r)}},Pp=1e-6,Fp=Pp*.5,Ip=10**-Math.log10(Pp),Lp=Fp*Ip;function Rp(e){return~~(e*Ip+Lp)}function zp(e){return`${Rp(e.x)},${Rp(e.y)}`}function Bp(e){return`${Rp(e.x)},${Rp(e.y)},${Rp(e.z)}`}function Vp(e){return`${Rp(e.x)},${Rp(e.y)},${Rp(e.z)},${Rp(e.w)}`}function Hp(e,t,n){n.direction.subVectors(t,e).normalize();let r=e.dot(n.direction);return n.origin.copy(e).addScaledVector(n.direction,-r),n}function Up(){return typeof SharedArrayBuffer<`u`}function Wp(e){if(e.buffer instanceof SharedArrayBuffer)return e;let t=e.constructor,n=e.buffer,r=new SharedArrayBuffer(n.byteLength),i=new Uint8Array(n);return new Uint8Array(r).set(i,0),new t(r)}function Gp(e,t=ArrayBuffer){return e>65535?new Uint32Array(new t(4*e)):new Uint16Array(new t(2*e))}function Kp(e,t){if(!e.index){let n=e.attributes.position.count,r=Gp(n,t.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer);e.setIndex(new jr(r,1));for(let e=0;e<n;e++)r[e]=e}}function qp(e){return e.index?e.index.count:e.attributes.position.count}function Jp(e){return qp(e)/3}var Yp=1e-8,Xp=new U;function Zp(e){return~~(e/3)}function Qp(e){return e%3}function $p(e,t){return e.start-t.start}function em(e,t){return Xp.subVectors(t,e.origin).dot(e.direction)}function tm(e,t,n,r=Yp){e.sort($p),t.sort($p);for(let r=0;r<e.length;r++){let i=e[r];for(let s=0;s<t.length;s++){let c=t[s];if(!(c.start>i.end)){if(i.end<c.start||c.end<i.start)continue;if(i.start<=c.start&&i.end>=c.end)a(c.end,i.end)||e.splice(r+1,0,{start:c.end,end:i.end,index:i.index}),i.end=c.start,c.start=0,c.end=0;else if(i.start>=c.start&&i.end<=c.end)a(i.end,c.end)||t.splice(s+1,0,{start:i.end,end:c.end,index:c.index}),c.end=i.start,i.start=0,i.end=0;else if(i.start<=c.start&&i.end<=c.end){let e=i.end;i.end=c.start,c.start=e}else if(i.start>=c.start&&i.end>=c.end){let e=c.end;c.end=i.start,i.start=e}else throw Error()}if(n.has(i.index)||n.set(i.index,[]),n.has(c.index)||n.set(c.index,[]),n.get(i.index).push(c.index),n.get(c.index).push(i.index),o(c)&&(t.splice(s,1),s--),o(i)){e.splice(r,1),r--;break}}}i(e),i(t);function i(e){for(let t=0;t<e.length;t++)o(e[t])&&(e.splice(t,1),t--)}function a(e,t){return Math.abs(t-e)<r}function o(e){return Math.abs(e.end-e.start)<r}}var nm=1e-5,rm=1e-4,im=class{constructor(){this._rays=[]}addRay(e){this._rays.push(e)}findClosestRay(e){let t=this._rays,n=e.clone();n.direction.multiplyScalar(-1);let r=1/0,i=null;for(let s=0,c=t.length;s<c;s++){let c=t[s];if(a(c,e)&&a(c,n))continue;let l=o(c,e),u=o(c,n),d=Math.min(l,u);d<r&&(r=d,i=c)}return i;function a(e,t){let n=e.origin.distanceTo(t.origin)>nm;return e.direction.angleTo(t.direction)>rm||n}function o(e,t){let n=e.origin.distanceTo(t.origin),r=e.direction.angleTo(t.direction);return n/nm+r/rm}}},am=new U,om=new U,sm=new Mn;function cm(e,t,n){let r=e.attributes,i=e.index,a=r.position,o=new Map,s=new Map,c=Array.from(t),l=new im;for(let e=0,t=c.length;e<t;e++){let t=c[e],n=Zp(t),r=Qp(t),o=3*n+r,u=3*n+(r+1)%3;i&&(o=i.getX(o),u=i.getX(u)),am.fromBufferAttribute(a,o),om.fromBufferAttribute(a,u),Hp(am,om,sm);let d,f=l.findClosestRay(sm);f===null&&(f=sm.clone(),l.addRay(f)),s.has(f)||s.set(f,{forward:[],reverse:[],ray:f}),d=s.get(f);let p=em(f,am),m=em(f,om);p>m&&([p,m]=[m,p]),sm.direction.dot(f.direction)<0?d.reverse.push({start:p,end:m,index:t}):d.forward.push({start:p,end:m,index:t})}return s.forEach(({forward:e,reverse:t},r)=>{tm(e,t,o,n),e.length===0&&t.length===0&&s.delete(r)}),{disjointConnectivityMap:o,fragmentMap:s}}var lm=new H,um=new U,dm=new K,fm=[``,``,``],pm=class{constructor(e=null){this.data=null,this.disjointConnections=null,this.unmatchedDisjointEdges=null,this.unmatchedEdges=-1,this.matchedEdges=-1,this.useDrawRange=!0,this.useAllAttributes=!1,this.matchDisjointEdges=!1,this.degenerateEpsilon=1e-8,e&&this.updateFrom(e)}getSiblingTriangleIndex(e,t){let n=this.data[e*3+t];return n===-1?-1:~~(n/3)}getSiblingEdgeIndex(e,t){let n=this.data[e*3+t];return n===-1?-1:n%3}getDisjointSiblingTriangleIndices(e,t){let n=e*3+t,r=this.disjointConnections.get(n);return r?r.map(e=>~~(e/3)):[]}getDisjointSiblingEdgeIndices(e,t){let n=e*3+t,r=this.disjointConnections.get(n);return r?r.map(e=>e%3):[]}isFullyConnected(){return this.unmatchedEdges===0}updateFrom(e){let{useAllAttributes:t,useDrawRange:n,matchDisjointEdges:r,degenerateEpsilon:i}=this,a=t?v:_,o=new Map,{attributes:s}=e,c=t?Object.keys(s):null,l=e.index,u=s.position,d=Jp(e),f=d,p=0;n&&(p=e.drawRange.start,e.drawRange.count!==1/0&&(d=~~(e.drawRange.count/3)));let m=this.data;(!m||m.length<3*f)&&(m=new Int32Array(3*f)),m.fill(-1);let h=0,g=new Set;for(let e=p,t=d*3+p;e<t;e+=3){let t=e;for(let e=0;e<3;e++){let n=t+e;l&&(n=l.getX(n)),fm[e]=a(n)}for(let e=0;e<3;e++){let n=(e+1)%3,r=fm[e],i=fm[n],a=`${i}_${r}`;if(o.has(a)){let n=t+e,r=o.get(a);m[n]=r,m[r]=n,o.delete(a),h+=2,g.delete(r)}else{let n=`${r}_${i}`,a=t+e;o.set(n,a),g.add(a)}}}if(r){let{fragmentMap:t,disjointConnectivityMap:n}=cm(e,g,i);g.clear(),t.forEach(({forward:e,reverse:t})=>{e.forEach(({index:e})=>g.add(e)),t.forEach(({index:e})=>g.add(e))}),this.unmatchedDisjointEdges=t,this.disjointConnections=n,h=d*3-g.size}this.matchedEdges=h,this.unmatchedEdges=g.size,this.data=m;function _(e){return um.fromBufferAttribute(u,e),Bp(um)}function v(e){let t=``;for(let n=0,r=c.length;n<r;n++){let r=s[c[n]],i;switch(r.itemSize){case 1:i=Rp(r.getX(e));break;case 2:i=zp(lm.fromBufferAttribute(r,e));break;case 3:i=Bp(um.fromBufferAttribute(r,e));break;case 4:i=Vp(dm.fromBufferAttribute(r,e));break}t!==``&&(t+=`|`),t+=i}return t}}},mm=class extends $r{constructor(...e){super(...e),this.isBrush=!0,this._previousMatrix=new q,this._previousMatrix.elements.fill(0)}markUpdated(){this._previousMatrix.copy(this.matrix)}isDirty(){let{matrix:e,_previousMatrix:t}=this,n=e.elements,r=t.elements;for(let e=0;e<16;e++)if(n[e]!==r[e])return!0;return!1}prepareGeometry(){let e=this.geometry,t=e.attributes,n=Up();if(n)for(let e in t){let n=t[e];if(n.isInterleavedBufferAttribute)throw Error(`Brush: InterleavedBufferAttributes are not supported.`);n.array=Wp(n.array)}if(e.boundsTree||=(Kp(e,{useSharedArrayBuffer:n}),new Np(e,{maxLeafTris:3,indirect:!0,useSharedArrayBuffer:n})),e.halfEdges||=new pm(e),!e.groupIndices){let t=Jp(e),n=new Uint16Array(t),r=e.groups;for(let e=0,t=r.length;e<t;e++){let{start:t,count:i}=r[e];for(let r=t/3,a=(t+i)/3;r<a;r++)n[r]=e}e.groupIndices=n}}disposeCacheData(){let{geometry:e}=this;e.halfEdges=null,e.boundsTree=null,e.groupIndices=null}},hm=1e-14,gm=new U,_m=new U,vm=new U;function ym(e,t=hm){gm.subVectors(e.b,e.a),_m.subVectors(e.c,e.a),vm.subVectors(e.b,e.c);let n=gm.angleTo(_m),r=gm.angleTo(vm),i=Math.PI-n-r;return Math.abs(n)<t||Math.abs(r)<t||Math.abs(i)<t||e.a.distanceToSquared(e.b)<t||e.a.distanceToSquared(e.c)<t||e.b.distanceToSquared(e.c)<t}var bm=1e-10,xm=1e-10,Sm=1e-10,Cm=new _s,wm=new _s,Tm=new U,Em=new U,Dm=new U,Om=new ki,km=new of,Am=class{constructor(){this._pool=[],this._index=0}getTriangle(){return this._index>=this._pool.length&&this._pool.push(new yr),this._pool[this._index++]}clear(){this._index=0}reset(){this._pool.length=0,this._index=0}},jm=class{constructor(){this.trianglePool=new Am,this.triangles=[],this.normal=new U,this.coplanarTriangleUsed=!1}initialize(e){this.reset();let{triangles:t,trianglePool:n,normal:r}=this;if(Array.isArray(e))for(let i=0,a=e.length;i<a;i++){let a=e[i];if(i===0)a.getNormal(r);else if(Math.abs(1-a.getNormal(Tm).dot(r))>bm)throw Error(`Triangle Splitter: Cannot initialize with triangles that have different normals.`);let o=n.getTriangle();o.copy(a),t.push(o)}else{e.getNormal(r);let i=n.getTriangle();i.copy(e),t.push(i)}}splitByTriangle(e){let{normal:t,triangles:n}=this;if(e.getNormal(Em).normalize(),Math.abs(1-Math.abs(Em.dot(t)))<Sm){this.coplanarTriangleUsed=!0;for(let e=0,t=n.length;e<t;e++){let t=n[e];t.coplanarCount=0}let t=[e.a,e.b,e.c];for(let n=0;n<3;n++){let r=(n+1)%3,i=t[n],a=t[r];Tm.subVectors(a,i).normalize(),Dm.crossVectors(Em,Tm),Om.setFromNormalAndCoplanarPoint(Dm,i),this.splitByPlane(Om,e)}}else e.getPlane(Om),this.splitByPlane(Om,e)}splitByPlane(e,t){let{triangles:n,trianglePool:r}=this;km.copy(t),km.needsUpdate=!0;for(let t=0,i=n.length;t<i;t++){let a=n[t];if(!km.intersectsTriangle(a,Cm,!0))continue;let{a:o,b:s,c}=a,l=0,u=-1,d=!1,f=[],p=[],m=[o,s,c];for(let t=0;t<3;t++){let n=(t+1)%3;Cm.start.copy(m[t]),Cm.end.copy(m[n]);let r=e.distanceToPoint(Cm.start),i=e.distanceToPoint(Cm.end);if(Math.abs(r)<xm&&Math.abs(i)<xm){d=!0;break}if(r>0?f.push(t):p.push(t),Math.abs(r)<xm)continue;let a=!!e.intersectLine(Cm,Tm);!a&&Math.abs(i)<xm&&(Tm.copy(Cm.end),a=!0),a&&!(Tm.distanceTo(Cm.start)<bm)&&(Tm.distanceTo(Cm.end)<bm&&(u=t),l===0?wm.start.copy(Tm):wm.end.copy(Tm),l++)}if(!d&&l===2&&wm.distance()>xm)if(u!==-1){u=(u+1)%3;let e=0;e===u&&(e=(e+1)%3);let o=e+1;o===u&&(o=(o+1)%3);let s=r.getTriangle();s.a.copy(m[o]),s.b.copy(wm.end),s.c.copy(wm.start),ym(s)||n.push(s),a.a.copy(m[e]),a.b.copy(wm.start),a.c.copy(wm.end),ym(a)&&(n.splice(t,1),t--,i--)}else{let e=f.length>=2?p[0]:f[0];if(e===0){let e=wm.start;wm.start=wm.end,wm.end=e}let o=(e+1)%3,s=(e+2)%3,c=r.getTriangle(),l=r.getTriangle();m[o].distanceToSquared(wm.start)<m[s].distanceToSquared(wm.end)?(c.a.copy(m[o]),c.b.copy(wm.start),c.c.copy(wm.end),l.a.copy(m[o]),l.b.copy(m[s]),l.c.copy(wm.start)):(c.a.copy(m[s]),c.b.copy(wm.start),c.c.copy(wm.end),l.a.copy(m[o]),l.b.copy(m[s]),l.c.copy(wm.end)),a.a.copy(m[e]),a.b.copy(wm.end),a.c.copy(wm.start),ym(c)||n.push(c),ym(l)||n.push(l),ym(a)&&(n.splice(t,1),t--,i--)}else l===3&&console.warn(`TriangleClipper: Coplanar clip not handled`)}}reset(){this.triangles.length=0,this.trianglePool.clear(),this.coplanarTriangleUsed=!1}};function Mm(e){return e=~~e,e+4-e%4}var Nm=class{constructor(e,t=500){this.expansionFactor=1.5,this.type=e,this.length=0,this.array=null,this.setSize(t)}setType(e){if(this.length!==0)throw Error(`TypeBackedArray: Cannot change the type while there is used data in the buffer.`);let t=this.array.buffer;this.array=new e(t),this.type=e}setSize(e){if(this.array&&e===this.array.length)return;let t=this.type,n=new t(new(Up()?SharedArrayBuffer:ArrayBuffer)(Mm(e*t.BYTES_PER_ELEMENT)));this.array&&n.set(this.array,0),this.array=n}expand(){let{array:e,expansionFactor:t}=this;this.setSize(e.length*t)}push(...e){let{array:t,length:n}=this;n+e.length>t.length&&(this.expand(),t=this.array);for(let r=0,i=e.length;r<i;r++)t[n+r]=e[r];this.length+=e.length}clear(){this.length=0}},Pm=class{constructor(){this.groupAttributes=[{}],this.groupCount=0}getType(e){return this.groupAttributes[0][e].type}getItemSize(e){return this.groupAttributes[0][e].itemSize}getNormalized(e){return this.groupAttributes[0][e].normalized}getCount(e){if(this.groupCount<=e)return 0;let t=this.getGroupAttrArray(`position`,e);return t.length/t.itemSize}getTotalLength(e){let{groupCount:t,groupAttributes:n}=this,r=0;for(let i=0;i<t;i++){let t=n[i];r+=t[e].length}return r}getGroupAttrSet(e=0){let{groupAttributes:t}=this;if(t[e])return this.groupCount=Math.max(this.groupCount,e+1),t[e];let n=t[0];for(this.groupCount=Math.max(this.groupCount,e+1);e>=t.length;){let e={};t.push(e);for(let t in n){let r=n[t],i=new Nm(r.type);i.itemSize=r.itemSize,i.normalized=r.normalized,e[t]=i}}return t[e]}getGroupAttrArray(e,t=0){let{groupAttributes:n}=this;if(!n[0][e])throw Error(`TypedAttributeData: Attribute with "${e}" has not been initialized`);return this.getGroupAttrSet(t)[e]}initializeArray(e,t,n,r){let{groupAttributes:i}=this,a=i[0][e];if(a){if(a.type!==t)for(let a=0,o=i.length;a<o;a++){let o=i[a][e];o.setType(t),o.itemSize=n,o.normalized=r}}else for(let a=0,o=i.length;a<o;a++){let o=new Nm(t);o.itemSize=n,o.normalized=r,i[a][e]=o}}clear(){this.groupCount=0;let{groupAttributes:e}=this;e.forEach(e=>{for(let t in e)e[t].clear()})}delete(e){this.groupAttributes.forEach(t=>{delete t[e]})}reset(){this.groupAttributes=[],this.groupCount=0}},Fm=class{constructor(){this.intersectionSet={},this.ids=[]}add(e,t){let{intersectionSet:n,ids:r}=this;n[e]||(n[e]=[],r.push(e)),n[e].push(t)}},Im=new Mn,Lm=new q,Rm=new yr,zm=new U,Bm=new K,Vm=new K,Hm=new K,Um=new K,Wm=new K,Gm=new K,Km=new _s,qm=new U,Jm=1e-8,Ym=1e-15,Xm=1e-14,Zm=null;function Qm(e){Zm=e}function $m(e,t){e.getMidpoint(Im.origin),e.getNormal(Im.direction);let n=t.raycastFirst(Im,2);return n&&Im.direction.dot(n.face.normal)>0?-1:1}function eh(e,t){function n(){return Math.random()-.5}e.getNormal(qm),Im.direction.copy(qm),e.getMidpoint(Im.origin);let r=0,i=1/0;for(let e=0;e<3;e++){Im.direction.x+=n()*Jm,Im.direction.y+=n()*Jm,Im.direction.z+=n()*Jm,Im.direction.multiplyScalar(-1);let a=t.raycastFirst(Im,2);if(a&&Im.direction.dot(a.face.normal)>0&&r++,a!==null&&(i=Math.min(i,a.distance)),i<=Ym)return a.face.normal.dot(qm)>0?2:-2;if(r/3>.5||(e-r+1)/3>.5)break}return r/3>.5?-1:1}function th(e,t){let n=new Fm,r=new Fm;return Lm.copy(e.matrixWorld).invert().multiply(t.matrixWorld),e.geometry.boundsTree.bvhcast(t.geometry.boundsTree,Lm,{intersectsTriangles(i,a,o,s){if(!ym(i)&&!ym(a)){let c=i.intersectsTriangle(a,Km,!0);if(!c){let e=i.plane,t=a.plane,n=e.normal,r=t.normal;n.dot(r)===1&&Math.abs(e.constant-t.constant)<Xm&&(c=!0)}if(c){let c=e.geometry.boundsTree.resolveTriangleIndex(o),l=t.geometry.boundsTree.resolveTriangleIndex(s);n.add(c,l),r.add(l,c),Zm&&(Zm.addEdge(Km),Zm.addIntersectingTriangles(o,i,s,a))}}return!1}}),{aIntersections:n,bIntersections:r}}function nh(e,t,n,r,i,a,o=!1){let s=n.attributes,c=n.index,l=e*3,u=c.getX(l+0),d=c.getX(l+1),f=c.getX(l+2);for(let e in a){let n=s[e],c=a[e];if(!(e in s))throw Error(`CSG Operations: Attribute ${e} not available on geometry.`);let l=n.itemSize;e===`position`?(Rm.a.fromBufferAttribute(n,u).applyMatrix4(r),Rm.b.fromBufferAttribute(n,d).applyMatrix4(r),Rm.c.fromBufferAttribute(n,f).applyMatrix4(r),ah(Rm.a,Rm.b,Rm.c,t,3,c,o)):e===`normal`?(Rm.a.fromBufferAttribute(n,u).applyNormalMatrix(i),Rm.b.fromBufferAttribute(n,d).applyNormalMatrix(i),Rm.c.fromBufferAttribute(n,f).applyNormalMatrix(i),o&&(Rm.a.multiplyScalar(-1),Rm.b.multiplyScalar(-1),Rm.c.multiplyScalar(-1)),ah(Rm.a,Rm.b,Rm.c,t,3,c,o,!0)):(Bm.fromBufferAttribute(n,u),Vm.fromBufferAttribute(n,d),Hm.fromBufferAttribute(n,f),ah(Bm,Vm,Hm,t,l,c,o))}}function rh(e,t,n,r,i,a,o,s=!1){oh(e,r,i,a,o,s),oh(s?n:t,r,i,a,o,s),oh(s?t:n,r,i,a,o,s)}function ih(e,t,n=!1){switch(e){case 0:if(t===1||t===2&&!n)return 1;break;case 1:if(n){if(t===-1)return 0}else if(t===1||t===-2)return 1;break;case 2:if(n){if(t===1||t===-2)return 1}else if(t===-1)return 0;break;case 4:if(t===-1)return 0;if(t===1)return 1;break;case 3:if(t===-1||t===2&&!n)return 1;break;case 5:if(!n&&(t===1||t===-2))return 1;break;case 6:if(!n&&(t===-1||t===2))return 1;break;default:throw Error(`Unrecognized CSG operation enum "${e}".`)}return 2}function ah(e,t,n,r,i,a,o=!1,s=!1){let c=e=>{a.push(e.x),i>1&&a.push(e.y),i>2&&a.push(e.z),i>3&&a.push(e.w)};Um.set(0,0,0,0).addScaledVector(e,r.a.x).addScaledVector(t,r.a.y).addScaledVector(n,r.a.z),Wm.set(0,0,0,0).addScaledVector(e,r.b.x).addScaledVector(t,r.b.y).addScaledVector(n,r.b.z),Gm.set(0,0,0,0).addScaledVector(e,r.c.x).addScaledVector(t,r.c.y).addScaledVector(n,r.c.z),s&&(Um.normalize(),Wm.normalize(),Gm.normalize()),c(Um),o?(c(Gm),c(Wm)):(c(Wm),c(Gm))}function oh(e,t,n,r,i,a=!1){for(let o in i){let s=t[o],c=i[o];if(!(o in t))throw Error(`CSG Operations: Attribute ${o} no available on geometry.`);let l=s.itemSize;o===`position`?(zm.fromBufferAttribute(s,e).applyMatrix4(n),c.push(zm.x,zm.y,zm.z)):o===`normal`?(zm.fromBufferAttribute(s,e).applyNormalMatrix(r),a&&zm.multiplyScalar(-1),c.push(zm.x,zm.y,zm.z)):(c.push(s.getX(e)),l>1&&c.push(s.getY(e)),l>2&&c.push(s.getZ(e)),l>3&&c.push(s.getW(e)))}}var sh=class{constructor(e){this.triangle=new yr().copy(e),this.intersects={}}addTriangle(e,t){this.intersects[e]=new yr().copy(t)}getIntersectArray(){let e=[],{intersects:t}=this;for(let n in t)e.push(t[n]);return e}},ch=class{constructor(){this.data={}}addTriangleIntersection(e,t,n,r){let{data:i}=this;i[e]||(i[e]=new sh(t)),i[e].addTriangle(n,r)}getTrianglesAsArray(e=null){let{data:t}=this,n=[];if(e!==null)e in t&&n.push(t[e].triangle);else for(let e in t)n.push(t[e].triangle);return n}getTriangleIndices(){return Object.keys(this.data).map(e=>parseInt(e))}getIntersectionIndices(e){let{data:t}=this;return t[e]?Object.keys(t[e].intersects).map(e=>parseInt(e)):[]}getIntersectionsAsArray(e=null,t=null){let{data:n}=this,r=new Set,i=[],a=e=>{if(n[e])if(t!==null)n[e].intersects[t]&&i.push(n[e].intersects[t]);else{let t=n[e].intersects;for(let e in t)r.has(e)||(r.add(e),i.push(t[e]))}};if(e!==null)a(e);else for(let e in n)a(e);return i}reset(){this.data={}}},lh=class{constructor(){this.enabled=!1,this.triangleIntersectsA=new ch,this.triangleIntersectsB=new ch,this.intersectionEdges=[]}addIntersectingTriangles(e,t,n,r){let{triangleIntersectsA:i,triangleIntersectsB:a}=this;i.addTriangleIntersection(e,t,n,r),a.addTriangleIntersection(n,r,e,t)}addEdge(e){this.intersectionEdges.push(e.clone())}reset(){this.triangleIntersectsA.reset(),this.triangleIntersectsB.reset(),this.intersectionEdges=[]}init(){this.enabled&&(this.reset(),Qm(this))}complete(){this.enabled&&Qm(null)}},uh=new q,dh=new W,fh=new yr,ph=new yr,mh=new yr,hh=new yr,gh=[],_h=[];function vh(e){for(let t of e)return t}function yh(e,t,n,r,i,a={}){let{useGroups:o=!0}=a,{aIntersections:s,bIntersections:c}=th(e,t),l=[],u;return u=o?0:-1,bh(e,t,s,n,!1,r,i,u),xh(e,t,s,n,!1,i,u),n.findIndex(e=>e!==6&&e!==5)!==-1&&(u=o?e.geometry.groups.length||1:-1,bh(t,e,c,n,!0,r,i,u),xh(t,e,c,n,!0,i,u)),gh.length=0,_h.length=0,{groups:l,materials:null}}function bh(e,t,n,r,i,a,o,s=0){let c=e.matrixWorld.determinant()<0;uh.copy(t.matrixWorld).invert().multiply(e.matrixWorld),dh.getNormalMatrix(e.matrixWorld).multiplyScalar(c?-1:1);let l=e.geometry.groupIndices,u=e.geometry.index,d=e.geometry.attributes.position,f=t.geometry.boundsTree,p=t.geometry.index,m=t.geometry.attributes.position,h=n.ids,g=n.intersectionSet;for(let t=0,n=h.length;t<n;t++){let n=h[t],_=s===-1?0:l[n]+s,v=3*n,y=u.getX(v+0),b=u.getX(v+1),x=u.getX(v+2);fh.a.fromBufferAttribute(d,y).applyMatrix4(uh),fh.b.fromBufferAttribute(d,b).applyMatrix4(uh),fh.c.fromBufferAttribute(d,x).applyMatrix4(uh),a.reset(),a.initialize(fh);let S=g[n];for(let e=0,t=S.length;e<t;e++){let t=3*S[e],n=p.getX(t+0),r=p.getX(t+1),i=p.getX(t+2);ph.a.fromBufferAttribute(m,n),ph.b.fromBufferAttribute(m,r),ph.c.fromBufferAttribute(m,i),a.splitByTriangle(ph)}let C=a.triangles;for(let t=0,s=C.length;t<s;t++){let s=C[t],l=a.coplanarTriangleUsed?eh(s,f):$m(s,f);gh.length=0,_h.length=0;for(let e=0,t=r.length;e<t;e++){let t=ih(r[e],l,i);t!==2&&(_h.push(t),gh.push(o[e].getGroupAttrSet(_)))}if(gh.length!==0){fh.getBarycoord(s.a,hh.a),fh.getBarycoord(s.b,hh.b),fh.getBarycoord(s.c,hh.c);for(let t=0,r=gh.length;t<r;t++){let r=gh[t],i=_h[t]===0;nh(n,hh,e.geometry,e.matrixWorld,dh,r,c!==i)}}}}return h.length}function xh(e,t,n,r,i,a,o=0){let s=e.matrixWorld.determinant()<0;uh.copy(t.matrixWorld).invert().multiply(e.matrixWorld),dh.getNormalMatrix(e.matrixWorld).multiplyScalar(s?-1:1);let c=t.geometry.boundsTree,l=e.geometry.groupIndices,u=e.geometry.index,d=e.geometry.attributes,f=d.position,p=[],m=e.geometry.halfEdges,h=new Set,g=Jp(e.geometry);for(let e=0,t=g;e<t;e++)e in n.intersectionSet||h.add(e);for(;h.size>0;){let t=vh(h);h.delete(t),p.push(t);let n=3*t,g=u.getX(n+0),_=u.getX(n+1),v=u.getX(n+2);mh.a.fromBufferAttribute(f,g).applyMatrix4(uh),mh.b.fromBufferAttribute(f,_).applyMatrix4(uh),mh.c.fromBufferAttribute(f,v).applyMatrix4(uh);let y=$m(mh,c);_h.length=0,gh.length=0;for(let e=0,t=r.length;e<t;e++){let t=ih(r[e],y,i);t!==2&&(_h.push(t),gh.push(a[e]))}for(;p.length>0;){let t=p.pop();for(let e=0;e<3;e++){let n=m.getSiblingTriangleIndex(t,e);n!==-1&&h.has(n)&&(p.push(n),h.delete(n))}if(gh.length!==0){let n=3*t,r=u.getX(n+0),i=u.getX(n+1),a=u.getX(n+2),c=o===-1?0:l[t]+o;if(mh.a.fromBufferAttribute(f,r),mh.b.fromBufferAttribute(f,i),mh.c.fromBufferAttribute(f,a),!ym(mh))for(let t=0,n=gh.length;t<n;t++){let n=_h[t],o=gh[t].getGroupAttrSet(c),l=n===0;rh(r,i,a,d,e.matrixWorld,dh,o,l!==s)}}}}}function Sh(e){for(let t=0;t<e.length-1;t++){let n=e[t],r=e[t+1];if(n.materialIndex===r.materialIndex){let i=n.start,a=r.start+r.count;r.start=i,r.count=a-i,e.splice(t,1),t--}}}function Ch(e,t,n,r){n.clear();let i=e.attributes;for(let e=0,t=r.length;e<t;e++){let t=r[e],a=i[t];n.initializeArray(t,a.array.constructor,a.itemSize,a.normalized)}for(let e in n.attributes)r.includes(e)||n.delete(e);for(let e in t.attributes)r.includes(e)||(t.deleteAttribute(e),t.dispose())}function wh(e,t,n){let r=!1,i=-1,a=e.attributes,o=t.groupAttributes[0];for(let s in o){let o=t.getTotalLength(s),c=t.getType(s),l=t.getItemSize(s),u=t.getNormalized(s),d=a[s];(!d||d.array.length<o)&&(d=new jr(new c(o),l,u),e.setAttribute(s,d),r=!0);let f=0;for(let e=0,r=Math.min(n.length,t.groupCount);e<r;e++){let r=n[e].index,{array:i,type:a,length:o}=t.groupAttributes[r][s],c=new a(i.buffer,0,o);d.array.set(c,f),f+=c.length}d.needsUpdate=!0,i=o/d.itemSize}if(e.index){let t=e.index.array;if(t.length<i)e.index=null,r=!0;else for(let e=0,n=t.length;e<n;e++)t[e]=e}let s=0;e.clearGroups();for(let r=0,i=Math.min(n.length,t.groupCount);r<i;r++){let{index:i,materialIndex:a}=n[r],o=t.getCount(i);o!==0&&(e.addGroup(s,o,a),s+=o)}e.setDrawRange(0,i),e.boundsTree=null,r&&e.dispose()}function Th(e,t){let n=t;return Array.isArray(t)||(n=[],e.forEach(e=>{n[e.materialIndex]=t})),n}var Eh=class{constructor(){this.triangleSplitter=new jm,this.attributeData=[],this.attributes=[`position`,`uv`,`normal`],this.useGroups=!0,this.consolidateGroups=!0,this.debug=new lh}getGroupRanges(e){return!this.useGroups||e.groups.length===0?[{start:0,count:1/0,materialIndex:0}]:e.groups.map(e=>({...e}))}evaluate(e,t,n,r=new mm){let i=!0;if(Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r],i=!1),r.length!==n.length)throw Error(`Evaluator: operations and target array passed as different sizes.`);e.prepareGeometry(),t.prepareGeometry();let{triangleSplitter:a,attributeData:o,attributes:s,useGroups:c,consolidateGroups:l,debug:u}=this;for(;o.length<r.length;)o.push(new Pm);r.forEach((t,n)=>{Ch(e.geometry,t.geometry,o[n],s)}),u.init(),yh(e,t,n,a,o,{useGroups:c}),u.complete();let d=this.getGroupRanges(e.geometry),f=Th(d,e.material),p=this.getGroupRanges(t.geometry),m=Th(p,t.material);p.forEach(e=>e.materialIndex+=f.length);let h=[...d,...p].map((e,t)=>({...e,index:t}));if(c){let e=[...f,...m];l&&(h=h.map(t=>{let n=e[t.materialIndex];return t.materialIndex=e.indexOf(n),t}).sort((e,t)=>e.materialIndex-t.materialIndex));let t=[];for(let n=0,r=e.length;n<r;n++){let r=!1;for(let e=0,i=h.length;e<i;e++){let i=h[e];i.materialIndex===n&&(r=!0,i.materialIndex=t.length)}r&&t.push(e[n])}r.forEach(e=>{e.material=t})}else h=[{start:0,count:1/0,index:0,materialIndex:0}],r.forEach(e=>{e.material=f[0]});return r.forEach((e,t)=>{let n=e.geometry;wh(n,o[t],h),l&&Sh(n.groups)}),i?r:r[0]}evaluateHierarchy(e,t=new mm){e.updateMatrixWorld(!0);let n=(e,t)=>{let r=e.children;for(let e=0,i=r.length;e<i;e++){let i=r[e];i.isOperationGroup?n(i,t):t(i)}},r=e=>{let t=e.children,i=!1;for(let e=0,n=t.length;e<n;e++){let n=t[e];i=r(n)||i}let a=e.isDirty();if(a&&e.markUpdated(),i&&!e.isOperationGroup){let t;return n(e,n=>{t=t?this.evaluate(t,n,n.operation):this.evaluate(e,n,n.operation)}),e._cachedGeometry=t.geometry,e._cachedMaterials=t.material,!0}else return i||a};return r(e),t.geometry=e._cachedGeometry,t.material=e._cachedMaterials,t}reset(){this.triangleSplitter.reset()}},Dh=class{scopes=[];constructor(){this.pushScope()}pushScope(){this.scopes.push(new Map)}popScope(){this.scopes.length>1&&this.scopes.pop()}set(e,t){this.scopes[this.scopes.length-1].set(e,t)}get(e){for(let t=this.scopes.length-1;t>=0;t--)if(this.scopes[t].has(e))return this.scopes[t].get(e)}has(e){return this.get(e)!==void 0}},Oh={round:e=>Math.round($(e)),floor:e=>Math.floor($(e)),ceil:e=>Math.ceil($(e)),abs:e=>Math.abs($(e)),sign:e=>Math.sign($(e)),sqrt:e=>Math.sqrt($(e)),pow:(e,t)=>$(e)**+$(t),min:(...e)=>Math.min(...e.map($)),max:(...e)=>Math.max(...e.map($)),sin:e=>Math.sin($(e)),cos:e=>Math.cos($(e)),tan:e=>Math.tan($(e)),asin:e=>Math.asin($(e)),acos:e=>Math.acos($(e)),atan:e=>Math.atan($(e)),atan2:(e,t)=>Math.atan2($(e),$(t)),dot:(e,t)=>{let n=kh(e),r=kh(t),i=0;for(let e=0;e<Math.min(n.length,r.length);e++)i+=$(n[e])*$(r[e]);return i},cross:(e,t)=>{let n=kh(e),r=kh(t);if(n.length<3||r.length<3)throw Error(`cross product requires 3D vectors`);let i=$(n[0]),a=$(n[1]),o=$(n[2]),s=$(r[0]),c=$(r[1]),l=$(r[2]);return[a*l-o*c,o*s-i*l,i*c-a*s]},length:e=>{let t=kh(e),n=0;for(let e of t){let t=$(e);n+=t*t}return Math.sqrt(n)},normalize:e=>{let t=kh(e),n=Oh.length(e);return n===0?t:t.map(e=>$(e)/n)},sum:e=>kh(e).reduce((e,t)=>e+$(t),0),join:(...e)=>{let t=e.length>0&&typeof e[e.length-1]==`string`?e.pop():``;return e.map(String).join(t)},trim:e=>String(e).trim(),rand:()=>Math.random()};function $(e){if(typeof e==`number`)return e;if(typeof e==`boolean`)return+!!e;if(typeof e==`string`){let t=parseFloat(e);if(isNaN(t))throw Error(`Cannot convert "${e}" to number`);return t}if(Array.isArray(e)&&e.length>0)return $(e[0]);throw Error(`Cannot convert ${typeof e} to number`)}function kh(e){return Array.isArray(e)?e:[e]}function Ah(e){return typeof e==`boolean`?e:typeof e==`number`?e!==0:typeof e==`string`||Array.isArray(e)?e.length>0:!1}var jh=class{symbols;constructor(e){this.symbols=e||new Dh}getSymbols(){return this.symbols}evaluate(e){if(typeof e==`number`||typeof e==`string`||Array.isArray(e))return e;switch(e.type){case`number`:return e.value;case`identifier`:{if(e.name===`rnd`)return Math.random();let t=this.symbols.get(e.name);if(t===void 0)throw Error(`Undefined variable: ${e.name}`);return t}case`binary`:{let t=this.evaluate(e.left),n=this.evaluate(e.right);switch(e.operator){case`+`:if(Array.isArray(t)&&Array.isArray(n)){let e=[...t];for(let t=0;t<e.length&&t<n.length;t++)e[t]=$(e[t])+$(n[t]);return e}return $(t)+$(n);case`-`:if(Array.isArray(t)&&Array.isArray(n)){let e=[...t];for(let t=0;t<e.length&&t<n.length;t++)e[t]=$(e[t])-$(n[t]);return e}return $(t)-$(n);case`*`:if(Array.isArray(t)&&Array.isArray(n)){let e=Math.min(t.length,n.length),r=[];for(let i=0;i<e;i++)r.push($(t[i])*$(n[i]));return r}return Array.isArray(t)?t.map(e=>$(e)*$(n)):Array.isArray(n)?n.map(e=>$(t)*$(e)):$(t)*$(n);case`/`:if(Array.isArray(t)&&Array.isArray(n)){let e=Math.min(t.length,n.length),r=[];for(let i=0;i<e;i++)r.push($(t[i])/$(n[i]));return r}return Array.isArray(t)?t.map(e=>$(e)/$(n)):$(t)/$(n);case`%`:return $(t)%$(n);case`=`:if(Array.isArray(t)&&Array.isArray(n)){if(t.length!==n.length)return!1;for(let e=0;e<t.length;e++)if($(t[e])!==$(n[e]))return!1;return!0}return t===n;case`<>`:if(Array.isArray(t)&&Array.isArray(n)){if(t.length!==n.length)return!0;for(let e=0;e<t.length;e++)if($(t[e])!==$(n[e]))return!0;return!1}return t!==n;case`<`:return $(t)<$(n);case`<=`:return $(t)<=$(n);case`>`:return $(t)>$(n);case`>=`:return $(t)>=$(n);case`and`:return Ah(t)&&Ah(n);case`or`:return Ah(t)||Ah(n);default:throw Error(`Unknown binary operator: ${e.operator}`)}}case`unary`:{let t=this.evaluate(e.operand);switch(e.operator){case`-`:return Array.isArray(t)?t.map(e=>-$(e)):-$(t);case`not`:return!Ah(t);default:throw Error(`Unknown unary operator: ${e.operator}`)}}case`call`:{let t=Oh[e.name.toLowerCase()];if(!t)throw Error(`Unknown function: ${e.name}`);return t(...e.args.map(e=>this.evaluate(e)))}case`tuple`:return e.elements.map(e=>this.evaluate(e));case`member`:case`subscript`:throw Error(`Member access and subscripting not yet implemented: ${e.type}`);default:throw Error(`Unknown expression type: ${e.type}`)}}evaluateToNumber(e){return $(this.evaluate(e))}evaluateToBoolean(e){return Ah(this.evaluate(e))}evaluateToVector3(e){if(Array.isArray(e)&&typeof e[0]==`number`)return e;let t=this.evaluate(e);if(Array.isArray(t))return[t.length>0?$(t[0]):0,t.length>1?$(t[1]):0,t.length>2?$(t[2]):0];let n=$(t);return[n,n,n]}evaluateToColor(e){if(Array.isArray(e)&&typeof e[0]==`number`)return e;let t=this.evaluate(e);if(Array.isArray(t))return[t.length>0?$(t[0]):0,t.length>1?$(t[1]):0,t.length>2?$(t[2]):0];let n=$(t);return[n,n,n]}},Mh=class{options;evaluator;symbols;detailLevel=32;transformStack=[];constructor(e={}){this.options=e,this.symbols=new Dh,this.evaluator=new jh(this.symbols),this.pushTransform()}convert(e){let t=new xi;for(let n of e){let e=this.convertNode(n);e&&t.add(e)}return t}convertNode(e){switch(e.type){case`shape`:return this.convertShape(e);case`csg`:return this.convertCSG(e);case`block`:return this.convertBlock(e);case`for`:return this.convertForLoop(e);case`if`:return this.convertIf(e);case`switch`:return this.convertSwitch(e);case`define`:return this.handleDefine(e),null;case`extrude`:return this.convertExtrude(e);case`loft`:return this.convertLoft(e);case`lathe`:return this.convertLathe(e);case`fill`:return this.convertFill(e);case`hull`:return this.convertHull(e);case`group`:return this.convertBlock(e);case`detail`:return this.handleDetail(e),null;case`color`:return this.handleColorCommand(e),null;case`rotate`:return this.handleRotateCommand(e),null;case`orientation`:return this.handleOrientationCommand(e),null;case`translate`:return this.handleTranslateCommand(e),null;case`scale`:return this.handleScaleCommand(e),null;case`customShape`:return this.convertCustomShape(e);default:return console.warn(`Unknown node type: ${e.type}`),null}}convertBlock(e){let t=new xi;this.symbols.pushScope(),this.pushTransform();for(let n of e.children){let e=this.convertNode(n);e&&t.add(e)}return this.popTransform(),this.symbols.popScope(),t}convertShape(e){let t=new $r(this.createGeometry(e),this.createMaterial(e));return this.applyExplicitTransforms(t,e.properties),this.applyCurrentTransform(t),t}createGeometry(e){let t=[1,1,1];switch(e.properties.size&&(t=this.evaluateVector3(e.properties.size)),t[1]===0&&t[2]===0&&t[0]!==0&&(t=[t[0],t[0],t[0]]),e.primitive){case`cube`:return new ni(t[0],t[1],t[2]);case`sphere`:return new bo(t[0],this.detailLevel,this.detailLevel);case`cylinder`:return new Zi(e.properties.radiusTop?this.evaluateNumber(e.properties.radiusTop):t[0],e.properties.radiusBottom?this.evaluateNumber(e.properties.radiusBottom):t[0],e.properties.height?this.evaluateNumber(e.properties.height):t[1],this.detailLevel);case`cone`:{let n=t[0];return new Qi(n,e.properties.height?this.evaluateNumber(e.properties.height):t[1],this.detailLevel)}case`torus`:return new xo(e.properties.outerRadius?this.evaluateNumber(e.properties.outerRadius):t[0],e.properties.innerRadius?this.evaluateNumber(e.properties.innerRadius):.4,Math.max(3,Math.floor(this.detailLevel/2)),this.detailLevel);case`circle`:return new Xi(t[0]||1,this.detailLevel);case`square`:{let e=t[0]||1;return new _o(e,e)}case`polygon`:return new Xi(t[0]||1,6);default:return console.warn(`Unknown primitive: ${e.primitive}`),new ni(1,1,1)}}createMaterial(e){let t=e.properties.color?this.evaluateColor(e.properties.color):[.8,.8,.8],n=new J(t[0],t[1],t[2]),r=e.properties.opacity?this.evaluateNumber(e.properties.opacity):1;return new Co({color:n,opacity:r,transparent:r<1,wireframe:this.options.wireframe??!1})}convertCSG(e){if(e.children.length===0)return new xi;let t=this.currentTransform().matrix.clone();try{let n=new Eh;this.symbols.pushScope(),this.pushTransform();let r=this.currentTransform();r.matrix.identity(),r.color=void 0;let i=[];for(let t of e.children){let e=this.convertNode(t);if(e instanceof $r){let t=e.clone();t.updateMatrixWorld(!0),i.push(t)}else e instanceof xi&&e.traverse(e=>{if(e instanceof $r){let t=e.clone();t.updateMatrixWorld(!0),i.push(t)}})}if(this.popTransform(),this.symbols.popScope(),i.length===0)return new xi;let a=i.map(e=>{let t=new mm(e.geometry,e.material);return t.position.copy(e.position),t.rotation.copy(e.rotation),t.scale.copy(e.scale),t.updateMatrixWorld(!0),t}),o=a[0];for(let t=1;t<a.length;t++){let r=a[t];switch(e.operation){case`union`:o=n.evaluate(o,r,0);break;case`difference`:o=n.evaluate(o,r,1);break;case`intersection`:o=n.evaluate(o,r,3);break;case`xor`:{let e=n.evaluate(o.clone(),r.clone(),1),t=n.evaluate(r.clone(),o.clone(),1);o=n.evaluate(e,t,0);break}case`stencil`:o=n.evaluate(o,r,3);break}}return o.material||=a[0].material,o.applyMatrix4(t),o.updateMatrixWorld(!0),o}catch{let n=new xi;this.symbols.pushScope();for(let t of e.children){let e=this.convertNode(t);e&&n.add(e)}return this.symbols.popScope(),n.applyMatrix4(t),n.updateMatrixWorld(!0),n}}convertForLoop(e){let t=new xi;if(this.symbols.pushScope(),this.pushTransform(),e.iterableValues){let n=this.evaluator.evaluate(e.iterableValues),r=Array.isArray(n)?n:[n];for(let n=0;n<r.length;n++){this.symbols.set(e.variable,r[n]);for(let n of e.body){let e=this.convertNode(n);e&&t.add(e)}}}else{let n=this.evaluateNumber(e.from),r=this.evaluateNumber(e.to),i=e.step?this.evaluateNumber(e.step):1,a=[];if(i>0)for(let e=n;e<=r;e+=i)a.push(e);else if(i<0)for(let e=n;e>=r;e+=i)a.push(e);for(let n=0;n<a.length;n++){let r=a[n];this.symbols.set(e.variable,r);for(let n of e.body){let e=this.convertNode(n);e&&t.add(e)}}}return this.popTransform(),this.symbols.popScope(),t}convertIf(e){let t=new xi,n=this.evaluator.evaluateToBoolean(e.condition);if(this.symbols.pushScope(),this.pushTransform(),n)for(let n of e.thenBody){let e=this.convertNode(n);e&&t.add(e)}else if(e.elseBody)for(let n of e.elseBody){let e=this.convertNode(n);e&&t.add(e)}return this.popTransform(),this.symbols.popScope(),t}convertSwitch(e){let t=new xi,n=this.evaluator.evaluate(e.value);this.symbols.pushScope(),this.pushTransform();let r=!1;for(let i of e.cases){for(let e of i.values){let a=this.evaluator.evaluate(e);if(this.valuesEqual(n,a)){for(let e of i.body){let n=this.convertNode(e);n&&t.add(n)}r=!0;break}}if(r)break}if(!r&&e.defaultCase)for(let n of e.defaultCase){let e=this.convertNode(n);e&&t.add(e)}return this.popTransform(),this.symbols.popScope(),t}handleDefine(e){if(e.value!==void 0){let t=this.evaluator.evaluate(e.value);this.symbols.set(e.name,t)}else (e.body!==void 0||e.options!==void 0)&&this.symbols.set(e.name,e)}convertCustomShape(e){let t=this.symbols.get(e.name);if(!t||typeof t!=`object`||!(`type`in t))return console.warn(`Custom shape '${e.name}' not found`),null;let n=t;if(!n.body)return console.warn(`Custom shape '${e.name}' has no body`),null;if(this.symbols.pushScope(),this.pushTransform(),n.options)for(let e of n.options){let t=this.evaluator.evaluate(e.defaultValue);this.symbols.set(e.name,t)}for(let[t,n]of Object.entries(e.properties)){let e=this.evaluator.evaluate(n);this.symbols.set(t,e)}let r=new xi;for(let e of n.body){let t=this.convertNode(e);t&&r.add(t)}return this.popTransform(),this.symbols.popScope(),r}pushTransform(){let e=this.currentTransform();this.transformStack.push({matrix:e.matrix.clone(),color:e.color?.clone()})}popTransform(){this.transformStack.length>1&&this.transformStack.pop()}currentTransform(){return this.transformStack.length===0?{matrix:new q,color:void 0}:this.transformStack[this.transformStack.length-1]}applyCurrentTransform(e){let t=this.currentTransform();e.applyMatrix4(t.matrix)}applyExplicitTransforms(e,t){if(t.position){let n=this.evaluateVector3(t.position);e.position.set(...n)}if(t.rotation){let n=this.evaluateVector3(t.rotation);e.rotation.set(...n)}if(t.orientation){let n=this.evaluateVector3(t.orientation);e.rotation.set(...n)}}handleDetail(e){this.detailLevel=this.evaluateNumber(e.value),this.symbols.set(`detail`,this.detailLevel)}handleColorCommand(e){let t=this.evaluateVector3OrColor(e.value);this.currentTransform().color=new J(t[0],t[1],t[2])}handleRotateCommand(e){let t=this.evaluateVector3(e.value),n=this.currentTransform(),r=new q,i=new Hn(t[0]*Math.PI*2,t[1]*Math.PI*2,t[2]*Math.PI*2,`XYZ`);r.makeRotationFromEuler(i),n.matrix.multiply(r)}handleOrientationCommand(e){let t=this.evaluateVector3(e.value),n=this.currentTransform(),r=new U,i=new U;n.matrix.decompose(r,new Rt,i);let a=new Hn(t[0]*Math.PI*2,t[1]*Math.PI*2,t[2]*Math.PI*2,`XYZ`);n.matrix.compose(r,new Rt().setFromEuler(a),i)}handleTranslateCommand(e){let t=this.currentTransform(),[n,r,i]=this.evaluateTranslateVector(e.value),a=new q().makeTranslation(n,r,i);t.matrix.multiply(a)}handleScaleCommand(e){let t=this.evaluateVector3(e.value),n=this.currentTransform(),r=new q().makeScale(t[0],t[1],t[2]);n.matrix.multiply(r)}convertExtrude(e){let t=new $r(new po(e.path?this.buildPath(e.path):new Oa([new H(0,0)]),{depth:(e.properties.size?this.evaluateVector3(e.properties.size):[1,1,1])[2]||1,bevelEnabled:!1,curveSegments:Math.max(1,Math.floor(this.detailLevel/4))}),this.createMaterial(e));return this.applyExplicitTransforms(t,e.properties),this.applyCurrentTransform(t),t}buildPath(e){let t=new Oa,n=0,r=0,i=0,a=e=>{switch(e.type){case`point`:{let a=this.evaluateNumber(e.x),o=this.evaluateNumber(e.y),s=Math.cos(i),c=Math.sin(i),l=a*s-o*c,u=a*c+o*s;n+=l,r+=u,t.curves.length===0?t.moveTo(n,r):t.lineTo(n,r);break}case`curve`:{let a=this.evaluateNumber(e.x),o=this.evaluateNumber(e.y),s=Math.cos(i),c=Math.sin(i),l=a*s-o*c,u=a*c+o*s;if(n+=l,r+=u,e.controlX!==void 0&&e.controlY!==void 0){let i=this.evaluateNumber(e.controlX),a=this.evaluateNumber(e.controlY),o=i*s-a*c,l=i*c+a*s;t.quadraticCurveTo(n+o,r+l,n,r)}else t.lineTo(n,r);break}case`rotate`:{let t=this.evaluateNumber(e.angle);i+=t*Math.PI*2;break}case`translate`:{let t=this.evaluateNumber(e.x),i=this.evaluateNumber(e.y);n+=t,r+=i;break}case`for`:{this.symbols.pushScope();let t=this.evaluateNumber(e.from),n=this.evaluateNumber(e.to),r=e.step?this.evaluateNumber(e.step):1,i=[];if(r>0)for(let e=t;e<=n;e+=r)i.push(e);else if(r<0)for(let e=t;e>=n;e+=r)i.push(e);for(let t of i){this.symbols.set(e.variable,t);for(let t of e.commands)a(t)}this.symbols.popScope();break}}};for(let t of e.commands)a(t);return t}convertLathe(e){this.symbols.pushScope(),this.pushTransform();let t=null;for(let n of e.children)if(n.type===`path`){t=n;break}if(!t)return console.warn(`Lathe requires a path child`),this.popTransform(),this.symbols.popScope(),new xi;let n=[],r=0,i=0,a=0,o=e=>{switch(e.type){case`point`:case`curve`:{let t=this.evaluateNumber(e.x),o=this.evaluateNumber(e.y),s=Math.cos(a),c=Math.sin(a),l=t*s-o*c,u=t*c+o*s;r+=l,i+=u,n.push(new H(r,i));break}case`rotate`:{let t=this.evaluateNumber(e.angle);a+=t*Math.PI*2;break}case`translate`:{let t=this.evaluateNumber(e.x),n=this.evaluateNumber(e.y);r+=t,i+=n;break}case`for`:{this.symbols.pushScope();let t=this.evaluateNumber(e.from),n=this.evaluateNumber(e.to),r=e.step?this.evaluateNumber(e.step):1,i=[];if(r>0)for(let e=t;e<=n;e+=r)i.push(e);else if(r<0)for(let e=t;e>=n;e+=r)i.push(e);for(let t of i){this.symbols.set(e.variable,t);for(let t of e.commands)o(t)}this.symbols.popScope();break}}};for(let e of t.commands)o(e);if(n.length<2)return console.warn(`Lathe path must have at least 2 points`),this.popTransform(),this.symbols.popScope(),new xi;let s=new $r(new go(n,this.detailLevel),this.createMaterial(e));return this.applyExplicitTransforms(s,e.properties),this.applyCurrentTransform(s),this.popTransform(),this.symbols.popScope(),s}convertGroupBuilder(e){this.symbols.pushScope(),this.pushTransform();let t=new xi;for(let n of e.children){let e=this.convertNode(n);e&&t.add(e)}return this.applyExplicitTransforms(t,e.properties),this.applyCurrentTransform(t),this.popTransform(),this.symbols.popScope(),t}convertLoft(e){return this.convertGroupBuilder(e)}convertFill(e){this.symbols.pushScope(),this.pushTransform();let t=null;for(let n of e.children)if(n.type===`path`){t=n;break}if(!t)return console.warn(`Fill requires a path child`),this.popTransform(),this.symbols.popScope(),new xi;let n=new $r(new vo(this.buildPath(t)),this.createMaterial(e));return this.applyExplicitTransforms(n,e.properties),this.applyCurrentTransform(n),this.popTransform(),this.symbols.popScope(),n}convertHull(e){return this.convertGroupBuilder(e)}evaluateNumber(e){return e===void 0?0:typeof e==`number`?e:this.evaluator.evaluateToNumber(e)}evaluateVector3(e){return e===void 0?[0,0,0]:Array.isArray(e)&&typeof e[0]==`number`?e:this.evaluator.evaluateToVector3(e)}evaluateTranslateVector(e){let t=this.evaluator.evaluate(e);return typeof t==`number`?[t,0,0]:Array.isArray(t)?[t.length>0&&typeof t[0]==`number`?t[0]:0,t.length>1&&typeof t[1]==`number`?t[1]:0,t.length>2&&typeof t[2]==`number`?t[2]:0]:[0,0,0]}evaluateColor(e){return e===void 0?[.8,.8,.8]:Array.isArray(e)&&typeof e[0]==`number`?e:this.evaluator.evaluateToColor(e)}evaluateVector3OrColor(e){let t=this.evaluator.evaluate(e),n=e=>typeof e==`number`?e:typeof e==`boolean`?+!!e:typeof e==`string`?parseFloat(e)||0:Array.isArray(e)&&e.length>0?n(e[0]):0;if(typeof t==`number`)return[t,t,t];if(Array.isArray(t)){if(t.length===1)return[n(t[0]),n(t[0]),n(t[0])];if(t.length===2)return[n(t[0]),n(t[1]),0];if(t.length>=3)return[n(t[0]),n(t[1]),n(t[2])]}return[.8,.8,.8]}valuesEqual(e,t){if(typeof e!=typeof t)return!1;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!this.valuesEqual(e[n],t[n]))return!1;return!0}return e===t}};function Nh(e,t={}){return new Mh(t).convert(e)}Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return ys}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return ki}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return Rt}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return ls}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return Lt}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return wi}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return Lu}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return Jo}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return Mn}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return Yo}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return vs}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return Nh}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return hi}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return u}});
4175
+ }`,Ou=class{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(e,t){if(this.texture===null){let n=new Yi(e.texture);(e.depthNear!==t.depthNear||e.depthFar!==t.depthFar)&&(this.depthNear=e.depthNear,this.depthFar=e.depthFar),this.texture=n}}getMesh(e){if(this.texture!==null&&this.mesh===null){let t=e.cameras[0].viewport,n=new ui({vertexShader:Eu,fragmentShader:Du,uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new $r(new _o(20,20),n)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}},ku=class extends dt{constructor(e,t){super();let n=this,r=null,i=1,a=null,o=`local-floor`,s=1,c=null,l=null,u=null,d=null,f=null,p=null,m=typeof XRWebGLBinding<`u`,h=new Ou,g={},_=t.getContextAttributes(),v=null,y=null,b=[],x=[],C=new H,w=null,T=new hi;T.viewport=new K;let E=new hi;E.viewport=new K;let O=[T,E],k=new Xo,ee=null,te=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(e){let t=b[e];return t===void 0&&(t=new Ci,b[e]=t),t.getTargetRaySpace()},this.getControllerGrip=function(e){let t=b[e];return t===void 0&&(t=new Ci,b[e]=t),t.getGripSpace()},this.getHand=function(e){let t=b[e];return t===void 0&&(t=new Ci,b[e]=t),t.getHandSpace()};function A(e){let t=x.indexOf(e.inputSource);if(t===-1)return;let n=b[t];n!==void 0&&(n.update(e.inputSource,e.frame,c||a),n.dispatchEvent({type:e.type,data:e.inputSource}))}function j(){r.removeEventListener(`select`,A),r.removeEventListener(`selectstart`,A),r.removeEventListener(`selectend`,A),r.removeEventListener(`squeeze`,A),r.removeEventListener(`squeezestart`,A),r.removeEventListener(`squeezeend`,A),r.removeEventListener(`end`,j),r.removeEventListener(`inputsourceschange`,M);for(let e=0;e<b.length;e++){let t=x[e];t!==null&&(x[e]=null,b[e].disconnect(t))}ee=null,te=null,h.reset();for(let e in g)delete g[e];e.setRenderTarget(v),f=null,d=null,u=null,r=null,y=null,de.stop(),n.isPresenting=!1,e.setPixelRatio(w),e.setSize(C.width,C.height,!1),n.dispatchEvent({type:`sessionend`})}this.setFramebufferScaleFactor=function(e){i=e,n.isPresenting===!0&&z(`WebXRManager: Cannot change framebuffer scale while presenting.`)},this.setReferenceSpaceType=function(e){o=e,n.isPresenting===!0&&z(`WebXRManager: Cannot change reference space type while presenting.`)},this.getReferenceSpace=function(){return c||a},this.setReferenceSpace=function(e){c=e},this.getBaseLayer=function(){return d===null?f:d},this.getBinding=function(){return u===null&&m&&(u=new XRWebGLBinding(r,t)),u},this.getFrame=function(){return p},this.getSession=function(){return r},this.setSession=async function(l){if(r=l,r!==null){if(v=e.getRenderTarget(),r.addEventListener(`select`,A),r.addEventListener(`selectstart`,A),r.addEventListener(`selectend`,A),r.addEventListener(`squeeze`,A),r.addEventListener(`squeezestart`,A),r.addEventListener(`squeezeend`,A),r.addEventListener(`end`,j),r.addEventListener(`inputsourceschange`,M),_.xrCompatible!==!0&&await t.makeXRCompatible(),w=e.getPixelRatio(),e.getSize(C),m&&`createProjectionLayer`in XRWebGLBinding.prototype){let n=null,a=null,o=null;_.depth&&(o=_.stencil?t.DEPTH24_STENCIL8:t.DEPTH_COMPONENT24,n=_.stencil?ae:ie,a=_.stencil?ne:D);let s={colorFormat:t.RGBA8,depthFormat:o,scaleFactor:i};u=this.getBinding(),d=u.createProjectionLayer(s),r.updateRenderState({layers:[d]}),e.setPixelRatio(1),e.setSize(d.textureWidth,d.textureHeight,!1),y=new nn(d.textureWidth,d.textureHeight,{format:re,type:S,depthTexture:new qi(d.textureWidth,d.textureHeight,a,void 0,void 0,void 0,void 0,void 0,void 0,n),stencilBuffer:_.stencil,colorSpace:e.outputColorSpace,samples:_.antialias?4:0,resolveDepthBuffer:d.ignoreDepthValues===!1,resolveStencilBuffer:d.ignoreDepthValues===!1})}else{let n={antialias:_.antialias,alpha:!0,depth:_.depth,stencil:_.stencil,framebufferScaleFactor:i};f=new XRWebGLLayer(r,t,n),r.updateRenderState({baseLayer:f}),e.setPixelRatio(1),e.setSize(f.framebufferWidth,f.framebufferHeight,!1),y=new nn(f.framebufferWidth,f.framebufferHeight,{format:re,type:S,colorSpace:e.outputColorSpace,stencilBuffer:_.stencil,resolveDepthBuffer:f.ignoreDepthValues===!1,resolveStencilBuffer:f.ignoreDepthValues===!1})}y.isXRRenderTarget=!0,this.setFoveation(s),c=null,a=await r.requestReferenceSpace(o),de.setContext(r),de.start(),n.isPresenting=!0,n.dispatchEvent({type:`sessionstart`})}},this.getEnvironmentBlendMode=function(){if(r!==null)return r.environmentBlendMode},this.getDepthTexture=function(){return h.getDepthTexture()};function M(e){for(let t=0;t<e.removed.length;t++){let n=e.removed[t],r=x.indexOf(n);r>=0&&(x[r]=null,b[r].disconnect(n))}for(let t=0;t<e.added.length;t++){let n=e.added[t],r=x.indexOf(n);if(r===-1){for(let e=0;e<b.length;e++)if(e>=x.length){x.push(n),r=e;break}else if(x[e]===null){x[e]=n,r=e;break}if(r===-1)break}let i=b[r];i&&i.connect(n)}}let N=new U,oe=new U;function se(e,t,n){N.setFromMatrixPosition(t.matrixWorld),oe.setFromMatrixPosition(n.matrixWorld);let r=N.distanceTo(oe),i=t.projectionMatrix.elements,a=n.projectionMatrix.elements,o=i[14]/(i[10]-1),s=i[14]/(i[10]+1),c=(i[9]+1)/i[5],l=(i[9]-1)/i[5],u=(i[8]-1)/i[0],d=(a[8]+1)/a[0],f=o*u,p=o*d,m=r/(-u+d),h=m*-u;if(t.matrixWorld.decompose(e.position,e.quaternion,e.scale),e.translateX(h),e.translateZ(m),e.matrixWorld.compose(e.position,e.quaternion,e.scale),e.matrixWorldInverse.copy(e.matrixWorld).invert(),i[10]===-1)e.projectionMatrix.copy(t.projectionMatrix),e.projectionMatrixInverse.copy(t.projectionMatrixInverse);else{let t=o+m,n=s+m,i=f-h,a=p+(r-h),u=c*s/n*t,d=l*s/n*t;e.projectionMatrix.makePerspective(i,a,u,d,t,n),e.projectionMatrixInverse.copy(e.projectionMatrix).invert()}}function ce(e,t){t===null?e.matrixWorld.copy(e.matrix):e.matrixWorld.multiplyMatrices(t.matrixWorld,e.matrix),e.matrixWorldInverse.copy(e.matrixWorld).invert()}this.updateCamera=function(e){if(r===null)return;let t=e.near,n=e.far;h.texture!==null&&(h.depthNear>0&&(t=h.depthNear),h.depthFar>0&&(n=h.depthFar)),k.near=E.near=T.near=t,k.far=E.far=T.far=n,(ee!==k.near||te!==k.far)&&(r.updateRenderState({depthNear:k.near,depthFar:k.far}),ee=k.near,te=k.far),k.layers.mask=e.layers.mask|6,T.layers.mask=k.layers.mask&3,E.layers.mask=k.layers.mask&5;let i=e.parent,a=k.cameras;ce(k,i);for(let e=0;e<a.length;e++)ce(a[e],i);a.length===2?se(k,T,E):k.projectionMatrix.copy(T.projectionMatrix),le(e,k,i)};function le(e,t,n){n===null?e.matrix.copy(t.matrixWorld):(e.matrix.copy(n.matrixWorld),e.matrix.invert(),e.matrix.multiply(t.matrixWorld)),e.matrix.decompose(e.position,e.quaternion,e.scale),e.updateMatrixWorld(!0),e.projectionMatrix.copy(t.projectionMatrix),e.projectionMatrixInverse.copy(t.projectionMatrixInverse),e.isPerspectiveCamera&&(e.fov=ht*2*Math.atan(1/e.projectionMatrix.elements[5]),e.zoom=1)}this.getCamera=function(){return k},this.getFoveation=function(){if(!(d===null&&f===null))return s},this.setFoveation=function(e){s=e,d!==null&&(d.fixedFoveation=e),f!==null&&f.fixedFoveation!==void 0&&(f.fixedFoveation=e)},this.hasDepthSensing=function(){return h.texture!==null},this.getDepthSensingMesh=function(){return h.getMesh(k)},this.getCameraTexture=function(e){return g[e]};let P=null;function ue(t,i){if(l=i.getViewerPose(c||a),p=i,l!==null){let t=l.views;f!==null&&(e.setRenderTargetFramebuffer(y,f.framebuffer),e.setRenderTarget(y));let i=!1;t.length!==k.cameras.length&&(k.cameras.length=0,i=!0);for(let n=0;n<t.length;n++){let r=t[n],a=null;if(f!==null)a=f.getViewport(r);else{let t=u.getViewSubImage(d,r);a=t.viewport,n===0&&(e.setRenderTargetTextures(y,t.colorTexture,t.depthStencilTexture),e.setRenderTarget(y))}let o=O[n];o===void 0&&(o=new hi,o.layers.enable(n),o.viewport=new K,O[n]=o),o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.quaternion,o.scale),o.projectionMatrix.fromArray(r.projectionMatrix),o.projectionMatrixInverse.copy(o.projectionMatrix).invert(),o.viewport.set(a.x,a.y,a.width,a.height),n===0&&(k.matrix.copy(o.matrix),k.matrix.decompose(k.position,k.quaternion,k.scale)),i===!0&&k.cameras.push(o)}let a=r.enabledFeatures;if(a&&a.includes(`depth-sensing`)&&r.depthUsage==`gpu-optimized`&&m){u=n.getBinding();let e=u.getDepthInformation(t[0]);e&&e.isValid&&e.texture&&h.init(e,r.renderState)}if(a&&a.includes(`camera-access`)&&m){e.state.unbindTexture(),u=n.getBinding();for(let e=0;e<t.length;e++){let n=t[e].camera;if(n){let e=g[n];e||(e=new Yi,g[n]=e);let t=u.getCameraImage(n);e.sourceTexture=t}}}}for(let e=0;e<b.length;e++){let t=x[e],n=b[e];t!==null&&n!==void 0&&n.update(t,i,c||a)}P&&P(t,i),i.detectedPlanes&&n.dispatchEvent({type:`planesdetected`,data:i}),p=null}let de=new Ss;de.setAnimationLoop(ue),this.setAnimationLoop=function(e){P=e},this.dispose=function(){}}},Au=new Hn,ju=new q;function Mu(e,t){function n(e,t){e.matrixAutoUpdate===!0&&e.updateMatrix(),t.value.copy(e.matrix)}function r(t,n){n.color.getRGB(t.fogColor.value,oi(e)),n.isFog?(t.fogNear.value=n.near,t.fogFar.value=n.far):n.isFogExp2&&(t.fogDensity.value=n.density)}function i(e,t,n,r,i){t.isMeshBasicMaterial||t.isMeshLambertMaterial?a(e,t):t.isMeshToonMaterial?(a(e,t),d(e,t)):t.isMeshPhongMaterial?(a(e,t),u(e,t)):t.isMeshStandardMaterial?(a(e,t),f(e,t),t.isMeshPhysicalMaterial&&p(e,t,i)):t.isMeshMatcapMaterial?(a(e,t),m(e,t)):t.isMeshDepthMaterial?a(e,t):t.isMeshDistanceMaterial?(a(e,t),h(e,t)):t.isMeshNormalMaterial?a(e,t):t.isLineBasicMaterial?(o(e,t),t.isLineDashedMaterial&&s(e,t)):t.isPointsMaterial?c(e,t,n,r):t.isSpriteMaterial?l(e,t):t.isShadowMaterial?(e.color.value.copy(t.color),e.opacity.value=t.opacity):t.isShaderMaterial&&(t.uniformsNeedUpdate=!1)}function a(e,r){e.opacity.value=r.opacity,r.color&&e.diffuse.value.copy(r.color),r.emissive&&e.emissive.value.copy(r.emissive).multiplyScalar(r.emissiveIntensity),r.map&&(e.map.value=r.map,n(r.map,e.mapTransform)),r.alphaMap&&(e.alphaMap.value=r.alphaMap,n(r.alphaMap,e.alphaMapTransform)),r.bumpMap&&(e.bumpMap.value=r.bumpMap,n(r.bumpMap,e.bumpMapTransform),e.bumpScale.value=r.bumpScale,r.side===1&&(e.bumpScale.value*=-1)),r.normalMap&&(e.normalMap.value=r.normalMap,n(r.normalMap,e.normalMapTransform),e.normalScale.value.copy(r.normalScale),r.side===1&&e.normalScale.value.negate()),r.displacementMap&&(e.displacementMap.value=r.displacementMap,n(r.displacementMap,e.displacementMapTransform),e.displacementScale.value=r.displacementScale,e.displacementBias.value=r.displacementBias),r.emissiveMap&&(e.emissiveMap.value=r.emissiveMap,n(r.emissiveMap,e.emissiveMapTransform)),r.specularMap&&(e.specularMap.value=r.specularMap,n(r.specularMap,e.specularMapTransform)),r.alphaTest>0&&(e.alphaTest.value=r.alphaTest);let i=t.get(r),a=i.envMap,o=i.envMapRotation;a&&(e.envMap.value=a,Au.copy(o),Au.x*=-1,Au.y*=-1,Au.z*=-1,a.isCubeTexture&&a.isRenderTargetTexture===!1&&(Au.y*=-1,Au.z*=-1),e.envMapRotation.value.setFromMatrix4(ju.makeRotationFromEuler(Au)),e.flipEnvMap.value=a.isCubeTexture&&a.isRenderTargetTexture===!1?-1:1,e.reflectivity.value=r.reflectivity,e.ior.value=r.ior,e.refractionRatio.value=r.refractionRatio),r.lightMap&&(e.lightMap.value=r.lightMap,e.lightMapIntensity.value=r.lightMapIntensity,n(r.lightMap,e.lightMapTransform)),r.aoMap&&(e.aoMap.value=r.aoMap,e.aoMapIntensity.value=r.aoMapIntensity,n(r.aoMap,e.aoMapTransform))}function o(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,t.map&&(e.map.value=t.map,n(t.map,e.mapTransform))}function s(e,t){e.dashSize.value=t.dashSize,e.totalSize.value=t.dashSize+t.gapSize,e.scale.value=t.scale}function c(e,t,r,i){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,e.size.value=t.size*r,e.scale.value=i*.5,t.map&&(e.map.value=t.map,n(t.map,e.uvTransform)),t.alphaMap&&(e.alphaMap.value=t.alphaMap,n(t.alphaMap,e.alphaMapTransform)),t.alphaTest>0&&(e.alphaTest.value=t.alphaTest)}function l(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,e.rotation.value=t.rotation,t.map&&(e.map.value=t.map,n(t.map,e.mapTransform)),t.alphaMap&&(e.alphaMap.value=t.alphaMap,n(t.alphaMap,e.alphaMapTransform)),t.alphaTest>0&&(e.alphaTest.value=t.alphaTest)}function u(e,t){e.specular.value.copy(t.specular),e.shininess.value=Math.max(t.shininess,1e-4)}function d(e,t){t.gradientMap&&(e.gradientMap.value=t.gradientMap)}function f(e,t){e.metalness.value=t.metalness,t.metalnessMap&&(e.metalnessMap.value=t.metalnessMap,n(t.metalnessMap,e.metalnessMapTransform)),e.roughness.value=t.roughness,t.roughnessMap&&(e.roughnessMap.value=t.roughnessMap,n(t.roughnessMap,e.roughnessMapTransform)),t.envMap&&(e.envMapIntensity.value=t.envMapIntensity)}function p(e,t,r){e.ior.value=t.ior,t.sheen>0&&(e.sheenColor.value.copy(t.sheenColor).multiplyScalar(t.sheen),e.sheenRoughness.value=t.sheenRoughness,t.sheenColorMap&&(e.sheenColorMap.value=t.sheenColorMap,n(t.sheenColorMap,e.sheenColorMapTransform)),t.sheenRoughnessMap&&(e.sheenRoughnessMap.value=t.sheenRoughnessMap,n(t.sheenRoughnessMap,e.sheenRoughnessMapTransform))),t.clearcoat>0&&(e.clearcoat.value=t.clearcoat,e.clearcoatRoughness.value=t.clearcoatRoughness,t.clearcoatMap&&(e.clearcoatMap.value=t.clearcoatMap,n(t.clearcoatMap,e.clearcoatMapTransform)),t.clearcoatRoughnessMap&&(e.clearcoatRoughnessMap.value=t.clearcoatRoughnessMap,n(t.clearcoatRoughnessMap,e.clearcoatRoughnessMapTransform)),t.clearcoatNormalMap&&(e.clearcoatNormalMap.value=t.clearcoatNormalMap,n(t.clearcoatNormalMap,e.clearcoatNormalMapTransform),e.clearcoatNormalScale.value.copy(t.clearcoatNormalScale),t.side===1&&e.clearcoatNormalScale.value.negate())),t.dispersion>0&&(e.dispersion.value=t.dispersion),t.iridescence>0&&(e.iridescence.value=t.iridescence,e.iridescenceIOR.value=t.iridescenceIOR,e.iridescenceThicknessMinimum.value=t.iridescenceThicknessRange[0],e.iridescenceThicknessMaximum.value=t.iridescenceThicknessRange[1],t.iridescenceMap&&(e.iridescenceMap.value=t.iridescenceMap,n(t.iridescenceMap,e.iridescenceMapTransform)),t.iridescenceThicknessMap&&(e.iridescenceThicknessMap.value=t.iridescenceThicknessMap,n(t.iridescenceThicknessMap,e.iridescenceThicknessMapTransform))),t.transmission>0&&(e.transmission.value=t.transmission,e.transmissionSamplerMap.value=r.texture,e.transmissionSamplerSize.value.set(r.width,r.height),t.transmissionMap&&(e.transmissionMap.value=t.transmissionMap,n(t.transmissionMap,e.transmissionMapTransform)),e.thickness.value=t.thickness,t.thicknessMap&&(e.thicknessMap.value=t.thicknessMap,n(t.thicknessMap,e.thicknessMapTransform)),e.attenuationDistance.value=t.attenuationDistance,e.attenuationColor.value.copy(t.attenuationColor)),t.anisotropy>0&&(e.anisotropyVector.value.set(t.anisotropy*Math.cos(t.anisotropyRotation),t.anisotropy*Math.sin(t.anisotropyRotation)),t.anisotropyMap&&(e.anisotropyMap.value=t.anisotropyMap,n(t.anisotropyMap,e.anisotropyMapTransform))),e.specularIntensity.value=t.specularIntensity,e.specularColor.value.copy(t.specularColor),t.specularColorMap&&(e.specularColorMap.value=t.specularColorMap,n(t.specularColorMap,e.specularColorMapTransform)),t.specularIntensityMap&&(e.specularIntensityMap.value=t.specularIntensityMap,n(t.specularIntensityMap,e.specularIntensityMapTransform))}function m(e,t){t.matcap&&(e.matcap.value=t.matcap)}function h(e,n){let r=t.get(n).light;e.referencePosition.value.setFromMatrixPosition(r.matrixWorld),e.nearDistance.value=r.shadow.camera.near,e.farDistance.value=r.shadow.camera.far}return{refreshFogUniforms:r,refreshMaterialUniforms:i}}function Nu(e,t,n,r){let i={},a={},o=[],s=e.getParameter(e.MAX_UNIFORM_BUFFER_BINDINGS);function c(e,t){let n=t.program;r.uniformBlockBinding(e,n)}function l(e,n){let o=i[e.id];o===void 0&&(m(e),o=u(e),i[e.id]=o,e.addEventListener(`dispose`,g));let s=n.program;r.updateUBOMapping(e,s);let c=t.render.frame;a[e.id]!==c&&(f(e),a[e.id]=c)}function u(t){let n=d();t.__bindingPointIndex=n;let r=e.createBuffer(),i=t.__size,a=t.usage;return e.bindBuffer(e.UNIFORM_BUFFER,r),e.bufferData(e.UNIFORM_BUFFER,i,a),e.bindBuffer(e.UNIFORM_BUFFER,null),e.bindBufferBase(e.UNIFORM_BUFFER,n,r),r}function d(){for(let e=0;e<s;e++)if(o.indexOf(e)===-1)return o.push(e),e;return B(`WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached.`),0}function f(t){let n=i[t.id],r=t.uniforms,a=t.__cache;e.bindBuffer(e.UNIFORM_BUFFER,n);for(let t=0,n=r.length;t<n;t++){let n=Array.isArray(r[t])?r[t]:[r[t]];for(let r=0,i=n.length;r<i;r++){let i=n[r];if(p(i,t,r,a)===!0){let t=i.__offset,n=Array.isArray(i.value)?i.value:[i.value],r=0;for(let a=0;a<n.length;a++){let o=n[a],s=h(o);typeof o==`number`||typeof o==`boolean`?(i.__data[0]=o,e.bufferSubData(e.UNIFORM_BUFFER,t+r,i.__data)):o.isMatrix3?(i.__data[0]=o.elements[0],i.__data[1]=o.elements[1],i.__data[2]=o.elements[2],i.__data[3]=0,i.__data[4]=o.elements[3],i.__data[5]=o.elements[4],i.__data[6]=o.elements[5],i.__data[7]=0,i.__data[8]=o.elements[6],i.__data[9]=o.elements[7],i.__data[10]=o.elements[8],i.__data[11]=0):(o.toArray(i.__data,r),r+=s.storage/Float32Array.BYTES_PER_ELEMENT)}e.bufferSubData(e.UNIFORM_BUFFER,t,i.__data)}}}e.bindBuffer(e.UNIFORM_BUFFER,null)}function p(e,t,n,r){let i=e.value,a=t+`_`+n;if(r[a]===void 0)return typeof i==`number`||typeof i==`boolean`?r[a]=i:r[a]=i.clone(),!0;{let e=r[a];if(typeof i==`number`||typeof i==`boolean`){if(e!==i)return r[a]=i,!0}else if(e.equals(i)===!1)return e.copy(i),!0}return!1}function m(e){let t=e.uniforms,n=0;for(let e=0,r=t.length;e<r;e++){let r=Array.isArray(t[e])?t[e]:[t[e]];for(let e=0,t=r.length;e<t;e++){let t=r[e],i=Array.isArray(t.value)?t.value:[t.value];for(let e=0,r=i.length;e<r;e++){let r=i[e],a=h(r),o=n%16,s=o%a.boundary,c=o+s;n+=s,c!==0&&16-c<a.storage&&(n+=16-c),t.__data=new Float32Array(a.storage/Float32Array.BYTES_PER_ELEMENT),t.__offset=n,n+=a.storage}}}let r=n%16;return r>0&&(n+=16-r),e.__size=n,e.__cache={},this}function h(e){let t={boundary:0,storage:0};return typeof e==`number`||typeof e==`boolean`?(t.boundary=4,t.storage=4):e.isVector2?(t.boundary=8,t.storage=8):e.isVector3||e.isColor?(t.boundary=16,t.storage=12):e.isVector4?(t.boundary=16,t.storage=16):e.isMatrix3?(t.boundary=48,t.storage=48):e.isMatrix4?(t.boundary=64,t.storage=64):e.isTexture?z(`WebGLRenderer: Texture samplers can not be part of an uniforms group.`):z(`WebGLRenderer: Unsupported uniform value type.`,e),t}function g(t){let n=t.target;n.removeEventListener(`dispose`,g);let r=o.indexOf(n.__bindingPointIndex);o.splice(r,1),e.deleteBuffer(i[n.id]),delete i[n.id],delete a[n.id]}function _(){for(let t in i)e.deleteBuffer(i[t]);o=[],i={},a={}}return{bind:c,update:l,dispose:_}}var Pu=new Uint16Array([12469,15057,12620,14925,13266,14620,13807,14376,14323,13990,14545,13625,14713,13328,14840,12882,14931,12528,14996,12233,15039,11829,15066,11525,15080,11295,15085,10976,15082,10705,15073,10495,13880,14564,13898,14542,13977,14430,14158,14124,14393,13732,14556,13410,14702,12996,14814,12596,14891,12291,14937,11834,14957,11489,14958,11194,14943,10803,14921,10506,14893,10278,14858,9960,14484,14039,14487,14025,14499,13941,14524,13740,14574,13468,14654,13106,14743,12678,14818,12344,14867,11893,14889,11509,14893,11180,14881,10751,14852,10428,14812,10128,14765,9754,14712,9466,14764,13480,14764,13475,14766,13440,14766,13347,14769,13070,14786,12713,14816,12387,14844,11957,14860,11549,14868,11215,14855,10751,14825,10403,14782,10044,14729,9651,14666,9352,14599,9029,14967,12835,14966,12831,14963,12804,14954,12723,14936,12564,14917,12347,14900,11958,14886,11569,14878,11247,14859,10765,14828,10401,14784,10011,14727,9600,14660,9289,14586,8893,14508,8533,15111,12234,15110,12234,15104,12216,15092,12156,15067,12010,15028,11776,14981,11500,14942,11205,14902,10752,14861,10393,14812,9991,14752,9570,14682,9252,14603,8808,14519,8445,14431,8145,15209,11449,15208,11451,15202,11451,15190,11438,15163,11384,15117,11274,15055,10979,14994,10648,14932,10343,14871,9936,14803,9532,14729,9218,14645,8742,14556,8381,14461,8020,14365,7603,15273,10603,15272,10607,15267,10619,15256,10631,15231,10614,15182,10535,15118,10389,15042,10167,14963,9787,14883,9447,14800,9115,14710,8665,14615,8318,14514,7911,14411,7507,14279,7198,15314,9675,15313,9683,15309,9712,15298,9759,15277,9797,15229,9773,15166,9668,15084,9487,14995,9274,14898,8910,14800,8539,14697,8234,14590,7790,14479,7409,14367,7067,14178,6621,15337,8619,15337,8631,15333,8677,15325,8769,15305,8871,15264,8940,15202,8909,15119,8775,15022,8565,14916,8328,14804,8009,14688,7614,14569,7287,14448,6888,14321,6483,14088,6171,15350,7402,15350,7419,15347,7480,15340,7613,15322,7804,15287,7973,15229,8057,15148,8012,15046,7846,14933,7611,14810,7357,14682,7069,14552,6656,14421,6316,14251,5948,14007,5528,15356,5942,15356,5977,15353,6119,15348,6294,15332,6551,15302,6824,15249,7044,15171,7122,15070,7050,14949,6861,14818,6611,14679,6349,14538,6067,14398,5651,14189,5311,13935,4958,15359,4123,15359,4153,15356,4296,15353,4646,15338,5160,15311,5508,15263,5829,15188,6042,15088,6094,14966,6001,14826,5796,14678,5543,14527,5287,14377,4985,14133,4586,13869,4257,15360,1563,15360,1642,15358,2076,15354,2636,15341,3350,15317,4019,15273,4429,15203,4732,15105,4911,14981,4932,14836,4818,14679,4621,14517,4386,14359,4156,14083,3795,13808,3437,15360,122,15360,137,15358,285,15355,636,15344,1274,15322,2177,15281,2765,15215,3223,15120,3451,14995,3569,14846,3567,14681,3466,14511,3305,14344,3121,14037,2800,13753,2467,15360,0,15360,1,15359,21,15355,89,15346,253,15325,479,15287,796,15225,1148,15133,1492,15008,1749,14856,1882,14685,1886,14506,1783,14324,1608,13996,1398,13702,1183]),Fu=null;function Iu(){return Fu===null&&(Fu=new Ti(Pu,16,16,ce,k),Fu.name=`DFG_LUT`,Fu.minFilter=y,Fu.magFilter=y,Fu.wrapS=m,Fu.wrapT=m,Fu.generateMipmaps=!1,Fu.needsUpdate=!0),Fu}var Lu=class{constructor(e={}){let{canvas:t=at(),context:n=null,depth:r=!0,stencil:i=!1,alpha:a=!1,antialias:o=!1,premultipliedAlpha:s=!0,preserveDrawingBuffer:c=!1,powerPreference:l=`default`,failIfMajorPerformanceCaveat:u=!1,reversedDepthBuffer:d=!1,outputBufferType:f=S}=e;this.isWebGLRenderer=!0;let p;if(n!==null){if(typeof WebGLRenderingContext<`u`&&n instanceof WebGLRenderingContext)throw Error(`THREE.WebGLRenderer: WebGL 1 is not supported since r163.`);p=n.getContextAttributes().alpha}else p=a;let m=f,h=new Set([P,le,se]),g=new Set([S,D,T,ne,ee,te]),_=new Uint32Array(4),v=new Int32Array(4),y=null,b=null,C=[],w=[],E=null;this.domElement=t,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.toneMapping=0,this.toneMappingExposure=1,this.transmissionResolutionScale=1;let O=this,A=!1;this._outputColorSpace=Ye;let j=0,M=0,N=null,re=-1,ie=null,ae=new K,oe=new K,ce=null,ue=new J(0),de=0,fe=t.width,pe=t.height,me=1,he=null,ge=null,_e=new K(0,0,fe,pe),ve=new K(0,0,fe,pe),ye=!1,be=new Ni,xe=!1,Se=!1,Ce=new q,we=new U,Te=new K,Ee={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0},De=!1;function Oe(){return N===null?me:1}let F=n;function ke(e,n){return t.getContext(e,n)}try{let e={alpha:!0,depth:r,stencil:i,antialias:o,premultipliedAlpha:s,preserveDrawingBuffer:c,powerPreference:l,failIfMajorPerformanceCaveat:u};if(`setAttribute`in t&&t.setAttribute(`data-engine`,`three.js r182`),t.addEventListener(`webglcontextlost`,nt,!1),t.addEventListener(`webglcontextrestored`,rt,!1),t.addEventListener(`webglcontextcreationerror`,it,!1),F===null){let t=`webgl2`;if(F=ke(t,e),F===null)throw ke(t)?Error(`Error creating WebGL context with your selected attributes.`):Error(`Error creating WebGL context.`)}}catch(e){throw B(`WebGLRenderer: `+e.message),e}let Ae,je,I,Me,L,R,Ne,Pe,Fe,Ie,Le,Re,ze,Be,Ve,He,Ue,We,Ge,Ke,qe,Je,Ze,Qe;function $e(){Ae=new tc(F),Ae.init(),Je=new Tu(F,Ae),je=new js(F,Ae,e,Je),I=new Cu(F,Ae),je.reversedDepthBuffer&&d&&I.buffers.depth.setReversed(!0),Me=new ic(F),L=new nu,R=new wu(F,Ae,I,L,je,Je,Me),Ne=new Ns(O),Pe=new ec(O),Fe=new Cs(F),Ze=new ks(F,Fe),Ie=new nc(F,Fe,Me,Ze),Le=new oc(F,Ie,Fe,Me),Ge=new ac(F,je,R),He=new Ms(L),Re=new tu(O,Ne,Pe,Ae,je,Ze,He),ze=new Mu(O,L),Be=new ou,Ve=new pu(Ae),We=new Os(O,Ne,Pe,I,Le,p,s),Ue=new xu(O,Le,je),Qe=new Nu(F,Me,je,I),Ke=new As(F,Ae,Me),qe=new rc(F,Ae,Me),Me.programs=Re.programs,O.capabilities=je,O.extensions=Ae,O.properties=L,O.renderLists=Be,O.shadowMap=Ue,O.state=I,O.info=Me}$e(),m!==1009&&(E=new cc(m,t.width,t.height,r,i));let et=new ku(O,F);this.xr=et,this.getContext=function(){return F},this.getContextAttributes=function(){return F.getContextAttributes()},this.forceContextLoss=function(){let e=Ae.get(`WEBGL_lose_context`);e&&e.loseContext()},this.forceContextRestore=function(){let e=Ae.get(`WEBGL_lose_context`);e&&e.restoreContext()},this.getPixelRatio=function(){return me},this.setPixelRatio=function(e){e!==void 0&&(me=e,this.setSize(fe,pe,!1))},this.getSize=function(e){return e.set(fe,pe)},this.setSize=function(e,n,r=!0){if(et.isPresenting){z(`WebGLRenderer: Can't change size while VR device is presenting.`);return}fe=e,pe=n,t.width=Math.floor(e*me),t.height=Math.floor(n*me),r===!0&&(t.style.width=e+`px`,t.style.height=n+`px`),E!==null&&E.setSize(t.width,t.height),this.setViewport(0,0,e,n)},this.getDrawingBufferSize=function(e){return e.set(fe*me,pe*me).floor()},this.setDrawingBufferSize=function(e,n,r){fe=e,pe=n,me=r,t.width=Math.floor(e*r),t.height=Math.floor(n*r),this.setViewport(0,0,e,n)},this.setEffects=function(e){if(m===1009){console.error(`THREE.WebGLRenderer: setEffects() requires outputBufferType set to HalfFloatType or FloatType.`);return}if(e){for(let t=0;t<e.length;t++)if(e[t].isOutputPass===!0){console.warn(`THREE.WebGLRenderer: OutputPass is not needed in setEffects(). Tone mapping and color space conversion are applied automatically.`);break}}E.setEffects(e||[])},this.getCurrentViewport=function(e){return e.copy(ae)},this.getViewport=function(e){return e.copy(_e)},this.setViewport=function(e,t,n,r){e.isVector4?_e.set(e.x,e.y,e.z,e.w):_e.set(e,t,n,r),I.viewport(ae.copy(_e).multiplyScalar(me).round())},this.getScissor=function(e){return e.copy(ve)},this.setScissor=function(e,t,n,r){e.isVector4?ve.set(e.x,e.y,e.z,e.w):ve.set(e,t,n,r),I.scissor(oe.copy(ve).multiplyScalar(me).round())},this.getScissorTest=function(){return ye},this.setScissorTest=function(e){I.setScissorTest(ye=e)},this.setOpaqueSort=function(e){he=e},this.setTransparentSort=function(e){ge=e},this.getClearColor=function(e){return e.copy(We.getClearColor())},this.setClearColor=function(){We.setClearColor(...arguments)},this.getClearAlpha=function(){return We.getClearAlpha()},this.setClearAlpha=function(){We.setClearAlpha(...arguments)},this.clear=function(e=!0,t=!0,n=!0){let r=0;if(e){let e=!1;if(N!==null){let t=N.texture.format;e=h.has(t)}if(e){let e=N.texture.type,t=g.has(e),n=We.getClearColor(),r=We.getClearAlpha(),i=n.r,a=n.g,o=n.b;t?(_[0]=i,_[1]=a,_[2]=o,_[3]=r,F.clearBufferuiv(F.COLOR,0,_)):(v[0]=i,v[1]=a,v[2]=o,v[3]=r,F.clearBufferiv(F.COLOR,0,v))}else r|=F.COLOR_BUFFER_BIT}t&&(r|=F.DEPTH_BUFFER_BIT),n&&(r|=F.STENCIL_BUFFER_BIT,this.state.buffers.stencil.setMask(4294967295)),F.clear(r)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){t.removeEventListener(`webglcontextlost`,nt,!1),t.removeEventListener(`webglcontextrestored`,rt,!1),t.removeEventListener(`webglcontextcreationerror`,it,!1),We.dispose(),Be.dispose(),Ve.dispose(),L.dispose(),Ne.dispose(),Pe.dispose(),Le.dispose(),Ze.dispose(),Qe.dispose(),Re.dispose(),et.dispose(),et.removeEventListener(`sessionstart`,ht),et.removeEventListener(`sessionend`,gt),V.stop()};function nt(e){e.preventDefault(),ct(`WebGLRenderer: Context Lost.`),A=!0}function rt(){ct(`WebGLRenderer: Context Restored.`),A=!1;let e=Me.autoReset,t=Ue.enabled,n=Ue.autoUpdate,r=Ue.needsUpdate,i=Ue.type;$e(),Me.autoReset=e,Ue.enabled=t,Ue.autoUpdate=n,Ue.needsUpdate=r,Ue.type=i}function it(e){B(`WebGLRenderer: A WebGL context could not be created. Reason: `,e.statusMessage)}function ot(e){let t=e.target;t.removeEventListener(`dispose`,ot),st(t)}function st(e){dt(e),L.remove(e)}function dt(e){let t=L.get(e).programs;t!==void 0&&(t.forEach(function(e){Re.releaseProgram(e)}),e.isShaderMaterial&&Re.releaseShaderCache(e))}this.renderBufferDirect=function(e,t,n,r,i,a){t===null&&(t=Ee);let o=i.isMesh&&i.matrixWorld.determinant()<0,s=Tt(e,t,n,r,i);I.setMaterial(r,o);let c=n.index,l=1;if(r.wireframe===!0){if(c=Ie.getWireframeAttribute(n),c===void 0)return;l=2}let u=n.drawRange,d=n.attributes.position,f=u.start*l,p=(u.start+u.count)*l;a!==null&&(f=Math.max(f,a.start*l),p=Math.min(p,(a.start+a.count)*l)),c===null?d!=null&&(f=Math.max(f,0),p=Math.min(p,d.count)):(f=Math.max(f,0),p=Math.min(p,c.count));let m=p-f;if(m<0||m===1/0)return;Ze.setup(i,r,s,n,c);let h,g=Ke;if(c!==null&&(h=Fe.get(c),g=qe,g.setIndex(h)),i.isMesh)r.wireframe===!0?(I.setLineWidth(r.wireframeLinewidth*Oe()),g.setMode(F.LINES)):g.setMode(F.TRIANGLES);else if(i.isLine){let e=r.linewidth;e===void 0&&(e=1),I.setLineWidth(e*Oe()),i.isLineSegments?g.setMode(F.LINES):i.isLineLoop?g.setMode(F.LINE_LOOP):g.setMode(F.LINE_STRIP)}else i.isPoints?g.setMode(F.POINTS):i.isSprite&&g.setMode(F.TRIANGLES);if(i.isBatchedMesh)if(i._multiDrawInstances!==null)lt(`WebGLRenderer: renderMultiDrawInstances has been deprecated and will be removed in r184. Append to renderMultiDraw arguments and use indirection.`),g.renderMultiDrawInstances(i._multiDrawStarts,i._multiDrawCounts,i._multiDrawCount,i._multiDrawInstances);else if(Ae.get(`WEBGL_multi_draw`))g.renderMultiDraw(i._multiDrawStarts,i._multiDrawCounts,i._multiDrawCount);else{let e=i._multiDrawStarts,t=i._multiDrawCounts,n=i._multiDrawCount,a=c?Fe.get(c).bytesPerElement:1,o=L.get(r).currentProgram.getUniforms();for(let r=0;r<n;r++)o.setValue(F,`_gl_DrawID`,r),g.render(e[r]/a,t[r])}else if(i.isInstancedMesh)g.renderInstances(f,m,i.count);else if(n.isInstancedBufferGeometry){let e=n._maxInstanceCount===void 0?1/0:n._maxInstanceCount,t=Math.min(n.instanceCount,e);g.renderInstances(f,m,t)}else g.render(f,m)};function ft(e,t,n){e.transparent===!0&&e.side===2&&e.forceSinglePass===!1?(e.side=1,e.needsUpdate=!0,St(e,t,n),e.side=0,e.needsUpdate=!0,St(e,t,n),e.side=2):St(e,t,n)}this.compile=function(e,t,n=null){n===null&&(n=e),b=Ve.get(n),b.init(t),w.push(b),n.traverseVisible(function(e){e.isLight&&e.layers.test(t.layers)&&(b.pushLight(e),e.castShadow&&b.pushShadow(e))}),e!==n&&e.traverseVisible(function(e){e.isLight&&e.layers.test(t.layers)&&(b.pushLight(e),e.castShadow&&b.pushShadow(e))}),b.setupLights();let r=new Set;return e.traverse(function(e){if(!(e.isMesh||e.isPoints||e.isLine||e.isSprite))return;let t=e.material;if(t)if(Array.isArray(t))for(let i=0;i<t.length;i++){let a=t[i];ft(a,n,e),r.add(a)}else ft(t,n,e),r.add(t)}),b=w.pop(),r},this.compileAsync=function(e,t,n=null){let r=this.compile(e,t,n);return new Promise(t=>{function n(){if(r.forEach(function(e){L.get(e).currentProgram.isReady()&&r.delete(e)}),r.size===0){t(e);return}setTimeout(n,10)}Ae.get(`KHR_parallel_shader_compile`)===null?setTimeout(n,10):n()})};let pt=null;function mt(e){pt&&pt(e)}function ht(){V.stop()}function gt(){V.start()}let V=new Ss;V.setAnimationLoop(mt),typeof self<`u`&&V.setContext(self),this.setAnimationLoop=function(e){pt=e,et.setAnimationLoop(e),e===null?V.stop():V.start()},et.addEventListener(`sessionstart`,ht),et.addEventListener(`sessionend`,gt),this.render=function(e,t){if(t!==void 0&&t.isCamera!==!0){B(`WebGLRenderer.render: camera is not an instance of THREE.Camera.`);return}if(A===!0)return;let n=et.enabled===!0&&et.isPresenting===!0,r=E!==null&&(N===null||n)&&E.begin(O,N);if(e.matrixWorldAutoUpdate===!0&&e.updateMatrixWorld(),t.parent===null&&t.matrixWorldAutoUpdate===!0&&t.updateMatrixWorld(),et.enabled===!0&&et.isPresenting===!0&&(E===null||E.isCompositing()===!1)&&(et.cameraAutoUpdate===!0&&et.updateCamera(t),t=et.getCamera()),e.isScene===!0&&e.onBeforeRender(O,e,t,N),b=Ve.get(e,w.length),b.init(t),w.push(b),Ce.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),be.setFromProjectionMatrix(Ce,tt,t.reversedDepth),Se=this.localClippingEnabled,xe=He.init(this.clippingPlanes,Se),y=Be.get(e,C.length),y.init(),C.push(y),et.enabled===!0&&et.isPresenting===!0){let e=O.xr.getDepthSensingMesh();e!==null&&_t(e,t,-1/0,O.sortObjects)}_t(e,t,0,O.sortObjects),y.finish(),O.sortObjects===!0&&y.sort(he,ge),De=et.enabled===!1||et.isPresenting===!1||et.hasDepthSensing()===!1,De&&We.addToRenderList(y,e),this.info.render.frame++,xe===!0&&He.beginShadows();let i=b.state.shadowsArray;if(Ue.render(i,e,t),xe===!0&&He.endShadows(),this.info.autoReset===!0&&this.info.reset(),(r&&E.hasRenderPass())===!1){let n=y.opaque,r=y.transmissive;if(b.setupLights(),t.isArrayCamera){let i=t.cameras;if(r.length>0)for(let t=0,a=i.length;t<a;t++){let a=i[t];yt(n,r,e,a)}De&&We.render(e);for(let t=0,n=i.length;t<n;t++){let n=i[t];vt(y,e,n,n.viewport)}}else r.length>0&&yt(n,r,e,t),De&&We.render(e),vt(y,e,t)}N!==null&&M===0&&(R.updateMultisampleRenderTarget(N),R.updateRenderTargetMipmap(N)),r&&E.end(O),e.isScene===!0&&e.onAfterRender(O,e,t),Ze.resetDefaultState(),re=-1,ie=null,w.pop(),w.length>0?(b=w[w.length-1],xe===!0&&He.setGlobalState(O.clippingPlanes,b.state.camera)):b=null,C.pop(),y=C.length>0?C[C.length-1]:null};function _t(e,t,n,r){if(e.visible===!1)return;if(e.layers.test(t.layers)){if(e.isGroup)n=e.renderOrder;else if(e.isLOD)e.autoUpdate===!0&&e.update(t);else if(e.isLight)b.pushLight(e),e.castShadow&&b.pushShadow(e);else if(e.isSprite){if(!e.frustumCulled||be.intersectsSprite(e)){r&&Te.setFromMatrixPosition(e.matrixWorld).applyMatrix4(Ce);let t=Le.update(e),i=e.material;i.visible&&y.push(e,t,i,n,Te.z,null)}}else if((e.isMesh||e.isLine||e.isPoints)&&(!e.frustumCulled||be.intersectsObject(e))){let t=Le.update(e),i=e.material;if(r&&(e.boundingSphere===void 0?(t.boundingSphere===null&&t.computeBoundingSphere(),Te.copy(t.boundingSphere.center)):(e.boundingSphere===null&&e.computeBoundingSphere(),Te.copy(e.boundingSphere.center)),Te.applyMatrix4(e.matrixWorld).applyMatrix4(Ce)),Array.isArray(i)){let r=t.groups;for(let a=0,o=r.length;a<o;a++){let o=r[a],s=i[o.materialIndex];s&&s.visible&&y.push(e,t,s,n,Te.z,o)}}else i.visible&&y.push(e,t,i,n,Te.z,null)}}let i=e.children;for(let e=0,a=i.length;e<a;e++)_t(i[e],t,n,r)}function vt(e,t,n,r){let{opaque:i,transmissive:a,transparent:o}=e;b.setupLightsView(n),xe===!0&&He.setGlobalState(O.clippingPlanes,n),r&&I.viewport(ae.copy(r)),i.length>0&&bt(i,t,n),a.length>0&&bt(a,t,n),o.length>0&&bt(o,t,n),I.buffers.depth.setTest(!0),I.buffers.depth.setMask(!0),I.buffers.color.setMask(!0),I.setPolygonOffset(!1)}function yt(e,t,n,r){if((n.isScene===!0?n.overrideMaterial:null)!==null)return;if(b.state.transmissionRenderTarget[r.id]===void 0){let e=Ae.has(`EXT_color_buffer_half_float`)||Ae.has(`EXT_color_buffer_float`);b.state.transmissionRenderTarget[r.id]=new nn(1,1,{generateMipmaps:!0,type:e?k:S,minFilter:x,samples:je.samples,stencilBuffer:i,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:G.workingColorSpace})}let a=b.state.transmissionRenderTarget[r.id],o=r.viewport||ae;a.setSize(o.z*O.transmissionResolutionScale,o.w*O.transmissionResolutionScale);let s=O.getRenderTarget(),c=O.getActiveCubeFace(),l=O.getActiveMipmapLevel();O.setRenderTarget(a),O.getClearColor(ue),de=O.getClearAlpha(),de<1&&O.setClearColor(16777215,.5),O.clear(),De&&We.render(n);let u=O.toneMapping;O.toneMapping=0;let d=r.viewport;if(r.viewport!==void 0&&(r.viewport=void 0),b.setupLightsView(r),xe===!0&&He.setGlobalState(O.clippingPlanes,r),bt(e,n,r),R.updateMultisampleRenderTarget(a),R.updateRenderTargetMipmap(a),Ae.has(`WEBGL_multisampled_render_to_texture`)===!1){let e=!1;for(let i=0,a=t.length;i<a;i++){let{object:a,geometry:o,material:s,group:c}=t[i];if(s.side===2&&a.layers.test(r.layers)){let t=s.side;s.side=1,s.needsUpdate=!0,xt(a,n,r,o,s,c),s.side=t,s.needsUpdate=!0,e=!0}}e===!0&&(R.updateMultisampleRenderTarget(a),R.updateRenderTargetMipmap(a))}O.setRenderTarget(s,c,l),O.setClearColor(ue,de),d!==void 0&&(r.viewport=d),O.toneMapping=u}function bt(e,t,n){let r=t.isScene===!0?t.overrideMaterial:null;for(let i=0,a=e.length;i<a;i++){let a=e[i],{object:o,geometry:s,group:c}=a,l=a.material;l.allowOverride===!0&&r!==null&&(l=r),o.layers.test(n.layers)&&xt(o,t,n,s,l,c)}}function xt(e,t,n,r,i,a){e.onBeforeRender(O,t,n,r,i,a),e.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse,e.matrixWorld),e.normalMatrix.getNormalMatrix(e.modelViewMatrix),i.onBeforeRender(O,t,n,r,e,a),i.transparent===!0&&i.side===2&&i.forceSinglePass===!1?(i.side=1,i.needsUpdate=!0,O.renderBufferDirect(n,t,r,i,e,a),i.side=0,i.needsUpdate=!0,O.renderBufferDirect(n,t,r,i,e,a),i.side=2):O.renderBufferDirect(n,t,r,i,e,a),e.onAfterRender(O,t,n,r,i,a)}function St(e,t,n){t.isScene!==!0&&(t=Ee);let r=L.get(e),i=b.state.lights,a=b.state.shadowsArray,o=i.state.version,s=Re.getParameters(e,i.state,a,t,n),c=Re.getProgramCacheKey(s),l=r.programs;r.environment=e.isMeshStandardMaterial?t.environment:null,r.fog=t.fog,r.envMap=(e.isMeshStandardMaterial?Pe:Ne).get(e.envMap||r.environment),r.envMapRotation=r.environment!==null&&e.envMap===null?t.environmentRotation:e.envMapRotation,l===void 0&&(e.addEventListener(`dispose`,ot),l=new Map,r.programs=l);let u=l.get(c);if(u!==void 0){if(r.currentProgram===u&&r.lightsStateVersion===o)return wt(e,s),u}else s.uniforms=Re.getUniforms(e),e.onBeforeCompile(s,O),u=Re.acquireProgram(s,c),l.set(c,u),r.uniforms=s.uniforms;let d=r.uniforms;return(!e.isShaderMaterial&&!e.isRawShaderMaterial||e.clipping===!0)&&(d.clippingPlanes=He.uniform),wt(e,s),r.needsLights=Dt(e),r.lightsStateVersion=o,r.needsLights&&(d.ambientLightColor.value=i.state.ambient,d.lightProbe.value=i.state.probe,d.directionalLights.value=i.state.directional,d.directionalLightShadows.value=i.state.directionalShadow,d.spotLights.value=i.state.spot,d.spotLightShadows.value=i.state.spotShadow,d.rectAreaLights.value=i.state.rectArea,d.ltc_1.value=i.state.rectAreaLTC1,d.ltc_2.value=i.state.rectAreaLTC2,d.pointLights.value=i.state.point,d.pointLightShadows.value=i.state.pointShadow,d.hemisphereLights.value=i.state.hemi,d.directionalShadowMap.value=i.state.directionalShadowMap,d.directionalShadowMatrix.value=i.state.directionalShadowMatrix,d.spotShadowMap.value=i.state.spotShadowMap,d.spotLightMatrix.value=i.state.spotLightMatrix,d.spotLightMap.value=i.state.spotLightMap,d.pointShadowMap.value=i.state.pointShadowMap,d.pointShadowMatrix.value=i.state.pointShadowMatrix),r.currentProgram=u,r.uniformsList=null,u}function Ct(e){if(e.uniformsList===null){let t=e.currentProgram.getUniforms();e.uniformsList=hl.seqWithValue(t.seq,e.uniforms)}return e.uniformsList}function wt(e,t){let n=L.get(e);n.outputColorSpace=t.outputColorSpace,n.batching=t.batching,n.batchingColor=t.batchingColor,n.instancing=t.instancing,n.instancingColor=t.instancingColor,n.instancingMorph=t.instancingMorph,n.skinning=t.skinning,n.morphTargets=t.morphTargets,n.morphNormals=t.morphNormals,n.morphColors=t.morphColors,n.morphTargetsCount=t.morphTargetsCount,n.numClippingPlanes=t.numClippingPlanes,n.numIntersection=t.numClipIntersection,n.vertexAlphas=t.vertexAlphas,n.vertexTangents=t.vertexTangents,n.toneMapping=t.toneMapping}function Tt(e,t,n,r,i){t.isScene!==!0&&(t=Ee),R.resetTextureUnits();let a=t.fog,o=r.isMeshStandardMaterial?t.environment:null,s=N===null?O.outputColorSpace:N.isXRRenderTarget===!0?N.texture.colorSpace:Xe,c=(r.isMeshStandardMaterial?Pe:Ne).get(r.envMap||o),l=r.vertexColors===!0&&!!n.attributes.color&&n.attributes.color.itemSize===4,u=!!n.attributes.tangent&&(!!r.normalMap||r.anisotropy>0),d=!!n.morphAttributes.position,f=!!n.morphAttributes.normal,p=!!n.morphAttributes.color,m=0;r.toneMapped&&(N===null||N.isXRRenderTarget===!0)&&(m=O.toneMapping);let h=n.morphAttributes.position||n.morphAttributes.normal||n.morphAttributes.color,g=h===void 0?0:h.length,_=L.get(r),v=b.state.lights;if(xe===!0&&(Se===!0||e!==ie)){let t=e===ie&&r.id===re;He.setState(r,e,t)}let y=!1;r.version===_.__version?_.needsLights&&_.lightsStateVersion!==v.state.version?y=!0:_.outputColorSpace===s?i.isBatchedMesh&&_.batching===!1||!i.isBatchedMesh&&_.batching===!0||i.isBatchedMesh&&_.batchingColor===!0&&i.colorTexture===null||i.isBatchedMesh&&_.batchingColor===!1&&i.colorTexture!==null||i.isInstancedMesh&&_.instancing===!1||!i.isInstancedMesh&&_.instancing===!0||i.isSkinnedMesh&&_.skinning===!1||!i.isSkinnedMesh&&_.skinning===!0||i.isInstancedMesh&&_.instancingColor===!0&&i.instanceColor===null||i.isInstancedMesh&&_.instancingColor===!1&&i.instanceColor!==null||i.isInstancedMesh&&_.instancingMorph===!0&&i.morphTexture===null||i.isInstancedMesh&&_.instancingMorph===!1&&i.morphTexture!==null?y=!0:_.envMap===c?r.fog===!0&&_.fog!==a||_.numClippingPlanes!==void 0&&(_.numClippingPlanes!==He.numPlanes||_.numIntersection!==He.numIntersection)?y=!0:_.vertexAlphas===l&&_.vertexTangents===u&&_.morphTargets===d&&_.morphNormals===f&&_.morphColors===p&&_.toneMapping===m?_.morphTargetsCount!==g&&(y=!0):y=!0:y=!0:y=!0:(y=!0,_.__version=r.version);let x=_.currentProgram;y===!0&&(x=St(r,t,i));let S=!1,C=!1,w=!1,T=x.getUniforms(),E=_.uniforms;if(I.useProgram(x.program)&&(S=!0,C=!0,w=!0),r.id!==re&&(re=r.id,C=!0),S||ie!==e){I.buffers.depth.getReversed()&&e.reversedDepth!==!0&&(e._reversedDepth=!0,e.updateProjectionMatrix()),T.setValue(F,`projectionMatrix`,e.projectionMatrix),T.setValue(F,`viewMatrix`,e.matrixWorldInverse);let t=T.map.cameraPosition;t!==void 0&&t.setValue(F,we.setFromMatrixPosition(e.matrixWorld)),je.logarithmicDepthBuffer&&T.setValue(F,`logDepthBufFC`,2/(Math.log(e.far+1)/Math.LN2)),(r.isMeshPhongMaterial||r.isMeshToonMaterial||r.isMeshLambertMaterial||r.isMeshBasicMaterial||r.isMeshStandardMaterial||r.isShaderMaterial)&&T.setValue(F,`isOrthographic`,e.isOrthographicCamera===!0),ie!==e&&(ie=e,C=!0,w=!0)}if(_.needsLights&&(v.state.directionalShadowMap.length>0&&T.setValue(F,`directionalShadowMap`,v.state.directionalShadowMap,R),v.state.spotShadowMap.length>0&&T.setValue(F,`spotShadowMap`,v.state.spotShadowMap,R),v.state.pointShadowMap.length>0&&T.setValue(F,`pointShadowMap`,v.state.pointShadowMap,R)),i.isSkinnedMesh){T.setOptional(F,i,`bindMatrix`),T.setOptional(F,i,`bindMatrixInverse`);let e=i.skeleton;e&&(e.boneTexture===null&&e.computeBoneTexture(),T.setValue(F,`boneTexture`,e.boneTexture,R))}i.isBatchedMesh&&(T.setOptional(F,i,`batchingTexture`),T.setValue(F,`batchingTexture`,i._matricesTexture,R),T.setOptional(F,i,`batchingIdTexture`),T.setValue(F,`batchingIdTexture`,i._indirectTexture,R),T.setOptional(F,i,`batchingColorTexture`),i._colorsTexture!==null&&T.setValue(F,`batchingColorTexture`,i._colorsTexture,R));let D=n.morphAttributes;if((D.position!==void 0||D.normal!==void 0||D.color!==void 0)&&Ge.update(i,n,x),(C||_.receiveShadow!==i.receiveShadow)&&(_.receiveShadow=i.receiveShadow,T.setValue(F,`receiveShadow`,i.receiveShadow)),r.isMeshGouraudMaterial&&r.envMap!==null&&(E.envMap.value=c,E.flipEnvMap.value=c.isCubeTexture&&c.isRenderTargetTexture===!1?-1:1),r.isMeshStandardMaterial&&r.envMap===null&&t.environment!==null&&(E.envMapIntensity.value=t.environmentIntensity),E.dfgLUT!==void 0&&(E.dfgLUT.value=Iu()),C&&(T.setValue(F,`toneMappingExposure`,O.toneMappingExposure),_.needsLights&&Et(E,w),a&&r.fog===!0&&ze.refreshFogUniforms(E,a),ze.refreshMaterialUniforms(E,r,me,pe,b.state.transmissionRenderTarget[e.id]),hl.upload(F,Ct(_),E,R)),r.isShaderMaterial&&r.uniformsNeedUpdate===!0&&(hl.upload(F,Ct(_),E,R),r.uniformsNeedUpdate=!1),r.isSpriteMaterial&&T.setValue(F,`center`,i.center),T.setValue(F,`modelViewMatrix`,i.modelViewMatrix),T.setValue(F,`normalMatrix`,i.normalMatrix),T.setValue(F,`modelMatrix`,i.matrixWorld),r.isShaderMaterial||r.isRawShaderMaterial){let e=r.uniformsGroups;for(let t=0,n=e.length;t<n;t++){let n=e[t];Qe.update(n,x),Qe.bind(n,x)}}return x}function Et(e,t){e.ambientLightColor.needsUpdate=t,e.lightProbe.needsUpdate=t,e.directionalLights.needsUpdate=t,e.directionalLightShadows.needsUpdate=t,e.pointLights.needsUpdate=t,e.pointLightShadows.needsUpdate=t,e.spotLights.needsUpdate=t,e.spotLightShadows.needsUpdate=t,e.rectAreaLights.needsUpdate=t,e.hemisphereLights.needsUpdate=t}function Dt(e){return e.isMeshLambertMaterial||e.isMeshToonMaterial||e.isMeshPhongMaterial||e.isMeshStandardMaterial||e.isShadowMaterial||e.isShaderMaterial&&e.lights===!0}this.getActiveCubeFace=function(){return j},this.getActiveMipmapLevel=function(){return M},this.getRenderTarget=function(){return N},this.setRenderTargetTextures=function(e,t,n){let r=L.get(e);r.__autoAllocateDepthBuffer=e.resolveDepthBuffer===!1,r.__autoAllocateDepthBuffer===!1&&(r.__useRenderToTexture=!1),L.get(e.texture).__webglTexture=t,L.get(e.depthTexture).__webglTexture=r.__autoAllocateDepthBuffer?void 0:n,r.__hasExternalTextures=!0},this.setRenderTargetFramebuffer=function(e,t){let n=L.get(e);n.__webglFramebuffer=t,n.__useDefaultFramebuffer=t===void 0};let Ot=F.createFramebuffer();this.setRenderTarget=function(e,t=0,n=0){N=e,j=t,M=n;let r=null,i=!1,a=!1;if(e){let o=L.get(e);if(o.__useDefaultFramebuffer!==void 0){I.bindFramebuffer(F.FRAMEBUFFER,o.__webglFramebuffer),ae.copy(e.viewport),oe.copy(e.scissor),ce=e.scissorTest,I.viewport(ae),I.scissor(oe),I.setScissorTest(ce),re=-1;return}else if(o.__webglFramebuffer===void 0)R.setupRenderTarget(e);else if(o.__hasExternalTextures)R.rebindTextures(e,L.get(e.texture).__webglTexture,L.get(e.depthTexture).__webglTexture);else if(e.depthBuffer){let t=e.depthTexture;if(o.__boundDepthTexture!==t){if(t!==null&&L.has(t)&&(e.width!==t.image.width||e.height!==t.image.height))throw Error(`WebGLRenderTarget: Attached DepthTexture is initialized to the incorrect size.`);R.setupDepthRenderbuffer(e)}}let s=e.texture;(s.isData3DTexture||s.isDataArrayTexture||s.isCompressedArrayTexture)&&(a=!0);let c=L.get(e).__webglFramebuffer;e.isWebGLCubeRenderTarget?(r=Array.isArray(c[t])?c[t][n]:c[t],i=!0):r=e.samples>0&&R.useMultisampledRTT(e)===!1?L.get(e).__webglMultisampledFramebuffer:Array.isArray(c)?c[n]:c,ae.copy(e.viewport),oe.copy(e.scissor),ce=e.scissorTest}else ae.copy(_e).multiplyScalar(me).floor(),oe.copy(ve).multiplyScalar(me).floor(),ce=ye;if(n!==0&&(r=Ot),I.bindFramebuffer(F.FRAMEBUFFER,r)&&I.drawBuffers(e,r),I.viewport(ae),I.scissor(oe),I.setScissorTest(ce),i){let r=L.get(e.texture);F.framebufferTexture2D(F.FRAMEBUFFER,F.COLOR_ATTACHMENT0,F.TEXTURE_CUBE_MAP_POSITIVE_X+t,r.__webglTexture,n)}else if(a){let r=t;for(let t=0;t<e.textures.length;t++){let i=L.get(e.textures[t]);F.framebufferTextureLayer(F.FRAMEBUFFER,F.COLOR_ATTACHMENT0+t,i.__webglTexture,n,r)}}else if(e!==null&&n!==0){let t=L.get(e.texture);F.framebufferTexture2D(F.FRAMEBUFFER,F.COLOR_ATTACHMENT0,F.TEXTURE_2D,t.__webglTexture,n)}re=-1},this.readRenderTargetPixels=function(e,t,n,r,i,a,o,s=0){if(!(e&&e.isWebGLRenderTarget)){B(`WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.`);return}let c=L.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&o!==void 0&&(c=c[o]),c){I.bindFramebuffer(F.FRAMEBUFFER,c);try{let o=e.textures[s],c=o.format,l=o.type;if(!je.textureFormatReadable(c)){B(`WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.`);return}if(!je.textureTypeReadable(l)){B(`WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.`);return}t>=0&&t<=e.width-r&&n>=0&&n<=e.height-i&&(e.textures.length>1&&F.readBuffer(F.COLOR_ATTACHMENT0+s),F.readPixels(t,n,r,i,Je.convert(c),Je.convert(l),a))}finally{let e=N===null?null:L.get(N).__webglFramebuffer;I.bindFramebuffer(F.FRAMEBUFFER,e)}}},this.readRenderTargetPixelsAsync=async function(e,t,n,r,i,a,o,s=0){if(!(e&&e.isWebGLRenderTarget))throw Error(`THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.`);let c=L.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&o!==void 0&&(c=c[o]),c)if(t>=0&&t<=e.width-r&&n>=0&&n<=e.height-i){I.bindFramebuffer(F.FRAMEBUFFER,c);let o=e.textures[s],l=o.format,u=o.type;if(!je.textureFormatReadable(l))throw Error(`THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.`);if(!je.textureTypeReadable(u))throw Error(`THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.`);let d=F.createBuffer();F.bindBuffer(F.PIXEL_PACK_BUFFER,d),F.bufferData(F.PIXEL_PACK_BUFFER,a.byteLength,F.STREAM_READ),e.textures.length>1&&F.readBuffer(F.COLOR_ATTACHMENT0+s),F.readPixels(t,n,r,i,Je.convert(l),Je.convert(u),0);let f=N===null?null:L.get(N).__webglFramebuffer;I.bindFramebuffer(F.FRAMEBUFFER,f);let p=F.fenceSync(F.SYNC_GPU_COMMANDS_COMPLETE,0);return F.flush(),await ut(F,p,4),F.bindBuffer(F.PIXEL_PACK_BUFFER,d),F.getBufferSubData(F.PIXEL_PACK_BUFFER,0,a),F.deleteBuffer(d),F.deleteSync(p),a}else throw Error(`THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.`)},this.copyFramebufferToTexture=function(e,t=null,n=0){let r=2**-n,i=Math.floor(e.image.width*r),a=Math.floor(e.image.height*r),o=t===null?0:t.x,s=t===null?0:t.y;R.setTexture2D(e,0),F.copyTexSubImage2D(F.TEXTURE_2D,n,0,0,o,s,i,a),I.unbindTexture()};let kt=F.createFramebuffer(),At=F.createFramebuffer();this.copyTextureToTexture=function(e,t,n=null,r=null,i=0,a=null){a===null&&(i===0?a=0:(lt(`WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels.`),a=i,i=0));let o,s,c,l,u,d,f,p,m,h=e.isCompressedTexture?e.mipmaps[a]:e.image;if(n!==null)o=n.max.x-n.min.x,s=n.max.y-n.min.y,c=n.isBox3?n.max.z-n.min.z:1,l=n.min.x,u=n.min.y,d=n.isBox3?n.min.z:0;else{let t=2**-i;o=Math.floor(h.width*t),s=Math.floor(h.height*t),c=e.isDataArrayTexture?h.depth:e.isData3DTexture?Math.floor(h.depth*t):1,l=0,u=0,d=0}r===null?(f=0,p=0,m=0):(f=r.x,p=r.y,m=r.z);let g=Je.convert(t.format),_=Je.convert(t.type),v;t.isData3DTexture?(R.setTexture3D(t,0),v=F.TEXTURE_3D):t.isDataArrayTexture||t.isCompressedArrayTexture?(R.setTexture2DArray(t,0),v=F.TEXTURE_2D_ARRAY):(R.setTexture2D(t,0),v=F.TEXTURE_2D),F.pixelStorei(F.UNPACK_FLIP_Y_WEBGL,t.flipY),F.pixelStorei(F.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t.premultiplyAlpha),F.pixelStorei(F.UNPACK_ALIGNMENT,t.unpackAlignment);let y=F.getParameter(F.UNPACK_ROW_LENGTH),b=F.getParameter(F.UNPACK_IMAGE_HEIGHT),x=F.getParameter(F.UNPACK_SKIP_PIXELS),S=F.getParameter(F.UNPACK_SKIP_ROWS),C=F.getParameter(F.UNPACK_SKIP_IMAGES);F.pixelStorei(F.UNPACK_ROW_LENGTH,h.width),F.pixelStorei(F.UNPACK_IMAGE_HEIGHT,h.height),F.pixelStorei(F.UNPACK_SKIP_PIXELS,l),F.pixelStorei(F.UNPACK_SKIP_ROWS,u),F.pixelStorei(F.UNPACK_SKIP_IMAGES,d);let w=e.isDataArrayTexture||e.isData3DTexture,T=t.isDataArrayTexture||t.isData3DTexture;if(e.isDepthTexture){let n=L.get(e),r=L.get(t),h=L.get(n.__renderTarget),g=L.get(r.__renderTarget);I.bindFramebuffer(F.READ_FRAMEBUFFER,h.__webglFramebuffer),I.bindFramebuffer(F.DRAW_FRAMEBUFFER,g.__webglFramebuffer);for(let n=0;n<c;n++)w&&(F.framebufferTextureLayer(F.READ_FRAMEBUFFER,F.COLOR_ATTACHMENT0,L.get(e).__webglTexture,i,d+n),F.framebufferTextureLayer(F.DRAW_FRAMEBUFFER,F.COLOR_ATTACHMENT0,L.get(t).__webglTexture,a,m+n)),F.blitFramebuffer(l,u,o,s,f,p,o,s,F.DEPTH_BUFFER_BIT,F.NEAREST);I.bindFramebuffer(F.READ_FRAMEBUFFER,null),I.bindFramebuffer(F.DRAW_FRAMEBUFFER,null)}else if(i!==0||e.isRenderTargetTexture||L.has(e)){let n=L.get(e),r=L.get(t);I.bindFramebuffer(F.READ_FRAMEBUFFER,kt),I.bindFramebuffer(F.DRAW_FRAMEBUFFER,At);for(let e=0;e<c;e++)w?F.framebufferTextureLayer(F.READ_FRAMEBUFFER,F.COLOR_ATTACHMENT0,n.__webglTexture,i,d+e):F.framebufferTexture2D(F.READ_FRAMEBUFFER,F.COLOR_ATTACHMENT0,F.TEXTURE_2D,n.__webglTexture,i),T?F.framebufferTextureLayer(F.DRAW_FRAMEBUFFER,F.COLOR_ATTACHMENT0,r.__webglTexture,a,m+e):F.framebufferTexture2D(F.DRAW_FRAMEBUFFER,F.COLOR_ATTACHMENT0,F.TEXTURE_2D,r.__webglTexture,a),i===0?T?F.copyTexSubImage3D(v,a,f,p,m+e,l,u,o,s):F.copyTexSubImage2D(v,a,f,p,l,u,o,s):F.blitFramebuffer(l,u,o,s,f,p,o,s,F.COLOR_BUFFER_BIT,F.NEAREST);I.bindFramebuffer(F.READ_FRAMEBUFFER,null),I.bindFramebuffer(F.DRAW_FRAMEBUFFER,null)}else T?e.isDataTexture||e.isData3DTexture?F.texSubImage3D(v,a,f,p,m,o,s,c,g,_,h.data):t.isCompressedArrayTexture?F.compressedTexSubImage3D(v,a,f,p,m,o,s,c,g,h.data):F.texSubImage3D(v,a,f,p,m,o,s,c,g,_,h):e.isDataTexture?F.texSubImage2D(F.TEXTURE_2D,a,f,p,o,s,g,_,h.data):e.isCompressedTexture?F.compressedTexSubImage2D(F.TEXTURE_2D,a,f,p,h.width,h.height,g,h.data):F.texSubImage2D(F.TEXTURE_2D,a,f,p,o,s,g,_,h);F.pixelStorei(F.UNPACK_ROW_LENGTH,y),F.pixelStorei(F.UNPACK_IMAGE_HEIGHT,b),F.pixelStorei(F.UNPACK_SKIP_PIXELS,x),F.pixelStorei(F.UNPACK_SKIP_ROWS,S),F.pixelStorei(F.UNPACK_SKIP_IMAGES,C),a===0&&t.generateMipmaps&&F.generateMipmap(v),I.unbindTexture()},this.initRenderTarget=function(e){L.get(e).__webglFramebuffer===void 0&&R.setupRenderTarget(e)},this.initTexture=function(e){e.isCubeTexture?R.setTextureCube(e,0):e.isData3DTexture?R.setTexture3D(e,0):e.isDataArrayTexture||e.isCompressedArrayTexture?R.setTexture2DArray(e,0):R.setTexture2D(e,0),I.unbindTexture()},this.resetState=function(){j=0,M=0,N=null,I.reset(),Ze.reset()},typeof __THREE_DEVTOOLS__<`u`&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(`observe`,{detail:this}))}get coordinateSystem(){return tt}get outputColorSpace(){return this._outputColorSpace}set outputColorSpace(e){this._outputColorSpace=e;let t=this.getContext();t.drawingBufferColorSpace=G._getDrawingBufferColorSpace(e),t.unpackColorSpace=G._getUnpackColorSpace()}},Ru=1.25,zu=65535;zu<<16;var Bu=2**-24,Vu=Symbol(`SKIP_GENERATION`),Hu={strategy:0,maxDepth:40,maxLeafSize:10,useSharedArrayBuffer:!1,setBoundingBox:!0,onProgress:null,indirect:!1,verbose:!0,range:null,[Vu]:!1};function Uu(e,t,n){return n.min.x=t[e],n.min.y=t[e+1],n.min.z=t[e+2],n.max.x=t[e+3],n.max.y=t[e+4],n.max.z=t[e+5],n}function Wu(e){let t=-1,n=-1/0;for(let r=0;r<3;r++){let i=e[r+3]-e[r];i>n&&(n=i,t=r)}return t}function Gu(e,t){t.set(e)}function Ku(e,t,n){let r,i;for(let a=0;a<3;a++){let o=a+3;r=e[a],i=t[a],n[a]=r<i?r:i,r=e[o],i=t[o],n[o]=r>i?r:i}}function qu(e,t,n){for(let r=0;r<3;r++){let i=t[e+2*r],a=t[e+2*r+1],o=i-a,s=i+a;o<n[r]&&(n[r]=o),s>n[r+3]&&(n[r+3]=s)}}function Ju(e){let t=e[3]-e[0],n=e[4]-e[1],r=e[5]-e[2];return 2*(t*n+n*r+r*t)}function Yu(e,t){return t[e+15]===zu}function Xu(e,t){return t[e+6]}function Zu(e,t){return t[e+14]}function Qu(e){return e+8}function $u(e,t){return e+t[e+6]*8}function ed(e,t){return t[e+7]}function td(e){return e}function nd(e,t,n,r,i){let a=1/0,o=1/0,s=1/0,c=-1/0,l=-1/0,u=-1/0,d=1/0,f=1/0,p=1/0,m=-1/0,h=-1/0,g=-1/0,_=e.offset||0;for(let r=(t-_)*6,i=(t+n-_)*6;r<i;r+=6){let t=e[r+0],n=e[r+1],i=t-n,_=t+n;i<a&&(a=i),_>c&&(c=_),t<d&&(d=t),t>m&&(m=t);let v=e[r+2],y=e[r+3],b=v-y,x=v+y;b<o&&(o=b),x>l&&(l=x),v<f&&(f=v),v>h&&(h=v);let S=e[r+4],C=e[r+5],w=S-C,T=S+C;w<s&&(s=w),T>u&&(u=T),S<p&&(p=S),S>g&&(g=S)}r[0]=a,r[1]=o,r[2]=s,r[3]=c,r[4]=l,r[5]=u,i[0]=d,i[1]=f,i[2]=p,i[3]=m,i[4]=h,i[5]=g}var rd=32,id=(e,t)=>e.candidate-t.candidate,ad=Array(rd).fill().map(()=>({count:0,bounds:new Float32Array(6),rightCacheBounds:new Float32Array(6),leftCacheBounds:new Float32Array(6),candidate:0})),od=new Float32Array(6);function sd(e,t,n,r,i,a){let o=-1,s=0;if(a===0)o=Wu(t),o!==-1&&(s=(t[o]+t[o+3])/2);else if(a===1)o=Wu(e),o!==-1&&(s=cd(n,r,i,o));else if(a===2){let a=Ju(e),c=Ru*i,l=n.offset||0,u=(r-l)*6,d=(r+i-l)*6;for(let e=0;e<3;e++){let r=t[e],l=(t[e+3]-r)/rd;if(i<rd/4){let t=[...ad];t.length=i;let r=0;for(let i=u;i<d;i+=6,r++){let a=t[r];a.candidate=n[i+2*e],a.count=0;let{bounds:o,leftCacheBounds:s,rightCacheBounds:c}=a;for(let e=0;e<3;e++)c[e]=1/0,c[e+3]=-1/0,s[e]=1/0,s[e+3]=-1/0,o[e]=1/0,o[e+3]=-1/0;qu(i,n,o)}t.sort(id);let l=i;for(let e=0;e<l;e++){let n=t[e];for(;e+1<l&&t[e+1].candidate===n.candidate;)t.splice(e+1,1),l--}for(let r=u;r<d;r+=6){let i=n[r+2*e];for(let e=0;e<l;e++){let a=t[e];i>=a.candidate?qu(r,n,a.rightCacheBounds):(qu(r,n,a.leftCacheBounds),a.count++)}}for(let n=0;n<l;n++){let r=t[n],l=r.count,u=i-r.count,d=r.leftCacheBounds,f=r.rightCacheBounds,p=0;l!==0&&(p=Ju(d)/a);let m=0;u!==0&&(m=Ju(f)/a);let h=1+Ru*(p*l+m*u);h<c&&(o=e,c=h,s=r.candidate)}}else{for(let e=0;e<rd;e++){let t=ad[e];t.count=0,t.candidate=r+l+e*l;let n=t.bounds;for(let e=0;e<3;e++)n[e]=1/0,n[e+3]=-1/0}for(let t=u;t<d;t+=6){let i=~~((n[t+2*e]-r)/l);i>=rd&&(i=rd-1);let a=ad[i];a.count++,qu(t,n,a.bounds)}let t=ad[rd-1];Gu(t.bounds,t.rightCacheBounds);for(let e=rd-2;e>=0;e--){let t=ad[e],n=ad[e+1];Ku(t.bounds,n.rightCacheBounds,t.rightCacheBounds)}let f=0;for(let t=0;t<rd-1;t++){let n=ad[t],r=n.count,l=n.bounds,u=ad[t+1].rightCacheBounds;r!==0&&(f===0?Gu(l,od):Ku(l,od,od)),f+=r;let d=0,p=0;f!==0&&(d=Ju(od)/a);let m=i-f;m!==0&&(p=Ju(u)/a);let h=1+Ru*(d*f+p*m);h<c&&(o=e,c=h,s=n.candidate)}}}}else console.warn(`BVH: Invalid build strategy value ${a} used.`);return{axis:o,pos:s}}function cd(e,t,n,r){let i=0,a=e.offset;for(let o=t,s=t+n;o<s;o++)i+=e[(o-a)*6+r*2];return i/n}var ld=class{constructor(){this.boundingData=new Float32Array(6)}};function ud(e,t,n,r,i,a){let o=r,s=r+i-1,c=a.pos,l=a.axis*2,u=n.offset||0;for(;;){for(;o<=s&&n[(o-u)*6+l]<c;)o++;for(;o<=s&&n[(s-u)*6+l]>=c;)s--;if(o<s){for(let n=0;n<t;n++){let r=e[o*t+n];e[o*t+n]=e[s*t+n],e[s*t+n]=r}for(let e=0;e<6;e++){let t=o-u,r=s-u,i=n[t*6+e];n[t*6+e]=n[r*6+e],n[r*6+e]=i}o++,s--}else return o}}var dd,fd,pd,md,hd=2**32;function gd(e){return`count`in e?1:1+gd(e.left)+gd(e.right)}function _d(e,t,n){return dd=new Float32Array(n),fd=new Uint32Array(n),pd=new Uint16Array(n),md=new Uint8Array(n),vd(e,t)}function vd(e,t){let n=e/4,r=e/2,i=`count`in t,a=t.boundingData;for(let e=0;e<6;e++)dd[n+e]=a[e];if(i)return t.buffer?(md.set(new Uint8Array(t.buffer),e),e+t.buffer.byteLength):(fd[n+6]=t.offset,pd[r+14]=t.count,pd[r+15]=zu,e+32);{let{left:r,right:i,splitAxis:a}=t,o=vd(e+32,r),s=e/32,c=o/32-s;if(c>hd)throw Error(`MeshBVH: Cannot store relative child node offset greater than 32 bits.`);return fd[n+6]=c,fd[n+7]=a,vd(o,i)}}function yd(e,t,n,r,i,a){let{maxDepth:o,verbose:s,maxLeafSize:c,strategy:l,onProgress:u}=i,d=e.primitiveBuffer,f=e.primitiveBufferStride,p=new Float32Array(6),m=!1,h=new ld;return nd(t,n,r,h.boundingData,p),_(h,n,r,p),h;function g(e){u&&u((e-a.offset)/a.count)}function _(e,n,r,i=null,a=0){if(!m&&a>=o&&(m=!0,s&&console.warn(`BVH: Max depth of ${o} reached when generating BVH. Consider increasing maxDepth.`)),r<=c||a>=o)return g(n+r),e.offset=n,e.count=r,e;let u=sd(e.boundingData,i,t,n,r,l);if(u.axis===-1)return g(n+r),e.offset=n,e.count=r,e;let h=ud(d,f,t,n,r,u);if(h===n||h===n+r)g(n+r),e.offset=n,e.count=r;else{e.splitAxis=u.axis;let i=new ld,o=n,s=h-n;e.left=i,nd(t,o,s,i.boundingData,p),_(i,o,s,p,a+1);let c=new ld,l=h,d=r-s;e.right=c,nd(t,l,d,c.boundingData,p),_(c,l,d,p,a+1)}return e}}function bd(e,t){let n=t.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer,r=e.getRootRanges(t.range),i=r[0],a=r[r.length-1],o={offset:i.offset,count:a.offset+a.count-i.offset},s=new Float32Array(6*o.count);s.offset=o.offset,e.computePrimitiveBounds(o.offset,o.count,s),e._roots=r.map(r=>{let i=yd(e,s,r.offset,r.count,t,o),a=new n(32*gd(i));return _d(0,i,a),a})}var xd=class{constructor(e){this._getNewPrimitive=e,this._primitives=[]}getPrimitive(){let e=this._primitives;return e.length===0?this._getNewPrimitive():e.pop()}releasePrimitive(e){this._primitives.push(e)}},Q=new class{constructor(){this.float32Array=null,this.uint16Array=null,this.uint32Array=null;let e=[],t=null;this.setBuffer=n=>{t&&e.push(t),t=n,this.float32Array=new Float32Array(n),this.uint16Array=new Uint16Array(n),this.uint32Array=new Uint32Array(n)},this.clearBuffer=()=>{t=null,this.float32Array=null,this.uint16Array=null,this.uint32Array=null,e.length!==0&&this.setBuffer(e.pop())}}},Sd,Cd,wd=[],Td=new xd(()=>new on);function Ed(e,t,n,r,i,a){Sd=Td.getPrimitive(),Cd=Td.getPrimitive(),wd.push(Sd,Cd),Q.setBuffer(e._roots[t]);let o=Dd(0,e.geometry,n,r,i,a);Q.clearBuffer(),Td.releasePrimitive(Sd),Td.releasePrimitive(Cd),wd.pop(),wd.pop();let s=wd.length;return s>0&&(Cd=wd[s-1],Sd=wd[s-2]),o}function Dd(e,t,n,r,i=null,a=0,o=0){let{float32Array:s,uint16Array:c,uint32Array:l}=Q,u=e*2;if(Yu(u,c)){let t=Xu(e,l),n=Zu(u,c);return Uu(td(e),s,Sd),r(t,n,!1,o,a+e/8,Sd)}else{let u=Qu(e),p=$u(e,l),m=u,h=p,g,_,v,y;if(i&&(v=Sd,y=Cd,Uu(td(m),s,v),Uu(td(h),s,y),g=i(v),_=i(y),_<g)){m=p,h=u;let e=g;g=_,_=e,v=y}v||(v=Sd,Uu(td(m),s,v));let b=Yu(m*2,c),x=n(v,b,g,o+1,a+m/8),S;if(x===2){let e=d(m);S=r(e,f(m)-e,!0,o+1,a+m/8,v)}else S=x&&Dd(m,t,n,r,i,a,o+1);if(S)return!0;y=Cd,Uu(td(h),s,y);let C=Yu(h*2,c),w=n(y,C,_,o+1,a+h/8),T;if(w===2){let e=d(h);T=r(e,f(h)-e,!0,o+1,a+h/8,y)}else T=w&&Dd(h,t,n,r,i,a,o+1);if(T)return!0;return!1;function d(e){let{uint16Array:t,uint32Array:n}=Q,r=e*2;for(;!Yu(r,t);)e=Qu(e),r=e*2;return Xu(e,n)}function f(e){let{uint16Array:t,uint32Array:n}=Q,r=e*2;for(;!Yu(r,t);)e=$u(e,n),r=e*2;return Xu(e,n)+Zu(r,t)}}}var Od=new Q.constructor,kd=new Q.constructor,Ad=new xd(()=>new on),jd=new on,Md=new on,Nd=new on,Pd=new on,Fd=!1;function Id(e,t,n,r){if(Fd)throw Error(`MeshBVH: Recursive calls to bvhcast not supported.`);Fd=!0;let i=e._roots,a=t._roots,o,s=0,c=0,l=new q().copy(n).invert();for(let e=0,t=i.length;e<t;e++){Od.setBuffer(i[e]),c=0;let t=Ad.getPrimitive();Uu(td(0),Od.float32Array,t),t.applyMatrix4(l);for(let e=0,i=a.length;e<i&&(kd.setBuffer(a[e]),o=Ld(0,0,n,l,r,s,c,0,0,t),kd.clearBuffer(),c+=a[e].byteLength/32,!o);e++);if(Ad.releasePrimitive(t),Od.clearBuffer(),s+=i[e].byteLength/32,o)break}return Fd=!1,o}function Ld(e,t,n,r,i,a=0,o=0,s=0,c=0,l=null,u=!1){let d,f;u?(d=kd,f=Od):(d=Od,f=kd);let p=d.float32Array,m=d.uint32Array,h=d.uint16Array,g=f.float32Array,_=f.uint32Array,v=f.uint16Array,y=e*2,b=t*2,x=Yu(y,h),S=Yu(b,v),C=!1;if(S&&x)C=u?i(Xu(t,_),Zu(t*2,v),Xu(e,m),Zu(e*2,h),c,o+t/8,s,a+e/8):i(Xu(e,m),Zu(e*2,h),Xu(t,_),Zu(t*2,v),s,a+e/8,c,o+t/8);else if(S){let l=Ad.getPrimitive();Uu(td(t),g,l),l.applyMatrix4(n);let d=Qu(e),f=$u(e,m);Uu(td(d),p,jd),Uu(td(f),p,Md);let h=l.intersectsBox(jd),_=l.intersectsBox(Md);C=h&&Ld(t,d,r,n,i,o,a,c,s+1,l,!u)||_&&Ld(t,f,r,n,i,o,a,c,s+1,l,!u),Ad.releasePrimitive(l)}else{let d=Qu(t),f=$u(t,_);Uu(td(d),g,Nd),Uu(td(f),g,Pd);let h=l.intersectsBox(Nd),v=l.intersectsBox(Pd);if(h&&v)C=Ld(e,d,n,r,i,a,o,s,c+1,l,u)||Ld(e,f,n,r,i,a,o,s,c+1,l,u);else if(h)if(x)C=Ld(e,d,n,r,i,a,o,s,c+1,l,u);else{let t=Ad.getPrimitive();t.copy(Nd).applyMatrix4(n);let l=Qu(e),f=$u(e,m);Uu(td(l),p,jd),Uu(td(f),p,Md);let h=t.intersectsBox(jd),g=t.intersectsBox(Md);C=h&&Ld(d,l,r,n,i,o,a,c,s+1,t,!u)||g&&Ld(d,f,r,n,i,o,a,c,s+1,t,!u),Ad.releasePrimitive(t)}else if(v)if(x)C=Ld(e,f,n,r,i,a,o,s,c+1,l,u);else{let t=Ad.getPrimitive();t.copy(Pd).applyMatrix4(n);let l=Qu(e),d=$u(e,m);Uu(td(l),p,jd),Uu(td(d),p,Md);let h=t.intersectsBox(jd),g=t.intersectsBox(Md);C=h&&Ld(f,l,r,n,i,o,a,c,s+1,t,!u)||g&&Ld(f,d,r,n,i,o,a,c,s+1,t,!u),Ad.releasePrimitive(t)}}return C}var Rd=new on,zd=new Float32Array(6),Bd=class{constructor(){this._roots=null,this.primitiveBuffer=null,this.primitiveBufferStride=null}init(e){e={...Hu,...e},bd(this,e)}getRootRanges(){throw Error(`BVH: getRootRanges() not implemented`)}writePrimitiveBounds(){throw Error(`BVH: writePrimitiveBounds() not implemented`)}writePrimitiveRangeBounds(e,t,n,r){let i=1/0,a=1/0,o=1/0,s=-1/0,c=-1/0,l=-1/0;for(let n=e,r=e+t;n<r;n++){this.writePrimitiveBounds(n,zd,0);let[e,t,r,u,d,f]=zd;e<i&&(i=e),u>s&&(s=u),t<a&&(a=t),d>c&&(c=d),r<o&&(o=r),f>l&&(l=f)}return n[r+0]=i,n[r+1]=a,n[r+2]=o,n[r+3]=s,n[r+4]=c,n[r+5]=l,n}computePrimitiveBounds(e,t,n){let r=n.offset||0;for(let i=e,a=e+t;i<a;i++){this.writePrimitiveBounds(i,zd,0);let[e,t,a,o,s,c]=zd,l=(e+o)/2,u=(t+s)/2,d=(a+c)/2,f=(o-e)/2,p=(s-t)/2,m=(c-a)/2,h=(i-r)*6;n[h+0]=l,n[h+1]=f+(Math.abs(l)+f)*Bu,n[h+2]=u,n[h+3]=p+(Math.abs(u)+p)*Bu,n[h+4]=d,n[h+5]=m+(Math.abs(d)+m)*Bu}return n}shiftPrimitiveOffsets(e){let t=this._indirectBuffer;if(t)for(let n=0,r=t.length;n<r;n++)t[n]+=e;else{let t=this._roots;for(let n=0;n<t.length;n++){let r=t[n],i=new Uint32Array(r),a=new Uint16Array(r),o=r.byteLength/32;for(let t=0;t<o;t++){let n=8*t;Yu(2*n,a)&&(i[n+6]+=e)}}}}traverse(e,t=0){let n=this._roots[t],r=new Uint32Array(n),i=new Uint16Array(n);a(0);function a(t,o=0){let s=t*2,c=Yu(s,i);if(c){let a=r[t+6],l=i[s+14];e(o,c,new Float32Array(n,t*4,6),a,l)}else{let i=Qu(t),s=$u(t,r),l=ed(t,r);e(o,c,new Float32Array(n,t*4,6),l)||(a(i,o+1),a(s,o+1))}}}refit(){let e=this._roots;for(let t=0,n=e.length;t<n;t++){let n=e[t],r=new Uint32Array(n),i=new Uint16Array(n),a=new Float32Array(n),o=n.byteLength/32;for(let e=o-1;e>=0;e--){let t=e*8,n=t*2;if(Yu(n,i)){let e=Xu(t,r),o=Zu(n,i);this.writePrimitiveRangeBounds(e,o,zd,0),a.set(zd,t)}else{let e=Qu(t),n=$u(t,r);for(let r=0;r<3;r++){let i=a[e+r],o=a[e+r+3],s=a[n+r],c=a[n+r+3];a[t+r]=i<s?i:s,a[t+r+3]=o>c?o:c}}}}}getBoundingBox(e){return e.makeEmpty(),this._roots.forEach(t=>{Uu(0,new Float32Array(t),Rd),e.union(Rd)}),e}shapecast(e){let{boundsTraverseOrder:t,intersectsBounds:n,intersectsRange:r,intersectsPrimitive:i,scratchPrimitive:a,iterate:o}=e;if(r&&i){let e=r;r=(t,n,r,s,c)=>e(t,n,r,s,c)?!0:o(t,n,this,i,r,s,a)}else r||=i?(e,t,n,r)=>o(e,t,this,i,n,r,a):(e,t,n)=>n;let s=!1,c=0,l=this._roots;for(let e=0,i=l.length;e<i;e++){let i=l[e];if(s=Ed(this,e,n,r,t,c),s)break;c+=i.byteLength/32}return s}bvhcast(e,t,n){let{intersectsRanges:r}=n;return Id(this,e,t,r)}};function Vd(){return typeof SharedArrayBuffer<`u`}function Hd(e){return e.index?e.index.count:e.attributes.position.count}function Ud(e){return Hd(e)/3}function Wd(e,t=ArrayBuffer){return e>65535?new Uint32Array(new t(4*e)):new Uint16Array(new t(2*e))}function Gd(e,t){if(!e.index){let n=e.attributes.position.count,r=Wd(n,t.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer);e.setIndex(new jr(r,1));for(let e=0;e<n;e++)r[e]=e}}function Kd(e,t,n){let r=Hd(e)/n,i=t||e.drawRange,a=i.start/n,o=(i.start+i.count)/n,s=Math.max(0,a),c=Math.min(r,o)-s;return{offset:Math.floor(s),count:Math.floor(c)}}function qd(e,t){return e.groups.map(e=>({offset:e.start/t,count:e.count/t}))}function Jd(e,t,n){let r=Kd(e,t,n),i=qd(e,n);if(!i.length)return[r];let a=[],o=r.offset,s=r.offset+r.count,c=Hd(e)/n,l=[];for(let e of i){let{offset:t,count:n}=e,r=t,i=t+(isFinite(n)?n:c-t);r<s&&i>o&&(l.push({pos:Math.max(o,r),isStart:!0}),l.push({pos:Math.min(s,i),isStart:!1}))}l.sort((e,t)=>e.pos===t.pos?e.type===`end`?-1:1:e.pos-t.pos);let u=0,d=null;for(let e of l){let t=e.pos;u!==0&&t!==d&&a.push({offset:d,count:t-d}),u+=e.isStart?1:-1,d=t}return a}function Yd(e,t){let n=e[e.length-1],r=n.offset+n.count>2**16,i=e.reduce((e,t)=>e+t.count,0),a=r?4:2,o=t?new SharedArrayBuffer(i*a):new ArrayBuffer(i*a),s=r?new Uint32Array(o):new Uint16Array(o),c=0;for(let t=0;t<e.length;t++){let{offset:n,count:r}=e[t];for(let e=0;e<r;e++)s[c+e]=n+e;c+=r}return s}var Xd=class extends Bd{get indirect(){return!!this._indirectBuffer}get primitiveStride(){return null}get primitiveBufferStride(){return this.indirect?1:this.primitiveStride}set primitiveBufferStride(e){}get primitiveBuffer(){return this.indirect?this._indirectBuffer:this.geometry.index.array}set primitiveBuffer(e){}constructor(e,t={}){if(!e.isBufferGeometry)throw Error(`BVH: Only BufferGeometries are supported.`);if(e.index&&e.index.isInterleavedBufferAttribute)throw Error(`BVH: InterleavedBufferAttribute is not supported for the index attribute.`);if(t.useSharedArrayBuffer&&!Vd())throw Error(`BVH: SharedArrayBuffer is not available.`);super(),this.geometry=e,this.resolvePrimitiveIndex=t.indirect?e=>this._indirectBuffer[e]:e=>e,this.primitiveBuffer=null,this.primitiveBufferStride=null,this._indirectBuffer=null,t={...Hu,...t},t[Vu]||this.init(t)}init(e){let{geometry:t,primitiveStride:n}=this;if(e.indirect){let r=Yd(Jd(t,e.range,n),e.useSharedArrayBuffer);this._indirectBuffer=r}else Gd(t,e);super.init(e),!t.boundingBox&&e.setBoundingBox&&(t.boundingBox=this.getBoundingBox(new on))}getRootRanges(e){return this.indirect?[{offset:0,count:this._indirectBuffer.length}]:Jd(this.geometry,e,this.primitiveStride)}raycastObject3D(){throw Error(`BVH: raycastObject3D() not implemented`)}},Zd=class{constructor(){this.min=1/0,this.max=-1/0}setFromPointsField(e,t){let n=1/0,r=-1/0;for(let i=0,a=e.length;i<a;i++){let a=e[i][t];n=a<n?a:n,r=a>r?a:r}this.min=n,this.max=r}setFromPoints(e,t){let n=1/0,r=-1/0;for(let i=0,a=t.length;i<a;i++){let a=t[i],o=e.dot(a);n=o<n?o:n,r=o>r?o:r}this.min=n,this.max=r}isSeparated(e){return this.min>e.max||e.min>this.max}};Zd.prototype.setFromBox=(function(){let e=new U;return function(t,n){let r=n.min,i=n.max,a=1/0,o=-1/0;for(let n=0;n<=1;n++)for(let s=0;s<=1;s++)for(let c=0;c<=1;c++){e.x=r.x*n+i.x*(1-n),e.y=r.y*s+i.y*(1-s),e.z=r.z*c+i.z*(1-c);let l=t.dot(e);a=Math.min(l,a),o=Math.max(l,o)}this.min=a,this.max=o}})(),(function(){let e=new Zd;return function(t,n){let r=t.points,i=t.satAxes,a=t.satBounds,o=n.points,s=n.satAxes,c=n.satBounds;for(let t=0;t<3;t++){let n=a[t],r=i[t];if(e.setFromPoints(r,o),n.isSeparated(e))return!1}for(let t=0;t<3;t++){let n=c[t],i=s[t];if(e.setFromPoints(i,r),n.isSeparated(e))return!1}}})();var Qd=(function(){let e=new U,t=new U,n=new U;return function(r,i,a){let o=r.start,s=e,c=i.start,l=t;n.subVectors(o,c),e.subVectors(r.end,r.start),t.subVectors(i.end,i.start);let u=n.dot(l),d=l.dot(s),f=l.dot(l),p=n.dot(s),m=s.dot(s)*f-d*d,h,g;h=m===0?0:(u*d-p*f)/m,g=(u+h*d)/f,a.x=h,a.y=g}})(),$d=(function(){let e=new H,t=new U,n=new U;return function(r,i,a,o){Qd(r,i,e);let s=e.x,c=e.y;if(s>=0&&s<=1&&c>=0&&c<=1){r.at(s,a),i.at(c,o);return}else if(s>=0&&s<=1){c<0?i.at(0,o):i.at(1,o),r.closestPointToPoint(o,!0,a);return}else if(c>=0&&c<=1){s<0?r.at(0,a):r.at(1,a),i.closestPointToPoint(a,!0,o);return}else{let e;e=s<0?r.start:r.end;let l;l=c<0?i.start:i.end;let u=t,d=n;if(r.closestPointToPoint(l,!0,t),i.closestPointToPoint(e,!0,n),u.distanceToSquared(l)<=d.distanceToSquared(e)){a.copy(u),o.copy(l);return}else{a.copy(e),o.copy(d);return}}}})(),ef=(function(){let e=new U,t=new U,n=new ki,r=new _s;return function(i,a){let{radius:o,center:s}=i,{a:c,b:l,c:u}=a;if(r.start=c,r.end=l,r.closestPointToPoint(s,!0,e).distanceTo(s)<=o||(r.start=c,r.end=u,r.closestPointToPoint(s,!0,e).distanceTo(s)<=o)||(r.start=l,r.end=u,r.closestPointToPoint(s,!0,e).distanceTo(s)<=o))return!0;let d=a.getPlane(n);if(Math.abs(d.distanceToPoint(s))<=o){let e=d.projectPoint(s,t);if(a.containsPoint(e))return!0}return!1}})(),tf=[`x`,`y`,`z`],nf=1e-15,rf=nf*nf;function af(e){return Math.abs(e)<nf}var of=class extends yr{constructor(...e){super(...e),this.isExtendedTriangle=!0,this.satAxes=[,,,,].fill().map(()=>new U),this.satBounds=[,,,,].fill().map(()=>new Zd),this.points=[this.a,this.b,this.c],this.plane=new ki,this.isDegenerateIntoSegment=!1,this.isDegenerateIntoPoint=!1,this.degenerateSegment=new _s,this.needsUpdate=!0}intersectsSphere(e){return ef(e,this)}update(){let e=this.a,t=this.b,n=this.c,r=this.points,i=this.satAxes,a=this.satBounds,o=i[0],s=a[0];this.getNormal(o),s.setFromPoints(o,r);let c=i[1],l=a[1];c.subVectors(e,t),l.setFromPoints(c,r);let u=i[2],d=a[2];u.subVectors(t,n),d.setFromPoints(u,r);let f=i[3],p=a[3];f.subVectors(n,e),p.setFromPoints(f,r);let m=c.length(),h=u.length(),g=f.length();this.isDegenerateIntoPoint=!1,this.isDegenerateIntoSegment=!1,m<nf?h<nf||g<nf?this.isDegenerateIntoPoint=!0:(this.isDegenerateIntoSegment=!0,this.degenerateSegment.start.copy(e),this.degenerateSegment.end.copy(n)):h<nf?g<nf?this.isDegenerateIntoPoint=!0:(this.isDegenerateIntoSegment=!0,this.degenerateSegment.start.copy(t),this.degenerateSegment.end.copy(e)):g<nf&&(this.isDegenerateIntoSegment=!0,this.degenerateSegment.start.copy(n),this.degenerateSegment.end.copy(t)),this.plane.setFromNormalAndCoplanarPoint(o,e),this.needsUpdate=!1}};of.prototype.closestPointToSegment=(function(){let e=new U,t=new U,n=new _s;return function(r,i=null,a=null){let{start:o,end:s}=r,c=this.points,l,u=1/0;for(let o=0;o<3;o++){let s=(o+1)%3;n.start.copy(c[o]),n.end.copy(c[s]),$d(n,r,e,t),l=e.distanceToSquared(t),l<u&&(u=l,i&&i.copy(e),a&&a.copy(t))}return this.closestPointToPoint(o,e),l=o.distanceToSquared(e),l<u&&(u=l,i&&i.copy(e),a&&a.copy(o)),this.closestPointToPoint(s,e),l=s.distanceToSquared(e),l<u&&(u=l,i&&i.copy(e),a&&a.copy(s)),Math.sqrt(u)}})(),of.prototype.intersectsTriangle=(function(){let e=new of,t=new Zd,n=new Zd,r=new U,i=new U,a=new U,o=new U,s=new _s,c=new _s,l=new U,u=new H,d=new H;function f(e,i,a,s){let c=r;!e.isDegenerateIntoPoint&&!e.isDegenerateIntoSegment?c.copy(e.plane.normal):c.copy(i.plane.normal);let l=e.satBounds,u=e.satAxes;for(let r=1;r<4;r++){let a=l[r],s=u[r];if(t.setFromPoints(s,i.points),a.isSeparated(t)||(o.copy(c).cross(s),t.setFromPoints(o,e.points),n.setFromPoints(o,i.points),t.isSeparated(n)))return!1}let d=i.satBounds,f=i.satAxes;for(let r=1;r<4;r++){let a=d[r],s=f[r];if(t.setFromPoints(s,e.points),a.isSeparated(t)||(o.crossVectors(c,s),t.setFromPoints(o,e.points),n.setFromPoints(o,i.points),t.isSeparated(n)))return!1}return a&&(s||console.warn(`ExtendedTriangle.intersectsTriangle: Triangles are coplanar which does not support an output edge. Setting edge to 0, 0, 0.`),a.start.set(0,0,0),a.end.set(0,0,0)),!0}function p(e,t,n,r,i,a,o,s,c,l,u){let d=o/(o-s);l.x=r+(i-r)*d,u.start.subVectors(t,e).multiplyScalar(d).add(e),d=o/(o-c),l.y=r+(a-r)*d,u.end.subVectors(n,e).multiplyScalar(d).add(e)}function m(e,t,n,r,i,a,o,s,c,l,u){if(i>0)p(e.c,e.a,e.b,r,t,n,c,o,s,l,u);else if(a>0)p(e.b,e.a,e.c,n,t,r,s,o,c,l,u);else if(s*c>0||o!=0)p(e.a,e.b,e.c,t,n,r,o,s,c,l,u);else if(s!=0)p(e.b,e.a,e.c,n,t,r,s,o,c,l,u);else if(c!=0)p(e.c,e.a,e.b,r,t,n,c,o,s,l,u);else return!0;return!1}function h(e,t,n,i){let a=t.degenerateSegment,o=e.plane.distanceToPoint(a.start),s=e.plane.distanceToPoint(a.end);return af(o)?af(s)?f(e,t,n,i):(n&&(n.start.copy(a.start),n.end.copy(a.start)),e.containsPoint(a.start)):af(s)?(n&&(n.start.copy(a.end),n.end.copy(a.end)),e.containsPoint(a.end)):e.plane.intersectLine(a,r)==null?!1:(n&&(n.start.copy(r),n.end.copy(r)),e.containsPoint(r))}function g(e,t,n){let r=t.a;return af(e.plane.distanceToPoint(r))&&e.containsPoint(r)?(n&&(n.start.copy(r),n.end.copy(r)),!0):!1}function _(e,t,n){let i=e.degenerateSegment,a=t.a;return i.closestPointToPoint(a,!0,r),a.distanceToSquared(r)<rf?(n&&(n.start.copy(a),n.end.copy(a)),!0):!1}function v(e,t,n,o){if(e.isDegenerateIntoSegment)if(t.isDegenerateIntoSegment){let o=e.degenerateSegment,s=t.degenerateSegment,c=i,l=a;o.delta(c),s.delta(l);let u=r.subVectors(s.start,o.start),d=c.x*l.y-c.y*l.x;if(af(d))return!1;let f=(u.x*l.y-u.y*l.x)/d,p=-(c.x*u.y-c.y*u.x)/d;return f<0||f>1||p<0||p>1?!1:af(o.start.z+c.z*f-(s.start.z+l.z*p))?(n&&(n.start.copy(o.start).addScaledVector(c,f),n.end.copy(o.start).addScaledVector(c,f)),!0):!1}else if(t.isDegenerateIntoPoint)return _(e,t,n);else return h(t,e,n,o);else if(e.isDegenerateIntoPoint)return t.isDegenerateIntoPoint?t.a.distanceToSquared(e.a)<rf?(n&&(n.start.copy(e.a),n.end.copy(e.a)),!0):!1:t.isDegenerateIntoSegment?_(t,e,n):g(t,e,n);else if(t.isDegenerateIntoPoint)return g(e,t,n);else if(t.isDegenerateIntoSegment)return h(e,t,n,o)}return function(t,n=null,r=!1){this.needsUpdate&&this.update(),t.isExtendedTriangle?t.needsUpdate&&t.update():(e.copy(t),e.update(),t=e);let o=v(this,t,n,r);if(o!==void 0)return o;let p=this.plane,h=t.plane,g=h.distanceToPoint(this.a),_=h.distanceToPoint(this.b),y=h.distanceToPoint(this.c);af(g)&&(g=0),af(_)&&(_=0),af(y)&&(y=0);let b=g*_,x=g*y;if(b>0&&x>0)return!1;let S=p.distanceToPoint(t.a),C=p.distanceToPoint(t.b),w=p.distanceToPoint(t.c);af(S)&&(S=0),af(C)&&(C=0),af(w)&&(w=0);let T=S*C,E=S*w;if(T>0&&E>0)return!1;i.copy(p.normal),a.copy(h.normal);let D=i.cross(a),O=0,k=Math.abs(D.x),ee=Math.abs(D.y);ee>k&&(k=ee,O=1),Math.abs(D.z)>k&&(O=2);let te=tf[O],ne=this.a[te],A=this.b[te],j=this.c[te],M=t.a[te],N=t.b[te],re=t.c[te];if(m(this,ne,A,j,b,x,g,_,y,u,s)||m(t,M,N,re,T,E,S,C,w,d,c))return f(this,t,n,r);if(u.y<u.x){let e=u.y;u.y=u.x,u.x=e,l.copy(s.start),s.start.copy(s.end),s.end.copy(l)}if(d.y<d.x){let e=d.y;d.y=d.x,d.x=e,l.copy(c.start),c.start.copy(c.end),c.end.copy(l)}return u.y<d.x||d.y<u.x?!1:(n&&(d.x>u.x?n.start.copy(c.start):n.start.copy(s.start),d.y<u.y?n.end.copy(c.end):n.end.copy(s.end)),!0)}})(),of.prototype.distanceToPoint=(function(){let e=new U;return function(t){return this.closestPointToPoint(t,e),t.distanceTo(e)}})(),of.prototype.distanceToTriangle=(function(){let e=new U,t=new U,n=[`a`,`b`,`c`],r=new _s,i=new _s;return function(a,o=null,s=null){let c=o||s?r:null;if(this.intersectsTriangle(a,c))return(o||s)&&(o&&c.getCenter(o),s&&c.getCenter(s)),0;let l=1/0;for(let t=0;t<3;t++){let r,i=n[t],c=a[i];this.closestPointToPoint(c,e),r=c.distanceToSquared(e),r<l&&(l=r,o&&o.copy(e),s&&s.copy(c));let u=this[i];a.closestPointToPoint(u,e),r=u.distanceToSquared(e),r<l&&(l=r,o&&o.copy(u),s&&s.copy(e))}for(let c=0;c<3;c++){let u=n[c],d=n[(c+1)%3];r.set(this[u],this[d]);for(let c=0;c<3;c++){let u=n[c],d=n[(c+1)%3];i.set(a[u],a[d]),$d(r,i,e,t);let f=e.distanceToSquared(t);f<l&&(l=f,o&&o.copy(e),s&&s.copy(t))}}return Math.sqrt(l)}})();var sf=class{constructor(e,t,n){this.isOrientedBox=!0,this.min=new U,this.max=new U,this.matrix=new q,this.invMatrix=new q,this.points=Array(8).fill().map(()=>new U),this.satAxes=[,,,].fill().map(()=>new U),this.satBounds=[,,,].fill().map(()=>new Zd),this.alignedSatBounds=[,,,].fill().map(()=>new Zd),this.needsUpdate=!1,e&&this.min.copy(e),t&&this.max.copy(t),n&&this.matrix.copy(n)}set(e,t,n){this.min.copy(e),this.max.copy(t),this.matrix.copy(n),this.needsUpdate=!0}copy(e){this.min.copy(e.min),this.max.copy(e.max),this.matrix.copy(e.matrix),this.needsUpdate=!0}};sf.prototype.update=(function(){return function(){let e=this.matrix,t=this.min,n=this.max,r=this.points;for(let i=0;i<=1;i++)for(let a=0;a<=1;a++)for(let o=0;o<=1;o++){let s=r[1*i|2*a|4*o];s.x=i?n.x:t.x,s.y=a?n.y:t.y,s.z=o?n.z:t.z,s.applyMatrix4(e)}let i=this.satBounds,a=this.satAxes,o=r[0];for(let e=0;e<3;e++){let t=a[e],n=i[e],s=r[1<<e];t.subVectors(o,s),n.setFromPoints(t,r)}let s=this.alignedSatBounds;s[0].setFromPointsField(r,`x`),s[1].setFromPointsField(r,`y`),s[2].setFromPointsField(r,`z`),this.invMatrix.copy(this.matrix).invert(),this.needsUpdate=!1}})(),sf.prototype.intersectsBox=(function(){let e=new Zd;return function(t){this.needsUpdate&&this.update();let n=t.min,r=t.max,i=this.satBounds,a=this.satAxes,o=this.alignedSatBounds;if(e.min=n.x,e.max=r.x,o[0].isSeparated(e)||(e.min=n.y,e.max=r.y,o[1].isSeparated(e))||(e.min=n.z,e.max=r.z,o[2].isSeparated(e)))return!1;for(let n=0;n<3;n++){let r=a[n],o=i[n];if(e.setFromBox(r,t),o.isSeparated(e))return!1}return!0}})(),sf.prototype.intersectsTriangle=(function(){let e=new of,t=[,,,],n=new Zd,r=new Zd,i=new U;return function(a){this.needsUpdate&&this.update(),a.isExtendedTriangle?a.needsUpdate&&a.update():(e.copy(a),e.update(),a=e);let o=this.satBounds,s=this.satAxes;t[0]=a.a,t[1]=a.b,t[2]=a.c;for(let e=0;e<3;e++){let r=o[e],i=s[e];if(n.setFromPoints(i,t),r.isSeparated(n))return!1}let c=a.satBounds,l=a.satAxes,u=this.points;for(let e=0;e<3;e++){let t=c[e],r=l[e];if(n.setFromPoints(r,u),t.isSeparated(n))return!1}for(let e=0;e<3;e++){let a=s[e];for(let e=0;e<4;e++){let o=l[e];if(i.crossVectors(a,o),n.setFromPoints(i,t),r.setFromPoints(i,u),n.isSeparated(r))return!1}}return!0}})(),sf.prototype.closestPointToPoint=(function(){return function(e,t){return this.needsUpdate&&this.update(),t.copy(e).applyMatrix4(this.invMatrix).clamp(this.min,this.max).applyMatrix4(this.matrix),t}})(),sf.prototype.distanceToPoint=(function(){let e=new U;return function(t){return this.closestPointToPoint(t,e),t.distanceTo(e)}})(),sf.prototype.distanceToBox=(function(){let e=[`x`,`y`,`z`],t=Array(12).fill().map(()=>new _s),n=Array(12).fill().map(()=>new _s),r=new U,i=new U;return function(a,o=0,s=null,c=null){if(this.needsUpdate&&this.update(),this.intersectsBox(a))return(s||c)&&(a.getCenter(i),this.closestPointToPoint(i,r),a.closestPointToPoint(r,i),s&&s.copy(r),c&&c.copy(i)),0;let l=o*o,u=a.min,d=a.max,f=this.points,p=1/0;for(let e=0;e<8;e++){let t=f[e];i.copy(t).clamp(u,d);let n=t.distanceToSquared(i);if(n<p&&(p=n,s&&s.copy(t),c&&c.copy(i),n<l))return Math.sqrt(n)}let m=0;for(let r=0;r<3;r++)for(let i=0;i<=1;i++)for(let a=0;a<=1;a++){let o=(r+1)%3,s=(r+2)%3,c=i<<o|a<<s,l=1<<r|i<<o|a<<s,p=f[c],h=f[l];t[m].set(p,h);let g=e[r],_=e[o],v=e[s],y=n[m],b=y.start,x=y.end;b[g]=u[g],b[_]=i?u[_]:d[_],b[v]=a?u[v]:d[_],x[g]=d[g],x[_]=i?u[_]:d[_],x[v]=a?u[v]:d[_],m++}for(let e=0;e<=1;e++)for(let t=0;t<=1;t++)for(let n=0;n<=1;n++){i.x=e?d.x:u.x,i.y=t?d.y:u.y,i.z=n?d.z:u.z,this.closestPointToPoint(i,r);let a=i.distanceToSquared(r);if(a<p&&(p=a,s&&s.copy(r),c&&c.copy(i),a<l))return Math.sqrt(a)}for(let e=0;e<12;e++){let a=t[e];for(let e=0;e<12;e++){let t=n[e];$d(a,t,r,i);let o=r.distanceToSquared(i);if(o<p&&(p=o,s&&s.copy(r),c&&c.copy(i),o<l))return Math.sqrt(o)}}return Math.sqrt(p)}})();var cf=new class extends xd{constructor(){super(()=>new of)}},lf=new U,uf=new U;function df(e,t,n={},r=0,i=1/0){let a=r*r,o=i*i,s=1/0,c=null;if(e.shapecast({boundsTraverseOrder:e=>(lf.copy(t).clamp(e.min,e.max),lf.distanceToSquared(t)),intersectsBounds:(e,t,n)=>n<s&&n<o,intersectsTriangle:(e,n)=>{e.closestPointToPoint(t,lf);let r=t.distanceToSquared(lf);return r<s&&(uf.copy(lf),s=r,c=n),r<a}}),s===1/0)return null;let l=Math.sqrt(s);return n.point?n.point.copy(uf):n.point=uf.clone(),n.distance=l,n.faceIndex=c,n}var ff=!0,pf=!1,mf=new U,hf=new U,gf=new U,_f=new H,vf=new H,yf=new H,bf=new U,xf=new U,Sf=new U,Cf=new U;function wf(e,t,n,r,i,a,o,s){let c;if(c=a===1?e.intersectTriangle(r,n,t,!0,i):e.intersectTriangle(t,n,r,a!==2,i),c===null)return null;let l=e.origin.distanceTo(i);return l<o||l>s?null:{distance:l,point:i.clone()}}function Tf(e,t,n,r,i,a,o,s,c,l,u){mf.fromBufferAttribute(t,a),hf.fromBufferAttribute(t,o),gf.fromBufferAttribute(t,s);let d=wf(e,mf,hf,gf,Cf,c,l,u);if(d){if(r){_f.fromBufferAttribute(r,a),vf.fromBufferAttribute(r,o),yf.fromBufferAttribute(r,s),d.uv=new H;let e=yr.getInterpolation(Cf,mf,hf,gf,_f,vf,yf,d.uv);ff||(d.uv=e)}if(i){_f.fromBufferAttribute(i,a),vf.fromBufferAttribute(i,o),yf.fromBufferAttribute(i,s),d.uv1=new H;let e=yr.getInterpolation(Cf,mf,hf,gf,_f,vf,yf,d.uv1);ff||(d.uv1=e),pf&&(d.uv2=d.uv1)}if(n){bf.fromBufferAttribute(n,a),xf.fromBufferAttribute(n,o),Sf.fromBufferAttribute(n,s),d.normal=new U;let t=yr.getInterpolation(Cf,mf,hf,gf,bf,xf,Sf,d.normal);d.normal.dot(e.direction)>0&&d.normal.multiplyScalar(-1),ff||(d.normal=t)}let t={a,b:o,c:s,normal:new U,materialIndex:0};if(yr.getNormal(mf,hf,gf,t.normal),d.face=t,d.faceIndex=a,ff){let e=new U;yr.getBarycoord(Cf,mf,hf,gf,e),d.barycoord=e}}return d}function Ef(e){return e&&e.isMaterial?e.side:e}function Df(e,t,n,r,i,a,o){let s=r*3,c=s+0,l=s+1,u=s+2,{index:d,groups:f}=e;e.index&&(c=d.getX(c),l=d.getX(l),u=d.getX(u));let{position:p,normal:m,uv:h,uv1:g}=e.attributes;if(Array.isArray(t)){let e=r*3;for(let s=0,d=f.length;s<d;s++){let{start:d,count:_,materialIndex:v}=f[s];if(e>=d&&e<d+_){let e=Ef(t[v]),s=Tf(n,p,m,h,g,c,l,u,e,a,o);if(s)if(s.faceIndex=r,s.face.materialIndex=v,i)i.push(s);else return s}}}else{let e=Ef(t),s=Tf(n,p,m,h,g,c,l,u,e,a,o);if(s)if(s.faceIndex=r,s.face.materialIndex=0,i)i.push(s);else return s}return null}function Of(e,t,n,r){let i=e.a,a=e.b,o=e.c,s=t,c=t+1,l=t+2;n&&(s=n.getX(s),c=n.getX(c),l=n.getX(l)),i.x=r.getX(s),i.y=r.getY(s),i.z=r.getZ(s),a.x=r.getX(c),a.y=r.getY(c),a.z=r.getZ(c),o.x=r.getX(l),o.y=r.getY(l),o.z=r.getZ(l)}function kf(e,t,n,r,i,a,o,s){let{geometry:c,_indirectBuffer:l}=e;for(let e=r,l=r+i;e<l;e++)Df(c,t,n,e,a,o,s)}function Af(e,t,n,r,i,a,o){let{geometry:s,_indirectBuffer:c}=e,l=1/0,u=null;for(let e=r,c=r+i;e<c;e++){let r;r=Df(s,t,n,e,null,a,o),r&&r.distance<l&&(u=r,l=r.distance)}return u}function jf(e,t,n,r,i,a,o){let{geometry:s}=n,{index:c}=s,l=s.attributes.position;for(let n=e,s=t+e;n<s;n++){let e;if(e=n,Of(o,e*3,c,l),o.needsUpdate=!0,r(o,e,i,a))return!0}return!1}function Mf(e,t=null){t&&Array.isArray(t)&&(t=new Set(t));let n=e.geometry,r=n.index?n.index.array:null,i=n.attributes.position,a,o,s,c,l=0,u=e._roots;for(let e=0,t=u.length;e<t;e++)a=u[e],o=new Uint32Array(a),s=new Uint16Array(a),c=new Float32Array(a),d(0,l),l+=a.byteLength;function d(e,n,a=!1){let l=e*2;if(Yu(l,s)){let t=Xu(e,o),n=Zu(l,s),a=1/0,u=1/0,d=1/0,f=-1/0,p=-1/0,m=-1/0;for(let e=3*t,o=3*(t+n);e<o;e++){let t=r[e],n=i.getX(t),o=i.getY(t),s=i.getZ(t);n<a&&(a=n),n>f&&(f=n),o<u&&(u=o),o>p&&(p=o),s<d&&(d=s),s>m&&(m=s)}return c[e+0]!==a||c[e+1]!==u||c[e+2]!==d||c[e+3]!==f||c[e+4]!==p||c[e+5]!==m?(c[e+0]=a,c[e+1]=u,c[e+2]=d,c[e+3]=f,c[e+4]=p,c[e+5]=m,!0):!1}else{let r=Qu(e),i=$u(e,o),s=a,l=!1,u=!1;if(t){if(!s){let e=r/8+n/32,a=i/8+n/32;l=t.has(e),u=t.has(a),s=!l&&!u}}else l=!0,u=!0;let f=s||l,p=s||u,m=!1;f&&(m=d(r,n,s));let h=!1;p&&(h=d(i,n,s));let g=m||h;if(g)for(let t=0;t<3;t++){let n=r+t,a=i+t,o=c[n],s=c[n+3],l=c[a],u=c[a+3];c[e+t]=o<l?o:l,c[e+t+3]=s>u?s:u}return g}}}function Nf(e,t,n,r,i){let a,o,s,c,l,u,d=1/n.direction.x,f=1/n.direction.y,p=1/n.direction.z,m=n.origin.x,h=n.origin.y,g=n.origin.z,_=t[e],v=t[e+3],y=t[e+1],b=t[e+3+1],x=t[e+2],S=t[e+3+2];return d>=0?(a=(_-m)*d,o=(v-m)*d):(a=(v-m)*d,o=(_-m)*d),f>=0?(s=(y-h)*f,c=(b-h)*f):(s=(b-h)*f,c=(y-h)*f),a>c||s>o||((s>a||isNaN(a))&&(a=s),(c<o||isNaN(o))&&(o=c),p>=0?(l=(x-g)*p,u=(S-g)*p):(l=(S-g)*p,u=(x-g)*p),a>u||l>o)?!1:((l>a||a!==a)&&(a=l),(u<o||o!==o)&&(o=u),a<=i&&o>=r)}function Pf(e,t,n,r,i,a,o,s){let{geometry:c,_indirectBuffer:l}=e;for(let e=r,u=r+i;e<u;e++)Df(c,t,n,l?l[e]:e,a,o,s)}function Ff(e,t,n,r,i,a,o){let{geometry:s,_indirectBuffer:c}=e,l=1/0,u=null;for(let e=r,d=r+i;e<d;e++){let r;r=Df(s,t,n,c?c[e]:e,null,a,o),r&&r.distance<l&&(u=r,l=r.distance)}return u}function If(e,t,n,r,i,a,o){let{geometry:s}=n,{index:c}=s,l=s.attributes.position;for(let s=e,u=t+e;s<u;s++){let e;if(e=n.resolveTriangleIndex(s),Of(o,e*3,c,l),o.needsUpdate=!0,r(o,e,i,a))return!0}return!1}function Lf(e,t,n,r,i,a,o){Q.setBuffer(e._roots[t]),Rf(0,e,n,r,i,a,o),Q.clearBuffer()}function Rf(e,t,n,r,i,a,o){let{float32Array:s,uint16Array:c,uint32Array:l}=Q,u=e*2;if(Yu(u,c))kf(t,n,r,Xu(e,l),Zu(u,c),i,a,o);else{let c=Qu(e);Nf(c,s,r,a,o)&&Rf(c,t,n,r,i,a,o);let u=$u(e,l);Nf(u,s,r,a,o)&&Rf(u,t,n,r,i,a,o)}}var zf=[`x`,`y`,`z`];function Bf(e,t,n,r,i,a){Q.setBuffer(e._roots[t]);let o=Vf(0,e,n,r,i,a);return Q.clearBuffer(),o}function Vf(e,t,n,r,i,a){let{float32Array:o,uint16Array:s,uint32Array:c}=Q,l=e*2;if(Yu(l,s))return Af(t,n,r,Xu(e,c),Zu(l,s),i,a);{let s=ed(e,c),l=zf[s],u=r.direction[l]>=0,d,f;u?(d=Qu(e),f=$u(e,c)):(d=$u(e,c),f=Qu(e));let p=Nf(d,o,r,i,a)?Vf(d,t,n,r,i,a):null;if(p){let e=p.point[l];if(u?e<=o[f+s]:e>=o[f+s+3])return p}let m=Nf(f,o,r,i,a)?Vf(f,t,n,r,i,a):null;return p&&m?p.distance<=m.distance?p:m:p||m||null}}var Hf=new on,Uf=new of,Wf=new of,Gf=new q,Kf=new sf,qf=new sf;function Jf(e,t,n,r){Q.setBuffer(e._roots[t]);let i=Yf(0,e,n,r);return Q.clearBuffer(),i}function Yf(e,t,n,r,i=null){let{float32Array:a,uint16Array:o,uint32Array:s}=Q,c=e*2;if(i===null&&(n.boundingBox||n.computeBoundingBox(),Kf.set(n.boundingBox.min,n.boundingBox.max,r),i=Kf),Yu(c,o)){let i=t.geometry,l=i.index,u=i.attributes.position,d=n.index,f=n.attributes.position,p=Xu(e,s),m=Zu(c,o);if(Gf.copy(r).invert(),n.boundsTree)return Uu(td(e),a,qf),qf.matrix.copy(Gf),qf.needsUpdate=!0,n.boundsTree.shapecast({intersectsBounds:e=>qf.intersectsBox(e),intersectsTriangle:e=>{e.a.applyMatrix4(r),e.b.applyMatrix4(r),e.c.applyMatrix4(r),e.needsUpdate=!0;for(let t=p*3,n=(m+p)*3;t<n;t+=3)if(Of(Wf,t,l,u),Wf.needsUpdate=!0,e.intersectsTriangle(Wf))return!0;return!1}});{let e=Ud(n);for(let t=p*3,n=(m+p)*3;t<n;t+=3){Of(Uf,t,l,u),Uf.a.applyMatrix4(Gf),Uf.b.applyMatrix4(Gf),Uf.c.applyMatrix4(Gf),Uf.needsUpdate=!0;for(let t=0,n=e*3;t<n;t+=3)if(Of(Wf,t,d,f),Wf.needsUpdate=!0,Uf.intersectsTriangle(Wf))return!0}}}else{let o=Qu(e),c=$u(e,s);return Uu(td(o),a,Hf),!!(i.intersectsBox(Hf)&&Yf(o,t,n,r,i)||(Uu(td(c),a,Hf),i.intersectsBox(Hf)&&Yf(c,t,n,r,i)))}}var Xf=new q,Zf=new sf,Qf=new sf,$f=new U,ep=new U,tp=new U,np=new U;function rp(e,t,n,r={},i={},a=0,o=1/0){t.boundingBox||t.computeBoundingBox(),Zf.set(t.boundingBox.min,t.boundingBox.max,n),Zf.needsUpdate=!0;let s=e.geometry,c=s.attributes.position,l=s.index,u=t.attributes.position,d=t.index,f=cf.getPrimitive(),p=cf.getPrimitive(),m=$f,h=ep,g=null,_=null;i&&(g=tp,_=np);let v=1/0,y=null,b=null;return Xf.copy(n).invert(),Qf.matrix.copy(Xf),e.shapecast({boundsTraverseOrder:e=>Zf.distanceToBox(e),intersectsBounds:(e,t,n)=>n<v&&n<o?(t&&(Qf.min.copy(e.min),Qf.max.copy(e.max),Qf.needsUpdate=!0),!0):!1,intersectsRange:(e,r)=>{if(t.boundsTree)return t.boundsTree.shapecast({boundsTraverseOrder:e=>Qf.distanceToBox(e),intersectsBounds:(e,t,n)=>n<v&&n<o,intersectsRange:(t,i)=>{for(let o=t,s=t+i;o<s;o++){Of(p,3*o,d,u),p.a.applyMatrix4(n),p.b.applyMatrix4(n),p.c.applyMatrix4(n),p.needsUpdate=!0;for(let t=e,n=e+r;t<n;t++){Of(f,3*t,l,c),f.needsUpdate=!0;let e=f.distanceToTriangle(p,m,g);if(e<v&&(h.copy(m),_&&_.copy(g),v=e,y=t,b=o),e<a)return!0}}}});{let i=Ud(t);for(let t=0,o=i;t<o;t++){Of(p,3*t,d,u),p.a.applyMatrix4(n),p.b.applyMatrix4(n),p.c.applyMatrix4(n),p.needsUpdate=!0;for(let n=e,i=e+r;n<i;n++){Of(f,3*n,l,c),f.needsUpdate=!0;let e=f.distanceToTriangle(p,m,g);if(e<v&&(h.copy(m),_&&_.copy(g),v=e,y=n,b=t),e<a)return!0}}}}}),cf.releasePrimitive(f),cf.releasePrimitive(p),v===1/0?null:(r.point?r.point.copy(h):r.point=h.clone(),r.distance=v,r.faceIndex=y,i&&(i.point?i.point.copy(_):i.point=_.clone(),i.point.applyMatrix4(Xf),h.applyMatrix4(Xf),i.distance=h.sub(i.point).length(),i.faceIndex=b),r)}function ip(e,t=null){t&&Array.isArray(t)&&(t=new Set(t));let n=e.geometry,r=n.index?n.index.array:null,i=n.attributes.position,a,o,s,c,l=0,u=e._roots;for(let e=0,t=u.length;e<t;e++)a=u[e],o=new Uint32Array(a),s=new Uint16Array(a),c=new Float32Array(a),d(0,l),l+=a.byteLength;function d(n,a,l=!1){let u=n*2;if(Yu(u,s)){let t=Xu(n,o),a=Zu(u,s),l=1/0,d=1/0,f=1/0,p=-1/0,m=-1/0,h=-1/0;for(let n=t,o=t+a;n<o;n++){let t=3*e.resolveTriangleIndex(n);for(let e=0;e<3;e++){let n=t+e;n=r?r[n]:n;let a=i.getX(n),o=i.getY(n),s=i.getZ(n);a<l&&(l=a),a>p&&(p=a),o<d&&(d=o),o>m&&(m=o),s<f&&(f=s),s>h&&(h=s)}}return c[n+0]!==l||c[n+1]!==d||c[n+2]!==f||c[n+3]!==p||c[n+4]!==m||c[n+5]!==h?(c[n+0]=l,c[n+1]=d,c[n+2]=f,c[n+3]=p,c[n+4]=m,c[n+5]=h,!0):!1}else{let e=Qu(n),r=$u(n,o),i=l,s=!1,u=!1;if(t){if(!i){let n=e/8+a/32,o=r/8+a/32;s=t.has(n),u=t.has(o),i=!s&&!u}}else s=!0,u=!0;let f=i||s,p=i||u,m=!1;f&&(m=d(e,a,i));let h=!1;p&&(h=d(r,a,i));let g=m||h;if(g)for(let t=0;t<3;t++){let i=e+t,a=r+t,o=c[i],s=c[i+3],l=c[a],u=c[a+3];c[n+t]=o<l?o:l,c[n+t+3]=s>u?s:u}return g}}}function ap(e,t,n,r,i,a,o){Q.setBuffer(e._roots[t]),op(0,e,n,r,i,a,o),Q.clearBuffer()}function op(e,t,n,r,i,a,o){let{float32Array:s,uint16Array:c,uint32Array:l}=Q,u=e*2;if(Yu(u,c))Pf(t,n,r,Xu(e,l),Zu(u,c),i,a,o);else{let c=Qu(e);Nf(c,s,r,a,o)&&op(c,t,n,r,i,a,o);let u=$u(e,l);Nf(u,s,r,a,o)&&op(u,t,n,r,i,a,o)}}var sp=[`x`,`y`,`z`];function cp(e,t,n,r,i,a){Q.setBuffer(e._roots[t]);let o=lp(0,e,n,r,i,a);return Q.clearBuffer(),o}function lp(e,t,n,r,i,a){let{float32Array:o,uint16Array:s,uint32Array:c}=Q,l=e*2;if(Yu(l,s))return Ff(t,n,r,Xu(e,c),Zu(l,s),i,a);{let s=ed(e,c),l=sp[s],u=r.direction[l]>=0,d,f;u?(d=Qu(e),f=$u(e,c)):(d=$u(e,c),f=Qu(e));let p=Nf(d,o,r,i,a)?lp(d,t,n,r,i,a):null;if(p){let e=p.point[l];if(u?e<=o[f+s]:e>=o[f+s+3])return p}let m=Nf(f,o,r,i,a)?lp(f,t,n,r,i,a):null;return p&&m?p.distance<=m.distance?p:m:p||m||null}}var up=new on,dp=new of,fp=new of,pp=new q,mp=new sf,hp=new sf;function gp(e,t,n,r){Q.setBuffer(e._roots[t]);let i=_p(0,e,n,r);return Q.clearBuffer(),i}function _p(e,t,n,r,i=null){let{float32Array:a,uint16Array:o,uint32Array:s}=Q,c=e*2;if(i===null&&(n.boundingBox||n.computeBoundingBox(),mp.set(n.boundingBox.min,n.boundingBox.max,r),i=mp),Yu(c,o)){let i=t.geometry,l=i.index,u=i.attributes.position,d=n.index,f=n.attributes.position,p=Xu(e,s),m=Zu(c,o);if(pp.copy(r).invert(),n.boundsTree)return Uu(td(e),a,hp),hp.matrix.copy(pp),hp.needsUpdate=!0,n.boundsTree.shapecast({intersectsBounds:e=>hp.intersectsBox(e),intersectsTriangle:e=>{e.a.applyMatrix4(r),e.b.applyMatrix4(r),e.c.applyMatrix4(r),e.needsUpdate=!0;for(let n=p,r=m+p;n<r;n++)if(Of(fp,3*t.resolveTriangleIndex(n),l,u),fp.needsUpdate=!0,e.intersectsTriangle(fp))return!0;return!1}});{let e=Ud(n);for(let n=p,r=m+p;n<r;n++){Of(dp,3*t.resolveTriangleIndex(n),l,u),dp.a.applyMatrix4(pp),dp.b.applyMatrix4(pp),dp.c.applyMatrix4(pp),dp.needsUpdate=!0;for(let t=0,n=e*3;t<n;t+=3)if(Of(fp,t,d,f),fp.needsUpdate=!0,dp.intersectsTriangle(fp))return!0}}}else{let o=Qu(e),c=$u(e,s);return Uu(td(o),a,up),!!(i.intersectsBox(up)&&_p(o,t,n,r,i)||(Uu(td(c),a,up),i.intersectsBox(up)&&_p(c,t,n,r,i)))}}var vp=new q,yp=new sf,bp=new sf,xp=new U,Sp=new U,Cp=new U,wp=new U;function Tp(e,t,n,r={},i={},a=0,o=1/0){t.boundingBox||t.computeBoundingBox(),yp.set(t.boundingBox.min,t.boundingBox.max,n),yp.needsUpdate=!0;let s=e.geometry,c=s.attributes.position,l=s.index,u=t.attributes.position,d=t.index,f=cf.getPrimitive(),p=cf.getPrimitive(),m=xp,h=Sp,g=null,_=null;i&&(g=Cp,_=wp);let v=1/0,y=null,b=null;return vp.copy(n).invert(),bp.matrix.copy(vp),e.shapecast({boundsTraverseOrder:e=>yp.distanceToBox(e),intersectsBounds:(e,t,n)=>n<v&&n<o?(t&&(bp.min.copy(e.min),bp.max.copy(e.max),bp.needsUpdate=!0),!0):!1,intersectsRange:(r,i)=>{if(t.boundsTree){let s=t.boundsTree;return s.shapecast({boundsTraverseOrder:e=>bp.distanceToBox(e),intersectsBounds:(e,t,n)=>n<v&&n<o,intersectsRange:(t,o)=>{for(let x=t,S=t+o;x<S;x++){Of(p,3*s.resolveTriangleIndex(x),d,u),p.a.applyMatrix4(n),p.b.applyMatrix4(n),p.c.applyMatrix4(n),p.needsUpdate=!0;for(let t=r,n=r+i;t<n;t++){Of(f,3*e.resolveTriangleIndex(t),l,c),f.needsUpdate=!0;let n=f.distanceToTriangle(p,m,g);if(n<v&&(h.copy(m),_&&_.copy(g),v=n,y=t,b=x),n<a)return!0}}}})}else{let o=Ud(t);for(let t=0,s=o;t<s;t++){Of(p,3*t,d,u),p.a.applyMatrix4(n),p.b.applyMatrix4(n),p.c.applyMatrix4(n),p.needsUpdate=!0;for(let n=r,o=r+i;n<o;n++){Of(f,3*e.resolveTriangleIndex(n),l,c),f.needsUpdate=!0;let r=f.distanceToTriangle(p,m,g);if(r<v&&(h.copy(m),_&&_.copy(g),v=r,y=n,b=t),r<a)return!0}}}}}),cf.releasePrimitive(f),cf.releasePrimitive(p),v===1/0?null:(r.point?r.point.copy(h):r.point=h.clone(),r.distance=v,r.faceIndex=y,i&&(i.point?i.point.copy(_):i.point=_.clone(),i.point.applyMatrix4(vp),h.applyMatrix4(vp),i.distance=h.sub(i.point).length(),i.faceIndex=b),r)}function Ep(e,t,n){return e===null?null:(e.point.applyMatrix4(t.matrixWorld),e.distance=e.point.distanceTo(n.ray.origin),e.object=t,e)}var Dp=new sf,Op=new Mn,kp=new U,Ap=new q,jp=new U,Mp=[`getX`,`getY`,`getZ`],Np=class e extends Xd{static serialize(e,t={}){t={cloneBuffers:!0,...t};let n=e.geometry,r=e._roots,i=e._indirectBuffer,a=n.getIndex(),o={version:1,roots:null,index:null,indirectBuffer:null};return t.cloneBuffers?(o.roots=r.map(e=>e.slice()),o.index=a?a.array.slice():null,o.indirectBuffer=i?i.slice():null):(o.roots=r,o.index=a?a.array:null,o.indirectBuffer=i),o}static deserialize(t,n,r={}){r={setIndex:!0,indirect:!!t.indirectBuffer,...r};let{index:i,roots:a,indirectBuffer:o}=t;t.version||(console.warn(`MeshBVH.deserialize: Serialization format has been changed and will be fixed up. It is recommended to regenerate any stored serialized data.`),c(a));let s=new e(n,{...r,[Vu]:!0});if(s._roots=a,s._indirectBuffer=o||null,r.setIndex){let e=n.getIndex();if(e===null){let e=new jr(t.index,1,!1);n.setIndex(e)}else e.array!==i&&(e.array.set(i),e.needsUpdate=!0)}return s;function c(e){for(let t=0;t<e.length;t++){let n=e[t],r=new Uint32Array(n),i=new Uint16Array(n);for(let e=0,t=n.byteLength/32;e<t;e++){let t=8*e;Yu(2*t,i)||(r[t+6]=r[t+6]/8-e)}}}}get primitiveStride(){return 3}get resolveTriangleIndex(){return this.resolvePrimitiveIndex}constructor(e,t={}){t.maxLeafTris&&(console.warn(`MeshBVH: "maxLeafTris" option has been deprecated. Use maxLeafSize, instead.`),t={...t,maxLeafSize:t.maxLeafTris}),super(e,t)}shiftTriangleOffsets(e){return super.shiftPrimitiveOffsets(e)}writePrimitiveBounds(e,t,n){let r=this.geometry,i=this._indirectBuffer,a=r.attributes.position,o=r.index?r.index.array:null,s=(i?i[e]:e)*3,c=s+0,l=s+1,u=s+2;o&&(c=o[c],l=o[l],u=o[u]);for(let e=0;e<3;e++){let r=a[Mp[e]](c),i=a[Mp[e]](l),o=a[Mp[e]](u),s=r;i<s&&(s=i),o<s&&(s=o);let d=r;i>d&&(d=i),o>d&&(d=o),t[n+e]=s,t[n+e+3]=d}return t}computePrimitiveBounds(e,t,n){let r=this.geometry,i=this._indirectBuffer,a=r.attributes.position,o=r.index?r.index.array:null,s=a.normalized;if(e<0||t+e-n.offset>n.length/6)throw Error(`MeshBVH: compute triangle bounds range is invalid.`);let c=a.array,l=a.offset||0,u=3;a.isInterleavedBufferAttribute&&(u=a.data.stride);let d=[`getX`,`getY`,`getZ`],f=n.offset;for(let r=e,p=e+t;r<p;r++){let e=(i?i[r]:r)*3,t=(r-f)*6,p=e+0,m=e+1,h=e+2;o&&(p=o[p],m=o[m],h=o[h]),s||(p=p*u+l,m=m*u+l,h=h*u+l);for(let e=0;e<3;e++){let r,i,o;s?(r=a[d[e]](p),i=a[d[e]](m),o=a[d[e]](h)):(r=c[p+e],i=c[m+e],o=c[h+e]);let l=r;i<l&&(l=i),o<l&&(l=o);let u=r;i>u&&(u=i),o>u&&(u=o);let f=(u-l)/2,g=e*2;n[t+g+0]=l+f,n[t+g+1]=f+(Math.abs(l)+f)*Bu}}return n}raycastObject3D(e,t,n=[]){let{material:r}=e;if(r===void 0)return;Ap.copy(e.matrixWorld).invert(),Op.copy(t.ray).applyMatrix4(Ap),jp.setFromMatrixScale(e.matrixWorld),kp.copy(Op.direction).multiply(jp);let i=kp.length(),a=t.near/i,o=t.far/i;if(t.firstHitOnly===!0){let i=this.raycastFirst(Op,r,a,o);i=Ep(i,e,t),i&&n.push(i)}else{let i=this.raycast(Op,r,a,o);for(let r=0,a=i.length;r<a;r++){let a=Ep(i[r],e,t);a&&n.push(a)}}return n}refit(e=null){return(this.indirect?ip:Mf)(this,e)}raycast(e,t=0,n=0,r=1/0){let i=this._roots,a=[],o=this.indirect?ap:Lf;for(let s=0,c=i.length;s<c;s++)o(this,s,t,e,a,n,r);return a}raycastFirst(e,t=0,n=0,r=1/0){let i=this._roots,a=null,o=this.indirect?cp:Bf;for(let s=0,c=i.length;s<c;s++){let i=o(this,s,t,e,n,r);i!=null&&(a==null||i.distance<a.distance)&&(a=i)}return a}intersectsGeometry(e,t){let n=!1,r=this._roots,i=this.indirect?gp:Jf;for(let a=0,o=r.length;a<o&&(n=i(this,a,e,t),!n);a++);return n}shapecast(e){let t=cf.getPrimitive(),n=super.shapecast({...e,intersectsPrimitive:e.intersectsTriangle,scratchPrimitive:t,iterate:this.indirect?If:jf});return cf.releasePrimitive(t),n}bvhcast(t,n,r){let{intersectsRanges:i,intersectsTriangles:a}=r,o=cf.getPrimitive(),s=this.geometry.index,c=this.geometry.attributes.position,l=this.indirect?e=>{Of(o,this.resolveTriangleIndex(e)*3,s,c)}:e=>{Of(o,e*3,s,c)},u=cf.getPrimitive(),d=t.geometry.index,f=t.geometry.attributes.position,p=t.indirect?e=>{Of(u,t.resolveTriangleIndex(e)*3,d,f)}:e=>{Of(u,e*3,d,f)};if(a){if(!(t instanceof e))throw Error(`MeshBVH: "intersectsTriangles" callback can only be used with another MeshBVH.`);let r=(e,t,r,i,s,c,d,f)=>{for(let m=r,h=r+i;m<h;m++){p(m),u.a.applyMatrix4(n),u.b.applyMatrix4(n),u.c.applyMatrix4(n),u.needsUpdate=!0;for(let n=e,r=e+t;n<r;n++)if(l(n),o.needsUpdate=!0,a(o,u,n,m,s,c,d,f))return!0}return!1};if(i){let e=i;i=function(t,n,i,a,o,s,c,l){return e(t,n,i,a,o,s,c,l)?!0:r(t,n,i,a,o,s,c,l)}}else i=r}return super.bvhcast(t,n,{intersectsRanges:i})}intersectsBox(e,t){return Dp.set(e.min,e.max,t),Dp.needsUpdate=!0,this.shapecast({intersectsBounds:e=>Dp.intersectsBox(e),intersectsTriangle:e=>Dp.intersectsTriangle(e)})}intersectsSphere(e){return this.shapecast({intersectsBounds:t=>e.intersectsBox(t),intersectsTriangle:t=>t.intersectsSphere(e)})}closestPointToGeometry(e,t,n={},r={},i=0,a=1/0){return(this.indirect?Tp:rp)(this,e,t,n,r,i,a)}closestPointToPoint(e,t={},n=0,r=1/0){return df(this,e,t,n,r)}},Pp=1e-6,Fp=Pp*.5,Ip=10**-Math.log10(Pp),Lp=Fp*Ip;function Rp(e){return~~(e*Ip+Lp)}function zp(e){return`${Rp(e.x)},${Rp(e.y)}`}function Bp(e){return`${Rp(e.x)},${Rp(e.y)},${Rp(e.z)}`}function Vp(e){return`${Rp(e.x)},${Rp(e.y)},${Rp(e.z)},${Rp(e.w)}`}function Hp(e,t,n){n.direction.subVectors(t,e).normalize();let r=e.dot(n.direction);return n.origin.copy(e).addScaledVector(n.direction,-r),n}function Up(){return typeof SharedArrayBuffer<`u`}function Wp(e){if(e.buffer instanceof SharedArrayBuffer)return e;let t=e.constructor,n=e.buffer,r=new SharedArrayBuffer(n.byteLength),i=new Uint8Array(n);return new Uint8Array(r).set(i,0),new t(r)}function Gp(e,t=ArrayBuffer){return e>65535?new Uint32Array(new t(4*e)):new Uint16Array(new t(2*e))}function Kp(e,t){if(!e.index){let n=e.attributes.position.count,r=Gp(n,t.useSharedArrayBuffer?SharedArrayBuffer:ArrayBuffer);e.setIndex(new jr(r,1));for(let e=0;e<n;e++)r[e]=e}}function qp(e){return e.index?e.index.count:e.attributes.position.count}function Jp(e){return qp(e)/3}var Yp=1e-8,Xp=new U;function Zp(e){return~~(e/3)}function Qp(e){return e%3}function $p(e,t){return e.start-t.start}function em(e,t){return Xp.subVectors(t,e.origin).dot(e.direction)}function tm(e,t,n,r=Yp){e.sort($p),t.sort($p);for(let r=0;r<e.length;r++){let i=e[r];for(let s=0;s<t.length;s++){let c=t[s];if(!(c.start>i.end)){if(i.end<c.start||c.end<i.start)continue;if(i.start<=c.start&&i.end>=c.end)a(c.end,i.end)||e.splice(r+1,0,{start:c.end,end:i.end,index:i.index}),i.end=c.start,c.start=0,c.end=0;else if(i.start>=c.start&&i.end<=c.end)a(i.end,c.end)||t.splice(s+1,0,{start:i.end,end:c.end,index:c.index}),c.end=i.start,i.start=0,i.end=0;else if(i.start<=c.start&&i.end<=c.end){let e=i.end;i.end=c.start,c.start=e}else if(i.start>=c.start&&i.end>=c.end){let e=c.end;c.end=i.start,i.start=e}else throw Error()}if(n.has(i.index)||n.set(i.index,[]),n.has(c.index)||n.set(c.index,[]),n.get(i.index).push(c.index),n.get(c.index).push(i.index),o(c)&&(t.splice(s,1),s--),o(i)){e.splice(r,1),r--;break}}}i(e),i(t);function i(e){for(let t=0;t<e.length;t++)o(e[t])&&(e.splice(t,1),t--)}function a(e,t){return Math.abs(t-e)<r}function o(e){return Math.abs(e.end-e.start)<r}}var nm=1e-5,rm=1e-4,im=class{constructor(){this._rays=[]}addRay(e){this._rays.push(e)}findClosestRay(e){let t=this._rays,n=e.clone();n.direction.multiplyScalar(-1);let r=1/0,i=null;for(let s=0,c=t.length;s<c;s++){let c=t[s];if(a(c,e)&&a(c,n))continue;let l=o(c,e),u=o(c,n),d=Math.min(l,u);d<r&&(r=d,i=c)}return i;function a(e,t){let n=e.origin.distanceTo(t.origin)>nm;return e.direction.angleTo(t.direction)>rm||n}function o(e,t){let n=e.origin.distanceTo(t.origin),r=e.direction.angleTo(t.direction);return n/nm+r/rm}}},am=new U,om=new U,sm=new Mn;function cm(e,t,n){let r=e.attributes,i=e.index,a=r.position,o=new Map,s=new Map,c=Array.from(t),l=new im;for(let e=0,t=c.length;e<t;e++){let t=c[e],n=Zp(t),r=Qp(t),o=3*n+r,u=3*n+(r+1)%3;i&&(o=i.getX(o),u=i.getX(u)),am.fromBufferAttribute(a,o),om.fromBufferAttribute(a,u),Hp(am,om,sm);let d,f=l.findClosestRay(sm);f===null&&(f=sm.clone(),l.addRay(f)),s.has(f)||s.set(f,{forward:[],reverse:[],ray:f}),d=s.get(f);let p=em(f,am),m=em(f,om);p>m&&([p,m]=[m,p]),sm.direction.dot(f.direction)<0?d.reverse.push({start:p,end:m,index:t}):d.forward.push({start:p,end:m,index:t})}return s.forEach(({forward:e,reverse:t},r)=>{tm(e,t,o,n),e.length===0&&t.length===0&&s.delete(r)}),{disjointConnectivityMap:o,fragmentMap:s}}var lm=new H,um=new U,dm=new K,fm=[``,``,``],pm=class{constructor(e=null){this.data=null,this.disjointConnections=null,this.unmatchedDisjointEdges=null,this.unmatchedEdges=-1,this.matchedEdges=-1,this.useDrawRange=!0,this.useAllAttributes=!1,this.matchDisjointEdges=!1,this.degenerateEpsilon=1e-8,e&&this.updateFrom(e)}getSiblingTriangleIndex(e,t){let n=this.data[e*3+t];return n===-1?-1:~~(n/3)}getSiblingEdgeIndex(e,t){let n=this.data[e*3+t];return n===-1?-1:n%3}getDisjointSiblingTriangleIndices(e,t){let n=e*3+t,r=this.disjointConnections.get(n);return r?r.map(e=>~~(e/3)):[]}getDisjointSiblingEdgeIndices(e,t){let n=e*3+t,r=this.disjointConnections.get(n);return r?r.map(e=>e%3):[]}isFullyConnected(){return this.unmatchedEdges===0}updateFrom(e){let{useAllAttributes:t,useDrawRange:n,matchDisjointEdges:r,degenerateEpsilon:i}=this,a=t?v:_,o=new Map,{attributes:s}=e,c=t?Object.keys(s):null,l=e.index,u=s.position,d=Jp(e),f=d,p=0;n&&(p=e.drawRange.start,e.drawRange.count!==1/0&&(d=~~(e.drawRange.count/3)));let m=this.data;(!m||m.length<3*f)&&(m=new Int32Array(3*f)),m.fill(-1);let h=0,g=new Set;for(let e=p,t=d*3+p;e<t;e+=3){let t=e;for(let e=0;e<3;e++){let n=t+e;l&&(n=l.getX(n)),fm[e]=a(n)}for(let e=0;e<3;e++){let n=(e+1)%3,r=fm[e],i=fm[n],a=`${i}_${r}`;if(o.has(a)){let n=t+e,r=o.get(a);m[n]=r,m[r]=n,o.delete(a),h+=2,g.delete(r)}else{let n=`${r}_${i}`,a=t+e;o.set(n,a),g.add(a)}}}if(r){let{fragmentMap:t,disjointConnectivityMap:n}=cm(e,g,i);g.clear(),t.forEach(({forward:e,reverse:t})=>{e.forEach(({index:e})=>g.add(e)),t.forEach(({index:e})=>g.add(e))}),this.unmatchedDisjointEdges=t,this.disjointConnections=n,h=d*3-g.size}this.matchedEdges=h,this.unmatchedEdges=g.size,this.data=m;function _(e){return um.fromBufferAttribute(u,e),Bp(um)}function v(e){let t=``;for(let n=0,r=c.length;n<r;n++){let r=s[c[n]],i;switch(r.itemSize){case 1:i=Rp(r.getX(e));break;case 2:i=zp(lm.fromBufferAttribute(r,e));break;case 3:i=Bp(um.fromBufferAttribute(r,e));break;case 4:i=Vp(dm.fromBufferAttribute(r,e));break}t!==``&&(t+=`|`),t+=i}return t}}},mm=class extends $r{constructor(...e){super(...e),this.isBrush=!0,this._previousMatrix=new q,this._previousMatrix.elements.fill(0)}markUpdated(){this._previousMatrix.copy(this.matrix)}isDirty(){let{matrix:e,_previousMatrix:t}=this,n=e.elements,r=t.elements;for(let e=0;e<16;e++)if(n[e]!==r[e])return!0;return!1}prepareGeometry(){let e=this.geometry,t=e.attributes,n=Up();if(n)for(let e in t){let n=t[e];if(n.isInterleavedBufferAttribute)throw Error(`Brush: InterleavedBufferAttributes are not supported.`);n.array=Wp(n.array)}if(e.boundsTree||=(Kp(e,{useSharedArrayBuffer:n}),new Np(e,{maxLeafTris:3,indirect:!0,useSharedArrayBuffer:n})),e.halfEdges||=new pm(e),!e.groupIndices){let t=Jp(e),n=new Uint16Array(t),r=e.groups;for(let e=0,t=r.length;e<t;e++){let{start:t,count:i}=r[e];for(let r=t/3,a=(t+i)/3;r<a;r++)n[r]=e}e.groupIndices=n}}disposeCacheData(){let{geometry:e}=this;e.halfEdges=null,e.boundsTree=null,e.groupIndices=null}},hm=1e-14,gm=new U,_m=new U,vm=new U;function ym(e,t=hm){gm.subVectors(e.b,e.a),_m.subVectors(e.c,e.a),vm.subVectors(e.b,e.c);let n=gm.angleTo(_m),r=gm.angleTo(vm),i=Math.PI-n-r;return Math.abs(n)<t||Math.abs(r)<t||Math.abs(i)<t||e.a.distanceToSquared(e.b)<t||e.a.distanceToSquared(e.c)<t||e.b.distanceToSquared(e.c)<t}var bm=1e-10,xm=1e-10,Sm=1e-10,Cm=new _s,wm=new _s,Tm=new U,Em=new U,Dm=new U,Om=new ki,km=new of,Am=class{constructor(){this._pool=[],this._index=0}getTriangle(){return this._index>=this._pool.length&&this._pool.push(new yr),this._pool[this._index++]}clear(){this._index=0}reset(){this._pool.length=0,this._index=0}},jm=class{constructor(){this.trianglePool=new Am,this.triangles=[],this.normal=new U,this.coplanarTriangleUsed=!1}initialize(e){this.reset();let{triangles:t,trianglePool:n,normal:r}=this;if(Array.isArray(e))for(let i=0,a=e.length;i<a;i++){let a=e[i];if(i===0)a.getNormal(r);else if(Math.abs(1-a.getNormal(Tm).dot(r))>bm)throw Error(`Triangle Splitter: Cannot initialize with triangles that have different normals.`);let o=n.getTriangle();o.copy(a),t.push(o)}else{e.getNormal(r);let i=n.getTriangle();i.copy(e),t.push(i)}}splitByTriangle(e){let{normal:t,triangles:n}=this;if(e.getNormal(Em).normalize(),Math.abs(1-Math.abs(Em.dot(t)))<Sm){this.coplanarTriangleUsed=!0;for(let e=0,t=n.length;e<t;e++){let t=n[e];t.coplanarCount=0}let t=[e.a,e.b,e.c];for(let n=0;n<3;n++){let r=(n+1)%3,i=t[n],a=t[r];Tm.subVectors(a,i).normalize(),Dm.crossVectors(Em,Tm),Om.setFromNormalAndCoplanarPoint(Dm,i),this.splitByPlane(Om,e)}}else e.getPlane(Om),this.splitByPlane(Om,e)}splitByPlane(e,t){let{triangles:n,trianglePool:r}=this;km.copy(t),km.needsUpdate=!0;for(let t=0,i=n.length;t<i;t++){let a=n[t];if(!km.intersectsTriangle(a,Cm,!0))continue;let{a:o,b:s,c}=a,l=0,u=-1,d=!1,f=[],p=[],m=[o,s,c];for(let t=0;t<3;t++){let n=(t+1)%3;Cm.start.copy(m[t]),Cm.end.copy(m[n]);let r=e.distanceToPoint(Cm.start),i=e.distanceToPoint(Cm.end);if(Math.abs(r)<xm&&Math.abs(i)<xm){d=!0;break}if(r>0?f.push(t):p.push(t),Math.abs(r)<xm)continue;let a=!!e.intersectLine(Cm,Tm);!a&&Math.abs(i)<xm&&(Tm.copy(Cm.end),a=!0),a&&!(Tm.distanceTo(Cm.start)<bm)&&(Tm.distanceTo(Cm.end)<bm&&(u=t),l===0?wm.start.copy(Tm):wm.end.copy(Tm),l++)}if(!d&&l===2&&wm.distance()>xm)if(u!==-1){u=(u+1)%3;let e=0;e===u&&(e=(e+1)%3);let o=e+1;o===u&&(o=(o+1)%3);let s=r.getTriangle();s.a.copy(m[o]),s.b.copy(wm.end),s.c.copy(wm.start),ym(s)||n.push(s),a.a.copy(m[e]),a.b.copy(wm.start),a.c.copy(wm.end),ym(a)&&(n.splice(t,1),t--,i--)}else{let e=f.length>=2?p[0]:f[0];if(e===0){let e=wm.start;wm.start=wm.end,wm.end=e}let o=(e+1)%3,s=(e+2)%3,c=r.getTriangle(),l=r.getTriangle();m[o].distanceToSquared(wm.start)<m[s].distanceToSquared(wm.end)?(c.a.copy(m[o]),c.b.copy(wm.start),c.c.copy(wm.end),l.a.copy(m[o]),l.b.copy(m[s]),l.c.copy(wm.start)):(c.a.copy(m[s]),c.b.copy(wm.start),c.c.copy(wm.end),l.a.copy(m[o]),l.b.copy(m[s]),l.c.copy(wm.end)),a.a.copy(m[e]),a.b.copy(wm.end),a.c.copy(wm.start),ym(c)||n.push(c),ym(l)||n.push(l),ym(a)&&(n.splice(t,1),t--,i--)}else l===3&&console.warn(`TriangleClipper: Coplanar clip not handled`)}}reset(){this.triangles.length=0,this.trianglePool.clear(),this.coplanarTriangleUsed=!1}};function Mm(e){return e=~~e,e+4-e%4}var Nm=class{constructor(e,t=500){this.expansionFactor=1.5,this.type=e,this.length=0,this.array=null,this.setSize(t)}setType(e){if(this.length!==0)throw Error(`TypeBackedArray: Cannot change the type while there is used data in the buffer.`);let t=this.array.buffer;this.array=new e(t),this.type=e}setSize(e){if(this.array&&e===this.array.length)return;let t=this.type,n=new t(new(Up()?SharedArrayBuffer:ArrayBuffer)(Mm(e*t.BYTES_PER_ELEMENT)));this.array&&n.set(this.array,0),this.array=n}expand(){let{array:e,expansionFactor:t}=this;this.setSize(e.length*t)}push(...e){let{array:t,length:n}=this;n+e.length>t.length&&(this.expand(),t=this.array);for(let r=0,i=e.length;r<i;r++)t[n+r]=e[r];this.length+=e.length}clear(){this.length=0}},Pm=class{constructor(){this.groupAttributes=[{}],this.groupCount=0}getType(e){return this.groupAttributes[0][e].type}getItemSize(e){return this.groupAttributes[0][e].itemSize}getNormalized(e){return this.groupAttributes[0][e].normalized}getCount(e){if(this.groupCount<=e)return 0;let t=this.getGroupAttrArray(`position`,e);return t.length/t.itemSize}getTotalLength(e){let{groupCount:t,groupAttributes:n}=this,r=0;for(let i=0;i<t;i++){let t=n[i];r+=t[e].length}return r}getGroupAttrSet(e=0){let{groupAttributes:t}=this;if(t[e])return this.groupCount=Math.max(this.groupCount,e+1),t[e];let n=t[0];for(this.groupCount=Math.max(this.groupCount,e+1);e>=t.length;){let e={};t.push(e);for(let t in n){let r=n[t],i=new Nm(r.type);i.itemSize=r.itemSize,i.normalized=r.normalized,e[t]=i}}return t[e]}getGroupAttrArray(e,t=0){let{groupAttributes:n}=this;if(!n[0][e])throw Error(`TypedAttributeData: Attribute with "${e}" has not been initialized`);return this.getGroupAttrSet(t)[e]}initializeArray(e,t,n,r){let{groupAttributes:i}=this,a=i[0][e];if(a){if(a.type!==t)for(let a=0,o=i.length;a<o;a++){let o=i[a][e];o.setType(t),o.itemSize=n,o.normalized=r}}else for(let a=0,o=i.length;a<o;a++){let o=new Nm(t);o.itemSize=n,o.normalized=r,i[a][e]=o}}clear(){this.groupCount=0;let{groupAttributes:e}=this;e.forEach(e=>{for(let t in e)e[t].clear()})}delete(e){this.groupAttributes.forEach(t=>{delete t[e]})}reset(){this.groupAttributes=[],this.groupCount=0}},Fm=class{constructor(){this.intersectionSet={},this.ids=[]}add(e,t){let{intersectionSet:n,ids:r}=this;n[e]||(n[e]=[],r.push(e)),n[e].push(t)}},Im=new Mn,Lm=new q,Rm=new yr,zm=new U,Bm=new K,Vm=new K,Hm=new K,Um=new K,Wm=new K,Gm=new K,Km=new _s,qm=new U,Jm=1e-8,Ym=1e-15,Xm=1e-14,Zm=null;function Qm(e){Zm=e}function $m(e,t){e.getMidpoint(Im.origin),e.getNormal(Im.direction);let n=t.raycastFirst(Im,2);return n&&Im.direction.dot(n.face.normal)>0?-1:1}function eh(e,t){function n(){return Math.random()-.5}e.getNormal(qm),Im.direction.copy(qm),e.getMidpoint(Im.origin);let r=0,i=1/0;for(let e=0;e<3;e++){Im.direction.x+=n()*Jm,Im.direction.y+=n()*Jm,Im.direction.z+=n()*Jm,Im.direction.multiplyScalar(-1);let a=t.raycastFirst(Im,2);if(a&&Im.direction.dot(a.face.normal)>0&&r++,a!==null&&(i=Math.min(i,a.distance)),i<=Ym)return a.face.normal.dot(qm)>0?2:-2;if(r/3>.5||(e-r+1)/3>.5)break}return r/3>.5?-1:1}function th(e,t){let n=new Fm,r=new Fm;return Lm.copy(e.matrixWorld).invert().multiply(t.matrixWorld),e.geometry.boundsTree.bvhcast(t.geometry.boundsTree,Lm,{intersectsTriangles(i,a,o,s){if(!ym(i)&&!ym(a)){let c=i.intersectsTriangle(a,Km,!0);if(!c){let e=i.plane,t=a.plane,n=e.normal,r=t.normal;n.dot(r)===1&&Math.abs(e.constant-t.constant)<Xm&&(c=!0)}if(c){let c=e.geometry.boundsTree.resolveTriangleIndex(o),l=t.geometry.boundsTree.resolveTriangleIndex(s);n.add(c,l),r.add(l,c),Zm&&(Zm.addEdge(Km),Zm.addIntersectingTriangles(o,i,s,a))}}return!1}}),{aIntersections:n,bIntersections:r}}function nh(e,t,n,r,i,a,o=!1){let s=n.attributes,c=n.index,l=e*3,u=c.getX(l+0),d=c.getX(l+1),f=c.getX(l+2);for(let e in a){let n=s[e],c=a[e];if(!(e in s))throw Error(`CSG Operations: Attribute ${e} not available on geometry.`);let l=n.itemSize;e===`position`?(Rm.a.fromBufferAttribute(n,u).applyMatrix4(r),Rm.b.fromBufferAttribute(n,d).applyMatrix4(r),Rm.c.fromBufferAttribute(n,f).applyMatrix4(r),ah(Rm.a,Rm.b,Rm.c,t,3,c,o)):e===`normal`?(Rm.a.fromBufferAttribute(n,u).applyNormalMatrix(i),Rm.b.fromBufferAttribute(n,d).applyNormalMatrix(i),Rm.c.fromBufferAttribute(n,f).applyNormalMatrix(i),o&&(Rm.a.multiplyScalar(-1),Rm.b.multiplyScalar(-1),Rm.c.multiplyScalar(-1)),ah(Rm.a,Rm.b,Rm.c,t,3,c,o,!0)):(Bm.fromBufferAttribute(n,u),Vm.fromBufferAttribute(n,d),Hm.fromBufferAttribute(n,f),ah(Bm,Vm,Hm,t,l,c,o))}}function rh(e,t,n,r,i,a,o,s=!1){oh(e,r,i,a,o,s),oh(s?n:t,r,i,a,o,s),oh(s?t:n,r,i,a,o,s)}function ih(e,t,n=!1){switch(e){case 0:if(t===1||t===2&&!n)return 1;break;case 1:if(n){if(t===-1)return 0}else if(t===1||t===-2)return 1;break;case 2:if(n){if(t===1||t===-2)return 1}else if(t===-1)return 0;break;case 4:if(t===-1)return 0;if(t===1)return 1;break;case 3:if(t===-1||t===2&&!n)return 1;break;case 5:if(!n&&(t===1||t===-2))return 1;break;case 6:if(!n&&(t===-1||t===2))return 1;break;default:throw Error(`Unrecognized CSG operation enum "${e}".`)}return 2}function ah(e,t,n,r,i,a,o=!1,s=!1){let c=e=>{a.push(e.x),i>1&&a.push(e.y),i>2&&a.push(e.z),i>3&&a.push(e.w)};Um.set(0,0,0,0).addScaledVector(e,r.a.x).addScaledVector(t,r.a.y).addScaledVector(n,r.a.z),Wm.set(0,0,0,0).addScaledVector(e,r.b.x).addScaledVector(t,r.b.y).addScaledVector(n,r.b.z),Gm.set(0,0,0,0).addScaledVector(e,r.c.x).addScaledVector(t,r.c.y).addScaledVector(n,r.c.z),s&&(Um.normalize(),Wm.normalize(),Gm.normalize()),c(Um),o?(c(Gm),c(Wm)):(c(Wm),c(Gm))}function oh(e,t,n,r,i,a=!1){for(let o in i){let s=t[o],c=i[o];if(!(o in t))throw Error(`CSG Operations: Attribute ${o} no available on geometry.`);let l=s.itemSize;o===`position`?(zm.fromBufferAttribute(s,e).applyMatrix4(n),c.push(zm.x,zm.y,zm.z)):o===`normal`?(zm.fromBufferAttribute(s,e).applyNormalMatrix(r),a&&zm.multiplyScalar(-1),c.push(zm.x,zm.y,zm.z)):(c.push(s.getX(e)),l>1&&c.push(s.getY(e)),l>2&&c.push(s.getZ(e)),l>3&&c.push(s.getW(e)))}}var sh=class{constructor(e){this.triangle=new yr().copy(e),this.intersects={}}addTriangle(e,t){this.intersects[e]=new yr().copy(t)}getIntersectArray(){let e=[],{intersects:t}=this;for(let n in t)e.push(t[n]);return e}},ch=class{constructor(){this.data={}}addTriangleIntersection(e,t,n,r){let{data:i}=this;i[e]||(i[e]=new sh(t)),i[e].addTriangle(n,r)}getTrianglesAsArray(e=null){let{data:t}=this,n=[];if(e!==null)e in t&&n.push(t[e].triangle);else for(let e in t)n.push(t[e].triangle);return n}getTriangleIndices(){return Object.keys(this.data).map(e=>parseInt(e))}getIntersectionIndices(e){let{data:t}=this;return t[e]?Object.keys(t[e].intersects).map(e=>parseInt(e)):[]}getIntersectionsAsArray(e=null,t=null){let{data:n}=this,r=new Set,i=[],a=e=>{if(n[e])if(t!==null)n[e].intersects[t]&&i.push(n[e].intersects[t]);else{let t=n[e].intersects;for(let e in t)r.has(e)||(r.add(e),i.push(t[e]))}};if(e!==null)a(e);else for(let e in n)a(e);return i}reset(){this.data={}}},lh=class{constructor(){this.enabled=!1,this.triangleIntersectsA=new ch,this.triangleIntersectsB=new ch,this.intersectionEdges=[]}addIntersectingTriangles(e,t,n,r){let{triangleIntersectsA:i,triangleIntersectsB:a}=this;i.addTriangleIntersection(e,t,n,r),a.addTriangleIntersection(n,r,e,t)}addEdge(e){this.intersectionEdges.push(e.clone())}reset(){this.triangleIntersectsA.reset(),this.triangleIntersectsB.reset(),this.intersectionEdges=[]}init(){this.enabled&&(this.reset(),Qm(this))}complete(){this.enabled&&Qm(null)}},uh=new q,dh=new W,fh=new yr,ph=new yr,mh=new yr,hh=new yr,gh=[],_h=[];function vh(e){for(let t of e)return t}function yh(e,t,n,r,i,a={}){let{useGroups:o=!0}=a,{aIntersections:s,bIntersections:c}=th(e,t),l=[],u;return u=o?0:-1,bh(e,t,s,n,!1,r,i,u),xh(e,t,s,n,!1,i,u),n.findIndex(e=>e!==6&&e!==5)!==-1&&(u=o?e.geometry.groups.length||1:-1,bh(t,e,c,n,!0,r,i,u),xh(t,e,c,n,!0,i,u)),gh.length=0,_h.length=0,{groups:l,materials:null}}function bh(e,t,n,r,i,a,o,s=0){let c=e.matrixWorld.determinant()<0;uh.copy(t.matrixWorld).invert().multiply(e.matrixWorld),dh.getNormalMatrix(e.matrixWorld).multiplyScalar(c?-1:1);let l=e.geometry.groupIndices,u=e.geometry.index,d=e.geometry.attributes.position,f=t.geometry.boundsTree,p=t.geometry.index,m=t.geometry.attributes.position,h=n.ids,g=n.intersectionSet;for(let t=0,n=h.length;t<n;t++){let n=h[t],_=s===-1?0:l[n]+s,v=3*n,y=u.getX(v+0),b=u.getX(v+1),x=u.getX(v+2);fh.a.fromBufferAttribute(d,y).applyMatrix4(uh),fh.b.fromBufferAttribute(d,b).applyMatrix4(uh),fh.c.fromBufferAttribute(d,x).applyMatrix4(uh),a.reset(),a.initialize(fh);let S=g[n];for(let e=0,t=S.length;e<t;e++){let t=3*S[e],n=p.getX(t+0),r=p.getX(t+1),i=p.getX(t+2);ph.a.fromBufferAttribute(m,n),ph.b.fromBufferAttribute(m,r),ph.c.fromBufferAttribute(m,i),a.splitByTriangle(ph)}let C=a.triangles;for(let t=0,s=C.length;t<s;t++){let s=C[t],l=a.coplanarTriangleUsed?eh(s,f):$m(s,f);gh.length=0,_h.length=0;for(let e=0,t=r.length;e<t;e++){let t=ih(r[e],l,i);t!==2&&(_h.push(t),gh.push(o[e].getGroupAttrSet(_)))}if(gh.length!==0){fh.getBarycoord(s.a,hh.a),fh.getBarycoord(s.b,hh.b),fh.getBarycoord(s.c,hh.c);for(let t=0,r=gh.length;t<r;t++){let r=gh[t],i=_h[t]===0;nh(n,hh,e.geometry,e.matrixWorld,dh,r,c!==i)}}}}return h.length}function xh(e,t,n,r,i,a,o=0){let s=e.matrixWorld.determinant()<0;uh.copy(t.matrixWorld).invert().multiply(e.matrixWorld),dh.getNormalMatrix(e.matrixWorld).multiplyScalar(s?-1:1);let c=t.geometry.boundsTree,l=e.geometry.groupIndices,u=e.geometry.index,d=e.geometry.attributes,f=d.position,p=[],m=e.geometry.halfEdges,h=new Set,g=Jp(e.geometry);for(let e=0,t=g;e<t;e++)e in n.intersectionSet||h.add(e);for(;h.size>0;){let t=vh(h);h.delete(t),p.push(t);let n=3*t,g=u.getX(n+0),_=u.getX(n+1),v=u.getX(n+2);mh.a.fromBufferAttribute(f,g).applyMatrix4(uh),mh.b.fromBufferAttribute(f,_).applyMatrix4(uh),mh.c.fromBufferAttribute(f,v).applyMatrix4(uh);let y=$m(mh,c);_h.length=0,gh.length=0;for(let e=0,t=r.length;e<t;e++){let t=ih(r[e],y,i);t!==2&&(_h.push(t),gh.push(a[e]))}for(;p.length>0;){let t=p.pop();for(let e=0;e<3;e++){let n=m.getSiblingTriangleIndex(t,e);n!==-1&&h.has(n)&&(p.push(n),h.delete(n))}if(gh.length!==0){let n=3*t,r=u.getX(n+0),i=u.getX(n+1),a=u.getX(n+2),c=o===-1?0:l[t]+o;if(mh.a.fromBufferAttribute(f,r),mh.b.fromBufferAttribute(f,i),mh.c.fromBufferAttribute(f,a),!ym(mh))for(let t=0,n=gh.length;t<n;t++){let n=_h[t],o=gh[t].getGroupAttrSet(c),l=n===0;rh(r,i,a,d,e.matrixWorld,dh,o,l!==s)}}}}}function Sh(e){for(let t=0;t<e.length-1;t++){let n=e[t],r=e[t+1];if(n.materialIndex===r.materialIndex){let i=n.start,a=r.start+r.count;r.start=i,r.count=a-i,e.splice(t,1),t--}}}function Ch(e,t,n,r){n.clear();let i=e.attributes;for(let e=0,t=r.length;e<t;e++){let t=r[e],a=i[t];n.initializeArray(t,a.array.constructor,a.itemSize,a.normalized)}for(let e in n.attributes)r.includes(e)||n.delete(e);for(let e in t.attributes)r.includes(e)||(t.deleteAttribute(e),t.dispose())}function wh(e,t,n){let r=!1,i=-1,a=e.attributes,o=t.groupAttributes[0];for(let s in o){let o=t.getTotalLength(s),c=t.getType(s),l=t.getItemSize(s),u=t.getNormalized(s),d=a[s];(!d||d.array.length<o)&&(d=new jr(new c(o),l,u),e.setAttribute(s,d),r=!0);let f=0;for(let e=0,r=Math.min(n.length,t.groupCount);e<r;e++){let r=n[e].index,{array:i,type:a,length:o}=t.groupAttributes[r][s],c=new a(i.buffer,0,o);d.array.set(c,f),f+=c.length}d.needsUpdate=!0,i=o/d.itemSize}if(e.index){let t=e.index.array;if(t.length<i)e.index=null,r=!0;else for(let e=0,n=t.length;e<n;e++)t[e]=e}let s=0;e.clearGroups();for(let r=0,i=Math.min(n.length,t.groupCount);r<i;r++){let{index:i,materialIndex:a}=n[r],o=t.getCount(i);o!==0&&(e.addGroup(s,o,a),s+=o)}e.setDrawRange(0,i),e.boundsTree=null,r&&e.dispose()}function Th(e,t){let n=t;return Array.isArray(t)||(n=[],e.forEach(e=>{n[e.materialIndex]=t})),n}var Eh=class{constructor(){this.triangleSplitter=new jm,this.attributeData=[],this.attributes=[`position`,`uv`,`normal`],this.useGroups=!0,this.consolidateGroups=!0,this.debug=new lh}getGroupRanges(e){return!this.useGroups||e.groups.length===0?[{start:0,count:1/0,materialIndex:0}]:e.groups.map(e=>({...e}))}evaluate(e,t,n,r=new mm){let i=!0;if(Array.isArray(n)||(n=[n]),Array.isArray(r)||(r=[r],i=!1),r.length!==n.length)throw Error(`Evaluator: operations and target array passed as different sizes.`);e.prepareGeometry(),t.prepareGeometry();let{triangleSplitter:a,attributeData:o,attributes:s,useGroups:c,consolidateGroups:l,debug:u}=this;for(;o.length<r.length;)o.push(new Pm);r.forEach((t,n)=>{Ch(e.geometry,t.geometry,o[n],s)}),u.init(),yh(e,t,n,a,o,{useGroups:c}),u.complete();let d=this.getGroupRanges(e.geometry),f=Th(d,e.material),p=this.getGroupRanges(t.geometry),m=Th(p,t.material);p.forEach(e=>e.materialIndex+=f.length);let h=[...d,...p].map((e,t)=>({...e,index:t}));if(c){let e=[...f,...m];l&&(h=h.map(t=>{let n=e[t.materialIndex];return t.materialIndex=e.indexOf(n),t}).sort((e,t)=>e.materialIndex-t.materialIndex));let t=[];for(let n=0,r=e.length;n<r;n++){let r=!1;for(let e=0,i=h.length;e<i;e++){let i=h[e];i.materialIndex===n&&(r=!0,i.materialIndex=t.length)}r&&t.push(e[n])}r.forEach(e=>{e.material=t})}else h=[{start:0,count:1/0,index:0,materialIndex:0}],r.forEach(e=>{e.material=f[0]});return r.forEach((e,t)=>{let n=e.geometry;wh(n,o[t],h),l&&Sh(n.groups)}),i?r:r[0]}evaluateHierarchy(e,t=new mm){e.updateMatrixWorld(!0);let n=(e,t)=>{let r=e.children;for(let e=0,i=r.length;e<i;e++){let i=r[e];i.isOperationGroup?n(i,t):t(i)}},r=e=>{let t=e.children,i=!1;for(let e=0,n=t.length;e<n;e++){let n=t[e];i=r(n)||i}let a=e.isDirty();if(a&&e.markUpdated(),i&&!e.isOperationGroup){let t;return n(e,n=>{t=t?this.evaluate(t,n,n.operation):this.evaluate(e,n,n.operation)}),e._cachedGeometry=t.geometry,e._cachedMaterials=t.material,!0}else return i||a};return r(e),t.geometry=e._cachedGeometry,t.material=e._cachedMaterials,t}reset(){this.triangleSplitter.reset()}},Dh=class{scopes=[];constructor(){this.pushScope()}pushScope(){this.scopes.push(new Map)}popScope(){this.scopes.length>1&&this.scopes.pop()}set(e,t){this.scopes[this.scopes.length-1].set(e,t)}get(e){for(let t=this.scopes.length-1;t>=0;t--)if(this.scopes[t].has(e))return this.scopes[t].get(e)}has(e){return this.get(e)!==void 0}},Oh={round:e=>Math.round($(e)),floor:e=>Math.floor($(e)),ceil:e=>Math.ceil($(e)),abs:e=>Math.abs($(e)),sign:e=>Math.sign($(e)),sqrt:e=>Math.sqrt($(e)),pow:(e,t)=>$(e)**+$(t),min:(...e)=>Math.min(...e.map($)),max:(...e)=>Math.max(...e.map($)),sin:e=>Math.sin($(e)),cos:e=>Math.cos($(e)),tan:e=>Math.tan($(e)),asin:e=>Math.asin($(e)),acos:e=>Math.acos($(e)),atan:e=>Math.atan($(e)),atan2:(e,t)=>Math.atan2($(e),$(t)),dot:(e,t)=>{let n=kh(e),r=kh(t),i=0;for(let e=0;e<Math.min(n.length,r.length);e++)i+=$(n[e])*$(r[e]);return i},cross:(e,t)=>{let n=kh(e),r=kh(t);if(n.length<3||r.length<3)throw Error(`cross product requires 3D vectors`);let i=$(n[0]),a=$(n[1]),o=$(n[2]),s=$(r[0]),c=$(r[1]),l=$(r[2]);return[a*l-o*c,o*s-i*l,i*c-a*s]},length:e=>{let t=kh(e),n=0;for(let e of t){let t=$(e);n+=t*t}return Math.sqrt(n)},normalize:e=>{let t=kh(e),n=Oh.length(e);return n===0?t:t.map(e=>$(e)/n)},sum:e=>kh(e).reduce((e,t)=>e+$(t),0),join:(...e)=>{let t=e.length>0&&typeof e[e.length-1]==`string`?e.pop():``;return e.map(String).join(t)},trim:e=>String(e).trim(),rand:()=>Math.random()};function $(e){if(typeof e==`number`)return e;if(typeof e==`boolean`)return+!!e;if(typeof e==`string`){let t=parseFloat(e);if(isNaN(t))throw Error(`Cannot convert "${e}" to number`);return t}if(Array.isArray(e)&&e.length>0)return $(e[0]);throw Error(`Cannot convert ${typeof e} to number`)}function kh(e){return Array.isArray(e)?e:[e]}function Ah(e){return typeof e==`boolean`?e:typeof e==`number`?e!==0:typeof e==`string`||Array.isArray(e)?e.length>0:!1}var jh=class{symbols;constructor(e){this.symbols=e||new Dh}getSymbols(){return this.symbols}evaluate(e){if(typeof e==`number`||typeof e==`string`||Array.isArray(e))return e;switch(e.type){case`number`:return e.value;case`identifier`:{if(e.name===`rnd`)return Math.random();let t=this.symbols.get(e.name);if(t===void 0)throw Error(`Undefined variable: ${e.name}`);return t}case`binary`:{let t=this.evaluate(e.left),n=this.evaluate(e.right);switch(e.operator){case`+`:if(Array.isArray(t)&&Array.isArray(n)){let e=[...t];for(let t=0;t<e.length&&t<n.length;t++)e[t]=$(e[t])+$(n[t]);return e}return $(t)+$(n);case`-`:if(Array.isArray(t)&&Array.isArray(n)){let e=[...t];for(let t=0;t<e.length&&t<n.length;t++)e[t]=$(e[t])-$(n[t]);return e}return $(t)-$(n);case`*`:if(Array.isArray(t)&&Array.isArray(n)){let e=Math.min(t.length,n.length),r=[];for(let i=0;i<e;i++)r.push($(t[i])*$(n[i]));return r}return Array.isArray(t)?t.map(e=>$(e)*$(n)):Array.isArray(n)?n.map(e=>$(t)*$(e)):$(t)*$(n);case`/`:if(Array.isArray(t)&&Array.isArray(n)){let e=Math.min(t.length,n.length),r=[];for(let i=0;i<e;i++)r.push($(t[i])/$(n[i]));return r}return Array.isArray(t)?t.map(e=>$(e)/$(n)):$(t)/$(n);case`%`:return $(t)%$(n);case`=`:if(Array.isArray(t)&&Array.isArray(n)){if(t.length!==n.length)return!1;for(let e=0;e<t.length;e++)if($(t[e])!==$(n[e]))return!1;return!0}return t===n;case`<>`:if(Array.isArray(t)&&Array.isArray(n)){if(t.length!==n.length)return!0;for(let e=0;e<t.length;e++)if($(t[e])!==$(n[e]))return!0;return!1}return t!==n;case`<`:return $(t)<$(n);case`<=`:return $(t)<=$(n);case`>`:return $(t)>$(n);case`>=`:return $(t)>=$(n);case`and`:return Ah(t)&&Ah(n);case`or`:return Ah(t)||Ah(n);default:throw Error(`Unknown binary operator: ${e.operator}`)}}case`unary`:{let t=this.evaluate(e.operand);switch(e.operator){case`-`:return Array.isArray(t)?t.map(e=>-$(e)):-$(t);case`not`:return!Ah(t);default:throw Error(`Unknown unary operator: ${e.operator}`)}}case`call`:{let t=Oh[e.name.toLowerCase()];if(!t)throw Error(`Unknown function: ${e.name}`);return t(...e.args.map(e=>this.evaluate(e)))}case`tuple`:return e.elements.map(e=>this.evaluate(e));case`member`:case`subscript`:throw Error(`Member access and subscripting not yet implemented: ${e.type}`);default:throw Error(`Unknown expression type: ${e.type}`)}}evaluateToNumber(e){return $(this.evaluate(e))}evaluateToBoolean(e){return Ah(this.evaluate(e))}evaluateToVector3(e){if(Array.isArray(e)&&typeof e[0]==`number`)return e;let t=this.evaluate(e);if(Array.isArray(t))return[t.length>0?$(t[0]):0,t.length>1?$(t[1]):0,t.length>2?$(t[2]):0];let n=$(t);return[n,n,n]}evaluateToColor(e){if(Array.isArray(e)&&typeof e[0]==`number`)return e;let t=this.evaluate(e);if(Array.isArray(t))return[t.length>0?$(t[0]):0,t.length>1?$(t[1]):0,t.length>2?$(t[2]):0];let n=$(t);return[n,n,n]}},Mh=class{options;evaluator;symbols;detailLevel=32;transformStack=[];constructor(e={}){this.options=e,this.symbols=new Dh,this.evaluator=new jh(this.symbols),this.pushTransform()}convert(e){let t=new xi;for(let n of e){let e=this.convertNode(n);e&&t.add(e)}return t}convertNode(e){switch(e.type){case`shape`:return this.convertShape(e);case`csg`:return this.convertCSG(e);case`block`:return this.convertBlock(e);case`for`:return this.convertForLoop(e);case`if`:return this.convertIf(e);case`switch`:return this.convertSwitch(e);case`define`:return this.handleDefine(e),null;case`extrude`:return this.convertExtrude(e);case`loft`:return this.convertLoft(e);case`lathe`:return this.convertLathe(e);case`fill`:return this.convertFill(e);case`hull`:return this.convertHull(e);case`group`:return this.convertBlock(e);case`detail`:return this.handleDetail(e),null;case`color`:return this.handleColorCommand(e),null;case`rotate`:return this.handleRotateCommand(e),null;case`orientation`:return this.handleOrientationCommand(e),null;case`translate`:return this.handleTranslateCommand(e),null;case`scale`:return this.handleScaleCommand(e),null;case`customShape`:return this.convertCustomShape(e);default:return console.warn(`Unknown node type: ${e.type}`),null}}convertBlock(e){let t=new xi;this.symbols.pushScope(),this.pushTransform();for(let n of e.children){let e=this.convertNode(n);e&&t.add(e)}return this.popTransform(),this.symbols.popScope(),t}convertShape(e){let t=new $r(this.createGeometry(e),this.createMaterial(e));return this.applyExplicitTransforms(t,e.properties),this.applyCurrentTransform(t),t}createGeometry(e){let t=[1,1,1];switch(e.properties.size&&(t=this.evaluateVector3(e.properties.size)),t[1]===0&&t[2]===0&&t[0]!==0&&(t=[t[0],t[0],t[0]]),e.primitive){case`cube`:return new ni(t[0],t[1],t[2]);case`sphere`:return new bo(t[0],this.detailLevel,this.detailLevel);case`cylinder`:return new Zi(e.properties.radiusTop?this.evaluateNumber(e.properties.radiusTop):t[0],e.properties.radiusBottom?this.evaluateNumber(e.properties.radiusBottom):t[0],e.properties.height?this.evaluateNumber(e.properties.height):t[1],this.detailLevel);case`cone`:{let n=t[0];return new Qi(n,e.properties.height?this.evaluateNumber(e.properties.height):t[1],this.detailLevel)}case`torus`:return new xo(e.properties.outerRadius?this.evaluateNumber(e.properties.outerRadius):t[0],e.properties.innerRadius?this.evaluateNumber(e.properties.innerRadius):.4,Math.max(3,Math.floor(this.detailLevel/2)),this.detailLevel);case`circle`:return new Xi(t[0]||1,this.detailLevel);case`square`:{let e=t[0]||1;return new _o(e,e)}case`polygon`:return new Xi(t[0]||1,6);default:return console.warn(`Unknown primitive: ${e.primitive}`),new ni(1,1,1)}}createMaterial(e){let t=e.properties.color?this.evaluateColor(e.properties.color):[.8,.8,.8],n=new J(t[0],t[1],t[2]),r=e.properties.opacity?this.evaluateNumber(e.properties.opacity):1;return new Co({color:n,opacity:r,transparent:r<1,wireframe:this.options.wireframe??!1})}convertCSG(e){if(e.children.length===0)return new xi;let t=this.currentTransform().matrix.clone();try{let n=new Eh;this.symbols.pushScope(),this.pushTransform();let r=this.currentTransform();r.matrix.identity(),r.color=void 0;let i=[];for(let t of e.children){let e=this.convertNode(t);if(e instanceof $r){let t=e.clone();t.updateMatrixWorld(!0),i.push(t)}else e instanceof xi&&e.traverse(e=>{if(e instanceof $r){let t=e.clone();t.updateMatrixWorld(!0),i.push(t)}})}if(this.popTransform(),this.symbols.popScope(),i.length===0)return new xi;let a=i.map(e=>{let t=new mm(e.geometry,e.material);return t.position.copy(e.position),t.rotation.copy(e.rotation),t.scale.copy(e.scale),t.updateMatrixWorld(!0),t}),o=a[0];for(let t=1;t<a.length;t++){let r=a[t];switch(e.operation){case`union`:o=n.evaluate(o,r,0);break;case`difference`:o=n.evaluate(o,r,1);break;case`intersection`:o=n.evaluate(o,r,3);break;case`xor`:{let e=n.evaluate(o.clone(),r.clone(),1),t=n.evaluate(r.clone(),o.clone(),1);o=n.evaluate(e,t,0);break}case`stencil`:o=n.evaluate(o,r,3);break}}return o.material||=a[0].material,o.applyMatrix4(t),o.updateMatrixWorld(!0),o}catch{let n=new xi;this.symbols.pushScope();for(let t of e.children){let e=this.convertNode(t);e&&n.add(e)}return this.symbols.popScope(),n.applyMatrix4(t),n.updateMatrixWorld(!0),n}}convertForLoop(e){let t=new xi;if(this.symbols.pushScope(),this.pushTransform(),e.iterableValues){let n=this.evaluator.evaluate(e.iterableValues),r=Array.isArray(n)?n:[n];for(let n=0;n<r.length;n++){this.symbols.set(e.variable,r[n]);for(let n of e.body){let e=this.convertNode(n);e&&t.add(e)}}}else{let n=this.evaluateNumber(e.from),r=this.evaluateNumber(e.to),i=e.step?this.evaluateNumber(e.step):1,a=[];if(i>0)for(let e=n;e<=r;e+=i)a.push(e);else if(i<0)for(let e=n;e>=r;e+=i)a.push(e);for(let n=0;n<a.length;n++){let r=a[n];this.symbols.set(e.variable,r);for(let n of e.body){let e=this.convertNode(n);e&&t.add(e)}}}return this.popTransform(),this.symbols.popScope(),t}convertIf(e){let t=new xi,n=this.evaluator.evaluateToBoolean(e.condition);if(this.symbols.pushScope(),this.pushTransform(),n)for(let n of e.thenBody){let e=this.convertNode(n);e&&t.add(e)}else if(e.elseBody)for(let n of e.elseBody){let e=this.convertNode(n);e&&t.add(e)}return this.popTransform(),this.symbols.popScope(),t}convertSwitch(e){let t=new xi,n=this.evaluator.evaluate(e.value);this.symbols.pushScope(),this.pushTransform();let r=!1;for(let i of e.cases){for(let e of i.values){let a=this.evaluator.evaluate(e);if(this.valuesEqual(n,a)){for(let e of i.body){let n=this.convertNode(e);n&&t.add(n)}r=!0;break}}if(r)break}if(!r&&e.defaultCase)for(let n of e.defaultCase){let e=this.convertNode(n);e&&t.add(e)}return this.popTransform(),this.symbols.popScope(),t}handleDefine(e){if(e.value!==void 0){let t=this.evaluator.evaluate(e.value);this.symbols.set(e.name,t)}else (e.body!==void 0||e.options!==void 0)&&this.symbols.set(e.name,e)}convertCustomShape(e){let t=this.symbols.get(e.name);if(!t||typeof t!=`object`||!(`type`in t))return console.warn(`Custom shape '${e.name}' not found`),null;let n=t;if(!n.body)return console.warn(`Custom shape '${e.name}' has no body`),null;if(this.symbols.pushScope(),this.pushTransform(),n.options)for(let e of n.options){let t=this.evaluator.evaluate(e.defaultValue);this.symbols.set(e.name,t)}for(let[t,n]of Object.entries(e.properties)){let e=this.evaluator.evaluate(n);this.symbols.set(t,e)}let r=new xi;for(let e of n.body){let t=this.convertNode(e);t&&r.add(t)}return this.popTransform(),this.symbols.popScope(),r}pushTransform(){let e=this.currentTransform();this.transformStack.push({matrix:e.matrix.clone(),color:e.color?.clone()})}popTransform(){this.transformStack.length>1&&this.transformStack.pop()}currentTransform(){return this.transformStack.length===0?{matrix:new q,color:void 0}:this.transformStack[this.transformStack.length-1]}applyCurrentTransform(e){let t=this.currentTransform();e.applyMatrix4(t.matrix)}applyExplicitTransforms(e,t){if(t.position){let n=this.evaluateVector3(t.position);e.position.set(...n)}if(t.rotation){let n=this.evaluateVector3(t.rotation);e.rotation.set(...n)}if(t.orientation){let n=this.evaluateVector3(t.orientation);e.rotation.set(...n)}}handleDetail(e){this.detailLevel=this.evaluateNumber(e.value),this.symbols.set(`detail`,this.detailLevel)}handleColorCommand(e){let t=this.evaluateVector3OrColor(e.value);this.currentTransform().color=new J(t[0],t[1],t[2])}handleRotateCommand(e){let t=this.evaluateVector3(e.value),n=this.currentTransform(),r=new q,i=new Hn(t[0]*Math.PI*2,t[1]*Math.PI*2,t[2]*Math.PI*2,`XYZ`);r.makeRotationFromEuler(i),n.matrix.multiply(r)}handleOrientationCommand(e){let t=this.evaluateVector3(e.value),n=this.currentTransform(),r=new U,i=new U;n.matrix.decompose(r,new Rt,i);let a=new Hn(t[0]*Math.PI*2,t[1]*Math.PI*2,t[2]*Math.PI*2,`XYZ`);n.matrix.compose(r,new Rt().setFromEuler(a),i)}handleTranslateCommand(e){let t=this.currentTransform(),[n,r,i]=this.evaluateTranslateVector(e.value),a=new q().makeTranslation(n,r,i);t.matrix.multiply(a)}handleScaleCommand(e){let t=this.evaluateVector3(e.value),n=this.currentTransform(),r=new q().makeScale(t[0],t[1],t[2]);n.matrix.multiply(r)}convertExtrude(e){let t=new $r(new po(e.path?this.buildPath(e.path):new Oa([new H(0,0)]),{depth:(e.properties.size?this.evaluateVector3(e.properties.size):[1,1,1])[2]||1,bevelEnabled:!1,curveSegments:Math.max(1,Math.floor(this.detailLevel/4))}),this.createMaterial(e));return this.applyExplicitTransforms(t,e.properties),this.applyCurrentTransform(t),t}buildPath(e){let t=new Oa,n=0,r=0,i=0,a=e=>{switch(e.type){case`point`:{let a=this.evaluateNumber(e.x),o=this.evaluateNumber(e.y),s=Math.cos(i),c=Math.sin(i),l=a*s-o*c,u=a*c+o*s;n+=l,r+=u,t.curves.length===0?t.moveTo(n,r):t.lineTo(n,r);break}case`curve`:{let a=this.evaluateNumber(e.x),o=this.evaluateNumber(e.y),s=Math.cos(i),c=Math.sin(i),l=a*s-o*c,u=a*c+o*s;if(n+=l,r+=u,e.controlX!==void 0&&e.controlY!==void 0){let i=this.evaluateNumber(e.controlX),a=this.evaluateNumber(e.controlY),o=i*s-a*c,l=i*c+a*s;t.quadraticCurveTo(n+o,r+l,n,r)}else t.lineTo(n,r);break}case`rotate`:{let t=this.evaluateNumber(e.angle);i+=t*Math.PI*2;break}case`translate`:{let t=this.evaluateNumber(e.x),i=this.evaluateNumber(e.y);n+=t,r+=i;break}case`for`:{this.symbols.pushScope();let t=this.evaluateNumber(e.from),n=this.evaluateNumber(e.to),r=e.step?this.evaluateNumber(e.step):1,i=[];if(r>0)for(let e=t;e<=n;e+=r)i.push(e);else if(r<0)for(let e=t;e>=n;e+=r)i.push(e);for(let t of i){this.symbols.set(e.variable,t);for(let t of e.commands)a(t)}this.symbols.popScope();break}}};for(let t of e.commands)a(t);return t}convertLathe(e){this.symbols.pushScope(),this.pushTransform();let t=null;for(let n of e.children)if(n.type===`path`){t=n;break}if(!t)return console.warn(`Lathe requires a path child`),this.popTransform(),this.symbols.popScope(),new xi;let n=[],r=0,i=0,a=0,o=e=>{switch(e.type){case`point`:case`curve`:{let t=this.evaluateNumber(e.x),o=this.evaluateNumber(e.y),s=Math.cos(a),c=Math.sin(a),l=t*s-o*c,u=t*c+o*s;r+=l,i+=u,n.push(new H(r,i));break}case`rotate`:{let t=this.evaluateNumber(e.angle);a+=t*Math.PI*2;break}case`translate`:{let t=this.evaluateNumber(e.x),n=this.evaluateNumber(e.y);r+=t,i+=n;break}case`for`:{this.symbols.pushScope();let t=this.evaluateNumber(e.from),n=this.evaluateNumber(e.to),r=e.step?this.evaluateNumber(e.step):1,i=[];if(r>0)for(let e=t;e<=n;e+=r)i.push(e);else if(r<0)for(let e=t;e>=n;e+=r)i.push(e);for(let t of i){this.symbols.set(e.variable,t);for(let t of e.commands)o(t)}this.symbols.popScope();break}}};for(let e of t.commands)o(e);if(n.length<2)return console.warn(`Lathe path must have at least 2 points`),this.popTransform(),this.symbols.popScope(),new xi;let s=new $r(new go(n,this.detailLevel),this.createMaterial(e));return this.applyExplicitTransforms(s,e.properties),this.applyCurrentTransform(s),this.popTransform(),this.symbols.popScope(),s}convertGroupBuilder(e){this.symbols.pushScope(),this.pushTransform();let t=new xi;for(let n of e.children){let e=this.convertNode(n);e&&t.add(e)}return this.applyExplicitTransforms(t,e.properties),this.applyCurrentTransform(t),this.popTransform(),this.symbols.popScope(),t}convertLoft(e){return this.convertGroupBuilder(e)}convertFill(e){this.symbols.pushScope(),this.pushTransform();let t=null;for(let n of e.children)if(n.type===`path`){t=n;break}if(!t)return console.warn(`Fill requires a path child`),this.popTransform(),this.symbols.popScope(),new xi;let n=new $r(new vo(this.buildPath(t)),this.createMaterial(e));return this.applyExplicitTransforms(n,e.properties),this.applyCurrentTransform(n),this.popTransform(),this.symbols.popScope(),n}convertHull(e){return this.convertGroupBuilder(e)}evaluateNumber(e){return e===void 0?0:typeof e==`number`?e:this.evaluator.evaluateToNumber(e)}evaluateVector3(e){return e===void 0?[0,0,0]:Array.isArray(e)&&typeof e[0]==`number`?e:this.evaluator.evaluateToVector3(e)}evaluateTranslateVector(e){let t=this.evaluator.evaluate(e);return typeof t==`number`?[t,0,0]:Array.isArray(t)?[t.length>0&&typeof t[0]==`number`?t[0]:0,t.length>1&&typeof t[1]==`number`?t[1]:0,t.length>2&&typeof t[2]==`number`?t[2]:0]:[0,0,0]}evaluateColor(e){return e===void 0?[.8,.8,.8]:Array.isArray(e)&&typeof e[0]==`number`?e:this.evaluator.evaluateToColor(e)}evaluateVector3OrColor(e){let t=this.evaluator.evaluate(e),n=e=>typeof e==`number`?e:typeof e==`boolean`?+!!e:typeof e==`string`?parseFloat(e)||0:Array.isArray(e)&&e.length>0?n(e[0]):0;if(typeof t==`number`)return[t,t,t];if(Array.isArray(t)){if(t.length===1)return[n(t[0]),n(t[0]),n(t[0])];if(t.length===2)return[n(t[0]),n(t[1]),0];if(t.length>=3)return[n(t[0]),n(t[1]),n(t[2])]}return[.8,.8,.8]}valuesEqual(e,t){if(typeof e!=typeof t)return!1;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!this.valuesEqual(e[n],t[n]))return!1;return!0}return e===t}};function Nh(e,t={}){return new Mh(t).convert(e)}Object.defineProperty(exports,`C`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`S`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`T`,{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return H}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return ys}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return ki}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return Rt}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return ls}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return J}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return Lt}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return wi}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return Lu}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return Jo}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return Mn}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return Yo}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return vs}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return Nh}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return hi}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return U}}),Object.defineProperty(exports,`w`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`x`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return u}});
@@ -4841,15 +4841,15 @@ var si = {
4841
4841
  width: e,
4842
4842
  height: e,
4843
4843
  depth: 1
4844
- };
4845
- this.texture = new yi([
4844
+ }, r = [
4846
4845
  n,
4847
4846
  n,
4848
4847
  n,
4849
4848
  n,
4850
4849
  n,
4851
4850
  n
4852
- ]), this._setTextureOptions(t), this.texture.isRenderTargetTexture = !0;
4851
+ ];
4852
+ this.texture = new yi(r), this._setTextureOptions(t), this.texture.isRenderTargetTexture = !0;
4853
4853
  }
4854
4854
  fromEquirectangularTexture(e, t) {
4855
4855
  this.texture.type = t.type, this.texture.colorSpace = t.colorSpace, this.texture.generateMipmaps = t.generateMipmaps, this.texture.minFilter = t.minFilter, this.texture.magFilter = t.magFilter;
@@ -13901,7 +13901,11 @@ var Xd = class extends Bd {
13901
13901
  }
13902
13902
  init(e) {
13903
13903
  let { geometry: t, primitiveStride: n } = this;
13904
- e.indirect ? this._indirectBuffer = Yd(Jd(t, e.range, n), e.useSharedArrayBuffer) : Gd(t, e), super.init(e), !t.boundingBox && e.setBoundingBox && (t.boundingBox = this.getBoundingBox(new on()));
13904
+ if (e.indirect) {
13905
+ let r = Yd(Jd(t, e.range, n), e.useSharedArrayBuffer);
13906
+ this._indirectBuffer = r;
13907
+ } else Gd(t, e);
13908
+ super.init(e), !t.boundingBox && e.setBoundingBox && (t.boundingBox = this.getBoundingBox(new on()));
13905
13909
  }
13906
13910
  getRootRanges(e) {
13907
13911
  return this.indirect ? [{
package/dist/vue.cjs CHANGED
@@ -1,4 +1,4 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require(`./toThreeJS-MSLJncuP.cjs`);let t=require(`vue`);var n={type:`change`},r={type:`start`},i={type:`end`},a=new e.p,o=new e.d,s=Math.cos(70*e.l.DEG2RAD),c=new e.v,l=2*Math.PI,u={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},d=1e-6,f=class extends e.a{constructor(t,n=null){super(t,n),this.state=u.NONE,this.target=new e.v,this.cursor=new e.v,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minTargetRadius=0,this.maxTargetRadius=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.keyRotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.zoomToCursor=!1,this.autoRotate=!1,this.autoRotateSpeed=2,this.keys={LEFT:`ArrowLeft`,UP:`ArrowUp`,RIGHT:`ArrowRight`,BOTTOM:`ArrowDown`},this.mouseButtons={LEFT:e.c.ROTATE,MIDDLE:e.c.DOLLY,RIGHT:e.c.PAN},this.touches={ONE:e.g.ROTATE,TWO:e.g.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this._domElementKeyEvents=null,this._lastPosition=new e.v,this._lastQuaternion=new e.f,this._lastTargetPosition=new e.v,this._quat=new e.f().setFromUnitVectors(t.up,new e.v(0,1,0)),this._quatInverse=this._quat.clone().invert(),this._spherical=new e.h,this._sphericalDelta=new e.h,this._scale=1,this._panOffset=new e.v,this._rotateStart=new e._,this._rotateEnd=new e._,this._rotateDelta=new e._,this._panStart=new e._,this._panEnd=new e._,this._panDelta=new e._,this._dollyStart=new e._,this._dollyEnd=new e._,this._dollyDelta=new e._,this._dollyDirection=new e.v,this._mouse=new e._,this._performCursorZoom=!1,this._pointers=[],this._pointerPositions={},this._controlActive=!1,this._onPointerMove=m.bind(this),this._onPointerDown=p.bind(this),this._onPointerUp=h.bind(this),this._onContextMenu=S.bind(this),this._onMouseWheel=v.bind(this),this._onKeyDown=y.bind(this),this._onTouchStart=b.bind(this),this._onTouchMove=x.bind(this),this._onMouseDown=g.bind(this),this._onMouseMove=_.bind(this),this._interceptControlDown=C.bind(this),this._interceptControlUp=w.bind(this),this.domElement!==null&&this.connect(this.domElement),this.update()}connect(e){super.connect(e),this.domElement.addEventListener(`pointerdown`,this._onPointerDown),this.domElement.addEventListener(`pointercancel`,this._onPointerUp),this.domElement.addEventListener(`contextmenu`,this._onContextMenu),this.domElement.addEventListener(`wheel`,this._onMouseWheel,{passive:!1}),this.domElement.getRootNode().addEventListener(`keydown`,this._interceptControlDown,{passive:!0,capture:!0}),this.domElement.style.touchAction=`none`}disconnect(){this.domElement.removeEventListener(`pointerdown`,this._onPointerDown),this.domElement.ownerDocument.removeEventListener(`pointermove`,this._onPointerMove),this.domElement.ownerDocument.removeEventListener(`pointerup`,this._onPointerUp),this.domElement.removeEventListener(`pointercancel`,this._onPointerUp),this.domElement.removeEventListener(`wheel`,this._onMouseWheel),this.domElement.removeEventListener(`contextmenu`,this._onContextMenu),this.stopListenToKeyEvents(),this.domElement.getRootNode().removeEventListener(`keydown`,this._interceptControlDown,{capture:!0}),this.domElement.style.touchAction=`auto`}dispose(){this.disconnect()}getPolarAngle(){return this._spherical.phi}getAzimuthalAngle(){return this._spherical.theta}getDistance(){return this.object.position.distanceTo(this.target)}listenToKeyEvents(e){e.addEventListener(`keydown`,this._onKeyDown),this._domElementKeyEvents=e}stopListenToKeyEvents(){this._domElementKeyEvents!==null&&(this._domElementKeyEvents.removeEventListener(`keydown`,this._onKeyDown),this._domElementKeyEvents=null)}saveState(){this.target0.copy(this.target),this.position0.copy(this.object.position),this.zoom0=this.object.zoom}reset(){this.target.copy(this.target0),this.object.position.copy(this.position0),this.object.zoom=this.zoom0,this.object.updateProjectionMatrix(),this.dispatchEvent(n),this.update(),this.state=u.NONE}update(t=null){let r=this.object.position;c.copy(r).sub(this.target),c.applyQuaternion(this._quat),this._spherical.setFromVector3(c),this.autoRotate&&this.state===u.NONE&&this._rotateLeft(this._getAutoRotationAngle(t)),this.enableDamping?(this._spherical.theta+=this._sphericalDelta.theta*this.dampingFactor,this._spherical.phi+=this._sphericalDelta.phi*this.dampingFactor):(this._spherical.theta+=this._sphericalDelta.theta,this._spherical.phi+=this._sphericalDelta.phi);let i=this.minAzimuthAngle,f=this.maxAzimuthAngle;isFinite(i)&&isFinite(f)&&(i<-Math.PI?i+=l:i>Math.PI&&(i-=l),f<-Math.PI?f+=l:f>Math.PI&&(f-=l),i<=f?this._spherical.theta=Math.max(i,Math.min(f,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(i+f)/2?Math.max(i,this._spherical.theta):Math.min(f,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let p=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{let e=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),p=e!=this._spherical.radius}if(c.setFromSpherical(this._spherical),c.applyQuaternion(this._quatInverse),r.copy(this.target).add(c),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let t=null;if(this.object.isPerspectiveCamera){let e=c.length();t=this._clampDistance(e*this._scale);let n=e-t;this.object.position.addScaledVector(this._dollyDirection,n),this.object.updateMatrixWorld(),p=!!n}else if(this.object.isOrthographicCamera){let n=new e.v(this._mouse.x,this._mouse.y,0);n.unproject(this.object);let r=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),p=r!==this.object.zoom;let i=new e.v(this._mouse.x,this._mouse.y,0);i.unproject(this.object),this.object.position.sub(i).add(n),this.object.updateMatrixWorld(),t=c.length()}else console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled.`),this.zoomToCursor=!1;t!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(t).add(this.object.position):(a.origin.copy(this.object.position),a.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(a.direction))<s?this.object.lookAt(this.target):(o.setFromNormalAndCoplanarPoint(this.object.up,this.target),a.intersectPlane(o,this.target))))}else if(this.object.isOrthographicCamera){let e=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),e!==this.object.zoom&&(this.object.updateProjectionMatrix(),p=!0)}return this._scale=1,this._performCursorZoom=!1,p||this._lastPosition.distanceToSquared(this.object.position)>d||8*(1-this._lastQuaternion.dot(this.object.quaternion))>d||this._lastTargetPosition.distanceToSquared(this.target)>d?(this.dispatchEvent(n),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e===null?l/60/60*this.autoRotateSpeed:l/60*this.autoRotateSpeed*e}_getZoomScale(e){let t=Math.abs(e*.01);return .95**(this.zoomSpeed*t)}_rotateLeft(e){this._sphericalDelta.theta-=e}_rotateUp(e){this._sphericalDelta.phi-=e}_panLeft(e,t){c.setFromMatrixColumn(t,0),c.multiplyScalar(-e),this._panOffset.add(c)}_panUp(e,t){this.screenSpacePanning===!0?c.setFromMatrixColumn(t,1):(c.setFromMatrixColumn(t,0),c.crossVectors(this.object.up,c)),c.multiplyScalar(e),this._panOffset.add(c)}_pan(e,t){let n=this.domElement;if(this.object.isPerspectiveCamera){let r=this.object.position;c.copy(r).sub(this.target);let i=c.length();i*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*e*i/n.clientHeight,this.object.matrix),this._panUp(2*t*i/n.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(e*(this.object.right-this.object.left)/this.object.zoom/n.clientWidth,this.object.matrix),this._panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/n.clientHeight,this.object.matrix)):(console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.`),this.enablePan=!1)}_dollyOut(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=e:(console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.`),this.enableZoom=!1)}_dollyIn(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=e:(console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.`),this.enableZoom=!1)}_updateZoomParameters(e,t){if(!this.zoomToCursor)return;this._performCursorZoom=!0;let n=this.domElement.getBoundingClientRect(),r=e-n.left,i=t-n.top,a=n.width,o=n.height;this._mouse.x=r/a*2-1,this._mouse.y=-(i/o)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(e){return Math.max(this.minDistance,Math.min(this.maxDistance,e))}_handleMouseDownRotate(e){this._rotateStart.set(e.clientX,e.clientY)}_handleMouseDownDolly(e){this._updateZoomParameters(e.clientX,e.clientX),this._dollyStart.set(e.clientX,e.clientY)}_handleMouseDownPan(e){this._panStart.set(e.clientX,e.clientY)}_handleMouseMoveRotate(e){this._rotateEnd.set(e.clientX,e.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);let t=this.domElement;this._rotateLeft(l*this._rotateDelta.x/t.clientHeight),this._rotateUp(l*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(e){this._dollyEnd.set(e.clientX,e.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(e){this._panEnd.set(e.clientX,e.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(e){this._updateZoomParameters(e.clientX,e.clientY),e.deltaY<0?this._dollyIn(this._getZoomScale(e.deltaY)):e.deltaY>0&&this._dollyOut(this._getZoomScale(e.deltaY)),this.update()}_handleKeyDown(e){let t=!1;switch(e.code){case this.keys.UP:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(l*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),t=!0;break;case this.keys.BOTTOM:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(-l*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),t=!0;break;case this.keys.LEFT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(l*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),t=!0;break;case this.keys.RIGHT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(-l*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),t=!0;break}t&&(e.preventDefault(),this.update())}_handleTouchStartRotate(e){if(this._pointers.length===1)this._rotateStart.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._rotateStart.set(n,r)}}_handleTouchStartPan(e){if(this._pointers.length===1)this._panStart.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._panStart.set(n,r)}}_handleTouchStartDolly(e){let t=this._getSecondPointerPosition(e),n=e.pageX-t.x,r=e.pageY-t.y,i=Math.sqrt(n*n+r*r);this._dollyStart.set(0,i)}_handleTouchStartDollyPan(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enablePan&&this._handleTouchStartPan(e)}_handleTouchStartDollyRotate(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enableRotate&&this._handleTouchStartRotate(e)}_handleTouchMoveRotate(e){if(this._pointers.length==1)this._rotateEnd.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._rotateEnd.set(n,r)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);let t=this.domElement;this._rotateLeft(l*this._rotateDelta.x/t.clientHeight),this._rotateUp(l*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(e){if(this._pointers.length===1)this._panEnd.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._panEnd.set(n,r)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(e){let t=this._getSecondPointerPosition(e),n=e.pageX-t.x,r=e.pageY-t.y,i=Math.sqrt(n*n+r*r);this._dollyEnd.set(0,i),this._dollyDelta.set(0,(this._dollyEnd.y/this._dollyStart.y)**+this.zoomSpeed),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);let a=(e.pageX+t.x)*.5,o=(e.pageY+t.y)*.5;this._updateZoomParameters(a,o)}_handleTouchMoveDollyPan(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enablePan&&this._handleTouchMovePan(e)}_handleTouchMoveDollyRotate(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enableRotate&&this._handleTouchMoveRotate(e)}_addPointer(e){this._pointers.push(e.pointerId)}_removePointer(e){delete this._pointerPositions[e.pointerId];for(let t=0;t<this._pointers.length;t++)if(this._pointers[t]==e.pointerId){this._pointers.splice(t,1);return}}_isTrackingPointer(e){for(let t=0;t<this._pointers.length;t++)if(this._pointers[t]==e.pointerId)return!0;return!1}_trackPointer(t){let n=this._pointerPositions[t.pointerId];n===void 0&&(n=new e._,this._pointerPositions[t.pointerId]=n),n.set(t.pageX,t.pageY)}_getSecondPointerPosition(e){let t=e.pointerId===this._pointers[0]?this._pointers[1]:this._pointers[0];return this._pointerPositions[t]}_customWheelEvent(e){let t=e.deltaMode,n={clientX:e.clientX,clientY:e.clientY,deltaY:e.deltaY};switch(t){case 1:n.deltaY*=16;break;case 2:n.deltaY*=100;break}return e.ctrlKey&&!this._controlActive&&(n.deltaY*=10),n}};function p(e){this.enabled!==!1&&(this._pointers.length===0&&(this.domElement.setPointerCapture(e.pointerId),this.domElement.ownerDocument.addEventListener(`pointermove`,this._onPointerMove),this.domElement.ownerDocument.addEventListener(`pointerup`,this._onPointerUp)),!this._isTrackingPointer(e)&&(this._addPointer(e),e.pointerType===`touch`?this._onTouchStart(e):this._onMouseDown(e)))}function m(e){this.enabled!==!1&&(e.pointerType===`touch`?this._onTouchMove(e):this._onMouseMove(e))}function h(e){switch(this._removePointer(e),this._pointers.length){case 0:this.domElement.releasePointerCapture(e.pointerId),this.domElement.ownerDocument.removeEventListener(`pointermove`,this._onPointerMove),this.domElement.ownerDocument.removeEventListener(`pointerup`,this._onPointerUp),this.dispatchEvent(i),this.state=u.NONE;break;case 1:let t=this._pointers[0],n=this._pointerPositions[t];this._onTouchStart({pointerId:t,pageX:n.x,pageY:n.y});break}}function g(t){let n;switch(t.button){case 0:n=this.mouseButtons.LEFT;break;case 1:n=this.mouseButtons.MIDDLE;break;case 2:n=this.mouseButtons.RIGHT;break;default:n=-1}switch(n){case e.c.DOLLY:if(this.enableZoom===!1)return;this._handleMouseDownDolly(t),this.state=u.DOLLY;break;case e.c.ROTATE:if(t.ctrlKey||t.metaKey||t.shiftKey){if(this.enablePan===!1)return;this._handleMouseDownPan(t),this.state=u.PAN}else{if(this.enableRotate===!1)return;this._handleMouseDownRotate(t),this.state=u.ROTATE}break;case e.c.PAN:if(t.ctrlKey||t.metaKey||t.shiftKey){if(this.enableRotate===!1)return;this._handleMouseDownRotate(t),this.state=u.ROTATE}else{if(this.enablePan===!1)return;this._handleMouseDownPan(t),this.state=u.PAN}break;default:this.state=u.NONE}this.state!==u.NONE&&this.dispatchEvent(r)}function _(e){switch(this.state){case u.ROTATE:if(this.enableRotate===!1)return;this._handleMouseMoveRotate(e);break;case u.DOLLY:if(this.enableZoom===!1)return;this._handleMouseMoveDolly(e);break;case u.PAN:if(this.enablePan===!1)return;this._handleMouseMovePan(e);break}}function v(e){this.enabled===!1||this.enableZoom===!1||this.state!==u.NONE||(e.preventDefault(),this.dispatchEvent(r),this._handleMouseWheel(this._customWheelEvent(e)),this.dispatchEvent(i))}function y(e){this.enabled!==!1&&this._handleKeyDown(e)}function b(t){switch(this._trackPointer(t),this._pointers.length){case 1:switch(this.touches.ONE){case e.g.ROTATE:if(this.enableRotate===!1)return;this._handleTouchStartRotate(t),this.state=u.TOUCH_ROTATE;break;case e.g.PAN:if(this.enablePan===!1)return;this._handleTouchStartPan(t),this.state=u.TOUCH_PAN;break;default:this.state=u.NONE}break;case 2:switch(this.touches.TWO){case e.g.DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchStartDollyPan(t),this.state=u.TOUCH_DOLLY_PAN;break;case e.g.DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchStartDollyRotate(t),this.state=u.TOUCH_DOLLY_ROTATE;break;default:this.state=u.NONE}break;default:this.state=u.NONE}this.state!==u.NONE&&this.dispatchEvent(r)}function x(e){switch(this._trackPointer(e),this.state){case u.TOUCH_ROTATE:if(this.enableRotate===!1)return;this._handleTouchMoveRotate(e),this.update();break;case u.TOUCH_PAN:if(this.enablePan===!1)return;this._handleTouchMovePan(e),this.update();break;case u.TOUCH_DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchMoveDollyPan(e),this.update();break;case u.TOUCH_DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchMoveDollyRotate(e),this.update();break;default:this.state=u.NONE}}function S(e){this.enabled!==!1&&e.preventDefault()}function C(e){e.key===`Control`&&(this._controlActive=!0,this.domElement.getRootNode().addEventListener(`keyup`,this._interceptControlUp,{passive:!0,capture:!0}))}function w(e){e.key===`Control`&&(this._controlActive=!1,this.domElement.getRootNode().removeEventListener(`keyup`,this._interceptControlUp,{passive:!0,capture:!0}))}var T={class:`present3d-container`},E={class:`header`},D={class:`controls`},O={class:`material-icons`},k={class:`material-icons`},A={key:0,class:`error`},j={class:`script-source`},M=[`disabled`],N=(0,t.defineComponent)({__name:`View`,props:{selectedResult:{}},emits:[`updateResult`],setup(n,{emit:r}){let i=n,a=r,o=(0,t.ref)(i.selectedResult.data?.script??``),s=(0,t.ref)(null),c=(0,t.ref)(null),l=(0,t.ref)(!1),u=(0,t.ref)(!0),d=(0,t.computed)(()=>o.value!==i.selectedResult.data?.script),p,m,h,g,_,v,y=[],b=null,x=null;(0,t.onMounted)(()=>{S(),w(),N(),(0,t.nextTick)(()=>{F()})}),(0,t.onUnmounted)(()=>{V()}),(0,t.watch)(()=>i.selectedResult.data?.script,()=>{w()}),(0,t.watch)(l,()=>{w()}),(0,t.watch)(u,e=>{v&&(v.visible=e)});function S(){if(!s.value)return;p=new e.m,p.background=new e.i(1710618);let t=s.value.clientWidth,n=s.value.clientHeight;m=new e.u(50,t/n,.1,1e3),m.position.set(5,5,10),m.lookAt(0,0,0),h=new e.n({antialias:!0}),h.setSize(t,n),h.setPixelRatio(window.devicePixelRatio),s.value.appendChild(h.domElement),g=new f(m,h.domElement),g.enableDamping=!0,g.dampingFactor=.05,g.addEventListener(`change`,L);let r=new e.r(16777215,.6);p.add(r);let i=new e.o(16777215,.8);i.position.set(10,10,10),p.add(i),v=new e.s(20,20,4473924,2236962),v.visible=u.value,p.add(v),window.addEventListener(`resize`,C),x=new ResizeObserver(()=>{C()}),x.observe(s.value)}function C(){if(!s.value)return;let e=s.value.clientWidth,t=s.value.clientHeight;m.aspect=e/t,m.updateProjectionMatrix(),h.setSize(e,t)}function w(){try{y.forEach(e=>p.remove(e)),y=[];let t=i.selectedResult.data?.script;if(!t)return;let n=e.t(e.y(t),{wireframe:l.value});p.add(n),y.push(n),c.value=null}catch(e){c.value=e instanceof Error?e.message:`Unknown error`,console.error(`ShapeScript parse error:`,e)}}function N(){_=requestAnimationFrame(N),g.update(),h.render(p,m)}function P(){m.position.set(5,5,10),m.lookAt(0,0,0),g.reset()}function F(){if(!m||!g||!i.selectedResult?.viewState?.cameraState)return;let e=i.selectedResult.viewState.cameraState;e.position&&m.position.set(e.position.x,e.position.y,e.position.z),e.target&&g.target.set(e.target.x,e.target.y,e.target.z),m.updateProjectionMatrix(),g.update()}function I(){return{position:{x:m.position.x,y:m.position.y,z:m.position.z},target:{x:g.target.x,y:g.target.y,z:g.target.z}}}function L(){b!==null&&clearTimeout(b),b=window.setTimeout(()=>{R()},500)}function R(){a(`updateResult`,{...i.selectedResult,viewState:{cameraState:I()}})}function z(){l.value=!l.value}function B(){u.value=!u.value}function V(){b!==null&&clearTimeout(b),_&&cancelAnimationFrame(_),h&&h.dispose(),g&&(g.removeEventListener(`change`,L),g.dispose()),x&&x.disconnect(),window.removeEventListener(`resize`,C)}function H(){}function U(){try{e.y(o.value),a(`updateResult`,{...i.selectedResult,data:{script:o.value}})}catch(e){c.value=e instanceof Error?e.message:`Invalid ShapeScript`,console.error(`Script validation failed:`,e)}}return(0,t.watch)(()=>i.selectedResult.data?.script,e=>{e&&(o.value=e)}),(0,t.watch)(()=>i.selectedResult,()=>{(0,t.nextTick)(()=>{F()})}),(e,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,T,[(0,t.createElementVNode)(`div`,E,[(0,t.createElementVNode)(`h1`,null,(0,t.toDisplayString)(n.selectedResult.title||`3D Visualization`),1),(0,t.createElementVNode)(`div`,D,[(0,t.createElementVNode)(`button`,{onClick:P,class:`control-btn`},[...r[1]||=[(0,t.createElementVNode)(`span`,{class:`material-icons`},`refresh`,-1),(0,t.createTextVNode)(` Reset Camera `,-1)]]),(0,t.createElementVNode)(`button`,{onClick:z,class:`control-btn`},[(0,t.createElementVNode)(`span`,O,(0,t.toDisplayString)(l.value?`grid_off`:`grid_on`),1),r[2]||=(0,t.createTextVNode)(` Wireframe `,-1)]),(0,t.createElementVNode)(`button`,{onClick:B,class:`control-btn`},[(0,t.createElementVNode)(`span`,k,(0,t.toDisplayString)(u.value?`visibility_off`:`visibility`),1),r[3]||=(0,t.createTextVNode)(` Grid `,-1)])])]),c.value?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,A,[r[4]||=(0,t.createElementVNode)(`strong`,null,`Parse Error:`,-1),(0,t.createTextVNode)(` `+(0,t.toDisplayString)(c.value),1)])):(0,t.createCommentVNode)(``,!0),(0,t.createElementVNode)(`div`,{class:`viewport`,ref_key:`viewport`,ref:s},null,512),(0,t.createElementVNode)(`details`,j,[r[5]||=(0,t.createElementVNode)(`summary`,null,`Edit ShapeScript Source`,-1),(0,t.withDirectives)((0,t.createElementVNode)(`textarea`,{"onUpdate:modelValue":r[0]||=e=>o.value=e,onInput:H,class:`script-editor`,spellcheck:`false`},null,544),[[t.vModelText,o.value]]),(0,t.createElementVNode)(`button`,{onClick:U,class:`apply-btn`,disabled:!d.value},` Apply Changes `,8,M)])]))}}),P=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},F=P(N,[[`__scopeId`,`data-v-daa337a0`]]),I={class:`preview-container`},L={class:`preview-title`},R=P((0,t.defineComponent)({__name:`Preview`,props:{result:{}},setup(n){let r=n,i=(0,t.computed)(()=>r.result.title||`3D Visualization`),a=(0,t.ref)(null),o,s,c,l,u=null;(0,t.onMounted)(()=>{d()}),(0,t.onUnmounted)(()=>{m()}),(0,t.watch)(()=>r.result.data?.script,()=>{p()});function d(){if(a.value)try{o=new e.m,o.background=new e.i(2763322);let t=a.value.clientWidth||200,n=a.value.clientHeight||150;s=new e.u(50,t/n,.1,1e3),s.position.set(4,4,8),s.lookAt(0,0,0),c=new e.n({antialias:!0,alpha:!1}),c.setSize(t,n),c.setPixelRatio(Math.min(window.devicePixelRatio,2)),a.value.appendChild(c.domElement);let i=new e.r(16777215,.6);o.add(i);let l=new e.o(16777215,.8);if(l.position.set(5,5,5),o.add(l),!r.result.data?.script)return;u=e.t(e.y(r.result.data.script),{wireframe:!1}),o.add(u),f()}catch(e){console.error(`Preview render error:`,e)}}function f(){l=requestAnimationFrame(f);let e=Date.now()*5e-4;s.position.x=Math.cos(e)*8,s.position.z=Math.sin(e)*8,s.lookAt(0,0,0),c.render(o,s)}function p(){if(!(!o||!r.result.data?.script))try{u&&o.remove(u),u=e.t(e.y(r.result.data.script),{wireframe:!1}),o.add(u)}catch(e){console.error(`Preview reload error:`,e)}}function m(){l&&cancelAnimationFrame(l),c&&c.dispose()}return(e,n)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,I,[(0,t.createElementVNode)(`div`,{ref_key:`previewViewport`,ref:a,class:`preview-viewport`},null,512),(0,t.createElementVNode)(`div`,L,(0,t.toDisplayString)(i.value),1)]))}}),[[`__scopeId`,`data-v-75941188`]]),z=`present3D`,B=`Use the ${z} tool to create interactive 3D visualizations when the user requests:
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require(`./toThreeJS-BE5vXH2S.cjs`);let t=require(`vue`);var n={type:`change`},r={type:`start`},i={type:`end`},a=new e.p,o=new e.d,s=Math.cos(70*e.l.DEG2RAD),c=new e.v,l=2*Math.PI,u={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},d=1e-6,f=class extends e.a{constructor(t,n=null){super(t,n),this.state=u.NONE,this.target=new e.v,this.cursor=new e.v,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minTargetRadius=0,this.maxTargetRadius=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.keyRotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!0,this.keyPanSpeed=7,this.zoomToCursor=!1,this.autoRotate=!1,this.autoRotateSpeed=2,this.keys={LEFT:`ArrowLeft`,UP:`ArrowUp`,RIGHT:`ArrowRight`,BOTTOM:`ArrowDown`},this.mouseButtons={LEFT:e.c.ROTATE,MIDDLE:e.c.DOLLY,RIGHT:e.c.PAN},this.touches={ONE:e.g.ROTATE,TWO:e.g.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this._domElementKeyEvents=null,this._lastPosition=new e.v,this._lastQuaternion=new e.f,this._lastTargetPosition=new e.v,this._quat=new e.f().setFromUnitVectors(t.up,new e.v(0,1,0)),this._quatInverse=this._quat.clone().invert(),this._spherical=new e.h,this._sphericalDelta=new e.h,this._scale=1,this._panOffset=new e.v,this._rotateStart=new e._,this._rotateEnd=new e._,this._rotateDelta=new e._,this._panStart=new e._,this._panEnd=new e._,this._panDelta=new e._,this._dollyStart=new e._,this._dollyEnd=new e._,this._dollyDelta=new e._,this._dollyDirection=new e.v,this._mouse=new e._,this._performCursorZoom=!1,this._pointers=[],this._pointerPositions={},this._controlActive=!1,this._onPointerMove=m.bind(this),this._onPointerDown=p.bind(this),this._onPointerUp=h.bind(this),this._onContextMenu=S.bind(this),this._onMouseWheel=v.bind(this),this._onKeyDown=y.bind(this),this._onTouchStart=b.bind(this),this._onTouchMove=x.bind(this),this._onMouseDown=g.bind(this),this._onMouseMove=_.bind(this),this._interceptControlDown=C.bind(this),this._interceptControlUp=w.bind(this),this.domElement!==null&&this.connect(this.domElement),this.update()}connect(e){super.connect(e),this.domElement.addEventListener(`pointerdown`,this._onPointerDown),this.domElement.addEventListener(`pointercancel`,this._onPointerUp),this.domElement.addEventListener(`contextmenu`,this._onContextMenu),this.domElement.addEventListener(`wheel`,this._onMouseWheel,{passive:!1}),this.domElement.getRootNode().addEventListener(`keydown`,this._interceptControlDown,{passive:!0,capture:!0}),this.domElement.style.touchAction=`none`}disconnect(){this.domElement.removeEventListener(`pointerdown`,this._onPointerDown),this.domElement.ownerDocument.removeEventListener(`pointermove`,this._onPointerMove),this.domElement.ownerDocument.removeEventListener(`pointerup`,this._onPointerUp),this.domElement.removeEventListener(`pointercancel`,this._onPointerUp),this.domElement.removeEventListener(`wheel`,this._onMouseWheel),this.domElement.removeEventListener(`contextmenu`,this._onContextMenu),this.stopListenToKeyEvents(),this.domElement.getRootNode().removeEventListener(`keydown`,this._interceptControlDown,{capture:!0}),this.domElement.style.touchAction=`auto`}dispose(){this.disconnect()}getPolarAngle(){return this._spherical.phi}getAzimuthalAngle(){return this._spherical.theta}getDistance(){return this.object.position.distanceTo(this.target)}listenToKeyEvents(e){e.addEventListener(`keydown`,this._onKeyDown),this._domElementKeyEvents=e}stopListenToKeyEvents(){this._domElementKeyEvents!==null&&(this._domElementKeyEvents.removeEventListener(`keydown`,this._onKeyDown),this._domElementKeyEvents=null)}saveState(){this.target0.copy(this.target),this.position0.copy(this.object.position),this.zoom0=this.object.zoom}reset(){this.target.copy(this.target0),this.object.position.copy(this.position0),this.object.zoom=this.zoom0,this.object.updateProjectionMatrix(),this.dispatchEvent(n),this.update(),this.state=u.NONE}update(t=null){let r=this.object.position;c.copy(r).sub(this.target),c.applyQuaternion(this._quat),this._spherical.setFromVector3(c),this.autoRotate&&this.state===u.NONE&&this._rotateLeft(this._getAutoRotationAngle(t)),this.enableDamping?(this._spherical.theta+=this._sphericalDelta.theta*this.dampingFactor,this._spherical.phi+=this._sphericalDelta.phi*this.dampingFactor):(this._spherical.theta+=this._sphericalDelta.theta,this._spherical.phi+=this._sphericalDelta.phi);let i=this.minAzimuthAngle,f=this.maxAzimuthAngle;isFinite(i)&&isFinite(f)&&(i<-Math.PI?i+=l:i>Math.PI&&(i-=l),f<-Math.PI?f+=l:f>Math.PI&&(f-=l),i<=f?this._spherical.theta=Math.max(i,Math.min(f,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(i+f)/2?Math.max(i,this._spherical.theta):Math.min(f,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let p=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{let e=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),p=e!=this._spherical.radius}if(c.setFromSpherical(this._spherical),c.applyQuaternion(this._quatInverse),r.copy(this.target).add(c),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let t=null;if(this.object.isPerspectiveCamera){let e=c.length();t=this._clampDistance(e*this._scale);let n=e-t;this.object.position.addScaledVector(this._dollyDirection,n),this.object.updateMatrixWorld(),p=!!n}else if(this.object.isOrthographicCamera){let n=new e.v(this._mouse.x,this._mouse.y,0);n.unproject(this.object);let r=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),p=r!==this.object.zoom;let i=new e.v(this._mouse.x,this._mouse.y,0);i.unproject(this.object),this.object.position.sub(i).add(n),this.object.updateMatrixWorld(),t=c.length()}else console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled.`),this.zoomToCursor=!1;t!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(t).add(this.object.position):(a.origin.copy(this.object.position),a.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(a.direction))<s?this.object.lookAt(this.target):(o.setFromNormalAndCoplanarPoint(this.object.up,this.target),a.intersectPlane(o,this.target))))}else if(this.object.isOrthographicCamera){let e=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),e!==this.object.zoom&&(this.object.updateProjectionMatrix(),p=!0)}return this._scale=1,this._performCursorZoom=!1,p||this._lastPosition.distanceToSquared(this.object.position)>d||8*(1-this._lastQuaternion.dot(this.object.quaternion))>d||this._lastTargetPosition.distanceToSquared(this.target)>d?(this.dispatchEvent(n),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(e){return e===null?l/60/60*this.autoRotateSpeed:l/60*this.autoRotateSpeed*e}_getZoomScale(e){let t=Math.abs(e*.01);return .95**(this.zoomSpeed*t)}_rotateLeft(e){this._sphericalDelta.theta-=e}_rotateUp(e){this._sphericalDelta.phi-=e}_panLeft(e,t){c.setFromMatrixColumn(t,0),c.multiplyScalar(-e),this._panOffset.add(c)}_panUp(e,t){this.screenSpacePanning===!0?c.setFromMatrixColumn(t,1):(c.setFromMatrixColumn(t,0),c.crossVectors(this.object.up,c)),c.multiplyScalar(e),this._panOffset.add(c)}_pan(e,t){let n=this.domElement;if(this.object.isPerspectiveCamera){let r=this.object.position;c.copy(r).sub(this.target);let i=c.length();i*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*e*i/n.clientHeight,this.object.matrix),this._panUp(2*t*i/n.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(e*(this.object.right-this.object.left)/this.object.zoom/n.clientWidth,this.object.matrix),this._panUp(t*(this.object.top-this.object.bottom)/this.object.zoom/n.clientHeight,this.object.matrix)):(console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.`),this.enablePan=!1)}_dollyOut(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=e:(console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.`),this.enableZoom=!1)}_dollyIn(e){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=e:(console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.`),this.enableZoom=!1)}_updateZoomParameters(e,t){if(!this.zoomToCursor)return;this._performCursorZoom=!0;let n=this.domElement.getBoundingClientRect(),r=e-n.left,i=t-n.top,a=n.width,o=n.height;this._mouse.x=r/a*2-1,this._mouse.y=-(i/o)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(e){return Math.max(this.minDistance,Math.min(this.maxDistance,e))}_handleMouseDownRotate(e){this._rotateStart.set(e.clientX,e.clientY)}_handleMouseDownDolly(e){this._updateZoomParameters(e.clientX,e.clientX),this._dollyStart.set(e.clientX,e.clientY)}_handleMouseDownPan(e){this._panStart.set(e.clientX,e.clientY)}_handleMouseMoveRotate(e){this._rotateEnd.set(e.clientX,e.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);let t=this.domElement;this._rotateLeft(l*this._rotateDelta.x/t.clientHeight),this._rotateUp(l*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(e){this._dollyEnd.set(e.clientX,e.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(e){this._panEnd.set(e.clientX,e.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(e){this._updateZoomParameters(e.clientX,e.clientY),e.deltaY<0?this._dollyIn(this._getZoomScale(e.deltaY)):e.deltaY>0&&this._dollyOut(this._getZoomScale(e.deltaY)),this.update()}_handleKeyDown(e){let t=!1;switch(e.code){case this.keys.UP:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(l*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),t=!0;break;case this.keys.BOTTOM:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateUp(-l*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),t=!0;break;case this.keys.LEFT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(l*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),t=!0;break;case this.keys.RIGHT:e.ctrlKey||e.metaKey||e.shiftKey?this.enableRotate&&this._rotateLeft(-l*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),t=!0;break}t&&(e.preventDefault(),this.update())}_handleTouchStartRotate(e){if(this._pointers.length===1)this._rotateStart.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._rotateStart.set(n,r)}}_handleTouchStartPan(e){if(this._pointers.length===1)this._panStart.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._panStart.set(n,r)}}_handleTouchStartDolly(e){let t=this._getSecondPointerPosition(e),n=e.pageX-t.x,r=e.pageY-t.y,i=Math.sqrt(n*n+r*r);this._dollyStart.set(0,i)}_handleTouchStartDollyPan(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enablePan&&this._handleTouchStartPan(e)}_handleTouchStartDollyRotate(e){this.enableZoom&&this._handleTouchStartDolly(e),this.enableRotate&&this._handleTouchStartRotate(e)}_handleTouchMoveRotate(e){if(this._pointers.length==1)this._rotateEnd.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._rotateEnd.set(n,r)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);let t=this.domElement;this._rotateLeft(l*this._rotateDelta.x/t.clientHeight),this._rotateUp(l*this._rotateDelta.y/t.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(e){if(this._pointers.length===1)this._panEnd.set(e.pageX,e.pageY);else{let t=this._getSecondPointerPosition(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);this._panEnd.set(n,r)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(e){let t=this._getSecondPointerPosition(e),n=e.pageX-t.x,r=e.pageY-t.y,i=Math.sqrt(n*n+r*r);this._dollyEnd.set(0,i),this._dollyDelta.set(0,(this._dollyEnd.y/this._dollyStart.y)**+this.zoomSpeed),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);let a=(e.pageX+t.x)*.5,o=(e.pageY+t.y)*.5;this._updateZoomParameters(a,o)}_handleTouchMoveDollyPan(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enablePan&&this._handleTouchMovePan(e)}_handleTouchMoveDollyRotate(e){this.enableZoom&&this._handleTouchMoveDolly(e),this.enableRotate&&this._handleTouchMoveRotate(e)}_addPointer(e){this._pointers.push(e.pointerId)}_removePointer(e){delete this._pointerPositions[e.pointerId];for(let t=0;t<this._pointers.length;t++)if(this._pointers[t]==e.pointerId){this._pointers.splice(t,1);return}}_isTrackingPointer(e){for(let t=0;t<this._pointers.length;t++)if(this._pointers[t]==e.pointerId)return!0;return!1}_trackPointer(t){let n=this._pointerPositions[t.pointerId];n===void 0&&(n=new e._,this._pointerPositions[t.pointerId]=n),n.set(t.pageX,t.pageY)}_getSecondPointerPosition(e){let t=e.pointerId===this._pointers[0]?this._pointers[1]:this._pointers[0];return this._pointerPositions[t]}_customWheelEvent(e){let t=e.deltaMode,n={clientX:e.clientX,clientY:e.clientY,deltaY:e.deltaY};switch(t){case 1:n.deltaY*=16;break;case 2:n.deltaY*=100;break}return e.ctrlKey&&!this._controlActive&&(n.deltaY*=10),n}};function p(e){this.enabled!==!1&&(this._pointers.length===0&&(this.domElement.setPointerCapture(e.pointerId),this.domElement.ownerDocument.addEventListener(`pointermove`,this._onPointerMove),this.domElement.ownerDocument.addEventListener(`pointerup`,this._onPointerUp)),!this._isTrackingPointer(e)&&(this._addPointer(e),e.pointerType===`touch`?this._onTouchStart(e):this._onMouseDown(e)))}function m(e){this.enabled!==!1&&(e.pointerType===`touch`?this._onTouchMove(e):this._onMouseMove(e))}function h(e){switch(this._removePointer(e),this._pointers.length){case 0:this.domElement.releasePointerCapture(e.pointerId),this.domElement.ownerDocument.removeEventListener(`pointermove`,this._onPointerMove),this.domElement.ownerDocument.removeEventListener(`pointerup`,this._onPointerUp),this.dispatchEvent(i),this.state=u.NONE;break;case 1:let t=this._pointers[0],n=this._pointerPositions[t];this._onTouchStart({pointerId:t,pageX:n.x,pageY:n.y});break}}function g(t){let n;switch(t.button){case 0:n=this.mouseButtons.LEFT;break;case 1:n=this.mouseButtons.MIDDLE;break;case 2:n=this.mouseButtons.RIGHT;break;default:n=-1}switch(n){case e.c.DOLLY:if(this.enableZoom===!1)return;this._handleMouseDownDolly(t),this.state=u.DOLLY;break;case e.c.ROTATE:if(t.ctrlKey||t.metaKey||t.shiftKey){if(this.enablePan===!1)return;this._handleMouseDownPan(t),this.state=u.PAN}else{if(this.enableRotate===!1)return;this._handleMouseDownRotate(t),this.state=u.ROTATE}break;case e.c.PAN:if(t.ctrlKey||t.metaKey||t.shiftKey){if(this.enableRotate===!1)return;this._handleMouseDownRotate(t),this.state=u.ROTATE}else{if(this.enablePan===!1)return;this._handleMouseDownPan(t),this.state=u.PAN}break;default:this.state=u.NONE}this.state!==u.NONE&&this.dispatchEvent(r)}function _(e){switch(this.state){case u.ROTATE:if(this.enableRotate===!1)return;this._handleMouseMoveRotate(e);break;case u.DOLLY:if(this.enableZoom===!1)return;this._handleMouseMoveDolly(e);break;case u.PAN:if(this.enablePan===!1)return;this._handleMouseMovePan(e);break}}function v(e){this.enabled===!1||this.enableZoom===!1||this.state!==u.NONE||(e.preventDefault(),this.dispatchEvent(r),this._handleMouseWheel(this._customWheelEvent(e)),this.dispatchEvent(i))}function y(e){this.enabled!==!1&&this._handleKeyDown(e)}function b(t){switch(this._trackPointer(t),this._pointers.length){case 1:switch(this.touches.ONE){case e.g.ROTATE:if(this.enableRotate===!1)return;this._handleTouchStartRotate(t),this.state=u.TOUCH_ROTATE;break;case e.g.PAN:if(this.enablePan===!1)return;this._handleTouchStartPan(t),this.state=u.TOUCH_PAN;break;default:this.state=u.NONE}break;case 2:switch(this.touches.TWO){case e.g.DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchStartDollyPan(t),this.state=u.TOUCH_DOLLY_PAN;break;case e.g.DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchStartDollyRotate(t),this.state=u.TOUCH_DOLLY_ROTATE;break;default:this.state=u.NONE}break;default:this.state=u.NONE}this.state!==u.NONE&&this.dispatchEvent(r)}function x(e){switch(this._trackPointer(e),this.state){case u.TOUCH_ROTATE:if(this.enableRotate===!1)return;this._handleTouchMoveRotate(e),this.update();break;case u.TOUCH_PAN:if(this.enablePan===!1)return;this._handleTouchMovePan(e),this.update();break;case u.TOUCH_DOLLY_PAN:if(this.enableZoom===!1&&this.enablePan===!1)return;this._handleTouchMoveDollyPan(e),this.update();break;case u.TOUCH_DOLLY_ROTATE:if(this.enableZoom===!1&&this.enableRotate===!1)return;this._handleTouchMoveDollyRotate(e),this.update();break;default:this.state=u.NONE}}function S(e){this.enabled!==!1&&e.preventDefault()}function C(e){e.key===`Control`&&(this._controlActive=!0,this.domElement.getRootNode().addEventListener(`keyup`,this._interceptControlUp,{passive:!0,capture:!0}))}function w(e){e.key===`Control`&&(this._controlActive=!1,this.domElement.getRootNode().removeEventListener(`keyup`,this._interceptControlUp,{passive:!0,capture:!0}))}var T={class:`present3d-container`},E={class:`header`},D={class:`controls`},O={class:`material-icons`},k={class:`material-icons`},A={key:0,class:`error`},j={class:`script-source`},M=[`disabled`],N=(0,t.defineComponent)({__name:`View`,props:{selectedResult:{}},emits:[`updateResult`],setup(n,{emit:r}){let i=n,a=r,o=(0,t.ref)(i.selectedResult.data?.script??``),s=(0,t.ref)(null),c=(0,t.ref)(null),l=(0,t.ref)(!1),u=(0,t.ref)(!0),d=(0,t.computed)(()=>o.value!==i.selectedResult.data?.script),p,m,h,g,_,v,y=[],b=null,x=null;(0,t.onMounted)(()=>{S(),w(),N(),(0,t.nextTick)(()=>{F()})}),(0,t.onUnmounted)(()=>{V()}),(0,t.watch)(()=>i.selectedResult.data?.script,()=>{w()}),(0,t.watch)(l,()=>{w()}),(0,t.watch)(u,e=>{v&&(v.visible=e)});function S(){if(!s.value)return;p=new e.m,p.background=new e.i(1710618);let t=s.value.clientWidth,n=s.value.clientHeight;m=new e.u(50,t/n,.1,1e3),m.position.set(5,5,10),m.lookAt(0,0,0),h=new e.n({antialias:!0}),h.setSize(t,n),h.setPixelRatio(window.devicePixelRatio),s.value.appendChild(h.domElement),g=new f(m,h.domElement),g.enableDamping=!0,g.dampingFactor=.05,g.addEventListener(`change`,L);let r=new e.r(16777215,.6);p.add(r);let i=new e.o(16777215,.8);i.position.set(10,10,10),p.add(i),v=new e.s(20,20,4473924,2236962),v.visible=u.value,p.add(v),window.addEventListener(`resize`,C),x=new ResizeObserver(()=>{C()}),x.observe(s.value)}function C(){if(!s.value)return;let e=s.value.clientWidth,t=s.value.clientHeight;m.aspect=e/t,m.updateProjectionMatrix(),h.setSize(e,t)}function w(){try{y.forEach(e=>p.remove(e)),y=[];let t=i.selectedResult.data?.script;if(!t)return;let n=e.t(e.y(t),{wireframe:l.value});p.add(n),y.push(n),c.value=null}catch(e){c.value=e instanceof Error?e.message:`Unknown error`,console.error(`ShapeScript parse error:`,e)}}function N(){_=requestAnimationFrame(N),g.update(),h.render(p,m)}function P(){m.position.set(5,5,10),m.lookAt(0,0,0),g.reset()}function F(){if(!m||!g||!i.selectedResult?.viewState?.cameraState)return;let e=i.selectedResult.viewState.cameraState;e.position&&m.position.set(e.position.x,e.position.y,e.position.z),e.target&&g.target.set(e.target.x,e.target.y,e.target.z),m.updateProjectionMatrix(),g.update()}function I(){return{position:{x:m.position.x,y:m.position.y,z:m.position.z},target:{x:g.target.x,y:g.target.y,z:g.target.z}}}function L(){b!==null&&clearTimeout(b),b=window.setTimeout(()=>{R()},500)}function R(){a(`updateResult`,{...i.selectedResult,viewState:{cameraState:I()}})}function z(){l.value=!l.value}function B(){u.value=!u.value}function V(){b!==null&&clearTimeout(b),_&&cancelAnimationFrame(_),h&&h.dispose(),g&&(g.removeEventListener(`change`,L),g.dispose()),x&&x.disconnect(),window.removeEventListener(`resize`,C)}function H(){}function U(){try{e.y(o.value),a(`updateResult`,{...i.selectedResult,data:{script:o.value}})}catch(e){c.value=e instanceof Error?e.message:`Invalid ShapeScript`,console.error(`Script validation failed:`,e)}}return(0,t.watch)(()=>i.selectedResult.data?.script,e=>{e&&(o.value=e)}),(0,t.watch)(()=>i.selectedResult,()=>{(0,t.nextTick)(()=>{F()})}),(e,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,T,[(0,t.createElementVNode)(`div`,E,[(0,t.createElementVNode)(`h1`,null,(0,t.toDisplayString)(n.selectedResult.title||`3D Visualization`),1),(0,t.createElementVNode)(`div`,D,[(0,t.createElementVNode)(`button`,{onClick:P,class:`control-btn`},[...r[1]||=[(0,t.createElementVNode)(`span`,{class:`material-icons`},`refresh`,-1),(0,t.createTextVNode)(` Reset Camera `,-1)]]),(0,t.createElementVNode)(`button`,{onClick:z,class:`control-btn`},[(0,t.createElementVNode)(`span`,O,(0,t.toDisplayString)(l.value?`grid_off`:`grid_on`),1),r[2]||=(0,t.createTextVNode)(` Wireframe `,-1)]),(0,t.createElementVNode)(`button`,{onClick:B,class:`control-btn`},[(0,t.createElementVNode)(`span`,k,(0,t.toDisplayString)(u.value?`visibility_off`:`visibility`),1),r[3]||=(0,t.createTextVNode)(` Grid `,-1)])])]),c.value?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,A,[r[4]||=(0,t.createElementVNode)(`strong`,null,`Parse Error:`,-1),(0,t.createTextVNode)(` `+(0,t.toDisplayString)(c.value),1)])):(0,t.createCommentVNode)(``,!0),(0,t.createElementVNode)(`div`,{class:`viewport`,ref_key:`viewport`,ref:s},null,512),(0,t.createElementVNode)(`details`,j,[r[5]||=(0,t.createElementVNode)(`summary`,null,`Edit ShapeScript Source`,-1),(0,t.withDirectives)((0,t.createElementVNode)(`textarea`,{"onUpdate:modelValue":r[0]||=e=>o.value=e,onInput:H,class:`script-editor`,spellcheck:`false`},null,544),[[t.vModelText,o.value]]),(0,t.createElementVNode)(`button`,{onClick:U,class:`apply-btn`,disabled:!d.value},` Apply Changes `,8,M)])]))}}),P=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},F=P(N,[[`__scopeId`,`data-v-daa337a0`]]),I={class:`preview-container`},L={class:`preview-title`},R=P((0,t.defineComponent)({__name:`Preview`,props:{result:{}},setup(n){let r=n,i=(0,t.computed)(()=>r.result.title||`3D Visualization`),a=(0,t.ref)(null),o,s,c,l,u=null;(0,t.onMounted)(()=>{d()}),(0,t.onUnmounted)(()=>{m()}),(0,t.watch)(()=>r.result.data?.script,()=>{p()});function d(){if(a.value)try{o=new e.m,o.background=new e.i(2763322);let t=a.value.clientWidth||200,n=a.value.clientHeight||150;s=new e.u(50,t/n,.1,1e3),s.position.set(4,4,8),s.lookAt(0,0,0),c=new e.n({antialias:!0,alpha:!1}),c.setSize(t,n),c.setPixelRatio(Math.min(window.devicePixelRatio,2)),a.value.appendChild(c.domElement);let i=new e.r(16777215,.6);o.add(i);let l=new e.o(16777215,.8);if(l.position.set(5,5,5),o.add(l),!r.result.data?.script)return;u=e.t(e.y(r.result.data.script),{wireframe:!1}),o.add(u),f()}catch(e){console.error(`Preview render error:`,e)}}function f(){l=requestAnimationFrame(f);let e=Date.now()*5e-4;s.position.x=Math.cos(e)*8,s.position.z=Math.sin(e)*8,s.lookAt(0,0,0),c.render(o,s)}function p(){if(!(!o||!r.result.data?.script))try{u&&o.remove(u),u=e.t(e.y(r.result.data.script),{wireframe:!1}),o.add(u)}catch(e){console.error(`Preview reload error:`,e)}}function m(){l&&cancelAnimationFrame(l),c&&c.dispose()}return(e,n)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,I,[(0,t.createElementVNode)(`div`,{ref_key:`previewViewport`,ref:a,class:`preview-viewport`},null,512),(0,t.createElementVNode)(`div`,L,(0,t.toDisplayString)(i.value),1)]))}}),[[`__scopeId`,`data-v-75941188`]]),z=`present3D`,B=`Use the ${z} tool to create interactive 3D visualizations when the user requests:
2
2
  - 3D models or shapes
3
3
  - Mathematical visualizations (surfaces, functions, geometric patterns)
4
4
  - Molecular or atomic structures
package/dist/vue.js CHANGED
@@ -1,4 +1,4 @@
1
- import { S as e, _ as t, a as n, b as r, c as i, d as a, f as o, g as s, h as c, i as l, l as u, m as d, n as f, o as p, p as m, r as h, s as g, t as _, u as v, v as y, w as b, x, y as S } from "./toThreeJS-Cmz9VcXY.js";
1
+ import { S as e, _ as t, a as n, b as r, c as i, d as a, f as o, g as s, h as c, i as l, l as u, m as d, n as f, o as p, p as m, r as h, s as g, t as _, u as v, v as y, w as b, x, y as S } from "./toThreeJS-smhACxwN.js";
2
2
  import { computed as C, createCommentVNode as ee, createElementBlock as w, createElementVNode as T, createTextVNode as E, defineComponent as D, nextTick as O, onMounted as k, onUnmounted as A, openBlock as j, ref as M, toDisplayString as N, vModelText as te, watch as P, withDirectives as ne } from "vue";
3
3
  //#region node_modules/three/examples/jsm/controls/OrbitControls.js
4
4
  var F = { type: "change" }, I = { type: "start" }, L = { type: "end" }, R = new m(), z = new a(), B = Math.cos(70 * u.DEG2RAD), V = new y(), H = 2 * Math.PI, U = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gui-chat-plugin/present3d",
3
- "version": "0.1.0",
3
+ "version": "0.4.0",
4
4
  "description": "3D shape presentation plugin using ShapeScript for GUI Chat applications",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -31,31 +31,31 @@
31
31
  "test:wave": "tsx test-wave-script.ts"
32
32
  },
33
33
  "dependencies": {
34
- "gui-chat-protocol": "^0.1.0",
34
+ "gui-chat-protocol": "^0.3.3",
35
35
  "three": "^0.182.0",
36
36
  "three-bvh-csg": "^0.0.17",
37
- "three-mesh-bvh": "^0.9.7"
37
+ "three-mesh-bvh": "0.9.8"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@eslint/js": "^10.0.1",
41
- "@tailwindcss/vite": "^4.2.2",
41
+ "@tailwindcss/vite": "^4.2.4",
42
42
  "@types/node": "^25.0.9",
43
43
  "@types/three": "^0.182.0",
44
- "@typescript-eslint/eslint-plugin": "^8.58.0",
45
- "@typescript-eslint/parser": "^8.58.0",
44
+ "@typescript-eslint/eslint-plugin": "^8.59.2",
45
+ "@typescript-eslint/parser": "^8.59.2",
46
46
  "@vitejs/plugin-vue": "^6.0.5",
47
- "eslint": "^10.1.0",
48
- "eslint-plugin-vue": "^10.8.0",
49
- "globals": "^17.4.0",
50
- "tailwindcss": "^4.2.2",
47
+ "eslint": "^10.3.0",
48
+ "eslint-plugin-vue": "^10.9.1",
49
+ "globals": "^17.6.0",
50
+ "tailwindcss": "^4.2.4",
51
51
  "tsx": "^4.21.0",
52
- "typescript": "~6.0.2",
53
- "typescript-eslint": "^8.58.0",
54
- "vite": "^8.0.3",
52
+ "typescript": "~6.0.3",
53
+ "typescript-eslint": "^8.59.2",
54
+ "vite": "^8.0.11",
55
55
  "vite-plugin-dts": "^4.4.0",
56
- "vue": "^3.5.31",
56
+ "vue": "^3.5.34",
57
57
  "vue-eslint-parser": "^10.4.0",
58
- "vue-tsc": "^3.2.6"
58
+ "vue-tsc": "^3.2.8"
59
59
  },
60
60
  "peerDependencies": {
61
61
  "vue": "^3.5.0"