@needle-tools/engine
Version:
Needle Engine is a web-based runtime for 3D apps. It runs on your machine for development with great integrations into editors like Unity or Blender - and can be deployed onto any device! It is flexible, extensible and networking and XR are built-in.
577 lines • 1.69 MB
JavaScript
import { Vector2 as J, Vector3 as b, Vector4 as de, Quaternion as $, PlaneGeometry as Un, WebGLRenderer as dr, PerspectiveCamera as pe, OrthographicCamera as Pd, Scene as yi, Mesh as H, Texture as Te, Uniform$1 as zi, Color as se, ShaderMaterial as Ln, Box3 as mi, ShadowMaterial as ib, Euler as Rt, MeshStandardMaterial as ct, Box3Helper as Nw, GridHelper as tm, Object3D as M, Material as _e, Matrix3 as nb, Matrix4 as te, Layers as ro, Ray as ao, MathUtils as ms, AxesHelper as gi, MeshBasicMaterial as we, DoubleSide as _i, BufferGeometry as En, Group as to, CylinderGeometry as sb, SphereGeometry as Od, BoxGeometry as aa, SpriteMaterial as $w, Sprite as Ww, Shape as Vw, ExtrudeGeometry as Hw, Fog as ob, DirectionalLight as Yf, PointLight as im, EdgesGeometry as Gw, LineSegments as rb, LineBasicMaterial as ab, Line as Yl, BufferAttribute as ht, Raycaster as kd, Sphere as Md, ArrayCamera as qw, Plane as ir, SkinnedMesh as gs, InterleavedBufferAttribute as lb, Skeleton as Xw, Bone as Qw, Source as Yw, WebGLCubeRenderTarget as Kw, CubeCamera as Zw, AnimationClip as io, FileLoader as nm, TextureLoader as Kl, PropertyBinding as la, LinearSRGBColorSpace as xs, ShaderChunk as Wt, UniformsLib as Jw, DataTexture as sm, RGBAFormat as Rd, EquirectangularReflectionMapping as ys, SRGBColorSpace as Ss, Clock as ex, NeutralToneMapping as ca, AgXToneMapping as Td, ACESFilmicToneMapping as Ed, NoToneMapping as $h, PCFSoftShadowMap$1 as tx, BasicNodeLibrary as ix, WebGLRenderTarget as Dn, DepthTexture as cb, NearestFilter as Wh, LoopRepeat as nx, LoopOnce as Kf, AnimationMixer as om, CompressedTexture as sx, FrontSide as lo, Camera as ox, Frustum as $g, AudioListener as rx, PositionalAudio as ax, AudioLoader as Zf, EventDispatcher as rm, BackSide as Ad, MeshDepthMaterial as lx, CustomBlending as cx, MaxEquation as hx, AmbientLight as dx, HemisphereLight as ux, AlwaysStencilFunc as fx, GreaterEqualStencilFunc as px, NotEqualStencilFunc as mx, GreaterStencilFunc as gx, LessEqualStencilFunc as yx, EqualStencilFunc as _x, LessStencilFunc as bx, NeverStencilFunc as Wg, InvertStencilOp as vx, DecrementWrapStencilOp as wx, IncrementWrapStencilOp as xx, DecrementStencilOp as Sx, IncrementStencilOp as Cx, ReplaceStencilOp as Px, ZeroStencilOp as Ox, KeepStencilOp as kx, RawShaderMaterial as hb, GLSL3 as Mx, AlwaysDepth as Rx, GreaterEqualDepth as Tx, GreaterDepth as Ex, LessEqualDepth as Ax, LessDepth as Ix, NotEqualDepth as Lx, EqualDepth as Dx, BatchedMesh as Vg, MeshPhysicalMaterial as Jf, LinearFilter as Vh, UnsignedByteType as jx, RingGeometry as Bx, Line3 as Fx, AdditiveBlending as db, BoxHelper as zx, SpotLight as Ux, DirectionalLightHelper as Nx, CameraHelper as $x, LOD as Wx, Triangle as Vx, NormalBlending as Hx, ReinhardToneMapping as am, LinearToneMapping as lm, HalfFloatType as Fu, VideoTexture as Gx, CubeUVReflectionMapping as ub, CubeTexture as qx, CompressedCubeTexture as Xx, EquirectangularRefractionMapping as Qx, VectorKeyframeTrack as Yx, QuaternionKeyframeTrack as Kx, Audio as Zx, ShaderLib as Hh, UniformsUtils as fb, MirroredRepeatWrapping as Hg, MeshNormalMaterial as Jx, AudioContext as eS, PMREMGenerator$1 as tS } from "./three-BRSLmpyi.js";
import { createLoaders as cm, getRaycastMesh as pb, LODsManager as Eo, NEEDLE_progressive as We, addDracoAndKTX2Loaders as iS, configureLoader as nS, setKTX2TranscoderLocation as sS, setDracoDecoderLocation as oS } from "./gltf-progressive-DXRy9EQz.js";
import { GroundedSkybox as ha, Font as rS, TextGeometry as aS, FontLoader as lS, GLTFLoader as Cs, TransformControlsGizmo as mb, EXRLoader as hm, RGBELoader as gb, Stats as cS, nodeFrame as hS, OrbitControls as yb, PositionalAudioHelper as dS, HorizontalBlurShader as uS, VerticalBlurShader as fS, GLTFExporter as _b, strToU8 as bb, zipSync as pS, XRControllerModelFactory as mS, XRHandMeshModel as gS, Line2 as yS, LineGeometry as _S, LineMaterial as bS, TransformControls as vS, InteractiveGroup as wS, HTMLMesh as xS, VertexNormalsHelper as SS, OBJLoader as dm, FBXLoader as vb, mergeVertices as CS } from "./three-examples-BihZ_R96.js";
import { fetchProfile as PS, MotionController as OS, $70d766613f57b014$export$2e2bcd8739ae039 as Gg, ByteBuffer as kS, v5 as qg, md5 as Xg, SIZE_PREFIX_LENGTH as wb, Builder as um, createNoise4D as MS, Matrix4 as zu, BatchedParticleRenderer as RS, ParticleSystem as TS, RenderMode as rs, ConstantColor as ES, Vector4 as AS, ConstantValue as IS, TrailParticle as Qg, WorkerBase as LS, MeshBVH as DS } from "./vendor-p_xp9KuJ.js";
import { __webpack_exports__default as Ce, __webpack_exports__Text as xb, __webpack_exports__Block as Sb, __webpack_exports__update as jS, SimpleStateBehavior as BS, __webpack_exports__Inline as Uu, __webpack_exports__FontLibrary as Yg, ThreeMeshUI as Kg } from "./three-mesh-ui-gqAXlGNB.js";
import { EffectAttribute as FS } from "./postprocessing-D9jDHD0U.js";
const Nu = /* @__PURE__ */ new Map();
function an(s = globalThis.location?.hostname) {
if (Nu.has(s)) return Nu.get(s);
const e = /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})|localhost/.test(s);
return Nu.set(s, e), e === !0;
}
function zS() {
return window.location.hostname.includes("glitch.me");
}
const US = '<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 160 187.74"><defs><linearGradient id="a" x1="89.64" y1="184.81" x2="90.48" y2="21.85" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#62d399"/><stop offset=".51" stop-color="#acd842"/><stop offset=".9" stop-color="#d7db0a"/></linearGradient><linearGradient id="b" x1="69.68" y1="178.9" x2="68.08" y2="16.77" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#0ba398"/><stop offset=".5" stop-color="#4ca352"/><stop offset="1" stop-color="#76a30a"/></linearGradient><linearGradient id="c" x1="36.6" y1="152.17" x2="34.7" y2="84.19" gradientUnits="userSpaceOnUse"><stop offset=".19" stop-color="#36a382"/><stop offset=".54" stop-color="#49a459"/><stop offset="1" stop-color="#76a30b"/></linearGradient><linearGradient id="d" x1="15.82" y1="153.24" x2="18" y2="90.86" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#267880"/><stop offset=".51" stop-color="#457a5c"/><stop offset="1" stop-color="#717516"/></linearGradient><linearGradient id="e" x1="135.08" y1="135.43" x2="148.93" y2="63.47" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#b0d939"/><stop offset="1" stop-color="#eadb04"/></linearGradient><linearGradient id="f" x1="-4163.25" y1="2285.12" x2="-4160.81" y2="2215.34" gradientTransform="rotate(20 4088.49 13316.712)" gradientUnits="userSpaceOnUse"><stop offset=".17" stop-color="#74af52"/><stop offset=".48" stop-color="#99be32"/><stop offset="1" stop-color="#c0c40a"/></linearGradient><symbol id="g" viewBox="0 0 160 187.74"><path style="fill:url(#a)" d="M79.32 36.98v150.76L95 174.54l6.59-156.31-22.27 18.75z"/><path style="fill:url(#b)" d="M79.32 36.98 57.05 18.23l6.59 156.31 15.68 13.2V36.98z"/><path style="fill:url(#c)" d="m25.19 104.83 8.63 49.04 12.5-14.95-2.46-56.42-18.67 22.33z"/><path style="fill:url(#d)" d="M25.19 104.83 0 90.24l16.97 53.86 16.85 9.77-8.63-49.04z"/><path style="fill:#9c3" d="M43.86 82.5 18.69 67.98 0 90.24l25.18 14.59L43.86 82.5z"/><path style="fill:url(#e)" d="m134.82 78.69-9.97 56.5 15.58-9.04L160 64.1l-25.18 14.59z"/><path style="fill:url(#f)" d="m134.82 78.69-18.68-22.33-2.86 65 11.57 13.83 9.97-56.5z"/><path style="fill:#ffe113" d="m160 64.1-18.69-22.26-25.17 14.52 18.67 22.33L160 64.1z"/><path style="fill:#f3e600" d="M101.59 18.23 79.32 0 57.05 18.23l22.27 18.75 22.27-18.75z"/></symbol></defs><use width="160" height="187.74" xlink:href="#g"/></svg>', NS = btoa(US), $S = "data:image/svg+xml;base64," + NS, Cb = $S, WS = `<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'> <svg clip-rule="evenodd" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="2" version="1.1" viewBox="0 0 1014 282" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m665.95 132.73v44.88l-10.56-8.4c-0.8-0.64-1.2-1.44-1.2-2.4v-32.4c0-6.48-4.12-9.72-12.36-9.72-2.16 0-4.18 0.4-6.06 1.2s-3.54 1.8-4.98 3-2.56 2.5-3.36 3.9-1.2 2.7-1.2 3.9v40.92l-10.68-8.4c-0.72-0.64-1.08-1.44-1.08-2.4v-53.76l10.92 8.52c0.32 0.24 0.56 0.44 0.72 0.6s0.36 0.32 0.6 0.48c0.96-1.2 2.14-2.28 3.54-3.24s2.92-1.76 4.56-2.4 3.34-1.14 5.1-1.5 3.44-0.54 5.04-0.54c1.44 0 2.92 0.04 4.44 0.12s2.84 0.28 3.96 0.6c4.56 1.12 7.8 3.12 9.72 6s2.88 6.56 2.88 11.04z" fill-rule="nonzero"/> </g> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m732.38 146.05c0 0.88 0.02 1.5 0.06 1.86s-0.02 0.98-0.18 1.86h-7.08c-2.08 0-4.44-0.02-7.08-0.06s-5.36-0.06-8.16-0.06h-22.08c0 2.88 0.56 5.36 1.68 7.44s2.6 3.8 4.44 5.16 3.94 2.36 6.3 3 4.74 0.96 7.14 0.96c3.04 0 5.9-0.76 8.58-2.28s4.94-3.52 6.78-6c0.64 0.56 1.54 1.48 2.7 2.76s2.94 3.2 5.34 5.76c-2.8 3.36-6.22 6.02-10.26 7.98s-8.42 2.94-13.14 2.94-8.92-0.64-12.84-1.92-7.32-3.24-10.2-5.88-5.12-5.98-6.72-10.02-2.4-8.82-2.4-14.34c0-4.96 0.66-9.42 1.98-13.38s3.22-7.32 5.7-10.08 5.44-4.9 8.88-6.42 7.32-2.28 11.64-2.28c5.76 0 10.52 0.88 14.28 2.64s6.72 4.16 8.88 7.2 3.66 6.54 4.5 10.5 1.26 8.18 1.26 12.66zm-29.4-22.8c-2.16 0.16-4.16 0.72-6 1.68s-3.42 2.2-4.74 3.72-2.36 3.28-3.12 5.28-1.14 4.12-1.14 6.36h33.12c0-2-0.22-4.06-0.66-6.18s-1.3-4.02-2.58-5.7-3.1-3.02-5.46-4.02-5.5-1.38-9.42-1.14z" fill-rule="nonzero"/> </g> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m795.93 146.05c0 0.88 0.02 1.5 0.06 1.86s-0.02 0.98-0.18 1.86h-7.08c-2.08 0-4.44-0.02-7.08-0.06s-5.36-0.06-8.16-0.06h-22.08c0 2.88 0.56 5.36 1.68 7.44s2.6 3.8 4.44 5.16 3.94 2.36 6.3 3 4.74 0.96 7.14 0.96c3.04 0 5.9-0.76 8.58-2.28s4.94-3.52 6.78-6c0.64 0.56 1.54 1.48 2.7 2.76s2.94 3.2 5.34 5.76c-2.8 3.36-6.22 6.02-10.26 7.98s-8.42 2.94-13.14 2.94-8.92-0.64-12.84-1.92-7.32-3.24-10.2-5.88-5.12-5.98-6.72-10.02-2.4-8.82-2.4-14.34c0-4.96 0.66-9.42 1.98-13.38s3.22-7.32 5.7-10.08 5.44-4.9 8.88-6.42 7.32-2.28 11.64-2.28c5.76 0 10.52 0.88 14.28 2.64s6.72 4.16 8.88 7.2 3.66 6.54 4.5 10.5 1.26 8.18 1.26 12.66zm-29.4-22.8c-2.16 0.16-4.16 0.72-6 1.68s-3.42 2.2-4.74 3.72-2.36 3.28-3.12 5.28-1.14 4.12-1.14 6.36h33.12c0-2-0.22-4.06-0.66-6.18s-1.3-4.02-2.58-5.7-3.1-3.02-5.46-4.02-5.5-1.38-9.42-1.14z" fill-rule="nonzero"/> </g> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m858.57 97.21c0.64 0.48 0.96 1.16 0.96 2.04v74.88c-0.08 1.04-0.12 2.12-0.12 3.24-1.84-1.52-3.56-2.92-5.16-4.2-1.36-1.12-2.66-2.18-3.9-3.18s-2.06-1.66-2.46-1.98c-1.76 2.48-4.26 4.44-7.5 5.88s-7.02 2.16-11.34 2.16c-3.84 0-7.4-0.7-10.68-2.1s-6.14-3.44-8.58-6.12-4.34-5.94-5.7-9.78-2.04-8.16-2.04-12.96c0-4.32 0.78-8.34 2.34-12.06s3.6-6.92 6.12-9.6 5.38-4.78 8.58-6.3 6.48-2.28 9.84-2.28c2.56 0 4.82 0.22 6.78 0.66s3.68 1.06 5.16 1.86 2.78 1.74 3.9 2.82 2.16 2.22 3.12 3.42v-35.04l10.68 8.64zm-27.96 67.92c3.6 0 6.52-0.68 8.76-2.04s3.98-3.06 5.22-5.1 2.1-4.22 2.58-6.54 0.72-4.44 0.72-6.36v-1.2c0-1.12-0.22-2.7-0.66-4.74s-1.28-4.06-2.52-6.06-3-3.7-5.28-5.1-5.22-2.02-8.82-1.86c-3.44 0-6.26 0.74-8.46 2.22s-3.96 3.26-5.28 5.34-2.24 4.2-2.76 6.36-0.78 3.92-0.78 5.28c0 1.84 0.24 3.92 0.72 6.24s1.36 4.48 2.64 6.48 3.04 3.68 5.28 5.04 5.12 2.04 8.64 2.04z" fill-rule="nonzero"/> </g> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m882.81 97.09c0.64 0.48 0.96 1.12 0.96 1.92l-0.12 41.04v37.08l-10.56-8.4c-0.72-0.64-1.08-1.44-1.08-2.4v-77.88l10.8 8.64z" fill-rule="nonzero"/> </g> <g transform="matrix(1.008 0 0 1.008 -2.239 .61874)"> <path d="m950.36 146.05c0 0.88 0.02 1.5 0.06 1.86s-0.02 0.98-0.18 1.86h-7.08c-2.08 0-4.44-0.02-7.08-0.06s-5.36-0.06-8.16-0.06h-22.08c0 2.88 0.56 5.36 1.68 7.44s2.6 3.8 4.44 5.16 3.94 2.36 6.3 3 4.74 0.96 7.14 0.96c3.04 0 5.9-0.76 8.58-2.28s4.94-3.52 6.78-6c0.64 0.56 1.54 1.48 2.7 2.76s2.94 3.2 5.34 5.76c-2.8 3.36-6.22 6.02-10.26 7.98s-8.42 2.94-13.14 2.94-8.92-0.64-12.84-1.92-7.32-3.24-10.2-5.88-5.12-5.98-6.72-10.02-2.4-8.82-2.4-14.34c0-4.96 0.66-9.42 1.98-13.38s3.22-7.32 5.7-10.08 5.44-4.9 8.88-6.42 7.32-2.28 11.64-2.28c5.76 0 10.52 0.88 14.28 2.64s6.72 4.16 8.88 7.2 3.66 6.54 4.5 10.5 1.26 8.18 1.26 12.66zm-29.4-22.8c-2.16 0.16-4.16 0.72-6 1.68s-3.42 2.2-4.74 3.72-2.36 3.28-3.12 5.28-1.14 4.12-1.14 6.36h33.12c0-2-0.22-4.06-0.66-6.18s-1.3-4.02-2.58-5.7-3.1-3.02-5.46-4.02-5.5-1.38-9.42-1.14z" fill-rule="nonzero"/> </g> <g transform="matrix(1.8559 0 0 .7642 45.348 36.475)"> <g transform="translate(2.7114)"> <path d="m3.935 173.02c-0.331 0-0.497-0.402-0.497-1.207v-51.002c0-0.738 0.138-1.107 0.414-1.107h1.781c0.277 0 0.415 0.335 0.415 1.006v5.935c0 0.336 0.027 0.553 0.083 0.654 0.055 0.101 0.151-0.017 0.289-0.352 0.912-1.744 1.754-3.236 2.527-4.477 0.773-1.24 1.554-2.179 2.341-2.816s1.65-0.956 2.588-0.956c1.685 0 3.011 0.922 3.977 2.766 0.967 1.845 1.602 3.84 1.905 5.986 0.056 0.268 0.139 0.369 0.249 0.302s0.221-0.235 0.331-0.503c0.939-1.811 1.802-3.353 2.589-4.628 0.787-1.274 1.581-2.246 2.382-2.917s1.671-1.006 2.61-1.006c2.016 0 3.569 1.392 4.66 4.175 1.09 2.783 1.636 6.421 1.636 10.915v37.925c0 0.871-0.18 1.307-0.539 1.307h-1.739c-0.138 0-0.249-0.1-0.332-0.301-0.083-0.202-0.124-0.503-0.124-0.906v-36.315c0-3.555-0.338-6.321-1.015-8.3-0.676-1.978-1.76-2.967-3.251-2.967-0.884 0-1.726 0.386-2.527 1.157s-1.519 1.727-2.154 2.867-1.201 2.213-1.699 3.219c-0.248 0.469-0.421 0.905-0.517 1.308-0.097 0.402-0.145 0.972-0.145 1.71v37.221c0 0.871-0.166 1.307-0.497 1.307h-1.74c-0.166 0-0.29-0.1-0.373-0.301-0.083-0.202-0.124-0.503-0.124-0.906v-36.315c0-3.555-0.332-6.321-0.994-8.3-0.663-1.978-1.754-2.967-3.273-2.967-1.242 0-2.375 0.704-3.396 2.112-1.022 1.409-2.223 3.555-3.604 6.439v39.031c0 0.805-0.18 1.207-0.539 1.207h-1.698z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m53.642 166.28c-1.077 2.549-2.237 4.477-3.479 5.785-1.243 1.307-2.61 1.961-4.101 1.961-2.154 0-3.853-1.324-5.095-3.973-1.243-2.649-1.864-6.187-1.864-10.613 0-3.488 0.4-6.489 1.201-9.004s1.988-4.51 3.562-5.985c1.574-1.476 3.521-2.414 5.841-2.817l3.686-0.704c0.221-0.067 0.394-0.218 0.518-0.453 0.124-0.234 0.187-0.587 0.187-1.056v-2.917c0-3.89-0.504-6.975-1.512-9.255s-2.354-3.42-4.039-3.42c-1.298 0-2.472 0.72-3.521 2.162s-2.002 3.572-2.858 6.388c-0.083 0.268-0.159 0.453-0.228 0.554-0.069 0.1-0.172 0.083-0.311-0.051l-1.698-1.71c-0.083-0.134-0.138-0.285-0.166-0.453-0.027-0.167 0.014-0.452 0.125-0.855 0.856-3.353 2.009-6.052 3.459-8.098 1.449-2.045 3.224-3.068 5.322-3.068 1.74 0 3.211 0.687 4.412 2.062s2.112 3.37 2.734 5.986c0.621 2.615 0.932 5.7 0.932 9.255v35.712c0 0.536-0.035 0.888-0.104 1.056s-0.2 0.251-0.393 0.251h-1.533c-0.166 0-0.29-0.117-0.373-0.352-0.083-0.234-0.124-0.553-0.124-0.955l-0.083-5.231c-0.055-0.939-0.221-1.006-0.497-0.202zm0.456-19.314c0-1.14-0.194-1.643-0.58-1.509l-3.107 0.603c-1.436 0.202-2.686 0.638-3.749 1.308-1.063 0.671-1.953 1.543-2.671 2.616s-1.257 2.33-1.616 3.772-0.538 3.102-0.538 4.98c0 3.152 0.455 5.616 1.367 7.393 0.911 1.778 2.14 2.666 3.686 2.666 0.939 0 1.85-0.419 2.734-1.257s1.671-1.895 2.361-3.169c0.663-1.408 1.181-2.85 1.553-4.326 0.373-1.475 0.56-2.883 0.56-4.225v-8.852z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m79.034 173.02c-0.166 0-0.297-0.117-0.394-0.352-0.096-0.234-0.145-0.553-0.145-0.955v-4.628c0-0.536-0.041-0.838-0.124-0.905s-0.207 0.1-0.373 0.503c-0.276 0.67-0.69 1.593-1.242 2.766-0.553 1.174-1.271 2.23-2.154 3.169-0.884 0.939-1.961 1.408-3.231 1.408-1.74 0-3.314-0.989-4.722-2.967-1.409-1.979-2.534-4.963-3.376-8.953-0.843-3.991-1.264-8.937-1.264-14.838 0-5.701 0.415-10.68 1.243-14.939s1.988-7.595 3.479-10.009c1.492-2.415 3.204-3.622 5.137-3.622 1.436 0 2.616 0.57 3.541 1.71 0.926 1.14 1.719 2.381 2.382 3.722 0.249 0.47 0.414 0.637 0.497 0.503s0.125-0.536 0.125-1.207v-23.841c0-0.805 0.151-1.208 0.455-1.208h1.864c0.276 0 0.414 0.369 0.414 1.107v72.128c0 0.537-0.041 0.905-0.124 1.107-0.083 0.201-0.235 0.301-0.455 0.301h-1.533zm-0.621-42.049c-0.939-2.213-1.885-3.94-2.838-5.181s-2.009-1.861-3.169-1.861c-1.463 0-2.768 0.889-3.914 2.666s-2.044 4.376-2.693 7.796-0.973 7.578-0.973 12.474c0 5.097 0.338 9.272 1.015 12.524 0.676 3.253 1.567 5.651 2.672 7.193 1.104 1.543 2.305 2.314 3.603 2.314 1.188 0 2.258-0.704 3.211-2.113 0.952-1.408 1.705-3.118 2.257-5.13s0.829-3.957 0.829-5.835v-24.847z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m89.514 149.38c0 3.42 0.345 6.606 1.035 9.557 0.691 2.951 1.609 5.315 2.755 7.092s2.437 2.666 3.873 2.666c1.519 0 2.837-0.738 3.956-2.213 1.118-1.476 2.064-3.655 2.837-6.539 0.083-0.336 0.166-0.52 0.249-0.554 0.083-0.033 0.179 0.017 0.29 0.151l1.408 1.912c0.221 0.268 0.235 0.67 0.041 1.207-0.69 2.548-1.47 4.661-2.34 6.337-0.87 1.677-1.857 2.935-2.962 3.773-1.104 0.838-2.319 1.257-3.645 1.257-2.043 0-3.838-1.14-5.385-3.42-1.546-2.28-2.761-5.482-3.645-9.607-0.884-4.124-1.325-8.836-1.325-14.134 0-5.901 0.455-10.931 1.367-15.089 0.911-4.158 2.14-7.377 3.686-9.658 1.547-2.28 3.3-3.42 5.261-3.42 1.988 0 3.714 1.073 5.178 3.219 1.463 2.146 2.595 5.231 3.396 9.255s1.201 8.886 1.201 14.587c0 0.469-0.02 0.939-0.062 1.408-0.041 0.469-0.214 0.704-0.517 0.704h-16.362c-0.083 0-0.152 0.151-0.207 0.453-0.056 0.302-0.083 0.654-0.083 1.056zm13.752-6.237c0.304 0 0.497-0.1 0.58-0.302 0.083-0.201 0.124-0.57 0.124-1.106 0-3.219-0.283-6.187-0.849-8.903s-1.367-4.896-2.402-6.539c-1.036-1.643-2.272-2.464-3.708-2.464-1.629 0-2.996 0.955-4.101 2.867-1.104 1.911-1.94 4.342-2.506 7.293s-0.849 6.002-0.849 9.154h13.711z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m148.54 119.7c0.165 0 0.283 0.117 0.352 0.352s0.076 0.52 0.02 0.855l-6.254 50.902c-0.028 0.47-0.104 0.788-0.228 0.956s-0.297 0.251-0.518 0.251h-1.615c-0.442 0-0.718-0.402-0.829-1.207l-5.26-40.138c-0.111-0.604-0.201-0.905-0.27-0.905s-0.131 0.301-0.186 0.905l-5.012 40.138c-0.028 0.47-0.097 0.788-0.207 0.956-0.111 0.168-0.277 0.251-0.497 0.251h-1.74c-0.442 0-0.718-0.402-0.829-1.207l-6.503-50.801c-0.055-0.403-0.048-0.721 0.021-0.956s0.2-0.352 0.393-0.352h1.823c0.166 0 0.297 0.067 0.393 0.201 0.097 0.134 0.159 0.403 0.187 0.805l5.302 41.848c0.083 0.671 0.179 0.989 0.29 0.956 0.11-0.034 0.207-0.386 0.29-1.056l5.219-41.949c0.055-0.268 0.124-0.47 0.207-0.604s0.193-0.201 0.331-0.201h1.533c0.138 0 0.262 0.067 0.373 0.201 0.11 0.134 0.179 0.403 0.207 0.805l5.468 41.848c0.083 0.671 0.179 0.989 0.29 0.956 0.11-0.034 0.207-0.386 0.29-1.056l5.053-41.849c0.055-0.335 0.138-0.57 0.249-0.704 0.11-0.134 0.234-0.201 0.373-0.201h1.284z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m156.49 171.51c0 0.604-0.042 1.006-0.125 1.208-0.082 0.201-0.262 0.301-0.538 0.301h-1.533c-0.221 0-0.366-0.083-0.435-0.251s-0.103-0.486-0.103-0.956v-50.902c0-0.805 0.152-1.207 0.456-1.207h1.822c0.304 0 0.456 0.402 0.456 1.207v50.6zm0.165-63.979c0 1.207-0.207 1.811-0.621 1.811h-1.905c-0.221 0-0.366-0.135-0.435-0.403s-0.104-0.67-0.104-1.207v-7.847c0-1.006 0.18-1.509 0.539-1.509h1.988c0.359 0 0.538 0.47 0.538 1.409v7.746z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m168.3 124.83c-0.221 0-0.331 0.269-0.331 0.805v33.801c0 3.42 0.221 5.667 0.663 6.74 0.441 1.073 1.09 1.609 1.946 1.609h3.024c0.138 0 0.242 0.084 0.311 0.252 0.069 0.167 0.103 0.419 0.103 0.754v2.716c0 0.537-0.138 0.906-0.414 1.107-0.248 0.067-0.614 0.134-1.098 0.201-0.483 0.067-0.959 0.118-1.429 0.151-0.469 0.034-0.828 0.05-1.077 0.05-1.712 0-2.934-0.955-3.665-2.867-0.732-1.911-1.098-5.013-1.098-9.305v-35.108c0-0.604-0.124-0.906-0.373-0.906h-3.521c-0.248 0-0.373-0.268-0.373-0.804v-3.521c0-0.537 0.111-0.805 0.332-0.805h3.686c0.166 0 0.263-0.268 0.29-0.805l0.415-16.095c0-0.805 0.124-1.207 0.372-1.207h1.492c0.303 0 0.455 0.436 0.455 1.307v15.995c0 0.537 0.097 0.805 0.29 0.805h5.468c0.221 0 0.331 0.268 0.331 0.805v3.521c0 0.536-0.124 0.804-0.373 0.804h-5.426z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> <g transform="translate(2.7114)"> <path d="m179.4 173.02c-0.331 0-0.497-0.402-0.497-1.207v-72.329c0-0.738 0.138-1.107 0.414-1.107h1.782c0.276 0 0.414 0.336 0.414 1.006v27.162c0 0.335 0.034 0.536 0.103 0.603s0.159-0.033 0.27-0.302c0.994-1.81 1.898-3.319 2.713-4.526 0.814-1.208 1.629-2.113 2.444-2.717 0.814-0.603 1.691-0.905 2.63-0.905 2.182 0 3.839 1.375 4.971 4.125 1.132 2.749 1.698 6.404 1.698 10.965v37.925c0 0.871-0.166 1.307-0.497 1.307h-1.74c-0.165 0-0.29-0.1-0.373-0.301-0.082-0.202-0.124-0.503-0.124-0.906v-36.315c0-3.555-0.366-6.321-1.097-8.3-0.732-1.978-1.899-2.967-3.501-2.967-0.883 0-1.705 0.318-2.464 0.956-0.76 0.637-1.526 1.576-2.299 2.816-0.773 1.241-1.643 2.834-2.61 4.779v39.031c0 0.805-0.179 1.207-0.538 1.207h-1.699z" fill-rule="nonzero" stroke="#000" stroke-width=".7px"/> </g> </g> <g transform="matrix(.80638 0 0 .80638 452.53 65.421)" fill-rule="nonzero"> <path d="m79.32 36.98v150.76l15.68-13.2 6.59-156.31-22.27 18.75z" fill="url(#f)"/> <path d="m79.32 36.98-22.27-18.75 6.59 156.31 15.68 13.2v-150.76z" fill="url(#e)"/> <path d="m25.19 104.83 8.63 49.04 12.5-14.95-2.46-56.42-18.67 22.33z" fill="url(#d)"/> <path d="m25.19 104.83-25.19-14.59 16.97 53.86 16.85 9.77-8.63-49.04z" fill="url(#c)"/> <path d="M43.86,82.5L18.69,67.98L0,90.24L25.18,104.83L43.86,82.5Z" fill="#9c3"/> <path d="m134.82 78.69-9.97 56.5 15.58-9.04 19.57-62.05-25.18 14.59z" fill="url(#b)"/> <path d="m134.82 78.69-18.68-22.33-2.86 65 11.57 13.83 9.97-56.5z" fill="url(#a)"/> <path d="m160 64.1-18.69-22.26-25.17 14.52 18.67 22.33 25.19-14.59z" fill="#ffe113"/> <path d="M101.59,18.23L79.32,0L57.05,18.23L79.32,36.98L101.59,18.23Z" fill="#f3e600"/> </g> <defs> <linearGradient id="f" x2="1" gradientTransform="matrix(.84 -162.96 162.96 .84 89.64 184.81)" gradientUnits="userSpaceOnUse"><stop stop-color="#62d399" offset="0"/><stop stop-color="#acd842" offset=".51"/><stop stop-color="#d7db0a" offset=".9"/><stop stop-color="#d7db0a" offset="1"/></linearGradient> <linearGradient id="e" x2="1" gradientTransform="matrix(-1.6,-162.13,162.13,-1.6,69.68,178.9)" gradientUnits="userSpaceOnUse"><stop stop-color="#0ba398" offset="0"/><stop stop-color="#4ca352" offset=".5"/><stop stop-color="#76a30a" offset="1"/></linearGradient> <linearGradient id="d" x2="1" gradientTransform="matrix(-1.9,-67.98,67.98,-1.9,36.6,152.17)" gradientUnits="userSpaceOnUse"><stop stop-color="#36a382" offset="0"/><stop stop-color="#36a382" offset=".19"/><stop stop-color="#49a459" offset=".54"/><stop stop-color="#76a30b" offset="1"/></linearGradient> <linearGradient id="c" x2="1" gradientTransform="matrix(2.18,-62.38,62.38,2.18,15.82,153.24)" gradientUnits="userSpaceOnUse"><stop stop-color="#267880" offset="0"/><stop stop-color="#457a5c" offset=".51"/><stop stop-color="#717516" offset="1"/></linearGradient> <linearGradient id="b" x2="1" gradientTransform="matrix(13.85,-71.96,71.96,13.85,135.08,135.43)" gradientUnits="userSpaceOnUse"><stop stop-color="#b0d939" offset="0"/><stop stop-color="#eadb04" offset="1"/></linearGradient> <linearGradient id="a" x2="1" gradientTransform="matrix(26.159 -64.737 64.737 26.159 107.42 128.14)" gradientUnits="userSpaceOnUse"><stop stop-color="#74af52" offset="0"/><stop stop-color="#74af52" offset=".17"/><stop stop-color="#99be32" offset=".48"/><stop stop-color="#c0c40a" offset="1"/></linearGradient> </defs> </svg>`;
btoa(WS);
const VS = '<svg viewBox="0 0 509 154" xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><path d="M665.95 132.73v44.88l-10.56-8.4c-.8-.64-1.2-1.44-1.2-2.4v-32.4c0-6.48-4.12-9.72-12.36-9.72-2.16 0-4.18.4-6.06 1.2-1.88.8-3.54 1.8-4.98 3-1.44 1.2-2.56 2.5-3.36 3.9-.8 1.4-1.2 2.7-1.2 3.9v40.92l-10.68-8.4c-.72-.64-1.08-1.44-1.08-2.4v-53.76l10.92 8.52c.32.24.56.44.72.6.16.16.36.32.6.48.96-1.2 2.14-2.28 3.54-3.24 1.4-.96 2.92-1.76 4.56-2.4 1.64-.64 3.34-1.14 5.1-1.5 1.76-.36 3.44-.54 5.04-.54 1.44 0 2.92.04 4.44.12 1.52.08 2.84.28 3.96.6 4.56 1.12 7.8 3.12 9.72 6 1.92 2.88 2.88 6.56 2.88 11.04ZM732.38 146.05c0 .88.02 1.5.06 1.86.04.36-.02.98-.18 1.86h-7.08c-2.08 0-4.44-.02-7.08-.06-2.64-.04-5.36-.06-8.16-.06h-22.08c0 2.88.56 5.36 1.68 7.44 1.12 2.08 2.6 3.8 4.44 5.16 1.84 1.36 3.94 2.36 6.3 3 2.36.64 4.74.96 7.14.96 3.04 0 5.9-.76 8.58-2.28 2.68-1.52 4.94-3.52 6.78-6 .64.56 1.54 1.48 2.7 2.76 1.16 1.28 2.94 3.2 5.34 5.76-2.8 3.36-6.22 6.02-10.26 7.98-4.04 1.96-8.42 2.94-13.14 2.94-4.72 0-8.92-.64-12.84-1.92-3.92-1.28-7.32-3.24-10.2-5.88-2.88-2.64-5.12-5.98-6.72-10.02-1.6-4.04-2.4-8.82-2.4-14.34 0-4.96.66-9.42 1.98-13.38 1.32-3.96 3.22-7.32 5.7-10.08s5.44-4.9 8.88-6.42c3.44-1.52 7.32-2.28 11.64-2.28 5.76 0 10.52.88 14.28 2.64 3.76 1.76 6.72 4.16 8.88 7.2 2.16 3.04 3.66 6.54 4.5 10.5.84 3.96 1.26 8.18 1.26 12.66Zm-29.4-22.8c-2.16.16-4.16.72-6 1.68-1.84.96-3.42 2.2-4.74 3.72-1.32 1.52-2.36 3.28-3.12 5.28-.76 2-1.14 4.12-1.14 6.36h33.12c0-2-.22-4.06-.66-6.18-.44-2.12-1.3-4.02-2.58-5.7-1.28-1.68-3.1-3.02-5.46-4.02-2.36-1-5.5-1.38-9.42-1.14ZM795.93 146.05c0 .88.02 1.5.06 1.86.04.36-.02.98-.18 1.86h-7.08c-2.08 0-4.44-.02-7.08-.06-2.64-.04-5.36-.06-8.16-.06h-22.08c0 2.88.56 5.36 1.68 7.44 1.12 2.08 2.6 3.8 4.44 5.16 1.84 1.36 3.94 2.36 6.3 3 2.36.64 4.74.96 7.14.96 3.04 0 5.9-.76 8.58-2.28 2.68-1.52 4.94-3.52 6.78-6 .64.56 1.54 1.48 2.7 2.76 1.16 1.28 2.94 3.2 5.34 5.76-2.8 3.36-6.22 6.02-10.26 7.98-4.04 1.96-8.42 2.94-13.14 2.94-4.72 0-8.92-.64-12.84-1.92-3.92-1.28-7.32-3.24-10.2-5.88-2.88-2.64-5.12-5.98-6.72-10.02-1.6-4.04-2.4-8.82-2.4-14.34 0-4.96.66-9.42 1.98-13.38 1.32-3.96 3.22-7.32 5.7-10.08s5.44-4.9 8.88-6.42c3.44-1.52 7.32-2.28 11.64-2.28 5.76 0 10.52.88 14.28 2.64 3.76 1.76 6.72 4.16 8.88 7.2 2.16 3.04 3.66 6.54 4.5 10.5.84 3.96 1.26 8.18 1.26 12.66Zm-29.4-22.8c-2.16.16-4.16.72-6 1.68-1.84.96-3.42 2.2-4.74 3.72-1.32 1.52-2.36 3.28-3.12 5.28-.76 2-1.14 4.12-1.14 6.36h33.12c0-2-.22-4.06-.66-6.18-.44-2.12-1.3-4.02-2.58-5.7-1.28-1.68-3.1-3.02-5.46-4.02-2.36-1-5.5-1.38-9.42-1.14ZM858.57 97.21c.64.48.96 1.16.96 2.04v74.88c-.08 1.04-.12 2.12-.12 3.24-1.84-1.52-3.56-2.92-5.16-4.2-1.36-1.12-2.66-2.18-3.9-3.18-1.24-1-2.06-1.66-2.46-1.98-1.76 2.48-4.26 4.44-7.5 5.88-3.24 1.44-7.02 2.16-11.34 2.16-3.84 0-7.4-.7-10.68-2.1-3.28-1.4-6.14-3.44-8.58-6.12-2.44-2.68-4.34-5.94-5.7-9.78-1.36-3.84-2.04-8.16-2.04-12.96 0-4.32.78-8.34 2.34-12.06 1.56-3.72 3.6-6.92 6.12-9.6 2.52-2.68 5.38-4.78 8.58-6.3 3.2-1.52 6.48-2.28 9.84-2.28 2.56 0 4.82.22 6.78.66 1.96.44 3.68 1.06 5.16 1.86s2.78 1.74 3.9 2.82a35.92 35.92 0 0 1 3.12 3.42V88.57l10.68 8.64Zm-27.96 67.92c3.6 0 6.52-.68 8.76-2.04 2.24-1.36 3.98-3.06 5.22-5.1a20.5 20.5 0 0 0 2.58-6.54c.48-2.32.72-4.44.72-6.36v-1.2c0-1.12-.22-2.7-.66-4.74-.44-2.04-1.28-4.06-2.52-6.06s-3-3.7-5.28-5.1c-2.28-1.4-5.22-2.02-8.82-1.86-3.44 0-6.26.74-8.46 2.22-2.2 1.48-3.96 3.26-5.28 5.34-1.32 2.08-2.24 4.2-2.76 6.36-.52 2.16-.78 3.92-.78 5.28 0 1.84.24 3.92.72 6.24.48 2.32 1.36 4.48 2.64 6.48s3.04 3.68 5.28 5.04c2.24 1.36 5.12 2.04 8.64 2.04ZM882.81 97.09c.64.48.96 1.12.96 1.92l-.12 41.04v37.08l-10.56-8.4c-.72-.64-1.08-1.44-1.08-2.4V88.45l10.8 8.64ZM950.36 146.05c0 .88.02 1.5.06 1.86.04.36-.02.98-.18 1.86h-7.08c-2.08 0-4.44-.02-7.08-.06-2.64-.04-5.36-.06-8.16-.06h-22.08c0 2.88.56 5.36 1.68 7.44 1.12 2.08 2.6 3.8 4.44 5.16 1.84 1.36 3.94 2.36 6.3 3 2.36.64 4.74.96 7.14.96 3.04 0 5.9-.76 8.58-2.28 2.68-1.52 4.94-3.52 6.78-6 .64.56 1.54 1.48 2.7 2.76 1.16 1.28 2.94 3.2 5.34 5.76-2.8 3.36-6.22 6.02-10.26 7.98-4.04 1.96-8.42 2.94-13.14 2.94-4.72 0-8.92-.64-12.84-1.92-3.92-1.28-7.32-3.24-10.2-5.88-2.88-2.64-5.12-5.98-6.72-10.02-1.6-4.04-2.4-8.82-2.4-14.34 0-4.96.66-9.42 1.98-13.38 1.32-3.96 3.22-7.32 5.7-10.08s5.44-4.9 8.88-6.42c3.44-1.52 7.32-2.28 11.64-2.28 5.76 0 10.52.88 14.28 2.64 3.76 1.76 6.72 4.16 8.88 7.2 2.16 3.04 3.66 6.54 4.5 10.5.84 3.96 1.26 8.18 1.26 12.66Zm-29.4-22.8c-2.16.16-4.16.72-6 1.68-1.84.96-3.42 2.2-4.74 3.72-1.32 1.52-2.36 3.28-3.12 5.28-.76 2-1.14 4.12-1.14 6.36h33.12c0-2-.22-4.06-.66-6.18-.44-2.12-1.3-4.02-2.58-5.7-1.28-1.68-3.1-3.02-5.46-4.02-2.36-1-5.5-1.38-9.42-1.14Z" style="fill-rule:nonzero" transform="translate(-452.406 -63.709) scale(1.00797)"/><path d="M79.32 36.98v150.76L95 174.54l6.59-156.31-22.27 18.75Z" style="fill:url(#a);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="M79.32 36.98 57.05 18.23l6.59 156.31 15.68 13.2V36.98Z" style="fill:url(#b);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="m25.19 104.83 8.63 49.04 12.5-14.95-2.46-56.42-18.67 22.33Z" style="fill:url(#c);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="M25.19 104.83 0 90.24l16.97 53.86 16.85 9.77-8.63-49.04Z" style="fill:url(#d);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="M43.86 82.5 18.69 67.98 0 90.24l25.18 14.59L43.86 82.5Z" style="fill:#9c3;fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="m134.82 78.69-9.97 56.5 15.58-9.04L160 64.1l-25.18 14.59Z" style="fill:url(#e);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="m134.82 78.69-18.68-22.33-2.86 65 11.57 13.83 9.97-56.5Z" style="fill:url(#f);fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="m160 64.1-18.69-22.26-25.17 14.52 18.67 22.33L160 64.1Z" style="fill:#ffe113;fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><path d="M101.59 18.23 79.32 0 57.05 18.23l22.27 18.75 22.27-18.75Z" style="fill:#f3e600;fill-rule:nonzero" transform="matrix(.80638 0 0 .80638 2.361 1.094)"/><defs><linearGradient id="a" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(.84 -162.96 162.96 .84 89.64 184.81)"><stop offset="0" style="stop-color:#62d399;stop-opacity:1"/><stop offset=".51" style="stop-color:#acd842;stop-opacity:1"/><stop offset=".9" style="stop-color:#d7db0a;stop-opacity:1"/><stop offset="1" style="stop-color:#d7db0a;stop-opacity:1"/></linearGradient><linearGradient id="b" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-90.565 123.412 54.953) scale(162.14)"><stop offset="0" style="stop-color:#0ba398;stop-opacity:1"/><stop offset=".5" style="stop-color:#4ca352;stop-opacity:1"/><stop offset="1" style="stop-color:#76a30a;stop-opacity:1"/></linearGradient><linearGradient id="c" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="scale(-68) rotate(88.4 .881 -1.396)"><stop offset="0" style="stop-color:#36a382;stop-opacity:1"/><stop offset=".19" style="stop-color:#36a382;stop-opacity:1"/><stop offset=".54" style="stop-color:#49a459;stop-opacity:1"/><stop offset="1" style="stop-color:#76a30b;stop-opacity:1"/></linearGradient><linearGradient id="d" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-88 87.255 68.431) scale(62.42)"><stop offset="0" style="stop-color:#267880;stop-opacity:1"/><stop offset=".51" style="stop-color:#457a5c;stop-opacity:1"/><stop offset="1" style="stop-color:#717516;stop-opacity:1"/></linearGradient><linearGradient id="e" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-79.1 149.53 -14.065) scale(73.28)"><stop offset="0" style="stop-color:#b0d939;stop-opacity:1"/><stop offset="1" style="stop-color:#eadb04;stop-opacity:1"/></linearGradient><linearGradient id="f" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="rotate(-67.997 148.705 -15.558) scale(69.8226)"><stop offset="0" style="stop-color:#74af52;stop-opacity:1"/><stop offset=".17" style="stop-color:#74af52;stop-opacity:1"/><stop offset=".48" style="stop-color:#99be32;stop-opacity:1"/><stop offset="1" style="stop-color:#c0c40a;stop-opacity:1"/></linearGradient></defs></svg>', HS = btoa(VS), GS = "data:image/svg+xml;charset=utf-8;base64," + HS, qS = GS, Zg = typeof window !== void 0 ? window.location.search.includes("debugcontext") : !1;
var ce = /* @__PURE__ */ ((s) => (s.ContextRegistered = "ContextRegistered", s.ContextCreationStart = "ContextCreationStart", s.ContextCreated = "ContextCreated", s.ContextFirstFrameRendered = "ContextFirstFrameRendered", s.ContextDestroying = "ContextDestroying", s.ContextDestroyed = "ContextDestroyed", s.MissingCamera = "MissingCamera", s.ContextClearing = "ContextClearing", s.ContextCleared = "ContextCleared", s))(ce || {});
class he {
/** The currently active (rendering) Needle Engine context */
static get Current() {
return globalThis["NeedleEngine.Context.Current"];
}
/** @internal */
static set Current(e) {
globalThis["NeedleEngine.Context.Current"] = e;
}
/** Returns the array of all registered Needle Engine contexts. Do not modify */
static get All() {
return this.Registered;
}
/** All currently registered Needle Engine contexts. Do not modify */
static Registered = [];
/** @internal Internal use only */
static register(e) {
this.Registered.indexOf(e) === -1 && (Zg && console.warn("Registering context"), this.Registered.push(e), this.dispatchCallback("ContextRegistered", e));
}
/** @internal Internal use only */
static unregister(e) {
const t = this.Registered.indexOf(e);
t !== -1 && (Zg && console.warn("Unregistering context"), this.Registered.splice(t, 1));
}
static _callbacks = {};
/**
* Register a callback to be called when the given event occurs
*/
static registerCallback(e, t) {
this._callbacks[e] || (this._callbacks[e] = []), this._callbacks[e].push(t);
}
/** Unregister a callback */
static unregisterCallback(e, t) {
if (!this._callbacks[e]) return;
const i = this._callbacks[e].indexOf(t);
i !== -1 && this._callbacks[e].splice(i, 1);
}
/** @internal */
static dispatchCallback(e, t, i) {
if (!this._callbacks[e]) return !0;
const n = { event: e, context: t };
if (i)
for (const r in i)
n[r] = i[r];
const o = new Array();
return this._callbacks[e].forEach((r) => {
const a = r(n);
a instanceof Promise && o.push(a);
}), Promise.all(o);
}
/**
* Register a callback to be called when a context is created
*/
static addContextCreatedCallback(e) {
this.registerCallback("ContextCreated", e);
}
/**
* Register a callback to be called when a context is registered
*/
static addContextDestroyedCallback(e) {
this.registerCallback("ContextDestroyed", e);
}
}
const XS = () => (s) => s;
function QA(s) {
return XS()(s);
}
function YA() {
return !!w("debug");
}
class Wi {
_factory;
_cache = [];
_maxSize;
_index = 0;
constructor(e, t) {
this._factory = e, this._maxSize = t;
}
get() {
const e = this._index % this._maxSize;
return this._index++, this._cache.length <= e && (this._cache[e] = this._factory()), this._cache[e];
}
}
let Uo = !1;
const ep = new Array();
typeof window < "u" && setTimeout(() => {
if (Uo) {
const s = {}, e = new URL(window.location.href), t = new URL(e);
t.searchParams.append("console", "");
const i = t.toString().replace(/=$|=(?=&)/g, "");
for (const o of ep) {
const r = new URL(e);
r.searchParams.append(o, ""), s[o] = r.toString().replace(/=$|=(?=&)/g, "");
}
console.log(
`🌵 ?help: Debug Options for Needle Engine.
Append any of these parameters to the URL to enable specific debug options.
Example: ${i} will show an onscreen console window.`
);
const n = Uo === !0 ? "" : ` (containing "${Uo}")`;
console.group("Available URL parameters:" + n);
for (const o of Object.keys(s).sort())
typeof Uo == "string" && !o.toLowerCase().includes(Uo.toLowerCase()) || (console.groupCollapsed(o), console.log("Reload with this flag enabled:"), console.log(s[o]), console.groupEnd());
console.groupEnd();
}
}, 100);
function Id() {
return new URLSearchParams(globalThis.location?.search);
}
function w(s) {
Uo && !ep.includes(s) && ep.push(s);
const e = Id();
if (e.has(s)) {
const t = e.get(s);
if (t) {
const i = Number(t);
return isNaN(i) ? t : i;
} else return !0;
}
return !1;
}
Uo = w("help");
function KA(s, e) {
const t = Id();
t.has(s) ? t.set(s, e) : t.append(s, e), document.location.search = t.toString();
}
function Gh(s, e, t = !0) {
const i = Id();
i.has(s) ? e === null ? i.delete(s) : i.set(s, e) : e !== null && i.append(s, e), t ? QS(s, i) : Pb(s, i);
}
function Jg(s, e, t) {
s.has(e) ? s.set(e, t.toString()) : s.append(e, t.toString());
}
function QS(s, e, t) {
window.history.pushState(t, s, "?" + e.toString());
}
function Pb(s, e, t) {
window.history.replaceState(t, s, "?" + e.toString());
}
function ZA(s) {
for (var e = "", t = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", i = t.length, n = 0; n < s; n++)
e += t.charAt(Math.floor(Math.random() * i));
return e;
}
function JA(s, e) {
return Math.floor(Math.random() * (e - s + 1)) + s;
}
const ey = ["smol", "tiny", "giant", "interesting", "smart", "bright", "dull", "extreme", "beautiful", "pretty", "dark", "epic", "salty", "silly", "funny", "lame", "lazy", "loud", "lucky", "mad", "mean", "mighty", "mysterious", "nasty", "odd", "old", "powerful", "quiet", "rapid", "scary", "shiny", "shy", "silly", "smooth", "sour", "spicy", "stupid", "sweet", "tasty", "terrible", "ugly", "unusual", "vast", "wet", "wild", "witty", "wrong", "zany", "zealous", "zippy", "zombie", "zorro"], ty = ["cat", "dog", "mouse", "pig", "cow", "horse", "sheep", "chicken", "duck", "goat", "panda", "tiger", "lion", "elephant", "monkey", "bird", "fish", "snake", "frog", "turtle", "hamster", "penguin", "kangaroo", "whale", "dolphin", "crocodile", "snail", "ant", "bee", "beetle", "butterfly", "dragon", "eagle", "fish", "giraffe", "lizard", "panda", "penguin", "rabbit", "snake", "spider", "tiger", "zebra"];
function YS() {
const s = ey[Math.floor(Math.random() * ey.length)], e = ty[Math.floor(Math.random() * ty.length)];
return s + "_" + e;
}
function KS(s) {
return s = s.replace(/[^a-z0-9áéÃóúñü \.,_-]/gim, ""), s.trim();
}
function Zl(s, e, t = !0, i = !1) {
if (e == null) return null;
if (e.userData && e.userData.guid === s) return e;
if (e.guid == s) return e;
if (i && e.userData?.components) {
for (const n of e.userData.components)
if (n.guid === s) return n;
}
if (t) {
if (e.scenes)
for (const n in e.scenes) {
const o = e.scenes[n], r = Zl(s, o, t, i);
if (r) return r;
}
if (e.children)
for (const n in e.children) {
const o = e.children[n], r = Zl(s, o, t, i);
if (r) return r;
}
}
}
function Ld(s, e) {
if (s != null && typeof s == "object") {
let t;
Array.isArray(s) ? t = [] : (t = Object.create(s), Object.assign(t, s));
for (const i of Object.keys(s)) {
const n = s[i];
e && !e(s, i, n) ? t[i] = n : n?.clone !== void 0 && typeof n.clone == "function" ? t[i] = n.clone() : t[i] = Ld(n, e);
}
return t;
}
return s;
}
function Ps(s) {
return new Promise((e, t) => {
setTimeout(e, s);
});
}
function Dd(s, e) {
if (s <= 0) return Promise.resolve();
if (e || (e = he.Current), !e) return Promise.reject("No context");
const t = e.time.frameCount + s;
return new Promise((i, n) => {
if (!e) return n("No context");
const o = () => {
e.time.frameCount >= t && (e.pre_update_callbacks.splice(e.pre_update_callbacks.indexOf(o), 1), i());
};
e.pre_update_callbacks.push(o);
});
}
const Wc = w("debugresolveurl"), ZS = "rel:";
function eI(s, e) {
return ur(s, e);
}
function ur(s, e) {
if (e === void 0)
return Wc && console.warn("getPath: uri is undefined, returning uri", e), e;
if (e.startsWith("./"))
return e;
if (e.startsWith("http"))
return Wc && console.warn("getPath: uri is absolute, returning uri", e), e;
if (s === void 0)
return Wc && console.warn("getPath: source is undefined, returning uri", e), e;
e.startsWith(ZS) && (e = e.substring(4));
const t = s.lastIndexOf("/");
if (t >= 0) {
const i = s.substring(0, t + 1);
for (; i.endsWith("/") && e.startsWith("/"); ) e = e.substring(1);
const n = i + e;
return Wc && console.log("source:", s, `changed uri
from`, e, `
to `, n, `
basePath: ` + i), n;
}
return e;
}
class JS {
subscribeWrite(e) {
this.writeCallbacks.push(e);
}
unsubscribeWrite(e) {
const t = this.writeCallbacks.indexOf(e);
t !== -1 && this.writeCallbacks.splice(t, 1);
}
writeCallbacks = [];
constructor(e, t) {
this._object = e, this._prop = t, this._wrapperProp = Symbol("$" + t), this.apply();
}
_applied = !1;
_object;
_prop;
_wrapperProp;
apply() {
if (this._applied || !this._object) return;
const e = this._object, t = this._prop;
if (e[t] === void 0) return;
this._applied = !0, e[this._wrapperProp] !== void 0 && console.warn("Watcher is being applied to an object that already has a wrapper property. This is not (yet) supported");
const i = e[t];
e[this._wrapperProp] = i, Object.defineProperty(e, t, {
get: () => e[this._wrapperProp],
set: (r) => {
e[this._wrapperProp] = r;
for (const a of this.writeCallbacks)
a(r, this._prop);
}
});
}
revoke() {
if (!this._applied || !this._object) return;
this._applied = !1;
const e = this._object, t = this._prop;
Reflect.deleteProperty(e, t);
const i = e[this._wrapperProp];
e[t] = i, Reflect.deleteProperty(e, this._wrapperProp);
}
dispose() {
this.revoke(), this.writeCallbacks.length = 0, this._object = null;
}
}
class no {
_watches = [];
constructor(e, t) {
if (Array.isArray(t))
for (const i of t)
this._watches.push(new no(e, i));
else
this._watches.push(new JS(e, t));
}
subscribeWrite(e) {
for (const t of this._watches)
t.subscribeWrite(e);
}
unsubscribeWrite(e) {
for (const t of this._watches)
t.unsubscribeWrite(e);
}
apply() {
for (const e of this._watches)
e.apply();
}
revoke() {
for (const e of this._watches)
e.revoke();
}
dispose() {
for (const e of this._watches)
e.dispose();
this._watches.length = 0;
}
}
const Dr = Symbol("needle:watches");
function fm(s, e) {
if (!s[Dr])
if (s instanceof J)
s[Dr] = new no(s, ["x", "y"]);
else if (s instanceof b)
s[Dr] = new no(s, ["x", "y", "z"]);
else if (s instanceof de || s instanceof $)
s[Dr] = new no(s, ["x", "y", "z", "w"]);
else
return !1;
return s[Dr].subscribeWrite(e), !0;
}
function Ob(s, e) {
if (!s) return;
const t = s[Dr];
t && t.unsubscribeWrite(e);
}
var X;
((s) => {
let e;
function t() {
if (e !== void 0) return e;
const W = window.navigator.userAgent, ne = /Windows|MacOS|Mac OS/.test(W), re = /Windows NT/.test(W) && /Edg/.test(W) && !/Win64/.test(W);
return e = ne && !re && !y();
}
s.isDesktop = t;
let i;
function n() {
return i !== void 0 ? i : typeof window.orientation < "u" || navigator.userAgent.indexOf("IEMobile") !== -1 ? i = !0 : i = /iPhone|iPad|iPod|Android|IEMobile/i.test(navigator.userAgent);
}
s.isMobileDevice = n;
function o() {
return a();
}
s.isIPad = o;
let r;
function a() {
return r !== void 0 ? r : r = /iPad/.test(navigator.userAgent);
}
s.isiPad = a;
let l;
function c() {
return l !== void 0 ? l : l = /Android/.test(navigator.userAgent);
}
s.isAndroidDevice = c;
let h;
function d() {
return h !== void 0 ? h : h = /WebXRViewer\//i.test(navigator.userAgent);
}
s.isMozillaXR = d;
let f;
function p() {
if (f !== void 0) return f;
if (navigator.userAgentData)
return f = navigator.userAgentData.platform === "macOS";
{
const W = navigator.userAgent.toLowerCase();
return f = W.includes("mac os x") || W.includes("macintosh");
}
}
s.isMacOS = p;
let g;
function _() {
return g !== void 0 ? g : g = p() && "xr" in navigator;
}
s.isVisionOS = _;
let m;
const v = ["iPad Simulator", "iPhone Simulator", "iPod Simulator", "iPad", "iPhone", "iPod"];
function y() {
return m !== void 0 ? m : m = v.includes(navigator.platform) || navigator.userAgent.includes("Mac") && "ontouchend" in document;
}
s.isiOS = y;
let x;
function I() {
return x !== void 0 || (x = /^((?!chrome|android).)*safari/i.test(navigator.userAgent)), x;
}
s.isSafari = I;
let O;
function k() {
return O !== void 0 ? O : O = navigator.userAgent.includes("OculusBrowser");
}
s.isQuest = k;
let E;
function z() {
return E !== void 0 || (E = document.createElement("a").relList.supports("ar")), E;
}
s.supportsQuickLookAR = z;
async function D() {
try {
return (await navigator.permissions.query({ name: "microphone" })).state !== "denied";
} catch (W) {
return console.error("Error querying `microphone` permissions.", W), !1;
}
}
s.microphonePermissionsGranted = D;
let V;
function q() {
if (V !== void 0) return V;
const W = navigator.userAgent.match(/iPhone OS (\d+_\d+)/);
if (W && (V = W[1].replace("_", ".")), !V) {
const ne = navigator.userAgent.match(/(?:\(Macintosh;|iPhone;|iPad;).*Version\/(\d+\.\d+)/);
ne && (V = ne[1]);
}
return V || (V = null), V;
}
s.getiOSVersion = q;
let A;
function U() {
if (A !== void 0) return A;
const W = navigator.userAgent.match(/(?:CriOS|Chrome)\/(\d+\.\d+\.\d+\.\d+)/);
return W ? A = W[1].replace("_", ".") : A = null, A;
}
s.getChromeVersion = U;
})(X || (X = {}));
function tI() {
return X.isDesktop();
}
function iI() {
return X.isMobileDevice();
}
function nI() {
return X.isiPad();
}
function sI() {
return X.isiPad();
}
function oI() {
return X.isAndroidDevice();
}
function rI() {
return X.isMozillaXR();
}
function aI() {
return X.isMacOS();
}
function lI() {
return X.isiOS();
}
function cI() {
return X.isSafari();
}
function hI() {
return X.isQuest();
}
async function dI() {
return X.microphonePermissionsGranted();
}
const Ks = /* @__PURE__ */ new WeakMap();
function eC(s, e, t) {
if (!Ks.get(s)) {
const n = new MutationObserver((o) => {
iC(s, o);
});
Ks.set(s, {
observer: n,
attributeChangedListeners: /* @__PURE__ */ new Map()
}), n.observe(s, { attributes: !0 });
}
const i = Ks.get(s).attributeChangedListeners;
i.has(e) || i.set(e, []), i.get(e).push(t);
}
function tC(s, e, t) {
if (!Ks.get(s)) return;
const i = Ks.get(s).attributeChangedListeners;
if (!i.has(e)) return;
const n = i.get(e), o = n.indexOf(t);
o !== -1 && (n.splice(o, 1), n.length <= 0 && (i.delete(e), Ks.get(s)?.observer.disconnect(), Ks.delete(s)));
}
function iC(s, e) {
const t = Ks.get(s).attributeChangedListeners;
for (const i of e)
if (i.type === "attributes") {
const n = i.attributeName, o = s.getAttribute(n);
if (t.has(n))
for (const r of t.get(n))
r(o);
}
}
class iy {
reason;
constructor(e) {
this.reason = e;
}
}
async function kb(s) {
const e = await Promise.allSettled(s).catch((n) => [
new iy(n.message)
]);
let t = !1;
const i = e.map((n) => "value" in n ? n.value : (t = !0, new iy(n.reason)));
return {
anyFailed: t,
results: i
};
}
async function nC(s) {
if (!globalThis.QRCode) {
const l = "https://cdn.jsdelivr.net/gh/davidshimjs/qrcodejs@gh-pages/qrcode.min.js";
let c = document.head.querySelector(`script[src="${l}"]`);
c || (c = document.createElement("script"), c.src = l, document.head.appendChild(c)), await new Promise((h, d) => {
c.addEventListener("load", () => {
h(!0);
});
});
}
const e = globalThis.QRCode, t = s.domElement ?? document.createElement("div"), i = new e(t, {
width: s.width ?? 256,
height: s.height ?? 256,
colorDark: "#000000",
colorLight: "#ffffff",
correctLevel: s.showLogo ? e.CorrectionLevel.H : e.CorrectLevel.M,
...s
}), n = i?._oQRCode.moduleCount || 0, o = i?._oDrawing?._elCanvas;
let r = 0.25;
n < 40 ? r = Math.floor(n / 4) / n : r = Math.floor(n / 6) / n;
const a = Math.floor(n / 20) / n;
try {
const l = await sC(o, { showLogo: s.showLogo, logoSize: r, logoPadding: a }).catch((c) => {
});
l && (t.innerHTML = "", t.append(l));
} catch {
}
if (s.showUrl !== !1 && s.text) {
const l = t.querySelector(".qr-code-link-label");
let c = s.text.replace(/^(https?:\/\/)?(www\.)?/, "").replace(/\/+$/, "").replace(/\?+$/, "");
if (c = "Scan to visit " + c, l)
l.textContent = c;
else {
const h = document.createElement("div");
h.classList.add("qr-code-link-label"), s.text = c, h.textContent = s.text, h.addEventListener("click", (d) => {
d.stopImmediatePropagation();
}), h.style.textAlign = "center", h.style.fontSize = "0.8em", h.style.marginTop = "0.1em", h.style.color = "#000000", h.style.fontFamily = "'Roboto Flex', sans-serif", h.style.opacity = "0.5", h.style.wordBreak = "break-all", h.style.wordWrap = "break-word", h.style.marginBottom = "0.3em", t.style.width = "calc(210px + 20px)", t.appendChild(h);
}
}
return t;
}
async function sC(s, e) {
if (!s) return;
const t = 8, i = 20, n = e.logoPadding || 1 / 32, o = "transparent", r = 0, a = new Image(), c = document.querySelector("needle-engine")?.getAttribute("loading-logo-src") || Cb;
if (!c) return;
let h = !1;
e.showLogo !== !1 && (a.src = c, h = await new Promise((y, x) => {
a.onload = () => y(!0), a.onerror = (I) => {
console.error("Error loading favicon image for QR code", I), y(!1);
};
}));
const d = document.createElement("canvas");
d.width = s.width + t, d.height = s.height + t;
const f = d.getContext("2d");
if (!f)
return;
f.fillStyle = "#ffffff", f.fillRect(0, 0, d.width, d.height), f.drawImage(s, t / 2, t / 2), f.imageSmoothingEnabled = !0, f.imageSmoothingQuality = "high", f.mozImageSmo