Files
nothoughts/node_modules/pixi.js/lib/scene/sprite-nine-slice/NineSliceSprite.mjs.map
2025-08-04 18:57:35 +02:00

1 line
18 KiB
Plaintext

{"version":3,"file":"NineSliceSprite.mjs","sources":["../../../src/scene/sprite-nine-slice/NineSliceSprite.ts"],"sourcesContent":["import { Texture } from '../../rendering/renderers/shared/texture/Texture';\nimport { deprecation, v8_0_0 } from '../../utils/logging/deprecation';\nimport { ViewContainer } from '../view/View';\nimport { NineSliceGeometry } from './NineSliceGeometry';\n\nimport type { Size } from '../../maths/misc/Size';\nimport type { View } from '../../rendering/renderers/shared/view/View';\nimport type { Bounds, BoundsData } from '../container/bounds/Bounds';\nimport type { ContainerOptions } from '../container/Container';\nimport type { Optional } from '../container/container-mixins/measureMixin';\nimport type { DestroyOptions } from '../container/destroyTypes';\n\n/**\n * Constructor options used for `NineSliceSprite` instances.\n * ```js\n * const nineSliceSprite = new NineSliceSprite({\n * texture: Texture.from('button.png'),\n * leftWidth: 20,\n * topHeight: 20,\n * rightWidth: 20,\n * bottomHeight: 20,\n * });\n * ```\n * @see {@link scene.NineSliceSprite}\n * @memberof scene\n */\nexport interface NineSliceSpriteOptions extends ContainerOptions\n{\n /** The texture to use on the NineSliceSprite. */\n texture: Texture;\n /** Width of the left vertical bar (A) */\n leftWidth?: number;\n /** Height of the top horizontal bar (C) */\n topHeight?: number;\n /** Width of the right vertical bar (B) */\n rightWidth?: number;\n /** Height of the bottom horizontal bar (D) */\n bottomHeight?: number;\n /** Width of the NineSliceSprite, setting this will actually modify the vertices and not the UV's of this plane. */\n width?: number;\n /** Height of the NineSliceSprite, setting this will actually modify the vertices and not UV's of this plane. */\n height?: number;\n /** Whether or not to round the x/y position. */\n roundPixels?: boolean;\n}\n\n/**\n * The NineSliceSprite allows you to stretch a texture using 9-slice scaling. The corners will remain unscaled (useful\n * for buttons with rounded corners for example) and the other areas will be scaled horizontally and or vertically\n *\n * <pre>\n * A B\n * +---+----------------------+---+\n * C | 1 | 2 | 3 |\n * +---+----------------------+---+\n * | | | |\n * | 4 | 5 | 6 |\n * | | | |\n * +---+----------------------+---+\n * D | 7 | 8 | 9 |\n * +---+----------------------+---+\n * When changing this objects width and/or height:\n * areas 1 3 7 and 9 will remain unscaled.\n * areas 2 and 8 will be stretched horizontally\n * areas 4 and 6 will be stretched vertically\n * area 5 will be stretched both horizontally and vertically\n * </pre>\n * @example\n * import { NineSliceSprite, Texture } from 'pixi.js';\n *\n * const plane9 = new NineSliceSprite(Texture.from('BoxWithRoundedCorners.png'), 15, 15, 15, 15);\n * @memberof scene\n */\nexport class NineSliceSprite extends ViewContainer implements View\n{\n /** The default options, used to override the initial values of any options passed in the constructor. */\n public static defaultOptions: NineSliceSpriteOptions = {\n /** @default Texture.EMPTY */\n texture: Texture.EMPTY,\n };\n\n public override readonly renderPipeId: string = 'nineSliceSprite';\n public _texture: Texture;\n\n public batched = true;\n\n private _leftWidth: number;\n private _topHeight: number;\n private _rightWidth: number;\n private _bottomHeight: number;\n private _width: number;\n private _height: number;\n\n public _didSpriteUpdate = true;\n\n /**\n * @param {scene.NineSliceSpriteOptions|Texture} options - Options to use\n * @param options.texture - The texture to use on the NineSliceSprite.\n * @param options.leftWidth - Width of the left vertical bar (A)\n * @param options.topHeight - Height of the top horizontal bar (C)\n * @param options.rightWidth - Width of the right vertical bar (B)\n * @param options.bottomHeight - Height of the bottom horizontal bar (D)\n * @param options.width - Width of the NineSliceSprite,\n * setting this will actually modify the vertices and not the UV's of this plane.\n * @param options.height - Height of the NineSliceSprite,\n * setting this will actually modify the vertices and not UV's of this plane.\n */\n constructor(options: NineSliceSpriteOptions | Texture)\n {\n if ((options instanceof Texture))\n {\n options = { texture: options };\n }\n\n const {\n width,\n height,\n leftWidth,\n rightWidth,\n topHeight,\n bottomHeight,\n texture,\n roundPixels,\n ...rest\n } = options;\n\n super({\n label: 'NineSliceSprite',\n ...rest\n });\n\n this._leftWidth = leftWidth ?? texture?.defaultBorders?.left ?? NineSliceGeometry.defaultOptions.leftWidth;\n this._topHeight = topHeight ?? texture?.defaultBorders?.top ?? NineSliceGeometry.defaultOptions.topHeight;\n this._rightWidth = rightWidth ?? texture?.defaultBorders?.right ?? NineSliceGeometry.defaultOptions.rightWidth;\n this._bottomHeight = bottomHeight\n ?? texture?.defaultBorders?.bottom\n ?? NineSliceGeometry.defaultOptions.bottomHeight;\n this.bounds.maxX = this._width = width ?? texture.width ?? NineSliceGeometry.defaultOptions.width;\n this.bounds.maxY = this._height = height ?? texture.height ?? NineSliceGeometry.defaultOptions.height;\n\n this.allowChildren = false;\n this.texture = texture ?? NineSliceSprite.defaultOptions.texture;\n this.roundPixels = roundPixels ?? false;\n }\n\n /** The local bounds of the view. */\n public get bounds(): BoundsData\n {\n return this._bounds;\n }\n\n /** The width of the NineSliceSprite, setting this will actually modify the vertices and UV's of this plane. */\n override get width(): number\n {\n return this._width;\n }\n\n override set width(value: number)\n {\n this.bounds.maxX = this._width = value;\n this.onViewUpdate();\n }\n\n /** The height of the NineSliceSprite, setting this will actually modify the vertices and UV's of this plane. */\n override get height(): number\n {\n return this._height;\n }\n\n override set height(value: number)\n {\n this.bounds.maxY = this._height = value;\n this.onViewUpdate();\n }\n\n /**\n * Sets the size of the NiceSliceSprite to the specified width and height.\n * setting this will actually modify the vertices and UV's of this plane\n * This is faster than setting the width and height separately.\n * @param value - This can be either a number or a [Size]{@link Size} object.\n * @param height - The height to set. Defaults to the value of `width` if not provided.\n */\n public override setSize(value: number | Optional<Size, 'height'>, height?: number): void\n {\n if (typeof value === 'object')\n {\n height = value.height ?? value.width;\n value = value.width;\n }\n\n this.bounds.maxX = this._width = value;\n this.bounds.maxY = this._height = height ?? value;\n this.onViewUpdate();\n }\n\n /**\n * Retrieves the size of the NineSliceSprite as a [Size]{@link Size} object.\n * This is faster than get the width and height separately.\n * @param out - Optional object to store the size in.\n * @returns - The size of the NineSliceSprite.\n */\n public override getSize(out?: Size): Size\n {\n out ||= {} as Size;\n out.width = this._width;\n out.height = this._height;\n\n return out;\n }\n\n /** The width of the left column (a) of the NineSliceSprite. */\n get leftWidth(): number\n {\n return this._leftWidth;\n }\n\n set leftWidth(value: number)\n {\n this._leftWidth = value;\n\n this.onViewUpdate();\n }\n\n /** The width of the right column (b) of the NineSliceSprite. */\n get topHeight(): number\n {\n return this._topHeight;\n }\n\n set topHeight(value: number)\n {\n this._topHeight = value;\n this.onViewUpdate();\n }\n\n /** The width of the right column (b) of the NineSliceSprite. */\n get rightWidth(): number\n {\n return this._rightWidth;\n }\n\n set rightWidth(value: number)\n {\n this._rightWidth = value;\n this.onViewUpdate();\n }\n\n /** The width of the right column (b) of the NineSliceSprite. */\n get bottomHeight(): number\n {\n return this._bottomHeight;\n }\n\n set bottomHeight(value: number)\n {\n this._bottomHeight = value;\n this.onViewUpdate();\n }\n\n /** The texture that the NineSliceSprite is using. */\n get texture(): Texture\n {\n return this._texture;\n }\n\n set texture(value: Texture)\n {\n value ||= Texture.EMPTY;\n\n const currentTexture = this._texture;\n\n if (currentTexture === value) return;\n\n if (currentTexture && currentTexture.dynamic) currentTexture.off('update', this.onViewUpdate, this);\n if (value.dynamic) value.on('update', this.onViewUpdate, this);\n\n this._texture = value;\n\n this.onViewUpdate();\n }\n\n /** The original width of the texture */\n get originalWidth()\n {\n return this._texture.width;\n }\n\n /** The original height of the texture */\n get originalHeight()\n {\n return this._texture.height;\n }\n\n protected onViewUpdate()\n {\n this._didViewChangeTick++;\n\n this._didSpriteUpdate = true;\n\n if (this.didViewUpdate) return;\n this.didViewUpdate = true;\n\n const renderGroup = this.renderGroup || this.parentRenderGroup;\n\n if (renderGroup)\n {\n renderGroup.onChildViewUpdate(this);\n }\n }\n\n /**\n * Adds the bounds of this object to the bounds object.\n * @param bounds - The output bounds object.\n */\n public addBounds(bounds: Bounds)\n {\n const _bounds = this.bounds;\n\n bounds.addFrame(_bounds.minX, _bounds.minY, _bounds.maxX, _bounds.maxY);\n }\n\n /**\n * Destroys this sprite renderable and optionally its texture.\n * @param options - Options parameter. A boolean will act as if all options\n * have been set to that value\n * @param {boolean} [options.texture=false] - Should it destroy the current texture of the renderable as well\n * @param {boolean} [options.textureSource=false] - Should it destroy the textureSource of the renderable as well\n */\n public override destroy(options?: DestroyOptions): void\n {\n super.destroy(options);\n\n const destroyTexture = typeof options === 'boolean' ? options : options?.texture;\n\n if (destroyTexture)\n {\n const destroyTextureSource = typeof options === 'boolean' ? options : options?.textureSource;\n\n this._texture.destroy(destroyTextureSource);\n }\n\n this._texture = null;\n }\n}\n\n/**\n * Please use the `NineSliceSprite` class instead.\n * @deprecated since 8.0.0\n * @memberof scene\n */\nexport class NineSlicePlane extends NineSliceSprite\n{\n constructor(options: NineSliceSpriteOptions | Texture);\n /** @deprecated since 8.0.0 */\n constructor(texture: Texture, leftWidth: number, topHeight: number, rightWidth: number, bottomHeight: number);\n constructor(...args: [NineSliceSpriteOptions | Texture] | [Texture, number, number, number, number])\n {\n let options = args[0];\n\n if (options instanceof Texture)\n {\n // #if _DEBUG\n // eslint-disable-next-line max-len\n deprecation(v8_0_0, 'NineSlicePlane now uses the options object {texture, leftWidth, rightWidth, topHeight, bottomHeight}');\n // #endif\n\n options = {\n texture: options,\n leftWidth: args[1],\n topHeight: args[2],\n rightWidth: args[3],\n bottomHeight: args[4],\n };\n }\n\n // #if _DEBUG\n deprecation(v8_0_0, 'NineSlicePlane is deprecated. Use NineSliceSprite instead.');\n // #endif\n\n super(options);\n }\n}\n"],"names":[],"mappings":";;;;;;AAyEO,MAAM,gBAAA,GAAN,MAAM,gBAAA,SAAwB,aACrC,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiCI,YAAY,OACZ,EAAA;AACI,IAAA,IAAK,mBAAmB,OACxB,EAAA;AACI,MAAU,OAAA,GAAA,EAAE,SAAS,OAAQ,EAAA,CAAA;AAAA,KACjC;AAEA,IAAM,MAAA;AAAA,MACF,KAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA,OAAA;AAAA,MACA,WAAA;AAAA,MACA,GAAG,IAAA;AAAA,KACH,GAAA,OAAA,CAAA;AAEJ,IAAM,KAAA,CAAA;AAAA,MACF,KAAO,EAAA,iBAAA;AAAA,MACP,GAAG,IAAA;AAAA,KACN,CAAA,CAAA;AAhDL,IAAA,IAAA,CAAyB,YAAuB,GAAA,iBAAA,CAAA;AAGhD,IAAA,IAAA,CAAO,OAAU,GAAA,IAAA,CAAA;AASjB,IAAA,IAAA,CAAO,gBAAmB,GAAA,IAAA,CAAA;AAsCtB,IAAA,IAAA,CAAK,aAAa,SAAa,IAAA,OAAA,EAAS,cAAgB,EAAA,IAAA,IAAQ,kBAAkB,cAAe,CAAA,SAAA,CAAA;AACjG,IAAA,IAAA,CAAK,aAAa,SAAa,IAAA,OAAA,EAAS,cAAgB,EAAA,GAAA,IAAO,kBAAkB,cAAe,CAAA,SAAA,CAAA;AAChG,IAAA,IAAA,CAAK,cAAc,UAAc,IAAA,OAAA,EAAS,cAAgB,EAAA,KAAA,IAAS,kBAAkB,cAAe,CAAA,UAAA,CAAA;AACpG,IAAA,IAAA,CAAK,gBAAgB,YACE,IAAA,OAAA,EAAS,cAAgB,EAAA,MAAA,IACzB,kBAAkB,cAAe,CAAA,YAAA,CAAA;AACxD,IAAK,IAAA,CAAA,MAAA,CAAO,OAAO,IAAK,CAAA,MAAA,GAAS,SAAS,OAAQ,CAAA,KAAA,IAAS,kBAAkB,cAAe,CAAA,KAAA,CAAA;AAC5F,IAAK,IAAA,CAAA,MAAA,CAAO,OAAO,IAAK,CAAA,OAAA,GAAU,UAAU,OAAQ,CAAA,MAAA,IAAU,kBAAkB,cAAe,CAAA,MAAA,CAAA;AAE/F,IAAA,IAAA,CAAK,aAAgB,GAAA,KAAA,CAAA;AACrB,IAAK,IAAA,CAAA,OAAA,GAAU,OAAW,IAAA,gBAAA,CAAgB,cAAe,CAAA,OAAA,CAAA;AACzD,IAAA,IAAA,CAAK,cAAc,WAAe,IAAA,KAAA,CAAA;AAAA,GACtC;AAAA;AAAA,EAGA,IAAW,MACX,GAAA;AACI,IAAA,OAAO,IAAK,CAAA,OAAA,CAAA;AAAA,GAChB;AAAA;AAAA,EAGA,IAAa,KACb,GAAA;AACI,IAAA,OAAO,IAAK,CAAA,MAAA,CAAA;AAAA,GAChB;AAAA,EAEA,IAAa,MAAM,KACnB,EAAA;AACI,IAAK,IAAA,CAAA,MAAA,CAAO,IAAO,GAAA,IAAA,CAAK,MAAS,GAAA,KAAA,CAAA;AACjC,IAAA,IAAA,CAAK,YAAa,EAAA,CAAA;AAAA,GACtB;AAAA;AAAA,EAGA,IAAa,MACb,GAAA;AACI,IAAA,OAAO,IAAK,CAAA,OAAA,CAAA;AAAA,GAChB;AAAA,EAEA,IAAa,OAAO,KACpB,EAAA;AACI,IAAK,IAAA,CAAA,MAAA,CAAO,IAAO,GAAA,IAAA,CAAK,OAAU,GAAA,KAAA,CAAA;AAClC,IAAA,IAAA,CAAK,YAAa,EAAA,CAAA;AAAA,GACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASgB,OAAA,CAAQ,OAA0C,MAClE,EAAA;AACI,IAAI,IAAA,OAAO,UAAU,QACrB,EAAA;AACI,MAAS,MAAA,GAAA,KAAA,CAAM,UAAU,KAAM,CAAA,KAAA,CAAA;AAC/B,MAAA,KAAA,GAAQ,KAAM,CAAA,KAAA,CAAA;AAAA,KAClB;AAEA,IAAK,IAAA,CAAA,MAAA,CAAO,IAAO,GAAA,IAAA,CAAK,MAAS,GAAA,KAAA,CAAA;AACjC,IAAA,IAAA,CAAK,MAAO,CAAA,IAAA,GAAO,IAAK,CAAA,OAAA,GAAU,MAAU,IAAA,KAAA,CAAA;AAC5C,IAAA,IAAA,CAAK,YAAa,EAAA,CAAA;AAAA,GACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQgB,QAAQ,GACxB,EAAA;AACI,IAAA,GAAA,KAAA,GAAA,GAAQ,EAAC,CAAA,CAAA;AACT,IAAA,GAAA,CAAI,QAAQ,IAAK,CAAA,MAAA,CAAA;AACjB,IAAA,GAAA,CAAI,SAAS,IAAK,CAAA,OAAA,CAAA;AAElB,IAAO,OAAA,GAAA,CAAA;AAAA,GACX;AAAA;AAAA,EAGA,IAAI,SACJ,GAAA;AACI,IAAA,OAAO,IAAK,CAAA,UAAA,CAAA;AAAA,GAChB;AAAA,EAEA,IAAI,UAAU,KACd,EAAA;AACI,IAAA,IAAA,CAAK,UAAa,GAAA,KAAA,CAAA;AAElB,IAAA,IAAA,CAAK,YAAa,EAAA,CAAA;AAAA,GACtB;AAAA;AAAA,EAGA,IAAI,SACJ,GAAA;AACI,IAAA,OAAO,IAAK,CAAA,UAAA,CAAA;AAAA,GAChB;AAAA,EAEA,IAAI,UAAU,KACd,EAAA;AACI,IAAA,IAAA,CAAK,UAAa,GAAA,KAAA,CAAA;AAClB,IAAA,IAAA,CAAK,YAAa,EAAA,CAAA;AAAA,GACtB;AAAA;AAAA,EAGA,IAAI,UACJ,GAAA;AACI,IAAA,OAAO,IAAK,CAAA,WAAA,CAAA;AAAA,GAChB;AAAA,EAEA,IAAI,WAAW,KACf,EAAA;AACI,IAAA,IAAA,CAAK,WAAc,GAAA,KAAA,CAAA;AACnB,IAAA,IAAA,CAAK,YAAa,EAAA,CAAA;AAAA,GACtB;AAAA;AAAA,EAGA,IAAI,YACJ,GAAA;AACI,IAAA,OAAO,IAAK,CAAA,aAAA,CAAA;AAAA,GAChB;AAAA,EAEA,IAAI,aAAa,KACjB,EAAA;AACI,IAAA,IAAA,CAAK,aAAgB,GAAA,KAAA,CAAA;AACrB,IAAA,IAAA,CAAK,YAAa,EAAA,CAAA;AAAA,GACtB;AAAA;AAAA,EAGA,IAAI,OACJ,GAAA;AACI,IAAA,OAAO,IAAK,CAAA,QAAA,CAAA;AAAA,GAChB;AAAA,EAEA,IAAI,QAAQ,KACZ,EAAA;AACI,IAAA,KAAA,KAAA,KAAA,GAAU,OAAQ,CAAA,KAAA,CAAA,CAAA;AAElB,IAAA,MAAM,iBAAiB,IAAK,CAAA,QAAA,CAAA;AAE5B,IAAA,IAAI,cAAmB,KAAA,KAAA;AAAO,MAAA,OAAA;AAE9B,IAAA,IAAI,kBAAkB,cAAe,CAAA,OAAA;AAAS,MAAA,cAAA,CAAe,GAAI,CAAA,QAAA,EAAU,IAAK,CAAA,YAAA,EAAc,IAAI,CAAA,CAAA;AAClG,IAAA,IAAI,KAAM,CAAA,OAAA;AAAS,MAAA,KAAA,CAAM,EAAG,CAAA,QAAA,EAAU,IAAK,CAAA,YAAA,EAAc,IAAI,CAAA,CAAA;AAE7D,IAAA,IAAA,CAAK,QAAW,GAAA,KAAA,CAAA;AAEhB,IAAA,IAAA,CAAK,YAAa,EAAA,CAAA;AAAA,GACtB;AAAA;AAAA,EAGA,IAAI,aACJ,GAAA;AACI,IAAA,OAAO,KAAK,QAAS,CAAA,KAAA,CAAA;AAAA,GACzB;AAAA;AAAA,EAGA,IAAI,cACJ,GAAA;AACI,IAAA,OAAO,KAAK,QAAS,CAAA,MAAA,CAAA;AAAA,GACzB;AAAA,EAEU,YACV,GAAA;AACI,IAAK,IAAA,CAAA,kBAAA,EAAA,CAAA;AAEL,IAAA,IAAA,CAAK,gBAAmB,GAAA,IAAA,CAAA;AAExB,IAAA,IAAI,IAAK,CAAA,aAAA;AAAe,MAAA,OAAA;AACxB,IAAA,IAAA,CAAK,aAAgB,GAAA,IAAA,CAAA;AAErB,IAAM,MAAA,WAAA,GAAc,IAAK,CAAA,WAAA,IAAe,IAAK,CAAA,iBAAA,CAAA;AAE7C,IAAA,IAAI,WACJ,EAAA;AACI,MAAA,WAAA,CAAY,kBAAkB,IAAI,CAAA,CAAA;AAAA,KACtC;AAAA,GACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMO,UAAU,MACjB,EAAA;AACI,IAAA,MAAM,UAAU,IAAK,CAAA,MAAA,CAAA;AAErB,IAAO,MAAA,CAAA,QAAA,CAAS,QAAQ,IAAM,EAAA,OAAA,CAAQ,MAAM,OAAQ,CAAA,IAAA,EAAM,QAAQ,IAAI,CAAA,CAAA;AAAA,GAC1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASgB,QAAQ,OACxB,EAAA;AACI,IAAA,KAAA,CAAM,QAAQ,OAAO,CAAA,CAAA;AAErB,IAAA,MAAM,cAAiB,GAAA,OAAO,OAAY,KAAA,SAAA,GAAY,UAAU,OAAS,EAAA,OAAA,CAAA;AAEzE,IAAA,IAAI,cACJ,EAAA;AACI,MAAA,MAAM,oBAAuB,GAAA,OAAO,OAAY,KAAA,SAAA,GAAY,UAAU,OAAS,EAAA,aAAA,CAAA;AAE/E,MAAK,IAAA,CAAA,QAAA,CAAS,QAAQ,oBAAoB,CAAA,CAAA;AAAA,KAC9C;AAEA,IAAA,IAAA,CAAK,QAAW,GAAA,IAAA,CAAA;AAAA,GACpB;AACJ,CAAA,CAAA;AAAA;AA9Qa,gBAAA,CAGK,cAAyC,GAAA;AAAA;AAAA,EAEnD,SAAS,OAAQ,CAAA,KAAA;AACrB,CAAA,CAAA;AANG,IAAM,eAAN,GAAA,iBAAA;AAqRA,MAAM,uBAAuB,eACpC,CAAA;AAAA,EAII,eAAe,IACf,EAAA;AACI,IAAI,IAAA,OAAA,GAAU,KAAK,CAAC,CAAA,CAAA;AAEpB,IAAA,IAAI,mBAAmB,OACvB,EAAA;AAGI,MAAA,WAAA,CAAY,QAAQ,sGAAsG,CAAA,CAAA;AAG1H,MAAU,OAAA,GAAA;AAAA,QACN,OAAS,EAAA,OAAA;AAAA,QACT,SAAA,EAAW,KAAK,CAAC,CAAA;AAAA,QACjB,SAAA,EAAW,KAAK,CAAC,CAAA;AAAA,QACjB,UAAA,EAAY,KAAK,CAAC,CAAA;AAAA,QAClB,YAAA,EAAc,KAAK,CAAC,CAAA;AAAA,OACxB,CAAA;AAAA,KACJ;AAGA,IAAA,WAAA,CAAY,QAAQ,4DAA4D,CAAA,CAAA;AAGhF,IAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AAAA,GACjB;AACJ;;;;"}