1 |
- {"ast":null,"code":"import _asyncToGenerator from \"F:/workspace/202226701027/huinongbao-app/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\";\nimport { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture.js\";\nimport { ShaderMaterial } from \"../Materials/shaderMaterial.js\";\nimport { Color3, Color4 } from \"../Maths/math.color.js\";\nimport { VertexBuffer } from \"../Meshes/buffer.js\";\n/**\n * Class used to perform a picking operation using GPU\n * GPUPIcker can pick meshes, instances and thin instances\n */\nexport class GPUPicker {\n constructor() {\n this._pickingTexture = null;\n this._idMap = [];\n this._thinIdMap = [];\n this._idColors = [];\n this._meshMaterialMap = new Map();\n this._meshRenderingCount = 0;\n this._attributeName = \"instanceMeshID\";\n /** Shader language used by the generator */\n this._shaderLanguage = 0 /* ShaderLanguage.GLSL */;\n this._pickingInProgress = false;\n }\n /**\n * Gets the shader language used in this generator.\n */\n get shaderLanguage() {\n return this._shaderLanguage;\n }\n /**\n * Gets a boolean indicating if the picking is in progress\n */\n get pickingInProgress() {\n return this._pickingInProgress;\n }\n static _IdToRgb(id) {\n GPUPicker._TempColor.r = (id & 0xff0000) >> 16;\n GPUPicker._TempColor.g = (id & 0x00ff00) >> 8;\n GPUPicker._TempColor.b = (id & 0x0000ff) >> 0;\n }\n _getColorIdFromReadBuffer(offset) {\n const r = this._readbuffer[offset];\n const g = this._readbuffer[offset + 1];\n const b = this._readbuffer[offset + 2];\n return (r << 16) + (g << 8) + b;\n }\n static _SetColorData(buffer, i, r, g, b) {\n buffer[i] = r / 255.0;\n buffer[i + 1] = g / 255.0;\n buffer[i + 2] = b / 255.0;\n buffer[i + 3] = 1.0;\n }\n _createRenderTarget(scene, width, height) {\n if (this._pickingTexture) {\n this._pickingTexture.dispose();\n }\n this._pickingTexture = new RenderTargetTexture(\"pickingTexure\", {\n width: width,\n height: height\n }, scene, false, undefined, 0, false, 1);\n }\n _createColorMaterialAsync(scene) {\n var _this = this;\n return _asyncToGenerator(function* () {\n if (_this._defaultRenderMaterial) {\n _this._defaultRenderMaterial.dispose();\n }\n _this._defaultRenderMaterial = null;\n const engine = scene.getEngine();\n if (engine.isWebGPU) {\n _this._shaderLanguage = 1 /* ShaderLanguage.WGSL */;\n }\n const defines = [];\n const options = {\n attributes: [VertexBuffer.PositionKind, _this._attributeName, \"bakedVertexAnimationSettingsInstanced\"],\n uniforms: [\"world\", \"viewProjection\", \"meshID\"],\n needAlphaBlending: false,\n defines: defines,\n useClipPlane: null,\n shaderLanguage: _this._shaderLanguage,\n extraInitializationsAsync: function () {\n var _ref = _asyncToGenerator(function* () {\n if (_this.shaderLanguage === 1 /* ShaderLanguage.WGSL */) {\n yield Promise.all([import(\"../ShadersWGSL/picking.fragment.js\"), import(\"../ShadersWGSL/picking.vertex.js\")]);\n } else {\n yield Promise.all([import(\"../Shaders/picking.fragment.js\"), import(\"../Shaders/picking.vertex.js\")]);\n }\n });\n return function extraInitializationsAsync() {\n return _ref.apply(this, arguments);\n };\n }()\n };\n _this._defaultRenderMaterial = new ShaderMaterial(\"pickingShader\", scene, \"picking\", options, false);\n _this._defaultRenderMaterial.onBindObservable.add(_this._materialBindCallback, undefined, undefined, _this);\n })();\n }\n _materialBindCallback(mesh) {\n if (!mesh) {\n return;\n }\n const material = this._meshMaterialMap.get(mesh);\n const effect = material.getEffect();\n if (!mesh.hasInstances && !mesh.isAnInstance && !mesh.hasThinInstances) {\n effect.setColor4(\"meshID\", this._idColors[mesh.uniqueId], 1);\n }\n this._meshRenderingCount++;\n }\n _generateColorData(instanceCount, id, index, r, g, b, onInstance) {\n const colorData = new Float32Array(4 * (instanceCount + 1));\n GPUPicker._SetColorData(colorData, 0, r, g, b);\n for (let i = 0; i < instanceCount; i++) {\n GPUPicker._IdToRgb(id);\n onInstance(i, id);\n GPUPicker._SetColorData(colorData, (i + 1) * 4, GPUPicker._TempColor.r, GPUPicker._TempColor.g, GPUPicker._TempColor.b);\n id++;\n }\n return colorData;\n }\n _generateThinInstanceColorData(instanceCount, id, onInstance) {\n const colorData = new Float32Array(4 * instanceCount);\n for (let i = 0; i < instanceCount; i++) {\n GPUPicker._IdToRgb(id);\n onInstance(i, id);\n GPUPicker._SetColorData(colorData, i * 4, GPUPicker._TempColor.r, GPUPicker._TempColor.g, GPUPicker._TempColor.b);\n id++;\n }\n return colorData;\n }\n /**\n * Set the list of meshes to pick from\n * Set that value to null to clear the list (and avoid leaks)\n * The module will read and delete from the array provided by reference. Disposing the module or setting the value to null will clear the array.\n * @param list defines the list of meshes to pick from\n */\n setPickingList(list) {\n if (this._pickableMeshes) {\n // Cleanup\n for (let index = 0; index < this._pickableMeshes.length; index++) {\n const mesh = this._pickableMeshes[index];\n if (mesh.hasInstances) {\n mesh.removeVerticesData(this._attributeName);\n }\n if (mesh.hasThinInstances) {\n mesh.thinInstanceSetBuffer(this._attributeName, null);\n }\n if (this._pickingTexture) {\n this._pickingTexture.setMaterialForRendering(mesh, undefined);\n }\n const material = this._meshMaterialMap.get(mesh);\n if (material !== this._defaultRenderMaterial) {\n material.onBindObservable.removeCallback(this._materialBindCallback);\n }\n }\n this._pickableMeshes.length = 0;\n this._meshMaterialMap.clear();\n this._idMap.length = 0;\n this._thinIdMap.length = 0;\n this._idColors.length = 0;\n if (this._pickingTexture) {\n this._pickingTexture.renderList = [];\n }\n }\n if (!list || list.length === 0) {\n return;\n }\n this._pickableMeshes = list;\n // Prepare target\n const scene = (\"mesh\" in list[0] ? list[0].mesh : list[0]).getScene();\n const engine = scene.getEngine();\n const rttSizeW = engine.getRenderWidth();\n const rttSizeH = engine.getRenderHeight();\n if (!this._pickingTexture) {\n this._createRenderTarget(scene, rttSizeW, rttSizeH);\n } else {\n const size = this._pickingTexture.getSize();\n if (size.width !== rttSizeW || size.height !== rttSizeH || this._cachedScene !== scene) {\n this._createRenderTarget(scene, rttSizeW, rttSizeH);\n }\n }\n if (!this._cachedScene || this._cachedScene !== scene) {\n this._createColorMaterialAsync(scene);\n }\n this._cachedScene = scene;\n this._engine = scene.getEngine();\n for (let i = 0; i < list.length; i++) {\n const item = list[i];\n if (\"mesh\" in item) {\n this._meshMaterialMap.set(item.mesh, item.material);\n list[i] = item.mesh;\n } else {\n this._meshMaterialMap.set(item, this._defaultRenderMaterial);\n }\n }\n this._pickingTexture.renderList = [];\n // We will affect colors and create vertex color buffers\n let id = 1;\n for (let index = 0; index < this._pickableMeshes.length; index++) {\n const mesh = this._pickableMeshes[index];\n const material = this._meshMaterialMap.get(mesh);\n if (material !== this._defaultRenderMaterial) {\n material.onBindObservable.add(this._materialBindCallback, undefined, undefined, this);\n }\n this._pickingTexture.setMaterialForRendering(mesh, material);\n this._pickingTexture.renderList.push(mesh);\n if (mesh.isAnInstance) {\n continue; // This will be handled by the source mesh\n }\n GPUPicker._IdToRgb(id);\n if (mesh.hasThinInstances) {\n const colorData = this._generateThinInstanceColorData(mesh.thinInstanceCount, id, (i, id) => {\n this._thinIdMap[id] = {\n meshId: index,\n thinId: i\n };\n });\n id += mesh.thinInstanceCount;\n mesh.thinInstanceSetBuffer(this._attributeName, colorData, 4);\n } else {\n this._idMap[id] = index;\n id++;\n if (mesh.hasInstances) {\n const instances = mesh.instances;\n const colorData = this._generateColorData(instances.length, id, index, GPUPicker._TempColor.r, GPUPicker._TempColor.g, GPUPicker._TempColor.b, (i, id) => {\n const instance = instances[i];\n this._idMap[id] = this._pickableMeshes.indexOf(instance);\n });\n id += instances.length;\n const engine = mesh.getEngine();\n const buffer = new VertexBuffer(engine, colorData, this._attributeName, false, false, 4, true);\n mesh.setVerticesBuffer(buffer, true);\n } else {\n this._idColors[mesh.uniqueId] = Color3.FromInts(GPUPicker._TempColor.r, GPUPicker._TempColor.g, GPUPicker._TempColor.b);\n }\n }\n }\n }\n /**\n * Execute a picking operation\n * @param x defines the X coordinates where to run the pick\n * @param y defines the Y coordinates where to run the pick\n * @param disposeWhenDone defines a boolean indicating we do not want to keep resources alive (false by default)\n * @returns A promise with the picking results\n */\n pickAsync(x, y, disposeWhenDone = false) {\n var _this2 = this;\n return _asyncToGenerator(function* () {\n if (_this2._pickingInProgress) {\n return null;\n }\n if (!_this2._pickableMeshes || _this2._pickableMeshes.length === 0) {\n return null;\n }\n const {\n x: adjustedX,\n y: adjustedY,\n rttSizeW,\n rttSizeH\n } = _this2._prepareForPicking(x, y);\n if (adjustedX < 0 || adjustedY < 0 || adjustedX >= rttSizeW || adjustedY >= rttSizeH) {\n return null;\n }\n _this2._pickingInProgress = true;\n // Invert Y\n const invertedY = rttSizeH - adjustedY - 1;\n _this2._preparePickingBuffer(_this2._engine, rttSizeW, rttSizeH, adjustedX, invertedY);\n return _this2._executePicking(adjustedX, invertedY, disposeWhenDone);\n })();\n }\n /**\n * Execute a picking operation on multiple coordinates\n * @param xy defines the X,Y coordinates where to run the pick\n * @param disposeWhenDone defines a boolean indicating we do not want to keep resources alive (false by default)\n * @returns A promise with the picking results. Always returns an array with the same length as the number of coordinates. The mesh or null at the index where no mesh was picked.\n */\n multiPickAsync(xy, disposeWhenDone = false) {\n var _this3 = this;\n return _asyncToGenerator(function* () {\n if (_this3._pickingInProgress) {\n return null;\n }\n if (!_this3._pickableMeshes || _this3._pickableMeshes.length === 0 || xy.length === 0) {\n return null;\n }\n if (xy.length === 1) {\n var _pi$mesh;\n const pi = yield _this3.pickAsync(xy[0].x, xy[0].y, disposeWhenDone);\n return {\n meshes: [(_pi$mesh = pi === null || pi === void 0 ? void 0 : pi.mesh) !== null && _pi$mesh !== void 0 ? _pi$mesh : null],\n thinInstanceIndexes: pi !== null && pi !== void 0 && pi.thinInstanceIndex ? [pi.thinInstanceIndex] : undefined\n };\n }\n _this3._pickingInProgress = true;\n let minX = xy[0].x,\n maxX = xy[0].x,\n minY = xy[0].y,\n maxY = xy[0].y;\n for (let i = 1; i < xy.length; i++) {\n const {\n x,\n y\n } = xy[i];\n minX = Math.min(minX, x);\n maxX = Math.max(maxX, x);\n minY = Math.min(minY, y);\n maxY = Math.max(maxY, y);\n }\n const {\n rttSizeW,\n rttSizeH\n } = _this3._prepareForPicking(minX, minY);\n const w = Math.max(maxX - minX, 1);\n const h = Math.max(maxY - minY, 1);\n const partialCutH = rttSizeH - maxY - 1;\n _this3._preparePickingBuffer(_this3._engine, rttSizeW, rttSizeH, minX, partialCutH, w, h);\n return _this3._executeMultiPicking(xy, minX, maxY, rttSizeH, w, h, disposeWhenDone);\n })();\n }\n _prepareForPicking(x, y) {\n const scene = this._cachedScene;\n const engine = scene.getEngine();\n const rttSizeW = engine.getRenderWidth();\n const rttSizeH = engine.getRenderHeight();\n const devicePixelRatio = 1 / engine._hardwareScalingLevel;\n const intX = devicePixelRatio * x >> 0;\n const intY = devicePixelRatio * y >> 0;\n return {\n x: intX,\n y: intY,\n rttSizeW,\n rttSizeH\n };\n }\n _preparePickingBuffer(engine, rttSizeW, rttSizeH, x, y, w = 1, h = 1) {\n this._meshRenderingCount = 0;\n const requiredBufferSize = engine.isWebGPU ? 4 * w * h + 255 & ~255 : 4 * w * h;\n if (!this._readbuffer || this._readbuffer.length < requiredBufferSize) {\n this._readbuffer = new Uint8Array(requiredBufferSize);\n }\n // Do we need to rebuild the RTT?\n const size = this._pickingTexture.getSize();\n if (size.width !== rttSizeW || size.height !== rttSizeH) {\n this._createRenderTarget(this._cachedScene, rttSizeW, rttSizeH);\n this._updateRenderList();\n }\n this._pickingTexture.clearColor = new Color4(0, 0, 0, 0);\n this._pickingTexture.onBeforeRender = () => {\n this._enableScissor(x, y, w, h);\n };\n this._cachedScene.customRenderTargets.push(this._pickingTexture);\n }\n // pick one pixel\n _executePicking(x, y, disposeWhenDone) {\n var _this4 = this;\n return new Promise((resolve, reject) => {\n if (!this._pickingTexture) {\n this._pickingInProgress = false;\n reject();\n return;\n }\n this._pickingTexture.onAfterRender = /*#__PURE__*/_asyncToGenerator(function* () {\n _this4._disableScissor();\n if (_this4._checkRenderStatus()) {\n _this4._pickingTexture.onAfterRender = null;\n let pickedMesh = null;\n let thinInstanceIndex = undefined;\n // Remove from the active RTTs\n const index = _this4._cachedScene.customRenderTargets.indexOf(_this4._pickingTexture);\n if (index > -1) {\n _this4._cachedScene.customRenderTargets.splice(index, 1);\n }\n // Do the actual picking\n if (yield _this4._readTexturePixelsAsync(x, y)) {\n const colorId = _this4._getColorIdFromReadBuffer(0);\n // Thin?\n if (_this4._thinIdMap[colorId]) {\n pickedMesh = _this4._pickableMeshes[_this4._thinIdMap[colorId].meshId];\n thinInstanceIndex = _this4._thinIdMap[colorId].thinId;\n } else {\n pickedMesh = _this4._pickableMeshes[_this4._idMap[colorId]];\n }\n }\n if (disposeWhenDone) {\n _this4.dispose();\n }\n _this4._pickingInProgress = false;\n if (pickedMesh) {\n resolve({\n mesh: pickedMesh,\n thinInstanceIndex: thinInstanceIndex\n });\n } else {\n resolve(null);\n }\n }\n });\n });\n }\n // pick multiple pixels\n _executeMultiPicking(xy, minX, maxY, rttSizeH, w, h, disposeWhenDone) {\n var _this5 = this;\n return new Promise((resolve, reject) => {\n if (!this._pickingTexture) {\n this._pickingInProgress = false;\n reject();\n return;\n }\n this._pickingTexture.onAfterRender = /*#__PURE__*/_asyncToGenerator(function* () {\n _this5._disableScissor();\n if (_this5._checkRenderStatus()) {\n _this5._pickingTexture.onAfterRender = null;\n const pickedMeshes = [];\n const thinInstanceIndexes = [];\n if (yield _this5._readTexturePixelsAsync(minX, rttSizeH - maxY - 1, w, h)) {\n for (let i = 0; i < xy.length; i++) {\n const {\n pickedMesh,\n thinInstanceIndex\n } = _this5._getMeshFromMultiplePoints(xy[i].x, xy[i].y, minX, maxY, w);\n pickedMeshes.push(pickedMesh);\n thinInstanceIndexes.push(thinInstanceIndex !== null && thinInstanceIndex !== void 0 ? thinInstanceIndex : 0);\n }\n }\n if (disposeWhenDone) {\n _this5.dispose();\n }\n _this5._pickingInProgress = false;\n resolve({\n meshes: pickedMeshes,\n thinInstanceIndexes: thinInstanceIndexes\n });\n }\n });\n });\n }\n _enableScissor(x, y, w = 1, h = 1) {\n if (this._engine.enableScissor) {\n this._engine.enableScissor(x, y, w, h);\n }\n }\n _disableScissor() {\n if (this._engine.disableScissor) {\n this._engine.disableScissor();\n }\n }\n /**\n * @returns true if rendering if the picking texture has finished, otherwise false\n */\n _checkRenderStatus() {\n const wasSuccessfull = this._meshRenderingCount > 0;\n if (wasSuccessfull) {\n // Remove from the active RTTs\n const index = this._cachedScene.customRenderTargets.indexOf(this._pickingTexture);\n if (index > -1) {\n this._cachedScene.customRenderTargets.splice(index, 1);\n }\n return true;\n }\n this._meshRenderingCount = 0;\n return false; // Wait for shaders to be ready\n }\n _getMeshFromMultiplePoints(x, y, minX, maxY, w) {\n let offsetX = (x - minX - 1) * 4;\n let offsetY = (maxY - y - 1) * w * 4;\n offsetX = Math.max(offsetX, 0);\n offsetY = Math.max(offsetY, 0);\n const colorId = this._getColorIdFromReadBuffer(offsetX + offsetY);\n let pickedMesh = null;\n let thinInstanceIndex;\n if (colorId > 0) {\n if (this._thinIdMap[colorId]) {\n pickedMesh = this._pickableMeshes[this._thinIdMap[colorId].meshId];\n thinInstanceIndex = this._thinIdMap[colorId].thinId;\n } else {\n pickedMesh = this._pickableMeshes[this._idMap[colorId]];\n }\n }\n return {\n pickedMesh,\n thinInstanceIndex\n };\n }\n /**\n * Updates the render list with the current pickable meshes.\n */\n _updateRenderList() {\n this._pickingTexture.renderList = [];\n for (const mesh of this._pickableMeshes) {\n this._pickingTexture.setMaterialForRendering(mesh, this._meshMaterialMap.get(mesh));\n this._pickingTexture.renderList.push(mesh);\n }\n }\n _readTexturePixelsAsync(x, y, w = 1, h = 1) {\n var _this6 = this;\n return _asyncToGenerator(function* () {\n var _this6$_pickingTextur;\n if (!_this6._cachedScene || !((_this6$_pickingTextur = _this6._pickingTexture) !== null && _this6$_pickingTextur !== void 0 && _this6$_pickingTextur._texture)) {\n return false;\n }\n const engine = _this6._cachedScene.getEngine();\n yield engine._readTexturePixels(_this6._pickingTexture._texture, w, h, -1, 0, _this6._readbuffer, true, true, x, y);\n return true;\n })();\n }\n /** Release the resources */\n dispose() {\n var _this$_pickingTexture, _this$_defaultRenderM;\n this.setPickingList(null);\n this._cachedScene = null;\n // Cleaning up\n (_this$_pickingTexture = this._pickingTexture) === null || _this$_pickingTexture === void 0 || _this$_pickingTexture.dispose();\n this._pickingTexture = null;\n (_this$_defaultRenderM = this._defaultRenderMaterial) === null || _this$_defaultRenderM === void 0 || _this$_defaultRenderM.dispose();\n this._defaultRenderMaterial = null;\n }\n}\nGPUPicker._TempColor = {\n r: 0,\n g: 0,\n b: 0\n};","map":{"version":3,"names":["RenderTargetTexture","ShaderMaterial","Color3","Color4","VertexBuffer","GPUPicker","constructor","_pickingTexture","_idMap","_thinIdMap","_idColors","_meshMaterialMap","Map","_meshRenderingCount","_attributeName","_shaderLanguage","_pickingInProgress","shaderLanguage","pickingInProgress","_IdToRgb","id","_TempColor","r","g","b","_getColorIdFromReadBuffer","offset","_readbuffer","_SetColorData","buffer","i","_createRenderTarget","scene","width","height","dispose","undefined","_createColorMaterialAsync","_this","_asyncToGenerator","_defaultRenderMaterial","engine","getEngine","isWebGPU","defines","options","attributes","PositionKind","uniforms","needAlphaBlending","useClipPlane","extraInitializationsAsync","_ref","Promise","all","apply","arguments","onBindObservable","add","_materialBindCallback","mesh","material","get","effect","getEffect","hasInstances","isAnInstance","hasThinInstances","setColor4","uniqueId","_generateColorData","instanceCount","index","onInstance","colorData","Float32Array","_generateThinInstanceColorData","setPickingList","list","_pickableMeshes","length","removeVerticesData","thinInstanceSetBuffer","setMaterialForRendering","removeCallback","clear","renderList","getScene","rttSizeW","getRenderWidth","rttSizeH","getRenderHeight","size","getSize","_cachedScene","_engine","item","set","push","thinInstanceCount","meshId","thinId","instances","instance","indexOf","setVerticesBuffer","FromInts","pickAsync","x","y","disposeWhenDone","_this2","adjustedX","adjustedY","_prepareForPicking","invertedY","_preparePickingBuffer","_executePicking","multiPickAsync","xy","_this3","_pi$mesh","pi","meshes","thinInstanceIndexes","thinInstanceIndex","minX","maxX","minY","maxY","Math","min","max","w","h","partialCutH","_executeMultiPicking","devicePixelRatio","_hardwareScalingLevel","intX","intY","requiredBufferSize","Uint8Array","_updateRenderList","clearColor","onBeforeRender","_enableScissor","customRenderTargets","_this4","resolve","reject","onAfterRender","_disableScissor","_checkRenderStatus","pickedMesh","splice","_readTexturePixelsAsync","colorId","_this5","pickedMeshes","_getMeshFromMultiplePoints","enableScissor","disableScissor","wasSuccessfull","offsetX","offsetY","_this6","_this6$_pickingTextur","_texture","_readTexturePixels","_this$_pickingTexture","_this$_defaultRenderM"],"sources":["F:/workspace/202226701027/huinongbao-app/node_modules/@babylonjs/core/Collisions/gpuPicker.js"],"sourcesContent":["\nimport { RenderTargetTexture } from \"../Materials/Textures/renderTargetTexture.js\";\nimport { ShaderMaterial } from \"../Materials/shaderMaterial.js\";\nimport { Color3, Color4 } from \"../Maths/math.color.js\";\nimport { VertexBuffer } from \"../Meshes/buffer.js\";\n/**\n * Class used to perform a picking operation using GPU\n * GPUPIcker can pick meshes, instances and thin instances\n */\nexport class GPUPicker {\n constructor() {\n this._pickingTexture = null;\n this._idMap = [];\n this._thinIdMap = [];\n this._idColors = [];\n this._meshMaterialMap = new Map();\n this._meshRenderingCount = 0;\n this._attributeName = \"instanceMeshID\";\n /** Shader language used by the generator */\n this._shaderLanguage = 0 /* ShaderLanguage.GLSL */;\n this._pickingInProgress = false;\n }\n /**\n * Gets the shader language used in this generator.\n */\n get shaderLanguage() {\n return this._shaderLanguage;\n }\n /**\n * Gets a boolean indicating if the picking is in progress\n */\n get pickingInProgress() {\n return this._pickingInProgress;\n }\n static _IdToRgb(id) {\n GPUPicker._TempColor.r = (id & 0xff0000) >> 16;\n GPUPicker._TempColor.g = (id & 0x00ff00) >> 8;\n GPUPicker._TempColor.b = (id & 0x0000ff) >> 0;\n }\n _getColorIdFromReadBuffer(offset) {\n const r = this._readbuffer[offset];\n const g = this._readbuffer[offset + 1];\n const b = this._readbuffer[offset + 2];\n return (r << 16) + (g << 8) + b;\n }\n static _SetColorData(buffer, i, r, g, b) {\n buffer[i] = r / 255.0;\n buffer[i + 1] = g / 255.0;\n buffer[i + 2] = b / 255.0;\n buffer[i + 3] = 1.0;\n }\n _createRenderTarget(scene, width, height) {\n if (this._pickingTexture) {\n this._pickingTexture.dispose();\n }\n this._pickingTexture = new RenderTargetTexture(\"pickingTexure\", { width: width, height: height }, scene, false, undefined, 0, false, 1);\n }\n async _createColorMaterialAsync(scene) {\n if (this._defaultRenderMaterial) {\n this._defaultRenderMaterial.dispose();\n }\n this._defaultRenderMaterial = null;\n const engine = scene.getEngine();\n if (engine.isWebGPU) {\n this._shaderLanguage = 1 /* ShaderLanguage.WGSL */;\n }\n const defines = [];\n const options = {\n attributes: [VertexBuffer.PositionKind, this._attributeName, \"bakedVertexAnimationSettingsInstanced\"],\n uniforms: [\"world\", \"viewProjection\", \"meshID\"],\n needAlphaBlending: false,\n defines: defines,\n useClipPlane: null,\n shaderLanguage: this._shaderLanguage,\n extraInitializationsAsync: async () => {\n if (this.shaderLanguage === 1 /* ShaderLanguage.WGSL */) {\n await Promise.all([import(\"../ShadersWGSL/picking.fragment.js\"), import(\"../ShadersWGSL/picking.vertex.js\")]);\n }\n else {\n await Promise.all([import(\"../Shaders/picking.fragment.js\"), import(\"../Shaders/picking.vertex.js\")]);\n }\n },\n };\n this._defaultRenderMaterial = new ShaderMaterial(\"pickingShader\", scene, \"picking\", options, false);\n this._defaultRenderMaterial.onBindObservable.add(this._materialBindCallback, undefined, undefined, this);\n }\n _materialBindCallback(mesh) {\n if (!mesh) {\n return;\n }\n const material = this._meshMaterialMap.get(mesh);\n const effect = material.getEffect();\n if (!mesh.hasInstances && !mesh.isAnInstance && !mesh.hasThinInstances) {\n effect.setColor4(\"meshID\", this._idColors[mesh.uniqueId], 1);\n }\n this._meshRenderingCount++;\n }\n _generateColorData(instanceCount, id, index, r, g, b, onInstance) {\n const colorData = new Float32Array(4 * (instanceCount + 1));\n GPUPicker._SetColorData(colorData, 0, r, g, b);\n for (let i = 0; i < instanceCount; i++) {\n GPUPicker._IdToRgb(id);\n onInstance(i, id);\n GPUPicker._SetColorData(colorData, (i + 1) * 4, GPUPicker._TempColor.r, GPUPicker._TempColor.g, GPUPicker._TempColor.b);\n id++;\n }\n return colorData;\n }\n _generateThinInstanceColorData(instanceCount, id, onInstance) {\n const colorData = new Float32Array(4 * instanceCount);\n for (let i = 0; i < instanceCount; i++) {\n GPUPicker._IdToRgb(id);\n onInstance(i, id);\n GPUPicker._SetColorData(colorData, i * 4, GPUPicker._TempColor.r, GPUPicker._TempColor.g, GPUPicker._TempColor.b);\n id++;\n }\n return colorData;\n }\n /**\n * Set the list of meshes to pick from\n * Set that value to null to clear the list (and avoid leaks)\n * The module will read and delete from the array provided by reference. Disposing the module or setting the value to null will clear the array.\n * @param list defines the list of meshes to pick from\n */\n setPickingList(list) {\n if (this._pickableMeshes) {\n // Cleanup\n for (let index = 0; index < this._pickableMeshes.length; index++) {\n const mesh = this._pickableMeshes[index];\n if (mesh.hasInstances) {\n mesh.removeVerticesData(this._attributeName);\n }\n if (mesh.hasThinInstances) {\n mesh.thinInstanceSetBuffer(this._attributeName, null);\n }\n if (this._pickingTexture) {\n this._pickingTexture.setMaterialForRendering(mesh, undefined);\n }\n const material = this._meshMaterialMap.get(mesh);\n if (material !== this._defaultRenderMaterial) {\n material.onBindObservable.removeCallback(this._materialBindCallback);\n }\n }\n this._pickableMeshes.length = 0;\n this._meshMaterialMap.clear();\n this._idMap.length = 0;\n this._thinIdMap.length = 0;\n this._idColors.length = 0;\n if (this._pickingTexture) {\n this._pickingTexture.renderList = [];\n }\n }\n if (!list || list.length === 0) {\n return;\n }\n this._pickableMeshes = list;\n // Prepare target\n const scene = (\"mesh\" in list[0] ? list[0].mesh : list[0]).getScene();\n const engine = scene.getEngine();\n const rttSizeW = engine.getRenderWidth();\n const rttSizeH = engine.getRenderHeight();\n if (!this._pickingTexture) {\n this._createRenderTarget(scene, rttSizeW, rttSizeH);\n }\n else {\n const size = this._pickingTexture.getSize();\n if (size.width !== rttSizeW || size.height !== rttSizeH || this._cachedScene !== scene) {\n this._createRenderTarget(scene, rttSizeW, rttSizeH);\n }\n }\n if (!this._cachedScene || this._cachedScene !== scene) {\n this._createColorMaterialAsync(scene);\n }\n this._cachedScene = scene;\n this._engine = scene.getEngine();\n for (let i = 0; i < list.length; i++) {\n const item = list[i];\n if (\"mesh\" in item) {\n this._meshMaterialMap.set(item.mesh, item.material);\n list[i] = item.mesh;\n }\n else {\n this._meshMaterialMap.set(item, this._defaultRenderMaterial);\n }\n }\n this._pickingTexture.renderList = [];\n // We will affect colors and create vertex color buffers\n let id = 1;\n for (let index = 0; index < this._pickableMeshes.length; index++) {\n const mesh = this._pickableMeshes[index];\n const material = this._meshMaterialMap.get(mesh);\n if (material !== this._defaultRenderMaterial) {\n material.onBindObservable.add(this._materialBindCallback, undefined, undefined, this);\n }\n this._pickingTexture.setMaterialForRendering(mesh, material);\n this._pickingTexture.renderList.push(mesh);\n if (mesh.isAnInstance) {\n continue; // This will be handled by the source mesh\n }\n GPUPicker._IdToRgb(id);\n if (mesh.hasThinInstances) {\n const colorData = this._generateThinInstanceColorData(mesh.thinInstanceCount, id, (i, id) => {\n this._thinIdMap[id] = { meshId: index, thinId: i };\n });\n id += mesh.thinInstanceCount;\n mesh.thinInstanceSetBuffer(this._attributeName, colorData, 4);\n }\n else {\n this._idMap[id] = index;\n id++;\n if (mesh.hasInstances) {\n const instances = mesh.instances;\n const colorData = this._generateColorData(instances.length, id, index, GPUPicker._TempColor.r, GPUPicker._TempColor.g, GPUPicker._TempColor.b, (i, id) => {\n const instance = instances[i];\n this._idMap[id] = this._pickableMeshes.indexOf(instance);\n });\n id += instances.length;\n const engine = mesh.getEngine();\n const buffer = new VertexBuffer(engine, colorData, this._attributeName, false, false, 4, true);\n mesh.setVerticesBuffer(buffer, true);\n }\n else {\n this._idColors[mesh.uniqueId] = Color3.FromInts(GPUPicker._TempColor.r, GPUPicker._TempColor.g, GPUPicker._TempColor.b);\n }\n }\n }\n }\n /**\n * Execute a picking operation\n * @param x defines the X coordinates where to run the pick\n * @param y defines the Y coordinates where to run the pick\n * @param disposeWhenDone defines a boolean indicating we do not want to keep resources alive (false by default)\n * @returns A promise with the picking results\n */\n async pickAsync(x, y, disposeWhenDone = false) {\n if (this._pickingInProgress) {\n return null;\n }\n if (!this._pickableMeshes || this._pickableMeshes.length === 0) {\n return null;\n }\n const { x: adjustedX, y: adjustedY, rttSizeW, rttSizeH } = this._prepareForPicking(x, y);\n if (adjustedX < 0 || adjustedY < 0 || adjustedX >= rttSizeW || adjustedY >= rttSizeH) {\n return null;\n }\n this._pickingInProgress = true;\n // Invert Y\n const invertedY = rttSizeH - adjustedY - 1;\n this._preparePickingBuffer(this._engine, rttSizeW, rttSizeH, adjustedX, invertedY);\n return this._executePicking(adjustedX, invertedY, disposeWhenDone);\n }\n /**\n * Execute a picking operation on multiple coordinates\n * @param xy defines the X,Y coordinates where to run the pick\n * @param disposeWhenDone defines a boolean indicating we do not want to keep resources alive (false by default)\n * @returns A promise with the picking results. Always returns an array with the same length as the number of coordinates. The mesh or null at the index where no mesh was picked.\n */\n async multiPickAsync(xy, disposeWhenDone = false) {\n if (this._pickingInProgress) {\n return null;\n }\n if (!this._pickableMeshes || this._pickableMeshes.length === 0 || xy.length === 0) {\n return null;\n }\n if (xy.length === 1) {\n const pi = await this.pickAsync(xy[0].x, xy[0].y, disposeWhenDone);\n return {\n meshes: [pi?.mesh ?? null],\n thinInstanceIndexes: pi?.thinInstanceIndex ? [pi.thinInstanceIndex] : undefined,\n };\n }\n this._pickingInProgress = true;\n let minX = xy[0].x, maxX = xy[0].x, minY = xy[0].y, maxY = xy[0].y;\n for (let i = 1; i < xy.length; i++) {\n const { x, y } = xy[i];\n minX = Math.min(minX, x);\n maxX = Math.max(maxX, x);\n minY = Math.min(minY, y);\n maxY = Math.max(maxY, y);\n }\n const { rttSizeW, rttSizeH } = this._prepareForPicking(minX, minY);\n const w = Math.max(maxX - minX, 1);\n const h = Math.max(maxY - minY, 1);\n const partialCutH = rttSizeH - maxY - 1;\n this._preparePickingBuffer(this._engine, rttSizeW, rttSizeH, minX, partialCutH, w, h);\n return this._executeMultiPicking(xy, minX, maxY, rttSizeH, w, h, disposeWhenDone);\n }\n _prepareForPicking(x, y) {\n const scene = this._cachedScene;\n const engine = scene.getEngine();\n const rttSizeW = engine.getRenderWidth();\n const rttSizeH = engine.getRenderHeight();\n const devicePixelRatio = 1 / engine._hardwareScalingLevel;\n const intX = (devicePixelRatio * x) >> 0;\n const intY = (devicePixelRatio * y) >> 0;\n return { x: intX, y: intY, rttSizeW, rttSizeH };\n }\n _preparePickingBuffer(engine, rttSizeW, rttSizeH, x, y, w = 1, h = 1) {\n this._meshRenderingCount = 0;\n const requiredBufferSize = engine.isWebGPU ? (4 * w * h + 255) & ~255 : 4 * w * h;\n if (!this._readbuffer || this._readbuffer.length < requiredBufferSize) {\n this._readbuffer = new Uint8Array(requiredBufferSize);\n }\n // Do we need to rebuild the RTT?\n const size = this._pickingTexture.getSize();\n if (size.width !== rttSizeW || size.height !== rttSizeH) {\n this._createRenderTarget(this._cachedScene, rttSizeW, rttSizeH);\n this._updateRenderList();\n }\n this._pickingTexture.clearColor = new Color4(0, 0, 0, 0);\n this._pickingTexture.onBeforeRender = () => {\n this._enableScissor(x, y, w, h);\n };\n this._cachedScene.customRenderTargets.push(this._pickingTexture);\n }\n // pick one pixel\n _executePicking(x, y, disposeWhenDone) {\n return new Promise((resolve, reject) => {\n if (!this._pickingTexture) {\n this._pickingInProgress = false;\n reject();\n return;\n }\n this._pickingTexture.onAfterRender = async () => {\n this._disableScissor();\n if (this._checkRenderStatus()) {\n this._pickingTexture.onAfterRender = null;\n let pickedMesh = null;\n let thinInstanceIndex = undefined;\n // Remove from the active RTTs\n const index = this._cachedScene.customRenderTargets.indexOf(this._pickingTexture);\n if (index > -1) {\n this._cachedScene.customRenderTargets.splice(index, 1);\n }\n // Do the actual picking\n if (await this._readTexturePixelsAsync(x, y)) {\n const colorId = this._getColorIdFromReadBuffer(0);\n // Thin?\n if (this._thinIdMap[colorId]) {\n pickedMesh = this._pickableMeshes[this._thinIdMap[colorId].meshId];\n thinInstanceIndex = this._thinIdMap[colorId].thinId;\n }\n else {\n pickedMesh = this._pickableMeshes[this._idMap[colorId]];\n }\n }\n if (disposeWhenDone) {\n this.dispose();\n }\n this._pickingInProgress = false;\n if (pickedMesh) {\n resolve({ mesh: pickedMesh, thinInstanceIndex: thinInstanceIndex });\n }\n else {\n resolve(null);\n }\n }\n };\n });\n }\n // pick multiple pixels\n _executeMultiPicking(xy, minX, maxY, rttSizeH, w, h, disposeWhenDone) {\n return new Promise((resolve, reject) => {\n if (!this._pickingTexture) {\n this._pickingInProgress = false;\n reject();\n return;\n }\n this._pickingTexture.onAfterRender = async () => {\n this._disableScissor();\n if (this._checkRenderStatus()) {\n this._pickingTexture.onAfterRender = null;\n const pickedMeshes = [];\n const thinInstanceIndexes = [];\n if (await this._readTexturePixelsAsync(minX, rttSizeH - maxY - 1, w, h)) {\n for (let i = 0; i < xy.length; i++) {\n const { pickedMesh, thinInstanceIndex } = this._getMeshFromMultiplePoints(xy[i].x, xy[i].y, minX, maxY, w);\n pickedMeshes.push(pickedMesh);\n thinInstanceIndexes.push(thinInstanceIndex ?? 0);\n }\n }\n if (disposeWhenDone) {\n this.dispose();\n }\n this._pickingInProgress = false;\n resolve({ meshes: pickedMeshes, thinInstanceIndexes: thinInstanceIndexes });\n }\n };\n });\n }\n _enableScissor(x, y, w = 1, h = 1) {\n if (this._engine.enableScissor) {\n this._engine.enableScissor(x, y, w, h);\n }\n }\n _disableScissor() {\n if (this._engine.disableScissor) {\n this._engine.disableScissor();\n }\n }\n /**\n * @returns true if rendering if the picking texture has finished, otherwise false\n */\n _checkRenderStatus() {\n const wasSuccessfull = this._meshRenderingCount > 0;\n if (wasSuccessfull) {\n // Remove from the active RTTs\n const index = this._cachedScene.customRenderTargets.indexOf(this._pickingTexture);\n if (index > -1) {\n this._cachedScene.customRenderTargets.splice(index, 1);\n }\n return true;\n }\n this._meshRenderingCount = 0;\n return false; // Wait for shaders to be ready\n }\n _getMeshFromMultiplePoints(x, y, minX, maxY, w) {\n let offsetX = (x - minX - 1) * 4;\n let offsetY = (maxY - y - 1) * w * 4;\n offsetX = Math.max(offsetX, 0);\n offsetY = Math.max(offsetY, 0);\n const colorId = this._getColorIdFromReadBuffer(offsetX + offsetY);\n let pickedMesh = null;\n let thinInstanceIndex;\n if (colorId > 0) {\n if (this._thinIdMap[colorId]) {\n pickedMesh = this._pickableMeshes[this._thinIdMap[colorId].meshId];\n thinInstanceIndex = this._thinIdMap[colorId].thinId;\n }\n else {\n pickedMesh = this._pickableMeshes[this._idMap[colorId]];\n }\n }\n return { pickedMesh, thinInstanceIndex };\n }\n /**\n * Updates the render list with the current pickable meshes.\n */\n _updateRenderList() {\n this._pickingTexture.renderList = [];\n for (const mesh of this._pickableMeshes) {\n this._pickingTexture.setMaterialForRendering(mesh, this._meshMaterialMap.get(mesh));\n this._pickingTexture.renderList.push(mesh);\n }\n }\n async _readTexturePixelsAsync(x, y, w = 1, h = 1) {\n if (!this._cachedScene || !this._pickingTexture?._texture) {\n return false;\n }\n const engine = this._cachedScene.getEngine();\n await engine._readTexturePixels(this._pickingTexture._texture, w, h, -1, 0, this._readbuffer, true, true, x, y);\n return true;\n }\n /** Release the resources */\n dispose() {\n this.setPickingList(null);\n this._cachedScene = null;\n // Cleaning up\n this._pickingTexture?.dispose();\n this._pickingTexture = null;\n this._defaultRenderMaterial?.dispose();\n this._defaultRenderMaterial = null;\n }\n}\nGPUPicker._TempColor = {\n r: 0,\n g: 0,\n b: 0,\n};\n"],"mappings":";AACA,SAASA,mBAAmB,QAAQ,8CAA8C;AAClF,SAASC,cAAc,QAAQ,gCAAgC;AAC/D,SAASC,MAAM,EAAEC,MAAM,QAAQ,wBAAwB;AACvD,SAASC,YAAY,QAAQ,qBAAqB;AAClD;AACA;AACA;AACA;AACA,OAAO,MAAMC,SAAS,CAAC;EACnBC,WAAWA,CAAA,EAAG;IACV,IAAI,CAACC,eAAe,GAAG,IAAI;IAC3B,IAAI,CAACC,MAAM,GAAG,EAAE;IAChB,IAAI,CAACC,UAAU,GAAG,EAAE;IACpB,IAAI,CAACC,SAAS,GAAG,EAAE;IACnB,IAAI,CAACC,gBAAgB,GAAG,IAAIC,GAAG,CAAC,CAAC;IACjC,IAAI,CAACC,mBAAmB,GAAG,CAAC;IAC5B,IAAI,CAACC,cAAc,GAAG,gBAAgB;IACtC;IACA,IAAI,CAACC,eAAe,GAAG,CAAC,CAAC;IACzB,IAAI,CAACC,kBAAkB,GAAG,KAAK;EACnC;EACA;AACJ;AACA;EACI,IAAIC,cAAcA,CAAA,EAAG;IACjB,OAAO,IAAI,CAACF,eAAe;EAC/B;EACA;AACJ;AACA;EACI,IAAIG,iBAAiBA,CAAA,EAAG;IACpB,OAAO,IAAI,CAACF,kBAAkB;EAClC;EACA,OAAOG,QAAQA,CAACC,EAAE,EAAE;IAChBf,SAAS,CAACgB,UAAU,CAACC,CAAC,GAAG,CAACF,EAAE,GAAG,QAAQ,KAAK,EAAE;IAC9Cf,SAAS,CAACgB,UAAU,CAACE,CAAC,GAAG,CAACH,EAAE,GAAG,QAAQ,KAAK,CAAC;IAC7Cf,SAAS,CAACgB,UAAU,CAACG,CAAC,GAAG,CAACJ,EAAE,GAAG,QAAQ,KAAK,CAAC;EACjD;EACAK,yBAAyBA,CAACC,MAAM,EAAE;IAC9B,MAAMJ,CAAC,GAAG,IAAI,CAACK,WAAW,CAACD,MAAM,CAAC;IAClC,MAAMH,CAAC,GAAG,IAAI,CAACI,WAAW,CAACD,MAAM,GAAG,CAAC,CAAC;IACtC,MAAMF,CAAC,GAAG,IAAI,CAACG,WAAW,CAACD,MAAM,GAAG,CAAC,CAAC;IACtC,OAAO,CAACJ,CAAC,IAAI,EAAE,KAAKC,CAAC,IAAI,CAAC,CAAC,GAAGC,CAAC;EACnC;EACA,OAAOI,aAAaA,CAACC,MAAM,EAAEC,CAAC,EAAER,CAAC,EAAEC,CAAC,EAAEC,CAAC,EAAE;IACrCK,MAAM,CAACC,CAAC,CAAC,GAAGR,CAAC,GAAG,KAAK;IACrBO,MAAM,CAACC,CAAC,GAAG,CAAC,CAAC,GAAGP,CAAC,GAAG,KAAK;IACzBM,MAAM,CAACC,CAAC,GAAG,CAAC,CAAC,GAAGN,CAAC,GAAG,KAAK;IACzBK,MAAM,CAACC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG;EACvB;EACAC,mBAAmBA,CAACC,KAAK,EAAEC,KAAK,EAAEC,MAAM,EAAE;IACtC,IAAI,IAAI,CAAC3B,eAAe,EAAE;MACtB,IAAI,CAACA,eAAe,CAAC4B,OAAO,CAAC,CAAC;IAClC;IACA,IAAI,CAAC5B,eAAe,GAAG,IAAIP,mBAAmB,CAAC,eAAe,EAAE;MAAEiC,KAAK,EAAEA,KAAK;MAAEC,MAAM,EAAEA;IAAO,CAAC,EAAEF,KAAK,EAAE,KAAK,EAAEI,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;EAC3I;EACMC,yBAAyBA,CAACL,KAAK,EAAE;IAAA,IAAAM,KAAA;IAAA,OAAAC,iBAAA;MACnC,IAAID,KAAI,CAACE,sBAAsB,EAAE;QAC7BF,KAAI,CAACE,sBAAsB,CAACL,OAAO,CAAC,CAAC;MACzC;MACAG,KAAI,CAACE,sBAAsB,GAAG,IAAI;MAClC,MAAMC,MAAM,GAAGT,KAAK,CAACU,SAAS,CAAC,CAAC;MAChC,IAAID,MAAM,CAACE,QAAQ,EAAE;QACjBL,KAAI,CAACvB,eAAe,GAAG,CAAC,CAAC;MAC7B;MACA,MAAM6B,OAAO,GAAG,EAAE;MAClB,MAAMC,OAAO,GAAG;QACZC,UAAU,EAAE,CAAC1C,YAAY,CAAC2C,YAAY,EAAET,KAAI,CAACxB,cAAc,EAAE,uCAAuC,CAAC;QACrGkC,QAAQ,EAAE,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,CAAC;QAC/CC,iBAAiB,EAAE,KAAK;QACxBL,OAAO,EAAEA,OAAO;QAChBM,YAAY,EAAE,IAAI;QAClBjC,cAAc,EAAEqB,KAAI,CAACvB,eAAe;QACpCoC,yBAAyB;UAAA,IAAAC,IAAA,GAAAb,iBAAA,CAAE,aAAY;YACnC,IAAID,KAAI,CAACrB,cAAc,KAAK,CAAC,CAAC,2BAA2B;cACrD,MAAMoC,OAAO,CAACC,GAAG,CAAC,CAAC,MAAM,CAAC,oCAAoC,CAAC,EAAE,MAAM,CAAC,kCAAkC,CAAC,CAAC,CAAC;YACjH,CAAC,MACI;cACD,MAAMD,OAAO,CAACC,GAAG,CAAC,CAAC,MAAM,CAAC,gCAAgC,CAAC,EAAE,MAAM,CAAC,8BAA8B,CAAC,CAAC,CAAC;YACzG;UACJ,CAAC;UAAA,gBAPDH,yBAAyBA,CAAA;YAAA,OAAAC,IAAA,CAAAG,KAAA,OAAAC,SAAA;UAAA;QAAA;MAQ7B,CAAC;MACDlB,KAAI,CAACE,sBAAsB,GAAG,IAAIvC,cAAc,CAAC,eAAe,EAAE+B,KAAK,EAAE,SAAS,EAAEa,OAAO,EAAE,KAAK,CAAC;MACnGP,KAAI,CAACE,sBAAsB,CAACiB,gBAAgB,CAACC,GAAG,CAACpB,KAAI,CAACqB,qBAAqB,EAAEvB,SAAS,EAAEA,SAAS,EAAEE,KAAI,CAAC;IAAC;EAC7G;EACAqB,qBAAqBA,CAACC,IAAI,EAAE;IACxB,IAAI,CAACA,IAAI,EAAE;MACP;IACJ;IACA,MAAMC,QAAQ,GAAG,IAAI,CAAClD,gBAAgB,CAACmD,GAAG,CAACF,IAAI,CAAC;IAChD,MAAMG,MAAM,GAAGF,QAAQ,CAACG,SAAS,CAAC,CAAC;IACnC,IAAI,CAACJ,IAAI,CAACK,YAAY,IAAI,CAACL,IAAI,CAACM,YAAY,IAAI,CAACN,IAAI,CAACO,gBAAgB,EAAE;MACpEJ,MAAM,CAACK,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC1D,SAAS,CAACkD,IAAI,CAACS,QAAQ,CAAC,EAAE,CAAC,CAAC;IAChE;IACA,IAAI,CAACxD,mBAAmB,EAAE;EAC9B;EACAyD,kBAAkBA,CAACC,aAAa,EAAEnD,EAAE,EAAEoD,KAAK,EAAElD,CAAC,EAAEC,CAAC,EAAEC,CAAC,EAAEiD,UAAU,EAAE;IAC9D,MAAMC,SAAS,GAAG,IAAIC,YAAY,CAAC,CAAC,IAAIJ,aAAa,GAAG,CAAC,CAAC,CAAC;IAC3DlE,SAAS,CAACuB,aAAa,CAAC8C,SAAS,EAAE,CAAC,EAAEpD,CAAC,EAAEC,CAAC,EAAEC,CAAC,CAAC;IAC9C,KAAK,IAAIM,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyC,aAAa,EAAEzC,CAAC,EAAE,EAAE;MACpCzB,SAAS,CAACc,QAAQ,CAACC,EAAE,CAAC;MACtBqD,UAAU,CAAC3C,CAAC,EAAEV,EAAE,CAAC;MACjBf,SAAS,CAACuB,aAAa,CAAC8C,SAAS,EAAE,CAAC5C,CAAC,GAAG,CAAC,IAAI,CAAC,EAAEzB,SAAS,CAACgB,UAAU,CAACC,CAAC,EAAEjB,SAAS,CAACgB,UAAU,CAACE,CAAC,EAAElB,SAAS,CAACgB,UAAU,CAACG,CAAC,CAAC;MACvHJ,EAAE,EAAE;IACR;IACA,OAAOsD,SAAS;EACpB;EACAE,8BAA8BA,CAACL,aAAa,EAAEnD,EAAE,EAAEqD,UAAU,EAAE;IAC1D,MAAMC,SAAS,GAAG,IAAIC,YAAY,CAAC,CAAC,GAAGJ,aAAa,CAAC;IACrD,KAAK,IAAIzC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyC,aAAa,EAAEzC,CAAC,EAAE,EAAE;MACpCzB,SAAS,CAACc,QAAQ,CAACC,EAAE,CAAC;MACtBqD,UAAU,CAAC3C,CAAC,EAAEV,EAAE,CAAC;MACjBf,SAAS,CAACuB,aAAa,CAAC8C,SAAS,EAAE5C,CAAC,GAAG,CAAC,EAAEzB,SAAS,CAACgB,UAAU,CAACC,CAAC,EAAEjB,SAAS,CAACgB,UAAU,CAACE,CAAC,EAAElB,SAAS,CAACgB,UAAU,CAACG,CAAC,CAAC;MACjHJ,EAAE,EAAE;IACR;IACA,OAAOsD,SAAS;EACpB;EACA;AACJ;AACA;AACA;AACA;AACA;EACIG,cAAcA,CAACC,IAAI,EAAE;IACjB,IAAI,IAAI,CAACC,eAAe,EAAE;MACtB;MACA,KAAK,IAAIP,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAG,IAAI,CAACO,eAAe,CAACC,MAAM,EAAER,KAAK,EAAE,EAAE;QAC9D,MAAMZ,IAAI,GAAG,IAAI,CAACmB,eAAe,CAACP,KAAK,CAAC;QACxC,IAAIZ,IAAI,CAACK,YAAY,EAAE;UACnBL,IAAI,CAACqB,kBAAkB,CAAC,IAAI,CAACnE,cAAc,CAAC;QAChD;QACA,IAAI8C,IAAI,CAACO,gBAAgB,EAAE;UACvBP,IAAI,CAACsB,qBAAqB,CAAC,IAAI,CAACpE,cAAc,EAAE,IAAI,CAAC;QACzD;QACA,IAAI,IAAI,CAACP,eAAe,EAAE;UACtB,IAAI,CAACA,eAAe,CAAC4E,uBAAuB,CAACvB,IAAI,EAAExB,SAAS,CAAC;QACjE;QACA,MAAMyB,QAAQ,GAAG,IAAI,CAAClD,gBAAgB,CAACmD,GAAG,CAACF,IAAI,CAAC;QAChD,IAAIC,QAAQ,KAAK,IAAI,CAACrB,sBAAsB,EAAE;UAC1CqB,QAAQ,CAACJ,gBAAgB,CAAC2B,cAAc,CAAC,IAAI,CAACzB,qBAAqB,CAAC;QACxE;MACJ;MACA,IAAI,CAACoB,eAAe,CAACC,MAAM,GAAG,CAAC;MAC/B,IAAI,CAACrE,gBAAgB,CAAC0E,KAAK,CAAC,CAAC;MAC7B,IAAI,CAAC7E,MAAM,CAACwE,MAAM,GAAG,CAAC;MACtB,IAAI,CAACvE,UAAU,CAACuE,MAAM,GAAG,CAAC;MAC1B,IAAI,CAACtE,SAAS,CAACsE,MAAM,GAAG,CAAC;MACzB,IAAI,IAAI,CAACzE,eAAe,EAAE;QACtB,IAAI,CAACA,eAAe,CAAC+E,UAAU,GAAG,EAAE;MACxC;IACJ;IACA,IAAI,CAACR,IAAI,IAAIA,IAAI,CAACE,MAAM,KAAK,CAAC,EAAE;MAC5B;IACJ;IACA,IAAI,CAACD,eAAe,GAAGD,IAAI;IAC3B;IACA,MAAM9C,KAAK,GAAG,CAAC,MAAM,IAAI8C,IAAI,CAAC,CAAC,CAAC,GAAGA,IAAI,CAAC,CAAC,CAAC,CAAClB,IAAI,GAAGkB,IAAI,CAAC,CAAC,CAAC,EAAES,QAAQ,CAAC,CAAC;IACrE,MAAM9C,MAAM,GAAGT,KAAK,CAACU,SAAS,CAAC,CAAC;IAChC,MAAM8C,QAAQ,GAAG/C,MAAM,CAACgD,cAAc,CAAC,CAAC;IACxC,MAAMC,QAAQ,GAAGjD,MAAM,CAACkD,eAAe,CAAC,CAAC;IACzC,IAAI,CAAC,IAAI,CAACpF,eAAe,EAAE;MACvB,IAAI,CAACwB,mBAAmB,CAACC,KAAK,EAAEwD,QAAQ,EAAEE,QAAQ,CAAC;IACvD,CAAC,MACI;MACD,MAAME,IAAI,GAAG,IAAI,CAACrF,eAAe,CAACsF,OAAO,CAAC,CAAC;MAC3C,IAAID,IAAI,CAAC3D,KAAK,KAAKuD,QAAQ,IAAII,IAAI,CAAC1D,MAAM,KAAKwD,QAAQ,IAAI,IAAI,CAACI,YAAY,KAAK9D,KAAK,EAAE;QACpF,IAAI,CAACD,mBAAmB,CAACC,KAAK,EAAEwD,QAAQ,EAAEE,QAAQ,CAAC;MACvD;IACJ;IACA,IAAI,CAAC,IAAI,CAACI,YAAY,IAAI,IAAI,CAACA,YAAY,KAAK9D,KAAK,EAAE;MACnD,IAAI,CAACK,yBAAyB,CAACL,KAAK,CAAC;IACzC;IACA,IAAI,CAAC8D,YAAY,GAAG9D,KAAK;IACzB,IAAI,CAAC+D,OAAO,GAAG/D,KAAK,CAACU,SAAS,CAAC,CAAC;IAChC,KAAK,IAAIZ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGgD,IAAI,CAACE,MAAM,EAAElD,CAAC,EAAE,EAAE;MAClC,MAAMkE,IAAI,GAAGlB,IAAI,CAAChD,CAAC,CAAC;MACpB,IAAI,MAAM,IAAIkE,IAAI,EAAE;QAChB,IAAI,CAACrF,gBAAgB,CAACsF,GAAG,CAACD,IAAI,CAACpC,IAAI,EAAEoC,IAAI,CAACnC,QAAQ,CAAC;QACnDiB,IAAI,CAAChD,CAAC,CAAC,GAAGkE,IAAI,CAACpC,IAAI;MACvB,CAAC,MACI;QACD,IAAI,CAACjD,gBAAgB,CAACsF,GAAG,CAACD,IAAI,EAAE,IAAI,CAACxD,sBAAsB,CAAC;MAChE;IACJ;IACA,IAAI,CAACjC,eAAe,CAAC+E,UAAU,GAAG,EAAE;IACpC;IACA,IAAIlE,EAAE,GAAG,CAAC;IACV,KAAK,IAAIoD,KAAK,GAAG,CAAC,EAAEA,KAAK,GAAG,IAAI,CAACO,eAAe,CAACC,MAAM,EAAER,KAAK,EAAE,EAAE;MAC9D,MAAMZ,IAAI,GAAG,IAAI,CAACmB,eAAe,CAACP,KAAK,CAAC;MACxC,MAAMX,QAAQ,GAAG,IAAI,CAAClD,gBAAgB,CAACmD,GAAG,CAACF,IAAI,CAAC;MAChD,IAAIC,QAAQ,KAAK,IAAI,CAACrB,sBAAsB,EAAE;QAC1CqB,QAAQ,CAACJ,gBAAgB,CAACC,GAAG,CAAC,IAAI,CAACC,qBAAqB,EAAEvB,SAAS,EAAEA,SAAS,EAAE,IAAI,CAAC;MACzF;MACA,IAAI,CAAC7B,eAAe,CAAC4E,uBAAuB,CAACvB,IAAI,EAAEC,QAAQ,CAAC;MAC5D,IAAI,CAACtD,eAAe,CAAC+E,UAAU,CAACY,IAAI,CAACtC,IAAI,CAAC;MAC1C,IAAIA,IAAI,CAACM,YAAY,EAAE;QACnB,SAAS,CAAC;MACd;MACA7D,SAAS,CAACc,QAAQ,CAACC,EAAE,CAAC;MACtB,IAAIwC,IAAI,CAACO,gBAAgB,EAAE;QACvB,MAAMO,SAAS,GAAG,IAAI,CAACE,8BAA8B,CAAChB,IAAI,CAACuC,iBAAiB,EAAE/E,EAAE,EAAE,CAACU,CAAC,EAAEV,EAAE,KAAK;UACzF,IAAI,CAACX,UAAU,CAACW,EAAE,CAAC,GAAG;YAAEgF,MAAM,EAAE5B,KAAK;YAAE6B,MAAM,EAAEvE;UAAE,CAAC;QACtD,CAAC,CAAC;QACFV,EAAE,IAAIwC,IAAI,CAACuC,iBAAiB;QAC5BvC,IAAI,CAACsB,qBAAqB,CAAC,IAAI,CAACpE,cAAc,EAAE4D,SAAS,EAAE,CAAC,CAAC;MACjE,CAAC,MACI;QACD,IAAI,CAAClE,MAAM,CAACY,EAAE,CAAC,GAAGoD,KAAK;QACvBpD,EAAE,EAAE;QACJ,IAAIwC,IAAI,CAACK,YAAY,EAAE;UACnB,MAAMqC,SAAS,GAAG1C,IAAI,CAAC0C,SAAS;UAChC,MAAM5B,SAAS,GAAG,IAAI,CAACJ,kBAAkB,CAACgC,SAAS,CAACtB,MAAM,EAAE5D,EAAE,EAAEoD,KAAK,EAAEnE,SAAS,CAACgB,UAAU,CAACC,CAAC,EAAEjB,SAAS,CAACgB,UAAU,CAACE,CAAC,EAAElB,SAAS,CAACgB,UAAU,CAACG,CAAC,EAAE,CAACM,CAAC,EAAEV,EAAE,KAAK;YACtJ,MAAMmF,QAAQ,GAAGD,SAAS,CAACxE,CAAC,CAAC;YAC7B,IAAI,CAACtB,MAAM,CAACY,EAAE,CAAC,GAAG,IAAI,CAAC2D,eAAe,CAACyB,OAAO,CAACD,QAAQ,CAAC;UAC5D,CAAC,CAAC;UACFnF,EAAE,IAAIkF,SAAS,CAACtB,MAAM;UACtB,MAAMvC,MAAM,GAAGmB,IAAI,CAAClB,SAAS,CAAC,CAAC;UAC/B,MAAMb,MAAM,GAAG,IAAIzB,YAAY,CAACqC,MAAM,EAAEiC,SAAS,EAAE,IAAI,CAAC5D,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC;UAC9F8C,IAAI,CAAC6C,iBAAiB,CAAC5E,MAAM,EAAE,IAAI,CAAC;QACxC,CAAC,MACI;UACD,IAAI,CAACnB,SAAS,CAACkD,IAAI,CAACS,QAAQ,CAAC,GAAGnE,MAAM,CAACwG,QAAQ,CAACrG,SAAS,CAACgB,UAAU,CAACC,CAAC,EAAEjB,SAAS,CAACgB,UAAU,CAACE,CAAC,EAAElB,SAAS,CAACgB,UAAU,CAACG,CAAC,CAAC;QAC3H;MACJ;IACJ;EACJ;EACA;AACJ;AACA;AACA;AACA;AACA;AACA;EACUmF,SAASA,CAACC,CAAC,EAAEC,CAAC,EAAEC,eAAe,GAAG,KAAK,EAAE;IAAA,IAAAC,MAAA;IAAA,OAAAxE,iBAAA;MAC3C,IAAIwE,MAAI,CAAC/F,kBAAkB,EAAE;QACzB,OAAO,IAAI;MACf;MACA,IAAI,CAAC+F,MAAI,CAAChC,eAAe,IAAIgC,MAAI,CAAChC,eAAe,CAACC,MAAM,KAAK,CAAC,EAAE;QAC5D,OAAO,IAAI;MACf;MACA,MAAM;QAAE4B,CAAC,EAAEI,SAAS;QAAEH,CAAC,EAAEI,SAAS;QAAEzB,QAAQ;QAAEE;MAAS,CAAC,GAAGqB,MAAI,CAACG,kBAAkB,CAACN,CAAC,EAAEC,CAAC,CAAC;MACxF,IAAIG,SAAS,GAAG,CAAC,IAAIC,SAAS,GAAG,CAAC,IAAID,SAAS,IAAIxB,QAAQ,IAAIyB,SAAS,IAAIvB,QAAQ,EAAE;QAClF,OAAO,IAAI;MACf;MACAqB,MAAI,CAAC/F,kBAAkB,GAAG,IAAI;MAC9B;MACA,MAAMmG,SAAS,GAAGzB,QAAQ,GAAGuB,SAAS,GAAG,CAAC;MAC1CF,MAAI,CAACK,qBAAqB,CAACL,MAAI,CAAChB,OAAO,EAAEP,QAAQ,EAAEE,QAAQ,EAAEsB,SAAS,EAAEG,SAAS,CAAC;MAClF,OAAOJ,MAAI,CAACM,eAAe,CAACL,SAAS,EAAEG,SAAS,EAAEL,eAAe,CAAC;IAAC;EACvE;EACA;AACJ;AACA;AACA;AACA;AACA;EACUQ,cAAcA,CAACC,EAAE,EAAET,eAAe,GAAG,KAAK,EAAE;IAAA,IAAAU,MAAA;IAAA,OAAAjF,iBAAA;MAC9C,IAAIiF,MAAI,CAACxG,kBAAkB,EAAE;QACzB,OAAO,IAAI;MACf;MACA,IAAI,CAACwG,MAAI,CAACzC,eAAe,IAAIyC,MAAI,CAACzC,eAAe,CAACC,MAAM,KAAK,CAAC,IAAIuC,EAAE,CAACvC,MAAM,KAAK,CAAC,EAAE;QAC/E,OAAO,IAAI;MACf;MACA,IAAIuC,EAAE,CAACvC,MAAM,KAAK,CAAC,EAAE;QAAA,IAAAyC,QAAA;QACjB,MAAMC,EAAE,SAASF,MAAI,CAACb,SAAS,CAACY,EAAE,CAAC,CAAC,CAAC,CAACX,CAAC,EAAEW,EAAE,CAAC,CAAC,CAAC,CAACV,CAAC,EAAEC,eAAe,CAAC;QAClE,OAAO;UACHa,MAAM,EAAE,EAAAF,QAAA,GAACC,EAAE,aAAFA,EAAE,uBAAFA,EAAE,CAAE9D,IAAI,cAAA6D,QAAA,cAAAA,QAAA,GAAI,IAAI,CAAC;UAC1BG,mBAAmB,EAAEF,EAAE,aAAFA,EAAE,eAAFA,EAAE,CAAEG,iBAAiB,GAAG,CAACH,EAAE,CAACG,iBAAiB,CAAC,GAAGzF;QAC1E,CAAC;MACL;MACAoF,MAAI,CAACxG,kBAAkB,GAAG,IAAI;MAC9B,IAAI8G,IAAI,GAAGP,EAAE,CAAC,CAAC,CAAC,CAACX,CAAC;QAAEmB,IAAI,GAAGR,EAAE,CAAC,CAAC,CAAC,CAACX,CAAC;QAAEoB,IAAI,GAAGT,EAAE,CAAC,CAAC,CAAC,CAACV,CAAC;QAAEoB,IAAI,GAAGV,EAAE,CAAC,CAAC,CAAC,CAACV,CAAC;MAClE,KAAK,IAAI/E,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyF,EAAE,CAACvC,MAAM,EAAElD,CAAC,EAAE,EAAE;QAChC,MAAM;UAAE8E,CAAC;UAAEC;QAAE,CAAC,GAAGU,EAAE,CAACzF,CAAC,CAAC;QACtBgG,IAAI,GAAGI,IAAI,CAACC,GAAG,CAACL,IAAI,EAAElB,CAAC,CAAC;QACxBmB,IAAI,GAAGG,IAAI,CAACE,GAAG,CAACL,IAAI,EAAEnB,CAAC,CAAC;QACxBoB,IAAI,GAAGE,IAAI,CAACC,GAAG,CAACH,IAAI,EAAEnB,CAAC,CAAC;QACxBoB,IAAI,GAAGC,IAAI,CAACE,GAAG,CAACH,IAAI,EAAEpB,CAAC,CAAC;MAC5B;MACA,MAAM;QAAErB,QAAQ;QAAEE;MAAS,CAAC,GAAG8B,MAAI,CAACN,kBAAkB,CAACY,IAAI,EAAEE,IAAI,CAAC;MAClE,MAAMK,CAAC,GAAGH,IAAI,CAACE,GAAG,CAACL,IAAI,GAAGD,IAAI,EAAE,CAAC,CAAC;MAClC,MAAMQ,CAAC,GAAGJ,IAAI,CAACE,GAAG,CAACH,IAAI,GAAGD,IAAI,EAAE,CAAC,CAAC;MAClC,MAAMO,WAAW,GAAG7C,QAAQ,GAAGuC,IAAI,GAAG,CAAC;MACvCT,MAAI,CAACJ,qBAAqB,CAACI,MAAI,CAACzB,OAAO,EAAEP,QAAQ,EAAEE,QAAQ,EAAEoC,IAAI,EAAES,WAAW,EAAEF,CAAC,EAAEC,CAAC,CAAC;MACrF,OAAOd,MAAI,CAACgB,oBAAoB,CAACjB,EAAE,EAAEO,IAAI,EAAEG,IAAI,EAAEvC,QAAQ,EAAE2C,CAAC,EAAEC,CAAC,EAAExB,eAAe,CAAC;IAAC;EACtF;EACAI,kBAAkBA,CAACN,CAAC,EAAEC,CAAC,EAAE;IACrB,MAAM7E,KAAK,GAAG,IAAI,CAAC8D,YAAY;IAC/B,MAAMrD,MAAM,GAAGT,KAAK,CAACU,SAAS,CAAC,CAAC;IAChC,MAAM8C,QAAQ,GAAG/C,MAAM,CAACgD,cAAc,CAAC,CAAC;IACxC,MAAMC,QAAQ,GAAGjD,MAAM,CAACkD,eAAe,CAAC,CAAC;IACzC,MAAM8C,gBAAgB,GAAG,CAAC,GAAGhG,MAAM,CAACiG,qBAAqB;IACzD,MAAMC,IAAI,GAAIF,gBAAgB,GAAG7B,CAAC,IAAK,CAAC;IACxC,MAAMgC,IAAI,GAAIH,gBAAgB,GAAG5B,CAAC,IAAK,CAAC;IACxC,OAAO;MAAED,CAAC,EAAE+B,IAAI;MAAE9B,CAAC,EAAE+B,IAAI;MAAEpD,QAAQ;MAAEE;IAAS,CAAC;EACnD;EACA0B,qBAAqBA,CAAC3E,MAAM,EAAE+C,QAAQ,EAAEE,QAAQ,EAAEkB,CAAC,EAAEC,CAAC,EAAEwB,CAAC,GAAG,CAAC,EAAEC,CAAC,GAAG,CAAC,EAAE;IAClE,IAAI,CAACzH,mBAAmB,GAAG,CAAC;IAC5B,MAAMgI,kBAAkB,GAAGpG,MAAM,CAACE,QAAQ,GAAI,CAAC,GAAG0F,CAAC,GAAGC,CAAC,GAAG,GAAG,GAAI,CAAC,GAAG,GAAG,CAAC,GAAGD,CAAC,GAAGC,CAAC;IACjF,IAAI,CAAC,IAAI,CAAC3G,WAAW,IAAI,IAAI,CAACA,WAAW,CAACqD,MAAM,GAAG6D,kBAAkB,EAAE;MACnE,IAAI,CAAClH,WAAW,GAAG,IAAImH,UAAU,CAACD,kBAAkB,CAAC;IACzD;IACA;IACA,MAAMjD,IAAI,GAAG,IAAI,CAACrF,eAAe,CAACsF,OAAO,CAAC,CAAC;IAC3C,IAAID,IAAI,CAAC3D,KAAK,KAAKuD,QAAQ,IAAII,IAAI,CAAC1D,MAAM,KAAKwD,QAAQ,EAAE;MACrD,IAAI,CAAC3D,mBAAmB,CAAC,IAAI,CAAC+D,YAAY,EAAEN,QAAQ,EAAEE,QAAQ,CAAC;MAC/D,IAAI,CAACqD,iBAAiB,CAAC,CAAC;IAC5B;IACA,IAAI,CAACxI,eAAe,CAACyI,UAAU,GAAG,IAAI7I,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACxD,IAAI,CAACI,eAAe,CAAC0I,cAAc,GAAG,MAAM;MACxC,IAAI,CAACC,cAAc,CAACtC,CAAC,EAAEC,CAAC,EAAEwB,CAAC,EAAEC,CAAC,CAAC;IACnC,CAAC;IACD,IAAI,CAACxC,YAAY,CAACqD,mBAAmB,CAACjD,IAAI,CAAC,IAAI,CAAC3F,eAAe,CAAC;EACpE;EACA;EACA8G,eAAeA,CAACT,CAAC,EAAEC,CAAC,EAAEC,eAAe,EAAE;IAAA,IAAAsC,MAAA;IACnC,OAAO,IAAI/F,OAAO,CAAC,CAACgG,OAAO,EAAEC,MAAM,KAAK;MACpC,IAAI,CAAC,IAAI,CAAC/I,eAAe,EAAE;QACvB,IAAI,CAACS,kBAAkB,GAAG,KAAK;QAC/BsI,MAAM,CAAC,CAAC;QACR;MACJ;MACA,IAAI,CAAC/I,eAAe,CAACgJ,aAAa,gBAAAhH,iBAAA,CAAG,aAAY;QAC7C6G,MAAI,CAACI,eAAe,CAAC,CAAC;QACtB,IAAIJ,MAAI,CAACK,kBAAkB,CAAC,CAAC,EAAE;UAC3BL,MAAI,CAAC7I,eAAe,CAACgJ,aAAa,GAAG,IAAI;UACzC,IAAIG,UAAU,GAAG,IAAI;UACrB,IAAI7B,iBAAiB,GAAGzF,SAAS;UACjC;UACA,MAAMoC,KAAK,GAAG4E,MAAI,CAACtD,YAAY,CAACqD,mBAAmB,CAAC3C,OAAO,CAAC4C,MAAI,CAAC7I,eAAe,CAAC;UACjF,IAAIiE,KAAK,GAAG,CAAC,CAAC,EAAE;YACZ4E,MAAI,CAACtD,YAAY,CAACqD,mBAAmB,CAACQ,MAAM,CAACnF,KAAK,EAAE,CAAC,CAAC;UAC1D;UACA;UACA,UAAU4E,MAAI,CAACQ,uBAAuB,CAAChD,CAAC,EAAEC,CAAC,CAAC,EAAE;YAC1C,MAAMgD,OAAO,GAAGT,MAAI,CAAC3H,yBAAyB,CAAC,CAAC,CAAC;YACjD;YACA,IAAI2H,MAAI,CAAC3I,UAAU,CAACoJ,OAAO,CAAC,EAAE;cAC1BH,UAAU,GAAGN,MAAI,CAACrE,eAAe,CAACqE,MAAI,CAAC3I,UAAU,CAACoJ,OAAO,CAAC,CAACzD,MAAM,CAAC;cAClEyB,iBAAiB,GAAGuB,MAAI,CAAC3I,UAAU,CAACoJ,OAAO,CAAC,CAACxD,MAAM;YACvD,CAAC,MACI;cACDqD,UAAU,GAAGN,MAAI,CAACrE,eAAe,CAACqE,MAAI,CAAC5I,MAAM,CAACqJ,OAAO,CAAC,CAAC;YAC3D;UACJ;UACA,IAAI/C,eAAe,EAAE;YACjBsC,MAAI,CAACjH,OAAO,CAAC,CAAC;UAClB;UACAiH,MAAI,CAACpI,kBAAkB,GAAG,KAAK;UAC/B,IAAI0I,UAAU,EAAE;YACZL,OAAO,CAAC;cAAEzF,IAAI,EAAE8F,UAAU;cAAE7B,iBAAiB,EAAEA;YAAkB,CAAC,CAAC;UACvE,CAAC,MACI;YACDwB,OAAO,CAAC,IAAI,CAAC;UACjB;QACJ;MACJ,CAAC;IACL,CAAC,CAAC;EACN;EACA;EACAb,oBAAoBA,CAACjB,EAAE,EAAEO,IAAI,EAAEG,IAAI,EAAEvC,QAAQ,EAAE2C,CAAC,EAAEC,CAAC,EAAExB,eAAe,EAAE;IAAA,IAAAgD,MAAA;IAClE,OAAO,IAAIzG,OAAO,CAAC,CAACgG,OAAO,EAAEC,MAAM,KAAK;MACpC,IAAI,CAAC,IAAI,CAAC/I,eAAe,EAAE;QACvB,IAAI,CAACS,kBAAkB,GAAG,KAAK;QAC/BsI,MAAM,CAAC,CAAC;QACR;MACJ;MACA,IAAI,CAAC/I,eAAe,CAACgJ,aAAa,gBAAAhH,iBAAA,CAAG,aAAY;QAC7CuH,MAAI,CAACN,eAAe,CAAC,CAAC;QACtB,IAAIM,MAAI,CAACL,kBAAkB,CAAC,CAAC,EAAE;UAC3BK,MAAI,CAACvJ,eAAe,CAACgJ,aAAa,GAAG,IAAI;UACzC,MAAMQ,YAAY,GAAG,EAAE;UACvB,MAAMnC,mBAAmB,GAAG,EAAE;UAC9B,UAAUkC,MAAI,CAACF,uBAAuB,CAAC9B,IAAI,EAAEpC,QAAQ,GAAGuC,IAAI,GAAG,CAAC,EAAEI,CAAC,EAAEC,CAAC,CAAC,EAAE;YACrE,KAAK,IAAIxG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGyF,EAAE,CAACvC,MAAM,EAAElD,CAAC,EAAE,EAAE;cAChC,MAAM;gBAAE4H,UAAU;gBAAE7B;cAAkB,CAAC,GAAGiC,MAAI,CAACE,0BAA0B,CAACzC,EAAE,CAACzF,CAAC,CAAC,CAAC8E,CAAC,EAAEW,EAAE,CAACzF,CAAC,CAAC,CAAC+E,CAAC,EAAEiB,IAAI,EAAEG,IAAI,EAAEI,CAAC,CAAC;cAC1G0B,YAAY,CAAC7D,IAAI,CAACwD,UAAU,CAAC;cAC7B9B,mBAAmB,CAAC1B,IAAI,CAAC2B,iBAAiB,aAAjBA,iBAAiB,cAAjBA,iBAAiB,GAAI,CAAC,CAAC;YACpD;UACJ;UACA,IAAIf,eAAe,EAAE;YACjBgD,MAAI,CAAC3H,OAAO,CAAC,CAAC;UAClB;UACA2H,MAAI,CAAC9I,kBAAkB,GAAG,KAAK;UAC/BqI,OAAO,CAAC;YAAE1B,MAAM,EAAEoC,YAAY;YAAEnC,mBAAmB,EAAEA;UAAoB,CAAC,CAAC;QAC/E;MACJ,CAAC;IACL,CAAC,CAAC;EACN;EACAsB,cAAcA,CAACtC,CAAC,EAAEC,CAAC,EAAEwB,CAAC,GAAG,CAAC,EAAEC,CAAC,GAAG,CAAC,EAAE;IAC/B,IAAI,IAAI,CAACvC,OAAO,CAACkE,aAAa,EAAE;MAC5B,IAAI,CAAClE,OAAO,CAACkE,aAAa,CAACrD,CAAC,EAAEC,CAAC,EAAEwB,CAAC,EAAEC,CAAC,CAAC;IAC1C;EACJ;EACAkB,eAAeA,CAAA,EAAG;IACd,IAAI,IAAI,CAACzD,OAAO,CAACmE,cAAc,EAAE;MAC7B,IAAI,CAACnE,OAAO,CAACmE,cAAc,CAAC,CAAC;IACjC;EACJ;EACA;AACJ;AACA;EACIT,kBAAkBA,CAAA,EAAG;IACjB,MAAMU,cAAc,GAAG,IAAI,CAACtJ,mBAAmB,GAAG,CAAC;IACnD,IAAIsJ,cAAc,EAAE;MAChB;MACA,MAAM3F,KAAK,GAAG,IAAI,CAACsB,YAAY,CAACqD,mBAAmB,CAAC3C,OAAO,CAAC,IAAI,CAACjG,eAAe,CAAC;MACjF,IAAIiE,KAAK,GAAG,CAAC,CAAC,EAAE;QACZ,IAAI,CAACsB,YAAY,CAACqD,mBAAmB,CAACQ,MAAM,CAACnF,KAAK,EAAE,CAAC,CAAC;MAC1D;MACA,OAAO,IAAI;IACf;IACA,IAAI,CAAC3D,mBAAmB,GAAG,CAAC;IAC5B,OAAO,KAAK,CAAC,CAAC;EAClB;EACAmJ,0BAA0BA,CAACpD,CAAC,EAAEC,CAAC,EAAEiB,IAAI,EAAEG,IAAI,EAAEI,CAAC,EAAE;IAC5C,IAAI+B,OAAO,GAAG,CAACxD,CAAC,GAAGkB,IAAI,GAAG,CAAC,IAAI,CAAC;IAChC,IAAIuC,OAAO,GAAG,CAACpC,IAAI,GAAGpB,CAAC,GAAG,CAAC,IAAIwB,CAAC,GAAG,CAAC;IACpC+B,OAAO,GAAGlC,IAAI,CAACE,GAAG,CAACgC,OAAO,EAAE,CAAC,CAAC;IAC9BC,OAAO,GAAGnC,IAAI,CAACE,GAAG,CAACiC,OAAO,EAAE,CAAC,CAAC;IAC9B,MAAMR,OAAO,GAAG,IAAI,CAACpI,yBAAyB,CAAC2I,OAAO,GAAGC,OAAO,CAAC;IACjE,IAAIX,UAAU,GAAG,IAAI;IACrB,IAAI7B,iBAAiB;IACrB,IAAIgC,OAAO,GAAG,CAAC,EAAE;MACb,IAAI,IAAI,CAACpJ,UAAU,CAACoJ,OAAO,CAAC,EAAE;QAC1BH,UAAU,GAAG,IAAI,CAAC3E,eAAe,CAAC,IAAI,CAACtE,UAAU,CAACoJ,OAAO,CAAC,CAACzD,MAAM,CAAC;QAClEyB,iBAAiB,GAAG,IAAI,CAACpH,UAAU,CAACoJ,OAAO,CAAC,CAACxD,MAAM;MACvD,CAAC,MACI;QACDqD,UAAU,GAAG,IAAI,CAAC3E,eAAe,CAAC,IAAI,CAACvE,MAAM,CAACqJ,OAAO,CAAC,CAAC;MAC3D;IACJ;IACA,OAAO;MAAEH,UAAU;MAAE7B;IAAkB,CAAC;EAC5C;EACA;AACJ;AACA;EACIkB,iBAAiBA,CAAA,EAAG;IAChB,IAAI,CAACxI,eAAe,CAAC+E,UAAU,GAAG,EAAE;IACpC,KAAK,MAAM1B,IAAI,IAAI,IAAI,CAACmB,eAAe,EAAE;MACrC,IAAI,CAACxE,eAAe,CAAC4E,uBAAuB,CAACvB,IAAI,EAAE,IAAI,CAACjD,gBAAgB,CAACmD,GAAG,CAACF,IAAI,CAAC,CAAC;MACnF,IAAI,CAACrD,eAAe,CAAC+E,UAAU,CAACY,IAAI,CAACtC,IAAI,CAAC;IAC9C;EACJ;EACMgG,uBAAuBA,CAAChD,CAAC,EAAEC,CAAC,EAAEwB,CAAC,GAAG,CAAC,EAAEC,CAAC,GAAG,CAAC,EAAE;IAAA,IAAAgC,MAAA;IAAA,OAAA/H,iBAAA;MAAA,IAAAgI,qBAAA;MAC9C,IAAI,CAACD,MAAI,CAACxE,YAAY,IAAI,GAAAyE,qBAAA,GAACD,MAAI,CAAC/J,eAAe,cAAAgK,qBAAA,eAApBA,qBAAA,CAAsBC,QAAQ,GAAE;QACvD,OAAO,KAAK;MAChB;MACA,MAAM/H,MAAM,GAAG6H,MAAI,CAACxE,YAAY,CAACpD,SAAS,CAAC,CAAC;MAC5C,MAAMD,MAAM,CAACgI,kBAAkB,CAACH,MAAI,CAAC/J,eAAe,CAACiK,QAAQ,EAAEnC,CAAC,EAAEC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAEgC,MAAI,CAAC3I,WAAW,EAAE,IAAI,EAAE,IAAI,EAAEiF,CAAC,EAAEC,CAAC,CAAC;MAC/G,OAAO,IAAI;IAAC;EAChB;EACA;EACA1E,OAAOA,CAAA,EAAG;IAAA,IAAAuI,qBAAA,EAAAC,qBAAA;IACN,IAAI,CAAC9F,cAAc,CAAC,IAAI,CAAC;IACzB,IAAI,CAACiB,YAAY,GAAG,IAAI;IACxB;IACA,CAAA4E,qBAAA,OAAI,CAACnK,eAAe,cAAAmK,qBAAA,eAApBA,qBAAA,CAAsBvI,OAAO,CAAC,CAAC;IAC/B,IAAI,CAAC5B,eAAe,GAAG,IAAI;IAC3B,CAAAoK,qBAAA,OAAI,CAACnI,sBAAsB,cAAAmI,qBAAA,eAA3BA,qBAAA,CAA6BxI,OAAO,CAAC,CAAC;IACtC,IAAI,CAACK,sBAAsB,GAAG,IAAI;EACtC;AACJ;AACAnC,SAAS,CAACgB,UAAU,GAAG;EACnBC,CAAC,EAAE,CAAC;EACJC,CAAC,EAAE,CAAC;EACJC,CAAC,EAAE;AACP,CAAC","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}
|