pixi.js
Version:
<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">
1 lines • 26.7 kB
Source Map (JSON)
{"version":3,"file":"GlRenderTargetAdaptor.mjs","sources":["../../../../../src/rendering/renderers/gl/renderTarget/GlRenderTargetAdaptor.ts"],"sourcesContent":["import { Rectangle } from '../../../../maths/shapes/Rectangle';\nimport { warn } from '../../../../utils/logging/warn';\nimport { CanvasSource } from '../../shared/texture/sources/CanvasSource';\nimport { CLEAR } from '../const';\nimport { GlRenderTarget } from '../GlRenderTarget';\n\nimport type { RgbaArray } from '../../../../color/Color';\nimport type { RenderTarget } from '../../shared/renderTarget/RenderTarget';\nimport type { RenderTargetAdaptor, RenderTargetSystem } from '../../shared/renderTarget/RenderTargetSystem';\nimport type { Texture } from '../../shared/texture/Texture';\nimport type { CLEAR_OR_BOOL } from '../const';\nimport type { WebGLRenderer } from '../WebGLRenderer';\n\n/**\n * The WebGL adaptor for the render target system. Allows the Render Target System to be used with the WebGL renderer\n * @category rendering\n * @ignore\n */\nexport class GlRenderTargetAdaptor implements RenderTargetAdaptor<GlRenderTarget>\n{\n private _renderTargetSystem: RenderTargetSystem<GlRenderTarget>;\n private _renderer: WebGLRenderer<HTMLCanvasElement>;\n private _clearColorCache: RgbaArray = [0, 0, 0, 0];\n private _viewPortCache: Rectangle = new Rectangle();\n\n public init(renderer: WebGLRenderer, renderTargetSystem: RenderTargetSystem<GlRenderTarget>): void\n {\n this._renderer = renderer;\n this._renderTargetSystem = renderTargetSystem;\n\n renderer.runners.contextChange.add(this);\n }\n\n public contextChange(): void\n {\n this._clearColorCache = [0, 0, 0, 0];\n this._viewPortCache = new Rectangle();\n }\n\n public copyToTexture(\n sourceRenderSurfaceTexture: RenderTarget,\n destinationTexture: Texture,\n originSrc: { x: number; y: number; },\n size: { width: number; height: number; },\n originDest: { x: number; y: number; },\n )\n {\n const renderTargetSystem = this._renderTargetSystem;\n\n const renderer = this._renderer;\n const glRenderTarget = renderTargetSystem.getGpuRenderTarget(sourceRenderSurfaceTexture);\n const gl = renderer.gl;\n\n this.finishRenderPass(sourceRenderSurfaceTexture);\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, glRenderTarget.resolveTargetFramebuffer);\n\n renderer.texture.bind(destinationTexture, 0);\n\n gl.copyTexSubImage2D(gl.TEXTURE_2D, 0,\n originDest.x, originDest.y,\n originSrc.x,\n originSrc.y,\n size.width,\n size.height\n );\n\n return destinationTexture;\n }\n\n public startRenderPass(\n renderTarget: RenderTarget,\n clear: CLEAR_OR_BOOL = true,\n clearColor?: RgbaArray,\n viewport?: Rectangle\n )\n {\n const renderTargetSystem = this._renderTargetSystem;\n\n const source = renderTarget.colorTexture;\n const gpuRenderTarget = renderTargetSystem.getGpuRenderTarget(renderTarget);\n\n let viewPortY = viewport.y;\n\n if (renderTarget.isRoot)\n {\n // /TODO this is the same logic?\n viewPortY = source.pixelHeight - viewport.height;\n }\n\n // unbind the current render texture..\n renderTarget.colorTextures.forEach((texture) =>\n {\n this._renderer.texture.unbind(texture);\n });\n\n const gl = this._renderer.gl;\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, gpuRenderTarget.framebuffer);\n\n const viewPortCache = this._viewPortCache;\n\n if (viewPortCache.x !== viewport.x\n || viewPortCache.y !== viewPortY\n || viewPortCache.width !== viewport.width\n || viewPortCache.height !== viewport.height)\n {\n viewPortCache.x = viewport.x;\n viewPortCache.y = viewPortY;\n viewPortCache.width = viewport.width;\n viewPortCache.height = viewport.height;\n\n gl.viewport(\n viewport.x,\n viewPortY,\n viewport.width,\n viewport.height,\n );\n }\n\n // if the stencil buffer has been requested, we need to create a stencil buffer\n if (!gpuRenderTarget.depthStencilRenderBuffer && (renderTarget.stencil || renderTarget.depth))\n {\n this._initStencil(gpuRenderTarget);\n }\n\n this.clear(renderTarget, clear, clearColor);\n }\n\n public finishRenderPass(renderTarget?: RenderTarget)\n {\n const renderTargetSystem = this._renderTargetSystem;\n\n const glRenderTarget = renderTargetSystem.getGpuRenderTarget(renderTarget);\n\n if (!glRenderTarget.msaa) return;\n\n const gl = this._renderer.gl;\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, glRenderTarget.resolveTargetFramebuffer);\n gl.bindFramebuffer(gl.READ_FRAMEBUFFER, glRenderTarget.framebuffer);\n\n gl.blitFramebuffer(\n 0, 0, glRenderTarget.width, glRenderTarget.height,\n 0, 0, glRenderTarget.width, glRenderTarget.height,\n gl.COLOR_BUFFER_BIT, gl.NEAREST,\n );\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, glRenderTarget.framebuffer);\n\n // dont think we need this anymore? keeping around just in case the wheels fall off\n // gl.bindFramebuffer(gl.READ_FRAMEBUFFER, null);\n }\n\n public initGpuRenderTarget(renderTarget: RenderTarget): GlRenderTarget\n {\n const renderer = this._renderer;\n\n const gl = renderer.gl;\n\n // do single...\n\n const glRenderTarget = new GlRenderTarget();\n\n // we are rendering to the main canvas..\n const colorTexture = renderTarget.colorTexture;\n\n if (colorTexture instanceof CanvasSource)\n {\n this._renderer.context.ensureCanvasSize(renderTarget.colorTexture.resource);\n\n glRenderTarget.framebuffer = null;\n\n return glRenderTarget;\n }\n\n this._initColor(renderTarget, glRenderTarget);\n\n // set up a depth texture..\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\n return glRenderTarget;\n }\n\n public destroyGpuRenderTarget(gpuRenderTarget: GlRenderTarget)\n {\n const gl = this._renderer.gl;\n\n if (gpuRenderTarget.framebuffer)\n {\n gl.deleteFramebuffer(gpuRenderTarget.framebuffer);\n gpuRenderTarget.framebuffer = null;\n }\n\n if (gpuRenderTarget.resolveTargetFramebuffer)\n {\n gl.deleteFramebuffer(gpuRenderTarget.resolveTargetFramebuffer);\n gpuRenderTarget.resolveTargetFramebuffer = null;\n }\n\n if (gpuRenderTarget.depthStencilRenderBuffer)\n {\n gl.deleteRenderbuffer(gpuRenderTarget.depthStencilRenderBuffer);\n gpuRenderTarget.depthStencilRenderBuffer = null;\n }\n\n gpuRenderTarget.msaaRenderBuffer.forEach((renderBuffer) =>\n {\n gl.deleteRenderbuffer(renderBuffer);\n });\n\n gpuRenderTarget.msaaRenderBuffer = null;\n }\n\n public clear(_renderTarget: RenderTarget, clear: CLEAR_OR_BOOL, clearColor?: RgbaArray)\n {\n if (!clear) return;\n\n const renderTargetSystem = this._renderTargetSystem;\n\n // if clear is boolean..\n if (typeof clear === 'boolean')\n {\n clear = clear ? CLEAR.ALL : CLEAR.NONE;\n }\n\n const gl = this._renderer.gl;\n\n if (clear & CLEAR.COLOR)\n {\n clearColor ??= renderTargetSystem.defaultClearColor;\n\n const clearColorCache = this._clearColorCache;\n const clearColorArray = clearColor as number[];\n\n if (clearColorCache[0] !== clearColorArray[0]\n || clearColorCache[1] !== clearColorArray[1]\n || clearColorCache[2] !== clearColorArray[2]\n || clearColorCache[3] !== clearColorArray[3])\n {\n clearColorCache[0] = clearColorArray[0];\n clearColorCache[1] = clearColorArray[1];\n clearColorCache[2] = clearColorArray[2];\n clearColorCache[3] = clearColorArray[3];\n\n gl.clearColor(clearColorArray[0], clearColorArray[1], clearColorArray[2], clearColorArray[3]);\n }\n }\n\n gl.clear(clear);\n }\n\n public resizeGpuRenderTarget(renderTarget: RenderTarget)\n {\n if (renderTarget.isRoot) return;\n\n const renderTargetSystem = this._renderTargetSystem;\n\n const glRenderTarget = renderTargetSystem.getGpuRenderTarget(renderTarget);\n\n this._resizeColor(renderTarget, glRenderTarget);\n\n if (renderTarget.stencil || renderTarget.depth)\n {\n this._resizeStencil(glRenderTarget);\n }\n }\n\n private _initColor(renderTarget: RenderTarget, glRenderTarget: GlRenderTarget)\n {\n const renderer = this._renderer;\n\n const gl = renderer.gl;\n // deal with our outputs..\n const resolveTargetFramebuffer = gl.createFramebuffer();\n\n glRenderTarget.resolveTargetFramebuffer = resolveTargetFramebuffer;\n\n // set up the texture..\n gl.bindFramebuffer(gl.FRAMEBUFFER, resolveTargetFramebuffer);\n\n glRenderTarget.width = renderTarget.colorTexture.source.pixelWidth;\n glRenderTarget.height = renderTarget.colorTexture.source.pixelHeight;\n\n renderTarget.colorTextures.forEach((colorTexture, i) =>\n {\n const source = colorTexture.source;\n\n if (source.antialias)\n {\n if (renderer.context.supports.msaa)\n {\n glRenderTarget.msaa = true;\n }\n else\n {\n warn('[RenderTexture] Antialiasing on textures is not supported in WebGL1');\n }\n }\n\n // TODO bindSource could return the glTexture\n renderer.texture.bindSource(source, 0);\n const glSource = renderer.texture.getGlSource(source);\n\n const glTexture = glSource.texture;\n\n gl.framebufferTexture2D(gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0 + i,\n 3553, // texture.target,\n glTexture,\n 0);// mipLevel);\n });\n\n if (glRenderTarget.msaa)\n {\n const viewFramebuffer = gl.createFramebuffer();\n\n glRenderTarget.framebuffer = viewFramebuffer;\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, viewFramebuffer);\n\n renderTarget.colorTextures.forEach((_, i) =>\n {\n const msaaRenderBuffer = gl.createRenderbuffer();\n\n glRenderTarget.msaaRenderBuffer[i] = msaaRenderBuffer;\n });\n }\n else\n {\n glRenderTarget.framebuffer = resolveTargetFramebuffer;\n }\n\n this._resizeColor(renderTarget, glRenderTarget);\n }\n\n private _resizeColor(renderTarget: RenderTarget, glRenderTarget: GlRenderTarget)\n {\n const source = renderTarget.colorTexture.source;\n\n glRenderTarget.width = source.pixelWidth;\n glRenderTarget.height = source.pixelHeight;\n\n renderTarget.colorTextures.forEach((colorTexture, i) =>\n {\n // nno need to resize the first texture..\n if (i === 0) return;\n\n colorTexture.source.resize(source.width, source.height, source._resolution);\n });\n\n if (glRenderTarget.msaa)\n {\n const renderer = this._renderer;\n const gl = renderer.gl;\n\n const viewFramebuffer = glRenderTarget.framebuffer;\n\n gl.bindFramebuffer(gl.FRAMEBUFFER, viewFramebuffer);\n\n renderTarget.colorTextures.forEach((colorTexture, i) =>\n {\n const source = colorTexture.source;\n\n renderer.texture.bindSource(source, 0);\n const glSource = renderer.texture.getGlSource(source);\n\n const glInternalFormat = glSource.internalFormat;\n\n const msaaRenderBuffer = glRenderTarget.msaaRenderBuffer[i];\n\n gl.bindRenderbuffer(\n gl.RENDERBUFFER,\n msaaRenderBuffer\n );\n\n gl.renderbufferStorageMultisample(\n gl.RENDERBUFFER,\n 4,\n glInternalFormat,\n source.pixelWidth,\n source.pixelHeight\n );\n\n gl.framebufferRenderbuffer(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0 + i,\n gl.RENDERBUFFER,\n msaaRenderBuffer\n );\n });\n }\n }\n\n private _initStencil(glRenderTarget: GlRenderTarget)\n {\n // this already exists on the default screen\n if (glRenderTarget.framebuffer === null) return;\n\n const gl = this._renderer.gl;\n\n const depthStencilRenderBuffer = gl.createRenderbuffer();\n\n glRenderTarget.depthStencilRenderBuffer = depthStencilRenderBuffer;\n\n gl.bindRenderbuffer(\n gl.RENDERBUFFER,\n depthStencilRenderBuffer\n );\n\n gl.framebufferRenderbuffer(\n gl.FRAMEBUFFER,\n gl.DEPTH_STENCIL_ATTACHMENT,\n gl.RENDERBUFFER,\n depthStencilRenderBuffer\n );\n\n // TDO DO>>\n this._resizeStencil(glRenderTarget);\n }\n\n private _resizeStencil(glRenderTarget: GlRenderTarget)\n {\n const gl = this._renderer.gl;\n\n gl.bindRenderbuffer(\n gl.RENDERBUFFER,\n glRenderTarget.depthStencilRenderBuffer\n );\n\n if (glRenderTarget.msaa)\n {\n gl.renderbufferStorageMultisample(\n gl.RENDERBUFFER,\n 4,\n gl.DEPTH24_STENCIL8,\n glRenderTarget.width,\n glRenderTarget.height\n );\n }\n else\n {\n gl.renderbufferStorage(\n gl.RENDERBUFFER,\n this._renderer.context.webGLVersion === 2\n ? gl.DEPTH24_STENCIL8\n : gl.DEPTH_STENCIL,\n glRenderTarget.width,\n glRenderTarget.height\n );\n }\n }\n\n public prerender(renderTarget: RenderTarget)\n {\n const resource = renderTarget.colorTexture.resource;\n\n // if the render target is a canvas, ensure its size matches the source\n if (this._renderer.context.multiView && CanvasSource.test(resource))\n {\n this._renderer.context.ensureCanvasSize(resource);\n }\n }\n\n public postrender(renderTarget: RenderTarget)\n {\n // if multiView is not enabled, we don't need to do anything\n if (!this._renderer.context.multiView) return;\n\n // if the render target is a canvas, we need to copy the pixels from the gl canvas\n // to the canvas target\n if (CanvasSource.test(renderTarget.colorTexture.resource))\n {\n const contextCanvas = this._renderer.context.canvas;\n const canvasSource = renderTarget.colorTexture as unknown as CanvasSource;\n\n canvasSource.context2D.drawImage(\n contextCanvas as CanvasImageSource,\n 0, canvasSource.pixelHeight - contextCanvas.height\n );\n }\n }\n}\n"],"names":["source"],"mappings":";;;;;;;AAkBO,MAAM,qBACb,CAAA;AAAA,EADO,WAAA,GAAA;AAIH,IAAA,IAAA,CAAQ,gBAA8B,GAAA,CAAC,CAAG,EAAA,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AACjD,IAAQ,IAAA,CAAA,cAAA,GAA4B,IAAI,SAAU,EAAA,CAAA;AAAA,GAAA;AAAA,EAE3C,IAAA,CAAK,UAAyB,kBACrC,EAAA;AACI,IAAA,IAAA,CAAK,SAAY,GAAA,QAAA,CAAA;AACjB,IAAA,IAAA,CAAK,mBAAsB,GAAA,kBAAA,CAAA;AAE3B,IAAS,QAAA,CAAA,OAAA,CAAQ,aAAc,CAAA,GAAA,CAAI,IAAI,CAAA,CAAA;AAAA,GAC3C;AAAA,EAEO,aACP,GAAA;AACI,IAAA,IAAA,CAAK,gBAAmB,GAAA,CAAC,CAAG,EAAA,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AACnC,IAAK,IAAA,CAAA,cAAA,GAAiB,IAAI,SAAU,EAAA,CAAA;AAAA,GACxC;AAAA,EAEO,aACH,CAAA,0BAAA,EACA,kBACA,EAAA,SAAA,EACA,MACA,UAEJ,EAAA;AACI,IAAA,MAAM,qBAAqB,IAAK,CAAA,mBAAA,CAAA;AAEhC,IAAA,MAAM,WAAW,IAAK,CAAA,SAAA,CAAA;AACtB,IAAM,MAAA,cAAA,GAAiB,kBAAmB,CAAA,kBAAA,CAAmB,0BAA0B,CAAA,CAAA;AACvF,IAAA,MAAM,KAAK,QAAS,CAAA,EAAA,CAAA;AAEpB,IAAA,IAAA,CAAK,iBAAiB,0BAA0B,CAAA,CAAA;AAEhD,IAAA,EAAA,CAAG,eAAgB,CAAA,EAAA,CAAG,WAAa,EAAA,cAAA,CAAe,wBAAwB,CAAA,CAAA;AAE1E,IAAS,QAAA,CAAA,OAAA,CAAQ,IAAK,CAAA,kBAAA,EAAoB,CAAC,CAAA,CAAA;AAE3C,IAAG,EAAA,CAAA,iBAAA;AAAA,MAAkB,EAAG,CAAA,UAAA;AAAA,MAAY,CAAA;AAAA,MAChC,UAAW,CAAA,CAAA;AAAA,MAAG,UAAW,CAAA,CAAA;AAAA,MACzB,SAAU,CAAA,CAAA;AAAA,MACV,SAAU,CAAA,CAAA;AAAA,MACV,IAAK,CAAA,KAAA;AAAA,MACL,IAAK,CAAA,MAAA;AAAA,KACT,CAAA;AAEA,IAAO,OAAA,kBAAA,CAAA;AAAA,GACX;AAAA,EAEO,eACH,CAAA,YAAA,EACA,KAAuB,GAAA,IAAA,EACvB,YACA,QAEJ,EAAA;AACI,IAAA,MAAM,qBAAqB,IAAK,CAAA,mBAAA,CAAA;AAEhC,IAAA,MAAM,SAAS,YAAa,CAAA,YAAA,CAAA;AAC5B,IAAM,MAAA,eAAA,GAAkB,kBAAmB,CAAA,kBAAA,CAAmB,YAAY,CAAA,CAAA;AAE1E,IAAA,IAAI,YAAY,QAAS,CAAA,CAAA,CAAA;AAEzB,IAAA,IAAI,aAAa,MACjB,EAAA;AAEI,MAAY,SAAA,GAAA,MAAA,CAAO,cAAc,QAAS,CAAA,MAAA,CAAA;AAAA,KAC9C;AAGA,IAAa,YAAA,CAAA,aAAA,CAAc,OAAQ,CAAA,CAAC,OACpC,KAAA;AACI,MAAK,IAAA,CAAA,SAAA,CAAU,OAAQ,CAAA,MAAA,CAAO,OAAO,CAAA,CAAA;AAAA,KACxC,CAAA,CAAA;AAED,IAAM,MAAA,EAAA,GAAK,KAAK,SAAU,CAAA,EAAA,CAAA;AAE1B,IAAA,EAAA,CAAG,eAAgB,CAAA,EAAA,CAAG,WAAa,EAAA,eAAA,CAAgB,WAAW,CAAA,CAAA;AAE9D,IAAA,MAAM,gBAAgB,IAAK,CAAA,cAAA,CAAA;AAE3B,IAAA,IAAI,aAAc,CAAA,CAAA,KAAM,QAAS,CAAA,CAAA,IAC1B,cAAc,CAAM,KAAA,SAAA,IACpB,aAAc,CAAA,KAAA,KAAU,QAAS,CAAA,KAAA,IACjC,aAAc,CAAA,MAAA,KAAW,SAAS,MACzC,EAAA;AACI,MAAA,aAAA,CAAc,IAAI,QAAS,CAAA,CAAA,CAAA;AAC3B,MAAA,aAAA,CAAc,CAAI,GAAA,SAAA,CAAA;AAClB,MAAA,aAAA,CAAc,QAAQ,QAAS,CAAA,KAAA,CAAA;AAC/B,MAAA,aAAA,CAAc,SAAS,QAAS,CAAA,MAAA,CAAA;AAEhC,MAAG,EAAA,CAAA,QAAA;AAAA,QACC,QAAS,CAAA,CAAA;AAAA,QACT,SAAA;AAAA,QACA,QAAS,CAAA,KAAA;AAAA,QACT,QAAS,CAAA,MAAA;AAAA,OACb,CAAA;AAAA,KACJ;AAGA,IAAA,IAAI,CAAC,eAAgB,CAAA,wBAAA,KAA6B,YAAa,CAAA,OAAA,IAAW,aAAa,KACvF,CAAA,EAAA;AACI,MAAA,IAAA,CAAK,aAAa,eAAe,CAAA,CAAA;AAAA,KACrC;AAEA,IAAK,IAAA,CAAA,KAAA,CAAM,YAAc,EAAA,KAAA,EAAO,UAAU,CAAA,CAAA;AAAA,GAC9C;AAAA,EAEO,iBAAiB,YACxB,EAAA;AACI,IAAA,MAAM,qBAAqB,IAAK,CAAA,mBAAA,CAAA;AAEhC,IAAM,MAAA,cAAA,GAAiB,kBAAmB,CAAA,kBAAA,CAAmB,YAAY,CAAA,CAAA;AAEzE,IAAA,IAAI,CAAC,cAAe,CAAA,IAAA;AAAM,MAAA,OAAA;AAE1B,IAAM,MAAA,EAAA,GAAK,KAAK,SAAU,CAAA,EAAA,CAAA;AAE1B,IAAA,EAAA,CAAG,eAAgB,CAAA,EAAA,CAAG,WAAa,EAAA,cAAA,CAAe,wBAAwB,CAAA,CAAA;AAC1E,IAAA,EAAA,CAAG,eAAgB,CAAA,EAAA,CAAG,gBAAkB,EAAA,cAAA,CAAe,WAAW,CAAA,CAAA;AAElE,IAAG,EAAA,CAAA,eAAA;AAAA,MACC,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,cAAe,CAAA,KAAA;AAAA,MAAO,cAAe,CAAA,MAAA;AAAA,MAC3C,CAAA;AAAA,MAAG,CAAA;AAAA,MAAG,cAAe,CAAA,KAAA;AAAA,MAAO,cAAe,CAAA,MAAA;AAAA,MAC3C,EAAG,CAAA,gBAAA;AAAA,MAAkB,EAAG,CAAA,OAAA;AAAA,KAC5B,CAAA;AAEA,IAAA,EAAA,CAAG,eAAgB,CAAA,EAAA,CAAG,WAAa,EAAA,cAAA,CAAe,WAAW,CAAA,CAAA;AAAA,GAIjE;AAAA,EAEO,oBAAoB,YAC3B,EAAA;AACI,IAAA,MAAM,WAAW,IAAK,CAAA,SAAA,CAAA;AAEtB,IAAA,MAAM,KAAK,QAAS,CAAA,EAAA,CAAA;AAIpB,IAAM,MAAA,cAAA,GAAiB,IAAI,cAAe,EAAA,CAAA;AAG1C,IAAA,MAAM,eAAe,YAAa,CAAA,YAAA,CAAA;AAElC,IAAA,IAAI,wBAAwB,YAC5B,EAAA;AACI,MAAA,IAAA,CAAK,SAAU,CAAA,OAAA,CAAQ,gBAAiB,CAAA,YAAA,CAAa,aAAa,QAAQ,CAAA,CAAA;AAE1E,MAAA,cAAA,CAAe,WAAc,GAAA,IAAA,CAAA;AAE7B,MAAO,OAAA,cAAA,CAAA;AAAA,KACX;AAEA,IAAK,IAAA,CAAA,UAAA,CAAW,cAAc,cAAc,CAAA,CAAA;AAI5C,IAAG,EAAA,CAAA,eAAA,CAAgB,EAAG,CAAA,WAAA,EAAa,IAAI,CAAA,CAAA;AAEvC,IAAO,OAAA,cAAA,CAAA;AAAA,GACX;AAAA,EAEO,uBAAuB,eAC9B,EAAA;AACI,IAAM,MAAA,EAAA,GAAK,KAAK,SAAU,CAAA,EAAA,CAAA;AAE1B,IAAA,IAAI,gBAAgB,WACpB,EAAA;AACI,MAAG,EAAA,CAAA,iBAAA,CAAkB,gBAAgB,WAAW,CAAA,CAAA;AAChD,MAAA,eAAA,CAAgB,WAAc,GAAA,IAAA,CAAA;AAAA,KAClC;AAEA,IAAA,IAAI,gBAAgB,wBACpB,EAAA;AACI,MAAG,EAAA,CAAA,iBAAA,CAAkB,gBAAgB,wBAAwB,CAAA,CAAA;AAC7D,MAAA,eAAA,CAAgB,wBAA2B,GAAA,IAAA,CAAA;AAAA,KAC/C;AAEA,IAAA,IAAI,gBAAgB,wBACpB,EAAA;AACI,MAAG,EAAA,CAAA,kBAAA,CAAmB,gBAAgB,wBAAwB,CAAA,CAAA;AAC9D,MAAA,eAAA,CAAgB,wBAA2B,GAAA,IAAA,CAAA;AAAA,KAC/C;AAEA,IAAgB,eAAA,CAAA,gBAAA,CAAiB,OAAQ,CAAA,CAAC,YAC1C,KAAA;AACI,MAAA,EAAA,CAAG,mBAAmB,YAAY,CAAA,CAAA;AAAA,KACrC,CAAA,CAAA;AAED,IAAA,eAAA,CAAgB,gBAAmB,GAAA,IAAA,CAAA;AAAA,GACvC;AAAA,EAEO,KAAA,CAAM,aAA6B,EAAA,KAAA,EAAsB,UAChE,EAAA;AACI,IAAA,IAAI,CAAC,KAAA;AAAO,MAAA,OAAA;AAEZ,IAAA,MAAM,qBAAqB,IAAK,CAAA,mBAAA,CAAA;AAGhC,IAAI,IAAA,OAAO,UAAU,SACrB,EAAA;AACI,MAAQ,KAAA,GAAA,KAAA,GAAQ,KAAM,CAAA,GAAA,GAAM,KAAM,CAAA,IAAA,CAAA;AAAA,KACtC;AAEA,IAAM,MAAA,EAAA,GAAK,KAAK,SAAU,CAAA,EAAA,CAAA;AAE1B,IAAI,IAAA,KAAA,GAAQ,MAAM,KAClB,EAAA;AACI,MAAA,UAAA,KAAA,UAAA,GAAe,kBAAmB,CAAA,iBAAA,CAAA,CAAA;AAElC,MAAA,MAAM,kBAAkB,IAAK,CAAA,gBAAA,CAAA;AAC7B,MAAA,MAAM,eAAkB,GAAA,UAAA,CAAA;AAExB,MAAI,IAAA,eAAA,CAAgB,CAAC,CAAM,KAAA,eAAA,CAAgB,CAAC,CACrC,IAAA,eAAA,CAAgB,CAAC,CAAA,KAAM,eAAgB,CAAA,CAAC,KACxC,eAAgB,CAAA,CAAC,CAAM,KAAA,eAAA,CAAgB,CAAC,CAAA,IACxC,gBAAgB,CAAC,CAAA,KAAM,eAAgB,CAAA,CAAC,CAC/C,EAAA;AACI,QAAgB,eAAA,CAAA,CAAC,CAAI,GAAA,eAAA,CAAgB,CAAC,CAAA,CAAA;AACtC,QAAgB,eAAA,CAAA,CAAC,CAAI,GAAA,eAAA,CAAgB,CAAC,CAAA,CAAA;AACtC,QAAgB,eAAA,CAAA,CAAC,CAAI,GAAA,eAAA,CAAgB,CAAC,CAAA,CAAA;AACtC,QAAgB,eAAA,CAAA,CAAC,CAAI,GAAA,eAAA,CAAgB,CAAC,CAAA,CAAA;AAEtC,QAAA,EAAA,CAAG,UAAW,CAAA,eAAA,CAAgB,CAAC,CAAA,EAAG,eAAgB,CAAA,CAAC,CAAG,EAAA,eAAA,CAAgB,CAAC,CAAA,EAAG,eAAgB,CAAA,CAAC,CAAC,CAAA,CAAA;AAAA,OAChG;AAAA,KACJ;AAEA,IAAA,EAAA,CAAG,MAAM,KAAK,CAAA,CAAA;AAAA,GAClB;AAAA,EAEO,sBAAsB,YAC7B,EAAA;AACI,IAAA,IAAI,YAAa,CAAA,MAAA;AAAQ,MAAA,OAAA;AAEzB,IAAA,MAAM,qBAAqB,IAAK,CAAA,mBAAA,CAAA;AAEhC,IAAM,MAAA,cAAA,GAAiB,kBAAmB,CAAA,kBAAA,CAAmB,YAAY,CAAA,CAAA;AAEzE,IAAK,IAAA,CAAA,YAAA,CAAa,cAAc,cAAc,CAAA,CAAA;AAE9C,IAAI,IAAA,YAAA,CAAa,OAAW,IAAA,YAAA,CAAa,KACzC,EAAA;AACI,MAAA,IAAA,CAAK,eAAe,cAAc,CAAA,CAAA;AAAA,KACtC;AAAA,GACJ;AAAA,EAEQ,UAAA,CAAW,cAA4B,cAC/C,EAAA;AACI,IAAA,MAAM,WAAW,IAAK,CAAA,SAAA,CAAA;AAEtB,IAAA,MAAM,KAAK,QAAS,CAAA,EAAA,CAAA;AAEpB,IAAM,MAAA,wBAAA,GAA2B,GAAG,iBAAkB,EAAA,CAAA;AAEtD,IAAA,cAAA,CAAe,wBAA2B,GAAA,wBAAA,CAAA;AAG1C,IAAG,EAAA,CAAA,eAAA,CAAgB,EAAG,CAAA,WAAA,EAAa,wBAAwB,CAAA,CAAA;AAE3D,IAAe,cAAA,CAAA,KAAA,GAAQ,YAAa,CAAA,YAAA,CAAa,MAAO,CAAA,UAAA,CAAA;AACxD,IAAe,cAAA,CAAA,MAAA,GAAS,YAAa,CAAA,YAAA,CAAa,MAAO,CAAA,WAAA,CAAA;AAEzD,IAAA,YAAA,CAAa,aAAc,CAAA,OAAA,CAAQ,CAAC,YAAA,EAAc,CAClD,KAAA;AACI,MAAA,MAAM,SAAS,YAAa,CAAA,MAAA,CAAA;AAE5B,MAAA,IAAI,OAAO,SACX,EAAA;AACI,QAAI,IAAA,QAAA,CAAS,OAAQ,CAAA,QAAA,CAAS,IAC9B,EAAA;AACI,UAAA,cAAA,CAAe,IAAO,GAAA,IAAA,CAAA;AAAA,SAG1B,MAAA;AACI,UAAA,IAAA,CAAK,qEAAqE,CAAA,CAAA;AAAA,SAC9E;AAAA,OACJ;AAGA,MAAS,QAAA,CAAA,OAAA,CAAQ,UAAW,CAAA,MAAA,EAAQ,CAAC,CAAA,CAAA;AACrC,MAAA,MAAM,QAAW,GAAA,QAAA,CAAS,OAAQ,CAAA,WAAA,CAAY,MAAM,CAAA,CAAA;AAEpD,MAAA,MAAM,YAAY,QAAS,CAAA,OAAA,CAAA;AAE3B,MAAG,EAAA,CAAA,oBAAA;AAAA,QAAqB,EAAG,CAAA,WAAA;AAAA,QACvB,GAAG,iBAAoB,GAAA,CAAA;AAAA,QACvB,IAAA;AAAA;AAAA,QACA,SAAA;AAAA,QACA,CAAA;AAAA,OAAC,CAAA;AAAA,KACR,CAAA,CAAA;AAED,IAAA,IAAI,eAAe,IACnB,EAAA;AACI,MAAM,MAAA,eAAA,GAAkB,GAAG,iBAAkB,EAAA,CAAA;AAE7C,MAAA,cAAA,CAAe,WAAc,GAAA,eAAA,CAAA;AAE7B,MAAG,EAAA,CAAA,eAAA,CAAgB,EAAG,CAAA,WAAA,EAAa,eAAe,CAAA,CAAA;AAElD,MAAA,YAAA,CAAa,aAAc,CAAA,OAAA,CAAQ,CAAC,CAAA,EAAG,CACvC,KAAA;AACI,QAAM,MAAA,gBAAA,GAAmB,GAAG,kBAAmB,EAAA,CAAA;AAE/C,QAAe,cAAA,CAAA,gBAAA,CAAiB,CAAC,CAAI,GAAA,gBAAA,CAAA;AAAA,OACxC,CAAA,CAAA;AAAA,KAGL,MAAA;AACI,MAAA,cAAA,CAAe,WAAc,GAAA,wBAAA,CAAA;AAAA,KACjC;AAEA,IAAK,IAAA,CAAA,YAAA,CAAa,cAAc,cAAc,CAAA,CAAA;AAAA,GAClD;AAAA,EAEQ,YAAA,CAAa,cAA4B,cACjD,EAAA;AACI,IAAM,MAAA,MAAA,GAAS,aAAa,YAAa,CAAA,MAAA,CAAA;AAEzC,IAAA,cAAA,CAAe,QAAQ,MAAO,CAAA,UAAA,CAAA;AAC9B,IAAA,cAAA,CAAe,SAAS,MAAO,CAAA,WAAA,CAAA;AAE/B,IAAA,YAAA,CAAa,aAAc,CAAA,OAAA,CAAQ,CAAC,YAAA,EAAc,CAClD,KAAA;AAEI,MAAA,IAAI,CAAM,KAAA,CAAA;AAAG,QAAA,OAAA;AAEb,MAAA,YAAA,CAAa,OAAO,MAAO,CAAA,MAAA,CAAO,OAAO,MAAO,CAAA,MAAA,EAAQ,OAAO,WAAW,CAAA,CAAA;AAAA,KAC7E,CAAA,CAAA;AAED,IAAA,IAAI,eAAe,IACnB,EAAA;AACI,MAAA,MAAM,WAAW,IAAK,CAAA,SAAA,CAAA;AACtB,MAAA,MAAM,KAAK,QAAS,CAAA,EAAA,CAAA;AAEpB,MAAA,MAAM,kBAAkB,cAAe,CAAA,WAAA,CAAA;AAEvC,MAAG,EAAA,CAAA,eAAA,CAAgB,EAAG,CAAA,WAAA,EAAa,eAAe,CAAA,CAAA;AAElD,MAAA,YAAA,CAAa,aAAc,CAAA,OAAA,CAAQ,CAAC,YAAA,EAAc,CAClD,KAAA;AACI,QAAA,MAAMA,UAAS,YAAa,CAAA,MAAA,CAAA;AAE5B,QAAS,QAAA,CAAA,OAAA,CAAQ,UAAWA,CAAAA,OAAAA,EAAQ,CAAC,CAAA,CAAA;AACrC,QAAA,MAAM,QAAW,GAAA,QAAA,CAAS,OAAQ,CAAA,WAAA,CAAYA,OAAM,CAAA,CAAA;AAEpD,QAAA,MAAM,mBAAmB,QAAS,CAAA,cAAA,CAAA;AAElC,QAAM,MAAA,gBAAA,GAAmB,cAAe,CAAA,gBAAA,CAAiB,CAAC,CAAA,CAAA;AAE1D,QAAG,EAAA,CAAA,gBAAA;AAAA,UACC,EAAG,CAAA,YAAA;AAAA,UACH,gBAAA;AAAA,SACJ,CAAA;AAEA,QAAG,EAAA,CAAA,8BAAA;AAAA,UACC,EAAG,CAAA,YAAA;AAAA,UACH,CAAA;AAAA,UACA,gBAAA;AAAA,UACAA,OAAO,CAAA,UAAA;AAAA,UACPA,OAAO,CAAA,WAAA;AAAA,SACX,CAAA;AAEA,QAAG,EAAA,CAAA,uBAAA;AAAA,UACC,EAAG,CAAA,WAAA;AAAA,UACH,GAAG,iBAAoB,GAAA,CAAA;AAAA,UACvB,EAAG,CAAA,YAAA;AAAA,UACH,gBAAA;AAAA,SACJ,CAAA;AAAA,OACH,CAAA,CAAA;AAAA,KACL;AAAA,GACJ;AAAA,EAEQ,aAAa,cACrB,EAAA;AAEI,IAAA,IAAI,eAAe,WAAgB,KAAA,IAAA;AAAM,MAAA,OAAA;AAEzC,IAAM,MAAA,EAAA,GAAK,KAAK,SAAU,CAAA,EAAA,CAAA;AAE1B,IAAM,MAAA,wBAAA,GAA2B,GAAG,kBAAmB,EAAA,CAAA;AAEvD,IAAA,cAAA,CAAe,wBAA2B,GAAA,wBAAA,CAAA;AAE1C,IAAG,EAAA,CAAA,gBAAA;AAAA,MACC,EAAG,CAAA,YAAA;AAAA,MACH,wBAAA;AAAA,KACJ,CAAA;AAEA,IAAG,EAAA,CAAA,uBAAA;AAAA,MACC,EAAG,CAAA,WAAA;AAAA,MACH,EAAG,CAAA,wBAAA;AAAA,MACH,EAAG,CAAA,YAAA;AAAA,MACH,wBAAA;AAAA,KACJ,CAAA;AAGA,IAAA,IAAA,CAAK,eAAe,cAAc,CAAA,CAAA;AAAA,GACtC;AAAA,EAEQ,eAAe,cACvB,EAAA;AACI,IAAM,MAAA,EAAA,GAAK,KAAK,SAAU,CAAA,EAAA,CAAA;AAE1B,IAAG,EAAA,CAAA,gBAAA;AAAA,MACC,EAAG,CAAA,YAAA;AAAA,MACH,cAAe,CAAA,wBAAA;AAAA,KACnB,CAAA;AAEA,IAAA,IAAI,eAAe,IACnB,EAAA;AACI,MAAG,EAAA,CAAA,8BAAA;AAAA,QACC,EAAG,CAAA,YAAA;AAAA,QACH,CAAA;AAAA,QACA,EAAG,CAAA,gBAAA;AAAA,QACH,cAAe,CAAA,KAAA;AAAA,QACf,cAAe,CAAA,MAAA;AAAA,OACnB,CAAA;AAAA,KAGJ,MAAA;AACI,MAAG,EAAA,CAAA,mBAAA;AAAA,QACC,EAAG,CAAA,YAAA;AAAA,QACH,KAAK,SAAU,CAAA,OAAA,CAAQ,iBAAiB,CAClC,GAAA,EAAA,CAAG,mBACH,EAAG,CAAA,aAAA;AAAA,QACT,cAAe,CAAA,KAAA;AAAA,QACf,cAAe,CAAA,MAAA;AAAA,OACnB,CAAA;AAAA,KACJ;AAAA,GACJ;AAAA,EAEO,UAAU,YACjB,EAAA;AACI,IAAM,MAAA,QAAA,GAAW,aAAa,YAAa,CAAA,QAAA,CAAA;AAG3C,IAAA,IAAI,KAAK,SAAU,CAAA,OAAA,CAAQ,aAAa,YAAa,CAAA,IAAA,CAAK,QAAQ,CAClE,EAAA;AACI,MAAK,IAAA,CAAA,SAAA,CAAU,OAAQ,CAAA,gBAAA,CAAiB,QAAQ,CAAA,CAAA;AAAA,KACpD;AAAA,GACJ;AAAA,EAEO,WAAW,YAClB,EAAA;AAEI,IAAI,IAAA,CAAC,IAAK,CAAA,SAAA,CAAU,OAAQ,CAAA,SAAA;AAAW,MAAA,OAAA;AAIvC,IAAA,IAAI,YAAa,CAAA,IAAA,CAAK,YAAa,CAAA,YAAA,CAAa,QAAQ,CACxD,EAAA;AACI,MAAM,MAAA,aAAA,GAAgB,IAAK,CAAA,SAAA,CAAU,OAAQ,CAAA,MAAA,CAAA;AAC7C,MAAA,MAAM,eAAe,YAAa,CAAA,YAAA,CAAA;AAElC,MAAA,YAAA,CAAa,SAAU,CAAA,SAAA;AAAA,QACnB,aAAA;AAAA,QACA,CAAA;AAAA,QAAG,YAAA,CAAa,cAAc,aAAc,CAAA,MAAA;AAAA,OAChD,CAAA;AAAA,KACJ;AAAA,GACJ;AACJ;;;;"}