diff --git a/app/page.tsx b/app/page.tsx index 9907b7f8..aff238ba 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,7 +1,7 @@ "use client"; import { useState, useEffect, useCallback, Suspense } from "react"; import { useSearchParams, useRouter } from "next/navigation"; -import { Canvas } from "@react-three/fiber"; +import { Canvas, GLProps } from "@react-three/fiber"; import { NoToneMapping, SRGBColorSpace } from "three"; import { Mission } from "@/src/components/Mission"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; @@ -21,7 +21,7 @@ const queryClient = new QueryClient(); // Renderer settings to match Tribes 2's simple rendering pipeline. // Tribes 2 (Torque engine, 2001) worked entirely in gamma/sRGB space with no HDR // or tone mapping. We disable tone mapping and ensure proper sRGB output. -const glSettings = { +const glSettings: GLProps = { toneMapping: NoToneMapping, outputColorSpace: SRGBColorSpace, }; @@ -94,7 +94,7 @@ function MapInspector() { )} - + 404: This page could not be found.MapGenius – Explore maps for Tribes 2

404

This page could not be found.

\ No newline at end of file +404: This page could not be found.MapGenius – Explore maps for Tribes 2

404

This page could not be found.

\ No newline at end of file diff --git a/docs/404/index.html b/docs/404/index.html index 20cd34d2..6fb44f78 100644 --- a/docs/404/index.html +++ b/docs/404/index.html @@ -1 +1 @@ -404: This page could not be found.MapGenius – Explore maps for Tribes 2

404

This page could not be found.

\ No newline at end of file +404: This page could not be found.MapGenius – Explore maps for Tribes 2

404

This page could not be found.

\ No newline at end of file diff --git a/docs/_next/static/chunks/16bd4fe75afcb969.js b/docs/_next/static/chunks/16bd4fe75afcb969.js new file mode 100644 index 00000000..6c395a3a --- /dev/null +++ b/docs/_next/static/chunks/16bd4fe75afcb969.js @@ -0,0 +1 @@ +(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,18566,(e,t,r)=>{t.exports=e.r(76562)},38360,(e,t,r)=>{var n={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",Ấ:"A",Ắ:"A",Ẳ:"A",Ẵ:"A",Ặ:"A",Æ:"AE",Ầ:"A",Ằ:"A",Ȃ:"A",Ả:"A",Ạ:"A",Ẩ:"A",Ẫ:"A",Ậ:"A",Ç:"C",Ḉ:"C",È:"E",É:"E",Ê:"E",Ë:"E",Ế:"E",Ḗ:"E",Ề:"E",Ḕ:"E",Ḝ:"E",Ȇ:"E",Ẻ:"E",Ẽ:"E",Ẹ:"E",Ể:"E",Ễ:"E",Ệ:"E",Ì:"I",Í:"I",Î:"I",Ï:"I",Ḯ:"I",Ȋ:"I",Ỉ:"I",Ị:"I",Ð:"D",Ñ:"N",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",Ố:"O",Ṍ:"O",Ṓ:"O",Ȏ:"O",Ỏ:"O",Ọ:"O",Ổ:"O",Ỗ:"O",Ộ:"O",Ờ:"O",Ở:"O",Ỡ:"O",Ớ:"O",Ợ:"O",Ù:"U",Ú:"U",Û:"U",Ü:"U",Ủ:"U",Ụ:"U",Ử:"U",Ữ:"U",Ự:"U",Ý:"Y",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",ấ:"a",ắ:"a",ẳ:"a",ẵ:"a",ặ:"a",æ:"ae",ầ:"a",ằ:"a",ȃ:"a",ả:"a",ạ:"a",ẩ:"a",ẫ:"a",ậ:"a",ç:"c",ḉ:"c",è:"e",é:"e",ê:"e",ë:"e",ế:"e",ḗ:"e",ề:"e",ḕ:"e",ḝ:"e",ȇ:"e",ẻ:"e",ẽ:"e",ẹ:"e",ể:"e",ễ:"e",ệ:"e",ì:"i",í:"i",î:"i",ï:"i",ḯ:"i",ȋ:"i",ỉ:"i",ị:"i",ð:"d",ñ:"n",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",ố:"o",ṍ:"o",ṓ:"o",ȏ:"o",ỏ:"o",ọ:"o",ổ:"o",ỗ:"o",ộ:"o",ờ:"o",ở:"o",ỡ:"o",ớ:"o",ợ:"o",ù:"u",ú:"u",û:"u",ü:"u",ủ:"u",ụ:"u",ử:"u",ữ:"u",ự:"u",ý:"y",ÿ:"y",Ā:"A",ā:"a",Ă:"A",ă:"a",Ą:"A",ą:"a",Ć:"C",ć:"c",Ĉ:"C",ĉ:"c",Ċ:"C",ċ:"c",Č:"C",č:"c",C̆:"C",c̆:"c",Ď:"D",ď:"d",Đ:"D",đ:"d",Ē:"E",ē:"e",Ĕ:"E",ĕ:"e",Ė:"E",ė:"e",Ę:"E",ę:"e",Ě:"E",ě:"e",Ĝ:"G",Ǵ:"G",ĝ:"g",ǵ:"g",Ğ:"G",ğ:"g",Ġ:"G",ġ:"g",Ģ:"G",ģ:"g",Ĥ:"H",ĥ:"h",Ħ:"H",ħ:"h",Ḫ:"H",ḫ:"h",Ĩ:"I",ĩ:"i",Ī:"I",ī:"i",Ĭ:"I",ĭ:"i",Į:"I",į:"i",İ:"I",ı:"i",IJ:"IJ",ij:"ij",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",Ḱ:"K",ḱ:"k",K̆:"K",k̆:"k",Ĺ:"L",ĺ:"l",Ļ:"L",ļ:"l",Ľ:"L",ľ:"l",Ŀ:"L",ŀ:"l",Ł:"l",ł:"l",Ḿ:"M",ḿ:"m",M̆:"M",m̆:"m",Ń:"N",ń:"n",Ņ:"N",ņ:"n",Ň:"N",ň:"n",ʼn:"n",N̆:"N",n̆:"n",Ō:"O",ō:"o",Ŏ:"O",ŏ:"o",Ő:"O",ő:"o",Œ:"OE",œ:"oe",P̆:"P",p̆:"p",Ŕ:"R",ŕ:"r",Ŗ:"R",ŗ:"r",Ř:"R",ř:"r",R̆:"R",r̆:"r",Ȓ:"R",ȓ:"r",Ś:"S",ś:"s",Ŝ:"S",ŝ:"s",Ş:"S",Ș:"S",ș:"s",ş:"s",Š:"S",š:"s",Ţ:"T",ţ:"t",ț:"t",Ț:"T",Ť:"T",ť:"t",Ŧ:"T",ŧ:"t",T̆:"T",t̆:"t",Ũ:"U",ũ:"u",Ū:"U",ū:"u",Ŭ:"U",ŭ:"u",Ů:"U",ů:"u",Ű:"U",ű:"u",Ų:"U",ų:"u",Ȗ:"U",ȗ:"u",V̆:"V",v̆:"v",Ŵ:"W",ŵ:"w",Ẃ:"W",ẃ:"w",X̆:"X",x̆:"x",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Y̆:"Y",y̆:"y",Ź:"Z",ź:"z",Ż:"Z",ż:"z",Ž:"Z",ž:"z",ſ:"s",ƒ:"f",Ơ:"O",ơ:"o",Ư:"U",ư:"u",Ǎ:"A",ǎ:"a",Ǐ:"I",ǐ:"i",Ǒ:"O",ǒ:"o",Ǔ:"U",ǔ:"u",Ǖ:"U",ǖ:"u",Ǘ:"U",ǘ:"u",Ǚ:"U",ǚ:"u",Ǜ:"U",ǜ:"u",Ứ:"U",ứ:"u",Ṹ:"U",ṹ:"u",Ǻ:"A",ǻ:"a",Ǽ:"AE",ǽ:"ae",Ǿ:"O",ǿ:"o",Þ:"TH",þ:"th",Ṕ:"P",ṕ:"p",Ṥ:"S",ṥ:"s",X́:"X",x́:"x",Ѓ:"Г",ѓ:"г",Ќ:"К",ќ:"к",A̋:"A",a̋:"a",E̋:"E",e̋:"e",I̋:"I",i̋:"i",Ǹ:"N",ǹ:"n",Ồ:"O",ồ:"o",Ṑ:"O",ṑ:"o",Ừ:"U",ừ:"u",Ẁ:"W",ẁ:"w",Ỳ:"Y",ỳ:"y",Ȁ:"A",ȁ:"a",Ȅ:"E",ȅ:"e",Ȉ:"I",ȉ:"i",Ȍ:"O",ȍ:"o",Ȑ:"R",ȑ:"r",Ȕ:"U",ȕ:"u",B̌:"B",b̌:"b",Č̣:"C",č̣:"c",Ê̌:"E",ê̌:"e",F̌:"F",f̌:"f",Ǧ:"G",ǧ:"g",Ȟ:"H",ȟ:"h",J̌:"J",ǰ:"j",Ǩ:"K",ǩ:"k",M̌:"M",m̌:"m",P̌:"P",p̌:"p",Q̌:"Q",q̌:"q",Ř̩:"R",ř̩:"r",Ṧ:"S",ṧ:"s",V̌:"V",v̌:"v",W̌:"W",w̌:"w",X̌:"X",x̌:"x",Y̌:"Y",y̌:"y",A̧:"A",a̧:"a",B̧:"B",b̧:"b",Ḑ:"D",ḑ:"d",Ȩ:"E",ȩ:"e",Ɛ̧:"E",ɛ̧:"e",Ḩ:"H",ḩ:"h",I̧:"I",i̧:"i",Ɨ̧:"I",ɨ̧:"i",M̧:"M",m̧:"m",O̧:"O",o̧:"o",Q̧:"Q",q̧:"q",U̧:"U",u̧:"u",X̧:"X",x̧:"x",Z̧:"Z",z̧:"z",й:"и",Й:"И",ё:"е",Ё:"Е"},i=Object.keys(n).join("|"),a=RegExp(i,"g"),o=RegExp(i,"");function s(e){return n[e]}var l=function(e){return e.replace(a,s)};t.exports=l,t.exports.has=function(e){return!!e.match(o)},t.exports.remove=l},29402,(e,t,r)=>{var n,i,a="__lodash_hash_undefined__",o=1/0,s="[object Arguments]",l="[object Array]",u="[object Boolean]",c="[object Date]",d="[object Error]",f="[object Function]",h="[object Map]",m="[object Number]",p="[object Object]",A="[object Promise]",g="[object RegExp]",B="[object Set]",C="[object String]",y="[object Symbol]",b="[object WeakMap]",M="[object ArrayBuffer]",x="[object DataView]",E=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,F=/^\w*$/,S=/^\./,T=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,w=/\\(\\)?/g,R=/^\[object .+?Constructor\]$/,D=/^(?:0|[1-9]\d*)$/,I={};I["[object Float32Array]"]=I["[object Float64Array]"]=I["[object Int8Array]"]=I["[object Int16Array]"]=I["[object Int32Array]"]=I["[object Uint8Array]"]=I["[object Uint8ClampedArray]"]=I["[object Uint16Array]"]=I["[object Uint32Array]"]=!0,I[s]=I[l]=I[M]=I[u]=I[x]=I[c]=I[d]=I[f]=I[h]=I[m]=I[p]=I[g]=I[B]=I[C]=I[b]=!1;var G=e.g&&e.g.Object===Object&&e.g,L="object"==typeof self&&self&&self.Object===Object&&self,P=G||L||Function("return this")(),H=r&&!r.nodeType&&r,O=H&&t&&!t.nodeType&&t,k=O&&O.exports===H&&G.process,_=function(){try{return k&&k.binding("util")}catch(e){}}(),U=_&&_.isTypedArray;function j(e,t){for(var r=-1,n=e?e.length:0,i=Array(n);++r-1},ey.prototype.set=function(e,t){var r=this.__data__,n=eE(r,e);return n<0?r.push([e,t]):r[n][1]=t,this},eb.prototype.clear=function(){this.__data__={hash:new eC,map:new(es||ey),string:new eC}},eb.prototype.delete=function(e){return eG(this,e).delete(e)},eb.prototype.get=function(e){return eG(this,e).get(e)},eb.prototype.has=function(e){return eG(this,e).has(e)},eb.prototype.set=function(e,t){return eG(this,e).set(e,t),this},eM.prototype.add=eM.prototype.push=function(e){return this.__data__.set(e,a),this},eM.prototype.has=function(e){return this.__data__.has(e)},ex.prototype.clear=function(){this.__data__=new ey},ex.prototype.delete=function(e){return this.__data__.delete(e)},ex.prototype.get=function(e){return this.__data__.get(e)},ex.prototype.has=function(e){return this.__data__.has(e)},ex.prototype.set=function(e,t){var r=this.__data__;if(r instanceof ey){var n=r.__data__;if(!es||n.length<199)return n.push([e,t]),this;r=this.__data__=new eb(n)}return r.set(e,t),this};var eF=function(e,t){return function(r,n){if(null==r)return r;if(!eW(r))return e(r,n);for(var i=r.length,a=-1,o=Object(r);(t?a--:++as))return!1;var u=a.get(e);if(u&&a.get(t))return u==t;var c=-1,d=!0,f=1&i?new eM:void 0;for(a.set(e,t),a.set(t,e);++c-1&&e%1==0&&e-1&&e%1==0&&e<=0x1fffffffffffff}function eq(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function eY(e){return!!e&&"object"==typeof e}function ez(e){return"symbol"==typeof e||eY(e)&&$.call(e)==y}var eZ=U?J(U):function(e){return eY(e)&&eX(e.length)&&!!I[$.call(e)]};function e$(e){return eW(e)?function(e,t){var r=eQ(e)||eK(e)?function(e,t){for(var r=-1,n=Array(e);++rt||a&&o&&l&&!s&&!u||n&&o&&l||!r&&l||!i)return 1;if(!n&&!a&&!u&&e=s)return l;return l*("desc"==r[n]?-1:1)}}return e.index-t.index}(e,t,r)});l--;)s[l]=s[l].value;return s}(e,t,r))}},81405,(e,t,r)=>{e.e,t.exports=function(){var e=function(){function t(e){return i.appendChild(e.dom),e}function r(e){for(var t=0;to+1e3&&(l.update(1e3*s/(e-o),100),o=e,s=0,c)){var t=performance.memory;c.update(t.usedJSHeapSize/1048576,t.jsHeapSizeLimit/1048576)}return e},update:function(){a=this.end()},domElement:i,setMode:r}};return e.Panel=function(e,t,r){var n=1/0,i=0,a=Math.round,o=a(window.devicePixelRatio||1),s=80*o,l=48*o,u=3*o,c=2*o,d=3*o,f=15*o,h=74*o,m=30*o,p=document.createElement("canvas");p.width=s,p.height=l,p.style.cssText="width:80px;height:48px";var A=p.getContext("2d");return A.font="bold "+9*o+"px Helvetica,Arial,sans-serif",A.textBaseline="top",A.fillStyle=r,A.fillRect(0,0,s,l),A.fillStyle=t,A.fillText(e,u,c),A.fillRect(d,f,h,m),A.fillStyle=r,A.globalAlpha=.9,A.fillRect(d,f,h,m),{dom:p,update:function(l,g){n=Math.min(n,l),i=Math.max(i,l),A.fillStyle=r,A.globalAlpha=1,A.fillRect(0,0,s,f),A.fillStyle=t,A.fillText(a(l)+" "+e+" ("+a(n)+"-"+a(i)+")",u,c),A.drawImage(p,d+o,f,h-o,m,d,f,h-o,m),A.fillRect(d+h-o,f,o,m),A.fillStyle=r,A.globalAlpha=.9,A.fillRect(d+h-o,f,o,a((1-l/g)*m))}}},e}()},31713,e=>{"use strict";let t;e.s(["default",()=>l8],31713);var r,n,i,a,o,s,l,u,c,d,f,h,m,p,A,g,B,C,y,b,M,x,E,F,S,T,w,R,D,I,G,L,P,H,O,k,_,U,j,J,N,K,Q,W,V,X,q,Y,z,Z,$,ee,et,er,en,ei,ea,eo,es=e.i(43476),el=e.i(71645),eu=e.i(18566),ec=e.i(46712);e.s(["ACESFilmicToneMapping",()=>ef.ACESFilmicToneMapping,"AddEquation",()=>ef.AddEquation,"AddOperation",()=>ef.AddOperation,"AdditiveAnimationBlendMode",()=>ef.AdditiveAnimationBlendMode,"AdditiveBlending",()=>ef.AdditiveBlending,"AgXToneMapping",()=>ef.AgXToneMapping,"AlphaFormat",()=>ef.AlphaFormat,"AlwaysCompare",()=>ef.AlwaysCompare,"AlwaysDepth",()=>ef.AlwaysDepth,"AlwaysStencilFunc",()=>ef.AlwaysStencilFunc,"AmbientLight",()=>ef.AmbientLight,"AnimationAction",()=>ef.AnimationAction,"AnimationClip",()=>ef.AnimationClip,"AnimationLoader",()=>ef.AnimationLoader,"AnimationMixer",()=>ef.AnimationMixer,"AnimationObjectGroup",()=>ef.AnimationObjectGroup,"AnimationUtils",()=>ef.AnimationUtils,"ArcCurve",()=>ef.ArcCurve,"ArrayCamera",()=>ef.ArrayCamera,"ArrowHelper",()=>ef.ArrowHelper,"AttachedBindMode",()=>ef.AttachedBindMode,"Audio",()=>ef.Audio,"AudioAnalyser",()=>ef.AudioAnalyser,"AudioContext",()=>ef.AudioContext,"AudioListener",()=>ef.AudioListener,"AudioLoader",()=>ef.AudioLoader,"AxesHelper",()=>ef.AxesHelper,"BackSide",()=>ef.BackSide,"BasicDepthPacking",()=>ef.BasicDepthPacking,"BasicShadowMap",()=>ef.BasicShadowMap,"BatchedMesh",()=>ef.BatchedMesh,"Bone",()=>ef.Bone,"BooleanKeyframeTrack",()=>ef.BooleanKeyframeTrack,"Box2",()=>ef.Box2,"Box3",()=>ef.Box3,"Box3Helper",()=>ef.Box3Helper,"BoxGeometry",()=>ef.BoxGeometry,"BoxHelper",()=>ef.BoxHelper,"BufferAttribute",()=>ef.BufferAttribute,"BufferGeometry",()=>ef.BufferGeometry,"BufferGeometryLoader",()=>ef.BufferGeometryLoader,"ByteType",()=>ef.ByteType,"Cache",()=>ef.Cache,"Camera",()=>ef.Camera,"CameraHelper",()=>ef.CameraHelper,"CanvasTexture",()=>ef.CanvasTexture,"CapsuleGeometry",()=>ef.CapsuleGeometry,"CatmullRomCurve3",()=>ef.CatmullRomCurve3,"CineonToneMapping",()=>ef.CineonToneMapping,"CircleGeometry",()=>ef.CircleGeometry,"ClampToEdgeWrapping",()=>ef.ClampToEdgeWrapping,"Clock",()=>ef.Clock,"Color",()=>ef.Color,"ColorKeyframeTrack",()=>ef.ColorKeyframeTrack,"ColorManagement",()=>ef.ColorManagement,"CompressedArrayTexture",()=>ef.CompressedArrayTexture,"CompressedCubeTexture",()=>ef.CompressedCubeTexture,"CompressedTexture",()=>ef.CompressedTexture,"CompressedTextureLoader",()=>ef.CompressedTextureLoader,"ConeGeometry",()=>ef.ConeGeometry,"ConstantAlphaFactor",()=>ef.ConstantAlphaFactor,"ConstantColorFactor",()=>ef.ConstantColorFactor,"Controls",()=>ef.Controls,"CubeCamera",()=>ef.CubeCamera,"CubeReflectionMapping",()=>ef.CubeReflectionMapping,"CubeRefractionMapping",()=>ef.CubeRefractionMapping,"CubeTexture",()=>ef.CubeTexture,"CubeTextureLoader",()=>ef.CubeTextureLoader,"CubeUVReflectionMapping",()=>ef.CubeUVReflectionMapping,"CubicBezierCurve",()=>ef.CubicBezierCurve,"CubicBezierCurve3",()=>ef.CubicBezierCurve3,"CubicInterpolant",()=>ef.CubicInterpolant,"CullFaceBack",()=>ef.CullFaceBack,"CullFaceFront",()=>ef.CullFaceFront,"CullFaceFrontBack",()=>ef.CullFaceFrontBack,"CullFaceNone",()=>ef.CullFaceNone,"Curve",()=>ef.Curve,"CurvePath",()=>ef.CurvePath,"CustomBlending",()=>ef.CustomBlending,"CustomToneMapping",()=>ef.CustomToneMapping,"CylinderGeometry",()=>ef.CylinderGeometry,"Cylindrical",()=>ef.Cylindrical,"Data3DTexture",()=>ef.Data3DTexture,"DataArrayTexture",()=>ef.DataArrayTexture,"DataTexture",()=>ef.DataTexture,"DataTextureLoader",()=>ef.DataTextureLoader,"DataUtils",()=>ef.DataUtils,"DecrementStencilOp",()=>ef.DecrementStencilOp,"DecrementWrapStencilOp",()=>ef.DecrementWrapStencilOp,"DefaultLoadingManager",()=>ef.DefaultLoadingManager,"DepthFormat",()=>ef.DepthFormat,"DepthStencilFormat",()=>ef.DepthStencilFormat,"DepthTexture",()=>ef.DepthTexture,"DetachedBindMode",()=>ef.DetachedBindMode,"DirectionalLight",()=>ef.DirectionalLight,"DirectionalLightHelper",()=>ef.DirectionalLightHelper,"DiscreteInterpolant",()=>ef.DiscreteInterpolant,"DodecahedronGeometry",()=>ef.DodecahedronGeometry,"DoubleSide",()=>ef.DoubleSide,"DstAlphaFactor",()=>ef.DstAlphaFactor,"DstColorFactor",()=>ef.DstColorFactor,"DynamicCopyUsage",()=>ef.DynamicCopyUsage,"DynamicDrawUsage",()=>ef.DynamicDrawUsage,"DynamicReadUsage",()=>ef.DynamicReadUsage,"EdgesGeometry",()=>ef.EdgesGeometry,"EllipseCurve",()=>ef.EllipseCurve,"EqualCompare",()=>ef.EqualCompare,"EqualDepth",()=>ef.EqualDepth,"EqualStencilFunc",()=>ef.EqualStencilFunc,"EquirectangularReflectionMapping",()=>ef.EquirectangularReflectionMapping,"EquirectangularRefractionMapping",()=>ef.EquirectangularRefractionMapping,"Euler",()=>ef.Euler,"EventDispatcher",()=>ef.EventDispatcher,"ExternalTexture",()=>ef.ExternalTexture,"ExtrudeGeometry",()=>ef.ExtrudeGeometry,"FileLoader",()=>ef.FileLoader,"Float16BufferAttribute",()=>ef.Float16BufferAttribute,"Float32BufferAttribute",()=>ef.Float32BufferAttribute,"FloatType",()=>ef.FloatType,"Fog",()=>ef.Fog,"FogExp2",()=>ef.FogExp2,"FramebufferTexture",()=>ef.FramebufferTexture,"FrontSide",()=>ef.FrontSide,"Frustum",()=>ef.Frustum,"FrustumArray",()=>ef.FrustumArray,"GLBufferAttribute",()=>ef.GLBufferAttribute,"GLSL1",()=>ef.GLSL1,"GLSL3",()=>ef.GLSL3,"GreaterCompare",()=>ef.GreaterCompare,"GreaterDepth",()=>ef.GreaterDepth,"GreaterEqualCompare",()=>ef.GreaterEqualCompare,"GreaterEqualDepth",()=>ef.GreaterEqualDepth,"GreaterEqualStencilFunc",()=>ef.GreaterEqualStencilFunc,"GreaterStencilFunc",()=>ef.GreaterStencilFunc,"GridHelper",()=>ef.GridHelper,"Group",()=>ef.Group,"HalfFloatType",()=>ef.HalfFloatType,"HemisphereLight",()=>ef.HemisphereLight,"HemisphereLightHelper",()=>ef.HemisphereLightHelper,"IcosahedronGeometry",()=>ef.IcosahedronGeometry,"ImageBitmapLoader",()=>ef.ImageBitmapLoader,"ImageLoader",()=>ef.ImageLoader,"ImageUtils",()=>ef.ImageUtils,"IncrementStencilOp",()=>ef.IncrementStencilOp,"IncrementWrapStencilOp",()=>ef.IncrementWrapStencilOp,"InstancedBufferAttribute",()=>ef.InstancedBufferAttribute,"InstancedBufferGeometry",()=>ef.InstancedBufferGeometry,"InstancedInterleavedBuffer",()=>ef.InstancedInterleavedBuffer,"InstancedMesh",()=>ef.InstancedMesh,"Int16BufferAttribute",()=>ef.Int16BufferAttribute,"Int32BufferAttribute",()=>ef.Int32BufferAttribute,"Int8BufferAttribute",()=>ef.Int8BufferAttribute,"IntType",()=>ef.IntType,"InterleavedBuffer",()=>ef.InterleavedBuffer,"InterleavedBufferAttribute",()=>ef.InterleavedBufferAttribute,"Interpolant",()=>ef.Interpolant,"InterpolateDiscrete",()=>ef.InterpolateDiscrete,"InterpolateLinear",()=>ef.InterpolateLinear,"InterpolateSmooth",()=>ef.InterpolateSmooth,"InterpolationSamplingMode",()=>ef.InterpolationSamplingMode,"InterpolationSamplingType",()=>ef.InterpolationSamplingType,"InvertStencilOp",()=>ef.InvertStencilOp,"KeepStencilOp",()=>ef.KeepStencilOp,"KeyframeTrack",()=>ef.KeyframeTrack,"LOD",()=>ef.LOD,"LatheGeometry",()=>ef.LatheGeometry,"Layers",()=>ef.Layers,"LessCompare",()=>ef.LessCompare,"LessDepth",()=>ef.LessDepth,"LessEqualCompare",()=>ef.LessEqualCompare,"LessEqualDepth",()=>ef.LessEqualDepth,"LessEqualStencilFunc",()=>ef.LessEqualStencilFunc,"LessStencilFunc",()=>ef.LessStencilFunc,"Light",()=>ef.Light,"LightProbe",()=>ef.LightProbe,"Line",()=>ef.Line,"Line3",()=>ef.Line3,"LineBasicMaterial",()=>ef.LineBasicMaterial,"LineCurve",()=>ef.LineCurve,"LineCurve3",()=>ef.LineCurve3,"LineDashedMaterial",()=>ef.LineDashedMaterial,"LineLoop",()=>ef.LineLoop,"LineSegments",()=>ef.LineSegments,"LinearFilter",()=>ef.LinearFilter,"LinearInterpolant",()=>ef.LinearInterpolant,"LinearMipMapLinearFilter",()=>ef.LinearMipMapLinearFilter,"LinearMipMapNearestFilter",()=>ef.LinearMipMapNearestFilter,"LinearMipmapLinearFilter",()=>ef.LinearMipmapLinearFilter,"LinearMipmapNearestFilter",()=>ef.LinearMipmapNearestFilter,"LinearSRGBColorSpace",()=>ef.LinearSRGBColorSpace,"LinearToneMapping",()=>ef.LinearToneMapping,"LinearTransfer",()=>ef.LinearTransfer,"Loader",()=>ef.Loader,"LoaderUtils",()=>ef.LoaderUtils,"LoadingManager",()=>ef.LoadingManager,"LoopOnce",()=>ef.LoopOnce,"LoopPingPong",()=>ef.LoopPingPong,"LoopRepeat",()=>ef.LoopRepeat,"MOUSE",()=>ef.MOUSE,"Material",()=>ef.Material,"MaterialLoader",()=>ef.MaterialLoader,"MathUtils",()=>ef.MathUtils,"Matrix2",()=>ef.Matrix2,"Matrix3",()=>ef.Matrix3,"Matrix4",()=>ef.Matrix4,"MaxEquation",()=>ef.MaxEquation,"Mesh",()=>ef.Mesh,"MeshBasicMaterial",()=>ef.MeshBasicMaterial,"MeshDepthMaterial",()=>ef.MeshDepthMaterial,"MeshDistanceMaterial",()=>ef.MeshDistanceMaterial,"MeshLambertMaterial",()=>ef.MeshLambertMaterial,"MeshMatcapMaterial",()=>ef.MeshMatcapMaterial,"MeshNormalMaterial",()=>ef.MeshNormalMaterial,"MeshPhongMaterial",()=>ef.MeshPhongMaterial,"MeshPhysicalMaterial",()=>ef.MeshPhysicalMaterial,"MeshStandardMaterial",()=>ef.MeshStandardMaterial,"MeshToonMaterial",()=>ef.MeshToonMaterial,"MinEquation",()=>ef.MinEquation,"MirroredRepeatWrapping",()=>ef.MirroredRepeatWrapping,"MixOperation",()=>ef.MixOperation,"MultiplyBlending",()=>ef.MultiplyBlending,"MultiplyOperation",()=>ef.MultiplyOperation,"NearestFilter",()=>ef.NearestFilter,"NearestMipMapLinearFilter",()=>ef.NearestMipMapLinearFilter,"NearestMipMapNearestFilter",()=>ef.NearestMipMapNearestFilter,"NearestMipmapLinearFilter",()=>ef.NearestMipmapLinearFilter,"NearestMipmapNearestFilter",()=>ef.NearestMipmapNearestFilter,"NeutralToneMapping",()=>ef.NeutralToneMapping,"NeverCompare",()=>ef.NeverCompare,"NeverDepth",()=>ef.NeverDepth,"NeverStencilFunc",()=>ef.NeverStencilFunc,"NoBlending",()=>ef.NoBlending,"NoColorSpace",()=>ef.NoColorSpace,"NoToneMapping",()=>ef.NoToneMapping,"NormalAnimationBlendMode",()=>ef.NormalAnimationBlendMode,"NormalBlending",()=>ef.NormalBlending,"NotEqualCompare",()=>ef.NotEqualCompare,"NotEqualDepth",()=>ef.NotEqualDepth,"NotEqualStencilFunc",()=>ef.NotEqualStencilFunc,"NumberKeyframeTrack",()=>ef.NumberKeyframeTrack,"Object3D",()=>ef.Object3D,"ObjectLoader",()=>ef.ObjectLoader,"ObjectSpaceNormalMap",()=>ef.ObjectSpaceNormalMap,"OctahedronGeometry",()=>ef.OctahedronGeometry,"OneFactor",()=>ef.OneFactor,"OneMinusConstantAlphaFactor",()=>ef.OneMinusConstantAlphaFactor,"OneMinusConstantColorFactor",()=>ef.OneMinusConstantColorFactor,"OneMinusDstAlphaFactor",()=>ef.OneMinusDstAlphaFactor,"OneMinusDstColorFactor",()=>ef.OneMinusDstColorFactor,"OneMinusSrcAlphaFactor",()=>ef.OneMinusSrcAlphaFactor,"OneMinusSrcColorFactor",()=>ef.OneMinusSrcColorFactor,"OrthographicCamera",()=>ef.OrthographicCamera,"PCFShadowMap",()=>ef.PCFShadowMap,"PCFSoftShadowMap",()=>ef.PCFSoftShadowMap,"PMREMGenerator",()=>ed.PMREMGenerator,"Path",()=>ef.Path,"PerspectiveCamera",()=>ef.PerspectiveCamera,"Plane",()=>ef.Plane,"PlaneGeometry",()=>ef.PlaneGeometry,"PlaneHelper",()=>ef.PlaneHelper,"PointLight",()=>ef.PointLight,"PointLightHelper",()=>ef.PointLightHelper,"Points",()=>ef.Points,"PointsMaterial",()=>ef.PointsMaterial,"PolarGridHelper",()=>ef.PolarGridHelper,"PolyhedronGeometry",()=>ef.PolyhedronGeometry,"PositionalAudio",()=>ef.PositionalAudio,"PropertyBinding",()=>ef.PropertyBinding,"PropertyMixer",()=>ef.PropertyMixer,"QuadraticBezierCurve",()=>ef.QuadraticBezierCurve,"QuadraticBezierCurve3",()=>ef.QuadraticBezierCurve3,"Quaternion",()=>ef.Quaternion,"QuaternionKeyframeTrack",()=>ef.QuaternionKeyframeTrack,"QuaternionLinearInterpolant",()=>ef.QuaternionLinearInterpolant,"RED_GREEN_RGTC2_Format",()=>ef.RED_GREEN_RGTC2_Format,"RED_RGTC1_Format",()=>ef.RED_RGTC1_Format,"REVISION",()=>ef.REVISION,"RGBADepthPacking",()=>ef.RGBADepthPacking,"RGBAFormat",()=>ef.RGBAFormat,"RGBAIntegerFormat",()=>ef.RGBAIntegerFormat,"RGBA_ASTC_10x10_Format",()=>ef.RGBA_ASTC_10x10_Format,"RGBA_ASTC_10x5_Format",()=>ef.RGBA_ASTC_10x5_Format,"RGBA_ASTC_10x6_Format",()=>ef.RGBA_ASTC_10x6_Format,"RGBA_ASTC_10x8_Format",()=>ef.RGBA_ASTC_10x8_Format,"RGBA_ASTC_12x10_Format",()=>ef.RGBA_ASTC_12x10_Format,"RGBA_ASTC_12x12_Format",()=>ef.RGBA_ASTC_12x12_Format,"RGBA_ASTC_4x4_Format",()=>ef.RGBA_ASTC_4x4_Format,"RGBA_ASTC_5x4_Format",()=>ef.RGBA_ASTC_5x4_Format,"RGBA_ASTC_5x5_Format",()=>ef.RGBA_ASTC_5x5_Format,"RGBA_ASTC_6x5_Format",()=>ef.RGBA_ASTC_6x5_Format,"RGBA_ASTC_6x6_Format",()=>ef.RGBA_ASTC_6x6_Format,"RGBA_ASTC_8x5_Format",()=>ef.RGBA_ASTC_8x5_Format,"RGBA_ASTC_8x6_Format",()=>ef.RGBA_ASTC_8x6_Format,"RGBA_ASTC_8x8_Format",()=>ef.RGBA_ASTC_8x8_Format,"RGBA_BPTC_Format",()=>ef.RGBA_BPTC_Format,"RGBA_ETC2_EAC_Format",()=>ef.RGBA_ETC2_EAC_Format,"RGBA_PVRTC_2BPPV1_Format",()=>ef.RGBA_PVRTC_2BPPV1_Format,"RGBA_PVRTC_4BPPV1_Format",()=>ef.RGBA_PVRTC_4BPPV1_Format,"RGBA_S3TC_DXT1_Format",()=>ef.RGBA_S3TC_DXT1_Format,"RGBA_S3TC_DXT3_Format",()=>ef.RGBA_S3TC_DXT3_Format,"RGBA_S3TC_DXT5_Format",()=>ef.RGBA_S3TC_DXT5_Format,"RGBDepthPacking",()=>ef.RGBDepthPacking,"RGBFormat",()=>ef.RGBFormat,"RGBIntegerFormat",()=>ef.RGBIntegerFormat,"RGB_BPTC_SIGNED_Format",()=>ef.RGB_BPTC_SIGNED_Format,"RGB_BPTC_UNSIGNED_Format",()=>ef.RGB_BPTC_UNSIGNED_Format,"RGB_ETC1_Format",()=>ef.RGB_ETC1_Format,"RGB_ETC2_Format",()=>ef.RGB_ETC2_Format,"RGB_PVRTC_2BPPV1_Format",()=>ef.RGB_PVRTC_2BPPV1_Format,"RGB_PVRTC_4BPPV1_Format",()=>ef.RGB_PVRTC_4BPPV1_Format,"RGB_S3TC_DXT1_Format",()=>ef.RGB_S3TC_DXT1_Format,"RGDepthPacking",()=>ef.RGDepthPacking,"RGFormat",()=>ef.RGFormat,"RGIntegerFormat",()=>ef.RGIntegerFormat,"RawShaderMaterial",()=>ef.RawShaderMaterial,"Ray",()=>ef.Ray,"Raycaster",()=>ef.Raycaster,"RectAreaLight",()=>ef.RectAreaLight,"RedFormat",()=>ef.RedFormat,"RedIntegerFormat",()=>ef.RedIntegerFormat,"ReinhardToneMapping",()=>ef.ReinhardToneMapping,"RenderTarget",()=>ef.RenderTarget,"RenderTarget3D",()=>ef.RenderTarget3D,"RepeatWrapping",()=>ef.RepeatWrapping,"ReplaceStencilOp",()=>ef.ReplaceStencilOp,"ReverseSubtractEquation",()=>ef.ReverseSubtractEquation,"RingGeometry",()=>ef.RingGeometry,"SIGNED_RED_GREEN_RGTC2_Format",()=>ef.SIGNED_RED_GREEN_RGTC2_Format,"SIGNED_RED_RGTC1_Format",()=>ef.SIGNED_RED_RGTC1_Format,"SRGBColorSpace",()=>ef.SRGBColorSpace,"SRGBTransfer",()=>ef.SRGBTransfer,"Scene",()=>ef.Scene,"ShaderChunk",()=>ed.ShaderChunk,"ShaderLib",()=>ed.ShaderLib,"ShaderMaterial",()=>ef.ShaderMaterial,"ShadowMaterial",()=>ef.ShadowMaterial,"Shape",()=>ef.Shape,"ShapeGeometry",()=>ef.ShapeGeometry,"ShapePath",()=>ef.ShapePath,"ShapeUtils",()=>ef.ShapeUtils,"ShortType",()=>ef.ShortType,"Skeleton",()=>ef.Skeleton,"SkeletonHelper",()=>ef.SkeletonHelper,"SkinnedMesh",()=>ef.SkinnedMesh,"Source",()=>ef.Source,"Sphere",()=>ef.Sphere,"SphereGeometry",()=>ef.SphereGeometry,"Spherical",()=>ef.Spherical,"SphericalHarmonics3",()=>ef.SphericalHarmonics3,"SplineCurve",()=>ef.SplineCurve,"SpotLight",()=>ef.SpotLight,"SpotLightHelper",()=>ef.SpotLightHelper,"Sprite",()=>ef.Sprite,"SpriteMaterial",()=>ef.SpriteMaterial,"SrcAlphaFactor",()=>ef.SrcAlphaFactor,"SrcAlphaSaturateFactor",()=>ef.SrcAlphaSaturateFactor,"SrcColorFactor",()=>ef.SrcColorFactor,"StaticCopyUsage",()=>ef.StaticCopyUsage,"StaticDrawUsage",()=>ef.StaticDrawUsage,"StaticReadUsage",()=>ef.StaticReadUsage,"StereoCamera",()=>ef.StereoCamera,"StreamCopyUsage",()=>ef.StreamCopyUsage,"StreamDrawUsage",()=>ef.StreamDrawUsage,"StreamReadUsage",()=>ef.StreamReadUsage,"StringKeyframeTrack",()=>ef.StringKeyframeTrack,"SubtractEquation",()=>ef.SubtractEquation,"SubtractiveBlending",()=>ef.SubtractiveBlending,"TOUCH",()=>ef.TOUCH,"TangentSpaceNormalMap",()=>ef.TangentSpaceNormalMap,"TetrahedronGeometry",()=>ef.TetrahedronGeometry,"Texture",()=>ef.Texture,"TextureLoader",()=>ef.TextureLoader,"TextureUtils",()=>ef.TextureUtils,"Timer",()=>ef.Timer,"TimestampQuery",()=>ef.TimestampQuery,"TorusGeometry",()=>ef.TorusGeometry,"TorusKnotGeometry",()=>ef.TorusKnotGeometry,"Triangle",()=>ef.Triangle,"TriangleFanDrawMode",()=>ef.TriangleFanDrawMode,"TriangleStripDrawMode",()=>ef.TriangleStripDrawMode,"TrianglesDrawMode",()=>ef.TrianglesDrawMode,"TubeGeometry",()=>ef.TubeGeometry,"UVMapping",()=>ef.UVMapping,"Uint16BufferAttribute",()=>ef.Uint16BufferAttribute,"Uint32BufferAttribute",()=>ef.Uint32BufferAttribute,"Uint8BufferAttribute",()=>ef.Uint8BufferAttribute,"Uint8ClampedBufferAttribute",()=>ef.Uint8ClampedBufferAttribute,"Uniform",()=>ef.Uniform,"UniformsGroup",()=>ef.UniformsGroup,"UniformsLib",()=>ed.UniformsLib,"UniformsUtils",()=>ef.UniformsUtils,"UnsignedByteType",()=>ef.UnsignedByteType,"UnsignedInt101111Type",()=>ef.UnsignedInt101111Type,"UnsignedInt248Type",()=>ef.UnsignedInt248Type,"UnsignedInt5999Type",()=>ef.UnsignedInt5999Type,"UnsignedIntType",()=>ef.UnsignedIntType,"UnsignedShort4444Type",()=>ef.UnsignedShort4444Type,"UnsignedShort5551Type",()=>ef.UnsignedShort5551Type,"UnsignedShortType",()=>ef.UnsignedShortType,"VSMShadowMap",()=>ef.VSMShadowMap,"Vector2",()=>ef.Vector2,"Vector3",()=>ef.Vector3,"Vector4",()=>ef.Vector4,"VectorKeyframeTrack",()=>ef.VectorKeyframeTrack,"VideoFrameTexture",()=>ef.VideoFrameTexture,"VideoTexture",()=>ef.VideoTexture,"WebGL3DRenderTarget",()=>ef.WebGL3DRenderTarget,"WebGLArrayRenderTarget",()=>ef.WebGLArrayRenderTarget,"WebGLCoordinateSystem",()=>ef.WebGLCoordinateSystem,"WebGLCubeRenderTarget",()=>ef.WebGLCubeRenderTarget,"WebGLRenderTarget",()=>ef.WebGLRenderTarget,"WebGLRenderer",()=>ed.WebGLRenderer,"WebGLUtils",()=>ed.WebGLUtils,"WebGPUCoordinateSystem",()=>ef.WebGPUCoordinateSystem,"WebXRController",()=>ef.WebXRController,"WireframeGeometry",()=>ef.WireframeGeometry,"WrapAroundEnding",()=>ef.WrapAroundEnding,"ZeroCurvatureEnding",()=>ef.ZeroCurvatureEnding,"ZeroFactor",()=>ef.ZeroFactor,"ZeroSlopeEnding",()=>ef.ZeroSlopeEnding,"ZeroStencilOp",()=>ef.ZeroStencilOp,"createCanvasElement",()=>ef.createCanvasElement],32009);var ed=e.i(8560),ef=e.i(90072),eh=e.i(32009);function em(e,t){let r;return function(){for(var n=arguments.length,i=Array(n),a=0;ae(...i),t)}}let ep=["x","y","top","bottom","left","right","width","height"];var eA=e.i(46791);function eg(e){let{ref:t,children:r,fallback:n,resize:i,style:a,gl:o,events:s=ec.f,eventSource:l,eventPrefix:u,shadows:c,linear:d,flat:f,legacy:h,orthographic:m,frameloop:p,dpr:A,performance:g,raycaster:B,camera:C,scene:y,onPointerMissed:b,onCreated:M,...x}=e;el.useMemo(()=>(0,ec.e)(eh),[]);let E=(0,ec.u)(),[F,S]=function(){var e,t,r;let{debounce:n,scroll:i,polyfill:a,offsetSize:o}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{debounce:0,scroll:!1,offsetSize:!1},s=a||("undefined"==typeof window?class{}:window.ResizeObserver);if(!s)throw Error("This browser does not support ResizeObserver out of the box. See: https://github.com/react-spring/react-use-measure/#resize-observer-polyfills");let[l,u]=(0,el.useState)({left:0,top:0,width:0,height:0,bottom:0,right:0,x:0,y:0}),c=(0,el.useRef)({element:null,scrollContainers:null,resizeObserver:null,lastBounds:l,orientationHandler:null}),d=n?"number"==typeof n?n:n.scroll:null,f=n?"number"==typeof n?n:n.resize:null,h=(0,el.useRef)(!1);(0,el.useEffect)(()=>(h.current=!0,()=>void(h.current=!1)));let[m,p,A]=(0,el.useMemo)(()=>{let e=()=>{let e,t;if(!c.current.element)return;let{left:r,top:n,width:i,height:a,bottom:s,right:l,x:d,y:f}=c.current.element.getBoundingClientRect(),m={left:r,top:n,width:i,height:a,bottom:s,right:l,x:d,y:f};c.current.element instanceof HTMLElement&&o&&(m.height=c.current.element.offsetHeight,m.width=c.current.element.offsetWidth),Object.freeze(m),h.current&&(e=c.current.lastBounds,t=m,!ep.every(r=>e[r]===t[r]))&&u(c.current.lastBounds=m)};return[e,f?em(e,f):e,d?em(e,d):e]},[u,o,d,f]);function g(){c.current.scrollContainers&&(c.current.scrollContainers.forEach(e=>e.removeEventListener("scroll",A,!0)),c.current.scrollContainers=null),c.current.resizeObserver&&(c.current.resizeObserver.disconnect(),c.current.resizeObserver=null),c.current.orientationHandler&&("orientation"in screen&&"removeEventListener"in screen.orientation?screen.orientation.removeEventListener("change",c.current.orientationHandler):"onorientationchange"in window&&window.removeEventListener("orientationchange",c.current.orientationHandler))}function B(){c.current.element&&(c.current.resizeObserver=new s(A),c.current.resizeObserver.observe(c.current.element),i&&c.current.scrollContainers&&c.current.scrollContainers.forEach(e=>e.addEventListener("scroll",A,{capture:!0,passive:!0})),c.current.orientationHandler=()=>{A()},"orientation"in screen&&"addEventListener"in screen.orientation?screen.orientation.addEventListener("change",c.current.orientationHandler):"onorientationchange"in window&&window.addEventListener("orientationchange",c.current.orientationHandler))}return e=A,t=!!i,(0,el.useEffect)(()=>{if(t)return window.addEventListener("scroll",e,{capture:!0,passive:!0}),()=>void window.removeEventListener("scroll",e,!0)},[e,t]),r=p,(0,el.useEffect)(()=>(window.addEventListener("resize",r),()=>void window.removeEventListener("resize",r)),[r]),(0,el.useEffect)(()=>{g(),B()},[i,A,p]),(0,el.useEffect)(()=>g,[]),[e=>{e&&e!==c.current.element&&(g(),c.current.element=e,c.current.scrollContainers=function e(t){let r=[];if(!t||t===document.body)return r;let{overflow:n,overflowX:i,overflowY:a}=window.getComputedStyle(t);return[n,i,a].some(e=>"auto"===e||"scroll"===e)&&r.push(t),[...r,...e(t.parentElement)]}(e),B())},l,m]}({scroll:!0,debounce:{scroll:50,resize:0},...i}),T=el.useRef(null),w=el.useRef(null);el.useImperativeHandle(t,()=>T.current);let R=(0,ec.a)(b),[D,I]=el.useState(!1),[G,L]=el.useState(!1);if(D)throw D;if(G)throw G;let P=el.useRef(null);(0,ec.b)(()=>{let e=T.current;S.width>0&&S.height>0&&e&&(P.current||(P.current=(0,ec.c)(e)),async function(){await P.current.configure({gl:o,scene:y,events:s,shadows:c,linear:d,flat:f,legacy:h,orthographic:m,frameloop:p,dpr:A,performance:g,raycaster:B,camera:C,size:S,onPointerMissed:function(){for(var e=arguments.length,t=Array(e),r=0;r{null==e.events.connect||e.events.connect(l?(0,ec.i)(l)?l.current:l:w.current),u&&e.setEvents({compute:(e,t)=>{let r=e[u+"X"],n=e[u+"Y"];t.pointer.set(r/t.size.width*2-1,-(2*(n/t.size.height))+1),t.raycaster.setFromCamera(t.pointer,t.camera)}}),null==M||M(e)}}),P.current.render((0,es.jsx)(E,{children:(0,es.jsx)(ec.E,{set:L,children:(0,es.jsx)(el.Suspense,{fallback:(0,es.jsx)(ec.B,{set:I}),children:null!=r?r:null})})}))}())}),el.useEffect(()=>{let e=T.current;if(e)return()=>(0,ec.d)(e)},[]);let H=l?"none":"auto";return(0,es.jsx)("div",{ref:w,style:{position:"relative",width:"100%",height:"100%",overflow:"hidden",pointerEvents:H,...a},...x,children:(0,es.jsx)("div",{ref:F,style:{width:"100%",height:"100%"},children:(0,es.jsx)("canvas",{ref:T,style:{display:"block"},children:n})})})}function ev(e){return(0,es.jsx)(eA.FiberProvider,{children:(0,es.jsx)(eg,{...e})})}function eB(e,t,r){if(!t.has(e))throw TypeError("attempted to "+r+" private field on non-instance");return t.get(e)}function eC(e,t){var r=eB(e,t,"get");return r.get?r.get.call(e):r.value}function ey(e,t){if(t.has(e))throw TypeError("Cannot initialize the same private elements twice on an object")}function eb(e,t,r){ey(e,t),t.set(e,r)}function eM(e,t,r){var n=eB(e,t,"set");if(n.set)n.set.call(e,r);else{if(!n.writable)throw TypeError("attempted to set read only private field");n.value=r}return r}function ex(e,t,r){if(!t.has(e))throw TypeError("attempted to get private field on non-instance");return r}function eE(e,t){ey(e,t),t.add(e)}e.i(39695),e.i(98133),e.i(95087);var eF=class{subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}};e.i(47167);var eS={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},eT=new(r=new WeakMap,n=new WeakMap,class{setTimeoutProvider(e){eM(this,r,e)}setTimeout(e,t){return eC(this,r).setTimeout(e,t)}clearTimeout(e){eC(this,r).clearTimeout(e)}setInterval(e,t){return eC(this,r).setInterval(e,t)}clearInterval(e){eC(this,r).clearInterval(e)}constructor(){eb(this,r,{writable:!0,value:eS}),eb(this,n,{writable:!0,value:!1})}}),ew="undefined"==typeof window||"Deno"in globalThis;function eR(){}function eD(e){return"number"==typeof e&&e>=0&&e!==1/0}function eI(e,t){return Math.max(e+(t||0)-Date.now(),0)}function eG(e,t){return"function"==typeof e?e(t):e}function eL(e,t){return"function"==typeof e?e(t):e}function eP(e,t){let{type:r="all",exact:n,fetchStatus:i,predicate:a,queryKey:o,stale:s}=e;if(o){if(n){if(t.queryHash!==eO(o,t.options))return!1}else if(!e_(t.queryKey,o))return!1}if("all"!==r){let e=t.isActive();if("active"===r&&!e||"inactive"===r&&e)return!1}return("boolean"!=typeof s||t.isStale()===s)&&(!i||i===t.state.fetchStatus)&&(!a||!!a(t))}function eH(e,t){let{exact:r,status:n,predicate:i,mutationKey:a}=e;if(a){if(!t.options.mutationKey)return!1;if(r){if(ek(t.options.mutationKey)!==ek(a))return!1}else if(!e_(t.options.mutationKey,a))return!1}return(!n||t.state.status===n)&&(!i||!!i(t))}function eO(e,t){return((null==t?void 0:t.queryKeyHashFn)||ek)(e)}function ek(e){return JSON.stringify(e,(e,t)=>eN(t)?Object.keys(t).sort().reduce((e,r)=>(e[r]=t[r],e),{}):t)}function e_(e,t){return e===t||typeof e==typeof t&&!!e&&!!t&&"object"==typeof e&&"object"==typeof t&&Object.keys(t).every(r=>e_(e[r],t[r]))}var eU=Object.prototype.hasOwnProperty;function ej(e,t){if(!t||Object.keys(e).length!==Object.keys(t).length)return!1;for(let r in e)if(e[r]!==t[r])return!1;return!0}function eJ(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function eN(e){if(!eK(e))return!1;let t=e.constructor;if(void 0===t)return!0;let r=t.prototype;return!!eK(r)&&!!r.hasOwnProperty("isPrototypeOf")&&Object.getPrototypeOf(e)===Object.prototype}function eK(e){return"[object Object]"===Object.prototype.toString.call(e)}function eQ(e,t,r){return"function"==typeof r.structuralSharing?r.structuralSharing(e,t):!1!==r.structuralSharing?function e(t,r){if(t===r)return t;let n=eJ(t)&&eJ(r);if(!n&&!(eN(t)&&eN(r)))return r;let i=(n?t:Object.keys(t)).length,a=n?r:Object.keys(r),o=a.length,s=n?Array(o):{},l=0;for(let u=0;u2&&void 0!==arguments[2]?arguments[2]:0,n=[...e,t];return r&&n.length>r?n.slice(1):n}function eV(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,n=[t,...e];return r&&n.length>r?n.slice(0,-1):n}var eX=Symbol();function eq(e,t){return!e.queryFn&&(null==t?void 0:t.initialPromise)?()=>t.initialPromise:e.queryFn&&e.queryFn!==eX?e.queryFn:()=>Promise.reject(Error("Missing queryFn: '".concat(e.queryHash,"'")))}var eY=new(i=new WeakMap,a=new WeakMap,o=new WeakMap,class extends eF{onSubscribe(){eC(this,a)||this.setEventListener(eC(this,o))}onUnsubscribe(){var e;this.hasListeners()||(null==(e=eC(this,a))||e.call(this),eM(this,a,void 0))}setEventListener(e){var t;eM(this,o,e),null==(t=eC(this,a))||t.call(this),eM(this,a,e(e=>{"boolean"==typeof e?this.setFocused(e):this.onFocus()}))}setFocused(e){eC(this,i)!==e&&(eM(this,i,e),this.onFocus())}onFocus(){let e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){var e;return"boolean"==typeof eC(this,i)?eC(this,i):(null==(e=globalThis.document)?void 0:e.visibilityState)!=="hidden"}constructor(){super(),eb(this,i,{writable:!0,value:void 0}),eb(this,a,{writable:!0,value:void 0}),eb(this,o,{writable:!0,value:void 0}),eM(this,o,e=>{if(!ew&&window.addEventListener){let t=()=>e();return window.addEventListener("visibilitychange",t,!1),()=>{window.removeEventListener("visibilitychange",t)}}})}}),ez=function(e){setTimeout(e,0)},eZ=function(){let e=[],t=0,r=e=>{e()},n=e=>{e()},i=ez,a=n=>{t?e.push(n):i(()=>{r(n)})};return{batch:a=>{let o;t++;try{o=a()}finally{--t||(()=>{let t=e;e=[],t.length&&i(()=>{n(()=>{t.forEach(e=>{r(e)})})})})()}return o},batchCalls:e=>function(){for(var t=arguments.length,r=Array(t),n=0;n{e(...r)})},schedule:a,setNotifyFunction:e=>{r=e},setBatchNotifyFunction:e=>{n=e},setScheduler:e=>{i=e}}}(),e$=new(s=new WeakMap,l=new WeakMap,u=new WeakMap,class extends eF{onSubscribe(){eC(this,l)||this.setEventListener(eC(this,u))}onUnsubscribe(){var e;this.hasListeners()||(null==(e=eC(this,l))||e.call(this),eM(this,l,void 0))}setEventListener(e){var t;eM(this,u,e),null==(t=eC(this,l))||t.call(this),eM(this,l,e(this.setOnline.bind(this)))}setOnline(e){eC(this,s)!==e&&(eM(this,s,e),this.listeners.forEach(t=>{t(e)}))}isOnline(){return eC(this,s)}constructor(){super(),eb(this,s,{writable:!0,value:!0}),eb(this,l,{writable:!0,value:void 0}),eb(this,u,{writable:!0,value:void 0}),eM(this,u,e=>{if(!ew&&window.addEventListener){let t=()=>e(!0),r=()=>e(!1);return window.addEventListener("online",t,!1),window.addEventListener("offline",r,!1),()=>{window.removeEventListener("online",t),window.removeEventListener("offline",r)}}})}});function e0(){let e,t,r=new Promise((r,n)=>{e=r,t=n});function n(e){Object.assign(r,e),delete r.resolve,delete r.reject}return r.status="pending",r.catch(()=>{}),r.resolve=t=>{n({status:"fulfilled",value:t}),e(t)},r.reject=e=>{n({status:"rejected",reason:e}),t(e)},r}function e1(e){return Math.min(1e3*2**e,3e4)}function e9(e){return(null!=e?e:"online")!=="online"||e$.isOnline()}var e2=class extends Error{constructor(e){super("CancelledError"),this.revert=null==e?void 0:e.revert,this.silent=null==e?void 0:e.silent}};function e3(e){let t,r=!1,n=0,i=e0(),a=()=>eY.isFocused()&&("always"===e.networkMode||e$.isOnline())&&e.canRun(),o=()=>e9(e.networkMode)&&e.canRun(),s=e=>{"pending"===i.status&&(null==t||t(),i.resolve(e))},l=e=>{"pending"===i.status&&(null==t||t(),i.reject(e))},u=()=>new Promise(r=>{var n;t=e=>{("pending"!==i.status||a())&&r(e)},null==(n=e.onPause)||n.call(e)}).then(()=>{if(t=void 0,"pending"===i.status){var r;null==(r=e.onContinue)||r.call(e)}}),c=()=>{let t;if("pending"!==i.status)return;let o=0===n?e.initialPromise:void 0;try{t=null!=o?o:e.fn()}catch(e){t=Promise.reject(e)}Promise.resolve(t).then(s).catch(t=>{var o,s,d;if("pending"!==i.status)return;let f=null!=(s=e.retry)?s:3*!ew,h=null!=(d=e.retryDelay)?d:e1,m="function"==typeof h?h(n,t):h,p=!0===f||"number"==typeof f&&n{eT.setTimeout(e,m)}).then(()=>a()?void 0:u()).then(()=>{r?l(t):c()})})};return{promise:i,status:()=>i.status,cancel:t=>{if("pending"===i.status){var r;let n=new e2(t);l(n),null==(r=e.onCancel)||r.call(e,n)}},continue:()=>(null==t||t(),i),cancelRetry:()=>{r=!0},continueRetry:()=>{r=!1},canStart:o,start:()=>(o()?c():u().then(c),i)}}var e8=(c=new WeakMap,class{destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),eD(this.gcTime)&&eM(this,c,eT.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,null!=e?e:ew?1/0:3e5)}clearGcTimeout(){eC(this,c)&&(eT.clearTimeout(eC(this,c)),eM(this,c,void 0))}constructor(){eb(this,c,{writable:!0,value:void 0})}}),e5=(d=new WeakMap,f=new WeakMap,h=new WeakMap,m=new WeakMap,p=new WeakMap,A=new WeakMap,g=new WeakMap,B=new WeakSet,class extends e8{get meta(){return this.options.meta}get promise(){var e;return null==(e=eC(this,p))?void 0:e.promise}setOptions(e){if(this.options={...eC(this,A),...e},this.updateGcTime(this.options.gcTime),this.state&&void 0===this.state.data){let e=e7(this.options);void 0!==e.data&&(this.setState(e4(e.data,e.dataUpdatedAt)),eM(this,d,e))}}optionalRemove(){this.observers.length||"idle"!==this.state.fetchStatus||eC(this,h).remove(this)}setData(e,t){let r=eQ(this.state.data,e,this.options);return ex(this,B,te).call(this,{data:r,type:"success",dataUpdatedAt:null==t?void 0:t.updatedAt,manual:null==t?void 0:t.manual}),r}setState(e,t){ex(this,B,te).call(this,{type:"setState",state:e,setStateOptions:t})}cancel(e){var t,r;let n=null==(t=eC(this,p))?void 0:t.promise;return null==(r=eC(this,p))||r.cancel(e),n?n.then(eR).catch(eR):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}reset(){this.destroy(),this.setState(eC(this,d))}isActive(){return this.observers.some(e=>!1!==eL(e.options.enabled,this))}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===eX||this.state.dataUpdateCount+this.state.errorUpdateCount===0}isStatic(){return this.getObserversCount()>0&&this.observers.some(e=>"static"===eG(e.options.staleTime,this))}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):void 0===this.state.data||this.state.isInvalidated}isStaleByTime(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return void 0===this.state.data||"static"!==e&&(!!this.state.isInvalidated||!eI(this.state.dataUpdatedAt,e))}onFocus(){var e;let t=this.observers.find(e=>e.shouldFetchOnWindowFocus());null==t||t.refetch({cancelRefetch:!1}),null==(e=eC(this,p))||e.continue()}onOnline(){var e;let t=this.observers.find(e=>e.shouldFetchOnReconnect());null==t||t.refetch({cancelRefetch:!1}),null==(e=eC(this,p))||e.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),eC(this,h).notify({type:"observerAdded",query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(t=>t!==e),this.observers.length||(eC(this,p)&&(eC(this,g)?eC(this,p).cancel({revert:!0}):eC(this,p).cancelRetry()),this.scheduleGc()),eC(this,h).notify({type:"observerRemoved",query:this,observer:e}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||ex(this,B,te).call(this,{type:"invalidate"})}async fetch(e,t){var r,n,i,a,o,s,l,u,c,d,A,C;if("idle"!==this.state.fetchStatus&&(null==(r=eC(this,p))?void 0:r.status())!=="rejected"){if(void 0!==this.state.data&&(null==t?void 0:t.cancelRefetch))this.cancel({silent:!0});else if(eC(this,p))return eC(this,p).continueRetry(),eC(this,p).promise}if(e&&this.setOptions(e),!this.options.queryFn){let e=this.observers.find(e=>e.options.queryFn);e&&this.setOptions(e.options)}let y=new AbortController,b=e=>{Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(eM(this,g,!0),y.signal)})},M=()=>{let e=eq(this.options,t),r=(()=>{let e={client:eC(this,m),queryKey:this.queryKey,meta:this.meta};return b(e),e})();return(eM(this,g,!1),this.options.persister)?this.options.persister(e,r,this):e(r)},x=(()=>{let e={fetchOptions:t,options:this.options,queryKey:this.queryKey,client:eC(this,m),state:this.state,fetchFn:M};return b(e),e})();null==(n=this.options.behavior)||n.onFetch(x,this),eM(this,f,this.state),("idle"===this.state.fetchStatus||this.state.fetchMeta!==(null==(i=x.fetchOptions)?void 0:i.meta))&&ex(this,B,te).call(this,{type:"fetch",meta:null==(a=x.fetchOptions)?void 0:a.meta}),eM(this,p,e3({initialPromise:null==t?void 0:t.initialPromise,fn:x.fetchFn,onCancel:e=>{e instanceof e2&&e.revert&&this.setState({...eC(this,f),fetchStatus:"idle"}),y.abort()},onFail:(e,t)=>{ex(this,B,te).call(this,{type:"failed",failureCount:e,error:t})},onPause:()=>{ex(this,B,te).call(this,{type:"pause"})},onContinue:()=>{ex(this,B,te).call(this,{type:"continue"})},retry:x.options.retry,retryDelay:x.options.retryDelay,networkMode:x.options.networkMode,canRun:()=>!0}));try{let e=await eC(this,p).start();if(void 0===e)throw Error("".concat(this.queryHash," data is undefined"));return this.setData(e),null==(o=(s=eC(this,h).config).onSuccess)||o.call(s,e,this),null==(l=(u=eC(this,h).config).onSettled)||l.call(u,e,this.state.error,this),e}catch(e){if(e instanceof e2){if(e.silent)return eC(this,p).promise;else if(e.revert){if(void 0===this.state.data)throw e;return this.state.data}}throw ex(this,B,te).call(this,{type:"error",error:e}),null==(c=(d=eC(this,h).config).onError)||c.call(d,e,this),null==(A=(C=eC(this,h).config).onSettled)||A.call(C,this.state.data,e,this),e}finally{this.scheduleGc()}}constructor(e){var t;super(),eE(this,B),eb(this,d,{writable:!0,value:void 0}),eb(this,f,{writable:!0,value:void 0}),eb(this,h,{writable:!0,value:void 0}),eb(this,m,{writable:!0,value:void 0}),eb(this,p,{writable:!0,value:void 0}),eb(this,A,{writable:!0,value:void 0}),eb(this,g,{writable:!0,value:void 0}),eM(this,g,!1),eM(this,A,e.defaultOptions),this.setOptions(e.options),this.observers=[],eM(this,m,e.client),eM(this,h,eC(this,m).getQueryCache()),this.queryKey=e.queryKey,this.queryHash=e.queryHash,eM(this,d,e7(this.options)),this.state=null!=(t=e.state)?t:eC(this,d),this.scheduleGc()}});function e6(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:e9(t.networkMode)?"fetching":"paused",...void 0===e&&{error:null,status:"pending"}}}function e4(e,t){return{data:e,dataUpdatedAt:null!=t?t:Date.now(),error:null,isInvalidated:!1,status:"success"}}function e7(e){let t="function"==typeof e.initialData?e.initialData():e.initialData,r=void 0!==t,n=r?"function"==typeof e.initialDataUpdatedAt?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:r?null!=n?n:Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:r?"success":"pending",fetchStatus:"idle"}}function te(e){let t=t=>{switch(e.type){case"failed":return{...t,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case"pause":return{...t,fetchStatus:"paused"};case"continue":return{...t,fetchStatus:"fetching"};case"fetch":var r;return{...t,...e6(t.data,this.options),fetchMeta:null!=(r=e.meta)?r:null};case"success":let n={...t,...e4(e.data,e.dataUpdatedAt),dataUpdateCount:t.dataUpdateCount+1,...!e.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};return eM(this,f,e.manual?n:void 0),n;case"error":let i=e.error;return{...t,error:i,errorUpdateCount:t.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:t.fetchFailureCount+1,fetchFailureReason:i,fetchStatus:"idle",status:"error"};case"invalidate":return{...t,isInvalidated:!0};case"setState":return{...t,...e.state}}};this.state=t(this.state),eZ.batch(()=>{this.observers.forEach(e=>{e.onQueryUpdate()}),eC(this,h).notify({query:this,type:"updated",action:e})})}var tt=(C=new WeakMap,y=new WeakMap,b=new WeakMap,M=new WeakMap,x=new WeakMap,E=new WeakMap,F=new WeakMap,S=new WeakMap,T=new WeakMap,w=new WeakMap,R=new WeakMap,D=new WeakMap,I=new WeakMap,G=new WeakMap,L=new WeakMap,P=new WeakSet,H=new WeakSet,O=new WeakSet,k=new WeakSet,_=new WeakSet,U=new WeakSet,j=new WeakSet,J=new WeakSet,N=new WeakSet,class extends eF{bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){1===this.listeners.size&&(eC(this,y).addObserver(this),tr(eC(this,y),this.options)?ex(this,P,to).call(this):this.updateResult(),ex(this,_,tc).call(this))}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return tn(eC(this,y),this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return tn(eC(this,y),this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,ex(this,U,td).call(this),ex(this,j,tf).call(this),eC(this,y).removeObserver(this)}setOptions(e){let t=this.options,r=eC(this,y);if(this.options=eC(this,C).defaultQueryOptions(e),void 0!==this.options.enabled&&"boolean"!=typeof this.options.enabled&&"function"!=typeof this.options.enabled&&"boolean"!=typeof eL(this.options.enabled,eC(this,y)))throw Error("Expected enabled to be a boolean or a callback that returns a boolean");ex(this,J,th).call(this),eC(this,y).setOptions(this.options),t._defaulted&&!ej(this.options,t)&&eC(this,C).getQueryCache().notify({type:"observerOptionsUpdated",query:eC(this,y),observer:this});let n=this.hasListeners();n&&ti(eC(this,y),r,this.options,t)&&ex(this,P,to).call(this),this.updateResult(),n&&(eC(this,y)!==r||eL(this.options.enabled,eC(this,y))!==eL(t.enabled,eC(this,y))||eG(this.options.staleTime,eC(this,y))!==eG(t.staleTime,eC(this,y)))&&ex(this,H,ts).call(this);let i=ex(this,O,tl).call(this);n&&(eC(this,y)!==r||eL(this.options.enabled,eC(this,y))!==eL(t.enabled,eC(this,y))||i!==eC(this,G))&&ex(this,k,tu).call(this,i)}getOptimisticResult(e){var t,r;let n=eC(this,C).getQueryCache().build(eC(this,C),e),i=this.createResult(n,e);return t=this,r=i,ej(t.getCurrentResult(),r)||(eM(this,M,i),eM(this,E,this.options),eM(this,x,eC(this,y).state)),i}getCurrentResult(){return eC(this,M)}trackResult(e,t){return new Proxy(e,{get:(e,r)=>(this.trackProp(r),null==t||t(r),"promise"===r&&(this.trackProp("data"),this.options.experimental_prefetchInRender||"pending"!==eC(this,F).status||eC(this,F).reject(Error("experimental_prefetchInRender feature flag is not enabled"))),Reflect.get(e,r))})}trackProp(e){eC(this,L).add(e)}getCurrentQuery(){return eC(this,y)}refetch(){let{...e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.fetch({...e})}fetchOptimistic(e){let t=eC(this,C).defaultQueryOptions(e),r=eC(this,C).getQueryCache().build(eC(this,C),t);return r.fetch().then(()=>this.createResult(r,t))}fetch(e){var t;return ex(this,P,to).call(this,{...e,cancelRefetch:null==(t=e.cancelRefetch)||t}).then(()=>(this.updateResult(),eC(this,M)))}createResult(e,t){let r,n=eC(this,y),i=this.options,a=eC(this,M),o=eC(this,x),s=eC(this,E),l=e!==n?e.state:eC(this,b),{state:u}=e,c={...u},d=!1;if(t._optimisticResults){let r=this.hasListeners(),a=!r&&tr(e,t),o=r&&ti(e,n,t,i);(a||o)&&(c={...c,...e6(u.data,e.options)}),"isRestoring"===t._optimisticResults&&(c.fetchStatus="idle")}let{error:f,errorUpdatedAt:h,status:m}=c;r=c.data;let p=!1;if(void 0!==t.placeholderData&&void 0===r&&"pending"===m){let e;if((null==a?void 0:a.isPlaceholderData)&&t.placeholderData===(null==s?void 0:s.placeholderData))e=a.data,p=!0;else{var A;e="function"==typeof t.placeholderData?t.placeholderData(null==(A=eC(this,R))?void 0:A.state.data,eC(this,R)):t.placeholderData}void 0!==e&&(m="success",r=eQ(null==a?void 0:a.data,e,t),d=!0)}if(t.select&&void 0!==r&&!p)if(a&&r===(null==o?void 0:o.data)&&t.select===eC(this,T))r=eC(this,w);else try{eM(this,T,t.select),r=t.select(r),r=eQ(null==a?void 0:a.data,r,t),eM(this,w,r),eM(this,S,null)}catch(e){eM(this,S,e)}eC(this,S)&&(f=eC(this,S),r=eC(this,w),h=Date.now(),m="error");let g="fetching"===c.fetchStatus,B="pending"===m,C="error"===m,D=B&&g,I=void 0!==r,G={status:m,fetchStatus:c.fetchStatus,isPending:B,isSuccess:"success"===m,isError:C,isInitialLoading:D,isLoading:D,data:r,dataUpdatedAt:c.dataUpdatedAt,error:f,errorUpdatedAt:h,failureCount:c.fetchFailureCount,failureReason:c.fetchFailureReason,errorUpdateCount:c.errorUpdateCount,isFetched:c.dataUpdateCount>0||c.errorUpdateCount>0,isFetchedAfterMount:c.dataUpdateCount>l.dataUpdateCount||c.errorUpdateCount>l.errorUpdateCount,isFetching:g,isRefetching:g&&!B,isLoadingError:C&&!I,isPaused:"paused"===c.fetchStatus,isPlaceholderData:d,isRefetchError:C&&I,isStale:ta(e,t),refetch:this.refetch,promise:eC(this,F),isEnabled:!1!==eL(t.enabled,e)};if(this.options.experimental_prefetchInRender){let t=e=>{"error"===G.status?e.reject(G.error):void 0!==G.data&&e.resolve(G.data)},r=()=>{t(eM(this,F,G.promise=e0()))},i=eC(this,F);switch(i.status){case"pending":e.queryHash===n.queryHash&&t(i);break;case"fulfilled":("error"===G.status||G.data!==i.value)&&r();break;case"rejected":("error"!==G.status||G.error!==i.reason)&&r()}}return G}updateResult(){let e=eC(this,M),t=this.createResult(eC(this,y),this.options);if(eM(this,x,eC(this,y).state),eM(this,E,this.options),void 0!==eC(this,x).data&&eM(this,R,eC(this,y)),ej(t,e))return;eM(this,M,t);let r=()=>{if(!e)return!0;let{notifyOnChangeProps:t}=this.options,r="function"==typeof t?t():t;if("all"===r||!r&&!eC(this,L).size)return!0;let n=new Set(null!=r?r:eC(this,L));return this.options.throwOnError&&n.add("error"),Object.keys(eC(this,M)).some(t=>eC(this,M)[t]!==e[t]&&n.has(t))};ex(this,N,tm).call(this,{listeners:r()})}onQueryUpdate(){this.updateResult(),this.hasListeners()&&ex(this,_,tc).call(this)}constructor(e,t){super(),eE(this,P),eE(this,H),eE(this,O),eE(this,k),eE(this,_),eE(this,U),eE(this,j),eE(this,J),eE(this,N),eb(this,C,{writable:!0,value:void 0}),eb(this,y,{writable:!0,value:void 0}),eb(this,b,{writable:!0,value:void 0}),eb(this,M,{writable:!0,value:void 0}),eb(this,x,{writable:!0,value:void 0}),eb(this,E,{writable:!0,value:void 0}),eb(this,F,{writable:!0,value:void 0}),eb(this,S,{writable:!0,value:void 0}),eb(this,T,{writable:!0,value:void 0}),eb(this,w,{writable:!0,value:void 0}),eb(this,R,{writable:!0,value:void 0}),eb(this,D,{writable:!0,value:void 0}),eb(this,I,{writable:!0,value:void 0}),eb(this,G,{writable:!0,value:void 0}),eb(this,L,{writable:!0,value:new Set}),this.options=t,eM(this,C,e),eM(this,S,null),eM(this,F,e0()),this.bindMethods(),this.setOptions(t)}});function tr(e,t){return!1!==eL(t.enabled,e)&&void 0===e.state.data&&("error"!==e.state.status||!1!==t.retryOnMount)||void 0!==e.state.data&&tn(e,t,t.refetchOnMount)}function tn(e,t,r){if(!1!==eL(t.enabled,e)&&"static"!==eG(t.staleTime,e)){let n="function"==typeof r?r(e):r;return"always"===n||!1!==n&&ta(e,t)}return!1}function ti(e,t,r,n){return(e!==t||!1===eL(n.enabled,e))&&(!r.suspense||"error"!==e.state.status)&&ta(e,r)}function ta(e,t){return!1!==eL(t.enabled,e)&&e.isStaleByTime(eG(t.staleTime,e))}function to(e){ex(this,J,th).call(this);let t=eC(this,y).fetch(this.options,e);return(null==e?void 0:e.throwOnError)||(t=t.catch(eR)),t}function ts(){ex(this,U,td).call(this);let e=eG(this.options.staleTime,eC(this,y));if(ew||eC(this,M).isStale||!eD(e))return;let t=eI(eC(this,M).dataUpdatedAt,e);eM(this,D,eT.setTimeout(()=>{eC(this,M).isStale||this.updateResult()},t+1))}function tl(){var e;return null!=(e="function"==typeof this.options.refetchInterval?this.options.refetchInterval(eC(this,y)):this.options.refetchInterval)&&e}function tu(e){ex(this,j,tf).call(this),eM(this,G,e),!ew&&!1!==eL(this.options.enabled,eC(this,y))&&eD(eC(this,G))&&0!==eC(this,G)&&eM(this,I,eT.setInterval(()=>{(this.options.refetchIntervalInBackground||eY.isFocused())&&ex(this,P,to).call(this)},eC(this,G)))}function tc(){ex(this,H,ts).call(this),ex(this,k,tu).call(this,ex(this,O,tl).call(this))}function td(){eC(this,D)&&(eT.clearTimeout(eC(this,D)),eM(this,D,void 0))}function tf(){eC(this,I)&&(eT.clearInterval(eC(this,I)),eM(this,I,void 0))}function th(){let e=eC(this,C).getQueryCache().build(eC(this,C),this.options);if(e===eC(this,y))return;let t=eC(this,y);eM(this,y,e),eM(this,b,e.state),this.hasListeners()&&(null==t||t.removeObserver(this),e.addObserver(this))}function tm(e){eZ.batch(()=>{e.listeners&&this.listeners.forEach(e=>{e(eC(this,M))}),eC(this,C).getQueryCache().notify({query:eC(this,y),type:"observerResultsUpdated"})})}var tp=el.createContext(void 0),tA=e=>{let{client:t,children:r}=e;return el.useEffect(()=>(t.mount(),()=>{t.unmount()}),[t]),(0,es.jsx)(tp.Provider,{value:t,children:r})},tg=el.createContext(function(){let e=!1;return{clearReset:()=>{e=!1},reset:()=>{e=!0},isReset:()=>e}}()),tv=el.createContext(!1);tv.Provider;var tB=(e,t)=>void 0===t.state.data,tC=(e,t,r)=>t.fetchOptimistic(e).catch(()=>{r.clearReset()});function ty(e,t,r){var n,i,a,o,s;let l=el.useContext(tv),u=el.useContext(tg),c=(e=>{let t=el.useContext(tp);if(e)return e;if(!t)throw Error("No QueryClient set, use QueryClientProvider to set one");return t})(r),d=c.defaultQueryOptions(e);if(null==(i=c.getDefaultOptions().queries)||null==(n=i._experimental_beforeQuery)||n.call(i,d),d._optimisticResults=l?"isRestoring":"optimistic",d.suspense){let e=e=>"static"===e?e:Math.max(null!=e?e:1e3,1e3),t=d.staleTime;d.staleTime="function"==typeof t?function(){for(var r=arguments.length,n=Array(r),i=0;i{u.clearReset()},[u]);let f=!c.getQueryCache().get(d.queryHash),[h]=el.useState(()=>new t(c,d)),m=h.getOptimisticResult(d),p=!l&&!1!==e.subscribed;if(el.useSyncExternalStore(el.useCallback(e=>{let t=p?h.subscribe(eZ.batchCalls(e)):eR;return h.updateResult(),t},[h,p]),()=>h.getCurrentResult(),()=>h.getCurrentResult()),el.useEffect(()=>{h.setOptions(d)},[d,h]),(null==d?void 0:d.suspense)&&m.isPending)throw tC(d,h,u);if((e=>{var t,r;let{result:n,errorResetBoundary:i,throwOnError:a,query:o,suspense:s}=e;return n.isError&&!i.isReset()&&!n.isFetching&&o&&(s&&void 0===n.data||(t=a,r=[n.error,o],"function"==typeof t?t(...r):!!t))})({result:m,errorResetBoundary:u,throwOnError:d.throwOnError,query:c.getQueryCache().get(d.queryHash),suspense:d.suspense}))throw m.error;if(null==(o=c.getDefaultOptions().queries)||null==(a=o._experimental_afterQuery)||a.call(o,d,m),d.experimental_prefetchInRender&&!ew&&m.isLoading&&m.isFetching&&!l){let e=f?tC(d,h,u):null==(s=c.getQueryCache().get(d.queryHash))?void 0:s.promise;null==e||e.catch(eR).finally(()=>{h.updateResult()})}return d.notifyOnChangeProps?m:h.trackResult(m)}var tb=e.i(54970),tM=e.i(12979),tx=e.i(5230),tE=e.i(16096),tF=e.i(62395),tS=e.i(75567),tT=e.i(47071),tw=e.i(79123),tR=e.i(47021),tD=e.i(48066);let tI={0:32,1:32,2:32,3:32,4:32,5:32};function tG(e){let{displacementMap:t,visibilityMask:r,textureNames:n,alphaTextures:i,detailTextureName:a,lightmap:o}=e,{debugMode:s}=(0,tw.useDebug)(),l=(0,tT.useTexture)(n.map(e=>(0,tM.terrainTextureToUrl)(e)),e=>{e.forEach(e=>(0,tS.setupColor)(e))}),u=a?(0,tM.textureToUrl)(a):null,c=(0,tT.useTexture)(null!=u?u:tM.FALLBACK_TEXTURE_URL,e=>{(0,tS.setupColor)(e)}),d=(0,el.useCallback)(e=>{!function(e){let{shader:t,baseTextures:r,alphaTextures:n,visibilityMask:i,tiling:a,debugMode:o=!1,detailTexture:s=null,lightmap:l=null}=e,u=r.length;if(r.forEach((e,r)=>{t.uniforms["albedo".concat(r)]={value:e}}),n.forEach((e,r)=>{r>0&&(t.uniforms["mask".concat(r)]={value:e})}),i&&(t.uniforms.visibilityMask={value:i}),r.forEach((e,r)=>{var n;t.uniforms["tiling".concat(r)]={value:null!=(n=a[r])?n:32}}),t.uniforms.debugMode={value:+!!o},l&&(t.uniforms.terrainLightmap={value:l}),s&&(t.uniforms.detailTexture={value:s},t.uniforms.detailTiling={value:64},t.uniforms.detailFadeDistance={value:150},t.vertexShader=t.vertexShader.replace("#include ","#include \nvarying vec3 vTerrainWorldPos;"),t.vertexShader=t.vertexShader.replace("#include ","#include \nvTerrainWorldPos = (modelMatrix * vec4(transformed, 1.0)).xyz;")),t.fragmentShader="\nuniform sampler2D albedo0;\nuniform sampler2D albedo1;\nuniform sampler2D albedo2;\nuniform sampler2D albedo3;\nuniform sampler2D albedo4;\nuniform sampler2D albedo5;\nuniform sampler2D mask1;\nuniform sampler2D mask2;\nuniform sampler2D mask3;\nuniform sampler2D mask4;\nuniform sampler2D mask5;\nuniform float tiling0;\nuniform float tiling1;\nuniform float tiling2;\nuniform float tiling3;\nuniform float tiling4;\nuniform float tiling5;\nuniform float debugMode;\n".concat(i?"uniform sampler2D visibilityMask;":"","\n").concat(l?"uniform sampler2D terrainLightmap;":"","\n").concat(s?"uniform sampler2D detailTexture;\nuniform float detailTiling;\nuniform float detailFadeDistance;\nvarying vec3 vTerrainWorldPos;":"","\n\n").concat("\nvec3 terrainLinearToSRGB(vec3 linear) {\n vec3 higher = pow(linear, vec3(1.0/2.4)) * 1.055 - 0.055;\n vec3 lower = linear * 12.92;\n return mix(lower, higher, step(vec3(0.0031308), linear));\n}\n\nvec3 terrainSRGBToLinear(vec3 srgb) {\n vec3 higher = pow((srgb + 0.055) / 1.055, vec3(2.4));\n vec3 lower = srgb / 12.92;\n return mix(lower, higher, step(vec3(0.04045), srgb));\n}\n\n// Debug grid overlay using screen-space derivatives for sharp, anti-aliased lines\n// Returns 1.0 on grid lines, 0.0 elsewhere\nfloat terrainDebugGrid(vec2 uv, float gridSize, float lineWidth) {\n vec2 scaledUV = uv * gridSize;\n vec2 grid = abs(fract(scaledUV - 0.5) - 0.5) / fwidth(scaledUV);\n float line = min(grid.x, grid.y);\n return 1.0 - min(line / lineWidth, 1.0);\n}\n","\n\n// Global variable to store shadow factor from RE_Direct for use in output calculation\nfloat terrainShadowFactor = 1.0;\n")+t.fragmentShader,i){let e="#include ";t.fragmentShader=t.fragmentShader.replace(e,"".concat(e,"\n // Early discard for invisible areas (before fog/lighting)\n float visibility = texture2D(visibilityMask, vMapUv).r;\n if (visibility < 0.5) {\n discard;\n }\n "))}t.fragmentShader=t.fragmentShader.replace("#include ","\n // Sample base albedo layers (sRGB textures auto-decoded to linear by Three.js)\n vec2 baseUv = vMapUv;\n vec3 c0 = texture2D(albedo0, baseUv * vec2(tiling0)).rgb;\n ".concat(u>1?"vec3 c1 = texture2D(albedo1, baseUv * vec2(tiling1)).rgb;":"","\n ").concat(u>2?"vec3 c2 = texture2D(albedo2, baseUv * vec2(tiling2)).rgb;":"","\n ").concat(u>3?"vec3 c3 = texture2D(albedo3, baseUv * vec2(tiling3)).rgb;":"","\n ").concat(u>4?"vec3 c4 = texture2D(albedo4, baseUv * vec2(tiling4)).rgb;":"","\n ").concat(u>5?"vec3 c5 = texture2D(albedo5, baseUv * vec2(tiling5)).rgb;":"","\n\n // Sample linear masks (use R channel)\n // Add +0.5 texel offset: Torque samples alpha at grid corners (integer indices),\n // but GPU linear filtering samples at texel centers. This offset aligns them.\n vec2 alphaUv = baseUv + vec2(0.5 / ").concat(256,".0);\n float a1 = texture2D(mask1, alphaUv).r;\n ").concat(u>1?"float a2 = texture2D(mask2, alphaUv).r;":"","\n ").concat(u>2?"float a3 = texture2D(mask3, alphaUv).r;":"","\n ").concat(u>3?"float a4 = texture2D(mask4, alphaUv).r;":"","\n ").concat(u>4?"float a5 = texture2D(mask5, alphaUv).r;":"","\n\n // Bottom-up compositing: each mask tells how much the higher layer replaces lower\n ").concat(u>1?"vec3 blended = mix(c0, c1, clamp(a1, 0.0, 1.0));":"","\n ").concat(u>2?"blended = mix(blended, c2, clamp(a2, 0.0, 1.0));":"","\n ").concat(u>3?"blended = mix(blended, c3, clamp(a3, 0.0, 1.0));":"","\n ").concat(u>4?"blended = mix(blended, c4, clamp(a4, 0.0, 1.0));":"","\n ").concat(u>5?"blended = mix(blended, c5, clamp(a5, 0.0, 1.0));":"","\n\n // Assign to diffuseColor before lighting\n vec3 textureColor = ").concat(u>1?"blended":"c0",";\n\n ").concat(s?"// Detail texture blending (Torque-style multiplicative blend)\n // Sample detail texture at high frequency tiling\n vec3 detailColor = texture2D(detailTexture, baseUv * detailTiling).rgb;\n\n // Calculate distance-based fade factor using world positions\n // Torque: distFactor = (zeroDetailDistance - distance) / zeroDetailDistance\n float distToCamera = distance(vTerrainWorldPos, cameraPosition);\n float detailFade = clamp(1.0 - distToCamera / detailFadeDistance, 0.0, 1.0);\n\n // Torque blending: dst * lerp(1.0, detailTexel, fadeFactor)\n // Detail textures are authored with bright values (~0.8 mean), not 0.5 gray\n // Direct multiplication adds subtle darkening for surface detail\n textureColor *= mix(vec3(1.0), detailColor, detailFade);":"","\n\n // Store blended texture in diffuseColor (still in linear space here)\n // We'll convert to sRGB in the output calculation\n diffuseColor.rgb = textureColor;\n")),l&&(t.fragmentShader=t.fragmentShader.replace("#include ","#include \n\n// Override RE_Direct to extract shadow factor for Torque-style gamma-space lighting\n#undef RE_Direct\nvoid RE_Direct_TerrainShadow( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n // directLight.color = sunColor * shadowFactor (shadow already applied by Three.js)\n // Extract shadow factor by comparing to original sun color\n #if ( NUM_DIR_LIGHTS > 0 )\n vec3 originalSunColor = directionalLights[0].color;\n float sunMax = max(max(originalSunColor.r, originalSunColor.g), originalSunColor.b);\n float shadowedMax = max(max(directLight.color.r, directLight.color.g), directLight.color.b);\n terrainShadowFactor = clamp(shadowedMax / max(sunMax, 0.001), 0.0, 1.0);\n #endif\n // Don't add to reflectedLight - we'll compute lighting in gamma space at output\n}\n#define RE_Direct RE_Direct_TerrainShadow\n\n"),t.fragmentShader=t.fragmentShader.replace("#include ","#include \n// Clear indirect diffuse - we'll compute ambient in gamma space\n#if defined( RE_IndirectDiffuse )\n irradiance = vec3(0.0);\n#endif\n"),t.fragmentShader=t.fragmentShader.replace("#include ","#include \n // Clear Three.js lighting - we compute everything in gamma space\n reflectedLight.directDiffuse = vec3(0.0);\n reflectedLight.indirectDiffuse = vec3(0.0);\n")),t.fragmentShader=t.fragmentShader.replace("#include ","// Torque-style terrain lighting: output = clamp(lighting × texture, 0, 1) in sRGB space\n{\n // Get texture in sRGB space (undo Three.js linear decode)\n vec3 textureSRGB = terrainLinearToSRGB(diffuseColor.rgb);\n\n ".concat(l?"\n // Sample terrain lightmap for smooth NdotL\n vec2 lightmapUv = vMapUv + vec2(0.5 / ".concat(512,".0);\n float lightmapNdotL = texture2D(terrainLightmap, lightmapUv).r;\n\n // Get sun and ambient colors from Three.js lights (these ARE sRGB values from mission file)\n // Three.js interprets them as linear, but the numerical values are preserved\n #if ( NUM_DIR_LIGHTS > 0 )\n vec3 sunColorSRGB = directionalLights[0].color;\n #else\n vec3 sunColorSRGB = vec3(0.7);\n #endif\n vec3 ambientColorSRGB = ambientLightColor;\n\n // Torque formula (terrLighting.cc:471-483):\n // lighting = ambient + NdotL * shadowFactor * sunColor\n // Clamp lighting to [0,1] before multiplying by texture\n vec3 lightingSRGB = clamp(ambientColorSRGB + lightmapNdotL * terrainShadowFactor * sunColorSRGB, 0.0, 1.0);\n "):"\n // No lightmap - use simple ambient lighting\n vec3 lightingSRGB = ambientLightColor;\n ","\n\n // Torque formula: output = clamp(lighting × texture, 0, 1) in sRGB/gamma space\n vec3 resultSRGB = clamp(lightingSRGB * textureSRGB, 0.0, 1.0);\n\n // Convert back to linear for Three.js output pipeline\n outgoingLight = terrainSRGBToLinear(resultSRGB) + totalEmissiveRadiance;\n}\n#include ")),t.fragmentShader=t.fragmentShader.replace("#include ","// Debug mode: overlay green grid matching terrain grid squares (256x256)\nif (debugMode > 0.5) {\n float gridIntensity = terrainDebugGrid(vMapUv, 256.0, 1.5);\n vec3 gridColor = vec3(0.0, 0.8, 0.4); // Green\n gl_FragColor.rgb = mix(gl_FragColor.rgb, gridColor, gridIntensity * 0.05);\n}\n\n#include ")}({shader:e,baseTextures:l,alphaTextures:i,visibilityMask:r,tiling:tI,debugMode:s,detailTexture:u?c:null,lightmap:o}),(0,tR.injectCustomFog)(e,tD.globalFogUniforms)},[l,i,r,s,c,u,o]),f="".concat(s?"debug":"normal","-").concat(u?"detail":"nodetail","-").concat(o?"lightmap":"nolightmap");return(0,es.jsx)("meshLambertMaterial",{map:t,depthWrite:!0,side:ef.FrontSide,onBeforeCompile:d},f)}function tL(e){let{displacementMap:t,visibilityMask:r,textureNames:n,alphaTextures:i,detailTextureName:a,lightmap:o}=e;return(0,es.jsx)(el.Suspense,{fallback:(0,es.jsx)("meshLambertMaterial",{color:"rgb(0, 109, 56)",wireframe:!0}),children:(0,es.jsx)(tG,{displacementMap:t,visibilityMask:r,textureNames:n,alphaTextures:i,detailTextureName:a,lightmap:o})})}let tP=(0,el.memo)(function(e){let{tileX:t,tileZ:r,blockSize:n,basePosition:i,textureNames:a,geometry:o,displacementMap:s,visibilityMask:l,alphaTextures:u,detailTextureName:c,lightmap:d,visible:f=!0}=e,h=(0,el.useMemo)(()=>[i.x+t*n+1024,0,i.z+r*n+1024],[t,r,n,i]);return(0,es.jsx)("mesh",{position:h,geometry:o,castShadow:!0,receiveShadow:!0,visible:f,children:(0,es.jsx)(tL,{displacementMap:s,visibilityMask:l,textureNames:a,alphaTextures:u,detailTextureName:c,lightmap:d})})});var tH=e.i(77482);function tO(e){return(0,tH.useRuntime)().getObjectByName(e)}function tk(e){let t=new Uint8Array(65536);for(let r of(t.fill(255),e)){let e=255&r,n=r>>8&255,i=r>>16,a=256*n;for(let r=0;r0?r:null!=(e=(0,tF.getFloat)(t,"visibleDistance"))?e:600}(),l=(0,tE.useThree)(e=>e.camera),u=(0,el.useMemo)(()=>{let[e,,t]=(0,tF.getPosition)(r);return{x:e,z:t}},[r]),c=(0,el.useMemo)(()=>{let e=(0,tF.getProperty)(r,"emptySquares");return e?e.split(" ").map(e=>parseInt(e,10)):[]},[r]),{data:d}=ty({queryKey:["terrain",n],queryFn:()=>(0,tM.loadTerrain)(n)},tt,void 0),f=(0,el.useMemo)(()=>{if(!d)return null;let e=function(e,t){let r=new ef.BufferGeometry,n=66049,i=new Float32Array(3*n),a=new Float32Array(3*n),o=new Float32Array(2*n),s=new Uint32Array(t*t*6),l=0,u=e/t;for(let r=0;r<=t;r++)for(let n=0;n<=t;n++){let s=r*(t+1)+n;i[3*s]=n*u-e/2,i[3*s+1]=e/2-r*u,i[3*s+2]=0,a[3*s]=0,a[3*s+1]=0,a[3*s+2]=1,o[2*s]=n/t,o[2*s+1]=1-r/t}for(let e=0;e(e=Math.max(0,Math.min(255,e)),t[256*(r=Math.max(0,Math.min(255,r)))+e]/65535*2048),d=(e,r)=>{let n=Math.floor(e=Math.max(0,Math.min(255,e))),i=Math.floor(r=Math.max(0,Math.min(255,r))),a=Math.min(n+1,255),o=Math.min(i+1,255),s=e-n,l=r-i,u=t[256*i+n]/65535*2048,c=t[256*i+a]/65535*2048,d=t[256*o+n]/65535*2048;return(u*(1-s)+c*s)*(1-l)+(d*(1-s)+t[256*o+a]/65535*2048*s)*l};for(let e=0;e0?(p/=B,A/=B,g/=B):(p=0,A=1,g=0),l[3*e]=p,l[3*e+1]=A,l[3*e+2]=g}n.needsUpdate=!0,a.needsUpdate=!0}(e,d.heightMap,i),e},[i,d]),h=tO("Sun"),m=(0,el.useMemo)(()=>{var e;if(!h)return new ef.Vector3(.57735,-.57735,.57735);let[t,r,n]=(null!=(e=(0,tF.getProperty)(h,"direction"))?e:"0.57735 0.57735 -0.57735").split(" ").map(e=>parseFloat(e)),i=Math.sqrt(t*t+n*n+r*r);return new ef.Vector3(t/i,n/i,r/i)},[h]),p=(0,el.useMemo)(()=>d?function(e,t,r){let n=(t,r)=>{let n=Math.max(0,Math.min(255,t)),i=Math.max(0,Math.min(255,r)),a=Math.floor(n),o=Math.floor(i),s=Math.min(a+1,255),l=Math.min(o+1,255),u=n-a,c=i-o,d=e[256*o+a]/65535,f=e[256*o+s]/65535,h=e[256*l+a]/65535;return((d*(1-u)+f*u)*(1-c)+(h*(1-u)+e[256*l+s]/65535*u)*c)*2048},i=new ef.Vector3(-t.x,-t.y,-t.z).normalize(),a=new Uint8Array(262144);for(let e=0;e<512;e++)for(let t=0;t<512;t++){let o=t/2+.25,s=e/2+.25,l=n(o,s),u=n(o-.5,s),c=n(o+.5,s),d=n(o,s-.5),f=n(o,s+.5),h=-((f-d)/1),m=-((c-u)/1),p=Math.sqrt(h*h+r*r+m*m),A=Math.max(0,h/p*i.x+r/p*i.y+m/p*i.z),g=1;A>0&&(g=function(e,t,r,n,i,a){let o=n.z/i,s=n.x/i,l=n.y,u=Math.sqrt(o*o+s*s);if(u<1e-4)return 1;let c=.5/u,d=o*c,f=s*c,h=l*c,m=e,p=t,A=r+.1;for(let e=0;e<768&&(m+=d,p+=f,A+=h,!(m<0)&&!(m>=256)&&!(p<0)&&!(p>=256)&&!(A>2048));e++)if(A{if(!d)return null;let e=function(e){let t=new Float32Array(e.length);for(let r=0;rtk(c),[c]),B=(0,el.useMemo)(()=>tk([]),[]),C=(0,el.useMemo)(()=>d?d.alphaMaps.map(e=>(0,tS.setupMask)(e)):null,[d]),y=(0,el.useMemo)(()=>{let e=2*Math.ceil(s/o)+1;return e*e-1},[s,o]),b=(0,el.useMemo)(()=>Array.from({length:y},(e,t)=>t),[y]),[M,x]=(0,el.useState)(()=>Array(y).fill(null)),E=(0,el.useRef)({xStart:0,xEnd:0,zStart:0,zEnd:0});return((0,tx.useFrame)(()=>{let e=l.position.x-u.x,t=l.position.z-u.z,r=Math.floor((e-s)/o),n=Math.ceil((e+s)/o),i=Math.floor((t-s)/o),a=Math.ceil((t+s)/o),c=E.current;if(r===c.xStart&&n===c.xEnd&&i===c.zStart&&a===c.zEnd)return;c.xStart=r,c.xEnd=n,c.zStart=i,c.zEnd=a;let d=[];for(let e=r;e{var t,r;let n=M[e];return(0,es.jsx)(tP,{tileX:null!=(t=null==n?void 0:n.tileX)?t:0,tileZ:null!=(r=null==n?void 0:n.tileZ)?r:0,blockSize:o,basePosition:u,textureNames:d.textureNames,geometry:f,displacementMap:A,visibilityMask:B,alphaTextures:C,detailTextureName:a,lightmap:p,visible:null!==n},e)})]}):null}),tU=(0,el.createContext)(null);function tj(){return(0,el.useContext)(tU)}var tJ=el;let tN=(0,tJ.createContext)(null),tK={didCatch:!1,error:null};class tQ extends tJ.Component{static getDerivedStateFromError(e){return{didCatch:!0,error:e}}resetErrorBoundary(){let{error:e}=this.state;if(null!==e){for(var t,r,n=arguments.length,i=Array(n),a=0;a0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return e.length!==t.length||e.some((e,r)=>!Object.is(e,t[r]))}(e.resetKeys,n)){var i,a;null==(i=(a=this.props).onReset)||i.call(a,{next:n,prev:e.resetKeys,reason:"keys"}),this.setState(tK)}}render(){let{children:e,fallbackRender:t,FallbackComponent:r,fallback:n}=this.props,{didCatch:i,error:a}=this.state,o=e;if(i){let e={error:a,resetErrorBoundary:this.resetErrorBoundary};if("function"==typeof t)o=t(e);else if(r)o=(0,tJ.createElement)(r,e);else if(void 0!==n)o=n;else throw a}return(0,tJ.createElement)(tN.Provider,{value:{didCatch:i,error:a,resetErrorBoundary:this.resetErrorBoundary}},o)}constructor(e){super(e),this.resetErrorBoundary=this.resetErrorBoundary.bind(this),this.state=tK}}var tW=e.i(31067),tV=ef;function tX(e,t){if(t===ef.TrianglesDrawMode)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),e;if(t!==ef.TriangleFanDrawMode&&t!==ef.TriangleStripDrawMode)return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",t),e;{let r=e.getIndex();if(null===r){let t=[],n=e.getAttribute("position");if(void 0===n)return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),e;for(let e=0;e=2.0 are supported."));return}let s=new rG(i,{path:t||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});s.fileLoader.setRequestHeader(this.requestHeader);for(let e=0;e=0&&void 0===o[t]&&console.warn('THREE.GLTFLoader: Unknown extension "'+t+'".')}}s.setExtensions(a),s.setPlugins(o),s.parse(r,n)}parseAsync(e,t){let r=this;return new Promise(function(n,i){r.parse(e,t,n,i)})}constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(e){return new t8(e)}),this.register(function(e){return new t5(e)}),this.register(function(e){return new ra(e)}),this.register(function(e){return new ro(e)}),this.register(function(e){return new rs(e)}),this.register(function(e){return new t4(e)}),this.register(function(e){return new t7(e)}),this.register(function(e){return new re(e)}),this.register(function(e){return new rt(e)}),this.register(function(e){return new t3(e)}),this.register(function(e){return new rr(e)}),this.register(function(e){return new t6(e)}),this.register(function(e){return new ri(e)}),this.register(function(e){return new rn(e)}),this.register(function(e){return new t9(e)}),this.register(function(e){return new rl(e)}),this.register(function(e){return new ru(e)})}}function t0(){let e={};return{get:function(t){return e[t]},add:function(t,r){e[t]=r},remove:function(t){delete e[t]},removeAll:function(){e={}}}}let t1={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_DISPERSION:"KHR_materials_dispersion",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_MATERIALS_BUMP:"EXT_materials_bump",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};class t9{_markDefs(){let e=this.parser,t=this.parser.json.nodes||[];for(let r=0,n=t.length;r=0))return null;else throw Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return t.loadTextureImage(e,i.source,a)}constructor(e){this.parser=e,this.name=t1.KHR_TEXTURE_BASISU}}class ro{loadTexture(e){let t=this.name,r=this.parser,n=r.json,i=n.textures[e];if(!i.extensions||!i.extensions[t])return null;let a=i.extensions[t],o=n.images[a.source],s=r.textureLoader;if(o.uri){let e=r.options.manager.getHandler(o.uri);null!==e&&(s=e)}return this.detectSupport().then(function(i){if(i)return r.loadTextureImage(e,a.source,s);if(n.extensionsRequired&&n.extensionsRequired.indexOf(t)>=0)throw Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return r.loadTexture(e)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(e){let t=new Image;t.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",t.onload=t.onerror=function(){e(1===t.height)}})),this.isSupported}constructor(e){this.parser=e,this.name=t1.EXT_TEXTURE_WEBP,this.isSupported=null}}class rs{loadTexture(e){let t=this.name,r=this.parser,n=r.json,i=n.textures[e];if(!i.extensions||!i.extensions[t])return null;let a=i.extensions[t],o=n.images[a.source],s=r.textureLoader;if(o.uri){let e=r.options.manager.getHandler(o.uri);null!==e&&(s=e)}return this.detectSupport().then(function(i){if(i)return r.loadTextureImage(e,a.source,s);if(n.extensionsRequired&&n.extensionsRequired.indexOf(t)>=0)throw Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");return r.loadTexture(e)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(e){let t=new Image;t.src="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=",t.onload=t.onerror=function(){e(1===t.height)}})),this.isSupported}constructor(e){this.parser=e,this.name=t1.EXT_TEXTURE_AVIF,this.isSupported=null}}class rl{loadBufferView(e){let t=this.parser.json,r=t.bufferViews[e];if(!r.extensions||!r.extensions[this.name])return null;{let e=r.extensions[this.name],n=this.parser.getDependency("buffer",e.buffer),i=this.parser.options.meshoptDecoder;if(!i||!i.supported)if(!(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0))return null;else throw Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return n.then(function(t){let r=e.byteOffset||0,n=e.byteLength||0,a=e.count,o=e.byteStride,s=new Uint8Array(t,r,n);return i.decodeGltfBufferAsync?i.decodeGltfBufferAsync(a,o,s,e.mode,e.filter).then(function(e){return e.buffer}):i.ready.then(function(){let t=new ArrayBuffer(a*o);return i.decodeGltfBuffer(new Uint8Array(t),a,o,s,e.mode,e.filter),t})})}}constructor(e){this.name=t1.EXT_MESHOPT_COMPRESSION,this.parser=e}}class ru{createNodeMesh(e){let t=this.parser.json,r=t.nodes[e];if(!r.extensions||!r.extensions[this.name]||void 0===r.mesh)return null;for(let e of t.meshes[r.mesh].primitives)if(e.mode!==rB.TRIANGLES&&e.mode!==rB.TRIANGLE_STRIP&&e.mode!==rB.TRIANGLE_FAN&&void 0!==e.mode)return null;let n=r.extensions[this.name].attributes,i=[],a={};for(let e in n)i.push(this.parser.getDependency("accessor",n[e]).then(t=>(a[e]=t,a[e])));return i.length<1?null:(i.push(this.parser.createNodeMesh(e)),Promise.all(i).then(e=>{let t=e.pop(),r=t.isGroup?t.children:[t],n=e[0].count,i=[];for(let e of r){let t=new tV.Matrix4,r=new tV.Vector3,o=new tV.Quaternion,s=new tV.Vector3(1,1,1),l=new tV.InstancedMesh(e.geometry,e.material,n);for(let e=0;e=152?{TEXCOORD_0:"uv",TEXCOORD_1:"uv1",TEXCOORD_2:"uv2",TEXCOORD_3:"uv3"}:{TEXCOORD_0:"uv",TEXCOORD_1:"uv2"},COLOR_0:"color",WEIGHTS_0:"skinWeight",JOINTS_0:"skinIndex"},rE={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},rF={CUBICSPLINE:void 0,LINEAR:tV.InterpolateLinear,STEP:tV.InterpolateDiscrete},rS={OPAQUE:"OPAQUE",MASK:"MASK",BLEND:"BLEND"};function rT(e,t,r){for(let n in r.extensions)void 0===e[n]&&(t.userData.gltfExtensions=t.userData.gltfExtensions||{},t.userData.gltfExtensions[n]=r.extensions[n])}function rw(e,t){void 0!==t.extras&&("object"==typeof t.extras?Object.assign(e.userData,t.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+t.extras))}function rR(e){let t="",r=Object.keys(e).sort();for(let n=0,i=r.length;n{let r=this.associations.get(e);for(let[n,a]of(null!=r&&this.associations.set(t,r),e.children.entries()))i(a,t.children[n])};return i(r,n),n.name+="_instance_"+e.uses[t]++,n}_invokeOne(e){let t=Object.values(this.plugins);t.push(this);for(let r=0;r=2&&a.setY(t,d[e*s+1]),s>=3&&a.setZ(t,d[e*s+2]),s>=4&&a.setW(t,d[e*s+3]),s>=5)throw Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}}return a})}loadTexture(e){let t=this.json,r=this.options,n=t.textures[e].source,i=t.images[n],a=this.textureLoader;if(i.uri){let e=r.manager.getHandler(i.uri);null!==e&&(a=e)}return this.loadTextureImage(e,n,a)}loadTextureImage(e,t,r){let n=this,i=this.json,a=i.textures[e],o=i.images[t],s=(o.uri||o.bufferView)+":"+a.sampler;if(this.textureCache[s])return this.textureCache[s];let l=this.loadImageSource(t,r).then(function(t){t.flipY=!1,t.name=a.name||o.name||"",""===t.name&&"string"==typeof o.uri&&!1===o.uri.startsWith("data:image/")&&(t.name=o.uri);let r=(i.samplers||{})[a.sampler]||{};return t.magFilter=ry[r.magFilter]||tV.LinearFilter,t.minFilter=ry[r.minFilter]||tV.LinearMipmapLinearFilter,t.wrapS=rb[r.wrapS]||tV.RepeatWrapping,t.wrapT=rb[r.wrapT]||tV.RepeatWrapping,n.associations.set(t,{textures:e}),t}).catch(function(){return null});return this.textureCache[s]=l,l}loadImageSource(e,t){let r=this.json,n=this.options;if(void 0!==this.sourceCache[e])return this.sourceCache[e].then(e=>e.clone());let i=r.images[e],a=self.URL||self.webkitURL,o=i.uri||"",s=!1;if(void 0!==i.bufferView)o=this.getDependency("bufferView",i.bufferView).then(function(e){s=!0;let t=new Blob([e],{type:i.mimeType});return o=a.createObjectURL(t)});else if(void 0===i.uri)throw Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");let l=Promise.resolve(o).then(function(e){return new Promise(function(r,i){let a=r;!0===t.isImageBitmapLoader&&(a=function(e){let t=new tV.Texture(e);t.needsUpdate=!0,r(t)}),t.load(tV.LoaderUtils.resolveURL(e,n.path),a,void 0,i)})}).then(function(e){var t;return!0===s&&a.revokeObjectURL(o),rw(e,i),e.userData.mimeType=i.mimeType||((t=i.uri).search(/\.jpe?g($|\?)/i)>0||0===t.search(/^data\:image\/jpeg/)?"image/jpeg":t.search(/\.webp($|\?)/i)>0||0===t.search(/^data\:image\/webp/)?"image/webp":"image/png"),e}).catch(function(e){throw console.error("THREE.GLTFLoader: Couldn't load texture",o),e});return this.sourceCache[e]=l,l}assignTexture(e,t,r,n){let i=this;return this.getDependency("texture",r.index).then(function(a){if(!a)return null;if(void 0!==r.texCoord&&r.texCoord>0&&((a=a.clone()).channel=r.texCoord),i.extensions[t1.KHR_TEXTURE_TRANSFORM]){let e=void 0!==r.extensions?r.extensions[t1.KHR_TEXTURE_TRANSFORM]:void 0;if(e){let t=i.associations.get(a);a=i.extensions[t1.KHR_TEXTURE_TRANSFORM].extendTexture(a,e),i.associations.set(a,t)}}return void 0!==n&&("number"==typeof n&&(n=3001===n?tz:tZ),"colorSpace"in a?a.colorSpace=n:a.encoding=n===tz?3001:3e3),e[t]=a,a})}assignFinalMaterial(e){let t=e.geometry,r=e.material,n=void 0===t.attributes.tangent,i=void 0!==t.attributes.color,a=void 0===t.attributes.normal;if(e.isPoints){let e="PointsMaterial:"+r.uuid,t=this.cache.get(e);t||(t=new tV.PointsMaterial,tV.Material.prototype.copy.call(t,r),t.color.copy(r.color),t.map=r.map,t.sizeAttenuation=!1,this.cache.add(e,t)),r=t}else if(e.isLine){let e="LineBasicMaterial:"+r.uuid,t=this.cache.get(e);t||(t=new tV.LineBasicMaterial,tV.Material.prototype.copy.call(t,r),t.color.copy(r.color),t.map=r.map,this.cache.add(e,t)),r=t}if(n||i||a){let e="ClonedMaterial:"+r.uuid+":";n&&(e+="derivative-tangents:"),i&&(e+="vertex-colors:"),a&&(e+="flat-shading:");let t=this.cache.get(e);t||(t=r.clone(),i&&(t.vertexColors=!0),a&&(t.flatShading=!0),n&&(t.normalScale&&(t.normalScale.y*=-1),t.clearcoatNormalScale&&(t.clearcoatNormalScale.y*=-1)),this.cache.add(e,t),this.associations.set(t,this.associations.get(r))),r=t}e.material=r}getMaterialType(){return tV.MeshStandardMaterial}loadMaterial(e){let t,r=this,n=this.json,i=this.extensions,a=n.materials[e],o={},s=a.extensions||{},l=[];if(s[t1.KHR_MATERIALS_UNLIT]){let e=i[t1.KHR_MATERIALS_UNLIT];t=e.getMaterialType(),l.push(e.extendParams(o,a,r))}else{let n=a.pbrMetallicRoughness||{};if(o.color=new tV.Color(1,1,1),o.opacity=1,Array.isArray(n.baseColorFactor)){let e=n.baseColorFactor;o.color.setRGB(e[0],e[1],e[2],tZ),o.opacity=e[3]}void 0!==n.baseColorTexture&&l.push(r.assignTexture(o,"map",n.baseColorTexture,tz)),o.metalness=void 0!==n.metallicFactor?n.metallicFactor:1,o.roughness=void 0!==n.roughnessFactor?n.roughnessFactor:1,void 0!==n.metallicRoughnessTexture&&(l.push(r.assignTexture(o,"metalnessMap",n.metallicRoughnessTexture)),l.push(r.assignTexture(o,"roughnessMap",n.metallicRoughnessTexture))),t=this._invokeOne(function(t){return t.getMaterialType&&t.getMaterialType(e)}),l.push(Promise.all(this._invokeAll(function(t){return t.extendMaterialParams&&t.extendMaterialParams(e,o)})))}!0===a.doubleSided&&(o.side=tV.DoubleSide);let u=a.alphaMode||rS.OPAQUE;if(u===rS.BLEND?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,u===rS.MASK&&(o.alphaTest=void 0!==a.alphaCutoff?a.alphaCutoff:.5)),void 0!==a.normalTexture&&t!==tV.MeshBasicMaterial&&(l.push(r.assignTexture(o,"normalMap",a.normalTexture)),o.normalScale=new tV.Vector2(1,1),void 0!==a.normalTexture.scale)){let e=a.normalTexture.scale;o.normalScale.set(e,e)}if(void 0!==a.occlusionTexture&&t!==tV.MeshBasicMaterial&&(l.push(r.assignTexture(o,"aoMap",a.occlusionTexture)),void 0!==a.occlusionTexture.strength&&(o.aoMapIntensity=a.occlusionTexture.strength)),void 0!==a.emissiveFactor&&t!==tV.MeshBasicMaterial){let e=a.emissiveFactor;o.emissive=new tV.Color().setRGB(e[0],e[1],e[2],tZ)}return void 0!==a.emissiveTexture&&t!==tV.MeshBasicMaterial&&l.push(r.assignTexture(o,"emissiveMap",a.emissiveTexture,tz)),Promise.all(l).then(function(){let n=new t(o);return a.name&&(n.name=a.name),rw(n,a),r.associations.set(n,{materials:e}),a.extensions&&rT(i,n,a),n})}createUniqueName(e){let t=tV.PropertyBinding.sanitizeNodeName(e||"");return t in this.nodeNamesUsed?t+"_"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){let t=this,r=this.extensions,n=this.primitiveCache,i=[];for(let a=0,o=e.length;a0&&function(e,t){if(e.updateMorphTargets(),void 0!==t.weights)for(let r=0,n=t.weights.length;r1?new tV.Group:1===t.length?t[0]:new tV.Object3D)!==t[0])for(let e=0,r=t.length;e{let t=new Map;for(let[e,r]of n.associations)(e instanceof tV.Material||e instanceof tV.Texture)&&t.set(e,r);return e.traverse(e=>{let r=n.associations.get(e);null!=r&&t.set(e,r)}),t})(i),i})}_createAnimationTracks(e,t,r,n,i){let a,o=[],s=e.name?e.name:e.uuid,l=[];switch(rE[i.path]===rE.weights?e.traverse(function(e){e.morphTargetInfluences&&l.push(e.name?e.name:e.uuid)}):l.push(s),rE[i.path]){case rE.weights:a=tV.NumberKeyframeTrack;break;case rE.rotation:a=tV.QuaternionKeyframeTrack;break;case rE.position:case rE.scale:a=tV.VectorKeyframeTrack;break;default:a=1===r.itemSize?tV.NumberKeyframeTrack:tV.VectorKeyframeTrack}let u=void 0!==n.interpolation?rF[n.interpolation]:tV.InterpolateLinear,c=this._getArrayFromAccessor(r);for(let e=0,r=l.length;e-1)?navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1]:-1),"undefined"==typeof createImageBitmap||r||n&&i<98?this.textureLoader=new tV.TextureLoader(this.options.manager):this.textureLoader=new tV.ImageBitmapLoader(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new tV.FileLoader(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),"use-credentials"===this.options.crossOrigin&&this.fileLoader.setWithCredentials(!0)}}function rL(e,t,r){let n=t.attributes,i=[];for(let t in n){let a=rx[t]||t.toLowerCase();a in e.attributes||i.push(function(t,n){return r.getDependency("accessor",t).then(function(t){e.setAttribute(n,t)})}(n[t],a))}if(void 0!==t.indices&&!e.index){let n=r.getDependency("accessor",t.indices).then(function(t){e.setIndex(t)});i.push(n)}return rw(e,t),!function(e,t,r){let n=t.attributes,i=new tV.Box3;if(void 0===n.POSITION)return;{let e=r.json.accessors[n.POSITION],t=e.min,a=e.max;if(void 0===t||void 0===a)return console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");if(i.set(new tV.Vector3(t[0],t[1],t[2]),new tV.Vector3(a[0],a[1],a[2])),e.normalized){let t=rD(rC[e.componentType]);i.min.multiplyScalar(t),i.max.multiplyScalar(t)}}let a=t.targets;if(void 0!==a){let e=new tV.Vector3,t=new tV.Vector3;for(let n=0,i=a.length;n{let r={attributeIDs:this.defaultAttributeIDs,attributeTypes:this.defaultAttributeTypes,useUniqueIDs:!1};this.decodeGeometry(e,r).then(t).catch(n)},r,n)}decodeDracoFile(e,t,r,n){let i={attributeIDs:r||this.defaultAttributeIDs,attributeTypes:n||this.defaultAttributeTypes,useUniqueIDs:!!r};this.decodeGeometry(e,i).then(t)}decodeGeometry(e,t){let r;for(let e in t.attributeTypes){let r=t.attributeTypes[e];void 0!==r.BYTES_PER_ELEMENT&&(t.attributeTypes[e]=r.name)}let n=JSON.stringify(t);if(rH.has(e)){let t=rH.get(e);if(t.key===n)return t.promise;if(0===e.byteLength)throw Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let i=this.workerNextTaskID++,a=e.byteLength,o=this._getWorker(i,a).then(n=>(r=n,new Promise((n,a)=>{r._callbacks[i]={resolve:n,reject:a},r.postMessage({type:"decode",id:i,taskConfig:t,buffer:e},[e])}))).then(e=>this._createGeometry(e.geometry));return o.catch(()=>!0).then(()=>{r&&i&&this._releaseTask(r,i)}),rH.set(e,{key:n,promise:o}),o}_createGeometry(e){let t=new rP.BufferGeometry;e.index&&t.setIndex(new rP.BufferAttribute(e.index.array,1));for(let r=0;r{r.load(e,t,void 0,n)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;let e="object"!=typeof WebAssembly||"js"===this.decoderConfig.type,t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then(t=>{let r=t[0];e||(this.decoderConfig.wasmBinary=t[1]);let n=rk.toString(),i=["/* draco decoder */",r,"\n/* worker */",n.substring(n.indexOf("{")+1,n.lastIndexOf("}"))].join("\n");this.workerSourceURL=URL.createObjectURL(new Blob([i]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.lengtht._taskLoad?-1:1});let r=this.workerPool[this.workerPool.length-1];return r._taskCosts[e]=t,r._taskLoad+=t,r})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log("Task load: ",this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e{let t=e.draco,r=new t.Decoder,o=new t.DecoderBuffer;o.Init(new Int8Array(i),i.byteLength);try{let e=function(e,t,r,n){let i,a,o=n.attributeIDs,s=n.attributeTypes,l=t.GetEncodedGeometryType(r);if(l===e.TRIANGULAR_MESH)i=new e.Mesh,a=t.DecodeBufferToMesh(r,i);else if(l===e.POINT_CLOUD)i=new e.PointCloud,a=t.DecodeBufferToPointCloud(r,i);else throw Error("THREE.DRACOLoader: Unexpected geometry type.");if(!a.ok()||0===i.ptr)throw Error("THREE.DRACOLoader: Decoding failed: "+a.error_msg());let u={index:null,attributes:[]};for(let r in o){let a,l,c=self[s[r]];if(n.useUniqueIDs)l=o[r],a=t.GetAttributeByUniqueId(i,l);else{if(-1===(l=t.GetAttributeId(i,e[o[r]])))continue;a=t.GetAttribute(i,l)}u.attributes.push(function(e,t,r,n,i,a){let o=a.num_components(),s=r.num_points()*o,l=s*i.BYTES_PER_ELEMENT,u=function(e,t){switch(t){case Float32Array:return e.DT_FLOAT32;case Int8Array:return e.DT_INT8;case Int16Array:return e.DT_INT16;case Int32Array:return e.DT_INT32;case Uint8Array:return e.DT_UINT8;case Uint16Array:return e.DT_UINT16;case Uint32Array:return e.DT_UINT32}}(e,i),c=e._malloc(l);t.GetAttributeDataArrayForAllPoints(r,a,u,l,c);let d=new i(e.HEAPF32.buffer,c,s).slice();return e._free(c),{name:n,array:d,itemSize:o}}(e,t,i,r,c,a))}return l===e.TRIANGULAR_MESH&&(u.index=function(e,t,r){let n=3*r.num_faces(),i=4*n,a=e._malloc(i);t.GetTrianglesUInt32Array(r,i,a);let o=new Uint32Array(e.HEAPF32.buffer,a,n).slice();return e._free(a),{array:o,itemSize:1}}(e,t,i)),e.destroy(i),u}(t,r,o,a),i=e.attributes.map(e=>e.array.buffer);e.index&&i.push(e.index.array.buffer),self.postMessage({type:"decode",id:n.id,geometry:e},i)}catch(e){console.error(e),self.postMessage({type:"error",id:n.id,error:e.message})}finally{t.destroy(o),t.destroy(r)}})}}}var r_=e.i(80520);let rU={clone:function(e){let t=new Map,r=new Map,n=e.clone();return function e(t,r,n){n(t,r);for(let i=0;i{let{isChild:r=!1,object:n,children:i,deep:a,castShadow:o,receiveShadow:s,inject:l,keys:u,...c}=e,d={keys:u,deep:a,inject:l,castShadow:o,receiveShadow:s};if(Array.isArray(n=el.useMemo(()=>{if(!1===r&&!Array.isArray(n)){let e=!1;if(n.traverse(t=>{t.isSkinnedMesh&&(e=!0)}),e)return rU.clone(n)}return n},[n,r])))return el.createElement("group",(0,tW.default)({},c,{ref:t}),n.map(e=>el.createElement(rj,(0,tW.default)({key:e.uuid,object:e},d))),i);let{children:f,...h}=function(e,t){let{keys:r=["near","far","color","distance","decay","penumbra","angle","intensity","skeleton","visible","castShadow","receiveShadow","morphTargetDictionary","morphTargetInfluences","name","geometry","material","position","rotation","scale","up","userData","bindMode","bindMatrix","bindMatrixInverse","skeleton"],deep:n,inject:i,castShadow:a,receiveShadow:o}=t,s={};for(let t of r)s[t]=e[t];return n&&(s.geometry&&"materialsOnly"!==n&&(s.geometry=s.geometry.clone()),s.material&&"geometriesOnly"!==n&&(s.material=s.material.clone())),i&&(s="function"==typeof i?{...s,children:i(e)}:el.isValidElement(i)?{...s,children:i}:{...s,...i}),e instanceof ef.Mesh&&(a&&(s.castShadow=!0),o&&(s.receiveShadow=!0)),s}(n,d),m=n.type[0].toLowerCase()+n.type.slice(1);return el.createElement(m,(0,tW.default)({},h,c,{ref:t}),n.children.map(e=>"Bone"===e.type?el.createElement("primitive",(0,tW.default)({key:e.uuid,object:e},d)):el.createElement(rj,(0,tW.default)({key:e.uuid,object:e},d,{isChild:!0}))),i,f)}),rJ=null,rN="https://www.gstatic.com/draco/versioned/decoders/1.5.5/";function rK(){let e=!(arguments.length>0)||void 0===arguments[0]||arguments[0],r=!(arguments.length>1)||void 0===arguments[1]||arguments[1],n=arguments.length>2?arguments[2]:void 0;return i=>{n&&n(i),e&&(rJ||(rJ=new rO),rJ.setDecoderPath("string"==typeof e?e:rN),i.setDRACOLoader(rJ)),r&&i.setMeshoptDecoder((()=>{let e;if(t)return t;let r=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,3,2,0,0,5,3,1,0,1,12,1,0,10,22,2,12,0,65,0,65,0,65,0,252,10,0,0,11,7,0,65,0,253,15,26,11]),n=new Uint8Array([32,0,65,253,3,1,2,34,4,106,6,5,11,8,7,20,13,33,12,16,128,9,116,64,19,113,127,15,10,21,22,14,255,66,24,54,136,107,18,23,192,26,114,118,132,17,77,101,130,144,27,87,131,44,45,74,156,154,70,167]);if("object"!=typeof WebAssembly)return{supported:!1};let i="B9h9z9tFBBBF8fL9gBB9gLaaaaaFa9gEaaaB9gFaFa9gEaaaFaEMcBFFFGGGEIIILF9wFFFLEFBFKNFaFCx/IFMO/LFVK9tv9t9vq95GBt9f9f939h9z9t9f9j9h9s9s9f9jW9vq9zBBp9tv9z9o9v9wW9f9kv9j9v9kv9WvqWv94h919m9mvqBF8Z9tv9z9o9v9wW9f9kv9j9v9kv9J9u9kv94h919m9mvqBGy9tv9z9o9v9wW9f9kv9j9v9kv9J9u9kv949TvZ91v9u9jvBEn9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9P9jWBIi9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9R919hWBLn9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9F949wBKI9z9iqlBOc+x8ycGBM/qQFTa8jUUUUBCU/EBlHL8kUUUUBC9+RKGXAGCFJAI9LQBCaRKAE2BBC+gF9HQBALAEAIJHOAGlAGTkUUUBRNCUoBAG9uC/wgBZHKCUGAKCUG9JyRVAECFJRICBRcGXEXAcAF9PQFAVAFAclAcAVJAF9JyRMGXGXAG9FQBAMCbJHKC9wZRSAKCIrCEJCGrRQANCUGJRfCBRbAIRTEXGXAOATlAQ9PQBCBRISEMATAQJRIGXAS9FQBCBRtCBREEXGXAOAIlCi9PQBCBRISLMANCU/CBJAEJRKGXGXGXGXGXATAECKrJ2BBAtCKZrCEZfIBFGEBMAKhB83EBAKCNJhB83EBSEMAKAI2BIAI2BBHmCKrHYAYCE6HYy86BBAKCFJAICIJAYJHY2BBAmCIrCEZHPAPCE6HPy86BBAKCGJAYAPJHY2BBAmCGrCEZHPAPCE6HPy86BBAKCEJAYAPJHY2BBAmCEZHmAmCE6Hmy86BBAKCIJAYAmJHY2BBAI2BFHmCKrHPAPCE6HPy86BBAKCLJAYAPJHY2BBAmCIrCEZHPAPCE6HPy86BBAKCKJAYAPJHY2BBAmCGrCEZHPAPCE6HPy86BBAKCOJAYAPJHY2BBAmCEZHmAmCE6Hmy86BBAKCNJAYAmJHY2BBAI2BGHmCKrHPAPCE6HPy86BBAKCVJAYAPJHY2BBAmCIrCEZHPAPCE6HPy86BBAKCcJAYAPJHY2BBAmCGrCEZHPAPCE6HPy86BBAKCMJAYAPJHY2BBAmCEZHmAmCE6Hmy86BBAKCSJAYAmJHm2BBAI2BEHICKrHYAYCE6HYy86BBAKCQJAmAYJHm2BBAICIrCEZHYAYCE6HYy86BBAKCfJAmAYJHm2BBAICGrCEZHYAYCE6HYy86BBAKCbJAmAYJHK2BBAICEZHIAICE6HIy86BBAKAIJRISGMAKAI2BNAI2BBHmCIrHYAYCb6HYy86BBAKCFJAICNJAYJHY2BBAmCbZHmAmCb6Hmy86BBAKCGJAYAmJHm2BBAI2BFHYCIrHPAPCb6HPy86BBAKCEJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCIJAmAYJHm2BBAI2BGHYCIrHPAPCb6HPy86BBAKCLJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCKJAmAYJHm2BBAI2BEHYCIrHPAPCb6HPy86BBAKCOJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCNJAmAYJHm2BBAI2BIHYCIrHPAPCb6HPy86BBAKCVJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCcJAmAYJHm2BBAI2BLHYCIrHPAPCb6HPy86BBAKCMJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCSJAmAYJHm2BBAI2BKHYCIrHPAPCb6HPy86BBAKCQJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCfJAmAYJHm2BBAI2BOHICIrHYAYCb6HYy86BBAKCbJAmAYJHK2BBAICbZHIAICb6HIy86BBAKAIJRISFMAKAI8pBB83BBAKCNJAICNJ8pBB83BBAICTJRIMAtCGJRtAECTJHEAS9JQBMMGXAIQBCBRISEMGXAM9FQBANAbJ2BBRtCBRKAfREEXAEANCU/CBJAKJ2BBHTCFrCBATCFZl9zAtJHt86BBAEAGJREAKCFJHKAM9HQBMMAfCFJRfAIRTAbCFJHbAG9HQBMMABAcAG9sJANCUGJAMAG9sTkUUUBpANANCUGJAMCaJAG9sJAGTkUUUBpMAMCBAIyAcJRcAIQBMC9+RKSFMCBC99AOAIlAGCAAGCA9Ly6yRKMALCU/EBJ8kUUUUBAKM+OmFTa8jUUUUBCoFlHL8kUUUUBC9+RKGXAFCE9uHOCtJAI9LQBCaRKAE2BBHNC/wFZC/gF9HQBANCbZHVCF9LQBALCoBJCgFCUFT+JUUUBpALC84Jha83EBALC8wJha83EBALC8oJha83EBALCAJha83EBALCiJha83EBALCTJha83EBALha83ENALha83EBAEAIJC9wJRcAECFJHNAOJRMGXAF9FQBCQCbAVCF6yRSABRECBRVCBRQCBRfCBRICBRKEXGXAMAcuQBC9+RKSEMGXGXAN2BBHOC/vF9LQBALCoBJAOCIrCa9zAKJCbZCEWJHb8oGIRTAb8oGBRtGXAOCbZHbAS9PQBALAOCa9zAIJCbZCGWJ8oGBAVAbyROAb9FRbGXGXAGCG9HQBABAt87FBABCIJAO87FBABCGJAT87FBSFMAEAtjGBAECNJAOjGBAECIJATjGBMAVAbJRVALCoBJAKCEWJHmAOjGBAmATjGIALAICGWJAOjGBALCoBJAKCFJCbZHKCEWJHTAtjGBATAOjGIAIAbJRIAKCFJRKSGMGXGXAbCb6QBAQAbJAbC989zJCFJRQSFMAM1BBHbCgFZROGXGXAbCa9MQBAMCFJRMSFMAM1BFHbCgBZCOWAOCgBZqROGXAbCa9MQBAMCGJRMSFMAM1BGHbCgBZCfWAOqROGXAbCa9MQBAMCEJRMSFMAM1BEHbCgBZCdWAOqROGXAbCa9MQBAMCIJRMSFMAM2BIC8cWAOqROAMCLJRMMAOCFrCBAOCFZl9zAQJRQMGXGXAGCG9HQBABAt87FBABCIJAQ87FBABCGJAT87FBSFMAEAtjGBAECNJAQjGBAECIJATjGBMALCoBJAKCEWJHOAQjGBAOATjGIALAICGWJAQjGBALCoBJAKCFJCbZHKCEWJHOAtjGBAOAQjGIAICFJRIAKCFJRKSFMGXAOCDF9LQBALAIAcAOCbZJ2BBHbCIrHTlCbZCGWJ8oGBAVCFJHtATyROALAIAblCbZCGWJ8oGBAtAT9FHmJHtAbCbZHTyRbAT9FRTGXGXAGCG9HQBABAV87FBABCIJAb87FBABCGJAO87FBSFMAEAVjGBAECNJAbjGBAECIJAOjGBMALAICGWJAVjGBALCoBJAKCEWJHYAOjGBAYAVjGIALAICFJHICbZCGWJAOjGBALCoBJAKCFJCbZCEWJHYAbjGBAYAOjGIALAIAmJCbZHICGWJAbjGBALCoBJAKCGJCbZHKCEWJHOAVjGBAOAbjGIAKCFJRKAIATJRIAtATJRVSFMAVCBAM2BBHYyHTAOC/+F6HPJROAYCbZRtGXGXAYCIrHmQBAOCFJRbSFMAORbALAIAmlCbZCGWJ8oGBROMGXGXAtQBAbCFJRVSFMAbRVALAIAYlCbZCGWJ8oGBRbMGXGXAP9FQBAMCFJRYSFMAM1BFHYCgFZRTGXGXAYCa9MQBAMCGJRYSFMAM1BGHYCgBZCOWATCgBZqRTGXAYCa9MQBAMCEJRYSFMAM1BEHYCgBZCfWATqRTGXAYCa9MQBAMCIJRYSFMAM1BIHYCgBZCdWATqRTGXAYCa9MQBAMCLJRYSFMAMCKJRYAM2BLC8cWATqRTMATCFrCBATCFZl9zAQJHQRTMGXGXAmCb6QBAYRPSFMAY1BBHMCgFZROGXGXAMCa9MQBAYCFJRPSFMAY1BFHMCgBZCOWAOCgBZqROGXAMCa9MQBAYCGJRPSFMAY1BGHMCgBZCfWAOqROGXAMCa9MQBAYCEJRPSFMAY1BEHMCgBZCdWAOqROGXAMCa9MQBAYCIJRPSFMAYCLJRPAY2BIC8cWAOqROMAOCFrCBAOCFZl9zAQJHQROMGXGXAtCb6QBAPRMSFMAP1BBHMCgFZRbGXGXAMCa9MQBAPCFJRMSFMAP1BFHMCgBZCOWAbCgBZqRbGXAMCa9MQBAPCGJRMSFMAP1BGHMCgBZCfWAbqRbGXAMCa9MQBAPCEJRMSFMAP1BEHMCgBZCdWAbqRbGXAMCa9MQBAPCIJRMSFMAPCLJRMAP2BIC8cWAbqRbMAbCFrCBAbCFZl9zAQJHQRbMGXGXAGCG9HQBABAT87FBABCIJAb87FBABCGJAO87FBSFMAEATjGBAECNJAbjGBAECIJAOjGBMALCoBJAKCEWJHYAOjGBAYATjGIALAICGWJATjGBALCoBJAKCFJCbZCEWJHYAbjGBAYAOjGIALAICFJHICbZCGWJAOjGBALCoBJAKCGJCbZCEWJHOATjGBAOAbjGIALAIAm9FAmCb6qJHICbZCGWJAbjGBAIAt9FAtCb6qJRIAKCEJRKMANCFJRNABCKJRBAECSJREAKCbZRKAICbZRIAfCEJHfAF9JQBMMCBC99AMAc6yRKMALCoFJ8kUUUUBAKM/tIFGa8jUUUUBCTlRLC9+RKGXAFCLJAI9LQBCaRKAE2BBC/+FZC/QF9HQBALhB83ENAECFJRKAEAIJC98JREGXAF9FQBGXAGCG6QBEXGXAKAE9JQBC9+bMAK1BBHGCgFZRIGXGXAGCa9MQBAKCFJRKSFMAK1BFHGCgBZCOWAICgBZqRIGXAGCa9MQBAKCGJRKSFMAK1BGHGCgBZCfWAIqRIGXAGCa9MQBAKCEJRKSFMAK1BEHGCgBZCdWAIqRIGXAGCa9MQBAKCIJRKSFMAK2BIC8cWAIqRIAKCLJRKMALCNJAICFZCGWqHGAICGrCBAICFrCFZl9zAG8oGBJHIjGBABAIjGBABCIJRBAFCaJHFQBSGMMEXGXAKAE9JQBC9+bMAK1BBHGCgFZRIGXGXAGCa9MQBAKCFJRKSFMAK1BFHGCgBZCOWAICgBZqRIGXAGCa9MQBAKCGJRKSFMAK1BGHGCgBZCfWAIqRIGXAGCa9MQBAKCEJRKSFMAK1BEHGCgBZCdWAIqRIGXAGCa9MQBAKCIJRKSFMAK2BIC8cWAIqRIAKCLJRKMABAICGrCBAICFrCFZl9zALCNJAICFZCGWqHI8oGBJHG87FBAIAGjGBABCGJRBAFCaJHFQBMMCBC99AKAE6yRKMAKM+lLKFaF99GaG99FaG99GXGXAGCI9HQBAF9FQFEXGXGX9DBBB8/9DBBB+/ABCGJHG1BB+yAB1BBHE+yHI+L+TABCFJHL1BBHK+yHO+L+THN9DBBBB9gHVyAN9DBB/+hANAN+U9DBBBBANAVyHcAc+MHMAECa3yAI+SHIAI+UAcAMAKCa3yAO+SHcAc+U+S+S+R+VHO+U+SHN+L9DBBB9P9d9FQBAN+oRESFMCUUUU94REMAGAE86BBGXGX9DBBB8/9DBBB+/Ac9DBBBB9gyAcAO+U+SHN+L9DBBB9P9d9FQBAN+oRGSFMCUUUU94RGMALAG86BBGXGX9DBBB8/9DBBB+/AI9DBBBB9gyAIAO+U+SHN+L9DBBB9P9d9FQBAN+oRGSFMCUUUU94RGMABAG86BBABCIJRBAFCaJHFQBSGMMAF9FQBEXGXGX9DBBB8/9DBBB+/ABCIJHG8uFB+yAB8uFBHE+yHI+L+TABCGJHL8uFBHK+yHO+L+THN9DBBBB9gHVyAN9DB/+g6ANAN+U9DBBBBANAVyHcAc+MHMAECa3yAI+SHIAI+UAcAMAKCa3yAO+SHcAc+U+S+S+R+VHO+U+SHN+L9DBBB9P9d9FQBAN+oRESFMCUUUU94REMAGAE87FBGXGX9DBBB8/9DBBB+/Ac9DBBBB9gyAcAO+U+SHN+L9DBBB9P9d9FQBAN+oRGSFMCUUUU94RGMALAG87FBGXGX9DBBB8/9DBBB+/AI9DBBBB9gyAIAO+U+SHN+L9DBBB9P9d9FQBAN+oRGSFMCUUUU94RGMABAG87FBABCNJRBAFCaJHFQBMMM/SEIEaE99EaF99GXAF9FQBCBREABRIEXGXGX9D/zI818/AICKJ8uFBHLCEq+y+VHKAI8uFB+y+UHO9DB/+g6+U9DBBB8/9DBBB+/AO9DBBBB9gy+SHN+L9DBBB9P9d9FQBAN+oRVSFMCUUUU94RVMAICIJ8uFBRcAICGJ8uFBRMABALCFJCEZAEqCFWJAV87FBGXGXAKAM+y+UHN9DB/+g6+U9DBBB8/9DBBB+/AN9DBBBB9gy+SHS+L9DBBB9P9d9FQBAS+oRMSFMCUUUU94RMMABALCGJCEZAEqCFWJAM87FBGXGXAKAc+y+UHK9DB/+g6+U9DBBB8/9DBBB+/AK9DBBBB9gy+SHS+L9DBBB9P9d9FQBAS+oRcSFMCUUUU94RcMABALCaJCEZAEqCFWJAc87FBGXGX9DBBU8/AOAO+U+TANAN+U+TAKAK+U+THO9DBBBBAO9DBBBB9gy+R9DB/+g6+U9DBBB8/+SHO+L9DBBB9P9d9FQBAO+oRcSFMCUUUU94RcMABALCEZAEqCFWJAc87FBAICNJRIAECIJREAFCaJHFQBMMM9JBGXAGCGrAF9sHF9FQBEXABAB8oGBHGCNWCN91+yAGCi91CnWCUUU/8EJ+++U84GBABCIJRBAFCaJHFQBMMM9TFEaCBCB8oGUkUUBHFABCEJC98ZJHBjGUkUUBGXGXAB8/BCTWHGuQBCaREABAGlCggEJCTrXBCa6QFMAFREMAEM/lFFFaGXGXAFABqCEZ9FQBABRESFMGXGXAGCT9PQBABRESFMABREEXAEAF8oGBjGBAECIJAFCIJ8oGBjGBAECNJAFCNJ8oGBjGBAECSJAFCSJ8oGBjGBAECTJREAFCTJRFAGC9wJHGCb9LQBMMAGCI9JQBEXAEAF8oGBjGBAFCIJRFAECIJREAGC98JHGCE9LQBMMGXAG9FQBEXAEAF2BB86BBAECFJREAFCFJRFAGCaJHGQBMMABMoFFGaGXGXABCEZ9FQBABRESFMAFCgFZC+BwsN9sRIGXGXAGCT9PQBABRESFMABREEXAEAIjGBAECSJAIjGBAECNJAIjGBAECIJAIjGBAECTJREAGC9wJHGCb9LQBMMAGCI9JQBEXAEAIjGBAECIJREAGC98JHGCE9LQBMMGXAG9FQBEXAEAF86BBAECFJREAGCaJHGQBMMABMMMFBCUNMIT9kBB";WebAssembly.validate(r)&&(i="B9h9z9tFBBBFiI9gBB9gLaaaaaFa9gEaaaB9gFaFaEMcBBFBFFGGGEILF9wFFFLEFBFKNFaFCx/aFMO/LFVK9tv9t9vq95GBt9f9f939h9z9t9f9j9h9s9s9f9jW9vq9zBBp9tv9z9o9v9wW9f9kv9j9v9kv9WvqWv94h919m9mvqBG8Z9tv9z9o9v9wW9f9kv9j9v9kv9J9u9kv94h919m9mvqBIy9tv9z9o9v9wW9f9kv9j9v9kv9J9u9kv949TvZ91v9u9jvBLn9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9P9jWBKi9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9R919hWBOn9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9F949wBNI9z9iqlBVc+N9IcIBTEM9+FLa8jUUUUBCTlRBCBRFEXCBRGCBREEXABCNJAGJAECUaAFAGrCFZHIy86BBAEAIJREAGCFJHGCN9HQBMAFCx+YUUBJAE86BBAFCEWCxkUUBJAB8pEN83EBAFCFJHFCUG9HQBMMk8lLbaE97F9+FaL978jUUUUBCU/KBlHL8kUUUUBC9+RKGXAGCFJAI9LQBCaRKAE2BBC+gF9HQBALAEAIJHOAGlAG/8cBBCUoBAG9uC/wgBZHKCUGAKCUG9JyRNAECFJRKCBRVGXEXAVAF9PQFANAFAVlAVANJAF9JyRcGXGXAG9FQBAcCbJHIC9wZHMCE9sRSAMCFWRQAICIrCEJCGrRfCBRbEXAKRTCBRtGXEXGXAOATlAf9PQBCBRKSLMALCU/CBJAtAM9sJRmATAfJRKCBREGXAMCoB9JQBAOAKlC/gB9JQBCBRIEXAmAIJREGXGXGXGXGXATAICKrJ2BBHYCEZfIBFGEBMAECBDtDMIBSEMAEAKDBBIAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnHPCGD+MFAPDQBTFtGmEYIPLdKeOnC0+G+MiDtD9OHdCEDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIBAKCIJAeDeBJAiCx+YUUBJ2BBJRKSGMAEAKDBBNAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnC+P+e+8/4BDtD9OHdCbDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIBAKCNJAeDeBJAiCx+YUUBJ2BBJRKSFMAEAKDBBBDMIBAKCTJRKMGXGXGXGXGXAYCGrCEZfIBFGEBMAECBDtDMITSEMAEAKDBBIAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnHPCGD+MFAPDQBTFtGmEYIPLdKeOnC0+G+MiDtD9OHdCEDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMITAKCIJAeDeBJAiCx+YUUBJ2BBJRKSGMAEAKDBBNAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnC+P+e+8/4BDtD9OHdCbDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMITAKCNJAeDeBJAiCx+YUUBJ2BBJRKSFMAEAKDBBBDMITAKCTJRKMGXGXGXGXGXAYCIrCEZfIBFGEBMAECBDtDMIASEMAEAKDBBIAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnHPCGD+MFAPDQBTFtGmEYIPLdKeOnC0+G+MiDtD9OHdCEDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIAAKCIJAeDeBJAiCx+YUUBJ2BBJRKSGMAEAKDBBNAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnC+P+e+8/4BDtD9OHdCbDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIAAKCNJAeDeBJAiCx+YUUBJ2BBJRKSFMAEAKDBBBDMIAAKCTJRKMGXGXGXGXGXAYCKrfIBFGEBMAECBDtDMI8wSEMAEAKDBBIAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnHPCGD+MFAPDQBTFtGmEYIPLdKeOnC0+G+MiDtD9OHdCEDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHYCEWCxkUUBJDBEBAYCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHYCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMI8wAKCIJAeDeBJAYCx+YUUBJ2BBJRKSGMAEAKDBBNAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnC+P+e+8/4BDtD9OHdCbDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHYCEWCxkUUBJDBEBAYCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHYCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMI8wAKCNJAeDeBJAYCx+YUUBJ2BBJRKSFMAEAKDBBBDMI8wAKCTJRKMAICoBJREAICUFJAM9LQFAERIAOAKlC/fB9LQBMMGXAEAM9PQBAECErRIEXGXAOAKlCi9PQBCBRKSOMAmAEJRYGXGXGXGXGXATAECKrJ2BBAICKZrCEZfIBFGEBMAYCBDtDMIBSEMAYAKDBBIAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnHPCGD+MFAPDQBTFtGmEYIPLdKeOnC0+G+MiDtD9OHdCEDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIBAKCIJAeDeBJAiCx+YUUBJ2BBJRKSGMAYAKDBBNAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnC+P+e+8/4BDtD9OHdCbDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIBAKCNJAeDeBJAiCx+YUUBJ2BBJRKSFMAYAKDBBBDMIBAKCTJRKMAICGJRIAECTJHEAM9JQBMMGXAK9FQBAKRTAtCFJHtCI6QGSFMMCBRKSEMGXAM9FQBALCUGJAbJREALAbJDBGBReCBRYEXAEALCU/CBJAYJHIDBIBHdCFD9tAdCFDbHPD9OD9hD9RHdAIAMJDBIBH8ZCFD9tA8ZAPD9OD9hD9RH8ZDQBTFtGmEYIPLdKeOnHpAIAQJDBIBHyCFD9tAyAPD9OD9hD9RHyAIASJDBIBH8cCFD9tA8cAPD9OD9hD9RH8cDQBTFtGmEYIPLdKeOnH8dDQBFTtGEmYILPdKOenHPAPDQBFGEBFGEBFGEBFGEAeD9uHeDyBjGBAEAGJHIAeAPAPDQILKOILKOILKOILKOD9uHeDyBjGBAIAGJHIAeAPAPDQNVcMNVcMNVcMNVcMD9uHeDyBjGBAIAGJHIAeAPAPDQSQfbSQfbSQfbSQfbD9uHeDyBjGBAIAGJHIAeApA8dDQNVi8ZcMpySQ8c8dfb8e8fHPAPDQBFGEBFGEBFGEBFGED9uHeDyBjGBAIAGJHIAeAPAPDQILKOILKOILKOILKOD9uHeDyBjGBAIAGJHIAeAPAPDQNVcMNVcMNVcMNVcMD9uHeDyBjGBAIAGJHIAeAPAPDQSQfbSQfbSQfbSQfbD9uHeDyBjGBAIAGJHIAeAdA8ZDQNiV8ZcpMyS8cQ8df8eb8fHdAyA8cDQNiV8ZcpMyS8cQ8df8eb8fH8ZDQBFTtGEmYILPdKOenHPAPDQBFGEBFGEBFGEBFGED9uHeDyBjGBAIAGJHIAeAPAPDQILKOILKOILKOILKOD9uHeDyBjGBAIAGJHIAeAPAPDQNVcMNVcMNVcMNVcMD9uHeDyBjGBAIAGJHIAeAPAPDQSQfbSQfbSQfbSQfbD9uHeDyBjGBAIAGJHIAeAdA8ZDQNVi8ZcMpySQ8c8dfb8e8fHPAPDQBFGEBFGEBFGEBFGED9uHeDyBjGBAIAGJHIAeAPAPDQILKOILKOILKOILKOD9uHeDyBjGBAIAGJHIAeAPAPDQNVcMNVcMNVcMNVcMD9uHeDyBjGBAIAGJHIAeAPAPDQSQfbSQfbSQfbSQfbD9uHeDyBjGBAIAGJREAYCTJHYAM9JQBMMAbCIJHbAG9JQBMMABAVAG9sJALCUGJAcAG9s/8cBBALALCUGJAcCaJAG9sJAG/8cBBMAcCBAKyAVJRVAKQBMC9+RKSFMCBC99AOAKlAGCAAGCA9Ly6yRKMALCU/KBJ8kUUUUBAKMNBT+BUUUBM+KmFTa8jUUUUBCoFlHL8kUUUUBC9+RKGXAFCE9uHOCtJAI9LQBCaRKAE2BBHNC/wFZC/gF9HQBANCbZHVCF9LQBALCoBJCgFCUF/8MBALC84Jha83EBALC8wJha83EBALC8oJha83EBALCAJha83EBALCiJha83EBALCTJha83EBALha83ENALha83EBAEAIJC9wJRcAECFJHNAOJRMGXAF9FQBCQCbAVCF6yRSABRECBRVCBRQCBRfCBRICBRKEXGXAMAcuQBC9+RKSEMGXGXAN2BBHOC/vF9LQBALCoBJAOCIrCa9zAKJCbZCEWJHb8oGIRTAb8oGBRtGXAOCbZHbAS9PQBALAOCa9zAIJCbZCGWJ8oGBAVAbyROAb9FRbGXGXAGCG9HQBABAt87FBABCIJAO87FBABCGJAT87FBSFMAEAtjGBAECNJAOjGBAECIJATjGBMAVAbJRVALCoBJAKCEWJHmAOjGBAmATjGIALAICGWJAOjGBALCoBJAKCFJCbZHKCEWJHTAtjGBATAOjGIAIAbJRIAKCFJRKSGMGXGXAbCb6QBAQAbJAbC989zJCFJRQSFMAM1BBHbCgFZROGXGXAbCa9MQBAMCFJRMSFMAM1BFHbCgBZCOWAOCgBZqROGXAbCa9MQBAMCGJRMSFMAM1BGHbCgBZCfWAOqROGXAbCa9MQBAMCEJRMSFMAM1BEHbCgBZCdWAOqROGXAbCa9MQBAMCIJRMSFMAM2BIC8cWAOqROAMCLJRMMAOCFrCBAOCFZl9zAQJRQMGXGXAGCG9HQBABAt87FBABCIJAQ87FBABCGJAT87FBSFMAEAtjGBAECNJAQjGBAECIJATjGBMALCoBJAKCEWJHOAQjGBAOATjGIALAICGWJAQjGBALCoBJAKCFJCbZHKCEWJHOAtjGBAOAQjGIAICFJRIAKCFJRKSFMGXAOCDF9LQBALAIAcAOCbZJ2BBHbCIrHTlCbZCGWJ8oGBAVCFJHtATyROALAIAblCbZCGWJ8oGBAtAT9FHmJHtAbCbZHTyRbAT9FRTGXGXAGCG9HQBABAV87FBABCIJAb87FBABCGJAO87FBSFMAEAVjGBAECNJAbjGBAECIJAOjGBMALAICGWJAVjGBALCoBJAKCEWJHYAOjGBAYAVjGIALAICFJHICbZCGWJAOjGBALCoBJAKCFJCbZCEWJHYAbjGBAYAOjGIALAIAmJCbZHICGWJAbjGBALCoBJAKCGJCbZHKCEWJHOAVjGBAOAbjGIAKCFJRKAIATJRIAtATJRVSFMAVCBAM2BBHYyHTAOC/+F6HPJROAYCbZRtGXGXAYCIrHmQBAOCFJRbSFMAORbALAIAmlCbZCGWJ8oGBROMGXGXAtQBAbCFJRVSFMAbRVALAIAYlCbZCGWJ8oGBRbMGXGXAP9FQBAMCFJRYSFMAM1BFHYCgFZRTGXGXAYCa9MQBAMCGJRYSFMAM1BGHYCgBZCOWATCgBZqRTGXAYCa9MQBAMCEJRYSFMAM1BEHYCgBZCfWATqRTGXAYCa9MQBAMCIJRYSFMAM1BIHYCgBZCdWATqRTGXAYCa9MQBAMCLJRYSFMAMCKJRYAM2BLC8cWATqRTMATCFrCBATCFZl9zAQJHQRTMGXGXAmCb6QBAYRPSFMAY1BBHMCgFZROGXGXAMCa9MQBAYCFJRPSFMAY1BFHMCgBZCOWAOCgBZqROGXAMCa9MQBAYCGJRPSFMAY1BGHMCgBZCfWAOqROGXAMCa9MQBAYCEJRPSFMAY1BEHMCgBZCdWAOqROGXAMCa9MQBAYCIJRPSFMAYCLJRPAY2BIC8cWAOqROMAOCFrCBAOCFZl9zAQJHQROMGXGXAtCb6QBAPRMSFMAP1BBHMCgFZRbGXGXAMCa9MQBAPCFJRMSFMAP1BFHMCgBZCOWAbCgBZqRbGXAMCa9MQBAPCGJRMSFMAP1BGHMCgBZCfWAbqRbGXAMCa9MQBAPCEJRMSFMAP1BEHMCgBZCdWAbqRbGXAMCa9MQBAPCIJRMSFMAPCLJRMAP2BIC8cWAbqRbMAbCFrCBAbCFZl9zAQJHQRbMGXGXAGCG9HQBABAT87FBABCIJAb87FBABCGJAO87FBSFMAEATjGBAECNJAbjGBAECIJAOjGBMALCoBJAKCEWJHYAOjGBAYATjGIALAICGWJATjGBALCoBJAKCFJCbZCEWJHYAbjGBAYAOjGIALAICFJHICbZCGWJAOjGBALCoBJAKCGJCbZCEWJHOATjGBAOAbjGIALAIAm9FAmCb6qJHICbZCGWJAbjGBAIAt9FAtCb6qJRIAKCEJRKMANCFJRNABCKJRBAECSJREAKCbZRKAICbZRIAfCEJHfAF9JQBMMCBC99AMAc6yRKMALCoFJ8kUUUUBAKM/tIFGa8jUUUUBCTlRLC9+RKGXAFCLJAI9LQBCaRKAE2BBC/+FZC/QF9HQBALhB83ENAECFJRKAEAIJC98JREGXAF9FQBGXAGCG6QBEXGXAKAE9JQBC9+bMAK1BBHGCgFZRIGXGXAGCa9MQBAKCFJRKSFMAK1BFHGCgBZCOWAICgBZqRIGXAGCa9MQBAKCGJRKSFMAK1BGHGCgBZCfWAIqRIGXAGCa9MQBAKCEJRKSFMAK1BEHGCgBZCdWAIqRIGXAGCa9MQBAKCIJRKSFMAK2BIC8cWAIqRIAKCLJRKMALCNJAICFZCGWqHGAICGrCBAICFrCFZl9zAG8oGBJHIjGBABAIjGBABCIJRBAFCaJHFQBSGMMEXGXAKAE9JQBC9+bMAK1BBHGCgFZRIGXGXAGCa9MQBAKCFJRKSFMAK1BFHGCgBZCOWAICgBZqRIGXAGCa9MQBAKCGJRKSFMAK1BGHGCgBZCfWAIqRIGXAGCa9MQBAKCEJRKSFMAK1BEHGCgBZCdWAIqRIGXAGCa9MQBAKCIJRKSFMAK2BIC8cWAIqRIAKCLJRKMABAICGrCBAICFrCFZl9zALCNJAICFZCGWqHI8oGBJHG87FBAIAGjGBABCGJRBAFCaJHFQBMMCBC99AKAE6yRKMAKM/dLEK97FaF97GXGXAGCI9HQBAF9FQFCBRGEXABABDBBBHECiD+rFCiD+sFD/6FHIAECND+rFCiD+sFD/6FAID/gFAECTD+rFCiD+sFD/6FHLD/gFD/kFD/lFHKCBDtD+2FHOAICUUUU94DtHND9OD9RD/kFHI9DBB/+hDYAIAID/mFAKAKD/mFALAOALAND9OD9RD/kFHIAID/mFD/kFD/kFD/jFD/nFHLD/mF9DBBX9LDYHOD/kFCgFDtD9OAECUUU94DtD9OD9QAIALD/mFAOD/kFCND+rFCU/+EDtD9OD9QAKALD/mFAOD/kFCTD+rFCUU/8ODtD9OD9QDMBBABCTJRBAGCIJHGAF9JQBSGMMAF9FQBCBRGEXABCTJHVAVDBBBHECBDtHOCUU98D8cFCUU98D8cEHND9OABDBBBHKAEDQILKOSQfbPden8c8d8e8fCggFDtD9OD/6FAKAEDQBFGENVcMTtmYi8ZpyHECTD+sFD/6FHID/gFAECTD+rFCTD+sFD/6FHLD/gFD/kFD/lFHE9DB/+g6DYALAEAOD+2FHOALCUUUU94DtHcD9OD9RD/kFHLALD/mFAEAED/mFAIAOAIAcD9OD9RD/kFHEAED/mFD/kFD/kFD/jFD/nFHID/mF9DBBX9LDYHOD/kFCTD+rFALAID/mFAOD/kFCggEDtD9OD9QHLAEAID/mFAOD/kFCaDbCBDnGCBDnECBDnKCBDnOCBDncCBDnMCBDnfCBDnbD9OHEDQNVi8ZcMpySQ8c8dfb8e8fD9QDMBBABAKAND9OALAEDQBFTtGEmYILPdKOenD9QDMBBABCAJRBAGCIJHGAF9JQBMMM/hEIGaF97FaL978jUUUUBCTlREGXAF9FQBCBRIEXAEABDBBBHLABCTJHKDBBBHODQILKOSQfbPden8c8d8e8fHNCTD+sFHVCID+rFDMIBAB9DBBU8/DY9D/zI818/DYAVCEDtD9QD/6FD/nFHVALAODQBFGENVcMTtmYi8ZpyHLCTD+rFCTD+sFD/6FD/mFHOAOD/mFAVALCTD+sFD/6FD/mFHcAcD/mFAVANCTD+rFCTD+sFD/6FD/mFHNAND/mFD/kFD/kFD/lFCBDtD+4FD/jF9DB/+g6DYHVD/mF9DBBX9LDYHLD/kFCggEDtHMD9OAcAVD/mFALD/kFCTD+rFD9QHcANAVD/mFALD/kFCTD+rFAOAVD/mFALD/kFAMD9OD9QHVDQBFTtGEmYILPdKOenHLD8dBAEDBIBDyB+t+J83EBABCNJALD8dFAEDBIBDyF+t+J83EBAKAcAVDQNVi8ZcMpySQ8c8dfb8e8fHVD8dBAEDBIBDyG+t+J83EBABCiJAVD8dFAEDBIBDyE+t+J83EBABCAJRBAICIJHIAF9JQBMMM9jFF97GXAGCGrAF9sHG9FQBCBRFEXABABDBBBHECND+rFCND+sFD/6FAECiD+sFCnD+rFCUUU/8EDtD+uFD/mFDMBBABCTJRBAFCIJHFAG9JQBMMM9TFEaCBCB8oGUkUUBHFABCEJC98ZJHBjGUkUUBGXGXAB8/BCTWHGuQBCaREABAGlCggEJCTrXBCa6QFMAFREMAEMMMFBCUNMIT9tBB");let a=WebAssembly.instantiate(function(e){let t=new Uint8Array(e.length);for(let r=0;r96?n-71:n>64?n-65:n>47?n+4:n>46?63:62}let r=0;for(let i=0;i{(e=t.instance).exports.__wasm_call_ctors()});function o(t,r,n,i,a,o){let s=e.exports.sbrk,l=n+3&-4,u=s(l*i),c=s(a.length),d=new Uint8Array(e.exports.memory.buffer);d.set(a,c);let f=t(u,n,i,c,a.length);if(0===f&&o&&o(u,l,i),r.set(d.subarray(u,u+n*i)),s(u-s(0)),0!==f)throw Error("Malformed buffer data: ".concat(f))}let s={0:"",1:"meshopt_decodeFilterOct",2:"meshopt_decodeFilterQuat",3:"meshopt_decodeFilterExp",NONE:"",OCTAHEDRAL:"meshopt_decodeFilterOct",QUATERNION:"meshopt_decodeFilterQuat",EXPONENTIAL:"meshopt_decodeFilterExp"},l={0:"meshopt_decodeVertexBuffer",1:"meshopt_decodeIndexBuffer",2:"meshopt_decodeIndexSequence",ATTRIBUTES:"meshopt_decodeVertexBuffer",TRIANGLES:"meshopt_decodeIndexBuffer",INDICES:"meshopt_decodeIndexSequence"};return t={ready:a,supported:!0,decodeVertexBuffer(t,r,n,i,a){o(e.exports.meshopt_decodeVertexBuffer,t,r,n,i,e.exports[s[a]])},decodeIndexBuffer(t,r,n,i){o(e.exports.meshopt_decodeIndexBuffer,t,r,n,i)},decodeIndexSequence(t,r,n,i){o(e.exports.meshopt_decodeIndexSequence,t,r,n,i)},decodeGltfBuffer(t,r,n,i,a,u){o(e.exports[l[a]],t,r,n,i,e.exports[s[u]])}}})())}}let rQ=(e,t,r,n)=>(0,r_.useLoader)(t$,e,rK(t,r,n));rQ.preload=(e,t,r,n)=>r_.useLoader.preload(t$,e,rK(t,r,n)),rQ.clear=e=>r_.useLoader.clear(t$,e),rQ.setDecoderPath=e=>{rN=e};var rW=e.i(89887);function rV(e){var t,r,n,i,a;let{materialName:o,material:s,lightMap:l}=e,u=(0,tw.useDebug)(),c=null!=(n=null==u?void 0:u.debugMode)&&n,d=(0,tM.textureToUrl)(o),f=(0,tT.useTexture)(d,e=>(0,tS.setupColor)(e)),h=new Set(null!=(i=null==s||null==(t=s.userData)?void 0:t.flag_names)?i:[]).has("SelfIlluminating"),m=new Set(null!=(a=null==s||null==(r=s.userData)?void 0:r.surface_flag_names)?a:[]).has("SurfaceOutsideVisible"),p=(0,el.useCallback)(e=>{(0,tR.injectCustomFog)(e,tD.globalFogUniforms),function(e,t){var r,n;let i=null!=(r=null==t?void 0:t.surfaceOutsideVisible)&&r,a=null!=(n=null==t?void 0:t.debugMode)&&n;e.uniforms.useSceneLighting={value:i},e.uniforms.interiorDebugMode={value:a},e.uniforms.interiorDebugColor={value:i?new ef.Vector3(0,.4,1):new ef.Vector3(1,.2,0)},e.fragmentShader=e.fragmentShader.replace("#include ","#include \n".concat("\nvec3 interiorLinearToSRGB(vec3 linear) {\n vec3 higher = pow(linear, vec3(1.0/2.4)) * 1.055 - 0.055;\n vec3 lower = linear * 12.92;\n return mix(lower, higher, step(vec3(0.0031308), linear));\n}\n\nvec3 interiorSRGBToLinear(vec3 srgb) {\n vec3 higher = pow((srgb + 0.055) / 1.055, vec3(2.4));\n vec3 lower = srgb / 12.92;\n return mix(lower, higher, step(vec3(0.04045), srgb));\n}\n\n// Debug grid overlay function using screen-space derivatives for sharp, anti-aliased lines\n// Returns 1.0 on grid lines, 0.0 elsewhere\nfloat debugGrid(vec2 uv, float gridSize, float lineWidth) {\n vec2 scaledUV = uv * gridSize;\n vec2 grid = abs(fract(scaledUV - 0.5) - 0.5) / fwidth(scaledUV);\n float line = min(grid.x, grid.y);\n return 1.0 - min(line / lineWidth, 1.0);\n}\n","\nuniform bool useSceneLighting;\nuniform bool interiorDebugMode;\nuniform vec3 interiorDebugColor;\n")),e.fragmentShader=e.fragmentShader.replace("#include ","// Lightmap handled in custom output calculation\n#ifdef USE_LIGHTMAP\n vec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n#endif"),e.fragmentShader=e.fragmentShader.replace("#include ","// Torque-style lighting: output = clamp(lighting × texture, 0, 1) in sRGB space\n// Get texture in sRGB space (undo Three.js linear decode)\nvec3 textureSRGB = interiorLinearToSRGB(diffuseColor.rgb);\n\n// Compute lighting in sRGB space\nvec3 lightingSRGB = vec3(0.0);\n\nif (useSceneLighting) {\n // Three.js computed: reflectedLight = lighting × texture_linear / PI\n // Extract pure lighting: lighting = reflectedLight × PI / texture_linear\n vec3 totalLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n vec3 safeTexLinear = max(diffuseColor.rgb, vec3(0.001));\n vec3 extractedLighting = totalLight * PI / safeTexLinear;\n // NOTE: extractedLighting is ALREADY sRGB values because mission sun/ambient colors\n // are sRGB values (Torque used them directly in gamma space). Three.js treats them\n // as linear but the numerical values are the same. DO NOT convert to sRGB here!\n // IMPORTANT: Torque clamps scene lighting to [0,1] BEFORE adding to lightmap\n // (sceneLighting.cc line 1785: tmp.clamp())\n lightingSRGB = clamp(extractedLighting, 0.0, 1.0);\n}\n\n// Add lightmap contribution (for BOTH outside and inside surfaces)\n// In Torque, scene lighting is ADDED to lightmaps for outside surfaces at mission load\n// (stored in .ml files). Inside surfaces only have base lightmap. Both need lightmap here.\n#ifdef USE_LIGHTMAP\n // Lightmap is stored as linear in Three.js (decoded from sRGB texture), convert back\n lightingSRGB += interiorLinearToSRGB(lightMapTexel.rgb);\n#endif\n// Torque clamps the sum to [0,1] per channel (sceneLighting.cc lines 1817-1827)\nlightingSRGB = clamp(lightingSRGB, 0.0, 1.0);\n\n// Torque formula: output = clamp(lighting × texture, 0, 1) in sRGB/gamma space\nvec3 resultSRGB = clamp(lightingSRGB * textureSRGB, 0.0, 1.0);\n\n// Convert back to linear for Three.js output pipeline\nvec3 resultLinear = interiorSRGBToLinear(resultSRGB);\n\n// Reassign outgoingLight before opaque_fragment consumes it\noutgoingLight = resultLinear + totalEmissiveRadiance;\n\n#include "),e.fragmentShader=e.fragmentShader.replace("#include ","// Debug mode: overlay colored grid on top of normal rendering\n// Blue grid = SurfaceOutsideVisible (receives scene ambient light)\n// Red grid = inside surface (no scene ambient light)\n#ifdef USE_MAP\nif (interiorDebugMode) {\n // gridSize=4 creates 4x4 grid per UV tile, lineWidth=1.5 is ~1.5 pixels wide\n float gridIntensity = debugGrid(vMapUv, 4.0, 1.5);\n gl_FragColor.rgb = mix(gl_FragColor.rgb, interiorDebugColor, gridIntensity * 0.1);\n}\n#endif\n\n#include ")}(e,{surfaceOutsideVisible:m,debugMode:c})},[m,c]),A="".concat(m,"-").concat(c);return h?(0,es.jsx)("meshBasicMaterial",{map:f,toneMapped:!1,onBeforeCompile:p},A):(0,es.jsx)("meshLambertMaterial",{map:f,lightMap:null!=l?l:void 0,toneMapped:!1,onBeforeCompile:p},A)}function rX(e){if(!e)return null;let t=e.emissiveMap;return t&&(t.colorSpace=ef.SRGBColorSpace),null!=t?t:null}function rq(e){let{node:t}=e,r=(0,el.useMemo)(()=>t.material?Array.isArray(t.material)?t.material.map(e=>rX(e)):[rX(t.material)]:[],[t.material]);return(0,es.jsx)("mesh",{geometry:t.geometry,castShadow:!0,receiveShadow:!0,children:t.material?(0,es.jsx)(el.Suspense,{fallback:(0,es.jsx)("meshStandardMaterial",{color:"yellow",wireframe:!0}),children:Array.isArray(t.material)?t.material.map((e,t)=>(0,es.jsx)(rV,{materialName:e.userData.resource_path,material:e,lightMap:r[t]},t)):(0,es.jsx)(rV,{materialName:t.material.userData.resource_path,material:t.material,lightMap:r[0]})}):null})}let rY=(0,el.memo)(e=>{var t;let{interiorFile:r}=e,{nodes:n}=rQ((0,tM.interiorToUrl)(r)),i=(0,tw.useDebug)(),a=null!=(t=null==i?void 0:i.debugMode)&&t;return(0,es.jsxs)("group",{rotation:[0,-Math.PI/2,0],children:[Object.entries(n).filter(e=>{let[,t]=e;return t.isMesh}).map(e=>{let[t,r]=e;return(0,es.jsx)(rq,{node:r},t)}),a?(0,es.jsx)(rW.FloatingLabel,{children:r}):null]})});function rz(e){let{color:t,label:r}=e;return(0,es.jsxs)("mesh",{children:[(0,es.jsx)("boxGeometry",{args:[10,10,10]}),(0,es.jsx)("meshStandardMaterial",{color:t,wireframe:!0}),r?(0,es.jsx)(rW.FloatingLabel,{color:t,children:r}):null]})}function rZ(e){var t;let{label:r}=e,n=(0,tw.useDebug)();return null!=(t=null==n?void 0:n.debugMode)&&t?(0,es.jsx)(rz,{color:"red",label:r}):null}let r$=(0,el.memo)(function(e){let{object:t}=e,r=(0,tF.getProperty)(t,"interiorFile"),n=(0,el.useMemo)(()=>(0,tF.getPosition)(t),[t]),i=(0,el.useMemo)(()=>(0,tF.getScale)(t),[t]),a=(0,el.useMemo)(()=>(0,tF.getRotation)(t),[t]);return(0,es.jsx)("group",{position:n,quaternion:a,scale:i,children:(0,es.jsx)(tQ,{fallback:(0,es.jsx)(rZ,{label:r}),children:(0,es.jsx)(el.Suspense,{fallback:(0,es.jsx)(rz,{color:"orange"}),children:(0,es.jsx)(rY,{interiorFile:r})})})})});function r0(e,t){let{path:r}=t,[n]=(0,r_.useLoader)(ef.CubeTextureLoader,[e],e=>e.setPath(r));return n}r0.preload=(e,t)=>{let{path:r}=t;return r_.useLoader.preload(ef.CubeTextureLoader,[e],e=>e.setPath(r))};function r1(e){return e.wrapS=ef.RepeatWrapping,e.wrapT=ef.RepeatWrapping,e.minFilter=ef.LinearFilter,e.magFilter=ef.LinearFilter,e.colorSpace=ef.NoColorSpace,e.needsUpdate=!0,e}function r9(e){let{textureUrl:t,radius:r,heightPercent:n,speed:i,windDirection:a,layerIndex:o,debugMode:s,animationEnabled:l}=e,u=(0,el.useRef)(null),c=(0,el.useRef)(new ef.Vector2(0,0)),d=(0,tT.useTexture)(t,r1),f=(0,el.useMemo)(()=>{let e=n-.05;return function(e,t,r,n){let i=new ef.BufferGeometry,a=new Float32Array(75),o=new Float32Array(50),s=[.05,.05,.05,.05,.05,.05,r,r,r,.05,.05,r,t,r,.05,.05,r,r,r,.05,.05,.05,.05,.05,.05],l=2*e/4;for(let t=0;t<5;t++)for(let r=0;r<5;r++){let n=5*t+r,i=-e+r*l,u=e-t*l,c=e*s[n];a[3*n]=i,a[3*n+1]=c,a[3*n+2]=u,o[2*n]=r,o[2*n+1]=t}!function(e){let t=t=>({x:e[3*t],y:e[3*t+1],z:e[3*t+2]}),r=(t,r,n,i)=>{e[3*t]=r,e[3*t+1]=n,e[3*t+2]=i},n=t(1),i=t(3),a=t(5),o=t(6),s=t(8),l=t(9),u=t(15),c=t(16),d=t(18),f=t(19),h=t(21),m=t(23),p=a.x+(n.x-a.x)*.5,A=a.y+(n.y-a.y)*.5,g=a.z+(n.z-a.z)*.5;r(0,o.x+(p-o.x)*2,o.y+(A-o.y)*2,o.z+(g-o.z)*2),p=l.x+(i.x-l.x)*.5,A=l.y+(i.y-l.y)*.5,g=l.z+(i.z-l.z)*.5,r(4,s.x+(p-s.x)*2,s.y+(A-s.y)*2,s.z+(g-s.z)*2),p=h.x+(u.x-h.x)*.5,A=h.y+(u.y-h.y)*.5,g=h.z+(u.z-h.z)*.5,r(20,c.x+(p-c.x)*2,c.y+(A-c.y)*2,c.z+(g-c.z)*2),p=m.x+(f.x-m.x)*.5,A=m.y+(f.y-m.y)*.5,g=m.z+(f.z-m.z)*.5,r(24,d.x+(p-d.x)*2,d.y+(A-d.y)*2,d.z+(g-d.z)*2)}(a);let u=function(e,t){let r=new Float32Array(25);for(let n=0;n<25;n++){let i=e[3*n],a=e[3*n+2],o=1.3-Math.sqrt(i*i+a*a)/t;o<.4?o=0:o>.8&&(o=1),r[n]=o}return r}(a,e),c=[];for(let e=0;e<4;e++)for(let t=0;t<4;t++){let r=5*e+t,n=r+1,i=r+5,a=i+1;c.push(r,i,a),c.push(r,a,n)}return i.setIndex(c),i.setAttribute("position",new ef.Float32BufferAttribute(a,3)),i.setAttribute("uv",new ef.Float32BufferAttribute(o,2)),i.setAttribute("alpha",new ef.Float32BufferAttribute(u,1)),i.computeBoundingSphere(),i}(r,n,e,0)},[r,n]),h=(0,el.useMemo)(()=>new ef.ShaderMaterial({uniforms:{cloudTexture:{value:d},uvOffset:{value:new ef.Vector2(0,0)},debugMode:{value:+!!s},layerIndex:{value:o}},vertexShader:"\n attribute float alpha;\n\n uniform vec2 uvOffset;\n\n varying vec2 vUv;\n varying float vAlpha;\n\n void main() {\n // Apply UV offset for scrolling\n vUv = uv + uvOffset;\n vAlpha = alpha;\n\n vec4 pos = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n // Set depth to far plane so clouds are always visible and behind other geometry\n gl_Position = pos.xyww;\n }\n",fragmentShader:"\n uniform sampler2D cloudTexture;\n uniform float debugMode;\n uniform int layerIndex;\n\n varying vec2 vUv;\n varying float vAlpha;\n\n // Debug grid using screen-space derivatives for sharp, anti-aliased lines\n float debugGrid(vec2 uv, float gridSize, float lineWidth) {\n vec2 scaledUV = uv * gridSize;\n vec2 grid = abs(fract(scaledUV - 0.5) - 0.5) / fwidth(scaledUV);\n float line = min(grid.x, grid.y);\n return 1.0 - min(line / lineWidth, 1.0);\n }\n\n void main() {\n vec4 texColor = texture2D(cloudTexture, vUv);\n\n // Tribes 2 uses GL_MODULATE: final = texture × vertex color\n // Vertex color is white with varying alpha, so:\n // Final RGB = Texture RGB × 1.0 = Texture RGB\n // Final Alpha = Texture Alpha × Vertex Alpha\n float finalAlpha = texColor.a * vAlpha;\n vec3 color = texColor.rgb;\n\n // Debug mode: overlay R/G/B grid for layers 0/1/2\n if (debugMode > 0.5) {\n float gridIntensity = debugGrid(vUv, 4.0, 1.5);\n vec3 gridColor;\n if (layerIndex == 0) {\n gridColor = vec3(1.0, 0.0, 0.0); // Red\n } else if (layerIndex == 1) {\n gridColor = vec3(0.0, 1.0, 0.0); // Green\n } else {\n gridColor = vec3(0.0, 0.0, 1.0); // Blue\n }\n color = mix(color, gridColor, gridIntensity * 0.5);\n }\n\n // Output clouds with texture color and combined alpha\n gl_FragColor = vec4(color, finalAlpha);\n }\n",transparent:!0,depthWrite:!1,side:ef.DoubleSide}),[d,s,o]);return(0,tx.useFrame)((e,t)=>{if(!u.current||!l)return;let r=1e3*t/32;c.current.x+=a.x*i*r,c.current.y+=a.y*i*r,c.current.x=c.current.x-Math.floor(c.current.x),c.current.y=c.current.y-Math.floor(c.current.y),u.current.uniforms.uvOffset.value.copy(c.current)}),(0,el.useEffect)(()=>()=>{f.dispose(),h.dispose()},[f,h]),(0,es.jsx)("mesh",{geometry:f,frustumCulled:!1,renderOrder:10,children:(0,es.jsx)("primitive",{ref:u,object:h,attach:"material"})})}function r2(e){var t,r;let{object:n}=e,{debugMode:i}=(0,tw.useDebug)(),{animationEnabled:a}=(0,tw.useSettings)(),{data:o}=ty({queryKey:["detailMapList",r=(0,tF.getProperty)(n,"materialList")],queryFn:()=>(0,tM.loadDetailMapList)(r),enabled:!!r},tt,void 0),s=.95*(null!=(t=(0,tF.getFloat)(n,"visibleDistance"))?t:500),l=(0,el.useMemo)(()=>{var e,t,r;return[null!=(e=(0,tF.getFloat)(n,"cloudSpeed1"))?e:1e-4,null!=(t=(0,tF.getFloat)(n,"cloudSpeed2"))?t:2e-4,null!=(r=(0,tF.getFloat)(n,"cloudSpeed3"))?r:3e-4]},[n]),u=(0,el.useMemo)(()=>{let e=[.35,.25,.2],t=[];for(let i=0;i<3;i++){var r;let a=null!=(r=(0,tF.getFloat)(n,"cloudHeightPer".concat(i)))?r:e[i];t.push(a)}return t},[n]),c=(0,el.useMemo)(()=>{let e=(0,tF.getProperty)(n,"windVelocity");if(e){let[t,r]=e.split(" ").map(e=>parseFloat(e));if(0!==t||0!==r)return new ef.Vector2(r,-t).normalize()}return new ef.Vector2(1,0)},[n]),d=(0,el.useMemo)(()=>{if(!o)return[];let e=[];for(let n=7;n{let{camera:t}=e;f.current&&f.current.position.copy(t.position)}),d&&0!==d.length)?(0,es.jsx)("group",{ref:f,children:d.map((e,t)=>{let r=(0,tM.textureToUrl)(e.texture);return(0,es.jsx)(el.Suspense,{fallback:null,children:(0,es.jsx)(r9,{textureUrl:r,radius:s,heightPercent:e.height,speed:e.speed,windDirection:c,layerIndex:t,debugMode:i,animationEnabled:a})},t)})}):null}tM.BASE_URL;let r3=!1;function r8(e){if(!e)return;let[t,r,n]=e.split(" ").map(e=>parseFloat(e));return[new ef.Color().setRGB(t,r,n),new ef.Color().setRGB(t,r,n).convertSRGBToLinear()]}function r5(e){let{skyBoxFiles:t,fogColor:r,fogState:n}=e,{camera:i}=(0,tE.useThree)(),a=r0(t,{path:""}),o=(0,el.useMemo)(()=>i.projectionMatrixInverse,[i]),s=(0,el.useMemo)(()=>n?(0,tD.packFogVolumeData)(n.fogVolumes):new Float32Array(12),[n]),l=(0,el.useMemo)(()=>{if(!n)return .18;let e=.95*n.visibleDistance/Math.sqrt(3);return 60/Math.sqrt(e*e+3600)},[n]);return(0,es.jsxs)("mesh",{renderOrder:-1e3,frustumCulled:!1,children:[(0,es.jsxs)("bufferGeometry",{children:[(0,es.jsx)("bufferAttribute",{attach:"attributes-position",array:new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),count:3,itemSize:3}),(0,es.jsx)("bufferAttribute",{attach:"attributes-uv",array:new Float32Array([0,0,2,0,0,2]),count:3,itemSize:2})]}),(0,es.jsx)("shaderMaterial",{uniforms:{skybox:{value:a},fogColor:{value:null!=r?r:new ef.Color(0,0,0)},enableFog:{value:!!r},inverseProjectionMatrix:{value:o},cameraMatrixWorld:{value:i.matrixWorld},cameraHeight:tD.globalFogUniforms.cameraHeight,fogVolumeData:{value:s},horizonFogHeight:{value:l}},vertexShader:"\n varying vec2 vUv;\n\n void main() {\n vUv = uv;\n gl_Position = vec4(position.xy, 0.9999, 1.0);\n }\n ",fragmentShader:'\n uniform samplerCube skybox;\n uniform vec3 fogColor;\n uniform bool enableFog;\n uniform mat4 inverseProjectionMatrix;\n uniform mat4 cameraMatrixWorld;\n uniform float cameraHeight;\n uniform float fogVolumeData[12];\n uniform float horizonFogHeight;\n\n varying vec2 vUv;\n\n // Convert linear to sRGB for display\n // shaderMaterial does NOT get automatic linear->sRGB output conversion\n // Use proper sRGB transfer function (not simplified gamma 2.2) to match Three.js\n vec3 linearToSRGB(vec3 linear) {\n vec3 low = linear * 12.92;\n vec3 high = 1.055 * pow(linear, vec3(1.0 / 2.4)) - 0.055;\n return mix(low, high, step(vec3(0.0031308), linear));\n }\n\n void main() {\n vec2 ndc = vUv * 2.0 - 1.0;\n vec4 viewPos = inverseProjectionMatrix * vec4(ndc, 1.0, 1.0);\n viewPos.xyz /= viewPos.w;\n vec3 direction = normalize((cameraMatrixWorld * vec4(viewPos.xyz, 0.0)).xyz);\n direction = vec3(direction.z, direction.y, -direction.x);\n // Sample skybox - Three.js CubeTexture with SRGBColorSpace auto-converts to linear\n vec4 skyColor = textureCube(skybox, direction);\n vec3 finalColor;\n\n if (enableFog) {\n vec3 effectiveFogColor = fogColor;\n\n // Calculate how much fog volume the ray passes through\n // For skybox at "infinite" distance, the relevant height is how much\n // of the volume is above/below camera depending on view direction\n float volumeFogInfluence = 0.0;\n\n for (int i = 0; i < 3; i++) {\n int offset = i * 4;\n float volVisDist = fogVolumeData[offset + 0];\n float volMinH = fogVolumeData[offset + 1];\n float volMaxH = fogVolumeData[offset + 2];\n float volPct = fogVolumeData[offset + 3];\n\n if (volVisDist <= 0.0) continue;\n\n // Check if camera is inside this volume\n if (cameraHeight >= volMinH && cameraHeight <= volMaxH) {\n // Camera is inside the fog volume\n // Looking horizontally or up at shallow angles means ray travels\n // through more fog before exiting the volume\n float heightAboveCamera = volMaxH - cameraHeight;\n float heightBelowCamera = cameraHeight - volMinH;\n float volumeHeight = volMaxH - volMinH;\n\n // For horizontal rays (direction.y ≈ 0), maximum fog influence\n // For rays going up steeply, less fog (exits volume quickly)\n // For rays going down, more fog (travels through volume below)\n float rayInfluence;\n if (direction.y >= 0.0) {\n // Looking up: influence based on how steep we\'re looking\n // Shallow angles = long path through fog = high influence\n rayInfluence = 1.0 - smoothstep(0.0, 0.3, direction.y);\n } else {\n // Looking down: always high fog (into the volume)\n rayInfluence = 1.0;\n }\n\n // Scale by percentage and volume depth factor\n volumeFogInfluence += rayInfluence * volPct;\n }\n }\n\n // Base fog factor from view direction (for haze at horizon)\n // In Torque, the fog "bans" (bands) are rendered as geometry from\n // height 0 (HORIZON) to height 60 (OFFSET_HEIGHT) on the skybox.\n // The skybox corner is at mSkyBoxPt.x = mRadius / sqrt(3).\n //\n // horizonFogHeight is the direction.y value where the fog band ends:\n // horizonFogHeight = 60 / sqrt(skyBoxPt.x^2 + 60^2)\n //\n // For Firestorm (visDist=600): mRadius=570, skyBoxPt.x=329, horizonFogHeight≈0.18\n //\n // Torque renders the fog bands as geometry with linear vertex alpha\n // interpolation. We use a squared curve (t^2) to create a gentler\n // falloff at the top of the gradient, matching Tribes 2\'s appearance.\n float baseFogFactor;\n if (direction.y <= 0.0) {\n // Looking at or below horizon: full fog\n baseFogFactor = 1.0;\n } else if (direction.y >= horizonFogHeight) {\n // Above fog band: no fog\n baseFogFactor = 0.0;\n } else {\n // Within fog band: squared curve for gentler falloff at top\n float t = direction.y / horizonFogHeight;\n baseFogFactor = (1.0 - t) * (1.0 - t);\n }\n\n // Combine base fog with volume fog influence\n // When inside a volume, increase fog intensity\n float finalFogFactor = min(1.0, baseFogFactor + volumeFogInfluence * 0.5);\n\n finalColor = mix(skyColor.rgb, effectiveFogColor, finalFogFactor);\n } else {\n finalColor = skyColor.rgb;\n }\n // Convert linear result to sRGB for display\n gl_FragColor = vec4(linearToSRGB(finalColor), 1.0);\n }\n ',depthWrite:!1,depthTest:!1})]})}function r6(e){let{materialList:t,fogColor:r,fogState:n}=e,{data:i}=ty({queryKey:["detailMapList",t],queryFn:()=>(0,tM.loadDetailMapList)(t)},tt,void 0),a=(0,el.useMemo)(()=>i?[(0,tM.textureToUrl)(i[1]),(0,tM.textureToUrl)(i[3]),(0,tM.textureToUrl)(i[4]),(0,tM.textureToUrl)(i[5]),(0,tM.textureToUrl)(i[0]),(0,tM.textureToUrl)(i[2])]:null,[i]);return a?(0,es.jsx)(r5,{skyBoxFiles:a,fogColor:r,fogState:n}):null}function r4(e){let{skyColor:t,fogColor:r,fogState:n}=e,{camera:i}=(0,tE.useThree)(),a=(0,el.useMemo)(()=>i.projectionMatrixInverse,[i]),o=(0,el.useMemo)(()=>n?(0,tD.packFogVolumeData)(n.fogVolumes):new Float32Array(12),[n]),s=(0,el.useMemo)(()=>{if(!n)return .18;let e=.95*n.visibleDistance/Math.sqrt(3);return 60/Math.sqrt(e*e+3600)},[n]);return(0,es.jsxs)("mesh",{renderOrder:-1e3,frustumCulled:!1,children:[(0,es.jsxs)("bufferGeometry",{children:[(0,es.jsx)("bufferAttribute",{attach:"attributes-position",array:new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),count:3,itemSize:3}),(0,es.jsx)("bufferAttribute",{attach:"attributes-uv",array:new Float32Array([0,0,2,0,0,2]),count:3,itemSize:2})]}),(0,es.jsx)("shaderMaterial",{uniforms:{skyColor:{value:t},fogColor:{value:null!=r?r:new ef.Color(0,0,0)},enableFog:{value:!!r},inverseProjectionMatrix:{value:a},cameraMatrixWorld:{value:i.matrixWorld},cameraHeight:tD.globalFogUniforms.cameraHeight,fogVolumeData:{value:o},horizonFogHeight:{value:s}},vertexShader:"\n varying vec2 vUv;\n\n void main() {\n vUv = uv;\n gl_Position = vec4(position.xy, 0.9999, 1.0);\n }\n ",fragmentShader:"\n uniform vec3 skyColor;\n uniform vec3 fogColor;\n uniform bool enableFog;\n uniform mat4 inverseProjectionMatrix;\n uniform mat4 cameraMatrixWorld;\n uniform float cameraHeight;\n uniform float fogVolumeData[12];\n uniform float horizonFogHeight;\n\n varying vec2 vUv;\n\n // Convert linear to sRGB for display\n vec3 linearToSRGB(vec3 linear) {\n vec3 low = linear * 12.92;\n vec3 high = 1.055 * pow(linear, vec3(1.0 / 2.4)) - 0.055;\n return mix(low, high, step(vec3(0.0031308), linear));\n }\n\n void main() {\n vec2 ndc = vUv * 2.0 - 1.0;\n vec4 viewPos = inverseProjectionMatrix * vec4(ndc, 1.0, 1.0);\n viewPos.xyz /= viewPos.w;\n vec3 direction = normalize((cameraMatrixWorld * vec4(viewPos.xyz, 0.0)).xyz);\n direction = vec3(direction.z, direction.y, -direction.x);\n\n vec3 finalColor;\n\n if (enableFog) {\n // Calculate volume fog influence (same logic as SkyBoxTexture)\n float volumeFogInfluence = 0.0;\n\n for (int i = 0; i < 3; i++) {\n int offset = i * 4;\n float volVisDist = fogVolumeData[offset + 0];\n float volMinH = fogVolumeData[offset + 1];\n float volMaxH = fogVolumeData[offset + 2];\n float volPct = fogVolumeData[offset + 3];\n\n if (volVisDist <= 0.0) continue;\n\n if (cameraHeight >= volMinH && cameraHeight <= volMaxH) {\n float rayInfluence;\n if (direction.y >= 0.0) {\n rayInfluence = 1.0 - smoothstep(0.0, 0.3, direction.y);\n } else {\n rayInfluence = 1.0;\n }\n volumeFogInfluence += rayInfluence * volPct;\n }\n }\n\n // Base fog factor from view direction\n float baseFogFactor;\n if (direction.y <= 0.0) {\n baseFogFactor = 1.0;\n } else if (direction.y >= horizonFogHeight) {\n baseFogFactor = 0.0;\n } else {\n float t = direction.y / horizonFogHeight;\n baseFogFactor = (1.0 - t) * (1.0 - t);\n }\n\n // Combine base fog with volume fog influence\n float finalFogFactor = min(1.0, baseFogFactor + volumeFogInfluence * 0.5);\n\n finalColor = mix(skyColor, fogColor, finalFogFactor);\n } else {\n finalColor = skyColor;\n }\n\n gl_FragColor = vec4(linearToSRGB(finalColor), 1.0);\n }\n ",depthWrite:!1,depthTest:!1})]})}function r7(e,t){let{fogDistance:r,visibleDistance:n}=e;return[r,n]}function ne(e){let{fogState:t}=e,{scene:r,camera:n}=(0,tE.useThree)(),i=(0,el.useRef)(null),a=(0,el.useMemo)(()=>(0,tD.packFogVolumeData)(t.fogVolumes),[t.fogVolumes]);return(0,el.useEffect)(()=>{r3||((0,tR.installCustomFogShader)(),r3=!0)},[]),(0,el.useEffect)(()=>{(0,tD.resetGlobalFogUniforms)();let[e,o]=r7(t,n.position.y),s=new ef.Fog(t.fogColor,e,o);return r.fog=s,i.current=s,(0,tD.updateGlobalFogUniforms)(n.position.y,a),()=>{r.fog=null,i.current=null,(0,tD.resetGlobalFogUniforms)()}},[r,n,t,a]),(0,tx.useFrame)(()=>{let e=i.current;if(!e)return;let r=n.position.y,[o,s]=r7(t,r);e.near=o,e.far=s,e.color.copy(t.fogColor),(0,tD.updateGlobalFogUniforms)(r,a)}),null}let nt=/borg|xorg|porg|dorg|plant|tree|bush|fern|vine|grass|leaf|flower|frond|palm|foliage/i;function nr(e){return nt.test(e)}let nn=(0,el.createContext)(null);function ni(e){let{children:t,shapeName:r,type:n}=e,i=(0,el.useMemo)(()=>nr(r),[r]),a=(0,el.useMemo)(()=>({shapeName:r,type:n,isOrganic:i}),[r,n,i]);return(0,es.jsx)(nn.Provider,{value:a,children:t})}var na=e.i(51475);let no=new Map,ns={directional:1,ambient:1.5};function nl(e){e.onBeforeCompile=t=>{(0,tR.injectCustomFog)(t,tD.globalFogUniforms),e instanceof ef.MeshLambertMaterial&&(t.uniforms.shapeDirectionalFactor={value:ns.directional},t.uniforms.shapeAmbientFactor={value:ns.ambient},t.fragmentShader=t.fragmentShader.replace("#include ","#include \nuniform float shapeDirectionalFactor;\nuniform float shapeAmbientFactor;\n"),t.fragmentShader=t.fragmentShader.replace("#include ","#include \n // Apply shape-specific lighting multipliers\n reflectedLight.directDiffuse *= shapeDirectionalFactor;\n reflectedLight.indirectDiffuse *= shapeAmbientFactor;\n"))}}function nu(e,t,r,n){let i=r.has("Translucent"),a=r.has("Additive"),o=r.has("SelfIlluminating");if(r.has("NeverEnvMap"),o){let e=new ef.MeshBasicMaterial({map:t,side:2,transparent:a,alphaTest:.5*!a,blending:a?ef.AdditiveBlending:void 0,fog:!0});return nl(e),e}if(n||i){let e={map:t,transparent:!1,alphaTest:.5,reflectivity:0},r=new ef.MeshLambertMaterial({...e,side:1,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1}),n=new ef.MeshLambertMaterial({...e,side:0});return nl(r),nl(n),[r,n]}let s=new ef.MeshLambertMaterial({map:t,side:2,reflectivity:0});return nl(s),s}let nc=(0,el.memo)(function(e){var t;let{material:r,shapeName:n,geometry:i,backGeometry:a,castShadow:o=!1,receiveShadow:s=!1}=e,l=r.userData.resource_path,u=new Set(null!=(t=r.userData.flag_names)?t:[]),c=function(e){let{animationEnabled:t}=(0,tw.useSettings)(),{data:r}=ty({queryKey:["ifl",e],queryFn:()=>(0,tM.loadImageFrameList)(e),enabled:!0,suspense:!0,throwOnError:tB,placeholderData:void 0},tt,void 0),n=(0,el.useMemo)(()=>r.map(t=>(0,tM.iflTextureToUrl)(t.name,e)),[r,e]),i=(0,tT.useTexture)(n),a=(0,el.useMemo)(()=>{var t;let n,a=no.get(e);return a||(a=function(e){let t=e[0].image.width,r=e[0].image.height,n=e.length,i=Math.ceil(Math.sqrt(n)),a=Math.ceil(n/i),o=document.createElement("canvas");o.width=t*i,o.height=r*a;let s=o.getContext("2d");e.forEach((e,n)=>{let a=Math.floor(n/i);s.drawImage(e.image,n%i*t,a*r)});let l=new ef.CanvasTexture(o);return l.colorSpace=ef.SRGBColorSpace,l.generateMipmaps=!1,l.minFilter=ef.NearestFilter,l.magFilter=ef.NearestFilter,l.wrapS=ef.ClampToEdgeWrapping,l.wrapT=ef.ClampToEdgeWrapping,l.repeat.set(1/i,1/a),{texture:l,columns:i,rows:a,frameCount:n,frameStartTicks:[],totalTicks:0,lastFrame:-1}}(i),no.set(e,a)),n=0,(t=a).frameStartTicks=r.map(e=>{let t=n;return n+=e.frameCount,t}),t.totalTicks=n,a},[e,i,r]);return(0,na.useTick)(e=>{let r=t?function(e,t){if(0===e.totalTicks)return 0;let r=t%e.totalTicks,{frameStartTicks:n}=e;for(let e=n.length-1;e>=0;e--)if(r>=n[e])return e;return 0}(a,e):0;!function(e,t){if(t===e.lastFrame)return;e.lastFrame=t;let r=t%e.columns,n=e.rows-1-Math.floor(t/e.columns);e.texture.offset.set(r/e.columns,n/e.rows)}(a,r)}),a.texture}("textures/".concat(l,".ifl")),d=n&&nr(n),f=(0,el.useMemo)(()=>nu(r,c,u,d),[r,c,u,d]);return Array.isArray(f)?(0,es.jsxs)(es.Fragment,{children:[(0,es.jsx)("mesh",{geometry:a||i,castShadow:o,receiveShadow:s,children:(0,es.jsx)("primitive",{object:f[0],attach:"material"})}),(0,es.jsx)("mesh",{geometry:i,castShadow:o,receiveShadow:s,children:(0,es.jsx)("primitive",{object:f[1],attach:"material"})})]}):(0,es.jsx)("mesh",{geometry:i,castShadow:o,receiveShadow:s,children:(0,es.jsx)("primitive",{object:f,attach:"material"})})}),nd=(0,el.memo)(function(e){var t;let{material:r,shapeName:n,geometry:i,backGeometry:a,castShadow:o=!1,receiveShadow:s=!1}=e,l=r.userData.resource_path,u=new Set(null!=(t=r.userData.flag_names)?t:[]),c=(0,el.useMemo)(()=>(l||console.warn('No resource_path was found on "'.concat(n,'" - rendering fallback.')),l?(0,tM.textureToUrl)(l):tM.FALLBACK_TEXTURE_URL),[l,n]),d=n&&nr(n),f=u.has("Translucent"),h=(0,tT.useTexture)(c,e=>d||f?(0,tS.setupAlphaTestedTexture)(e):(0,tS.setupColor)(e)),m=(0,el.useMemo)(()=>nu(r,h,u,d),[r,h,u,d]);return Array.isArray(m)?(0,es.jsxs)(es.Fragment,{children:[(0,es.jsx)("mesh",{geometry:a||i,castShadow:o,receiveShadow:s,children:(0,es.jsx)("primitive",{object:m[0],attach:"material"})}),(0,es.jsx)("mesh",{geometry:i,castShadow:o,receiveShadow:s,children:(0,es.jsx)("primitive",{object:m[1],attach:"material"})})]}):(0,es.jsx)("mesh",{geometry:i,castShadow:o,receiveShadow:s,children:(0,es.jsx)("primitive",{object:m,attach:"material"})})}),nf=(0,el.memo)(function(e){var t;let{material:r,shapeName:n,geometry:i,backGeometry:a,castShadow:o=!1,receiveShadow:s=!1}=e,l=new Set(null!=(t=r.userData.flag_names)?t:[]).has("IflMaterial"),u=r.userData.resource_path;return l&&u?(0,es.jsx)(nc,{material:r,shapeName:n,geometry:i,backGeometry:a,castShadow:o,receiveShadow:s}):r.name?(0,es.jsx)(nd,{material:r,shapeName:n,geometry:i,backGeometry:a,castShadow:o,receiveShadow:s}):null});function nh(e){let{color:t,label:r}=e;return(0,es.jsxs)("mesh",{children:[(0,es.jsx)("boxGeometry",{args:[10,10,10]}),(0,es.jsx)("meshStandardMaterial",{color:t,wireframe:!0}),r?(0,es.jsx)(rW.FloatingLabel,{color:t,children:r}):null]})}function nm(e){let{color:t,label:r}=e,{debugMode:n}=(0,tw.useDebug)();return n?(0,es.jsx)(nh,{color:t,label:r}):null}function np(e){let{shapeName:t,loadingColor:r="yellow",children:n}=e;return t?(0,es.jsx)(tQ,{fallback:(0,es.jsx)(nm,{color:"red",label:t}),children:(0,es.jsxs)(el.Suspense,{fallback:(0,es.jsx)(nh,{color:r}),children:[(0,es.jsx)(nA,{}),n]})}):(0,es.jsx)(nm,{color:"orange"})}let nA=(0,el.memo)(function(){let{shapeName:e,isOrganic:t}=(0,el.useContext)(nn),{debugMode:r}=(0,tw.useDebug)(),{nodes:n}=rQ((0,tM.shapeToUrl)(e)),i=(0,el.useMemo)(()=>{let e=Object.values(n).filter(e=>e.skeleton);if(e.length>0){var t=e[0].skeleton;let r=new Set;return t.bones.forEach((e,t)=>{e.name.match(/^Hulk/i)&&r.add(t)}),r}return new Set},[n]),a=(0,el.useMemo)(()=>Object.entries(n).filter(e=>{let[t,r]=e;return r.material&&"Unassigned"!==r.material.name&&!r.name.match(/^Hulk/i)}).map(e=>{let[r,n]=e,a=function(e,t){if(0===t.size||!e.attributes.skinIndex)return e;let r=e.attributes.skinIndex,n=e.attributes.skinWeight,i=e.index,a=Array(r.count).fill(!1);for(let e=0;e.01&&t.has(o)){a[e]=!0;break}}if(i){let t=[],r=i.array;for(let e=0;e1){let t=0,r=0,n=0;for(let a of e)t+=i[3*a],r+=i[3*a+1],n+=i[3*a+2];let a=Math.sqrt(t*t+r*r+n*n);for(let o of(a>0&&(t/=a,r/=a,n/=a),e))i[3*o]=t,i[3*o+1]=r,i[3*o+2]=n}if(r.needsUpdate=!0,t){let e=(o=a.clone()).attributes.normal,t=e.array;for(let e=0;e{let{node:r,geometry:n,backGeometry:i}=t;return(0,es.jsx)(el.Suspense,{fallback:(0,es.jsx)("mesh",{geometry:n,children:(0,es.jsx)("meshStandardMaterial",{color:"gray",wireframe:!0})}),children:r.material?Array.isArray(r.material)?r.material.map((t,r)=>(0,es.jsx)(nf,{material:t,shapeName:e,geometry:n,backGeometry:i,castShadow:o,receiveShadow:o},r)):(0,es.jsx)(nf,{material:r.material,shapeName:e,geometry:n,backGeometry:i,castShadow:o,receiveShadow:o}):null},r.id)}),r?(0,es.jsx)(rW.FloatingLabel,{children:e}):null]})});var ng=e.i(6112);let nv={1:"Storm",2:"Inferno"},nB=(0,el.createContext)(null);function nC(){let e=(0,el.useContext)(nB);if(!e)throw Error("useCameras must be used within CamerasProvider");return e}function ny(e){let{children:t}=e,{camera:r}=(0,tE.useThree)(),[n,i]=(0,el.useState)(0),[a,o]=(0,el.useState)({}),s=(0,el.useCallback)(e=>{o(t=>({...t,[e.id]:e}))},[]),l=(0,el.useCallback)(e=>{o(t=>{let{[e.id]:r,...n}=t;return n})},[]),u=Object.keys(a).length,c=(0,el.useCallback)(()=>{i(e=>0===u?0:(e+1)%u)},[u]),d=(0,el.useCallback)(e=>{e>=0&&e{if(n({registerCamera:s,unregisterCamera:l,nextCamera:c,setCameraIndex:d,cameraCount:u}),[s,l,c,d,u]);return(0,es.jsx)(nB.Provider,{value:f,children:t})}let nb=(0,el.lazy)(()=>e.A(61921).then(e=>({default:e.AudioEmitter}))),nM={AudioEmitter:function(e){let{audioEnabled:t}=(0,tw.useSettings)();return t?(0,es.jsx)(nb,{...e}):null},Camera:function(e){let{object:t}=e,{registerCamera:r,unregisterCamera:n}=nC(),i=(0,el.useId)(),a=(0,tF.getProperty)(t,"dataBlock"),o=(0,el.useMemo)(()=>(0,tF.getPosition)(t),[t]),s=(0,el.useMemo)(()=>(0,tF.getRotation)(t),[t]);return(0,el.useEffect)(()=>{if("Observer"===a){let e={id:i,position:new ef.Vector3(...o),rotation:s};return r(e),()=>{n(e)}}},[i,a,r,n,o,s]),null},ForceFieldBare:(0,el.lazy)(()=>e.A(25147).then(e=>({default:e.ForceFieldBare}))),InteriorInstance:r$,Item:function(e){var t,r;let{object:n}=e,i=tj(),a=null!=(t=(0,tF.getProperty)(n,"dataBlock"))?t:"",o=(0,ng.useDatablock)(a),s=(0,el.useMemo)(()=>(0,tF.getPosition)(n),[n]),l=(0,el.useMemo)(()=>(0,tF.getScale)(n),[n]),u=(0,el.useMemo)(()=>(0,tF.getRotation)(n),[n]),c=(0,tF.getProperty)(o,"shapeFile");c||console.error(" missing shape for datablock: ".concat(a));let d=(null==a?void 0:a.toLowerCase())==="flag",f=null!=(r=null==i?void 0:i.team)?r:null,h=f&&f>0?nv[f]:null,m=d&&h?"".concat(h," Flag"):null;return(0,es.jsx)(ni,{shapeName:c,type:"Item",children:(0,es.jsx)("group",{position:s,quaternion:u,scale:l,children:(0,es.jsx)(np,{shapeName:c,loadingColor:"pink",children:m?(0,es.jsx)(rW.FloatingLabel,{opacity:.6,children:m}):null})})})},SimGroup:function(e){var t;let{object:r}=e,n=tj(),i=(0,el.useMemo)(()=>{let e=null,t=!1;if(n&&n.hasTeams){if(t=!0,null!=n.team)e=n.team;else if(r._name){let t=r._name.match(/^team(\d+)$/i);t&&(e=parseInt(t[1],10))}}else r._name&&(t="teams"===r._name.toLowerCase());return{object:r,parent:n,hasTeams:t,team:e}},[r,n]);return(0,es.jsx)(tU.Provider,{value:i,children:(null!=(t=r._children)?t:[]).map((e,t)=>nx(e,t))})},Sky:function(e){var t;let{object:r}=e,{fogEnabled:n,highQualityFog:i}=(0,tw.useSettings)(),a=(0,tF.getProperty)(r,"materialList"),o=(0,el.useMemo)(()=>r8((0,tF.getProperty)(r,"SkySolidColor")),[r]),s=null!=(t=(0,tF.getInt)(r,"useSkyTextures"))?t:1,l=(0,el.useMemo)(()=>(function(e){var t,r;let n=!(arguments.length>1)||void 0===arguments[1]||arguments[1],i=null!=(t=(0,tF.getFloat)(e,"fogDistance"))?t:0,a=null!=(r=(0,tF.getFloat)(e,"visibleDistance"))?r:1e3,o=(0,tF.getFloat)(e,"high_fogDistance"),s=(0,tF.getFloat)(e,"high_visibleDistance"),l=n&&null!=o&&o>0?o:i,u=n&&null!=s&&s>0?s:a,c=function(e){if(!e)return new ef.Color(.5,.5,.5);let[t,r,n]=e.split(" ").map(e=>parseFloat(e));return new ef.Color().setRGB(t,r,n).convertSRGBToLinear()}((0,tF.getProperty)(e,"fogColor")),d=[];for(let t=1;t<=3;t++){let r=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;if(!e)return null;let r=e.split(" ").map(e=>parseFloat(e));if(r.length<3)return null;let[n,i,a]=r;return n<=0||a<=i?null:{visibleDistance:n,minHeight:i,maxHeight:a,percentage:Math.max(0,Math.min(1,t))}}((0,tF.getProperty)(e,"fogVolume".concat(t)),1);r&&d.push(r)}let f=d.reduce((e,t)=>Math.max(e,t.maxHeight),0);return{fogDistance:l,visibleDistance:u,fogColor:c,fogVolumes:d,fogLine:f,enabled:u>l}})(r,i),[r,i]),u=(0,el.useMemo)(()=>r8((0,tF.getProperty)(r,"fogColor")),[r]),c=o||u,d=l.enabled&&n,f=l.fogColor,{scene:h,gl:m}=(0,tE.useThree)();(0,el.useEffect)(()=>{if(d){let e=f.clone();h.background=e,m.setClearColor(e)}else if(c){let e=c[0].clone();h.background=e,m.setClearColor(e)}else h.background=null;return()=>{h.background=null}},[h,m,d,f,c]);let p=null==o?void 0:o[1];return(0,es.jsxs)(es.Fragment,{children:[a&&s?(0,es.jsx)(el.Suspense,{fallback:null,children:(0,es.jsx)(r6,{materialList:a,fogColor:d?f:void 0,fogState:d?l:void 0},a)}):p?(0,es.jsx)(r4,{skyColor:p,fogColor:d?f:void 0,fogState:d?l:void 0}):null,(0,es.jsx)(el.Suspense,{children:(0,es.jsx)(r2,{object:r})}),d?(0,es.jsx)(ne,{fogState:l}):null]})},StaticShape:function(e){var t;let{object:r}=e,n=null!=(t=(0,tF.getProperty)(r,"dataBlock"))?t:"",i=(0,ng.useDatablock)(n),a=(0,el.useMemo)(()=>(0,tF.getPosition)(r),[r]),o=(0,el.useMemo)(()=>(0,tF.getRotation)(r),[r]),s=(0,el.useMemo)(()=>(0,tF.getScale)(r),[r]),l=(0,tF.getProperty)(i,"shapeFile");return l||console.error(" missing shape for datablock: ".concat(n)),(0,es.jsx)(ni,{shapeName:l,type:"StaticShape",children:(0,es.jsx)("group",{position:a,quaternion:o,scale:s,children:(0,es.jsx)(np,{shapeName:l})})})},Sun:function(e){let{object:t}=e,r=(0,el.useMemo)(()=>{var e;let[r,n,i]=(null!=(e=(0,tF.getProperty)(t,"direction"))?e:"0.57735 0.57735 -0.57735").split(" ").map(e=>parseFloat(e)),a=Math.sqrt(r*r+i*i+n*n);return new ef.Vector3(r/a,i/a,n/a)},[t]),n=(0,el.useMemo)(()=>new ef.Vector3(-(5e3*r.x),-(5e3*r.y),-(5e3*r.z)),[r]),i=(0,el.useMemo)(()=>{var e;let[r,n,i]=(null!=(e=(0,tF.getProperty)(t,"color"))?e:"0.7 0.7 0.7 1").split(" ").map(e=>parseFloat(e));return new ef.Color(r,n,i)},[t]),a=(0,el.useMemo)(()=>{var e;let[r,n,i]=(null!=(e=(0,tF.getProperty)(t,"ambient"))?e:"0.5 0.5 0.5 1").split(" ").map(e=>parseFloat(e));return new ef.Color(r,n,i)},[t]);return(0,es.jsxs)(es.Fragment,{children:[(0,es.jsx)("directionalLight",{position:n,color:i,intensity:1,castShadow:!0,"shadow-mapSize-width":8192,"shadow-mapSize-height":8192,"shadow-camera-left":-4096,"shadow-camera-right":4096,"shadow-camera-top":4096,"shadow-camera-bottom":-4096,"shadow-camera-near":100,"shadow-camera-far":12e3,"shadow-bias":-1e-5,"shadow-normalBias":.4}),(0,es.jsx)("ambientLight",{color:a,intensity:1})]})},TerrainBlock:t_,TSStatic:function(e){let{object:t}=e,r=(0,tF.getProperty)(t,"shapeName"),n=(0,el.useMemo)(()=>(0,tF.getPosition)(t),[t]),i=(0,el.useMemo)(()=>(0,tF.getRotation)(t),[t]),a=(0,el.useMemo)(()=>(0,tF.getScale)(t),[t]);return r||console.error(" missing shapeName for object",t),(0,es.jsx)(ni,{shapeName:r,type:"TSStatic",children:(0,es.jsx)("group",{position:n,quaternion:i,scale:a,children:(0,es.jsx)(np,{shapeName:r})})})},Turret:function(e){var t;let{object:r}=e,n=null!=(t=(0,tF.getProperty)(r,"dataBlock"))?t:"",i=(0,tF.getProperty)(r,"initialBarrel"),a=(0,ng.useDatablock)(n),o=(0,ng.useDatablock)(i),s=(0,el.useMemo)(()=>(0,tF.getPosition)(r),[r]),l=(0,el.useMemo)(()=>(0,tF.getRotation)(r),[r]),u=(0,el.useMemo)(()=>(0,tF.getScale)(r),[r]),c=(0,tF.getProperty)(a,"shapeFile"),d=(0,tF.getProperty)(o,"shapeFile");return c||console.error(" missing shape for datablock: ".concat(n)),i&&!d&&console.error(" missing shape for barrel datablock: ".concat(i)),(0,es.jsx)(ni,{shapeName:c,type:"Turret",children:(0,es.jsxs)("group",{position:s,quaternion:l,scale:u,children:[(0,es.jsx)(np,{shapeName:c}),d?(0,es.jsx)(ni,{shapeName:d,type:"Turret",children:(0,es.jsx)("group",{position:[0,1.5,0],children:(0,es.jsx)(np,{shapeName:d})})}):null]})})},WaterBlock:(0,el.lazy)(()=>e.A(18599).then(e=>({default:e.WaterBlock}))),WayPoint:function(e){let{object:t}=e;tj();let r=(0,el.useMemo)(()=>(0,tF.getPosition)(t),[t]),n=(0,tF.getProperty)(t,"name");return n?(0,es.jsx)(rW.FloatingLabel,{position:r,opacity:.6,children:n}):null}};function nx(e,t){let r=nM[e._className];return r?(0,es.jsx)(el.Suspense,{children:(0,es.jsx)(r,{object:e})},t):null}var nE=e.i(86608),nF=e.i(38433),nS=e.i(33870),nT=e.i(91996);let nw=async e=>{let t;try{t=(0,tM.getUrlForPath)(e)}catch(t){return console.warn("Script not in manifest: ".concat(e," (").concat(t,")")),null}try{let r=await fetch(t);if(!r.ok)return console.error("Script fetch failed: ".concat(e," (").concat(r.status,")")),null;return await r.text()}catch(t){return console.error("Script fetch error: ".concat(e)),console.error(t),null}},nR=(0,nS.createScriptCache)(),nD={findFiles:e=>{let t=(0,tb.default)(e,{nocase:!0});return(0,nT.getResourceList)().filter(e=>t(e)).map(e=>{let[t,r]=(0,nT.getSourceAndPath)(e);return r})},isFile:e=>null!=(0,nT.getResourceMap)()[(0,nT.getResourceKey)(e)]},nI=(0,el.memo)(function(e){let{name:t,onLoadingChange:r}=e,{data:n}=ty({queryKey:["parsedMission",t],queryFn:()=>(0,tM.loadMission)(t)},tt,void 0),{missionGroup:i,runtime:a,progress:o}=function(e,t){let[r,n]=(0,el.useState)({missionGroup:void 0,runtime:void 0,progress:0});return(0,el.useEffect)(()=>{if(!t)return;let r=new AbortController,i=t.missionTypes[0],a=(0,nF.createProgressTracker)(),o=()=>{n(e=>({...e,progress:a.progress}))};a.on("update",o);let{runtime:s}=(0,nE.runServer)({missionName:e,missionType:i,runtimeOptions:{loadScript:nw,fileSystem:nD,cache:nR,signal:r.signal,progress:a,ignoreScripts:["scripts/admin.cs","scripts/ai.cs","scripts/aiBotProfiles.cs","scripts/aiBountyGame.cs","scripts/aiChat.cs","scripts/aiCnH.cs","scripts/aiCTF.cs","scripts/aiDeathMatch.cs","scripts/aiDebug.cs","scripts/aiDefaultTasks.cs","scripts/aiDnD.cs","scripts/aiHumanTasks.cs","scripts/aiHunters.cs","scripts/aiInventory.cs","scripts/aiObjectiveBuilder.cs","scripts/aiObjectives.cs","scripts/aiRabbit.cs","scripts/aiSiege.cs","scripts/aiTDM.cs","scripts/aiTeamHunters.cs","scripts/deathMessages.cs","scripts/graphBuild.cs","scripts/navGraph.cs","scripts/serverTasks.cs","scripts/spdialog.cs"]},onMissionLoadDone:()=>{n({missionGroup:s.getObjectByName("MissionGroup"),runtime:s,progress:1})}});return()=>{a.off("update",o),r.abort(),s.destroy()}},[e,t]),r}(t,n),s=!i||!a;return((0,el.useEffect)(()=>{null==r||r(s,o)},[s,o,r]),s)?null:(0,es.jsx)(tH.RuntimeProvider,{runtime:a,children:nx(i)})});function nG(e,t){var r=eB(e,t,"update");if(r.set){if(!r.get)throw TypeError("attempted to read set only private field");return"__destrWrapper"in r||(r.__destrWrapper={set value(v){r.set.call(e,v)},get value(){return r.get.call(e)}}),r.__destrWrapper}if(!r.writable)throw TypeError("attempted to set read only private field");return r}var nL=(K=new WeakMap,class extends eF{build(e,t,r){var n;let i=t.queryKey,a=null!=(n=t.queryHash)?n:eO(i,t),o=this.get(a);return o||(o=new e5({client:e,queryKey:i,queryHash:a,options:e.defaultQueryOptions(t),state:r,defaultOptions:e.getQueryDefaults(i)}),this.add(o)),o}add(e){eC(this,K).has(e.queryHash)||(eC(this,K).set(e.queryHash,e),this.notify({type:"added",query:e}))}remove(e){let t=eC(this,K).get(e.queryHash);t&&(e.destroy(),t===e&&eC(this,K).delete(e.queryHash),this.notify({type:"removed",query:e}))}clear(){eZ.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return eC(this,K).get(e)}getAll(){return[...eC(this,K).values()]}find(e){let t={exact:!0,...e};return this.getAll().find(e=>eP(t,e))}findAll(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=this.getAll();return Object.keys(e).length>0?t.filter(t=>eP(e,t)):t}notify(e){eZ.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){eZ.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){eZ.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}constructor(e={}){super(),eb(this,K,{writable:!0,value:void 0}),this.config=e,eM(this,K,new Map)}}),nP=(Q=new WeakMap,W=new WeakMap,V=new WeakMap,X=new WeakMap,q=new WeakSet,class extends e8{setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){eC(this,W).includes(e)||(eC(this,W).push(e),this.clearGcTimeout(),eC(this,V).notify({type:"observerAdded",mutation:this,observer:e}))}removeObserver(e){eM(this,W,eC(this,W).filter(t=>t!==e)),this.scheduleGc(),eC(this,V).notify({type:"observerRemoved",mutation:this,observer:e})}optionalRemove(){eC(this,W).length||("pending"===this.state.status?this.scheduleGc():eC(this,V).remove(this))}continue(){var e,t;return null!=(t=null==(e=eC(this,X))?void 0:e.continue())?t:this.execute(this.state.variables)}async execute(e){var t,r,n,i,a,o,s,l,u,c,d,f,h,m,p,A,g,B,C,y,b;let M=()=>{ex(this,q,nH).call(this,{type:"continue"})},x={client:eC(this,Q),meta:this.options.meta,mutationKey:this.options.mutationKey};eM(this,X,e3({fn:()=>this.options.mutationFn?this.options.mutationFn(e,x):Promise.reject(Error("No mutationFn found")),onFail:(e,t)=>{ex(this,q,nH).call(this,{type:"failed",failureCount:e,error:t})},onPause:()=>{ex(this,q,nH).call(this,{type:"pause"})},onContinue:M,retry:null!=(t=this.options.retry)?t:0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>eC(this,V).canRun(this)}));let E="pending"===this.state.status,F=!eC(this,X).canStart();try{if(E)M();else{ex(this,q,nH).call(this,{type:"pending",variables:e,isPaused:F}),await (null==(c=(d=eC(this,V).config).onMutate)?void 0:c.call(d,e,this,x));let t=await (null==(f=(h=this.options).onMutate)?void 0:f.call(h,e,x));t!==this.state.context&&ex(this,q,nH).call(this,{type:"pending",context:t,variables:e,isPaused:F})}let t=await eC(this,X).start();return await (null==(r=(n=eC(this,V).config).onSuccess)?void 0:r.call(n,t,e,this.state.context,this,x)),await (null==(i=(a=this.options).onSuccess)?void 0:i.call(a,t,e,this.state.context,x)),await (null==(o=(s=eC(this,V).config).onSettled)?void 0:o.call(s,t,null,this.state.variables,this.state.context,this,x)),await (null==(l=(u=this.options).onSettled)?void 0:l.call(u,t,null,e,this.state.context,x)),ex(this,q,nH).call(this,{type:"success",data:t}),t}catch(t){try{throw await (null==(m=(p=eC(this,V).config).onError)?void 0:m.call(p,t,e,this.state.context,this,x)),await (null==(A=(g=this.options).onError)?void 0:A.call(g,t,e,this.state.context,x)),await (null==(B=(C=eC(this,V).config).onSettled)?void 0:B.call(C,void 0,t,this.state.variables,this.state.context,this,x)),await (null==(y=(b=this.options).onSettled)?void 0:y.call(b,void 0,t,e,this.state.context,x)),t}finally{ex(this,q,nH).call(this,{type:"error",error:t})}}finally{eC(this,V).runNext(this)}}constructor(e){super(),eE(this,q),eb(this,Q,{writable:!0,value:void 0}),eb(this,W,{writable:!0,value:void 0}),eb(this,V,{writable:!0,value:void 0}),eb(this,X,{writable:!0,value:void 0}),eM(this,Q,e.client),this.mutationId=e.mutationId,eM(this,V,e.mutationCache),eM(this,W,[]),this.state=e.state||{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0},this.setOptions(e.options),this.scheduleGc()}});function nH(e){this.state=(t=>{switch(e.type){case"failed":return{...t,failureCount:e.failureCount,failureReason:e.error};case"pause":return{...t,isPaused:!0};case"continue":return{...t,isPaused:!1};case"pending":return{...t,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:"pending",variables:e.variables,submittedAt:Date.now()};case"success":return{...t,data:e.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...t,data:void 0,error:e.error,failureCount:t.failureCount+1,failureReason:e.error,isPaused:!1,status:"error"}}})(this.state),eZ.batch(()=>{eC(this,W).forEach(t=>{t.onMutationUpdate(e)}),eC(this,V).notify({mutation:this,type:"updated",action:e})})}var nO=(Y=new WeakMap,z=new WeakMap,Z=new WeakMap,class extends eF{build(e,t,r){let n=new nP({client:e,mutationCache:this,mutationId:++nG(this,Z).value,options:e.defaultMutationOptions(t),state:r});return this.add(n),n}add(e){eC(this,Y).add(e);let t=nk(e);if("string"==typeof t){let r=eC(this,z).get(t);r?r.push(e):eC(this,z).set(t,[e])}this.notify({type:"added",mutation:e})}remove(e){if(eC(this,Y).delete(e)){let t=nk(e);if("string"==typeof t){let r=eC(this,z).get(t);if(r)if(r.length>1){let t=r.indexOf(e);-1!==t&&r.splice(t,1)}else r[0]===e&&eC(this,z).delete(t)}}this.notify({type:"removed",mutation:e})}canRun(e){let t=nk(e);if("string"!=typeof t)return!0;{let r=eC(this,z).get(t),n=null==r?void 0:r.find(e=>"pending"===e.state.status);return!n||n===e}}runNext(e){let t=nk(e);if("string"!=typeof t)return Promise.resolve();{var r,n;let i=null==(r=eC(this,z).get(t))?void 0:r.find(t=>t!==e&&t.state.isPaused);return null!=(n=null==i?void 0:i.continue())?n:Promise.resolve()}}clear(){eZ.batch(()=>{eC(this,Y).forEach(e=>{this.notify({type:"removed",mutation:e})}),eC(this,Y).clear(),eC(this,z).clear()})}getAll(){return Array.from(eC(this,Y))}find(e){let t={exact:!0,...e};return this.getAll().find(e=>eH(t,e))}findAll(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.getAll().filter(t=>eH(e,t))}notify(e){eZ.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(e=>e.state.isPaused);return eZ.batch(()=>Promise.all(e.map(e=>e.continue().catch(eR))))}constructor(e={}){super(),eb(this,Y,{writable:!0,value:void 0}),eb(this,z,{writable:!0,value:void 0}),eb(this,Z,{writable:!0,value:void 0}),this.config=e,eM(this,Y,new Set),eM(this,z,new Map),eM(this,Z,0)}});function nk(e){var t;return null==(t=e.options.scope)?void 0:t.id}function n_(e){return{onFetch:(t,r)=>{var n,i,a,o,s;let l=t.options,u=null==(a=t.fetchOptions)||null==(i=a.meta)||null==(n=i.fetchMore)?void 0:n.direction,c=(null==(o=t.state.data)?void 0:o.pages)||[],d=(null==(s=t.state.data)?void 0:s.pageParams)||[],f={pages:[],pageParams:[]},h=0,m=async()=>{let r=!1,n=eq(t.options,t.fetchOptions),i=async(e,i,a)=>{if(r)return Promise.reject();if(null==i&&e.pages.length)return Promise.resolve(e);let o=(()=>{let e={client:t.client,queryKey:t.queryKey,pageParam:i,direction:a?"backward":"forward",meta:t.options.meta};return Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(t.signal.aborted?r=!0:t.signal.addEventListener("abort",()=>{r=!0}),t.signal)}),e})(),s=await n(o),{maxPages:l}=t.options,u=a?eV:eW;return{pages:u(e.pages,s,l),pageParams:u(e.pageParams,i,l)}};if(u&&c.length){let e="backward"===u,t={pages:c,pageParams:d},r=(e?function(e,t){var r;let{pages:n,pageParams:i}=t;return n.length>0?null==(r=e.getPreviousPageParam)?void 0:r.call(e,n[0],n,i[0],i):void 0}:nU)(l,t);f=await i(t,r,e)}else{let t=null!=e?e:c.length;do{var a;let e=0===h?null!=(a=d[0])?a:l.initialPageParam:nU(l,f);if(h>0&&null==e)break;f=await i(f,e),h++}while(h{var e,n;return null==(e=(n=t.options).persister)?void 0:e.call(n,m,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},r)}:t.fetchFn=m}}}function nU(e,t){let{pages:r,pageParams:n}=t,i=r.length-1;return r.length>0?e.getNextPageParam(r[i],r,n[i],n):void 0}var nj=($=new WeakMap,ee=new WeakMap,et=new WeakMap,er=new WeakMap,en=new WeakMap,ei=new WeakMap,ea=new WeakMap,eo=new WeakMap,class{mount(){nG(this,ei).value++,1===eC(this,ei)&&(eM(this,ea,eY.subscribe(async e=>{e&&(await this.resumePausedMutations(),eC(this,$).onFocus())})),eM(this,eo,e$.subscribe(async e=>{e&&(await this.resumePausedMutations(),eC(this,$).onOnline())})))}unmount(){var e,t;nG(this,ei).value--,0===eC(this,ei)&&(null==(e=eC(this,ea))||e.call(this),eM(this,ea,void 0),null==(t=eC(this,eo))||t.call(this),eM(this,eo,void 0))}isFetching(e){return eC(this,$).findAll({...e,fetchStatus:"fetching"}).length}isMutating(e){return eC(this,ee).findAll({...e,status:"pending"}).length}getQueryData(e){var t;let r=this.defaultQueryOptions({queryKey:e});return null==(t=eC(this,$).get(r.queryHash))?void 0:t.state.data}ensureQueryData(e){let t=this.defaultQueryOptions(e),r=eC(this,$).build(this,t),n=r.state.data;return void 0===n?this.fetchQuery(e):(e.revalidateIfStale&&r.isStaleByTime(eG(t.staleTime,r))&&this.prefetchQuery(t),Promise.resolve(n))}getQueriesData(e){return eC(this,$).findAll(e).map(e=>{let{queryKey:t,state:r}=e;return[t,r.data]})}setQueryData(e,t,r){let n=this.defaultQueryOptions({queryKey:e}),i=eC(this,$).get(n.queryHash),a=null==i?void 0:i.state.data,o="function"==typeof t?t(a):t;if(void 0!==o)return eC(this,$).build(this,n).setData(o,{...r,manual:!0})}setQueriesData(e,t,r){return eZ.batch(()=>eC(this,$).findAll(e).map(e=>{let{queryKey:n}=e;return[n,this.setQueryData(n,t,r)]}))}getQueryState(e){var t;let r=this.defaultQueryOptions({queryKey:e});return null==(t=eC(this,$).get(r.queryHash))?void 0:t.state}removeQueries(e){let t=eC(this,$);eZ.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let r=eC(this,$);return eZ.batch(()=>(r.findAll(e).forEach(e=>{e.reset()}),this.refetchQueries({type:"active",...e},t)))}cancelQueries(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r={revert:!0,...t};return Promise.all(eZ.batch(()=>eC(this,$).findAll(e).map(e=>e.cancel(r)))).then(eR).catch(eR)}invalidateQueries(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return eZ.batch(()=>{var r,n;return(eC(this,$).findAll(e).forEach(e=>{e.invalidate()}),(null==e?void 0:e.refetchType)==="none")?Promise.resolve():this.refetchQueries({...e,type:null!=(n=null!=(r=null==e?void 0:e.refetchType)?r:null==e?void 0:e.type)?n:"active"},t)})}refetchQueries(e){var t;let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={...r,cancelRefetch:null==(t=r.cancelRefetch)||t};return Promise.all(eZ.batch(()=>eC(this,$).findAll(e).filter(e=>!e.isDisabled()&&!e.isStatic()).map(e=>{let t=e.fetch(void 0,n);return n.throwOnError||(t=t.catch(eR)),"paused"===e.state.fetchStatus?Promise.resolve():t}))).then(eR)}fetchQuery(e){let t=this.defaultQueryOptions(e);void 0===t.retry&&(t.retry=!1);let r=eC(this,$).build(this,t);return r.isStaleByTime(eG(t.staleTime,r))?r.fetch(t):Promise.resolve(r.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(eR).catch(eR)}fetchInfiniteQuery(e){return e.behavior=n_(e.pages),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(eR).catch(eR)}ensureInfiniteQueryData(e){return e.behavior=n_(e.pages),this.ensureQueryData(e)}resumePausedMutations(){return e$.isOnline()?eC(this,ee).resumePausedMutations():Promise.resolve()}getQueryCache(){return eC(this,$)}getMutationCache(){return eC(this,ee)}getDefaultOptions(){return eC(this,et)}setDefaultOptions(e){eM(this,et,e)}setQueryDefaults(e,t){eC(this,er).set(ek(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...eC(this,er).values()],r={};return t.forEach(t=>{e_(e,t.queryKey)&&Object.assign(r,t.defaultOptions)}),r}setMutationDefaults(e,t){eC(this,en).set(ek(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...eC(this,en).values()],r={};return t.forEach(t=>{e_(e,t.mutationKey)&&Object.assign(r,t.defaultOptions)}),r}defaultQueryOptions(e){if(e._defaulted)return e;let t={...eC(this,et).queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||(t.queryHash=eO(t.queryKey,t)),void 0===t.refetchOnReconnect&&(t.refetchOnReconnect="always"!==t.networkMode),void 0===t.throwOnError&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode="offlineFirst"),t.queryFn===eX&&(t.enabled=!1),t}defaultMutationOptions(e){return(null==e?void 0:e._defaulted)?e:{...eC(this,et).mutations,...(null==e?void 0:e.mutationKey)&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){eC(this,$).clear(),eC(this,ee).clear()}constructor(e={}){eb(this,$,{writable:!0,value:void 0}),eb(this,ee,{writable:!0,value:void 0}),eb(this,et,{writable:!0,value:void 0}),eb(this,er,{writable:!0,value:void 0}),eb(this,en,{writable:!0,value:void 0}),eb(this,ei,{writable:!0,value:void 0}),eb(this,ea,{writable:!0,value:void 0}),eb(this,eo,{writable:!0,value:void 0}),eM(this,$,e.queryCache||new nL),eM(this,ee,e.mutationCache||new nO),eM(this,et,e.defaultOptions||{}),eM(this,er,new Map),eM(this,en,new Map),eM(this,ei,0)}}),nJ=e.i(8155);let nN=e=>e,nK=e=>{let t=(0,nJ.createStore)(e),r=e=>(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:nN,r=el.default.useSyncExternalStore(e.subscribe,el.default.useCallback(()=>t(e.getState()),[e,t]),el.default.useCallback(()=>t(e.getInitialState()),[e,t]));return el.default.useDebugValue(r),r})(t,e);return Object.assign(r,t),r},nQ=el.createContext(null);function nW(e){let{map:t,children:r,onChange:n,domElement:i}=e,a=t.map(e=>e.name+e.keys).join("-"),o=el.useMemo(()=>{let e,r;return e=()=>t.reduce((e,t)=>({...e,[t.name]:!1}),{}),(r=(t,r,n)=>{let i=n.subscribe;return n.subscribe=(e,t,r)=>{let a=e;if(t){let i=(null==r?void 0:r.equalityFn)||Object.is,o=e(n.getState());a=r=>{let n=e(r);if(!i(o,n)){let e=o;t(o=n,e)}},(null==r?void 0:r.fireImmediately)&&t(o,o)}return i(a)},e(t,r,n)})?nK(r):nK},[a]),s=el.useMemo(()=>[o.subscribe,o.getState,o],[a]),l=o.setState;return el.useEffect(()=>{let e=t.map(e=>{let{name:t,keys:r,up:i}=e;return{keys:r,up:i,fn:e=>{l({[t]:e}),n&&n(t,e,s[1]())}}}).reduce((e,t)=>{let{keys:r,fn:n,up:i=!0}=t;return r.forEach(t=>e[t]={fn:n,pressed:!1,up:i}),e},{}),r=t=>{let{key:r,code:n}=t,i=e[r]||e[n];if(!i)return;let{fn:a,pressed:o,up:s}=i;i.pressed=!0,(s||!o)&&a(!0)},a=t=>{let{key:r,code:n}=t,i=e[r]||e[n];if(!i)return;let{fn:a,up:o}=i;i.pressed=!1,o&&a(!1)},o=i||window;return o.addEventListener("keydown",r,{passive:!0}),o.addEventListener("keyup",a,{passive:!0}),()=>{o.removeEventListener("keydown",r),o.removeEventListener("keyup",a)}},[i,a]),el.createElement(nQ.Provider,{value:s,children:r})}var nV=Object.defineProperty;class nX{addEventListener(e,t){void 0===this._listeners&&(this._listeners={});let r=this._listeners;void 0===r[e]&&(r[e]=[]),-1===r[e].indexOf(t)&&r[e].push(t)}hasEventListener(e,t){if(void 0===this._listeners)return!1;let r=this._listeners;return void 0!==r[e]&&-1!==r[e].indexOf(t)}removeEventListener(e,t){if(void 0===this._listeners)return;let r=this._listeners[e];if(void 0!==r){let e=r.indexOf(t);-1!==e&&r.splice(e,1)}}dispatchEvent(e){if(void 0===this._listeners)return;let t=this._listeners[e.type];if(void 0!==t){e.target=this;let r=t.slice(0);for(let t=0,n=r.length;t((e,t,r)=>t in e?nV(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r)(e,"symbol"!=typeof t?t+"":t,r))(this,"_listeners")}}var nq=Object.defineProperty,nY=(e,t,r)=>(((e,t,r)=>t in e?nq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r)(e,"symbol"!=typeof t?t+"":t,r),r);let nz=new ef.Euler(0,0,0,"YXZ"),nZ=new ef.Vector3,n$={type:"change"},n0={type:"lock"},n1={type:"unlock"},n9=Math.PI/2;class n2 extends nX{constructor(e,t){super(),nY(this,"camera"),nY(this,"domElement"),nY(this,"isLocked"),nY(this,"minPolarAngle"),nY(this,"maxPolarAngle"),nY(this,"pointerSpeed"),nY(this,"onMouseMove",e=>{this.domElement&&!1!==this.isLocked&&(nz.setFromQuaternion(this.camera.quaternion),nz.y-=.002*e.movementX*this.pointerSpeed,nz.x-=.002*e.movementY*this.pointerSpeed,nz.x=Math.max(n9-this.maxPolarAngle,Math.min(n9-this.minPolarAngle,nz.x)),this.camera.quaternion.setFromEuler(nz),this.dispatchEvent(n$))}),nY(this,"onPointerlockChange",()=>{this.domElement&&(this.domElement.ownerDocument.pointerLockElement===this.domElement?(this.dispatchEvent(n0),this.isLocked=!0):(this.dispatchEvent(n1),this.isLocked=!1))}),nY(this,"onPointerlockError",()=>{console.error("THREE.PointerLockControls: Unable to use Pointer Lock API")}),nY(this,"connect",e=>{this.domElement=e||this.domElement,this.domElement&&(this.domElement.ownerDocument.addEventListener("mousemove",this.onMouseMove),this.domElement.ownerDocument.addEventListener("pointerlockchange",this.onPointerlockChange),this.domElement.ownerDocument.addEventListener("pointerlockerror",this.onPointerlockError))}),nY(this,"disconnect",()=>{this.domElement&&(this.domElement.ownerDocument.removeEventListener("mousemove",this.onMouseMove),this.domElement.ownerDocument.removeEventListener("pointerlockchange",this.onPointerlockChange),this.domElement.ownerDocument.removeEventListener("pointerlockerror",this.onPointerlockError))}),nY(this,"dispose",()=>{this.disconnect()}),nY(this,"getObject",()=>this.camera),nY(this,"direction",new ef.Vector3(0,0,-1)),nY(this,"getDirection",e=>e.copy(this.direction).applyQuaternion(this.camera.quaternion)),nY(this,"moveForward",e=>{nZ.setFromMatrixColumn(this.camera.matrix,0),nZ.crossVectors(this.camera.up,nZ),this.camera.position.addScaledVector(nZ,e)}),nY(this,"moveRight",e=>{nZ.setFromMatrixColumn(this.camera.matrix,0),this.camera.position.addScaledVector(nZ,e)}),nY(this,"lock",()=>{this.domElement&&this.domElement.requestPointerLock()}),nY(this,"unlock",()=>{this.domElement&&this.domElement.ownerDocument.exitPointerLock()}),this.camera=e,this.domElement=t,this.isLocked=!1,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.pointerSpeed=1,t&&this.connect(t)}}var n3=function(e){return e.forward="forward",e.backward="backward",e.left="left",e.right="right",e.up="up",e.down="down",e.camera1="camera1",e.camera2="camera2",e.camera3="camera3",e.camera4="camera4",e.camera5="camera5",e.camera6="camera6",e.camera7="camera7",e.camera8="camera8",e.camera9="camera9",e}(n3||{});function n8(){let{speedMultiplier:e,setSpeedMultiplier:t}=(0,tw.useControls)(),[r,n]=function(e){let[t,r,n]=el.useContext(nQ);return[t,r]}(),{camera:i,gl:a}=(0,tE.useThree)(),{nextCamera:o,setCameraIndex:s,cameraCount:l}=nC(),u=(0,el.useRef)(null),c=(0,el.useRef)(new ef.Vector3),d=(0,el.useRef)(new ef.Vector3),f=(0,el.useRef)(new ef.Vector3);return(0,el.useEffect)(()=>{let e=new n2(i,a.domElement);u.current=e;let t=t=>{e.isLocked?o():t.target===a.domElement&&e.lock()};return document.addEventListener("click",t),()=>{document.removeEventListener("click",t),e.dispose()}},[i,a,o]),(0,el.useEffect)(()=>{let e=["camera1","camera2","camera3","camera4","camera5","camera6","camera7","camera8","camera9"];return r(t=>{for(let r=0;r{let e=e=>{e.preventDefault();let r=e.deltaY>0?-1:1,n=Math.max(.05,Math.min(.5,Math.abs(.01*e.deltaY)))*r;t(e=>Math.max(.1,Math.min(5,Math.round((e+n)*20)/20)))},r=a.domElement;return r.addEventListener("wheel",e,{passive:!1}),()=>{r.removeEventListener("wheel",e)}},[a]),(0,tx.useFrame)((t,r)=>{let{forward:a,backward:o,left:s,right:l,up:u,down:h}=n();(a||o||s||l||u||h)&&(i.getWorldDirection(c.current),c.current.normalize(),d.current.crossVectors(i.up,c.current).normalize(),f.current.set(0,0,0),a&&f.current.add(c.current),o&&f.current.sub(c.current),s&&f.current.add(d.current),l&&f.current.sub(d.current),u&&(f.current.y+=1),h&&(f.current.y-=1),f.current.lengthSq()>0&&(f.current.normalize().multiplyScalar(80*e*r),i.position.add(f.current)))}),null}let n5=[{name:"forward",keys:["KeyW"]},{name:"backward",keys:["KeyS"]},{name:"left",keys:["KeyA"]},{name:"right",keys:["KeyD"]},{name:"up",keys:["Space"]},{name:"down",keys:["ShiftLeft","ShiftRight"]},{name:"camera1",keys:["Digit1"]},{name:"camera2",keys:["Digit2"]},{name:"camera3",keys:["Digit3"]},{name:"camera4",keys:["Digit4"]},{name:"camera5",keys:["Digit5"]},{name:"camera6",keys:["Digit6"]},{name:"camera7",keys:["Digit7"]},{name:"camera8",keys:["Digit8"]},{name:"camera9",keys:["Digit9"]}];function n6(){return(0,el.useEffect)(()=>{let e=e=>{(e.metaKey||e.ctrlKey)&&"k"===e.key||e.metaKey&&e.stopImmediatePropagation()};return window.addEventListener("keydown",e,{capture:!0}),window.addEventListener("keyup",e,{capture:!0}),()=>{window.removeEventListener("keydown",e,{capture:!0}),window.removeEventListener("keyup",e,{capture:!0})}},[]),(0,es.jsx)(nW,{map:n5,children:(0,es.jsx)(n8,{})})}var n4=function(){var e;return"undefined"!=typeof window&&!!(null==(e=window.document)?void 0:e.createElement)}();function n7(e){return e?"self"in e?e.document:e.ownerDocument||document:document}function ie(e){return e?"self"in e?e.self:n7(e).defaultView||window:self}function it(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],{activeElement:r}=n7(e);if(!(null==r?void 0:r.nodeName))return null;if(ii(r)&&r.contentDocument)return it(r.contentDocument.body,t);if(t){let e=r.getAttribute("aria-activedescendant");if(e){let t=n7(r).getElementById(e);if(t)return t}}return r}function ir(e,t){return e===t||e.contains(t)}function ii(e){return"IFRAME"===e.tagName}function ia(e){let t=e.tagName.toLowerCase();return"button"===t||"input"===t&&!!e.type&&-1!==io.indexOf(e.type)}var io=["button","color","file","image","reset","submit"];function is(e){return"function"==typeof e.checkVisibility?e.checkVisibility():e.offsetWidth>0||e.offsetHeight>0||e.getClientRects().length>0}function il(e){try{let t=e instanceof HTMLInputElement&&null!==e.selectionStart,r="TEXTAREA"===e.tagName;return t||r||!1}catch(e){return!1}}function iu(e){return e.isContentEditable||il(e)}function ic(e){let t=0,r=0;if(il(e))t=e.selectionStart||0,r=e.selectionEnd||0;else if(e.isContentEditable){let n=n7(e).getSelection();if((null==n?void 0:n.rangeCount)&&n.anchorNode&&ir(e,n.anchorNode)&&n.focusNode&&ir(e,n.focusNode)){let i=n.getRangeAt(0),a=i.cloneRange();a.selectNodeContents(e),a.setEnd(i.startContainer,i.startOffset),t=a.toString().length,a.setEnd(i.endContainer,i.endOffset),r=a.toString().length}}return{start:t,end:r}}function id(e,t){let r=null==e?void 0:e.getAttribute("role");return r&&-1!==["dialog","menu","listbox","tree","grid"].indexOf(r)?r:t}function ih(e){if(!e)return null;let t=e=>"auto"===e||"scroll"===e;if(e.clientHeight&&e.scrollHeight>e.clientHeight){let{overflowY:r}=getComputedStyle(e);if(t(r))return e}else if(e.clientWidth&&e.scrollWidth>e.clientWidth){let{overflowX:r}=getComputedStyle(e);if(t(r))return e}return ih(e.parentElement)||document.scrollingElement||document.body}function im(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;n1?t-1:0),n=1;n{if(n){let t=setTimeout(e,n);return()=>clearTimeout(t)}let t=requestAnimationFrame(e);return()=>cancelAnimationFrame(t)})(()=>{e.removeEventListener(t,a,!0),r()}),a=()=>{i(),r()};return e.addEventListener(t,a,{once:!0,capture:!0}),i}function iO(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:window,i=[];try{for(let a of(n.document.addEventListener(e,t,r),Array.from(n.frames)))i.push(iO(e,t,r,a))}catch(e){}return()=>{try{n.document.removeEventListener(e,t,r)}catch(e){}for(let e of i)e()}}var ik={...el},i_=ik.useId;ik.useDeferredValue;var iU=ik.useInsertionEffect,ij=n4?el.useLayoutEffect:el.useEffect;function iJ(e){let t=(0,el.useRef)(()=>{throw Error("Cannot call an event handler while rendering.")});return iU?iU(()=>{t.current=e}):t.current=e,(0,el.useCallback)(function(){for(var e,r=arguments.length,n=Array(r),i=0;i{if(t.some(Boolean))return e=>{for(let r of t)iS(r,e)}},t)}function iK(e){if(i_){let t=i_();return e||t}let[t,r]=(0,el.useState)(e);return ij(()=>{if(e||t)return;let n=Math.random().toString(36).slice(2,8);r("id-".concat(n))},[e,t]),e||t}function iQ(e,t){let r=(0,el.useRef)(!1);(0,el.useEffect)(()=>{if(r.current)return e();r.current=!0},t),(0,el.useEffect)(()=>()=>{r.current=!1},[])}function iW(){return(0,el.useReducer)(()=>[],[])}function iV(e){return iJ("function"==typeof e?e:()=>e)}function iX(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],n=(0,el.useCallback)(r=>(e.wrapElement&&(r=e.wrapElement(r)),t(r)),[...r,e.wrapElement]);return{...e,wrapElement:n}}function iq(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1?arguments[1]:void 0,[r,n]=(0,el.useState)(null);return{portalRef:iN(n,t),portalNode:r,domReady:!e||r}}var iY=!1,iz=!1,iZ=0,i$=0;function i0(e){(function(e){let t=e.movementX||e.screenX-iZ,r=e.movementY||e.screenY-i$;return iZ=e.screenX,i$=e.screenY,t||r||!1})(e)&&(iz=!0)}function i1(){iz=!1}function i9(e){let t=el.forwardRef((t,r)=>e({...t,ref:r}));return t.displayName=e.displayName||e.name,t}function i2(e,t){return el.memo(e,t)}function i3(e,t){let r,{wrapElement:n,render:i,...a}=t,o=iN(t.ref,i&&(0,el.isValidElement)(i)&&("ref"in i.props||"ref"in i)?({...i.props}).ref||i.ref:null);if(el.isValidElement(i)){let e={...i.props,ref:o};r=el.cloneElement(i,function(e,t){let r={...e};for(let n in t){if(!iB(t,n))continue;if("className"===n){let n="className";r[n]=e[n]?"".concat(e[n]," ").concat(t[n]):t[n];continue}if("style"===n){let n="style";r[n]=e[n]?{...e[n],...t[n]}:t[n];continue}let i=t[n];if("function"==typeof i&&n.startsWith("on")){let t=e[n];if("function"==typeof t){r[n]=function(){for(var e=arguments.length,r=Array(e),n=0;n0&&void 0!==arguments[0]?arguments[0]:{};return e(t)};return t.displayName=e.name,t}function i5(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=el.createContext(void 0),n=el.createContext(void 0),i=()=>el.useContext(r),a=t=>e.reduceRight((e,r)=>(0,es.jsx)(r,{...t,children:e}),(0,es.jsx)(r.Provider,{...t}));return{context:r,scopedContext:n,useContext:i,useScopedContext:function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=el.useContext(n),r=i();return e?t:t||r},useProviderContext:()=>{let e=el.useContext(n),t=i();if(!e||e!==t)return t},ContextProvider:a,ScopedContextProvider:e=>(0,es.jsx)(a,{...e,children:t.reduceRight((t,r)=>(0,es.jsx)(r,{...e,children:t}),(0,es.jsx)(n.Provider,{...e}))})}}var i6=i5(),i4=i6.useContext;i6.useScopedContext,i6.useProviderContext;var i7=i5([i6.ContextProvider],[i6.ScopedContextProvider]),ae=i7.useContext;i7.useScopedContext;var at=i7.useProviderContext,ar=i7.ContextProvider,an=i7.ScopedContextProvider,ai=(0,el.createContext)(void 0),aa=(0,el.createContext)(void 0),ao=(0,el.createContext)(!0),as="input:not([type='hidden']):not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], button:not([disabled]), [tabindex], summary, iframe, object, embed, area[href], audio[controls], video[controls], [contenteditable]:not([contenteditable='false'])";function al(e){return!(!e.matches(as)||!is(e)||e.closest("[inert]"))}function au(e){if(!al(e)||0>Number.parseInt(e.getAttribute("tabindex")||"0",10))return!1;if(!("form"in e)||!e.form||e.checked||"radio"!==e.type)return!0;let t=e.form.elements.namedItem(e.name);if(!t||!("length"in t))return!0;let r=it(e);return!r||r===e||!("form"in r)||r.form!==e.form||r.name!==e.name}function ac(e,t){let r=Array.from(e.querySelectorAll(as));t&&r.unshift(e);let n=r.filter(al);return n.forEach((e,t)=>{if(ii(e)&&e.contentDocument){let r=e.contentDocument.body;n.splice(t,1,...ac(r))}}),n}function ad(e,t,r){let n=Array.from(e.querySelectorAll(as)),i=n.filter(au);return(t&&au(e)&&i.unshift(e),i.forEach((e,t)=>{if(ii(e)&&e.contentDocument){let n=ad(e.contentDocument.body,!1,r);i.splice(t,1,...n)}}),!i.length&&r)?n:i}function af(e,t){return function(e,t,r,n){let i=it(e),a=ac(e,t),o=a.indexOf(i),s=a.slice(o+1);return s.find(au)||(r?a.find(au):null)||(n?s[0]:null)||null}(document.body,!1,e,t)}function ah(e,t){return function(e,t,r,n){let i=it(e),a=ac(e,t).reverse(),o=a.indexOf(i),s=a.slice(o+1);return s.find(au)||(r?a.find(au):null)||(n?s[0]:null)||null}(document.body,!1,e,t)}function am(e){let t=it(e);if(!t)return!1;if(t===e)return!0;let r=t.getAttribute("aria-activedescendant");return!!r&&r===e.id}function ap(e){let t=it(e);if(!t)return!1;if(ir(e,t))return!0;let r=t.getAttribute("aria-activedescendant");return!!r&&"id"in e&&(r===e.id||!!e.querySelector("#".concat(CSS.escape(r))))}function aA(e){!ap(e)&&al(e)&&e.focus()}var ag=iR(),av=["text","search","url","tel","email","password","number","date","month","week","time","datetime","datetime-local"],aB=Symbol("safariFocusAncestor");function aC(e){return"input"===e.tagName.toLowerCase()&&!!e.type&&("radio"===e.type||"checkbox"===e.type)}function ay(e,t){return iJ(r=>{null==e||e(r),!r.defaultPrevented&&t&&(r.stopPropagation(),r.preventDefault())})}var ab=!1,aM=!0;function ax(e){let t=e.target;t&&"hasAttribute"in t&&!t.hasAttribute("data-focus-visible")&&(aM=!1)}function aE(e){e.metaKey||e.ctrlKey||e.altKey||(aM=!0)}var aF=i8(function(e){var t,r,n,i,a;let{focusable:o=!0,accessibleWhenDisabled:s,autoFocus:l,onFocusVisible:u,...c}=e,d=(0,el.useRef)(null);(0,el.useEffect)(()=>{o&&(ab||(iO("mousedown",ax,!0),iO("keydown",aE,!0),ab=!0))},[o]),ag&&(0,el.useEffect)(()=>{if(!o)return;let e=d.current;if(!e||!aC(e))return;let t="labels"in e?e.labels:null;if(!t)return;let r=()=>queueMicrotask(()=>e.focus());for(let e of t)e.addEventListener("mouseup",r);return()=>{for(let e of t)e.removeEventListener("mouseup",r)}},[o]);let f=o&&ix(c),h=!!f&&!s,[m,p]=(0,el.useState)(!1);(0,el.useEffect)(()=>{o&&h&&m&&p(!1)},[o,h,m]),(0,el.useEffect)(()=>{if(!o||!m)return;let e=d.current;if(!e||"undefined"==typeof IntersectionObserver)return;let t=new IntersectionObserver(()=>{al(e)||p(!1)});return t.observe(e),()=>t.disconnect()},[o,m]);let A=ay(c.onKeyPressCapture,f),g=ay(c.onMouseDownCapture,f),B=ay(c.onClickCapture,f),C=c.onMouseDown,y=iJ(e=>{if(null==C||C(e),e.defaultPrevented||!o)return;let t=e.currentTarget;if(!ag||iD(e)||!ia(t)&&!aC(t))return;let r=!1,n=()=>{r=!0};t.addEventListener("focusin",n,{capture:!0,once:!0});let i=function(e){for(;e&&!al(e);)e=e.closest(as);return e||null}(t.parentElement);i&&(i[aB]=!0),iH(t,"mouseup",()=>{t.removeEventListener("focusin",n,!0),i&&(i[aB]=!1),r||aA(t)})}),b=(e,t)=>{if(t&&(e.currentTarget=t),!o)return;let r=e.currentTarget;r&&am(r)&&(null==u||u(e),e.defaultPrevented||(r.dataset.focusVisible="true",p(!0)))},M=c.onKeyDownCapture,x=iJ(e=>{if(null==M||M(e),e.defaultPrevented||!o||m||e.metaKey||e.altKey||e.ctrlKey||!iI(e))return;let t=e.currentTarget;iH(t,"focusout",()=>b(e,t))}),E=c.onFocusCapture,F=iJ(e=>{if(null==E||E(e),e.defaultPrevented||!o)return;if(!iI(e))return void p(!1);let t=e.currentTarget;aM||function(e){let{tagName:t,readOnly:r,type:n}=e;return"TEXTAREA"===t&&!r||"SELECT"===t&&!r||("INPUT"!==t||r?!!e.isContentEditable||"combobox"===e.getAttribute("role")&&!!e.dataset.name:av.includes(n))}(e.target)?iH(e.target,"focusout",()=>b(e,t)):p(!1)}),S=c.onBlur,T=iJ(e=>{null==S||S(e),o&&iP(e)&&(e.currentTarget.removeAttribute("data-focus-visible"),p(!1))}),w=(0,el.useContext)(ao),R=iJ(e=>{o&&l&&e&&w&&queueMicrotask(()=>{!am(e)&&al(e)&&e.focus()})}),D=function(e,t){let r=e=>{if("string"==typeof e)return e},[n,i]=(0,el.useState)(()=>r(void 0));return ij(()=>{let t=e&&"current"in e?e.current:e;i((null==t?void 0:t.tagName.toLowerCase())||r(void 0))},[e,t]),n}(d),I=o&&(!D||"button"===D||"summary"===D||"input"===D||"select"===D||"textarea"===D||"a"===D),G=o&&(!D||"button"===D||"input"===D||"select"===D||"textarea"===D),L=c.style,P=(0,el.useMemo)(()=>h?{pointerEvents:"none",...L}:L,[h,L]);return c={"data-focus-visible":o&&m||void 0,"data-autofocus":l||void 0,"aria-disabled":f||void 0,...c,ref:iN(d,R,c.ref),style:P,tabIndex:(t=o,r=h,n=I,i=G,a=c.tabIndex,t?r?n&&!i?-1:void 0:n?a:a||0:a),disabled:!!G&&!!h||void 0,contentEditable:f?void 0:c.contentEditable,onKeyPressCapture:A,onClickCapture:B,onMouseDownCapture:g,onMouseDown:y,onKeyDownCapture:x,onFocusCapture:F,onBlur:T},iE(c)});function aS(e){let t=[];for(let r of e)t.push(...r);return t}function aT(e){return e.slice().reverse()}function aw(e,t,r){return iJ(n=>{var i;if(null==t||t(n),n.defaultPrevented||n.isPropagationStopped()||!iI(n)||"Shift"===n.key||"Control"===n.key||"Alt"===n.key||"Meta"===n.key||function(e){let t=e.target;return(!t||!!il(t))&&1===e.key.length&&!e.ctrlKey&&!e.metaKey}(n))return;let a=e.getState(),o=null==(i=ip(e,a.activeId))?void 0:i.element;if(!o)return;let{view:s,...l}=n;o!==(null==r?void 0:r.current)&&o.focus(),!function(e,t,r){let n=new KeyboardEvent(t,r);return e.dispatchEvent(n)}(o,n.type,l)&&n.preventDefault(),n.currentTarget.contains(o)&&n.stopPropagation()})}i9(function(e){return i3("div",aF(e))});var aR=i8(function(e){let{store:t,composite:r=!0,focusOnMove:n=r,moveOnKeyPress:i=!0,...a}=e,o=at();ib(t=t||o,!1);let s=(0,el.useRef)(null),l=(0,el.useRef)(null),u=function(e){let[t,r]=(0,el.useState)(!1),n=(0,el.useCallback)(()=>r(!0),[]),i=e.useState(t=>ip(e,t.activeId));return(0,el.useEffect)(()=>{let e=null==i?void 0:i.element;t&&e&&(r(!1),e.focus({preventScroll:!0}))},[i,t]),n}(t),c=t.useState("moves"),[,d]=function(e){let[t,r]=(0,el.useState)(null);return ij(()=>{if(null==t||!e)return;let r=null;return e(e=>(r=e,t)),()=>{e(r)}},[t,e]),[t,r]}(r?t.setBaseElement:null);(0,el.useEffect)(()=>{var e;if(!t||!c||!r||!n)return;let{activeId:i}=t.getState(),a=null==(e=ip(t,i))?void 0:e.element;a&&("scrollIntoView"in a?(a.focus({preventScroll:!0}),a.scrollIntoView({block:"nearest",inline:"nearest",...void 0})):a.focus())},[t,c,r,n]),ij(()=>{if(!t||!c||!r)return;let{baseElement:e,activeId:n}=t.getState();if(null!==n||!e)return;let i=l.current;l.current=null,i&&iG(i,{relatedTarget:e}),am(e)||e.focus()},[t,c,r]);let f=t.useState("activeId"),h=t.useState("virtualFocus");ij(()=>{var e;if(!t||!r||!h)return;let n=l.current;if(l.current=null,!n)return;let i=(null==(e=ip(t,f))?void 0:e.element)||it(n);i!==n&&iG(n,{relatedTarget:i})},[t,f,h,r]);let m=aw(t,a.onKeyDownCapture,l),p=aw(t,a.onKeyUpCapture,l),A=a.onFocusCapture,g=iJ(e=>{if(null==A||A(e),e.defaultPrevented||!t)return;let{virtualFocus:r}=t.getState();if(!r)return;let n=e.relatedTarget,i=function(e){let t=e[iA];return delete e[iA],t}(e.currentTarget);iI(e)&&i&&(e.stopPropagation(),l.current=n)}),B=a.onFocus,C=iJ(e=>{if(null==B||B(e),e.defaultPrevented||!r||!t)return;let{relatedTarget:n}=e,{virtualFocus:i}=t.getState();i?iI(e)&&!ig(t,n)&&queueMicrotask(u):iI(e)&&t.setActiveId(null)}),y=a.onBlurCapture,b=iJ(e=>{var r;if(null==y||y(e),e.defaultPrevented||!t)return;let{virtualFocus:n,activeId:i}=t.getState();if(!n)return;let a=null==(r=ip(t,i))?void 0:r.element,o=e.relatedTarget,s=ig(t,o),u=l.current;l.current=null,iI(e)&&s?(o===a?u&&u!==o&&iG(u,e):a?iG(a,e):u&&iG(u,e),e.stopPropagation()):!ig(t,e.target)&&a&&iG(a,e)}),M=a.onKeyDown,x=iV(i),E=iJ(e=>{var r;if(null==M||M(e),e.nativeEvent.isComposing||e.defaultPrevented||!t||!iI(e))return;let{orientation:n,renderedItems:i,activeId:a}=t.getState(),o=ip(t,a);if(null==(r=null==o?void 0:o.element)?void 0:r.isConnected)return;let s="horizontal"!==n,l="vertical"!==n,u=i.some(e=>!!e.rowId);if(("ArrowLeft"===e.key||"ArrowRight"===e.key||"Home"===e.key||"End"===e.key)&&il(e.currentTarget))return;let c={ArrowUp:(u||s)&&(()=>{if(u){let e=aS(aT(function(e){let t=[];for(let r of e){let e=t.find(e=>{var t;return(null==(t=e[0])?void 0:t.rowId)===r.rowId});e?e.push(r):t.push([r])}return t}(i))).find(e=>!e.disabled);return null==e?void 0:e.id}return null==t?void 0:t.last()}),ArrowRight:(u||l)&&t.first,ArrowDown:(u||s)&&t.first,ArrowLeft:(u||l)&&t.last,Home:t.first,End:t.last,PageUp:t.first,PageDown:t.last}[e.key];if(c){let r=c();if(void 0!==r){if(!x(e))return;e.preventDefault(),t.move(r)}}});return a=iX(a,e=>(0,es.jsx)(ar,{value:t,children:e}),[t]),a={"aria-activedescendant":t.useState(e=>{var n;if(t&&r&&e.virtualFocus)return null==(n=ip(t,e.activeId))?void 0:n.id}),...a,ref:iN(s,d,a.ref),onKeyDownCapture:m,onKeyUpCapture:p,onFocusCapture:g,onFocus:C,onBlurCapture:b,onKeyDown:E},a=aF({focusable:t.useState(e=>r&&(e.virtualFocus||null===e.activeId)),...a})});i9(function(e){return i3("div",aR(e))});var aD=i5();aD.useContext,aD.useScopedContext;var aI=aD.useProviderContext,aG=i5([aD.ContextProvider],[aD.ScopedContextProvider]);aG.useContext,aG.useScopedContext;var aL=aG.useProviderContext,aP=aG.ContextProvider,aH=aG.ScopedContextProvider,aO=(0,el.createContext)(void 0),ak=(0,el.createContext)(void 0),a_=i5([aP],[aH]);a_.useContext,a_.useScopedContext;var aU=a_.useProviderContext,aj=a_.ContextProvider,aJ=a_.ScopedContextProvider,aN=i8(function(e){let{store:t,...r}=e,n=aU();return t=t||n,r={...r,ref:iN(null==t?void 0:t.setAnchorElement,r.ref)}});i9(function(e){return i3("div",aN(e))});var aK=(0,el.createContext)(void 0),aQ=i5([aj,ar],[aJ,an]),aW=aQ.useContext,aV=aQ.useScopedContext,aX=aQ.useProviderContext,aq=aQ.ContextProvider,aY=aQ.ScopedContextProvider,az=(0,el.createContext)(void 0),aZ=(0,el.createContext)(!1);function a$(e,t){let r=e.__unstableInternals;return ib(r,"Invalid store"),r[t]}function a0(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;n2&&void 0!==arguments[2]?arguments[2]:d;return r.add(t),m.set(t,e),()=>{var e;null==(e=h.get(t))||e(),h.delete(t),m.delete(t),r.delete(t)}},A=function(e,t){var n,s;let l=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!iB(i,e))return;let c=(s=i[e],"function"==typeof t?t("function"==typeof s?s():s):t);if(c===i[e])return;if(!l)for(let t of r)null==(n=null==t?void 0:t.setState)||n.call(t,e,c);let p=i;i={...i,[e]:c};let A=Symbol();o=A,u.add(e);let g=(t,r,n)=>{var a;let o=m.get(t);(!o||o.some(t=>n?n.has(t):t===e))&&(null==(a=h.get(t))||a(),h.set(t,t(i,r)))};for(let e of d)g(e,p);queueMicrotask(()=>{if(o!==A)return;let e=i;for(let e of f)g(e,a,u);a=e,u.clear()})},g={getState:()=>i,setState:A,__unstableInternals:{setup:e=>(c.add(e),()=>c.delete(e)),init:()=>{let e=l.size,t=Symbol();l.add(t);let n=()=>{l.delete(t),l.size||s()};if(e)return n;let a=Object.keys(i).map(e=>iC(...r.map(t=>{var r;let n=null==(r=null==t?void 0:t.getState)?void 0:r.call(t);if(n&&iB(n,e))return a3(t,[e],t=>{A(e,t[e],!0)})}))),o=[];for(let e of c)o.push(e());return s=iC(...a,...o,...r.map(a9)),n},subscribe:(e,t)=>p(e,t),sync:(e,t)=>(h.set(t,t(i,i)),p(e,t)),batch:(e,t)=>(h.set(t,t(i,a)),p(e,t,f)),pick:e=>a0(function(e,t){let r={};for(let n of t)iB(e,n)&&(r[n]=e[n]);return r}(i,e),g),omit:e=>a0(function(e,t){let r={...e};for(let e of t)iB(r,e)&&delete r[e];return r}(i,e),g)}};return g}function a1(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;n1?t-1:0),n=1;n1?t-1:0),n=1;n1?t-1:0),n=1;n1?t-1:0),n=1;n1?t-1:0),n=1;n!e.disabled&&e.value);return(null==n?void 0:n.value)===t}function oe(e,t){return!!t&&null!=e&&(e=e.normalize("NFD").replace(/[\u0300-\u036f]/g,""),t.length>e.length&&0===t.toLowerCase().indexOf(e.toLowerCase()))}var ot=i8(function(e){let{store:t,focusable:r=!0,autoSelect:n=!1,getAutoSelectId:i,setValueOnChange:a,showMinLength:o=0,showOnChange:s,showOnMouseDown:l,showOnClick:u=l,showOnKeyDown:c,showOnKeyPress:d=c,blurActiveItemOnClick:f,setValueOnClick:h=!0,moveOnKeyPress:m=!0,autoComplete:p="list",...A}=e,g=aX();ib(t=t||g,!1);let B=(0,el.useRef)(null),[C,y]=iW(),b=(0,el.useRef)(!1),M=(0,el.useRef)(!1),x=t.useState(e=>e.virtualFocus&&n),E="inline"===p||"both"===p,[F,S]=(0,el.useState)(E);!function(e,t){let r=(0,el.useRef)(!1);ij(()=>{if(r.current)return e();r.current=!0},t),ij(()=>()=>{r.current=!1},[])}(()=>{E&&S(!0)},[E]);let T=t.useState("value"),w=(0,el.useRef)();(0,el.useEffect)(()=>a3(t,["selectedValue","activeId"],(e,t)=>{w.current=t.selectedValue}),[]);let R=t.useState(e=>{var t;if(E&&F){if(e.activeValue&&Array.isArray(e.selectedValue)&&(e.selectedValue.includes(e.activeValue)||(null==(t=w.current)?void 0:t.includes(e.activeValue))))return;return e.activeValue}}),D=t.useState("renderedItems"),I=t.useState("open"),G=t.useState("contentElement"),L=(0,el.useMemo)(()=>{if(!E||!F)return T;if(a7(D,R,x)){if(oe(T,R)){let e=(null==R?void 0:R.slice(T.length))||"";return T+e}return T}return R||T},[E,F,D,R,x,T]);(0,el.useEffect)(()=>{let e=B.current;if(!e)return;let t=()=>S(!0);return e.addEventListener("combobox-item-move",t),()=>{e.removeEventListener("combobox-item-move",t)}},[]),(0,el.useEffect)(()=>{if(!E||!F||!R||!a7(D,R,x)||!oe(T,R))return;let e=iv;return queueMicrotask(()=>{let t=B.current;if(!t)return;let{start:r,end:n}=ic(t),i=T.length,a=R.length;im(t,i,a),e=()=>{if(!am(t))return;let{start:e,end:o}=ic(t);e===i&&o===a&&im(t,r,n)}}),()=>e()},[C,E,F,R,D,x,T]);let P=(0,el.useRef)(null),H=iJ(i),O=(0,el.useRef)(null);(0,el.useEffect)(()=>{if(!I||!G)return;let e=ih(G);if(!e)return;P.current=e;let r=()=>{b.current=!1},n=()=>{if(!t||!b.current)return;let{activeId:e}=t.getState();null!==e&&e!==O.current&&(b.current=!1)},i={passive:!0,capture:!0};return e.addEventListener("wheel",r,i),e.addEventListener("touchmove",r,i),e.addEventListener("scroll",n,i),()=>{e.removeEventListener("wheel",r,!0),e.removeEventListener("touchmove",r,!0),e.removeEventListener("scroll",n,!0)}},[I,G,t]),ij(()=>{T&&(M.current||(b.current=!0))},[T]),ij(()=>{"always"!==x&&I||(b.current=I)},[x,I]);let k=t.useState("resetValueOnSelect");iQ(()=>{var e,r;let n=b.current;if(!t||!I||!n&&!k)return;let{baseElement:i,contentElement:a,activeId:o}=t.getState();if(!i||am(i)){if(null==a?void 0:a.hasAttribute("data-placing")){let e=new MutationObserver(y);return e.observe(a,{attributeFilter:["data-placing"]}),()=>e.disconnect()}if(x&&n){let r=H(D),n=void 0!==r?r:null!=(e=function(e){let t=e.find(e=>{var t;return!e.disabled&&(null==(t=e.element)?void 0:t.getAttribute("role"))!=="tab"});return null==t?void 0:t.id}(D))?e:t.first();O.current=n,t.move(null!=n?n:null)}else{let e=null==(r=t.item(o||t.first()))?void 0:r.element;e&&"scrollIntoView"in e&&e.scrollIntoView({block:"nearest",inline:"nearest"})}}},[t,I,C,T,x,k,H,D]),(0,el.useEffect)(()=>{if(!E)return;let e=B.current;if(!e)return;let r=[e,G].filter(e=>!!e),n=e=>{r.every(t=>iP(e,t))&&(null==t||t.setValue(L))};for(let e of r)e.addEventListener("focusout",n);return()=>{for(let e of r)e.removeEventListener("focusout",n)}},[E,G,t,L]);let _=e=>e.currentTarget.value.length>=o,U=A.onChange,j=iV(null!=s?s:_),J=iV(null!=a?a:!t.tag),N=iJ(e=>{if(null==U||U(e),e.defaultPrevented||!t)return;let r=e.currentTarget,{value:n,selectionStart:i,selectionEnd:a}=r,o=e.nativeEvent;if(b.current=!0,"input"===o.type&&(o.isComposing&&(b.current=!1,M.current=!0),E)){let e="insertText"===o.inputType||"insertCompositionText"===o.inputType,t=i===n.length;S(e&&t)}if(J(e)){let e=n===t.getState().value;t.setValue(n),queueMicrotask(()=>{im(r,i,a)}),E&&x&&e&&y()}j(e)&&t.show(),x&&b.current||t.setActiveId(null)}),K=A.onCompositionEnd,Q=iJ(e=>{b.current=!0,M.current=!1,null==K||K(e),!e.defaultPrevented&&x&&y()}),W=A.onMouseDown,V=iV(null!=f?f:()=>!!(null==t?void 0:t.getState().includesBaseElement)),X=iV(h),q=iV(null!=u?u:_),Y=iJ(e=>{null==W||W(e),e.defaultPrevented||e.button||e.ctrlKey||t&&(V(e)&&t.setActiveId(null),X(e)&&t.setValue(L),q(e)&&iH(e.currentTarget,"mouseup",t.show))}),z=A.onKeyDown,Z=iV(null!=d?d:_),$=iJ(e=>{if(null==z||z(e),e.repeat||(b.current=!1),e.defaultPrevented||e.ctrlKey||e.altKey||e.shiftKey||e.metaKey||!t)return;let{open:r}=t.getState();!r&&("ArrowUp"===e.key||"ArrowDown"===e.key)&&Z(e)&&(e.preventDefault(),t.show())}),ee=A.onBlur,et=iJ(e=>{if(b.current=!1,null==ee||ee(e),e.defaultPrevented)return}),er=iK(A.id),en=t.useState(e=>null===e.activeId);return A={id:er,role:"combobox","aria-autocomplete":"inline"===p||"list"===p||"both"===p||"none"===p?p:void 0,"aria-haspopup":id(G,"listbox"),"aria-expanded":I,"aria-controls":null==G?void 0:G.id,"data-active-item":en||void 0,value:L,...A,ref:iN(B,A.ref),onChange:N,onCompositionEnd:Q,onMouseDown:Y,onKeyDown:$,onBlur:et},A=aR({store:t,focusable:r,...A,moveOnKeyPress:e=>!iM(m,e)&&(E&&S(!0),!0)}),{autoComplete:"off",...A=aN({store:t,...A})}}),or=i9(function(e){return i3("input",ot(e))});function on(e){let t=e.relatedTarget;return(null==t?void 0:t.nodeType)===Node.ELEMENT_NODE?t:null}var oi=Symbol("composite-hover"),oa=i8(function(e){let{store:t,focusOnHover:r=!0,blurOnHoverEnd:n=!!r,...i}=e,a=ae();ib(t=t||a,!1);let o=((0,el.useEffect)(()=>{iY||(iO("mousemove",i0,!0),iO("mousedown",i1,!0),iO("mouseup",i1,!0),iO("keydown",i1,!0),iO("scroll",i1,!0),iY=!0)},[]),iJ(()=>iz)),s=i.onMouseMove,l=iV(r),u=iJ(e=>{if((null==s||s(e),!e.defaultPrevented&&o())&&l(e)){if(!ap(e.currentTarget)){let e=null==t?void 0:t.getState().baseElement;e&&!am(e)&&e.focus()}null==t||t.setActiveId(e.currentTarget.id)}}),c=i.onMouseLeave,d=iV(n),f=iJ(e=>{var r;null==c||c(e),!(e.defaultPrevented||!o()||function(e){let t=on(e);return!!t&&ir(e.currentTarget,t)}(e)||function(e){let t=on(e);if(!t)return!1;do{if(iB(t,oi)&&t[oi])return!0;t=t.parentElement}while(t)return!1}(e))&&l(e)&&d(e)&&(null==t||t.setActiveId(null),null==(r=null==t?void 0:t.getState().baseElement)||r.focus())}),h=(0,el.useCallback)(e=>{e&&(e[oi]=!0)},[]);return iE(i={...i,ref:iN(h,i.ref),onMouseMove:u,onMouseLeave:f})});i2(i9(function(e){return i3("div",oa(e))}));var oo=i8(function(e){let{store:t,shouldRegisterItem:r=!0,getItem:n=iy,element:i,...a}=e,o=i4();t=t||o;let s=iK(a.id),l=(0,el.useRef)(i);return(0,el.useEffect)(()=>{let e=l.current;if(!s||!e||!r)return;let i=n({id:s,element:e});return null==t?void 0:t.renderItem(i)},[s,r,n,t]),iE(a={...a,ref:iN(l,a.ref)})});function os(e){if(!e.isTrusted)return!1;let t=e.currentTarget;return"Enter"===e.key?ia(t)||"SUMMARY"===t.tagName||"A"===t.tagName:" "===e.key&&(ia(t)||"SUMMARY"===t.tagName||"INPUT"===t.tagName||"SELECT"===t.tagName)}i9(function(e){return i3("div",oo(e))});var ol=Symbol("command"),ou=i8(function(e){let{clickOnEnter:t=!0,clickOnSpace:r=!0,...n}=e,i=(0,el.useRef)(null),[a,o]=(0,el.useState)(!1);(0,el.useEffect)(()=>{i.current&&o(ia(i.current))},[]);let[s,l]=(0,el.useState)(!1),u=(0,el.useRef)(!1),c=ix(n),[d,f]=function(e,t,r){let n=e.onLoadedMetadataCapture,i=(0,el.useMemo)(()=>Object.assign(()=>{},{...n,[t]:r}),[n,t,r]);return[null==n?void 0:n[t],{onLoadedMetadataCapture:i}]}(n,ol,!0),h=n.onKeyDown,m=iJ(e=>{null==h||h(e);let n=e.currentTarget;if(e.defaultPrevented||d||c||!iI(e)||il(n)||n.isContentEditable)return;let i=t&&"Enter"===e.key,a=r&&" "===e.key,o="Enter"===e.key&&!t,s=" "===e.key&&!r;if(o||s)return void e.preventDefault();if(i||a){let t=os(e);if(i){if(!t){e.preventDefault();let{view:t,...r}=e,i=()=>iL(n,r);n4&&/firefox\//i.test(navigator.userAgent)?iH(n,"keyup",i):queueMicrotask(i)}}else a&&(u.current=!0,t||(e.preventDefault(),l(!0)))}}),p=n.onKeyUp,A=iJ(e=>{if(null==p||p(e),e.defaultPrevented||d||c||e.metaKey)return;let t=r&&" "===e.key;if(u.current&&t&&(u.current=!1,!os(e))){e.preventDefault(),l(!1);let t=e.currentTarget,{view:r,...n}=e;queueMicrotask(()=>iL(t,n))}});return aF(n={"data-active":s||void 0,type:a?"button":void 0,...f,...n,ref:iN(i,n.ref),onKeyDown:m,onKeyUp:A})});i9(function(e){return i3("button",ou(e))});var{useSyncExternalStore:oc}=e.i(2239).default,od=()=>()=>{};function of(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:iy,r=el.useCallback(t=>e?a2(e,null,t):od(),[e]),n=()=>{let r="string"==typeof t?t:null,n="function"==typeof t?t:null,i=null==e?void 0:e.getState();return n?n(i):i&&r&&iB(i,r)?i[r]:void 0};return oc(r,n,n)}function oh(e,t){let r=el.useRef({}),n=el.useCallback(t=>e?a2(e,null,t):od(),[e]),i=()=>{let n=null==e?void 0:e.getState(),i=!1,a=r.current;for(let e in t){let r=t[e];if("function"==typeof r){let t=r(n);t!==a[e]&&(a[e]=t,i=!0)}if("string"==typeof r){if(!n||!iB(n,r))continue;let t=n[r];t!==a[e]&&(a[e]=t,i=!0)}}return i&&(r.current={...a}),r.current};return oc(n,i,i)}function om(e,t,r,n){let i=iB(t,r)?t[r]:void 0,a=function(e){let t=(0,el.useRef)(e);return ij(()=>{t.current=e}),t}({value:i,setValue:n?t[n]:void 0});ij(()=>a3(e,[r],(e,t)=>{let{value:n,setValue:i}=a.current;i&&e[r]!==t[r]&&e[r]!==n&&i(e[r])}),[e,r]),ij(()=>{if(void 0!==i)return e.setState(r,i),a8(e,[r],()=>{void 0!==i&&e.setState(r,i)})})}function op(e,t){let[r,n]=el.useState(()=>e(t));ij(()=>a9(r),[r]);let i=el.useCallback(e=>of(r,e),[r]);return[el.useMemo(()=>({...r,useState:i}),[r,i]),iJ(()=>{n(r=>e({...t,...r.getState()}))})]}function oA(e,t,r){var n;let i,a,o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(!t||!r)return;let{renderedItems:s}=t.getState(),l=ih(e);if(!l)return;let u=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=e.clientHeight,{top:n}=e.getBoundingClientRect(),i=1.5*Math.max(.875*r,r-40),a=t?r-i+n:i+n;return"HTML"===e.tagName?a+e.scrollTop:a}(l,o);for(let e=0;e1&&void 0!==arguments[1]&&arguments[1],{top:r}=e.getBoundingClientRect();return t?r+e.clientHeight:r}(l,o)-u,d=Math.abs(c);if(o&&c<=0||!o&&c>=0){void 0!==a&&ar||(e&&(null==h?void 0:h.baseElement)&&h.baseElement===e.baseElement?h.id:void 0),baseElement:e=>(null==e?void 0:e.baseElement)||void 0,isActiveItem:e=>!!e&&e.activeId===d,ariaSetSize:e=>null!=s?s:e&&(null==h?void 0:h.ariaSetSize)&&h.baseElement===e.baseElement?h.ariaSetSize:void 0,ariaPosInSet(e){if(null!=l)return l;if(!e||!(null==h?void 0:h.ariaPosInSet)||h.baseElement!==e.baseElement)return;let t=e.renderedItems.filter(e=>e.rowId===p);return h.ariaPosInSet+t.findIndex(e=>e.id===d)},isTabbable(e){if(!(null==e?void 0:e.renderedItems.length))return!0;if(e.virtualFocus)return!1;if(a)return!0;if(null===e.activeId)return!1;let r=null==t?void 0:t.item(e.activeId);return null!=r&&!!r.disabled||null==r||!r.element||e.activeId===d}}),b=(0,el.useCallback)(e=>{var t;let r={...e,id:d||e.id,rowId:p,disabled:!!m,children:null==(t=e.element)?void 0:t.textContent};return o?o(r):r},[d,p,m,o]),M=u.onFocus,x=(0,el.useRef)(!1),E=iJ(e=>{var r,n;if(null==M||M(e),e.defaultPrevented||iD(e)||!d||!t||(r=t,!iI(e)&&ig(r,e.target)))return;let{virtualFocus:i,baseElement:a}=t.getState();if(t.setActiveId(d),iu(e.currentTarget)&&function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(il(e))e.setSelectionRange(t?e.value.length:0,e.value.length);else if(e.isContentEditable){let r=n7(e).getSelection();null==r||r.selectAllChildren(e),t&&(null==r||r.collapseToEnd())}}(e.currentTarget),i&&iI(e))!iu(n=e.currentTarget)&&("INPUT"!==n.tagName||ia(n))&&(null==a?void 0:a.isConnected)&&((iR()&&e.currentTarget.hasAttribute("data-autofocus")&&e.currentTarget.scrollIntoView({block:"nearest",inline:"nearest"}),x.current=!0,e.relatedTarget===a||ig(t,e.relatedTarget))?(a[iA]=!0,a.focus({preventScroll:!0})):a.focus())}),F=u.onBlurCapture,S=iJ(e=>{if(null==F||F(e),e.defaultPrevented)return;let r=null==t?void 0:t.getState();(null==r?void 0:r.virtualFocus)&&x.current&&(x.current=!1,e.preventDefault(),e.stopPropagation())}),T=u.onKeyDown,w=iV(n),R=iV(i),D=iJ(e=>{if(null==T||T(e),e.defaultPrevented||!iI(e)||!t)return;let{currentTarget:r}=e,n=t.getState(),i=t.item(d),a=!!(null==i?void 0:i.rowId),o="horizontal"!==n.orientation,s="vertical"!==n.orientation,l=()=>!(!a&&!s&&n.baseElement&&il(n.baseElement)),u={ArrowUp:(a||o)&&t.up,ArrowRight:(a||s)&&t.next,ArrowDown:(a||o)&&t.down,ArrowLeft:(a||s)&&t.previous,Home:()=>{if(l())return!a||e.ctrlKey?null==t?void 0:t.first():null==t?void 0:t.previous(-1)},End:()=>{if(l())return!a||e.ctrlKey?null==t?void 0:t.last():null==t?void 0:t.next(-1)},PageUp:()=>oA(r,t,null==t?void 0:t.up,!0),PageDown:()=>oA(r,t,null==t?void 0:t.down)}[e.key];if(u){if(iu(r)){let t=ic(r),n=s&&"ArrowLeft"===e.key,i=s&&"ArrowRight"===e.key,a=o&&"ArrowUp"===e.key,l=o&&"ArrowDown"===e.key;if(i||l){let{length:e}=function(e){if(il(e))return e.value;if(e.isContentEditable){let t=n7(e).createRange();return t.selectNodeContents(e),t.toString()}return""}(r);if(t.end!==e)return}else if((n||a)&&0!==t.start)return}let n=u();if(w(e)||void 0!==n){if(!R(e))return;e.preventDefault(),t.move(n)}}}),I=(0,el.useMemo)(()=>({id:d,baseElement:A}),[d,A]);return u={id:d,"data-active-item":g||void 0,...u=iX(u,e=>(0,es.jsx)(ai.Provider,{value:I,children:e}),[I]),ref:iN(f,u.ref),tabIndex:y?u.tabIndex:-1,onFocus:E,onBlurCapture:S,onKeyDown:D},u=ou(u),iE({...u=oo({store:t,...u,getItem:b,shouldRegisterItem:!!d&&u.shouldRegisterItem}),"aria-setsize":B,"aria-posinset":C})});i2(i9(function(e){return i3("button",og(e))}));var ov=i8(function(e){var t,r;let{store:n,value:i,hideOnClick:a,setValueOnClick:o,selectValueOnClick:s=!0,resetValueOnSelect:l,focusOnHover:u=!1,moveOnKeyPress:c=!0,getItem:d,...f}=e,h=aV();ib(n=n||h,!1);let{resetValueOnSelectState:m,multiSelectable:p,selected:A}=oh(n,{resetValueOnSelectState:"resetValueOnSelect",multiSelectable:e=>Array.isArray(e.selectedValue),selected:e=>(function(e,t){if(null!=t)return null!=e&&(Array.isArray(e)?e.includes(t):e===t)})(e.selectedValue,i)}),g=(0,el.useCallback)(e=>{let t={...e,value:i};return d?d(t):t},[i,d]);o=null!=o?o:!p,a=null!=a?a:null!=i&&!p;let B=f.onClick,C=iV(o),y=iV(s),b=iV(null!=(t=null!=l?l:m)?t:p),M=iV(a),x=iJ(e=>{null==B||B(e),!(e.defaultPrevented||function(e){let t=e.currentTarget;if(!t)return!1;let r=t.tagName.toLowerCase();return!!e.altKey&&("a"===r||"button"===r&&"submit"===t.type||"input"===r&&"submit"===t.type)}(e))&&!function(e){let t=e.currentTarget;if(!t)return!1;let r=iw();if(r&&!e.metaKey||!r&&!e.ctrlKey)return!1;let n=t.tagName.toLowerCase();return"a"===n||"button"===n&&"submit"===t.type||"input"===n&&"submit"===t.type}(e)&&(null!=i&&(y(e)&&(b(e)&&(null==n||n.resetValue()),null==n||n.setSelectedValue(e=>Array.isArray(e)?e.includes(i)?e.filter(e=>e!==i):[...e,i]:i)),C(e)&&(null==n||n.setValue(i))),M(e)&&(null==n||n.hide()))}),E=f.onKeyDown,F=iJ(e=>{if(null==E||E(e),e.defaultPrevented)return;let t=null==n?void 0:n.getState().baseElement;!(!t||am(t))&&(1===e.key.length||"Backspace"===e.key||"Delete"===e.key)&&(queueMicrotask(()=>t.focus()),il(t)&&(null==n||n.setValue(t.value)))});p&&null!=A&&(f={"aria-selected":A,...f}),f=iX(f,e=>(0,es.jsx)(az.Provider,{value:i,children:(0,es.jsx)(aZ.Provider,{value:null!=A&&A,children:e})}),[i,A]),f={role:null!=(r=({menu:"menuitem",listbox:"option",tree:"treeitem"})[(0,el.useContext)(aK)])?r:"option",children:i,...f,onClick:x,onKeyDown:F};let S=iV(c);return f=og({store:n,...f,getItem:g,moveOnKeyPress:e=>{if(!S(e))return!1;let t=new Event("combobox-item-move"),r=null==n?void 0:n.getState().baseElement;return null==r||r.dispatchEvent(t),!0}}),f=oa({store:n,focusOnHover:u,...f})}),oB=i2(i9(function(e){return i3("div",ov(e))})),oC=e.i(74080);function oy(e,t){let r=setTimeout(t,e);return()=>clearTimeout(r)}function ob(){for(var e=arguments.length,t=Array(e),r=0;r{let r=t.endsWith("ms")?1:1e3,n=Number.parseFloat(t||"0s")*r;return n>e?n:e},0)}function oM(e,t,r){return!r&&!1!==t&&(!e||!!t)}var ox=i8(function(e){let{store:t,alwaysVisible:r,...n}=e,i=aI();ib(t=t||i,!1);let a=(0,el.useRef)(null),o=iK(n.id),[s,l]=(0,el.useState)(null),u=t.useState("open"),c=t.useState("mounted"),d=t.useState("animated"),f=t.useState("contentElement"),h=of(t.disclosure,"contentElement");ij(()=>{a.current&&(null==t||t.setContentElement(a.current))},[t]),ij(()=>{let e;return null==t||t.setState("animated",t=>(e=t,!0)),()=>{void 0!==e&&(null==t||t.setState("animated",e))}},[t]),ij(()=>{if(d){var e;let t;return(null==f?void 0:f.isConnected)?(e=()=>{l(u?"enter":c?"leave":null)},t=requestAnimationFrame(()=>{t=requestAnimationFrame(e)}),()=>cancelAnimationFrame(t)):void l(null)}},[d,f,u,c]),ij(()=>{if(!t||!d||!s||!f)return;let e=()=>null==t?void 0:t.setState("animating",!1),r=()=>(0,oC.flushSync)(e);if("leave"===s&&u||"enter"===s&&!u)return;if("number"==typeof d)return oy(d,r);let{transitionDuration:n,animationDuration:i,transitionDelay:a,animationDelay:o}=getComputedStyle(f),{transitionDuration:l="0",animationDuration:c="0",transitionDelay:m="0",animationDelay:p="0"}=h?getComputedStyle(h):{},A=ob(a,o,m,p)+ob(n,i,l,c);if(!A){"enter"===s&&t.setState("animated",!1),e();return}return oy(Math.max(A-1e3/60,0),r)},[t,d,f,h,u,s]);let m=oM(c,(n=iX(n,e=>(0,es.jsx)(aH,{value:t,children:e}),[t])).hidden,r),p=n.style,A=(0,el.useMemo)(()=>m?{...p,display:"none"}:p,[m,p]);return iE(n={id:o,"data-open":u||void 0,"data-enter":"enter"===s||void 0,"data-leave":"leave"===s||void 0,hidden:m,...n,ref:iN(o?t.setContentElement:null,a,n.ref),style:A})}),oE=i9(function(e){return i3("div",ox(e))});i9(function(e){let{unmountOnHide:t,...r}=e,n=aI();return!1===of(r.store||n,e=>!t||(null==e?void 0:e.mounted))?null:(0,es.jsx)(oE,{...r})});var oF=i8(function(e){let{store:t,alwaysVisible:r,...n}=e,i=aV(!0),a=aW(),o=!!(t=t||a)&&t===i;ib(t,!1);let s=(0,el.useRef)(null),l=iK(n.id),u=t.useState("mounted"),c=oM(u,n.hidden,r),d=c?{...n.style,display:"none"}:n.style,f=t.useState(e=>Array.isArray(e.selectedValue)),h=function(e,t,r){let n=function(e){let[t]=(0,el.useState)(e);return t}(r),[i,a]=(0,el.useState)(n);return(0,el.useEffect)(()=>{let r=e&&"current"in e?e.current:e;if(!r)return;let i=()=>{let e=r.getAttribute(t);a(null==e?n:e)},o=new MutationObserver(i);return o.observe(r,{attributeFilter:[t]}),i(),()=>o.disconnect()},[e,t,n]),i}(s,"role",n.role),m="listbox"===h||"tree"===h||"grid"===h,[p,A]=(0,el.useState)(!1),g=t.useState("contentElement");ij(()=>{if(!u)return;let e=s.current;if(!e||g!==e)return;let t=()=>{A(!!e.querySelector("[role='listbox']"))},r=new MutationObserver(t);return r.observe(e,{subtree:!0,childList:!0,attributeFilter:["role"]}),t(),()=>r.disconnect()},[u,g]),p||(n={role:"listbox","aria-multiselectable":m&&f||void 0,...n}),n=iX(n,e=>(0,es.jsx)(aY,{value:t,children:(0,es.jsx)(aK.Provider,{value:h,children:e})}),[t,h]);let B=!l||i&&o?null:t.setContentElement;return iE(n={id:l,hidden:c,...n,ref:iN(B,s,n.ref),style:d})}),oS=i9(function(e){return i3("div",oF(e))}),oT=(0,el.createContext)(null),ow=i8(function(e){return{...e,style:{border:0,clip:"rect(0 0 0 0)",height:"1px",margin:"-1px",overflow:"hidden",padding:0,position:"absolute",whiteSpace:"nowrap",width:"1px",...e.style}}});i9(function(e){return i3("span",ow(e))});var oR=i8(function(e){return ow(e={"data-focus-trap":"",tabIndex:0,"aria-hidden":!0,...e,style:{position:"fixed",top:0,left:0,...e.style}})}),oD=i9(function(e){return i3("span",oR(e))});function oI(e){queueMicrotask(()=>{null==e||e.focus()})}var oG=i8(function(e){let{preserveTabOrder:t,preserveTabOrderAnchor:r,portalElement:n,portalRef:i,portal:a=!0,...o}=e,s=(0,el.useRef)(null),l=iN(s,o.ref),u=(0,el.useContext)(oT),[c,d]=(0,el.useState)(null),[f,h]=(0,el.useState)(null),m=(0,el.useRef)(null),p=(0,el.useRef)(null),A=(0,el.useRef)(null),g=(0,el.useRef)(null);return ij(()=>{let e=s.current;if(!e||!a)return void d(null);let t=n?"function"==typeof n?n(e):n:n7(e).createElement("div");if(!t)return void d(null);let r=t.isConnected;if(r||(u||n7(e).body).appendChild(t),t.id||(t.id=e.id?"portal/".concat(e.id):function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"id";return"".concat(e?"".concat(e,"-"):"").concat(Math.random().toString(36).slice(2,8))}()),d(t),iS(i,t),!r)return()=>{t.remove(),iS(i,null)}},[a,n,u,i]),ij(()=>{if(!a||!t||!r)return;let e=n7(r).createElement("span");return e.style.position="fixed",r.insertAdjacentElement("afterend",e),h(e),()=>{e.remove(),h(null)}},[a,t,r]),(0,el.useEffect)(()=>{if(!c||!t)return;let e=0,r=t=>{if(!iP(t))return;let r="focusin"===t.type;if(cancelAnimationFrame(e),r){let e=c.querySelectorAll("[data-tabindex]"),t=e=>{let t=e.getAttribute("data-tabindex");e.removeAttribute("data-tabindex"),t?e.setAttribute("tabindex",t):e.removeAttribute("tabindex")};for(let r of(c.hasAttribute("data-tabindex")&&t(c),e))t(r);return}e=requestAnimationFrame(()=>{for(let e of ad(c,!0))!function(e){var t;let r=null!=(t=e.getAttribute("tabindex"))?t:"";e.setAttribute("data-tabindex",r),e.setAttribute("tabindex","-1")}(e)})};return c.addEventListener("focusin",r,!0),c.addEventListener("focusout",r,!0),()=>{cancelAnimationFrame(e),c.removeEventListener("focusin",r,!0),c.removeEventListener("focusout",r,!0)}},[c,t]),o={...o=iX(o,e=>{if(e=(0,es.jsx)(oT.Provider,{value:c||u,children:e}),!a)return e;if(!c)return(0,es.jsx)("span",{ref:l,id:o.id,style:{position:"fixed"},hidden:!0});e=(0,es.jsxs)(es.Fragment,{children:[t&&c&&(0,es.jsx)(oD,{ref:p,"data-focus-trap":o.id,className:"__focus-trap-inner-before",onFocus:e=>{iP(e,c)?oI(af()):oI(m.current)}}),e,t&&c&&(0,es.jsx)(oD,{ref:A,"data-focus-trap":o.id,className:"__focus-trap-inner-after",onFocus:e=>{iP(e,c)?oI(ah()):oI(g.current)}})]}),c&&(e=(0,oC.createPortal)(e,c));let r=(0,es.jsxs)(es.Fragment,{children:[t&&c&&(0,es.jsx)(oD,{ref:m,"data-focus-trap":o.id,className:"__focus-trap-outer-before",onFocus:e=>{e.relatedTarget!==g.current&&iP(e,c)?oI(p.current):oI(ah())}}),t&&(0,es.jsx)("span",{"aria-owns":null==c?void 0:c.id,style:{position:"fixed"}}),t&&c&&(0,es.jsx)(oD,{ref:g,"data-focus-trap":o.id,className:"__focus-trap-outer-after",onFocus:e=>{if(iP(e,c))oI(A.current);else{let e=af();if(e===p.current)return void requestAnimationFrame(()=>{var e;return null==(e=af())?void 0:e.focus()});oI(e)}}})]});return f&&t&&(r=(0,oC.createPortal)(r,f)),(0,es.jsxs)(es.Fragment,{children:[r,e]})},[c,u,a,o.id,t,f]),ref:l}});i9(function(e){return i3("div",oG(e))});var oL=(0,el.createContext)(0);function oP(e){let{level:t,children:r}=e,n=(0,el.useContext)(oL),i=Math.max(Math.min(t||n+1,6),1);return(0,es.jsx)(oL.Provider,{value:i,children:r})}var oH=i8(function(e){let{autoFocusOnShow:t=!0,...r}=e;return iX(r,e=>(0,es.jsx)(ao.Provider,{value:t,children:e}),[t])});i9(function(e){return i3("div",oH(e))});var oO=new WeakMap;function ok(e,t,r){oO.has(e)||oO.set(e,new Map);let n=oO.get(e),i=n.get(t);if(!i)return n.set(t,r()),()=>{var e;null==(e=n.get(t))||e(),n.delete(t)};let a=r(),o=()=>{a(),i(),n.delete(t)};return n.set(t,o),()=>{n.get(t)===o&&(a(),n.set(t,i))}}function o_(e,t,r){return ok(e,t,()=>{let n=e.getAttribute(t);return e.setAttribute(t,r),()=>{null==n?e.removeAttribute(t):e.setAttribute(t,n)}})}function oU(e,t,r){return ok(e,t,()=>{let n=t in e,i=e[t];return e[t]=r,()=>{n?e[t]=i:delete e[t]}})}function oj(e,t){return e?ok(e,"style",()=>{let r=e.style.cssText;return Object.assign(e.style,t),()=>{e.style.cssText=r}}):()=>{}}var oJ=["SCRIPT","STYLE"];function oN(e){return"__ariakit-dialog-snapshot-".concat(e)}function oK(e,t,r,n){for(let i of t){if(!(null==i?void 0:i.isConnected))continue;let a=t.some(e=>!!e&&e!==i&&e.contains(i)),o=n7(i),s=i;for(;i.parentElement&&i!==o.body;){if(null==n||n(i.parentElement,s),!a)for(let n of i.parentElement.children)(function(e,t,r){return!oJ.includes(t.tagName)&&!!function(e,t){let r=n7(t),n=oN(e);if(!r.body[n])return!0;for(;;){if(t===r.body)return!1;if(t[n])return!0;if(!t.parentElement)return!1;t=t.parentElement}}(e,t)&&!r.some(e=>e&&ir(t,e))})(e,n,t)&&r(n,s);i=i.parentElement}}}function oQ(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;ni===e))}function oW(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return"__ariakit-dialog-".concat(t?"ancestor":"outside").concat(e?"-".concat(e):"")}function oV(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return iC(oU(e,oW("",!0),!0),oU(e,oW(t,!0),!0))}function oX(e,t){if(e[oW(t,!0)])return!0;let r=oW(t);for(;;){if(e[r])return!0;if(!e.parentElement)return!1;e=e.parentElement}}function oq(e,t){let r=[],n=t.map(e=>null==e?void 0:e.id);return oK(e,t,t=>{oQ(t,...n)||r.unshift(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return iC(oU(e,oW(),!0),oU(e,oW(t),!0))}(t,e))},(t,n)=>{n.hasAttribute("data-dialog")&&n.id!==e||r.unshift(oV(t,e))}),()=>{for(let e of r)e()}}function oY(e){let{store:t,type:r,listener:n,capture:i,domReady:a}=e,o=iJ(n),s=of(t,"open"),l=(0,el.useRef)(!1);ij(()=>{if(!s||!a)return;let{contentElement:e}=t.getState();if(!e)return;let r=()=>{l.current=!0};return e.addEventListener("focusin",r,!0),()=>e.removeEventListener("focusin",r,!0)},[t,s,a]),(0,el.useEffect)(()=>{if(s)return iO(r,e=>{let{contentElement:r,disclosureElement:n}=t.getState(),i=e.target;if(r&&i)!(!("HTML"===i.tagName||ir(n7(i).body,i))||ir(r,i)||function(e,t){if(!e)return!1;if(ir(e,t))return!0;let r=t.getAttribute("aria-activedescendant");if(r){let t=n7(e).getElementById(r);if(t)return ir(e,t)}return!1}(n,i)||i.hasAttribute("data-focus-trap")||function(e,t){if(!("clientY"in e))return!1;let r=t.getBoundingClientRect();return 0!==r.width&&0!==r.height&&r.top<=e.clientY&&e.clientY<=r.top+r.height&&r.left<=e.clientX&&e.clientX<=r.left+r.width}(e,r))&&(!l.current||oX(i,r.id))&&(i&&i[aB]||o(e))},i)},[s,i])}function oz(e,t){return"function"==typeof e?e(t):!!e}var oZ=(0,el.createContext)({});function o$(){return"inert"in HTMLElement.prototype}function o0(e,t){if(!("style"in e))return iv;if(o$())return oU(e,"inert",!0);let r=ad(e,!0).map(e=>{if(null==t?void 0:t.some(t=>t&&ir(t,e)))return iv;let r=ok(e,"focus",()=>(e.focus=iv,()=>{delete e.focus}));return iC(o_(e,"tabindex","-1"),r)});return iC(...r,o_(e,"aria-hidden","true"),oj(e,{pointerEvents:"none",userSelect:"none",cursor:"default"}))}function o1(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=a6(e.store,a5(e.disclosure,["contentElement","disclosureElement"]));a4(e,t);let r=null==t?void 0:t.getState(),n=iF(e.open,null==r?void 0:r.open,e.defaultOpen,!1),i=iF(e.animated,null==r?void 0:r.animated,!1),a=a0({open:n,animated:i,animating:!!i&&n,mounted:n,contentElement:iF(null==r?void 0:r.contentElement,null),disclosureElement:iF(null==r?void 0:r.disclosureElement,null)},t);return a1(a,()=>a3(a,["animated","animating"],e=>{e.animated||a.setState("animating",!1)})),a1(a,()=>a2(a,["open"],()=>{a.getState().animated&&a.setState("animating",!0)})),a1(a,()=>a3(a,["open","animating"],e=>{a.setState("mounted",e.open||e.animating)})),{...a,disclosure:e.disclosure,setOpen:e=>a.setState("open",e),show:()=>a.setState("open",!0),hide:()=>a.setState("open",!1),toggle:()=>a.setState("open",e=>!e),stopAnimation:()=>a.setState("animating",!1),setContentElement:e=>a.setState("contentElement",e),setDisclosureElement:e=>a.setState("disclosureElement",e)}}function o9(e,t,r){return iQ(t,[r.store,r.disclosure]),om(e,r,"open","setOpen"),om(e,r,"mounted","setMounted"),om(e,r,"animated"),Object.assign(e,{disclosure:r.disclosure})}i8(function(e){return e});var o2=i9(function(e){return i3("div",e)});function o3(e){let{store:t,backdrop:r,alwaysVisible:n,hidden:i}=e,a=(0,el.useRef)(null),o=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},[t,r]=op(o1,e);return o9(t,r,e)}({disclosure:t}),s=of(t,"contentElement");(0,el.useEffect)(()=>{let e=a.current;e&&s&&(e.style.zIndex=getComputedStyle(s).zIndex)},[s]),ij(()=>{let e=null==s?void 0:s.id;if(!e)return;let t=a.current;if(t)return oV(t,e)},[s]);let l=ox({ref:a,store:o,role:"presentation","data-backdrop":(null==s?void 0:s.id)||"",alwaysVisible:n,hidden:null!=i?i:void 0,style:{position:"fixed",top:0,right:0,bottom:0,left:0}});if(!r)return null;if((0,el.isValidElement)(r))return(0,es.jsx)(o2,{...l,render:r});let u="boolean"!=typeof r?r:"div";return(0,es.jsx)(o2,{...l,render:(0,es.jsx)(u,{})})}function o8(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return o1(e)}Object.assign(o2,["a","button","details","dialog","div","form","h1","h2","h3","h4","h5","h6","header","img","input","label","li","nav","ol","p","section","select","span","summary","textarea","ul","svg"].reduce((e,t)=>(e[t]=i9(function(e){return i3(t,e)}),e),{}));var o5=iR();function o6(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!e)return null;let r="current"in e?e.current:e;return r?t?al(r)?r:null:r:null}var o4=i8(function(e){let{store:t,open:r,onClose:n,focusable:i=!0,modal:a=!0,portal:o=!!a,backdrop:s=!!a,hideOnEscape:l=!0,hideOnInteractOutside:u=!0,getPersistentElements:c,preventBodyScroll:d=!!a,autoFocusOnShow:f=!0,autoFocusOnHide:h=!0,initialFocus:m,finalFocus:p,unmountOnHide:A,unstable_treeSnapshotKey:g,...B}=e,C=aL(),y=(0,el.useRef)(null),b=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},[t,r]=op(o8,e);return o9(t,r,e)}({store:t||C,open:r,setOpen(e){if(e)return;let t=y.current;if(!t)return;let r=new Event("close",{bubbles:!1,cancelable:!0});n&&t.addEventListener("close",n,{once:!0}),t.dispatchEvent(r),r.defaultPrevented&&b.setOpen(!0)}}),{portalRef:M,domReady:x}=iq(o,B.portalRef),E=B.preserveTabOrder,F=of(b,e=>E&&!a&&e.mounted),S=iK(B.id),T=of(b,"open"),w=of(b,"mounted"),R=of(b,"contentElement"),D=oM(w,B.hidden,B.alwaysVisible),I=function(e){let{attribute:t,contentId:r,contentElement:n,enabled:i}=e,[a,o]=iW(),s=(0,el.useCallback)(()=>{if(!i||!n)return!1;let{body:e}=n7(n),a=e.getAttribute(t);return!a||a===r},[a,i,n,t,r]);return(0,el.useEffect)(()=>{if(!i||!r||!n)return;let{body:e}=n7(n);if(s())return e.setAttribute(t,r),()=>e.removeAttribute(t);let a=new MutationObserver(()=>(0,oC.flushSync)(o));return a.observe(e,{attributeFilter:[t]}),()=>a.disconnect()},[a,i,r,n,s,t]),s}({attribute:"data-dialog-prevent-body-scroll",contentElement:R,contentId:S,enabled:d&&!D});(0,el.useEffect)(()=>{var e,t;if(!I()||!R)return;let r=n7(R),n=ie(R),{documentElement:i,body:a}=r,o=i.style.getPropertyValue("--scrollbar-width"),s=o?Number.parseInt(o,10):n.innerWidth-i.clientWidth,l=Math.round(i.getBoundingClientRect().left)+i.scrollLeft?"paddingLeft":"paddingRight",u=iw()&&!(n4&&navigator.platform.startsWith("Mac")&&!iT());return iC((e="--scrollbar-width",t="".concat(s,"px"),i?ok(i,e,()=>{let r=i.style.getPropertyValue(e);return i.style.setProperty(e,t),()=>{r?i.style.setProperty(e,r):i.style.removeProperty(e)}}):()=>{}),u?(()=>{var e,t;let{scrollX:r,scrollY:i,visualViewport:o}=n,u=null!=(e=null==o?void 0:o.offsetLeft)?e:0,c=null!=(t=null==o?void 0:o.offsetTop)?t:0,d=oj(a,{position:"fixed",overflow:"hidden",top:"".concat(-(i-Math.floor(c)),"px"),left:"".concat(-(r-Math.floor(u)),"px"),right:"0",[l]:"".concat(s,"px")});return()=>{d(),n.scrollTo({left:r,top:i,behavior:"instant"})}})():oj(a,{overflow:"hidden",[l]:"".concat(s,"px")}))},[I,R]);let G=function(e){let t=(0,el.useRef)();return(0,el.useEffect)(()=>{if(!e){t.current=null;return}return iO("mousedown",e=>{t.current=e.target},!0)},[e]),t}(of(b,"open")),L={store:b,domReady:x,capture:!0};oY({...L,type:"click",listener:e=>{let{contentElement:t}=b.getState(),r=G.current;r&&is(r)&&oX(r,null==t?void 0:t.id)&&oz(u,e)&&b.hide()}}),oY({...L,type:"focusin",listener:e=>{let{contentElement:t}=b.getState();t&&e.target!==n7(t)&&oz(u,e)&&b.hide()}}),oY({...L,type:"contextmenu",listener:e=>{oz(u,e)&&b.hide()}});let{wrapElement:P,nestedDialogs:H}=function(e){let t=(0,el.useContext)(oZ),[r,n]=(0,el.useState)([]),i=(0,el.useCallback)(e=>{var r;return n(t=>[...t,e]),iC(null==(r=t.add)?void 0:r.call(t,e),()=>{n(t=>t.filter(t=>t!==e))})},[t]);ij(()=>a3(e,["open","contentElement"],r=>{var n;if(r.open&&r.contentElement)return null==(n=t.add)?void 0:n.call(t,e)}),[e,t]);let a=(0,el.useMemo)(()=>({store:e,add:i}),[e,i]);return{wrapElement:(0,el.useCallback)(e=>(0,es.jsx)(oZ.Provider,{value:a,children:e}),[a]),nestedDialogs:r}}(b);B=iX(B,P,[P]),ij(()=>{if(!T)return;let e=y.current,t=it(e,!0);t&&"BODY"!==t.tagName&&(e&&ir(e,t)||b.setDisclosureElement(t))},[b,T]),o5&&(0,el.useEffect)(()=>{if(!w)return;let{disclosureElement:e}=b.getState();if(!e||!ia(e))return;let t=()=>{let t=!1,r=()=>{t=!0};e.addEventListener("focusin",r,{capture:!0,once:!0}),iH(e,"mouseup",()=>{e.removeEventListener("focusin",r,!0),t||aA(e)})};return e.addEventListener("mousedown",t),()=>{e.removeEventListener("mousedown",t)}},[b,w]),(0,el.useEffect)(()=>{if(!w||!x)return;let e=y.current;if(!e)return;let t=ie(e),r=t.visualViewport||t,n=()=>{var r,n;let i=null!=(n=null==(r=t.visualViewport)?void 0:r.height)?n:t.innerHeight;e.style.setProperty("--dialog-viewport-height","".concat(i,"px"))};return n(),r.addEventListener("resize",n),()=>{r.removeEventListener("resize",n)}},[w,x]),(0,el.useEffect)(()=>{if(!a||!w||!x)return;let e=y.current;if(e&&!e.querySelector("[data-dialog-dismiss]")){var t=b.hide;let r=n7(e).createElement("button");return r.type="button",r.tabIndex=-1,r.textContent="Dismiss popup",Object.assign(r.style,{border:"0px",clip:"rect(0 0 0 0)",height:"1px",margin:"-1px",overflow:"hidden",padding:"0px",position:"absolute",whiteSpace:"nowrap",width:"1px"}),r.addEventListener("click",t),e.prepend(r),()=>{r.removeEventListener("click",t),r.remove()}}},[b,a,w,x]),ij(()=>{if(!o$()||T||!w||!x)return;let e=y.current;if(e)return o0(e)},[T,w,x]);let O=T&&x;ij(()=>{if(!S||!O)return;var e=[y.current];let{body:t}=n7(e[0]),r=[];return oK(S,e,e=>{r.push(oU(e,oN(S),!0))}),iC(oU(t,oN(S),!0),()=>{for(let e of r)e()})},[S,O,g]);let k=iJ(c);ij(()=>{if(!S||!O)return;let{disclosureElement:e}=b.getState(),t=[y.current,...k()||[],...H.map(e=>e.getState().contentElement)];return a?iC(oq(S,t),function(e,t){let r=[],n=t.map(e=>null==e?void 0:e.id);return oK(e,t,e=>{oQ(e,...n)||!function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;ni===e))}(e,...n)&&r.unshift(o0(e,t))},e=>{e.hasAttribute("role")&&(t.some(t=>t&&ir(t,e))||r.unshift(o_(e,"role","none")))}),()=>{for(let e of r)e()}}(S,t)):oq(S,[e,...t])},[S,b,O,k,H,a,g]);let _=!!f,U=iV(f),[j,J]=(0,el.useState)(!1);(0,el.useEffect)(()=>{if(!T||!_||!x||!(null==R?void 0:R.isConnected))return;let e=o6(m,!0)||R.querySelector("[data-autofocus=true],[autofocus]")||function(e,t,r){let[n]=ad(e,t,r);return n||null}(R,!0,o&&F)||R,t=al(e);U(t?e:null)&&(J(!0),queueMicrotask(()=>{e.focus(),o5&&t&&e.scrollIntoView({block:"nearest",inline:"nearest"})}))},[T,_,x,R,m,o,F,U]);let N=!!h,K=iV(h),[Q,W]=(0,el.useState)(!1);(0,el.useEffect)(()=>{if(T)return W(!0),()=>W(!1)},[T]);let V=(0,el.useCallback)(function(e){let t=!(arguments.length>1)||void 0===arguments[1]||arguments[1],{disclosureElement:r}=b.getState();if(function(e){let t=it();return!(!t||e&&ir(e,t))&&!!al(t)}(e))return;let n=o6(p)||r;if(null==n?void 0:n.id){let e=n7(n),t='[aria-activedescendant="'.concat(n.id,'"]'),r=e.querySelector(t);r&&(n=r)}if(n&&!al(n)){let e=n.closest("[data-dialog]");if(null==e?void 0:e.id){let t=n7(e),r='[aria-controls~="'.concat(e.id,'"]'),i=t.querySelector(r);i&&(n=i)}}let i=n&&al(n);if(!i&&t)return void requestAnimationFrame(()=>V(e,!1));K(i?n:null)&&i&&(null==n||n.focus({preventScroll:!0}))},[b,p,K]),X=(0,el.useRef)(!1);ij(()=>{if(T||!Q||!N)return;let e=y.current;X.current=!0,V(e)},[T,Q,x,N,V]),(0,el.useEffect)(()=>{if(!Q||!N)return;let e=y.current;return()=>{if(X.current){X.current=!1;return}V(e)}},[Q,N,V]);let q=iV(l);(0,el.useEffect)(()=>{if(x&&w)return iO("keydown",e=>{if("Escape"!==e.key||e.defaultPrevented)return;let t=y.current;if(!t||oX(t))return;let r=e.target;if(!r)return;let{disclosureElement:n}=b.getState();("BODY"===r.tagName||ir(t,r)||!n||ir(n,r))&&q(e)&&b.hide()},!0)},[b,x,w,q]);let Y=(B=iX(B,e=>(0,es.jsx)(oP,{level:a?1:void 0,children:e}),[a])).hidden,z=B.alwaysVisible;B=iX(B,e=>s?(0,es.jsxs)(es.Fragment,{children:[(0,es.jsx)(o3,{store:b,backdrop:s,hidden:Y,alwaysVisible:z}),e]}):e,[b,s,Y,z]);let[Z,$]=(0,el.useState)(),[ee,et]=(0,el.useState)();return B=oH({...B={id:S,"data-dialog":"",role:"dialog",tabIndex:i?-1:void 0,"aria-labelledby":Z,"aria-describedby":ee,...B=iX(B,e=>(0,es.jsx)(aH,{value:b,children:(0,es.jsx)(aO.Provider,{value:$,children:(0,es.jsx)(ak.Provider,{value:et,children:e})})}),[b]),ref:iN(y,B.ref)},autoFocusOnShow:j}),B=oG({portal:o,...B=aF({...B=ox({store:b,...B}),focusable:i}),portalRef:M,preserveTabOrder:F})});function o7(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:aL;return i9(function(r){let n=t();return of(r.store||n,e=>!r.unmountOnHide||(null==e?void 0:e.mounted)||!!r.open)?(0,es.jsx)(e,{...r}):null})}o7(i9(function(e){return i3("div",o4(e))}),aL);let se=Math.min,st=Math.max,sr=Math.round,sn=Math.floor,si=e=>({x:e,y:e}),sa={left:"right",right:"left",bottom:"top",top:"bottom"},so={start:"end",end:"start"};function ss(e,t){return"function"==typeof e?e(t):e}function sl(e){return e.split("-")[0]}function su(e){return e.split("-")[1]}function sc(e){return"x"===e?"y":"x"}function sd(e){return"y"===e?"height":"width"}let sf=new Set(["top","bottom"]);function sh(e){return sf.has(sl(e))?"y":"x"}function sm(e){return e.replace(/start|end/g,e=>so[e])}let sp=["left","right"],sA=["right","left"],sg=["top","bottom"],sv=["bottom","top"];function sB(e){return e.replace(/left|right|bottom|top/g,e=>sa[e])}function sC(e){return"number"!=typeof e?{top:0,right:0,bottom:0,left:0,...e}:{top:e,right:e,bottom:e,left:e}}function sy(e){let{x:t,y:r,width:n,height:i}=e;return{width:n,height:i,top:r,left:t,right:t+n,bottom:r+i,x:t,y:r}}function sb(e,t,r){let n,{reference:i,floating:a}=e,o=sh(t),s=sc(sh(t)),l=sd(s),u=sl(t),c="y"===o,d=i.x+i.width/2-a.width/2,f=i.y+i.height/2-a.height/2,h=i[l]/2-a[l]/2;switch(u){case"top":n={x:d,y:i.y-a.height};break;case"bottom":n={x:d,y:i.y+i.height};break;case"right":n={x:i.x+i.width,y:f};break;case"left":n={x:i.x-a.width,y:f};break;default:n={x:i.x,y:i.y}}switch(su(t)){case"start":n[s]-=h*(r&&c?-1:1);break;case"end":n[s]+=h*(r&&c?-1:1)}return n}let sM=async(e,t,r)=>{let{placement:n="bottom",strategy:i="absolute",middleware:a=[],platform:o}=r,s=a.filter(Boolean),l=await (null==o.isRTL?void 0:o.isRTL(t)),u=await o.getElementRects({reference:e,floating:t,strategy:i}),{x:c,y:d}=sb(u,n,l),f=n,h={},m=0;for(let r=0;r{try{return e.matches(t)}catch(e){return!1}})}let sU=["transform","translate","scale","rotate","perspective"],sj=["transform","translate","scale","rotate","perspective","filter"],sJ=["paint","layout","strict","content"];function sN(e){let t=sK(),r=sI(e)?sV(e):e;return sU.some(e=>!!r[e]&&"none"!==r[e])||!!r.containerType&&"normal"!==r.containerType||!t&&!!r.backdropFilter&&"none"!==r.backdropFilter||!t&&!!r.filter&&"none"!==r.filter||sj.some(e=>(r.willChange||"").includes(e))||sJ.some(e=>(r.contain||"").includes(e))}function sK(){return"undefined"!=typeof CSS&&!!CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")}let sQ=new Set(["html","body","#document"]);function sW(e){return sQ.has(sT(e))}function sV(e){return sw(e).getComputedStyle(e)}function sX(e){return sI(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function sq(e){if("html"===sT(e))return e;let t=e.assignedSlot||e.parentNode||sL(e)&&e.host||sR(e);return sL(t)?t.host:t}function sY(e,t,r){var n;void 0===t&&(t=[]),void 0===r&&(r=!0);let i=function e(t){let r=sq(t);return sW(r)?t.ownerDocument?t.ownerDocument.body:t.body:sG(r)&&sH(r)?r:e(r)}(e),a=i===(null==(n=e.ownerDocument)?void 0:n.body),o=sw(i);if(a){let e=sz(o);return t.concat(o,o.visualViewport||[],sH(i)?i:[],e&&r?sY(e):[])}return t.concat(i,sY(i,[],r))}function sz(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function sZ(e){let t=sV(e),r=parseFloat(t.width)||0,n=parseFloat(t.height)||0,i=sG(e),a=i?e.offsetWidth:r,o=i?e.offsetHeight:n,s=sr(r)!==a||sr(n)!==o;return s&&(r=a,n=o),{width:r,height:n,$:s}}function s$(e){return sI(e)?e:e.contextElement}function s0(e){let t=s$(e);if(!sG(t))return si(1);let r=t.getBoundingClientRect(),{width:n,height:i,$:a}=sZ(t),o=(a?sr(r.width):r.width)/n,s=(a?sr(r.height):r.height)/i;return o&&Number.isFinite(o)||(o=1),s&&Number.isFinite(s)||(s=1),{x:o,y:s}}let s1=si(0);function s9(e){let t=sw(e);return sK()&&t.visualViewport?{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}:s1}function s2(e,t,r,n){var i;void 0===t&&(t=!1),void 0===r&&(r=!1);let a=e.getBoundingClientRect(),o=s$(e),s=si(1);t&&(n?sI(n)&&(s=s0(n)):s=s0(e));let l=(void 0===(i=r)&&(i=!1),n&&(!i||n===sw(o))&&i)?s9(o):si(0),u=(a.left+l.x)/s.x,c=(a.top+l.y)/s.y,d=a.width/s.x,f=a.height/s.y;if(o){let e=sw(o),t=n&&sI(n)?sw(n):n,r=e,i=sz(r);for(;i&&n&&t!==r;){let e=s0(i),t=i.getBoundingClientRect(),n=sV(i),a=t.left+(i.clientLeft+parseFloat(n.paddingLeft))*e.x,o=t.top+(i.clientTop+parseFloat(n.paddingTop))*e.y;u*=e.x,c*=e.y,d*=e.x,f*=e.y,u+=a,c+=o,i=sz(r=sw(i))}}return sy({width:d,height:f,x:u,y:c})}function s3(e,t){let r=sX(e).scrollLeft;return t?t.left+r:s2(sR(e)).left+r}function s8(e,t){let r=e.getBoundingClientRect();return{x:r.left+t.scrollLeft-s3(e,r),y:r.top+t.scrollTop}}let s5=new Set(["absolute","fixed"]);function s6(e,t,r){let n;if("viewport"===t)n=function(e,t){let r=sw(e),n=sR(e),i=r.visualViewport,a=n.clientWidth,o=n.clientHeight,s=0,l=0;if(i){a=i.width,o=i.height;let e=sK();(!e||e&&"fixed"===t)&&(s=i.offsetLeft,l=i.offsetTop)}let u=s3(n);if(u<=0){let e=n.ownerDocument,t=e.body,r=getComputedStyle(t),i="CSS1Compat"===e.compatMode&&parseFloat(r.marginLeft)+parseFloat(r.marginRight)||0,o=Math.abs(n.clientWidth-t.clientWidth-i);o<=25&&(a-=o)}else u<=25&&(a+=u);return{width:a,height:o,x:s,y:l}}(e,r);else if("document"===t)n=function(e){let t=sR(e),r=sX(e),n=e.ownerDocument.body,i=st(t.scrollWidth,t.clientWidth,n.scrollWidth,n.clientWidth),a=st(t.scrollHeight,t.clientHeight,n.scrollHeight,n.clientHeight),o=-r.scrollLeft+s3(e),s=-r.scrollTop;return"rtl"===sV(n).direction&&(o+=st(t.clientWidth,n.clientWidth)-i),{width:i,height:a,x:o,y:s}}(sR(e));else if(sI(t))n=function(e,t){let r=s2(e,!0,"fixed"===t),n=r.top+e.clientTop,i=r.left+e.clientLeft,a=sG(e)?s0(e):si(1),o=e.clientWidth*a.x,s=e.clientHeight*a.y;return{width:o,height:s,x:i*a.x,y:n*a.y}}(t,r);else{let r=s9(e);n={x:t.x-r.x,y:t.y-r.y,width:t.width,height:t.height}}return sy(n)}function s4(e){return"static"===sV(e).position}function s7(e,t){if(!sG(e)||"fixed"===sV(e).position)return null;if(t)return t(e);let r=e.offsetParent;return sR(e)===r&&(r=r.ownerDocument.body),r}function le(e,t){var r;let n=sw(e);if(s_(e))return n;if(!sG(e)){let t=sq(e);for(;t&&!sW(t);){if(sI(t)&&!s4(t))return t;t=sq(t)}return n}let i=s7(e,t);for(;i&&(r=i,sO.has(sT(r)))&&s4(i);)i=s7(i,t);return i&&sW(i)&&s4(i)&&!sN(i)?n:i||function(e){let t=sq(e);for(;sG(t)&&!sW(t);){if(sN(t))return t;if(s_(t))break;t=sq(t)}return null}(e)||n}let lt=async function(e){let t=this.getOffsetParent||le,r=this.getDimensions,n=await r(e.floating);return{reference:function(e,t,r){let n=sG(t),i=sR(t),a="fixed"===r,o=s2(e,!0,a,t),s={scrollLeft:0,scrollTop:0},l=si(0);if(n||!n&&!a)if(("body"!==sT(t)||sH(i))&&(s=sX(t)),n){let e=s2(t,!0,a,t);l.x=e.x+t.clientLeft,l.y=e.y+t.clientTop}else i&&(l.x=s3(i));a&&!n&&i&&(l.x=s3(i));let u=!i||n||a?si(0):s8(i,s);return{x:o.left+s.scrollLeft-l.x-u.x,y:o.top+s.scrollTop-l.y-u.y,width:o.width,height:o.height}}(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:n.width,height:n.height}}},lr={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{elements:t,rect:r,offsetParent:n,strategy:i}=e,a="fixed"===i,o=sR(n),s=!!t&&s_(t.floating);if(n===o||s&&a)return r;let l={scrollLeft:0,scrollTop:0},u=si(1),c=si(0),d=sG(n);if((d||!d&&!a)&&(("body"!==sT(n)||sH(o))&&(l=sX(n)),sG(n))){let e=s2(n);u=s0(n),c.x=e.x+n.clientLeft,c.y=e.y+n.clientTop}let f=!o||d||a?si(0):s8(o,l);return{width:r.width*u.x,height:r.height*u.y,x:r.x*u.x-l.scrollLeft*u.x+c.x+f.x,y:r.y*u.y-l.scrollTop*u.y+c.y+f.y}},getDocumentElement:sR,getClippingRect:function(e){let{element:t,boundary:r,rootBoundary:n,strategy:i}=e,a=[..."clippingAncestors"===r?s_(t)?[]:function(e,t){let r=t.get(e);if(r)return r;let n=sY(e,[],!1).filter(e=>sI(e)&&"body"!==sT(e)),i=null,a="fixed"===sV(e).position,o=a?sq(e):e;for(;sI(o)&&!sW(o);){let t=sV(o),r=sN(o);r||"fixed"!==t.position||(i=null),(a?!r&&!i:!r&&"static"===t.position&&!!i&&s5.has(i.position)||sH(o)&&!r&&function e(t,r){let n=sq(t);return!(n===r||!sI(n)||sW(n))&&("fixed"===sV(n).position||e(n,r))}(e,o))?n=n.filter(e=>e!==o):i=t,o=sq(o)}return t.set(e,n),n}(t,this._c):[].concat(r),n],o=a[0],s=a.reduce((e,r)=>{let n=s6(t,r,i);return e.top=st(n.top,e.top),e.right=se(n.right,e.right),e.bottom=se(n.bottom,e.bottom),e.left=st(n.left,e.left),e},s6(t,o,i));return{width:s.right-s.left,height:s.bottom-s.top,x:s.left,y:s.top}},getOffsetParent:le,getElementRects:lt,getClientRects:function(e){return Array.from(e.getClientRects())},getDimensions:function(e){let{width:t,height:r}=sZ(e);return{width:t,height:r}},getScale:s0,isElement:sI,isRTL:function(e){return"rtl"===sV(e).direction}};function ln(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function li(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;if("function"==typeof DOMRect)return new DOMRect(e,t,r,n);let i={x:e,y:t,width:r,height:n,top:t,right:e+r,bottom:t+n,left:e};return{...i,toJSON:()=>i}}function la(e){return/^(?:top|bottom|left|right)(?:-(?:start|end))?$/.test(e)}function lo(e){let t=window.devicePixelRatio||1;return Math.round(e*t)/t}var ls=i8(function(e){let{store:t,modal:r=!1,portal:n=!!r,preserveTabOrder:i=!0,autoFocusOnShow:a=!0,wrapperProps:o,fixed:s=!1,flip:l=!0,shift:u=0,slide:c=!0,overlap:d=!1,sameWidth:f=!1,fitViewport:h=!1,gutter:m,arrowPadding:p=4,overflowPadding:A=8,getAnchorRect:g,updatePosition:B,...C}=e,y=aU();ib(t=t||y,!1);let b=t.useState("arrowElement"),M=t.useState("anchorElement"),x=t.useState("disclosureElement"),E=t.useState("popoverElement"),F=t.useState("contentElement"),S=t.useState("placement"),T=t.useState("mounted"),w=t.useState("rendered"),R=(0,el.useRef)(null),[D,I]=(0,el.useState)(!1),{portalRef:G,domReady:L}=iq(n,C.portalRef),P=iJ(g),H=iJ(B),O=!!B;ij(()=>{if(!(null==E?void 0:E.isConnected))return;E.style.setProperty("--popover-overflow-padding","".concat(A,"px"));let e={contextElement:M||void 0,getBoundingClientRect:()=>{let e=null==P?void 0:P(M);if(e||!M){if(!e)return li();let{x:t,y:r,width:n,height:i}=e;return li(t,r,n,i)}return M.getBoundingClientRect()}},r=async()=>{var r,n,i,a;if(!T)return;b||(R.current=R.current||document.createElement("div"));let o=b||R.current,g=[(r={gutter:m,shift:u},void 0===(n=e=>{var t;let{placement:n}=e,i=((null==o?void 0:o.clientHeight)||0)/2,a="number"==typeof r.gutter?r.gutter+i:null!=(t=r.gutter)?t:i;return{crossAxis:n.split("-")[1]?void 0:r.shift,mainAxis:a,alignmentAxis:r.shift}})&&(n=0),{name:"offset",options:n,async fn(e){var t,r;let{x:i,y:a,placement:o,middlewareData:s}=e,l=await sF(e,n);return o===(null==(t=s.offset)?void 0:t.placement)&&null!=(r=s.arrow)&&r.alignmentOffset?{}:{x:i+l.x,y:a+l.y,data:{...l,placement:o}}}}),function(e){var t;if(!1===e.flip)return;let r="string"==typeof e.flip?e.flip.split(" "):void 0;return ib(!r||r.every(la),!1),{name:"flip",options:t={padding:e.overflowPadding,fallbackPlacements:r},async fn(e){var r,n,i,a,o;let{placement:s,middlewareData:l,rects:u,initialPlacement:c,platform:d,elements:f}=e,{mainAxis:h=!0,crossAxis:m=!0,fallbackPlacements:p,fallbackStrategy:A="bestFit",fallbackAxisSideDirection:g="none",flipAlignment:B=!0,...C}=ss(t,e);if(null!=(r=l.arrow)&&r.alignmentOffset)return{};let y=sl(s),b=sh(c),M=sl(c)===c,x=await (null==d.isRTL?void 0:d.isRTL(f.floating)),E=p||(M||!B?[sB(c)]:function(e){let t=sB(e);return[sm(e),t,sm(t)]}(c)),F="none"!==g;!p&&F&&E.push(...function(e,t,r,n){let i=su(e),a=function(e,t,r){switch(e){case"top":case"bottom":if(r)return t?sA:sp;return t?sp:sA;case"left":case"right":return t?sg:sv;default:return[]}}(sl(e),"start"===r,n);return i&&(a=a.map(e=>e+"-"+i),t&&(a=a.concat(a.map(sm)))),a}(c,B,g,x));let S=[c,...E],T=await sx(e,C),w=[],R=(null==(n=l.flip)?void 0:n.overflows)||[];if(h&&w.push(T[y]),m){let e=function(e,t,r){void 0===r&&(r=!1);let n=su(e),i=sc(sh(e)),a=sd(i),o="x"===i?n===(r?"end":"start")?"right":"left":"start"===n?"bottom":"top";return t.reference[a]>t.floating[a]&&(o=sB(o)),[o,sB(o)]}(s,u,x);w.push(T[e[0]],T[e[1]])}if(R=[...R,{placement:s,overflows:w}],!w.every(e=>e<=0)){let e=((null==(i=l.flip)?void 0:i.index)||0)+1,t=S[e];if(t&&("alignment"!==m||b===sh(t)||R.every(e=>sh(e.placement)!==b||e.overflows[0]>0)))return{data:{index:e,overflows:R},reset:{placement:t}};let r=null==(a=R.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0])?void 0:a.placement;if(!r)switch(A){case"bestFit":{let e=null==(o=R.filter(e=>{if(F){let t=sh(e.placement);return t===b||"y"===t}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0])?void 0:o[0];e&&(r=e);break}case"initialPlacement":r=c}if(s!==r)return{reset:{placement:r}}}return{}}}}({flip:l,overflowPadding:A}),function(e){if(e.slide||e.overlap){var t,r;return{name:"shift",options:r={mainAxis:e.slide,crossAxis:e.overlap,padding:e.overflowPadding,limiter:(void 0===t&&(t={}),{options:t,fn(e){let{x:r,y:n,placement:i,rects:a,middlewareData:o}=e,{offset:s=0,mainAxis:l=!0,crossAxis:u=!0}=ss(t,e),c={x:r,y:n},d=sh(i),f=sc(d),h=c[f],m=c[d],p=ss(s,e),A="number"==typeof p?{mainAxis:p,crossAxis:0}:{mainAxis:0,crossAxis:0,...p};if(l){let e="y"===f?"height":"width",t=a.reference[f]-a.floating[e]+A.mainAxis,r=a.reference[f]+a.reference[e]-A.mainAxis;hr&&(h=r)}if(u){var g,B;let e="y"===f?"width":"height",t=sE.has(sl(i)),r=a.reference[d]-a.floating[e]+(t&&(null==(g=o.offset)?void 0:g[d])||0)+(t?0:A.crossAxis),n=a.reference[d]+a.reference[e]+(t?0:(null==(B=o.offset)?void 0:B[d])||0)-(t?A.crossAxis:0);mn&&(m=n)}return{[f]:h,[d]:m}}})},async fn(e){let{x:t,y:n,placement:i}=e,{mainAxis:a=!0,crossAxis:o=!1,limiter:s={fn:e=>{let{x:t,y:r}=e;return{x:t,y:r}}},...l}=ss(r,e),u={x:t,y:n},c=await sx(e,l),d=sh(sl(i)),f=sc(d),h=u[f],m=u[d];if(a){let e="y"===f?"top":"left",t="y"===f?"bottom":"right",r=h+c[e],n=h-c[t];h=st(r,se(h,n))}if(o){let e="y"===d?"top":"left",t="y"===d?"bottom":"right",r=m+c[e],n=m-c[t];m=st(r,se(m,n))}let p=s.fn({...e,[f]:h,[d]:m});return{...p,data:{x:p.x-t,y:p.y-n,enabled:{[f]:a,[d]:o}}}}}}}({slide:c,shift:u,overlap:d,overflowPadding:A}),function(e,t){if(e){let r;return{name:"arrow",options:r={element:e,padding:t.arrowPadding},async fn(e){let{x:t,y:n,placement:i,rects:a,platform:o,elements:s,middlewareData:l}=e,{element:u,padding:c=0}=ss(r,e)||{};if(null==u)return{};let d=sC(c),f={x:t,y:n},h=sc(sh(i)),m=sd(h),p=await o.getDimensions(u),A="y"===h,g=A?"clientHeight":"clientWidth",B=a.reference[m]+a.reference[h]-f[h]-a.floating[m],C=f[h]-a.reference[h],y=await (null==o.getOffsetParent?void 0:o.getOffsetParent(u)),b=y?y[g]:0;b&&await (null==o.isElement?void 0:o.isElement(y))||(b=s.floating[g]||a.floating[m]);let M=b/2-p[m]/2-1,x=se(d[A?"top":"left"],M),E=se(d[A?"bottom":"right"],M),F=b-p[m]-E,S=b/2-p[m]/2+(B/2-C/2),T=st(x,se(S,F)),w=!l.arrow&&null!=su(i)&&S!==T&&a.reference[m]/2-(S{},...d}=ss(a,e),f=await sx(e,d),h=sl(o),m=su(o),p="y"===sh(o),{width:A,height:g}=s.floating;"top"===h||"bottom"===h?(n=h,i=m===(await (null==l.isRTL?void 0:l.isRTL(u.floating))?"start":"end")?"left":"right"):(i=h,n="end"===m?"top":"bottom");let B=g-f.top-f.bottom,C=A-f.left-f.right,y=se(g-f[n],B),b=se(A-f[i],C),M=!e.middlewareData.shift,x=y,E=b;if(null!=(t=e.middlewareData.shift)&&t.enabled.x&&(E=C),null!=(r=e.middlewareData.shift)&&r.enabled.y&&(x=B),M&&!m){let e=st(f.left,0),t=st(f.right,0),r=st(f.top,0),n=st(f.bottom,0);p?E=A-2*(0!==e||0!==t?e+t:st(f.left,f.right)):x=g-2*(0!==r||0!==n?r+n:st(f.top,f.bottom))}await c({...e,availableWidth:E,availableHeight:x});let F=await l.getDimensions(u.floating);return A!==F.width||g!==F.height?{reset:{rects:!0}}:{}}}],B=await ((e,t,r)=>{let n=new Map,i={platform:lr,...r},a={...i.platform,_c:n};return sM(e,t,{...i,platform:a})})(e,E,{placement:S,strategy:s?"fixed":"absolute",middleware:g});null==t||t.setState("currentPlacement",B.placement),I(!0);let C=lo(B.x),y=lo(B.y);if(Object.assign(E.style,{top:"0",left:"0",transform:"translate3d(".concat(C,"px,").concat(y,"px,0)")}),o&&B.middlewareData.arrow){let{x:e,y:t}=B.middlewareData.arrow,r=B.placement.split("-")[0],n=o.clientWidth/2,i=o.clientHeight/2,a=null!=e?e+n:-n,s=null!=t?t+i:-i;E.style.setProperty("--popover-transform-origin",{top:"".concat(a,"px calc(100% + ").concat(i,"px)"),bottom:"".concat(a,"px ").concat(-i,"px"),left:"calc(100% + ".concat(n,"px) ").concat(s,"px"),right:"".concat(-n,"px ").concat(s,"px")}[r]),Object.assign(o.style,{left:null!=e?"".concat(e,"px"):"",top:null!=t?"".concat(t,"px"):"",[r]:"100%"})}},n=function(e,t,r,n){let i;void 0===n&&(n={});let{ancestorScroll:a=!0,ancestorResize:o=!0,elementResize:s="function"==typeof ResizeObserver,layoutShift:l="function"==typeof IntersectionObserver,animationFrame:u=!1}=n,c=s$(e),d=a||o?[...c?sY(c):[],...sY(t)]:[];d.forEach(e=>{a&&e.addEventListener("scroll",r,{passive:!0}),o&&e.addEventListener("resize",r)});let f=c&&l?function(e,t){let r,n=null,i=sR(e);function a(){var e;clearTimeout(r),null==(e=n)||e.disconnect(),n=null}return!function o(s,l){void 0===s&&(s=!1),void 0===l&&(l=1),a();let u=e.getBoundingClientRect(),{left:c,top:d,width:f,height:h}=u;if(s||t(),!f||!h)return;let m=sn(d),p=sn(i.clientWidth-(c+f)),A={rootMargin:-m+"px "+-p+"px "+-sn(i.clientHeight-(d+h))+"px "+-sn(c)+"px",threshold:st(0,se(1,l))||1},g=!0;function B(t){let n=t[0].intersectionRatio;if(n!==l){if(!g)return o();n?o(!1,n):r=setTimeout(()=>{o(!1,1e-7)},1e3)}1!==n||ln(u,e.getBoundingClientRect())||o(),g=!1}try{n=new IntersectionObserver(B,{...A,root:i.ownerDocument})}catch(e){n=new IntersectionObserver(B,A)}n.observe(e)}(!0),a}(c,r):null,h=-1,m=null;s&&(m=new ResizeObserver(e=>{let[n]=e;n&&n.target===c&&m&&(m.unobserve(t),cancelAnimationFrame(h),h=requestAnimationFrame(()=>{var e;null==(e=m)||e.observe(t)})),r()}),c&&!u&&m.observe(c),m.observe(t));let p=u?s2(e):null;return u&&function t(){let n=s2(e);p&&!ln(p,n)&&r(),p=n,i=requestAnimationFrame(t)}(),r(),()=>{var e;d.forEach(e=>{a&&e.removeEventListener("scroll",r),o&&e.removeEventListener("resize",r)}),null==f||f(),null==(e=m)||e.disconnect(),m=null,u&&cancelAnimationFrame(i)}}(e,E,async()=>{O?(await H({updatePosition:r}),I(!0)):await r()},{elementResize:"function"==typeof ResizeObserver});return()=>{I(!1),n()}},[t,w,E,b,M,E,S,T,L,s,l,u,c,d,f,h,m,p,A,P,O,H]),ij(()=>{if(!T||!L||!(null==E?void 0:E.isConnected)||!(null==F?void 0:F.isConnected))return;let e=()=>{E.style.zIndex=getComputedStyle(F).zIndex};e();let t=requestAnimationFrame(()=>{t=requestAnimationFrame(e)});return()=>cancelAnimationFrame(t)},[T,L,E,F]);let k=s?"fixed":"absolute";return C=iX(C,e=>(0,es.jsx)("div",{...o,style:{position:k,top:0,left:0,width:"max-content",...null==o?void 0:o.style},ref:null==t?void 0:t.setPopoverElement,children:e}),[t,k,o]),C={"data-placing":!D||void 0,...C=iX(C,e=>(0,es.jsx)(aJ,{value:t,children:e}),[t]),style:{position:"relative",...C.style}},C=o4({store:t,modal:r,portal:n,preserveTabOrder:i,preserveTabOrderAnchor:x||M,autoFocusOnShow:D&&a,...C,portalRef:G})});o7(i9(function(e){return i3("div",ls(e))}),aU);var ll=i8(function(e){let{store:t,modal:r,tabIndex:n,alwaysVisible:i,autoFocusOnHide:a=!0,hideOnInteractOutside:o=!0,...s}=e,l=aX();ib(t=t||l,!1);let u=t.useState("baseElement"),c=(0,el.useRef)(!1),d=of(t.tag,e=>null==e?void 0:e.renderedItems.length);return s=oF({store:t,alwaysVisible:i,...s}),s=ls({store:t,modal:r,alwaysVisible:i,backdrop:!1,autoFocusOnShow:!1,finalFocus:u,preserveTabOrderAnchor:null,unstable_treeSnapshotKey:d,...s,getPersistentElements(){var e;let n=(null==(e=s.getPersistentElements)?void 0:e.call(s))||[];if(!r||!t)return n;let{contentElement:i,baseElement:a}=t.getState();if(!a)return n;let o=n7(a),l=[];if((null==i?void 0:i.id)&&l.push('[aria-controls~="'.concat(i.id,'"]')),(null==a?void 0:a.id)&&l.push('[aria-controls~="'.concat(a.id,'"]')),!l.length)return[...n,a];let u=l.join(",");return[...n,...o.querySelectorAll(u)]},autoFocusOnHide:e=>!iM(a,e)&&(!c.current||(c.current=!1,!1)),hideOnInteractOutside(e){var r,n;let i=null==t?void 0:t.getState(),a=null==(r=null==i?void 0:i.contentElement)?void 0:r.id,s=null==(n=null==i?void 0:i.baseElement)?void 0:n.id;if(function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;n'[aria-controls~="'.concat(e,'"]')).join(", ");return!!t&&e.matches(t)}return!1}(e.target,a,s))return!1;let l="function"==typeof o?o(e):o;return l&&(c.current="click"===e.type),l}})}),lu=o7(i9(function(e){return i3("div",ll(e))}),aX);(0,el.createContext)(null),(0,el.createContext)(null);var lc=i5([ar],[an]),ld=lc.useContext;lc.useScopedContext,lc.useProviderContext,lc.ContextProvider,lc.ScopedContextProvider;var lf={id:null};function lh(e,t){return e.find(e=>t?!e.disabled&&e.id!==t:!e.disabled)}function lm(e,t){return e.filter(e=>e.rowId===t)}function lp(e){let t=[];for(let r of e){let e=t.find(e=>{var t;return(null==(t=e[0])?void 0:t.rowId)===r.rowId});e?e.push(r):t.push([r])}return t}function lA(e){let t=0;for(let{length:r}of e)r>t&&(t=r);return t}var lg=iR()&&iT();function lv(){let{tag:e,...t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=a6(t.store,function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;n0&&void 0!==arguments[0]?arguments[0]:{},r=null==(e=t.store)?void 0:e.getState(),n=function(){var e,t;let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};a4(r,r.store);let n=null==(e=r.store)?void 0:e.getState(),i=iF(r.items,null==n?void 0:n.items,r.defaultItems,[]),a=new Map(i.map(e=>[e.id,e])),o={items:i,renderedItems:iF(null==n?void 0:n.renderedItems,[])},s=null==(t=r.store)?void 0:t.__unstablePrivateStore,l=a0({items:i,renderedItems:o.renderedItems},s),u=a0(o,r.store),c=e=>{let t=function(e,t){let r=e.map((e,t)=>[t,e]),n=!1;return(r.sort((e,r)=>{var i;let[a,o]=e,[s,l]=r,u=t(o),c=t(l);return u!==c&&u&&c?(i=u,c.compareDocumentPosition(i)&Node.DOCUMENT_POSITION_PRECEDING)?(a>s&&(n=!0),-1):(a{let[t,r]=e;return r}):e}(e,e=>e.element);l.setState("renderedItems",t),u.setState("renderedItems",t)};a1(u,()=>a9(l)),a1(l,()=>a8(l,["items"],e=>{u.setState("items",e.items)})),a1(l,()=>a8(l,["renderedItems"],e=>{let t=!0,r=requestAnimationFrame(()=>{let{renderedItems:t}=u.getState();e.renderedItems!==t&&c(e.renderedItems)});if("function"!=typeof IntersectionObserver)return()=>cancelAnimationFrame(r);let n=new IntersectionObserver(()=>{if(t){t=!1;return}cancelAnimationFrame(r),r=requestAnimationFrame(()=>c(e.renderedItems))},{root:function(e){var t;let r=e.find(e=>!!e.element),n=[...e].reverse().find(e=>!!e.element),i=null==(t=null==r?void 0:r.element)?void 0:t.parentElement;for(;i&&(null==n?void 0:n.element);){let e=i;if(n&&e.contains(n.element))return i;i=i.parentElement}return n7(i).body}(e.renderedItems)});for(let t of e.renderedItems)t.element&&n.observe(t.element);return()=>{cancelAnimationFrame(r),n.disconnect()}}));let d=function(e,t){let r,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return t(t=>{let n=t.findIndex(t=>{let{id:r}=t;return r===e.id}),i=t.slice();if(-1!==n){let o={...r=t[n],...e};i[n]=o,a.set(e.id,o)}else i.push(e),a.set(e.id,e);return i}),()=>{t(t=>{if(!r)return n&&a.delete(e.id),t.filter(t=>{let{id:r}=t;return r!==e.id});let i=t.findIndex(t=>{let{id:r}=t;return r===e.id});if(-1===i)return t;let o=t.slice();return o[i]=r,a.set(e.id,r),o})}},f=e=>d(e,e=>l.setState("items",e),!0);return{...u,registerItem:f,renderItem:e=>iC(f(e),d(e,e=>l.setState("renderedItems",e))),item:e=>{if(!e)return null;let t=a.get(e);if(!t){let{items:r}=l.getState();(t=r.find(t=>t.id===e))&&a.set(e,t)}return t||null},__unstablePrivateStore:l}}(t),i=iF(t.activeId,null==r?void 0:r.activeId,t.defaultActiveId),a=a0({...n.getState(),id:iF(t.id,null==r?void 0:r.id,"id-".concat(Math.random().toString(36).slice(2,8))),activeId:i,baseElement:iF(null==r?void 0:r.baseElement,null),includesBaseElement:iF(t.includesBaseElement,null==r?void 0:r.includesBaseElement,null===i),moves:iF(null==r?void 0:r.moves,0),orientation:iF(t.orientation,null==r?void 0:r.orientation,"both"),rtl:iF(t.rtl,null==r?void 0:r.rtl,!1),virtualFocus:iF(t.virtualFocus,null==r?void 0:r.virtualFocus,!1),focusLoop:iF(t.focusLoop,null==r?void 0:r.focusLoop,!1),focusWrap:iF(t.focusWrap,null==r?void 0:r.focusWrap,!1),focusShift:iF(t.focusShift,null==r?void 0:r.focusShift,!1)},n,t.store);a1(a,()=>a3(a,["renderedItems","activeId"],e=>{a.setState("activeId",t=>{var r;return void 0!==t?t:null==(r=lh(e.renderedItems))?void 0:r.id})}));let o=function(){var e,t;let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"next",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=a.getState(),{skip:o=0,activeId:s=i.activeId,focusShift:l=i.focusShift,focusLoop:u=i.focusLoop,focusWrap:c=i.focusWrap,includesBaseElement:d=i.includesBaseElement,renderedItems:f=i.renderedItems,rtl:h=i.rtl}=n,m="up"===r||"down"===r,p="next"===r||"down"===r,A=m?aS(function(e,t,r){let n=lA(e);for(let i of e)for(let e=0;ee.id===s);if(!g)return null==(t=lh(A))?void 0:t.id;let B=A.some(e=>e.rowId),C=A.indexOf(g),y=A.slice(C+1),b=lm(y,g.rowId);if(o){let e=b.filter(e=>s?!e.disabled&&e.id!==s:!e.disabled),t=e.slice(o)[0]||e[e.length-1];return null==t?void 0:t.id}let M=u&&(m?"horizontal"!==u:"vertical"!==u),x=B&&c&&(m?"horizontal"!==c:"vertical"!==c),E=p?(!B||m)&&M&&d:!!m&&d;if(M){let e=lh(function(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=e.findIndex(e=>e.id===t);return[...e.slice(n+1),...r?[lf]:[],...e.slice(0,n)]}(x&&!E?A:lm(A,g.rowId),s,E),s);return null==e?void 0:e.id}if(x){let e=lh(E?b:y,s);return E?(null==e?void 0:e.id)||null:null==e?void 0:e.id}let F=lh(b,s);return!F&&E?null:null==F?void 0:F.id};return{...n,...a,setBaseElement:e=>a.setState("baseElement",e),setActiveId:e=>a.setState("activeId",e),move:e=>{void 0!==e&&(a.setState("activeId",e),a.setState("moves",e=>e+1))},first:()=>{var e;return null==(e=lh(a.getState().renderedItems))?void 0:e.id},last:()=>{var e;return null==(e=lh(aT(a.getState().renderedItems)))?void 0:e.id},next:e=>(void 0!==e&&"number"==typeof e&&(e={skip:e}),o("next",e)),previous:e=>(void 0!==e&&"number"==typeof e&&(e={skip:e}),o("previous",e)),down:e=>(void 0!==e&&"number"==typeof e&&(e={skip:e}),o("down",e)),up:e=>(void 0!==e&&"number"==typeof e&&(e={skip:e}),o("up",e))}}({...t,activeId:a,includesBaseElement:iF(t.includesBaseElement,null==i?void 0:i.includesBaseElement,!0),orientation:iF(t.orientation,null==i?void 0:i.orientation,"vertical"),focusLoop:iF(t.focusLoop,null==i?void 0:i.focusLoop,!0),focusWrap:iF(t.focusWrap,null==i?void 0:i.focusWrap,!0),virtualFocus:iF(t.virtualFocus,null==i?void 0:i.virtualFocus,!0)}),s=function(){let{popover:e,...t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=a6(t.store,a5(e,["arrowElement","anchorElement","contentElement","popoverElement","disclosureElement"]));a4(t,r);let n=null==r?void 0:r.getState(),i=o8({...t,store:r}),a=iF(t.placement,null==n?void 0:n.placement,"bottom"),o=a0({...i.getState(),placement:a,currentPlacement:a,anchorElement:iF(null==n?void 0:n.anchorElement,null),popoverElement:iF(null==n?void 0:n.popoverElement,null),arrowElement:iF(null==n?void 0:n.arrowElement,null),rendered:Symbol("rendered")},i,r);return{...i,...o,setAnchorElement:e=>o.setState("anchorElement",e),setPopoverElement:e=>o.setState("popoverElement",e),setArrowElement:e=>o.setState("arrowElement",e),render:()=>o.setState("rendered",Symbol("rendered"))}}({...t,placement:iF(t.placement,null==i?void 0:i.placement,"bottom-start")}),l=iF(t.value,null==i?void 0:i.value,t.defaultValue,""),u=iF(t.selectedValue,null==i?void 0:i.selectedValue,null==n?void 0:n.values,t.defaultSelectedValue,""),c=Array.isArray(u),d={...o.getState(),...s.getState(),value:l,selectedValue:u,resetValueOnSelect:iF(t.resetValueOnSelect,null==i?void 0:i.resetValueOnSelect,c),resetValueOnHide:iF(t.resetValueOnHide,null==i?void 0:i.resetValueOnHide,c&&!e),activeValue:null==i?void 0:i.activeValue},f=a0(d,o,s,r);return lg&&a1(f,()=>a3(f,["virtualFocus"],()=>{f.setState("virtualFocus",!1)})),a1(f,()=>{if(e)return iC(a3(f,["selectedValue"],t=>{Array.isArray(t.selectedValue)&&e.setValues(t.selectedValue)}),a3(e,["values"],e=>{f.setState("selectedValue",e.values)}))}),a1(f,()=>a3(f,["resetValueOnHide","mounted"],e=>{e.resetValueOnHide&&(e.mounted||f.setState("value",l))})),a1(f,()=>a3(f,["open"],e=>{e.open||(f.setState("activeId",a),f.setState("moves",0))})),a1(f,()=>a3(f,["moves","activeId"],(e,t)=>{e.moves===t.moves&&f.setState("activeValue",void 0)})),a1(f,()=>a8(f,["moves","renderedItems"],(e,t)=>{if(e.moves===t.moves)return;let{activeId:r}=f.getState(),n=o.item(r);f.setState("activeValue",null==n?void 0:n.value)})),{...s,...o,...f,tag:e,setValue:e=>f.setState("value",e),resetValue:()=>f.setState("value",d.value),setSelectedValue:e=>f.setState("selectedValue",e)}}function lB(){var e,t,r,n,i,a;let o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},[s,l]=op(lv,o=function(e){var t;let r=ld();return{id:iK((t=e={...e,tag:void 0!==e.tag?e.tag:r}).id),...t}}(o));return iQ(l,[(e=o).tag]),om(s,e,"value","setValue"),om(s,e,"selectedValue","setSelectedValue"),om(s,e,"resetValueOnHide"),om(s,e,"resetValueOnSelect"),Object.assign((n=s,iQ(i=l,[(a=e).popover]),om(n,a,"placement"),t=o9(n,i,a),r=t,iQ(l,[e.store]),om(r,e,"items","setItems"),om(t=r,e,"activeId","setActiveId"),om(t,e,"includesBaseElement"),om(t,e,"virtualFocus"),om(t,e,"orientation"),om(t,e,"rtl"),om(t,e,"focusLoop"),om(t,e,"focusWrap"),om(t,e,"focusShift"),t),{tag:e.tag})}function lC(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=lB(e);return(0,es.jsx)(aq,{value:t,children:e.children})}var ly=(0,el.createContext)(void 0),lb=i8(function(e){let[t,r]=(0,el.useState)();return iE(e={role:"group","aria-labelledby":t,...e=iX(e,e=>(0,es.jsx)(ly.Provider,{value:r,children:e}),[])})});i9(function(e){return i3("div",lb(e))});var lM=i8(function(e){let{store:t,...r}=e;return lb(r)});i9(function(e){return i3("div",lM(e))});var lx=i8(function(e){let{store:t,...r}=e,n=aV();return ib(t=t||n,!1),"grid"===id(t.useState("contentElement"))&&(r={role:"rowgroup",...r}),r=lM({store:t,...r})}),lE=i9(function(e){return i3("div",lx(e))}),lF=i8(function(e){let t=(0,el.useContext)(ly),r=iK(e.id);return ij(()=>(null==t||t(r),()=>null==t?void 0:t(void 0)),[t,r]),iE(e={id:r,"aria-hidden":!0,...e})});i9(function(e){return i3("div",lF(e))});var lS=i8(function(e){let{store:t,...r}=e;return lF(r)});i9(function(e){return i3("div",lS(e))});var lT=i8(function(e){return lS(e)}),lw=i9(function(e){return i3("div",lT(e))}),lR=e.i(38360);let lD={CASE_SENSITIVE_EQUAL:7,EQUAL:6,STARTS_WITH:5,WORD_STARTS_WITH:4,CONTAINS:3,ACRONYM:2,MATCHES:1,NO_MATCH:0},lI=(e,t)=>String(e.rankedValue).localeCompare(String(t.rankedValue));function lG(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},{keys:n,threshold:i=lD.MATCHES,baseSort:a=lI,sorter:o=e=>e.sort((e,t)=>(function(e,t,r){let{rank:n,keyIndex:i}=e,{rank:a,keyIndex:o}=t;return n!==a?n>a?-1:1:i===o?r(e,t):i{let{rank:n,rankedValue:i,keyIndex:a,keyThreshold:o}=e,{itemValue:s,attributes:l}=t,d=lL(s,u,c),f=i,{minRanking:h,maxRanking:m,threshold:p}=l;return d=lD.MATCHES?d=h:d>m&&(d=m),d>n&&(n=d,a=r,o=p,f=s),{rankedValue:f,rank:n,keyIndex:a,keyThreshold:o}},{rankedValue:s,rank:lD.NO_MATCH,keyIndex:-1,keyThreshold:c.threshold}):{rankedValue:s,rank:lL(s,u,c),keyIndex:-1,keyThreshold:c.threshold}),{rank:f,keyThreshold:h=i}=d;return f>=h&&e.push({...d,item:a,index:o}),e},[])).map(e=>{let{item:t}=e;return t})}function lL(e,t,r){if(e=lP(e,r),(t=lP(t,r)).length>e.length)return lD.NO_MATCH;if(e===t)return lD.CASE_SENSITIVE_EQUAL;let n=function*(e,t){let r=-1;for(;(r=e.indexOf(t,r+1))>-1;)yield r;return -1}(e=e.toLowerCase(),t=t.toLowerCase()),i=n.next(),a=i.value;if(e.length===t.length&&0===a)return lD.EQUAL;if(0===a)return lD.STARTS_WITH;let o=i;for(;!o.done;){if(o.value>0&&" "===e[o.value-1])return lD.WORD_STARTS_WITH;o=n.next()}return a>0?lD.CONTAINS:1===t.length?lD.NO_MATCH:(function(e){let t="",r=" ";for(let n=0;n-1))return lD.NO_MATCH;var o=n-a;let s=r/t.length;return lD.MATCHES+1/o*s}(e,t)}function lP(e,t){let{keepDiacritics:r}=t;return e="".concat(e),r||(e=(0,lR.default)(e)),e}lG.rankings=lD;let lH={maxRanking:1/0,minRanking:-1/0};var lO=e.i(29402);let lk=new Set(["SkiFree","SkiFree_Daily","SkiFree_Randomizer"]),l_={"missions.vl2":"Official","TR2final105-client.vl2":"Team Rabbit 2","z_mappacks/CTF/Classic_maps_v1.vl2":"Classic","z_mappacks/CTF/DynamixFinalPack.vl2":"Official","z_mappacks/CTF/KryMapPack_b3EDIT.vl2":"KryMapPack","z_mappacks/CTF/S5maps.vl2":"S5","z_mappacks/CTF/S8maps.vl2":"S8","z_mappacks/CTF/TWL-MapPack.vl2":"TWL","z_mappacks/CTF/TWL-MapPackEDIT.vl2":"TWL","z_mappacks/CTF/TWL2-MapPack.vl2":"TWL2","z_mappacks/CTF/TWL2-MapPackEDIT.vl2":"TWL2","z_mappacks/TWL_T2arenaOfficialMaps.vl2":"Arena","z_mappacks/z_DMP2-V0.6.vl2":"DMP2 (Discord Map Pack)","z_mappacks/zDMP-4.7.3DX.vl2":"DMP (Discord Map Pack)"},lU={"z_mappacks/DM":"DM","z_mappacks/LCTF":"LCTF","z_mappacks/Lak":"LakRabbit"},lj=(0,nT.getMissionList)().filter(e=>!lk.has(e)).map(e=>{var t,r;let n=(0,nT.getMissionInfo)(e),[i]=(0,nT.getSourceAndPath)(n.resourcePath),a=(e=>{let t=e.match(/^(.*)(\/[^/]+)$/);return t?t[1]:""})(i),o=null!=(r=null!=(t=l_[i])?t:lU[a])?r:null;return{resourcePath:n.resourcePath,missionName:e,displayName:n.displayName,sourcePath:i,groupName:o,missionTypes:n.missionTypes}}),lJ=new Map(lj.map(e=>[e.missionName,e])),lN=function(e){let t=new Map;for(let n of e){var r;let e=null!=(r=t.get(n.groupName))?r:[];e.push(n),t.set(n.groupName,e)}return t.forEach((e,r)=>{t.set(r,(0,lO.default)(e,[e=>(e.displayName||e.missionName).toLowerCase()],["asc"]))}),(0,lO.default)(Array.from(t.entries()),[e=>{let[t]=e;return"Official"===t?0:null==t?2:1},e=>{let[t]=e;return t?t.toLowerCase():""}],["asc","asc"])}(lj),lK="undefined"!=typeof navigator&&/Mac|iPhone|iPad|iPod/.test(navigator.platform);function lQ(e){let{mission:t}=e;return(0,es.jsxs)(es.Fragment,{children:[(0,es.jsxs)("span",{className:"MissionSelect-itemHeader",children:[(0,es.jsx)("span",{className:"MissionSelect-itemName",children:t.displayName||t.missionName}),t.missionTypes.length>0&&(0,es.jsx)("span",{className:"MissionSelect-itemTypes",children:t.missionTypes.map(e=>(0,es.jsx)("span",{className:"MissionSelect-itemType",children:e},e))})]}),(0,es.jsx)("span",{className:"MissionSelect-itemMissionName",children:t.missionName})]})}function lW(e){let{value:t,onChange:r}=e,[n,i]=(0,el.useState)(""),a=(0,el.useRef)(null),o=lB({resetValueOnHide:!0,selectedValue:t,setSelectedValue:e=>{e&&r(e)},setValue:e=>{(0,el.startTransition)(()=>i(e))}});(0,el.useEffect)(()=>{let e=e=>{if("k"===e.key&&(e.metaKey||e.ctrlKey)){var t;e.preventDefault(),null==(t=a.current)||t.focus(),o.show()}};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[o]);let s=lJ.get(t),l=(0,el.useMemo)(()=>n?{type:"flat",missions:lG(lj,n,{keys:["displayName","missionName"]})}:{type:"grouped",groups:lN},[n]),u=s?s.displayName||s.missionName:t,c="flat"===l.type?0===l.missions.length:0===l.groups.length;return(0,es.jsxs)(lC,{store:o,children:[(0,es.jsxs)("div",{className:"MissionSelect-inputWrapper",children:[(0,es.jsx)(or,{ref:a,autoSelect:!0,placeholder:u,className:"MissionSelect-input",onFocus:()=>{document.exitPointerLock(),o.show()}}),(0,es.jsx)("kbd",{className:"MissionSelect-shortcut",children:lK?"⌘K":"^K"})]}),(0,es.jsx)(lu,{gutter:4,fitViewport:!0,className:"MissionSelect-popover",children:(0,es.jsxs)(oS,{className:"MissionSelect-list",children:["flat"===l.type?l.missions.map(e=>(0,es.jsx)(oB,{value:e.missionName,className:"MissionSelect-item",focusOnHover:!0,children:(0,es.jsx)(lQ,{mission:e})},e.missionName)):l.groups.map(e=>{let[t,r]=e;return t?(0,es.jsxs)(lE,{className:"MissionSelect-group",children:[(0,es.jsx)(lw,{className:"MissionSelect-groupLabel",children:t}),r.map(e=>(0,es.jsx)(oB,{value:e.missionName,className:"MissionSelect-item",focusOnHover:!0,children:(0,es.jsx)(lQ,{mission:e})},e.missionName))]},t):(0,es.jsx)(el.Fragment,{children:r.map(e=>(0,es.jsx)(oB,{value:e.missionName,className:"MissionSelect-item",focusOnHover:!0,children:(0,es.jsx)(lQ,{mission:e})},e.missionName))},"ungrouped")}),c&&(0,es.jsx)("div",{className:"MissionSelect-noResults",children:"No missions found"})]})})]})}function lV(e){let{missionName:t,onChangeMission:r}=e,{fogEnabled:n,setFogEnabled:i,fov:a,setFov:o,audioEnabled:s,setAudioEnabled:l,animationEnabled:u,setAnimationEnabled:c}=(0,tw.useSettings)(),{speedMultiplier:d,setSpeedMultiplier:f}=(0,tw.useControls)(),{debugMode:h,setDebugMode:m}=(0,tw.useDebug)();return(0,es.jsxs)("div",{id:"controls",onKeyDown:e=>e.stopPropagation(),onPointerDown:e=>e.stopPropagation(),onClick:e=>e.stopPropagation(),children:[(0,es.jsx)(lW,{value:t,onChange:r}),(0,es.jsxs)("div",{className:"CheckboxField",children:[(0,es.jsx)("input",{id:"fogInput",type:"checkbox",checked:n,onChange:e=>{i(e.target.checked)}}),(0,es.jsx)("label",{htmlFor:"fogInput",children:"Fog?"})]}),(0,es.jsxs)("div",{className:"CheckboxField",children:[(0,es.jsx)("input",{id:"audioInput",type:"checkbox",checked:s,onChange:e=>{l(e.target.checked)}}),(0,es.jsx)("label",{htmlFor:"audioInput",children:"Audio?"})]}),(0,es.jsxs)("div",{className:"CheckboxField",children:[(0,es.jsx)("input",{id:"animationInput",type:"checkbox",checked:u,onChange:e=>{c(e.target.checked)}}),(0,es.jsx)("label",{htmlFor:"animationInput",children:"Animation?"})]}),(0,es.jsxs)("div",{className:"CheckboxField",children:[(0,es.jsx)("input",{id:"debugInput",type:"checkbox",checked:h,onChange:e=>{m(e.target.checked)}}),(0,es.jsx)("label",{htmlFor:"debugInput",children:"Debug?"})]}),(0,es.jsxs)("div",{className:"Field",children:[(0,es.jsx)("label",{htmlFor:"fovInput",children:"FOV"}),(0,es.jsx)("input",{id:"fovInput",type:"range",min:75,max:120,step:5,value:a,onChange:e=>o(parseInt(e.target.value))}),(0,es.jsx)("output",{htmlFor:"speedInput",children:a})]}),(0,es.jsxs)("div",{className:"Field",children:[(0,es.jsx)("label",{htmlFor:"speedInput",children:"Speed"}),(0,es.jsx)("input",{id:"speedInput",type:"range",min:.1,max:5,step:.05,value:d,onChange:e=>f(parseFloat(e.target.value))})]})]})}let lX=el.forwardRef((e,t)=>{let{envMap:r,resolution:n=256,frames:i=1/0,makeDefault:a,children:o,...s}=e,l=(0,tE.useThree)(e=>{let{set:t}=e;return t}),u=(0,tE.useThree)(e=>{let{camera:t}=e;return t}),c=(0,tE.useThree)(e=>{let{size:t}=e;return t}),d=el.useRef(null);el.useImperativeHandle(t,()=>d.current,[]);let f=el.useRef(null),h=function(e,t,r){let n=(0,tE.useThree)(e=>e.size),i=(0,tE.useThree)(e=>e.viewport),a="number"==typeof e?e:n.width*i.dpr,o=n.height*i.dpr,s=("number"==typeof e?void 0:e)||{},{samples:l=0,depth:u,...c}=s,d=null!=u?u:s.depthBuffer,f=el.useMemo(()=>{let e=new ef.WebGLRenderTarget(a,o,{minFilter:ef.LinearFilter,magFilter:ef.LinearFilter,type:ef.HalfFloatType,...c});return d&&(e.depthTexture=new ef.DepthTexture(a,o,ef.FloatType)),e.samples=l,e},[]);return el.useLayoutEffect(()=>{f.setSize(a,o),l&&(f.samples=l)},[l,f,a,o]),el.useEffect(()=>()=>f.dispose(),[]),f}(n);el.useLayoutEffect(()=>{s.manual||(d.current.aspect=c.width/c.height)},[c,s]),el.useLayoutEffect(()=>{d.current.updateProjectionMatrix()});let m=0,p=null,A="function"==typeof o;return(0,tx.useFrame)(e=>{A&&(i===1/0||m{if(a)return l(()=>({camera:d.current})),()=>l(()=>({camera:u}))},[d,a,l]),el.createElement(el.Fragment,null,el.createElement("perspectiveCamera",(0,tW.default)({ref:d},s),!A&&o),el.createElement("group",{ref:f},A&&o(h.texture)))});function lq(){let{fov:e}=(0,tw.useSettings)();return(0,es.jsx)(lX,{makeDefault:!0,position:[0,256,0],fov:e})}var lY=e.i(51434),lz=e.i(81405);function lZ(e,t){"function"==typeof e?e(t):null!=e&&(e.current=t)}function l$(e){let{showPanel:t=0,className:r,parent:n}=e,i=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=arguments.length>2?arguments[2]:void 0,[n,i]=el.useState();return el.useLayoutEffect(()=>{let t=e();return i(t),lZ(r,t),()=>lZ(r,null)},t),n}(()=>new lz.default,[]);return el.useEffect(()=>{if(i){let e=n&&n.current||document.body;i.showPanel(t),null==e||e.appendChild(i.dom);let a=(null!=r?r:"").split(" ").filter(e=>e);a.length&&i.dom.classList.add(...a);let o=(0,ec.j)(()=>i.begin()),s=(0,ec.k)(()=>i.end());return()=>{a.length&&i.dom.classList.remove(...a),null==e||e.removeChild(i.dom),o(),s()}}},[n,i,r,t]),null}var l0=e.i(60099);function l1(){let{debugMode:e}=(0,tw.useDebug)(),t=(0,el.useRef)(null);return(0,el.useEffect)(()=>{let e=t.current;e&&e.setColors("rgb(153, 255, 0)","rgb(0, 153, 255)","rgb(255, 153, 0)")}),e?(0,es.jsxs)(es.Fragment,{children:[(0,es.jsx)(l$,{className:"StatsPanel"}),(0,es.jsx)("axesHelper",{ref:t,args:[70],renderOrder:999,children:(0,es.jsx)("lineBasicMaterial",{depthTest:!1,depthWrite:!1,fog:!1,vertexColors:!0})}),(0,es.jsx)(l0.Html,{position:[80,0,0],center:!0,children:(0,es.jsx)("span",{className:"AxisLabel","data-axis":"y",children:"Y"})}),(0,es.jsx)(l0.Html,{position:[0,80,0],center:!0,children:(0,es.jsx)("span",{className:"AxisLabel","data-axis":"z",children:"Z"})}),(0,es.jsx)(l0.Html,{position:[0,0,80],center:!0,children:(0,es.jsx)("span",{className:"AxisLabel","data-axis":"x",children:"X"})})]}):null}let l9=new nj,l2={toneMapping:ef.NoToneMapping,outputColorSpace:ef.SRGBColorSpace};function l3(){let e=(0,eu.useSearchParams)(),t=(0,eu.useRouter)(),[r,n]=(0,el.useState)(e.get("mission")||"TWL2_WoodyMyrk"),[i,a]=(0,el.useState)(0),[o,s]=(0,el.useState)(!0),l=i<1;(0,el.useEffect)(()=>{if(l)s(!0);else{let e=setTimeout(()=>s(!1),500);return()=>clearTimeout(e)}},[l]),(0,el.useEffect)(()=>(window.setMissionName=n,window.getMissionList=nT.getMissionList,window.getMissionInfo=nT.getMissionInfo,()=>{delete window.setMissionName,delete window.getMissionList,delete window.getMissionInfo}),[]),(0,el.useEffect)(()=>{let e=new URLSearchParams;e.set("mission",r),t.replace("?".concat(e.toString()),{scroll:!1})},[r,t]);let u=(0,el.useCallback)(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;a(t)},[]);return(0,es.jsx)(tA,{client:l9,children:(0,es.jsx)("main",{children:(0,es.jsxs)(tw.SettingsProvider,{children:[(0,es.jsxs)("div",{id:"canvasContainer",children:[o&&(0,es.jsxs)("div",{id:"loadingIndicator","data-complete":!l,children:[(0,es.jsx)("div",{className:"LoadingSpinner"}),(0,es.jsx)("div",{className:"LoadingProgress",children:(0,es.jsx)("div",{className:"LoadingProgress-bar",style:{width:"".concat(100*i,"%")}})}),(0,es.jsxs)("div",{className:"LoadingProgress-text",children:[Math.round(100*i),"%"]})]}),(0,es.jsx)(ev,{frameloop:"always",gl:l2,shadows:"soft",children:(0,es.jsx)(ny,{children:(0,es.jsxs)(lY.AudioProvider,{children:[(0,es.jsx)(nI,{name:r,onLoadingChange:u},r),(0,es.jsx)(lq,{}),(0,es.jsx)(l1,{}),(0,es.jsx)(n6,{})]})})})]}),(0,es.jsx)(lV,{missionName:r,onChangeMission:n})]})})})}function l8(){return(0,es.jsx)(el.Suspense,{children:(0,es.jsx)(l3,{})})}}]); \ No newline at end of file diff --git a/docs/_next/static/chunks/9df2d46c5eaa77d2.js b/docs/_next/static/chunks/9df2d46c5eaa77d2.js deleted file mode 100644 index abe8e75a..00000000 --- a/docs/_next/static/chunks/9df2d46c5eaa77d2.js +++ /dev/null @@ -1 +0,0 @@ -(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,18566,(e,t,r)=>{t.exports=e.r(76562)},38360,(e,t,r)=>{var n={À:"A",Á:"A",Â:"A",Ã:"A",Ä:"A",Å:"A",Ấ:"A",Ắ:"A",Ẳ:"A",Ẵ:"A",Ặ:"A",Æ:"AE",Ầ:"A",Ằ:"A",Ȃ:"A",Ả:"A",Ạ:"A",Ẩ:"A",Ẫ:"A",Ậ:"A",Ç:"C",Ḉ:"C",È:"E",É:"E",Ê:"E",Ë:"E",Ế:"E",Ḗ:"E",Ề:"E",Ḕ:"E",Ḝ:"E",Ȇ:"E",Ẻ:"E",Ẽ:"E",Ẹ:"E",Ể:"E",Ễ:"E",Ệ:"E",Ì:"I",Í:"I",Î:"I",Ï:"I",Ḯ:"I",Ȋ:"I",Ỉ:"I",Ị:"I",Ð:"D",Ñ:"N",Ò:"O",Ó:"O",Ô:"O",Õ:"O",Ö:"O",Ø:"O",Ố:"O",Ṍ:"O",Ṓ:"O",Ȏ:"O",Ỏ:"O",Ọ:"O",Ổ:"O",Ỗ:"O",Ộ:"O",Ờ:"O",Ở:"O",Ỡ:"O",Ớ:"O",Ợ:"O",Ù:"U",Ú:"U",Û:"U",Ü:"U",Ủ:"U",Ụ:"U",Ử:"U",Ữ:"U",Ự:"U",Ý:"Y",à:"a",á:"a",â:"a",ã:"a",ä:"a",å:"a",ấ:"a",ắ:"a",ẳ:"a",ẵ:"a",ặ:"a",æ:"ae",ầ:"a",ằ:"a",ȃ:"a",ả:"a",ạ:"a",ẩ:"a",ẫ:"a",ậ:"a",ç:"c",ḉ:"c",è:"e",é:"e",ê:"e",ë:"e",ế:"e",ḗ:"e",ề:"e",ḕ:"e",ḝ:"e",ȇ:"e",ẻ:"e",ẽ:"e",ẹ:"e",ể:"e",ễ:"e",ệ:"e",ì:"i",í:"i",î:"i",ï:"i",ḯ:"i",ȋ:"i",ỉ:"i",ị:"i",ð:"d",ñ:"n",ò:"o",ó:"o",ô:"o",õ:"o",ö:"o",ø:"o",ố:"o",ṍ:"o",ṓ:"o",ȏ:"o",ỏ:"o",ọ:"o",ổ:"o",ỗ:"o",ộ:"o",ờ:"o",ở:"o",ỡ:"o",ớ:"o",ợ:"o",ù:"u",ú:"u",û:"u",ü:"u",ủ:"u",ụ:"u",ử:"u",ữ:"u",ự:"u",ý:"y",ÿ:"y",Ā:"A",ā:"a",Ă:"A",ă:"a",Ą:"A",ą:"a",Ć:"C",ć:"c",Ĉ:"C",ĉ:"c",Ċ:"C",ċ:"c",Č:"C",č:"c",C̆:"C",c̆:"c",Ď:"D",ď:"d",Đ:"D",đ:"d",Ē:"E",ē:"e",Ĕ:"E",ĕ:"e",Ė:"E",ė:"e",Ę:"E",ę:"e",Ě:"E",ě:"e",Ĝ:"G",Ǵ:"G",ĝ:"g",ǵ:"g",Ğ:"G",ğ:"g",Ġ:"G",ġ:"g",Ģ:"G",ģ:"g",Ĥ:"H",ĥ:"h",Ħ:"H",ħ:"h",Ḫ:"H",ḫ:"h",Ĩ:"I",ĩ:"i",Ī:"I",ī:"i",Ĭ:"I",ĭ:"i",Į:"I",į:"i",İ:"I",ı:"i",IJ:"IJ",ij:"ij",Ĵ:"J",ĵ:"j",Ķ:"K",ķ:"k",Ḱ:"K",ḱ:"k",K̆:"K",k̆:"k",Ĺ:"L",ĺ:"l",Ļ:"L",ļ:"l",Ľ:"L",ľ:"l",Ŀ:"L",ŀ:"l",Ł:"l",ł:"l",Ḿ:"M",ḿ:"m",M̆:"M",m̆:"m",Ń:"N",ń:"n",Ņ:"N",ņ:"n",Ň:"N",ň:"n",ʼn:"n",N̆:"N",n̆:"n",Ō:"O",ō:"o",Ŏ:"O",ŏ:"o",Ő:"O",ő:"o",Œ:"OE",œ:"oe",P̆:"P",p̆:"p",Ŕ:"R",ŕ:"r",Ŗ:"R",ŗ:"r",Ř:"R",ř:"r",R̆:"R",r̆:"r",Ȓ:"R",ȓ:"r",Ś:"S",ś:"s",Ŝ:"S",ŝ:"s",Ş:"S",Ș:"S",ș:"s",ş:"s",Š:"S",š:"s",Ţ:"T",ţ:"t",ț:"t",Ț:"T",Ť:"T",ť:"t",Ŧ:"T",ŧ:"t",T̆:"T",t̆:"t",Ũ:"U",ũ:"u",Ū:"U",ū:"u",Ŭ:"U",ŭ:"u",Ů:"U",ů:"u",Ű:"U",ű:"u",Ų:"U",ų:"u",Ȗ:"U",ȗ:"u",V̆:"V",v̆:"v",Ŵ:"W",ŵ:"w",Ẃ:"W",ẃ:"w",X̆:"X",x̆:"x",Ŷ:"Y",ŷ:"y",Ÿ:"Y",Y̆:"Y",y̆:"y",Ź:"Z",ź:"z",Ż:"Z",ż:"z",Ž:"Z",ž:"z",ſ:"s",ƒ:"f",Ơ:"O",ơ:"o",Ư:"U",ư:"u",Ǎ:"A",ǎ:"a",Ǐ:"I",ǐ:"i",Ǒ:"O",ǒ:"o",Ǔ:"U",ǔ:"u",Ǖ:"U",ǖ:"u",Ǘ:"U",ǘ:"u",Ǚ:"U",ǚ:"u",Ǜ:"U",ǜ:"u",Ứ:"U",ứ:"u",Ṹ:"U",ṹ:"u",Ǻ:"A",ǻ:"a",Ǽ:"AE",ǽ:"ae",Ǿ:"O",ǿ:"o",Þ:"TH",þ:"th",Ṕ:"P",ṕ:"p",Ṥ:"S",ṥ:"s",X́:"X",x́:"x",Ѓ:"Г",ѓ:"г",Ќ:"К",ќ:"к",A̋:"A",a̋:"a",E̋:"E",e̋:"e",I̋:"I",i̋:"i",Ǹ:"N",ǹ:"n",Ồ:"O",ồ:"o",Ṑ:"O",ṑ:"o",Ừ:"U",ừ:"u",Ẁ:"W",ẁ:"w",Ỳ:"Y",ỳ:"y",Ȁ:"A",ȁ:"a",Ȅ:"E",ȅ:"e",Ȉ:"I",ȉ:"i",Ȍ:"O",ȍ:"o",Ȑ:"R",ȑ:"r",Ȕ:"U",ȕ:"u",B̌:"B",b̌:"b",Č̣:"C",č̣:"c",Ê̌:"E",ê̌:"e",F̌:"F",f̌:"f",Ǧ:"G",ǧ:"g",Ȟ:"H",ȟ:"h",J̌:"J",ǰ:"j",Ǩ:"K",ǩ:"k",M̌:"M",m̌:"m",P̌:"P",p̌:"p",Q̌:"Q",q̌:"q",Ř̩:"R",ř̩:"r",Ṧ:"S",ṧ:"s",V̌:"V",v̌:"v",W̌:"W",w̌:"w",X̌:"X",x̌:"x",Y̌:"Y",y̌:"y",A̧:"A",a̧:"a",B̧:"B",b̧:"b",Ḑ:"D",ḑ:"d",Ȩ:"E",ȩ:"e",Ɛ̧:"E",ɛ̧:"e",Ḩ:"H",ḩ:"h",I̧:"I",i̧:"i",Ɨ̧:"I",ɨ̧:"i",M̧:"M",m̧:"m",O̧:"O",o̧:"o",Q̧:"Q",q̧:"q",U̧:"U",u̧:"u",X̧:"X",x̧:"x",Z̧:"Z",z̧:"z",й:"и",Й:"И",ё:"е",Ё:"Е"},i=Object.keys(n).join("|"),a=RegExp(i,"g"),o=RegExp(i,"");function s(e){return n[e]}var l=function(e){return e.replace(a,s)};t.exports=l,t.exports.has=function(e){return!!e.match(o)},t.exports.remove=l},29402,(e,t,r)=>{var n,i,a="__lodash_hash_undefined__",o=1/0,s="[object Arguments]",l="[object Array]",u="[object Boolean]",c="[object Date]",d="[object Error]",f="[object Function]",h="[object Map]",m="[object Number]",p="[object Object]",A="[object Promise]",g="[object RegExp]",B="[object Set]",C="[object String]",y="[object Symbol]",b="[object WeakMap]",M="[object ArrayBuffer]",E="[object DataView]",x=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,F=/^\w*$/,S=/^\./,T=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,w=/\\(\\)?/g,R=/^\[object .+?Constructor\]$/,I=/^(?:0|[1-9]\d*)$/,D={};D["[object Float32Array]"]=D["[object Float64Array]"]=D["[object Int8Array]"]=D["[object Int16Array]"]=D["[object Int32Array]"]=D["[object Uint8Array]"]=D["[object Uint8ClampedArray]"]=D["[object Uint16Array]"]=D["[object Uint32Array]"]=!0,D[s]=D[l]=D[M]=D[u]=D[E]=D[c]=D[d]=D[f]=D[h]=D[m]=D[p]=D[g]=D[B]=D[C]=D[b]=!1;var G=e.g&&e.g.Object===Object&&e.g,L="object"==typeof self&&self&&self.Object===Object&&self,P=G||L||Function("return this")(),H=r&&!r.nodeType&&r,O=H&&t&&!t.nodeType&&t,k=O&&O.exports===H&&G.process,_=function(){try{return k&&k.binding("util")}catch(e){}}(),U=_&&_.isTypedArray;function j(e,t){for(var r=-1,n=e?e.length:0,i=Array(n);++r-1},ey.prototype.set=function(e,t){var r=this.__data__,n=ex(r,e);return n<0?r.push([e,t]):r[n][1]=t,this},eb.prototype.clear=function(){this.__data__={hash:new eC,map:new(es||ey),string:new eC}},eb.prototype.delete=function(e){return eG(this,e).delete(e)},eb.prototype.get=function(e){return eG(this,e).get(e)},eb.prototype.has=function(e){return eG(this,e).has(e)},eb.prototype.set=function(e,t){return eG(this,e).set(e,t),this},eM.prototype.add=eM.prototype.push=function(e){return this.__data__.set(e,a),this},eM.prototype.has=function(e){return this.__data__.has(e)},eE.prototype.clear=function(){this.__data__=new ey},eE.prototype.delete=function(e){return this.__data__.delete(e)},eE.prototype.get=function(e){return this.__data__.get(e)},eE.prototype.has=function(e){return this.__data__.has(e)},eE.prototype.set=function(e,t){var r=this.__data__;if(r instanceof ey){var n=r.__data__;if(!es||n.length<199)return n.push([e,t]),this;r=this.__data__=new eb(n)}return r.set(e,t),this};var eF=function(e,t){return function(r,n){if(null==r)return r;if(!eW(r))return e(r,n);for(var i=r.length,a=-1,o=Object(r);(t?a--:++as))return!1;var u=a.get(e);if(u&&a.get(t))return u==t;var c=-1,d=!0,f=1&i?new eM:void 0;for(a.set(e,t),a.set(t,e);++c-1&&e%1==0&&e-1&&e%1==0&&e<=0x1fffffffffffff}function eq(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}function eY(e){return!!e&&"object"==typeof e}function eZ(e){return"symbol"==typeof e||eY(e)&&$.call(e)==y}var ez=U?J(U):function(e){return eY(e)&&eX(e.length)&&!!D[$.call(e)]};function e$(e){return eW(e)?function(e,t){var r=eQ(e)||eK(e)?function(e,t){for(var r=-1,n=Array(e);++rt||a&&o&&l&&!s&&!u||n&&o&&l||!r&&l||!i)return 1;if(!n&&!a&&!u&&e=s)return l;return l*("desc"==r[n]?-1:1)}}return e.index-t.index}(e,t,r)});l--;)s[l]=s[l].value;return s}(e,t,r))}},81405,(e,t,r)=>{e.e,t.exports=function(){var e=function(){function t(e){return i.appendChild(e.dom),e}function r(e){for(var t=0;to+1e3&&(l.update(1e3*s/(e-o),100),o=e,s=0,c)){var t=performance.memory;c.update(t.usedJSHeapSize/1048576,t.jsHeapSizeLimit/1048576)}return e},update:function(){a=this.end()},domElement:i,setMode:r}};return e.Panel=function(e,t,r){var n=1/0,i=0,a=Math.round,o=a(window.devicePixelRatio||1),s=80*o,l=48*o,u=3*o,c=2*o,d=3*o,f=15*o,h=74*o,m=30*o,p=document.createElement("canvas");p.width=s,p.height=l,p.style.cssText="width:80px;height:48px";var A=p.getContext("2d");return A.font="bold "+9*o+"px Helvetica,Arial,sans-serif",A.textBaseline="top",A.fillStyle=r,A.fillRect(0,0,s,l),A.fillStyle=t,A.fillText(e,u,c),A.fillRect(d,f,h,m),A.fillStyle=r,A.globalAlpha=.9,A.fillRect(d,f,h,m),{dom:p,update:function(l,g){n=Math.min(n,l),i=Math.max(i,l),A.fillStyle=r,A.globalAlpha=1,A.fillRect(0,0,s,f),A.fillStyle=t,A.fillText(a(l)+" "+e+" ("+a(n)+"-"+a(i)+")",u,c),A.drawImage(p,d+o,f,h-o,m,d,f,h-o,m),A.fillRect(d+h-o,f,o,m),A.fillStyle=r,A.globalAlpha=.9,A.fillRect(d+h-o,f,o,a((1-l/g)*m))}}},e}()},31713,e=>{"use strict";let t;e.s(["default",()=>l6],31713);var r,n,i,a,o,s,l,u,c,d,f,h,m,p,A,g,B,C,y,b,M,E,x,F,S,T,w,R,I,D,G,L,P,H,O,k,_,U,j,J,N,K,Q,W,V,X,q,Y,Z,z,$,ee,et,er,en,ei,ea,eo,es=e.i(43476),el=e.i(71645),eu=e.i(18566),ec=e.i(46712);e.s(["ACESFilmicToneMapping",()=>ef.ACESFilmicToneMapping,"AddEquation",()=>ef.AddEquation,"AddOperation",()=>ef.AddOperation,"AdditiveAnimationBlendMode",()=>ef.AdditiveAnimationBlendMode,"AdditiveBlending",()=>ef.AdditiveBlending,"AgXToneMapping",()=>ef.AgXToneMapping,"AlphaFormat",()=>ef.AlphaFormat,"AlwaysCompare",()=>ef.AlwaysCompare,"AlwaysDepth",()=>ef.AlwaysDepth,"AlwaysStencilFunc",()=>ef.AlwaysStencilFunc,"AmbientLight",()=>ef.AmbientLight,"AnimationAction",()=>ef.AnimationAction,"AnimationClip",()=>ef.AnimationClip,"AnimationLoader",()=>ef.AnimationLoader,"AnimationMixer",()=>ef.AnimationMixer,"AnimationObjectGroup",()=>ef.AnimationObjectGroup,"AnimationUtils",()=>ef.AnimationUtils,"ArcCurve",()=>ef.ArcCurve,"ArrayCamera",()=>ef.ArrayCamera,"ArrowHelper",()=>ef.ArrowHelper,"AttachedBindMode",()=>ef.AttachedBindMode,"Audio",()=>ef.Audio,"AudioAnalyser",()=>ef.AudioAnalyser,"AudioContext",()=>ef.AudioContext,"AudioListener",()=>ef.AudioListener,"AudioLoader",()=>ef.AudioLoader,"AxesHelper",()=>ef.AxesHelper,"BackSide",()=>ef.BackSide,"BasicDepthPacking",()=>ef.BasicDepthPacking,"BasicShadowMap",()=>ef.BasicShadowMap,"BatchedMesh",()=>ef.BatchedMesh,"Bone",()=>ef.Bone,"BooleanKeyframeTrack",()=>ef.BooleanKeyframeTrack,"Box2",()=>ef.Box2,"Box3",()=>ef.Box3,"Box3Helper",()=>ef.Box3Helper,"BoxGeometry",()=>ef.BoxGeometry,"BoxHelper",()=>ef.BoxHelper,"BufferAttribute",()=>ef.BufferAttribute,"BufferGeometry",()=>ef.BufferGeometry,"BufferGeometryLoader",()=>ef.BufferGeometryLoader,"ByteType",()=>ef.ByteType,"Cache",()=>ef.Cache,"Camera",()=>ef.Camera,"CameraHelper",()=>ef.CameraHelper,"CanvasTexture",()=>ef.CanvasTexture,"CapsuleGeometry",()=>ef.CapsuleGeometry,"CatmullRomCurve3",()=>ef.CatmullRomCurve3,"CineonToneMapping",()=>ef.CineonToneMapping,"CircleGeometry",()=>ef.CircleGeometry,"ClampToEdgeWrapping",()=>ef.ClampToEdgeWrapping,"Clock",()=>ef.Clock,"Color",()=>ef.Color,"ColorKeyframeTrack",()=>ef.ColorKeyframeTrack,"ColorManagement",()=>ef.ColorManagement,"CompressedArrayTexture",()=>ef.CompressedArrayTexture,"CompressedCubeTexture",()=>ef.CompressedCubeTexture,"CompressedTexture",()=>ef.CompressedTexture,"CompressedTextureLoader",()=>ef.CompressedTextureLoader,"ConeGeometry",()=>ef.ConeGeometry,"ConstantAlphaFactor",()=>ef.ConstantAlphaFactor,"ConstantColorFactor",()=>ef.ConstantColorFactor,"Controls",()=>ef.Controls,"CubeCamera",()=>ef.CubeCamera,"CubeReflectionMapping",()=>ef.CubeReflectionMapping,"CubeRefractionMapping",()=>ef.CubeRefractionMapping,"CubeTexture",()=>ef.CubeTexture,"CubeTextureLoader",()=>ef.CubeTextureLoader,"CubeUVReflectionMapping",()=>ef.CubeUVReflectionMapping,"CubicBezierCurve",()=>ef.CubicBezierCurve,"CubicBezierCurve3",()=>ef.CubicBezierCurve3,"CubicInterpolant",()=>ef.CubicInterpolant,"CullFaceBack",()=>ef.CullFaceBack,"CullFaceFront",()=>ef.CullFaceFront,"CullFaceFrontBack",()=>ef.CullFaceFrontBack,"CullFaceNone",()=>ef.CullFaceNone,"Curve",()=>ef.Curve,"CurvePath",()=>ef.CurvePath,"CustomBlending",()=>ef.CustomBlending,"CustomToneMapping",()=>ef.CustomToneMapping,"CylinderGeometry",()=>ef.CylinderGeometry,"Cylindrical",()=>ef.Cylindrical,"Data3DTexture",()=>ef.Data3DTexture,"DataArrayTexture",()=>ef.DataArrayTexture,"DataTexture",()=>ef.DataTexture,"DataTextureLoader",()=>ef.DataTextureLoader,"DataUtils",()=>ef.DataUtils,"DecrementStencilOp",()=>ef.DecrementStencilOp,"DecrementWrapStencilOp",()=>ef.DecrementWrapStencilOp,"DefaultLoadingManager",()=>ef.DefaultLoadingManager,"DepthFormat",()=>ef.DepthFormat,"DepthStencilFormat",()=>ef.DepthStencilFormat,"DepthTexture",()=>ef.DepthTexture,"DetachedBindMode",()=>ef.DetachedBindMode,"DirectionalLight",()=>ef.DirectionalLight,"DirectionalLightHelper",()=>ef.DirectionalLightHelper,"DiscreteInterpolant",()=>ef.DiscreteInterpolant,"DodecahedronGeometry",()=>ef.DodecahedronGeometry,"DoubleSide",()=>ef.DoubleSide,"DstAlphaFactor",()=>ef.DstAlphaFactor,"DstColorFactor",()=>ef.DstColorFactor,"DynamicCopyUsage",()=>ef.DynamicCopyUsage,"DynamicDrawUsage",()=>ef.DynamicDrawUsage,"DynamicReadUsage",()=>ef.DynamicReadUsage,"EdgesGeometry",()=>ef.EdgesGeometry,"EllipseCurve",()=>ef.EllipseCurve,"EqualCompare",()=>ef.EqualCompare,"EqualDepth",()=>ef.EqualDepth,"EqualStencilFunc",()=>ef.EqualStencilFunc,"EquirectangularReflectionMapping",()=>ef.EquirectangularReflectionMapping,"EquirectangularRefractionMapping",()=>ef.EquirectangularRefractionMapping,"Euler",()=>ef.Euler,"EventDispatcher",()=>ef.EventDispatcher,"ExternalTexture",()=>ef.ExternalTexture,"ExtrudeGeometry",()=>ef.ExtrudeGeometry,"FileLoader",()=>ef.FileLoader,"Float16BufferAttribute",()=>ef.Float16BufferAttribute,"Float32BufferAttribute",()=>ef.Float32BufferAttribute,"FloatType",()=>ef.FloatType,"Fog",()=>ef.Fog,"FogExp2",()=>ef.FogExp2,"FramebufferTexture",()=>ef.FramebufferTexture,"FrontSide",()=>ef.FrontSide,"Frustum",()=>ef.Frustum,"FrustumArray",()=>ef.FrustumArray,"GLBufferAttribute",()=>ef.GLBufferAttribute,"GLSL1",()=>ef.GLSL1,"GLSL3",()=>ef.GLSL3,"GreaterCompare",()=>ef.GreaterCompare,"GreaterDepth",()=>ef.GreaterDepth,"GreaterEqualCompare",()=>ef.GreaterEqualCompare,"GreaterEqualDepth",()=>ef.GreaterEqualDepth,"GreaterEqualStencilFunc",()=>ef.GreaterEqualStencilFunc,"GreaterStencilFunc",()=>ef.GreaterStencilFunc,"GridHelper",()=>ef.GridHelper,"Group",()=>ef.Group,"HalfFloatType",()=>ef.HalfFloatType,"HemisphereLight",()=>ef.HemisphereLight,"HemisphereLightHelper",()=>ef.HemisphereLightHelper,"IcosahedronGeometry",()=>ef.IcosahedronGeometry,"ImageBitmapLoader",()=>ef.ImageBitmapLoader,"ImageLoader",()=>ef.ImageLoader,"ImageUtils",()=>ef.ImageUtils,"IncrementStencilOp",()=>ef.IncrementStencilOp,"IncrementWrapStencilOp",()=>ef.IncrementWrapStencilOp,"InstancedBufferAttribute",()=>ef.InstancedBufferAttribute,"InstancedBufferGeometry",()=>ef.InstancedBufferGeometry,"InstancedInterleavedBuffer",()=>ef.InstancedInterleavedBuffer,"InstancedMesh",()=>ef.InstancedMesh,"Int16BufferAttribute",()=>ef.Int16BufferAttribute,"Int32BufferAttribute",()=>ef.Int32BufferAttribute,"Int8BufferAttribute",()=>ef.Int8BufferAttribute,"IntType",()=>ef.IntType,"InterleavedBuffer",()=>ef.InterleavedBuffer,"InterleavedBufferAttribute",()=>ef.InterleavedBufferAttribute,"Interpolant",()=>ef.Interpolant,"InterpolateDiscrete",()=>ef.InterpolateDiscrete,"InterpolateLinear",()=>ef.InterpolateLinear,"InterpolateSmooth",()=>ef.InterpolateSmooth,"InterpolationSamplingMode",()=>ef.InterpolationSamplingMode,"InterpolationSamplingType",()=>ef.InterpolationSamplingType,"InvertStencilOp",()=>ef.InvertStencilOp,"KeepStencilOp",()=>ef.KeepStencilOp,"KeyframeTrack",()=>ef.KeyframeTrack,"LOD",()=>ef.LOD,"LatheGeometry",()=>ef.LatheGeometry,"Layers",()=>ef.Layers,"LessCompare",()=>ef.LessCompare,"LessDepth",()=>ef.LessDepth,"LessEqualCompare",()=>ef.LessEqualCompare,"LessEqualDepth",()=>ef.LessEqualDepth,"LessEqualStencilFunc",()=>ef.LessEqualStencilFunc,"LessStencilFunc",()=>ef.LessStencilFunc,"Light",()=>ef.Light,"LightProbe",()=>ef.LightProbe,"Line",()=>ef.Line,"Line3",()=>ef.Line3,"LineBasicMaterial",()=>ef.LineBasicMaterial,"LineCurve",()=>ef.LineCurve,"LineCurve3",()=>ef.LineCurve3,"LineDashedMaterial",()=>ef.LineDashedMaterial,"LineLoop",()=>ef.LineLoop,"LineSegments",()=>ef.LineSegments,"LinearFilter",()=>ef.LinearFilter,"LinearInterpolant",()=>ef.LinearInterpolant,"LinearMipMapLinearFilter",()=>ef.LinearMipMapLinearFilter,"LinearMipMapNearestFilter",()=>ef.LinearMipMapNearestFilter,"LinearMipmapLinearFilter",()=>ef.LinearMipmapLinearFilter,"LinearMipmapNearestFilter",()=>ef.LinearMipmapNearestFilter,"LinearSRGBColorSpace",()=>ef.LinearSRGBColorSpace,"LinearToneMapping",()=>ef.LinearToneMapping,"LinearTransfer",()=>ef.LinearTransfer,"Loader",()=>ef.Loader,"LoaderUtils",()=>ef.LoaderUtils,"LoadingManager",()=>ef.LoadingManager,"LoopOnce",()=>ef.LoopOnce,"LoopPingPong",()=>ef.LoopPingPong,"LoopRepeat",()=>ef.LoopRepeat,"MOUSE",()=>ef.MOUSE,"Material",()=>ef.Material,"MaterialLoader",()=>ef.MaterialLoader,"MathUtils",()=>ef.MathUtils,"Matrix2",()=>ef.Matrix2,"Matrix3",()=>ef.Matrix3,"Matrix4",()=>ef.Matrix4,"MaxEquation",()=>ef.MaxEquation,"Mesh",()=>ef.Mesh,"MeshBasicMaterial",()=>ef.MeshBasicMaterial,"MeshDepthMaterial",()=>ef.MeshDepthMaterial,"MeshDistanceMaterial",()=>ef.MeshDistanceMaterial,"MeshLambertMaterial",()=>ef.MeshLambertMaterial,"MeshMatcapMaterial",()=>ef.MeshMatcapMaterial,"MeshNormalMaterial",()=>ef.MeshNormalMaterial,"MeshPhongMaterial",()=>ef.MeshPhongMaterial,"MeshPhysicalMaterial",()=>ef.MeshPhysicalMaterial,"MeshStandardMaterial",()=>ef.MeshStandardMaterial,"MeshToonMaterial",()=>ef.MeshToonMaterial,"MinEquation",()=>ef.MinEquation,"MirroredRepeatWrapping",()=>ef.MirroredRepeatWrapping,"MixOperation",()=>ef.MixOperation,"MultiplyBlending",()=>ef.MultiplyBlending,"MultiplyOperation",()=>ef.MultiplyOperation,"NearestFilter",()=>ef.NearestFilter,"NearestMipMapLinearFilter",()=>ef.NearestMipMapLinearFilter,"NearestMipMapNearestFilter",()=>ef.NearestMipMapNearestFilter,"NearestMipmapLinearFilter",()=>ef.NearestMipmapLinearFilter,"NearestMipmapNearestFilter",()=>ef.NearestMipmapNearestFilter,"NeutralToneMapping",()=>ef.NeutralToneMapping,"NeverCompare",()=>ef.NeverCompare,"NeverDepth",()=>ef.NeverDepth,"NeverStencilFunc",()=>ef.NeverStencilFunc,"NoBlending",()=>ef.NoBlending,"NoColorSpace",()=>ef.NoColorSpace,"NoToneMapping",()=>ef.NoToneMapping,"NormalAnimationBlendMode",()=>ef.NormalAnimationBlendMode,"NormalBlending",()=>ef.NormalBlending,"NotEqualCompare",()=>ef.NotEqualCompare,"NotEqualDepth",()=>ef.NotEqualDepth,"NotEqualStencilFunc",()=>ef.NotEqualStencilFunc,"NumberKeyframeTrack",()=>ef.NumberKeyframeTrack,"Object3D",()=>ef.Object3D,"ObjectLoader",()=>ef.ObjectLoader,"ObjectSpaceNormalMap",()=>ef.ObjectSpaceNormalMap,"OctahedronGeometry",()=>ef.OctahedronGeometry,"OneFactor",()=>ef.OneFactor,"OneMinusConstantAlphaFactor",()=>ef.OneMinusConstantAlphaFactor,"OneMinusConstantColorFactor",()=>ef.OneMinusConstantColorFactor,"OneMinusDstAlphaFactor",()=>ef.OneMinusDstAlphaFactor,"OneMinusDstColorFactor",()=>ef.OneMinusDstColorFactor,"OneMinusSrcAlphaFactor",()=>ef.OneMinusSrcAlphaFactor,"OneMinusSrcColorFactor",()=>ef.OneMinusSrcColorFactor,"OrthographicCamera",()=>ef.OrthographicCamera,"PCFShadowMap",()=>ef.PCFShadowMap,"PCFSoftShadowMap",()=>ef.PCFSoftShadowMap,"PMREMGenerator",()=>ed.PMREMGenerator,"Path",()=>ef.Path,"PerspectiveCamera",()=>ef.PerspectiveCamera,"Plane",()=>ef.Plane,"PlaneGeometry",()=>ef.PlaneGeometry,"PlaneHelper",()=>ef.PlaneHelper,"PointLight",()=>ef.PointLight,"PointLightHelper",()=>ef.PointLightHelper,"Points",()=>ef.Points,"PointsMaterial",()=>ef.PointsMaterial,"PolarGridHelper",()=>ef.PolarGridHelper,"PolyhedronGeometry",()=>ef.PolyhedronGeometry,"PositionalAudio",()=>ef.PositionalAudio,"PropertyBinding",()=>ef.PropertyBinding,"PropertyMixer",()=>ef.PropertyMixer,"QuadraticBezierCurve",()=>ef.QuadraticBezierCurve,"QuadraticBezierCurve3",()=>ef.QuadraticBezierCurve3,"Quaternion",()=>ef.Quaternion,"QuaternionKeyframeTrack",()=>ef.QuaternionKeyframeTrack,"QuaternionLinearInterpolant",()=>ef.QuaternionLinearInterpolant,"RED_GREEN_RGTC2_Format",()=>ef.RED_GREEN_RGTC2_Format,"RED_RGTC1_Format",()=>ef.RED_RGTC1_Format,"REVISION",()=>ef.REVISION,"RGBADepthPacking",()=>ef.RGBADepthPacking,"RGBAFormat",()=>ef.RGBAFormat,"RGBAIntegerFormat",()=>ef.RGBAIntegerFormat,"RGBA_ASTC_10x10_Format",()=>ef.RGBA_ASTC_10x10_Format,"RGBA_ASTC_10x5_Format",()=>ef.RGBA_ASTC_10x5_Format,"RGBA_ASTC_10x6_Format",()=>ef.RGBA_ASTC_10x6_Format,"RGBA_ASTC_10x8_Format",()=>ef.RGBA_ASTC_10x8_Format,"RGBA_ASTC_12x10_Format",()=>ef.RGBA_ASTC_12x10_Format,"RGBA_ASTC_12x12_Format",()=>ef.RGBA_ASTC_12x12_Format,"RGBA_ASTC_4x4_Format",()=>ef.RGBA_ASTC_4x4_Format,"RGBA_ASTC_5x4_Format",()=>ef.RGBA_ASTC_5x4_Format,"RGBA_ASTC_5x5_Format",()=>ef.RGBA_ASTC_5x5_Format,"RGBA_ASTC_6x5_Format",()=>ef.RGBA_ASTC_6x5_Format,"RGBA_ASTC_6x6_Format",()=>ef.RGBA_ASTC_6x6_Format,"RGBA_ASTC_8x5_Format",()=>ef.RGBA_ASTC_8x5_Format,"RGBA_ASTC_8x6_Format",()=>ef.RGBA_ASTC_8x6_Format,"RGBA_ASTC_8x8_Format",()=>ef.RGBA_ASTC_8x8_Format,"RGBA_BPTC_Format",()=>ef.RGBA_BPTC_Format,"RGBA_ETC2_EAC_Format",()=>ef.RGBA_ETC2_EAC_Format,"RGBA_PVRTC_2BPPV1_Format",()=>ef.RGBA_PVRTC_2BPPV1_Format,"RGBA_PVRTC_4BPPV1_Format",()=>ef.RGBA_PVRTC_4BPPV1_Format,"RGBA_S3TC_DXT1_Format",()=>ef.RGBA_S3TC_DXT1_Format,"RGBA_S3TC_DXT3_Format",()=>ef.RGBA_S3TC_DXT3_Format,"RGBA_S3TC_DXT5_Format",()=>ef.RGBA_S3TC_DXT5_Format,"RGBDepthPacking",()=>ef.RGBDepthPacking,"RGBFormat",()=>ef.RGBFormat,"RGBIntegerFormat",()=>ef.RGBIntegerFormat,"RGB_BPTC_SIGNED_Format",()=>ef.RGB_BPTC_SIGNED_Format,"RGB_BPTC_UNSIGNED_Format",()=>ef.RGB_BPTC_UNSIGNED_Format,"RGB_ETC1_Format",()=>ef.RGB_ETC1_Format,"RGB_ETC2_Format",()=>ef.RGB_ETC2_Format,"RGB_PVRTC_2BPPV1_Format",()=>ef.RGB_PVRTC_2BPPV1_Format,"RGB_PVRTC_4BPPV1_Format",()=>ef.RGB_PVRTC_4BPPV1_Format,"RGB_S3TC_DXT1_Format",()=>ef.RGB_S3TC_DXT1_Format,"RGDepthPacking",()=>ef.RGDepthPacking,"RGFormat",()=>ef.RGFormat,"RGIntegerFormat",()=>ef.RGIntegerFormat,"RawShaderMaterial",()=>ef.RawShaderMaterial,"Ray",()=>ef.Ray,"Raycaster",()=>ef.Raycaster,"RectAreaLight",()=>ef.RectAreaLight,"RedFormat",()=>ef.RedFormat,"RedIntegerFormat",()=>ef.RedIntegerFormat,"ReinhardToneMapping",()=>ef.ReinhardToneMapping,"RenderTarget",()=>ef.RenderTarget,"RenderTarget3D",()=>ef.RenderTarget3D,"RepeatWrapping",()=>ef.RepeatWrapping,"ReplaceStencilOp",()=>ef.ReplaceStencilOp,"ReverseSubtractEquation",()=>ef.ReverseSubtractEquation,"RingGeometry",()=>ef.RingGeometry,"SIGNED_RED_GREEN_RGTC2_Format",()=>ef.SIGNED_RED_GREEN_RGTC2_Format,"SIGNED_RED_RGTC1_Format",()=>ef.SIGNED_RED_RGTC1_Format,"SRGBColorSpace",()=>ef.SRGBColorSpace,"SRGBTransfer",()=>ef.SRGBTransfer,"Scene",()=>ef.Scene,"ShaderChunk",()=>ed.ShaderChunk,"ShaderLib",()=>ed.ShaderLib,"ShaderMaterial",()=>ef.ShaderMaterial,"ShadowMaterial",()=>ef.ShadowMaterial,"Shape",()=>ef.Shape,"ShapeGeometry",()=>ef.ShapeGeometry,"ShapePath",()=>ef.ShapePath,"ShapeUtils",()=>ef.ShapeUtils,"ShortType",()=>ef.ShortType,"Skeleton",()=>ef.Skeleton,"SkeletonHelper",()=>ef.SkeletonHelper,"SkinnedMesh",()=>ef.SkinnedMesh,"Source",()=>ef.Source,"Sphere",()=>ef.Sphere,"SphereGeometry",()=>ef.SphereGeometry,"Spherical",()=>ef.Spherical,"SphericalHarmonics3",()=>ef.SphericalHarmonics3,"SplineCurve",()=>ef.SplineCurve,"SpotLight",()=>ef.SpotLight,"SpotLightHelper",()=>ef.SpotLightHelper,"Sprite",()=>ef.Sprite,"SpriteMaterial",()=>ef.SpriteMaterial,"SrcAlphaFactor",()=>ef.SrcAlphaFactor,"SrcAlphaSaturateFactor",()=>ef.SrcAlphaSaturateFactor,"SrcColorFactor",()=>ef.SrcColorFactor,"StaticCopyUsage",()=>ef.StaticCopyUsage,"StaticDrawUsage",()=>ef.StaticDrawUsage,"StaticReadUsage",()=>ef.StaticReadUsage,"StereoCamera",()=>ef.StereoCamera,"StreamCopyUsage",()=>ef.StreamCopyUsage,"StreamDrawUsage",()=>ef.StreamDrawUsage,"StreamReadUsage",()=>ef.StreamReadUsage,"StringKeyframeTrack",()=>ef.StringKeyframeTrack,"SubtractEquation",()=>ef.SubtractEquation,"SubtractiveBlending",()=>ef.SubtractiveBlending,"TOUCH",()=>ef.TOUCH,"TangentSpaceNormalMap",()=>ef.TangentSpaceNormalMap,"TetrahedronGeometry",()=>ef.TetrahedronGeometry,"Texture",()=>ef.Texture,"TextureLoader",()=>ef.TextureLoader,"TextureUtils",()=>ef.TextureUtils,"Timer",()=>ef.Timer,"TimestampQuery",()=>ef.TimestampQuery,"TorusGeometry",()=>ef.TorusGeometry,"TorusKnotGeometry",()=>ef.TorusKnotGeometry,"Triangle",()=>ef.Triangle,"TriangleFanDrawMode",()=>ef.TriangleFanDrawMode,"TriangleStripDrawMode",()=>ef.TriangleStripDrawMode,"TrianglesDrawMode",()=>ef.TrianglesDrawMode,"TubeGeometry",()=>ef.TubeGeometry,"UVMapping",()=>ef.UVMapping,"Uint16BufferAttribute",()=>ef.Uint16BufferAttribute,"Uint32BufferAttribute",()=>ef.Uint32BufferAttribute,"Uint8BufferAttribute",()=>ef.Uint8BufferAttribute,"Uint8ClampedBufferAttribute",()=>ef.Uint8ClampedBufferAttribute,"Uniform",()=>ef.Uniform,"UniformsGroup",()=>ef.UniformsGroup,"UniformsLib",()=>ed.UniformsLib,"UniformsUtils",()=>ef.UniformsUtils,"UnsignedByteType",()=>ef.UnsignedByteType,"UnsignedInt101111Type",()=>ef.UnsignedInt101111Type,"UnsignedInt248Type",()=>ef.UnsignedInt248Type,"UnsignedInt5999Type",()=>ef.UnsignedInt5999Type,"UnsignedIntType",()=>ef.UnsignedIntType,"UnsignedShort4444Type",()=>ef.UnsignedShort4444Type,"UnsignedShort5551Type",()=>ef.UnsignedShort5551Type,"UnsignedShortType",()=>ef.UnsignedShortType,"VSMShadowMap",()=>ef.VSMShadowMap,"Vector2",()=>ef.Vector2,"Vector3",()=>ef.Vector3,"Vector4",()=>ef.Vector4,"VectorKeyframeTrack",()=>ef.VectorKeyframeTrack,"VideoFrameTexture",()=>ef.VideoFrameTexture,"VideoTexture",()=>ef.VideoTexture,"WebGL3DRenderTarget",()=>ef.WebGL3DRenderTarget,"WebGLArrayRenderTarget",()=>ef.WebGLArrayRenderTarget,"WebGLCoordinateSystem",()=>ef.WebGLCoordinateSystem,"WebGLCubeRenderTarget",()=>ef.WebGLCubeRenderTarget,"WebGLRenderTarget",()=>ef.WebGLRenderTarget,"WebGLRenderer",()=>ed.WebGLRenderer,"WebGLUtils",()=>ed.WebGLUtils,"WebGPUCoordinateSystem",()=>ef.WebGPUCoordinateSystem,"WebXRController",()=>ef.WebXRController,"WireframeGeometry",()=>ef.WireframeGeometry,"WrapAroundEnding",()=>ef.WrapAroundEnding,"ZeroCurvatureEnding",()=>ef.ZeroCurvatureEnding,"ZeroFactor",()=>ef.ZeroFactor,"ZeroSlopeEnding",()=>ef.ZeroSlopeEnding,"ZeroStencilOp",()=>ef.ZeroStencilOp,"createCanvasElement",()=>ef.createCanvasElement],32009);var ed=e.i(8560),ef=e.i(90072),eh=e.i(32009);function em(e,t){let r;return function(){for(var n=arguments.length,i=Array(n),a=0;ae(...i),t)}}let ep=["x","y","top","bottom","left","right","width","height"];var eA=e.i(46791);function eg(e){let{ref:t,children:r,fallback:n,resize:i,style:a,gl:o,events:s=ec.f,eventSource:l,eventPrefix:u,shadows:c,linear:d,flat:f,legacy:h,orthographic:m,frameloop:p,dpr:A,performance:g,raycaster:B,camera:C,scene:y,onPointerMissed:b,onCreated:M,...E}=e;el.useMemo(()=>(0,ec.e)(eh),[]);let x=(0,ec.u)(),[F,S]=function(){var e,t,r;let{debounce:n,scroll:i,polyfill:a,offsetSize:o}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{debounce:0,scroll:!1,offsetSize:!1},s=a||("undefined"==typeof window?class{}:window.ResizeObserver);if(!s)throw Error("This browser does not support ResizeObserver out of the box. See: https://github.com/react-spring/react-use-measure/#resize-observer-polyfills");let[l,u]=(0,el.useState)({left:0,top:0,width:0,height:0,bottom:0,right:0,x:0,y:0}),c=(0,el.useRef)({element:null,scrollContainers:null,resizeObserver:null,lastBounds:l,orientationHandler:null}),d=n?"number"==typeof n?n:n.scroll:null,f=n?"number"==typeof n?n:n.resize:null,h=(0,el.useRef)(!1);(0,el.useEffect)(()=>(h.current=!0,()=>void(h.current=!1)));let[m,p,A]=(0,el.useMemo)(()=>{let e=()=>{let e,t;if(!c.current.element)return;let{left:r,top:n,width:i,height:a,bottom:s,right:l,x:d,y:f}=c.current.element.getBoundingClientRect(),m={left:r,top:n,width:i,height:a,bottom:s,right:l,x:d,y:f};c.current.element instanceof HTMLElement&&o&&(m.height=c.current.element.offsetHeight,m.width=c.current.element.offsetWidth),Object.freeze(m),h.current&&(e=c.current.lastBounds,t=m,!ep.every(r=>e[r]===t[r]))&&u(c.current.lastBounds=m)};return[e,f?em(e,f):e,d?em(e,d):e]},[u,o,d,f]);function g(){c.current.scrollContainers&&(c.current.scrollContainers.forEach(e=>e.removeEventListener("scroll",A,!0)),c.current.scrollContainers=null),c.current.resizeObserver&&(c.current.resizeObserver.disconnect(),c.current.resizeObserver=null),c.current.orientationHandler&&("orientation"in screen&&"removeEventListener"in screen.orientation?screen.orientation.removeEventListener("change",c.current.orientationHandler):"onorientationchange"in window&&window.removeEventListener("orientationchange",c.current.orientationHandler))}function B(){c.current.element&&(c.current.resizeObserver=new s(A),c.current.resizeObserver.observe(c.current.element),i&&c.current.scrollContainers&&c.current.scrollContainers.forEach(e=>e.addEventListener("scroll",A,{capture:!0,passive:!0})),c.current.orientationHandler=()=>{A()},"orientation"in screen&&"addEventListener"in screen.orientation?screen.orientation.addEventListener("change",c.current.orientationHandler):"onorientationchange"in window&&window.addEventListener("orientationchange",c.current.orientationHandler))}return e=A,t=!!i,(0,el.useEffect)(()=>{if(t)return window.addEventListener("scroll",e,{capture:!0,passive:!0}),()=>void window.removeEventListener("scroll",e,!0)},[e,t]),r=p,(0,el.useEffect)(()=>(window.addEventListener("resize",r),()=>void window.removeEventListener("resize",r)),[r]),(0,el.useEffect)(()=>{g(),B()},[i,A,p]),(0,el.useEffect)(()=>g,[]),[e=>{e&&e!==c.current.element&&(g(),c.current.element=e,c.current.scrollContainers=function e(t){let r=[];if(!t||t===document.body)return r;let{overflow:n,overflowX:i,overflowY:a}=window.getComputedStyle(t);return[n,i,a].some(e=>"auto"===e||"scroll"===e)&&r.push(t),[...r,...e(t.parentElement)]}(e),B())},l,m]}({scroll:!0,debounce:{scroll:50,resize:0},...i}),T=el.useRef(null),w=el.useRef(null);el.useImperativeHandle(t,()=>T.current);let R=(0,ec.a)(b),[I,D]=el.useState(!1),[G,L]=el.useState(!1);if(I)throw I;if(G)throw G;let P=el.useRef(null);(0,ec.b)(()=>{let e=T.current;S.width>0&&S.height>0&&e&&(P.current||(P.current=(0,ec.c)(e)),async function(){await P.current.configure({gl:o,scene:y,events:s,shadows:c,linear:d,flat:f,legacy:h,orthographic:m,frameloop:p,dpr:A,performance:g,raycaster:B,camera:C,size:S,onPointerMissed:function(){for(var e=arguments.length,t=Array(e),r=0;r{null==e.events.connect||e.events.connect(l?(0,ec.i)(l)?l.current:l:w.current),u&&e.setEvents({compute:(e,t)=>{let r=e[u+"X"],n=e[u+"Y"];t.pointer.set(r/t.size.width*2-1,-(2*(n/t.size.height))+1),t.raycaster.setFromCamera(t.pointer,t.camera)}}),null==M||M(e)}}),P.current.render((0,es.jsx)(x,{children:(0,es.jsx)(ec.E,{set:L,children:(0,es.jsx)(el.Suspense,{fallback:(0,es.jsx)(ec.B,{set:D}),children:null!=r?r:null})})}))}())}),el.useEffect(()=>{let e=T.current;if(e)return()=>(0,ec.d)(e)},[]);let H=l?"none":"auto";return(0,es.jsx)("div",{ref:w,style:{position:"relative",width:"100%",height:"100%",overflow:"hidden",pointerEvents:H,...a},...E,children:(0,es.jsx)("div",{ref:F,style:{width:"100%",height:"100%"},children:(0,es.jsx)("canvas",{ref:T,style:{display:"block"},children:n})})})}function ev(e){return(0,es.jsx)(eA.FiberProvider,{children:(0,es.jsx)(eg,{...e})})}function eB(e,t,r){if(!t.has(e))throw TypeError("attempted to "+r+" private field on non-instance");return t.get(e)}function eC(e,t){var r=eB(e,t,"get");return r.get?r.get.call(e):r.value}function ey(e,t){if(t.has(e))throw TypeError("Cannot initialize the same private elements twice on an object")}function eb(e,t,r){ey(e,t),t.set(e,r)}function eM(e,t,r){var n=eB(e,t,"set");if(n.set)n.set.call(e,r);else{if(!n.writable)throw TypeError("attempted to set read only private field");n.value=r}return r}function eE(e,t,r){if(!t.has(e))throw TypeError("attempted to get private field on non-instance");return r}function ex(e,t){ey(e,t),t.add(e)}e.i(39695),e.i(98133),e.i(95087);var eF=class{subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}};e.i(47167);var eS={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},eT=new(r=new WeakMap,n=new WeakMap,class{setTimeoutProvider(e){eM(this,r,e)}setTimeout(e,t){return eC(this,r).setTimeout(e,t)}clearTimeout(e){eC(this,r).clearTimeout(e)}setInterval(e,t){return eC(this,r).setInterval(e,t)}clearInterval(e){eC(this,r).clearInterval(e)}constructor(){eb(this,r,{writable:!0,value:eS}),eb(this,n,{writable:!0,value:!1})}}),ew="undefined"==typeof window||"Deno"in globalThis;function eR(){}function eI(e){return"number"==typeof e&&e>=0&&e!==1/0}function eD(e,t){return Math.max(e+(t||0)-Date.now(),0)}function eG(e,t){return"function"==typeof e?e(t):e}function eL(e,t){return"function"==typeof e?e(t):e}function eP(e,t){let{type:r="all",exact:n,fetchStatus:i,predicate:a,queryKey:o,stale:s}=e;if(o){if(n){if(t.queryHash!==eO(o,t.options))return!1}else if(!e_(t.queryKey,o))return!1}if("all"!==r){let e=t.isActive();if("active"===r&&!e||"inactive"===r&&e)return!1}return("boolean"!=typeof s||t.isStale()===s)&&(!i||i===t.state.fetchStatus)&&(!a||!!a(t))}function eH(e,t){let{exact:r,status:n,predicate:i,mutationKey:a}=e;if(a){if(!t.options.mutationKey)return!1;if(r){if(ek(t.options.mutationKey)!==ek(a))return!1}else if(!e_(t.options.mutationKey,a))return!1}return(!n||t.state.status===n)&&(!i||!!i(t))}function eO(e,t){return((null==t?void 0:t.queryKeyHashFn)||ek)(e)}function ek(e){return JSON.stringify(e,(e,t)=>eN(t)?Object.keys(t).sort().reduce((e,r)=>(e[r]=t[r],e),{}):t)}function e_(e,t){return e===t||typeof e==typeof t&&!!e&&!!t&&"object"==typeof e&&"object"==typeof t&&Object.keys(t).every(r=>e_(e[r],t[r]))}var eU=Object.prototype.hasOwnProperty;function ej(e,t){if(!t||Object.keys(e).length!==Object.keys(t).length)return!1;for(let r in e)if(e[r]!==t[r])return!1;return!0}function eJ(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function eN(e){if(!eK(e))return!1;let t=e.constructor;if(void 0===t)return!0;let r=t.prototype;return!!eK(r)&&!!r.hasOwnProperty("isPrototypeOf")&&Object.getPrototypeOf(e)===Object.prototype}function eK(e){return"[object Object]"===Object.prototype.toString.call(e)}function eQ(e,t,r){return"function"==typeof r.structuralSharing?r.structuralSharing(e,t):!1!==r.structuralSharing?function e(t,r){if(t===r)return t;let n=eJ(t)&&eJ(r);if(!n&&!(eN(t)&&eN(r)))return r;let i=(n?t:Object.keys(t)).length,a=n?r:Object.keys(r),o=a.length,s=n?Array(o):{},l=0;for(let u=0;u2&&void 0!==arguments[2]?arguments[2]:0,n=[...e,t];return r&&n.length>r?n.slice(1):n}function eV(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,n=[t,...e];return r&&n.length>r?n.slice(0,-1):n}var eX=Symbol();function eq(e,t){return!e.queryFn&&(null==t?void 0:t.initialPromise)?()=>t.initialPromise:e.queryFn&&e.queryFn!==eX?e.queryFn:()=>Promise.reject(Error("Missing queryFn: '".concat(e.queryHash,"'")))}var eY=new(i=new WeakMap,a=new WeakMap,o=new WeakMap,class extends eF{onSubscribe(){eC(this,a)||this.setEventListener(eC(this,o))}onUnsubscribe(){var e;this.hasListeners()||(null==(e=eC(this,a))||e.call(this),eM(this,a,void 0))}setEventListener(e){var t;eM(this,o,e),null==(t=eC(this,a))||t.call(this),eM(this,a,e(e=>{"boolean"==typeof e?this.setFocused(e):this.onFocus()}))}setFocused(e){eC(this,i)!==e&&(eM(this,i,e),this.onFocus())}onFocus(){let e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){var e;return"boolean"==typeof eC(this,i)?eC(this,i):(null==(e=globalThis.document)?void 0:e.visibilityState)!=="hidden"}constructor(){super(),eb(this,i,{writable:!0,value:void 0}),eb(this,a,{writable:!0,value:void 0}),eb(this,o,{writable:!0,value:void 0}),eM(this,o,e=>{if(!ew&&window.addEventListener){let t=()=>e();return window.addEventListener("visibilitychange",t,!1),()=>{window.removeEventListener("visibilitychange",t)}}})}}),eZ=function(e){setTimeout(e,0)},ez=function(){let e=[],t=0,r=e=>{e()},n=e=>{e()},i=eZ,a=n=>{t?e.push(n):i(()=>{r(n)})};return{batch:a=>{let o;t++;try{o=a()}finally{--t||(()=>{let t=e;e=[],t.length&&i(()=>{n(()=>{t.forEach(e=>{r(e)})})})})()}return o},batchCalls:e=>function(){for(var t=arguments.length,r=Array(t),n=0;n{e(...r)})},schedule:a,setNotifyFunction:e=>{r=e},setBatchNotifyFunction:e=>{n=e},setScheduler:e=>{i=e}}}(),e$=new(s=new WeakMap,l=new WeakMap,u=new WeakMap,class extends eF{onSubscribe(){eC(this,l)||this.setEventListener(eC(this,u))}onUnsubscribe(){var e;this.hasListeners()||(null==(e=eC(this,l))||e.call(this),eM(this,l,void 0))}setEventListener(e){var t;eM(this,u,e),null==(t=eC(this,l))||t.call(this),eM(this,l,e(this.setOnline.bind(this)))}setOnline(e){eC(this,s)!==e&&(eM(this,s,e),this.listeners.forEach(t=>{t(e)}))}isOnline(){return eC(this,s)}constructor(){super(),eb(this,s,{writable:!0,value:!0}),eb(this,l,{writable:!0,value:void 0}),eb(this,u,{writable:!0,value:void 0}),eM(this,u,e=>{if(!ew&&window.addEventListener){let t=()=>e(!0),r=()=>e(!1);return window.addEventListener("online",t,!1),window.addEventListener("offline",r,!1),()=>{window.removeEventListener("online",t),window.removeEventListener("offline",r)}}})}});function e0(){let e,t,r=new Promise((r,n)=>{e=r,t=n});function n(e){Object.assign(r,e),delete r.resolve,delete r.reject}return r.status="pending",r.catch(()=>{}),r.resolve=t=>{n({status:"fulfilled",value:t}),e(t)},r.reject=e=>{n({status:"rejected",reason:e}),t(e)},r}function e1(e){return Math.min(1e3*2**e,3e4)}function e9(e){return(null!=e?e:"online")!=="online"||e$.isOnline()}var e2=class extends Error{constructor(e){super("CancelledError"),this.revert=null==e?void 0:e.revert,this.silent=null==e?void 0:e.silent}};function e8(e){let t,r=!1,n=0,i=e0(),a=()=>eY.isFocused()&&("always"===e.networkMode||e$.isOnline())&&e.canRun(),o=()=>e9(e.networkMode)&&e.canRun(),s=e=>{"pending"===i.status&&(null==t||t(),i.resolve(e))},l=e=>{"pending"===i.status&&(null==t||t(),i.reject(e))},u=()=>new Promise(r=>{var n;t=e=>{("pending"!==i.status||a())&&r(e)},null==(n=e.onPause)||n.call(e)}).then(()=>{if(t=void 0,"pending"===i.status){var r;null==(r=e.onContinue)||r.call(e)}}),c=()=>{let t;if("pending"!==i.status)return;let o=0===n?e.initialPromise:void 0;try{t=null!=o?o:e.fn()}catch(e){t=Promise.reject(e)}Promise.resolve(t).then(s).catch(t=>{var o,s,d;if("pending"!==i.status)return;let f=null!=(s=e.retry)?s:3*!ew,h=null!=(d=e.retryDelay)?d:e1,m="function"==typeof h?h(n,t):h,p=!0===f||"number"==typeof f&&n{eT.setTimeout(e,m)}).then(()=>a()?void 0:u()).then(()=>{r?l(t):c()})})};return{promise:i,status:()=>i.status,cancel:t=>{if("pending"===i.status){var r;let n=new e2(t);l(n),null==(r=e.onCancel)||r.call(e,n)}},continue:()=>(null==t||t(),i),cancelRetry:()=>{r=!0},continueRetry:()=>{r=!1},canStart:o,start:()=>(o()?c():u().then(c),i)}}var e3=(c=new WeakMap,class{destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),eI(this.gcTime)&&eM(this,c,eT.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,null!=e?e:ew?1/0:3e5)}clearGcTimeout(){eC(this,c)&&(eT.clearTimeout(eC(this,c)),eM(this,c,void 0))}constructor(){eb(this,c,{writable:!0,value:void 0})}}),e5=(d=new WeakMap,f=new WeakMap,h=new WeakMap,m=new WeakMap,p=new WeakMap,A=new WeakMap,g=new WeakMap,B=new WeakSet,class extends e3{get meta(){return this.options.meta}get promise(){var e;return null==(e=eC(this,p))?void 0:e.promise}setOptions(e){if(this.options={...eC(this,A),...e},this.updateGcTime(this.options.gcTime),this.state&&void 0===this.state.data){let e=e7(this.options);void 0!==e.data&&(this.setState(e4(e.data,e.dataUpdatedAt)),eM(this,d,e))}}optionalRemove(){this.observers.length||"idle"!==this.state.fetchStatus||eC(this,h).remove(this)}setData(e,t){let r=eQ(this.state.data,e,this.options);return eE(this,B,te).call(this,{data:r,type:"success",dataUpdatedAt:null==t?void 0:t.updatedAt,manual:null==t?void 0:t.manual}),r}setState(e,t){eE(this,B,te).call(this,{type:"setState",state:e,setStateOptions:t})}cancel(e){var t,r;let n=null==(t=eC(this,p))?void 0:t.promise;return null==(r=eC(this,p))||r.cancel(e),n?n.then(eR).catch(eR):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}reset(){this.destroy(),this.setState(eC(this,d))}isActive(){return this.observers.some(e=>!1!==eL(e.options.enabled,this))}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===eX||this.state.dataUpdateCount+this.state.errorUpdateCount===0}isStatic(){return this.getObserversCount()>0&&this.observers.some(e=>"static"===eG(e.options.staleTime,this))}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):void 0===this.state.data||this.state.isInvalidated}isStaleByTime(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0;return void 0===this.state.data||"static"!==e&&(!!this.state.isInvalidated||!eD(this.state.dataUpdatedAt,e))}onFocus(){var e;let t=this.observers.find(e=>e.shouldFetchOnWindowFocus());null==t||t.refetch({cancelRefetch:!1}),null==(e=eC(this,p))||e.continue()}onOnline(){var e;let t=this.observers.find(e=>e.shouldFetchOnReconnect());null==t||t.refetch({cancelRefetch:!1}),null==(e=eC(this,p))||e.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),eC(this,h).notify({type:"observerAdded",query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(t=>t!==e),this.observers.length||(eC(this,p)&&(eC(this,g)?eC(this,p).cancel({revert:!0}):eC(this,p).cancelRetry()),this.scheduleGc()),eC(this,h).notify({type:"observerRemoved",query:this,observer:e}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||eE(this,B,te).call(this,{type:"invalidate"})}async fetch(e,t){var r,n,i,a,o,s,l,u,c,d,A,C;if("idle"!==this.state.fetchStatus&&(null==(r=eC(this,p))?void 0:r.status())!=="rejected"){if(void 0!==this.state.data&&(null==t?void 0:t.cancelRefetch))this.cancel({silent:!0});else if(eC(this,p))return eC(this,p).continueRetry(),eC(this,p).promise}if(e&&this.setOptions(e),!this.options.queryFn){let e=this.observers.find(e=>e.options.queryFn);e&&this.setOptions(e.options)}let y=new AbortController,b=e=>{Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(eM(this,g,!0),y.signal)})},M=()=>{let e=eq(this.options,t),r=(()=>{let e={client:eC(this,m),queryKey:this.queryKey,meta:this.meta};return b(e),e})();return(eM(this,g,!1),this.options.persister)?this.options.persister(e,r,this):e(r)},E=(()=>{let e={fetchOptions:t,options:this.options,queryKey:this.queryKey,client:eC(this,m),state:this.state,fetchFn:M};return b(e),e})();null==(n=this.options.behavior)||n.onFetch(E,this),eM(this,f,this.state),("idle"===this.state.fetchStatus||this.state.fetchMeta!==(null==(i=E.fetchOptions)?void 0:i.meta))&&eE(this,B,te).call(this,{type:"fetch",meta:null==(a=E.fetchOptions)?void 0:a.meta}),eM(this,p,e8({initialPromise:null==t?void 0:t.initialPromise,fn:E.fetchFn,onCancel:e=>{e instanceof e2&&e.revert&&this.setState({...eC(this,f),fetchStatus:"idle"}),y.abort()},onFail:(e,t)=>{eE(this,B,te).call(this,{type:"failed",failureCount:e,error:t})},onPause:()=>{eE(this,B,te).call(this,{type:"pause"})},onContinue:()=>{eE(this,B,te).call(this,{type:"continue"})},retry:E.options.retry,retryDelay:E.options.retryDelay,networkMode:E.options.networkMode,canRun:()=>!0}));try{let e=await eC(this,p).start();if(void 0===e)throw Error("".concat(this.queryHash," data is undefined"));return this.setData(e),null==(o=(s=eC(this,h).config).onSuccess)||o.call(s,e,this),null==(l=(u=eC(this,h).config).onSettled)||l.call(u,e,this.state.error,this),e}catch(e){if(e instanceof e2){if(e.silent)return eC(this,p).promise;else if(e.revert){if(void 0===this.state.data)throw e;return this.state.data}}throw eE(this,B,te).call(this,{type:"error",error:e}),null==(c=(d=eC(this,h).config).onError)||c.call(d,e,this),null==(A=(C=eC(this,h).config).onSettled)||A.call(C,this.state.data,e,this),e}finally{this.scheduleGc()}}constructor(e){var t;super(),ex(this,B),eb(this,d,{writable:!0,value:void 0}),eb(this,f,{writable:!0,value:void 0}),eb(this,h,{writable:!0,value:void 0}),eb(this,m,{writable:!0,value:void 0}),eb(this,p,{writable:!0,value:void 0}),eb(this,A,{writable:!0,value:void 0}),eb(this,g,{writable:!0,value:void 0}),eM(this,g,!1),eM(this,A,e.defaultOptions),this.setOptions(e.options),this.observers=[],eM(this,m,e.client),eM(this,h,eC(this,m).getQueryCache()),this.queryKey=e.queryKey,this.queryHash=e.queryHash,eM(this,d,e7(this.options)),this.state=null!=(t=e.state)?t:eC(this,d),this.scheduleGc()}});function e6(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:e9(t.networkMode)?"fetching":"paused",...void 0===e&&{error:null,status:"pending"}}}function e4(e,t){return{data:e,dataUpdatedAt:null!=t?t:Date.now(),error:null,isInvalidated:!1,status:"success"}}function e7(e){let t="function"==typeof e.initialData?e.initialData():e.initialData,r=void 0!==t,n=r?"function"==typeof e.initialDataUpdatedAt?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:r?null!=n?n:Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:r?"success":"pending",fetchStatus:"idle"}}function te(e){let t=t=>{switch(e.type){case"failed":return{...t,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case"pause":return{...t,fetchStatus:"paused"};case"continue":return{...t,fetchStatus:"fetching"};case"fetch":var r;return{...t,...e6(t.data,this.options),fetchMeta:null!=(r=e.meta)?r:null};case"success":let n={...t,...e4(e.data,e.dataUpdatedAt),dataUpdateCount:t.dataUpdateCount+1,...!e.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};return eM(this,f,e.manual?n:void 0),n;case"error":let i=e.error;return{...t,error:i,errorUpdateCount:t.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:t.fetchFailureCount+1,fetchFailureReason:i,fetchStatus:"idle",status:"error"};case"invalidate":return{...t,isInvalidated:!0};case"setState":return{...t,...e.state}}};this.state=t(this.state),ez.batch(()=>{this.observers.forEach(e=>{e.onQueryUpdate()}),eC(this,h).notify({query:this,type:"updated",action:e})})}var tt=(C=new WeakMap,y=new WeakMap,b=new WeakMap,M=new WeakMap,E=new WeakMap,x=new WeakMap,F=new WeakMap,S=new WeakMap,T=new WeakMap,w=new WeakMap,R=new WeakMap,I=new WeakMap,D=new WeakMap,G=new WeakMap,L=new WeakMap,P=new WeakSet,H=new WeakSet,O=new WeakSet,k=new WeakSet,_=new WeakSet,U=new WeakSet,j=new WeakSet,J=new WeakSet,N=new WeakSet,class extends eF{bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){1===this.listeners.size&&(eC(this,y).addObserver(this),tr(eC(this,y),this.options)?eE(this,P,to).call(this):this.updateResult(),eE(this,_,tc).call(this))}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return tn(eC(this,y),this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return tn(eC(this,y),this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,eE(this,U,td).call(this),eE(this,j,tf).call(this),eC(this,y).removeObserver(this)}setOptions(e){let t=this.options,r=eC(this,y);if(this.options=eC(this,C).defaultQueryOptions(e),void 0!==this.options.enabled&&"boolean"!=typeof this.options.enabled&&"function"!=typeof this.options.enabled&&"boolean"!=typeof eL(this.options.enabled,eC(this,y)))throw Error("Expected enabled to be a boolean or a callback that returns a boolean");eE(this,J,th).call(this),eC(this,y).setOptions(this.options),t._defaulted&&!ej(this.options,t)&&eC(this,C).getQueryCache().notify({type:"observerOptionsUpdated",query:eC(this,y),observer:this});let n=this.hasListeners();n&&ti(eC(this,y),r,this.options,t)&&eE(this,P,to).call(this),this.updateResult(),n&&(eC(this,y)!==r||eL(this.options.enabled,eC(this,y))!==eL(t.enabled,eC(this,y))||eG(this.options.staleTime,eC(this,y))!==eG(t.staleTime,eC(this,y)))&&eE(this,H,ts).call(this);let i=eE(this,O,tl).call(this);n&&(eC(this,y)!==r||eL(this.options.enabled,eC(this,y))!==eL(t.enabled,eC(this,y))||i!==eC(this,G))&&eE(this,k,tu).call(this,i)}getOptimisticResult(e){var t,r;let n=eC(this,C).getQueryCache().build(eC(this,C),e),i=this.createResult(n,e);return t=this,r=i,ej(t.getCurrentResult(),r)||(eM(this,M,i),eM(this,x,this.options),eM(this,E,eC(this,y).state)),i}getCurrentResult(){return eC(this,M)}trackResult(e,t){return new Proxy(e,{get:(e,r)=>(this.trackProp(r),null==t||t(r),"promise"===r&&(this.trackProp("data"),this.options.experimental_prefetchInRender||"pending"!==eC(this,F).status||eC(this,F).reject(Error("experimental_prefetchInRender feature flag is not enabled"))),Reflect.get(e,r))})}trackProp(e){eC(this,L).add(e)}getCurrentQuery(){return eC(this,y)}refetch(){let{...e}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.fetch({...e})}fetchOptimistic(e){let t=eC(this,C).defaultQueryOptions(e),r=eC(this,C).getQueryCache().build(eC(this,C),t);return r.fetch().then(()=>this.createResult(r,t))}fetch(e){var t;return eE(this,P,to).call(this,{...e,cancelRefetch:null==(t=e.cancelRefetch)||t}).then(()=>(this.updateResult(),eC(this,M)))}createResult(e,t){let r,n=eC(this,y),i=this.options,a=eC(this,M),o=eC(this,E),s=eC(this,x),l=e!==n?e.state:eC(this,b),{state:u}=e,c={...u},d=!1;if(t._optimisticResults){let r=this.hasListeners(),a=!r&&tr(e,t),o=r&&ti(e,n,t,i);(a||o)&&(c={...c,...e6(u.data,e.options)}),"isRestoring"===t._optimisticResults&&(c.fetchStatus="idle")}let{error:f,errorUpdatedAt:h,status:m}=c;r=c.data;let p=!1;if(void 0!==t.placeholderData&&void 0===r&&"pending"===m){let e;if((null==a?void 0:a.isPlaceholderData)&&t.placeholderData===(null==s?void 0:s.placeholderData))e=a.data,p=!0;else{var A;e="function"==typeof t.placeholderData?t.placeholderData(null==(A=eC(this,R))?void 0:A.state.data,eC(this,R)):t.placeholderData}void 0!==e&&(m="success",r=eQ(null==a?void 0:a.data,e,t),d=!0)}if(t.select&&void 0!==r&&!p)if(a&&r===(null==o?void 0:o.data)&&t.select===eC(this,T))r=eC(this,w);else try{eM(this,T,t.select),r=t.select(r),r=eQ(null==a?void 0:a.data,r,t),eM(this,w,r),eM(this,S,null)}catch(e){eM(this,S,e)}eC(this,S)&&(f=eC(this,S),r=eC(this,w),h=Date.now(),m="error");let g="fetching"===c.fetchStatus,B="pending"===m,C="error"===m,I=B&&g,D=void 0!==r,G={status:m,fetchStatus:c.fetchStatus,isPending:B,isSuccess:"success"===m,isError:C,isInitialLoading:I,isLoading:I,data:r,dataUpdatedAt:c.dataUpdatedAt,error:f,errorUpdatedAt:h,failureCount:c.fetchFailureCount,failureReason:c.fetchFailureReason,errorUpdateCount:c.errorUpdateCount,isFetched:c.dataUpdateCount>0||c.errorUpdateCount>0,isFetchedAfterMount:c.dataUpdateCount>l.dataUpdateCount||c.errorUpdateCount>l.errorUpdateCount,isFetching:g,isRefetching:g&&!B,isLoadingError:C&&!D,isPaused:"paused"===c.fetchStatus,isPlaceholderData:d,isRefetchError:C&&D,isStale:ta(e,t),refetch:this.refetch,promise:eC(this,F),isEnabled:!1!==eL(t.enabled,e)};if(this.options.experimental_prefetchInRender){let t=e=>{"error"===G.status?e.reject(G.error):void 0!==G.data&&e.resolve(G.data)},r=()=>{t(eM(this,F,G.promise=e0()))},i=eC(this,F);switch(i.status){case"pending":e.queryHash===n.queryHash&&t(i);break;case"fulfilled":("error"===G.status||G.data!==i.value)&&r();break;case"rejected":("error"!==G.status||G.error!==i.reason)&&r()}}return G}updateResult(){let e=eC(this,M),t=this.createResult(eC(this,y),this.options);if(eM(this,E,eC(this,y).state),eM(this,x,this.options),void 0!==eC(this,E).data&&eM(this,R,eC(this,y)),ej(t,e))return;eM(this,M,t);let r=()=>{if(!e)return!0;let{notifyOnChangeProps:t}=this.options,r="function"==typeof t?t():t;if("all"===r||!r&&!eC(this,L).size)return!0;let n=new Set(null!=r?r:eC(this,L));return this.options.throwOnError&&n.add("error"),Object.keys(eC(this,M)).some(t=>eC(this,M)[t]!==e[t]&&n.has(t))};eE(this,N,tm).call(this,{listeners:r()})}onQueryUpdate(){this.updateResult(),this.hasListeners()&&eE(this,_,tc).call(this)}constructor(e,t){super(),ex(this,P),ex(this,H),ex(this,O),ex(this,k),ex(this,_),ex(this,U),ex(this,j),ex(this,J),ex(this,N),eb(this,C,{writable:!0,value:void 0}),eb(this,y,{writable:!0,value:void 0}),eb(this,b,{writable:!0,value:void 0}),eb(this,M,{writable:!0,value:void 0}),eb(this,E,{writable:!0,value:void 0}),eb(this,x,{writable:!0,value:void 0}),eb(this,F,{writable:!0,value:void 0}),eb(this,S,{writable:!0,value:void 0}),eb(this,T,{writable:!0,value:void 0}),eb(this,w,{writable:!0,value:void 0}),eb(this,R,{writable:!0,value:void 0}),eb(this,I,{writable:!0,value:void 0}),eb(this,D,{writable:!0,value:void 0}),eb(this,G,{writable:!0,value:void 0}),eb(this,L,{writable:!0,value:new Set}),this.options=t,eM(this,C,e),eM(this,S,null),eM(this,F,e0()),this.bindMethods(),this.setOptions(t)}});function tr(e,t){return!1!==eL(t.enabled,e)&&void 0===e.state.data&&("error"!==e.state.status||!1!==t.retryOnMount)||void 0!==e.state.data&&tn(e,t,t.refetchOnMount)}function tn(e,t,r){if(!1!==eL(t.enabled,e)&&"static"!==eG(t.staleTime,e)){let n="function"==typeof r?r(e):r;return"always"===n||!1!==n&&ta(e,t)}return!1}function ti(e,t,r,n){return(e!==t||!1===eL(n.enabled,e))&&(!r.suspense||"error"!==e.state.status)&&ta(e,r)}function ta(e,t){return!1!==eL(t.enabled,e)&&e.isStaleByTime(eG(t.staleTime,e))}function to(e){eE(this,J,th).call(this);let t=eC(this,y).fetch(this.options,e);return(null==e?void 0:e.throwOnError)||(t=t.catch(eR)),t}function ts(){eE(this,U,td).call(this);let e=eG(this.options.staleTime,eC(this,y));if(ew||eC(this,M).isStale||!eI(e))return;let t=eD(eC(this,M).dataUpdatedAt,e);eM(this,I,eT.setTimeout(()=>{eC(this,M).isStale||this.updateResult()},t+1))}function tl(){var e;return null!=(e="function"==typeof this.options.refetchInterval?this.options.refetchInterval(eC(this,y)):this.options.refetchInterval)&&e}function tu(e){eE(this,j,tf).call(this),eM(this,G,e),!ew&&!1!==eL(this.options.enabled,eC(this,y))&&eI(eC(this,G))&&0!==eC(this,G)&&eM(this,D,eT.setInterval(()=>{(this.options.refetchIntervalInBackground||eY.isFocused())&&eE(this,P,to).call(this)},eC(this,G)))}function tc(){eE(this,H,ts).call(this),eE(this,k,tu).call(this,eE(this,O,tl).call(this))}function td(){eC(this,I)&&(eT.clearTimeout(eC(this,I)),eM(this,I,void 0))}function tf(){eC(this,D)&&(eT.clearInterval(eC(this,D)),eM(this,D,void 0))}function th(){let e=eC(this,C).getQueryCache().build(eC(this,C),this.options);if(e===eC(this,y))return;let t=eC(this,y);eM(this,y,e),eM(this,b,e.state),this.hasListeners()&&(null==t||t.removeObserver(this),e.addObserver(this))}function tm(e){ez.batch(()=>{e.listeners&&this.listeners.forEach(e=>{e(eC(this,M))}),eC(this,C).getQueryCache().notify({query:eC(this,y),type:"observerResultsUpdated"})})}var tp=el.createContext(void 0),tA=e=>{let{client:t,children:r}=e;return el.useEffect(()=>(t.mount(),()=>{t.unmount()}),[t]),(0,es.jsx)(tp.Provider,{value:t,children:r})},tg=el.createContext(function(){let e=!1;return{clearReset:()=>{e=!1},reset:()=>{e=!0},isReset:()=>e}}()),tv=el.createContext(!1);tv.Provider;var tB=(e,t)=>void 0===t.state.data,tC=(e,t,r)=>t.fetchOptimistic(e).catch(()=>{r.clearReset()});function ty(e,t,r){var n,i,a,o,s;let l=el.useContext(tv),u=el.useContext(tg),c=(e=>{let t=el.useContext(tp);if(e)return e;if(!t)throw Error("No QueryClient set, use QueryClientProvider to set one");return t})(r),d=c.defaultQueryOptions(e);if(null==(i=c.getDefaultOptions().queries)||null==(n=i._experimental_beforeQuery)||n.call(i,d),d._optimisticResults=l?"isRestoring":"optimistic",d.suspense){let e=e=>"static"===e?e:Math.max(null!=e?e:1e3,1e3),t=d.staleTime;d.staleTime="function"==typeof t?function(){for(var r=arguments.length,n=Array(r),i=0;i{u.clearReset()},[u]);let f=!c.getQueryCache().get(d.queryHash),[h]=el.useState(()=>new t(c,d)),m=h.getOptimisticResult(d),p=!l&&!1!==e.subscribed;if(el.useSyncExternalStore(el.useCallback(e=>{let t=p?h.subscribe(ez.batchCalls(e)):eR;return h.updateResult(),t},[h,p]),()=>h.getCurrentResult(),()=>h.getCurrentResult()),el.useEffect(()=>{h.setOptions(d)},[d,h]),(null==d?void 0:d.suspense)&&m.isPending)throw tC(d,h,u);if((e=>{var t,r;let{result:n,errorResetBoundary:i,throwOnError:a,query:o,suspense:s}=e;return n.isError&&!i.isReset()&&!n.isFetching&&o&&(s&&void 0===n.data||(t=a,r=[n.error,o],"function"==typeof t?t(...r):!!t))})({result:m,errorResetBoundary:u,throwOnError:d.throwOnError,query:c.getQueryCache().get(d.queryHash),suspense:d.suspense}))throw m.error;if(null==(o=c.getDefaultOptions().queries)||null==(a=o._experimental_afterQuery)||a.call(o,d,m),d.experimental_prefetchInRender&&!ew&&m.isLoading&&m.isFetching&&!l){let e=f?tC(d,h,u):null==(s=c.getQueryCache().get(d.queryHash))?void 0:s.promise;null==e||e.catch(eR).finally(()=>{h.updateResult()})}return d.notifyOnChangeProps?m:h.trackResult(m)}var tb=e.i(54970),tM=e.i(12979),tE=e.i(5230),tx=e.i(16096),tF=e.i(62395),tS=e.i(75567),tT=e.i(47071);let tw={directional:4,ambient:1.5},tR={directional:3,ambient:1},tI={directional:1,ambient:1.5};var tD=e.i(79123),tG=e.i(47021),tL=e.i(48066);let tP={0:32,1:32,2:32,3:32,4:32,5:32};function tH(e){let{displacementMap:t,visibilityMask:r,textureNames:n,alphaTextures:i,detailTextureName:a,lightmap:o}=e,{debugMode:s}=(0,tD.useDebug)(),l=(0,tT.useTexture)(n.map(e=>(0,tM.terrainTextureToUrl)(e)),e=>{e.forEach(e=>(0,tS.setupColor)(e))}),u=a?(0,tM.textureToUrl)(a):null,c=(0,tT.useTexture)(null!=u?u:tM.FALLBACK_TEXTURE_URL,e=>{(0,tS.setupColor)(e)}),d=(0,el.useCallback)(e=>{!function(e){let{shader:t,baseTextures:r,alphaTextures:n,visibilityMask:i,tiling:a,debugMode:o=!1,detailTexture:s=null,lightmap:l=null}=e,u=r.length;if(t.uniforms.terrainDirectionalFactor={value:tw.directional},t.uniforms.terrainAmbientFactor={value:tw.ambient},r.forEach((e,r)=>{t.uniforms["albedo".concat(r)]={value:e}}),n.forEach((e,r)=>{r>0&&(t.uniforms["mask".concat(r)]={value:e})}),i&&(t.uniforms.visibilityMask={value:i}),r.forEach((e,r)=>{var n;t.uniforms["tiling".concat(r)]={value:null!=(n=a[r])?n:32}}),t.uniforms.debugMode={value:+!!o},l&&(t.uniforms.terrainLightmap={value:l}),s&&(t.uniforms.detailTexture={value:s},t.uniforms.detailTiling={value:64},t.uniforms.detailFadeDistance={value:150},t.vertexShader=t.vertexShader.replace("#include ","#include \nvarying vec3 vTerrainWorldPos;"),t.vertexShader=t.vertexShader.replace("#include ","#include \nvTerrainWorldPos = (modelMatrix * vec4(transformed, 1.0)).xyz;")),t.fragmentShader="\nuniform float terrainDirectionalFactor;\nuniform float terrainAmbientFactor;\nuniform sampler2D albedo0;\nuniform sampler2D albedo1;\nuniform sampler2D albedo2;\nuniform sampler2D albedo3;\nuniform sampler2D albedo4;\nuniform sampler2D albedo5;\nuniform sampler2D mask1;\nuniform sampler2D mask2;\nuniform sampler2D mask3;\nuniform sampler2D mask4;\nuniform sampler2D mask5;\nuniform float tiling0;\nuniform float tiling1;\nuniform float tiling2;\nuniform float tiling3;\nuniform float tiling4;\nuniform float tiling5;\nuniform float debugMode;\n".concat(i?"uniform sampler2D visibilityMask;":"","\n").concat(l?"uniform sampler2D terrainLightmap;":"","\n").concat(s?"uniform sampler2D detailTexture;\nuniform float detailTiling;\nuniform float detailFadeDistance;\nvarying vec3 vTerrainWorldPos;":"","\n\n// Wireframe edge detection for debug mode\nfloat getWireframe(vec2 uv, float gridSize, float lineWidth) {\n vec2 gridUv = uv * gridSize;\n vec2 grid = abs(fract(gridUv - 0.5) - 0.5);\n vec2 deriv = fwidth(gridUv);\n vec2 edge = smoothstep(vec2(0.0), deriv * lineWidth, grid);\n return 1.0 - min(edge.x, edge.y);\n}\n")+t.fragmentShader,i){let e="#include ";t.fragmentShader=t.fragmentShader.replace(e,"".concat(e,"\n // Early discard for invisible areas (before fog/lighting)\n float visibility = texture2D(visibilityMask, vMapUv).r;\n if (visibility < 0.5) {\n discard;\n }\n "))}t.fragmentShader=t.fragmentShader.replace("#include ","\n // Sample base albedo layers (sRGB textures auto-decoded to linear)\n vec2 baseUv = vMapUv;\n vec3 c0 = texture2D(albedo0, baseUv * vec2(tiling0)).rgb;\n ".concat(u>1?"vec3 c1 = texture2D(albedo1, baseUv * vec2(tiling1)).rgb;":"","\n ").concat(u>2?"vec3 c2 = texture2D(albedo2, baseUv * vec2(tiling2)).rgb;":"","\n ").concat(u>3?"vec3 c3 = texture2D(albedo3, baseUv * vec2(tiling3)).rgb;":"","\n ").concat(u>4?"vec3 c4 = texture2D(albedo4, baseUv * vec2(tiling4)).rgb;":"","\n ").concat(u>5?"vec3 c5 = texture2D(albedo5, baseUv * vec2(tiling5)).rgb;":"","\n\n // Sample linear masks (use R channel)\n // Add +0.5 texel offset: Torque samples alpha at grid corners (integer indices),\n // but GPU linear filtering samples at texel centers. This offset aligns them.\n vec2 alphaUv = baseUv + vec2(0.5 / ").concat(256,".0);\n float a1 = texture2D(mask1, alphaUv).r;\n ").concat(u>1?"float a2 = texture2D(mask2, alphaUv).r;":"","\n ").concat(u>2?"float a3 = texture2D(mask3, alphaUv).r;":"","\n ").concat(u>3?"float a4 = texture2D(mask4, alphaUv).r;":"","\n ").concat(u>4?"float a5 = texture2D(mask5, alphaUv).r;":"","\n\n // Bottom-up compositing: each mask tells how much the higher layer replaces lower\n ").concat(u>1?"vec3 blended = mix(c0, c1, clamp(a1, 0.0, 1.0));":"","\n ").concat(u>2?"blended = mix(blended, c2, clamp(a2, 0.0, 1.0));":"","\n ").concat(u>3?"blended = mix(blended, c3, clamp(a3, 0.0, 1.0));":"","\n ").concat(u>4?"blended = mix(blended, c4, clamp(a4, 0.0, 1.0));":"","\n ").concat(u>5?"blended = mix(blended, c5, clamp(a5, 0.0, 1.0));":"","\n\n // Assign to diffuseColor before lighting\n vec3 textureColor = ").concat(u>1?"blended":"c0",";\n\n ").concat(s?"// Detail texture blending (Torque-style multiplicative blend)\n // Sample detail texture at high frequency tiling\n vec3 detailColor = texture2D(detailTexture, baseUv * detailTiling).rgb;\n\n // Calculate distance-based fade factor using world positions\n // Torque: distFactor = (zeroDetailDistance - distance) / zeroDetailDistance\n float distToCamera = distance(vTerrainWorldPos, cameraPosition);\n float detailFade = clamp(1.0 - distToCamera / detailFadeDistance, 0.0, 1.0);\n\n // Torque blending: dst * lerp(1.0, detailTexel, fadeFactor)\n // Detail textures are authored with bright values (~0.8 mean), not 0.5 gray\n // Direct multiplication adds subtle darkening for surface detail\n textureColor *= mix(vec3(1.0), detailColor, detailFade);":"","\n\n // Apply texture color or debug mode solid gray\n if (debugMode > 0.5) {\n // Solid gray to visualize lighting only (without texture influence)\n diffuseColor.rgb = vec3(0.5);\n } else {\n // Scale texture to prevent clipping, preserving shadow visibility\n diffuseColor.rgb = textureColor * ").concat(.7,";\n }\n")),l&&(t.fragmentShader=t.fragmentShader.replace("#include ","#include \n\n// Override RE_Direct to use terrain lightmap for smooth NdotL\n#undef RE_Direct\nvoid RE_Direct_TerrainLightmap( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\n // Sample pre-computed terrain lightmap (smooth NdotL values)\n // Add +0.5 texel offset to align GPU texel-center sampling with Torque's corner sampling\n vec2 lightmapUv = vMapUv + vec2(0.5 / ".concat(512,".0);\n float lightmapNdotL = texture2D(terrainLightmap, lightmapUv).r;\n\n // Use lightmap NdotL instead of dot(geometryNormal, directLight.direction)\n // directLight.color already has shadow factor applied from getShadow()\n // Apply terrain-specific directional intensity multiplier\n vec3 directIrradiance = lightmapNdotL * directLight.color * terrainDirectionalFactor;\n\n // Debug mode: visualize raw lightmap values (no textures)\n if (debugMode > 0.5) {\n reflectedLight.directDiffuse = directIrradiance;\n } else {\n reflectedLight.directDiffuse += directIrradiance * BRDF_Lambert( material.diffuseColor );\n }\n}\n#define RE_Direct RE_Direct_TerrainLightmap\n\n")),t.fragmentShader=t.fragmentShader.replace("#include ","#include \n// Fix: Recalculate irradiance without using vertex normals (causes banding)\n// Use flat upward normal for hemisphere/light probe calculations\n#if defined( RE_IndirectDiffuse )\n{\n vec3 flatNormal = vec3(0.0, 1.0, 0.0);\n irradiance = getAmbientLightIrradiance( ambientLightColor );\n #if defined( USE_LIGHT_PROBES )\n irradiance += getLightProbeIrradiance( lightProbe, flatNormal );\n #endif\n #if ( NUM_HEMI_LIGHTS > 0 )\n for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n irradiance += getHemisphereLightIrradiance( hemisphereLights[i], flatNormal );\n }\n #endif\n}\n#endif\n")),t.fragmentShader=t.fragmentShader.replace("#include ","#include \n // Scale indirect (ambient) light to increase shadow contrast on terrain\n reflectedLight.indirectDiffuse *= terrainAmbientFactor;\n")}({shader:e,baseTextures:l,alphaTextures:i,visibilityMask:r,tiling:tP,debugMode:s,detailTexture:u?c:null,lightmap:o}),(0,tG.injectCustomFog)(e,tL.globalFogUniforms)},[l,i,r,s,c,u,o]),f="".concat(s?"debug":"normal","-").concat(u?"detail":"nodetail","-").concat(o?"lightmap":"nolightmap");return(0,es.jsx)("meshLambertMaterial",{map:t,depthWrite:!0,side:ef.DoubleSide,onBeforeCompile:d},f)}function tO(e){let{displacementMap:t,visibilityMask:r,textureNames:n,alphaTextures:i,detailTextureName:a,lightmap:o}=e;return(0,es.jsx)(el.Suspense,{fallback:(0,es.jsx)("meshLambertMaterial",{color:"rgb(0, 109, 56)",displacementMap:t,displacementScale:2048,wireframe:!0}),children:(0,es.jsx)(tH,{displacementMap:t,visibilityMask:r,textureNames:n,alphaTextures:i,detailTextureName:a,lightmap:o})})}let tk=(0,el.memo)(function(e){let{tileX:t,tileZ:r,blockSize:n,basePosition:i,textureNames:a,geometry:o,displacementMap:s,visibilityMask:l,alphaTextures:u,detailTextureName:c,lightmap:d,visible:f=!0}=e,h=(0,el.useMemo)(()=>[i.x+t*n+1024,0,i.z+r*n+1024],[t,r,n,i]);return(0,es.jsx)("mesh",{position:h,geometry:o,receiveShadow:!0,castShadow:!0,visible:f,children:(0,es.jsx)(tO,{displacementMap:s,visibilityMask:l,textureNames:a,alphaTextures:u,detailTextureName:c,lightmap:d})})});var t_=e.i(77482);function tU(e){return(0,t_.useRuntime)().getObjectByName(e)}function tj(e){let t=new Uint8Array(65536);for(let r of(t.fill(255),e)){let e=255&r,n=r>>8&255,i=r>>16,a=256*n;for(let r=0;r0?r:null!=(e=(0,tF.getFloat)(t,"visibleDistance"))?e:600}(),l=(0,tx.useThree)(e=>e.camera),u=(0,el.useMemo)(()=>{let[e,,t]=(0,tF.getPosition)(r);return{x:e,z:t}},[r]),c=(0,el.useMemo)(()=>{let e=(0,tF.getProperty)(r,"emptySquares");return e?e.split(" ").map(e=>parseInt(e,10)):[]},[r]),{data:d}=ty({queryKey:["terrain",n],queryFn:()=>(0,tM.loadTerrain)(n)},tt,void 0),f=(0,el.useMemo)(()=>{if(!d)return null;let e=256*i,t=new ef.PlaneGeometry(e,e,256,256);return t.rotateX(-Math.PI/2),t.rotateY(-Math.PI/2),!function(e,t,r){let n=e.attributes.position,i=e.attributes.uv,a=e.attributes.normal,o=n.array,s=i.array,l=a.array,u=n.count,c=(e,r)=>(e=Math.max(0,Math.min(255,e)),t[256*(r=Math.max(0,Math.min(255,r)))+e]/65535*2048),d=(e,r)=>{let n=Math.floor(e=Math.max(0,Math.min(255,e))),i=Math.floor(r=Math.max(0,Math.min(255,r))),a=Math.min(n+1,255),o=Math.min(i+1,255),s=e-n,l=r-i,u=t[256*i+n]/65535*2048,c=t[256*i+a]/65535*2048,d=t[256*o+n]/65535*2048;return(u*(1-s)+c*s)*(1-l)+(d*(1-s)+t[256*o+a]/65535*2048*s)*l};for(let e=0;e0?(p/=B,A/=B,g/=B):(p=0,A=1,g=0),l[3*e]=p,l[3*e+1]=A,l[3*e+2]=g}n.needsUpdate=!0,a.needsUpdate=!0}(t,d.heightMap,i),t},[i,d]),h=tU("Sun"),m=(0,el.useMemo)(()=>{var e;if(!h)return new ef.Vector3(.57735,-.57735,.57735);let[t,r,n]=(null!=(e=(0,tF.getProperty)(h,"direction"))?e:"0.57735 0.57735 -0.57735").split(" ").map(e=>parseFloat(e)),i=Math.sqrt(t*t+n*n+r*r);return new ef.Vector3(t/i,n/i,r/i)},[h]),p=(0,el.useMemo)(()=>d?function(e,t,r){let n=(t,r)=>{let n=(t%256+256)%256,i=(r%256+256)%256,a=Math.floor(n),o=Math.floor(i),s=a+1&255,l=o+1&255,u=n-a,c=i-o,d=e[256*o+a]/65535,f=e[256*o+s]/65535,h=e[256*l+a]/65535;return((d*(1-u)+f*u)*(1-c)+(h*(1-u)+e[256*l+s]/65535*u)*c)*2048},i=new ef.Vector3(-t.x,-t.y,-t.z).normalize(),a=new Uint8Array(262144);for(let e=0;e<512;e++)for(let t=0;t<512;t++){let o=t/2+.25,s=e/2+.25,l=n(o-.5,s),u=n(o+.5,s),c=n(o,s-.5),d=n(o,s+.5),f=-((d-c)/1),h=-((u-l)/1),m=Math.sqrt(f*f+r*r+h*h),p=Math.max(0,f/m*i.x+r/m*i.y+h/m*i.z);a[512*e+t]=Math.floor(255*p)}let o=new ef.DataTexture(a,512,512,ef.RedFormat,ef.UnsignedByteType);return o.colorSpace=ef.NoColorSpace,o.generateMipmaps=!0,o.wrapS=ef.ClampToEdgeWrapping,o.wrapT=ef.ClampToEdgeWrapping,o.magFilter=ef.LinearFilter,o.minFilter=ef.LinearFilter,o.needsUpdate=!0,o}(d.heightMap,m,i):null,[d,m,i]),A=(0,el.useMemo)(()=>{if(!d)return null;let e=function(e){let t=new Float32Array(e.length);for(let r=0;rtj(c),[c]),B=(0,el.useMemo)(()=>tj([]),[]),C=(0,el.useMemo)(()=>d?d.alphaMaps.map(e=>(0,tS.setupMask)(e)):null,[d]),y=(0,el.useMemo)(()=>{let e=2*Math.ceil(s/o)+1;return e*e-1},[s,o]),b=(0,el.useMemo)(()=>Array.from({length:y},(e,t)=>t),[y]),[M,E]=(0,el.useState)(()=>Array(y).fill(null)),x=(0,el.useRef)({xStart:0,xEnd:0,zStart:0,zEnd:0});return((0,tE.useFrame)(()=>{let e=l.position.x-u.x,t=l.position.z-u.z,r=Math.floor((e-s)/o),n=Math.ceil((e+s)/o),i=Math.floor((t-s)/o),a=Math.ceil((t+s)/o),c=x.current;if(r===c.xStart&&n===c.xEnd&&i===c.zStart&&a===c.zEnd)return;c.xStart=r,c.xEnd=n,c.zStart=i,c.zEnd=a;let d=[];for(let e=r;e{var t,r;let n=M[e];return(0,es.jsx)(tk,{tileX:null!=(t=null==n?void 0:n.tileX)?t:0,tileZ:null!=(r=null==n?void 0:n.tileZ)?r:0,blockSize:o,basePosition:u,textureNames:d.textureNames,geometry:f,displacementMap:A,visibilityMask:B,alphaTextures:C,detailTextureName:a,lightmap:p,visible:null!==n},e)})]}):null}),tN=(0,el.createContext)(null);function tK(){return(0,el.useContext)(tN)}var tQ=el;let tW=(0,tQ.createContext)(null),tV={didCatch:!1,error:null};class tX extends tQ.Component{static getDerivedStateFromError(e){return{didCatch:!0,error:e}}resetErrorBoundary(){let{error:e}=this.state;if(null!==e){for(var t,r,n=arguments.length,i=Array(n),a=0;a0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return e.length!==t.length||e.some((e,r)=>!Object.is(e,t[r]))}(e.resetKeys,n)){var i,a;null==(i=(a=this.props).onReset)||i.call(a,{next:n,prev:e.resetKeys,reason:"keys"}),this.setState(tV)}}render(){let{children:e,fallbackRender:t,FallbackComponent:r,fallback:n}=this.props,{didCatch:i,error:a}=this.state,o=e;if(i){let e={error:a,resetErrorBoundary:this.resetErrorBoundary};if("function"==typeof t)o=t(e);else if(r)o=(0,tQ.createElement)(r,e);else if(void 0!==n)o=n;else throw a}return(0,tQ.createElement)(tW.Provider,{value:{didCatch:i,error:a,resetErrorBoundary:this.resetErrorBoundary}},o)}constructor(e){super(e),this.resetErrorBoundary=this.resetErrorBoundary.bind(this),this.state=tV}}var tq=e.i(31067),tY=ef;function tZ(e,t){if(t===ef.TrianglesDrawMode)return console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."),e;if(t!==ef.TriangleFanDrawMode&&t!==ef.TriangleStripDrawMode)return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:",t),e;{let r=e.getIndex();if(null===r){let t=[],n=e.getAttribute("position");if(void 0===n)return console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."),e;for(let e=0;e=2.0 are supported."));return}let s=new rH(i,{path:t||this.resourcePath||"",crossOrigin:this.crossOrigin,requestHeader:this.requestHeader,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});s.fileLoader.setRequestHeader(this.requestHeader);for(let e=0;e=0&&void 0===o[t]&&console.warn('THREE.GLTFLoader: Unknown extension "'+t+'".')}}s.setExtensions(a),s.setPlugins(o),s.parse(r,n)}parseAsync(e,t){let r=this;return new Promise(function(n,i){r.parse(e,t,n,i)})}constructor(e){super(e),this.dracoLoader=null,this.ktx2Loader=null,this.meshoptDecoder=null,this.pluginCallbacks=[],this.register(function(e){return new t4(e)}),this.register(function(e){return new t7(e)}),this.register(function(e){return new rl(e)}),this.register(function(e){return new ru(e)}),this.register(function(e){return new rc(e)}),this.register(function(e){return new rt(e)}),this.register(function(e){return new rr(e)}),this.register(function(e){return new rn(e)}),this.register(function(e){return new ri(e)}),this.register(function(e){return new t6(e)}),this.register(function(e){return new ra(e)}),this.register(function(e){return new re(e)}),this.register(function(e){return new rs(e)}),this.register(function(e){return new ro(e)}),this.register(function(e){return new t3(e)}),this.register(function(e){return new rd(e)}),this.register(function(e){return new rf(e)})}}function t2(){let e={};return{get:function(t){return e[t]},add:function(t,r){e[t]=r},remove:function(t){delete e[t]},removeAll:function(){e={}}}}let t8={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_DISPERSION:"KHR_materials_dispersion",KHR_MATERIALS_IOR:"KHR_materials_ior",KHR_MATERIALS_SHEEN:"KHR_materials_sheen",KHR_MATERIALS_SPECULAR:"KHR_materials_specular",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_IRIDESCENCE:"KHR_materials_iridescence",KHR_MATERIALS_ANISOTROPY:"KHR_materials_anisotropy",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_MATERIALS_VOLUME:"KHR_materials_volume",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",KHR_MATERIALS_EMISSIVE_STRENGTH:"KHR_materials_emissive_strength",EXT_MATERIALS_BUMP:"EXT_materials_bump",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_TEXTURE_AVIF:"EXT_texture_avif",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",EXT_MESH_GPU_INSTANCING:"EXT_mesh_gpu_instancing"};class t3{_markDefs(){let e=this.parser,t=this.parser.json.nodes||[];for(let r=0,n=t.length;r=0))return null;else throw Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return t.loadTextureImage(e,i.source,a)}constructor(e){this.parser=e,this.name=t8.KHR_TEXTURE_BASISU}}class ru{loadTexture(e){let t=this.name,r=this.parser,n=r.json,i=n.textures[e];if(!i.extensions||!i.extensions[t])return null;let a=i.extensions[t],o=n.images[a.source],s=r.textureLoader;if(o.uri){let e=r.options.manager.getHandler(o.uri);null!==e&&(s=e)}return this.detectSupport().then(function(i){if(i)return r.loadTextureImage(e,a.source,s);if(n.extensionsRequired&&n.extensionsRequired.indexOf(t)>=0)throw Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return r.loadTexture(e)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(e){let t=new Image;t.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",t.onload=t.onerror=function(){e(1===t.height)}})),this.isSupported}constructor(e){this.parser=e,this.name=t8.EXT_TEXTURE_WEBP,this.isSupported=null}}class rc{loadTexture(e){let t=this.name,r=this.parser,n=r.json,i=n.textures[e];if(!i.extensions||!i.extensions[t])return null;let a=i.extensions[t],o=n.images[a.source],s=r.textureLoader;if(o.uri){let e=r.options.manager.getHandler(o.uri);null!==e&&(s=e)}return this.detectSupport().then(function(i){if(i)return r.loadTextureImage(e,a.source,s);if(n.extensionsRequired&&n.extensionsRequired.indexOf(t)>=0)throw Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");return r.loadTexture(e)})}detectSupport(){return this.isSupported||(this.isSupported=new Promise(function(e){let t=new Image;t.src="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=",t.onload=t.onerror=function(){e(1===t.height)}})),this.isSupported}constructor(e){this.parser=e,this.name=t8.EXT_TEXTURE_AVIF,this.isSupported=null}}class rd{loadBufferView(e){let t=this.parser.json,r=t.bufferViews[e];if(!r.extensions||!r.extensions[this.name])return null;{let e=r.extensions[this.name],n=this.parser.getDependency("buffer",e.buffer),i=this.parser.options.meshoptDecoder;if(!i||!i.supported)if(!(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0))return null;else throw Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return n.then(function(t){let r=e.byteOffset||0,n=e.byteLength||0,a=e.count,o=e.byteStride,s=new Uint8Array(t,r,n);return i.decodeGltfBufferAsync?i.decodeGltfBufferAsync(a,o,s,e.mode,e.filter).then(function(e){return e.buffer}):i.ready.then(function(){let t=new ArrayBuffer(a*o);return i.decodeGltfBuffer(new Uint8Array(t),a,o,s,e.mode,e.filter),t})})}}constructor(e){this.name=t8.EXT_MESHOPT_COMPRESSION,this.parser=e}}class rf{createNodeMesh(e){let t=this.parser.json,r=t.nodes[e];if(!r.extensions||!r.extensions[this.name]||void 0===r.mesh)return null;for(let e of t.meshes[r.mesh].primitives)if(e.mode!==rb.TRIANGLES&&e.mode!==rb.TRIANGLE_STRIP&&e.mode!==rb.TRIANGLE_FAN&&void 0!==e.mode)return null;let n=r.extensions[this.name].attributes,i=[],a={};for(let e in n)i.push(this.parser.getDependency("accessor",n[e]).then(t=>(a[e]=t,a[e])));return i.length<1?null:(i.push(this.parser.createNodeMesh(e)),Promise.all(i).then(e=>{let t=e.pop(),r=t.isGroup?t.children:[t],n=e[0].count,i=[];for(let e of r){let t=new tY.Matrix4,r=new tY.Vector3,o=new tY.Quaternion,s=new tY.Vector3(1,1,1),l=new tY.InstancedMesh(e.geometry,e.material,n);for(let e=0;e=152?{TEXCOORD_0:"uv",TEXCOORD_1:"uv1",TEXCOORD_2:"uv2",TEXCOORD_3:"uv3"}:{TEXCOORD_0:"uv",TEXCOORD_1:"uv2"},COLOR_0:"color",WEIGHTS_0:"skinWeight",JOINTS_0:"skinIndex"},rT={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},rw={CUBICSPLINE:void 0,LINEAR:tY.InterpolateLinear,STEP:tY.InterpolateDiscrete},rR={OPAQUE:"OPAQUE",MASK:"MASK",BLEND:"BLEND"};function rI(e,t,r){for(let n in r.extensions)void 0===e[n]&&(t.userData.gltfExtensions=t.userData.gltfExtensions||{},t.userData.gltfExtensions[n]=r.extensions[n])}function rD(e,t){void 0!==t.extras&&("object"==typeof t.extras?Object.assign(e.userData,t.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+t.extras))}function rG(e){let t="",r=Object.keys(e).sort();for(let n=0,i=r.length;n{let r=this.associations.get(e);for(let[n,a]of(null!=r&&this.associations.set(t,r),e.children.entries()))i(a,t.children[n])};return i(r,n),n.name+="_instance_"+e.uses[t]++,n}_invokeOne(e){let t=Object.values(this.plugins);t.push(this);for(let r=0;r=2&&a.setY(t,d[e*s+1]),s>=3&&a.setZ(t,d[e*s+2]),s>=4&&a.setW(t,d[e*s+3]),s>=5)throw Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}}return a})}loadTexture(e){let t=this.json,r=this.options,n=t.textures[e].source,i=t.images[n],a=this.textureLoader;if(i.uri){let e=r.manager.getHandler(i.uri);null!==e&&(a=e)}return this.loadTextureImage(e,n,a)}loadTextureImage(e,t,r){let n=this,i=this.json,a=i.textures[e],o=i.images[t],s=(o.uri||o.bufferView)+":"+a.sampler;if(this.textureCache[s])return this.textureCache[s];let l=this.loadImageSource(t,r).then(function(t){t.flipY=!1,t.name=a.name||o.name||"",""===t.name&&"string"==typeof o.uri&&!1===o.uri.startsWith("data:image/")&&(t.name=o.uri);let r=(i.samplers||{})[a.sampler]||{};return t.magFilter=rE[r.magFilter]||tY.LinearFilter,t.minFilter=rE[r.minFilter]||tY.LinearMipmapLinearFilter,t.wrapS=rx[r.wrapS]||tY.RepeatWrapping,t.wrapT=rx[r.wrapT]||tY.RepeatWrapping,n.associations.set(t,{textures:e}),t}).catch(function(){return null});return this.textureCache[s]=l,l}loadImageSource(e,t){let r=this.json,n=this.options;if(void 0!==this.sourceCache[e])return this.sourceCache[e].then(e=>e.clone());let i=r.images[e],a=self.URL||self.webkitURL,o=i.uri||"",s=!1;if(void 0!==i.bufferView)o=this.getDependency("bufferView",i.bufferView).then(function(e){s=!0;let t=new Blob([e],{type:i.mimeType});return o=a.createObjectURL(t)});else if(void 0===i.uri)throw Error("THREE.GLTFLoader: Image "+e+" is missing URI and bufferView");let l=Promise.resolve(o).then(function(e){return new Promise(function(r,i){let a=r;!0===t.isImageBitmapLoader&&(a=function(e){let t=new tY.Texture(e);t.needsUpdate=!0,r(t)}),t.load(tY.LoaderUtils.resolveURL(e,n.path),a,void 0,i)})}).then(function(e){var t;return!0===s&&a.revokeObjectURL(o),rD(e,i),e.userData.mimeType=i.mimeType||((t=i.uri).search(/\.jpe?g($|\?)/i)>0||0===t.search(/^data\:image\/jpeg/)?"image/jpeg":t.search(/\.webp($|\?)/i)>0||0===t.search(/^data\:image\/webp/)?"image/webp":"image/png"),e}).catch(function(e){throw console.error("THREE.GLTFLoader: Couldn't load texture",o),e});return this.sourceCache[e]=l,l}assignTexture(e,t,r,n){let i=this;return this.getDependency("texture",r.index).then(function(a){if(!a)return null;if(void 0!==r.texCoord&&r.texCoord>0&&((a=a.clone()).channel=r.texCoord),i.extensions[t8.KHR_TEXTURE_TRANSFORM]){let e=void 0!==r.extensions?r.extensions[t8.KHR_TEXTURE_TRANSFORM]:void 0;if(e){let t=i.associations.get(a);a=i.extensions[t8.KHR_TEXTURE_TRANSFORM].extendTexture(a,e),i.associations.set(a,t)}}return void 0!==n&&("number"==typeof n&&(n=3001===n?t0:t1),"colorSpace"in a?a.colorSpace=n:a.encoding=n===t0?3001:3e3),e[t]=a,a})}assignFinalMaterial(e){let t=e.geometry,r=e.material,n=void 0===t.attributes.tangent,i=void 0!==t.attributes.color,a=void 0===t.attributes.normal;if(e.isPoints){let e="PointsMaterial:"+r.uuid,t=this.cache.get(e);t||(t=new tY.PointsMaterial,tY.Material.prototype.copy.call(t,r),t.color.copy(r.color),t.map=r.map,t.sizeAttenuation=!1,this.cache.add(e,t)),r=t}else if(e.isLine){let e="LineBasicMaterial:"+r.uuid,t=this.cache.get(e);t||(t=new tY.LineBasicMaterial,tY.Material.prototype.copy.call(t,r),t.color.copy(r.color),t.map=r.map,this.cache.add(e,t)),r=t}if(n||i||a){let e="ClonedMaterial:"+r.uuid+":";n&&(e+="derivative-tangents:"),i&&(e+="vertex-colors:"),a&&(e+="flat-shading:");let t=this.cache.get(e);t||(t=r.clone(),i&&(t.vertexColors=!0),a&&(t.flatShading=!0),n&&(t.normalScale&&(t.normalScale.y*=-1),t.clearcoatNormalScale&&(t.clearcoatNormalScale.y*=-1)),this.cache.add(e,t),this.associations.set(t,this.associations.get(r))),r=t}e.material=r}getMaterialType(){return tY.MeshStandardMaterial}loadMaterial(e){let t,r=this,n=this.json,i=this.extensions,a=n.materials[e],o={},s=a.extensions||{},l=[];if(s[t8.KHR_MATERIALS_UNLIT]){let e=i[t8.KHR_MATERIALS_UNLIT];t=e.getMaterialType(),l.push(e.extendParams(o,a,r))}else{let n=a.pbrMetallicRoughness||{};if(o.color=new tY.Color(1,1,1),o.opacity=1,Array.isArray(n.baseColorFactor)){let e=n.baseColorFactor;o.color.setRGB(e[0],e[1],e[2],t1),o.opacity=e[3]}void 0!==n.baseColorTexture&&l.push(r.assignTexture(o,"map",n.baseColorTexture,t0)),o.metalness=void 0!==n.metallicFactor?n.metallicFactor:1,o.roughness=void 0!==n.roughnessFactor?n.roughnessFactor:1,void 0!==n.metallicRoughnessTexture&&(l.push(r.assignTexture(o,"metalnessMap",n.metallicRoughnessTexture)),l.push(r.assignTexture(o,"roughnessMap",n.metallicRoughnessTexture))),t=this._invokeOne(function(t){return t.getMaterialType&&t.getMaterialType(e)}),l.push(Promise.all(this._invokeAll(function(t){return t.extendMaterialParams&&t.extendMaterialParams(e,o)})))}!0===a.doubleSided&&(o.side=tY.DoubleSide);let u=a.alphaMode||rR.OPAQUE;if(u===rR.BLEND?(o.transparent=!0,o.depthWrite=!1):(o.transparent=!1,u===rR.MASK&&(o.alphaTest=void 0!==a.alphaCutoff?a.alphaCutoff:.5)),void 0!==a.normalTexture&&t!==tY.MeshBasicMaterial&&(l.push(r.assignTexture(o,"normalMap",a.normalTexture)),o.normalScale=new tY.Vector2(1,1),void 0!==a.normalTexture.scale)){let e=a.normalTexture.scale;o.normalScale.set(e,e)}if(void 0!==a.occlusionTexture&&t!==tY.MeshBasicMaterial&&(l.push(r.assignTexture(o,"aoMap",a.occlusionTexture)),void 0!==a.occlusionTexture.strength&&(o.aoMapIntensity=a.occlusionTexture.strength)),void 0!==a.emissiveFactor&&t!==tY.MeshBasicMaterial){let e=a.emissiveFactor;o.emissive=new tY.Color().setRGB(e[0],e[1],e[2],t1)}return void 0!==a.emissiveTexture&&t!==tY.MeshBasicMaterial&&l.push(r.assignTexture(o,"emissiveMap",a.emissiveTexture,t0)),Promise.all(l).then(function(){let n=new t(o);return a.name&&(n.name=a.name),rD(n,a),r.associations.set(n,{materials:e}),a.extensions&&rI(i,n,a),n})}createUniqueName(e){let t=tY.PropertyBinding.sanitizeNodeName(e||"");return t in this.nodeNamesUsed?t+"_"+ ++this.nodeNamesUsed[t]:(this.nodeNamesUsed[t]=0,t)}loadGeometries(e){let t=this,r=this.extensions,n=this.primitiveCache,i=[];for(let a=0,o=e.length;a0&&function(e,t){if(e.updateMorphTargets(),void 0!==t.weights)for(let r=0,n=t.weights.length;r1?new tY.Group:1===t.length?t[0]:new tY.Object3D)!==t[0])for(let e=0,r=t.length;e{let t=new Map;for(let[e,r]of n.associations)(e instanceof tY.Material||e instanceof tY.Texture)&&t.set(e,r);return e.traverse(e=>{let r=n.associations.get(e);null!=r&&t.set(e,r)}),t})(i),i})}_createAnimationTracks(e,t,r,n,i){let a,o=[],s=e.name?e.name:e.uuid,l=[];switch(rT[i.path]===rT.weights?e.traverse(function(e){e.morphTargetInfluences&&l.push(e.name?e.name:e.uuid)}):l.push(s),rT[i.path]){case rT.weights:a=tY.NumberKeyframeTrack;break;case rT.rotation:a=tY.QuaternionKeyframeTrack;break;case rT.position:case rT.scale:a=tY.VectorKeyframeTrack;break;default:a=1===r.itemSize?tY.NumberKeyframeTrack:tY.VectorKeyframeTrack}let u=void 0!==n.interpolation?rw[n.interpolation]:tY.InterpolateLinear,c=this._getArrayFromAccessor(r);for(let e=0,r=l.length;e-1)?navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1]:-1),"undefined"==typeof createImageBitmap||r||n&&i<98?this.textureLoader=new tY.TextureLoader(this.options.manager):this.textureLoader=new tY.ImageBitmapLoader(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.textureLoader.setRequestHeader(this.options.requestHeader),this.fileLoader=new tY.FileLoader(this.options.manager),this.fileLoader.setResponseType("arraybuffer"),"use-credentials"===this.options.crossOrigin&&this.fileLoader.setWithCredentials(!0)}}function rO(e,t,r){let n=t.attributes,i=[];for(let t in n){let a=rS[t]||t.toLowerCase();a in e.attributes||i.push(function(t,n){return r.getDependency("accessor",t).then(function(t){e.setAttribute(n,t)})}(n[t],a))}if(void 0!==t.indices&&!e.index){let n=r.getDependency("accessor",t.indices).then(function(t){e.setIndex(t)});i.push(n)}return rD(e,t),!function(e,t,r){let n=t.attributes,i=new tY.Box3;if(void 0===n.POSITION)return;{let e=r.json.accessors[n.POSITION],t=e.min,a=e.max;if(void 0===t||void 0===a)return console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");if(i.set(new tY.Vector3(t[0],t[1],t[2]),new tY.Vector3(a[0],a[1],a[2])),e.normalized){let t=rL(rM[e.componentType]);i.min.multiplyScalar(t),i.max.multiplyScalar(t)}}let a=t.targets;if(void 0!==a){let e=new tY.Vector3,t=new tY.Vector3;for(let n=0,i=a.length;n{let r={attributeIDs:this.defaultAttributeIDs,attributeTypes:this.defaultAttributeTypes,useUniqueIDs:!1};this.decodeGeometry(e,r).then(t).catch(n)},r,n)}decodeDracoFile(e,t,r,n){let i={attributeIDs:r||this.defaultAttributeIDs,attributeTypes:n||this.defaultAttributeTypes,useUniqueIDs:!!r};this.decodeGeometry(e,i).then(t)}decodeGeometry(e,t){let r;for(let e in t.attributeTypes){let r=t.attributeTypes[e];void 0!==r.BYTES_PER_ELEMENT&&(t.attributeTypes[e]=r.name)}let n=JSON.stringify(t);if(r_.has(e)){let t=r_.get(e);if(t.key===n)return t.promise;if(0===e.byteLength)throw Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.")}let i=this.workerNextTaskID++,a=e.byteLength,o=this._getWorker(i,a).then(n=>(r=n,new Promise((n,a)=>{r._callbacks[i]={resolve:n,reject:a},r.postMessage({type:"decode",id:i,taskConfig:t,buffer:e},[e])}))).then(e=>this._createGeometry(e.geometry));return o.catch(()=>!0).then(()=>{r&&i&&this._releaseTask(r,i)}),r_.set(e,{key:n,promise:o}),o}_createGeometry(e){let t=new rk.BufferGeometry;e.index&&t.setIndex(new rk.BufferAttribute(e.index.array,1));for(let r=0;r{r.load(e,t,void 0,n)})}preload(){return this._initDecoder(),this}_initDecoder(){if(this.decoderPending)return this.decoderPending;let e="object"!=typeof WebAssembly||"js"===this.decoderConfig.type,t=[];return e?t.push(this._loadLibrary("draco_decoder.js","text")):(t.push(this._loadLibrary("draco_wasm_wrapper.js","text")),t.push(this._loadLibrary("draco_decoder.wasm","arraybuffer"))),this.decoderPending=Promise.all(t).then(t=>{let r=t[0];e||(this.decoderConfig.wasmBinary=t[1]);let n=rj.toString(),i=["/* draco decoder */",r,"\n/* worker */",n.substring(n.indexOf("{")+1,n.lastIndexOf("}"))].join("\n");this.workerSourceURL=URL.createObjectURL(new Blob([i]))}),this.decoderPending}_getWorker(e,t){return this._initDecoder().then(()=>{if(this.workerPool.lengtht._taskLoad?-1:1});let r=this.workerPool[this.workerPool.length-1];return r._taskCosts[e]=t,r._taskLoad+=t,r})}_releaseTask(e,t){e._taskLoad-=e._taskCosts[t],delete e._callbacks[t],delete e._taskCosts[t]}debug(){console.log("Task load: ",this.workerPool.map(e=>e._taskLoad))}dispose(){for(let e=0;e{let t=e.draco,r=new t.Decoder,o=new t.DecoderBuffer;o.Init(new Int8Array(i),i.byteLength);try{let e=function(e,t,r,n){let i,a,o=n.attributeIDs,s=n.attributeTypes,l=t.GetEncodedGeometryType(r);if(l===e.TRIANGULAR_MESH)i=new e.Mesh,a=t.DecodeBufferToMesh(r,i);else if(l===e.POINT_CLOUD)i=new e.PointCloud,a=t.DecodeBufferToPointCloud(r,i);else throw Error("THREE.DRACOLoader: Unexpected geometry type.");if(!a.ok()||0===i.ptr)throw Error("THREE.DRACOLoader: Decoding failed: "+a.error_msg());let u={index:null,attributes:[]};for(let r in o){let a,l,c=self[s[r]];if(n.useUniqueIDs)l=o[r],a=t.GetAttributeByUniqueId(i,l);else{if(-1===(l=t.GetAttributeId(i,e[o[r]])))continue;a=t.GetAttribute(i,l)}u.attributes.push(function(e,t,r,n,i,a){let o=a.num_components(),s=r.num_points()*o,l=s*i.BYTES_PER_ELEMENT,u=function(e,t){switch(t){case Float32Array:return e.DT_FLOAT32;case Int8Array:return e.DT_INT8;case Int16Array:return e.DT_INT16;case Int32Array:return e.DT_INT32;case Uint8Array:return e.DT_UINT8;case Uint16Array:return e.DT_UINT16;case Uint32Array:return e.DT_UINT32}}(e,i),c=e._malloc(l);t.GetAttributeDataArrayForAllPoints(r,a,u,l,c);let d=new i(e.HEAPF32.buffer,c,s).slice();return e._free(c),{name:n,array:d,itemSize:o}}(e,t,i,r,c,a))}return l===e.TRIANGULAR_MESH&&(u.index=function(e,t,r){let n=3*r.num_faces(),i=4*n,a=e._malloc(i);t.GetTrianglesUInt32Array(r,i,a);let o=new Uint32Array(e.HEAPF32.buffer,a,n).slice();return e._free(a),{array:o,itemSize:1}}(e,t,i)),e.destroy(i),u}(t,r,o,a),i=e.attributes.map(e=>e.array.buffer);e.index&&i.push(e.index.array.buffer),self.postMessage({type:"decode",id:n.id,geometry:e},i)}catch(e){console.error(e),self.postMessage({type:"error",id:n.id,error:e.message})}finally{t.destroy(o),t.destroy(r)}})}}}var rJ=e.i(80520);let rN={clone:function(e){let t=new Map,r=new Map,n=e.clone();return function e(t,r,n){n(t,r);for(let i=0;i{let{isChild:r=!1,object:n,children:i,deep:a,castShadow:o,receiveShadow:s,inject:l,keys:u,...c}=e,d={keys:u,deep:a,inject:l,castShadow:o,receiveShadow:s};if(Array.isArray(n=el.useMemo(()=>{if(!1===r&&!Array.isArray(n)){let e=!1;if(n.traverse(t=>{t.isSkinnedMesh&&(e=!0)}),e)return rN.clone(n)}return n},[n,r])))return el.createElement("group",(0,tq.default)({},c,{ref:t}),n.map(e=>el.createElement(rK,(0,tq.default)({key:e.uuid,object:e},d))),i);let{children:f,...h}=function(e,t){let{keys:r=["near","far","color","distance","decay","penumbra","angle","intensity","skeleton","visible","castShadow","receiveShadow","morphTargetDictionary","morphTargetInfluences","name","geometry","material","position","rotation","scale","up","userData","bindMode","bindMatrix","bindMatrixInverse","skeleton"],deep:n,inject:i,castShadow:a,receiveShadow:o}=t,s={};for(let t of r)s[t]=e[t];return n&&(s.geometry&&"materialsOnly"!==n&&(s.geometry=s.geometry.clone()),s.material&&"geometriesOnly"!==n&&(s.material=s.material.clone())),i&&(s="function"==typeof i?{...s,children:i(e)}:el.isValidElement(i)?{...s,children:i}:{...s,...i}),e instanceof ef.Mesh&&(a&&(s.castShadow=!0),o&&(s.receiveShadow=!0)),s}(n,d),m=n.type[0].toLowerCase()+n.type.slice(1);return el.createElement(m,(0,tq.default)({},h,c,{ref:t}),n.children.map(e=>"Bone"===e.type?el.createElement("primitive",(0,tq.default)({key:e.uuid,object:e},d)):el.createElement(rK,(0,tq.default)({key:e.uuid,object:e},d,{isChild:!0}))),i,f)}),rQ=null,rW="https://www.gstatic.com/draco/versioned/decoders/1.5.5/";function rV(){let e=!(arguments.length>0)||void 0===arguments[0]||arguments[0],r=!(arguments.length>1)||void 0===arguments[1]||arguments[1],n=arguments.length>2?arguments[2]:void 0;return i=>{n&&n(i),e&&(rQ||(rQ=new rU),rQ.setDecoderPath("string"==typeof e?e:rW),i.setDRACOLoader(rQ)),r&&i.setMeshoptDecoder((()=>{let e;if(t)return t;let r=new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,3,2,0,0,5,3,1,0,1,12,1,0,10,22,2,12,0,65,0,65,0,65,0,252,10,0,0,11,7,0,65,0,253,15,26,11]),n=new Uint8Array([32,0,65,253,3,1,2,34,4,106,6,5,11,8,7,20,13,33,12,16,128,9,116,64,19,113,127,15,10,21,22,14,255,66,24,54,136,107,18,23,192,26,114,118,132,17,77,101,130,144,27,87,131,44,45,74,156,154,70,167]);if("object"!=typeof WebAssembly)return{supported:!1};let i="B9h9z9tFBBBF8fL9gBB9gLaaaaaFa9gEaaaB9gFaFa9gEaaaFaEMcBFFFGGGEIIILF9wFFFLEFBFKNFaFCx/IFMO/LFVK9tv9t9vq95GBt9f9f939h9z9t9f9j9h9s9s9f9jW9vq9zBBp9tv9z9o9v9wW9f9kv9j9v9kv9WvqWv94h919m9mvqBF8Z9tv9z9o9v9wW9f9kv9j9v9kv9J9u9kv94h919m9mvqBGy9tv9z9o9v9wW9f9kv9j9v9kv9J9u9kv949TvZ91v9u9jvBEn9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9P9jWBIi9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9R919hWBLn9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9F949wBKI9z9iqlBOc+x8ycGBM/qQFTa8jUUUUBCU/EBlHL8kUUUUBC9+RKGXAGCFJAI9LQBCaRKAE2BBC+gF9HQBALAEAIJHOAGlAGTkUUUBRNCUoBAG9uC/wgBZHKCUGAKCUG9JyRVAECFJRICBRcGXEXAcAF9PQFAVAFAclAcAVJAF9JyRMGXGXAG9FQBAMCbJHKC9wZRSAKCIrCEJCGrRQANCUGJRfCBRbAIRTEXGXAOATlAQ9PQBCBRISEMATAQJRIGXAS9FQBCBRtCBREEXGXAOAIlCi9PQBCBRISLMANCU/CBJAEJRKGXGXGXGXGXATAECKrJ2BBAtCKZrCEZfIBFGEBMAKhB83EBAKCNJhB83EBSEMAKAI2BIAI2BBHmCKrHYAYCE6HYy86BBAKCFJAICIJAYJHY2BBAmCIrCEZHPAPCE6HPy86BBAKCGJAYAPJHY2BBAmCGrCEZHPAPCE6HPy86BBAKCEJAYAPJHY2BBAmCEZHmAmCE6Hmy86BBAKCIJAYAmJHY2BBAI2BFHmCKrHPAPCE6HPy86BBAKCLJAYAPJHY2BBAmCIrCEZHPAPCE6HPy86BBAKCKJAYAPJHY2BBAmCGrCEZHPAPCE6HPy86BBAKCOJAYAPJHY2BBAmCEZHmAmCE6Hmy86BBAKCNJAYAmJHY2BBAI2BGHmCKrHPAPCE6HPy86BBAKCVJAYAPJHY2BBAmCIrCEZHPAPCE6HPy86BBAKCcJAYAPJHY2BBAmCGrCEZHPAPCE6HPy86BBAKCMJAYAPJHY2BBAmCEZHmAmCE6Hmy86BBAKCSJAYAmJHm2BBAI2BEHICKrHYAYCE6HYy86BBAKCQJAmAYJHm2BBAICIrCEZHYAYCE6HYy86BBAKCfJAmAYJHm2BBAICGrCEZHYAYCE6HYy86BBAKCbJAmAYJHK2BBAICEZHIAICE6HIy86BBAKAIJRISGMAKAI2BNAI2BBHmCIrHYAYCb6HYy86BBAKCFJAICNJAYJHY2BBAmCbZHmAmCb6Hmy86BBAKCGJAYAmJHm2BBAI2BFHYCIrHPAPCb6HPy86BBAKCEJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCIJAmAYJHm2BBAI2BGHYCIrHPAPCb6HPy86BBAKCLJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCKJAmAYJHm2BBAI2BEHYCIrHPAPCb6HPy86BBAKCOJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCNJAmAYJHm2BBAI2BIHYCIrHPAPCb6HPy86BBAKCVJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCcJAmAYJHm2BBAI2BLHYCIrHPAPCb6HPy86BBAKCMJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCSJAmAYJHm2BBAI2BKHYCIrHPAPCb6HPy86BBAKCQJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCfJAmAYJHm2BBAI2BOHICIrHYAYCb6HYy86BBAKCbJAmAYJHK2BBAICbZHIAICb6HIy86BBAKAIJRISFMAKAI8pBB83BBAKCNJAICNJ8pBB83BBAICTJRIMAtCGJRtAECTJHEAS9JQBMMGXAIQBCBRISEMGXAM9FQBANAbJ2BBRtCBRKAfREEXAEANCU/CBJAKJ2BBHTCFrCBATCFZl9zAtJHt86BBAEAGJREAKCFJHKAM9HQBMMAfCFJRfAIRTAbCFJHbAG9HQBMMABAcAG9sJANCUGJAMAG9sTkUUUBpANANCUGJAMCaJAG9sJAGTkUUUBpMAMCBAIyAcJRcAIQBMC9+RKSFMCBC99AOAIlAGCAAGCA9Ly6yRKMALCU/EBJ8kUUUUBAKM+OmFTa8jUUUUBCoFlHL8kUUUUBC9+RKGXAFCE9uHOCtJAI9LQBCaRKAE2BBHNC/wFZC/gF9HQBANCbZHVCF9LQBALCoBJCgFCUFT+JUUUBpALC84Jha83EBALC8wJha83EBALC8oJha83EBALCAJha83EBALCiJha83EBALCTJha83EBALha83ENALha83EBAEAIJC9wJRcAECFJHNAOJRMGXAF9FQBCQCbAVCF6yRSABRECBRVCBRQCBRfCBRICBRKEXGXAMAcuQBC9+RKSEMGXGXAN2BBHOC/vF9LQBALCoBJAOCIrCa9zAKJCbZCEWJHb8oGIRTAb8oGBRtGXAOCbZHbAS9PQBALAOCa9zAIJCbZCGWJ8oGBAVAbyROAb9FRbGXGXAGCG9HQBABAt87FBABCIJAO87FBABCGJAT87FBSFMAEAtjGBAECNJAOjGBAECIJATjGBMAVAbJRVALCoBJAKCEWJHmAOjGBAmATjGIALAICGWJAOjGBALCoBJAKCFJCbZHKCEWJHTAtjGBATAOjGIAIAbJRIAKCFJRKSGMGXGXAbCb6QBAQAbJAbC989zJCFJRQSFMAM1BBHbCgFZROGXGXAbCa9MQBAMCFJRMSFMAM1BFHbCgBZCOWAOCgBZqROGXAbCa9MQBAMCGJRMSFMAM1BGHbCgBZCfWAOqROGXAbCa9MQBAMCEJRMSFMAM1BEHbCgBZCdWAOqROGXAbCa9MQBAMCIJRMSFMAM2BIC8cWAOqROAMCLJRMMAOCFrCBAOCFZl9zAQJRQMGXGXAGCG9HQBABAt87FBABCIJAQ87FBABCGJAT87FBSFMAEAtjGBAECNJAQjGBAECIJATjGBMALCoBJAKCEWJHOAQjGBAOATjGIALAICGWJAQjGBALCoBJAKCFJCbZHKCEWJHOAtjGBAOAQjGIAICFJRIAKCFJRKSFMGXAOCDF9LQBALAIAcAOCbZJ2BBHbCIrHTlCbZCGWJ8oGBAVCFJHtATyROALAIAblCbZCGWJ8oGBAtAT9FHmJHtAbCbZHTyRbAT9FRTGXGXAGCG9HQBABAV87FBABCIJAb87FBABCGJAO87FBSFMAEAVjGBAECNJAbjGBAECIJAOjGBMALAICGWJAVjGBALCoBJAKCEWJHYAOjGBAYAVjGIALAICFJHICbZCGWJAOjGBALCoBJAKCFJCbZCEWJHYAbjGBAYAOjGIALAIAmJCbZHICGWJAbjGBALCoBJAKCGJCbZHKCEWJHOAVjGBAOAbjGIAKCFJRKAIATJRIAtATJRVSFMAVCBAM2BBHYyHTAOC/+F6HPJROAYCbZRtGXGXAYCIrHmQBAOCFJRbSFMAORbALAIAmlCbZCGWJ8oGBROMGXGXAtQBAbCFJRVSFMAbRVALAIAYlCbZCGWJ8oGBRbMGXGXAP9FQBAMCFJRYSFMAM1BFHYCgFZRTGXGXAYCa9MQBAMCGJRYSFMAM1BGHYCgBZCOWATCgBZqRTGXAYCa9MQBAMCEJRYSFMAM1BEHYCgBZCfWATqRTGXAYCa9MQBAMCIJRYSFMAM1BIHYCgBZCdWATqRTGXAYCa9MQBAMCLJRYSFMAMCKJRYAM2BLC8cWATqRTMATCFrCBATCFZl9zAQJHQRTMGXGXAmCb6QBAYRPSFMAY1BBHMCgFZROGXGXAMCa9MQBAYCFJRPSFMAY1BFHMCgBZCOWAOCgBZqROGXAMCa9MQBAYCGJRPSFMAY1BGHMCgBZCfWAOqROGXAMCa9MQBAYCEJRPSFMAY1BEHMCgBZCdWAOqROGXAMCa9MQBAYCIJRPSFMAYCLJRPAY2BIC8cWAOqROMAOCFrCBAOCFZl9zAQJHQROMGXGXAtCb6QBAPRMSFMAP1BBHMCgFZRbGXGXAMCa9MQBAPCFJRMSFMAP1BFHMCgBZCOWAbCgBZqRbGXAMCa9MQBAPCGJRMSFMAP1BGHMCgBZCfWAbqRbGXAMCa9MQBAPCEJRMSFMAP1BEHMCgBZCdWAbqRbGXAMCa9MQBAPCIJRMSFMAPCLJRMAP2BIC8cWAbqRbMAbCFrCBAbCFZl9zAQJHQRbMGXGXAGCG9HQBABAT87FBABCIJAb87FBABCGJAO87FBSFMAEATjGBAECNJAbjGBAECIJAOjGBMALCoBJAKCEWJHYAOjGBAYATjGIALAICGWJATjGBALCoBJAKCFJCbZCEWJHYAbjGBAYAOjGIALAICFJHICbZCGWJAOjGBALCoBJAKCGJCbZCEWJHOATjGBAOAbjGIALAIAm9FAmCb6qJHICbZCGWJAbjGBAIAt9FAtCb6qJRIAKCEJRKMANCFJRNABCKJRBAECSJREAKCbZRKAICbZRIAfCEJHfAF9JQBMMCBC99AMAc6yRKMALCoFJ8kUUUUBAKM/tIFGa8jUUUUBCTlRLC9+RKGXAFCLJAI9LQBCaRKAE2BBC/+FZC/QF9HQBALhB83ENAECFJRKAEAIJC98JREGXAF9FQBGXAGCG6QBEXGXAKAE9JQBC9+bMAK1BBHGCgFZRIGXGXAGCa9MQBAKCFJRKSFMAK1BFHGCgBZCOWAICgBZqRIGXAGCa9MQBAKCGJRKSFMAK1BGHGCgBZCfWAIqRIGXAGCa9MQBAKCEJRKSFMAK1BEHGCgBZCdWAIqRIGXAGCa9MQBAKCIJRKSFMAK2BIC8cWAIqRIAKCLJRKMALCNJAICFZCGWqHGAICGrCBAICFrCFZl9zAG8oGBJHIjGBABAIjGBABCIJRBAFCaJHFQBSGMMEXGXAKAE9JQBC9+bMAK1BBHGCgFZRIGXGXAGCa9MQBAKCFJRKSFMAK1BFHGCgBZCOWAICgBZqRIGXAGCa9MQBAKCGJRKSFMAK1BGHGCgBZCfWAIqRIGXAGCa9MQBAKCEJRKSFMAK1BEHGCgBZCdWAIqRIGXAGCa9MQBAKCIJRKSFMAK2BIC8cWAIqRIAKCLJRKMABAICGrCBAICFrCFZl9zALCNJAICFZCGWqHI8oGBJHG87FBAIAGjGBABCGJRBAFCaJHFQBMMCBC99AKAE6yRKMAKM+lLKFaF99GaG99FaG99GXGXAGCI9HQBAF9FQFEXGXGX9DBBB8/9DBBB+/ABCGJHG1BB+yAB1BBHE+yHI+L+TABCFJHL1BBHK+yHO+L+THN9DBBBB9gHVyAN9DBB/+hANAN+U9DBBBBANAVyHcAc+MHMAECa3yAI+SHIAI+UAcAMAKCa3yAO+SHcAc+U+S+S+R+VHO+U+SHN+L9DBBB9P9d9FQBAN+oRESFMCUUUU94REMAGAE86BBGXGX9DBBB8/9DBBB+/Ac9DBBBB9gyAcAO+U+SHN+L9DBBB9P9d9FQBAN+oRGSFMCUUUU94RGMALAG86BBGXGX9DBBB8/9DBBB+/AI9DBBBB9gyAIAO+U+SHN+L9DBBB9P9d9FQBAN+oRGSFMCUUUU94RGMABAG86BBABCIJRBAFCaJHFQBSGMMAF9FQBEXGXGX9DBBB8/9DBBB+/ABCIJHG8uFB+yAB8uFBHE+yHI+L+TABCGJHL8uFBHK+yHO+L+THN9DBBBB9gHVyAN9DB/+g6ANAN+U9DBBBBANAVyHcAc+MHMAECa3yAI+SHIAI+UAcAMAKCa3yAO+SHcAc+U+S+S+R+VHO+U+SHN+L9DBBB9P9d9FQBAN+oRESFMCUUUU94REMAGAE87FBGXGX9DBBB8/9DBBB+/Ac9DBBBB9gyAcAO+U+SHN+L9DBBB9P9d9FQBAN+oRGSFMCUUUU94RGMALAG87FBGXGX9DBBB8/9DBBB+/AI9DBBBB9gyAIAO+U+SHN+L9DBBB9P9d9FQBAN+oRGSFMCUUUU94RGMABAG87FBABCNJRBAFCaJHFQBMMM/SEIEaE99EaF99GXAF9FQBCBREABRIEXGXGX9D/zI818/AICKJ8uFBHLCEq+y+VHKAI8uFB+y+UHO9DB/+g6+U9DBBB8/9DBBB+/AO9DBBBB9gy+SHN+L9DBBB9P9d9FQBAN+oRVSFMCUUUU94RVMAICIJ8uFBRcAICGJ8uFBRMABALCFJCEZAEqCFWJAV87FBGXGXAKAM+y+UHN9DB/+g6+U9DBBB8/9DBBB+/AN9DBBBB9gy+SHS+L9DBBB9P9d9FQBAS+oRMSFMCUUUU94RMMABALCGJCEZAEqCFWJAM87FBGXGXAKAc+y+UHK9DB/+g6+U9DBBB8/9DBBB+/AK9DBBBB9gy+SHS+L9DBBB9P9d9FQBAS+oRcSFMCUUUU94RcMABALCaJCEZAEqCFWJAc87FBGXGX9DBBU8/AOAO+U+TANAN+U+TAKAK+U+THO9DBBBBAO9DBBBB9gy+R9DB/+g6+U9DBBB8/+SHO+L9DBBB9P9d9FQBAO+oRcSFMCUUUU94RcMABALCEZAEqCFWJAc87FBAICNJRIAECIJREAFCaJHFQBMMM9JBGXAGCGrAF9sHF9FQBEXABAB8oGBHGCNWCN91+yAGCi91CnWCUUU/8EJ+++U84GBABCIJRBAFCaJHFQBMMM9TFEaCBCB8oGUkUUBHFABCEJC98ZJHBjGUkUUBGXGXAB8/BCTWHGuQBCaREABAGlCggEJCTrXBCa6QFMAFREMAEM/lFFFaGXGXAFABqCEZ9FQBABRESFMGXGXAGCT9PQBABRESFMABREEXAEAF8oGBjGBAECIJAFCIJ8oGBjGBAECNJAFCNJ8oGBjGBAECSJAFCSJ8oGBjGBAECTJREAFCTJRFAGC9wJHGCb9LQBMMAGCI9JQBEXAEAF8oGBjGBAFCIJRFAECIJREAGC98JHGCE9LQBMMGXAG9FQBEXAEAF2BB86BBAECFJREAFCFJRFAGCaJHGQBMMABMoFFGaGXGXABCEZ9FQBABRESFMAFCgFZC+BwsN9sRIGXGXAGCT9PQBABRESFMABREEXAEAIjGBAECSJAIjGBAECNJAIjGBAECIJAIjGBAECTJREAGC9wJHGCb9LQBMMAGCI9JQBEXAEAIjGBAECIJREAGC98JHGCE9LQBMMGXAG9FQBEXAEAF86BBAECFJREAGCaJHGQBMMABMMMFBCUNMIT9kBB";WebAssembly.validate(r)&&(i="B9h9z9tFBBBFiI9gBB9gLaaaaaFa9gEaaaB9gFaFaEMcBBFBFFGGGEILF9wFFFLEFBFKNFaFCx/aFMO/LFVK9tv9t9vq95GBt9f9f939h9z9t9f9j9h9s9s9f9jW9vq9zBBp9tv9z9o9v9wW9f9kv9j9v9kv9WvqWv94h919m9mvqBG8Z9tv9z9o9v9wW9f9kv9j9v9kv9J9u9kv94h919m9mvqBIy9tv9z9o9v9wW9f9kv9j9v9kv9J9u9kv949TvZ91v9u9jvBLn9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9P9jWBKi9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9R919hWBOn9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9F949wBNI9z9iqlBVc+N9IcIBTEM9+FLa8jUUUUBCTlRBCBRFEXCBRGCBREEXABCNJAGJAECUaAFAGrCFZHIy86BBAEAIJREAGCFJHGCN9HQBMAFCx+YUUBJAE86BBAFCEWCxkUUBJAB8pEN83EBAFCFJHFCUG9HQBMMk8lLbaE97F9+FaL978jUUUUBCU/KBlHL8kUUUUBC9+RKGXAGCFJAI9LQBCaRKAE2BBC+gF9HQBALAEAIJHOAGlAG/8cBBCUoBAG9uC/wgBZHKCUGAKCUG9JyRNAECFJRKCBRVGXEXAVAF9PQFANAFAVlAVANJAF9JyRcGXGXAG9FQBAcCbJHIC9wZHMCE9sRSAMCFWRQAICIrCEJCGrRfCBRbEXAKRTCBRtGXEXGXAOATlAf9PQBCBRKSLMALCU/CBJAtAM9sJRmATAfJRKCBREGXAMCoB9JQBAOAKlC/gB9JQBCBRIEXAmAIJREGXGXGXGXGXATAICKrJ2BBHYCEZfIBFGEBMAECBDtDMIBSEMAEAKDBBIAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnHPCGD+MFAPDQBTFtGmEYIPLdKeOnC0+G+MiDtD9OHdCEDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIBAKCIJAeDeBJAiCx+YUUBJ2BBJRKSGMAEAKDBBNAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnC+P+e+8/4BDtD9OHdCbDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIBAKCNJAeDeBJAiCx+YUUBJ2BBJRKSFMAEAKDBBBDMIBAKCTJRKMGXGXGXGXGXAYCGrCEZfIBFGEBMAECBDtDMITSEMAEAKDBBIAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnHPCGD+MFAPDQBTFtGmEYIPLdKeOnC0+G+MiDtD9OHdCEDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMITAKCIJAeDeBJAiCx+YUUBJ2BBJRKSGMAEAKDBBNAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnC+P+e+8/4BDtD9OHdCbDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMITAKCNJAeDeBJAiCx+YUUBJ2BBJRKSFMAEAKDBBBDMITAKCTJRKMGXGXGXGXGXAYCIrCEZfIBFGEBMAECBDtDMIASEMAEAKDBBIAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnHPCGD+MFAPDQBTFtGmEYIPLdKeOnC0+G+MiDtD9OHdCEDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIAAKCIJAeDeBJAiCx+YUUBJ2BBJRKSGMAEAKDBBNAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnC+P+e+8/4BDtD9OHdCbDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIAAKCNJAeDeBJAiCx+YUUBJ2BBJRKSFMAEAKDBBBDMIAAKCTJRKMGXGXGXGXGXAYCKrfIBFGEBMAECBDtDMI8wSEMAEAKDBBIAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnHPCGD+MFAPDQBTFtGmEYIPLdKeOnC0+G+MiDtD9OHdCEDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHYCEWCxkUUBJDBEBAYCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHYCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMI8wAKCIJAeDeBJAYCx+YUUBJ2BBJRKSGMAEAKDBBNAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnC+P+e+8/4BDtD9OHdCbDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHYCEWCxkUUBJDBEBAYCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHYCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMI8wAKCNJAeDeBJAYCx+YUUBJ2BBJRKSFMAEAKDBBBDMI8wAKCTJRKMAICoBJREAICUFJAM9LQFAERIAOAKlC/fB9LQBMMGXAEAM9PQBAECErRIEXGXAOAKlCi9PQBCBRKSOMAmAEJRYGXGXGXGXGXATAECKrJ2BBAICKZrCEZfIBFGEBMAYCBDtDMIBSEMAYAKDBBIAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnHPCGD+MFAPDQBTFtGmEYIPLdKeOnC0+G+MiDtD9OHdCEDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIBAKCIJAeDeBJAiCx+YUUBJ2BBJRKSGMAYAKDBBNAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnC+P+e+8/4BDtD9OHdCbDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIBAKCNJAeDeBJAiCx+YUUBJ2BBJRKSFMAYAKDBBBDMIBAKCTJRKMAICGJRIAECTJHEAM9JQBMMGXAK9FQBAKRTAtCFJHtCI6QGSFMMCBRKSEMGXAM9FQBALCUGJAbJREALAbJDBGBReCBRYEXAEALCU/CBJAYJHIDBIBHdCFD9tAdCFDbHPD9OD9hD9RHdAIAMJDBIBH8ZCFD9tA8ZAPD9OD9hD9RH8ZDQBTFtGmEYIPLdKeOnHpAIAQJDBIBHyCFD9tAyAPD9OD9hD9RHyAIASJDBIBH8cCFD9tA8cAPD9OD9hD9RH8cDQBTFtGmEYIPLdKeOnH8dDQBFTtGEmYILPdKOenHPAPDQBFGEBFGEBFGEBFGEAeD9uHeDyBjGBAEAGJHIAeAPAPDQILKOILKOILKOILKOD9uHeDyBjGBAIAGJHIAeAPAPDQNVcMNVcMNVcMNVcMD9uHeDyBjGBAIAGJHIAeAPAPDQSQfbSQfbSQfbSQfbD9uHeDyBjGBAIAGJHIAeApA8dDQNVi8ZcMpySQ8c8dfb8e8fHPAPDQBFGEBFGEBFGEBFGED9uHeDyBjGBAIAGJHIAeAPAPDQILKOILKOILKOILKOD9uHeDyBjGBAIAGJHIAeAPAPDQNVcMNVcMNVcMNVcMD9uHeDyBjGBAIAGJHIAeAPAPDQSQfbSQfbSQfbSQfbD9uHeDyBjGBAIAGJHIAeAdA8ZDQNiV8ZcpMyS8cQ8df8eb8fHdAyA8cDQNiV8ZcpMyS8cQ8df8eb8fH8ZDQBFTtGEmYILPdKOenHPAPDQBFGEBFGEBFGEBFGED9uHeDyBjGBAIAGJHIAeAPAPDQILKOILKOILKOILKOD9uHeDyBjGBAIAGJHIAeAPAPDQNVcMNVcMNVcMNVcMD9uHeDyBjGBAIAGJHIAeAPAPDQSQfbSQfbSQfbSQfbD9uHeDyBjGBAIAGJHIAeAdA8ZDQNVi8ZcMpySQ8c8dfb8e8fHPAPDQBFGEBFGEBFGEBFGED9uHeDyBjGBAIAGJHIAeAPAPDQILKOILKOILKOILKOD9uHeDyBjGBAIAGJHIAeAPAPDQNVcMNVcMNVcMNVcMD9uHeDyBjGBAIAGJHIAeAPAPDQSQfbSQfbSQfbSQfbD9uHeDyBjGBAIAGJREAYCTJHYAM9JQBMMAbCIJHbAG9JQBMMABAVAG9sJALCUGJAcAG9s/8cBBALALCUGJAcCaJAG9sJAG/8cBBMAcCBAKyAVJRVAKQBMC9+RKSFMCBC99AOAKlAGCAAGCA9Ly6yRKMALCU/KBJ8kUUUUBAKMNBT+BUUUBM+KmFTa8jUUUUBCoFlHL8kUUUUBC9+RKGXAFCE9uHOCtJAI9LQBCaRKAE2BBHNC/wFZC/gF9HQBANCbZHVCF9LQBALCoBJCgFCUF/8MBALC84Jha83EBALC8wJha83EBALC8oJha83EBALCAJha83EBALCiJha83EBALCTJha83EBALha83ENALha83EBAEAIJC9wJRcAECFJHNAOJRMGXAF9FQBCQCbAVCF6yRSABRECBRVCBRQCBRfCBRICBRKEXGXAMAcuQBC9+RKSEMGXGXAN2BBHOC/vF9LQBALCoBJAOCIrCa9zAKJCbZCEWJHb8oGIRTAb8oGBRtGXAOCbZHbAS9PQBALAOCa9zAIJCbZCGWJ8oGBAVAbyROAb9FRbGXGXAGCG9HQBABAt87FBABCIJAO87FBABCGJAT87FBSFMAEAtjGBAECNJAOjGBAECIJATjGBMAVAbJRVALCoBJAKCEWJHmAOjGBAmATjGIALAICGWJAOjGBALCoBJAKCFJCbZHKCEWJHTAtjGBATAOjGIAIAbJRIAKCFJRKSGMGXGXAbCb6QBAQAbJAbC989zJCFJRQSFMAM1BBHbCgFZROGXGXAbCa9MQBAMCFJRMSFMAM1BFHbCgBZCOWAOCgBZqROGXAbCa9MQBAMCGJRMSFMAM1BGHbCgBZCfWAOqROGXAbCa9MQBAMCEJRMSFMAM1BEHbCgBZCdWAOqROGXAbCa9MQBAMCIJRMSFMAM2BIC8cWAOqROAMCLJRMMAOCFrCBAOCFZl9zAQJRQMGXGXAGCG9HQBABAt87FBABCIJAQ87FBABCGJAT87FBSFMAEAtjGBAECNJAQjGBAECIJATjGBMALCoBJAKCEWJHOAQjGBAOATjGIALAICGWJAQjGBALCoBJAKCFJCbZHKCEWJHOAtjGBAOAQjGIAICFJRIAKCFJRKSFMGXAOCDF9LQBALAIAcAOCbZJ2BBHbCIrHTlCbZCGWJ8oGBAVCFJHtATyROALAIAblCbZCGWJ8oGBAtAT9FHmJHtAbCbZHTyRbAT9FRTGXGXAGCG9HQBABAV87FBABCIJAb87FBABCGJAO87FBSFMAEAVjGBAECNJAbjGBAECIJAOjGBMALAICGWJAVjGBALCoBJAKCEWJHYAOjGBAYAVjGIALAICFJHICbZCGWJAOjGBALCoBJAKCFJCbZCEWJHYAbjGBAYAOjGIALAIAmJCbZHICGWJAbjGBALCoBJAKCGJCbZHKCEWJHOAVjGBAOAbjGIAKCFJRKAIATJRIAtATJRVSFMAVCBAM2BBHYyHTAOC/+F6HPJROAYCbZRtGXGXAYCIrHmQBAOCFJRbSFMAORbALAIAmlCbZCGWJ8oGBROMGXGXAtQBAbCFJRVSFMAbRVALAIAYlCbZCGWJ8oGBRbMGXGXAP9FQBAMCFJRYSFMAM1BFHYCgFZRTGXGXAYCa9MQBAMCGJRYSFMAM1BGHYCgBZCOWATCgBZqRTGXAYCa9MQBAMCEJRYSFMAM1BEHYCgBZCfWATqRTGXAYCa9MQBAMCIJRYSFMAM1BIHYCgBZCdWATqRTGXAYCa9MQBAMCLJRYSFMAMCKJRYAM2BLC8cWATqRTMATCFrCBATCFZl9zAQJHQRTMGXGXAmCb6QBAYRPSFMAY1BBHMCgFZROGXGXAMCa9MQBAYCFJRPSFMAY1BFHMCgBZCOWAOCgBZqROGXAMCa9MQBAYCGJRPSFMAY1BGHMCgBZCfWAOqROGXAMCa9MQBAYCEJRPSFMAY1BEHMCgBZCdWAOqROGXAMCa9MQBAYCIJRPSFMAYCLJRPAY2BIC8cWAOqROMAOCFrCBAOCFZl9zAQJHQROMGXGXAtCb6QBAPRMSFMAP1BBHMCgFZRbGXGXAMCa9MQBAPCFJRMSFMAP1BFHMCgBZCOWAbCgBZqRbGXAMCa9MQBAPCGJRMSFMAP1BGHMCgBZCfWAbqRbGXAMCa9MQBAPCEJRMSFMAP1BEHMCgBZCdWAbqRbGXAMCa9MQBAPCIJRMSFMAPCLJRMAP2BIC8cWAbqRbMAbCFrCBAbCFZl9zAQJHQRbMGXGXAGCG9HQBABAT87FBABCIJAb87FBABCGJAO87FBSFMAEATjGBAECNJAbjGBAECIJAOjGBMALCoBJAKCEWJHYAOjGBAYATjGIALAICGWJATjGBALCoBJAKCFJCbZCEWJHYAbjGBAYAOjGIALAICFJHICbZCGWJAOjGBALCoBJAKCGJCbZCEWJHOATjGBAOAbjGIALAIAm9FAmCb6qJHICbZCGWJAbjGBAIAt9FAtCb6qJRIAKCEJRKMANCFJRNABCKJRBAECSJREAKCbZRKAICbZRIAfCEJHfAF9JQBMMCBC99AMAc6yRKMALCoFJ8kUUUUBAKM/tIFGa8jUUUUBCTlRLC9+RKGXAFCLJAI9LQBCaRKAE2BBC/+FZC/QF9HQBALhB83ENAECFJRKAEAIJC98JREGXAF9FQBGXAGCG6QBEXGXAKAE9JQBC9+bMAK1BBHGCgFZRIGXGXAGCa9MQBAKCFJRKSFMAK1BFHGCgBZCOWAICgBZqRIGXAGCa9MQBAKCGJRKSFMAK1BGHGCgBZCfWAIqRIGXAGCa9MQBAKCEJRKSFMAK1BEHGCgBZCdWAIqRIGXAGCa9MQBAKCIJRKSFMAK2BIC8cWAIqRIAKCLJRKMALCNJAICFZCGWqHGAICGrCBAICFrCFZl9zAG8oGBJHIjGBABAIjGBABCIJRBAFCaJHFQBSGMMEXGXAKAE9JQBC9+bMAK1BBHGCgFZRIGXGXAGCa9MQBAKCFJRKSFMAK1BFHGCgBZCOWAICgBZqRIGXAGCa9MQBAKCGJRKSFMAK1BGHGCgBZCfWAIqRIGXAGCa9MQBAKCEJRKSFMAK1BEHGCgBZCdWAIqRIGXAGCa9MQBAKCIJRKSFMAK2BIC8cWAIqRIAKCLJRKMABAICGrCBAICFrCFZl9zALCNJAICFZCGWqHI8oGBJHG87FBAIAGjGBABCGJRBAFCaJHFQBMMCBC99AKAE6yRKMAKM/dLEK97FaF97GXGXAGCI9HQBAF9FQFCBRGEXABABDBBBHECiD+rFCiD+sFD/6FHIAECND+rFCiD+sFD/6FAID/gFAECTD+rFCiD+sFD/6FHLD/gFD/kFD/lFHKCBDtD+2FHOAICUUUU94DtHND9OD9RD/kFHI9DBB/+hDYAIAID/mFAKAKD/mFALAOALAND9OD9RD/kFHIAID/mFD/kFD/kFD/jFD/nFHLD/mF9DBBX9LDYHOD/kFCgFDtD9OAECUUU94DtD9OD9QAIALD/mFAOD/kFCND+rFCU/+EDtD9OD9QAKALD/mFAOD/kFCTD+rFCUU/8ODtD9OD9QDMBBABCTJRBAGCIJHGAF9JQBSGMMAF9FQBCBRGEXABCTJHVAVDBBBHECBDtHOCUU98D8cFCUU98D8cEHND9OABDBBBHKAEDQILKOSQfbPden8c8d8e8fCggFDtD9OD/6FAKAEDQBFGENVcMTtmYi8ZpyHECTD+sFD/6FHID/gFAECTD+rFCTD+sFD/6FHLD/gFD/kFD/lFHE9DB/+g6DYALAEAOD+2FHOALCUUUU94DtHcD9OD9RD/kFHLALD/mFAEAED/mFAIAOAIAcD9OD9RD/kFHEAED/mFD/kFD/kFD/jFD/nFHID/mF9DBBX9LDYHOD/kFCTD+rFALAID/mFAOD/kFCggEDtD9OD9QHLAEAID/mFAOD/kFCaDbCBDnGCBDnECBDnKCBDnOCBDncCBDnMCBDnfCBDnbD9OHEDQNVi8ZcMpySQ8c8dfb8e8fD9QDMBBABAKAND9OALAEDQBFTtGEmYILPdKOenD9QDMBBABCAJRBAGCIJHGAF9JQBMMM/hEIGaF97FaL978jUUUUBCTlREGXAF9FQBCBRIEXAEABDBBBHLABCTJHKDBBBHODQILKOSQfbPden8c8d8e8fHNCTD+sFHVCID+rFDMIBAB9DBBU8/DY9D/zI818/DYAVCEDtD9QD/6FD/nFHVALAODQBFGENVcMTtmYi8ZpyHLCTD+rFCTD+sFD/6FD/mFHOAOD/mFAVALCTD+sFD/6FD/mFHcAcD/mFAVANCTD+rFCTD+sFD/6FD/mFHNAND/mFD/kFD/kFD/lFCBDtD+4FD/jF9DB/+g6DYHVD/mF9DBBX9LDYHLD/kFCggEDtHMD9OAcAVD/mFALD/kFCTD+rFD9QHcANAVD/mFALD/kFCTD+rFAOAVD/mFALD/kFAMD9OD9QHVDQBFTtGEmYILPdKOenHLD8dBAEDBIBDyB+t+J83EBABCNJALD8dFAEDBIBDyF+t+J83EBAKAcAVDQNVi8ZcMpySQ8c8dfb8e8fHVD8dBAEDBIBDyG+t+J83EBABCiJAVD8dFAEDBIBDyE+t+J83EBABCAJRBAICIJHIAF9JQBMMM9jFF97GXAGCGrAF9sHG9FQBCBRFEXABABDBBBHECND+rFCND+sFD/6FAECiD+sFCnD+rFCUUU/8EDtD+uFD/mFDMBBABCTJRBAFCIJHFAG9JQBMMM9TFEaCBCB8oGUkUUBHFABCEJC98ZJHBjGUkUUBGXGXAB8/BCTWHGuQBCaREABAGlCggEJCTrXBCa6QFMAFREMAEMMMFBCUNMIT9tBB");let a=WebAssembly.instantiate(function(e){let t=new Uint8Array(e.length);for(let r=0;r96?n-71:n>64?n-65:n>47?n+4:n>46?63:62}let r=0;for(let i=0;i{(e=t.instance).exports.__wasm_call_ctors()});function o(t,r,n,i,a,o){let s=e.exports.sbrk,l=n+3&-4,u=s(l*i),c=s(a.length),d=new Uint8Array(e.exports.memory.buffer);d.set(a,c);let f=t(u,n,i,c,a.length);if(0===f&&o&&o(u,l,i),r.set(d.subarray(u,u+n*i)),s(u-s(0)),0!==f)throw Error("Malformed buffer data: ".concat(f))}let s={0:"",1:"meshopt_decodeFilterOct",2:"meshopt_decodeFilterQuat",3:"meshopt_decodeFilterExp",NONE:"",OCTAHEDRAL:"meshopt_decodeFilterOct",QUATERNION:"meshopt_decodeFilterQuat",EXPONENTIAL:"meshopt_decodeFilterExp"},l={0:"meshopt_decodeVertexBuffer",1:"meshopt_decodeIndexBuffer",2:"meshopt_decodeIndexSequence",ATTRIBUTES:"meshopt_decodeVertexBuffer",TRIANGLES:"meshopt_decodeIndexBuffer",INDICES:"meshopt_decodeIndexSequence"};return t={ready:a,supported:!0,decodeVertexBuffer(t,r,n,i,a){o(e.exports.meshopt_decodeVertexBuffer,t,r,n,i,e.exports[s[a]])},decodeIndexBuffer(t,r,n,i){o(e.exports.meshopt_decodeIndexBuffer,t,r,n,i)},decodeIndexSequence(t,r,n,i){o(e.exports.meshopt_decodeIndexSequence,t,r,n,i)},decodeGltfBuffer(t,r,n,i,a,u){o(e.exports[l[a]],t,r,n,i,e.exports[s[u]])}}})())}}let rX=(e,t,r,n)=>(0,rJ.useLoader)(t9,e,rV(t,r,n));rX.preload=(e,t,r,n)=>rJ.useLoader.preload(t9,e,rV(t,r,n)),rX.clear=e=>rJ.useLoader.clear(t9,e),rX.setDecoderPath=e=>{rW=e};var rq=e.i(89887);let rY=Math.PI;function rZ(e){var t,r;let{materialName:n,material:i,lightMap:a}=e,o=(0,tM.textureToUrl)(n),s=(0,tT.useTexture)(o,e=>(0,tS.setupColor)(e)),l=new Set(null!=(r=null==i||null==(t=i.userData)?void 0:t.flag_names)?r:[]).has("SelfIlluminating"),u=(0,el.useCallback)(e=>{(0,tG.injectCustomFog)(e,tL.globalFogUniforms),e.uniforms.interiorDirectionalFactor={value:tR.directional},e.uniforms.interiorAmbientFactor={value:tR.ambient},e.fragmentShader=e.fragmentShader.replace("#include ","#include \nuniform float interiorDirectionalFactor;\nuniform float interiorAmbientFactor;\n"),e.fragmentShader=e.fragmentShader.replace("#include ","#include \n // Apply interior-specific lighting multipliers\n reflectedLight.directDiffuse *= interiorDirectionalFactor;\n reflectedLight.indirectDiffuse *= interiorAmbientFactor;\n")},[]);return l?(0,es.jsx)("meshBasicMaterial",{map:s,side:2,toneMapped:!1,onBeforeCompile:u}):(0,es.jsx)("meshLambertMaterial",{map:s,lightMap:null!=a?a:void 0,lightMapIntensity:a?rY:void 0,side:2,onBeforeCompile:u})}function rz(e){if(!e)return null;let t=e.emissiveMap;return t&&(t.colorSpace=ef.SRGBColorSpace),null!=t?t:null}function r$(e){let{node:t}=e,r=(0,el.useMemo)(()=>t.material?Array.isArray(t.material)?t.material.map(e=>rz(e)):[rz(t.material)]:[],[t.material]);return(0,es.jsx)("mesh",{geometry:t.geometry,castShadow:!0,receiveShadow:!0,children:t.material?(0,es.jsx)(el.Suspense,{fallback:(0,es.jsx)("meshStandardMaterial",{color:"yellow",wireframe:!0}),children:Array.isArray(t.material)?t.material.map((e,t)=>(0,es.jsx)(rZ,{materialName:e.userData.resource_path,material:e,lightMap:r[t]},t)):(0,es.jsx)(rZ,{materialName:t.material.userData.resource_path,material:t.material,lightMap:r[0]})}):null})}let r0=(0,el.memo)(e=>{let{interiorFile:t}=e,{nodes:r}=rX((0,tM.interiorToUrl)(t)),{debugMode:n}=(0,tD.useDebug)();return(0,es.jsxs)("group",{rotation:[0,-Math.PI/2,0],children:[Object.entries(r).filter(e=>{let[,t]=e;return t.isMesh}).map(e=>{let[t,r]=e;return(0,es.jsx)(r$,{node:r},t)}),n?(0,es.jsx)(rq.FloatingLabel,{children:t}):null]})});function r1(e){let{color:t,label:r}=e;return(0,es.jsxs)("mesh",{children:[(0,es.jsx)("boxGeometry",{args:[10,10,10]}),(0,es.jsx)("meshStandardMaterial",{color:t,wireframe:!0}),r?(0,es.jsx)(rq.FloatingLabel,{color:t,children:r}):null]})}function r9(e){let{label:t}=e,{debugMode:r}=(0,tD.useDebug)();return r?(0,es.jsx)(r1,{color:"red",label:t}):null}let r2=(0,el.memo)(function(e){let{object:t}=e,r=(0,tF.getProperty)(t,"interiorFile"),n=(0,el.useMemo)(()=>(0,tF.getPosition)(t),[t]),i=(0,el.useMemo)(()=>(0,tF.getScale)(t),[t]),a=(0,el.useMemo)(()=>(0,tF.getRotation)(t),[t]);return(0,es.jsx)("group",{position:n,quaternion:a,scale:i,children:(0,es.jsx)(tX,{fallback:(0,es.jsx)(r9,{label:r}),children:(0,es.jsx)(el.Suspense,{fallback:(0,es.jsx)(r1,{color:"orange"}),children:(0,es.jsx)(r0,{interiorFile:r})})})})});function r8(e,t){let{path:r}=t,[n]=(0,rJ.useLoader)(ef.CubeTextureLoader,[e],e=>e.setPath(r));return n}r8.preload=(e,t)=>{let{path:r}=t;return rJ.useLoader.preload(ef.CubeTextureLoader,[e],e=>e.setPath(r))};function r3(e){return e.wrapS=ef.RepeatWrapping,e.wrapT=ef.RepeatWrapping,e.minFilter=ef.LinearFilter,e.magFilter=ef.LinearFilter,e.colorSpace=ef.NoColorSpace,e.needsUpdate=!0,e}function r5(e){let{textureUrl:t,radius:r,heightPercent:n,speed:i,windDirection:a,layerIndex:o,debugMode:s,animationEnabled:l}=e,u=(0,el.useRef)(null),c=(0,el.useRef)(new ef.Vector2(0,0)),d=(0,tT.useTexture)(t,r3),f=(0,el.useMemo)(()=>{let e=n-.05;return function(e,t,r,n){let i=new ef.BufferGeometry,a=new Float32Array(75),o=new Float32Array(50),s=[.05,.05,.05,.05,.05,.05,r,r,r,.05,.05,r,t,r,.05,.05,r,r,r,.05,.05,.05,.05,.05,.05],l=2*e/4;for(let t=0;t<5;t++)for(let r=0;r<5;r++){let n=5*t+r,i=-e+r*l,u=e-t*l,c=e*s[n];a[3*n]=i,a[3*n+1]=c,a[3*n+2]=u,o[2*n]=r,o[2*n+1]=t}!function(e){let t=t=>({x:e[3*t],y:e[3*t+1],z:e[3*t+2]}),r=(t,r,n,i)=>{e[3*t]=r,e[3*t+1]=n,e[3*t+2]=i},n=t(1),i=t(3),a=t(5),o=t(6),s=t(8),l=t(9),u=t(15),c=t(16),d=t(18),f=t(19),h=t(21),m=t(23),p=a.x+(n.x-a.x)*.5,A=a.y+(n.y-a.y)*.5,g=a.z+(n.z-a.z)*.5;r(0,o.x+(p-o.x)*2,o.y+(A-o.y)*2,o.z+(g-o.z)*2),p=l.x+(i.x-l.x)*.5,A=l.y+(i.y-l.y)*.5,g=l.z+(i.z-l.z)*.5,r(4,s.x+(p-s.x)*2,s.y+(A-s.y)*2,s.z+(g-s.z)*2),p=h.x+(u.x-h.x)*.5,A=h.y+(u.y-h.y)*.5,g=h.z+(u.z-h.z)*.5,r(20,c.x+(p-c.x)*2,c.y+(A-c.y)*2,c.z+(g-c.z)*2),p=m.x+(f.x-m.x)*.5,A=m.y+(f.y-m.y)*.5,g=m.z+(f.z-m.z)*.5,r(24,d.x+(p-d.x)*2,d.y+(A-d.y)*2,d.z+(g-d.z)*2)}(a);let u=function(e,t){let r=new Float32Array(25);for(let n=0;n<25;n++){let i=e[3*n],a=e[3*n+2],o=1.3-Math.sqrt(i*i+a*a)/t;o<.4?o=0:o>.8&&(o=1),r[n]=o}return r}(a,e),c=[];for(let e=0;e<4;e++)for(let t=0;t<4;t++){let r=5*e+t,n=r+1,i=r+5,a=i+1;c.push(r,i,a),c.push(r,a,n)}return i.setIndex(c),i.setAttribute("position",new ef.Float32BufferAttribute(a,3)),i.setAttribute("uv",new ef.Float32BufferAttribute(o,2)),i.setAttribute("alpha",new ef.Float32BufferAttribute(u,1)),i.computeBoundingSphere(),i}(r,n,e,0)},[r,n]),h=(0,el.useMemo)(()=>new ef.ShaderMaterial({uniforms:{cloudTexture:{value:d},uvOffset:{value:new ef.Vector2(0,0)},debugMode:{value:+!!s},layerIndex:{value:o}},vertexShader:"\n attribute float alpha;\n\n uniform vec2 uvOffset;\n\n varying vec2 vUv;\n varying float vAlpha;\n\n void main() {\n // Apply UV offset for scrolling\n vUv = uv + uvOffset;\n vAlpha = alpha;\n\n vec4 pos = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n // Set depth to far plane so clouds are always visible and behind other geometry\n gl_Position = pos.xyww;\n }\n",fragmentShader:"\n uniform sampler2D cloudTexture;\n uniform float debugMode;\n uniform int layerIndex;\n\n varying vec2 vUv;\n varying float vAlpha;\n\n void main() {\n vec4 texColor = texture2D(cloudTexture, vUv);\n\n // Debug mode: show layer-colored clouds (red, green, blue for layers 0, 1, 2)\n if (debugMode > 0.5) {\n vec3 debugColor;\n if (layerIndex == 0) {\n debugColor = vec3(1.0, 0.3, 0.3); // Red\n } else if (layerIndex == 1) {\n debugColor = vec3(0.3, 1.0, 0.3); // Green\n } else {\n debugColor = vec3(0.3, 0.3, 1.0); // Blue\n }\n // Use same alpha calculation as normal mode\n gl_FragColor = vec4(debugColor, texColor.a * vAlpha);\n return;\n }\n\n // Tribes 2 uses GL_MODULATE: final = texture × vertex color\n // Vertex color is white with varying alpha, so:\n // Final RGB = Texture RGB × 1.0 = Texture RGB\n // Final Alpha = Texture Alpha × Vertex Alpha\n float finalAlpha = texColor.a * vAlpha;\n\n // Output clouds with texture color and combined alpha\n gl_FragColor = vec4(texColor.rgb, finalAlpha);\n }\n",transparent:!0,depthWrite:!1,side:ef.DoubleSide}),[d,s,o]);return(0,tE.useFrame)((e,t)=>{if(!u.current||!l)return;let r=1e3*t/32;c.current.x+=a.x*i*r,c.current.y+=a.y*i*r,c.current.x=c.current.x-Math.floor(c.current.x),c.current.y=c.current.y-Math.floor(c.current.y),u.current.uniforms.uvOffset.value.copy(c.current)}),(0,el.useEffect)(()=>()=>{f.dispose(),h.dispose()},[f,h]),(0,es.jsx)("mesh",{geometry:f,frustumCulled:!1,renderOrder:10,children:(0,es.jsx)("primitive",{ref:u,object:h,attach:"material"})})}function r6(e){var t,r;let{object:n}=e,{debugMode:i}=(0,tD.useDebug)(),{animationEnabled:a}=(0,tD.useSettings)(),{data:o}=ty({queryKey:["detailMapList",r=(0,tF.getProperty)(n,"materialList")],queryFn:()=>(0,tM.loadDetailMapList)(r),enabled:!!r},tt,void 0),s=.95*(null!=(t=(0,tF.getFloat)(n,"visibleDistance"))?t:500),l=(0,el.useMemo)(()=>{var e,t,r;return[null!=(e=(0,tF.getFloat)(n,"cloudSpeed1"))?e:1e-4,null!=(t=(0,tF.getFloat)(n,"cloudSpeed2"))?t:2e-4,null!=(r=(0,tF.getFloat)(n,"cloudSpeed3"))?r:3e-4]},[n]),u=(0,el.useMemo)(()=>{let e=[.35,.25,.2],t=[];for(let i=0;i<3;i++){var r;let a=null!=(r=(0,tF.getFloat)(n,"cloudHeightPer".concat(i)))?r:e[i];t.push(a)}return t},[n]),c=(0,el.useMemo)(()=>{let e=(0,tF.getProperty)(n,"windVelocity");if(e){let[t,r]=e.split(" ").map(e=>parseFloat(e));if(0!==t||0!==r)return new ef.Vector2(r,-t).normalize()}return new ef.Vector2(1,0)},[n]),d=(0,el.useMemo)(()=>{if(!o)return[];let e=[];for(let n=7;n{let{camera:t}=e;f.current&&f.current.position.copy(t.position)}),d&&0!==d.length)?(0,es.jsx)("group",{ref:f,children:d.map((e,t)=>{let r=(0,tM.textureToUrl)(e.texture);return(0,es.jsx)(el.Suspense,{fallback:null,children:(0,es.jsx)(r5,{textureUrl:r,radius:s,heightPercent:e.height,speed:e.speed,windDirection:c,layerIndex:t,debugMode:i,animationEnabled:a})},t)})}):null}tM.BASE_URL;let r4=!1;function r7(e){if(!e)return;let[t,r,n]=e.split(" ").map(e=>parseFloat(e));return[new ef.Color().setRGB(t,r,n),new ef.Color().setRGB(t,r,n).convertSRGBToLinear()]}function ne(e){let{skyBoxFiles:t,fogColor:r,fogState:n}=e,{camera:i}=(0,tx.useThree)(),a=r8(t,{path:""}),o=(0,el.useMemo)(()=>i.projectionMatrixInverse,[i]),s=(0,el.useMemo)(()=>n?(0,tL.packFogVolumeData)(n.fogVolumes):new Float32Array(12),[n]),l=(0,el.useMemo)(()=>{if(!n)return .18;let e=.95*n.visibleDistance/Math.sqrt(3);return 60/Math.sqrt(e*e+3600)},[n]);return(0,es.jsxs)("mesh",{renderOrder:-1e3,frustumCulled:!1,children:[(0,es.jsxs)("bufferGeometry",{children:[(0,es.jsx)("bufferAttribute",{attach:"attributes-position",array:new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),count:3,itemSize:3}),(0,es.jsx)("bufferAttribute",{attach:"attributes-uv",array:new Float32Array([0,0,2,0,0,2]),count:3,itemSize:2})]}),(0,es.jsx)("shaderMaterial",{uniforms:{skybox:{value:a},fogColor:{value:null!=r?r:new ef.Color(0,0,0)},enableFog:{value:!!r},inverseProjectionMatrix:{value:o},cameraMatrixWorld:{value:i.matrixWorld},cameraHeight:tL.globalFogUniforms.cameraHeight,fogVolumeData:{value:s},horizonFogHeight:{value:l}},vertexShader:"\n varying vec2 vUv;\n\n void main() {\n vUv = uv;\n gl_Position = vec4(position.xy, 0.9999, 1.0);\n }\n ",fragmentShader:'\n uniform samplerCube skybox;\n uniform vec3 fogColor;\n uniform bool enableFog;\n uniform mat4 inverseProjectionMatrix;\n uniform mat4 cameraMatrixWorld;\n uniform float cameraHeight;\n uniform float fogVolumeData[12];\n uniform float horizonFogHeight;\n\n varying vec2 vUv;\n\n // Convert linear to sRGB for display\n // shaderMaterial does NOT get automatic linear->sRGB output conversion\n // Use proper sRGB transfer function (not simplified gamma 2.2) to match Three.js\n vec3 linearToSRGB(vec3 linear) {\n vec3 low = linear * 12.92;\n vec3 high = 1.055 * pow(linear, vec3(1.0 / 2.4)) - 0.055;\n return mix(low, high, step(vec3(0.0031308), linear));\n }\n\n void main() {\n vec2 ndc = vUv * 2.0 - 1.0;\n vec4 viewPos = inverseProjectionMatrix * vec4(ndc, 1.0, 1.0);\n viewPos.xyz /= viewPos.w;\n vec3 direction = normalize((cameraMatrixWorld * vec4(viewPos.xyz, 0.0)).xyz);\n direction = vec3(direction.z, direction.y, -direction.x);\n // Sample skybox - Three.js CubeTexture with SRGBColorSpace auto-converts to linear\n vec4 skyColor = textureCube(skybox, direction);\n vec3 finalColor;\n\n if (enableFog) {\n vec3 effectiveFogColor = fogColor;\n\n // Calculate how much fog volume the ray passes through\n // For skybox at "infinite" distance, the relevant height is how much\n // of the volume is above/below camera depending on view direction\n float volumeFogInfluence = 0.0;\n\n for (int i = 0; i < 3; i++) {\n int offset = i * 4;\n float volVisDist = fogVolumeData[offset + 0];\n float volMinH = fogVolumeData[offset + 1];\n float volMaxH = fogVolumeData[offset + 2];\n float volPct = fogVolumeData[offset + 3];\n\n if (volVisDist <= 0.0) continue;\n\n // Check if camera is inside this volume\n if (cameraHeight >= volMinH && cameraHeight <= volMaxH) {\n // Camera is inside the fog volume\n // Looking horizontally or up at shallow angles means ray travels\n // through more fog before exiting the volume\n float heightAboveCamera = volMaxH - cameraHeight;\n float heightBelowCamera = cameraHeight - volMinH;\n float volumeHeight = volMaxH - volMinH;\n\n // For horizontal rays (direction.y ≈ 0), maximum fog influence\n // For rays going up steeply, less fog (exits volume quickly)\n // For rays going down, more fog (travels through volume below)\n float rayInfluence;\n if (direction.y >= 0.0) {\n // Looking up: influence based on how steep we\'re looking\n // Shallow angles = long path through fog = high influence\n rayInfluence = 1.0 - smoothstep(0.0, 0.3, direction.y);\n } else {\n // Looking down: always high fog (into the volume)\n rayInfluence = 1.0;\n }\n\n // Scale by percentage and volume depth factor\n volumeFogInfluence += rayInfluence * volPct;\n }\n }\n\n // Base fog factor from view direction (for haze at horizon)\n // In Torque, the fog "bans" (bands) are rendered as geometry from\n // height 0 (HORIZON) to height 60 (OFFSET_HEIGHT) on the skybox.\n // The skybox corner is at mSkyBoxPt.x = mRadius / sqrt(3).\n //\n // horizonFogHeight is the direction.y value where the fog band ends:\n // horizonFogHeight = 60 / sqrt(skyBoxPt.x^2 + 60^2)\n //\n // For Firestorm (visDist=600): mRadius=570, skyBoxPt.x=329, horizonFogHeight≈0.18\n //\n // Torque renders the fog bands as geometry with linear vertex alpha\n // interpolation. We use a squared curve (t^2) to create a gentler\n // falloff at the top of the gradient, matching Tribes 2\'s appearance.\n float baseFogFactor;\n if (direction.y <= 0.0) {\n // Looking at or below horizon: full fog\n baseFogFactor = 1.0;\n } else if (direction.y >= horizonFogHeight) {\n // Above fog band: no fog\n baseFogFactor = 0.0;\n } else {\n // Within fog band: squared curve for gentler falloff at top\n float t = direction.y / horizonFogHeight;\n baseFogFactor = (1.0 - t) * (1.0 - t);\n }\n\n // Combine base fog with volume fog influence\n // When inside a volume, increase fog intensity\n float finalFogFactor = min(1.0, baseFogFactor + volumeFogInfluence * 0.5);\n\n finalColor = mix(skyColor.rgb, effectiveFogColor, finalFogFactor);\n } else {\n finalColor = skyColor.rgb;\n }\n // Convert linear result to sRGB for display\n gl_FragColor = vec4(linearToSRGB(finalColor), 1.0);\n }\n ',depthWrite:!1,depthTest:!1})]})}function nt(e){let{materialList:t,fogColor:r,fogState:n}=e,{data:i}=ty({queryKey:["detailMapList",t],queryFn:()=>(0,tM.loadDetailMapList)(t)},tt,void 0),a=(0,el.useMemo)(()=>i?[(0,tM.textureToUrl)(i[1]),(0,tM.textureToUrl)(i[3]),(0,tM.textureToUrl)(i[4]),(0,tM.textureToUrl)(i[5]),(0,tM.textureToUrl)(i[0]),(0,tM.textureToUrl)(i[2])]:null,[i]);return a?(0,es.jsx)(ne,{skyBoxFiles:a,fogColor:r,fogState:n}):null}function nr(e,t){let{fogDistance:r,visibleDistance:n}=e;return[r,n]}function nn(e){let{fogState:t}=e,{scene:r,camera:n}=(0,tx.useThree)(),i=(0,el.useRef)(null),a=(0,el.useMemo)(()=>(0,tL.packFogVolumeData)(t.fogVolumes),[t.fogVolumes]);return(0,el.useEffect)(()=>{r4||((0,tG.installCustomFogShader)(),r4=!0)},[]),(0,el.useEffect)(()=>{(0,tL.resetGlobalFogUniforms)();let[e,o]=nr(t,n.position.y),s=new ef.Fog(t.fogColor,e,o);return r.fog=s,i.current=s,(0,tL.updateGlobalFogUniforms)(n.position.y,a),()=>{r.fog=null,i.current=null,(0,tL.resetGlobalFogUniforms)()}},[r,n,t,a]),(0,tE.useFrame)(()=>{let e=i.current;if(!e)return;let r=n.position.y,[o,s]=nr(t,r);e.near=o,e.far=s,e.color.copy(t.fogColor),(0,tL.updateGlobalFogUniforms)(r,a)}),null}let ni=/borg|xorg|porg|dorg|plant|tree|bush|fern|vine|grass|leaf|flower|frond|palm|foliage/i;function na(e){return ni.test(e)}let no=(0,el.createContext)(null);function ns(e){let{children:t,shapeName:r,type:n}=e,i=(0,el.useMemo)(()=>na(r),[r]),a=(0,el.useMemo)(()=>({shapeName:r,type:n,isOrganic:i}),[r,n,i]);return(0,es.jsx)(no.Provider,{value:a,children:t})}var nl=e.i(51475);let nu=new Map;function nc(e){e.onBeforeCompile=t=>{(0,tG.injectCustomFog)(t,tL.globalFogUniforms),e instanceof ef.MeshLambertMaterial&&(t.uniforms.shapeDirectionalFactor={value:tI.directional},t.uniforms.shapeAmbientFactor={value:tI.ambient},t.fragmentShader=t.fragmentShader.replace("#include ","#include \nuniform float shapeDirectionalFactor;\nuniform float shapeAmbientFactor;\n"),t.fragmentShader=t.fragmentShader.replace("#include ","#include \n // Apply shape-specific lighting multipliers\n reflectedLight.directDiffuse *= shapeDirectionalFactor;\n reflectedLight.indirectDiffuse *= shapeAmbientFactor;\n"))}}function nd(e,t,r,n){let i=r.has("Translucent"),a=r.has("Additive"),o=r.has("SelfIlluminating");if(r.has("NeverEnvMap"),o){let e=new ef.MeshBasicMaterial({map:t,side:2,transparent:a,alphaTest:.5*!a,blending:a?ef.AdditiveBlending:void 0,fog:!0});return nc(e),e}if(n||i){let e={map:t,transparent:!1,alphaTest:.5,reflectivity:0},r=new ef.MeshLambertMaterial({...e,side:1,polygonOffset:!0,polygonOffsetFactor:1,polygonOffsetUnits:1}),n=new ef.MeshLambertMaterial({...e,side:0});return nc(r),nc(n),[r,n]}let s=new ef.MeshLambertMaterial({map:t,side:2,reflectivity:0});return nc(s),s}let nf=(0,el.memo)(function(e){var t;let{material:r,shapeName:n,geometry:i,backGeometry:a,castShadow:o=!1,receiveShadow:s=!1}=e,l=r.userData.resource_path,u=new Set(null!=(t=r.userData.flag_names)?t:[]),c=function(e){let{animationEnabled:t}=(0,tD.useSettings)(),{data:r}=ty({queryKey:["ifl",e],queryFn:()=>(0,tM.loadImageFrameList)(e),enabled:!0,suspense:!0,throwOnError:tB,placeholderData:void 0},tt,void 0),n=(0,el.useMemo)(()=>r.map(t=>(0,tM.iflTextureToUrl)(t.name,e)),[r,e]),i=(0,tT.useTexture)(n),a=(0,el.useMemo)(()=>{var t;let n,a=nu.get(e);return a||(a=function(e){let t=e[0].image.width,r=e[0].image.height,n=e.length,i=Math.ceil(Math.sqrt(n)),a=Math.ceil(n/i),o=document.createElement("canvas");o.width=t*i,o.height=r*a;let s=o.getContext("2d");e.forEach((e,n)=>{let a=Math.floor(n/i);s.drawImage(e.image,n%i*t,a*r)});let l=new ef.CanvasTexture(o);return l.colorSpace=ef.SRGBColorSpace,l.generateMipmaps=!1,l.minFilter=ef.NearestFilter,l.magFilter=ef.NearestFilter,l.wrapS=ef.ClampToEdgeWrapping,l.wrapT=ef.ClampToEdgeWrapping,l.repeat.set(1/i,1/a),{texture:l,columns:i,rows:a,frameCount:n,frameStartTicks:[],totalTicks:0,lastFrame:-1}}(i),nu.set(e,a)),n=0,(t=a).frameStartTicks=r.map(e=>{let t=n;return n+=e.frameCount,t}),t.totalTicks=n,a},[e,i,r]);return(0,nl.useTick)(e=>{let r=t?function(e,t){if(0===e.totalTicks)return 0;let r=t%e.totalTicks,{frameStartTicks:n}=e;for(let e=n.length-1;e>=0;e--)if(r>=n[e])return e;return 0}(a,e):0;!function(e,t){if(t===e.lastFrame)return;e.lastFrame=t;let r=t%e.columns,n=e.rows-1-Math.floor(t/e.columns);e.texture.offset.set(r/e.columns,n/e.rows)}(a,r)}),a.texture}("textures/".concat(l,".ifl")),d=n&&na(n),f=(0,el.useMemo)(()=>nd(r,c,u,d),[r,c,u,d]);return Array.isArray(f)?(0,es.jsxs)(es.Fragment,{children:[(0,es.jsx)("mesh",{geometry:a||i,castShadow:o,receiveShadow:s,children:(0,es.jsx)("primitive",{object:f[0],attach:"material"})}),(0,es.jsx)("mesh",{geometry:i,castShadow:o,receiveShadow:s,children:(0,es.jsx)("primitive",{object:f[1],attach:"material"})})]}):(0,es.jsx)("mesh",{geometry:i,castShadow:o,receiveShadow:s,children:(0,es.jsx)("primitive",{object:f,attach:"material"})})}),nh=(0,el.memo)(function(e){var t;let{material:r,shapeName:n,geometry:i,backGeometry:a,castShadow:o=!1,receiveShadow:s=!1}=e,l=r.userData.resource_path,u=new Set(null!=(t=r.userData.flag_names)?t:[]),c=(0,el.useMemo)(()=>(l||console.warn('No resource_path was found on "'.concat(n,'" - rendering fallback.')),l?(0,tM.textureToUrl)(l):tM.FALLBACK_TEXTURE_URL),[l,n]),d=n&&na(n),f=u.has("Translucent"),h=(0,tT.useTexture)(c,e=>d||f?(0,tS.setupAlphaTestedTexture)(e):(0,tS.setupColor)(e)),m=(0,el.useMemo)(()=>nd(r,h,u,d),[r,h,u,d]);return Array.isArray(m)?(0,es.jsxs)(es.Fragment,{children:[(0,es.jsx)("mesh",{geometry:a||i,castShadow:o,receiveShadow:s,children:(0,es.jsx)("primitive",{object:m[0],attach:"material"})}),(0,es.jsx)("mesh",{geometry:i,castShadow:o,receiveShadow:s,children:(0,es.jsx)("primitive",{object:m[1],attach:"material"})})]}):(0,es.jsx)("mesh",{geometry:i,castShadow:o,receiveShadow:s,children:(0,es.jsx)("primitive",{object:m,attach:"material"})})}),nm=(0,el.memo)(function(e){var t;let{material:r,shapeName:n,geometry:i,backGeometry:a,castShadow:o=!1,receiveShadow:s=!1}=e,l=new Set(null!=(t=r.userData.flag_names)?t:[]).has("IflMaterial"),u=r.userData.resource_path;return l&&u?(0,es.jsx)(nf,{material:r,shapeName:n,geometry:i,backGeometry:a,castShadow:o,receiveShadow:s}):r.name?(0,es.jsx)(nh,{material:r,shapeName:n,geometry:i,backGeometry:a,castShadow:o,receiveShadow:s}):null});function np(e){let{color:t,label:r}=e;return(0,es.jsxs)("mesh",{children:[(0,es.jsx)("boxGeometry",{args:[10,10,10]}),(0,es.jsx)("meshStandardMaterial",{color:t,wireframe:!0}),r?(0,es.jsx)(rq.FloatingLabel,{color:t,children:r}):null]})}function nA(e){let{color:t,label:r}=e,{debugMode:n}=(0,tD.useDebug)();return n?(0,es.jsx)(np,{color:t,label:r}):null}function ng(e){let{shapeName:t,loadingColor:r="yellow",children:n}=e;return t?(0,es.jsx)(tX,{fallback:(0,es.jsx)(nA,{color:"red",label:t}),children:(0,es.jsxs)(el.Suspense,{fallback:(0,es.jsx)(np,{color:r}),children:[(0,es.jsx)(nv,{}),n]})}):(0,es.jsx)(nA,{color:"orange"})}let nv=(0,el.memo)(function(){let{shapeName:e,isOrganic:t}=(0,el.useContext)(no),{debugMode:r}=(0,tD.useDebug)(),{nodes:n}=rX((0,tM.shapeToUrl)(e)),i=(0,el.useMemo)(()=>{let e=Object.values(n).filter(e=>e.skeleton);if(e.length>0){var t=e[0].skeleton;let r=new Set;return t.bones.forEach((e,t)=>{e.name.match(/^Hulk/i)&&r.add(t)}),r}return new Set},[n]),a=(0,el.useMemo)(()=>Object.entries(n).filter(e=>{let[t,r]=e;return r.material&&"Unassigned"!==r.material.name&&!r.name.match(/^Hulk/i)}).map(e=>{let[r,n]=e,a=function(e,t){if(0===t.size||!e.attributes.skinIndex)return e;let r=e.attributes.skinIndex,n=e.attributes.skinWeight,i=e.index,a=Array(r.count).fill(!1);for(let e=0;e.01&&t.has(o)){a[e]=!0;break}}if(i){let t=[],r=i.array;for(let e=0;e1){let t=0,r=0,n=0;for(let a of e)t+=i[3*a],r+=i[3*a+1],n+=i[3*a+2];let a=Math.sqrt(t*t+r*r+n*n);for(let o of(a>0&&(t/=a,r/=a,n/=a),e))i[3*o]=t,i[3*o+1]=r,i[3*o+2]=n}if(r.needsUpdate=!0,t){let e=(o=a.clone()).attributes.normal,t=e.array;for(let e=0;e{let{node:r,geometry:n,backGeometry:i}=t;return(0,es.jsx)(el.Suspense,{fallback:(0,es.jsx)("mesh",{geometry:n,children:(0,es.jsx)("meshStandardMaterial",{color:"gray",wireframe:!0})}),children:r.material?Array.isArray(r.material)?r.material.map((t,r)=>(0,es.jsx)(nm,{material:t,shapeName:e,geometry:n,backGeometry:i,castShadow:o,receiveShadow:o},r)):(0,es.jsx)(nm,{material:r.material,shapeName:e,geometry:n,backGeometry:i,castShadow:o,receiveShadow:o}):null},r.id)}),r?(0,es.jsx)(rq.FloatingLabel,{children:e}):null]})});var nB=e.i(6112);let nC={1:"Storm",2:"Inferno"},ny=(0,el.createContext)(null);function nb(){let e=(0,el.useContext)(ny);if(!e)throw Error("useCameras must be used within CamerasProvider");return e}function nM(e){let{children:t}=e,{camera:r}=(0,tx.useThree)(),[n,i]=(0,el.useState)(0),[a,o]=(0,el.useState)({}),s=(0,el.useCallback)(e=>{o(t=>({...t,[e.id]:e}))},[]),l=(0,el.useCallback)(e=>{o(t=>{let{[e.id]:r,...n}=t;return n})},[]),u=Object.keys(a).length,c=(0,el.useCallback)(()=>{i(e=>0===u?0:(e+1)%u)},[u]),d=(0,el.useCallback)(e=>{e>=0&&e{if(n({registerCamera:s,unregisterCamera:l,nextCamera:c,setCameraIndex:d,cameraCount:u}),[s,l,c,d,u]);return(0,es.jsx)(ny.Provider,{value:f,children:t})}let nE=(0,el.lazy)(()=>e.A(61921).then(e=>({default:e.AudioEmitter}))),nx={AudioEmitter:function(e){let{audioEnabled:t}=(0,tD.useSettings)();return t?(0,es.jsx)(nE,{...e}):null},Camera:function(e){let{object:t}=e,{registerCamera:r,unregisterCamera:n}=nb(),i=(0,el.useId)(),a=(0,tF.getProperty)(t,"dataBlock"),o=(0,el.useMemo)(()=>(0,tF.getPosition)(t),[t]),s=(0,el.useMemo)(()=>(0,tF.getRotation)(t),[t]);return(0,el.useEffect)(()=>{if("Observer"===a){let e={id:i,position:new ef.Vector3(...o),rotation:s};return r(e),()=>{n(e)}}},[i,a,r,n,o,s]),null},ForceFieldBare:(0,el.lazy)(()=>e.A(25147).then(e=>({default:e.ForceFieldBare}))),InteriorInstance:r2,Item:function(e){var t,r;let{object:n}=e,i=tK(),a=null!=(t=(0,tF.getProperty)(n,"dataBlock"))?t:"",o=(0,nB.useDatablock)(a),s=(0,el.useMemo)(()=>(0,tF.getPosition)(n),[n]),l=(0,el.useMemo)(()=>(0,tF.getScale)(n),[n]),u=(0,el.useMemo)(()=>(0,tF.getRotation)(n),[n]),c=(0,tF.getProperty)(o,"shapeFile");c||console.error(" missing shape for datablock: ".concat(a));let d=(null==a?void 0:a.toLowerCase())==="flag",f=null!=(r=null==i?void 0:i.team)?r:null,h=f&&f>0?nC[f]:null,m=d&&h?"".concat(h," Flag"):null;return(0,es.jsx)(ns,{shapeName:c,type:"Item",children:(0,es.jsx)("group",{position:s,quaternion:u,scale:l,children:(0,es.jsx)(ng,{shapeName:c,loadingColor:"pink",children:m?(0,es.jsx)(rq.FloatingLabel,{opacity:.6,children:m}):null})})})},SimGroup:function(e){var t;let{object:r}=e,n=tK(),i=(0,el.useMemo)(()=>{let e=null,t=!1;if(n&&n.hasTeams){if(t=!0,null!=n.team)e=n.team;else if(r._name){let t=r._name.match(/^team(\d+)$/i);t&&(e=parseInt(t[1],10))}}else r._name&&(t="teams"===r._name.toLowerCase());return{object:r,parent:n,hasTeams:t,team:e}},[r,n]);return(0,es.jsx)(tN.Provider,{value:i,children:(null!=(t=r._children)?t:[]).map((e,t)=>nF(e,t))})},Sky:function(e){var t;let{object:r}=e,{fogEnabled:n,highQualityFog:i}=(0,tD.useSettings)(),a=(0,tF.getProperty)(r,"materialList"),o=(0,el.useMemo)(()=>r7((0,tF.getProperty)(r,"SkySolidColor")),[r]),s=null!=(t=(0,tF.getInt)(r,"useSkyTextures"))?t:1,l=(0,el.useMemo)(()=>(function(e){var t,r;let n=!(arguments.length>1)||void 0===arguments[1]||arguments[1],i=null!=(t=(0,tF.getFloat)(e,"fogDistance"))?t:0,a=null!=(r=(0,tF.getFloat)(e,"visibleDistance"))?r:1e3,o=(0,tF.getFloat)(e,"high_fogDistance"),s=(0,tF.getFloat)(e,"high_visibleDistance"),l=n&&null!=o&&o>0?o:i,u=n&&null!=s&&s>0?s:a,c=function(e){if(!e)return new ef.Color(.5,.5,.5);let[t,r,n]=e.split(" ").map(e=>parseFloat(e));return new ef.Color().setRGB(t,r,n).convertSRGBToLinear()}((0,tF.getProperty)(e,"fogColor")),d=[];for(let t=1;t<=3;t++){let r=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;if(!e)return null;let r=e.split(" ").map(e=>parseFloat(e));if(r.length<3)return null;let[n,i,a]=r;return n<=0||a<=i?null:{visibleDistance:n,minHeight:i,maxHeight:a,percentage:Math.max(0,Math.min(1,t))}}((0,tF.getProperty)(e,"fogVolume".concat(t)),1);r&&d.push(r)}let f=d.reduce((e,t)=>Math.max(e,t.maxHeight),0);return{fogDistance:l,visibleDistance:u,fogColor:c,fogVolumes:d,fogLine:f,enabled:u>l}})(r,i),[r,i]),u=(0,el.useMemo)(()=>r7((0,tF.getProperty)(r,"fogColor")),[r]),c=o||u,d=l.enabled&&n,f=l.fogColor,{scene:h,gl:m}=(0,tx.useThree)();return(0,el.useEffect)(()=>{if(d){let e=f.clone();h.background=e,m.setClearColor(e)}else if(c){let e=c[0].clone();h.background=e,m.setClearColor(e)}else h.background=null;return()=>{h.background=null}},[h,m,d,f,c]),(0,es.jsxs)(es.Fragment,{children:[a&&s?(0,es.jsx)(el.Suspense,{fallback:null,children:(0,es.jsx)(nt,{materialList:a,fogColor:d?f:void 0,fogState:d?l:void 0},a)}):null,(0,es.jsx)(el.Suspense,{children:(0,es.jsx)(r6,{object:r})}),d?(0,es.jsx)(nn,{fogState:l}):null]})},StaticShape:function(e){var t;let{object:r}=e,n=null!=(t=(0,tF.getProperty)(r,"dataBlock"))?t:"",i=(0,nB.useDatablock)(n),a=(0,el.useMemo)(()=>(0,tF.getPosition)(r),[r]),o=(0,el.useMemo)(()=>(0,tF.getRotation)(r),[r]),s=(0,el.useMemo)(()=>(0,tF.getScale)(r),[r]),l=(0,tF.getProperty)(i,"shapeFile");return l||console.error(" missing shape for datablock: ".concat(n)),(0,es.jsx)(ns,{shapeName:l,type:"StaticShape",children:(0,es.jsx)("group",{position:a,quaternion:o,scale:s,children:(0,es.jsx)(ng,{shapeName:l})})})},Sun:function(e){let{object:t}=e,r=(0,el.useMemo)(()=>{var e;let[r,n,i]=(null!=(e=(0,tF.getProperty)(t,"direction"))?e:"0.57735 0.57735 -0.57735").split(" ").map(e=>parseFloat(e)),a=Math.sqrt(r*r+i*i+n*n);return new ef.Vector3(r/a,i/a,n/a)},[t]),n=(0,el.useMemo)(()=>new ef.Vector3(-(5e3*r.x),-(5e3*r.y),-(5e3*r.z)),[r]),i=(0,el.useMemo)(()=>{var e;let[r,n,i]=(null!=(e=(0,tF.getProperty)(t,"color"))?e:"0.7 0.7 0.7 1").split(" ").map(e=>parseFloat(e));return new ef.Color(r,n,i)},[t]),a=(0,el.useMemo)(()=>{var e;let[r,n,i]=(null!=(e=(0,tF.getProperty)(t,"ambient"))?e:"0.5 0.5 0.5 1").split(" ").map(e=>parseFloat(e));return new ef.Color(r,n,i)},[t]);return(0,es.jsxs)(es.Fragment,{children:[(0,es.jsx)("directionalLight",{position:n,color:i,intensity:1,castShadow:!0,"shadow-mapSize-width":8192,"shadow-mapSize-height":8192,"shadow-camera-left":-4096,"shadow-camera-right":4096,"shadow-camera-top":4096,"shadow-camera-bottom":-4096,"shadow-camera-near":100,"shadow-camera-far":12e3,"shadow-bias":-3e-4,"shadow-normalBias":.5}),(0,es.jsx)("ambientLight",{color:a,intensity:1})]})},TerrainBlock:tJ,TSStatic:function(e){let{object:t}=e,r=(0,tF.getProperty)(t,"shapeName"),n=(0,el.useMemo)(()=>(0,tF.getPosition)(t),[t]),i=(0,el.useMemo)(()=>(0,tF.getRotation)(t),[t]),a=(0,el.useMemo)(()=>(0,tF.getScale)(t),[t]);return r||console.error(" missing shapeName for object",t),(0,es.jsx)(ns,{shapeName:r,type:"TSStatic",children:(0,es.jsx)("group",{position:n,quaternion:i,scale:a,children:(0,es.jsx)(ng,{shapeName:r})})})},Turret:function(e){var t;let{object:r}=e,n=null!=(t=(0,tF.getProperty)(r,"dataBlock"))?t:"",i=(0,tF.getProperty)(r,"initialBarrel"),a=(0,nB.useDatablock)(n),o=(0,nB.useDatablock)(i),s=(0,el.useMemo)(()=>(0,tF.getPosition)(r),[r]),l=(0,el.useMemo)(()=>(0,tF.getRotation)(r),[r]),u=(0,el.useMemo)(()=>(0,tF.getScale)(r),[r]),c=(0,tF.getProperty)(a,"shapeFile"),d=(0,tF.getProperty)(o,"shapeFile");return c||console.error(" missing shape for datablock: ".concat(n)),i&&!d&&console.error(" missing shape for barrel datablock: ".concat(i)),(0,es.jsx)(ns,{shapeName:c,type:"Turret",children:(0,es.jsxs)("group",{position:s,quaternion:l,scale:u,children:[(0,es.jsx)(ng,{shapeName:c}),d?(0,es.jsx)(ns,{shapeName:d,type:"Turret",children:(0,es.jsx)("group",{position:[0,1.5,0],children:(0,es.jsx)(ng,{shapeName:d})})}):null]})})},WaterBlock:(0,el.lazy)(()=>e.A(18599).then(e=>({default:e.WaterBlock}))),WayPoint:function(e){let{object:t}=e;tK();let r=(0,el.useMemo)(()=>(0,tF.getPosition)(t),[t]),n=(0,tF.getProperty)(t,"name");return n?(0,es.jsx)(rq.FloatingLabel,{position:r,opacity:.6,children:n}):null}};function nF(e,t){let r=nx[e._className];return r?(0,es.jsx)(el.Suspense,{children:(0,es.jsx)(r,{object:e})},t):null}var nS=e.i(86608),nT=e.i(38433),nw=e.i(33870),nR=e.i(91996);let nI=async e=>{let t;try{t=(0,tM.getUrlForPath)(e)}catch(t){return console.warn("Script not in manifest: ".concat(e," (").concat(t,")")),null}try{let r=await fetch(t);if(!r.ok)return console.error("Script fetch failed: ".concat(e," (").concat(r.status,")")),null;return await r.text()}catch(t){return console.error("Script fetch error: ".concat(e)),console.error(t),null}},nD=(0,nw.createScriptCache)(),nG={findFiles:e=>{let t=(0,tb.default)(e,{nocase:!0});return(0,nR.getResourceList)().filter(e=>t(e)).map(e=>{let[t,r]=(0,nR.getSourceAndPath)(e);return r})},isFile:e=>null!=(0,nR.getResourceMap)()[(0,nR.getResourceKey)(e)]},nL=(0,el.memo)(function(e){let{name:t,onLoadingChange:r}=e,{data:n}=ty({queryKey:["parsedMission",t],queryFn:()=>(0,tM.loadMission)(t)},tt,void 0),{missionGroup:i,runtime:a,progress:o}=function(e,t){let[r,n]=(0,el.useState)({missionGroup:void 0,runtime:void 0,progress:0});return(0,el.useEffect)(()=>{if(!t)return;let r=new AbortController,i=t.missionTypes[0],a=(0,nT.createProgressTracker)(),o=()=>{n(e=>({...e,progress:a.progress}))};a.on("update",o);let{runtime:s}=(0,nS.runServer)({missionName:e,missionType:i,runtimeOptions:{loadScript:nI,fileSystem:nG,cache:nD,signal:r.signal,progress:a,ignoreScripts:["scripts/admin.cs","scripts/ai.cs","scripts/aiBotProfiles.cs","scripts/aiBountyGame.cs","scripts/aiChat.cs","scripts/aiCnH.cs","scripts/aiCTF.cs","scripts/aiDeathMatch.cs","scripts/aiDebug.cs","scripts/aiDefaultTasks.cs","scripts/aiDnD.cs","scripts/aiHumanTasks.cs","scripts/aiHunters.cs","scripts/aiInventory.cs","scripts/aiObjectiveBuilder.cs","scripts/aiObjectives.cs","scripts/aiRabbit.cs","scripts/aiSiege.cs","scripts/aiTDM.cs","scripts/aiTeamHunters.cs","scripts/deathMessages.cs","scripts/graphBuild.cs","scripts/navGraph.cs","scripts/serverTasks.cs","scripts/spdialog.cs"]},onMissionLoadDone:()=>{n({missionGroup:s.getObjectByName("MissionGroup"),runtime:s,progress:1})}});return()=>{a.off("update",o),r.abort(),s.destroy()}},[e,t]),r}(t,n),s=!i||!a;return((0,el.useEffect)(()=>{null==r||r(s,o)},[s,o,r]),s)?null:(0,es.jsx)(t_.RuntimeProvider,{runtime:a,children:nF(i)})});function nP(e,t){var r=eB(e,t,"update");if(r.set){if(!r.get)throw TypeError("attempted to read set only private field");return"__destrWrapper"in r||(r.__destrWrapper={set value(v){r.set.call(e,v)},get value(){return r.get.call(e)}}),r.__destrWrapper}if(!r.writable)throw TypeError("attempted to set read only private field");return r}var nH=(K=new WeakMap,class extends eF{build(e,t,r){var n;let i=t.queryKey,a=null!=(n=t.queryHash)?n:eO(i,t),o=this.get(a);return o||(o=new e5({client:e,queryKey:i,queryHash:a,options:e.defaultQueryOptions(t),state:r,defaultOptions:e.getQueryDefaults(i)}),this.add(o)),o}add(e){eC(this,K).has(e.queryHash)||(eC(this,K).set(e.queryHash,e),this.notify({type:"added",query:e}))}remove(e){let t=eC(this,K).get(e.queryHash);t&&(e.destroy(),t===e&&eC(this,K).delete(e.queryHash),this.notify({type:"removed",query:e}))}clear(){ez.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return eC(this,K).get(e)}getAll(){return[...eC(this,K).values()]}find(e){let t={exact:!0,...e};return this.getAll().find(e=>eP(t,e))}findAll(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=this.getAll();return Object.keys(e).length>0?t.filter(t=>eP(e,t)):t}notify(e){ez.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){ez.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){ez.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}constructor(e={}){super(),eb(this,K,{writable:!0,value:void 0}),this.config=e,eM(this,K,new Map)}}),nO=(Q=new WeakMap,W=new WeakMap,V=new WeakMap,X=new WeakMap,q=new WeakSet,class extends e3{setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){eC(this,W).includes(e)||(eC(this,W).push(e),this.clearGcTimeout(),eC(this,V).notify({type:"observerAdded",mutation:this,observer:e}))}removeObserver(e){eM(this,W,eC(this,W).filter(t=>t!==e)),this.scheduleGc(),eC(this,V).notify({type:"observerRemoved",mutation:this,observer:e})}optionalRemove(){eC(this,W).length||("pending"===this.state.status?this.scheduleGc():eC(this,V).remove(this))}continue(){var e,t;return null!=(t=null==(e=eC(this,X))?void 0:e.continue())?t:this.execute(this.state.variables)}async execute(e){var t,r,n,i,a,o,s,l,u,c,d,f,h,m,p,A,g,B,C,y,b;let M=()=>{eE(this,q,nk).call(this,{type:"continue"})},E={client:eC(this,Q),meta:this.options.meta,mutationKey:this.options.mutationKey};eM(this,X,e8({fn:()=>this.options.mutationFn?this.options.mutationFn(e,E):Promise.reject(Error("No mutationFn found")),onFail:(e,t)=>{eE(this,q,nk).call(this,{type:"failed",failureCount:e,error:t})},onPause:()=>{eE(this,q,nk).call(this,{type:"pause"})},onContinue:M,retry:null!=(t=this.options.retry)?t:0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>eC(this,V).canRun(this)}));let x="pending"===this.state.status,F=!eC(this,X).canStart();try{if(x)M();else{eE(this,q,nk).call(this,{type:"pending",variables:e,isPaused:F}),await (null==(c=(d=eC(this,V).config).onMutate)?void 0:c.call(d,e,this,E));let t=await (null==(f=(h=this.options).onMutate)?void 0:f.call(h,e,E));t!==this.state.context&&eE(this,q,nk).call(this,{type:"pending",context:t,variables:e,isPaused:F})}let t=await eC(this,X).start();return await (null==(r=(n=eC(this,V).config).onSuccess)?void 0:r.call(n,t,e,this.state.context,this,E)),await (null==(i=(a=this.options).onSuccess)?void 0:i.call(a,t,e,this.state.context,E)),await (null==(o=(s=eC(this,V).config).onSettled)?void 0:o.call(s,t,null,this.state.variables,this.state.context,this,E)),await (null==(l=(u=this.options).onSettled)?void 0:l.call(u,t,null,e,this.state.context,E)),eE(this,q,nk).call(this,{type:"success",data:t}),t}catch(t){try{throw await (null==(m=(p=eC(this,V).config).onError)?void 0:m.call(p,t,e,this.state.context,this,E)),await (null==(A=(g=this.options).onError)?void 0:A.call(g,t,e,this.state.context,E)),await (null==(B=(C=eC(this,V).config).onSettled)?void 0:B.call(C,void 0,t,this.state.variables,this.state.context,this,E)),await (null==(y=(b=this.options).onSettled)?void 0:y.call(b,void 0,t,e,this.state.context,E)),t}finally{eE(this,q,nk).call(this,{type:"error",error:t})}}finally{eC(this,V).runNext(this)}}constructor(e){super(),ex(this,q),eb(this,Q,{writable:!0,value:void 0}),eb(this,W,{writable:!0,value:void 0}),eb(this,V,{writable:!0,value:void 0}),eb(this,X,{writable:!0,value:void 0}),eM(this,Q,e.client),this.mutationId=e.mutationId,eM(this,V,e.mutationCache),eM(this,W,[]),this.state=e.state||{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0},this.setOptions(e.options),this.scheduleGc()}});function nk(e){this.state=(t=>{switch(e.type){case"failed":return{...t,failureCount:e.failureCount,failureReason:e.error};case"pause":return{...t,isPaused:!0};case"continue":return{...t,isPaused:!1};case"pending":return{...t,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:"pending",variables:e.variables,submittedAt:Date.now()};case"success":return{...t,data:e.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...t,data:void 0,error:e.error,failureCount:t.failureCount+1,failureReason:e.error,isPaused:!1,status:"error"}}})(this.state),ez.batch(()=>{eC(this,W).forEach(t=>{t.onMutationUpdate(e)}),eC(this,V).notify({mutation:this,type:"updated",action:e})})}var n_=(Y=new WeakMap,Z=new WeakMap,z=new WeakMap,class extends eF{build(e,t,r){let n=new nO({client:e,mutationCache:this,mutationId:++nP(this,z).value,options:e.defaultMutationOptions(t),state:r});return this.add(n),n}add(e){eC(this,Y).add(e);let t=nU(e);if("string"==typeof t){let r=eC(this,Z).get(t);r?r.push(e):eC(this,Z).set(t,[e])}this.notify({type:"added",mutation:e})}remove(e){if(eC(this,Y).delete(e)){let t=nU(e);if("string"==typeof t){let r=eC(this,Z).get(t);if(r)if(r.length>1){let t=r.indexOf(e);-1!==t&&r.splice(t,1)}else r[0]===e&&eC(this,Z).delete(t)}}this.notify({type:"removed",mutation:e})}canRun(e){let t=nU(e);if("string"!=typeof t)return!0;{let r=eC(this,Z).get(t),n=null==r?void 0:r.find(e=>"pending"===e.state.status);return!n||n===e}}runNext(e){let t=nU(e);if("string"!=typeof t)return Promise.resolve();{var r,n;let i=null==(r=eC(this,Z).get(t))?void 0:r.find(t=>t!==e&&t.state.isPaused);return null!=(n=null==i?void 0:i.continue())?n:Promise.resolve()}}clear(){ez.batch(()=>{eC(this,Y).forEach(e=>{this.notify({type:"removed",mutation:e})}),eC(this,Y).clear(),eC(this,Z).clear()})}getAll(){return Array.from(eC(this,Y))}find(e){let t={exact:!0,...e};return this.getAll().find(e=>eH(t,e))}findAll(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return this.getAll().filter(t=>eH(e,t))}notify(e){ez.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(e=>e.state.isPaused);return ez.batch(()=>Promise.all(e.map(e=>e.continue().catch(eR))))}constructor(e={}){super(),eb(this,Y,{writable:!0,value:void 0}),eb(this,Z,{writable:!0,value:void 0}),eb(this,z,{writable:!0,value:void 0}),this.config=e,eM(this,Y,new Set),eM(this,Z,new Map),eM(this,z,0)}});function nU(e){var t;return null==(t=e.options.scope)?void 0:t.id}function nj(e){return{onFetch:(t,r)=>{var n,i,a,o,s;let l=t.options,u=null==(a=t.fetchOptions)||null==(i=a.meta)||null==(n=i.fetchMore)?void 0:n.direction,c=(null==(o=t.state.data)?void 0:o.pages)||[],d=(null==(s=t.state.data)?void 0:s.pageParams)||[],f={pages:[],pageParams:[]},h=0,m=async()=>{let r=!1,n=eq(t.options,t.fetchOptions),i=async(e,i,a)=>{if(r)return Promise.reject();if(null==i&&e.pages.length)return Promise.resolve(e);let o=(()=>{let e={client:t.client,queryKey:t.queryKey,pageParam:i,direction:a?"backward":"forward",meta:t.options.meta};return Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(t.signal.aborted?r=!0:t.signal.addEventListener("abort",()=>{r=!0}),t.signal)}),e})(),s=await n(o),{maxPages:l}=t.options,u=a?eV:eW;return{pages:u(e.pages,s,l),pageParams:u(e.pageParams,i,l)}};if(u&&c.length){let e="backward"===u,t={pages:c,pageParams:d},r=(e?function(e,t){var r;let{pages:n,pageParams:i}=t;return n.length>0?null==(r=e.getPreviousPageParam)?void 0:r.call(e,n[0],n,i[0],i):void 0}:nJ)(l,t);f=await i(t,r,e)}else{let t=null!=e?e:c.length;do{var a;let e=0===h?null!=(a=d[0])?a:l.initialPageParam:nJ(l,f);if(h>0&&null==e)break;f=await i(f,e),h++}while(h{var e,n;return null==(e=(n=t.options).persister)?void 0:e.call(n,m,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},r)}:t.fetchFn=m}}}function nJ(e,t){let{pages:r,pageParams:n}=t,i=r.length-1;return r.length>0?e.getNextPageParam(r[i],r,n[i],n):void 0}var nN=($=new WeakMap,ee=new WeakMap,et=new WeakMap,er=new WeakMap,en=new WeakMap,ei=new WeakMap,ea=new WeakMap,eo=new WeakMap,class{mount(){nP(this,ei).value++,1===eC(this,ei)&&(eM(this,ea,eY.subscribe(async e=>{e&&(await this.resumePausedMutations(),eC(this,$).onFocus())})),eM(this,eo,e$.subscribe(async e=>{e&&(await this.resumePausedMutations(),eC(this,$).onOnline())})))}unmount(){var e,t;nP(this,ei).value--,0===eC(this,ei)&&(null==(e=eC(this,ea))||e.call(this),eM(this,ea,void 0),null==(t=eC(this,eo))||t.call(this),eM(this,eo,void 0))}isFetching(e){return eC(this,$).findAll({...e,fetchStatus:"fetching"}).length}isMutating(e){return eC(this,ee).findAll({...e,status:"pending"}).length}getQueryData(e){var t;let r=this.defaultQueryOptions({queryKey:e});return null==(t=eC(this,$).get(r.queryHash))?void 0:t.state.data}ensureQueryData(e){let t=this.defaultQueryOptions(e),r=eC(this,$).build(this,t),n=r.state.data;return void 0===n?this.fetchQuery(e):(e.revalidateIfStale&&r.isStaleByTime(eG(t.staleTime,r))&&this.prefetchQuery(t),Promise.resolve(n))}getQueriesData(e){return eC(this,$).findAll(e).map(e=>{let{queryKey:t,state:r}=e;return[t,r.data]})}setQueryData(e,t,r){let n=this.defaultQueryOptions({queryKey:e}),i=eC(this,$).get(n.queryHash),a=null==i?void 0:i.state.data,o="function"==typeof t?t(a):t;if(void 0!==o)return eC(this,$).build(this,n).setData(o,{...r,manual:!0})}setQueriesData(e,t,r){return ez.batch(()=>eC(this,$).findAll(e).map(e=>{let{queryKey:n}=e;return[n,this.setQueryData(n,t,r)]}))}getQueryState(e){var t;let r=this.defaultQueryOptions({queryKey:e});return null==(t=eC(this,$).get(r.queryHash))?void 0:t.state}removeQueries(e){let t=eC(this,$);ez.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let r=eC(this,$);return ez.batch(()=>(r.findAll(e).forEach(e=>{e.reset()}),this.refetchQueries({type:"active",...e},t)))}cancelQueries(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r={revert:!0,...t};return Promise.all(ez.batch(()=>eC(this,$).findAll(e).map(e=>e.cancel(r)))).then(eR).catch(eR)}invalidateQueries(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return ez.batch(()=>{var r,n;return(eC(this,$).findAll(e).forEach(e=>{e.invalidate()}),(null==e?void 0:e.refetchType)==="none")?Promise.resolve():this.refetchQueries({...e,type:null!=(n=null!=(r=null==e?void 0:e.refetchType)?r:null==e?void 0:e.type)?n:"active"},t)})}refetchQueries(e){var t;let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n={...r,cancelRefetch:null==(t=r.cancelRefetch)||t};return Promise.all(ez.batch(()=>eC(this,$).findAll(e).filter(e=>!e.isDisabled()&&!e.isStatic()).map(e=>{let t=e.fetch(void 0,n);return n.throwOnError||(t=t.catch(eR)),"paused"===e.state.fetchStatus?Promise.resolve():t}))).then(eR)}fetchQuery(e){let t=this.defaultQueryOptions(e);void 0===t.retry&&(t.retry=!1);let r=eC(this,$).build(this,t);return r.isStaleByTime(eG(t.staleTime,r))?r.fetch(t):Promise.resolve(r.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(eR).catch(eR)}fetchInfiniteQuery(e){return e.behavior=nj(e.pages),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(eR).catch(eR)}ensureInfiniteQueryData(e){return e.behavior=nj(e.pages),this.ensureQueryData(e)}resumePausedMutations(){return e$.isOnline()?eC(this,ee).resumePausedMutations():Promise.resolve()}getQueryCache(){return eC(this,$)}getMutationCache(){return eC(this,ee)}getDefaultOptions(){return eC(this,et)}setDefaultOptions(e){eM(this,et,e)}setQueryDefaults(e,t){eC(this,er).set(ek(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...eC(this,er).values()],r={};return t.forEach(t=>{e_(e,t.queryKey)&&Object.assign(r,t.defaultOptions)}),r}setMutationDefaults(e,t){eC(this,en).set(ek(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...eC(this,en).values()],r={};return t.forEach(t=>{e_(e,t.mutationKey)&&Object.assign(r,t.defaultOptions)}),r}defaultQueryOptions(e){if(e._defaulted)return e;let t={...eC(this,et).queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||(t.queryHash=eO(t.queryKey,t)),void 0===t.refetchOnReconnect&&(t.refetchOnReconnect="always"!==t.networkMode),void 0===t.throwOnError&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode="offlineFirst"),t.queryFn===eX&&(t.enabled=!1),t}defaultMutationOptions(e){return(null==e?void 0:e._defaulted)?e:{...eC(this,et).mutations,...(null==e?void 0:e.mutationKey)&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){eC(this,$).clear(),eC(this,ee).clear()}constructor(e={}){eb(this,$,{writable:!0,value:void 0}),eb(this,ee,{writable:!0,value:void 0}),eb(this,et,{writable:!0,value:void 0}),eb(this,er,{writable:!0,value:void 0}),eb(this,en,{writable:!0,value:void 0}),eb(this,ei,{writable:!0,value:void 0}),eb(this,ea,{writable:!0,value:void 0}),eb(this,eo,{writable:!0,value:void 0}),eM(this,$,e.queryCache||new nH),eM(this,ee,e.mutationCache||new n_),eM(this,et,e.defaultOptions||{}),eM(this,er,new Map),eM(this,en,new Map),eM(this,ei,0)}}),nK=e.i(8155);let nQ=e=>e,nW=e=>{let t=(0,nK.createStore)(e),r=e=>(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:nQ,r=el.default.useSyncExternalStore(e.subscribe,el.default.useCallback(()=>t(e.getState()),[e,t]),el.default.useCallback(()=>t(e.getInitialState()),[e,t]));return el.default.useDebugValue(r),r})(t,e);return Object.assign(r,t),r},nV=el.createContext(null);function nX(e){let{map:t,children:r,onChange:n,domElement:i}=e,a=t.map(e=>e.name+e.keys).join("-"),o=el.useMemo(()=>{let e,r;return e=()=>t.reduce((e,t)=>({...e,[t.name]:!1}),{}),(r=(t,r,n)=>{let i=n.subscribe;return n.subscribe=(e,t,r)=>{let a=e;if(t){let i=(null==r?void 0:r.equalityFn)||Object.is,o=e(n.getState());a=r=>{let n=e(r);if(!i(o,n)){let e=o;t(o=n,e)}},(null==r?void 0:r.fireImmediately)&&t(o,o)}return i(a)},e(t,r,n)})?nW(r):nW},[a]),s=el.useMemo(()=>[o.subscribe,o.getState,o],[a]),l=o.setState;return el.useEffect(()=>{let e=t.map(e=>{let{name:t,keys:r,up:i}=e;return{keys:r,up:i,fn:e=>{l({[t]:e}),n&&n(t,e,s[1]())}}}).reduce((e,t)=>{let{keys:r,fn:n,up:i=!0}=t;return r.forEach(t=>e[t]={fn:n,pressed:!1,up:i}),e},{}),r=t=>{let{key:r,code:n}=t,i=e[r]||e[n];if(!i)return;let{fn:a,pressed:o,up:s}=i;i.pressed=!0,(s||!o)&&a(!0)},a=t=>{let{key:r,code:n}=t,i=e[r]||e[n];if(!i)return;let{fn:a,up:o}=i;i.pressed=!1,o&&a(!1)},o=i||window;return o.addEventListener("keydown",r,{passive:!0}),o.addEventListener("keyup",a,{passive:!0}),()=>{o.removeEventListener("keydown",r),o.removeEventListener("keyup",a)}},[i,a]),el.createElement(nV.Provider,{value:s,children:r})}var nq=Object.defineProperty;class nY{addEventListener(e,t){void 0===this._listeners&&(this._listeners={});let r=this._listeners;void 0===r[e]&&(r[e]=[]),-1===r[e].indexOf(t)&&r[e].push(t)}hasEventListener(e,t){if(void 0===this._listeners)return!1;let r=this._listeners;return void 0!==r[e]&&-1!==r[e].indexOf(t)}removeEventListener(e,t){if(void 0===this._listeners)return;let r=this._listeners[e];if(void 0!==r){let e=r.indexOf(t);-1!==e&&r.splice(e,1)}}dispatchEvent(e){if(void 0===this._listeners)return;let t=this._listeners[e.type];if(void 0!==t){e.target=this;let r=t.slice(0);for(let t=0,n=r.length;t((e,t,r)=>t in e?nq(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r)(e,"symbol"!=typeof t?t+"":t,r))(this,"_listeners")}}var nZ=Object.defineProperty,nz=(e,t,r)=>(((e,t,r)=>t in e?nZ(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r)(e,"symbol"!=typeof t?t+"":t,r),r);let n$=new ef.Euler(0,0,0,"YXZ"),n0=new ef.Vector3,n1={type:"change"},n9={type:"lock"},n2={type:"unlock"},n8=Math.PI/2;class n3 extends nY{constructor(e,t){super(),nz(this,"camera"),nz(this,"domElement"),nz(this,"isLocked"),nz(this,"minPolarAngle"),nz(this,"maxPolarAngle"),nz(this,"pointerSpeed"),nz(this,"onMouseMove",e=>{this.domElement&&!1!==this.isLocked&&(n$.setFromQuaternion(this.camera.quaternion),n$.y-=.002*e.movementX*this.pointerSpeed,n$.x-=.002*e.movementY*this.pointerSpeed,n$.x=Math.max(n8-this.maxPolarAngle,Math.min(n8-this.minPolarAngle,n$.x)),this.camera.quaternion.setFromEuler(n$),this.dispatchEvent(n1))}),nz(this,"onPointerlockChange",()=>{this.domElement&&(this.domElement.ownerDocument.pointerLockElement===this.domElement?(this.dispatchEvent(n9),this.isLocked=!0):(this.dispatchEvent(n2),this.isLocked=!1))}),nz(this,"onPointerlockError",()=>{console.error("THREE.PointerLockControls: Unable to use Pointer Lock API")}),nz(this,"connect",e=>{this.domElement=e||this.domElement,this.domElement&&(this.domElement.ownerDocument.addEventListener("mousemove",this.onMouseMove),this.domElement.ownerDocument.addEventListener("pointerlockchange",this.onPointerlockChange),this.domElement.ownerDocument.addEventListener("pointerlockerror",this.onPointerlockError))}),nz(this,"disconnect",()=>{this.domElement&&(this.domElement.ownerDocument.removeEventListener("mousemove",this.onMouseMove),this.domElement.ownerDocument.removeEventListener("pointerlockchange",this.onPointerlockChange),this.domElement.ownerDocument.removeEventListener("pointerlockerror",this.onPointerlockError))}),nz(this,"dispose",()=>{this.disconnect()}),nz(this,"getObject",()=>this.camera),nz(this,"direction",new ef.Vector3(0,0,-1)),nz(this,"getDirection",e=>e.copy(this.direction).applyQuaternion(this.camera.quaternion)),nz(this,"moveForward",e=>{n0.setFromMatrixColumn(this.camera.matrix,0),n0.crossVectors(this.camera.up,n0),this.camera.position.addScaledVector(n0,e)}),nz(this,"moveRight",e=>{n0.setFromMatrixColumn(this.camera.matrix,0),this.camera.position.addScaledVector(n0,e)}),nz(this,"lock",()=>{this.domElement&&this.domElement.requestPointerLock()}),nz(this,"unlock",()=>{this.domElement&&this.domElement.ownerDocument.exitPointerLock()}),this.camera=e,this.domElement=t,this.isLocked=!1,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.pointerSpeed=1,t&&this.connect(t)}}var n5=function(e){return e.forward="forward",e.backward="backward",e.left="left",e.right="right",e.up="up",e.down="down",e.camera1="camera1",e.camera2="camera2",e.camera3="camera3",e.camera4="camera4",e.camera5="camera5",e.camera6="camera6",e.camera7="camera7",e.camera8="camera8",e.camera9="camera9",e}(n5||{});function n6(){let{speedMultiplier:e,setSpeedMultiplier:t}=(0,tD.useControls)(),[r,n]=function(e){let[t,r,n]=el.useContext(nV);return[t,r]}(),{camera:i,gl:a}=(0,tx.useThree)(),{nextCamera:o,setCameraIndex:s,cameraCount:l}=nb(),u=(0,el.useRef)(null),c=(0,el.useRef)(new ef.Vector3),d=(0,el.useRef)(new ef.Vector3),f=(0,el.useRef)(new ef.Vector3);return(0,el.useEffect)(()=>{let e=new n3(i,a.domElement);u.current=e;let t=t=>{e.isLocked?o():t.target===a.domElement&&e.lock()};return document.addEventListener("click",t),()=>{document.removeEventListener("click",t),e.dispose()}},[i,a,o]),(0,el.useEffect)(()=>{let e=["camera1","camera2","camera3","camera4","camera5","camera6","camera7","camera8","camera9"];return r(t=>{for(let r=0;r{let e=e=>{e.preventDefault();let r=e.deltaY>0?-1:1,n=Math.max(.05,Math.min(.5,Math.abs(.01*e.deltaY)))*r;t(e=>Math.max(.1,Math.min(5,Math.round((e+n)*20)/20)))},r=a.domElement;return r.addEventListener("wheel",e,{passive:!1}),()=>{r.removeEventListener("wheel",e)}},[a]),(0,tE.useFrame)((t,r)=>{let{forward:a,backward:o,left:s,right:l,up:u,down:h}=n();(a||o||s||l||u||h)&&(i.getWorldDirection(c.current),c.current.normalize(),d.current.crossVectors(i.up,c.current).normalize(),f.current.set(0,0,0),a&&f.current.add(c.current),o&&f.current.sub(c.current),s&&f.current.add(d.current),l&&f.current.sub(d.current),u&&(f.current.y+=1),h&&(f.current.y-=1),f.current.lengthSq()>0&&(f.current.normalize().multiplyScalar(80*e*r),i.position.add(f.current)))}),null}let n4=[{name:"forward",keys:["KeyW"]},{name:"backward",keys:["KeyS"]},{name:"left",keys:["KeyA"]},{name:"right",keys:["KeyD"]},{name:"up",keys:["Space"]},{name:"down",keys:["ShiftLeft","ShiftRight"]},{name:"camera1",keys:["Digit1"]},{name:"camera2",keys:["Digit2"]},{name:"camera3",keys:["Digit3"]},{name:"camera4",keys:["Digit4"]},{name:"camera5",keys:["Digit5"]},{name:"camera6",keys:["Digit6"]},{name:"camera7",keys:["Digit7"]},{name:"camera8",keys:["Digit8"]},{name:"camera9",keys:["Digit9"]}];function n7(){return(0,el.useEffect)(()=>{let e=e=>{(e.metaKey||e.ctrlKey)&&"k"===e.key||e.metaKey&&e.stopImmediatePropagation()};return window.addEventListener("keydown",e,{capture:!0}),window.addEventListener("keyup",e,{capture:!0}),()=>{window.removeEventListener("keydown",e,{capture:!0}),window.removeEventListener("keyup",e,{capture:!0})}},[]),(0,es.jsx)(nX,{map:n4,children:(0,es.jsx)(n6,{})})}var ie=function(){var e;return"undefined"!=typeof window&&!!(null==(e=window.document)?void 0:e.createElement)}();function it(e){return e?"self"in e?e.document:e.ownerDocument||document:document}function ir(e){return e?"self"in e?e.self:it(e).defaultView||window:self}function ii(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],{activeElement:r}=it(e);if(!(null==r?void 0:r.nodeName))return null;if(io(r)&&r.contentDocument)return ii(r.contentDocument.body,t);if(t){let e=r.getAttribute("aria-activedescendant");if(e){let t=it(r).getElementById(e);if(t)return t}}return r}function ia(e,t){return e===t||e.contains(t)}function io(e){return"IFRAME"===e.tagName}function is(e){let t=e.tagName.toLowerCase();return"button"===t||"input"===t&&!!e.type&&-1!==il.indexOf(e.type)}var il=["button","color","file","image","reset","submit"];function iu(e){return"function"==typeof e.checkVisibility?e.checkVisibility():e.offsetWidth>0||e.offsetHeight>0||e.getClientRects().length>0}function ic(e){try{let t=e instanceof HTMLInputElement&&null!==e.selectionStart,r="TEXTAREA"===e.tagName;return t||r||!1}catch(e){return!1}}function id(e){return e.isContentEditable||ic(e)}function ih(e){let t=0,r=0;if(ic(e))t=e.selectionStart||0,r=e.selectionEnd||0;else if(e.isContentEditable){let n=it(e).getSelection();if((null==n?void 0:n.rangeCount)&&n.anchorNode&&ia(e,n.anchorNode)&&n.focusNode&&ia(e,n.focusNode)){let i=n.getRangeAt(0),a=i.cloneRange();a.selectNodeContents(e),a.setEnd(i.startContainer,i.startOffset),t=a.toString().length,a.setEnd(i.endContainer,i.endOffset),r=a.toString().length}}return{start:t,end:r}}function im(e,t){let r=null==e?void 0:e.getAttribute("role");return r&&-1!==["dialog","menu","listbox","tree","grid"].indexOf(r)?r:t}function ip(e){if(!e)return null;let t=e=>"auto"===e||"scroll"===e;if(e.clientHeight&&e.scrollHeight>e.clientHeight){let{overflowY:r}=getComputedStyle(e);if(t(r))return e}else if(e.clientWidth&&e.scrollWidth>e.clientWidth){let{overflowX:r}=getComputedStyle(e);if(t(r))return e}return ip(e.parentElement)||document.scrollingElement||document.body}function iA(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;n1?t-1:0),n=1;n{if(n){let t=setTimeout(e,n);return()=>clearTimeout(t)}let t=requestAnimationFrame(e);return()=>cancelAnimationFrame(t)})(()=>{e.removeEventListener(t,a,!0),r()}),a=()=>{i(),r()};return e.addEventListener(t,a,{once:!0,capture:!0}),i}function i_(e,t,r){let n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:window,i=[];try{for(let a of(n.document.addEventListener(e,t,r),Array.from(n.frames)))i.push(i_(e,t,r,a))}catch(e){}return()=>{try{n.document.removeEventListener(e,t,r)}catch(e){}for(let e of i)e()}}var iU={...el},ij=iU.useId;iU.useDeferredValue;var iJ=iU.useInsertionEffect,iN=ie?el.useLayoutEffect:el.useEffect;function iK(e){let t=(0,el.useRef)(()=>{throw Error("Cannot call an event handler while rendering.")});return iJ?iJ(()=>{t.current=e}):t.current=e,(0,el.useCallback)(function(){for(var e,r=arguments.length,n=Array(r),i=0;i{if(t.some(Boolean))return e=>{for(let r of t)iw(r,e)}},t)}function iW(e){if(ij){let t=ij();return e||t}let[t,r]=(0,el.useState)(e);return iN(()=>{if(e||t)return;let n=Math.random().toString(36).slice(2,8);r("id-".concat(n))},[e,t]),e||t}function iV(e,t){let r=(0,el.useRef)(!1);(0,el.useEffect)(()=>{if(r.current)return e();r.current=!0},t),(0,el.useEffect)(()=>()=>{r.current=!1},[])}function iX(){return(0,el.useReducer)(()=>[],[])}function iq(e){return iK("function"==typeof e?e:()=>e)}function iY(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],n=(0,el.useCallback)(r=>(e.wrapElement&&(r=e.wrapElement(r)),t(r)),[...r,e.wrapElement]);return{...e,wrapElement:n}}function iZ(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1?arguments[1]:void 0,[r,n]=(0,el.useState)(null);return{portalRef:iQ(n,t),portalNode:r,domReady:!e||r}}var iz=!1,i$=!1,i0=0,i1=0;function i9(e){(function(e){let t=e.movementX||e.screenX-i0,r=e.movementY||e.screenY-i1;return i0=e.screenX,i1=e.screenY,t||r||!1})(e)&&(i$=!0)}function i2(){i$=!1}function i8(e){let t=el.forwardRef((t,r)=>e({...t,ref:r}));return t.displayName=e.displayName||e.name,t}function i3(e,t){return el.memo(e,t)}function i5(e,t){let r,{wrapElement:n,render:i,...a}=t,o=iQ(t.ref,i&&(0,el.isValidElement)(i)&&("ref"in i.props||"ref"in i)?({...i.props}).ref||i.ref:null);if(el.isValidElement(i)){let e={...i.props,ref:o};r=el.cloneElement(i,function(e,t){let r={...e};for(let n in t){if(!iy(t,n))continue;if("className"===n){let n="className";r[n]=e[n]?"".concat(e[n]," ").concat(t[n]):t[n];continue}if("style"===n){let n="style";r[n]=e[n]?{...e[n],...t[n]}:t[n];continue}let i=t[n];if("function"==typeof i&&n.startsWith("on")){let t=e[n];if("function"==typeof t){r[n]=function(){for(var e=arguments.length,r=Array(e),n=0;n0&&void 0!==arguments[0]?arguments[0]:{};return e(t)};return t.displayName=e.name,t}function i4(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=el.createContext(void 0),n=el.createContext(void 0),i=()=>el.useContext(r),a=t=>e.reduceRight((e,r)=>(0,es.jsx)(r,{...t,children:e}),(0,es.jsx)(r.Provider,{...t}));return{context:r,scopedContext:n,useContext:i,useScopedContext:function(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=el.useContext(n),r=i();return e?t:t||r},useProviderContext:()=>{let e=el.useContext(n),t=i();if(!e||e!==t)return t},ContextProvider:a,ScopedContextProvider:e=>(0,es.jsx)(a,{...e,children:t.reduceRight((t,r)=>(0,es.jsx)(r,{...e,children:t}),(0,es.jsx)(n.Provider,{...e}))})}}var i7=i4(),ae=i7.useContext;i7.useScopedContext,i7.useProviderContext;var at=i4([i7.ContextProvider],[i7.ScopedContextProvider]),ar=at.useContext;at.useScopedContext;var an=at.useProviderContext,ai=at.ContextProvider,aa=at.ScopedContextProvider,ao=(0,el.createContext)(void 0),as=(0,el.createContext)(void 0),al=(0,el.createContext)(!0),au="input:not([type='hidden']):not([disabled]), select:not([disabled]), textarea:not([disabled]), a[href], button:not([disabled]), [tabindex], summary, iframe, object, embed, area[href], audio[controls], video[controls], [contenteditable]:not([contenteditable='false'])";function ac(e){return!(!e.matches(au)||!iu(e)||e.closest("[inert]"))}function ad(e){if(!ac(e)||0>Number.parseInt(e.getAttribute("tabindex")||"0",10))return!1;if(!("form"in e)||!e.form||e.checked||"radio"!==e.type)return!0;let t=e.form.elements.namedItem(e.name);if(!t||!("length"in t))return!0;let r=ii(e);return!r||r===e||!("form"in r)||r.form!==e.form||r.name!==e.name}function af(e,t){let r=Array.from(e.querySelectorAll(au));t&&r.unshift(e);let n=r.filter(ac);return n.forEach((e,t)=>{if(io(e)&&e.contentDocument){let r=e.contentDocument.body;n.splice(t,1,...af(r))}}),n}function ah(e,t,r){let n=Array.from(e.querySelectorAll(au)),i=n.filter(ad);return(t&&ad(e)&&i.unshift(e),i.forEach((e,t)=>{if(io(e)&&e.contentDocument){let n=ah(e.contentDocument.body,!1,r);i.splice(t,1,...n)}}),!i.length&&r)?n:i}function am(e,t){return function(e,t,r,n){let i=ii(e),a=af(e,t),o=a.indexOf(i),s=a.slice(o+1);return s.find(ad)||(r?a.find(ad):null)||(n?s[0]:null)||null}(document.body,!1,e,t)}function ap(e,t){return function(e,t,r,n){let i=ii(e),a=af(e,t).reverse(),o=a.indexOf(i),s=a.slice(o+1);return s.find(ad)||(r?a.find(ad):null)||(n?s[0]:null)||null}(document.body,!1,e,t)}function aA(e){let t=ii(e);if(!t)return!1;if(t===e)return!0;let r=t.getAttribute("aria-activedescendant");return!!r&&r===e.id}function ag(e){let t=ii(e);if(!t)return!1;if(ia(e,t))return!0;let r=t.getAttribute("aria-activedescendant");return!!r&&"id"in e&&(r===e.id||!!e.querySelector("#".concat(CSS.escape(r))))}function av(e){!ag(e)&&ac(e)&&e.focus()}var aB=iD(),aC=["text","search","url","tel","email","password","number","date","month","week","time","datetime","datetime-local"],ay=Symbol("safariFocusAncestor");function ab(e){return"input"===e.tagName.toLowerCase()&&!!e.type&&("radio"===e.type||"checkbox"===e.type)}function aM(e,t){return iK(r=>{null==e||e(r),!r.defaultPrevented&&t&&(r.stopPropagation(),r.preventDefault())})}var aE=!1,ax=!0;function aF(e){let t=e.target;t&&"hasAttribute"in t&&!t.hasAttribute("data-focus-visible")&&(ax=!1)}function aS(e){e.metaKey||e.ctrlKey||e.altKey||(ax=!0)}var aT=i6(function(e){var t,r,n,i,a;let{focusable:o=!0,accessibleWhenDisabled:s,autoFocus:l,onFocusVisible:u,...c}=e,d=(0,el.useRef)(null);(0,el.useEffect)(()=>{o&&(aE||(i_("mousedown",aF,!0),i_("keydown",aS,!0),aE=!0))},[o]),aB&&(0,el.useEffect)(()=>{if(!o)return;let e=d.current;if(!e||!ab(e))return;let t="labels"in e?e.labels:null;if(!t)return;let r=()=>queueMicrotask(()=>e.focus());for(let e of t)e.addEventListener("mouseup",r);return()=>{for(let e of t)e.removeEventListener("mouseup",r)}},[o]);let f=o&&iF(c),h=!!f&&!s,[m,p]=(0,el.useState)(!1);(0,el.useEffect)(()=>{o&&h&&m&&p(!1)},[o,h,m]),(0,el.useEffect)(()=>{if(!o||!m)return;let e=d.current;if(!e||"undefined"==typeof IntersectionObserver)return;let t=new IntersectionObserver(()=>{ac(e)||p(!1)});return t.observe(e),()=>t.disconnect()},[o,m]);let A=aM(c.onKeyPressCapture,f),g=aM(c.onMouseDownCapture,f),B=aM(c.onClickCapture,f),C=c.onMouseDown,y=iK(e=>{if(null==C||C(e),e.defaultPrevented||!o)return;let t=e.currentTarget;if(!aB||iG(e)||!is(t)&&!ab(t))return;let r=!1,n=()=>{r=!0};t.addEventListener("focusin",n,{capture:!0,once:!0});let i=function(e){for(;e&&!ac(e);)e=e.closest(au);return e||null}(t.parentElement);i&&(i[ay]=!0),ik(t,"mouseup",()=>{t.removeEventListener("focusin",n,!0),i&&(i[ay]=!1),r||av(t)})}),b=(e,t)=>{if(t&&(e.currentTarget=t),!o)return;let r=e.currentTarget;r&&aA(r)&&(null==u||u(e),e.defaultPrevented||(r.dataset.focusVisible="true",p(!0)))},M=c.onKeyDownCapture,E=iK(e=>{if(null==M||M(e),e.defaultPrevented||!o||m||e.metaKey||e.altKey||e.ctrlKey||!iL(e))return;let t=e.currentTarget;ik(t,"focusout",()=>b(e,t))}),x=c.onFocusCapture,F=iK(e=>{if(null==x||x(e),e.defaultPrevented||!o)return;if(!iL(e))return void p(!1);let t=e.currentTarget;ax||function(e){let{tagName:t,readOnly:r,type:n}=e;return"TEXTAREA"===t&&!r||"SELECT"===t&&!r||("INPUT"!==t||r?!!e.isContentEditable||"combobox"===e.getAttribute("role")&&!!e.dataset.name:aC.includes(n))}(e.target)?ik(e.target,"focusout",()=>b(e,t)):p(!1)}),S=c.onBlur,T=iK(e=>{null==S||S(e),o&&iO(e)&&(e.currentTarget.removeAttribute("data-focus-visible"),p(!1))}),w=(0,el.useContext)(al),R=iK(e=>{o&&l&&e&&w&&queueMicrotask(()=>{!aA(e)&&ac(e)&&e.focus()})}),I=function(e,t){let r=e=>{if("string"==typeof e)return e},[n,i]=(0,el.useState)(()=>r(void 0));return iN(()=>{let t=e&&"current"in e?e.current:e;i((null==t?void 0:t.tagName.toLowerCase())||r(void 0))},[e,t]),n}(d),D=o&&(!I||"button"===I||"summary"===I||"input"===I||"select"===I||"textarea"===I||"a"===I),G=o&&(!I||"button"===I||"input"===I||"select"===I||"textarea"===I),L=c.style,P=(0,el.useMemo)(()=>h?{pointerEvents:"none",...L}:L,[h,L]);return c={"data-focus-visible":o&&m||void 0,"data-autofocus":l||void 0,"aria-disabled":f||void 0,...c,ref:iQ(d,R,c.ref),style:P,tabIndex:(t=o,r=h,n=D,i=G,a=c.tabIndex,t?r?n&&!i?-1:void 0:n?a:a||0:a),disabled:!!G&&!!h||void 0,contentEditable:f?void 0:c.contentEditable,onKeyPressCapture:A,onClickCapture:B,onMouseDownCapture:g,onMouseDown:y,onKeyDownCapture:E,onFocusCapture:F,onBlur:T},iS(c)});function aw(e){let t=[];for(let r of e)t.push(...r);return t}function aR(e){return e.slice().reverse()}function aI(e,t,r){return iK(n=>{var i;if(null==t||t(n),n.defaultPrevented||n.isPropagationStopped()||!iL(n)||"Shift"===n.key||"Control"===n.key||"Alt"===n.key||"Meta"===n.key||function(e){let t=e.target;return(!t||!!ic(t))&&1===e.key.length&&!e.ctrlKey&&!e.metaKey}(n))return;let a=e.getState(),o=null==(i=ig(e,a.activeId))?void 0:i.element;if(!o)return;let{view:s,...l}=n;o!==(null==r?void 0:r.current)&&o.focus(),!function(e,t,r){let n=new KeyboardEvent(t,r);return e.dispatchEvent(n)}(o,n.type,l)&&n.preventDefault(),n.currentTarget.contains(o)&&n.stopPropagation()})}i8(function(e){return i5("div",aT(e))});var aD=i6(function(e){let{store:t,composite:r=!0,focusOnMove:n=r,moveOnKeyPress:i=!0,...a}=e,o=an();iE(t=t||o,!1);let s=(0,el.useRef)(null),l=(0,el.useRef)(null),u=function(e){let[t,r]=(0,el.useState)(!1),n=(0,el.useCallback)(()=>r(!0),[]),i=e.useState(t=>ig(e,t.activeId));return(0,el.useEffect)(()=>{let e=null==i?void 0:i.element;t&&e&&(r(!1),e.focus({preventScroll:!0}))},[i,t]),n}(t),c=t.useState("moves"),[,d]=function(e){let[t,r]=(0,el.useState)(null);return iN(()=>{if(null==t||!e)return;let r=null;return e(e=>(r=e,t)),()=>{e(r)}},[t,e]),[t,r]}(r?t.setBaseElement:null);(0,el.useEffect)(()=>{var e;if(!t||!c||!r||!n)return;let{activeId:i}=t.getState(),a=null==(e=ig(t,i))?void 0:e.element;a&&("scrollIntoView"in a?(a.focus({preventScroll:!0}),a.scrollIntoView({block:"nearest",inline:"nearest",...void 0})):a.focus())},[t,c,r,n]),iN(()=>{if(!t||!c||!r)return;let{baseElement:e,activeId:n}=t.getState();if(null!==n||!e)return;let i=l.current;l.current=null,i&&iP(i,{relatedTarget:e}),aA(e)||e.focus()},[t,c,r]);let f=t.useState("activeId"),h=t.useState("virtualFocus");iN(()=>{var e;if(!t||!r||!h)return;let n=l.current;if(l.current=null,!n)return;let i=(null==(e=ig(t,f))?void 0:e.element)||ii(n);i!==n&&iP(n,{relatedTarget:i})},[t,f,h,r]);let m=aI(t,a.onKeyDownCapture,l),p=aI(t,a.onKeyUpCapture,l),A=a.onFocusCapture,g=iK(e=>{if(null==A||A(e),e.defaultPrevented||!t)return;let{virtualFocus:r}=t.getState();if(!r)return;let n=e.relatedTarget,i=function(e){let t=e[iv];return delete e[iv],t}(e.currentTarget);iL(e)&&i&&(e.stopPropagation(),l.current=n)}),B=a.onFocus,C=iK(e=>{if(null==B||B(e),e.defaultPrevented||!r||!t)return;let{relatedTarget:n}=e,{virtualFocus:i}=t.getState();i?iL(e)&&!iB(t,n)&&queueMicrotask(u):iL(e)&&t.setActiveId(null)}),y=a.onBlurCapture,b=iK(e=>{var r;if(null==y||y(e),e.defaultPrevented||!t)return;let{virtualFocus:n,activeId:i}=t.getState();if(!n)return;let a=null==(r=ig(t,i))?void 0:r.element,o=e.relatedTarget,s=iB(t,o),u=l.current;l.current=null,iL(e)&&s?(o===a?u&&u!==o&&iP(u,e):a?iP(a,e):u&&iP(u,e),e.stopPropagation()):!iB(t,e.target)&&a&&iP(a,e)}),M=a.onKeyDown,E=iq(i),x=iK(e=>{var r;if(null==M||M(e),e.nativeEvent.isComposing||e.defaultPrevented||!t||!iL(e))return;let{orientation:n,renderedItems:i,activeId:a}=t.getState(),o=ig(t,a);if(null==(r=null==o?void 0:o.element)?void 0:r.isConnected)return;let s="horizontal"!==n,l="vertical"!==n,u=i.some(e=>!!e.rowId);if(("ArrowLeft"===e.key||"ArrowRight"===e.key||"Home"===e.key||"End"===e.key)&&ic(e.currentTarget))return;let c={ArrowUp:(u||s)&&(()=>{if(u){let e=aw(aR(function(e){let t=[];for(let r of e){let e=t.find(e=>{var t;return(null==(t=e[0])?void 0:t.rowId)===r.rowId});e?e.push(r):t.push([r])}return t}(i))).find(e=>!e.disabled);return null==e?void 0:e.id}return null==t?void 0:t.last()}),ArrowRight:(u||l)&&t.first,ArrowDown:(u||s)&&t.first,ArrowLeft:(u||l)&&t.last,Home:t.first,End:t.last,PageUp:t.first,PageDown:t.last}[e.key];if(c){let r=c();if(void 0!==r){if(!E(e))return;e.preventDefault(),t.move(r)}}});return a=iY(a,e=>(0,es.jsx)(ai,{value:t,children:e}),[t]),a={"aria-activedescendant":t.useState(e=>{var n;if(t&&r&&e.virtualFocus)return null==(n=ig(t,e.activeId))?void 0:n.id}),...a,ref:iQ(s,d,a.ref),onKeyDownCapture:m,onKeyUpCapture:p,onFocusCapture:g,onFocus:C,onBlurCapture:b,onKeyDown:x},a=aT({focusable:t.useState(e=>r&&(e.virtualFocus||null===e.activeId)),...a})});i8(function(e){return i5("div",aD(e))});var aG=i4();aG.useContext,aG.useScopedContext;var aL=aG.useProviderContext,aP=i4([aG.ContextProvider],[aG.ScopedContextProvider]);aP.useContext,aP.useScopedContext;var aH=aP.useProviderContext,aO=aP.ContextProvider,ak=aP.ScopedContextProvider,a_=(0,el.createContext)(void 0),aU=(0,el.createContext)(void 0),aj=i4([aO],[ak]);aj.useContext,aj.useScopedContext;var aJ=aj.useProviderContext,aN=aj.ContextProvider,aK=aj.ScopedContextProvider,aQ=i6(function(e){let{store:t,...r}=e,n=aJ();return t=t||n,r={...r,ref:iQ(null==t?void 0:t.setAnchorElement,r.ref)}});i8(function(e){return i5("div",aQ(e))});var aW=(0,el.createContext)(void 0),aV=i4([aN,ai],[aK,aa]),aX=aV.useContext,aq=aV.useScopedContext,aY=aV.useProviderContext,aZ=aV.ContextProvider,az=aV.ScopedContextProvider,a$=(0,el.createContext)(void 0),a0=(0,el.createContext)(!1);function a1(e,t){let r=e.__unstableInternals;return iE(r,"Invalid store"),r[t]}function a9(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;n2&&void 0!==arguments[2]?arguments[2]:d;return r.add(t),m.set(t,e),()=>{var e;null==(e=h.get(t))||e(),h.delete(t),m.delete(t),r.delete(t)}},A=function(e,t){var n,s;let l=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(!iy(i,e))return;let c=(s=i[e],"function"==typeof t?t("function"==typeof s?s():s):t);if(c===i[e])return;if(!l)for(let t of r)null==(n=null==t?void 0:t.setState)||n.call(t,e,c);let p=i;i={...i,[e]:c};let A=Symbol();o=A,u.add(e);let g=(t,r,n)=>{var a;let o=m.get(t);(!o||o.some(t=>n?n.has(t):t===e))&&(null==(a=h.get(t))||a(),h.set(t,t(i,r)))};for(let e of d)g(e,p);queueMicrotask(()=>{if(o!==A)return;let e=i;for(let e of f)g(e,a,u);a=e,u.clear()})},g={getState:()=>i,setState:A,__unstableInternals:{setup:e=>(c.add(e),()=>c.delete(e)),init:()=>{let e=l.size,t=Symbol();l.add(t);let n=()=>{l.delete(t),l.size||s()};if(e)return n;let a=Object.keys(i).map(e=>ib(...r.map(t=>{var r;let n=null==(r=null==t?void 0:t.getState)?void 0:r.call(t);if(n&&iy(n,e))return a5(t,[e],t=>{A(e,t[e],!0)})}))),o=[];for(let e of c)o.push(e());return s=ib(...a,...o,...r.map(a8)),n},subscribe:(e,t)=>p(e,t),sync:(e,t)=>(h.set(t,t(i,i)),p(e,t)),batch:(e,t)=>(h.set(t,t(i,a)),p(e,t,f)),pick:e=>a9(function(e,t){let r={};for(let n of t)iy(e,n)&&(r[n]=e[n]);return r}(i,e),g),omit:e=>a9(function(e,t){let r={...e};for(let e of t)iy(r,e)&&delete r[e];return r}(i,e),g)}};return g}function a2(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;n1?t-1:0),n=1;n1?t-1:0),n=1;n1?t-1:0),n=1;n1?t-1:0),n=1;n1?t-1:0),n=1;n!e.disabled&&e.value);return(null==n?void 0:n.value)===t}function or(e,t){return!!t&&null!=e&&(e=e.normalize("NFD").replace(/[\u0300-\u036f]/g,""),t.length>e.length&&0===t.toLowerCase().indexOf(e.toLowerCase()))}var on=i6(function(e){let{store:t,focusable:r=!0,autoSelect:n=!1,getAutoSelectId:i,setValueOnChange:a,showMinLength:o=0,showOnChange:s,showOnMouseDown:l,showOnClick:u=l,showOnKeyDown:c,showOnKeyPress:d=c,blurActiveItemOnClick:f,setValueOnClick:h=!0,moveOnKeyPress:m=!0,autoComplete:p="list",...A}=e,g=aY();iE(t=t||g,!1);let B=(0,el.useRef)(null),[C,y]=iX(),b=(0,el.useRef)(!1),M=(0,el.useRef)(!1),E=t.useState(e=>e.virtualFocus&&n),x="inline"===p||"both"===p,[F,S]=(0,el.useState)(x);!function(e,t){let r=(0,el.useRef)(!1);iN(()=>{if(r.current)return e();r.current=!0},t),iN(()=>()=>{r.current=!1},[])}(()=>{x&&S(!0)},[x]);let T=t.useState("value"),w=(0,el.useRef)();(0,el.useEffect)(()=>a5(t,["selectedValue","activeId"],(e,t)=>{w.current=t.selectedValue}),[]);let R=t.useState(e=>{var t;if(x&&F){if(e.activeValue&&Array.isArray(e.selectedValue)&&(e.selectedValue.includes(e.activeValue)||(null==(t=w.current)?void 0:t.includes(e.activeValue))))return;return e.activeValue}}),I=t.useState("renderedItems"),D=t.useState("open"),G=t.useState("contentElement"),L=(0,el.useMemo)(()=>{if(!x||!F)return T;if(ot(I,R,E)){if(or(T,R)){let e=(null==R?void 0:R.slice(T.length))||"";return T+e}return T}return R||T},[x,F,I,R,E,T]);(0,el.useEffect)(()=>{let e=B.current;if(!e)return;let t=()=>S(!0);return e.addEventListener("combobox-item-move",t),()=>{e.removeEventListener("combobox-item-move",t)}},[]),(0,el.useEffect)(()=>{if(!x||!F||!R||!ot(I,R,E)||!or(T,R))return;let e=iC;return queueMicrotask(()=>{let t=B.current;if(!t)return;let{start:r,end:n}=ih(t),i=T.length,a=R.length;iA(t,i,a),e=()=>{if(!aA(t))return;let{start:e,end:o}=ih(t);e===i&&o===a&&iA(t,r,n)}}),()=>e()},[C,x,F,R,I,E,T]);let P=(0,el.useRef)(null),H=iK(i),O=(0,el.useRef)(null);(0,el.useEffect)(()=>{if(!D||!G)return;let e=ip(G);if(!e)return;P.current=e;let r=()=>{b.current=!1},n=()=>{if(!t||!b.current)return;let{activeId:e}=t.getState();null!==e&&e!==O.current&&(b.current=!1)},i={passive:!0,capture:!0};return e.addEventListener("wheel",r,i),e.addEventListener("touchmove",r,i),e.addEventListener("scroll",n,i),()=>{e.removeEventListener("wheel",r,!0),e.removeEventListener("touchmove",r,!0),e.removeEventListener("scroll",n,!0)}},[D,G,t]),iN(()=>{T&&(M.current||(b.current=!0))},[T]),iN(()=>{"always"!==E&&D||(b.current=D)},[E,D]);let k=t.useState("resetValueOnSelect");iV(()=>{var e,r;let n=b.current;if(!t||!D||!n&&!k)return;let{baseElement:i,contentElement:a,activeId:o}=t.getState();if(!i||aA(i)){if(null==a?void 0:a.hasAttribute("data-placing")){let e=new MutationObserver(y);return e.observe(a,{attributeFilter:["data-placing"]}),()=>e.disconnect()}if(E&&n){let r=H(I),n=void 0!==r?r:null!=(e=function(e){let t=e.find(e=>{var t;return!e.disabled&&(null==(t=e.element)?void 0:t.getAttribute("role"))!=="tab"});return null==t?void 0:t.id}(I))?e:t.first();O.current=n,t.move(null!=n?n:null)}else{let e=null==(r=t.item(o||t.first()))?void 0:r.element;e&&"scrollIntoView"in e&&e.scrollIntoView({block:"nearest",inline:"nearest"})}}},[t,D,C,T,E,k,H,I]),(0,el.useEffect)(()=>{if(!x)return;let e=B.current;if(!e)return;let r=[e,G].filter(e=>!!e),n=e=>{r.every(t=>iO(e,t))&&(null==t||t.setValue(L))};for(let e of r)e.addEventListener("focusout",n);return()=>{for(let e of r)e.removeEventListener("focusout",n)}},[x,G,t,L]);let _=e=>e.currentTarget.value.length>=o,U=A.onChange,j=iq(null!=s?s:_),J=iq(null!=a?a:!t.tag),N=iK(e=>{if(null==U||U(e),e.defaultPrevented||!t)return;let r=e.currentTarget,{value:n,selectionStart:i,selectionEnd:a}=r,o=e.nativeEvent;if(b.current=!0,"input"===o.type&&(o.isComposing&&(b.current=!1,M.current=!0),x)){let e="insertText"===o.inputType||"insertCompositionText"===o.inputType,t=i===n.length;S(e&&t)}if(J(e)){let e=n===t.getState().value;t.setValue(n),queueMicrotask(()=>{iA(r,i,a)}),x&&E&&e&&y()}j(e)&&t.show(),E&&b.current||t.setActiveId(null)}),K=A.onCompositionEnd,Q=iK(e=>{b.current=!0,M.current=!1,null==K||K(e),!e.defaultPrevented&&E&&y()}),W=A.onMouseDown,V=iq(null!=f?f:()=>!!(null==t?void 0:t.getState().includesBaseElement)),X=iq(h),q=iq(null!=u?u:_),Y=iK(e=>{null==W||W(e),e.defaultPrevented||e.button||e.ctrlKey||t&&(V(e)&&t.setActiveId(null),X(e)&&t.setValue(L),q(e)&&ik(e.currentTarget,"mouseup",t.show))}),Z=A.onKeyDown,z=iq(null!=d?d:_),$=iK(e=>{if(null==Z||Z(e),e.repeat||(b.current=!1),e.defaultPrevented||e.ctrlKey||e.altKey||e.shiftKey||e.metaKey||!t)return;let{open:r}=t.getState();!r&&("ArrowUp"===e.key||"ArrowDown"===e.key)&&z(e)&&(e.preventDefault(),t.show())}),ee=A.onBlur,et=iK(e=>{if(b.current=!1,null==ee||ee(e),e.defaultPrevented)return}),er=iW(A.id),en=t.useState(e=>null===e.activeId);return A={id:er,role:"combobox","aria-autocomplete":"inline"===p||"list"===p||"both"===p||"none"===p?p:void 0,"aria-haspopup":im(G,"listbox"),"aria-expanded":D,"aria-controls":null==G?void 0:G.id,"data-active-item":en||void 0,value:L,...A,ref:iQ(B,A.ref),onChange:N,onCompositionEnd:Q,onMouseDown:Y,onKeyDown:$,onBlur:et},A=aD({store:t,focusable:r,...A,moveOnKeyPress:e=>!ix(m,e)&&(x&&S(!0),!0)}),{autoComplete:"off",...A=aQ({store:t,...A})}}),oi=i8(function(e){return i5("input",on(e))});function oa(e){let t=e.relatedTarget;return(null==t?void 0:t.nodeType)===Node.ELEMENT_NODE?t:null}var oo=Symbol("composite-hover"),os=i6(function(e){let{store:t,focusOnHover:r=!0,blurOnHoverEnd:n=!!r,...i}=e,a=ar();iE(t=t||a,!1);let o=((0,el.useEffect)(()=>{iz||(i_("mousemove",i9,!0),i_("mousedown",i2,!0),i_("mouseup",i2,!0),i_("keydown",i2,!0),i_("scroll",i2,!0),iz=!0)},[]),iK(()=>i$)),s=i.onMouseMove,l=iq(r),u=iK(e=>{if((null==s||s(e),!e.defaultPrevented&&o())&&l(e)){if(!ag(e.currentTarget)){let e=null==t?void 0:t.getState().baseElement;e&&!aA(e)&&e.focus()}null==t||t.setActiveId(e.currentTarget.id)}}),c=i.onMouseLeave,d=iq(n),f=iK(e=>{var r;null==c||c(e),!(e.defaultPrevented||!o()||function(e){let t=oa(e);return!!t&&ia(e.currentTarget,t)}(e)||function(e){let t=oa(e);if(!t)return!1;do{if(iy(t,oo)&&t[oo])return!0;t=t.parentElement}while(t)return!1}(e))&&l(e)&&d(e)&&(null==t||t.setActiveId(null),null==(r=null==t?void 0:t.getState().baseElement)||r.focus())}),h=(0,el.useCallback)(e=>{e&&(e[oo]=!0)},[]);return iS(i={...i,ref:iQ(h,i.ref),onMouseMove:u,onMouseLeave:f})});i3(i8(function(e){return i5("div",os(e))}));var ol=i6(function(e){let{store:t,shouldRegisterItem:r=!0,getItem:n=iM,element:i,...a}=e,o=ae();t=t||o;let s=iW(a.id),l=(0,el.useRef)(i);return(0,el.useEffect)(()=>{let e=l.current;if(!s||!e||!r)return;let i=n({id:s,element:e});return null==t?void 0:t.renderItem(i)},[s,r,n,t]),iS(a={...a,ref:iQ(l,a.ref)})});function ou(e){if(!e.isTrusted)return!1;let t=e.currentTarget;return"Enter"===e.key?is(t)||"SUMMARY"===t.tagName||"A"===t.tagName:" "===e.key&&(is(t)||"SUMMARY"===t.tagName||"INPUT"===t.tagName||"SELECT"===t.tagName)}i8(function(e){return i5("div",ol(e))});var oc=Symbol("command"),od=i6(function(e){let{clickOnEnter:t=!0,clickOnSpace:r=!0,...n}=e,i=(0,el.useRef)(null),[a,o]=(0,el.useState)(!1);(0,el.useEffect)(()=>{i.current&&o(is(i.current))},[]);let[s,l]=(0,el.useState)(!1),u=(0,el.useRef)(!1),c=iF(n),[d,f]=function(e,t,r){let n=e.onLoadedMetadataCapture,i=(0,el.useMemo)(()=>Object.assign(()=>{},{...n,[t]:r}),[n,t,r]);return[null==n?void 0:n[t],{onLoadedMetadataCapture:i}]}(n,oc,!0),h=n.onKeyDown,m=iK(e=>{null==h||h(e);let n=e.currentTarget;if(e.defaultPrevented||d||c||!iL(e)||ic(n)||n.isContentEditable)return;let i=t&&"Enter"===e.key,a=r&&" "===e.key,o="Enter"===e.key&&!t,s=" "===e.key&&!r;if(o||s)return void e.preventDefault();if(i||a){let t=ou(e);if(i){if(!t){e.preventDefault();let{view:t,...r}=e,i=()=>iH(n,r);ie&&/firefox\//i.test(navigator.userAgent)?ik(n,"keyup",i):queueMicrotask(i)}}else a&&(u.current=!0,t||(e.preventDefault(),l(!0)))}}),p=n.onKeyUp,A=iK(e=>{if(null==p||p(e),e.defaultPrevented||d||c||e.metaKey)return;let t=r&&" "===e.key;if(u.current&&t&&(u.current=!1,!ou(e))){e.preventDefault(),l(!1);let t=e.currentTarget,{view:r,...n}=e;queueMicrotask(()=>iH(t,n))}});return aT(n={"data-active":s||void 0,type:a?"button":void 0,...f,...n,ref:iQ(i,n.ref),onKeyDown:m,onKeyUp:A})});i8(function(e){return i5("button",od(e))});var{useSyncExternalStore:of}=e.i(2239).default,oh=()=>()=>{};function om(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:iM,r=el.useCallback(t=>e?a3(e,null,t):oh(),[e]),n=()=>{let r="string"==typeof t?t:null,n="function"==typeof t?t:null,i=null==e?void 0:e.getState();return n?n(i):i&&r&&iy(i,r)?i[r]:void 0};return of(r,n,n)}function op(e,t){let r=el.useRef({}),n=el.useCallback(t=>e?a3(e,null,t):oh(),[e]),i=()=>{let n=null==e?void 0:e.getState(),i=!1,a=r.current;for(let e in t){let r=t[e];if("function"==typeof r){let t=r(n);t!==a[e]&&(a[e]=t,i=!0)}if("string"==typeof r){if(!n||!iy(n,r))continue;let t=n[r];t!==a[e]&&(a[e]=t,i=!0)}}return i&&(r.current={...a}),r.current};return of(n,i,i)}function oA(e,t,r,n){let i=iy(t,r)?t[r]:void 0,a=function(e){let t=(0,el.useRef)(e);return iN(()=>{t.current=e}),t}({value:i,setValue:n?t[n]:void 0});iN(()=>a5(e,[r],(e,t)=>{let{value:n,setValue:i}=a.current;i&&e[r]!==t[r]&&e[r]!==n&&i(e[r])}),[e,r]),iN(()=>{if(void 0!==i)return e.setState(r,i),a6(e,[r],()=>{void 0!==i&&e.setState(r,i)})})}function og(e,t){let[r,n]=el.useState(()=>e(t));iN(()=>a8(r),[r]);let i=el.useCallback(e=>om(r,e),[r]);return[el.useMemo(()=>({...r,useState:i}),[r,i]),iK(()=>{n(r=>e({...t,...r.getState()}))})]}function ov(e,t,r){var n;let i,a,o=arguments.length>3&&void 0!==arguments[3]&&arguments[3];if(!t||!r)return;let{renderedItems:s}=t.getState(),l=ip(e);if(!l)return;let u=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=e.clientHeight,{top:n}=e.getBoundingClientRect(),i=1.5*Math.max(.875*r,r-40),a=t?r-i+n:i+n;return"HTML"===e.tagName?a+e.scrollTop:a}(l,o);for(let e=0;e1&&void 0!==arguments[1]&&arguments[1],{top:r}=e.getBoundingClientRect();return t?r+e.clientHeight:r}(l,o)-u,d=Math.abs(c);if(o&&c<=0||!o&&c>=0){void 0!==a&&ar||(e&&(null==h?void 0:h.baseElement)&&h.baseElement===e.baseElement?h.id:void 0),baseElement:e=>(null==e?void 0:e.baseElement)||void 0,isActiveItem:e=>!!e&&e.activeId===d,ariaSetSize:e=>null!=s?s:e&&(null==h?void 0:h.ariaSetSize)&&h.baseElement===e.baseElement?h.ariaSetSize:void 0,ariaPosInSet(e){if(null!=l)return l;if(!e||!(null==h?void 0:h.ariaPosInSet)||h.baseElement!==e.baseElement)return;let t=e.renderedItems.filter(e=>e.rowId===p);return h.ariaPosInSet+t.findIndex(e=>e.id===d)},isTabbable(e){if(!(null==e?void 0:e.renderedItems.length))return!0;if(e.virtualFocus)return!1;if(a)return!0;if(null===e.activeId)return!1;let r=null==t?void 0:t.item(e.activeId);return null!=r&&!!r.disabled||null==r||!r.element||e.activeId===d}}),b=(0,el.useCallback)(e=>{var t;let r={...e,id:d||e.id,rowId:p,disabled:!!m,children:null==(t=e.element)?void 0:t.textContent};return o?o(r):r},[d,p,m,o]),M=u.onFocus,E=(0,el.useRef)(!1),x=iK(e=>{var r,n;if(null==M||M(e),e.defaultPrevented||iG(e)||!d||!t||(r=t,!iL(e)&&iB(r,e.target)))return;let{virtualFocus:i,baseElement:a}=t.getState();if(t.setActiveId(d),id(e.currentTarget)&&function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(ic(e))e.setSelectionRange(t?e.value.length:0,e.value.length);else if(e.isContentEditable){let r=it(e).getSelection();null==r||r.selectAllChildren(e),t&&(null==r||r.collapseToEnd())}}(e.currentTarget),i&&iL(e))!id(n=e.currentTarget)&&("INPUT"!==n.tagName||is(n))&&(null==a?void 0:a.isConnected)&&((iD()&&e.currentTarget.hasAttribute("data-autofocus")&&e.currentTarget.scrollIntoView({block:"nearest",inline:"nearest"}),E.current=!0,e.relatedTarget===a||iB(t,e.relatedTarget))?(a[iv]=!0,a.focus({preventScroll:!0})):a.focus())}),F=u.onBlurCapture,S=iK(e=>{if(null==F||F(e),e.defaultPrevented)return;let r=null==t?void 0:t.getState();(null==r?void 0:r.virtualFocus)&&E.current&&(E.current=!1,e.preventDefault(),e.stopPropagation())}),T=u.onKeyDown,w=iq(n),R=iq(i),I=iK(e=>{if(null==T||T(e),e.defaultPrevented||!iL(e)||!t)return;let{currentTarget:r}=e,n=t.getState(),i=t.item(d),a=!!(null==i?void 0:i.rowId),o="horizontal"!==n.orientation,s="vertical"!==n.orientation,l=()=>!(!a&&!s&&n.baseElement&&ic(n.baseElement)),u={ArrowUp:(a||o)&&t.up,ArrowRight:(a||s)&&t.next,ArrowDown:(a||o)&&t.down,ArrowLeft:(a||s)&&t.previous,Home:()=>{if(l())return!a||e.ctrlKey?null==t?void 0:t.first():null==t?void 0:t.previous(-1)},End:()=>{if(l())return!a||e.ctrlKey?null==t?void 0:t.last():null==t?void 0:t.next(-1)},PageUp:()=>ov(r,t,null==t?void 0:t.up,!0),PageDown:()=>ov(r,t,null==t?void 0:t.down)}[e.key];if(u){if(id(r)){let t=ih(r),n=s&&"ArrowLeft"===e.key,i=s&&"ArrowRight"===e.key,a=o&&"ArrowUp"===e.key,l=o&&"ArrowDown"===e.key;if(i||l){let{length:e}=function(e){if(ic(e))return e.value;if(e.isContentEditable){let t=it(e).createRange();return t.selectNodeContents(e),t.toString()}return""}(r);if(t.end!==e)return}else if((n||a)&&0!==t.start)return}let n=u();if(w(e)||void 0!==n){if(!R(e))return;e.preventDefault(),t.move(n)}}}),D=(0,el.useMemo)(()=>({id:d,baseElement:A}),[d,A]);return u={id:d,"data-active-item":g||void 0,...u=iY(u,e=>(0,es.jsx)(ao.Provider,{value:D,children:e}),[D]),ref:iQ(f,u.ref),tabIndex:y?u.tabIndex:-1,onFocus:x,onBlurCapture:S,onKeyDown:I},u=od(u),iS({...u=ol({store:t,...u,getItem:b,shouldRegisterItem:!!d&&u.shouldRegisterItem}),"aria-setsize":B,"aria-posinset":C})});i3(i8(function(e){return i5("button",oB(e))}));var oC=i6(function(e){var t,r;let{store:n,value:i,hideOnClick:a,setValueOnClick:o,selectValueOnClick:s=!0,resetValueOnSelect:l,focusOnHover:u=!1,moveOnKeyPress:c=!0,getItem:d,...f}=e,h=aq();iE(n=n||h,!1);let{resetValueOnSelectState:m,multiSelectable:p,selected:A}=op(n,{resetValueOnSelectState:"resetValueOnSelect",multiSelectable:e=>Array.isArray(e.selectedValue),selected:e=>(function(e,t){if(null!=t)return null!=e&&(Array.isArray(e)?e.includes(t):e===t)})(e.selectedValue,i)}),g=(0,el.useCallback)(e=>{let t={...e,value:i};return d?d(t):t},[i,d]);o=null!=o?o:!p,a=null!=a?a:null!=i&&!p;let B=f.onClick,C=iq(o),y=iq(s),b=iq(null!=(t=null!=l?l:m)?t:p),M=iq(a),E=iK(e=>{null==B||B(e),!(e.defaultPrevented||function(e){let t=e.currentTarget;if(!t)return!1;let r=t.tagName.toLowerCase();return!!e.altKey&&("a"===r||"button"===r&&"submit"===t.type||"input"===r&&"submit"===t.type)}(e))&&!function(e){let t=e.currentTarget;if(!t)return!1;let r=iI();if(r&&!e.metaKey||!r&&!e.ctrlKey)return!1;let n=t.tagName.toLowerCase();return"a"===n||"button"===n&&"submit"===t.type||"input"===n&&"submit"===t.type}(e)&&(null!=i&&(y(e)&&(b(e)&&(null==n||n.resetValue()),null==n||n.setSelectedValue(e=>Array.isArray(e)?e.includes(i)?e.filter(e=>e!==i):[...e,i]:i)),C(e)&&(null==n||n.setValue(i))),M(e)&&(null==n||n.hide()))}),x=f.onKeyDown,F=iK(e=>{if(null==x||x(e),e.defaultPrevented)return;let t=null==n?void 0:n.getState().baseElement;!(!t||aA(t))&&(1===e.key.length||"Backspace"===e.key||"Delete"===e.key)&&(queueMicrotask(()=>t.focus()),ic(t)&&(null==n||n.setValue(t.value)))});p&&null!=A&&(f={"aria-selected":A,...f}),f=iY(f,e=>(0,es.jsx)(a$.Provider,{value:i,children:(0,es.jsx)(a0.Provider,{value:null!=A&&A,children:e})}),[i,A]),f={role:null!=(r=({menu:"menuitem",listbox:"option",tree:"treeitem"})[(0,el.useContext)(aW)])?r:"option",children:i,...f,onClick:E,onKeyDown:F};let S=iq(c);return f=oB({store:n,...f,getItem:g,moveOnKeyPress:e=>{if(!S(e))return!1;let t=new Event("combobox-item-move"),r=null==n?void 0:n.getState().baseElement;return null==r||r.dispatchEvent(t),!0}}),f=os({store:n,focusOnHover:u,...f})}),oy=i3(i8(function(e){return i5("div",oC(e))})),ob=e.i(74080);function oM(e,t){let r=setTimeout(t,e);return()=>clearTimeout(r)}function oE(){for(var e=arguments.length,t=Array(e),r=0;r{let r=t.endsWith("ms")?1:1e3,n=Number.parseFloat(t||"0s")*r;return n>e?n:e},0)}function ox(e,t,r){return!r&&!1!==t&&(!e||!!t)}var oF=i6(function(e){let{store:t,alwaysVisible:r,...n}=e,i=aL();iE(t=t||i,!1);let a=(0,el.useRef)(null),o=iW(n.id),[s,l]=(0,el.useState)(null),u=t.useState("open"),c=t.useState("mounted"),d=t.useState("animated"),f=t.useState("contentElement"),h=om(t.disclosure,"contentElement");iN(()=>{a.current&&(null==t||t.setContentElement(a.current))},[t]),iN(()=>{let e;return null==t||t.setState("animated",t=>(e=t,!0)),()=>{void 0!==e&&(null==t||t.setState("animated",e))}},[t]),iN(()=>{if(d){var e;let t;return(null==f?void 0:f.isConnected)?(e=()=>{l(u?"enter":c?"leave":null)},t=requestAnimationFrame(()=>{t=requestAnimationFrame(e)}),()=>cancelAnimationFrame(t)):void l(null)}},[d,f,u,c]),iN(()=>{if(!t||!d||!s||!f)return;let e=()=>null==t?void 0:t.setState("animating",!1),r=()=>(0,ob.flushSync)(e);if("leave"===s&&u||"enter"===s&&!u)return;if("number"==typeof d)return oM(d,r);let{transitionDuration:n,animationDuration:i,transitionDelay:a,animationDelay:o}=getComputedStyle(f),{transitionDuration:l="0",animationDuration:c="0",transitionDelay:m="0",animationDelay:p="0"}=h?getComputedStyle(h):{},A=oE(a,o,m,p)+oE(n,i,l,c);if(!A){"enter"===s&&t.setState("animated",!1),e();return}return oM(Math.max(A-1e3/60,0),r)},[t,d,f,h,u,s]);let m=ox(c,(n=iY(n,e=>(0,es.jsx)(ak,{value:t,children:e}),[t])).hidden,r),p=n.style,A=(0,el.useMemo)(()=>m?{...p,display:"none"}:p,[m,p]);return iS(n={id:o,"data-open":u||void 0,"data-enter":"enter"===s||void 0,"data-leave":"leave"===s||void 0,hidden:m,...n,ref:iQ(o?t.setContentElement:null,a,n.ref),style:A})}),oS=i8(function(e){return i5("div",oF(e))});i8(function(e){let{unmountOnHide:t,...r}=e,n=aL();return!1===om(r.store||n,e=>!t||(null==e?void 0:e.mounted))?null:(0,es.jsx)(oS,{...r})});var oT=i6(function(e){let{store:t,alwaysVisible:r,...n}=e,i=aq(!0),a=aX(),o=!!(t=t||a)&&t===i;iE(t,!1);let s=(0,el.useRef)(null),l=iW(n.id),u=t.useState("mounted"),c=ox(u,n.hidden,r),d=c?{...n.style,display:"none"}:n.style,f=t.useState(e=>Array.isArray(e.selectedValue)),h=function(e,t,r){let n=function(e){let[t]=(0,el.useState)(e);return t}(r),[i,a]=(0,el.useState)(n);return(0,el.useEffect)(()=>{let r=e&&"current"in e?e.current:e;if(!r)return;let i=()=>{let e=r.getAttribute(t);a(null==e?n:e)},o=new MutationObserver(i);return o.observe(r,{attributeFilter:[t]}),i(),()=>o.disconnect()},[e,t,n]),i}(s,"role",n.role),m="listbox"===h||"tree"===h||"grid"===h,[p,A]=(0,el.useState)(!1),g=t.useState("contentElement");iN(()=>{if(!u)return;let e=s.current;if(!e||g!==e)return;let t=()=>{A(!!e.querySelector("[role='listbox']"))},r=new MutationObserver(t);return r.observe(e,{subtree:!0,childList:!0,attributeFilter:["role"]}),t(),()=>r.disconnect()},[u,g]),p||(n={role:"listbox","aria-multiselectable":m&&f||void 0,...n}),n=iY(n,e=>(0,es.jsx)(az,{value:t,children:(0,es.jsx)(aW.Provider,{value:h,children:e})}),[t,h]);let B=!l||i&&o?null:t.setContentElement;return iS(n={id:l,hidden:c,...n,ref:iQ(B,s,n.ref),style:d})}),ow=i8(function(e){return i5("div",oT(e))}),oR=(0,el.createContext)(null),oI=i6(function(e){return{...e,style:{border:0,clip:"rect(0 0 0 0)",height:"1px",margin:"-1px",overflow:"hidden",padding:0,position:"absolute",whiteSpace:"nowrap",width:"1px",...e.style}}});i8(function(e){return i5("span",oI(e))});var oD=i6(function(e){return oI(e={"data-focus-trap":"",tabIndex:0,"aria-hidden":!0,...e,style:{position:"fixed",top:0,left:0,...e.style}})}),oG=i8(function(e){return i5("span",oD(e))});function oL(e){queueMicrotask(()=>{null==e||e.focus()})}var oP=i6(function(e){let{preserveTabOrder:t,preserveTabOrderAnchor:r,portalElement:n,portalRef:i,portal:a=!0,...o}=e,s=(0,el.useRef)(null),l=iQ(s,o.ref),u=(0,el.useContext)(oR),[c,d]=(0,el.useState)(null),[f,h]=(0,el.useState)(null),m=(0,el.useRef)(null),p=(0,el.useRef)(null),A=(0,el.useRef)(null),g=(0,el.useRef)(null);return iN(()=>{let e=s.current;if(!e||!a)return void d(null);let t=n?"function"==typeof n?n(e):n:it(e).createElement("div");if(!t)return void d(null);let r=t.isConnected;if(r||(u||it(e).body).appendChild(t),t.id||(t.id=e.id?"portal/".concat(e.id):function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"id";return"".concat(e?"".concat(e,"-"):"").concat(Math.random().toString(36).slice(2,8))}()),d(t),iw(i,t),!r)return()=>{t.remove(),iw(i,null)}},[a,n,u,i]),iN(()=>{if(!a||!t||!r)return;let e=it(r).createElement("span");return e.style.position="fixed",r.insertAdjacentElement("afterend",e),h(e),()=>{e.remove(),h(null)}},[a,t,r]),(0,el.useEffect)(()=>{if(!c||!t)return;let e=0,r=t=>{if(!iO(t))return;let r="focusin"===t.type;if(cancelAnimationFrame(e),r){let e=c.querySelectorAll("[data-tabindex]"),t=e=>{let t=e.getAttribute("data-tabindex");e.removeAttribute("data-tabindex"),t?e.setAttribute("tabindex",t):e.removeAttribute("tabindex")};for(let r of(c.hasAttribute("data-tabindex")&&t(c),e))t(r);return}e=requestAnimationFrame(()=>{for(let e of ah(c,!0))!function(e){var t;let r=null!=(t=e.getAttribute("tabindex"))?t:"";e.setAttribute("data-tabindex",r),e.setAttribute("tabindex","-1")}(e)})};return c.addEventListener("focusin",r,!0),c.addEventListener("focusout",r,!0),()=>{cancelAnimationFrame(e),c.removeEventListener("focusin",r,!0),c.removeEventListener("focusout",r,!0)}},[c,t]),o={...o=iY(o,e=>{if(e=(0,es.jsx)(oR.Provider,{value:c||u,children:e}),!a)return e;if(!c)return(0,es.jsx)("span",{ref:l,id:o.id,style:{position:"fixed"},hidden:!0});e=(0,es.jsxs)(es.Fragment,{children:[t&&c&&(0,es.jsx)(oG,{ref:p,"data-focus-trap":o.id,className:"__focus-trap-inner-before",onFocus:e=>{iO(e,c)?oL(am()):oL(m.current)}}),e,t&&c&&(0,es.jsx)(oG,{ref:A,"data-focus-trap":o.id,className:"__focus-trap-inner-after",onFocus:e=>{iO(e,c)?oL(ap()):oL(g.current)}})]}),c&&(e=(0,ob.createPortal)(e,c));let r=(0,es.jsxs)(es.Fragment,{children:[t&&c&&(0,es.jsx)(oG,{ref:m,"data-focus-trap":o.id,className:"__focus-trap-outer-before",onFocus:e=>{e.relatedTarget!==g.current&&iO(e,c)?oL(p.current):oL(ap())}}),t&&(0,es.jsx)("span",{"aria-owns":null==c?void 0:c.id,style:{position:"fixed"}}),t&&c&&(0,es.jsx)(oG,{ref:g,"data-focus-trap":o.id,className:"__focus-trap-outer-after",onFocus:e=>{if(iO(e,c))oL(A.current);else{let e=am();if(e===p.current)return void requestAnimationFrame(()=>{var e;return null==(e=am())?void 0:e.focus()});oL(e)}}})]});return f&&t&&(r=(0,ob.createPortal)(r,f)),(0,es.jsxs)(es.Fragment,{children:[r,e]})},[c,u,a,o.id,t,f]),ref:l}});i8(function(e){return i5("div",oP(e))});var oH=(0,el.createContext)(0);function oO(e){let{level:t,children:r}=e,n=(0,el.useContext)(oH),i=Math.max(Math.min(t||n+1,6),1);return(0,es.jsx)(oH.Provider,{value:i,children:r})}var ok=i6(function(e){let{autoFocusOnShow:t=!0,...r}=e;return iY(r,e=>(0,es.jsx)(al.Provider,{value:t,children:e}),[t])});i8(function(e){return i5("div",ok(e))});var o_=new WeakMap;function oU(e,t,r){o_.has(e)||o_.set(e,new Map);let n=o_.get(e),i=n.get(t);if(!i)return n.set(t,r()),()=>{var e;null==(e=n.get(t))||e(),n.delete(t)};let a=r(),o=()=>{a(),i(),n.delete(t)};return n.set(t,o),()=>{n.get(t)===o&&(a(),n.set(t,i))}}function oj(e,t,r){return oU(e,t,()=>{let n=e.getAttribute(t);return e.setAttribute(t,r),()=>{null==n?e.removeAttribute(t):e.setAttribute(t,n)}})}function oJ(e,t,r){return oU(e,t,()=>{let n=t in e,i=e[t];return e[t]=r,()=>{n?e[t]=i:delete e[t]}})}function oN(e,t){return e?oU(e,"style",()=>{let r=e.style.cssText;return Object.assign(e.style,t),()=>{e.style.cssText=r}}):()=>{}}var oK=["SCRIPT","STYLE"];function oQ(e){return"__ariakit-dialog-snapshot-".concat(e)}function oW(e,t,r,n){for(let i of t){if(!(null==i?void 0:i.isConnected))continue;let a=t.some(e=>!!e&&e!==i&&e.contains(i)),o=it(i),s=i;for(;i.parentElement&&i!==o.body;){if(null==n||n(i.parentElement,s),!a)for(let n of i.parentElement.children)(function(e,t,r){return!oK.includes(t.tagName)&&!!function(e,t){let r=it(t),n=oQ(e);if(!r.body[n])return!0;for(;;){if(t===r.body)return!1;if(t[n])return!0;if(!t.parentElement)return!1;t=t.parentElement}}(e,t)&&!r.some(e=>e&&ia(t,e))})(e,n,t)&&r(n,s);i=i.parentElement}}}function oV(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;ni===e))}function oX(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return"__ariakit-dialog-".concat(t?"ancestor":"outside").concat(e?"-".concat(e):"")}function oq(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return ib(oJ(e,oX("",!0),!0),oJ(e,oX(t,!0),!0))}function oY(e,t){if(e[oX(t,!0)])return!0;let r=oX(t);for(;;){if(e[r])return!0;if(!e.parentElement)return!1;e=e.parentElement}}function oZ(e,t){let r=[],n=t.map(e=>null==e?void 0:e.id);return oW(e,t,t=>{oV(t,...n)||r.unshift(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return ib(oJ(e,oX(),!0),oJ(e,oX(t),!0))}(t,e))},(t,n)=>{n.hasAttribute("data-dialog")&&n.id!==e||r.unshift(oq(t,e))}),()=>{for(let e of r)e()}}function oz(e){let{store:t,type:r,listener:n,capture:i,domReady:a}=e,o=iK(n),s=om(t,"open"),l=(0,el.useRef)(!1);iN(()=>{if(!s||!a)return;let{contentElement:e}=t.getState();if(!e)return;let r=()=>{l.current=!0};return e.addEventListener("focusin",r,!0),()=>e.removeEventListener("focusin",r,!0)},[t,s,a]),(0,el.useEffect)(()=>{if(s)return i_(r,e=>{let{contentElement:r,disclosureElement:n}=t.getState(),i=e.target;if(r&&i)!(!("HTML"===i.tagName||ia(it(i).body,i))||ia(r,i)||function(e,t){if(!e)return!1;if(ia(e,t))return!0;let r=t.getAttribute("aria-activedescendant");if(r){let t=it(e).getElementById(r);if(t)return ia(e,t)}return!1}(n,i)||i.hasAttribute("data-focus-trap")||function(e,t){if(!("clientY"in e))return!1;let r=t.getBoundingClientRect();return 0!==r.width&&0!==r.height&&r.top<=e.clientY&&e.clientY<=r.top+r.height&&r.left<=e.clientX&&e.clientX<=r.left+r.width}(e,r))&&(!l.current||oY(i,r.id))&&(i&&i[ay]||o(e))},i)},[s,i])}function o$(e,t){return"function"==typeof e?e(t):!!e}var o0=(0,el.createContext)({});function o1(){return"inert"in HTMLElement.prototype}function o9(e,t){if(!("style"in e))return iC;if(o1())return oJ(e,"inert",!0);let r=ah(e,!0).map(e=>{if(null==t?void 0:t.some(t=>t&&ia(t,e)))return iC;let r=oU(e,"focus",()=>(e.focus=iC,()=>{delete e.focus}));return ib(oj(e,"tabindex","-1"),r)});return ib(...r,oj(e,"aria-hidden","true"),oN(e,{pointerEvents:"none",userSelect:"none",cursor:"default"}))}function o2(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=a7(e.store,a4(e.disclosure,["contentElement","disclosureElement"]));oe(e,t);let r=null==t?void 0:t.getState(),n=iT(e.open,null==r?void 0:r.open,e.defaultOpen,!1),i=iT(e.animated,null==r?void 0:r.animated,!1),a=a9({open:n,animated:i,animating:!!i&&n,mounted:n,contentElement:iT(null==r?void 0:r.contentElement,null),disclosureElement:iT(null==r?void 0:r.disclosureElement,null)},t);return a2(a,()=>a5(a,["animated","animating"],e=>{e.animated||a.setState("animating",!1)})),a2(a,()=>a3(a,["open"],()=>{a.getState().animated&&a.setState("animating",!0)})),a2(a,()=>a5(a,["open","animating"],e=>{a.setState("mounted",e.open||e.animating)})),{...a,disclosure:e.disclosure,setOpen:e=>a.setState("open",e),show:()=>a.setState("open",!0),hide:()=>a.setState("open",!1),toggle:()=>a.setState("open",e=>!e),stopAnimation:()=>a.setState("animating",!1),setContentElement:e=>a.setState("contentElement",e),setDisclosureElement:e=>a.setState("disclosureElement",e)}}function o8(e,t,r){return iV(t,[r.store,r.disclosure]),oA(e,r,"open","setOpen"),oA(e,r,"mounted","setMounted"),oA(e,r,"animated"),Object.assign(e,{disclosure:r.disclosure})}i6(function(e){return e});var o3=i8(function(e){return i5("div",e)});function o5(e){let{store:t,backdrop:r,alwaysVisible:n,hidden:i}=e,a=(0,el.useRef)(null),o=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},[t,r]=og(o2,e);return o8(t,r,e)}({disclosure:t}),s=om(t,"contentElement");(0,el.useEffect)(()=>{let e=a.current;e&&s&&(e.style.zIndex=getComputedStyle(s).zIndex)},[s]),iN(()=>{let e=null==s?void 0:s.id;if(!e)return;let t=a.current;if(t)return oq(t,e)},[s]);let l=oF({ref:a,store:o,role:"presentation","data-backdrop":(null==s?void 0:s.id)||"",alwaysVisible:n,hidden:null!=i?i:void 0,style:{position:"fixed",top:0,right:0,bottom:0,left:0}});if(!r)return null;if((0,el.isValidElement)(r))return(0,es.jsx)(o3,{...l,render:r});let u="boolean"!=typeof r?r:"div";return(0,es.jsx)(o3,{...l,render:(0,es.jsx)(u,{})})}function o6(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return o2(e)}Object.assign(o3,["a","button","details","dialog","div","form","h1","h2","h3","h4","h5","h6","header","img","input","label","li","nav","ol","p","section","select","span","summary","textarea","ul","svg"].reduce((e,t)=>(e[t]=i8(function(e){return i5(t,e)}),e),{}));var o4=iD();function o7(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(!e)return null;let r="current"in e?e.current:e;return r?t?ac(r)?r:null:r:null}var se=i6(function(e){let{store:t,open:r,onClose:n,focusable:i=!0,modal:a=!0,portal:o=!!a,backdrop:s=!!a,hideOnEscape:l=!0,hideOnInteractOutside:u=!0,getPersistentElements:c,preventBodyScroll:d=!!a,autoFocusOnShow:f=!0,autoFocusOnHide:h=!0,initialFocus:m,finalFocus:p,unmountOnHide:A,unstable_treeSnapshotKey:g,...B}=e,C=aH(),y=(0,el.useRef)(null),b=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},[t,r]=og(o6,e);return o8(t,r,e)}({store:t||C,open:r,setOpen(e){if(e)return;let t=y.current;if(!t)return;let r=new Event("close",{bubbles:!1,cancelable:!0});n&&t.addEventListener("close",n,{once:!0}),t.dispatchEvent(r),r.defaultPrevented&&b.setOpen(!0)}}),{portalRef:M,domReady:E}=iZ(o,B.portalRef),x=B.preserveTabOrder,F=om(b,e=>x&&!a&&e.mounted),S=iW(B.id),T=om(b,"open"),w=om(b,"mounted"),R=om(b,"contentElement"),I=ox(w,B.hidden,B.alwaysVisible),D=function(e){let{attribute:t,contentId:r,contentElement:n,enabled:i}=e,[a,o]=iX(),s=(0,el.useCallback)(()=>{if(!i||!n)return!1;let{body:e}=it(n),a=e.getAttribute(t);return!a||a===r},[a,i,n,t,r]);return(0,el.useEffect)(()=>{if(!i||!r||!n)return;let{body:e}=it(n);if(s())return e.setAttribute(t,r),()=>e.removeAttribute(t);let a=new MutationObserver(()=>(0,ob.flushSync)(o));return a.observe(e,{attributeFilter:[t]}),()=>a.disconnect()},[a,i,r,n,s,t]),s}({attribute:"data-dialog-prevent-body-scroll",contentElement:R,contentId:S,enabled:d&&!I});(0,el.useEffect)(()=>{var e,t;if(!D()||!R)return;let r=it(R),n=ir(R),{documentElement:i,body:a}=r,o=i.style.getPropertyValue("--scrollbar-width"),s=o?Number.parseInt(o,10):n.innerWidth-i.clientWidth,l=Math.round(i.getBoundingClientRect().left)+i.scrollLeft?"paddingLeft":"paddingRight",u=iI()&&!(ie&&navigator.platform.startsWith("Mac")&&!iR());return ib((e="--scrollbar-width",t="".concat(s,"px"),i?oU(i,e,()=>{let r=i.style.getPropertyValue(e);return i.style.setProperty(e,t),()=>{r?i.style.setProperty(e,r):i.style.removeProperty(e)}}):()=>{}),u?(()=>{var e,t;let{scrollX:r,scrollY:i,visualViewport:o}=n,u=null!=(e=null==o?void 0:o.offsetLeft)?e:0,c=null!=(t=null==o?void 0:o.offsetTop)?t:0,d=oN(a,{position:"fixed",overflow:"hidden",top:"".concat(-(i-Math.floor(c)),"px"),left:"".concat(-(r-Math.floor(u)),"px"),right:"0",[l]:"".concat(s,"px")});return()=>{d(),n.scrollTo({left:r,top:i,behavior:"instant"})}})():oN(a,{overflow:"hidden",[l]:"".concat(s,"px")}))},[D,R]);let G=function(e){let t=(0,el.useRef)();return(0,el.useEffect)(()=>{if(!e){t.current=null;return}return i_("mousedown",e=>{t.current=e.target},!0)},[e]),t}(om(b,"open")),L={store:b,domReady:E,capture:!0};oz({...L,type:"click",listener:e=>{let{contentElement:t}=b.getState(),r=G.current;r&&iu(r)&&oY(r,null==t?void 0:t.id)&&o$(u,e)&&b.hide()}}),oz({...L,type:"focusin",listener:e=>{let{contentElement:t}=b.getState();t&&e.target!==it(t)&&o$(u,e)&&b.hide()}}),oz({...L,type:"contextmenu",listener:e=>{o$(u,e)&&b.hide()}});let{wrapElement:P,nestedDialogs:H}=function(e){let t=(0,el.useContext)(o0),[r,n]=(0,el.useState)([]),i=(0,el.useCallback)(e=>{var r;return n(t=>[...t,e]),ib(null==(r=t.add)?void 0:r.call(t,e),()=>{n(t=>t.filter(t=>t!==e))})},[t]);iN(()=>a5(e,["open","contentElement"],r=>{var n;if(r.open&&r.contentElement)return null==(n=t.add)?void 0:n.call(t,e)}),[e,t]);let a=(0,el.useMemo)(()=>({store:e,add:i}),[e,i]);return{wrapElement:(0,el.useCallback)(e=>(0,es.jsx)(o0.Provider,{value:a,children:e}),[a]),nestedDialogs:r}}(b);B=iY(B,P,[P]),iN(()=>{if(!T)return;let e=y.current,t=ii(e,!0);t&&"BODY"!==t.tagName&&(e&&ia(e,t)||b.setDisclosureElement(t))},[b,T]),o4&&(0,el.useEffect)(()=>{if(!w)return;let{disclosureElement:e}=b.getState();if(!e||!is(e))return;let t=()=>{let t=!1,r=()=>{t=!0};e.addEventListener("focusin",r,{capture:!0,once:!0}),ik(e,"mouseup",()=>{e.removeEventListener("focusin",r,!0),t||av(e)})};return e.addEventListener("mousedown",t),()=>{e.removeEventListener("mousedown",t)}},[b,w]),(0,el.useEffect)(()=>{if(!w||!E)return;let e=y.current;if(!e)return;let t=ir(e),r=t.visualViewport||t,n=()=>{var r,n;let i=null!=(n=null==(r=t.visualViewport)?void 0:r.height)?n:t.innerHeight;e.style.setProperty("--dialog-viewport-height","".concat(i,"px"))};return n(),r.addEventListener("resize",n),()=>{r.removeEventListener("resize",n)}},[w,E]),(0,el.useEffect)(()=>{if(!a||!w||!E)return;let e=y.current;if(e&&!e.querySelector("[data-dialog-dismiss]")){var t=b.hide;let r=it(e).createElement("button");return r.type="button",r.tabIndex=-1,r.textContent="Dismiss popup",Object.assign(r.style,{border:"0px",clip:"rect(0 0 0 0)",height:"1px",margin:"-1px",overflow:"hidden",padding:"0px",position:"absolute",whiteSpace:"nowrap",width:"1px"}),r.addEventListener("click",t),e.prepend(r),()=>{r.removeEventListener("click",t),r.remove()}}},[b,a,w,E]),iN(()=>{if(!o1()||T||!w||!E)return;let e=y.current;if(e)return o9(e)},[T,w,E]);let O=T&&E;iN(()=>{if(!S||!O)return;var e=[y.current];let{body:t}=it(e[0]),r=[];return oW(S,e,e=>{r.push(oJ(e,oQ(S),!0))}),ib(oJ(t,oQ(S),!0),()=>{for(let e of r)e()})},[S,O,g]);let k=iK(c);iN(()=>{if(!S||!O)return;let{disclosureElement:e}=b.getState(),t=[y.current,...k()||[],...H.map(e=>e.getState().contentElement)];return a?ib(oZ(S,t),function(e,t){let r=[],n=t.map(e=>null==e?void 0:e.id);return oW(e,t,e=>{oV(e,...n)||!function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;ni===e))}(e,...n)&&r.unshift(o9(e,t))},e=>{e.hasAttribute("role")&&(t.some(t=>t&&ia(t,e))||r.unshift(oj(e,"role","none")))}),()=>{for(let e of r)e()}}(S,t)):oZ(S,[e,...t])},[S,b,O,k,H,a,g]);let _=!!f,U=iq(f),[j,J]=(0,el.useState)(!1);(0,el.useEffect)(()=>{if(!T||!_||!E||!(null==R?void 0:R.isConnected))return;let e=o7(m,!0)||R.querySelector("[data-autofocus=true],[autofocus]")||function(e,t,r){let[n]=ah(e,t,r);return n||null}(R,!0,o&&F)||R,t=ac(e);U(t?e:null)&&(J(!0),queueMicrotask(()=>{e.focus(),o4&&t&&e.scrollIntoView({block:"nearest",inline:"nearest"})}))},[T,_,E,R,m,o,F,U]);let N=!!h,K=iq(h),[Q,W]=(0,el.useState)(!1);(0,el.useEffect)(()=>{if(T)return W(!0),()=>W(!1)},[T]);let V=(0,el.useCallback)(function(e){let t=!(arguments.length>1)||void 0===arguments[1]||arguments[1],{disclosureElement:r}=b.getState();if(function(e){let t=ii();return!(!t||e&&ia(e,t))&&!!ac(t)}(e))return;let n=o7(p)||r;if(null==n?void 0:n.id){let e=it(n),t='[aria-activedescendant="'.concat(n.id,'"]'),r=e.querySelector(t);r&&(n=r)}if(n&&!ac(n)){let e=n.closest("[data-dialog]");if(null==e?void 0:e.id){let t=it(e),r='[aria-controls~="'.concat(e.id,'"]'),i=t.querySelector(r);i&&(n=i)}}let i=n&&ac(n);if(!i&&t)return void requestAnimationFrame(()=>V(e,!1));K(i?n:null)&&i&&(null==n||n.focus({preventScroll:!0}))},[b,p,K]),X=(0,el.useRef)(!1);iN(()=>{if(T||!Q||!N)return;let e=y.current;X.current=!0,V(e)},[T,Q,E,N,V]),(0,el.useEffect)(()=>{if(!Q||!N)return;let e=y.current;return()=>{if(X.current){X.current=!1;return}V(e)}},[Q,N,V]);let q=iq(l);(0,el.useEffect)(()=>{if(E&&w)return i_("keydown",e=>{if("Escape"!==e.key||e.defaultPrevented)return;let t=y.current;if(!t||oY(t))return;let r=e.target;if(!r)return;let{disclosureElement:n}=b.getState();("BODY"===r.tagName||ia(t,r)||!n||ia(n,r))&&q(e)&&b.hide()},!0)},[b,E,w,q]);let Y=(B=iY(B,e=>(0,es.jsx)(oO,{level:a?1:void 0,children:e}),[a])).hidden,Z=B.alwaysVisible;B=iY(B,e=>s?(0,es.jsxs)(es.Fragment,{children:[(0,es.jsx)(o5,{store:b,backdrop:s,hidden:Y,alwaysVisible:Z}),e]}):e,[b,s,Y,Z]);let[z,$]=(0,el.useState)(),[ee,et]=(0,el.useState)();return B=ok({...B={id:S,"data-dialog":"",role:"dialog",tabIndex:i?-1:void 0,"aria-labelledby":z,"aria-describedby":ee,...B=iY(B,e=>(0,es.jsx)(ak,{value:b,children:(0,es.jsx)(a_.Provider,{value:$,children:(0,es.jsx)(aU.Provider,{value:et,children:e})})}),[b]),ref:iQ(y,B.ref)},autoFocusOnShow:j}),B=oP({portal:o,...B=aT({...B=oF({store:b,...B}),focusable:i}),portalRef:M,preserveTabOrder:F})});function st(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:aH;return i8(function(r){let n=t();return om(r.store||n,e=>!r.unmountOnHide||(null==e?void 0:e.mounted)||!!r.open)?(0,es.jsx)(e,{...r}):null})}st(i8(function(e){return i5("div",se(e))}),aH);let sr=Math.min,sn=Math.max,si=Math.round,sa=Math.floor,so=e=>({x:e,y:e}),ss={left:"right",right:"left",bottom:"top",top:"bottom"},sl={start:"end",end:"start"};function su(e,t){return"function"==typeof e?e(t):e}function sc(e){return e.split("-")[0]}function sd(e){return e.split("-")[1]}function sf(e){return"x"===e?"y":"x"}function sh(e){return"y"===e?"height":"width"}let sm=new Set(["top","bottom"]);function sp(e){return sm.has(sc(e))?"y":"x"}function sA(e){return e.replace(/start|end/g,e=>sl[e])}let sg=["left","right"],sv=["right","left"],sB=["top","bottom"],sC=["bottom","top"];function sy(e){return e.replace(/left|right|bottom|top/g,e=>ss[e])}function sb(e){return"number"!=typeof e?{top:0,right:0,bottom:0,left:0,...e}:{top:e,right:e,bottom:e,left:e}}function sM(e){let{x:t,y:r,width:n,height:i}=e;return{width:n,height:i,top:r,left:t,right:t+n,bottom:r+i,x:t,y:r}}function sE(e,t,r){let n,{reference:i,floating:a}=e,o=sp(t),s=sf(sp(t)),l=sh(s),u=sc(t),c="y"===o,d=i.x+i.width/2-a.width/2,f=i.y+i.height/2-a.height/2,h=i[l]/2-a[l]/2;switch(u){case"top":n={x:d,y:i.y-a.height};break;case"bottom":n={x:d,y:i.y+i.height};break;case"right":n={x:i.x+i.width,y:f};break;case"left":n={x:i.x-a.width,y:f};break;default:n={x:i.x,y:i.y}}switch(sd(t)){case"start":n[s]-=h*(r&&c?-1:1);break;case"end":n[s]+=h*(r&&c?-1:1)}return n}let sx=async(e,t,r)=>{let{placement:n="bottom",strategy:i="absolute",middleware:a=[],platform:o}=r,s=a.filter(Boolean),l=await (null==o.isRTL?void 0:o.isRTL(t)),u=await o.getElementRects({reference:e,floating:t,strategy:i}),{x:c,y:d}=sE(u,n,l),f=n,h={},m=0;for(let r=0;r{try{return e.matches(t)}catch(e){return!1}})}let sJ=["transform","translate","scale","rotate","perspective"],sN=["transform","translate","scale","rotate","perspective","filter"],sK=["paint","layout","strict","content"];function sQ(e){let t=sW(),r=sL(e)?sq(e):e;return sJ.some(e=>!!r[e]&&"none"!==r[e])||!!r.containerType&&"normal"!==r.containerType||!t&&!!r.backdropFilter&&"none"!==r.backdropFilter||!t&&!!r.filter&&"none"!==r.filter||sN.some(e=>(r.willChange||"").includes(e))||sK.some(e=>(r.contain||"").includes(e))}function sW(){return"undefined"!=typeof CSS&&!!CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")}let sV=new Set(["html","body","#document"]);function sX(e){return sV.has(sR(e))}function sq(e){return sI(e).getComputedStyle(e)}function sY(e){return sL(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function sZ(e){if("html"===sR(e))return e;let t=e.assignedSlot||e.parentNode||sH(e)&&e.host||sD(e);return sH(t)?t.host:t}function sz(e,t,r){var n;void 0===t&&(t=[]),void 0===r&&(r=!0);let i=function e(t){let r=sZ(t);return sX(r)?t.ownerDocument?t.ownerDocument.body:t.body:sP(r)&&sk(r)?r:e(r)}(e),a=i===(null==(n=e.ownerDocument)?void 0:n.body),o=sI(i);if(a){let e=s$(o);return t.concat(o,o.visualViewport||[],sk(i)?i:[],e&&r?sz(e):[])}return t.concat(i,sz(i,[],r))}function s$(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function s0(e){let t=sq(e),r=parseFloat(t.width)||0,n=parseFloat(t.height)||0,i=sP(e),a=i?e.offsetWidth:r,o=i?e.offsetHeight:n,s=si(r)!==a||si(n)!==o;return s&&(r=a,n=o),{width:r,height:n,$:s}}function s1(e){return sL(e)?e:e.contextElement}function s9(e){let t=s1(e);if(!sP(t))return so(1);let r=t.getBoundingClientRect(),{width:n,height:i,$:a}=s0(t),o=(a?si(r.width):r.width)/n,s=(a?si(r.height):r.height)/i;return o&&Number.isFinite(o)||(o=1),s&&Number.isFinite(s)||(s=1),{x:o,y:s}}let s2=so(0);function s8(e){let t=sI(e);return sW()&&t.visualViewport?{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}:s2}function s3(e,t,r,n){var i;void 0===t&&(t=!1),void 0===r&&(r=!1);let a=e.getBoundingClientRect(),o=s1(e),s=so(1);t&&(n?sL(n)&&(s=s9(n)):s=s9(e));let l=(void 0===(i=r)&&(i=!1),n&&(!i||n===sI(o))&&i)?s8(o):so(0),u=(a.left+l.x)/s.x,c=(a.top+l.y)/s.y,d=a.width/s.x,f=a.height/s.y;if(o){let e=sI(o),t=n&&sL(n)?sI(n):n,r=e,i=s$(r);for(;i&&n&&t!==r;){let e=s9(i),t=i.getBoundingClientRect(),n=sq(i),a=t.left+(i.clientLeft+parseFloat(n.paddingLeft))*e.x,o=t.top+(i.clientTop+parseFloat(n.paddingTop))*e.y;u*=e.x,c*=e.y,d*=e.x,f*=e.y,u+=a,c+=o,i=s$(r=sI(i))}}return sM({width:d,height:f,x:u,y:c})}function s5(e,t){let r=sY(e).scrollLeft;return t?t.left+r:s3(sD(e)).left+r}function s6(e,t){let r=e.getBoundingClientRect();return{x:r.left+t.scrollLeft-s5(e,r),y:r.top+t.scrollTop}}let s4=new Set(["absolute","fixed"]);function s7(e,t,r){let n;if("viewport"===t)n=function(e,t){let r=sI(e),n=sD(e),i=r.visualViewport,a=n.clientWidth,o=n.clientHeight,s=0,l=0;if(i){a=i.width,o=i.height;let e=sW();(!e||e&&"fixed"===t)&&(s=i.offsetLeft,l=i.offsetTop)}let u=s5(n);if(u<=0){let e=n.ownerDocument,t=e.body,r=getComputedStyle(t),i="CSS1Compat"===e.compatMode&&parseFloat(r.marginLeft)+parseFloat(r.marginRight)||0,o=Math.abs(n.clientWidth-t.clientWidth-i);o<=25&&(a-=o)}else u<=25&&(a+=u);return{width:a,height:o,x:s,y:l}}(e,r);else if("document"===t)n=function(e){let t=sD(e),r=sY(e),n=e.ownerDocument.body,i=sn(t.scrollWidth,t.clientWidth,n.scrollWidth,n.clientWidth),a=sn(t.scrollHeight,t.clientHeight,n.scrollHeight,n.clientHeight),o=-r.scrollLeft+s5(e),s=-r.scrollTop;return"rtl"===sq(n).direction&&(o+=sn(t.clientWidth,n.clientWidth)-i),{width:i,height:a,x:o,y:s}}(sD(e));else if(sL(t))n=function(e,t){let r=s3(e,!0,"fixed"===t),n=r.top+e.clientTop,i=r.left+e.clientLeft,a=sP(e)?s9(e):so(1),o=e.clientWidth*a.x,s=e.clientHeight*a.y;return{width:o,height:s,x:i*a.x,y:n*a.y}}(t,r);else{let r=s8(e);n={x:t.x-r.x,y:t.y-r.y,width:t.width,height:t.height}}return sM(n)}function le(e){return"static"===sq(e).position}function lt(e,t){if(!sP(e)||"fixed"===sq(e).position)return null;if(t)return t(e);let r=e.offsetParent;return sD(e)===r&&(r=r.ownerDocument.body),r}function lr(e,t){var r;let n=sI(e);if(sj(e))return n;if(!sP(e)){let t=sZ(e);for(;t&&!sX(t);){if(sL(t)&&!le(t))return t;t=sZ(t)}return n}let i=lt(e,t);for(;i&&(r=i,s_.has(sR(r)))&&le(i);)i=lt(i,t);return i&&sX(i)&&le(i)&&!sQ(i)?n:i||function(e){let t=sZ(e);for(;sP(t)&&!sX(t);){if(sQ(t))return t;if(sj(t))break;t=sZ(t)}return null}(e)||n}let ln=async function(e){let t=this.getOffsetParent||lr,r=this.getDimensions,n=await r(e.floating);return{reference:function(e,t,r){let n=sP(t),i=sD(t),a="fixed"===r,o=s3(e,!0,a,t),s={scrollLeft:0,scrollTop:0},l=so(0);if(n||!n&&!a)if(("body"!==sR(t)||sk(i))&&(s=sY(t)),n){let e=s3(t,!0,a,t);l.x=e.x+t.clientLeft,l.y=e.y+t.clientTop}else i&&(l.x=s5(i));a&&!n&&i&&(l.x=s5(i));let u=!i||n||a?so(0):s6(i,s);return{x:o.left+s.scrollLeft-l.x-u.x,y:o.top+s.scrollTop-l.y-u.y,width:o.width,height:o.height}}(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:n.width,height:n.height}}},li={convertOffsetParentRelativeRectToViewportRelativeRect:function(e){let{elements:t,rect:r,offsetParent:n,strategy:i}=e,a="fixed"===i,o=sD(n),s=!!t&&sj(t.floating);if(n===o||s&&a)return r;let l={scrollLeft:0,scrollTop:0},u=so(1),c=so(0),d=sP(n);if((d||!d&&!a)&&(("body"!==sR(n)||sk(o))&&(l=sY(n)),sP(n))){let e=s3(n);u=s9(n),c.x=e.x+n.clientLeft,c.y=e.y+n.clientTop}let f=!o||d||a?so(0):s6(o,l);return{width:r.width*u.x,height:r.height*u.y,x:r.x*u.x-l.scrollLeft*u.x+c.x+f.x,y:r.y*u.y-l.scrollTop*u.y+c.y+f.y}},getDocumentElement:sD,getClippingRect:function(e){let{element:t,boundary:r,rootBoundary:n,strategy:i}=e,a=[..."clippingAncestors"===r?sj(t)?[]:function(e,t){let r=t.get(e);if(r)return r;let n=sz(e,[],!1).filter(e=>sL(e)&&"body"!==sR(e)),i=null,a="fixed"===sq(e).position,o=a?sZ(e):e;for(;sL(o)&&!sX(o);){let t=sq(o),r=sQ(o);r||"fixed"!==t.position||(i=null),(a?!r&&!i:!r&&"static"===t.position&&!!i&&s4.has(i.position)||sk(o)&&!r&&function e(t,r){let n=sZ(t);return!(n===r||!sL(n)||sX(n))&&("fixed"===sq(n).position||e(n,r))}(e,o))?n=n.filter(e=>e!==o):i=t,o=sZ(o)}return t.set(e,n),n}(t,this._c):[].concat(r),n],o=a[0],s=a.reduce((e,r)=>{let n=s7(t,r,i);return e.top=sn(n.top,e.top),e.right=sr(n.right,e.right),e.bottom=sr(n.bottom,e.bottom),e.left=sn(n.left,e.left),e},s7(t,o,i));return{width:s.right-s.left,height:s.bottom-s.top,x:s.left,y:s.top}},getOffsetParent:lr,getElementRects:ln,getClientRects:function(e){return Array.from(e.getClientRects())},getDimensions:function(e){let{width:t,height:r}=s0(e);return{width:t,height:r}},getScale:s9,isElement:sL,isRTL:function(e){return"rtl"===sq(e).direction}};function la(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function lo(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;if("function"==typeof DOMRect)return new DOMRect(e,t,r,n);let i={x:e,y:t,width:r,height:n,top:t,right:e+r,bottom:t+n,left:e};return{...i,toJSON:()=>i}}function ls(e){return/^(?:top|bottom|left|right)(?:-(?:start|end))?$/.test(e)}function ll(e){let t=window.devicePixelRatio||1;return Math.round(e*t)/t}var lu=i6(function(e){let{store:t,modal:r=!1,portal:n=!!r,preserveTabOrder:i=!0,autoFocusOnShow:a=!0,wrapperProps:o,fixed:s=!1,flip:l=!0,shift:u=0,slide:c=!0,overlap:d=!1,sameWidth:f=!1,fitViewport:h=!1,gutter:m,arrowPadding:p=4,overflowPadding:A=8,getAnchorRect:g,updatePosition:B,...C}=e,y=aJ();iE(t=t||y,!1);let b=t.useState("arrowElement"),M=t.useState("anchorElement"),E=t.useState("disclosureElement"),x=t.useState("popoverElement"),F=t.useState("contentElement"),S=t.useState("placement"),T=t.useState("mounted"),w=t.useState("rendered"),R=(0,el.useRef)(null),[I,D]=(0,el.useState)(!1),{portalRef:G,domReady:L}=iZ(n,C.portalRef),P=iK(g),H=iK(B),O=!!B;iN(()=>{if(!(null==x?void 0:x.isConnected))return;x.style.setProperty("--popover-overflow-padding","".concat(A,"px"));let e={contextElement:M||void 0,getBoundingClientRect:()=>{let e=null==P?void 0:P(M);if(e||!M){if(!e)return lo();let{x:t,y:r,width:n,height:i}=e;return lo(t,r,n,i)}return M.getBoundingClientRect()}},r=async()=>{var r,n,i,a;if(!T)return;b||(R.current=R.current||document.createElement("div"));let o=b||R.current,g=[(r={gutter:m,shift:u},void 0===(n=e=>{var t;let{placement:n}=e,i=((null==o?void 0:o.clientHeight)||0)/2,a="number"==typeof r.gutter?r.gutter+i:null!=(t=r.gutter)?t:i;return{crossAxis:n.split("-")[1]?void 0:r.shift,mainAxis:a,alignmentAxis:r.shift}})&&(n=0),{name:"offset",options:n,async fn(e){var t,r;let{x:i,y:a,placement:o,middlewareData:s}=e,l=await sT(e,n);return o===(null==(t=s.offset)?void 0:t.placement)&&null!=(r=s.arrow)&&r.alignmentOffset?{}:{x:i+l.x,y:a+l.y,data:{...l,placement:o}}}}),function(e){var t;if(!1===e.flip)return;let r="string"==typeof e.flip?e.flip.split(" "):void 0;return iE(!r||r.every(ls),!1),{name:"flip",options:t={padding:e.overflowPadding,fallbackPlacements:r},async fn(e){var r,n,i,a,o;let{placement:s,middlewareData:l,rects:u,initialPlacement:c,platform:d,elements:f}=e,{mainAxis:h=!0,crossAxis:m=!0,fallbackPlacements:p,fallbackStrategy:A="bestFit",fallbackAxisSideDirection:g="none",flipAlignment:B=!0,...C}=su(t,e);if(null!=(r=l.arrow)&&r.alignmentOffset)return{};let y=sc(s),b=sp(c),M=sc(c)===c,E=await (null==d.isRTL?void 0:d.isRTL(f.floating)),x=p||(M||!B?[sy(c)]:function(e){let t=sy(e);return[sA(e),t,sA(t)]}(c)),F="none"!==g;!p&&F&&x.push(...function(e,t,r,n){let i=sd(e),a=function(e,t,r){switch(e){case"top":case"bottom":if(r)return t?sv:sg;return t?sg:sv;case"left":case"right":return t?sB:sC;default:return[]}}(sc(e),"start"===r,n);return i&&(a=a.map(e=>e+"-"+i),t&&(a=a.concat(a.map(sA)))),a}(c,B,g,E));let S=[c,...x],T=await sF(e,C),w=[],R=(null==(n=l.flip)?void 0:n.overflows)||[];if(h&&w.push(T[y]),m){let e=function(e,t,r){void 0===r&&(r=!1);let n=sd(e),i=sf(sp(e)),a=sh(i),o="x"===i?n===(r?"end":"start")?"right":"left":"start"===n?"bottom":"top";return t.reference[a]>t.floating[a]&&(o=sy(o)),[o,sy(o)]}(s,u,E);w.push(T[e[0]],T[e[1]])}if(R=[...R,{placement:s,overflows:w}],!w.every(e=>e<=0)){let e=((null==(i=l.flip)?void 0:i.index)||0)+1,t=S[e];if(t&&("alignment"!==m||b===sp(t)||R.every(e=>sp(e.placement)!==b||e.overflows[0]>0)))return{data:{index:e,overflows:R},reset:{placement:t}};let r=null==(a=R.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0])?void 0:a.placement;if(!r)switch(A){case"bestFit":{let e=null==(o=R.filter(e=>{if(F){let t=sp(e.placement);return t===b||"y"===t}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0])?void 0:o[0];e&&(r=e);break}case"initialPlacement":r=c}if(s!==r)return{reset:{placement:r}}}return{}}}}({flip:l,overflowPadding:A}),function(e){if(e.slide||e.overlap){var t,r;return{name:"shift",options:r={mainAxis:e.slide,crossAxis:e.overlap,padding:e.overflowPadding,limiter:(void 0===t&&(t={}),{options:t,fn(e){let{x:r,y:n,placement:i,rects:a,middlewareData:o}=e,{offset:s=0,mainAxis:l=!0,crossAxis:u=!0}=su(t,e),c={x:r,y:n},d=sp(i),f=sf(d),h=c[f],m=c[d],p=su(s,e),A="number"==typeof p?{mainAxis:p,crossAxis:0}:{mainAxis:0,crossAxis:0,...p};if(l){let e="y"===f?"height":"width",t=a.reference[f]-a.floating[e]+A.mainAxis,r=a.reference[f]+a.reference[e]-A.mainAxis;hr&&(h=r)}if(u){var g,B;let e="y"===f?"width":"height",t=sS.has(sc(i)),r=a.reference[d]-a.floating[e]+(t&&(null==(g=o.offset)?void 0:g[d])||0)+(t?0:A.crossAxis),n=a.reference[d]+a.reference[e]+(t?0:(null==(B=o.offset)?void 0:B[d])||0)-(t?A.crossAxis:0);mn&&(m=n)}return{[f]:h,[d]:m}}})},async fn(e){let{x:t,y:n,placement:i}=e,{mainAxis:a=!0,crossAxis:o=!1,limiter:s={fn:e=>{let{x:t,y:r}=e;return{x:t,y:r}}},...l}=su(r,e),u={x:t,y:n},c=await sF(e,l),d=sp(sc(i)),f=sf(d),h=u[f],m=u[d];if(a){let e="y"===f?"top":"left",t="y"===f?"bottom":"right",r=h+c[e],n=h-c[t];h=sn(r,sr(h,n))}if(o){let e="y"===d?"top":"left",t="y"===d?"bottom":"right",r=m+c[e],n=m-c[t];m=sn(r,sr(m,n))}let p=s.fn({...e,[f]:h,[d]:m});return{...p,data:{x:p.x-t,y:p.y-n,enabled:{[f]:a,[d]:o}}}}}}}({slide:c,shift:u,overlap:d,overflowPadding:A}),function(e,t){if(e){let r;return{name:"arrow",options:r={element:e,padding:t.arrowPadding},async fn(e){let{x:t,y:n,placement:i,rects:a,platform:o,elements:s,middlewareData:l}=e,{element:u,padding:c=0}=su(r,e)||{};if(null==u)return{};let d=sb(c),f={x:t,y:n},h=sf(sp(i)),m=sh(h),p=await o.getDimensions(u),A="y"===h,g=A?"clientHeight":"clientWidth",B=a.reference[m]+a.reference[h]-f[h]-a.floating[m],C=f[h]-a.reference[h],y=await (null==o.getOffsetParent?void 0:o.getOffsetParent(u)),b=y?y[g]:0;b&&await (null==o.isElement?void 0:o.isElement(y))||(b=s.floating[g]||a.floating[m]);let M=b/2-p[m]/2-1,E=sr(d[A?"top":"left"],M),x=sr(d[A?"bottom":"right"],M),F=b-p[m]-x,S=b/2-p[m]/2+(B/2-C/2),T=sn(E,sr(S,F)),w=!l.arrow&&null!=sd(i)&&S!==T&&a.reference[m]/2-(S{},...d}=su(a,e),f=await sF(e,d),h=sc(o),m=sd(o),p="y"===sp(o),{width:A,height:g}=s.floating;"top"===h||"bottom"===h?(n=h,i=m===(await (null==l.isRTL?void 0:l.isRTL(u.floating))?"start":"end")?"left":"right"):(i=h,n="end"===m?"top":"bottom");let B=g-f.top-f.bottom,C=A-f.left-f.right,y=sr(g-f[n],B),b=sr(A-f[i],C),M=!e.middlewareData.shift,E=y,x=b;if(null!=(t=e.middlewareData.shift)&&t.enabled.x&&(x=C),null!=(r=e.middlewareData.shift)&&r.enabled.y&&(E=B),M&&!m){let e=sn(f.left,0),t=sn(f.right,0),r=sn(f.top,0),n=sn(f.bottom,0);p?x=A-2*(0!==e||0!==t?e+t:sn(f.left,f.right)):E=g-2*(0!==r||0!==n?r+n:sn(f.top,f.bottom))}await c({...e,availableWidth:x,availableHeight:E});let F=await l.getDimensions(u.floating);return A!==F.width||g!==F.height?{reset:{rects:!0}}:{}}}],B=await ((e,t,r)=>{let n=new Map,i={platform:li,...r},a={...i.platform,_c:n};return sx(e,t,{...i,platform:a})})(e,x,{placement:S,strategy:s?"fixed":"absolute",middleware:g});null==t||t.setState("currentPlacement",B.placement),D(!0);let C=ll(B.x),y=ll(B.y);if(Object.assign(x.style,{top:"0",left:"0",transform:"translate3d(".concat(C,"px,").concat(y,"px,0)")}),o&&B.middlewareData.arrow){let{x:e,y:t}=B.middlewareData.arrow,r=B.placement.split("-")[0],n=o.clientWidth/2,i=o.clientHeight/2,a=null!=e?e+n:-n,s=null!=t?t+i:-i;x.style.setProperty("--popover-transform-origin",{top:"".concat(a,"px calc(100% + ").concat(i,"px)"),bottom:"".concat(a,"px ").concat(-i,"px"),left:"calc(100% + ".concat(n,"px) ").concat(s,"px"),right:"".concat(-n,"px ").concat(s,"px")}[r]),Object.assign(o.style,{left:null!=e?"".concat(e,"px"):"",top:null!=t?"".concat(t,"px"):"",[r]:"100%"})}},n=function(e,t,r,n){let i;void 0===n&&(n={});let{ancestorScroll:a=!0,ancestorResize:o=!0,elementResize:s="function"==typeof ResizeObserver,layoutShift:l="function"==typeof IntersectionObserver,animationFrame:u=!1}=n,c=s1(e),d=a||o?[...c?sz(c):[],...sz(t)]:[];d.forEach(e=>{a&&e.addEventListener("scroll",r,{passive:!0}),o&&e.addEventListener("resize",r)});let f=c&&l?function(e,t){let r,n=null,i=sD(e);function a(){var e;clearTimeout(r),null==(e=n)||e.disconnect(),n=null}return!function o(s,l){void 0===s&&(s=!1),void 0===l&&(l=1),a();let u=e.getBoundingClientRect(),{left:c,top:d,width:f,height:h}=u;if(s||t(),!f||!h)return;let m=sa(d),p=sa(i.clientWidth-(c+f)),A={rootMargin:-m+"px "+-p+"px "+-sa(i.clientHeight-(d+h))+"px "+-sa(c)+"px",threshold:sn(0,sr(1,l))||1},g=!0;function B(t){let n=t[0].intersectionRatio;if(n!==l){if(!g)return o();n?o(!1,n):r=setTimeout(()=>{o(!1,1e-7)},1e3)}1!==n||la(u,e.getBoundingClientRect())||o(),g=!1}try{n=new IntersectionObserver(B,{...A,root:i.ownerDocument})}catch(e){n=new IntersectionObserver(B,A)}n.observe(e)}(!0),a}(c,r):null,h=-1,m=null;s&&(m=new ResizeObserver(e=>{let[n]=e;n&&n.target===c&&m&&(m.unobserve(t),cancelAnimationFrame(h),h=requestAnimationFrame(()=>{var e;null==(e=m)||e.observe(t)})),r()}),c&&!u&&m.observe(c),m.observe(t));let p=u?s3(e):null;return u&&function t(){let n=s3(e);p&&!la(p,n)&&r(),p=n,i=requestAnimationFrame(t)}(),r(),()=>{var e;d.forEach(e=>{a&&e.removeEventListener("scroll",r),o&&e.removeEventListener("resize",r)}),null==f||f(),null==(e=m)||e.disconnect(),m=null,u&&cancelAnimationFrame(i)}}(e,x,async()=>{O?(await H({updatePosition:r}),D(!0)):await r()},{elementResize:"function"==typeof ResizeObserver});return()=>{D(!1),n()}},[t,w,x,b,M,x,S,T,L,s,l,u,c,d,f,h,m,p,A,P,O,H]),iN(()=>{if(!T||!L||!(null==x?void 0:x.isConnected)||!(null==F?void 0:F.isConnected))return;let e=()=>{x.style.zIndex=getComputedStyle(F).zIndex};e();let t=requestAnimationFrame(()=>{t=requestAnimationFrame(e)});return()=>cancelAnimationFrame(t)},[T,L,x,F]);let k=s?"fixed":"absolute";return C=iY(C,e=>(0,es.jsx)("div",{...o,style:{position:k,top:0,left:0,width:"max-content",...null==o?void 0:o.style},ref:null==t?void 0:t.setPopoverElement,children:e}),[t,k,o]),C={"data-placing":!I||void 0,...C=iY(C,e=>(0,es.jsx)(aK,{value:t,children:e}),[t]),style:{position:"relative",...C.style}},C=se({store:t,modal:r,portal:n,preserveTabOrder:i,preserveTabOrderAnchor:E||M,autoFocusOnShow:I&&a,...C,portalRef:G})});st(i8(function(e){return i5("div",lu(e))}),aJ);var lc=i6(function(e){let{store:t,modal:r,tabIndex:n,alwaysVisible:i,autoFocusOnHide:a=!0,hideOnInteractOutside:o=!0,...s}=e,l=aY();iE(t=t||l,!1);let u=t.useState("baseElement"),c=(0,el.useRef)(!1),d=om(t.tag,e=>null==e?void 0:e.renderedItems.length);return s=oT({store:t,alwaysVisible:i,...s}),s=lu({store:t,modal:r,alwaysVisible:i,backdrop:!1,autoFocusOnShow:!1,finalFocus:u,preserveTabOrderAnchor:null,unstable_treeSnapshotKey:d,...s,getPersistentElements(){var e;let n=(null==(e=s.getPersistentElements)?void 0:e.call(s))||[];if(!r||!t)return n;let{contentElement:i,baseElement:a}=t.getState();if(!a)return n;let o=it(a),l=[];if((null==i?void 0:i.id)&&l.push('[aria-controls~="'.concat(i.id,'"]')),(null==a?void 0:a.id)&&l.push('[aria-controls~="'.concat(a.id,'"]')),!l.length)return[...n,a];let u=l.join(",");return[...n,...o.querySelectorAll(u)]},autoFocusOnHide:e=>!ix(a,e)&&(!c.current||(c.current=!1,!1)),hideOnInteractOutside(e){var r,n;let i=null==t?void 0:t.getState(),a=null==(r=null==i?void 0:i.contentElement)?void 0:r.id,s=null==(n=null==i?void 0:i.baseElement)?void 0:n.id;if(function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;n'[aria-controls~="'.concat(e,'"]')).join(", ");return!!t&&e.matches(t)}return!1}(e.target,a,s))return!1;let l="function"==typeof o?o(e):o;return l&&(c.current="click"===e.type),l}})}),ld=st(i8(function(e){return i5("div",lc(e))}),aY);(0,el.createContext)(null),(0,el.createContext)(null);var lf=i4([ai],[aa]),lh=lf.useContext;lf.useScopedContext,lf.useProviderContext,lf.ContextProvider,lf.ScopedContextProvider;var lm={id:null};function lp(e,t){return e.find(e=>t?!e.disabled&&e.id!==t:!e.disabled)}function lA(e,t){return e.filter(e=>e.rowId===t)}function lg(e){let t=[];for(let r of e){let e=t.find(e=>{var t;return(null==(t=e[0])?void 0:t.rowId)===r.rowId});e?e.push(r):t.push([r])}return t}function lv(e){let t=0;for(let{length:r}of e)r>t&&(t=r);return t}var lB=iD()&&iR();function lC(){let{tag:e,...t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=a7(t.store,function(e){for(var t=arguments.length,r=Array(t>1?t-1:0),n=1;n0&&void 0!==arguments[0]?arguments[0]:{},r=null==(e=t.store)?void 0:e.getState(),n=function(){var e,t;let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};oe(r,r.store);let n=null==(e=r.store)?void 0:e.getState(),i=iT(r.items,null==n?void 0:n.items,r.defaultItems,[]),a=new Map(i.map(e=>[e.id,e])),o={items:i,renderedItems:iT(null==n?void 0:n.renderedItems,[])},s=null==(t=r.store)?void 0:t.__unstablePrivateStore,l=a9({items:i,renderedItems:o.renderedItems},s),u=a9(o,r.store),c=e=>{let t=function(e,t){let r=e.map((e,t)=>[t,e]),n=!1;return(r.sort((e,r)=>{var i;let[a,o]=e,[s,l]=r,u=t(o),c=t(l);return u!==c&&u&&c?(i=u,c.compareDocumentPosition(i)&Node.DOCUMENT_POSITION_PRECEDING)?(a>s&&(n=!0),-1):(a{let[t,r]=e;return r}):e}(e,e=>e.element);l.setState("renderedItems",t),u.setState("renderedItems",t)};a2(u,()=>a8(l)),a2(l,()=>a6(l,["items"],e=>{u.setState("items",e.items)})),a2(l,()=>a6(l,["renderedItems"],e=>{let t=!0,r=requestAnimationFrame(()=>{let{renderedItems:t}=u.getState();e.renderedItems!==t&&c(e.renderedItems)});if("function"!=typeof IntersectionObserver)return()=>cancelAnimationFrame(r);let n=new IntersectionObserver(()=>{if(t){t=!1;return}cancelAnimationFrame(r),r=requestAnimationFrame(()=>c(e.renderedItems))},{root:function(e){var t;let r=e.find(e=>!!e.element),n=[...e].reverse().find(e=>!!e.element),i=null==(t=null==r?void 0:r.element)?void 0:t.parentElement;for(;i&&(null==n?void 0:n.element);){let e=i;if(n&&e.contains(n.element))return i;i=i.parentElement}return it(i).body}(e.renderedItems)});for(let t of e.renderedItems)t.element&&n.observe(t.element);return()=>{cancelAnimationFrame(r),n.disconnect()}}));let d=function(e,t){let r,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return t(t=>{let n=t.findIndex(t=>{let{id:r}=t;return r===e.id}),i=t.slice();if(-1!==n){let o={...r=t[n],...e};i[n]=o,a.set(e.id,o)}else i.push(e),a.set(e.id,e);return i}),()=>{t(t=>{if(!r)return n&&a.delete(e.id),t.filter(t=>{let{id:r}=t;return r!==e.id});let i=t.findIndex(t=>{let{id:r}=t;return r===e.id});if(-1===i)return t;let o=t.slice();return o[i]=r,a.set(e.id,r),o})}},f=e=>d(e,e=>l.setState("items",e),!0);return{...u,registerItem:f,renderItem:e=>ib(f(e),d(e,e=>l.setState("renderedItems",e))),item:e=>{if(!e)return null;let t=a.get(e);if(!t){let{items:r}=l.getState();(t=r.find(t=>t.id===e))&&a.set(e,t)}return t||null},__unstablePrivateStore:l}}(t),i=iT(t.activeId,null==r?void 0:r.activeId,t.defaultActiveId),a=a9({...n.getState(),id:iT(t.id,null==r?void 0:r.id,"id-".concat(Math.random().toString(36).slice(2,8))),activeId:i,baseElement:iT(null==r?void 0:r.baseElement,null),includesBaseElement:iT(t.includesBaseElement,null==r?void 0:r.includesBaseElement,null===i),moves:iT(null==r?void 0:r.moves,0),orientation:iT(t.orientation,null==r?void 0:r.orientation,"both"),rtl:iT(t.rtl,null==r?void 0:r.rtl,!1),virtualFocus:iT(t.virtualFocus,null==r?void 0:r.virtualFocus,!1),focusLoop:iT(t.focusLoop,null==r?void 0:r.focusLoop,!1),focusWrap:iT(t.focusWrap,null==r?void 0:r.focusWrap,!1),focusShift:iT(t.focusShift,null==r?void 0:r.focusShift,!1)},n,t.store);a2(a,()=>a5(a,["renderedItems","activeId"],e=>{a.setState("activeId",t=>{var r;return void 0!==t?t:null==(r=lp(e.renderedItems))?void 0:r.id})}));let o=function(){var e,t;let r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"next",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=a.getState(),{skip:o=0,activeId:s=i.activeId,focusShift:l=i.focusShift,focusLoop:u=i.focusLoop,focusWrap:c=i.focusWrap,includesBaseElement:d=i.includesBaseElement,renderedItems:f=i.renderedItems,rtl:h=i.rtl}=n,m="up"===r||"down"===r,p="next"===r||"down"===r,A=m?aw(function(e,t,r){let n=lv(e);for(let i of e)for(let e=0;ee.id===s);if(!g)return null==(t=lp(A))?void 0:t.id;let B=A.some(e=>e.rowId),C=A.indexOf(g),y=A.slice(C+1),b=lA(y,g.rowId);if(o){let e=b.filter(e=>s?!e.disabled&&e.id!==s:!e.disabled),t=e.slice(o)[0]||e[e.length-1];return null==t?void 0:t.id}let M=u&&(m?"horizontal"!==u:"vertical"!==u),E=B&&c&&(m?"horizontal"!==c:"vertical"!==c),x=p?(!B||m)&&M&&d:!!m&&d;if(M){let e=lp(function(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=e.findIndex(e=>e.id===t);return[...e.slice(n+1),...r?[lm]:[],...e.slice(0,n)]}(E&&!x?A:lA(A,g.rowId),s,x),s);return null==e?void 0:e.id}if(E){let e=lp(x?b:y,s);return x?(null==e?void 0:e.id)||null:null==e?void 0:e.id}let F=lp(b,s);return!F&&x?null:null==F?void 0:F.id};return{...n,...a,setBaseElement:e=>a.setState("baseElement",e),setActiveId:e=>a.setState("activeId",e),move:e=>{void 0!==e&&(a.setState("activeId",e),a.setState("moves",e=>e+1))},first:()=>{var e;return null==(e=lp(a.getState().renderedItems))?void 0:e.id},last:()=>{var e;return null==(e=lp(aR(a.getState().renderedItems)))?void 0:e.id},next:e=>(void 0!==e&&"number"==typeof e&&(e={skip:e}),o("next",e)),previous:e=>(void 0!==e&&"number"==typeof e&&(e={skip:e}),o("previous",e)),down:e=>(void 0!==e&&"number"==typeof e&&(e={skip:e}),o("down",e)),up:e=>(void 0!==e&&"number"==typeof e&&(e={skip:e}),o("up",e))}}({...t,activeId:a,includesBaseElement:iT(t.includesBaseElement,null==i?void 0:i.includesBaseElement,!0),orientation:iT(t.orientation,null==i?void 0:i.orientation,"vertical"),focusLoop:iT(t.focusLoop,null==i?void 0:i.focusLoop,!0),focusWrap:iT(t.focusWrap,null==i?void 0:i.focusWrap,!0),virtualFocus:iT(t.virtualFocus,null==i?void 0:i.virtualFocus,!0)}),s=function(){let{popover:e,...t}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=a7(t.store,a4(e,["arrowElement","anchorElement","contentElement","popoverElement","disclosureElement"]));oe(t,r);let n=null==r?void 0:r.getState(),i=o6({...t,store:r}),a=iT(t.placement,null==n?void 0:n.placement,"bottom"),o=a9({...i.getState(),placement:a,currentPlacement:a,anchorElement:iT(null==n?void 0:n.anchorElement,null),popoverElement:iT(null==n?void 0:n.popoverElement,null),arrowElement:iT(null==n?void 0:n.arrowElement,null),rendered:Symbol("rendered")},i,r);return{...i,...o,setAnchorElement:e=>o.setState("anchorElement",e),setPopoverElement:e=>o.setState("popoverElement",e),setArrowElement:e=>o.setState("arrowElement",e),render:()=>o.setState("rendered",Symbol("rendered"))}}({...t,placement:iT(t.placement,null==i?void 0:i.placement,"bottom-start")}),l=iT(t.value,null==i?void 0:i.value,t.defaultValue,""),u=iT(t.selectedValue,null==i?void 0:i.selectedValue,null==n?void 0:n.values,t.defaultSelectedValue,""),c=Array.isArray(u),d={...o.getState(),...s.getState(),value:l,selectedValue:u,resetValueOnSelect:iT(t.resetValueOnSelect,null==i?void 0:i.resetValueOnSelect,c),resetValueOnHide:iT(t.resetValueOnHide,null==i?void 0:i.resetValueOnHide,c&&!e),activeValue:null==i?void 0:i.activeValue},f=a9(d,o,s,r);return lB&&a2(f,()=>a5(f,["virtualFocus"],()=>{f.setState("virtualFocus",!1)})),a2(f,()=>{if(e)return ib(a5(f,["selectedValue"],t=>{Array.isArray(t.selectedValue)&&e.setValues(t.selectedValue)}),a5(e,["values"],e=>{f.setState("selectedValue",e.values)}))}),a2(f,()=>a5(f,["resetValueOnHide","mounted"],e=>{e.resetValueOnHide&&(e.mounted||f.setState("value",l))})),a2(f,()=>a5(f,["open"],e=>{e.open||(f.setState("activeId",a),f.setState("moves",0))})),a2(f,()=>a5(f,["moves","activeId"],(e,t)=>{e.moves===t.moves&&f.setState("activeValue",void 0)})),a2(f,()=>a6(f,["moves","renderedItems"],(e,t)=>{if(e.moves===t.moves)return;let{activeId:r}=f.getState(),n=o.item(r);f.setState("activeValue",null==n?void 0:n.value)})),{...s,...o,...f,tag:e,setValue:e=>f.setState("value",e),resetValue:()=>f.setState("value",d.value),setSelectedValue:e=>f.setState("selectedValue",e)}}function ly(){var e,t,r,n,i,a;let o=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},[s,l]=og(lC,o=function(e){var t;let r=lh();return{id:iW((t=e={...e,tag:void 0!==e.tag?e.tag:r}).id),...t}}(o));return iV(l,[(e=o).tag]),oA(s,e,"value","setValue"),oA(s,e,"selectedValue","setSelectedValue"),oA(s,e,"resetValueOnHide"),oA(s,e,"resetValueOnSelect"),Object.assign((n=s,iV(i=l,[(a=e).popover]),oA(n,a,"placement"),t=o8(n,i,a),r=t,iV(l,[e.store]),oA(r,e,"items","setItems"),oA(t=r,e,"activeId","setActiveId"),oA(t,e,"includesBaseElement"),oA(t,e,"virtualFocus"),oA(t,e,"orientation"),oA(t,e,"rtl"),oA(t,e,"focusLoop"),oA(t,e,"focusWrap"),oA(t,e,"focusShift"),t),{tag:e.tag})}function lb(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=ly(e);return(0,es.jsx)(aZ,{value:t,children:e.children})}var lM=(0,el.createContext)(void 0),lE=i6(function(e){let[t,r]=(0,el.useState)();return iS(e={role:"group","aria-labelledby":t,...e=iY(e,e=>(0,es.jsx)(lM.Provider,{value:r,children:e}),[])})});i8(function(e){return i5("div",lE(e))});var lx=i6(function(e){let{store:t,...r}=e;return lE(r)});i8(function(e){return i5("div",lx(e))});var lF=i6(function(e){let{store:t,...r}=e,n=aq();return iE(t=t||n,!1),"grid"===im(t.useState("contentElement"))&&(r={role:"rowgroup",...r}),r=lx({store:t,...r})}),lS=i8(function(e){return i5("div",lF(e))}),lT=i6(function(e){let t=(0,el.useContext)(lM),r=iW(e.id);return iN(()=>(null==t||t(r),()=>null==t?void 0:t(void 0)),[t,r]),iS(e={id:r,"aria-hidden":!0,...e})});i8(function(e){return i5("div",lT(e))});var lw=i6(function(e){let{store:t,...r}=e;return lT(r)});i8(function(e){return i5("div",lw(e))});var lR=i6(function(e){return lw(e)}),lI=i8(function(e){return i5("div",lR(e))}),lD=e.i(38360);let lG={CASE_SENSITIVE_EQUAL:7,EQUAL:6,STARTS_WITH:5,WORD_STARTS_WITH:4,CONTAINS:3,ACRONYM:2,MATCHES:1,NO_MATCH:0},lL=(e,t)=>String(e.rankedValue).localeCompare(String(t.rankedValue));function lP(e,t){let r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},{keys:n,threshold:i=lG.MATCHES,baseSort:a=lL,sorter:o=e=>e.sort((e,t)=>(function(e,t,r){let{rank:n,keyIndex:i}=e,{rank:a,keyIndex:o}=t;return n!==a?n>a?-1:1:i===o?r(e,t):i{let{rank:n,rankedValue:i,keyIndex:a,keyThreshold:o}=e,{itemValue:s,attributes:l}=t,d=lH(s,u,c),f=i,{minRanking:h,maxRanking:m,threshold:p}=l;return d=lG.MATCHES?d=h:d>m&&(d=m),d>n&&(n=d,a=r,o=p,f=s),{rankedValue:f,rank:n,keyIndex:a,keyThreshold:o}},{rankedValue:s,rank:lG.NO_MATCH,keyIndex:-1,keyThreshold:c.threshold}):{rankedValue:s,rank:lH(s,u,c),keyIndex:-1,keyThreshold:c.threshold}),{rank:f,keyThreshold:h=i}=d;return f>=h&&e.push({...d,item:a,index:o}),e},[])).map(e=>{let{item:t}=e;return t})}function lH(e,t,r){if(e=lO(e,r),(t=lO(t,r)).length>e.length)return lG.NO_MATCH;if(e===t)return lG.CASE_SENSITIVE_EQUAL;let n=function*(e,t){let r=-1;for(;(r=e.indexOf(t,r+1))>-1;)yield r;return -1}(e=e.toLowerCase(),t=t.toLowerCase()),i=n.next(),a=i.value;if(e.length===t.length&&0===a)return lG.EQUAL;if(0===a)return lG.STARTS_WITH;let o=i;for(;!o.done;){if(o.value>0&&" "===e[o.value-1])return lG.WORD_STARTS_WITH;o=n.next()}return a>0?lG.CONTAINS:1===t.length?lG.NO_MATCH:(function(e){let t="",r=" ";for(let n=0;n-1))return lG.NO_MATCH;var o=n-a;let s=r/t.length;return lG.MATCHES+1/o*s}(e,t)}function lO(e,t){let{keepDiacritics:r}=t;return e="".concat(e),r||(e=(0,lD.default)(e)),e}lP.rankings=lG;let lk={maxRanking:1/0,minRanking:-1/0};var l_=e.i(29402);let lU=new Set(["SkiFree","SkiFree_Daily","SkiFree_Randomizer"]),lj={"missions.vl2":"Official","TR2final105-client.vl2":"Team Rabbit 2","z_mappacks/CTF/Classic_maps_v1.vl2":"Classic","z_mappacks/CTF/DynamixFinalPack.vl2":"Official","z_mappacks/CTF/KryMapPack_b3EDIT.vl2":"KryMapPack","z_mappacks/CTF/S5maps.vl2":"S5","z_mappacks/CTF/S8maps.vl2":"S8","z_mappacks/CTF/TWL-MapPack.vl2":"TWL","z_mappacks/CTF/TWL-MapPackEDIT.vl2":"TWL","z_mappacks/CTF/TWL2-MapPack.vl2":"TWL2","z_mappacks/CTF/TWL2-MapPackEDIT.vl2":"TWL2","z_mappacks/TWL_T2arenaOfficialMaps.vl2":"Arena","z_mappacks/z_DMP2-V0.6.vl2":"DMP2 (Discord Map Pack)","z_mappacks/zDMP-4.7.3DX.vl2":"DMP (Discord Map Pack)"},lJ={"z_mappacks/DM":"DM","z_mappacks/LCTF":"LCTF","z_mappacks/Lak":"LakRabbit"},lN=(0,nR.getMissionList)().filter(e=>!lU.has(e)).map(e=>{var t,r;let n=(0,nR.getMissionInfo)(e),[i]=(0,nR.getSourceAndPath)(n.resourcePath),a=(e=>{let t=e.match(/^(.*)(\/[^/]+)$/);return t?t[1]:""})(i),o=null!=(r=null!=(t=lj[i])?t:lJ[a])?r:null;return{resourcePath:n.resourcePath,missionName:e,displayName:n.displayName,sourcePath:i,groupName:o,missionTypes:n.missionTypes}}),lK=new Map(lN.map(e=>[e.missionName,e])),lQ=function(e){let t=new Map;for(let n of e){var r;let e=null!=(r=t.get(n.groupName))?r:[];e.push(n),t.set(n.groupName,e)}return t.forEach((e,r)=>{t.set(r,(0,l_.default)(e,[e=>(e.displayName||e.missionName).toLowerCase()],["asc"]))}),(0,l_.default)(Array.from(t.entries()),[e=>{let[t]=e;return"Official"===t?0:null==t?2:1},e=>{let[t]=e;return t?t.toLowerCase():""}],["asc","asc"])}(lN),lW="undefined"!=typeof navigator&&/Mac|iPhone|iPad|iPod/.test(navigator.platform);function lV(e){let{mission:t}=e;return(0,es.jsxs)(es.Fragment,{children:[(0,es.jsxs)("span",{className:"MissionSelect-itemHeader",children:[(0,es.jsx)("span",{className:"MissionSelect-itemName",children:t.displayName||t.missionName}),t.missionTypes.length>0&&(0,es.jsx)("span",{className:"MissionSelect-itemTypes",children:t.missionTypes.map(e=>(0,es.jsx)("span",{className:"MissionSelect-itemType",children:e},e))})]}),(0,es.jsx)("span",{className:"MissionSelect-itemMissionName",children:t.missionName})]})}function lX(e){let{value:t,onChange:r}=e,[n,i]=(0,el.useState)(""),a=(0,el.useRef)(null),o=ly({resetValueOnHide:!0,selectedValue:t,setSelectedValue:e=>{e&&r(e)},setValue:e=>{(0,el.startTransition)(()=>i(e))}});(0,el.useEffect)(()=>{let e=e=>{if("k"===e.key&&(e.metaKey||e.ctrlKey)){var t;e.preventDefault(),null==(t=a.current)||t.focus(),o.show()}};return document.addEventListener("keydown",e),()=>document.removeEventListener("keydown",e)},[o]);let s=lK.get(t),l=(0,el.useMemo)(()=>n?{type:"flat",missions:lP(lN,n,{keys:["displayName","missionName"]})}:{type:"grouped",groups:lQ},[n]),u=s?s.displayName||s.missionName:t,c="flat"===l.type?0===l.missions.length:0===l.groups.length;return(0,es.jsxs)(lb,{store:o,children:[(0,es.jsxs)("div",{className:"MissionSelect-inputWrapper",children:[(0,es.jsx)(oi,{ref:a,autoSelect:!0,placeholder:u,className:"MissionSelect-input",onFocus:()=>{document.exitPointerLock(),o.show()}}),(0,es.jsx)("kbd",{className:"MissionSelect-shortcut",children:lW?"⌘K":"^K"})]}),(0,es.jsx)(ld,{gutter:4,fitViewport:!0,className:"MissionSelect-popover",children:(0,es.jsxs)(ow,{className:"MissionSelect-list",children:["flat"===l.type?l.missions.map(e=>(0,es.jsx)(oy,{value:e.missionName,className:"MissionSelect-item",focusOnHover:!0,children:(0,es.jsx)(lV,{mission:e})},e.missionName)):l.groups.map(e=>{let[t,r]=e;return t?(0,es.jsxs)(lS,{className:"MissionSelect-group",children:[(0,es.jsx)(lI,{className:"MissionSelect-groupLabel",children:t}),r.map(e=>(0,es.jsx)(oy,{value:e.missionName,className:"MissionSelect-item",focusOnHover:!0,children:(0,es.jsx)(lV,{mission:e})},e.missionName))]},t):(0,es.jsx)(el.Fragment,{children:r.map(e=>(0,es.jsx)(oy,{value:e.missionName,className:"MissionSelect-item",focusOnHover:!0,children:(0,es.jsx)(lV,{mission:e})},e.missionName))},"ungrouped")}),c&&(0,es.jsx)("div",{className:"MissionSelect-noResults",children:"No missions found"})]})})]})}function lq(e){let{missionName:t,onChangeMission:r}=e,{fogEnabled:n,setFogEnabled:i,fov:a,setFov:o,audioEnabled:s,setAudioEnabled:l,animationEnabled:u,setAnimationEnabled:c}=(0,tD.useSettings)(),{speedMultiplier:d,setSpeedMultiplier:f}=(0,tD.useControls)(),{debugMode:h,setDebugMode:m}=(0,tD.useDebug)();return(0,es.jsxs)("div",{id:"controls",onKeyDown:e=>e.stopPropagation(),onPointerDown:e=>e.stopPropagation(),onClick:e=>e.stopPropagation(),children:[(0,es.jsx)(lX,{value:t,onChange:r}),(0,es.jsxs)("div",{className:"CheckboxField",children:[(0,es.jsx)("input",{id:"fogInput",type:"checkbox",checked:n,onChange:e=>{i(e.target.checked)}}),(0,es.jsx)("label",{htmlFor:"fogInput",children:"Fog?"})]}),(0,es.jsxs)("div",{className:"CheckboxField",children:[(0,es.jsx)("input",{id:"audioInput",type:"checkbox",checked:s,onChange:e=>{l(e.target.checked)}}),(0,es.jsx)("label",{htmlFor:"audioInput",children:"Audio?"})]}),(0,es.jsxs)("div",{className:"CheckboxField",children:[(0,es.jsx)("input",{id:"animationInput",type:"checkbox",checked:u,onChange:e=>{c(e.target.checked)}}),(0,es.jsx)("label",{htmlFor:"animationInput",children:"Animation?"})]}),(0,es.jsxs)("div",{className:"CheckboxField",children:[(0,es.jsx)("input",{id:"debugInput",type:"checkbox",checked:h,onChange:e=>{m(e.target.checked)}}),(0,es.jsx)("label",{htmlFor:"debugInput",children:"Debug?"})]}),(0,es.jsxs)("div",{className:"Field",children:[(0,es.jsx)("label",{htmlFor:"fovInput",children:"FOV"}),(0,es.jsx)("input",{id:"fovInput",type:"range",min:75,max:120,step:5,value:a,onChange:e=>o(parseInt(e.target.value))}),(0,es.jsx)("output",{htmlFor:"speedInput",children:a})]}),(0,es.jsxs)("div",{className:"Field",children:[(0,es.jsx)("label",{htmlFor:"speedInput",children:"Speed"}),(0,es.jsx)("input",{id:"speedInput",type:"range",min:.1,max:5,step:.05,value:d,onChange:e=>f(parseFloat(e.target.value))})]})]})}let lY=el.forwardRef((e,t)=>{let{envMap:r,resolution:n=256,frames:i=1/0,makeDefault:a,children:o,...s}=e,l=(0,tx.useThree)(e=>{let{set:t}=e;return t}),u=(0,tx.useThree)(e=>{let{camera:t}=e;return t}),c=(0,tx.useThree)(e=>{let{size:t}=e;return t}),d=el.useRef(null);el.useImperativeHandle(t,()=>d.current,[]);let f=el.useRef(null),h=function(e,t,r){let n=(0,tx.useThree)(e=>e.size),i=(0,tx.useThree)(e=>e.viewport),a="number"==typeof e?e:n.width*i.dpr,o=n.height*i.dpr,s=("number"==typeof e?void 0:e)||{},{samples:l=0,depth:u,...c}=s,d=null!=u?u:s.depthBuffer,f=el.useMemo(()=>{let e=new ef.WebGLRenderTarget(a,o,{minFilter:ef.LinearFilter,magFilter:ef.LinearFilter,type:ef.HalfFloatType,...c});return d&&(e.depthTexture=new ef.DepthTexture(a,o,ef.FloatType)),e.samples=l,e},[]);return el.useLayoutEffect(()=>{f.setSize(a,o),l&&(f.samples=l)},[l,f,a,o]),el.useEffect(()=>()=>f.dispose(),[]),f}(n);el.useLayoutEffect(()=>{s.manual||(d.current.aspect=c.width/c.height)},[c,s]),el.useLayoutEffect(()=>{d.current.updateProjectionMatrix()});let m=0,p=null,A="function"==typeof o;return(0,tE.useFrame)(e=>{A&&(i===1/0||m{if(a)return l(()=>({camera:d.current})),()=>l(()=>({camera:u}))},[d,a,l]),el.createElement(el.Fragment,null,el.createElement("perspectiveCamera",(0,tq.default)({ref:d},s),!A&&o),el.createElement("group",{ref:f},A&&o(h.texture)))});function lZ(){let{fov:e}=(0,tD.useSettings)();return(0,es.jsx)(lY,{makeDefault:!0,position:[0,256,0],fov:e})}var lz=e.i(51434),l$=e.i(81405);function l0(e,t){"function"==typeof e?e(t):null!=e&&(e.current=t)}function l1(e){let{showPanel:t=0,className:r,parent:n}=e,i=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],r=arguments.length>2?arguments[2]:void 0,[n,i]=el.useState();return el.useLayoutEffect(()=>{let t=e();return i(t),l0(r,t),()=>l0(r,null)},t),n}(()=>new l$.default,[]);return el.useEffect(()=>{if(i){let e=n&&n.current||document.body;i.showPanel(t),null==e||e.appendChild(i.dom);let a=(null!=r?r:"").split(" ").filter(e=>e);a.length&&i.dom.classList.add(...a);let o=(0,ec.j)(()=>i.begin()),s=(0,ec.k)(()=>i.end());return()=>{a.length&&i.dom.classList.remove(...a),null==e||e.removeChild(i.dom),o(),s()}}},[n,i,r,t]),null}var l9=e.i(60099);function l2(){let{debugMode:e}=(0,tD.useDebug)(),t=(0,el.useRef)(null);return(0,el.useEffect)(()=>{let e=t.current;e&&e.setColors("rgb(153, 255, 0)","rgb(0, 153, 255)","rgb(255, 153, 0)")}),e?(0,es.jsxs)(es.Fragment,{children:[(0,es.jsx)(l1,{className:"StatsPanel"}),(0,es.jsx)("axesHelper",{ref:t,args:[70],renderOrder:999,children:(0,es.jsx)("lineBasicMaterial",{depthTest:!1,depthWrite:!1,fog:!1,vertexColors:!0})}),(0,es.jsx)(l9.Html,{position:[80,0,0],center:!0,children:(0,es.jsx)("span",{className:"AxisLabel","data-axis":"y",children:"Y"})}),(0,es.jsx)(l9.Html,{position:[0,80,0],center:!0,children:(0,es.jsx)("span",{className:"AxisLabel","data-axis":"z",children:"Z"})}),(0,es.jsx)(l9.Html,{position:[0,0,80],center:!0,children:(0,es.jsx)("span",{className:"AxisLabel","data-axis":"x",children:"X"})})]}):null}let l8=new nN,l3={toneMapping:ef.NoToneMapping,outputColorSpace:ef.SRGBColorSpace};function l5(){let e=(0,eu.useSearchParams)(),t=(0,eu.useRouter)(),[r,n]=(0,el.useState)(e.get("mission")||"TWL2_WoodyMyrk"),[i,a]=(0,el.useState)(0),[o,s]=(0,el.useState)(!0),l=i<1;(0,el.useEffect)(()=>{if(l)s(!0);else{let e=setTimeout(()=>s(!1),500);return()=>clearTimeout(e)}},[l]),(0,el.useEffect)(()=>(window.setMissionName=n,window.getMissionList=nR.getMissionList,window.getMissionInfo=nR.getMissionInfo,()=>{delete window.setMissionName,delete window.getMissionList,delete window.getMissionInfo}),[]),(0,el.useEffect)(()=>{let e=new URLSearchParams;e.set("mission",r),t.replace("?".concat(e.toString()),{scroll:!1})},[r,t]);let u=(0,el.useCallback)(function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;a(t)},[]);return(0,es.jsx)(tA,{client:l8,children:(0,es.jsx)("main",{children:(0,es.jsxs)(tD.SettingsProvider,{children:[(0,es.jsxs)("div",{id:"canvasContainer",children:[o&&(0,es.jsxs)("div",{id:"loadingIndicator","data-complete":!l,children:[(0,es.jsx)("div",{className:"LoadingSpinner"}),(0,es.jsx)("div",{className:"LoadingProgress",children:(0,es.jsx)("div",{className:"LoadingProgress-bar",style:{width:"".concat(100*i,"%")}})}),(0,es.jsxs)("div",{className:"LoadingProgress-text",children:[Math.round(100*i),"%"]})]}),(0,es.jsx)(ev,{shadows:!0,frameloop:"always",gl:l3,children:(0,es.jsx)(nM,{children:(0,es.jsxs)(lz.AudioProvider,{children:[(0,es.jsx)(nL,{name:r,onLoadingChange:u},r),(0,es.jsx)(lZ,{}),(0,es.jsx)(l2,{}),(0,es.jsx)(n7,{})]})})})]}),(0,es.jsx)(lq,{missionName:r,onChangeMission:n})]})})})}function l6(){return(0,es.jsx)(el.Suspense,{children:(0,es.jsx)(l5,{})})}}]); \ No newline at end of file diff --git a/docs/_next/static/nCiBD1gBZD0BBktWqKGDD/_buildManifest.js b/docs/_next/static/nuFCeK7OZLd9PDcpp99Xm/_buildManifest.js similarity index 100% rename from docs/_next/static/nCiBD1gBZD0BBktWqKGDD/_buildManifest.js rename to docs/_next/static/nuFCeK7OZLd9PDcpp99Xm/_buildManifest.js diff --git a/docs/_next/static/nCiBD1gBZD0BBktWqKGDD/_clientMiddlewareManifest.json b/docs/_next/static/nuFCeK7OZLd9PDcpp99Xm/_clientMiddlewareManifest.json similarity index 100% rename from docs/_next/static/nCiBD1gBZD0BBktWqKGDD/_clientMiddlewareManifest.json rename to docs/_next/static/nuFCeK7OZLd9PDcpp99Xm/_clientMiddlewareManifest.json diff --git a/docs/_next/static/nCiBD1gBZD0BBktWqKGDD/_ssgManifest.js b/docs/_next/static/nuFCeK7OZLd9PDcpp99Xm/_ssgManifest.js similarity index 100% rename from docs/_next/static/nCiBD1gBZD0BBktWqKGDD/_ssgManifest.js rename to docs/_next/static/nuFCeK7OZLd9PDcpp99Xm/_ssgManifest.js diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/Starfallen.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/Starfallen.glb index 7439f4fc..be79aa6c 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/Starfallen.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/Starfallen.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/bbase_ccb5.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/bbase_ccb5.glb index 2c1ff8e7..bec6ad4c 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/bbase_ccb5.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/bbase_ccb5.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/bbase_nefhillside.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/bbase_nefhillside.glb index 0ee3e44a..58ac4316 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/bbase_nefhillside.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/bbase_nefhillside.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/bbunke.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/bbunke.glb index 5ef65e32..5bafadd4 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/bbunke.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/bbunke.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/bmisc_nefledge1.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/bmisc_nefledge1.glb index 29d4d0a0..cd8c367c 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/bmisc_nefledge1.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/bmisc_nefledge1.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/bmisc_nefvbay.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/bmisc_nefvbay.glb index 364fac0c..b52372fd 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/bmisc_nefvbay.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/bmisc_nefvbay.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/btf_turretplatform_c.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/btf_turretplatform_c.glb index 889739f3..628c610a 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/btf_turretplatform_c.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/btf_turretplatform_c.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_broadside_nef.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_broadside_nef.glb index 47e2ec21..932c7ba7 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_broadside_nef.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_broadside_nef.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_nefRaindance.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_nefRaindance.glb index 9aa08c2c..c6dd4a16 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_nefRaindance.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_nefRaindance.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_neffloat1.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_neffloat1.glb index 895ec01b..7ff85a08 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_neffloat1.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_neffloat1.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_neffloat2.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_neffloat2.glb index 0d1d8ef0..9255f86d 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_neffloat2.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_neffloat2.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_neficeridge.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_neficeridge.glb index 0f14cf85..96514a10 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_neficeridge.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_neficeridge.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_tokrz_scarabrae.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_tokrz_scarabrae.glb index 756ee582..ad1e23ed 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_tokrz_scarabrae.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbase_tokrz_scarabrae.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_nef_invbunk1.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_nef_invbunk1.glb index cce99980..503a0374 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_nef_invbunk1.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_nef_invbunk1.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_nefcliffside.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_nefcliffside.glb index cdee6144..10b3bd54 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_nefcliffside.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_nefcliffside.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_nefdcbunk.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_nefdcbunk.glb index 0bfe8210..f657101e 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_nefdcbunk.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_nefdcbunk.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_nefsmall.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_nefsmall.glb index 492f5f79..3c22459f 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_nefsmall.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_nefsmall.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_snowblind.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_snowblind.glb index b9a1e4f8..f32cb2b8 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_snowblind.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_snowblind.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_stonehenge1.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_stonehenge1.glb index 38aafab9..ee74dae8 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_stonehenge1.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_stonehenge1.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_vbunk1.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_vbunk1.glb index 2c6ea87b..3084beba 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_vbunk1.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dbunk_vbunk1.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefbridge.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefbridge.glb index 0360285f..a317a598 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefbridge.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefbridge.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefflagstand2.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefflagstand2.glb index 5a6fddf9..5aae578d 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefflagstand2.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefflagstand2.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefflagstand3.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefflagstand3.glb index ee1163a4..17550e93 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefflagstand3.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefflagstand3.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefobj1.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefobj1.glb index 8de32096..4a8362cb 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefobj1.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefobj1.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefobj2.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefobj2.glb index 79c33905..0061a350 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefobj2.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefobj2.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefplat1.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefplat1.glb index a302809e..4f6d5651 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefplat1.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefplat1.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefplug1.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefplug1.glb index 7ad50299..d94ef838 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefplug1.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefplug1.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefrdbridge1.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefrdbridge1.glb index ccfeb872..0908464f 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefrdbridge1.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_nefrdbridge1.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_neftower1.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_neftower1.glb index 7097fc79..d132ffa9 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_neftower1.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_neftower1.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_neftower2.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_neftower2.glb index ae2770c1..4782caeb 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_neftower2.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_neftower2.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_neftower3.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_neftower3.glb index 6b8f8e87..b5be8c2a 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_neftower3.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_neftower3.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_stonehenge1.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_stonehenge1.glb index 36958428..c8a26ee6 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_stonehenge1.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_stonehenge1.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_stonehenge2.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_stonehenge2.glb index e4b33831..b36d318c 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_stonehenge2.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_stonehenge2.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_stonehenge3.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_stonehenge3.glb index d4662231..f83e796c 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_stonehenge3.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dmisc_stonehenge3.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dtowr_classic1.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dtowr_classic1.glb index a476a72d..4856d6c9 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dtowr_classic1.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/dtowr_classic1.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/flagbridge.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/flagbridge.glb index b55cf502..2dcb1f24 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/flagbridge.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/flagbridge.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/infbutch_blackairinv13.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/infbutch_blackairinv13.glb index 948f51d0..5c82f9ce 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/infbutch_blackairinv13.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/infbutch_blackairinv13.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/infbutch_blackbase5618_final.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/infbutch_blackbase5618_final.glb index 8fd71d53..322724fd 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/infbutch_blackbase5618_final.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/infbutch_blackbase5618_final.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/infbutch_blackturret8.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/infbutch_blackturret8.glb index ea079beb..ddb599d7 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/infbutch_blackturret8.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/infbutch_blackturret8.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/pbase_nef_giant.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/pbase_nef_giant.glb index 74a42cc1..d5dd1fa1 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/pbase_nef_giant.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/pbase_nef_giant.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/pbase_nef_vbase1.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/pbase_nef_vbase1.glb index 0af349c6..27b7f8cf 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/pbase_nef_vbase1.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/pbase_nef_vbase1.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/pbunk4a_CC.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/pbunk4a_CC.glb index cbe341c8..8f0cb63c 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/pbunk4a_CC.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/pbunk4a_CC.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/pbunk7a_CC.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/pbunk7a_CC.glb index a9e8d789..479bbb6f 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/pbunk7a_CC.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/pbunk7a_CC.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ram_base.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ram_base.glb index b31729cb..20f7bb1a 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ram_base.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ram_base.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ram_tower.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ram_tower.glb index d76b6f83..22f68531 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ram_tower.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ram_tower.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ram_wall4.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ram_wall4.glb index 1b50efc1..6231fe2f 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ram_wall4.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ram_wall4.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_domain2_boundrymarker.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_domain2_boundrymarker.glb index 7ac7280e..643d2ba7 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_domain2_boundrymarker.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_domain2_boundrymarker.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_domain2_boundrymarker2.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_domain2_boundrymarker2.glb index a4b53fc3..f2f29df6 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_domain2_boundrymarker2.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_domain2_boundrymarker2.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_domain2_bridge1.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_domain2_bridge1.glb index 5e284ca1..524c9e34 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_domain2_bridge1.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_domain2_bridge1.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_domain2_mainbase.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_domain2_mainbase.glb index 75e22922..c3407715 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_domain2_mainbase.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_domain2_mainbase.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_domain_turretbase1.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_domain_turretbase1.glb index 8a09cabc..7834d0d6 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_domain_turretbase1.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_domain_turretbase1.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_bridge.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_bridge.glb index 4560b292..24cfa80d 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_bridge.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_bridge.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_mainbase.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_mainbase.glb index 7d555a79..94470189 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_mainbase.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_mainbase.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_platform1.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_platform1.glb index 899000cf..5024b2ee 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_platform1.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_platform1.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_towerbunker.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_towerbunker.glb index 14618a74..cb477aa1 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_towerbunker.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_towerbunker.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruin1.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruin1.glb index a3af4011..3db01335 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruin1.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruin1.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruin2.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruin2.glb index 611031a2..67e0d658 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruin2.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruin2.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruin3.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruin3.glb index 8913258f..ef07ee07 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruin3.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruin3.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruin4.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruin4.glb index ff9c812a..c1a4fe2c 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruin4.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruin4.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruinarch.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruinarch.glb index abc056d6..4ce031a4 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruinarch.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/ruinarch.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/sbunk_nef1.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/sbunk_nef1.glb index 270a2ec8..1fa6d861 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/sbunk_nef1.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/sbunk_nef1.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/siege.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/siege.glb index 9340cb56..08c289d1 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/siege.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/siege.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/smisc_nef1.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/smisc_nef1.glb index 9db50e7a..e502f0e6 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/smisc_nef1.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/smisc_nef1.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/t_bbase_ccb2a.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/t_bbase_ccb2a.glb index a5ab4cca..b4cfa59a 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/t_bbase_ccb2a.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/t_bbase_ccb2a.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/t_bmisc_tunl_ccb1.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/t_bmisc_tunl_ccb1.glb index 32e5c88d..2f0a3d80 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/t_bmisc_tunl_ccb1.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/t_bmisc_tunl_ccb1.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/t_bwall2a_cnr_CC.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/t_bwall2a_cnr_CC.glb index 1729d8f8..6a49747c 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/t_bwall2a_cnr_CC.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/t_bwall2a_cnr_CC.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/t_bwall2a_lrg_CC.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/t_bwall2a_lrg_CC.glb index a33e0ff4..edb5221e 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/t_bwall2a_lrg_CC.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/t_bwall2a_lrg_CC.glb differ diff --git a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/t_bwall2a_sm_CC.glb b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/t_bwall2a_sm_CC.glb index 783ede07..a5805529 100644 Binary files a/docs/base/@vl2/Classic_maps_v1.vl2/interiors/t_bwall2a_sm_CC.glb and b/docs/base/@vl2/Classic_maps_v1.vl2/interiors/t_bwall2a_sm_CC.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/interiors/bmisc_-nef_flagstand1_x.glb b/docs/base/@vl2/TR2final105-client.vl2/interiors/bmisc_-nef_flagstand1_x.glb index 67c433ba..12c1a06d 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/interiors/bmisc_-nef_flagstand1_x.glb and b/docs/base/@vl2/TR2final105-client.vl2/interiors/bmisc_-nef_flagstand1_x.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/interiors/bmisc_neftrstand1.glb b/docs/base/@vl2/TR2final105-client.vl2/interiors/bmisc_neftrstand1.glb index 196bba06..9f88e24a 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/interiors/bmisc_neftrstand1.glb and b/docs/base/@vl2/TR2final105-client.vl2/interiors/bmisc_neftrstand1.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/interiors/cannon.glb b/docs/base/@vl2/TR2final105-client.vl2/interiors/cannon.glb index 4549edfc..b4fc43fb 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/interiors/cannon.glb and b/docs/base/@vl2/TR2final105-client.vl2/interiors/cannon.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/interiors/cannon2.glb b/docs/base/@vl2/TR2final105-client.vl2/interiors/cannon2.glb index 8b03838b..38ab186e 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/interiors/cannon2.glb and b/docs/base/@vl2/TR2final105-client.vl2/interiors/cannon2.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/interiors/cap.glb b/docs/base/@vl2/TR2final105-client.vl2/interiors/cap.glb index b9d8c942..9a49beae 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/interiors/cap.glb and b/docs/base/@vl2/TR2final105-client.vl2/interiors/cap.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/interiors/doubleramp2.glb b/docs/base/@vl2/TR2final105-client.vl2/interiors/doubleramp2.glb index 8db860d7..dfbc5514 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/interiors/doubleramp2.glb and b/docs/base/@vl2/TR2final105-client.vl2/interiors/doubleramp2.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/interiors/nef_bowl1.glb b/docs/base/@vl2/TR2final105-client.vl2/interiors/nef_bowl1.glb index 4d09ac52..bb4477a3 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/interiors/nef_bowl1.glb and b/docs/base/@vl2/TR2final105-client.vl2/interiors/nef_bowl1.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/interiors/nef_bowl2.glb b/docs/base/@vl2/TR2final105-client.vl2/interiors/nef_bowl2.glb index 32ac70bc..31408625 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/interiors/nef_bowl2.glb and b/docs/base/@vl2/TR2final105-client.vl2/interiors/nef_bowl2.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/interiors/nef_bowl3.glb b/docs/base/@vl2/TR2final105-client.vl2/interiors/nef_bowl3.glb index c5bdbd2c..41ce12e8 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/interiors/nef_bowl3.glb and b/docs/base/@vl2/TR2final105-client.vl2/interiors/nef_bowl3.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/interiors/nef_ramp1.glb b/docs/base/@vl2/TR2final105-client.vl2/interiors/nef_ramp1.glb index 56a5dff6..57ffe659 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/interiors/nef_ramp1.glb and b/docs/base/@vl2/TR2final105-client.vl2/interiors/nef_ramp1.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/interiors/rail1.glb b/docs/base/@vl2/TR2final105-client.vl2/interiors/rail1.glb index c4d0a899..01294f42 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/interiors/rail1.glb and b/docs/base/@vl2/TR2final105-client.vl2/interiors/rail1.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/interiors/ramp1.glb b/docs/base/@vl2/TR2final105-client.vl2/interiors/ramp1.glb index a53ee734..ccfed108 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/interiors/ramp1.glb and b/docs/base/@vl2/TR2final105-client.vl2/interiors/ramp1.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/interiors/singleramp.glb b/docs/base/@vl2/TR2final105-client.vl2/interiors/singleramp.glb index 5dc6a36d..36d13417 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/interiors/singleramp.glb and b/docs/base/@vl2/TR2final105-client.vl2/interiors/singleramp.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/interiors/spawnbase.glb b/docs/base/@vl2/TR2final105-client.vl2/interiors/spawnbase.glb index eb2d4a75..ffb77c7e 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/interiors/spawnbase.glb and b/docs/base/@vl2/TR2final105-client.vl2/interiors/spawnbase.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/interiors/spawnbase2.glb b/docs/base/@vl2/TR2final105-client.vl2/interiors/spawnbase2.glb index 779d031b..66f3926c 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/interiors/spawnbase2.glb and b/docs/base/@vl2/TR2final105-client.vl2/interiors/spawnbase2.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/interiors/sphere.glb b/docs/base/@vl2/TR2final105-client.vl2/interiors/sphere.glb index cc735e83..d471b3c3 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/interiors/sphere.glb and b/docs/base/@vl2/TR2final105-client.vl2/interiors/sphere.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2flag.glb b/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2flag.glb index da15c16b..80ddaeb3 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2flag.glb and b/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2flag.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2heavy_male.glb b/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2heavy_male.glb index 7cd42d3f..c5ef9cb4 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2heavy_male.glb and b/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2heavy_male.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2light_female.glb b/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2light_female.glb index c4d2dd87..52205006 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2light_female.glb and b/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2light_female.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2light_male.glb b/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2light_male.glb index 3802edfb..8e8726fa 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2light_male.glb and b/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2light_male.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2medium_female.glb b/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2medium_female.glb index 676e98a5..540783e8 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2medium_female.glb and b/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2medium_female.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2medium_male.glb b/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2medium_male.glb index 81411a90..2b4a6922 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2medium_male.glb and b/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2medium_male.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2weapon_chaingun.glb b/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2weapon_chaingun.glb index be81d7cb..a1c99d0e 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2weapon_chaingun.glb and b/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2weapon_chaingun.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2weapon_disc.glb b/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2weapon_disc.glb index db977d10..365125be 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2weapon_disc.glb and b/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2weapon_disc.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2weapon_grenade_launcher.glb b/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2weapon_grenade_launcher.glb index 37a033ec..36d81433 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2weapon_grenade_launcher.glb and b/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2weapon_grenade_launcher.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2weapon_mortar.glb b/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2weapon_mortar.glb index b870c88e..3ecef9db 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2weapon_mortar.glb and b/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2weapon_mortar.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2weapon_shocklance.glb b/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2weapon_shocklance.glb index eeb87ad0..5629686d 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2weapon_shocklance.glb and b/docs/base/@vl2/TR2final105-client.vl2/shapes/TR2weapon_shocklance.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/shapes/billboard_1.glb b/docs/base/@vl2/TR2final105-client.vl2/shapes/billboard_1.glb index b3825019..3fd08e38 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/shapes/billboard_1.glb and b/docs/base/@vl2/TR2final105-client.vl2/shapes/billboard_1.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/shapes/billboard_2.glb b/docs/base/@vl2/TR2final105-client.vl2/shapes/billboard_2.glb index c09633bd..dc73124d 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/shapes/billboard_2.glb and b/docs/base/@vl2/TR2final105-client.vl2/shapes/billboard_2.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/shapes/billboard_3.glb b/docs/base/@vl2/TR2final105-client.vl2/shapes/billboard_3.glb index 694277e1..8b7824aa 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/shapes/billboard_3.glb and b/docs/base/@vl2/TR2final105-client.vl2/shapes/billboard_3.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/shapes/billboard_4.glb b/docs/base/@vl2/TR2final105-client.vl2/shapes/billboard_4.glb index 2413d5ad..ae6456ba 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/shapes/billboard_4.glb and b/docs/base/@vl2/TR2final105-client.vl2/shapes/billboard_4.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/shapes/goal_back.glb b/docs/base/@vl2/TR2final105-client.vl2/shapes/goal_back.glb index 79d8dc9a..8d797e62 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/shapes/goal_back.glb and b/docs/base/@vl2/TR2final105-client.vl2/shapes/goal_back.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/shapes/goal_panel.glb b/docs/base/@vl2/TR2final105-client.vl2/shapes/goal_panel.glb index e138aade..8826d4b0 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/shapes/goal_panel.glb and b/docs/base/@vl2/TR2final105-client.vl2/shapes/goal_panel.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/shapes/goal_side.glb b/docs/base/@vl2/TR2final105-client.vl2/shapes/goal_side.glb index 2243c028..2ab8a8b8 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/shapes/goal_side.glb and b/docs/base/@vl2/TR2final105-client.vl2/shapes/goal_side.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/shapes/goal_top.glb b/docs/base/@vl2/TR2final105-client.vl2/shapes/goal_top.glb index 30ff99a2..8c7d7fad 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/shapes/goal_top.glb and b/docs/base/@vl2/TR2final105-client.vl2/shapes/goal_top.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/shapes/gold_goal_back.glb b/docs/base/@vl2/TR2final105-client.vl2/shapes/gold_goal_back.glb index dfe2214a..b35cbf98 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/shapes/gold_goal_back.glb and b/docs/base/@vl2/TR2final105-client.vl2/shapes/gold_goal_back.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/shapes/gold_goal_side.glb b/docs/base/@vl2/TR2final105-client.vl2/shapes/gold_goal_side.glb index e4f41bb0..a60af8ec 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/shapes/gold_goal_side.glb and b/docs/base/@vl2/TR2final105-client.vl2/shapes/gold_goal_side.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/shapes/gold_goal_top.glb b/docs/base/@vl2/TR2final105-client.vl2/shapes/gold_goal_top.glb index 8ac0754c..bca0f190 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/shapes/gold_goal_top.glb and b/docs/base/@vl2/TR2final105-client.vl2/shapes/gold_goal_top.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/shapes/golden_pole.glb b/docs/base/@vl2/TR2final105-client.vl2/shapes/golden_pole.glb index fd51c626..c45cb5ec 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/shapes/golden_pole.glb and b/docs/base/@vl2/TR2final105-client.vl2/shapes/golden_pole.glb differ diff --git a/docs/base/@vl2/TR2final105-client.vl2/shapes/silver_pole.glb b/docs/base/@vl2/TR2final105-client.vl2/shapes/silver_pole.glb index 54a886e3..52a92cda 100644 Binary files a/docs/base/@vl2/TR2final105-client.vl2/shapes/silver_pole.glb and b/docs/base/@vl2/TR2final105-client.vl2/shapes/silver_pole.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbase1.glb b/docs/base/@vl2/interiors.vl2/interiors/bbase1.glb index ddbc6f76..f49abf9a 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbase1.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbase1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbase4cm.glb b/docs/base/@vl2/interiors.vl2/interiors/bbase4cm.glb index d0b61f60..d46d095a 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbase4cm.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbase4cm.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbase6.glb b/docs/base/@vl2/interiors.vl2/interiors/bbase6.glb index 1917870e..f5b6d636 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbase6.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbase6.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbase7.glb b/docs/base/@vl2/interiors.vl2/interiors/bbase7.glb index 4602b760..b448998d 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbase7.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbase7.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbase9.glb b/docs/base/@vl2/interiors.vl2/interiors/bbase9.glb index 3237329c..467596d6 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbase9.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbase9.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbrdg0.glb b/docs/base/@vl2/interiors.vl2/interiors/bbrdg0.glb index 6d3f9c61..c1d0f879 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbrdg0.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbrdg0.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbrdg1.glb b/docs/base/@vl2/interiors.vl2/interiors/bbrdg1.glb index 8d791c87..91a1c207 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbrdg1.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbrdg1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbrdg2.glb b/docs/base/@vl2/interiors.vl2/interiors/bbrdg2.glb index 19e4c7c2..bbe9b743 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbrdg2.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbrdg2.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbrdg3.glb b/docs/base/@vl2/interiors.vl2/interiors/bbrdg3.glb index 161380ae..157be705 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbrdg3.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbrdg3.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbrdg4.glb b/docs/base/@vl2/interiors.vl2/interiors/bbrdg4.glb index 4220f0b2..6b5566d3 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbrdg4.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbrdg4.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbrdg5.glb b/docs/base/@vl2/interiors.vl2/interiors/bbrdg5.glb index 20e62574..eb61c4cf 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbrdg5.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbrdg5.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbrdg6.glb b/docs/base/@vl2/interiors.vl2/interiors/bbrdg6.glb index 723c3698..69e6c8db 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbrdg6.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbrdg6.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbrdg7.glb b/docs/base/@vl2/interiors.vl2/interiors/bbrdg7.glb index a9133f2b..99028259 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbrdg7.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbrdg7.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbrdg8.glb b/docs/base/@vl2/interiors.vl2/interiors/bbrdg8.glb index 67a6cb43..b7b39daf 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbrdg8.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbrdg8.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbrdg9.glb b/docs/base/@vl2/interiors.vl2/interiors/bbrdg9.glb index 06dac93d..601b6e4e 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbrdg9.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbrdg9.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbrdga.glb b/docs/base/@vl2/interiors.vl2/interiors/bbrdga.glb index e2192f6d..bef62ffe 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbrdga.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbrdga.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbrdgb.glb b/docs/base/@vl2/interiors.vl2/interiors/bbrdgb.glb index 9dc7e6e0..6df012ef 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbrdgb.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbrdgb.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbrdgn.glb b/docs/base/@vl2/interiors.vl2/interiors/bbrdgn.glb index a7560a58..ac58769d 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbrdgn.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbrdgn.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbrdgo.glb b/docs/base/@vl2/interiors.vl2/interiors/bbrdgo.glb index 5250c765..bff2f0db 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbrdgo.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbrdgo.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbunk1.glb b/docs/base/@vl2/interiors.vl2/interiors/bbunk1.glb index a1d92130..5fbe5f99 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbunk1.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbunk1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbunk2.glb b/docs/base/@vl2/interiors.vl2/interiors/bbunk2.glb index 083b25e6..6cbbb417 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbunk2.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbunk2.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbunk5.glb b/docs/base/@vl2/interiors.vl2/interiors/bbunk5.glb index d1c0cf12..8881f0c8 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbunk5.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbunk5.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbunk7.glb b/docs/base/@vl2/interiors.vl2/interiors/bbunk7.glb index c814ed54..ef8e581d 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbunk7.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbunk7.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbunk8.glb b/docs/base/@vl2/interiors.vl2/interiors/bbunk8.glb index 2932ce11..dbd6984b 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbunk8.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbunk8.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbunk9.glb b/docs/base/@vl2/interiors.vl2/interiors/bbunk9.glb index 0584a714..9c1bd577 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbunk9.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbunk9.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbunkb.glb b/docs/base/@vl2/interiors.vl2/interiors/bbunkb.glb index 2a19510f..894c6b11 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbunkb.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbunkb.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbunkc.glb b/docs/base/@vl2/interiors.vl2/interiors/bbunkc.glb index 77ba126f..e5a4218c 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbunkc.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbunkc.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bbunkd.glb b/docs/base/@vl2/interiors.vl2/interiors/bbunkd.glb index ae0affa8..586a5958 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bbunkd.glb and b/docs/base/@vl2/interiors.vl2/interiors/bbunkd.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bmisc1.glb b/docs/base/@vl2/interiors.vl2/interiors/bmisc1.glb index 1682c728..414603cd 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bmisc1.glb and b/docs/base/@vl2/interiors.vl2/interiors/bmisc1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bmisc2.glb b/docs/base/@vl2/interiors.vl2/interiors/bmisc2.glb index 5f3e2ec9..9f1a56e9 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bmisc2.glb and b/docs/base/@vl2/interiors.vl2/interiors/bmisc2.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bmisc3.glb b/docs/base/@vl2/interiors.vl2/interiors/bmisc3.glb index 63e1126d..2a516a49 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bmisc3.glb and b/docs/base/@vl2/interiors.vl2/interiors/bmisc3.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bmisc4.glb b/docs/base/@vl2/interiors.vl2/interiors/bmisc4.glb index 4195b95a..a3060513 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bmisc4.glb and b/docs/base/@vl2/interiors.vl2/interiors/bmisc4.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bmisc5.glb b/docs/base/@vl2/interiors.vl2/interiors/bmisc5.glb index 522655e2..c05c3762 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bmisc5.glb and b/docs/base/@vl2/interiors.vl2/interiors/bmisc5.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bmisc6.glb b/docs/base/@vl2/interiors.vl2/interiors/bmisc6.glb index ec6ad674..8e84daed 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bmisc6.glb and b/docs/base/@vl2/interiors.vl2/interiors/bmisc6.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bmisc7.glb b/docs/base/@vl2/interiors.vl2/interiors/bmisc7.glb index 737719a2..cc4c32f3 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bmisc7.glb and b/docs/base/@vl2/interiors.vl2/interiors/bmisc7.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bmisc8.glb b/docs/base/@vl2/interiors.vl2/interiors/bmisc8.glb index 34476949..4b653dd4 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bmisc8.glb and b/docs/base/@vl2/interiors.vl2/interiors/bmisc8.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bmisc9.glb b/docs/base/@vl2/interiors.vl2/interiors/bmisc9.glb index 95ea1d12..0970e661 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bmisc9.glb and b/docs/base/@vl2/interiors.vl2/interiors/bmisc9.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bplat1.glb b/docs/base/@vl2/interiors.vl2/interiors/bplat1.glb index 204ace59..8491b547 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bplat1.glb and b/docs/base/@vl2/interiors.vl2/interiors/bplat1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bplat2.glb b/docs/base/@vl2/interiors.vl2/interiors/bplat2.glb index 01af2353..edb72600 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bplat2.glb and b/docs/base/@vl2/interiors.vl2/interiors/bplat2.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bplat3.glb b/docs/base/@vl2/interiors.vl2/interiors/bplat3.glb index a09a9e33..f41a4b15 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bplat3.glb and b/docs/base/@vl2/interiors.vl2/interiors/bplat3.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bplat4.glb b/docs/base/@vl2/interiors.vl2/interiors/bplat4.glb index 0f965f30..458e5394 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bplat4.glb and b/docs/base/@vl2/interiors.vl2/interiors/bplat4.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bplat6.glb b/docs/base/@vl2/interiors.vl2/interiors/bplat6.glb index ba80ce7a..77d774fb 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bplat6.glb and b/docs/base/@vl2/interiors.vl2/interiors/bplat6.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bpower1.glb b/docs/base/@vl2/interiors.vl2/interiors/bpower1.glb index 20565488..018ce348 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bpower1.glb and b/docs/base/@vl2/interiors.vl2/interiors/bpower1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/brock6.glb b/docs/base/@vl2/interiors.vl2/interiors/brock6.glb index 79cc540c..7f62f90f 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/brock6.glb and b/docs/base/@vl2/interiors.vl2/interiors/brock6.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/brock7.glb b/docs/base/@vl2/interiors.vl2/interiors/brock7.glb index 00b5ad04..37f25f0e 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/brock7.glb and b/docs/base/@vl2/interiors.vl2/interiors/brock7.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/brock8.glb b/docs/base/@vl2/interiors.vl2/interiors/brock8.glb index 90deac2a..6f343f8c 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/brock8.glb and b/docs/base/@vl2/interiors.vl2/interiors/brock8.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/brocka.glb b/docs/base/@vl2/interiors.vl2/interiors/brocka.glb index 630ccc9a..8db74ed6 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/brocka.glb and b/docs/base/@vl2/interiors.vl2/interiors/brocka.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/brockc.glb b/docs/base/@vl2/interiors.vl2/interiors/brockc.glb index f8530f57..7f70db32 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/brockc.glb and b/docs/base/@vl2/interiors.vl2/interiors/brockc.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bspir1.glb b/docs/base/@vl2/interiors.vl2/interiors/bspir1.glb index b6e81a9c..87e1cb67 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bspir1.glb and b/docs/base/@vl2/interiors.vl2/interiors/bspir1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bspir2.glb b/docs/base/@vl2/interiors.vl2/interiors/bspir2.glb index 9feeaa60..dbd42215 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bspir2.glb and b/docs/base/@vl2/interiors.vl2/interiors/bspir2.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bspir3.glb b/docs/base/@vl2/interiors.vl2/interiors/bspir3.glb index 95bdfcc3..b246d0b5 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bspir3.glb and b/docs/base/@vl2/interiors.vl2/interiors/bspir3.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bspir4.glb b/docs/base/@vl2/interiors.vl2/interiors/bspir4.glb index 05f3be81..2d6f89ff 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bspir4.glb and b/docs/base/@vl2/interiors.vl2/interiors/bspir4.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bspir5.glb b/docs/base/@vl2/interiors.vl2/interiors/bspir5.glb index acf42937..111a69e9 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bspir5.glb and b/docs/base/@vl2/interiors.vl2/interiors/bspir5.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/btowr2.glb b/docs/base/@vl2/interiors.vl2/interiors/btowr2.glb index 7a4f81ad..2aa3b0c5 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/btowr2.glb and b/docs/base/@vl2/interiors.vl2/interiors/btowr2.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/btowr5.glb b/docs/base/@vl2/interiors.vl2/interiors/btowr5.glb index 6201590f..daf86806 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/btowr5.glb and b/docs/base/@vl2/interiors.vl2/interiors/btowr5.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/btowr6.glb b/docs/base/@vl2/interiors.vl2/interiors/btowr6.glb index a997294f..7b548e54 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/btowr6.glb and b/docs/base/@vl2/interiors.vl2/interiors/btowr6.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/btowr8.glb b/docs/base/@vl2/interiors.vl2/interiors/btowr8.glb index c2eea90b..32f88cec 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/btowr8.glb and b/docs/base/@vl2/interiors.vl2/interiors/btowr8.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/btowra.glb b/docs/base/@vl2/interiors.vl2/interiors/btowra.glb index f79aba9f..ac5eb076 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/btowra.glb and b/docs/base/@vl2/interiors.vl2/interiors/btowra.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bvpad.glb b/docs/base/@vl2/interiors.vl2/interiors/bvpad.glb index 0133eea7..7e7be05f 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bvpad.glb and b/docs/base/@vl2/interiors.vl2/interiors/bvpad.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bwall1.glb b/docs/base/@vl2/interiors.vl2/interiors/bwall1.glb index 280320eb..aca0aa06 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bwall1.glb and b/docs/base/@vl2/interiors.vl2/interiors/bwall1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bwall2.glb b/docs/base/@vl2/interiors.vl2/interiors/bwall2.glb index 59d1a1ae..6748c7a9 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bwall2.glb and b/docs/base/@vl2/interiors.vl2/interiors/bwall2.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bwall3.glb b/docs/base/@vl2/interiors.vl2/interiors/bwall3.glb index 8e6d9361..fc07744f 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bwall3.glb and b/docs/base/@vl2/interiors.vl2/interiors/bwall3.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/bwall4.glb b/docs/base/@vl2/interiors.vl2/interiors/bwall4.glb index 75f25f17..737bf270 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/bwall4.glb and b/docs/base/@vl2/interiors.vl2/interiors/bwall4.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dbase2.glb b/docs/base/@vl2/interiors.vl2/interiors/dbase2.glb index 9c203206..8aa3c09b 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dbase2.glb and b/docs/base/@vl2/interiors.vl2/interiors/dbase2.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dbase3.glb b/docs/base/@vl2/interiors.vl2/interiors/dbase3.glb index 8adf3048..300db440 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dbase3.glb and b/docs/base/@vl2/interiors.vl2/interiors/dbase3.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dbase4.glb b/docs/base/@vl2/interiors.vl2/interiors/dbase4.glb index 8ccf0276..2d17539e 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dbase4.glb and b/docs/base/@vl2/interiors.vl2/interiors/dbase4.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dbrdg1.glb b/docs/base/@vl2/interiors.vl2/interiors/dbrdg1.glb index 45c82261..29f2baee 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dbrdg1.glb and b/docs/base/@vl2/interiors.vl2/interiors/dbrdg1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dbrdg10.glb b/docs/base/@vl2/interiors.vl2/interiors/dbrdg10.glb index 6c239df2..bf7f3b27 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dbrdg10.glb and b/docs/base/@vl2/interiors.vl2/interiors/dbrdg10.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dbrdg11.glb b/docs/base/@vl2/interiors.vl2/interiors/dbrdg11.glb index 478486d8..e83d85ed 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dbrdg11.glb and b/docs/base/@vl2/interiors.vl2/interiors/dbrdg11.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dbrdg2.glb b/docs/base/@vl2/interiors.vl2/interiors/dbrdg2.glb index 5c3f1da1..bd670bcb 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dbrdg2.glb and b/docs/base/@vl2/interiors.vl2/interiors/dbrdg2.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dbrdg3.glb b/docs/base/@vl2/interiors.vl2/interiors/dbrdg3.glb index 59f8a898..f63f9391 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dbrdg3.glb and b/docs/base/@vl2/interiors.vl2/interiors/dbrdg3.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dbrdg3a.glb b/docs/base/@vl2/interiors.vl2/interiors/dbrdg3a.glb index 0ed7d7ba..683fe897 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dbrdg3a.glb and b/docs/base/@vl2/interiors.vl2/interiors/dbrdg3a.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dbrdg4.glb b/docs/base/@vl2/interiors.vl2/interiors/dbrdg4.glb index 46407623..df030e33 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dbrdg4.glb and b/docs/base/@vl2/interiors.vl2/interiors/dbrdg4.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dbrdg5.glb b/docs/base/@vl2/interiors.vl2/interiors/dbrdg5.glb index 2c9673b9..70cf8d53 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dbrdg5.glb and b/docs/base/@vl2/interiors.vl2/interiors/dbrdg5.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dbrdg6.glb b/docs/base/@vl2/interiors.vl2/interiors/dbrdg6.glb index 74240a47..0ec78af5 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dbrdg6.glb and b/docs/base/@vl2/interiors.vl2/interiors/dbrdg6.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dbrdg7.glb b/docs/base/@vl2/interiors.vl2/interiors/dbrdg7.glb index 3e21ab6b..d035c2fc 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dbrdg7.glb and b/docs/base/@vl2/interiors.vl2/interiors/dbrdg7.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dbrdg7a.glb b/docs/base/@vl2/interiors.vl2/interiors/dbrdg7a.glb index 086a9284..e41c0a18 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dbrdg7a.glb and b/docs/base/@vl2/interiors.vl2/interiors/dbrdg7a.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dbrdg8.glb b/docs/base/@vl2/interiors.vl2/interiors/dbrdg8.glb index f87591d8..12ae4a6f 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dbrdg8.glb and b/docs/base/@vl2/interiors.vl2/interiors/dbrdg8.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dbrdg9.glb b/docs/base/@vl2/interiors.vl2/interiors/dbrdg9.glb index ac1de71b..e8e8a425 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dbrdg9.glb and b/docs/base/@vl2/interiors.vl2/interiors/dbrdg9.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dbrdg9a.glb b/docs/base/@vl2/interiors.vl2/interiors/dbrdg9a.glb index d4391ba2..2098fedd 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dbrdg9a.glb and b/docs/base/@vl2/interiors.vl2/interiors/dbrdg9a.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dbunk5.glb b/docs/base/@vl2/interiors.vl2/interiors/dbunk5.glb index 6c8a0725..f9bc1e37 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dbunk5.glb and b/docs/base/@vl2/interiors.vl2/interiors/dbunk5.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dbunk6.glb b/docs/base/@vl2/interiors.vl2/interiors/dbunk6.glb index ae1014c9..cdfd22d5 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dbunk6.glb and b/docs/base/@vl2/interiors.vl2/interiors/dbunk6.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dmisc1.glb b/docs/base/@vl2/interiors.vl2/interiors/dmisc1.glb index 3ed1f3ae..cb6299a4 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dmisc1.glb and b/docs/base/@vl2/interiors.vl2/interiors/dmisc1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dplat1.glb b/docs/base/@vl2/interiors.vl2/interiors/dplat1.glb index a2966dfa..c350282b 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dplat1.glb and b/docs/base/@vl2/interiors.vl2/interiors/dplat1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dplat2.glb b/docs/base/@vl2/interiors.vl2/interiors/dplat2.glb index 7787875c..feafcabb 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dplat2.glb and b/docs/base/@vl2/interiors.vl2/interiors/dplat2.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dplat3.glb b/docs/base/@vl2/interiors.vl2/interiors/dplat3.glb index 79cad485..e09c3cd7 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dplat3.glb and b/docs/base/@vl2/interiors.vl2/interiors/dplat3.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dpole1.glb b/docs/base/@vl2/interiors.vl2/interiors/dpole1.glb index b377788d..36c7ee5a 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dpole1.glb and b/docs/base/@vl2/interiors.vl2/interiors/dpole1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/drock6.glb b/docs/base/@vl2/interiors.vl2/interiors/drock6.glb index 913573b7..c97dc7df 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/drock6.glb and b/docs/base/@vl2/interiors.vl2/interiors/drock6.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/drock7.glb b/docs/base/@vl2/interiors.vl2/interiors/drock7.glb index 4bf36a31..fe271bb3 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/drock7.glb and b/docs/base/@vl2/interiors.vl2/interiors/drock7.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/drock8.glb b/docs/base/@vl2/interiors.vl2/interiors/drock8.glb index 557c0cb0..1cd5f701 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/drock8.glb and b/docs/base/@vl2/interiors.vl2/interiors/drock8.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/drocka.glb b/docs/base/@vl2/interiors.vl2/interiors/drocka.glb index 1a7073b3..c170d029 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/drocka.glb and b/docs/base/@vl2/interiors.vl2/interiors/drocka.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dspir1.glb b/docs/base/@vl2/interiors.vl2/interiors/dspir1.glb index 245b9b3e..dc79d1db 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dspir1.glb and b/docs/base/@vl2/interiors.vl2/interiors/dspir1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dspir2.glb b/docs/base/@vl2/interiors.vl2/interiors/dspir2.glb index fe1539cb..6488be17 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dspir2.glb and b/docs/base/@vl2/interiors.vl2/interiors/dspir2.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dspir3.glb b/docs/base/@vl2/interiors.vl2/interiors/dspir3.glb index 91e474b6..30eb24d2 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dspir3.glb and b/docs/base/@vl2/interiors.vl2/interiors/dspir3.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dspir4.glb b/docs/base/@vl2/interiors.vl2/interiors/dspir4.glb index 396729e4..4a146aab 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dspir4.glb and b/docs/base/@vl2/interiors.vl2/interiors/dspir4.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dspir5.glb b/docs/base/@vl2/interiors.vl2/interiors/dspir5.glb index 646f2ef6..78543c93 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dspir5.glb and b/docs/base/@vl2/interiors.vl2/interiors/dspir5.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dtowr1.glb b/docs/base/@vl2/interiors.vl2/interiors/dtowr1.glb index b25be325..5823aca1 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dtowr1.glb and b/docs/base/@vl2/interiors.vl2/interiors/dtowr1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dtowr2.glb b/docs/base/@vl2/interiors.vl2/interiors/dtowr2.glb index a5d4f98c..d5e4eb8e 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dtowr2.glb and b/docs/base/@vl2/interiors.vl2/interiors/dtowr2.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dtowr4.glb b/docs/base/@vl2/interiors.vl2/interiors/dtowr4.glb index 4f792ee9..f010b7c7 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dtowr4.glb and b/docs/base/@vl2/interiors.vl2/interiors/dtowr4.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dvent.glb b/docs/base/@vl2/interiors.vl2/interiors/dvent.glb index 9d74a451..058cb181 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dvent.glb and b/docs/base/@vl2/interiors.vl2/interiors/dvent.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dvpad.glb b/docs/base/@vl2/interiors.vl2/interiors/dvpad.glb index 7116eb65..daacbac0 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dvpad.glb and b/docs/base/@vl2/interiors.vl2/interiors/dvpad.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dvpad1.glb b/docs/base/@vl2/interiors.vl2/interiors/dvpad1.glb index 85cb6f0e..01ed8c5c 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dvpad1.glb and b/docs/base/@vl2/interiors.vl2/interiors/dvpad1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/dwall1.glb b/docs/base/@vl2/interiors.vl2/interiors/dwall1.glb index 338708cc..a2ecd9da 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/dwall1.glb and b/docs/base/@vl2/interiors.vl2/interiors/dwall1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pbase3.glb b/docs/base/@vl2/interiors.vl2/interiors/pbase3.glb index 656f0bda..3c174e04 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pbase3.glb and b/docs/base/@vl2/interiors.vl2/interiors/pbase3.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pbrdg0.glb b/docs/base/@vl2/interiors.vl2/interiors/pbrdg0.glb index 6d6cafca..d9457619 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pbrdg0.glb and b/docs/base/@vl2/interiors.vl2/interiors/pbrdg0.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pbrdg1.glb b/docs/base/@vl2/interiors.vl2/interiors/pbrdg1.glb index 5f0f52f5..3115bfcc 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pbrdg1.glb and b/docs/base/@vl2/interiors.vl2/interiors/pbrdg1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pbrdg2.glb b/docs/base/@vl2/interiors.vl2/interiors/pbrdg2.glb index a7347157..9344fbde 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pbrdg2.glb and b/docs/base/@vl2/interiors.vl2/interiors/pbrdg2.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pbrdg3.glb b/docs/base/@vl2/interiors.vl2/interiors/pbrdg3.glb index 576de33a..af49376e 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pbrdg3.glb and b/docs/base/@vl2/interiors.vl2/interiors/pbrdg3.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pbrdg4.glb b/docs/base/@vl2/interiors.vl2/interiors/pbrdg4.glb index 86db3e92..21d0763c 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pbrdg4.glb and b/docs/base/@vl2/interiors.vl2/interiors/pbrdg4.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pbrdgn.glb b/docs/base/@vl2/interiors.vl2/interiors/pbrdgn.glb index 4d89dfc4..35c3705a 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pbrdgn.glb and b/docs/base/@vl2/interiors.vl2/interiors/pbrdgn.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pbrdgo.glb b/docs/base/@vl2/interiors.vl2/interiors/pbrdgo.glb index 464705a9..3b58b1ec 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pbrdgo.glb and b/docs/base/@vl2/interiors.vl2/interiors/pbrdgo.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pbrdgp.glb b/docs/base/@vl2/interiors.vl2/interiors/pbrdgp.glb index 7bf8bd22..5af07525 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pbrdgp.glb and b/docs/base/@vl2/interiors.vl2/interiors/pbrdgp.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pbunk1.glb b/docs/base/@vl2/interiors.vl2/interiors/pbunk1.glb index 3c8c0131..bbcf1b13 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pbunk1.glb and b/docs/base/@vl2/interiors.vl2/interiors/pbunk1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pbunk2.glb b/docs/base/@vl2/interiors.vl2/interiors/pbunk2.glb index 4168afd1..8bc40c4f 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pbunk2.glb and b/docs/base/@vl2/interiors.vl2/interiors/pbunk2.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pbunk3.glb b/docs/base/@vl2/interiors.vl2/interiors/pbunk3.glb index 4585ec7a..4929cdfc 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pbunk3.glb and b/docs/base/@vl2/interiors.vl2/interiors/pbunk3.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pbunk5.glb b/docs/base/@vl2/interiors.vl2/interiors/pbunk5.glb index ccddbb27..9a5c691e 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pbunk5.glb and b/docs/base/@vl2/interiors.vl2/interiors/pbunk5.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pbunk6.glb b/docs/base/@vl2/interiors.vl2/interiors/pbunk6.glb index 0bb2a523..e39bfb47 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pbunk6.glb and b/docs/base/@vl2/interiors.vl2/interiors/pbunk6.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pbunk7.glb b/docs/base/@vl2/interiors.vl2/interiors/pbunk7.glb index e925fcbd..686cc787 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pbunk7.glb and b/docs/base/@vl2/interiors.vl2/interiors/pbunk7.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pbunk8.glb b/docs/base/@vl2/interiors.vl2/interiors/pbunk8.glb index ebf10d0a..20cb1fa0 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pbunk8.glb and b/docs/base/@vl2/interiors.vl2/interiors/pbunk8.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pmisc1.glb b/docs/base/@vl2/interiors.vl2/interiors/pmisc1.glb index 14156759..eb1f28da 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pmisc1.glb and b/docs/base/@vl2/interiors.vl2/interiors/pmisc1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pmisc2.glb b/docs/base/@vl2/interiors.vl2/interiors/pmisc2.glb index 21f44462..be879457 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pmisc2.glb and b/docs/base/@vl2/interiors.vl2/interiors/pmisc2.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pmisc3.glb b/docs/base/@vl2/interiors.vl2/interiors/pmisc3.glb index be55c3e8..5363efff 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pmisc3.glb and b/docs/base/@vl2/interiors.vl2/interiors/pmisc3.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pmisc4.glb b/docs/base/@vl2/interiors.vl2/interiors/pmisc4.glb index 2382c703..d0805dcc 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pmisc4.glb and b/docs/base/@vl2/interiors.vl2/interiors/pmisc4.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pmisc5.glb b/docs/base/@vl2/interiors.vl2/interiors/pmisc5.glb index 1157d29d..3f6bd440 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pmisc5.glb and b/docs/base/@vl2/interiors.vl2/interiors/pmisc5.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pmisca.glb b/docs/base/@vl2/interiors.vl2/interiors/pmisca.glb index 0ebf346e..db8079be 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pmisca.glb and b/docs/base/@vl2/interiors.vl2/interiors/pmisca.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pmiscb.glb b/docs/base/@vl2/interiors.vl2/interiors/pmiscb.glb index e6d1a466..78df9147 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pmiscb.glb and b/docs/base/@vl2/interiors.vl2/interiors/pmiscb.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pmiscc.glb b/docs/base/@vl2/interiors.vl2/interiors/pmiscc.glb index 31e0df67..25637bdc 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pmiscc.glb and b/docs/base/@vl2/interiors.vl2/interiors/pmiscc.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pplat1.glb b/docs/base/@vl2/interiors.vl2/interiors/pplat1.glb index b11d98fc..62342bf7 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pplat1.glb and b/docs/base/@vl2/interiors.vl2/interiors/pplat1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pplat2.glb b/docs/base/@vl2/interiors.vl2/interiors/pplat2.glb index 51ff3d01..34f306d4 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pplat2.glb and b/docs/base/@vl2/interiors.vl2/interiors/pplat2.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pplat3.glb b/docs/base/@vl2/interiors.vl2/interiors/pplat3.glb index 3d65ada2..fb87851b 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pplat3.glb and b/docs/base/@vl2/interiors.vl2/interiors/pplat3.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pplat4.glb b/docs/base/@vl2/interiors.vl2/interiors/pplat4.glb index 4bacbc93..c8853c7f 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pplat4.glb and b/docs/base/@vl2/interiors.vl2/interiors/pplat4.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pplat5.glb b/docs/base/@vl2/interiors.vl2/interiors/pplat5.glb index 859bcd8e..befb7aba 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pplat5.glb and b/docs/base/@vl2/interiors.vl2/interiors/pplat5.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/prock6.glb b/docs/base/@vl2/interiors.vl2/interiors/prock6.glb index 8dbf8321..3edaaf8a 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/prock6.glb and b/docs/base/@vl2/interiors.vl2/interiors/prock6.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/prock7.glb b/docs/base/@vl2/interiors.vl2/interiors/prock7.glb index a6f56b0d..0a8de7d3 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/prock7.glb and b/docs/base/@vl2/interiors.vl2/interiors/prock7.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/prock8.glb b/docs/base/@vl2/interiors.vl2/interiors/prock8.glb index 9d53ffc2..9c840ba7 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/prock8.glb and b/docs/base/@vl2/interiors.vl2/interiors/prock8.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/procka.glb b/docs/base/@vl2/interiors.vl2/interiors/procka.glb index 518f4f9e..e43a1221 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/procka.glb and b/docs/base/@vl2/interiors.vl2/interiors/procka.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/prockb.glb b/docs/base/@vl2/interiors.vl2/interiors/prockb.glb index f127d265..76268304 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/prockb.glb and b/docs/base/@vl2/interiors.vl2/interiors/prockb.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/prockc.glb b/docs/base/@vl2/interiors.vl2/interiors/prockc.glb index d1a53531..b4d6db61 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/prockc.glb and b/docs/base/@vl2/interiors.vl2/interiors/prockc.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pspir1.glb b/docs/base/@vl2/interiors.vl2/interiors/pspir1.glb index 4fab844d..db074019 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pspir1.glb and b/docs/base/@vl2/interiors.vl2/interiors/pspir1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pspir2.glb b/docs/base/@vl2/interiors.vl2/interiors/pspir2.glb index f781f754..bf24cd67 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pspir2.glb and b/docs/base/@vl2/interiors.vl2/interiors/pspir2.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pspir3.glb b/docs/base/@vl2/interiors.vl2/interiors/pspir3.glb index e23b0fdb..d678936d 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pspir3.glb and b/docs/base/@vl2/interiors.vl2/interiors/pspir3.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pspir4.glb b/docs/base/@vl2/interiors.vl2/interiors/pspir4.glb index 78c1acd1..d9fb9583 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pspir4.glb and b/docs/base/@vl2/interiors.vl2/interiors/pspir4.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pspir5.glb b/docs/base/@vl2/interiors.vl2/interiors/pspir5.glb index 37a3a9fd..4f8e6446 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pspir5.glb and b/docs/base/@vl2/interiors.vl2/interiors/pspir5.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/ptowr1.glb b/docs/base/@vl2/interiors.vl2/interiors/ptowr1.glb index 45b7c1a1..a24925c7 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/ptowr1.glb and b/docs/base/@vl2/interiors.vl2/interiors/ptowr1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/ptowr2.glb b/docs/base/@vl2/interiors.vl2/interiors/ptowr2.glb index ce0d52ed..3d7950ef 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/ptowr2.glb and b/docs/base/@vl2/interiors.vl2/interiors/ptowr2.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/ptowr4.glb b/docs/base/@vl2/interiors.vl2/interiors/ptowr4.glb index 4b74aeb9..329e039d 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/ptowr4.glb and b/docs/base/@vl2/interiors.vl2/interiors/ptowr4.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/ptowr5.glb b/docs/base/@vl2/interiors.vl2/interiors/ptowr5.glb index cf51217f..60099fcd 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/ptowr5.glb and b/docs/base/@vl2/interiors.vl2/interiors/ptowr5.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/ptowr7.glb b/docs/base/@vl2/interiors.vl2/interiors/ptowr7.glb index a3779ffe..163fff54 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/ptowr7.glb and b/docs/base/@vl2/interiors.vl2/interiors/ptowr7.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pvbay1.glb b/docs/base/@vl2/interiors.vl2/interiors/pvbay1.glb index 7f1d7e83..66028ef9 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pvbay1.glb and b/docs/base/@vl2/interiors.vl2/interiors/pvbay1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pvpad.glb b/docs/base/@vl2/interiors.vl2/interiors/pvpad.glb index 907e6ec6..d0b9ad94 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pvpad.glb and b/docs/base/@vl2/interiors.vl2/interiors/pvpad.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/pwall1.glb b/docs/base/@vl2/interiors.vl2/interiors/pwall1.glb index d124330d..57a2adf7 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/pwall1.glb and b/docs/base/@vl2/interiors.vl2/interiors/pwall1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/sbase1.glb b/docs/base/@vl2/interiors.vl2/interiors/sbase1.glb index ce76196f..3dd8f344 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/sbase1.glb and b/docs/base/@vl2/interiors.vl2/interiors/sbase1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/sbase3.glb b/docs/base/@vl2/interiors.vl2/interiors/sbase3.glb index 69c25dcc..aeaa0164 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/sbase3.glb and b/docs/base/@vl2/interiors.vl2/interiors/sbase3.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/sbase5.glb b/docs/base/@vl2/interiors.vl2/interiors/sbase5.glb index 226ad710..853b2c13 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/sbase5.glb and b/docs/base/@vl2/interiors.vl2/interiors/sbase5.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/sbrdg1.glb b/docs/base/@vl2/interiors.vl2/interiors/sbrdg1.glb index 7bf89bbc..2e7485df 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/sbrdg1.glb and b/docs/base/@vl2/interiors.vl2/interiors/sbrdg1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/sbrdg2.glb b/docs/base/@vl2/interiors.vl2/interiors/sbrdg2.glb index 3eba4c5b..bf8ab995 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/sbrdg2.glb and b/docs/base/@vl2/interiors.vl2/interiors/sbrdg2.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/sbrdg3.glb b/docs/base/@vl2/interiors.vl2/interiors/sbrdg3.glb index 61549138..ee4e330e 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/sbrdg3.glb and b/docs/base/@vl2/interiors.vl2/interiors/sbrdg3.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/sbrdg4.glb b/docs/base/@vl2/interiors.vl2/interiors/sbrdg4.glb index cd3ddecc..25937935 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/sbrdg4.glb and b/docs/base/@vl2/interiors.vl2/interiors/sbrdg4.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/sbrdg5.glb b/docs/base/@vl2/interiors.vl2/interiors/sbrdg5.glb index eca4cbf0..c621e44c 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/sbrdg5.glb and b/docs/base/@vl2/interiors.vl2/interiors/sbrdg5.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/sbrdg6.glb b/docs/base/@vl2/interiors.vl2/interiors/sbrdg6.glb index 233271b7..c29e7223 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/sbrdg6.glb and b/docs/base/@vl2/interiors.vl2/interiors/sbrdg6.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/sbrdg7.glb b/docs/base/@vl2/interiors.vl2/interiors/sbrdg7.glb index ac8610c1..a3bf7ec1 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/sbrdg7.glb and b/docs/base/@vl2/interiors.vl2/interiors/sbrdg7.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/sbrdgn.glb b/docs/base/@vl2/interiors.vl2/interiors/sbrdgn.glb index a7e82744..f3119ed9 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/sbrdgn.glb and b/docs/base/@vl2/interiors.vl2/interiors/sbrdgn.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/sbrdgo.glb b/docs/base/@vl2/interiors.vl2/interiors/sbrdgo.glb index 959212a3..c02236fc 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/sbrdgo.glb and b/docs/base/@vl2/interiors.vl2/interiors/sbrdgo.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/sbunk2.glb b/docs/base/@vl2/interiors.vl2/interiors/sbunk2.glb index f9f4d79e..ef0bced9 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/sbunk2.glb and b/docs/base/@vl2/interiors.vl2/interiors/sbunk2.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/sbunk9.glb b/docs/base/@vl2/interiors.vl2/interiors/sbunk9.glb index 0d8fb027..562ce368 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/sbunk9.glb and b/docs/base/@vl2/interiors.vl2/interiors/sbunk9.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/smisc1.glb b/docs/base/@vl2/interiors.vl2/interiors/smisc1.glb index 2209e3c0..d72566f2 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/smisc1.glb and b/docs/base/@vl2/interiors.vl2/interiors/smisc1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/smisc3.glb b/docs/base/@vl2/interiors.vl2/interiors/smisc3.glb index cce2cb9b..969da939 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/smisc3.glb and b/docs/base/@vl2/interiors.vl2/interiors/smisc3.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/smisc4.glb b/docs/base/@vl2/interiors.vl2/interiors/smisc4.glb index 55a288b7..07383656 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/smisc4.glb and b/docs/base/@vl2/interiors.vl2/interiors/smisc4.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/smisc5.glb b/docs/base/@vl2/interiors.vl2/interiors/smisc5.glb index 1eeb5261..8c808025 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/smisc5.glb and b/docs/base/@vl2/interiors.vl2/interiors/smisc5.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/smisca.glb b/docs/base/@vl2/interiors.vl2/interiors/smisca.glb index 0fb4b8f3..453227c6 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/smisca.glb and b/docs/base/@vl2/interiors.vl2/interiors/smisca.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/smiscb.glb b/docs/base/@vl2/interiors.vl2/interiors/smiscb.glb index 9e3a853e..f4c0e6f9 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/smiscb.glb and b/docs/base/@vl2/interiors.vl2/interiors/smiscb.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/smiscc.glb b/docs/base/@vl2/interiors.vl2/interiors/smiscc.glb index 750aa538..fa389bcd 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/smiscc.glb and b/docs/base/@vl2/interiors.vl2/interiors/smiscc.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/splat1.glb b/docs/base/@vl2/interiors.vl2/interiors/splat1.glb index a9465d9b..54d3ee5d 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/splat1.glb and b/docs/base/@vl2/interiors.vl2/interiors/splat1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/splat3.glb b/docs/base/@vl2/interiors.vl2/interiors/splat3.glb index 6ec04a7f..6dccb22c 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/splat3.glb and b/docs/base/@vl2/interiors.vl2/interiors/splat3.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/splat7.glb b/docs/base/@vl2/interiors.vl2/interiors/splat7.glb index 87e1ac86..eb5c9c12 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/splat7.glb and b/docs/base/@vl2/interiors.vl2/interiors/splat7.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/srock6.glb b/docs/base/@vl2/interiors.vl2/interiors/srock6.glb index efa6a681..dd829d02 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/srock6.glb and b/docs/base/@vl2/interiors.vl2/interiors/srock6.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/srock7.glb b/docs/base/@vl2/interiors.vl2/interiors/srock7.glb index 4073c923..15e7efb8 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/srock7.glb and b/docs/base/@vl2/interiors.vl2/interiors/srock7.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/srock8.glb b/docs/base/@vl2/interiors.vl2/interiors/srock8.glb index 329045a8..e904ae21 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/srock8.glb and b/docs/base/@vl2/interiors.vl2/interiors/srock8.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/srocka.glb b/docs/base/@vl2/interiors.vl2/interiors/srocka.glb index e8601e9e..332a1552 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/srocka.glb and b/docs/base/@vl2/interiors.vl2/interiors/srocka.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/srockb.glb b/docs/base/@vl2/interiors.vl2/interiors/srockb.glb index 6f77c7db..ce3916a7 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/srockb.glb and b/docs/base/@vl2/interiors.vl2/interiors/srockb.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/srockc.glb b/docs/base/@vl2/interiors.vl2/interiors/srockc.glb index b78f67d9..a98209cc 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/srockc.glb and b/docs/base/@vl2/interiors.vl2/interiors/srockc.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/sspir1.glb b/docs/base/@vl2/interiors.vl2/interiors/sspir1.glb index 31adef3a..d455e86f 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/sspir1.glb and b/docs/base/@vl2/interiors.vl2/interiors/sspir1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/sspir2.glb b/docs/base/@vl2/interiors.vl2/interiors/sspir2.glb index 36a4c4eb..415f5318 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/sspir2.glb and b/docs/base/@vl2/interiors.vl2/interiors/sspir2.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/sspir3.glb b/docs/base/@vl2/interiors.vl2/interiors/sspir3.glb index f0536baa..e5f904aa 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/sspir3.glb and b/docs/base/@vl2/interiors.vl2/interiors/sspir3.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/sspir4.glb b/docs/base/@vl2/interiors.vl2/interiors/sspir4.glb index 4344a952..7b523d6a 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/sspir4.glb and b/docs/base/@vl2/interiors.vl2/interiors/sspir4.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/stowr1.glb b/docs/base/@vl2/interiors.vl2/interiors/stowr1.glb index ef40b48c..5aa6d541 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/stowr1.glb and b/docs/base/@vl2/interiors.vl2/interiors/stowr1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/stowr3.glb b/docs/base/@vl2/interiors.vl2/interiors/stowr3.glb index 3bffa6d6..a757d904 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/stowr3.glb and b/docs/base/@vl2/interiors.vl2/interiors/stowr3.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/stowr4.glb b/docs/base/@vl2/interiors.vl2/interiors/stowr4.glb index 6f056284..39080759 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/stowr4.glb and b/docs/base/@vl2/interiors.vl2/interiors/stowr4.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/stowr6.glb b/docs/base/@vl2/interiors.vl2/interiors/stowr6.glb index 25014181..e3a0cf00 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/stowr6.glb and b/docs/base/@vl2/interiors.vl2/interiors/stowr6.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/svpad.glb b/docs/base/@vl2/interiors.vl2/interiors/svpad.glb index cf00d324..8b6c61b3 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/svpad.glb and b/docs/base/@vl2/interiors.vl2/interiors/svpad.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/swall1.glb b/docs/base/@vl2/interiors.vl2/interiors/swall1.glb index 517172eb..48b12add 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/swall1.glb and b/docs/base/@vl2/interiors.vl2/interiors/swall1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xbase1.glb b/docs/base/@vl2/interiors.vl2/interiors/xbase1.glb index 387b2ea6..cd8cc297 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xbase1.glb and b/docs/base/@vl2/interiors.vl2/interiors/xbase1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xbase2.glb b/docs/base/@vl2/interiors.vl2/interiors/xbase2.glb index 9990013b..7b4f2d73 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xbase2.glb and b/docs/base/@vl2/interiors.vl2/interiors/xbase2.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xbrdg0.glb b/docs/base/@vl2/interiors.vl2/interiors/xbrdg0.glb index 8b4c5fef..40363242 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xbrdg0.glb and b/docs/base/@vl2/interiors.vl2/interiors/xbrdg0.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xbrdg1.glb b/docs/base/@vl2/interiors.vl2/interiors/xbrdg1.glb index 01897606..d518107f 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xbrdg1.glb and b/docs/base/@vl2/interiors.vl2/interiors/xbrdg1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xbrdg10.glb b/docs/base/@vl2/interiors.vl2/interiors/xbrdg10.glb index 3f33de2d..fd96cbc1 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xbrdg10.glb and b/docs/base/@vl2/interiors.vl2/interiors/xbrdg10.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xbrdg2.glb b/docs/base/@vl2/interiors.vl2/interiors/xbrdg2.glb index 53b1e22a..7a88f714 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xbrdg2.glb and b/docs/base/@vl2/interiors.vl2/interiors/xbrdg2.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xbrdg3.glb b/docs/base/@vl2/interiors.vl2/interiors/xbrdg3.glb index eeaba48b..dc814943 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xbrdg3.glb and b/docs/base/@vl2/interiors.vl2/interiors/xbrdg3.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xbrdg4.glb b/docs/base/@vl2/interiors.vl2/interiors/xbrdg4.glb index bd259241..eb9ed72a 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xbrdg4.glb and b/docs/base/@vl2/interiors.vl2/interiors/xbrdg4.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xbrdg5.glb b/docs/base/@vl2/interiors.vl2/interiors/xbrdg5.glb index 0bf53405..82313e49 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xbrdg5.glb and b/docs/base/@vl2/interiors.vl2/interiors/xbrdg5.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xbrdg6.glb b/docs/base/@vl2/interiors.vl2/interiors/xbrdg6.glb index 422c7f6b..de80e57c 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xbrdg6.glb and b/docs/base/@vl2/interiors.vl2/interiors/xbrdg6.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xbrdg7.glb b/docs/base/@vl2/interiors.vl2/interiors/xbrdg7.glb index 4cb6700d..e7892eaf 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xbrdg7.glb and b/docs/base/@vl2/interiors.vl2/interiors/xbrdg7.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xbrdg8.glb b/docs/base/@vl2/interiors.vl2/interiors/xbrdg8.glb index efcffa50..e63bc93e 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xbrdg8.glb and b/docs/base/@vl2/interiors.vl2/interiors/xbrdg8.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xbrdg9.glb b/docs/base/@vl2/interiors.vl2/interiors/xbrdg9.glb index afd6af7e..f0fd8bdb 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xbrdg9.glb and b/docs/base/@vl2/interiors.vl2/interiors/xbrdg9.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xbrdga.glb b/docs/base/@vl2/interiors.vl2/interiors/xbrdga.glb index b962aca7..d8407509 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xbrdga.glb and b/docs/base/@vl2/interiors.vl2/interiors/xbrdga.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xbrdgb.glb b/docs/base/@vl2/interiors.vl2/interiors/xbrdgb.glb index a4e0a69c..371f272a 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xbrdgb.glb and b/docs/base/@vl2/interiors.vl2/interiors/xbrdgb.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xbrdgn.glb b/docs/base/@vl2/interiors.vl2/interiors/xbrdgn.glb index 73019ec4..7a6848d8 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xbrdgn.glb and b/docs/base/@vl2/interiors.vl2/interiors/xbrdgn.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xbrdgo.glb b/docs/base/@vl2/interiors.vl2/interiors/xbrdgo.glb index e06a88f8..6bdf23fe 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xbrdgo.glb and b/docs/base/@vl2/interiors.vl2/interiors/xbrdgo.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xbunk1.glb b/docs/base/@vl2/interiors.vl2/interiors/xbunk1.glb index 71f6fd2c..a22a868d 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xbunk1.glb and b/docs/base/@vl2/interiors.vl2/interiors/xbunk1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xbunk5.glb b/docs/base/@vl2/interiors.vl2/interiors/xbunk5.glb index 7232cd84..830fc009 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xbunk5.glb and b/docs/base/@vl2/interiors.vl2/interiors/xbunk5.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xbunk6.glb b/docs/base/@vl2/interiors.vl2/interiors/xbunk6.glb index 7bab6297..3efa9fcc 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xbunk6.glb and b/docs/base/@vl2/interiors.vl2/interiors/xbunk6.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xbunk9.glb b/docs/base/@vl2/interiors.vl2/interiors/xbunk9.glb index 2b2eae16..10d4be86 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xbunk9.glb and b/docs/base/@vl2/interiors.vl2/interiors/xbunk9.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xbunkb.glb b/docs/base/@vl2/interiors.vl2/interiors/xbunkb.glb index 5aee7f98..8d4b71e5 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xbunkb.glb and b/docs/base/@vl2/interiors.vl2/interiors/xbunkb.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xmisc1.glb b/docs/base/@vl2/interiors.vl2/interiors/xmisc1.glb index addfb425..8cc34857 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xmisc1.glb and b/docs/base/@vl2/interiors.vl2/interiors/xmisc1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xmisc2.glb b/docs/base/@vl2/interiors.vl2/interiors/xmisc2.glb index e9e0fea8..c4eed50c 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xmisc2.glb and b/docs/base/@vl2/interiors.vl2/interiors/xmisc2.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xmisc3.glb b/docs/base/@vl2/interiors.vl2/interiors/xmisc3.glb index 272e8b18..3a940415 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xmisc3.glb and b/docs/base/@vl2/interiors.vl2/interiors/xmisc3.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xmisc4.glb b/docs/base/@vl2/interiors.vl2/interiors/xmisc4.glb index 9d2cab0c..8dbc113b 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xmisc4.glb and b/docs/base/@vl2/interiors.vl2/interiors/xmisc4.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xmisc5.glb b/docs/base/@vl2/interiors.vl2/interiors/xmisc5.glb index 19a9512e..d9e1061a 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xmisc5.glb and b/docs/base/@vl2/interiors.vl2/interiors/xmisc5.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xmisca.glb b/docs/base/@vl2/interiors.vl2/interiors/xmisca.glb index 5fa54ffb..86dceb42 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xmisca.glb and b/docs/base/@vl2/interiors.vl2/interiors/xmisca.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xmiscb.glb b/docs/base/@vl2/interiors.vl2/interiors/xmiscb.glb index a8709608..047dd0c0 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xmiscb.glb and b/docs/base/@vl2/interiors.vl2/interiors/xmiscb.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xmiscc.glb b/docs/base/@vl2/interiors.vl2/interiors/xmiscc.glb index 98819444..a4653fde 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xmiscc.glb and b/docs/base/@vl2/interiors.vl2/interiors/xmiscc.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xplat1.glb b/docs/base/@vl2/interiors.vl2/interiors/xplat1.glb index 5bcf6713..45b1ff08 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xplat1.glb and b/docs/base/@vl2/interiors.vl2/interiors/xplat1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xplat2.glb b/docs/base/@vl2/interiors.vl2/interiors/xplat2.glb index c702e6b0..d6952dc0 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xplat2.glb and b/docs/base/@vl2/interiors.vl2/interiors/xplat2.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xplat3.glb b/docs/base/@vl2/interiors.vl2/interiors/xplat3.glb index 766a588b..55613e8b 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xplat3.glb and b/docs/base/@vl2/interiors.vl2/interiors/xplat3.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xrock6.glb b/docs/base/@vl2/interiors.vl2/interiors/xrock6.glb index 7f63923b..01ee083d 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xrock6.glb and b/docs/base/@vl2/interiors.vl2/interiors/xrock6.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xrock7.glb b/docs/base/@vl2/interiors.vl2/interiors/xrock7.glb index 5cacfedd..e7ec6172 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xrock7.glb and b/docs/base/@vl2/interiors.vl2/interiors/xrock7.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xrock8.glb b/docs/base/@vl2/interiors.vl2/interiors/xrock8.glb index 04bb85fe..8ae6e69c 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xrock8.glb and b/docs/base/@vl2/interiors.vl2/interiors/xrock8.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xrocka.glb b/docs/base/@vl2/interiors.vl2/interiors/xrocka.glb index c8bbb52a..c0d40203 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xrocka.glb and b/docs/base/@vl2/interiors.vl2/interiors/xrocka.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xrockb.glb b/docs/base/@vl2/interiors.vl2/interiors/xrockb.glb index d78303e8..3bcf4a89 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xrockb.glb and b/docs/base/@vl2/interiors.vl2/interiors/xrockb.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xrockc.glb b/docs/base/@vl2/interiors.vl2/interiors/xrockc.glb index 57d1f96a..4c75113a 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xrockc.glb and b/docs/base/@vl2/interiors.vl2/interiors/xrockc.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xspir1.glb b/docs/base/@vl2/interiors.vl2/interiors/xspir1.glb index cc4fa7c3..2bb388f3 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xspir1.glb and b/docs/base/@vl2/interiors.vl2/interiors/xspir1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xspir2.glb b/docs/base/@vl2/interiors.vl2/interiors/xspir2.glb index af358df7..02c8bff6 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xspir2.glb and b/docs/base/@vl2/interiors.vl2/interiors/xspir2.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xspir3.glb b/docs/base/@vl2/interiors.vl2/interiors/xspir3.glb index 237f9601..73132753 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xspir3.glb and b/docs/base/@vl2/interiors.vl2/interiors/xspir3.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xspir5.glb b/docs/base/@vl2/interiors.vl2/interiors/xspir5.glb index e02015dd..1b7b49f3 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xspir5.glb and b/docs/base/@vl2/interiors.vl2/interiors/xspir5.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xtowr1.glb b/docs/base/@vl2/interiors.vl2/interiors/xtowr1.glb index e421d0b0..f7b52b30 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xtowr1.glb and b/docs/base/@vl2/interiors.vl2/interiors/xtowr1.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xtowr3.glb b/docs/base/@vl2/interiors.vl2/interiors/xtowr3.glb index 2093ca8d..0a2a8070 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xtowr3.glb and b/docs/base/@vl2/interiors.vl2/interiors/xtowr3.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xtowr4.glb b/docs/base/@vl2/interiors.vl2/interiors/xtowr4.glb index e7827594..58011719 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xtowr4.glb and b/docs/base/@vl2/interiors.vl2/interiors/xtowr4.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xtowr7.glb b/docs/base/@vl2/interiors.vl2/interiors/xtowr7.glb index bf81232f..2e4ec03d 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xtowr7.glb and b/docs/base/@vl2/interiors.vl2/interiors/xtowr7.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xvpad.glb b/docs/base/@vl2/interiors.vl2/interiors/xvpad.glb index 6b2d5a56..dcb4939f 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xvpad.glb and b/docs/base/@vl2/interiors.vl2/interiors/xvpad.glb differ diff --git a/docs/base/@vl2/interiors.vl2/interiors/xwall1.glb b/docs/base/@vl2/interiors.vl2/interiors/xwall1.glb index a84c16ad..22f56d89 100644 Binary files a/docs/base/@vl2/interiors.vl2/interiors/xwall1.glb and b/docs/base/@vl2/interiors.vl2/interiors/xwall1.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/ammo_chaingun.glb b/docs/base/@vl2/shapes.vl2/shapes/ammo_chaingun.glb index 2e952ace..d17c7249 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/ammo_chaingun.glb and b/docs/base/@vl2/shapes.vl2/shapes/ammo_chaingun.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/ammo_disc.glb b/docs/base/@vl2/shapes.vl2/shapes/ammo_disc.glb index a6f3a538..97f5f57c 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/ammo_disc.glb and b/docs/base/@vl2/shapes.vl2/shapes/ammo_disc.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/ammo_grenade.glb b/docs/base/@vl2/shapes.vl2/shapes/ammo_grenade.glb index 0e15b104..d696cf90 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/ammo_grenade.glb and b/docs/base/@vl2/shapes.vl2/shapes/ammo_grenade.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/ammo_mine.glb b/docs/base/@vl2/shapes.vl2/shapes/ammo_mine.glb index 612f7f6b..75bb790b 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/ammo_mine.glb and b/docs/base/@vl2/shapes.vl2/shapes/ammo_mine.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/ammo_missile.glb b/docs/base/@vl2/shapes.vl2/shapes/ammo_missile.glb index f3a84344..d28b996a 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/ammo_missile.glb and b/docs/base/@vl2/shapes.vl2/shapes/ammo_missile.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/ammo_mortar.glb b/docs/base/@vl2/shapes.vl2/shapes/ammo_mortar.glb index dad79a61..bf304b1d 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/ammo_mortar.glb and b/docs/base/@vl2/shapes.vl2/shapes/ammo_mortar.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/ammo_plasma.glb b/docs/base/@vl2/shapes.vl2/shapes/ammo_plasma.glb index 32d86abd..e0ff74d4 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/ammo_plasma.glb and b/docs/base/@vl2/shapes.vl2/shapes/ammo_plasma.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/banner_honor.glb b/docs/base/@vl2/shapes.vl2/shapes/banner_honor.glb index 89893688..693ff219 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/banner_honor.glb and b/docs/base/@vl2/shapes.vl2/shapes/banner_honor.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/banner_strength.glb b/docs/base/@vl2/shapes.vl2/shapes/banner_strength.glb index 0c7fb635..aaaa159f 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/banner_strength.glb and b/docs/base/@vl2/shapes.vl2/shapes/banner_strength.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/banner_unity.glb b/docs/base/@vl2/shapes.vl2/shapes/banner_unity.glb index 0b5dde55..8d5acbe3 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/banner_unity.glb and b/docs/base/@vl2/shapes.vl2/shapes/banner_unity.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/beacon.glb b/docs/base/@vl2/shapes.vl2/shapes/beacon.glb index 62a36a6d..100831c8 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/beacon.glb and b/docs/base/@vl2/shapes.vl2/shapes/beacon.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/bio_player_debris.glb b/docs/base/@vl2/shapes.vl2/shapes/bio_player_debris.glb index 2b76ad2d..1203556d 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/bio_player_debris.glb and b/docs/base/@vl2/shapes.vl2/shapes/bio_player_debris.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/bioderm_heavy.glb b/docs/base/@vl2/shapes.vl2/shapes/bioderm_heavy.glb index dad52fd7..7d1a7377 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/bioderm_heavy.glb and b/docs/base/@vl2/shapes.vl2/shapes/bioderm_heavy.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/bioderm_light.glb b/docs/base/@vl2/shapes.vl2/shapes/bioderm_light.glb index e89c35c8..6914b79b 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/bioderm_light.glb and b/docs/base/@vl2/shapes.vl2/shapes/bioderm_light.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/bioderm_medium.glb b/docs/base/@vl2/shapes.vl2/shapes/bioderm_medium.glb index 50a89619..d2a283f6 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/bioderm_medium.glb and b/docs/base/@vl2/shapes.vl2/shapes/bioderm_medium.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/bmiscf.glb b/docs/base/@vl2/shapes.vl2/shapes/bmiscf.glb index 4f1a135e..e7672c08 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/bmiscf.glb and b/docs/base/@vl2/shapes.vl2/shapes/bmiscf.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/bomb.glb b/docs/base/@vl2/shapes.vl2/shapes/bomb.glb index d81988d7..efc65d0f 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/bomb.glb and b/docs/base/@vl2/shapes.vl2/shapes/bomb.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/bombers_eye.glb b/docs/base/@vl2/shapes.vl2/shapes/bombers_eye.glb index 9e982a76..ef0e348a 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/bombers_eye.glb and b/docs/base/@vl2/shapes.vl2/shapes/bombers_eye.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/borg1.glb b/docs/base/@vl2/shapes.vl2/shapes/borg1.glb index a6e375b7..d149cbb7 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/borg1.glb and b/docs/base/@vl2/shapes.vl2/shapes/borg1.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/borg12.glb b/docs/base/@vl2/shapes.vl2/shapes/borg12.glb index 3d0186e7..a8176caf 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/borg12.glb and b/docs/base/@vl2/shapes.vl2/shapes/borg12.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/borg13.glb b/docs/base/@vl2/shapes.vl2/shapes/borg13.glb index 93ba7342..06d7baea 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/borg13.glb and b/docs/base/@vl2/shapes.vl2/shapes/borg13.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/borg15.glb b/docs/base/@vl2/shapes.vl2/shapes/borg15.glb index bb761d57..62733dd5 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/borg15.glb and b/docs/base/@vl2/shapes.vl2/shapes/borg15.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/borg16.glb b/docs/base/@vl2/shapes.vl2/shapes/borg16.glb index 95b212e7..e83e619f 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/borg16.glb and b/docs/base/@vl2/shapes.vl2/shapes/borg16.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/borg17.glb b/docs/base/@vl2/shapes.vl2/shapes/borg17.glb index 4908e9a4..8d29b29d 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/borg17.glb and b/docs/base/@vl2/shapes.vl2/shapes/borg17.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/borg18.glb b/docs/base/@vl2/shapes.vl2/shapes/borg18.glb index 6e7ad4fe..9e54650a 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/borg18.glb and b/docs/base/@vl2/shapes.vl2/shapes/borg18.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/borg19.glb b/docs/base/@vl2/shapes.vl2/shapes/borg19.glb index 14518f16..0bd5b8af 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/borg19.glb and b/docs/base/@vl2/shapes.vl2/shapes/borg19.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/borg20.glb b/docs/base/@vl2/shapes.vl2/shapes/borg20.glb index a51ca963..5c3807d6 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/borg20.glb and b/docs/base/@vl2/shapes.vl2/shapes/borg20.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/borg23.glb b/docs/base/@vl2/shapes.vl2/shapes/borg23.glb index 24c92004..7ec91a9a 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/borg23.glb and b/docs/base/@vl2/shapes.vl2/shapes/borg23.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/borg25.glb b/docs/base/@vl2/shapes.vl2/shapes/borg25.glb index dc0de564..2cc07fcb 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/borg25.glb and b/docs/base/@vl2/shapes.vl2/shapes/borg25.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/borg31.glb b/docs/base/@vl2/shapes.vl2/shapes/borg31.glb index 3c3793b1..4c260f73 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/borg31.glb and b/docs/base/@vl2/shapes.vl2/shapes/borg31.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/borg32.glb b/docs/base/@vl2/shapes.vl2/shapes/borg32.glb index cae401ca..872c00de 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/borg32.glb and b/docs/base/@vl2/shapes.vl2/shapes/borg32.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/borg33.glb b/docs/base/@vl2/shapes.vl2/shapes/borg33.glb index 1221d5a6..7161f8f4 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/borg33.glb and b/docs/base/@vl2/shapes.vl2/shapes/borg33.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/borg34.glb b/docs/base/@vl2/shapes.vl2/shapes/borg34.glb index 8724aa0c..50416f6c 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/borg34.glb and b/docs/base/@vl2/shapes.vl2/shapes/borg34.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/borg4.glb b/docs/base/@vl2/shapes.vl2/shapes/borg4.glb index 82bdfa16..dee2829b 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/borg4.glb and b/docs/base/@vl2/shapes.vl2/shapes/borg4.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/borg5.glb b/docs/base/@vl2/shapes.vl2/shapes/borg5.glb index ada9fc76..dd937e7c 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/borg5.glb and b/docs/base/@vl2/shapes.vl2/shapes/borg5.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/borg6.glb b/docs/base/@vl2/shapes.vl2/shapes/borg6.glb index f3966e8c..cd3cc099 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/borg6.glb and b/docs/base/@vl2/shapes.vl2/shapes/borg6.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/borg7.glb b/docs/base/@vl2/shapes.vl2/shapes/borg7.glb index f74c5ebf..d80bd606 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/borg7.glb and b/docs/base/@vl2/shapes.vl2/shapes/borg7.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/borg8.glb b/docs/base/@vl2/shapes.vl2/shapes/borg8.glb index 80ab25ce..a26b0c84 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/borg8.glb and b/docs/base/@vl2/shapes.vl2/shapes/borg8.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/camera.glb b/docs/base/@vl2/shapes.vl2/shapes/camera.glb index fbe0d296..d7aff978 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/camera.glb and b/docs/base/@vl2/shapes.vl2/shapes/camera.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/debris_generic.glb b/docs/base/@vl2/shapes.vl2/shapes/debris_generic.glb index 16255366..de79cc57 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/debris_generic.glb and b/docs/base/@vl2/shapes.vl2/shapes/debris_generic.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/debris_generic_small.glb b/docs/base/@vl2/shapes.vl2/shapes/debris_generic_small.glb index 0c02868c..8c3918cf 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/debris_generic_small.glb and b/docs/base/@vl2/shapes.vl2/shapes/debris_generic_small.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/debris_player.glb b/docs/base/@vl2/shapes.vl2/shapes/debris_player.glb index df20f4a6..f5aecdce 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/debris_player.glb and b/docs/base/@vl2/shapes.vl2/shapes/debris_player.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/deploy_ammo.glb b/docs/base/@vl2/shapes.vl2/shapes/deploy_ammo.glb index 8a7663c8..beb9f313 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/deploy_ammo.glb and b/docs/base/@vl2/shapes.vl2/shapes/deploy_ammo.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/deploy_inventory.glb b/docs/base/@vl2/shapes.vl2/shapes/deploy_inventory.glb index 87944296..683f655f 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/deploy_inventory.glb and b/docs/base/@vl2/shapes.vl2/shapes/deploy_inventory.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/deploy_sensor_motion.glb b/docs/base/@vl2/shapes.vl2/shapes/deploy_sensor_motion.glb index c73e96ee..0b49a1b7 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/deploy_sensor_motion.glb and b/docs/base/@vl2/shapes.vl2/shapes/deploy_sensor_motion.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/deploy_sensor_pulse.glb b/docs/base/@vl2/shapes.vl2/shapes/deploy_sensor_pulse.glb index 24457f8f..e212db99 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/deploy_sensor_pulse.glb and b/docs/base/@vl2/shapes.vl2/shapes/deploy_sensor_pulse.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/disc.glb b/docs/base/@vl2/shapes.vl2/shapes/disc.glb index f26af41d..55ed6674 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/disc.glb and b/docs/base/@vl2/shapes.vl2/shapes/disc.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/dmiscf.glb b/docs/base/@vl2/shapes.vl2/shapes/dmiscf.glb index 923d2f11..5cac7b40 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/dmiscf.glb and b/docs/base/@vl2/shapes.vl2/shapes/dmiscf.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/dorg15.glb b/docs/base/@vl2/shapes.vl2/shapes/dorg15.glb index c2b1bcd9..225097c1 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/dorg15.glb and b/docs/base/@vl2/shapes.vl2/shapes/dorg15.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/dorg16.glb b/docs/base/@vl2/shapes.vl2/shapes/dorg16.glb index 8a666820..9a307cd2 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/dorg16.glb and b/docs/base/@vl2/shapes.vl2/shapes/dorg16.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/dorg17.glb b/docs/base/@vl2/shapes.vl2/shapes/dorg17.glb index 1aa83de3..577d72fd 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/dorg17.glb and b/docs/base/@vl2/shapes.vl2/shapes/dorg17.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/dorg18.glb b/docs/base/@vl2/shapes.vl2/shapes/dorg18.glb index c694ad70..fd66dfc8 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/dorg18.glb and b/docs/base/@vl2/shapes.vl2/shapes/dorg18.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/dorg19.glb b/docs/base/@vl2/shapes.vl2/shapes/dorg19.glb index 39b543b9..770d08f6 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/dorg19.glb and b/docs/base/@vl2/shapes.vl2/shapes/dorg19.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/effect_plasma_explosion.glb b/docs/base/@vl2/shapes.vl2/shapes/effect_plasma_explosion.glb index ff4fd0e2..2d07beec 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/effect_plasma_explosion.glb and b/docs/base/@vl2/shapes.vl2/shapes/effect_plasma_explosion.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/energy_bolt.glb b/docs/base/@vl2/shapes.vl2/shapes/energy_bolt.glb index dce5eb24..7e0dce28 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/energy_bolt.glb and b/docs/base/@vl2/shapes.vl2/shapes/energy_bolt.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/energy_explosion.glb b/docs/base/@vl2/shapes.vl2/shapes/energy_explosion.glb index a6aeaa8f..ba264eb2 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/energy_explosion.glb and b/docs/base/@vl2/shapes.vl2/shapes/energy_explosion.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/ext_flagstand.glb b/docs/base/@vl2/shapes.vl2/shapes/ext_flagstand.glb index 99a98ce6..1f4a476a 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/ext_flagstand.glb and b/docs/base/@vl2/shapes.vl2/shapes/ext_flagstand.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/flag.glb b/docs/base/@vl2/shapes.vl2/shapes/flag.glb index 021b3aea..f97ef85f 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/flag.glb and b/docs/base/@vl2/shapes.vl2/shapes/flag.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/gravemarker_1.glb b/docs/base/@vl2/shapes.vl2/shapes/gravemarker_1.glb index c4f500c8..890c1691 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/gravemarker_1.glb and b/docs/base/@vl2/shapes.vl2/shapes/gravemarker_1.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/grenade.glb b/docs/base/@vl2/shapes.vl2/shapes/grenade.glb index 544796d8..6b6fb802 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/grenade.glb and b/docs/base/@vl2/shapes.vl2/shapes/grenade.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/heavy_male.glb b/docs/base/@vl2/shapes.vl2/shapes/heavy_male.glb index 69168715..5efff44e 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/heavy_male.glb and b/docs/base/@vl2/shapes.vl2/shapes/heavy_male.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/huntersflag.glb b/docs/base/@vl2/shapes.vl2/shapes/huntersflag.glb index f0cbbd83..20879fa4 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/huntersflag.glb and b/docs/base/@vl2/shapes.vl2/shapes/huntersflag.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/int_flagstand.glb b/docs/base/@vl2/shapes.vl2/shapes/int_flagstand.glb index 72604b17..a1d49831 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/int_flagstand.glb and b/docs/base/@vl2/shapes.vl2/shapes/int_flagstand.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/light_female.glb b/docs/base/@vl2/shapes.vl2/shapes/light_female.glb index 23bb18c5..af378ed2 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/light_female.glb and b/docs/base/@vl2/shapes.vl2/shapes/light_female.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/light_male.glb b/docs/base/@vl2/shapes.vl2/shapes/light_male.glb index b80f9897..acd491f6 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/light_male.glb and b/docs/base/@vl2/shapes.vl2/shapes/light_male.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/light_male_dead.glb b/docs/base/@vl2/shapes.vl2/shapes/light_male_dead.glb index 8d4cd0a8..fb642b19 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/light_male_dead.glb and b/docs/base/@vl2/shapes.vl2/shapes/light_male_dead.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/medium_female.glb b/docs/base/@vl2/shapes.vl2/shapes/medium_female.glb index 5b4da055..49fab10e 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/medium_female.glb and b/docs/base/@vl2/shapes.vl2/shapes/medium_female.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/medium_male.glb b/docs/base/@vl2/shapes.vl2/shapes/medium_male.glb index 1a6cb6a5..f2daa909 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/medium_male.glb and b/docs/base/@vl2/shapes.vl2/shapes/medium_male.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/medium_male_dead.glb b/docs/base/@vl2/shapes.vl2/shapes/medium_male_dead.glb index 1656e083..e57405ba 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/medium_male_dead.glb and b/docs/base/@vl2/shapes.vl2/shapes/medium_male_dead.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/mine.glb b/docs/base/@vl2/shapes.vl2/shapes/mine.glb index 7b030935..a5d75678 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/mine.glb and b/docs/base/@vl2/shapes.vl2/shapes/mine.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/mortar_explosion.glb b/docs/base/@vl2/shapes.vl2/shapes/mortar_explosion.glb index 817fbd7c..a99fe373 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/mortar_explosion.glb and b/docs/base/@vl2/shapes.vl2/shapes/mortar_explosion.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/nexus_effect.glb b/docs/base/@vl2/shapes.vl2/shapes/nexus_effect.glb index af4fa27d..bb1b3bf4 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/nexus_effect.glb and b/docs/base/@vl2/shapes.vl2/shapes/nexus_effect.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/nexusbase.glb b/docs/base/@vl2/shapes.vl2/shapes/nexusbase.glb index 2e0d805e..e13628ff 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/nexusbase.glb and b/docs/base/@vl2/shapes.vl2/shapes/nexusbase.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/nexuscap.glb b/docs/base/@vl2/shapes.vl2/shapes/nexuscap.glb index b2e064fc..97432d94 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/nexuscap.glb and b/docs/base/@vl2/shapes.vl2/shapes/nexuscap.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/pack_barrel_aa.glb b/docs/base/@vl2/shapes.vl2/shapes/pack_barrel_aa.glb index b404c93c..5acea557 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/pack_barrel_aa.glb and b/docs/base/@vl2/shapes.vl2/shapes/pack_barrel_aa.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/pack_barrel_elf.glb b/docs/base/@vl2/shapes.vl2/shapes/pack_barrel_elf.glb index cdd627e3..556a9abb 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/pack_barrel_elf.glb and b/docs/base/@vl2/shapes.vl2/shapes/pack_barrel_elf.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/pack_barrel_fusion.glb b/docs/base/@vl2/shapes.vl2/shapes/pack_barrel_fusion.glb index 03de93a0..38468307 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/pack_barrel_fusion.glb and b/docs/base/@vl2/shapes.vl2/shapes/pack_barrel_fusion.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/pack_barrel_missile.glb b/docs/base/@vl2/shapes.vl2/shapes/pack_barrel_missile.glb index 587f4539..39e048ce 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/pack_barrel_missile.glb and b/docs/base/@vl2/shapes.vl2/shapes/pack_barrel_missile.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/pack_barrel_mortar.glb b/docs/base/@vl2/shapes.vl2/shapes/pack_barrel_mortar.glb index 65da5040..83f5929c 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/pack_barrel_mortar.glb and b/docs/base/@vl2/shapes.vl2/shapes/pack_barrel_mortar.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/pack_deploy_ammo.glb b/docs/base/@vl2/shapes.vl2/shapes/pack_deploy_ammo.glb index b037f6b2..e9ec5cca 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/pack_deploy_ammo.glb and b/docs/base/@vl2/shapes.vl2/shapes/pack_deploy_ammo.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/pack_deploy_inventory.glb b/docs/base/@vl2/shapes.vl2/shapes/pack_deploy_inventory.glb index 4c5512d9..9b1545db 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/pack_deploy_inventory.glb and b/docs/base/@vl2/shapes.vl2/shapes/pack_deploy_inventory.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/pack_deploy_sensor_motion.glb b/docs/base/@vl2/shapes.vl2/shapes/pack_deploy_sensor_motion.glb index 77d6f754..b7fbee80 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/pack_deploy_sensor_motion.glb and b/docs/base/@vl2/shapes.vl2/shapes/pack_deploy_sensor_motion.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/pack_deploy_sensor_pulse.glb b/docs/base/@vl2/shapes.vl2/shapes/pack_deploy_sensor_pulse.glb index 5633612d..18f5d7c1 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/pack_deploy_sensor_pulse.glb and b/docs/base/@vl2/shapes.vl2/shapes/pack_deploy_sensor_pulse.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/pack_deploy_turreti.glb b/docs/base/@vl2/shapes.vl2/shapes/pack_deploy_turreti.glb index a03faa5f..9a7bbec6 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/pack_deploy_turreti.glb and b/docs/base/@vl2/shapes.vl2/shapes/pack_deploy_turreti.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/pack_deploy_turreto.glb b/docs/base/@vl2/shapes.vl2/shapes/pack_deploy_turreto.glb index 185f7dee..2743ed19 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/pack_deploy_turreto.glb and b/docs/base/@vl2/shapes.vl2/shapes/pack_deploy_turreto.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_ammo.glb b/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_ammo.glb index 018d64b7..209f337d 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_ammo.glb and b/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_ammo.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_cloaking.glb b/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_cloaking.glb index 977249b7..6dc09db0 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_cloaking.glb and b/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_cloaking.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_energy.glb b/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_energy.glb index 1b69bb91..17dafa2a 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_energy.glb and b/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_energy.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_repair.glb b/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_repair.glb index 8596ee08..0c47da21 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_repair.glb and b/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_repair.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_satchel.glb b/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_satchel.glb index 48b368de..6f7a9606 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_satchel.glb and b/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_satchel.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_sensorjammer.glb b/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_sensorjammer.glb index 68ce2f50..c88c8ed5 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_sensorjammer.glb and b/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_sensorjammer.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_shield.glb b/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_shield.glb index 626266e8..73ec2526 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_shield.glb and b/docs/base/@vl2/shapes.vl2/shapes/pack_upgrade_shield.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/pmiscf.glb b/docs/base/@vl2/shapes.vl2/shapes/pmiscf.glb index 24c365f9..d6c8c80b 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/pmiscf.glb and b/docs/base/@vl2/shapes.vl2/shapes/pmiscf.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/porg1.glb b/docs/base/@vl2/shapes.vl2/shapes/porg1.glb index 8721df76..92298ee2 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/porg1.glb and b/docs/base/@vl2/shapes.vl2/shapes/porg1.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/porg2.glb b/docs/base/@vl2/shapes.vl2/shapes/porg2.glb index 2fbc2413..78bf12e6 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/porg2.glb and b/docs/base/@vl2/shapes.vl2/shapes/porg2.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/porg20.glb b/docs/base/@vl2/shapes.vl2/shapes/porg20.glb index d0ef7a20..874dadc7 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/porg20.glb and b/docs/base/@vl2/shapes.vl2/shapes/porg20.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/porg22.glb b/docs/base/@vl2/shapes.vl2/shapes/porg22.glb index 4067a4c0..8f0adaab 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/porg22.glb and b/docs/base/@vl2/shapes.vl2/shapes/porg22.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/porg3.glb b/docs/base/@vl2/shapes.vl2/shapes/porg3.glb index 46d13fab..3d3a6e59 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/porg3.glb and b/docs/base/@vl2/shapes.vl2/shapes/porg3.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/porg4.glb b/docs/base/@vl2/shapes.vl2/shapes/porg4.glb index 0c92cb89..002850a6 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/porg4.glb and b/docs/base/@vl2/shapes.vl2/shapes/porg4.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/porg5.glb b/docs/base/@vl2/shapes.vl2/shapes/porg5.glb index 431a7d82..7a8ad7d3 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/porg5.glb and b/docs/base/@vl2/shapes.vl2/shapes/porg5.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/porg6.glb b/docs/base/@vl2/shapes.vl2/shapes/porg6.glb index 86104648..adc72cce 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/porg6.glb and b/docs/base/@vl2/shapes.vl2/shapes/porg6.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/repair_kit.glb b/docs/base/@vl2/shapes.vl2/shapes/repair_kit.glb index 480b6b23..94f71766 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/repair_kit.glb and b/docs/base/@vl2/shapes.vl2/shapes/repair_kit.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/repair_patch.glb b/docs/base/@vl2/shapes.vl2/shapes/repair_patch.glb index 164ed9ec..12c15c98 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/repair_patch.glb and b/docs/base/@vl2/shapes.vl2/shapes/repair_patch.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/reticle_bomber.glb b/docs/base/@vl2/shapes.vl2/shapes/reticle_bomber.glb index 44a1553a..ca650012 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/reticle_bomber.glb and b/docs/base/@vl2/shapes.vl2/shapes/reticle_bomber.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/sensor_pulse_large.glb b/docs/base/@vl2/shapes.vl2/shapes/sensor_pulse_large.glb index 6f8a777d..fe69d731 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/sensor_pulse_large.glb and b/docs/base/@vl2/shapes.vl2/shapes/sensor_pulse_large.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/sensor_pulse_medium.glb b/docs/base/@vl2/shapes.vl2/shapes/sensor_pulse_medium.glb index 506c0ef6..3fff266e 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/sensor_pulse_medium.glb and b/docs/base/@vl2/shapes.vl2/shapes/sensor_pulse_medium.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/smiscf.glb b/docs/base/@vl2/shapes.vl2/shapes/smiscf.glb index e110e90e..c2c2e665 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/smiscf.glb and b/docs/base/@vl2/shapes.vl2/shapes/smiscf.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/solarpanel.glb b/docs/base/@vl2/shapes.vl2/shapes/solarpanel.glb index a78e880d..e7ad2141 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/solarpanel.glb and b/docs/base/@vl2/shapes.vl2/shapes/solarpanel.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/sorg20.glb b/docs/base/@vl2/shapes.vl2/shapes/sorg20.glb index d10b6a16..7892bc31 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/sorg20.glb and b/docs/base/@vl2/shapes.vl2/shapes/sorg20.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/sorg21.glb b/docs/base/@vl2/shapes.vl2/shapes/sorg21.glb index 4a4f8128..2d33df64 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/sorg21.glb and b/docs/base/@vl2/shapes.vl2/shapes/sorg21.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/sorg22.glb b/docs/base/@vl2/shapes.vl2/shapes/sorg22.glb index 6cdcf677..769f65c6 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/sorg22.glb and b/docs/base/@vl2/shapes.vl2/shapes/sorg22.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/sorg23.glb b/docs/base/@vl2/shapes.vl2/shapes/sorg23.glb index 7ba619e2..0d85184a 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/sorg23.glb and b/docs/base/@vl2/shapes.vl2/shapes/sorg23.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/sorg24.glb b/docs/base/@vl2/shapes.vl2/shapes/sorg24.glb index 104e9ba1..d614f4cb 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/sorg24.glb and b/docs/base/@vl2/shapes.vl2/shapes/sorg24.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/stackable1l.glb b/docs/base/@vl2/shapes.vl2/shapes/stackable1l.glb index a4799724..0cbed72d 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/stackable1l.glb and b/docs/base/@vl2/shapes.vl2/shapes/stackable1l.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/stackable1m.glb b/docs/base/@vl2/shapes.vl2/shapes/stackable1m.glb index c96e0ddd..3fdea659 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/stackable1m.glb and b/docs/base/@vl2/shapes.vl2/shapes/stackable1m.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/stackable1s.glb b/docs/base/@vl2/shapes.vl2/shapes/stackable1s.glb index 41bbccbc..561ba7a9 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/stackable1s.glb and b/docs/base/@vl2/shapes.vl2/shapes/stackable1s.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/stackable2l.glb b/docs/base/@vl2/shapes.vl2/shapes/stackable2l.glb index cf54afdb..793902d8 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/stackable2l.glb and b/docs/base/@vl2/shapes.vl2/shapes/stackable2l.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/stackable2m.glb b/docs/base/@vl2/shapes.vl2/shapes/stackable2m.glb index 3da2e90f..7718c693 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/stackable2m.glb and b/docs/base/@vl2/shapes.vl2/shapes/stackable2m.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/stackable2s.glb b/docs/base/@vl2/shapes.vl2/shapes/stackable2s.glb index 71fa1998..a07be05e 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/stackable2s.glb and b/docs/base/@vl2/shapes.vl2/shapes/stackable2s.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/stackable3l.glb b/docs/base/@vl2/shapes.vl2/shapes/stackable3l.glb index 982387fd..73aba775 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/stackable3l.glb and b/docs/base/@vl2/shapes.vl2/shapes/stackable3l.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/stackable3m.glb b/docs/base/@vl2/shapes.vl2/shapes/stackable3m.glb index 61b43075..a695690e 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/stackable3m.glb and b/docs/base/@vl2/shapes.vl2/shapes/stackable3m.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/stackable3s.glb b/docs/base/@vl2/shapes.vl2/shapes/stackable3s.glb index 8e335fad..f9f2fe6a 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/stackable3s.glb and b/docs/base/@vl2/shapes.vl2/shapes/stackable3s.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/stackable4l.glb b/docs/base/@vl2/shapes.vl2/shapes/stackable4l.glb index 1147d4ac..ccd37025 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/stackable4l.glb and b/docs/base/@vl2/shapes.vl2/shapes/stackable4l.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/stackable4m.glb b/docs/base/@vl2/shapes.vl2/shapes/stackable4m.glb index 10971042..72d06b7a 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/stackable4m.glb and b/docs/base/@vl2/shapes.vl2/shapes/stackable4m.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/stackable5l.glb b/docs/base/@vl2/shapes.vl2/shapes/stackable5l.glb index e6270369..ebbd8d6e 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/stackable5l.glb and b/docs/base/@vl2/shapes.vl2/shapes/stackable5l.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/stackable5m.glb b/docs/base/@vl2/shapes.vl2/shapes/stackable5m.glb index ab0f4c7e..d6dadbe8 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/stackable5m.glb and b/docs/base/@vl2/shapes.vl2/shapes/stackable5m.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/station_generator_large.glb b/docs/base/@vl2/shapes.vl2/shapes/station_generator_large.glb index 6c735c6f..b74a7d71 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/station_generator_large.glb and b/docs/base/@vl2/shapes.vl2/shapes/station_generator_large.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/station_inv_human.glb b/docs/base/@vl2/shapes.vl2/shapes/station_inv_human.glb index efe05b16..ee8f9721 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/station_inv_human.glb and b/docs/base/@vl2/shapes.vl2/shapes/station_inv_human.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/station_inv_mpb.glb b/docs/base/@vl2/shapes.vl2/shapes/station_inv_mpb.glb index 09a5c6dc..c83117c7 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/station_inv_mpb.glb and b/docs/base/@vl2/shapes.vl2/shapes/station_inv_mpb.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/station_teleport.glb b/docs/base/@vl2/shapes.vl2/shapes/station_teleport.glb index 8762683b..f94ddc9c 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/station_teleport.glb and b/docs/base/@vl2/shapes.vl2/shapes/station_teleport.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/statue_base.glb b/docs/base/@vl2/shapes.vl2/shapes/statue_base.glb index 5db874a1..cacd3a69 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/statue_base.glb and b/docs/base/@vl2/shapes.vl2/shapes/statue_base.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/statue_hmale.glb b/docs/base/@vl2/shapes.vl2/shapes/statue_hmale.glb index a5b74cd8..58e70443 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/statue_hmale.glb and b/docs/base/@vl2/shapes.vl2/shapes/statue_hmale.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/statue_lfemale.glb b/docs/base/@vl2/shapes.vl2/shapes/statue_lfemale.glb index b9d94087..fb1f7c41 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/statue_lfemale.glb and b/docs/base/@vl2/shapes.vl2/shapes/statue_lfemale.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/statue_lmale.glb b/docs/base/@vl2/shapes.vl2/shapes/statue_lmale.glb index 1e01f68c..5be22081 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/statue_lmale.glb and b/docs/base/@vl2/shapes.vl2/shapes/statue_lmale.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/statue_plaque.glb b/docs/base/@vl2/shapes.vl2/shapes/statue_plaque.glb index 18939c34..d182ee02 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/statue_plaque.glb and b/docs/base/@vl2/shapes.vl2/shapes/statue_plaque.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/switch.glb b/docs/base/@vl2/shapes.vl2/shapes/switch.glb index acef5fd2..d720f311 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/switch.glb and b/docs/base/@vl2/shapes.vl2/shapes/switch.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/teamlogo_bd.glb b/docs/base/@vl2/shapes.vl2/shapes/teamlogo_bd.glb index f95da3df..b1c83a78 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/teamlogo_bd.glb and b/docs/base/@vl2/shapes.vl2/shapes/teamlogo_bd.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/teamlogo_be.glb b/docs/base/@vl2/shapes.vl2/shapes/teamlogo_be.glb index d8527b0d..8d776add 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/teamlogo_be.glb and b/docs/base/@vl2/shapes.vl2/shapes/teamlogo_be.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/teamlogo_ds.glb b/docs/base/@vl2/shapes.vl2/shapes/teamlogo_ds.glb index c87601a0..88d9a699 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/teamlogo_ds.glb and b/docs/base/@vl2/shapes.vl2/shapes/teamlogo_ds.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/teamlogo_hb.glb b/docs/base/@vl2/shapes.vl2/shapes/teamlogo_hb.glb index 328fe6df..2acdd3fd 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/teamlogo_hb.glb and b/docs/base/@vl2/shapes.vl2/shapes/teamlogo_hb.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/teamlogo_inf.glb b/docs/base/@vl2/shapes.vl2/shapes/teamlogo_inf.glb index 43a18566..8d5b4c4c 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/teamlogo_inf.glb and b/docs/base/@vl2/shapes.vl2/shapes/teamlogo_inf.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/teamlogo_projector.glb b/docs/base/@vl2/shapes.vl2/shapes/teamlogo_projector.glb index 6695dd59..d8339219 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/teamlogo_projector.glb and b/docs/base/@vl2/shapes.vl2/shapes/teamlogo_projector.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/teamlogo_storm.glb b/docs/base/@vl2/shapes.vl2/shapes/teamlogo_storm.glb index 6e0e9feb..e599fdde 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/teamlogo_storm.glb and b/docs/base/@vl2/shapes.vl2/shapes/teamlogo_storm.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/teamlogo_sw.glb b/docs/base/@vl2/shapes.vl2/shapes/teamlogo_sw.glb index f09b52c5..6b4c0088 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/teamlogo_sw.glb and b/docs/base/@vl2/shapes.vl2/shapes/teamlogo_sw.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/turret_aa_large.glb b/docs/base/@vl2/shapes.vl2/shapes/turret_aa_large.glb index ea6fd334..a37ed65d 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/turret_aa_large.glb and b/docs/base/@vl2/shapes.vl2/shapes/turret_aa_large.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/turret_assaulttank_mortar.glb b/docs/base/@vl2/shapes.vl2/shapes/turret_assaulttank_mortar.glb index 084b8f8d..225a7af8 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/turret_assaulttank_mortar.glb and b/docs/base/@vl2/shapes.vl2/shapes/turret_assaulttank_mortar.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/turret_assaulttank_plasma.glb b/docs/base/@vl2/shapes.vl2/shapes/turret_assaulttank_plasma.glb index b6c9ed48..1d0ee0c1 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/turret_assaulttank_plasma.glb and b/docs/base/@vl2/shapes.vl2/shapes/turret_assaulttank_plasma.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/turret_base_large.glb b/docs/base/@vl2/shapes.vl2/shapes/turret_base_large.glb index 2ea536af..1765ded1 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/turret_base_large.glb and b/docs/base/@vl2/shapes.vl2/shapes/turret_base_large.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/turret_base_mpb.glb b/docs/base/@vl2/shapes.vl2/shapes/turret_base_mpb.glb index 7ac5a29a..31fc9e0b 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/turret_base_mpb.glb and b/docs/base/@vl2/shapes.vl2/shapes/turret_base_mpb.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/turret_belly_barrell.glb b/docs/base/@vl2/shapes.vl2/shapes/turret_belly_barrell.glb index 883da4f1..c31226d0 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/turret_belly_barrell.glb and b/docs/base/@vl2/shapes.vl2/shapes/turret_belly_barrell.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/turret_belly_barrelr.glb b/docs/base/@vl2/shapes.vl2/shapes/turret_belly_barrelr.glb index 77f7c684..8a884f21 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/turret_belly_barrelr.glb and b/docs/base/@vl2/shapes.vl2/shapes/turret_belly_barrelr.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/turret_belly_base.glb b/docs/base/@vl2/shapes.vl2/shapes/turret_belly_base.glb index 44ca75e2..1d567a7c 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/turret_belly_base.glb and b/docs/base/@vl2/shapes.vl2/shapes/turret_belly_base.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/turret_elf_large.glb b/docs/base/@vl2/shapes.vl2/shapes/turret_elf_large.glb index db964c33..a58e97b7 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/turret_elf_large.glb and b/docs/base/@vl2/shapes.vl2/shapes/turret_elf_large.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/turret_fusion_large.glb b/docs/base/@vl2/shapes.vl2/shapes/turret_fusion_large.glb index c3237f73..0755bd32 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/turret_fusion_large.glb and b/docs/base/@vl2/shapes.vl2/shapes/turret_fusion_large.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/turret_indoor_deployc.glb b/docs/base/@vl2/shapes.vl2/shapes/turret_indoor_deployc.glb index d13e3840..f2c66e23 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/turret_indoor_deployc.glb and b/docs/base/@vl2/shapes.vl2/shapes/turret_indoor_deployc.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/turret_indoor_deployf.glb b/docs/base/@vl2/shapes.vl2/shapes/turret_indoor_deployf.glb index deaa034d..bc18fd45 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/turret_indoor_deployf.glb and b/docs/base/@vl2/shapes.vl2/shapes/turret_indoor_deployf.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/turret_indoor_deployw.glb b/docs/base/@vl2/shapes.vl2/shapes/turret_indoor_deployw.glb index 56e2a6f4..62d2d3b9 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/turret_indoor_deployw.glb and b/docs/base/@vl2/shapes.vl2/shapes/turret_indoor_deployw.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/turret_missile_large.glb b/docs/base/@vl2/shapes.vl2/shapes/turret_missile_large.glb index 2cd9e684..23918550 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/turret_missile_large.glb and b/docs/base/@vl2/shapes.vl2/shapes/turret_missile_large.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/turret_mortar_large.glb b/docs/base/@vl2/shapes.vl2/shapes/turret_mortar_large.glb index e8a2a1f9..a49da079 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/turret_mortar_large.glb and b/docs/base/@vl2/shapes.vl2/shapes/turret_mortar_large.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/turret_muzzlepoint.glb b/docs/base/@vl2/shapes.vl2/shapes/turret_muzzlepoint.glb index 9e982a76..ef0e348a 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/turret_muzzlepoint.glb and b/docs/base/@vl2/shapes.vl2/shapes/turret_muzzlepoint.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/turret_outdoor_deploy.glb b/docs/base/@vl2/shapes.vl2/shapes/turret_outdoor_deploy.glb index 33676b75..c95d2448 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/turret_outdoor_deploy.glb and b/docs/base/@vl2/shapes.vl2/shapes/turret_outdoor_deploy.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/turret_sentry.glb b/docs/base/@vl2/shapes.vl2/shapes/turret_sentry.glb index 1a86752c..51a86a2d 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/turret_sentry.glb and b/docs/base/@vl2/shapes.vl2/shapes/turret_sentry.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/turret_tank_barrelchain.glb b/docs/base/@vl2/shapes.vl2/shapes/turret_tank_barrelchain.glb index 625b9a20..cc3b3783 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/turret_tank_barrelchain.glb and b/docs/base/@vl2/shapes.vl2/shapes/turret_tank_barrelchain.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/turret_tank_barrelmortar.glb b/docs/base/@vl2/shapes.vl2/shapes/turret_tank_barrelmortar.glb index b64a8116..5bb79ffa 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/turret_tank_barrelmortar.glb and b/docs/base/@vl2/shapes.vl2/shapes/turret_tank_barrelmortar.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/turret_tank_base.glb b/docs/base/@vl2/shapes.vl2/shapes/turret_tank_base.glb index 376f027e..26f0c0d9 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/turret_tank_base.glb and b/docs/base/@vl2/shapes.vl2/shapes/turret_tank_base.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_bomber.glb b/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_bomber.glb index a294e3fa..eb288d71 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_bomber.glb and b/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_bomber.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_bomber_debris.glb b/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_bomber_debris.glb index 9dd74843..676a53e4 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_bomber_debris.glb and b/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_bomber_debris.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_hapc.glb b/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_hapc.glb index 863a5248..a293e9f1 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_hapc.glb and b/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_hapc.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_hapc_debris.glb b/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_hapc_debris.glb index 84384613..59aaf2d8 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_hapc_debris.glb and b/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_hapc_debris.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_scout.glb b/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_scout.glb index ad38af34..28604f1c 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_scout.glb and b/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_scout.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_scout_debris.glb b/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_scout_debris.glb index 549d369c..4aba063c 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_scout_debris.glb and b/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_scout_debris.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_scout_wreck.glb b/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_scout_wreck.glb index e03df86e..cd7b30aa 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_scout_wreck.glb and b/docs/base/@vl2/shapes.vl2/shapes/vehicle_air_scout_wreck.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/vehicle_grav_scout.glb b/docs/base/@vl2/shapes.vl2/shapes/vehicle_grav_scout.glb index d4da66bf..163d21fc 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/vehicle_grav_scout.glb and b/docs/base/@vl2/shapes.vl2/shapes/vehicle_grav_scout.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/vehicle_grav_scout_debris.glb b/docs/base/@vl2/shapes.vl2/shapes/vehicle_grav_scout_debris.glb index 13ee994f..e2345afd 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/vehicle_grav_scout_debris.glb and b/docs/base/@vl2/shapes.vl2/shapes/vehicle_grav_scout_debris.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/vehicle_grav_tank.glb b/docs/base/@vl2/shapes.vl2/shapes/vehicle_grav_tank.glb index 10adcf13..bf89de5f 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/vehicle_grav_tank.glb and b/docs/base/@vl2/shapes.vl2/shapes/vehicle_grav_tank.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/vehicle_grav_tank_debris.glb b/docs/base/@vl2/shapes.vl2/shapes/vehicle_grav_tank_debris.glb index 49d75969..62a3bdfe 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/vehicle_grav_tank_debris.glb and b/docs/base/@vl2/shapes.vl2/shapes/vehicle_grav_tank_debris.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/vehicle_grav_tank_wreck.glb b/docs/base/@vl2/shapes.vl2/shapes/vehicle_grav_tank_wreck.glb index 860f4ea1..ce3d9e77 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/vehicle_grav_tank_wreck.glb and b/docs/base/@vl2/shapes.vl2/shapes/vehicle_grav_tank_wreck.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/vehicle_land_assault.glb b/docs/base/@vl2/shapes.vl2/shapes/vehicle_land_assault.glb index aa1ae79f..543e73ed 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/vehicle_land_assault.glb and b/docs/base/@vl2/shapes.vl2/shapes/vehicle_land_assault.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/vehicle_land_assault_debris.glb b/docs/base/@vl2/shapes.vl2/shapes/vehicle_land_assault_debris.glb index 49d75969..62a3bdfe 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/vehicle_land_assault_debris.glb and b/docs/base/@vl2/shapes.vl2/shapes/vehicle_land_assault_debris.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/vehicle_land_assault_wreck.glb b/docs/base/@vl2/shapes.vl2/shapes/vehicle_land_assault_wreck.glb index 860f4ea1..ce3d9e77 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/vehicle_land_assault_wreck.glb and b/docs/base/@vl2/shapes.vl2/shapes/vehicle_land_assault_wreck.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/vehicle_land_mpbase.glb b/docs/base/@vl2/shapes.vl2/shapes/vehicle_land_mpbase.glb index e288fef3..d2d31931 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/vehicle_land_mpbase.glb and b/docs/base/@vl2/shapes.vl2/shapes/vehicle_land_mpbase.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/vehicle_land_mpbase_debris.glb b/docs/base/@vl2/shapes.vl2/shapes/vehicle_land_mpbase_debris.glb index a84eb9d6..d1bc5819 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/vehicle_land_mpbase_debris.glb and b/docs/base/@vl2/shapes.vl2/shapes/vehicle_land_mpbase_debris.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/vehicle_pad.glb b/docs/base/@vl2/shapes.vl2/shapes/vehicle_pad.glb index 0f3541c7..2cd72df8 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/vehicle_pad.glb and b/docs/base/@vl2/shapes.vl2/shapes/vehicle_pad.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/vehicle_pad_station.glb b/docs/base/@vl2/shapes.vl2/shapes/vehicle_pad_station.glb index a29f3beb..db6d1f35 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/vehicle_pad_station.glb and b/docs/base/@vl2/shapes.vl2/shapes/vehicle_pad_station.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/weapon_chaingun.glb b/docs/base/@vl2/shapes.vl2/shapes/weapon_chaingun.glb index feb36c0f..6588c3ed 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/weapon_chaingun.glb and b/docs/base/@vl2/shapes.vl2/shapes/weapon_chaingun.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/weapon_chaingun_ammocasing.glb b/docs/base/@vl2/shapes.vl2/shapes/weapon_chaingun_ammocasing.glb index a26d94d3..f80cdb92 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/weapon_chaingun_ammocasing.glb and b/docs/base/@vl2/shapes.vl2/shapes/weapon_chaingun_ammocasing.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/weapon_disc.glb b/docs/base/@vl2/shapes.vl2/shapes/weapon_disc.glb index f7e7831f..71ff3e42 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/weapon_disc.glb and b/docs/base/@vl2/shapes.vl2/shapes/weapon_disc.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/weapon_elf.glb b/docs/base/@vl2/shapes.vl2/shapes/weapon_elf.glb index b090cd9e..903d4df3 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/weapon_elf.glb and b/docs/base/@vl2/shapes.vl2/shapes/weapon_elf.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/weapon_energy.glb b/docs/base/@vl2/shapes.vl2/shapes/weapon_energy.glb index 63e29f36..12a3b373 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/weapon_energy.glb and b/docs/base/@vl2/shapes.vl2/shapes/weapon_energy.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/weapon_energy_vehicle.glb b/docs/base/@vl2/shapes.vl2/shapes/weapon_energy_vehicle.glb index 37602515..e9b8b5ef 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/weapon_energy_vehicle.glb and b/docs/base/@vl2/shapes.vl2/shapes/weapon_energy_vehicle.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/weapon_grenade_launcher.glb b/docs/base/@vl2/shapes.vl2/shapes/weapon_grenade_launcher.glb index 85437904..1dde46fb 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/weapon_grenade_launcher.glb and b/docs/base/@vl2/shapes.vl2/shapes/weapon_grenade_launcher.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/weapon_missile.glb b/docs/base/@vl2/shapes.vl2/shapes/weapon_missile.glb index 20e3d9b5..b9f9d728 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/weapon_missile.glb and b/docs/base/@vl2/shapes.vl2/shapes/weapon_missile.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/weapon_missile_casement.glb b/docs/base/@vl2/shapes.vl2/shapes/weapon_missile_casement.glb index 20403d98..cd33da99 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/weapon_missile_casement.glb and b/docs/base/@vl2/shapes.vl2/shapes/weapon_missile_casement.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/weapon_missile_fleschette.glb b/docs/base/@vl2/shapes.vl2/shapes/weapon_missile_fleschette.glb index 1fd00052..be2bd36b 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/weapon_missile_fleschette.glb and b/docs/base/@vl2/shapes.vl2/shapes/weapon_missile_fleschette.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/weapon_missile_projectile.glb b/docs/base/@vl2/shapes.vl2/shapes/weapon_missile_projectile.glb index e6aff9f0..1c1a96cf 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/weapon_missile_projectile.glb and b/docs/base/@vl2/shapes.vl2/shapes/weapon_missile_projectile.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/weapon_mortar.glb b/docs/base/@vl2/shapes.vl2/shapes/weapon_mortar.glb index 569dd701..b0aa16d3 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/weapon_mortar.glb and b/docs/base/@vl2/shapes.vl2/shapes/weapon_mortar.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/weapon_plasma.glb b/docs/base/@vl2/shapes.vl2/shapes/weapon_plasma.glb index d677dc3a..76546e01 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/weapon_plasma.glb and b/docs/base/@vl2/shapes.vl2/shapes/weapon_plasma.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/weapon_repair.glb b/docs/base/@vl2/shapes.vl2/shapes/weapon_repair.glb index 813ddb98..1cb078ce 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/weapon_repair.glb and b/docs/base/@vl2/shapes.vl2/shapes/weapon_repair.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/weapon_shocklance.glb b/docs/base/@vl2/shapes.vl2/shapes/weapon_shocklance.glb index 1cff1788..28c3ce1a 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/weapon_shocklance.glb and b/docs/base/@vl2/shapes.vl2/shapes/weapon_shocklance.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/weapon_sniper.glb b/docs/base/@vl2/shapes.vl2/shapes/weapon_sniper.glb index fa15f2db..3b465234 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/weapon_sniper.glb and b/docs/base/@vl2/shapes.vl2/shapes/weapon_sniper.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/weapon_targeting.glb b/docs/base/@vl2/shapes.vl2/shapes/weapon_targeting.glb index 7d8ce64e..53a437e6 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/weapon_targeting.glb and b/docs/base/@vl2/shapes.vl2/shapes/weapon_targeting.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/xmiscf.glb b/docs/base/@vl2/shapes.vl2/shapes/xmiscf.glb index f664fb85..8fe2cda8 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/xmiscf.glb and b/docs/base/@vl2/shapes.vl2/shapes/xmiscf.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/xorg20.glb b/docs/base/@vl2/shapes.vl2/shapes/xorg20.glb index 01fce37c..33cf7039 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/xorg20.glb and b/docs/base/@vl2/shapes.vl2/shapes/xorg20.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/xorg21.glb b/docs/base/@vl2/shapes.vl2/shapes/xorg21.glb index b546ac06..dbe43bb3 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/xorg21.glb and b/docs/base/@vl2/shapes.vl2/shapes/xorg21.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/xorg3.glb b/docs/base/@vl2/shapes.vl2/shapes/xorg3.glb index bbfb8d72..11e310b3 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/xorg3.glb and b/docs/base/@vl2/shapes.vl2/shapes/xorg3.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/xorg4.glb b/docs/base/@vl2/shapes.vl2/shapes/xorg4.glb index 3c035093..9c1dad49 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/xorg4.glb and b/docs/base/@vl2/shapes.vl2/shapes/xorg4.glb differ diff --git a/docs/base/@vl2/shapes.vl2/shapes/xorg5.glb b/docs/base/@vl2/shapes.vl2/shapes/xorg5.glb index 607d43fa..29757c00 100644 Binary files a/docs/base/@vl2/shapes.vl2/shapes/xorg5.glb and b/docs/base/@vl2/shapes.vl2/shapes/xorg5.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/Starfallen.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/Starfallen.glb index 13a833b9..894be170 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/Starfallen.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/Starfallen.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/bbase_ccb5.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/bbase_ccb5.glb index 409f9368..f48a4e57 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/bbase_ccb5.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/bbase_ccb5.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/bbase_nefhillside.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/bbase_nefhillside.glb index b754173f..f0a4a014 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/bbase_nefhillside.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/bbase_nefhillside.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/bbunke.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/bbunke.glb index 014abecd..648897f4 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/bbunke.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/bbunke.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/bmisc_nefledge1.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/bmisc_nefledge1.glb index 07d93412..2027c273 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/bmisc_nefledge1.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/bmisc_nefledge1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/bmisc_nefvbay.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/bmisc_nefvbay.glb index 49250ad1..1a475e1e 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/bmisc_nefvbay.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/bmisc_nefvbay.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/btf_turretplatform_c.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/btf_turretplatform_c.glb index 662ec40b..f04c7b7f 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/btf_turretplatform_c.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/btf_turretplatform_c.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbase_broadside_nef.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbase_broadside_nef.glb index be111862..cbfbfacf 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbase_broadside_nef.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbase_broadside_nef.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbase_nefRaindance.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbase_nefRaindance.glb index be3e69cb..852f78d8 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbase_nefRaindance.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbase_nefRaindance.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbase_neffloat1.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbase_neffloat1.glb index 1220a665..06866269 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbase_neffloat1.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbase_neffloat1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbase_neffloat2.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbase_neffloat2.glb index 179c1536..0f542745 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbase_neffloat2.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbase_neffloat2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbase_neficeridge.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbase_neficeridge.glb index da5503a3..33c658a0 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbase_neficeridge.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbase_neficeridge.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbase_tokrz_scarabrae.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbase_tokrz_scarabrae.glb index e7fd92cd..c4bdeeb8 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbase_tokrz_scarabrae.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbase_tokrz_scarabrae.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_nef_invbunk1.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_nef_invbunk1.glb index a315a865..739f9006 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_nef_invbunk1.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_nef_invbunk1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_nefcliffside.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_nefcliffside.glb index 87b89c08..39ed3017 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_nefcliffside.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_nefcliffside.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_nefdcbunk.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_nefdcbunk.glb index a747db19..26b8c755 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_nefdcbunk.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_nefdcbunk.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_nefsmall.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_nefsmall.glb index f9ceb61a..45d6b368 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_nefsmall.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_nefsmall.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_snowblind.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_snowblind.glb index 02d9c2f5..0ace1bd2 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_snowblind.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_snowblind.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_stonehenge1.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_stonehenge1.glb index 81c8cd14..68481fb2 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_stonehenge1.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_stonehenge1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_vbunk1.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_vbunk1.glb index 736f8ad7..a49dd5c4 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_vbunk1.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dbunk_vbunk1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefbridge.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefbridge.glb index a583f750..f15a6241 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefbridge.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefbridge.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefflagstand2.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefflagstand2.glb index 9338e997..dbbd1d1d 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefflagstand2.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefflagstand2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefflagstand3.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefflagstand3.glb index c83c0299..6fe3c3e8 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefflagstand3.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefflagstand3.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefobj1.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefobj1.glb index 783ca936..e6fe8946 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefobj1.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefobj1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefobj2.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefobj2.glb index fc09cfa4..c6a52870 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefobj2.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefobj2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefplat1.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefplat1.glb index a4f71bff..a4e22866 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefplat1.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefplat1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefplug1.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefplug1.glb index 694d5352..e274edf7 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefplug1.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefplug1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefrdbridge1.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefrdbridge1.glb index 32a94bf1..5ec0c13d 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefrdbridge1.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_nefrdbridge1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_neftower1.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_neftower1.glb index af80b25b..3629e1a4 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_neftower1.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_neftower1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_neftower2.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_neftower2.glb index 2b7f2636..15115872 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_neftower2.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_neftower2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_neftower3.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_neftower3.glb index 49b764fd..c008d8c8 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_neftower3.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_neftower3.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_stonehenge1.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_stonehenge1.glb index f74bb76f..1c54a5ab 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_stonehenge1.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_stonehenge1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_stonehenge2.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_stonehenge2.glb index bcf09ebd..ec1b6638 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_stonehenge2.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_stonehenge2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_stonehenge3.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_stonehenge3.glb index ced428fe..150cc577 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_stonehenge3.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dmisc_stonehenge3.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dtowr_classic1.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dtowr_classic1.glb index c2a5f15e..98dc1176 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dtowr_classic1.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/dtowr_classic1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/flagbridge.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/flagbridge.glb index 4de07b68..050f5cf3 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/flagbridge.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/flagbridge.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/infbutch_blackairinv13.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/infbutch_blackairinv13.glb index 9b1c8b2e..2b3f2bba 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/infbutch_blackairinv13.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/infbutch_blackairinv13.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/infbutch_blackbase5618_final.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/infbutch_blackbase5618_final.glb index 6180efb6..9482f9d1 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/infbutch_blackbase5618_final.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/infbutch_blackbase5618_final.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/infbutch_blackturret8.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/infbutch_blackturret8.glb index a899778c..dbe970c8 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/infbutch_blackturret8.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/infbutch_blackturret8.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/pbase_nef_giant.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/pbase_nef_giant.glb index 48a1931f..20aad1aa 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/pbase_nef_giant.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/pbase_nef_giant.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/pbase_nef_vbase1.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/pbase_nef_vbase1.glb index 21d1b9a2..5433c4d9 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/pbase_nef_vbase1.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/pbase_nef_vbase1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/pbunk4a_CC.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/pbunk4a_CC.glb index 4a848272..4ed1b63c 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/pbunk4a_CC.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/pbunk4a_CC.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/pbunk7a_CC.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/pbunk7a_CC.glb index b91a4091..2552c4a2 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/pbunk7a_CC.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/pbunk7a_CC.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ram_base.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ram_base.glb index 69b3c9f4..8671c316 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ram_base.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ram_base.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ram_tower.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ram_tower.glb index 49396f20..643540c8 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ram_tower.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ram_tower.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ram_wall4.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ram_wall4.glb index e1edcdd7..3adf8d48 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ram_wall4.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ram_wall4.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_domain2_boundrymarker.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_domain2_boundrymarker.glb index 85da8226..b0980bd8 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_domain2_boundrymarker.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_domain2_boundrymarker.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_domain2_boundrymarker2.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_domain2_boundrymarker2.glb index dc922463..a9d27ffa 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_domain2_boundrymarker2.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_domain2_boundrymarker2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_domain2_bridge1.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_domain2_bridge1.glb index 1c285a94..48221023 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_domain2_bridge1.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_domain2_bridge1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_domain2_mainbase.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_domain2_mainbase.glb index d94dc56e..90c280c9 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_domain2_mainbase.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_domain2_mainbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_domain_turretbase1.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_domain_turretbase1.glb index f25bdd25..64fa219f 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_domain_turretbase1.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_domain_turretbase1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_bridge.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_bridge.glb index de719bd2..39dd55f0 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_bridge.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_bridge.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_mainbase.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_mainbase.glb index e2778dca..d76bb3e4 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_mainbase.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_mainbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_platform1.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_platform1.glb index bc543a52..b5215bf9 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_platform1.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_platform1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_towerbunker.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_towerbunker.glb index 40d109a8..1b506558 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_towerbunker.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/rilke_whitedwarf_towerbunker.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ruin1.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ruin1.glb index 448bc86d..1440304f 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ruin1.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ruin1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ruin2.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ruin2.glb index 65efbf90..e8dd113b 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ruin2.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ruin2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ruin3.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ruin3.glb index d915ff48..36ed7f79 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ruin3.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ruin3.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ruin4.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ruin4.glb index d9b00acb..134c80aa 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ruin4.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ruin4.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ruinarch.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ruinarch.glb index c21e7461..88dd21a3 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ruinarch.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/ruinarch.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/sbunk_nef1.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/sbunk_nef1.glb index e3682026..0e9680b2 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/sbunk_nef1.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/sbunk_nef1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/siege.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/siege.glb index b444d32f..6e035a4c 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/siege.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/siege.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/smisc_nef1.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/smisc_nef1.glb index ee2265b1..da3e82f4 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/smisc_nef1.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/smisc_nef1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/t_bbase_ccb2a.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/t_bbase_ccb2a.glb index 8cc947d5..c41dcc03 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/t_bbase_ccb2a.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/t_bbase_ccb2a.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/t_bmisc_tunl_ccb1.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/t_bmisc_tunl_ccb1.glb index 736fc205..e58f6d67 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/t_bmisc_tunl_ccb1.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/t_bmisc_tunl_ccb1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/t_bwall2a_cnr_CC.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/t_bwall2a_cnr_CC.glb index fc60d026..a4945fbb 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/t_bwall2a_cnr_CC.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/t_bwall2a_cnr_CC.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/t_bwall2a_lrg_CC.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/t_bwall2a_lrg_CC.glb index fdb07b5f..44898004 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/t_bwall2a_lrg_CC.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/t_bwall2a_lrg_CC.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/t_bwall2a_sm_CC.glb b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/t_bwall2a_sm_CC.glb index a6940b06..8225ec0e 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/t_bwall2a_sm_CC.glb and b/docs/base/@vl2/z_mappacks/CTF/Classic_maps_v1.vl2/interiors/t_bwall2a_sm_CC.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bbunke.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bbunke.glb index dc213469..92d22efd 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bbunke.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bbunke.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_bridge0.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_bridge0.glb index 3af0e730..865f77fa 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_bridge0.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_bridge0.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_bunker1.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_bunker1.glb index f9331876..0f16db58 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_bunker1.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_bunker1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruina.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruina.glb index 282e16c1..7cc1f4a3 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruina.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruina.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruinb.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruinb.glb index 201738fc..2eeaeb36 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruinb.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruinb.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruinc.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruinc.glb index cc7d3382..da495b5c 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruinc.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruinc.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruind.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruind.glb index 145f184e..29a26aeb 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruind.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruind.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruine.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruine.glb index b6ae4144..4647a8b0 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruine.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruine.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruinf.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruinf.glb index c13d5d0c..d7d1ca9e 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruinf.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruinf.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruing.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruing.glb index d51ced18..30fefe7d 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruing.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruing.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruinh.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruinh.glb index 04a02e27..9ea0da4e 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruinh.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruinh.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruini.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruini.glb index 34760ca4..e9ca3b26 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruini.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_ruini.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_tower1.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_tower1.glb index 02f52841..11e120f2 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_tower1.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_tower1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_tower2.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_tower2.glb index 27e21988..1b8a8198 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_tower2.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/bmiscpan_tower2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btf_base1.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btf_base1.glb index b251f4de..984b7aa9 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btf_base1.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btf_base1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btf_bridge1.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btf_bridge1.glb index 1dc33e46..b5e07d1d 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btf_bridge1.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btf_bridge1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btf_bridge2.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btf_bridge2.glb index faa2f6b5..1455e2cc 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btf_bridge2.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btf_bridge2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btf_bridge3.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btf_bridge3.glb index 4292e4fa..6cfbec63 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btf_bridge3.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btf_bridge3.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btf_genbunk.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btf_genbunk.glb index c713a360..353aac07 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btf_genbunk.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btf_genbunk.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btf_turretplatform.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btf_turretplatform.glb index b7a63273..d4db399c 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btf_turretplatform.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btf_turretplatform.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btowr9.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btowr9.glb index 22ee2836..f24088fe 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btowr9.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/btowr9.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/dbase5.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/dbase5.glb index 51f5650e..6f360f47 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/dbase5.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/dbase5.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/dbase6.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/dbase6.glb index 18970799..64a73c3d 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/dbase6.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/dbase6.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/dmisc1.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/dmisc1.glb index 6a436ce0..79e6ce10 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/dmisc1.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/dmisc1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/dplat2.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/dplat2.glb index 9a97bb32..6d961576 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/dplat2.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/dplat2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/dtowr1.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/dtowr1.glb index 25c4551d..74f3041c 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/dtowr1.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/dtowr1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_base.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_base.glb index 726f4e20..3ed815ab 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_base.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_base.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_gate.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_gate.glb index f42e8641..27173210 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_gate.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_gate.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_misc1.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_misc1.glb index cb07b920..72229381 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_misc1.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_misc1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_powerpit.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_powerpit.glb index 3157344d..c38cb1db 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_powerpit.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_powerpit.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_tbunker.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_tbunker.glb index 690e6432..e712125e 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_tbunker.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_tbunker.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_tower.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_tower.glb index e6f6eccb..ccaf8f06 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_tower.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_tower.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_wall3.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_wall3.glb index 54f65bc7..34afd3a1 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_wall3.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_wall3.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_wall4.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_wall4.glb index 5de685f3..e6760a8d 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_wall4.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_wall4.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_wall5.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_wall5.glb index 7c66315f..de1c0652 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_wall5.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_wall5.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_wall6.glb b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_wall6.glb index 4c81a404..3ddbae51 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_wall6.glb and b/docs/base/@vl2/z_mappacks/CTF/DynamixFinalPack.vl2/interiors/tri_wall6.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/anthem_pipebasemini.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/anthem_pipebasemini.glb index ba8230fb..c3b372d2 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/anthem_pipebasemini.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/anthem_pipebasemini.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/anthem_pipebunker.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/anthem_pipebunker.glb index 078212ee..e618c54a 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/anthem_pipebunker.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/anthem_pipebunker.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/anthem_pipestand2.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/anthem_pipestand2.glb index f165eecf..46188e06 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/anthem_pipestand2.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/anthem_pipestand2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/anthem_pitbase.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/anthem_pitbase.glb index c36eae1d..95dde1d5 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/anthem_pitbase.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/anthem_pitbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/anthem_pitstand.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/anthem_pitstand.glb index a7860ee4..b0fc6bfb 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/anthem_pitstand.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/anthem_pitstand.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/anthemblock.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/anthemblock.glb index 6538b4a5..d781b95d 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/anthemblock.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/anthemblock.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/ccb_be_tower1b_x2.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/ccb_be_tower1b_x2.glb index d7a79945..896ef850 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/ccb_be_tower1b_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/ccb_be_tower1b_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/centaur.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/centaur.glb index db79fd5c..039dfc24 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/centaur.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/centaur.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/centower.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/centower.glb index 9f9716d6..ce8501bb 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/centower.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/centower.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/damnationstand.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/damnationstand.glb index 7501e294..bd8bbf8c 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/damnationstand.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/damnationstand.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingbase01.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingbase01.glb index 1d52297e..d4ea7d13 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingbase01.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingbase01.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingbase02.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingbase02.glb index 95d38c12..14253ec1 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingbase02.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingbase02.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingstand01.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingstand01.glb index fdb70e9a..b99bdb04 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingstand01.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingstand01.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingteeth.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingteeth.glb index d572fee8..b6690147 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingteeth.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingteeth.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingtower01.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingtower01.glb index 5ce88acd..cce39690 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingtower01.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingtower01.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingtower02.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingtower02.glb index f5f58ea3..95e8d350 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingtower02.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingtower02.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingturretstand01.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingturretstand01.glb index 93ea7624..1e1838ac 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingturretstand01.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/flingturretstand01.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rilke_whitedwarf_towerbunker2_x2.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rilke_whitedwarf_towerbunker2_x2.glb index 9e355406..d3e7ce2a 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rilke_whitedwarf_towerbunker2_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rilke_whitedwarf_towerbunker2_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_bunker.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_bunker.glb index b30867fb..95769302 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_bunker.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_bunker.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_mainbase.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_mainbase.glb index 47b6f8f8..cd02792f 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_mainbase.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_mainbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_newpillarstand.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_newpillarstand.glb index 1229b3b9..4fb9adb6 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_newpillarstand.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_newpillarstand.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_pillar.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_pillar.glb index 2a8ba2d1..a15a86c6 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_pillar.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_pillar.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_plat.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_plat.glb index 90b276e3..fe4e8d7d 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_plat.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_plat.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_plat2.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_plat2.glb index 5a339dae..4caa3ae8 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_plat2.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_plat2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_podium.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_podium.glb index c87e4c85..8ea19acc 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_podium.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_podium.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_snipenest.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_snipenest.glb index 62f00373..fe256235 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_snipenest.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_snipenest.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_turretbase.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_turretbase.glb index 74c6142b..301d4922 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_turretbase.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_turretbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_vechpad.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_vechpad.glb index 70f8f3c6..deccf77e 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_vechpad.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_derm_vechpad.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_swd_flagstand.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_swd_flagstand.glb index 912bdad9..766ec479 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_swd_flagstand.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_swd_flagstand.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_swd_ship2.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_swd_ship2.glb index 12f1fd0a..571fb441 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_swd_ship2.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/rst_swd_ship2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/s5_anthem_pipebase.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/s5_anthem_pipebase.glb index 93f0a1e2..b9b31ea2 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/s5_anthem_pipebase.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/s5_anthem_pipebase.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/s5_anthem_pipestand.glb b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/s5_anthem_pipestand.glb index ccd0554b..d76d1a2f 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/s5_anthem_pipestand.glb and b/docs/base/@vl2/z_mappacks/CTF/S5maps.vl2/interiors/s5_anthem_pipestand.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/anthem_cardiacbase.glb b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/anthem_cardiacbase.glb index 9d5bf7b4..95d3eae5 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/anthem_cardiacbase.glb and b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/anthem_cardiacbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/anthem_cardiacbridge.glb b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/anthem_cardiacbridge.glb index b0d16a23..68d85e22 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/anthem_cardiacbridge.glb and b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/anthem_cardiacbridge.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/anthem_cardiacstand.glb b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/anthem_cardiacstand.glb index 5522e2a9..ffeeed69 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/anthem_cardiacstand.glb and b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/anthem_cardiacstand.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/anthem_cardiactower.glb b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/anthem_cardiactower.glb index 46bcb991..cdc745a0 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/anthem_cardiactower.glb and b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/anthem_cardiactower.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/anthem_cardiacturret.glb b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/anthem_cardiacturret.glb index 792ef6e6..cae42775 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/anthem_cardiacturret.glb and b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/anthem_cardiacturret.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingrock01.glb b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingrock01.glb index 4734e54f..b822fbf2 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingrock01.glb and b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingrock01.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingrockvent01.glb b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingrockvent01.glb index 5d5caf89..20aa111f 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingrockvent01.glb and b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingrockvent01.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingsilo03.glb b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingsilo03.glb index e70173ac..e67be2b0 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingsilo03.glb and b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingsilo03.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingsilo03b.glb b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingsilo03b.glb index f308bfd6..901ab787 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingsilo03b.glb and b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingsilo03b.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingstand02.glb b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingstand02.glb index 4754bd99..4ce98768 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingstand02.glb and b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingstand02.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingtanktrap01.glb b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingtanktrap01.glb index 4f45463b..a84cdf86 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingtanktrap01.glb and b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingtanktrap01.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingvpad01.glb b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingvpad01.glb index 45664b3f..22ca580a 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingvpad01.glb and b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingvpad01.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingvpad01b.glb b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingvpad01b.glb index 194c6828..6a9ddda4 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingvpad01b.glb and b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/flingvpad01b.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/rst_dogma_base.glb b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/rst_dogma_base.glb index 4c988fb2..4d5190c3 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/rst_dogma_base.glb and b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/rst_dogma_base.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/rst_dogma_bridge.glb b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/rst_dogma_bridge.glb index e378dbe1..273809ac 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/rst_dogma_bridge.glb and b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/rst_dogma_bridge.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/rst_dogma_bridge2.glb b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/rst_dogma_bridge2.glb index c944b3a5..5bcb3372 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/rst_dogma_bridge2.glb and b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/rst_dogma_bridge2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/rst_spir_base3.glb b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/rst_spir_base3.glb index e0cac090..cf7d9fb3 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/rst_spir_base3.glb and b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/rst_spir_base3.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/rst_spir_pillar.glb b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/rst_spir_pillar.glb index bfab383a..dd2a498b 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/rst_spir_pillar.glb and b/docs/base/@vl2/z_mappacks/CTF/S8maps.vl2/interiors/rst_spir_pillar.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_salgenroom2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_salgenroom2.glb index 46f835d9..02598f5c 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_salgenroom2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_salgenroom2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_salproj1.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_salproj1.glb index 32fc6301..6f997a25 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_salproj1.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_salproj1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_salturretsus1.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_salturretsus1.glb index 04cdef81..77b40ad0 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_salturretsus1.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_salturretsus1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_slblocks.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_slblocks.glb index ce76a474..314512a1 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_slblocks.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_slblocks.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_slinvstat.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_slinvstat.glb index 7dc77041..e800f497 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_slinvstat.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_slinvstat.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_slremo2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_slremo2.glb index 6e385d21..3fb2f79f 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_slremo2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_slremo2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_slsusbr1.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_slsusbr1.glb index 64436feb..4c3f0b85 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_slsusbr1.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_slsusbr1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_slvehramp1.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_slvehramp1.glb index 097b52c8..c385f540 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_slvehramp1.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Euro_slvehramp1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Vpad_Bunker.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Vpad_Bunker.glb index 6a12e9fe..13b91e5f 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Vpad_Bunker.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/Vpad_Bunker.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bbase_-nefvbase_x.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bbase_-nefvbase_x.glb index 64e5f2e2..3af0f3a6 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bbase_-nefvbase_x.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bbase_-nefvbase_x.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bbase_-nefvbase_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bbase_-nefvbase_x2.glb index 6c9338c2..4481a922 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bbase_-nefvbase_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bbase_-nefvbase_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bbase_ccb1.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bbase_ccb1.glb index 8b80c555..1c2e0d8d 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bbase_ccb1.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bbase_ccb1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmisc_-nef_flagstand1_x.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmisc_-nef_flagstand1_x.glb index b59bb425..d86367c5 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmisc_-nef_flagstand1_x.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmisc_-nef_flagstand1_x.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmisc_-nef_flagstand1_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmisc_-nef_flagstand1_x2.glb index 1c0434d5..f5f50787 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmisc_-nef_flagstand1_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmisc_-nef_flagstand1_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmisc_neftrstand1.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmisc_neftrstand1.glb index 2d330c4d..05305bc6 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmisc_neftrstand1.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmisc_neftrstand1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_bridge0_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_bridge0_x2.glb index 02945668..bbb0cc3c 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_bridge0_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_bridge0_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_bunker1_x.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_bunker1_x.glb index daed826b..696aa43d 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_bunker1_x.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_bunker1_x.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_bunker1_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_bunker1_x2.glb index 46e54388..48e3dbc9 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_bunker1_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_bunker1_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruina_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruina_x2.glb index 68a4d223..96a2bcbe 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruina_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruina_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruinb_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruinb_x2.glb index c73ec1fe..2e8bc69b 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruinb_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruinb_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruinc_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruinc_x2.glb index e6f95f43..49ae44a5 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruinc_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruinc_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruind_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruind_x2.glb index f9ef6678..eec727fa 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruind_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruind_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruine_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruine_x2.glb index f22bc588..76cb2a37 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruine_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruine_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruinf_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruinf_x2.glb index 68b70a17..75186293 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruinf_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruinf_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruing_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruing_x2.glb index 39930dca..67b04189 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruing_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruing_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruinh_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruinh_x2.glb index 4e960a1b..e3eba008 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruinh_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_ruinh_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_tower1_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_tower1_x2.glb index 3c597645..3e48588d 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_tower1_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_tower1_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_tower2_x.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_tower2_x.glb index 2fa502cc..f7590a3d 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_tower2_x.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_tower2_x.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_tower2_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_tower2_x2.glb index 8141ec47..880e5dcb 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_tower2_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/bmiscpan_tower2_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/btf_base1.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/btf_base1.glb index f3482454..1e906468 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/btf_base1.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/btf_base1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/btf_bridge2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/btf_bridge2.glb index 2a3554b6..976c4735 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/btf_bridge2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/btf_bridge2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/btf_bridge3.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/btf_bridge3.glb index 7765abb2..f7ef31e9 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/btf_bridge3.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/btf_bridge3.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/btf_turretplatform.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/btf_turretplatform.glb index 5672be2e..4260ec37 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/btf_turretplatform.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/btf_turretplatform.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/btf_turretplatform_x.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/btf_turretplatform_x.glb index 21ab963d..7aec5e51 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/btf_turretplatform_x.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/btf_turretplatform_x.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/btf_turretplatform_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/btf_turretplatform_x2.glb index f50b41c0..3f38c319 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/btf_turretplatform_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/btf_turretplatform_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/ccb_be_tower1a_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/ccb_be_tower1a_x2.glb index 8720a82d..23cc6227 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/ccb_be_tower1a_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/ccb_be_tower1a_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/ccb_be_tower1b_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/ccb_be_tower1b_x2.glb index 246326fe..7b95add1 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/ccb_be_tower1b_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/ccb_be_tower1b_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dbase_-nefbase1_x.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dbase_-nefbase1_x.glb index 8e18e36e..9de4b361 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dbase_-nefbase1_x.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dbase_-nefbase1_x.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dbase_-nefbase1_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dbase_-nefbase1_x2.glb index 7a9b1fed..c3c3cc0a 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dbase_-nefbase1_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dbase_-nefbase1_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dbase_-nefbase2_x.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dbase_-nefbase2_x.glb index c95a6c6d..f4cf5de1 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dbase_-nefbase2_x.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dbase_-nefbase2_x.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dbase_-nefbase2_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dbase_-nefbase2_x2.glb index 89e62416..90a5c728 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dbase_-nefbase2_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dbase_-nefbase2_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dmisc1_x.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dmisc1_x.glb index 6e84faa0..733b444b 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dmisc1_x.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dmisc1_x.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dmisc1_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dmisc1_x2.glb index 3f2d2034..8d9d07e8 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dmisc1_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dmisc1_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dmisc_-nefflagstand1_x.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dmisc_-nefflagstand1_x.glb index b7fc1c70..c23b80bb 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dmisc_-nefflagstand1_x.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dmisc_-nefflagstand1_x.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dmisc_-nefflagstand1_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dmisc_-nefflagstand1_x2.glb index 304e9598..1e5e56b1 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dmisc_-nefflagstand1_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dmisc_-nefflagstand1_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_box_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_box_x2.glb index 667a0ef0..0ea751bf 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_box_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_box_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_bunkera_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_bunkera_x2.glb index 7eef6f4b..94d5ab49 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_bunkera_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_bunkera_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_bunkerb_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_bunkerb_x2.glb index 06ccd9bd..31f3a224 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_bunkerb_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_bunkerb_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_droptop_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_droptop_x2.glb index 32aafc0a..6ff4c4bd 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_droptop_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_droptop_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_fstand_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_fstand_x2.glb index 53b166ee..06fdba8c 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_fstand_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_fstand_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_hangar_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_hangar_x2.glb index 033c4dca..8f96d156 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_hangar_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_hangar_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_platform_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_platform_x2.glb index 8c02b401..324bafe3 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_platform_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_platform_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_rig_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_rig_x2.glb index 72dc69ab..31377527 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_rig_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_rig_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_rustbox_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_rustbox_x2.glb index b9e13f7a..abc8f9ec 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_rustbox_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_rustbox_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_sandcastle_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_sandcastle_x2.glb index 6c6fe7db..5b451698 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_sandcastle_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_sandcastle_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_slab_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_slab_x2.glb index 150f5757..e908b8d4 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_slab_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_slab_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_spade_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_spade_x2.glb index fa61e79d..a0d51238 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_spade_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_spade_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_steelsheet2_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_steelsheet2_x2.glb index 54fe13cf..0813cd4d 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_steelsheet2_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_steelsheet2_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_steelsheet_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_steelsheet_x2.glb index a58cc44f..d5acb3cf 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_steelsheet_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/dox_bb_steelsheet_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/epicrates_base.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/epicrates_base.glb index 2669cf0c..03cc0e7f 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/epicrates_base.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/epicrates_base.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/epicrates_bridge.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/epicrates_bridge.glb index 5ec16919..388ae69c 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/epicrates_bridge.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/epicrates_bridge.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/epicrates_turret.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/epicrates_turret.glb index dc85a4ea..9e38f952 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/epicrates_turret.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/epicrates_turret.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/frostclawbase.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/frostclawbase.glb index f4ec98b7..4f195bdf 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/frostclawbase.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/frostclawbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/irisbase.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/irisbase.glb index ba060b45..d6092c18 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/irisbase.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/irisbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/irisinside.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/irisinside.glb index 05da33f2..84620382 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/irisinside.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/irisinside.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/irismonu.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/irismonu.glb index 3b59b1e8..8e42fdbf 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/irismonu.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/irismonu.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/irisruin2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/irisruin2.glb index 4b9282fe..2458a74e 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/irisruin2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/irisruin2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/irisruin3.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/irisruin3.glb index 37a416a4..ef27540b 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/irisruin3.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/irisruin3.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/irisruins1.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/irisruins1.glb index 149a6e3e..712801f0 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/irisruins1.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/irisruins1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/iristurbase.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/iristurbase.glb index 4f92f8cf..c5974da1 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/iristurbase.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/iristurbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/kif_cinereousfs.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/kif_cinereousfs.glb index 3e6c268b..be2ca5f5 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/kif_cinereousfs.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/kif_cinereousfs.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/kif_cinereousinv.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/kif_cinereousinv.glb index 234e061e..b8558b9f 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/kif_cinereousinv.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/kif_cinereousinv.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/kif_cinereousplat1.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/kif_cinereousplat1.glb index 4961ce56..d385edab 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/kif_cinereousplat1.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/kif_cinereousplat1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/kif_cinereoustt.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/kif_cinereoustt.glb index ada88f84..a18bbf75 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/kif_cinereoustt.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/kif_cinereoustt.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-base1.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-base1.glb index b2f1c04a..3470fc7e 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-base1.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-base1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-base2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-base2.glb index b9d32393..fada1037 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-base2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-base2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-ec1.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-ec1.glb index 8dfff66b..217f7723 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-ec1.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-ec1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-ec2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-ec2.glb index 7b6d006f..e8ab45af 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-ec2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-ec2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-ec3.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-ec3.glb index ae765aa1..500a6b8c 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-ec3.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-ec3.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-ec4.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-ec4.glb index 3346f9a1..e9a3c2c5 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-ec4.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-ec4.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-ec5.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-ec5.glb index 6f9cd0f5..f6f119f8 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-ec5.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-ec5.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-ec6.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-ec6.glb index 48f425eb..dd92855f 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-ec6.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-ec6.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-stand1.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-stand1.glb index 08a743a7..71601fbe 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-stand1.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-stand1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-tunnel-1.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-tunnel-1.glb index d52f2caa..e6273bce 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-tunnel-1.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/nycto-tunnel-1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rail1.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rail1.glb index e7ad5cff..a2a87e96 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rail1.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rail1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_bombscare_flagstand_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_bombscare_flagstand_x2.glb index 59bc8786..ceef8205 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_bombscare_flagstand_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_bombscare_flagstand_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_ctm1_flagstand1_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_ctm1_flagstand1_x2.glb index 71a04768..f8aafed8 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_ctm1_flagstand1_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_ctm1_flagstand1_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_ctm1_platform1_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_ctm1_platform1_x2.glb index 7182e277..6c21d415 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_ctm1_platform1_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_ctm1_platform1_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_ctm1_sensorbunker1_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_ctm1_sensorbunker1_x2.glb index 1f5bae55..2df84c6d 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_ctm1_sensorbunker1_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_ctm1_sensorbunker1_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_ctm1_sensorbunker2_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_ctm1_sensorbunker2_x2.glb index 5737a563..bce74bad 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_ctm1_sensorbunker2_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_ctm1_sensorbunker2_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_ctm1_vpad_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_ctm1_vpad_x2.glb index b42bbb25..3b483166 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_ctm1_vpad_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_ctm1_vpad_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_bridge2_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_bridge2_x2.glb index 7895a53a..12d0bfe9 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_bridge2_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_bridge2_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_bridgebase1_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_bridgebase1_x2.glb index 9e3ead1b..b3c47726 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_bridgebase1_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_bridgebase1_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_bunker2_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_bunker2_x2.glb index 4fc2a137..770302b8 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_bunker2_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_bunker2_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_platform2_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_platform2_x2.glb index b074a9a8..edde1825 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_platform2_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_platform2_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_platform3_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_platform3_x2.glb index 31847b7e..199dac6b 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_platform3_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_platform3_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_towerbunker2_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_towerbunker2_x2.glb index 790dc19d..5b16cbcd 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_towerbunker2_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_towerbunker2_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_vehiclepad_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_vehiclepad_x2.glb index a67c563f..243630ad 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_vehiclepad_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/rilke_whitedwarf_vehiclepad_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tes_flagbase_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tes_flagbase_x2.glb index f8c8b26b..ff85c26e 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tes_flagbase_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tes_flagbase_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tes_flagbunker.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tes_flagbunker.glb index 2a7fd9fa..8319986c 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tes_flagbunker.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tes_flagbunker.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tes_flyingvehicle_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tes_flyingvehicle_x2.glb index 47589c86..14a7ae05 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tes_flyingvehicle_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tes_flyingvehicle_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tes_flyingvehiclebase.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tes_flyingvehiclebase.glb index 84b3d5a6..81c3b9ad 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tes_flyingvehiclebase.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tes_flyingvehiclebase.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tes_turretholder.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tes_turretholder.glb index 60e866f9..aa93f252 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tes_turretholder.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tes_turretholder.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tri_tbunker_x.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tri_tbunker_x.glb index a98026ba..be563fd6 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tri_tbunker_x.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tri_tbunker_x.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tri_tbunker_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tri_tbunker_x2.glb index c00df816..eb477f24 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tri_tbunker_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tri_tbunker_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tri_tower_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tri_tower_x2.glb index 49ca5bf6..1a1584da 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tri_tower_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL-MapPackEDIT.vl2/interiors/tri_tower_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_Bleed_Base.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_Bleed_Base.glb index afdd698c..f574ae65 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_Bleed_Base.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_Bleed_Base.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_Bleed_turret.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_Bleed_turret.glb index 1d45ef99..f1520eef 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_Bleed_turret.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_Bleed_turret.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_Bleed_vpad.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_Bleed_vpad.glb index ede3e8bf..c08a1feb 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_Bleed_vpad.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_Bleed_vpad.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_Dissention_dox_bb_bunkera_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_Dissention_dox_bb_bunkera_x2.glb index 693bcb63..0463d062 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_Dissention_dox_bb_bunkera_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_Dissention_dox_bb_bunkera_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_Dissention_dox_bb_hangar_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_Dissention_dox_bb_hangar_x2.glb index 99d1266a..de7d5f8f 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_Dissention_dox_bb_hangar_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_Dissention_dox_bb_hangar_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_Dissention_rilke_whitedwarf_mainbase.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_Dissention_rilke_whitedwarf_mainbase.glb index f2c8559d..0577cc9d 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_Dissention_rilke_whitedwarf_mainbase.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_Dissention_rilke_whitedwarf_mainbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_FrozenHope_inf_butch_fhope_base47.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_FrozenHope_inf_butch_fhope_base47.glb index fa3f4491..e8e13201 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_FrozenHope_inf_butch_fhope_base47.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_FrozenHope_inf_butch_fhope_base47.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_FrozenHope_inf_butch_fhope_flag6.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_FrozenHope_inf_butch_fhope_flag6.glb index 3fd5e2bd..086d484b 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_FrozenHope_inf_butch_fhope_flag6.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_FrozenHope_inf_butch_fhope_flag6.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_FrozenHope_inf_butch_fhope_turret12.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_FrozenHope_inf_butch_fhope_turret12.glb index b168b3b5..7e9c4942 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_FrozenHope_inf_butch_fhope_turret12.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/Euro4_FrozenHope_inf_butch_fhope_turret12.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_bmiscpan_ruind.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_bmiscpan_ruind.glb index c3840015..eec8e90f 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_bmiscpan_ruind.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_bmiscpan_ruind.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_btowr9.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_btowr9.glb index 3898ed9c..cc8486d6 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_btowr9.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_btowr9.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_drorck-base.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_drorck-base.glb index f71877be..2c14886f 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_drorck-base.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_drorck-base.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_magnumbase.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_magnumbase.glb index 85b80ddb..02cba52d 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_magnumbase.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_magnumbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_magnumflag.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_magnumflag.glb index 86991bda..b664565a 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_magnumflag.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_magnumflag.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_magnummisc.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_magnummisc.glb index f36fe141..38c6f2ff 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_magnummisc.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_magnummisc.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_magnumturret.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_magnumturret.glb index 8bf93b1e..1f44ba44 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_magnumturret.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_magnumturret.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_magnumvs.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_magnumvs.glb index 8d23aa13..5dc58451 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_magnumvs.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/TL_magnumvs.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/btowr_ccb1.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/btowr_ccb1.glb index f167cc4e..16cf6b25 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/btowr_ccb1.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/btowr_ccb1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/ccb_be_tower1b_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/ccb_be_tower1b_x2.glb index cea831bf..def7ce88 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/ccb_be_tower1b_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/ccb_be_tower1b_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/ccbase1.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/ccbase1.glb index 4d6d6e56..42969cd3 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/ccbase1.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/ccbase1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/ccbase2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/ccbase2.glb index b5c35432..8787e2e3 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/ccbase2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/ccbase2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/ccflagstand.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/ccflagstand.glb index 44e68d00..77a62dea 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/ccflagstand.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/ccflagstand.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/cctower.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/cctower.glb index ae955e1e..522e260b 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/cctower.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/cctower.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/conbase.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/conbase.glb index 48c71bc3..3cbdff68 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/conbase.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/conbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/conspire.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/conspire.glb index ae95a232..50693459 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/conspire.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/conspire.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/dox_bb_fstand_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/dox_bb_fstand_x2.glb index ae1a1599..6c70bb47 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/dox_bb_fstand_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/dox_bb_fstand_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/hbbunker.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/hbbunker.glb index bc40925b..eac95006 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/hbbunker.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/hbbunker.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/hbflagstand.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/hbflagstand.glb index 01f10e44..dc00da43 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/hbflagstand.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/hbflagstand.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/idbase.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/idbase.glb index 3c85178d..3ba4951a 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/idbase.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/idbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/idhangar.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/idhangar.glb index 82b4d9ec..20d50cf8 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/idhangar.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/idhangar.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/idmiddle.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/idmiddle.glb index 9e471968..a8a238b4 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/idmiddle.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/idmiddle.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_fg2base1.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_fg2base1.glb index 201f2a30..1a630e9e 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_fg2base1.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_fg2base1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_fg2flag21.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_fg2flag21.glb index b22911da..94302655 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_fg2flag21.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_fg2flag21.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_fg2turret13.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_fg2turret13.glb index d03738f3..0f2625e0 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_fg2turret13.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_fg2turret13.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_fg2turret9.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_fg2turret9.glb index b9df8adf..433e0c86 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_fg2turret9.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_fg2turret9.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_icebase51.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_icebase51.glb index d2a97585..8ea90855 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_icebase51.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_icebase51.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_iceturretbase9.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_iceturretbase9.glb index 35b7a8c8..e3ac14d7 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_iceturretbase9.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_iceturretbase9.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_icevehicle11.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_icevehicle11.glb index 01cec5a1..d73b8648 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_icevehicle11.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/inf_butch_icevehicle11.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/jagged_base3.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/jagged_base3.glb index b8e85b9f..418bde7e 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/jagged_base3.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/jagged_base3.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/kif_skylightbase.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/kif_skylightbase.glb index a7846263..91ce2725 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/kif_skylightbase.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/kif_skylightbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/kif_skylightfs.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/kif_skylightfs.glb index 4d06b4b0..89ac7e06 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/kif_skylightfs.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/kif_skylightfs.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/magnum_vehicle_stop.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/magnum_vehicle_stop.glb index 2b9dc278..a9c0a9dc 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/magnum_vehicle_stop.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/magnum_vehicle_stop.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/mmbase.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/mmbase.glb index fa040eec..63749177 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/mmbase.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/mmbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/mmbridge.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/mmbridge.glb index 90059369..af2ddc08 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/mmbridge.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/mmbridge.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/muddyswampstand.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/muddyswampstand.glb index 38b12cdc..a71ef72d 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/muddyswampstand.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/muddyswampstand.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/ocular-flagstand.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/ocular-flagstand.glb index c905d65b..bd06bbd0 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/ocular-flagstand.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/ocular-flagstand.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/peach_lush_bunker1.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/peach_lush_bunker1.glb index 3bfd950d..d9d3d312 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/peach_lush_bunker1.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/peach_lush_bunker1.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/tes_flagbase_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/tes_flagbase_x2.glb index 4802725c..a1265038 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/tes_flagbase_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/tes_flagbase_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/tes_flyingvehicle_x2.glb b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/tes_flyingvehicle_x2.glb index ce85613d..5864d347 100644 Binary files a/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/tes_flyingvehicle_x2.glb and b/docs/base/@vl2/z_mappacks/CTF/TWL2-MapPackEDIT.vl2/interiors/tes_flyingvehicle_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/TWL_T2arenaOfficialMaps.vl2/interiors/underhillmidbalancedfnl.glb b/docs/base/@vl2/z_mappacks/TWL_T2arenaOfficialMaps.vl2/interiors/underhillmidbalancedfnl.glb index 3de93916..b5c0c3f1 100644 Binary files a/docs/base/@vl2/z_mappacks/TWL_T2arenaOfficialMaps.vl2/interiors/underhillmidbalancedfnl.glb and b/docs/base/@vl2/z_mappacks/TWL_T2arenaOfficialMaps.vl2/interiors/underhillmidbalancedfnl.glb differ diff --git a/docs/base/@vl2/z_mappacks/TWL_T2arenaOfficialMaps.vl2/interiors/underhillsideonefnl.glb b/docs/base/@vl2/z_mappacks/TWL_T2arenaOfficialMaps.vl2/interiors/underhillsideonefnl.glb index beb73866..3ac93e24 100644 Binary files a/docs/base/@vl2/z_mappacks/TWL_T2arenaOfficialMaps.vl2/interiors/underhillsideonefnl.glb and b/docs/base/@vl2/z_mappacks/TWL_T2arenaOfficialMaps.vl2/interiors/underhillsideonefnl.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Euro4_Bleed_Base.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Euro4_Bleed_Base.glb index 72479951..540e6e8f 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Euro4_Bleed_Base.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Euro4_Bleed_Base.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Euro4_Bleed_turret.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Euro4_Bleed_turret.glb index e6e33bd8..5f71ee5b 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Euro4_Bleed_turret.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Euro4_Bleed_turret.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Euro4_Bleed_vpad.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Euro4_Bleed_vpad.glb index fffdd433..168e3724 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Euro4_Bleed_vpad.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Euro4_Bleed_vpad.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Magellan_kab_magbase.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Magellan_kab_magbase.glb index a6a1d826..3629b735 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Magellan_kab_magbase.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Magellan_kab_magbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Magellan_kab_magflagstand.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Magellan_kab_magflagstand.glb index 9ba70e7a..fd09d8df 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Magellan_kab_magflagstand.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Magellan_kab_magflagstand.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Magellan_kab_turretstand.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Magellan_kab_turretstand.glb index 54cac99a..9cde655f 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Magellan_kab_turretstand.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Magellan_kab_turretstand.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/SpinCycle_spbase2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/SpinCycle_spbase2.glb index 284c47f7..561a6247 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/SpinCycle_spbase2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/SpinCycle_spbase2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/TL_magnumbase.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/TL_magnumbase.glb index 855a8f5f..5c2b34e1 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/TL_magnumbase.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/TL_magnumbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_AF_airtower.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_AF_airtower.glb index b55622d1..289c70bb 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_AF_airtower.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_AF_airtower.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_AF_invowheel.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_AF_invowheel.glb index 380387fe..c7b69d77 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_AF_invowheel.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_AF_invowheel.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_AF_newbase.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_AF_newbase.glb index faf66a7f..8706997d 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_AF_newbase.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_AF_newbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Bastage_BT_MainBase_CK.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Bastage_BT_MainBase_CK.glb index 63914af3..3ab13b1b 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Bastage_BT_MainBase_CK.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Bastage_BT_MainBase_CK.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Bastage_BT_bunktower.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Bastage_BT_bunktower.glb index 16f0b073..67f73033 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Bastage_BT_bunktower.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Bastage_BT_bunktower.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Bastage_BT_tunnel.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Bastage_BT_tunnel.glb index 282513c4..4267955c 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Bastage_BT_tunnel.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Bastage_BT_tunnel.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Caustic_tri_bridge.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Caustic_tri_bridge.glb index bea03a10..12b19de5 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Caustic_tri_bridge.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Caustic_tri_bridge.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Caustic_tri_lamp.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Caustic_tri_lamp.glb index f3b6aebd..1c0825e8 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Caustic_tri_lamp.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Caustic_tri_lamp.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Caustic_tri_main.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Caustic_tri_main.glb index 0e2cb462..d7f058d6 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Caustic_tri_main.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Caustic_tri_main.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Caustic_tri_turret.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Caustic_tri_turret.glb index 8545055d..28a48d46 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Caustic_tri_turret.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Caustic_tri_turret.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Crown_tri_flag.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Crown_tri_flag.glb index 6434bc03..e8e2dd66 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Crown_tri_flag.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Crown_tri_flag.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Crown_tri_turret.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Crown_tri_turret.glb index 01595d64..933f1017 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Crown_tri_turret.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Crown_tri_turret.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_GraveStone_cross.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_GraveStone_cross.glb index 3baddf49..d127dc5e 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_GraveStone_cross.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_GraveStone_cross.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_GraveStone_cross2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_GraveStone_cross2.glb index 85f49216..dc30c8e6 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_GraveStone_cross2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_GraveStone_cross2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_GraveStone_obtower.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_GraveStone_obtower.glb index e463224c..aa1f4358 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_GraveStone_obtower.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_GraveStone_obtower.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_GraveStone_tombstone2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_GraveStone_tombstone2.glb index cb4c91db..b428cb5f 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_GraveStone_tombstone2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_GraveStone_tombstone2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_GraveStone_tombstone3.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_GraveStone_tombstone3.glb index c353e525..59a5d9db 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_GraveStone_tombstone3.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_GraveStone_tombstone3.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_HM_Base_CK.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_HM_Base_CK.glb index 23daa283..47b45014 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_HM_Base_CK.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_HM_Base_CK.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_HM_BunkerA.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_HM_BunkerA.glb index 03afae80..44ed87b4 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_HM_BunkerA.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_HM_BunkerA.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_HM_Flagstand_mk2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_HM_Flagstand_mk2.glb index 2b019429..a0ffa881 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_HM_Flagstand_mk2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_HM_Flagstand_mk2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_HM_TurretPillar.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_HM_TurretPillar.glb index 1e6bc00d..7f7b22fd 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_HM_TurretPillar.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_HM_TurretPillar.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Hellfire_dbase_ccb1.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Hellfire_dbase_ccb1.glb index d50ae55a..8cb47f7d 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Hellfire_dbase_ccb1.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Hellfire_dbase_ccb1.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Hellfire_dmisc_int_fstand_old.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Hellfire_dmisc_int_fstand_old.glb index 7e94ace0..f043893c 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Hellfire_dmisc_int_fstand_old.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Hellfire_dmisc_int_fstand_old.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Hellfire_dwall_ccb1.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Hellfire_dwall_ccb1.glb index 12dda3b0..23e45dc6 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Hellfire_dwall_ccb1.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Hellfire_dwall_ccb1.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_base1.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_base1.glb index 8cefa55c..2166dc72 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_base1.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_base1.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_base1_mod2a.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_base1_mod2a.glb index 6b5fa794..6655660a 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_base1_mod2a.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_base1_mod2a.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_base1_mod3.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_base1_mod3.glb index 3d1022e0..51fc4bf3 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_base1_mod3.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_base1_mod3.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_base1_mod4.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_base1_mod4.glb index a866bafd..4eadd870 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_base1_mod4.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_base1_mod4.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_bridge1.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_bridge1.glb index f9fb4963..d1c1a1ff 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_bridge1.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_bridge1.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_bridge2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_bridge2.glb index aac8df86..5c3a5240 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_bridge2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_bridge2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_platform2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_platform2.glb index f8077503..d4b6e76c 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_platform2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Insurgence_ccb_bd_platform2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_salgenroom2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_salgenroom2.glb index 37f6e3f3..41182f63 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_salgenroom2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_salgenroom2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_salproj1.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_salproj1.glb index ec1b8387..55010b80 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_salproj1.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_salproj1.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_salturretsus1.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_salturretsus1.glb index 0ea8dc9d..3aa6a996 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_salturretsus1.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_salturretsus1.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_slblocks.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_slblocks.glb index 9342a257..32f49b2b 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_slblocks.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_slblocks.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_slinvstat.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_slinvstat.glb index 5e7b46b8..09df5daa 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_slinvstat.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_slinvstat.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_slremo2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_slremo2.glb index 5c881f6c..d284148b 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_slremo2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_slremo2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_slsusbr1.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_slsusbr1.glb index 5d987a58..6bb0fe49 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_slsusbr1.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_slsusbr1.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_slvehramp1.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_slvehramp1.glb index 5eecad04..87e04871 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_slvehramp1.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Malignant_slvehramp1.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_ProjectX_tribalma5ters_coyboybebop_basecom1.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_ProjectX_tribalma5ters_coyboybebop_basecom1.glb index fc111eb9..82428e97 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_ProjectX_tribalma5ters_coyboybebop_basecom1.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_ProjectX_tribalma5ters_coyboybebop_basecom1.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_ProjectX_tunneloflove.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_ProjectX_tunneloflove.glb index e0f42ff0..c12a05c4 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_ProjectX_tunneloflove.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_ProjectX_tunneloflove.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_SR_eepbridge4.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_SR_eepbridge4.glb index 2dd3bbad..aa1b34ef 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_SR_eepbridge4.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_SR_eepbridge4.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_SR_eepbridge4b.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_SR_eepbridge4b.glb index 1b05b7f9..643ce956 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_SR_eepbridge4b.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_SR_eepbridge4b.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_SR_eepbridgeh4b.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_SR_eepbridgeh4b.glb index 08ad0757..3f8ac534 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_SR_eepbridgeh4b.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_SR_eepbridgeh4b.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_SR_eepsab3.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_SR_eepsab3.glb index 25d35d3f..947d881c 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_SR_eepsab3.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_SR_eepsab3.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_SR_eepsab4.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_SR_eepsab4.glb index 64d6700d..fa6208b7 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_SR_eepsab4.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_SR_eepsab4.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Torrent_kif_bigbase.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Torrent_kif_bigbase.glb index f5f35f38..ad53c20c 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Torrent_kif_bigbase.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Torrent_kif_bigbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Torrent_kif_torrent_turret_tower.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Torrent_kif_torrent_turret_tower.glb index ed2aed26..0a6c24d6 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Torrent_kif_torrent_turret_tower.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Torrent_kif_torrent_turret_tower.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Vestige_attackgate.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Vestige_attackgate.glb index fc161fc5..c957ff17 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Vestige_attackgate.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Vestige_attackgate.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Vestige_base.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Vestige_base.glb index 89da6d67..c0c6fa66 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Vestige_base.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Vestige_base.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Vestige_gate.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Vestige_gate.glb index fa7198dc..829b9e0d 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Vestige_gate.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Vestige_gate.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Vestige_guntower.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Vestige_guntower.glb index 272afde6..a0aa8f0d 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Vestige_guntower.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Vestige_guntower.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Vestige_medtower.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Vestige_medtower.glb index ff927359..c67bd1c6 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Vestige_medtower.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Vestige_medtower.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Vestige_vpad.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Vestige_vpad.glb index 96d4a01e..10ef8b81 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Vestige_vpad.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Vestige_vpad.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_WSol_Flagstand_CK.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_WSol_Flagstand_CK.glb index 741f8999..e3f46b8f 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_WSol_Flagstand_CK.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_WSol_Flagstand_CK.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_WSol_GenBase_CK.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_WSol_GenBase_CK.glb index 4bf53635..5be9bec4 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_WSol_GenBase_CK.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_WSol_GenBase_CK.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_WSol_Turret_CK.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_WSol_Turret_CK.glb index cad0bc83..b0b27a1d 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_WSol_Turret_CK.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_WSol_Turret_CK.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Xerxes_Turret.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Xerxes_Turret.glb index 9166a47d..dc97f80b 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Xerxes_Turret.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Xerxes_Turret.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Xerxes_Turret2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Xerxes_Turret2.glb index 8c19ea01..d6ba3ebd 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Xerxes_Turret2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Xerxes_Turret2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Xerxes_proto.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Xerxes_proto.glb index aa9f0997..83053cee 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Xerxes_proto.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_Xerxes_proto.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_ZV_bbunk_ccb1.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_ZV_bbunk_ccb1.glb index 52841621..ead0fd49 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_ZV_bbunk_ccb1.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_ZV_bbunk_ccb1.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_ZV_ccb_be_spire1.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_ZV_ccb_be_spire1.glb index 87b7b5ec..ac05b437 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_ZV_ccb_be_spire1.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_ZV_ccb_be_spire1.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_attrition_infernoflagstand.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_attrition_infernoflagstand.glb index ff878cde..21c01bbd 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_attrition_infernoflagstand.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_attrition_infernoflagstand.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_attrition_stormflagstand.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_attrition_stormflagstand.glb index 087434dc..8a0221f5 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_attrition_stormflagstand.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_attrition_stormflagstand.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_attrition_tower.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_attrition_tower.glb index 24ccb632..6ded34fc 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_attrition_tower.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_attrition_tower.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_attrition_vbase.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_attrition_vbase.glb index 649bb2c6..9122a880 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_attrition_vbase.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_attrition_vbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_beachchair01.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_beachchair01.glb index ad788b7d..356e37f0 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_beachchair01.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_beachchair01.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_dmisc_-nefflagstand1_x2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_dmisc_-nefflagstand1_x2.glb index e1a0a49f..82e42234 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_dmisc_-nefflagstand1_x2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_dmisc_-nefflagstand1_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_ghostdance_proto.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_ghostdance_proto.glb index 9172827a..b3e6fa69 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_ghostdance_proto.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_ghostdance_proto.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_imperium_base01.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_imperium_base01.glb index 256e888f..e75f9ea2 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_imperium_base01.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_imperium_base01.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_imperium_bunker01.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_imperium_bunker01.glb index cd52e9fb..c749e021 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_imperium_bunker01.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_imperium_bunker01.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_imperium_stand01.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_imperium_stand01.glb index 34b618d4..b7c33f7d 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_imperium_stand01.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_imperium_stand01.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_imperium_tower01.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_imperium_tower01.glb index 17019f99..eb0ce0a6 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_imperium_tower01.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_imperium_tower01.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_metaltanks_bridge.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_metaltanks_bridge.glb index 7a763807..fcce9252 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_metaltanks_bridge.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_metaltanks_bridge.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_metaltanks_bridge_tunnel.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_metaltanks_bridge_tunnel.glb index 3064445b..d01e28b6 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_metaltanks_bridge_tunnel.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_metaltanks_bridge_tunnel.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_metaltanks_lush_mainbase.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_metaltanks_lush_mainbase.glb index 1eb76259..5bada877 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_metaltanks_lush_mainbase.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_metaltanks_lush_mainbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_metaltanks_rip.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_metaltanks_rip.glb index 80fddb76..ef9c2423 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_metaltanks_rip.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_metaltanks_rip.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_metaltanks_xing.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_metaltanks_xing.glb index ad7d917a..fadd1bfb 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_metaltanks_xing.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_metaltanks_xing.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_rst_transitbase.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_rst_transitbase.glb index 749a629a..34cb00a4 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_rst_transitbase.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_rst_transitbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_rst_transitstand.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_rst_transitstand.glb index 845fef9d..e322ced1 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_rst_transitstand.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_rst_transitstand.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_t_base0.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_t_base0.glb index 2f506bf7..15c58c98 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_t_base0.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/Xtra_t_base0.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_cardiacturret.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_cardiacturret.glb index 5824a088..a76e0ac1 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_cardiacturret.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_cardiacturret.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipebunker.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipebunker.glb index 8ffa2080..d087145d 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipebunker.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipebunker.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipestand2-badlands.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipestand2-badlands.glb index 24e72d48..fa906115 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipestand2-badlands.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipestand2-badlands.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipestand2-beach.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipestand2-beach.glb index adbdf0c7..ddc2c3c8 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipestand2-beach.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipestand2-beach.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipestand2-desert.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipestand2-desert.glb index d9b3fe9b..73313225 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipestand2-desert.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipestand2-desert.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipestand2-ice.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipestand2-ice.glb index ae5f849c..e33b62de 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipestand2-ice.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipestand2-ice.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipestand2-lava.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipestand2-lava.glb index c5d3563b..73225b66 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipestand2-lava.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipestand2-lava.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipestand2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipestand2.glb index 1a4b18f6..c2a01323 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipestand2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/anthem_pipestand2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmisc_-nef_flagstand1_x.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmisc_-nef_flagstand1_x.glb index e5ae8caf..3334fbbc 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmisc_-nef_flagstand1_x.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmisc_-nef_flagstand1_x.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmisc_-nef_flagstand1_x2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmisc_-nef_flagstand1_x2.glb index 88dce358..0b9d209b 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmisc_-nef_flagstand1_x2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmisc_-nef_flagstand1_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmisc_neftrstand1.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmisc_neftrstand1.glb index 15a93ee9..85ebb5d3 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmisc_neftrstand1.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmisc_neftrstand1.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_bridge0.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_bridge0.glb index db28d266..4528b3dc 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_bridge0.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_bridge0.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_bunker1.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_bunker1.glb index dea1fc83..5a9314e7 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_bunker1.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_bunker1.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruina.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruina.glb index 369fc503..61c7e1b4 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruina.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruina.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruinb.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruinb.glb index 4f7ba590..7a64ee0c 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruinb.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruinb.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruinc.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruinc.glb index 51c41de1..8f89f773 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruinc.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruinc.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruind.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruind.glb index 15817cfe..d70ee275 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruind.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruind.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruine.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruine.glb index 4c95117a..072eee8e 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruine.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruine.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruinf.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruinf.glb index 33c71547..4c15d470 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruinf.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruinf.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruing.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruing.glb index d77d2b44..4c40ca14 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruing.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruing.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruinh.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruinh.glb index f41fa41f..556e4269 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruinh.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruinh.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruini.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruini.glb index e38eec32..88e5cc9f 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruini.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_ruini.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_tower1.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_tower1.glb index 96930298..6577636d 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_tower1.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_tower1.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_tower2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_tower2.glb index 1494d048..b122c12b 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_tower2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/bmiscpan_tower2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/btf_turretplatform_x2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/btf_turretplatform_x2.glb index 12a1545b..b9eb5ceb 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/btf_turretplatform_x2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/btf_turretplatform_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/btowr5-Lava.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/btowr5-Lava.glb index a12d2389..15d4b5e8 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/btowr5-Lava.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/btowr5-Lava.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/cctower.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/cctower.glb index aa3f40b0..239ea60c 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/cctower.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/cctower.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dbase_-nefbase1_x.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dbase_-nefbase1_x.glb index 59504738..b8588c33 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dbase_-nefbase1_x.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dbase_-nefbase1_x.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dbase_-nefbase1_x2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dbase_-nefbase1_x2.glb index 0070f09b..f8281182 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dbase_-nefbase1_x2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dbase_-nefbase1_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dbase_-nefbase2_x.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dbase_-nefbase2_x.glb index 049398f7..88b3ff85 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dbase_-nefbase2_x.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dbase_-nefbase2_x.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dbase_-nefbase2_x2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dbase_-nefbase2_x2.glb index 1483f3ce..de29ebbc 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dbase_-nefbase2_x2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dbase_-nefbase2_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dbunk_rf04.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dbunk_rf04.glb index 7be0240b..3b17fc93 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dbunk_rf04.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dbunk_rf04.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dmisc_-nefflagstand1_x.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dmisc_-nefflagstand1_x.glb index 166dca45..c0e65988 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dmisc_-nefflagstand1_x.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dmisc_-nefflagstand1_x.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dmisc_-nefflagstand1_x2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dmisc_-nefflagstand1_x2.glb index 56513344..6d4a19eb 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dmisc_-nefflagstand1_x2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dmisc_-nefflagstand1_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dtowr_classic1.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dtowr_classic1.glb index 9bd8b095..fed2ccf8 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dtowr_classic1.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/dtowr_classic1.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/idmiddle.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/idmiddle.glb index 3e582b55..4100ec54 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/idmiddle.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/idmiddle.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/inf_butch_lava_flagbase06.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/inf_butch_lava_flagbase06.glb index 19478a1b..f9ea5c48 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/inf_butch_lava_flagbase06.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/inf_butch_lava_flagbase06.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/inf_butch_lava_plat6.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/inf_butch_lava_plat6.glb index 724331b4..defaa099 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/inf_butch_lava_plat6.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/inf_butch_lava_plat6.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/inf_butch_lava_sensor12.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/inf_butch_lava_sensor12.glb index f7bca4d5..0c87c75e 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/inf_butch_lava_sensor12.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/inf_butch_lava_sensor12.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/kif_cinereousfs.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/kif_cinereousfs.glb index f2312fa3..24b623ba 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/kif_cinereousfs.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/kif_cinereousfs.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/kif_cinereousinv.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/kif_cinereousinv.glb index 070cc912..277c6318 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/kif_cinereousinv.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/kif_cinereousinv.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/kif_cinereousplat1.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/kif_cinereousplat1.glb index f351302d..0dc0f67b 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/kif_cinereousplat1.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/kif_cinereousplat1.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/kif_cinereoustt.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/kif_cinereoustt.glb index deed2ff6..c5381fb9 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/kif_cinereoustt.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/kif_cinereoustt.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rail1.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rail1.glb index 200973de..5f057435 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rail1.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rail1.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_bombscare_flagstand_x2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_bombscare_flagstand_x2.glb index 129aa2e8..a0652a8e 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_bombscare_flagstand_x2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_bombscare_flagstand_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_ctm1_sensorbunker1_x2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_ctm1_sensorbunker1_x2.glb index 836bc95c..ef487bbc 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_ctm1_sensorbunker1_x2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_ctm1_sensorbunker1_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_ctm1_sensorbunker2_x2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_ctm1_sensorbunker2_x2.glb index ed70cf2b..e1209229 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_ctm1_sensorbunker2_x2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_ctm1_sensorbunker2_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_bridge2_x2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_bridge2_x2.glb index 31cc3f3c..07e7f7d4 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_bridge2_x2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_bridge2_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_bridgebase1_x2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_bridgebase1_x2.glb index 019e9a66..bc4b676b 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_bridgebase1_x2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_bridgebase1_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_bunker2_x2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_bunker2_x2.glb index bb1cbc04..2563a653 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_bunker2_x2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_bunker2_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_platform2_x2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_platform2_x2.glb index 87d8b739..f8dd91da 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_platform2_x2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_platform2_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_platform3_x2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_platform3_x2.glb index da318af8..16f1a049 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_platform3_x2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_platform3_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_towerbunker2_x2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_towerbunker2_x2.glb index 18e3d4ff..659dc839 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_towerbunker2_x2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_towerbunker2_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_vehiclepad_x2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_vehiclepad_x2.glb index e9376b4a..60a99a40 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_vehiclepad_x2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rilke_whitedwarf_vehiclepad_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_FaceBase.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_FaceBase.glb index f3c5235f..2c18ea20 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_FaceBase.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_FaceBase.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_FaceBase2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_FaceBase2.glb index 55c8b433..7afb3b77 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_FaceBase2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_FaceBase2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_FaceBase_VehFix.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_FaceBase_VehFix.glb index e3b9df6b..208dd6e5 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_FaceBase_VehFix.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_FaceBase_VehFix.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_FaceStand.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_FaceStand.glb index 287be131..f7a56119 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_FaceStand.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_FaceStand.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SEbase.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SEbase.glb index a98a5139..bf7868ff 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SEbase.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SEbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SEcave1_part1.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SEcave1_part1.glb index 96806185..9ffd068f 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SEcave1_part1.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SEcave1_part1.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SEcave1_part2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SEcave1_part2.glb index fb16251a..8f41cf0f 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SEcave1_part2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SEcave1_part2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SEcave1_part3.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SEcave1_part3.glb index cc136d7a..a78fb07e 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SEcave1_part3.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SEcave1_part3.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SEcave2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SEcave2.glb index e8e8f51b..48845fa6 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SEcave2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SEcave2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SEtower.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SEtower.glb index 21a0a10a..dbbe6c64 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SEtower.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SEtower.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SimpleFlagArena.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SimpleFlagArena.glb index 89d732a0..cc649ea5 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SimpleFlagArena.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_SimpleFlagArena.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_agroleonbase.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_agroleonbase.glb index 97a9e698..8f115b93 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_agroleonbase.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_agroleonbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_agroleonstand.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_agroleonstand.glb index 21519060..d3705385 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_agroleonstand.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_agroleonstand.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_arenalight.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_arenalight.glb index 6aea9a9b..aeef8f4f 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_arenalight.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_arenalight.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_astro_bunker.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_astro_bunker.glb index c1a19efc..5e925486 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_astro_bunker.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_astro_bunker.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_astro_stand.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_astro_stand.glb index 7f071c5d..078d7c02 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_astro_stand.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_astro_stand.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_barrier1.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_barrier1.glb index aa288d86..84c2489a 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_barrier1.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_barrier1.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_barrier2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_barrier2.glb index 468c3790..be953150 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_barrier2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_barrier2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_beagleship.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_beagleship.glb index d23bbed7..3c3f02d1 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_beagleship.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_beagleship.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_bitterbase.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_bitterbase.glb index 08cf9acb..f9db40fe 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_bitterbase.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_bitterbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_bitterbunker.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_bitterbunker.glb index 7575b462..8c9d78f8 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_bitterbunker.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_bitterbunker.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_bitterbunker2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_bitterbunker2.glb index 6a6dffaa..e2b9194d 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_bitterbunker2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_bitterbunker2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_bitterbunker3.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_bitterbunker3.glb index 4427670e..3eff45e5 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_bitterbunker3.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_bitterbunker3.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_bitterstand.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_bitterstand.glb index 2f7e8737..e4335783 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_bitterstand.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_bitterstand.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_debris1.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_debris1.glb index 0ac4652d..0e09db87 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_debris1.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_debris1.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_debris2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_debris2.glb index 3322a4aa..2e077dc5 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_debris2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_debris2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building1.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building1.glb index 4aa20265..f4d94b3b 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building1.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building1.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building2.glb index dfd1d635..2cb55ba1 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building3.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building3.glb index 9ca011cc..aeaec4f2 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building3.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building3.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building4.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building4.glb index 1b27f649..1ebc40c4 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building4.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building4.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building5.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building5.glb index 0a69dade..360bbd9e 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building5.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building5.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building6.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building6.glb index caf3d32f..29cb11ac 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building6.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building6.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building7.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building7.glb index 40e3c406..ebd04e2c 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building7.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building7.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building8.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building8.glb index 84e4e738..642e7cb8 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building8.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_building8.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_citybase.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_citybase.glb index 61f5aefa..c2351c62 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_citybase.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_citybase.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_citybridge.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_citybridge.glb index ca154e7c..8ae4a7df 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_citybridge.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_citybridge.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_midfield.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_midfield.glb index 53201ae4..80f79daf 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_midfield.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_derm_midfield.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_islebase.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_islebase.glb index 1965c5fc..1e4d5971 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_islebase.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_islebase.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_islebase2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_islebase2.glb index 1cc0bc45..b1647ae5 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_islebase2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_islebase2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lighthouse.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lighthouse.glb index 5182c0f5..73d5e172 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lighthouse.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lighthouse.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_flagplat.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_flagplat.glb index a5fe1e56..14ad851e 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_flagplat.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_flagplat.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle1.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle1.glb index 00a5d908..12f87e8e 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle1.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle1.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle10.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle10.glb index 3ad8cceb..90efb5da 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle10.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle10.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle2.glb index 5f7553ec..696ffefc 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle3.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle3.glb index 7a40eb45..c1b0c909 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle3.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle3.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle4.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle4.glb index e16fcb1b..5ad6cfeb 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle4.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle4.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle5.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle5.glb index 49fb0d8f..3c7339d9 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle5.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle5.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle6.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle6.glb index 83552f37..838b2ef0 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle6.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle6.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle7.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle7.glb index 476a649d..2130cad5 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle7.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle7.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle8.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle8.glb index 4b38847a..eaaab9b3 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle8.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle8.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle9.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle9.glb index d9ad76d2..3ca22abb 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle9.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_floatingisle9.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_rock2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_rock2.glb index aa98e4ea..723af6d4 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_rock2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_lush_rock2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_newlighthouse.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_newlighthouse.glb index 032313dd..acd18b65 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_newlighthouse.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_newlighthouse.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_padbottom.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_padbottom.glb index d9569b9d..53331e15 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_padbottom.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_padbottom.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_padbottom2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_padbottom2.glb index a0c263bc..f79b5383 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_padbottom2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_padbottom2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_pipedream.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_pipedream.glb index aaa0f652..7378872e 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_pipedream.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_pipedream.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_spit_base.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_spit_base.glb index 48ee93e4..f1905fd6 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_spit_base.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_spit_base.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_spit_stand.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_spit_stand.glb index 06d82a1e..98482eb3 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_spit_stand.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/rst_spit_stand.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/tes_flagbase_x2.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/tes_flagbase_x2.glb index 06637d62..0143f816 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/tes_flagbase_x2.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/interiors/tes_flagbase_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/C_BaseLoPro.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/C_BaseLoPro.glb index b64c0787..761b062a 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/C_BaseLoPro.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/C_BaseLoPro.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/borg16-Autumn.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/borg16-Autumn.glb index 158736bb..50d6017b 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/borg16-Autumn.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/borg16-Autumn.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/borg19-Autumn.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/borg19-Autumn.glb index 11c4281f..7a65411e 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/borg19-Autumn.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/borg19-Autumn.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/porg1-dark.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/porg1-dark.glb index 6dde1f84..74aa8995 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/porg1-dark.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/porg1-dark.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-TCmug.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-TCmug.glb index e43f6a65..f0016ed5 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-TCmug.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-TCmug.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-TNmug.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-TNmug.glb index b50749c0..83d04f10 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-TNmug.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-TNmug.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-chocotaco.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-chocotaco.glb index a0608361..a52414d9 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-chocotaco.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-chocotaco.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-goonflag.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-goonflag.glb index eb0820f9..14c6c873 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-goonflag.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-goonflag.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-samifin.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-samifin.glb index 32f5bdef..7f6f6807 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-samifin.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-samifin.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-santahat.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-santahat.glb index 871106ee..3a79c2df 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-santahat.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-santahat.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-taobook.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-taobook.glb index 6e1894b7..d7ba0bd1 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-taobook.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-taobook.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-turtle.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-turtle.glb index 88bc4bc1..3fab0b07 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-turtle.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/rst-turtle.glb differ diff --git a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/vend.glb b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/vend.glb index c2e5edfb..7ced25e5 100644 Binary files a/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/vend.glb and b/docs/base/@vl2/z_mappacks/zDMP-4.7.3DX.vl2/shapes/vend.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/8mCube.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/8mCube.glb index 36253281..187ae6df 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/8mCube.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/8mCube.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/RDTower.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/RDTower.glb index 160c941c..0d08a838 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/RDTower.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/RDTower.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/anomalyBase.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/anomalyBase.glb index 098aa85d..de1d6dc7 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/anomalyBase.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/anomalyBase.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/anomalyCannon.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/anomalyCannon.glb index 05e8a6a5..144e8db3 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/anomalyCannon.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/anomalyCannon.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/anomalyCenterBase.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/anomalyCenterBase.glb index d2f25bbb..b8e213b4 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/anomalyCenterBase.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/anomalyCenterBase.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/arkRing.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/arkRing.glb index a8779e68..1c4e243c 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/arkRing.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/arkRing.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bbstand.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bbstand.glb index 178effbd..bb691947 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bbstand.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bbstand.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bcannon.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bcannon.glb index c775cfea..68d3b232 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bcannon.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bcannon.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/beTunnel.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/beTunnel.glb index 6f07daa5..43277211 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/beTunnel.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/beTunnel.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bfBridge.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bfBridge.glb index 1ac818b8..2b68ecab 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bfBridge.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bfBridge.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bfBridgeCap.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bfBridgeCap.glb index 0d9628ed..08a25522 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bfBridgeCap.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bfBridgeCap.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bfstand.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bfstand.glb index c909a64f..f59d1f08 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bfstand.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bfstand.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bigTube.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bigTube.glb index f361695b..29a84310 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bigTube.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bigTube.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bmortar.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bmortar.glb index 2f6025f2..201a8d3f 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bmortar.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bmortar.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bombbase.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bombbase.glb index 422f8996..9043dac1 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bombbase.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/bombbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/cannonTunnel.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/cannonTunnel.glb index 69854b4d..c6821ec3 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/cannonTunnel.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/cannonTunnel.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/doxBunkerBase.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/doxBunkerBase.glb index 650e45bb..93352d45 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/doxBunkerBase.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/doxBunkerBase.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/doxRedStand.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/doxRedStand.glb index c3942bbe..975ad182 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/doxRedStand.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/doxRedStand.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_box_x2.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_box_x2.glb index 4496cd0d..566eb8e6 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_box_x2.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_box_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_bunkera_x2.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_bunkera_x2.glb index ec3364ea..ea3ed750 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_bunkera_x2.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_bunkera_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_bunkerb_x2.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_bunkerb_x2.glb index f3907727..f8d3c5eb 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_bunkerb_x2.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_bunkerb_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_fstand_x2.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_fstand_x2.glb index 47e92e49..30f6c331 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_fstand_x2.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_fstand_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_hangar_x2.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_hangar_x2.glb index b37446d6..17fdfce0 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_hangar_x2.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_hangar_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_rig_x2.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_rig_x2.glb index cd9c0cc7..4dbac3e5 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_rig_x2.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_rig_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_rustbox_x2.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_rustbox_x2.glb index 4f03acef..1883d158 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_rustbox_x2.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_rustbox_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_sandcastle_x2.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_sandcastle_x2.glb index 0c80d669..8d659b0c 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_sandcastle_x2.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_sandcastle_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_slab_x2.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_slab_x2.glb index ec885964..d85b51e1 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_slab_x2.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_slab_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_spade_x2.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_spade_x2.glb index 5a1fc1ee..3e9024b4 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_spade_x2.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dox_bb_spade_x2.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dragonheadL.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dragonheadL.glb index 8b273869..1d2dcc51 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dragonheadL.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dragonheadL.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dragonheadNeck.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dragonheadNeck.glb index 8ca7f95d..d4cb1cdf 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dragonheadNeck.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dragonheadNeck.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dragonheadR.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dragonheadR.glb index 57f5c861..c39c4ef5 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dragonheadR.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/dragonheadR.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_basatin-base.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_basatin-base.glb index af838e2d..9e933426 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_basatin-base.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_basatin-base.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_catwalk_base.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_catwalk_base.glb index dccf0fb9..c04458c5 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_catwalk_base.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_catwalk_base.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_dx_4way-ramp.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_dx_4way-ramp.glb index 29bb4195..30d25f13 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_dx_4way-ramp.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_dx_4way-ramp.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_nirvana-base.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_nirvana-base.glb index 194973ef..6d0e4842 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_nirvana-base.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_nirvana-base.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_sidewinder-BEbase.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_sidewinder-BEbase.glb index a81609ae..28a7fe99 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_sidewinder-BEbase.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_sidewinder-BEbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_sidewinder-DSbase.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_sidewinder-DSbase.glb index 7b8f2210..05f2a687 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_sidewinder-DSbase.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_sidewinder-DSbase.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_sidewinder-turret.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_sidewinder-turret.glb index 11044961..32197b0c 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_sidewinder-turret.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_sidewinder-turret.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_tg-base.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_tg-base.glb index 0c7d5913..ab4e0cb8 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_tg-base.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ee_tg-base.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ext_bridge.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ext_bridge.glb index d2b1f0b4..4831b955 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ext_bridge.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ext_bridge.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ext_bridge_ramp.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ext_bridge_ramp.glb index f4839484..5965902f 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ext_bridge_ramp.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ext_bridge_ramp.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ext_midair_platform.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ext_midair_platform.glb index 22de5461..297046bd 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ext_midair_platform.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ext_midair_platform.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/facebasePlat.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/facebasePlat.glb index 6c7e1a1e..758c7ecf 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/facebasePlat.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/facebasePlat.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/facingWorldsBase.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/facingWorldsBase.glb index b8f62b79..0891f204 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/facingWorldsBase.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/facingWorldsBase.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/facingWorldsBaseOld.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/facingWorldsBaseOld.glb index bb954a2d..9a1bdc0d 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/facingWorldsBaseOld.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/facingWorldsBaseOld.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ffWall.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ffWall.glb index 593a1e95..51504c5e 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ffWall.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/ffWall.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/frozenSolidStand.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/frozenSolidStand.glb index c445eb0f..a838b6fa 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/frozenSolidStand.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/frozenSolidStand.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/largeIceWall.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/largeIceWall.glb index eb9df54b..4f2b4325 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/largeIceWall.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/largeIceWall.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/lightningRod.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/lightningRod.glb index 22cd095a..18a230e2 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/lightningRod.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/lightningRod.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/mfg_tower.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/mfg_tower.glb index 2532ac69..42de3f8a 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/mfg_tower.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/mfg_tower.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/monoS.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/monoS.glb index 747a1552..be61938f 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/monoS.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/monoS.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/snowVal.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/snowVal.glb index 3a74082f..6b00aeb4 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/snowVal.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/snowVal.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/snowtuar.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/snowtuar.glb index f7ea4ef2..34c4ed76 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/snowtuar.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/snowtuar.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/stormTopTunnel.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/stormTopTunnel.glb index 44624dd5..26142ad3 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/stormTopTunnel.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/stormTopTunnel.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/stormstand.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/stormstand.glb index 9e8fd635..378a1964 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/stormstand.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/stormstand.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/swTunnel.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/swTunnel.glb index 3eab4d45..591bf17d 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/swTunnel.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/swTunnel.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_bowlstump.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_bowlstump.glb index 0c3d4bf5..ce3622d0 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_bowlstump.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_bowlstump.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_corridoor.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_corridoor.glb index dd38f32e..69a9d720 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_corridoor.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_corridoor.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_hollow.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_hollow.glb index 3f3ecbae..744eccc4 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_hollow.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_hollow.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_main.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_main.glb index 6e40c62a..cc713b98 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_main.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_main.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_nocanopy.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_nocanopy.glb index 6178a29b..a5ead7a9 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_nocanopy.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_nocanopy.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_router.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_router.glb index c196ab30..32fce6aa 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_router.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_router.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_solid.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_solid.glb index 76d09c48..10d7f5db 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_solid.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_solid.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_stump.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_stump.glb index 37f685d2..cd1e6ea3 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_stump.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/tree_stump.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/vocstand.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/vocstand.glb index af83c783..d9a2e01f 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/vocstand.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/vocstand.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/waterStand.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/waterStand.glb index 090b2263..4edda684 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/waterStand.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/interiors/waterStand.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/T1ELF.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/T1ELF.glb index c27e43c4..ca308600 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/T1ELF.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/T1ELF.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/bTer.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/bTer.glb index 034da447..0b057ca7 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/bTer.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/bTer.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/buildStation.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/buildStation.glb index e3ea1e46..30b42b1e 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/buildStation.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/buildStation.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/cannonTip.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/cannonTip.glb index 06476494..6b00f14a 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/cannonTip.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/cannonTip.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/catMaxLoaf.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/catMaxLoaf.glb index 891ea18a..e6d5e426 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/catMaxLoaf.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/catMaxLoaf.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/dsFlame.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/dsFlame.glb index 70191576..afdf273a 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/dsFlame.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/dsFlame.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/dsPlane.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/dsPlane.glb index 3743e2c1..fffdc329 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/dsPlane.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/dsPlane.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/engSphere.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/engSphere.glb index 9d2d65f2..46b8e35d 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/engSphere.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/engSphere.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/faceBox.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/faceBox.glb index ea45884e..24992c69 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/faceBox.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/faceBox.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/faceSphere.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/faceSphere.glb index f3e4ee34..8fd42c3f 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/faceSphere.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/faceSphere.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/flagIconFoe.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/flagIconFoe.glb index 35210295..6b3556a6 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/flagIconFoe.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/flagIconFoe.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/flagIconFriend.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/flagIconFriend.glb index a4299116..44d84b6f 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/flagIconFriend.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/flagIconFriend.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/foeMark.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/foeMark.glb index 81d9d774..87d77dbd 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/foeMark.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/foeMark.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/friendMark.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/friendMark.glb index 49c069ce..4b088f11 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/friendMark.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/friendMark.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/hellFireGun.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/hellFireGun.glb index b65c5980..801beda2 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/hellFireGun.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/hellFireGun.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/hellFireTurret.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/hellFireTurret.glb index 3a6e325f..a74d0dda 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/hellFireTurret.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/hellFireTurret.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/iceCube.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/iceCube.glb index 845de9ec..7deaf971 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/iceCube.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/iceCube.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/paperFlag.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/paperFlag.glb index 9f7667b6..cb01275c 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/paperFlag.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/paperFlag.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/redeemer.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/redeemer.glb index b7513e85..019c7bf5 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/redeemer.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/redeemer.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/skySphereA.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/skySphereA.glb index a1e67cb8..9eb9b092 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/skySphereA.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/skySphereA.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/skySphereB.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/skySphereB.glb index 2ba8839e..222a802c 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/skySphereB.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/skySphereB.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1CMDStation.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1CMDStation.glb index f8f8cf79..b9cd6e1d 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1CMDStation.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1CMDStation.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1Chaingun.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1Chaingun.glb index 45258799..1f9525a1 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1Chaingun.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1Chaingun.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1DepAmmo.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1DepAmmo.glb index 3dfb38ed..dade94bb 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1DepAmmo.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1DepAmmo.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1DepInvy.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1DepInvy.glb index 306dcd2d..d6044417 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1DepInvy.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1DepInvy.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1DepInvy_Pack.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1DepInvy_Pack.glb index c35d0059..df5c2d7a 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1DepInvy_Pack.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1DepInvy_Pack.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1GrenadeLauncher.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1GrenadeLauncher.glb index 8b498953..f8f1e8c0 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1GrenadeLauncher.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1GrenadeLauncher.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1LSensor.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1LSensor.glb index d4f335ce..e1e6aa9b 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1LSensor.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1LSensor.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1MisTurret.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1MisTurret.glb index 5c9efcc7..613d095c 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1MisTurret.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1MisTurret.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1PowerGen.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1PowerGen.glb index dcad1584..18d17d7a 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1PowerGen.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1PowerGen.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1RemoteTurret.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1RemoteTurret.glb index 84031e2d..a5478aec 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1RemoteTurret.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1RemoteTurret.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1RemoteTurret_Pack.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1RemoteTurret_Pack.glb index 1adbd02b..956fb100 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1RemoteTurret_Pack.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1RemoteTurret_Pack.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1RepairPack.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1RepairPack.glb index e46e2048..bbc38996 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1RepairPack.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1RepairPack.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1RepairPackGun.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1RepairPackGun.glb index 6c930558..b3524ed1 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1RepairPackGun.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1RepairPackGun.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1Sentry.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1Sentry.glb index 2d666a03..8ee27340 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1Sentry.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1Sentry.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1Solar.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1Solar.glb index fa794001..9cc08e7c 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1Solar.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1Solar.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1TargetLaser.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1TargetLaser.glb index 4102f76d..fa431fe4 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1TargetLaser.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1TargetLaser.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1VehPad.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1VehPad.glb index d67d8a07..37f0bb15 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1VehPad.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1VehPad.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1VehStation.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1VehStation.glb index a123c11d..ba1dce1c 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1VehStation.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1VehStation.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1ammopad.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1ammopad.glb index 7a9af6e1..16d82a40 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1ammopad.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1ammopad.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1baseflag.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1baseflag.glb index 7a166c04..1de431e3 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1baseflag.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1baseflag.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1baseflagB.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1baseflagB.glb index dd0a7aba..394953c6 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1baseflagB.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1baseflagB.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1baseflagD.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1baseflagD.glb index 079b3ff4..dfd02894 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1baseflagD.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1baseflagD.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1baseflagP.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1baseflagP.glb index 5e118528..2e34206f 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1baseflagP.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1baseflagP.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1baseflagS.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1baseflagS.glb index 1f570efe..557eea35 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1baseflagS.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1baseflagS.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1blaster.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1blaster.glb index 12220598..866e6198 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1blaster.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1blaster.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1disc.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1disc.glb index b6e8ab7b..724e9522 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1disc.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1disc.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1elfTurret.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1elfTurret.glb index af740428..cdd68734 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1elfTurret.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1elfTurret.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1flyer.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1flyer.glb index 7c71f672..3f6c307d 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1flyer.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1flyer.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1flyer2.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1flyer2.glb index 6ec7efb9..b6311e28 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1flyer2.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1flyer2.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1hpc.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1hpc.glb index 786ce5e6..108ffb44 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1hpc.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1hpc.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1inventorystation.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1inventorystation.glb index 72327b2d..aee5caae 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1inventorystation.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1inventorystation.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1lpc.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1lpc.glb index a5fc4566..f9c0809d 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1lpc.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1lpc.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1mSensor.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1mSensor.glb index 4036a5d1..c07ef20e 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1mSensor.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1mSensor.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1mortar.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1mortar.glb index dfe18184..01f4d121 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1mortar.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1mortar.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1pGen.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1pGen.glb index aea79103..41a4eff4 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1pGen.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1pGen.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1plasma.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1plasma.glb index 1ab05cfc..8c9c78ec 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1plasma.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1plasma.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1sniper.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1sniper.glb index 90f7aa92..1fcd6f7d 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1sniper.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t1sniper.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t2DepAmmo.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t2DepAmmo.glb index 85b4165f..c94122c2 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t2DepAmmo.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t2DepAmmo.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t2DepAmmo_Pack.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t2DepAmmo_Pack.glb index f8f49d7d..3df8fcf0 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t2DepAmmo_Pack.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/t2DepAmmo_Pack.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/tCube.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/tCube.glb index 845de9ec..7deaf971 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/tCube.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/tCube.glb differ diff --git a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/targetCube.glb b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/targetCube.glb index 431206b7..0fee5bb8 100644 Binary files a/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/targetCube.glb and b/docs/base/@vl2/z_mappacks/z_DMP2-V0.6.vl2/shapes/targetCube.glb differ diff --git a/docs/index.html b/docs/index.html index b1be3556..f299879e 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1 +1 @@ -MapGenius – Explore maps for Tribes 2 \ No newline at end of file +MapGenius – Explore maps for Tribes 2 \ No newline at end of file diff --git a/docs/index.txt b/docs/index.txt index 09a2f76b..86a2de9d 100644 --- a/docs/index.txt +++ b/docs/index.txt @@ -2,7 +2,7 @@ 2:I[39756,["/t2-mapper/_next/static/chunks/060f9a97930f3d04.js"],"default"] 3:I[37457,["/t2-mapper/_next/static/chunks/060f9a97930f3d04.js"],"default"] 4:I[47257,["/t2-mapper/_next/static/chunks/060f9a97930f3d04.js"],"ClientPageRoot"] -5:I[31713,["/t2-mapper/_next/static/chunks/a99c02adf7563d85.js","/t2-mapper/_next/static/chunks/9df2d46c5eaa77d2.js","/t2-mapper/_next/static/chunks/32ef0c8650712240.js","/t2-mapper/_next/static/chunks/49f75d30e4f6ac74.js"],"default"] +5:I[31713,["/t2-mapper/_next/static/chunks/a99c02adf7563d85.js","/t2-mapper/_next/static/chunks/32ef0c8650712240.js","/t2-mapper/_next/static/chunks/16bd4fe75afcb969.js","/t2-mapper/_next/static/chunks/49f75d30e4f6ac74.js"],"default"] 8:I[97367,["/t2-mapper/_next/static/chunks/060f9a97930f3d04.js"],"OutletBoundary"] a:I[11533,["/t2-mapper/_next/static/chunks/060f9a97930f3d04.js"],"AsyncMetadataOutlet"] c:I[97367,["/t2-mapper/_next/static/chunks/060f9a97930f3d04.js"],"ViewportBoundary"] @@ -10,7 +10,7 @@ e:I[97367,["/t2-mapper/_next/static/chunks/060f9a97930f3d04.js"],"MetadataBounda f:"$Sreact.suspense" 11:I[68027,[],"default"] :HL["/t2-mapper/_next/static/chunks/15b04c9d2ba2c4cf.css","style"] -0:{"P":null,"b":"nCiBD1gBZD0BBktWqKGDD","p":"/t2-mapper","c":["",""],"i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/t2-mapper/_next/static/chunks/15b04c9d2ba2c4cf.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L4",null,{"Component":"$5","searchParams":{},"params":{},"promises":["$@6","$@7"]}],[["$","script","script-0",{"src":"/t2-mapper/_next/static/chunks/a99c02adf7563d85.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/t2-mapper/_next/static/chunks/9df2d46c5eaa77d2.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/t2-mapper/_next/static/chunks/32ef0c8650712240.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/t2-mapper/_next/static/chunks/49f75d30e4f6ac74.js","async":true,"nonce":"$undefined"}]],["$","$L8",null,{"children":["$L9",["$","$La",null,{"promise":"$@b"}]]}]]}],{},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lc",null,{"children":"$Ld"}],null],["$","$Le",null,{"children":["$","div",null,{"hidden":true,"children":["$","$f",null,{"fallback":null,"children":"$L10"}]}]}]]}],false]],"m":"$undefined","G":["$11",[["$","link","0",{"rel":"stylesheet","href":"/t2-mapper/_next/static/chunks/15b04c9d2ba2c4cf.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"s":false,"S":true} +0:{"P":null,"b":"nuFCeK7OZLd9PDcpp99Xm","p":"/t2-mapper","c":["",""],"i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/t2-mapper/_next/static/chunks/15b04c9d2ba2c4cf.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"en","children":["$","body",null,{"children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L4",null,{"Component":"$5","searchParams":{},"params":{},"promises":["$@6","$@7"]}],[["$","script","script-0",{"src":"/t2-mapper/_next/static/chunks/a99c02adf7563d85.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/t2-mapper/_next/static/chunks/32ef0c8650712240.js","async":true,"nonce":"$undefined"}],["$","script","script-2",{"src":"/t2-mapper/_next/static/chunks/16bd4fe75afcb969.js","async":true,"nonce":"$undefined"}],["$","script","script-3",{"src":"/t2-mapper/_next/static/chunks/49f75d30e4f6ac74.js","async":true,"nonce":"$undefined"}]],["$","$L8",null,{"children":["$L9",["$","$La",null,{"promise":"$@b"}]]}]]}],{},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$Lc",null,{"children":"$Ld"}],null],["$","$Le",null,{"children":["$","div",null,{"hidden":true,"children":["$","$f",null,{"fallback":null,"children":"$L10"}]}]}]]}],false]],"m":"$undefined","G":["$11",[["$","link","0",{"rel":"stylesheet","href":"/t2-mapper/_next/static/chunks/15b04c9d2ba2c4cf.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"s":false,"S":true} 6:{} 7:"$0:f:0:1:2:children:1:props:children:0:props:params" d:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]] diff --git a/reference/Tribes2_Fog_System.md b/reference/Tribes2_Fog_System.md index 56eb48fc..10cbfd06 100644 --- a/reference/Tribes2_Fog_System.md +++ b/reference/Tribes2_Fog_System.md @@ -805,6 +805,7 @@ The fog bands are positioned relative to the skybox geometry: ``` For a mission with `visibleDistance = 600`: + - `mRadius = 600 * 0.95 = 570` - `mSkyBoxPt.x = 570 / sqrt(3) ≈ 329` (skybox corner coordinate) @@ -813,6 +814,7 @@ The fog band geometry spans from height 0 (`HORIZON`) to height 60 (`OFFSET_HEIG #### Fog Ban Alpha Values When NOT in a fog volume (`depthInFog <= 0`): + ```cpp banHeights[0] = HORIZON; // 0.0 - lower band at horizon banHeights[1] = OFFSET_HEIGHT; // 60.0 - upper band @@ -821,6 +823,7 @@ alphaBan[1] = 0.0; // Center top is fully transparent ``` The fog bands render as triangle strips with linear vertex alpha interpolation: + - Lower vertices (at horizon): full fog color (alpha = 1.0) - Upper vertices (at OFFSET_HEIGHT): transparent (alpha = 0.0) diff --git a/scripts/blender/dif2gltf.py b/scripts/blender/dif2gltf.py index 6ab7dce1..f81d5b78 100644 --- a/scripts/blender/dif2gltf.py +++ b/scripts/blender/dif2gltf.py @@ -101,6 +101,9 @@ for i, in_path in enumerate(input_files, start=1): export_yup=True, # Export lightmap textures connected to emissive (even with 0 strength) export_unused_textures=True, + # Draco compression + export_draco_mesh_compression_enable=True, + export_draco_mesh_compression_level=6, ) if "FINISHED" not in res: failure_count += 1 diff --git a/scripts/blender/dts2gltf.py b/scripts/blender/dts2gltf.py index 3de65181..138b2dbb 100644 --- a/scripts/blender/dts2gltf.py +++ b/scripts/blender/dts2gltf.py @@ -103,6 +103,9 @@ for i, in_path in enumerate(input_files, start=1): # Blender and T2 are Z-up, but these assets are destined for Three.js which # is Y-up. It's easiest to match the Y-up of our destination engine. export_yup=True, + # Draco compression + export_draco_mesh_compression_enable=True, + export_draco_mesh_compression_level=6, ) if "FINISHED" not in res: failure_count += 1 diff --git a/src/components/CloudLayers.tsx b/src/components/CloudLayers.tsx index f768deb7..86d68301 100644 --- a/src/components/CloudLayers.tsx +++ b/src/components/CloudLayers.tsx @@ -300,32 +300,40 @@ const cloudFragmentShader = ` varying vec2 vUv; varying float vAlpha; + // Debug grid using screen-space derivatives for sharp, anti-aliased lines + float debugGrid(vec2 uv, float gridSize, float lineWidth) { + vec2 scaledUV = uv * gridSize; + vec2 grid = abs(fract(scaledUV - 0.5) - 0.5) / fwidth(scaledUV); + float line = min(grid.x, grid.y); + return 1.0 - min(line / lineWidth, 1.0); + } + void main() { vec4 texColor = texture2D(cloudTexture, vUv); - // Debug mode: show layer-colored clouds (red, green, blue for layers 0, 1, 2) - if (debugMode > 0.5) { - vec3 debugColor; - if (layerIndex == 0) { - debugColor = vec3(1.0, 0.3, 0.3); // Red - } else if (layerIndex == 1) { - debugColor = vec3(0.3, 1.0, 0.3); // Green - } else { - debugColor = vec3(0.3, 0.3, 1.0); // Blue - } - // Use same alpha calculation as normal mode - gl_FragColor = vec4(debugColor, texColor.a * vAlpha); - return; - } - // Tribes 2 uses GL_MODULATE: final = texture × vertex color // Vertex color is white with varying alpha, so: // Final RGB = Texture RGB × 1.0 = Texture RGB // Final Alpha = Texture Alpha × Vertex Alpha float finalAlpha = texColor.a * vAlpha; + vec3 color = texColor.rgb; + + // Debug mode: overlay R/G/B grid for layers 0/1/2 + if (debugMode > 0.5) { + float gridIntensity = debugGrid(vUv, 4.0, 1.5); + vec3 gridColor; + if (layerIndex == 0) { + gridColor = vec3(1.0, 0.0, 0.0); // Red + } else if (layerIndex == 1) { + gridColor = vec3(0.0, 1.0, 0.0); // Green + } else { + gridColor = vec3(0.0, 0.0, 1.0); // Blue + } + color = mix(color, gridColor, gridIntensity * 0.5); + } // Output clouds with texture color and combined alpha - gl_FragColor = vec4(texColor.rgb, finalAlpha); + gl_FragColor = vec4(color, finalAlpha); } `; diff --git a/src/components/InteriorInstance.tsx b/src/components/InteriorInstance.tsx index 002fc2a2..d94de9ad 100644 --- a/src/components/InteriorInstance.tsx +++ b/src/components/InteriorInstance.tsx @@ -18,17 +18,6 @@ import { injectCustomFog } from "../fogShader"; import { globalFogUniforms } from "../globalFogUniforms"; import { injectInteriorLighting } from "../interiorMaterial"; -/** - * Lightmap intensity multiplier. - * Lightmaps contain baked lighting from interior-specific lights only - * (not scene sun/ambient - that's applied in real-time). - * - * Three.js's BRDF_Lambert divides by PI for energy conservation, but Torque - * (2001) used simple multiplication: base_texture * lightmap in gamma space. - * We multiply by PI to cancel out Three.js's division. - */ -const LIGHTMAP_INTENSITY = Math.PI; - /** * Load a .gltf file that was converted from a .dif, used for "interior" models. */ @@ -46,6 +35,8 @@ function InteriorTexture({ material?: Material; lightMap?: Texture | null; }) { + const debugContext = useDebug(); + const debugMode = debugContext?.debugMode ?? false; const url = textureToUrl(materialName); const texture = useTexture(url, (texture) => setupColor(texture)); @@ -54,34 +45,54 @@ function InteriorTexture({ const flagNames = new Set(material?.userData?.flag_names ?? []); const isSelfIlluminating = flagNames.has("SelfIlluminating"); + // Check for SurfaceOutsideVisible flag (surfaces that receive scene ambient light) + const surfaceFlagNames = new Set( + material?.userData?.surface_flag_names ?? [], + ); + const isSurfaceOutsideVisible = surfaceFlagNames.has("SurfaceOutsideVisible"); + // Inject volumetric fog and lighting multipliers into materials - const onBeforeCompile = useCallback((shader: any) => { - injectCustomFog(shader, globalFogUniforms); - injectInteriorLighting(shader); - }, []); + // NOTE: This hook must be called unconditionally (before any early returns) + const onBeforeCompile = useCallback( + (shader: any) => { + injectCustomFog(shader, globalFogUniforms); + injectInteriorLighting(shader, { + surfaceOutsideVisible: isSurfaceOutsideVisible, + debugMode, + }); + }, + [isSurfaceOutsideVisible, debugMode], + ); + + // Key includes shader-affecting props to force recompilation when they change + // (r3f doesn't reactively recompile shaders on prop changes) + const materialKey = `${isSurfaceOutsideVisible}-${debugMode}`; // Self-illuminating materials are fullbright (unlit), no lightmap if (isSelfIlluminating) { return ( ); } - // Use MeshLambertMaterial for diffuse-only lighting (matches Tribes 2's GL pipeline) - // Interiors respond to scene sun + ambient (from Sky object) in real-time - // Lightmaps contain baked lighting from interior-specific lights only - // DIF files are reusable across missions with different sun settings + // MeshLambertMaterial for diffuse-only lighting (matches Tribes 2's GL pipeline) + // Shader modifications in onBeforeCompile: + // - Outside surfaces (SurfaceOutsideVisible): scene lighting + additive lightmap + // - Inside surfaces (ZoneInside): additive lightmap only, no scene lighting + // Lightmap intensity is handled in the shader, not via material prop + // toneMapped={false} to match Torque's direct output (no HDR tone mapping) + // Using FrontSide (default) - normals are fixed in io_dif Blender export return ( ); @@ -154,7 +165,8 @@ function InteriorMesh({ node }: { node: Mesh }) { export const InteriorModel = memo( ({ interiorFile }: { interiorFile: string }) => { const { nodes } = useInterior(interiorFile); - const { debugMode } = useDebug(); + const debugContext = useDebug(); + const debugMode = debugContext?.debugMode ?? false; return ( @@ -186,7 +198,8 @@ function InteriorPlaceholder({ } function DebugInteriorPlaceholder({ label }: { label?: string }) { - const { debugMode } = useDebug(); + const debugContext = useDebug(); + const debugMode = debugContext?.debugMode ?? false; return debugMode ? : null; } diff --git a/src/components/SettingsProvider.tsx b/src/components/SettingsProvider.tsx index 1a136473..8dadea50 100644 --- a/src/components/SettingsProvider.tsx +++ b/src/components/SettingsProvider.tsx @@ -94,7 +94,7 @@ export function SettingsProvider({ children }: { children: ReactNode }) { [speedMultiplier, setSpeedMultiplier], ); - // Read persisted settings from localStoarge. + // Read persisted settings from localStorage. useEffect(() => { let savedSettings: PersistedSettings = {}; try { diff --git a/src/components/Sky.tsx b/src/components/Sky.tsx index d75a7835..b387cb96 100644 --- a/src/components/Sky.tsx +++ b/src/components/Sky.tsx @@ -100,7 +100,10 @@ function SkyBoxTexture({ // For direction vector (horizontal, y), y / horizontal = height / skyBoxPtX // At the fog boundary: y / sqrt(1-y^2) = 60 / skyBoxPtX // Solving for y: y = 60 / sqrt(skyBoxPtX^2 + 60^2) - return HORIZON_FOG_HEIGHT / Math.sqrt(skyBoxPtX * skyBoxPtX + HORIZON_FOG_HEIGHT * HORIZON_FOG_HEIGHT); + return ( + HORIZON_FOG_HEIGHT / + Math.sqrt(skyBoxPtX * skyBoxPtX + HORIZON_FOG_HEIGHT * HORIZON_FOG_HEIGHT) + ); }, [fogState]); return ( @@ -330,7 +333,10 @@ function SolidColorSky({ if (!fogState) return 0.18; const mRadius = fogState.visibleDistance * 0.95; const skyBoxPtX = mRadius / Math.sqrt(3); - return HORIZON_FOG_HEIGHT / Math.sqrt(skyBoxPtX * skyBoxPtX + HORIZON_FOG_HEIGHT * HORIZON_FOG_HEIGHT); + return ( + HORIZON_FOG_HEIGHT / + Math.sqrt(skyBoxPtX * skyBoxPtX + HORIZON_FOG_HEIGHT * HORIZON_FOG_HEIGHT) + ); }, [fogState]); return ( diff --git a/src/components/Sun.tsx b/src/components/Sun.tsx index f055ce8f..b3d5571a 100644 --- a/src/components/Sun.tsx +++ b/src/components/Sun.tsx @@ -67,8 +67,8 @@ export function Sun({ object }: { object: TorqueObject }) { shadow-camera-bottom={-shadowCameraSize} shadow-camera-near={100} shadow-camera-far={12000} - shadow-bias={-0.0003} - shadow-normalBias={0.5} + shadow-bias={-0.00001} + shadow-normalBias={0.4} /> {/* Ambient fill light - prevents pure black shadows */} diff --git a/src/components/TerrainBlock.tsx b/src/components/TerrainBlock.tsx index 26ac7af7..94af9dc6 100644 --- a/src/components/TerrainBlock.tsx +++ b/src/components/TerrainBlock.tsx @@ -2,13 +2,15 @@ import { memo, useMemo, useRef, useState } from "react"; import { useFrame, useThree } from "@react-three/fiber"; import { useQuery } from "@tanstack/react-query"; import { + BufferAttribute, + BufferGeometry, DataTexture, + Float32BufferAttribute, FloatType, LinearFilter, NearestFilter, NoColorSpace, ClampToEdgeWrapping, - PlaneGeometry, RedFormat, RepeatWrapping, UnsignedByteType, @@ -28,6 +30,114 @@ const TERRAIN_SIZE = 256; const LIGHTMAP_SIZE = 512; // Match Tribes 2's 512x512 lightmap const HEIGHT_SCALE = 2048; // Matches displacementScale for terrain +/** + * Create terrain geometry with Torque-style alternating diagonal triangulation. + * + * Torque splits each grid square into two triangles, but alternates the diagonal + * direction in a checkerboard pattern: ((x ^ y) & 1) == 0 determines Split45. + * + * - Split45 (/): diagonal from (x,y) to (x+1,y+1) - bottom-left to top-right + * - Split135 (\): diagonal from (x+1,y) to (x,y+1) - bottom-right to top-left + * + * This creates more accurate terrain, especially on ridges and peaks where the + * zigzag pattern of alternating triangles better represents the heightmap data. + * + * Geometry is created in X-Y plane (like PlaneGeometry) then rotated to match + * terrain orientation. + */ +function createTerrainGeometry(size: number, segments: number): BufferGeometry { + const geometry = new BufferGeometry(); + const vertexCount = (segments + 1) * (segments + 1); + const positions = new Float32Array(vertexCount * 3); + const normals = new Float32Array(vertexCount * 3); + const uvs = new Float32Array(vertexCount * 2); + + // Pre-allocate index buffer: segments² squares × 2 triangles × 3 indices + // Use Uint32Array since vertex count (257² = 66049) exceeds Uint16 max (65535) + const indexCount = segments * segments * 6; + const indices = new Uint32Array(indexCount); + let indexOffset = 0; + + const segmentSize = size / segments; + + // Create vertices in X-Y plane (same as PlaneGeometry) + // PlaneGeometry goes from top-left to bottom-right with UVs 0→1 + // X: -size/2 to +size/2 (left to right) + // Y: +size/2 to -size/2 (top to bottom in initial X-Y plane) + for (let row = 0; row <= segments; row++) { + for (let col = 0; col <= segments; col++) { + const idx = row * (segments + 1) + col; + + // Position in X-Y plane (Z=0), centered at origin + positions[idx * 3] = col * segmentSize - size / 2; // X: -size/2 to +size/2 + positions[idx * 3 + 1] = size / 2 - row * segmentSize; // Y: +size/2 to -size/2 + positions[idx * 3 + 2] = 0; // Z: 0 (will be displaced after rotation) + + // Default normal pointing +Z (out of plane, will become +Y after rotation) + normals[idx * 3] = 0; + normals[idx * 3 + 1] = 0; + normals[idx * 3 + 2] = 1; + + // UV coordinates (0 to 1), matching PlaneGeometry + uvs[idx * 2] = col / segments; + uvs[idx * 2 + 1] = 1 - row / segments; // Flip V so row 0 is at V=1 + } + } + + // Create triangle indices with Torque-style alternating diagonals + // Using CCW winding for front face (Three.js default) + for (let row = 0; row < segments; row++) { + for (let col = 0; col < segments; col++) { + // In this layout (Y decreasing with row): + // a---b (row) + // | | + // c---d (row+1) + const a = row * (segments + 1) + col; + const b = a + 1; + const c = (row + 1) * (segments + 1) + col; + const d = c + 1; + + // Torque's split decision: ((x ^ y) & 1) == 0 means Split45 + const split45 = ((col ^ row) & 1) === 0; + + if (split45) { + // Split45: diagonal from a to d (top-left to bottom-right in screen space) + // Triangle 1: a, c, d (CCW from front) + // Triangle 2: a, d, b (CCW from front) + indices[indexOffset++] = a; + indices[indexOffset++] = c; + indices[indexOffset++] = d; + indices[indexOffset++] = a; + indices[indexOffset++] = d; + indices[indexOffset++] = b; + } else { + // Split135: diagonal from b to c (top-right to bottom-left in screen space) + // Triangle 1: a, c, b (CCW from front) + // Triangle 2: b, c, d (CCW from front) + indices[indexOffset++] = a; + indices[indexOffset++] = c; + indices[indexOffset++] = b; + indices[indexOffset++] = b; + indices[indexOffset++] = c; + indices[indexOffset++] = d; + } + } + } + + geometry.setIndex(new BufferAttribute(indices, 1)); + geometry.setAttribute("position", new Float32BufferAttribute(positions, 3)); + geometry.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + geometry.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + + // Apply same rotations as the original PlaneGeometry approach: + // rotateX(-90°) puts the X-Y plane into X-Z (horizontal), with +Y becoming up + // rotateY(-90°) rotates around Y axis to match terrain coordinate system + geometry.rotateX(-Math.PI / 2); + geometry.rotateY(-Math.PI / 2); + + return geometry; +} + /** * Displace terrain vertices on CPU and compute smooth normals from heightmap gradients. * @@ -38,7 +148,7 @@ const HEIGHT_SCALE = 2048; // Matches displacementScale for terrain * that would occur with face normals from computeVertexNormals(). */ function displaceTerrainAndComputeNormals( - geometry: PlaneGeometry, + geometry: BufferGeometry, heightMap: Uint16Array, squareSize: number, ): void { @@ -143,7 +253,81 @@ function displaceTerrainAndComputeNormals( } /** - * Generate a terrain lightmap texture with smooth normals. + * Ray-march through heightmap to determine if a point is in shadow. + * Uses the same coordinate system as the terrain geometry. + * + * @param startCol - Starting column in heightmap coordinates + * @param startRow - Starting row in heightmap coordinates + * @param startHeight - Starting height in world units + * @param lightDir - Direction TOWARD the light (normalized) + * @param squareSize - World units per heightmap cell + * @param getHeight - Function to sample terrain height at a position + * @returns 1.0 if lit, 0.0 if in shadow + */ +function rayMarchShadow( + startCol: number, + startRow: number, + startHeight: number, + lightDir: Vector3, + squareSize: number, + getHeight: (col: number, row: number) => number, +): number { + // Convert light direction to heightmap coordinate steps + // World coordinate mapping (after geometry rotations): + // - col (U) → world +Z, so lightDir.z affects col + // - row (V) → world +X, so lightDir.x affects row + // - height → world +Y, so lightDir.y affects height + const stepCol = lightDir.z / squareSize; + const stepRow = lightDir.x / squareSize; + const stepHeight = lightDir.y; + + // Normalize to step ~0.5 heightmap units per iteration for good sampling + const horizontalLen = Math.sqrt(stepCol * stepCol + stepRow * stepRow); + if (horizontalLen < 0.0001) { + // Light is nearly vertical - no self-shadowing possible + return 1.0; + } + + const stepScale = 0.5 / horizontalLen; + const dCol = stepCol * stepScale; + const dRow = stepRow * stepScale; + const dHeight = stepHeight * stepScale; + + let col = startCol; + let row = startRow; + let height = startHeight + 0.1; // Small offset to avoid self-intersection + + // March until we exit terrain bounds or confirm we're lit + const maxSteps = TERRAIN_SIZE * 3; // Enough to cross terrain diagonally + for (let i = 0; i < maxSteps; i++) { + col += dCol; + row += dRow; + height += dHeight; + + // Check if ray exited terrain bounds horizontally + if (col < 0 || col >= TERRAIN_SIZE || row < 0 || row >= TERRAIN_SIZE) { + return 1.0; // Exited terrain, not in shadow + } + + // Check if ray is above max terrain height + if (height > HEIGHT_SCALE) { + return 1.0; // Above all terrain, not in shadow + } + + // Sample terrain height at current position + const terrainHeight = getHeight(col, row); + + // If ray is below terrain surface, we're in shadow + if (height < terrainHeight) { + return 0.0; + } + } + + return 1.0; // Reached max steps, assume not in shadow +} + +/** + * Generate a terrain lightmap texture with smooth normals and ray-traced shadows. * * The key insight: banding occurs because vertex normals are computed from * discrete heightmap samples, creating discontinuities at grid boundaries. @@ -152,10 +336,14 @@ function displaceTerrainAndComputeNormals( * lightmap pixel. This produces smooth gradients because the interpolated * height surface is C0 continuous (no discontinuities). * + * Shadows are computed by ray-marching through the heightmap toward the sun, + * checking if the terrain blocks the light path. This avoids shadow acne + * because it's a geometric intersection test, not a depth buffer comparison. + * * @param heightMap - Uint16 heightmap data (256x256) * @param sunDirection - Normalized sun direction vector (points FROM sun TO scene) * @param squareSize - World units per heightmap cell - * @returns DataTexture with lighting intensity values + * @returns DataTexture with lighting intensity values (NdotL * shadow) */ function generateTerrainLightmap( heightMap: Uint16Array, @@ -163,19 +351,19 @@ function generateTerrainLightmap( squareSize: number, ): DataTexture { // Helper to get bilinearly interpolated height at any fractional position - // Supports negative and out-of-range coordinates via wrapping + // Supports negative and out-of-range coordinates via clamping for shadow rays const getInterpolatedHeight = (col: number, row: number): number => { - // Wrap to valid range using modulo (handles negative values correctly) - const wrappedCol = ((col % TERRAIN_SIZE) + TERRAIN_SIZE) % TERRAIN_SIZE; - const wrappedRow = ((row % TERRAIN_SIZE) + TERRAIN_SIZE) % TERRAIN_SIZE; + // Clamp to valid range (don't wrap for shadow rays) + const clampedCol = Math.max(0, Math.min(TERRAIN_SIZE - 1, col)); + const clampedRow = Math.max(0, Math.min(TERRAIN_SIZE - 1, row)); - const col0 = Math.floor(wrappedCol); - const row0 = Math.floor(wrappedRow); - const col1 = (col0 + 1) & (TERRAIN_SIZE - 1); // Wrap at edge - const row1 = (row0 + 1) & (TERRAIN_SIZE - 1); + const col0 = Math.floor(clampedCol); + const row0 = Math.floor(clampedRow); + const col1 = Math.min(col0 + 1, TERRAIN_SIZE - 1); + const row1 = Math.min(row0 + 1, TERRAIN_SIZE - 1); - const fx = wrappedCol - col0; - const fy = wrappedRow - row0; + const fx = clampedCol - col0; + const fy = clampedRow - row0; const h00 = heightMap[row0 * TERRAIN_SIZE + col0] / 65535; const h10 = heightMap[row0 * TERRAIN_SIZE + col1] / 65535; @@ -201,7 +389,7 @@ function generateTerrainLightmap( // Use 0.5 to sample across a reasonable distance for smooth gradients const eps = 0.5; - // Generate lightmap by computing normal from interpolated heights at each pixel + // Generate lightmap by computing normal and shadow at each pixel for (let lRow = 0; lRow < LIGHTMAP_SIZE; lRow++) { for (let lCol = 0; lCol < LIGHTMAP_SIZE; lCol++) { // Generate texel for terrain position matching Torque's relight(): @@ -210,6 +398,9 @@ function generateTerrainLightmap( const col = lCol / 2 + 0.25; const row = lRow / 2 + 0.25; + // Get height at this position for shadow ray starting point + const surfaceHeight = getInterpolatedHeight(col, row); + // Compute gradient using central differences on interpolated heights const hL = getInterpolatedHeight(col - eps, row); const hR = getInterpolatedHeight(col + eps, row); @@ -236,7 +427,23 @@ function generateTerrainLightmap( (nz / len) * lightDir.z, ); - lightmapData[lRow * LIGHTMAP_SIZE + lCol] = Math.floor(NdotL * 255); + // Ray-march to determine shadow (only if surface faces the light) + let shadow = 1.0; + if (NdotL > 0) { + shadow = rayMarchShadow( + col, + row, + surfaceHeight, + lightDir, + squareSize, + getInterpolatedHeight, + ); + } + + // Store NdotL * shadow in lightmap + lightmapData[lRow * LIGHTMAP_SIZE + lCol] = Math.floor( + NdotL * shadow * 255, + ); } } @@ -349,13 +556,12 @@ export const TerrainBlock = memo(function TerrainBlock({ const { data: terrain } = useTerrain(terrainFile); // Shared geometry for all tiles - with smooth normals computed from heightmap + // Uses Torque-style alternating diagonal triangulation for accurate terrain const sharedGeometry = useMemo(() => { if (!terrain) return null; const size = squareSize * 256; - const geometry = new PlaneGeometry(size, size, 256, 256); - geometry.rotateX(-Math.PI / 2); - geometry.rotateY(-Math.PI / 2); + const geometry = createTerrainGeometry(size, TERRAIN_SIZE); // Displace vertices on CPU and compute smooth normals displaceTerrainAndComputeNormals(geometry, terrain.heightMap, squareSize); diff --git a/src/components/TerrainTile.tsx b/src/components/TerrainTile.tsx index 63190671..1363877b 100644 --- a/src/components/TerrainTile.tsx +++ b/src/components/TerrainTile.tsx @@ -1,11 +1,5 @@ import { memo, Suspense, useCallback, useMemo } from "react"; -import { - DataTexture, - DoubleSide, - FrontSide, - MeshLambertMaterial, - type PlaneGeometry, -} from "three"; +import { type BufferGeometry, DataTexture, FrontSide } from "three"; import { useTexture } from "@react-three/drei"; import { FALLBACK_TEXTURE_URL, @@ -36,7 +30,7 @@ interface TerrainTileProps { blockSize: number; basePosition: { x: number; z: number }; textureNames: string[]; - geometry: PlaneGeometry; + geometry: BufferGeometry; displacementMap: DataTexture; visibilityMask: DataTexture; alphaTextures: DataTexture[]; @@ -122,7 +116,7 @@ function BlendedTerrainTextures({ key={materialKey} map={displacementMap} depthWrite - side={DoubleSide} + side={FrontSide} onBeforeCompile={onBeforeCompile} /> ); @@ -146,12 +140,8 @@ function TerrainMaterial({ return ( + // Geometry is already CPU-displaced, so no displacementMap needed + } > { - // PlaneGeometry is centered at origin, but Tribes 2 terrain origin is at + // Terrain geometry is centered at origin, but Tribes 2 terrain origin is at // corner. The engine always uses the default square size (8) for positioning. const geometryOffset = (DEFAULT_SQUARE_SIZE * 256) / 2; return [ @@ -195,8 +185,8 @@ export const TerrainTile = memo(function TerrainTile({ Linear conversion functions (GLSL) +const colorSpaceFunctions = /* glsl */ ` +vec3 interiorLinearToSRGB(vec3 linear) { + vec3 higher = pow(linear, vec3(1.0/2.4)) * 1.055 - 0.055; + vec3 lower = linear * 12.92; + return mix(lower, higher, step(vec3(0.0031308), linear)); +} + +vec3 interiorSRGBToLinear(vec3 srgb) { + vec3 higher = pow((srgb + 0.055) / 1.055, vec3(2.4)); + vec3 lower = srgb / 12.92; + return mix(lower, higher, step(vec3(0.04045), srgb)); +} + +// Debug grid overlay function using screen-space derivatives for sharp, anti-aliased lines +// Returns 1.0 on grid lines, 0.0 elsewhere +float debugGrid(vec2 uv, float gridSize, float lineWidth) { + vec2 scaledUV = uv * gridSize; + vec2 grid = abs(fract(scaledUV - 0.5) - 0.5) / fwidth(scaledUV); + float line = min(grid.x, grid.y); + return 1.0 - min(line / lineWidth, 1.0); +} +`; + +export function injectInteriorLighting( + shader: any, + options?: InteriorLightingOptions, +): void { + const isOutsideVisible = options?.surfaceOutsideVisible ?? false; + const isDebugMode = options?.debugMode ?? false; + + // Outside surfaces: scene lighting + lightmap + // Inside surfaces: lightmap only (no scene lighting) + shader.uniforms.useSceneLighting = { value: isOutsideVisible }; + + // Debug mode uniforms + shader.uniforms.interiorDebugMode = { value: isDebugMode }; + // Blue for outside visible, red for inside + shader.uniforms.interiorDebugColor = { + value: isOutsideVisible + ? new Vector3(0.0, 0.4, 1.0) + : new Vector3(1.0, 0.2, 0.0), }; - shader.uniforms.interiorAmbientFactor = { value: INTERIOR_LIGHTING.ambient }; - // Declare uniforms in fragment shader + // Add color space functions and uniform shader.fragmentShader = shader.fragmentShader.replace( "#include ", `#include -uniform float interiorDirectionalFactor; -uniform float interiorAmbientFactor; +${colorSpaceFunctions} +uniform bool useSceneLighting; +uniform bool interiorDebugMode; +uniform vec3 interiorDebugColor; `, ); - // Scale directional light contribution + // Disable default lightmap handling - we'll handle it in the output + // (MeshLambertMaterial doesn't use envmap/IBL, so we only need the lightmap texel) shader.fragmentShader = shader.fragmentShader.replace( - "#include ", - `#include - // Apply interior-specific lighting multipliers - reflectedLight.directDiffuse *= interiorDirectionalFactor; - reflectedLight.indirectDiffuse *= interiorAmbientFactor; -`, + "#include ", + `// Lightmap handled in custom output calculation +#ifdef USE_LIGHTMAP + vec4 lightMapTexel = texture2D( lightMap, vLightMapUv ); +#endif`, + ); + + // Override outgoingLight with Torque-style gamma-space calculation + // Using #include as a stable replacement target (it consumes outgoingLight) + shader.fragmentShader = shader.fragmentShader.replace( + "#include ", + `// Torque-style lighting: output = clamp(lighting × texture, 0, 1) in sRGB space +// Get texture in sRGB space (undo Three.js linear decode) +vec3 textureSRGB = interiorLinearToSRGB(diffuseColor.rgb); + +// Compute lighting in sRGB space +vec3 lightingSRGB = vec3(0.0); + +if (useSceneLighting) { + // Three.js computed: reflectedLight = lighting × texture_linear / PI + // Extract pure lighting: lighting = reflectedLight × PI / texture_linear + vec3 totalLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse; + vec3 safeTexLinear = max(diffuseColor.rgb, vec3(0.001)); + vec3 extractedLighting = totalLight * PI / safeTexLinear; + // NOTE: extractedLighting is ALREADY sRGB values because mission sun/ambient colors + // are sRGB values (Torque used them directly in gamma space). Three.js treats them + // as linear but the numerical values are the same. DO NOT convert to sRGB here! + // IMPORTANT: Torque clamps scene lighting to [0,1] BEFORE adding to lightmap + // (sceneLighting.cc line 1785: tmp.clamp()) + lightingSRGB = clamp(extractedLighting, 0.0, 1.0); +} + +// Add lightmap contribution (for BOTH outside and inside surfaces) +// In Torque, scene lighting is ADDED to lightmaps for outside surfaces at mission load +// (stored in .ml files). Inside surfaces only have base lightmap. Both need lightmap here. +#ifdef USE_LIGHTMAP + // Lightmap is stored as linear in Three.js (decoded from sRGB texture), convert back + lightingSRGB += interiorLinearToSRGB(lightMapTexel.rgb); +#endif +// Torque clamps the sum to [0,1] per channel (sceneLighting.cc lines 1817-1827) +lightingSRGB = clamp(lightingSRGB, 0.0, 1.0); + +// Torque formula: output = clamp(lighting × texture, 0, 1) in sRGB/gamma space +vec3 resultSRGB = clamp(lightingSRGB * textureSRGB, 0.0, 1.0); + +// Convert back to linear for Three.js output pipeline +vec3 resultLinear = interiorSRGBToLinear(resultSRGB); + +// Reassign outgoingLight before opaque_fragment consumes it +outgoingLight = resultLinear + totalEmissiveRadiance; + +#include `, + ); + + // Add debug grid overlay AFTER opaque_fragment sets gl_FragColor + // This ensures our debug visualization isn't affected by the Torque lighting calculations + shader.fragmentShader = shader.fragmentShader.replace( + "#include ", + `// Debug mode: overlay colored grid on top of normal rendering +// Blue grid = SurfaceOutsideVisible (receives scene ambient light) +// Red grid = inside surface (no scene ambient light) +#ifdef USE_MAP +if (interiorDebugMode) { + // gridSize=4 creates 4x4 grid per UV tile, lineWidth=1.5 is ~1.5 pixels wide + float gridIntensity = debugGrid(vMapUv, 4.0, 1.5); + gl_FragColor.rgb = mix(gl_FragColor.rgb, interiorDebugColor, gridIntensity * 0.1); +} +#endif + +#include `, ); } diff --git a/src/lightingConfig.ts b/src/lightingConfig.ts index d5379aad..5753d948 100644 --- a/src/lightingConfig.ts +++ b/src/lightingConfig.ts @@ -14,15 +14,34 @@ * - ambient: Multiplier for ambient light contribution (affects shadow darkness) */ -export const TERRAIN_LIGHTING = { - directional: 4, - ambient: 1.5, -}; +/** + * Terrain lighting is handled via custom shader in terrainMaterial.ts. + * + * The shader implements Torque's gamma-space rendering formula (terrLighting.cc): + * output = clamp(lighting × texture, 0, 1) + * + * Where: + * - lighting = clamp(ambient + NdotL × shadowFactor × sunColor, 0, 1) + * - NdotL from pre-computed terrain lightmap (smooth per-pixel normals) + * - shadowFactor from Three.js real-time shadow maps + * + * No intensity multipliers are needed - the shader uses mission sun/ambient + * colors directly and performs gamma-space math to match Torque's output. + */ -export const INTERIOR_LIGHTING = { - directional: 3, - ambient: 1, -}; +/** + * Interior lighting is handled via custom shader in interiorMaterial.ts. + * + * The shader implements Torque's gamma-space rendering formula: + * output = clamp((scene_lighting + lightmap) × texture, 0, 1) + * + * Where: + * - Outside surfaces (SurfaceOutsideVisible): scene lighting + lightmap + * - Inside surfaces: lightmap only + * + * No intensity multipliers are needed - the shader extracts lighting values + * from Three.js and performs gamma-space math to match Torque's output. + */ export const SHAPE_LIGHTING = { directional: 1, diff --git a/src/terrainMaterial.ts b/src/terrainMaterial.ts index 34523709..05137320 100644 --- a/src/terrainMaterial.ts +++ b/src/terrainMaterial.ts @@ -1,30 +1,56 @@ /** - * Terrain material shader modifications. - * Handles multi-layer texture blending for Tribes 2 terrain rendering. + * Terrain material shader modifications for MeshLambertMaterial. + * + * Matches Torque's terrain rendering formula (terrLighting.cc + blender.cc): + * output = clamp(lighting × texture, 0, 1) + * + * Where: + * - lighting = clamp(ambient + NdotL × shadowFactor × sunColor, 0, 1) + * - NdotL and terrain self-shadows from pre-computed lightmap (ray-traced) + * - shadowFactor from Three.js real-time shadow maps (for building/object shadows) + * - All operations in sRGB/gamma space + * + * Key insights from Torque source (terrLighting.cc:471-483): + * 1. Lightmap bakes: ambient + max(0, N·L) × sunColor for lit areas + * 2. Shadowed areas get only ambient + * 3. Mission sun/ambient colors ARE sRGB values - Torque used them directly + * 4. Final output = lightmap × texture, all in gamma space */ -import { TERRAIN_LIGHTING } from "./lightingConfig"; - // Terrain and texture dimensions (must match TerrainBlock.tsx constants) const TERRAIN_SIZE = 256; // Terrain grid size in squares const LIGHTMAP_SIZE = 512; // Lightmap texture size (2 pixels per terrain square) -// Texture brightness scale to prevent clipping and preserve shadow visibility -const TEXTURE_BRIGHTNESS_SCALE = 0.7; - // Detail texture tiling factor. -// Torque uses world-space generation: U = worldX * (62.0 / textureWidth) -// For 256px texture across 2048 world units, this gives ~496 repeats mathematically. -// However, this appears visually excessive. Using a moderate multiplier relative -// to base texture tiling (32x) - detail should be finer but not overwhelming. const DETAIL_TILING = 64.0; // Distance at which detail texture fully fades out (in world units) -// Torque: zeroDetailDistance = (squareSize * worldToScreenScale) / 64 - squareSize/2 -// For squareSize=8 and typical worldToScreenScale (~800), this gives ~96 units. -// Using 150 for a slightly more gradual fade. const DETAIL_FADE_DISTANCE = 150.0; +// sRGB <-> Linear conversion functions (GLSL) +const colorSpaceFunctions = /* glsl */ ` +vec3 terrainLinearToSRGB(vec3 linear) { + vec3 higher = pow(linear, vec3(1.0/2.4)) * 1.055 - 0.055; + vec3 lower = linear * 12.92; + return mix(lower, higher, step(vec3(0.0031308), linear)); +} + +vec3 terrainSRGBToLinear(vec3 srgb) { + vec3 higher = pow((srgb + 0.055) / 1.055, vec3(2.4)); + vec3 lower = srgb / 12.92; + return mix(lower, higher, step(vec3(0.04045), srgb)); +} + +// Debug grid overlay using screen-space derivatives for sharp, anti-aliased lines +// Returns 1.0 on grid lines, 0.0 elsewhere +float terrainDebugGrid(vec2 uv, float gridSize, float lineWidth) { + vec2 scaledUV = uv * gridSize; + vec2 grid = abs(fract(scaledUV - 0.5) - 0.5) / fwidth(scaledUV); + float line = min(grid.x, grid.y); + return 1.0 - min(line / lineWidth, 1.0); +} +`; + export function updateTerrainTextureShader({ shader, baseTextures, @@ -46,12 +72,6 @@ export function updateTerrainTextureShader({ }) { const layerCount = baseTextures.length; - // Add terrain lighting multiplier uniforms - shader.uniforms.terrainDirectionalFactor = { - value: TERRAIN_LIGHTING.directional, - }; - shader.uniforms.terrainAmbientFactor = { value: TERRAIN_LIGHTING.ambient }; - baseTextures.forEach((tex, i) => { shader.uniforms[`albedo${i}`] = { value: tex }; }); @@ -101,11 +121,9 @@ vTerrainWorldPos = (modelMatrix * vec4(transformed, 1.0)).xyz;`, ); } - // Declare our uniforms at the top of the fragment shader + // Declare our uniforms and color space functions at the top of the fragment shader shader.fragmentShader = ` -uniform float terrainDirectionalFactor; -uniform float terrainAmbientFactor; uniform sampler2D albedo0; uniform sampler2D albedo1; uniform sampler2D albedo2; @@ -135,14 +153,10 @@ varying vec3 vTerrainWorldPos;` : "" } -// Wireframe edge detection for debug mode -float getWireframe(vec2 uv, float gridSize, float lineWidth) { - vec2 gridUv = uv * gridSize; - vec2 grid = abs(fract(gridUv - 0.5) - 0.5); - vec2 deriv = fwidth(gridUv); - vec2 edge = smoothstep(vec2(0.0), deriv * lineWidth, grid); - return 1.0 - min(edge.x, edge.y); -} +${colorSpaceFunctions} + +// Global variable to store shadow factor from RE_Direct for use in output calculation +float terrainShadowFactor = 1.0; ` + shader.fragmentShader; if (visibilityMask) { @@ -164,7 +178,7 @@ float getWireframe(vec2 uv, float gridSize, float lineWidth) { shader.fragmentShader = shader.fragmentShader.replace( "#include ", ` - // Sample base albedo layers (sRGB textures auto-decoded to linear) + // Sample base albedo layers (sRGB textures auto-decoded to linear by Three.js) vec2 baseUv = vMapUv; vec3 c0 = texture2D(albedo0, baseUv * vec2(tiling0)).rgb; ${ @@ -231,83 +245,114 @@ float getWireframe(vec2 uv, float gridSize, float lineWidth) { : "" } - // Apply texture color or debug mode solid gray - if (debugMode > 0.5) { - // Solid gray to visualize lighting only (without texture influence) - diffuseColor.rgb = vec3(0.5); - } else { - // Scale texture to prevent clipping, preserving shadow visibility - diffuseColor.rgb = textureColor * ${TEXTURE_BRIGHTNESS_SCALE}; - } + // Store blended texture in diffuseColor (still in linear space here) + // We'll convert to sRGB in the output calculation + diffuseColor.rgb = textureColor; `, ); - // When lightmap is available, replace vertex normal-based lighting with smooth lightmap - // This eliminates banding by using pre-computed per-pixel NdotL values + // When lightmap is available, override RE_Direct to extract shadow factor + // We don't compute lighting here - just capture the shadow for use in output if (lightmap) { - // Override the RE_Direct_Lambert function to use our lightmap NdotL - // instead of computing dotNL from vertex normals shader.fragmentShader = shader.fragmentShader.replace( "#include ", `#include -// Override RE_Direct to use terrain lightmap for smooth NdotL +// Override RE_Direct to extract shadow factor for Torque-style gamma-space lighting #undef RE_Direct -void RE_Direct_TerrainLightmap( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) { - - // Sample pre-computed terrain lightmap (smooth NdotL values) - // Add +0.5 texel offset to align GPU texel-center sampling with Torque's corner sampling - vec2 lightmapUv = vMapUv + vec2(0.5 / ${LIGHTMAP_SIZE}.0); - float lightmapNdotL = texture2D(terrainLightmap, lightmapUv).r; - - // Use lightmap NdotL instead of dot(geometryNormal, directLight.direction) - // directLight.color already has shadow factor applied from getShadow() - // Apply terrain-specific directional intensity multiplier - vec3 directIrradiance = lightmapNdotL * directLight.color * terrainDirectionalFactor; - - // Debug mode: visualize raw lightmap values (no textures) - if (debugMode > 0.5) { - reflectedLight.directDiffuse = directIrradiance; - } else { - reflectedLight.directDiffuse += directIrradiance * BRDF_Lambert( material.diffuseColor ); - } +void RE_Direct_TerrainShadow( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) { + // directLight.color = sunColor * shadowFactor (shadow already applied by Three.js) + // Extract shadow factor by comparing to original sun color + #if ( NUM_DIR_LIGHTS > 0 ) + vec3 originalSunColor = directionalLights[0].color; + float sunMax = max(max(originalSunColor.r, originalSunColor.g), originalSunColor.b); + float shadowedMax = max(max(directLight.color.r, directLight.color.g), directLight.color.b); + terrainShadowFactor = clamp(shadowedMax / max(sunMax, 0.001), 0.0, 1.0); + #endif + // Don't add to reflectedLight - we'll compute lighting in gamma space at output } -#define RE_Direct RE_Direct_TerrainLightmap +#define RE_Direct RE_Direct_TerrainShadow `, ); - // Override lights_fragment_begin to fix hemisphere light irradiance calculation - // The default uses geometryNormal which causes banding + // Override lights_fragment_begin to skip indirect diffuse calculation + // We'll handle ambient in gamma space shader.fragmentShader = shader.fragmentShader.replace( "#include ", `#include -// Fix: Recalculate irradiance without using vertex normals (causes banding) -// Use flat upward normal for hemisphere/light probe calculations +// Clear indirect diffuse - we'll compute ambient in gamma space #if defined( RE_IndirectDiffuse ) -{ - vec3 flatNormal = vec3(0.0, 1.0, 0.0); - irradiance = getAmbientLightIrradiance( ambientLightColor ); - #if defined( USE_LIGHT_PROBES ) - irradiance += getLightProbeIrradiance( lightProbe, flatNormal ); - #endif - #if ( NUM_HEMI_LIGHTS > 0 ) - for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) { - irradiance += getHemisphereLightIrradiance( hemisphereLights[i], flatNormal ); - } - #endif -} + irradiance = vec3(0.0); #endif +`, + ); + + // Clear the indirect diffuse after lights_fragment_end + shader.fragmentShader = shader.fragmentShader.replace( + "#include ", + `#include + // Clear Three.js lighting - we compute everything in gamma space + reflectedLight.directDiffuse = vec3(0.0); + reflectedLight.indirectDiffuse = vec3(0.0); `, ); } - // Scale ambient/indirect lighting to darken shadows on terrain + // Replace opaque_fragment with Torque-style gamma-space calculation shader.fragmentShader = shader.fragmentShader.replace( - "#include ", - `#include - // Scale indirect (ambient) light to increase shadow contrast on terrain - reflectedLight.indirectDiffuse *= terrainAmbientFactor; -`, + "#include ", + `// Torque-style terrain lighting: output = clamp(lighting × texture, 0, 1) in sRGB space +{ + // Get texture in sRGB space (undo Three.js linear decode) + vec3 textureSRGB = terrainLinearToSRGB(diffuseColor.rgb); + + ${ + lightmap + ? ` + // Sample terrain lightmap for smooth NdotL + vec2 lightmapUv = vMapUv + vec2(0.5 / ${LIGHTMAP_SIZE}.0); + float lightmapNdotL = texture2D(terrainLightmap, lightmapUv).r; + + // Get sun and ambient colors from Three.js lights (these ARE sRGB values from mission file) + // Three.js interprets them as linear, but the numerical values are preserved + #if ( NUM_DIR_LIGHTS > 0 ) + vec3 sunColorSRGB = directionalLights[0].color; + #else + vec3 sunColorSRGB = vec3(0.7); + #endif + vec3 ambientColorSRGB = ambientLightColor; + + // Torque formula (terrLighting.cc:471-483): + // lighting = ambient + NdotL * shadowFactor * sunColor + // Clamp lighting to [0,1] before multiplying by texture + vec3 lightingSRGB = clamp(ambientColorSRGB + lightmapNdotL * terrainShadowFactor * sunColorSRGB, 0.0, 1.0); + ` + : ` + // No lightmap - use simple ambient lighting + vec3 lightingSRGB = ambientLightColor; + ` + } + + // Torque formula: output = clamp(lighting × texture, 0, 1) in sRGB/gamma space + vec3 resultSRGB = clamp(lightingSRGB * textureSRGB, 0.0, 1.0); + + // Convert back to linear for Three.js output pipeline + outgoingLight = terrainSRGBToLinear(resultSRGB) + totalEmissiveRadiance; +} +#include `, + ); + + // Add debug grid overlay AFTER opaque_fragment sets gl_FragColor + shader.fragmentShader = shader.fragmentShader.replace( + "#include ", + `// Debug mode: overlay green grid matching terrain grid squares (256x256) +if (debugMode > 0.5) { + float gridIntensity = terrainDebugGrid(vMapUv, 256.0, 1.5); + vec3 gridColor = vec3(0.0, 0.8, 0.4); // Green + gl_FragColor.rgb = mix(gl_FragColor.rgb, gridColor, gridIntensity * 0.05); +} + +#include `, ); }