ohzi-core 12.0.0 → 12.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/BaseApplication.js","../src/materials/BlitMaterial.js","../src/materials/AddMaterial.js","../src/materials/BaseShaderMaterial.js","../src/materials/UnrealBloomComposeMaterial.js","../src/render_mode/BaseRender.js","../src/Browser.js","../src/utilities/Validation.js","../src/resource_loader/AbstractLoader.js","../src/components/AudioClip.js","../src/resource_loader/AudioLoader.js","../src/ResourceContainer.js","../src/loaders/AsyncAbstractLoader.js","../src/loaders/AsyncAudiosLoader.js","../src/resource_loader/GLTFDRACOLoader.js","../src/resource_loader/GLTFLoader.js","../src/loaders/AsyncObjectsLoader.js","../src/resource_loader/AsyncTextureLoader.js","../src/resource_loader/BasisLoader.js","../src/resource_loader/CubemapLoader.js","../src/resource_loader/RGBETextureLoader.js","../src/loaders/AsyncTexturesLoader.js","../src/scenes/loading_states/CompilatorManager.js","../src/scenes/loading_states/LoadingState.js","../src/scenes/loading_states/HighQualityLoadingState.js","../src/scenes/loading_states/RegularLoadingState.js","../src/scenes/AbstractScene.js","../src/utilities/OMath.js","../src/action_sequencer/ActionSequencer.js","../src/utilities/EasingFunctions.js","../src/action_sequencer/ActionInterpolator.js","../src/action_sequencer/NumberInterpolator.js","../src/action_sequencer/ActionEvent.js","../src/view_components/transition/DrawIOAnimationSheet.js","../src/view_components/transition/ActionSequencerBuilder.js","../src/view_components/transition/TransitionTable.js","../src/Time.js","../src/view_components/ViewState.js","../src/view_components/transition/ViewStateTransitionHandler.js","../src/view_components/TransitionManager.js","../src/view_components/ViewManager.js","../src/view_components/ApplicationView.js","../src/CameraManager.js","../src/canvas_drawer/CanvasDrawer.js","../src/canvas_drawer/SimpleTextDrawer.js","../src/Capabilities.js","../src/components/AxisHelper.js","../src/SceneManager.js","../src/primitives/Cube.js","../src/primitives/Sphere.js","../src/primitives/Arrow.js","../src/OScreen.js","../src/materials/ScreenSpaceTextureMaterial.js","../src/PerspectiveCamera.js","../src/Debug.js","../src/render_utilities/Blitter.js","../src/materials/ClearDepthNormalMaterial.js","../src/materials/DepthNormalMaterial.js","../src/render_utilities/DepthAndNormalsRenderer.js","../src/Graphics.js","../src/html_utilities/css_animator_states/Idle.js","../src/html_utilities/css_animator_states/Animating.js","../src/html_utilities/CSSAnimator.js","../src/OS.js","../src/ReflectionPlaneContext.js","../src/static_batcher/GeometryBatch.js","../src/static_batcher/GeometryBatcher.js","../src/UI.js","../src/utilities/PerspectiveFrustumPointFitter.js","../src/utilities/OrthographicFrustumPointFitter.js","../src/utilities/CameraUtilities.js","../src/Initializer.js","../src/KeyboardInput.js","../src/OrthographicCamera.js","../src/materials/NormalMaterial.js","../src/render_mode/DebugNormalsRender.js","../src/materials/DisplayNormalTextureMaterial.js","../src/materials/SSAOComposeMaterial.js","../src/materials/SSAOMaterial.js","../src/materials/BoxBlurMaterial.js","../src/render_utilities/Blurrer.js","../src/render_mode/NormalAORender.js","../src/render_mode/NormalRender.js","../src/materials/GaussianBlurMaterial.js","../src/materials/LuminosityHighPassMaterial.js","../src/render_utilities/GaussianBlurrer.js","../src/render_mode/UnrealBloomRender.js","../src/render_mode/VRRender.js","../src/view_components/ViewComponentManager.js","../src/RenderLoop.js","../src/Screen.js","../src/view_components/ViewComponent.js","../src/primitives/HorizontalPlane.js","../src/primitives/VerticalPlane.js","../src/utilities/ArrayUtilities.js","../src/utilities/FrustumPointFitter.js","../src/utilities/GeometryUtilities.js","../src/utilities/HTMLUtilities.js","../src/utilities/ImageUtilities.js","../src/utilities/MeshSampler.js","../src/utilities/ModelUtilities.js","../src/utilities/ObjectUtilities.js","../src/utilities/StringUtilities.js","../src/utilities/TimeUtilities.js","../src/components/Grid.js","../src/components/Line.js","../src/components/WorldImage.js","../src/components/Text2D.js","../src/materials/UIElementMaterial.js","../src/ui/ui_element_position/ScreenSpacePosition.js","../src/ui/ui_element_position/WorldSpacePosition.js","../src/ui/ui_element_state/UIElementState.js","../src/ui/ui_element_state/OnIdle.js","../src/ui/ui_element_state/OnMouseEnter.js","../src/ui/ui_element_state/OnMouseExit.js","../src/ui/ui_element_state/OnMouseHover.js","../src/components/UIElement.js","../src/components/UpdatableMaterialMesh.js","../src/components/sdf_text/TextGlyph.js","../src/components/sdf_text/SDFText.js","../src/materials/SDFTextMaterial.js","../src/components/sdf_text/SDFTextBatch.js","../src/action_sequencer/VectorInterpolator.js","../src/materials/DualFilteringBlurMaterial.js","../src/materials/AlphaFilterMaterial.js","../src/render_utilities/DualFilteringBlurrer.js","../src/materials/MedianFilterMaterial.js","../src/render_utilities/MedianFilter.js","../src/gpu_particles/ParticleAttribute.js","../src/gpu_particles/GPUParticleSystem.js","../src/materials/gpu_particles/ParticleStorageMaterial.js","../src/gpu_particles/ParticlePositionAttribute.js","../src/data_textures/CustomDataTexture.js","../src/data_textures/RGBDataTexture.js","../src/data_textures/RGBADataTexture.js","../src/data_textures/RGBFloatDataTexture.js","../src/data_textures/RGBAFloatDataTexture.js","../src/static_batcher/BatchedMesh.js","../src/static_batcher/MeshBatcher.js","../src/resource_loader/DAELoader.js","../src/resource_loader/FileLoader.js","../src/resource_loader/FontLoader.js","../src/resource_loader/HDRCubeTextureLoader.js","../src/resource_loader/JSONLoader.js","../src/resource_loader/OBJLoader.js","../src/resource_loader/PointArrayLoader.js","../src/resource_loader/TextLoader.js","../src/resource_loader/TextureLoader.js","../src/resource_loader/VideoLoader.js","../src/resource_loader/ResourceBatch.js"],"sourcesContent":["class BaseApplication\n{\n on_post_start()\n {}\n\n on_enter()\n {}\n\n on_exit()\n {}\n\n before_update()\n {}\n\n update()\n {}\n\n fixed_update()\n {}\n\n on_post_render()\n {}\n\n on_pre_render()\n {}\n\n on_frame_end()\n {}\n}\n\nexport { BaseApplication };\n","import vert from '../shaders/copy/copy.vert';\nimport frag from '../shaders/copy/copy.frag';\n\nimport { ShaderMaterial } from 'three';\nimport { Vector2 } from 'three';\nimport { NoBlending } from 'three';\nimport { AlwaysDepth } from 'three';\n\nclass BlitMaterial extends ShaderMaterial\n{\n constructor(frag_shader, vert_shader, defines)\n {\n super({\n uniforms: {\n _MainTex: { value: null },\n _Resolution: { value: new Vector2(0, 0) },\n _TargetResolution: { value: new Vector2(0, 0) }\n },\n defines: defines || {},\n vertexShader: vert_shader || vert,\n fragmentShader: frag_shader || frag,\n depthWrite: false,\n blending: NoBlending,\n depthTest: false,\n depthFunc: AlwaysDepth\n });\n }\n}\n\nexport { BlitMaterial };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/add/add.frag';\n\nclass AddMaterial extends BlitMaterial\n{\n constructor(nMips)\n {\n super(frag);\n\n this.uniforms._SecondTex = { value: undefined };\n }\n\n set_add_texture(tex)\n {\n this.uniforms._SecondTex.value = tex;\n }\n}\n\nexport { AddMaterial };\n","import basic_vert from '../shaders/basic_color/basic_color.vert';\nimport basic_frag from '../shaders/basic_color/basic_color.frag';\n\nimport { ShaderMaterial } from 'three';\nimport { Color } from 'three';\n\nclass BaseShaderMaterial extends ShaderMaterial\n{\n constructor(vert, frag, uniforms)\n {\n super({\n vertexShader: vert || basic_vert,\n fragmentShader: frag || basic_frag,\n uniforms: uniforms || {\n _Color: { value: new Color('#FF0000') }\n }\n });\n }\n}\n\nexport { BaseShaderMaterial };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/gaussian_blur/unreal_bloom_compose.frag';\n\nimport { Color } from 'three';\nclass UnrealBloomComposeMaterial extends BlitMaterial\n{\n constructor(nMips)\n {\n super(frag, undefined, {\n NUM_MIPS: nMips\n });\n this.uniforms._MainTex = { value: undefined };\n this.uniforms._BlurredTex = { value: undefined };\n this.uniforms._BloomStrength = { value: 1 };\n\n this.uniforms.blurTexture1 = { value: null };\n this.uniforms.blurTexture2 = { value: null };\n this.uniforms.blurTexture3 = { value: null };\n this.uniforms.blurTexture4 = { value: null };\n this.uniforms.blurTexture5 = { value: null };\n\n this.uniforms.bloomStrength = { value: 1.0 };\n this.uniforms.bloomFactors = { value: [1.0, 0.8, 0.6, 0.4, 0.2] };\n this.uniforms.bloomRadius = { value: 0.0 };\n\n const bloomTintColors = [\n new Color('#FFFFFF'),\n new Color('#FFFFFF'),\n new Color('#FFFFFF'),\n new Color('#FFFFFF'),\n new Color('#FFFFFF')\n ];\n\n this.uniforms.bloomTintColors = { value: bloomTintColors };\n }\n\n set_RT_0(rt)\n {\n this.uniforms.blurTexture1.value = rt;\n }\n\n set_RT_1(rt)\n {\n this.uniforms.blurTexture2.value = rt;\n }\n\n set_RT_2(rt)\n {\n this.uniforms.blurTexture3.value = rt;\n }\n\n set_RT_3(rt)\n {\n this.uniforms.blurTexture4.value = rt;\n }\n\n set_RT_4(rt)\n {\n this.uniforms.blurTexture5.value = rt;\n }\n\n set_bloom_strength(value)\n {\n this.uniforms.bloomStrength.value = value;\n }\n\n set_bloom_radius(value)\n {\n this.uniforms.bloomRadius.value = value;\n }\n\n set_tint_color_0(col_string)\n {\n this.uniforms.bloomTintColors.value[0].set(col_string);\n }\n\n set_tint_color_1(col_string)\n {\n this.uniforms.bloomTintColors.value[1].set(col_string);\n }\n\n set_tint_color_2(col_string)\n {\n this.uniforms.bloomTintColors.value[2].set(col_string);\n }\n\n set_tint_color_3(col_string)\n {\n this.uniforms.bloomTintColors.value[3].set(col_string);\n }\n\n set_tint_color_4(col_string)\n {\n this.uniforms.bloomTintColors.value[4].set(col_string);\n }\n}\n\nexport { UnrealBloomComposeMaterial };\n","class BaseRender\n{\n constructor()\n {\n\n }\n\n render()\n {\n\n }\n\n on_enter(context, renderer)\n {\n\n }\n\n on_exit(context, renderer)\n {\n\n }\n\n resize()\n {\n\n }\n\n dispose()\n {\n\n }\n}\n\nexport { BaseRender };\n","\nclass Browser\n{\n async init()\n {\n this.browser_name = '';\n this.agent = window.navigator.userAgent.toLowerCase();\n\n this.has_web_xr_support = 'xr' in navigator;\n this.is_vr = this.has_web_xr_support && await navigator.xr.isSessionSupported('immersive-vr');\n\n switch (true)\n {\n case this.agent.indexOf('edge') > -1:\n this.browser_name = 'edge_ie';\n break;\n case this.agent.indexOf('edg') > -1:\n this.browser_name = 'edge_chromium';\n break;\n case this.agent.indexOf('opr') > -1 && !!window.opr:\n this.browser_name = 'opera';\n break;\n case this.agent.indexOf('chrome') > -1 && !!window.chrome:\n this.browser_name = 'chrome';\n break;\n case this.agent.indexOf('trident') > -1:\n this.browser_name = 'iexplorer';\n break;\n case this.agent.indexOf('firefox') > -1:\n this.browser_name = 'firefox';\n break;\n case this.agent.indexOf('safari') > -1:\n this.browser_name = 'safari';\n break;\n default:\n this.browser_name = 'other';\n break;\n }\n\n this.version = this.get_version();\n }\n\n get name()\n {\n return this.browser_name;\n }\n\n get is_safari()\n {\n return this.browser_name === 'safari';\n }\n\n get is_chrome()\n {\n return this.browser_name === 'chrome';\n }\n\n get is_edge()\n {\n return this.browser_name === 'edge_ie';\n }\n\n get is_edge_chromium()\n {\n return this.browser_name === 'edge_chromium';\n }\n\n get has_webm()\n {\n return !!(this.is_chrome || this.is_firefox || this.is_edge_chromium);\n }\n\n get has_hvec()\n {\n return this.is_safari;\n }\n\n get preferred_video_extension()\n {\n return this.has_webm ? 'webm' : this.has_hvec ? 'hvec.mp4' : 'mp4';\n }\n\n get_version()\n {\n const ua = navigator.userAgent;\n let tem = '';\n let version = 0;\n\n let M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [];\n\n if (/trident/i.test(M[1]))\n {\n tem = /\\brv[ :]+(\\d+)/g.exec(ua) || [];\n version = 'IE ' + (tem[1] || '');\n }\n if (M[1] === 'Chrome')\n {\n tem = ua.match(/\\b(OPR|Edge)\\/(\\d+)/);\n if (tem != null) version = tem.slice(1).join(' ').replace('OPR', 'Opera');\n }\n\n M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];\n if ((tem = ua.match(/version\\/(\\d+(\\.\\d+)?)/i)) != null) M.splice(1, 1, tem[1]);\n\n version = M.join(' ');\n\n return Number(version.split(' ')[1]);\n }\n}\n\nconst browser = new Browser();\nexport { browser as Browser };\n","class Validation\n{\n constructor()\n {}\n\n static is_int(n)\n {\n return Number(n) === n && n % 1 === 0;\n }\n\n static is_float(n)\n {\n return Number(n) === n && n % 1 !== 0;\n }\n\n static is_number(n)\n {\n return this.is_int(n) || this.is_float(n);\n }\n\n static is_json(str)\n {\n try\n {\n JSON.parse(str);\n }\n catch (e)\n {\n return false;\n }\n\n return true;\n }\n}\n\nexport { Validation };\n","import { Browser } from '../Browser';\r\nimport { Validation } from '../utilities/Validation';\r\n\r\nclass AbstractLoader\r\n{\r\n constructor(resource_id, url, size = 1)\r\n {\r\n this.resource_id = resource_id;\r\n this.url = url;\r\n this.loaded_bytes = 0;\r\n this.total_bytes = size;\r\n\r\n this.has_finished = false;\r\n this.has_error = false;\r\n this.error_message = 'none';\r\n }\r\n\r\n __update_downloaded_bytes(loaded, total)\r\n {\r\n loaded = Validation.is_number(loaded) ? loaded : 1;\r\n total = Validation.is_number(total) ? total : 1;\r\n\r\n this.loaded_bytes = loaded;\r\n\r\n if (total > 0)\r\n {\r\n this.total_bytes = total;\r\n }\r\n\r\n if (this.loaded_bytes > this.total_bytes)\r\n {\r\n console.warn('Total bytes is smaller than loaded ones. Please set total bytes by hand to:', this.url);\r\n }\r\n }\r\n\r\n __loading_ended()\r\n {\r\n this.has_finished = true;\r\n }\r\n\r\n __set_error(message)\r\n {\r\n this.has_error = true;\r\n this.error_message = message;\r\n }\r\n\r\n print_error()\r\n {\r\n console.error('Error while loading ' + this.resource_id + '\\n\\t path: ' + this.url + '\\n\\t\\t' + this.error_message);\r\n }\r\n\r\n load(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n const cache = Browser.is_safari ? 'no-cache' : 'default';\r\n\r\n fetch(this.url, {\r\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\r\n mode: 'cors', // no-cors, *cors, same-origin\r\n cache: cache, // *default, no-cache, reload, force-cache, only-if-cached\r\n credentials: 'same-origin', // include, *same-origin, omit\r\n redirect: 'follow' // manual, *follow, error\r\n })\r\n .then(this.on_progress.bind(this, resource_container))\r\n .catch(this.__on_error.bind(this));\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n\r\n async on_progress(resource_container, response)\r\n {\r\n const response_clone = response.clone();\r\n const reader = response.body.getReader();\r\n\r\n // Step 2: get total length\r\n const contentLength = +response.headers.get('Content-Length');\r\n\r\n // Step 3: read the data\r\n let receivedLength = 0; // received that many bytes at the moment\r\n\r\n while (true)\r\n {\r\n const { done, value } = await reader.read();\r\n\r\n if (done)\r\n {\r\n break;\r\n }\r\n\r\n receivedLength += value.length;\r\n\r\n this.__update_downloaded_bytes(receivedLength, contentLength);\r\n // console.log(`Received ${receivedLength} of ${contentLength}`);\r\n }\r\n\r\n this.on_preloaded_finished(resource_container, response_clone);\r\n }\r\n\r\n on_preloaded_finished(resource_container, response)\r\n {\r\n }\r\n\r\n __on_error(data)\r\n {\r\n console.error(data);\r\n }\r\n}\r\n\r\nexport { AbstractLoader };\r\n","import { Audio as TAudio } from 'three';\nimport { PositionalAudio as TPositionalAudio } from 'three';\n\nclass AudioClip\n{\n constructor(buffer, loop = true, volume = 1, positional = false)\n {\n this.buffer = buffer;\n this.loop = loop;\n this.volume = volume;\n this.positional = positional;\n\n this.audio = undefined;\n }\n\n init(audio_listener)\n {\n if (this.positional)\n {\n this.audio = new TPositionalAudio(audio_listener);\n }\n else\n {\n this.audio = new TAudio(audio_listener);\n }\n\n this.audio.setBuffer(this.buffer);\n this.audio.setLoop(this.loop);\n\n // This prevents undesired volume at the beginning of playing\n this.audio.gain.gain.value = 0;\n\n this.audio.setVolume(this.loop ? 0 : this.volume);\n }\n\n play()\n {\n this.audio.play();\n }\n\n pause()\n {\n this.audio.pause();\n }\n\n stop()\n {\n this.audio.stop();\n }\n\n get is_playing()\n {\n return this.audio.isPlaying;\n }\n}\n\nexport { AudioClip };\n","import { AudioContext } from 'three';\r\n\r\nimport { AudioClip } from '../components/AudioClip';\r\nimport { AbstractLoader } from './AbstractLoader';\r\n\r\nclass AudioLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, loop = true, volume = 0, size, positional = false)\r\n {\r\n super(resource_id, url, size);\r\n this.loop = loop;\r\n this.volume = volume;\r\n this.positional = positional;\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n // if (!window.user_interaction_for_audio)\r\n // {\r\n // setTimeout(this.on_preloaded_finished.bind(this, resource_container), 100);\r\n // }\r\n // else\r\n // {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.instantiate_audio(resource_container);\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n // }\r\n }\r\n\r\n instantiate_audio(resource_container)\r\n {\r\n const context = AudioContext.getContext();\r\n\r\n const buffer = context.createBuffer(2, 22050, 44100);\r\n\r\n fetch(this.url).then(r => r.blob()).then((response) =>\r\n {\r\n if (response.arrayBuffer)\r\n {\r\n response.arrayBuffer().then((array_buffer) =>\r\n {\r\n context.decodeAudioData(array_buffer, (audio_buffer) =>\r\n {\r\n resource_container.set_resource(\r\n this.resource_id,\r\n this.url,\r\n new AudioClip(audio_buffer, this.loop, this.volume, this.positional)\r\n );\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n });\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(\r\n this.resource_id,\r\n this.url,\r\n new AudioClip(buffer, this.loop, this.volume, this.positional)\r\n );\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport { AudioLoader };\r\n","class ResourceContainer\n{\n init()\n {\n this.resources = {};\n this.resources_by_url = {};\n }\n\n set_resource(name, url, resource)\n {\n const urls = Object.keys(this.resources_by_url);\n\n if (urls.includes(url))\n {\n this.resources[name] = this.resources_by_url[url];\n }\n else\n {\n this.resources[name] = resource;\n this.resources_by_url[url] = resource;\n }\n }\n\n get_resource(name)\n {\n return this.resources[name];\n }\n\n get(name)\n {\n return this.resources[name];\n }\n}\n\nconst resource_container = new ResourceContainer();\nexport { resource_container as ResourceContainer };\n","import { ResourceContainer } from '../ResourceContainer';\n\nclass AsyncAbstractLoader\n{\n constructor(name, assets, worker)\n {\n this.resource_container = ResourceContainer;\n this.assets = assets;\n this.name = name;\n\n this.worker = worker;\n\n this.bound_on_message = this.on_message.bind(this);\n\n this.__setup_worker();\n\n this.assets_loaders = this.__setup_loaders();\n }\n\n load()\n {\n this.worker.postMessage({ type: 'load', loader_name: this.name });\n }\n\n is_loaded()\n {\n for (let i = 0; i < this.assets_loaders.length; i++)\n {\n const asset_loader = this.assets_loaders[i];\n\n if (!asset_loader.has_finished)\n {\n return false;\n }\n else\n {\n if (asset_loader.has_error)\n {\n // Restore original url so the error message make more sense\n // asset_loader.url = asset_loader.original_url;\n\n asset_loader.print_error();\n }\n }\n }\n\n return true;\n }\n\n get_progress()\n {\n return this.__get_loaded_bytes() / this.__get_total_bytes();\n }\n\n __get_loaded_bytes()\n {\n let loaded_bytes = 1;\n\n for (let i = 0; i < this.assets_loaders.length; i++)\n {\n loaded_bytes += this.assets_loaders[i].loaded_bytes;\n }\n\n return loaded_bytes;\n }\n\n __get_total_bytes()\n {\n let total_bytes = 1;\n\n for (let i = 0; i < this.assets_loaders.length; i++)\n {\n total_bytes += this.assets_loaders[i].total_bytes;\n }\n\n return total_bytes;\n }\n\n get_assets_names()\n {\n const names = [];\n\n for (let i = 0; i < this.assets.length; i++)\n {\n const asset = this.assets[i];\n\n names.push(asset.name);\n }\n\n return names;\n }\n\n static create_worker()\n {\n const worker = new Worker(\n new URL('./assets_loader/AsyncAssetsLoaderWorker.js', import.meta.url),\n { name: 'OHZI - AssetLoader', type: 'module' });\n\n return worker;\n }\n\n __setup_worker()\n {\n this.worker.addEventListener('message', this.bound_on_message);\n\n this.worker.postMessage({ type: 'assets', loader_name: this.name, data: this.assets });\n }\n\n on_message(e)\n {\n const message = e.data;\n\n switch (message.type)\n {\n case `asset_loaded_${this.name}`:\n this.__on_assets_loaded(message.data);\n break;\n }\n }\n\n __on_assets_loaded(resources)\n {\n this.worker.removeEventListener('message', this.bound_on_message);\n\n for (let i = 0; i < this.assets_loaders.length; i++)\n {\n const asset_loader = this.assets_loaders[i];\n\n // Save original url to show in a possible error\n asset_loader.original_url = asset_loader.url;\n\n asset_loader.url = resources[asset_loader.resource_id];\n\n asset_loader.on_preloaded_finished(this.resource_container);\n }\n }\n\n __setup_loaders()\n {\n console.warn('Not implemented');\n }\n}\n\nexport { AsyncAbstractLoader };\n","import { AudioLoader } from '../resource_loader/AudioLoader';\nimport { AsyncAbstractLoader } from './AsyncAbstractLoader';\n\nclass AsyncAudiosLoader extends AsyncAbstractLoader\n{\n constructor(scene_name, assets, worker)\n {\n super(scene_name, assets, worker);\n }\n\n // Called from parent\n __setup_loaders()\n {\n const loaders = [];\n\n for (let i = 0; i < this.assets.length; i++)\n {\n const asset_data = this.assets[i];\n\n loaders.push(new AudioLoader(\n asset_data.name,\n asset_data.url,\n asset_data.loop,\n asset_data.volume,\n asset_data.size,\n asset_data.positional\n ));\n }\n\n return loaders;\n }\n}\n\nexport { AsyncAudiosLoader };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\r\n\r\nclass GLTFDRACOLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, loader, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new GLTFLoader();\r\n\r\n this.loader.setDRACOLoader(loader);\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (gltf) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, gltf);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { GLTFDRACOLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { GLTFLoader as TGLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\r\n\r\nclass GLTFLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new TGLTFLoader();\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (gltf) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, gltf);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { GLTFLoader };\r\n","import { GLTFDRACOLoader } from '../resource_loader/GLTFDRACOLoader';\nimport { GLTFLoader } from '../resource_loader/GLTFLoader';\nimport { ResourceContainer } from '../ResourceContainer';\nimport { AsyncAbstractLoader } from './AsyncAbstractLoader';\n\nclass AsyncObjectsLoader extends AsyncAbstractLoader\n{\n constructor(scene_name, assets, worker)\n {\n super(scene_name, assets, worker);\n }\n\n // Called from parent\n __setup_loaders()\n {\n const loaders = [];\n\n for (let i = 0; i < this.assets.length; i++)\n {\n const asset_data = this.assets[i];\n\n if (asset_data.draco)\n {\n const draco_loader = ResourceContainer.get('draco_loader');\n\n loaders.push(new GLTFDRACOLoader(asset_data.name, asset_data.url, draco_loader, asset_data.size));\n }\n else\n {\n loaders.push(new GLTFLoader(asset_data.name, asset_data.url, asset_data.size));\n }\n }\n\n return loaders;\n }\n}\n\nexport { AsyncObjectsLoader };\n","import { Browser } from '../Browser';\r\nimport { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { NoColorSpace, SRGBColorSpace, Texture } from 'three';\r\n\r\nexport class AsyncTextureLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size, flipY = true, premultiplyAlpha = false, colorSpaceConversion = true)\r\n {\r\n super(resource_id, url, size);\r\n\r\n this.original_url = '';\r\n\r\n this.colorSpaceConversion = colorSpaceConversion;\r\n this.premultiplyAlpha = premultiplyAlpha;\r\n this.flipY = flipY;\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (Browser.is_safari) // && Browser.version < 15\r\n {\r\n this.load_with_old_method(resource_container);\r\n }\r\n else\r\n {\r\n this.load_with_new_method(resource_container);\r\n }\r\n }\r\n\r\n load_with_old_method(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n const texture = new Texture();\r\n const image = new Image();\r\n\r\n image.src = this.url;\r\n\r\n image.onload = () =>\r\n {\r\n texture.image = image;\r\n texture.flipY = this.flipY;\r\n texture.premultiplyAlpha = this.premultiplyAlpha;\r\n texture.colorSpace = this.colorSpaceConversion ? SRGBColorSpace : NoColorSpace;\r\n texture.needsUpdate = true;\r\n\r\n resource_container.set_resource(this.resource_id, this.url, texture);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n };\r\n\r\n image.onerror = () =>\r\n {\r\n console.error('The source image could not be decoded.', this.original_url);\r\n };\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n\r\n load_with_new_method(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n const fetchOptions = {};\r\n fetchOptions.credentials = 'same-origin';\r\n // fetchOptions.headers = this.requestHeader;\r\n\r\n fetch(this.url, fetchOptions).then((res) =>\r\n {\r\n return res.blob();\r\n }).then((blob) =>\r\n {\r\n return createImageBitmap(blob, {\r\n colorSpaceConversion: this.colorSpaceConversion ? 'default' : 'none',\r\n imageOrientation: this.flipY ? 'flipY' : 'none',\r\n premultiplyAlpha: this.premultiplyAlpha ? 'premultiply' : 'none'\r\n });\r\n }).then((imageBitmap) =>\r\n {\r\n const texture = new Texture(imageBitmap);\r\n texture.flipY = this.flipY;\r\n texture.premultiplyAlpha = this.premultiplyAlpha;\r\n texture.colorSpace = this.colorSpaceConversion ? SRGBColorSpace : NoColorSpace;\r\n texture.needsUpdate = true;\r\n\r\n resource_container.set_resource(this.resource_id, this.url, texture);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }).catch((e) =>\r\n {\r\n console.error(e, this.original_url);\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n","import { AbstractLoader } from './AbstractLoader';\n\n// import { sRGBEncoding } from 'three';\n\nclass BasisLoader extends AbstractLoader\n{\n constructor(resource_id, url, loader, size)\n {\n super(resource_id, url, size);\n\n this.loader = loader;\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (basis) =>\n {\n // basis.encoding = sRGBEncoding;\n\n resource_container.set_resource(this.resource_id, this.url, basis);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { BasisLoader };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { CubeTextureLoader } from 'three';\r\n\r\nclass CubemapLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, extension, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new CubeTextureLoader();\r\n this.loader.setPath(url + '/');\r\n this.urls = [\r\n `px.${extension}`,\r\n `nx.${extension}`,\r\n `py.${extension}`,\r\n `ny.${extension}`,\r\n `pz.${extension}`,\r\n `nz.${extension}`\r\n ];\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.urls, (image) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, image);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (error) =>\r\n {\r\n this.__set_error('Image could not be loaded. Maybe wrong name or path, I don\\'t know' + '¯\\\\_(ツ)_/¯', error);\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { CubemapLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\n\nimport { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader.js';\n\nclass RGBETextureLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n this.loader = new RGBELoader();\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (hdr) =>\n {\n resource_container.set_resource(this.resource_id, this.url, hdr);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { RGBETextureLoader };\n","\nimport { AsyncTextureLoader } from '../resource_loader/AsyncTextureLoader';\nimport { BasisLoader } from '../resource_loader/BasisLoader';\nimport { CubemapLoader } from '../resource_loader/CubemapLoader';\nimport { RGBETextureLoader } from '../resource_loader/RGBETextureLoader';\nimport { ResourceContainer } from '../ResourceContainer';\nimport { AsyncAbstractLoader } from './AsyncAbstractLoader';\n\nclass AsyncTexturesLoader extends AsyncAbstractLoader\n{\n constructor(scene_name, assets, worker)\n {\n super(scene_name, assets, worker);\n }\n\n // Called from parent\n __setup_loaders()\n {\n const loaders = [];\n\n for (let i = 0; i < this.assets.length; i++)\n {\n const asset_data = this.assets[i];\n\n switch (asset_data.kind)\n {\n case 'regular':\n loaders.push(new AsyncTextureLoader(\n asset_data.name,\n asset_data.url,\n asset_data.size\n ));\n\n break;\n case 'basis':\n loaders.push(new BasisLoader(\n asset_data.name,\n asset_data.url,\n ResourceContainer.get('basis_loader'),\n asset_data.size\n ));\n\n break;\n case 'hdr':\n loaders.push(new RGBETextureLoader(\n asset_data.name,\n asset_data.url,\n asset_data.size\n ));\n\n break;\n case 'cubemap':\n loaders.push(new CubemapLoader(\n asset_data.name,\n asset_data.url,\n asset_data.extension,\n asset_data.size\n ));\n\n break;\n default:\n break;\n }\n }\n\n return loaders;\n }\n}\n\nexport { AsyncTexturesLoader };\n","class CompilatorManager\n{\n constructor(compilators)\n {\n this.compilators = compilators;\n this.first_update = true;\n\n this.index = 0;\n }\n\n update()\n {\n if (!this.is_finished())\n {\n if (this.compilators[this.index].finished)\n {\n this.index++;\n this.first_update = true;\n }\n else\n {\n if (this.first_update)\n {\n this.compilators[this.index].start();\n this.first_update = false;\n }\n else\n {\n this.compilators[this.index].update();\n }\n }\n }\n }\n\n is_finished()\n {\n return this.index === this.compilators.length;\n }\n}\n\nexport { CompilatorManager };\n","import { ResourceContainer } from 'ohzi-core';\n\nimport { AsyncAudiosLoader } from '../../loaders/AsyncAudiosLoader';\nimport { AsyncObjectsLoader } from '../../loaders/AsyncObjectsLoader';\nimport { AsyncTexturesLoader } from '../../loaders/AsyncTexturesLoader';\nimport { CompilatorManager } from './CompilatorManager';\n\nexport class LoadingState\n{\n constructor(scene, { SceneCompilator, TexturesCompilator, AudiosCompilator })\n {\n this.scene = scene;\n\n this.SceneCompilator = SceneCompilator;\n this.TexturesCompilator = TexturesCompilator;\n this.AudiosCompilator = AudiosCompilator;\n\n this.loaders = [];\n this.compilators = [];\n\n this.callback_called = false;\n }\n\n set_assets(scene_objects, scene_textures, scene_sounds)\n {\n this.scene_objects = scene_objects;\n this.scene_textures = scene_textures;\n this.scene_sounds = scene_sounds;\n }\n\n get loading_progress()\n {\n let progress = 0;\n\n for (let i = 0; i < this.loaders.length; i++)\n {\n const loader = this.loaders[i];\n progress += loader.get_progress();\n }\n return progress / this.loaders.length;\n }\n\n load()\n {\n this.setup_loader();\n\n // TODO: improve this.\n // We call load method to one of the 3 loaders because they share the same worker.\n this.loaders[0].load();\n }\n\n on_enter()\n {\n }\n\n on_exit()\n {\n }\n\n update()\n {\n\n }\n\n setup_loader()\n {\n const compilators = [];\n\n const assets_worker = ResourceContainer.get('assets_worker');\n assets_worker.postMessage({ type: 'reset', loader_name: this.scene.name });\n\n const object_loader = new AsyncObjectsLoader(this.scene.name, this.scene_objects, assets_worker);\n this.loaders.push(object_loader);\n compilators.push(new this.SceneCompilator(this.scene));\n\n const textures_loader = new AsyncTexturesLoader(this.scene.name, this.scene_textures, assets_worker);\n this.loaders.push(textures_loader);\n compilators.push(new this.TexturesCompilator(textures_loader.get_assets_names()));\n\n const audios_loader = new AsyncAudiosLoader(this.scene.name, this.scene_sounds, assets_worker);\n this.loaders.push(audios_loader);\n compilators.push(new this.AudiosCompilator(audios_loader.get_assets_names()));\n\n this.compilator_manager = new CompilatorManager(compilators);\n }\n\n is_loaded()\n {\n let loaded = true;\n\n for (let i = 0; i < this.loaders.length; i++)\n {\n const loader = this.loaders[i];\n\n loaded = loaded && loader.is_loaded();\n }\n\n return loaded;\n }\n\n is_compiled()\n {\n this.compilator_manager.update();\n return this.compilator_manager.is_finished();\n }\n}\n","import { LoadingState } from './LoadingState';\n\nexport class HighQualityLoadingState extends LoadingState\n{\n on_enter()\n {\n super.on_enter();\n // this.setup_loader();\n }\n\n on_exit()\n {\n super.on_exit();\n }\n\n update()\n {\n super.update();\n\n if (this.is_loaded())\n {\n // if (this.is_compiled())\n // {\n this.scene.on_high_quality_assets_ready();\n // }\n }\n }\n}\n","import { LoadingState } from './LoadingState';\n\nexport class RegularLoadingState extends LoadingState\n{\n constructor(scene, compilators)\n {\n super(scene, compilators);\n\n this.on_assets_ready_called = false;\n }\n\n on_enter()\n {\n super.on_enter();\n // this.setup_loader();\n }\n\n on_exit()\n {\n super.on_exit();\n }\n\n update()\n {\n super.update();\n\n if (this.is_loaded())\n {\n if (!this.on_assets_ready_called)\n {\n this.scene.on_assets_ready();\n this.on_assets_ready_called = true;\n }\n\n if (this.is_compiled())\n {\n this.scene.on_assets_compiled();\n }\n }\n }\n}\n","import { Scene } from 'three';\n// import { AvatarSystem } from '../../components/avatar/AvatarSystem';\n\nimport { HighQualityLoadingState } from './loading_states/HighQualityLoadingState';\nimport { LoadingState } from './loading_states/LoadingState';\nimport { RegularLoadingState } from './loading_states/RegularLoadingState';\n\nclass AbstractScene extends Scene\n{\n constructor({ name, compilators })\n {\n super();\n\n this.name = name;\n\n this.is_loaded = false;\n this.is_high_loaded = false;\n\n this.loading_states = {\n regular: new RegularLoadingState(this, compilators),\n high: new HighQualityLoadingState(this, compilators)\n };\n\n this.current_loading_state = new LoadingState(this, compilators);\n // this.set_loading_state(this.loading_states.regular);\n }\n\n get loading_progress()\n {\n return this.current_loading_state.loading_progress;\n }\n\n init()\n {\n }\n\n load()\n {\n this.init();\n\n this.set_loading_state(this.loading_states.regular);\n this.current_loading_state.load();\n }\n\n get_objects()\n {\n const objects = [];\n\n this.traverse(child =>\n {\n if (child.geometry)\n {\n objects.push(child);\n\n // if (child.name === 'pitch_floor')\n // {\n // objects.push(child);\n // }\n // else\n // {\n // child.visible = false;\n // }\n }\n });\n\n return objects;\n }\n\n dispose_cpu()\n {\n this.traverse(child =>\n {\n if (child.geometry)\n {\n child.geometry.attributes.position.array = new Float32Array(3);\n if (child.geometry.attributes.normal)\n {\n child.geometry.attributes.normal.array = new Float32Array(3);\n }\n if (child.geometry.attributes.uv)\n {\n child.geometry.attributes.uv.array = new Float32Array(2);\n }\n if (child.material.map)\n {\n for (let i = 0; i < child.material.map.mipmaps.length; i++)\n {\n child.material.map.mipmaps[i] = new Uint8Array(4);\n }\n }\n }\n });\n\n // AvatarSystem.component_container.component_instancer.data_texture.data = new Float32Array(4);\n }\n\n dispose()\n {\n this.traverse(child =>\n {\n if (child.material)\n {\n if (child.material.map)\n {\n child.material.map.dispose();\n }\n\n child.material.dispose();\n child.geometry.dispose();\n }\n });\n // AvatarSystem.component_container.component_instancer.data_texture.data = new Float32Array(4);\n }\n\n set_assets(scene_objects, scene_textures, scene_sounds)\n {\n this.loading_states.regular.set_assets(scene_objects, scene_textures, scene_sounds);\n }\n\n set_high_assets(scene_objects, scene_textures, scene_sounds)\n {\n this.loading_states.high.set_assets(scene_objects, scene_textures, scene_sounds);\n }\n\n set_loading_state(state)\n {\n this.current_loading_state.on_exit();\n this.current_loading_state = state;\n this.current_loading_state.on_enter();\n }\n\n // Called from transition\n update_loading_state()\n {\n if (!this.is_high_loaded)\n {\n this.current_loading_state.update();\n }\n }\n\n update()\n {\n this.update_loading_state();\n }\n\n on_assets_ready()\n {\n\n }\n\n on_assets_compiled()\n {\n this.is_loaded = true;\n\n // Load high quality assets\n this.set_loading_state(this.loading_states.high);\n this.current_loading_state.load();\n }\n\n on_high_quality_assets_ready()\n {\n this.is_high_loaded = true;\n }\n}\n\nexport { AbstractScene };\n","\nclass OMath\n{\n constructor()\n {}\n\n static linear_map(value,\n from_range_start_value,\n from_range_end_value,\n to_range_start_value,\n to_range_end_value)\n {\n return ((value - from_range_start_value) / (from_range_end_value - from_range_start_value)) * (to_range_end_value - to_range_start_value) + to_range_start_value;\n }\n\n static between(value, min, max)\n {\n return (value >= min && value <= max);\n }\n\n static mod(number, divisor)\n {\n return ((number % divisor) + divisor) % divisor;\n }\n\n static rgb_to_hex(rgb)\n {\n rgb.r = Math.round(rgb.r * 255).toString(16);\n rgb.g = Math.round(rgb.g * 255).toString(16);\n rgb.b = Math.round(rgb.b * 255).toString(16);\n\n if (rgb.r.length === 1)\n {\n rgb.r = '0' + rgb.r;\n }\n if (rgb.g.length === 1)\n {\n rgb.g = '0' + rgb.g;\n }\n if (rgb.b.length === 1)\n {\n rgb.b = '0' + rgb.b;\n }\n\n return '#' + rgb.r + rgb.g + rgb.b;\n }\n\n static project_points_on_plane(points, plane)\n {\n const projected_point = points[0].clone();\n projected_point.set(0, 0, 0);\n\n const points_on_plane = [];\n\n for (let i = 0; i < points.length; i++)\n {\n plane.projectPoint(points[i], projected_point);\n points_on_plane.push(projected_point.clone());\n }\n\n return points_on_plane;\n }\n\n static matrix4_lerp(from, to, target, t)\n {\n for (let i = 0; i < 16; i++)\n {\n target.elements[i] = this.lerp(from.elements[i], to.elements[i], t);\n }\n }\n\n static equals(x1, x2)\n {\n return Math.abs(x1 - x2) < 0.000001;\n }\n\n static lerp(x, y, t)\n {\n return (1 - t) * x + t * y;\n }\n\n static clamp(value, min, max)\n {\n return Math.max(min, Math.min(max, value));\n }\n\n static euclideanModulo(n, m)\n {\n return ((n % m) + m) % m;\n }\n\n static pingpong(x, length = 1)\n {\n return length - Math.abs(OMath.euclideanModulo(x, length * 2) - length);\n }\n\n static degToRad(degrees)\n {\n return degrees * (Math.PI / 180);\n }\n\n static radToDeg(radians)\n {\n return radians * (180 / Math.PI);\n }\n\n static deg_to_rad(degrees)\n {\n return degrees * (Math.PI / 180);\n }\n\n static rad_to_deg(radians)\n {\n return radians * (180 / Math.PI);\n }\n\n static perspective_divide(v)\n {\n v.x /= v.w;\n v.y /= v.w;\n v.z /= v.w;\n return v;\n }\n\n static points_average(points)\n {\n const center = points[0].clone();\n for (let i = 1; i < points.length; i++)\n {\n center.add(points[i]);\n }\n center.multiplyScalar(1 / points.length);\n return center;\n }\n\n static get_random_color()\n {\n const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e', 'f'];\n\n let col = '#';\n col += arr[Math.floor(Math.random() * 16)];\n col += arr[Math.floor(Math.random() * 16)];\n\n col += arr[Math.floor(Math.random() * 16)];\n col += arr[Math.floor(Math.random() * 16)];\n\n col += arr[Math.floor(Math.random() * 16)];\n col += arr[Math.floor(Math.random() * 16)];\n return col;\n }\n\n static saturate(x)\n {\n return OMath.clamp(x, 0, 1);\n }\n}\n\nexport { OMath };\n","\nimport { OMath } from '../utilities/OMath';\n\nclass ActionSequencer\n{\n constructor(context = {})\n {\n this.previous_elapsed_time = -0.00001;\n this.elapsed_time = -0.00001;\n this.playback_speed = this.__get_playback_speed();\n this.playing = true;\n\n this.action_events = [];\n this.context = context;\n\n this.initial_context = JSON.parse(JSON.stringify(context));\n\n this.tmp_t = 0;\n\n this.channels = {};\n\n const channel_names = Object.keys(context);\n for (let i = 0; i < channel_names.length; i++)\n {\n this.channels[channel_names[i]] = [];\n }\n\n this.duration = 0;\n }\n\n play()\n {\n this.playing = true;\n }\n\n stop()\n {\n this.playing = false;\n }\n\n reset()\n {\n this.elapsed_time = -0.00001;\n }\n\n skip()\n {\n const duration = this.get_duration();\n this.__play_clips(this.elapsed_time, duration + 0.0001);\n this.elapsed_time = duration;\n }\n\n update(delta_time)\n {\n if (this.playing)\n {\n this.previous_elapsed_time = this.elapsed_time;\n this.elapsed_time += delta_time * this.playback_speed;\n this.__play_clips(this.previous_elapsed_time, this.elapsed_time);\n }\n }\n\n set_progress(time)\n {\n this.previous_elapsed_time = this.elapsed_time;\n this.elapsed_time = OMath.clamp(time, 0, this.duration);\n this.__play_clips(this.elapsed_time, this.elapsed_time);\n }\n\n set_normalized_progress(t)\n {\n this.previous_elapsed_time = this.elapsed_time;\n this.elapsed_time = OMath.clamp(t, 0, 1) * this.duration;\n this.__play_clips(this.elapsed_time, this.elapsed_time);\n }\n\n get_progress()\n {\n return OMath.clamp(this.elapsed_time / this.get_duration(), 0, 1);\n }\n\n is_finished()\n {\n return this.elapsed_time > this.get_duration();\n }\n\n add_action_event(trigger_time, action)\n {\n this.action_events.push({\n trigger_time: trigger_time,\n action: action\n });\n\n this.duration = Math.max(this.duration, trigger_time);\n }\n\n add_action_interpolator(from, to, interpolator, use_dynamic_from_value = false)\n {\n if (use_dynamic_from_value)\n {\n const keyframes = this.channels[interpolator.attribute_name];\n\n if (keyframes === undefined)\n {\n console.error(`${interpolator.attribute_name} missing in initial state data.`);\n }\n\n if (keyframes.length === 0)\n {\n interpolator.from = this.initial_context[interpolator.attribute_name];\n }\n else\n {\n interpolator.from = keyframes[keyframes.length - 1].interpolator.to;\n }\n }\n\n const keyframe = {\n from: from,\n to: to,\n interpolator: interpolator\n };\n\n this.duration = Math.max(this.duration, to);\n this.channels[interpolator.attribute_name].push(keyframe);\n }\n\n get_current_target_value(name)\n {\n const keyframe = this.__get_current_keyframe(name, this.elapsed_time);\n\n if (this.elapsed_time < keyframe.from)\n {\n return keyframe.interpolator.evaluate(0);\n }\n\n return keyframe.interpolator.evaluate(1);\n }\n\n get_current_starting_value(name)\n {\n const keyframe = this.__get_current_keyframe(name, this.elapsed_time);\n\n return keyframe.interpolator.evaluate(0);\n }\n\n get_current_progress(name)\n {\n const keyframe = this.__get_current_keyframe(name, this.elapsed_time);\n const t = this.__linear_map_01(this.elapsed_time, keyframe.from, keyframe.to);\n\n return keyframe.interpolator.easing_function(t);\n }\n\n get_duration()\n {\n return this.duration;\n }\n\n __play_clips(from, to)\n {\n if (this.elapsed_time > this.previous_elapsed_time)\n {\n this.__play_events(this.previous_elapsed_time, this.elapsed_time);\n }\n const channel_names = Object.keys(this.initial_context);\n\n for (let i = 0; i < channel_names.length; i++)\n {\n const name = channel_names[i];\n const keyframe = this.__get_current_keyframe(name, from);\n\n this.context[name] = this.evaluate_keyframe(keyframe, from);\n }\n }\n\n __play_events(from, to)\n {\n for (let i = 0; i < this.action_events.length; i++)\n {\n const trigger_time = this.action_events[i].trigger_time;\n if (OMath.between(trigger_time, from, to))\n {\n console.log('Play event: ' + this.action_events[i].action.constructor.name + ' at ' + this.action_events[i].trigger_time);\n this.action_events[i].action.trigger();\n }\n }\n }\n\n evaluate_keyframe(keyframe, time)\n {\n this.tmp_t = this.__linear_map_01(time, keyframe.from, keyframe.to);\n\n return keyframe.interpolator.evaluate(OMath.clamp(this.tmp_t, 0, 1));\n }\n\n get_keyframes(channel_name)\n {\n return this.channels[channel_name];\n }\n\n is_channel_redefined(channel_name)\n {\n for (let i = 0; i < this.channels[channel_name].length; i++)\n {\n const keyframe = this.channels[channel_name][i];\n\n if (keyframe.interpolator.initial)\n {\n return false;\n }\n }\n\n return true;\n }\n\n __linear_map_01(value,\n from_range_start_value,\n from_range_end_value)\n {\n return OMath.saturate(((value - from_range_start_value) / (from_range_end_value - from_range_start_value)) * (1 - 0) + 0);\n }\n\n __get_current_keyframe(channel_name, time)\n {\n let current = undefined;\n\n const keyframes = this.channels[channel_name];\n\n for (let i = 0; i < keyframes.length; i++)\n {\n const keyframe = keyframes[i];\n\n if (time >= keyframe.from && time <= keyframe.to)\n {\n current = keyframe;\n return current;\n }\n }\n\n let min = Infinity;\n\n for (let i = 0; i < keyframes.length; i++)\n {\n const keyframe = keyframes[i];\n const distance = Math.abs(keyframe.to - time);\n\n if (distance < min)\n {\n current = keyframe;\n min = distance;\n }\n }\n\n return current;\n }\n\n __get_playback_speed()\n {\n const url_params = new URLSearchParams(window.location.search);\n\n const transitions_velocity = url_params.get('transitions_velocity');\n\n if (transitions_velocity)\n {\n return Number(transitions_velocity);\n }\n else\n {\n return 1;\n }\n }\n}\n\nexport { ActionSequencer };\n","class EasingFunctions\n{\n constructor()\n {}\n\n static linear(x)\n {\n return x;\n }\n\n static triangular(x)\n {\n return 1 - Math.abs((x * 2) % (1 * 2) - 1);\n }\n\n static ease_in_sine(x)\n {\n return 1 - Math.cos(x * 3.1415926 / 2);\n }\n\n static ease_out_sine(x)\n {\n return Math.sin(x * 3.1415926 / 2);\n }\n\n static ease_in_out_sine(x)\n {\n return -(Math.cos(3.1415926 * x) - 1) / 2;\n }\n\n static ease_in_cubic(x)\n {\n return x * x * x;\n }\n\n static ease_out_cubic(x)\n {\n return 1 - Math.pow(1 - x, 3);\n }\n\n static ease_in_out_cubic(x)\n {\n return x < 0.5\n ? 4 * x * x * x\n : 1 - Math.pow(-2 * x + 2, 3) / 2;\n }\n\n static ease_in_quad(x)\n {\n return x * x;\n }\n\n static ease_out_quad(x)\n {\n return 1 - (1 - x) * (1 - x);\n }\n\n static ease_in_out_quad(x)\n {\n return x < 0.5\n ? 2 * x * x\n : 1 - Math.pow(-2 * x + 2, 2) / 2;\n }\n\n static ease_in_quart(x)\n {\n return x * x * x * x;\n }\n\n static ease_out_quart(x)\n {\n return 1 - Math.pow(1 - x, 4);\n }\n\n static ease_in_out_quart(x)\n {\n return x < 0.5\n ? 8 * x * x * x * x\n : 1 - Math.pow(-2 * x + 2, 4) / 2;\n }\n\n static ease_in_quint(x)\n {\n return x * x * x * x * x;\n }\n\n static ease_out_quint(x)\n {\n return 1 - Math.pow(1 - x, 5);\n }\n\n static ease_in_out_quint(x)\n {\n return x < 0.5\n ? 16 * x * x * x * x * x\n : 1 - Math.pow(-2 * x + 2, 5) / 2;\n }\n\n static ease_in_expo(x)\n {\n return x === 0 ? 0 : Math.pow(2, 10 * x - 10);\n }\n\n static ease_out_expo(x)\n {\n return x === 1 ? 1 : 1 - Math.pow(2, -10 * x);\n }\n\n static ease_in_out_expo(x)\n {\n return x === 0\n ? 0\n : x === 1\n ? 1\n : x < 0.5\n ? Math.pow(2, 20 * x - 10) / 2\n : (2 - Math.pow(2, -20 * x + 10)) / 2;\n }\n\n static ease_in_circ(x)\n {\n return 1 - Math.sqrt(1 - Math.pow(x, 2));\n }\n\n static ease_out_circ(x)\n {\n return Math.sqrt(1 - Math.pow(x - 1, 2));\n }\n\n static ease_in_out_circ(x)\n {\n return x < 0.5\n ? (1 - Math.sqrt(1 - Math.pow(2 * x, 2))) / 2\n : (Math.sqrt(1 - Math.pow(-2 * x + 2, 2)) + 1) / 2;\n }\n\n static ease_in_back(x)\n {\n return 2.7015 * x * x * x - 1.7015 * x * x;\n }\n\n static ease_out_back(x)\n {\n return 1 + 2.7015 * Math.pow(x - 1, 3) + 1.7015 * Math.pow(x - 1, 2);\n }\n\n static ease_in_out_back(x)\n {\n return x < 0.5\n ? (Math.pow(2 * x, 2) * ((2.5949095 + 1) * 2 * x - 2.5949095)) / 2\n : (Math.pow(2 * x - 2, 2) * ((2.5949095 + 1) * (x * 2 - 2) + 2.5949095) + 2) / 2;\n }\n\n static ease_in_elastic(x)\n {\n const c4 = (2 * Math.PI) / 3;\n\n return x === 0\n ? 0\n : x === 1\n ? 1\n : -Math.pow(2, 10 * x - 10) * Math.sin((x * 10 - 10.75) * c4);\n }\n\n static ease_out_elastic(x)\n {\n return x === 0\n ? 0\n : x === 1\n ? 1\n : Math.pow(2, -10 * x) * Math.sin((x * 10 - 0.75) * 2.0943950) + 1;\n }\n\n static ease_in_out_elastic(x)\n {\n return x === 0\n ? 0\n : x === 1\n ? 1\n : x < 0.5\n ? -(Math.pow(2, 20 * x - 10) * Math.sin((20 * x - 11.125) * 1.3962633)) / 2\n : Math.pow(2, -20 * x + 10) * Math.sin((20 * x - 11.125) * 1.3962633) / 2 + 1;\n }\n\n static ease_in_bounce(x)\n {\n return 1 - this.ease_out_bounce(1 - x);\n }\n\n static ease_out_bounce(x)\n {\n const n1 = 7.5625;\n const d1 = 2.75;\n\n if (x < 1 / d1)\n {\n return n1 * x * x;\n }\n else if (x < 2 / d1)\n {\n return n1 * (x -= 1.5 / d1) * x + 0.75;\n }\n else if (x < 2.5 / d1)\n {\n return n1 * (x -= 2.25 / d1) * x + 0.9375;\n }\n else\n {\n return n1 * (x -= 2.625 / d1) * x + 0.984375;\n }\n }\n\n static ease_in_out_bounce(x)\n {\n return x < 0.5\n ? (1 - this.ease_out_bounce(1 - 2 * x)) / 2\n : (1 + this.ease_out_bounce(2 * x - 1)) / 2;\n }\n\n static heartbeat(t)\n {\n return 1.0 - Math.pow(Math.abs(Math.sin(t + 1.0)), 63.0) * Math.sign(Math.sin(t)) * Math.sin(t + 1.5 + 1.0) * 0.8;\n }\n}\n\nexport { EasingFunctions };\n","import { EasingFunctions } from '../utilities/EasingFunctions';\n\nclass ActionInterpolator\n{\n constructor(easing_function = 'linear')\n {\n this.easing_function = undefined;\n\n if (typeof easing_function === 'string')\n {\n this.easing_function = EasingFunctions[easing_function];\n }\n else\n {\n this.easing_function = easing_function;\n }\n }\n\n update(context, t)\n {\n\n }\n}\n\nexport { ActionInterpolator };\n","import { ActionInterpolator } from './ActionInterpolator';\nimport { OMath } from '../utilities/OMath';\n\nclass NumberInterpolator extends ActionInterpolator\n{\n constructor(attribute_name, from = 0, to = 1, initial = false, easing_function = 'linear')\n {\n super(easing_function);\n\n this.attribute_name = attribute_name;\n this.from = from;\n this.to = to;\n this.initial = initial;\n }\n\n update(context, t)\n {\n context[this.attribute_name] = OMath.lerp(this.from, this.to, this.easing_function(t));\n }\n\n evaluate(t)\n {\n return OMath.lerp(this.from, this.to, this.easing_function(t));\n }\n}\n\nexport { NumberInterpolator };\n","\nclass ActionEvent\n{\n constructor(name, method, args)\n {\n this.name = name;\n this.method = method;\n this.args = args;\n }\n\n trigger()\n {\n ViewApi.application[this.name][this.method](...this.args.split(','));\n }\n}\n\nexport { ActionEvent };\n","class DrawIOAnimationSheet\n{\n constructor()\n {\n\n }\n\n parse(xml_document)\n {\n const doc = new DOMParser().parseFromString(xml_document, 'text/xml');\n\n const animation_nodes = doc.querySelectorAll('mxGeometry');\n\n const animation_tracks = [];\n const triggers = [];\n\n for (let i = 0; i < animation_nodes.length; i++)\n {\n const node = animation_nodes[i];\n const parent_node = node.parentElement;\n const data = parent_node.getAttribute('value');\n\n const x_pos = this.get_node_x_position(node);\n\n const from = x_pos / 100;\n const duration = parseFloat(node.getAttribute('width')) / 100;\n\n // is trigger\n if (parent_node.getAttribute('style').includes('rhombus;'))\n {\n const split_data = data.split('.');\n const trigger_name = split_data[0];\n const trigger_method = split_data[1];\n\n triggers.push({\n name: trigger_name,\n method: trigger_method,\n at_time: from + duration * 0.5\n });\n }\n\n const valid_element = parent_node.getAttribute('style').includes('rounded=0;') &&\n !parent_node.getAttribute('style').includes('text;');\n\n if (valid_element && data !== '' && !data.includes(' '))\n {\n const split_data = data.split('=');\n\n const attribute_name = split_data[0];\n\n const value_data = split_data[1].split('--');\n const to_value = parseFloat(value_data[0]);\n const easing_function = value_data[1];\n\n if (split_data.length !== 2)\n {\n console.error('DrawIO data is malformed:', data);\n }\n\n if (value_data.length !== 2)\n {\n console.error('DrawIO data is malformed:', data);\n }\n\n animation_tracks.push({\n attribute_name: attribute_name,\n from_time: from,\n to_time: from + duration,\n to_value: to_value,\n easing_function: easing_function\n });\n }\n }\n\n animation_tracks.sort((a, b) =>\n {\n return a.from_time - b.from_time;\n });\n return {\n animation_tracks: animation_tracks,\n triggers: triggers\n };\n }\n\n get_node_x_position(node)\n {\n const x_pos = node.getAttribute('x');\n return x_pos === null ? 0 : parseFloat(x_pos);\n }\n}\n\nexport { DrawIOAnimationSheet };\n","import { ActionSequencer } from '../../action_sequencer/ActionSequencer';\nimport { NumberInterpolator } from '../../action_sequencer/NumberInterpolator';\nimport { ActionEvent } from '../../action_sequencer/ActionEvent';\nimport { DrawIOAnimationSheet } from './DrawIOAnimationSheet';\n\nclass ActionSequencerBuilder\n{\n constructor(default_state_data)\n {\n this.default_state_data = default_state_data;\n }\n\n from_animation_sheet(animation_data, current_context, initial_context)\n {\n initial_context = initial_context || this.default_state_data;\n const tracks = animation_data.animation_tracks;\n const triggers = animation_data.triggers;\n\n const initial_tracks = this.state_to_tracks(this.default_state_data, this.get_longest_time(animation_data.animation_tracks));\n\n for (let i = 0; i < initial_tracks.length; i++)\n {\n if (tracks.find(element => element.attribute_name === initial_tracks[i].attribute_name) === undefined)\n {\n tracks.push(initial_tracks[i]);\n }\n }\n\n const sequencer = new ActionSequencer(current_context);\n\n for (let i = 0; i < tracks.length; i++)\n {\n const t = tracks[i];\n const interpolator = new NumberInterpolator(\n t.attribute_name,\n current_context[t.attribute_name],\n t.to_value,\n t.initial,\n t.easing_function\n );\n\n sequencer.add_action_interpolator(t.from_time, t.to_time, interpolator, true);\n }\n\n for (let i = 0; i < triggers.length; i++)\n {\n const t = triggers[i];\n const action_event = new ActionEvent(t.name, t.method, t.args);\n sequencer.add_action_event(t.at_time, action_event);\n }\n\n return sequencer;\n }\n\n state_to_tracks(state, longest_time)\n {\n const tracks = [];\n\n const keys = Object.keys(state);\n\n for (let i = 0; i < keys.length; i++)\n {\n tracks.push({\n attribute_name: keys[i],\n from_time: 0,\n to_time: longest_time < 1 ? longest_time : 1,\n to_value: state[keys[i]],\n initial: true,\n easing_function: 'ease_in_out_cubic'\n });\n }\n\n return tracks;\n }\n\n from_draw_io(xml, context)\n {\n const transition_data = (new DrawIOAnimationSheet()).parse(xml);\n const tracks = transition_data.animation_tracks;\n const triggers = transition_data.triggers;\n const sequencer = new ActionSequencer(context);\n\n for (let i = 0; i < tracks.length; i++)\n {\n const t = tracks[i];\n const interpolator = new NumberInterpolator(\n t.attribute_name,\n context[t.attribute_name],\n t.to_value,\n t.initial,\n t.easing_function\n );\n\n sequencer.add_action_interpolator(t.from_time, t.to_time, interpolator, true);\n }\n\n for (let i = 0; i < triggers.length; i++)\n {\n const t = triggers[i];\n const action_event = new ActionEvent(t.name, t.method);\n sequencer.add_action_event(t.at_time, action_event);\n }\n\n return sequencer;\n }\n\n get_longest_time(tracks)\n {\n let longest_time = -1;\n\n for (let i = 0; i < tracks.length; i++)\n {\n const track = tracks[i];\n\n const track_time = track.to_time;\n\n longest_time = track_time > longest_time ? track_time : longest_time;\n }\n\n return longest_time;\n }\n}\n\nexport { ActionSequencerBuilder };\n","import { ActionSequencerBuilder } from './ActionSequencerBuilder';\n\nclass TransitionTable\n{\n constructor()\n {\n this.transitions = [];\n this.default_state_data = {};\n }\n\n get(from_state_name, to_state_name, current_context)\n {\n for (let i = 0; i < this.transitions.length; i++)\n {\n if (this.transitions[i].from === from_state_name && this.transitions[i].to === to_state_name)\n {\n const action_sequencer = new ActionSequencerBuilder(this.default_state_data).from_animation_sheet(this.transitions[i].data, current_context);\n return action_sequencer;\n }\n }\n\n for (let i = 0; i < this.transitions.length; i++)\n {\n if (this.transitions[i].to === to_state_name && this.transitions[i].from === undefined)\n {\n const action_sequencer = new ActionSequencerBuilder(this.default_state_data).from_animation_sheet(this.transitions[i].data, current_context);\n return action_sequencer;\n }\n }\n\n console.error('TransitionTable.get no data found for: ', from_state_name, to_state_name);\n return undefined;\n }\n\n add_transitions(transitions)\n {\n for (let i = 0; i < transitions.length; i++)\n {\n this.transitions.push(transitions[i]);\n }\n }\n\n set_transitions(transitions)\n {\n this.transitions = transitions;\n }\n\n set_default_state_data(default_state_data)\n {\n this.default_state_data = default_state_data;\n }\n}\n\nexport { TransitionTable };\n","import { Vector2 } from 'three';\nimport { Clock } from 'three';\n\nclass Time\n{\n constructor()\n {\n this.__delta_buffer = [0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016];\n }\n\n init()\n {\n this.___time = new Clock();\n this.__delta_time = 0;\n this.__smooth_delta_time = 0;\n this.__elapsed_time = 0;\n this.__allocated_time = new Vector2(0, 0);\n this.__frame_interpolation_t = 0;\n this.fixed_delta_time = 1 / 30;\n }\n\n get elapsed_time()\n {\n return this.__elapsed_time;\n }\n\n get delta_time()\n {\n return this.__delta_time;\n }\n\n get smooth_delta_time()\n {\n return this.__smooth_delta_time;\n }\n\n get shader_time()\n {\n this.__allocated_time.x = this.delta_time;\n this.__allocated_time.y = this.elapsed_time;\n return this.__allocated_time;\n }\n\n get frame_interpolation()\n {\n return this.__frame_interpolation_t;\n }\n\n get fdt()\n {\n return this.fixed_delta_time;\n }\n\n get dt()\n {\n return this.delta_time;\n }\n\n get sdt()\n {\n return this.smooth_delta_time;\n }\n\n __set_frame_interpolation(value)\n {\n this.__frame_interpolation_t = value;\n }\n\n __update()\n {\n this.__delta_time = this.___time.getDelta();\n this.__elapsed_time = this.___time.getElapsedTime();\n\n this.__delta_buffer.shift();\n this.__delta_buffer.push(this.delta_time < 0.32 ? this.delta_time : 0.032);\n\n this.__calculate_smooth_delta_time();\n }\n\n __calculate_smooth_delta_time()\n {\n this.__smooth_delta_time = 0;\n\n for (let i = 0; i < this.__delta_buffer.length; i++)\n {\n this.__smooth_delta_time += this.__delta_buffer[i];\n }\n\n this.__smooth_delta_time = this.__smooth_delta_time / this.__delta_buffer.length;\n }\n}\n\nconst time = new Time();\nexport { time as Time };\n","class ViewState\n{\n constructor(name)\n {\n this.name = name;\n }\n\n start()\n {\n }\n\n before_enter()\n {\n }\n\n on_enter()\n {\n }\n\n before_exit()\n {\n }\n\n on_exit()\n {\n }\n\n before_update()\n {\n }\n\n update()\n {\n }\n\n fixed_update()\n {\n }\n\n update_enter_transition(global_view_data, transition_progress, action_sequencer)\n {\n }\n\n update_exit_transition(global_view_data, transition_progress, action_sequencer)\n {\n }\n}\n\nexport { ViewState };\n","import { Time } from '../../Time';\nimport { ViewState } from '../ViewState';\n\nclass ViewStateTransitionHandler\n{\n constructor(transition_table)\n {\n this.last_state = new ViewState();\n this.current_state = new ViewState();\n\n this.default_state_data = {};\n this.current_state_data = {};\n\n this.transition_table = transition_table;\n\n this.transitioning = false;\n }\n\n go_to_state(state, skip = false)\n {\n if (this.transitioning)\n {\n this.__exit_last_state();\n }\n\n this.last_state = this.current_state;\n this.current_state = state;\n\n this.last_state.before_exit();\n this.current_state.before_enter();\n\n this.action_sequencer = this.transition_table.get(this.last_state.name, this.current_state.name, this.current_state_data);\n this.action_sequencer.play();\n\n this.transitioning = true;\n\n if (skip)\n {\n this.action_sequencer.skip();\n this.update();\n }\n }\n\n update()\n {\n if (this.transitioning)\n {\n this.__update_transitions();\n\n if (this.action_sequencer.is_finished())\n {\n this.transitioning = false;\n\n this.__update_transitions();\n\n this.__exit_last_state();\n\n this.current_state.on_enter();\n }\n }\n else\n {\n this.current_state.update();\n }\n }\n\n before_update()\n {\n this.current_state.before_update();\n }\n\n fixed_update()\n {\n this.current_state.fixed_update();\n }\n\n set_state(state)\n {\n this.current_state = state;\n }\n\n set_default_state_data(default_state_data)\n {\n Object.assign(this.default_state_data, default_state_data);\n Object.assign(this.current_state_data, default_state_data);\n }\n\n __update_transitions()\n {\n this.action_sequencer.update(Time.delta_time);\n this.last_state.update_exit_transition(this.current_state_data, this.action_sequencer.get_progress(), this.action_sequencer);\n this.current_state.update_enter_transition(this.current_state_data, this.action_sequencer.get_progress(), this.action_sequencer);\n }\n\n __exit_last_state()\n {\n // if (this.last_state.name !== this.current_state.name)\n // {\n // this.last_state.hide();\n // }\n\n this.last_state.on_exit();\n }\n}\n\nexport { ViewStateTransitionHandler };\n","import { TransitionTable } from './transition/TransitionTable';\nimport { ViewStateTransitionHandler } from './transition/ViewStateTransitionHandler';\n\nclass TransitionManager\n{\n constructor()\n {\n this.transition_table = new TransitionTable();\n this.transition_handler = new ViewStateTransitionHandler(this.transition_table);\n }\n\n get action_sequencer()\n {\n return this.transition_handler.action_sequencer;\n }\n\n get current_state_data()\n {\n return this.transition_handler.current_state_data;\n }\n\n get_current_state()\n {\n return this.transition_handler.current_state;\n }\n\n go_to_state(state, skip = false)\n {\n this.transition_handler.go_to_state(state, skip);\n }\n\n before_update()\n {\n this.transition_handler.before_update();\n }\n\n update()\n {\n this.transition_handler.update();\n }\n\n fixed_update()\n {\n this.transition_handler.fixed_update();\n }\n\n add_transitions(transitions)\n {\n this.transition_table.add_transitions(transitions);\n }\n\n set_transitions(transitions)\n {\n this.transition_table.set_transitions(transitions);\n }\n\n set_state(state)\n {\n this.transition_handler.set_state(state);\n }\n\n set_default_state_data(default_state_data)\n {\n this.transition_table.set_default_state_data(default_state_data);\n this.transition_handler.set_default_state_data(default_state_data);\n }\n\n set_transitions_velocity(transitions_velocity)\n {\n this.transition_table.set_transitions_velocity(transitions_velocity);\n }\n}\n\nconst transition_manager = new TransitionManager();\nexport { transition_manager as TransitionManager };\n","import { TransitionManager } from './TransitionManager';\n\nclass ViewManager\n{\n constructor()\n {\n this.views = [];\n\n this.browser_title_suffix = '';\n }\n\n update()\n {\n this.__set_views_opacities();\n }\n\n go_to_view(view_name, change_url = true, skip = false)\n {\n const v = this.get(view_name);\n\n if (change_url)\n {\n this.__change_browser_url(v.url);\n this.__change_browser_title(v.url);\n }\n\n TransitionManager.go_to_state(v, skip);\n }\n\n go_to_scene(scene_name, change_url = false, skip = false)\n {\n const next_view = this.get(scene_name);\n const transition_view = this.get('transition');\n\n transition_view.set_next_view(next_view);\n this.go_to_view(transition_view.name, change_url, skip);\n }\n\n register_view(view)\n {\n this.views.push(view);\n }\n\n has_view(view_name)\n {\n for (let i = 0; i < this.views.length; i++)\n {\n if (this.views[i].name === view_name)\n {\n return true;\n }\n }\n return false;\n }\n\n set_view(view_name)\n {\n const view = this.get(view_name);\n\n TransitionManager.set_state(view);\n }\n\n set_browser_title_suffix(title_suffix)\n {\n this.browser_title_suffix = title_suffix;\n }\n\n get_current_view()\n {\n return TransitionManager.get_current_state();\n }\n\n get_view_by_name(view_name)\n {\n console.warn('DEPRECATED. Use ViewManager.get instead');\n this.get(view_name);\n }\n\n get(view_name)\n {\n for (let i = 0; i < this.views.length; i++)\n {\n if (this.views[i].name === view_name)\n {\n return this.views[i];\n }\n }\n console.error('[ViewManager.get] no view found for: ', view_name);\n return undefined;\n }\n\n get_by_url(url)\n {\n for (let i = 0; i < this.views.length; i++)\n {\n if (this.views[i].url === url)\n {\n return this.views[i];\n }\n }\n console.error('[ViewManager.get_by_url] no view found for: ', url);\n return undefined;\n }\n\n __change_browser_url(url)\n {\n window.history.pushState('', '', url);\n }\n\n __change_browser_title(name)\n {\n const title = this.__capitalize(name);\n\n document.title = title ? `${title} | ${this.browser_title_suffix}` : this.browser_title_suffix;\n }\n\n __set_views_opacities()\n {\n for (let i = 0; i < this.views.length; i++)\n {\n this.views[i].set_opacity(TransitionManager.current_state_data);\n }\n }\n\n __capitalize(string)\n {\n let aux_string = string.toUpperCase().replace('/', '');\n aux_string = this.__snake_to_whitespace(aux_string);\n\n return aux_string;\n }\n\n __snake_to_whitespace(string)\n {\n return string.replace(\n /([-_][A-Z])/g,\n (group) => group\n .replace('-', ' ')\n .replace('_', ' ')\n );\n }\n}\n\nconst view_manager = new ViewManager();\nexport { view_manager as ViewManager };\n","import { TransitionManager } from './TransitionManager';\nimport { ViewManager } from './ViewManager';\nimport { ViewState } from './ViewState';\n\nclass ApplicationView extends ViewState\n{\n constructor({ name, url, container, transition_data })\n {\n super(name);\n\n this.container = container;\n this.url = url;\n\n this.current_opacity = 0;\n\n transition_data = transition_data || {\n animation_tracks: [],\n triggers: []\n };\n\n const transitions = [\n {\n to: name,\n data: transition_data\n }\n ];\n\n ViewManager.register_view(this);\n TransitionManager.add_transitions(transitions);\n }\n\n before_enter()\n {\n this.container.classList.add('before_enter');\n this.container.classList.remove('before_exit');\n this.container.classList.remove('hidden');\n }\n\n on_enter()\n {\n this.container.classList.remove('before_enter');\n this.container.classList.remove('before_exit');\n this.container.classList.remove('hidden');\n }\n\n before_exit()\n {\n this.container.classList.add('before_exit');\n this.container.classList.remove('before_enter');\n this.container.classList.remove('hidden');\n }\n\n on_exit()\n {\n this.container.classList.add('hidden');\n this.container.classList.remove('before_enter');\n this.container.classList.remove('before_exit');\n }\n\n set_opacity(current_state_data)\n {\n const opacity = current_state_data[`${this.name}_opacity`];\n\n if (this.current_opacity > opacity || this.current_opacity < opacity)\n {\n this.current_opacity = opacity;\n\n this.container.style.opacity = this.current_opacity;\n }\n }\n}\n\nexport { ApplicationView };\n","class CameraManager\n{\n init()\n {\n this._current = undefined;\n // VR Spectator\n this._spectator = undefined;\n }\n\n set current(camera)\n {\n this._current = camera;\n }\n\n get current()\n {\n return this._current;\n }\n\n set spectator(camera)\n {\n this._spectator = camera;\n }\n\n get spectator()\n {\n return this._spectator;\n }\n}\n\nconst camera_manager = new CameraManager();\nexport { camera_manager as CameraManager };\n","import { CanvasTexture } from 'three';\nimport { Vector2 } from 'three';\nimport { UVMapping } from 'three';\nimport { ClampToEdgeWrapping } from 'three';\nimport { NearestFilter } from 'three';\n\nclass CanvasDrawer\n{\n constructor(uses_dynamic_font)\n {\n this.uses_dynamic_font = uses_dynamic_font;\n this.__textHeight = null;\n\n this.canvas = document.createElement('canvas');\n this.ctx = this.canvas.getContext('2d');\n }\n\n getFontHeight(fontStyle = 'Arial')\n {\n if (this.__textHeight == null || this.uses_dynamic_font)\n {\n const body = document.getElementsByTagName('body')[0];\n const dummy = document.createElement('div');\n const dummyText = document.createTextNode('MÉqgOLAKTAL');\n dummy.appendChild(dummyText);\n dummy.setAttribute('style', `font:${fontStyle};position:absolute;top:0;left:0`);\n body.appendChild(dummy);\n this.__textHeight = dummy.offsetHeight;\n body.removeChild(dummy);\n }\n return this.__textHeight;\n }\n\n get_text_size(text, font = '24px Arial')\n {\n const size = new Vector2();\n this.ctx.font = font;\n size.x = Math.ceil(this.ctx.measureText(text).width);\n size.y = Math.ceil(this.getFontHeight(font));\n return size;\n }\n\n draw_canvas(text, ctxOptions = {})\n {\n ctxOptions.font = ctxOptions.font || '24px Arial';\n ctxOptions.font_color = ctxOptions.font_color || '#000000';\n\n this.__draw(text, ctxOptions, this.canvas, this.ctx);\n return this.canvas;\n }\n\n draw_on_texture(text, ctxOptions)\n {\n const canvas = this.draw_canvas(text, ctxOptions);\n const canvas_texture = new CanvasTexture(canvas, UVMapping,\n ClampToEdgeWrapping,\n ClampToEdgeWrapping,\n NearestFilter,\n NearestFilter);\n canvas_texture.generateMipMaps = false;\n canvas_texture.needsUpdate = true;\n\n return canvas_texture;\n }\n\n __draw(text, ctxOptions)\n {}\n\n roundRect(ctx, x, y, width, height, radius, fill, stroke)\n {\n if (typeof stroke === 'undefined')\n {\n stroke = true;\n }\n if (typeof radius === 'undefined')\n {\n radius = 5;\n }\n if (typeof radius === 'number')\n {\n radius = { tl: radius, tr: radius, br: radius, bl: radius };\n }\n else\n {\n const defaultRadius = { tl: 0, tr: 0, br: 0, bl: 0 };\n for (const side in defaultRadius)\n {\n radius[side] = radius[side] || defaultRadius[side];\n }\n }\n ctx.beginPath();\n ctx.moveTo(x + radius.tl, y);\n ctx.lineTo(x + width - radius.tr, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + radius.tr);\n ctx.lineTo(x + width, y + height - radius.br);\n ctx.quadraticCurveTo(x + width, y + height, x + width - radius.br, y + height);\n ctx.lineTo(x + radius.bl, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - radius.bl);\n ctx.lineTo(x, y + radius.tl);\n ctx.quadraticCurveTo(x, y, x + radius.tl, y);\n ctx.closePath();\n if (fill)\n {\n ctx.fill();\n }\n if (stroke)\n {\n ctx.stroke();\n }\n }\n}\n\nexport { CanvasDrawer };\n","\nimport { CanvasDrawer } from './CanvasDrawer';\n\nimport { Vector2 } from 'three';\n\nclass SimpleTextDrawer extends CanvasDrawer\n{\n constructor()\n {\n super();\n this.text_margin = new Vector2(2, 0);\n }\n\n __draw(text, ctxOptions, canvas, ctx)\n {\n ctx.font = ctxOptions.font;\n\n const text_size = this.get_text_size(text, ctxOptions.font);\n // canvas.width = Math.ceilPowerOfTwo(text_size.x+this.text_margin.x*2);\n // canvas.height = Math.ceilPowerOfTwo(text_size.y+ this.text_margin.y*2);\n canvas.width = Math.ceil(text_size.x + this.text_margin.x * 2);\n canvas.height = Math.ceil(text_size.y + this.text_margin.y * 2);\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n // turn this on for debugging\n ctx.globalAlpha = 0.0;\n ctx.fillStyle = ctxOptions.font_color || '#000000';\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.globalAlpha = 1;\n\n ctx.globalAlpha = 1;\n\n ctx.font = ctxOptions.font;\n ctx.fillStyle = ctxOptions.font_color || '#000000';\n ctx.textBaseline = 'middle';\n\n ctx.textAlign = ctxOptions.textAlign || 'center';\n if (ctx.textAlign === 'center')\n {\n ctx.fillText(text, canvas.width / 2, canvas.height / 2);\n }\n else\n {\n ctx.fillText(text, 0, canvas.height / 2);\n }\n }\n}\n\nexport { SimpleTextDrawer };\n","class Capabilities\n{\n init()\n {\n this.max_anisotropy = 0;\n this.vertex_texture_sampler_available = false;\n this.fp_textures_available = false;\n }\n}\n\nconst capabilities = new Capabilities();\nexport { capabilities as Capabilities };\n","\nimport { Object3D } from 'three';\nimport { LineBasicMaterial } from 'three';\nimport { AlwaysDepth } from 'three';\nimport { BufferGeometry } from 'three';\nimport { Vector3 } from 'three';\nimport { Line } from 'three';\n\nclass AxisHelper extends Object3D\n{\n constructor(scale = 1.0)\n {\n super();\n\n const blue_points = [];\n blue_points.push(new Vector3(0, 0, 0));\n blue_points.push(new Vector3(0, 0, 1000));\n\n const blue_axis_mat = new LineBasicMaterial({ color: 0x4444ff, depthFunc: AlwaysDepth });\n const blue_axis_geo = new BufferGeometry().setFromPoints(blue_points);\n const blue_axis_line = new Line(blue_axis_geo, blue_axis_mat);\n blue_axis_line.renderOrder = 50000;\n\n const green_points = [];\n green_points.push(new Vector3(0, 0, 0));\n green_points.push(new Vector3(0, 1000, 0));\n\n const green_axis_mat = new LineBasicMaterial({ color: 0x44ff44, depthFunc: AlwaysDepth });\n const green_axis_geo = new BufferGeometry().setFromPoints(green_points);\n const green_axis_line = new Line(green_axis_geo, green_axis_mat);\n green_axis_line.renderOrder = 50000;\n\n const red_points = [];\n red_points.push(new Vector3(0, 0, 0));\n red_points.push(new Vector3(1000, 0, 0));\n\n const red_axis_mat = new LineBasicMaterial({ color: 0xff4444, depthFunc: AlwaysDepth });\n const red_axis_geo = new BufferGeometry().setFromPoints(red_points);\n const red_axis_line = new Line(red_axis_geo, red_axis_mat);\n red_axis_line.renderOrder = 50000;\n\n this.renderOrder = 100000;\n\n this.add(blue_axis_line);\n this.add(green_axis_line);\n this.add(red_axis_line);\n\n this.scale.set(scale, scale, scale);\n }\n\n update()\n {\n }\n\n dispose()\n {\n }\n}\n\nexport { AxisHelper };\n","import { Scene } from 'three';\n\nclass SceneManager\n{\n init()\n {\n this._current = new Scene();\n this._current.name = 'default_scene';\n }\n\n add_scene(name)\n {\n\n }\n\n get current()\n {\n return this._current;\n }\n\n set current(scene)\n {\n this._current = scene;\n }\n\n dispose()\n {\n this.current.traverse(child =>\n {\n if (child.geometry)\n {\n child.geometry.dispose();\n child.material.dispose();\n }\n });\n\n while (this.current.children.length > 0)\n {\n this.current.remove(this.current.children[0]);\n }\n }\n}\n\nconst scene_manager = new SceneManager();\nexport { scene_manager as SceneManager };\n","\nimport { Vector3, Mesh } from 'three';\nimport { BoxGeometry } from 'three';\nimport { MeshBasicMaterial } from 'three';\n\nclass Cube extends Mesh\n{\n constructor(size, segments, color)\n {\n size = size || new Vector3(1, 1, 1);\n segments = segments || new Vector3(1, 1, 1);\n color = color || 0xff0000;\n const geometry = new BoxGeometry(size.x, size.y, size.z, segments.x, segments.y, segments.z);\n const material = new MeshBasicMaterial({ color: color });\n super(geometry, material);\n }\n}\n\nexport { Cube };\n","import { Mesh, MeshBasicMaterial, SphereGeometry } from 'three';\n\nclass Sphere extends Mesh\n{\n constructor(radius, color)\n {\n color = color || '#FF0000';\n radius = radius || 1;\n const geometry = new SphereGeometry(radius, 64, 64);\n const material = new MeshBasicMaterial({ color: color });\n super(geometry, material);\n }\n}\n\nexport { Sphere };\n","import { ConeGeometry, CylinderGeometry, Mesh, MeshBasicMaterial, Vector3 } from 'three';\n\nimport * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js';\n\nclass Arrow extends Mesh\n{\n constructor(color, length, dir)\n {\n color = color || '#FF0000';\n length = length || 1;\n\n const cone_height = 0.4;\n const cylinder_height = length - cone_height;\n const cylinder_geo = new CylinderGeometry(0.01, 0.01, cylinder_height, 32);\n cylinder_geo.translate(0, cylinder_height / 2, 0);\n\n const cone_geometry = new ConeGeometry(0.1, cone_height, 32);\n cone_geometry.translate(0, cylinder_height + cone_height / 2, 0);\n\n const buffer_geometry = BufferGeometryUtils.mergeGeometries([cylinder_geo, cone_geometry]);\n buffer_geometry.rotateX(3.14 / 2);\n\n const material = new MeshBasicMaterial({ color: color });\n super(buffer_geometry, material);\n\n if (dir)\n {\n this.quaternion.setFromUnitVectors(new Vector3(0, 0, 1), dir);\n }\n\n this._dir = dir;\n }\n\n set dir(dir)\n {\n this.quaternion.setFromUnitVectors(new Vector3(0, 0, 1), dir);\n this._dir = dir;\n }\n\n get dir()\n {\n return this._dir;\n }\n\n set length(value)\n {\n this.scale.z = value;\n }\n\n get length()\n {\n return this.scale.z;\n }\n}\n\nexport { Arrow };\n","import { Vector2 } from 'three';\n\nclass OScreen\n{\n init()\n {\n this.width = 1;\n this.height = 1;\n\n this.position = new Vector2();\n\n this.render_width = 1;\n this.render_height = 1;\n this.width_height = new Vector2(this.width, this.height);\n\n this.dpr = 1;\n this.pixel_size = new Vector2(1 / this.width, 1 / this.height);\n }\n\n update_position(x, y)\n {\n this.position.set(x, y);\n }\n\n update()\n {\n this.size_changed = false;\n }\n\n update_size(width, height)\n {\n this.width = width;\n this.height = height;\n\n this.pixel_size = new Vector2(1 / this.width, 1 / this.height);\n\n this.width_height.x = width;\n this.width_height.y = height;\n\n this.render_width = width * this.dpr;\n this.render_height = height * this.dpr;\n\n this.size_changed = true;\n }\n\n apply_pixel_density_v2(vector2)\n {\n vector2.multiplyScalar(1 / this.dpr);\n\n return vector2;\n }\n\n apply_pixel_density(value)\n {\n return value * (1 / this.dpr);\n }\n\n get_pixel_size()\n {\n return this.pixel_size;\n }\n\n get aspect_ratio()\n {\n return this.width / this.height;\n }\n\n get portrait()\n {\n return this.width < this.height;\n }\n}\n\nconst oscreen = new OScreen();\nexport { oscreen as OScreen };\n","import { BaseShaderMaterial } from './BaseShaderMaterial';\nimport { Vector2 } from 'three';\nclass ScreenSpaceTextureMaterial extends BaseShaderMaterial\n{\n constructor(x, y, w, h)\n {\n const vert = `\n uniform vec2 _ScreenSpacePosition;\n uniform vec2 _ScreenSize;\n uniform vec2 _TextureSize;\n varying vec2 vUv;\n void main()\n {\n vec2 pos = uv * vec2(_TextureSize.x / _ScreenSize.x, _TextureSize.y / _ScreenSize.y);\n pos += vec2(_ScreenSpacePosition.x / _ScreenSize.x, _ScreenSpacePosition.y / _ScreenSize.y);\n\n pos.x = pos.x * 2.0 - 1.0;\n pos.y = pos.y * 2.0 - 1.0;\n\n gl_Position = vec4(pos, 0.0, 1.0);\n vUv = uv;\n }\n `;\n const frag = `\n uniform sampler2D _MainTex;\n varying vec2 vUv;\n\n void main()\n {\n gl_FragColor = texture2D(_MainTex, vUv);\n }\n `;\n super(vert, frag, {\n _MainTex: { value: undefined },\n _ScreenSpacePosition: { value: new Vector2() },\n _ScreenSize: { value: new Vector2() },\n _TextureSize: { value: new Vector2() }\n });\n }\n\n set_position(x, y)\n {\n this.uniforms._ScreenSpacePosition.value.set(x, y);\n }\n\n set_texture(tex, w, h)\n {\n this.uniforms._MainTex.value = tex;\n this.uniforms._TextureSize.value.set(tex.image.width, tex.image.height);\n\n if (w !== undefined)\n {\n this.uniforms._TextureSize.value.x = w;\n }\n if (h !== undefined)\n {\n this.uniforms._TextureSize.value.y = h;\n }\n }\n\n set_screen_size(w, h)\n {\n this.uniforms._ScreenSize.value.set(w, h);\n }\n}\n\nexport { ScreenSpaceTextureMaterial };\n","import { Color } from 'three';\nimport { PerspectiveCamera as TPerspectiveCamera } from 'three';\n\nclass PerspectiveCamera extends TPerspectiveCamera\n{\n constructor(fov, aspect, near, far)\n {\n super(fov, aspect, near, far);\n\n this.clear_color = new Color('#000000');\n this.clear_alpha = 1;\n }\n\n copy(camera)\n {\n super.copy(camera);\n this.clear_color.copy(camera.clear_color);\n this.clear_alpha = camera.clear_alpha;\n return this;\n }\n}\n\nexport { PerspectiveCamera };\n","import { AxisHelper } from './components/AxisHelper';\n\nimport { SceneManager } from './SceneManager';\nimport { Cube } from './primitives/Cube';\nimport { Sphere } from './primitives/Sphere';\nimport { Arrow } from './primitives/Arrow';\nimport { OScreen } from './OScreen';\nimport { ScreenSpaceTextureMaterial } from './materials/ScreenSpaceTextureMaterial';\nimport { PerspectiveCamera } from './PerspectiveCamera';\n\nimport { Vector3 } from 'three';\nimport { LineBasicMaterial } from 'three';\nimport { BufferGeometry } from 'three';\nimport { Line } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { ShaderMaterial } from 'three';\nimport { Vector4 } from 'three';\nimport { Mesh } from 'three';\nimport { Box3 } from 'three';\nimport { Box3Helper } from 'three';\nimport { Scene } from 'three';\nimport { CatmullRomCurve3 } from 'three';\nimport { SphereGeometry } from 'three';\nimport { MeshBasicMaterial } from 'three';\n\nimport basic_color_vert from './shaders/basic_color/basic_color.vert';\nimport basic_color_frag from './shaders/basic_color/basic_color.frag';\nimport { CameraManager } from './CameraManager';\n\nclass Debug\n{\n init()\n {\n this.Vector3_one = new Vector3(1, 1, 1);\n this.Vector3_zero = new Vector3(0, 0, 0);\n this.canvas_renderer = undefined;\n\n this.display_texture_meshes = [];\n\n this.ctx = undefined;\n this.scene = new Scene();\n this.camera = new PerspectiveCamera(60, OScreen.aspect_ratio, 0.1, 1000);\n this.camera.clear_alpha = 0;\n }\n\n draw_arrow(origin, dir, color = 0xff0000)\n {\n const arrow = new Arrow(color, dir.length(), dir.clone().normalize());\n arrow.position.copy(origin);\n this.scene.add(arrow);\n return arrow;\n }\n\n draw_axis()\n {\n const axis = new AxisHelper();\n this.scene.add(axis);\n return axis;\n }\n\n set_debug_RT(RT)\n {\n this.rt_debug = RT;\n }\n\n draw_rectangle(position_2d, width, height, color)\n {\n width = width || 100;\n height = height || 100;\n this.ctx.fillStyle = color || 'rgba(255, 0, 0, 1)';\n this.ctx.fillRect(position_2d.x - width / 2,\n (this.ctx.canvas.height - position_2d.y) - height / 2, width, height);\n }\n\n clear()\n {\n if (this.ctx)\n {\n this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n }\n }\n\n draw_line_2D(from, to, color)\n {\n this.ctx.strokeStyle = color || 'rgba(255, 0, 0, 1)';\n this.ctx.beginPath();\n this.ctx.moveTo(from.x, from.y);\n this.ctx.lineTo(to.x, to.y);\n this.ctx.closePath();\n this.ctx.stroke();\n }\n\n draw_line(points, color = 0xff0000)\n {\n const material = new LineBasicMaterial({\n color: color\n });\n\n const geometry = new BufferGeometry().setFromPoints(points);\n\n const line = new Line(geometry, material);\n line.frustumCulled = false;\n this.scene.add(line);\n return line;\n }\n\n draw_cube(pos, size, color)\n {\n size = size || 1;\n color = color || 0xff0000;\n pos = pos || new Vector3();\n\n const cube = new Cube(new Vector3(size, size, size), undefined, color);\n cube.position.copy(pos);\n this.scene.add(cube);\n return cube;\n }\n\n draw_oriented_cube(from, to, height = 1, color = '#FF0000', depth = 0.1)\n {\n const size = from.distanceTo(to);\n const cube = new Cube(new Vector3(depth, height, size), undefined, color);\n\n const center = to.clone().sub(from).multiplyScalar(0.5);\n const forward_dir = center.clone().normalize();\n center.add(from);\n\n cube.position.copy(center);\n\n // let up = new Vector3(0, 1, 0);\n // let forward = forward_dir.clone();\n // let right = forward.clone().cross(up);\n\n // cube.quaternion.setFromRotationMatrix(new Matrix4().makeBasis(right,up,forward));\n cube.quaternion.setFromUnitVectors(new Vector3(0, 0, -1), forward_dir);\n\n this.scene.add(cube);\n return cube;\n }\n\n draw_plane(width, height, color)\n {\n const geometry = new PlaneGeometry(width, height);\n const material = new ShaderMaterial({\n uniforms: {\n _Color: { value: new Vector4(0, 1, 0, 0.2) }\n },\n vertexShader: basic_color_vert,\n fragmentShader: basic_color_frag,\n transparent: true,\n depthWrite: false\n });\n\n const plane = new Mesh(geometry, material);\n plane.renderOrder = -10000;\n this.scene.add(plane);\n return plane;\n }\n\n draw_empty_cube(pos, size, color)\n {\n size = size || 1;\n color = color || 0xff0000;\n\n const box = new Box3().setFromCenterAndSize(new Vector3(), new Vector3(size, size, size));\n const helper = new Box3Helper(box, color);\n helper.position.copy(pos || new Vector3());\n return helper;\n }\n\n draw_sphere(pos, size, color)\n {\n size = size || 1;\n color = color || 0xff0000;\n pos = pos || new Vector3();\n\n const sphere = new Sphere(size, color);\n sphere.position.copy(pos);\n this.scene.add(sphere);\n return sphere;\n }\n\n draw_point_array(input_points, open = false, color = 0xff0000)\n {\n const catmull = new CatmullRomCurve3(input_points, open);\n catmull.updateArcLengths();\n const points = catmull.getSpacedPoints(200);\n const line_helper = this.draw_line(points, 0x00ff00);\n // line_helper.position.y = 1.5;\n return line_helper;\n }\n\n draw_sphere_helper(sphere, color)\n {\n color = color || 0xff0000;\n const geometry = new SphereGeometry(sphere.radius, 32, 32);\n const material = new MeshBasicMaterial({ color: color });\n const sphere_mesh = new Mesh(geometry, material);\n sphere_mesh.position.copy(sphere.center);\n SceneManager.current.add(sphere_mesh);\n return sphere_mesh;\n }\n\n draw_math_sphere(sphere)\n {\n const geometry = new SphereGeometry(sphere.radius, 32, 32);\n const material = new ShaderMaterial({\n uniforms: {\n _Color: { value: new Vector4(1, 0, 0, 0.2) }\n },\n vertexShader: basic_color_vert,\n fragmentShader: basic_color_frag,\n transparent: true\n });\n // var material = new MeshBasicMaterial( {color: 0xff0000, transparent = true} );\n const sphere1 = new Mesh(geometry, material);\n sphere1.position.copy(sphere.center);\n SceneManager.current.add(sphere1);\n }\n\n draw_bounding_box(bb)\n {\n const helper = new Box3Helper(bb, 0xffff00);\n SceneManager.current.add(helper);\n }\n\n draw_curve(curve, options)\n {\n const offset = new Vector3(0, 0, 0);\n if (options)\n {\n offset.y = options.offset || 0;\n }\n\n for (let i = 0; i < curve.length - 1; i++)\n {\n this.draw_line(curve[i].clone().add(offset), curve[i + 1].clone().add(offset));\n }\n }\n\n draw_texture(tex, w, h)\n {\n const mesh = new Mesh(new PlaneGeometry(1, 1), new ScreenSpaceTextureMaterial());\n this.display_texture_meshes.push(mesh);\n this.scene.add(mesh);\n\n mesh.material.set_texture(tex, w, h);\n return mesh;\n }\n\n render(graphics)\n {\n for (let i = 0; i < this.display_texture_meshes.length; i++)\n {\n this.display_texture_meshes[i].material.set_screen_size(OScreen.width, OScreen.height);\n }\n if (this.scene.children.length > 0)\n {\n graphics.render(this.scene, CameraManager.current);\n }\n }\n}\n\nconst debug = new Debug();\nexport { debug as Debug };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport { Scene } from 'three';\nimport { Mesh } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { OrthographicCamera } from 'three';\n\nclass Blitter\n{\n constructor(renderer)\n {\n this.renderer = renderer;\n this._blit_scene = new Scene();\n this._blit_material = new BlitMaterial();\n this._blit_quad = new Mesh(\n new PlaneGeometry(1, 1), this._blit_material);\n this._blit_scene.add(this._blit_quad);\n this._blit_camera = new OrthographicCamera(-1, 1, 1, -1, -10000, 10000);\n }\n\n blit(src, dst)\n {\n this._blit_quad.material = this._blit_material;\n\n const src_texture = src.isWebGLRenderTarget === true ? src.texture : src;\n const src_width = src.isWebGLRenderTarget === true ? src.width : src.image.width;\n const src_height = src.isWebGLRenderTarget === true ? src.height : src.image.height;\n\n this._blit_quad.material.uniforms._MainTex.value = src_texture;\n this._blit_quad.material.uniforms._Resolution.value.set(src_width, src_height);\n\n if (dst)\n {\n this._blit_quad.material.uniforms._TargetResolution.value.set(dst.width, dst.height);\n }\n else\n {\n this.renderer.getSize(this._blit_quad.material.uniforms._TargetResolution.value);\n }\n\n this.__render(dst);\n }\n\n material_pass(mat, dst)\n {\n this._blit_quad.material = mat;\n // this._blit_quad.material.uniforms._MainTex.value = undefined;\n // this._blit_quad.material.uniforms._Resolution.value.set(1, 1);\n\n this.__render(dst);\n }\n\n blit_with_material(src, dst, mat)\n {\n const src_texture = src.isWebGLRenderTarget === true ? src.texture : src;\n const src_width = src.isWebGLRenderTarget === true ? src.width : src.image.width;\n const src_height = src.isWebGLRenderTarget === true ? src.height : src.image.height;\n\n this._blit_quad.material = mat;\n this._blit_quad.material.uniforms._MainTex.value = src_texture;\n this._blit_quad.material.uniforms._Resolution.value.set(src_width, src_height);\n\n if (dst)\n {\n this._blit_quad.material.uniforms._TargetResolution.value.set(dst.width, dst.height);\n }\n else\n {\n this.renderer.getSize(this._blit_quad.material.uniforms._TargetResolution.value);\n }\n\n this.__render(dst);\n }\n\n blit_clear_with_material(dst_RT, mat)\n {\n this._blit_quad.material = mat;\n\n this.__render(dst_RT);\n }\n\n dispose()\n {\n this._blit_quad.geometry.dispose();\n this._blit_quad.material.dispose();\n }\n\n __render(RT)\n {\n RT = RT === undefined ? null : RT;\n\n const current_rt = this.renderer.getRenderTarget();\n\n this.renderer.setRenderTarget(RT === undefined ? null : RT);\n this.renderer.render(this._blit_scene, this._blit_camera);\n\n this.renderer.setRenderTarget(current_rt);\n }\n}\n\nexport { Blitter };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/clear/clear_depth_normal.frag';\n\nimport { Vector4 } from 'three';\n\nclass ClearDepthNormalMaterial extends BlitMaterial\n{\n constructor(clear_depth, clear_normal)\n {\n super(frag);\n this.uniforms._DepthNormal = { value: new Vector4(clear_depth, clear_normal.x, clear_normal.y, clear_normal.z) };\n }\n}\n\nexport { ClearDepthNormalMaterial };\n","import vert from '../shaders/depth_normals/depth_normals.vert';\nimport frag from '../shaders/depth_normals/depth_normals.frag';\n\nimport { ShaderMaterial } from 'three';\n\nclass DepthNormalMaterial extends ShaderMaterial\n{\n constructor()\n {\n super({\n uniforms: {\n _FarPlane: { value: 1 }\n },\n vertexShader: vert,\n fragmentShader: frag\n });\n }\n\n set far_plane(value)\n {\n this.uniforms._FarPlane.value = value;\n }\n\n get far_plane()\n {\n return this.uniforms._FarPlane.value;\n }\n}\n\nexport { DepthNormalMaterial };\n","import { CameraManager } from '../CameraManager';\nimport { OScreen } from '../OScreen';\n\nimport { ClearDepthNormalMaterial } from '../materials/ClearDepthNormalMaterial';\nimport { DepthNormalMaterial } from '../materials/DepthNormalMaterial';\n\nimport { WebGLRenderTarget } from 'three';\nimport { Vector3 } from 'three';\n\nclass DepthAndNormalsRenderer\n{\n constructor()\n {\n this.RT = new WebGLRenderTarget(OScreen.width, OScreen.height);\n\n this.clear_depth_normal_mat = new ClearDepthNormalMaterial(1, new Vector3(0, 0, 1));\n this.depth_normal_material = new DepthNormalMaterial();\n }\n\n render(graphics)\n {\n this.__resize_RT_if_necessary();\n\n graphics.clear(this.RT, undefined, true, true);\n\n graphics.blit_clear_with_material(this.RT, this.clear_depth_normal_mat);\n\n this.depth_normal_material.far_plane = CameraManager.current.far;\n\n graphics.render(undefined, undefined, this.RT, this.depth_normal_material);\n }\n\n __resize_RT_if_necessary()\n {\n if (this.RT.width !== OScreen.width || this.RT.height !== OScreen.height)\n {\n this.RT.setSize(OScreen.width, OScreen.height);\n }\n }\n\n get render_target()\n {\n return this.RT;\n }\n}\n\nexport { DepthAndNormalsRenderer };\n","import { CameraManager } from './CameraManager';\nimport { Capabilities } from './Capabilities';\nimport { OScreen } from './OScreen';\nimport { SceneManager } from './SceneManager';\n\nimport { BaseRender } from './render_mode/BaseRender';\nimport { Blitter } from './render_utilities/Blitter';\nimport { DepthAndNormalsRenderer } from './render_utilities/DepthAndNormalsRenderer';\n\nimport {\n AlwaysDepth,\n FloatType,\n LinearSRGBColorSpace,\n NearestFilter,\n NoBlending,\n RGBAFormat,\n ShaderMaterial,\n WebGLRenderTarget\n} from 'three';\n\nimport { WebGLRenderer } from 'three';\n\nclass Graphics\n{\n init({ canvas, core_attributes, context_attributes, threejs_attributes, dpr })\n {\n this._renderer = undefined;\n this.blitter = undefined;\n this.canvas = undefined;\n this.no_render = undefined;\n this.current_render_mode = undefined;\n this.generateDepthNormalTexture = false;\n this.depth_and_normals_renderer = undefined;\n\n this.is_webgl2 = false;\n this.canvas_context = undefined;\n this.context_attributes = undefined;\n\n this.core_attributes = {\n force_webgl2: true,\n xr_enabled: false\n };\n\n this.context_attributes = {\n alpha: true,\n antialias: false,\n depth: true,\n desynchronized: false,\n failIfMajorPerformanceCaveat: false,\n powerPreference: 'high-performance',\n premultipliedAlpha: true,\n preserveDrawingBuffer: true,\n stencil: false\n };\n\n this.threejs_attributes = {\n logarithmicDepthBuffer: false\n };\n\n Object.assign(this.core_attributes, core_attributes);\n Object.assign(this.context_attributes, context_attributes);\n\n Object.assign(this.threejs_attributes, this.context_attributes);\n Object.assign(this.threejs_attributes, threejs_attributes);\n\n if (this.core_attributes.force_webgl2)\n {\n this.canvas_context = canvas.getContext('webgl2', this.context_attributes) ||\n canvas.getContext('webgl', this.context_attributes) ||\n canvas.getContext('experimental-webgl', this.context_attributes);\n }\n else\n {\n this.canvas_context = canvas.getContext('webgl', this.context_attributes) ||\n canvas.getContext('experimental-webgl', this.context_attributes);\n }\n\n this.is_webgl2 = this.canvas_context.constructor.name === 'WebGL2RenderingContext';\n\n // console.log(`Using WebGL ${this.is_webgl2 ? 2 : 1}`);\n\n this.threejs_attributes.canvas = canvas;\n this.threejs_attributes.context = this.canvas_context;\n\n this._renderer = new WebGLRenderer(this.threejs_attributes);\n\n if (this.core_attributes.xr_enabled)\n {\n this._renderer.xr.enabled = true;\n }\n else\n {\n this._renderer.autoClear = false;\n }\n\n OScreen.dpr = dpr;\n this._renderer.setPixelRatio(1);\n\n if (!this.is_webgl2)\n {\n this._renderer.extensions.get('ANGLE_instanced_arrays');\n }\n\n this.blitter = new Blitter(this._renderer);\n\n this.canvas = this._renderer.domElement;\n\n this.no_render = new BaseRender();\n\n this.current_render_mode = this.no_render;\n\n Capabilities.max_anisotropy = this._renderer.capabilities.getMaxAnisotropy();\n Capabilities.vertex_texture_sampler_available = this._renderer.capabilities.maxVertexTextures > 0;\n Capabilities.fp_textures_available = this.is_floating_point_texture_available();\n\n this.generateDepthNormalTexture = false;\n\n this.depth_and_normals_renderer = new DepthAndNormalsRenderer();\n }\n\n get dom_element()\n {\n return this._renderer.domElement;\n }\n\n get depth_normals_RT()\n {\n return this.depth_and_normals_renderer.render_target;\n }\n\n set_state(new_state)\n {\n // console.log('VIEWAPI - map render mode switch to: ' + new_state.constructor.name);\n\n this.current_render_mode.on_exit(this, this._renderer);\n this.current_render_mode = new_state;\n this.current_render_mode.on_enter(this, this._renderer);\n }\n\n update()\n {\n if (this.generateDepthNormalTexture)\n {\n this.depth_and_normals_renderer.render(this);\n }\n\n this.__update_current_camera();\n\n if (CameraManager.current)\n {\n this.current_render_mode.render();\n }\n\n OScreen.update();\n }\n\n __update_current_camera()\n {\n if (CameraManager.current)\n {\n CameraManager.current.aspect = OScreen.aspect_ratio;\n CameraManager.current.updateProjectionMatrix();\n CameraManager.current.updateMatrix();\n CameraManager.current.updateMatrixWorld(true);\n }\n }\n\n render(scene, camera, RT, override_mat)\n {\n this.__apply_override_material(scene, override_mat);\n\n this._renderer.setRenderTarget(RT === undefined ? null : RT);\n this._renderer.render(scene || SceneManager.current,\n camera || CameraManager.current);\n\n this.__apply_override_material(scene, undefined);\n }\n\n compile(scene, camera, RT, override_mat)\n {\n this.__apply_override_material(scene, override_mat);\n\n this._renderer.setRenderTarget(RT === undefined ? null : RT);\n this._renderer.compile(scene || SceneManager.current,\n camera || CameraManager.current);\n\n this.__apply_override_material(scene, undefined);\n }\n\n async compile_async(scene, camera, RT, override_mat, target_scene)\n {\n this.__apply_override_material(scene, override_mat);\n\n this._renderer.setRenderTarget(RT === undefined ? null : RT);\n const promise = this._renderer.compileAsync(scene || SceneManager.current,\n camera || CameraManager.current, target_scene);\n\n this.__apply_override_material(scene, undefined);\n\n return promise;\n }\n\n render_scene(scene)\n {\n if (scene.on_pre_render)\n {\n scene.on_pre_render();\n }\n\n if (scene.render)\n {\n scene.render();\n }\n else\n {\n this.render(scene, undefined);\n }\n\n if (scene.on_post_render)\n {\n scene.on_post_render();\n }\n }\n\n __apply_override_material(scene, mat)\n {\n mat = mat === undefined ? null : mat;\n if (scene)\n {\n scene.overrideMaterial = mat;\n }\n else\n {\n SceneManager.current.overrideMaterial = mat;\n }\n }\n\n readback_RT(RT, buffer)\n {\n this._renderer.readRenderTargetPixels(RT, 0, 0, RT.width, RT.height, buffer);\n }\n\n clear(RT, camera, clear_depth, clear_stencil)\n {\n this._renderer.setRenderTarget(RT === undefined ? null : RT);\n\n if (camera)\n {\n this._renderer.setClearColor(camera.clear_color, camera.clear_alpha);\n }\n\n this._renderer.clear(!!camera, // clear color\n !!clear_depth,\n !!clear_stencil);\n }\n\n on_resize(entries, dpr)\n {\n for (const entry of entries)\n {\n OScreen.dpr = dpr;\n // this._renderer.setPixelRatio(dpr);\n\n OScreen.update_position(entry.contentRect.x, entry.contentRect.y);\n OScreen.update_size(entry.contentRect.width, entry.contentRect.height);\n\n this.canvas.width = OScreen.render_width;\n this.canvas.height = OScreen.render_height;\n\n this._renderer.setViewport(0, 0, OScreen.render_width, OScreen.render_height);\n\n this.__update_current_camera();\n }\n }\n\n material_pass(mat, dst)\n {\n this.blitter.material_pass(mat, dst);\n }\n\n blit(src_RT, dst_RT, mat)\n {\n if (mat)\n {\n this.blitter.blit_with_material(src_RT, dst_RT, mat);\n }\n else\n {\n this.blitter.blit(src_RT, dst_RT);\n }\n }\n\n blit_clear_with_material(dst_RT, mat)\n {\n this.blitter.blit_clear_with_material(dst_RT, mat);\n }\n\n take_screenshot(blob_callback, width = OScreen.width, height = OScreen.height)\n {\n // const ctx = this;\n\n const old_width = OScreen.width;\n const old_height = OScreen.height;\n\n const new_width = width;\n const new_height = height;\n\n const tile_width = 1024;\n const tile_height = 1024;\n\n const divisions_x = parseInt(Math.ceil(new_width / tile_width));\n const divisions_y = parseInt(Math.ceil(new_height / tile_height));\n\n OScreen.update_size(tile_width, tile_height);\n const old_dpr = this._renderer.getPixelRatio();\n this._renderer.setPixelRatio(1);\n\n this._renderer.setSize(tile_width, tile_height, false);\n\n const canvas_2d = document.createElement('canvas');\n const ctx_2D = canvas_2d.getContext('2d');\n\n ctx_2D.canvas.width = new_width;\n ctx_2D.canvas.height = new_height;\n\n CameraManager.current.aspect = OScreen.aspect_ratio;\n CameraManager.current.updateMatrix();\n CameraManager.current.updateMatrixWorld(true);\n\n for (let x = 0; x < divisions_x; x++)\n {\n for (let y = 0; y < divisions_y; y++)\n {\n CameraManager.current.setViewOffset(new_width, new_height,\n OScreen.width * x, OScreen.height * y,\n OScreen.width, OScreen.height);\n this.current_render_mode.render();\n\n ctx_2D.drawImage(this._renderer.domElement, OScreen.width * x, OScreen.height * y);\n }\n }\n\n // transform the result canvas into a blob\n // } from them the callback turns into a ULR and download it\n ctx_2D.canvas.toBlob(blob_callback, 'image/png;base64;');\n\n CameraManager.current.clearViewOffset();\n\n OScreen.update_size(old_width, old_height);\n this._renderer.setPixelRatio(old_dpr);\n this._renderer.setSize(old_width, old_height, false);\n\n CameraManager.current.aspect = OScreen.aspect_ratio;\n CameraManager.current.updateMatrix();\n CameraManager.current.updateMatrixWorld(true);\n }\n\n download_screenshot(blob)\n {\n const link = document.createElement('a');\n link.download = 'Snapshot.png';\n\n link.href = URL.createObjectURL(blob);\n link.click();\n\n link.onclick = function()\n {\n requestAnimationFrame(function()\n {\n URL.revokeObjectURL(link.href);\n });\n link.removeAttribute('href');\n };\n }\n\n dispose()\n {\n this._renderer.dispose();\n this.current_render_mode.dispose();\n this.blitter.dispose();\n }\n\n is_floating_point_texture_available()\n {\n const RT = new WebGLRenderTarget(1, 1, {\n minFilter: NearestFilter,\n magFilter: NearestFilter,\n format: RGBAFormat,\n colorSpace: LinearSRGBColorSpace,\n type: FloatType,\n stencilBuffer: false,\n depthBuffer: false\n });\n\n const vert = `\n void main()\n {\n gl_Position = vec4(uv * 2.0 - 1.0, 1.0, 1.0);\n }\n `;\n const frag = `\n void main()\n {\n gl_FragColor = vec4(0.0, 4865.35, 0.0, 1.0);\n }\n `;\n\n const mat = new ShaderMaterial({\n vertexShader: vert,\n fragmentShader: frag,\n depthWrite: false,\n blending: NoBlending,\n depthTest: false,\n depthFunc: AlwaysDepth\n });\n\n this.material_pass(mat, RT);\n\n const output = new Float32Array(4);\n this._renderer.readRenderTargetPixels(RT, 0, 0, 1, 1, output);\n\n return Math.abs(output[1] - 4865.35) < 0.001;\n }\n}\n\nconst graphics = new Graphics();\nexport { graphics as Graphics };\n","class Idle\n{\n constructor()\n {\n }\n\n get is_animating()\n {\n return false;\n }\n\n on_enter(view)\n {\n\n }\n\n update(view)\n {\n }\n\n on_exit(view)\n {\n\n }\n}\n\nexport { Idle };\n","import { Time } from '../../Time';\nimport { Idle } from './Idle';\n\nimport { OMath } from '../../utilities/OMath';\nclass Animating\n{\n constructor()\n {\n this.t = 0;\n this.easing_function_t = 0;\n }\n\n get is_animating()\n {\n return true;\n }\n\n on_enter(animator)\n {\n }\n\n update(animator)\n {\n this.t += Time.delta_time / animator.duration;\n\n this.easing_function_t = animator.easing_function(this.t);\n this.easing_function_t = OMath.clamp(this.easing_function_t, 0, 1);\n\n animator.set_property_value(OMath.lerp(animator.from, animator.to, this.easing_function_t));\n\n if (this.easing_function_t >= 0.9999)\n {\n animator.set_property_value(animator.to);\n\n animator.set_current_state(new Idle());\n animator.finished_callback(animator);\n }\n }\n\n on_exit(view)\n {\n\n }\n}\n\nexport { Animating };\n","import { Animating } from './css_animator_states/Animating';\nimport { Idle } from './css_animator_states/Idle';\nimport { EasingFunctions } from '../utilities/EasingFunctions';\n\nclass CSSAnimator\n{\n constructor({\n element,\n css_property,\n from = 0,\n to = 1,\n duration = 1,\n value_prefix = '',\n value_suffix = '',\n easing_function = EasingFunctions.ease_in_out_cubic,\n finished_callback = () =>\n {}\n })\n {\n this.element = element;\n this.css_property = css_property;\n this.from = from;\n this.to = to;\n this.value_prefix = value_prefix;\n this.value_suffix = value_suffix;\n this.duration = duration;\n this.easing_function = easing_function;\n this.finished_callback = finished_callback;\n\n this.current_state = new Idle();\n }\n\n animate()\n {\n this.set_current_state(new Animating());\n }\n\n stop()\n {\n this.set_current_state(new Idle());\n }\n\n set_property_value(value)\n {\n this.element.style[this.css_property] = `${this.value_prefix}${value}${this.value_suffix}`;\n }\n\n update()\n {\n this.current_state.update(this);\n }\n\n get is_animating()\n {\n return this.current_state.is_animating;\n }\n\n set_current_state(state)\n {\n this.current_state.on_exit(this);\n this.current_state = state;\n this.current_state.on_enter(this);\n }\n}\n\nexport { CSSAnimator };\n","\nclass OS\n{\n init()\n {\n this.operating_systems = {\n ANDROID: 'android',\n IOS: 'ios',\n LINUX: 'linux',\n MAC: 'mac',\n WINDOWS: 'windows'\n };\n\n this.is_mobile = !!(navigator.userAgent.match(/(iPhone|iPod|iPad|Android|playbook|silk|BlackBerry|BB10|Windows Phone|Tizen|Bada|webOS|IEMobile|Opera Mini)/));\n this.is_ipad = !!(navigator.userAgent.match(/Mac/) && navigator.maxTouchPoints && navigator.maxTouchPoints > 2);\n this.is_ios = !!navigator.userAgent.match(/(iPhone|iPod|iPad)/) || this.is_ipad;\n\n this.is_android = this.get_os() === this.operating_systems.ANDROID;\n this.is_linux = this.get_os() === this.operating_systems.LINUX;\n this.is_mac = this.get_os() === this.operating_systems.MAC;\n this.is_windows = this.get_os() === this.operating_systems.WINDOWS;\n }\n\n get_os()\n {\n const userAgent = window.navigator.userAgent;\n const platform = window.navigator.platform;\n const macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'];\n const windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'];\n const iosPlatforms = ['iPhone', 'iPad', 'iPod'];\n let os = null;\n\n if (macosPlatforms.indexOf(platform) !== -1)\n {\n os = this.operating_systems.MAC;\n }\n else if (iosPlatforms.indexOf(platform) !== -1)\n {\n os = this.operating_systems.IOS;\n }\n else if (windowsPlatforms.indexOf(platform) !== -1)\n {\n os = this.operating_systems.WINDOWS;\n }\n else if (/Android/.test(userAgent))\n {\n os = this.operating_systems.ANDROID;\n }\n else if (!os && /Linux/.test(platform))\n {\n os = this.operating_systems.LINUX;\n }\n\n return os;\n }\n}\n\nconst os = new OS();\nexport { os as OS };\n","import { Vector3 } from 'three';\n\nclass ReflectionPlaneContext\n{\n init()\n {\n this.target_geometry = undefined;\n this.target_position = new Vector3();\n }\n\n set_target_geometry(geometry)\n {\n this.target_geometry = geometry;\n }\n}\n\nconst reflection_plane_context = new ReflectionPlaneContext();\nexport { reflection_plane_context as ReflectionPlaneContext };\n","import { DataTexture, FloatType, Mesh, RGBAFormat, ShaderMaterial, Vector2 } from 'three';\n\nclass GeometryBatch\n{\n constructor(geometry, batch_width)\n {\n this.geometry = geometry;\n\n this.material = undefined;\n this.uniforms = {};\n this.batch_width = batch_width;\n\n this.data_textures = [];\n\n this.object_names = undefined;\n\n this.zero_offset = new Vector2();\n this.write_offset = new Vector2();\n\n this.uniform_dirty_count = 0;\n\n this.tmp_uploaded_data_count = 0;\n }\n\n init(object_names, vert_shader, frag_shader)\n {\n this.material = new ShaderMaterial({\n uniforms: this.uniforms,\n vertexShader: vert_shader,\n fragmentShader: frag_shader\n });\n this.object_names = object_names;\n }\n\n add_global_uniform(name, data)\n {\n this.uniforms[name] = { value: data };\n this.material.needsUpdate = true;\n }\n\n set_global_uniform(name, data)\n {\n this.uniforms[name].value = data;\n }\n\n add_object_uniform_v3(uniform_name, default_value_v3)\n {\n const src_tex = this.__create_rgb_texture(this.batch_width);\n const dst_tex = this.__create_rgb_texture(this.batch_width);\n const one_pixel_tex = this.__create_rgb_texture(1);\n\n const new_data_tex = this.__add_data_texture(uniform_name, src_tex, dst_tex, one_pixel_tex);\n\n if (default_value_v3)\n {\n this.__flood_data_texture_rgb(new_data_tex, default_value_v3);\n }\n }\n\n add_object_uniform_v4(uniform_name, default_value_v4)\n {\n const src_tex = this.__create_rgba_texture(this.batch_width);\n const dst_tex = this.__create_rgba_texture(this.batch_width);\n const one_pixel_tex = this.__create_rgba_texture(1);\n\n const new_data_tex = this.__add_data_texture(uniform_name, src_tex, dst_tex, one_pixel_tex);\n\n if (default_value_v4)\n {\n this.__flood_data_texture_rgba(new_data_tex, default_value_v4);\n }\n }\n\n add_object_uniform_v4_float(uniform_name, default_value_v4)\n {\n const src_tex = this.__create_rgba_float_texture(this.batch_width);\n const dst_tex = this.__create_rgba_float_texture(this.batch_width);\n const one_pixel_tex = this.__create_rgba_float_texture(1);\n\n const new_data_tex = this.__add_data_texture(uniform_name, src_tex, dst_tex, one_pixel_tex);\n\n if (default_value_v4)\n {\n this.__flood_data_texture_rgba(new_data_tex, default_value_v4);\n }\n }\n\n set_object_uniform_v3(object_name, uniform_name, vector3, use_r, use_g, use_b)\n {\n const obj_index = this.__get_object_index(object_name);\n const data_texture = this.__get_data_texture(uniform_name);\n\n this.__set_pixel_rgb(data_texture.src, obj_index, vector3, use_r, use_g, use_b);\n this.__set_pixel_rgb(data_texture.one_pixel, 0, vector3, use_r, use_g, use_b);\n\n data_texture.last_accessed_index = obj_index;\n\n data_texture.dirty_count++;\n }\n\n set_object_uniform_v4(object_name, uniform_name, vector4, use_r, use_g, use_b, use_a)\n {\n const obj_index = this.__get_object_index(object_name);\n const data_texture = this.__get_data_texture(uniform_name);\n\n this.__set_pixel_rgba(data_texture.src, obj_index, vector4, use_r, use_g, use_b, use_a);\n this.__set_pixel_rgba(data_texture.one_pixel, 0, vector4, use_r, use_g, use_b, use_a);\n data_texture.last_accessed_index = obj_index;\n\n data_texture.dirty_count++;\n }\n\n upload_texture_data(renderer, upload_budget)\n {\n for (let i = 0; i < this.data_textures.length; i++)\n {\n if (upload_budget > 0 && this.data_textures[i].dirty_count > 0)\n {\n if (this.data_textures[i].dirty_count === 1)\n {\n this.__partial_texture_data_upload(renderer, this.data_textures[i]);\n }\n if (this.data_textures[i].dirty_count > 1)\n {\n this.__full_texture_data_upload(renderer, this.data_textures[i]);\n }\n\n this.data_textures[i].dirty_count = 0;\n\n upload_budget--;\n }\n }\n }\n\n get_uniform_dirty_count()\n {\n this.uniform_dirty_count = 0;\n for (let i = 0; i < this.data_textures.length; i++)\n {\n if (this.data_textures[i].dirty_count > 0)\n {\n this.uniform_dirty_count++;\n }\n }\n return this.uniform_dirty_count;\n }\n\n __full_texture_data_upload(renderer, texture_data)\n {\n // console.log(\"full texture update of\"+ texture_data.name);\n texture_data.dst.needsUpdate = true;\n renderer.copyTextureToTexture(\n this.zero_offset,\n texture_data.src,\n texture_data.dst\n );\n }\n\n __partial_texture_data_upload(renderer, texture_data)\n {\n // console.log(\"partial texture update\"+ texture_data.name);\n const index = texture_data.last_accessed_index;\n if (index === -1)\n {\n return;\n }\n\n this.write_offset.y = Math.floor(index / this.batch_width);\n this.write_offset.x = index - this.batch_width * this.write_offset.y;\n renderer.copyTextureToTexture(\n this.write_offset,\n texture_data.one_pixel,\n texture_data.dst\n );\n }\n\n get_mesh()\n {\n return new Mesh(this.geometry, this.material);\n }\n\n __set_pixel_rgb(data_texture, index, vector3, use_r, use_g, use_b)\n {\n if (use_r)\n {\n data_texture.image.data[index * 3 + 0] = vector3.x;\n }\n if (use_g)\n {\n data_texture.image.data[index * 3 + 1] = vector3.y;\n }\n if (use_b)\n {\n data_texture.image.data[index * 3 + 2] = vector3.z;\n }\n }\n\n __set_pixel_rgba(data_texture, index, vector4, use_r, use_g, use_b, use_a)\n {\n if (use_r)\n {\n data_texture.image.data[index * 4 + 0] = vector4.x;\n }\n if (use_g)\n {\n data_texture.image.data[index * 4 + 1] = vector4.y;\n }\n if (use_b)\n {\n data_texture.image.data[index * 4 + 2] = vector4.z;\n }\n if (use_a)\n {\n data_texture.image.data[index * 4 + 3] = vector4.w;\n }\n }\n\n __flood_data_texture_rgb(data_texture, v3)\n {\n for (let i = 0; i < this.batch_width * this.batch_width; i++)\n {\n this.__set_pixel_rgb(data_texture.src, i, v3, true, true, true);\n data_texture.dirty_count++;\n }\n }\n\n __flood_data_texture_rgba(data_texture, v4)\n {\n for (let i = 0; i < this.batch_width * this.batch_width; i++)\n {\n this.__set_pixel_rgba(data_texture.src, i, v4, true, true, true, true);\n data_texture.dirty_count++;\n }\n }\n\n __create_rgb_texture(width)\n {\n const data = new Uint8Array(3 * width * width);\n return new DataTexture(data, width, width, RGBAFormat);\n }\n\n __create_rgba_texture(width)\n {\n const data = new Uint8Array(4 * width * width);\n return new DataTexture(data, width, width, RGBAFormat);\n }\n\n __create_rgba_float_texture(width)\n {\n const data = new Float32Array(4 * width * width);\n return new DataTexture(data, width, width, RGBAFormat, FloatType);\n }\n\n __get_data_texture(uniform_name)\n {\n for (let i = 0; i < this.data_textures.length; i++)\n {\n if (this.data_textures[i].name === uniform_name)\n {\n return this.data_textures[i];\n }\n }\n console.error('Data texture ' + uniform_name + ' does not exist');\n return undefined;\n }\n\n __get_object_index(name)\n {\n for (let i = 0; i < this.object_names.length; i++)\n {\n if (this.object_names[i] === name)\n {\n return i;\n }\n }\n console.error('the name ' + name + ' is not contained in this batch');\n return undefined;\n }\n\n __add_data_texture(uniform_name, src_texture, dst_texture, one_pixel_text)\n {\n dst_texture.needsUpdate = true;\n\n this.data_textures.push({\n name: uniform_name,\n src: src_texture,\n dst: dst_texture,\n one_pixel: one_pixel_text,\n last_accessed_index: -1,\n dirty_count: 0\n });\n\n this.uniforms[uniform_name] = { value: dst_texture };\n return this.data_textures[this.data_textures.length - 1];\n }\n\n dispose()\n {\n for (let i = 0; i < this.data_textures.length; i++)\n {\n this.data_textures[i].src.dispose();\n this.data_textures[i].dst.dispose();\n this.data_textures[i].one_pixel.dispose();\n }\n }\n}\n\nexport { GeometryBatch };\n","import { GeometryBatch } from './GeometryBatch';\n\nimport * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js';\n\nimport { BufferAttribute } from 'three';\nimport { OMath } from '../utilities/OMath';\n\nclass GeometryBatcher\n{\n init()\n {\n this.batches = [];\n }\n\n batch(buffer_geometries)\n {\n const attr_accessor_uvs = [];\n const texture_width = OMath.ceilPowerOfTwo(Math.sqrt(buffer_geometries.length));\n // console.log(\"Store count: \" + buffer_geometries.length + \", Texture size: \" +texture_width);\n\n this.__init_uv_array(attr_accessor_uvs, texture_width);\n\n let uv_index = 0;\n\n for (let i = 0; i < buffer_geometries.length; i++)\n {\n const vertex_count = buffer_geometries[i].getAttribute('position').count;\n const y = Math.floor(i / texture_width);\n const x = i - texture_width * y;\n for (let count = 0; count < vertex_count; count++)\n {\n attr_accessor_uvs[uv_index] = (x / texture_width) + 0.5 / texture_width;\n attr_accessor_uvs[uv_index + 1] = (y / texture_width) + 0.5 / texture_width;\n uv_index += 2;\n }\n }\n\n const buffer_attribute = new BufferAttribute(new Float32Array(attr_accessor_uvs), 2);\n const buffer_geometry = BufferGeometryUtils.mergeGeometries(buffer_geometries);\n buffer_geometry.setAttribute('attr_accessor_uv', buffer_attribute);\n\n this.batches.push(new GeometryBatch(buffer_geometry, texture_width));\n return this.batches[this.batches.length - 1];\n }\n\n upload_texture_data(renderer)\n {\n for (let i = 0; i < this.batches.length; i++)\n {\n this.batches[i].upload_texture_data(renderer, 1);\n }\n }\n\n __init_uv_array(uvs, texture_width)\n {\n for (let i = 0; i < texture_width * texture_width * 2; i++)\n {\n uvs.push(0);\n }\n }\n}\n\nconst geometry_batcher = new GeometryBatcher();\nexport { geometry_batcher as GeometryBatcher };\n","import { CameraManager } from './CameraManager';\nimport { Graphics } from './Graphics';\n\nimport { Vector2 } from 'three';\nimport { Scene } from 'three';\nimport { OrthographicCamera } from 'three';\n\nclass UI\n{\n init(input)\n {\n this.input = input;\n this.ui_elements = [];\n this._tmp_normalized_pos = new Vector2();\n this.ss_scene = new Scene();\n this.ss_scene.matrixWorldAutoUpdate = false;\n this.ss_scene.frustumCulled = false;\n\n this.ws_scene = new Scene();\n this.ws_scene.matrixWorldAutoUpdate = false;\n this.ws_scene.frustumCulled = false;\n\n this.ss_camera = new OrthographicCamera(-1, 1, 1, -1, -100, 100);\n }\n\n delete_element(elem)\n {\n const index = this.ui_elements.indexOf(elem);\n if (index > -1)\n {\n this.ui_elements.splice(index, 1);\n }\n\n this.ss_scene.remove(elem);\n this.ws_scene.remove(elem);\n\n elem.dispose();\n }\n\n add_screen_space_element(elem)\n {\n this.ui_elements.push(elem);\n this.ss_scene.add(elem);\n\n elem.set_screen_space_coordinate_system();\n }\n\n add_world_space_element(elem)\n {\n this.ui_elements.push(elem);\n this.ws_scene.add(elem);\n\n elem.set_world_space_coordinate_system();\n }\n\n update()\n {\n // this.ss_camera.left = -OScreen.width / 2;\n // this.ss_camera.right = OScreen.width / 2;\n // this.ss_camera.top = OScreen.top / 2;\n // this.ss_camera.right = -OScreen.bottom / 2;\n this.ss_camera.updateProjectionMatrix();\n\n this._tmp_normalized_pos.copy(this.input.NDC);\n for (let i = 0; i < this.ui_elements.length; i++)\n {\n this.ui_elements[i].update_state(this._tmp_normalized_pos);\n }\n }\n\n render(renderer)\n {\n // renderer.render_ui(this.scene);\n if (this.ss_scene.children.length > 0)\n {\n Graphics.render(this.ss_scene, this.ss_camera);\n }\n if (this.ws_scene.children.length > 0)\n {\n Graphics.render(this.ws_scene, CameraManager.current);\n }\n }\n\n clear()\n {\n this.current_clicked_element = undefined;\n }\n}\n\nconst ui = new UI();\nexport { ui as UI };\n","import { Vector3, Plane, Quaternion, Sphere, Line3 } from 'three';\nimport { OMath } from './OMath';\n\nclass PerspectiveFrustumPointFitter\n{\n constructor()\n {\n this.sphere = new Sphere();\n }\n\n fit_points(points, camera_quaternion, vertical_fov, aspect)\n {\n this.sphere.setFromPoints(points);\n\n const v_fov = OMath.degToRad(vertical_fov / 2);\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const up_plane_normal = this.get_up_plane_normal(camera_quaternion, v_fov);\n const down_plane_normal = this.get_down_plane_normal(camera_quaternion, v_fov);\n const left_plane_normal = this.get_left_plane_normal(camera_quaternion, h_fov);\n const right_plane_normal = this.get_right_plane_normal(camera_quaternion, h_fov);\n\n const camera_forward_dir = new Vector3(0, 0, -1).applyQuaternion(camera_quaternion);\n\n const sphere_center = this.sphere.center.clone();\n\n const pull_back_distance = this.get_distance_to_fit_rect(this.sphere.radius * 2, this.sphere.radius * 2, vertical_fov, aspect);\n const far_pos = sphere_center.clone().add(camera_forward_dir.clone().multiplyScalar(pull_back_distance * -1));\n\n const up_plane = new Plane().setFromNormalAndCoplanarPoint(up_plane_normal, far_pos);\n const down_plane = new Plane().setFromNormalAndCoplanarPoint(down_plane_normal, far_pos);\n\n const left_plane = new Plane().setFromNormalAndCoplanarPoint(left_plane_normal, far_pos);\n const right_plane = new Plane().setFromNormalAndCoplanarPoint(right_plane_normal, far_pos);\n\n this.apply_center_correction_to_pos(far_pos, points, camera_quaternion, up_plane, down_plane, left_plane, right_plane);\n\n up_plane.setFromNormalAndCoplanarPoint(up_plane_normal, far_pos);\n down_plane.setFromNormalAndCoplanarPoint(down_plane_normal, far_pos);\n\n left_plane.setFromNormalAndCoplanarPoint(left_plane_normal, far_pos);\n right_plane.setFromNormalAndCoplanarPoint(right_plane_normal, far_pos);\n\n let closest_distance = Infinity;\n\n const inverse_dir = camera_forward_dir.clone().multiplyScalar(pull_back_distance * -2);\n for (let i = 0; i < points.length; i++)\n {\n const line = new Line3(points[i].clone(), points[i].clone().add(inverse_dir));\n\n const up_line_intersection = new Vector3();\n const down_line_intersection = new Vector3();\n\n const left_line_intersection = new Vector3();\n const right_line_intersection = new Vector3();\n\n up_plane.intersectLine(line, up_line_intersection);\n down_plane.intersectLine(line, down_line_intersection);\n\n left_plane.intersectLine(line, left_line_intersection);\n right_plane.intersectLine(line, right_line_intersection);\n\n if (up_line_intersection.length() < 0.0001)\n {\n console.log('up intersection not found', i);\n }\n if (down_line_intersection.length() < 0.0001)\n {\n console.log('down intersection not found', i);\n }\n if (left_line_intersection.length() < 0.0001)\n {\n console.log('left intersection not found', i);\n }\n if (right_line_intersection.length() < 0.0001)\n {\n console.log('right intersection not found', i);\n }\n\n const new_up_distance = points[i].clone().sub(up_line_intersection).length();\n const new_down_distance = points[i].clone().sub(down_line_intersection).length();\n\n const new_left_distance = points[i].clone().sub(left_line_intersection).length();\n const new_right_distance = points[i].clone().sub(right_line_intersection).length();\n\n const vertical_min = Math.min(new_up_distance, new_down_distance);\n const horizontal_min = Math.min(new_left_distance, new_right_distance);\n\n const min = Math.min(vertical_min, horizontal_min);\n\n if (min < closest_distance)\n {\n closest_distance = min;\n }\n }\n\n const forward_correction = camera_forward_dir.clone().multiplyScalar(closest_distance);\n const closest_position = far_pos.clone().add(forward_correction);\n\n return closest_position;\n }\n\n apply_center_correction_to_pos(target_pos, points, camera_quaternion, up_plane, down_plane, left_plane, right_plane)\n {\n const vertical_offset = this.get_vertical_correction(points, down_plane, up_plane, camera_quaternion);\n const horizontal_offset = this.get_horizontal_correction(points, left_plane, right_plane, camera_quaternion);\n\n target_pos.add(vertical_offset);\n target_pos.add(horizontal_offset);\n }\n\n get_vertical_correction(points, down_plane, up_plane, camera_quaternion)\n {\n let closest_distance_to_up_plane = Infinity;\n let closest_distance_to_down_plane = Infinity;\n // let closest_up_point = undefined;\n // let closest_down_point = undefined;\n\n const up_dir = new Vector3(0, 1, 0).applyQuaternion(camera_quaternion);\n for (let i = 0; i < points.length; i++)\n {\n const down_line = new Line3(points[i].clone(), points[i].clone().add(up_dir.clone().multiplyScalar(-5000000)));\n const up_line = new Line3(points[i].clone(), points[i].clone().add(up_dir.clone().multiplyScalar(5000000)));\n\n const down_line_intersection = new Vector3();\n const up_line_intersection = new Vector3();\n\n down_plane.intersectLine(down_line, down_line_intersection);\n up_plane.intersectLine(up_line, up_line_intersection);\n\n const down_dist = down_line_intersection.distanceTo(points[i]);\n const up_dist = up_line_intersection.distanceTo(points[i]);\n\n if (up_line_intersection.length() < 0.0001)\n {\n console.log('vertical up intersection not found', i);\n }\n if (down_line_intersection.length() < 0.0001)\n {\n console.log('vertical down intersection not found', i);\n }\n\n if (down_dist < closest_distance_to_down_plane)\n {\n closest_distance_to_down_plane = down_dist;\n // closest_down_point = points[i];\n }\n if (up_dist < closest_distance_to_up_plane)\n {\n closest_distance_to_up_plane = up_dist;\n // closest_up_point = points[i];\n }\n }\n\n const correction = (closest_distance_to_up_plane - closest_distance_to_down_plane) / 2;\n\n // console.log(\"vertical_correction\", correction)\n return up_dir.clone().multiplyScalar(-correction);\n }\n\n get_horizontal_correction(points, left_plane, right_plane, camera_quaternion)\n {\n let closest_distance_to_right_plane = Infinity;\n let closest_distance_to_left_plane = Infinity;\n // let closest_right_point = undefined;\n // let closest_left_point = undefined;\n\n const right_dir = new Vector3(1, 0, 0).applyQuaternion(camera_quaternion);\n\n for (let i = 0; i < points.length; i++)\n {\n const left_line = new Line3(points[i].clone(), points[i].clone().add(right_dir.clone().multiplyScalar(-5000000)));\n const right_line = new Line3(points[i].clone(), points[i].clone().add(right_dir.clone().multiplyScalar(5000000)));\n\n const left_line_intersection = new Vector3();\n const right_line_intersection = new Vector3();\n\n left_plane.intersectLine(left_line, left_line_intersection);\n right_plane.intersectLine(right_line, right_line_intersection);\n\n const left_dist = left_line_intersection.distanceTo(points[i]);\n const right_dist = right_line_intersection.distanceTo(points[i]);\n\n if (left_line_intersection.length() < 0.0001)\n {\n console.log('left intersection not found', i);\n }\n if (right_line_intersection.length() < 0.0001)\n {\n console.log('right intersection not found', i);\n }\n\n if (left_dist < closest_distance_to_left_plane)\n {\n closest_distance_to_left_plane = left_dist;\n // closest_left_point = points[i];\n }\n if (right_dist < closest_distance_to_right_plane)\n {\n closest_distance_to_right_plane = right_dist;\n // closest_right_point = points[i];\n }\n }\n\n const correction = (closest_distance_to_right_plane - closest_distance_to_left_plane) / 2;\n // console.log(\"horizontal_correction\", correction)\n\n return right_dir.clone().multiplyScalar(-correction);\n }\n\n get_up_plane_normal(camera_quaternion, v_fov)\n {\n const up_plane_normal = new Vector3(0, -1, 0);\n up_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), v_fov));\n up_plane_normal.applyQuaternion(camera_quaternion);\n return up_plane_normal;\n }\n\n get_down_plane_normal(camera_quaternion, v_fov)\n {\n const down_plane_normal = new Vector3(0, 1, 0);\n down_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), -v_fov));\n down_plane_normal.applyQuaternion(camera_quaternion);\n return down_plane_normal;\n }\n\n get_left_plane_normal(camera_quaternion, h_fov)\n {\n const left_plane_normal = new Vector3(1, 0, 0);\n left_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), h_fov));\n left_plane_normal.applyQuaternion(camera_quaternion);\n return left_plane_normal;\n }\n\n get_right_plane_normal(camera_quaternion, h_fov)\n {\n const right_plane_normal = new Vector3(-1, 0, 0);\n right_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), -h_fov));\n right_plane_normal.applyQuaternion(camera_quaternion);\n return right_plane_normal;\n }\n\n get_distance_to_fit_rect(width, height, vertical_fov, aspect)\n {\n const v_fov = (vertical_fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n}\n\nexport { PerspectiveFrustumPointFitter };\n","import { Vector3, Box3 } from 'three';\n\nclass OrthographicFrustumPointFitter\n{\n constructor()\n {\n\n }\n\n fit_points(points, camera_quaternion, vertical_fov, aspect)\n {\n const inverse_camera_quat = camera_quaternion.clone().inverse();\n\n const inverted_points = [];\n\n for (let i = 0; i < points.length; i++)\n {\n inverted_points.push(points[i].clone().applyQuaternion(inverse_camera_quat));\n }\n\n const box = new Box3().setFromPoints(inverted_points);\n const size = new Vector3();\n box.getSize(size);\n\n const distance = this.get_distance_to_fit_rect(size.x / 2, size.y / 2, vertical_fov, aspect);\n\n const center = new Vector3();\n box.getCenter(center);\n\n center.applyQuaternion(camera_quaternion);\n\n return {\n center: center,\n distance_to_center: distance\n };\n }\n\n get_distance_to_fit_rect(width, height, vertical_fov, aspect)\n {\n const v_fov = (vertical_fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n}\n\nexport { OrthographicFrustumPointFitter };\n","import { CameraManager } from '../CameraManager';\nimport { OMath } from '../utilities/OMath';\nimport { OScreen } from '../OScreen';\n\nimport { Vector3 } from 'three';\nimport { Matrix4 } from 'three';\nimport { Plane } from 'three';\nimport { Ray } from 'three';\nimport { Sphere } from 'three';\nimport { Box3 } from 'three';\nimport { PerspectiveFrustumPointFitter } from './PerspectiveFrustumPointFitter';\nimport { OrthographicFrustumPointFitter } from './OrthographicFrustumPointFitter';\n\nclass CameraUtilities\n{\n init(input)\n {\n this.tmp_mat = new Matrix4();\n this.plane = new Plane();\n this.ray = new Ray();\n\n this.tmp_size = new Vector3();\n this.tmp_unproj = new Vector3();\n\n this.input = input;\n }\n\n get_up_dir(camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.set(0, 1, 0);\n tmp_vec.applyQuaternion(camera.quaternion);\n\n return tmp_vec;\n }\n\n get_forward_dir(camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.set(0, 0, -1);\n tmp_vec.applyQuaternion(camera.quaternion);\n\n return tmp_vec;\n }\n\n get_right_dir(camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.set(1, 0, 0);\n tmp_vec.applyQuaternion(camera.quaternion);\n return tmp_vec;\n }\n\n unproject_mouse_position(NDC, camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n const v_fov = (camera.fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * camera.aspect)) / 2;\n\n const distV = Math.tan(v_fov) * camera.far;\n const distH = Math.tan(h_fov) * camera.far;\n\n tmp_vec.set(distH * NDC.x, distV * NDC.y, -camera.far).normalize();\n\n return tmp_vec.applyQuaternion(camera.quaternion);\n }\n\n get_plane_intersection(plane_position, plane_normal, NDC, camera)\n {\n camera = camera || CameraManager.current;\n NDC = NDC || this.input.NDC;\n\n const tmp_vec = new Vector3();\n\n this.plane.setFromNormalAndCoplanarPoint(plane_normal || this.get_forward_dir(camera), plane_position);\n if (camera.isPerspectiveCamera)\n {\n this.ray.set(camera.position, this.unproject_mouse_position(NDC, camera));\n }\n else\n {\n this.tmp_unproj.set(NDC.x, NDC.y, 1).unproject(camera);\n this.ray.set(camera.position, this.tmp_unproj);\n }\n\n this.ray.intersectPlane(this.plane, tmp_vec);\n return tmp_vec;\n }\n\n fit_points_on_camera(points, zoom_scale = 1)\n {\n const points_sphere = new Sphere().setFromPoints(points);\n const world_space_center = points_sphere.center;\n const camera_forward = this.get_forward_dir(CameraManager.current).clone();\n\n const plane = new Plane().setFromNormalAndCoplanarPoint(camera_forward, world_space_center);\n\n const points_on_plane = OMath.project_points_on_plane(points, plane);\n\n const projected_points_center = new Vector3();\n let box = new Box3().setFromPoints(points_on_plane);\n box.getCenter(projected_points_center);\n\n const up = new Vector3(0, 1, 0).applyQuaternion(CameraManager.current.quaternion);\n const right = up.clone().cross(camera_forward).normalize();\n const mat = new Matrix4().set(right.x, up.x, camera_forward.x, world_space_center.x,\n right.y, up.y, camera_forward.y, world_space_center.y,\n right.z, up.z, camera_forward.z, world_space_center.z,\n 0, 0, 0, 1);\n\n const inverse_mat = new Matrix4().getInverse(mat);\n for (let i = 0; i < points_on_plane.length; i++)\n {\n points_on_plane[i].applyMatrix4(inverse_mat);\n }\n\n const size = new Vector3();\n box = new Box3().setFromPoints(points_on_plane);\n box.getSize(size);\n size.multiplyScalar(zoom_scale);\n const projected_center = new Vector3();\n box.getCenter(projected_center);\n\n return {\n position: projected_points_center,\n zoom: this.get_zoom_to_fit_rect(size.x / 2, size.y / 2)\n };\n }\n\n get_zoom_to_fit_rect(width, height)\n {\n const v_fov = (CameraManager.current.fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * CameraManager.current.aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n\n get_zoom_to_fit_box(bb, camera)\n {\n if (camera.isOrthographicCamera)\n {\n bb.getSize(this.tmp_size);\n\n const obj_x = this.tmp_size.x;\n const obj_y = this.tmp_size.y;\n const object_aspect = obj_x / obj_y;\n if (OScreen.aspect_ratio / object_aspect > 1)\n {\n return OScreen.height / obj_y;\n }\n else\n {\n return OScreen.width / obj_x;\n }\n }\n else\n {\n // return this.fit_points_on_camera([bb.min, bb.max], 1).zoom;\n const size = new Vector3();\n bb.getSize(size);\n return this.get_zoom_to_fit_rect(size.x, size.y);\n }\n }\n\n get_html_screen_pos(object, camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n object.getWorldPosition(tmp_vec);\n tmp_vec.project(camera);\n\n tmp_vec.x = (tmp_vec.x * 0.5 + 0.5) * (OScreen.width);\n tmp_vec.y = (1 - (tmp_vec.y * 0.5 + 0.5)) * OScreen.height;\n return tmp_vec;\n }\n\n world_pos_to_screen(pos, camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.copy(pos);\n tmp_vec.project(camera);\n\n tmp_vec.x = (tmp_vec.x * 0.5 + 0.5) * (OScreen.width);\n tmp_vec.y = (1 - (tmp_vec.y * 0.5 + 0.5)) * OScreen.height;\n return tmp_vec;\n }\n\n update_projection(camera)\n {\n camera.left = -OScreen.width / 2;\n camera.right = OScreen.width / 2;\n camera.top = OScreen.height / 2;\n camera.bottom = -OScreen.height / 2;\n camera.aspect = OScreen.aspect_ratio;\n camera.updateProjectionMatrix(true);\n }\n\n fit_bounding_box_points(camera, bb, scale = 1)\n {\n const dir = new Vector3();\n dir.copy(bb.max).sub(bb.min);\n\n const p1 = bb.min.clone();\n\n const p2 = p1.clone().add(new Vector3(dir.x, 0, 0));\n const p3 = p1.clone().add(new Vector3(0, dir.y, 0));\n const p4 = p1.clone().add(new Vector3(0, 0, dir.z));\n\n const p5 = p1.clone().add(new Vector3(dir.x, 0, dir.z));\n const p6 = p1.clone().add(new Vector3(0, dir.y, dir.z));\n const p7 = bb.max.clone();\n const p8 = p1.clone().add(new Vector3(dir.x, dir.y, 0));\n return this.fit_points(camera, [p1, p2, p3, p4, p5, p6, p7, p8], scale);\n }\n\n fit_points(camera, points, zoom_scale = 1)\n {\n if (camera.isPerspectiveCamera)\n {\n const camera_forward_dir = new Vector3(0, 0, -1).applyQuaternion(camera.quaternion);\n const camera_backward_dir = camera_forward_dir.clone().multiplyScalar(-1);\n\n const fitter = new PerspectiveFrustumPointFitter();\n\n const aspect_ratio = OScreen.aspect_ratio;\n\n const camera_pos = fitter.fit_points(points, camera.quaternion, camera.fov * zoom_scale, aspect_ratio);\n const box = new Box3().setFromPoints(points);\n const center = new Vector3();\n box.getCenter(center);\n\n const reference_position_plane = new Plane().setFromNormalAndCoplanarPoint(camera_backward_dir, center);\n\n const camera_ray = new Ray(camera_pos, camera_forward_dir);\n\n const reference_position = new Vector3();\n camera_ray.intersectPlane(reference_position_plane, reference_position);\n\n const zoom = camera_pos.distanceTo(reference_position);\n\n return {\n zoom: zoom,\n reference_position: reference_position,\n camera_position: camera_pos\n };\n }\n else\n {\n const fitter = new OrthographicFrustumPointFitter();\n const result = fitter.fit_points(points, this.reference_rotation, camera.fov * zoom_scale, OScreen.aspect_ratio);\n\n this.reference_position.copy(result.center);\n this.reference_zoom = result.distance_to_center;\n\n const forward = new Vector3(0, 0, 1).applyQuaternion(camera.quaternion);\n return {\n zoom: result.distance_to_center,\n reference_position: result.center,\n camera_position: forward.multiplyScalar(result.distance_to_center)\n };\n }\n }\n}\n\nconst camera_utilities = new CameraUtilities();\nexport { camera_utilities as CameraUtilities };\n","import { Browser } from './Browser';\nimport { CameraManager } from './CameraManager';\nimport { Capabilities } from './Capabilities';\nimport { Debug } from './Debug';\nimport { Graphics } from './Graphics';\nimport { OS } from './OS';\nimport { OScreen } from './OScreen';\nimport { ReflectionPlaneContext } from './ReflectionPlaneContext';\nimport { ResourceContainer } from './ResourceContainer';\nimport { SceneManager } from './SceneManager';\nimport { GeometryBatcher } from './static_batcher/GeometryBatcher';\nimport { Time } from './Time';\nimport { UI } from './UI';\nimport { CameraUtilities } from './utilities/CameraUtilities';\n\nclass Initializer\n{\n constructor()\n {\n }\n\n init(input)\n {\n CameraManager.init();\n CameraUtilities.init(input);\n Capabilities.init();\n GeometryBatcher.init();\n\n OS.init();\n Browser.init();\n ReflectionPlaneContext.init();\n ResourceContainer.init();\n SceneManager.init();\n OScreen.init();\n Time.init();\n UI.init(input);\n\n Debug.init();\n }\n\n dispose(render_loop)\n {\n Graphics.dispose();\n SceneManager.dispose();\n\n render_loop.dispose();\n }\n}\n\nconst initializer = new Initializer();\nexport { initializer as Initializer };\n","class KeyboardInput\n{\n init(container)\n {\n this.ctrlz_pressed = false;\n this.ctrlz_fired = false;\n\n this.keys = {};\n this.keys_keys = [];\n this.container = container;\n\n this.container.addEventListener('keydown', this.on_key_down.bind(this), false);\n this.container.addEventListener('keyup', this.on_key_up.bind(this), false);\n }\n\n on_key_down(e)\n {\n if (e.keyCode === 90 && e.ctrlKey && !this.ctrlz_fired)\n {\n this.ctrlz_pressed = true;\n this.ctrlz_fired = true;\n }\n\n if (e.code)\n {\n this.press_key(e.code);\n }\n }\n\n on_key_up(e)\n {\n this.release_key(e.code);\n }\n\n clear()\n {\n this.ctrlz_pressed = false;\n\n for (let i = 0; i < this.keys_keys.length; i++)\n {\n this.keys[this.keys_keys[i]].pressed = false;\n this.keys[this.keys_keys[i]].released = false;\n }\n }\n\n release_key(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n key.fired = false;\n key.down = false;\n key.released = true;\n }\n }\n\n release_keys()\n {\n this.ctrlz_fired = false;\n\n for (let i = 0; i < this.keys_keys.length; i++)\n {\n this.keys[this.keys_keys[i]].fired = false;\n this.keys[this.keys_keys[i]].down = false;\n }\n }\n\n press_key(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n if (key.down === false)\n {\n key.pressed = true;\n }\n key.down = true;\n key.fired = true;\n }\n }\n\n is_key_pressed(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n return key.pressed;\n }\n return false;\n }\n\n is_key_down(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n return key.down;\n }\n return false;\n }\n\n is_key_released(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n return key.released;\n }\n\n return false;\n }\n\n register_key(key)\n {\n this.keys[key] =\n {\n key_name: key,\n pressed: false,\n down: false,\n fired: false\n };\n\n this.keys_keys = Object.keys(this.keys);\n }\n\n unregister_key(key_name)\n {\n delete this.keys[key_name];\n }\n\n dispose()\n {\n this.container.removeEventListener('keydown', this.on_key_down.bind(this), false);\n this.container.removeEventListener('keyup', this.on_key_up.bind(this), false);\n }\n}\n\nexport { KeyboardInput };\n","import { Color } from 'three';\nimport { OrthographicCamera as TOrthographicCamera } from 'three';\n\nclass OrthographicCamera extends TOrthographicCamera\n{\n constructor(left, right, top, bottom, near, far)\n {\n super(left, right, top, bottom, near, far);\n\n this.clear_color = new Color('#000000');\n this.clear_alpha = 1;\n }\n\n copy(camera)\n {\n super.copy(camera);\n this.clear_color.copy(camera.clear_color);\n this.clear_alpha = camera.clear_alpha;\n return this;\n }\n}\n\nexport { OrthographicCamera };\n","import frag from '../shaders/normal/normal.frag';\nimport vert from '../shaders/normal/normal.vert';\n\nimport { ShaderMaterial } from 'three';\n\nclass NormalMaterial extends ShaderMaterial\n{\n constructor()\n {\n super({\n uniforms: {\n },\n vertexShader: vert,\n fragmentShader: frag\n });\n }\n}\n\nexport { NormalMaterial };\n","import { CameraManager } from '../CameraManager';\nimport { SceneManager } from '../SceneManager';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Graphics } from '../Graphics';\nimport { NormalMaterial } from '../materials/NormalMaterial';\n\nclass DebugNormalsRender extends BaseRender\n{\n constructor()\n {\n super();\n }\n\n render()\n {\n Graphics.clear(undefined, CameraManager.current, true, true);\n\n Graphics.render(SceneManager.current, CameraManager.current, undefined, new NormalMaterial());\n }\n}\n\nexport { DebugNormalsRender };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/depth_normals/debug_normals.frag';\nimport depth_normals_vert from '../shaders/ssao/ssao.vert';\n\nimport { Matrix4 } from 'three';\n\nclass DisplayNormalTextureMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag, depth_normals_vert);\n this.uniforms._FarPlane = { value: 1 };\n this.uniforms._InverseProjMatrix = { value: new Matrix4() };\n }\n}\n\nexport { DisplayNormalTextureMaterial };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/ssao/ssao_compose.frag';\n\nclass SSAOComposeMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag);\n this.uniforms._AO = { value: undefined };\n }\n}\n\nexport { SSAOComposeMaterial };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/ssao/ssao.frag';\nimport vert from '../shaders/ssao/ssao.vert';\n\nimport { DataTexture, Matrix4, RGBAFormat, RepeatWrapping, Vector3 } from 'three';\n\nimport { OMath } from '../utilities/OMath';\nclass SSAOMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag, vert);\n\n this.uniforms._InverseProjMatrix = { value: new Matrix4() };\n this.uniforms._ProjectionMatrix = { value: new Matrix4() };\n\n this.uniforms._Bias = { value: 0.0125 };\n this.uniforms._Radius = { value: 0.3 };\n this.uniforms._FarPlane = { value: 100 };\n\n this.uniforms._SampleKernel = { value: this.__get_sample_kernel() };\n this.uniforms._RandomRotation = { value: this.__get_rotation_kernel() };\n }\n\n __get_sample_kernel()\n {\n const sample_kernel = [];\n const kernel_size = 64;\n\n for (let i = 0; i < kernel_size; i++)\n {\n const dir = new Vector3(Math.random() * 2 - 1,\n Math.random() * 2 - 1,\n Math.random());\n dir.normalize();\n let scale = i / kernel_size;\n scale = OMath.lerp(0.1, 1.0, scale * scale);\n dir.multiplyScalar(scale);\n\n sample_kernel.push(dir);\n }\n return sample_kernel;\n }\n\n __get_rotation_kernel()\n {\n const rotation_kernel = new Uint8Array(3 * 16);\n for (let i = 0; i < 16; i++)\n {\n rotation_kernel[i * 3 + 1] = Math.floor(Math.random() * 255);\n rotation_kernel[i * 3 + 2] = Math.floor(Math.random() * 255);\n rotation_kernel[i * 3 + 3] = 0;\n }\n\n const rotation_texture = new DataTexture(rotation_kernel, 4, 4, RGBAFormat);\n rotation_texture.wrapS = RepeatWrapping;\n rotation_texture.wrapT = RepeatWrapping;\n\n rotation_texture.needsUpdate = true;\n return rotation_texture;\n }\n}\n\nexport { SSAOMaterial };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/box_blur/box_blur.frag';\n\nimport { Vector2 } from 'three';\n\nclass BoxBlurMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag);\n this.uniforms._SampleDir = { value: new Vector2() };\n }\n}\n\nexport { BoxBlurMaterial };\n","import { BoxBlurMaterial } from '../materials/BoxBlurMaterial';\nimport { Graphics } from '../Graphics';\n\nimport { WebGLRenderTarget } from 'three';\n\nclass Blurrer\n{\n constructor(renderer)\n {\n this.RT1 = new WebGLRenderTarget(1, 1);\n this.RT2 = new WebGLRenderTarget(1, 1);\n this.box_blur_mat = new BoxBlurMaterial();\n }\n\n blur(RT)\n {\n if (RT.width !== this.RT1.width || RT.height !== this.RT1.height)\n {\n this.RT1.setSize(RT.width, RT.height);\n this.RT2.setSize(RT.width, RT.height);\n }\n\n this.box_blur_mat.uniforms._SampleDir.value.set(1, 0);\n Graphics.blit(RT, this.RT1, this.box_blur_mat);\n this.box_blur_mat.uniforms._SampleDir.value.set(0, 1);\n Graphics.blit(this.RT1, RT, this.box_blur_mat);\n // return this.RT2;\n }\n}\n\nexport { Blurrer };\n","import { CameraManager } from '../CameraManager';\nimport { Graphics } from '../Graphics';\nimport { DisplayNormalTextureMaterial } from '../materials/DisplayNormalTextureMaterial';\nimport { SSAOComposeMaterial } from '../materials/SSAOComposeMaterial';\nimport { SSAOMaterial } from '../materials/SSAOMaterial';\nimport { OScreen } from '../OScreen';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Blurrer } from '../render_utilities/Blurrer';\nimport { SceneManager } from '../SceneManager';\n\nimport { WebGLRenderTarget } from 'three';\n\nclass NormalAORender extends BaseRender\n{\n constructor(use_ssaa = false)\n {\n super();\n\n this.ssao_mat = new SSAOMaterial();\n this.ssao_compose_mat = new SSAOComposeMaterial();\n this.debug_normals = new DisplayNormalTextureMaterial();\n\n this.ssaa = use_ssaa ? 2 : 1;\n\n this.main_RT = new WebGLRenderTarget(OScreen.width * this.ssaa, OScreen.height * this.ssaa);\n\n this.SSAO_RT = new WebGLRenderTarget(OScreen.width, OScreen.height);\n\n this.blurrer = new Blurrer();\n Graphics.generateDepthNormalTexture = true;\n }\n\n render()\n {\n this.__check_RT_size();\n\n Graphics.clear(this.main_RT, CameraManager.current, true, false);\n Graphics.render(SceneManager.current, CameraManager.current, this.main_RT);\n\n this.__update_uniforms();\n\n Graphics.blit(Graphics.depth_normals_RT, this.SSAO_RT, this.ssao_mat);\n\n // // BLUR\n this.blurrer.blur(this.SSAO_RT);\n Graphics.blit(this.SSAO_RT, undefined);\n\n // // COMPOSE\n this.ssao_compose_mat.uniforms._AO.value = this.SSAO_RT.texture;\n Graphics.blit(this.main_RT, undefined, this.ssao_compose_mat);\n\n // Graphics.blit(this.SSAO_RT, undefined);\n }\n\n __update_uniforms()\n {\n this.ssao_mat.uniforms._InverseProjMatrix.value.getInverse(CameraManager.current.projectionMatrix);\n this.ssao_mat.uniforms._ProjectionMatrix.value.copy(CameraManager.current.projectionMatrix);\n this.ssao_mat.uniforms._FarPlane.value = CameraManager.current.far;\n }\n\n __check_RT_size()\n {\n if (this.main_RT.width !== OScreen.width * this.ssaa || this.main_RT.height !== OScreen.height * this.ssaa)\n {\n this.main_RT.setSize(OScreen.width * this.ssaa, OScreen.height * this.ssaa);\n this.SSAO_RT.setSize(OScreen.width, OScreen.height);\n }\n }\n}\n\nexport { NormalAORender };\n","import { CameraManager } from '../CameraManager';\nimport { SceneManager } from '../SceneManager';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Graphics } from '../Graphics';\n\nclass NormalRender extends BaseRender\n{\n constructor()\n {\n super();\n }\n\n render()\n {\n Graphics.clear(undefined, CameraManager.current, true, true);\n\n if (SceneManager.current.on_pre_render)\n {\n SceneManager.current.on_pre_render();\n }\n\n if (SceneManager.current.render)\n {\n SceneManager.current.render();\n }\n else\n {\n Graphics.render(SceneManager.current, CameraManager.current);\n }\n\n if (SceneManager.current.on_post_render)\n {\n SceneManager.current.on_post_render();\n }\n }\n}\n\nexport { NormalRender };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/gaussian_blur/gaussian_blur.frag';\n\nimport { Vector2 } from 'three';\n\nclass GaussianBlurMaterial extends BlitMaterial\n{\n constructor(kernel_radius)\n {\n super(frag, undefined, {\n KERNEL_RADIUS: kernel_radius,\n SIGMA: kernel_radius\n });\n\n this.uniforms.texSize = { value: new Vector2(0.5, 0.5) };\n this.uniforms.direction = { value: new Vector2(0.5, 0.5) };\n }\n\n set_size(w, h)\n {\n this.uniforms.texSize.value.x = w;\n this.uniforms.texSize.value.y = h;\n }\n\n set_direction(x, y)\n {\n this.uniforms.direction.value.set(x, y);\n }\n}\n\nexport { GaussianBlurMaterial };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/luminosity_high_pass/luminosity_high_pass.frag';\n\nimport { Color } from 'three';\nclass LuminosityHighPassMaterial extends BlitMaterial\n{\n constructor(kernel_radius)\n {\n super(frag);\n\n this.uniforms.luminosityThreshold = { value: 0.23 };\n this.uniforms.smoothWidth = { value: 0.01 };\n this.uniforms.defaultColor = { value: new Color('#000000') };\n this.uniforms.defaultOpacity = { value: 0.0 };\n }\n}\n\nexport { LuminosityHighPassMaterial };\n","import { GaussianBlurMaterial } from '../materials/GaussianBlurMaterial';\nimport { LuminosityHighPassMaterial } from '../materials/LuminosityHighPassMaterial';\nimport { Graphics } from '../Graphics';\n\nimport { WebGLRenderTarget, LinearFilter, RGBAFormat } from 'three';\n\nclass GaussianBlurrer\n{\n constructor(nMips = 5)\n {\n this.current_width = 1;\n this.current_height = 1;\n\n this.separableBlurMaterials = [];\n this.renderTargetsHorizontal = [];\n this.renderTargetsVertical = [];\n\n this.nMips = nMips;\n this.kernelSizeArray = [3, 5, 7, 9, 11];\n this.rt_pars = { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat };\n\n this.renderTargetBright = new WebGLRenderTarget(1, 1, this.rt_pars);\n this.renderTargetBright.texture.generateMipmaps = false;\n\n this.init_materials();\n this.init_RT();\n\n this.luminosity_high_pass_mat = new LuminosityHighPassMaterial();\n }\n\n blur(RT, use_luminosity_high_pass)\n {\n this.resize_RT(RT.width, RT.height);\n\n if (use_luminosity_high_pass)\n {\n Graphics.blit(RT, this.renderTargetBright, this.luminosity_high_pass_mat);\n }\n else\n {\n Graphics.blit(RT, this.renderTargetBright);\n }\n\n let inputRenderTarget = this.renderTargetBright;\n\n for (let i = 0; i < this.nMips; i++)\n {\n const mat = this.separableBlurMaterials[i];\n\n mat.set_direction(1, 0);\n Graphics.blit(inputRenderTarget, this.renderTargetsHorizontal[i], mat);\n\n mat.set_direction(0, 1);\n Graphics.blit(this.renderTargetsHorizontal[i], this.renderTargetsVertical[i], mat);\n\n inputRenderTarget = this.renderTargetsVertical[i];\n }\n }\n\n get_blurred_texture()\n {\n return this.renderTargetsHorizontal[0].texture;\n }\n\n get_blurred_RT()\n {\n return this.renderTargetsHorizontal[0];\n }\n\n init_RT()\n {\n this.dispose_RT();\n\n this.renderTargetBright.setSize(1, 1);\n\n for (let i = 0; i < this.nMips; i++)\n {\n const hor = new WebGLRenderTarget(1, 1, this.rt_pars);\n const ver = new WebGLRenderTarget(1, 1, this.rt_pars);\n\n hor.texture.generateMipmaps = false;\n ver.texture.generateMipmaps = false;\n\n this.renderTargetsHorizontal.push(hor);\n this.renderTargetsVertical.push(ver);\n }\n }\n\n resize_RT(texture_width, texture_height)\n {\n if (this.current_width === texture_width && this.current_height === texture_height)\n {\n return;\n }\n\n this.current_width = texture_width;\n this.current_height = texture_height;\n\n let width = Math.round(texture_width / 2);\n let height = Math.round(texture_height / 2);\n\n this.renderTargetBright.setSize(width, height);\n\n for (let i = 0; i < this.nMips; i++)\n {\n this.renderTargetsVertical[i].setSize(width, height);\n this.renderTargetsHorizontal[i].setSize(width, height);\n this.separableBlurMaterials[i].set_size(width, height);\n\n width = Math.round(width / 2);\n height = Math.round(height / 2);\n }\n }\n\n init_materials(texture_width, texture_height)\n {\n this.dispose_materials();\n\n for (let i = 0; i < this.nMips; i++)\n {\n this.separableBlurMaterials.push(new GaussianBlurMaterial(this.kernelSizeArray[i]));\n }\n }\n\n dispose_materials()\n {\n for (let i = 0; i < this.separableBlurMaterials.length; i++)\n {\n this.separableBlurMaterials[i].dispose();\n }\n this.separableBlurMaterials.length = 0;\n }\n\n dispose_RT()\n {\n for (let i = 0; i < this.renderTargetsVertical.length; i++)\n {\n this.renderTargetsHorizontal[i].dispose();\n this.renderTargetsVertical[i].dispose();\n }\n this.renderTargetBright.dispose();\n\n this.renderTargetsHorizontal.length = 0;\n this.renderTargetsVertical.length = 0;\n }\n}\n\nexport { GaussianBlurrer };\n","import { OScreen } from '../OScreen';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { UnrealBloomComposeMaterial } from '../materials/UnrealBloomComposeMaterial';\nimport { AddMaterial } from '../materials/AddMaterial';\n\nimport { WebGLRenderTarget } from 'three';\n\nimport { GaussianBlurrer } from '../render_utilities/GaussianBlurrer';\nimport { Graphics } from '../Graphics';\nimport { CameraManager } from '../CameraManager';\nimport { SceneManager } from '../SceneManager';\n\nclass UnrealBloomRender extends BaseRender\n{\n constructor()\n {\n super();\n\n this.bloom_compose_mat = undefined;\n\n this.main_RT = undefined;\n this.blur_RT = undefined;\n this.blurrer = undefined;\n\n this.add_mat = new AddMaterial();\n }\n\n on_enter()\n {\n this.blurrer = new GaussianBlurrer();\n this.main_RT = new WebGLRenderTarget(OScreen.width, OScreen.height);\n this.blur_RT = new WebGLRenderTarget(OScreen.width, OScreen.height);\n\n this.bloom_compose_mat = new UnrealBloomComposeMaterial(5);\n this.blurrer = new GaussianBlurrer(5);\n\n this.bloom_compose_mat.set_RT_0(this.blurrer.renderTargetsVertical[0].texture);\n this.bloom_compose_mat.set_RT_1(this.blurrer.renderTargetsVertical[1].texture);\n this.bloom_compose_mat.set_RT_2(this.blurrer.renderTargetsVertical[2].texture);\n this.bloom_compose_mat.set_RT_3(this.blurrer.renderTargetsVertical[3].texture);\n this.bloom_compose_mat.set_RT_4(this.blurrer.renderTargetsVertical[4].texture);\n\n this.bloom_compose_mat.set_bloom_strength(1);\n this.bloom_compose_mat.set_bloom_radius(1);\n\n this.add_mat.set_add_texture(this.blurrer.renderTargetsHorizontal[0].texture);\n }\n\n set_bloom_strength(val)\n {\n this.bloom_compose_mat.set_bloom_strength(val);\n }\n\n set_bloom_radius(val)\n {\n this.bloom_compose_mat.set_bloom_radius(val);\n }\n\n set_tint_color_0(col_string)\n {\n this.bloom_compose_mat.set_tint_color_0(col_string);\n }\n\n set_tint_color_1(col_string)\n {\n this.bloom_compose_mat.set_tint_color_1(col_string);\n }\n\n set_tint_color_2(col_string)\n {\n this.bloom_compose_mat.set_tint_color_2(col_string);\n }\n\n set_tint_color_3(col_string)\n {\n this.bloom_compose_mat.set_tint_color_3(col_string);\n }\n\n set_tint_color_4(col_string)\n {\n this.bloom_compose_mat.set_tint_color_4(col_string);\n }\n\n render()\n {\n this.__check_RT_size();\n\n Graphics.clear(this.main_RT, CameraManager.current, true, false);\n Graphics.render(SceneManager.current, CameraManager.current, this.main_RT);\n\n // // BLUR\n this.blurrer.blur(this.main_RT, true);\n\n // Blur compose\n Graphics.material_pass(this.bloom_compose_mat, this.blurrer.renderTargetsHorizontal[0]);\n\n // Additive blend\n Graphics.blit(this.main_RT, undefined, this.add_mat);\n }\n\n __check_RT_size()\n {\n if (this.main_RT.width !== OScreen.width || this.main_RT.height !== OScreen.height)\n {\n this.main_RT.setSize(OScreen.width, OScreen.height);\n this.blur_RT.setSize(OScreen.width, OScreen.height);\n }\n }\n}\n\nexport { UnrealBloomRender };\n","import { CameraManager } from '../CameraManager';\nimport { SceneManager } from '../SceneManager';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Graphics } from '../Graphics';\n\nclass VRRender extends BaseRender\n{\n constructor()\n {\n super();\n }\n\n render()\n {\n // Graphics.clear(undefined, CameraManager.current, true, true);\n\n if (SceneManager.current.on_pre_render)\n {\n SceneManager.current.on_pre_render();\n }\n\n if (SceneManager.current.render)\n {\n SceneManager.current.render();\n }\n else\n {\n Graphics.render(SceneManager.current, CameraManager.current, Graphics._renderer.getRenderTarget());\n }\n\n this.render_spectator_camera();\n\n if (SceneManager.current.on_post_render)\n {\n SceneManager.current.on_post_render();\n }\n }\n\n render_spectator_camera()\n {\n const spectator_camera = CameraManager.spectator;\n\n if (spectator_camera && Graphics._renderer.xr.isPresenting)\n {\n // Copy the XR Camera's position and rotation, but use your\n // main camera's projection matrix\n const xrCam = Graphics._renderer.xr.getCamera(CameraManager.current);\n\n spectator_camera.projectionMatrix.copy(CameraManager.current.projectionMatrix);\n\n spectator_camera.position.copy(xrCam.position);\n spectator_camera.quaternion.copy(xrCam.quaternion);\n\n // we'll restore this later\n const currentRenderTarget = Graphics._renderer.getRenderTarget();\n\n // turn off the WebXR rendering\n Graphics._renderer.xr.isPresenting = false;\n\n // render to the canvas on our main display\n Graphics._renderer.setRenderTarget(null);\n Graphics._renderer.render(SceneManager.current, spectator_camera);\n\n // reset back to enable WebXR\n Graphics._renderer.setRenderTarget(currentRenderTarget);\n Graphics._renderer.xr.isPresenting = true;\n }\n }\n}\n\nexport { VRRender };\n","import { TransitionManager } from './TransitionManager';\n\nclass ViewComponentManager\n{\n constructor()\n {\n this.components = [];\n this.enabled_components = new Set();\n }\n\n update()\n {\n this.__set_components_opacities();\n\n for (const component of this.enabled_components)\n {\n component.update(TransitionManager.current_state_data);\n }\n }\n\n register_component(component)\n {\n this.components.push(component);\n }\n\n enable_component(component)\n {\n // const component_to_enable = this.get_component_by_name(component_name);\n\n this.enabled_components.add(component);\n }\n\n disable_component(component)\n {\n // const component_to_disable = this.get_component_by_name(component_name);\n\n this.enabled_components.delete(component);\n }\n\n get_component_by_name(component_name)\n {\n console.warn('DEPRECATED. Use ViewComponentManager.get instead');\n this.get(component_name);\n }\n\n get(component_name)\n {\n for (let i = 0; i < this.components.length; i++)\n {\n if (this.components[i].name === component_name)\n {\n return this.components[i];\n }\n }\n console.error('[ViewComponentManager.get] no component found for: ', component_name);\n return undefined;\n }\n\n __set_components_opacities()\n {\n for (let i = 0; i < this.components.length; i++)\n {\n this.components[i].set_opacity(TransitionManager.current_state_data);\n }\n }\n}\n\nconst view_component_manager = new ViewComponentManager();\nexport { view_component_manager as ViewComponentManager };\n","import { BaseApplication } from './BaseApplication';\nimport { Debug } from './Debug';\nimport { Time } from './Time';\nimport { UI } from './UI';\nimport { TransitionManager } from './view_components/TransitionManager';\nimport { ViewComponentManager } from './view_components/ViewComponentManager';\nimport { ViewManager } from './view_components/ViewManager';\n\nclass RenderLoop\n{\n constructor(target_application, graphics, input)\n {\n target_application = target_application || new BaseApplication();\n\n this.target_application = target_application;\n this.graphics = graphics;\n this.input = input;\n\n this.is_running = false;\n this.frames_passed = 0;\n\n this.time_accumulator = 0;\n }\n\n update()\n {\n if (!this.is_running)\n {\n return;\n }\n Time.__update();\n\n // ###### START CYCLE ######\n if (this.frames_passed === 1)\n {\n this.target_application.on_post_start();\n }\n\n this.input.update();\n\n this.time_accumulator += Time.delta_time;\n\n this.target_application.before_update();\n TransitionManager.before_update();\n\n while (this.time_accumulator > Time.fixed_delta_time)\n {\n this.target_application.fixed_update();\n TransitionManager.fixed_update();\n\n this.time_accumulator -= Time.fixed_delta_time;\n }\n Time.__set_frame_interpolation(this.time_accumulator / Time.fixed_delta_time);\n\n this.target_application.update();\n\n TransitionManager.update();\n ViewManager.update();\n ViewComponentManager.update();\n\n this.target_application.on_pre_render();\n\n this.graphics.update(); // render scene\n UI.update(); // update after new camera matrix has been calculated\n UI.render(this.graphics); // render ui layer on top\n this.target_application.on_post_render();\n\n Debug.render(this.graphics); // render debug layer\n\n // ###### END CYCLE #######\n\n this.target_application.on_frame_end();\n this.frames_passed++;\n\n this.input.clear();\n UI.clear();\n Debug.clear();\n }\n\n start()\n {\n if (this.is_running) return; // sanity check\n\n if (this.frames_passed === 0)\n {\n this.target_application.on_enter();\n }\n\n this.is_running = true;\n\n this.graphics._renderer.setAnimationLoop(this.update.bind(this));\n }\n\n stop()\n {\n if (this.is_running === false) return; // sanity check\n\n this.is_running = false;\n this.target_application.on_exit();\n\n this.graphics._renderer.setAnimationLoop(null);\n }\n\n set_state(new_state)\n {\n this.target_application.on_exit(this);\n this.target_application = new_state;\n this.target_application.on_enter(this);\n }\n\n dispose()\n {\n this.stop();\n this.frames_passed = 0;\n }\n}\n\nexport { RenderLoop };\n","import { OScreen } from './OScreen';\n\nclass Screen\n{\n init()\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n OScreen.init();\n }\n\n update_position(x, y)\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n OScreen.update_position(x, y);\n }\n\n update()\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n OScreen.update();\n }\n\n update_size(width, height)\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n OScreen.update_size(width, height);\n }\n\n apply_pixel_density_v2(vector2)\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n return OScreen.apply_pixel_density_v2(vector2);\n }\n\n apply_pixel_density(value)\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n return OScreen.apply_pixel_density(value);\n }\n\n get_pixel_size()\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n return OScreen.get_pixel_size();\n }\n\n get aspect_ratio()\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n return OScreen.aspect_ratio;\n }\n}\n\nconst screen = new Screen();\nexport { screen as Screen };\n","import { ViewComponentManager } from './ViewComponentManager';\n\nexport class ViewComponent\n{\n constructor({ name, container })\n {\n this.name = name;\n this.container = container;\n this.hidden = true;\n\n ViewComponentManager.register_component(this);\n }\n\n start()\n {\n }\n\n on_enter()\n {\n this.container.classList.remove('hidden');\n ViewComponentManager.enable_component(this);\n\n this.hidden = false;\n }\n\n update()\n {\n }\n\n on_exit()\n {\n this.container.classList.add('hidden');\n ViewComponentManager.disable_component(this);\n\n this.hidden = true;\n }\n\n set_opacity(current_state_data)\n {\n this.container.style.opacity = current_state_data[`${this.name}_opacity`];\n this.toggle_hidden();\n }\n\n toggle_hidden()\n {\n if (this.container.style.opacity > 0.001)\n {\n if (this.hidden)\n {\n this.on_enter();\n }\n }\n else\n {\n if (!this.hidden)\n {\n this.on_exit();\n }\n }\n }\n}\n","import { Mesh } from 'three';\nimport { MeshBasicMaterial } from 'three';\nimport { PlaneGeometry } from 'three';\n\nclass HorizontalPlane extends Mesh\n{\n constructor(width, height, color, material)\n {\n width = width || 1;\n height = height || 1;\n color = color || '#FF0000';\n material = material || new MeshBasicMaterial({ color: color });\n\n const geometry = new PlaneGeometry(width, height);\n geometry.rotateX(-3.14 / 2);\n super(geometry, material);\n }\n}\n\nexport { HorizontalPlane };\n","import { Mesh } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { MeshBasicMaterial } from 'three';\n\nclass VerticalPlane extends Mesh\n{\n constructor(width, height, color, material)\n {\n width = width || 1;\n height = height || 1;\n color = color || '#FF0000';\n material = material || new MeshBasicMaterial({ color: color });\n\n const geometry = new PlaneGeometry(width, height);\n super(geometry, material);\n }\n}\n\nexport { VerticalPlane };\n","class ArrayUtilities\n{\n constructor()\n {}\n\n static merge_from_to(source, target)\n {\n target.push.apply(target, source);\n }\n\n static expand_vec3_array(array, size)\n {\n const items_left_count = size - array.length;\n\n for (let i = 0; i < items_left_count; i++)\n {\n array.push(array[i].clone());\n }\n }\n\n static remove_elem(array, elem)\n {\n const index = array.indexOf(elem);\n if (index > -1)\n {\n array.splice(index, 1);\n }\n }\n\n static get_closest_point(points, target)\n {\n let closest_point = points[0];\n let closest_distance = closest_point.distanceTo(target);\n for (let i = 1; i < points.length; i++)\n {\n if (points[i].distanceTo(target) < closest_distance)\n {\n closest_point = points[i];\n closest_distance = points[i].distanceTo(target);\n }\n }\n return closest_point;\n }\n\n static object_values_to_array(obj)\n {\n const ids = Object.keys(obj);\n const arr = [];\n for (let i = 0; i < ids.length; i++)\n {\n arr.push(obj[ids[i]]);\n }\n return arr;\n }\n}\n\nexport { ArrayUtilities };\n","import { Line3, Plane, Quaternion, Sphere, Vector3 } from 'three';\n\nclass FrustumPointFitter\n{\n constructor()\n {\n this.sphere = new Sphere();\n }\n\n fit_points(points, camera_quaternion, vertical_fov, aspect)\n {\n this.sphere.setFromPoints(points);\n\n const v_fov = Math.degToRad(vertical_fov / 2);\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const up_plane_normal = this.get_up_plane_normal(camera_quaternion, v_fov);\n const down_plane_normal = this.get_down_plane_normal(camera_quaternion, v_fov);\n const left_plane_normal = this.get_left_plane_normal(camera_quaternion, h_fov);\n const right_plane_normal = this.get_right_plane_normal(camera_quaternion, h_fov);\n\n const camera_forward_dir = new Vector3(0, 0, -1).applyQuaternion(camera_quaternion);\n\n const sphere_center = this.sphere.center.clone();\n\n const pull_back_distance = this.get_distance_to_fit_rect(this.sphere.radius * 2, this.sphere.radius * 2, vertical_fov, aspect);\n const far_pos = sphere_center.clone().add(camera_forward_dir.clone().multiplyScalar(pull_back_distance * -1));\n\n const up_plane = new Plane().setFromNormalAndCoplanarPoint(up_plane_normal, far_pos);\n const down_plane = new Plane().setFromNormalAndCoplanarPoint(down_plane_normal, far_pos);\n\n const left_plane = new Plane().setFromNormalAndCoplanarPoint(left_plane_normal, far_pos);\n const right_plane = new Plane().setFromNormalAndCoplanarPoint(right_plane_normal, far_pos);\n\n this.apply_center_correction_to_pos(far_pos, points, camera_quaternion, up_plane, down_plane, left_plane, right_plane);\n\n up_plane.setFromNormalAndCoplanarPoint(up_plane_normal, far_pos);\n down_plane.setFromNormalAndCoplanarPoint(down_plane_normal, far_pos);\n\n left_plane.setFromNormalAndCoplanarPoint(left_plane_normal, far_pos);\n right_plane.setFromNormalAndCoplanarPoint(right_plane_normal, far_pos);\n\n let closest_distance = Infinity;\n\n const inverse_dir = camera_forward_dir.clone().multiplyScalar(pull_back_distance * -2);\n for (let i = 0; i < points.length; i++)\n {\n const line = new Line3(points[i].clone(), points[i].clone().add(inverse_dir));\n\n const up_line_intersection = new Vector3();\n const down_line_intersection = new Vector3();\n\n const left_line_intersection = new Vector3();\n const right_line_intersection = new Vector3();\n\n up_plane.intersectLine(line, up_line_intersection);\n down_plane.intersectLine(line, down_line_intersection);\n\n left_plane.intersectLine(line, left_line_intersection);\n right_plane.intersectLine(line, right_line_intersection);\n\n if (up_line_intersection.length() < 0.0001)\n {\n console.log('up intersection not found', i);\n }\n if (down_line_intersection.length() < 0.0001)\n {\n console.log('down intersection not found', i);\n }\n if (left_line_intersection.length() < 0.0001)\n {\n console.log('left intersection not found', i);\n }\n if (right_line_intersection.length() < 0.0001)\n {\n console.log('right intersection not found', i);\n }\n\n const new_up_distance = points[i].clone().sub(up_line_intersection).length();\n const new_down_distance = points[i].clone().sub(down_line_intersection).length();\n\n const new_left_distance = points[i].clone().sub(left_line_intersection).length();\n const new_right_distance = points[i].clone().sub(right_line_intersection).length();\n\n const vertical_min = Math.min(new_up_distance, new_down_distance);\n const horizontal_min = Math.min(new_left_distance, new_right_distance);\n\n const min = Math.min(vertical_min, horizontal_min);\n\n if (min < closest_distance)\n {\n closest_distance = min;\n }\n }\n\n const forward_correction = camera_forward_dir.clone().multiplyScalar(closest_distance);\n const closest_position = far_pos.clone().add(forward_correction);\n\n return closest_position;\n }\n\n apply_center_correction_to_pos(target_pos, points, camera_quaternion, up_plane, down_plane, left_plane, right_plane)\n {\n const vertical_offset = this.get_vertical_correction(points, down_plane, up_plane, camera_quaternion);\n const horizontal_offset = this.get_hozirontal_correction(points, left_plane, right_plane, camera_quaternion);\n\n target_pos.add(vertical_offset);\n target_pos.add(horizontal_offset);\n }\n\n get_vertical_correction(points, down_plane, up_plane, camera_quaternion)\n {\n let closest_distance_to_up_plane = Infinity;\n let closest_distance_to_down_plane = Infinity;\n let closest_up_point = undefined;\n let closest_down_point = undefined;\n\n const up_dir = new Vector3(0, 1, 0).applyQuaternion(camera_quaternion);\n for (let i = 0; i < points.length; i++)\n {\n const down_line = new Line3(points[i].clone(), points[i].clone().add(up_dir.clone().multiplyScalar(-5000000)));\n const up_line = new Line3(points[i].clone(), points[i].clone().add(up_dir.clone().multiplyScalar(5000000)));\n\n const down_line_intersection = new Vector3();\n const up_line_intersection = new Vector3();\n\n down_plane.intersectLine(down_line, down_line_intersection);\n up_plane.intersectLine(up_line, up_line_intersection);\n\n const down_dist = down_line_intersection.distanceTo(points[i]);\n const up_dist = up_line_intersection.distanceTo(points[i]);\n\n if (up_line_intersection.length() < 0.0001)\n {\n console.log('vertical up intersection not found', i);\n }\n if (down_line_intersection.length() < 0.0001)\n {\n console.log('vertical down intersection not found', i);\n }\n\n if (down_dist < closest_distance_to_down_plane)\n {\n closest_distance_to_down_plane = down_dist;\n closest_down_point = points[i];\n }\n if (up_dist < closest_distance_to_up_plane)\n {\n closest_distance_to_up_plane = up_dist;\n closest_up_point = points[i];\n }\n }\n\n console.log(closest_up_point, closest_down_point);\n\n const correction = (closest_distance_to_up_plane - closest_distance_to_down_plane) / 2;\n\n // console.log(\"vertical_correction\", correction)\n return up_dir.clone().multiplyScalar(-correction);\n }\n\n get_hozirontal_correction(points, left_plane, right_plane, camera_quaternion)\n {\n let closest_distance_to_right_plane = Infinity;\n let closest_distance_to_left_plane = Infinity;\n let closest_right_point = undefined;\n let closest_left_point = undefined;\n\n const right_dir = new Vector3(1, 0, 0).applyQuaternion(camera_quaternion);\n\n for (let i = 0; i < points.length; i++)\n {\n const left_line = new Line3(points[i].clone(), points[i].clone().add(right_dir.clone().multiplyScalar(-5000000)));\n const right_line = new Line3(points[i].clone(), points[i].clone().add(right_dir.clone().multiplyScalar(5000000)));\n\n const left_line_intersection = new Vector3();\n const right_line_intersection = new Vector3();\n\n left_plane.intersectLine(left_line, left_line_intersection);\n right_plane.intersectLine(right_line, right_line_intersection);\n\n const left_dist = left_line_intersection.distanceTo(points[i]);\n const right_dist = right_line_intersection.distanceTo(points[i]);\n\n if (left_line_intersection.length() < 0.0001)\n {\n console.log('left intersection not found', i);\n }\n if (right_line_intersection.length() < 0.0001)\n {\n console.log('right intersection not found', i);\n }\n\n if (left_dist < closest_distance_to_left_plane)\n {\n closest_distance_to_left_plane = left_dist;\n closest_left_point = points[i];\n }\n if (right_dist < closest_distance_to_right_plane)\n {\n closest_distance_to_right_plane = right_dist;\n closest_right_point = points[i];\n }\n }\n\n const correction = (closest_distance_to_right_plane - closest_distance_to_left_plane) / 2;\n // console.log(\"horizontal_correction\", correction)\n\n console.log(closest_right_point, closest_left_point);\n\n return right_dir.clone().multiplyScalar(-correction);\n }\n\n get_up_plane_normal(camera_quaternion, v_fov)\n {\n const up_plane_normal = new Vector3(0, -1, 0);\n up_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), v_fov));\n up_plane_normal.applyQuaternion(camera_quaternion);\n return up_plane_normal;\n }\n\n get_down_plane_normal(camera_quaternion, v_fov)\n {\n const down_plane_normal = new Vector3(0, 1, 0);\n down_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), -v_fov));\n down_plane_normal.applyQuaternion(camera_quaternion);\n return down_plane_normal;\n }\n\n get_left_plane_normal(camera_quaternion, h_fov)\n {\n const left_plane_normal = new Vector3(1, 0, 0);\n left_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), h_fov));\n left_plane_normal.applyQuaternion(camera_quaternion);\n return left_plane_normal;\n }\n\n get_right_plane_normal(camera_quaternion, h_fov)\n {\n const right_plane_normal = new Vector3(-1, 0, 0);\n right_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), -h_fov));\n right_plane_normal.applyQuaternion(camera_quaternion);\n return right_plane_normal;\n }\n\n get_distance_to_fit_rect(width, height, vertical_fov, aspect)\n {\n const v_fov = (vertical_fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n}\n\nexport { FrustumPointFitter };\n","import { BufferAttribute } from 'three';\nimport { BufferGeometry } from 'three';\n\nclass GeometryUtilities\n{\n static convert_to_non_indexed_geometry(geometry_buffer)\n {\n const indices = geometry_buffer.index;\n const positions = geometry_buffer.getAttribute('position');\n\n const bar_coordinates = [];\n const vertices = [];\n\n for (let i = 0; i < indices.count; i += 3)\n {\n // VERTEX 1\n vertices.push(positions.getX(indices.array[i + 0]));\n vertices.push(positions.getY(indices.array[i + 0]));\n vertices.push(positions.getZ(indices.array[i + 0]));\n\n bar_coordinates.push(1);\n bar_coordinates.push(0);\n bar_coordinates.push(0);\n\n // VERTEX 2\n\n vertices.push(positions.getX(indices.array[i + 1]));\n vertices.push(positions.getY(indices.array[i + 1]));\n vertices.push(positions.getZ(indices.array[i + 1]));\n\n bar_coordinates.push(0);\n bar_coordinates.push(1);\n bar_coordinates.push(0);\n\n // VERTEX 3\n\n vertices.push(positions.getX(indices.array[i + 2]));\n vertices.push(positions.getY(indices.array[i + 2]));\n vertices.push(positions.getZ(indices.array[i + 2]));\n\n bar_coordinates.push(0);\n bar_coordinates.push(0);\n bar_coordinates.push(1);\n }\n\n const geometry = new BufferGeometry();\n // geometry.setAttribute('barycentric', new BufferAttribute( new Float32Array(bar_coordinates), 3 ));\n geometry.setAttribute('position', new BufferAttribute(new Float32Array(vertices), 3));\n GeometryUtilities.add_barycentric_attribute(geometry);\n return geometry;\n }\n\n static add_barycentric_attribute(non_indexed_geometry_buffer)\n {\n const bar_coordinates = [];\n const positions = non_indexed_geometry_buffer.getAttribute('position');\n\n for (let i = 0; i < positions.count; i += 3)\n {\n bar_coordinates.push(1);\n bar_coordinates.push(0);\n bar_coordinates.push(0);\n\n bar_coordinates.push(0);\n bar_coordinates.push(1);\n bar_coordinates.push(0);\n\n bar_coordinates.push(0);\n bar_coordinates.push(0);\n bar_coordinates.push(1);\n }\n non_indexed_geometry_buffer.setAttribute('barycentric', new BufferAttribute(new Float32Array(bar_coordinates), 3));\n }\n}\n\nexport { GeometryUtilities };\n","class HTMLUtilities\n{\n static load_images(container)\n {\n const images = container.querySelectorAll('img');\n\n for (let i = 0; i < images.length; i++)\n {\n const image = images[i];\n\n if (image.dataset.src)\n {\n image.src = image.dataset.src;\n }\n }\n\n const image_objects = container.querySelectorAll('object');\n\n for (let i = 0; i < image_objects.length; i++)\n {\n const image_object = image_objects[i];\n\n if (image_object.dataset.src)\n {\n image_object.data = image_object.dataset.src;\n }\n }\n }\n\n static load_videos(container)\n {\n const videos = container.querySelectorAll('video');\n\n for (let i = 0; i < videos.length; i++)\n {\n const video = videos[i];\n\n if (video.dataset.src)\n {\n video.src = video.dataset.src;\n }\n }\n }\n\n static load_iframes(container)\n {\n const iframes = container.querySelectorAll('iframe');\n\n for (let i = 0; i < iframes.length; i++)\n {\n const iframe = iframes[i];\n\n if (iframe.dataset.src)\n {\n iframe.src = iframe.dataset.src;\n }\n }\n }\n\n static load_elements(container, selector)\n {\n const elements = container.querySelectorAll(selector);\n\n for (let i = 0; i < elements.length; i++)\n {\n const element = elements[i];\n\n if (element.dataset.src)\n {\n element.src = element.dataset.src;\n }\n }\n }\n}\n\nexport { HTMLUtilities };\n","import { Vector4 } from 'three';\n\nclass ImageUtilities\n{\n constructor()\n { }\n\n static get_image_data(image)\n {\n const canvas = document.createElement('canvas');\n canvas.width = image.width;\n canvas.height = image.height;\n\n const context = canvas.getContext('2d');\n context.drawImage(image, 0, 0);\n\n return context.getImageData(0, 0, image.width, image.height);\n }\n\n static get_pixel(imagedata, x, y)\n {\n const position = (x + imagedata.width * y) * 4;\n const data = imagedata.data;\n return new Vector4(data[position + 0], data[position + 1], data[position + 2], data[position + 3]);\n }\n}\n\nexport { ImageUtilities };\n","import { Vector3 } from 'three';\nimport { Vector2 } from 'three';\nclass MeshSampler\n{\n constructor()\n {\n\n }\n\n sample(buffer_geometry, sample_count)\n {\n const face_areas = [];\n\n let min_area = 99999999;\n\n const vertices = buffer_geometry.getAttribute('position');\n const normals = buffer_geometry.getAttribute('normal');\n const tangents = buffer_geometry.getAttribute('tangent');\n const uvs = buffer_geometry.getAttribute('uv');\n const indices = buffer_geometry.index;\n\n const faces = [];\n\n for (let i = 0; i < indices.count; i += 3)\n {\n const index_0 = indices.array[i + 0];\n const index_1 = indices.array[i + 1];\n const index_2 = indices.array[i + 2];\n\n const v1 = new Vector3();\n v1.x = vertices.getX(index_0);\n v1.y = vertices.getY(index_0);\n v1.z = vertices.getZ(index_0);\n\n const v2 = new Vector3();\n v2.x = vertices.getX(index_1);\n v2.y = vertices.getY(index_1);\n v2.z = vertices.getZ(index_1);\n\n const v3 = new Vector3();\n v3.x = vertices.getX(index_2);\n v3.y = vertices.getY(index_2);\n v3.z = vertices.getZ(index_2);\n\n const face = {\n a: v1,\n b: v2,\n c: v3\n };\n\n if (normals)\n {\n const n1 = new Vector3();\n n1.x = normals.getX(index_0);\n n1.y = normals.getY(index_0);\n n1.z = normals.getZ(index_0);\n\n const n2 = new Vector3();\n n2.x = normals.getX(index_1);\n n2.y = normals.getY(index_1);\n n2.z = normals.getZ(index_1);\n\n const n3 = new Vector3();\n n3.x = normals.getX(index_2);\n n3.y = normals.getY(index_2);\n n3.z = normals.getZ(index_2);\n\n const normal = n1.clone().add(n2).add(n3).normalize();\n face.normal = normal;\n }\n\n if (tangents)\n {\n const n1 = new Vector3();\n n1.x = tangents.getX(index_0);\n n1.y = tangents.getY(index_0);\n n1.z = tangents.getZ(index_0);\n\n const n2 = new Vector3();\n n2.x = tangents.getX(index_1);\n n2.y = tangents.getY(index_1);\n n2.z = tangents.getZ(index_1);\n\n const n3 = new Vector3();\n n3.x = tangents.getX(index_2);\n n3.y = tangents.getY(index_2);\n n3.z = tangents.getZ(index_2);\n\n const tangent = n1.clone().add(n2).add(n3).normalize();\n face.tangent = tangent;\n }\n if (uvs)\n {\n const uv_a = new Vector2();\n uv_a.x = uvs.getX(index_0);\n uv_a.y = uvs.getY(index_0);\n\n const uv_b = new Vector2();\n uv_b.x = uvs.getX(index_1);\n uv_b.y = uvs.getY(index_1);\n\n const uv_c = new Vector2();\n uv_c.x = uvs.getX(index_2);\n uv_c.y = uvs.getY(index_2);\n\n face.uv_a = uv_a;\n face.uv_b = uv_b;\n face.uv_c = uv_c;\n }\n\n faces.push(face);\n\n const area = this.get_face_area(face);\n min_area = Math.min(area, min_area);\n face_areas.push(area);\n }\n\n const normalized_faces_array = this.get_uniform_face_distribution(face_areas, min_area, faces);\n const selected_faces = this.select_random_faces(normalized_faces_array, sample_count);\n const sampled_data = this.sample_data_from_faces(selected_faces);\n return sampled_data;\n }\n\n sample_data_from_faces(faces)\n {\n const sampled_points = [];\n const sampled_normals = [];\n const sampled_tangents = [];\n const sampled_uvs = [];\n\n for (let i = 0; i < faces.length; i++)\n {\n const face = faces[i];\n\n const w1 = Math.random();\n const w2 = Math.random();\n\n sampled_points.push(this.sample_point_in_face(w1, w2, face.a, face.b, face.c).clone());\n if (face.normal)\n {\n sampled_normals.push(face.normal.clone());\n }\n if (face.tangent)\n {\n sampled_tangents.push(face.tangent.clone());\n }\n if (face.uv_a)\n {\n sampled_uvs.push(this.sample_point_in_face(w1, w2, face.uv_a, face.uv_b, face.uv_c).clone());\n }\n }\n return { points: sampled_points, normals: sampled_normals, tangents: sampled_tangents, uvs: sampled_uvs };\n }\n\n select_random_faces(faces, amount)\n {\n const selected_faces = [];\n for (let i = 0; i < amount; i++)\n {\n const random = Math.floor(Math.random() * faces.length);\n const selected_face = faces[random];\n\n selected_faces.push(selected_face);\n }\n\n return selected_faces;\n }\n\n get_uniform_face_distribution(face_areas, minimum_area, faces)\n {\n const extended_triangle_indices = [];\n for (let i = 0; i < face_areas.length; i++)\n {\n face_areas[i] /= minimum_area;\n const repetitions_needed = Math.floor(Math.round(face_areas[i]));\n for (let j = 0; j < repetitions_needed; j++)\n {\n extended_triangle_indices.push(faces[i]);\n }\n }\n return extended_triangle_indices;\n }\n\n get_face_area(face)\n {\n const vec1 = face.b.clone().sub(face.a);\n const vec2 = face.c.clone().sub(face.a);\n return vec1.cross(vec2).length() / 2;\n }\n\n sample_point_in_face(w1, w2, v1, v2, v3)\n {\n if (w1 + w2 > 1)\n {\n w1 = 1.0 - w1;\n w2 = 1.0 - w2;\n }\n\n const w3 = 1.0 - (w1 + w2);\n\n return v1.clone().multiplyScalar(w1).add(v2.clone().multiplyScalar(w2)).add(v3.clone().multiplyScalar(w3));\n }\n}\n\nconst mesh_sampler = new MeshSampler();\nexport { mesh_sampler as MeshSampler };\n","import { Mesh } from 'three';\nimport { BufferGeometry } from 'three';\nimport { Skeleton } from 'three';\n\nclass ModelUtilities\n{\n get_mesh(scene, result_callback)\n {\n scene.traverse((child) =>\n {\n if (child instanceof Mesh)\n {\n if (child.geometry)\n {\n child.geometry = new BufferGeometry().fromGeometry(child.geometry);\n }\n result_callback(child);\n }\n });\n }\n\n get_geometries(scene)\n {\n const geometries = [];\n\n this.get_mesh(scene, (child) =>\n {\n geometries.push(child.geometry);\n });\n return geometries;\n }\n\n assign_material(scene, material, name)\n {\n scene.traverse((child) =>\n {\n if (child instanceof Mesh)\n {\n // assign to all if no name is given\n if (name === undefined)\n {\n child.material = material;\n }\n else\n {\n // if name is given, assign only to that\n if (child.name === name)\n {\n child.material = material;\n }\n }\n }\n });\n }\n\n clone_animated_gltf(gltf)\n {\n const clone = {\n animations: gltf.animations,\n scene: gltf.scene.clone(true)\n };\n\n const skinnedMeshes = {};\n\n gltf.scene.traverse(node =>\n {\n if (node.isSkinnedMesh)\n {\n skinnedMeshes[node.name] = node;\n }\n });\n\n const cloneBones = {};\n const cloneSkinnedMeshes = {};\n\n clone.scene.traverse(node =>\n {\n if (node.isBone)\n {\n cloneBones[node.name] = node;\n }\n\n if (node.isSkinnedMesh)\n {\n cloneSkinnedMeshes[node.name] = node;\n }\n });\n\n for (const name in skinnedMeshes)\n {\n const skinnedMesh = skinnedMeshes[name];\n const skeleton = skinnedMesh.skeleton;\n const cloneSkinnedMesh = cloneSkinnedMeshes[name];\n\n const orderedCloneBones = [];\n\n for (let i = 0; i < skeleton.bones.length; ++i)\n {\n const cloneBone = cloneBones[skeleton.bones[i].name];\n orderedCloneBones.push(cloneBone);\n }\n\n cloneSkinnedMesh.bind(\n new Skeleton(orderedCloneBones, skeleton.boneInverses),\n cloneSkinnedMesh.matrixWorld);\n }\n\n return clone;\n }\n\n set_shadow_config(scene, cast, receive)\n {\n scene.traverse((child) =>\n {\n if (child instanceof Mesh)\n {\n child.castShadow = cast;\n child.receiveShadow = receive;\n }\n });\n }\n\n __find_object(scene, object_name, result_callback)\n {\n scene.traverse((obj) =>\n {\n if (obj.name === object_name)\n {\n result_callback(obj);\n }\n });\n }\n\n get_object(scene, object_name)\n {\n let object = undefined;\n scene.traverse((obj) =>\n {\n if (obj.name === object_name)\n {\n object = obj;\n }\n });\n return object;\n }\n\n get_object_by_type(scene, object_type)\n {\n let object = undefined;\n scene.traverse((obj) =>\n {\n if (obj.constructor.name === object_type)\n {\n object = obj;\n }\n });\n return object;\n }\n}\n\nconst model_utilities = new ModelUtilities();\nexport { model_utilities as ModelUtilities };\n","class ObjectUtilities\r\n{\r\n static is_object(item)\r\n {\r\n return (item && typeof item === 'object' && !Array.isArray(item));\r\n }\r\n\r\n static merge_deep(target, ...sources)\r\n {\r\n if (!sources.length) return target;\r\n const source = sources.shift();\r\n\r\n if (ObjectUtilities.is_object(target) && ObjectUtilities.is_object(source))\r\n {\r\n for (const key in source)\r\n {\r\n if (ObjectUtilities.is_object(source[key]))\r\n {\r\n if (!target[key]) Object.assign(target, { [key]: {} });\r\n ObjectUtilities.merge_deep(target[key], source[key]);\r\n }\r\n else\r\n {\r\n Object.assign(target, { [key]: source[key] });\r\n }\r\n }\r\n }\r\n\r\n return ObjectUtilities.merge_deep(target, ...sources);\r\n }\r\n\r\n static xml_to_json(xml)\r\n {\r\n // Create the return object\r\n let obj = {};\r\n\r\n if (xml.nodeType === 1)\r\n { // element\r\n // do attributes\r\n if (xml.attributes.length > 0)\r\n {\r\n obj['@attributes'] = {};\r\n for (let j = 0; j < xml.attributes.length; j++)\r\n {\r\n const attribute = xml.attributes.item(j);\r\n obj['@attributes'][attribute.nodeName] = attribute.nodeValue;\r\n }\r\n }\r\n }\r\n else if (xml.nodeType === 3)\r\n { // text\r\n obj = xml.nodeValue;\r\n }\r\n\r\n // do children\r\n if (xml.hasChildNodes())\r\n {\r\n for (let i = 0; i < xml.childNodes.length; i++)\r\n {\r\n const item = xml.childNodes.item(i);\r\n const nodeName = item.nodeName;\r\n if (typeof (obj[nodeName]) === 'undefined')\r\n {\r\n obj[nodeName] = this.xml_to_json(item);\r\n }\r\n else\r\n {\r\n if (typeof (obj[nodeName].push) === 'undefined')\r\n {\r\n const old = obj[nodeName];\r\n obj[nodeName] = [];\r\n obj[nodeName].push(old);\r\n }\r\n obj[nodeName].push(this.xml_to_json(item));\r\n }\r\n }\r\n }\r\n return obj;\r\n }\r\n}\r\n\r\nexport { ObjectUtilities };\r\n","class StringUtilities\n{\n constructor()\n {}\n\n static get_random_color()\n {\n const hexValues = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F'];\n let hex = '#';\n\n for (let i = 0; i < 6; i++)\n {\n const index = Math.floor(Math.random() * hexValues.length);\n hex += hexValues[index];\n }\n\n return hex;\n }\n\n static capitalize(string)\n {\n const words = string.split(' ');\n\n for (let i = 0; i < words.length; i++)\n {\n words[i] = words[i][0].toUpperCase() + words[i].substr(1);\n }\n\n return words.join(' ');\n }\n\n static capitalize_first_letter(string)\n {\n return string.charAt(0).toUpperCase() + string.slice(1);\n }\n\n static snake_to_camelcase(string)\n {\n return string.toLowerCase().replace(/[-_][a-z0-9]/g, (group) => group.slice(-1).toUpperCase());\n }\n}\n\nexport { StringUtilities };\n","class TimeUtilities\n{\n constructor()\n {}\n\n // Converts a time string (00:00:00.45) into miliseconds\n time_str_to_ms(time_str)\n {\n time_str = time_str.split(':');\n\n let hours = Number(time_str[0]);\n hours = hours * 60 * 60 * 1000;\n\n let minutes = Number(time_str[1]);\n minutes = minutes * 60 * 1000;\n\n let seconds = Number(time_str[2]);\n seconds = seconds * 1000;\n\n return hours + minutes + seconds;\n }\n}\n\nexport { TimeUtilities };\n","import grid_frag from '../shaders/grid/grid.frag';\nimport grid_vert from '../shaders/grid/grid.vert';\n\nimport { GeometryUtilities } from '../utilities/GeometryUtilities';\n\nimport { Mesh } from 'three';\nimport { ShaderMaterial } from 'three';\nimport { Color } from 'three';\nimport { PlaneGeometry } from 'three';\n\nclass Grid extends Mesh\n{\n constructor()\n {\n const material = new ShaderMaterial({\n uniforms: {\n _Color: { value: new Color('#919191') }\n },\n vertexShader: grid_vert,\n fragmentShader: grid_frag,\n extensions: { derivatives: true },\n transparent: true,\n depthWrite: false\n });\n\n const plane_geometry = new PlaneGeometry(100, 100, 100, 100);\n\n const non_indexed_geometry = GeometryUtilities.convert_to_non_indexed_geometry(plane_geometry);\n\n super(non_indexed_geometry, material);\n\n this.rotation.x = -3.14 / 2;\n }\n}\n\nexport { Grid };\n","import line_vs from '../shaders/basic_line/basic_line.vert';\nimport line_fs from '../shaders/basic_line/basic_line.frag';\n\nimport { Mesh } from 'three';\nimport { BufferAttribute } from 'three';\nimport { BufferGeometry } from 'three';\nimport { ShaderMaterial } from 'three';\nimport { Color } from 'three';\n\nclass Line extends Mesh\n{\n constructor(points)\n {\n const geometry = new BufferGeometry();\n geometry.setAttribute('position', new BufferAttribute(new Float32Array([]), 3));\n geometry.setAttribute('next_position', new BufferAttribute(new Float32Array([]), 3));\n geometry.setAttribute('previous_position', new BufferAttribute(new Float32Array([]), 3));\n geometry.setAttribute('orientation', new BufferAttribute(new Float32Array([]), 1));\n geometry.setAttribute('coverage', new BufferAttribute(new Float32Array([]), 1));\n\n const material = new ShaderMaterial({\n uniforms: {\n _Thickness: { value: 0.2 },\n _Length: { value: 0 },\n _ElapsedTime: { value: 0 },\n _Color: { value: new Color('#FF0000') }\n },\n vertexShader: line_vs,\n fragmentShader: line_fs,\n transparent: true,\n depthWrite: false,\n extensions: { derivatives: true }\n\n });\n\n super(geometry, material);\n\n if (points)\n {\n this.setup(points);\n }\n }\n\n setup(points)\n {\n const vertices = [];\n const next_position = [];\n const previous_position = [];\n const orientation = [];\n const coverage = [];\n let accumulated_length = 0;\n\n for (let i = 0; i < points.length; i++)\n {\n vertices.push(points[i].x);\n vertices.push(points[i].y);\n vertices.push(points[i].z);\n orientation.push(1);\n\n vertices.push(points[i].x);\n vertices.push(points[i].y);\n vertices.push(points[i].z);\n orientation.push(-1);\n\n const next_point = this.__get_next_position(points, i);\n next_position.push(next_point.x);\n next_position.push(next_point.y);\n next_position.push(next_point.z);\n\n next_position.push(next_point.x);\n next_position.push(next_point.y);\n next_position.push(next_point.z);\n\n const previous_point = this.__get_previous_position(points, i);\n previous_position.push(previous_point.x);\n previous_position.push(previous_point.y);\n previous_position.push(previous_point.z);\n\n previous_position.push(previous_point.x);\n previous_position.push(previous_point.y);\n previous_position.push(previous_point.z);\n\n coverage.push(accumulated_length);\n coverage.push(accumulated_length);\n\n if (i < points.length - 1)\n {\n accumulated_length += points[i].distanceTo(next_point);\n }\n }\n const vertexList = new Float32Array(vertices);\n const nextPositionList = new Float32Array(next_position);\n const previousPositionList = new Float32Array(previous_position);\n const orientationList = new Float32Array(orientation);\n const coverageList = new Float32Array(coverage);\n\n const indices = [];\n for (let i = 0; i < ((vertexList.length / 3) - 2) / 2; i++)\n {\n const index = (i * 2) + 1;\n indices.push(index);\n indices.push(index + 1);\n indices.push(index - 1);\n\n indices.push(index);\n indices.push(index + 2);\n indices.push(index + 1);\n }\n\n this.geometry.setIndex(indices);\n this.geometry.getAttribute('position').copy(new BufferAttribute(vertexList, 3));\n this.geometry.getAttribute('next_position').copy(new BufferAttribute(nextPositionList, 3));\n this.geometry.getAttribute('previous_position').copy(new BufferAttribute(previousPositionList, 3));\n this.geometry.getAttribute('orientation').copy(new BufferAttribute(orientationList, 1));\n this.geometry.getAttribute('coverage').copy(new BufferAttribute(coverageList, 1));\n\n this.geometry.getAttribute('position').needsUpdate = true;\n this.geometry.getAttribute('next_position').needsUpdate = true;\n this.geometry.getAttribute('previous_position').needsUpdate = true;\n this.geometry.getAttribute('orientation').needsUpdate = true;\n this.geometry.getAttribute('coverage').needsUpdate = true;\n\n this.material.uniforms._Length.value = accumulated_length;\n this._length = accumulated_length;\n }\n\n set thickness(value)\n {\n this.material.uniforms._Thickness.value = value;\n }\n\n get thickness()\n {\n return this.material.uniforms._Thickness.value;\n }\n\n __get_previous_position(points, i)\n {\n if (i === 0)\n {\n return points[1].clone().sub(points[0]).multiplyScalar(-1).add(points[0]);\n }\n else\n {\n return points[i - 1];\n }\n }\n\n __get_next_position(points, i)\n {\n if (i === points.length - 1)\n {\n return points[points.length - 2].clone().sub(points[points.length - 1]).multiplyScalar(-1).add(points[points.length - 1]);\n }\n else\n {\n return points[i + 1];\n }\n }\n\n update()\n {\n }\n\n distance()\n {\n return this.accumulated_length;\n }\n\n total_length()\n {\n return this.accumulated_length;\n }\n\n dispose()\n {\n this.geometry.dispose();\n this.material.dispose();\n if (this.parent)\n {\n this.parent.remove(this);\n }\n }\n\n set color(col)\n {\n this.material.uniforms._Color.value.set(col);\n }\n\n get color()\n {\n return this.material.uniforms._Color.value;\n }\n\n copy_color(col)\n {\n this.material.uniforms._Color.value.copy(col);\n }\n}\n\nexport { Line };\n","import basic_texture_vert from '../shaders/basic_texture/basic_texture.vert';\nimport basic_texture_frag from '../shaders/basic_texture/basic_texture.frag';\n\nimport { Mesh } from 'three';\nimport { Vector2 } from 'three';\nimport { ShaderMaterial } from 'three';\nimport { DoubleSide } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { Vector3 } from 'three';\n\nclass WorldImage extends Mesh\n{\n constructor(texture, pivot)\n {\n pivot = pivot || new Vector2(0, 0);\n const material = new ShaderMaterial({\n uniforms: {\n _MainTex: { value: texture },\n _ScreenAligned: { value: 0 },\n _Scale: { value: 1 },\n _Opacity: { value: 1 }\n },\n vertexShader: basic_texture_vert,\n fragmentShader: basic_texture_frag,\n transparent: true,\n depthWrite: false,\n side: DoubleSide\n });\n const geometry = new PlaneGeometry(1, 1, 1);\n geometry.translate(-pivot.x / 2, -pivot.y / 2, 0);\n const current_scale = texture.image.width / texture.image.height;\n geometry.scale(current_scale, 1, 1);\n super(geometry, material);\n this.current_scale = current_scale;\n this.geometry.computeBoundingBox();\n\n this.tmp_bb_size = new Vector3();\n this.geometry.boundingBox.getSize(this.tmp_bb_size);\n }\n\n update_texture()\n {\n this.material.uniforms._MainTex.value.needsUpdate = true;\n const img = this.material.uniforms._MainTex.value.image;\n\n this.geometry.scale(1 / this.current_scale, 1, 1);\n this.current_scale = img.width / img.height;\n this.geometry.scale(this.current_scale, 1, 1);\n this.geometry.computeBoundingBox();\n this.geometry.boundingBox.getSize(this.tmp_bb_size);\n }\n\n get size()\n {\n return this.tmp_bb_size.clone().multiplyScalar(this.scale.x);\n }\n\n set size(value)\n {\n this.scale.set(value, value, value);\n this.material.uniforms._Scale.value = value;\n }\n\n set screen_aligned(boolean)\n {\n this.material.uniforms._ScreenAligned.value = boolean === true ? 1 : 0;\n }\n\n get screen_aligned()\n {\n return this.material.uniforms._ScreenAligned.value === 1;\n }\n\n set opacity(opacity)\n {\n this.material.uniforms._Opacity.value = opacity;\n }\n\n get opacity()\n {\n return this.material.uniforms._Opacity.value;\n }\n\n dispose()\n {\n this.geometry.dispose();\n this.parent.remove(this);\n this.material.uniforms._MainTex.value.dispose();\n this.material.dispose();\n }\n}\n\nexport { WorldImage };\n","import { WorldImage } from './WorldImage';\nimport { SimpleTextDrawer } from '../canvas_drawer/SimpleTextDrawer';\n\nimport { LinearMipMapLinearFilter } from 'three';\nimport { LinearFilter } from 'three';\n\nclass Text2D extends WorldImage\n{\n constructor(text, font, color, pivot, is_static)\n {\n const simple_text_drawer = new SimpleTextDrawer(is_static);\n\n const draw_settings = {\n font: font,\n font_color: color || '#000000'\n };\n const canvas_texture = simple_text_drawer.draw_on_texture(text, draw_settings);\n\n canvas_texture.minFilter = LinearMipMapLinearFilter;\n canvas_texture.minFilter = LinearFilter;\n canvas_texture.needsUpdate = true;\n super(canvas_texture, pivot);\n\n this.simple_text_drawer = simple_text_drawer;\n this.canvas_texture = canvas_texture;\n this.draw_settings = draw_settings;\n }\n\n set text(value)\n {\n this.simple_text_drawer.draw_canvas(value, this.draw_settings);\n this.update_texture();\n }\n\n get text()\n {\n return 'not implemented';\n }\n}\n\nexport { Text2D };\n","import vert from '../shaders/ui_element/ui_element.vert';\nimport frag from '../shaders/ui_element/ui_element.frag';\n\nimport { BaseShaderMaterial } from '../materials/BaseShaderMaterial';\n\nimport { Vector2 } from 'three';\nimport { Vector3 } from 'three';\n\nimport { OScreen } from '../OScreen';\n\nclass UIElementMaterial extends BaseShaderMaterial\n{\n constructor(intensity = 1)\n {\n super(vert, frag, {\n _MainTex: { value: undefined },\n _ScreenSize: { value: new Vector2(OScreen.width, OScreen.height) },\n _TextureSize: { value: new Vector2() },\n _PixelOffset: { value: new Vector2(0, 0) },\n _NDC: { value: new Vector3() },\n _PivotPoint: { value: new Vector2() },\n _DepthOffset: { value: 0 }\n });\n this.transparent = true;\n this.depthWrite = false;\n this.depthTest = false;\n }\n}\n\nexport { UIElementMaterial };\n","import { Vector2 } from 'three';\n\nclass ScreenSpacePosition\n{\n constructor()\n {\n this.tmp_vec = new Vector2();\n }\n\n get_pos_NDC(position)\n {\n return this.tmp_vec.set(position.x, position.y);\n }\n}\n\nexport { ScreenSpacePosition };\n","import { CameraManager } from '../../CameraManager';\n\nimport { Vector2 } from 'three';\nimport { Vector3 } from 'three';\n\nclass WorldSpacePosition\n{\n constructor()\n {\n this.tmp_vec3 = new Vector3();\n this.tmp_vec2 = new Vector2();\n }\n\n get_pos_NDC(position)\n {\n this.tmp_vec3.copy(position);\n this.tmp_vec3.project(CameraManager.current);\n\n return this.tmp_vec2.set(this.tmp_vec3.x, this.tmp_vec3.y);\n }\n}\n\nexport { WorldSpacePosition };\n","class UIElementState\n{\n constructor()\n {\n\n }\n\n update(ui_element, normalized_mouse_position)\n {\n\n }\n\n on_enter(ui_element)\n {}\n\n on_exit(ui_element)\n {}\n}\n\nexport { UIElementState };\n","import { UIElementState } from './UIElementState';\n\nclass OnIdle extends UIElementState\n{\n constructor()\n {\n super();\n }\n\n update(ui_element, normalized_mouse_position)\n {\n if (ui_element.is_mouse_over(normalized_mouse_position))\n {\n ui_element.set_state(ui_element._on_enter_state);\n }\n }\n}\n\nexport { OnIdle };\n","import { UIElementState } from './UIElementState';\n\nclass OnMouseEnter extends UIElementState\n{\n constructor()\n {\n super();\n }\n\n on_enter(ui_element)\n {\n ui_element.on_mouse_enter();\n }\n\n update(ui_element, normalized_mouse_position)\n {\n if (ui_element.is_mouse_over(normalized_mouse_position))\n {\n ui_element.set_state(ui_element._on_hover_state);\n }\n else\n {\n ui_element.set_state(ui_element._on_exit_state);\n }\n }\n}\n\nexport { OnMouseEnter };\n","import { UIElementState } from './UIElementState';\n\nclass OnMouseExit extends UIElementState\n{\n constructor()\n {\n super();\n }\n\n on_enter(ui_element)\n {\n ui_element.on_mouse_exit();\n ui_element.set_state(ui_element._on_idle_state);\n }\n}\n\nexport { OnMouseExit };\n","import { UIElementState } from './UIElementState';\n\nclass OnMouseHover extends UIElementState\n{\n constructor()\n {\n super();\n }\n\n on_enter(ui_element)\n {\n this.__trigger_on_hover(ui_element);\n }\n\n update(ui_element, normalized_mouse_position)\n {\n if (ui_element.is_mouse_over(normalized_mouse_position))\n {\n this.__trigger_on_hover(ui_element);\n }\n else\n {\n ui_element.set_state(ui_element._on_exit_state);\n }\n }\n\n __trigger_on_hover(ui_element)\n {\n ui_element.on_mouse_hover();\n }\n}\n\nexport { OnMouseHover };\n","\nimport { OScreen } from '../OScreen';\n\nimport { UIElementMaterial } from '../materials/UIElementMaterial';\n\nimport { ScreenSpacePosition } from '../ui/ui_element_position/ScreenSpacePosition';\nimport { WorldSpacePosition } from '../ui/ui_element_position/WorldSpacePosition';\n\nimport { OnIdle } from '../ui/ui_element_state/OnIdle';\nimport { OnMouseEnter } from '../ui/ui_element_state/OnMouseEnter';\nimport { OnMouseExit } from '../ui/ui_element_state/OnMouseExit';\nimport { OnMouseHover } from '../ui/ui_element_state/OnMouseHover';\n\nimport { Mesh } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { Vector2 } from 'three';\nimport { Vector3 } from 'three';\nimport { NearestFilter } from 'three';\nimport { Box2 } from 'three';\n\nclass UIElement extends Mesh\n{\n constructor(vert, frag)\n {\n super(new PlaneGeometry(1, 1), new UIElementMaterial());\n\n this.is_clickable = false;\n\n this.position_strategy = new WorldSpacePosition();\n this.current_state = new OnIdle();\n\n this._position = new Vector3();\n\n this._on_idle_state = new OnIdle();\n this._on_enter_state = new OnMouseEnter();\n this._on_exit_state = new OnMouseExit();\n this._on_hover_state = new OnMouseHover();\n\n this.on_enter = undefined;\n this.on_exit = undefined;\n this.on_hover = undefined;\n\n this.mouse_pos_tmp = new Vector2();\n this.cached_NDC_position = new Vector2();\n this.screen_pos_tmp = new Vector2();\n\n this.texture_size = new Vector2(1, 1);\n\n this.frustumCulled = false;\n this.matrixAutoUpdate = false;\n this.renderOrder = 0;\n\n this.size = 1;\n this.pixel_offset = new Vector2();\n }\n\n set_render_order(value)\n {\n this.renderOrder = value;\n }\n\n get pivot_point()\n {\n return this.material.uniforms._PivotPoint.value;\n }\n\n set_pixel_offset(offset)\n {\n this.pixel_offset.copy(offset);\n this.material.uniforms._PixelOffset.value.copy(offset);\n }\n\n set_state(new_state)\n {\n this.current_state.on_exit(this);\n this.current_state = new_state;\n this.current_state.on_enter(this);\n }\n\n get position()\n {\n return this._position;\n }\n\n set use_depth(boolean)\n {\n this.material.depthTest = boolean;\n }\n\n get use_depth()\n {\n return this.material.depthTest;\n }\n\n set depth_offset(value)\n {\n this.material.uniforms._DepthOffset.value = value;\n }\n\n get depth_offset()\n {\n return this.material.uniforms._DepthOffset.value;\n }\n\n clear_state()\n {\n this.visible = false;\n }\n\n set_world_space_coordinate_system()\n {\n this.position_strategy = new WorldSpacePosition();\n }\n\n set_screen_space_coordinate_system()\n {\n this.position_strategy = new ScreenSpacePosition();\n }\n\n set_texture(texture)\n {\n texture.minFilter = NearestFilter;\n texture.magFilter = NearestFilter;\n texture.needsUpdate = true;\n\n this.texture_size.set(texture.image.width, texture.image.height);\n\n this.material.uniforms._MainTex.value = texture;\n this.get_size(this.material.uniforms._TextureSize.value);\n this.visible = true;\n }\n\n update_state(normalized_mouse_pos)\n {\n this.material.uniforms._ScreenSize.value.set(OScreen.width, OScreen.height);\n this.get_size(this.material.uniforms._TextureSize.value);\n\n this.cached_NDC_position.copy(this.position_strategy.get_pos_NDC(this.position));\n this.material.uniforms._NDC.value.copy(this.position);\n this.current_state.update(this, normalized_mouse_pos);\n }\n\n is_mouse_over(normalized_mouse_pos)\n {\n this.screen_pos_tmp.copy(this.cached_NDC_position);\n this.to_screen_position(this.screen_pos_tmp);\n this.screen_pos_tmp.x += this.pixel_offset.x;\n this.screen_pos_tmp.y += this.pixel_offset.y;\n\n const rect = new Box2().setFromCenterAndSize(this.screen_pos_tmp, this.get_size());\n\n this.mouse_pos_tmp.copy(normalized_mouse_pos);\n this.to_screen_position(this.mouse_pos_tmp);\n\n return rect.containsPoint(this.mouse_pos_tmp);\n }\n\n to_screen_position(projected_pos)\n {\n projected_pos.x = (projected_pos.x * 0.5 + 0.5) * OScreen.width + this.pixel_offset.x;\n projected_pos.y = (projected_pos.y * 0.5 + 0.5) * OScreen.height + this.pixel_offset.y;\n }\n\n get_screen_space_position()\n {\n const pos = this.cached_NDC_position.clone();\n this.to_screen_position(pos);\n return pos;\n }\n\n set_screen_space_position(screen_pos)\n {\n this.position.x = (screen_pos.x / OScreen.width) * 2 - 1;\n this.position.y = (screen_pos.y / OScreen.height) * 2 - 1;\n }\n\n dispose()\n {\n if (this.material.uniforms._MainTex.value)\n {\n this.material.uniforms._MainTex.value.dispose();\n }\n // OScreen.remove_screen_material(this.material);\n this.geometry.dispose();\n this.material.dispose();\n }\n\n get_size(vector2)\n {\n if (vector2)\n {\n return vector2.copy(this.texture_size).multiplyScalar(this.size / OScreen.dpr);\n }\n else\n {\n return new Vector2().copy(this.texture_size).multiplyScalar(this.size / OScreen.dpr);\n }\n }\n\n on_mouse_enter()\n {}\n\n on_mouse_exit()\n {}\n\n on_mouse_hover()\n {}\n}\n\nexport { UIElement };\n","import { Mesh } from 'three';\n\nclass UpdatableMaterialMesh extends Mesh\n{\n constructor(geometry, material)\n {\n super(geometry, material);\n\n const self = this;\n\n this.onBeforeRender = () =>\n {\n self.material.update();\n };\n }\n}\n\nexport { UpdatableMaterialMesh };\n","import { Vector2, Vector4 } from 'three';\n\nclass TextGlyph\n{\n constructor(offset, plane_bounds, atlas_bounds)\n {\n const width = plane_bounds.right - plane_bounds.left;\n const height = plane_bounds.top - plane_bounds.bottom;\n\n this.scale = new Vector2(width, height);\n this.position = new Vector2(offset + plane_bounds.left, plane_bounds.bottom);\n\n this.atlas_bounds = new Vector4(atlas_bounds.left, atlas_bounds.right, atlas_bounds.top, atlas_bounds.bottom);\n }\n}\n\nexport { TextGlyph };\n","import { Vector3, Quaternion, Matrix4, Color, Box2, Vector2 } from 'three';\nimport { TextGlyph } from './TextGlyph';\n\nclass SDFText\n{\n constructor(glyph_layout, text = '')\n {\n this.glyph_layout = glyph_layout;\n\n this.glyphs = [];\n\n this.glyph_is_dirty = true;\n this.matrix_is_dirty = true;\n this.color_is_dirty = true;\n\n this.position = new Vector3();\n this.quaternion = new Quaternion();\n this.scale = new Vector3(1, 1, 1);\n this.matrix = new Matrix4();\n\n this.color = new Color('#FFFFFF');\n\n this.pivot_point = new Vector2();\n this.__opacity = 1;\n\n this.__text = text;\n\n this.__generate_glyphs(text);\n }\n\n set text(value)\n {\n this.__text = value;\n this.__generate_glyphs(value);\n this.matrix_is_dirty = true;\n }\n\n get text()\n {\n return this.__text;\n }\n\n update_matrix()\n {\n this.matrix.compose(this.position, this.quaternion, this.scale);\n this.matrix_is_dirty = false;\n this.glyph_is_dirty = true;\n }\n\n clear_glyph_dirty()\n {\n this.glyph_is_dirty = false;\n }\n\n clear_color_dirty()\n {\n this.color_is_dirty = false;\n }\n\n set_rotation(orientation = 0, tilt = 0) // 0..360, -90..0..90\n {\n const new_orientation = new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), (orientation / 360) * Math.PI * 2);\n const new_tilt = new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), (-tilt / 360) * Math.PI * 2);\n\n this.quaternion.copy(new_orientation.multiply(new_tilt));\n this.matrix_is_dirty = true;\n }\n\n set_position(pos)\n {\n this.position.copy(pos);\n this.matrix_is_dirty = true;\n }\n\n set_size(size)\n {\n this.scale.set(size, size, size);\n this.matrix_is_dirty = true;\n }\n\n set_color(col)\n {\n this.color.set(col);\n this.color_is_dirty = true;\n }\n\n set_pivot(pivot)\n {\n this.pivot_point.copy(pivot);\n this.update_glyphs();\n }\n\n set opacity(op)\n {\n this.__opacity = op;\n this.color_is_dirty = true;\n }\n\n get opacity()\n {\n return this.__opacity;\n }\n\n update_glyphs()\n {\n this.__generate_glyphs(this.text);\n }\n\n __generate_glyphs(text)\n {\n let cursor = 0;\n\n this.glyphs.length = 0;\n\n for (let i = 0; i < text.length; i++)\n {\n const unicode = text.charCodeAt(i);\n const glyph = this.glyph_layout.find(element => element.unicode === unicode);\n if (glyph)\n {\n if (glyph.planeBounds)\n {\n const text_glyph = new TextGlyph(cursor, glyph.planeBounds, glyph.atlasBounds);\n this.glyphs.push(text_glyph);\n }\n cursor += glyph.advance;\n }\n }\n\n const box2 = new Box2();\n const first_glyph = this.glyphs[0];\n box2.setFromCenterAndSize(first_glyph.position.clone().add(new Vector2(first_glyph.scale.x / 2, first_glyph.scale.y / 2)), first_glyph.scale);\n\n for (let i = 1; i < this.glyphs.length; i++)\n {\n const g = this.glyphs[i];\n const box = new Box2().setFromCenterAndSize(g.position.clone().add(new Vector2(g.scale.x / 2, g.scale.y / 2)), g.scale);\n box2.union(box);\n }\n\n const box2_size = new Vector2();\n box2.getSize(box2_size);\n for (let i = 0; i < this.glyphs.length; i++)\n {\n this.glyphs[i].position.x -= box2_size.x / 2;\n this.glyphs[i].position.y -= box2_size.y / 2;\n\n this.glyphs[i].position.x += (box2_size.x / 2) * this.pivot_point.x;\n this.glyphs[i].position.y += (box2_size.y / 2) * this.pivot_point.y;\n }\n\n this.glyph_is_dirty = true;\n }\n}\n\nexport { SDFText };\n","import { BaseShaderMaterial } from './BaseShaderMaterial';\n\nimport frag from '../shaders/sdf_text/sdf_text.frag';\nimport vert from '../shaders/sdf_text/sdf_text.vert';\n\nimport { Vector2, DoubleSide, LinearFilter } from 'three';\nimport { OMath } from '../utilities/OMath';\n\nclass SDFTextMaterial extends BaseShaderMaterial\n{\n constructor(texture)\n {\n super(vert, frag, {\n _Texture: { value: texture },\n _Boldness: { value: 0.5 },\n _AtlasSize: { value: new Vector2(1, 1) }\n });\n\n this.transparent = true;\n this.extensions = {\n derivatives: true\n };\n this.depthWrite = false;\n this.side = DoubleSide;\n texture.minFilter = LinearFilter;\n texture.magFilter = LinearFilter;\n texture.generateMipMaps = false;\n }\n\n set_atlas_size(size)\n {\n this.uniforms._AtlasSize.value.copy(size);\n }\n\n set_boldness(value)\n {\n this.uniforms._Boldness.value = OMath.lerp(0.5, 0.2, value);\n }\n}\n\nexport { SDFTextMaterial };\n","import { SDFText } from './SDFText';\nimport { SDFTextMaterial } from '../../materials/SDFTextMaterial';\nimport { ArrayUtilities } from '../../utilities/ArrayUtilities';\n\nimport {\n PlaneGeometry,\n Mesh,\n Vector2,\n InstancedBufferGeometry,\n InstancedBufferAttribute,\n Float32BufferAttribute,\n DynamicDrawUsage\n} from 'three';\n\nclass SDFTextBatch extends Mesh\n{\n constructor(font_layout, atlas_texture)\n {\n const max_allocations = 2000;\n\n const instanced_geometry = new InstancedBufferGeometry();\n instanced_geometry.instanceCount = 0;\n\n const geometry = new PlaneGeometry(1, 1);\n geometry.translate(0.5, 0.5, 0);\n instanced_geometry.setAttribute('position', new Float32BufferAttribute(geometry.getAttribute('position').array, 3));\n instanced_geometry.setAttribute('uv', new Float32BufferAttribute(geometry.getAttribute('uv').array, 2));\n instanced_geometry.index = geometry.index;\n\n const transformsCol0 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n const transformsCol1 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n const transformsCol2 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n const transformsCol3 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n\n const glyph_bounds = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n const plane_bounds = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n\n const color = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n\n transformsCol0.usage = DynamicDrawUsage;\n transformsCol1.usage = DynamicDrawUsage;\n transformsCol2.usage = DynamicDrawUsage;\n transformsCol3.usage = DynamicDrawUsage;\n glyph_bounds.usage = DynamicDrawUsage;\n plane_bounds.usage = DynamicDrawUsage;\n color.usage = DynamicDrawUsage;\n\n instanced_geometry.setAttribute('transformsCol0', transformsCol0);\n instanced_geometry.setAttribute('transformsCol1', transformsCol1);\n instanced_geometry.setAttribute('transformsCol2', transformsCol2);\n instanced_geometry.setAttribute('transformsCol3', transformsCol3);\n\n instanced_geometry.setAttribute('glyph_bounds', glyph_bounds);\n instanced_geometry.setAttribute('plane_bounds', plane_bounds);\n instanced_geometry.setAttribute('color', color);\n\n super(instanced_geometry, new SDFTextMaterial(atlas_texture));\n\n this.text_elements = [];\n this.font_layout = font_layout;\n\n this.material.set_atlas_size(new Vector2(font_layout.atlas.width, font_layout.atlas.height));\n\n this.frustumCulled = false;\n }\n\n set_boldness(value)\n {\n this.material.set_boldness(value);\n }\n\n add_text(text_str)\n {\n const elem = new SDFText(this.font_layout.glyphs, text_str);\n this.text_elements.push(elem);\n return elem;\n }\n\n remove_text(text_elem)\n {\n ArrayUtilities.remove_elem(this.text_elements, text_elem);\n this.update(true);\n }\n\n update(force_update)\n {\n const glyph_bounds_atr = this.geometry.getAttribute('glyph_bounds');\n const plane_bounds_atr = this.geometry.getAttribute('plane_bounds');\n\n const transformsCol0 = this.geometry.getAttribute('transformsCol0');\n const transformsCol1 = this.geometry.getAttribute('transformsCol1');\n const transformsCol2 = this.geometry.getAttribute('transformsCol2');\n const transformsCol3 = this.geometry.getAttribute('transformsCol3');\n\n const color_atr = this.geometry.getAttribute('color');\n\n let matrix_needs_update = force_update === true;\n let glyph_needs_update = force_update === true;\n let color_needs_update = force_update === true;\n\n let glyph_count = 0;\n for (let i = 0; i < this.text_elements.length; i++)\n {\n const text = this.text_elements[i];\n\n if (text.matrix_is_dirty)\n {\n matrix_needs_update = true;\n text.update_matrix();\n }\n\n if (text.glyph_is_dirty)\n {\n glyph_needs_update = true;\n text.clear_glyph_dirty();\n }\n\n if (text.color_is_dirty)\n {\n color_needs_update = true;\n text.clear_color_dirty();\n }\n\n const matrix = text.matrix;\n const color = text.color;\n const opacity = text.opacity;\n\n for (let glyph_i = 0; glyph_i < text.glyphs.length; glyph_i++)\n {\n const glyph = text.glyphs[glyph_i];\n\n const buffer_i = glyph_count;\n\n glyph_bounds_atr.setXYZW(buffer_i, glyph.atlas_bounds.x, glyph.atlas_bounds.y, glyph.atlas_bounds.z, glyph.atlas_bounds.w);\n plane_bounds_atr.setXYZW(buffer_i, glyph.position.x, glyph.position.y, glyph.scale.x, glyph.scale.y);\n\n transformsCol0.setXYZW(buffer_i, matrix.elements[0],\n matrix.elements[1],\n matrix.elements[2],\n matrix.elements[3]);\n\n transformsCol1.setXYZW(buffer_i, matrix.elements[4],\n matrix.elements[5],\n matrix.elements[6],\n matrix.elements[7]);\n\n transformsCol2.setXYZW(buffer_i, matrix.elements[8],\n matrix.elements[9],\n matrix.elements[10],\n matrix.elements[11]);\n\n transformsCol3.setXYZW(buffer_i, matrix.elements[12],\n matrix.elements[13],\n matrix.elements[14],\n matrix.elements[15]);\n\n color_atr.setXYZW(buffer_i, color.r, color.g, color.b, opacity);\n\n glyph_count++;\n }\n }\n\n this.geometry.instanceCount = glyph_count;\n\n if (glyph_count > this.max_allocations)\n {\n console.error('SDFTextBatch exceeded maximum glyph allocations(max/current): ', this.max_allocations, glyph_count, this);\n }\n\n if (matrix_needs_update)\n {\n transformsCol0.needsUpdate = true;\n transformsCol1.needsUpdate = true;\n transformsCol2.needsUpdate = true;\n transformsCol3.needsUpdate = true;\n }\n if (glyph_needs_update)\n {\n glyph_bounds_atr.needsUpdate = true;\n plane_bounds_atr.needsUpdate = true;\n }\n if (color_needs_update)\n {\n color_atr.needsUpdate = true;\n }\n }\n\n dispose()\n {\n this.geometry.dispose();\n this.material.dispose();\n }\n}\n\nexport { SDFTextBatch };\n","import { ActionInterpolator } from './ActionInterpolator';\n\nclass VectorInterpolator extends ActionInterpolator\n{\n constructor(attribute_name, from = 0, to = 1, easing_function = 'linear')\n {\n super(easing_function);\n\n this.attribute_name = attribute_name;\n this.from = from;\n this.to = to;\n }\n\n update(context, t)\n {\n const tmp = this.from.clone();\n tmp.lerp(this.to, this.easing_function(t));\n context[this.attribute_name].copy(tmp);\n }\n}\n\nexport { VectorInterpolator };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport downsample_frag from '../shaders/dual_filter_blur/downsample.frag';\nimport upsample_frag from '../shaders/dual_filter_blur/upsample.frag';\n\nclass DualFilteringBlurMaterial extends BlitMaterial\n{\n constructor(upsample)\n {\n super(upsample ? upsample_frag : downsample_frag);\n }\n}\n\nexport { DualFilteringBlurMaterial };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/dual_filter_blur/alpha_filter.frag';\n\nclass AlphaFilterMaterial extends BlitMaterial\n{\n constructor(use_alpha_mask, upsample)\n {\n super(frag);\n }\n\n set offset(value)\n {\n this.uniforms._Offset.value = value;\n }\n\n get offset()\n {\n return this.uniforms._Offset.value;\n }\n}\n\nexport { AlphaFilterMaterial };\n","import { DualFilteringBlurMaterial } from '../materials/DualFilteringBlurMaterial';\nimport { AlphaFilterMaterial } from '../materials/AlphaFilterMaterial';\nimport { Graphics } from '../Graphics';\nimport { WebGLRenderTarget } from 'three';\nclass DualFilteringBlurrer\n{\n constructor(use_alpha_mask)\n {\n this.current_width = 1;\n this.current_height = 1;\n this.RT0 = new WebGLRenderTarget(1, 1);\n this.RT1 = new WebGLRenderTarget(1, 1);\n this.RT2 = new WebGLRenderTarget(1, 1);\n this.RT3 = new WebGLRenderTarget(1, 1);\n this.RT4 = new WebGLRenderTarget(1, 1);\n\n this.upscale_blur_mat = new DualFilteringBlurMaterial(true);\n this.downscale_blur_mat = new DualFilteringBlurMaterial(false);\n\n this.alpha_filter_mat = new AlphaFilterMaterial();\n }\n\n blur(RT)\n {\n this.check_RT_resize(RT.width, RT.height);\n Graphics.blit(RT, this.RT1, this.alpha_filter_mat);\n\n // Graphics.blit(this.RT0, this.RT1, this.downscale_blur_mat);\n Graphics.blit(this.RT1, this.RT2, this.downscale_blur_mat);\n Graphics.blit(this.RT2, this.RT3, this.downscale_blur_mat);\n Graphics.blit(this.RT3, this.RT4, this.downscale_blur_mat);\n\n // Graphics.blit(this.RT4, this.RT3, this.upscale_blur_mat);\n // Graphics.blit(this.RT3, this.RT4, this.upscale_blur_mat);\n Graphics.blit(this.RT4, this.RT3, this.upscale_blur_mat);\n Graphics.blit(this.RT3, this.RT2, this.upscale_blur_mat);\n Graphics.blit(this.RT2, RT, this.upscale_blur_mat);\n // Graphics.blit(this.RT1, RT, this.upscale_blur_mat);\n\n // return this.RT2;\n }\n\n check_RT_resize(width, height)\n {\n if (this.current_width !== width || this.current_height !== height)\n {\n this.current_width = width;\n this.current_height = height;\n this.RT0.setSize(this.current_width / 2, this.current_height / 2);\n this.RT1.setSize(this.current_width / 2, this.current_height / 2);\n this.RT2.setSize(this.current_width / 4, this.current_height / 4);\n this.RT3.setSize(this.current_width / 8, this.current_height / 8);\n this.RT4.setSize(this.current_width / 16, this.current_height / 16);\n }\n }\n}\n\nexport { DualFilteringBlurrer };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/median_filter/median_filter.frag';\n\nimport { Vector2 } from 'three';\n\nclass MedianFilterMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag, undefined, {\n kernel3x3: true\n });\n\n this.uniforms._SourceTex = { value: undefined };\n this.uniforms._SourceTexSize = { value: new Vector2(1, 1) };\n }\n\n set_texture(tex)\n {\n this.uniforms._SourceTex.value = tex;\n\n const size = this.get_size(tex);\n this.uniforms._SourceTexSize.value.copy(size);\n }\n\n get_size(tex)\n {\n if (tex.isVideoTexture)\n {\n return new Vector2(Math.max(1, tex.image.videoWidth), Math.max(1, tex.image.videoHeight));\n }\n if (tex.isWebGLRenderTarget)\n {\n return new Vector2(tex.width, tex.height);\n }\n if (tex.isTexture)\n {\n return new Vector2(tex.image.width, tex.image.height);\n }\n return new Vector2(1, 1);\n }\n}\n\nexport { MedianFilterMaterial };\n","import { MedianFilterMaterial } from '../materials/MedianFilterMaterial';\nimport { Graphics } from '../Graphics';\n\nimport { WebGLRenderTarget, Vector2, RGBAFormat, FloatType, NearestFilter } from 'three';\n\nclass MedianFilter\n{\n constructor(renderer)\n {\n this.RT = new WebGLRenderTarget(1, 1, {\n type: FloatType,\n format: RGBAFormat,\n minFilter: NearestFilter,\n magFilter: NearestFilter\n });\n this.RT1 = new WebGLRenderTarget(1, 1, {\n type: FloatType,\n format: RGBAFormat,\n minFilter: NearestFilter,\n magFilter: NearestFilter\n });\n\n this.median_filter_mat = new MedianFilterMaterial();\n }\n\n filter(texture)\n {\n const tex_size = this.get_size(texture);\n if (tex_size.x !== this.RT.width || tex_size.y !== this.RT.height)\n {\n this.RT.setSize(tex_size.x, tex_size.y);\n this.RT1.setSize(tex_size.x, tex_size.y);\n }\n\n this.median_filter_mat.set_texture(texture);\n Graphics.material_pass(this.median_filter_mat, this.RT);\n\n for (let i = 0; i < 0; i++)\n {\n this.median_filter_mat.set_texture(this.RT.texture);\n Graphics.material_pass(this.median_filter_mat, this.RT1);\n\n this.median_filter_mat.set_texture(this.RT1.texture);\n Graphics.material_pass(this.median_filter_mat, this.RT);\n }\n\n return this.RT;\n }\n\n get_size(tex)\n {\n if (tex.isVideoTexture)\n {\n return new Vector2(Math.max(1, tex.image.videoWidth), Math.max(1, tex.image.videoHeight));\n }\n if (tex.isWebGLRenderTarget)\n {\n return new Vector2(tex.width, tex.height);\n }\n if (tex.isTexture)\n {\n return new Vector2(tex.image.width, tex.image.height);\n }\n return new Vector2(1, 1);\n }\n}\n\nexport { MedianFilter };\n","import { Graphics } from '../Graphics';\n\nimport { FloatType, HalfFloatType, NearestFilter, NoColorSpace, RGBAFormat, WebGLRenderTarget } from 'three';\nimport { Capabilities } from '../Capabilities';\n\nclass ParticleAttribute\n{\n constructor(attr_name, update_material)\n {\n this.read = undefined;\n this.write = undefined;\n\n this.name = attr_name;\n\n this.update_material = update_material;\n }\n\n init_from_geometry(geometry)\n {\n // overrided by inheritance\n }\n\n init_from_attribute(particle_attribute)\n {\n\n }\n\n build_RT(particle_count)\n {\n const resolution = ParticleAttribute.calculate_resolution(particle_count);\n const options = {\n minFilter: NearestFilter,\n magFilter: NearestFilter,\n format: RGBAFormat,\n colorScape: NoColorSpace,\n type: Capabilities.fp_textures_available ? FloatType : HalfFloatType,\n stencilBuffer: false,\n depthBuffer: false\n };\n\n return new WebGLRenderTarget(resolution.width, resolution.height, options);\n }\n\n static calculate_resolution(particle_count)\n {\n const width = Math.min(particle_count, 512);\n const height = Math.max(1, Math.ceil(particle_count / width));\n return { width, height };\n }\n\n swap_RT()\n {\n const tmp = this.read;\n this.read = this.write;\n this.write = tmp;\n }\n\n update(attribute_writter_scene)\n {\n if (this.update_material)\n {\n this.update_material.update();\n attribute_writter_scene.children[0].material = this.update_material;\n this.update_material.uniforms._MainTex.value = this.read.texture;\n Graphics.render(attribute_writter_scene, undefined, this.write);\n attribute_writter_scene.children[0].material = undefined;\n\n this.swap_RT();\n }\n }\n\n store_geometry_attribute_in_RT(attribute, RT, storage_material, attribute_writter_scene)\n {\n attribute_writter_scene.children[0].geometry.setAttribute('data', attribute);\n attribute_writter_scene.children[0].material = storage_material;\n\n Graphics.render(attribute_writter_scene, undefined, RT);\n\n attribute_writter_scene.children[0].geometry.deleteAttribute('data');\n attribute_writter_scene.children[0].material = undefined;\n }\n\n get_texture()\n {\n return this.read.texture;\n }\n}\n\nexport { ParticleAttribute };\n","import { Object3D } from 'three';\nimport { BufferAttribute } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { Mesh } from 'three';\nimport { BufferGeometry } from 'three';\nimport { Scene } from 'three';\nimport { Points } from 'three';\nimport { InstancedBufferGeometry } from 'three';\nimport { InstancedBufferAttribute } from 'three';\nimport { ParticleAttribute } from './ParticleAttribute';\n\nclass GPUParticleSystem extends Object3D\n{\n constructor(particle_count, material)\n {\n super();\n this.attributes = [];\n\n this.mesh = this.build_point_mesh(particle_count, material);\n this.add(this.mesh);\n\n this.attribute_writter_mesh = this.build_attribute_writter_mesh(particle_count);\n this.attribute_writter_scene = new Scene();\n this.attribute_writter_scene.add(this.attribute_writter_mesh);\n }\n\n add_texture_attribute(buffer_attribute)\n {\n this.attributes.push(buffer_attribute);\n }\n\n add_update_attribute_array(name, array, item_size)\n {\n this.attribute_writter_mesh.geometry.setAttribute(name, new BufferAttribute(array, item_size, false));\n }\n\n add_attribute_array(name, array, item_size)\n {\n this.mesh.geometry.setAttribute(name, new InstancedBufferAttribute(array, item_size, false));\n }\n\n update()\n {\n this.mesh.material.update();\n for (let i = 0; i < this.attributes.length; i++)\n {\n this.attributes[i].update(this.attribute_writter_scene);\n }\n }\n\n dispose()\n {\n this.mesh.geometry.dispose();\n this.mesh.material.dispose();\n }\n\n build_point_mesh(instance_count = 1, material)\n {\n const geo = new PlaneGeometry();\n\n const instanced_geo = new InstancedBufferGeometry();\n instanced_geo.setAttribute('position', geo.getAttribute('position'));\n instanced_geo.index = geo.index;\n\n instanced_geo.setAttribute('storage_uv', this.build_uv_storage_attribute(instance_count));\n instanced_geo.instanceCount = instance_count;\n const mesh = new Mesh(instanced_geo, material);\n mesh.frustumCulled = false;\n return mesh;\n }\n\n build_attribute_writter_mesh(particle_count)\n {\n const { width, height } = ParticleAttribute.calculate_resolution(particle_count);\n\n const uvs = new Float32Array(particle_count * 3);\n\n for (let i = 0; i < particle_count; i++)\n {\n const x = i % width;\n const y = Math.floor(i / width);\n uvs[i * 3 + 0] = (x + 0.5) / width;\n uvs[i * 3 + 1] = (y + 0.5) / height;\n uvs[i * 3 + 2] = i;\n }\n const geo = new BufferGeometry();\n geo.setAttribute('position', new BufferAttribute(uvs, 3, false));\n\n const points = new Points(geo);\n points.frustumCulled = false;\n return points;\n }\n\n build_uv_storage_attribute(particle_count)\n {\n const { width, height } = ParticleAttribute.calculate_resolution(particle_count);\n\n const uvs = new Float32Array(particle_count * 2);\n\n for (let i = 0; i < particle_count; i++)\n {\n const x = i % width;\n const y = Math.floor(i / width);\n uvs[i * 2 + 0] = (x + 0.5) / width;\n uvs[i * 2 + 1] = (y + 0.5) / height;\n }\n return new InstancedBufferAttribute(uvs, 2, false);\n }\n}\n\nexport { GPUParticleSystem };\n","import frag from '../../shaders/gpu_particles/generic_storage.frag';\n\nimport { ShaderMaterial } from 'three';\nimport { NoBlending } from 'three';\nimport { AlwaysDepth } from 'three';\n\nclass ParticleStorageMaterial extends ShaderMaterial\n{\n constructor()\n {\n const vert = `\n varying vec4 value;\n attribute vec4 data;\n\n void main()\n {\n gl_Position = vec4(position.xy * 2.0 - 1.0, 1.0,1.0);\n gl_PointSize = 1.0;\n\n value = data;\n }\n `;\n super({\n uniforms: {\n\n },\n vertexShader: vert,\n fragmentShader: frag,\n depthWrite: false,\n blending: NoBlending,\n depthTest: false,\n depthFunc: AlwaysDepth\n });\n }\n}\n\nexport { ParticleStorageMaterial };\n","import { BufferAttribute } from 'three';\n\nimport { ParticleAttribute } from '../gpu_particles/ParticleAttribute';\nimport { ParticleStorageMaterial } from '../materials/gpu_particles/ParticleStorageMaterial';\n\nclass ParticlePositionAttribute extends ParticleAttribute\n{\n constructor(update_material)\n {\n super('_Position', update_material);\n }\n\n store_geometry(geometry, attribute_writter_scene)\n {\n const pos_attr = geometry.getAttribute('position');\n this.read = this.build_RT(pos_attr.count);\n this.write = this.build_RT(pos_attr.count);\n\n const mat = new ParticleStorageMaterial();\n this.store_geometry_attribute_in_RT(geometry.getAttribute('position'), this.read, mat, attribute_writter_scene);\n }\n\n store_positions(positions, attribute_writter_scene)\n {\n this.read = this.build_RT(positions.length);\n this.write = this.build_RT(positions.length);\n\n const arr = new Float32Array(positions.length * 4);\n\n for (let i = 0; i < positions.length; i++)\n {\n arr[i * 4 + 0] = positions[i].x;\n arr[i * 4 + 1] = positions[i].y;\n arr[i * 4 + 2] = positions[i].z;\n arr[i * 4 + 3] = (Math.random() * 2 - 1) * 10;\n }\n const mat = new ParticleStorageMaterial();\n this.store_geometry_attribute_in_RT(new BufferAttribute(arr, 4), this.read, mat, attribute_writter_scene);\n }\n}\n\nexport { ParticlePositionAttribute };\n","import { DataTexture } from 'three';\n\nclass CustomDataTexture extends DataTexture\n{\n constructor(data, width, height, format, type)\n {\n super(data, width, height, format, type);\n this.multiplier = 1;\n }\n\n set_rgba(index, r, g, b, a)\n {\n this.data[index * 3 + 0] = r * this.multiplier;\n this.data[index * 3 + 1] = g * this.multiplier;\n this.data[index * 3 + 2] = b * this.multiplier;\n this.data[index * 3 + 3] = a * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_rgb(index, r, g, b)\n {\n this.data[index * 3 + 0] = r * this.multiplier;\n this.data[index * 3 + 1] = g * this.multiplier;\n this.data[index * 3 + 2] = b * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_r(index, value)\n {\n this.data[index * 3 + 0] = value * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_g(index, value)\n {\n this.data[index * 3 + 1] = value * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_b(index, value)\n {\n this.data[index * 3 + 2] = value * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_a(index, value)\n {\n this.data[index * 3 + 2] = value * this.multiplier;\n this.needsUpdate = true;\n }\n}\n\nexport { CustomDataTexture };\n","import { RGBAFormat } from 'three';\nimport { CustomDataTexture } from './CustomDataTexture';\n\nclass RGBDataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Uint8Array(width * height * 3);\n super(data, width, height, RGBAFormat);\n this.multiplier = 255;\n }\n}\n\nexport { RGBDataTexture };\n","import { CustomDataTexture } from './CustomDataTexture';\nimport { RGBAFormat } from 'three';\n\nclass RGBADataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Uint8Array(width * height * 4);\n super(data, width, height, RGBAFormat);\n this.multiplier = 255;\n }\n}\n\nexport { RGBADataTexture };\n","import { FloatType, RGBAFormat } from 'three';\nimport { CustomDataTexture } from './CustomDataTexture';\n\nclass RGBFloatDataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Float32Array(width * height * 3);\n super(data, width, height, RGBAFormat, FloatType);\n }\n}\n\nexport { RGBFloatDataTexture };\n","import { CustomDataTexture } from './CustomDataTexture';\nimport { FloatType } from 'three';\nimport { RGBAFormat } from 'three';\n\nclass RGBAFloatDataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Float32Array(width * height * 4);\n super(data, width, height, RGBAFormat, FloatType);\n }\n}\n\nexport { RGBAFloatDataTexture };\n","import { Mesh } from 'three';\nimport { RGBDataTexture } from '../data_textures/RGBDataTexture';\nimport { RGBADataTexture } from '../data_textures/RGBADataTexture';\nimport { RGBFloatDataTexture } from '../data_textures/RGBFloatDataTexture';\nimport { RGBAFloatDataTexture } from '../data_textures/RGBAFloatDataTexture';\n\nclass BatchedMesh extends Mesh\n{\n constructor(id_table, geometry, material, max_texture_width)\n {\n super(geometry, material);\n\n this.id_table = id_table;\n this.batched_count = Object.keys(id_table).length;\n this.max_texture_width = max_texture_width;\n this.batch_width = this.batched_count % max_texture_width;\n this.batch_height = Math.ceil(this.batched_count / max_texture_width);\n }\n\n attach_rgb_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBDataTexture(this.batch_width, this.batch_height);\n }\n\n attach_rgba_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBADataTexture(this.batch_width, this.batch_height);\n }\n\n attach_rgb_float_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBFloatDataTexture(this.batch_width, this.batch_height);\n }\n\n attach_rgba_float_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBAFloatDataTexture(this.batch_width, this.batch_height);\n }\n\n get_mesh_index(name)\n {\n return this.id_table[name];\n }\n\n set_rgb_value(uniform_name, mesh_name, r, g, b)\n {\n this.material.uniforms[uniform_name].set_rgb(this.get_mesh_index(mesh_name), r, g, b);\n }\n\n set_rgba_value(uniform_name, mesh_name, r, g, b, a)\n {\n this.material.uniforms[uniform_name].set_rgba(this.get_mesh_index(mesh_name), r, g, b, a);\n }\n}\n\nexport { BatchedMesh };\n","import { BatchedMesh } from './BatchedMesh';\n\nimport * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js';\n\nimport { BufferAttribute } from 'three';\n\nclass MeshBatcher\n{\n batch(meshes, material)\n {\n const max_texture_width = 2048;\n // let texture_width = meshes.length % max_texture_width;\n // let texture_height = Math.ceil(meshes.length / max_texture_width);\n\n // console.log(\"Store count: \" + buffer_geometries.length + \", Texture size: \" +texture_width);\n\n const geometries = [];\n const id_table = {};\n\n const attr_mesh_id = [];\n\n for (let i = 0; i < meshes.length; i++)\n {\n const mesh = meshes[i];\n const vertex_count = mesh.geometry.getAttribute('position').count;\n\n for (let count = 0; count < vertex_count; count++)\n {\n attr_mesh_id.push(i);\n }\n\n geometries.push(mesh.geometry);\n\n if (id_table[mesh.name] === undefined)\n {\n id_table[mesh.name] = i;\n }\n else\n {\n console.error('Mesh name is duplicated when trying to merge meshes. Non-unique id error.', mesh.name, id_table);\n }\n }\n\n const buffer_geometry = BufferGeometryUtils.mergeGeometries(geometries);\n\n const buffer_attribute = new BufferAttribute(new Float32Array(attr_mesh_id), 1);\n buffer_geometry.setAttribute('mesh_id', buffer_attribute);\n\n return this.create_batched_mesh(id_table, buffer_geometry, material, max_texture_width);\n }\n\n create_batched_mesh(id_table, buffer_geometry, material, max_texture_width)\n {\n return new BatchedMesh(id_table, buffer_geometry, material, max_texture_width);\n }\n}\n\nexport { MeshBatcher };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { ColladaLoader } from 'three/examples/jsm/loaders/ColladaLoader.js';\r\n\r\nclass DAELoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new ColladaLoader();\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (gltf) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, gltf);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { DAELoader };\r\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { FileLoader as TFileLoader } from 'three';\r\n\r\nclass FileLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new TFileLoader();\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (file) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, file);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg);\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { FileLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\n\nimport { FontLoader as TFontLoader } from 'three/examples/jsm/loaders/FontLoader.js';\n\nclass FontLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n this.loader = new TFontLoader();\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (font) =>\n {\n resource_container.set_resource(this.resource_id, this.url, font);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then probably the problem is related to the file not being found. Check the name and path of the resource');\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { FontLoader };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { HDRCubeTextureLoader as THDRCubeTextureLoader } from 'three/examples/jsm/loaders/HDRCubeTextureLoader.js';\r\n\r\nclass HDRCubeTextureLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, extension, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new THDRCubeTextureLoader();\r\n this.loader.setPath(url + '/');\r\n // this.loader.setDataType(UnsignedByteType);\r\n this.urls = [\r\n `px.${extension}`,\r\n `nx.${extension}`,\r\n `py.${extension}`,\r\n `ny.${extension}`,\r\n `pz.${extension}`,\r\n `nz.${extension}`\r\n ];\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.urls, (hdr) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, hdr);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { HDRCubeTextureLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\n\nclass JSONLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n }\n\n on_preloaded_finished(resource_container, response)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n response.json().then((json) =>\n {\n resource_container.set_resource(this.resource_id, this.url, json);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { JSONLoader };\n","import { AbstractLoader } from './AbstractLoader';\n\nimport { OBJLoader as TOBJLoader } from 'three/examples/jsm/loaders/OBJLoader.js';\n\nclass OBJLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n this.loader = new TOBJLoader();\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (obj) =>\n {\n resource_container.set_resource(this.resource_id, this.url, obj);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then probably the problem is related to the file not being found. Check the name and path of the resource');\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { OBJLoader };\n","import { AbstractLoader } from './AbstractLoader';\n\nimport { Vector3 } from 'three';\nimport { FileLoader } from 'three';\n\nclass PointArrayLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n this.loader = new FileLoader();\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (text) =>\n {\n resource_container.set_resource(this.resource_id, this.url, this.parse_path(text));\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg);\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n\n parse_path(raw_data)\n {\n const string_array = raw_data.split('\\n');\n\n if (string_array[string_array.length - 1] === '')\n {\n string_array.pop();\n }\n\n const positions = [];\n\n for (let i = 0; i < string_array.length; i += 3)\n {\n const x = parseFloat(string_array[i + 0]);\n const y = parseFloat(string_array[i + 1]);\n const z = parseFloat(string_array[i + 2]);\n positions.push(new Vector3(x, y, z));\n }\n return positions;\n // let curve = new THREE.CatmullRomCurve3(positions);\n // return curve.getPoints(100);\n }\n}\n\nexport { PointArrayLoader };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { FileLoader as TFileLoader } from 'three';\r\n\r\nclass TextLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new TFileLoader();\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (gltf) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, gltf);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg);\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { TextLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { Texture } from 'three';\r\n\r\nclass TextureLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n }\r\n\r\n on_preloaded_finished(resource_container, response)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n response.blob().then((blob) =>\r\n {\r\n const texture = new Texture();\r\n\r\n const url = URL.createObjectURL(blob);\r\n\r\n const image = new Image();\r\n image.src = url;\r\n\r\n image.onload = () =>\r\n {\r\n texture.image = image;\r\n texture.needsUpdate = true;\r\n\r\n resource_container.set_resource(this.resource_id, this.url, texture);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n };\r\n\r\n image.onerror = () =>\r\n {\r\n console.error('Error loading texture. Maybe the resource is not an image?', this.url);\r\n };\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { TextureLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\n\nclass VideoLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n }\n\n on_preloaded_finished(resource_container, response)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n response.blob().then((blob) =>\n {\n resource_container.set_resource(this.resource_id, this.url, URL.createObjectURL(blob));\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { VideoLoader };\n","import { ResourceContainer } from '../ResourceContainer';\r\n\r\nclass ResourceBatch\r\n{\r\n constructor(batch_name)\r\n {\r\n this.resource_loaders = [];\r\n this.batch_name = batch_name || 'unnamed batch';\r\n }\r\n\r\n add_loader(loader)\r\n {\r\n this.resource_loaders.push(loader);\r\n }\r\n\r\n load(resource_container)\r\n {\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n this.resource_loaders[i].load(resource_container || ResourceContainer);\r\n }\r\n }\r\n\r\n get loading_finished()\r\n {\r\n let finished = true;\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n finished = finished && this.resource_loaders[i].has_finished;\r\n }\r\n return finished;\r\n }\r\n\r\n get has_errors()\r\n {\r\n let has_error = false;\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n has_error = has_error || this.resource_loaders[i].has_error;\r\n }\r\n return has_error;\r\n }\r\n\r\n print_errors()\r\n {\r\n console.error('Batch <' + this.batch_name + '> could not load successfully');\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n if (this.resource_loaders[i].has_error)\r\n {\r\n this.resource_loaders[i].print_error();\r\n }\r\n }\r\n }\r\n\r\n get_progress()\r\n {\r\n return this.get_loaded_bytes() / this.get_total_bytes();\r\n }\r\n\r\n get_loaded_bytes()\r\n {\r\n let loaded_bytes = 1;\r\n\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n loaded_bytes += this.resource_loaders[i].loaded_bytes;\r\n }\r\n\r\n return loaded_bytes;\r\n }\r\n\r\n get_total_bytes()\r\n {\r\n let total_bytes = 1;\r\n\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n total_bytes += this.resource_loaders[i].total_bytes;\r\n }\r\n\r\n return total_bytes;\r\n }\r\n}\r\n\r\nexport { ResourceBatch };\r\n"],"names":["BaseApplication","on_post_start","on_enter","on_exit","before_update","update","fixed_update","on_post_render","on_pre_render","on_frame_end","BlitMaterial","ShaderMaterial","constructor","frag_shader","vert_shader","defines","super","uniforms","_MainTex","value","_Resolution","Vector2","_TargetResolution","vertexShader","fragmentShader","depthWrite","blending","NoBlending","depthTest","depthFunc","AlwaysDepth","AddMaterial","nMips","this","_SecondTex","undefined","set_add_texture","tex","BaseShaderMaterial","vert","frag","basic_vert","basic_frag","_Color","Color","UnrealBloomComposeMaterial","NUM_MIPS","_BlurredTex","_BloomStrength","blurTexture1","blurTexture2","blurTexture3","blurTexture4","blurTexture5","bloomStrength","bloomFactors","bloomRadius","bloomTintColors","set_RT_0","rt","set_RT_1","set_RT_2","set_RT_3","set_RT_4","set_bloom_strength","set_bloom_radius","set_tint_color_0","col_string","set","set_tint_color_1","set_tint_color_2","set_tint_color_3","set_tint_color_4","BaseRender","render","context","renderer","resize","dispose","browser","init","browser_name","agent","window","navigator","userAgent","toLowerCase","has_web_xr_support","is_vr","xr","isSessionSupported","indexOf","opr","chrome","version","get_version","name","is_safari","is_chrome","is_edge","is_edge_chromium","has_webm","is_firefox","has_hvec","preferred_video_extension","ua","tem","M","match","test","exec","slice","join","replace","appName","appVersion","splice","Number","split","Validation","is_int","n","is_float","is_number","is_json","str","JSON","parse","e","AbstractLoader","resource_id","url","size","loaded_bytes","total_bytes","has_finished","has_error","error_message","__update_downloaded_bytes","loaded","total","console","warn","__loading_ended","__set_error","message","print_error","error","load","resource_container","resources_by_url","cache","Browser","fetch","method","mode","credentials","redirect","then","on_progress","bind","catch","__on_error","set_resource","response","response_clone","clone","reader","body","getReader","contentLength","headers","get","receivedLength","done","read","length","on_preloaded_finished","data","AudioClip","buffer","loop","volume","positional","audio","audio_listener","TPositionalAudio","TAudio","setBuffer","setLoop","gain","setVolume","play","pause","stop","is_playing","isPlaying","AudioLoader","instantiate_audio","AudioContext","getContext","createBuffer","r","blob","arrayBuffer","array_buffer","decodeAudioData","audio_buffer","resources","resource","Object","keys","includes","get_resource","AsyncAbstractLoader","assets","worker","ResourceContainer","bound_on_message","on_message","__setup_worker","assets_loaders","__setup_loaders","postMessage","type","loader_name","is_loaded","i","asset_loader","get_progress","__get_loaded_bytes","__get_total_bytes","get_assets_names","names","asset","push","create_worker","Worker","URL","addEventListener","__on_assets_loaded","removeEventListener","original_url","AsyncAudiosLoader","scene_name","loaders","asset_data","GLTFDRACOLoader","loader","GLTFLoader","setDRACOLoader","gltf","xhr","msg","TGLTFLoader","AsyncObjectsLoader","draco","draco_loader","AsyncTextureLoader","flipY","premultiplyAlpha","colorSpaceConversion","load_with_old_method","load_with_new_method","texture","Texture","image","Image","src","onload","colorSpace","SRGBColorSpace","NoColorSpace","needsUpdate","onerror","fetchOptions","res","createImageBitmap","imageOrientation","imageBitmap","BasisLoader","basis","CubemapLoader","extension","CubeTextureLoader","setPath","urls","RGBETextureLoader","RGBELoader","hdr","AsyncTexturesLoader","kind","CompilatorManager","compilators","first_update","index","is_finished","finished","start","LoadingState","scene","SceneCompilator","TexturesCompilator","AudiosCompilator","callback_called","set_assets","scene_objects","scene_textures","scene_sounds","loading_progress","progress","setup_loader","assets_worker","object_loader","textures_loader","audios_loader","compilator_manager","is_compiled","HighQualityLoadingState","on_high_quality_assets_ready","RegularLoadingState","on_assets_ready_called","on_assets_ready","on_assets_compiled","AbstractScene","Scene","is_high_loaded","loading_states","regular","high","current_loading_state","set_loading_state","get_objects","objects","traverse","child","geometry","dispose_cpu","attributes","position","array","Float32Array","normal","uv","material","map","mipmaps","Uint8Array","set_high_assets","state","update_loading_state","OMath","linear_map","from_range_start_value","from_range_end_value","to_range_start_value","to_range_end_value","between","min","max","mod","number","divisor","rgb_to_hex","rgb","Math","round","toString","g","b","project_points_on_plane","points","plane","projected_point","points_on_plane","projectPoint","matrix4_lerp","from","to","target","t","elements","lerp","equals","x1","x2","abs","x","y","clamp","euclideanModulo","m","pingpong","degToRad","degrees","PI","radToDeg","radians","deg_to_rad","rad_to_deg","perspective_divide","v","w","z","points_average","center","add","multiplyScalar","get_random_color","arr","col","floor","random","saturate","ActionSequencer","previous_elapsed_time","elapsed_time","playback_speed","__get_playback_speed","playing","action_events","initial_context","stringify","tmp_t","channels","channel_names","duration","reset","skip","get_duration","__play_clips","delta_time","set_progress","time","set_normalized_progress","add_action_event","trigger_time","action","add_action_interpolator","interpolator","use_dynamic_from_value","keyframes","attribute_name","keyframe","get_current_target_value","__get_current_keyframe","evaluate","get_current_starting_value","get_current_progress","__linear_map_01","easing_function","__play_events","evaluate_keyframe","log","trigger","get_keyframes","channel_name","is_channel_redefined","initial","current","Infinity","distance","transitions_velocity","URLSearchParams","location","search","EasingFunctions","linear","triangular","ease_in_sine","cos","ease_out_sine","sin","ease_in_out_sine","ease_in_cubic","ease_out_cubic","pow","ease_in_out_cubic","ease_in_quad","ease_out_quad","ease_in_out_quad","ease_in_quart","ease_out_quart","ease_in_out_quart","ease_in_quint","ease_out_quint","ease_in_out_quint","ease_in_expo","ease_out_expo","ease_in_out_expo","ease_in_circ","sqrt","ease_out_circ","ease_in_out_circ","ease_in_back","ease_out_back","ease_in_out_back","ease_in_elastic","c4","ease_out_elastic","ease_in_out_elastic","ease_in_bounce","ease_out_bounce","n1","d1","ease_in_out_bounce","heartbeat","sign","ActionInterpolator","NumberInterpolator","ActionEvent","args","ViewApi","application","DrawIOAnimationSheet","xml_document","animation_nodes","DOMParser","parseFromString","querySelectorAll","animation_tracks","triggers","node","parent_node","parentElement","getAttribute","get_node_x_position","parseFloat","split_data","trigger_name","trigger_method","at_time","value_data","to_value","from_time","to_time","sort","a","x_pos","ActionSequencerBuilder","default_state_data","from_animation_sheet","animation_data","current_context","tracks","initial_tracks","state_to_tracks","get_longest_time","find","element","sequencer","action_event","longest_time","from_draw_io","xml","transition_data","track_time","TransitionTable","transitions","from_state_name","to_state_name","add_transitions","set_transitions","set_default_state_data","__delta_buffer","___time","Clock","__delta_time","__smooth_delta_time","__elapsed_time","__allocated_time","__frame_interpolation_t","fixed_delta_time","smooth_delta_time","shader_time","frame_interpolation","fdt","dt","sdt","__set_frame_interpolation","__update","getDelta","getElapsedTime","shift","__calculate_smooth_delta_time","ViewState","before_enter","before_exit","update_enter_transition","global_view_data","transition_progress","action_sequencer","update_exit_transition","ViewStateTransitionHandler","transition_table","last_state","current_state","current_state_data","transitioning","go_to_state","__exit_last_state","__update_transitions","set_state","assign","Time","transition_manager","transition_handler","get_current_state","set_transitions_velocity","view_manager","views","browser_title_suffix","__set_views_opacities","go_to_view","view_name","change_url","__change_browser_url","__change_browser_title","TransitionManager","go_to_scene","next_view","transition_view","set_next_view","register_view","view","has_view","set_view","set_browser_title_suffix","title_suffix","get_current_view","get_view_by_name","get_by_url","history","pushState","title","__capitalize","document","set_opacity","string","aux_string","toUpperCase","__snake_to_whitespace","group","ApplicationView","container","current_opacity","ViewManager","classList","remove","opacity","style","camera_manager","_current","_spectator","camera","spectator","CanvasDrawer","uses_dynamic_font","__textHeight","canvas","createElement","ctx","getFontHeight","fontStyle","getElementsByTagName","dummy","dummyText","createTextNode","appendChild","setAttribute","offsetHeight","removeChild","get_text_size","text","font","ceil","measureText","width","draw_canvas","ctxOptions","font_color","__draw","draw_on_texture","canvas_texture","CanvasTexture","UVMapping","ClampToEdgeWrapping","NearestFilter","generateMipMaps","roundRect","height","radius","fill","stroke","tl","tr","br","bl","defaultRadius","side","beginPath","moveTo","lineTo","quadraticCurveTo","closePath","SimpleTextDrawer","text_margin","text_size","clearRect","globalAlpha","fillStyle","fillRect","textBaseline","textAlign","fillText","capabilities","max_anisotropy","vertex_texture_sampler_available","fp_textures_available","AxisHelper","Object3D","scale","blue_points","Vector3","blue_axis_mat","LineBasicMaterial","color","blue_axis_geo","BufferGeometry","setFromPoints","blue_axis_line","Line","renderOrder","green_points","green_axis_mat","green_axis_geo","green_axis_line","red_points","red_axis_mat","red_axis_geo","red_axis_line","scene_manager","add_scene","children","Cube","Mesh","segments","BoxGeometry","MeshBasicMaterial","Sphere","SphereGeometry","Arrow","dir","cylinder_height","cylinder_geo","CylinderGeometry","translate","cone_geometry","ConeGeometry","cone_height","buffer_geometry","BufferGeometryUtils","mergeGeometries","rotateX","quaternion","setFromUnitVectors","_dir","oscreen","render_width","render_height","width_height","dpr","pixel_size","update_position","size_changed","update_size","apply_pixel_density_v2","vector2","apply_pixel_density","get_pixel_size","aspect_ratio","portrait","ScreenSpaceTextureMaterial","h","_ScreenSpacePosition","_ScreenSize","_TextureSize","set_position","set_texture","set_screen_size","PerspectiveCamera","TPerspectiveCamera","fov","aspect","near","far","clear_color","clear_alpha","copy","debug","Vector3_one","Vector3_zero","canvas_renderer","display_texture_meshes","OScreen","draw_arrow","origin","arrow","normalize","draw_axis","axis","set_debug_RT","RT","rt_debug","draw_rectangle","position_2d","clear","draw_line_2D","strokeStyle","draw_line","line","frustumCulled","draw_cube","pos","cube","draw_oriented_cube","depth","distanceTo","sub","forward_dir","draw_plane","PlaneGeometry","Vector4","basic_color_vert","basic_color_frag","transparent","draw_empty_cube","box","Box3","setFromCenterAndSize","helper","Box3Helper","draw_sphere","sphere","draw_point_array","input_points","open","catmull","CatmullRomCurve3","updateArcLengths","getSpacedPoints","draw_sphere_helper","sphere_mesh","SceneManager","draw_math_sphere","sphere1","draw_bounding_box","bb","draw_curve","curve","options","offset","draw_texture","mesh","graphics","CameraManager","Blitter","_blit_scene","_blit_material","_blit_quad","_blit_camera","OrthographicCamera","blit","dst","src_texture","isWebGLRenderTarget","src_width","src_height","getSize","__render","material_pass","mat","blit_with_material","blit_clear_with_material","dst_RT","current_rt","getRenderTarget","setRenderTarget","ClearDepthNormalMaterial","clear_depth","clear_normal","_DepthNormal","DepthNormalMaterial","_FarPlane","far_plane","DepthAndNormalsRenderer","WebGLRenderTarget","clear_depth_normal_mat","depth_normal_material","__resize_RT_if_necessary","setSize","render_target","core_attributes","context_attributes","threejs_attributes","_renderer","blitter","no_render","current_render_mode","generateDepthNormalTexture","depth_and_normals_renderer","is_webgl2","canvas_context","force_webgl2","xr_enabled","alpha","antialias","desynchronized","failIfMajorPerformanceCaveat","powerPreference","premultipliedAlpha","preserveDrawingBuffer","stencil","logarithmicDepthBuffer","WebGLRenderer","enabled","autoClear","setPixelRatio","extensions","domElement","Capabilities","getMaxAnisotropy","maxVertexTextures","is_floating_point_texture_available","dom_element","depth_normals_RT","new_state","__update_current_camera","updateProjectionMatrix","updateMatrix","updateMatrixWorld","override_mat","__apply_override_material","compile","compile_async","target_scene","promise","compileAsync","render_scene","overrideMaterial","readback_RT","readRenderTargetPixels","clear_stencil","setClearColor","on_resize","entries","entry","contentRect","setViewport","src_RT","take_screenshot","blob_callback","old_width","old_height","new_width","new_height","tile_width","tile_height","divisions_x","parseInt","divisions_y","old_dpr","getPixelRatio","ctx_2D","setViewOffset","drawImage","toBlob","clearViewOffset","download_screenshot","link","download","href","createObjectURL","click","onclick","requestAnimationFrame","revokeObjectURL","removeAttribute","minFilter","magFilter","format","RGBAFormat","LinearSRGBColorSpace","FloatType","stencilBuffer","depthBuffer","output","Idle","is_animating","Animating","easing_function_t","animator","set_property_value","set_current_state","finished_callback","CSSAnimator","css_property","value_prefix","value_suffix","animate","os","operating_systems","ANDROID","IOS","LINUX","MAC","WINDOWS","is_mobile","is_ipad","maxTouchPoints","is_ios","is_android","get_os","is_linux","is_mac","is_windows","platform","reflection_plane_context","target_geometry","target_position","set_target_geometry","GeometryBatch","batch_width","data_textures","object_names","zero_offset","write_offset","uniform_dirty_count","tmp_uploaded_data_count","add_global_uniform","set_global_uniform","add_object_uniform_v3","uniform_name","default_value_v3","src_tex","__create_rgb_texture","dst_tex","one_pixel_tex","new_data_tex","__add_data_texture","__flood_data_texture_rgb","add_object_uniform_v4","default_value_v4","__create_rgba_texture","__flood_data_texture_rgba","add_object_uniform_v4_float","__create_rgba_float_texture","set_object_uniform_v3","object_name","vector3","use_r","use_g","use_b","obj_index","__get_object_index","data_texture","__get_data_texture","__set_pixel_rgb","one_pixel","last_accessed_index","dirty_count","set_object_uniform_v4","vector4","use_a","__set_pixel_rgba","upload_texture_data","upload_budget","__partial_texture_data_upload","__full_texture_data_upload","get_uniform_dirty_count","texture_data","copyTextureToTexture","get_mesh","v3","v4","DataTexture","dst_texture","one_pixel_text","geometry_batcher","batches","batch","buffer_geometries","attr_accessor_uvs","texture_width","ceilPowerOfTwo","__init_uv_array","uv_index","vertex_count","count","buffer_attribute","BufferAttribute","uvs","ui","input","ui_elements","_tmp_normalized_pos","ss_scene","matrixWorldAutoUpdate","ws_scene","ss_camera","delete_element","elem","add_screen_space_element","set_screen_space_coordinate_system","add_world_space_element","set_world_space_coordinate_system","NDC","update_state","Graphics","current_clicked_element","PerspectiveFrustumPointFitter","fit_points","camera_quaternion","vertical_fov","v_fov","h_fov","atan","tan","up_plane_normal","get_up_plane_normal","down_plane_normal","get_down_plane_normal","left_plane_normal","get_left_plane_normal","right_plane_normal","get_right_plane_normal","camera_forward_dir","applyQuaternion","sphere_center","pull_back_distance","get_distance_to_fit_rect","far_pos","up_plane","Plane","setFromNormalAndCoplanarPoint","down_plane","left_plane","right_plane","apply_center_correction_to_pos","closest_distance","inverse_dir","Line3","up_line_intersection","down_line_intersection","left_line_intersection","right_line_intersection","intersectLine","new_up_distance","new_down_distance","new_left_distance","new_right_distance","vertical_min","horizontal_min","forward_correction","target_pos","vertical_offset","get_vertical_correction","horizontal_offset","get_horizontal_correction","closest_distance_to_up_plane","closest_distance_to_down_plane","up_dir","down_line","up_line","down_dist","up_dist","correction","closest_distance_to_right_plane","closest_distance_to_left_plane","right_dir","left_line","right_line","left_dist","right_dist","Quaternion","setFromAxisAngle","distV","distH","OrthographicFrustumPointFitter","inverse_camera_quat","inverse","inverted_points","getCenter","distance_to_center","camera_utilities","tmp_mat","Matrix4","ray","Ray","tmp_size","tmp_unproj","get_up_dir","tmp_vec","get_forward_dir","get_right_dir","unproject_mouse_position","get_plane_intersection","plane_position","plane_normal","isPerspectiveCamera","unproject","intersectPlane","fit_points_on_camera","zoom_scale","world_space_center","camera_forward","projected_points_center","up","right","cross","inverse_mat","getInverse","applyMatrix4","projected_center","zoom","get_zoom_to_fit_rect","get_zoom_to_fit_box","isOrthographicCamera","obj_x","obj_y","object_aspect","get_html_screen_pos","object","getWorldPosition","project","world_pos_to_screen","update_projection","left","top","bottom","fit_bounding_box_points","p1","p2","p3","p4","p5","p6","p7","p8","camera_backward_dir","fitter","camera_pos","reference_position_plane","camera_ray","reference_position","camera_position","result","reference_rotation","reference_zoom","forward","initializer","CameraUtilities","GeometryBatcher","OS","ReflectionPlaneContext","UI","Debug","render_loop","KeyboardInput","ctrlz_pressed","ctrlz_fired","keys_keys","on_key_down","on_key_up","keyCode","ctrlKey","code","press_key","release_key","pressed","released","key_name","key","fired","down","release_keys","is_key_pressed","is_key_down","is_key_released","register_key","unregister_key","TOrthographicCamera","NormalMaterial","DebugNormalsRender","DisplayNormalTextureMaterial","depth_normals_vert","_InverseProjMatrix","SSAOComposeMaterial","_AO","SSAOMaterial","_ProjectionMatrix","_Bias","_Radius","_SampleKernel","__get_sample_kernel","_RandomRotation","__get_rotation_kernel","sample_kernel","rotation_kernel","rotation_texture","wrapS","RepeatWrapping","wrapT","BoxBlurMaterial","_SampleDir","Blurrer","RT1","RT2","box_blur_mat","blur","NormalAORender","use_ssaa","ssao_mat","ssao_compose_mat","debug_normals","ssaa","main_RT","SSAO_RT","blurrer","__check_RT_size","__update_uniforms","projectionMatrix","NormalRender","GaussianBlurMaterial","kernel_radius","KERNEL_RADIUS","SIGMA","texSize","direction","set_size","set_direction","LuminosityHighPassMaterial","luminosityThreshold","smoothWidth","defaultColor","defaultOpacity","GaussianBlurrer","current_width","current_height","separableBlurMaterials","renderTargetsHorizontal","renderTargetsVertical","kernelSizeArray","rt_pars","LinearFilter","renderTargetBright","generateMipmaps","init_materials","init_RT","luminosity_high_pass_mat","use_luminosity_high_pass","resize_RT","inputRenderTarget","get_blurred_texture","get_blurred_RT","dispose_RT","hor","ver","texture_height","dispose_materials","UnrealBloomRender","bloom_compose_mat","blur_RT","add_mat","val","VRRender","render_spectator_camera","spectator_camera","isPresenting","xrCam","getCamera","currentRenderTarget","view_component_manager","components","enabled_components","Set","__set_components_opacities","component","register_component","enable_component","disable_component","delete","get_component_by_name","component_name","RenderLoop","target_application","is_running","frames_passed","time_accumulator","ViewComponentManager","setAnimationLoop","screen","ViewComponent","hidden","toggle_hidden","HorizontalPlane","VerticalPlane","ArrayUtilities","merge_from_to","source","apply","expand_vec3_array","items_left_count","remove_elem","get_closest_point","closest_point","object_values_to_array","obj","ids","FrustumPointFitter","get_hozirontal_correction","closest_up_point","closest_down_point","closest_right_point","closest_left_point","GeometryUtilities","convert_to_non_indexed_geometry","geometry_buffer","indices","positions","vertices","getX","getY","getZ","add_barycentric_attribute","non_indexed_geometry_buffer","bar_coordinates","HTMLUtilities","load_images","images","dataset","image_objects","image_object","load_videos","videos","video","load_iframes","iframes","iframe","load_elements","selector","ImageUtilities","get_image_data","getImageData","get_pixel","imagedata","mesh_sampler","sample","sample_count","face_areas","min_area","normals","tangents","faces","index_0","index_1","index_2","v1","v2","face","c","n2","n3","tangent","uv_a","uv_b","uv_c","area","get_face_area","normalized_faces_array","get_uniform_face_distribution","selected_faces","select_random_faces","sample_data_from_faces","sampled_points","sampled_normals","sampled_tangents","sampled_uvs","w1","w2","sample_point_in_face","amount","selected_face","minimum_area","extended_triangle_indices","repetitions_needed","j","vec1","vec2","w3","model_utilities","result_callback","fromGeometry","get_geometries","geometries","assign_material","clone_animated_gltf","animations","skinnedMeshes","isSkinnedMesh","cloneBones","cloneSkinnedMeshes","isBone","skeleton","cloneSkinnedMesh","orderedCloneBones","bones","cloneBone","Skeleton","boneInverses","matrixWorld","set_shadow_config","cast","receive","castShadow","receiveShadow","__find_object","get_object","get_object_by_type","object_type","ObjectUtilities","is_object","item","Array","isArray","merge_deep","sources","xml_to_json","nodeType","attribute","nodeName","nodeValue","hasChildNodes","childNodes","old","StringUtilities","hexValues","hex","capitalize","words","substr","capitalize_first_letter","charAt","snake_to_camelcase","TimeUtilities","time_str_to_ms","time_str","hours","minutes","seconds","Grid","derivatives","plane_geometry","rotation","_Thickness","_Length","_ElapsedTime","setup","next_position","previous_position","orientation","coverage","accumulated_length","next_point","__get_next_position","previous_point","__get_previous_position","vertexList","nextPositionList","previousPositionList","orientationList","coverageList","setIndex","_length","thickness","total_length","parent","copy_color","WorldImage","pivot","_ScreenAligned","_Scale","_Opacity","DoubleSide","current_scale","computeBoundingBox","tmp_bb_size","boundingBox","update_texture","img","screen_aligned","boolean","Text2D","is_static","simple_text_drawer","draw_settings","LinearMipMapLinearFilter","UIElementMaterial","intensity","_PixelOffset","_NDC","_PivotPoint","_DepthOffset","ScreenSpacePosition","get_pos_NDC","WorldSpacePosition","tmp_vec3","tmp_vec2","UIElementState","ui_element","normalized_mouse_position","OnIdle","is_mouse_over","_on_enter_state","OnMouseEnter","on_mouse_enter","_on_hover_state","_on_exit_state","OnMouseExit","on_mouse_exit","_on_idle_state","OnMouseHover","__trigger_on_hover","on_mouse_hover","UIElement","is_clickable","position_strategy","_position","on_hover","mouse_pos_tmp","cached_NDC_position","screen_pos_tmp","texture_size","matrixAutoUpdate","pixel_offset","set_render_order","pivot_point","set_pixel_offset","use_depth","depth_offset","clear_state","visible","get_size","normalized_mouse_pos","to_screen_position","rect","Box2","containsPoint","projected_pos","get_screen_space_position","set_screen_space_position","screen_pos","UpdatableMaterialMesh","self","onBeforeRender","TextGlyph","plane_bounds","atlas_bounds","SDFText","glyph_layout","glyphs","glyph_is_dirty","matrix_is_dirty","color_is_dirty","matrix","__opacity","__text","__generate_glyphs","update_matrix","compose","clear_glyph_dirty","clear_color_dirty","set_rotation","tilt","new_orientation","new_tilt","multiply","set_color","set_pivot","update_glyphs","op","cursor","unicode","charCodeAt","glyph","planeBounds","text_glyph","atlasBounds","advance","box2","first_glyph","union","box2_size","SDFTextMaterial","_Texture","_Boldness","_AtlasSize","set_atlas_size","set_boldness","SDFTextBatch","font_layout","atlas_texture","instanced_geometry","InstancedBufferGeometry","instanceCount","Float32BufferAttribute","transformsCol0","InstancedBufferAttribute","max_allocations","transformsCol1","transformsCol2","transformsCol3","glyph_bounds","usage","DynamicDrawUsage","text_elements","atlas","add_text","text_str","remove_text","text_elem","force_update","glyph_bounds_atr","plane_bounds_atr","color_atr","matrix_needs_update","glyph_needs_update","color_needs_update","glyph_count","glyph_i","buffer_i","setXYZW","VectorInterpolator","tmp","DualFilteringBlurMaterial","upsample","AlphaFilterMaterial","use_alpha_mask","_Offset","DualFilteringBlurrer","RT0","RT3","RT4","upscale_blur_mat","downscale_blur_mat","alpha_filter_mat","check_RT_resize","MedianFilterMaterial","kernel3x3","_SourceTex","_SourceTexSize","isVideoTexture","videoWidth","videoHeight","isTexture","MedianFilter","median_filter_mat","filter","tex_size","ParticleAttribute","attr_name","update_material","write","init_from_geometry","init_from_attribute","particle_attribute","build_RT","particle_count","resolution","calculate_resolution","colorScape","HalfFloatType","swap_RT","attribute_writter_scene","store_geometry_attribute_in_RT","storage_material","deleteAttribute","get_texture","GPUParticleSystem","build_point_mesh","attribute_writter_mesh","build_attribute_writter_mesh","add_texture_attribute","add_update_attribute_array","item_size","add_attribute_array","instance_count","geo","instanced_geo","build_uv_storage_attribute","Points","ParticleStorageMaterial","ParticlePositionAttribute","store_geometry","pos_attr","store_positions","CustomDataTexture","multiplier","set_rgba","set_rgb","set_r","set_g","set_b","set_a","RGBDataTexture","RGBADataTexture","RGBFloatDataTexture","RGBAFloatDataTexture","BatchedMesh","id_table","max_texture_width","batched_count","batch_height","attach_rgb_texture","attach_rgba_texture","attach_rgb_float_texture","attach_rgba_float_texture","get_mesh_index","set_rgb_value","mesh_name","set_rgba_value","MeshBatcher","meshes","attr_mesh_id","create_batched_mesh","DAELoader","ColladaLoader","FileLoader","TFileLoader","file","FontLoader","TFontLoader","HDRCubeTextureLoader","THDRCubeTextureLoader","JSONLoader","json","OBJLoader","TOBJLoader","PointArrayLoader","parse_path","raw_data","string_array","pop","TextLoader","TextureLoader","VideoLoader","ResourceBatch","batch_name","resource_loaders","add_loader","loading_finished","has_errors","print_errors","get_loaded_bytes","get_total_bytes"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/BaseApplication.js","../src/materials/BlitMaterial.js","../src/materials/AddMaterial.js","../src/materials/BaseShaderMaterial.js","../src/materials/UnrealBloomComposeMaterial.js","../src/render_mode/BaseRender.js","../src/resource_loader/AbstractLoader.js","../src/components/AudioClip.js","../src/resource_loader/AudioLoader.js","../src/ResourceContainer.js","../src/loaders/AsyncAbstractLoader.js","../src/loaders/AsyncAudiosLoader.js","../src/resource_loader/GLTFDRACOLoader.js","../src/resource_loader/GLTFLoader.js","../src/loaders/AsyncObjectsLoader.js","../src/Browser.js","../src/resource_loader/AsyncTextureLoader.js","../src/resource_loader/BasisLoader.js","../src/resource_loader/CubemapLoader.js","../src/resource_loader/RGBETextureLoader.js","../src/loaders/AsyncTexturesLoader.js","../src/scenes/loading_states/CompilatorManager.js","../src/scenes/loading_states/LoadingState.js","../src/scenes/loading_states/HighQualityLoadingState.js","../src/scenes/loading_states/RegularLoadingState.js","../src/scenes/AbstractScene.js","../src/utilities/OMath.js","../src/action_sequencer/ActionSequencer.js","../src/utilities/EasingFunctions.js","../src/action_sequencer/ActionInterpolator.js","../src/action_sequencer/NumberInterpolator.js","../src/action_sequencer/ActionEvent.js","../src/view_components/transition/DrawIOAnimationSheet.js","../src/view_components/transition/ActionSequencerBuilder.js","../src/view_components/transition/TransitionTable.js","../src/Time.js","../src/view_components/ViewState.js","../src/view_components/transition/ViewStateTransitionHandler.js","../src/view_components/TransitionManager.js","../src/view_components/ViewManager.js","../src/view_components/ApplicationView.js","../src/CameraManager.js","../src/canvas_drawer/CanvasDrawer.js","../src/canvas_drawer/SimpleTextDrawer.js","../src/Capabilities.js","../src/components/AxisHelper.js","../src/SceneManager.js","../src/primitives/Cube.js","../src/primitives/Sphere.js","../src/primitives/Arrow.js","../src/OScreen.js","../src/materials/ScreenSpaceTextureMaterial.js","../src/PerspectiveCamera.js","../src/Debug.js","../src/render_utilities/Blitter.js","../src/materials/ClearDepthNormalMaterial.js","../src/materials/DepthNormalMaterial.js","../src/render_utilities/DepthAndNormalsRenderer.js","../src/Graphics.js","../src/html_utilities/css_animator_states/Idle.js","../src/html_utilities/css_animator_states/Animating.js","../src/html_utilities/CSSAnimator.js","../src/OS.js","../src/ReflectionPlaneContext.js","../src/static_batcher/GeometryBatch.js","../src/static_batcher/GeometryBatcher.js","../src/UI.js","../src/utilities/PerspectiveFrustumPointFitter.js","../src/utilities/OrthographicFrustumPointFitter.js","../src/utilities/CameraUtilities.js","../src/Initializer.js","../src/KeyboardInput.js","../src/OrthographicCamera.js","../src/materials/NormalMaterial.js","../src/render_mode/DebugNormalsRender.js","../src/materials/DisplayNormalTextureMaterial.js","../src/materials/SSAOComposeMaterial.js","../src/materials/SSAOMaterial.js","../src/materials/BoxBlurMaterial.js","../src/render_utilities/Blurrer.js","../src/render_mode/NormalAORender.js","../src/render_mode/NormalRender.js","../src/materials/GaussianBlurMaterial.js","../src/materials/LuminosityHighPassMaterial.js","../src/render_utilities/GaussianBlurrer.js","../src/render_mode/UnrealBloomRender.js","../src/render_mode/VRRender.js","../src/view_components/ViewComponentManager.js","../src/RenderLoop.js","../src/Screen.js","../src/view_components/ViewComponent.js","../src/primitives/HorizontalPlane.js","../src/primitives/VerticalPlane.js","../src/utilities/ArrayUtilities.js","../src/utilities/FrustumPointFitter.js","../src/utilities/GeometryUtilities.js","../src/utilities/HTMLUtilities.js","../src/utilities/ImageUtilities.js","../src/utilities/MeshSampler.js","../src/utilities/ModelUtilities.js","../src/utilities/ObjectUtilities.js","../src/utilities/StringUtilities.js","../src/utilities/TimeUtilities.js","../src/utilities/Validation.js","../src/components/Grid.js","../src/components/Line.js","../src/components/WorldImage.js","../src/components/Text2D.js","../src/materials/UIElementMaterial.js","../src/ui/ui_element_position/ScreenSpacePosition.js","../src/ui/ui_element_position/WorldSpacePosition.js","../src/ui/ui_element_state/UIElementState.js","../src/ui/ui_element_state/OnIdle.js","../src/ui/ui_element_state/OnMouseEnter.js","../src/ui/ui_element_state/OnMouseExit.js","../src/ui/ui_element_state/OnMouseHover.js","../src/components/UIElement.js","../src/components/UpdatableMaterialMesh.js","../src/components/sdf_text/TextGlyph.js","../src/components/sdf_text/SDFText.js","../src/materials/SDFTextMaterial.js","../src/components/sdf_text/SDFTextBatch.js","../src/action_sequencer/VectorInterpolator.js","../src/materials/DualFilteringBlurMaterial.js","../src/materials/AlphaFilterMaterial.js","../src/render_utilities/DualFilteringBlurrer.js","../src/materials/MedianFilterMaterial.js","../src/render_utilities/MedianFilter.js","../src/gpu_particles/ParticleAttribute.js","../src/gpu_particles/GPUParticleSystem.js","../src/materials/gpu_particles/ParticleStorageMaterial.js","../src/gpu_particles/ParticlePositionAttribute.js","../src/data_textures/CustomDataTexture.js","../src/data_textures/RGBDataTexture.js","../src/data_textures/RGBADataTexture.js","../src/data_textures/RGBFloatDataTexture.js","../src/data_textures/RGBAFloatDataTexture.js","../src/static_batcher/BatchedMesh.js","../src/static_batcher/MeshBatcher.js","../src/resource_loader/DAELoader.js","../src/resource_loader/FileLoader.js","../src/resource_loader/FontLoader.js","../src/resource_loader/HDRCubeTextureLoader.js","../src/resource_loader/JSONLoader.js","../src/resource_loader/OBJLoader.js","../src/resource_loader/PointArrayLoader.js","../src/resource_loader/TextLoader.js","../src/resource_loader/TextureLoader.js","../src/resource_loader/VideoLoader.js","../src/resource_loader/ResourceBatch.js"],"sourcesContent":["class BaseApplication\n{\n on_post_start()\n {}\n\n on_enter()\n {}\n\n on_exit()\n {}\n\n before_update()\n {}\n\n update()\n {}\n\n fixed_update()\n {}\n\n on_post_render()\n {}\n\n on_pre_render()\n {}\n\n on_frame_end()\n {}\n}\n\nexport { BaseApplication };\n","import vert from '../shaders/copy/copy.vert';\nimport frag from '../shaders/copy/copy.frag';\n\nimport { ShaderMaterial } from 'three';\nimport { Vector2 } from 'three';\nimport { NoBlending } from 'three';\nimport { AlwaysDepth } from 'three';\n\nclass BlitMaterial extends ShaderMaterial\n{\n constructor(frag_shader, vert_shader, defines)\n {\n super({\n uniforms: {\n _MainTex: { value: null },\n _Resolution: { value: new Vector2(0, 0) },\n _TargetResolution: { value: new Vector2(0, 0) }\n },\n defines: defines || {},\n vertexShader: vert_shader || vert,\n fragmentShader: frag_shader || frag,\n depthWrite: false,\n blending: NoBlending,\n depthTest: false,\n depthFunc: AlwaysDepth\n });\n }\n}\n\nexport { BlitMaterial };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/add/add.frag';\n\nclass AddMaterial extends BlitMaterial\n{\n constructor(nMips)\n {\n super(frag);\n\n this.uniforms._SecondTex = { value: undefined };\n }\n\n set_add_texture(tex)\n {\n this.uniforms._SecondTex.value = tex;\n }\n}\n\nexport { AddMaterial };\n","import basic_vert from '../shaders/basic_color/basic_color.vert';\nimport basic_frag from '../shaders/basic_color/basic_color.frag';\n\nimport { ShaderMaterial } from 'three';\nimport { Color } from 'three';\n\nclass BaseShaderMaterial extends ShaderMaterial\n{\n constructor(vert, frag, uniforms)\n {\n super({\n vertexShader: vert || basic_vert,\n fragmentShader: frag || basic_frag,\n uniforms: uniforms || {\n _Color: { value: new Color('#FF0000') }\n }\n });\n }\n}\n\nexport { BaseShaderMaterial };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/gaussian_blur/unreal_bloom_compose.frag';\n\nimport { Color } from 'three';\nclass UnrealBloomComposeMaterial extends BlitMaterial\n{\n constructor(nMips)\n {\n super(frag, undefined, {\n NUM_MIPS: nMips\n });\n this.uniforms._MainTex = { value: undefined };\n this.uniforms._BlurredTex = { value: undefined };\n this.uniforms._BloomStrength = { value: 1 };\n\n this.uniforms.blurTexture1 = { value: null };\n this.uniforms.blurTexture2 = { value: null };\n this.uniforms.blurTexture3 = { value: null };\n this.uniforms.blurTexture4 = { value: null };\n this.uniforms.blurTexture5 = { value: null };\n\n this.uniforms.bloomStrength = { value: 1.0 };\n this.uniforms.bloomFactors = { value: [1.0, 0.8, 0.6, 0.4, 0.2] };\n this.uniforms.bloomRadius = { value: 0.0 };\n\n const bloomTintColors = [\n new Color('#FFFFFF'),\n new Color('#FFFFFF'),\n new Color('#FFFFFF'),\n new Color('#FFFFFF'),\n new Color('#FFFFFF')\n ];\n\n this.uniforms.bloomTintColors = { value: bloomTintColors };\n }\n\n set_RT_0(rt)\n {\n this.uniforms.blurTexture1.value = rt;\n }\n\n set_RT_1(rt)\n {\n this.uniforms.blurTexture2.value = rt;\n }\n\n set_RT_2(rt)\n {\n this.uniforms.blurTexture3.value = rt;\n }\n\n set_RT_3(rt)\n {\n this.uniforms.blurTexture4.value = rt;\n }\n\n set_RT_4(rt)\n {\n this.uniforms.blurTexture5.value = rt;\n }\n\n set_bloom_strength(value)\n {\n this.uniforms.bloomStrength.value = value;\n }\n\n set_bloom_radius(value)\n {\n this.uniforms.bloomRadius.value = value;\n }\n\n set_tint_color_0(col_string)\n {\n this.uniforms.bloomTintColors.value[0].set(col_string);\n }\n\n set_tint_color_1(col_string)\n {\n this.uniforms.bloomTintColors.value[1].set(col_string);\n }\n\n set_tint_color_2(col_string)\n {\n this.uniforms.bloomTintColors.value[2].set(col_string);\n }\n\n set_tint_color_3(col_string)\n {\n this.uniforms.bloomTintColors.value[3].set(col_string);\n }\n\n set_tint_color_4(col_string)\n {\n this.uniforms.bloomTintColors.value[4].set(col_string);\n }\n}\n\nexport { UnrealBloomComposeMaterial };\n","class BaseRender\n{\n constructor()\n {\n\n }\n\n render()\n {\n\n }\n\n on_enter(context, renderer)\n {\n\n }\n\n on_exit(context, renderer)\n {\n\n }\n\n resize()\n {\n\n }\n\n dispose()\n {\n\n }\n}\n\nexport { BaseRender };\n","\r\nexport class AbstractLoader\r\n{\r\n constructor(resource_id, url, size = 1)\r\n {\r\n this.resource_id = resource_id;\r\n this.url = url;\r\n this.loaded_bytes = 0;\r\n this.total_bytes = size;\r\n\r\n this.has_finished = false;\r\n this.has_error = false;\r\n this.error_message = 'none';\r\n }\r\n\r\n __update_downloaded_bytes(loaded, total)\r\n {\r\n loaded = this.is_number(loaded) ? loaded : 1;\r\n total = this.is_number(total) ? total : 1;\r\n\r\n this.loaded_bytes = loaded;\r\n\r\n if (total > 0)\r\n {\r\n this.total_bytes = total;\r\n }\r\n\r\n if (this.loaded_bytes > this.total_bytes)\r\n {\r\n console.warn('Total bytes is smaller than loaded ones. Please set total bytes by hand to:', this.url);\r\n }\r\n }\r\n\r\n __loading_ended()\r\n {\r\n this.has_finished = true;\r\n }\r\n\r\n __set_error(message)\r\n {\r\n this.has_error = true;\r\n this.error_message = message;\r\n }\r\n\r\n print_error()\r\n {\r\n console.error('Error while loading ' + this.resource_id + '\\n\\t path: ' + this.url + '\\n\\t\\t' + this.error_message);\r\n }\r\n\r\n load(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n const cache = 'default';\r\n\r\n fetch(this.url, {\r\n method: 'GET', // *GET, POST, PUT, DELETE, etc.\r\n mode: 'cors', // no-cors, *cors, same-origin\r\n cache: cache, // *default, no-cache, reload, force-cache, only-if-cached\r\n credentials: 'same-origin', // include, *same-origin, omit\r\n redirect: 'follow' // manual, *follow, error\r\n })\r\n .then(this.on_progress.bind(this, resource_container))\r\n .catch(this.__on_error.bind(this));\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n\r\n async on_progress(resource_container, response)\r\n {\r\n const response_clone = response.clone();\r\n const reader = response.body.getReader();\r\n\r\n // Step 2: get total length\r\n const contentLength = +response.headers.get('Content-Length');\r\n\r\n // Step 3: read the data\r\n let receivedLength = 0; // received that many bytes at the moment\r\n\r\n while (true)\r\n {\r\n const { done, value } = await reader.read();\r\n\r\n if (done)\r\n {\r\n break;\r\n }\r\n\r\n receivedLength += value.length;\r\n\r\n this.__update_downloaded_bytes(receivedLength, contentLength);\r\n // console.log(`Received ${receivedLength} of ${contentLength}`);\r\n }\r\n\r\n if (response.ok)\r\n {\r\n this.on_preloaded_finished(resource_container, response_clone);\r\n }\r\n else\r\n {\r\n this.__set_error(`${response.status}: ${response.statusText}`);\r\n this.__loading_ended();\r\n }\r\n }\r\n\r\n on_preloaded_finished(resource_container, response)\r\n {\r\n }\r\n\r\n __on_error(data)\r\n {\r\n console.error(data);\r\n }\r\n\r\n is_int(n)\r\n {\r\n return Number(n) === n && n % 1 === 0;\r\n }\r\n\r\n is_float(n)\r\n {\r\n return Number(n) === n && n % 1 !== 0;\r\n }\r\n\r\n is_number(n)\r\n {\r\n return this.is_int(n) || this.is_float(n);\r\n }\r\n}\r\n","import { Audio as TAudio } from 'three';\nimport { PositionalAudio as TPositionalAudio } from 'three';\n\nclass AudioClip\n{\n constructor(buffer, loop = true, volume = 1, positional = false)\n {\n this.buffer = buffer;\n this.loop = loop;\n this.volume = volume;\n this.positional = positional;\n\n this.audio = undefined;\n }\n\n init(audio_listener)\n {\n if (this.positional)\n {\n this.audio = new TPositionalAudio(audio_listener);\n }\n else\n {\n this.audio = new TAudio(audio_listener);\n }\n\n this.audio.setBuffer(this.buffer);\n this.audio.setLoop(this.loop);\n\n // This prevents undesired volume at the beginning of playing\n this.audio.gain.gain.value = 0;\n\n this.audio.setVolume(this.loop ? 0 : this.volume);\n }\n\n play()\n {\n this.audio.play();\n }\n\n pause()\n {\n this.audio.pause();\n }\n\n stop()\n {\n this.audio.stop();\n }\n\n get is_playing()\n {\n return this.audio.isPlaying;\n }\n}\n\nexport { AudioClip };\n","import { AudioContext } from 'three';\r\n\r\nimport { AudioClip } from '../components/AudioClip';\r\nimport { AbstractLoader } from './AbstractLoader';\r\n\r\nclass AudioLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, loop = true, volume = 0, size, positional = false)\r\n {\r\n super(resource_id, url, size);\r\n this.loop = loop;\r\n this.volume = volume;\r\n this.positional = positional;\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n // if (!window.user_interaction_for_audio)\r\n // {\r\n // setTimeout(this.on_preloaded_finished.bind(this, resource_container), 100);\r\n // }\r\n // else\r\n // {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.instantiate_audio(resource_container);\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n // }\r\n }\r\n\r\n instantiate_audio(resource_container)\r\n {\r\n const context = AudioContext.getContext();\r\n\r\n const buffer = context.createBuffer(2, 22050, 44100);\r\n\r\n fetch(this.url).then(r => r.blob()).then((response) =>\r\n {\r\n if (response.arrayBuffer)\r\n {\r\n response.arrayBuffer().then((array_buffer) =>\r\n {\r\n context.decodeAudioData(array_buffer, (audio_buffer) =>\r\n {\r\n resource_container.set_resource(\r\n this.resource_id,\r\n this.url,\r\n new AudioClip(audio_buffer, this.loop, this.volume, this.positional)\r\n );\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n });\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(\r\n this.resource_id,\r\n this.url,\r\n new AudioClip(buffer, this.loop, this.volume, this.positional)\r\n );\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport { AudioLoader };\r\n","class ResourceContainer\n{\n init()\n {\n this.resources = {};\n this.resources_by_url = {};\n }\n\n set_resource(name, url, resource)\n {\n const urls = Object.keys(this.resources_by_url);\n\n if (urls.includes(url))\n {\n this.resources[name] = this.resources_by_url[url];\n }\n else\n {\n this.resources[name] = resource;\n this.resources_by_url[url] = resource;\n }\n }\n\n get_resource(name)\n {\n return this.resources[name];\n }\n\n get(name)\n {\n return this.resources[name];\n }\n}\n\nconst resource_container = new ResourceContainer();\nexport { resource_container as ResourceContainer };\n","import { ResourceContainer } from '../ResourceContainer';\n\nclass AsyncAbstractLoader\n{\n constructor(name, assets, worker)\n {\n this.resource_container = ResourceContainer;\n this.assets = assets;\n this.name = name;\n\n this.worker = worker;\n\n this.bound_on_message = this.on_message.bind(this);\n\n this.__setup_worker();\n\n this.assets_loaders = this.__setup_loaders();\n }\n\n load()\n {\n this.worker.postMessage({ type: 'load', loader_name: this.name });\n }\n\n is_loaded()\n {\n for (let i = 0; i < this.assets_loaders.length; i++)\n {\n const asset_loader = this.assets_loaders[i];\n\n if (!asset_loader.has_finished)\n {\n return false;\n }\n else\n {\n if (asset_loader.has_error)\n {\n // Restore original url so the error message make more sense\n asset_loader.url = asset_loader.original_url;\n\n asset_loader.print_error();\n }\n }\n }\n\n return true;\n }\n\n get_progress()\n {\n return this.__get_loaded_bytes() / this.__get_total_bytes();\n }\n\n __get_loaded_bytes()\n {\n let loaded_bytes = 1;\n\n for (let i = 0; i < this.assets_loaders.length; i++)\n {\n loaded_bytes += this.assets_loaders[i].loaded_bytes;\n }\n\n return loaded_bytes;\n }\n\n __get_total_bytes()\n {\n let total_bytes = 1;\n\n for (let i = 0; i < this.assets_loaders.length; i++)\n {\n total_bytes += this.assets_loaders[i].total_bytes;\n }\n\n return total_bytes;\n }\n\n get_assets_names()\n {\n const names = [];\n\n for (let i = 0; i < this.assets.length; i++)\n {\n const asset = this.assets[i];\n\n names.push(asset.name);\n }\n\n return names;\n }\n\n static create_worker()\n {\n const worker = new Worker(\n new URL('./assets_loader/AsyncAssetsLoaderWorker.js', import.meta.url),\n { name: 'OHZI - AssetLoader', type: 'module' });\n\n return worker;\n }\n\n __setup_worker()\n {\n this.worker.addEventListener('message', this.bound_on_message);\n\n this.worker.postMessage({ type: 'assets', loader_name: this.name, data: this.assets });\n }\n\n on_message(e)\n {\n const message = e.data;\n\n switch (message.type)\n {\n case `asset_loaded_${this.name}`:\n this.__on_assets_loaded(message.data);\n break;\n }\n }\n\n __on_assets_loaded(resources)\n {\n this.worker.removeEventListener('message', this.bound_on_message);\n\n for (let i = 0; i < this.assets_loaders.length; i++)\n {\n const asset_loader = this.assets_loaders[i];\n\n // Save original url to show in a possible error\n asset_loader.original_url = asset_loader.url;\n\n asset_loader.url = resources[asset_loader.resource_id];\n\n asset_loader.on_preloaded_finished(this.resource_container);\n }\n }\n\n __setup_loaders()\n {\n console.warn('Not implemented');\n }\n}\n\nexport { AsyncAbstractLoader };\n","import { AudioLoader } from '../resource_loader/AudioLoader';\nimport { AsyncAbstractLoader } from './AsyncAbstractLoader';\n\nclass AsyncAudiosLoader extends AsyncAbstractLoader\n{\n constructor(scene_name, assets, worker)\n {\n super(scene_name, assets, worker);\n }\n\n // Called from parent\n __setup_loaders()\n {\n const loaders = [];\n\n for (let i = 0; i < this.assets.length; i++)\n {\n const asset_data = this.assets[i];\n\n loaders.push(new AudioLoader(\n asset_data.name,\n asset_data.url,\n asset_data.loop,\n asset_data.volume,\n asset_data.size,\n asset_data.positional\n ));\n }\n\n return loaders;\n }\n}\n\nexport { AsyncAudiosLoader };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\r\n\r\nclass GLTFDRACOLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, loader, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new GLTFLoader();\r\n\r\n this.loader.setDRACOLoader(loader);\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (gltf) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, gltf);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { GLTFDRACOLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { GLTFLoader as TGLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';\r\n\r\nclass GLTFLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new TGLTFLoader();\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (gltf) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, gltf);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { GLTFLoader };\r\n","import { GLTFDRACOLoader } from '../resource_loader/GLTFDRACOLoader';\nimport { GLTFLoader } from '../resource_loader/GLTFLoader';\nimport { ResourceContainer } from '../ResourceContainer';\nimport { AsyncAbstractLoader } from './AsyncAbstractLoader';\n\nclass AsyncObjectsLoader extends AsyncAbstractLoader\n{\n constructor(scene_name, assets, worker)\n {\n super(scene_name, assets, worker);\n }\n\n // Called from parent\n __setup_loaders()\n {\n const loaders = [];\n\n for (let i = 0; i < this.assets.length; i++)\n {\n const asset_data = this.assets[i];\n\n if (asset_data.draco)\n {\n const draco_loader = ResourceContainer.get('draco_loader');\n\n loaders.push(new GLTFDRACOLoader(asset_data.name, asset_data.url, draco_loader, asset_data.size));\n }\n else\n {\n loaders.push(new GLTFLoader(asset_data.name, asset_data.url, asset_data.size));\n }\n }\n\n return loaders;\n }\n}\n\nexport { AsyncObjectsLoader };\n","\nclass Browser\n{\n async init()\n {\n this.browser_name = '';\n this.agent = window.navigator.userAgent.toLowerCase();\n\n this.has_web_xr_support = 'xr' in navigator;\n this.is_vr = this.has_web_xr_support && await navigator.xr.isSessionSupported('immersive-vr');\n\n switch (true)\n {\n case this.agent.indexOf('edge') > -1:\n this.browser_name = 'edge_ie';\n break;\n case this.agent.indexOf('edg') > -1:\n this.browser_name = 'edge_chromium';\n break;\n case this.agent.indexOf('opr') > -1 && !!window.opr:\n this.browser_name = 'opera';\n break;\n case this.agent.indexOf('chrome') > -1 && !!window.chrome:\n this.browser_name = 'chrome';\n break;\n case this.agent.indexOf('trident') > -1:\n this.browser_name = 'iexplorer';\n break;\n case this.agent.indexOf('firefox') > -1:\n this.browser_name = 'firefox';\n break;\n case this.agent.indexOf('safari') > -1:\n this.browser_name = 'safari';\n break;\n default:\n this.browser_name = 'other';\n break;\n }\n\n this.version = this.get_version();\n }\n\n get name()\n {\n return this.browser_name;\n }\n\n get is_safari()\n {\n return this.browser_name === 'safari';\n }\n\n get is_chrome()\n {\n return this.browser_name === 'chrome';\n }\n\n get is_edge()\n {\n return this.browser_name === 'edge_ie';\n }\n\n get is_edge_chromium()\n {\n return this.browser_name === 'edge_chromium';\n }\n\n get has_webm()\n {\n return !!(this.is_chrome || this.is_firefox || this.is_edge_chromium);\n }\n\n get has_hvec()\n {\n return this.is_safari;\n }\n\n get preferred_video_extension()\n {\n return this.has_webm ? 'webm' : this.has_hvec ? 'hvec.mp4' : 'mp4';\n }\n\n get_version()\n {\n const ua = navigator.userAgent;\n let tem = '';\n let version = 0;\n\n let M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\\/))\\/?\\s*(\\d+)/i) || [];\n\n if (/trident/i.test(M[1]))\n {\n tem = /\\brv[ :]+(\\d+)/g.exec(ua) || [];\n version = 'IE ' + (tem[1] || '');\n }\n if (M[1] === 'Chrome')\n {\n tem = ua.match(/\\b(OPR|Edge)\\/(\\d+)/);\n if (tem != null) version = tem.slice(1).join(' ').replace('OPR', 'Opera');\n }\n\n M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];\n if ((tem = ua.match(/version\\/(\\d+(\\.\\d+)?)/i)) != null) M.splice(1, 1, tem[1]);\n\n version = M.join(' ');\n\n return Number(version.split(' ')[1]);\n }\n}\n\nconst browser = new Browser();\nexport { browser as Browser };\n","import { Browser } from '../Browser';\r\nimport { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { NoColorSpace, SRGBColorSpace, Texture } from 'three';\r\n\r\nexport class AsyncTextureLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size, flipY = true, premultiplyAlpha = false, colorSpaceConversion = true)\r\n {\r\n super(resource_id, url, size);\r\n\r\n this.original_url = '';\r\n\r\n this.colorSpaceConversion = colorSpaceConversion;\r\n this.premultiplyAlpha = premultiplyAlpha;\r\n this.flipY = flipY;\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (Browser.is_safari) // && Browser.version < 15\r\n {\r\n this.load_with_old_method(resource_container);\r\n }\r\n else\r\n {\r\n this.load_with_new_method(resource_container);\r\n }\r\n }\r\n\r\n load_with_old_method(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n const texture = new Texture();\r\n const image = new Image();\r\n\r\n image.src = this.url;\r\n\r\n image.onload = () =>\r\n {\r\n texture.image = image;\r\n texture.flipY = this.flipY;\r\n texture.premultiplyAlpha = this.premultiplyAlpha;\r\n texture.colorSpace = this.colorSpaceConversion ? SRGBColorSpace : NoColorSpace;\r\n texture.needsUpdate = true;\r\n\r\n resource_container.set_resource(this.resource_id, this.url, texture);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n };\r\n\r\n image.onerror = () =>\r\n {\r\n console.error('The source image could not be decoded.', this.original_url);\r\n };\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n\r\n load_with_new_method(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n const fetchOptions = {};\r\n fetchOptions.credentials = 'same-origin';\r\n // fetchOptions.headers = this.requestHeader;\r\n\r\n fetch(this.url, fetchOptions).then((res) =>\r\n {\r\n return res.blob();\r\n }).then((blob) =>\r\n {\r\n return createImageBitmap(blob, {\r\n colorSpaceConversion: this.colorSpaceConversion ? 'default' : 'none',\r\n imageOrientation: this.flipY ? 'flipY' : 'none',\r\n premultiplyAlpha: this.premultiplyAlpha ? 'premultiply' : 'none'\r\n });\r\n }).then((imageBitmap) =>\r\n {\r\n const texture = new Texture(imageBitmap);\r\n texture.flipY = this.flipY;\r\n texture.premultiplyAlpha = this.premultiplyAlpha;\r\n texture.colorSpace = this.colorSpaceConversion ? SRGBColorSpace : NoColorSpace;\r\n texture.needsUpdate = true;\r\n\r\n resource_container.set_resource(this.resource_id, this.url, texture);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }).catch((e) =>\r\n {\r\n console.error(e, this.original_url);\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n","import { AbstractLoader } from './AbstractLoader';\n\n// import { sRGBEncoding } from 'three';\n\nclass BasisLoader extends AbstractLoader\n{\n constructor(resource_id, url, loader, size)\n {\n super(resource_id, url, size);\n\n this.loader = loader;\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (basis) =>\n {\n // basis.encoding = sRGBEncoding;\n\n resource_container.set_resource(this.resource_id, this.url, basis);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { BasisLoader };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { CubeTextureLoader } from 'three';\r\n\r\nclass CubemapLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, extension, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new CubeTextureLoader();\r\n this.loader.setPath(url + '/');\r\n this.urls = [\r\n `px.${extension}`,\r\n `nx.${extension}`,\r\n `py.${extension}`,\r\n `ny.${extension}`,\r\n `pz.${extension}`,\r\n `nz.${extension}`\r\n ];\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.urls, (image) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, image);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (error) =>\r\n {\r\n this.__set_error('Image could not be loaded. Maybe wrong name or path, I don\\'t know' + '¯\\\\_(ツ)_/¯', error);\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { CubemapLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\n\nimport { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader.js';\n\nclass RGBETextureLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n this.loader = new RGBELoader();\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (hdr) =>\n {\n resource_container.set_resource(this.resource_id, this.url, hdr);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { RGBETextureLoader };\n","\nimport { AsyncTextureLoader } from '../resource_loader/AsyncTextureLoader';\nimport { BasisLoader } from '../resource_loader/BasisLoader';\nimport { CubemapLoader } from '../resource_loader/CubemapLoader';\nimport { RGBETextureLoader } from '../resource_loader/RGBETextureLoader';\nimport { ResourceContainer } from '../ResourceContainer';\nimport { AsyncAbstractLoader } from './AsyncAbstractLoader';\n\nclass AsyncTexturesLoader extends AsyncAbstractLoader\n{\n constructor(scene_name, assets, worker)\n {\n super(scene_name, assets, worker);\n }\n\n // Called from parent\n __setup_loaders()\n {\n const loaders = [];\n\n for (let i = 0; i < this.assets.length; i++)\n {\n const asset_data = this.assets[i];\n\n switch (asset_data.kind)\n {\n case 'regular':\n loaders.push(new AsyncTextureLoader(\n asset_data.name,\n asset_data.url,\n asset_data.size\n ));\n\n break;\n case 'basis':\n loaders.push(new BasisLoader(\n asset_data.name,\n asset_data.url,\n ResourceContainer.get('basis_loader'),\n asset_data.size\n ));\n\n break;\n case 'hdr':\n loaders.push(new RGBETextureLoader(\n asset_data.name,\n asset_data.url,\n asset_data.size\n ));\n\n break;\n case 'cubemap':\n loaders.push(new CubemapLoader(\n asset_data.name,\n asset_data.url,\n asset_data.extension,\n asset_data.size\n ));\n\n break;\n default:\n break;\n }\n }\n\n return loaders;\n }\n}\n\nexport { AsyncTexturesLoader };\n","class CompilatorManager\n{\n constructor(compilators)\n {\n this.compilators = compilators;\n this.first_update = true;\n\n this.index = 0;\n }\n\n update()\n {\n if (!this.is_finished())\n {\n if (this.compilators[this.index].finished)\n {\n this.index++;\n this.first_update = true;\n }\n else\n {\n if (this.first_update)\n {\n this.compilators[this.index].start();\n this.first_update = false;\n }\n else\n {\n this.compilators[this.index].update();\n }\n }\n }\n }\n\n is_finished()\n {\n return this.index === this.compilators.length;\n }\n}\n\nexport { CompilatorManager };\n","import { ResourceContainer } from 'ohzi-core';\n\nimport { AsyncAudiosLoader } from '../../loaders/AsyncAudiosLoader';\nimport { AsyncObjectsLoader } from '../../loaders/AsyncObjectsLoader';\nimport { AsyncTexturesLoader } from '../../loaders/AsyncTexturesLoader';\nimport { CompilatorManager } from './CompilatorManager';\n\nexport class LoadingState\n{\n constructor(scene, { SceneCompilator, TexturesCompilator, AudiosCompilator })\n {\n this.scene = scene;\n\n this.SceneCompilator = SceneCompilator;\n this.TexturesCompilator = TexturesCompilator;\n this.AudiosCompilator = AudiosCompilator;\n\n this.loaders = [];\n this.compilators = [];\n\n this.callback_called = false;\n }\n\n set_assets(scene_objects, scene_textures, scene_sounds)\n {\n this.scene_objects = scene_objects;\n this.scene_textures = scene_textures;\n this.scene_sounds = scene_sounds;\n }\n\n get loading_progress()\n {\n let progress = 0;\n\n for (let i = 0; i < this.loaders.length; i++)\n {\n const loader = this.loaders[i];\n progress += loader.get_progress();\n }\n return progress / this.loaders.length;\n }\n\n load()\n {\n this.setup_loader();\n\n // TODO: improve this.\n // We call load method to one of the 3 loaders because they share the same worker.\n this.loaders[0].load();\n }\n\n on_enter()\n {\n }\n\n on_exit()\n {\n }\n\n update()\n {\n\n }\n\n setup_loader()\n {\n const compilators = [];\n\n const assets_worker = ResourceContainer.get('assets_worker');\n assets_worker.postMessage({ type: 'reset', loader_name: this.scene.name });\n\n const object_loader = new AsyncObjectsLoader(this.scene.name, this.scene_objects, assets_worker);\n this.loaders.push(object_loader);\n compilators.push(new this.SceneCompilator(this.scene));\n\n const textures_loader = new AsyncTexturesLoader(this.scene.name, this.scene_textures, assets_worker);\n this.loaders.push(textures_loader);\n compilators.push(new this.TexturesCompilator(textures_loader.get_assets_names()));\n\n const audios_loader = new AsyncAudiosLoader(this.scene.name, this.scene_sounds, assets_worker);\n this.loaders.push(audios_loader);\n compilators.push(new this.AudiosCompilator(audios_loader.get_assets_names()));\n\n this.compilator_manager = new CompilatorManager(compilators);\n }\n\n is_loaded()\n {\n let loaded = true;\n\n for (let i = 0; i < this.loaders.length; i++)\n {\n const loader = this.loaders[i];\n\n loaded = loaded && loader.is_loaded();\n }\n\n return loaded;\n }\n\n is_compiled()\n {\n this.compilator_manager.update();\n return this.compilator_manager.is_finished();\n }\n}\n","import { LoadingState } from './LoadingState';\n\nexport class HighQualityLoadingState extends LoadingState\n{\n on_enter()\n {\n super.on_enter();\n // this.setup_loader();\n }\n\n on_exit()\n {\n super.on_exit();\n }\n\n update()\n {\n super.update();\n\n if (this.is_loaded())\n {\n // if (this.is_compiled())\n // {\n this.scene.on_high_quality_assets_ready();\n // }\n }\n }\n}\n","import { LoadingState } from './LoadingState';\n\nexport class RegularLoadingState extends LoadingState\n{\n constructor(scene, compilators)\n {\n super(scene, compilators);\n\n this.on_assets_ready_called = false;\n }\n\n on_enter()\n {\n super.on_enter();\n // this.setup_loader();\n }\n\n on_exit()\n {\n super.on_exit();\n }\n\n update()\n {\n super.update();\n\n if (this.is_loaded())\n {\n if (!this.on_assets_ready_called)\n {\n this.scene.on_assets_ready();\n this.on_assets_ready_called = true;\n }\n\n if (this.is_compiled())\n {\n this.scene.on_assets_compiled();\n }\n }\n }\n}\n","import { Scene } from 'three';\n// import { AvatarSystem } from '../../components/avatar/AvatarSystem';\n\nimport { HighQualityLoadingState } from './loading_states/HighQualityLoadingState';\nimport { LoadingState } from './loading_states/LoadingState';\nimport { RegularLoadingState } from './loading_states/RegularLoadingState';\n\nclass AbstractScene extends Scene\n{\n constructor({ name, compilators })\n {\n super();\n\n this.name = name;\n\n this.is_loaded = false;\n this.is_high_loaded = false;\n\n this.loading_states = {\n regular: new RegularLoadingState(this, compilators),\n high: new HighQualityLoadingState(this, compilators)\n };\n\n this.current_loading_state = new LoadingState(this, compilators);\n // this.set_loading_state(this.loading_states.regular);\n }\n\n get loading_progress()\n {\n return this.current_loading_state.loading_progress;\n }\n\n init()\n {\n }\n\n load()\n {\n this.init();\n\n this.set_loading_state(this.loading_states.regular);\n this.current_loading_state.load();\n }\n\n get_objects()\n {\n const objects = [];\n\n this.traverse(child =>\n {\n if (child.geometry)\n {\n objects.push(child);\n\n // if (child.name === 'pitch_floor')\n // {\n // objects.push(child);\n // }\n // else\n // {\n // child.visible = false;\n // }\n }\n });\n\n return objects;\n }\n\n dispose_cpu()\n {\n this.traverse(child =>\n {\n if (child.geometry)\n {\n child.geometry.attributes.position.array = new Float32Array(3);\n if (child.geometry.attributes.normal)\n {\n child.geometry.attributes.normal.array = new Float32Array(3);\n }\n if (child.geometry.attributes.uv)\n {\n child.geometry.attributes.uv.array = new Float32Array(2);\n }\n if (child.material.map)\n {\n for (let i = 0; i < child.material.map.mipmaps.length; i++)\n {\n child.material.map.mipmaps[i] = new Uint8Array(4);\n }\n }\n }\n });\n\n // AvatarSystem.component_container.component_instancer.data_texture.data = new Float32Array(4);\n }\n\n dispose()\n {\n this.traverse(child =>\n {\n if (child.material)\n {\n if (child.material.map)\n {\n child.material.map.dispose();\n }\n\n child.material.dispose();\n child.geometry.dispose();\n }\n });\n // AvatarSystem.component_container.component_instancer.data_texture.data = new Float32Array(4);\n }\n\n set_assets(scene_objects, scene_textures, scene_sounds)\n {\n this.loading_states.regular.set_assets(scene_objects, scene_textures, scene_sounds);\n }\n\n set_high_assets(scene_objects, scene_textures, scene_sounds)\n {\n this.loading_states.high.set_assets(scene_objects, scene_textures, scene_sounds);\n }\n\n set_loading_state(state)\n {\n this.current_loading_state.on_exit();\n this.current_loading_state = state;\n this.current_loading_state.on_enter();\n }\n\n // Called from transition\n update_loading_state()\n {\n if (!this.is_high_loaded)\n {\n this.current_loading_state.update();\n }\n }\n\n update()\n {\n this.update_loading_state();\n }\n\n on_assets_ready()\n {\n\n }\n\n on_assets_compiled()\n {\n this.is_loaded = true;\n\n // Load high quality assets\n this.set_loading_state(this.loading_states.high);\n this.current_loading_state.load();\n }\n\n on_high_quality_assets_ready()\n {\n this.is_high_loaded = true;\n }\n}\n\nexport { AbstractScene };\n","\nclass OMath\n{\n constructor()\n {}\n\n static linear_map(value,\n from_range_start_value,\n from_range_end_value,\n to_range_start_value,\n to_range_end_value)\n {\n return ((value - from_range_start_value) / (from_range_end_value - from_range_start_value)) * (to_range_end_value - to_range_start_value) + to_range_start_value;\n }\n\n static between(value, min, max)\n {\n return (value >= min && value <= max);\n }\n\n static mod(number, divisor)\n {\n return ((number % divisor) + divisor) % divisor;\n }\n\n static rgb_to_hex(rgb)\n {\n rgb.r = Math.round(rgb.r * 255).toString(16);\n rgb.g = Math.round(rgb.g * 255).toString(16);\n rgb.b = Math.round(rgb.b * 255).toString(16);\n\n if (rgb.r.length === 1)\n {\n rgb.r = '0' + rgb.r;\n }\n if (rgb.g.length === 1)\n {\n rgb.g = '0' + rgb.g;\n }\n if (rgb.b.length === 1)\n {\n rgb.b = '0' + rgb.b;\n }\n\n return '#' + rgb.r + rgb.g + rgb.b;\n }\n\n static project_points_on_plane(points, plane)\n {\n const projected_point = points[0].clone();\n projected_point.set(0, 0, 0);\n\n const points_on_plane = [];\n\n for (let i = 0; i < points.length; i++)\n {\n plane.projectPoint(points[i], projected_point);\n points_on_plane.push(projected_point.clone());\n }\n\n return points_on_plane;\n }\n\n static matrix4_lerp(from, to, target, t)\n {\n for (let i = 0; i < 16; i++)\n {\n target.elements[i] = this.lerp(from.elements[i], to.elements[i], t);\n }\n }\n\n static equals(x1, x2)\n {\n return Math.abs(x1 - x2) < 0.000001;\n }\n\n static lerp(x, y, t)\n {\n return (1 - t) * x + t * y;\n }\n\n static clamp(value, min, max)\n {\n return Math.max(min, Math.min(max, value));\n }\n\n static euclideanModulo(n, m)\n {\n return ((n % m) + m) % m;\n }\n\n static pingpong(x, length = 1)\n {\n return length - Math.abs(OMath.euclideanModulo(x, length * 2) - length);\n }\n\n static degToRad(degrees)\n {\n return degrees * (Math.PI / 180);\n }\n\n static radToDeg(radians)\n {\n return radians * (180 / Math.PI);\n }\n\n static deg_to_rad(degrees)\n {\n return degrees * (Math.PI / 180);\n }\n\n static rad_to_deg(radians)\n {\n return radians * (180 / Math.PI);\n }\n\n static perspective_divide(v)\n {\n v.x /= v.w;\n v.y /= v.w;\n v.z /= v.w;\n return v;\n }\n\n static points_average(points)\n {\n const center = points[0].clone();\n for (let i = 1; i < points.length; i++)\n {\n center.add(points[i]);\n }\n center.multiplyScalar(1 / points.length);\n return center;\n }\n\n static get_random_color()\n {\n const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'a', 'b', 'c', 'd', 'e', 'f'];\n\n let col = '#';\n col += arr[Math.floor(Math.random() * 16)];\n col += arr[Math.floor(Math.random() * 16)];\n\n col += arr[Math.floor(Math.random() * 16)];\n col += arr[Math.floor(Math.random() * 16)];\n\n col += arr[Math.floor(Math.random() * 16)];\n col += arr[Math.floor(Math.random() * 16)];\n return col;\n }\n\n static saturate(x)\n {\n return OMath.clamp(x, 0, 1);\n }\n}\n\nexport { OMath };\n","\nimport { OMath } from '../utilities/OMath';\n\nclass ActionSequencer\n{\n constructor(context = {})\n {\n this.previous_elapsed_time = -0.00001;\n this.elapsed_time = -0.00001;\n this.playback_speed = this.__get_playback_speed();\n this.playing = true;\n\n this.action_events = [];\n this.context = context;\n\n this.initial_context = JSON.parse(JSON.stringify(context));\n\n this.tmp_t = 0;\n\n this.channels = {};\n\n const channel_names = Object.keys(context);\n for (let i = 0; i < channel_names.length; i++)\n {\n this.channels[channel_names[i]] = [];\n }\n\n this.duration = 0;\n }\n\n play()\n {\n this.playing = true;\n }\n\n stop()\n {\n this.playing = false;\n }\n\n reset()\n {\n this.elapsed_time = -0.00001;\n }\n\n skip()\n {\n const duration = this.get_duration();\n this.__play_clips(this.elapsed_time, duration + 0.0001);\n this.elapsed_time = duration;\n }\n\n update(delta_time)\n {\n if (this.playing)\n {\n this.previous_elapsed_time = this.elapsed_time;\n this.elapsed_time += delta_time * this.playback_speed;\n this.__play_clips(this.previous_elapsed_time, this.elapsed_time);\n }\n }\n\n set_progress(time)\n {\n this.previous_elapsed_time = this.elapsed_time;\n this.elapsed_time = OMath.clamp(time, 0, this.duration);\n this.__play_clips(this.elapsed_time, this.elapsed_time);\n }\n\n set_normalized_progress(t)\n {\n this.previous_elapsed_time = this.elapsed_time;\n this.elapsed_time = OMath.clamp(t, 0, 1) * this.duration;\n this.__play_clips(this.elapsed_time, this.elapsed_time);\n }\n\n get_progress()\n {\n return OMath.clamp(this.elapsed_time / this.get_duration(), 0, 1);\n }\n\n is_finished()\n {\n return this.elapsed_time > this.get_duration();\n }\n\n add_action_event(trigger_time, action)\n {\n this.action_events.push({\n trigger_time: trigger_time,\n action: action\n });\n\n this.duration = Math.max(this.duration, trigger_time);\n }\n\n add_action_interpolator(from, to, interpolator, use_dynamic_from_value = false)\n {\n if (use_dynamic_from_value)\n {\n const keyframes = this.channels[interpolator.attribute_name];\n\n if (keyframes === undefined)\n {\n console.error(`${interpolator.attribute_name} missing in initial state data.`);\n }\n\n if (keyframes.length === 0)\n {\n interpolator.from = this.initial_context[interpolator.attribute_name];\n }\n else\n {\n interpolator.from = keyframes[keyframes.length - 1].interpolator.to;\n }\n }\n\n const keyframe = {\n from: from,\n to: to,\n interpolator: interpolator\n };\n\n this.duration = Math.max(this.duration, to);\n this.channels[interpolator.attribute_name].push(keyframe);\n }\n\n get_current_target_value(name)\n {\n const keyframe = this.__get_current_keyframe(name, this.elapsed_time);\n\n if (this.elapsed_time < keyframe.from)\n {\n return keyframe.interpolator.evaluate(0);\n }\n\n return keyframe.interpolator.evaluate(1);\n }\n\n get_current_starting_value(name)\n {\n const keyframe = this.__get_current_keyframe(name, this.elapsed_time);\n\n return keyframe.interpolator.evaluate(0);\n }\n\n get_current_progress(name)\n {\n const keyframe = this.__get_current_keyframe(name, this.elapsed_time);\n const t = this.__linear_map_01(this.elapsed_time, keyframe.from, keyframe.to);\n\n return keyframe.interpolator.easing_function(t);\n }\n\n get_duration()\n {\n return this.duration;\n }\n\n __play_clips(from, to)\n {\n if (this.elapsed_time > this.previous_elapsed_time)\n {\n this.__play_events(this.previous_elapsed_time, this.elapsed_time);\n }\n const channel_names = Object.keys(this.initial_context);\n\n for (let i = 0; i < channel_names.length; i++)\n {\n const name = channel_names[i];\n const keyframe = this.__get_current_keyframe(name, from);\n\n this.context[name] = this.evaluate_keyframe(keyframe, from);\n }\n }\n\n __play_events(from, to)\n {\n for (let i = 0; i < this.action_events.length; i++)\n {\n const trigger_time = this.action_events[i].trigger_time;\n if (OMath.between(trigger_time, from, to))\n {\n console.log('Play event: ' + this.action_events[i].action.constructor.name + ' at ' + this.action_events[i].trigger_time);\n this.action_events[i].action.trigger();\n }\n }\n }\n\n evaluate_keyframe(keyframe, time)\n {\n this.tmp_t = this.__linear_map_01(time, keyframe.from, keyframe.to);\n\n return keyframe.interpolator.evaluate(OMath.clamp(this.tmp_t, 0, 1));\n }\n\n get_keyframes(channel_name)\n {\n return this.channels[channel_name];\n }\n\n is_channel_redefined(channel_name)\n {\n for (let i = 0; i < this.channels[channel_name].length; i++)\n {\n const keyframe = this.channels[channel_name][i];\n\n if (keyframe.interpolator.initial)\n {\n return false;\n }\n }\n\n return true;\n }\n\n __linear_map_01(value,\n from_range_start_value,\n from_range_end_value)\n {\n return OMath.saturate(((value - from_range_start_value) / (from_range_end_value - from_range_start_value)) * (1 - 0) + 0);\n }\n\n __get_current_keyframe(channel_name, time)\n {\n let current = undefined;\n\n const keyframes = this.channels[channel_name];\n\n for (let i = 0; i < keyframes.length; i++)\n {\n const keyframe = keyframes[i];\n\n if (time >= keyframe.from && time <= keyframe.to)\n {\n current = keyframe;\n return current;\n }\n }\n\n let min = Infinity;\n\n for (let i = 0; i < keyframes.length; i++)\n {\n const keyframe = keyframes[i];\n const distance = Math.abs(keyframe.to - time);\n\n if (distance < min)\n {\n current = keyframe;\n min = distance;\n }\n }\n\n return current;\n }\n\n __get_playback_speed()\n {\n const url_params = new URLSearchParams(window.location.search);\n\n const transitions_velocity = url_params.get('transitions_velocity');\n\n if (transitions_velocity)\n {\n return Number(transitions_velocity);\n }\n else\n {\n return 1;\n }\n }\n}\n\nexport { ActionSequencer };\n","class EasingFunctions\n{\n constructor()\n {}\n\n static linear(x)\n {\n return x;\n }\n\n static triangular(x)\n {\n return 1 - Math.abs((x * 2) % (1 * 2) - 1);\n }\n\n static ease_in_sine(x)\n {\n return 1 - Math.cos(x * 3.1415926 / 2);\n }\n\n static ease_out_sine(x)\n {\n return Math.sin(x * 3.1415926 / 2);\n }\n\n static ease_in_out_sine(x)\n {\n return -(Math.cos(3.1415926 * x) - 1) / 2;\n }\n\n static ease_in_cubic(x)\n {\n return x * x * x;\n }\n\n static ease_out_cubic(x)\n {\n return 1 - Math.pow(1 - x, 3);\n }\n\n static ease_in_out_cubic(x)\n {\n return x < 0.5\n ? 4 * x * x * x\n : 1 - Math.pow(-2 * x + 2, 3) / 2;\n }\n\n static ease_in_quad(x)\n {\n return x * x;\n }\n\n static ease_out_quad(x)\n {\n return 1 - (1 - x) * (1 - x);\n }\n\n static ease_in_out_quad(x)\n {\n return x < 0.5\n ? 2 * x * x\n : 1 - Math.pow(-2 * x + 2, 2) / 2;\n }\n\n static ease_in_quart(x)\n {\n return x * x * x * x;\n }\n\n static ease_out_quart(x)\n {\n return 1 - Math.pow(1 - x, 4);\n }\n\n static ease_in_out_quart(x)\n {\n return x < 0.5\n ? 8 * x * x * x * x\n : 1 - Math.pow(-2 * x + 2, 4) / 2;\n }\n\n static ease_in_quint(x)\n {\n return x * x * x * x * x;\n }\n\n static ease_out_quint(x)\n {\n return 1 - Math.pow(1 - x, 5);\n }\n\n static ease_in_out_quint(x)\n {\n return x < 0.5\n ? 16 * x * x * x * x * x\n : 1 - Math.pow(-2 * x + 2, 5) / 2;\n }\n\n static ease_in_expo(x)\n {\n return x === 0 ? 0 : Math.pow(2, 10 * x - 10);\n }\n\n static ease_out_expo(x)\n {\n return x === 1 ? 1 : 1 - Math.pow(2, -10 * x);\n }\n\n static ease_in_out_expo(x)\n {\n return x === 0\n ? 0\n : x === 1\n ? 1\n : x < 0.5\n ? Math.pow(2, 20 * x - 10) / 2\n : (2 - Math.pow(2, -20 * x + 10)) / 2;\n }\n\n static ease_in_circ(x)\n {\n return 1 - Math.sqrt(1 - Math.pow(x, 2));\n }\n\n static ease_out_circ(x)\n {\n return Math.sqrt(1 - Math.pow(x - 1, 2));\n }\n\n static ease_in_out_circ(x)\n {\n return x < 0.5\n ? (1 - Math.sqrt(1 - Math.pow(2 * x, 2))) / 2\n : (Math.sqrt(1 - Math.pow(-2 * x + 2, 2)) + 1) / 2;\n }\n\n static ease_in_back(x)\n {\n return 2.7015 * x * x * x - 1.7015 * x * x;\n }\n\n static ease_out_back(x)\n {\n return 1 + 2.7015 * Math.pow(x - 1, 3) + 1.7015 * Math.pow(x - 1, 2);\n }\n\n static ease_in_out_back(x)\n {\n return x < 0.5\n ? (Math.pow(2 * x, 2) * ((2.5949095 + 1) * 2 * x - 2.5949095)) / 2\n : (Math.pow(2 * x - 2, 2) * ((2.5949095 + 1) * (x * 2 - 2) + 2.5949095) + 2) / 2;\n }\n\n static ease_in_elastic(x)\n {\n const c4 = (2 * Math.PI) / 3;\n\n return x === 0\n ? 0\n : x === 1\n ? 1\n : -Math.pow(2, 10 * x - 10) * Math.sin((x * 10 - 10.75) * c4);\n }\n\n static ease_out_elastic(x)\n {\n return x === 0\n ? 0\n : x === 1\n ? 1\n : Math.pow(2, -10 * x) * Math.sin((x * 10 - 0.75) * 2.0943950) + 1;\n }\n\n static ease_in_out_elastic(x)\n {\n return x === 0\n ? 0\n : x === 1\n ? 1\n : x < 0.5\n ? -(Math.pow(2, 20 * x - 10) * Math.sin((20 * x - 11.125) * 1.3962633)) / 2\n : Math.pow(2, -20 * x + 10) * Math.sin((20 * x - 11.125) * 1.3962633) / 2 + 1;\n }\n\n static ease_in_bounce(x)\n {\n return 1 - this.ease_out_bounce(1 - x);\n }\n\n static ease_out_bounce(x)\n {\n const n1 = 7.5625;\n const d1 = 2.75;\n\n if (x < 1 / d1)\n {\n return n1 * x * x;\n }\n else if (x < 2 / d1)\n {\n return n1 * (x -= 1.5 / d1) * x + 0.75;\n }\n else if (x < 2.5 / d1)\n {\n return n1 * (x -= 2.25 / d1) * x + 0.9375;\n }\n else\n {\n return n1 * (x -= 2.625 / d1) * x + 0.984375;\n }\n }\n\n static ease_in_out_bounce(x)\n {\n return x < 0.5\n ? (1 - this.ease_out_bounce(1 - 2 * x)) / 2\n : (1 + this.ease_out_bounce(2 * x - 1)) / 2;\n }\n\n static heartbeat(t)\n {\n return 1.0 - Math.pow(Math.abs(Math.sin(t + 1.0)), 63.0) * Math.sign(Math.sin(t)) * Math.sin(t + 1.5 + 1.0) * 0.8;\n }\n}\n\nexport { EasingFunctions };\n","import { EasingFunctions } from '../utilities/EasingFunctions';\n\nclass ActionInterpolator\n{\n constructor(easing_function = 'linear')\n {\n this.easing_function = undefined;\n\n if (typeof easing_function === 'string')\n {\n this.easing_function = EasingFunctions[easing_function];\n }\n else\n {\n this.easing_function = easing_function;\n }\n }\n\n update(context, t)\n {\n\n }\n}\n\nexport { ActionInterpolator };\n","import { ActionInterpolator } from './ActionInterpolator';\nimport { OMath } from '../utilities/OMath';\n\nclass NumberInterpolator extends ActionInterpolator\n{\n constructor(attribute_name, from = 0, to = 1, initial = false, easing_function = 'linear')\n {\n super(easing_function);\n\n this.attribute_name = attribute_name;\n this.from = from;\n this.to = to;\n this.initial = initial;\n }\n\n update(context, t)\n {\n context[this.attribute_name] = OMath.lerp(this.from, this.to, this.easing_function(t));\n }\n\n evaluate(t)\n {\n return OMath.lerp(this.from, this.to, this.easing_function(t));\n }\n}\n\nexport { NumberInterpolator };\n","\nclass ActionEvent\n{\n constructor(name, method, args)\n {\n this.name = name;\n this.method = method;\n this.args = args;\n }\n\n trigger()\n {\n ViewApi.application[this.name][this.method](...this.args.split(','));\n }\n}\n\nexport { ActionEvent };\n","class DrawIOAnimationSheet\n{\n constructor()\n {\n\n }\n\n parse(xml_document)\n {\n const doc = new DOMParser().parseFromString(xml_document, 'text/xml');\n\n const animation_nodes = doc.querySelectorAll('mxGeometry');\n\n const animation_tracks = [];\n const triggers = [];\n\n for (let i = 0; i < animation_nodes.length; i++)\n {\n const node = animation_nodes[i];\n const parent_node = node.parentElement;\n const data = parent_node.getAttribute('value');\n\n const x_pos = this.get_node_x_position(node);\n\n const from = x_pos / 100;\n const duration = parseFloat(node.getAttribute('width')) / 100;\n\n // is trigger\n if (parent_node.getAttribute('style').includes('rhombus;'))\n {\n const split_data = data.split('.');\n const trigger_name = split_data[0];\n const trigger_method = split_data[1];\n\n triggers.push({\n name: trigger_name,\n method: trigger_method,\n at_time: from + duration * 0.5\n });\n }\n\n const valid_element = parent_node.getAttribute('style').includes('rounded=0;') &&\n !parent_node.getAttribute('style').includes('text;');\n\n if (valid_element && data !== '' && !data.includes(' '))\n {\n const split_data = data.split('=');\n\n const attribute_name = split_data[0];\n\n const value_data = split_data[1].split('--');\n const to_value = parseFloat(value_data[0]);\n const easing_function = value_data[1];\n\n if (split_data.length !== 2)\n {\n console.error('DrawIO data is malformed:', data);\n }\n\n if (value_data.length !== 2)\n {\n console.error('DrawIO data is malformed:', data);\n }\n\n animation_tracks.push({\n attribute_name: attribute_name,\n from_time: from,\n to_time: from + duration,\n to_value: to_value,\n easing_function: easing_function\n });\n }\n }\n\n animation_tracks.sort((a, b) =>\n {\n return a.from_time - b.from_time;\n });\n return {\n animation_tracks: animation_tracks,\n triggers: triggers\n };\n }\n\n get_node_x_position(node)\n {\n const x_pos = node.getAttribute('x');\n return x_pos === null ? 0 : parseFloat(x_pos);\n }\n}\n\nexport { DrawIOAnimationSheet };\n","import { ActionSequencer } from '../../action_sequencer/ActionSequencer';\nimport { NumberInterpolator } from '../../action_sequencer/NumberInterpolator';\nimport { ActionEvent } from '../../action_sequencer/ActionEvent';\nimport { DrawIOAnimationSheet } from './DrawIOAnimationSheet';\n\nclass ActionSequencerBuilder\n{\n constructor(default_state_data)\n {\n this.default_state_data = default_state_data;\n }\n\n from_animation_sheet(animation_data, current_context, initial_context)\n {\n initial_context = initial_context || this.default_state_data;\n const tracks = animation_data.animation_tracks;\n const triggers = animation_data.triggers;\n\n const initial_tracks = this.state_to_tracks(this.default_state_data, this.get_longest_time(animation_data.animation_tracks));\n\n for (let i = 0; i < initial_tracks.length; i++)\n {\n if (tracks.find(element => element.attribute_name === initial_tracks[i].attribute_name) === undefined)\n {\n tracks.push(initial_tracks[i]);\n }\n }\n\n const sequencer = new ActionSequencer(current_context);\n\n for (let i = 0; i < tracks.length; i++)\n {\n const t = tracks[i];\n const interpolator = new NumberInterpolator(\n t.attribute_name,\n current_context[t.attribute_name],\n t.to_value,\n t.initial,\n t.easing_function\n );\n\n sequencer.add_action_interpolator(t.from_time, t.to_time, interpolator, true);\n }\n\n for (let i = 0; i < triggers.length; i++)\n {\n const t = triggers[i];\n const action_event = new ActionEvent(t.name, t.method, t.args);\n sequencer.add_action_event(t.at_time, action_event);\n }\n\n return sequencer;\n }\n\n state_to_tracks(state, longest_time)\n {\n const tracks = [];\n\n const keys = Object.keys(state);\n\n for (let i = 0; i < keys.length; i++)\n {\n tracks.push({\n attribute_name: keys[i],\n from_time: 0,\n to_time: longest_time < 1 ? longest_time : 1,\n to_value: state[keys[i]],\n initial: true,\n easing_function: 'ease_in_out_cubic'\n });\n }\n\n return tracks;\n }\n\n from_draw_io(xml, context)\n {\n const transition_data = (new DrawIOAnimationSheet()).parse(xml);\n const tracks = transition_data.animation_tracks;\n const triggers = transition_data.triggers;\n const sequencer = new ActionSequencer(context);\n\n for (let i = 0; i < tracks.length; i++)\n {\n const t = tracks[i];\n const interpolator = new NumberInterpolator(\n t.attribute_name,\n context[t.attribute_name],\n t.to_value,\n t.initial,\n t.easing_function\n );\n\n sequencer.add_action_interpolator(t.from_time, t.to_time, interpolator, true);\n }\n\n for (let i = 0; i < triggers.length; i++)\n {\n const t = triggers[i];\n const action_event = new ActionEvent(t.name, t.method);\n sequencer.add_action_event(t.at_time, action_event);\n }\n\n return sequencer;\n }\n\n get_longest_time(tracks)\n {\n let longest_time = -1;\n\n for (let i = 0; i < tracks.length; i++)\n {\n const track = tracks[i];\n\n const track_time = track.to_time;\n\n longest_time = track_time > longest_time ? track_time : longest_time;\n }\n\n return longest_time;\n }\n}\n\nexport { ActionSequencerBuilder };\n","import { ActionSequencerBuilder } from './ActionSequencerBuilder';\n\nclass TransitionTable\n{\n constructor()\n {\n this.transitions = [];\n this.default_state_data = {};\n }\n\n get(from_state_name, to_state_name, current_context)\n {\n for (let i = 0; i < this.transitions.length; i++)\n {\n if (this.transitions[i].from === from_state_name && this.transitions[i].to === to_state_name)\n {\n const action_sequencer = new ActionSequencerBuilder(this.default_state_data).from_animation_sheet(this.transitions[i].data, current_context);\n return action_sequencer;\n }\n }\n\n for (let i = 0; i < this.transitions.length; i++)\n {\n if (this.transitions[i].to === to_state_name && this.transitions[i].from === undefined)\n {\n const action_sequencer = new ActionSequencerBuilder(this.default_state_data).from_animation_sheet(this.transitions[i].data, current_context);\n return action_sequencer;\n }\n }\n\n console.error('TransitionTable.get no data found for: ', from_state_name, to_state_name);\n return undefined;\n }\n\n add_transitions(transitions)\n {\n for (let i = 0; i < transitions.length; i++)\n {\n this.transitions.push(transitions[i]);\n }\n }\n\n set_transitions(transitions)\n {\n this.transitions = transitions;\n }\n\n set_default_state_data(default_state_data)\n {\n this.default_state_data = default_state_data;\n }\n}\n\nexport { TransitionTable };\n","import { Vector2 } from 'three';\nimport { Clock } from 'three';\n\nclass Time\n{\n constructor()\n {\n this.__delta_buffer = [0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016, 0.016];\n }\n\n init()\n {\n this.___time = new Clock();\n this.__delta_time = 0;\n this.__smooth_delta_time = 0;\n this.__elapsed_time = 0;\n this.__allocated_time = new Vector2(0, 0);\n this.__frame_interpolation_t = 0;\n this.fixed_delta_time = 1 / 30;\n }\n\n get elapsed_time()\n {\n return this.__elapsed_time;\n }\n\n get delta_time()\n {\n return this.__delta_time;\n }\n\n get smooth_delta_time()\n {\n return this.__smooth_delta_time;\n }\n\n get shader_time()\n {\n this.__allocated_time.x = this.delta_time;\n this.__allocated_time.y = this.elapsed_time;\n return this.__allocated_time;\n }\n\n get frame_interpolation()\n {\n return this.__frame_interpolation_t;\n }\n\n get fdt()\n {\n return this.fixed_delta_time;\n }\n\n get dt()\n {\n return this.delta_time;\n }\n\n get sdt()\n {\n return this.smooth_delta_time;\n }\n\n __set_frame_interpolation(value)\n {\n this.__frame_interpolation_t = value;\n }\n\n __update()\n {\n this.__delta_time = this.___time.getDelta();\n this.__elapsed_time = this.___time.getElapsedTime();\n\n this.__delta_buffer.shift();\n this.__delta_buffer.push(this.delta_time < 0.32 ? this.delta_time : 0.032);\n\n this.__calculate_smooth_delta_time();\n }\n\n __calculate_smooth_delta_time()\n {\n this.__smooth_delta_time = 0;\n\n for (let i = 0; i < this.__delta_buffer.length; i++)\n {\n this.__smooth_delta_time += this.__delta_buffer[i];\n }\n\n this.__smooth_delta_time = this.__smooth_delta_time / this.__delta_buffer.length;\n }\n}\n\nconst time = new Time();\nexport { time as Time };\n","class ViewState\n{\n constructor(name)\n {\n this.name = name;\n }\n\n start()\n {\n }\n\n before_enter()\n {\n }\n\n on_enter()\n {\n }\n\n before_exit()\n {\n }\n\n on_exit()\n {\n }\n\n before_update()\n {\n }\n\n update()\n {\n }\n\n fixed_update()\n {\n }\n\n update_enter_transition(global_view_data, transition_progress, action_sequencer)\n {\n }\n\n update_exit_transition(global_view_data, transition_progress, action_sequencer)\n {\n }\n}\n\nexport { ViewState };\n","import { Time } from '../../Time';\nimport { ViewState } from '../ViewState';\n\nclass ViewStateTransitionHandler\n{\n constructor(transition_table)\n {\n this.last_state = new ViewState();\n this.current_state = new ViewState();\n\n this.default_state_data = {};\n this.current_state_data = {};\n\n this.transition_table = transition_table;\n\n this.transitioning = false;\n }\n\n go_to_state(state, skip = false)\n {\n if (this.transitioning)\n {\n this.__exit_last_state();\n }\n\n this.last_state = this.current_state;\n this.current_state = state;\n\n this.last_state.before_exit();\n this.current_state.before_enter();\n\n this.action_sequencer = this.transition_table.get(this.last_state.name, this.current_state.name, this.current_state_data);\n this.action_sequencer.play();\n\n this.transitioning = true;\n\n if (skip)\n {\n this.action_sequencer.skip();\n this.update();\n }\n }\n\n update()\n {\n if (this.transitioning)\n {\n this.__update_transitions();\n\n if (this.action_sequencer.is_finished())\n {\n this.transitioning = false;\n\n this.__update_transitions();\n\n this.__exit_last_state();\n\n this.current_state.on_enter();\n }\n }\n else\n {\n this.current_state.update();\n }\n }\n\n before_update()\n {\n this.current_state.before_update();\n }\n\n fixed_update()\n {\n this.current_state.fixed_update();\n }\n\n set_state(state)\n {\n this.current_state = state;\n }\n\n set_default_state_data(default_state_data)\n {\n Object.assign(this.default_state_data, default_state_data);\n Object.assign(this.current_state_data, default_state_data);\n }\n\n __update_transitions()\n {\n this.action_sequencer.update(Time.delta_time);\n this.last_state.update_exit_transition(this.current_state_data, this.action_sequencer.get_progress(), this.action_sequencer);\n this.current_state.update_enter_transition(this.current_state_data, this.action_sequencer.get_progress(), this.action_sequencer);\n }\n\n __exit_last_state()\n {\n // if (this.last_state.name !== this.current_state.name)\n // {\n // this.last_state.hide();\n // }\n\n this.last_state.on_exit();\n }\n}\n\nexport { ViewStateTransitionHandler };\n","import { TransitionTable } from './transition/TransitionTable';\nimport { ViewStateTransitionHandler } from './transition/ViewStateTransitionHandler';\n\nclass TransitionManager\n{\n constructor()\n {\n this.transition_table = new TransitionTable();\n this.transition_handler = new ViewStateTransitionHandler(this.transition_table);\n }\n\n get action_sequencer()\n {\n return this.transition_handler.action_sequencer;\n }\n\n get current_state_data()\n {\n return this.transition_handler.current_state_data;\n }\n\n get_current_state()\n {\n return this.transition_handler.current_state;\n }\n\n go_to_state(state, skip = false)\n {\n this.transition_handler.go_to_state(state, skip);\n }\n\n before_update()\n {\n this.transition_handler.before_update();\n }\n\n update()\n {\n this.transition_handler.update();\n }\n\n fixed_update()\n {\n this.transition_handler.fixed_update();\n }\n\n add_transitions(transitions)\n {\n this.transition_table.add_transitions(transitions);\n }\n\n set_transitions(transitions)\n {\n this.transition_table.set_transitions(transitions);\n }\n\n set_state(state)\n {\n this.transition_handler.set_state(state);\n }\n\n set_default_state_data(default_state_data)\n {\n this.transition_table.set_default_state_data(default_state_data);\n this.transition_handler.set_default_state_data(default_state_data);\n }\n\n set_transitions_velocity(transitions_velocity)\n {\n this.transition_table.set_transitions_velocity(transitions_velocity);\n }\n}\n\nconst transition_manager = new TransitionManager();\nexport { transition_manager as TransitionManager };\n","import { TransitionManager } from './TransitionManager';\n\nclass ViewManager\n{\n constructor()\n {\n this.views = [];\n\n this.browser_title_suffix = '';\n }\n\n update()\n {\n this.__set_views_opacities();\n }\n\n go_to_view(view_name, change_url = true, skip = false)\n {\n const v = this.get(view_name);\n\n if (change_url)\n {\n this.__change_browser_url(v.url);\n this.__change_browser_title(v.url);\n }\n\n TransitionManager.go_to_state(v, skip);\n }\n\n go_to_scene(scene_name, change_url = false, skip = false)\n {\n const next_view = this.get(scene_name);\n const transition_view = this.get('transition');\n\n transition_view.set_next_view(next_view);\n this.go_to_view(transition_view.name, change_url, skip);\n }\n\n register_view(view)\n {\n this.views.push(view);\n }\n\n has_view(view_name)\n {\n for (let i = 0; i < this.views.length; i++)\n {\n if (this.views[i].name === view_name)\n {\n return true;\n }\n }\n return false;\n }\n\n set_view(view_name)\n {\n const view = this.get(view_name);\n\n TransitionManager.set_state(view);\n }\n\n set_browser_title_suffix(title_suffix)\n {\n this.browser_title_suffix = title_suffix;\n }\n\n get_current_view()\n {\n return TransitionManager.get_current_state();\n }\n\n get_view_by_name(view_name)\n {\n console.warn('DEPRECATED. Use ViewManager.get instead');\n this.get(view_name);\n }\n\n get(view_name)\n {\n for (let i = 0; i < this.views.length; i++)\n {\n if (this.views[i].name === view_name)\n {\n return this.views[i];\n }\n }\n console.error('[ViewManager.get] no view found for: ', view_name);\n return undefined;\n }\n\n get_by_url(url)\n {\n for (let i = 0; i < this.views.length; i++)\n {\n if (this.views[i].url === url)\n {\n return this.views[i];\n }\n }\n console.error('[ViewManager.get_by_url] no view found for: ', url);\n return undefined;\n }\n\n __change_browser_url(url)\n {\n window.history.pushState('', '', url);\n }\n\n __change_browser_title(name)\n {\n const title = this.__capitalize(name);\n\n document.title = title ? `${title} | ${this.browser_title_suffix}` : this.browser_title_suffix;\n }\n\n __set_views_opacities()\n {\n for (let i = 0; i < this.views.length; i++)\n {\n this.views[i].set_opacity(TransitionManager.current_state_data);\n }\n }\n\n __capitalize(string)\n {\n let aux_string = string.toUpperCase().replace('/', '');\n aux_string = this.__snake_to_whitespace(aux_string);\n\n return aux_string;\n }\n\n __snake_to_whitespace(string)\n {\n return string.replace(\n /([-_][A-Z])/g,\n (group) => group\n .replace('-', ' ')\n .replace('_', ' ')\n );\n }\n}\n\nconst view_manager = new ViewManager();\nexport { view_manager as ViewManager };\n","import { TransitionManager } from './TransitionManager';\nimport { ViewManager } from './ViewManager';\nimport { ViewState } from './ViewState';\n\nclass ApplicationView extends ViewState\n{\n constructor({ name, url, container, transition_data })\n {\n super(name);\n\n this.container = container;\n this.url = url;\n\n this.current_opacity = 0;\n\n transition_data = transition_data || {\n animation_tracks: [],\n triggers: []\n };\n\n const transitions = [\n {\n to: name,\n data: transition_data\n }\n ];\n\n ViewManager.register_view(this);\n TransitionManager.add_transitions(transitions);\n }\n\n before_enter()\n {\n this.container.classList.add('before_enter');\n this.container.classList.remove('before_exit');\n this.container.classList.remove('hidden');\n }\n\n on_enter()\n {\n this.container.classList.remove('before_enter');\n this.container.classList.remove('before_exit');\n this.container.classList.remove('hidden');\n }\n\n before_exit()\n {\n this.container.classList.add('before_exit');\n this.container.classList.remove('before_enter');\n this.container.classList.remove('hidden');\n }\n\n on_exit()\n {\n this.container.classList.add('hidden');\n this.container.classList.remove('before_enter');\n this.container.classList.remove('before_exit');\n }\n\n set_opacity(current_state_data)\n {\n const opacity = current_state_data[`${this.name}_opacity`];\n\n if (this.current_opacity > opacity || this.current_opacity < opacity)\n {\n this.current_opacity = opacity;\n\n this.container.style.opacity = this.current_opacity;\n }\n }\n}\n\nexport { ApplicationView };\n","class CameraManager\n{\n init()\n {\n this._current = undefined;\n // VR Spectator\n this._spectator = undefined;\n }\n\n set current(camera)\n {\n this._current = camera;\n }\n\n get current()\n {\n return this._current;\n }\n\n set spectator(camera)\n {\n this._spectator = camera;\n }\n\n get spectator()\n {\n return this._spectator;\n }\n}\n\nconst camera_manager = new CameraManager();\nexport { camera_manager as CameraManager };\n","import { CanvasTexture } from 'three';\nimport { Vector2 } from 'three';\nimport { UVMapping } from 'three';\nimport { ClampToEdgeWrapping } from 'three';\nimport { NearestFilter } from 'three';\n\nclass CanvasDrawer\n{\n constructor(uses_dynamic_font)\n {\n this.uses_dynamic_font = uses_dynamic_font;\n this.__textHeight = null;\n\n this.canvas = document.createElement('canvas');\n this.ctx = this.canvas.getContext('2d');\n }\n\n getFontHeight(fontStyle = 'Arial')\n {\n if (this.__textHeight == null || this.uses_dynamic_font)\n {\n const body = document.getElementsByTagName('body')[0];\n const dummy = document.createElement('div');\n const dummyText = document.createTextNode('MÉqgOLAKTAL');\n dummy.appendChild(dummyText);\n dummy.setAttribute('style', `font:${fontStyle};position:absolute;top:0;left:0`);\n body.appendChild(dummy);\n this.__textHeight = dummy.offsetHeight;\n body.removeChild(dummy);\n }\n return this.__textHeight;\n }\n\n get_text_size(text, font = '24px Arial')\n {\n const size = new Vector2();\n this.ctx.font = font;\n size.x = Math.ceil(this.ctx.measureText(text).width);\n size.y = Math.ceil(this.getFontHeight(font));\n return size;\n }\n\n draw_canvas(text, ctxOptions = {})\n {\n ctxOptions.font = ctxOptions.font || '24px Arial';\n ctxOptions.font_color = ctxOptions.font_color || '#000000';\n\n this.__draw(text, ctxOptions, this.canvas, this.ctx);\n return this.canvas;\n }\n\n draw_on_texture(text, ctxOptions)\n {\n const canvas = this.draw_canvas(text, ctxOptions);\n const canvas_texture = new CanvasTexture(canvas, UVMapping,\n ClampToEdgeWrapping,\n ClampToEdgeWrapping,\n NearestFilter,\n NearestFilter);\n canvas_texture.generateMipMaps = false;\n canvas_texture.needsUpdate = true;\n\n return canvas_texture;\n }\n\n __draw(text, ctxOptions)\n {}\n\n roundRect(ctx, x, y, width, height, radius, fill, stroke)\n {\n if (typeof stroke === 'undefined')\n {\n stroke = true;\n }\n if (typeof radius === 'undefined')\n {\n radius = 5;\n }\n if (typeof radius === 'number')\n {\n radius = { tl: radius, tr: radius, br: radius, bl: radius };\n }\n else\n {\n const defaultRadius = { tl: 0, tr: 0, br: 0, bl: 0 };\n for (const side in defaultRadius)\n {\n radius[side] = radius[side] || defaultRadius[side];\n }\n }\n ctx.beginPath();\n ctx.moveTo(x + radius.tl, y);\n ctx.lineTo(x + width - radius.tr, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + radius.tr);\n ctx.lineTo(x + width, y + height - radius.br);\n ctx.quadraticCurveTo(x + width, y + height, x + width - radius.br, y + height);\n ctx.lineTo(x + radius.bl, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - radius.bl);\n ctx.lineTo(x, y + radius.tl);\n ctx.quadraticCurveTo(x, y, x + radius.tl, y);\n ctx.closePath();\n if (fill)\n {\n ctx.fill();\n }\n if (stroke)\n {\n ctx.stroke();\n }\n }\n}\n\nexport { CanvasDrawer };\n","\nimport { CanvasDrawer } from './CanvasDrawer';\n\nimport { Vector2 } from 'three';\n\nclass SimpleTextDrawer extends CanvasDrawer\n{\n constructor()\n {\n super();\n this.text_margin = new Vector2(2, 0);\n }\n\n __draw(text, ctxOptions, canvas, ctx)\n {\n ctx.font = ctxOptions.font;\n\n const text_size = this.get_text_size(text, ctxOptions.font);\n // canvas.width = Math.ceilPowerOfTwo(text_size.x+this.text_margin.x*2);\n // canvas.height = Math.ceilPowerOfTwo(text_size.y+ this.text_margin.y*2);\n canvas.width = Math.ceil(text_size.x + this.text_margin.x * 2);\n canvas.height = Math.ceil(text_size.y + this.text_margin.y * 2);\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n // turn this on for debugging\n ctx.globalAlpha = 0.0;\n ctx.fillStyle = ctxOptions.font_color || '#000000';\n ctx.fillRect(0, 0, canvas.width, canvas.height);\n ctx.globalAlpha = 1;\n\n ctx.globalAlpha = 1;\n\n ctx.font = ctxOptions.font;\n ctx.fillStyle = ctxOptions.font_color || '#000000';\n ctx.textBaseline = 'middle';\n\n ctx.textAlign = ctxOptions.textAlign || 'center';\n if (ctx.textAlign === 'center')\n {\n ctx.fillText(text, canvas.width / 2, canvas.height / 2);\n }\n else\n {\n ctx.fillText(text, 0, canvas.height / 2);\n }\n }\n}\n\nexport { SimpleTextDrawer };\n","class Capabilities\n{\n init()\n {\n this.max_anisotropy = 0;\n this.vertex_texture_sampler_available = false;\n this.fp_textures_available = false;\n }\n}\n\nconst capabilities = new Capabilities();\nexport { capabilities as Capabilities };\n","\nimport { Object3D } from 'three';\nimport { LineBasicMaterial } from 'three';\nimport { AlwaysDepth } from 'three';\nimport { BufferGeometry } from 'three';\nimport { Vector3 } from 'three';\nimport { Line } from 'three';\n\nclass AxisHelper extends Object3D\n{\n constructor(scale = 1.0)\n {\n super();\n\n const blue_points = [];\n blue_points.push(new Vector3(0, 0, 0));\n blue_points.push(new Vector3(0, 0, 1000));\n\n const blue_axis_mat = new LineBasicMaterial({ color: 0x4444ff, depthFunc: AlwaysDepth });\n const blue_axis_geo = new BufferGeometry().setFromPoints(blue_points);\n const blue_axis_line = new Line(blue_axis_geo, blue_axis_mat);\n blue_axis_line.renderOrder = 50000;\n\n const green_points = [];\n green_points.push(new Vector3(0, 0, 0));\n green_points.push(new Vector3(0, 1000, 0));\n\n const green_axis_mat = new LineBasicMaterial({ color: 0x44ff44, depthFunc: AlwaysDepth });\n const green_axis_geo = new BufferGeometry().setFromPoints(green_points);\n const green_axis_line = new Line(green_axis_geo, green_axis_mat);\n green_axis_line.renderOrder = 50000;\n\n const red_points = [];\n red_points.push(new Vector3(0, 0, 0));\n red_points.push(new Vector3(1000, 0, 0));\n\n const red_axis_mat = new LineBasicMaterial({ color: 0xff4444, depthFunc: AlwaysDepth });\n const red_axis_geo = new BufferGeometry().setFromPoints(red_points);\n const red_axis_line = new Line(red_axis_geo, red_axis_mat);\n red_axis_line.renderOrder = 50000;\n\n this.renderOrder = 100000;\n\n this.add(blue_axis_line);\n this.add(green_axis_line);\n this.add(red_axis_line);\n\n this.scale.set(scale, scale, scale);\n }\n\n update()\n {\n }\n\n dispose()\n {\n }\n}\n\nexport { AxisHelper };\n","import { Scene } from 'three';\n\nclass SceneManager\n{\n init()\n {\n this._current = new Scene();\n this._current.name = 'default_scene';\n }\n\n add_scene(name)\n {\n\n }\n\n get current()\n {\n return this._current;\n }\n\n set current(scene)\n {\n this._current = scene;\n }\n\n dispose()\n {\n this.current.traverse(child =>\n {\n if (child.geometry)\n {\n child.geometry.dispose();\n child.material.dispose();\n }\n });\n\n while (this.current.children.length > 0)\n {\n this.current.remove(this.current.children[0]);\n }\n }\n}\n\nconst scene_manager = new SceneManager();\nexport { scene_manager as SceneManager };\n","\nimport { Vector3, Mesh } from 'three';\nimport { BoxGeometry } from 'three';\nimport { MeshBasicMaterial } from 'three';\n\nclass Cube extends Mesh\n{\n constructor(size, segments, color)\n {\n size = size || new Vector3(1, 1, 1);\n segments = segments || new Vector3(1, 1, 1);\n color = color || 0xff0000;\n const geometry = new BoxGeometry(size.x, size.y, size.z, segments.x, segments.y, segments.z);\n const material = new MeshBasicMaterial({ color: color });\n super(geometry, material);\n }\n}\n\nexport { Cube };\n","import { Mesh, MeshBasicMaterial, SphereGeometry } from 'three';\n\nclass Sphere extends Mesh\n{\n constructor(radius, color)\n {\n color = color || '#FF0000';\n radius = radius || 1;\n const geometry = new SphereGeometry(radius, 64, 64);\n const material = new MeshBasicMaterial({ color: color });\n super(geometry, material);\n }\n}\n\nexport { Sphere };\n","import { ConeGeometry, CylinderGeometry, Mesh, MeshBasicMaterial, Vector3 } from 'three';\n\nimport * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js';\n\nclass Arrow extends Mesh\n{\n constructor(color, length, dir)\n {\n color = color || '#FF0000';\n length = length || 1;\n\n const cone_height = 0.4;\n const cylinder_height = length - cone_height;\n const cylinder_geo = new CylinderGeometry(0.01, 0.01, cylinder_height, 32);\n cylinder_geo.translate(0, cylinder_height / 2, 0);\n\n const cone_geometry = new ConeGeometry(0.1, cone_height, 32);\n cone_geometry.translate(0, cylinder_height + cone_height / 2, 0);\n\n const buffer_geometry = BufferGeometryUtils.mergeGeometries([cylinder_geo, cone_geometry]);\n buffer_geometry.rotateX(3.14 / 2);\n\n const material = new MeshBasicMaterial({ color: color });\n super(buffer_geometry, material);\n\n if (dir)\n {\n this.quaternion.setFromUnitVectors(new Vector3(0, 0, 1), dir);\n }\n\n this._dir = dir;\n }\n\n set dir(dir)\n {\n this.quaternion.setFromUnitVectors(new Vector3(0, 0, 1), dir);\n this._dir = dir;\n }\n\n get dir()\n {\n return this._dir;\n }\n\n set length(value)\n {\n this.scale.z = value;\n }\n\n get length()\n {\n return this.scale.z;\n }\n}\n\nexport { Arrow };\n","import { Vector2 } from 'three';\n\nclass OScreen\n{\n init()\n {\n this.width = 1;\n this.height = 1;\n\n this.position = new Vector2();\n\n this.render_width = 1;\n this.render_height = 1;\n this.width_height = new Vector2(this.width, this.height);\n\n this.dpr = 1;\n this.pixel_size = new Vector2(1 / this.width, 1 / this.height);\n }\n\n update_position(x, y)\n {\n this.position.set(x, y);\n }\n\n update()\n {\n this.size_changed = false;\n }\n\n update_size(width, height)\n {\n this.width = width;\n this.height = height;\n\n this.pixel_size = new Vector2(1 / this.width, 1 / this.height);\n\n this.width_height.x = width;\n this.width_height.y = height;\n\n this.render_width = width * this.dpr;\n this.render_height = height * this.dpr;\n\n this.size_changed = true;\n }\n\n apply_pixel_density_v2(vector2)\n {\n vector2.multiplyScalar(1 / this.dpr);\n\n return vector2;\n }\n\n apply_pixel_density(value)\n {\n return value * (1 / this.dpr);\n }\n\n get_pixel_size()\n {\n return this.pixel_size;\n }\n\n get aspect_ratio()\n {\n return this.width / this.height;\n }\n\n get portrait()\n {\n return this.width < this.height;\n }\n}\n\nconst oscreen = new OScreen();\nexport { oscreen as OScreen };\n","import { BaseShaderMaterial } from './BaseShaderMaterial';\nimport { Vector2 } from 'three';\nclass ScreenSpaceTextureMaterial extends BaseShaderMaterial\n{\n constructor(x, y, w, h)\n {\n const vert = `\n uniform vec2 _ScreenSpacePosition;\n uniform vec2 _ScreenSize;\n uniform vec2 _TextureSize;\n varying vec2 vUv;\n void main()\n {\n vec2 pos = uv * vec2(_TextureSize.x / _ScreenSize.x, _TextureSize.y / _ScreenSize.y);\n pos += vec2(_ScreenSpacePosition.x / _ScreenSize.x, _ScreenSpacePosition.y / _ScreenSize.y);\n\n pos.x = pos.x * 2.0 - 1.0;\n pos.y = pos.y * 2.0 - 1.0;\n\n gl_Position = vec4(pos, 0.0, 1.0);\n vUv = uv;\n }\n `;\n const frag = `\n uniform sampler2D _MainTex;\n varying vec2 vUv;\n\n void main()\n {\n gl_FragColor = texture2D(_MainTex, vUv);\n }\n `;\n super(vert, frag, {\n _MainTex: { value: undefined },\n _ScreenSpacePosition: { value: new Vector2() },\n _ScreenSize: { value: new Vector2() },\n _TextureSize: { value: new Vector2() }\n });\n }\n\n set_position(x, y)\n {\n this.uniforms._ScreenSpacePosition.value.set(x, y);\n }\n\n set_texture(tex, w, h)\n {\n this.uniforms._MainTex.value = tex;\n this.uniforms._TextureSize.value.set(tex.image.width, tex.image.height);\n\n if (w !== undefined)\n {\n this.uniforms._TextureSize.value.x = w;\n }\n if (h !== undefined)\n {\n this.uniforms._TextureSize.value.y = h;\n }\n }\n\n set_screen_size(w, h)\n {\n this.uniforms._ScreenSize.value.set(w, h);\n }\n}\n\nexport { ScreenSpaceTextureMaterial };\n","import { Color } from 'three';\nimport { PerspectiveCamera as TPerspectiveCamera } from 'three';\n\nclass PerspectiveCamera extends TPerspectiveCamera\n{\n constructor(fov, aspect, near, far)\n {\n super(fov, aspect, near, far);\n\n this.clear_color = new Color('#000000');\n this.clear_alpha = 1;\n }\n\n copy(camera)\n {\n super.copy(camera);\n this.clear_color.copy(camera.clear_color);\n this.clear_alpha = camera.clear_alpha;\n return this;\n }\n}\n\nexport { PerspectiveCamera };\n","import { AxisHelper } from './components/AxisHelper';\n\nimport { SceneManager } from './SceneManager';\nimport { Cube } from './primitives/Cube';\nimport { Sphere } from './primitives/Sphere';\nimport { Arrow } from './primitives/Arrow';\nimport { OScreen } from './OScreen';\nimport { ScreenSpaceTextureMaterial } from './materials/ScreenSpaceTextureMaterial';\nimport { PerspectiveCamera } from './PerspectiveCamera';\n\nimport { Vector3 } from 'three';\nimport { LineBasicMaterial } from 'three';\nimport { BufferGeometry } from 'three';\nimport { Line } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { ShaderMaterial } from 'three';\nimport { Vector4 } from 'three';\nimport { Mesh } from 'three';\nimport { Box3 } from 'three';\nimport { Box3Helper } from 'three';\nimport { Scene } from 'three';\nimport { CatmullRomCurve3 } from 'three';\nimport { SphereGeometry } from 'three';\nimport { MeshBasicMaterial } from 'three';\n\nimport basic_color_vert from './shaders/basic_color/basic_color.vert';\nimport basic_color_frag from './shaders/basic_color/basic_color.frag';\nimport { CameraManager } from './CameraManager';\n\nclass Debug\n{\n init()\n {\n this.Vector3_one = new Vector3(1, 1, 1);\n this.Vector3_zero = new Vector3(0, 0, 0);\n this.canvas_renderer = undefined;\n\n this.display_texture_meshes = [];\n\n this.ctx = undefined;\n this.scene = new Scene();\n this.camera = new PerspectiveCamera(60, OScreen.aspect_ratio, 0.1, 1000);\n this.camera.clear_alpha = 0;\n }\n\n draw_arrow(origin, dir, color = 0xff0000)\n {\n const arrow = new Arrow(color, dir.length(), dir.clone().normalize());\n arrow.position.copy(origin);\n this.scene.add(arrow);\n return arrow;\n }\n\n draw_axis()\n {\n const axis = new AxisHelper();\n this.scene.add(axis);\n return axis;\n }\n\n set_debug_RT(RT)\n {\n this.rt_debug = RT;\n }\n\n draw_rectangle(position_2d, width, height, color)\n {\n width = width || 100;\n height = height || 100;\n this.ctx.fillStyle = color || 'rgba(255, 0, 0, 1)';\n this.ctx.fillRect(position_2d.x - width / 2,\n (this.ctx.canvas.height - position_2d.y) - height / 2, width, height);\n }\n\n clear()\n {\n if (this.ctx)\n {\n this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);\n }\n }\n\n draw_line_2D(from, to, color)\n {\n this.ctx.strokeStyle = color || 'rgba(255, 0, 0, 1)';\n this.ctx.beginPath();\n this.ctx.moveTo(from.x, from.y);\n this.ctx.lineTo(to.x, to.y);\n this.ctx.closePath();\n this.ctx.stroke();\n }\n\n draw_line(points, color = 0xff0000)\n {\n const material = new LineBasicMaterial({\n color: color\n });\n\n const geometry = new BufferGeometry().setFromPoints(points);\n\n const line = new Line(geometry, material);\n line.frustumCulled = false;\n this.scene.add(line);\n return line;\n }\n\n draw_cube(pos, size, color)\n {\n size = size || 1;\n color = color || 0xff0000;\n pos = pos || new Vector3();\n\n const cube = new Cube(new Vector3(size, size, size), undefined, color);\n cube.position.copy(pos);\n this.scene.add(cube);\n return cube;\n }\n\n draw_oriented_cube(from, to, height = 1, color = '#FF0000', depth = 0.1)\n {\n const size = from.distanceTo(to);\n const cube = new Cube(new Vector3(depth, height, size), undefined, color);\n\n const center = to.clone().sub(from).multiplyScalar(0.5);\n const forward_dir = center.clone().normalize();\n center.add(from);\n\n cube.position.copy(center);\n\n // let up = new Vector3(0, 1, 0);\n // let forward = forward_dir.clone();\n // let right = forward.clone().cross(up);\n\n // cube.quaternion.setFromRotationMatrix(new Matrix4().makeBasis(right,up,forward));\n cube.quaternion.setFromUnitVectors(new Vector3(0, 0, -1), forward_dir);\n\n this.scene.add(cube);\n return cube;\n }\n\n draw_plane(width, height, color)\n {\n const geometry = new PlaneGeometry(width, height);\n const material = new ShaderMaterial({\n uniforms: {\n _Color: { value: new Vector4(0, 1, 0, 0.2) }\n },\n vertexShader: basic_color_vert,\n fragmentShader: basic_color_frag,\n transparent: true,\n depthWrite: false\n });\n\n const plane = new Mesh(geometry, material);\n plane.renderOrder = -10000;\n this.scene.add(plane);\n return plane;\n }\n\n draw_empty_cube(pos, size, color)\n {\n size = size || 1;\n color = color || 0xff0000;\n\n const box = new Box3().setFromCenterAndSize(new Vector3(), new Vector3(size, size, size));\n const helper = new Box3Helper(box, color);\n helper.position.copy(pos || new Vector3());\n return helper;\n }\n\n draw_sphere(pos, size, color)\n {\n size = size || 1;\n color = color || 0xff0000;\n pos = pos || new Vector3();\n\n const sphere = new Sphere(size, color);\n sphere.position.copy(pos);\n this.scene.add(sphere);\n return sphere;\n }\n\n draw_point_array(input_points, open = false, color = 0xff0000)\n {\n const catmull = new CatmullRomCurve3(input_points, open);\n catmull.updateArcLengths();\n const points = catmull.getSpacedPoints(200);\n const line_helper = this.draw_line(points, 0x00ff00);\n // line_helper.position.y = 1.5;\n return line_helper;\n }\n\n draw_sphere_helper(sphere, color)\n {\n color = color || 0xff0000;\n const geometry = new SphereGeometry(sphere.radius, 32, 32);\n const material = new MeshBasicMaterial({ color: color });\n const sphere_mesh = new Mesh(geometry, material);\n sphere_mesh.position.copy(sphere.center);\n SceneManager.current.add(sphere_mesh);\n return sphere_mesh;\n }\n\n draw_math_sphere(sphere)\n {\n const geometry = new SphereGeometry(sphere.radius, 32, 32);\n const material = new ShaderMaterial({\n uniforms: {\n _Color: { value: new Vector4(1, 0, 0, 0.2) }\n },\n vertexShader: basic_color_vert,\n fragmentShader: basic_color_frag,\n transparent: true\n });\n // var material = new MeshBasicMaterial( {color: 0xff0000, transparent = true} );\n const sphere1 = new Mesh(geometry, material);\n sphere1.position.copy(sphere.center);\n SceneManager.current.add(sphere1);\n }\n\n draw_bounding_box(bb)\n {\n const helper = new Box3Helper(bb, 0xffff00);\n SceneManager.current.add(helper);\n }\n\n draw_curve(curve, options)\n {\n const offset = new Vector3(0, 0, 0);\n if (options)\n {\n offset.y = options.offset || 0;\n }\n\n for (let i = 0; i < curve.length - 1; i++)\n {\n this.draw_line(curve[i].clone().add(offset), curve[i + 1].clone().add(offset));\n }\n }\n\n draw_texture(tex, w, h)\n {\n const mesh = new Mesh(new PlaneGeometry(1, 1), new ScreenSpaceTextureMaterial());\n this.display_texture_meshes.push(mesh);\n this.scene.add(mesh);\n\n mesh.material.set_texture(tex, w, h);\n return mesh;\n }\n\n render(graphics)\n {\n for (let i = 0; i < this.display_texture_meshes.length; i++)\n {\n this.display_texture_meshes[i].material.set_screen_size(OScreen.width, OScreen.height);\n }\n if (this.scene.children.length > 0)\n {\n graphics.render(this.scene, CameraManager.current);\n }\n }\n}\n\nconst debug = new Debug();\nexport { debug as Debug };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport { Scene } from 'three';\nimport { Mesh } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { OrthographicCamera } from 'three';\n\nclass Blitter\n{\n constructor(renderer)\n {\n this.renderer = renderer;\n this._blit_scene = new Scene();\n this._blit_material = new BlitMaterial();\n this._blit_quad = new Mesh(\n new PlaneGeometry(1, 1), this._blit_material);\n this._blit_scene.add(this._blit_quad);\n this._blit_camera = new OrthographicCamera(-1, 1, 1, -1, -10000, 10000);\n }\n\n blit(src, dst)\n {\n this._blit_quad.material = this._blit_material;\n\n const src_texture = src.isWebGLRenderTarget === true ? src.texture : src;\n const src_width = src.isWebGLRenderTarget === true ? src.width : src.image.width;\n const src_height = src.isWebGLRenderTarget === true ? src.height : src.image.height;\n\n this._blit_quad.material.uniforms._MainTex.value = src_texture;\n this._blit_quad.material.uniforms._Resolution.value.set(src_width, src_height);\n\n if (dst)\n {\n this._blit_quad.material.uniforms._TargetResolution.value.set(dst.width, dst.height);\n }\n else\n {\n this.renderer.getSize(this._blit_quad.material.uniforms._TargetResolution.value);\n }\n\n this.__render(dst);\n }\n\n material_pass(mat, dst)\n {\n this._blit_quad.material = mat;\n // this._blit_quad.material.uniforms._MainTex.value = undefined;\n // this._blit_quad.material.uniforms._Resolution.value.set(1, 1);\n\n this.__render(dst);\n }\n\n blit_with_material(src, dst, mat)\n {\n const src_texture = src.isWebGLRenderTarget === true ? src.texture : src;\n const src_width = src.isWebGLRenderTarget === true ? src.width : src.image.width;\n const src_height = src.isWebGLRenderTarget === true ? src.height : src.image.height;\n\n this._blit_quad.material = mat;\n this._blit_quad.material.uniforms._MainTex.value = src_texture;\n this._blit_quad.material.uniforms._Resolution.value.set(src_width, src_height);\n\n if (dst)\n {\n this._blit_quad.material.uniforms._TargetResolution.value.set(dst.width, dst.height);\n }\n else\n {\n this.renderer.getSize(this._blit_quad.material.uniforms._TargetResolution.value);\n }\n\n this.__render(dst);\n }\n\n blit_clear_with_material(dst_RT, mat)\n {\n this._blit_quad.material = mat;\n\n this.__render(dst_RT);\n }\n\n dispose()\n {\n this._blit_quad.geometry.dispose();\n this._blit_quad.material.dispose();\n }\n\n __render(RT)\n {\n RT = RT === undefined ? null : RT;\n\n const current_rt = this.renderer.getRenderTarget();\n\n this.renderer.setRenderTarget(RT === undefined ? null : RT);\n this.renderer.render(this._blit_scene, this._blit_camera);\n\n this.renderer.setRenderTarget(current_rt);\n }\n}\n\nexport { Blitter };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/clear/clear_depth_normal.frag';\n\nimport { Vector4 } from 'three';\n\nclass ClearDepthNormalMaterial extends BlitMaterial\n{\n constructor(clear_depth, clear_normal)\n {\n super(frag);\n this.uniforms._DepthNormal = { value: new Vector4(clear_depth, clear_normal.x, clear_normal.y, clear_normal.z) };\n }\n}\n\nexport { ClearDepthNormalMaterial };\n","import vert from '../shaders/depth_normals/depth_normals.vert';\nimport frag from '../shaders/depth_normals/depth_normals.frag';\n\nimport { ShaderMaterial } from 'three';\n\nclass DepthNormalMaterial extends ShaderMaterial\n{\n constructor()\n {\n super({\n uniforms: {\n _FarPlane: { value: 1 }\n },\n vertexShader: vert,\n fragmentShader: frag\n });\n }\n\n set far_plane(value)\n {\n this.uniforms._FarPlane.value = value;\n }\n\n get far_plane()\n {\n return this.uniforms._FarPlane.value;\n }\n}\n\nexport { DepthNormalMaterial };\n","import { CameraManager } from '../CameraManager';\nimport { OScreen } from '../OScreen';\n\nimport { ClearDepthNormalMaterial } from '../materials/ClearDepthNormalMaterial';\nimport { DepthNormalMaterial } from '../materials/DepthNormalMaterial';\n\nimport { WebGLRenderTarget } from 'three';\nimport { Vector3 } from 'three';\n\nclass DepthAndNormalsRenderer\n{\n constructor()\n {\n this.RT = new WebGLRenderTarget(OScreen.width, OScreen.height);\n\n this.clear_depth_normal_mat = new ClearDepthNormalMaterial(1, new Vector3(0, 0, 1));\n this.depth_normal_material = new DepthNormalMaterial();\n }\n\n render(graphics)\n {\n this.__resize_RT_if_necessary();\n\n graphics.clear(this.RT, undefined, true, true);\n\n graphics.blit_clear_with_material(this.RT, this.clear_depth_normal_mat);\n\n this.depth_normal_material.far_plane = CameraManager.current.far;\n\n graphics.render(undefined, undefined, this.RT, this.depth_normal_material);\n }\n\n __resize_RT_if_necessary()\n {\n if (this.RT.width !== OScreen.width || this.RT.height !== OScreen.height)\n {\n this.RT.setSize(OScreen.width, OScreen.height);\n }\n }\n\n get render_target()\n {\n return this.RT;\n }\n}\n\nexport { DepthAndNormalsRenderer };\n","import { CameraManager } from './CameraManager';\nimport { Capabilities } from './Capabilities';\nimport { OScreen } from './OScreen';\nimport { SceneManager } from './SceneManager';\n\nimport { BaseRender } from './render_mode/BaseRender';\nimport { Blitter } from './render_utilities/Blitter';\nimport { DepthAndNormalsRenderer } from './render_utilities/DepthAndNormalsRenderer';\n\nimport {\n AlwaysDepth,\n FloatType,\n LinearSRGBColorSpace,\n NearestFilter,\n NoBlending,\n RGBAFormat,\n ShaderMaterial,\n WebGLRenderTarget\n} from 'three';\n\nimport { WebGLRenderer } from 'three';\n\nclass Graphics\n{\n init({ canvas, core_attributes, context_attributes, threejs_attributes, dpr })\n {\n this._renderer = undefined;\n this.blitter = undefined;\n this.canvas = undefined;\n this.no_render = undefined;\n this.current_render_mode = undefined;\n this.generateDepthNormalTexture = false;\n this.depth_and_normals_renderer = undefined;\n\n this.is_webgl2 = false;\n this.canvas_context = undefined;\n this.context_attributes = undefined;\n\n this.core_attributes = {\n force_webgl2: true,\n xr_enabled: false\n };\n\n this.context_attributes = {\n alpha: true,\n antialias: false,\n depth: true,\n desynchronized: false,\n failIfMajorPerformanceCaveat: false,\n powerPreference: 'high-performance',\n premultipliedAlpha: true,\n preserveDrawingBuffer: true,\n stencil: false\n };\n\n this.threejs_attributes = {\n logarithmicDepthBuffer: false\n };\n\n Object.assign(this.core_attributes, core_attributes);\n Object.assign(this.context_attributes, context_attributes);\n\n Object.assign(this.threejs_attributes, this.context_attributes);\n Object.assign(this.threejs_attributes, threejs_attributes);\n\n if (this.core_attributes.force_webgl2)\n {\n this.canvas_context = canvas.getContext('webgl2', this.context_attributes) ||\n canvas.getContext('webgl', this.context_attributes) ||\n canvas.getContext('experimental-webgl', this.context_attributes);\n }\n else\n {\n this.canvas_context = canvas.getContext('webgl', this.context_attributes) ||\n canvas.getContext('experimental-webgl', this.context_attributes);\n }\n\n this.is_webgl2 = this.canvas_context.constructor.name === 'WebGL2RenderingContext';\n\n // console.log(`Using WebGL ${this.is_webgl2 ? 2 : 1}`);\n\n this.threejs_attributes.canvas = canvas;\n this.threejs_attributes.context = this.canvas_context;\n\n this._renderer = new WebGLRenderer(this.threejs_attributes);\n\n if (this.core_attributes.xr_enabled)\n {\n this._renderer.xr.enabled = true;\n }\n else\n {\n this._renderer.autoClear = false;\n }\n\n OScreen.dpr = dpr;\n this._renderer.setPixelRatio(1);\n\n if (!this.is_webgl2)\n {\n this._renderer.extensions.get('ANGLE_instanced_arrays');\n }\n\n this.blitter = new Blitter(this._renderer);\n\n this.canvas = this._renderer.domElement;\n\n this.no_render = new BaseRender();\n\n this.current_render_mode = this.no_render;\n\n Capabilities.max_anisotropy = this._renderer.capabilities.getMaxAnisotropy();\n Capabilities.vertex_texture_sampler_available = this._renderer.capabilities.maxVertexTextures > 0;\n Capabilities.fp_textures_available = this.is_floating_point_texture_available();\n\n this.generateDepthNormalTexture = false;\n\n this.depth_and_normals_renderer = new DepthAndNormalsRenderer();\n }\n\n get dom_element()\n {\n return this._renderer.domElement;\n }\n\n get depth_normals_RT()\n {\n return this.depth_and_normals_renderer.render_target;\n }\n\n set_state(new_state)\n {\n // console.log('VIEWAPI - map render mode switch to: ' + new_state.constructor.name);\n\n this.current_render_mode.on_exit(this, this._renderer);\n this.current_render_mode = new_state;\n this.current_render_mode.on_enter(this, this._renderer);\n }\n\n update()\n {\n if (this.generateDepthNormalTexture)\n {\n this.depth_and_normals_renderer.render(this);\n }\n\n this.__update_current_camera();\n\n if (CameraManager.current)\n {\n this.current_render_mode.render();\n }\n\n OScreen.update();\n }\n\n __update_current_camera()\n {\n if (CameraManager.current)\n {\n CameraManager.current.aspect = OScreen.aspect_ratio;\n CameraManager.current.updateProjectionMatrix();\n CameraManager.current.updateMatrix();\n CameraManager.current.updateMatrixWorld(true);\n }\n }\n\n render(scene, camera, RT, override_mat)\n {\n this.__apply_override_material(scene, override_mat);\n\n this._renderer.setRenderTarget(RT === undefined ? null : RT);\n this._renderer.render(scene || SceneManager.current,\n camera || CameraManager.current);\n\n this.__apply_override_material(scene, undefined);\n }\n\n compile(scene, camera, RT, override_mat)\n {\n this.__apply_override_material(scene, override_mat);\n\n this._renderer.setRenderTarget(RT === undefined ? null : RT);\n this._renderer.compile(scene || SceneManager.current,\n camera || CameraManager.current);\n\n this.__apply_override_material(scene, undefined);\n }\n\n async compile_async(scene, camera, RT, override_mat, target_scene)\n {\n this.__apply_override_material(scene, override_mat);\n\n this._renderer.setRenderTarget(RT === undefined ? null : RT);\n const promise = this._renderer.compileAsync(scene || SceneManager.current,\n camera || CameraManager.current, target_scene);\n\n this.__apply_override_material(scene, undefined);\n\n return promise;\n }\n\n render_scene(scene)\n {\n if (scene.on_pre_render)\n {\n scene.on_pre_render();\n }\n\n if (scene.render)\n {\n scene.render();\n }\n else\n {\n this.render(scene, undefined);\n }\n\n if (scene.on_post_render)\n {\n scene.on_post_render();\n }\n }\n\n __apply_override_material(scene, mat)\n {\n mat = mat === undefined ? null : mat;\n if (scene)\n {\n scene.overrideMaterial = mat;\n }\n else\n {\n SceneManager.current.overrideMaterial = mat;\n }\n }\n\n readback_RT(RT, buffer)\n {\n this._renderer.readRenderTargetPixels(RT, 0, 0, RT.width, RT.height, buffer);\n }\n\n clear(RT, camera, clear_depth, clear_stencil)\n {\n this._renderer.setRenderTarget(RT === undefined ? null : RT);\n\n if (camera)\n {\n this._renderer.setClearColor(camera.clear_color, camera.clear_alpha);\n }\n\n this._renderer.clear(!!camera, // clear color\n !!clear_depth,\n !!clear_stencil);\n }\n\n on_resize(entries, dpr)\n {\n for (const entry of entries)\n {\n OScreen.dpr = dpr;\n // this._renderer.setPixelRatio(dpr);\n\n OScreen.update_position(entry.contentRect.x, entry.contentRect.y);\n OScreen.update_size(entry.contentRect.width, entry.contentRect.height);\n\n this.canvas.width = OScreen.render_width;\n this.canvas.height = OScreen.render_height;\n\n this._renderer.setViewport(0, 0, OScreen.render_width, OScreen.render_height);\n\n this.__update_current_camera();\n }\n }\n\n material_pass(mat, dst)\n {\n this.blitter.material_pass(mat, dst);\n }\n\n blit(src_RT, dst_RT, mat)\n {\n if (mat)\n {\n this.blitter.blit_with_material(src_RT, dst_RT, mat);\n }\n else\n {\n this.blitter.blit(src_RT, dst_RT);\n }\n }\n\n blit_clear_with_material(dst_RT, mat)\n {\n this.blitter.blit_clear_with_material(dst_RT, mat);\n }\n\n take_screenshot(blob_callback, width = OScreen.width, height = OScreen.height)\n {\n // const ctx = this;\n\n const old_width = OScreen.width;\n const old_height = OScreen.height;\n\n const new_width = width;\n const new_height = height;\n\n const tile_width = 1024;\n const tile_height = 1024;\n\n const divisions_x = parseInt(Math.ceil(new_width / tile_width));\n const divisions_y = parseInt(Math.ceil(new_height / tile_height));\n\n OScreen.update_size(tile_width, tile_height);\n const old_dpr = this._renderer.getPixelRatio();\n this._renderer.setPixelRatio(1);\n\n this._renderer.setSize(tile_width, tile_height, false);\n\n const canvas_2d = document.createElement('canvas');\n const ctx_2D = canvas_2d.getContext('2d');\n\n ctx_2D.canvas.width = new_width;\n ctx_2D.canvas.height = new_height;\n\n CameraManager.current.aspect = OScreen.aspect_ratio;\n CameraManager.current.updateMatrix();\n CameraManager.current.updateMatrixWorld(true);\n\n for (let x = 0; x < divisions_x; x++)\n {\n for (let y = 0; y < divisions_y; y++)\n {\n CameraManager.current.setViewOffset(new_width, new_height,\n OScreen.width * x, OScreen.height * y,\n OScreen.width, OScreen.height);\n this.current_render_mode.render();\n\n ctx_2D.drawImage(this._renderer.domElement, OScreen.width * x, OScreen.height * y);\n }\n }\n\n // transform the result canvas into a blob\n // } from them the callback turns into a ULR and download it\n ctx_2D.canvas.toBlob(blob_callback, 'image/png;base64;');\n\n CameraManager.current.clearViewOffset();\n\n OScreen.update_size(old_width, old_height);\n this._renderer.setPixelRatio(old_dpr);\n this._renderer.setSize(old_width, old_height, false);\n\n CameraManager.current.aspect = OScreen.aspect_ratio;\n CameraManager.current.updateMatrix();\n CameraManager.current.updateMatrixWorld(true);\n }\n\n download_screenshot(blob)\n {\n const link = document.createElement('a');\n link.download = 'Snapshot.png';\n\n link.href = URL.createObjectURL(blob);\n link.click();\n\n link.onclick = function()\n {\n requestAnimationFrame(function()\n {\n URL.revokeObjectURL(link.href);\n });\n link.removeAttribute('href');\n };\n }\n\n dispose()\n {\n this._renderer.dispose();\n this.current_render_mode.dispose();\n this.blitter.dispose();\n }\n\n is_floating_point_texture_available()\n {\n const RT = new WebGLRenderTarget(1, 1, {\n minFilter: NearestFilter,\n magFilter: NearestFilter,\n format: RGBAFormat,\n colorSpace: LinearSRGBColorSpace,\n type: FloatType,\n stencilBuffer: false,\n depthBuffer: false\n });\n\n const vert = `\n void main()\n {\n gl_Position = vec4(uv * 2.0 - 1.0, 1.0, 1.0);\n }\n `;\n const frag = `\n void main()\n {\n gl_FragColor = vec4(0.0, 4865.35, 0.0, 1.0);\n }\n `;\n\n const mat = new ShaderMaterial({\n vertexShader: vert,\n fragmentShader: frag,\n depthWrite: false,\n blending: NoBlending,\n depthTest: false,\n depthFunc: AlwaysDepth\n });\n\n this.material_pass(mat, RT);\n\n const output = new Float32Array(4);\n this._renderer.readRenderTargetPixels(RT, 0, 0, 1, 1, output);\n\n return Math.abs(output[1] - 4865.35) < 0.001;\n }\n}\n\nconst graphics = new Graphics();\nexport { graphics as Graphics };\n","class Idle\n{\n constructor()\n {\n }\n\n get is_animating()\n {\n return false;\n }\n\n on_enter(view)\n {\n\n }\n\n update(view)\n {\n }\n\n on_exit(view)\n {\n\n }\n}\n\nexport { Idle };\n","import { Time } from '../../Time';\nimport { Idle } from './Idle';\n\nimport { OMath } from '../../utilities/OMath';\nclass Animating\n{\n constructor()\n {\n this.t = 0;\n this.easing_function_t = 0;\n }\n\n get is_animating()\n {\n return true;\n }\n\n on_enter(animator)\n {\n }\n\n update(animator)\n {\n this.t += Time.delta_time / animator.duration;\n\n this.easing_function_t = animator.easing_function(this.t);\n this.easing_function_t = OMath.clamp(this.easing_function_t, 0, 1);\n\n animator.set_property_value(OMath.lerp(animator.from, animator.to, this.easing_function_t));\n\n if (this.easing_function_t >= 0.9999)\n {\n animator.set_property_value(animator.to);\n\n animator.set_current_state(new Idle());\n animator.finished_callback(animator);\n }\n }\n\n on_exit(view)\n {\n\n }\n}\n\nexport { Animating };\n","import { Animating } from './css_animator_states/Animating';\nimport { Idle } from './css_animator_states/Idle';\nimport { EasingFunctions } from '../utilities/EasingFunctions';\n\nclass CSSAnimator\n{\n constructor({\n element,\n css_property,\n from = 0,\n to = 1,\n duration = 1,\n value_prefix = '',\n value_suffix = '',\n easing_function = EasingFunctions.ease_in_out_cubic,\n finished_callback = () =>\n {}\n })\n {\n this.element = element;\n this.css_property = css_property;\n this.from = from;\n this.to = to;\n this.value_prefix = value_prefix;\n this.value_suffix = value_suffix;\n this.duration = duration;\n this.easing_function = easing_function;\n this.finished_callback = finished_callback;\n\n this.current_state = new Idle();\n }\n\n animate()\n {\n this.set_current_state(new Animating());\n }\n\n stop()\n {\n this.set_current_state(new Idle());\n }\n\n set_property_value(value)\n {\n this.element.style[this.css_property] = `${this.value_prefix}${value}${this.value_suffix}`;\n }\n\n update()\n {\n this.current_state.update(this);\n }\n\n get is_animating()\n {\n return this.current_state.is_animating;\n }\n\n set_current_state(state)\n {\n this.current_state.on_exit(this);\n this.current_state = state;\n this.current_state.on_enter(this);\n }\n}\n\nexport { CSSAnimator };\n","\nclass OS\n{\n init()\n {\n this.operating_systems = {\n ANDROID: 'android',\n IOS: 'ios',\n LINUX: 'linux',\n MAC: 'mac',\n WINDOWS: 'windows'\n };\n\n this.is_mobile = !!(navigator.userAgent.match(/(iPhone|iPod|iPad|Android|playbook|silk|BlackBerry|BB10|Windows Phone|Tizen|Bada|webOS|IEMobile|Opera Mini)/));\n this.is_ipad = !!(navigator.userAgent.match(/Mac/) && navigator.maxTouchPoints && navigator.maxTouchPoints > 2);\n this.is_ios = !!navigator.userAgent.match(/(iPhone|iPod|iPad)/) || this.is_ipad;\n\n this.is_android = this.get_os() === this.operating_systems.ANDROID;\n this.is_linux = this.get_os() === this.operating_systems.LINUX;\n this.is_mac = this.get_os() === this.operating_systems.MAC;\n this.is_windows = this.get_os() === this.operating_systems.WINDOWS;\n }\n\n get_os()\n {\n const userAgent = window.navigator.userAgent;\n const platform = window.navigator.platform;\n const macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'];\n const windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'];\n const iosPlatforms = ['iPhone', 'iPad', 'iPod'];\n let os = null;\n\n if (macosPlatforms.indexOf(platform) !== -1)\n {\n os = this.operating_systems.MAC;\n }\n else if (iosPlatforms.indexOf(platform) !== -1)\n {\n os = this.operating_systems.IOS;\n }\n else if (windowsPlatforms.indexOf(platform) !== -1)\n {\n os = this.operating_systems.WINDOWS;\n }\n else if (/Android/.test(userAgent))\n {\n os = this.operating_systems.ANDROID;\n }\n else if (!os && /Linux/.test(platform))\n {\n os = this.operating_systems.LINUX;\n }\n\n return os;\n }\n}\n\nconst os = new OS();\nexport { os as OS };\n","import { Vector3 } from 'three';\n\nclass ReflectionPlaneContext\n{\n init()\n {\n this.target_geometry = undefined;\n this.target_position = new Vector3();\n }\n\n set_target_geometry(geometry)\n {\n this.target_geometry = geometry;\n }\n}\n\nconst reflection_plane_context = new ReflectionPlaneContext();\nexport { reflection_plane_context as ReflectionPlaneContext };\n","import { DataTexture, FloatType, Mesh, RGBAFormat, ShaderMaterial, Vector2 } from 'three';\n\nclass GeometryBatch\n{\n constructor(geometry, batch_width)\n {\n this.geometry = geometry;\n\n this.material = undefined;\n this.uniforms = {};\n this.batch_width = batch_width;\n\n this.data_textures = [];\n\n this.object_names = undefined;\n\n this.zero_offset = new Vector2();\n this.write_offset = new Vector2();\n\n this.uniform_dirty_count = 0;\n\n this.tmp_uploaded_data_count = 0;\n }\n\n init(object_names, vert_shader, frag_shader)\n {\n this.material = new ShaderMaterial({\n uniforms: this.uniforms,\n vertexShader: vert_shader,\n fragmentShader: frag_shader\n });\n this.object_names = object_names;\n }\n\n add_global_uniform(name, data)\n {\n this.uniforms[name] = { value: data };\n this.material.needsUpdate = true;\n }\n\n set_global_uniform(name, data)\n {\n this.uniforms[name].value = data;\n }\n\n add_object_uniform_v3(uniform_name, default_value_v3)\n {\n const src_tex = this.__create_rgb_texture(this.batch_width);\n const dst_tex = this.__create_rgb_texture(this.batch_width);\n const one_pixel_tex = this.__create_rgb_texture(1);\n\n const new_data_tex = this.__add_data_texture(uniform_name, src_tex, dst_tex, one_pixel_tex);\n\n if (default_value_v3)\n {\n this.__flood_data_texture_rgb(new_data_tex, default_value_v3);\n }\n }\n\n add_object_uniform_v4(uniform_name, default_value_v4)\n {\n const src_tex = this.__create_rgba_texture(this.batch_width);\n const dst_tex = this.__create_rgba_texture(this.batch_width);\n const one_pixel_tex = this.__create_rgba_texture(1);\n\n const new_data_tex = this.__add_data_texture(uniform_name, src_tex, dst_tex, one_pixel_tex);\n\n if (default_value_v4)\n {\n this.__flood_data_texture_rgba(new_data_tex, default_value_v4);\n }\n }\n\n add_object_uniform_v4_float(uniform_name, default_value_v4)\n {\n const src_tex = this.__create_rgba_float_texture(this.batch_width);\n const dst_tex = this.__create_rgba_float_texture(this.batch_width);\n const one_pixel_tex = this.__create_rgba_float_texture(1);\n\n const new_data_tex = this.__add_data_texture(uniform_name, src_tex, dst_tex, one_pixel_tex);\n\n if (default_value_v4)\n {\n this.__flood_data_texture_rgba(new_data_tex, default_value_v4);\n }\n }\n\n set_object_uniform_v3(object_name, uniform_name, vector3, use_r, use_g, use_b)\n {\n const obj_index = this.__get_object_index(object_name);\n const data_texture = this.__get_data_texture(uniform_name);\n\n this.__set_pixel_rgb(data_texture.src, obj_index, vector3, use_r, use_g, use_b);\n this.__set_pixel_rgb(data_texture.one_pixel, 0, vector3, use_r, use_g, use_b);\n\n data_texture.last_accessed_index = obj_index;\n\n data_texture.dirty_count++;\n }\n\n set_object_uniform_v4(object_name, uniform_name, vector4, use_r, use_g, use_b, use_a)\n {\n const obj_index = this.__get_object_index(object_name);\n const data_texture = this.__get_data_texture(uniform_name);\n\n this.__set_pixel_rgba(data_texture.src, obj_index, vector4, use_r, use_g, use_b, use_a);\n this.__set_pixel_rgba(data_texture.one_pixel, 0, vector4, use_r, use_g, use_b, use_a);\n data_texture.last_accessed_index = obj_index;\n\n data_texture.dirty_count++;\n }\n\n upload_texture_data(renderer, upload_budget)\n {\n for (let i = 0; i < this.data_textures.length; i++)\n {\n if (upload_budget > 0 && this.data_textures[i].dirty_count > 0)\n {\n if (this.data_textures[i].dirty_count === 1)\n {\n this.__partial_texture_data_upload(renderer, this.data_textures[i]);\n }\n if (this.data_textures[i].dirty_count > 1)\n {\n this.__full_texture_data_upload(renderer, this.data_textures[i]);\n }\n\n this.data_textures[i].dirty_count = 0;\n\n upload_budget--;\n }\n }\n }\n\n get_uniform_dirty_count()\n {\n this.uniform_dirty_count = 0;\n for (let i = 0; i < this.data_textures.length; i++)\n {\n if (this.data_textures[i].dirty_count > 0)\n {\n this.uniform_dirty_count++;\n }\n }\n return this.uniform_dirty_count;\n }\n\n __full_texture_data_upload(renderer, texture_data)\n {\n // console.log(\"full texture update of\"+ texture_data.name);\n texture_data.dst.needsUpdate = true;\n renderer.copyTextureToTexture(\n this.zero_offset,\n texture_data.src,\n texture_data.dst\n );\n }\n\n __partial_texture_data_upload(renderer, texture_data)\n {\n // console.log(\"partial texture update\"+ texture_data.name);\n const index = texture_data.last_accessed_index;\n if (index === -1)\n {\n return;\n }\n\n this.write_offset.y = Math.floor(index / this.batch_width);\n this.write_offset.x = index - this.batch_width * this.write_offset.y;\n renderer.copyTextureToTexture(\n this.write_offset,\n texture_data.one_pixel,\n texture_data.dst\n );\n }\n\n get_mesh()\n {\n return new Mesh(this.geometry, this.material);\n }\n\n __set_pixel_rgb(data_texture, index, vector3, use_r, use_g, use_b)\n {\n if (use_r)\n {\n data_texture.image.data[index * 3 + 0] = vector3.x;\n }\n if (use_g)\n {\n data_texture.image.data[index * 3 + 1] = vector3.y;\n }\n if (use_b)\n {\n data_texture.image.data[index * 3 + 2] = vector3.z;\n }\n }\n\n __set_pixel_rgba(data_texture, index, vector4, use_r, use_g, use_b, use_a)\n {\n if (use_r)\n {\n data_texture.image.data[index * 4 + 0] = vector4.x;\n }\n if (use_g)\n {\n data_texture.image.data[index * 4 + 1] = vector4.y;\n }\n if (use_b)\n {\n data_texture.image.data[index * 4 + 2] = vector4.z;\n }\n if (use_a)\n {\n data_texture.image.data[index * 4 + 3] = vector4.w;\n }\n }\n\n __flood_data_texture_rgb(data_texture, v3)\n {\n for (let i = 0; i < this.batch_width * this.batch_width; i++)\n {\n this.__set_pixel_rgb(data_texture.src, i, v3, true, true, true);\n data_texture.dirty_count++;\n }\n }\n\n __flood_data_texture_rgba(data_texture, v4)\n {\n for (let i = 0; i < this.batch_width * this.batch_width; i++)\n {\n this.__set_pixel_rgba(data_texture.src, i, v4, true, true, true, true);\n data_texture.dirty_count++;\n }\n }\n\n __create_rgb_texture(width)\n {\n const data = new Uint8Array(3 * width * width);\n return new DataTexture(data, width, width, RGBAFormat);\n }\n\n __create_rgba_texture(width)\n {\n const data = new Uint8Array(4 * width * width);\n return new DataTexture(data, width, width, RGBAFormat);\n }\n\n __create_rgba_float_texture(width)\n {\n const data = new Float32Array(4 * width * width);\n return new DataTexture(data, width, width, RGBAFormat, FloatType);\n }\n\n __get_data_texture(uniform_name)\n {\n for (let i = 0; i < this.data_textures.length; i++)\n {\n if (this.data_textures[i].name === uniform_name)\n {\n return this.data_textures[i];\n }\n }\n console.error('Data texture ' + uniform_name + ' does not exist');\n return undefined;\n }\n\n __get_object_index(name)\n {\n for (let i = 0; i < this.object_names.length; i++)\n {\n if (this.object_names[i] === name)\n {\n return i;\n }\n }\n console.error('the name ' + name + ' is not contained in this batch');\n return undefined;\n }\n\n __add_data_texture(uniform_name, src_texture, dst_texture, one_pixel_text)\n {\n dst_texture.needsUpdate = true;\n\n this.data_textures.push({\n name: uniform_name,\n src: src_texture,\n dst: dst_texture,\n one_pixel: one_pixel_text,\n last_accessed_index: -1,\n dirty_count: 0\n });\n\n this.uniforms[uniform_name] = { value: dst_texture };\n return this.data_textures[this.data_textures.length - 1];\n }\n\n dispose()\n {\n for (let i = 0; i < this.data_textures.length; i++)\n {\n this.data_textures[i].src.dispose();\n this.data_textures[i].dst.dispose();\n this.data_textures[i].one_pixel.dispose();\n }\n }\n}\n\nexport { GeometryBatch };\n","import { GeometryBatch } from './GeometryBatch';\n\nimport * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js';\n\nimport { BufferAttribute } from 'three';\nimport { OMath } from '../utilities/OMath';\n\nclass GeometryBatcher\n{\n init()\n {\n this.batches = [];\n }\n\n batch(buffer_geometries)\n {\n const attr_accessor_uvs = [];\n const texture_width = OMath.ceilPowerOfTwo(Math.sqrt(buffer_geometries.length));\n // console.log(\"Store count: \" + buffer_geometries.length + \", Texture size: \" +texture_width);\n\n this.__init_uv_array(attr_accessor_uvs, texture_width);\n\n let uv_index = 0;\n\n for (let i = 0; i < buffer_geometries.length; i++)\n {\n const vertex_count = buffer_geometries[i].getAttribute('position').count;\n const y = Math.floor(i / texture_width);\n const x = i - texture_width * y;\n for (let count = 0; count < vertex_count; count++)\n {\n attr_accessor_uvs[uv_index] = (x / texture_width) + 0.5 / texture_width;\n attr_accessor_uvs[uv_index + 1] = (y / texture_width) + 0.5 / texture_width;\n uv_index += 2;\n }\n }\n\n const buffer_attribute = new BufferAttribute(new Float32Array(attr_accessor_uvs), 2);\n const buffer_geometry = BufferGeometryUtils.mergeGeometries(buffer_geometries);\n buffer_geometry.setAttribute('attr_accessor_uv', buffer_attribute);\n\n this.batches.push(new GeometryBatch(buffer_geometry, texture_width));\n return this.batches[this.batches.length - 1];\n }\n\n upload_texture_data(renderer)\n {\n for (let i = 0; i < this.batches.length; i++)\n {\n this.batches[i].upload_texture_data(renderer, 1);\n }\n }\n\n __init_uv_array(uvs, texture_width)\n {\n for (let i = 0; i < texture_width * texture_width * 2; i++)\n {\n uvs.push(0);\n }\n }\n}\n\nconst geometry_batcher = new GeometryBatcher();\nexport { geometry_batcher as GeometryBatcher };\n","import { CameraManager } from './CameraManager';\nimport { Graphics } from './Graphics';\n\nimport { Vector2 } from 'three';\nimport { Scene } from 'three';\nimport { OrthographicCamera } from 'three';\n\nclass UI\n{\n init(input)\n {\n this.input = input;\n this.ui_elements = [];\n this._tmp_normalized_pos = new Vector2();\n this.ss_scene = new Scene();\n this.ss_scene.matrixWorldAutoUpdate = false;\n this.ss_scene.frustumCulled = false;\n\n this.ws_scene = new Scene();\n this.ws_scene.matrixWorldAutoUpdate = false;\n this.ws_scene.frustumCulled = false;\n\n this.ss_camera = new OrthographicCamera(-1, 1, 1, -1, -100, 100);\n }\n\n delete_element(elem)\n {\n const index = this.ui_elements.indexOf(elem);\n if (index > -1)\n {\n this.ui_elements.splice(index, 1);\n }\n\n this.ss_scene.remove(elem);\n this.ws_scene.remove(elem);\n\n elem.dispose();\n }\n\n add_screen_space_element(elem)\n {\n this.ui_elements.push(elem);\n this.ss_scene.add(elem);\n\n elem.set_screen_space_coordinate_system();\n }\n\n add_world_space_element(elem)\n {\n this.ui_elements.push(elem);\n this.ws_scene.add(elem);\n\n elem.set_world_space_coordinate_system();\n }\n\n update()\n {\n // this.ss_camera.left = -OScreen.width / 2;\n // this.ss_camera.right = OScreen.width / 2;\n // this.ss_camera.top = OScreen.top / 2;\n // this.ss_camera.right = -OScreen.bottom / 2;\n this.ss_camera.updateProjectionMatrix();\n\n this._tmp_normalized_pos.copy(this.input.NDC);\n for (let i = 0; i < this.ui_elements.length; i++)\n {\n this.ui_elements[i].update_state(this._tmp_normalized_pos);\n }\n }\n\n render(renderer)\n {\n // renderer.render_ui(this.scene);\n if (this.ss_scene.children.length > 0)\n {\n Graphics.render(this.ss_scene, this.ss_camera);\n }\n if (this.ws_scene.children.length > 0)\n {\n Graphics.render(this.ws_scene, CameraManager.current);\n }\n }\n\n clear()\n {\n this.current_clicked_element = undefined;\n }\n}\n\nconst ui = new UI();\nexport { ui as UI };\n","import { Vector3, Plane, Quaternion, Sphere, Line3 } from 'three';\nimport { OMath } from './OMath';\n\nclass PerspectiveFrustumPointFitter\n{\n constructor()\n {\n this.sphere = new Sphere();\n }\n\n fit_points(points, camera_quaternion, vertical_fov, aspect)\n {\n this.sphere.setFromPoints(points);\n\n const v_fov = OMath.degToRad(vertical_fov / 2);\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const up_plane_normal = this.get_up_plane_normal(camera_quaternion, v_fov);\n const down_plane_normal = this.get_down_plane_normal(camera_quaternion, v_fov);\n const left_plane_normal = this.get_left_plane_normal(camera_quaternion, h_fov);\n const right_plane_normal = this.get_right_plane_normal(camera_quaternion, h_fov);\n\n const camera_forward_dir = new Vector3(0, 0, -1).applyQuaternion(camera_quaternion);\n\n const sphere_center = this.sphere.center.clone();\n\n const pull_back_distance = this.get_distance_to_fit_rect(this.sphere.radius * 2, this.sphere.radius * 2, vertical_fov, aspect);\n const far_pos = sphere_center.clone().add(camera_forward_dir.clone().multiplyScalar(pull_back_distance * -1));\n\n const up_plane = new Plane().setFromNormalAndCoplanarPoint(up_plane_normal, far_pos);\n const down_plane = new Plane().setFromNormalAndCoplanarPoint(down_plane_normal, far_pos);\n\n const left_plane = new Plane().setFromNormalAndCoplanarPoint(left_plane_normal, far_pos);\n const right_plane = new Plane().setFromNormalAndCoplanarPoint(right_plane_normal, far_pos);\n\n this.apply_center_correction_to_pos(far_pos, points, camera_quaternion, up_plane, down_plane, left_plane, right_plane);\n\n up_plane.setFromNormalAndCoplanarPoint(up_plane_normal, far_pos);\n down_plane.setFromNormalAndCoplanarPoint(down_plane_normal, far_pos);\n\n left_plane.setFromNormalAndCoplanarPoint(left_plane_normal, far_pos);\n right_plane.setFromNormalAndCoplanarPoint(right_plane_normal, far_pos);\n\n let closest_distance = Infinity;\n\n const inverse_dir = camera_forward_dir.clone().multiplyScalar(pull_back_distance * -2);\n for (let i = 0; i < points.length; i++)\n {\n const line = new Line3(points[i].clone(), points[i].clone().add(inverse_dir));\n\n const up_line_intersection = new Vector3();\n const down_line_intersection = new Vector3();\n\n const left_line_intersection = new Vector3();\n const right_line_intersection = new Vector3();\n\n up_plane.intersectLine(line, up_line_intersection);\n down_plane.intersectLine(line, down_line_intersection);\n\n left_plane.intersectLine(line, left_line_intersection);\n right_plane.intersectLine(line, right_line_intersection);\n\n if (up_line_intersection.length() < 0.0001)\n {\n console.log('up intersection not found', i);\n }\n if (down_line_intersection.length() < 0.0001)\n {\n console.log('down intersection not found', i);\n }\n if (left_line_intersection.length() < 0.0001)\n {\n console.log('left intersection not found', i);\n }\n if (right_line_intersection.length() < 0.0001)\n {\n console.log('right intersection not found', i);\n }\n\n const new_up_distance = points[i].clone().sub(up_line_intersection).length();\n const new_down_distance = points[i].clone().sub(down_line_intersection).length();\n\n const new_left_distance = points[i].clone().sub(left_line_intersection).length();\n const new_right_distance = points[i].clone().sub(right_line_intersection).length();\n\n const vertical_min = Math.min(new_up_distance, new_down_distance);\n const horizontal_min = Math.min(new_left_distance, new_right_distance);\n\n const min = Math.min(vertical_min, horizontal_min);\n\n if (min < closest_distance)\n {\n closest_distance = min;\n }\n }\n\n const forward_correction = camera_forward_dir.clone().multiplyScalar(closest_distance);\n const closest_position = far_pos.clone().add(forward_correction);\n\n return closest_position;\n }\n\n apply_center_correction_to_pos(target_pos, points, camera_quaternion, up_plane, down_plane, left_plane, right_plane)\n {\n const vertical_offset = this.get_vertical_correction(points, down_plane, up_plane, camera_quaternion);\n const horizontal_offset = this.get_horizontal_correction(points, left_plane, right_plane, camera_quaternion);\n\n target_pos.add(vertical_offset);\n target_pos.add(horizontal_offset);\n }\n\n get_vertical_correction(points, down_plane, up_plane, camera_quaternion)\n {\n let closest_distance_to_up_plane = Infinity;\n let closest_distance_to_down_plane = Infinity;\n // let closest_up_point = undefined;\n // let closest_down_point = undefined;\n\n const up_dir = new Vector3(0, 1, 0).applyQuaternion(camera_quaternion);\n for (let i = 0; i < points.length; i++)\n {\n const down_line = new Line3(points[i].clone(), points[i].clone().add(up_dir.clone().multiplyScalar(-5000000)));\n const up_line = new Line3(points[i].clone(), points[i].clone().add(up_dir.clone().multiplyScalar(5000000)));\n\n const down_line_intersection = new Vector3();\n const up_line_intersection = new Vector3();\n\n down_plane.intersectLine(down_line, down_line_intersection);\n up_plane.intersectLine(up_line, up_line_intersection);\n\n const down_dist = down_line_intersection.distanceTo(points[i]);\n const up_dist = up_line_intersection.distanceTo(points[i]);\n\n if (up_line_intersection.length() < 0.0001)\n {\n console.log('vertical up intersection not found', i);\n }\n if (down_line_intersection.length() < 0.0001)\n {\n console.log('vertical down intersection not found', i);\n }\n\n if (down_dist < closest_distance_to_down_plane)\n {\n closest_distance_to_down_plane = down_dist;\n // closest_down_point = points[i];\n }\n if (up_dist < closest_distance_to_up_plane)\n {\n closest_distance_to_up_plane = up_dist;\n // closest_up_point = points[i];\n }\n }\n\n const correction = (closest_distance_to_up_plane - closest_distance_to_down_plane) / 2;\n\n // console.log(\"vertical_correction\", correction)\n return up_dir.clone().multiplyScalar(-correction);\n }\n\n get_horizontal_correction(points, left_plane, right_plane, camera_quaternion)\n {\n let closest_distance_to_right_plane = Infinity;\n let closest_distance_to_left_plane = Infinity;\n // let closest_right_point = undefined;\n // let closest_left_point = undefined;\n\n const right_dir = new Vector3(1, 0, 0).applyQuaternion(camera_quaternion);\n\n for (let i = 0; i < points.length; i++)\n {\n const left_line = new Line3(points[i].clone(), points[i].clone().add(right_dir.clone().multiplyScalar(-5000000)));\n const right_line = new Line3(points[i].clone(), points[i].clone().add(right_dir.clone().multiplyScalar(5000000)));\n\n const left_line_intersection = new Vector3();\n const right_line_intersection = new Vector3();\n\n left_plane.intersectLine(left_line, left_line_intersection);\n right_plane.intersectLine(right_line, right_line_intersection);\n\n const left_dist = left_line_intersection.distanceTo(points[i]);\n const right_dist = right_line_intersection.distanceTo(points[i]);\n\n if (left_line_intersection.length() < 0.0001)\n {\n console.log('left intersection not found', i);\n }\n if (right_line_intersection.length() < 0.0001)\n {\n console.log('right intersection not found', i);\n }\n\n if (left_dist < closest_distance_to_left_plane)\n {\n closest_distance_to_left_plane = left_dist;\n // closest_left_point = points[i];\n }\n if (right_dist < closest_distance_to_right_plane)\n {\n closest_distance_to_right_plane = right_dist;\n // closest_right_point = points[i];\n }\n }\n\n const correction = (closest_distance_to_right_plane - closest_distance_to_left_plane) / 2;\n // console.log(\"horizontal_correction\", correction)\n\n return right_dir.clone().multiplyScalar(-correction);\n }\n\n get_up_plane_normal(camera_quaternion, v_fov)\n {\n const up_plane_normal = new Vector3(0, -1, 0);\n up_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), v_fov));\n up_plane_normal.applyQuaternion(camera_quaternion);\n return up_plane_normal;\n }\n\n get_down_plane_normal(camera_quaternion, v_fov)\n {\n const down_plane_normal = new Vector3(0, 1, 0);\n down_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), -v_fov));\n down_plane_normal.applyQuaternion(camera_quaternion);\n return down_plane_normal;\n }\n\n get_left_plane_normal(camera_quaternion, h_fov)\n {\n const left_plane_normal = new Vector3(1, 0, 0);\n left_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), h_fov));\n left_plane_normal.applyQuaternion(camera_quaternion);\n return left_plane_normal;\n }\n\n get_right_plane_normal(camera_quaternion, h_fov)\n {\n const right_plane_normal = new Vector3(-1, 0, 0);\n right_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), -h_fov));\n right_plane_normal.applyQuaternion(camera_quaternion);\n return right_plane_normal;\n }\n\n get_distance_to_fit_rect(width, height, vertical_fov, aspect)\n {\n const v_fov = (vertical_fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n}\n\nexport { PerspectiveFrustumPointFitter };\n","import { Vector3, Box3 } from 'three';\n\nclass OrthographicFrustumPointFitter\n{\n constructor()\n {\n\n }\n\n fit_points(points, camera_quaternion, vertical_fov, aspect)\n {\n const inverse_camera_quat = camera_quaternion.clone().inverse();\n\n const inverted_points = [];\n\n for (let i = 0; i < points.length; i++)\n {\n inverted_points.push(points[i].clone().applyQuaternion(inverse_camera_quat));\n }\n\n const box = new Box3().setFromPoints(inverted_points);\n const size = new Vector3();\n box.getSize(size);\n\n const distance = this.get_distance_to_fit_rect(size.x / 2, size.y / 2, vertical_fov, aspect);\n\n const center = new Vector3();\n box.getCenter(center);\n\n center.applyQuaternion(camera_quaternion);\n\n return {\n center: center,\n distance_to_center: distance\n };\n }\n\n get_distance_to_fit_rect(width, height, vertical_fov, aspect)\n {\n const v_fov = (vertical_fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n}\n\nexport { OrthographicFrustumPointFitter };\n","import { CameraManager } from '../CameraManager';\nimport { OMath } from '../utilities/OMath';\nimport { OScreen } from '../OScreen';\n\nimport { Vector3 } from 'three';\nimport { Matrix4 } from 'three';\nimport { Plane } from 'three';\nimport { Ray } from 'three';\nimport { Sphere } from 'three';\nimport { Box3 } from 'three';\nimport { PerspectiveFrustumPointFitter } from './PerspectiveFrustumPointFitter';\nimport { OrthographicFrustumPointFitter } from './OrthographicFrustumPointFitter';\n\nclass CameraUtilities\n{\n init(input)\n {\n this.tmp_mat = new Matrix4();\n this.plane = new Plane();\n this.ray = new Ray();\n\n this.tmp_size = new Vector3();\n this.tmp_unproj = new Vector3();\n\n this.input = input;\n }\n\n get_up_dir(camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.set(0, 1, 0);\n tmp_vec.applyQuaternion(camera.quaternion);\n\n return tmp_vec;\n }\n\n get_forward_dir(camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.set(0, 0, -1);\n tmp_vec.applyQuaternion(camera.quaternion);\n\n return tmp_vec;\n }\n\n get_right_dir(camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.set(1, 0, 0);\n tmp_vec.applyQuaternion(camera.quaternion);\n return tmp_vec;\n }\n\n unproject_mouse_position(NDC, camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n const v_fov = (camera.fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * camera.aspect)) / 2;\n\n const distV = Math.tan(v_fov) * camera.far;\n const distH = Math.tan(h_fov) * camera.far;\n\n tmp_vec.set(distH * NDC.x, distV * NDC.y, -camera.far).normalize();\n\n return tmp_vec.applyQuaternion(camera.quaternion);\n }\n\n get_plane_intersection(plane_position, plane_normal, NDC, camera)\n {\n camera = camera || CameraManager.current;\n NDC = NDC || this.input.NDC;\n\n const tmp_vec = new Vector3();\n\n this.plane.setFromNormalAndCoplanarPoint(plane_normal || this.get_forward_dir(camera), plane_position);\n if (camera.isPerspectiveCamera)\n {\n this.ray.set(camera.position, this.unproject_mouse_position(NDC, camera));\n }\n else\n {\n this.tmp_unproj.set(NDC.x, NDC.y, 1).unproject(camera);\n this.ray.set(camera.position, this.tmp_unproj);\n }\n\n this.ray.intersectPlane(this.plane, tmp_vec);\n return tmp_vec;\n }\n\n fit_points_on_camera(points, zoom_scale = 1)\n {\n const points_sphere = new Sphere().setFromPoints(points);\n const world_space_center = points_sphere.center;\n const camera_forward = this.get_forward_dir(CameraManager.current).clone();\n\n const plane = new Plane().setFromNormalAndCoplanarPoint(camera_forward, world_space_center);\n\n const points_on_plane = OMath.project_points_on_plane(points, plane);\n\n const projected_points_center = new Vector3();\n let box = new Box3().setFromPoints(points_on_plane);\n box.getCenter(projected_points_center);\n\n const up = new Vector3(0, 1, 0).applyQuaternion(CameraManager.current.quaternion);\n const right = up.clone().cross(camera_forward).normalize();\n const mat = new Matrix4().set(right.x, up.x, camera_forward.x, world_space_center.x,\n right.y, up.y, camera_forward.y, world_space_center.y,\n right.z, up.z, camera_forward.z, world_space_center.z,\n 0, 0, 0, 1);\n\n const inverse_mat = new Matrix4().getInverse(mat);\n for (let i = 0; i < points_on_plane.length; i++)\n {\n points_on_plane[i].applyMatrix4(inverse_mat);\n }\n\n const size = new Vector3();\n box = new Box3().setFromPoints(points_on_plane);\n box.getSize(size);\n size.multiplyScalar(zoom_scale);\n const projected_center = new Vector3();\n box.getCenter(projected_center);\n\n return {\n position: projected_points_center,\n zoom: this.get_zoom_to_fit_rect(size.x / 2, size.y / 2)\n };\n }\n\n get_zoom_to_fit_rect(width, height)\n {\n const v_fov = (CameraManager.current.fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * CameraManager.current.aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n\n get_zoom_to_fit_box(bb, camera)\n {\n if (camera.isOrthographicCamera)\n {\n bb.getSize(this.tmp_size);\n\n const obj_x = this.tmp_size.x;\n const obj_y = this.tmp_size.y;\n const object_aspect = obj_x / obj_y;\n if (OScreen.aspect_ratio / object_aspect > 1)\n {\n return OScreen.height / obj_y;\n }\n else\n {\n return OScreen.width / obj_x;\n }\n }\n else\n {\n // return this.fit_points_on_camera([bb.min, bb.max], 1).zoom;\n const size = new Vector3();\n bb.getSize(size);\n return this.get_zoom_to_fit_rect(size.x, size.y);\n }\n }\n\n get_html_screen_pos(object, camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n object.getWorldPosition(tmp_vec);\n tmp_vec.project(camera);\n\n tmp_vec.x = (tmp_vec.x * 0.5 + 0.5) * (OScreen.width);\n tmp_vec.y = (1 - (tmp_vec.y * 0.5 + 0.5)) * OScreen.height;\n return tmp_vec;\n }\n\n world_pos_to_screen(pos, camera)\n {\n camera = camera || CameraManager.current;\n const tmp_vec = new Vector3();\n\n tmp_vec.copy(pos);\n tmp_vec.project(camera);\n\n tmp_vec.x = (tmp_vec.x * 0.5 + 0.5) * (OScreen.width);\n tmp_vec.y = (1 - (tmp_vec.y * 0.5 + 0.5)) * OScreen.height;\n return tmp_vec;\n }\n\n update_projection(camera)\n {\n camera.left = -OScreen.width / 2;\n camera.right = OScreen.width / 2;\n camera.top = OScreen.height / 2;\n camera.bottom = -OScreen.height / 2;\n camera.aspect = OScreen.aspect_ratio;\n camera.updateProjectionMatrix(true);\n }\n\n fit_bounding_box_points(camera, bb, scale = 1)\n {\n const dir = new Vector3();\n dir.copy(bb.max).sub(bb.min);\n\n const p1 = bb.min.clone();\n\n const p2 = p1.clone().add(new Vector3(dir.x, 0, 0));\n const p3 = p1.clone().add(new Vector3(0, dir.y, 0));\n const p4 = p1.clone().add(new Vector3(0, 0, dir.z));\n\n const p5 = p1.clone().add(new Vector3(dir.x, 0, dir.z));\n const p6 = p1.clone().add(new Vector3(0, dir.y, dir.z));\n const p7 = bb.max.clone();\n const p8 = p1.clone().add(new Vector3(dir.x, dir.y, 0));\n return this.fit_points(camera, [p1, p2, p3, p4, p5, p6, p7, p8], scale);\n }\n\n fit_points(camera, points, zoom_scale = 1)\n {\n if (camera.isPerspectiveCamera)\n {\n const camera_forward_dir = new Vector3(0, 0, -1).applyQuaternion(camera.quaternion);\n const camera_backward_dir = camera_forward_dir.clone().multiplyScalar(-1);\n\n const fitter = new PerspectiveFrustumPointFitter();\n\n const aspect_ratio = OScreen.aspect_ratio;\n\n const camera_pos = fitter.fit_points(points, camera.quaternion, camera.fov * zoom_scale, aspect_ratio);\n const box = new Box3().setFromPoints(points);\n const center = new Vector3();\n box.getCenter(center);\n\n const reference_position_plane = new Plane().setFromNormalAndCoplanarPoint(camera_backward_dir, center);\n\n const camera_ray = new Ray(camera_pos, camera_forward_dir);\n\n const reference_position = new Vector3();\n camera_ray.intersectPlane(reference_position_plane, reference_position);\n\n const zoom = camera_pos.distanceTo(reference_position);\n\n return {\n zoom: zoom,\n reference_position: reference_position,\n camera_position: camera_pos\n };\n }\n else\n {\n const fitter = new OrthographicFrustumPointFitter();\n const result = fitter.fit_points(points, this.reference_rotation, camera.fov * zoom_scale, OScreen.aspect_ratio);\n\n this.reference_position.copy(result.center);\n this.reference_zoom = result.distance_to_center;\n\n const forward = new Vector3(0, 0, 1).applyQuaternion(camera.quaternion);\n return {\n zoom: result.distance_to_center,\n reference_position: result.center,\n camera_position: forward.multiplyScalar(result.distance_to_center)\n };\n }\n }\n}\n\nconst camera_utilities = new CameraUtilities();\nexport { camera_utilities as CameraUtilities };\n","import { Browser } from './Browser';\nimport { CameraManager } from './CameraManager';\nimport { Capabilities } from './Capabilities';\nimport { Debug } from './Debug';\nimport { Graphics } from './Graphics';\nimport { OS } from './OS';\nimport { OScreen } from './OScreen';\nimport { ReflectionPlaneContext } from './ReflectionPlaneContext';\nimport { ResourceContainer } from './ResourceContainer';\nimport { SceneManager } from './SceneManager';\nimport { GeometryBatcher } from './static_batcher/GeometryBatcher';\nimport { Time } from './Time';\nimport { UI } from './UI';\nimport { CameraUtilities } from './utilities/CameraUtilities';\n\nclass Initializer\n{\n constructor()\n {\n }\n\n init(input)\n {\n CameraManager.init();\n CameraUtilities.init(input);\n Capabilities.init();\n GeometryBatcher.init();\n\n OS.init();\n Browser.init();\n ReflectionPlaneContext.init();\n ResourceContainer.init();\n SceneManager.init();\n OScreen.init();\n Time.init();\n UI.init(input);\n\n Debug.init();\n }\n\n dispose(render_loop)\n {\n Graphics.dispose();\n SceneManager.dispose();\n\n render_loop.dispose();\n }\n}\n\nconst initializer = new Initializer();\nexport { initializer as Initializer };\n","class KeyboardInput\n{\n init(container)\n {\n this.ctrlz_pressed = false;\n this.ctrlz_fired = false;\n\n this.keys = {};\n this.keys_keys = [];\n this.container = container;\n\n this.container.addEventListener('keydown', this.on_key_down.bind(this), false);\n this.container.addEventListener('keyup', this.on_key_up.bind(this), false);\n }\n\n on_key_down(e)\n {\n if (e.keyCode === 90 && e.ctrlKey && !this.ctrlz_fired)\n {\n this.ctrlz_pressed = true;\n this.ctrlz_fired = true;\n }\n\n if (e.code)\n {\n this.press_key(e.code);\n }\n }\n\n on_key_up(e)\n {\n this.release_key(e.code);\n }\n\n clear()\n {\n this.ctrlz_pressed = false;\n\n for (let i = 0; i < this.keys_keys.length; i++)\n {\n this.keys[this.keys_keys[i]].pressed = false;\n this.keys[this.keys_keys[i]].released = false;\n }\n }\n\n release_key(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n key.fired = false;\n key.down = false;\n key.released = true;\n }\n }\n\n release_keys()\n {\n this.ctrlz_fired = false;\n\n for (let i = 0; i < this.keys_keys.length; i++)\n {\n this.keys[this.keys_keys[i]].fired = false;\n this.keys[this.keys_keys[i]].down = false;\n }\n }\n\n press_key(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n if (key.down === false)\n {\n key.pressed = true;\n }\n key.down = true;\n key.fired = true;\n }\n }\n\n is_key_pressed(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n return key.pressed;\n }\n return false;\n }\n\n is_key_down(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n return key.down;\n }\n return false;\n }\n\n is_key_released(key_name)\n {\n const key = this.keys[key_name];\n if (key)\n {\n return key.released;\n }\n\n return false;\n }\n\n register_key(key)\n {\n this.keys[key] =\n {\n key_name: key,\n pressed: false,\n down: false,\n fired: false\n };\n\n this.keys_keys = Object.keys(this.keys);\n }\n\n unregister_key(key_name)\n {\n delete this.keys[key_name];\n }\n\n dispose()\n {\n this.container.removeEventListener('keydown', this.on_key_down.bind(this), false);\n this.container.removeEventListener('keyup', this.on_key_up.bind(this), false);\n }\n}\n\nexport { KeyboardInput };\n","import { Color } from 'three';\nimport { OrthographicCamera as TOrthographicCamera } from 'three';\n\nclass OrthographicCamera extends TOrthographicCamera\n{\n constructor(left, right, top, bottom, near, far)\n {\n super(left, right, top, bottom, near, far);\n\n this.clear_color = new Color('#000000');\n this.clear_alpha = 1;\n }\n\n copy(camera)\n {\n super.copy(camera);\n this.clear_color.copy(camera.clear_color);\n this.clear_alpha = camera.clear_alpha;\n return this;\n }\n}\n\nexport { OrthographicCamera };\n","import frag from '../shaders/normal/normal.frag';\nimport vert from '../shaders/normal/normal.vert';\n\nimport { ShaderMaterial } from 'three';\n\nclass NormalMaterial extends ShaderMaterial\n{\n constructor()\n {\n super({\n uniforms: {\n },\n vertexShader: vert,\n fragmentShader: frag\n });\n }\n}\n\nexport { NormalMaterial };\n","import { CameraManager } from '../CameraManager';\nimport { SceneManager } from '../SceneManager';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Graphics } from '../Graphics';\nimport { NormalMaterial } from '../materials/NormalMaterial';\n\nclass DebugNormalsRender extends BaseRender\n{\n constructor()\n {\n super();\n }\n\n render()\n {\n Graphics.clear(undefined, CameraManager.current, true, true);\n\n Graphics.render(SceneManager.current, CameraManager.current, undefined, new NormalMaterial());\n }\n}\n\nexport { DebugNormalsRender };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/depth_normals/debug_normals.frag';\nimport depth_normals_vert from '../shaders/ssao/ssao.vert';\n\nimport { Matrix4 } from 'three';\n\nclass DisplayNormalTextureMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag, depth_normals_vert);\n this.uniforms._FarPlane = { value: 1 };\n this.uniforms._InverseProjMatrix = { value: new Matrix4() };\n }\n}\n\nexport { DisplayNormalTextureMaterial };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/ssao/ssao_compose.frag';\n\nclass SSAOComposeMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag);\n this.uniforms._AO = { value: undefined };\n }\n}\n\nexport { SSAOComposeMaterial };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/ssao/ssao.frag';\nimport vert from '../shaders/ssao/ssao.vert';\n\nimport { DataTexture, Matrix4, RGBAFormat, RepeatWrapping, Vector3 } from 'three';\n\nimport { OMath } from '../utilities/OMath';\nclass SSAOMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag, vert);\n\n this.uniforms._InverseProjMatrix = { value: new Matrix4() };\n this.uniforms._ProjectionMatrix = { value: new Matrix4() };\n\n this.uniforms._Bias = { value: 0.0125 };\n this.uniforms._Radius = { value: 0.3 };\n this.uniforms._FarPlane = { value: 100 };\n\n this.uniforms._SampleKernel = { value: this.__get_sample_kernel() };\n this.uniforms._RandomRotation = { value: this.__get_rotation_kernel() };\n }\n\n __get_sample_kernel()\n {\n const sample_kernel = [];\n const kernel_size = 64;\n\n for (let i = 0; i < kernel_size; i++)\n {\n const dir = new Vector3(Math.random() * 2 - 1,\n Math.random() * 2 - 1,\n Math.random());\n dir.normalize();\n let scale = i / kernel_size;\n scale = OMath.lerp(0.1, 1.0, scale * scale);\n dir.multiplyScalar(scale);\n\n sample_kernel.push(dir);\n }\n return sample_kernel;\n }\n\n __get_rotation_kernel()\n {\n const rotation_kernel = new Uint8Array(3 * 16);\n for (let i = 0; i < 16; i++)\n {\n rotation_kernel[i * 3 + 1] = Math.floor(Math.random() * 255);\n rotation_kernel[i * 3 + 2] = Math.floor(Math.random() * 255);\n rotation_kernel[i * 3 + 3] = 0;\n }\n\n const rotation_texture = new DataTexture(rotation_kernel, 4, 4, RGBAFormat);\n rotation_texture.wrapS = RepeatWrapping;\n rotation_texture.wrapT = RepeatWrapping;\n\n rotation_texture.needsUpdate = true;\n return rotation_texture;\n }\n}\n\nexport { SSAOMaterial };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/box_blur/box_blur.frag';\n\nimport { Vector2 } from 'three';\n\nclass BoxBlurMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag);\n this.uniforms._SampleDir = { value: new Vector2() };\n }\n}\n\nexport { BoxBlurMaterial };\n","import { BoxBlurMaterial } from '../materials/BoxBlurMaterial';\nimport { Graphics } from '../Graphics';\n\nimport { WebGLRenderTarget } from 'three';\n\nclass Blurrer\n{\n constructor(renderer)\n {\n this.RT1 = new WebGLRenderTarget(1, 1);\n this.RT2 = new WebGLRenderTarget(1, 1);\n this.box_blur_mat = new BoxBlurMaterial();\n }\n\n blur(RT)\n {\n if (RT.width !== this.RT1.width || RT.height !== this.RT1.height)\n {\n this.RT1.setSize(RT.width, RT.height);\n this.RT2.setSize(RT.width, RT.height);\n }\n\n this.box_blur_mat.uniforms._SampleDir.value.set(1, 0);\n Graphics.blit(RT, this.RT1, this.box_blur_mat);\n this.box_blur_mat.uniforms._SampleDir.value.set(0, 1);\n Graphics.blit(this.RT1, RT, this.box_blur_mat);\n // return this.RT2;\n }\n}\n\nexport { Blurrer };\n","import { CameraManager } from '../CameraManager';\nimport { Graphics } from '../Graphics';\nimport { DisplayNormalTextureMaterial } from '../materials/DisplayNormalTextureMaterial';\nimport { SSAOComposeMaterial } from '../materials/SSAOComposeMaterial';\nimport { SSAOMaterial } from '../materials/SSAOMaterial';\nimport { OScreen } from '../OScreen';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Blurrer } from '../render_utilities/Blurrer';\nimport { SceneManager } from '../SceneManager';\n\nimport { WebGLRenderTarget } from 'three';\n\nclass NormalAORender extends BaseRender\n{\n constructor(use_ssaa = false)\n {\n super();\n\n this.ssao_mat = new SSAOMaterial();\n this.ssao_compose_mat = new SSAOComposeMaterial();\n this.debug_normals = new DisplayNormalTextureMaterial();\n\n this.ssaa = use_ssaa ? 2 : 1;\n\n this.main_RT = new WebGLRenderTarget(OScreen.width * this.ssaa, OScreen.height * this.ssaa);\n\n this.SSAO_RT = new WebGLRenderTarget(OScreen.width, OScreen.height);\n\n this.blurrer = new Blurrer();\n Graphics.generateDepthNormalTexture = true;\n }\n\n render()\n {\n this.__check_RT_size();\n\n Graphics.clear(this.main_RT, CameraManager.current, true, false);\n Graphics.render(SceneManager.current, CameraManager.current, this.main_RT);\n\n this.__update_uniforms();\n\n Graphics.blit(Graphics.depth_normals_RT, this.SSAO_RT, this.ssao_mat);\n\n // // BLUR\n this.blurrer.blur(this.SSAO_RT);\n Graphics.blit(this.SSAO_RT, undefined);\n\n // // COMPOSE\n this.ssao_compose_mat.uniforms._AO.value = this.SSAO_RT.texture;\n Graphics.blit(this.main_RT, undefined, this.ssao_compose_mat);\n\n // Graphics.blit(this.SSAO_RT, undefined);\n }\n\n __update_uniforms()\n {\n this.ssao_mat.uniforms._InverseProjMatrix.value.getInverse(CameraManager.current.projectionMatrix);\n this.ssao_mat.uniforms._ProjectionMatrix.value.copy(CameraManager.current.projectionMatrix);\n this.ssao_mat.uniforms._FarPlane.value = CameraManager.current.far;\n }\n\n __check_RT_size()\n {\n if (this.main_RT.width !== OScreen.width * this.ssaa || this.main_RT.height !== OScreen.height * this.ssaa)\n {\n this.main_RT.setSize(OScreen.width * this.ssaa, OScreen.height * this.ssaa);\n this.SSAO_RT.setSize(OScreen.width, OScreen.height);\n }\n }\n}\n\nexport { NormalAORender };\n","import { CameraManager } from '../CameraManager';\nimport { SceneManager } from '../SceneManager';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Graphics } from '../Graphics';\n\nclass NormalRender extends BaseRender\n{\n constructor()\n {\n super();\n }\n\n render()\n {\n Graphics.clear(undefined, CameraManager.current, true, true);\n\n if (SceneManager.current.on_pre_render)\n {\n SceneManager.current.on_pre_render();\n }\n\n if (SceneManager.current.render)\n {\n SceneManager.current.render();\n }\n else\n {\n Graphics.render(SceneManager.current, CameraManager.current);\n }\n\n if (SceneManager.current.on_post_render)\n {\n SceneManager.current.on_post_render();\n }\n }\n}\n\nexport { NormalRender };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/gaussian_blur/gaussian_blur.frag';\n\nimport { Vector2 } from 'three';\n\nclass GaussianBlurMaterial extends BlitMaterial\n{\n constructor(kernel_radius)\n {\n super(frag, undefined, {\n KERNEL_RADIUS: kernel_radius,\n SIGMA: kernel_radius\n });\n\n this.uniforms.texSize = { value: new Vector2(0.5, 0.5) };\n this.uniforms.direction = { value: new Vector2(0.5, 0.5) };\n }\n\n set_size(w, h)\n {\n this.uniforms.texSize.value.x = w;\n this.uniforms.texSize.value.y = h;\n }\n\n set_direction(x, y)\n {\n this.uniforms.direction.value.set(x, y);\n }\n}\n\nexport { GaussianBlurMaterial };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/luminosity_high_pass/luminosity_high_pass.frag';\n\nimport { Color } from 'three';\nclass LuminosityHighPassMaterial extends BlitMaterial\n{\n constructor(kernel_radius)\n {\n super(frag);\n\n this.uniforms.luminosityThreshold = { value: 0.23 };\n this.uniforms.smoothWidth = { value: 0.01 };\n this.uniforms.defaultColor = { value: new Color('#000000') };\n this.uniforms.defaultOpacity = { value: 0.0 };\n }\n}\n\nexport { LuminosityHighPassMaterial };\n","import { GaussianBlurMaterial } from '../materials/GaussianBlurMaterial';\nimport { LuminosityHighPassMaterial } from '../materials/LuminosityHighPassMaterial';\nimport { Graphics } from '../Graphics';\n\nimport { WebGLRenderTarget, LinearFilter, RGBAFormat } from 'three';\n\nclass GaussianBlurrer\n{\n constructor(nMips = 5)\n {\n this.current_width = 1;\n this.current_height = 1;\n\n this.separableBlurMaterials = [];\n this.renderTargetsHorizontal = [];\n this.renderTargetsVertical = [];\n\n this.nMips = nMips;\n this.kernelSizeArray = [3, 5, 7, 9, 11];\n this.rt_pars = { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat };\n\n this.renderTargetBright = new WebGLRenderTarget(1, 1, this.rt_pars);\n this.renderTargetBright.texture.generateMipmaps = false;\n\n this.init_materials();\n this.init_RT();\n\n this.luminosity_high_pass_mat = new LuminosityHighPassMaterial();\n }\n\n blur(RT, use_luminosity_high_pass)\n {\n this.resize_RT(RT.width, RT.height);\n\n if (use_luminosity_high_pass)\n {\n Graphics.blit(RT, this.renderTargetBright, this.luminosity_high_pass_mat);\n }\n else\n {\n Graphics.blit(RT, this.renderTargetBright);\n }\n\n let inputRenderTarget = this.renderTargetBright;\n\n for (let i = 0; i < this.nMips; i++)\n {\n const mat = this.separableBlurMaterials[i];\n\n mat.set_direction(1, 0);\n Graphics.blit(inputRenderTarget, this.renderTargetsHorizontal[i], mat);\n\n mat.set_direction(0, 1);\n Graphics.blit(this.renderTargetsHorizontal[i], this.renderTargetsVertical[i], mat);\n\n inputRenderTarget = this.renderTargetsVertical[i];\n }\n }\n\n get_blurred_texture()\n {\n return this.renderTargetsHorizontal[0].texture;\n }\n\n get_blurred_RT()\n {\n return this.renderTargetsHorizontal[0];\n }\n\n init_RT()\n {\n this.dispose_RT();\n\n this.renderTargetBright.setSize(1, 1);\n\n for (let i = 0; i < this.nMips; i++)\n {\n const hor = new WebGLRenderTarget(1, 1, this.rt_pars);\n const ver = new WebGLRenderTarget(1, 1, this.rt_pars);\n\n hor.texture.generateMipmaps = false;\n ver.texture.generateMipmaps = false;\n\n this.renderTargetsHorizontal.push(hor);\n this.renderTargetsVertical.push(ver);\n }\n }\n\n resize_RT(texture_width, texture_height)\n {\n if (this.current_width === texture_width && this.current_height === texture_height)\n {\n return;\n }\n\n this.current_width = texture_width;\n this.current_height = texture_height;\n\n let width = Math.round(texture_width / 2);\n let height = Math.round(texture_height / 2);\n\n this.renderTargetBright.setSize(width, height);\n\n for (let i = 0; i < this.nMips; i++)\n {\n this.renderTargetsVertical[i].setSize(width, height);\n this.renderTargetsHorizontal[i].setSize(width, height);\n this.separableBlurMaterials[i].set_size(width, height);\n\n width = Math.round(width / 2);\n height = Math.round(height / 2);\n }\n }\n\n init_materials(texture_width, texture_height)\n {\n this.dispose_materials();\n\n for (let i = 0; i < this.nMips; i++)\n {\n this.separableBlurMaterials.push(new GaussianBlurMaterial(this.kernelSizeArray[i]));\n }\n }\n\n dispose_materials()\n {\n for (let i = 0; i < this.separableBlurMaterials.length; i++)\n {\n this.separableBlurMaterials[i].dispose();\n }\n this.separableBlurMaterials.length = 0;\n }\n\n dispose_RT()\n {\n for (let i = 0; i < this.renderTargetsVertical.length; i++)\n {\n this.renderTargetsHorizontal[i].dispose();\n this.renderTargetsVertical[i].dispose();\n }\n this.renderTargetBright.dispose();\n\n this.renderTargetsHorizontal.length = 0;\n this.renderTargetsVertical.length = 0;\n }\n}\n\nexport { GaussianBlurrer };\n","import { OScreen } from '../OScreen';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { UnrealBloomComposeMaterial } from '../materials/UnrealBloomComposeMaterial';\nimport { AddMaterial } from '../materials/AddMaterial';\n\nimport { WebGLRenderTarget } from 'three';\n\nimport { GaussianBlurrer } from '../render_utilities/GaussianBlurrer';\nimport { Graphics } from '../Graphics';\nimport { CameraManager } from '../CameraManager';\nimport { SceneManager } from '../SceneManager';\n\nclass UnrealBloomRender extends BaseRender\n{\n constructor()\n {\n super();\n\n this.bloom_compose_mat = undefined;\n\n this.main_RT = undefined;\n this.blur_RT = undefined;\n this.blurrer = undefined;\n\n this.add_mat = new AddMaterial();\n }\n\n on_enter()\n {\n this.blurrer = new GaussianBlurrer();\n this.main_RT = new WebGLRenderTarget(OScreen.width, OScreen.height);\n this.blur_RT = new WebGLRenderTarget(OScreen.width, OScreen.height);\n\n this.bloom_compose_mat = new UnrealBloomComposeMaterial(5);\n this.blurrer = new GaussianBlurrer(5);\n\n this.bloom_compose_mat.set_RT_0(this.blurrer.renderTargetsVertical[0].texture);\n this.bloom_compose_mat.set_RT_1(this.blurrer.renderTargetsVertical[1].texture);\n this.bloom_compose_mat.set_RT_2(this.blurrer.renderTargetsVertical[2].texture);\n this.bloom_compose_mat.set_RT_3(this.blurrer.renderTargetsVertical[3].texture);\n this.bloom_compose_mat.set_RT_4(this.blurrer.renderTargetsVertical[4].texture);\n\n this.bloom_compose_mat.set_bloom_strength(1);\n this.bloom_compose_mat.set_bloom_radius(1);\n\n this.add_mat.set_add_texture(this.blurrer.renderTargetsHorizontal[0].texture);\n }\n\n set_bloom_strength(val)\n {\n this.bloom_compose_mat.set_bloom_strength(val);\n }\n\n set_bloom_radius(val)\n {\n this.bloom_compose_mat.set_bloom_radius(val);\n }\n\n set_tint_color_0(col_string)\n {\n this.bloom_compose_mat.set_tint_color_0(col_string);\n }\n\n set_tint_color_1(col_string)\n {\n this.bloom_compose_mat.set_tint_color_1(col_string);\n }\n\n set_tint_color_2(col_string)\n {\n this.bloom_compose_mat.set_tint_color_2(col_string);\n }\n\n set_tint_color_3(col_string)\n {\n this.bloom_compose_mat.set_tint_color_3(col_string);\n }\n\n set_tint_color_4(col_string)\n {\n this.bloom_compose_mat.set_tint_color_4(col_string);\n }\n\n render()\n {\n this.__check_RT_size();\n\n Graphics.clear(this.main_RT, CameraManager.current, true, false);\n Graphics.render(SceneManager.current, CameraManager.current, this.main_RT);\n\n // // BLUR\n this.blurrer.blur(this.main_RT, true);\n\n // Blur compose\n Graphics.material_pass(this.bloom_compose_mat, this.blurrer.renderTargetsHorizontal[0]);\n\n // Additive blend\n Graphics.blit(this.main_RT, undefined, this.add_mat);\n }\n\n __check_RT_size()\n {\n if (this.main_RT.width !== OScreen.width || this.main_RT.height !== OScreen.height)\n {\n this.main_RT.setSize(OScreen.width, OScreen.height);\n this.blur_RT.setSize(OScreen.width, OScreen.height);\n }\n }\n}\n\nexport { UnrealBloomRender };\n","import { CameraManager } from '../CameraManager';\nimport { SceneManager } from '../SceneManager';\nimport { BaseRender } from '../render_mode/BaseRender';\nimport { Graphics } from '../Graphics';\n\nclass VRRender extends BaseRender\n{\n constructor()\n {\n super();\n }\n\n render()\n {\n // Graphics.clear(undefined, CameraManager.current, true, true);\n\n if (SceneManager.current.on_pre_render)\n {\n SceneManager.current.on_pre_render();\n }\n\n if (SceneManager.current.render)\n {\n SceneManager.current.render();\n }\n else\n {\n Graphics.render(SceneManager.current, CameraManager.current, Graphics._renderer.getRenderTarget());\n }\n\n this.render_spectator_camera();\n\n if (SceneManager.current.on_post_render)\n {\n SceneManager.current.on_post_render();\n }\n }\n\n render_spectator_camera()\n {\n const spectator_camera = CameraManager.spectator;\n\n if (spectator_camera && Graphics._renderer.xr.isPresenting)\n {\n // Copy the XR Camera's position and rotation, but use your\n // main camera's projection matrix\n const xrCam = Graphics._renderer.xr.getCamera(CameraManager.current);\n\n spectator_camera.projectionMatrix.copy(CameraManager.current.projectionMatrix);\n\n spectator_camera.position.copy(xrCam.position);\n spectator_camera.quaternion.copy(xrCam.quaternion);\n\n // we'll restore this later\n const currentRenderTarget = Graphics._renderer.getRenderTarget();\n\n // turn off the WebXR rendering\n Graphics._renderer.xr.isPresenting = false;\n\n // render to the canvas on our main display\n Graphics._renderer.setRenderTarget(null);\n Graphics._renderer.render(SceneManager.current, spectator_camera);\n\n // reset back to enable WebXR\n Graphics._renderer.setRenderTarget(currentRenderTarget);\n Graphics._renderer.xr.isPresenting = true;\n }\n }\n}\n\nexport { VRRender };\n","import { TransitionManager } from './TransitionManager';\n\nclass ViewComponentManager\n{\n constructor()\n {\n this.components = [];\n this.enabled_components = new Set();\n }\n\n update()\n {\n this.__set_components_opacities();\n\n for (const component of this.enabled_components)\n {\n component.update(TransitionManager.current_state_data);\n }\n }\n\n register_component(component)\n {\n this.components.push(component);\n }\n\n enable_component(component)\n {\n // const component_to_enable = this.get_component_by_name(component_name);\n\n this.enabled_components.add(component);\n }\n\n disable_component(component)\n {\n // const component_to_disable = this.get_component_by_name(component_name);\n\n this.enabled_components.delete(component);\n }\n\n get_component_by_name(component_name)\n {\n console.warn('DEPRECATED. Use ViewComponentManager.get instead');\n this.get(component_name);\n }\n\n get(component_name)\n {\n for (let i = 0; i < this.components.length; i++)\n {\n if (this.components[i].name === component_name)\n {\n return this.components[i];\n }\n }\n console.error('[ViewComponentManager.get] no component found for: ', component_name);\n return undefined;\n }\n\n __set_components_opacities()\n {\n for (let i = 0; i < this.components.length; i++)\n {\n this.components[i].set_opacity(TransitionManager.current_state_data);\n }\n }\n}\n\nconst view_component_manager = new ViewComponentManager();\nexport { view_component_manager as ViewComponentManager };\n","import { BaseApplication } from './BaseApplication';\nimport { Debug } from './Debug';\nimport { Time } from './Time';\nimport { UI } from './UI';\nimport { TransitionManager } from './view_components/TransitionManager';\nimport { ViewComponentManager } from './view_components/ViewComponentManager';\nimport { ViewManager } from './view_components/ViewManager';\n\nclass RenderLoop\n{\n constructor(target_application, graphics, input)\n {\n target_application = target_application || new BaseApplication();\n\n this.target_application = target_application;\n this.graphics = graphics;\n this.input = input;\n\n this.is_running = false;\n this.frames_passed = 0;\n\n this.time_accumulator = 0;\n }\n\n update()\n {\n if (!this.is_running)\n {\n return;\n }\n Time.__update();\n\n // ###### START CYCLE ######\n if (this.frames_passed === 1)\n {\n this.target_application.on_post_start();\n }\n\n this.input.update();\n\n this.time_accumulator += Time.delta_time;\n\n this.target_application.before_update();\n TransitionManager.before_update();\n\n while (this.time_accumulator > Time.fixed_delta_time)\n {\n this.target_application.fixed_update();\n TransitionManager.fixed_update();\n\n this.time_accumulator -= Time.fixed_delta_time;\n }\n Time.__set_frame_interpolation(this.time_accumulator / Time.fixed_delta_time);\n\n this.target_application.update();\n\n TransitionManager.update();\n ViewManager.update();\n ViewComponentManager.update();\n\n this.target_application.on_pre_render();\n\n this.graphics.update(); // render scene\n UI.update(); // update after new camera matrix has been calculated\n UI.render(this.graphics); // render ui layer on top\n this.target_application.on_post_render();\n\n Debug.render(this.graphics); // render debug layer\n\n // ###### END CYCLE #######\n\n this.target_application.on_frame_end();\n this.frames_passed++;\n\n this.input.clear();\n UI.clear();\n Debug.clear();\n }\n\n start()\n {\n if (this.is_running) return; // sanity check\n\n if (this.frames_passed === 0)\n {\n this.target_application.on_enter();\n }\n\n this.is_running = true;\n\n this.graphics._renderer.setAnimationLoop(this.update.bind(this));\n }\n\n stop()\n {\n if (this.is_running === false) return; // sanity check\n\n this.is_running = false;\n this.target_application.on_exit();\n\n this.graphics._renderer.setAnimationLoop(null);\n }\n\n set_state(new_state)\n {\n this.target_application.on_exit(this);\n this.target_application = new_state;\n this.target_application.on_enter(this);\n }\n\n dispose()\n {\n this.stop();\n this.frames_passed = 0;\n }\n}\n\nexport { RenderLoop };\n","import { OScreen } from './OScreen';\n\nclass Screen\n{\n init()\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n OScreen.init();\n }\n\n update_position(x, y)\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n OScreen.update_position(x, y);\n }\n\n update()\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n OScreen.update();\n }\n\n update_size(width, height)\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n OScreen.update_size(width, height);\n }\n\n apply_pixel_density_v2(vector2)\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n return OScreen.apply_pixel_density_v2(vector2);\n }\n\n apply_pixel_density(value)\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n return OScreen.apply_pixel_density(value);\n }\n\n get_pixel_size()\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n return OScreen.get_pixel_size();\n }\n\n get aspect_ratio()\n {\n console.warn('Screen Singleton is deprecated. Please use OScreen.');\n return OScreen.aspect_ratio;\n }\n}\n\nconst screen = new Screen();\nexport { screen as Screen };\n","import { ViewComponentManager } from './ViewComponentManager';\n\nexport class ViewComponent\n{\n constructor({ name, container })\n {\n this.name = name;\n this.container = container;\n this.hidden = true;\n\n ViewComponentManager.register_component(this);\n }\n\n start()\n {\n }\n\n on_enter()\n {\n this.container.classList.remove('hidden');\n ViewComponentManager.enable_component(this);\n\n this.hidden = false;\n }\n\n update()\n {\n }\n\n on_exit()\n {\n this.container.classList.add('hidden');\n ViewComponentManager.disable_component(this);\n\n this.hidden = true;\n }\n\n set_opacity(current_state_data)\n {\n this.container.style.opacity = current_state_data[`${this.name}_opacity`];\n this.toggle_hidden();\n }\n\n toggle_hidden()\n {\n if (this.container.style.opacity > 0.001)\n {\n if (this.hidden)\n {\n this.on_enter();\n }\n }\n else\n {\n if (!this.hidden)\n {\n this.on_exit();\n }\n }\n }\n}\n","import { Mesh } from 'three';\nimport { MeshBasicMaterial } from 'three';\nimport { PlaneGeometry } from 'three';\n\nclass HorizontalPlane extends Mesh\n{\n constructor(width, height, color, material)\n {\n width = width || 1;\n height = height || 1;\n color = color || '#FF0000';\n material = material || new MeshBasicMaterial({ color: color });\n\n const geometry = new PlaneGeometry(width, height);\n geometry.rotateX(-3.14 / 2);\n super(geometry, material);\n }\n}\n\nexport { HorizontalPlane };\n","import { Mesh } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { MeshBasicMaterial } from 'three';\n\nclass VerticalPlane extends Mesh\n{\n constructor(width, height, color, material)\n {\n width = width || 1;\n height = height || 1;\n color = color || '#FF0000';\n material = material || new MeshBasicMaterial({ color: color });\n\n const geometry = new PlaneGeometry(width, height);\n super(geometry, material);\n }\n}\n\nexport { VerticalPlane };\n","class ArrayUtilities\n{\n constructor()\n {}\n\n static merge_from_to(source, target)\n {\n target.push.apply(target, source);\n }\n\n static expand_vec3_array(array, size)\n {\n const items_left_count = size - array.length;\n\n for (let i = 0; i < items_left_count; i++)\n {\n array.push(array[i].clone());\n }\n }\n\n static remove_elem(array, elem)\n {\n const index = array.indexOf(elem);\n if (index > -1)\n {\n array.splice(index, 1);\n }\n }\n\n static get_closest_point(points, target)\n {\n let closest_point = points[0];\n let closest_distance = closest_point.distanceTo(target);\n for (let i = 1; i < points.length; i++)\n {\n if (points[i].distanceTo(target) < closest_distance)\n {\n closest_point = points[i];\n closest_distance = points[i].distanceTo(target);\n }\n }\n return closest_point;\n }\n\n static object_values_to_array(obj)\n {\n const ids = Object.keys(obj);\n const arr = [];\n for (let i = 0; i < ids.length; i++)\n {\n arr.push(obj[ids[i]]);\n }\n return arr;\n }\n}\n\nexport { ArrayUtilities };\n","import { Line3, Plane, Quaternion, Sphere, Vector3 } from 'three';\n\nclass FrustumPointFitter\n{\n constructor()\n {\n this.sphere = new Sphere();\n }\n\n fit_points(points, camera_quaternion, vertical_fov, aspect)\n {\n this.sphere.setFromPoints(points);\n\n const v_fov = Math.degToRad(vertical_fov / 2);\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const up_plane_normal = this.get_up_plane_normal(camera_quaternion, v_fov);\n const down_plane_normal = this.get_down_plane_normal(camera_quaternion, v_fov);\n const left_plane_normal = this.get_left_plane_normal(camera_quaternion, h_fov);\n const right_plane_normal = this.get_right_plane_normal(camera_quaternion, h_fov);\n\n const camera_forward_dir = new Vector3(0, 0, -1).applyQuaternion(camera_quaternion);\n\n const sphere_center = this.sphere.center.clone();\n\n const pull_back_distance = this.get_distance_to_fit_rect(this.sphere.radius * 2, this.sphere.radius * 2, vertical_fov, aspect);\n const far_pos = sphere_center.clone().add(camera_forward_dir.clone().multiplyScalar(pull_back_distance * -1));\n\n const up_plane = new Plane().setFromNormalAndCoplanarPoint(up_plane_normal, far_pos);\n const down_plane = new Plane().setFromNormalAndCoplanarPoint(down_plane_normal, far_pos);\n\n const left_plane = new Plane().setFromNormalAndCoplanarPoint(left_plane_normal, far_pos);\n const right_plane = new Plane().setFromNormalAndCoplanarPoint(right_plane_normal, far_pos);\n\n this.apply_center_correction_to_pos(far_pos, points, camera_quaternion, up_plane, down_plane, left_plane, right_plane);\n\n up_plane.setFromNormalAndCoplanarPoint(up_plane_normal, far_pos);\n down_plane.setFromNormalAndCoplanarPoint(down_plane_normal, far_pos);\n\n left_plane.setFromNormalAndCoplanarPoint(left_plane_normal, far_pos);\n right_plane.setFromNormalAndCoplanarPoint(right_plane_normal, far_pos);\n\n let closest_distance = Infinity;\n\n const inverse_dir = camera_forward_dir.clone().multiplyScalar(pull_back_distance * -2);\n for (let i = 0; i < points.length; i++)\n {\n const line = new Line3(points[i].clone(), points[i].clone().add(inverse_dir));\n\n const up_line_intersection = new Vector3();\n const down_line_intersection = new Vector3();\n\n const left_line_intersection = new Vector3();\n const right_line_intersection = new Vector3();\n\n up_plane.intersectLine(line, up_line_intersection);\n down_plane.intersectLine(line, down_line_intersection);\n\n left_plane.intersectLine(line, left_line_intersection);\n right_plane.intersectLine(line, right_line_intersection);\n\n if (up_line_intersection.length() < 0.0001)\n {\n console.log('up intersection not found', i);\n }\n if (down_line_intersection.length() < 0.0001)\n {\n console.log('down intersection not found', i);\n }\n if (left_line_intersection.length() < 0.0001)\n {\n console.log('left intersection not found', i);\n }\n if (right_line_intersection.length() < 0.0001)\n {\n console.log('right intersection not found', i);\n }\n\n const new_up_distance = points[i].clone().sub(up_line_intersection).length();\n const new_down_distance = points[i].clone().sub(down_line_intersection).length();\n\n const new_left_distance = points[i].clone().sub(left_line_intersection).length();\n const new_right_distance = points[i].clone().sub(right_line_intersection).length();\n\n const vertical_min = Math.min(new_up_distance, new_down_distance);\n const horizontal_min = Math.min(new_left_distance, new_right_distance);\n\n const min = Math.min(vertical_min, horizontal_min);\n\n if (min < closest_distance)\n {\n closest_distance = min;\n }\n }\n\n const forward_correction = camera_forward_dir.clone().multiplyScalar(closest_distance);\n const closest_position = far_pos.clone().add(forward_correction);\n\n return closest_position;\n }\n\n apply_center_correction_to_pos(target_pos, points, camera_quaternion, up_plane, down_plane, left_plane, right_plane)\n {\n const vertical_offset = this.get_vertical_correction(points, down_plane, up_plane, camera_quaternion);\n const horizontal_offset = this.get_hozirontal_correction(points, left_plane, right_plane, camera_quaternion);\n\n target_pos.add(vertical_offset);\n target_pos.add(horizontal_offset);\n }\n\n get_vertical_correction(points, down_plane, up_plane, camera_quaternion)\n {\n let closest_distance_to_up_plane = Infinity;\n let closest_distance_to_down_plane = Infinity;\n let closest_up_point = undefined;\n let closest_down_point = undefined;\n\n const up_dir = new Vector3(0, 1, 0).applyQuaternion(camera_quaternion);\n for (let i = 0; i < points.length; i++)\n {\n const down_line = new Line3(points[i].clone(), points[i].clone().add(up_dir.clone().multiplyScalar(-5000000)));\n const up_line = new Line3(points[i].clone(), points[i].clone().add(up_dir.clone().multiplyScalar(5000000)));\n\n const down_line_intersection = new Vector3();\n const up_line_intersection = new Vector3();\n\n down_plane.intersectLine(down_line, down_line_intersection);\n up_plane.intersectLine(up_line, up_line_intersection);\n\n const down_dist = down_line_intersection.distanceTo(points[i]);\n const up_dist = up_line_intersection.distanceTo(points[i]);\n\n if (up_line_intersection.length() < 0.0001)\n {\n console.log('vertical up intersection not found', i);\n }\n if (down_line_intersection.length() < 0.0001)\n {\n console.log('vertical down intersection not found', i);\n }\n\n if (down_dist < closest_distance_to_down_plane)\n {\n closest_distance_to_down_plane = down_dist;\n closest_down_point = points[i];\n }\n if (up_dist < closest_distance_to_up_plane)\n {\n closest_distance_to_up_plane = up_dist;\n closest_up_point = points[i];\n }\n }\n\n console.log(closest_up_point, closest_down_point);\n\n const correction = (closest_distance_to_up_plane - closest_distance_to_down_plane) / 2;\n\n // console.log(\"vertical_correction\", correction)\n return up_dir.clone().multiplyScalar(-correction);\n }\n\n get_hozirontal_correction(points, left_plane, right_plane, camera_quaternion)\n {\n let closest_distance_to_right_plane = Infinity;\n let closest_distance_to_left_plane = Infinity;\n let closest_right_point = undefined;\n let closest_left_point = undefined;\n\n const right_dir = new Vector3(1, 0, 0).applyQuaternion(camera_quaternion);\n\n for (let i = 0; i < points.length; i++)\n {\n const left_line = new Line3(points[i].clone(), points[i].clone().add(right_dir.clone().multiplyScalar(-5000000)));\n const right_line = new Line3(points[i].clone(), points[i].clone().add(right_dir.clone().multiplyScalar(5000000)));\n\n const left_line_intersection = new Vector3();\n const right_line_intersection = new Vector3();\n\n left_plane.intersectLine(left_line, left_line_intersection);\n right_plane.intersectLine(right_line, right_line_intersection);\n\n const left_dist = left_line_intersection.distanceTo(points[i]);\n const right_dist = right_line_intersection.distanceTo(points[i]);\n\n if (left_line_intersection.length() < 0.0001)\n {\n console.log('left intersection not found', i);\n }\n if (right_line_intersection.length() < 0.0001)\n {\n console.log('right intersection not found', i);\n }\n\n if (left_dist < closest_distance_to_left_plane)\n {\n closest_distance_to_left_plane = left_dist;\n closest_left_point = points[i];\n }\n if (right_dist < closest_distance_to_right_plane)\n {\n closest_distance_to_right_plane = right_dist;\n closest_right_point = points[i];\n }\n }\n\n const correction = (closest_distance_to_right_plane - closest_distance_to_left_plane) / 2;\n // console.log(\"horizontal_correction\", correction)\n\n console.log(closest_right_point, closest_left_point);\n\n return right_dir.clone().multiplyScalar(-correction);\n }\n\n get_up_plane_normal(camera_quaternion, v_fov)\n {\n const up_plane_normal = new Vector3(0, -1, 0);\n up_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), v_fov));\n up_plane_normal.applyQuaternion(camera_quaternion);\n return up_plane_normal;\n }\n\n get_down_plane_normal(camera_quaternion, v_fov)\n {\n const down_plane_normal = new Vector3(0, 1, 0);\n down_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), -v_fov));\n down_plane_normal.applyQuaternion(camera_quaternion);\n return down_plane_normal;\n }\n\n get_left_plane_normal(camera_quaternion, h_fov)\n {\n const left_plane_normal = new Vector3(1, 0, 0);\n left_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), h_fov));\n left_plane_normal.applyQuaternion(camera_quaternion);\n return left_plane_normal;\n }\n\n get_right_plane_normal(camera_quaternion, h_fov)\n {\n const right_plane_normal = new Vector3(-1, 0, 0);\n right_plane_normal.applyQuaternion(new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), -h_fov));\n right_plane_normal.applyQuaternion(camera_quaternion);\n return right_plane_normal;\n }\n\n get_distance_to_fit_rect(width, height, vertical_fov, aspect)\n {\n const v_fov = (vertical_fov / 2) * Math.PI / 180;\n const h_fov = (2 * Math.atan(Math.tan(v_fov) * aspect)) / 2;\n\n const distV = height / Math.tan(v_fov);\n const distH = width / Math.tan(h_fov);\n return Math.max(Math.abs(distH), Math.abs(distV));\n }\n}\n\nexport { FrustumPointFitter };\n","import { BufferAttribute } from 'three';\nimport { BufferGeometry } from 'three';\n\nclass GeometryUtilities\n{\n static convert_to_non_indexed_geometry(geometry_buffer)\n {\n const indices = geometry_buffer.index;\n const positions = geometry_buffer.getAttribute('position');\n\n const bar_coordinates = [];\n const vertices = [];\n\n for (let i = 0; i < indices.count; i += 3)\n {\n // VERTEX 1\n vertices.push(positions.getX(indices.array[i + 0]));\n vertices.push(positions.getY(indices.array[i + 0]));\n vertices.push(positions.getZ(indices.array[i + 0]));\n\n bar_coordinates.push(1);\n bar_coordinates.push(0);\n bar_coordinates.push(0);\n\n // VERTEX 2\n\n vertices.push(positions.getX(indices.array[i + 1]));\n vertices.push(positions.getY(indices.array[i + 1]));\n vertices.push(positions.getZ(indices.array[i + 1]));\n\n bar_coordinates.push(0);\n bar_coordinates.push(1);\n bar_coordinates.push(0);\n\n // VERTEX 3\n\n vertices.push(positions.getX(indices.array[i + 2]));\n vertices.push(positions.getY(indices.array[i + 2]));\n vertices.push(positions.getZ(indices.array[i + 2]));\n\n bar_coordinates.push(0);\n bar_coordinates.push(0);\n bar_coordinates.push(1);\n }\n\n const geometry = new BufferGeometry();\n // geometry.setAttribute('barycentric', new BufferAttribute( new Float32Array(bar_coordinates), 3 ));\n geometry.setAttribute('position', new BufferAttribute(new Float32Array(vertices), 3));\n GeometryUtilities.add_barycentric_attribute(geometry);\n return geometry;\n }\n\n static add_barycentric_attribute(non_indexed_geometry_buffer)\n {\n const bar_coordinates = [];\n const positions = non_indexed_geometry_buffer.getAttribute('position');\n\n for (let i = 0; i < positions.count; i += 3)\n {\n bar_coordinates.push(1);\n bar_coordinates.push(0);\n bar_coordinates.push(0);\n\n bar_coordinates.push(0);\n bar_coordinates.push(1);\n bar_coordinates.push(0);\n\n bar_coordinates.push(0);\n bar_coordinates.push(0);\n bar_coordinates.push(1);\n }\n non_indexed_geometry_buffer.setAttribute('barycentric', new BufferAttribute(new Float32Array(bar_coordinates), 3));\n }\n}\n\nexport { GeometryUtilities };\n","class HTMLUtilities\n{\n static load_images(container)\n {\n const images = container.querySelectorAll('img');\n\n for (let i = 0; i < images.length; i++)\n {\n const image = images[i];\n\n if (image.dataset.src)\n {\n image.src = image.dataset.src;\n }\n }\n\n const image_objects = container.querySelectorAll('object');\n\n for (let i = 0; i < image_objects.length; i++)\n {\n const image_object = image_objects[i];\n\n if (image_object.dataset.src)\n {\n image_object.data = image_object.dataset.src;\n }\n }\n }\n\n static load_videos(container)\n {\n const videos = container.querySelectorAll('video');\n\n for (let i = 0; i < videos.length; i++)\n {\n const video = videos[i];\n\n if (video.dataset.src)\n {\n video.src = video.dataset.src;\n }\n }\n }\n\n static load_iframes(container)\n {\n const iframes = container.querySelectorAll('iframe');\n\n for (let i = 0; i < iframes.length; i++)\n {\n const iframe = iframes[i];\n\n if (iframe.dataset.src)\n {\n iframe.src = iframe.dataset.src;\n }\n }\n }\n\n static load_elements(container, selector)\n {\n const elements = container.querySelectorAll(selector);\n\n for (let i = 0; i < elements.length; i++)\n {\n const element = elements[i];\n\n if (element.dataset.src)\n {\n element.src = element.dataset.src;\n }\n }\n }\n}\n\nexport { HTMLUtilities };\n","import { Vector4 } from 'three';\n\nclass ImageUtilities\n{\n constructor()\n { }\n\n static get_image_data(image)\n {\n const canvas = document.createElement('canvas');\n canvas.width = image.width;\n canvas.height = image.height;\n\n const context = canvas.getContext('2d');\n context.drawImage(image, 0, 0);\n\n return context.getImageData(0, 0, image.width, image.height);\n }\n\n static get_pixel(imagedata, x, y)\n {\n const position = (x + imagedata.width * y) * 4;\n const data = imagedata.data;\n return new Vector4(data[position + 0], data[position + 1], data[position + 2], data[position + 3]);\n }\n}\n\nexport { ImageUtilities };\n","import { Vector3 } from 'three';\nimport { Vector2 } from 'three';\nclass MeshSampler\n{\n constructor()\n {\n\n }\n\n sample(buffer_geometry, sample_count)\n {\n const face_areas = [];\n\n let min_area = 99999999;\n\n const vertices = buffer_geometry.getAttribute('position');\n const normals = buffer_geometry.getAttribute('normal');\n const tangents = buffer_geometry.getAttribute('tangent');\n const uvs = buffer_geometry.getAttribute('uv');\n const indices = buffer_geometry.index;\n\n const faces = [];\n\n for (let i = 0; i < indices.count; i += 3)\n {\n const index_0 = indices.array[i + 0];\n const index_1 = indices.array[i + 1];\n const index_2 = indices.array[i + 2];\n\n const v1 = new Vector3();\n v1.x = vertices.getX(index_0);\n v1.y = vertices.getY(index_0);\n v1.z = vertices.getZ(index_0);\n\n const v2 = new Vector3();\n v2.x = vertices.getX(index_1);\n v2.y = vertices.getY(index_1);\n v2.z = vertices.getZ(index_1);\n\n const v3 = new Vector3();\n v3.x = vertices.getX(index_2);\n v3.y = vertices.getY(index_2);\n v3.z = vertices.getZ(index_2);\n\n const face = {\n a: v1,\n b: v2,\n c: v3\n };\n\n if (normals)\n {\n const n1 = new Vector3();\n n1.x = normals.getX(index_0);\n n1.y = normals.getY(index_0);\n n1.z = normals.getZ(index_0);\n\n const n2 = new Vector3();\n n2.x = normals.getX(index_1);\n n2.y = normals.getY(index_1);\n n2.z = normals.getZ(index_1);\n\n const n3 = new Vector3();\n n3.x = normals.getX(index_2);\n n3.y = normals.getY(index_2);\n n3.z = normals.getZ(index_2);\n\n const normal = n1.clone().add(n2).add(n3).normalize();\n face.normal = normal;\n }\n\n if (tangents)\n {\n const n1 = new Vector3();\n n1.x = tangents.getX(index_0);\n n1.y = tangents.getY(index_0);\n n1.z = tangents.getZ(index_0);\n\n const n2 = new Vector3();\n n2.x = tangents.getX(index_1);\n n2.y = tangents.getY(index_1);\n n2.z = tangents.getZ(index_1);\n\n const n3 = new Vector3();\n n3.x = tangents.getX(index_2);\n n3.y = tangents.getY(index_2);\n n3.z = tangents.getZ(index_2);\n\n const tangent = n1.clone().add(n2).add(n3).normalize();\n face.tangent = tangent;\n }\n if (uvs)\n {\n const uv_a = new Vector2();\n uv_a.x = uvs.getX(index_0);\n uv_a.y = uvs.getY(index_0);\n\n const uv_b = new Vector2();\n uv_b.x = uvs.getX(index_1);\n uv_b.y = uvs.getY(index_1);\n\n const uv_c = new Vector2();\n uv_c.x = uvs.getX(index_2);\n uv_c.y = uvs.getY(index_2);\n\n face.uv_a = uv_a;\n face.uv_b = uv_b;\n face.uv_c = uv_c;\n }\n\n faces.push(face);\n\n const area = this.get_face_area(face);\n min_area = Math.min(area, min_area);\n face_areas.push(area);\n }\n\n const normalized_faces_array = this.get_uniform_face_distribution(face_areas, min_area, faces);\n const selected_faces = this.select_random_faces(normalized_faces_array, sample_count);\n const sampled_data = this.sample_data_from_faces(selected_faces);\n return sampled_data;\n }\n\n sample_data_from_faces(faces)\n {\n const sampled_points = [];\n const sampled_normals = [];\n const sampled_tangents = [];\n const sampled_uvs = [];\n\n for (let i = 0; i < faces.length; i++)\n {\n const face = faces[i];\n\n const w1 = Math.random();\n const w2 = Math.random();\n\n sampled_points.push(this.sample_point_in_face(w1, w2, face.a, face.b, face.c).clone());\n if (face.normal)\n {\n sampled_normals.push(face.normal.clone());\n }\n if (face.tangent)\n {\n sampled_tangents.push(face.tangent.clone());\n }\n if (face.uv_a)\n {\n sampled_uvs.push(this.sample_point_in_face(w1, w2, face.uv_a, face.uv_b, face.uv_c).clone());\n }\n }\n return { points: sampled_points, normals: sampled_normals, tangents: sampled_tangents, uvs: sampled_uvs };\n }\n\n select_random_faces(faces, amount)\n {\n const selected_faces = [];\n for (let i = 0; i < amount; i++)\n {\n const random = Math.floor(Math.random() * faces.length);\n const selected_face = faces[random];\n\n selected_faces.push(selected_face);\n }\n\n return selected_faces;\n }\n\n get_uniform_face_distribution(face_areas, minimum_area, faces)\n {\n const extended_triangle_indices = [];\n for (let i = 0; i < face_areas.length; i++)\n {\n face_areas[i] /= minimum_area;\n const repetitions_needed = Math.floor(Math.round(face_areas[i]));\n for (let j = 0; j < repetitions_needed; j++)\n {\n extended_triangle_indices.push(faces[i]);\n }\n }\n return extended_triangle_indices;\n }\n\n get_face_area(face)\n {\n const vec1 = face.b.clone().sub(face.a);\n const vec2 = face.c.clone().sub(face.a);\n return vec1.cross(vec2).length() / 2;\n }\n\n sample_point_in_face(w1, w2, v1, v2, v3)\n {\n if (w1 + w2 > 1)\n {\n w1 = 1.0 - w1;\n w2 = 1.0 - w2;\n }\n\n const w3 = 1.0 - (w1 + w2);\n\n return v1.clone().multiplyScalar(w1).add(v2.clone().multiplyScalar(w2)).add(v3.clone().multiplyScalar(w3));\n }\n}\n\nconst mesh_sampler = new MeshSampler();\nexport { mesh_sampler as MeshSampler };\n","import { Mesh } from 'three';\nimport { BufferGeometry } from 'three';\nimport { Skeleton } from 'three';\n\nclass ModelUtilities\n{\n get_mesh(scene, result_callback)\n {\n scene.traverse((child) =>\n {\n if (child instanceof Mesh)\n {\n if (child.geometry)\n {\n child.geometry = new BufferGeometry().fromGeometry(child.geometry);\n }\n result_callback(child);\n }\n });\n }\n\n get_geometries(scene)\n {\n const geometries = [];\n\n this.get_mesh(scene, (child) =>\n {\n geometries.push(child.geometry);\n });\n return geometries;\n }\n\n assign_material(scene, material, name)\n {\n scene.traverse((child) =>\n {\n if (child instanceof Mesh)\n {\n // assign to all if no name is given\n if (name === undefined)\n {\n child.material = material;\n }\n else\n {\n // if name is given, assign only to that\n if (child.name === name)\n {\n child.material = material;\n }\n }\n }\n });\n }\n\n clone_animated_gltf(gltf)\n {\n const clone = {\n animations: gltf.animations,\n scene: gltf.scene.clone(true)\n };\n\n const skinnedMeshes = {};\n\n gltf.scene.traverse(node =>\n {\n if (node.isSkinnedMesh)\n {\n skinnedMeshes[node.name] = node;\n }\n });\n\n const cloneBones = {};\n const cloneSkinnedMeshes = {};\n\n clone.scene.traverse(node =>\n {\n if (node.isBone)\n {\n cloneBones[node.name] = node;\n }\n\n if (node.isSkinnedMesh)\n {\n cloneSkinnedMeshes[node.name] = node;\n }\n });\n\n for (const name in skinnedMeshes)\n {\n const skinnedMesh = skinnedMeshes[name];\n const skeleton = skinnedMesh.skeleton;\n const cloneSkinnedMesh = cloneSkinnedMeshes[name];\n\n const orderedCloneBones = [];\n\n for (let i = 0; i < skeleton.bones.length; ++i)\n {\n const cloneBone = cloneBones[skeleton.bones[i].name];\n orderedCloneBones.push(cloneBone);\n }\n\n cloneSkinnedMesh.bind(\n new Skeleton(orderedCloneBones, skeleton.boneInverses),\n cloneSkinnedMesh.matrixWorld);\n }\n\n return clone;\n }\n\n set_shadow_config(scene, cast, receive)\n {\n scene.traverse((child) =>\n {\n if (child instanceof Mesh)\n {\n child.castShadow = cast;\n child.receiveShadow = receive;\n }\n });\n }\n\n __find_object(scene, object_name, result_callback)\n {\n scene.traverse((obj) =>\n {\n if (obj.name === object_name)\n {\n result_callback(obj);\n }\n });\n }\n\n get_object(scene, object_name)\n {\n let object = undefined;\n scene.traverse((obj) =>\n {\n if (obj.name === object_name)\n {\n object = obj;\n }\n });\n return object;\n }\n\n get_object_by_type(scene, object_type)\n {\n let object = undefined;\n scene.traverse((obj) =>\n {\n if (obj.constructor.name === object_type)\n {\n object = obj;\n }\n });\n return object;\n }\n}\n\nconst model_utilities = new ModelUtilities();\nexport { model_utilities as ModelUtilities };\n","class ObjectUtilities\r\n{\r\n static is_object(item)\r\n {\r\n return (item && typeof item === 'object' && !Array.isArray(item));\r\n }\r\n\r\n static merge_deep(target, ...sources)\r\n {\r\n if (!sources.length) return target;\r\n const source = sources.shift();\r\n\r\n if (ObjectUtilities.is_object(target) && ObjectUtilities.is_object(source))\r\n {\r\n for (const key in source)\r\n {\r\n if (ObjectUtilities.is_object(source[key]))\r\n {\r\n if (!target[key]) Object.assign(target, { [key]: {} });\r\n ObjectUtilities.merge_deep(target[key], source[key]);\r\n }\r\n else\r\n {\r\n Object.assign(target, { [key]: source[key] });\r\n }\r\n }\r\n }\r\n\r\n return ObjectUtilities.merge_deep(target, ...sources);\r\n }\r\n\r\n static xml_to_json(xml)\r\n {\r\n // Create the return object\r\n let obj = {};\r\n\r\n if (xml.nodeType === 1)\r\n { // element\r\n // do attributes\r\n if (xml.attributes.length > 0)\r\n {\r\n obj['@attributes'] = {};\r\n for (let j = 0; j < xml.attributes.length; j++)\r\n {\r\n const attribute = xml.attributes.item(j);\r\n obj['@attributes'][attribute.nodeName] = attribute.nodeValue;\r\n }\r\n }\r\n }\r\n else if (xml.nodeType === 3)\r\n { // text\r\n obj = xml.nodeValue;\r\n }\r\n\r\n // do children\r\n if (xml.hasChildNodes())\r\n {\r\n for (let i = 0; i < xml.childNodes.length; i++)\r\n {\r\n const item = xml.childNodes.item(i);\r\n const nodeName = item.nodeName;\r\n if (typeof (obj[nodeName]) === 'undefined')\r\n {\r\n obj[nodeName] = this.xml_to_json(item);\r\n }\r\n else\r\n {\r\n if (typeof (obj[nodeName].push) === 'undefined')\r\n {\r\n const old = obj[nodeName];\r\n obj[nodeName] = [];\r\n obj[nodeName].push(old);\r\n }\r\n obj[nodeName].push(this.xml_to_json(item));\r\n }\r\n }\r\n }\r\n return obj;\r\n }\r\n}\r\n\r\nexport { ObjectUtilities };\r\n","class StringUtilities\n{\n constructor()\n {}\n\n static get_random_color()\n {\n const hexValues = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F'];\n let hex = '#';\n\n for (let i = 0; i < 6; i++)\n {\n const index = Math.floor(Math.random() * hexValues.length);\n hex += hexValues[index];\n }\n\n return hex;\n }\n\n static capitalize(string)\n {\n const words = string.split(' ');\n\n for (let i = 0; i < words.length; i++)\n {\n words[i] = words[i][0].toUpperCase() + words[i].substr(1);\n }\n\n return words.join(' ');\n }\n\n static capitalize_first_letter(string)\n {\n return string.charAt(0).toUpperCase() + string.slice(1);\n }\n\n static snake_to_camelcase(string)\n {\n return string.toLowerCase().replace(/[-_][a-z0-9]/g, (group) => group.slice(-1).toUpperCase());\n }\n}\n\nexport { StringUtilities };\n","class TimeUtilities\n{\n constructor()\n {}\n\n // Converts a time string (00:00:00.45) into miliseconds\n time_str_to_ms(time_str)\n {\n time_str = time_str.split(':');\n\n let hours = Number(time_str[0]);\n hours = hours * 60 * 60 * 1000;\n\n let minutes = Number(time_str[1]);\n minutes = minutes * 60 * 1000;\n\n let seconds = Number(time_str[2]);\n seconds = seconds * 1000;\n\n return hours + minutes + seconds;\n }\n}\n\nexport { TimeUtilities };\n","class Validation\n{\n constructor()\n {}\n\n static is_int(n)\n {\n return Number(n) === n && n % 1 === 0;\n }\n\n static is_float(n)\n {\n return Number(n) === n && n % 1 !== 0;\n }\n\n static is_number(n)\n {\n return this.is_int(n) || this.is_float(n);\n }\n\n static is_json(str)\n {\n try\n {\n JSON.parse(str);\n }\n catch (e)\n {\n return false;\n }\n\n return true;\n }\n}\n\nexport { Validation };\n","import grid_frag from '../shaders/grid/grid.frag';\nimport grid_vert from '../shaders/grid/grid.vert';\n\nimport { GeometryUtilities } from '../utilities/GeometryUtilities';\n\nimport { Mesh } from 'three';\nimport { ShaderMaterial } from 'three';\nimport { Color } from 'three';\nimport { PlaneGeometry } from 'three';\n\nclass Grid extends Mesh\n{\n constructor()\n {\n const material = new ShaderMaterial({\n uniforms: {\n _Color: { value: new Color('#919191') }\n },\n vertexShader: grid_vert,\n fragmentShader: grid_frag,\n extensions: { derivatives: true },\n transparent: true,\n depthWrite: false\n });\n\n const plane_geometry = new PlaneGeometry(100, 100, 100, 100);\n\n const non_indexed_geometry = GeometryUtilities.convert_to_non_indexed_geometry(plane_geometry);\n\n super(non_indexed_geometry, material);\n\n this.rotation.x = -3.14 / 2;\n }\n}\n\nexport { Grid };\n","import line_vs from '../shaders/basic_line/basic_line.vert';\nimport line_fs from '../shaders/basic_line/basic_line.frag';\n\nimport { Mesh } from 'three';\nimport { BufferAttribute } from 'three';\nimport { BufferGeometry } from 'three';\nimport { ShaderMaterial } from 'three';\nimport { Color } from 'three';\n\nclass Line extends Mesh\n{\n constructor(points)\n {\n const geometry = new BufferGeometry();\n geometry.setAttribute('position', new BufferAttribute(new Float32Array([]), 3));\n geometry.setAttribute('next_position', new BufferAttribute(new Float32Array([]), 3));\n geometry.setAttribute('previous_position', new BufferAttribute(new Float32Array([]), 3));\n geometry.setAttribute('orientation', new BufferAttribute(new Float32Array([]), 1));\n geometry.setAttribute('coverage', new BufferAttribute(new Float32Array([]), 1));\n\n const material = new ShaderMaterial({\n uniforms: {\n _Thickness: { value: 0.2 },\n _Length: { value: 0 },\n _ElapsedTime: { value: 0 },\n _Color: { value: new Color('#FF0000') }\n },\n vertexShader: line_vs,\n fragmentShader: line_fs,\n transparent: true,\n depthWrite: false,\n extensions: { derivatives: true }\n\n });\n\n super(geometry, material);\n\n if (points)\n {\n this.setup(points);\n }\n }\n\n setup(points)\n {\n const vertices = [];\n const next_position = [];\n const previous_position = [];\n const orientation = [];\n const coverage = [];\n let accumulated_length = 0;\n\n for (let i = 0; i < points.length; i++)\n {\n vertices.push(points[i].x);\n vertices.push(points[i].y);\n vertices.push(points[i].z);\n orientation.push(1);\n\n vertices.push(points[i].x);\n vertices.push(points[i].y);\n vertices.push(points[i].z);\n orientation.push(-1);\n\n const next_point = this.__get_next_position(points, i);\n next_position.push(next_point.x);\n next_position.push(next_point.y);\n next_position.push(next_point.z);\n\n next_position.push(next_point.x);\n next_position.push(next_point.y);\n next_position.push(next_point.z);\n\n const previous_point = this.__get_previous_position(points, i);\n previous_position.push(previous_point.x);\n previous_position.push(previous_point.y);\n previous_position.push(previous_point.z);\n\n previous_position.push(previous_point.x);\n previous_position.push(previous_point.y);\n previous_position.push(previous_point.z);\n\n coverage.push(accumulated_length);\n coverage.push(accumulated_length);\n\n if (i < points.length - 1)\n {\n accumulated_length += points[i].distanceTo(next_point);\n }\n }\n const vertexList = new Float32Array(vertices);\n const nextPositionList = new Float32Array(next_position);\n const previousPositionList = new Float32Array(previous_position);\n const orientationList = new Float32Array(orientation);\n const coverageList = new Float32Array(coverage);\n\n const indices = [];\n for (let i = 0; i < ((vertexList.length / 3) - 2) / 2; i++)\n {\n const index = (i * 2) + 1;\n indices.push(index);\n indices.push(index + 1);\n indices.push(index - 1);\n\n indices.push(index);\n indices.push(index + 2);\n indices.push(index + 1);\n }\n\n this.geometry.setIndex(indices);\n this.geometry.getAttribute('position').copy(new BufferAttribute(vertexList, 3));\n this.geometry.getAttribute('next_position').copy(new BufferAttribute(nextPositionList, 3));\n this.geometry.getAttribute('previous_position').copy(new BufferAttribute(previousPositionList, 3));\n this.geometry.getAttribute('orientation').copy(new BufferAttribute(orientationList, 1));\n this.geometry.getAttribute('coverage').copy(new BufferAttribute(coverageList, 1));\n\n this.geometry.getAttribute('position').needsUpdate = true;\n this.geometry.getAttribute('next_position').needsUpdate = true;\n this.geometry.getAttribute('previous_position').needsUpdate = true;\n this.geometry.getAttribute('orientation').needsUpdate = true;\n this.geometry.getAttribute('coverage').needsUpdate = true;\n\n this.material.uniforms._Length.value = accumulated_length;\n this._length = accumulated_length;\n }\n\n set thickness(value)\n {\n this.material.uniforms._Thickness.value = value;\n }\n\n get thickness()\n {\n return this.material.uniforms._Thickness.value;\n }\n\n __get_previous_position(points, i)\n {\n if (i === 0)\n {\n return points[1].clone().sub(points[0]).multiplyScalar(-1).add(points[0]);\n }\n else\n {\n return points[i - 1];\n }\n }\n\n __get_next_position(points, i)\n {\n if (i === points.length - 1)\n {\n return points[points.length - 2].clone().sub(points[points.length - 1]).multiplyScalar(-1).add(points[points.length - 1]);\n }\n else\n {\n return points[i + 1];\n }\n }\n\n update()\n {\n }\n\n distance()\n {\n return this.accumulated_length;\n }\n\n total_length()\n {\n return this.accumulated_length;\n }\n\n dispose()\n {\n this.geometry.dispose();\n this.material.dispose();\n if (this.parent)\n {\n this.parent.remove(this);\n }\n }\n\n set color(col)\n {\n this.material.uniforms._Color.value.set(col);\n }\n\n get color()\n {\n return this.material.uniforms._Color.value;\n }\n\n copy_color(col)\n {\n this.material.uniforms._Color.value.copy(col);\n }\n}\n\nexport { Line };\n","import basic_texture_vert from '../shaders/basic_texture/basic_texture.vert';\nimport basic_texture_frag from '../shaders/basic_texture/basic_texture.frag';\n\nimport { Mesh } from 'three';\nimport { Vector2 } from 'three';\nimport { ShaderMaterial } from 'three';\nimport { DoubleSide } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { Vector3 } from 'three';\n\nclass WorldImage extends Mesh\n{\n constructor(texture, pivot)\n {\n pivot = pivot || new Vector2(0, 0);\n const material = new ShaderMaterial({\n uniforms: {\n _MainTex: { value: texture },\n _ScreenAligned: { value: 0 },\n _Scale: { value: 1 },\n _Opacity: { value: 1 }\n },\n vertexShader: basic_texture_vert,\n fragmentShader: basic_texture_frag,\n transparent: true,\n depthWrite: false,\n side: DoubleSide\n });\n const geometry = new PlaneGeometry(1, 1, 1);\n geometry.translate(-pivot.x / 2, -pivot.y / 2, 0);\n const current_scale = texture.image.width / texture.image.height;\n geometry.scale(current_scale, 1, 1);\n super(geometry, material);\n this.current_scale = current_scale;\n this.geometry.computeBoundingBox();\n\n this.tmp_bb_size = new Vector3();\n this.geometry.boundingBox.getSize(this.tmp_bb_size);\n }\n\n update_texture()\n {\n this.material.uniforms._MainTex.value.needsUpdate = true;\n const img = this.material.uniforms._MainTex.value.image;\n\n this.geometry.scale(1 / this.current_scale, 1, 1);\n this.current_scale = img.width / img.height;\n this.geometry.scale(this.current_scale, 1, 1);\n this.geometry.computeBoundingBox();\n this.geometry.boundingBox.getSize(this.tmp_bb_size);\n }\n\n get size()\n {\n return this.tmp_bb_size.clone().multiplyScalar(this.scale.x);\n }\n\n set size(value)\n {\n this.scale.set(value, value, value);\n this.material.uniforms._Scale.value = value;\n }\n\n set screen_aligned(boolean)\n {\n this.material.uniforms._ScreenAligned.value = boolean === true ? 1 : 0;\n }\n\n get screen_aligned()\n {\n return this.material.uniforms._ScreenAligned.value === 1;\n }\n\n set opacity(opacity)\n {\n this.material.uniforms._Opacity.value = opacity;\n }\n\n get opacity()\n {\n return this.material.uniforms._Opacity.value;\n }\n\n dispose()\n {\n this.geometry.dispose();\n this.parent.remove(this);\n this.material.uniforms._MainTex.value.dispose();\n this.material.dispose();\n }\n}\n\nexport { WorldImage };\n","import { WorldImage } from './WorldImage';\nimport { SimpleTextDrawer } from '../canvas_drawer/SimpleTextDrawer';\n\nimport { LinearMipMapLinearFilter } from 'three';\nimport { LinearFilter } from 'three';\n\nclass Text2D extends WorldImage\n{\n constructor(text, font, color, pivot, is_static)\n {\n const simple_text_drawer = new SimpleTextDrawer(is_static);\n\n const draw_settings = {\n font: font,\n font_color: color || '#000000'\n };\n const canvas_texture = simple_text_drawer.draw_on_texture(text, draw_settings);\n\n canvas_texture.minFilter = LinearMipMapLinearFilter;\n canvas_texture.minFilter = LinearFilter;\n canvas_texture.needsUpdate = true;\n super(canvas_texture, pivot);\n\n this.simple_text_drawer = simple_text_drawer;\n this.canvas_texture = canvas_texture;\n this.draw_settings = draw_settings;\n }\n\n set text(value)\n {\n this.simple_text_drawer.draw_canvas(value, this.draw_settings);\n this.update_texture();\n }\n\n get text()\n {\n return 'not implemented';\n }\n}\n\nexport { Text2D };\n","import vert from '../shaders/ui_element/ui_element.vert';\nimport frag from '../shaders/ui_element/ui_element.frag';\n\nimport { BaseShaderMaterial } from '../materials/BaseShaderMaterial';\n\nimport { Vector2 } from 'three';\nimport { Vector3 } from 'three';\n\nimport { OScreen } from '../OScreen';\n\nclass UIElementMaterial extends BaseShaderMaterial\n{\n constructor(intensity = 1)\n {\n super(vert, frag, {\n _MainTex: { value: undefined },\n _ScreenSize: { value: new Vector2(OScreen.width, OScreen.height) },\n _TextureSize: { value: new Vector2() },\n _PixelOffset: { value: new Vector2(0, 0) },\n _NDC: { value: new Vector3() },\n _PivotPoint: { value: new Vector2() },\n _DepthOffset: { value: 0 }\n });\n this.transparent = true;\n this.depthWrite = false;\n this.depthTest = false;\n }\n}\n\nexport { UIElementMaterial };\n","import { Vector2 } from 'three';\n\nclass ScreenSpacePosition\n{\n constructor()\n {\n this.tmp_vec = new Vector2();\n }\n\n get_pos_NDC(position)\n {\n return this.tmp_vec.set(position.x, position.y);\n }\n}\n\nexport { ScreenSpacePosition };\n","import { CameraManager } from '../../CameraManager';\n\nimport { Vector2 } from 'three';\nimport { Vector3 } from 'three';\n\nclass WorldSpacePosition\n{\n constructor()\n {\n this.tmp_vec3 = new Vector3();\n this.tmp_vec2 = new Vector2();\n }\n\n get_pos_NDC(position)\n {\n this.tmp_vec3.copy(position);\n this.tmp_vec3.project(CameraManager.current);\n\n return this.tmp_vec2.set(this.tmp_vec3.x, this.tmp_vec3.y);\n }\n}\n\nexport { WorldSpacePosition };\n","class UIElementState\n{\n constructor()\n {\n\n }\n\n update(ui_element, normalized_mouse_position)\n {\n\n }\n\n on_enter(ui_element)\n {}\n\n on_exit(ui_element)\n {}\n}\n\nexport { UIElementState };\n","import { UIElementState } from './UIElementState';\n\nclass OnIdle extends UIElementState\n{\n constructor()\n {\n super();\n }\n\n update(ui_element, normalized_mouse_position)\n {\n if (ui_element.is_mouse_over(normalized_mouse_position))\n {\n ui_element.set_state(ui_element._on_enter_state);\n }\n }\n}\n\nexport { OnIdle };\n","import { UIElementState } from './UIElementState';\n\nclass OnMouseEnter extends UIElementState\n{\n constructor()\n {\n super();\n }\n\n on_enter(ui_element)\n {\n ui_element.on_mouse_enter();\n }\n\n update(ui_element, normalized_mouse_position)\n {\n if (ui_element.is_mouse_over(normalized_mouse_position))\n {\n ui_element.set_state(ui_element._on_hover_state);\n }\n else\n {\n ui_element.set_state(ui_element._on_exit_state);\n }\n }\n}\n\nexport { OnMouseEnter };\n","import { UIElementState } from './UIElementState';\n\nclass OnMouseExit extends UIElementState\n{\n constructor()\n {\n super();\n }\n\n on_enter(ui_element)\n {\n ui_element.on_mouse_exit();\n ui_element.set_state(ui_element._on_idle_state);\n }\n}\n\nexport { OnMouseExit };\n","import { UIElementState } from './UIElementState';\n\nclass OnMouseHover extends UIElementState\n{\n constructor()\n {\n super();\n }\n\n on_enter(ui_element)\n {\n this.__trigger_on_hover(ui_element);\n }\n\n update(ui_element, normalized_mouse_position)\n {\n if (ui_element.is_mouse_over(normalized_mouse_position))\n {\n this.__trigger_on_hover(ui_element);\n }\n else\n {\n ui_element.set_state(ui_element._on_exit_state);\n }\n }\n\n __trigger_on_hover(ui_element)\n {\n ui_element.on_mouse_hover();\n }\n}\n\nexport { OnMouseHover };\n","\nimport { OScreen } from '../OScreen';\n\nimport { UIElementMaterial } from '../materials/UIElementMaterial';\n\nimport { ScreenSpacePosition } from '../ui/ui_element_position/ScreenSpacePosition';\nimport { WorldSpacePosition } from '../ui/ui_element_position/WorldSpacePosition';\n\nimport { OnIdle } from '../ui/ui_element_state/OnIdle';\nimport { OnMouseEnter } from '../ui/ui_element_state/OnMouseEnter';\nimport { OnMouseExit } from '../ui/ui_element_state/OnMouseExit';\nimport { OnMouseHover } from '../ui/ui_element_state/OnMouseHover';\n\nimport { Mesh } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { Vector2 } from 'three';\nimport { Vector3 } from 'three';\nimport { NearestFilter } from 'three';\nimport { Box2 } from 'three';\n\nclass UIElement extends Mesh\n{\n constructor(vert, frag)\n {\n super(new PlaneGeometry(1, 1), new UIElementMaterial());\n\n this.is_clickable = false;\n\n this.position_strategy = new WorldSpacePosition();\n this.current_state = new OnIdle();\n\n this._position = new Vector3();\n\n this._on_idle_state = new OnIdle();\n this._on_enter_state = new OnMouseEnter();\n this._on_exit_state = new OnMouseExit();\n this._on_hover_state = new OnMouseHover();\n\n this.on_enter = undefined;\n this.on_exit = undefined;\n this.on_hover = undefined;\n\n this.mouse_pos_tmp = new Vector2();\n this.cached_NDC_position = new Vector2();\n this.screen_pos_tmp = new Vector2();\n\n this.texture_size = new Vector2(1, 1);\n\n this.frustumCulled = false;\n this.matrixAutoUpdate = false;\n this.renderOrder = 0;\n\n this.size = 1;\n this.pixel_offset = new Vector2();\n }\n\n set_render_order(value)\n {\n this.renderOrder = value;\n }\n\n get pivot_point()\n {\n return this.material.uniforms._PivotPoint.value;\n }\n\n set_pixel_offset(offset)\n {\n this.pixel_offset.copy(offset);\n this.material.uniforms._PixelOffset.value.copy(offset);\n }\n\n set_state(new_state)\n {\n this.current_state.on_exit(this);\n this.current_state = new_state;\n this.current_state.on_enter(this);\n }\n\n get position()\n {\n return this._position;\n }\n\n set use_depth(boolean)\n {\n this.material.depthTest = boolean;\n }\n\n get use_depth()\n {\n return this.material.depthTest;\n }\n\n set depth_offset(value)\n {\n this.material.uniforms._DepthOffset.value = value;\n }\n\n get depth_offset()\n {\n return this.material.uniforms._DepthOffset.value;\n }\n\n clear_state()\n {\n this.visible = false;\n }\n\n set_world_space_coordinate_system()\n {\n this.position_strategy = new WorldSpacePosition();\n }\n\n set_screen_space_coordinate_system()\n {\n this.position_strategy = new ScreenSpacePosition();\n }\n\n set_texture(texture)\n {\n texture.minFilter = NearestFilter;\n texture.magFilter = NearestFilter;\n texture.needsUpdate = true;\n\n this.texture_size.set(texture.image.width, texture.image.height);\n\n this.material.uniforms._MainTex.value = texture;\n this.get_size(this.material.uniforms._TextureSize.value);\n this.visible = true;\n }\n\n update_state(normalized_mouse_pos)\n {\n this.material.uniforms._ScreenSize.value.set(OScreen.width, OScreen.height);\n this.get_size(this.material.uniforms._TextureSize.value);\n\n this.cached_NDC_position.copy(this.position_strategy.get_pos_NDC(this.position));\n this.material.uniforms._NDC.value.copy(this.position);\n this.current_state.update(this, normalized_mouse_pos);\n }\n\n is_mouse_over(normalized_mouse_pos)\n {\n this.screen_pos_tmp.copy(this.cached_NDC_position);\n this.to_screen_position(this.screen_pos_tmp);\n this.screen_pos_tmp.x += this.pixel_offset.x;\n this.screen_pos_tmp.y += this.pixel_offset.y;\n\n const rect = new Box2().setFromCenterAndSize(this.screen_pos_tmp, this.get_size());\n\n this.mouse_pos_tmp.copy(normalized_mouse_pos);\n this.to_screen_position(this.mouse_pos_tmp);\n\n return rect.containsPoint(this.mouse_pos_tmp);\n }\n\n to_screen_position(projected_pos)\n {\n projected_pos.x = (projected_pos.x * 0.5 + 0.5) * OScreen.width + this.pixel_offset.x;\n projected_pos.y = (projected_pos.y * 0.5 + 0.5) * OScreen.height + this.pixel_offset.y;\n }\n\n get_screen_space_position()\n {\n const pos = this.cached_NDC_position.clone();\n this.to_screen_position(pos);\n return pos;\n }\n\n set_screen_space_position(screen_pos)\n {\n this.position.x = (screen_pos.x / OScreen.width) * 2 - 1;\n this.position.y = (screen_pos.y / OScreen.height) * 2 - 1;\n }\n\n dispose()\n {\n if (this.material.uniforms._MainTex.value)\n {\n this.material.uniforms._MainTex.value.dispose();\n }\n // OScreen.remove_screen_material(this.material);\n this.geometry.dispose();\n this.material.dispose();\n }\n\n get_size(vector2)\n {\n if (vector2)\n {\n return vector2.copy(this.texture_size).multiplyScalar(this.size / OScreen.dpr);\n }\n else\n {\n return new Vector2().copy(this.texture_size).multiplyScalar(this.size / OScreen.dpr);\n }\n }\n\n on_mouse_enter()\n {}\n\n on_mouse_exit()\n {}\n\n on_mouse_hover()\n {}\n}\n\nexport { UIElement };\n","import { Mesh } from 'three';\n\nclass UpdatableMaterialMesh extends Mesh\n{\n constructor(geometry, material)\n {\n super(geometry, material);\n\n const self = this;\n\n this.onBeforeRender = () =>\n {\n self.material.update();\n };\n }\n}\n\nexport { UpdatableMaterialMesh };\n","import { Vector2, Vector4 } from 'three';\n\nclass TextGlyph\n{\n constructor(offset, plane_bounds, atlas_bounds)\n {\n const width = plane_bounds.right - plane_bounds.left;\n const height = plane_bounds.top - plane_bounds.bottom;\n\n this.scale = new Vector2(width, height);\n this.position = new Vector2(offset + plane_bounds.left, plane_bounds.bottom);\n\n this.atlas_bounds = new Vector4(atlas_bounds.left, atlas_bounds.right, atlas_bounds.top, atlas_bounds.bottom);\n }\n}\n\nexport { TextGlyph };\n","import { Vector3, Quaternion, Matrix4, Color, Box2, Vector2 } from 'three';\nimport { TextGlyph } from './TextGlyph';\n\nclass SDFText\n{\n constructor(glyph_layout, text = '')\n {\n this.glyph_layout = glyph_layout;\n\n this.glyphs = [];\n\n this.glyph_is_dirty = true;\n this.matrix_is_dirty = true;\n this.color_is_dirty = true;\n\n this.position = new Vector3();\n this.quaternion = new Quaternion();\n this.scale = new Vector3(1, 1, 1);\n this.matrix = new Matrix4();\n\n this.color = new Color('#FFFFFF');\n\n this.pivot_point = new Vector2();\n this.__opacity = 1;\n\n this.__text = text;\n\n this.__generate_glyphs(text);\n }\n\n set text(value)\n {\n this.__text = value;\n this.__generate_glyphs(value);\n this.matrix_is_dirty = true;\n }\n\n get text()\n {\n return this.__text;\n }\n\n update_matrix()\n {\n this.matrix.compose(this.position, this.quaternion, this.scale);\n this.matrix_is_dirty = false;\n this.glyph_is_dirty = true;\n }\n\n clear_glyph_dirty()\n {\n this.glyph_is_dirty = false;\n }\n\n clear_color_dirty()\n {\n this.color_is_dirty = false;\n }\n\n set_rotation(orientation = 0, tilt = 0) // 0..360, -90..0..90\n {\n const new_orientation = new Quaternion().setFromAxisAngle(new Vector3(0, 1, 0), (orientation / 360) * Math.PI * 2);\n const new_tilt = new Quaternion().setFromAxisAngle(new Vector3(1, 0, 0), (-tilt / 360) * Math.PI * 2);\n\n this.quaternion.copy(new_orientation.multiply(new_tilt));\n this.matrix_is_dirty = true;\n }\n\n set_position(pos)\n {\n this.position.copy(pos);\n this.matrix_is_dirty = true;\n }\n\n set_size(size)\n {\n this.scale.set(size, size, size);\n this.matrix_is_dirty = true;\n }\n\n set_color(col)\n {\n this.color.set(col);\n this.color_is_dirty = true;\n }\n\n set_pivot(pivot)\n {\n this.pivot_point.copy(pivot);\n this.update_glyphs();\n }\n\n set opacity(op)\n {\n this.__opacity = op;\n this.color_is_dirty = true;\n }\n\n get opacity()\n {\n return this.__opacity;\n }\n\n update_glyphs()\n {\n this.__generate_glyphs(this.text);\n }\n\n __generate_glyphs(text)\n {\n let cursor = 0;\n\n this.glyphs.length = 0;\n\n for (let i = 0; i < text.length; i++)\n {\n const unicode = text.charCodeAt(i);\n const glyph = this.glyph_layout.find(element => element.unicode === unicode);\n if (glyph)\n {\n if (glyph.planeBounds)\n {\n const text_glyph = new TextGlyph(cursor, glyph.planeBounds, glyph.atlasBounds);\n this.glyphs.push(text_glyph);\n }\n cursor += glyph.advance;\n }\n }\n\n const box2 = new Box2();\n const first_glyph = this.glyphs[0];\n box2.setFromCenterAndSize(first_glyph.position.clone().add(new Vector2(first_glyph.scale.x / 2, first_glyph.scale.y / 2)), first_glyph.scale);\n\n for (let i = 1; i < this.glyphs.length; i++)\n {\n const g = this.glyphs[i];\n const box = new Box2().setFromCenterAndSize(g.position.clone().add(new Vector2(g.scale.x / 2, g.scale.y / 2)), g.scale);\n box2.union(box);\n }\n\n const box2_size = new Vector2();\n box2.getSize(box2_size);\n for (let i = 0; i < this.glyphs.length; i++)\n {\n this.glyphs[i].position.x -= box2_size.x / 2;\n this.glyphs[i].position.y -= box2_size.y / 2;\n\n this.glyphs[i].position.x += (box2_size.x / 2) * this.pivot_point.x;\n this.glyphs[i].position.y += (box2_size.y / 2) * this.pivot_point.y;\n }\n\n this.glyph_is_dirty = true;\n }\n}\n\nexport { SDFText };\n","import { BaseShaderMaterial } from './BaseShaderMaterial';\n\nimport frag from '../shaders/sdf_text/sdf_text.frag';\nimport vert from '../shaders/sdf_text/sdf_text.vert';\n\nimport { Vector2, DoubleSide, LinearFilter } from 'three';\nimport { OMath } from '../utilities/OMath';\n\nclass SDFTextMaterial extends BaseShaderMaterial\n{\n constructor(texture)\n {\n super(vert, frag, {\n _Texture: { value: texture },\n _Boldness: { value: 0.5 },\n _AtlasSize: { value: new Vector2(1, 1) }\n });\n\n this.transparent = true;\n this.extensions = {\n derivatives: true\n };\n this.depthWrite = false;\n this.side = DoubleSide;\n texture.minFilter = LinearFilter;\n texture.magFilter = LinearFilter;\n texture.generateMipMaps = false;\n }\n\n set_atlas_size(size)\n {\n this.uniforms._AtlasSize.value.copy(size);\n }\n\n set_boldness(value)\n {\n this.uniforms._Boldness.value = OMath.lerp(0.5, 0.2, value);\n }\n}\n\nexport { SDFTextMaterial };\n","import { SDFText } from './SDFText';\nimport { SDFTextMaterial } from '../../materials/SDFTextMaterial';\nimport { ArrayUtilities } from '../../utilities/ArrayUtilities';\n\nimport {\n PlaneGeometry,\n Mesh,\n Vector2,\n InstancedBufferGeometry,\n InstancedBufferAttribute,\n Float32BufferAttribute,\n DynamicDrawUsage\n} from 'three';\n\nclass SDFTextBatch extends Mesh\n{\n constructor(font_layout, atlas_texture)\n {\n const max_allocations = 2000;\n\n const instanced_geometry = new InstancedBufferGeometry();\n instanced_geometry.instanceCount = 0;\n\n const geometry = new PlaneGeometry(1, 1);\n geometry.translate(0.5, 0.5, 0);\n instanced_geometry.setAttribute('position', new Float32BufferAttribute(geometry.getAttribute('position').array, 3));\n instanced_geometry.setAttribute('uv', new Float32BufferAttribute(geometry.getAttribute('uv').array, 2));\n instanced_geometry.index = geometry.index;\n\n const transformsCol0 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n const transformsCol1 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n const transformsCol2 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n const transformsCol3 = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n\n const glyph_bounds = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n const plane_bounds = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n\n const color = new InstancedBufferAttribute(new Float32Array(max_allocations * 4), 4, false);\n\n transformsCol0.usage = DynamicDrawUsage;\n transformsCol1.usage = DynamicDrawUsage;\n transformsCol2.usage = DynamicDrawUsage;\n transformsCol3.usage = DynamicDrawUsage;\n glyph_bounds.usage = DynamicDrawUsage;\n plane_bounds.usage = DynamicDrawUsage;\n color.usage = DynamicDrawUsage;\n\n instanced_geometry.setAttribute('transformsCol0', transformsCol0);\n instanced_geometry.setAttribute('transformsCol1', transformsCol1);\n instanced_geometry.setAttribute('transformsCol2', transformsCol2);\n instanced_geometry.setAttribute('transformsCol3', transformsCol3);\n\n instanced_geometry.setAttribute('glyph_bounds', glyph_bounds);\n instanced_geometry.setAttribute('plane_bounds', plane_bounds);\n instanced_geometry.setAttribute('color', color);\n\n super(instanced_geometry, new SDFTextMaterial(atlas_texture));\n\n this.text_elements = [];\n this.font_layout = font_layout;\n\n this.material.set_atlas_size(new Vector2(font_layout.atlas.width, font_layout.atlas.height));\n\n this.frustumCulled = false;\n }\n\n set_boldness(value)\n {\n this.material.set_boldness(value);\n }\n\n add_text(text_str)\n {\n const elem = new SDFText(this.font_layout.glyphs, text_str);\n this.text_elements.push(elem);\n return elem;\n }\n\n remove_text(text_elem)\n {\n ArrayUtilities.remove_elem(this.text_elements, text_elem);\n this.update(true);\n }\n\n update(force_update)\n {\n const glyph_bounds_atr = this.geometry.getAttribute('glyph_bounds');\n const plane_bounds_atr = this.geometry.getAttribute('plane_bounds');\n\n const transformsCol0 = this.geometry.getAttribute('transformsCol0');\n const transformsCol1 = this.geometry.getAttribute('transformsCol1');\n const transformsCol2 = this.geometry.getAttribute('transformsCol2');\n const transformsCol3 = this.geometry.getAttribute('transformsCol3');\n\n const color_atr = this.geometry.getAttribute('color');\n\n let matrix_needs_update = force_update === true;\n let glyph_needs_update = force_update === true;\n let color_needs_update = force_update === true;\n\n let glyph_count = 0;\n for (let i = 0; i < this.text_elements.length; i++)\n {\n const text = this.text_elements[i];\n\n if (text.matrix_is_dirty)\n {\n matrix_needs_update = true;\n text.update_matrix();\n }\n\n if (text.glyph_is_dirty)\n {\n glyph_needs_update = true;\n text.clear_glyph_dirty();\n }\n\n if (text.color_is_dirty)\n {\n color_needs_update = true;\n text.clear_color_dirty();\n }\n\n const matrix = text.matrix;\n const color = text.color;\n const opacity = text.opacity;\n\n for (let glyph_i = 0; glyph_i < text.glyphs.length; glyph_i++)\n {\n const glyph = text.glyphs[glyph_i];\n\n const buffer_i = glyph_count;\n\n glyph_bounds_atr.setXYZW(buffer_i, glyph.atlas_bounds.x, glyph.atlas_bounds.y, glyph.atlas_bounds.z, glyph.atlas_bounds.w);\n plane_bounds_atr.setXYZW(buffer_i, glyph.position.x, glyph.position.y, glyph.scale.x, glyph.scale.y);\n\n transformsCol0.setXYZW(buffer_i, matrix.elements[0],\n matrix.elements[1],\n matrix.elements[2],\n matrix.elements[3]);\n\n transformsCol1.setXYZW(buffer_i, matrix.elements[4],\n matrix.elements[5],\n matrix.elements[6],\n matrix.elements[7]);\n\n transformsCol2.setXYZW(buffer_i, matrix.elements[8],\n matrix.elements[9],\n matrix.elements[10],\n matrix.elements[11]);\n\n transformsCol3.setXYZW(buffer_i, matrix.elements[12],\n matrix.elements[13],\n matrix.elements[14],\n matrix.elements[15]);\n\n color_atr.setXYZW(buffer_i, color.r, color.g, color.b, opacity);\n\n glyph_count++;\n }\n }\n\n this.geometry.instanceCount = glyph_count;\n\n if (glyph_count > this.max_allocations)\n {\n console.error('SDFTextBatch exceeded maximum glyph allocations(max/current): ', this.max_allocations, glyph_count, this);\n }\n\n if (matrix_needs_update)\n {\n transformsCol0.needsUpdate = true;\n transformsCol1.needsUpdate = true;\n transformsCol2.needsUpdate = true;\n transformsCol3.needsUpdate = true;\n }\n if (glyph_needs_update)\n {\n glyph_bounds_atr.needsUpdate = true;\n plane_bounds_atr.needsUpdate = true;\n }\n if (color_needs_update)\n {\n color_atr.needsUpdate = true;\n }\n }\n\n dispose()\n {\n this.geometry.dispose();\n this.material.dispose();\n }\n}\n\nexport { SDFTextBatch };\n","import { ActionInterpolator } from './ActionInterpolator';\n\nclass VectorInterpolator extends ActionInterpolator\n{\n constructor(attribute_name, from = 0, to = 1, easing_function = 'linear')\n {\n super(easing_function);\n\n this.attribute_name = attribute_name;\n this.from = from;\n this.to = to;\n }\n\n update(context, t)\n {\n const tmp = this.from.clone();\n tmp.lerp(this.to, this.easing_function(t));\n context[this.attribute_name].copy(tmp);\n }\n}\n\nexport { VectorInterpolator };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport downsample_frag from '../shaders/dual_filter_blur/downsample.frag';\nimport upsample_frag from '../shaders/dual_filter_blur/upsample.frag';\n\nclass DualFilteringBlurMaterial extends BlitMaterial\n{\n constructor(upsample)\n {\n super(upsample ? upsample_frag : downsample_frag);\n }\n}\n\nexport { DualFilteringBlurMaterial };\n","import { BlitMaterial } from './BlitMaterial';\n\nimport frag from '../shaders/dual_filter_blur/alpha_filter.frag';\n\nclass AlphaFilterMaterial extends BlitMaterial\n{\n constructor(use_alpha_mask, upsample)\n {\n super(frag);\n }\n\n set offset(value)\n {\n this.uniforms._Offset.value = value;\n }\n\n get offset()\n {\n return this.uniforms._Offset.value;\n }\n}\n\nexport { AlphaFilterMaterial };\n","import { DualFilteringBlurMaterial } from '../materials/DualFilteringBlurMaterial';\nimport { AlphaFilterMaterial } from '../materials/AlphaFilterMaterial';\nimport { Graphics } from '../Graphics';\nimport { WebGLRenderTarget } from 'three';\nclass DualFilteringBlurrer\n{\n constructor(use_alpha_mask)\n {\n this.current_width = 1;\n this.current_height = 1;\n this.RT0 = new WebGLRenderTarget(1, 1);\n this.RT1 = new WebGLRenderTarget(1, 1);\n this.RT2 = new WebGLRenderTarget(1, 1);\n this.RT3 = new WebGLRenderTarget(1, 1);\n this.RT4 = new WebGLRenderTarget(1, 1);\n\n this.upscale_blur_mat = new DualFilteringBlurMaterial(true);\n this.downscale_blur_mat = new DualFilteringBlurMaterial(false);\n\n this.alpha_filter_mat = new AlphaFilterMaterial();\n }\n\n blur(RT)\n {\n this.check_RT_resize(RT.width, RT.height);\n Graphics.blit(RT, this.RT1, this.alpha_filter_mat);\n\n // Graphics.blit(this.RT0, this.RT1, this.downscale_blur_mat);\n Graphics.blit(this.RT1, this.RT2, this.downscale_blur_mat);\n Graphics.blit(this.RT2, this.RT3, this.downscale_blur_mat);\n Graphics.blit(this.RT3, this.RT4, this.downscale_blur_mat);\n\n // Graphics.blit(this.RT4, this.RT3, this.upscale_blur_mat);\n // Graphics.blit(this.RT3, this.RT4, this.upscale_blur_mat);\n Graphics.blit(this.RT4, this.RT3, this.upscale_blur_mat);\n Graphics.blit(this.RT3, this.RT2, this.upscale_blur_mat);\n Graphics.blit(this.RT2, RT, this.upscale_blur_mat);\n // Graphics.blit(this.RT1, RT, this.upscale_blur_mat);\n\n // return this.RT2;\n }\n\n check_RT_resize(width, height)\n {\n if (this.current_width !== width || this.current_height !== height)\n {\n this.current_width = width;\n this.current_height = height;\n this.RT0.setSize(this.current_width / 2, this.current_height / 2);\n this.RT1.setSize(this.current_width / 2, this.current_height / 2);\n this.RT2.setSize(this.current_width / 4, this.current_height / 4);\n this.RT3.setSize(this.current_width / 8, this.current_height / 8);\n this.RT4.setSize(this.current_width / 16, this.current_height / 16);\n }\n }\n}\n\nexport { DualFilteringBlurrer };\n","import { BlitMaterial } from '../materials/BlitMaterial';\n\nimport frag from '../shaders/median_filter/median_filter.frag';\n\nimport { Vector2 } from 'three';\n\nclass MedianFilterMaterial extends BlitMaterial\n{\n constructor()\n {\n super(frag, undefined, {\n kernel3x3: true\n });\n\n this.uniforms._SourceTex = { value: undefined };\n this.uniforms._SourceTexSize = { value: new Vector2(1, 1) };\n }\n\n set_texture(tex)\n {\n this.uniforms._SourceTex.value = tex;\n\n const size = this.get_size(tex);\n this.uniforms._SourceTexSize.value.copy(size);\n }\n\n get_size(tex)\n {\n if (tex.isVideoTexture)\n {\n return new Vector2(Math.max(1, tex.image.videoWidth), Math.max(1, tex.image.videoHeight));\n }\n if (tex.isWebGLRenderTarget)\n {\n return new Vector2(tex.width, tex.height);\n }\n if (tex.isTexture)\n {\n return new Vector2(tex.image.width, tex.image.height);\n }\n return new Vector2(1, 1);\n }\n}\n\nexport { MedianFilterMaterial };\n","import { MedianFilterMaterial } from '../materials/MedianFilterMaterial';\nimport { Graphics } from '../Graphics';\n\nimport { WebGLRenderTarget, Vector2, RGBAFormat, FloatType, NearestFilter } from 'three';\n\nclass MedianFilter\n{\n constructor(renderer)\n {\n this.RT = new WebGLRenderTarget(1, 1, {\n type: FloatType,\n format: RGBAFormat,\n minFilter: NearestFilter,\n magFilter: NearestFilter\n });\n this.RT1 = new WebGLRenderTarget(1, 1, {\n type: FloatType,\n format: RGBAFormat,\n minFilter: NearestFilter,\n magFilter: NearestFilter\n });\n\n this.median_filter_mat = new MedianFilterMaterial();\n }\n\n filter(texture)\n {\n const tex_size = this.get_size(texture);\n if (tex_size.x !== this.RT.width || tex_size.y !== this.RT.height)\n {\n this.RT.setSize(tex_size.x, tex_size.y);\n this.RT1.setSize(tex_size.x, tex_size.y);\n }\n\n this.median_filter_mat.set_texture(texture);\n Graphics.material_pass(this.median_filter_mat, this.RT);\n\n for (let i = 0; i < 0; i++)\n {\n this.median_filter_mat.set_texture(this.RT.texture);\n Graphics.material_pass(this.median_filter_mat, this.RT1);\n\n this.median_filter_mat.set_texture(this.RT1.texture);\n Graphics.material_pass(this.median_filter_mat, this.RT);\n }\n\n return this.RT;\n }\n\n get_size(tex)\n {\n if (tex.isVideoTexture)\n {\n return new Vector2(Math.max(1, tex.image.videoWidth), Math.max(1, tex.image.videoHeight));\n }\n if (tex.isWebGLRenderTarget)\n {\n return new Vector2(tex.width, tex.height);\n }\n if (tex.isTexture)\n {\n return new Vector2(tex.image.width, tex.image.height);\n }\n return new Vector2(1, 1);\n }\n}\n\nexport { MedianFilter };\n","import { Graphics } from '../Graphics';\n\nimport { FloatType, HalfFloatType, NearestFilter, NoColorSpace, RGBAFormat, WebGLRenderTarget } from 'three';\nimport { Capabilities } from '../Capabilities';\n\nclass ParticleAttribute\n{\n constructor(attr_name, update_material)\n {\n this.read = undefined;\n this.write = undefined;\n\n this.name = attr_name;\n\n this.update_material = update_material;\n }\n\n init_from_geometry(geometry)\n {\n // overrided by inheritance\n }\n\n init_from_attribute(particle_attribute)\n {\n\n }\n\n build_RT(particle_count)\n {\n const resolution = ParticleAttribute.calculate_resolution(particle_count);\n const options = {\n minFilter: NearestFilter,\n magFilter: NearestFilter,\n format: RGBAFormat,\n colorScape: NoColorSpace,\n type: Capabilities.fp_textures_available ? FloatType : HalfFloatType,\n stencilBuffer: false,\n depthBuffer: false\n };\n\n return new WebGLRenderTarget(resolution.width, resolution.height, options);\n }\n\n static calculate_resolution(particle_count)\n {\n const width = Math.min(particle_count, 512);\n const height = Math.max(1, Math.ceil(particle_count / width));\n return { width, height };\n }\n\n swap_RT()\n {\n const tmp = this.read;\n this.read = this.write;\n this.write = tmp;\n }\n\n update(attribute_writter_scene)\n {\n if (this.update_material)\n {\n this.update_material.update();\n attribute_writter_scene.children[0].material = this.update_material;\n this.update_material.uniforms._MainTex.value = this.read.texture;\n Graphics.render(attribute_writter_scene, undefined, this.write);\n attribute_writter_scene.children[0].material = undefined;\n\n this.swap_RT();\n }\n }\n\n store_geometry_attribute_in_RT(attribute, RT, storage_material, attribute_writter_scene)\n {\n attribute_writter_scene.children[0].geometry.setAttribute('data', attribute);\n attribute_writter_scene.children[0].material = storage_material;\n\n Graphics.render(attribute_writter_scene, undefined, RT);\n\n attribute_writter_scene.children[0].geometry.deleteAttribute('data');\n attribute_writter_scene.children[0].material = undefined;\n }\n\n get_texture()\n {\n return this.read.texture;\n }\n}\n\nexport { ParticleAttribute };\n","import { Object3D } from 'three';\nimport { BufferAttribute } from 'three';\nimport { PlaneGeometry } from 'three';\nimport { Mesh } from 'three';\nimport { BufferGeometry } from 'three';\nimport { Scene } from 'three';\nimport { Points } from 'three';\nimport { InstancedBufferGeometry } from 'three';\nimport { InstancedBufferAttribute } from 'three';\nimport { ParticleAttribute } from './ParticleAttribute';\n\nclass GPUParticleSystem extends Object3D\n{\n constructor(particle_count, material)\n {\n super();\n this.attributes = [];\n\n this.mesh = this.build_point_mesh(particle_count, material);\n this.add(this.mesh);\n\n this.attribute_writter_mesh = this.build_attribute_writter_mesh(particle_count);\n this.attribute_writter_scene = new Scene();\n this.attribute_writter_scene.add(this.attribute_writter_mesh);\n }\n\n add_texture_attribute(buffer_attribute)\n {\n this.attributes.push(buffer_attribute);\n }\n\n add_update_attribute_array(name, array, item_size)\n {\n this.attribute_writter_mesh.geometry.setAttribute(name, new BufferAttribute(array, item_size, false));\n }\n\n add_attribute_array(name, array, item_size)\n {\n this.mesh.geometry.setAttribute(name, new InstancedBufferAttribute(array, item_size, false));\n }\n\n update()\n {\n this.mesh.material.update();\n for (let i = 0; i < this.attributes.length; i++)\n {\n this.attributes[i].update(this.attribute_writter_scene);\n }\n }\n\n dispose()\n {\n this.mesh.geometry.dispose();\n this.mesh.material.dispose();\n }\n\n build_point_mesh(instance_count = 1, material)\n {\n const geo = new PlaneGeometry();\n\n const instanced_geo = new InstancedBufferGeometry();\n instanced_geo.setAttribute('position', geo.getAttribute('position'));\n instanced_geo.index = geo.index;\n\n instanced_geo.setAttribute('storage_uv', this.build_uv_storage_attribute(instance_count));\n instanced_geo.instanceCount = instance_count;\n const mesh = new Mesh(instanced_geo, material);\n mesh.frustumCulled = false;\n return mesh;\n }\n\n build_attribute_writter_mesh(particle_count)\n {\n const { width, height } = ParticleAttribute.calculate_resolution(particle_count);\n\n const uvs = new Float32Array(particle_count * 3);\n\n for (let i = 0; i < particle_count; i++)\n {\n const x = i % width;\n const y = Math.floor(i / width);\n uvs[i * 3 + 0] = (x + 0.5) / width;\n uvs[i * 3 + 1] = (y + 0.5) / height;\n uvs[i * 3 + 2] = i;\n }\n const geo = new BufferGeometry();\n geo.setAttribute('position', new BufferAttribute(uvs, 3, false));\n\n const points = new Points(geo);\n points.frustumCulled = false;\n return points;\n }\n\n build_uv_storage_attribute(particle_count)\n {\n const { width, height } = ParticleAttribute.calculate_resolution(particle_count);\n\n const uvs = new Float32Array(particle_count * 2);\n\n for (let i = 0; i < particle_count; i++)\n {\n const x = i % width;\n const y = Math.floor(i / width);\n uvs[i * 2 + 0] = (x + 0.5) / width;\n uvs[i * 2 + 1] = (y + 0.5) / height;\n }\n return new InstancedBufferAttribute(uvs, 2, false);\n }\n}\n\nexport { GPUParticleSystem };\n","import frag from '../../shaders/gpu_particles/generic_storage.frag';\n\nimport { ShaderMaterial } from 'three';\nimport { NoBlending } from 'three';\nimport { AlwaysDepth } from 'three';\n\nclass ParticleStorageMaterial extends ShaderMaterial\n{\n constructor()\n {\n const vert = `\n varying vec4 value;\n attribute vec4 data;\n\n void main()\n {\n gl_Position = vec4(position.xy * 2.0 - 1.0, 1.0,1.0);\n gl_PointSize = 1.0;\n\n value = data;\n }\n `;\n super({\n uniforms: {\n\n },\n vertexShader: vert,\n fragmentShader: frag,\n depthWrite: false,\n blending: NoBlending,\n depthTest: false,\n depthFunc: AlwaysDepth\n });\n }\n}\n\nexport { ParticleStorageMaterial };\n","import { BufferAttribute } from 'three';\n\nimport { ParticleAttribute } from '../gpu_particles/ParticleAttribute';\nimport { ParticleStorageMaterial } from '../materials/gpu_particles/ParticleStorageMaterial';\n\nclass ParticlePositionAttribute extends ParticleAttribute\n{\n constructor(update_material)\n {\n super('_Position', update_material);\n }\n\n store_geometry(geometry, attribute_writter_scene)\n {\n const pos_attr = geometry.getAttribute('position');\n this.read = this.build_RT(pos_attr.count);\n this.write = this.build_RT(pos_attr.count);\n\n const mat = new ParticleStorageMaterial();\n this.store_geometry_attribute_in_RT(geometry.getAttribute('position'), this.read, mat, attribute_writter_scene);\n }\n\n store_positions(positions, attribute_writter_scene)\n {\n this.read = this.build_RT(positions.length);\n this.write = this.build_RT(positions.length);\n\n const arr = new Float32Array(positions.length * 4);\n\n for (let i = 0; i < positions.length; i++)\n {\n arr[i * 4 + 0] = positions[i].x;\n arr[i * 4 + 1] = positions[i].y;\n arr[i * 4 + 2] = positions[i].z;\n arr[i * 4 + 3] = (Math.random() * 2 - 1) * 10;\n }\n const mat = new ParticleStorageMaterial();\n this.store_geometry_attribute_in_RT(new BufferAttribute(arr, 4), this.read, mat, attribute_writter_scene);\n }\n}\n\nexport { ParticlePositionAttribute };\n","import { DataTexture } from 'three';\n\nclass CustomDataTexture extends DataTexture\n{\n constructor(data, width, height, format, type)\n {\n super(data, width, height, format, type);\n this.multiplier = 1;\n }\n\n set_rgba(index, r, g, b, a)\n {\n this.data[index * 3 + 0] = r * this.multiplier;\n this.data[index * 3 + 1] = g * this.multiplier;\n this.data[index * 3 + 2] = b * this.multiplier;\n this.data[index * 3 + 3] = a * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_rgb(index, r, g, b)\n {\n this.data[index * 3 + 0] = r * this.multiplier;\n this.data[index * 3 + 1] = g * this.multiplier;\n this.data[index * 3 + 2] = b * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_r(index, value)\n {\n this.data[index * 3 + 0] = value * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_g(index, value)\n {\n this.data[index * 3 + 1] = value * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_b(index, value)\n {\n this.data[index * 3 + 2] = value * this.multiplier;\n this.needsUpdate = true;\n }\n\n set_a(index, value)\n {\n this.data[index * 3 + 2] = value * this.multiplier;\n this.needsUpdate = true;\n }\n}\n\nexport { CustomDataTexture };\n","import { RGBAFormat } from 'three';\nimport { CustomDataTexture } from './CustomDataTexture';\n\nclass RGBDataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Uint8Array(width * height * 3);\n super(data, width, height, RGBAFormat);\n this.multiplier = 255;\n }\n}\n\nexport { RGBDataTexture };\n","import { CustomDataTexture } from './CustomDataTexture';\nimport { RGBAFormat } from 'three';\n\nclass RGBADataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Uint8Array(width * height * 4);\n super(data, width, height, RGBAFormat);\n this.multiplier = 255;\n }\n}\n\nexport { RGBADataTexture };\n","import { FloatType, RGBAFormat } from 'three';\nimport { CustomDataTexture } from './CustomDataTexture';\n\nclass RGBFloatDataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Float32Array(width * height * 3);\n super(data, width, height, RGBAFormat, FloatType);\n }\n}\n\nexport { RGBFloatDataTexture };\n","import { CustomDataTexture } from './CustomDataTexture';\nimport { FloatType } from 'three';\nimport { RGBAFormat } from 'three';\n\nclass RGBAFloatDataTexture extends CustomDataTexture\n{\n constructor(width, height)\n {\n const data = new Float32Array(width * height * 4);\n super(data, width, height, RGBAFormat, FloatType);\n }\n}\n\nexport { RGBAFloatDataTexture };\n","import { Mesh } from 'three';\nimport { RGBDataTexture } from '../data_textures/RGBDataTexture';\nimport { RGBADataTexture } from '../data_textures/RGBADataTexture';\nimport { RGBFloatDataTexture } from '../data_textures/RGBFloatDataTexture';\nimport { RGBAFloatDataTexture } from '../data_textures/RGBAFloatDataTexture';\n\nclass BatchedMesh extends Mesh\n{\n constructor(id_table, geometry, material, max_texture_width)\n {\n super(geometry, material);\n\n this.id_table = id_table;\n this.batched_count = Object.keys(id_table).length;\n this.max_texture_width = max_texture_width;\n this.batch_width = this.batched_count % max_texture_width;\n this.batch_height = Math.ceil(this.batched_count / max_texture_width);\n }\n\n attach_rgb_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBDataTexture(this.batch_width, this.batch_height);\n }\n\n attach_rgba_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBADataTexture(this.batch_width, this.batch_height);\n }\n\n attach_rgb_float_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBFloatDataTexture(this.batch_width, this.batch_height);\n }\n\n attach_rgba_float_texture(uniform_name)\n {\n this.material.uniforms[uniform_name].value = new RGBAFloatDataTexture(this.batch_width, this.batch_height);\n }\n\n get_mesh_index(name)\n {\n return this.id_table[name];\n }\n\n set_rgb_value(uniform_name, mesh_name, r, g, b)\n {\n this.material.uniforms[uniform_name].set_rgb(this.get_mesh_index(mesh_name), r, g, b);\n }\n\n set_rgba_value(uniform_name, mesh_name, r, g, b, a)\n {\n this.material.uniforms[uniform_name].set_rgba(this.get_mesh_index(mesh_name), r, g, b, a);\n }\n}\n\nexport { BatchedMesh };\n","import { BatchedMesh } from './BatchedMesh';\n\nimport * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js';\n\nimport { BufferAttribute } from 'three';\n\nclass MeshBatcher\n{\n batch(meshes, material)\n {\n const max_texture_width = 2048;\n // let texture_width = meshes.length % max_texture_width;\n // let texture_height = Math.ceil(meshes.length / max_texture_width);\n\n // console.log(\"Store count: \" + buffer_geometries.length + \", Texture size: \" +texture_width);\n\n const geometries = [];\n const id_table = {};\n\n const attr_mesh_id = [];\n\n for (let i = 0; i < meshes.length; i++)\n {\n const mesh = meshes[i];\n const vertex_count = mesh.geometry.getAttribute('position').count;\n\n for (let count = 0; count < vertex_count; count++)\n {\n attr_mesh_id.push(i);\n }\n\n geometries.push(mesh.geometry);\n\n if (id_table[mesh.name] === undefined)\n {\n id_table[mesh.name] = i;\n }\n else\n {\n console.error('Mesh name is duplicated when trying to merge meshes. Non-unique id error.', mesh.name, id_table);\n }\n }\n\n const buffer_geometry = BufferGeometryUtils.mergeGeometries(geometries);\n\n const buffer_attribute = new BufferAttribute(new Float32Array(attr_mesh_id), 1);\n buffer_geometry.setAttribute('mesh_id', buffer_attribute);\n\n return this.create_batched_mesh(id_table, buffer_geometry, material, max_texture_width);\n }\n\n create_batched_mesh(id_table, buffer_geometry, material, max_texture_width)\n {\n return new BatchedMesh(id_table, buffer_geometry, material, max_texture_width);\n }\n}\n\nexport { MeshBatcher };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { ColladaLoader } from 'three/examples/jsm/loaders/ColladaLoader.js';\r\n\r\nclass DAELoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new ColladaLoader();\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (gltf) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, gltf);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { DAELoader };\r\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { FileLoader as TFileLoader } from 'three';\r\n\r\nclass FileLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new TFileLoader();\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (file) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, file);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg);\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { FileLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\n\nimport { FontLoader as TFontLoader } from 'three/examples/jsm/loaders/FontLoader.js';\n\nclass FontLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n this.loader = new TFontLoader();\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (font) =>\n {\n resource_container.set_resource(this.resource_id, this.url, font);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then probably the problem is related to the file not being found. Check the name and path of the resource');\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { FontLoader };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { HDRCubeTextureLoader as THDRCubeTextureLoader } from 'three/examples/jsm/loaders/HDRCubeTextureLoader.js';\r\n\r\nclass HDRCubeTextureLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, extension, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new THDRCubeTextureLoader();\r\n this.loader.setPath(url + '/');\r\n // this.loader.setDataType(UnsignedByteType);\r\n this.urls = [\r\n `px.${extension}`,\r\n `nx.${extension}`,\r\n `py.${extension}`,\r\n `ny.${extension}`,\r\n `pz.${extension}`,\r\n `nz.${extension}`\r\n ];\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.urls, (hdr) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, hdr);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then the probably the problem is related to the file not being found. Check the name and path of the resource');\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { HDRCubeTextureLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\n\nclass JSONLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n }\n\n on_preloaded_finished(resource_container, response)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n response.json().then((json) =>\n {\n resource_container.set_resource(this.resource_id, this.url, json);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { JSONLoader };\n","import { AbstractLoader } from './AbstractLoader';\n\nimport { OBJLoader as TOBJLoader } from 'three/examples/jsm/loaders/OBJLoader.js';\n\nclass OBJLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n this.loader = new TOBJLoader();\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (obj) =>\n {\n resource_container.set_resource(this.resource_id, this.url, obj);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg + '\\n\\n\\t If the error says something about unexpected token < in JSON then probably the problem is related to the file not being found. Check the name and path of the resource');\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { OBJLoader };\n","import { AbstractLoader } from './AbstractLoader';\n\nimport { Vector3 } from 'three';\nimport { FileLoader } from 'three';\n\nclass PointArrayLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n this.loader = new FileLoader();\n }\n\n on_preloaded_finished(resource_container)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n this.loader.load(this.url, (text) =>\n {\n resource_container.set_resource(this.resource_id, this.url, this.parse_path(text));\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n },\n (xhr) =>\n {\n // if (xhr)\n // {\n // let total = xhr.total || this.total_bytes;\n // this.__update_downloaded_bytes(xhr.loaded, total);\n // }\n },\n (msg) =>\n {\n this.__set_error(msg);\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n\n parse_path(raw_data)\n {\n const string_array = raw_data.split('\\n');\n\n if (string_array[string_array.length - 1] === '')\n {\n string_array.pop();\n }\n\n const positions = [];\n\n for (let i = 0; i < string_array.length; i += 3)\n {\n const x = parseFloat(string_array[i + 0]);\n const y = parseFloat(string_array[i + 1]);\n const z = parseFloat(string_array[i + 2]);\n positions.push(new Vector3(x, y, z));\n }\n return positions;\n // let curve = new THREE.CatmullRomCurve3(positions);\n // return curve.getPoints(100);\n }\n}\n\nexport { PointArrayLoader };\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { FileLoader as TFileLoader } from 'three';\r\n\r\nclass TextLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n this.loader = new TFileLoader();\r\n }\r\n\r\n on_preloaded_finished(resource_container)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n this.loader.load(this.url, (gltf) =>\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, gltf);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n },\r\n (xhr) =>\r\n {\r\n // if (xhr)\r\n // {\r\n // let total = xhr.total || this.total_bytes;\r\n // this.__update_downloaded_bytes(xhr.loaded, total);\r\n // }\r\n },\r\n (msg) =>\r\n {\r\n this.__set_error(msg);\r\n this.__loading_ended();\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { TextLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\r\n\r\nimport { Texture } from 'three';\r\n\r\nclass TextureLoader extends AbstractLoader\r\n{\r\n constructor(resource_id, url, size)\r\n {\r\n super(resource_id, url, size);\r\n }\r\n\r\n on_preloaded_finished(resource_container, response)\r\n {\r\n if (resource_container.resources_by_url[this.url] === undefined)\r\n {\r\n response.blob().then((blob) =>\r\n {\r\n const texture = new Texture();\r\n\r\n const url = URL.createObjectURL(blob);\r\n\r\n const image = new Image();\r\n image.src = url;\r\n\r\n image.onload = () =>\r\n {\r\n texture.image = image;\r\n texture.needsUpdate = true;\r\n\r\n resource_container.set_resource(this.resource_id, this.url, texture);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n };\r\n\r\n image.onerror = () =>\r\n {\r\n console.error('Error loading texture. Maybe the resource is not an image?', this.url);\r\n };\r\n });\r\n }\r\n else\r\n {\r\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\r\n\r\n this.__update_downloaded_bytes(1, 1);\r\n this.__loading_ended();\r\n }\r\n }\r\n}\r\n\r\nexport { TextureLoader };\r\n","import { AbstractLoader } from './AbstractLoader';\n\nclass VideoLoader extends AbstractLoader\n{\n constructor(resource_id, url, size)\n {\n super(resource_id, url, size);\n }\n\n on_preloaded_finished(resource_container, response)\n {\n if (resource_container.resources_by_url[this.url] === undefined)\n {\n response.blob().then((blob) =>\n {\n resource_container.set_resource(this.resource_id, this.url, URL.createObjectURL(blob));\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n });\n }\n else\n {\n resource_container.set_resource(this.resource_id, this.url, resource_container.resources_by_url[this.url]);\n\n this.__update_downloaded_bytes(1, 1);\n this.__loading_ended();\n }\n }\n}\n\nexport { VideoLoader };\n","import { ResourceContainer } from '../ResourceContainer';\r\n\r\nclass ResourceBatch\r\n{\r\n constructor(batch_name)\r\n {\r\n this.resource_loaders = [];\r\n this.batch_name = batch_name || 'unnamed batch';\r\n }\r\n\r\n add_loader(loader)\r\n {\r\n this.resource_loaders.push(loader);\r\n }\r\n\r\n load(resource_container)\r\n {\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n this.resource_loaders[i].load(resource_container || ResourceContainer);\r\n }\r\n }\r\n\r\n get loading_finished()\r\n {\r\n let finished = true;\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n finished = finished && this.resource_loaders[i].has_finished;\r\n }\r\n return finished;\r\n }\r\n\r\n get has_errors()\r\n {\r\n let has_error = false;\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n has_error = has_error || this.resource_loaders[i].has_error;\r\n }\r\n return has_error;\r\n }\r\n\r\n print_errors()\r\n {\r\n console.error('Batch <' + this.batch_name + '> could not load successfully');\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n if (this.resource_loaders[i].has_error)\r\n {\r\n this.resource_loaders[i].print_error();\r\n }\r\n }\r\n }\r\n\r\n get_progress()\r\n {\r\n return this.get_loaded_bytes() / this.get_total_bytes();\r\n }\r\n\r\n get_loaded_bytes()\r\n {\r\n let loaded_bytes = 1;\r\n\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n loaded_bytes += this.resource_loaders[i].loaded_bytes;\r\n }\r\n\r\n return loaded_bytes;\r\n }\r\n\r\n get_total_bytes()\r\n {\r\n let total_bytes = 1;\r\n\r\n for (let i = 0; i < this.resource_loaders.length; i++)\r\n {\r\n total_bytes += this.resource_loaders[i].total_bytes;\r\n }\r\n\r\n return total_bytes;\r\n }\r\n}\r\n\r\nexport { ResourceBatch };\r\n"],"names":["BaseApplication","on_post_start","on_enter","on_exit","before_update","update","fixed_update","on_post_render","on_pre_render","on_frame_end","BlitMaterial","ShaderMaterial","constructor","frag_shader","vert_shader","defines","super","uniforms","_MainTex","value","_Resolution","Vector2","_TargetResolution","vertexShader","fragmentShader","depthWrite","blending","NoBlending","depthTest","depthFunc","AlwaysDepth","AddMaterial","nMips","this","_SecondTex","undefined","set_add_texture","tex","BaseShaderMaterial","vert","frag","basic_vert","basic_frag","_Color","Color","UnrealBloomComposeMaterial","NUM_MIPS","_BlurredTex","_BloomStrength","blurTexture1","blurTexture2","blurTexture3","blurTexture4","blurTexture5","bloomStrength","bloomFactors","bloomRadius","bloomTintColors","set_RT_0","rt","set_RT_1","set_RT_2","set_RT_3","set_RT_4","set_bloom_strength","set_bloom_radius","set_tint_color_0","col_string","set","set_tint_color_1","set_tint_color_2","set_tint_color_3","set_tint_color_4","BaseRender","render","context","renderer","resize","dispose","AbstractLoader","resource_id","url","size","loaded_bytes","total_bytes","has_finished","has_error","error_message","__update_downloaded_bytes","loaded","total","is_number","console","warn","__loading_ended","__set_error","message","print_error","error","load","resource_container","resources_by_url","cache","fetch","method","mode","credentials","redirect","then","on_progress","bind","catch","__on_error","set_resource","response","response_clone","clone","reader","body","getReader","contentLength","headers","get","receivedLength","done","read","length","ok","on_preloaded_finished","status","statusText","data","is_int","n","Number","is_float","AudioClip","buffer","loop","volume","positional","audio","init","audio_listener","TPositionalAudio","TAudio","setBuffer","setLoop","gain","setVolume","play","pause","stop","is_playing","isPlaying","AudioLoader","instantiate_audio","AudioContext","getContext","createBuffer","r","blob","arrayBuffer","array_buffer","decodeAudioData","audio_buffer","resources","name","resource","Object","keys","includes","get_resource","AsyncAbstractLoader","assets","worker","ResourceContainer","bound_on_message","on_message","__setup_worker","assets_loaders","__setup_loaders","postMessage","type","loader_name","is_loaded","i","asset_loader","original_url","get_progress","__get_loaded_bytes","__get_total_bytes","get_assets_names","names","asset","push","create_worker","Worker","URL","addEventListener","e","__on_assets_loaded","removeEventListener","AsyncAudiosLoader","scene_name","loaders","asset_data","GLTFDRACOLoader","loader","GLTFLoader","setDRACOLoader","gltf","xhr","msg","TGLTFLoader","AsyncObjectsLoader","draco","draco_loader","browser","browser_name","agent","window","navigator","userAgent","toLowerCase","has_web_xr_support","is_vr","xr","isSessionSupported","indexOf","opr","chrome","version","get_version","is_safari","is_chrome","is_edge","is_edge_chromium","has_webm","is_firefox","has_hvec","preferred_video_extension","ua","tem","M","match","test","exec","slice","join","replace","appName","appVersion","splice","split","AsyncTextureLoader","flipY","premultiplyAlpha","colorSpaceConversion","Browser","load_with_old_method","load_with_new_method","texture","Texture","image","Image","src","onload","colorSpace","SRGBColorSpace","NoColorSpace","needsUpdate","onerror","fetchOptions","res","createImageBitmap","imageOrientation","imageBitmap","BasisLoader","basis","CubemapLoader","extension","CubeTextureLoader","setPath","urls","RGBETextureLoader","RGBELoader","hdr","AsyncTexturesLoader","kind","CompilatorManager","compilators","first_update","index","is_finished","finished","start","LoadingState","scene","SceneCompilator","TexturesCompilator","AudiosCompilator","callback_called","set_assets","scene_objects","scene_textures","scene_sounds","loading_progress","progress","setup_loader","assets_worker","object_loader","textures_loader","audios_loader","compilator_manager","is_compiled","HighQualityLoadingState","on_high_quality_assets_ready","RegularLoadingState","on_assets_ready_called","on_assets_ready","on_assets_compiled","AbstractScene","Scene","is_high_loaded","loading_states","regular","high","current_loading_state","set_loading_state","get_objects","objects","traverse","child","geometry","dispose_cpu","attributes","position","array","Float32Array","normal","uv","material","map","mipmaps","Uint8Array","set_high_assets","state","update_loading_state","OMath","linear_map","from_range_start_value","from_range_end_value","to_range_start_value","to_range_end_value","between","min","max","mod","number","divisor","rgb_to_hex","rgb","Math","round","toString","g","b","project_points_on_plane","points","plane","projected_point","points_on_plane","projectPoint","matrix4_lerp","from","to","target","t","elements","lerp","equals","x1","x2","abs","x","y","clamp","euclideanModulo","m","pingpong","degToRad","degrees","PI","radToDeg","radians","deg_to_rad","rad_to_deg","perspective_divide","v","w","z","points_average","center","add","multiplyScalar","get_random_color","arr","col","floor","random","saturate","ActionSequencer","previous_elapsed_time","elapsed_time","playback_speed","__get_playback_speed","playing","action_events","initial_context","JSON","parse","stringify","tmp_t","channels","channel_names","duration","reset","skip","get_duration","__play_clips","delta_time","set_progress","time","set_normalized_progress","add_action_event","trigger_time","action","add_action_interpolator","interpolator","use_dynamic_from_value","keyframes","attribute_name","keyframe","get_current_target_value","__get_current_keyframe","evaluate","get_current_starting_value","get_current_progress","__linear_map_01","easing_function","__play_events","evaluate_keyframe","log","trigger","get_keyframes","channel_name","is_channel_redefined","initial","current","Infinity","distance","transitions_velocity","URLSearchParams","location","search","EasingFunctions","linear","triangular","ease_in_sine","cos","ease_out_sine","sin","ease_in_out_sine","ease_in_cubic","ease_out_cubic","pow","ease_in_out_cubic","ease_in_quad","ease_out_quad","ease_in_out_quad","ease_in_quart","ease_out_quart","ease_in_out_quart","ease_in_quint","ease_out_quint","ease_in_out_quint","ease_in_expo","ease_out_expo","ease_in_out_expo","ease_in_circ","sqrt","ease_out_circ","ease_in_out_circ","ease_in_back","ease_out_back","ease_in_out_back","ease_in_elastic","c4","ease_out_elastic","ease_in_out_elastic","ease_in_bounce","ease_out_bounce","n1","d1","ease_in_out_bounce","heartbeat","sign","ActionInterpolator","NumberInterpolator","ActionEvent","args","ViewApi","application","DrawIOAnimationSheet","xml_document","animation_nodes","DOMParser","parseFromString","querySelectorAll","animation_tracks","triggers","node","parent_node","parentElement","getAttribute","get_node_x_position","parseFloat","split_data","trigger_name","trigger_method","at_time","value_data","to_value","from_time","to_time","sort","a","x_pos","ActionSequencerBuilder","default_state_data","from_animation_sheet","animation_data","current_context","tracks","initial_tracks","state_to_tracks","get_longest_time","find","element","sequencer","action_event","longest_time","from_draw_io","xml","transition_data","track_time","TransitionTable","transitions","from_state_name","to_state_name","add_transitions","set_transitions","set_default_state_data","__delta_buffer","___time","Clock","__delta_time","__smooth_delta_time","__elapsed_time","__allocated_time","__frame_interpolation_t","fixed_delta_time","smooth_delta_time","shader_time","frame_interpolation","fdt","dt","sdt","__set_frame_interpolation","__update","getDelta","getElapsedTime","shift","__calculate_smooth_delta_time","ViewState","before_enter","before_exit","update_enter_transition","global_view_data","transition_progress","action_sequencer","update_exit_transition","ViewStateTransitionHandler","transition_table","last_state","current_state","current_state_data","transitioning","go_to_state","__exit_last_state","__update_transitions","set_state","assign","Time","transition_manager","transition_handler","get_current_state","set_transitions_velocity","view_manager","views","browser_title_suffix","__set_views_opacities","go_to_view","view_name","change_url","__change_browser_url","__change_browser_title","TransitionManager","go_to_scene","next_view","transition_view","set_next_view","register_view","view","has_view","set_view","set_browser_title_suffix","title_suffix","get_current_view","get_view_by_name","get_by_url","history","pushState","title","__capitalize","document","set_opacity","string","aux_string","toUpperCase","__snake_to_whitespace","group","ApplicationView","container","current_opacity","ViewManager","classList","remove","opacity","style","camera_manager","_current","_spectator","camera","spectator","CanvasDrawer","uses_dynamic_font","__textHeight","canvas","createElement","ctx","getFontHeight","fontStyle","getElementsByTagName","dummy","dummyText","createTextNode","appendChild","setAttribute","offsetHeight","removeChild","get_text_size","text","font","ceil","measureText","width","draw_canvas","ctxOptions","font_color","__draw","draw_on_texture","canvas_texture","CanvasTexture","UVMapping","ClampToEdgeWrapping","NearestFilter","generateMipMaps","roundRect","height","radius","fill","stroke","tl","tr","br","bl","defaultRadius","side","beginPath","moveTo","lineTo","quadraticCurveTo","closePath","SimpleTextDrawer","text_margin","text_size","clearRect","globalAlpha","fillStyle","fillRect","textBaseline","textAlign","fillText","capabilities","max_anisotropy","vertex_texture_sampler_available","fp_textures_available","AxisHelper","Object3D","scale","blue_points","Vector3","blue_axis_mat","LineBasicMaterial","color","blue_axis_geo","BufferGeometry","setFromPoints","blue_axis_line","Line","renderOrder","green_points","green_axis_mat","green_axis_geo","green_axis_line","red_points","red_axis_mat","red_axis_geo","red_axis_line","scene_manager","add_scene","children","Cube","Mesh","segments","BoxGeometry","MeshBasicMaterial","Sphere","SphereGeometry","Arrow","dir","cylinder_height","cylinder_geo","CylinderGeometry","translate","cone_geometry","ConeGeometry","cone_height","buffer_geometry","BufferGeometryUtils","mergeGeometries","rotateX","quaternion","setFromUnitVectors","_dir","oscreen","render_width","render_height","width_height","dpr","pixel_size","update_position","size_changed","update_size","apply_pixel_density_v2","vector2","apply_pixel_density","get_pixel_size","aspect_ratio","portrait","ScreenSpaceTextureMaterial","h","_ScreenSpacePosition","_ScreenSize","_TextureSize","set_position","set_texture","set_screen_size","PerspectiveCamera","TPerspectiveCamera","fov","aspect","near","far","clear_color","clear_alpha","copy","debug","Vector3_one","Vector3_zero","canvas_renderer","display_texture_meshes","OScreen","draw_arrow","origin","arrow","normalize","draw_axis","axis","set_debug_RT","RT","rt_debug","draw_rectangle","position_2d","clear","draw_line_2D","strokeStyle","draw_line","line","frustumCulled","draw_cube","pos","cube","draw_oriented_cube","depth","distanceTo","sub","forward_dir","draw_plane","PlaneGeometry","Vector4","basic_color_vert","basic_color_frag","transparent","draw_empty_cube","box","Box3","setFromCenterAndSize","helper","Box3Helper","draw_sphere","sphere","draw_point_array","input_points","open","catmull","CatmullRomCurve3","updateArcLengths","getSpacedPoints","draw_sphere_helper","sphere_mesh","SceneManager","draw_math_sphere","sphere1","draw_bounding_box","bb","draw_curve","curve","options","offset","draw_texture","mesh","graphics","CameraManager","Blitter","_blit_scene","_blit_material","_blit_quad","_blit_camera","OrthographicCamera","blit","dst","src_texture","isWebGLRenderTarget","src_width","src_height","getSize","__render","material_pass","mat","blit_with_material","blit_clear_with_material","dst_RT","current_rt","getRenderTarget","setRenderTarget","ClearDepthNormalMaterial","clear_depth","clear_normal","_DepthNormal","DepthNormalMaterial","_FarPlane","far_plane","DepthAndNormalsRenderer","WebGLRenderTarget","clear_depth_normal_mat","depth_normal_material","__resize_RT_if_necessary","setSize","render_target","core_attributes","context_attributes","threejs_attributes","_renderer","blitter","no_render","current_render_mode","generateDepthNormalTexture","depth_and_normals_renderer","is_webgl2","canvas_context","force_webgl2","xr_enabled","alpha","antialias","desynchronized","failIfMajorPerformanceCaveat","powerPreference","premultipliedAlpha","preserveDrawingBuffer","stencil","logarithmicDepthBuffer","WebGLRenderer","enabled","autoClear","setPixelRatio","extensions","domElement","Capabilities","getMaxAnisotropy","maxVertexTextures","is_floating_point_texture_available","dom_element","depth_normals_RT","new_state","__update_current_camera","updateProjectionMatrix","updateMatrix","updateMatrixWorld","override_mat","__apply_override_material","compile","compile_async","target_scene","promise","compileAsync","render_scene","overrideMaterial","readback_RT","readRenderTargetPixels","clear_stencil","setClearColor","on_resize","entries","entry","contentRect","setViewport","src_RT","take_screenshot","blob_callback","old_width","old_height","new_width","new_height","tile_width","tile_height","divisions_x","parseInt","divisions_y","old_dpr","getPixelRatio","ctx_2D","setViewOffset","drawImage","toBlob","clearViewOffset","download_screenshot","link","download","href","createObjectURL","click","onclick","requestAnimationFrame","revokeObjectURL","removeAttribute","minFilter","magFilter","format","RGBAFormat","LinearSRGBColorSpace","FloatType","stencilBuffer","depthBuffer","output","Idle","is_animating","Animating","easing_function_t","animator","set_property_value","set_current_state","finished_callback","CSSAnimator","css_property","value_prefix","value_suffix","animate","os","operating_systems","ANDROID","IOS","LINUX","MAC","WINDOWS","is_mobile","is_ipad","maxTouchPoints","is_ios","is_android","get_os","is_linux","is_mac","is_windows","platform","reflection_plane_context","target_geometry","target_position","set_target_geometry","GeometryBatch","batch_width","data_textures","object_names","zero_offset","write_offset","uniform_dirty_count","tmp_uploaded_data_count","add_global_uniform","set_global_uniform","add_object_uniform_v3","uniform_name","default_value_v3","src_tex","__create_rgb_texture","dst_tex","one_pixel_tex","new_data_tex","__add_data_texture","__flood_data_texture_rgb","add_object_uniform_v4","default_value_v4","__create_rgba_texture","__flood_data_texture_rgba","add_object_uniform_v4_float","__create_rgba_float_texture","set_object_uniform_v3","object_name","vector3","use_r","use_g","use_b","obj_index","__get_object_index","data_texture","__get_data_texture","__set_pixel_rgb","one_pixel","last_accessed_index","dirty_count","set_object_uniform_v4","vector4","use_a","__set_pixel_rgba","upload_texture_data","upload_budget","__partial_texture_data_upload","__full_texture_data_upload","get_uniform_dirty_count","texture_data","copyTextureToTexture","get_mesh","v3","v4","DataTexture","dst_texture","one_pixel_text","geometry_batcher","batches","batch","buffer_geometries","attr_accessor_uvs","texture_width","ceilPowerOfTwo","__init_uv_array","uv_index","vertex_count","count","buffer_attribute","BufferAttribute","uvs","ui","input","ui_elements","_tmp_normalized_pos","ss_scene","matrixWorldAutoUpdate","ws_scene","ss_camera","delete_element","elem","add_screen_space_element","set_screen_space_coordinate_system","add_world_space_element","set_world_space_coordinate_system","NDC","update_state","Graphics","current_clicked_element","PerspectiveFrustumPointFitter","fit_points","camera_quaternion","vertical_fov","v_fov","h_fov","atan","tan","up_plane_normal","get_up_plane_normal","down_plane_normal","get_down_plane_normal","left_plane_normal","get_left_plane_normal","right_plane_normal","get_right_plane_normal","camera_forward_dir","applyQuaternion","sphere_center","pull_back_distance","get_distance_to_fit_rect","far_pos","up_plane","Plane","setFromNormalAndCoplanarPoint","down_plane","left_plane","right_plane","apply_center_correction_to_pos","closest_distance","inverse_dir","Line3","up_line_intersection","down_line_intersection","left_line_intersection","right_line_intersection","intersectLine","new_up_distance","new_down_distance","new_left_distance","new_right_distance","vertical_min","horizontal_min","forward_correction","target_pos","vertical_offset","get_vertical_correction","horizontal_offset","get_horizontal_correction","closest_distance_to_up_plane","closest_distance_to_down_plane","up_dir","down_line","up_line","down_dist","up_dist","correction","closest_distance_to_right_plane","closest_distance_to_left_plane","right_dir","left_line","right_line","left_dist","right_dist","Quaternion","setFromAxisAngle","distV","distH","OrthographicFrustumPointFitter","inverse_camera_quat","inverse","inverted_points","getCenter","distance_to_center","camera_utilities","tmp_mat","Matrix4","ray","Ray","tmp_size","tmp_unproj","get_up_dir","tmp_vec","get_forward_dir","get_right_dir","unproject_mouse_position","get_plane_intersection","plane_position","plane_normal","isPerspectiveCamera","unproject","intersectPlane","fit_points_on_camera","zoom_scale","world_space_center","camera_forward","projected_points_center","up","right","cross","inverse_mat","getInverse","applyMatrix4","projected_center","zoom","get_zoom_to_fit_rect","get_zoom_to_fit_box","isOrthographicCamera","obj_x","obj_y","object_aspect","get_html_screen_pos","object","getWorldPosition","project","world_pos_to_screen","update_projection","left","top","bottom","fit_bounding_box_points","p1","p2","p3","p4","p5","p6","p7","p8","camera_backward_dir","fitter","camera_pos","reference_position_plane","camera_ray","reference_position","camera_position","result","reference_rotation","reference_zoom","forward","initializer","CameraUtilities","GeometryBatcher","OS","ReflectionPlaneContext","UI","Debug","render_loop","KeyboardInput","ctrlz_pressed","ctrlz_fired","keys_keys","on_key_down","on_key_up","keyCode","ctrlKey","code","press_key","release_key","pressed","released","key_name","key","fired","down","release_keys","is_key_pressed","is_key_down","is_key_released","register_key","unregister_key","TOrthographicCamera","NormalMaterial","DebugNormalsRender","DisplayNormalTextureMaterial","depth_normals_vert","_InverseProjMatrix","SSAOComposeMaterial","_AO","SSAOMaterial","_ProjectionMatrix","_Bias","_Radius","_SampleKernel","__get_sample_kernel","_RandomRotation","__get_rotation_kernel","sample_kernel","rotation_kernel","rotation_texture","wrapS","RepeatWrapping","wrapT","BoxBlurMaterial","_SampleDir","Blurrer","RT1","RT2","box_blur_mat","blur","NormalAORender","use_ssaa","ssao_mat","ssao_compose_mat","debug_normals","ssaa","main_RT","SSAO_RT","blurrer","__check_RT_size","__update_uniforms","projectionMatrix","NormalRender","GaussianBlurMaterial","kernel_radius","KERNEL_RADIUS","SIGMA","texSize","direction","set_size","set_direction","LuminosityHighPassMaterial","luminosityThreshold","smoothWidth","defaultColor","defaultOpacity","GaussianBlurrer","current_width","current_height","separableBlurMaterials","renderTargetsHorizontal","renderTargetsVertical","kernelSizeArray","rt_pars","LinearFilter","renderTargetBright","generateMipmaps","init_materials","init_RT","luminosity_high_pass_mat","use_luminosity_high_pass","resize_RT","inputRenderTarget","get_blurred_texture","get_blurred_RT","dispose_RT","hor","ver","texture_height","dispose_materials","UnrealBloomRender","bloom_compose_mat","blur_RT","add_mat","val","VRRender","render_spectator_camera","spectator_camera","isPresenting","xrCam","getCamera","currentRenderTarget","view_component_manager","components","enabled_components","Set","__set_components_opacities","component","register_component","enable_component","disable_component","delete","get_component_by_name","component_name","RenderLoop","target_application","is_running","frames_passed","time_accumulator","ViewComponentManager","setAnimationLoop","screen","ViewComponent","hidden","toggle_hidden","HorizontalPlane","VerticalPlane","ArrayUtilities","merge_from_to","source","apply","expand_vec3_array","items_left_count","remove_elem","get_closest_point","closest_point","object_values_to_array","obj","ids","FrustumPointFitter","get_hozirontal_correction","closest_up_point","closest_down_point","closest_right_point","closest_left_point","GeometryUtilities","convert_to_non_indexed_geometry","geometry_buffer","indices","positions","vertices","getX","getY","getZ","add_barycentric_attribute","non_indexed_geometry_buffer","bar_coordinates","HTMLUtilities","load_images","images","dataset","image_objects","image_object","load_videos","videos","video","load_iframes","iframes","iframe","load_elements","selector","ImageUtilities","get_image_data","getImageData","get_pixel","imagedata","mesh_sampler","sample","sample_count","face_areas","min_area","normals","tangents","faces","index_0","index_1","index_2","v1","v2","face","c","n2","n3","tangent","uv_a","uv_b","uv_c","area","get_face_area","normalized_faces_array","get_uniform_face_distribution","selected_faces","select_random_faces","sample_data_from_faces","sampled_points","sampled_normals","sampled_tangents","sampled_uvs","w1","w2","sample_point_in_face","amount","selected_face","minimum_area","extended_triangle_indices","repetitions_needed","j","vec1","vec2","w3","model_utilities","result_callback","fromGeometry","get_geometries","geometries","assign_material","clone_animated_gltf","animations","skinnedMeshes","isSkinnedMesh","cloneBones","cloneSkinnedMeshes","isBone","skeleton","cloneSkinnedMesh","orderedCloneBones","bones","cloneBone","Skeleton","boneInverses","matrixWorld","set_shadow_config","cast","receive","castShadow","receiveShadow","__find_object","get_object","get_object_by_type","object_type","ObjectUtilities","is_object","item","Array","isArray","merge_deep","sources","xml_to_json","nodeType","attribute","nodeName","nodeValue","hasChildNodes","childNodes","old","StringUtilities","hexValues","hex","capitalize","words","substr","capitalize_first_letter","charAt","snake_to_camelcase","TimeUtilities","time_str_to_ms","time_str","hours","minutes","seconds","Validation","is_json","str","Grid","derivatives","plane_geometry","rotation","_Thickness","_Length","_ElapsedTime","setup","next_position","previous_position","orientation","coverage","accumulated_length","next_point","__get_next_position","previous_point","__get_previous_position","vertexList","nextPositionList","previousPositionList","orientationList","coverageList","setIndex","_length","thickness","total_length","parent","copy_color","WorldImage","pivot","_ScreenAligned","_Scale","_Opacity","DoubleSide","current_scale","computeBoundingBox","tmp_bb_size","boundingBox","update_texture","img","screen_aligned","boolean","Text2D","is_static","simple_text_drawer","draw_settings","LinearMipMapLinearFilter","UIElementMaterial","intensity","_PixelOffset","_NDC","_PivotPoint","_DepthOffset","ScreenSpacePosition","get_pos_NDC","WorldSpacePosition","tmp_vec3","tmp_vec2","UIElementState","ui_element","normalized_mouse_position","OnIdle","is_mouse_over","_on_enter_state","OnMouseEnter","on_mouse_enter","_on_hover_state","_on_exit_state","OnMouseExit","on_mouse_exit","_on_idle_state","OnMouseHover","__trigger_on_hover","on_mouse_hover","UIElement","is_clickable","position_strategy","_position","on_hover","mouse_pos_tmp","cached_NDC_position","screen_pos_tmp","texture_size","matrixAutoUpdate","pixel_offset","set_render_order","pivot_point","set_pixel_offset","use_depth","depth_offset","clear_state","visible","get_size","normalized_mouse_pos","to_screen_position","rect","Box2","containsPoint","projected_pos","get_screen_space_position","set_screen_space_position","screen_pos","UpdatableMaterialMesh","self","onBeforeRender","TextGlyph","plane_bounds","atlas_bounds","SDFText","glyph_layout","glyphs","glyph_is_dirty","matrix_is_dirty","color_is_dirty","matrix","__opacity","__text","__generate_glyphs","update_matrix","compose","clear_glyph_dirty","clear_color_dirty","set_rotation","tilt","new_orientation","new_tilt","multiply","set_color","set_pivot","update_glyphs","op","cursor","unicode","charCodeAt","glyph","planeBounds","text_glyph","atlasBounds","advance","box2","first_glyph","union","box2_size","SDFTextMaterial","_Texture","_Boldness","_AtlasSize","set_atlas_size","set_boldness","SDFTextBatch","font_layout","atlas_texture","instanced_geometry","InstancedBufferGeometry","instanceCount","Float32BufferAttribute","transformsCol0","InstancedBufferAttribute","max_allocations","transformsCol1","transformsCol2","transformsCol3","glyph_bounds","usage","DynamicDrawUsage","text_elements","atlas","add_text","text_str","remove_text","text_elem","force_update","glyph_bounds_atr","plane_bounds_atr","color_atr","matrix_needs_update","glyph_needs_update","color_needs_update","glyph_count","glyph_i","buffer_i","setXYZW","VectorInterpolator","tmp","DualFilteringBlurMaterial","upsample","AlphaFilterMaterial","use_alpha_mask","_Offset","DualFilteringBlurrer","RT0","RT3","RT4","upscale_blur_mat","downscale_blur_mat","alpha_filter_mat","check_RT_resize","MedianFilterMaterial","kernel3x3","_SourceTex","_SourceTexSize","isVideoTexture","videoWidth","videoHeight","isTexture","MedianFilter","median_filter_mat","filter","tex_size","ParticleAttribute","attr_name","update_material","write","init_from_geometry","init_from_attribute","particle_attribute","build_RT","particle_count","resolution","calculate_resolution","colorScape","HalfFloatType","swap_RT","attribute_writter_scene","store_geometry_attribute_in_RT","storage_material","deleteAttribute","get_texture","GPUParticleSystem","build_point_mesh","attribute_writter_mesh","build_attribute_writter_mesh","add_texture_attribute","add_update_attribute_array","item_size","add_attribute_array","instance_count","geo","instanced_geo","build_uv_storage_attribute","Points","ParticleStorageMaterial","ParticlePositionAttribute","store_geometry","pos_attr","store_positions","CustomDataTexture","multiplier","set_rgba","set_rgb","set_r","set_g","set_b","set_a","RGBDataTexture","RGBADataTexture","RGBFloatDataTexture","RGBAFloatDataTexture","BatchedMesh","id_table","max_texture_width","batched_count","batch_height","attach_rgb_texture","attach_rgba_texture","attach_rgb_float_texture","attach_rgba_float_texture","get_mesh_index","set_rgb_value","mesh_name","set_rgba_value","MeshBatcher","meshes","attr_mesh_id","create_batched_mesh","DAELoader","ColladaLoader","FileLoader","TFileLoader","file","FontLoader","TFontLoader","HDRCubeTextureLoader","THDRCubeTextureLoader","JSONLoader","json","OBJLoader","TOBJLoader","PointArrayLoader","parse_path","raw_data","string_array","pop","TextLoader","TextureLoader","VideoLoader","ResourceBatch","batch_name","resource_loaders","add_loader","loading_finished","has_errors","print_errors","get_loaded_bytes","get_total_bytes"],"mappings":"orDAAA,MAAMA,GAEJ,aAAAC,GACE,CAEF,QAAAC,GACE,CAEF,OAAAC,GACE,CAEF,aAAAC,GACE,CAEF,MAAAC,GACE,CAEF,YAAAC,GACE,CAEF,cAAAC,GACE,CAEF,aAAAC,GACE,CAEF,YAAAC,GACE,ECnBJ,MAAMC,WAAqBC,EAEzB,WAAAC,CAAYC,EAAaC,EAAaC,GAEpCC,MAAM,CACJC,SAAU,CACRC,SAAU,CAAEC,MAAO,MACnBC,YAAa,CAAED,MAAO,IAAIE,EAAQ,EAAG,IACrCC,kBAAmB,CAAEH,MAAO,IAAIE,EAAQ,EAAG,KAE7CN,QAASA,GAAW,CAAE,EACtBQ,aAAcT,mGACdU,eAAgBX,uHAChBY,YAAY,EACZC,SAAUC,EACVC,WAAW,EACXC,UAAWC,GAEd,ECtBH,MAAMC,WAAoBrB,GAExB,WAAAE,CAAYoB,GAEVhB,gMAEAiB,KAAKhB,SAASiB,WAAa,CAAEf,WAAOgB,EACrC,CAED,eAAAC,CAAgBC,GAEdJ,KAAKhB,SAASiB,WAAWf,MAAQkB,CAClC,sPCVH,MAAMC,WAA2B3B,EAE/B,WAAAC,CAAY2B,EAAMC,EAAMvB,GAEtBD,MAAM,CACJO,aAAcgB,GAAUE,GACxBjB,eAAgBgB,GAAQE,GACxBzB,SAAUA,GAAc,CACtB0B,OAAQ,CAAExB,MAAO,IAAIyB,EAAM,cAGhC,ECZH,MAAMC,WAAmCnC,GAEvC,WAAAE,CAAYoB,GAEVhB,m7BAAYmB,EAAW,CACrBW,SAAUd,IAEZC,KAAKhB,SAASC,SAAkB,CAAEC,WAAOgB,GACzCF,KAAKhB,SAAS8B,YAAkB,CAAE5B,WAAOgB,GACzCF,KAAKhB,SAAS+B,eAAkB,CAAE7B,MAAO,GAEzCc,KAAKhB,SAASgC,aAAgB,CAAE9B,MAAO,MACvCc,KAAKhB,SAASiC,aAAgB,CAAE/B,MAAO,MACvCc,KAAKhB,SAASkC,aAAgB,CAAEhC,MAAO,MACvCc,KAAKhB,SAASmC,aAAgB,CAAEjC,MAAO,MACvCc,KAAKhB,SAASoC,aAAgB,CAAElC,MAAO,MAEvCc,KAAKhB,SAASqC,cAAgB,CAAEnC,MAAO,GACvCc,KAAKhB,SAASsC,aAAgB,CAAEpC,MAAO,CAAC,EAAK,GAAK,GAAK,GAAK,KAC5Dc,KAAKhB,SAASuC,YAAgB,CAAErC,MAAO,GAEvC,MAAMsC,EAAkB,CACtB,IAAIb,EAAM,WACV,IAAIA,EAAM,WACV,IAAIA,EAAM,WACV,IAAIA,EAAM,WACV,IAAIA,EAAM,YAGZX,KAAKhB,SAASwC,gBAAkB,CAAEtC,MAAOsC,EAC1C,CAED,QAAAC,CAASC,GAEP1B,KAAKhB,SAASgC,aAAa9B,MAAQwC,CACpC,CAED,QAAAC,CAASD,GAEP1B,KAAKhB,SAASiC,aAAa/B,MAAQwC,CACpC,CAED,QAAAE,CAASF,GAEP1B,KAAKhB,SAASkC,aAAahC,MAAQwC,CACpC,CAED,QAAAG,CAASH,GAEP1B,KAAKhB,SAASmC,aAAajC,MAAQwC,CACpC,CAED,QAAAI,CAASJ,GAEP1B,KAAKhB,SAASoC,aAAalC,MAAQwC,CACpC,CAED,kBAAAK,CAAmB7C,GAEjBc,KAAKhB,SAASqC,cAAcnC,MAAQA,CACrC,CAED,gBAAA8C,CAAiB9C,GAEfc,KAAKhB,SAASuC,YAAYrC,MAAQA,CACnC,CAED,gBAAA+C,CAAiBC,GAEflC,KAAKhB,SAASwC,gBAAgBtC,MAAM,GAAGiD,IAAID,EAC5C,CAED,gBAAAE,CAAiBF,GAEflC,KAAKhB,SAASwC,gBAAgBtC,MAAM,GAAGiD,IAAID,EAC5C,CAED,gBAAAG,CAAiBH,GAEflC,KAAKhB,SAASwC,gBAAgBtC,MAAM,GAAGiD,IAAID,EAC5C,CAED,gBAAAI,CAAiBJ,GAEflC,KAAKhB,SAASwC,gBAAgBtC,MAAM,GAAGiD,IAAID,EAC5C,CAED,gBAAAK,CAAiBL,GAEflC,KAAKhB,SAASwC,gBAAgBtC,MAAM,GAAGiD,IAAID,EAC5C,EC/FH,MAAMM,GAEJ,WAAA7D,GAGC,CAED,MAAA8D,GAGC,CAED,QAAAxE,CAASyE,EAASC,GAGjB,CAED,OAAAzE,CAAQwE,EAASC,GAGhB,CAED,MAAAC,GAGC,CAED,OAAAC,GAGC,EC7BI,MAAMC,GAEX,WAAAnE,CAAYoE,EAAaC,EAAKC,EAAO,GAEnCjD,KAAK+C,YAAcA,EACnB/C,KAAKgD,IAAMA,EACXhD,KAAKkD,aAAe,EACpBlD,KAAKmD,YAAcF,EAEnBjD,KAAKoD,cAAe,EACpBpD,KAAKqD,WAAY,EACjBrD,KAAKsD,cAAgB,MACtB,CAED,yBAAAC,CAA0BC,EAAQC,GAEhCD,EAASxD,KAAK0D,UAAUF,GAAUA,EAAS,EAC3CC,EAASzD,KAAK0D,UAAUD,GAAUA,EAAS,EAE3CzD,KAAKkD,aAAeM,EAEhBC,EAAQ,IAEVzD,KAAKmD,YAAcM,GAGjBzD,KAAKkD,aAAelD,KAAKmD,aAE3BQ,QAAQC,KAAK,8EAA+E5D,KAAKgD,IAEpG,CAED,eAAAa,GAEE7D,KAAKoD,cAAe,CACrB,CAED,WAAAU,CAAYC,GAEV/D,KAAKqD,WAAY,EACjBrD,KAAKsD,cAAgBS,CACtB,CAED,WAAAC,GAEEL,QAAQM,MAAM,uBAAyBjE,KAAK+C,YAAc,cAAgB/C,KAAKgD,IAAM,SAAWhD,KAAKsD,cACtG,CAED,IAAAY,CAAKC,GAEH,QAAsDjE,IAAlDiE,EAAmBC,iBAAiBpE,KAAKgD,KAC7C,CACE,MAAMqB,EAAQ,UAEdC,MAAMtE,KAAKgD,IAAK,CACduB,OAAQ,MACRC,KAAM,OACNH,MAAOA,EACPI,YAAa,cACbC,SAAU,WAETC,KAAK3E,KAAK4E,YAAYC,KAAK7E,KAAMmE,IACjCW,MAAM9E,KAAK+E,WAAWF,KAAK7E,MAC/B,MAGCmE,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKmB,EAAmBC,iBAAiBpE,KAAKgD,MAErGhD,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,iBAER,CAED,iBAAMe,CAAYT,EAAoBc,GAEpC,MAAMC,EAAiBD,EAASE,QAC1BC,EAASH,EAASI,KAAKC,YAGvBC,GAAiBN,EAASO,QAAQC,IAAI,kBAG5C,IAAIC,EAAiB,EAErB,OACA,CACE,MAAMC,KAAEA,EAAIzG,MAAEA,SAAgBkG,EAAOQ,OAErC,GAAID,EAEF,MAGFD,GAAkBxG,EAAM2G,OAExB7F,KAAKuD,0BAA0BmC,EAAgBH,EAEhD,CAEGN,EAASa,GAEX9F,KAAK+F,sBAAsB5B,EAAoBe,IAI/ClF,KAAK8D,YAAY,GAAGmB,EAASe,WAAWf,EAASgB,cACjDjG,KAAK6D,kBAER,CAED,qBAAAkC,CAAsB5B,EAAoBc,GAEzC,CAED,UAAAF,CAAWmB,GAETvC,QAAQM,MAAMiC,EACf,CAED,MAAAC,CAAOC,GAEL,OAAOC,OAAOD,KAAOA,GAAKA,EAAI,GAAM,CACrC,CAED,QAAAE,CAASF,GAEP,OAAOC,OAAOD,KAAOA,GAAKA,EAAI,GAAM,CACrC,CAED,SAAA1C,CAAU0C,GAER,OAAOpG,KAAKmG,OAAOC,IAAMpG,KAAKsG,SAASF,EACxC,EClIH,MAAMG,GAEJ,WAAA5H,CAAY6H,EAAQC,GAAO,EAAMC,EAAS,EAAGC,GAAa,GAExD3G,KAAKwG,OAASA,EACdxG,KAAKyG,KAAOA,EACZzG,KAAK0G,OAASA,EACd1G,KAAK2G,WAAaA,EAElB3G,KAAK4G,WAAQ1G,CACd,CAED,IAAA2G,CAAKC,GAEC9G,KAAK2G,WAEP3G,KAAK4G,MAAQ,IAAIG,EAAiBD,GAIlC9G,KAAK4G,MAAQ,IAAII,EAAOF,GAG1B9G,KAAK4G,MAAMK,UAAUjH,KAAKwG,QAC1BxG,KAAK4G,MAAMM,QAAQlH,KAAKyG,MAGxBzG,KAAK4G,MAAMO,KAAKA,KAAKjI,MAAQ,EAE7Bc,KAAK4G,MAAMQ,UAAUpH,KAAKyG,KAAO,EAAIzG,KAAK0G,OAC3C,CAED,IAAAW,GAEErH,KAAK4G,MAAMS,MACZ,CAED,KAAAC,GAEEtH,KAAK4G,MAAMU,OACZ,CAED,IAAAC,GAEEvH,KAAK4G,MAAMW,MACZ,CAED,cAAIC,GAEF,OAAOxH,KAAK4G,MAAMa,SACnB,EChDH,MAAMC,WAAoB5E,GAExB,WAAAnE,CAAYoE,EAAaC,EAAKyD,GAAO,EAAMC,EAAS,EAAGzD,EAAM0D,GAAa,GAExE5H,MAAMgE,EAAaC,EAAKC,GACxBjD,KAAKyG,KAAOA,EACZzG,KAAK0G,OAASA,EACd1G,KAAK2G,WAAaA,CACnB,CAED,qBAAAZ,CAAsB5B,QAQkCjE,IAAlDiE,EAAmBC,iBAAiBpE,KAAKgD,KAE3ChD,KAAK2H,kBAAkBxD,IAIvBA,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKmB,EAAmBC,iBAAiBpE,KAAKgD,MAErGhD,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,kBAGR,CAED,iBAAA8D,CAAkBxD,GAEhB,MAAMzB,EAAUkF,EAAaC,aAEvBrB,EAAS9D,EAAQoF,aAAa,EAAG,MAAO,OAE9CxD,MAAMtE,KAAKgD,KAAK2B,MAAKoD,GAAKA,EAAEC,SAAQrD,MAAMM,IAEpCA,EAASgD,YAEXhD,EAASgD,cAActD,MAAMuD,IAE3BxF,EAAQyF,gBAAgBD,GAAeE,IAErCjE,EAAmBa,aACjBhF,KAAK+C,YACL/C,KAAKgD,IACL,IAAIuD,GAAU6B,EAAcpI,KAAKyG,KAAMzG,KAAK0G,OAAQ1G,KAAK2G,aAG3D3G,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,iBAAiB,GACtB,KAKJM,EAAmBa,aACjBhF,KAAK+C,YACL/C,KAAKgD,IACL,IAAIuD,GAAUC,EAAQxG,KAAKyG,KAAMzG,KAAK0G,OAAQ1G,KAAK2G,aAGrD3G,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,kBACN,GAEJ,ECxCE,MAACM,GAAqB,IAlC3B,MAEE,IAAA0C,GAEE7G,KAAKqI,UAAY,GACjBrI,KAAKoE,iBAAmB,EACzB,CAED,YAAAY,CAAasD,EAAMtF,EAAKuF,GAETC,OAAOC,KAAKzI,KAAKoE,kBAErBsE,SAAS1F,GAEhBhD,KAAKqI,UAAUC,GAAQtI,KAAKoE,iBAAiBpB,IAI7ChD,KAAKqI,UAAUC,GAAQC,EACvBvI,KAAKoE,iBAAiBpB,GAAOuF,EAEhC,CAED,YAAAI,CAAaL,GAEX,OAAOtI,KAAKqI,UAAUC,EACvB,CAED,GAAA7C,CAAI6C,GAEF,OAAOtI,KAAKqI,UAAUC,EACvB,GC7BH,MAAMM,GAEJ,WAAAjK,CAAY2J,EAAMO,EAAQC,GAExB9I,KAAKmE,mBAAqB4E,GAC1B/I,KAAK6I,OAASA,EACd7I,KAAKsI,KAAOA,EAEZtI,KAAK8I,OAASA,EAEd9I,KAAKgJ,iBAAmBhJ,KAAKiJ,WAAWpE,KAAK7E,MAE7CA,KAAKkJ,iBAELlJ,KAAKmJ,eAAiBnJ,KAAKoJ,iBAC5B,CAED,IAAAlF,GAEElE,KAAK8I,OAAOO,YAAY,CAAEC,KAAM,OAAQC,YAAavJ,KAAKsI,MAC3D,CAED,SAAAkB,GAEE,IAAK,IAAIC,EAAI,EAAGA,EAAIzJ,KAAKmJ,eAAetD,OAAQ4D,IAChD,CACE,MAAMC,EAAe1J,KAAKmJ,eAAeM,GAEzC,IAAKC,EAAatG,aAEhB,OAAO,EAIHsG,EAAarG,YAGfqG,EAAa1G,IAAM0G,EAAaC,aAEhCD,EAAa1F,cAGlB,CAED,OAAO,CACR,CAED,YAAA4F,GAEE,OAAO5J,KAAK6J,qBAAuB7J,KAAK8J,mBACzC,CAED,kBAAAD,GAEE,IAAI3G,EAAe,EAEnB,IAAK,IAAIuG,EAAI,EAAGA,EAAIzJ,KAAKmJ,eAAetD,OAAQ4D,IAE9CvG,GAAgBlD,KAAKmJ,eAAeM,GAAGvG,aAGzC,OAAOA,CACR,CAED,iBAAA4G,GAEE,IAAI3G,EAAc,EAElB,IAAK,IAAIsG,EAAI,EAAGA,EAAIzJ,KAAKmJ,eAAetD,OAAQ4D,IAE9CtG,GAAenD,KAAKmJ,eAAeM,GAAGtG,YAGxC,OAAOA,CACR,CAED,gBAAA4G,GAEE,MAAMC,EAAQ,GAEd,IAAK,IAAIP,EAAI,EAAGA,EAAIzJ,KAAK6I,OAAOhD,OAAQ4D,IACxC,CACE,MAAMQ,EAAQjK,KAAK6I,OAAOY,GAE1BO,EAAME,KAAKD,EAAM3B,KAClB,CAED,OAAO0B,CACR,CAED,oBAAOG,GAML,OAJe,IAAIC,OACjB,IAAIC,IAAI,yDAA0DrH,KAClE,CAAEsF,KAAM,qBAAsBgB,KAAM,UAGvC,CAED,cAAAJ,GAEElJ,KAAK8I,OAAOwB,iBAAiB,UAAWtK,KAAKgJ,kBAE7ChJ,KAAK8I,OAAOO,YAAY,CAAEC,KAAM,SAAUC,YAAavJ,KAAKsI,KAAMpC,KAAMlG,KAAK6I,QAC9E,CAED,UAAAI,CAAWsB,GAET,MAAMxG,EAAUwG,EAAErE,KAElB,GAAQnC,EAAQuF,OAEX,gBAAgBtJ,KAAKsI,OACxBtI,KAAKwK,mBAAmBzG,EAAQmC,KAGnC,CAED,kBAAAsE,CAAmBnC,GAEjBrI,KAAK8I,OAAO2B,oBAAoB,UAAWzK,KAAKgJ,kBAEhD,IAAK,IAAIS,EAAI,EAAGA,EAAIzJ,KAAKmJ,eAAetD,OAAQ4D,IAChD,CACE,MAAMC,EAAe1J,KAAKmJ,eAAeM,GAGzCC,EAAaC,aAAeD,EAAa1G,IAEzC0G,EAAa1G,IAAMqF,EAAUqB,EAAa3G,aAE1C2G,EAAa3D,sBAAsB/F,KAAKmE,mBACzC,CACF,CAED,eAAAiF,GAEEzF,QAAQC,KAAK,kBACd,ECzIH,MAAM8G,WAA0B9B,GAE9B,WAAAjK,CAAYgM,EAAY9B,EAAQC,GAE9B/J,MAAM4L,EAAY9B,EAAQC,EAC3B,CAGD,eAAAM,GAEE,MAAMwB,EAAU,GAEhB,IAAK,IAAInB,EAAI,EAAGA,EAAIzJ,KAAK6I,OAAOhD,OAAQ4D,IACxC,CACE,MAAMoB,EAAa7K,KAAK6I,OAAOY,GAE/BmB,EAAQV,KAAK,IAAIxC,GACfmD,EAAWvC,KACXuC,EAAW7H,IACX6H,EAAWpE,KACXoE,EAAWnE,OACXmE,EAAW5H,KACX4H,EAAWlE,YAEd,CAED,OAAOiE,CACR,EC1BH,MAAME,WAAwBhI,GAE5B,WAAAnE,CAAYoE,EAAaC,EAAK+H,EAAQ9H,GAEpClE,MAAMgE,EAAaC,EAAKC,GACxBjD,KAAK+K,OAAS,IAAIC,GAElBhL,KAAK+K,OAAOE,eAAeF,EAC5B,CAED,qBAAAhF,CAAsB5B,QAEkCjE,IAAlDiE,EAAmBC,iBAAiBpE,KAAKgD,KAE3ChD,KAAK+K,OAAO7G,KAAKlE,KAAKgD,KAAMkI,IAE1B/G,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKkI,GAE5DlL,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,iBAAiB,IAEvBsH,IAAD,IAQCC,IAECpL,KAAK8D,YAAYsH,EAAM,qLACvBpL,KAAK6D,iBAAiB,KAKxBM,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKmB,EAAmBC,iBAAiBpE,KAAKgD,MAErGhD,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,kBAER,EC1CH,MAAMmH,WAAmBlI,GAEvB,WAAAnE,CAAYoE,EAAaC,EAAKC,GAE5BlE,MAAMgE,EAAaC,EAAKC,GACxBjD,KAAK+K,OAAS,IAAIM,EACnB,CAED,qBAAAtF,CAAsB5B,QAEkCjE,IAAlDiE,EAAmBC,iBAAiBpE,KAAKgD,KAE3ChD,KAAK+K,OAAO7G,KAAKlE,KAAKgD,KAAMkI,IAE1B/G,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKkI,GAE5DlL,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,iBAAiB,IAEvBsH,IAAD,IASCC,IAECpL,KAAK8D,YAAYsH,EAAM,qLACvBpL,KAAK6D,iBAAiB,KAKxBM,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKmB,EAAmBC,iBAAiBpE,KAAKgD,MAErGhD,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,kBAER,ECxCH,MAAMyH,WAA2B1C,GAE/B,WAAAjK,CAAYgM,EAAY9B,EAAQC,GAE9B/J,MAAM4L,EAAY9B,EAAQC,EAC3B,CAGD,eAAAM,GAEE,MAAMwB,EAAU,GAEhB,IAAK,IAAInB,EAAI,EAAGA,EAAIzJ,KAAK6I,OAAOhD,OAAQ4D,IACxC,CACE,MAAMoB,EAAa7K,KAAK6I,OAAOY,GAE/B,GAAIoB,EAAWU,MACf,CACE,MAAMC,EAAezC,GAAkBtD,IAAI,gBAE3CmF,EAAQV,KAAK,IAAIY,GAAgBD,EAAWvC,KAAMuC,EAAW7H,IAAKwI,EAAcX,EAAW5H,MAC5F,MAGC2H,EAAQV,KAAK,IAAIc,GAAWH,EAAWvC,KAAMuC,EAAW7H,IAAK6H,EAAW5H,MAE3E,CAED,OAAO2H,CACR,EC4EE,MAACa,GAAU,IA7GhB,MAEE,UAAM5E,GAQJ,OANA7G,KAAK0L,aAAe,GACpB1L,KAAK2L,MAAQC,OAAOC,UAAUC,UAAUC,cAExC/L,KAAKgM,mBAAqB,OAAQH,UAClC7L,KAAKiM,MAAQjM,KAAKgM,0BAA4BH,UAAUK,GAAGC,mBAAmB,iBAEtE,GAER,KAAKnM,KAAK2L,MAAMS,QAAQ,SAAW,EACjCpM,KAAK0L,aAAe,UACpB,MACF,KAAK1L,KAAK2L,MAAMS,QAAQ,QAAU,EAChCpM,KAAK0L,aAAe,gBACpB,MACF,KAAK1L,KAAK2L,MAAMS,QAAQ,QAAU,KAAOR,OAAOS,IAC9CrM,KAAK0L,aAAe,QACpB,MACF,KAAK1L,KAAK2L,MAAMS,QAAQ,WAAa,KAAOR,OAAOU,OACjDtM,KAAK0L,aAAe,SACpB,MACF,KAAK1L,KAAK2L,MAAMS,QAAQ,YAAc,EACpCpM,KAAK0L,aAAe,YACpB,MACF,KAAK1L,KAAK2L,MAAMS,QAAQ,YAAc,EACpCpM,KAAK0L,aAAe,UACpB,MACF,KAAK1L,KAAK2L,MAAMS,QAAQ,WAAa,EACnCpM,KAAK0L,aAAe,SACpB,MACF,QACE1L,KAAK0L,aAAe,QAItB1L,KAAKuM,QAAUvM,KAAKwM,aACrB,CAED,QAAIlE,GAEF,OAAOtI,KAAK0L,YACb,CAED,aAAIe,GAEF,MAA6B,WAAtBzM,KAAK0L,YACb,CAED,aAAIgB,GAEF,MAA6B,WAAtB1M,KAAK0L,YACb,CAED,WAAIiB,GAEF,MAA6B,YAAtB3M,KAAK0L,YACb,CAED,oBAAIkB,GAEF,MAA6B,kBAAtB5M,KAAK0L,YACb,CAED,YAAImB,GAEF,SAAU7M,KAAK0M,WAAa1M,KAAK8M,YAAc9M,KAAK4M,iBACrD,CAED,YAAIG,GAEF,OAAO/M,KAAKyM,SACb,CAED,6BAAIO,GAEF,OAAOhN,KAAK6M,SAAW,OAAS7M,KAAK+M,SAAW,WAAa,KAC9D,CAED,WAAAP,GAEE,MAAMS,EAAKpB,UAAUC,UACrB,IAAIoB,EAAM,GACNX,EAAU,EAEVY,EAAIF,EAAGG,MAAM,iEAAmE,GAkBpF,MAhBI,WAAWC,KAAKF,EAAE,MAEpBD,EAAO,kBAAkBI,KAAKL,IAAO,GACrCV,EAAW,OAASW,EAAI,IAAM,KAEnB,WAATC,EAAE,KAEJD,EAAMD,EAAGG,MAAM,uBACJ,MAAPF,IAAaX,EAAUW,EAAIK,MAAM,GAAGC,KAAK,KAAKC,QAAQ,MAAO,WAGnEN,EAAIA,EAAE,GAAK,CAACA,EAAE,GAAIA,EAAE,IAAM,CAACtB,UAAU6B,QAAS7B,UAAU8B,WAAY,MACjB,OAA9CT,EAAMD,EAAGG,MAAM,6BAAqCD,EAAES,OAAO,EAAG,EAAGV,EAAI,IAE5EX,EAAUY,EAAEK,KAAK,KAEVnH,OAAOkG,EAAQsB,MAAM,KAAK,GAClC,GCtGI,MAAMC,WAA2BhL,GAEtC,WAAAnE,CAAYoE,EAAaC,EAAKC,EAAM8K,GAAQ,EAAMC,GAAmB,EAAOC,GAAuB,GAEjGlP,MAAMgE,EAAaC,EAAKC,GAExBjD,KAAK2J,aAAe,GAEpB3J,KAAKiO,qBAAuBA,EAC5BjO,KAAKgO,iBAAmBA,EACxBhO,KAAK+N,MAAQA,CACd,CAED,qBAAAhI,CAAsB5B,GAEhB+J,GAAQzB,UAEVzM,KAAKmO,qBAAqBhK,GAI1BnE,KAAKoO,qBAAqBjK,EAE7B,CAED,oBAAAgK,CAAqBhK,GAEnB,QAAsDjE,IAAlDiE,EAAmBC,iBAAiBpE,KAAKgD,KAC7C,CACE,MAAMqL,EAAU,IAAIC,EACdC,EAAQ,IAAIC,MAElBD,EAAME,IAAMzO,KAAKgD,IAEjBuL,EAAMG,OAAS,KAEbL,EAAQE,MAAQA,EAChBF,EAAQN,MAAQ/N,KAAK+N,MACrBM,EAAQL,iBAAmBhO,KAAKgO,iBAChCK,EAAQM,WAAa3O,KAAKiO,qBAAuBW,EAAiBC,EAClER,EAAQS,aAAc,EAEtB3K,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKqL,GAE5DrO,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,iBAAiB,EAGxB0K,EAAMQ,QAAU,KAEdpL,QAAQM,MAAM,yCAA0CjE,KAAK2J,aAAa,CAE7E,MAGCxF,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKmB,EAAmBC,iBAAiBpE,KAAKgD,MAErGhD,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,iBAER,CAED,oBAAAuK,CAAqBjK,GAEnB,QAAsDjE,IAAlDiE,EAAmBC,iBAAiBpE,KAAKgD,KAC7C,CACE,MAAMgM,EAAe,CACrBA,YAA2B,eAG3B1K,MAAMtE,KAAKgD,IAAKgM,GAAcrK,MAAMsK,GAE3BA,EAAIjH,SACVrD,MAAMqD,GAEAkH,kBAAkBlH,EAAM,CAC7BiG,qBAAsBjO,KAAKiO,qBAAuB,UAAY,OAC9DkB,iBAAkBnP,KAAK+N,MAAQ,QAAU,OACzCC,iBAAkBhO,KAAKgO,iBAAmB,cAAgB,WAE3DrJ,MAAMyK,IAEP,MAAMf,EAAU,IAAIC,EAAQc,GAC5Bf,EAAQN,MAAQ/N,KAAK+N,MACrBM,EAAQL,iBAAmBhO,KAAKgO,iBAChCK,EAAQM,WAAa3O,KAAKiO,qBAAuBW,EAAiBC,EAClER,EAAQS,aAAc,EAEtB3K,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKqL,GAE5DrO,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,iBAAiB,IACrBiB,OAAOyF,IAER5G,QAAQM,MAAMsG,EAAGvK,KAAK2J,aAAa,GAEtC,MAGCxF,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKmB,EAAmBC,iBAAiBpE,KAAKgD,MAErGhD,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,iBAER,ECzGH,MAAMwL,WAAoBvM,GAExB,WAAAnE,CAAYoE,EAAaC,EAAK+H,EAAQ9H,GAEpClE,MAAMgE,EAAaC,EAAKC,GAExBjD,KAAK+K,OAASA,CACf,CAED,qBAAAhF,CAAsB5B,QAEkCjE,IAAlDiE,EAAmBC,iBAAiBpE,KAAKgD,KAE3ChD,KAAK+K,OAAO7G,KAAKlE,KAAKgD,KAAMsM,IAI1BnL,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKsM,GAE5DtP,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,iBAAiB,IAEvBsH,IAAD,IAQCC,IAECpL,KAAK8D,YAAYsH,EAAM,qLACvBpL,KAAK6D,iBAAiB,KAKxBM,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKmB,EAAmBC,iBAAiBpE,KAAKgD,MAErGhD,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,kBAER,EC3CH,MAAM0L,WAAsBzM,GAE1B,WAAAnE,CAAYoE,EAAaC,EAAKwM,EAAWvM,GAEvClE,MAAMgE,EAAaC,EAAKC,GACxBjD,KAAK+K,OAAS,IAAI0E,EAClBzP,KAAK+K,OAAO2E,QAAQ1M,EAAM,KAC1BhD,KAAK2P,KAAO,CACV,MAAMH,IACN,MAAMA,IACN,MAAMA,IACN,MAAMA,IACN,MAAMA,IACN,MAAMA,IAET,CAED,qBAAAzJ,CAAsB5B,QAEkCjE,IAAlDiE,EAAmBC,iBAAiBpE,KAAKgD,KAE3ChD,KAAK+K,OAAO7G,KAAKlE,KAAK2P,MAAOpB,IAE3BpK,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKuL,GAE5DvO,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,iBAAiB,IAEvBsH,IAAD,IAQClH,IAECjE,KAAK8D,YAAY,+EAAsFG,GACvGjE,KAAK6D,iBAAiB,KAKxBM,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKmB,EAAmBC,iBAAiBpE,KAAKgD,MAErGhD,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,kBAER,ECjDH,MAAM+L,WAA0B9M,GAE9B,WAAAnE,CAAYoE,EAAaC,EAAKC,GAE5BlE,MAAMgE,EAAaC,EAAKC,GACxBjD,KAAK+K,OAAS,IAAI8E,EACnB,CAED,qBAAA9J,CAAsB5B,QAEkCjE,IAAlDiE,EAAmBC,iBAAiBpE,KAAKgD,KAE3ChD,KAAK+K,OAAO7G,KAAKlE,KAAKgD,KAAM8M,IAE1B3L,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAK8M,GAE5D9P,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,iBAAiB,IAEvBsH,IAAD,IAQCC,IAECpL,KAAK8D,YAAYsH,EAAM,qLACvBpL,KAAK6D,iBAAiB,KAKxBM,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKmB,EAAmBC,iBAAiBpE,KAAKgD,MAErGhD,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,kBAER,ECpCH,MAAMkM,WAA4BnH,GAEhC,WAAAjK,CAAYgM,EAAY9B,EAAQC,GAE9B/J,MAAM4L,EAAY9B,EAAQC,EAC3B,CAGD,eAAAM,GAEE,MAAMwB,EAAU,GAEhB,IAAK,IAAInB,EAAI,EAAGA,EAAIzJ,KAAK6I,OAAOhD,OAAQ4D,IACxC,CACE,MAAMoB,EAAa7K,KAAK6I,OAAOY,GAE/B,OAAQoB,EAAWmF,MAEnB,IAAK,UACHpF,EAAQV,KAAK,IAAI4D,GACfjD,EAAWvC,KACXuC,EAAW7H,IACX6H,EAAW5H,OAGb,MACF,IAAK,QACH2H,EAAQV,KAAK,IAAImF,GACfxE,EAAWvC,KACXuC,EAAW7H,IACX+F,GAAkBtD,IAAI,gBACtBoF,EAAW5H,OAGb,MACF,IAAK,MACH2H,EAAQV,KAAK,IAAI0F,GACf/E,EAAWvC,KACXuC,EAAW7H,IACX6H,EAAW5H,OAGb,MACF,IAAK,UACH2H,EAAQV,KAAK,IAAIqF,GACf1E,EAAWvC,KACXuC,EAAW7H,IACX6H,EAAW2E,UACX3E,EAAW5H,OAOhB,CAED,OAAO2H,CACR,EClEH,MAAMqF,GAEJ,WAAAtR,CAAYuR,GAEVlQ,KAAKkQ,YAAcA,EACnBlQ,KAAKmQ,cAAe,EAEpBnQ,KAAKoQ,MAAQ,CACd,CAED,MAAAhS,GAEO4B,KAAKqQ,gBAEJrQ,KAAKkQ,YAAYlQ,KAAKoQ,OAAOE,UAE/BtQ,KAAKoQ,QACLpQ,KAAKmQ,cAAe,GAIhBnQ,KAAKmQ,cAEPnQ,KAAKkQ,YAAYlQ,KAAKoQ,OAAOG,QAC7BvQ,KAAKmQ,cAAe,GAIpBnQ,KAAKkQ,YAAYlQ,KAAKoQ,OAAOhS,SAIpC,CAED,WAAAiS,GAEE,OAAOrQ,KAAKoQ,QAAUpQ,KAAKkQ,YAAYrK,MACxC,EC9BI,MAAM2K,GAEX,WAAA7R,CAAY8R,GAAOC,gBAAEA,EAAeC,mBAAEA,EAAkBC,iBAAEA,IAExD5Q,KAAKyQ,MAAQA,EAEbzQ,KAAK0Q,gBAAkBA,EACvB1Q,KAAK2Q,mBAAqBA,EAC1B3Q,KAAK4Q,iBAAmBA,EAExB5Q,KAAK4K,QAAU,GACf5K,KAAKkQ,YAAc,GAEnBlQ,KAAK6Q,iBAAkB,CACxB,CAED,UAAAC,CAAWC,EAAeC,EAAgBC,GAExCjR,KAAK+Q,cAAgBA,EACrB/Q,KAAKgR,eAAiBA,EACtBhR,KAAKiR,aAAeA,CACrB,CAED,oBAAIC,GAEF,IAAIC,EAAW,EAEf,IAAK,IAAI1H,EAAI,EAAGA,EAAIzJ,KAAK4K,QAAQ/E,OAAQ4D,IACzC,CAEE0H,GADenR,KAAK4K,QAAQnB,GACTG,cACpB,CACD,OAAOuH,EAAWnR,KAAK4K,QAAQ/E,MAChC,CAED,IAAA3B,GAEElE,KAAKoR,eAILpR,KAAK4K,QAAQ,GAAG1G,MACjB,CAED,QAAAjG,GAEC,CAED,OAAAC,GAEC,CAED,MAAAE,GAGC,CAED,YAAAgT,GAEE,MAAMlB,EAAc,GAEdmB,EAAgBtI,GAAkBtD,IAAI,iBAC5C4L,EAAchI,YAAY,CAAEC,KAAM,QAASC,YAAavJ,KAAKyQ,MAAMnI,OAEnE,MAAMgJ,EAAgB,IAAIhG,GAAmBtL,KAAKyQ,MAAMnI,KAAMtI,KAAK+Q,cAAeM,GAClFrR,KAAK4K,QAAQV,KAAKoH,GAClBpB,EAAYhG,KAAK,IAAIlK,KAAK0Q,gBAAgB1Q,KAAKyQ,QAE/C,MAAMc,EAAkB,IAAIxB,GAAoB/P,KAAKyQ,MAAMnI,KAAMtI,KAAKgR,eAAgBK,GACtFrR,KAAK4K,QAAQV,KAAKqH,GAClBrB,EAAYhG,KAAK,IAAIlK,KAAK2Q,mBAAmBY,EAAgBxH,qBAE7D,MAAMyH,EAAgB,IAAI9G,GAAkB1K,KAAKyQ,MAAMnI,KAAMtI,KAAKiR,aAAcI,GAChFrR,KAAK4K,QAAQV,KAAKsH,GAClBtB,EAAYhG,KAAK,IAAIlK,KAAK4Q,iBAAiBY,EAAczH,qBAEzD/J,KAAKyR,mBAAqB,IAAIxB,GAAkBC,EACjD,CAED,SAAA1G,GAEE,IAAIhG,GAAS,EAEb,IAAK,IAAIiG,EAAI,EAAGA,EAAIzJ,KAAK4K,QAAQ/E,OAAQ4D,IACzC,CACE,MAAMsB,EAAS/K,KAAK4K,QAAQnB,GAE5BjG,EAASA,GAAUuH,EAAOvB,WAC3B,CAED,OAAOhG,CACR,CAED,WAAAkO,GAGE,OADA1R,KAAKyR,mBAAmBrT,SACjB4B,KAAKyR,mBAAmBpB,aAChC,ECtGI,MAAMsB,WAAgCnB,GAE3C,QAAAvS,GAEEc,MAAMd,UAEP,CAED,OAAAC,GAEEa,MAAMb,SACP,CAED,MAAAE,GAEEW,MAAMX,SAEF4B,KAAKwJ,aAIPxJ,KAAKyQ,MAAMmB,8BAGd,ECxBI,MAAMC,WAA4BrB,GAEvC,WAAA7R,CAAY8R,EAAOP,GAEjBnR,MAAM0R,EAAOP,GAEblQ,KAAK8R,wBAAyB,CAC/B,CAED,QAAA7T,GAEEc,MAAMd,UAEP,CAED,OAAAC,GAEEa,MAAMb,SACP,CAED,MAAAE,GAEEW,MAAMX,SAEF4B,KAAKwJ,cAEFxJ,KAAK8R,yBAER9R,KAAKyQ,MAAMsB,kBACX/R,KAAK8R,wBAAyB,GAG5B9R,KAAK0R,eAEP1R,KAAKyQ,MAAMuB,qBAGhB,EChCH,MAAMC,WAAsBC,EAE1B,WAAAvT,EAAY2J,KAAEA,EAAI4H,YAAEA,IAElBnR,QAEAiB,KAAKsI,KAAOA,EAEZtI,KAAKwJ,WAAY,EACjBxJ,KAAKmS,gBAAiB,EAEtBnS,KAAKoS,eAAiB,CACpBC,QAAS,IAAIR,GAAoB7R,KAAMkQ,GACvCoC,KAAM,IAAIX,GAAwB3R,KAAMkQ,IAG1ClQ,KAAKuS,sBAAwB,IAAI/B,GAAaxQ,KAAMkQ,EAErD,CAED,oBAAIgB,GAEF,OAAOlR,KAAKuS,sBAAsBrB,gBACnC,CAED,IAAArK,GAEC,CAED,IAAA3C,GAEElE,KAAK6G,OAEL7G,KAAKwS,kBAAkBxS,KAAKoS,eAAeC,SAC3CrS,KAAKuS,sBAAsBrO,MAC5B,CAED,WAAAuO,GAEE,MAAMC,EAAU,GAmBhB,OAjBA1S,KAAK2S,UAASC,IAERA,EAAMC,UAERH,EAAQxI,KAAK0I,EAUd,IAGIF,CACR,CAED,WAAAI,GAEE9S,KAAK2S,UAASC,IAEZ,GAAIA,EAAMC,WAERD,EAAMC,SAASE,WAAWC,SAASC,MAAQ,IAAIC,aAAa,GACxDN,EAAMC,SAASE,WAAWI,SAE5BP,EAAMC,SAASE,WAAWI,OAAOF,MAAQ,IAAIC,aAAa,IAExDN,EAAMC,SAASE,WAAWK,KAE5BR,EAAMC,SAASE,WAAWK,GAAGH,MAAQ,IAAIC,aAAa,IAEpDN,EAAMS,SAASC,KAEjB,IAAK,IAAI7J,EAAI,EAAGA,EAAImJ,EAAMS,SAASC,IAAIC,QAAQ1N,OAAQ4D,IAErDmJ,EAAMS,SAASC,IAAIC,QAAQ9J,GAAK,IAAI+J,WAAW,EAGpD,GAIJ,CAED,OAAA3Q,GAEE7C,KAAK2S,UAASC,IAERA,EAAMS,WAEJT,EAAMS,SAASC,KAEjBV,EAAMS,SAASC,IAAIzQ,UAGrB+P,EAAMS,SAASxQ,UACf+P,EAAMC,SAAShQ,UAChB,GAGJ,CAED,UAAAiO,CAAWC,EAAeC,EAAgBC,GAExCjR,KAAKoS,eAAeC,QAAQvB,WAAWC,EAAeC,EAAgBC,EACvE,CAED,eAAAwC,CAAgB1C,EAAeC,EAAgBC,GAE7CjR,KAAKoS,eAAeE,KAAKxB,WAAWC,EAAeC,EAAgBC,EACpE,CAED,iBAAAuB,CAAkBkB,GAEhB1T,KAAKuS,sBAAsBrU,UAC3B8B,KAAKuS,sBAAwBmB,EAC7B1T,KAAKuS,sBAAsBtU,UAC5B,CAGD,oBAAA0V,GAEO3T,KAAKmS,gBAERnS,KAAKuS,sBAAsBnU,QAE9B,CAED,MAAAA,GAEE4B,KAAK2T,sBACN,CAED,eAAA5B,GAGC,CAED,kBAAAC,GAEEhS,KAAKwJ,WAAY,EAGjBxJ,KAAKwS,kBAAkBxS,KAAKoS,eAAeE,MAC3CtS,KAAKuS,sBAAsBrO,MAC5B,CAED,4BAAA0N,GAEE5R,KAAKmS,gBAAiB,CACvB,ECjKH,MAAMyB,GAEJ,WAAAjV,GACE,CAEF,iBAAOkV,CAAW3U,EAChB4U,EACAC,EACAC,EACAC,GAEA,OAAS/U,EAAQ4U,IAA2BC,EAAuBD,IAA4BG,EAAqBD,GAAwBA,CAC7I,CAED,cAAOE,CAAQhV,EAAOiV,EAAKC,GAEzB,OAAQlV,GAASiV,GAAOjV,GAASkV,CAClC,CAED,UAAOC,CAAIC,EAAQC,GAEjB,OAASD,EAASC,EAAWA,GAAWA,CACzC,CAED,iBAAOC,CAAWC,GAmBhB,OAjBAA,EAAI1M,EAAI2M,KAAKC,MAAc,IAARF,EAAI1M,GAAS6M,SAAS,IACzCH,EAAII,EAAIH,KAAKC,MAAc,IAARF,EAAII,GAASD,SAAS,IACzCH,EAAIK,EAAIJ,KAAKC,MAAc,IAARF,EAAIK,GAASF,SAAS,IAEpB,IAAjBH,EAAI1M,EAAElC,SAER4O,EAAI1M,EAAI,IAAM0M,EAAI1M,GAEC,IAAjB0M,EAAII,EAAEhP,SAER4O,EAAII,EAAI,IAAMJ,EAAII,GAEC,IAAjBJ,EAAIK,EAAEjP,SAER4O,EAAIK,EAAI,IAAML,EAAIK,GAGb,IAAML,EAAI1M,EAAI0M,EAAII,EAAIJ,EAAIK,CAClC,CAED,8BAAOC,CAAwBC,EAAQC,GAErC,MAAMC,EAAkBF,EAAO,GAAG7P,QAClC+P,EAAgB/S,IAAI,EAAG,EAAG,GAE1B,MAAMgT,EAAkB,GAExB,IAAK,IAAI1L,EAAI,EAAGA,EAAIuL,EAAOnP,OAAQ4D,IAEjCwL,EAAMG,aAAaJ,EAAOvL,GAAIyL,GAC9BC,EAAgBjL,KAAKgL,EAAgB/P,SAGvC,OAAOgQ,CACR,CAED,mBAAOE,CAAaC,EAAMC,EAAIC,EAAQC,GAEpC,IAAK,IAAIhM,EAAI,EAAGA,EAAI,GAAIA,IAEtB+L,EAAOE,SAASjM,GAAKzJ,KAAK2V,KAAKL,EAAKI,SAASjM,GAAI8L,EAAGG,SAASjM,GAAIgM,EAEpE,CAED,aAAOG,CAAOC,EAAIC,GAEhB,OAAOpB,KAAKqB,IAAIF,EAAKC,GAAM,IAC5B,CAED,WAAOH,CAAKK,EAAGC,EAAGR,GAEhB,OAAQ,EAAIA,GAAKO,EAAIP,EAAIQ,CAC1B,CAED,YAAOC,CAAMhX,EAAOiV,EAAKC,GAEvB,OAAOM,KAAKN,IAAID,EAAKO,KAAKP,IAAIC,EAAKlV,GACpC,CAED,sBAAOiX,CAAgB/P,EAAGgQ,GAExB,OAAShQ,EAAIgQ,EAAKA,GAAKA,CACxB,CAED,eAAOC,CAASL,EAAGnQ,EAAS,GAE1B,OAAOA,EAAS6O,KAAKqB,IAAInC,GAAMuC,gBAAgBH,EAAY,EAATnQ,GAAcA,EACjE,CAED,eAAOyQ,CAASC,GAEd,OAAOA,GAAW7B,KAAK8B,GAAK,IAC7B,CAED,eAAOC,CAASC,GAEd,OAAOA,GAAW,IAAMhC,KAAK8B,GAC9B,CAED,iBAAOG,CAAWJ,GAEhB,OAAOA,GAAW7B,KAAK8B,GAAK,IAC7B,CAED,iBAAOI,CAAWF,GAEhB,OAAOA,GAAW,IAAMhC,KAAK8B,GAC9B,CAED,yBAAOK,CAAmBC,GAKxB,OAHAA,EAAEd,GAAKc,EAAEC,EACTD,EAAEb,GAAKa,EAAEC,EACTD,EAAEE,GAAKF,EAAEC,EACFD,CACR,CAED,qBAAOG,CAAejC,GAEpB,MAAMkC,EAASlC,EAAO,GAAG7P,QACzB,IAAK,IAAIsE,EAAI,EAAGA,EAAIuL,EAAOnP,OAAQ4D,IAEjCyN,EAAOC,IAAInC,EAAOvL,IAGpB,OADAyN,EAAOE,eAAe,EAAIpC,EAAOnP,QAC1BqR,CACR,CAED,uBAAOG,GAEL,MAAMC,EAAM,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,KAEpE,IAAIC,EAAM,IASV,OARAA,GAAOD,EAAI5C,KAAK8C,MAAsB,GAAhB9C,KAAK+C,WAC3BF,GAAOD,EAAI5C,KAAK8C,MAAsB,GAAhB9C,KAAK+C,WAE3BF,GAAOD,EAAI5C,KAAK8C,MAAsB,GAAhB9C,KAAK+C,WAC3BF,GAAOD,EAAI5C,KAAK8C,MAAsB,GAAhB9C,KAAK+C,WAE3BF,GAAOD,EAAI5C,KAAK8C,MAAsB,GAAhB9C,KAAK+C,WAC3BF,GAAOD,EAAI5C,KAAK8C,MAAsB,GAAhB9C,KAAK+C,WACpBF,CACR,CAED,eAAOG,CAAS1B,GAEd,OAAOpC,GAAMsC,MAAMF,EAAG,EAAG,EAC1B,ECvJH,MAAM2B,GAEJ,WAAAhZ,CAAY+D,EAAU,CAAE,GAEtB1C,KAAK4X,uBAAyB,KAC9B5X,KAAK6X,cAAgB,KACrB7X,KAAK8X,eAAiB9X,KAAK+X,uBAC3B/X,KAAKgY,SAAU,EAEfhY,KAAKiY,cAAgB,GACrBjY,KAAK0C,QAAUA,EAEf1C,KAAKkY,gBAAkBC,KAAKC,MAAMD,KAAKE,UAAU3V,IAEjD1C,KAAKsY,MAAQ,EAEbtY,KAAKuY,SAAW,GAEhB,MAAMC,EAAgBhQ,OAAOC,KAAK/F,GAClC,IAAK,IAAI+G,EAAI,EAAGA,EAAI+O,EAAc3S,OAAQ4D,IAExCzJ,KAAKuY,SAASC,EAAc/O,IAAM,GAGpCzJ,KAAKyY,SAAW,CACjB,CAED,IAAApR,GAEErH,KAAKgY,SAAU,CAChB,CAED,IAAAzQ,GAEEvH,KAAKgY,SAAU,CAChB,CAED,KAAAU,GAEE1Y,KAAK6X,cAAgB,IACtB,CAED,IAAAc,GAEE,MAAMF,EAAWzY,KAAK4Y,eACtB5Y,KAAK6Y,aAAa7Y,KAAK6X,aAAcY,EAAW,MAChDzY,KAAK6X,aAAeY,CACrB,CAED,MAAAra,CAAO0a,GAED9Y,KAAKgY,UAEPhY,KAAK4X,sBAAwB5X,KAAK6X,aAClC7X,KAAK6X,cAAgBiB,EAAa9Y,KAAK8X,eACvC9X,KAAK6Y,aAAa7Y,KAAK4X,sBAAuB5X,KAAK6X,cAEtD,CAED,YAAAkB,CAAaC,GAEXhZ,KAAK4X,sBAAwB5X,KAAK6X,aAClC7X,KAAK6X,aAAejE,GAAMsC,MAAM8C,EAAM,EAAGhZ,KAAKyY,UAC9CzY,KAAK6Y,aAAa7Y,KAAK6X,aAAc7X,KAAK6X,aAC3C,CAED,uBAAAoB,CAAwBxD,GAEtBzV,KAAK4X,sBAAwB5X,KAAK6X,aAClC7X,KAAK6X,aAAejE,GAAMsC,MAAMT,EAAG,EAAG,GAAKzV,KAAKyY,SAChDzY,KAAK6Y,aAAa7Y,KAAK6X,aAAc7X,KAAK6X,aAC3C,CAED,YAAAjO,GAEE,OAAOgK,GAAMsC,MAAMlW,KAAK6X,aAAe7X,KAAK4Y,eAAgB,EAAG,EAChE,CAED,WAAAvI,GAEE,OAAOrQ,KAAK6X,aAAe7X,KAAK4Y,cACjC,CAED,gBAAAM,CAAiBC,EAAcC,GAE7BpZ,KAAKiY,cAAc/N,KAAK,CACtBiP,aAAcA,EACdC,OAAQA,IAGVpZ,KAAKyY,SAAW/D,KAAKN,IAAIpU,KAAKyY,SAAUU,EACzC,CAED,uBAAAE,CAAwB/D,EAAMC,EAAI+D,EAAcC,GAAyB,GAEvE,GAAIA,EACJ,CACE,MAAMC,EAAYxZ,KAAKuY,SAASe,EAAaG,qBAE3BvZ,IAAdsZ,GAEF7V,QAAQM,MAAM,GAAGqV,EAAaG,iDAGP,IAArBD,EAAU3T,OAEZyT,EAAahE,KAAOtV,KAAKkY,gBAAgBoB,EAAaG,gBAItDH,EAAahE,KAAOkE,EAAUA,EAAU3T,OAAS,GAAGyT,aAAa/D,EAEpE,CAED,MAAMmE,EAAW,CACfpE,KAAMA,EACNC,GAAIA,EACJ+D,aAAcA,GAGhBtZ,KAAKyY,SAAW/D,KAAKN,IAAIpU,KAAKyY,SAAUlD,GACxCvV,KAAKuY,SAASe,EAAaG,gBAAgBvP,KAAKwP,EACjD,CAED,wBAAAC,CAAyBrR,GAEvB,MAAMoR,EAAW1Z,KAAK4Z,uBAAuBtR,EAAMtI,KAAK6X,cAExD,OAAI7X,KAAK6X,aAAe6B,EAASpE,KAExBoE,EAASJ,aAAaO,SAAS,GAGjCH,EAASJ,aAAaO,SAAS,EACvC,CAED,0BAAAC,CAA2BxR,GAIzB,OAFiBtI,KAAK4Z,uBAAuBtR,EAAMtI,KAAK6X,cAExCyB,aAAaO,SAAS,EACvC,CAED,oBAAAE,CAAqBzR,GAEnB,MAAMoR,EAAW1Z,KAAK4Z,uBAAuBtR,EAAMtI,KAAK6X,cAClDpC,EAAIzV,KAAKga,gBAAgBha,KAAK6X,aAAc6B,EAASpE,KAAMoE,EAASnE,IAE1E,OAAOmE,EAASJ,aAAaW,gBAAgBxE,EAC9C,CAED,YAAAmD,GAEE,OAAO5Y,KAAKyY,QACb,CAED,YAAAI,CAAavD,EAAMC,GAEbvV,KAAK6X,aAAe7X,KAAK4X,uBAE3B5X,KAAKka,cAAcla,KAAK4X,sBAAuB5X,KAAK6X,cAEtD,MAAMW,EAAgBhQ,OAAOC,KAAKzI,KAAKkY,iBAEvC,IAAK,IAAIzO,EAAI,EAAGA,EAAI+O,EAAc3S,OAAQ4D,IAC1C,CACE,MAAMnB,EAAOkQ,EAAc/O,GACrBiQ,EAAW1Z,KAAK4Z,uBAAuBtR,EAAMgN,GAEnDtV,KAAK0C,QAAQ4F,GAAQtI,KAAKma,kBAAkBT,EAAUpE,EACvD,CACF,CAED,aAAA4E,CAAc5E,EAAMC,GAElB,IAAK,IAAI9L,EAAI,EAAGA,EAAIzJ,KAAKiY,cAAcpS,OAAQ4D,IAC/C,CACE,MAAM0P,EAAenZ,KAAKiY,cAAcxO,GAAG0P,aACvCvF,GAAMM,QAAQiF,EAAc7D,EAAMC,KAEpC5R,QAAQyW,IAAI,eAAiBpa,KAAKiY,cAAcxO,GAAG2P,OAAOza,YAAY2J,KAAO,OAAUtI,KAAKiY,cAAcxO,GAAG0P,cAC7GnZ,KAAKiY,cAAcxO,GAAG2P,OAAOiB,UAEhC,CACF,CAED,iBAAAF,CAAkBT,EAAUV,GAI1B,OAFAhZ,KAAKsY,MAAQtY,KAAKga,gBAAgBhB,EAAMU,EAASpE,KAAMoE,EAASnE,IAEzDmE,EAASJ,aAAaO,SAASjG,GAAMsC,MAAMlW,KAAKsY,MAAO,EAAG,GAClE,CAED,aAAAgC,CAAcC,GAEZ,OAAOva,KAAKuY,SAASgC,EACtB,CAED,oBAAAC,CAAqBD,GAEnB,IAAK,IAAI9Q,EAAI,EAAGA,EAAIzJ,KAAKuY,SAASgC,GAAc1U,OAAQ4D,IACxD,CAGE,GAFiBzJ,KAAKuY,SAASgC,GAAc9Q,GAEhC6P,aAAamB,QAExB,OAAO,CAEV,CAED,OAAO,CACR,CAED,eAAAT,CAAgB9a,EACd4U,EACAC,GAEA,OAAOH,GAAM8D,UAAWxY,EAAQ4U,IAA2BC,EAAuBD,GAAuB,EAAc,EACxH,CAED,sBAAA8F,CAAuBW,EAAcvB,GAEnC,IAAI0B,EAEJ,MAAMlB,EAAYxZ,KAAKuY,SAASgC,GAEhC,IAAK,IAAI9Q,EAAI,EAAGA,EAAI+P,EAAU3T,OAAQ4D,IACtC,CACE,MAAMiQ,EAAWF,EAAU/P,GAE3B,GAAIuP,GAAQU,EAASpE,MAAQ0D,GAAQU,EAASnE,GAG5C,OADAmF,EAAUhB,EACHgB,CAEV,CAED,IAAIvG,EAAMwG,IAEV,IAAK,IAAIlR,EAAI,EAAGA,EAAI+P,EAAU3T,OAAQ4D,IACtC,CACE,MAAMiQ,EAAWF,EAAU/P,GACrBmR,EAAWlG,KAAKqB,IAAI2D,EAASnE,GAAKyD,GAEpC4B,EAAWzG,IAEbuG,EAAUhB,EACVvF,EAAMyG,EAET,CAED,OAAOF,CACR,CAED,oBAAA3C,GAEE,MAEM8C,EAFa,IAAIC,gBAAgBlP,OAAOmP,SAASC,QAEfvV,IAAI,wBAE5C,OAAIoV,EAEKxU,OAAOwU,GAIP,CAEV,EC/QH,MAAMI,GAEJ,WAAAtc,GACE,CAEF,aAAOuc,CAAOlF,GAEZ,OAAOA,CACR,CAED,iBAAOmF,CAAWnF,GAEhB,OAAO,EAAItB,KAAKqB,IAAS,EAAJC,EAAK,EAAc,EACzC,CAED,mBAAOoF,CAAapF,GAElB,OAAO,EAAItB,KAAK2G,IAAQ,UAAJrF,EAAgB,EACrC,CAED,oBAAOsF,CAActF,GAEnB,OAAOtB,KAAK6G,IAAQ,UAAJvF,EAAgB,EACjC,CAED,uBAAOwF,CAAiBxF,GAEtB,QAAStB,KAAK2G,IAAI,UAAYrF,GAAK,GAAK,CACzC,CAED,oBAAOyF,CAAczF,GAEnB,OAAOA,EAAIA,EAAIA,CAChB,CAED,qBAAO0F,CAAe1F,GAEpB,OAAO,EAAItB,KAAKiH,IAAI,EAAI3F,EAAG,EAC5B,CAED,wBAAO4F,CAAkB5F,GAEvB,OAAOA,EAAI,GACP,EAAIA,EAAIA,EAAIA,EACZ,EAAItB,KAAKiH,KAAK,EAAI3F,EAAI,EAAG,GAAK,CACnC,CAED,mBAAO6F,CAAa7F,GAElB,OAAOA,EAAIA,CACZ,CAED,oBAAO8F,CAAc9F,GAEnB,OAAO,GAAK,EAAIA,IAAM,EAAIA,EAC3B,CAED,uBAAO+F,CAAiB/F,GAEtB,OAAOA,EAAI,GACP,EAAIA,EAAIA,EACR,EAAItB,KAAKiH,KAAK,EAAI3F,EAAI,EAAG,GAAK,CACnC,CAED,oBAAOgG,CAAchG,GAEnB,OAAOA,EAAIA,EAAIA,EAAIA,CACpB,CAED,qBAAOiG,CAAejG,GAEpB,OAAO,EAAItB,KAAKiH,IAAI,EAAI3F,EAAG,EAC5B,CAED,wBAAOkG,CAAkBlG,GAEvB,OAAOA,EAAI,GACP,EAAIA,EAAIA,EAAIA,EAAIA,EAChB,EAAItB,KAAKiH,KAAK,EAAI3F,EAAI,EAAG,GAAK,CACnC,CAED,oBAAOmG,CAAcnG,GAEnB,OAAOA,EAAIA,EAAIA,EAAIA,EAAIA,CACxB,CAED,qBAAOoG,CAAepG,GAEpB,OAAO,EAAItB,KAAKiH,IAAI,EAAI3F,EAAG,EAC5B,CAED,wBAAOqG,CAAkBrG,GAEvB,OAAOA,EAAI,GACP,GAAKA,EAAIA,EAAIA,EAAIA,EAAIA,EACrB,EAAItB,KAAKiH,KAAK,EAAI3F,EAAI,EAAG,GAAK,CACnC,CAED,mBAAOsG,CAAatG,GAElB,OAAa,IAANA,EAAU,EAAItB,KAAKiH,IAAI,EAAG,GAAK3F,EAAI,GAC3C,CAED,oBAAOuG,CAAcvG,GAEnB,OAAa,IAANA,EAAU,EAAI,EAAItB,KAAKiH,IAAI,GAAI,GAAK3F,EAC5C,CAED,uBAAOwG,CAAiBxG,GAEtB,OAAa,IAANA,EACH,EACM,IAANA,EACE,EACAA,EAAI,GACFtB,KAAKiH,IAAI,EAAG,GAAK3F,EAAI,IAAM,GAC1B,EAAItB,KAAKiH,IAAI,GAAI,GAAK3F,EAAI,KAAO,CAC3C,CAED,mBAAOyG,CAAazG,GAElB,OAAO,EAAItB,KAAKgI,KAAK,EAAIhI,KAAKiH,IAAI3F,EAAG,GACtC,CAED,oBAAO2G,CAAc3G,GAEnB,OAAOtB,KAAKgI,KAAK,EAAIhI,KAAKiH,IAAI3F,EAAI,EAAG,GACtC,CAED,uBAAO4G,CAAiB5G,GAEtB,OAAOA,EAAI,IACN,EAAItB,KAAKgI,KAAK,EAAIhI,KAAKiH,IAAI,EAAI3F,EAAG,KAAO,GACzCtB,KAAKgI,KAAK,EAAIhI,KAAKiH,KAAK,EAAI3F,EAAI,EAAG,IAAM,GAAK,CACpD,CAED,mBAAO6G,CAAa7G,GAElB,OAAO,OAASA,EAAIA,EAAIA,EAAI,OAASA,EAAIA,CAC1C,CAED,oBAAO8G,CAAc9G,GAEnB,OAAO,EAAI,OAAStB,KAAKiH,IAAI3F,EAAI,EAAG,GAAK,OAAStB,KAAKiH,IAAI3F,EAAI,EAAG,EACnE,CAED,uBAAO+G,CAAiB/G,GAEtB,OAAOA,EAAI,GACNtB,KAAKiH,IAAI,EAAI3F,EAAG,IAAM,SAAsBA,EAAI,WAAc,GAC9DtB,KAAKiH,IAAI,EAAI3F,EAAI,EAAG,IAAM,WAAuB,EAAJA,EAAQ,GAAK,WAAa,GAAK,CAClF,CAED,sBAAOgH,CAAgBhH,GAErB,MAAMiH,EAAM,EAAIvI,KAAK8B,GAAM,EAE3B,OAAa,IAANR,EACH,EACM,IAANA,EACE,GACCtB,KAAKiH,IAAI,EAAG,GAAK3F,EAAI,IAAMtB,KAAK6G,KAAS,GAAJvF,EAAS,OAASiH,EAC/D,CAED,uBAAOC,CAAiBlH,GAEtB,OAAa,IAANA,EACH,EACM,IAANA,EACE,EACAtB,KAAKiH,IAAI,GAAI,GAAK3F,GAAKtB,KAAK6G,IAAsB,UAAb,GAAJvF,EAAS,MAAqB,CACtE,CAED,0BAAOmH,CAAoBnH,GAEzB,OAAa,IAANA,EACH,EACM,IAANA,EACE,EACAA,EAAI,IACAtB,KAAKiH,IAAI,EAAG,GAAK3F,EAAI,IAAMtB,KAAK6G,IAAwB,WAAnB,GAAKvF,EAAI,SAAwB,EACxEtB,KAAKiH,IAAI,GAAI,GAAK3F,EAAI,IAAMtB,KAAK6G,IAAwB,WAAnB,GAAKvF,EAAI,SAAuB,EAAI,CACnF,CAED,qBAAOoH,CAAepH,GAEpB,OAAO,EAAIhW,KAAKqd,gBAAgB,EAAIrH,EACrC,CAED,sBAAOqH,CAAgBrH,GAErB,MAAMsH,EAAK,OACLC,EAAK,KAEX,OAAIvH,EAAI,EAAIuH,EAEHD,EAAKtH,EAAIA,EAETA,EAAI,EAAIuH,EAERD,GAAMtH,GAAK,IAAMuH,GAAMvH,EAAI,IAE3BA,EAAI,IAAMuH,EAEVD,GAAMtH,GAAK,KAAOuH,GAAMvH,EAAI,MAI5BsH,GAAMtH,GAAK,MAAQuH,GAAMvH,EAAI,OAEvC,CAED,yBAAOwH,CAAmBxH,GAExB,OAAOA,EAAI,IACN,EAAIhW,KAAKqd,gBAAgB,EAAI,EAAIrH,IAAM,GACvC,EAAIhW,KAAKqd,gBAAgB,EAAIrH,EAAI,IAAM,CAC7C,CAED,gBAAOyH,CAAUhI,GAEf,OAAO,EAAMf,KAAKiH,IAAIjH,KAAKqB,IAAIrB,KAAK6G,IAAI9F,EAAI,IAAO,IAAQf,KAAKgJ,KAAKhJ,KAAK6G,IAAI9F,IAAMf,KAAK6G,IAAI9F,EAAI,IAAM,GAAO,EAC/G,EC5NH,MAAMkI,GAEJ,WAAAhf,CAAYsb,EAAkB,UAE5Bja,KAAKia,qBAAkB/Z,EAIrBF,KAAKia,gBAFwB,iBAApBA,EAEcgB,GAAgBhB,GAIhBA,CAE1B,CAED,MAAA7b,CAAOsE,EAAS+S,GAGf,EClBH,MAAMmI,WAA2BD,GAE/B,WAAAhf,CAAY8a,EAAgBnE,EAAO,EAAGC,EAAK,EAAGkF,GAAU,EAAOR,EAAkB,UAE/Elb,MAAMkb,GAENja,KAAKyZ,eAAiBA,EACtBzZ,KAAKsV,KAAOA,EACZtV,KAAKuV,GAAKA,EACVvV,KAAKya,QAAUA,CAChB,CAED,MAAArc,CAAOsE,EAAS+S,GAEd/S,EAAQ1C,KAAKyZ,gBAAkB7F,GAAM+B,KAAK3V,KAAKsV,KAAMtV,KAAKuV,GAAIvV,KAAKia,gBAAgBxE,GACpF,CAED,QAAAoE,CAASpE,GAEP,OAAO7B,GAAM+B,KAAK3V,KAAKsV,KAAMtV,KAAKuV,GAAIvV,KAAKia,gBAAgBxE,GAC5D,ECtBH,MAAMoI,GAEJ,WAAAlf,CAAY2J,EAAM/D,EAAQuZ,GAExB9d,KAAKsI,KAAOA,EACZtI,KAAKuE,OAASA,EACdvE,KAAK8d,KAAOA,CACb,CAED,OAAAzD,GAEE0D,QAAQC,YAAYhe,KAAKsI,MAAMtI,KAAKuE,WAAWvE,KAAK8d,KAAKjQ,MAAM,KAChE,ECbH,MAAMoQ,GAEJ,WAAAtf,GAGC,CAED,KAAAyZ,CAAM8F,GAEJ,MAEMC,GAFM,IAAIC,WAAYC,gBAAgBH,EAAc,YAE9BI,iBAAiB,cAEvCC,EAAmB,GACnBC,EAAW,GAEjB,IAAK,IAAI/U,EAAI,EAAGA,EAAI0U,EAAgBtY,OAAQ4D,IAC5C,CACE,MAAMgV,EAAON,EAAgB1U,GACvBiV,EAAcD,EAAKE,cACnBzY,EAAOwY,EAAYE,aAAa,SAIhCtJ,EAFQtV,KAAK6e,oBAAoBJ,GAElB,IACfhG,EAAWqG,WAAWL,EAAKG,aAAa,UAAY,IAG1D,GAAIF,EAAYE,aAAa,SAASlW,SAAS,YAC/C,CACE,MAAMqW,EAAa7Y,EAAK2H,MAAM,KACxBmR,EAAeD,EAAW,GAC1BE,EAAiBF,EAAW,GAElCP,EAAStU,KAAK,CACZ5B,KAAM0W,EACNza,OAAQ0a,EACRC,QAAS5J,EAAkB,GAAXmD,GAEnB,CAKD,GAHsBiG,EAAYE,aAAa,SAASlW,SAAS,gBAC3CgW,EAAYE,aAAa,SAASlW,SAAS,UAEnC,KAATxC,IAAgBA,EAAKwC,SAAS,KACnD,CACE,MAAMqW,EAAa7Y,EAAK2H,MAAM,KAExB4L,EAAiBsF,EAAW,GAE5BI,EAAaJ,EAAW,GAAGlR,MAAM,MACjCuR,EAAWN,WAAWK,EAAW,IACjClF,EAAkBkF,EAAW,GAET,IAAtBJ,EAAWlZ,QAEblC,QAAQM,MAAM,4BAA6BiC,GAGnB,IAAtBiZ,EAAWtZ,QAEblC,QAAQM,MAAM,4BAA6BiC,GAG7CqY,EAAiBrU,KAAK,CACpBuP,eAAgBA,EAChB4F,UAAW/J,EACXgK,QAAShK,EAAOmD,EAChB2G,SAAUA,EACVnF,gBAAiBA,GAEpB,CACF,CAMD,OAJAsE,EAAiBgB,MAAK,CAACC,EAAG1K,IAEjB0K,EAAEH,UAAYvK,EAAEuK,YAElB,CACLd,iBAAkBA,EAClBC,SAAUA,EAEb,CAED,mBAAAK,CAAoBJ,GAElB,MAAMgB,EAAQhB,EAAKG,aAAa,KAChC,OAAiB,OAAVa,EAAiB,EAAIX,WAAWW,EACxC,ECnFH,MAAMC,GAEJ,WAAA/gB,CAAYghB,GAEV3f,KAAK2f,mBAAqBA,CAC3B,CAED,oBAAAC,CAAqBC,EAAgBC,EAAiB5H,GAEpDA,EAAkBA,GAAmBlY,KAAK2f,mBAC1C,MAAMI,EAASF,EAAetB,iBACxBC,EAAWqB,EAAerB,SAE1BwB,EAAiBhgB,KAAKigB,gBAAgBjgB,KAAK2f,mBAAoB3f,KAAKkgB,iBAAiBL,EAAetB,mBAE1G,IAAK,IAAI9U,EAAI,EAAGA,EAAIuW,EAAena,OAAQ4D,SAEmDvJ,IAAxF6f,EAAOI,MAAKC,GAAWA,EAAQ3G,iBAAmBuG,EAAevW,GAAGgQ,kBAEtEsG,EAAO7V,KAAK8V,EAAevW,IAI/B,MAAM4W,EAAY,IAAI1I,GAAgBmI,GAEtC,IAAK,IAAIrW,EAAI,EAAGA,EAAIsW,EAAOla,OAAQ4D,IACnC,CACE,MAAMgM,EAAIsK,EAAOtW,GACX6P,EAAe,IAAIsE,GACvBnI,EAAEgE,eACFqG,EAAgBrK,EAAEgE,gBAClBhE,EAAE2J,SACF3J,EAAEgF,QACFhF,EAAEwE,iBAGJoG,EAAUhH,wBAAwB5D,EAAE4J,UAAW5J,EAAE6J,QAAShG,GAAc,EACzE,CAED,IAAK,IAAI7P,EAAI,EAAGA,EAAI+U,EAAS3Y,OAAQ4D,IACrC,CACE,MAAMgM,EAAI+I,EAAS/U,GACb6W,EAAe,IAAIzC,GAAYpI,EAAEnN,KAAMmN,EAAElR,OAAQkR,EAAEqI,MACzDuC,EAAUnH,iBAAiBzD,EAAEyJ,QAASoB,EACvC,CAED,OAAOD,CACR,CAED,eAAAJ,CAAgBvM,EAAO6M,GAErB,MAAMR,EAAS,GAETtX,EAAOD,OAAOC,KAAKiL,GAEzB,IAAK,IAAIjK,EAAI,EAAGA,EAAIhB,EAAK5C,OAAQ4D,IAE/BsW,EAAO7V,KAAK,CACVuP,eAAgBhR,EAAKgB,GACrB4V,UAAW,EACXC,QAASiB,EAAe,EAAIA,EAAe,EAC3CnB,SAAU1L,EAAMjL,EAAKgB,IACrBgR,SAAS,EACTR,gBAAiB,sBAIrB,OAAO8F,CACR,CAED,YAAAS,CAAaC,EAAK/d,GAEhB,MAAMge,GAAkB,IAAKzC,IAAwB7F,MAAMqI,GACrDV,EAASW,EAAgBnC,iBACzBC,EAAWkC,EAAgBlC,SAC3B6B,EAAY,IAAI1I,GAAgBjV,GAEtC,IAAK,IAAI+G,EAAI,EAAGA,EAAIsW,EAAOla,OAAQ4D,IACnC,CACE,MAAMgM,EAAIsK,EAAOtW,GACX6P,EAAe,IAAIsE,GACvBnI,EAAEgE,eACF/W,EAAQ+S,EAAEgE,gBACVhE,EAAE2J,SACF3J,EAAEgF,QACFhF,EAAEwE,iBAGJoG,EAAUhH,wBAAwB5D,EAAE4J,UAAW5J,EAAE6J,QAAShG,GAAc,EACzE,CAED,IAAK,IAAI7P,EAAI,EAAGA,EAAI+U,EAAS3Y,OAAQ4D,IACrC,CACE,MAAMgM,EAAI+I,EAAS/U,GACb6W,EAAe,IAAIzC,GAAYpI,EAAEnN,KAAMmN,EAAElR,QAC/C8b,EAAUnH,iBAAiBzD,EAAEyJ,QAASoB,EACvC,CAED,OAAOD,CACR,CAED,gBAAAH,CAAiBH,GAEf,IAAIQ,GAAgB,EAEpB,IAAK,IAAI9W,EAAI,EAAGA,EAAIsW,EAAOla,OAAQ4D,IACnC,CACE,MAEMkX,EAFQZ,EAAOtW,GAEI6V,QAEzBiB,EAAeI,EAAaJ,EAAeI,EAAaJ,CACzD,CAED,OAAOA,CACR,ECtHH,MAAMK,GAEJ,WAAAjiB,GAEEqB,KAAK6gB,YAAc,GACnB7gB,KAAK2f,mBAAqB,EAC3B,CAED,GAAAla,CAAIqb,EAAiBC,EAAejB,GAElC,IAAK,IAAIrW,EAAI,EAAGA,EAAIzJ,KAAK6gB,YAAYhb,OAAQ4D,IAE3C,GAAIzJ,KAAK6gB,YAAYpX,GAAG6L,OAASwL,GAAmB9gB,KAAK6gB,YAAYpX,GAAG8L,KAAOwL,EAC/E,CAEE,OADyB,IAAIrB,GAAuB1f,KAAK2f,oBAAoBC,qBAAqB5f,KAAK6gB,YAAYpX,GAAGvD,KAAM4Z,EAE7H,CAGH,IAAK,IAAIrW,EAAI,EAAGA,EAAIzJ,KAAK6gB,YAAYhb,OAAQ4D,IAE3C,GAAIzJ,KAAK6gB,YAAYpX,GAAG8L,KAAOwL,QAA8C7gB,IAA7BF,KAAK6gB,YAAYpX,GAAG6L,KACpE,CAEE,OADyB,IAAIoK,GAAuB1f,KAAK2f,oBAAoBC,qBAAqB5f,KAAK6gB,YAAYpX,GAAGvD,KAAM4Z,EAE7H,CAGHnc,QAAQM,MAAM,0CAA2C6c,EAAiBC,EAE3E,CAED,eAAAC,CAAgBH,GAEd,IAAK,IAAIpX,EAAI,EAAGA,EAAIoX,EAAYhb,OAAQ4D,IAEtCzJ,KAAK6gB,YAAY3W,KAAK2W,EAAYpX,GAErC,CAED,eAAAwX,CAAgBJ,GAEd7gB,KAAK6gB,YAAcA,CACpB,CAED,sBAAAK,CAAuBvB,GAErB3f,KAAK2f,mBAAqBA,CAC3B,EC0CE,MAAC3G,GAAO,IAzFb,MAEE,WAAAra,GAEEqB,KAAKmhB,eAAiB,CAAC,KAAO,KAAO,KAAO,KAAO,KAAO,KAAO,KAAO,KAAO,KAAO,KACvF,CAED,IAAAta,GAEE7G,KAAKohB,QAAU,IAAIC,EACnBrhB,KAAKshB,aAAe,EACpBthB,KAAKuhB,oBAAsB,EAC3BvhB,KAAKwhB,eAAiB,EACtBxhB,KAAKyhB,iBAAmB,IAAIriB,EAAQ,EAAG,GACvCY,KAAK0hB,wBAA0B,EAC/B1hB,KAAK2hB,iBAAmB,EAAI,EAC7B,CAED,gBAAI9J,GAEF,OAAO7X,KAAKwhB,cACb,CAED,cAAI1I,GAEF,OAAO9Y,KAAKshB,YACb,CAED,qBAAIM,GAEF,OAAO5hB,KAAKuhB,mBACb,CAED,eAAIM,GAIF,OAFA7hB,KAAKyhB,iBAAiBzL,EAAIhW,KAAK8Y,WAC/B9Y,KAAKyhB,iBAAiBxL,EAAIjW,KAAK6X,aACvB7X,KAAKyhB,gBACd,CAED,uBAAIK,GAEF,OAAO9hB,KAAK0hB,uBACb,CAED,OAAIK,GAEF,OAAO/hB,KAAK2hB,gBACb,CAED,MAAIK,GAEF,OAAOhiB,KAAK8Y,UACb,CAED,OAAImJ,GAEF,OAAOjiB,KAAK4hB,iBACb,CAED,yBAAAM,CAA0BhjB,GAExBc,KAAK0hB,wBAA0BxiB,CAChC,CAED,QAAAijB,GAEEniB,KAAKshB,aAAethB,KAAKohB,QAAQgB,WACjCpiB,KAAKwhB,eAAiBxhB,KAAKohB,QAAQiB,iBAEnCriB,KAAKmhB,eAAemB,QACpBtiB,KAAKmhB,eAAejX,KAAKlK,KAAK8Y,WAAa,IAAO9Y,KAAK8Y,WAAa,MAEpE9Y,KAAKuiB,+BACN,CAED,6BAAAA,GAEEviB,KAAKuhB,oBAAsB,EAE3B,IAAK,IAAI9X,EAAI,EAAGA,EAAIzJ,KAAKmhB,eAAetb,OAAQ4D,IAE9CzJ,KAAKuhB,qBAAuBvhB,KAAKmhB,eAAe1X,GAGlDzJ,KAAKuhB,oBAAsBvhB,KAAKuhB,oBAAsBvhB,KAAKmhB,eAAetb,MAC3E,GCzFH,MAAM2c,GAEJ,WAAA7jB,CAAY2J,GAEVtI,KAAKsI,KAAOA,CACb,CAED,KAAAiI,GAEC,CAED,YAAAkS,GAEC,CAED,QAAAxkB,GAEC,CAED,WAAAykB,GAEC,CAED,OAAAxkB,GAEC,CAED,aAAAC,GAEC,CAED,MAAAC,GAEC,CAED,YAAAC,GAEC,CAED,uBAAAskB,CAAwBC,EAAkBC,EAAqBC,GAE9D,CAED,sBAAAC,CAAuBH,EAAkBC,EAAqBC,GAE7D,EC1CH,MAAME,GAEJ,WAAArkB,CAAYskB,GAEVjjB,KAAKkjB,WAAa,IAAIV,GACtBxiB,KAAKmjB,cAAgB,IAAIX,GAEzBxiB,KAAK2f,mBAAqB,GAC1B3f,KAAKojB,mBAAqB,GAE1BpjB,KAAKijB,iBAAmBA,EAExBjjB,KAAKqjB,eAAgB,CACtB,CAED,WAAAC,CAAY5P,EAAOiF,GAAO,GAEpB3Y,KAAKqjB,eAEPrjB,KAAKujB,oBAGPvjB,KAAKkjB,WAAaljB,KAAKmjB,cACvBnjB,KAAKmjB,cAAgBzP,EAErB1T,KAAKkjB,WAAWR,cAChB1iB,KAAKmjB,cAAcV,eAEnBziB,KAAK8iB,iBAAmB9iB,KAAKijB,iBAAiBxd,IAAIzF,KAAKkjB,WAAW5a,KAAMtI,KAAKmjB,cAAc7a,KAAMtI,KAAKojB,oBACtGpjB,KAAK8iB,iBAAiBzb,OAEtBrH,KAAKqjB,eAAgB,EAEjB1K,IAEF3Y,KAAK8iB,iBAAiBnK,OACtB3Y,KAAK5B,SAER,CAED,MAAAA,GAEM4B,KAAKqjB,eAEPrjB,KAAKwjB,uBAEDxjB,KAAK8iB,iBAAiBzS,gBAExBrQ,KAAKqjB,eAAgB,EAErBrjB,KAAKwjB,uBAELxjB,KAAKujB,oBAELvjB,KAAKmjB,cAAcllB,aAKrB+B,KAAKmjB,cAAc/kB,QAEtB,CAED,aAAAD,GAEE6B,KAAKmjB,cAAchlB,eACpB,CAED,YAAAE,GAEE2B,KAAKmjB,cAAc9kB,cACpB,CAED,SAAAolB,CAAU/P,GAER1T,KAAKmjB,cAAgBzP,CACtB,CAED,sBAAAwN,CAAuBvB,GAErBnX,OAAOkb,OAAO1jB,KAAK2f,mBAAoBA,GACvCnX,OAAOkb,OAAO1jB,KAAKojB,mBAAoBzD,EACxC,CAED,oBAAA6D,GAEExjB,KAAK8iB,iBAAiB1kB,OAAOulB,GAAK7K,YAClC9Y,KAAKkjB,WAAWH,uBAAuB/iB,KAAKojB,mBAAoBpjB,KAAK8iB,iBAAiBlZ,eAAgB5J,KAAK8iB,kBAC3G9iB,KAAKmjB,cAAcR,wBAAwB3iB,KAAKojB,mBAAoBpjB,KAAK8iB,iBAAiBlZ,eAAgB5J,KAAK8iB,iBAChH,CAED,iBAAAS,GAOEvjB,KAAKkjB,WAAWhlB,SACjB,EC7BE,MAAC0lB,GAAqB,IAtE3B,MAEE,WAAAjlB,GAEEqB,KAAKijB,iBAAmB,IAAIrC,GAC5B5gB,KAAK6jB,mBAAqB,IAAIb,GAA2BhjB,KAAKijB,iBAC/D,CAED,oBAAIH,GAEF,OAAO9iB,KAAK6jB,mBAAmBf,gBAChC,CAED,sBAAIM,GAEF,OAAOpjB,KAAK6jB,mBAAmBT,kBAChC,CAED,iBAAAU,GAEE,OAAO9jB,KAAK6jB,mBAAmBV,aAChC,CAED,WAAAG,CAAY5P,EAAOiF,GAAO,GAExB3Y,KAAK6jB,mBAAmBP,YAAY5P,EAAOiF,EAC5C,CAED,aAAAxa,GAEE6B,KAAK6jB,mBAAmB1lB,eACzB,CAED,MAAAC,GAEE4B,KAAK6jB,mBAAmBzlB,QACzB,CAED,YAAAC,GAEE2B,KAAK6jB,mBAAmBxlB,cACzB,CAED,eAAA2iB,CAAgBH,GAEd7gB,KAAKijB,iBAAiBjC,gBAAgBH,EACvC,CAED,eAAAI,CAAgBJ,GAEd7gB,KAAKijB,iBAAiBhC,gBAAgBJ,EACvC,CAED,SAAA4C,CAAU/P,GAER1T,KAAK6jB,mBAAmBJ,UAAU/P,EACnC,CAED,sBAAAwN,CAAuBvB,GAErB3f,KAAKijB,iBAAiB/B,uBAAuBvB,GAC7C3f,KAAK6jB,mBAAmB3C,uBAAuBvB,EAChD,CAED,wBAAAoE,CAAyBlJ,GAEvB7a,KAAKijB,iBAAiBc,yBAAyBlJ,EAChD,GCyEE,MAACmJ,GAAe,IA7IrB,MAEE,WAAArlB,GAEEqB,KAAKikB,MAAQ,GAEbjkB,KAAKkkB,qBAAuB,EAC7B,CAED,MAAA9lB,GAEE4B,KAAKmkB,uBACN,CAED,UAAAC,CAAWC,EAAWC,GAAa,EAAM3L,GAAO,GAE9C,MAAM7B,EAAI9W,KAAKyF,IAAI4e,GAEfC,IAEFtkB,KAAKukB,qBAAqBzN,EAAE9T,KAC5BhD,KAAKwkB,uBAAuB1N,EAAE9T,MAGhCyhB,GAAkBnB,YAAYxM,EAAG6B,EAClC,CAED,WAAA+L,CAAY/Z,EAAY2Z,GAAa,EAAO3L,GAAO,GAEjD,MAAMgM,EAAY3kB,KAAKyF,IAAIkF,GACrBia,EAAkB5kB,KAAKyF,IAAI,cAEjCmf,EAAgBC,cAAcF,GAC9B3kB,KAAKokB,WAAWQ,EAAgBtc,KAAMgc,EAAY3L,EACnD,CAED,aAAAmM,CAAcC,GAEZ/kB,KAAKikB,MAAM/Z,KAAK6a,EACjB,CAED,QAAAC,CAASX,GAEP,IAAK,IAAI5a,EAAI,EAAGA,EAAIzJ,KAAKikB,MAAMpe,OAAQ4D,IAErC,GAAIzJ,KAAKikB,MAAMxa,GAAGnB,OAAS+b,EAEzB,OAAO,EAGX,OAAO,CACR,CAED,QAAAY,CAASZ,GAEP,MAAMU,EAAO/kB,KAAKyF,IAAI4e,GAEtBI,GAAkBhB,UAAUsB,EAC7B,CAED,wBAAAG,CAAyBC,GAEvBnlB,KAAKkkB,qBAAuBiB,CAC7B,CAED,gBAAAC,GAEE,OAAOX,GAAkBX,mBAC1B,CAED,gBAAAuB,CAAiBhB,GAEf1gB,QAAQC,KAAK,2CACb5D,KAAKyF,IAAI4e,EACV,CAED,GAAA5e,CAAI4e,GAEF,IAAK,IAAI5a,EAAI,EAAGA,EAAIzJ,KAAKikB,MAAMpe,OAAQ4D,IAErC,GAAIzJ,KAAKikB,MAAMxa,GAAGnB,OAAS+b,EAEzB,OAAOrkB,KAAKikB,MAAMxa,GAGtB9F,QAAQM,MAAM,wCAAyCogB,EAExD,CAED,UAAAiB,CAAWtiB,GAET,IAAK,IAAIyG,EAAI,EAAGA,EAAIzJ,KAAKikB,MAAMpe,OAAQ4D,IAErC,GAAIzJ,KAAKikB,MAAMxa,GAAGzG,MAAQA,EAExB,OAAOhD,KAAKikB,MAAMxa,GAGtB9F,QAAQM,MAAM,+CAAgDjB,EAE/D,CAED,oBAAAuhB,CAAqBvhB,GAEnB4I,OAAO2Z,QAAQC,UAAU,GAAI,GAAIxiB,EAClC,CAED,sBAAAwhB,CAAuBlc,GAErB,MAAMmd,EAAQzlB,KAAK0lB,aAAapd,GAEhCqd,SAASF,MAAQA,EAAQ,GAAGA,OAAWzlB,KAAKkkB,uBAAyBlkB,KAAKkkB,oBAC3E,CAED,qBAAAC,GAEE,IAAK,IAAI1a,EAAI,EAAGA,EAAIzJ,KAAKikB,MAAMpe,OAAQ4D,IAErCzJ,KAAKikB,MAAMxa,GAAGmc,YAAYnB,GAAkBrB,mBAE/C,CAED,YAAAsC,CAAaG,GAEX,IAAIC,EAAaD,EAAOE,cAActY,QAAQ,IAAK,IAGnD,OAFAqY,EAAa9lB,KAAKgmB,sBAAsBF,GAEjCA,CACR,CAED,qBAAAE,CAAsBH,GAEpB,OAAOA,EAAOpY,QACZ,gBACCwY,GAAUA,EACRxY,QAAQ,IAAK,KACbA,QAAQ,IAAK,MAEnB,GCxIH,MAAMyY,WAAwB1D,GAE5B,WAAA7jB,EAAY2J,KAAEA,EAAItF,IAAEA,EAAGmjB,UAAEA,EAASzF,gBAAEA,IAElC3hB,MAAMuJ,GAENtI,KAAKmmB,UAAYA,EACjBnmB,KAAKgD,IAAMA,EAEXhD,KAAKomB,gBAAkB,EAOvB,MAAMvF,EAAc,CAClB,CACEtL,GAAIjN,EACJpC,KARJwa,EAAkBA,GAAmB,CACnCnC,iBAAkB,GAClBC,SAAU,MAUZ6H,GAAYvB,cAAc9kB,MAC1BykB,GAAkBzD,gBAAgBH,EACnC,CAED,YAAA4B,GAEEziB,KAAKmmB,UAAUG,UAAUnP,IAAI,gBAC7BnX,KAAKmmB,UAAUG,UAAUC,OAAO,eAChCvmB,KAAKmmB,UAAUG,UAAUC,OAAO,SACjC,CAED,QAAAtoB,GAEE+B,KAAKmmB,UAAUG,UAAUC,OAAO,gBAChCvmB,KAAKmmB,UAAUG,UAAUC,OAAO,eAChCvmB,KAAKmmB,UAAUG,UAAUC,OAAO,SACjC,CAED,WAAA7D,GAEE1iB,KAAKmmB,UAAUG,UAAUnP,IAAI,eAC7BnX,KAAKmmB,UAAUG,UAAUC,OAAO,gBAChCvmB,KAAKmmB,UAAUG,UAAUC,OAAO,SACjC,CAED,OAAAroB,GAEE8B,KAAKmmB,UAAUG,UAAUnP,IAAI,UAC7BnX,KAAKmmB,UAAUG,UAAUC,OAAO,gBAChCvmB,KAAKmmB,UAAUG,UAAUC,OAAO,cACjC,CAED,WAAAX,CAAYxC,GAEV,MAAMoD,EAAUpD,EAAmB,GAAGpjB,KAAKsI,iBAEvCtI,KAAKomB,gBAAkBI,GAAWxmB,KAAKomB,gBAAkBI,KAE3DxmB,KAAKomB,gBAAkBI,EAEvBxmB,KAAKmmB,UAAUM,MAAMD,QAAUxmB,KAAKomB,gBAEvC,ECvCE,MAACM,GAAiB,IA9BvB,MAEE,IAAA7f,GAEE7G,KAAK2mB,cAAWzmB,EAEhBF,KAAK4mB,gBAAa1mB,CACnB,CAED,WAAIwa,CAAQmM,GAEV7mB,KAAK2mB,SAAWE,CACjB,CAED,WAAInM,GAEF,OAAO1a,KAAK2mB,QACb,CAED,aAAIG,CAAUD,GAEZ7mB,KAAK4mB,WAAaC,CACnB,CAED,aAAIC,GAEF,OAAO9mB,KAAK4mB,UACb,GCrBH,MAAMG,GAEJ,WAAApoB,CAAYqoB,GAEVhnB,KAAKgnB,kBAAoBA,EACzBhnB,KAAKinB,aAAe,KAEpBjnB,KAAKknB,OAASvB,SAASwB,cAAc,UACrCnnB,KAAKonB,IAAMpnB,KAAKknB,OAAOrf,WAAW,KACnC,CAED,aAAAwf,CAAcC,EAAY,SAExB,GAAyB,MAArBtnB,KAAKinB,cAAwBjnB,KAAKgnB,kBACtC,CACE,MAAM3hB,EAAOsgB,SAAS4B,qBAAqB,QAAQ,GAC7CC,EAAQ7B,SAASwB,cAAc,OAC/BM,EAAY9B,SAAS+B,eAAe,eAC1CF,EAAMG,YAAYF,GAClBD,EAAMI,aAAa,QAAS,QAAQN,oCACpCjiB,EAAKsiB,YAAYH,GACjBxnB,KAAKinB,aAAeO,EAAMK,aAC1BxiB,EAAKyiB,YAAYN,EAClB,CACD,OAAOxnB,KAAKinB,YACb,CAED,aAAAc,CAAcC,EAAMC,EAAO,cAEzB,MAAMhlB,EAAO,IAAI7D,EAIjB,OAHAY,KAAKonB,IAAIa,KAAOA,EAChBhlB,EAAK+S,EAAItB,KAAKwT,KAAKloB,KAAKonB,IAAIe,YAAYH,GAAMI,OAC9CnlB,EAAKgT,EAAIvB,KAAKwT,KAAKloB,KAAKqnB,cAAcY,IAC/BhlB,CACR,CAED,WAAAolB,CAAYL,EAAMM,EAAa,CAAE,GAM/B,OAJAA,EAAWL,KAAOK,EAAWL,MAAQ,aACrCK,EAAWC,WAAaD,EAAWC,YAAc,UAEjDvoB,KAAKwoB,OAAOR,EAAMM,EAAYtoB,KAAKknB,OAAQlnB,KAAKonB,KACzCpnB,KAAKknB,MACb,CAED,eAAAuB,CAAgBT,EAAMM,GAEpB,MAAMpB,EAASlnB,KAAKqoB,YAAYL,EAAMM,GAChCI,EAAiB,IAAIC,EAAczB,EAAQ0B,EAC/CC,EACAA,EACAC,EACAA,GAIF,OAHAJ,EAAeK,iBAAkB,EACjCL,EAAe5Z,aAAc,EAEtB4Z,CACR,CAED,MAAAF,CAAOR,EAAMM,GACX,CAEF,SAAAU,CAAU5B,EAAKpR,EAAGC,EAAGmS,EAAOa,EAAQC,EAAQC,EAAMC,GAUhD,QARsB,IAAXA,IAETA,GAAS,QAEW,IAAXF,IAETA,EAAS,GAEW,iBAAXA,EAETA,EAAS,CAAEG,GAAIH,EAAQI,GAAIJ,EAAQK,GAAIL,EAAQM,GAAIN,OAGrD,CACE,MAAMO,EAAgB,CAAEJ,GAAI,EAAGC,GAAI,EAAGC,GAAI,EAAGC,GAAI,GACjD,IAAK,MAAME,KAAQD,EAEjBP,EAAOQ,GAAQR,EAAOQ,IAASD,EAAcC,EAEhD,CACDtC,EAAIuC,YACJvC,EAAIwC,OAAO5T,EAAIkT,EAAOG,GAAIpT,GAC1BmR,EAAIyC,OAAO7T,EAAIoS,EAAQc,EAAOI,GAAIrT,GAClCmR,EAAI0C,iBAAiB9T,EAAIoS,EAAOnS,EAAGD,EAAIoS,EAAOnS,EAAIiT,EAAOI,IACzDlC,EAAIyC,OAAO7T,EAAIoS,EAAOnS,EAAIgT,EAASC,EAAOK,IAC1CnC,EAAI0C,iBAAiB9T,EAAIoS,EAAOnS,EAAIgT,EAAQjT,EAAIoS,EAAQc,EAAOK,GAAItT,EAAIgT,GACvE7B,EAAIyC,OAAO7T,EAAIkT,EAAOM,GAAIvT,EAAIgT,GAC9B7B,EAAI0C,iBAAiB9T,EAAGC,EAAIgT,EAAQjT,EAAGC,EAAIgT,EAASC,EAAOM,IAC3DpC,EAAIyC,OAAO7T,EAAGC,EAAIiT,EAAOG,IACzBjC,EAAI0C,iBAAiB9T,EAAGC,EAAGD,EAAIkT,EAAOG,GAAIpT,GAC1CmR,EAAI2C,YACAZ,GAEF/B,EAAI+B,OAEFC,GAEFhC,EAAIgC,QAEP,ECxGH,MAAMY,WAAyBjD,GAE7B,WAAApoB,GAEEI,QACAiB,KAAKiqB,YAAc,IAAI7qB,EAAQ,EAAG,EACnC,CAED,MAAAopB,CAAOR,EAAMM,EAAYpB,EAAQE,GAE/BA,EAAIa,KAAOK,EAAWL,KAEtB,MAAMiC,EAAYlqB,KAAK+nB,cAAcC,EAAMM,EAAWL,MAGtDf,EAAOkB,MAAQ1T,KAAKwT,KAAKgC,EAAUlU,EAAyB,EAArBhW,KAAKiqB,YAAYjU,GACxDkR,EAAO+B,OAASvU,KAAKwT,KAAKgC,EAAUjU,EAAyB,EAArBjW,KAAKiqB,YAAYhU,GACzDmR,EAAI+C,UAAU,EAAG,EAAGjD,EAAOkB,MAAOlB,EAAO+B,QAGzC7B,EAAIgD,YAAc,EAClBhD,EAAIiD,UAAY/B,EAAWC,YAAc,UACzCnB,EAAIkD,SAAS,EAAG,EAAGpD,EAAOkB,MAAOlB,EAAO+B,QACxC7B,EAAIgD,YAAc,EAElBhD,EAAIgD,YAAc,EAElBhD,EAAIa,KAAOK,EAAWL,KACtBb,EAAIiD,UAAY/B,EAAWC,YAAc,UACzCnB,EAAImD,aAAe,SAEnBnD,EAAIoD,UAAYlC,EAAWkC,WAAa,SAClB,WAAlBpD,EAAIoD,UAENpD,EAAIqD,SAASzC,EAAMd,EAAOkB,MAAQ,EAAGlB,EAAO+B,OAAS,GAIrD7B,EAAIqD,SAASzC,EAAM,EAAGd,EAAO+B,OAAS,EAEzC,ECnCE,MAACyB,GAAe,IAVrB,MAEE,IAAA7jB,GAEE7G,KAAK2qB,eAAiB,EACtB3qB,KAAK4qB,kCAAmC,EACxC5qB,KAAK6qB,uBAAwB,CAC9B,GCCH,MAAMC,WAAmBC,EAEvB,WAAApsB,CAAYqsB,EAAQ,GAElBjsB,QAEA,MAAMksB,EAAc,GACpBA,EAAY/gB,KAAK,IAAIghB,EAAQ,EAAG,EAAG,IACnCD,EAAY/gB,KAAK,IAAIghB,EAAQ,EAAG,EAAG,MAEnC,MAAMC,EAAgB,IAAIC,EAAkB,CAAEC,MAAO,QAAUzrB,UAAWC,IACpEyrB,GAAgB,IAAIC,GAAiBC,cAAcP,GACnDQ,EAAiB,IAAIC,EAAKJ,EAAeH,GAC/CM,EAAeE,YAAc,IAE7B,MAAMC,EAAe,GACrBA,EAAa1hB,KAAK,IAAIghB,EAAQ,EAAG,EAAG,IACpCU,EAAa1hB,KAAK,IAAIghB,EAAQ,EAAG,IAAM,IAEvC,MAAMW,EAAiB,IAAIT,EAAkB,CAAEC,MAAO,QAAUzrB,UAAWC,IACrEisB,GAAiB,IAAIP,GAAiBC,cAAcI,GACpDG,EAAkB,IAAIL,EAAKI,EAAgBD,GACjDE,EAAgBJ,YAAc,IAE9B,MAAMK,EAAa,GACnBA,EAAW9hB,KAAK,IAAIghB,EAAQ,EAAG,EAAG,IAClCc,EAAW9hB,KAAK,IAAIghB,EAAQ,IAAM,EAAG,IAErC,MAAMe,EAAe,IAAIb,EAAkB,CAAEC,MAAO,SAAUzrB,UAAWC,IACnEqsB,GAAe,IAAIX,GAAiBC,cAAcQ,GAClDG,EAAgB,IAAIT,EAAKQ,EAAcD,GAC7CE,EAAcR,YAAc,IAE5B3rB,KAAK2rB,YAAc,IAEnB3rB,KAAKmX,IAAIsU,GACTzrB,KAAKmX,IAAI4U,GACT/rB,KAAKmX,IAAIgV,GAETnsB,KAAKgrB,MAAM7oB,IAAI6oB,EAAOA,EAAOA,EAC9B,CAED,MAAA5sB,GAEC,CAED,OAAAyE,GAEC,ECbE,MAACupB,GAAgB,IAzCtB,MAEE,IAAAvlB,GAEE7G,KAAK2mB,SAAW,IAAIzU,EACpBlS,KAAK2mB,SAASre,KAAO,eACtB,CAED,SAAA+jB,CAAU/jB,GAGT,CAED,WAAIoS,GAEF,OAAO1a,KAAK2mB,QACb,CAED,WAAIjM,CAAQjK,GAEVzQ,KAAK2mB,SAAWlW,CACjB,CAED,OAAA5N,GAWE,IATA7C,KAAK0a,QAAQ/H,UAASC,IAEhBA,EAAMC,WAERD,EAAMC,SAAShQ,UACf+P,EAAMS,SAASxQ,UAChB,IAGI7C,KAAK0a,QAAQ4R,SAASzmB,OAAS,GAEpC7F,KAAK0a,QAAQ6L,OAAOvmB,KAAK0a,QAAQ4R,SAAS,GAE7C,GCnCH,MAAMC,WAAaC,EAEjB,WAAA7tB,CAAYsE,EAAMwpB,EAAUpB,GAE1BpoB,EAAWA,GAAQ,IAAIioB,EAAQ,EAAG,EAAG,GACrCuB,EAAWA,GAAY,IAAIvB,EAAQ,EAAG,EAAG,GACzCG,EAAWA,GAAS,SAGpBtsB,MAFiB,IAAI2tB,EAAYzpB,EAAK+S,EAAG/S,EAAKgT,EAAGhT,EAAK+T,EAAGyV,EAASzW,EAAGyW,EAASxW,EAAGwW,EAASzV,GACzE,IAAI2V,EAAkB,CAAEtB,MAAOA,IAEjD,ECbH,MAAMuB,WAAeJ,EAEnB,WAAA7tB,CAAYuqB,EAAQmC,GAElBA,EAAQA,GAAS,UAIjBtsB,MAFiB,IAAI8tB,EADrB3D,EAASA,GAAU,EACyB,GAAI,IAC/B,IAAIyD,EAAkB,CAAEtB,MAAOA,IAEjD,ECPH,MAAMyB,WAAcN,EAElB,WAAA7tB,CAAY0sB,EAAOxlB,EAAQknB,GAEzB1B,EAAQA,GAAS,UAGjB,MACM2B,GAHNnnB,EAASA,GAAU,GAEC,GAEdonB,EAAe,IAAIC,EAAiB,IAAM,IAAMF,EAAiB,IACvEC,EAAaE,UAAU,EAAGH,EAAkB,EAAG,GAE/C,MAAMI,EAAgB,IAAIC,EAAa,GALnB,GAKqC,IACzDD,EAAcD,UAAU,EAAGH,EAAkBM,GAAiB,GAE9D,MAAMC,EAAkBC,GAAoBC,gBAAgB,CAACR,EAAcG,IAC3EG,EAAgBG,QAAQ,MAGxB3uB,MAAMwuB,EADW,IAAIZ,EAAkB,CAAEtB,MAAOA,KAG5C0B,GAEF/sB,KAAK2tB,WAAWC,mBAAmB,IAAI1C,EAAQ,EAAG,EAAG,GAAI6B,GAG3D/sB,KAAK6tB,KAAOd,CACb,CAED,OAAIA,CAAIA,GAEN/sB,KAAK2tB,WAAWC,mBAAmB,IAAI1C,EAAQ,EAAG,EAAG,GAAI6B,GACzD/sB,KAAK6tB,KAAOd,CACb,CAED,OAAIA,GAEF,OAAO/sB,KAAK6tB,IACb,CAED,UAAIhoB,CAAO3G,GAETc,KAAKgrB,MAAMhU,EAAI9X,CAChB,CAED,UAAI2G,GAEF,OAAO7F,KAAKgrB,MAAMhU,CACnB,ECqBE,MAAC8W,GAAU,IAvEhB,MAEE,IAAAjnB,GAEE7G,KAAKooB,MAAQ,EACbpoB,KAAKipB,OAAS,EAEdjpB,KAAKgT,SAAW,IAAI5T,EAEpBY,KAAK+tB,aAAe,EACpB/tB,KAAKguB,cAAgB,EACrBhuB,KAAKiuB,aAAe,IAAI7uB,EAAQY,KAAKooB,MAAOpoB,KAAKipB,QAEjDjpB,KAAKkuB,IAAM,EACXluB,KAAKmuB,WAAa,IAAI/uB,EAAQ,EAAIY,KAAKooB,MAAO,EAAIpoB,KAAKipB,OACxD,CAED,eAAAmF,CAAgBpY,EAAGC,GAEjBjW,KAAKgT,SAAS7Q,IAAI6T,EAAGC,EACtB,CAED,MAAA7X,GAEE4B,KAAKquB,cAAe,CACrB,CAED,WAAAC,CAAYlG,EAAOa,GAEjBjpB,KAAKooB,MAAQA,EACbpoB,KAAKipB,OAASA,EAEdjpB,KAAKmuB,WAAa,IAAI/uB,EAAQ,EAAIY,KAAKooB,MAAO,EAAIpoB,KAAKipB,QAEvDjpB,KAAKiuB,aAAajY,EAAIoS,EACtBpoB,KAAKiuB,aAAahY,EAAIgT,EAEtBjpB,KAAK+tB,aAAe3F,EAAQpoB,KAAKkuB,IACjCluB,KAAKguB,cAAgB/E,EAASjpB,KAAKkuB,IAEnCluB,KAAKquB,cAAe,CACrB,CAED,sBAAAE,CAAuBC,GAIrB,OAFAA,EAAQpX,eAAe,EAAIpX,KAAKkuB,KAEzBM,CACR,CAED,mBAAAC,CAAoBvvB,GAElB,OAAOA,GAAS,EAAIc,KAAKkuB,IAC1B,CAED,cAAAQ,GAEE,OAAO1uB,KAAKmuB,UACb,CAED,gBAAIQ,GAEF,OAAO3uB,KAAKooB,MAAQpoB,KAAKipB,MAC1B,CAED,YAAI2F,GAEF,OAAO5uB,KAAKooB,MAAQpoB,KAAKipB,MAC1B,GCpEH,MAAM4F,WAAmCxuB,GAEvC,WAAA1B,CAAYqX,EAAGC,EAAGc,EAAG+X,GA4BnB/vB,MA1Ba,ogBAiBA,8JASK,CAChBE,SAAU,CAAEC,WAAOgB,GACnB6uB,qBAAsB,CAAE7vB,MAAO,IAAIE,GACnC4vB,YAAa,CAAE9vB,MAAO,IAAIE,GAC1B6vB,aAAc,CAAE/vB,MAAO,IAAIE,IAE9B,CAED,YAAA8vB,CAAalZ,EAAGC,GAEdjW,KAAKhB,SAAS+vB,qBAAqB7vB,MAAMiD,IAAI6T,EAAGC,EACjD,CAED,WAAAkZ,CAAY/uB,EAAK2W,EAAG+X,GAElB9uB,KAAKhB,SAASC,SAASC,MAAQkB,EAC/BJ,KAAKhB,SAASiwB,aAAa/vB,MAAMiD,IAAI/B,EAAImO,MAAM6Z,MAAOhoB,EAAImO,MAAM0a,aAEtD/oB,IAAN6W,IAEF/W,KAAKhB,SAASiwB,aAAa/vB,MAAM8W,EAAIe,QAE7B7W,IAAN4uB,IAEF9uB,KAAKhB,SAASiwB,aAAa/vB,MAAM+W,EAAI6Y,EAExC,CAED,eAAAM,CAAgBrY,EAAG+X,GAEjB9uB,KAAKhB,SAASgwB,YAAY9vB,MAAMiD,IAAI4U,EAAG+X,EACxC,EC5DH,MAAMO,WAA0BC,EAE9B,WAAA3wB,CAAY4wB,EAAKC,EAAQC,EAAMC,GAE7B3wB,MAAMwwB,EAAKC,EAAQC,EAAMC,GAEzB1vB,KAAK2vB,YAAc,IAAIhvB,EAAM,WAC7BX,KAAK4vB,YAAc,CACpB,CAED,IAAAC,CAAKhJ,GAKH,OAHA9nB,MAAM8wB,KAAKhJ,GACX7mB,KAAK2vB,YAAYE,KAAKhJ,EAAO8I,aAC7B3vB,KAAK4vB,YAAc/I,EAAO+I,YACnB5vB,IACR,ECoPE,MAAC8vB,GAAQ,IA1Od,MAEE,IAAAjpB,GAEE7G,KAAK+vB,YAAc,IAAI7E,EAAQ,EAAG,EAAG,GACrClrB,KAAKgwB,aAAe,IAAI9E,EAAQ,EAAG,EAAG,GACtClrB,KAAKiwB,qBAAkB/vB,EAEvBF,KAAKkwB,uBAAyB,GAE9BlwB,KAAKonB,SAAMlnB,EACXF,KAAKyQ,MAAQ,IAAIyB,EACjBlS,KAAK6mB,OAAS,IAAIwI,GAAkB,GAAIc,GAAQxB,aAAc,GAAK,KACnE3uB,KAAK6mB,OAAO+I,YAAc,CAC3B,CAED,UAAAQ,CAAWC,EAAQtD,EAAK1B,EAAQ,UAE9B,MAAMiF,EAAQ,IAAIxD,GAAMzB,EAAO0B,EAAIlnB,SAAUknB,EAAI5nB,QAAQorB,aAGzD,OAFAD,EAAMtd,SAAS6c,KAAKQ,GACpBrwB,KAAKyQ,MAAM0G,IAAImZ,GACRA,CACR,CAED,SAAAE,GAEE,MAAMC,EAAO,IAAI3F,GAEjB,OADA9qB,KAAKyQ,MAAM0G,IAAIsZ,GACRA,CACR,CAED,YAAAC,CAAaC,GAEX3wB,KAAK4wB,SAAWD,CACjB,CAED,cAAAE,CAAeC,EAAa1I,EAAOa,EAAQoC,GAEzCjD,EAASA,GAAS,IAClBa,EAASA,GAAU,IACnBjpB,KAAKonB,IAAIiD,UAAagB,GAAS,qBAC/BrrB,KAAKonB,IAAIkD,SAASwG,EAAY9a,EAAIoS,EAAQ,EACvCpoB,KAAKonB,IAAIF,OAAO+B,OAAS6H,EAAY7a,EAAKgT,EAAS,EAAGb,EAAOa,EACjE,CAED,KAAA8H,GAEM/wB,KAAKonB,KAEPpnB,KAAKonB,IAAI+C,UAAU,EAAG,EAAGnqB,KAAKonB,IAAIF,OAAOkB,MAAOpoB,KAAKonB,IAAIF,OAAO+B,OAEnE,CAED,YAAA+H,CAAa1b,EAAMC,EAAI8V,GAErBrrB,KAAKonB,IAAI6J,YAAe5F,GAAS,qBACjCrrB,KAAKonB,IAAIuC,YACT3pB,KAAKonB,IAAIwC,OAAOtU,EAAKU,EAAGV,EAAKW,GAC7BjW,KAAKonB,IAAIyC,OAAOtU,EAAGS,EAAGT,EAAGU,GACzBjW,KAAKonB,IAAI2C,YACT/pB,KAAKonB,IAAIgC,QACV,CAED,SAAA8H,CAAUlc,EAAQqW,EAAQ,UAExB,MAAMhY,EAAW,IAAI+X,EAAkB,CACrCC,MAAOA,IAGHxY,GAAW,IAAI0Y,GAAiBC,cAAcxW,GAE9Cmc,EAAO,IAAIzF,EAAK7Y,EAAUQ,GAGhC,OAFA8d,EAAKC,eAAgB,EACrBpxB,KAAKyQ,MAAM0G,IAAIga,GACRA,CACR,CAED,SAAAE,CAAUC,EAAKruB,EAAMooB,GAEnBpoB,EAAOA,GAAQ,EACfooB,EAAQA,GAAS,SACjBiG,EAAMA,GAAO,IAAIpG,EAEjB,MAAMqG,EAAO,IAAIhF,GAAK,IAAIrB,EAAQjoB,EAAMA,EAAMA,QAAO/C,EAAWmrB,GAGhE,OAFAkG,EAAKve,SAAS6c,KAAKyB,GACnBtxB,KAAKyQ,MAAM0G,IAAIoa,GACRA,CACR,CAED,kBAAAC,CAAmBlc,EAAMC,EAAI0T,EAAS,EAAGoC,EAAQ,UAAWoG,EAAQ,IAElE,MAAMxuB,EAAOqS,EAAKoc,WAAWnc,GACvBgc,EAAO,IAAIhF,GAAK,IAAIrB,EAAQuG,EAAOxI,EAAQhmB,QAAO/C,EAAWmrB,GAE7DnU,EAAS3B,EAAGpQ,QAAQwsB,IAAIrc,GAAM8B,eAAe,IAC7Cwa,EAAc1a,EAAO/R,QAAQorB,YAanC,OAZArZ,EAAOC,IAAI7B,GAEXic,EAAKve,SAAS6c,KAAK3Y,GAOnBqa,EAAK5D,WAAWC,mBAAmB,IAAI1C,EAAQ,EAAG,GAAI,GAAI0G,GAE1D5xB,KAAKyQ,MAAM0G,IAAIoa,GACRA,CACR,CAED,UAAAM,CAAWzJ,EAAOa,EAAQoC,GAExB,MAAMxY,EAAW,IAAIif,EAAc1J,EAAOa,GACpC5V,EAAW,IAAI3U,EAAe,CAClCM,SAAU,CACR0B,OAAQ,CAAExB,MAAO,IAAI6yB,EAAQ,EAAG,EAAG,EAAG,MAExCzyB,aAAc0yB,GACdzyB,eAAgB0yB,GAChBC,aAAa,EACb1yB,YAAY,IAGRyV,EAAQ,IAAIuX,EAAK3Z,EAAUQ,GAGjC,OAFA4B,EAAM0W,aAAe,IACrB3rB,KAAKyQ,MAAM0G,IAAIlC,GACRA,CACR,CAED,eAAAkd,CAAgBb,EAAKruB,EAAMooB,GAEzBpoB,EAAOA,GAAQ,EACfooB,EAAQA,GAAS,SAEjB,MAAM+G,GAAM,IAAIC,GAAOC,qBAAqB,IAAIpH,EAAW,IAAIA,EAAQjoB,EAAMA,EAAMA,IAC7EsvB,EAAS,IAAIC,EAAWJ,EAAK/G,GAEnC,OADAkH,EAAOvf,SAAS6c,KAAKyB,GAAO,IAAIpG,GACzBqH,CACR,CAED,WAAAE,CAAYnB,EAAKruB,EAAMooB,GAErBpoB,EAAOA,GAAQ,EACfooB,EAAQA,GAAS,SACjBiG,EAAMA,GAAO,IAAIpG,EAEjB,MAAMwH,EAAS,IAAI9F,GAAO3pB,EAAMooB,GAGhC,OAFAqH,EAAO1f,SAAS6c,KAAKyB,GACrBtxB,KAAKyQ,MAAM0G,IAAIub,GACRA,CACR,CAED,gBAAAC,CAAiBC,EAAcC,GAAO,EAAOxH,EAAQ,UAEnD,MAAMyH,EAAU,IAAIC,EAAiBH,EAAcC,GACnDC,EAAQE,mBACR,MAAMhe,EAAS8d,EAAQG,gBAAgB,KAGvC,OAFoBjzB,KAAKkxB,UAAUlc,EAAQ,MAG5C,CAED,kBAAAke,CAAmBR,EAAQrH,GAEzBA,EAAQA,GAAS,SACjB,MAAMxY,EAAW,IAAIga,EAAe6F,EAAOxJ,OAAQ,GAAI,IACjD7V,EAAW,IAAIsZ,EAAkB,CAAEtB,MAAOA,IAC1C8H,EAAc,IAAI3G,EAAK3Z,EAAUQ,GAGvC,OAFA8f,EAAYngB,SAAS6c,KAAK6C,EAAOxb,QACjCkc,GAAa1Y,QAAQvD,IAAIgc,GAClBA,CACR,CAED,gBAAAE,CAAiBX,GAEf,MAAM7f,EAAW,IAAIga,EAAe6F,EAAOxJ,OAAQ,GAAI,IACjD7V,EAAW,IAAI3U,EAAe,CAClCM,SAAU,CACR0B,OAAQ,CAAExB,MAAO,IAAI6yB,EAAQ,EAAG,EAAG,EAAG,MAExCzyB,aAAc0yB,GACdzyB,eAAgB0yB,GAChBC,aAAa,IAGToB,EAAU,IAAI9G,EAAK3Z,EAAUQ,GACnCigB,EAAQtgB,SAAS6c,KAAK6C,EAAOxb,QAC7Bkc,GAAa1Y,QAAQvD,IAAImc,EAC1B,CAED,iBAAAC,CAAkBC,GAEhB,MAAMjB,EAAS,IAAIC,EAAWgB,EAAI,UAClCJ,GAAa1Y,QAAQvD,IAAIob,EAC1B,CAED,UAAAkB,CAAWC,EAAOC,GAEhB,MAAMC,EAAS,IAAI1I,EAAQ,EAAG,EAAG,GAC7ByI,IAEFC,EAAO3d,EAAI0d,EAAQC,QAAU,GAG/B,IAAK,IAAInqB,EAAI,EAAGA,EAAIiqB,EAAM7tB,OAAS,EAAG4D,IAEpCzJ,KAAKkxB,UAAUwC,EAAMjqB,GAAGtE,QAAQgS,IAAIyc,GAASF,EAAMjqB,EAAI,GAAGtE,QAAQgS,IAAIyc,GAEzE,CAED,YAAAC,CAAazzB,EAAK2W,EAAG+X,GAEnB,MAAMgF,EAAO,IAAItH,EAAK,IAAIsF,EAAc,EAAG,GAAI,IAAIjD,IAKnD,OAJA7uB,KAAKkwB,uBAAuBhmB,KAAK4pB,GACjC9zB,KAAKyQ,MAAM0G,IAAI2c,GAEfA,EAAKzgB,SAAS8b,YAAY/uB,EAAK2W,EAAG+X,GAC3BgF,CACR,CAED,MAAArxB,CAAOsxB,GAEL,IAAK,IAAItqB,EAAI,EAAGA,EAAIzJ,KAAKkwB,uBAAuBrqB,OAAQ4D,IAEtDzJ,KAAKkwB,uBAAuBzmB,GAAG4J,SAAS+b,gBAAgBe,GAAQ/H,MAAO+H,GAAQlH,QAE7EjpB,KAAKyQ,MAAM6b,SAASzmB,OAAS,GAE/BkuB,EAAStxB,OAAOzC,KAAKyQ,MAAOujB,GAActZ,QAE7C,GC7PH,MAAMuZ,GAEJ,WAAAt1B,CAAYgE,GAEV3C,KAAK2C,SAAWA,EAChB3C,KAAKk0B,YAAc,IAAIhiB,EACvBlS,KAAKm0B,eAAiB,IAAI11B,GAC1BuB,KAAKo0B,WAAa,IAAI5H,EACpB,IAAIsF,EAAc,EAAG,GAAI9xB,KAAKm0B,gBAChCn0B,KAAKk0B,YAAY/c,IAAInX,KAAKo0B,YAC1Bp0B,KAAKq0B,aAAe,IAAIC,GAAoB,EAAG,EAAG,GAAI,GAAI,IAAO,IAClE,CAED,IAAAC,CAAK9lB,EAAK+lB,GAERx0B,KAAKo0B,WAAW/gB,SAAWrT,KAAKm0B,eAEhC,MAAMM,GAA0C,IAA5BhmB,EAAIimB,oBAA+BjmB,EAAIJ,QAAUI,EAC/DkmB,GAA0C,IAA5BlmB,EAAIimB,oBAA+BjmB,EAAI2Z,MAAU3Z,EAAIF,MAAM6Z,MACzEwM,GAA0C,IAA5BnmB,EAAIimB,oBAA+BjmB,EAAIwa,OAAUxa,EAAIF,MAAM0a,OAE/EjpB,KAAKo0B,WAAW/gB,SAASrU,SAASC,SAASC,MAAQu1B,EACnDz0B,KAAKo0B,WAAW/gB,SAASrU,SAASG,YAAYD,MAAMiD,IAAIwyB,EAAWC,GAE/DJ,EAEFx0B,KAAKo0B,WAAW/gB,SAASrU,SAASK,kBAAkBH,MAAMiD,IAAIqyB,EAAIpM,MAAOoM,EAAIvL,QAI7EjpB,KAAK2C,SAASkyB,QAAQ70B,KAAKo0B,WAAW/gB,SAASrU,SAASK,kBAAkBH,OAG5Ec,KAAK80B,SAASN,EACf,CAED,aAAAO,CAAcC,EAAKR,GAEjBx0B,KAAKo0B,WAAW/gB,SAAW2hB,EAI3Bh1B,KAAK80B,SAASN,EACf,CAED,kBAAAS,CAAmBxmB,EAAK+lB,EAAKQ,GAE3B,MAAMP,GAA0C,IAA5BhmB,EAAIimB,oBAA+BjmB,EAAIJ,QAAUI,EAC/DkmB,GAA0C,IAA5BlmB,EAAIimB,oBAA+BjmB,EAAI2Z,MAAU3Z,EAAIF,MAAM6Z,MACzEwM,GAA0C,IAA5BnmB,EAAIimB,oBAA+BjmB,EAAIwa,OAAUxa,EAAIF,MAAM0a,OAE/EjpB,KAAKo0B,WAAW/gB,SAAW2hB,EAC3Bh1B,KAAKo0B,WAAW/gB,SAASrU,SAASC,SAASC,MAAQu1B,EACnDz0B,KAAKo0B,WAAW/gB,SAASrU,SAASG,YAAYD,MAAMiD,IAAIwyB,EAAWC,GAE/DJ,EAEFx0B,KAAKo0B,WAAW/gB,SAASrU,SAASK,kBAAkBH,MAAMiD,IAAIqyB,EAAIpM,MAAOoM,EAAIvL,QAI7EjpB,KAAK2C,SAASkyB,QAAQ70B,KAAKo0B,WAAW/gB,SAASrU,SAASK,kBAAkBH,OAG5Ec,KAAK80B,SAASN,EACf,CAED,wBAAAU,CAAyBC,EAAQH,GAE/Bh1B,KAAKo0B,WAAW/gB,SAAW2hB,EAE3Bh1B,KAAK80B,SAASK,EACf,CAED,OAAAtyB,GAEE7C,KAAKo0B,WAAWvhB,SAAShQ,UACzB7C,KAAKo0B,WAAW/gB,SAASxQ,SAC1B,CAED,QAAAiyB,CAASnE,GAEPA,OAAYzwB,IAAPywB,EAAmB,KAAOA,EAE/B,MAAMyE,EAAap1B,KAAK2C,SAAS0yB,kBAEjCr1B,KAAK2C,SAAS2yB,qBAAuBp1B,IAAPywB,EAAmB,KAAOA,GACxD3wB,KAAK2C,SAASF,OAAOzC,KAAKk0B,YAAal0B,KAAKq0B,cAE5Cr0B,KAAK2C,SAAS2yB,gBAAgBF,EAC/B,EC3FH,MAAMG,WAAiC92B,GAErC,WAAAE,CAAY62B,EAAaC,GAEvB12B,2aACAiB,KAAKhB,SAAS02B,aAAe,CAAEx2B,MAAO,IAAI6yB,EAAQyD,EAAaC,EAAazf,EAAGyf,EAAaxf,EAAGwf,EAAaze,GAC7G,ECPH,MAAM2e,WAA4Bj3B,EAEhC,WAAAC,GAEEI,MAAM,CACJC,SAAU,CACR42B,UAAW,CAAE12B,MAAO,IAEtBI,6QACAC,8dAEH,CAED,aAAIs2B,CAAU32B,GAEZc,KAAKhB,SAAS42B,UAAU12B,MAAQA,CACjC,CAED,aAAI22B,GAEF,OAAO71B,KAAKhB,SAAS42B,UAAU12B,KAChC,ECjBH,MAAM42B,GAEJ,WAAAn3B,GAEEqB,KAAK2wB,GAAK,IAAIoF,EAAkB5F,GAAQ/H,MAAO+H,GAAQlH,QAEvDjpB,KAAKg2B,uBAAyB,IAAIT,GAAyB,EAAG,IAAIrK,EAAQ,EAAG,EAAG,IAChFlrB,KAAKi2B,sBAAwB,IAAIN,EAClC,CAED,MAAAlzB,CAAOsxB,GAEL/zB,KAAKk2B,2BAELnC,EAAShD,MAAM/wB,KAAK2wB,QAAIzwB,GAAW,GAAM,GAEzC6zB,EAASmB,yBAAyBl1B,KAAK2wB,GAAI3wB,KAAKg2B,wBAEhDh2B,KAAKi2B,sBAAsBJ,UAAY7B,GAActZ,QAAQgV,IAE7DqE,EAAStxB,YAAOvC,OAAWA,EAAWF,KAAK2wB,GAAI3wB,KAAKi2B,sBACrD,CAED,wBAAAC,GAEMl2B,KAAK2wB,GAAGvI,QAAU+H,GAAQ/H,OAASpoB,KAAK2wB,GAAG1H,SAAWkH,GAAQlH,QAEhEjpB,KAAK2wB,GAAGwF,QAAQhG,GAAQ/H,MAAO+H,GAAQlH,OAE1C,CAED,iBAAImN,GAEF,OAAOp2B,KAAK2wB,EACb,EC8XE,MAACoD,GAAW,IAnZjB,MAEE,IAAAltB,EAAKqgB,OAAEA,EAAMmP,gBAAEA,EAAeC,mBAAEA,EAAkBC,mBAAEA,EAAkBrI,IAAEA,IAEtEluB,KAAKw2B,eAAYt2B,EACjBF,KAAKy2B,aAAUv2B,EACfF,KAAKknB,YAAShnB,EACdF,KAAK02B,eAAYx2B,EACjBF,KAAK22B,yBAAsBz2B,EAC3BF,KAAK42B,4BAA6B,EAClC52B,KAAK62B,gCAA6B32B,EAElCF,KAAK82B,WAAY,EACjB92B,KAAK+2B,oBAAiB72B,EACtBF,KAAKs2B,wBAAqBp2B,EAE1BF,KAAKq2B,gBAAkB,CACrBW,cAAc,EACdC,YAAY,GAGdj3B,KAAKs2B,mBAAqB,CACxBY,OAAO,EACPC,WAAW,EACX1F,OAAO,EACP2F,gBAAgB,EAChBC,8BAA8B,EAC9BC,gBAAiB,mBACjBC,oBAAoB,EACpBC,uBAAuB,EACvBC,SAAS,GAGXz3B,KAAKu2B,mBAAqB,CACxBmB,wBAAwB,GAG1BlvB,OAAOkb,OAAO1jB,KAAKq2B,gBAAiBA,GACpC7tB,OAAOkb,OAAO1jB,KAAKs2B,mBAAoBA,GAEvC9tB,OAAOkb,OAAO1jB,KAAKu2B,mBAAoBv2B,KAAKs2B,oBAC5C9tB,OAAOkb,OAAO1jB,KAAKu2B,mBAAoBA,GAEnCv2B,KAAKq2B,gBAAgBW,aAEvBh3B,KAAK+2B,eAAiB7P,EAAOrf,WAAW,SAAU7H,KAAKs2B,qBACjCpP,EAAOrf,WAAW,QAAS7H,KAAKs2B,qBAChCpP,EAAOrf,WAAW,qBAAsB7H,KAAKs2B,oBAInEt2B,KAAK+2B,eAAiB7P,EAAOrf,WAAW,QAAS7H,KAAKs2B,qBAChCpP,EAAOrf,WAAW,qBAAsB7H,KAAKs2B,oBAGrEt2B,KAAK82B,UAAqD,2BAAzC92B,KAAK+2B,eAAep4B,YAAY2J,KAIjDtI,KAAKu2B,mBAAmBrP,OAASA,EACjClnB,KAAKu2B,mBAAmB7zB,QAAU1C,KAAK+2B,eAEvC/2B,KAAKw2B,UAAY,IAAImB,EAAc33B,KAAKu2B,oBAEpCv2B,KAAKq2B,gBAAgBY,WAEvBj3B,KAAKw2B,UAAUtqB,GAAG0rB,SAAU,EAI5B53B,KAAKw2B,UAAUqB,WAAY,EAG7B1H,GAAQjC,IAAMA,EACdluB,KAAKw2B,UAAUsB,cAAc,GAExB93B,KAAK82B,WAER92B,KAAKw2B,UAAUuB,WAAWtyB,IAAI,0BAGhCzF,KAAKy2B,QAAU,IAAIxC,GAAQj0B,KAAKw2B,WAEhCx2B,KAAKknB,OAASlnB,KAAKw2B,UAAUwB,WAE7Bh4B,KAAK02B,UAAY,IAAIl0B,GAErBxC,KAAK22B,oBAAsB32B,KAAK02B,UAEhCuB,GAAatN,eAAiB3qB,KAAKw2B,UAAU9L,aAAawN,mBAC1DD,GAAarN,iCAAmC5qB,KAAKw2B,UAAU9L,aAAayN,kBAAoB,EAChGF,GAAapN,sBAAwB7qB,KAAKo4B,sCAE1Cp4B,KAAK42B,4BAA6B,EAElC52B,KAAK62B,2BAA6B,IAAIf,EACvC,CAED,eAAIuC,GAEF,OAAOr4B,KAAKw2B,UAAUwB,UACvB,CAED,oBAAIM,GAEF,OAAOt4B,KAAK62B,2BAA2BT,aACxC,CAED,SAAA3S,CAAU8U,GAIRv4B,KAAK22B,oBAAoBz4B,QAAQ8B,KAAMA,KAAKw2B,WAC5Cx2B,KAAK22B,oBAAsB4B,EAC3Bv4B,KAAK22B,oBAAoB14B,SAAS+B,KAAMA,KAAKw2B,UAC9C,CAED,MAAAp4B,GAEM4B,KAAK42B,4BAEP52B,KAAK62B,2BAA2Bp0B,OAAOzC,MAGzCA,KAAKw4B,0BAEDxE,GAActZ,SAEhB1a,KAAK22B,oBAAoBl0B,SAG3B0tB,GAAQ/xB,QACT,CAED,uBAAAo6B,GAEMxE,GAActZ,UAEhBsZ,GAActZ,QAAQ8U,OAASW,GAAQxB,aACvCqF,GAActZ,QAAQ+d,yBACtBzE,GAActZ,QAAQge,eACtB1E,GAActZ,QAAQie,mBAAkB,GAE3C,CAED,MAAAl2B,CAAOgO,EAAOoW,EAAQ8J,EAAIiI,GAExB54B,KAAK64B,0BAA0BpoB,EAAOmoB,GAEtC54B,KAAKw2B,UAAUlB,qBAAuBp1B,IAAPywB,EAAmB,KAAOA,GACzD3wB,KAAKw2B,UAAU/zB,OAAOgO,GAAU2iB,GAAa1Y,QAC3CmM,GAAUmN,GAActZ,SAE1B1a,KAAK64B,0BAA0BpoB,OAAOvQ,EACvC,CAED,OAAA44B,CAAQroB,EAAOoW,EAAQ8J,EAAIiI,GAEzB54B,KAAK64B,0BAA0BpoB,EAAOmoB,GAEtC54B,KAAKw2B,UAAUlB,qBAAuBp1B,IAAPywB,EAAmB,KAAOA,GACzD3wB,KAAKw2B,UAAUsC,QAAQroB,GAAU2iB,GAAa1Y,QAC5CmM,GAAUmN,GAActZ,SAE1B1a,KAAK64B,0BAA0BpoB,OAAOvQ,EACvC,CAED,mBAAM64B,CAActoB,EAAOoW,EAAQ8J,EAAIiI,EAAcI,GAEnDh5B,KAAK64B,0BAA0BpoB,EAAOmoB,GAEtC54B,KAAKw2B,UAAUlB,qBAAuBp1B,IAAPywB,EAAmB,KAAOA,GACzD,MAAMsI,EAAUj5B,KAAKw2B,UAAU0C,aAAazoB,GAAU2iB,GAAa1Y,QACjEmM,GAAUmN,GAActZ,QAASse,GAInC,OAFAh5B,KAAK64B,0BAA0BpoB,OAAOvQ,GAE/B+4B,CACR,CAED,YAAAE,CAAa1oB,GAEPA,EAAMlS,eAERkS,EAAMlS,gBAGJkS,EAAMhO,OAERgO,EAAMhO,SAINzC,KAAKyC,OAAOgO,OAAOvQ,GAGjBuQ,EAAMnS,gBAERmS,EAAMnS,gBAET,CAED,yBAAAu6B,CAA0BpoB,EAAOukB,GAE/BA,OAAc90B,IAAR80B,EAAoB,KAAOA,EAC7BvkB,EAEFA,EAAM2oB,iBAAmBpE,EAIzB5B,GAAa1Y,QAAQ0e,iBAAmBpE,CAE3C,CAED,WAAAqE,CAAY1I,EAAInqB,GAEdxG,KAAKw2B,UAAU8C,uBAAuB3I,EAAI,EAAG,EAAGA,EAAGvI,MAAOuI,EAAG1H,OAAQziB,EACtE,CAED,KAAAuqB,CAAMJ,EAAI9J,EAAQ2O,EAAa+D,GAE7Bv5B,KAAKw2B,UAAUlB,qBAAuBp1B,IAAPywB,EAAmB,KAAOA,GAErD9J,GAEF7mB,KAAKw2B,UAAUgD,cAAc3S,EAAO8I,YAAa9I,EAAO+I,aAG1D5vB,KAAKw2B,UAAUzF,QAAQlK,IACnB2O,IACA+D,EACL,CAED,SAAAE,CAAUC,EAASxL,GAEjB,IAAK,MAAMyL,KAASD,EAElBvJ,GAAQjC,IAAMA,EAGdiC,GAAQ/B,gBAAgBuL,EAAMC,YAAY5jB,EAAG2jB,EAAMC,YAAY3jB,GAC/Dka,GAAQ7B,YAAYqL,EAAMC,YAAYxR,MAAOuR,EAAMC,YAAY3Q,QAE/DjpB,KAAKknB,OAAOkB,MAAS+H,GAAQpC,aAC7B/tB,KAAKknB,OAAO+B,OAASkH,GAAQnC,cAE7BhuB,KAAKw2B,UAAUqD,YAAY,EAAG,EAAG1J,GAAQpC,aAAcoC,GAAQnC,eAE/DhuB,KAAKw4B,yBAER,CAED,aAAAzD,CAAcC,EAAKR,GAEjBx0B,KAAKy2B,QAAQ1B,cAAcC,EAAKR,EACjC,CAED,IAAAD,CAAKuF,EAAQ3E,EAAQH,GAEfA,EAEFh1B,KAAKy2B,QAAQxB,mBAAmB6E,EAAQ3E,EAAQH,GAIhDh1B,KAAKy2B,QAAQlC,KAAKuF,EAAQ3E,EAE7B,CAED,wBAAAD,CAAyBC,EAAQH,GAE/Bh1B,KAAKy2B,QAAQvB,yBAAyBC,EAAQH,EAC/C,CAED,eAAA+E,CAAgBC,EAAe5R,EAAQ+H,GAAQ/H,MAAOa,EAASkH,GAAQlH,QAIrE,MAAMgR,EAAY9J,GAAQ/H,MACpB8R,EAAa/J,GAAQlH,OAErBkR,EAAY/R,EACZgS,EAAanR,EAEboR,EAAa,KACbC,EAAc,KAEdC,EAAcC,SAAS9lB,KAAKwT,KAAKiS,EAAYE,IAC7CI,EAAcD,SAAS9lB,KAAKwT,KAAKkS,EAAaE,IAEpDnK,GAAQ7B,YAAY+L,EAAYC,GAChC,MAAMI,EAAU16B,KAAKw2B,UAAUmE,gBAC/B36B,KAAKw2B,UAAUsB,cAAc,GAE7B93B,KAAKw2B,UAAUL,QAAQkE,EAAYC,GAAa,GAEhD,MACMM,EADYjV,SAASwB,cAAc,UAChBtf,WAAW,MAEpC+yB,EAAO1T,OAAOkB,MAAS+R,EACvBS,EAAO1T,OAAO+B,OAASmR,EAEvBpG,GAActZ,QAAQ8U,OAASW,GAAQxB,aACvCqF,GAActZ,QAAQge,eACtB1E,GAActZ,QAAQie,mBAAkB,GAExC,IAAK,IAAI3iB,EAAI,EAAGA,EAAIukB,EAAavkB,IAE/B,IAAK,IAAIC,EAAI,EAAGA,EAAIwkB,EAAaxkB,IAE/B+d,GAActZ,QAAQmgB,cAAcV,EAAuBC,EACzDjK,GAAQ/H,MAAQpS,EAAWma,GAAQlH,OAAShT,EAC5Cka,GAAQ/H,MAAkB+H,GAAQlH,QACpCjpB,KAAK22B,oBAAoBl0B,SAEzBm4B,EAAOE,UAAU96B,KAAKw2B,UAAUwB,WAAY7H,GAAQ/H,MAAQpS,EAAGma,GAAQlH,OAAShT,GAMpF2kB,EAAO1T,OAAO6T,OAAOf,EAAe,qBAEpChG,GAActZ,QAAQsgB,kBAEtB7K,GAAQ7B,YAAY2L,EAAWC,GAC/Bl6B,KAAKw2B,UAAUsB,cAAc4C,GAC7B16B,KAAKw2B,UAAUL,QAAQ8D,EAAWC,GAAY,GAE9ClG,GAActZ,QAAQ8U,OAASW,GAAQxB,aACvCqF,GAActZ,QAAQge,eACtB1E,GAActZ,QAAQie,mBAAkB,EACzC,CAED,mBAAAsC,CAAoBjzB,GAElB,MAAMkzB,EAAOvV,SAASwB,cAAc,KACpC+T,EAAKC,SAAW,eAEhBD,EAAKE,KAAO/wB,IAAIgxB,gBAAgBrzB,GAChCkzB,EAAKI,QAELJ,EAAKK,QAAU,WAEbC,uBAAsB,WAEpBnxB,IAAIoxB,gBAAgBP,EAAKE,KACjC,IACMF,EAAKQ,gBAAgB,OAC3B,CACG,CAED,OAAA74B,GAEE7C,KAAKw2B,UAAU3zB,UACf7C,KAAK22B,oBAAoB9zB,UACzB7C,KAAKy2B,QAAQ5zB,SACd,CAED,mCAAAu1B,GAEE,MAAMzH,EAAK,IAAIoF,EAAkB,EAAG,EAAG,CACrC4F,UAAW7S,EACX8S,UAAW9S,EACX+S,OAAQC,EACRntB,WAAYotB,EACZzyB,KAAM0yB,EACNC,eAAe,EACfC,aAAa,IAgBTlH,EAAM,IAAIt2B,EAAe,CAC7BY,aAdW,qGAeXC,eATW,oGAUXC,YAAY,EACZC,SAAUC,EACVC,WAAW,EACXC,UAAWC,IAGbG,KAAK+0B,cAAcC,EAAKrE,GAExB,MAAMwL,EAAS,IAAIjpB,aAAa,GAGhC,OAFAlT,KAAKw2B,UAAU8C,uBAAuB3I,EAAI,EAAG,EAAG,EAAG,EAAGwL,GAE/CznB,KAAKqB,IAAIomB,EAAO,GAAK,SAAW,IACxC,GCtaH,MAAMC,GAEJ,WAAAz9B,GAEC,CAED,gBAAI09B,GAEF,OAAO,CACR,CAED,QAAAp+B,CAAS8mB,GAGR,CAED,MAAA3mB,CAAO2mB,GAEN,CAED,OAAA7mB,CAAQ6mB,GAGP,ECnBH,MAAMuX,GAEJ,WAAA39B,GAEEqB,KAAKyV,EAAI,EACTzV,KAAKu8B,kBAAoB,CAC1B,CAED,gBAAIF,GAEF,OAAO,CACR,CAED,QAAAp+B,CAASu+B,GAER,CAED,MAAAp+B,CAAOo+B,GAELx8B,KAAKyV,GAAKkO,GAAK7K,WAAa0jB,EAAS/jB,SAErCzY,KAAKu8B,kBAAoBC,EAASviB,gBAAgBja,KAAKyV,GACvDzV,KAAKu8B,kBAAoB3oB,GAAMsC,MAAMlW,KAAKu8B,kBAAmB,EAAG,GAEhEC,EAASC,mBAAmB7oB,GAAM+B,KAAK6mB,EAASlnB,KAAMknB,EAASjnB,GAAIvV,KAAKu8B,oBAEpEv8B,KAAKu8B,mBAAqB,QAE5BC,EAASC,mBAAmBD,EAASjnB,IAErCinB,EAASE,kBAAkB,IAAIN,IAC/BI,EAASG,kBAAkBH,GAE9B,CAED,OAAAt+B,CAAQ6mB,GAGP,ECtCH,MAAM6X,GAEJ,WAAAj+B,EAAYyhB,QACVA,EAAOyc,aACPA,EAAYvnB,KACZA,EAAO,EAACC,GACRA,EAAK,EAACkD,SACNA,EAAW,EAACqkB,aACZA,EAAe,GAAEC,aACjBA,EAAgB,GAAE9iB,gBAClBA,EAAkBgB,GAAgBW,kBAAiB+gB,kBACnDA,EAAoB,SAIpB38B,KAAKogB,QAAUA,EACfpgB,KAAK68B,aAAeA,EACpB78B,KAAKsV,KAAOA,EACZtV,KAAKuV,GAAKA,EACVvV,KAAK88B,aAAeA,EACpB98B,KAAK+8B,aAAeA,EACpB/8B,KAAKyY,SAAWA,EAChBzY,KAAKia,gBAAkBA,EACvBja,KAAK28B,kBAAoBA,EAEzB38B,KAAKmjB,cAAgB,IAAIiZ,EAC1B,CAED,OAAAY,GAEEh9B,KAAK08B,kBAAkB,IAAIJ,GAC5B,CAED,IAAA/0B,GAEEvH,KAAK08B,kBAAkB,IAAIN,GAC5B,CAED,kBAAAK,CAAmBv9B,GAEjBc,KAAKogB,QAAQqG,MAAMzmB,KAAK68B,cAAgB,GAAG78B,KAAK88B,eAAe59B,IAAQc,KAAK+8B,cAC7E,CAED,MAAA3+B,GAEE4B,KAAKmjB,cAAc/kB,OAAO4B,KAC3B,CAED,gBAAIq8B,GAEF,OAAOr8B,KAAKmjB,cAAckZ,YAC3B,CAED,iBAAAK,CAAkBhpB,GAEhB1T,KAAKmjB,cAAcjlB,QAAQ8B,MAC3BA,KAAKmjB,cAAgBzP,EACrB1T,KAAKmjB,cAAcllB,SAAS+B,KAC7B,ECLE,MAACi9B,GAAK,IAxDX,MAEE,IAAAp2B,GAEE7G,KAAKk9B,kBAAoB,CACvBC,QAAS,UACTC,IAAK,MACLC,MAAO,QACPC,IAAK,MACLC,QAAS,WAGXv9B,KAAKw9B,YAAe3xB,UAAUC,UAAUsB,MAAM,+GAC9CpN,KAAKy9B,WAAa5xB,UAAUC,UAAUsB,MAAM,QAAUvB,UAAU6xB,gBAAkB7xB,UAAU6xB,eAAiB,GAC7G19B,KAAK29B,SAAW9xB,UAAUC,UAAUsB,MAAM,uBAAyBpN,KAAKy9B,QAExEz9B,KAAK49B,WAAa59B,KAAK69B,WAAa79B,KAAKk9B,kBAAkBC,QAC3Dn9B,KAAK89B,SAAW99B,KAAK69B,WAAa79B,KAAKk9B,kBAAkBG,MACzDr9B,KAAK+9B,OAAS/9B,KAAK69B,WAAa79B,KAAKk9B,kBAAkBI,IACvDt9B,KAAKg+B,WAAah+B,KAAK69B,WAAa79B,KAAKk9B,kBAAkBK,OAC5D,CAED,MAAAM,GAEE,MAAM/xB,EAAYF,OAAOC,UAAUC,UAC7BmyB,EAAWryB,OAAOC,UAAUoyB,SAIlC,IAAIhB,EAAK,KAuBT,OArB0C,IALnB,CAAC,YAAa,WAAY,SAAU,UAKxC7wB,QAAQ6xB,GAEzBhB,EAAKj9B,KAAKk9B,kBAAkBI,KAEe,IAPxB,CAAC,SAAU,OAAQ,QAOlBlxB,QAAQ6xB,GAE5BhB,EAAKj9B,KAAKk9B,kBAAkBE,KAEmB,IAZxB,CAAC,QAAS,QAAS,UAAW,SAY7BhxB,QAAQ6xB,GAEhChB,EAAKj9B,KAAKk9B,kBAAkBK,QAErB,UAAUlwB,KAAKvB,GAEtBmxB,EAAKj9B,KAAKk9B,kBAAkBC,SAEpBF,GAAM,QAAQ5vB,KAAK4wB,KAE3BhB,EAAKj9B,KAAKk9B,kBAAkBG,OAGvBJ,CACR,GCtCH,MAAMiB,GAA2B,IAdjC,MAEE,IAAAr3B,GAEE7G,KAAKm+B,qBAAkBj+B,EACvBF,KAAKo+B,gBAAkB,IAAIlT,CAC5B,CAED,mBAAAmT,CAAoBxrB,GAElB7S,KAAKm+B,gBAAkBtrB,CACxB,GCXH,MAAMyrB,GAEJ,WAAA3/B,CAAYkU,EAAU0rB,GAEpBv+B,KAAK6S,SAAWA,EAEhB7S,KAAKqT,cAAWnT,EAChBF,KAAKhB,SAAW,GAChBgB,KAAKu+B,YAAcA,EAEnBv+B,KAAKw+B,cAAgB,GAErBx+B,KAAKy+B,kBAAev+B,EAEpBF,KAAK0+B,YAAc,IAAIt/B,EACvBY,KAAK2+B,aAAe,IAAIv/B,EAExBY,KAAK4+B,oBAAsB,EAE3B5+B,KAAK6+B,wBAA0B,CAChC,CAED,IAAAh4B,CAAK43B,EAAc5/B,EAAaD,GAE9BoB,KAAKqT,SAAW,IAAI3U,EAAe,CACjCM,SAAUgB,KAAKhB,SACfM,aAAcT,EACdU,eAAgBX,IAElBoB,KAAKy+B,aAAeA,CACrB,CAED,kBAAAK,CAAmBx2B,EAAMpC,GAEvBlG,KAAKhB,SAASsJ,GAAQ,CAAEpJ,MAAOgH,GAC/BlG,KAAKqT,SAASvE,aAAc,CAC7B,CAED,kBAAAiwB,CAAmBz2B,EAAMpC,GAEvBlG,KAAKhB,SAASsJ,GAAMpJ,MAAQgH,CAC7B,CAED,qBAAA84B,CAAsBC,EAAcC,GAElC,MAAMC,EAAgBn/B,KAAKo/B,qBAAqBp/B,KAAKu+B,aAC/Cc,EAAgBr/B,KAAKo/B,qBAAqBp/B,KAAKu+B,aAC/Ce,EAAgBt/B,KAAKo/B,qBAAqB,GAE1CG,EAAev/B,KAAKw/B,mBAAmBP,EAAcE,EAASE,EAASC,GAEzEJ,GAEFl/B,KAAKy/B,yBAAyBF,EAAcL,EAE/C,CAED,qBAAAQ,CAAsBT,EAAcU,GAElC,MAAMR,EAAgBn/B,KAAK4/B,sBAAsB5/B,KAAKu+B,aAChDc,EAAgBr/B,KAAK4/B,sBAAsB5/B,KAAKu+B,aAChDe,EAAgBt/B,KAAK4/B,sBAAsB,GAE3CL,EAAev/B,KAAKw/B,mBAAmBP,EAAcE,EAASE,EAASC,GAEzEK,GAEF3/B,KAAK6/B,0BAA0BN,EAAcI,EAEhD,CAED,2BAAAG,CAA4Bb,EAAcU,GAExC,MAAMR,EAAgBn/B,KAAK+/B,4BAA4B//B,KAAKu+B,aACtDc,EAAgBr/B,KAAK+/B,4BAA4B//B,KAAKu+B,aACtDe,EAAgBt/B,KAAK+/B,4BAA4B,GAEjDR,EAAev/B,KAAKw/B,mBAAmBP,EAAcE,EAASE,EAASC,GAEzEK,GAEF3/B,KAAK6/B,0BAA0BN,EAAcI,EAEhD,CAED,qBAAAK,CAAsBC,EAAahB,EAAciB,EAASC,EAAOC,EAAOC,GAEtE,MAAMC,EAAYtgC,KAAKugC,mBAAmBN,GACpCO,EAAexgC,KAAKygC,mBAAmBxB,GAE7Cj/B,KAAK0gC,gBAAgBF,EAAa/xB,IAAK6xB,EAAWJ,EAASC,EAAOC,EAAOC,GACzErgC,KAAK0gC,gBAAgBF,EAAaG,UAAW,EAAGT,EAASC,EAAOC,EAAOC,GAEvEG,EAAaI,oBAAsBN,EAEnCE,EAAaK,aACd,CAED,qBAAAC,CAAsBb,EAAahB,EAAc8B,EAASZ,EAAOC,EAAOC,EAAOW,GAE7E,MAAMV,EAAYtgC,KAAKugC,mBAAmBN,GACpCO,EAAexgC,KAAKygC,mBAAmBxB,GAE7Cj/B,KAAKihC,iBAAiBT,EAAa/xB,IAAK6xB,EAAWS,EAASZ,EAAOC,EAAOC,EAAOW,GACjFhhC,KAAKihC,iBAAiBT,EAAaG,UAAW,EAAGI,EAASZ,EAAOC,EAAOC,EAAOW,GAC/ER,EAAaI,oBAAsBN,EAEnCE,EAAaK,aACd,CAED,mBAAAK,CAAoBv+B,EAAUw+B,GAE5B,IAAK,IAAI13B,EAAI,EAAGA,EAAIzJ,KAAKw+B,cAAc34B,OAAQ4D,IAEzC03B,EAAgB,GAAKnhC,KAAKw+B,cAAc/0B,GAAGo3B,YAAc,IAEjB,IAAtC7gC,KAAKw+B,cAAc/0B,GAAGo3B,aAExB7gC,KAAKohC,8BAA8Bz+B,EAAU3C,KAAKw+B,cAAc/0B,IAE9DzJ,KAAKw+B,cAAc/0B,GAAGo3B,YAAc,GAEtC7gC,KAAKqhC,2BAA2B1+B,EAAU3C,KAAKw+B,cAAc/0B,IAG/DzJ,KAAKw+B,cAAc/0B,GAAGo3B,YAAc,EAEpCM,IAGL,CAED,uBAAAG,GAEEthC,KAAK4+B,oBAAsB,EAC3B,IAAK,IAAIn1B,EAAI,EAAGA,EAAIzJ,KAAKw+B,cAAc34B,OAAQ4D,IAEzCzJ,KAAKw+B,cAAc/0B,GAAGo3B,YAAc,GAEtC7gC,KAAK4+B,sBAGT,OAAO5+B,KAAK4+B,mBACb,CAED,0BAAAyC,CAA2B1+B,EAAU4+B,GAGnCA,EAAa/M,IAAI1lB,aAAc,EAC/BnM,EAAS6+B,qBACPxhC,KAAK0+B,YACL6C,EAAa9yB,IACb8yB,EAAa/M,IAEhB,CAED,6BAAA4M,CAA8Bz+B,EAAU4+B,GAGtC,MAAMnxB,EAAQmxB,EAAaX,qBACZ,IAAXxwB,IAKJpQ,KAAK2+B,aAAa1oB,EAAIvB,KAAK8C,MAAMpH,EAAQpQ,KAAKu+B,aAC9Cv+B,KAAK2+B,aAAa3oB,EAAI5F,EAAQpQ,KAAKu+B,YAAcv+B,KAAK2+B,aAAa1oB,EACnEtT,EAAS6+B,qBACPxhC,KAAK2+B,aACL4C,EAAaZ,UACbY,EAAa/M,KAEhB,CAED,QAAAiN,GAEE,OAAO,IAAIjV,EAAKxsB,KAAK6S,SAAU7S,KAAKqT,SACrC,CAED,eAAAqtB,CAAgBF,EAAcpwB,EAAO8vB,EAASC,EAAOC,EAAOC,GAEtDF,IAEFK,EAAajyB,MAAMrI,KAAa,EAARkK,EAAY,GAAK8vB,EAAQlqB,GAE/CoqB,IAEFI,EAAajyB,MAAMrI,KAAa,EAARkK,EAAY,GAAK8vB,EAAQjqB,GAE/CoqB,IAEFG,EAAajyB,MAAMrI,KAAa,EAARkK,EAAY,GAAK8vB,EAAQlpB,EAEpD,CAED,gBAAAiqB,CAAiBT,EAAcpwB,EAAO2wB,EAASZ,EAAOC,EAAOC,EAAOW,GAE9Db,IAEFK,EAAajyB,MAAMrI,KAAa,EAARkK,EAAY,GAAK2wB,EAAQ/qB,GAE/CoqB,IAEFI,EAAajyB,MAAMrI,KAAa,EAARkK,EAAY,GAAK2wB,EAAQ9qB,GAE/CoqB,IAEFG,EAAajyB,MAAMrI,KAAa,EAARkK,EAAY,GAAK2wB,EAAQ/pB,GAE/CgqB,IAEFR,EAAajyB,MAAMrI,KAAa,EAARkK,EAAY,GAAK2wB,EAAQhqB,EAEpD,CAED,wBAAA0oB,CAAyBe,EAAckB,GAErC,IAAK,IAAIj4B,EAAI,EAAGA,EAAIzJ,KAAKu+B,YAAcv+B,KAAKu+B,YAAa90B,IAEvDzJ,KAAK0gC,gBAAgBF,EAAa/xB,IAAKhF,EAAGi4B,GAAI,GAAM,GAAM,GAC1DlB,EAAaK,aAEhB,CAED,yBAAAhB,CAA0BW,EAAcmB,GAEtC,IAAK,IAAIl4B,EAAI,EAAGA,EAAIzJ,KAAKu+B,YAAcv+B,KAAKu+B,YAAa90B,IAEvDzJ,KAAKihC,iBAAiBT,EAAa/xB,IAAKhF,EAAGk4B,GAAI,GAAM,GAAM,GAAM,GACjEnB,EAAaK,aAEhB,CAED,oBAAAzB,CAAqBhX,GAEnB,MAAMliB,EAAO,IAAIsN,WAAW,EAAI4U,EAAQA,GACxC,OAAO,IAAIwZ,EAAY17B,EAAMkiB,EAAOA,EAAO0T,EAC5C,CAED,qBAAA8D,CAAsBxX,GAEpB,MAAMliB,EAAO,IAAIsN,WAAW,EAAI4U,EAAQA,GACxC,OAAO,IAAIwZ,EAAY17B,EAAMkiB,EAAOA,EAAO0T,EAC5C,CAED,2BAAAiE,CAA4B3X,GAE1B,MAAMliB,EAAO,IAAIgN,aAAa,EAAIkV,EAAQA,GAC1C,OAAO,IAAIwZ,EAAY17B,EAAMkiB,EAAOA,EAAO0T,EAAYE,EACxD,CAED,kBAAAyE,CAAmBxB,GAEjB,IAAK,IAAIx1B,EAAI,EAAGA,EAAIzJ,KAAKw+B,cAAc34B,OAAQ4D,IAE7C,GAAIzJ,KAAKw+B,cAAc/0B,GAAGnB,OAAS22B,EAEjC,OAAOj/B,KAAKw+B,cAAc/0B,GAG9B9F,QAAQM,MAAM,gBAAkBg7B,EAAe,kBAEhD,CAED,kBAAAsB,CAAmBj4B,GAEjB,IAAK,IAAImB,EAAI,EAAGA,EAAIzJ,KAAKy+B,aAAa54B,OAAQ4D,IAE5C,GAAIzJ,KAAKy+B,aAAah1B,KAAOnB,EAE3B,OAAOmB,EAGX9F,QAAQM,MAAM,YAAcqE,EAAO,kCAEpC,CAED,kBAAAk3B,CAAmBP,EAAcxK,EAAaoN,EAAaC,GAczD,OAZAD,EAAY/yB,aAAc,EAE1B9O,KAAKw+B,cAAct0B,KAAK,CACtB5B,KAAM22B,EACNxwB,IAAKgmB,EACLD,IAAKqN,EACLlB,UAAWmB,EACXlB,qBAAsB,EACtBC,YAAa,IAGf7gC,KAAKhB,SAASigC,GAAgB,CAAE//B,MAAO2iC,GAChC7hC,KAAKw+B,cAAcx+B,KAAKw+B,cAAc34B,OAAS,EACvD,CAED,OAAAhD,GAEE,IAAK,IAAI4G,EAAI,EAAGA,EAAIzJ,KAAKw+B,cAAc34B,OAAQ4D,IAE7CzJ,KAAKw+B,cAAc/0B,GAAGgF,IAAI5L,UAC1B7C,KAAKw+B,cAAc/0B,GAAG+qB,IAAI3xB,UAC1B7C,KAAKw+B,cAAc/0B,GAAGk3B,UAAU99B,SAEnC,EClPH,MAAMk/B,GAAmB,IAvDzB,MAEE,IAAAl7B,GAEE7G,KAAKgiC,QAAU,EAChB,CAED,KAAAC,CAAMC,GAEJ,MAAMC,EAAoB,GACpBC,EAAgBxuB,GAAMyuB,eAAe3tB,KAAKgI,KAAKwlB,EAAkBr8B,SAGvE7F,KAAKsiC,gBAAgBH,EAAmBC,GAExC,IAAIG,EAAW,EAEf,IAAK,IAAI94B,EAAI,EAAGA,EAAIy4B,EAAkBr8B,OAAQ4D,IAC9C,CACE,MAAM+4B,EAAeN,EAAkBz4B,GAAGmV,aAAa,YAAY6jB,MAC7DxsB,EAAIvB,KAAK8C,MAAM/N,EAAI24B,GACnBpsB,EAAIvM,EAAI24B,EAAgBnsB,EAC9B,IAAK,IAAIwsB,EAAQ,EAAGA,EAAQD,EAAcC,IAExCN,EAAkBI,GAAavsB,EAAIosB,EAAiB,GAAMA,EAC1DD,EAAkBI,EAAW,GAAMtsB,EAAImsB,EAAiB,GAAMA,EAC9DG,GAAY,CAEf,CAED,MAAMG,EAAmB,IAAIC,EAAgB,IAAIzvB,aAAaivB,GAAoB,GAC5E5U,EAAkBC,GAAoBC,gBAAgByU,GAI5D,OAHA3U,EAAgB3F,aAAa,mBAAoB8a,GAEjD1iC,KAAKgiC,QAAQ93B,KAAK,IAAIo0B,GAAc/Q,EAAiB6U,IAC9CpiC,KAAKgiC,QAAQhiC,KAAKgiC,QAAQn8B,OAAS,EAC3C,CAED,mBAAAq7B,CAAoBv+B,GAElB,IAAK,IAAI8G,EAAI,EAAGA,EAAIzJ,KAAKgiC,QAAQn8B,OAAQ4D,IAEvCzJ,KAAKgiC,QAAQv4B,GAAGy3B,oBAAoBv+B,EAAU,EAEjD,CAED,eAAA2/B,CAAgBM,EAAKR,GAEnB,IAAK,IAAI34B,EAAI,EAAGA,EAAI24B,EAAgBA,EAAgB,EAAG34B,IAErDm5B,EAAI14B,KAAK,EAEZ,GC8BE,MAAC24B,GAAK,IAlFX,MAEE,IAAAh8B,CAAKi8B,GAEH9iC,KAAK8iC,MAAQA,EACb9iC,KAAK+iC,YAAc,GACnB/iC,KAAKgjC,oBAAsB,IAAI5jC,EAC/BY,KAAKijC,SAAW,IAAI/wB,EACpBlS,KAAKijC,SAASC,uBAAwB,EACtCljC,KAAKijC,SAAS7R,eAAgB,EAE9BpxB,KAAKmjC,SAAW,IAAIjxB,EACpBlS,KAAKmjC,SAASD,uBAAwB,EACtCljC,KAAKmjC,SAAS/R,eAAgB,EAE9BpxB,KAAKojC,UAAY,IAAI9O,GAAoB,EAAG,EAAG,GAAI,GAAI,IAAK,IAC7D,CAED,cAAA+O,CAAeC,GAEb,MAAMlzB,EAAQpQ,KAAK+iC,YAAY32B,QAAQk3B,GACnClzB,GAAS,GAEXpQ,KAAK+iC,YAAYn1B,OAAOwC,EAAO,GAGjCpQ,KAAKijC,SAAS1c,OAAO+c,GACrBtjC,KAAKmjC,SAAS5c,OAAO+c,GAErBA,EAAKzgC,SACN,CAED,wBAAA0gC,CAAyBD,GAEvBtjC,KAAK+iC,YAAY74B,KAAKo5B,GACtBtjC,KAAKijC,SAAS9rB,IAAImsB,GAElBA,EAAKE,oCACN,CAED,uBAAAC,CAAwBH,GAEtBtjC,KAAK+iC,YAAY74B,KAAKo5B,GACtBtjC,KAAKmjC,SAAShsB,IAAImsB,GAElBA,EAAKI,mCACN,CAED,MAAAtlC,GAME4B,KAAKojC,UAAU3K,yBAEfz4B,KAAKgjC,oBAAoBnT,KAAK7vB,KAAK8iC,MAAMa,KACzC,IAAK,IAAIl6B,EAAI,EAAGA,EAAIzJ,KAAK+iC,YAAYl9B,OAAQ4D,IAE3CzJ,KAAK+iC,YAAYt5B,GAAGm6B,aAAa5jC,KAAKgjC,oBAEzC,CAED,MAAAvgC,CAAOE,GAGD3C,KAAKijC,SAAS3W,SAASzmB,OAAS,GAElCg+B,GAASphC,OAAOzC,KAAKijC,SAAUjjC,KAAKojC,WAElCpjC,KAAKmjC,SAAS7W,SAASzmB,OAAS,GAElCg+B,GAASphC,OAAOzC,KAAKmjC,SAAUnP,GAActZ,QAEhD,CAED,KAAAqW,GAEE/wB,KAAK8jC,6BAA0B5jC,CAChC,GCnFH,MAAM6jC,GAEJ,WAAAplC,GAEEqB,KAAK0yB,OAAS,IAAI9F,CACnB,CAED,UAAAoX,CAAWhvB,EAAQivB,EAAmBC,EAAc1U,GAElDxvB,KAAK0yB,OAAOlH,cAAcxW,GAE1B,MAAMmvB,EAAQvwB,GAAM0C,SAAS4tB,EAAe,GACtCE,EAAS,EAAI1vB,KAAK2vB,KAAK3vB,KAAK4vB,IAAIH,GAAS3U,GAAW,EAEpD+U,EAAkBvkC,KAAKwkC,oBAAoBP,EAAmBE,GAC9DM,EAAoBzkC,KAAK0kC,sBAAsBT,EAAmBE,GAClEQ,EAAoB3kC,KAAK4kC,sBAAsBX,EAAmBG,GAClES,EAAqB7kC,KAAK8kC,uBAAuBb,EAAmBG,GAEpEW,EAAqB,IAAI7Z,EAAQ,EAAG,GAAI,GAAG8Z,gBAAgBf,GAE3DgB,EAAgBjlC,KAAK0yB,OAAOxb,OAAO/R,QAEnC+/B,EAAqBllC,KAAKmlC,yBAA8C,EAArBnlC,KAAK0yB,OAAOxJ,OAAiC,EAArBlpB,KAAK0yB,OAAOxJ,OAAYgb,EAAc1U,GACjH4V,EAAUH,EAAc9/B,QAAQgS,IAAI4tB,EAAmB5/B,QAAQiS,gBAAqC,EAAtB8tB,IAE9EG,GAAc,IAAIC,GAAQC,8BAA8BhB,EAAiBa,GACzEI,GAAc,IAAIF,GAAQC,8BAA8Bd,EAAmBW,GAE3EK,GAAe,IAAIH,GAAQC,8BAA8BZ,EAAmBS,GAC5EM,GAAe,IAAIJ,GAAQC,8BAA8BV,EAAoBO,GAEnFplC,KAAK2lC,+BAA+BP,EAASpwB,EAAQivB,EAAmBoB,EAAUG,EAAYC,EAAYC,GAE1GL,EAASE,8BAA8BhB,EAAiBa,GACxDI,EAAWD,8BAA8Bd,EAAmBW,GAE5DK,EAAWF,8BAA8BZ,EAAmBS,GAC5DM,EAAYH,8BAA8BV,EAAoBO,GAE9D,IAAIQ,EAAmBjrB,IAEvB,MAAMkrB,EAAcd,EAAmB5/B,QAAQiS,gBAAqC,EAAtB8tB,GAC9D,IAAK,IAAIz7B,EAAI,EAAGA,EAAIuL,EAAOnP,OAAQ4D,IACnC,CACE,MAAM0nB,EAAO,IAAI2U,EAAM9wB,EAAOvL,GAAGtE,QAAS6P,EAAOvL,GAAGtE,QAAQgS,IAAI0uB,IAE1DE,EAAwB,IAAI7a,EAC5B8a,EAAyB,IAAI9a,EAE7B+a,EAA0B,IAAI/a,EAC9Bgb,EAA0B,IAAIhb,EAEpCma,EAASc,cAAchV,EAAO4U,GAC9BP,EAAWW,cAAchV,EAAM6U,GAE/BP,EAAWU,cAAchV,EAAO8U,GAChCP,EAAYS,cAAchV,EAAM+U,GAE5BH,EAAqBlgC,SAAW,MAElClC,QAAQyW,IAAI,4BAA6B3Q,GAEvCu8B,EAAuBngC,SAAW,MAEpClC,QAAQyW,IAAI,8BAA+B3Q,GAEzCw8B,EAAuBpgC,SAAW,MAEpClC,QAAQyW,IAAI,8BAA+B3Q,GAEzCy8B,EAAwBrgC,SAAW,MAErClC,QAAQyW,IAAI,+BAAgC3Q,GAG9C,MAAM28B,EAAoBpxB,EAAOvL,GAAGtE,QAAQwsB,IAAIoU,GAAsBlgC,SAChEwgC,EAAoBrxB,EAAOvL,GAAGtE,QAAQwsB,IAAIqU,GAAwBngC,SAElEygC,EAAsBtxB,EAAOvL,GAAGtE,QAAQwsB,IAAIsU,GAAwBpgC,SACpE0gC,EAAsBvxB,EAAOvL,GAAGtE,QAAQwsB,IAAIuU,GAAyBrgC,SAErE2gC,EAAkB9xB,KAAKP,IAAIiyB,EAAiBC,GAC5CI,EAAkB/xB,KAAKP,IAAImyB,EAAmBC,GAE9CpyB,EAAMO,KAAKP,IAAIqyB,EAAcC,GAE/BtyB,EAAMyxB,IAERA,EAAmBzxB,EAEtB,CAED,MAAMuyB,EAAqB3B,EAAmB5/B,QAAQiS,eAAewuB,GAGrE,OAFyBR,EAAQjgC,QAAQgS,IAAIuvB,EAG9C,CAED,8BAAAf,CAA+BgB,EAAY3xB,EAAQivB,EAAmBoB,EAAUG,EAAYC,EAAYC,GAEtG,MAAMkB,EAAkB5mC,KAAK6mC,wBAAwB7xB,EAAQwwB,EAAYH,EAAUpB,GAC7E6C,EAAoB9mC,KAAK+mC,0BAA0B/xB,EAAQywB,EAAYC,EAAazB,GAE1F0C,EAAWxvB,IAAIyvB,GACfD,EAAWxvB,IAAI2vB,EAChB,CAED,uBAAAD,CAAwB7xB,EAAQwwB,EAAYH,EAAUpB,GAEpD,IAAI+C,EAA+BrsB,IAC/BssB,EAAkCtsB,IAItC,MAAMusB,EAAS,IAAIhc,EAAQ,EAAG,EAAG,GAAG8Z,gBAAgBf,GACpD,IAAK,IAAIx6B,EAAI,EAAGA,EAAIuL,EAAOnP,OAAQ4D,IACnC,CACE,MAAM09B,EAAc,IAAIrB,EAAM9wB,EAAOvL,GAAGtE,QAAS6P,EAAOvL,GAAGtE,QAAQgS,IAAI+vB,EAAO/hC,QAAQiS,gBAAgB,OAChGgwB,EAAc,IAAItB,EAAM9wB,EAAOvL,GAAGtE,QAAS6P,EAAOvL,GAAGtE,QAAQgS,IAAI+vB,EAAO/hC,QAAQiS,eAAe,OAE/F4uB,EAA0B,IAAI9a,EAC9B6a,EAAuB,IAAI7a,EAEjCsa,EAAWW,cAAcgB,EAAYnB,GACrCX,EAASc,cAAciB,EAASrB,GAEhC,MAAMsB,EAAcrB,EAAuBtU,WAAW1c,EAAOvL,IACvD69B,EAAcvB,EAAqBrU,WAAW1c,EAAOvL,IAEvDs8B,EAAqBlgC,SAAW,MAElClC,QAAQyW,IAAI,qCAAsC3Q,GAEhDu8B,EAAuBngC,SAAW,MAEpClC,QAAQyW,IAAI,uCAAwC3Q,GAGlD49B,EAAYJ,IAEdA,EAAiCI,GAG/BC,EAAUN,IAEZA,EAA+BM,EAGlC,CAED,MAAMC,GAAcP,EAA+BC,GAAkC,EAGrF,OAAOC,EAAO/hC,QAAQiS,gBAAgBmwB,EACvC,CAED,yBAAAR,CAA0B/xB,EAAQywB,EAAYC,EAAazB,GAEzD,IAAIuD,EAAkC7sB,IAClC8sB,EAAkC9sB,IAItC,MAAM+sB,EAAY,IAAIxc,EAAQ,EAAG,EAAG,GAAG8Z,gBAAgBf,GAEvD,IAAK,IAAIx6B,EAAI,EAAGA,EAAIuL,EAAOnP,OAAQ4D,IACnC,CACE,MAAMk+B,EAAa,IAAI7B,EAAM9wB,EAAOvL,GAAGtE,QAAS6P,EAAOvL,GAAGtE,QAAQgS,IAAIuwB,EAAUviC,QAAQiS,gBAAgB,OAClGwwB,EAAa,IAAI9B,EAAM9wB,EAAOvL,GAAGtE,QAAS6P,EAAOvL,GAAGtE,QAAQgS,IAAIuwB,EAAUviC,QAAQiS,eAAe,OAEjG6uB,EAA0B,IAAI/a,EAC9Bgb,EAA0B,IAAIhb,EAEpCua,EAAWU,cAAcwB,EAAY1B,GACrCP,EAAYS,cAAcyB,EAAY1B,GAEtC,MAAM2B,EAAa5B,EAAuBvU,WAAW1c,EAAOvL,IACtDq+B,EAAa5B,EAAwBxU,WAAW1c,EAAOvL,IAEzDw8B,EAAuBpgC,SAAW,MAEpClC,QAAQyW,IAAI,8BAA+B3Q,GAEzCy8B,EAAwBrgC,SAAW,MAErClC,QAAQyW,IAAI,+BAAgC3Q,GAG1Co+B,EAAYJ,IAEdA,EAAiCI,GAG/BC,EAAaN,IAEfA,EAAkCM,EAGrC,CAED,MAAMP,GAAcC,EAAkCC,GAAkC,EAGxF,OAAOC,EAAUviC,QAAQiS,gBAAgBmwB,EAC1C,CAED,mBAAA/C,CAAoBP,EAAmBE,GAErC,MAAMI,EAAkB,IAAIrZ,EAAQ,GAAI,EAAG,GAG3C,OAFAqZ,EAAgBS,iBAAgB,IAAI+C,GAAaC,iBAAiB,IAAI9c,EAAQ,EAAG,EAAG,GAAIiZ,IACxFI,EAAgBS,gBAAgBf,GACzBM,CACR,CAED,qBAAAG,CAAsBT,EAAmBE,GAEvC,MAAMM,EAAoB,IAAIvZ,EAAQ,EAAG,EAAG,GAG5C,OAFAuZ,EAAkBO,iBAAgB,IAAI+C,GAAaC,iBAAiB,IAAI9c,EAAQ,EAAG,EAAG,IAAKiZ,IAC3FM,EAAkBO,gBAAgBf,GAC3BQ,CACR,CAED,qBAAAG,CAAsBX,EAAmBG,GAEvC,MAAMO,EAAoB,IAAIzZ,EAAQ,EAAG,EAAG,GAG5C,OAFAyZ,EAAkBK,iBAAgB,IAAI+C,GAAaC,iBAAiB,IAAI9c,EAAQ,EAAG,EAAG,GAAIkZ,IAC1FO,EAAkBK,gBAAgBf,GAC3BU,CACR,CAED,sBAAAG,CAAuBb,EAAmBG,GAExC,MAAMS,EAAqB,IAAI3Z,GAAS,EAAG,EAAG,GAG9C,OAFA2Z,EAAmBG,iBAAgB,IAAI+C,GAAaC,iBAAiB,IAAI9c,EAAQ,EAAG,EAAG,IAAKkZ,IAC5FS,EAAmBG,gBAAgBf,GAC5BY,CACR,CAED,wBAAAM,CAAyB/c,EAAOa,EAAQib,EAAc1U,GAEpD,MAAM2U,EAASD,EAAe,EAAKxvB,KAAK8B,GAAK,IACvC4tB,EAAS,EAAI1vB,KAAK2vB,KAAK3vB,KAAK4vB,IAAIH,GAAS3U,GAAW,EAEpDyY,EAAQhf,EAASvU,KAAK4vB,IAAIH,GAC1B+D,EAAQ9f,EAAQ1T,KAAK4vB,IAAIF,GAC/B,OAAO1vB,KAAKN,IAAIM,KAAKqB,IAAImyB,GAAQxzB,KAAKqB,IAAIkyB,GAC3C,ECxPH,MAAME,GAEJ,WAAAxpC,GAGC,CAED,UAAAqlC,CAAWhvB,EAAQivB,EAAmBC,EAAc1U,GAElD,MAAM4Y,EAAsBnE,EAAkB9+B,QAAQkjC,UAEhDC,EAAkB,GAExB,IAAK,IAAI7+B,EAAI,EAAGA,EAAIuL,EAAOnP,OAAQ4D,IAEjC6+B,EAAgBp+B,KAAK8K,EAAOvL,GAAGtE,QAAQ6/B,gBAAgBoD,IAGzD,MAAMhW,GAAM,IAAIC,GAAO7G,cAAc8c,GAC/BrlC,EAAO,IAAIioB,EACjBkH,EAAIyC,QAAQ5xB,GAEZ,MAAM2X,EAAW5a,KAAKmlC,yBAAyBliC,EAAK+S,EAAI,EAAG/S,EAAKgT,EAAI,EAAGiuB,EAAc1U,GAE/EtY,EAAS,IAAIgU,EAKnB,OAJAkH,EAAImW,UAAUrxB,GAEdA,EAAO8tB,gBAAgBf,GAEhB,CACL/sB,OAAQA,EACRsxB,mBAAoB5tB,EAEvB,CAED,wBAAAuqB,CAAyB/c,EAAOa,EAAQib,EAAc1U,GAEpD,MAAM2U,EAASD,EAAe,EAAKxvB,KAAK8B,GAAK,IACvC4tB,EAAS,EAAI1vB,KAAK2vB,KAAK3vB,KAAK4vB,IAAIH,GAAS3U,GAAW,EAEpDyY,EAAQhf,EAASvU,KAAK4vB,IAAIH,GAC1B+D,EAAQ9f,EAAQ1T,KAAK4vB,IAAIF,GAC/B,OAAO1vB,KAAKN,IAAIM,KAAKqB,IAAImyB,GAAQxzB,KAAKqB,IAAIkyB,GAC3C,ECyOE,MAACQ,GAAmB,IAzQzB,MAEE,IAAA5hC,CAAKi8B,GAEH9iC,KAAK0oC,QAAU,IAAIC,EACnB3oC,KAAKiV,MAAQ,IAAIqwB,EACjBtlC,KAAK4oC,IAAM,IAAIC,EAEf7oC,KAAK8oC,SAAW,IAAI5d,EACpBlrB,KAAK+oC,WAAa,IAAI7d,EAEtBlrB,KAAK8iC,MAAQA,CACd,CAED,UAAAkG,CAAWniB,GAETA,EAASA,GAAUmN,GAActZ,QACjC,MAAMuuB,EAAU,IAAI/d,EAKpB,OAHA+d,EAAQ9mC,IAAI,EAAG,EAAG,GAClB8mC,EAAQjE,gBAAgBne,EAAO8G,YAExBsb,CACR,CAED,eAAAC,CAAgBriB,GAEdA,EAASA,GAAUmN,GAActZ,QACjC,MAAMuuB,EAAU,IAAI/d,EAKpB,OAHA+d,EAAQ9mC,IAAI,EAAG,GAAI,GACnB8mC,EAAQjE,gBAAgBne,EAAO8G,YAExBsb,CACR,CAED,aAAAE,CAActiB,GAEZA,EAASA,GAAUmN,GAActZ,QACjC,MAAMuuB,EAAU,IAAI/d,EAIpB,OAFA+d,EAAQ9mC,IAAI,EAAG,EAAG,GAClB8mC,EAAQjE,gBAAgBne,EAAO8G,YACxBsb,CACR,CAED,wBAAAG,CAAyBzF,EAAK9c,GAE5BA,EAASA,GAAUmN,GAActZ,QACjC,MAAMuuB,EAAU,IAAI/d,EAEdiZ,EAAStd,EAAO0I,IAAM,EAAK7a,KAAK8B,GAAK,IACrC4tB,EAAS,EAAI1vB,KAAK2vB,KAAK3vB,KAAK4vB,IAAIH,GAAStd,EAAO2I,QAAW,EAE3DyY,EAAQvzB,KAAK4vB,IAAIH,GAAStd,EAAO6I,IACjCwY,EAAQxzB,KAAK4vB,IAAIF,GAASvd,EAAO6I,IAIvC,OAFAuZ,EAAQ9mC,IAAI+lC,EAAQvE,EAAI3tB,EAAGiyB,EAAQtE,EAAI1tB,GAAI4Q,EAAO6I,KAAKa,YAEhD0Y,EAAQjE,gBAAgBne,EAAO8G,WACvC,CAED,sBAAA0b,CAAuBC,EAAgBC,EAAc5F,EAAK9c,GAExDA,EAASA,GAAUmN,GAActZ,QACjCipB,EAAMA,GAAO3jC,KAAK8iC,MAAMa,IAExB,MAAMsF,EAAU,IAAI/d,EAcpB,OAZAlrB,KAAKiV,MAAMswB,8BAA8BgE,GAAgBvpC,KAAKkpC,gBAAgBriB,GAASyiB,GACnFziB,EAAO2iB,oBAETxpC,KAAK4oC,IAAIzmC,IAAI0kB,EAAO7T,SAAUhT,KAAKopC,yBAAyBzF,EAAK9c,KAIjE7mB,KAAK+oC,WAAW5mC,IAAIwhC,EAAI3tB,EAAG2tB,EAAI1tB,EAAG,GAAGwzB,UAAU5iB,GAC/C7mB,KAAK4oC,IAAIzmC,IAAI0kB,EAAO7T,SAAUhT,KAAK+oC,aAGrC/oC,KAAK4oC,IAAIc,eAAe1pC,KAAKiV,MAAOg0B,GAC7BA,CACR,CAED,oBAAAU,CAAqB30B,EAAQ40B,EAAa,GAExC,MACMC,GADgB,IAAIjd,GAASpB,cAAcxW,GACRkC,OACnC4yB,EAAiB9pC,KAAKkpC,gBAAgBlV,GAActZ,SAASvV,QAE7D8P,GAAQ,IAAIqwB,GAAQC,8BAA8BuE,EAAgBD,GAElE10B,EAAkBvB,GAAMmB,wBAAwBC,EAAQC,GAExD80B,EAA0B,IAAI7e,EACpC,IAAIkH,GAAO,IAAIC,GAAO7G,cAAcrW,GACpCid,EAAImW,UAAUwB,GAEd,MAAMC,EAAK,IAAI9e,EAAQ,EAAG,EAAG,GAAG8Z,gBAAgBhR,GAActZ,QAAQiT,YAChEsc,EAAQD,EAAG7kC,QAAQ+kC,MAAMJ,GAAgBvZ,YACzCyE,GAAM,IAAI2T,GAAUxmC,IAAI8nC,EAAMj0B,EAAGg0B,EAAGh0B,EAAG8zB,EAAe9zB,EAAG6zB,EAAmB7zB,EAChFi0B,EAAMh0B,EAAG+zB,EAAG/zB,EAAG6zB,EAAe7zB,EAAG4zB,EAAmB5zB,EACpDg0B,EAAMjzB,EAAGgzB,EAAGhzB,EAAG8yB,EAAe9yB,EAAG6yB,EAAmB7yB,EACpD,EAAM,EAAkB,EAAU,GAE9BmzB,GAAc,IAAIxB,GAAUyB,WAAWpV,GAC7C,IAAK,IAAIvrB,EAAI,EAAGA,EAAI0L,EAAgBtP,OAAQ4D,IAE1C0L,EAAgB1L,GAAG4gC,aAAaF,GAGlC,MAAMlnC,EAAO,IAAIioB,EACjBkH,GAAO,IAAIC,GAAO7G,cAAcrW,GAChCid,EAAIyC,QAAQ5xB,GACZA,EAAKmU,eAAewyB,GACpB,MAAMU,EAAmB,IAAIpf,EAG7B,OAFAkH,EAAImW,UAAU+B,GAEP,CACLt3B,SAAU+2B,EACVQ,KAAMvqC,KAAKwqC,qBAAqBvnC,EAAK+S,EAAI,EAAG/S,EAAKgT,EAAI,GAExD,CAED,oBAAAu0B,CAAqBpiB,EAAOa,GAE1B,MAAMkb,EAASnQ,GAActZ,QAAQ6U,IAAM,EAAK7a,KAAK8B,GAAK,IACpD4tB,EAAS,EAAI1vB,KAAK2vB,KAAK3vB,KAAK4vB,IAAIH,GAASnQ,GAActZ,QAAQ8U,QAAW,EAE1EyY,EAAQhf,EAASvU,KAAK4vB,IAAIH,GAC1B+D,EAAQ9f,EAAQ1T,KAAK4vB,IAAIF,GAE/B,OAAO1vB,KAAKN,IAAIM,KAAKqB,IAAImyB,GAAQxzB,KAAKqB,IAAIkyB,GAC3C,CAED,mBAAAwC,CAAoBjX,EAAI3M,GAEtB,GAAIA,EAAO6jB,qBACX,CACElX,EAAGqB,QAAQ70B,KAAK8oC,UAEhB,MAAM6B,EAAQ3qC,KAAK8oC,SAAS9yB,EACtB40B,EAAQ5qC,KAAK8oC,SAAS7yB,EACtB40B,EAAgBF,EAAQC,EAC9B,OAAIza,GAAQxB,aAAekc,EAAgB,EAElC1a,GAAQlH,OAAS2hB,EAIjBza,GAAQ/H,MAAQuiB,CAE1B,CAED,CAEE,MAAM1nC,EAAO,IAAIioB,EAEjB,OADAsI,EAAGqB,QAAQ5xB,GACJjD,KAAKwqC,qBAAqBvnC,EAAK+S,EAAG/S,EAAKgT,EAC/C,CACF,CAED,mBAAA60B,CAAoBC,EAAQlkB,GAE1BA,EAASA,GAAUmN,GAActZ,QACjC,MAAMuuB,EAAU,IAAI/d,EAOpB,OALA6f,EAAOC,iBAAiB/B,GACxBA,EAAQgC,QAAQpkB,GAEhBoiB,EAAQjzB,GAAiB,GAAZizB,EAAQjzB,EAAU,IAAQma,GAAa,MACpD8Y,EAAQhzB,GAAK,GAAiB,GAAZgzB,EAAQhzB,EAAU,KAAQka,GAAQlH,OAC7CggB,CACR,CAED,mBAAAiC,CAAoB5Z,EAAKzK,GAEvBA,EAASA,GAAUmN,GAActZ,QACjC,MAAMuuB,EAAU,IAAI/d,EAOpB,OALA+d,EAAQpZ,KAAKyB,GACb2X,EAAQgC,QAAQpkB,GAEhBoiB,EAAQjzB,GAAiB,GAAZizB,EAAQjzB,EAAU,IAAQma,GAAa,MACpD8Y,EAAQhzB,GAAK,GAAiB,GAAZgzB,EAAQhzB,EAAU,KAAQka,GAAQlH,OAC7CggB,CACR,CAED,iBAAAkC,CAAkBtkB,GAEhBA,EAAOukB,MAAUjb,GAAQ/H,MAAQ,EACjCvB,EAAOojB,MAAS9Z,GAAQ/H,MAAQ,EAChCvB,EAAOwkB,IAASlb,GAAQlH,OAAS,EACjCpC,EAAOykB,QAAUnb,GAAQlH,OAAS,EAClCpC,EAAO2I,OAASW,GAAQxB,aACxB9H,EAAO4R,wBAAuB,EAC/B,CAED,uBAAA8S,CAAwB1kB,EAAQ2M,EAAIxI,EAAQ,GAE1C,MAAM+B,EAAM,IAAI7B,EAChB6B,EAAI8C,KAAK2D,EAAGpf,KAAKud,IAAI6B,EAAGrf,KAExB,MAAMq3B,EAAKhY,EAAGrf,IAAIhP,QAEZsmC,EAAKD,EAAGrmC,QAAQgS,IAAI,IAAI+T,EAAQ6B,EAAI/W,EAAG,EAAG,IAC1C01B,EAAKF,EAAGrmC,QAAQgS,IAAI,IAAI+T,EAAQ,EAAG6B,EAAI9W,EAAG,IAC1C01B,EAAKH,EAAGrmC,QAAQgS,IAAI,IAAI+T,EAAQ,EAAG,EAAG6B,EAAI/V,IAE1C40B,EAAKJ,EAAGrmC,QAAQgS,IAAI,IAAI+T,EAAQ6B,EAAI/W,EAAG,EAAG+W,EAAI/V,IAC9C60B,EAAKL,EAAGrmC,QAAQgS,IAAI,IAAI+T,EAAQ,EAAG6B,EAAI9W,EAAG8W,EAAI/V,IAC9C80B,EAAKtY,EAAGpf,IAAIjP,QACZ4mC,EAAKP,EAAGrmC,QAAQgS,IAAI,IAAI+T,EAAQ6B,EAAI/W,EAAG+W,EAAI9W,EAAG,IACpD,OAAOjW,KAAKgkC,WAAWnd,EAAQ,CAAC2kB,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GAAK/gB,EAClE,CAED,UAAAgZ,CAAWnd,EAAQ7R,EAAQ40B,EAAa,GAEtC,GAAI/iB,EAAO2iB,oBACX,CACE,MAAMzE,EAAqB,IAAI7Z,EAAQ,EAAG,GAAI,GAAG8Z,gBAAgBne,EAAO8G,YAClEqe,EAAsBjH,EAAmB5/B,QAAQiS,gBAAgB,GAEjE60B,EAAS,IAAIlI,GAEbpV,EAAewB,GAAQxB,aAEvBud,EAAaD,EAAOjI,WAAWhvB,EAAQ6R,EAAO8G,WAAY9G,EAAO0I,IAAMqa,EAAYjb,GACnFyD,GAAM,IAAIC,GAAO7G,cAAcxW,GAC/BkC,EAAS,IAAIgU,EACnBkH,EAAImW,UAAUrxB,GAEd,MAAMi1B,GAA2B,IAAI7G,GAAQC,8BAA8ByG,EAAqB90B,GAE1Fk1B,EAAa,IAAIvD,EAAIqD,EAAYnH,GAEjCsH,EAAqB,IAAInhB,EAC/BkhB,EAAW1C,eAAeyC,EAA0BE,GAIpD,MAAO,CACL9B,KAHW2B,EAAWxa,WAAW2a,GAIjCA,mBAAoBA,EACpBC,gBAAiBJ,EAEpB,CAED,CACE,MACMK,GADS,IAAIpE,IACGnE,WAAWhvB,EAAQhV,KAAKwsC,mBAAoB3lB,EAAO0I,IAAMqa,EAAYzZ,GAAQxB,cAEnG3uB,KAAKqsC,mBAAmBxc,KAAK0c,EAAOr1B,QACpClX,KAAKysC,eAAiBF,EAAO/D,mBAE7B,MAAMkE,EAAU,IAAIxhB,EAAQ,EAAG,EAAG,GAAG8Z,gBAAgBne,EAAO8G,YAC5D,MAAO,CACL4c,KAAMgC,EAAO/D,mBACb6D,mBAAoBE,EAAOr1B,OAC3Bo1B,gBAAiBI,EAAQt1B,eAAem1B,EAAO/D,oBAElD,CACF,GClOE,MAACmE,GAAc,IAlCpB,MAEE,WAAAhuC,GAEC,CAED,IAAAkI,CAAKi8B,GAEH9O,GAAcntB,OACd+lC,GAAgB/lC,KAAKi8B,GACrB7K,GAAapxB,OACbgmC,GAAgBhmC,OAEhBimC,GAAGjmC,OACHqH,GAAQrH,OACRkmC,GAAuBlmC,OACvBkC,GAAkBlC,OAClBusB,GAAavsB,OACbspB,GAAQtpB,OACR8c,GAAK9c,OACLmmC,GAAGnmC,KAAKi8B,GAERmK,GAAMpmC,MACP,CAED,OAAAhE,CAAQqqC,GAENrJ,GAAShhC,UACTuwB,GAAavwB,UAEbqqC,EAAYrqC,SACb,GC9CH,MAAMsqC,GAEJ,IAAAtmC,CAAKsf,GAEHnmB,KAAKotC,eAAgB,EACrBptC,KAAKqtC,aAAc,EAEnBrtC,KAAKyI,KAAO,GACZzI,KAAKstC,UAAY,GACjBttC,KAAKmmB,UAAYA,EAEjBnmB,KAAKmmB,UAAU7b,iBAAiB,UAAWtK,KAAKutC,YAAY1oC,KAAK7E,OAAO,GACxEA,KAAKmmB,UAAU7b,iBAAiB,QAAStK,KAAKwtC,UAAU3oC,KAAK7E,OAAO,EACrE,CAED,WAAAutC,CAAYhjC,GAEQ,KAAdA,EAAEkjC,SAAkBljC,EAAEmjC,UAAY1tC,KAAKqtC,cAEzCrtC,KAAKotC,eAAgB,EACrBptC,KAAKqtC,aAAc,GAGjB9iC,EAAEojC,MAEJ3tC,KAAK4tC,UAAUrjC,EAAEojC,KAEpB,CAED,SAAAH,CAAUjjC,GAERvK,KAAK6tC,YAAYtjC,EAAEojC,KACpB,CAED,KAAA5c,GAEE/wB,KAAKotC,eAAgB,EAErB,IAAK,IAAI3jC,EAAI,EAAGA,EAAIzJ,KAAKstC,UAAUznC,OAAQ4D,IAEzCzJ,KAAKyI,KAAKzI,KAAKstC,UAAU7jC,IAAIqkC,SAAU,EACvC9tC,KAAKyI,KAAKzI,KAAKstC,UAAU7jC,IAAIskC,UAAW,CAE3C,CAED,WAAAF,CAAYG,GAEV,MAAMC,EAAMjuC,KAAKyI,KAAKulC,GAClBC,IAEFA,EAAIC,OAAQ,EACZD,EAAIE,MAAO,EACXF,EAAIF,UAAW,EAElB,CAED,YAAAK,GAEEpuC,KAAKqtC,aAAc,EAEnB,IAAK,IAAI5jC,EAAI,EAAGA,EAAIzJ,KAAKstC,UAAUznC,OAAQ4D,IAEzCzJ,KAAKyI,KAAKzI,KAAKstC,UAAU7jC,IAAIykC,OAAQ,EACrCluC,KAAKyI,KAAKzI,KAAKstC,UAAU7jC,IAAI0kC,MAAO,CAEvC,CAED,SAAAP,CAAUI,GAER,MAAMC,EAAMjuC,KAAKyI,KAAKulC,GAClBC,KAEe,IAAbA,EAAIE,OAENF,EAAIH,SAAU,GAEhBG,EAAIE,MAAO,EACXF,EAAIC,OAAQ,EAEf,CAED,cAAAG,CAAeL,GAEb,MAAMC,EAAMjuC,KAAKyI,KAAKulC,GACtB,QAAIC,GAEKA,EAAIH,OAGd,CAED,WAAAQ,CAAYN,GAEV,MAAMC,EAAMjuC,KAAKyI,KAAKulC,GACtB,QAAIC,GAEKA,EAAIE,IAGd,CAED,eAAAI,CAAgBP,GAEd,MAAMC,EAAMjuC,KAAKyI,KAAKulC,GACtB,QAAIC,GAEKA,EAAIF,QAId,CAED,YAAAS,CAAaP,GAEXjuC,KAAKyI,KAAKwlC,GACR,CACED,SAAUC,EACVH,SAAS,EACTK,MAAM,EACND,OAAO,GAGXluC,KAAKstC,UAAY9kC,OAAOC,KAAKzI,KAAKyI,KACnC,CAED,cAAAgmC,CAAeT,UAENhuC,KAAKyI,KAAKulC,EAClB,CAED,OAAAnrC,GAEE7C,KAAKmmB,UAAU1b,oBAAoB,UAAWzK,KAAKutC,YAAY1oC,KAAK7E,OAAO,GAC3EA,KAAKmmB,UAAU1b,oBAAoB,QAASzK,KAAKwtC,UAAU3oC,KAAK7E,OAAO,EACxE,ECnIH,MAAMs0B,WAA2Boa,EAE/B,WAAA/vC,CAAYysC,EAAMnB,EAAOoB,EAAKC,EAAQ7b,EAAMC,GAE1C3wB,MAAMqsC,EAAMnB,EAAOoB,EAAKC,EAAQ7b,EAAMC,GAEtC1vB,KAAK2vB,YAAc,IAAIhvB,EAAM,WAC7BX,KAAK4vB,YAAc,CACpB,CAED,IAAAC,CAAKhJ,GAKH,OAHA9nB,MAAM8wB,KAAKhJ,GACX7mB,KAAK2vB,YAAYE,KAAKhJ,EAAO8I,aAC7B3vB,KAAK4vB,YAAc/I,EAAO+I,YACnB5vB,IACR,ECdH,MAAM2uC,WAAuBjwC,EAE3B,WAAAC,GAEEI,MAAM,CACJC,SAAU,CACT,EACDM,kLACAC,uHAEH,ECTH,MAAMqvC,WAA2BpsC,GAE/B,WAAA7D,GAEEI,OACD,CAED,MAAA0D,GAEEohC,GAAS9S,WAAM7wB,EAAW8zB,GAActZ,SAAS,GAAM,GAEvDmpB,GAASphC,OAAO2wB,GAAa1Y,QAASsZ,GAActZ,aAASxa,EAAW,IAAIyuC,GAC7E,4MCXH,MAAME,WAAqCpwC,GAEzC,WAAAE,GAEEI,i5BAAY+vC,IACZ9uC,KAAKhB,SAAS42B,UAAqB,CAAE12B,MAAO,GAC5Cc,KAAKhB,SAAS+vC,mBAAqB,CAAE7vC,MAAO,IAAIypC,EACjD,ECVH,MAAMqG,WAA4BvwC,GAEhC,WAAAE,GAEEI,wPACAiB,KAAKhB,SAASiwC,IAAM,CAAE/vC,WAAOgB,EAC9B,ECFH,MAAMgvC,WAAqBzwC,GAEzB,WAAAE,GAEEI,o2DAAYuB,IAEZN,KAAKhB,SAAS+vC,mBAAqB,CAAE7vC,MAAO,IAAIypC,GAChD3oC,KAAKhB,SAASmwC,kBAAqB,CAAEjwC,MAAO,IAAIypC,GAEhD3oC,KAAKhB,SAASowC,MAAY,CAAElwC,MAAO,OACnCc,KAAKhB,SAASqwC,QAAY,CAAEnwC,MAAO,IACnCc,KAAKhB,SAAS42B,UAAY,CAAE12B,MAAO,KAEnCc,KAAKhB,SAASswC,cAAgB,CAAEpwC,MAAOc,KAAKuvC,uBAC5CvvC,KAAKhB,SAASwwC,gBAAkB,CAAEtwC,MAAOc,KAAKyvC,wBAC/C,CAED,mBAAAF,GAEE,MAAMG,EAAgB,GAGtB,IAAK,IAAIjmC,EAAI,EAAGA,EAFI,GAEaA,IACjC,CACE,MAAMsjB,EAAM,IAAI7B,EAAwB,EAAhBxW,KAAK+C,SAAe,EAC1B,EAAhB/C,KAAK+C,SAAe,EACpB/C,KAAK+C,UACPsV,EAAIwD,YACJ,IAAIvF,EAAQvhB,EARM,GASlBuhB,EAAUpX,GAAM+B,KAAK,GAAK,EAAKqV,EAAQA,GACvC+B,EAAI3V,eAAe4T,GAEnB0kB,EAAcxlC,KAAK6iB,EACpB,CACD,OAAO2iB,CACR,CAED,qBAAAD,GAEE,MAAME,EAAkB,IAAIn8B,WAAW,IACvC,IAAK,IAAI/J,EAAI,EAAGA,EAAI,GAAIA,IAEtBkmC,EAAoB,EAAJlmC,EAAQ,GAAKiL,KAAK8C,MAAsB,IAAhB9C,KAAK+C,UAC7Ck4B,EAAoB,EAAJlmC,EAAQ,GAAKiL,KAAK8C,MAAsB,IAAhB9C,KAAK+C,UAC7Ck4B,EAAoB,EAAJlmC,EAAQ,GAAK,EAG/B,MAAMmmC,EAAmB,IAAIhO,EAAY+N,EAAiB,EAAG,EAAG7T,GAKhE,OAJA8T,EAAiBC,MAAQC,EACzBF,EAAiBG,MAAQD,EAEzBF,EAAiB9gC,aAAc,EACxB8gC,CACR,ECvDH,MAAMI,WAAwBvxC,GAE5B,WAAAE,GAEEI,6sBACAiB,KAAKhB,SAASixC,WAAa,CAAE/wC,MAAO,IAAIE,EACzC,ECPH,MAAM8wC,GAEJ,WAAAvxC,CAAYgE,GAEV3C,KAAKmwC,IAAM,IAAIpa,EAAkB,EAAG,GACpC/1B,KAAKowC,IAAM,IAAIra,EAAkB,EAAG,GACpC/1B,KAAKqwC,aAAe,IAAIL,EACzB,CAED,IAAAM,CAAK3f,GAECA,EAAGvI,QAAUpoB,KAAKmwC,IAAI/nB,OAASuI,EAAG1H,SAAWjpB,KAAKmwC,IAAIlnB,SAExDjpB,KAAKmwC,IAAIha,QAAQxF,EAAGvI,MAAOuI,EAAG1H,QAC9BjpB,KAAKowC,IAAIja,QAAQxF,EAAGvI,MAAOuI,EAAG1H,SAGhCjpB,KAAKqwC,aAAarxC,SAASixC,WAAW/wC,MAAMiD,IAAI,EAAG,GACnD0hC,GAAStP,KAAK5D,EAAI3wB,KAAKmwC,IAAKnwC,KAAKqwC,cACjCrwC,KAAKqwC,aAAarxC,SAASixC,WAAW/wC,MAAMiD,IAAI,EAAG,GACnD0hC,GAAStP,KAAKv0B,KAAKmwC,IAAKxf,EAAI3wB,KAAKqwC,aAElC,ECfH,MAAME,WAAuB/tC,GAE3B,WAAA7D,CAAY6xC,GAAW,GAErBzxC,QAEAiB,KAAKywC,SAAW,IAAIvB,GACpBlvC,KAAK0wC,iBAAmB,IAAI1B,GAC5BhvC,KAAK2wC,cAAgB,IAAI9B,GAEzB7uC,KAAK4wC,KAAOJ,EAAW,EAAI,EAE3BxwC,KAAK6wC,QAAU,IAAI9a,EAAkB5F,GAAQ/H,MAAQpoB,KAAK4wC,KAAMzgB,GAAQlH,OAASjpB,KAAK4wC,MAEtF5wC,KAAK8wC,QAAU,IAAI/a,EAAkB5F,GAAQ/H,MAAO+H,GAAQlH,QAE5DjpB,KAAK+wC,QAAU,IAAIb,GACnBrM,GAASjN,4BAA6B,CACvC,CAED,MAAAn0B,GAEEzC,KAAKgxC,kBAELnN,GAAS9S,MAAM/wB,KAAK6wC,QAAS7c,GAActZ,SAAS,GAAM,GAC1DmpB,GAASphC,OAAO2wB,GAAa1Y,QAASsZ,GAActZ,QAAS1a,KAAK6wC,SAElE7wC,KAAKixC,oBAELpN,GAAStP,KAAKsP,GAASvL,iBAAkBt4B,KAAK8wC,QAAS9wC,KAAKywC,UAG5DzwC,KAAK+wC,QAAQT,KAAKtwC,KAAK8wC,SACvBjN,GAAStP,KAAKv0B,KAAK8wC,aAAS5wC,GAG5BF,KAAK0wC,iBAAiB1xC,SAASiwC,IAAI/vC,MAAQc,KAAK8wC,QAAQziC,QACxDw1B,GAAStP,KAAKv0B,KAAK6wC,aAAS3wC,EAAWF,KAAK0wC,iBAG7C,CAED,iBAAAO,GAEEjxC,KAAKywC,SAASzxC,SAAS+vC,mBAAmB7vC,MAAMkrC,WAAWpW,GAActZ,QAAQw2B,kBACjFlxC,KAAKywC,SAASzxC,SAASmwC,kBAAkBjwC,MAAM2wB,KAAKmE,GAActZ,QAAQw2B,kBAC1ElxC,KAAKywC,SAASzxC,SAAS42B,UAAU12B,MAAQ80B,GAActZ,QAAQgV,GAChE,CAED,eAAAshB,GAEMhxC,KAAK6wC,QAAQzoB,QAAU+H,GAAQ/H,MAAQpoB,KAAK4wC,MAAQ5wC,KAAK6wC,QAAQ5nB,SAAWkH,GAAQlH,OAASjpB,KAAK4wC,OAEpG5wC,KAAK6wC,QAAQ1a,QAAQhG,GAAQ/H,MAAQpoB,KAAK4wC,KAAMzgB,GAAQlH,OAASjpB,KAAK4wC,MACtE5wC,KAAK8wC,QAAQ3a,QAAQhG,GAAQ/H,MAAO+H,GAAQlH,QAE/C,EC/DH,MAAMkoB,WAAqB3uC,GAEzB,WAAA7D,GAEEI,OACD,CAED,MAAA0D,GAEEohC,GAAS9S,WAAM7wB,EAAW8zB,GAActZ,SAAS,GAAM,GAEnD0Y,GAAa1Y,QAAQnc,eAEvB60B,GAAa1Y,QAAQnc,gBAGnB60B,GAAa1Y,QAAQjY,OAEvB2wB,GAAa1Y,QAAQjY,SAIrBohC,GAASphC,OAAO2wB,GAAa1Y,QAASsZ,GAActZ,SAGlD0Y,GAAa1Y,QAAQpc,gBAEvB80B,GAAa1Y,QAAQpc,gBAExB,EC5BH,MAAM8yC,WAA6B3yC,GAEjC,WAAAE,CAAY0yC,GAEVtyC,6qBAAYmB,EAAW,CACrBoxC,cAAeD,EACfE,MAAOF,IAGTrxC,KAAKhB,SAASwyC,QAAU,CAAEtyC,MAAO,IAAIE,EAAQ,GAAK,KAClDY,KAAKhB,SAASyyC,UAAY,CAAEvyC,MAAO,IAAIE,EAAQ,GAAK,IACrD,CAED,QAAAsyC,CAAS36B,EAAG+X,GAEV9uB,KAAKhB,SAASwyC,QAAQtyC,MAAM8W,EAAIe,EAChC/W,KAAKhB,SAASwyC,QAAQtyC,MAAM+W,EAAI6Y,CACjC,CAED,aAAA6iB,CAAc37B,EAAGC,GAEfjW,KAAKhB,SAASyyC,UAAUvyC,MAAMiD,IAAI6T,EAAGC,EACtC,ECvBH,MAAM27B,WAAmCnzC,GAEvC,WAAAE,CAAY0yC,GAEVtyC,ydAEAiB,KAAKhB,SAAS6yC,oBAAsB,CAAE3yC,MAAO,KAC7Cc,KAAKhB,SAAS8yC,YAAsB,CAAE5yC,MAAO,KAC7Cc,KAAKhB,SAAS+yC,aAAsB,CAAE7yC,MAAO,IAAIyB,EAAM,YACvDX,KAAKhB,SAASgzC,eAAsB,CAAE9yC,MAAO,EAC9C,ECTH,MAAM+yC,GAEJ,WAAAtzC,CAAYoB,EAAQ,GAElBC,KAAKkyC,cAAgB,EACrBlyC,KAAKmyC,eAAiB,EAEtBnyC,KAAKoyC,uBAAyB,GAC9BpyC,KAAKqyC,wBAA0B,GAC/BryC,KAAKsyC,sBAAwB,GAE7BtyC,KAAKD,MAAQA,EACbC,KAAKuyC,gBAAkB,CAAC,EAAG,EAAG,EAAG,EAAG,IACpCvyC,KAAKwyC,QAAU,CAAE7W,UAAW8W,EAAc7W,UAAW6W,EAAc5W,OAAQC,GAE3E97B,KAAK0yC,mBAAqB,IAAI3c,EAAkB,EAAG,EAAG/1B,KAAKwyC,SAC3DxyC,KAAK0yC,mBAAmBrkC,QAAQskC,iBAAkB,EAElD3yC,KAAK4yC,iBACL5yC,KAAK6yC,UAEL7yC,KAAK8yC,yBAA2B,IAAIlB,EACrC,CAED,IAAAtB,CAAK3f,EAAIoiB,GAEP/yC,KAAKgzC,UAAUriB,EAAGvI,MAAOuI,EAAG1H,QAExB8pB,EAEFlP,GAAStP,KAAK5D,EAAI3wB,KAAK0yC,mBAAoB1yC,KAAK8yC,0BAIhDjP,GAAStP,KAAK5D,EAAI3wB,KAAK0yC,oBAGzB,IAAIO,EAAoBjzC,KAAK0yC,mBAE7B,IAAK,IAAIjpC,EAAI,EAAGA,EAAIzJ,KAAKD,MAAO0J,IAChC,CACE,MAAMurB,EAAMh1B,KAAKoyC,uBAAuB3oC,GAExCurB,EAAI2c,cAAc,EAAG,GACrB9N,GAAStP,KAAK0e,EAAmBjzC,KAAKqyC,wBAAwB5oC,GAAIurB,GAElEA,EAAI2c,cAAc,EAAG,GACrB9N,GAAStP,KAAKv0B,KAAKqyC,wBAAwB5oC,GAAIzJ,KAAKsyC,sBAAsB7oC,GAAIurB,GAE9Eie,EAAoBjzC,KAAKsyC,sBAAsB7oC,EAChD,CACF,CAED,mBAAAypC,GAEE,OAAOlzC,KAAKqyC,wBAAwB,GAAGhkC,OACxC,CAED,cAAA8kC,GAEE,OAAOnzC,KAAKqyC,wBAAwB,EACrC,CAED,OAAAQ,GAEE7yC,KAAKozC,aAELpzC,KAAK0yC,mBAAmBvc,QAAQ,EAAG,GAEnC,IAAK,IAAI1sB,EAAI,EAAGA,EAAIzJ,KAAKD,MAAO0J,IAChC,CACE,MAAM4pC,EAAM,IAAItd,EAAkB,EAAG,EAAG/1B,KAAKwyC,SACvCc,EAAM,IAAIvd,EAAkB,EAAG,EAAG/1B,KAAKwyC,SAE7Ca,EAAIhlC,QAAQskC,iBAAkB,EAC9BW,EAAIjlC,QAAQskC,iBAAkB,EAE9B3yC,KAAKqyC,wBAAwBnoC,KAAKmpC,GAClCrzC,KAAKsyC,sBAAsBpoC,KAAKopC,EACjC,CACF,CAED,SAAAN,CAAU5Q,EAAemR,GAEvB,GAAIvzC,KAAKkyC,gBAAkB9P,GAAiBpiC,KAAKmyC,iBAAmBoB,EAElE,OAGFvzC,KAAKkyC,cAAgB9P,EACrBpiC,KAAKmyC,eAAiBoB,EAEtB,IAAInrB,EAAQ1T,KAAKC,MAAMytB,EAAgB,GACnCnZ,EAASvU,KAAKC,MAAM4+B,EAAiB,GAEzCvzC,KAAK0yC,mBAAmBvc,QAAQ/N,EAAOa,GAEvC,IAAK,IAAIxf,EAAI,EAAGA,EAAIzJ,KAAKD,MAAO0J,IAE9BzJ,KAAKsyC,sBAAsB7oC,GAAG0sB,QAAQ/N,EAAOa,GAC7CjpB,KAAKqyC,wBAAwB5oC,GAAG0sB,QAAQ/N,EAAOa,GAC/CjpB,KAAKoyC,uBAAuB3oC,GAAGioC,SAAStpB,EAAOa,GAE/Cb,EAAU1T,KAAKC,MAAMyT,EAAQ,GAC7Ba,EAAUvU,KAAKC,MAAMsU,EAAS,EAEjC,CAED,cAAA2pB,CAAexQ,EAAemR,GAE5BvzC,KAAKwzC,oBAEL,IAAK,IAAI/pC,EAAI,EAAGA,EAAIzJ,KAAKD,MAAO0J,IAE9BzJ,KAAKoyC,uBAAuBloC,KAAK,IAAIknC,GAAqBpxC,KAAKuyC,gBAAgB9oC,IAElF,CAED,iBAAA+pC,GAEE,IAAK,IAAI/pC,EAAI,EAAGA,EAAIzJ,KAAKoyC,uBAAuBvsC,OAAQ4D,IAEtDzJ,KAAKoyC,uBAAuB3oC,GAAG5G,UAEjC7C,KAAKoyC,uBAAuBvsC,OAAS,CACtC,CAED,UAAAutC,GAEE,IAAK,IAAI3pC,EAAI,EAAGA,EAAIzJ,KAAKsyC,sBAAsBzsC,OAAQ4D,IAErDzJ,KAAKqyC,wBAAwB5oC,GAAG5G,UAChC7C,KAAKsyC,sBAAsB7oC,GAAG5G,UAEhC7C,KAAK0yC,mBAAmB7vC,UAExB7C,KAAKqyC,wBAAwBxsC,OAAS,EACtC7F,KAAKsyC,sBAAsBzsC,OAAS,CACrC,ECpIH,MAAM4tC,WAA0BjxC,GAE9B,WAAA7D,GAEEI,QAEAiB,KAAK0zC,uBAAoBxzC,EAEzBF,KAAK6wC,aAAU3wC,EACfF,KAAK2zC,aAAUzzC,EACfF,KAAK+wC,aAAU7wC,EAEfF,KAAK4zC,QAAU,IAAI9zC,EACpB,CAED,QAAA7B,GAEE+B,KAAK+wC,QAAU,IAAIkB,GACnBjyC,KAAK6wC,QAAU,IAAI9a,EAAkB5F,GAAQ/H,MAAO+H,GAAQlH,QAC5DjpB,KAAK2zC,QAAU,IAAI5d,EAAkB5F,GAAQ/H,MAAO+H,GAAQlH,QAE5DjpB,KAAK0zC,kBAAoB,IAAI9yC,GAA2B,GACxDZ,KAAK+wC,QAAU,IAAIkB,GAAgB,GAEnCjyC,KAAK0zC,kBAAkBjyC,SAASzB,KAAK+wC,QAAQuB,sBAAsB,GAAGjkC,SACtErO,KAAK0zC,kBAAkB/xC,SAAS3B,KAAK+wC,QAAQuB,sBAAsB,GAAGjkC,SACtErO,KAAK0zC,kBAAkB9xC,SAAS5B,KAAK+wC,QAAQuB,sBAAsB,GAAGjkC,SACtErO,KAAK0zC,kBAAkB7xC,SAAS7B,KAAK+wC,QAAQuB,sBAAsB,GAAGjkC,SACtErO,KAAK0zC,kBAAkB5xC,SAAS9B,KAAK+wC,QAAQuB,sBAAsB,GAAGjkC,SAEtErO,KAAK0zC,kBAAkB3xC,mBAAmB,GAC1C/B,KAAK0zC,kBAAkB1xC,iBAAiB,GAExChC,KAAK4zC,QAAQzzC,gBAAgBH,KAAK+wC,QAAQsB,wBAAwB,GAAGhkC,QACtE,CAED,kBAAAtM,CAAmB8xC,GAEjB7zC,KAAK0zC,kBAAkB3xC,mBAAmB8xC,EAC3C,CAED,gBAAA7xC,CAAiB6xC,GAEf7zC,KAAK0zC,kBAAkB1xC,iBAAiB6xC,EACzC,CAED,gBAAA5xC,CAAiBC,GAEflC,KAAK0zC,kBAAkBzxC,iBAAiBC,EACzC,CAED,gBAAAE,CAAiBF,GAEflC,KAAK0zC,kBAAkBtxC,iBAAiBF,EACzC,CAED,gBAAAG,CAAiBH,GAEflC,KAAK0zC,kBAAkBrxC,iBAAiBH,EACzC,CAED,gBAAAI,CAAiBJ,GAEflC,KAAK0zC,kBAAkBpxC,iBAAiBJ,EACzC,CAED,gBAAAK,CAAiBL,GAEflC,KAAK0zC,kBAAkBnxC,iBAAiBL,EACzC,CAED,MAAAO,GAEEzC,KAAKgxC,kBAELnN,GAAS9S,MAAM/wB,KAAK6wC,QAAS7c,GAActZ,SAAS,GAAM,GAC1DmpB,GAASphC,OAAO2wB,GAAa1Y,QAASsZ,GAActZ,QAAS1a,KAAK6wC,SAGlE7wC,KAAK+wC,QAAQT,KAAKtwC,KAAK6wC,SAAS,GAGhChN,GAAS9O,cAAc/0B,KAAK0zC,kBAAmB1zC,KAAK+wC,QAAQsB,wBAAwB,IAGpFxO,GAAStP,KAAKv0B,KAAK6wC,aAAS3wC,EAAWF,KAAK4zC,QAC7C,CAED,eAAA5C,GAEMhxC,KAAK6wC,QAAQzoB,QAAU+H,GAAQ/H,OAASpoB,KAAK6wC,QAAQ5nB,SAAWkH,GAAQlH,SAE1EjpB,KAAK6wC,QAAQ1a,QAAQhG,GAAQ/H,MAAO+H,GAAQlH,QAC5CjpB,KAAK2zC,QAAQxd,QAAQhG,GAAQ/H,MAAO+H,GAAQlH,QAE/C,ECtGH,MAAM6qB,WAAiBtxC,GAErB,WAAA7D,GAEEI,OACD,CAED,MAAA0D,GAIM2wB,GAAa1Y,QAAQnc,eAEvB60B,GAAa1Y,QAAQnc,gBAGnB60B,GAAa1Y,QAAQjY,OAEvB2wB,GAAa1Y,QAAQjY,SAIrBohC,GAASphC,OAAO2wB,GAAa1Y,QAASsZ,GAActZ,QAASmpB,GAASrN,UAAUnB,mBAGlFr1B,KAAK+zC,0BAED3gB,GAAa1Y,QAAQpc,gBAEvB80B,GAAa1Y,QAAQpc,gBAExB,CAED,uBAAAy1C,GAEE,MAAMC,EAAmBhgB,GAAclN,UAEvC,GAAIktB,GAAoBnQ,GAASrN,UAAUtqB,GAAG+nC,aAC9C,CAGE,MAAMC,EAAQrQ,GAASrN,UAAUtqB,GAAGioC,UAAUngB,GAActZ,SAE5Ds5B,EAAiB9C,iBAAiBrhB,KAAKmE,GAActZ,QAAQw2B,kBAE7D8C,EAAiBhhC,SAAS6c,KAAKqkB,EAAMlhC,UACrCghC,EAAiBrmB,WAAWkC,KAAKqkB,EAAMvmB,YAGvC,MAAMymB,EAAsBvQ,GAASrN,UAAUnB,kBAG/CwO,GAASrN,UAAUtqB,GAAG+nC,cAAe,EAGrCpQ,GAASrN,UAAUlB,gBAAgB,MACnCuO,GAASrN,UAAU/zB,OAAO2wB,GAAa1Y,QAASs5B,GAGhDnQ,GAASrN,UAAUlB,gBAAgB8e,GACnCvQ,GAASrN,UAAUtqB,GAAG+nC,cAAe,CACtC,CACF,ECAE,MAACI,GAAyB,IAjE/B,MAEE,WAAA11C,GAEEqB,KAAKs0C,WAAa,GAClBt0C,KAAKu0C,mBAAqB,IAAIC,GAC/B,CAED,MAAAp2C,GAEE4B,KAAKy0C,6BAEL,IAAK,MAAMC,KAAa10C,KAAKu0C,mBAE3BG,EAAUt2C,OAAOqmB,GAAkBrB,mBAEtC,CAED,kBAAAuxB,CAAmBD,GAEjB10C,KAAKs0C,WAAWpqC,KAAKwqC,EACtB,CAED,gBAAAE,CAAiBF,GAIf10C,KAAKu0C,mBAAmBp9B,IAAIu9B,EAC7B,CAED,iBAAAG,CAAkBH,GAIhB10C,KAAKu0C,mBAAmBO,OAAOJ,EAChC,CAED,qBAAAK,CAAsBC,GAEpBrxC,QAAQC,KAAK,oDACb5D,KAAKyF,IAAIuvC,EACV,CAED,GAAAvvC,CAAIuvC,GAEF,IAAK,IAAIvrC,EAAI,EAAGA,EAAIzJ,KAAKs0C,WAAWzuC,OAAQ4D,IAE1C,GAAIzJ,KAAKs0C,WAAW7qC,GAAGnB,OAAS0sC,EAE9B,OAAOh1C,KAAKs0C,WAAW7qC,GAG3B9F,QAAQM,MAAM,sDAAuD+wC,EAEtE,CAED,0BAAAP,GAEE,IAAK,IAAIhrC,EAAI,EAAGA,EAAIzJ,KAAKs0C,WAAWzuC,OAAQ4D,IAE1CzJ,KAAKs0C,WAAW7qC,GAAGmc,YAAYnB,GAAkBrB,mBAEpD,GCxDH,MAAM6xB,GAEJ,WAAAt2C,CAAYu2C,EAAoBnhB,EAAU+O,GAExCoS,EAAqBA,GAAsB,IAAIn3C,GAE/CiC,KAAKk1C,mBAAqBA,EAC1Bl1C,KAAK+zB,SAAWA,EAChB/zB,KAAK8iC,MAAQA,EAEb9iC,KAAKm1C,YAAa,EAClBn1C,KAAKo1C,cAAgB,EAErBp1C,KAAKq1C,iBAAmB,CACzB,CAED,MAAAj3C,GAEE,GAAK4B,KAAKm1C,WAAV,CAmBA,IAfAxxB,GAAKxB,WAGsB,IAAvBniB,KAAKo1C,eAEPp1C,KAAKk1C,mBAAmBl3C,gBAG1BgC,KAAK8iC,MAAM1kC,SAEX4B,KAAKq1C,kBAAoB1xB,GAAK7K,WAE9B9Y,KAAKk1C,mBAAmB/2C,gBACxBsmB,GAAkBtmB,gBAEX6B,KAAKq1C,iBAAmB1xB,GAAKhC,kBAElC3hB,KAAKk1C,mBAAmB72C,eACxBomB,GAAkBpmB,eAElB2B,KAAKq1C,kBAAoB1xB,GAAKhC,iBAEhCgC,GAAKzB,0BAA0BliB,KAAKq1C,iBAAmB1xB,GAAKhC,kBAE5D3hB,KAAKk1C,mBAAmB92C,SAExBqmB,GAAkBrmB,SAClBioB,GAAYjoB,SACZk3C,GAAqBl3C,SAErB4B,KAAKk1C,mBAAmB32C,gBAExByB,KAAK+zB,SAAS31B,SACd4uC,GAAG5uC,SACH4uC,GAAGvqC,OAAOzC,KAAK+zB,UACf/zB,KAAKk1C,mBAAmB52C,iBAExB2uC,GAAMxqC,OAAOzC,KAAK+zB,UAIlB/zB,KAAKk1C,mBAAmB12C,eACxBwB,KAAKo1C,gBAELp1C,KAAK8iC,MAAM/R,QACXic,GAAGjc,QACHkc,GAAMlc,OA/CL,CAgDF,CAED,KAAAxgB,GAEMvQ,KAAKm1C,aAEkB,IAAvBn1C,KAAKo1C,eAEPp1C,KAAKk1C,mBAAmBj3C,WAG1B+B,KAAKm1C,YAAa,EAElBn1C,KAAK+zB,SAASyC,UAAU+e,iBAAiBv1C,KAAK5B,OAAOyG,KAAK7E,OAC3D,CAED,IAAAuH,IAE0B,IAApBvH,KAAKm1C,aAETn1C,KAAKm1C,YAAa,EAClBn1C,KAAKk1C,mBAAmBh3C,UAExB8B,KAAK+zB,SAASyC,UAAU+e,iBAAiB,MAC1C,CAED,SAAA9xB,CAAU8U,GAERv4B,KAAKk1C,mBAAmBh3C,QAAQ8B,MAChCA,KAAKk1C,mBAAqB3c,EAC1Bv4B,KAAKk1C,mBAAmBj3C,SAAS+B,KAClC,CAED,OAAA6C,GAEE7C,KAAKuH,OACLvH,KAAKo1C,cAAgB,CACtB,EC7DE,MAACI,GAAS,IAnDf,MAEE,IAAA3uC,GAEElD,QAAQC,KAAK,uDACbusB,GAAQtpB,MACT,CAED,eAAAunB,CAAgBpY,EAAGC,GAEjBtS,QAAQC,KAAK,uDACbusB,GAAQ/B,gBAAgBpY,EAAGC,EAC5B,CAED,MAAA7X,GAEEuF,QAAQC,KAAK,uDACbusB,GAAQ/xB,QACT,CAED,WAAAkwB,CAAYlG,EAAOa,GAEjBtlB,QAAQC,KAAK,uDACbusB,GAAQ7B,YAAYlG,EAAOa,EAC5B,CAED,sBAAAsF,CAAuBC,GAGrB,OADA7qB,QAAQC,KAAK,uDACNusB,GAAQ5B,uBAAuBC,EACvC,CAED,mBAAAC,CAAoBvvB,GAGlB,OADAyE,QAAQC,KAAK,uDACNusB,GAAQ1B,oBAAoBvvB,EACpC,CAED,cAAAwvB,GAGE,OADA/qB,QAAQC,KAAK,uDACNusB,GAAQzB,gBAChB,CAED,gBAAIC,GAGF,OADAhrB,QAAQC,KAAK,uDACNusB,GAAQxB,YAChB,GChDI,MAAM8mB,GAEX,WAAA92C,EAAY2J,KAAEA,EAAI6d,UAAEA,IAElBnmB,KAAKsI,KAAOA,EACZtI,KAAKmmB,UAAYA,EACjBnmB,KAAK01C,QAAS,EAEdJ,GAAqBX,mBAAmB30C,KACzC,CAED,KAAAuQ,GAEC,CAED,QAAAtS,GAEE+B,KAAKmmB,UAAUG,UAAUC,OAAO,UAChC+uB,GAAqBV,iBAAiB50C,MAEtCA,KAAK01C,QAAS,CACf,CAED,MAAAt3C,GAEC,CAED,OAAAF,GAEE8B,KAAKmmB,UAAUG,UAAUnP,IAAI,UAC7Bm+B,GAAqBT,kBAAkB70C,MAEvCA,KAAK01C,QAAS,CACf,CAED,WAAA9vB,CAAYxC,GAEVpjB,KAAKmmB,UAAUM,MAAMD,QAAUpD,EAAmB,GAAGpjB,KAAKsI,gBAC1DtI,KAAK21C,eACN,CAED,aAAAA,GAEM31C,KAAKmmB,UAAUM,MAAMD,QAAU,KAE7BxmB,KAAK01C,QAEP11C,KAAK/B,WAKF+B,KAAK01C,QAER11C,KAAK9B,SAGV,ECvDH,MAAM03C,WAAwBppB,EAE5B,WAAA7tB,CAAYypB,EAAOa,EAAQoC,EAAOhY,GAEhC+U,EAAQA,GAAS,EACjBa,EAASA,GAAU,EACnBoC,EAAQA,GAAS,UACjBhY,EAAWA,GAAY,IAAIsZ,EAAkB,CAAEtB,MAAOA,IAEtD,MAAMxY,EAAW,IAAIif,EAAc1J,EAAOa,GAC1CpW,EAAS6a,SAAQ,MACjB3uB,MAAM8T,EAAUQ,EACjB,ECZH,MAAMwiC,WAAsBrpB,EAE1B,WAAA7tB,CAAYypB,EAAOa,EAAQoC,EAAOhY,GAEhC+U,EAAQA,GAAS,EACjBa,EAASA,GAAU,EACnBoC,EAAQA,GAAS,UACjBhY,EAAWA,GAAY,IAAIsZ,EAAkB,CAAEtB,MAAOA,IAGtDtsB,MADiB,IAAI+yB,EAAc1J,EAAOa,GAC1B5V,EACjB,ECfH,MAAMyiC,GAEJ,WAAAn3C,GACE,CAEF,oBAAOo3C,CAAcC,EAAQxgC,GAE3BA,EAAOtL,KAAK+rC,MAAMzgC,EAAQwgC,EAC3B,CAED,wBAAOE,CAAkBjjC,EAAOhQ,GAE9B,MAAMkzC,EAAmBlzC,EAAOgQ,EAAMpN,OAEtC,IAAK,IAAI4D,EAAI,EAAGA,EAAI0sC,EAAkB1sC,IAEpCwJ,EAAM/I,KAAK+I,EAAMxJ,GAAGtE,QAEvB,CAED,kBAAOixC,CAAYnjC,EAAOqwB,GAExB,MAAMlzB,EAAQ6C,EAAM7G,QAAQk3B,GACxBlzB,GAAS,GAEX6C,EAAMrF,OAAOwC,EAAO,EAEvB,CAED,wBAAOimC,CAAkBrhC,EAAQQ,GAE/B,IAAI8gC,EAAgBthC,EAAO,GACvB4wB,EAAmB0Q,EAAc5kB,WAAWlc,GAChD,IAAK,IAAI/L,EAAI,EAAGA,EAAIuL,EAAOnP,OAAQ4D,IAE7BuL,EAAOvL,GAAGioB,WAAWlc,GAAUowB,IAEjC0Q,EAAgBthC,EAAOvL,GACvBm8B,EAAmB5wB,EAAOvL,GAAGioB,WAAWlc,IAG5C,OAAO8gC,CACR,CAED,6BAAOC,CAAuBC,GAE5B,MAAMC,EAAMjuC,OAAOC,KAAK+tC,GAClBl/B,EAAM,GACZ,IAAK,IAAI7N,EAAI,EAAGA,EAAIgtC,EAAI5wC,OAAQ4D,IAE9B6N,EAAIpN,KAAKssC,EAAIC,EAAIhtC,KAEnB,OAAO6N,CACR,ECnDH,MAAMo/B,GAEJ,WAAA/3C,GAEEqB,KAAK0yB,OAAS,IAAI9F,CACnB,CAED,UAAAoX,CAAWhvB,EAAQivB,EAAmBC,EAAc1U,GAElDxvB,KAAK0yB,OAAOlH,cAAcxW,GAE1B,MAAMmvB,EAAQzvB,KAAK4B,SAAS4tB,EAAe,GACrCE,EAAS,EAAI1vB,KAAK2vB,KAAK3vB,KAAK4vB,IAAIH,GAAS3U,GAAW,EAEpD+U,EAAkBvkC,KAAKwkC,oBAAoBP,EAAmBE,GAC9DM,EAAoBzkC,KAAK0kC,sBAAsBT,EAAmBE,GAClEQ,EAAoB3kC,KAAK4kC,sBAAsBX,EAAmBG,GAClES,EAAqB7kC,KAAK8kC,uBAAuBb,EAAmBG,GAEpEW,EAAqB,IAAI7Z,EAAQ,EAAG,GAAI,GAAG8Z,gBAAgBf,GAE3DgB,EAAgBjlC,KAAK0yB,OAAOxb,OAAO/R,QAEnC+/B,EAAqBllC,KAAKmlC,yBAA8C,EAArBnlC,KAAK0yB,OAAOxJ,OAAiC,EAArBlpB,KAAK0yB,OAAOxJ,OAAYgb,EAAc1U,GACjH4V,EAAUH,EAAc9/B,QAAQgS,IAAI4tB,EAAmB5/B,QAAQiS,gBAAqC,EAAtB8tB,IAE9EG,GAAc,IAAIC,GAAQC,8BAA8BhB,EAAiBa,GACzEI,GAAc,IAAIF,GAAQC,8BAA8Bd,EAAmBW,GAE3EK,GAAe,IAAIH,GAAQC,8BAA8BZ,EAAmBS,GAC5EM,GAAe,IAAIJ,GAAQC,8BAA8BV,EAAoBO,GAEnFplC,KAAK2lC,+BAA+BP,EAASpwB,EAAQivB,EAAmBoB,EAAUG,EAAYC,EAAYC,GAE1GL,EAASE,8BAA8BhB,EAAiBa,GACxDI,EAAWD,8BAA8Bd,EAAmBW,GAE5DK,EAAWF,8BAA8BZ,EAAmBS,GAC5DM,EAAYH,8BAA8BV,EAAoBO,GAE9D,IAAIQ,EAAmBjrB,IAEvB,MAAMkrB,EAAcd,EAAmB5/B,QAAQiS,gBAAqC,EAAtB8tB,GAC9D,IAAK,IAAIz7B,EAAI,EAAGA,EAAIuL,EAAOnP,OAAQ4D,IACnC,CACE,MAAM0nB,EAAO,IAAI2U,EAAM9wB,EAAOvL,GAAGtE,QAAS6P,EAAOvL,GAAGtE,QAAQgS,IAAI0uB,IAE1DE,EAAwB,IAAI7a,EAC5B8a,EAAyB,IAAI9a,EAE7B+a,EAA0B,IAAI/a,EAC9Bgb,EAA0B,IAAIhb,EAEpCma,EAASc,cAAchV,EAAO4U,GAC9BP,EAAWW,cAAchV,EAAM6U,GAE/BP,EAAWU,cAAchV,EAAO8U,GAChCP,EAAYS,cAAchV,EAAM+U,GAE5BH,EAAqBlgC,SAAW,MAElClC,QAAQyW,IAAI,4BAA6B3Q,GAEvCu8B,EAAuBngC,SAAW,MAEpClC,QAAQyW,IAAI,8BAA+B3Q,GAEzCw8B,EAAuBpgC,SAAW,MAEpClC,QAAQyW,IAAI,8BAA+B3Q,GAEzCy8B,EAAwBrgC,SAAW,MAErClC,QAAQyW,IAAI,+BAAgC3Q,GAG9C,MAAM28B,EAAoBpxB,EAAOvL,GAAGtE,QAAQwsB,IAAIoU,GAAsBlgC,SAChEwgC,EAAoBrxB,EAAOvL,GAAGtE,QAAQwsB,IAAIqU,GAAwBngC,SAElEygC,EAAsBtxB,EAAOvL,GAAGtE,QAAQwsB,IAAIsU,GAAwBpgC,SACpE0gC,EAAsBvxB,EAAOvL,GAAGtE,QAAQwsB,IAAIuU,GAAyBrgC,SAErE2gC,EAAkB9xB,KAAKP,IAAIiyB,EAAiBC,GAC5CI,EAAkB/xB,KAAKP,IAAImyB,EAAmBC,GAE9CpyB,EAAMO,KAAKP,IAAIqyB,EAAcC,GAE/BtyB,EAAMyxB,IAERA,EAAmBzxB,EAEtB,CAED,MAAMuyB,EAAqB3B,EAAmB5/B,QAAQiS,eAAewuB,GAGrE,OAFyBR,EAAQjgC,QAAQgS,IAAIuvB,EAG9C,CAED,8BAAAf,CAA+BgB,EAAY3xB,EAAQivB,EAAmBoB,EAAUG,EAAYC,EAAYC,GAEtG,MAAMkB,EAAkB5mC,KAAK6mC,wBAAwB7xB,EAAQwwB,EAAYH,EAAUpB,GAC7E6C,EAAoB9mC,KAAK22C,0BAA0B3hC,EAAQywB,EAAYC,EAAazB,GAE1F0C,EAAWxvB,IAAIyvB,GACfD,EAAWxvB,IAAI2vB,EAChB,CAED,uBAAAD,CAAwB7xB,EAAQwwB,EAAYH,EAAUpB,GAEpD,IAEI2S,EACAC,EAHA7P,EAA+BrsB,IAC/BssB,EAAkCtsB,IAItC,MAAMusB,EAAS,IAAIhc,EAAQ,EAAG,EAAG,GAAG8Z,gBAAgBf,GACpD,IAAK,IAAIx6B,EAAI,EAAGA,EAAIuL,EAAOnP,OAAQ4D,IACnC,CACE,MAAM09B,EAAc,IAAIrB,EAAM9wB,EAAOvL,GAAGtE,QAAS6P,EAAOvL,GAAGtE,QAAQgS,IAAI+vB,EAAO/hC,QAAQiS,gBAAgB,OAChGgwB,EAAc,IAAItB,EAAM9wB,EAAOvL,GAAGtE,QAAS6P,EAAOvL,GAAGtE,QAAQgS,IAAI+vB,EAAO/hC,QAAQiS,eAAe,OAE/F4uB,EAA0B,IAAI9a,EAC9B6a,EAAuB,IAAI7a,EAEjCsa,EAAWW,cAAcgB,EAAYnB,GACrCX,EAASc,cAAciB,EAASrB,GAEhC,MAAMsB,EAAcrB,EAAuBtU,WAAW1c,EAAOvL,IACvD69B,EAAcvB,EAAqBrU,WAAW1c,EAAOvL,IAEvDs8B,EAAqBlgC,SAAW,MAElClC,QAAQyW,IAAI,qCAAsC3Q,GAEhDu8B,EAAuBngC,SAAW,MAEpClC,QAAQyW,IAAI,uCAAwC3Q,GAGlD49B,EAAYJ,IAEdA,EAAiCI,EACjCwP,EAAqB7hC,EAAOvL,IAE1B69B,EAAUN,IAEZA,EAA+BM,EAC/BsP,EAAmB5hC,EAAOvL,GAE7B,CAED9F,QAAQyW,IAAIw8B,EAAkBC,GAE9B,MAAMtP,GAAcP,EAA+BC,GAAkC,EAGrF,OAAOC,EAAO/hC,QAAQiS,gBAAgBmwB,EACvC,CAED,yBAAAoP,CAA0B3hC,EAAQywB,EAAYC,EAAazB,GAEzD,IAEI6S,EACAC,EAHAvP,EAAkC7sB,IAClC8sB,EAAkC9sB,IAItC,MAAM+sB,EAAY,IAAIxc,EAAQ,EAAG,EAAG,GAAG8Z,gBAAgBf,GAEvD,IAAK,IAAIx6B,EAAI,EAAGA,EAAIuL,EAAOnP,OAAQ4D,IACnC,CACE,MAAMk+B,EAAa,IAAI7B,EAAM9wB,EAAOvL,GAAGtE,QAAS6P,EAAOvL,GAAGtE,QAAQgS,IAAIuwB,EAAUviC,QAAQiS,gBAAgB,OAClGwwB,EAAa,IAAI9B,EAAM9wB,EAAOvL,GAAGtE,QAAS6P,EAAOvL,GAAGtE,QAAQgS,IAAIuwB,EAAUviC,QAAQiS,eAAe,OAEjG6uB,EAA0B,IAAI/a,EAC9Bgb,EAA0B,IAAIhb,EAEpCua,EAAWU,cAAcwB,EAAY1B,GACrCP,EAAYS,cAAcyB,EAAY1B,GAEtC,MAAM2B,EAAa5B,EAAuBvU,WAAW1c,EAAOvL,IACtDq+B,EAAa5B,EAAwBxU,WAAW1c,EAAOvL,IAEzDw8B,EAAuBpgC,SAAW,MAEpClC,QAAQyW,IAAI,8BAA+B3Q,GAEzCy8B,EAAwBrgC,SAAW,MAErClC,QAAQyW,IAAI,+BAAgC3Q,GAG1Co+B,EAAYJ,IAEdA,EAAiCI,EACjCkP,EAAqB/hC,EAAOvL,IAE1Bq+B,EAAaN,IAEfA,EAAkCM,EAClCgP,EAAsB9hC,EAAOvL,GAEhC,CAED,MAAM89B,GAAcC,EAAkCC,GAAkC,EAKxF,OAFA9jC,QAAQyW,IAAI08B,EAAqBC,GAE1BrP,EAAUviC,QAAQiS,gBAAgBmwB,EAC1C,CAED,mBAAA/C,CAAoBP,EAAmBE,GAErC,MAAMI,EAAkB,IAAIrZ,EAAQ,GAAI,EAAG,GAG3C,OAFAqZ,EAAgBS,iBAAgB,IAAI+C,GAAaC,iBAAiB,IAAI9c,EAAQ,EAAG,EAAG,GAAIiZ,IACxFI,EAAgBS,gBAAgBf,GACzBM,CACR,CAED,qBAAAG,CAAsBT,EAAmBE,GAEvC,MAAMM,EAAoB,IAAIvZ,EAAQ,EAAG,EAAG,GAG5C,OAFAuZ,EAAkBO,iBAAgB,IAAI+C,GAAaC,iBAAiB,IAAI9c,EAAQ,EAAG,EAAG,IAAKiZ,IAC3FM,EAAkBO,gBAAgBf,GAC3BQ,CACR,CAED,qBAAAG,CAAsBX,EAAmBG,GAEvC,MAAMO,EAAoB,IAAIzZ,EAAQ,EAAG,EAAG,GAG5C,OAFAyZ,EAAkBK,iBAAgB,IAAI+C,GAAaC,iBAAiB,IAAI9c,EAAQ,EAAG,EAAG,GAAIkZ,IAC1FO,EAAkBK,gBAAgBf,GAC3BU,CACR,CAED,sBAAAG,CAAuBb,EAAmBG,GAExC,MAAMS,EAAqB,IAAI3Z,GAAS,EAAG,EAAG,GAG9C,OAFA2Z,EAAmBG,iBAAgB,IAAI+C,GAAaC,iBAAiB,IAAI9c,EAAQ,EAAG,EAAG,IAAKkZ,IAC5FS,EAAmBG,gBAAgBf,GAC5BY,CACR,CAED,wBAAAM,CAAyB/c,EAAOa,EAAQib,EAAc1U,GAEpD,MAAM2U,EAASD,EAAe,EAAKxvB,KAAK8B,GAAK,IACvC4tB,EAAS,EAAI1vB,KAAK2vB,KAAK3vB,KAAK4vB,IAAIH,GAAS3U,GAAW,EAEpDyY,EAAQhf,EAASvU,KAAK4vB,IAAIH,GAC1B+D,EAAQ9f,EAAQ1T,KAAK4vB,IAAIF,GAC/B,OAAO1vB,KAAKN,IAAIM,KAAKqB,IAAImyB,GAAQxzB,KAAKqB,IAAIkyB,GAC3C,EC1PH,MAAM+O,GAEJ,sCAAOC,CAAgCC,GAErC,MAAMC,EAAUD,EAAgB9mC,MAC1BgnC,EAAYF,EAAgBt4B,aAAa,YAGzCy4B,EAAW,GAEjB,IAAK,IAAI5tC,EAAI,EAAGA,EAAI0tC,EAAQ1U,MAAOh5B,GAAK,EAGtC4tC,EAASntC,KAAKktC,EAAUE,KAAKH,EAAQlkC,MAAMxJ,EAAI,KAC/C4tC,EAASntC,KAAKktC,EAAUG,KAAKJ,EAAQlkC,MAAMxJ,EAAI,KAC/C4tC,EAASntC,KAAKktC,EAAUI,KAAKL,EAAQlkC,MAAMxJ,EAAI,KAQ/C4tC,EAASntC,KAAKktC,EAAUE,KAAKH,EAAQlkC,MAAMxJ,EAAI,KAC/C4tC,EAASntC,KAAKktC,EAAUG,KAAKJ,EAAQlkC,MAAMxJ,EAAI,KAC/C4tC,EAASntC,KAAKktC,EAAUI,KAAKL,EAAQlkC,MAAMxJ,EAAI,KAQ/C4tC,EAASntC,KAAKktC,EAAUE,KAAKH,EAAQlkC,MAAMxJ,EAAI,KAC/C4tC,EAASntC,KAAKktC,EAAUG,KAAKJ,EAAQlkC,MAAMxJ,EAAI,KAC/C4tC,EAASntC,KAAKktC,EAAUI,KAAKL,EAAQlkC,MAAMxJ,EAAI,KAOjD,MAAMoJ,EAAW,IAAI0Y,EAIrB,OAFA1Y,EAAS+U,aAAa,WAAY,IAAI+a,EAAgB,IAAIzvB,aAAamkC,GAAW,IAClFL,GAAkBS,0BAA0B5kC,GACrCA,CACR,CAED,gCAAO4kC,CAA0BC,GAE/B,MAAMC,EAAkB,GAClBP,EAAYM,EAA4B94B,aAAa,YAE3D,IAAK,IAAInV,EAAI,EAAGA,EAAI2tC,EAAU3U,MAAOh5B,GAAK,EAExCkuC,EAAgBztC,KAAK,GACrBytC,EAAgBztC,KAAK,GACrBytC,EAAgBztC,KAAK,GAErBytC,EAAgBztC,KAAK,GACrBytC,EAAgBztC,KAAK,GACrBytC,EAAgBztC,KAAK,GAErBytC,EAAgBztC,KAAK,GACrBytC,EAAgBztC,KAAK,GACrBytC,EAAgBztC,KAAK,GAEvBwtC,EAA4B9vB,aAAa,cAAe,IAAI+a,EAAgB,IAAIzvB,aAAaykC,GAAkB,GAChH,ECxEH,MAAMC,GAEJ,kBAAOC,CAAY1xB,GAEjB,MAAM2xB,EAAS3xB,EAAU7H,iBAAiB,OAE1C,IAAK,IAAI7U,EAAI,EAAGA,EAAIquC,EAAOjyC,OAAQ4D,IACnC,CACE,MAAM8E,EAAQupC,EAAOruC,GAEjB8E,EAAMwpC,QAAQtpC,MAEhBF,EAAME,IAAMF,EAAMwpC,QAAQtpC,IAE7B,CAED,MAAMupC,EAAgB7xB,EAAU7H,iBAAiB,UAEjD,IAAK,IAAI7U,EAAI,EAAGA,EAAIuuC,EAAcnyC,OAAQ4D,IAC1C,CACE,MAAMwuC,EAAeD,EAAcvuC,GAE/BwuC,EAAaF,QAAQtpC,MAEvBwpC,EAAa/xC,KAAO+xC,EAAaF,QAAQtpC,IAE5C,CACF,CAED,kBAAOypC,CAAY/xB,GAEjB,MAAMgyB,EAAShyB,EAAU7H,iBAAiB,SAE1C,IAAK,IAAI7U,EAAI,EAAGA,EAAI0uC,EAAOtyC,OAAQ4D,IACnC,CACE,MAAM2uC,EAAQD,EAAO1uC,GAEjB2uC,EAAML,QAAQtpC,MAEhB2pC,EAAM3pC,IAAM2pC,EAAML,QAAQtpC,IAE7B,CACF,CAED,mBAAO4pC,CAAalyB,GAElB,MAAMmyB,EAAUnyB,EAAU7H,iBAAiB,UAE3C,IAAK,IAAI7U,EAAI,EAAGA,EAAI6uC,EAAQzyC,OAAQ4D,IACpC,CACE,MAAM8uC,EAASD,EAAQ7uC,GAEnB8uC,EAAOR,QAAQtpC,MAEjB8pC,EAAO9pC,IAAM8pC,EAAOR,QAAQtpC,IAE/B,CACF,CAED,oBAAO+pC,CAAcryB,EAAWsyB,GAE9B,MAAM/iC,EAAWyQ,EAAU7H,iBAAiBm6B,GAE5C,IAAK,IAAIhvC,EAAI,EAAGA,EAAIiM,EAAS7P,OAAQ4D,IACrC,CACE,MAAM2W,EAAU1K,EAASjM,GAErB2W,EAAQ23B,QAAQtpC,MAElB2R,EAAQ3R,IAAM2R,EAAQ23B,QAAQtpC,IAEjC,CACF,ECtEH,MAAMiqC,GAEJ,WAAA/5C,GACG,CAEH,qBAAOg6C,CAAepqC,GAEpB,MAAM2Y,EAASvB,SAASwB,cAAc,UACtCD,EAAOkB,MAAQ7Z,EAAM6Z,MACrBlB,EAAO+B,OAAS1a,EAAM0a,OAEtB,MAAMvmB,EAAUwkB,EAAOrf,WAAW,MAGlC,OAFAnF,EAAQo4B,UAAUvsB,EAAO,EAAG,GAErB7L,EAAQk2C,aAAa,EAAG,EAAGrqC,EAAM6Z,MAAO7Z,EAAM0a,OACtD,CAED,gBAAO4vB,CAAUC,EAAW9iC,EAAGC,GAE7B,MAAMjD,EAAuC,GAA3BgD,EAAI8iC,EAAU1wB,MAAQnS,GAClC/P,EAAO4yC,EAAU5yC,KACvB,OAAO,IAAI6rB,EAAQ7rB,EAAK8M,EAAW,GAAI9M,EAAK8M,EAAW,GAAI9M,EAAK8M,EAAW,GAAI9M,EAAK8M,EAAW,GAChG,ECoLE,MAAC+lC,GAAe,IA1MrB,MAEE,WAAAp6C,GAGC,CAED,MAAAq6C,CAAOzrB,EAAiB0rB,GAEtB,MAAMC,EAAa,GAEnB,IAAIC,EAAW,SAEf,MAAM9B,EAAW9pB,EAAgB3O,aAAa,YACxCw6B,EAAU7rB,EAAgB3O,aAAa,UACvCy6B,EAAW9rB,EAAgB3O,aAAa,WACxCgkB,EAAMrV,EAAgB3O,aAAa,MACnCu4B,EAAW5pB,EAAgBnd,MAE3BkpC,EAAQ,GAEd,IAAK,IAAI7vC,EAAI,EAAGA,EAAI0tC,EAAQ1U,MAAOh5B,GAAK,EACxC,CACE,MAAM8vC,EAAUpC,EAAQlkC,MAAMxJ,EAAI,GAC5B+vC,EAAUrC,EAAQlkC,MAAMxJ,EAAI,GAC5BgwC,EAAUtC,EAAQlkC,MAAMxJ,EAAI,GAE5BiwC,EAAK,IAAIxuB,EACfwuB,EAAG1jC,EAAIqhC,EAASC,KAAKiC,GACrBG,EAAGzjC,EAAIohC,EAASE,KAAKgC,GACrBG,EAAG1iC,EAAIqgC,EAASG,KAAK+B,GAErB,MAAMI,EAAK,IAAIzuB,EACfyuB,EAAG3jC,EAAIqhC,EAASC,KAAKkC,GACrBG,EAAG1jC,EAAIohC,EAASE,KAAKiC,GACrBG,EAAG3iC,EAAIqgC,EAASG,KAAKgC,GAErB,MAAM9X,EAAK,IAAIxW,EACfwW,EAAG1rB,EAAIqhC,EAASC,KAAKmC,GACrB/X,EAAGzrB,EAAIohC,EAASE,KAAKkC,GACrB/X,EAAG1qB,EAAIqgC,EAASG,KAAKiC,GAErB,MAAMG,EAAO,CACXp6B,EAAGk6B,EACH5kC,EAAG6kC,EACHE,EAAGnY,GAGL,GAAI0X,EACJ,CACE,MAAM97B,EAAK,IAAI4N,EACf5N,EAAGtH,EAAIojC,EAAQ9B,KAAKiC,GACpBj8B,EAAGrH,EAAImjC,EAAQ7B,KAAKgC,GACpBj8B,EAAGtG,EAAIoiC,EAAQ5B,KAAK+B,GAEpB,MAAMO,EAAK,IAAI5uB,EACf4uB,EAAG9jC,EAAIojC,EAAQ9B,KAAKkC,GACpBM,EAAG7jC,EAAImjC,EAAQ7B,KAAKiC,GACpBM,EAAG9iC,EAAIoiC,EAAQ5B,KAAKgC,GAEpB,MAAMO,EAAK,IAAI7uB,EACf6uB,EAAG/jC,EAAIojC,EAAQ9B,KAAKmC,GACpBM,EAAG9jC,EAAImjC,EAAQ7B,KAAKkC,GACpBM,EAAG/iC,EAAIoiC,EAAQ5B,KAAKiC,GAEpB,MAAMtmC,EAASmK,EAAGnY,QAAQgS,IAAI2iC,GAAI3iC,IAAI4iC,GAAIxpB,YAC1CqpB,EAAKzmC,OAASA,CACf,CAED,GAAIkmC,EACJ,CACE,MAAM/7B,EAAK,IAAI4N,EACf5N,EAAGtH,EAAIqjC,EAAS/B,KAAKiC,GACrBj8B,EAAGrH,EAAIojC,EAAS9B,KAAKgC,GACrBj8B,EAAGtG,EAAIqiC,EAAS7B,KAAK+B,GAErB,MAAMO,EAAK,IAAI5uB,EACf4uB,EAAG9jC,EAAIqjC,EAAS/B,KAAKkC,GACrBM,EAAG7jC,EAAIojC,EAAS9B,KAAKiC,GACrBM,EAAG9iC,EAAIqiC,EAAS7B,KAAKgC,GAErB,MAAMO,EAAK,IAAI7uB,EACf6uB,EAAG/jC,EAAIqjC,EAAS/B,KAAKmC,GACrBM,EAAG9jC,EAAIojC,EAAS9B,KAAKkC,GACrBM,EAAG/iC,EAAIqiC,EAAS7B,KAAKiC,GAErB,MAAMO,EAAU18B,EAAGnY,QAAQgS,IAAI2iC,GAAI3iC,IAAI4iC,GAAIxpB,YAC3CqpB,EAAKI,QAAUA,CAChB,CACD,GAAIpX,EACJ,CACE,MAAMqX,EAAO,IAAI76C,EACjB66C,EAAKjkC,EAAI4sB,EAAI0U,KAAKiC,GAClBU,EAAKhkC,EAAI2sB,EAAI2U,KAAKgC,GAElB,MAAMW,EAAO,IAAI96C,EACjB86C,EAAKlkC,EAAI4sB,EAAI0U,KAAKkC,GAClBU,EAAKjkC,EAAI2sB,EAAI2U,KAAKiC,GAElB,MAAMW,EAAO,IAAI/6C,EACjB+6C,EAAKnkC,EAAI4sB,EAAI0U,KAAKmC,GAClBU,EAAKlkC,EAAI2sB,EAAI2U,KAAKkC,GAElBG,EAAKK,KAAOA,EACZL,EAAKM,KAAOA,EACZN,EAAKO,KAAOA,CACb,CAEDb,EAAMpvC,KAAK0vC,GAEX,MAAMQ,EAAOp6C,KAAKq6C,cAAcT,GAChCT,EAAWzkC,KAAKP,IAAIimC,EAAMjB,GAC1BD,EAAWhvC,KAAKkwC,EACjB,CAED,MAAME,EAAyBt6C,KAAKu6C,8BAA8BrB,EAAYC,EAAUG,GAClFkB,EAAiBx6C,KAAKy6C,oBAAoBH,EAAwBrB,GAExE,OADqBj5C,KAAK06C,uBAAuBF,EAElD,CAED,sBAAAE,CAAuBpB,GAErB,MAAMqB,EAAiB,GACjBC,EAAkB,GAClBC,EAAmB,GACnBC,EAAc,GAEpB,IAAK,IAAIrxC,EAAI,EAAGA,EAAI6vC,EAAMzzC,OAAQ4D,IAClC,CACE,MAAMmwC,EAAON,EAAM7vC,GAEbsxC,EAAKrmC,KAAK+C,SACVujC,EAAKtmC,KAAK+C,SAEhBkjC,EAAezwC,KAAKlK,KAAKi7C,qBAAqBF,EAAIC,EAAIpB,EAAKp6B,EAAGo6B,EAAK9kC,EAAG8kC,EAAKC,GAAG10C,SAC1Ey0C,EAAKzmC,QAEPynC,EAAgB1wC,KAAK0vC,EAAKzmC,OAAOhO,SAE/By0C,EAAKI,SAEPa,EAAiB3wC,KAAK0vC,EAAKI,QAAQ70C,SAEjCy0C,EAAKK,MAEPa,EAAY5wC,KAAKlK,KAAKi7C,qBAAqBF,EAAIC,EAAIpB,EAAKK,KAAML,EAAKM,KAAMN,EAAKO,MAAMh1C,QAEvF,CACD,MAAO,CAAE6P,OAAQ2lC,EAAgBvB,QAASwB,EAAiBvB,SAAUwB,EAAkBjY,IAAKkY,EAC7F,CAED,mBAAAL,CAAoBnB,EAAO4B,GAEzB,MAAMV,EAAiB,GACvB,IAAK,IAAI/wC,EAAI,EAAGA,EAAIyxC,EAAQzxC,IAC5B,CACE,MACM0xC,EAAgB7B,EADP5kC,KAAK8C,MAAM9C,KAAK+C,SAAW6hC,EAAMzzC,SAGhD20C,EAAetwC,KAAKixC,EACrB,CAED,OAAOX,CACR,CAED,6BAAAD,CAA8BrB,EAAYkC,EAAc9B,GAEtD,MAAM+B,EAA4B,GAClC,IAAK,IAAI5xC,EAAI,EAAGA,EAAIyvC,EAAWrzC,OAAQ4D,IACvC,CACEyvC,EAAWzvC,IAAM2xC,EACjB,MAAME,EAAqB5mC,KAAK8C,MAAM9C,KAAKC,MAAMukC,EAAWzvC,KAC5D,IAAK,IAAI8xC,EAAI,EAAGA,EAAID,EAAoBC,IAEtCF,EAA0BnxC,KAAKovC,EAAM7vC,GAExC,CACD,OAAO4xC,CACR,CAED,aAAAhB,CAAcT,GAEZ,MAAM4B,EAAO5B,EAAK9kC,EAAE3P,QAAQwsB,IAAIioB,EAAKp6B,GAC/Bi8B,EAAO7B,EAAKC,EAAE10C,QAAQwsB,IAAIioB,EAAKp6B,GACrC,OAAOg8B,EAAKtR,MAAMuR,GAAM51C,SAAW,CACpC,CAED,oBAAAo1C,CAAqBF,EAAIC,EAAItB,EAAIC,EAAIjY,GAE/BqZ,EAAKC,EAAK,IAEZD,EAAK,EAAMA,EACXC,EAAK,EAAMA,GAGb,MAAMU,EAAK,GAAOX,EAAKC,GAEvB,OAAOtB,EAAGv0C,QAAQiS,eAAe2jC,GAAI5jC,IAAIwiC,EAAGx0C,QAAQiS,eAAe4jC,IAAK7jC,IAAIuqB,EAAGv8B,QAAQiS,eAAeskC,GACvG,GCzCE,MAACC,GAAkB,IA5JxB,MAEE,QAAAla,CAAShxB,EAAOmrC,GAEdnrC,EAAMkC,UAAUC,IAEVA,aAAiB4Z,IAEf5Z,EAAMC,WAERD,EAAMC,UAAW,IAAI0Y,GAAiBswB,aAAajpC,EAAMC,WAE3D+oC,EAAgBhpC,GACjB,GAEJ,CAED,cAAAkpC,CAAerrC,GAEb,MAAMsrC,EAAa,GAMnB,OAJA/7C,KAAKyhC,SAAShxB,GAAQmC,IAEpBmpC,EAAW7xC,KAAK0I,EAAMC,SAAS,IAE1BkpC,CACR,CAED,eAAAC,CAAgBvrC,EAAO4C,EAAU/K,GAE/BmI,EAAMkC,UAAUC,IAEVA,aAAiB4Z,SAGNtsB,IAAToI,GAOEsK,EAAMtK,OAASA,KALnBsK,EAAMS,SAAWA,EAUpB,GAEJ,CAED,mBAAA4oC,CAAoB/wC,GAElB,MAAM/F,EAAQ,CACZ+2C,WAAYhxC,EAAKgxC,WACjBzrC,MAAOvF,EAAKuF,MAAMtL,OAAM,IAGpBg3C,EAAgB,CAAA,EAEtBjxC,EAAKuF,MAAMkC,UAAS8L,IAEdA,EAAK29B,gBAEPD,EAAc19B,EAAKnW,MAAQmW,EAC5B,IAGH,MAAM49B,EAAa,CAAA,EACbC,EAAqB,CAAA,EAE3Bn3C,EAAMsL,MAAMkC,UAAS8L,IAEfA,EAAK89B,SAEPF,EAAW59B,EAAKnW,MAAQmW,GAGtBA,EAAK29B,gBAEPE,EAAmB79B,EAAKnW,MAAQmW,EACjC,IAGH,IAAK,MAAMnW,KAAQ6zC,EACnB,CACE,MACMK,EADcL,EAAc7zC,GACLk0C,SACvBC,EAAmBH,EAAmBh0C,GAEtCo0C,EAAoB,GAE1B,IAAK,IAAIjzC,EAAI,EAAGA,EAAI+yC,EAASG,MAAM92C,SAAU4D,EAC7C,CACE,MAAMmzC,EAAYP,EAAWG,EAASG,MAAMlzC,GAAGnB,MAC/Co0C,EAAkBxyC,KAAK0yC,EACxB,CAEDH,EAAiB53C,KACf,IAAIg4C,EAASH,EAAmBF,EAASM,cACzCL,EAAiBM,YACpB,CAED,OAAO53C,CACR,CAED,iBAAA63C,CAAkBvsC,EAAOwsC,EAAMC,GAE7BzsC,EAAMkC,UAAUC,IAEVA,aAAiB4Z,IAEnB5Z,EAAMuqC,WAAaF,EACnBrqC,EAAMwqC,cAAgBF,EACvB,GAEJ,CAED,aAAAG,CAAc5sC,EAAOwvB,EAAa2b,GAEhCnrC,EAAMkC,UAAU6jC,IAEVA,EAAIluC,OAAS23B,GAEf2b,EAAgBpF,EACjB,GAEJ,CAED,UAAA8G,CAAW7sC,EAAOwvB,GAEhB,IAAI8K,EAQJ,OAPAt6B,EAAMkC,UAAU6jC,IAEVA,EAAIluC,OAAS23B,IAEf8K,EAASyL,EACV,IAEIzL,CACR,CAED,kBAAAwS,CAAmB9sC,EAAO+sC,GAExB,IAAIzS,EAQJ,OAPAt6B,EAAMkC,UAAU6jC,IAEVA,EAAI73C,YAAY2J,OAASk1C,IAE3BzS,EAASyL,EACV,IAEIzL,CACR,GC7JH,MAAM0S,GAEJ,gBAAOC,CAAUC,GAEf,OAAQA,GAAwB,iBAATA,IAAsBC,MAAMC,QAAQF,EAC5D,CAED,iBAAOG,CAAWtoC,KAAWuoC,GAE3B,IAAKA,EAAQl4C,OAAQ,OAAO2P,EAC5B,MAAMwgC,EAAS+H,EAAQz7B,QAEvB,GAAIm7B,GAAgBC,UAAUloC,IAAWioC,GAAgBC,UAAU1H,GAEjE,IAAK,MAAM/H,KAAO+H,EAEZyH,GAAgBC,UAAU1H,EAAO/H,KAE9Bz4B,EAAOy4B,IAAMzlC,OAAOkb,OAAOlO,EAAQ,CAAEy4B,CAACA,GAAM,CAAE,IACnDwP,GAAgBK,WAAWtoC,EAAOy4B,GAAM+H,EAAO/H,KAI/CzlC,OAAOkb,OAAOlO,EAAQ,CAAEy4B,CAACA,GAAM+H,EAAO/H,KAK5C,OAAOwP,GAAgBK,WAAWtoC,KAAWuoC,EAC9C,CAED,kBAAOC,CAAYv9B,GAGjB,IAAI+1B,EAAM,CAAA,EAEV,GAAqB,IAAjB/1B,EAAIw9B,UAGN,GAAIx9B,EAAI1N,WAAWlN,OAAS,EAC5B,CACE2wC,EAAI,eAAiB,GACrB,IAAK,IAAI+E,EAAI,EAAGA,EAAI96B,EAAI1N,WAAWlN,OAAQ01C,IAC3C,CACE,MAAM2C,EAAYz9B,EAAI1N,WAAW4qC,KAAKpC,GACtC/E,EAAI,eAAe0H,EAAUC,UAAYD,EAAUE,SACpD,CACF,OAEuB,IAAjB39B,EAAIw9B,WAEXzH,EAAM/1B,EAAI29B,WAIZ,GAAI39B,EAAI49B,gBAEN,IAAK,IAAI50C,EAAI,EAAGA,EAAIgX,EAAI69B,WAAWz4C,OAAQ4D,IAC3C,CACE,MAAMk0C,EAAOl9B,EAAI69B,WAAWX,KAAKl0C,GAC3B00C,EAAWR,EAAKQ,SACtB,QAA+B,IAAnB3H,EAAI2H,GAEd3H,EAAI2H,GAAYn+C,KAAKg+C,YAAYL,OAGnC,CACE,QAAoC,IAAxBnH,EAAI2H,GAAc,KAC9B,CACE,MAAMI,EAAM/H,EAAI2H,GAChB3H,EAAI2H,GAAY,GAChB3H,EAAI2H,GAAUj0C,KAAKq0C,EACpB,CACD/H,EAAI2H,GAAUj0C,KAAKlK,KAAKg+C,YAAYL,GACrC,CACF,CAEH,OAAOnH,CACR,EC9EH,MAAMgI,GAEJ,WAAA7/C,GACE,CAEF,uBAAO0Y,GAEL,MAAMonC,EAAY,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,KAC1E,IAAIC,EAAM,IAEV,IAAK,IAAIj1C,EAAI,EAAGA,EAAI,EAAGA,IACvB,CAEEi1C,GAAOD,EADO/pC,KAAK8C,MAAM9C,KAAK+C,SAAWgnC,EAAU54C,QAEpD,CAED,OAAO64C,CACR,CAED,iBAAOC,CAAW94B,GAEhB,MAAM+4B,EAAQ/4B,EAAOhY,MAAM,KAE3B,IAAK,IAAIpE,EAAI,EAAGA,EAAIm1C,EAAM/4C,OAAQ4D,IAEhCm1C,EAAMn1C,GAAKm1C,EAAMn1C,GAAG,GAAGsc,cAAgB64B,EAAMn1C,GAAGo1C,OAAO,GAGzD,OAAOD,EAAMpxC,KAAK,IACnB,CAED,8BAAOsxC,CAAwBj5B,GAE7B,OAAOA,EAAOk5B,OAAO,GAAGh5B,cAAgBF,EAAOtY,MAAM,EACtD,CAED,yBAAOyxC,CAAmBn5B,GAExB,OAAOA,EAAO9Z,cAAc0B,QAAQ,iBAAkBwY,GAAUA,EAAM1Y,OAAO,GAAGwY,eACjF,ECvCH,MAAMk5B,GAEJ,WAAAtgD,GACE,CAGF,cAAAugD,CAAeC,GAEbA,EAAWA,EAAStxC,MAAM,KAE1B,IAAIuxC,EAAQ/4C,OAAO84C,EAAS,IAC5BC,EAAgB,GAARA,EAAa,GAAK,IAE1B,IAAIC,EAAUh5C,OAAO84C,EAAS,IAC9BE,EAAoB,GAAVA,EAAe,IAEzB,IAAIC,EAAUj5C,OAAO84C,EAAS,IAG9B,OAFAG,GAAoB,IAEbF,EAAQC,EAAUC,CAC1B,ECpBH,MAAMC,GAEJ,WAAA5gD,GACE,CAEF,aAAOwH,CAAOC,GAEZ,OAAOC,OAAOD,KAAOA,GAAKA,EAAI,GAAM,CACrC,CAED,eAAOE,CAASF,GAEd,OAAOC,OAAOD,KAAOA,GAAKA,EAAI,GAAM,CACrC,CAED,gBAAO1C,CAAU0C,GAEf,OAAOpG,KAAKmG,OAAOC,IAAMpG,KAAKsG,SAASF,EACxC,CAED,cAAOo5C,CAAQC,GAEb,IAEEtnC,KAAKC,MAAMqnC,EACZ,CACD,MAAOl1C,GAEL,OAAO,CACR,CAED,OAAO,CACR,ECtBH,MAAMm1C,WAAalzB,EAEjB,WAAA7tB,GAEE,MAAM0U,EAAW,IAAI3U,EAAe,CAClCM,SAAU,CACR0B,OAAQ,CAAExB,MAAO,IAAIyB,EAAM,aAE7BrB,6OACAC,0WACAw4B,WAAY,CAAE4nB,aAAa,GAC3BztB,aAAa,EACb1yB,YAAY,IAGRogD,EAAiB,IAAI9tB,EAAc,IAAK,IAAK,IAAK,KAIxD/yB,MAF6Bi4C,GAAkBC,gCAAgC2I,GAEnDvsC,GAE5BrT,KAAK6/C,SAAS7pC,GAAI,IACnB,ECvBH,MAAM0V,WAAac,EAEjB,WAAA7tB,CAAYqW,GAEV,MAAMnC,EAAW,IAAI0Y,EACrB1Y,EAAS+U,aAAa,WAAsB,IAAI+a,EAAgB,IAAIzvB,aAAa,IAAK,IACtFL,EAAS+U,aAAa,gBAAsB,IAAI+a,EAAgB,IAAIzvB,aAAa,IAAK,IACtFL,EAAS+U,aAAa,oBAAsB,IAAI+a,EAAgB,IAAIzvB,aAAa,IAAK,IACtFL,EAAS+U,aAAa,cAAsB,IAAI+a,EAAgB,IAAIzvB,aAAa,IAAK,IACtFL,EAAS+U,aAAa,WAAsB,IAAI+a,EAAgB,IAAIzvB,aAAa,IAAK,IAiBtFnU,MAAM8T,EAfW,IAAInU,EAAe,CAClCM,SAAU,CACR8gD,WAAY,CAAE5gD,MAAO,IACrB6gD,QAAS,CAAE7gD,MAAO,GAClB8gD,aAAc,CAAE9gD,MAAO,GACvBwB,OAAQ,CAAExB,MAAO,IAAIyB,EAAM,aAE7BrB,+sBACAC,8jBACA2yB,aAAa,EACb1yB,YAAY,EACZu4B,WAAY,CAAE4nB,aAAa,MAMzB3qC,GAEFhV,KAAKigD,MAAMjrC,EAEd,CAED,KAAAirC,CAAMjrC,GAEJ,MAAMqiC,EAAW,GACX6I,EAAgB,GAChBC,EAAoB,GACpBC,EAAc,GACdC,EAAW,GACjB,IAAIC,EAAqB,EAEzB,IAAK,IAAI72C,EAAI,EAAGA,EAAIuL,EAAOnP,OAAQ4D,IACnC,CACE4tC,EAASntC,KAAK8K,EAAOvL,GAAGuM,GACxBqhC,EAASntC,KAAK8K,EAAOvL,GAAGwM,GACxBohC,EAASntC,KAAK8K,EAAOvL,GAAGuN,GACxBopC,EAAYl2C,KAAK,GAEjBmtC,EAASntC,KAAK8K,EAAOvL,GAAGuM,GACxBqhC,EAASntC,KAAK8K,EAAOvL,GAAGwM,GACxBohC,EAASntC,KAAK8K,EAAOvL,GAAGuN,GACxBopC,EAAYl2C,MAAM,GAElB,MAAMq2C,EAAavgD,KAAKwgD,oBAAoBxrC,EAAQvL,GACpDy2C,EAAch2C,KAAKq2C,EAAWvqC,GAC9BkqC,EAAch2C,KAAKq2C,EAAWtqC,GAC9BiqC,EAAch2C,KAAKq2C,EAAWvpC,GAE9BkpC,EAAch2C,KAAKq2C,EAAWvqC,GAC9BkqC,EAAch2C,KAAKq2C,EAAWtqC,GAC9BiqC,EAAch2C,KAAKq2C,EAAWvpC,GAE9B,MAAMypC,EAAiBzgD,KAAK0gD,wBAAwB1rC,EAAQvL,GAC5D02C,EAAkBj2C,KAAKu2C,EAAezqC,GACtCmqC,EAAkBj2C,KAAKu2C,EAAexqC,GACtCkqC,EAAkBj2C,KAAKu2C,EAAezpC,GAEtCmpC,EAAkBj2C,KAAKu2C,EAAezqC,GACtCmqC,EAAkBj2C,KAAKu2C,EAAexqC,GACtCkqC,EAAkBj2C,KAAKu2C,EAAezpC,GAEtCqpC,EAASn2C,KAAKo2C,GACdD,EAASn2C,KAAKo2C,GAEV72C,EAAIuL,EAAOnP,OAAS,IAEtBy6C,GAAsBtrC,EAAOvL,GAAGioB,WAAW6uB,GAE9C,CACD,MAAMI,EAAwB,IAAIztC,aAAamkC,GACzCuJ,EAAwB,IAAI1tC,aAAagtC,GACzCW,EAAwB,IAAI3tC,aAAaitC,GACzCW,EAAwB,IAAI5tC,aAAaktC,GACzCW,EAAwB,IAAI7tC,aAAamtC,GAEzClJ,EAAU,GAChB,IAAK,IAAI1tC,EAAI,EAAGA,GAAMk3C,EAAW96C,OAAS,EAAK,GAAK,EAAG4D,IACvD,CACE,MAAM2G,EAAa,EAAJ3G,EAAS,EACxB0tC,EAAQjtC,KAAKkG,GACb+mC,EAAQjtC,KAAKkG,EAAQ,GACrB+mC,EAAQjtC,KAAKkG,EAAQ,GAErB+mC,EAAQjtC,KAAKkG,GACb+mC,EAAQjtC,KAAKkG,EAAQ,GACrB+mC,EAAQjtC,KAAKkG,EAAQ,EACtB,CAEDpQ,KAAK6S,SAASmuC,SAAS7J,GACvBn3C,KAAK6S,SAAS+L,aAAa,YAAYiR,KAAK,IAAI8S,EAAgBge,EAAY,IAC5E3gD,KAAK6S,SAAS+L,aAAa,iBAAiBiR,KAAK,IAAI8S,EAAgBie,EAAkB,IACvF5gD,KAAK6S,SAAS+L,aAAa,qBAAqBiR,KAAK,IAAI8S,EAAgBke,EAAsB,IAC/F7gD,KAAK6S,SAAS+L,aAAa,eAAeiR,KAAK,IAAI8S,EAAgBme,EAAiB,IACpF9gD,KAAK6S,SAAS+L,aAAa,YAAYiR,KAAK,IAAI8S,EAAgBoe,EAAc,IAE9E/gD,KAAK6S,SAAS+L,aAAa,YAAY9P,aAAc,EACrD9O,KAAK6S,SAAS+L,aAAa,iBAAiB9P,aAAc,EAC1D9O,KAAK6S,SAAS+L,aAAa,qBAAqB9P,aAAc,EAC9D9O,KAAK6S,SAAS+L,aAAa,eAAe9P,aAAc,EACxD9O,KAAK6S,SAAS+L,aAAa,YAAY9P,aAAc,EAErD9O,KAAKqT,SAASrU,SAAS+gD,QAAQ7gD,MAAQohD,EACvCtgD,KAAKihD,QAAUX,CAChB,CAED,aAAIY,CAAUhiD,GAEZc,KAAKqT,SAASrU,SAAS8gD,WAAW5gD,MAAQA,CAC3C,CAED,aAAIgiD,GAEF,OAAOlhD,KAAKqT,SAASrU,SAAS8gD,WAAW5gD,KAC1C,CAED,uBAAAwhD,CAAwB1rC,EAAQvL,GAE9B,OAAU,IAANA,EAEKuL,EAAO,GAAG7P,QAAQwsB,IAAI3c,EAAO,IAAIoC,gBAAgB,GAAGD,IAAInC,EAAO,IAI/DA,EAAOvL,EAAI,EAErB,CAED,mBAAA+2C,CAAoBxrC,EAAQvL,GAE1B,OAAIA,IAAMuL,EAAOnP,OAAS,EAEjBmP,EAAOA,EAAOnP,OAAS,GAAGV,QAAQwsB,IAAI3c,EAAOA,EAAOnP,OAAS,IAAIuR,gBAAgB,GAAGD,IAAInC,EAAOA,EAAOnP,OAAS,IAI/GmP,EAAOvL,EAAI,EAErB,CAED,MAAArL,GAEC,CAED,QAAAwc,GAEE,OAAO5a,KAAKsgD,kBACb,CAED,YAAAa,GAEE,OAAOnhD,KAAKsgD,kBACb,CAED,OAAAz9C,GAEE7C,KAAK6S,SAAShQ,UACd7C,KAAKqT,SAASxQ,UACV7C,KAAKohD,QAEPphD,KAAKohD,OAAO76B,OAAOvmB,KAEtB,CAED,SAAIqrB,CAAM9T,GAERvX,KAAKqT,SAASrU,SAAS0B,OAAOxB,MAAMiD,IAAIoV,EACzC,CAED,SAAI8T,GAEF,OAAOrrB,KAAKqT,SAASrU,SAAS0B,OAAOxB,KACtC,CAED,UAAAmiD,CAAW9pC,GAETvX,KAAKqT,SAASrU,SAAS0B,OAAOxB,MAAM2wB,KAAKtY,EAC1C,EC3LH,MAAM+pC,WAAmB90B,EAEvB,WAAA7tB,CAAY0P,EAASkzC,GAEnBA,EAAQA,GAAS,IAAIniD,EAAQ,EAAG,GAChC,MAAMiU,EAAW,IAAI3U,EAAe,CAClCM,SAAU,CACRC,SAAU,CAAEC,MAAOmP,GACnBmzC,eAAgB,CAAEtiD,MAAO,GACzBuiD,OAAQ,CAAEviD,MAAO,GACjBwiD,SAAU,CAAExiD,MAAO,IAErBI,igBACAC,mLACA2yB,aAAa,EACb1yB,YAAY,EACZkqB,KAAMi4B,IAEF9uC,EAAW,IAAIif,EAAc,EAAG,EAAG,GACzCjf,EAASsa,WAAWo0B,EAAMvrC,EAAI,GAAIurC,EAAMtrC,EAAI,EAAG,GAC/C,MAAM2rC,EAAgBvzC,EAAQE,MAAM6Z,MAAQ/Z,EAAQE,MAAM0a,OAC1DpW,EAASmY,MAAM42B,EAAe,EAAG,GACjC7iD,MAAM8T,EAAUQ,GAChBrT,KAAK4hD,cAAgBA,EACrB5hD,KAAK6S,SAASgvC,qBAEd7hD,KAAK8hD,YAAc,IAAI52B,EACvBlrB,KAAK6S,SAASkvC,YAAYltB,QAAQ70B,KAAK8hD,YACxC,CAED,cAAAE,GAEEhiD,KAAKqT,SAASrU,SAASC,SAASC,MAAM4P,aAAc,EACpD,MAAMmzC,EAAMjiD,KAAKqT,SAASrU,SAASC,SAASC,MAAMqP,MAElDvO,KAAK6S,SAASmY,MAAM,EAAIhrB,KAAK4hD,cAAe,EAAG,GAC/C5hD,KAAK4hD,cAAgBK,EAAI75B,MAAQ65B,EAAIh5B,OACrCjpB,KAAK6S,SAASmY,MAAMhrB,KAAK4hD,cAAe,EAAG,GAC3C5hD,KAAK6S,SAASgvC,qBACd7hD,KAAK6S,SAASkvC,YAAYltB,QAAQ70B,KAAK8hD,YACxC,CAED,QAAI7+C,GAEF,OAAOjD,KAAK8hD,YAAY38C,QAAQiS,eAAepX,KAAKgrB,MAAMhV,EAC3D,CAED,QAAI/S,CAAK/D,GAEPc,KAAKgrB,MAAM7oB,IAAIjD,EAAOA,EAAOA,GAC7Bc,KAAKqT,SAASrU,SAASyiD,OAAOviD,MAAQA,CACvC,CAED,kBAAIgjD,CAAeC,GAEjBniD,KAAKqT,SAASrU,SAASwiD,eAAetiD,OAAoB,IAAZijD,EAAmB,EAAI,CACtE,CAED,kBAAID,GAEF,OAAuD,IAAhDliD,KAAKqT,SAASrU,SAASwiD,eAAetiD,KAC9C,CAED,WAAIsnB,CAAQA,GAEVxmB,KAAKqT,SAASrU,SAAS0iD,SAASxiD,MAAQsnB,CACzC,CAED,WAAIA,GAEF,OAAOxmB,KAAKqT,SAASrU,SAAS0iD,SAASxiD,KACxC,CAED,OAAA2D,GAEE7C,KAAK6S,SAAShQ,UACd7C,KAAKohD,OAAO76B,OAAOvmB,MACnBA,KAAKqT,SAASrU,SAASC,SAASC,MAAM2D,UACtC7C,KAAKqT,SAASxQ,SACf,ECnFH,MAAMu/C,WAAed,GAEnB,WAAA3iD,CAAYqpB,EAAMC,EAAMoD,EAAOk2B,EAAOc,GAEpC,MAAMC,EAAqB,IAAIt4B,GAAiBq4B,GAE1CE,EAAgB,CACpBt6B,KAAMA,EACNM,WAAY8C,GAAS,WAEjB3C,EAAiB45B,EAAmB75B,gBAAgBT,EAAMu6B,GAEhE75B,EAAeiT,UAAY6mB,EAC3B95B,EAAeiT,UAAY8W,EAC3B/pB,EAAe5Z,aAAc,EAC7B/P,MAAM2pB,EAAgB64B,GAEtBvhD,KAAKsiD,mBAAqBA,EAC1BtiD,KAAK0oB,eAAiBA,EACtB1oB,KAAKuiD,cAAgBA,CACtB,CAED,QAAIv6B,CAAK9oB,GAEPc,KAAKsiD,mBAAmBj6B,YAAYnpB,EAAOc,KAAKuiD,eAChDviD,KAAKgiD,gBACN,CAED,QAAIh6B,GAEF,MAAO,iBACR,EC3BH,MAAMy6B,WAA0BpiD,GAE9B,WAAA1B,CAAY+jD,EAAY,GAEtB3jD,w1BAAkB,CAChBE,SAAU,CAAEC,WAAOgB,GACnB8uB,YAAa,CAAE9vB,MAAO,IAAIE,EAAQ+wB,GAAQ/H,MAAO+H,GAAQlH,SACzDgG,aAAc,CAAE/vB,MAAO,IAAIE,GAC3BujD,aAAc,CAAEzjD,MAAO,IAAIE,EAAQ,EAAG,IACtCwjD,KAAM,CAAE1jD,MAAO,IAAIgsB,GACnB23B,YAAa,CAAE3jD,MAAO,IAAIE,GAC1B0jD,aAAc,CAAE5jD,MAAO,KAEzBc,KAAKkyB,aAAc,EACnBlyB,KAAKR,YAAa,EAClBQ,KAAKL,WAAY,CAClB,ECxBH,MAAMojD,GAEJ,WAAApkD,GAEEqB,KAAKipC,QAAU,IAAI7pC,CACpB,CAED,WAAA4jD,CAAYhwC,GAEV,OAAOhT,KAAKipC,QAAQ9mC,IAAI6Q,EAASgD,EAAGhD,EAASiD,EAC9C,ECPH,MAAMgtC,GAEJ,WAAAtkD,GAEEqB,KAAKkjD,SAAW,IAAIh4B,EACpBlrB,KAAKmjD,SAAW,IAAI/jD,CACrB,CAED,WAAA4jD,CAAYhwC,GAKV,OAHAhT,KAAKkjD,SAASrzB,KAAK7c,GACnBhT,KAAKkjD,SAASjY,QAAQjX,GAActZ,SAE7B1a,KAAKmjD,SAAShhD,IAAInC,KAAKkjD,SAASltC,EAAGhW,KAAKkjD,SAASjtC,EACzD,ECnBH,MAAMmtC,GAEJ,WAAAzkD,GAGC,CAED,MAAAP,CAAOilD,EAAYC,GAGlB,CAED,QAAArlD,CAASolD,GACP,CAEF,OAAAnlD,CAAQmlD,GACN,ECdJ,MAAME,WAAeH,GAEnB,WAAAzkD,GAEEI,OACD,CAED,MAAAX,CAAOilD,EAAYC,GAEbD,EAAWG,cAAcF,IAE3BD,EAAW5/B,UAAU4/B,EAAWI,gBAEnC,ECbH,MAAMC,WAAqBN,GAEzB,WAAAzkD,GAEEI,OACD,CAED,QAAAd,CAASolD,GAEPA,EAAWM,gBACZ,CAED,MAAAvlD,CAAOilD,EAAYC,GAEbD,EAAWG,cAAcF,GAE3BD,EAAW5/B,UAAU4/B,EAAWO,iBAIhCP,EAAW5/B,UAAU4/B,EAAWQ,eAEnC,ECtBH,MAAMC,WAAoBV,GAExB,WAAAzkD,GAEEI,OACD,CAED,QAAAd,CAASolD,GAEPA,EAAWU,gBACXV,EAAW5/B,UAAU4/B,EAAWW,eACjC,ECXH,MAAMC,WAAqBb,GAEzB,WAAAzkD,GAEEI,OACD,CAED,QAAAd,CAASolD,GAEPrjD,KAAKkkD,mBAAmBb,EACzB,CAED,MAAAjlD,CAAOilD,EAAYC,GAEbD,EAAWG,cAAcF,GAE3BtjD,KAAKkkD,mBAAmBb,GAIxBA,EAAW5/B,UAAU4/B,EAAWQ,eAEnC,CAED,kBAAAK,CAAmBb,GAEjBA,EAAWc,gBACZ,ECTH,MAAMC,WAAkB53B,EAEtB,WAAA7tB,CAAY2B,EAAMC,GAEhBxB,MAAM,IAAI+yB,EAAc,EAAG,GAAI,IAAI2wB,IAEnCziD,KAAKqkD,cAAe,EAEpBrkD,KAAKskD,kBAAoB,IAAIrB,GAC7BjjD,KAAKmjB,cAAgB,IAAIogC,GAEzBvjD,KAAKukD,UAAY,IAAIr5B,EAErBlrB,KAAKgkD,eAAiB,IAAIT,GAC1BvjD,KAAKyjD,gBAAkB,IAAIC,GAC3B1jD,KAAK6jD,eAAiB,IAAIC,GAC1B9jD,KAAK4jD,gBAAkB,IAAIK,GAE3BjkD,KAAK/B,cAAWiC,EAChBF,KAAK9B,aAAUgC,EACfF,KAAKwkD,cAAWtkD,EAEhBF,KAAKykD,cAAgB,IAAIrlD,EACzBY,KAAK0kD,oBAAsB,IAAItlD,EAC/BY,KAAK2kD,eAAiB,IAAIvlD,EAE1BY,KAAK4kD,aAAe,IAAIxlD,EAAQ,EAAG,GAEnCY,KAAKoxB,eAAgB,EACrBpxB,KAAK6kD,kBAAmB,EACxB7kD,KAAK2rB,YAAc,EAEnB3rB,KAAKiD,KAAO,EACZjD,KAAK8kD,aAAe,IAAI1lD,CACzB,CAED,gBAAA2lD,CAAiB7lD,GAEfc,KAAK2rB,YAAczsB,CACpB,CAED,eAAI8lD,GAEF,OAAOhlD,KAAKqT,SAASrU,SAAS6jD,YAAY3jD,KAC3C,CAED,gBAAA+lD,CAAiBrxB,GAEf5zB,KAAK8kD,aAAaj1B,KAAK+D,GACvB5zB,KAAKqT,SAASrU,SAAS2jD,aAAazjD,MAAM2wB,KAAK+D,EAChD,CAED,SAAAnQ,CAAU8U,GAERv4B,KAAKmjB,cAAcjlB,QAAQ8B,MAC3BA,KAAKmjB,cAAgBoV,EACrBv4B,KAAKmjB,cAAcllB,SAAS+B,KAC7B,CAED,YAAIgT,GAEF,OAAOhT,KAAKukD,SACb,CAED,aAAIW,CAAU/C,GAEZniD,KAAKqT,SAAS1T,UAAYwiD,CAC3B,CAED,aAAI+C,GAEF,OAAOllD,KAAKqT,SAAS1T,SACtB,CAED,gBAAIwlD,CAAajmD,GAEfc,KAAKqT,SAASrU,SAAS8jD,aAAa5jD,MAAQA,CAC7C,CAED,gBAAIimD,GAEF,OAAOnlD,KAAKqT,SAASrU,SAAS8jD,aAAa5jD,KAC5C,CAED,WAAAkmD,GAEEplD,KAAKqlD,SAAU,CAChB,CAED,iCAAA3hB,GAEE1jC,KAAKskD,kBAAoB,IAAIrB,EAC9B,CAED,kCAAAzf,GAEExjC,KAAKskD,kBAAoB,IAAIvB,EAC9B,CAED,WAAA5zB,CAAY9gB,GAEVA,EAAQstB,UAAY7S,EACpBza,EAAQutB,UAAY9S,EACpBza,EAAQS,aAAc,EAEtB9O,KAAK4kD,aAAaziD,IAAIkM,EAAQE,MAAM6Z,MAAO/Z,EAAQE,MAAM0a,QAEzDjpB,KAAKqT,SAASrU,SAASC,SAASC,MAAQmP,EACxCrO,KAAKslD,SAAStlD,KAAKqT,SAASrU,SAASiwB,aAAa/vB,OAClDc,KAAKqlD,SAAU,CAChB,CAED,YAAAzhB,CAAa2hB,GAEXvlD,KAAKqT,SAASrU,SAASgwB,YAAY9vB,MAAMiD,IAAIguB,GAAQ/H,MAAO+H,GAAQlH,QACpEjpB,KAAKslD,SAAStlD,KAAKqT,SAASrU,SAASiwB,aAAa/vB,OAElDc,KAAK0kD,oBAAoB70B,KAAK7vB,KAAKskD,kBAAkBtB,YAAYhjD,KAAKgT,WACtEhT,KAAKqT,SAASrU,SAAS4jD,KAAK1jD,MAAM2wB,KAAK7vB,KAAKgT,UAC5ChT,KAAKmjB,cAAc/kB,OAAO4B,KAAMulD,EACjC,CAED,aAAA/B,CAAc+B,GAEZvlD,KAAK2kD,eAAe90B,KAAK7vB,KAAK0kD,qBAC9B1kD,KAAKwlD,mBAAmBxlD,KAAK2kD,gBAC7B3kD,KAAK2kD,eAAe3uC,GAAKhW,KAAK8kD,aAAa9uC,EAC3ChW,KAAK2kD,eAAe1uC,GAAKjW,KAAK8kD,aAAa7uC,EAE3C,MAAMwvC,GAAO,IAAIC,IAAOpzB,qBAAqBtyB,KAAK2kD,eAAgB3kD,KAAKslD,YAKvE,OAHAtlD,KAAKykD,cAAc50B,KAAK01B,GACxBvlD,KAAKwlD,mBAAmBxlD,KAAKykD,eAEtBgB,EAAKE,cAAc3lD,KAAKykD,cAChC,CAED,kBAAAe,CAAmBI,GAEjBA,EAAc5vC,GAAuB,GAAlB4vC,EAAc5vC,EAAU,IAAOma,GAAQ/H,MAASpoB,KAAK8kD,aAAa9uC,EACrF4vC,EAAc3vC,GAAuB,GAAlB2vC,EAAc3vC,EAAU,IAAOka,GAAQlH,OAASjpB,KAAK8kD,aAAa7uC,CACtF,CAED,yBAAA4vC,GAEE,MAAMv0B,EAAMtxB,KAAK0kD,oBAAoBv/C,QAErC,OADAnF,KAAKwlD,mBAAmBl0B,GACjBA,CACR,CAED,yBAAAw0B,CAA0BC,GAExB/lD,KAAKgT,SAASgD,EAAK+vC,EAAW/vC,EAAIma,GAAQ/H,MAAS,EAAI,EACvDpoB,KAAKgT,SAASiD,EAAK8vC,EAAW9vC,EAAIka,GAAQlH,OAAU,EAAI,CACzD,CAED,OAAApmB,GAEM7C,KAAKqT,SAASrU,SAASC,SAASC,OAElCc,KAAKqT,SAASrU,SAASC,SAASC,MAAM2D,UAGxC7C,KAAK6S,SAAShQ,UACd7C,KAAKqT,SAASxQ,SACf,CAED,QAAAyiD,CAAS92B,GAEP,OAAIA,EAEKA,EAAQqB,KAAK7vB,KAAK4kD,cAAcxtC,eAAepX,KAAKiD,KAAOktB,GAAQjC,MAInE,IAAI9uB,GAAUywB,KAAK7vB,KAAK4kD,cAAcxtC,eAAepX,KAAKiD,KAAOktB,GAAQjC,IAEnF,CAED,cAAAy1B,GACE,CAEF,aAAAI,GACE,CAEF,cAAAI,GACE,EC5MJ,MAAM6B,WAA8Bx5B,EAElC,WAAA7tB,CAAYkU,EAAUQ,GAEpBtU,MAAM8T,EAAUQ,GAEhB,MAAM4yC,EAAOjmD,KAEbA,KAAKkmD,eAAiB,KAEpBD,EAAK5yC,SAASjV,QAAQ,CAEzB,ECZH,MAAM+nD,GAEJ,WAAAxnD,CAAYi1B,EAAQwyB,EAAcC,GAEhC,MAAMj+B,EAAUg+B,EAAanc,MAAQmc,EAAahb,KAC5CniB,EAAUm9B,EAAa/a,IAAQ+a,EAAa9a,OAElDtrC,KAAKgrB,MAAW,IAAI5rB,EAAQgpB,EAAOa,GACnCjpB,KAAKgT,SAAW,IAAI5T,EAAQw0B,EAASwyB,EAAahb,KAAMgb,EAAa9a,QAErEtrC,KAAKqmD,aAAe,IAAIt0B,EAAQs0B,EAAajb,KAAMib,EAAapc,MAAOoc,EAAahb,IAAKgb,EAAa/a,OACvG,ECVH,MAAMgb,GAEJ,WAAA3nD,CAAY4nD,EAAcv+B,EAAO,IAE/BhoB,KAAKumD,aAAeA,EAEpBvmD,KAAKwmD,OAAS,GAEdxmD,KAAKymD,gBAAkB,EACvBzmD,KAAK0mD,iBAAkB,EACvB1mD,KAAK2mD,gBAAkB,EAEvB3mD,KAAKgT,SAAW,IAAIkY,EACpBlrB,KAAK2tB,WAAa,IAAIoa,EACtB/nC,KAAKgrB,MAAQ,IAAIE,EAAQ,EAAG,EAAG,GAC/BlrB,KAAK4mD,OAAS,IAAIje,EAElB3oC,KAAKqrB,MAAQ,IAAI1qB,EAAM,WAEvBX,KAAKglD,YAAc,IAAI5lD,EACvBY,KAAK6mD,UAAY,EAEjB7mD,KAAK8mD,OAAW9+B,EAEhBhoB,KAAK+mD,kBAAkB/+B,EACxB,CAED,QAAIA,CAAK9oB,GAEPc,KAAK8mD,OAAS5nD,EACdc,KAAK+mD,kBAAkB7nD,GACvBc,KAAK0mD,iBAAkB,CACxB,CAED,QAAI1+B,GAEF,OAAOhoB,KAAK8mD,MACb,CAED,aAAAE,GAEEhnD,KAAK4mD,OAAOK,QAAQjnD,KAAKgT,SAAUhT,KAAK2tB,WAAY3tB,KAAKgrB,OACzDhrB,KAAK0mD,iBAAkB,EACvB1mD,KAAKymD,gBAAiB,CACvB,CAED,iBAAAS,GAEElnD,KAAKymD,gBAAiB,CACvB,CAED,iBAAAU,GAEEnnD,KAAK2mD,gBAAiB,CACvB,CAED,YAAAS,CAAahH,EAAc,EAAGiH,EAAO,GAEnC,MAAMC,GAAkB,IAAIvf,GAAaC,iBAAiB,IAAI9c,EAAQ,EAAG,EAAG,GAAKk1B,EAAc,IAAO1rC,KAAK8B,GAAK,GAC1G+wC,GAAW,IAAIxf,GAAaC,iBAAiB,IAAI9c,EAAQ,EAAG,EAAG,IAAMm8B,EAAO,IAAO3yC,KAAK8B,GAAK,GAEnGxW,KAAK2tB,WAAWkC,KAAKy3B,EAAgBE,SAASD,IAC9CvnD,KAAK0mD,iBAAkB,CACxB,CAED,YAAAx3B,CAAaoC,GAEXtxB,KAAKgT,SAAS6c,KAAKyB,GACnBtxB,KAAK0mD,iBAAkB,CACxB,CAED,QAAAhV,CAASzuC,GAEPjD,KAAKgrB,MAAM7oB,IAAIc,EAAMA,EAAMA,GAC3BjD,KAAK0mD,iBAAkB,CACxB,CAED,SAAAe,CAAUlwC,GAERvX,KAAKqrB,MAAMlpB,IAAIoV,GACfvX,KAAK2mD,gBAAiB,CACvB,CAED,SAAAe,CAAUnG,GAERvhD,KAAKglD,YAAYn1B,KAAK0xB,GACtBvhD,KAAK2nD,eACN,CAED,WAAInhC,CAAQohC,GAEV5nD,KAAK6mD,UAAYe,EACjB5nD,KAAK2mD,gBAAiB,CACvB,CAED,WAAIngC,GAEF,OAAOxmB,KAAK6mD,SACb,CAED,aAAAc,GAEE3nD,KAAK+mD,kBAAkB/mD,KAAKgoB,KAC7B,CAED,iBAAA++B,CAAkB/+B,GAEhB,IAAI6/B,EAAS,EAEb7nD,KAAKwmD,OAAO3gD,OAAS,EAErB,IAAK,IAAI4D,EAAI,EAAGA,EAAIue,EAAKniB,OAAQ4D,IACjC,CACE,MAAMq+C,EAAU9/B,EAAK+/B,WAAWt+C,GAC1Bu+C,EAAQhoD,KAAKumD,aAAapmC,MAAKC,GAAWA,EAAQ0nC,UAAYA,IACpE,GAAIE,EACJ,CACE,GAAIA,EAAMC,YACV,CACE,MAAMC,EAAa,IAAI/B,GAAU0B,EAAQG,EAAMC,YAAaD,EAAMG,aAClEnoD,KAAKwmD,OAAOt8C,KAAKg+C,EAClB,CACDL,GAAUG,EAAMI,OACjB,CACF,CAED,MAAMC,EAAO,IAAI3C,GACX4C,EAActoD,KAAKwmD,OAAO,GAChC6B,EAAK/1B,qBAAqBg2B,EAAYt1C,SAAS7N,QAAQgS,IAAI,IAAI/X,EAAQkpD,EAAYt9B,MAAMhV,EAAI,EAAGsyC,EAAYt9B,MAAM/U,EAAI,IAAKqyC,EAAYt9B,OAEvI,IAAK,IAAIvhB,EAAI,EAAGA,EAAIzJ,KAAKwmD,OAAO3gD,OAAQ4D,IACxC,CACE,MAAMoL,EAAI7U,KAAKwmD,OAAO/8C,GAChB2oB,GAAM,IAAIszB,IAAOpzB,qBAAqBzd,EAAE7B,SAAS7N,QAAQgS,IAAI,IAAI/X,EAAQyV,EAAEmW,MAAMhV,EAAI,EAAGnB,EAAEmW,MAAM/U,EAAI,IAAKpB,EAAEmW,OACjHq9B,EAAKE,MAAMn2B,EACZ,CAED,MAAMo2B,EAAY,IAAIppD,EACtBipD,EAAKxzB,QAAQ2zB,GACb,IAAK,IAAI/+C,EAAI,EAAGA,EAAIzJ,KAAKwmD,OAAO3gD,OAAQ4D,IAEtCzJ,KAAKwmD,OAAO/8C,GAAGuJ,SAASgD,GAAKwyC,EAAUxyC,EAAI,EAC3ChW,KAAKwmD,OAAO/8C,GAAGuJ,SAASiD,GAAKuyC,EAAUvyC,EAAI,EAE3CjW,KAAKwmD,OAAO/8C,GAAGuJ,SAASgD,GAAMwyC,EAAUxyC,EAAI,EAAKhW,KAAKglD,YAAYhvC,EAClEhW,KAAKwmD,OAAO/8C,GAAGuJ,SAASiD,GAAMuyC,EAAUvyC,EAAI,EAAKjW,KAAKglD,YAAY/uC,EAGpEjW,KAAKymD,gBAAiB,CACvB,EChJH,MAAMgC,WAAwBpoD,GAE5B,WAAA1B,CAAY0P,GAEVtP,i6CAAkB,CAChB2pD,SAAU,CAAExpD,MAAOmP,GACnBs6C,UAAW,CAAEzpD,MAAO,IACpB0pD,WAAY,CAAE1pD,MAAO,IAAIE,EAAQ,EAAG,MAGtCY,KAAKkyB,aAAc,EACnBlyB,KAAK+3B,WAAa,CAChB4nB,aAAa,GAEf3/C,KAAKR,YAAa,EAClBQ,KAAK0pB,KAAOi4B,EACZtzC,EAAQstB,UAAY8W,EACpBpkC,EAAQutB,UAAY6W,EACpBpkC,EAAQ0a,iBAAkB,CAC3B,CAED,cAAA8/B,CAAe5lD,GAEbjD,KAAKhB,SAAS4pD,WAAW1pD,MAAM2wB,KAAK5sB,EACrC,CAED,YAAA6lD,CAAa5pD,GAEXc,KAAKhB,SAAS2pD,UAAUzpD,MAAQ0U,GAAM+B,KAAK,GAAK,GAAKzW,EACtD,ECvBH,MAAM6pD,WAAqBv8B,EAEzB,WAAA7tB,CAAYqqD,EAAaC,GAEvB,MAEMC,EAAqB,IAAIC,GAC/BD,EAAmBE,cAAgB,EAEnC,MAAMv2C,EAAW,IAAIif,EAAc,EAAG,GACtCjf,EAASsa,UAAU,GAAK,GAAK,GAC7B+7B,EAAmBthC,aAAa,WAAa,IAAIyhC,GAAuBx2C,EAAS+L,aAAa,YAAY3L,MAAO,IACjHi2C,EAAmBthC,aAAa,KAAa,IAAIyhC,GAAuBx2C,EAAS+L,aAAa,MAAM3L,MAAO,IAC3Gi2C,EAAmB94C,MAAQyC,EAASzC,MAEpC,MAAMk5C,EAAiB,IAAIC,GAAyB,IAAIr2C,aAAas2C,KAAsB,GAAG,GACxFC,EAAiB,IAAIF,GAAyB,IAAIr2C,aAAas2C,KAAsB,GAAG,GACxFE,EAAiB,IAAIH,GAAyB,IAAIr2C,aAAas2C,KAAsB,GAAG,GACxFG,EAAiB,IAAIJ,GAAyB,IAAIr2C,aAAas2C,KAAsB,GAAG,GAExFI,EAAe,IAAIL,GAAyB,IAAIr2C,aAAas2C,KAAsB,GAAG,GACtFpD,EAAe,IAAImD,GAAyB,IAAIr2C,aAAas2C,KAAsB,GAAG,GAEtFn+B,EAAQ,IAAIk+B,GAAyB,IAAIr2C,aAAas2C,KAAsB,GAAG,GAErFF,EAAeO,MAASC,GACxBL,EAAeI,MAASC,GACxBJ,EAAeG,MAASC,GACxBH,EAAeE,MAASC,GACxBF,EAAaC,MAAWC,GACxB1D,EAAayD,MAAWC,GACxBz+B,EAAMw+B,MAAkBC,GAExBZ,EAAmBthC,aAAa,iBAAkB0hC,GAClDJ,EAAmBthC,aAAa,iBAAkB6hC,GAClDP,EAAmBthC,aAAa,iBAAkB8hC,GAClDR,EAAmBthC,aAAa,iBAAkB+hC,GAElDT,EAAmBthC,aAAa,eAAgBgiC,GAChDV,EAAmBthC,aAAa,eAAgBw+B,GAChD8C,EAAmBthC,aAAa,QAAgByD,GAEhDtsB,MAAMmqD,EAAoB,IAAIT,GAAgBQ,IAE9CjpD,KAAK+pD,cAAgB,GACrB/pD,KAAKgpD,YAAcA,EAEnBhpD,KAAKqT,SAASw1C,eAAe,IAAIzpD,EAAQ4pD,EAAYgB,MAAM5hC,MAAO4gC,EAAYgB,MAAM/gC,SAEpFjpB,KAAKoxB,eAAgB,CACtB,CAED,YAAA03B,CAAa5pD,GAEXc,KAAKqT,SAASy1C,aAAa5pD,EAC5B,CAED,QAAA+qD,CAASC,GAEP,MAAM5mB,EAAO,IAAIgjB,GAAQtmD,KAAKgpD,YAAYxC,OAAQ0D,GAElD,OADAlqD,KAAK+pD,cAAc7/C,KAAKo5B,GACjBA,CACR,CAED,WAAA6mB,CAAYC,GAEVtU,GAAeM,YAAYp2C,KAAK+pD,cAAeK,GAC/CpqD,KAAK5B,QAAO,EACb,CAED,MAAAA,CAAOisD,GAEL,MAAMC,EAAmBtqD,KAAK6S,SAAS+L,aAAa,gBAC9C2rC,EAAmBvqD,KAAK6S,SAAS+L,aAAa,gBAE9C0qC,EAAiBtpD,KAAK6S,SAAS+L,aAAa,kBAC5C6qC,EAAiBzpD,KAAK6S,SAAS+L,aAAa,kBAC5C8qC,EAAiB1pD,KAAK6S,SAAS+L,aAAa,kBAC5C+qC,EAAiB3pD,KAAK6S,SAAS+L,aAAa,kBAE5C4rC,EAAYxqD,KAAK6S,SAAS+L,aAAa,SAE7C,IAAI6rC,GAAuC,IAAjBJ,EACtBK,GAAuC,IAAjBL,EACtBM,GAAuC,IAAjBN,EAEtBO,EAAc,EAClB,IAAK,IAAInhD,EAAI,EAAGA,EAAIzJ,KAAK+pD,cAAclkD,OAAQ4D,IAC/C,CACE,MAAMue,EAAOhoB,KAAK+pD,cAActgD,GAE5Bue,EAAK0+B,kBAEP+D,GAAsB,EACtBziC,EAAKg/B,iBAGHh/B,EAAKy+B,iBAEPiE,GAAqB,EACrB1iC,EAAKk/B,qBAGHl/B,EAAK2+B,iBAEPgE,GAAqB,EACrB3iC,EAAKm/B,qBAGP,MAAMP,EAAS5+B,EAAK4+B,OACdv7B,EAAQrD,EAAKqD,MACb7E,EAAUwB,EAAKxB,QAErB,IAAK,IAAIqkC,EAAU,EAAGA,EAAU7iC,EAAKw+B,OAAO3gD,OAAQglD,IACpD,CACE,MAAM7C,EAAQhgC,EAAKw+B,OAAOqE,GAEpBC,EAAWF,EAEjBN,EAAiBS,QAAQD,EAAU9C,EAAM3B,aAAarwC,EAAGgyC,EAAM3B,aAAapwC,EAAG+xC,EAAM3B,aAAarvC,EAAGgxC,EAAM3B,aAAatvC,GACxHwzC,EAAiBQ,QAAQD,EAAU9C,EAAMh1C,SAASgD,EAAGgyC,EAAMh1C,SAASiD,EAAG+xC,EAAMh9B,MAAMhV,EAAGgyC,EAAMh9B,MAAM/U,GAElGqzC,EAAeyB,QAAQD,EAAUlE,EAAOlxC,SAAS,GAC/CkxC,EAAOlxC,SAAS,GAChBkxC,EAAOlxC,SAAS,GAChBkxC,EAAOlxC,SAAS,IAElB+zC,EAAesB,QAAQD,EAAUlE,EAAOlxC,SAAS,GAC/CkxC,EAAOlxC,SAAS,GAChBkxC,EAAOlxC,SAAS,GAChBkxC,EAAOlxC,SAAS,IAElBg0C,EAAeqB,QAAQD,EAAUlE,EAAOlxC,SAAS,GAC/CkxC,EAAOlxC,SAAS,GAChBkxC,EAAOlxC,SAAS,IAChBkxC,EAAOlxC,SAAS,KAElBi0C,EAAeoB,QAAQD,EAAUlE,EAAOlxC,SAAS,IAC/CkxC,EAAOlxC,SAAS,IAChBkxC,EAAOlxC,SAAS,IAChBkxC,EAAOlxC,SAAS,KAElB80C,EAAUO,QAAQD,EAAUz/B,EAAMtjB,EAAGsjB,EAAMxW,EAAGwW,EAAMvW,EAAG0R,GAEvDokC,GACD,CACF,CAED5qD,KAAK6S,SAASu2C,cAAgBwB,EAE1BA,EAAc5qD,KAAKwpD,iBAErB7lD,QAAQM,MAAM,iEAAkEjE,KAAKwpD,gBAAiBoB,EAAa5qD,MAGjHyqD,IAEFnB,EAAex6C,aAAc,EAC7B26C,EAAe36C,aAAc,EAC7B46C,EAAe56C,aAAc,EAC7B66C,EAAe76C,aAAc,GAE3B47C,IAEFJ,EAAiBx7C,aAAc,EAC/By7C,EAAiBz7C,aAAc,GAE7B67C,IAEFH,EAAU17C,aAAc,EAE3B,CAED,OAAAjM,GAEE7C,KAAK6S,SAAShQ,UACd7C,KAAKqT,SAASxQ,SACf,EC7LH,MAAMmoD,WAA2BrtC,GAE/B,WAAAhf,CAAY8a,EAAgBnE,EAAO,EAAGC,EAAK,EAAG0E,EAAkB,UAE9Dlb,MAAMkb,GAENja,KAAKyZ,eAAiBA,EACtBzZ,KAAKsV,KAAOA,EACZtV,KAAKuV,GAAKA,CACX,CAED,MAAAnX,CAAOsE,EAAS+S,GAEd,MAAMw1C,EAAMjrD,KAAKsV,KAAKnQ,QACtB8lD,EAAIt1C,KAAK3V,KAAKuV,GAAIvV,KAAKia,gBAAgBxE,IACvC/S,EAAQ1C,KAAKyZ,gBAAgBoW,KAAKo7B,EACnC,ECbH,MAAMC,WAAkCzsD,GAEtC,WAAAE,CAAYwsD,GAEVpsD,MAAMosD,utCACP,ECNH,MAAMC,WAA4B3sD,GAEhC,WAAAE,CAAY0sD,EAAgBF,GAE1BpsD,qLACD,CAED,UAAI60B,CAAO10B,GAETc,KAAKhB,SAASssD,QAAQpsD,MAAQA,CAC/B,CAED,UAAI00B,GAEF,OAAO5zB,KAAKhB,SAASssD,QAAQpsD,KAC9B,ECfH,MAAMqsD,GAEJ,WAAA5sD,CAAY0sD,GAEVrrD,KAAKkyC,cAAiB,EACtBlyC,KAAKmyC,eAAiB,EACtBnyC,KAAKwrD,IAAM,IAAIz1B,EAAkB,EAAG,GACpC/1B,KAAKmwC,IAAM,IAAIpa,EAAkB,EAAG,GACpC/1B,KAAKowC,IAAM,IAAIra,EAAkB,EAAG,GACpC/1B,KAAKyrD,IAAM,IAAI11B,EAAkB,EAAG,GACpC/1B,KAAK0rD,IAAM,IAAI31B,EAAkB,EAAG,GAEpC/1B,KAAK2rD,iBAAqB,IAAIT,IAA0B,GACxDlrD,KAAK4rD,mBAAqB,IAAIV,IAA0B,GAExDlrD,KAAK6rD,iBAAmB,IAAIT,EAC7B,CAED,IAAA9a,CAAK3f,GAEH3wB,KAAK8rD,gBAAgBn7B,EAAGvI,MAAOuI,EAAG1H,QAClC4a,GAAStP,KAAK5D,EAAU3wB,KAAKmwC,IAAKnwC,KAAK6rD,kBAGvChoB,GAAStP,KAAKv0B,KAAKmwC,IAAKnwC,KAAKowC,IAAKpwC,KAAK4rD,oBACvC/nB,GAAStP,KAAKv0B,KAAKowC,IAAKpwC,KAAKyrD,IAAKzrD,KAAK4rD,oBACvC/nB,GAAStP,KAAKv0B,KAAKyrD,IAAKzrD,KAAK0rD,IAAK1rD,KAAK4rD,oBAIvC/nB,GAAStP,KAAKv0B,KAAK0rD,IAAK1rD,KAAKyrD,IAAKzrD,KAAK2rD,kBACvC9nB,GAAStP,KAAKv0B,KAAKyrD,IAAKzrD,KAAKowC,IAAKpwC,KAAK2rD,kBACvC9nB,GAAStP,KAAKv0B,KAAKowC,IAAKzf,EAAI3wB,KAAK2rD,iBAIlC,CAED,eAAAG,CAAgB1jC,EAAOa,GAEjBjpB,KAAKkyC,gBAAkB9pB,GAASpoB,KAAKmyC,iBAAmBlpB,IAE1DjpB,KAAKkyC,cAAgB9pB,EACrBpoB,KAAKmyC,eAAiBlpB,EACtBjpB,KAAKwrD,IAAIr1B,QAAQn2B,KAAKkyC,cAAgB,EAAGlyC,KAAKmyC,eAAiB,GAC/DnyC,KAAKmwC,IAAIha,QAAQn2B,KAAKkyC,cAAgB,EAAGlyC,KAAKmyC,eAAiB,GAC/DnyC,KAAKowC,IAAIja,QAAQn2B,KAAKkyC,cAAgB,EAAGlyC,KAAKmyC,eAAiB,GAC/DnyC,KAAKyrD,IAAIt1B,QAAQn2B,KAAKkyC,cAAgB,EAAGlyC,KAAKmyC,eAAiB,GAC/DnyC,KAAK0rD,IAAIv1B,QAAQn2B,KAAKkyC,cAAgB,GAAIlyC,KAAKmyC,eAAiB,IAEnE,EChDH,MAAM4Z,WAA6BttD,GAEjC,WAAAE,GAEEI,whEAAYmB,EAAW,CACrB8rD,WAAW,IAGbhsD,KAAKhB,SAASitD,WAAa,CAAE/sD,WAAOgB,GACpCF,KAAKhB,SAASktD,eAAiB,CAAEhtD,MAAO,IAAIE,EAAQ,EAAG,GACxD,CAED,WAAA+vB,CAAY/uB,GAEVJ,KAAKhB,SAASitD,WAAW/sD,MAAQkB,EAEjC,MAAM6C,EAAOjD,KAAKslD,SAASllD,GAC3BJ,KAAKhB,SAASktD,eAAehtD,MAAM2wB,KAAK5sB,EACzC,CAED,QAAAqiD,CAASllD,GAEP,OAAIA,EAAI+rD,eAEC,IAAI/sD,EAAQsV,KAAKN,IAAI,EAAGhU,EAAImO,MAAM69C,YAAa13C,KAAKN,IAAI,EAAGhU,EAAImO,MAAM89C,cAE1EjsD,EAAIs0B,oBAEC,IAAIt1B,EAAQgB,EAAIgoB,MAAOhoB,EAAI6oB,QAEhC7oB,EAAIksD,UAEC,IAAIltD,EAAQgB,EAAImO,MAAM6Z,MAAOhoB,EAAImO,MAAM0a,QAEzC,IAAI7pB,EAAQ,EAAG,EACvB,ECpCH,MAAMmtD,GAEJ,WAAA5tD,CAAYgE,GAEV3C,KAAK2wB,GAAK,IAAIoF,EAAkB,EAAG,EAAG,CACpCzsB,KAAM0yB,EACNH,OAAQC,EACRH,UAAW7S,EACX8S,UAAW9S,IAEb9oB,KAAKmwC,IAAM,IAAIpa,EAAkB,EAAG,EAAG,CACrCzsB,KAAM0yB,EACNH,OAAQC,EACRH,UAAW7S,EACX8S,UAAW9S,IAGb9oB,KAAKwsD,kBAAoB,IAAIT,EAC9B,CAED,MAAAU,CAAOp+C,GAEL,MAAMq+C,EAAW1sD,KAAKslD,SAASj3C,GAC3Bq+C,EAAS12C,IAAMhW,KAAK2wB,GAAGvI,OAASskC,EAASz2C,IAAMjW,KAAK2wB,GAAG1H,SAEzDjpB,KAAK2wB,GAAGwF,QAAQu2B,EAAS12C,EAAG02C,EAASz2C,GACrCjW,KAAKmwC,IAAIha,QAAQu2B,EAAS12C,EAAG02C,EAASz2C,IAGxCjW,KAAKwsD,kBAAkBr9B,YAAY9gB,GACnCw1B,GAAS9O,cAAc/0B,KAAKwsD,kBAAmBxsD,KAAK2wB,IAEpD,IAAK,IAAIlnB,EAAI,EAAGA,EAAI,EAAGA,IAErBzJ,KAAKwsD,kBAAkBr9B,YAAYnvB,KAAK2wB,GAAGtiB,SAC3Cw1B,GAAS9O,cAAc/0B,KAAKwsD,kBAAmBxsD,KAAKmwC,KAEpDnwC,KAAKwsD,kBAAkBr9B,YAAYnvB,KAAKmwC,IAAI9hC,SAC5Cw1B,GAAS9O,cAAc/0B,KAAKwsD,kBAAmBxsD,KAAK2wB,IAGtD,OAAO3wB,KAAK2wB,EACb,CAED,QAAA20B,CAASllD,GAEP,OAAIA,EAAI+rD,eAEC,IAAI/sD,EAAQsV,KAAKN,IAAI,EAAGhU,EAAImO,MAAM69C,YAAa13C,KAAKN,IAAI,EAAGhU,EAAImO,MAAM89C,cAE1EjsD,EAAIs0B,oBAEC,IAAIt1B,EAAQgB,EAAIgoB,MAAOhoB,EAAI6oB,QAEhC7oB,EAAIksD,UAEC,IAAIltD,EAAQgB,EAAImO,MAAM6Z,MAAOhoB,EAAImO,MAAM0a,QAEzC,IAAI7pB,EAAQ,EAAG,EACvB,EC3DH,MAAMutD,GAEJ,WAAAhuD,CAAYiuD,EAAWC,GAErB7sD,KAAK4F,UAAO1F,EACZF,KAAK8sD,WAAQ5sD,EAEbF,KAAKsI,KAAOskD,EAEZ5sD,KAAK6sD,gBAAkBA,CACxB,CAED,kBAAAE,CAAmBl6C,GAGlB,CAED,mBAAAm6C,CAAoBC,GAGnB,CAED,QAAAC,CAASC,GAEP,MAAMC,EAAaT,GAAkBU,qBAAqBF,GACpDx5B,EAAU,CACdgI,UAAW7S,EACX8S,UAAW9S,EACX+S,OAAQC,EACRwxB,WAAYz+C,EACZvF,KAAM2uB,GAAapN,sBAAwBmR,EAAYuxB,GACvDtxB,eAAe,EACfC,aAAa,GAGf,OAAO,IAAInG,EAAkBq3B,EAAWhlC,MAAOglC,EAAWnkC,OAAQ0K,EACnE,CAED,2BAAO05B,CAAqBF,GAE1B,MAAM/kC,EAAQ1T,KAAKP,IAAIg5C,EAAgB,KAEvC,MAAO,CAAE/kC,QAAOa,OADDvU,KAAKN,IAAI,EAAGM,KAAKwT,KAAKilC,EAAiB/kC,IAEvD,CAED,OAAAolC,GAEE,MAAMvC,EAAMjrD,KAAK4F,KACjB5F,KAAK4F,KAAO5F,KAAK8sD,MACjB9sD,KAAK8sD,MAAQ7B,CACd,CAED,MAAA7sD,CAAOqvD,GAEDztD,KAAK6sD,kBAEP7sD,KAAK6sD,gBAAgBzuD,SACrBqvD,EAAwBnhC,SAAS,GAAGjZ,SAAWrT,KAAK6sD,gBACpD7sD,KAAK6sD,gBAAgB7tD,SAASC,SAASC,MAAQc,KAAK4F,KAAKyI,QACzDw1B,GAASphC,OAAOgrD,OAAyBvtD,EAAWF,KAAK8sD,OACzDW,EAAwBnhC,SAAS,GAAGjZ,cAAWnT,EAE/CF,KAAKwtD,UAER,CAED,8BAAAE,CAA+BxP,EAAWvtB,EAAIg9B,EAAkBF,GAE9DA,EAAwBnhC,SAAS,GAAGzZ,SAAS+U,aAAa,OAAQs2B,GAClEuP,EAAwBnhC,SAAS,GAAGjZ,SAAWs6C,EAE/C9pB,GAASphC,OAAOgrD,OAAyBvtD,EAAWywB,GAEpD88B,EAAwBnhC,SAAS,GAAGzZ,SAAS+6C,gBAAgB,QAC7DH,EAAwBnhC,SAAS,GAAGjZ,cAAWnT,CAChD,CAED,WAAA2tD,GAEE,OAAO7tD,KAAK4F,KAAKyI,OAClB,EC1EH,MAAMy/C,WAA0B/iC,EAE9B,WAAApsB,CAAYwuD,EAAgB95C,GAE1BtU,QACAiB,KAAK+S,WAAa,GAElB/S,KAAK8zB,KAAO9zB,KAAK+tD,iBAAiBZ,EAAgB95C,GAClDrT,KAAKmX,IAAInX,KAAK8zB,MAEd9zB,KAAKguD,uBAAyBhuD,KAAKiuD,6BAA6Bd,GAChEntD,KAAKytD,wBAA0B,IAAIv7C,EACnClS,KAAKytD,wBAAwBt2C,IAAInX,KAAKguD,uBACvC,CAED,qBAAAE,CAAsBxrB,GAEpB1iC,KAAK+S,WAAW7I,KAAKw4B,EACtB,CAED,0BAAAyrB,CAA2B7lD,EAAM2K,EAAOm7C,GAEtCpuD,KAAKguD,uBAAuBn7C,SAAS+U,aAAatf,EAAM,IAAIq6B,EAAgB1vB,EAAOm7C,GAAW,GAC/F,CAED,mBAAAC,CAAoB/lD,EAAM2K,EAAOm7C,GAE/BpuD,KAAK8zB,KAAKjhB,SAAS+U,aAAatf,EAAM,IAAIihD,GAAyBt2C,EAAOm7C,GAAW,GACtF,CAED,MAAAhwD,GAEE4B,KAAK8zB,KAAKzgB,SAASjV,SACnB,IAAK,IAAIqL,EAAI,EAAGA,EAAIzJ,KAAK+S,WAAWlN,OAAQ4D,IAE1CzJ,KAAK+S,WAAWtJ,GAAGrL,OAAO4B,KAAKytD,wBAElC,CAED,OAAA5qD,GAEE7C,KAAK8zB,KAAKjhB,SAAShQ,UACnB7C,KAAK8zB,KAAKzgB,SAASxQ,SACpB,CAED,gBAAAkrD,CAAiBO,EAAiB,EAAGj7C,GAEnC,MAAMk7C,EAAM,IAAIz8B,EAEV08B,EAAgB,IAAIrF,GAC1BqF,EAAc5mC,aAAa,WAAY2mC,EAAI3vC,aAAa,aACxD4vC,EAAcp+C,MAAQm+C,EAAIn+C,MAE1Bo+C,EAAc5mC,aAAa,aAAc5nB,KAAKyuD,2BAA2BH,IACzEE,EAAcpF,cAAgBkF,EAC9B,MAAMx6B,EAAO,IAAItH,EAAKgiC,EAAen7C,GAErC,OADAygB,EAAK1C,eAAgB,EACd0C,CACR,CAED,4BAAAm6B,CAA6Bd,GAE3B,MAAM/kC,MAAEA,EAAKa,OAAEA,GAAW0jC,GAAkBU,qBAAqBF,GAE3DvqB,EAAM,IAAI1vB,aAA8B,EAAjBi6C,GAE7B,IAAK,IAAI1jD,EAAI,EAAGA,EAAI0jD,EAAgB1jD,IACpC,CACE,MAAMuM,EAAIvM,EAAI2e,EACRnS,EAAIvB,KAAK8C,MAAM/N,EAAI2e,GACzBwa,EAAQ,EAAJn5B,EAAQ,IAAMuM,EAAI,IAAOoS,EAC7Bwa,EAAQ,EAAJn5B,EAAQ,IAAMwM,EAAI,IAAOgT,EAC7B2Z,EAAQ,EAAJn5B,EAAQ,GAAKA,CAClB,CACD,MAAM8kD,EAAM,IAAIhjC,EAChBgjC,EAAI3mC,aAAa,WAAY,IAAI+a,EAAgBC,EAAK,GAAG,IAEzD,MAAM5tB,EAAS,IAAI05C,GAAOH,GAE1B,OADAv5C,EAAOoc,eAAgB,EAChBpc,CACR,CAED,0BAAAy5C,CAA2BtB,GAEzB,MAAM/kC,MAAEA,EAAKa,OAAEA,GAAW0jC,GAAkBU,qBAAqBF,GAE3DvqB,EAAM,IAAI1vB,aAA8B,EAAjBi6C,GAE7B,IAAK,IAAI1jD,EAAI,EAAGA,EAAI0jD,EAAgB1jD,IACpC,CACE,MAAMuM,EAAIvM,EAAI2e,EACRnS,EAAIvB,KAAK8C,MAAM/N,EAAI2e,GACzBwa,EAAQ,EAAJn5B,EAAQ,IAAMuM,EAAI,IAAOoS,EAC7Bwa,EAAQ,EAAJn5B,EAAQ,IAAMwM,EAAI,IAAOgT,CAC9B,CACD,OAAO,IAAIsgC,GAAyB3mB,EAAK,GAAG,EAC7C,ECrGH,MAAM+rB,WAAgCjwD,EAEpC,WAAAC,GAcEI,MAAM,CACJC,SAAU,CAET,EACDM,aAhBW,kOAiBXC,wFACAC,YAAY,EACZC,SAAUC,EACVC,WAAW,EACXC,UAAWC,GAEd,EC5BH,MAAM+uD,WAAkCjC,GAEtC,WAAAhuD,CAAYkuD,GAEV9tD,MAAM,YAAa8tD,EACpB,CAED,cAAAgC,CAAeh8C,EAAU46C,GAEvB,MAAMqB,EAAWj8C,EAAS+L,aAAa,YACvC5e,KAAK4F,KAAU5F,KAAKktD,SAAS4B,EAASrsB,OACtCziC,KAAK8sD,MAAU9sD,KAAKktD,SAAS4B,EAASrsB,OAEtC,MAAMzN,EAAM,IAAI25B,GAChB3uD,KAAK0tD,+BAA+B76C,EAAS+L,aAAa,YAAa5e,KAAK4F,KAAMovB,EAAKy4B,EACxF,CAED,eAAAsB,CAAgB3X,EAAWqW,GAEzBztD,KAAK4F,KAAU5F,KAAKktD,SAAS9V,EAAUvxC,QACvC7F,KAAK8sD,MAAU9sD,KAAKktD,SAAS9V,EAAUvxC,QAEvC,MAAMyR,EAAM,IAAIpE,aAAgC,EAAnBkkC,EAAUvxC,QAEvC,IAAK,IAAI4D,EAAI,EAAGA,EAAI2tC,EAAUvxC,OAAQ4D,IAEpC6N,EAAQ,EAAJ7N,EAAQ,GAAK2tC,EAAU3tC,GAAGuM,EAC9BsB,EAAQ,EAAJ7N,EAAQ,GAAK2tC,EAAU3tC,GAAGwM,EAC9BqB,EAAQ,EAAJ7N,EAAQ,GAAK2tC,EAAU3tC,GAAGuN,EAC9BM,EAAQ,EAAJ7N,EAAQ,GAA+B,IAAT,EAAhBiL,KAAK+C,SAAe,GAExC,MAAMud,EAAM,IAAI25B,GAChB3uD,KAAK0tD,+BAA+B,IAAI/qB,EAAgBrrB,EAAK,GAAItX,KAAK4F,KAAMovB,EAAKy4B,EAClF,ECpCH,MAAMuB,WAA0BptB,EAE9B,WAAAjjC,CAAYuH,EAAMkiB,EAAOa,EAAQ4S,EAAQvyB,GAEvCvK,MAAMmH,EAAMkiB,EAAOa,EAAQ4S,EAAQvyB,GACnCtJ,KAAKivD,WAAa,CACnB,CAED,QAAAC,CAAS9+C,EAAOrI,EAAG8M,EAAGC,EAAG0K,GAEvBxf,KAAKkG,KAAa,EAARkK,EAAY,GAAKrI,EAAI/H,KAAKivD,WACpCjvD,KAAKkG,KAAa,EAARkK,EAAY,GAAKyE,EAAI7U,KAAKivD,WACpCjvD,KAAKkG,KAAa,EAARkK,EAAY,GAAK0E,EAAI9U,KAAKivD,WACpCjvD,KAAKkG,KAAa,EAARkK,EAAY,GAAKoP,EAAIxf,KAAKivD,WACpCjvD,KAAK8O,aAAc,CACpB,CAED,OAAAqgD,CAAQ/+C,EAAOrI,EAAG8M,EAAGC,GAEnB9U,KAAKkG,KAAa,EAARkK,EAAY,GAAKrI,EAAI/H,KAAKivD,WACpCjvD,KAAKkG,KAAa,EAARkK,EAAY,GAAKyE,EAAI7U,KAAKivD,WACpCjvD,KAAKkG,KAAa,EAARkK,EAAY,GAAK0E,EAAI9U,KAAKivD,WACpCjvD,KAAK8O,aAAc,CACpB,CAED,KAAAsgD,CAAMh/C,EAAOlR,GAEXc,KAAKkG,KAAa,EAARkK,EAAY,GAAKlR,EAAQc,KAAKivD,WACxCjvD,KAAK8O,aAAc,CACpB,CAED,KAAAugD,CAAMj/C,EAAOlR,GAEXc,KAAKkG,KAAa,EAARkK,EAAY,GAAKlR,EAAQc,KAAKivD,WACxCjvD,KAAK8O,aAAc,CACpB,CAED,KAAAwgD,CAAMl/C,EAAOlR,GAEXc,KAAKkG,KAAa,EAARkK,EAAY,GAAKlR,EAAQc,KAAKivD,WACxCjvD,KAAK8O,aAAc,CACpB,CAED,KAAAygD,CAAMn/C,EAAOlR,GAEXc,KAAKkG,KAAa,EAARkK,EAAY,GAAKlR,EAAQc,KAAKivD,WACxCjvD,KAAK8O,aAAc,CACpB,EC9CH,MAAM0gD,WAAuBR,GAE3B,WAAArwD,CAAYypB,EAAOa,GAGjBlqB,MADa,IAAIyU,WAAW4U,EAAQa,EAAS,GACjCb,EAAOa,EAAQ6S,GAC3B97B,KAAKivD,WAAa,GACnB,ECPH,MAAMQ,WAAwBT,GAE5B,WAAArwD,CAAYypB,EAAOa,GAGjBlqB,MADa,IAAIyU,WAAW4U,EAAQa,EAAS,GACjCb,EAAOa,EAAQ6S,GAC3B97B,KAAKivD,WAAa,GACnB,ECPH,MAAMS,WAA4BV,GAEhC,WAAArwD,CAAYypB,EAAOa,GAGjBlqB,MADa,IAAImU,aAAakV,EAAQa,EAAS,GACnCb,EAAOa,EAAQ6S,EAAYE,EACxC,ECLH,MAAM2zB,WAA6BX,GAEjC,WAAArwD,CAAYypB,EAAOa,GAGjBlqB,MADa,IAAImU,aAAakV,EAAQa,EAAS,GACnCb,EAAOa,EAAQ6S,EAAYE,EACxC,ECJH,MAAM4zB,WAAoBpjC,EAExB,WAAA7tB,CAAYkxD,EAAUh9C,EAAUQ,EAAUy8C,GAExC/wD,MAAM8T,EAAUQ,GAEhBrT,KAAK6vD,SAAWA,EAChB7vD,KAAK+vD,cAAgBvnD,OAAOC,KAAKonD,GAAUhqD,OAC3C7F,KAAK8vD,kBAAoBA,EACzB9vD,KAAKu+B,YAAcv+B,KAAK+vD,cAAgBD,EACxC9vD,KAAKgwD,aAAet7C,KAAKwT,KAAKloB,KAAK+vD,cAAgBD,EACpD,CAED,kBAAAG,CAAmBhxB,GAEjBj/B,KAAKqT,SAASrU,SAASigC,GAAc//B,MAAQ,IAAIswD,GAAexvD,KAAKu+B,YAAav+B,KAAKgwD,aACxF,CAED,mBAAAE,CAAoBjxB,GAElBj/B,KAAKqT,SAASrU,SAASigC,GAAc//B,MAAQ,IAAIuwD,GAAgBzvD,KAAKu+B,YAAav+B,KAAKgwD,aACzF,CAED,wBAAAG,CAAyBlxB,GAEvBj/B,KAAKqT,SAASrU,SAASigC,GAAc//B,MAAQ,IAAIwwD,GAAoB1vD,KAAKu+B,YAAav+B,KAAKgwD,aAC7F,CAED,yBAAAI,CAA0BnxB,GAExBj/B,KAAKqT,SAASrU,SAASigC,GAAc//B,MAAQ,IAAIywD,GAAqB3vD,KAAKu+B,YAAav+B,KAAKgwD,aAC9F,CAED,cAAAK,CAAe/nD,GAEb,OAAOtI,KAAK6vD,SAASvnD,EACtB,CAED,aAAAgoD,CAAcrxB,EAAcsxB,EAAWxoD,EAAG8M,EAAGC,GAE3C9U,KAAKqT,SAASrU,SAASigC,GAAckwB,QAAQnvD,KAAKqwD,eAAeE,GAAYxoD,EAAG8M,EAAGC,EACpF,CAED,cAAA07C,CAAevxB,EAAcsxB,EAAWxoD,EAAG8M,EAAGC,EAAG0K,GAE/Cxf,KAAKqT,SAASrU,SAASigC,GAAciwB,SAASlvD,KAAKqwD,eAAeE,GAAYxoD,EAAG8M,EAAGC,EAAG0K,EACxF,EC9CH,MAAMixC,GAEJ,KAAAxuB,CAAMyuB,EAAQr9C,GAEZ,MAMM0oC,EAAa,GACb8T,EAAW,CAAA,EAEXc,EAAe,GAErB,IAAK,IAAIlnD,EAAI,EAAGA,EAAIinD,EAAO7qD,OAAQ4D,IACnC,CACE,MAAMqqB,EAAO48B,EAAOjnD,GACd+4B,EAAe1O,EAAKjhB,SAAS+L,aAAa,YAAY6jB,MAE5D,IAAK,IAAIA,EAAQ,EAAGA,EAAQD,EAAcC,IAExCkuB,EAAazmD,KAAKT,GAGpBsyC,EAAW7xC,KAAK4pB,EAAKjhB,eAEO3S,IAAxB2vD,EAAS/7B,EAAKxrB,MAEhBunD,EAAS/7B,EAAKxrB,MAAQmB,EAItB9F,QAAQM,MAAM,4EAA6E6vB,EAAKxrB,KAAMunD,EAEzG,CAED,MAAMtiC,EAAkBC,GAAoBC,gBAAgBsuB,GAEtDrZ,EAAmB,IAAIC,EAAgB,IAAIzvB,aAAay9C,GAAe,GAG7E,OAFApjC,EAAgB3F,aAAa,UAAW8a,GAEjC1iC,KAAK4wD,oBAAoBf,EAAUtiC,EAAiBla,EAtCjC,KAuC3B,CAED,mBAAAu9C,CAAoBf,EAAUtiC,EAAiBla,EAAUy8C,GAEvD,OAAO,IAAIF,GAAYC,EAAUtiC,EAAiBla,EAAUy8C,EAC7D,EClDH,MAAMe,WAAkB/tD,GAEtB,WAAAnE,CAAYoE,EAAaC,EAAKC,GAE5BlE,MAAMgE,EAAaC,EAAKC,GACxBjD,KAAK+K,OAAS,IAAI+lD,EACnB,CAED,qBAAA/qD,CAAsB5B,QAEkCjE,IAAlDiE,EAAmBC,iBAAiBpE,KAAKgD,KAE3ChD,KAAK+K,OAAO7G,KAAKlE,KAAKgD,KAAMkI,IAE1B/G,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKkI,GAE5DlL,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,iBAAiB,IAEvBsH,IAAD,IAQCC,IAECpL,KAAK8D,YAAYsH,EAAM,qLACvBpL,KAAK6D,iBAAiB,KAKxBM,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKmB,EAAmBC,iBAAiBpE,KAAKgD,MAErGhD,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,kBAER,ECxCH,MAAMktD,WAAmBjuD,GAEvB,WAAAnE,CAAYoE,EAAaC,EAAKC,GAE5BlE,MAAMgE,EAAaC,EAAKC,GACxBjD,KAAK+K,OAAS,IAAIimD,EACnB,CAED,qBAAAjrD,CAAsB5B,QAEkCjE,IAAlDiE,EAAmBC,iBAAiBpE,KAAKgD,KAE3ChD,KAAK+K,OAAO7G,KAAKlE,KAAKgD,KAAMiuD,IAE1B9sD,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKiuD,GAE5DjxD,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,iBAAiB,IAEvBsH,IAAD,IAQCC,IAECpL,KAAK8D,YAAYsH,GACjBpL,KAAK6D,iBAAiB,KAKxBM,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKmB,EAAmBC,iBAAiBpE,KAAKgD,MAErGhD,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,kBAER,ECxCH,MAAMqtD,WAAmBpuD,GAEvB,WAAAnE,CAAYoE,EAAaC,EAAKC,GAE5BlE,MAAMgE,EAAaC,EAAKC,GACxBjD,KAAK+K,OAAS,IAAIomD,EACnB,CAED,qBAAAprD,CAAsB5B,QAEkCjE,IAAlDiE,EAAmBC,iBAAiBpE,KAAKgD,KAE3ChD,KAAK+K,OAAO7G,KAAKlE,KAAKgD,KAAMilB,IAE1B9jB,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKilB,GAE5DjoB,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,iBAAiB,IAEvBsH,IAAD,IAQCC,IAECpL,KAAK8D,YAAYsH,EAAM,iLACvBpL,KAAK6D,iBAAiB,KAKxBM,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKmB,EAAmBC,iBAAiBpE,KAAKgD,MAErGhD,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,kBAER,ECxCH,MAAMutD,WAA6BtuD,GAEjC,WAAAnE,CAAYoE,EAAaC,EAAKwM,EAAWvM,GAEvClE,MAAMgE,EAAaC,EAAKC,GACxBjD,KAAK+K,OAAS,IAAIsmD,GAClBrxD,KAAK+K,OAAO2E,QAAQ1M,EAAM,KAE1BhD,KAAK2P,KAAO,CACV,MAAMH,IACN,MAAMA,IACN,MAAMA,IACN,MAAMA,IACN,MAAMA,IACN,MAAMA,IAET,CAED,qBAAAzJ,CAAsB5B,QAEkCjE,IAAlDiE,EAAmBC,iBAAiBpE,KAAKgD,KAE3ChD,KAAK+K,OAAO7G,KAAKlE,KAAK2P,MAAOG,IAE3B3L,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAK8M,GAE5D9P,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,iBAAiB,IAEvBsH,IAAD,IAQCC,IAECpL,KAAK8D,YAAYsH,EAAM,qLACvBpL,KAAK6D,iBAAiB,KAKxBM,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKmB,EAAmBC,iBAAiBpE,KAAKgD,MAErGhD,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,kBAER,ECpDH,MAAMytD,WAAmBxuD,GAEvB,WAAAnE,CAAYoE,EAAaC,EAAKC,GAE5BlE,MAAMgE,EAAaC,EAAKC,EACzB,CAED,qBAAA8C,CAAsB5B,EAAoBc,QAEc/E,IAAlDiE,EAAmBC,iBAAiBpE,KAAKgD,KAE3CiC,EAASssD,OAAO5sD,MAAM4sD,IAEpBptD,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKuuD,GAE5DvxD,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,iBAAiB,KAKxBM,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKmB,EAAmBC,iBAAiBpE,KAAKgD,MAErGhD,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,kBAER,ECxBH,MAAM2tD,WAAkB1uD,GAEtB,WAAAnE,CAAYoE,EAAaC,EAAKC,GAE5BlE,MAAMgE,EAAaC,EAAKC,GACxBjD,KAAK+K,OAAS,IAAI0mD,EACnB,CAED,qBAAA1rD,CAAsB5B,QAEkCjE,IAAlDiE,EAAmBC,iBAAiBpE,KAAKgD,KAE3ChD,KAAK+K,OAAO7G,KAAKlE,KAAKgD,KAAMwzC,IAE1BryC,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKwzC,GAE5Dx2C,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,iBAAiB,IAEvBsH,IAAD,IAQCC,IAECpL,KAAK8D,YAAYsH,EAAM,iLACvBpL,KAAK6D,iBAAiB,KAKxBM,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKmB,EAAmBC,iBAAiBpE,KAAKgD,MAErGhD,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,kBAER,ECvCH,MAAM6tD,WAAyB5uD,GAE7B,WAAAnE,CAAYoE,EAAaC,EAAKC,GAE5BlE,MAAMgE,EAAaC,EAAKC,GACxBjD,KAAK+K,OAAS,IAAIgmD,EACnB,CAED,qBAAAhrD,CAAsB5B,QAEkCjE,IAAlDiE,EAAmBC,iBAAiBpE,KAAKgD,KAE3ChD,KAAK+K,OAAO7G,KAAKlE,KAAKgD,KAAMglB,IAE1B7jB,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKhD,KAAK2xD,WAAW3pC,IAE5EhoB,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,iBAAiB,IAEvBsH,IAAD,IAQCC,IAECpL,KAAK8D,YAAYsH,GACjBpL,KAAK6D,iBAAiB,KAKxBM,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKmB,EAAmBC,iBAAiBpE,KAAKgD,MAErGhD,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,kBAER,CAED,UAAA8tD,CAAWC,GAET,MAAMC,EAAeD,EAAS/jD,MAAM,MAEU,KAA1CgkD,EAAaA,EAAahsD,OAAS,IAErCgsD,EAAaC,MAGf,MAAM1a,EAAY,GAElB,IAAK,IAAI3tC,EAAI,EAAGA,EAAIooD,EAAahsD,OAAQ4D,GAAK,EAC9C,CACE,MAAMuM,EAAI8I,WAAW+yC,EAAapoD,EAAI,IAChCwM,EAAI6I,WAAW+yC,EAAapoD,EAAI,IAChCuN,EAAI8H,WAAW+yC,EAAapoD,EAAI,IACtC2tC,EAAUltC,KAAK,IAAIghB,EAAQlV,EAAGC,EAAGe,GAClC,CACD,OAAOogC,CAGR,EChEH,MAAM2a,WAAmBjvD,GAEvB,WAAAnE,CAAYoE,EAAaC,EAAKC,GAE5BlE,MAAMgE,EAAaC,EAAKC,GACxBjD,KAAK+K,OAAS,IAAIimD,EACnB,CAED,qBAAAjrD,CAAsB5B,QAEkCjE,IAAlDiE,EAAmBC,iBAAiBpE,KAAKgD,KAE3ChD,KAAK+K,OAAO7G,KAAKlE,KAAKgD,KAAMkI,IAE1B/G,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKkI,GAE5DlL,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,iBAAiB,IAEvBsH,IAAD,IAQCC,IAECpL,KAAK8D,YAAYsH,GACjBpL,KAAK6D,iBAAiB,KAKxBM,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKmB,EAAmBC,iBAAiBpE,KAAKgD,MAErGhD,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,kBAER,ECxCH,MAAMmuD,WAAsBlvD,GAE1B,WAAAnE,CAAYoE,EAAaC,EAAKC,GAE5BlE,MAAMgE,EAAaC,EAAKC,EACzB,CAED,qBAAA8C,CAAsB5B,EAAoBc,QAEc/E,IAAlDiE,EAAmBC,iBAAiBpE,KAAKgD,KAE3CiC,EAAS+C,OAAOrD,MAAMqD,IAEpB,MAAMqG,EAAU,IAAIC,EAEdtL,EAAMqH,IAAIgxB,gBAAgBrzB,GAE1BuG,EAAQ,IAAIC,MAClBD,EAAME,IAAMzL,EAEZuL,EAAMG,OAAS,KAEbL,EAAQE,MAAQA,EAChBF,EAAQS,aAAc,EAEtB3K,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKqL,GAE5DrO,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,iBAAiB,EAGxB0K,EAAMQ,QAAU,KAEdpL,QAAQM,MAAM,6DAA8DjE,KAAKgD,IAAI,CACtF,KAKHmB,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKmB,EAAmBC,iBAAiBpE,KAAKgD,MAErGhD,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,kBAER,EC9CH,MAAMouD,WAAoBnvD,GAExB,WAAAnE,CAAYoE,EAAaC,EAAKC,GAE5BlE,MAAMgE,EAAaC,EAAKC,EACzB,CAED,qBAAA8C,CAAsB5B,EAAoBc,QAEc/E,IAAlDiE,EAAmBC,iBAAiBpE,KAAKgD,KAE3CiC,EAAS+C,OAAOrD,MAAMqD,IAEpB7D,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKqH,IAAIgxB,gBAAgBrzB,IAEhFhI,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,iBAAiB,KAKxBM,EAAmBa,aAAahF,KAAK+C,YAAa/C,KAAKgD,IAAKmB,EAAmBC,iBAAiBpE,KAAKgD,MAErGhD,KAAKuD,0BAA0B,EAAG,GAClCvD,KAAK6D,kBAER,EC1BH,MAAMquD,GAEJ,WAAAvzD,CAAYwzD,GAEVnyD,KAAKoyD,iBAAmB,GACxBpyD,KAAKmyD,WAAaA,GAAc,eACjC,CAED,UAAAE,CAAWtnD,GAET/K,KAAKoyD,iBAAiBloD,KAAKa,EAC5B,CAED,IAAA7G,CAAKC,GAEH,IAAK,IAAIsF,EAAI,EAAGA,EAAIzJ,KAAKoyD,iBAAiBvsD,OAAQ4D,IAEhDzJ,KAAKoyD,iBAAiB3oD,GAAGvF,KAAKC,GAAsB4E,GAEvD,CAED,oBAAIupD,GAEF,IAAIhiD,GAAW,EACf,IAAK,IAAI7G,EAAI,EAAGA,EAAIzJ,KAAKoyD,iBAAiBvsD,OAAQ4D,IAEhD6G,EAAWA,GAAYtQ,KAAKoyD,iBAAiB3oD,GAAGrG,aAElD,OAAOkN,CACR,CAED,cAAIiiD,GAEF,IAAIlvD,GAAY,EAChB,IAAK,IAAIoG,EAAI,EAAGA,EAAIzJ,KAAKoyD,iBAAiBvsD,OAAQ4D,IAEhDpG,EAAYA,GAAarD,KAAKoyD,iBAAiB3oD,GAAGpG,UAEpD,OAAOA,CACR,CAED,YAAAmvD,GAEE7uD,QAAQM,MAAM,UAAYjE,KAAKmyD,WAAa,iCAC5C,IAAK,IAAI1oD,EAAI,EAAGA,EAAIzJ,KAAKoyD,iBAAiBvsD,OAAQ4D,IAE5CzJ,KAAKoyD,iBAAiB3oD,GAAGpG,WAE3BrD,KAAKoyD,iBAAiB3oD,GAAGzF,aAG9B,CAED,YAAA4F,GAEE,OAAO5J,KAAKyyD,mBAAqBzyD,KAAK0yD,iBACvC,CAED,gBAAAD,GAEE,IAAIvvD,EAAe,EAEnB,IAAK,IAAIuG,EAAI,EAAGA,EAAIzJ,KAAKoyD,iBAAiBvsD,OAAQ4D,IAEhDvG,GAAgBlD,KAAKoyD,iBAAiB3oD,GAAGvG,aAG3C,OAAOA,CACR,CAED,eAAAwvD,GAEE,IAAIvvD,EAAc,EAElB,IAAK,IAAIsG,EAAI,EAAGA,EAAIzJ,KAAKoyD,iBAAiBvsD,OAAQ4D,IAEhDtG,GAAenD,KAAKoyD,iBAAiB3oD,GAAGtG,YAG1C,OAAOA,CACR"}