@colijnit/configurator 1.0.8 → 1.0.9
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.
- package/app/builder.d.ts +10 -0
- package/app/components/answers/answers.component.d.ts +6 -0
- package/app/components/answers/answers.module.d.ts +2 -0
- package/app/components/selections/selections.component.d.ts +16 -0
- package/app/components/selections/selections.module.d.ts +2 -0
- package/bundles/colijnit-configurator.umd.js +224 -55
- package/bundles/colijnit-configurator.umd.js.map +1 -1
- package/bundles/colijnit-configurator.umd.min.js +2 -2
- package/bundles/colijnit-configurator.umd.min.js.map +1 -1
- package/colijnit-configurator.metadata.json +1 -1
- package/esm2015/app/builder.js +62 -38
- package/esm2015/app/components/answers/answers.component.js +29 -0
- package/esm2015/app/components/answers/answers.module.js +21 -0
- package/esm2015/app/components/selections/selections.component.js +83 -0
- package/esm2015/app/components/selections/selections.module.js +21 -0
- package/esm2015/public_api.js +5 -1
- package/esm2015/utils/threed.utils.js +3 -2
- package/esm5/app/builder.js +87 -51
- package/esm5/app/components/answers/answers.component.js +24 -0
- package/esm5/app/components/answers/answers.module.js +24 -0
- package/esm5/app/components/selections/selections.component.js +73 -0
- package/esm5/app/components/selections/selections.module.js +24 -0
- package/esm5/public_api.js +5 -1
- package/esm5/utils/threed.utils.js +3 -2
- package/fesm2015/colijnit-configurator.js +205 -40
- package/fesm2015/colijnit-configurator.js.map +1 -1
- package/fesm5/colijnit-configurator.js +221 -53
- package/fesm5/colijnit-configurator.js.map +1 -1
- package/package.json +2 -2
- package/public_api.d.ts +4 -0
- package/utils/threed.utils.d.ts +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"colijnit-configurator.js","sources":["ng://@colijnit/configurator/utils/object.utils.ts","ng://@colijnit/configurator/utils/file.utils.ts","ng://@colijnit/configurator/utils/threed.utils.ts","ng://@colijnit/configurator/utils/scene-utils.ts","ng://@colijnit/configurator/model/material.ts","ng://@colijnit/configurator/utils/image.utils.ts","ng://@colijnit/configurator/utils/asset.utils.ts","ng://@colijnit/configurator/model/variation.ts","ng://@colijnit/configurator/model/variation-settings.ts","ng://@colijnit/configurator/utils/variation-utils.ts","ng://@colijnit/configurator/helper/variation-helper.ts","ng://@colijnit/configurator/app/builder.ts","ng://@colijnit/configurator/colijnit-configurator.ts"],"sourcesContent":["import {Material, Mesh, Object3D} from \"three\";\r\n\r\nexport class ObjectUtils {\r\n static materialProps = ['map', 'lightMap', 'bumpMap', 'normalMap', 'specularMap', 'envMap', 'aoMap', 'roughnessMap', 'metalnessMap'];\r\n\r\n public static DisposeMaterial(material: Material | Material[]): void {\r\n if (!material) {\r\n return;\r\n }\r\n if (Array.isArray(material)) {\r\n material.forEach(mtrl => {\r\n this.materialProps\r\n .filter(mapType => mtrl[mapType])\r\n .forEach(mapType => mtrl[mapType].dispose());\r\n mtrl.dispose();\r\n });\r\n } else {\r\n this.materialProps\r\n .filter(mapType => material[mapType] && material[mapType].dispose)\r\n .forEach(mapType => material[mapType].dispose());\r\n if (material.dispose) {\r\n material.dispose();\r\n }\r\n }\r\n }\r\n\r\n public static DisposeObject(object: Object3D | Mesh): void {\r\n if (!object) {\r\n return;\r\n }\r\n if (object.children.length) {\r\n object.children.forEach(child => this.DisposeObject(child));\r\n }\r\n this.DisposeNode(object);\r\n }\r\n\r\n private static DisposeNode(node: Object3D | Mesh): void {\r\n node.traverse((obj: Object3D) => {\r\n if (obj instanceof Mesh) {\r\n if (obj.geometry) {\r\n obj.geometry.dispose();\r\n }\r\n this.DisposeMaterial(obj.material);\r\n }\r\n if (typeof (obj as any).dispose === 'function') {\r\n // @ts-ignore\r\n obj.dispose();\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import axios from \"axios\";\n// Static utility functions holder related to files.\n// @dynamic\nexport class FileUtils {\n\n private static _cachedTextureUploads: Map<string, Object> = new Map();\n\n // Returns the given dataUri string stripped of the mimetype part.\n public static StripMimeStringFromDataUri(dataUri: string): string {\n if (!dataUri) {\n return '';\n }\n\n const mimeString: string = this.GetMimeStringFromDataUri(dataUri);\n return dataUri.substr(mimeString.length + 1);\n }\n\n public static GetMimeStringFromDataUri(dataUri: string): string {\n if (!dataUri) {\n return '';\n }\n\n return dataUri.split(',')[0];\n }\n\n public static async FileExists(url: string, assetPath: string): Promise<boolean> {\n const result = await axios({\n method: 'get',\n url: `${assetPath}getFiles.php?assetUrl=${url}`,\n responseType: \"json\"\n })\n return !!result.data;\n }\n\n /**\n * There is some discrepancy regarding locations of h3d objects\n * Therefor we need to (temporarily?!) fix the content url\n * Also we need to change some additionals\n */\n public static FixUrl(assetUrl: string): string {\n if (!assetUrl) {\n return '';\n }\n let fixedUrl: string = assetUrl;\n if (!fixedUrl.endsWith('glb') && !fixedUrl.endsWith('obj') && !fixedUrl.endsWith('glb.gz') && !fixedUrl.endsWith('obj.gz')) {\n fixedUrl = FileUtils.FixUnityUrl(fixedUrl);\n }\n fixedUrl = fixedUrl.replace('/content/', '/content43/');\n return fixedUrl;\n }\n\n public static FixGlbUrl(assetUrl: string): string {\n if (!assetUrl) {\n return '';\n }\n let fixedUrl: string = assetUrl;\n if (assetUrl.indexOf('_webplayer') === -1) {\n fixedUrl = assetUrl.concat('_webplayer');\n }\n fixedUrl = fixedUrl.replace('/content/', '/content43/');\n if (!fixedUrl.endsWith('.glb')) {\n fixedUrl = fixedUrl.concat('.glb');\n }\n return fixedUrl;\n }\n\n // Return the mimetype of the given filename.\n public static MimeTypeFromFilename(fileName: string): string {\n const regEx: RegExp = /(?:\\.([^.]+))?$/; // regex to find extension\n const extension: any = regEx.exec(fileName)[1];\n switch (extension) {\n case 'jpg':\n case 'jpeg':\n return 'image/jpeg';\n case 'png':\n return 'image/png';\n case 'bmp':\n return 'image/bmp';\n }\n }\n\n /**\n * Downloads the given file to the users default download location.\n * @param fileName With or without extension\n * @param content File content as a string\n * @param [mimeType = 'text/plain']\n */\n public static DownloadFile(\n fileName: string,\n content: string,\n mimeType: string = 'text/plain'\n ): void {\n const element: HTMLAnchorElement = document.createElement('a');\n element.setAttribute('href', 'data:' + mimeType + ';charset=utf-8,' + encodeURIComponent(content));\n element.setAttribute('download', fileName);\n\n element.style.display = 'none';\n document.body.appendChild(element);\n\n element.click();\n\n document.body.removeChild(element);\n }\n\n // Returns the contents of given file as a text string.\n public static ReadAsText(file: File): Promise<string> {\n return new Promise<string>((resolve: Function) => {\n const reader: FileReader = new FileReader();\n reader.readAsText(file);\n reader.onloadend = (event: any) => {\n if (event.target.readyState === 2) {\n resolve(event.target.result);\n }\n };\n });\n }\n\n public static GetExtensionFromDataUri(dataUri: string): string {\n return dataUri.replace(/(data:image\\/)(.*?)(;base64.*)/gi, '$2');\n }\n\n public static CreateDownloadFileNameFromBase64(dataUri: string): string {\n const ext: string = this.GetExtensionFromDataUri(dataUri);\n return 'preview.' + ext;\n }\n\n public static DownloadFromDataUri(dataUri: string, fileName: string): void {\n const link: any = document.createElement('a');\n link.download = fileName;\n link.href = dataUri;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n\n // todo remove once Connector deals with mimetypes and this method isn't used anymore\n public static DocumentBodyToDataUri(documentBody: string, mimeType: string): string {\n if (!!documentBody) {\n return 'data:' + mimeType + ';base64,' + documentBody;\n } else {\n return '';\n }\n }\n\n private static FixUnityUrl(url): string {\n if (url.indexOf('_webplayer') === -1) {\n url = url.concat('_webplayer.ione3d');\n } else {\n url = url.replace('_webplayer', '_webplayer.ione3d');\n }\n if (!url.endsWith('.gz')) {\n url = url.concat('.gz');\n }\n return url.replace('.unity3d', '');\n }\n}\n","import * as THREE from \"three\";\nimport {ObjectUtils} from \"./object.utils\";\nimport {FileUtils} from \"./file.utils\";\n\nexport class ThreedUtils {\n\n private _objectCache: Map<string, THREE.Object3D> = new Map();\n private _sourceCache\n\n public clearCache(): void {\n const objs: THREE.Object3D[] = Array.from(this._objectCache.values());\n objs.forEach(o => ObjectUtils.DisposeObject(o));\n this._objectCache.clear();\n }\n\n public download3DSource(fileName: string): Promise<THREE.Object3D> {\n return new Promise(async (resolve: Function, reject: Function) => {\n fileName = fileName.replace('.unity3d', '');\n let lookupFileName: string = fileName + (fileName.indexOf('.glb') < 0 ? '.glb' : '');\n if (this._objectCache.has(lookupFileName)) {\n return Promise.resolve(this._objectCache.get(lookupFileName));\n }\n if (await FileUtils.FileExists(lookupFileName, 'https://cdn1.colijn-it.nl/content43/')) {\n this.loadGlbSource(lookupFileName).then((obj: THREE.Object3D) => {\n this._objectCache.set(lookupFileName, obj);\n resolve(obj);\n });\n } else {\n reject(`GLB source not found! (${lookupFileName})`);\n }\n });\n }\n\n public readFileAsText(file: File): Promise<string> {\n const fileReader = new FileReader();\n return new Promise((resolve, reject) => {\n fileReader.onload = (e: any) => resolve(e.target.result);\n fileReader.onerror = error => reject(error);\n fileReader.readAsText(file);\n });\n }\n\n public async loadJsonModel(filePath: string): Promise<any> {\n if (this._objectCache.has(filePath)) {\n return Promise.resolve(this._objectCache.get(filePath));\n }\n const json: string = await this._readJsonFile(filePath);\n const loader = new THREE.ObjectLoader();\n loader.crossOrigin = 'Anonymous';\n return new Promise((resolve, reject) => {\n try {\n const obj = loader.parse(json);\n this._objectCache.set(filePath, obj);\n resolve(obj);\n } catch (e) {\n reject(null);\n }\n });\n }\n\n public async loadJsonObjectModel(filePath: string): Promise<any> {\n if (this._objectCache.has(filePath)) {\n return Promise.resolve(this._objectCache.get(filePath));\n }\n const loader = new THREE.ObjectLoader();\n loader.setCrossOrigin('Anonymous');\n loader.setResourcePath('');\n return new Promise((resolve, reject) => {\n loader.load(filePath,\n (object: any) => {\n const obj: THREE.Object3D = (object.type === 'Scene' && object.children[0].type === 'Object3D') ? object.children[0] : object;\n this._objectCache.set(filePath, obj);\n resolve(obj as THREE.Object3D);\n },\n xhr => null,\n error => reject(error)\n );\n });\n }\n\n public async loadGlbModel(file: string, cleanUp: boolean = true): Promise<THREE.Object3D> {\n if (this._objectCache.has(file)) {\n return Promise.resolve(this._objectCache.get(file));\n }\n if (!window.hasOwnProperty('loadGLTF')) {\n console.error('loadGLTF not defined in window global');\n return null;\n }\n // const loader = new GLTFLoader();\n const obj: THREE.Object3D = await (window as any).loadGLTF(file);\n if (obj) {\n this._cleanedUpObjects(obj, cleanUp);\n this._objectCache.set(file, obj);\n return obj;\n } else {\n return null;\n }\n }\n\n public async loadGlbSource(file: string): Promise<THREE.Object3D> {\n const obj = await this.loadGlbModel(file, false);\n if (obj) {\n obj.children = obj.children.filter(c => !(c instanceof THREE.Camera));\n obj.children.sort((a, b) => a['name'] < b['name'] ? 1 : -1);\n obj.children.forEach((c: THREE.Object3D) => {\n c.traverse((t: THREE.Object3D) => {\n t.visible = !t.name.toLowerCase().startsWith('c_');\n });\n c.visible = false;\n });\n if (obj.children.length === 1 && obj.children[0] instanceof THREE.Group) { // flatten children\n const children: any = obj.children[0].children.slice();\n obj.children.length = 0;\n obj.children = children;\n }\n }\n return obj;\n }\n\n public async textureFromUrl(url: string): Promise<any> {\n // url = this._includeBaseUrl(url);\n return new Promise((resolve, reject) => {\n const textureLoader = new THREE.TextureLoader();\n // textureLoader.setBaseU(this._settingsService.settings.assetPath);\n textureLoader.load(url,\n (texture: THREE.Texture) => {\n texture.wrapT = THREE.RepeatWrapping;\n texture.wrapS = THREE.RepeatWrapping;\n texture.repeat.set(1, 1);\n texture.needsUpdate = true;\n return resolve(texture);\n },\n null,\n reject\n );\n });\n }\n\n private _cleanedUpObjects(object: THREE.Object3D, cleanUp: boolean = true): THREE.Object3D {\n let obj: THREE.Object3D = new THREE.Object3D();\n object.children.forEach((c: THREE.Object3D) => {\n if (!(c instanceof THREE.Camera)) {\n if (cleanUp && c instanceof THREE.Group || (c.children.length === 1 && c.children[0] instanceof THREE.Group)) {\n this._addGroupChildrenToObject(c, obj);\n } else if ((cleanUp && !(c instanceof THREE.Mesh)) || (!(c instanceof THREE.Mesh) && !c.name && c.children.length > 0)) {\n c.children.forEach((child) => {\n child.translateY(c.position.y);\n });\n c.translateY(-c.position.y);\n if (obj.children.length > 0) {\n obj.add(c.clone());\n } else {\n obj = c.clone();\n }\n } else {\n // if (c.position.y > 0 || c.position.y < 0) {\n // c.children.forEach((child) => {\n // child.translateY(c.position.y);\n // });\n // c.translateY(-c.position.y);\n // }\n obj.add(c.clone());\n }\n }\n });\n const boundingBox = new THREE.Box3().setFromObject(obj);\n const bbCenterPivot = new THREE.Vector3();\n boundingBox.getCenter(bbCenterPivot);\n const delta: THREE.Vector3 = new THREE.Vector3().add(bbCenterPivot).negate();\n obj.children.forEach((cc) => {\n cc.position.add(delta);\n });\n return obj;\n }\n\n private _addGroupChildrenToObject(group: THREE.Object3D, obj: THREE.Object3D, cleanUp: boolean = true): void {\n group.children.forEach((gc: THREE.Object3D) => {\n if (cleanUp && gc instanceof THREE.Group) {\n this._addGroupChildrenToObject(gc, obj);\n } else {\n // gc.translateX(-group.position.x);\n gc.translateY(group.position.y);\n // gc.translateZ(-group.position.z);\n obj.add(gc.clone());\n }\n });\n }\n\n private _iterateChildren(children: THREE.Object3D[], callback: (child: THREE.Mesh) => {}): void {\n for (let i = 0; i < children.length; i++) {\n const child: THREE.Object3D = children[i];\n if (child instanceof THREE.Mesh) {\n callback(child);\n } else {\n this._iterateChildren(child.children, callback);\n }\n }\n }\n\n private async _readJsonFile(filePath: string): Promise<any> {\n try {\n const response = await fetch(filePath);\n if (!response.ok) {\n return '';\n } else {\n let empty = false;\n await response.clone().text().then((value) => {\n if (value === '') {\n empty = true;\n }\n });\n return empty ? {} : response.json();\n }\n } catch (e) {\n return '';\n }\n }\n\n}\n","import * as THREE from 'three';\r\n\r\nexport class SceneUtils {\r\n\r\n public static TrySelectorConnection(scene: THREE.Scene, parent: THREE.Object3D,\r\n part1: any, part2: any, createAddableFn?: Function): boolean {\r\n let addable: any;\r\n if (createAddableFn) {\r\n addable = part2;\r\n part2 = createAddableFn(addable);\r\n }\r\n for (let i = 0; i < part1.children.length; i++) {\r\n for (let ii = 0; ii < part2.children.length; ii++) {\r\n const con1: THREE.Object3D = part1.children[i];\r\n const con2: THREE.Object3D = part2.children[ii];\r\n // if these connectors can connect connect them\r\n if (!con1['connected'] && !con2['connected'] && this.CanSelectorConnect(con1, con2)) {\r\n // if addable, continue this loop with a new addable\r\n if (addable) {\r\n const newPart2: THREE.Object3D = createAddableFn(addable, part2, part1);\r\n // reference of part2 changed, so refresh con2\r\n this.SelectorConnect(scene, parent, con1, newPart2.children[ii]);\r\n } else {\r\n return this.SelectorConnect(scene, parent, con1, con2);\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n public static Convert3DPointToScreenPoint(point: THREE.Vector3, camera: THREE.Camera, width: number, height: number): THREE.Vector2 {\r\n if (!point) {\r\n return new THREE.Vector2();\r\n }\r\n const vector: THREE.Vector3 = point.clone().project(camera);\r\n vector.x = (vector.x + 1) / 2 * width;\r\n vector.y = -(vector.y - 1) / 2 * height;\r\n return new THREE.Vector2(vector.x, vector.y);\r\n }\r\n\r\n public static CanSelectorConnect(con1: THREE.Object3D | any, con2: THREE.Object3D | any): boolean {\r\n const con1Name: string = con1 instanceof THREE.Object3D ? con1.name : con1.connector;\r\n const con2Name: string = con2 instanceof THREE.Object3D ? con2.name : con2.connector;\r\n const sameParent: boolean = con1 instanceof THREE.Object3D && con2 instanceof THREE.Object3D ? con1.parent === con2.parent : false;\r\n const parts1: string[] = con1Name.toUpperCase().split('_'),\r\n parts2: string[] = con2Name.toUpperCase().split('_');\r\n if (parts1.length >= 3 && parts2.length >= 3 && !sameParent) {\r\n const connectable: boolean = parts1[0] === 'C' && parts2[0] === 'C' &&\r\n parts1[1] === parts2[1] && parts1[2] !== parts2[2];\r\n return connectable;\r\n }\r\n return false;\r\n }\r\n\r\n private static SelectorConnect(scene: THREE.Scene, parent: THREE.Object3D, con1: THREE.Object3D, con2: THREE.Object3D): boolean {\r\n if (!scene || !parent) {\r\n return false;\r\n }\r\n con1['connectedTo'] = con2.parent.name;\r\n con2['connectedTo'] = con1.parent.name;\r\n\r\n const motherRotation: THREE.Euler = new THREE.Euler(0, 0, 0);\r\n const motherPosition: THREE.Vector3 = new THREE.Vector3(0, 0, 0);\r\n\r\n scene.updateMatrixWorld(true);\r\n motherRotation.copy(parent.rotation);\r\n parent.getWorldPosition(motherPosition);\r\n\r\n parent.rotation.set(0, 0, 0);\r\n parent.position.set(0, 0, 0);\r\n\r\n const con1Quat: THREE.Quaternion = new THREE.Quaternion();\r\n con1.getWorldQuaternion(con1Quat);\r\n const con2Quat: THREE.Quaternion = new THREE.Quaternion();\r\n con2.getWorldQuaternion(con2Quat);\r\n const con1QuatParent: THREE.Quaternion = new THREE.Quaternion();\r\n con1.parent.getWorldQuaternion(con1QuatParent);\r\n const con2QuatParent: THREE.Quaternion = new THREE.Quaternion();\r\n con2.parent.getWorldQuaternion(con2QuatParent);\r\n\r\n const rotation: THREE.Quaternion = new THREE.Quaternion().multiplyQuaternions(\r\n con1Quat.invert(),\r\n con2Quat\r\n ).multiply(\r\n new THREE.Quaternion().multiplyQuaternions(\r\n con1QuatParent,\r\n con1QuatParent\r\n )\r\n );\r\n\r\n con2.parent.quaternion.copy(rotation);\r\n // Update because the matrix has been tempered with\r\n scene.updateMatrixWorld(true);\r\n\r\n // Move the connectors towards eachother\r\n const con1Pos: THREE.Vector3 = new THREE.Vector3();\r\n con1.getWorldPosition(con1Pos);\r\n const con2Pos: THREE.Vector3 = new THREE.Vector3();\r\n con2.getWorldPosition(con2Pos);\r\n\r\n const move: THREE.Vector3 = con1Pos.sub(con2Pos);\r\n con2.parent.position.x += move.x;\r\n con2.parent.position.y += move.y;\r\n con2.parent.position.z += move.z;\r\n\r\n // reset parent's objects rotation and position\r\n parent.rotation.copy(motherRotation);\r\n parent.position.copy(motherPosition);\r\n\r\n scene.updateMatrixWorld(true);\r\n\r\n // Set the connected flag\r\n con1['connected'] = true;\r\n con2['connected'] = true;\r\n return true;\r\n }\r\n\r\n}\r\n","import * as THREE from 'three';\n\nexport class Material {\n\n public name: string;\n public schema: string;\n public specular: THREE.Color = new THREE.Color(0.3, 0.3, 0.3);\n public shininess = 0;\n // public roughness = 1;\n // public metalness = 0.5;\n public normal: THREE.Texture;\n public texture: THREE.Texture;\n public ao: THREE.Texture;\n public metalness: THREE.Texture;\n public roughness: THREE.Texture;\n public repeatX = 4;\n public repeatY = 4;\n public loaded = false;\n public metalnessValue: number;\n public roughnessValue: number;\n\n}\n","import * as THREE from 'three';\nimport {Material} from '../model/material';\n// @dynamic\nexport class ImageUtils {\n\n public static textures: Map<string, THREE.Texture> = new Map();\n\n public static CreateTextureFromBase64(id: string, base64: string, material: Material): Promise<THREE.Texture> {\n return new Promise<THREE.Texture>((resolve) => {\n if (ImageUtils.textures.has(id)) {\n resolve(ImageUtils.textures.get(id));\n } else {\n if (!base64) {\n resolve(new THREE.Texture());\n } else {\n const loader: THREE.TextureLoader = new THREE.TextureLoader();\n loader.load(base64, (texture: THREE.Texture) => {\n texture.anisotropy = 16;\n texture.wrapS = THREE.RepeatWrapping;\n texture.wrapT = THREE.RepeatWrapping;\n texture.repeat = new THREE.Vector2(material ? material.repeatX : 1, material ? material.repeatY : 1);\n texture.needsUpdate = true;\n ImageUtils.textures.set(id, texture);\n resolve(texture);\n });\n }\n }\n });\n }\n\n}\n","import {Material} from '../model/material';\nimport {ImageUtils} from './image.utils';\nimport * as THREE from 'three';\nimport {sRGBEncoding} from 'three';\nimport {VariationSettings} from '../model/variation-settings';\n\nexport class FurnitureMaterial extends Material {\n\n public textureFilename?: string;\n public normalFilename?: string;\n public aoFilename?: string;\n public metalnessFilename?: string;\n public roughnessFilename?: string;\n\n}\n\nexport class AssetUtils {\n\n public static async CreateMaterialFromAsset(asset: VariationSettings): Promise<Material> {\n const material: FurnitureMaterial = new Material();\n if (!asset) {\n return material;\n }\n if (asset.settings) {\n AssetUtils.setSettingsOfMaterial(material, asset.settings);\n }\n if (asset.texture) {\n material.texture = await ImageUtils.CreateTextureFromBase64(asset.id + '_texture', asset.texture, material);\n material.texture.encoding = sRGBEncoding;\n\n material.textureFilename = asset.textureFilename;\n }\n if (asset.normal) {\n material.normal = await ImageUtils.CreateTextureFromBase64(asset.id + '_normal', asset.normal, material);\n material.normalFilename = asset.normalFilename;\n // material.normal.anisotropy = 1;\n // material.normal.repeat.set(1, 1);\n // material.normal.flipY = false;\n }\n if (asset.ao) {\n material.ao = await ImageUtils.CreateTextureFromBase64(asset.id + '_ao', asset.ao, material);\n material.aoFilename = asset.aoFilename;\n }\n if (asset.metalness) {\n material.metalness = await ImageUtils.CreateTextureFromBase64(asset.id + '_metalness', asset.metalness, material);\n material.metalnessFilename = asset.metalnessFilename;\n }\n if (asset.roughness) {\n material.roughness = await ImageUtils.CreateTextureFromBase64(asset.id + '_roughness', asset.roughness, material);\n material.roughnessFilename = asset.roughnessFilename;\n }\n return material;\n }\n\n public static setSettingsOfMaterial(material: Material, settings: any): void {\n const shininess = parseFloat(settings['power']);\n if (!isNaN(shininess)) {\n material.shininess = shininess;\n // material.roughness = 1 - (shininess / 100);\n }\n\n const level = parseFloat(settings['level']);\n if (!isNaN(level)) {\n material.specular = new THREE.Color(level, level, level);\n }\n\n const repeatObjectUsed: boolean = settings.hasOwnProperty('repeat');\n const repeatx = repeatObjectUsed ? parseFloat(settings['repeat']['repeatx']) : parseFloat(settings['repeatx']);\n if (!isNaN(repeatx)) {\n material.repeatX = Math.max(1, repeatx);\n }\n\n const repeaty = repeatObjectUsed ? parseFloat(settings['repeat']['repeaty']) : parseFloat(settings['repeaty']);\n if (!isNaN(repeaty)) {\n material.repeatY = Math.max(1, repeaty);\n }\n\n const metalness = parseFloat(settings['metalness']);\n if (!isNaN(metalness)) {\n material.metalnessValue = Math.min(1, metalness);\n }\n\n const roughness = parseFloat(settings['roughness']);\n if (!isNaN(roughness)) {\n material.roughnessValue = Math.min(1, roughness);\n }\n }\n}\n","import {Material} from './material';\n\nexport class Variation {\n public decoId: number;\n public brandId: string;\n public gameObjectName: string;\n public node: any;\n public supplierArticleNr: string;\n public materialId: string;\n public material: Material;\n}\n","export class VariationSettings {\n public id: string;\n public settings: any = {};\n public texture: string;\n public textureFilename: string;\n public normal: string;\n public normalFilename: string;\n public ao: string;\n public aoFilename: string;\n public metalness: string;\n public metalnessFilename: string;\n public roughness: string;\n public roughnessFilename: string;\n}\n","import * as JSZip from 'jszip';\r\nimport * as THREE from 'three';\r\nimport {FileUtils} from \"./file.utils\";\r\nimport {VariationSettings} from \"../model/variation-settings\";\r\nimport axios from \"axios\";\r\n\r\n// @dynamic\r\nexport class VariationUtils {\r\n private static MaterialCache: Map<string, THREE.MeshStandardMaterial> = new Map();\r\n\r\n public static async LoadVariation(assetPath: string, fileName: string): Promise<VariationSettings> {\r\n if (!fileName) {\r\n return null;\r\n }\r\n if (fileName.indexOf('ione3d') < 0) {\r\n fileName = fileName.concat('.ione3d');\r\n }\r\n const id: string = fileName.substr(0, fileName.lastIndexOf('.ione3d'));\r\n try {\r\n if (!assetPath.endsWith('/')) {\r\n assetPath += '/';\r\n }\r\n if (!window.hasOwnProperty('downloadVariation')) {\r\n console.error('downloadVariation not defined in window global');\r\n return null;\r\n }\r\n const file: any = await (window as any).downloadVariation(`${assetPath.replace('https://cdn1.colijn-it.nl/', '')}variation/${fileName}`);\r\n return await VariationUtils.GetVariationSettingsFromFile(id, file);\r\n } catch (err) {\r\n const mute = err;\r\n return null;\r\n }\r\n }\r\n\r\n // public static GetMaterialFromName(variationFolder: string, material: any): Promise<MeshStandardMaterial> {\r\n // return new Promise((resolve: Function) => {\r\n // if (!material) {\r\n // resolve(null);\r\n // }\r\n // if (this.MaterialCache.has(material.name)) {\r\n // resolve(this.MaterialCache.get(material.name).clone());\r\n // } else {\r\n // VariationUtils.LoadVariation(variationFolder, material.name, false).then((settings: VariationSettings) => {\r\n // if (settings) {\r\n // AssetUtils.CreateMaterialFromAsset(settings).then((materialObj: Material) => {\r\n // const materialParams: MeshStandardMaterialParameters = {};\r\n // materialParams.name = material.name;\r\n // materialParams.map = materialObj.texture;\r\n // materialParams.normalMap = materialObj.normal;\r\n // materialParams.aoMap = materialObj.ao;\r\n // materialParams.roughnessMap = materialObj.roughness;\r\n // materialParams.metalnessMap = materialObj.metalness;\r\n // materialParams.roughness = 1;\r\n // materialParams.metalness = 1;\r\n // const pbrMat: MeshStandardMaterial = new MeshStandardMaterial(materialParams);\r\n // this.MaterialCache.set(material.name, pbrMat);\r\n // resolve(pbrMat.clone());\r\n // });\r\n // } else {\r\n // resolve(material);\r\n // }\r\n // });\r\n // }\r\n // });\r\n // }\r\n\r\n private static async GetVariationSettingsFromFile(id: string, compressedFile: any): Promise<VariationSettings> {\r\n if (!compressedFile) {\r\n return null;\r\n }\r\n const zipContent = await VariationUtils.GetZipContent(compressedFile);\r\n const variationSettings: VariationSettings = new VariationSettings();\r\n let index;\r\n variationSettings.id = id;\r\n\r\n if (zipContent.files['index.json']) {\r\n const indexFile: string = await zipContent.files['index.json'].async('string');\r\n index = JSON.parse(indexFile);\r\n }\r\n if (index) {\r\n await VariationUtils.CreateSettingsBasedOnIndex(index, variationSettings, zipContent);\r\n } else {\r\n await VariationUtils.CreateSettingsBasedOnFileName(variationSettings, zipContent);\r\n }\r\n return variationSettings;\r\n }\r\n\r\n private static async CreateSettingsBasedOnIndex(index: any, variationSettings: VariationSettings, zipContent: any): Promise<void> {\r\n if (index.normalFile) {\r\n variationSettings.normal = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.normalFile], index.normalFile);\r\n variationSettings.normalFilename = index.normalFile;\r\n }\r\n if (index.aoFile) {\r\n variationSettings.ao = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.aoFile], index.aoFile);\r\n variationSettings.aoFilename = index.aoFile;\r\n }\r\n if (index.metalnessFile) {\r\n variationSettings.metalness = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.metalnessFile], index.metalnessFile);\r\n variationSettings.metalnessFilename = index.metalnessFile;\r\n }\r\n if (index.roughnessFile) {\r\n variationSettings.roughness = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.roughnessFile], index.roughnessFile);\r\n variationSettings.roughnessFilename = index.roughnessFile;\r\n }\r\n if (index.diffuseFile) {\r\n variationSettings.texture = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.diffuseFile], index.diffuseFile);\r\n variationSettings.textureFilename = index.diffuseFile;\r\n }\r\n variationSettings.settings =\r\n await VariationUtils.LoadFileContentFromZip(zipContent.files['repeat.json'], 'repeat.json', false) || {};\r\n Object.assign(variationSettings.settings, index.repeat);\r\n variationSettings.settings.metalness = index.metalness;\r\n variationSettings.settings.roughness = index.roughness;\r\n }\r\n\r\n private static async CreateSettingsBasedOnFileName(variationSettings: VariationSettings, zipContent: any): Promise<void> {\r\n const allLoaded: Promise<VariationSettings>[] = [];\r\n for (const fileName in zipContent.files) {\r\n if (zipContent.files[fileName]) {\r\n const file: any = await zipContent.files[fileName];\r\n if (file.name.toLowerCase().indexOf('normal') > -1 && this.FileIsImage(file.name)) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((normalFile: any) => {\r\n variationSettings.normal = `data:image/${this.GetBase64FileType(file.name)};base64,${normalFile}`;\r\n variationSettings.normalFilename = fileName;\r\n }));\r\n } else if (file.name.toLowerCase().indexOf('ao') > -1 && this.FileIsImage(file.name)) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((aoFile: any) => {\r\n variationSettings.ao = `data:image/${this.GetBase64FileType(file.name)};base64,${aoFile}`;\r\n variationSettings.aoFilename = fileName;\r\n }));\r\n } else if (file.name.toLowerCase().indexOf('metalness') > -1 && this.FileIsImage(file.name)) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((metalnessFile: any) => {\r\n variationSettings.metalness = `data:image/${this.GetBase64FileType(file.name)};base64,${metalnessFile}`;\r\n variationSettings.metalnessFilename = fileName;\r\n }));\r\n } else if (file.name.toLowerCase().indexOf('roughness') > -1 && this.FileIsImage(file.name)) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((roughnessFile: any) => {\r\n variationSettings.roughness = `data:image/${this.GetBase64FileType(file.name)};base64,${roughnessFile}`;\r\n variationSettings.roughnessFilename = fileName;\r\n }));\r\n } else if (file.name.toLowerCase().indexOf('diffuse') > -1 && this.FileIsImage(file.name)) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((diffuseFile: any) => {\r\n variationSettings.texture = `data:image/${this.GetBase64FileType(file.name)};base64,${diffuseFile}`;\r\n variationSettings.textureFilename = fileName;\r\n }));\r\n } else if (file.name.indexOf('.jp') > -1) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((textureFile: any) => {\r\n variationSettings.texture = 'data:image/jpeg;base64,' + textureFile;\r\n variationSettings.textureFilename = fileName;\r\n }));\r\n } else if (file.name.indexOf('.json') > -1) {\r\n allLoaded.push(zipContent.files[fileName].async('string').then((settingsFile: any) => {\r\n const settingsFileObj = JSON.parse(settingsFile);\r\n for (const key in settingsFileObj) {\r\n if (settingsFileObj[key]) {\r\n variationSettings.settings[key] = settingsFileObj[key];\r\n }\r\n }\r\n }));\r\n }\r\n }\r\n }\r\n await Promise.all(allLoaded);\r\n }\r\n\r\n private static LoadFileContentFromZip(zip: any, fileName: string, base64: boolean = true): Promise<string> {\r\n return new Promise((resolve: Function) => {\r\n if (zip && fileName) {\r\n zip.async(base64 ? 'base64' : 'string').then((fileContent: any) => {\r\n if (base64) {\r\n resolve(`data:image/${this.GetBase64FileType(fileName)};base64,${fileContent}`);\r\n } else {\r\n resolve(fileContent);\r\n }\r\n });\r\n } else {\r\n resolve(undefined);\r\n }\r\n });\r\n }\r\n\r\n private static FileIsImage(fileName: string): boolean {\r\n const ext: string = fileName.substring(fileName.lastIndexOf('.') + 1, fileName.length).toLowerCase();\r\n switch (ext) {\r\n case 'jpg':\r\n case 'jpeg':\r\n case 'png':\r\n case 'bmp':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n private static GetBase64FileType(fileName: string): string {\r\n const ext: string = fileName.substring(fileName.lastIndexOf('.') + 1, fileName.length).toLowerCase();\r\n switch (ext) {\r\n case 'jpg':\r\n case 'jpeg':\r\n return 'jpeg';\r\n case 'png':\r\n return 'png';\r\n case 'bmp':\r\n return 'bmp';\r\n default:\r\n return 'jpeg';\r\n }\r\n }\r\n\r\n // Get the content\r\n private static async GetZipContent(file): Promise<any> {\r\n const jszip = new JSZip();\r\n const content = await jszip.loadAsync(file);\r\n return content;\r\n }\r\n}\r\n","import {DecoNodeType} from \"@colijnit/configuratorapi/build/src/enum/deco-node-type.enum\";\r\nimport {VariationSettings} from \"../model/variation-settings\";\r\nimport {AssetUtils} from \"../utils/asset.utils\";\r\nimport {DecoNode} from \"@colijnit/configuratorapi/build/src/model/deco-node\";\r\nimport {Variation} from \"../model/variation\";\r\nimport * as THREE from \"three\";\r\nimport {VariationUtils} from \"../utils/variation-utils\";\r\n\r\nexport class VariationHelper {\r\n\r\n public assetPath: string;\r\n\r\n private _lastKnownVariations: Map<string, Map<string, Variation[]>> = new Map();\r\n\r\n public clearCache(): void {\r\n const valueMap: Map<string, Variation[]>[] = Array.from(this._lastKnownVariations.values());\r\n for (let i = 0; i < valueMap.length; i++) {\r\n const values = Array.from(valueMap[i].values());\r\n values.forEach((variations) => {\r\n variations.forEach((variation) => {\r\n variation.material.texture.dispose();\r\n variation.material.normal.dispose();\r\n variation.material.metalness.dispose();\r\n variation.material.roughness.dispose();\r\n variation.material.ao.dispose();\r\n })\r\n });\r\n }\r\n }\r\n\r\n public async loadPart(obj: THREE.Object3D, parts: any[], usePbr: boolean = false): Promise<void> {\r\n try {\r\n const len: number = parts.length;\r\n for (let i = 0; i < len; i++) {\r\n if (parts[i].decoNode && parts[i].decoNode.gameObjectName && parts[i].decoNode.type === DecoNodeType.Part) {\r\n const partSettings: VariationSettings =\r\n await VariationUtils.LoadVariation(this.assetPath, parts[i].decoNode.gameObjectName || parts[i].decoId);\r\n if (partSettings) {\r\n const partVariation: Variation = new Variation();\r\n partVariation.decoId = parseFloat(parts[i].decoNode.id);\r\n partVariation.brandId = parts[i].decoNode.brandId;\r\n partVariation.gameObjectName = parts[i].decoNode.gameObjectName;\r\n partVariation.material = await AssetUtils.CreateMaterialFromAsset(partSettings);\r\n // parts[i].variation = partVariation;\r\n this._applyMaterialPart(obj, partVariation, parts[i].node, usePbr);\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n public async loadVariation(instanceId: string, obj: THREE.Object3D, parts: any[], usePbr: boolean = false): Promise<void> {\r\n try {\r\n const len: number = parts.length;\r\n for (let i = 0; i < len; i++) {\r\n const variations: DecoNode[] = parts[i].variations;\r\n if (!variations || variations.length === 0) {\r\n if (this._getLastKnownVariations(instanceId, parts[i].nodeId)) {\r\n parts[i].variations = this._getLastKnownVariations(instanceId, parts[i].nodeId);\r\n this._applyVariations(obj, parts[i], usePbr);\r\n continue;\r\n } else {\r\n continue;\r\n }\r\n }\r\n const lastKnownVariations: Variation[] = [];\r\n for (let j = 0; j < variations.length; j++) {\r\n const variationSettings: VariationSettings =\r\n await VariationUtils.LoadVariation(this.assetPath, variations[j].gameObjectName || parts[i].decoId);\r\n const newVariation: Variation = new Variation();\r\n newVariation.decoId = parseFloat(variations[j].id);\r\n newVariation.brandId = variations[j].brandId;\r\n newVariation.gameObjectName = variations[j].gameObjectName;\r\n newVariation.supplierArticleNr = (variations[j] as any).supplierArticleNr;\r\n newVariation.materialId = (variations[j] as any).materialId;\r\n newVariation.material = await AssetUtils.CreateMaterialFromAsset(variationSettings);\r\n lastKnownVariations.push(newVariation);\r\n }\r\n this._setLastKnownVariations(instanceId, parts[i].nodeId, lastKnownVariations);\r\n parts[i].variations = lastKnownVariations;\r\n this._applyVariations(obj, parts[i], usePbr);\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n private _getChildrenFilterByProp(obj: THREE.Object3D, userDataObjectProp: string, prop: string, value: any): THREE.Object3D[] {\r\n return obj.children.filter((child) => {\r\n return child.userData &&\r\n child.userData.hasOwnProperty(userDataObjectProp) &&\r\n child.userData[userDataObjectProp].hasOwnProperty(prop) &&\r\n child.userData[userDataObjectProp][prop] === value;\r\n });\r\n }\r\n\r\n private _applyMaterialPart(obj: THREE.Object3D, partMaterial: any, nodeId: any, usePbr: boolean = false): void {\r\n const children = this._getChildrenFilterByProp(obj, 'selection', 'node', nodeId);\r\n const len: number = children.length;\r\n for (let i: number = 0; i < len; i++) {\r\n const child = children[i];\r\n if (child !== null && child !== undefined) {\r\n child.traverse((mesh) => {\r\n if (mesh instanceof THREE.Mesh && partMaterial) {\r\n if (Array.isArray(mesh.material)) { // multimaterial support\r\n for (let j = 0, jlen: number = mesh.material.length; j < jlen; j++) {\r\n if (mesh.material[j].name.toLowerCase().indexOf('fixed_frame') !== -1) {\r\n mesh.material[j] = this._setMeshMaterialFromVariation(mesh.material[j].name, partMaterial, usePbr);\r\n }\r\n }\r\n } else {\r\n if (mesh.material.name.toLowerCase().indexOf('fixed_frame') !== -1) {\r\n mesh.material = this._setMeshMaterialFromVariation(mesh.material.name, partMaterial, usePbr);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n private _applyVariations(obj: THREE.Object3D, part: any, usePbr: boolean = false): void {\r\n const children = this._getChildrenFilterByProp(obj, 'selection', 'node', part.node);\r\n const len: number = children.length;\r\n for (let i: number = 0; i < len; i++) {\r\n const child = children[i];\r\n if (child !== null && child !== undefined) {\r\n child.traverse((mesh) => {\r\n if (mesh instanceof THREE.Mesh && part.variations && part.variations.length > 0 && mesh.name.toLowerCase().indexOf('c_')) {\r\n for (let j = 0; j < part.variations.length; j++) {\r\n const variation: Variation = part.variations[j];\r\n if (variation.material) {\r\n const materialToSearch: string = !!variation.materialId ? variation.materialId.toLowerCase() : 'default';\r\n if (Array.isArray(mesh.material)) { // multimaterial support\r\n for (let m = 0, mlen: number = mesh.material.length; m < mlen; m++) {\r\n if (mesh.material[m].name.toLowerCase().indexOf(materialToSearch) !== -1) {\r\n mesh.material[m] = this._setMeshMaterialFromVariation(mesh.material[m].name, variation, usePbr);\r\n }\r\n }\r\n } else {\r\n if (mesh.material.name.toLowerCase().indexOf(materialToSearch) !== -1) {\r\n mesh.material = this._setMeshMaterialFromVariation(mesh.material.name, variation, usePbr);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n private _setMeshMaterialFromVariation(name: string, variation: Variation, usePbr: boolean = false): THREE.Material {\r\n if (variation.material.texture) {\r\n variation.material.texture.needsUpdate = true;\r\n }\r\n if (!usePbr) {\r\n const material: THREE.MeshPhongMaterial = new THREE.MeshPhongMaterial({\r\n name: name,\r\n shininess: variation.material.shininess,\r\n specular: variation.material.specular,\r\n map: variation.material.texture,\r\n normalMap: variation.material.normal\r\n });\r\n // material.color.setRGB(0.8, 0.8, 0.8);\r\n material.needsUpdate = true;\r\n return material;\r\n } else {\r\n const params: THREE.MeshStandardMaterialParameters = {\r\n // side: DoubleSide,\r\n name: name,\r\n roughness: variation.material.roughnessValue ? variation.material.roughnessValue : 1,\r\n metalness: variation.material.metalnessValue ? variation.material.metalnessValue : 0,\r\n // wireframe: true\r\n };\r\n if (variation.material.texture) {\r\n params.map = variation.material.texture;\r\n }\r\n if (variation.material.ao) {\r\n params.aoMap = variation.material.ao;\r\n }\r\n if (variation.material.roughness) {\r\n params.roughnessMap = variation.material.roughness;\r\n }\r\n if (variation.material.metalness) {\r\n params.metalnessMap = variation.material.metalness;\r\n }\r\n if (variation.material.normal) {\r\n params.normalMap = variation.material.normal;\r\n }\r\n const material: THREE.MeshStandardMaterial = new THREE.MeshStandardMaterial(params);\r\n material.color.setRGB(1, 1, 1);\r\n material.needsUpdate = true;\r\n return material;\r\n }\r\n }\r\n\r\n private _setLastKnownVariations(instanceId: string, id: string, variation: Variation[]): void {\r\n if (this._lastKnownVariations.has(instanceId)) {\r\n const variations = this._lastKnownVariations.get(instanceId);\r\n variations.set(id, variation);\r\n } else {\r\n const variations: Map<string, Variation[]> = new Map();\r\n this._lastKnownVariations.set(instanceId, variations.set(id, variation));\r\n }\r\n }\r\n\r\n private _getLastKnownVariations(instanceId: string, id: string): Variation[] {\r\n if (this._lastKnownVariations.has(instanceId)) {\r\n const variations = this._lastKnownVariations.get(instanceId);\r\n if (variations.has(id)) {\r\n return variations.get(id);\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n}\r\n","import * as THREE from \"three\";\r\nimport {Configurator} from \"@colijnit/configuratorapi/build/src/configurator\";\r\nimport {Options} from \"@colijnit/configuratorapi/build/src/model/options\";\r\nimport {DataServiceResponseData} from \"@colijnit/configuratorapi/build/src/model/data-service-response-data\";\r\nimport {DecoNode} from \"@colijnit/configuratorapi/build/src/model/deco-node\";\r\nimport {BusinessObjectFactory} from \"@colijnit/configuratorapi/build/src/service/business-object-factory\";\r\nimport {Selection} from \"@colijnit/configuratorapi/build/src/model/selection\";\r\nimport {DecoNodeType} from \"@colijnit/configuratorapi/build/src/enum/deco-node-type.enum\";\r\nimport {FileUtils} from \"../utils/file.utils\";\r\nimport {ThreedUtils} from \"../utils/threed.utils\";\r\nimport {DecoNodeKind} from \"@colijnit/configuratorapi/build/src/enum/deco-node-kind.enum\";\r\nimport {SceneUtils} from \"../utils/scene-utils\";\r\nimport {VariationHelper} from \"../helper/variation-helper\";\r\nimport {Article} from \"@colijnit/configuratorapi/build/src/model/article\";\r\nimport {BehaviorSubject} from \"rxjs\";\r\n\r\nexport class Builder {\r\n\r\n public selectionsReceived: BehaviorSubject<Selection[]> = new BehaviorSubject<Selection[]>([]);\r\n\r\n private _configuratorApi: Configurator;\r\n private _scene: THREE.Scene;\r\n private _selections: Selection[] = [];\r\n private _decos: DecoNode[] = [];\r\n private _placedAdjustables: any[] = [];\r\n private _placedAddables: any[] = [];\r\n private _adjustables: any[] = [];\r\n private _addables: any[] = [];\r\n\r\n private _boFactory: BusinessObjectFactory;\r\n private _source: THREE.Object3D;\r\n private _threedUtils: ThreedUtils;\r\n private _variationHelper: VariationHelper;\r\n\r\n constructor(scene: THREE.Scene, options: Options) {\r\n if (!scene) {\r\n throw 'No scene object provided!';\r\n }\r\n if (!options) {\r\n throw 'No connection options provided!';\r\n }\r\n this._scene = scene;\r\n this._configuratorApi = new Configurator(options);\r\n this._boFactory = new BusinessObjectFactory();\r\n this._threedUtils = new ThreedUtils();\r\n this._variationHelper = new VariationHelper();\r\n }\r\n\r\n public async buildModel(instanceId: string, sku: string, goodId?: number): Promise<THREE.Object3D> {\r\n if (!this._scene && !instanceId) {\r\n return;\r\n }\r\n try {\r\n if (!goodId) {\r\n goodId = await this._getGoodIdFromSku(sku)\r\n .catch((error) => {\r\n throw `Article with sku ${sku} not found!`;\r\n });\r\n }\r\n const article: Article = await this._getArticle(goodId);\r\n if (article && article.assetUrl) {\r\n this._source = await this._threedUtils.download3DSource(article.assetUrl)\r\n .catch((error) => {\r\n throw error;\r\n });\r\n if (this._source) {\r\n if (article.contentDeliveryUrl) {\r\n this._variationHelper.assetPath =\r\n article.contentDeliveryUrl +\r\n (article.contentDeliveryUrl.endsWith('/') ? '' : '/') +\r\n (article.distSchema ? article.distSchema : 'UP_DBA');\r\n }\r\n await this._configuratorApi.setInstanceToConfigure(instanceId);\r\n const promises: Promise<any>[] = [];\r\n promises.push(this._getSelections());\r\n promises.push(this._getDecos());\r\n await Promise.all(promises);\r\n this._linkSelectionsAndDecos();\r\n return this._build(instanceId);\r\n } else {\r\n throw 'GLB source not found!';\r\n }\r\n } else {\r\n return null;\r\n }\r\n } catch (e) {\r\n throw e;\r\n }\r\n }\r\n\r\n public initNodeInstance(goodId: number): Promise<any> {\r\n return this._configuratorApi.initNodeInstance(goodId);\r\n }\r\n\r\n public destroy(): void {\r\n this._threedUtils.clearCache();\r\n this._variationHelper.clearCache();\r\n }\r\n\r\n private async _build(instanceId: string): Promise<THREE.Object3D> {\r\n this._reset();\r\n const adjustables: Selection[] = this._getAdjustables();\r\n if (adjustables && adjustables.length > 0) {\r\n const obj: THREE.Object3D = new THREE.Object3D();\r\n obj.visible = false; // no need to render visualy\r\n this._scene.add(obj);\r\n let connected = false;\r\n for (let i = 0, len: number = adjustables.length; i < len; i++) {\r\n const adjustable: THREE.Object3D = this._createAdjustable(obj, adjustables[i]);\r\n if (adjustable) {\r\n for (let ii = 0, lenii: number = this._placedAdjustables.length; ii < lenii; ii++) {\r\n if (SceneUtils.TrySelectorConnection(this._scene,\r\n obj, this._placedAdjustables[ii], adjustable)) {\r\n this._placedAdjustables[ii].visible = true;\r\n adjustable.visible = true;\r\n connected = true;\r\n break;\r\n }\r\n connected = false;\r\n }\r\n }\r\n if (!connected && this._placedAdjustables.length > 1) {\r\n console.warn('No connection found for: ', adjustable.name);\r\n }\r\n }\r\n this._placeAddables(obj);\r\n this._updatePivot(obj);\r\n await this._loadVariations(obj, instanceId);\r\n this._scene.remove(obj);\r\n return obj;\r\n } else {\r\n throw 'No adjustables found!';\r\n // this._building = false;\r\n // if (this.selections.length < 2) {\r\n // this._errorService.addError(this.activeInstance, {message: 'NO_SELECTIONS_OR_DECOS', description: 'NO_SELECTIONS_OR_DECOS_INFO'});\r\n // this.buildFinished.next({instanceId: this.activeInstance, resultType: ResultType.NoSelections});\r\n // } else if (this.decos.size === 0) {\r\n // this._errorService.addError(this.activeInstance, {message: 'NO_SELECTIONS_OR_DECOS', description: 'NO_SELECTIONS_OR_DECOS_INFO'});\r\n // this.buildFinished.next({instanceId: this.activeInstance, resultType: ResultType.NoDecoNodes});\r\n // } else {\r\n // this._errorService.addError(this.activeInstance, {message: 'NO_ADJUSTABLES', description: 'NO_ADJUSTABLES_INFO'});\r\n // this.buildFinished.next({instanceId: this.activeInstance, resultType: ResultType.NoAdjustables});\r\n // }\r\n }\r\n }\r\n\r\n private _prepareTheSelections(): void {\r\n // get generic variations\r\n const globalVariations: DecoNode[] = this._selections\r\n .filter(s => s.generic && (s.decoNode as any).variation && !s.decoNode.type)\r\n .map((value: Selection, index: number, array: Selection[]) => {\r\n // find selection of variation\r\n const sel: Selection = this._selections.find(s => s.artNodeIdDeco === (value.decoNode as any).variation.id);\r\n if (sel) {\r\n (value.decoNode as any).variation.supplierArticleNr = sel.supplierArticleNr;\r\n }\r\n (value.decoNode as any).variation.materialId = value.hdecoGameObject;\r\n return (value.decoNode as any).variation;\r\n });\r\n\r\n // const usedVariations: FurniturePartVariation[] = [];\r\n let globalVariationsRewrite: boolean = true;\r\n\r\n const len: number = this._selections.length;\r\n let lastAdded: Selection;\r\n let lastAdjustable: Selection;\r\n let newPart: boolean = false;\r\n let previousPresLevel: number = -1;\r\n let positioning: any;\r\n for (let i = 0; i < len; i++) {\r\n const selection: Selection = this._selections[i];\r\n if (selection.presentationLevel === 1) {\r\n positioning = selection.hdecoPositioning;\r\n }\r\n if (selection.presentationLevel > previousPresLevel) {\r\n selection.hdecoPositioning = selection.hdecoPositioning || positioning;\r\n }\r\n if (selection.decoNode) {\r\n if (selection.decoNode.type === DecoNodeType.Variation) {\r\n if (lastAdded) {\r\n if (newPart) {\r\n lastAdded.variations = [selection.decoNode];\r\n } else {\r\n lastAdded.variations.push(selection.decoNode);\r\n }\r\n newPart = false;\r\n } else {\r\n if (globalVariationsRewrite) {\r\n globalVariations.length = 0;\r\n globalVariationsRewrite = false;\r\n }\r\n globalVariations.push(selection.decoNode);\r\n }\r\n // const variation: FurniturePartVariation = new FurniturePartVariation();\r\n // variation.BrandId = selection.decoNode.brandId;\r\n // variation.Description = selection.decoNode.gameObjectName;\r\n // variation.MaterialId = (selection.decoNode as any).materialId;\r\n // variation.SupplierArticleNr = (selection.decoNode as any).supplierArticleNr;\r\n // usedVariations.push(variation);\r\n // this._upsertFurniture(this.activeInstance, {\r\n // Variation: selection.decoNode.brandId,\r\n // VariationDescription: selection.decoNode.gameObjectName,\r\n // SupplierArticleNr: (selection.decoNode as any).supplierArticleNr\r\n // });\r\n } else if (selection.decoNode.type === DecoNodeType.Part &&\r\n typeof selection.decoNode.gameObjectName === 'string' &&\r\n selection.decoNode.gameObjectName.length) {\r\n if (selection.decoNode.kind === DecoNodeKind.Adjustable) {\r\n selection.variations = globalVariations;\r\n this._adjustables.push(selection);\r\n if (!lastAdded || lastAdded.nodeId !== selection.nodeId) {\r\n newPart = true;\r\n }\r\n lastAdded = selection;\r\n lastAdjustable = selection;\r\n } else if (selection.decoNode.kind === DecoNodeKind.Addable) {\r\n selection.variations = lastAdjustable ? lastAdjustable.variations : globalVariations;\r\n if (lastAdjustable) {\r\n lastAdjustable.addables.push(selection);\r\n }\r\n this._addables.push(selection);\r\n if (!lastAdded || lastAdded.nodeId !== selection.nodeId) {\r\n newPart = true;\r\n }\r\n lastAdded = selection;\r\n }\r\n }\r\n }\r\n previousPresLevel = selection.presentationLevel;\r\n }\r\n // this._upsertFurniture(this.activeInstance,\r\n // {Variations: usedVariations});\r\n }\r\n\r\n private _createAdjustable(parent: THREE.Object3D, adj: Selection): THREE.Object3D {\r\n let obj: any = this._source ? this._source.getObjectByName(adj.decoNode.gameObjectName) : null;\r\n if (!obj) {\r\n // in case of glb files, the importer removes dots from names\r\n const name = adj.decoNode.gameObjectName.replace(/[.]/g, '');\r\n obj = this._source ? this._source.getObjectByName(name) : null;\r\n if (!obj) {\r\n // console.warn(`No object with name ${adj.decoNode.gameObjectName} found!`);\r\n return null;\r\n }\r\n }\r\n let adjustable: any = obj.clone();\r\n adjustable.name = this._createUniqueName(parent, obj);\r\n adjustable.userData.selection = adj;\r\n adjustable.position.set(0, 0, 0);\r\n adjustable.visible = true;\r\n parent.add(adjustable);\r\n // the object being added to the customFloorGroup is being recreated so we loose the reference\r\n // therefor we need to retrieve the created object again\r\n // adjustable = parent.getObjectByName(adjustable.name);\r\n this._placedAdjustables.push(adjustable);\r\n return adjustable;\r\n }\r\n\r\n private _createAddable(parent: THREE.Object3D, add: Selection, part2?: any, part1?: any): THREE.Object3D {\r\n const obj: any = this._source.getObjectByName(add.decoNode.gameObjectName);\r\n if (!obj) {\r\n return null;\r\n }\r\n // const selection: Selection = this._getSelectionFromId(adj.artNodeIdDeco);\r\n const addable: any = obj.clone();\r\n addable.name = this._createUniqueName(parent, obj);\r\n addable.userData.selection = add;\r\n addable.position.set(0, 0, 0);\r\n addable.visible = true;\r\n if (part1 && part2) {\r\n parent.add(addable);\r\n this._placedAddables.push(addable);\r\n return addable;\r\n }\r\n return addable;\r\n }\r\n\r\n private _placeAddables(parent: THREE.Object3D): void {\r\n const len: number = this._placedAdjustables.length;\r\n for (let i = 0; i < len; i++) {\r\n if (this._placedAdjustables[i].userData.hasOwnProperty('selection') && this._placedAdjustables[i].userData.selection) {\r\n const adjustableSelection: Selection = this._placedAdjustables[i].userData.selection;\r\n if (adjustableSelection) {\r\n const lena: number = adjustableSelection.addables.length;\r\n let conAddable: any;\r\n for (let ia = 0; ia < lena; ia++) {\r\n SceneUtils.TrySelectorConnection(this._scene,\r\n parent, this._placedAdjustables[i], adjustableSelection.addables[ia],\r\n (add, part2?, part1?) => this._createAddable(parent, add, part2, part1));\r\n if (conAddable) {\r\n SceneUtils.TrySelectorConnection(this._scene,\r\n parent, conAddable, adjustableSelection.addables[ia],\r\n (add, part2?, part1?) => this._createAddable(parent, add, part2, part1));\r\n }\r\n conAddable = this._placedAddables[this._placedAddables.length - 1];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _createUniqueName(parent: THREE.Object3D, obj: THREE.Object3D): string {\r\n let iteration = 0;\r\n let name = obj.name;\r\n let existingObj = parent.getObjectByName(name);\r\n while (existingObj) {\r\n iteration++;\r\n name = obj.name + (iteration !== 0 ? ('_' + iteration) : '');\r\n existingObj = parent.getObjectByName(name);\r\n }\r\n return name;\r\n }\r\n\r\n private async _getGoodIdFromSku(sku: string): Promise<number> {\r\n const response: DataServiceResponseData = await this._configuratorApi.getGoodIdFromSku(sku, false);\r\n if (response.validationResult.success && response.resultObject) {\r\n return response.resultObject;\r\n }\r\n }\r\n\r\n private async _getArticle(id: number): Promise<Article> {\r\n const articleResponse: DataServiceResponseData = await this._configuratorApi.getArticleQuickSel(id, false);\r\n if (articleResponse.validationResult.success && articleResponse.resultObject) {\r\n if (articleResponse.resultObject.hasOwnProperty('oArticle')) {\r\n const obj = Array.isArray(articleResponse.resultObject['oArticle']) ? articleResponse.resultObject['oArticle'][0] : articleResponse.resultObject['oArticle'];\r\n return <Article>this._boFactory.makeWithRawBackendData(Article, obj);\r\n } else {\r\n return <Article>this._boFactory.makeWithRawBackendData(Article, articleResponse.resultObject);\r\n }\r\n }\r\n }\r\n\r\n private async _getSelections(): Promise<void> {\r\n this._selections.length = 0;\r\n const selectionResponse: DataServiceResponseData = await this._configuratorApi.getSelections(false);\r\n if (selectionResponse.resultObjects && selectionResponse.resultObjects.length > 0) {\r\n this._selections = <Selection[]>this._boFactory.makeBOArrayFromRawBackendDataArray(Selection, selectionResponse.resultObjects);\r\n this.selectionsReceived.next(this._selections);\r\n } else {\r\n throw 'No selections found!';\r\n }\r\n }\r\n\r\n private async _getDecos(): Promise<void> {\r\n this._decos.length = 0;\r\n const decosResponse: DataServiceResponseData = await this._configuratorApi.getDecos(false);\r\n if (decosResponse.resultObjects && decosResponse.resultObjects.length > 0) {\r\n this._decos = <DecoNode[]>this._boFactory.makeBOArrayFromRawBackendDataArray(DecoNode, decosResponse.resultObjects);\r\n } else {\r\n throw 'No deconodes found!';\r\n }\r\n }\r\n\r\n private _linkSelectionsAndDecos(): void {\r\n const len: number = this._selections.length;\r\n for (let i = 0; i < len; i++) {\r\n let id: string = this._selections[i].artNodeIdDeco;\r\n // if (this._useNodeIdToLink) {\r\n // id = `${this._selections[i].node}_${this._selections[i].artNodeIdDeco}`;\r\n // }\r\n let deco: any = this._decos.find(d => d.id === id);\r\n if (!deco) {\r\n deco = new DecoNode();\r\n }\r\n const variation: any = this._getVariations().find(v => v.parentId === this._selections[i].artNodeIdDeco);\r\n if (variation) {\r\n deco.variation = variation;\r\n }\r\n this._selections[i].decoNode = deco;\r\n }\r\n }\r\n\r\n private _getVariations(): DecoNode[] {\r\n return this._decos.filter((deco: DecoNode) => {\r\n return deco.type === DecoNodeType.Variation;\r\n });\r\n }\r\n\r\n private async _loadVariations(obj: THREE.Object3D, instanceId: string): Promise<void> {\r\n await this._variationHelper.loadPart(obj, this._adjustables, true);\r\n await this._variationHelper.loadVariation(instanceId, obj, this._adjustables, true);\r\n await this._variationHelper.loadVariation(instanceId, obj, this._addables, true);\r\n }\r\n\r\n private _getAdjustables(): Selection[] {\r\n return this._selections.filter(s => {\r\n const node: DecoNode = s.decoNode;\r\n return node && node.gameObjectName && node.type === DecoNodeType.Part && node.kind === DecoNodeKind.Adjustable;\r\n });\r\n }\r\n\r\n private _updatePivot(obj: THREE.Object3D) {\r\n const boundingBox = new THREE.Box3().setFromObject(obj);\r\n const bbCenterPivot = new THREE.Vector3();\r\n boundingBox.getCenter(bbCenterPivot);\r\n const delta: THREE.Vector3 = new THREE.Vector3().sub(bbCenterPivot).setY(Math.abs(Math.min(boundingBox.min.y, 0)));\r\n\r\n obj.children.forEach((child: any) => {\r\n child.position.add(delta);\r\n });\r\n obj.updateWorldMatrix(false, true);\r\n }\r\n\r\n private _reset(): void {\r\n this._placedAddables.length = 0;\r\n this._placedAdjustables.length = 0;\r\n this._adjustables.length = 0;\r\n this._addables.length = 0;\r\n this._prepareTheSelections();\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["THREE.ObjectLoader","THREE.Camera","THREE.Group","THREE.TextureLoader","THREE.RepeatWrapping","THREE.Object3D","THREE.Mesh","THREE.Box3","THREE.Vector3","THREE.Vector2","THREE.Euler","THREE.Quaternion","THREE.Color","THREE.Texture","THREE.MeshPhongMaterial","THREE.MeshStandardMaterial"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"colijnit-configurator.js","sources":["ng://@colijnit/configurator/utils/object.utils.ts","ng://@colijnit/configurator/utils/file.utils.ts","ng://@colijnit/configurator/utils/threed.utils.ts","ng://@colijnit/configurator/utils/scene-utils.ts","ng://@colijnit/configurator/model/material.ts","ng://@colijnit/configurator/utils/image.utils.ts","ng://@colijnit/configurator/utils/asset.utils.ts","ng://@colijnit/configurator/model/variation.ts","ng://@colijnit/configurator/model/variation-settings.ts","ng://@colijnit/configurator/utils/variation-utils.ts","ng://@colijnit/configurator/helper/variation-helper.ts","ng://@colijnit/configurator/app/builder.ts","ng://@colijnit/configurator/app/components/answers/answers.component.ts","ng://@colijnit/configurator/app/components/answers/answers.module.ts","ng://@colijnit/configurator/app/components/selections/selections.component.ts","ng://@colijnit/configurator/app/components/selections/selections.module.ts","ng://@colijnit/configurator/colijnit-configurator.ts"],"sourcesContent":["import {Material, Mesh, Object3D} from \"three\";\r\n\r\nexport class ObjectUtils {\r\n static materialProps = ['map', 'lightMap', 'bumpMap', 'normalMap', 'specularMap', 'envMap', 'aoMap', 'roughnessMap', 'metalnessMap'];\r\n\r\n public static DisposeMaterial(material: Material | Material[]): void {\r\n if (!material) {\r\n return;\r\n }\r\n if (Array.isArray(material)) {\r\n material.forEach(mtrl => {\r\n this.materialProps\r\n .filter(mapType => mtrl[mapType])\r\n .forEach(mapType => mtrl[mapType].dispose());\r\n mtrl.dispose();\r\n });\r\n } else {\r\n this.materialProps\r\n .filter(mapType => material[mapType] && material[mapType].dispose)\r\n .forEach(mapType => material[mapType].dispose());\r\n if (material.dispose) {\r\n material.dispose();\r\n }\r\n }\r\n }\r\n\r\n public static DisposeObject(object: Object3D | Mesh): void {\r\n if (!object) {\r\n return;\r\n }\r\n if (object.children.length) {\r\n object.children.forEach(child => this.DisposeObject(child));\r\n }\r\n this.DisposeNode(object);\r\n }\r\n\r\n private static DisposeNode(node: Object3D | Mesh): void {\r\n node.traverse((obj: Object3D) => {\r\n if (obj instanceof Mesh) {\r\n if (obj.geometry) {\r\n obj.geometry.dispose();\r\n }\r\n this.DisposeMaterial(obj.material);\r\n }\r\n if (typeof (obj as any).dispose === 'function') {\r\n // @ts-ignore\r\n obj.dispose();\r\n }\r\n });\r\n }\r\n\r\n}\r\n","import axios from \"axios\";\n// Static utility functions holder related to files.\n// @dynamic\nexport class FileUtils {\n\n private static _cachedTextureUploads: Map<string, Object> = new Map();\n\n // Returns the given dataUri string stripped of the mimetype part.\n public static StripMimeStringFromDataUri(dataUri: string): string {\n if (!dataUri) {\n return '';\n }\n\n const mimeString: string = this.GetMimeStringFromDataUri(dataUri);\n return dataUri.substr(mimeString.length + 1);\n }\n\n public static GetMimeStringFromDataUri(dataUri: string): string {\n if (!dataUri) {\n return '';\n }\n\n return dataUri.split(',')[0];\n }\n\n public static async FileExists(url: string, assetPath: string): Promise<boolean> {\n const result = await axios({\n method: 'get',\n url: `${assetPath}getFiles.php?assetUrl=${url}`,\n responseType: \"json\"\n })\n return !!result.data;\n }\n\n /**\n * There is some discrepancy regarding locations of h3d objects\n * Therefor we need to (temporarily?!) fix the content url\n * Also we need to change some additionals\n */\n public static FixUrl(assetUrl: string): string {\n if (!assetUrl) {\n return '';\n }\n let fixedUrl: string = assetUrl;\n if (!fixedUrl.endsWith('glb') && !fixedUrl.endsWith('obj') && !fixedUrl.endsWith('glb.gz') && !fixedUrl.endsWith('obj.gz')) {\n fixedUrl = FileUtils.FixUnityUrl(fixedUrl);\n }\n fixedUrl = fixedUrl.replace('/content/', '/content43/');\n return fixedUrl;\n }\n\n public static FixGlbUrl(assetUrl: string): string {\n if (!assetUrl) {\n return '';\n }\n let fixedUrl: string = assetUrl;\n if (assetUrl.indexOf('_webplayer') === -1) {\n fixedUrl = assetUrl.concat('_webplayer');\n }\n fixedUrl = fixedUrl.replace('/content/', '/content43/');\n if (!fixedUrl.endsWith('.glb')) {\n fixedUrl = fixedUrl.concat('.glb');\n }\n return fixedUrl;\n }\n\n // Return the mimetype of the given filename.\n public static MimeTypeFromFilename(fileName: string): string {\n const regEx: RegExp = /(?:\\.([^.]+))?$/; // regex to find extension\n const extension: any = regEx.exec(fileName)[1];\n switch (extension) {\n case 'jpg':\n case 'jpeg':\n return 'image/jpeg';\n case 'png':\n return 'image/png';\n case 'bmp':\n return 'image/bmp';\n }\n }\n\n /**\n * Downloads the given file to the users default download location.\n * @param fileName With or without extension\n * @param content File content as a string\n * @param [mimeType = 'text/plain']\n */\n public static DownloadFile(\n fileName: string,\n content: string,\n mimeType: string = 'text/plain'\n ): void {\n const element: HTMLAnchorElement = document.createElement('a');\n element.setAttribute('href', 'data:' + mimeType + ';charset=utf-8,' + encodeURIComponent(content));\n element.setAttribute('download', fileName);\n\n element.style.display = 'none';\n document.body.appendChild(element);\n\n element.click();\n\n document.body.removeChild(element);\n }\n\n // Returns the contents of given file as a text string.\n public static ReadAsText(file: File): Promise<string> {\n return new Promise<string>((resolve: Function) => {\n const reader: FileReader = new FileReader();\n reader.readAsText(file);\n reader.onloadend = (event: any) => {\n if (event.target.readyState === 2) {\n resolve(event.target.result);\n }\n };\n });\n }\n\n public static GetExtensionFromDataUri(dataUri: string): string {\n return dataUri.replace(/(data:image\\/)(.*?)(;base64.*)/gi, '$2');\n }\n\n public static CreateDownloadFileNameFromBase64(dataUri: string): string {\n const ext: string = this.GetExtensionFromDataUri(dataUri);\n return 'preview.' + ext;\n }\n\n public static DownloadFromDataUri(dataUri: string, fileName: string): void {\n const link: any = document.createElement('a');\n link.download = fileName;\n link.href = dataUri;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n\n // todo remove once Connector deals with mimetypes and this method isn't used anymore\n public static DocumentBodyToDataUri(documentBody: string, mimeType: string): string {\n if (!!documentBody) {\n return 'data:' + mimeType + ';base64,' + documentBody;\n } else {\n return '';\n }\n }\n\n private static FixUnityUrl(url): string {\n if (url.indexOf('_webplayer') === -1) {\n url = url.concat('_webplayer.ione3d');\n } else {\n url = url.replace('_webplayer', '_webplayer.ione3d');\n }\n if (!url.endsWith('.gz')) {\n url = url.concat('.gz');\n }\n return url.replace('.unity3d', '');\n }\n}\n","import * as THREE from \"three\";\nimport {ObjectUtils} from \"./object.utils\";\nimport {FileUtils} from \"./file.utils\";\n\nexport class ThreedUtils {\n\n private _objectCache: Map<string, THREE.Object3D> = new Map();\n\n public clearCache(): void {\n const objs: THREE.Object3D[] = Array.from(this._objectCache.values());\n objs.forEach(o => ObjectUtils.DisposeObject(o));\n this._objectCache.clear();\n }\n\n public download3DSource(fileName: string): Promise<THREE.Object3D> {\n return new Promise(async (resolve: Function, reject: Function) => {\n fileName = fileName.replace('.unity3d', '');\n let lookupFileName: string = fileName + (fileName.indexOf('.glb') < 0 ? '.glb' : '');\n if (this._objectCache.has(lookupFileName)) {\n resolve(this._objectCache.get(lookupFileName));\n return;\n }\n if (await FileUtils.FileExists(lookupFileName, 'https://cdn1.colijn-it.nl/content43/')) {\n this.loadGlbSource(lookupFileName).then((obj: THREE.Object3D) => {\n this._objectCache.set(lookupFileName, obj);\n resolve(obj);\n });\n } else {\n reject(`GLB source not found! (${lookupFileName})`);\n }\n });\n }\n\n public readFileAsText(file: File): Promise<string> {\n const fileReader = new FileReader();\n return new Promise((resolve, reject) => {\n fileReader.onload = (e: any) => resolve(e.target.result);\n fileReader.onerror = error => reject(error);\n fileReader.readAsText(file);\n });\n }\n\n public async loadJsonModel(filePath: string): Promise<any> {\n if (this._objectCache.has(filePath)) {\n return Promise.resolve(this._objectCache.get(filePath));\n }\n const json: string = await this._readJsonFile(filePath);\n const loader = new THREE.ObjectLoader();\n loader.crossOrigin = 'Anonymous';\n return new Promise((resolve, reject) => {\n try {\n const obj = loader.parse(json);\n this._objectCache.set(filePath, obj);\n resolve(obj);\n } catch (e) {\n reject(null);\n }\n });\n }\n\n public async loadJsonObjectModel(filePath: string): Promise<any> {\n if (this._objectCache.has(filePath)) {\n return Promise.resolve(this._objectCache.get(filePath));\n }\n const loader = new THREE.ObjectLoader();\n loader.setCrossOrigin('Anonymous');\n loader.setResourcePath('');\n return new Promise((resolve, reject) => {\n loader.load(filePath,\n (object: any) => {\n const obj: THREE.Object3D = (object.type === 'Scene' && object.children[0].type === 'Object3D') ? object.children[0] : object;\n this._objectCache.set(filePath, obj);\n resolve(obj as THREE.Object3D);\n },\n xhr => null,\n error => reject(error)\n );\n });\n }\n\n public async loadGlbModel(file: string, cleanUp: boolean = true): Promise<THREE.Object3D> {\n if (this._objectCache.has(file)) {\n return Promise.resolve(this._objectCache.get(file));\n }\n if (!window.hasOwnProperty('loadGLTF')) {\n console.error('loadGLTF not defined in window global');\n return null;\n }\n // const loader = new GLTFLoader();\n const obj: THREE.Object3D = await (window as any).loadGLTF(file);\n if (obj) {\n this._cleanedUpObjects(obj, cleanUp);\n this._objectCache.set(file, obj);\n return obj;\n } else {\n return null;\n }\n }\n\n public async loadGlbSource(file: string): Promise<THREE.Object3D> {\n const obj = await this.loadGlbModel(file, false);\n if (obj) {\n obj.children = obj.children.filter(c => !(c instanceof THREE.Camera));\n obj.children.sort((a, b) => a['name'] < b['name'] ? 1 : -1);\n obj.children.forEach((c: THREE.Object3D) => {\n c.traverse((t: THREE.Object3D) => {\n t.visible = !t.name.toLowerCase().startsWith('c_');\n });\n c.visible = false;\n });\n if (obj.children.length === 1 && obj.children[0] instanceof THREE.Group) { // flatten children\n const children: any = obj.children[0].children.slice();\n obj.children.length = 0;\n obj.children = children;\n }\n }\n return obj;\n }\n\n public async textureFromUrl(url: string): Promise<any> {\n // url = this._includeBaseUrl(url);\n return new Promise((resolve, reject) => {\n const textureLoader = new THREE.TextureLoader();\n // textureLoader.setBaseU(this._settingsService.settings.assetPath);\n textureLoader.load(url,\n (texture: THREE.Texture) => {\n texture.wrapT = THREE.RepeatWrapping;\n texture.wrapS = THREE.RepeatWrapping;\n texture.repeat.set(1, 1);\n texture.needsUpdate = true;\n return resolve(texture);\n },\n null,\n reject\n );\n });\n }\n\n private _cleanedUpObjects(object: THREE.Object3D, cleanUp: boolean = true): THREE.Object3D {\n let obj: THREE.Object3D = new THREE.Object3D();\n object.children.forEach((c: THREE.Object3D) => {\n if (!(c instanceof THREE.Camera)) {\n if (cleanUp && c instanceof THREE.Group || (c.children.length === 1 && c.children[0] instanceof THREE.Group)) {\n this._addGroupChildrenToObject(c, obj);\n } else if ((cleanUp && !(c instanceof THREE.Mesh)) || (!(c instanceof THREE.Mesh) && !c.name && c.children.length > 0)) {\n c.children.forEach((child) => {\n child.translateY(c.position.y);\n });\n c.translateY(-c.position.y);\n if (obj.children.length > 0) {\n obj.add(c.clone());\n } else {\n obj = c.clone();\n }\n } else {\n // if (c.position.y > 0 || c.position.y < 0) {\n // c.children.forEach((child) => {\n // child.translateY(c.position.y);\n // });\n // c.translateY(-c.position.y);\n // }\n obj.add(c.clone());\n }\n }\n });\n const boundingBox = new THREE.Box3().setFromObject(obj);\n const bbCenterPivot = new THREE.Vector3();\n boundingBox.getCenter(bbCenterPivot);\n const delta: THREE.Vector3 = new THREE.Vector3().add(bbCenterPivot).negate();\n obj.children.forEach((cc) => {\n cc.position.add(delta);\n });\n return obj;\n }\n\n private _addGroupChildrenToObject(group: THREE.Object3D, obj: THREE.Object3D, cleanUp: boolean = true): void {\n group.children.forEach((gc: THREE.Object3D) => {\n if (cleanUp && gc instanceof THREE.Group) {\n this._addGroupChildrenToObject(gc, obj);\n } else {\n // gc.translateX(-group.position.x);\n gc.translateY(group.position.y);\n // gc.translateZ(-group.position.z);\n obj.add(gc.clone());\n }\n });\n }\n\n private _iterateChildren(children: THREE.Object3D[], callback: (child: THREE.Mesh) => {}): void {\n for (let i = 0; i < children.length; i++) {\n const child: THREE.Object3D = children[i];\n if (child instanceof THREE.Mesh) {\n callback(child);\n } else {\n this._iterateChildren(child.children, callback);\n }\n }\n }\n\n private async _readJsonFile(filePath: string): Promise<any> {\n try {\n const response = await fetch(filePath);\n if (!response.ok) {\n return '';\n } else {\n let empty = false;\n await response.clone().text().then((value) => {\n if (value === '') {\n empty = true;\n }\n });\n return empty ? {} : response.json();\n }\n } catch (e) {\n return '';\n }\n }\n\n}\n","import * as THREE from 'three';\r\n\r\nexport class SceneUtils {\r\n\r\n public static TrySelectorConnection(scene: THREE.Scene, parent: THREE.Object3D,\r\n part1: any, part2: any, createAddableFn?: Function): boolean {\r\n let addable: any;\r\n if (createAddableFn) {\r\n addable = part2;\r\n part2 = createAddableFn(addable);\r\n }\r\n for (let i = 0; i < part1.children.length; i++) {\r\n for (let ii = 0; ii < part2.children.length; ii++) {\r\n const con1: THREE.Object3D = part1.children[i];\r\n const con2: THREE.Object3D = part2.children[ii];\r\n // if these connectors can connect connect them\r\n if (!con1['connected'] && !con2['connected'] && this.CanSelectorConnect(con1, con2)) {\r\n // if addable, continue this loop with a new addable\r\n if (addable) {\r\n const newPart2: THREE.Object3D = createAddableFn(addable, part2, part1);\r\n // reference of part2 changed, so refresh con2\r\n this.SelectorConnect(scene, parent, con1, newPart2.children[ii]);\r\n } else {\r\n return this.SelectorConnect(scene, parent, con1, con2);\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n public static Convert3DPointToScreenPoint(point: THREE.Vector3, camera: THREE.Camera, width: number, height: number): THREE.Vector2 {\r\n if (!point) {\r\n return new THREE.Vector2();\r\n }\r\n const vector: THREE.Vector3 = point.clone().project(camera);\r\n vector.x = (vector.x + 1) / 2 * width;\r\n vector.y = -(vector.y - 1) / 2 * height;\r\n return new THREE.Vector2(vector.x, vector.y);\r\n }\r\n\r\n public static CanSelectorConnect(con1: THREE.Object3D | any, con2: THREE.Object3D | any): boolean {\r\n const con1Name: string = con1 instanceof THREE.Object3D ? con1.name : con1.connector;\r\n const con2Name: string = con2 instanceof THREE.Object3D ? con2.name : con2.connector;\r\n const sameParent: boolean = con1 instanceof THREE.Object3D && con2 instanceof THREE.Object3D ? con1.parent === con2.parent : false;\r\n const parts1: string[] = con1Name.toUpperCase().split('_'),\r\n parts2: string[] = con2Name.toUpperCase().split('_');\r\n if (parts1.length >= 3 && parts2.length >= 3 && !sameParent) {\r\n const connectable: boolean = parts1[0] === 'C' && parts2[0] === 'C' &&\r\n parts1[1] === parts2[1] && parts1[2] !== parts2[2];\r\n return connectable;\r\n }\r\n return false;\r\n }\r\n\r\n private static SelectorConnect(scene: THREE.Scene, parent: THREE.Object3D, con1: THREE.Object3D, con2: THREE.Object3D): boolean {\r\n if (!scene || !parent) {\r\n return false;\r\n }\r\n con1['connectedTo'] = con2.parent.name;\r\n con2['connectedTo'] = con1.parent.name;\r\n\r\n const motherRotation: THREE.Euler = new THREE.Euler(0, 0, 0);\r\n const motherPosition: THREE.Vector3 = new THREE.Vector3(0, 0, 0);\r\n\r\n scene.updateMatrixWorld(true);\r\n motherRotation.copy(parent.rotation);\r\n parent.getWorldPosition(motherPosition);\r\n\r\n parent.rotation.set(0, 0, 0);\r\n parent.position.set(0, 0, 0);\r\n\r\n const con1Quat: THREE.Quaternion = new THREE.Quaternion();\r\n con1.getWorldQuaternion(con1Quat);\r\n const con2Quat: THREE.Quaternion = new THREE.Quaternion();\r\n con2.getWorldQuaternion(con2Quat);\r\n const con1QuatParent: THREE.Quaternion = new THREE.Quaternion();\r\n con1.parent.getWorldQuaternion(con1QuatParent);\r\n const con2QuatParent: THREE.Quaternion = new THREE.Quaternion();\r\n con2.parent.getWorldQuaternion(con2QuatParent);\r\n\r\n const rotation: THREE.Quaternion = new THREE.Quaternion().multiplyQuaternions(\r\n con1Quat.invert(),\r\n con2Quat\r\n ).multiply(\r\n new THREE.Quaternion().multiplyQuaternions(\r\n con1QuatParent,\r\n con1QuatParent\r\n )\r\n );\r\n\r\n con2.parent.quaternion.copy(rotation);\r\n // Update because the matrix has been tempered with\r\n scene.updateMatrixWorld(true);\r\n\r\n // Move the connectors towards eachother\r\n const con1Pos: THREE.Vector3 = new THREE.Vector3();\r\n con1.getWorldPosition(con1Pos);\r\n const con2Pos: THREE.Vector3 = new THREE.Vector3();\r\n con2.getWorldPosition(con2Pos);\r\n\r\n const move: THREE.Vector3 = con1Pos.sub(con2Pos);\r\n con2.parent.position.x += move.x;\r\n con2.parent.position.y += move.y;\r\n con2.parent.position.z += move.z;\r\n\r\n // reset parent's objects rotation and position\r\n parent.rotation.copy(motherRotation);\r\n parent.position.copy(motherPosition);\r\n\r\n scene.updateMatrixWorld(true);\r\n\r\n // Set the connected flag\r\n con1['connected'] = true;\r\n con2['connected'] = true;\r\n return true;\r\n }\r\n\r\n}\r\n","import * as THREE from 'three';\n\nexport class Material {\n\n public name: string;\n public schema: string;\n public specular: THREE.Color = new THREE.Color(0.3, 0.3, 0.3);\n public shininess = 0;\n // public roughness = 1;\n // public metalness = 0.5;\n public normal: THREE.Texture;\n public texture: THREE.Texture;\n public ao: THREE.Texture;\n public metalness: THREE.Texture;\n public roughness: THREE.Texture;\n public repeatX = 4;\n public repeatY = 4;\n public loaded = false;\n public metalnessValue: number;\n public roughnessValue: number;\n\n}\n","import * as THREE from 'three';\nimport {Material} from '../model/material';\n// @dynamic\nexport class ImageUtils {\n\n public static textures: Map<string, THREE.Texture> = new Map();\n\n public static CreateTextureFromBase64(id: string, base64: string, material: Material): Promise<THREE.Texture> {\n return new Promise<THREE.Texture>((resolve) => {\n if (ImageUtils.textures.has(id)) {\n resolve(ImageUtils.textures.get(id));\n } else {\n if (!base64) {\n resolve(new THREE.Texture());\n } else {\n const loader: THREE.TextureLoader = new THREE.TextureLoader();\n loader.load(base64, (texture: THREE.Texture) => {\n texture.anisotropy = 16;\n texture.wrapS = THREE.RepeatWrapping;\n texture.wrapT = THREE.RepeatWrapping;\n texture.repeat = new THREE.Vector2(material ? material.repeatX : 1, material ? material.repeatY : 1);\n texture.needsUpdate = true;\n ImageUtils.textures.set(id, texture);\n resolve(texture);\n });\n }\n }\n });\n }\n\n}\n","import {Material} from '../model/material';\nimport {ImageUtils} from './image.utils';\nimport * as THREE from 'three';\nimport {sRGBEncoding} from 'three';\nimport {VariationSettings} from '../model/variation-settings';\n\nexport class FurnitureMaterial extends Material {\n\n public textureFilename?: string;\n public normalFilename?: string;\n public aoFilename?: string;\n public metalnessFilename?: string;\n public roughnessFilename?: string;\n\n}\n\nexport class AssetUtils {\n\n public static async CreateMaterialFromAsset(asset: VariationSettings): Promise<Material> {\n const material: FurnitureMaterial = new Material();\n if (!asset) {\n return material;\n }\n if (asset.settings) {\n AssetUtils.setSettingsOfMaterial(material, asset.settings);\n }\n if (asset.texture) {\n material.texture = await ImageUtils.CreateTextureFromBase64(asset.id + '_texture', asset.texture, material);\n material.texture.encoding = sRGBEncoding;\n\n material.textureFilename = asset.textureFilename;\n }\n if (asset.normal) {\n material.normal = await ImageUtils.CreateTextureFromBase64(asset.id + '_normal', asset.normal, material);\n material.normalFilename = asset.normalFilename;\n // material.normal.anisotropy = 1;\n // material.normal.repeat.set(1, 1);\n // material.normal.flipY = false;\n }\n if (asset.ao) {\n material.ao = await ImageUtils.CreateTextureFromBase64(asset.id + '_ao', asset.ao, material);\n material.aoFilename = asset.aoFilename;\n }\n if (asset.metalness) {\n material.metalness = await ImageUtils.CreateTextureFromBase64(asset.id + '_metalness', asset.metalness, material);\n material.metalnessFilename = asset.metalnessFilename;\n }\n if (asset.roughness) {\n material.roughness = await ImageUtils.CreateTextureFromBase64(asset.id + '_roughness', asset.roughness, material);\n material.roughnessFilename = asset.roughnessFilename;\n }\n return material;\n }\n\n public static setSettingsOfMaterial(material: Material, settings: any): void {\n const shininess = parseFloat(settings['power']);\n if (!isNaN(shininess)) {\n material.shininess = shininess;\n // material.roughness = 1 - (shininess / 100);\n }\n\n const level = parseFloat(settings['level']);\n if (!isNaN(level)) {\n material.specular = new THREE.Color(level, level, level);\n }\n\n const repeatObjectUsed: boolean = settings.hasOwnProperty('repeat');\n const repeatx = repeatObjectUsed ? parseFloat(settings['repeat']['repeatx']) : parseFloat(settings['repeatx']);\n if (!isNaN(repeatx)) {\n material.repeatX = Math.max(1, repeatx);\n }\n\n const repeaty = repeatObjectUsed ? parseFloat(settings['repeat']['repeaty']) : parseFloat(settings['repeaty']);\n if (!isNaN(repeaty)) {\n material.repeatY = Math.max(1, repeaty);\n }\n\n const metalness = parseFloat(settings['metalness']);\n if (!isNaN(metalness)) {\n material.metalnessValue = Math.min(1, metalness);\n }\n\n const roughness = parseFloat(settings['roughness']);\n if (!isNaN(roughness)) {\n material.roughnessValue = Math.min(1, roughness);\n }\n }\n}\n","import {Material} from './material';\n\nexport class Variation {\n public decoId: number;\n public brandId: string;\n public gameObjectName: string;\n public node: any;\n public supplierArticleNr: string;\n public materialId: string;\n public material: Material;\n}\n","export class VariationSettings {\n public id: string;\n public settings: any = {};\n public texture: string;\n public textureFilename: string;\n public normal: string;\n public normalFilename: string;\n public ao: string;\n public aoFilename: string;\n public metalness: string;\n public metalnessFilename: string;\n public roughness: string;\n public roughnessFilename: string;\n}\n","import * as JSZip from 'jszip';\r\nimport * as THREE from 'three';\r\nimport {FileUtils} from \"./file.utils\";\r\nimport {VariationSettings} from \"../model/variation-settings\";\r\nimport axios from \"axios\";\r\n\r\n// @dynamic\r\nexport class VariationUtils {\r\n private static MaterialCache: Map<string, THREE.MeshStandardMaterial> = new Map();\r\n\r\n public static async LoadVariation(assetPath: string, fileName: string): Promise<VariationSettings> {\r\n if (!fileName) {\r\n return null;\r\n }\r\n if (fileName.indexOf('ione3d') < 0) {\r\n fileName = fileName.concat('.ione3d');\r\n }\r\n const id: string = fileName.substr(0, fileName.lastIndexOf('.ione3d'));\r\n try {\r\n if (!assetPath.endsWith('/')) {\r\n assetPath += '/';\r\n }\r\n if (!window.hasOwnProperty('downloadVariation')) {\r\n console.error('downloadVariation not defined in window global');\r\n return null;\r\n }\r\n const file: any = await (window as any).downloadVariation(`${assetPath.replace('https://cdn1.colijn-it.nl/', '')}variation/${fileName}`);\r\n return await VariationUtils.GetVariationSettingsFromFile(id, file);\r\n } catch (err) {\r\n const mute = err;\r\n return null;\r\n }\r\n }\r\n\r\n // public static GetMaterialFromName(variationFolder: string, material: any): Promise<MeshStandardMaterial> {\r\n // return new Promise((resolve: Function) => {\r\n // if (!material) {\r\n // resolve(null);\r\n // }\r\n // if (this.MaterialCache.has(material.name)) {\r\n // resolve(this.MaterialCache.get(material.name).clone());\r\n // } else {\r\n // VariationUtils.LoadVariation(variationFolder, material.name, false).then((settings: VariationSettings) => {\r\n // if (settings) {\r\n // AssetUtils.CreateMaterialFromAsset(settings).then((materialObj: Material) => {\r\n // const materialParams: MeshStandardMaterialParameters = {};\r\n // materialParams.name = material.name;\r\n // materialParams.map = materialObj.texture;\r\n // materialParams.normalMap = materialObj.normal;\r\n // materialParams.aoMap = materialObj.ao;\r\n // materialParams.roughnessMap = materialObj.roughness;\r\n // materialParams.metalnessMap = materialObj.metalness;\r\n // materialParams.roughness = 1;\r\n // materialParams.metalness = 1;\r\n // const pbrMat: MeshStandardMaterial = new MeshStandardMaterial(materialParams);\r\n // this.MaterialCache.set(material.name, pbrMat);\r\n // resolve(pbrMat.clone());\r\n // });\r\n // } else {\r\n // resolve(material);\r\n // }\r\n // });\r\n // }\r\n // });\r\n // }\r\n\r\n private static async GetVariationSettingsFromFile(id: string, compressedFile: any): Promise<VariationSettings> {\r\n if (!compressedFile) {\r\n return null;\r\n }\r\n const zipContent = await VariationUtils.GetZipContent(compressedFile);\r\n const variationSettings: VariationSettings = new VariationSettings();\r\n let index;\r\n variationSettings.id = id;\r\n\r\n if (zipContent.files['index.json']) {\r\n const indexFile: string = await zipContent.files['index.json'].async('string');\r\n index = JSON.parse(indexFile);\r\n }\r\n if (index) {\r\n await VariationUtils.CreateSettingsBasedOnIndex(index, variationSettings, zipContent);\r\n } else {\r\n await VariationUtils.CreateSettingsBasedOnFileName(variationSettings, zipContent);\r\n }\r\n return variationSettings;\r\n }\r\n\r\n private static async CreateSettingsBasedOnIndex(index: any, variationSettings: VariationSettings, zipContent: any): Promise<void> {\r\n if (index.normalFile) {\r\n variationSettings.normal = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.normalFile], index.normalFile);\r\n variationSettings.normalFilename = index.normalFile;\r\n }\r\n if (index.aoFile) {\r\n variationSettings.ao = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.aoFile], index.aoFile);\r\n variationSettings.aoFilename = index.aoFile;\r\n }\r\n if (index.metalnessFile) {\r\n variationSettings.metalness = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.metalnessFile], index.metalnessFile);\r\n variationSettings.metalnessFilename = index.metalnessFile;\r\n }\r\n if (index.roughnessFile) {\r\n variationSettings.roughness = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.roughnessFile], index.roughnessFile);\r\n variationSettings.roughnessFilename = index.roughnessFile;\r\n }\r\n if (index.diffuseFile) {\r\n variationSettings.texture = await VariationUtils.LoadFileContentFromZip(zipContent.files[index.diffuseFile], index.diffuseFile);\r\n variationSettings.textureFilename = index.diffuseFile;\r\n }\r\n variationSettings.settings =\r\n await VariationUtils.LoadFileContentFromZip(zipContent.files['repeat.json'], 'repeat.json', false) || {};\r\n Object.assign(variationSettings.settings, index.repeat);\r\n variationSettings.settings.metalness = index.metalness;\r\n variationSettings.settings.roughness = index.roughness;\r\n }\r\n\r\n private static async CreateSettingsBasedOnFileName(variationSettings: VariationSettings, zipContent: any): Promise<void> {\r\n const allLoaded: Promise<VariationSettings>[] = [];\r\n for (const fileName in zipContent.files) {\r\n if (zipContent.files[fileName]) {\r\n const file: any = await zipContent.files[fileName];\r\n if (file.name.toLowerCase().indexOf('normal') > -1 && this.FileIsImage(file.name)) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((normalFile: any) => {\r\n variationSettings.normal = `data:image/${this.GetBase64FileType(file.name)};base64,${normalFile}`;\r\n variationSettings.normalFilename = fileName;\r\n }));\r\n } else if (file.name.toLowerCase().indexOf('ao') > -1 && this.FileIsImage(file.name)) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((aoFile: any) => {\r\n variationSettings.ao = `data:image/${this.GetBase64FileType(file.name)};base64,${aoFile}`;\r\n variationSettings.aoFilename = fileName;\r\n }));\r\n } else if (file.name.toLowerCase().indexOf('metalness') > -1 && this.FileIsImage(file.name)) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((metalnessFile: any) => {\r\n variationSettings.metalness = `data:image/${this.GetBase64FileType(file.name)};base64,${metalnessFile}`;\r\n variationSettings.metalnessFilename = fileName;\r\n }));\r\n } else if (file.name.toLowerCase().indexOf('roughness') > -1 && this.FileIsImage(file.name)) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((roughnessFile: any) => {\r\n variationSettings.roughness = `data:image/${this.GetBase64FileType(file.name)};base64,${roughnessFile}`;\r\n variationSettings.roughnessFilename = fileName;\r\n }));\r\n } else if (file.name.toLowerCase().indexOf('diffuse') > -1 && this.FileIsImage(file.name)) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((diffuseFile: any) => {\r\n variationSettings.texture = `data:image/${this.GetBase64FileType(file.name)};base64,${diffuseFile}`;\r\n variationSettings.textureFilename = fileName;\r\n }));\r\n } else if (file.name.indexOf('.jp') > -1) {\r\n allLoaded.push(zipContent.files[fileName].async('base64').then((textureFile: any) => {\r\n variationSettings.texture = 'data:image/jpeg;base64,' + textureFile;\r\n variationSettings.textureFilename = fileName;\r\n }));\r\n } else if (file.name.indexOf('.json') > -1) {\r\n allLoaded.push(zipContent.files[fileName].async('string').then((settingsFile: any) => {\r\n const settingsFileObj = JSON.parse(settingsFile);\r\n for (const key in settingsFileObj) {\r\n if (settingsFileObj[key]) {\r\n variationSettings.settings[key] = settingsFileObj[key];\r\n }\r\n }\r\n }));\r\n }\r\n }\r\n }\r\n await Promise.all(allLoaded);\r\n }\r\n\r\n private static LoadFileContentFromZip(zip: any, fileName: string, base64: boolean = true): Promise<string> {\r\n return new Promise((resolve: Function) => {\r\n if (zip && fileName) {\r\n zip.async(base64 ? 'base64' : 'string').then((fileContent: any) => {\r\n if (base64) {\r\n resolve(`data:image/${this.GetBase64FileType(fileName)};base64,${fileContent}`);\r\n } else {\r\n resolve(fileContent);\r\n }\r\n });\r\n } else {\r\n resolve(undefined);\r\n }\r\n });\r\n }\r\n\r\n private static FileIsImage(fileName: string): boolean {\r\n const ext: string = fileName.substring(fileName.lastIndexOf('.') + 1, fileName.length).toLowerCase();\r\n switch (ext) {\r\n case 'jpg':\r\n case 'jpeg':\r\n case 'png':\r\n case 'bmp':\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n private static GetBase64FileType(fileName: string): string {\r\n const ext: string = fileName.substring(fileName.lastIndexOf('.') + 1, fileName.length).toLowerCase();\r\n switch (ext) {\r\n case 'jpg':\r\n case 'jpeg':\r\n return 'jpeg';\r\n case 'png':\r\n return 'png';\r\n case 'bmp':\r\n return 'bmp';\r\n default:\r\n return 'jpeg';\r\n }\r\n }\r\n\r\n // Get the content\r\n private static async GetZipContent(file): Promise<any> {\r\n const jszip = new JSZip();\r\n const content = await jszip.loadAsync(file);\r\n return content;\r\n }\r\n}\r\n","import {DecoNodeType} from \"@colijnit/configuratorapi/build/src/enum/deco-node-type.enum\";\r\nimport {VariationSettings} from \"../model/variation-settings\";\r\nimport {AssetUtils} from \"../utils/asset.utils\";\r\nimport {DecoNode} from \"@colijnit/configuratorapi/build/src/model/deco-node\";\r\nimport {Variation} from \"../model/variation\";\r\nimport * as THREE from \"three\";\r\nimport {VariationUtils} from \"../utils/variation-utils\";\r\n\r\nexport class VariationHelper {\r\n\r\n public assetPath: string;\r\n\r\n private _lastKnownVariations: Map<string, Map<string, Variation[]>> = new Map();\r\n\r\n public clearCache(): void {\r\n const valueMap: Map<string, Variation[]>[] = Array.from(this._lastKnownVariations.values());\r\n for (let i = 0; i < valueMap.length; i++) {\r\n const values = Array.from(valueMap[i].values());\r\n values.forEach((variations) => {\r\n variations.forEach((variation) => {\r\n variation.material.texture.dispose();\r\n variation.material.normal.dispose();\r\n variation.material.metalness.dispose();\r\n variation.material.roughness.dispose();\r\n variation.material.ao.dispose();\r\n })\r\n });\r\n }\r\n }\r\n\r\n public async loadPart(obj: THREE.Object3D, parts: any[], usePbr: boolean = false): Promise<void> {\r\n try {\r\n const len: number = parts.length;\r\n for (let i = 0; i < len; i++) {\r\n if (parts[i].decoNode && parts[i].decoNode.gameObjectName && parts[i].decoNode.type === DecoNodeType.Part) {\r\n const partSettings: VariationSettings =\r\n await VariationUtils.LoadVariation(this.assetPath, parts[i].decoNode.gameObjectName || parts[i].decoId);\r\n if (partSettings) {\r\n const partVariation: Variation = new Variation();\r\n partVariation.decoId = parseFloat(parts[i].decoNode.id);\r\n partVariation.brandId = parts[i].decoNode.brandId;\r\n partVariation.gameObjectName = parts[i].decoNode.gameObjectName;\r\n partVariation.material = await AssetUtils.CreateMaterialFromAsset(partSettings);\r\n // parts[i].variation = partVariation;\r\n this._applyMaterialPart(obj, partVariation, parts[i].node, usePbr);\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n public async loadVariation(instanceId: string, obj: THREE.Object3D, parts: any[], usePbr: boolean = false): Promise<void> {\r\n try {\r\n const len: number = parts.length;\r\n for (let i = 0; i < len; i++) {\r\n const variations: DecoNode[] = parts[i].variations;\r\n if (!variations || variations.length === 0) {\r\n if (this._getLastKnownVariations(instanceId, parts[i].nodeId)) {\r\n parts[i].variations = this._getLastKnownVariations(instanceId, parts[i].nodeId);\r\n this._applyVariations(obj, parts[i], usePbr);\r\n continue;\r\n } else {\r\n continue;\r\n }\r\n }\r\n const lastKnownVariations: Variation[] = [];\r\n for (let j = 0; j < variations.length; j++) {\r\n const variationSettings: VariationSettings =\r\n await VariationUtils.LoadVariation(this.assetPath, variations[j].gameObjectName || parts[i].decoId);\r\n const newVariation: Variation = new Variation();\r\n newVariation.decoId = parseFloat(variations[j].id);\r\n newVariation.brandId = variations[j].brandId;\r\n newVariation.gameObjectName = variations[j].gameObjectName;\r\n newVariation.supplierArticleNr = (variations[j] as any).supplierArticleNr;\r\n newVariation.materialId = (variations[j] as any).materialId;\r\n newVariation.material = await AssetUtils.CreateMaterialFromAsset(variationSettings);\r\n lastKnownVariations.push(newVariation);\r\n }\r\n this._setLastKnownVariations(instanceId, parts[i].nodeId, lastKnownVariations);\r\n parts[i].variations = lastKnownVariations;\r\n this._applyVariations(obj, parts[i], usePbr);\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n private _getChildrenFilterByProp(obj: THREE.Object3D, userDataObjectProp: string, prop: string, value: any): THREE.Object3D[] {\r\n return obj.children.filter((child) => {\r\n return child.userData &&\r\n child.userData.hasOwnProperty(userDataObjectProp) &&\r\n child.userData[userDataObjectProp].hasOwnProperty(prop) &&\r\n child.userData[userDataObjectProp][prop] === value;\r\n });\r\n }\r\n\r\n private _applyMaterialPart(obj: THREE.Object3D, partMaterial: any, nodeId: any, usePbr: boolean = false): void {\r\n const children = this._getChildrenFilterByProp(obj, 'selection', 'node', nodeId);\r\n const len: number = children.length;\r\n for (let i: number = 0; i < len; i++) {\r\n const child = children[i];\r\n if (child !== null && child !== undefined) {\r\n child.traverse((mesh) => {\r\n if (mesh instanceof THREE.Mesh && partMaterial) {\r\n if (Array.isArray(mesh.material)) { // multimaterial support\r\n for (let j = 0, jlen: number = mesh.material.length; j < jlen; j++) {\r\n if (mesh.material[j].name.toLowerCase().indexOf('fixed_frame') !== -1) {\r\n mesh.material[j] = this._setMeshMaterialFromVariation(mesh.material[j].name, partMaterial, usePbr);\r\n }\r\n }\r\n } else {\r\n if (mesh.material.name.toLowerCase().indexOf('fixed_frame') !== -1) {\r\n mesh.material = this._setMeshMaterialFromVariation(mesh.material.name, partMaterial, usePbr);\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n private _applyVariations(obj: THREE.Object3D, part: any, usePbr: boolean = false): void {\r\n const children = this._getChildrenFilterByProp(obj, 'selection', 'node', part.node);\r\n const len: number = children.length;\r\n for (let i: number = 0; i < len; i++) {\r\n const child = children[i];\r\n if (child !== null && child !== undefined) {\r\n child.traverse((mesh) => {\r\n if (mesh instanceof THREE.Mesh && part.variations && part.variations.length > 0 && mesh.name.toLowerCase().indexOf('c_')) {\r\n for (let j = 0; j < part.variations.length; j++) {\r\n const variation: Variation = part.variations[j];\r\n if (variation.material) {\r\n const materialToSearch: string = !!variation.materialId ? variation.materialId.toLowerCase() : 'default';\r\n if (Array.isArray(mesh.material)) { // multimaterial support\r\n for (let m = 0, mlen: number = mesh.material.length; m < mlen; m++) {\r\n if (mesh.material[m].name.toLowerCase().indexOf(materialToSearch) !== -1) {\r\n mesh.material[m] = this._setMeshMaterialFromVariation(mesh.material[m].name, variation, usePbr);\r\n }\r\n }\r\n } else {\r\n if (mesh.material.name.toLowerCase().indexOf(materialToSearch) !== -1) {\r\n mesh.material = this._setMeshMaterialFromVariation(mesh.material.name, variation, usePbr);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n private _setMeshMaterialFromVariation(name: string, variation: Variation, usePbr: boolean = false): THREE.Material {\r\n if (variation.material.texture) {\r\n variation.material.texture.needsUpdate = true;\r\n }\r\n if (!usePbr) {\r\n const material: THREE.MeshPhongMaterial = new THREE.MeshPhongMaterial({\r\n name: name,\r\n shininess: variation.material.shininess,\r\n specular: variation.material.specular,\r\n map: variation.material.texture,\r\n normalMap: variation.material.normal\r\n });\r\n // material.color.setRGB(0.8, 0.8, 0.8);\r\n material.needsUpdate = true;\r\n return material;\r\n } else {\r\n const params: THREE.MeshStandardMaterialParameters = {\r\n // side: DoubleSide,\r\n name: name,\r\n roughness: variation.material.roughnessValue ? variation.material.roughnessValue : 1,\r\n metalness: variation.material.metalnessValue ? variation.material.metalnessValue : 0,\r\n // wireframe: true\r\n };\r\n if (variation.material.texture) {\r\n params.map = variation.material.texture;\r\n }\r\n if (variation.material.ao) {\r\n params.aoMap = variation.material.ao;\r\n }\r\n if (variation.material.roughness) {\r\n params.roughnessMap = variation.material.roughness;\r\n }\r\n if (variation.material.metalness) {\r\n params.metalnessMap = variation.material.metalness;\r\n }\r\n if (variation.material.normal) {\r\n params.normalMap = variation.material.normal;\r\n }\r\n const material: THREE.MeshStandardMaterial = new THREE.MeshStandardMaterial(params);\r\n material.color.setRGB(1, 1, 1);\r\n material.needsUpdate = true;\r\n return material;\r\n }\r\n }\r\n\r\n private _setLastKnownVariations(instanceId: string, id: string, variation: Variation[]): void {\r\n if (this._lastKnownVariations.has(instanceId)) {\r\n const variations = this._lastKnownVariations.get(instanceId);\r\n variations.set(id, variation);\r\n } else {\r\n const variations: Map<string, Variation[]> = new Map();\r\n this._lastKnownVariations.set(instanceId, variations.set(id, variation));\r\n }\r\n }\r\n\r\n private _getLastKnownVariations(instanceId: string, id: string): Variation[] {\r\n if (this._lastKnownVariations.has(instanceId)) {\r\n const variations = this._lastKnownVariations.get(instanceId);\r\n if (variations.has(id)) {\r\n return variations.get(id);\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n}\r\n","import * as THREE from \"three\";\r\nimport {Configurator} from \"@colijnit/configuratorapi/build/src/configurator\";\r\nimport {Options} from \"@colijnit/configuratorapi/build/src/model/options\";\r\nimport {DataServiceResponseData} from \"@colijnit/configuratorapi/build/src/model/data-service-response-data\";\r\nimport {DecoNode} from \"@colijnit/configuratorapi/build/src/model/deco-node\";\r\nimport {BusinessObjectFactory} from \"@colijnit/configuratorapi/build/src/service/business-object-factory\";\r\nimport {Selection} from \"@colijnit/configuratorapi/build/src/model/selection\";\r\nimport {DecoNodeType} from \"@colijnit/configuratorapi/build/src/enum/deco-node-type.enum\";\r\nimport {ThreedUtils} from \"../utils/threed.utils\";\r\nimport {DecoNodeKind} from \"@colijnit/configuratorapi/build/src/enum/deco-node-kind.enum\";\r\nimport {SceneUtils} from \"../utils/scene-utils\";\r\nimport {VariationHelper} from \"../helper/variation-helper\";\r\nimport {Article} from \"@colijnit/configuratorapi/build/src/model/article\";\r\nimport {BehaviorSubject, Subscription} from \"rxjs\";\r\nimport {Answer} from \"@colijnit/configuratorapi/build/src/model/answer\";\r\nimport {Question} from \"@colijnit/configuratorapi/build/src/model/question\";\r\n\r\nexport class Builder {\r\n\r\n public selectionsReceived: BehaviorSubject<Selection[]> = new BehaviorSubject<Selection[]>([]);\r\n public answersReceived: BehaviorSubject<Answer[]> = new BehaviorSubject<Answer[]>([]);\r\n public questionReceived: BehaviorSubject<Question> = new BehaviorSubject<Question>(undefined);\r\n\r\n private _configuratorApi: Configurator;\r\n private _scene: THREE.Scene;\r\n private _selections: Selection[] = [];\r\n private _decos: DecoNode[] = [];\r\n private _placedAdjustables: any[] = [];\r\n private _placedAddables: any[] = [];\r\n private _adjustables: any[] = [];\r\n private _addables: any[] = [];\r\n\r\n private _boFactory: BusinessObjectFactory;\r\n private _source: THREE.Object3D;\r\n private _threedUtils: ThreedUtils;\r\n private _variationHelper: VariationHelper;\r\n private _articleCache: Map<string, Article> = new Map();\r\n private _subs: Subscription[] = [];\r\n\r\n constructor(scene: THREE.Scene, options: Options) {\r\n if (!scene) {\r\n throw 'No scene object provided!';\r\n }\r\n if (!options) {\r\n throw 'No connection options provided!';\r\n }\r\n this._scene = scene;\r\n this._configuratorApi = new Configurator(options);\r\n this._boFactory = new BusinessObjectFactory();\r\n this._threedUtils = new ThreedUtils();\r\n this._variationHelper = new VariationHelper();\r\n this._subs.push(\r\n this._configuratorApi.selectionsReceived.subscribe(selections => this.selectionsReceived.next(selections)),\r\n this._configuratorApi.answersReceived.subscribe(answers => this.answersReceived.next(answers)),\r\n this._configuratorApi.questionReceived.subscribe(question => this.questionReceived.next(question))\r\n );\r\n }\r\n\r\n public async buildModel(instanceId: string, sku: string, goodId?: number): Promise<THREE.Object3D> {\r\n if (!this._scene && !instanceId) {\r\n return;\r\n }\r\n try {\r\n await this._prepareConfiguration(sku, goodId);\r\n if (this._source) {\r\n await this._configuratorApi.setInstanceToConfigure(instanceId);\r\n const promises: Promise<any>[] = [];\r\n promises.push(this._getSelections(instanceId));\r\n promises.push(this._getDecos());\r\n await Promise.all(promises);\r\n this._linkSelectionsAndDecos();\r\n return this._build(instanceId);\r\n } else {\r\n throw 'GLB source not found!';\r\n }\r\n } catch (e) {\r\n throw e;\r\n }\r\n }\r\n\r\n public initNodeInstance(goodId: number): Promise<any> {\r\n return this._configuratorApi.initNodeInstance(goodId);\r\n }\r\n\r\n public destroy(): void {\r\n this._threedUtils.clearCache();\r\n this._variationHelper.clearCache();\r\n }\r\n\r\n public selectSelection(selection: Selection): void {\r\n this._configuratorApi.selectSelection(selection, false);\r\n }\r\n\r\n public async getQuestionAndAnswers(): Promise<void> {\r\n return this._configuratorApi.getQuestionAndAnswers(false);\r\n }\r\n\r\n public selectAnswer(answer: Answer): void {\r\n this._configuratorApi.selectAnswer(answer, false);\r\n }\r\n\r\n private async _prepareConfiguration(sku: string, goodId?: number): Promise<void> {\r\n const article: Article = await this._getArticle(sku, goodId);\r\n if (article && article.assetUrl) {\r\n this._source = await this._threedUtils.download3DSource(article.assetUrl)\r\n .catch((error) => {\r\n throw error;\r\n });\r\n if (article.contentDeliveryUrl) {\r\n this._variationHelper.assetPath =\r\n article.contentDeliveryUrl +\r\n (article.contentDeliveryUrl.endsWith('/') ? '' : '/') +\r\n (article.distSchema ? article.distSchema : 'UP_DBA');\r\n }\r\n }\r\n }\r\n\r\n private async _build(instanceId: string): Promise<THREE.Object3D> {\r\n this._reset();\r\n const adjustables: Selection[] = this._getAdjustables();\r\n if (adjustables && adjustables.length > 0) {\r\n const obj: THREE.Object3D = new THREE.Object3D();\r\n obj.visible = false; // no need to render visualy\r\n this._scene.add(obj);\r\n let connected = false;\r\n for (let i = 0, len: number = adjustables.length; i < len; i++) {\r\n const adjustable: THREE.Object3D = this._createAdjustable(obj, adjustables[i]);\r\n if (adjustable) {\r\n for (let ii = 0, lenii: number = this._placedAdjustables.length; ii < lenii; ii++) {\r\n if (SceneUtils.TrySelectorConnection(this._scene,\r\n obj, this._placedAdjustables[ii], adjustable)) {\r\n this._placedAdjustables[ii].visible = true;\r\n adjustable.visible = true;\r\n connected = true;\r\n break;\r\n }\r\n connected = false;\r\n }\r\n }\r\n if (!connected && this._placedAdjustables.length > 1) {\r\n console.warn('No connection found for: ', adjustable.name);\r\n }\r\n }\r\n this._placeAddables(obj);\r\n this._updatePivot(obj);\r\n await this._loadVariations(obj, instanceId);\r\n this._scene.remove(obj);\r\n return obj;\r\n } else {\r\n throw 'No adjustables found!';\r\n // this._building = false;\r\n // if (this.selections.length < 2) {\r\n // this._errorService.addError(this.activeInstance, {message: 'NO_SELECTIONS_OR_DECOS', description: 'NO_SELECTIONS_OR_DECOS_INFO'});\r\n // this.buildFinished.next({instanceId: this.activeInstance, resultType: ResultType.NoSelections});\r\n // } else if (this.decos.size === 0) {\r\n // this._errorService.addError(this.activeInstance, {message: 'NO_SELECTIONS_OR_DECOS', description: 'NO_SELECTIONS_OR_DECOS_INFO'});\r\n // this.buildFinished.next({instanceId: this.activeInstance, resultType: ResultType.NoDecoNodes});\r\n // } else {\r\n // this._errorService.addError(this.activeInstance, {message: 'NO_ADJUSTABLES', description: 'NO_ADJUSTABLES_INFO'});\r\n // this.buildFinished.next({instanceId: this.activeInstance, resultType: ResultType.NoAdjustables});\r\n // }\r\n }\r\n }\r\n\r\n private _prepareTheSelections(): void {\r\n // get generic variations\r\n const globalVariations: DecoNode[] = this._selections\r\n .filter(s => s.generic && (s.decoNode as any).variation && !s.decoNode.type)\r\n .map((value: Selection, index: number, array: Selection[]) => {\r\n // find selection of variation\r\n const sel: Selection = this._selections.find(s => s.artNodeIdDeco === (value.decoNode as any).variation.id);\r\n if (sel) {\r\n (value.decoNode as any).variation.supplierArticleNr = sel.supplierArticleNr;\r\n }\r\n (value.decoNode as any).variation.materialId = value.hdecoGameObject;\r\n return (value.decoNode as any).variation;\r\n });\r\n\r\n // const usedVariations: FurniturePartVariation[] = [];\r\n let globalVariationsRewrite: boolean = true;\r\n\r\n const len: number = this._selections.length;\r\n let lastAdded: Selection;\r\n let lastAdjustable: Selection;\r\n let newPart: boolean = false;\r\n let previousPresLevel: number = -1;\r\n let positioning: any;\r\n for (let i = 0; i < len; i++) {\r\n const selection: Selection = this._selections[i];\r\n if (selection.presentationLevel === 1) {\r\n positioning = selection.hdecoPositioning;\r\n }\r\n if (selection.presentationLevel > previousPresLevel) {\r\n selection.hdecoPositioning = selection.hdecoPositioning || positioning;\r\n }\r\n if (selection.decoNode) {\r\n if (selection.decoNode.type === DecoNodeType.Variation) {\r\n if (lastAdded) {\r\n if (newPart) {\r\n lastAdded.variations = [selection.decoNode];\r\n } else {\r\n lastAdded.variations.push(selection.decoNode);\r\n }\r\n newPart = false;\r\n } else {\r\n if (globalVariationsRewrite) {\r\n globalVariations.length = 0;\r\n globalVariationsRewrite = false;\r\n }\r\n globalVariations.push(selection.decoNode);\r\n }\r\n // const variation: FurniturePartVariation = new FurniturePartVariation();\r\n // variation.BrandId = selection.decoNode.brandId;\r\n // variation.Description = selection.decoNode.gameObjectName;\r\n // variation.MaterialId = (selection.decoNode as any).materialId;\r\n // variation.SupplierArticleNr = (selection.decoNode as any).supplierArticleNr;\r\n // usedVariations.push(variation);\r\n // this._upsertFurniture(this.activeInstance, {\r\n // Variation: selection.decoNode.brandId,\r\n // VariationDescription: selection.decoNode.gameObjectName,\r\n // SupplierArticleNr: (selection.decoNode as any).supplierArticleNr\r\n // });\r\n } else if (selection.decoNode.type === DecoNodeType.Part &&\r\n typeof selection.decoNode.gameObjectName === 'string' &&\r\n selection.decoNode.gameObjectName.length) {\r\n if (selection.decoNode.kind === DecoNodeKind.Adjustable) {\r\n selection.variations = globalVariations;\r\n this._adjustables.push(selection);\r\n if (!lastAdded || lastAdded.nodeId !== selection.nodeId) {\r\n newPart = true;\r\n }\r\n lastAdded = selection;\r\n lastAdjustable = selection;\r\n } else if (selection.decoNode.kind === DecoNodeKind.Addable) {\r\n selection.variations = lastAdjustable ? lastAdjustable.variations : globalVariations;\r\n if (lastAdjustable) {\r\n lastAdjustable.addables.push(selection);\r\n }\r\n this._addables.push(selection);\r\n if (!lastAdded || lastAdded.nodeId !== selection.nodeId) {\r\n newPart = true;\r\n }\r\n lastAdded = selection;\r\n }\r\n }\r\n }\r\n previousPresLevel = selection.presentationLevel;\r\n }\r\n // this._upsertFurniture(this.activeInstance,\r\n // {Variations: usedVariations});\r\n }\r\n\r\n private _createAdjustable(parent: THREE.Object3D, adj: Selection): THREE.Object3D {\r\n let obj: any = this._source ? this._source.getObjectByName(adj.decoNode.gameObjectName) : null;\r\n if (!obj) {\r\n // in case of glb files, the importer removes dots from names\r\n const name = adj.decoNode.gameObjectName.replace(/[.]/g, '');\r\n obj = this._source ? this._source.getObjectByName(name) : null;\r\n if (!obj) {\r\n // console.warn(`No object with name ${adj.decoNode.gameObjectName} found!`);\r\n return null;\r\n }\r\n }\r\n let adjustable: any = obj.clone();\r\n adjustable.name = this._createUniqueName(parent, obj);\r\n adjustable.userData.selection = adj;\r\n adjustable.position.set(0, 0, 0);\r\n adjustable.visible = true;\r\n parent.add(adjustable);\r\n // the object being added to the customFloorGroup is being recreated so we loose the reference\r\n // therefor we need to retrieve the created object again\r\n // adjustable = parent.getObjectByName(adjustable.name);\r\n this._placedAdjustables.push(adjustable);\r\n return adjustable;\r\n }\r\n\r\n private _createAddable(parent: THREE.Object3D, add: Selection, part2?: any, part1?: any): THREE.Object3D {\r\n const obj: any = this._source.getObjectByName(add.decoNode.gameObjectName);\r\n if (!obj) {\r\n return null;\r\n }\r\n // const selection: Selection = this._getSelectionFromId(adj.artNodeIdDeco);\r\n const addable: any = obj.clone();\r\n addable.name = this._createUniqueName(parent, obj);\r\n addable.userData.selection = add;\r\n addable.position.set(0, 0, 0);\r\n addable.visible = true;\r\n if (part1 && part2) {\r\n parent.add(addable);\r\n this._placedAddables.push(addable);\r\n return addable;\r\n }\r\n return addable;\r\n }\r\n\r\n private _placeAddables(parent: THREE.Object3D): void {\r\n const len: number = this._placedAdjustables.length;\r\n for (let i = 0; i < len; i++) {\r\n if (this._placedAdjustables[i].userData.hasOwnProperty('selection') && this._placedAdjustables[i].userData.selection) {\r\n const adjustableSelection: Selection = this._placedAdjustables[i].userData.selection;\r\n if (adjustableSelection) {\r\n const lena: number = adjustableSelection.addables.length;\r\n let conAddable: any;\r\n for (let ia = 0; ia < lena; ia++) {\r\n SceneUtils.TrySelectorConnection(this._scene,\r\n parent, this._placedAdjustables[i], adjustableSelection.addables[ia],\r\n (add, part2?, part1?) => this._createAddable(parent, add, part2, part1));\r\n if (conAddable) {\r\n SceneUtils.TrySelectorConnection(this._scene,\r\n parent, conAddable, adjustableSelection.addables[ia],\r\n (add, part2?, part1?) => this._createAddable(parent, add, part2, part1));\r\n }\r\n conAddable = this._placedAddables[this._placedAddables.length - 1];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private _createUniqueName(parent: THREE.Object3D, obj: THREE.Object3D): string {\r\n let iteration = 0;\r\n let name = obj.name;\r\n let existingObj = parent.getObjectByName(name);\r\n while (existingObj) {\r\n iteration++;\r\n name = obj.name + (iteration !== 0 ? ('_' + iteration) : '');\r\n existingObj = parent.getObjectByName(name);\r\n }\r\n return name;\r\n }\r\n\r\n private async _getGoodIdFromSku(sku: string): Promise<number> {\r\n const response: DataServiceResponseData = await this._configuratorApi.getGoodIdFromSku(sku, false);\r\n if (response.validationResult.success && response.resultObject) {\r\n return response.resultObject;\r\n }\r\n }\r\n\r\n\r\n private async _getArticle(sku: string, goodId: number): Promise<Article> {\r\n if (this._articleCache.has(sku)) {\r\n return this._articleCache.get(sku);\r\n }\r\n if (!goodId) {\r\n goodId = await this._getGoodIdFromSku(sku)\r\n .catch((error) => {\r\n throw `Article with sku ${sku} not found!`;\r\n });\r\n }\r\n let article: Article;\r\n const articleResponse: DataServiceResponseData = await this._configuratorApi.getArticleQuickSel(goodId, false);\r\n if (articleResponse.validationResult.success && articleResponse.resultObject) {\r\n if (articleResponse.resultObject.hasOwnProperty('oArticle')) {\r\n const obj = Array.isArray(articleResponse.resultObject['oArticle']) ? articleResponse.resultObject['oArticle'][0] : articleResponse.resultObject['oArticle'];\r\n article = <Article>this._boFactory.makeWithRawBackendData(Article, obj);\r\n } else {\r\n article = <Article>this._boFactory.makeWithRawBackendData(Article, articleResponse.resultObject);\r\n }\r\n }\r\n this._articleCache.set(sku, article);\r\n return article;\r\n }\r\n\r\n private async _getSelections(instanceId: string): Promise<void> {\r\n this._selections.length = 0;\r\n const selectionResponse: DataServiceResponseData = await this._configuratorApi.getSelections(false);\r\n if (selectionResponse.resultObjects && selectionResponse.resultObjects.length > 0) {\r\n this._selections = <Selection[]>this._boFactory.makeBOArrayFromRawBackendDataArray(Selection, selectionResponse.resultObjects);\r\n this._selections.forEach(s => s.instanceId = instanceId);\r\n } else {\r\n throw 'No selections found!';\r\n }\r\n }\r\n\r\n private async _getDecos(): Promise<void> {\r\n this._decos.length = 0;\r\n const decosResponse: DataServiceResponseData = await this._configuratorApi.getDecos(false);\r\n if (decosResponse.resultObjects && decosResponse.resultObjects.length > 0) {\r\n this._decos = <DecoNode[]>this._boFactory.makeBOArrayFromRawBackendDataArray(DecoNode, decosResponse.resultObjects);\r\n } else {\r\n throw 'No deconodes found!';\r\n }\r\n }\r\n\r\n private _linkSelectionsAndDecos(): void {\r\n const len: number = this._selections.length;\r\n for (let i = 0; i < len; i++) {\r\n let id: string = this._selections[i].artNodeIdDeco;\r\n // if (this._useNodeIdToLink) {\r\n // id = `${this._selections[i].node}_${this._selections[i].artNodeIdDeco}`;\r\n // }\r\n let deco: any = this._decos.find(d => d.id === id);\r\n if (!deco) {\r\n deco = new DecoNode();\r\n }\r\n const variation: any = this._getVariations().find(v => v.parentId === this._selections[i].artNodeIdDeco);\r\n if (variation) {\r\n deco.variation = variation;\r\n }\r\n this._selections[i].decoNode = deco;\r\n }\r\n }\r\n\r\n private _getVariations(): DecoNode[] {\r\n return this._decos.filter((deco: DecoNode) => {\r\n return deco.type === DecoNodeType.Variation;\r\n });\r\n }\r\n\r\n private async _loadVariations(obj: THREE.Object3D, instanceId: string): Promise<void> {\r\n await this._variationHelper.loadPart(obj, this._adjustables, true);\r\n await this._variationHelper.loadVariation(instanceId, obj, this._adjustables, true);\r\n await this._variationHelper.loadVariation(instanceId, obj, this._addables, true);\r\n }\r\n\r\n private _getAdjustables(): Selection[] {\r\n return this._selections.filter(s => {\r\n const node: DecoNode = s.decoNode;\r\n return node && node.gameObjectName && node.type === DecoNodeType.Part && node.kind === DecoNodeKind.Adjustable;\r\n });\r\n }\r\n\r\n private _updatePivot(obj: THREE.Object3D) {\r\n const boundingBox = new THREE.Box3().setFromObject(obj);\r\n const bbCenterPivot = new THREE.Vector3();\r\n boundingBox.getCenter(bbCenterPivot);\r\n const delta: THREE.Vector3 = new THREE.Vector3().sub(bbCenterPivot).setY(Math.abs(Math.min(boundingBox.min.y, 0)));\r\n\r\n obj.children.forEach((child: any) => {\r\n child.position.add(delta);\r\n });\r\n obj.updateWorldMatrix(false, true);\r\n }\r\n\r\n private _reset(): void {\r\n this._placedAddables.length = 0;\r\n this._placedAdjustables.length = 0;\r\n this._adjustables.length = 0;\r\n this._addables.length = 0;\r\n this._prepareTheSelections();\r\n }\r\n}\r\n","import {Component, EventEmitter, Input, Output} from \"@angular/core\";\r\nimport {Answer} from \"@colijnit/configuratorapi/build/src/model/answer\";\r\n\r\n@Component({\r\n selector: \"answers\",\r\n template: `\r\n <ng-container *ngFor=\"let answer of answers\">\r\n <div class=\"answers\" (click)=\"answerClick.emit(answer)\">\r\n <div class=\"answer\" [textContent]=\"answer.commercialAnswer\"></div>\r\n </div>\r\n </ng-container>\r\n `,\r\n styleUrls: [\r\n \"./answers.component.scss\"\r\n ]\r\n})\r\n\r\nexport class AnswersComponent {\r\n\r\n @Input()\r\n public answers: Answer[] = [];\r\n\r\n @Output()\r\n public answerClick: EventEmitter<Answer> = new EventEmitter<Answer>();\r\n\r\n}\r\n","import {NgModule} from \"@angular/core\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {AnswersComponent} from \"./answers.component\";\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule\r\n ],\r\n declarations: [\r\n AnswersComponent\r\n ],\r\n exports: [\r\n AnswersComponent\r\n ]\r\n})\r\nexport class AnswersModule {\r\n\r\n}\r\n","import {Component, EventEmitter, Input, Output} from \"@angular/core\";\r\nimport {Selection} from \"@colijnit/configuratorapi/build/src/model/selection\";\r\nimport {animate, state, style, transition, trigger} from \"@angular/animations\";\r\n\r\nclass SelectionViewModel {\r\n public selection: Selection;\r\n public children: Selection[] = [];\r\n public expanded: boolean = false;\r\n}\r\n\r\n@Component({\r\n selector: \"selections\",\r\n template: `\r\n <ng-container *ngFor=\"let selectionViewModel of selectionViewModels\">\r\n <div class=\"selection\" (click)=\"selectSelection(selectionViewModel.selection, $event)\">\r\n <div class=\"question\" [textContent]=\"selectionViewModel.selection.commercialQuestion\"></div>\r\n <div class=\"answer\" [textContent]=\"selectionViewModel.selection.answer\"></div>\r\n <div class=\"collapse-handle\" [class.expanded]=\"selectionViewModel.expanded\" \r\n *ngIf=\"selectionViewModel.children.length > 0\" (click)=\"expandClicked(selectionViewModel, $event)\"></div>\r\n <div *ngIf=\"selectionViewModel.children.length > 0 && selectionViewModel.expanded\" @showHideChildren>\r\n <div class=\"child-selection\" *ngFor=\"let selection of selectionViewModel.children\"\r\n (click)=\"selectSelection(selection, $event)\"\r\n >\r\n <div class=\"question\" [textContent]=\"selection.commercialQuestion\"></div>\r\n <div class=\"answer\" [textContent]=\"selection.answer\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n `,\r\n styleUrls: [\r\n './selections.component.scss'\r\n ],\r\n animations: [\r\n trigger('showHideChildren', [\r\n state('void', style({'height': '0'})),\r\n state('*', style({'height': '*'})),\r\n transition('void <=> *', animate(200))\r\n ])\r\n ]\r\n})\r\n\r\nexport class SelectionsComponent {\r\n @Input()\r\n public set selections(value: Selection[]) {\r\n this._prepareSelections(value);\r\n }\r\n\r\n public selectionViewModels: SelectionViewModel[] = [];\r\n\r\n @Output()\r\n public selectionClick: EventEmitter<Selection> = new EventEmitter<Selection>();\r\n\r\n public expandClicked(selectionViewModel: SelectionViewModel, mouseEvent: MouseEvent): void {\r\n mouseEvent.preventDefault();\r\n mouseEvent.stopImmediatePropagation();\r\n selectionViewModel.expanded = !selectionViewModel.expanded;\r\n }\r\n\r\n public selectSelection(selection: Selection, mouseEvent: MouseEvent): void {\r\n mouseEvent.preventDefault();\r\n mouseEvent.stopImmediatePropagation();\r\n this.selectionClick.next(selection);\r\n }\r\n\r\n private _prepareSelections(value: Selection[]): void {\r\n this.selectionViewModels.length = 0;\r\n let selectionViewModel: SelectionViewModel;\r\n value.forEach(s => {\r\n if (s.presentationLevel === 1) {\r\n selectionViewModel = new SelectionViewModel();\r\n selectionViewModel.selection = s;\r\n this.selectionViewModels.push(selectionViewModel);\r\n } else if (s.presentationLevel > 1) {\r\n if (selectionViewModel) {\r\n selectionViewModel.children.push(s);\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","import {NgModule} from \"@angular/core\";\r\nimport {CommonModule} from \"@angular/common\";\r\nimport {SelectionsComponent} from \"./selections.component\";\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule\r\n ],\r\n declarations: [\r\n SelectionsComponent\r\n ],\r\n exports: [\r\n SelectionsComponent\r\n ]\r\n})\r\nexport class SelectionsModule {\r\n\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["THREE.ObjectLoader","THREE.Camera","THREE.Group","THREE.TextureLoader","THREE.RepeatWrapping","THREE.Object3D","THREE.Mesh","THREE.Box3","THREE.Vector3","THREE.Vector2","THREE.Euler","THREE.Quaternion","THREE.Color","THREE.Texture","THREE.MeshPhongMaterial","THREE.MeshStandardMaterial"],"mappings":";;;;;;;;;;;;;;;;MAEa,WAAW;IAGb,OAAO,eAAe,CAAC,QAA+B;QACzD,IAAI,CAAC,QAAQ,EAAE;YACX,OAAO;SACV;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACzB,QAAQ,CAAC,OAAO,CAAC,IAAI;gBACjB,IAAI,CAAC,aAAa;qBACb,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;qBAChC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBACjD,IAAI,CAAC,OAAO,EAAE,CAAC;aAClB,CAAC,CAAC;SACN;aAAM;YACH,IAAI,CAAC,aAAa;iBACb,MAAM,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;iBACjE,OAAO,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACrD,IAAI,QAAQ,CAAC,OAAO,EAAE;gBAClB,QAAQ,CAAC,OAAO,EAAE,CAAC;aACtB;SACJ;KACJ;IAEM,OAAO,aAAa,CAAC,MAAuB;QAC/C,IAAI,CAAC,MAAM,EAAE;YACT,OAAO;SACV;QACD,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;YACxB,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;SAC/D;QACD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;KAC5B;IAEO,OAAO,WAAW,CAAC,IAAqB;QAC5C,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAa;YACxB,IAAI,GAAG,YAAY,IAAI,EAAE;gBACrB,IAAI,GAAG,CAAC,QAAQ,EAAE;oBACd,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;iBAC1B;gBACD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;aACtC;YACD,IAAI,OAAQ,GAAW,CAAC,OAAO,KAAK,UAAU,EAAE;;gBAE5C,GAAG,CAAC,OAAO,EAAE,CAAC;aACjB;SACJ,CAAC,CAAC;KACN;;AA9CM,yBAAa,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,CAAC;;ACFxI;AACA;MACa,SAAS;;IAKb,OAAO,0BAA0B,CAAC,OAAe;QACtD,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,EAAE,CAAC;SACX;QAED,MAAM,UAAU,GAAW,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAClE,OAAO,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;KAC9C;IAEM,OAAO,wBAAwB,CAAC,OAAe;QACpD,IAAI,CAAC,OAAO,EAAE;YACZ,OAAO,EAAE,CAAC;SACX;QAED,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KAC9B;IAEM,OAAa,UAAU,CAAC,GAAW,EAAE,SAAiB;;YACzD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC;gBACzB,MAAM,EAAE,KAAK;gBACb,GAAG,EAAE,GAAG,SAAS,yBAAyB,GAAG,EAAE;gBAC/C,YAAY,EAAE,MAAM;aACrB,CAAC,CAAA;YACF,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;SACxB;KAAA;;;;;;IAOM,OAAO,MAAM,CAAC,QAAgB;QACnC,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO,EAAE,CAAC;SACX;QACD,IAAI,QAAQ,GAAW,QAAQ,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAC1H,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;SAC5C;QACD,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACxD,OAAO,QAAQ,CAAC;KACjB;IAEM,OAAO,SAAS,CAAC,QAAgB;QACtC,IAAI,CAAC,QAAQ,EAAE;YACb,OAAO,EAAE,CAAC;SACX;QACD,IAAI,QAAQ,GAAW,QAAQ,CAAC;QAChC,IAAI,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE;YACzC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;SAC1C;QACD,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;QACxD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAC9B,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SACpC;QACD,OAAO,QAAQ,CAAC;KACjB;;IAGM,OAAO,oBAAoB,CAAC,QAAgB;QACjD,MAAM,KAAK,GAAW,iBAAiB,CAAC;QACxC,MAAM,SAAS,GAAQ,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,QAAQ,SAAS;YACf,KAAK,KAAK,CAAC;YACX,KAAK,MAAM;gBACT,OAAO,YAAY,CAAC;YACtB,KAAK,KAAK;gBACR,OAAO,WAAW,CAAC;YACrB,KAAK,KAAK;gBACR,OAAO,WAAW,CAAC;SACtB;KACF;;;;;;;IAQM,OAAO,YAAY,CACxB,QAAgB,EAChB,OAAe,EACf,WAAmB,YAAY;QAE/B,MAAM,OAAO,GAAsB,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAC/D,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,iBAAiB,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;QACnG,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAE3C,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QAC/B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAEnC,OAAO,CAAC,KAAK,EAAE,CAAC;QAEhB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;KACpC;;IAGM,OAAO,UAAU,CAAC,IAAU;QACjC,OAAO,IAAI,OAAO,CAAS,CAAC,OAAiB;YAC3C,MAAM,MAAM,GAAe,IAAI,UAAU,EAAE,CAAC;YAC5C,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACxB,MAAM,CAAC,SAAS,GAAG,CAAC,KAAU;gBAC5B,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,KAAK,CAAC,EAAE;oBACjC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;iBAC9B;aACF,CAAC;SACH,CAAC,CAAC;KACJ;IAEM,OAAO,uBAAuB,CAAC,OAAe;QACnD,OAAO,OAAO,CAAC,OAAO,CAAC,kCAAkC,EAAE,IAAI,CAAC,CAAC;KAClE;IAEM,OAAO,gCAAgC,CAAC,OAAe;QAC5D,MAAM,GAAG,GAAW,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAC1D,OAAO,UAAU,GAAG,GAAG,CAAC;KACzB;IAEM,OAAO,mBAAmB,CAAC,OAAe,EAAE,QAAgB;QACjE,MAAM,IAAI,GAAQ,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;QACpB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;KACjC;;IAGM,OAAO,qBAAqB,CAAC,YAAoB,EAAE,QAAgB;QACxE,IAAI,CAAC,CAAC,YAAY,EAAE;YAClB,OAAO,OAAO,GAAG,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;SACvD;aAAM;YACL,OAAO,EAAE,CAAC;SACX;KACF;IAEO,OAAO,WAAW,CAAC,GAAG;QAC5B,IAAI,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE;YACpC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;SACvC;aAAM;YACL,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;SACtD;QACD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACxB,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SACzB;QACD,OAAO,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;KACpC;;AArJc,+BAAqB,GAAwB,IAAI,GAAG,EAAE;;MCD1D,WAAW;IAAxB;QAEU,iBAAY,GAAgC,IAAI,GAAG,EAAE,CAAC;KAoN/D;IAlNQ,UAAU;QACf,MAAM,IAAI,GAAqB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;KAC3B;IAEM,gBAAgB,CAAC,QAAgB;QACtC,OAAO,IAAI,OAAO,CAAC,CAAO,OAAiB,EAAE,MAAgB;YAC3D,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAC5C,IAAI,cAAc,GAAW,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC,CAAC;YACrF,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE;gBACzC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;gBAC/C,OAAO;aACR;YACD,IAAI,MAAM,SAAS,CAAC,UAAU,CAAC,cAAc,EAAE,sCAAsC,CAAC,EAAE;gBACtF,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,GAAmB;oBAC1D,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;oBAC3C,OAAO,CAAC,GAAG,CAAC,CAAC;iBACd,CAAC,CAAC;aACJ;iBAAM;gBACL,MAAM,CAAC,0BAA0B,cAAc,GAAG,CAAC,CAAC;aACrD;SACF,CAAA,CAAC,CAAC;KACJ;IAEM,cAAc,CAAC,IAAU;QAC9B,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAC;QACpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM;YACjC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAM,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACzD,UAAU,CAAC,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5C,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SAC7B,CAAC,CAAC;KACJ;IAEY,aAAa,CAAC,QAAgB;;YACzC,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gBACnC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;aACzD;YACD,MAAM,IAAI,GAAW,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxD,MAAM,MAAM,GAAG,IAAIA,YAAkB,EAAE,CAAC;YACxC,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;YACjC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM;gBACjC,IAAI;oBACF,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC/B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;oBACrC,OAAO,CAAC,GAAG,CAAC,CAAC;iBACd;gBAAC,OAAO,CAAC,EAAE;oBACV,MAAM,CAAC,IAAI,CAAC,CAAC;iBACd;aACF,CAAC,CAAC;SACJ;KAAA;IAEY,mBAAmB,CAAC,QAAgB;;YAC/C,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gBACnC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;aACzD;YACD,MAAM,MAAM,GAAG,IAAIA,YAAkB,EAAE,CAAC;YACxC,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;YACnC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;YAC3B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM;gBACjC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAClB,CAAC,MAAW;oBACV,MAAM,GAAG,GAAmB,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;oBAC9H,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;oBACrC,OAAO,CAAC,GAAqB,CAAC,CAAC;iBAChC,EACD,GAAG,IAAI,IAAI,EACX,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,CACvB,CAAC;aACH,CAAC,CAAC;SACJ;KAAA;IAEY,YAAY,CAAC,IAAY,EAAE,UAAmB,IAAI;;YAC7D,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBAC/B,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;aACrD;YACD,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;gBACtC,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;gBACvD,OAAO,IAAI,CAAC;aACb;;YAED,MAAM,GAAG,GAAmB,MAAO,MAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjE,IAAI,GAAG,EAAE;gBACP,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;gBACrC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACjC,OAAO,GAAG,CAAC;aACZ;iBAAM;gBACL,OAAO,IAAI,CAAC;aACb;SACF;KAAA;IAEY,aAAa,CAAC,IAAY;;YACrC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACjD,IAAI,GAAG,EAAE;gBACP,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,YAAYC,MAAY,CAAC,CAAC,CAAC;gBACtE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC5D,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAiB;oBACrC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAiB;wBAC3B,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;qBACpD,CAAC,CAAC;oBACH,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;iBACnB,CAAC,CAAC;gBACH,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAYC,KAAW,EAAE;oBACvE,MAAM,QAAQ,GAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;oBACvD,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;oBACxB,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;iBACzB;aACF;YACD,OAAO,GAAG,CAAC;SACZ;KAAA;IAEY,cAAc,CAAC,GAAW;;;YAErC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM;gBACjC,MAAM,aAAa,GAAG,IAAIC,aAAmB,EAAE,CAAC;;gBAEhD,aAAa,CAAC,IAAI,CAAC,GAAG,EACpB,CAAC,OAAsB;oBACrB,OAAO,CAAC,KAAK,GAAGC,cAAoB,CAAC;oBACrC,OAAO,CAAC,KAAK,GAAGA,cAAoB,CAAC;oBACrC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBACzB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;oBAC3B,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC;iBACzB,EACD,IAAI,EACJ,MAAM,CACP,CAAC;aACH,CAAC,CAAC;SACJ;KAAA;IAEO,iBAAiB,CAAC,MAAsB,EAAE,UAAmB,IAAI;QACvE,IAAI,GAAG,GAAmB,IAAIC,QAAc,EAAE,CAAC;QAC/C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAiB;YACxC,IAAI,EAAE,CAAC,YAAYJ,MAAY,CAAC,EAAE;gBAChC,IAAI,OAAO,IAAI,CAAC,YAAYC,KAAW,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAYA,KAAW,CAAC,EAAE;oBAC5G,IAAI,CAAC,yBAAyB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;iBACxC;qBAAM,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,YAAYI,IAAU,CAAC,MAAM,EAAE,CAAC,YAAYA,IAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;oBACtH,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK;wBACvB,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;qBAChC,CAAC,CAAC;oBACH,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAC5B,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC3B,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;qBACpB;yBAAM;wBACL,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;qBACjB;iBACF;qBAAM;;;;;;;oBAOL,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;iBACpB;aACF;SACF,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,IAAIC,IAAU,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACxD,MAAM,aAAa,GAAG,IAAIC,OAAa,EAAE,CAAC;QAC1C,WAAW,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACrC,MAAM,KAAK,GAAkB,IAAIA,OAAa,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC;QAC7E,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE;YACtB,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SACxB,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;KACZ;IAEO,yBAAyB,CAAC,KAAqB,EAAE,GAAmB,EAAE,UAAmB,IAAI;QACnG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAkB;YACxC,IAAI,OAAO,IAAI,EAAE,YAAYN,KAAW,EAAE;gBACxC,IAAI,CAAC,yBAAyB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;aACzC;iBAAM;;gBAEL,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;;gBAEhC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;aACrB;SACF,CAAC,CAAC;KACJ;IAEO,gBAAgB,CAAC,QAA0B,EAAE,QAAmC;QACtF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxC,MAAM,KAAK,GAAmB,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,KAAK,YAAYI,IAAU,EAAE;gBAC/B,QAAQ,CAAC,KAAK,CAAC,CAAC;aACjB;iBAAM;gBACL,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;aACjD;SACF;KACF;IAEa,aAAa,CAAC,QAAgB;;YAC1C,IAAI;gBACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACvC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;oBAChB,OAAO,EAAE,CAAC;iBACX;qBAAM;oBACL,IAAI,KAAK,GAAG,KAAK,CAAC;oBAClB,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK;wBACvC,IAAI,KAAK,KAAK,EAAE,EAAE;4BAChB,KAAK,GAAG,IAAI,CAAC;yBACd;qBACF,CAAC,CAAC;oBACH,OAAO,KAAK,GAAG,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;iBACrC;aACF;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,EAAE,CAAC;aACX;SACF;KAAA;;;MCtNU,UAAU;IAEZ,OAAO,qBAAqB,CAAC,KAAkB,EAAE,MAAsB,EAC1E,KAAU,EAAE,KAAU,EAAE,eAA0B;QAClD,IAAI,OAAY,CAAC;QACjB,IAAI,eAAe,EAAE;YACjB,OAAO,GAAG,KAAK,CAAC;YAChB,KAAK,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;SACpC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5C,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;gBAC/C,MAAM,IAAI,GAAmB,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC/C,MAAM,IAAI,GAAmB,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;;gBAEhD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;;oBAEjF,IAAI,OAAO,EAAE;wBACT,MAAM,QAAQ,GAAmB,eAAe,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;;wBAExE,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;qBACpE;yBAAM;wBACH,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;qBAC1D;iBACJ;aACJ;SACJ;QACD,OAAO,KAAK,CAAC;KAChB;IAEM,OAAO,2BAA2B,CAAC,KAAoB,EAAE,MAAoB,EAAE,KAAa,EAAE,MAAc;QAC/G,IAAI,CAAC,KAAK,EAAE;YACR,OAAO,IAAIG,OAAa,EAAE,CAAC;SAC9B;QACD,MAAM,MAAM,GAAkB,KAAK,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC5D,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACtC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;QACxC,OAAO,IAAIA,OAAa,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;KAChD;IAEM,OAAO,kBAAkB,CAAC,IAA0B,EAAE,IAA0B;QACnF,MAAM,QAAQ,GAAW,IAAI,YAAYJ,QAAc,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;QACrF,MAAM,QAAQ,GAAW,IAAI,YAAYA,QAAc,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;QACrF,MAAM,UAAU,GAAY,IAAI,YAAYA,QAAc,IAAI,IAAI,YAAYA,QAAc,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACnI,MAAM,MAAM,GAAa,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EACtD,MAAM,GAAa,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACzD,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YACzD,MAAM,WAAW,GAAY,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG;gBAC/D,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC;YACvD,OAAO,WAAW,CAAC;SACtB;QACD,OAAO,KAAK,CAAC;KAChB;IAEO,OAAO,eAAe,CAAC,KAAkB,EAAE,MAAsB,EAAE,IAAoB,EAAE,IAAoB;QACjH,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE;YACnB,OAAO,KAAK,CAAC;SAChB;QACD,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QACvC,IAAI,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QAEvC,MAAM,cAAc,GAAgB,IAAIK,KAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7D,MAAM,cAAc,GAAkB,IAAIF,OAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAEjE,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC9B,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;QAExC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAE7B,MAAM,QAAQ,GAAqB,IAAIG,UAAgB,EAAE,CAAC;QAC1D,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAqB,IAAIA,UAAgB,EAAE,CAAC;QAC1D,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,cAAc,GAAqB,IAAIA,UAAgB,EAAE,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;QAC/C,MAAM,cAAc,GAAqB,IAAIA,UAAgB,EAAE,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;QAE/C,MAAM,QAAQ,GAAqB,IAAIA,UAAgB,EAAE,CAAC,mBAAmB,CACzE,QAAQ,CAAC,MAAM,EAAE,EACjB,QAAQ,CACX,CAAC,QAAQ,CACN,IAAIA,UAAgB,EAAE,CAAC,mBAAmB,CACtC,cAAc,EACd,cAAc,CACjB,CACJ,CAAC;QAEF,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;QAEtC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;;QAG9B,MAAM,OAAO,GAAkB,IAAIH,OAAa,EAAE,CAAC;QACnD,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAkB,IAAIA,OAAa,EAAE,CAAC;QACnD,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAE/B,MAAM,IAAI,GAAkB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;;QAGjC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACrC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAErC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;;QAG9B,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC;KACf;;;MClHQ,QAAQ;IAArB;QAIS,aAAQ,GAAgB,IAAII,KAAW,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACvD,cAAS,GAAG,CAAC,CAAC;QAQd,YAAO,GAAG,CAAC,CAAC;QACZ,YAAO,GAAG,CAAC,CAAC;QACZ,WAAM,GAAG,KAAK,CAAC;KAIvB;;;ACnBD;MACa,UAAU;IAId,OAAO,uBAAuB,CAAC,EAAU,EAAE,MAAc,EAAE,QAAkB;QAClF,OAAO,IAAI,OAAO,CAAgB,CAAC,OAAO;YACxC,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBAC/B,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;aACtC;iBAAM;gBACL,IAAI,CAAC,MAAM,EAAE;oBACX,OAAO,CAAC,IAAIC,OAAa,EAAE,CAAC,CAAC;iBAC9B;qBAAM;oBACL,MAAM,MAAM,GAAwB,IAAIV,aAAmB,EAAE,CAAC;oBAC9D,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,OAAsB;wBACzC,OAAO,CAAC,UAAU,GAAG,EAAE,CAAC;wBACxB,OAAO,CAAC,KAAK,GAAGC,cAAoB,CAAC;wBACrC,OAAO,CAAC,KAAK,GAAGA,cAAoB,CAAC;wBACrC,OAAO,CAAC,MAAM,GAAG,IAAIK,OAAa,CAAC,QAAQ,GAAG,QAAQ,CAAC,OAAO,GAAG,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;wBACrG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;wBAC3B,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;wBACrC,OAAO,CAAC,OAAO,CAAC,CAAC;qBAClB,CAAC,CAAC;iBACJ;aACF;SACF,CAAC,CAAC;KACJ;;AAvBa,mBAAQ,GAA+B,IAAI,GAAG,EAAE;;MCCnD,iBAAkB,SAAQ,QAAQ;CAQ9C;MAEY,UAAU;IAEd,OAAa,uBAAuB,CAAC,KAAwB;;YAClE,MAAM,QAAQ,GAAsB,IAAI,QAAQ,EAAE,CAAC;YACnD,IAAI,CAAC,KAAK,EAAE;gBACV,OAAO,QAAQ,CAAC;aACjB;YACD,IAAI,KAAK,CAAC,QAAQ,EAAE;gBAClB,UAAU,CAAC,qBAAqB,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;aAC5D;YACD,IAAI,KAAK,CAAC,OAAO,EAAE;gBACjB,QAAQ,CAAC,OAAO,GAAG,MAAM,UAAU,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE,GAAG,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAC5G,QAAQ,CAAC,OAAO,CAAC,QAAQ,GAAG,YAAY,CAAC;gBAEzC,QAAQ,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;aAClD;YACD,IAAI,KAAK,CAAC,MAAM,EAAE;gBAChB,QAAQ,CAAC,MAAM,GAAG,MAAM,UAAU,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE,GAAG,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;gBACzG,QAAQ,CAAC,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC;;;;aAIhD;YACD,IAAI,KAAK,CAAC,EAAE,EAAE;gBACZ,QAAQ,CAAC,EAAE,GAAG,MAAM,UAAU,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;gBAC7F,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;aACxC;YACD,IAAI,KAAK,CAAC,SAAS,EAAE;gBACnB,QAAQ,CAAC,SAAS,GAAG,MAAM,UAAU,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE,GAAG,YAAY,EAAE,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;gBAClH,QAAQ,CAAC,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,CAAC;aACtD;YACD,IAAI,KAAK,CAAC,SAAS,EAAE;gBACnB,QAAQ,CAAC,SAAS,GAAG,MAAM,UAAU,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE,GAAG,YAAY,EAAE,KAAK,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;gBAClH,QAAQ,CAAC,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,CAAC;aACtD;YACD,OAAO,QAAQ,CAAC;SACjB;KAAA;IAEM,OAAO,qBAAqB,CAAC,QAAkB,EAAE,QAAa;QACnE,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;YACrB,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC;;SAEhC;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;YACjB,QAAQ,CAAC,QAAQ,GAAG,IAAIG,KAAW,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;SAC1D;QAED,MAAM,gBAAgB,GAAY,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,gBAAgB,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAC/G,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;YACnB,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;SACzC;QAED,MAAM,OAAO,GAAG,gBAAgB,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QAC/G,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;YACnB,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;SACzC;QAED,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;YACrB,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;SAClD;QAED,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;YACrB,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;SAClD;KACF;;;MCpFU,SAAS;;;MCFT,iBAAiB;IAA9B;QAES,aAAQ,GAAQ,EAAE,CAAC;KAW3B;;;ACPD;MACa,cAAc;IAGlB,OAAa,aAAa,CAAC,SAAiB,EAAE,QAAgB;;YACnE,IAAI,CAAC,QAAQ,EAAE;gBACb,OAAO,IAAI,CAAC;aACb;YACD,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;gBAClC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;aACvC;YACD,MAAM,EAAE,GAAW,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;YACvE,IAAI;gBACF,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;oBAC5B,SAAS,IAAI,GAAG,CAAC;iBAClB;gBACD,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,mBAAmB,CAAC,EAAE;oBAC/C,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;oBAChE,OAAO,IAAI,CAAC;iBACb;gBACD,MAAM,IAAI,GAAQ,MAAO,MAAc,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,4BAA4B,EAAE,EAAE,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC;gBACzI,OAAO,MAAM,cAAc,CAAC,4BAA4B,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;aACpE;YAAC,OAAO,GAAG,EAAE;gBACZ,MAAM,IAAI,GAAG,GAAG,CAAC;gBACjB,OAAO,IAAI,CAAC;aACb;SACF;KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAkCO,OAAa,4BAA4B,CAAC,EAAU,EAAE,cAAmB;;YAC/E,IAAI,CAAC,cAAc,EAAE;gBACnB,OAAO,IAAI,CAAC;aACb;YACD,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;YACtE,MAAM,iBAAiB,GAAsB,IAAI,iBAAiB,EAAE,CAAC;YACrE,IAAI,KAAK,CAAC;YACV,iBAAiB,CAAC,EAAE,GAAG,EAAE,CAAC;YAE1B,IAAI,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE;gBAClC,MAAM,SAAS,GAAW,MAAM,UAAU,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC/E,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;aAC/B;YACD,IAAI,KAAK,EAAE;gBACT,MAAM,cAAc,CAAC,0BAA0B,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,CAAC,CAAC;aACvF;iBAAM;gBACL,MAAM,cAAc,CAAC,6BAA6B,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;aACnF;YACD,OAAO,iBAAiB,CAAC;SAC1B;KAAA;IAEO,OAAa,0BAA0B,CAAC,KAAU,EAAE,iBAAoC,EAAE,UAAe;;YAC/G,IAAI,KAAK,CAAC,UAAU,EAAE;gBACpB,iBAAiB,CAAC,MAAM,GAAG,MAAM,cAAc,CAAC,sBAAsB,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;gBAC7H,iBAAiB,CAAC,cAAc,GAAG,KAAK,CAAC,UAAU,CAAC;aACrD;YACD,IAAI,KAAK,CAAC,MAAM,EAAE;gBAChB,iBAAiB,CAAC,EAAE,GAAG,MAAM,cAAc,CAAC,sBAAsB,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBACjH,iBAAiB,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;aAC7C;YACD,IAAI,KAAK,CAAC,aAAa,EAAE;gBACvB,iBAAiB,CAAC,SAAS,GAAG,MAAM,cAAc,CAAC,sBAAsB,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;gBACtI,iBAAiB,CAAC,iBAAiB,GAAG,KAAK,CAAC,aAAa,CAAC;aAC3D;YACD,IAAI,KAAK,CAAC,aAAa,EAAE;gBACvB,iBAAiB,CAAC,SAAS,GAAG,MAAM,cAAc,CAAC,sBAAsB,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;gBACtI,iBAAiB,CAAC,iBAAiB,GAAG,KAAK,CAAC,aAAa,CAAC;aAC3D;YACD,IAAI,KAAK,CAAC,WAAW,EAAE;gBACrB,iBAAiB,CAAC,OAAO,GAAG,MAAM,cAAc,CAAC,sBAAsB,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;gBAChI,iBAAiB,CAAC,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC;aACvD;YACD,iBAAiB,CAAC,QAAQ;gBACxB,CAAA,MAAM,cAAc,CAAC,sBAAsB,CAAC,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,aAAa,EAAE,KAAK,CAAC,KAAI,EAAE,CAAC;YAC3G,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YACxD,iBAAiB,CAAC,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;YACvD,iBAAiB,CAAC,QAAQ,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;SACxD;KAAA;IAEO,OAAa,6BAA6B,CAAC,iBAAoC,EAAE,UAAe;;YACtG,MAAM,SAAS,GAAiC,EAAE,CAAC;YACnD,KAAK,MAAM,QAAQ,IAAI,UAAU,CAAC,KAAK,EAAE;gBACvC,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;oBAC9B,MAAM,IAAI,GAAQ,MAAM,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBACnD,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBACjF,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,UAAe;4BAC7E,iBAAiB,CAAC,MAAM,GAAG,cAAc,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,UAAU,EAAE,CAAC;4BAClG,iBAAiB,CAAC,cAAc,GAAG,QAAQ,CAAC;yBAC7C,CAAC,CAAC,CAAC;qBACL;yBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBACpF,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,MAAW;4BACzE,iBAAiB,CAAC,EAAE,GAAG,cAAc,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,MAAM,EAAE,CAAC;4BAC1F,iBAAiB,CAAC,UAAU,GAAG,QAAQ,CAAC;yBACzC,CAAC,CAAC,CAAC;qBACL;yBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBAC3F,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,aAAkB;4BAChF,iBAAiB,CAAC,SAAS,GAAG,cAAc,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,aAAa,EAAE,CAAC;4BACxG,iBAAiB,CAAC,iBAAiB,GAAG,QAAQ,CAAC;yBAChD,CAAC,CAAC,CAAC;qBACL;yBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBAC3F,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,aAAkB;4BAChF,iBAAiB,CAAC,SAAS,GAAG,cAAc,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,aAAa,EAAE,CAAC;4BACxG,iBAAiB,CAAC,iBAAiB,GAAG,QAAQ,CAAC;yBAChD,CAAC,CAAC,CAAC;qBACL;yBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBACzF,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,WAAgB;4BAC9E,iBAAiB,CAAC,OAAO,GAAG,cAAc,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,WAAW,EAAE,CAAC;4BACpG,iBAAiB,CAAC,eAAe,GAAG,QAAQ,CAAC;yBAC9C,CAAC,CAAC,CAAC;qBACL;yBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE;wBACxC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,WAAgB;4BAC9E,iBAAiB,CAAC,OAAO,GAAG,yBAAyB,GAAG,WAAW,CAAC;4BACpE,iBAAiB,CAAC,eAAe,GAAG,QAAQ,CAAC;yBAC9C,CAAC,CAAC,CAAC;qBACL;yBAAM,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE;wBAC1C,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,YAAiB;4BAC/E,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;4BACjD,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE;gCACjC,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE;oCACxB,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;iCACxD;6BACF;yBACF,CAAC,CAAC,CAAC;qBACL;iBACF;aACF;YACD,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;SAC9B;KAAA;IAEO,OAAO,sBAAsB,CAAC,GAAQ,EAAE,QAAgB,EAAE,SAAkB,IAAI;QACtF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAiB;YACnC,IAAI,GAAG,IAAI,QAAQ,EAAE;gBACnB,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,WAAgB;oBAC5D,IAAI,MAAM,EAAE;wBACV,OAAO,CAAC,cAAc,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,WAAW,WAAW,EAAE,CAAC,CAAC;qBACjF;yBAAM;wBACL,OAAO,CAAC,WAAW,CAAC,CAAC;qBACtB;iBACF,CAAC,CAAC;aACJ;iBAAM;gBACL,OAAO,CAAC,SAAS,CAAC,CAAC;aACpB;SACF,CAAC,CAAC;KACJ;IAEO,OAAO,WAAW,CAAC,QAAgB;QACzC,MAAM,GAAG,GAAW,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QACrG,QAAQ,GAAG;YACT,KAAK,KAAK,CAAC;YACX,KAAK,MAAM,CAAC;YACZ,KAAK,KAAK,CAAC;YACX,KAAK,KAAK;gBACR,OAAO,IAAI,CAAC;YACd;gBACE,OAAO,KAAK,CAAC;SAChB;KACF;IAEO,OAAO,iBAAiB,CAAC,QAAgB;QAC/C,MAAM,GAAG,GAAW,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QACrG,QAAQ,GAAG;YACT,KAAK,KAAK,CAAC;YACX,KAAK,MAAM;gBACT,OAAO,MAAM,CAAC;YAChB,KAAK,KAAK;gBACR,OAAO,KAAK,CAAC;YACf,KAAK,KAAK;gBACR,OAAO,KAAK,CAAC;YACf;gBACE,OAAO,MAAM,CAAC;SACjB;KACF;;IAGO,OAAa,aAAa,CAAC,IAAI;;YACrC,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC5C,OAAO,OAAO,CAAC;SAChB;KAAA;;AA9Mc,4BAAa,GAA4C,IAAI,GAAG,EAAE;;MCAtE,eAAe;IAA5B;QAIY,yBAAoB,GAA0C,IAAI,GAAG,EAAE,CAAC;KA+MnF;IA7MU,UAAU;QACb,MAAM,QAAQ,GAA+B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACtC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YAChD,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU;gBACtB,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS;oBACzB,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;oBACrC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;oBACvC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;oBACvC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;iBACnC,CAAC,CAAA;aACL,CAAC,CAAC;SACN;KACJ;IAEY,QAAQ,CAAC,GAAmB,EAAE,KAAY,EAAE,SAAkB,KAAK;;YAC5E,IAAI;gBACA,MAAM,GAAG,GAAW,KAAK,CAAC,MAAM,CAAC;gBACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;oBAC1B,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,EAAE;wBACvG,MAAM,YAAY,GACd,MAAM,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;wBAC5G,IAAI,YAAY,EAAE;4BACd,MAAM,aAAa,GAAc,IAAI,SAAS,EAAE,CAAC;4BACjD,aAAa,CAAC,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;4BACxD,aAAa,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;4BAClD,aAAa,CAAC,cAAc,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC;4BAChE,aAAa,CAAC,QAAQ,GAAG,MAAM,UAAU,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC;;4BAEhF,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;yBACtE;qBACJ;iBACJ;aACJ;YAAC,OAAO,CAAC,EAAE;gBACR,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACpB;SACJ;KAAA;IAEY,aAAa,CAAC,UAAkB,EAAE,GAAmB,EAAE,KAAY,EAAE,SAAkB,KAAK;;YACrG,IAAI;gBACA,MAAM,GAAG,GAAW,KAAK,CAAC,MAAM,CAAC;gBACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;oBAC1B,MAAM,UAAU,GAAe,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;oBACnD,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;wBACxC,IAAI,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE;4BAC3D,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;4BAChF,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;4BAC7C,SAAS;yBACZ;6BAAM;4BACH,SAAS;yBACZ;qBACJ;oBACD,MAAM,mBAAmB,GAAgB,EAAE,CAAC;oBAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACxC,MAAM,iBAAiB,GACnB,MAAM,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,cAAc,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;wBACxG,MAAM,YAAY,GAAc,IAAI,SAAS,EAAE,CAAC;wBAChD,YAAY,CAAC,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACnD,YAAY,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;wBAC7C,YAAY,CAAC,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC;wBAC3D,YAAY,CAAC,iBAAiB,GAAI,UAAU,CAAC,CAAC,CAAS,CAAC,iBAAiB,CAAC;wBAC1E,YAAY,CAAC,UAAU,GAAI,UAAU,CAAC,CAAC,CAAS,CAAC,UAAU,CAAC;wBAC5D,YAAY,CAAC,QAAQ,GAAG,MAAM,UAAU,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,CAAC;wBACpF,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;qBAC1C;oBACD,IAAI,CAAC,uBAAuB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;oBAC/E,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,mBAAmB,CAAC;oBAC1C,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;iBAChD;aACJ;YAAC,OAAO,CAAC,EAAE;gBACR,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aACpB;SACJ;KAAA;IAEO,wBAAwB,CAAC,GAAmB,EAAE,kBAA0B,EAAE,IAAY,EAAE,KAAU;QACtG,OAAO,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK;YAC7B,OAAO,KAAK,CAAC,QAAQ;gBACjB,KAAK,CAAC,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC;gBACjD,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC;gBACvD,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC;SAC1D,CAAC,CAAC;KACN;IAEO,kBAAkB,CAAC,GAAmB,EAAE,YAAiB,EAAE,MAAW,EAAE,SAAkB,KAAK;QACnG,MAAM,QAAQ,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACjF,MAAM,GAAG,GAAW,QAAQ,CAAC,MAAM,CAAC;QACpC,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;gBACvC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI;oBAChB,IAAI,IAAI,YAAYN,IAAU,IAAI,YAAY,EAAE;wBAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;4BAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAW,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;gCAChE,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE;oCACnE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;iCACtG;6BACJ;yBACJ;6BAAM;4BACH,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE;gCAChE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;6BAChG;yBACJ;qBACJ;iBACJ,CAAC,CAAC;aACN;SACJ;KACJ;IAEO,gBAAgB,CAAC,GAAmB,EAAE,IAAS,EAAE,SAAkB,KAAK;QAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACpF,MAAM,GAAG,GAAW,QAAQ,CAAC,MAAM,CAAC;QACpC,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAClC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;gBACvC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI;oBAChB,IAAI,IAAI,YAAYA,IAAU,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;wBACtH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;4BAC7C,MAAM,SAAS,GAAc,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;4BAChD,IAAI,SAAS,CAAC,QAAQ,EAAE;gCACpB,MAAM,gBAAgB,GAAW,CAAC,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC;gCACzG,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;oCAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAW,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE;wCAChE,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE;4CACtE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;yCACnG;qCACJ;iCACJ;qCAAM;oCACH,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE;wCACnE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;qCAC7F;iCACJ;6BACJ;yBACJ;qBACJ;iBACJ,CAAC,CAAC;aACN;SACJ;KACJ;IAEO,6BAA6B,CAAC,IAAY,EAAE,SAAoB,EAAE,SAAkB,KAAK;QAC7F,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE;YAC5B,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;SACjD;QACD,IAAI,CAAC,MAAM,EAAE;YACT,MAAM,QAAQ,GAA4B,IAAIQ,iBAAuB,CAAC;gBAClE,IAAI,EAAE,IAAI;gBACV,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,SAAS;gBACvC,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,QAAQ;gBACrC,GAAG,EAAE,SAAS,CAAC,QAAQ,CAAC,OAAO;gBAC/B,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM;aACvC,CAAC,CAAC;;YAEH,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;YAC5B,OAAO,QAAQ,CAAC;SACnB;aAAM;YACH,MAAM,MAAM,GAAyC;;gBAEjD,IAAI,EAAE,IAAI;gBACV,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,cAAc,GAAG,SAAS,CAAC,QAAQ,CAAC,cAAc,GAAG,CAAC;gBACpF,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,cAAc,GAAG,SAAS,CAAC,QAAQ,CAAC,cAAc,GAAG,CAAC;aAEvF,CAAC;YACF,IAAI,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE;gBAC5B,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;aAC3C;YACD,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE;gBACvB,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;aACxC;YACD,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE;gBAC9B,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;aACtD;YACD,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE;gBAC9B,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;aACtD;YACD,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE;gBAC3B,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;aAChD;YACD,MAAM,QAAQ,GAA+B,IAAIC,oBAA0B,CAAC,MAAM,CAAC,CAAC;YACpF,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/B,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;YAC5B,OAAO,QAAQ,CAAC;SACnB;KACJ;IAEO,uBAAuB,CAAC,UAAkB,EAAE,EAAU,EAAE,SAAsB;QAClF,IAAI,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;YAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC7D,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;SACjC;aAAM;YACH,MAAM,UAAU,GAA6B,IAAI,GAAG,EAAE,CAAC;YACvD,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;SAC5E;KACJ;IAEO,uBAAuB,CAAC,UAAkB,EAAE,EAAU;QAC1D,IAAI,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;YAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC7D,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;gBACpB,OAAO,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aAC7B;SACJ;QACD,OAAO,IAAI,CAAC;KACf;;;MCxMQ,OAAO;IAsBhB,YAAY,KAAkB,EAAE,OAAgB;QApBzC,uBAAkB,GAAiC,IAAI,eAAe,CAAc,EAAE,CAAC,CAAC;QACxF,oBAAe,GAA8B,IAAI,eAAe,CAAW,EAAE,CAAC,CAAC;QAC/E,qBAAgB,GAA8B,IAAI,eAAe,CAAW,SAAS,CAAC,CAAC;QAItF,gBAAW,GAAgB,EAAE,CAAC;QAC9B,WAAM,GAAe,EAAE,CAAC;QACxB,uBAAkB,GAAU,EAAE,CAAC;QAC/B,oBAAe,GAAU,EAAE,CAAC;QAC5B,iBAAY,GAAU,EAAE,CAAC;QACzB,cAAS,GAAU,EAAE,CAAC;QAMtB,kBAAa,GAAyB,IAAI,GAAG,EAAE,CAAC;QAChD,UAAK,GAAmB,EAAE,CAAC;QAG/B,IAAI,CAAC,KAAK,EAAE;YACR,MAAM,2BAA2B,CAAC;SACrC;QACD,IAAI,CAAC,OAAO,EAAE;YACV,MAAM,iCAAiC,CAAC;SAC3C;QACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,gBAAgB,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,CAAC,UAAU,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC9C,IAAI,CAAC,YAAY,GAAG,IAAI,WAAW,EAAE,CAAC;QACtC,IAAI,CAAC,gBAAgB,GAAG,IAAI,eAAe,EAAE,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,IAAI,CACX,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,SAAS,CAAC,UAAU,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAC1G,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAC9F,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CACrG,CAAC;KACL;IAEY,UAAU,CAAC,UAAkB,EAAE,GAAW,EAAE,MAAe;;YACpE,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE;gBAC7B,OAAO;aACV;YACD,IAAI;gBACA,MAAM,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAC9C,IAAI,IAAI,CAAC,OAAO,EAAE;oBACd,MAAM,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;oBAC/D,MAAM,QAAQ,GAAmB,EAAE,CAAC;oBACpC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;oBAC/C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;oBAChC,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBAC5B,IAAI,CAAC,uBAAuB,EAAE,CAAC;oBAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;iBAClC;qBAAM;oBACH,MAAM,uBAAuB,CAAC;iBACjC;aACJ;YAAC,OAAO,CAAC,EAAE;gBACR,MAAM,CAAC,CAAC;aACX;SACJ;KAAA;IAEM,gBAAgB,CAAC,MAAc;QAClC,OAAO,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;KACzD;IAEM,OAAO;QACV,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;KACtC;IAEM,eAAe,CAAC,SAAoB;QACvC,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;KAC3D;IAEY,qBAAqB;;YAC9B,OAAO,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;SAC7D;KAAA;IAEM,YAAY,CAAC,MAAc;QAC9B,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KACrD;IAEa,qBAAqB,CAAC,GAAW,EAAE,MAAe;;YAC5D,MAAM,OAAO,GAAY,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAC7D,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE;gBAC7B,IAAI,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC;qBACpE,KAAK,CAAC,CAAC,KAAK;oBACT,MAAM,KAAK,CAAC;iBACf,CAAC,CAAC;gBACP,IAAI,OAAO,CAAC,kBAAkB,EAAE;oBAC5B,IAAI,CAAC,gBAAgB,CAAC,SAAS;wBAC3B,OAAO,CAAC,kBAAkB;6BACzB,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC;6BACpD,OAAO,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,QAAQ,CAAC,CAAC;iBAC5D;aACJ;SACJ;KAAA;IAEa,MAAM,CAAC,UAAkB;;YACnC,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,MAAM,WAAW,GAAgB,IAAI,CAAC,eAAe,EAAE,CAAC;YACxD,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvC,MAAM,GAAG,GAAmB,IAAIV,QAAc,EAAE,CAAC;gBACjD,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC;gBACpB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACrB,IAAI,SAAS,GAAG,KAAK,CAAC;gBACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAW,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;oBAC5D,MAAM,UAAU,GAAmB,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC/E,IAAI,UAAU,EAAE;wBACZ,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,KAAK,GAAW,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,EAAE;4BAC/E,IAAI,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAC5C,GAAG,EAAE,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE;gCAC/C,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;gCAC3C,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;gCAC1B,SAAS,GAAG,IAAI,CAAC;gCACjB,MAAM;6BACT;4BACD,SAAS,GAAG,KAAK,CAAC;yBACrB;qBACJ;oBACD,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;wBAClD,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;qBAC9D;iBACJ;gBACD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;gBACzB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;gBACvB,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;gBAC5C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACxB,OAAO,GAAG,CAAC;aACd;iBAAM;gBACH,MAAM,uBAAuB,CAAC;;;;;;;;;;;;aAYjC;SACJ;KAAA;IAEO,qBAAqB;;QAEzB,MAAM,gBAAgB,GAAe,IAAI,CAAC,WAAW;aAChD,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,IAAK,CAAC,CAAC,QAAgB,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;aAC3E,GAAG,CAAC,CAAC,KAAgB,EAAE,KAAa,EAAE,KAAkB;;YAErD,MAAM,GAAG,GAAc,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,KAAM,KAAK,CAAC,QAAgB,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YAC5G,IAAI,GAAG,EAAE;gBACJ,KAAK,CAAC,QAAgB,CAAC,SAAS,CAAC,iBAAiB,GAAG,GAAG,CAAC,iBAAiB,CAAC;aAC/E;YACA,KAAK,CAAC,QAAgB,CAAC,SAAS,CAAC,UAAU,GAAG,KAAK,CAAC,eAAe,CAAC;YACrE,OAAQ,KAAK,CAAC,QAAgB,CAAC,SAAS,CAAC;SAC5C,CAAC,CAAC;;QAGP,IAAI,uBAAuB,GAAY,IAAI,CAAC;QAE5C,MAAM,GAAG,GAAW,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAC5C,IAAI,SAAoB,CAAC;QACzB,IAAI,cAAyB,CAAC;QAC9B,IAAI,OAAO,GAAY,KAAK,CAAC;QAC7B,IAAI,iBAAiB,GAAW,CAAC,CAAC,CAAC;QACnC,IAAI,WAAgB,CAAC;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,SAAS,GAAc,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YACjD,IAAI,SAAS,CAAC,iBAAiB,KAAK,CAAC,EAAE;gBACnC,WAAW,GAAG,SAAS,CAAC,gBAAgB,CAAC;aAC5C;YACD,IAAI,SAAS,CAAC,iBAAiB,GAAG,iBAAiB,EAAE;gBACjD,SAAS,CAAC,gBAAgB,GAAG,SAAS,CAAC,gBAAgB,IAAI,WAAW,CAAC;aAC1E;YACD,IAAI,SAAS,CAAC,QAAQ,EAAE;gBACpB,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,CAAC,SAAS,EAAE;oBACpD,IAAI,SAAS,EAAE;wBACX,IAAI,OAAO,EAAE;4BACT,SAAS,CAAC,UAAU,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;yBAC/C;6BAAM;4BACH,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;yBACjD;wBACD,OAAO,GAAG,KAAK,CAAC;qBACnB;yBAAM;wBACH,IAAI,uBAAuB,EAAE;4BACzB,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;4BAC5B,uBAAuB,GAAG,KAAK,CAAC;yBACnC;wBACD,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;qBAC7C;;;;;;;;;;;;iBAYJ;qBAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI;oBACpD,OAAO,SAAS,CAAC,QAAQ,CAAC,cAAc,KAAK,QAAQ;oBACrD,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE;oBAC1C,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,CAAC,UAAU,EAAE;wBACrD,SAAS,CAAC,UAAU,GAAG,gBAAgB,CAAC;wBACxC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBAClC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE;4BACrD,OAAO,GAAG,IAAI,CAAC;yBAClB;wBACD,SAAS,GAAG,SAAS,CAAC;wBACtB,cAAc,GAAG,SAAS,CAAC;qBAC9B;yBAAM,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,CAAC,OAAO,EAAE;wBACzD,SAAS,CAAC,UAAU,GAAG,cAAc,GAAG,cAAc,CAAC,UAAU,GAAG,gBAAgB,CAAC;wBACrF,IAAI,cAAc,EAAE;4BAChB,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;yBAC3C;wBACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBAC/B,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE;4BACrD,OAAO,GAAG,IAAI,CAAC;yBAClB;wBACD,SAAS,GAAG,SAAS,CAAC;qBACzB;iBACJ;aACJ;YACD,iBAAiB,GAAG,SAAS,CAAC,iBAAiB,CAAC;SACnD;;;KAGJ;IAEO,iBAAiB,CAAC,MAAsB,EAAE,GAAc;QAC5D,IAAI,GAAG,GAAQ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;QAC/F,IAAI,CAAC,GAAG,EAAE;;YAEN,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAC7D,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YAC/D,IAAI,CAAC,GAAG,EAAE;;gBAEN,OAAO,IAAI,CAAC;aACf;SACJ;QACD,IAAI,UAAU,GAAQ,GAAG,CAAC,KAAK,EAAE,CAAC;QAClC,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACtD,UAAU,CAAC,QAAQ,CAAC,SAAS,GAAG,GAAG,CAAC;QACpC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;;;;QAIvB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACzC,OAAO,UAAU,CAAC;KACrB;IAEO,cAAc,CAAC,MAAsB,EAAE,GAAc,EAAE,KAAW,EAAE,KAAW;QACnF,MAAM,GAAG,GAAQ,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAC3E,IAAI,CAAC,GAAG,EAAE;YACN,OAAO,IAAI,CAAC;SACf;;QAED,MAAM,OAAO,GAAQ,GAAG,CAAC,KAAK,EAAE,CAAC;QACjC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACnD,OAAO,CAAC,QAAQ,CAAC,SAAS,GAAG,GAAG,CAAC;QACjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,IAAI,KAAK,IAAI,KAAK,EAAE;YAChB,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACpB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,OAAO,CAAC;SAClB;QACD,OAAO,OAAO,CAAC;KAClB;IAEO,cAAc,CAAC,MAAsB;QACzC,MAAM,GAAG,GAAW,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;QACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC1B,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,EAAE;gBAClH,MAAM,mBAAmB,GAAc,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;gBACrF,IAAI,mBAAmB,EAAE;oBACrB,MAAM,IAAI,GAAW,mBAAmB,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACzD,IAAI,UAAe,CAAC;oBACpB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE;wBAC9B,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,EACxC,MAAM,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC,EACpE,CAAC,GAAG,EAAE,KAAM,EAAE,KAAM,KAAK,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;wBAC7E,IAAI,UAAU,EAAE;4BACZ,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,EACxC,MAAM,EAAE,UAAU,EAAE,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC,EACpD,CAAC,GAAG,EAAE,KAAM,EAAE,KAAM,KAAK,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;yBAChF;wBACD,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;qBACtE;iBACJ;aACJ;SACJ;KACJ;IAEO,iBAAiB,CAAC,MAAsB,EAAE,GAAmB;QACjE,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACpB,IAAI,WAAW,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC/C,OAAO,WAAW,EAAE;YAChB,SAAS,EAAE,CAAC;YACZ,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,SAAS,KAAK,CAAC,IAAI,GAAG,GAAG,SAAS,IAAI,EAAE,CAAC,CAAC;YAC7D,WAAW,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;SAC9C;QACD,OAAO,IAAI,CAAC;KACf;IAEa,iBAAiB,CAAC,GAAW;;YACvC,MAAM,QAAQ,GAA4B,MAAM,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACnG,IAAI,QAAQ,CAAC,gBAAgB,CAAC,OAAO,IAAI,QAAQ,CAAC,YAAY,EAAE;gBAC5D,OAAO,QAAQ,CAAC,YAAY,CAAC;aAChC;SACJ;KAAA;IAGa,WAAW,CAAC,GAAW,EAAE,MAAc;;YACjD,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBAC7B,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aACtC;YACD,IAAI,CAAC,MAAM,EAAE;gBACT,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC;qBACrC,KAAK,CAAC,CAAC,KAAK;oBACT,MAAM,oBAAoB,GAAG,aAAa,CAAC;iBAC9C,CAAC,CAAC;aACV;YACD,IAAI,OAAgB,CAAC;YACrB,MAAM,eAAe,GAA4B,MAAM,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC/G,IAAI,eAAe,CAAC,gBAAgB,CAAC,OAAO,IAAI,eAAe,CAAC,YAAY,EAAE;gBAC1E,IAAI,eAAe,CAAC,YAAY,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE;oBACzD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,GAAG,eAAe,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;oBAC7J,OAAO,GAAY,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;iBAC3E;qBAAM;oBACH,OAAO,GAAY,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC,OAAO,EAAE,eAAe,CAAC,YAAY,CAAC,CAAC;iBACpG;aACJ;YACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACrC,OAAO,OAAO,CAAC;SAClB;KAAA;IAEa,cAAc,CAAC,UAAkB;;YAC3C,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;YAC5B,MAAM,iBAAiB,GAA4B,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACpG,IAAI,iBAAiB,CAAC,aAAa,IAAI,iBAAiB,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/E,IAAI,CAAC,WAAW,GAAgB,IAAI,CAAC,UAAU,CAAC,kCAAkC,CAAC,SAAS,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC;gBAC/H,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC;aAC5D;iBAAM;gBACH,MAAM,sBAAsB,CAAC;aAChC;SACJ;KAAA;IAEa,SAAS;;YACnB,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;YACvB,MAAM,aAAa,GAA4B,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC3F,IAAI,aAAa,CAAC,aAAa,IAAI,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;gBACvE,IAAI,CAAC,MAAM,GAAe,IAAI,CAAC,UAAU,CAAC,kCAAkC,CAAC,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;aACvH;iBAAM;gBACH,MAAM,qBAAqB,CAAC;aAC/B;SACJ;KAAA;IAEO,uBAAuB;QAC3B,MAAM,GAAG,GAAW,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC1B,IAAI,EAAE,GAAW,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;;;;YAInD,IAAI,IAAI,GAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YACnD,IAAI,CAAC,IAAI,EAAE;gBACP,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;aACzB;YACD,MAAM,SAAS,GAAQ,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;YACzG,IAAI,SAAS,EAAE;gBACX,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;aAC9B;YACD,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC;SACvC;KACJ;IAEO,cAAc;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAc;YACrC,OAAO,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,SAAS,CAAC;SAC/C,CAAC,CAAC;KACN;IAEa,eAAe,CAAC,GAAmB,EAAE,UAAkB;;YACjE,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YACnE,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YACpF,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;SACpF;KAAA;IAEO,eAAe;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC5B,MAAM,IAAI,GAAa,CAAC,CAAC,QAAQ,CAAC;YAClC,OAAO,IAAI,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,UAAU,CAAC;SAClH,CAAC,CAAC;KACN;IAEO,YAAY,CAAC,GAAmB;QACpC,MAAM,WAAW,GAAG,IAAIE,IAAU,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACxD,MAAM,aAAa,GAAG,IAAIC,OAAa,EAAE,CAAC;QAC1C,WAAW,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACrC,MAAM,KAAK,GAAkB,IAAIA,OAAa,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAEnH,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAU;YAC5B,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SAC7B,CAAC,CAAC;QACH,GAAG,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KACtC;IAEO,MAAM;QACV,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,qBAAqB,EAAE,CAAC;KAChC;;;ICvaQ,gBAAgB,GAA7B,MAAa,gBAAgB;IAA7B;QAGW,YAAO,GAAa,EAAE,CAAC;QAGvB,gBAAW,GAAyB,IAAI,YAAY,EAAU,CAAC;KAEzE;EAAA;AALG;IADC,KAAK,EAAE;iDACsB;AAG9B;IADC,MAAM,EAAE;qDAC6D;AAN7D,gBAAgB;IAd5B,SAAS,CAAC;QACP,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE;;;;;;KAMT;;KAIJ,CAAC;GAEW,gBAAgB,CAQ5B;;ICVY,aAAa,GAA1B,MAAa,aAAa;EAEzB;AAFY,aAAa;IAXzB,QAAQ,CAAC;QACN,OAAO,EAAE;YACL,YAAY;SACf;QACD,YAAY,EAAE;YACV,gBAAgB;SACnB;QACD,OAAO,EAAE;YACL,gBAAgB;SACnB;KACJ,CAAC;GACW,aAAa,CAEzB;;ACbD,MAAM,kBAAkB;IAAxB;QAEW,aAAQ,GAAgB,EAAE,CAAC;QAC3B,aAAQ,GAAY,KAAK,CAAC;KACpC;CAAA;IAkCY,mBAAmB,GAAhC,MAAa,mBAAmB;IAAhC;QAMW,wBAAmB,GAAyB,EAAE,CAAC;QAG/C,mBAAc,GAA4B,IAAI,YAAY,EAAa,CAAC;KA6BlF;IApCG,IAAW,UAAU,CAAC,KAAkB;QACpC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;KAClC;IAOM,aAAa,CAAC,kBAAsC,EAAE,UAAsB;QAC/E,UAAU,CAAC,cAAc,EAAE,CAAC;QAC5B,UAAU,CAAC,wBAAwB,EAAE,CAAC;QACtC,kBAAkB,CAAC,QAAQ,GAAG,CAAC,kBAAkB,CAAC,QAAQ,CAAC;KAC9D;IAEM,eAAe,CAAC,SAAoB,EAAE,UAAsB;QAC/D,UAAU,CAAC,cAAc,EAAE,CAAC;QAC5B,UAAU,CAAC,wBAAwB,EAAE,CAAC;QACtC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KACvC;IAEO,kBAAkB,CAAC,KAAkB;QACzC,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC;QACpC,IAAI,kBAAsC,CAAC;QAC3C,KAAK,CAAC,OAAO,CAAC,CAAC;YACX,IAAI,CAAC,CAAC,iBAAiB,KAAK,CAAC,EAAE;gBAC3B,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC;gBAC9C,kBAAkB,CAAC,SAAS,GAAG,CAAC,CAAC;gBACjC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;aACrD;iBAAM,IAAI,CAAC,CAAC,iBAAiB,GAAG,CAAC,EAAE;gBAChC,IAAI,kBAAkB,EAAE;oBACpB,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACvC;aACJ;SACJ,CAAC,CAAC;KACN;EACJ;AApCG;IADC,KAAK,EAAE;qDAGP;AAKD;IADC,MAAM,EAAE;2DACsE;AATtE,mBAAmB;IAhC/B,SAAS,CAAC;QACP,QAAQ,EAAE,YAAY;QACtB,QAAQ,EAAE;;;;;;;;;;;;;;;;;KAiBT;QAID,UAAU,EAAE;YACR,OAAO,CAAC,kBAAkB,EAAE;gBACxB,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAC,QAAQ,EAAE,GAAG,EAAC,CAAC,CAAC;gBACrC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,EAAC,QAAQ,EAAE,GAAG,EAAC,CAAC,CAAC;gBAClC,UAAU,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;aACzC,CAAC;SACL;;KACJ,CAAC;GAEW,mBAAmB,CAsC/B;;ICjEY,gBAAgB,GAA7B,MAAa,gBAAgB;EAE5B;AAFY,gBAAgB;IAX5B,QAAQ,CAAC;QACN,OAAO,EAAE;YACL,YAAY;SACf;QACD,YAAY,EAAE;YACV,mBAAmB;SACtB;QACD,OAAO,EAAE;YACL,mBAAmB;SACtB;KACJ,CAAC;GACW,gBAAgB,CAE5B;;ACjBD;;;;;;"}
|