@geekybones/canvas-kit 1.0.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas-kit.js","sources":["../src/canvas/Application.ts","../src/canvas/CanvasKitActions.ts","../src/core/BaseElement.ts","../src/elements/Image/ImageElement.ts","../src/elements/Image/index.ts","../src/elements/Shape/strokeAlign.ts","../src/elements/Shape/Circle/CircleShape.ts","../src/elements/Shape/Line/LineShape.ts","../src/elements/Shape/Rectangle/RectangleShape.ts","../src/elements/Shape/Star/StarShape.ts","../src/elements/Shape/registry.ts","../src/elements/SVG/SVGElement.ts","../src/elements/SVG/index.ts","../src/elements/Text/textBackground.ts","../src/elements/Text/Fonts/Arial/Arial.ttf?url","../node_modules/.pnpm/opentype.js@2.0.0/node_modules/opentype.js/dist/opentype.mjs","../src/elements/Text/Vector/fontAdapter.ts","../node_modules/.pnpm/earcut@3.0.2/node_modules/earcut/src/earcut.js","../src/elements/Text/Vector/glyphGeometry.ts","../src/elements/Text/Vector/shader.ts","../src/elements/Text/Vector/vectorLayers.ts","../src/elements/Text/Vector/vectorLayout.ts","../src/elements/Text/Vector/vectorStyleTransforms.ts","../src/elements/Text/Vector/builder.ts","../src/elements/Text/Vector/deform.ts","../src/elements/Text/Vector/registry.ts","../src/elements/Text/Vector/render.ts","../src/elements/Text/textEffectMount.ts","../src/elements/Text/textEffectUpdate.ts","../src/elements/Text/textRaster.ts","../src/elements/Text/BaseTextElement.ts","../src/elements/Text/Vector/effects/Arch.ts","../src/elements/Text/Vector/effectBuilders.ts","../src/elements/Text/Vector/effects/Bridge.ts","../src/elements/Text/Vector/effects/Bulge.ts","../src/elements/Text/Vector/effects/Cone.ts","../src/elements/Text/Vector/effects/Curved.ts","../src/elements/Text/Vector/effects/Downward.ts","../src/elements/Text/Vector/effects/Normal.ts","../src/elements/Text/Vector/effects/Pinch.ts","../src/elements/Text/Vector/effects/Perspective.ts","../src/elements/Text/Vector/effects/Pointed.ts","../src/elements/Text/Vector/effects/Upward.ts","../src/elements/Text/Vector/effects/Valley.ts","../src/elements/Text/TextElement.ts","../src/elements/Text/registry.ts","../src/canvas/ElementLoader.ts","../src/core/canvasBounds.ts","../src/extensions/alignment/accessor.ts","../src/extensions/history/commands/CompositeCommand.ts","../src/extensions/history/commands/UpdateCommand.ts","../src/extensions/alignment/AlignmentManager.ts","../src/extensions/camera/accessor.ts","../src/core/KeyboardShortcuts.ts","../src/extensions/camera/CameraControls.ts","../src/extensions/camera/CameraTransforms.ts","../src/extensions/camera/CameraManager.ts","../src/core/duplicateOptions.ts","../src/extensions/contextMenu/accessor.ts","../src/extensions/contextMenu/MenuRenderer.ts","../src/extensions/history/commands/AddCommand.ts","../src/extensions/history/commands/RemoveCommand.ts","../src/extensions/contextMenu/ContextMenuManager.ts","../src/extensions/export/accessor.ts","../src/extensions/export/ExportManager.ts","../src/extensions/fonts/accessor.ts","../src/extensions/fonts/FontManager.ts","../src/extensions/grid/accessor.ts","../src/extensions/grid/GridManager.ts","../src/extensions/history/accessor.ts","../src/extensions/history/HistoryManager.ts","../src/extensions/interaction/accessor.ts","../src/core/Transform.ts","../src/extensions/interaction/icons/arrowBothSides.ts","../src/extensions/interaction/icons/copy.ts","../src/extensions/interaction/icons/move.ts","../src/extensions/interaction/icons/rotate.ts","../src/extensions/interaction/icons/trash.ts","../src/extensions/interaction/icons/index.ts","../src/extensions/interaction/controls/ControlHandle.ts","../src/extensions/interaction/BoundingBox.ts","../src/extensions/interaction/InteractionClipboard.ts","../src/extensions/interaction/InteractionActions.ts","../src/extensions/interaction/InteractionSelectionState.ts","../src/extensions/interaction/ResizeSession.ts","../src/extensions/interaction/ResizeStrategy.ts","../src/extensions/interaction/InteractionGestures.ts","../src/extensions/interaction/InteractionSelectionBindings.ts","../src/extensions/interaction/InteractionManager.ts","../src/extensions/history/commands/LayerCommand.ts","../src/extensions/layering/accessor.ts","../src/extensions/layering/LayerManager.ts","../src/extensions/performance/accessor.ts","../src/extensions/performance/CacheManager.ts","../src/extensions/performance/DirtyTracker.ts","../src/extensions/performance/PerformanceManager.ts","../src/extensions/serialization/accessor.ts","../src/extensions/serialization/defaultAdapters.ts","../src/extensions/serialization/SerializationManager.ts","../src/extensions/snap/types.ts","../src/extensions/snap/accessor.ts","../src/extensions/snap/SnapLines.ts","../src/extensions/snap/SnapResolver.ts","../src/extensions/snap/SnapManager.ts","../src/extensions/index.ts","../src/canvas/ExtensionLoader.ts","../src/core/ElementRegistry.ts","../node_modules/.pnpm/eventemitter3@5.0.4/node_modules/eventemitter3/index.js","../src/core/Events.ts","../src/canvas/CanvasKit.ts","../src/elements/Shape/index.ts","../src/elements/Text/index.ts"],"sourcesContent":["import { Application as PixiApplication } from 'pixi.js';\n\nexport interface ApplicationConfig {\n width?: number;\n height?: number;\n backgroundColor?: string;\n}\n\nexport class Application {\n private app!: PixiApplication;\n public readonly ready: Promise<void>;\n private destroyed = false;\n private canvasEl: HTMLCanvasElement | null = null;\n\n constructor(\n private readonly container: HTMLElement,\n private readonly config: ApplicationConfig = {},\n ) {\n this.ready = this.initAsync();\n }\n\n private async initAsync(): Promise<void> {\n this.app = new PixiApplication();\n\n await this.app.init({\n width: this.config.width ?? 1920,\n height: this.config.height ?? 1080,\n background: this.config.backgroundColor ?? '#ffffff',\n antialias: true,\n autoDensity: true,\n resolution: typeof window !== 'undefined' ? (window.devicePixelRatio ?? 1) : 1,\n });\n\n this.canvasEl = this.app.canvas as HTMLCanvasElement;\n this.container.appendChild(this.canvasEl);\n\n this.canvasEl.setAttribute('tabindex', '0');\n this.canvasEl.style.outline = 'none';\n\n this.app.stage.sortableChildren = true;\n this.app.stage.eventMode = 'static';\n this.app.stage.hitArea = this.app.screen;\n\n if (this.destroyed) {\n this.destroy();\n }\n }\n\n getPixiApp(): PixiApplication {\n if (!this.app) throw new Error('CanvasKit not initialized — await canvas.ready first');\n return this.app;\n }\n\n getCanvas(): HTMLCanvasElement {\n if (this.canvasEl) return this.canvasEl;\n return this.container.querySelector('canvas') as HTMLCanvasElement;\n }\n\n destroy(): void {\n this.destroyed = true;\n\n const canvas = this.canvasEl;\n if (canvas?.parentNode === this.container) {\n this.container.removeChild(canvas);\n }\n this.canvasEl = null;\n\n if (this.app && (this.app as unknown as { renderer?: unknown }).renderer) {\n this.app.destroy();\n }\n }\n}\n","import type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport type { ElementRegistry } from '@/core/ElementRegistry';\nimport type { HistoryManager } from '@/extensions/history/HistoryManager';\nimport type { HistoryTrack } from '@/extensions/history/types';\nimport type { SerializationManager } from '@/extensions/serialization/SerializationManager';\nimport type { SerializedElement } from '@/extensions/serialization/types';\n\ntype UpdateKind = Exclude<HistoryTrack, 'add' | 'remove'> | null;\n\ntype CanvasKitActionsContext = {\n registry: ElementRegistry;\n getHistoryManager: () => HistoryManager | undefined;\n getSerializationManager: () => SerializationManager | undefined;\n addElement: (element: BaseElement<BaseOptions>) => Promise<void>;\n removeElement: (id: string) => void;\n updateElement: (element: BaseElement<BaseOptions>, next: Partial<BaseOptions>) => Promise<void>;\n getUpdateKind: (element: BaseElement<BaseOptions>, next: Partial<BaseOptions>) => UpdateKind;\n};\n\nexport function applyHistoryAwareChange(\n getHistoryManager: () => HistoryManager | undefined,\n fallback: () => Promise<void> | void,\n withHistory: (history: HistoryManager) => Promise<void> | void,\n): Promise<void> {\n const history = getHistoryManager();\n if (!history) {\n return Promise.resolve(fallback());\n }\n\n return Promise.resolve(withHistory(history));\n}\n\nexport function addWithHistory(\n ctx: CanvasKitActionsContext,\n element: BaseElement<BaseOptions>,\n): Promise<void> {\n const existing = ctx.registry.get(element.getId());\n\n return applyHistoryAwareChange(\n ctx.getHistoryManager,\n () => ctx.addElement(element),\n (history) => {\n if (existing) {\n const kind =\n existing.getType() === 'text'\n ? 'text'\n : ctx.getUpdateKind(existing, element.getOptions());\n if (!kind) {\n return ctx.addElement(element);\n }\n\n return history.update(existing.getId(), kind, existing.getOptions(), element.getOptions());\n }\n\n return history.add([element.getOptions()]);\n },\n );\n}\n\nexport function removeWithHistory(ctx: CanvasKitActionsContext, id: string): Promise<void> {\n return applyHistoryAwareChange(\n ctx.getHistoryManager,\n () => ctx.removeElement(id),\n (history) => history.remove([id]),\n );\n}\n\nexport function updateWithHistory(\n ctx: CanvasKitActionsContext,\n id: string,\n next: Partial<BaseOptions>,\n): Promise<void> {\n const element = ctx.registry.get(id);\n if (!element) {\n return Promise.resolve();\n }\n\n const kind = ctx.getUpdateKind(element, next);\n return applyHistoryAwareChange(\n ctx.getHistoryManager,\n () => ctx.updateElement(element, next),\n (history) => {\n if (!kind) {\n return ctx.updateElement(element, next);\n }\n\n return history.update(id, kind, element.getOptions(), next);\n },\n );\n}\n\nexport function clearElements(\n registry: ElementRegistry,\n removeElement: (id: string) => void,\n): void {\n for (const id of [...registry.getAll().keys()]) {\n removeElement(id);\n }\n}\n\nexport function getElementSnapshot(\n registry: ElementRegistry,\n getSerializationManager: () => SerializationManager | undefined,\n id: string,\n): SerializedElement | undefined {\n const element = registry.get(id);\n if (!element) {\n return undefined;\n }\n\n const serializer = getSerializationManager();\n return serializer ? serializer.serialize(element) : (element.getOptions() as SerializedElement);\n}\n","import type { Container } from 'pixi.js';\nimport type { BaseOptions } from '@/core/BaseOptions';\n\nexport abstract class BaseElement<TOptions extends BaseOptions> {\n protected options: TOptions;\n protected displayObject!: Container;\n\n constructor(options: TOptions) {\n this.options = { ...options };\n }\n\n abstract init(): void | Promise<void>;\n abstract update(next: Partial<TOptions>): void | Promise<void>;\n abstract destroy(): void;\n\n applyDefaultPosition(x: number, y: number): void {\n if (this.options.x === undefined) this.options.x = x;\n if (this.options.y === undefined) this.options.y = y;\n }\n\n getId(): string {\n return this.options.id;\n }\n\n getType(): string {\n return this.options.type;\n }\n\n getOptions(): TOptions {\n return { ...this.options };\n }\n\n getDisplayObject(): Container {\n return this.displayObject;\n }\n\n setZIndex(zIndex: number): void {\n this.options.zIndex = zIndex;\n this.displayObject.zIndex = zIndex;\n }\n\n protected applyBaseTransform(): void {\n const {\n x = 0,\n y = 0,\n rotationDeg = 0,\n scaleX = 1,\n scaleY = 1,\n zIndex = 0,\n visible = true,\n } = this.options;\n\n this.displayObject.position.set(x, y);\n this.displayObject.rotation = (rotationDeg * Math.PI) / 180;\n this.displayObject.scale.set(scaleX, scaleY);\n this.displayObject.zIndex = zIndex;\n this.displayObject.visible = visible;\n }\n\n protected centerPivot(): void {\n const bounds = this.displayObject.getLocalBounds();\n this.displayObject.pivot.set(bounds.x + bounds.width / 2, bounds.y + bounds.height / 2);\n }\n}\n","import { Assets, Container, Sprite } from 'pixi.js';\nimport { BaseElement } from '@/core/BaseElement';\nimport type { ImageOptions } from '@/elements/Image/ImageOptions';\n\nexport class ImageElement extends BaseElement<ImageOptions> {\n private sprite: Sprite | null = null;\n\n async init(): Promise<void> {\n this.displayObject = new Container();\n await this.loadSprite();\n this.applyBaseTransform();\n this.centerPivot();\n }\n\n async update(next: Partial<ImageOptions>): Promise<void> {\n const srcChanged = next.src !== undefined && next.src !== this.options.src;\n Object.assign(this.options, next);\n\n if (srcChanged) {\n await this.loadSprite();\n } else if (this.sprite) {\n if (next.width !== undefined) this.sprite.width = next.width;\n if (next.height !== undefined) this.sprite.height = next.height;\n if (next.tint !== undefined) this.sprite.tint = next.tint;\n }\n\n this.applyBaseTransform();\n this.centerPivot();\n }\n\n destroy(): void {\n this.displayObject.destroy({ children: true });\n }\n\n private async loadSprite(): Promise<void> {\n this.displayObject.removeChildren();\n const texture = await Assets.load(this.options.src);\n this.sprite = new Sprite(texture);\n\n if (this.options.width !== undefined) this.sprite.width = this.options.width;\n if (this.options.height !== undefined) this.sprite.height = this.options.height;\n if (this.options.tint !== undefined) this.sprite.tint = this.options.tint;\n\n this.displayObject.addChild(this.sprite);\n }\n}\n","import type { ElementFactory } from '@/core/ElementRegistry';\nimport { ImageElement } from '@/elements/Image/ImageElement';\nimport type { ImageOptions } from '@/elements/Image/ImageOptions';\n\nexport const IMAGE_FACTORIES: Record<string, ElementFactory> = {\n image: (opts) => new ImageElement(opts as ImageOptions),\n};\n\nfunction create(options: ImageOptions): ImageElement {\n return new ImageElement(options);\n}\n\nexport const Image = {\n create,\n factories: IMAGE_FACTORIES,\n} as const;\n\nexport type { ImageOptions };\nexport { ImageElement };\n","export type StrokeAlign = 'inside' | 'center' | 'outside';\n\nexport function getStrokeAlignment(strokeAlign?: StrokeAlign): number {\n switch (strokeAlign) {\n case 'inside':\n return 1;\n case 'outside':\n return 0;\n default:\n return 0.5;\n }\n}\n","import { Container, Graphics } from 'pixi.js';\nimport { BaseElement } from '@/core/BaseElement';\nimport type { CircleOptions } from '@/elements/Shape/Circle/CircleOptions';\nimport { getStrokeAlignment } from '@/elements/Shape/strokeAlign';\n\nexport class CircleShape extends BaseElement<CircleOptions> {\n private graphics: Graphics | null = null;\n\n init(): void {\n this.displayObject = new Container();\n this.graphics = new Graphics();\n this.displayObject.addChild(this.graphics);\n this.draw();\n this.applyBaseTransform();\n this.centerPivot();\n }\n\n update(next: Partial<CircleOptions>): void {\n Object.assign(this.options, next);\n this.draw();\n this.applyBaseTransform();\n this.centerPivot();\n }\n\n destroy(): void {\n this.displayObject.destroy({ children: true });\n }\n\n private draw(): void {\n if (!this.graphics) return;\n const g = this.graphics;\n g.clear();\n const {\n radius = 50,\n width,\n height,\n fill,\n fillAlpha = 1,\n stroke,\n strokeWidth = 1,\n strokeAlpha = 1,\n strokeAlign,\n } = this.options;\n\n const rx = width !== undefined ? width / 2 : radius;\n const ry = height !== undefined ? height / 2 : radius;\n const drawShape = () => (rx === ry ? g.circle(0, 0, rx) : g.ellipse(0, 0, rx, ry));\n\n if (fill !== undefined) {\n drawShape();\n g.fill({ color: fill, alpha: fillAlpha });\n }\n if (stroke !== undefined) {\n drawShape();\n g.stroke({\n color: stroke,\n width: strokeWidth,\n alpha: strokeAlpha,\n alignment: getStrokeAlignment(strokeAlign),\n });\n }\n }\n}\n","import { Container, Graphics } from 'pixi.js';\nimport { BaseElement } from '@/core/BaseElement';\nimport type { LineOptions } from '@/elements/Shape/Line/LineOptions';\n\nexport class LineShape extends BaseElement<LineOptions> {\n private graphics: Graphics | null = null;\n\n init(): void {\n this.displayObject = new Container();\n this.graphics = new Graphics();\n this.displayObject.addChild(this.graphics);\n this.draw();\n this.applyBaseTransform();\n this.centerPivot();\n }\n\n update(next: Partial<LineOptions>): void {\n Object.assign(this.options, next);\n this.draw();\n this.applyBaseTransform();\n this.centerPivot();\n }\n\n destroy(): void {\n this.displayObject.destroy({ children: true });\n }\n\n private draw(): void {\n if (!this.graphics) return;\n const g = this.graphics;\n g.clear();\n const { width, stroke = 0x000000, strokeWidth = 2, strokeAlpha = 1 } = this.options;\n g.moveTo(0, 0).lineTo(width, 0);\n g.stroke({ color: stroke, width: strokeWidth, alpha: strokeAlpha, cap: 'square' });\n }\n}\n","import { Container, Graphics } from 'pixi.js';\nimport { BaseElement } from '@/core/BaseElement';\nimport type { RectangleOptions } from '@/elements/Shape/Rectangle/RectangleOptions';\nimport { getStrokeAlignment } from '@/elements/Shape/strokeAlign';\n\nexport class RectangleShape extends BaseElement<RectangleOptions> {\n private graphics: Graphics | null = null;\n\n init(): void {\n this.displayObject = new Container();\n this.graphics = new Graphics();\n this.displayObject.addChild(this.graphics);\n this.draw();\n this.applyBaseTransform();\n this.centerPivot();\n }\n\n update(next: Partial<RectangleOptions>): void {\n Object.assign(this.options, next);\n this.draw();\n this.applyBaseTransform();\n this.centerPivot();\n }\n\n destroy(): void {\n this.displayObject.destroy({ children: true });\n }\n\n private draw(): void {\n if (!this.graphics) return;\n const g = this.graphics;\n g.clear();\n\n const {\n width,\n height,\n fill,\n fillAlpha = 1,\n stroke,\n strokeWidth = 1,\n strokeAlpha = 1,\n strokeAlign,\n borderRadius,\n } = this.options;\n\n if (fill !== undefined) {\n if (borderRadius) {\n g.roundRect(0, 0, width, height, borderRadius);\n } else {\n g.rect(0, 0, width, height);\n }\n g.fill({ color: fill, alpha: fillAlpha });\n }\n\n if (stroke !== undefined) {\n if (borderRadius) {\n g.roundRect(0, 0, width, height, borderRadius);\n } else {\n g.rect(0, 0, width, height);\n }\n g.stroke({\n color: stroke,\n width: strokeWidth,\n alpha: strokeAlpha,\n alignment: getStrokeAlignment(strokeAlign),\n });\n }\n }\n}\n","import { Container, Graphics } from 'pixi.js';\nimport { BaseElement } from '@/core/BaseElement';\nimport type { StarOptions } from '@/elements/Shape/Star/StarOptions';\nimport { getStrokeAlignment } from '@/elements/Shape/strokeAlign';\n\nexport class StarShape extends BaseElement<StarOptions> {\n private graphics: Graphics | null = null;\n\n init(): void {\n this.displayObject = new Container();\n this.graphics = new Graphics();\n this.displayObject.addChild(this.graphics);\n this.draw();\n this.applyBaseTransform();\n this.centerPivot();\n }\n\n update(next: Partial<StarOptions>): void {\n Object.assign(this.options, next);\n this.draw();\n this.applyBaseTransform();\n this.centerPivot();\n }\n\n destroy(): void {\n this.displayObject.destroy({ children: true });\n }\n\n private draw(): void {\n if (!this.graphics) return;\n const g = this.graphics;\n g.clear();\n const {\n points,\n width,\n height,\n fill,\n fillAlpha = 1,\n stroke,\n strokeWidth = 1,\n strokeAlpha = 1,\n strokeAlign,\n } = this.options;\n const outerRadius = Math.min(width, height) / 2;\n const innerRadius = outerRadius * 0.45;\n\n if (fill !== undefined) {\n g.star(0, 0, points, outerRadius, innerRadius);\n g.fill({ color: fill, alpha: fillAlpha });\n }\n if (stroke !== undefined) {\n g.star(0, 0, points, outerRadius, innerRadius);\n g.stroke({\n color: stroke,\n width: strokeWidth,\n alpha: strokeAlpha,\n alignment: getStrokeAlignment(strokeAlign),\n });\n }\n }\n}\n","import type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport type { ElementFactory } from '@/core/ElementRegistry';\nimport type { CircleOptions } from '@/elements/Shape/Circle/CircleOptions';\nimport { CircleShape } from '@/elements/Shape/Circle/CircleShape';\nimport type { LineOptions } from '@/elements/Shape/Line/LineOptions';\nimport { LineShape } from '@/elements/Shape/Line/LineShape';\nimport type { RectangleOptions } from '@/elements/Shape/Rectangle/RectangleOptions';\nimport { RectangleShape } from '@/elements/Shape/Rectangle/RectangleShape';\nimport type { StarOptions } from '@/elements/Shape/Star/StarOptions';\nimport { StarShape } from '@/elements/Shape/Star/StarShape';\n\nconst shapeFactories = new Map<string, ElementFactory>([\n ['shape:rectangle', (opts) => new RectangleShape(opts as RectangleOptions)],\n ['shape:circle', (opts) => new CircleShape(opts as CircleOptions)],\n ['shape:star', (opts) => new StarShape(opts as StarOptions)],\n ['shape:line', (opts) => new LineShape(opts as LineOptions)],\n]);\n\nexport function registerShapeFactory(type: string, factory: ElementFactory): void {\n shapeFactories.set(type, factory);\n}\n\nexport function getShapeFactories(): ReadonlyMap<string, ElementFactory> {\n return shapeFactories;\n}\n\nexport function createShape(options: BaseOptions): BaseElement<BaseOptions> {\n const factory = shapeFactories.get(options.type);\n if (!factory) throw new Error(`Unknown shape type: \"${options.type}\"`);\n return factory(options);\n}\n\nexport type { CircleOptions, LineOptions, RectangleOptions, StarOptions };\nexport { CircleShape, LineShape, RectangleShape, StarShape };\n","import { Container, Sprite, Texture } from 'pixi.js';\nimport { BaseElement } from '@/core/BaseElement';\nimport type { SVGOptions } from '@/elements/SVG/SVGOptions';\n\nexport class SVGElement extends BaseElement<SVGOptions> {\n private sprite: Sprite | null = null;\n private blobUrl: string | null = null;\n\n async init(): Promise<void> {\n this.displayObject = new Container();\n await this.loadSVG();\n this.applyBaseTransform();\n this.centerPivot();\n }\n\n async update(next: Partial<SVGOptions>): Promise<void> {\n const srcChanged = next.src !== undefined && next.src !== this.options.src;\n Object.assign(this.options, next);\n\n if (srcChanged) {\n await this.loadSVG();\n } else if (this.sprite) {\n if (next.width !== undefined) this.sprite.width = next.width;\n if (next.height !== undefined) this.sprite.height = next.height;\n }\n\n this.applyBaseTransform();\n this.centerPivot();\n }\n\n destroy(): void {\n if (this.blobUrl) {\n URL.revokeObjectURL(this.blobUrl);\n this.blobUrl = null;\n }\n this.displayObject.destroy({ children: true });\n }\n\n private async loadSVG(): Promise<void> {\n this.displayObject.removeChildren();\n if (this.blobUrl) {\n URL.revokeObjectURL(this.blobUrl);\n this.blobUrl = null;\n }\n\n const src = this.options.src;\n let imgUrl = src;\n if (src.trim().startsWith('<')) {\n imgUrl = this.svgStringToUrl(src);\n this.blobUrl = imgUrl;\n }\n\n const img = await this.loadImage(imgUrl);\n const w = this.options.width ?? img.naturalWidth;\n const h = this.options.height ?? img.naturalHeight;\n\n const offscreen = document.createElement('canvas');\n offscreen.width = w;\n offscreen.height = h;\n const ctx = offscreen.getContext('2d');\n if (!ctx) {\n throw new Error('Failed to create 2D canvas context for SVG rasterization.');\n }\n ctx.drawImage(img, 0, 0, w, h);\n\n const texture = Texture.from(offscreen);\n this.sprite = new Sprite(texture);\n this.sprite.width = w;\n this.sprite.height = h;\n this.displayObject.addChild(this.sprite);\n }\n\n private svgStringToUrl(svgString: string): string {\n const blob = new Blob([svgString], { type: 'image/svg+xml' });\n return URL.createObjectURL(blob);\n }\n\n private loadImage(url: string): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const img = new window.Image();\n img.onload = () => resolve(img);\n img.onerror = reject;\n img.src = url;\n });\n }\n}\n","import type { ElementFactory } from '@/core/ElementRegistry';\nimport { SVGElement } from '@/elements/SVG/SVGElement';\nimport type { SVGOptions } from '@/elements/SVG/SVGOptions';\n\nexport const SVG_FACTORIES: Record<string, ElementFactory> = {\n svg: (opts) => new SVGElement(opts as SVGOptions),\n};\n\nexport type { SVGOptions };\nexport { SVGElement };\n","import { Graphics } from 'pixi.js';\n\nimport type { BaseTextOptions } from '@/elements/Text/types';\n\nexport function createTextBackground(\n options: Pick<BaseTextOptions, 'background' | 'backgroundAlpha' | 'backgroundPadding'>,\n fontSize: number,\n bounds: { x: number; y: number; width: number; height: number },\n): Graphics | null {\n const { background, backgroundAlpha = 1, backgroundPadding } = options;\n\n if (background === undefined || backgroundAlpha <= 0) {\n return null;\n }\n\n if (bounds.width <= 0 || bounds.height <= 0) {\n return null;\n }\n\n const resolvedPadding = Math.max(0, backgroundPadding ?? 6);\n const padX = resolvedPadding;\n const padY = resolvedPadding;\n const radius = Math.max(3, fontSize * 0.12);\n const backgroundNode = new Graphics();\n\n backgroundNode\n .roundRect(\n bounds.x - padX,\n bounds.y - padY,\n bounds.width + padX * 2,\n bounds.height + padY * 2,\n radius,\n )\n .fill({\n color: background,\n alpha: Math.max(0, Math.min(1, backgroundAlpha)),\n });\n\n return backgroundNode;\n}\n","export default \"data:font/ttf;base64,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ACAAbQBvAHIAZQAgAGgAdQBtAGEAbgBpAHMAdAAgAGMAaABhAHIAYQBjAHQAZQByAGkAcwB0AGkAYwBzACAAdABoAGEAbgAgAG0AYQBuAHkAIABvAGYAIABpAHQAcwAgAHAAcgBlAGQAZQBjAGUAcwBzAG8AcgBzACAAYQBuAGQAIABhAHMAIABzAHUAYwBoACAAaQBzACAAbQBvAHIAZQAgAGkAbgAgAHQAdQBuAGUAIAB3AGkAdABoACAAdABoAGUAIABtAG8AbwBkACAAbwBmACAAdABoAGUAIABsAGEAcwB0ACAAZABlAGMAYQBkAGUAcwAgAG8AZgAgAHQAaABlACAAdAB3AGUAbgB0AGkAZQB0AGgAIABjAGUAbgB0AHUAcgB5AC4AIAAgAFQAaABlACAAbwB2AGUAcgBhAGwAbAAgAHQAcgBlAGEAdABtAGUAbgB0ACAAbwBmACAAYwB1AHIAdgBlAHMAIABpAHMAIABzAG8AZgB0AGUAcgAgAGEAbgBkACAAZgB1AGwAbABlAHIAIAB0AGgAYQBuACAAaQBuACAAbQBvAHMAdAAgAGkAbgBkAHUAcwB0AHIAaQBhAGwAIABzAHQAeQBsAGUAIABzAGEAbgBzACAAcwBlAHIAaQBmACAAZgBhAGMAZQBzAC4AIAAgAFQAZQByAG0AaQBuAGEAbAAgAHMAdAByAG8AawBlAHMAIABhAHIAZQAgAGMAdQB0ACAAbwBuACAAdABoAGUAIABkAGkAYQBnAG8AbgBhAGwAIAB3AGgAaQBjAGgAIABoAGUAbABwAHMAIAB0AG8AIABnAGkAdgBlACAAdABoAGUAIABmAGEAYwBlACAAYQAgAGwAZQBzAHMAIABtAGUAYwBoAGEAbgBpAGMAYQBsACAAYQBwAHAAZQBhAHIAYQBuAGMAZQAuACAAIABBAHIAaQBhAGwAIABpAHMAIABhAG4AIABlAHgAdAByAGUAbQBlAGwAeQAgAHYAZQByAHMAYQB0AGkAbABlACAAZgBhAG0AaQBsAHkAIABvAGYAIAB0AHkAcABlAGYAYQBjAGUAcwAgAHcAaABpAGMAaAAgAGMAYQBuACAAYgBlACAAdQBzAGUAZAAgAHcAaQB0AGgAIABlAHEAdQBhAGwAIABzAHUAYwBjAGUAcwBzACAAZgBvAHIAIAB0AGUAeAB0ACAAcwBlAHQAdABpAG4AZwAgAGkAbgAgAHIAZQBwAG8AcgB0AHMALAAgAHAAcgBlAHMAZQBuAHQAYQB0AGkAbwBuAHMALAAgAG0AYQBnAGEAegBpAG4AZQBzACAAZQB0AGMALAAgAGEAbgBkACAAZgBvAHIAIABkAGkAcwBwAGwAYQB5ACAAdQBzAGUAIABpAG4AIABuAGUAdwBzAHAAYQBwAGUAcgBzACwAIABhAGQAdgBlAHIAdABpAHMAaQBuAGcAIABhAG4AZAAgAHAAcgBvAG0AbwB0AGkAbwBuAHMALgBNAG8AbgBvAHQAeQBwAGUAOgBBAHIAaQBhAGwAIABSAGUAZwB1AGwAYQByADoAVgBlAHIAcwBpAG8AbgAgADIALgA4ADIAIAAoAE0AaQBjAHIAbwBzAG8AZgB0ACkAQQByAGkAYQBsAE0AVABBAHIAaQBhAGwArgAgAFQAcgBhAGQAZQBtAGEAcgBrACAAbwBmACAAVABoAGUAIABNAG8AbgBvAHQAeQBwAGUAIABDAG8AcgBwAG8AcgBhAHQAaQBvAG4AIABwAGwAYwAgAHIAZQBnAGkAcwB0AGUAcgBlAGQAIABpAG4AIAB0AGgAZQAgAFUAUwAgAFAAYQB0ACAAJgAgAFQATQAgAE8AZgBmAC4AIABhAG4AZAAgAGUAbABzAGUAdwBoAGUAcgBlAC4ATgBPAFQASQBGAEkAQwBBAFQASQBPAE4AIABPAEYAIABMAEkAQwBFAE4AUwBFACAAQQBHAFIARQBFAE0ARQBOAFQADQAKAA0ACgBUAGgAaQBzACAAdAB5AHAAZQBmAGEAYwBlACAAaQBzACAAdABoAGUAIABwAHIAbwBwAGUAcgB0AHkAIABvAGYAIABNAG8AbgBvAHQAeQBwAGUAIABUAHkAcABvAGcAcgBhAHAAaAB5ACAAYQBuAGQAIABpAHQAcwAgAHUAcwBlACAAYgB5ACAAeQBvAHUAIABpAHMAIABjAG8AdgBlAHIAZQBkACAAdQBuAGQAZQByACAAdABoAGUAIAB0AGUAcgBtAHMAIABvAGYAIABhACAAbABpAGMAZQBuAHMAZQAgAGEAZwByAGUAZQBtAGUAbgB0AC4AIABZAG8AdQAgAGgAYQB2AGUAIABvAGIAdABhAGkAbgBlAGQAIAB0AGgAaQBzACAAdAB5AHAAZQBmAGEAYwBlACAAcwBvAGYAdAB3AGEAcgBlACAAZQBpAHQAaABlAHIAIABkAGkAcgBlAGMAdABsAHkAIABmAHIAbwBtACAATQBvAG4AbwB0AHkAcABlACAAbwByACAAdABvAGcAZQB0AGgAZQByACAAdwBpAHQAaAAgAHMAbwBmAHQAdwBhAHIAZQAgAGQAaQBzAHQAcgBpAGIAdQB0AGUAZAAgAGIAeQAgAG8AbgBlACAAbwBmACAATQBvAG4AbwB0AHkAcABlACcAcwAgAGwAaQBjAGUAbgBzAGUAZQBzAC4ADQAKAA0ACgBUAGgAaQBzACAAcwBvAGYAdAB3AGEAcgBlACAAaQBzACAAYQAgAHYAYQBsAHUAYQBiAGwAZQAgAGEAcwBzAGUAdAAgAG8AZgAgAE0AbwBuAG8AdAB5AHAAZQAuACAAVQBuAGwAZQBzAHMAIAB5AG8AdQAgAGgAYQB2AGUAIABlAG4AdABlAHIAZQBkACAAaQBuAHQAbwAgAGEAIABzAHAAZQBjAGkAZgBpAGMAIABsAGkAYwBlAG4AcwBlACAAYQBnAHIAZQBlAG0AZQBuAHQAIABnAHIAYQBuAHQAaQBuAGcAIAB5AG8AdQAgAGEAZABkAGkAdABpAG8AbgBhAGwAIAByAGkAZwBoAHQAcwAsACAAeQBvAHUAcgAgAHUAcwBlACAAbwBmACAAdABoAGkAcwAgAHMAbwBmAHQAdwBhAHIAZQAgAGkAcwAgAGwAaQBtAGkAdABlAGQAIAB0AG8AIAB5AG8AdQByACAAdwBvAHIAawBzAHQAYQB0AGkAbwBuACAAZgBvAHIAIAB5AG8AdQByACAAbwB3AG4AIABwAHUAYgBsAGkAcwBoAGkAbgBnACAAdQBzAGUALgAgAFkAbwB1ACAAbQBhAHkAIABuAG8AdAAgAGMAbwBwAHkAIABvAHIAIABkAGkAcwB0AHIAaQBiAHUAdABlACAAdABoAGkAcwAgAHMAbwBmAHQAdwBhAHIAZQAuAA0ACgANAAoASQBmACAAeQBvAHUAIABoAGEAdgBlACAAYQBuAHkAIABxAHUAZQBzAHQAaQBvAG4AIABjAG8AbgBjAGUAcgBuAGkAbgBnACAAeQBvAHUAcgAgAHIAaQBnAGgAdABzACAAeQBvAHUAIABzAGgAbwB1AGwAZAAgAHIAZQB2AGkAZQB3ACAAdABoAGUAIABsAGkAYwBlAG4AcwBlACAAYQBnAHIAZQBlAG0AZQBuAHQAIAB5AG8AdQAgAHIAZQBjAGUAaQB2AGUAZAAgAHcAaQB0AGgAIAB0AGgAZQAgAHMAbwBmAHQAdwBhAHIAZQAgAG8AcgAgAGMAbwBuAHQAYQBjAHQAIABNAG8AbgBvAHQAeQBwAGUAIABmAG8AcgAgAGEAIABjAG8AcAB5ACAAbwBmACAAdABoAGUAIABsAGkAYwBlAG4AcwBlACAAYQBnAHIAZQBlAG0AZQBuAHQALgANAAoADQAKAE0AbwBuAG8AdAB5AHAAZQAgAGMAYQBuACAAYgBlACAAYwBvAG4AdABhAGMAdABlAGQAIABhAHQAOgANAAoADQAKAFUAUwBBACAALQAgACgAOAA0ADcAKQAgADcAMQA4AC0AMAA0ADAAMAAJAAkAVQBLACAALQAgADAAMQAxADQANAAgADAAMQA3ADMANwAgADcANgA1ADkANQA5AA0ACgBoAHQAdABwADoALwAvAHcAdwB3AC4AbQBvAG4AbwB0AHkAcABlAC4AYwBvAG0ATQBvAG4AbwB0AHkAcABlACAAVAB5AHAAZQAgAEQAcgBhAHcAaQBuAGcAIABPAGYAZgBpAGMAZQAgAC0AIABSAG8AYgBpAG4AIABOAGkAYwBoAG8AbABhAHMALAAgAFAAYQB0AHIAaQBjAGkAYQAgAFMAYQB1AG4AZABlAHIAcwAgADEAOQA4ADIAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAG0AbwBuAG8AdAB5AHAAZQAuAGMAbwBtAC8AaAB0AG0AbAAvAG0AdABuAGEAbQBlAC8AbQBzAF8AYQByAGkAYQBsAC4AaAB0AG0AbABoAHQAdABwADoALwAvAHcAdwB3AC4AbQBvAG4AbwB0AHkAcABlAC4AYwBvAG0ALwBoAHQAbQBsAC8AbQB0AG4AYQBtAGUALwBtAHMAXwB3AGUAbABjAG8AbQBlAC4AaAB0AG0AbABoAHQAdABwADoALwAvAHcAdwB3AC4AbQBvAG4AbwB0AHkAcABlAC4AYwBvAG0ALwBoAHQAbQBsAC8AdAB5AHAAZQAvAGwAaQBjAGUAbgBzAGUALgBoAHQAbQBsVHlwZWZhY2UgqSBUaGUgTW9ub3R5cGUgQ29ycG9yYXRpb24gcGxjLiBEYXRhIKkgVGhlIE1vbm90eXBlIENvcnBvcmF0aW9uIHBsYy9UeXBlIFNvbHV0aW9ucyBJbmMuIDE5OTAtMTk5Mi4gQWxsIFJpZ2h0cyBSZXNlcnZlZENvbnRlbXBvcmFyeSBzYW5zIHNlcmlmIGRlc2lnbiwgQXJpYWwgY29udGFpbnMgbW9yZSBodW1hbmlzdCBjaGFyYWN0ZXJpc3RpY3MgdGhhbiBtYW55IG9mIGl0cyBwcmVkZWNlc3NvcnMgYW5kIGFzIHN1Y2ggaXMgbW9yZSBpbiB0dW5lIHdpdGggdGhlIG1vb2Qgb2YgdGhlIGxhc3QgZGVjYWRlcyBvZiB0aGUgdHdlbnRpZXRoIGNlbnR1cnkuICBUaGUgb3ZlcmFsbCB0cmVhdG1lbnQgb2YgY3VydmVzIGlzIHNvZnRlciBhbmQgZnVsbGVyIHRoYW4gaW4gbW9zdCBpbmR1c3RyaWFsIHN0eWxlIHNhbnMgc2VyaWYgZmFjZXMuICBUZXJtaW5hbCBzdHJva2VzIGFyZSBjdXQgb24gdGhlIGRpYWdvbmFsIHdoaWNoIGhlbHBzIHRvIGdpdmUgdGhlIGZhY2UgYSBsZXNzIG1lY2hhbmljYWwgYXBwZWFyYW5jZS4gIEFyaWFsIGlzIGFuIGV4dHJlbWVseSB2ZXJzYXRpbGUgZmFtaWx5IG9mIHR5cGVmYWNlcyB3aGljaCBjYW4gYmUgdXNlZCB3aXRoIGVxdWFsIHN1Y2Nlc3MgZm9yIHRleHQgc2V0dGluZyBpbiByZXBvcnRzLCBwcmVzZW50YXRpb25zLCBtYWdhemluZXMgZXRjLCBhbmQgZm9yIGRpc3BsYXkgdXNlIGluIG5ld3NwYXBlcnMsIGFkdmVydGlzaW5nIGFuZCBwcm9tb3Rpb25zLk1vbm90eXBlOkFyaWFsIFJlZ3VsYXI6VmVyc2lvbiAyLjgyIChNaWNyb3NvZnQpQXJpYWxNVEFyaWFsqCBUcmFkZW1hcmsgb2YgVGhlIE1vbm90eXBlIENvcnBvcmF0aW9uIHBsYyByZWdpc3RlcmVkIGluIHRoZSBVUyBQYXQgJiBUTSBPZmYuIGFuZCBlbHNld2hlcmUuTk9USUZJQ0FUSU9OIE9GIExJQ0VOU0UgQUdSRUVNRU5UDQoNClRoaXMgdHlwZWZhY2UgaXMgdGhlIHByb3BlcnR5IG9mIE1vbm90eXBlIFR5cG9ncmFwaHkgYW5kIGl0cyB1c2UgYnkgeW91IGlzIGNvdmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIGEgbGljZW5zZSBhZ3JlZW1lbnQuIFlvdSBoYXZlIG9idGFpbmVkIHRoaXMgdHlwZWZhY2Ugc29mdHdhcmUgZWl0aGVyIGRpcmVjdGx5IGZyb20gTW9ub3R5cGUgb3IgdG9nZXRoZXIgd2l0aCBzb2Z0d2FyZSBkaXN0cmlidXRlZCBieSBvbmUgb2YgTW9ub3R5cGUncyBsaWNlbnNlZXMuDQoNClRoaXMgc29mdHdhcmUgaXMgYSB2YWx1YWJsZSBhc3NldCBvZiBNb25vdHlwZS4gVW5sZXNzIHlvdSBoYXZlIGVudGVyZWQgaW50byBhIHNwZWNpZmljIGxpY2Vuc2UgYWdyZWVtZW50IGdyYW50aW5nIHlvdSBhZGRpdGlvbmFsIHJpZ2h0cywgeW91ciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBpcyBsaW1pdGVkIHRvIHlvdXIgd29ya3N0YXRpb24gZm9yIHlvdXIgb3duIHB1Ymxpc2hpbmcgdXNlLiBZb3UgbWF5IG5vdCBjb3B5IG9yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZS4NCg0KSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9uIGNvbmNlcm5pbmcgeW91ciByaWdodHMgeW91IHNob3VsZCByZXZpZXcgdGhlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSByZWNlaXZlZCB3aXRoIHRoZSBzb2Z0d2FyZSBvciBjb250YWN0IE1vbm90eXBlIGZvciBhIGNvcHkgb2YgdGhlIGxpY2Vuc2UgYWdyZWVtZW50Lg0KDQpNb25vdHlwZSBjYW4gYmUgY29udGFjdGVkIGF0Og0KDQpVU0EgLSAoODQ3KSA3MTgtMDQwMAkJVUsgLSAwMTE0NCAwMTczNyA3NjU5NTkNCmh0dHA6Ly93d3cubW9ub3R5cGUuY29tTW9ub3R5cGUgVHlwZSBEcmF3aW5nIE9mZmljZSAtIFJvYmluIE5pY2hvbGFzLCBQYXRyaWNpYSBTYXVuZGVycyAxOTgyaHR0cDovL3d3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AHwAtwChAH8AfgCAAIEA6gDsALkBlgGXAQIBAwEEAQUA+wD8AZgBmQGaAZsA/QD+AQYBBwEIAP8BnAGdAZ4BnwGgAaEBCQEKAQsBDAGiAaMA9gD3AaQBpQGmAacBqAGpAaoBqwGsAa0BrgGvAbABsQGyAbMA+ADVAYoBiwG0AbUBtgG3AbgBDQEOAbkBugEPARABEQESAOAA4QETARQBuwG8ARUBFgGMAb0BvgG/AcABwQHCARcBGACvALABGQEaAcMBxAEbARwBHQEeAcUBxgD5APoA4gDjAR8BIAEhASIBxwHIAckBygHLAcwBzQHOASMBJAElASYBzwHQAdEB0gHTAdQAugEnASgBKQEqAOQA5QHVANYA3wDZANoA2wDeANcA3QHvAfAB8QHcAfIB8wH0AfYB9wH4AfkB+gErAfsB/AH9Af4BLAH/AgACAQICAgMCBAIFAgYCBwIIAgkCCgEtAgsCDAINAg4CDwIQAhECEgITAhQBLgIVAhYBLwEwAhcCGAIZAhoCGwIcAh0CHgIfAiACjAIhAiIBMQEyAiMBMwIkAiUCJgInAigCKQIqAisCiAKJBRAFEQLvA4EDgwOFA4cDiQONA48DkwOVA5kDnQOhA6UDqQOrA60DrwOxA7UDuQO9A8EDxQPJA80C8APRA9UD2QPdA+ED5QPpA+0D7wPxAvEC8gLzAvQC9QL2AvcC+AL5AvoC+wL8AwoDCwMMAwADAQMCBKQEpQSmBKcEqASpBKoEqwSsBK0ErgSvBLAEsQSyBLMEtAS1BLYEtwS4BLkEugS7BLwEvQS+BL8EwATBBMIEwwTEBMUExgTHBMgEyQTKBMsEzATNBM4EzwTQBNEE0gTTBNQE1QTWBNcE2ATZBNoE2wTcBN0E3gTfBOAE4QTiBOME5ATlBOYE5wToBOkE6gTrBOwE7QTuBO8E8ATxBPIE8wT0BPUB4wHkBPYE9wT4BPkE+gT7ALEAsgKKATQAtQC2AMMB5QCzALQAxACCAMEAhwNOA08DUgNQA1EDVQNWA1cDWANTA1QA9QHnAsAEfgC8AJkA7QDCAKUAkgE/AI8BQQF2AZEBkgGTAXcAuAF8Ae0B7gRxBHIEgQRzA1kDWgNbA1wDXQSEBHUEdwSFBHYEhgR5BIcEiASJBIoEiwSMBHgElASNBI4EjwSQBJEElgSaBJsEnASdBJ4ElwSY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APYA9wGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAPgA1QGKAYsBtAG1AbYBtwG4AQ0BDgG5AboBDwEQAREBEgDgAOEBEwEUAbsBvAEVARYBjAG9Ab4BvwHAAcEBwgEXARgArwCwARkBGgHDAcQBGwEcAR0BHgHFAcYA+QD6AOIA4wEfASABIQEiAccByAHJAcoBywHMAc0BzgEjASQBJQEmAc8B0AHRAdIB0wHUALoBJwEoASkBKgDkAOUB1QDWAN8A2QDaANsA3gDXAN0B7wHwAfEB3AHyAfMB9AH2AfcB+AH5AfoBKwH7AfwB/QH+ASwB/wIAAgECAgIDAgQCBQIGAgcCCAIJAgoBLQILAgwCDQIOAg8CEAIRAhICEwIUAS4CFQIWAS8BMAIXAhgCGQIaAhsCHAIdAh4CHwIgAowCIQIiATEBMgIjATMCJAIlAiYCJwIoAikCKgIrAogCiQUQBREC7wOBA4MDhQOHA4kDjQOPA5MDlQOZA50DoQOlA6kDqwOtA68DsQO1A7kDvQPBA8UDyQPNAvAD0QPVA9kD3QPhA+UD6QPtA+8D8QLxAvIC8wL0AvUC9gL3AvgC+QL6AvsC/AMKAwsDDAMAAwEDAgSkBKUEpgSnBKgEqQSqBKsErAStBK4ErwSwBLEEsgSzBLQEtQS2BLcEuAS5BLoEuwS8BL0EvgS/BMAEwQTCBMMExATFBMYExwTIBMkEygTLBMwEzQTOBM8E0ATRBNIE0wTUBNUE1gTXBNgE2QTaBNsE3ATdBN4E3wTgBOEE4gTjBOQE5QTmBOcE6ATpBOoE6wTsBO0E7gTvBPAE8QTyBPME9AT1AeMB5AT2BPcE+AT5BPoE+wCxALICigE0ALUAtgDDAeUAswC0AMQAggDBAIcDTgNPA1IDUANRA1UDVgNXA1gDUwNUAPUB5wLABH4AvACZAO0AwgClAJIBPwCPAUEBdgGRAZIBkwF3ALgBfAHtAe4EcQRyBIEEcwNZA1oDWwNcA10EhAR1BHcEhQR2BIYEeQSHBIgEiQSKBIsEjAR4BJQEjQSOBI8EkASRBJYEmgSbBJwEnQSeBJcEmASZBH0EnwSgBKEEogSjAzUDNgPzA/QAAAAAAAAAAABsAAAAbAAAAGwAAABsAAAA8gAAAZoAAAM8AAAFwgAAB2oAAAlUAAAJmgAAChoAAAqY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AAEX4gABGSYAARlWAAEZhgABGbgAARnoAAEaoAABGwQAARukAAEb1AABHAQAARw0AAEcZAABHKAAARzSAAEdBAABHTQAAR1kAAEdmAABHcoAAR36AAEeKgABHpwAAR7QAAEgngABIaAAASMwAAElYAABJ6oAASk8AAEpoAABKioAASo6AAEqyAABLHIAAS1QAAEuLgABLsoAAS/aAAExngABMx4AATPiAAEz8gABNAIAATT2AAE1BgABNRYAATUmAAE1NgABNUYAATYYAAE2KAABNjgAATasAAE2vAABNzAAATdAAAE4KgABODoAAThKAAE4WgABOWYAATqiAAE61AABOwoAATtAAAE7cAABO6AAATvkAAE8DAABPVIAAT4oAAE/IAABQAAAAUD+AAFBQAABQloAAUMyAAFDQgABQ1IAAUSIAAFEmAABRb4AAUbCAAFHhAABSKQAAUmwAAFLFgABS0YAAUt+AAFLtAABS9oAAUwKAAFMMAABTRwAAU1MAAFOcAABToAAAU6QAAFOwgABTtIAAU/6AAFQ5gABUdIAAVH6AAFSKgABUtYAAVLmAAFTvgABU84AAVQaAAFU3AABVOwAAVcQAAFYbAABWPIAAVkiAAFaQAABWt4AAVruAAFa/gABWw4AAVuAAAFbkAABW6AAAVuwAAFckgABXbwAAV3MAAFeQgABXvAAAV+UAAFgVgABYRgAAWH0AAFisgABYtYAAWPQAAFj/gABZA4AAWUmAAFmUgABZpAAAWdYAAFnaAABaXoAAWrkAAFrpgABa9YAAW0gAAFt5gABbxYAAW+4AAFvyAABcFIAAXBiAAFwcgABcOYAAXD2AAFycgABcoIAAXMMAAFzngABdHAAAXVeAAF2GAABdu4AAXfOAAF38gABeSAAAXoeAAF6VAABe4oAAXuuAAF8sgABfMIAAXzSAAF9AgABfRIAAX4EAAF+7AABf/QAAYAYAAGASAABgPAAAYE6AAGBiAABgbYAAYMOAAGDeAABhAYAAYUyAAGF5gABhsAAAYcKAAGHiAABiE4AAYh2AAGIwAABiRYAAYn4AAGKQgABinYAAYqeAAGKxgABivoAAYs+AAGLggABi8AAAYzmAAGNfgABjoYAAY7aAAGPaAABj54AAZAoAAGQmAABkV4AAZGWAAGSDAABkrYAAZM8AAGTrgABlKQAAZTaAAGVYAABlf4AAZbEAAGXcAABmEIAAZkMAAGZ1gABmnAAAZroAAGb1gABnJYAAZzkAAGdMgABnX4AAZ20AAGeEAABntgAAZ9IAAGfgAABn8YAAZ/2AAGgTAABoQAAAaE0AAGhZAABoZgAAaHIAAGh+AABoigAAaO2AAGj7gABpC4AAaRmAAGkngABpSgAAaYCAAGmMgABprwAAabqAAGnIAABp1wAAaeMAAGnzgABqNAAAansAAGrCAABqzwAAauKAAGruAABrRIAAa1IAAGtvgABrfwAAa4qAAGuaAABr4YAAa+uAAGw6gABsXoAAbIkAAGypgABs2IAAbR6AAG1iAABtbwAAbZCAAG3ngABuCAAAbhqAAG5dAABubwAAbrAAAG7PAABu5QAAbwYAAG89AABvgoAAb74AAG/ogABwJIAAcFIAAHCDgABwvYAAcOmAAHEKAABxoYAAcawAAHG2gABx5IAAce8AAHI/gABygQAAcruAAHLGAABy0IAActsAAHLlgABy8AAAc1AAAHNagABzZQAAc2+AAHN6AABzhIAAc48AAHOZgABzpAAAc7EAAHO7gABzxgAAc9CAAHQvAAB0MwAAdHuAAHR/gAB0igAAdJSAAHSfAAB0qYAAdRQAAHWXAAB14oAAdeaAAHZFgAB2SYAAdpsAAHcOAAB3T4AAd6+AAHgXgAB4oIAAePcAAHlvgAB5wIAAegwAAHoWgAB6IQAAeiuAAHo2AAB6QIAAeksAAHpVgAB6YAAAemqAAHp1AAB6f4AAeooAAHqUgAB6nwAAeqmAAHq0AAB7QwAAe6IAAHvzAAB8bQAAfL8AAHzJgAB81AAAfOAAAHzsAAB9AAAAfRQAAH0kAAB9QIAAfVWAAH1tAAB9goAAfZAAAH2ggAB9sgAAfcSAAH3QgAB93oAAfeqAAH44gAB/CgAAfxSAAH8fAAB/KYAAfzQAAH8+gAB/SQAAf1OAAH9eAAB/aIAAf3MAAH99gAB/iAAAf5KAAH+dAAB/p4AAf7IAAH+8gAB/xwAAf9GAAH/cAAB/5oAAf/EAAH/7gACABgAAgBCAAIAbAACAJYAAgDAAAIBXgACAXQAAgGeAAIEfgACBI4AAgWoAAIGygACCAgAAglKAAIK8AACCwAAAgxCAAINkgACD4IAAhFWAAISbgACEn4AAhMAAAITjgACFI4AAhSeAAIVPgACFU4AAhZkAAIXtgACGOYAAhj2AAIZxAACGdQAAhtKAAIbWgACHG4AAhx+AAIdsgACH0gAAiAEAAIgFAACIRIAAiJsAAIi+AACIwgAAiQyAAIlvgACJnoAAiaKAAInIgACJzIAAif+AAIoDgACKOYAAij2AAIp/gACKg4AAivUAAIr5AACLTwAAi1MAAIvtgACL8YAAjHAAAIx0AACMzoAAjNKAAI0OgACNEoAAjXiAAI18gACNxAAAjcgAAI4YAACOHAAAjiAAAI4kAACOggAAjoYAAI6KAACOjgAAjuKAAI82AACPaYAAj6KAAJACgACQYwAAkKMAAJDoAACROQAAkT0AAJF4gACRrwAAkhYAAJIaAACSYYAAkqMAAJMhAACTJQAAkykAAJMtAACTf4AAk4OAAJOxgACTtYAAk/kAAJP9AACUOAAAlDwAAJSDgACUh4AAlK8AAJSzAACUtwAAlPKAAJVPgACVmoAAldkAAJXdAACV4QAAleUAAJZMgACWvIAAlvAAAJb0AACXjAAAmB6AAJjAAACZWgAAmfsAAJqYgACbDIAAm3sAAJuFgACbkAAAm5QAAJuYAACbooAAm60AAJu3gACbu4AAm7+AAJvKAACb1IAAm9iAAJvcgACb5wAAm/GAAJv8AACcAAAAnAQAAJwIAACcDAAAnBAAAJwUAACcHoAAnCKAAJwmgACcMQAAnDuAAJxGAACcUIAAnFsAAJxlgACccAAAnHqAAJyFAACcj4AAnJoAAJykgACcrwAAnLmAAJzEAACczoAAnNkAAJzjgACc7gAAnPiAAJ0DAACdDYAAnRgAAJ0igACdLQAAnTeAAJ1CAACdTIAAnVcAAJ1hgACdbAAAnXaAAJ2BAACdi4AAnZYAAJ2ggACdqwAAnbWAAJ3AAACdyoAAndUAAJ3fgACd6gAAnfSAAJ3/AACeCYAAnhQAAJ4egACeKQAAnjOAAJ4+AACeSIAAnlMAAJ5dgACehYAAnpaAAJ60AACevoAAnskAAJ7TgACe3gAAnuiAAJ7zAACe/YAAnwgAAJ8SgACfHQAAnyeAAJ8yAACfPIAAn0cAAJ9RgACfXAAAn2aAAJ9xAACfe4AAn4YAAJ+QgACfmwAAn6WAAJ+wAACfvQAAn8oAAJ/XAACgHgAAoF6AAKCSgACgy4AAoN0AAKDugAChCgAAoSEAAKE1gAChUYAAoYeAAKG2gACh7IAAohuAAKJDgACiigAAorcAAKLXgACi7gAAov4AAKNFgACjmAAAo/4AAKQVAACkLIAApEOAAKRagACkhAAApK2AAKTYgAClA4AApS6AAKVcgAClioAApbiAAKW9AAClwYAApcYAAKXKgAClzwAApeqAAKYGAACmNAAApjiAAKY9AACmQYAApkWAAKZKAACmToAAplMAAKZXgACmXAAApmCAAKaMAACmtwAApuKAAKcNgACnJIAApzMAAKc9gACnSAAAp1gAAKdsgACni4AAp54AAKe9AACn0gAAp/MAAKgHgACoJQAAqDsAAKhUgACoagAAqICAAKiZAACorAAAqMOAAKjcgACo8AAAqQOAAKkZgACpK4AAqTYAAKlBgACpSwAAqVgAAKlkAACpcAAAqYSAAKmgAACptYAAqdCAAKnlgACqAoAAqhQAAKouAACqP4AAqlaAAKpgAACqaoAAqnQAAKqAAACqiYAAqpMAAKqfgACqq4AAqsAAAKrZgACq7wAAqwiAAKsdgACrOQAAq0mAAKthgACrcgAAq4UAAKuTgACrooAAq7EAAKvAAACrzQAAq9mAAKvlgACr8YAAq/wAAKwFgACsEAAArBuAAKwmAACsOQAArEoAAKxXgACsZoAArHOAAKx/AACsjAAArJgAAKymgACssQAArLyAAKzGAACsz4AArNqAAKzqAACs9gAArQIAAK0OAACtHAAArSkAAK00gACtQIAArUyAAK1YgACtZIAArXGAAK2HAACtlAAArawAAK25AACtzwAArdwAAK3zAACuGoAArk4AAK6WAACuyAAAruKAAK78gACvbgAAr9eAALAcgACwXoAAsK0AALD8gACxGQAAsTcAALFcAACxf4AAsa0AALHaAACyFIAAskoAALJ5gACyqoAAssqAALLvAACzLYAAs2gAALOkgACz4QAAAUoBwEBAasGBgYFBQYGBgYHBwYHBwYGBgYGBgYGBgYHBwcHBwYBJQUMDAwMEhw+HAUGdRwSHBISBZocH4XglhIHBwfCBgYmNQYjJ2VTNznlXTlxNyQ1UwYrEjfGpNXEYwb+BgcFBQYFBgcGBgYGBgYGBgYGBgYHBwcHBgYGBgYGBgYGBgYFBgYGBgYRBgYBBgYGAQwGBgYGBhgMDAEG/xYYAQUpDOEHUgYMTQYGAQUFBxEHBgEUFAUFBgIGBQEGBgcBAQYHBRRfBQUFBQUHBwcHBwcHBgYG/wb8AQEBAQYBAQEBGQUGHGP+BgYFBgUGAQcGBgYMBAwBElM+ASsuCy4LLQYGJSYlJi4BLgwnDCcBOQElAQEuNy43EiQuAS4BASua/poBLjcuNxxjHGMBEjALLSYSHh4UASYyAQEBAQEBARkBARkBGRkBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBARkZATIyMjIZGRkBASsBAQEBATEBARIBGQEZMRIZAQEZASUmLgsuCwwnDCcMJxJTElMSAS43Ljc+/z7/Pv8+ORzlAV0YATkuNwEBEiQSJC4BASscEi43LjcuNy43haSVxDklJgEBDCn/haSFpIWklcQBAQEMDAwMDAEBAQElARYSAYIU3SUBDQwcLj4BEHUuHxIuHAGalU0nDz6VCyYp3SkBHhIpJN0YFRjGMSQkJCkVKCrdKSQpKgwBJQwBPj4cATE3DDEbJSQBJQwMGBkMDAwSdS4SHBwumjExTRocKxQlMRQBMS4mMSQmAScoCzc3DTcWNyQ3NQsUxDHVMQEsMSQBKjEBJSc3JjErOf/fJCQ3DcQ3AQEBMQwBAQEBAQEBAQEBAQEBAQGzAQEBAQEMAQH3EgEM9wEBHAEB9wwMARAsDAwfARMWwsLCAQHK9wEBHBwPExMTEwEBAQEMAQEBCwwBAQEcAQwMECwMHwETFvcBASwBAQEBAQEBCAEBARQBASABGwQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBGwEBAQEBAQEBAQEBAQEBLCwBAQEBAQEBAQEBCQEBIwkBASMBAQEBAQEBAQEBAQEBAQEBAQErGxsbGwEBAQEBAQEBAQEBAQEBAQEBAQwBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBASwBAQEBAQEBAQEBASwsAQEBASwsAQEBASwsAQEsLAEBAQEBAQEBAQEBASkpKSkBAQEBKysRESsrEREBAQEBAQEBATIyMjIyMjIyIwEBASMBAQEBAR0BMjIdAQEBAQEBAQEBAQEBAQEBLCwBAQEBAQEBAQEBLCwjASMBIwEjAQEBAQEBAQEEGwEBIBQBAQEbGxsbGysBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBERkBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE5JSYlJiUmJSYlJiUmJSYlJiUmJSYlJiUmDCcMJwwnDCcMJwwnDCcMJz4HPjkSJBIkEiQSJBIkEiQSJAERAREBEQERAREcNxw3GQEZARkBGQEZAZbElsSWxCUmPjkSJBw3HDccNxw3HDcAAAAAJSYBAQcBBwEuFAEBAQEBAQEBAQEBAQEBAAAAAwADAQEBAQEFAwMBAgEBABgF7AvAAPgI/wAIAAj//gAJAAn//QAKAAr//QALAAv//QAMAAz//QANAA3//QAOAA3//QAPAA7//QAQAA///QARAA///AASABH//AATABL//AAUABP//AAVABP/+wAWABT/+wAXABX/+wAYABX/+gAZABf/+wAaABn/+gAbABr/+gAcABr/+gAdABv/+gAeABz/+QAfABz/+QAgAB3/+QAhAB//+QAiACD/+QAjACD/+AAkACH/+AAlACL/+AAmACL/9wAnACP/9wAoACT/9wApACb/9wAqACb/9wArACf/9gAsACj/9gAtACj/9gAuACr/9gAvACv/9gAwAC3/9gAxAC3/9QAyAC7/9QAzAC//9QA0ADD/9AA1ADD/9AA2ADH/9AA3ADP/9AA4ADT/8wA5ADT/8wA6ADX/8wA7ADX/8wA8ADb/8wA9ADf/8wA+ADj/8wA/ADn/8gBAADr/8gBBADv/8gBCADz/8gBDADz/8QBEAD3/8QBFAD7/8QBGAD//8ABHAED/8ABIAEH/8ABJAEL/8ABKAEL/8ABLAEP/8ABMAET/8ABNAEb/7wBOAEb/7wBPAEf/7wBQAEj/7wBRAEn/7gBSAEn/7gBTAEr/7gBUAEv/7QBVAE3/7QBWAE3/7QBXAE7/7QBYAE//7ABZAFD/7ABaAFD/7QBbAFH/7ABcAFP/7ABdAFT/7ABeAFT/7ABfAFX/6wBgAFb/6wBhAFf/6wBiAFf/6gBjAFn/6gBkAFr/6gBlAFv/6gBmAFz/6QBnAFz/6QBoAF3/6QBpAF7/6ABqAGD/6QBrAGD/6QBsAGH/6QBtAGL/6ABuAGP/6ABvAGP/6ABwAGT/5wBxAGX/5wByAGf/5wBzAGf/5wB0AGj/5gB1AGn/5gB2AGr/5gB3AGr/5QB4AGv/5QB5AG3/5QB6AG7/5QB7AG7/5QB8AG//5QB9AHD/5QB+AHH/5AB/AHH/5ACAAHP/5ACBAHT/5ACCAHX/4wCDAHb/4wCEAHb/4wCFAHf/4gCGAHj/4gCHAHn/4gCIAHr/4gCJAHv/4QCKAHz/4QCLAH3/4gCMAH3/4QCNAH7/4QCOAH//4QCPAIH/4QCQAIH/4ACRAIL/4ACSAIP/4ACTAIT/3wCUAIT/3wCVAIX/3wCWAIf/3wCXAIj/4ACYAIj/3wCZAIn/3wCaAIr/3gCbAIv/3gCcAIz/3gCdAIz/3gCeAI7/3gCfAI//3gCgAJD/3gChAJD/3QCiAJH/3QCjAJL/3QCkAJP/3QClAJT/3ACmAJX/2wCnAJb/2wCoAJf/2wCpAJf/2wCqAJj/2wCrAJn/2wCsAJv/2wCtAJv/2wCuAJz/2wCvAJ3/2wCwAJ7/2wCxAJ7/2gCyAJ//2gCzAKD/2gC0AKL/2QC1AKP/2AC2AKP/2AC3AKT/2AC4AKX/2AC5AKb/2AC6AKb/2AC7AKj/2AC8AKn/1wC9AKr/1wC+AKr/1wC/AKv/1wDAAKz/1wDBAK3/1wDCAK7/1wDDAK//1gDEALD/1gDFALH/1QDGALH/1QDHALL/1QDIALP/1ADJALT/1ADKALX/1ADLALb/1ADMALf/1ADNALj/1ADOALn/1ADPALn/1ADQALr/1ADRALz/1ADSAL3/0wDTAL3/0gDUAL7/0gDVAL//0gDWAMD/0QDXAMD/0QDYAML/0QDZAMP/0QDaAMT/0QDbAMT/0QDcAMX/0QDdAMb/0QDeAMf/0ADfAMf/0ADgAMn/zwDhAMr/zwDiAMv/zwDjAMv/zwDkAMz/zwDlAM3/zwDmAM7/zwDnAND/zgDoAND/zgDpANH/zgDqANL/zQDrANP/zQDsANP/zQDtANT/zQDuANb/zADvANf/zADwANf/zADxANj/zADyANn/zADzANr/zAD0ANr/zAD1ANz/ywD2AN3/ywD3AN7/ywD4AN7/ygD5AN//ygD6AOD/ygD7AOH/ygD8AOH/ygD9AOP/yQD+AOT/yQD/AOX/yQD4CP8ACAAI//4ACQAJ//0ACgAK//0ACwAL//0ADAAM//0ADQAN//0ADgAN//0ADwAO//0AEAAP//0AEQAP//wAEgAR//wAEwAS//wAFAAT//wAFQAT//sAFgAU//sAFwAV//sAGAAV//oAGQAX//sAGgAZ//oAGwAa//oAHAAa//oAHQAb//oAHgAc//kAHwAc//kAIAAd//kAIQAf//kAIgAg//kAIwAg//gAJAAh//gAJQAi//gAJgAi//cAJwAj//cAKAAk//cAKQAm//cAKgAm//cAKwAn//YALAAo//YALQAo//YALgAq//YALwAr//YAMAAt//YAMQAt//UAMgAu//UAMwAv//UANAAw//QANQAw//QANgAx//QANwAz//QAOAA0//MAOQA0//MAOgA1//MAOwA1//MAPAA2//MAPQA3//MAPgA4//MAPwA5//IAQAA6//IAQQA7//IAQgA8//EAQwA8//EARAA9//EARQA+//EARgA///AARwBA//AASABB//AASQBC//AASgBC//AASwBD//AATABE//AATQBG/+8ATgBG/+8ATwBH/+8AUABI/+8AUQBJ/+4AUgBJ/+4AUwBK/+4AVABL/+0AVQBN/+0AVgBN/+0AVwBO/+0AWABP/+wAWQBQ/+wAWgBQ/+0AWwBR/+wAXABT/+wAXQBU/+wAXgBU/+wAXwBV/+sAYABW/+sAYQBX/+sAYgBX/+sAYwBZ/+oAZABa/+oAZQBb/+oAZgBc/+kAZwBc/+kAaABd/+kAaQBe/+kAagBg/+kAawBg/+kAbABh/+kAbQBi/+kAbgBj/+gAbwBj/+gAcABk/+gAcQBl/+cAcgBn/+cAcwBn/+cAdABo/+cAdQBp/+YAdgBq/+YAdwBq/+YAeABr/+UAeQBt/+UAegBu/+UAewBu/+UAfABv/+UAfQBw/+QAfgBx/+QAfwBy/+QAgABz/+QAgQB0/+MAggB1/+MAgwB2/+MAhAB2/+MAhQB3/+MAhgB4/+MAhwB5/+IAiAB6/+IAiQB7/+IAigB8/+IAiwB9/+IAjAB9/+IAjQB+/+IAjgB//+IAjwCB/+EAkACB/+EAkQCC/+AAkgCD/+AAkwCE/+AAlACE/+AAlQCF/+AAlgCH/98AlwCI/+AAmACI/98AmQCJ/98AmgCK/94AmwCL/94AnACM/94AnQCM/94AngCO/94AnwCP/94AoACQ/94AoQCQ/90AogCR/90AowCS/90ApACT/90ApQCU/9wApgCV/9sApwCW/9sAqACX/9sAqQCX/9sAqgCY/9sAqwCZ/9sArACb/9sArQCb/9sArgCc/9sArwCd/9sAsACe/9sAsQCe/9oAsgCf/9oAswCg/9kAtACi/9kAtQCj/9gAtgCj/9gAtwCk/9gAuACl/9gAuQCm/9gAugCm/9gAuwCo/9gAvACp/9cAvQCq/9cAvgCq/9cAvwCr/9cAwACs/9cAwQCt/9cAwgCu/9cAwwCv/9YAxACw/9YAxQCx/9UAxgCx/9UAxwCy/9QAyACz/9QAyQC0/9QAygC1/9QAywC2/9QAzAC3/9QAzQC4/9QAzgC5/9QAzwC5/9QA0AC6/9QA0QC8/9QA0gC9/9MA0wC9/9IA1AC+/9IA1QC//9IA1gDA/9EA1wDA/9EA2ADC/9EA2QDD/9EA2gDE/9EA2wDE/9EA3ADF/9EA3QDG/9EA3gDH/9AA3wDH/9AA4ADJ/88A4QDK/88A4gDL/88A4wDL/88A5ADM/88A5QDN/88A5gDO/88A5wDQ/84A6ADQ/84A6QDR/84A6gDS/80A6wDT/80A7ADT/80A7QDU/80A7gDW/8wA7wDX/8wA8ADX/8wA8QDY/8wA8gDZ/8wA8wDa/8wA9ADa/8wA9QDc/8sA9gDd/8sA9wDe/8sA+ADe/8oA+QDf/8oA+gDg/8oA+wDh/8oA/ADh/8oA/QDj/8kA/gDk/8kA/wDl/8kA+Aj/AAgACP/+AAkACf/9AAoACv/9AAsAC//9AAwADP/9AA0ADf/9AA4ADf/9AA8ADv/9ABAAD//9ABEAD//8ABIAEf/8ABMAEv/8ABQAE//8ABUAE//7ABYAFP/7ABcAFf/7ABgAFf/6ABkAF//7ABoAGf/6ABsAGv/6ABwAGv/6AB0AG//6AB4AHP/5AB8AHP/5ACAAHf/5ACEAH//5ACIAIP/5ACMAIP/4ACQAIf/4ACUAIv/4ACYAIv/3ACcAI//3ACgAJP/3ACkAJv/3ACoAJv/3ACsAJ//2ACwAKP/2AC0AKP/2AC4AKv/2AC8AK//2ADAALf/2ADEALf/1ADIALv/1ADMAL//1ADQAMP/0ADUAMP/0ADYAMf/0ADcAM//0ADgANP/zADkANP/zADoANf/zADsANf/zADwANv/zAD0AN//zAD4AOP/zAD8AOf/yAEAAOv/yAEEAO//yAEIAPP/yAEMAPP/xAEQAPf/xAEUAPv/xAEYAP//wAEcAQP/wAEgAQf/wAEkAQv/wAEoAQv/wAEsAQ//wAEwARP/wAE0ARv/vAE4ARv/vAE8AR//vAFAASP/vAFEASf/uAFIASf/uAFMASv/uAFQAS//tAFUATf/tAFYATf/tAFcATv/tAFgAT//sAFkAUP/sAFoAUP/tAFsAUf/sAFwAU//sAF0AVP/sAF4AVP/sAF8AVf/rAGAAVv/rAGEAV//rAGIAV//rAGMAWf/qAGQAWv/qAGUAW//qAGYAXP/pAGcAXP/pAGgAXf/pAGkAXv/pAGoAYP/pAGsAYP/pAGwAYf/pAG0AYv/pAG4AY//oAG8AY//oAHAAZP/oAHEAZf/nAHIAZ//nAHMAZ//nAHQAaP/nAHUAaf/mAHYAav/mAHcAav/mAHgAa//lAHkAbf/lAHoAbv/lAHsAbv/lAHwAb//lAH0AcP/kAH4Acf/kAH8Acv/kAIAAc//kAIEAdP/kAIIAdf/jAIMAdv/jAIQAdv/jAIUAd//jAIYAeP/jAIcAef/iAIgAev/iAIkAe//iAIoAfP/iAIsAff/iAIwAff/iAI0Afv/iAI4Af//iAI8Agf/hAJAAgf/hAJEAgv/gAJIAg//gAJMAhP/gAJQAhP/gAJUAhf/gAJYAh//fAJcAiP/gAJgAiP/fAJkAif/fAJoAiv/eAJsAi//eAJwAjP/eAJ0AjP/eAJ4Ajv/eAJ8Aj//eAKAAkP/eAKEAkP/dAKIAkf/dAKMAkv/dAKQAk//dAKUAlP/cAKYAlf/bAKcAlv/bAKgAl//bAKkAl//bAKoAmP/bAKsAmf/bAKwAm//bAK0Am//bAK4AnP/bAK8Anf/bALAAnv/bALEAnv/aALIAn//aALMAoP/ZALQAov/ZALUAo//YALYAo//YALcApP/YALgApf/YALkApv/YALoApv/YALsAqP/YALwAqf/XAL0Aqv/XAL4Aqv/XAL8Aq//XAMAArP/XAMEArf/XAMIArv/XAMMAr//WAMQAsP/WAMUAsf/VAMYAsf/VAMcAsv/UAMgAs//UAMkAtP/UAMoAtf/UAMsAtv/UAMwAt//UAM0AuP/UAM4Auf/UAM8Auf/UANAAuv/UANEAvP/UANIAvf/TANMAvf/SANQAvv/SANUAv//S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AkICTwJPAl4CZQJxApACkgK0AtYC+gMHAwsDDwMVAyoDRwNdA2UDdAN5A5YDsAPMA90D4gP2A/wD/AP/BAoEHwQiBCYEKwRHBF8EdQSeBOcE5wVcBcsF5QYKBm0Ghga4BvEHNgc+B1AHUQddB48HtgfUCGAAtgDDALUAtwAAAAAAAAAAAAAAAAHgA4EDRQO1AI4CMwQZAs4CzgAtAF8AZANNAj8AAAKoAYgCfQG0AiQFeAY7AjsBTgDwBCYClALGAp8C9gI7A00BSwFTAGoCMQAAAAAAAAYUBKoAAAA8BMMA7QS8AmUCzgO1AHgGDAF+Au8GDACyAQACOQAAAcUDMAQrA8sA2gPfAQcEoQDbBAoBFwHtAqcDUAELAb0EPgVYACEDnACuA3EBfQC1AkUAAAr7CIwBKwFOAaoAhwBUATIB+AP/AAMCTgC0ADcD4wCDAGsC2ADtAHcAiACXAWQEZwCOADMBfADnAKYCngMpBW4GKgYVAckCaQSKAhMBtAACBKkAAAI5ASQBAwUUAIQBXQOaBu8C2QB1AM8ECgDeA6wEvALPAq4DTQTwBVIBaABtAH0AhgBx/4EAeQVYBNIBZwADAVYAJQTgAJQAfAMyBCEAlAB/AHIAXAAvALYAGAC6ALgAQQNNAHIAGAAfAEwBagFVAJkAmgCaAJgAsgAEAHgAaQAUAFcAbgDOALQGVAK4AGcFDgFlAOcAAATL/lIAWv+mAJn/ZwBu/5IALf/UAIf/fAC4AKgA5QCPAKgBhf57AHAAHgDZAN4BTAVGAs8FRv8tAooC2QJTApYAtwAAAAAAAAAAAAAAAAAAASUBGADqAOoArgBGAD4FuwCKBNcAUwA//4z/1QAVACgAIgCZAGIASgDkAG0A7gDlAEgDwAAz/k4Csf9GA3AAeQXfAFH/p/8fAQoAaP9sAE8AvAClBwUAYQcrBgABAAAAAAACOQAAAjkAAAI5ALAC1wBeBHMAFQRzAEkHHQB3BVYAWAGHAFoCqgB8AqoAfAMdAEAErAByAjkAqgKqAEECOQC6AjkAAARzAFUEcwDfBHMAPARzAFYEcwAaBHMAVQRzAE0EcwBhBHMAUwRzAFUCOQC5AjkAqgSsAHAErAByBKwAcARzAFoIHwBvBVb//QVWAJYFxwBmBccAngVWAKIE4wCoBjkAbQXHAKQCOQC/BAAANwVWAJYEcwCWBqoAmAXHAJwGOQBjBVYAngY5AFgFxwChBVYAXATjADAFxwChBVYACQeNABkFVgAJBVYABgTjACkCOQCLAjkAAAI5ACcDwQA2BHP/4QKqAFkEcwBKBHMAhgQAAFAEcwBGBHMASwI5ABMEcwBCBHMAhwHHAIgBx/+iBAAAiAHHAIMGqgCHBHMAhwRzAEQEcwCHBHMASAKqAIUEAAA/AjkAJARzAIMEAAAaBccABgQAAA8EAAAhBAAAKAKsADkCFAC8AqwALwSsAFcFVv/9BVb//QXHAGgFVgCiBccAnAY5AGMFxwChBHMASgRzAEoEcwBKBHMASgRzAEoEcwBKBAAAUARzAEsEcwBLBHMASwRzAEsCOQC9AjkAIwI5/+UCOQAJBHMAhwRzAEQEcwBEBHMARARzAEQEcwBEBHMAgwRzAIMEcwCDBHMAgwRzAEkDMwCABHMAawRzABsEcwBRAs0AbQRMAAEE4wCZBeUAAwXlAAMIAADhAqoA3gKqAD0EZABOCAAAAQY5AFMFtACaBGQATgRkAE0EZABNBHP//QScAKAD9AA4BbQAegaWAKEEZAAAAjEAAAL2AC8C7AAtBiUAfwcdAEQE4wCBBOMAngKqAOgErAByBGQAVARzAC4EZAAzBOUAGgRzAIYEcwCMCAAA7wVW//0FVv/9BjkAYwgAAIEHjQBSBHP//AgAAAACqgBTAqoARwHHAIABxwBsBGQATgP0AC8EAAAhBVYABgFW/jkEc//kAqoAXAKqAFwEAAAXBAAAFwRzAEkCOQC5AccAbAKqAEcIAAAlBVb//QVWAKIFVv/9BVYAogVWAKICOQCNAjn/4AI5AAQCOQAVBjkAYwY5AGMGOQBjBccAoQXHAKEFxwChAjkAxgKqABkCqgAGAqoAHQKqAC4CqgDlAqoAogKqAGsCqgA6AqoAtwKqACgEcwAAAccAAwVWAFwEAAA/BOMAKQQAACgCFAC8Bcf//QRzAEkFVgAGBAAAIQVWAJ4EcwCHBKwAcgSsAKECqgBrAqoAGQKqACEGrABrBqwAawasACEEcwAABjkAbQRzAEICOQCxBVYAXAQAAD8FxwBmBAAAUAXHAGYEAABQBHMARgRr/+ECqgHxBVb//QRzAEoFVv/9BHMASgXHAJ4E6wBHBcf//QVWAKIEcwBLBVYAogRzAEsEcwCWAccAQgRzAJYCVQCIBHMAmgKsAIMFxwCcBHMAhwXHAJwEcwCHBjkAYwRzAEQFxwChAqoAhQXHAKECqgA8BVYAXAQAAD8E4wAwAjkAJATjADADAAAjBccAoQRzAIMFxwChBHMAgwTjACkEAAAoBOMAKQQAACgEaACkBjkAYAZiAFUEoABIBHQASAORAGIE8ABEAykALgUwAEgEa//hBAAAsALrAFIIwAAzCAAATwQAAJkIAABPBAAAmQgAAE8EAACYBAAAmAfVAWoFwACeBKsAcgTVAJ0ErABxBNUCIgTVAQUFq//pBQAByQWrAn4Fq//pBasCfgWr/+kFqwJ+Bav/6QWr/+kFq//pBav/6QWr/+kFqwHABasCfgWrAcAFqwHABav/6QWr/+kFq//pBasCfgWrAcAFqwHABav/6QWr/+kFq//pBasCfgWrAcAFqwHABav/6QWr/+kFq//pBav/6QWr/+kFq//pBav/6QWr/+kFq//pBav/6QWr/+kFq//pBav/6QWr/+kFq//pBav/6QWrAtYFqwBmBav/6gXV//8E1QCSCAAAAAfrATAH6wEgB+sBMAfrASAE1QCyBNUAgATVACoIKwGYCGsBuAdVABAGAAD0BgAAbwRAADoFQAA3BMAAPwQVAEAEAAAlBgAAVQXhAL8DjQCJBNX/2QGAAIAC1QCGBxUAYQKWAA8E1QCSAtYAgwLWAIME1QCyAtYAcAVW//0EcwBKBccAZgQAAFAFxwBmBAAAUAVWAKIEcwBLBVYAogRzAEsFVgCiBHMASwY5AG0EcwBCBjkAbQRzAEIGOQBtBHMAQgXHAKQEcwCHBccAHwRzAAYCOf/OAjn/zgI5/+QCOf/kAjn/9gI5//UCOQCjAccAZgQAADcBx/+iBVYAlgQAAIgEAACGBHMAlgHH//oFxwCcBHMAhwXJAKUEcwCLBjkAYwRzAEQGOQBjBHMARAXHAKECqgBrBVYAXAQAAD8E4wAwAjkADAXHAKEEcwCDBccAoQRzAIMFxwChBHMAgwXHAKEEcwCDB40AGQXHAAYFVgAGBAAAIQHHAIkFVv/9BHMASggAAAEHHQBEBjkAUwTjAIECOQC5B40AGQXHAAYHjQAZBccABgeNABkFxwAGBVYABgQAACEBxwCKAqr/4QRzABsEzQBaBqwAawasACIGrAAiBqwASgKqAOICqgBrAqoA3gKq/+oFV///Bkb/pwa0/6gDEv+oBjL/pwbY/6cGBf+nAcf/eAVW//0FVgCWBVj//gVWAKIE4wApBccApAI5AL8FVgCWBVgACwaqAJgFxwCcBTMAbQY5AGMFxwCkBVYAngTyAJQE4wAwBVYABgVWAAkGrwB/BfsAYQI5AAQFVgAGBKAASAORAGIEcwCLAccAawRgAIgEmgCMBAAAGQOHAEgEcwCLBHMAXAHHAIkEAACGBAAAGAScAKAEAAAaA5UAXARzAEQEjQCDA9sAVgRgAIgEMwARBbQAegY/AFcBx//JBGAAiARzAEgEYACIBj8AVwVXAKIG6wAyBFUAoQXAAGQFVgBcAjkAvwI5AAQEAAA3CHUADQgVAKQG1QAxBKkAoQUVAAoFwACgBVb//QVAAKcFVgCWBFUAoQVrAAAFVgCiB2MABwTVAE4FwAChBcAAoQSpAKEFQAASBqoAmAXHAKQGOQBjBcAAoAVWAJ4FxwBmBOMAMAUVAAoGFQBSBVYACQXrAJ8FVQBXB1UAoQeAAKEGVQAABxUAqAVAAKUFwABVCBUApAXHABoEcwBKBJUAWwRAAIgC6wCIBKsAAARzAEsFWv/7A6sAMgR4AIcEeACHA4AAhgSrABgFgACMBGsAiARzAEQEVQCIBHMAhwQAAFADqgAmBAAAIQaVAEsEAAAPBJUAigQrAEUGawCNBpUAjQUAACgFwACLBCsAhAQVADAGAACJBFUAHwRzAEsEcwAAAusAiQQVAEsEAAA/AccAiAI5AAkBx/+iB0AAEwaAAIMEcwAAA4AAhgQAACEEawCIA+kAoQNKAIgIAABBCJUAoAWFAC0CqgEBAqoAHgKqADECqgAxAqoBAQKqAH4CqgB+AqoAjAKqAIwCqgEBAqoAEAKqAQECqgEhAxAAfQKqAIwCMwDSAqoDCwKq/wQCOQC5BIEAaQRWADIDMQAZBBEALQTRAJYB+QCbAw8AXwTKAJsEuACMAfkAmwQTACgDsABQA7QAPATKAJsEzwBQAfkAmwLSADwEmABaBDwAGQSIAG4EXwBzA7EAGQPUAAoEZgCWBBMAKAWOAGQFJAAoA/IAmwPyAJsD8gCbAeMAWgNWAFoGhgCbAfn/rAQTACgEEwAoA7T/VwO0/1cESAAtBY4AZAWOAGQFjgBkBY4AZASBAGkEgQBpBIEAaQRWADIDMQAZBBEALQTRAJYCSwAA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BgYFBwQHBgYEDAsGCwYLBgYLCAYHBgcHCAcICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBwsLCwsLBwcHCwwKCAgGBwcGBggIBQcCBAoEBwQEBwQIBgcGBwYGBgYGBgYIBggGCAYHBgkGAgICAgICAgIFAgcFBgYCBwYIBggGCAYHBAcGBgQHBgcGBwYIBgoKCAYCCAYLCggGAwoKCgoKCggGAgQGBgoKCgoEBAQECAkJBQkKCAIIBwgGBwcCBwgIBwcIBwYHBggHCAgCCAYFBgIGBgYFBgYCBgYGBgUGBgUGBQgIAgYGBggGCgYHBwICBQwLCQcHBwgHBwYIBgwHCQkHBwgHCAcGBwYHCAcHBgoKCAkHCAsIBgYHBAYGCAUGBgUGCAYGBgYGBgYIBgYGCAgHCAYGCAYGBgQGBgICAgoJBgUGBgUFCw0JBAQEBAQEBAQEBAQEBAQEAwQEAwYGBQYHAwMHBwMGBQUHBwMFBwYGBgYGBgYJBwYGBgMFCQMGBgUFBwkJCQkGBgYGBQYHAwUHAwYFBQcFBwYGBgYGCQcDBgUGBgAAAAAEBAQFAgIDAgICAgICBgYGBgYGBgYGBgYEBggIAwgGBgYICAgICAIICAgICAgICAcICAgICAMDCAgICAYGBgYFBQkKBAYJCgQGBwYICAgICAgICAgICAgICAgIAgICAgIICAAAAAAAAAAAAAAAAAAAAAAHCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgEBAgHBQIDAgMFBQIDBwYDAwIDCAgDAwMECAgDAwgIAwMGBgYGBgYGBgYGBgYEBAQEBQUFBQkJBgYJCQYGDAwJCQwMCQkGBgYGBgYGBgYFBgQGBQYECQkDAwYGAwMHBwQEBgYCAgQEBAQGBgMDAwQFBAUFBwYHBgMDBgcGBwYHBgcICAICCAgIAgIICAIDCAgIAgICAgICCAICCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIBAQECAgICAgICAgICAgICAgICAgICAgICAgIAQsWCQcJBwAAAAAAAAAAAAAAAAAAAAAGCQkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAggGCAYIBggGCAYIBggGCAYIBggGCAYIBgYGBgYGBgYGBgYGBgYGBgYCAgICCAYIBggGCAYIBggGCAYJBwkHCQcJBwkHBwYHBgkHCQcJBwkHCQcIBggGCAYIBgICCAYHBgcGBwYHBgcGAAAAAAYECgcGBQYFCAYGBgYGBwYHBgcGCAYJBgAADBgJAAMDAwQHBwsIAgQEBQcDBAMDBwcHBwcHBwcHBwMDBwcHBwwHCAkJCAcJCQMGCAcJCQkICQkIBwkHCwcHBwMDAwUHBAcHBgcHAwcHAwMGAwsHBwcHBAcDBwUJBQUFBAMEBwcHCQgJCQkHBwcHBwcGBwcHBwMDAwMHBwcHBwcHBwcHBwUHBwcEBggJCQwEBAcMCQkHBwcHBwYJCgcDBAQJCwcHAwcHBwcHBwcMBwcJDAsHDAQEAwMHBgUHAgcEBAYGBwMDBAsHCAcICAMDAwMJCQkJCQkDBAQEBAQEBAQEBAcDCAcHBQMJBwcFCAcHBwQEBAoKCgcJBwMIBwkGCQYHBwQHBwcHCQcJCAcIBwcDBwQHBAkHCQcJBwkECQQIBwcDBwUJBwkHBwUHBQcJCQcHBQcFCAcGBA0MBgwGDAYGDAkHBwcHBwkICQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQcMDAwMDAcHBwwNCwkJBggHBgYJCQUHAgQLBAcEBAcEBwcJBgkGCAcIBwgHCQcJBwkHCQcJBwMDAwMDAwMDBgMIBgcHAwkHCQcJBwkHCQQIBwcDCQcJBwkHCQcLCQcFAwcHDAsJBwMLCQsJCwkHBQMEBwcKCgoKBAQEBAcJCgQJCQkDBwgHCAcJAwgHCQkICQkIBwcHBwkJAwcHBQcDBwcFBQcHAwcFBwUFBwcGBwYJCQMHBwcJCAoHCQgDAwYNDAoHCAkHCAgHCAgLBwkJBwgJCQkJCAkHCAkHCQgLCwoKCAkMCQcHBgQHBwkGBwcGBwkHBwcHBgUFCQUHBgkJCAkHBgkHBwcEBgcDAwMLCgcGBQcGBQwNCAQEBAQEBAQEBAQEBAQFBAMEBAMHBwUGBwMFBwcDBgYGBwcDBAcGBwcGBgcGCAgGBgYDBQkDBgYGBgYICAgIBwcHBwUGBwMFBwMGBgYHBAcHBwYHBggIAwcGBwcAAAAABAQEBQICAwICAwIDAgYGBgYGBgYGBgYGBAYJCQMJBgYGCQkJCQkDCQkJCQkJCQkICQkJCQkDAwkJCQkHBgYGBgYKCwUGCgsFBggHCQkJCQkJCQkJCQkJCQkJCQMDAwMDCQkAAAAAAAAAAAAAAAAAAAAABwwJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJBAQJBwUCAwIDBQUCAwgHAwMCAwkJAwMDBQkJAwMJCQMDBwYGBgcGBgYHBgYGBAQEBAYGBgYKCgYGCgoGBg0NCgoNDQoKBwcHBwcHBwcHBQYFBwUGBQkJAwMHBwMDBwcFBQYGAgIEBAUFBgYDAwMFBQUFBQgHCAcDAwcHBwcHBwcHCQkCAgkJCQIDCQkDAwkJCQMDAwMDAwkCAgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQQEBAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQIMGAoICggAAAAAAAAAAAAAAAAAAAAABgoKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcIBwgHCAcIBwgHCAcIBwgHAwMDAwkHCQcJBwkHCQcJBwkHCggKCAoICggKCAkHCQcKCAoICggKCAoIBwUHBQcFBwcDAwkHCQcJBwkHCQcJBwAAAAAHBAsIBwUHBQkHBwYHBggGCAYIBgkHCQcAAA0aCgAEBAMFBwcMCQIEBAUIBAQEBAcHBwcHBwcHBwcEBAgICAcNCQkJCQkICgkDBgkHCwkKCQoJCQcJCQ0HCQcEBAQFBwQHBwcHBwMHBwMDBwMLBwcHBwQHBAcFCQcHBwQDBAgJCQkJCQoJBwcHBwcHBwcHBwcDAwMDBwcHBwcHBwcHBwcFBwcHBQcJCgoNBAQHDQoJBwcHBwcGCQsHAwQFCgwHCAMICAcHCAcHDQkJCg0MBw0EBAMDBwYHCQIHBAQHBwcEAwQOCQkJCQkDAwMDCgoKCQkJAwQEBAQEBAQEBAQHAwkHBwcDCQcJBwkHCAgEBAQLCwsHCgcDCQcJBwkHBwcECQcJBwkICQkHCQcHAwcEBwQJBwkHCgcJBAkECQcHAwcFCQcJBwcHBwcHCgkIBwYIBQgHBwUPDQcNBw0HBw0JCAgICAgJCAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkIDQ0NDQ0ICAgNDgwKCgcJCAcHCgoGCAIFDAUIBQUIBQkHCQcJBwkHCQcJBwoHCgcKBwkHCQcDAwMDAwMDAwYDCQcHBwMJBwkHCgcKBwkECQcIBAkHCQcJBwkHDQkJBwMJBw0MCgcDDQkNCQ0JCQcDBAcICwsLCwQEBAQJCgsFCgsKAwkJCQkHCQMJCQsJCAoJCQgHCQcJCgMJCAYHAwcHBwYHBwMHBwcFBgcHBgcHCQkDBwcHCQkLBwkJAwMGDg0LCAgJCQkJBwkJCwgJCQgJCwkKCQkJBwgLBwoJCwsKCwgJDQkHBwcFCAcJBgcHBgcJBwcHBwcFBwkHBwcLDAgJBwcKBwcHBQcHAwMDDAsHBgcHBgUNDgkEBAQEBAQEBAQEBAQEBQQDBAQEBwcFBwgDBQgIAwcGBggIAwUHBwcHBgYHBwkIBgYGAwUJAwcHBgYHCQkJCQcHBwcFBwgEBQgEBwYGCAUHBwcGBwcJCAMHBgcHAAAAAAQEBQUDAwMDAwMDAwIHBwcHBwcHBwcHBwQHCgoECgcHBwoKCgoKAwoKCgoKCgoKCAoKCgkJAwMKCgoKBwcHBwYGCwwFBwsMBQcICAoKCgoKCgoKCgoKCgoKCgoDAwMDAwoKAAAAAAAAAAAAAAAAAAAAAAcNCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgQECggFAwMDAwYGAwMICAMDAwMJCQMDBAUJCQMDCQkDAwcHBwcHBwcHBwcHBwQEBAQGBgYGCwsHBwsLBwcODgsLDg4LCwgICAgICAgIBwYHBQcGBwUKCgMDCAgDAwgIBQUHBwMDBAQFBQcHAwMEBQYFBgYICAgIAwMHCAcIBwgHCAoKAwMKCgoCAwoKAwMKCgoDAwMDAwMKAwMKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoEBAQKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCDRoLCQsJAAAAAAAAAAAAAAAAAAAAAAcLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCQcJBwkHCQcJBwkHCQcJBwkHCQcJBwkHCQcJBwkHCQcJBwkHCQcJBwMDAwMKBwoHCgcKBwoHCgcKBwsJCwkLCQsJCwkJBwkHCwkLCQsJCwkLCQkHCQcJBwkHAwMKBwkHCQcJBwkHCQcAAAAABwUMCQgGCAYJBwcHBwcJBwkHCQcKBwoHAAAPHgsABAQFBQgIDQoDBQUGCQQFBAQICAgICAgICAgIBAQJCQkIDwkKCwsKCQsKAwcKCAsKDAoMCwoJCgkPCQkIBAQEBQgFCAgICAgECAgDAwcDDQgICAgFCAQIBwsHBwgFAwUJCQkLCgoMCggICAgICAgICAgIAwMDAwgICAgICAgICAgIBggICAUICQsLDwUFCA8MCwgICAgIBwsMCAQFBQwNCAkFCQkICAkICA8JCQwPDggPBQUDAwgHBwkDCAUFCAgIBAMFDgkKCQoKAwMDAwwMDAoKCgMFBAUFBQUFBQUFCAMKCAgIAwsICQcKCAkJBQUFDQ0NCAsIAwoICwgLCAgIBQkICQgLCQsKCAoICAMIBAgFCggKCAwICwULBQoICQQJBgoICggICAgICAwLCQgHCQUKCAgFEQ8IDwgPCAgPCwkJCQkJCwkLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCQ8PDw8PCQkJDxAOCwsICgkICAsLBwkDBQ0FCQUFCQUJCAsICwgKCAoICggLCAsICwgKCAoIAwMDAwMDAwMHAwoHCAgDCggLCAwIDAgLBQoICQQKCAoICggLCA8LCQcDCQgPDQwIAw8LDwsPCwkHAwUICQ0NDQ0FBQUFCQwNBgwMCwMJCgoKCAoDCgsLCgoMCgoJCQkJCwsDCQkHCAMICQcHCAgDCAcIBwcICAcICAsMAwgICAwKDQgLCgMDBxAPDQkKCwkKCggKCg4JCwsJCgsKDAoKCwkKCwkLCQ4PDA0KCw8LCAkIBQkICQcICAcICggICAgIBwcLBwkICwsJCwgICwgICAUICAMDAw4MCAcHCAcGDxAKBQUFBQUFBQUFBQUFBQYFAwUFBAgIBggJAwYJCQMIBwcJCQMFCQgJCAcHCAgKCgYGBgQGDAMICAcHCAoKCgoICAgIBggJBAYJBAgHBwkFCQkIBwgICgoDCAcICQAAAAAFBQUGAwMEAwMDAwMCCAgICAgICAgICAgFCAsLBAsICAgLCwsLCwMLCwsLCwsLCwoLCwsLCwQECwsLCwgICAgHBwwOBggMDgYICgkLCwsLCwsLCwsLCwsLCwsLAwMDAwMLCwAAAAAAAAAAAAAAAAAAAAAIDwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsFBQsJBgMDAwMGBgMDCgkEBAMDCwsEBAQGCwsEBAsLBAQICAgICAgICAgICAgFBQUFBwcHBwwMCAgMDAgIEBANDRAQDQ0JCQkJCQkJCQgHCAYIBwgGDAwEBAkJBAQJCQYGCAgDAwUFBgYICAQEBAYHBgYGCgkKCQQECAkICQgJCAkLCwMDCwsLAgMLCwMECwsLAwMDAwMDCwMDCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLBQUFCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLAg8eDQoNCgAAAAAAAAAAAAAAAAAAAAAIDQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwkICQgJCAkICQgJCAkICQgJCAkICQgJCAoICggKCAoICggKCAoICggDAwMDDAgMCAwIDAgMCAwIDAgNCg0KDQoNCg0KCggKCA0KDQoNCg0KDQoJBwkHCQcJCAMDDAgKCAoICggKCAoIAAAAAAgFDgoJBwkHCwgICAgICggKCAoICwgMCAAAECAMAAQEBQYJCQ4LAwUFBgkEBQQECQkJCQkJCQkJCQQECQkJCRALCwwMCwoMCwMICwkNCwwLDAsLCQsLDwsJCQQEBAcJBQkJCAkJBAkIBAMIAw0ICQkJBQgECAcLBwcHBQMFCQsLDAsLDAsJCQkJCQkICQkJCQMDAwMICQkJCQkICAgICQYJCQkGCQkMDBAFBQkQDAsJCQkJCQgLDQkEBQUMDgkKBQkJCQkJCQkQCwsMEQ8JEAUFBAQJCAcJAwkFBQgICQQEBRELCwsLCwMDAwMMDAwLCwsDBQQFBQUFBQUFBQkDCwgJBwMMCQkHCwkJCQUFBQ0NDQkMCQMLCAwIDAgJCQULCQsJDAoMCwkLCQkDCQQJBQsICwgMCQsFCwULCAkECQYLCAsICQcJBwkMCwkJBwoFCgkIBhIQCBAIEAgIEAwJCgkKCgsKCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLDAoQEBAQEAoKChARDwwMCQsKCAgMDAcKAwYOBQoGBgoGCwkMCAwICwkLCQsJDAkMCQwJCwgLCAMDAwMDAwMECAMLCAgJAwsIDAkMCQwJCwULCAoECwgLCAsIDAgPCwkHAwsJEA4MCQMPCw8LDwsJBwQFCQoNDQ0NBQUFBQsNDQYMDAwDCwsLCwkLAwsLDQsKDAsLCgkJCwsMAwkJBwgDCAkIBwgJAwgICQcHCQkICAgLDQMICQgNCw4JDAsDAwgREA0JCgwLCwsJCwsOCgwMCQsNCwwLCwwJCgsLDAoNDg0OCwwQDAkJCQYJCQoHCAgHCAsICQgJCAcHDQcJCAsLCgwJCAwJCQgGCAgEAwMPDQgHBwgIBxARCwUFBQUFBQUFBQUFBQUGBQMFBQQJCQYICgMGCgkDCAcHCgoDBgkICQkHCAkICwoGBgYEBwwDCAgHBwkLCwsLCQkJCQYICgUHCQUIBwcKBgkJCQgJCAsKAwkHCQkAAAAABQUGBwMDBAMDAwMDAwgICAgICAgICAgIBQgMDAUMCAgIDAwMDAwDDAwMDAwMDAwKDAwMCwsEBAwMDAwJCAgICAgNDwYIDQ8GCAoJDAwMDAwMDAwMDAwMDAwMDAQDAwMDDAwAAAAAAAAAAAAAAAAAAAAACRAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMBQUMCgcDBAMEBwcDBAoJBAQDBAsLBAQFBgsLBAQLCwQECQgICAkICAgJCAgIBQUFBQgICAgNDQkJDQ0JCRISDg4SEg4OCQkJCQkJCQkJBwgGCQcIBg0NBAQJCQQECgoGBggIAwMFBQYGCAgEBAUGBwYHBwoJCgkEBAkKCQoJCgkKDAwDAwwMDAMDDAwDBAwMDAMDAwMDBAwDAwwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAUFBQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAIQIA4LDgsAAAAAAAAAAAAAAAAAAAAACA0NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQLCQsJCwkLCQsJCwkLCQsJCwkLCQsJCwkLCQsJCwkLCQsJCwkLCQsJAwQDBAwJDAkMCQwJDAkMCQwJDgsOCw4LDgsOCwsICwgOCw4LDgsOCw4LCQcJBwkHCwkDBAwJCwgLCAsICwgLCAAAAAAJBg8LCQcJBwwJCQgJCAsICwgLCAwJDAkAABEiDQAFBQUGCQkPCwMGBgcKBQYFBQkJCQkJCQkJCQkFBQoKCgkRCwsMDAsKDAsFCQsJDQsMCwwLCwkLCxELCwkFBQUHCQYJCQkJCQUJCQQDCAMNCQkJCQYIBAkHCwcJCAYFBgoLCwwLCwwLCQkJCQkJCQkJCQkFBQUFCQkJCQkJCQkJCQkHCQkJBgkKDQ0RBgYJEQ0MCQkJCQkIDA4JBAUFDQ8JCgUKCgkJCwkJEQsLDBEQCREGBgQECQgJCwMJBgYJCQkFBAYRCwsLCwsFBQUFDAwMCwsLBQYEBgYGBgYGBgYJAwsICQgFDAkLCQsJCgoGBgYODg4JDAkFCwgMCQwJCgkGCwkLCQwKDAsJCwkJAwkECQYLCQsJDAkLBgsGCwgJBAkGCwkLCQkICQgJDA0KCQgLBgsJCQYTEQkRCREJCREMCgoKCgoMCwwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwKEREREREKCgoREhANDQkLCgkJDQ0ICgMGDwYKBgYKBgsJDAkMCQsJCwkLCQwJDAkMCQsJCwkFBQUFBQUFBAkDCwgICQMLCQwJDAkMCQsGCwgKBAsJCwkLCQwJEQsLCQQLCREPDQkEEQsRCxELCwkEBgkKDg4ODgYGBgYLDQ0GDQ4NAwsLCwsJCwULCw0LCwwLCwsJCwsNDQULCggJAwkKCQgJCQMICQkHCAkJCAkJCw0DCQkJDQsPCQwLBQUJEhEPCgsLCwsLCQwLDwoMDAoKDQsMCwsMCQsNCw0KDw8NDgoMEAwJCQkGCgkLCAkJBwoLCQkJCQkICQ0HCgkODgsMCQkNCQkJBgkIBAUDDw4JBwkJCAcREgwGBgYGBgYGBgYGBgYGBwYDBgYFCgkHCQoDBwoKAwkICAoKAwYKCQoJCAgJCQwLBwcHBAcMAwkJCAgJDAwMDAoKCgkHCQoFBwoFCQgICgYKCgkICQkMCwMJCAkKAAAAAAUFBgcEAwQDAwQDBAMJCQkJCQkJCQkJCQUJDQ0FDQkJCQ0NDQ0NBA0NDQ0NDQ0NCw0NDQwMBAQNDQ0NCgkJCQgIDhAHCQ4QBwkLCg0NDQ0NDQ0NDQ0NDQ0NDQ0EBAQEBA0NAAAAAAAAAAAAAAAAAAAAAAkRDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQUFDQoHBAQEBAcHBAQLCgQEBAQMDAQEBQYMDAQEDAwEBAoJCQkKCQkJCgkJCQYGBgYICAgIDg4JCQ4OCQkTEw4OExMODgoKCgoKCgoKCQgJBwkICQcNDQUECgoFBAoKBwcJCQQEBgYHBwkJBAQFBggHBwcLCgsKBAQJCgkKCQoJCg0NAwMNDQ0DBA0NBAQNDQ0EBAQEBAQNAwMNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0FBQUNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0CESIPCw8LAAAAAAAAAAAAAAAAAAAAAAkODgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECwkLCQsJCwkLCQsJCwkLCQsJCwkLCQsJCwkLCQsJCwkLCQsJCwkLCQUEBQQMCQwJDAkMCQwJDAkMCQ8LDwsPCw8LDwsLCQsJDwsPCw8LDwsPCwsJCwkLCQsJBQQMCQsJCwkLCQsJCwkAAAAACQYQCwoHCgcMCQkJCQkLCQsJCwkNCQ0JAAATJg4ABQUGBwsLEQ0EBgYHCwUGBQULCwsLCwsLCwsLBQULCwsLEw0NDg4NDA8NBgoNCw8NDw0PDg0MDQ0TDQwMBQUFBwsGCgsKCwsGCwoEBAkEEAoLCwsGCgUKCQ0JCQkGBgYLDQ0ODQ0PDQoKCgoKCgoLCwsLBgYGBgoLCwsLCwoKCgoLCAsLCwcKDA4OEwYGChMPDgoKCgsLCQ4QCgQHBw8RCwwGCwsLCgwLCxMNDQ8TEgsTBwcEBAoJCQwDCwYGCgoLBQQHEQ0NDQ0NBgYGBg8PDw0NDQYGBQYGBgYGBgYGCwQNCgwJBg4LDAkNCwsLBgYGEBAQCw8LBg0KDgoOCgsLBg0KDQoODA4NCw0LCwQLBgsGDQoNCg8LDgYOBg0KDAYMBw0KDQoMCQwJCg8OCwsIDAgMCwoHFRMKEwoTCgoTDgsLCwsLDQwNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0OCxMTExMTCwsLExQRDg4KDAsKCg4OCAsEBxEGCwcHCwcNCg4KDgoNCw0LDQsPCw8LDwsNCg0KBgYGBgYGBgQKBA0JCgsEDQoOCw8LDwsOBg0KDAUNCg0KDQoNChMNDAkEDQoTEQ8LBhMNEw0TDQwJBAYLCxAQEBAGBgYGDQ8PBw8QDwQNDQ0NDA0GDQ0PDQwPDQ0MDAwNDg4GDAsICgQKCwoICgsECgkLCQkLCwkKCg4QBAoLChANEAoODQYGChQTDwsMDg0MDQoNDRILDg4LDA8NDw0NDgwMDg0ODRERDxENDhMOCgsKBwsLDgkKCggKDQoLCQsKCAkQCQsKDg4MDgsKDgoLCgcKCgQGBBEPCggJCgkIExQNBgYGBgYGBgYGBgYGBgcGBAYGBQsKCAoLBAcLCwQKCQkLCwQHCwoLCgkJCgoNDAkJCQQIEAQKCgkJCg0NDQ0LCwsKCAoLBQgLBQoJCQsHCwsKCQoKDQwECgkKCwAAAAAGBgcIBAQFBAQEBAQDCgoKCgoKCgoKCgoGCg4OBQ4KCgoODg4ODgQODg4ODg4ODgwODg4ODgUFDg4ODgsKCgoJCQ8SBwoPEgcKDAsODg4ODg4ODg4ODg4ODg4OBAQEBAQODgAAAAAAAAAAAAAAAAAAAAALEw4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4GBg4MCAQEBAQICAQEDAsFBQQEDg4FBQUHDg4FBQ4OBQULCgoKCwoKCgsKCgoGBgYGCQkJCRAQCgoQEAoKFRUQEBUVEBALCwsLCwsLCwoJCgcKCQoHDw8FBQsLBQULCwcHCgoEBAYGBwcKCgUFBQcJBwgIDAsMCwUFCgsKCwoLCgsODgQEDg4OAwQODgQFDg4OBAQEBAQEDgQEDg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OBgYGDg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OAhMmEAwQDQAAAAAAAAAAAAAAAAAAAAAKEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0LDQsNCw0LDQsNCw0LDQsGBAYEDwsPCw8LDwsPCw8LDwsQDBAMEAwQDBAMDQoNChANEA0QDRANEA0MCQwJDAkNCgYEDwsNCg0KDQoNCg0KAAAAAAoHEg0LCAsIDgsLCgsKDQoNCg0KDgsPCwAAFSoQAAYGBgcMDBMOBAcHCAwGBwYGDAwMDAwMDAwMDAYGDAwMDBUNDg8PDg0QDgYLDgwRDhAOEA8ODA4NFQ4ODQYGBggMBwwLCwsMBgsLBQQKBBALDAsLBwsGCwsPCgsJBwYHDA0NDw4OEA4MDAwMDAwLDAwMDAYGBgYLDAwMDAwLCwsLDAgMDAwHCw0PDxUHBwwVEA8MDAwMCwoPEQwGBwgQEwwNBgwMDAwNDAwVDQ0QFRQMFQcHBQUMCgsOBAwHBwsLDAYFBxUNDg0ODgYGBgYQEBAODg4GBwcHBwcHBwcHBwwEDgsNCQYPDA4LDgwMDAcHBxISEgwQCwYOCw8LDwsMDAcNDA0MDw0PDgwODAwEDAYMBw4LDgsQDA8HDwcOCwwGDAgOCw4LDQkNCQwQEAwMCQ0IDgwLCBcVCxULFQsLFQ8MDQwNDQ8NDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw0VFRUVFQ0NDRUWExAQCw4MCwsQDwkNBAcTBw0HBw0HDQwPCw8LDgwODA4MEAsQCxAMDgsOCwYGBgYGBgYFCwQOCgoMBA4LDwwQDBAMDwcOCw0GDgsOCw4LDgsVDw4LBQ0MFRMQDAYVDxUPFQ8OCwUHDA0SEhISBwcHBw0QEQgQERAEDQ4ODg0OBg4OEQ4OEA4ODQwODhIQBg4MCQsECgwKCQsMBAoLCwsJDAwKCgsOEAQKDAoQDhILDw4GBgsWFRIMDQ8NDg4LDg4TDQ8PDA4RDhAODg8MDRAOEA4SFBETDg8VDwwMCwgMDA4KCwsJCw0LDAoLCwoLEQoMCxAQDQ8LCxALDAwICwsFBgQTEQwJCwsKCRUXDgcHBwcHBwcHBwcHBwcIBwYHBwYMCwgLDQYIDQwGCwoKDQ0GBwwLDAsKCgwLDw4LCwsFCRIGCwsKCgsPDw8PDAwMCwgLDQYJDAYLCgoNBwwMCwoMCw8OBgsKCwwAAAAABwcHCQQEBQQEBAQEAwsLCwsLCwsLCwsLBwsQEAYQCwsLEBAQEBAEEBAQEBAQEBANEBAQDw8FBRAQEBAMCwsLCgoRFAgLERQICw0MEBAQEBAQEBAQEBAQEBAQEAUEBAQEEBAAAAAAAAAAAAAAAAAAAAAADBUQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBwcQDQkEBQQFCQkEBQ0MBQUEBQ8PBQUGCA8PBQUPDwUFDAsLCwwLCwsMCwsLBwcHBwoKCgoREQsLERELCxcXEhIXFxISDAwMDAwMDAwLCQsICwkLCBERBgYMDAYGDQ0ICAsLBAQHBwgICwsFBQYICQgJCQ0MDQwFBQsNCw0LDQsNEBAEBBAQEAMEEBAEBRAQEAQEBAQEBRAEBBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAcHBxAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAMVKhIOEg4AAAAAAAAAAAAAAAAAAAAACxISAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUNDA0MDQwNDA0MDQwNDA0MDQwNDA0MDQwODA4MDgwODA4MDgwODA4MBgUGBRAMEAwQDBAMEAwQDBAMEg4SDhIOEg4SDg4LDgsSDhIOEg4SDhIODgsOCw4LDQwGBRAMDgsOCw4LDgsOCwAAAAALCBMODAkMCQ8MDAsMCw4LDgsOCxAMEAwAABgwEgAHBwgJDQ0VEAUICAkOBwgHBw0NDQ0NDQ0NDQ0HBw4ODg0YDxARERAPExEGDBANExETEBMREA4RDxcPEA8HBwcMDQgNDgwODQcODgUGDAYUDg0ODggMBw4LEQsMDAgGCA4PDxEQERMRDQ0NDQ0NDA0NDQ0GBgYGDg0NDQ0NDg4ODg0KDQ0NCA0PEhIYCAgNGBMRDQ0NDQ4MERQNBgkJEhUPDwgODQ0NDw0NGA8PExgXDRgICAUFDQwMEAQNCAgMDA0HBQgaDxAPEBAGBgYGExMTERERBggICAgICAgICAgNBhAMDwwGEQ0QDBANDg4ICAgUFBQNEw4GEAwRDBEMDQ0IDw0PDREPERANEA0NBg0HDQgRDhEOEw0RCBEIEAwOBw4JEQ4RDg8MDwwNExIODQsPCRANDAkaGAwYDBgMDBgRDg8ODw8RDxERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERIPGBgYGBgPDw8ZGRYSEg0QDgwMEhILDwUJFQgPCQkPCQ8NEQwRDBANEA0QDRMOEw4TDREOEQ4GBgYGBgYGBQwGEAwMDQYRDhENEw0TDREIEAwPBxEOEQ4RDhEOFxEQDAUPDRgVEw8GFxEXERcREAwFCA0OFBQUFAgICAgPExQJExQSBg8QEBAPEQYQEBMREBMREA8OEA8TEgYQDgsOBg4OCwsODQYMDA4LCw0ODA4NEhIGDg0OEhAVDREQBgYMGRgWDg8RDxAQDRAQFg8REQ4QExETERARDg8SDxIQFhcTFRARGBENDg0JDg0QCw0NCw4RDQ0NDgwLDBQLDg0TFA8RDQwSDQ0OCQwMBQYGFhQOCwwNDAoYGhEICAgICAgICAgICAgICQgGCAgHDg0KDA4GCQ4OBgwLCw4OBggODQ4NCwsNDBEPDAwMBgoVBgwMCwsNEREREQ4ODg0KDA4HCg4HDAsLDggODg0LDQwRDwYNCw0OAAAAAAgICQoFBQYFBQUFBQQNDQ0NDQ0NDQ0NDQgNEhIHEg0NDRISEhISBRISEhISEhISDxISEhERBgYSEhISDg0NDQwMExYJDBMWCQwPDhISEhISEhISEhISEhISEhIFBQUFBRISAAAAAAAAAAAAAAAAAAAAAA0YEhISEhISEhISEhISEhISEhISEhISEhISEhISEggIEg8KBQYFBgoKBQYPDgYGBQYREQYGBwkREQYGEREGBg4NDQ0ODQ0NDg0NDQgICAgMDAwMFBQNDRQUDQ0aGhQUGhoUFA4ODg4ODg4ODQsNCQ0LDQkTEwYGDg4GBg4OCQkMDAUFCAgJCQ0NBgYHCQsJCgoPDg8OBgYNDg0ODQ4NDhISBQUSEhIEBRISBQYSEhIFBQUFBQUSBQUSEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIICAgSEhISEhISEhISEhISEhISEhISEhISEhIDGDAVEBUQAAAAAAAAAAAAAAAAAAAAAAwUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFDw0PDQ8NDw0PDQ8NDw0PDQ8NDw0PDQ8NEA0QDRANEA0QDRANEA0QDQYFBgUTDRMNEw0TDRMNEw0TDRUQFRAVEBUQFRARDhEOFRAVEBUQFRAVEBAMEAwQDA8NBgUTDREOEQ4RDhEOEQ4AAAAADQkWEA4LDgsRDQ0MDQwQDBANEA0SDRMNAAAbNhQACAgICg8PGBIFCQkLEAgJCAgPDw8PDw8PDw8PCAgQEBAPGxISFBQSERUTCA0SDxcTFREVFBIQExEcERIRCAgIDA8JDw8ODw8HDw8GBg4GFg8PDw8J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FxIREhIRDw8aDxMRGhsUGBIRGRIREgwREQcJBx0aEg4PEhAOISMXCwsLCwsLCwsLCwsLCw0LBwsLCRMSDREUBw0UEwcRDw8UFAcMExETEg8QEhEXFQ8PDwgOHAcREQ8PEhcXFxcTExMSDREUCQ4TCREPDxQMExMSEBIRFxUHEg8SEwAAAAALCwwOBwcIBwcHBwcFERERERERERERERELERkZCRkREREZGRkZGQcZGRkZGRkZGRUZGRkYGAgIGRkZGRMREREQEBsfDREbHw0RFRMZGRkZGRkZGRkZGRkZGRkZBwcHBwcZGQAAAAAAAAAAAAAAAAAAAAASIRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkLCxkUDgcIBwgODgcIFRMICAcIGBgICAkMGBgICBgYCAgTERERExERERMRERELCwsLEBAQEBsbEhIbGxISJCQcHCQkHBwTExMTExMTExIPEQ0SDxENGhoJCRMTCQkUFA0NEREHBwsLDQ0REQgICQwPDQ4OFRMVEwgIEhQSFBIUEhQZGQcHGRkZBQcZGQcIGRkZBwcHBwcHGQcHGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZCwsLGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZBCFCHBYcFgAAAAAAAAAAAAAAAAAAAAARHBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABxYRFhEWERYRFhEWERYRFhEWERYRFhEWERYRFhEWERYRFhEWERYRFhEJBwkHGhEaERoRGhEaERoRGhEcFhwWHBYcFhwWGBIYEhwWHBYcFhwWHBYVDxUPFQ8WEQkHGhEYEhgSGBIYEhgSAAAAABIMHhYTDhMOGBISERIRFhEWERYRGRIaEgAAJUocAAoKCw0VFSEZBwwMDhYKDAoKFRUVFRUVFRUVFQoKFhYWFSYZGRsbGRcdGwkTGRUfGx0ZHRsZFxsZJhkXFwoKChEVDBQVExUUChUVBwkTBx8VFRUVDBIKFREbERESDAkMFhkZGxkbHRsUFBQUFBQTFBQUFAkJCQkVFRUVFRUVFRUVFQ8VFRUNFBcbGyUMDBQlHRoUFBQVFRIaHhQJDg4cIRcXCxYVFRQXFRUlGRkdJSMVJQwMCAgUEhEXBhUMDBMTFQoIDCUZGRkZGQkJCQkdHR0bGxsJDAsMDAwMDAwMDBUIGRIXEgkbFRcRGRUWFgwMDB8fHxUdFQkZEhsTGxMVFAwZFBkUGxcbGRQZFBUHFQsVDBsVGxUdFRsMGwwZEhcKFw4bFRsVFxIXEhQdHhUVERcPGBQTDiglEyUTJRMTJBsWFhYWFhoXGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGxYlJSUlJRYWFiYnIhwcFBgWExMcGxAWBw0hDBYNDRYNGRQbExsTGRQZFBkUHRUdFR0VGxUbFQkJCQkJCQkHEwkZExMVBxsVGxUdFR0VGwwZEhcKGxUbFRsVGxUmGxcRBxkUJSEdFwkmGyYbJhsXEQgMFRYfHx8fDAwMDBkdHw4dHhwIGRkZGRcbCRkZHxsYHRsZFxcXGR4cCRcVERUIFBUTEBUVCBMTFRERFRUSFBMaHQgUFRQdGSAUGxkJCRMnJSAWGBsZGBkUGRkiFhsbFhgfGx0bGRsXGBwZGxkiIx0hGBslGxQVFA4WFBkRFRUQFhkUFRQVExERHhEVEx4eFxsUExwUFBUOExIHCQkiHhUQERQSDyUoGgwMDAwMDAwMDAwMDAwODAkMDAoVFA8TFgkOFhYJExERFhYJDRUUFRQREhQTGhgSEhIJDx4JExMRERQaGhoaFRUVFA8TFgsPFgsTEREWDRUVFBIUExoYCRQRFBUAAAAADAwNDwgHCQcHCAcIBhMTExMTExMTExMTDBMcHAocExMTHBwcHBwIHBwcHBwcHBwYHBwcGhoJCRwcHBwVExQUEhIeIw8THiMPExgWHBwcHBwcHBwcHBwcHBwcHAgICAgIHBwAAAAAAAAAAAAAAAAAAAAAFSUcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcDAwcFw8ICAgIEBAICBgWCQkICBoaCQkKDhoaCQkaGgkJFRMUFBUTFBQVExQUDAwMDBISEhIeHhQUHh4UFCkpHx8pKR8fFhYWFhYWFhYUERMPFBETDx0dCgoWFgoKFhYPDxMTCAgNDQ8PExMJCQoOEQ8QEBgWGBYJCRQWFBYUFhQWHBwHBxwcHAYIHBwICRwcHAgICAgICBwHBxwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHAwMDBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHAUlSiAYIBkAAAAAAAAAAAAAAAAAAAAAEx8fAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcZFBkUGRQZFBkUGRQZFBkUGRQZFBkUGRQZFBkUGRQZFBkUGRQZFBkUCQcJBx0VHRUdFR0VHRUdFR0VIBggGCAYIBggGBsVGxUgGSAZIBkgGSAZFxEXERcRGRQJBx0VGxUbFRsVGxUbFQAAAAAUDiIZFhAWEBsUFRMVExkTGRMZExwVHRUAACpUIAAMDA4PFxclHAgODhAZDA4MDBcXFxcXFxcXFxcMDBkZGRcrHBweHhwaIR4MFRwXIx4hHCEeHBoeHCobHBoMDAwTFw4XFxUXFw0XFwoKFQokFxcXFw4UDBcXHRYVFQ4LDhkcHB4cHiEeFxcXFxcXFRcXFxcMDAwMFxcXFxcXFxcXFxcRFxcXDxcaHx8qDg4XKiEeFxcXFxgVHiMXChAPICUaGg4ZFxcXGhcXKhwcISooFyoODgkJFxUVHAcXDg4VFRcMCQ4rHBwcHBwMDAwMISEhHh4eDA4NDg4ODg4ODg4XCRwUGhULHhccFRwXGRkODg4jIyMXIRcMHBQeFR4VFxcOHBccFx4aHhwXHBcXChcMFw4eFx4XIRceDh4OHBQaDBoQHhceFxoVGhUXISIYFxMaERsXFQ8uKhUqFSoVFSkeGRkZGRkeGh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh8ZKioqKioZGRkrLCcgIBYcGRUVIB8TGQgPJQ4ZDw8ZDxwXHhUeFRwXHBccFyEXIRchFx4XHhcMDAwMDAwMChUKHBUVFwoeFx4XIRchFx4OHBQaDB4XHhceFx4XKh0cFQocFyolIRoMKh0qHSodHBUJDhcZIyMjIw4ODg4cISMQISMgChwcHBwaHgwcHCMeGyEeHBoaHBsjHwwcGBMXChcYFRMXFwoVFRgXExcYFBcWHiEKFxcXIRwkFx4cDAwVLCokGBseHBwcFxwcJxkeHhgcIx4hHhweGhsgGx8cJychJRweKh4XGBYPGRccExcXEhkdFxcXFxUTFSMWGBYiIxoeFhUgFxcXDxUUCgwKJiIXEhUXFREqLR0ODg4ODg4ODg4ODg4OEA4KDg4MGBcRFRkKEBkZChUTExkZCg8YFhgXExQXFR0bFBQUChIlChUVExMWHR0dHRgYGBcRFRkMERkMFRMTGQ8YGBcUFxUdGwoXExcYAAAAAA0NDxEJCAoICAkICQcWFhYWFhYWFhYWFg0WICAMIBYWFiAgICAgCSAgICAgICAgGyAgIB4eCgogICAgGBYWFhUVIicRFiInERYbGSAgICAgICAgICAgICAgICAKCQkJCSAgAAAAAAAAAAAAAAAAAAAAABcqICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0NIBoRCQoJChISCQobGQoKCQoeHgoKDBAeHgoKHh4KChgWFhYYFhYWGBYWFg4ODg4VFRUVIyMWFiMjFhYuLiQkLi4kJBgYGBgYGBgYFxMWERcTFhEhIQsLGBgLCxkZEREVFQkJDg4RERYWCgoMEBMREhIbGRsZCgoXGRcZFxkXGSAgCAggICAHCSAgCQogICAJCQkJCQogCAggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANDQ0gICAgICAgICAgICAgICAgICAgICAgICAFKlQkHCQcAAAAAAAAAAAAAAAAAAAAABYjIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKHBccFxwXHBccFxwXHBccFxwXHBccFxwXHBccFxwXHBccFxwXHBccFwwKDAohFyEXIRchFyEXIRchFyQcJBwkHCQcJBweFx4XJBwkHCQcJBwkHBwVHBUcFRwXDAohFx4XHhceFx4XHhcAAAAAFw8nHBgSGBIeFxcVFxUcFRwWHBYgFyEXAAAuXCMADQ0OEBoaKR8JDw8SGw0PDQ0aGhoaGhoaGhoaDQ0bGxsaLx8fISEfHCQhDBcfGiUhJB8kIR8cIR8uHx4cDQ0NFRoPGhoXGhoOGhoKChcKJhoaGhoPFw0aFyEXFxcPCw8bHx8hHyEkIRoaGhoaGhcaGhoaDAwMDBoaGhoaGhoaGhoaEhoaGhAZHCIiLg8PGS4kIRkZGRobFyEmGQ8RESMpHBwOGxkaGRwaGi4fHyQuKxouDw8KChkXFx4IGg8PFxcaDQoPLh8fHx8fDAwMDCQkJCEhIQwPDQ8PDw8PDw8PGgofFxwXCyEaHhcfGhsbDw8PJiYmGiQaDB8XIRchFxoZDx8aHxohHCEfGh8aGgoaDRoPIRohGiQaIQ8hDx8XHA0cESEaIRocFxwXGSQlGxoVHBIeGRcRMi4XLhcuFxctIRscGxwcIR0hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEiHC4uLi4uHBwcLzAqIyMYHhsXFyMiFBwJECkPHBAQHBAfGiEXIRcfGh8aHxokGiQaJBohGiEaDAwMDAwMDAoXCh8XFxoKIRohGiQaJBohDx8XHA0hGiEaIRohGi4hHhcKHxouKSQcDC4hLiEuIR4XCg8aHCYmJiYPDw8PHyQnEiQmIwofHx8fHCEMHx8lIR4kIR8cHB4fJiIMHhsVGgoZGhcUGhoKFxcbFxUaGhYZGCEkChkaGSQfKBkhHwwMFzEuJxsdIR8eHxkfHyocISEbHiUhJCEfIRwdIx8iHyorJCkeIS4hGhoYERsaHxUaGhQbIBkaGRoXFRcmFxoYJSYdIRgXIxkaGhEXFwoMCiolGhQXGRYTLjEgDw8PDw8PDw8PDw8PDxIPCg8PDRoZEhccChIcGwoXFRUcHAoQGhgaGRUWGRcgHhUVFQsTJQoXFxUVGSAgICAaGhoZEhccDRMbDRcVFRwQGhoZFhkXIB4KGRUZGgAAAAAPDxATCgkLCQkKCQoIGBgYGBgYGBgYGBgPGCMjDSMYGBgjIyMjIwojIyMjIyMjIx0jIyMhIQsLIyMjIxoYGBgWFiUrEhglKxIYHRsjIyMjIyMjIyMjIyMjIyMjCgoKCgojIwAAAAAAAAAAAAAAAAAAAAAaLiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMPDyMcEwoLCgsUFAoLHRsLCwoLISELCw0RISELCyEhCwsaGBgYGhgYGBoYGBgQEBAQFhYWFiYmGBgmJhgYMzMnJzMzJycbGxsbGxsbGxkVGBIZFRgSJCQMDBsbDAwcHBISFxcKChAQEhIYGAsLDREVEhQUHRsdGwsLGRwZHBkcGRwjIwkJIyMjCAojIwoLIyMjCgoKCgoKIwkJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDw8PIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjBi5cJx4nHwAAAAAAAAAAAAAAAAAAAAAYJiYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACh8aHxofGh8aHxofGh8aHxofGh8aHxofGh8aHxofGh8aHxofGh8aHxoMCgwKJBokGiQaJBokGiQaJBonHiceJx4nHiceIRohGicfJx8nHycfJx8eFx4XHhcfGgwKJBohGiEaIRohGiEaAAAAABkRKh8bFBsUIRkaFxoXHxcfGB8YIxokGgAAMmQmAA4OEBIcHCwhChEREx0OEQ4OHBwcHBwcHBwcHA4OHR0dHDMhISQkIR8nJA4ZIRwpJCchJyQhHyQhMiEhHw4ODhYcERwcGRwcDhwcDAoZDCgcHBwcERkOHBkjGBkZEQwRHSEhJCEkJyQcHBwcHBwZHBwcHA4ODg4cHBwcHBwcHBwcHBQcHBwSGx8lJTIRERsyJyQbGxscHRkkKRsQExImLB8fEB0bHBseHBwyISEnMi8cMhERCwsbGRkhCBwRERkZHA4LETIhISEhIQ4ODg4nJyckJCQOEQ8RERERERERERwLIRkfGQwkHCEZIRwdHRERESoqKhwnHA4hGSQZJBkcHBEhHCEcJB8kIRwhHBwMHA8cESQcJBwnHCQRJBEhGR8NHxMkHCQcHxkfGRwnKB0cFh8UIBwZEjYyGTIZMhkZMSQdHh0eHiMfIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjJB4yMTExMR4eHjM1LiYmGyEeGhkmJRYeCRIsEB4SEh4SIRwkGSQZIRwhHCEcJxwnHCccJBwkHA4ODg4ODg4MGQohGRkcDCQcJBwnHCccJBEhGR8OJBwkHCQcJBwyIyEZDCEcMiwnHwwyIzIjMiMhGQsRHB4qKioqERERESEnKhMnKiYKISEhIR8kDiEhKSQhJyQhHx8hISolDiEdFhwKGx0ZFhwcChkZHRkWHBwYGxokJwobHBsnISsbJCEODhk1MysdICQhISEbIiEuHiQkHSEpJCckISQfICYhJSEuLygsISQzJBwdGxIdHCEXHBwWHSIcHBscGRcZKRgdGigpHyQaGiYbHBwSGhkMDgotKRwWGRwYFTI2IxERERERERERERERERETEQ0REQ4cGxQZHg0THh4NGRcXHh4NEh0aHBsXGBsZIyAaGhoMFSoNGRkXFxsjIyMjHBwcGxQZHg4VHg4ZFxceEh0cGxgbGSMgDRsXGx0AAAAAEBASFQoKDAoKCgoLCBoaGhoaGhoaGhoaEBomJg4mGhoaJiYmJiYLJiYmJiYmJiYgJiYmJCQMDCYmJiYcGhoaGBgpLxQaKS8UGiAdJiYmJiYmJiYmJiYmJiYmJgsLCwsLJiYAAAAAAAAAAAAAAAAAAAAAHDImJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmEBAmHxUKCwoLFhYKCyAdDAwKCyQkDAwOEyQkDAwkJAwMHBoaGhwaGhocGhoaERERERgYGBgpKRsbKSkbGzc3Kio3NyoqHR0dHR0dHR0bFxoUGxcaFCcnDQ0dHQ0NHh4UFBkZCgoRERQUGhoMDA4TFxQWFiAdIB0MDBseGx4bHhseJiYKCiYmJggLJiYKDCYmJgsLCwsLCyYKCiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJhAQECYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJgYyZCshKyEAAAAAAAAAAAAAAAAAAAAAGioqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwhHCEcIRwhHCEcIRwhHCEcIRwhHCEcIRwhHCEcIRwhHCEcIRwhHCEcDgwODCccJxwnHCccJxwnHCccKyErISshKyErISQcJBwrISshKyErISshIRkhGSEZIRwODCccJBwkHCQcJBwkHAAAAAAbEi4hHRYdFiQcHBkcGSEZIRohGiYcJxwAADZsKQAPDxETHh4wJAoSEhUgDxIPDx4eHh4eHh4eHh4PDyAgIB43JCQnJyQhKicPGyQeLScqJConJCEnJDYjIyEPDw8YHhIeHhseHg8eHQ0NGw0tHR4eHhIbDx0bJxobGhIOEiAkJCckJyonHh4eHh4eGx4eHh4PDw8PHR4eHh4eHR0dHR4WHh4eEx0hKCg2EhIeNionHh4eHh8bJyweEBQUKTAhIREgHR4eIh4eNiQkKjYzHjYSEgwMHhsbIwkeEhIbGx4PDBI1JCQkJCQPDw8PKioqJycnDxIQEhISEhISEhIeDCQbIRoOJx4jGyQeICASEhItLS0eKh4PJBsnGycbHh4SJB4kHichJyQeJB4eDR4QHhInHScdKh4nEicSJBshDyEUJx0nHSEaIRoeKisfHhghFSMeGxQ7Nhs2GzYbGzUnICEgISEmIiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJichNjU1NTUhISE3OTEpKR0jIBwbKSgYIQoTMBEhExMhEyQeJxsnGyQeJB4kHioeKh4qHicdJx0PDw8PDw8PDRsNJBsbHg0nHSceKh4qHicSJBshDycdJx0nHScdNicjGw0kHjYwKiEPNic2JzYnIxsMEh4gLS0tLRISEhIkKi0VKiwpDSQkJCQhJw8kJC0nIyonJCEhIyMtKA8jHxgeDR4fGxgeHg0bGx8bGB4fGh4cJyoNHh4eKiQvHSckDw8bOTctHyInJCMkHSUkMiEnJx8jLScqJyQnISIpIygkMTMrMCMnNyceHx0UIB4kGR0dGB8lHR4cHhsZGywaHxwrLCInHBwpHR4dFBwbDQ8NMSwdGBsdGhY2OiUSEhISEhISEhISEhISFRINEhIPHh0WGyENFSAgDRwZGSAgDRMfHR8eGRoeHCYjGhoaDRcqDRwcGRkdJiYmJh4eHh0WGyEPFiAPHBkZIBMfHx4aHhwmIw0dGR4fAAAAABERExYLCw0LCwsLCwkcHBwcHBwcHBwcHBEcKSkPKRwcHCkpKSkpCykpKSkpKSkpIikpKScnDQ0pKSkpHhwdHRoaLDIVHCwyFRwiICkpKSkpKSkpKSkpKSkpKSkMCwsLCykpAAAAAAAAAAAAAAAAAAAAAB42KSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKRERKSEWCwwLDBcXCwwiIA0NCwwnJw0NDxQnJw0NJycNDR4cHR0eHB0dHhwdHRISEhIaGhoaLCwdHSwsHR07Oy4uOzsuLh8fHx8fHx8fHRgcFR0YHBUrKw4OHx8ODiAgFRUbGwsLEhIVFRwcDQ0PFBgVFxciICIgDQ0dIB0gHSAdICkpCwspKSkJCykpCw0pKSkLCwsLCwwpCwspKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkREREpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkHNmwuIy4kAAAAAAAAAAAAAAAAAAAAABwtLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANJB4kHiQeJB4kHiQeJB4kHiQeJB4kHiQeJB4kHiQeJB4kHiQeJB4kHg8NDw0qHioeKh4qHioeKh4qHi4jLiMuIy4jLiMnHScdLiQuJC4kLiQuJCMbIxsjGyQeDw0qHicdJx0nHScdJx0AAAAAHRQyJB8YHxgnHh4bHhskGyQcJBwpHioeAAA6dCwAEBATFSAgNCcLExMXIhATEBAgICAgICAgICAgEBAiIiIgOycnKionIy0qDx0nIC8qLSctKickKic6JSYjEBAQGCATICAdICAQICANDR4NMSAgICATHRAgHSkcGxwTDhMiJycqJyotKiAgICAgIB0gICAgDw8PDyAgICAgICAgICAgFyAgIBQfIysrOhMTIDotKSAgICAhHSkwIBEVFS00IyMTIiAgICQgIDonJy06NyA6ExMNDSAdGyYKIBMTHR0gEA0TOScnJycnDw8PDy0tLSoqKg8TERMTExMTExMTIA0nHSMcDiogJhsnICIiExMTMDAwIC0gDycdKh0qHSAgEycgJyAqJConICcgIA0gESATKiAqIC0gKhMqEycdJBAkFiogKiAjHCMcIC0uIiAaJBcmIB0VPzodOh06HR05KiIjIiMjKSQpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkqIzo5OTk5IyMjOz01LCwfJiIeHSwrGiMLFTMTIxUVIxUnICodKh0nICcgJyAtIC0gLSAqICogDw8PDw8PDw0dDSceHSANKiAqIC0gLSAqEycdIxAqICogKiAqIDopJhsNJyA6NC0jDzopOik6KSYbDRMgIzAwMDATExMTJy0xFi0wLA0nJycnIyoPJycvKiYtKickJCYlMCsPJiIaIA0gIR0aICANHR0hHRogIRwgHiktDSAgIC0nMh8qJw8PHT07MiIlKicmJx8nJzYjKioiJi8qLSonKiQlLCUrJzU2LjMmKjsqICEfFSIgJxsgIBkiKCAgHyAdGxswHCEeLzAkKh4eLB8gIBUeHQ0PDTUvIBkbIBwYOj4oExMTExMTExMTExMTExYTDhMTECEfFx0jDhYjIg4eGxsjIw4UIR8hIBscIB4oJR0dHQ4YLg4eHhsbHygoKCghISEfFx0jERgiER4bGyMUISEgHCAeKCUOHxsgIQAAAAATExUYDAwODAwMDAwKHx8fHx8fHx8fHx8THywsECwfHx8sLCwsLAwsLCwsLCwsLCUsLCwpKQ4OLCwsLCEfHx8cHC82Fx4vNhceJSIsLCwsLCwsLCwsLCwsLCwsDQwMDAwsLAAAAAAAAAAAAAAAAAAAAAAgOiwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwTEywkGAwNDA0ZGQwNJSIODgwNKSkODhAWKSkODikpDg4hHx8fIR8fHyEfHx8UFBQUHBwcHDAwHx8wMB8fQEAxMUBAMTEiIiIiIiIiIiAaHxcgGh8XLi4QDyIiEA8jIxcXHR0MDBQUFxcfHw4OEBYaFxkZJSIlIg4OICMgIyAjICMsLAwMLCwsCgwsLAwOLCwsDAwMDAwNLAwMLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsExMTLCwsLCwsLCwsLCwsLCwsLCwsLCwsLCwsBzp0MiYyJwAAAAAAAAAAAAAAAAAAAAAeMDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADScgJyAnICcgJyAnICcgJyAnICcgJyAnICcgJyAnICcgJyAnICcgJyAPDQ8NLSAtIC0gLSAtIC0gLSAyJjImMiYyJjImKiAqIDInMicyJzInMicmGyYbJhsnIA8NLSAqICogKiAqICogAAAAAB8VNiciGSIZKiAgHSAdJx0nHiceLCAtIAAAQ4YyABMTFhglJTwtDRYWGicTFhMTJSUlJSUlJSUlJRMTJycnJUQtLTAwLSk0MBMiLSU3MDQtNDAtKTAtQistKRMTEx4lFiUlIiUlEyUlDw8iDzklJSUlFiITJSEvICEhFhEWJy0tMC0wNDAlJSUlJSUiJSUlJRISEhIlJSUlJSUlJSUlJRslJSUXJCkxMUMWFiVDNDAlJSUlJyEwNyUUGRgzPCkpFiclJSUpJSVDLS00Qz8lQxYWDw8lISEtCyUWFiIiJRMPFkMtLS0tLRMTExM0NDQwMDASFhQWFhYWFhYWFiUPLSIpIREwJS0hLSUnJxYWFjg4OCU0JRMtIjAiMCIlJRYtJS0lMCkwLSUtJSUPJRQlFjAlMCU0JTAWMBYtIikTKRkwJTAlKSEpISU0NSclHikaKyUiGElDIkMiQyIiQjAnKCcoKC8qLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vMShDQkJCQigoKERHPTIyJCwoIiIyMR4oDRg7FigYGCgYLSUwIjAiLSUtJS0lNCU0JTQlMCUwJRMSExITEhMPIg8tIiIlDzAlMCU0JTQlMBYtIikTMCUwJTAlMCVCLy0hDy0lQzw0KRJCL0IvQi8tIQ8WJSg4ODg4FhYWFi01OBo0ODIPLS0tLSkwEy0tNzAsNDAtKSktKzgyEy0nHiUPJSciHiUlDyIiJyEeJSYgJSMwNA8lJSU0LTokMC0TEyJHRDknKzAtLC0kLS0+KDAwJyw3MDQwLTApKzMrMi09PzU7LDBEMCUmJBgnJS0fJSUdJy4lJSQlIh8hNyAmIzY3KjAjIjIkJSUYIiIPEg89NiUdISUhHENILhYWFhYWFhYWFhYWFhYaFhEWFhMmJBsiKBEaKCgRIh8fKCgRGCYjJiUfICUiLysiIiIQHDcRIiIfHyQvLy8vJiYmJBsiKBMcKBMiHx8oGCYmJSAlIi8rESQfJScAAAAAFRUYHA4NEA0NDg0OCyMjIyMjIyMjIyMjFSMyMhMyIyMjMjIyMjIOMjIyMjIyMjIrMjIyMDAQEDIyMjImIyQkISE2PhoiNj4aIisnMjIyMjIyMjIyMjIyMjIyMg8ODg4OMjIAAAAAAAAAAAAAAAAAAAAAJUMyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyFRUyKRwODw4PHR0ODysnEBAODzAwEBATGTAwEBAwMBAQJiMkJCYjJCQmIyQkFxcXFyEhISE3NyQkNzckJEpKOTlKSjk5JycnJycnJyckHiMaJB4jGjU1EhInJxISKCgaGiIiDg4XFxoaIyMQEBMZHhodHSsnKycQECQoJCgkKCQoMjINDTIyMgsOMjIOEDIyMg4ODg4ODzINDTIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMhUVFTIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMghDhjksOS0AAAAAAAAAAAAAAAAAAAAAIjg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8tJS0lLSUtJS0lLSUtJS0lLSUtJS0lLSUtJS0lLSUtJS0lLSUtJS0lEw8TDzQlNCU0JTQlNCU0JTQlOSw5LDksOSw5LDAlMCU5LTktOS05LTktLSEtIS0hLSUTDzQlMCUwJTAlMCUwJQAAAAAkGD4tJx0nHTAlJSIlIi0iLSMtIzIlNCUAAEuWOAAVFRcbKipDMg4ZGR0sFRkVFSoqKioqKioqKioVFSwsLCpMMjI2NjIuOjYVJjIqPTY6Mjo2Mi02MksxMS4VFRUiKhkqKiYqKhUqKhERJhE/KioqKhkmFSolNSQlJRkUGSwyMjYyNjo2KioqKioqJioqKioVFRUVKioqKioqKioqKioeKioqGiguNzdLGRkpSzo1KSkpKislNT4pFxwbOkMuLhcsKSopLioqSzIyOktHKksZGRERKSUlMQ0qGRkmJioVERlMMjIyMjIVFRUVOjo6NjY2FRkYGRkZGRkZGRkqETImLiUUNioxJTIqLCwZGRk/Pz8qOioVMiY2JjYmKikZMioyKjYuNjIqMioqESoWKhk2KjYqOio2GTYZMiYtFS0cNio2Ki4lLiUpOjwrKiEuHjEpJhtSSyZLJksmJkk2LC0sLS01LzU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTctS0pKSkotLS1NT0U4OCgxLSYmODchLQ4bQhgtGxstGzIqNiY2JjIqMioyKjoqOio6KjYqNioVFRUVFRUVESYRMiYmKhE2KjYqOio6KjYZMiYuFTYqNio2KjYqSzUxJREyKktDOi4VSzVLNUs1MSURGSotPz8/PxkZGRkyOz8dOj44ETIyMjIuNhUyMj02MTo2Mi4tMTE/OBUxKyEqESkrJiEqKhEmJislIiorJCknNTsRKSopOzJBKTYyFRUmT0xALDA2MjEyKTMyRS02NiwxPTY6NjI2LTA5MTcyRUY7QjE2TDYqKygbLCoyIioqISw0KSopKiYiJT4kKyc8Pi82JyY4KSoqGyYmERURRD0qISUpJR9LUDQZGRkZGRkZGRkZGRkZHRkTGRkVKikeJi0THS0sEyYjIy0tExorKCopIyQpJjQwJSUlEh88EyYmIyMoNDQ0NCoqKikeJi0WHywWJiMjLRorKikkKSY0MBMpIykrAAAAABgYGx8QDxIPDxAPEAwnJycnJycnJycnJxgnODgVOCcnJzg4ODg4EDg4ODg4ODg4MDg4ODY2EhI4ODg4KicoKCUlPUYeJz1GHicwLDg4ODg4ODg4ODg4ODg4ODgREBAQEDg4AAAAAAAAAAAAAAAAAAAAACpLODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OBgYOC4fEBEQESAgEBEwLBISEBE2NhISFRw2NhISNjYSEionKCgqJygoKicoKBkZGRklJSUlPj4oKD4+KChSUj8/UlI/PywsLCwsLCwsKSInHikiJx47OxQULCwUFC0tHh4mJhAQGRkeHicnEhIVHCIeICAwLDAsEhIpLSktKS0pLTg4Dw84ODgMEDg4EBI4ODgQEBAQEBE4Dw84ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODgYGBg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODgJS5ZAMUAyAAAAAAAAAAAAAAAAAAAAACY/PwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARMioyKjIqMioyKjIqMioyKjIqMioyKjIqMioyKjIqMioyKjIqMioyKhURFRE6KjoqOio6KjoqOio6KkAxQDFAMUAxQDE2KjYqQDJAMkAyQDJAMjElMSUxJTIqFRE6KjYqNio2KjYqNioAAAAAKRtFMiwhLCE2KSomKiYyJjInMic4KjoqAABTpj4AFxcZHS4uSjcQHBwgMBccFxcuLi4uLi4uLi4uFxcwMDAuVDc3PDw3M0E8Fyo3LkU8QTdBPDc0PDdTODYzFxcXJi4cLi4qLi4YLi4SEysSRy4uLi4cKhcuKTsqJygcFBwwNzc8NzxBPC4uLi4uLiouLi4uFxcXFy4uLi4uLi4uLi4uIS4uLh0tMz09UxwcLlNBOy4uLi4wKTtELhcfHkBKMzMZMC4uLjIuLlM3N0FTTi5THBwSEi4pJzYOLhwcKiouFxIcUzc3Nzc3FxcXF0FBQTw8PBccGBwcHBwcHBwcLhI3KjMoFDwuNic3LjAwHBwcRUVFLkEuFzcqPCo8Ki4uHDcuNy48Mzw3LjcuLhIuGC4cPC48LkEuPBw8HDcqNBg0HzwuPC4zKDMoLkFCMC4lMyE2LioeWlMqUypTKipRPDAyMDIyOzQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs9MlNSUlJSMjIyVVdMPj4sNjEqKj49JTIQHUkbMh0dMh03LjwqPCo3LjcuNy5BLkEuQS48LjwuFxcXFxcXFxIqEzcrKi4SPC48LkEuQS48HDcqMxc8LjwuPC48LlM7NicSNy5TSkEzFVM7UztTOzYnEhwuMkVFRUUcHBwcN0FGIEBEPhI3Nzc3MzwXNzdFPDZBPDczNDY4RT4XNjAlLhItMColLi4SKiowKSUuLygtLDtBEi0uLUE3SC08NxcXKlhURzA1PDc2Ny04N00yPDwwNkU8QTw3PDQ1Pzg9N0xOQkk2PFQ8LjAsHjAuOCYuLiQwOS4uLS4qJidEKjArQ0Q0PCsqPi0uLh4qKhIXE0tDLiQnLikiU1k5HBwcHBwcHBwcHBwcHCAcFBwcFy8tISoyFCAyMRQqJiYyMhQdMCwvLSYoLio6NSkpKRQjQxQqKiYmLDo6OjovLy8tISoyGCIxGComJjIdMC8tKC4qOjUULSYtMAAAAAAaGh4iEREUERERERIOLCwsLCwsLCwsLCwaLD4+Fz4sLCw+Pj4+PhI+Pj4+Pj4+PjU+Pj47OxQUPj4+Pi8sLCwpKUNNIStDTSErNTE+Pj4+Pj4+Pj4+Pj4+Pj4+ExISEhI+PgAAAAAAAAAAAAAAAAAAAAAuUz4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4aGj4zIhETERMkJBETNTEUFBETOzsUFBcfOzsUFDs7FBQvLCwsLywsLC8sLCwcHBwcKSkpKURELCxERCwsW1tGRltbRkYwMDAwMDAwMC0lLCEtJSwhQUEWFjAwFhYyMiEhKioRERwcISEsLBQUFx8lISQkNTE1MRQULTItMi0yLTI+PhERPj4+DhI+PhEUPj4+EhISEhITPhERPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+GhoaPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+ClOmRzZHOAAAAAAAAAAAAAAAAAAAAAArRUUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEjcuNy43LjcuNy43LjcuNy43LjcuNy43LjcuNy43LjcuNy43LjcuNy4XEhcSQS5BLkEuQS5BLkEuQS5HNkc2RzZHNkc2PC48Lkc4RzhHOEc4Rzg2JzYnNic3LhcSQS48LjwuPC48LjwuAAAAAC0eTTgwJDAkPC4uKi4qNyo3KzcrPi5BLgAAXLhFABoaGiEzM1I9Eh8fJDYaHxoaMzMzMzMzMzMzMxoaNjY2M109PUJCPThIQhouPTNLQkg9SEI9OUI9Wz49OBoaGikzHzMzLjMzGzQzFBUvFE0zMzM0Hy4aMy1BLS0tHxcfNj09Qj1CSEIzMzMzMzMuMzMzMxgYGBgzMzMzMzMzMzMzMyUzMzMgMThERFwfHzNcSEIzMzMzNS1CTDMZIiJHUjg4HDYyMzM5MzNcPT1IXFczXB8fFBQzLS09DzMfHy4uMxoUH109PT09PRoaGhpISEhCQkIYHxwfHx8fHx8fHzMUPS44LRdCMz0tPTM2Nh8fH01NTTNINBo9LkIuQi4zMx89Mz0zQjlCPTM9MzMUMxszH0IzQjNIM0IfQh89LjkaOSNCM0IzOC04LTNISTUzKTkkPDMuImRcLlwuXC4uWkI2ODY4OEE6QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQzhcW1tbWzg4OF5hVEVFMTw3Ly5FRCk4ESFRHjghITghPTNCLkIuPTM9Mz0zSDRINEgzQjNCMxoYGhgaGBoULhU9Ly4zFEIzQzNIM0gzQh89LjgaQjNCM0IzQjNbQT0tFD0zXFJIOBhbQVtBW0E9LRQfMzdNTU1NHx8fHz1ITSNHTUUUPT09PThCGj09S0I8SEI9OTk9Pk1FGj01KTMUMjUuKTMzFC4uNS0pMzQsMjBCSBQyMzJIPVAyQj0aGi5hXU82OkI9PD0yPj1VOEJCNjxLQkhCPUI5OkY+RD1UVklRPEJdQjM1MSI2Mz4qMzMoNj8zMzIzLiotTC01MEpMOkIwL0UyMzMiLy4UGBVTSzMoLTMtJlxjPx8fHx8fHx8fHx8fHx8jHxQfHxo0MiUvNxcjNzYXLyorNzcXIDUxNDIqLDMvQDsuLi4WJkwXLy8rKzFAQEBANDQ0MiUvNxomNhovKis3IDU0MiwzL0A7FzIqMjUAAAAAHR0hJhMTFhMTExMTDzAwMDAwMDAwMDAwHTBFRRpFMDAwRUVFRUUTRUVFRUVFRUU7RUVFQkIWFkVFRUU0MDExLS1LViQvS1YkLzs2RUVFRUVFRUVFRUVFRUVFRRUTExMTRUUAAAAAAAAAAAAAAAAAAAAAM1xFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFHR1FOSYTFRMVKCgTFTs2FhYTFUJCFhYaI0JCFhZCQhYWNDAxMTQwMTE0MDExHx8fHy0tLS1MTDExTEwxMWVlTk5lZU5ONjY2NjY2NjYyKTAkMikwJElJGRg2NhkYNzckJC8vExMfHyQkMDAWFhojKSQoKDs2OzYWFjI3MjcyNzI3RUUTE0VFRQ8TRUUTFkVFRRMTExMTFUUTE0VFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRR0dHUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRQxcuE88Tz4AAAAAAAAAAAAAAAAAAAAAL01NAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQ9Mz0zPTM9Mz0zPTM9Mz0zPTM9Mz0zPTM9Mz0zPTM9Mz0zPTM9Mz0zGhQaFEgzSDNIM0gzSDNIM0gzTzxPPE88TzxPPEIzQjNPPk8+Tz5PPk8+PS09LT0tPTMaFEgzQjNCM0IzQjNCMwAAAAAyIlU+Nig2KEIzMy4zLj0uPTA9MEUzSDMAAGTISwAcHBwkODhZQxMhISc6HCEcHDg4ODg4ODg4ODgcHDo6OjhmQ0NISEM9TkgcMkM4U0hOQ05IQz5IQ2NCQj0cHBwrOCE4ODI4OB03OBYWMhZUODg4NyEyHDgxRzExMSEaITpDQ0hDSE5IODg4ODg4Mjg4ODgbGxsbODg4ODg4ODg4ODgoODg4IzY9SkpkISE3ZE5HNzc3ODoxR1I3HSUlTVk9PR86Nzg3PTg4ZENDTmReOGQhIRYWNzExQhE4ISEyMjgcFiFkQ0NDQ0McHBwcTk5OSEhIGyEfISEhISEhISE4FkMyPTEaSDhCMUM4OjohISFTU1M4TjccQzJIMkgyODchQzhDOEg9SEM4Qzg4FjgdOCFIOEg4TjhIIUghQzI+HT4mSDhIOD0xPTE3TlA6OC0+KEE3MiRtZDJkMmQyMmJIOjw6PDxHP0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0k8ZGNjY2M8PDxmaVxLSzVCOzMyS0ksPBMjWSA8IyM8I0M4SDJIMkM4QzhDOE43TjdOOEg4SDgcGxwbHBscFjIWQzIyOBZIOEg4TjhOOEghQzI9HEg4SDhIOEg4Y0dCMRZDOGRZTj0bY0djR2NHQjEWITg8U1NTUyEhISFDTlQmTVNLF0NDQ0M9SBxDQ1NIQU5IQz4+QkJUSxxCOi04Fzc6Miw4OBcyMjoxLTg5MDc0R04XNzg3TkNWNkhDHBwyamVVOkBIQ0JDNkRDXDxISDpCU0hOSENIPkBMQkpDXF5PWUJIZUg4OTUkOjhDLjg4LDpFNzg2ODIuMVIxOTRQUj9INDNLNjg4JDMyFhsWW1E4LDE3MSlka0UhISEhISEhISEhISEhJiEbISEcODYoMzwYJjw7GDMuLjw8GCM5NTk3LjA3M0VAMTExGCpPGDMzLi42RUVFRTg4ODYoMzwdKTsdMy4uPCM5OTcwNzNFQBg2Ljc6AAAAACAgJCkVFBgUFBUUFRA1NTU1NTU1NTU1NSA1S0scSzU1NUtLS0tLFUtLS0tLS0tLQEtLS0dHGBhLS0tLODU1NTExUV0nM1FdJzNAO0tLS0tLS0tLS0tLS0tLS0sXFRUVFUtLAAAAAAAAAAAAAAAAAAAAADhkS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSyAgSz4pFRcVFysrFRdAOxgYFRdHRxgYHCZHRxgYR0cYGDg1NTU4NTU1ODU1NSIiIiIxMTExUlI1NVJSNTVublVVbm5VVTo6Ojo6Ojo6Ni01JzYtNSdPTxsaOjobGjw8JyczMxUVIiInJzU1GBgcJi0nKytAO0A7GBg2PDY8Njw2PEtLFBRLS0sQFUtLFRhLS0sVFRUVFRdLFBRLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0sgICBLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0sNZMhWQlVDAAAAAAAAAAAAAAAAAAAAADNTUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWQzhDOEM4QzhDOEM4QzhDOEM4QzhDOEM4QzhDOEM4QzhDOEM4QzhDOBwWHBZOOE44TjhOOE44TjhOOFZCVkJWQlZCVkJIOEg4VUNVQ1VDVUNVQ0IxQjFCMUM4HBZOOEg4SDhIOEg4SDgAAAAANiRcQzosOixINzgyODJDMkM0QzRLOE44AAAAAgEAAAAFAAUAAAMABwBCtAIB5AYHuAKZQBMABQTkAwAKBwTkAQAZCAYF5AIDvAIxAAkBmQEuABgrEPY8/TxOEPQ8Tf08AD88/TwQ/Dz9PDEwIREhESUhESEBAAQA/CADwPxABQD7ACAEwAAAAgCwAAABjwW6AAUACQBXsRwFuAKvQCYIPAYCAAYKC8sDCToFOAQ8ADgGOgEDPAICIAEBAcsKCguBIaGYGCsrThD0XTxNEO0Q5OT95OQQ7gA/P00Q/eZLU1izBQQAAQEQPBA8WTEwEwMRMxEDAzUzFec33zSjzwFsAwkBRf67/Pf+lM3NAAACAF4DswJ3BboABQALAHW5AAD/+LMiJTQFuP/4QCImKTQLBgoHBQAEAQAFBQYL7gkICAMDAgAHCDwKDwmACQIJuP/AQBUNDzQJ3gEDBDwCAUANETQBGQxxpxgrThD0KzxN/TwQ/StdPP08AD88EDwQPP08PBA8ARESOTkREjk5MTABKysTAzUzFQMzAzUzFQOQMs0t3THNMAOzARfw8P7pARfw8P7pAAACABX/5wRZBdMAGwAfATFAhygdOB0CCQQJHQJXD7cTtxzHE8cc+B0GAQIVAAkEAxQACQUGEQAJCAcQAAkLBxAbCgwHEBgNDwcQFw4SBhEXDhMDFBcOFgIVFw4ZAhUYDRoCFRsKHAMUGwodAxQYDR4GERgNHwYRGwoKGxslAAkUAAAJDRgYJRcOFBcXDhUCJRQDAwAQByURBrgBtkA4Dg4NDQoKCQAbGBgXFwAKFRQUERA+DgcGBgMCPgAYlA0XlA0lDkAROU8Onw4CDnUhCpQbCZQbJQC4/8C1ETkgAAEAuAKhsyCpaBgrEPZdK+3kEOQQ9l0r7eQQ5BD0PDwQPBD0PDwQPAA/PBA8EDw/PBA8EDwQ/Tz9PBE5Lzz9PIcFLit9EMSHLhgrfRDEDw8PDw8PDw8PDw8PDw8PDzEwAV1dcRcTIzUzEyE1IRMzAyETMwMzFSMDIRUhAyMTIQMTIRMhZ1epx0r+7wEvV5ZXATtXl1ety0sBFv7MV5ZW/sZXdQE6S/7FGQGqlQFrlQGt/lMBrf5Tlf6Vlf5WAar+VgI/AWsAAwBJ/y0EEwZBACoAMQA4AdRAJXweAQQwLDY2L0YhVSFQL102agNjL3oDdyFzL3s2hyGAL442EDG4/963CzkeICAkNCy4/+BALCAjNGoIOCoWDDcgFiowIQsAFQw3MTAhABU3ITAwygw3FAwMNzAMITcEFzIGuAKktlAFAQXtARy6AqQAGwKtsxcf0yu4ATVAChQVFoAXFxQFACq4ATeyAQoyuAE1tCnTAQ0cugE4ABsCmLI1cya4/8BAChI5MCZAJoAmAya4AlJADyoWFxcfHyAgODgyMikpKrgBk0AWABUUFCsrMTELCwoKMABAAIAA0AAEALgCDEAJBS5zbxB/EAIQugGOAAYBOEAPPwVPBX8FjwUEBRk5x4sYK04Q9F1N7fRx7RD0XTwQPBA8EDwQPBA8EP08EDwQPBA8EDwQPBA8EPRdK+307QA/9P08EPQ8PzwQ9DwQ/eQQ/eQQ/V3kERIXOYcOLiuHDn3EDw8PDzEwGEN5QEohNwwTJCUjJSIlAwYSJg4PDQ8CBjchNU8BMyg1TwEsEy5PADAMLk8ANiU4TwEhIDc4NCcyTwAzMi0RK08BLCsTFC8PMU8AMDEMCwAQPBA8KxA8EDwrEDwrEDwQPCsBKysrKyorKoGBASsrACtdAV0FNS4CJzcWFxYXESYnJiY1NDc2NzUzFRYXFhcHJiYnERYXHgIVFAYHFQMGBhUUFhcTNjY1NCYnAf6HqXsKtRU1TGpvdFZdiFuzap1cdhi6EGVYiCxUajnuvWppeWd7ammJYZHTtBFXwowikURgCwI9FUEwqmzAd1ASVlYPTWKrHGpxEv35IhMlapJVu/oJtgYoEIhdXHwl/RYNnHNidy8AAAUAd//KBp8F0wALABcAGwAnADMBB0AKkBmQGgJoCBobG7gCmkAPGBkUGBgZGBsVDxkaMSsSvAKfAAkBZQAMAp9ACwMaGRkDARsYGCUovAKfAB8BZQAuAp+yJQscvAKaACsBAAAxApqzIqw1BrwCmgAVAQAADwKaQAkgAAEAdTRXWhgrEPZd7fTtEPbt9O0AP+397RA8EDw/PBA8EO397QEREjk5ERI5OYcuK30QxDEwGEN5QFIBMykeKx8AMyAxHwEtJisfAC8kMR8BDQIPHwAXBBUfAREKDx8AEwgVHwEqHSgfATIhKB8BLCcuHwAwIy4fAA4BDB8BFgUMHwEQCxIfABQHEh8AACsrKysrKysrASsrKysrKysrgQFdEzQ2MzIWFRQGIyImASIGFRQWMzI2NTQmAwEzAQE0NjMyFhUUBiMiJgEiBhUUFjMyNjU0Jneeloq1t4aFsQE5Q1laQkRZWkIDIpL84QHlnpeKtbeHhbEBOkRZWkJFWVoEWp3cxb+6ycYBxXSbjXN0mo5z+nMGCfn3AY6e28W/usnHAcR0m4x0dJqOcwADAFj/3gUnBdMAHwAsADYBPUDIehVyFnIXei56L4YWpi/dAAiWHaMWAokvgzYCgxyEIQK0FgFgF2EhAhYVQBZqAAOqHtoWAnMccx0CdRpyGwJ1AHsWAooXgxsCqRWuFgKDHoogAooKgxwCyyDGJwLNFsIbAroaxhQCaTa6FgJpF2UzAmUvAVYzXDYCRjNaHwJNFkIbAjAaOR8CJhskIAIALS0eLS4KCgAbFhYdFSAWFiAgugotFAoKLSYpEAE0KR46Awsbhh0jXmATcBOgEwMvE0ATAhPcHY8YARi4AlpAHBk+HnIgHQEdODgpXqANAQ2gMV4gBwEHajdxmBgrEPZd7fRd7RD0XeT07V0Q9F1d7RDkAD/k7T/thw4uKw59EMQHDjyHDhDEBw4QPDyHDhDEMTABXV1dXV1dXV1dXV1dXV1dXV1dXQBdXV1dXV1dJQYGIyInJjU0NjcmJjU0NjMyFhUUBQE2NxcGBxYXByYBNjY1NCYjIgYVFBYXAQEGBhUUFjMyNgPNWdJ64YRrr65jQs+dlr/+6wEHLRm7MFJlgHlt/h51RV9HSWEjIwFN/raSZo6CUa2tY2OYfJmI21NyjkKEw7iB0ZT+sVh0KMB8hluPRgOFRWg/S19eRCJLKv01AZlXlUlZwGUAAQBaA7MBJwW6AAUAJkAVAAUDAQXuAgADgSABkAECAWoGcacYKxD2Xe0AP+0BERI5OTEwEwM1MxUDiC7NMAOzARL19f7uAAEAfP5RAmAF0wAQAD1ACicPAQAQEgcIEBC4ATOzAJ8OCLgBM0ARB58OXgADEAMgAwMDrBGdjBgrEPZd/fbtEPbtAD88PzwxMAFdASYCETQ3NjczBgcGBwYVEAEB35XOTVq8gXknPSMrASv+UbwB+AEO7tr9+9BZipa7vf4f/iAAAQB8/lECYAXTABAAPUAMKAIoEAIJChABABIJuAEzswqfAwG4ATNADwCfA14PDh8OAg6sEp2MGCsQ9l399u0Q9u0APzw/PDEwAV0TIwARNCcmJyYnMxYXFhUQAv2BASsrIj0neoG8Wk3P/lEB4AHhvLmWilrS+/3a7v7y/ggAAQBAA2MC1QXTABgAhkBKCwELChsBGwoECgkMDg8QEQcGCwECGBYVFBMHAAQDCBcSDQcHBgUYFxYVExIREA8NDAsUBAcDCAEKBgULAAAQIBQBFL8GBQALpQa4AZVADQWlAEAREzQAGRlwjBgrThD0K030/eQAPzz9XTw5LzwSFzkSFzkBERIXORIXORESFzkxMABdEzcWFyYnMwYHNjcXBgcWFwcmJwYHJzY3JkAun0gTAZEDFGeFLn96PW94Ok9KOHZ0MoEErY44KbVEY5U0LI4qDjWIVU+IjUpVjy4ZAAABAHIA7QQ6BLYACwA4QB8AbgkC+QgDbgUHBgluCgQK+QUBbj8CTwICAhkMV1oYK04Q9F1N9DztPBDkPDwAL/Q8/Tz0MTAlESE1IREzESEVIRECAf5xAY+qAY/+ce0BkqgBj/5xqP5uAAEAqv7eAYMAzQAKAE61CgMAB6sGuAFQQCYBAzwCAgEKATwACgIDAQM8AAY4BzpPAF8AbwB/AKAABQCgC6GYGCsQ9F305BDtPBA8AD/tPBA8EO0Q/e0BERI5MTAzNTMVFAYHJzY2N7bNUFcyOTYDzc1xiyZNGWFbAAEAQQG4AmoCbQADACxAGXACcAMCTQFNAgIBIwACGgVwAAEAGQRwjRgrThDkXRDmAC9N7TEwAHEBXRM1IRVBAikBuLW1AAABALoAAAGHAM0AAwAlQBgCPAAKAjxfAG8AfwCvAASgAAEAoAShmBgrEPZdXe0AP+0xMDM1MxW6zc3NAAABAAD/5wI5BdMAAwBTuQAD/96yFDkCuP/eQCAUOZcDAQIDnwOvAwIDdgABFAAAAQIBAAMACgPoAALoAbgBqbUAAASzehgrEDwQ9O0Q7QA/PD88hwUuK119EMQxMAFdKysVATMBAamQ/lgZBez6FAAAAgBV/+cEEQXAABAAHQC1tAYgGRAcuP/wsgIgC77/4AAW/+AAEv/gAA//4EBiBAaHAogLiA/JDgUJBwsYAkUTTBVKGUMbVBNcFVwZUhtrB2sLYxNsFWsZYBt5AncGdgt6D4cGmAeWEMkY2gLWBtYL2w8aGh4EBRQeDQ0XcwlAISM0MAkBAAkQCQIJkB8RcwC4/8BADiEjNCAAQAACAJAex4sYKxD2XSvtEPZdcSvtAD/tP+0xMAFdcQBdADg4ODg4ATg4OBMQEjYzMhYWEhUQAgYjIicmExAWMzI2ERAmIyIHBlVr06B2snRCatOh1HmRual8fKmpfnxKXQLTAQQBPaxfs/7/2v7+/sOtmLcBnf6X7/ABaAFq7mmGAAABAN8AAAL7BcAACgBzQCADQA0RNGsEfwKPApkIBKwEAQkABgUCAwkFAQwCAcoKALj/wEASISM0MAABIAABABoMBUANDzQFuP/AQA4hIzQwBQEgBUAFAgUZC7oBPAGFABgrThDkXXErKxD2XXErPE39PAA/Pxc5ARE5MTABXQBdKyEjEQYGBzU2NjczAvu0QdNUl+IvdAR7PnwfrkfKXwAAAQA8AAAEBwXAAB4A50A2OwU7BrsFvwa7B8cIyRwHSQxZDFQOawxkDnoSehOJErwS5RrlG/AaDL8LtxMCGxAcEB0QHhAGvv/wAAf/4AAI//AACf/wQBoeChAIBgbKHBoUHBwaCBwaAwECCBocAw0eELgCpLNPEQERuAEYtQ0eFAUAHrgCu0APAQIMCnMX0wAAAUAhIzQBuwKBACAAEAE4QAwRtT8CXwJvAn8CBAK6AiQAHwGPsYsYKxD2XfTtEPYrPBD07QA/PP08P+39XeQREhc5ARESFzmHDi4rDn0QxAEREjkxMAA4ODg4ATg4ODgAXQFdciUVISY3NjY3NjY1NCYjIgYHJzY2MzIWFRQGBgcGBgcEB/w3Ahclo5rvqJl7gpwBuRP40dP2SKfColwera1BPGPAfsTlZmuTnIoTz9nqrViqvKSIYTEAAQBW/+YEFgXAACsA00AoBQ0WDUUNhg0ERRFXEXYbA1IWbBBqFGQWdQ15FIYNihSJG6UNCgUgA7j/4EALCwwNDgQHASMNDAG4AqSzQAABALsBGAApAA0BNbQMDBUEGLoCpAAZAmhAJBUeHAUEHikNEnNfIG8gAiCAB3MmQCEjNDAmAQAmECYCJpAtGLgBOLIZ0wG6ATgAAP/AQAshIzQgAEAAAgCQLLgBkrGLGCsQ9l0r7fTtEPZdcSvt9F3tAD/tP+395BESOS/tEP1d5BESOQEREhc5MTABODgBXQBdAXETNxYWMzI2NTQmIyIHNxYzMjY1NCYjIgYHJzY2MzIWFhUUBgcWFhUUACMiJla0H5Vrf6+ifTNMFBILc7iGammMFLQh6q54ymtmZIKQ/ujWwf8BgxiZh7CCfKEUngJ4fWOChIQgtcdnsmRfnC4evY7A/vXmAAIAGgAABBAFugAKAA0A9EA2ElgMaAyaDKkMyQwFTANMDZQEAxIBAggADAYDBwUKCwMHAAwMDQ3KAwQUAwMEAw0AAgwNBAcDuwK7AAgAAgGgQAoABAQADAwAygoEuAJmtwUFCkAdHzQKuAE3QA0HQCIjNAeAITUHkA8CuP/AQA0NFDQAAhACIAIDArUOuAGMsYsYKxDsXSsQ9isr9Cs8EOYQ/TwAPz8Q9Dz2PBE5OQEREjk5hy4rBH0QxA8PDzEwAUNcWLkADf/eshI5Dbj/1EALMzkDIi05AwQdHTwrKysrWV0AXUNcWEAUDEALOQyAUDkMQCY5DCIcOQxALTkrKysrK1khESE1ATMRMxUjEQMRAQKW/YQCnZPGxrT+NQFfpQO2/Eql/qECBAKV/WsAAQBV/+cEIQWmAB4A6kAdSxp5HYodlhOnE8MM1gzbGwgJExgOKhoDCTAFMAu6/+AAA//gQBATChUSExPKDg8UDhMUDg8NuAKkQBMOCh4VQA6gDgIODg9AFQEVFRwSuAK7tw8EAdNAAAEAuAEYQCMEHhwNEV8QbxB/EI8QBBCAB3MYQCEjNDAYAQAYEBgCGJAgErwBNQAPAZUADQE4sg61AboBOAAA/8BACyEjNCAAQAACAJAfuAGSsYsYKxD2XSvt9O307RD2XXEr7fRdPAA/7f1d5D/tEjkvXRE5L10Q7RDkhwguKwV9EMQAERI5MTABODg4OAFxXRM3FhYzMjY1NCYjIgYHJxMhFSEDNjMyABUUBwYjIiZVvRWZbIK0rYxXjCipjgLZ/bdPhJHAAQh0jfTI/QGAEIqLxKKask8/FgLxrP52XP720ceRsuAAAAIATf/nBBUFwAAdACoAskAnaxkBRAdAFUQZRCBaElQgawNkB2QIahJkIHQIdRyFCIYc1gjUFhEHuP/gtCcgIyAhuP/gQBEoHkANUA0CDQ0UGwHTXwABALgCaEAJBR4bBSIeFA0BuAE4QBUAtSVzEEAhIzQwEAEAEBAQAhCQLAq6ATgAHgE5QAo/F18Xbxd/FwQXuAIksyvHixgrEPZd7e0Q9l1xK+307QA/7T/t/V3kERI5L13tMTABODg4OAFdAF0BByYnJiMiBwYGBzY2MzISFRQGBiMiABEQNzYzMhYBFBYWMzI2NTQmIyIGA/uzGCxJa1ZBVWICQbxntP130ITh/uSdieit3f03T45OcqSie3qqBFMOajBNMD7u3GNg/vfSiu1+AUsBfAGpwajC/N1dqlm4npivrwAAAQBhAAAEFgWnAA0AcEAOxA0BBA0BBAIIBAkDDQC4ArtAMAIBBAkMDXMDAwJAISM0TwJfAm8CAwIaDwhzCesATwFfAV8CAz8BXwFvAX8BBAEZDrgBkrGLGCtOEPRdcTxN9O1OEPZxKzxNEO0APz88/Tw5ETkBERI5MTABcV0TNSEVBgADBgcjNhISN2EDtYz+7Us2D7kDgvOJBPqtjJX+Ev77uNutAeoBx5wAAAMAU//nBBkFwAAXACMAMADfQDc1FgEpFkkWSSbmDOkwBQkwAX0AfQF8BHQIcQtyDHUNeheLAIoBjASGCIELhAyGDY0XzBHGExIiuP/gshwgGrj/4LIgIC+4/+CyLSAmuP/gQB4pIAwAHhgADBseLqAuAS4SIR4GBSgeEg0ec78JAQm4AmdAECtzD0AgIzQwDwEADxAPAg+4AZG2MhhzsAMBA7gCZ7IkcxW4/8BADiEjNCAVQBUCFZAxx4sYKxD2XSvt9F3tEPRdcSvt9F3tAD/tP+0SOV0v7Tk5ARESOTkxMAE4ODg4ODg4OAFdcnEAcQEmJjU0NjMyFhUUBgcWFhUUACMiADU0NhMUFjMyNjU0JiMiBgMUFhYzMjY1NCYjIgYBanBs5r/A6mtth43+9tnZ/vaRYoZraIWJZmeIOkmQU4GorYJ/pwMbKZhqoNrfoGaXKSzEiLz/AAEBwI/BAVRohINfY4eE/P9NkE+mgIKqqAACAFX/5wQZBcAAHgAqAL5ANDoaTBZAI1sWVyNmA2wWbRpnI3oafR6MGosemhapGrwa6hbmIPYgEz0WnhatFgM6KWQGAie6/+AAI//gQBghIAYgKB5PDl8OAg4OHCIeFAUB01AAAQC4Ami0BB4cDR+6ATkACwE4QBEYQCEjNDAYAQAYEBgCGJAsAbgBOLQAtSVzEbj/wEAOISM0IBFAEQIRkCvHixgrEPZdK+307RD2XXEr7e0AP+39XeQ/7RI5L13tMTABODg4OABdcQFdEzcWFjMyPgI1NCcGBiMiAjU0ADMyFhIREAIGIyImATQmIyIGFRQWMzI2cK0WfGFTfVA2ATa7bbb8AQfGj+17evGirNoCy6V0eLKpfH2hAVMQem5Mf9hwDBhWawEI2N8BEJr+4/7y/uf+s66/AzSbtsScjK+vAAACALkAAAGGBCYAAwAHADhAIAQFAAYHCQIGPAQDPAEGBAoCPC8APwACIAABAKEIoZgYKxD0XXHtAD8/7RDtARESOTkSOTkxMBM1MxUDNTMVuc3NzQNZzc38p83NAAIAqv7eAYMEJgADAA4AhUAvcwuDC5MLowvwCwUACwEmCjcKRgpWCmUKtQriCgcLCg4HBAM8AQc8BgYFDgQLqwq4AVBAIwU8BAEGBAoCgQAABQYHPAQKOAs6BS8EPwQCIAQBBKEPoZgYKxD0XXE89OQQ/TwQPBDtAD8/EP397RA8EDwQ7RDtARESOQAQyTEwAXEAcnETNTMVAzUzFRQGByc2Nje2zc3NUFcyOTYDA1nNzfynzc1xiyZNGWFbAAABAHAA4gQ7BMMABgBaQAyPA4AFAgMFBgMIAgW7AloABgADAlqyAkAGugFQAAIBUEAVAKsBqyAEAhoIBDwBIAABAHUHV1oYKxD2XTztThD2ABkvGk3t7e3tGBoQ7RDtARESFzkxMABdEzUBFQEBFXADy/z+AwICgagBmrP+xP7BswAAAgByAaEEOgQGAAMABwBHQCcFBgEEBwkAJQMBJQMCByUEBAYlMAIBnwLPAgICvwUAGgkBGQhXWhgrThDkEOYAL03tXXHtPBDtEDztEO0BETk5ETk5MTABITUhESE1IQQ6/DgDyPw4A8gDXqj9m6gAAAEAcADiBDsEwwAGAFpADIACjwQCBAIBAwcFArsCWgABAAQCWrIFQAG6AVAABQFQQBUAqwarIAMDPAYAGgggBQEFdQdXWhgrEOZdThD2PE3tABkvGu3t7e0YGhDtEO0BERIXOTEwAF0BATUBATUBBDv8NQMB/P8DywKB/mGzAT8BPLP+ZgAAAgBaAAAEDAXTAB4AIgCEQC+MGosbAnwafBsCYhplGwJrDGEOAloMVA4CNg5EDgIbGQgHBAAQJxERAA0pFAEeALgCr0AjISIhPB8KHzwiIiA8ISEeAF4ebgpeF2okEF4gEQERaiNXWhgrEPZd7RD27fTtEDwQ7TwQ/QA/7TwQ9jw/7RI5L+QRFzkxMAFdXV1dAF1dASY1NDc2Nz4CNTQmIyIGByc2NjMyBBUUBgcOAgcDNTMVAdgBHhYxJLs4pHdzmhi5GffL1wEAWoNYNhoCuM0BaSQSak06OyulYjppn5CZFs3a6qZgonROSmBs/pfNzQACAG/+UQfVBdUARwBXAPdAVwQhECAWISElNQ0zDkUOSRhEIUYkRklHVlQOeikOFiUpASYJKh0mKTUaNjlDJVYYWR1bIVYpVklZVmUYZSVmKXYaeh1yJIUYhBqMHYshhyYZDhBQDgADU7gCu0AKDycwC1ALAgsHFrsCSABDAEsCu7RDOgMKH7gCu7c6ASArcCsCK7oBTQAnAru2L0gkDwcBB7gCg0APEFA+ACQSoA8kMBBwEAIQugGpABsCnrQ/OCokK7oBCQAjAp5ACSA1ATUZWFeMGCtOEPRdTe397fTt9F3t9P3kEP1d7QAv7e1dP+0/5O0Q7T9d5O0SOTkBERI5MTAAXQFdJQYGIyImJjU0EjYzMhYXNzMDBhUUFjMyNzYSNTQCJCMiBAIVFBIEMyAkNzMGBgQjIiQkJyY1NDcSACEyBBcWFRAHBiMiJicmARQWMzI+AjU0JiMiDgIEiUGhUVmoaaPycleeOSKzkB4pHTVWcoWr/q3N6v591dUBk/UBBgFiWLUz+P6q8d7+if74Q1RkegHBAUD4AYtyYcy22EVVFA3+FoJUOHxxSIdhQHFqQKNLW2jYgZ8BP6BbXZv9YYwPGyc9UAENj6cBIq7b/mfq9f6eqbB+adp/cuWVvdv03QEPASDLya3L/t7hyionGQFMiZhDhMtmiJZBkM4AAAL//QAABVkFugAHAA4BHkBjLxAwEGcIaAlgEIgDkBDJBcYGwBDwEAsIBVkBVgJQEGgLsBDzDPMN8w4JBAwEDQQOAwsKCQUEBAwNDggGBwcMCQUECAYMBwEAACAHDBQHBwwCAwMgBAwUBAQMCR4FBQgeBgMGuAJwQAkACAzpQAIBAgK6AQsAAQELQBIMIABlBwNSUATPBN8EA5AEAQS4AQFAC1AMwAffDAOQDAEMuAEBQBAPB88HAn8HgAcCB5MP1tcYKxD0XXEZ9F1x9F1xGO0Q7RoZEO3tABg/PBrtP+Q8EO08EO2HBS4rfRDEhy4YK30QxAEREjk5ETk5hxDExA7ExIcFEMTEDsTEMTABS7ALU0uwHlFaWLQEDwMIB7r/8AAA//g4ODg4WQFycV0jATMBIwMhAxMhAyYnBgcDAjPRAljdq/2bodkB8ZlGIhwzBbr6RgG8/kQCWgGWuXeNiwADAJYAAATpBboAEQAdACoAgUBQBARGI1YjZiNzCYQJBmkadQVwCXMLgwWDCwYnFgkDGCcqHhYdCQkTEh4qKikpABwdHgIBAh8eHhEACBgmBlQlJgwaLB0eIAEgAAEAXSs7XBgrEPZdPP08ThD2Te307QA/PP08Pzz9PBI5LzwQ/Tw5LxE5ERI5ARIXOTEwAV0AXTMRITIWFhUUBgcWFhUUDgIjASEyNzY2NTQmJiMhESEyNz4CNTQmJiMhlgImqMtzZmeFj1eAwYz+kwE9gThKS0aCnv7bAW1eJkNaOlSVjP6tBbpZuWVepjMnvIBnsWAxA1IRFmZNSW8p+6AHDDhrRlJ5MQAAAQBm/+cFdgXTAB0AuEBgYwJqHQIgADINYwBwAHQdgACEHZAAmgWrA6UNuQO0DccN0ADkHfMdEQ4SHREdHQMqBigRKhwgH0cNVhRXFVYZaAVrHXsSixKaA5kOmhyoAaQCqBHVDhMAFAAaEBQQGgQCuP/esig5Abj/wEAnKDkQDwABBBsTHgwDGx4ECRAmD0oAJiABAQEaHxcmIAgBCBkeY1wYK04Q9F1N7U4Q9l1N7fTtAD/tP+0RFzkxMAErK11dcQBdAXIBFwYEIyIkAjU0EiQzMgQXByYmIyIGAhUUEhYzMjYEtMI9/sPl7f7Xm68BQ8LcASw7vzPCk6njXG3mhqPiAgIx7/vBAW7S5QFVseDLLaCSov7vkbv+6Yq8AAIAngAABVoFugAPAB0AhEAmIB8BQwgcHR4CAQIREB4PAAgXJiAJAQkaHx0QIAEgAAEAXR47XBgrEPZdPP08EPZd7QA/PP08Pzz9PDEwQ3lANgMbBwgGCAUIBAgEBhkYGhgCBgsKDAoNCgMGFRYUFhMWAwYbAxchARIOFyEBGAgcIQEWChEhACsrASsrKioqKoEBXTMRITIXFhcWEhUUAg4CIyUhMjY3NjY1NCYnJiMhngH5q1p+WXRzTnqRzYX+sQE5kaUxRU2XbE6t/swFuhUdTGL+z8Sn/v6pYTKtNjFF6abm9yoeAAABAKIAAAToBboACwBbQBUGBR4ICAcHAAMEHgIBAgoJHgsACAe4/8BAHBASNAdUA0ogCiANAgoaDQQJIAEgAAEAXQw7WxgrThD0XTxN/TxOEPZdTfTkKwA/PP08Pzz9PBI5LzwQ/TwxMDMRIRUhESEVIREhFaIEJPyeAyv81QOEBbqt/j+s/g2tAAABAKgAAASFBboACQBLQCoGBR4ICI8HAQcHAAMEHgIBAgAIB5wgAiALAgIaCwQJIAEgAAEAXQo7XBgrThD0XTxN/TxOEPZdTeQAPz88/TwSOS9dPBD9PDEwMxEhFSERIRUhEagD3fzlArD9UAW6rf46rf1mAAEAbf/nBbkF0wAlANhARRsUGxUCYCcBXggTARIDJCQAIRIXAiUAHgIBAQYXHg4DIR4GCQEBJiclJCADAyACICdgAgMCcoAnAScdJiAKAQoZJmNbGCtOEPRdTe1NEF32XTxNEP08ERI5LwA/7T/tEjkvPP08ERI5ERI5ARESORI5MTBDeUBEBCMbHBocGRwDBgwmECUVJh8mCCUEJiMlGA0dIQAWDxMhARESFBMgBx0hACIFJSEBHAsXIQEUERchAR4JISEAJAMhIQAAKysrKwErKxA8EDwrKysrKysrKysqgQFdAF0BNSURBgQjIiQCNTQSJDMyBBYXBy4CIyIGBgcGFRQSBDMyNjcRA0wCbY/+0KDY/p+0swFQ258BAZImryFitm+FwnchOIcBApF+8D4CP6wB/eByc7kBXtjWAXO0Z7iUMHCATVGET4ifxP74gGE3AREAAAEApAAABSIFugALAGi5AA3/wEAnExU0BAMeCQqgCtAKAgoFAgILCAgFCCAHBwZdgA0BDQILIAEgAAEAuP/AQBUTFTQAXQwgDQEgDVANYA1wDQQ7WRgrXXEQ9itdPP08EF32PBD9PAA/PD88OV0vPP08MTABKzMRMxEhETMRIxEhEaTCAvrCwv0GBbr9pgJa+kYCs/1NAAEAvwAAAYEFugADAJS1AQIACAIFuP/Aszg9NAW4/8CzMzQ0Bbj/wLMtMDQFuP/AsygpNAW4/8CzIyU0Bbj/wLMdHjQFuP/AsxgaNAW4/8BALw0QNCAFkAWvBQMDIAEAAI8AoACwAAQvAEAAUADfAPAABRIgAI8AkAADAKIE1lkYKxD2XUNcWLKAAAEBXVlxcjz9XSsrKysrKysrPAA/PzEwMxEzEb/CBbr6RgABADf/5wNhBboAEQBNQBBlAmcGdAJ1BogNiBEGCQIBuAEaQCEEHg8JCSYKCggmC10gEwEgE0ATUBNgEwQTASYASxK2WRgrEPbtEF1x9u08EO0AP+3tPzEwAF0TNxYWMzI2NjURMxEUBgYjIiY7rwdwY0lqKMJZwYLBzQGgGKh8Q3N+A/L8GbjKat4AAAEAlgAABVIFugALAYVAMQMiNzkICTonCjUGNgpHClcDhgPXAwd2CtkD2QoDKAWMBIoFqgTqCAUKBAE1BNYEAgm4/+BACRIhNAMgEiE0A7j/3rMMORIJuP/gsxIhNAi4/+CzEiE0BLj/4LMdITQEuP/AsxIWNAi4/95APRk5CAklJT0ICRkZPQYGBwkKCQgKBQMEBCAFChQFBQoJCAggBwYUBwcGCgoABQIEAQIHCwgACAoDAgsBAAS4AjpADzAFAaAFsAXABeAFBAVKCLgCOkALMAcBIAeAB7AHAwe4AoZACwsgIAABAF0MO6gYKxD0Xe39XXHt9F1x7RA8EDw8PAA/PDw8Pzw8PBI5L4cFLisOfRDEhwUuGCsEfRDEBwgQPAg8AUuwGFNLsBtRWli5AAT/2DhZMTABKysrKysrK0NcWEARCSIZOQgsGTkELBk5BCIbOQW4/962FjkEIhY5Brj/3kALEjkIIhQ5BEAUOQi4/961JTkEQBU5KysrKysrKysrKytZACsrKwFxcl0AcV0rKzMRMxEBIQEBIQEHEZbCAtgBB/2ZAoL/AP328AW6/SkC1/2u/JgC5ur+BAAAAQCWAAAEKgW6AAUAM0AMAQIEAx4FAAggBAEEuAKnQA4HAgMgASAAAQBdBjtcGCsQ9l08/TwQ5l0APzz9PD8xMDMRMxEhFZbCAtIFuvrzrQABAJgAAAYPBboAEAF1QH8AAg8IFAIbCAR2DIYMyAwDCQxJDEkPAykEJQ0sDlgDWwR2DXgOhw0ICwIFCDkNNg5PAksDRAdACE0NQg4KmAKZA5YHlgioA6cHBhICDw4OMAUCFAUFAggMDQ0wBQgUBQUIDFIPUgFAAQICCAgJCgsLDQ0ODhAACAkCYBKAEgISugKoAA0BMbIFIAi4ATFACgwJCiBADH8LAQu6AlYADgELsgUgArgBC0AJDwEAIA9wEAEQuAJWtyAFYAWABQMFuAKosxE7WRgrGRD0XfRdPBj9PBDtGhkQ7fRdPBoY/TwQ7RoZEO3kXQAYPz88PBA8EDwQPBA8EDwQPBoQ7e2HBS4rh33Ehy4YK4d9xDEwAEuwC1NLsB5RWli9AAz/+wAI/9YAAv/WODg4WQFLsAxTS7AoUVpYuQAN//ixDgo4OFkBQ1xYuQAN/9S2ITkOLCE5Dbj/1LY3OQ4yNzkNuP/UtS05DiwtOSsrKysrK1lycV0AcV0BXTMRIQEWFzY3ASERIxEBIwERmAEkAVswFhk1AV8BBbv+Vq/+WAW6+/KRSFCbA/z6RgTL+zUE4PsgAAABAJwAAAUfBboACQDqsRILuP/AQDUTFTQIAgMDIAcIFAcHCAIHAwMICQQCAgkHCAQDIAYGBV0gCwEgC1ALYAtwC4ALBQsICSABALj/wEAMExU0IAABAF0KO1kYKxD2XSs8/TwQXXH0PBD9PAA/PD88Ejk5ARE5OYcELiuHfcQxMAErQ1xYtAhARjkDuP/AtkY5CEAyOQO4/8C2MjkHIhk5Arj/3rYZOQciMjkCuP/etjI5ByIjOQK4/95ACyM5Bw4UOQcOEzkCuP/0thM5Bw4dOQK4//S2HTkHDhU5Arj/+LEVOSsrKysrKysBKysrKysrACsrKytZMxEzAREzESMBEZzHAwK6x/z+Bbr7gQR/+kYEgPuAAAIAY//nBd0F1AAOABsAf0BgGg8BFBAUFBsXGxsEBBAEFAsXCxsEqRe2DsYOAxcXGBsCIB1AEU8TTxdAGlgFWAlXEFURXxNaF18YVhpXG4sXmQIQGR4DAxIeCwkVJiAHAQcagB0BHQ8mIAABABkcY1wYK04Q9F1N7U4QXfZdTe0AP+0/7TEwAV1xAF1dXXETEAAhMgQSFRQCBCMiJAI3EAAzMgARNAImIyIAYwGIATbLAUartP62v8/+uqjIAR3X2wEbeemRzv7XAsoBbQGdwv6l3N/+oLXIAVq+/vf+zwE0ARuzAQuT/uUAAAIAngAABP0FugANABgAV0A1ZRFrFAJLEEsUWxBbFAQLDB4PDg4AFxgeAgECAAgSJggaIBoBIBoBGhgNIAEgAAEAXRk7XBgrEPZdPP08ThBxXfZN7QA/Pzz9PBI5Lzz9PDEwAV0AXTMRITIXHgIVFAIhIRERITI2NTQmJyYjIZ4CKZJNbJJZ7v7J/ogBe7yeXUwxhP6JBboOEmW2bbv+/f2sAwGMf1yDFQ0AAgBY/44F7gXUABUAKAESQJJfJp8mAhkYNxUCCxwEHwQjGxwUHxQjBioFLRcrJjsFPBc6JkwFTBdJJl0FVSNYJm8FewN6BYwDjAWVAJoDpACrA9UA1RblAOUX5RgaHAUrACoFOwUEXQWSGJYm1SYEJRYqJjQWOSZJGEkcRR9FI0smVghYEVUVWhxaHVYfVyBXImkFZhVrJnsmjhyOJtsY3CYZFbj/1LIbOQC4/9RAPRs5AgMWKAMHKCYYFgUABiEDExoFAigmGBYABSQeHg8DAggkHgcJGiYTSgIaICqAKgIqISYgCwELGSljXBgrThD0XU3tThBd9k307QA/7T8/7REXORI5ARESORIXOQARMxDJEMkxMAErK10AcnFdAV1xciUWFwcmJwYjIiQCNTQSJDMyBBIVFAIlFhc2ETQCJiMiABEQADMyNyYnBPWHcjmenaPFx/68r7ABRcnLAUarbv3mqG2reemR2f7iARvcaFxbZZ1dK4c5e1vAAVza2QFkusH+pdq1/t+NL12cATmyAQqT/tf+2f7i/s4nOxkAAgChAAAFrQW6ABgAIgFMQA8SCw4BEjYcWh9mCG0fBBK4/+KzEho0Erj/8LMiJzQRuP/isx0nNBC4/+KzHSc0D7j/4rMdJzQSuP/Ysx0mNBG4/+KzEho0ELj/4rMSGjQPuP/iQHMSGjQlDkocSiBTC1wcbRxyCXgOeQ+FCogPlw2pD7gP6A7nDxAODAwgEQ8UEREPEQ8MCRIbAiEaFgoGEhEQDQwFGAkJFhcaGR4XFwAhIh4CAQIAGBgPDw4IHiYOnAZdICRwJIAkAyQiGCABIAABAF0jO6gYK04Q9F08Tf08EF32GeQY7QA/PBA8EDw/PP08Ejkv/TwQPDkvEhc5AREXOYcOLisFfRDEMTABXSsrKysrKysrKwBdQ1xYQAoIQA85DxA6ERI6KysrWQFxQ1xYuQAO/95AGhk5ESIZORIiGTkOQBw5ECIUORAiHzkQIhU5KysrKysrK1kzESEyFhYVFAYHFhcWFxMjAy4CJyYjIxERITI2NjU0JiMhoQKKxMx6ytNNKFVM//TCVW5XLSFL4QGhhZZOl6P+MAW6T8h5nNYdJSROdf5xATGEjDgLB/11AzM3eUdohgAAAQBc/+cE6wXTADAA/kCcYwNjBHMDdAQEJSc1AzkcQwNJB0wdRR9EJEYnUwNZB1wdVyiJEw4oDSYkAiQDJyU2DzQjRCVFL1ogViNVJWwLag1rDmYUZRh5C3oNeg99EHUkcyWGA4oLiQ2KD40QhSSDJZINlg+WFR4lJA4NCwUhHB0eGwgHBgQDAgYBJSQiDg0LBgUeGy2PGgEa7RYALRABIAFQAWABcAGQAQYBuAGwQCUtHh4WAwUeLQkbJhpKCSYAKQEpGjIhJhIBJhJUIAABABkxY1sYK04Q9F1N5O0Q7U4Q9l1N7fTtAD/tP+0Q/V3kEP1d9BESFzkRFzkREjk5ARIXOTEwAF1xAV1xEzceAjMyNjY1NCYnJiQnJiY1NDY2MzIWFhcHJiYjIgYVFBcWBBcWFhUUBgYjIiQmXLcNX8h9b6pTUFw7/mxRaWd+8pSj+YYFug+tqbChOTgB2ViAeob7ncf+85kB1xBujVdCc0RFZyMXYSs3o2VvwWRpzIEOi46BW08zM2soO7V2dc9zdOkAAQAwAAAEugW6AAcAT0ANBQIeBAMCAAgHBgUECbgCc7MgBAEEuAEBtwYgAQIvAwEDuAEBtQEBIAABALgCc7MItpkYKxD2XTwQ9F08EP3kXeYQPBA8AD8/PP08MTAhESE1IRUhEQIT/h0Eiv4bBQ2trfrzAAABAKH/5wUiBboAFABxQAomD1gEWAjJCAQWuP/AQBYTFTQ0BDsIRgRKCHYPpgXoDwcMAAIRuAK7QBwGCRQmAl0gFgEgFlAWAmAWcBaAFgMWDSYgCgEKuP/AQAkTFTQKXRU7WRgrThD0K13tTRBdXXH2Te0AP+0/PDEwAV0rAF0BMxEUAgQjIiQCNREzERQWFjMyNhEEYMJk/vvUzv76cMJHrX3WtgW6/LHd/vyjjgEN6QNP/LK/tWLCARQAAAEACQAABUYFugAKAPVASC8FASoAKAMlCi8MMAxgDIkIiQmQDMAM8AwLIAxQDAIEAgsIAgoJCSAIBRQICAUAAQEgAgUUAgIFCQECBekgCgAICWUIAWUCCLj/wEALKDlQCAGACJAIAgi4AQFADQJAKDlfAgGPAp8CAgK4AQFAESAFUAUCMAVgBZAFwAXwBQUFuAKIswtgqBgrGRD0XXHkXXEr5F1xKxgQ7RDtAD88GhntGD88hwUuK30QxIcuGCt9EMQBS7ALU0uwFFFaWLIADwq4//GyCRIBuP/xsggUArj/7jg4ODg4OFkBS7AoU0uwNlFaWLkAAP/AOFkxMAFdcV0AXSEBMwEWFzY3ATMBAkH9yNIBfS4fIi0BjMb9wgW6+9eAcHh4BCn6RgABABkAAAd2BboAGAGMQEQpACYRKRImGDkANhE5EjYYSQBHEUkSRxhYAFcRWBJXGBCYCJgPAgMEBQUCBgcICAUKCwwMCQ0ODw8MFBMSEhUWFxgYFbj/PLMFABgguP88swwSESC4/zxAWhUICSAABQICIAEAFAEBABgFCAgeFRgUFRUYEgwJCR4VEhQVFRIRDA8PIBARFBAQERIJDAgYFQUPERAMAAIFFQwFAxgQDw8JCQgIAgIBAhgSEhERAAgaFxcaEEEJAVEAIAAMAVEAFQFRAEAABQFRtiAgAQEBGRm4AYuxqBgrThD0XRoZTf0aGP39Ghn9GE5FZUTmAD88EDwQPD88EDwQPBA8EDwSFzkBEjk5ERI5ORESOTkROTmHTS4rh33Ehy4YK4d9xIcuGCuHfcSHLhgrh33EKysrhw4QxMSHDhA8xIcOEMTEhw4QxMSHDhDExIcOEMTEAUuwD1NLsBFRWliyEgoYuP/2ODhZAUuwJVNLsCpRWli5AAD/wDhZAEuwC1NLsA5RWlizDEAFQDg4WTEwAXJdIQEzExYXNjcBMxMSFzY3EzMBIwEmJwYHAQGe/nvH3yQaOAoBF+rSTyMcLebD/m67/ssnBxcU/skFuvw/l5XrJAPe/Rr+7POLtAOu+kYEXYwgZUf7owAAAQAJAAAFSQW6ABMCV0ApJhIBGQEWCwIpEikTOAE3AzgIOAk4DToONRI3EwoSEyASITQSIBIhNA64/+CzEiE0Dbj/4LMSITQJuP/gsxIhNAi4/+BAyBIhNAQgEiE0AyASITR3AXcLAiYEKQcoCyoOJhI2BDoIOgs6DjUSSAhUBF0IXAtaDlQSZwFlBGoIawtpDmUSdQR6CHkLeg13EncThgSKB4oKlQS4CLcSxgTJCNcE2AjZDtYS5wToCOgO5hIsBgcICQkBBgUEAwMLEBATDw4NDQEQEA0REhMTCwEACQINCwMMEwoLAQYQAhMJChMTIAAJFAAACQMCDQ0gDAMUDAwDCgkJAwMCAhMNDQwMAAgvFQEVFxcaIAxADAIMuAFftyAKkArACgMKuAG4tV8CnwICArgBuEAKBrRAEFAQzxADELgBX0AKIAAZFBXCIWCoGCsrTvQaGU39XRjlGe1d7V39XRhORWVE5l0APzwQPBA8PzwQPBA8hwVNLiuHfcSHLhgrh33EABESOTk5OQ8Phw4QPDwIxIcOEDw8CMSHDhA8PMSHDhDExMQxMAFdAF0BKysrKysrKytDXFi5AAv/3kALGTkBIhk5DhgbORK4/96yGzkTuP/eshs5BLj/6LYbOQgiGzkJuP/Ashw5Dbj/wEAfHDkTQBw5A0AcOQ0OFhc8ExIWFz0ICRYXPAMEFhc9C7j/3kAuEjkBIhI5CwwdIT0BAB0hPAsKHSE9AQIdITwLDBMXPQEAExc8CwoTFz0BAhMXPCsrKysrKysrKysrKysrASsrKysrKysrKysrWQFxAV1xMwEBMwEWFzY3ATMBASMBJicGBwEJAjf+DOcBClMjMUMBJ9P9/QIr8P6PHyExFf6QAvwCvv6IdT9QVwGF/U38+QILLTVQHv4BAAABAAYAAAVGBboADAE0tggJOgMEOwm4/+ezEhc0CLj/50AOEhc0BBkSFzQDGRIXNAm4/9izGCE0CLj/2EBGGCE0BCgYITQSJgQpCCoKLw4EaAFoBmgL3gYEBQQDAwYIBwkGBgkGAwkgCgsUCgoLBgMGCQMgAgEUAgIBBgwLBgEDAgABC7gCGUAJCgoJAwICAAgOuAIYQAkMCVJACoAKAgq4AbVADQsLDCAAA1JPAo8CAgK4AbWyAQEAuAIYtg0OwiFgqBgrK/Y8EPRd7RD9PBD0Xe0Q5gA/Pzw8PBD0PBESFzkBEjmHLisIfRDEBYcuGCsIfRDEhw7ExIcQDsTES7AXU0uwHFFaWLQIDAkMBLr/9AAD//QBODg4OFkxMABdAV1DXFhACQkiGTkIIhk5BLj/3rEZOSsrK1krKysrKysrKyshEQEzARYXNjcBMwERAjv9y+wBIVBFQl4BHOL9twJtA03+Rnx8c5ABr/yz/ZMAAAEAKQAABLAFugAMAOaxEg64/8BAOg0RNEgBRwhICQMKCAsJAqsEAQMCAQEECQoECAoKJh0hNCgKAfkKAQogAQQUAQEECigLHDQBKAscNAi4/9izCxw0BLj/2EATCxw0AQoECAUeBwYCCwoeDAAICrsBtQABAAQBtUAbAAcwCEAIAghKDD8LAQsaDgEABQZRABkNtpkYK04Q9E30PBA8ThD2XTxN9HE8EOQQ/AA/PP08Pzz9PDwROQErKysrhwUuK11xK4d9xA4QxIcOEMTEAXIxMAFxXStDXFhACQIiITkBGCE5Cbj/3rUZOQIiGTkrKysrWTM1ATY3ITUhFQEHIRUpAu9QSPzOBBr8yVkDqLQDq2RKra38B2etAAEAi/5pAhgFugAHADhAHwQDKwECEAUGKwAHEgMCAgcGrgQFJQEgAAEArAidaBgrEPZdPP089Dw8EDwAPzz9PD88/TwxMBMRIRUjETMViwGN2dn+aQdRlfnZlQAAAQAA/+cCOQXTAAMATEAkAQEiFDkAIhQ5mAABAQCQAKAAAgB2AwIUAwMCAgEAAwAKA+gAuAGptwLoAQEEs3oYKxA8EO307QA/PD88hwUuK119EMQxMAFdKysFATMBAan+V5EBqBkF7PoUAAEAJ/5pAbQFugAHADRAHAQFKwcGEAMCKwABEgYFBQECrgQDJQcArAmbWhgrEPQ8/Tz0PDwQPAA/PP08Pzz9PDEwASE1MxEjNSEBtP5z2dkBjf5plQYnlQABADYCsgOLBdMABgBhuQAA/8BAFRQ5AEAUOSYCKQMCBgIJAwIFAQY8AbgBZUAXAgU8BAA8AQYGAwIIOATcA2wC3AFpBwi8ATIAIQG/AYEAGCsr9vT29OQREj05LxgQ7RDtAC/t7RA8MTABcXErKxMjATMBIwPvuQFhkQFjtfcCsgMh/N8CVQAAAf/h/mkEiv7rAAMAGkAMAT8AAhoFABkEQ0EYK04Q5BDmAC9N7TEwAzUhFR8Eqf5pgoIAAAEAWQSqAdEFwgADAGBACwM4Fxk0AkAPETQAuP/AsxcZNAO4/8BAGhYZNFABUAMCQANQAAIDAgAAARABAgGHAgAAuAJTsgGGA7gCYLMCGQRxuQEvABgrThD0Te307QA//V08EDwxMAFdXSsrKysBIwMzAdGR5/EEqgEYAAACAEr/6AQcBD4AKAA3AR1AjgkNCSoZDRoqKQ0qKjkNNhU3GzoqSSpdDV0qag1pKmAwig2GKZoWmxqpDRWmGaoothm7KMQZzyjSFd0oCEQWAR8XHxgrLCo0OQQ5LEkESCxWCFkrZghpK3YMhwzJDPkN+SsRNzQOAQQQLyQ0FzIhFBhfKW8pAikcLw4/Do8Onw7/DgWfDq8O7w4DDg4cAxe4AqpAFhiVFBwcBwBFJwoyHAMLKWEQYQAlISS4AltAECdAACYQJiAmMCavJgUmMTm4/8BAHx4jNDA5wDkCoDkBORclGCIvJL8GzwYCHwY/BgIGMTgQ9l1x7fTtEF1xK/Zd7fQ8/eXlAD/tP+Q/7f3kERI5L11x7XEREjkREjk5ARESFzkxMABdAXFdAHElBgYjIiY1NDY2NzY3Njc2NTQnJiMiBgcnPgIzMhYWFxYVFRQWFyMmAwYHDgIVFBYzMjY3NjUDPGS5aq+8R3NINWvaZwEzRYh/eR2wGG7QiYiqUBAJFyK8HBdixG9cMm1paKImHYNVRquFToFOFA4NGiQlCm4tPVlxGHGLS0BhSi548PuFPTgB3SgcEChNL0hgW089dwACAIb/6AQfBboAEAAdANZArAEFDA8kBTUFRQUFPx+wHwIfHyIcMxxCHHAfkB8GOhM8FjwaTBZMGl0IXQ1YD10WXhpqCGwNaA9uFm4awB/ZDNoX2hniE+wX7BnjHeAf/x8ZIAUvDy8UMAU/D0AFTA9QBWYF2h31BPoQDBAVDgQGAgAbHAYHAQoVHA4LGCTQCwEQC0ALYAuACwQLdAERMwAzAyUCAsABAZABoAGwAfABBB8BPwFPAQMBGR5HNxgrThD0XXFyPE0Q/fTkEP1dce0AP+0/P+0/ETkREjkxMABdAV1xcgBxISMRMxE2MzIeAhUQACMiJwMUFxYzMjY1NCYjIgYBLae0crFir3FA/vK9vGsCNFWRdqyldXasBbr99Y9Pj8pz/u/+1p0Blr9Vi83L0MbNAAEAUP/oA+0EPgAaAM1ARwkMAR8cQxNDF1MTUxdgE2AXmwKbA5oNpBCkGgwIDRkKagJpA2oFdQxwDYANpgy1CbYKtQwMFgyGDOMCAw4iXw9vD38PAw8BuAKqQEkwAEAAUABgAHAAkACgAOAA8AAJAA8PCwAABBIcCwcYHAQLHA8BDyQOIhsAAQAkCysfAQEAAQEBSRwVJM8HAR8HPwcCBzEbNMQYKxD2XXHtEPZdcktTI0tRWli5AAH/wDhZ7XL07XIAP+0/7RI5LxE5LxBd5BBd5DEwAF1xAV1xARcGBiMiABE0EjYzMhYXByYmIyIGFRQWMzI2AzyxHe+u2v73cumJrdwfrxl/WoiqpIRqjgGFF7fPAR0BCqwBAoGvoRtrbMPT1sKCAAIARv/oA98FugARAB0A1kCrCgIEDSUNNA1EDQU1FDUcVwJUClIUUxxnAmQFZQljFGAcwB/UBdUT3RnlE+UU7xfrGeUd4B//HxYfHysaPBY8GksacB+QHwcuAiQNLhY6AjUNSwJFDUYUSRxXClYNZw3lBucW+gH0DhABFQMOCxAPABscCwcRAAoVHAMLGDMBACURDyUQENARARARQBFgEYARBBF0EiS/B88H3wf/BwQfBz8HTwcDBxkeNFAYK04Q9F1xTe39XXE8EO0Q/TzkAD/tPzw/7T88ETkREjkxMABdAXFdAHEhNQYjIiYmNTQSNjMyFhcRMxEBFBYzMjY1NCYjIgYDOGXEf9V1atSDYJYvs/0grHV2pah7eKGGnoz7o58BA4pRQQIO+kYCEszKwcbazMQAAgBL/+gEHgQ+ABUAHQDeQGQfABwVAlUDXQVdCVULZQNrBW8JZQsIEAAQARACJxLZBfoU9hoHMRI6GTEcQRJNGkEcURJcGVIcYRJtGmEceAZ4FfYC9hgQABYBDw0XF1AWYBZwFgMWHA+QEKAQAhAQBBscCgcAuAKqQAkBlRMcBAsXQA24/8BACScqNLANAQ0aH7j/wLMlJjQfuP/AQB0eIzQwHwEfFjMQJAdAJCo0Hwc/B08HAwcZHjQ3GCtOEPRdK0395E4QcSsr9nErTe0AP+395D/tEjkvXTz9cTwBERI5ORI5MTABXQBdAXFyARcGBiMiABEQADMyABEUByEWFjMyNgEhJicmIyIGA166LO656f7vARTc1QEOAfzoCrKFY4z92gJRDDhWiXypAVYXo7QBHwEDAQwBKP7e/vkQIK+6aAGVhkNopgAAAQATAAACgAXTABcAs0AeFAkBDxkvGTAZQBlwGZsMnA2pDQgaDSgNsBnAGQQZuP/AQCgaHzQdCA0DDA8cCgEVAisUEwQDBgAKnxQBFP8TQAQXJQQAAwKSAQEAuP/AszE4NAC4/8BAChwfNJAAAQCjGBm8AboAIQD2AQoAGCsr9l0rKzwQ9DwQPO0Q7e1dAD8/PDw8/Tw/7TkROTEwQ3lAFBARBgkHBggGAgYQCRIbABEGDxsBKwErKoGBAStxXQByMxEjNTM1NDc2NjMyFwcmIyIGFRUzFSMRsp+fExqDdkxcGzgyUkTPzwOajHFrNEZXEp0KRmBijPxmAAIAQv5RA+oEPgAeACoA8EBgCwsFFCwLJRRMC0UUBgkdGR0sCyYULCM5CzYUSgtGFFYHWAtoC/oK9RUOLiMsJz4jPidMJ5AsoCwHNiE2KT8sRgtGIUUpVCFUKWkHYyFjKWAsgCzaJ+gh7iPvJxEXFgYVuAKxtCgcEwcBuAKqQBAgADAAYABwAIAAwADQAAcAuAJ9QEEFHBwPCkUiHAwKFhUzJTMKJRgY0BcBEBdAF2AXgBcEF3QPASUAIh8kvw/PD98P/w8EHw8/D08PAw8ZKyx0ITRQGCsrTvRdcU3t9O0Q/V1xPBD95PY8AD/t5D/t/V3kP+3kPzwxMAFdcQBdcRcXFhcWMzI2NzYnBiMiAjU0EjYzMhc1MxEUBgYjIiYTFBYzMjY1NCYjIgZmrwsyQ3R9iBgOAXaw2/Bu0Y28eqZl26C+6pmmfXyorXp4qFgaUSUyZFo3sIsBPN2YAQGMmID8avjPeKsDKtHAv8zDxsMAAQCHAAAD6AW6ABQAsbkAFv/AQA0VFzQlBDUDRQO6DQQDuP/gQCQXGTQXCBEMERQDBQEADxwFBxQLCgwlCUAzNjT/CQHACQEJTha4/8BAFzQ2NLAW8BYCcBagFrAW/xYEFgIUJQEAuP/AQBUzNjTwAAEAACAA0ADgAAQAThVHUBgrEPZdcSs8/TwQXXEr9F1xK+0APzw/7T8RORE5ARI5MTBDeUAOBg4HJQ4GDBsBDQgPGwEAKwErK4EAK10BKzMRMxE2MzIWFhURIxE0JiMiBgYVEYe0fsB2rku0dWtQjTwFuv3ykl2knP1fAqGHe1OOff27AAIAiAAAATwFugADAAcAfUBdTwmQCaAJsAnACd8J8AkHAAkfCXAJgAmfCbAJwAnfCeAJ/wkKHwkBAAEHBAIDCQYDfgEABgUGBAoGByUFAASfBKAEsATABOAEBsAE8AQCAAQgBNAE4AQEBE4IR1AYKxD2XXFyPP08AD8/PD/tARESOTkREjk5MTABXXJxEzUzFQMRMxGItLS0BOvPz/sVBCb72gAAAv+i/lEBOgW6AAMAEgCZQE0EBSUFOwQzBYYFBRcIBQUHBAQCBAUTAAENCwIDFAwEEQULBwN+AQALBgccEQ+QFAEUFxcaDAwNJQoKkAsBHws/C08LAwsZExStIUdQGCsrTvRdcTxNEP08ThBFZUTmcQA/Te0/P+0REjkSOQEREjk5ERI5OREzM4cQCDwxMEN5QA4IEA8mCBAKGwEJDgcbAAArASsrgQFdEzUzFQE3FjMyNjURMxEUBwYjIoa0/mgiNh83NrQzQZdJBOnR0fl7mQ5JkgRc+6DETWQAAAEAiAAAA/gFugALAcxAGgcGVgZaCQMPDfMF9gYDVQN3CgISBiATITQIuP/wsxInNAm4//C0Eic0EgW4//CzEiE0Cbj/8ECEEic0BgQEBQQGNwlHBAUlBi0KWAp3A3UK2gPjBgemBgEjBiYHJQg5BjgJPw1PDVkEWQZYB1kJfQR5BZkJxgbSBNYG5AbpB/cG+QgVEgoKBQMDBAIGBgcJCQgKCgUJCAglBwYUBwcGAwQEJQUKFAUFCgoJBgMECAECAAQFBgcICAsLAAoEuAEPsgUiCLgBD0AjIAc/BwIHGpANAQ0LJQACJQEBkAABPwBPAAIAGQwN4SFHZhgrK070XXE8TRDtEO1OEHH2XU3t9O0APzwQPBA8Pzw/PBEXOYcFLisEfRDEhwUuGCsOfRDEBxAIPAg8AxAIPAg8MTABQ1xYQAoJLB05CQgdHTwGuP/esh05Brj/1LIgOQa4/9SxITkrKysrK1ldAHFdAXEAKytDXFi5AAb/wLIhOQO4/8CyFjkDuP/eshA5Brj/3rIQOQO4/96yDDkDuP/esQs5KysrKysrWQErKytDXFhAEt0EAQgUFjkJCBQUPAkIFBQ8Brj/9rIYOQa4/+yxGzkrKysrKwFdWQBdAV1xMxEzEQEzAQEjAQcRiLQBqun+agG/3v6hfwW6/LwBsP52/WQCH3r+WwABAIMAAAE3BboAAwCMuQAF/8CzNzg0Bbj/wLM0NTQFuP/AszAxNAW4/8CzIiU0Bbj/wEAlFRc0DwUfBZ8F3wUETwXfBfAFAx8FcAWABf8FBAEAAAoCAyUBALj/wLM3ODQAuP/AQBozNTSfAAHAAPAAAgAAIADQAOAABABOBEdQGCsQ9l1xcisrPP08AD8/MTABXXFyKysrKyszETMRg7QFuvpGAAEAhwAABiYEPgAjAMa5AAn/2EBBCw00JQTkBOQJ4RflIAXVBfYgAhcIICMJGBsgCQMDIx4cBhUcCwsGBwEGIxoZEArQJQGQJaAlAiUXFxoOJZARARG4AV21GCWQGwEbuAFdQBkAAjMjJQHQAAGQAKAAAh8APwBPAAMAGSQluAF4syFHUBgrK070XXFyPE395BD0Xe30Xf1ORWVE5nFyAD88PDw/PzxNEO0Q7REXOQEREjkSOTEwQ3lADgwUEyYUDBEbARINFRsBACsBKyuBAV0AXSszETMVNjYzMhYXNjMyFhURIxE0JiYjIgYVESMRNCYjIgYGFRGHoTKmanaXH37KnqqzI1w+cJS0WGRMgToEJpVOX2JYuq+2/ScCnWxfOpWk/ZcCsnh4UJqR/dkAAQCHAAAD5gQ+ABYAzEATBQMGEwKoELgQ4wPnE/AD9hMGBLj/8EAxCw00eRABmBDQGOAY/xgEIAgUDhQWEhwFBwEGFg0KDQ4MDiQLQDM2NP8LAf8LAQtOGLj/wEAaNDY0sBjwGAJwGKAYsBjAGAQYAwIzFRYlAQC4/8BAEjM2NPAAAQAAIADQAOAABABOFxD2XXErPP089DwQXXEr9l1xK+08EDwAPzw/P+0ROQESOTEwQ3lAFgYRCQoICgcKAwYQJhEGDhsBDwoSGwEAKwErKyqBAV1xACtdcTMRMxU2MzIWFhcWFREjETQmJiMiBhURh6J13WChUBAKtCprSHOnBCaXr0VwTTJ9/XMChm5tQZLM/bwAAgBE/+gEJwQ+AA0AGQDBQF0SBwoZDEcGSAhWBlkIZwZpCAg0EDoSOhY1GEUQSxJLFkUYXAVcCVIQXRJdFlIYbQVtCWQQbRJtFmQYdwEVCQYFDVsDVAVUClsMbANlBWUKbAwKFxwEBxEcCwsUJAe4/8BAEyQlNDAHAQAHEAcgBwMHMd8bARu4/8BAGR4jNDAbARsOJABAJCU0HwA/AAIAMRo0NxgrEPZdK+0QcStd9l1dK+0AP+0/7TEwAXFdAHFDXFhACVMFUwliBWIJBAFdWRMQNzYzMgAVFAYGIyIAExQWMzI2NTQmIyIGRKSJxdsBFnvri9/+7bmyh4ays4WHsgITASeOdv7h/c3rggEeAQ3My8zRxcvKAAIAh/5pBCEEPgASAB4Az0ClDBAtED0QSxAEPyCwIAIfICkMIx0yFTIdQh1wIJAgCDoXOhtKF0obWQhbDFwXXBtqCGsMaRBtF2sbwCDTFN0Y3RrTHuQU5B7gIP8gFiMEKxArFTUEOhBGBEoQWhDlC+sd/hALEQ4DFhwcBgcBBhYcDgsADhkk0AoBEApACmAKgAoECnQBEzMCMxIlAADAAQGQAaABsAHwAQQfAT8BTwEDARkfRzcYAStOEPRdcXI8TRD99OQQ/V1x7QA/P+0/P+0RORI5MTAAXQFdcXIAcRMRMxU2NjMyFhYVFAIGIyImJxEDFBYzMjY1NCYjIgaHpDqSaIjQanXfe1qPLhGmdnirp3Rzsf5pBb2KUVGM/5ij/vuLTDr9+wOkzcTL1cvK1wACAEj+aQPgBD4AEAAcAL5AmAsCKwIqGDsCSwJ5DAY/FT8ZSxmQHqAeBTQTNBs/HkQTRBtTE1MbYxNjG2AegB7UBtUS5gbpDOoYECkCIgwrFTkCNQxJAkYMWgJpAtkM2xjjFukZ5hv8Ag8BBA0UGhwLBw4GFBwECwAOFw4zACUQENAPARAPQA9gD4APBA90ESS/B88H3wf/BwQfBz8HTwcDBxkdHnQhNFAYKytO9F1xTe39XXE8EP30PAA/P+0/P+0RORI5MTAAXQFdcQBxAREGBiMiABE0NjYzMhc1MxEBFBYzMjY1NCYjIgYDLCqXVb3+72/TfsVxov0hrHhzpq92daP+aQIIO04BLgEHoP6Dpo76QwOtzc3Dx9TWxwAAAQCFAAACxgQ+ABEAg0A7LxMBEAQBIwQ0BEMEUwRmBHQEBgkRCAkICQ0TEQkNAAMIAQscBgcBBgAKCSiQCAEIIiATARMCIhElAQC4/8BAFTM2NPAAAQAAIADQAOAABABOEkfEGCsQ9l1xKzz95BBd9HLkAD8/P+0ROTkROTkBERI5OQAQyYcOfcQxMABdcgFdMxEzFTY2MzIXByYjIgYHBhURhaI+aT9bXj5CQjteFB4EJqFxSDqnJ0c/YHL91AAAAQA//+gDsQQ+ADAB2UB7BCIUIjoJSglEJFYiZSJ8CY4JhCSmE6sswgMNCRcaGBcwSyzWFwUbAlUCAhAyAQoYXAhcCVwKXAtcDFwNaghqCWoKagtqDGoNtCa0Jw8nJiQnJCk2JFoKWQtkJmQodCN0JIAkkwqcDJIolyyVMKQKqQyjJ6QosybFJhYduP/eQBIeOVoIJyUMCgQaICYVBAsuHRq4AqpAHB8ZPxlPGV8ZrxnPGQYPGR8ZbxnfGQQfGY8ZAhm7AlUAFQAAAqpAEBABQAECEAHQAQIAARABAgG4/8CzFBY0Abj/wEAeDhE0AQEuXB1sHQIdHBUHBBwuCx8aARokGUATGDQZuAJbsgckKrj/wLccOdAqASoaMrj/wEAmJyo0YDLAMgI/MoAyAjIQAQEBJAAgJA8i3wABPwBPAAIAGTE0NxgrThD0XXFN9O0Q7XJOEF1xK/ZxK03t9CvtcgA/7T/tcRI5LysrXXFy5BD9XXFy5BESORESOQEREhc5MTBDeUBAJy0eIwUULCYREBIQExADBiINIBsACSgHGwEFLQcbAR4UIBsAIQ4jGwAiIw0MCCkKGwEoJwkKBisEGwAfEB0bAQArKxA8EDwrEDwQPCsBKysrKyorgYGBACtdcQFdcnFdEzcWFjMyNjU0JyYnLgI1NDY3NjYzMhYWFwcmJiMiBhUUFxYXFhceAhUUBgYjIiY/sg+Je3x4NSWTxplPQTgqkVN9vVoRsAxzaXxqFhYvG4S/l1Zpxn3P2QE9HGtyZUQ9IxglMkmBTkd5KB8rSHtnGFJcUjcjHB0TCiQzQXxcWp9XrAAAAQAk//ICKgWZABcAgLkACv/AsyMmNAm4/8BAQSMmNIAZAQABDA0KAQMAFhAJKw8KBhYcAwsPECIAIgENEiUMAf8HCEUJRWAHcAeAB5AHBAAHIAegB7AHwAfQBwYHugJqABgBNrFmGCsQ9l1x9OQQ7Tz9PBDk9DwAP+0/PP08ETkSOREzMxDJMTABXSsrJRcGIyImJjURIzUzETcRMxUjERQWFjMyAhAaTDxibCyEhLO1tRMrKB6hnxA+ZaICY4wBB2z+jYz9k00sGgAAAQCD/+gD4AQmABgAvbkAGv/AQAkVFzQCIBMWNA+4//BAKRIUNCsTASQIExYMARMWCwYAChEcAwsAMxYlGBdAMzY0/xcBwBcBF04auP/AQBU0NjSwGvAaAnAaoBqwGv8aBBoMJQm4/8BAFTM2NPAJAQAJIAnQCeAJBAlOGUdQGCsQ9l1xK+0QXXEr9l1xKzz95AA/7T8/PDk5ARESOTEwQ3lAGgQQDg0PDQIGBwgGCAUIAwYQBAwbAA0IERsAACsBKyoqgQBdASsrKyE1BiMiJiYnJjURMxEUFxYWMzI2NjURMxEDP3zVXqNPEAu0CxFuUVGOO7SctEhtTzVzApL9s40xR1FTj4gCOfvaAAEAGgAAA+gEJgAKAV63NQUBACIROQq4/95ADRE5CRYSHDQIFhIcNAK4/+qzEhw0Abj/6rMSHDQKuP/YQAkeITQAKB4hNAq4/+hACSIlNAAWIiU0Crj/2kC1KC40ACAoLjQPDCkAKAkmCjkANQpIAEcKVgFWAlkIWAlmAWYCaQhpCXgAdwF3AnkIeAl3CocBhwKGA4kHiAiKCZ0AmAmRCqwAogq9ALcHsQrJAMUK2gDVCuwA4wr7APQKLAoABQoYABYKKAAmCjcKTwBACgkFQBIWNAVACw00CgcICCUJChQJCQoAAwICJQEAFAEBAAUKCgAKCQgIAgIBBgcKCQMAAQUvDAEMIghAQEAJgAkCCbgBG7VABYAFAgW4ARtACSACQAEiC+rSGCsQ9u0aGf1d/V0aGO3kXRESOTkSOTkAPzwQPBA8PzwROYcFLiuHfcSHLhgrh33EMTAAKysBcV0rKysrKysrKysrKysAXSEBMxMWFzY3EzMBAa7+bL7kJR8YK+y5/m4EJv2EZ29UdgKI+9oAAAEABgAABbcEJgASArFAEA8UASoEKQoCShFbEY4RAxG4//BACR8hNBAcHSc0Cbj/8ECtHyQ0BAYMCRMGGwkZEgUEAAQGCwkLDggSEAATAxQHHAgbCx0OJAAlByoIKw40ADUHOgg7DkQDRwZAB00ISwtDD0cRShJbD1ISawdkCGcSeQZ6B3QIuQa6D7YS9Qb7CSgLESgAKA0nDigPJxIvFDgANxJ3CIYImAOXDKcBqAKoC6YMtQC2BroOyATWBtkJ6AToD+cS9Ab6CRwSAwUFAgYHBwUJCgoICwwMChAREQ+4/0uzBQASILj/SUBmCg8OIMMRBwggBxESEisFBxQFBQcOCgwMJQ0OFA0NDggRDw8rCggUCgoIAAUCAiUBABQBAQAAAgEHEgQIDxEMDg0KEQoEAxINDAwICAcHAgIBBhIPDw4OAAoU9hANAWANcA2ADQMNuAGnQAogTwoBbwp/CgIKuAJVQAlPEQFvEX8RAhG4AlVACxAFAWAFcAWABQMFuAGntQH2E/ZmGCtOEPQZTfRdXRj9XXH9XXEaGf1dXRjmAD88EDwQPD88EDwQPBA8EDwSFzkBERI5ORI5ORE5ORI5OYdNLiuHfcSHLhgrh33Ehy4YK4d9xIcuGCuHfcQrKyuHDhDEBw4QPAcOEDyHDhDEhw4QxEuwH1NYtA0gDCACvP/gAAH/4AAO/9C0ADAPIBK4/+ABODg4ODg4ODhZS7A0U1i5AAj/0LEHMAE4OFlLsCFTS7AzUVpYuQAI/+CxByABODhZS7ASU0uwHlFaWLkADv/Qtg8gDSAMIAi4/9CyBzASuP/gsgA4Arr/4AAB/+ABODg4ODg4ODg4OFlLsBJTS7AXUVpYuQAR/+CzCiAEIAA4ODhZMTABQ1xYuQAO/9S2EjkALBI5ALj/1LETOSsrK1ldcXIrKysAcV0BXSEBMxMXNjcTMxMXNxMzASMDJwMBS/67uqk/BDOpuZ81Pbav/rS7qSnXBCb9m+QRygJu/ZjLzQJm+9oCfLX8zwABAA8AAAPxBCYAEAF3tw8SAQ8iGTkGuP/eQLYZOVoPlgSWCJkOmg/ABcAGwAfLDwkPQBY5GgMTCRUNGhA1AToLgQGOCwgvElcEWQdZC1gOlwGYCpgLtwK4DMgLyg7MENoD1QnRDdsQ5QoSEgYGAwcICQkBBgYJBQQDAwsPDxAODQ0BDw8NEAsBAAkCDQsDDBAKBg8CDwoQxgDGCQIQJQAJFAAACQMCDcYNAQ0lDAMUDAwDCgkJAwMCBhANDQwMAApPEgESSQ1+DCIKD2EGCX5ACrgBG7dABlAGgAYDBrgCQ0AOIAN+AiJPAAEASRF8xBgrEPZd9O0aGf1d/RoY7RDlEPTt5l0APzwQPBA8PzwQPBA8hwUuK12HfcSHLhgrXX0QxAAREjk5Dw+HCMSHDhDECMSHDhDExAjEBw4QPDwIPDEwAUNcWLQOGB05C7j/3kALHTkMIhc5AyIXOQu4/96yITkQuP/AQAoVOQEiITkJQBw5KysrKysrKytZXXEAK10rKwFdMwEBMxcWFzY3NzMBASMDJwEPAYT+meGjLhwsJbPX/pEBi93aOv7pAigB/vlHMEIz+/4M/c4BSln+XQAAAQAh/lED7gQmABoBh7MPHAEPuP/eQKQcOSgUVg+vCgNADUAPAg8gKDA0ECAoMDQHDAkSFg0YEicLJwwnDTYMNg01DpkRCygSKBNIFlkSWRNZFWkSaRNpFXkGdg15EXoUehWFDYoRjBKME4kUmAqoC7wQuxG6FOoK5xT1Df0Q+RT/HB4SDw8MEBESEgoAAxkUExMlEgoUEhIKDwwPEQwlCwoUCwsKExISDAwLBgMcGQ8AHBAcAi8cvxwCHLgCP7UPE0ASQBS4AlRACz8SQBICXxK/EgISuAFCtg8BIgBFGwq4AlRAEg8gC0BAIAwwDE8MA1AM/wwCDLgBQrMvDwEPuAI/tBsgfGYYKxoZEP1x9F1xGhjtGhkQ7RgQ9OQZEORdce0aGBDtGRDkXXEAGD/tPzwQPBA8hwUuKwh9EMSHBS4YKw59EMQAERI5hw4QPDwIxEuwDlNLsBhRWli7AAz/6AAL/+gBODhZMTABQ1xYuQAU/962NzkKIjc5Drj/6LUVOREiFTkrKysrWV1xKysAcV0rAV0TJxYzMjY3Njc2NwEzExYXNjcTMwEGBwYGIyJ/FDssPEgXESYFC/5twt0rIh8r47T+bEEkMHxWNP5nqRAoJBtrDx0EKP2ZdYF8dgJr+8ivQllTAAABACgAAAPUBCYADgGIQA0SuALJCAISATISFzQIuP/OQAkSFzQBPh4hNAi4/8JASh4hNCkCKAkvEDkBOQpJAUYCRghJCU8QXAFUAlQIWglQEGwBYwJjCGoJewF0CHsJiwGFCIkJ+QH0AhsZCCYBKQgrCTkIpQjXAQcQuP/AtxAVNAIsEjkJuP/UQCcSOQECOgkKAggKCiUBAhQBAQIBDQ4IBgJhBSsHBgYKYQ0ADSsOCgK4AQ+0CAgHBQa4AltALAAHIg2gDgEADkAOYA6ADvAOBQ50AAp+AQGvAAFPAG8A/wADABkPEHQhfMQYKytO9F1xPE0Q7RD9XXE85BD0PBA8EP0AP+08EOU/PP3lETkREjmHBS4rh33EEA7EKzEwASsrK3FdACsrKytDXFi1KQEmCAIBuP/OQAkSFzQIMhIXNAG4/8K3HiE0CD4eITQAKysrKwFxWQFdQ1xYuQAI/96yDzkJuP/esg85Cbj/6LcbOQkIFhs9Cbj/8LIXOQm4//hAChY5AhQWOQIaFjkrKysrKysrK1kzNQEGIyE1IRUBBzYzIRUoAqRzWP5PA2T9wW95agHrkgMIBpJ3/V57CZsAAQA5/lECfAXTACoAe0BNRw8BKBIPETQCEg8RNAcYCw40JRILDjQWJxYAKSoqDB8lIBMNJQwRDQwMHyCuGxIRJQUZOhslJgM6Ba4qJzomrioqXwCPAAIAaStwaBgrEPZdPBD05BD05BD95BD9PBD0PDwQPAA/7T/tEjkv7TkBEjkxMCsrKysBcRM+AhI3PgI3NjMzFSMiBhUQBwYGBxYWFRQXFhYzMxUjIicuAgImJic5TWEgAgUJMUg4JlY4H2hECxJXXW5jBAhBXx84YixAVBkCIGFNAmQCT4oBTjVUZj0QCp1Lgv76RWt0LS6918MlRDadEBdnngFoilACAAABALz+UQFZBdMAAwAyuQADAX5AGAEABaECAp8DrwMCA3YAACABAQGhBKGYGCtOEPRdPE0Q/V08EO4AP03tMTATETMRvJ3+UQeC+H4AAQAv/lECcgXTACoAgbkAA//usw8RNCm4/+6zDxE0Jrj/6LMLDjQIuP/uQDkLDjQXKBcAKQEBDSAlIREOJQ0TISAgDg2uEho6HCUnFDoSJQYnOiiuAQQ6Bq4AUAGAAQIBaSybjRgrEPRdPPTkEPTkEP3kEP3kEPQ8PBA8AD/tP+0SOS/tOQEROTEwKysrKwEVDgICBw4CBwYjIzUzMjY1NDc2NjcmJjU0JyYmIyM1MzIXHgISFhYCck1hIAIFCTFIOCZWOB9oRAkQYFhzXgUHQV8fOGIsQFQZAiBhAmSjAlCJ/rI1VWU9EAudS4P6Q2+FJTe118MmQzWdEBZonv6YiVAAAQBXAi0EVgN1ABYAVUAUCwsEFhsLFBYEDSArDDsMAgwBIAC4/+BADgsONAAQIAnUDADUFCADuAJYQAwMDQwaGAEAGRdxjBgrThD0PBD2PAAvTfT95BD07RAr7RBd7TEwAF0TNTYzMhYXFhYzMjY3FQYGIyImJiMiBldqrDyEekVFI0GLNkCDUjxt7U9AcQItzXgjNB0STjvUPDYcajcA/////QAABVkG4QImACQAAAEHAI4BPgEeACFAEAMCFEASFDQUDGRIKwIDAha6AiEAKQFkhQArASsrNTUA/////QAABVkG9AImACQAAAEHANsBPwEHABlAEAMC/xIBEgwAaCsCAwIeAikAKwErcTU1AP//AGb+WwV2BdMCJgAmAAABBwDcAZQAAAAiQBkBADAgME8wAy8wfzCPMAMwBABIKwEBHwgpACsBK11xNf//AKIAAAToBywCJgAoAAABBwCNAVQBagAoQBABAA8B0A/wDwIvD5APAg8CuP4DtEgrAQEPuQIhACkAKwErXV1xNf//AJwAAAUfBvsCJgAxAAABBwDXAacBUQA3QBoB4Bv/GwJvG68bAk8bAeAb/xsCXxuQGwIbBLj+erRIKwEBGboCIQApAWSFACsBK11dcXFxNQD//wBj/+cF3QbhAiYAMgAAAQcAjgHHAR4AHEAOAwKvIAEgA2RIKwIDAiO5AiEAKQArAStdNTX//wCh/+cFIgbhAiYAOAAAAQcAjgGJAR4AIkATAgFfGQEZQBIUNBkRbkgrAQICHLkCIQApACsBKytxNTX//wBK/+gEHAXCAiYARAAAAQcAjQDxAAAAG0AOAi87PzsCOxwASCsCATu5AiIAKQArAStxNQD//wBK/+gEHAXCAiYARAAAAQcAQwD6AAAAG0AOAp857zkCORwKSCsCATm5AiIAKQArAStdNQD//wBK/+gEHAXCAiYARAAAAQcA1gDeAAAANkAmAp86ASA6MDpwOoA6BJA6oDqwOuA68DoFOkAuMjQAOj0cHEECAT65AiIAKQArASsrXXFyNf//AEr/6AQcBcMCJgBEAAABBwCOAN4AAAAgQBIDAnA8gDzwPAM8HGJIKwIDAj+5AiIAKQArAStdNTX//wBK/+gEHAWqAiYARAAAAQcA1wDeAAAAKkASAklAGRo0SUALDTR/SY9JAkkcuP/QtEgrAgFHuQIiACkAKwErXSsrNf//AEr/6AQcBe0CJgBEAAABBwDbAN0AAAAeQBADAg9BH0ECQRwAaCsCAwJBuQIiACkAKwErcTU1//8AUP5vA+0EPgImAEYAAAEHANwAwwAUAC1AFwEfHC8cAhAcAe8c/xwCEBwwHH8cAxwLuP+YtkgrAQEcCCkAKwErXV1xcjUA//8AS//oBB4FwgImAEgAAAEHAI0A8wAAABtADgLgIfAhAiEKAEgrAgEhuQIiACkAKwErXTUA//8AS//oBB4FwgImAEgAAAEHAEMA3QAAACaxAh+4/8BAEQsNNA8fAXAfAR8KAEgrAgEfuQIiACkAKwErXXErNf//AEv/6AQeBcICJgBIAAABBwDWAN8AAAAnQBgCIEA7NSBALTI0DyCfIAIAICMKCkECASS5AiIAKQArAStyKys1AP//AEv/6AQeBcMCJgBIAAABBwCOAN8AAAAcQA4DAq8iASIKZEgrAgMCJbkCIgApACsBK101Nf//AL0AAAIuBcICJgDVAAABBgCN3wAAK7EBB7j/wLMXGTQHuP/AQA4iJTQvBwEHAVpIKwEBB7kCIgApACsBK10rKzUA//8AIwAAAZsFwgImANUAAAEGAEPKAAAoQBABBUAXGTQFQCIlNCAFAQUCuP+mtEgrAQEFuQIiACkAKwErXSsrNf///+8AAAJoBcICJgDVAAABBgDW1gAAFkAKAQAGCQECQQEBCrkCIgApACsBKzX//wAJAAACOgXDAiYA1QAAAQYAjswAABhACwIBCAIASCsBAgILuQIiACkAKwErNTX//wCHAAAD5gWqAiYAUQAAAQcA1wD/AAAAJLEBKLj/wLciJDRPKAEoErj/4rRIKwEBJrkCIgApACsBK10rNf//AET/6AQnBcICJgBSAAABBwCNAPQAAAAbQA4C4B3wHQIdBABIKwIBHbkCIgApACsBK101AP//AET/6AQnBcICJgBSAAABBwBDAN4AAAAmsQIbuP/AQBELDTQPGwFwGwEbBABIKwIBG7kCIgApACsBK11xKzX//wBE/+gEJwXCAiYAUgAAAQcA1gDgAAAAIEASAhxALjI0nxwBABwfAAdBAgEguQIiACkAKwErcis1//8ARP/oBCcFwwImAFIAAAEHAI4A4AAAABhACwMCHgRuSCsCAwIhuQIiACkAKwErNTX//wBE/+gEJwWqAiYAUgAAAQcA1wDgAAAAMEAXAi8rPysCfyv/KwJPK48rAi8rPysCKwS4/+y0SCsCASm5AiIAKQArAStdXV1xNf//AIP/6APgBcICJgBYAAABBwCNAOcAAAAhQBMBHEAOEDQfHE8cAhwRPEgrAQEcuQIiACkAKwErcSs1AP//AIP/6APgBcICJgBYAAABBwBDAQcAAAAVQAoBARoRAEgnAQEauQIiACkAKwErAP//AIP/6APgBcICJgBYAAABBwDWANwAAAAZQAwBjxkBGREjSCsBAR+5AiIAKQArAStdNQD//wCD/+gD4AXDAiYAWAAAAQcAjgDcAAAAHUAPAgFwGQEAGR8REUEBAgIguQIiACkAKwErXTU1AAABAEn+pgQeBZgACwBeQDMCAQkKCgEgBAsAAwQIBwcEbgYFAAgJBgcHCgoJbgsgAAUEBAEBAG4DQAKQAgICPgxwjBgrEPRdPPQ8EDwQPBD95DwQPBA8EDwAPzz0PBA8EDwvPBD9PBA8EDwxMAERITUhETMRIRUhEQHY/nEBj7QBkv5u/qYEvKABlv5qoPtEAAACAIADqAKrBdMACwAXADu5AA8CjbUACQEJgxW4Ao2yAwESuAKNtQ8GAQaDDLgCjUAJIAABAKwYnXkYKxD2Xe39Xe0AP+39Xe0xMBM0NjMyFhUUBiMiJjcUFjMyNjU0JiMiBoCjcnSio3Nyo21jRkVjY0VGYwS+c6Kic3OjonRGY2NGRmNjAAIAa/5nBAoFugAgACoBZECQFRsUHAI2AV0EWBBoD2gYaCF4D3McdR2JKakh5gHoD+gb+CD5IfgjEUgZSh1JIGgZaB1oKgZKCUsgaQ9rIHkPpgClEakpqSrmDgpFHmYFZR4DHQgPDxAYISoqKRkZDgAAIAEBAwwMChsbHBoaDSohHxsYDwwBAAknHgcGDwwBKgcDHx4AAyEGGxgjGRoNGRoNuAJeQBcOGRQODhkNDg4SDRknGgcGDgoNGhkWB7gCqkAmBgYMGBkAITMjHBYHGAcMCwMcCgsODgYkBxosJyQfEj8SAhIZK+a6ATAAGAEchStOEPRdTe1OEPZN7QA/P+0/Pz/95D8REjkv5BESORESOQEREjkSOTkROQiHLisIh33EABESORESFzkREjk5EjkBERI5Ehc5hxAIPAjECDwIPIcQCDwFPDwIPDEwGEN5QBIkJhMVJSUUJiQVJx0AJhMjHQEAKwErKyuBgQBxXQFxXQByAQMWMzI2NxcGBiMiJwMnEyYCNTQ2NjMyFxMXAxYWFwcmJyYjIgYGFRQWFwLo3iEcaJcRsyH3qDE2dnBzc5J16XkkQHFucGNqFa8asCASUo9HQDsDfv0CCY6AFLnUDv51IAGONwEBwbL/gAgBgyD+fSuRbRtwaQNbv36EtiwAAAEAG//kBDoF0wA5AO5ASm03diuGKwMWIQEUBzoYSRgDKSgnJAQiKjkAAwMFOAIDAyQkJR4mAQAAJycmJh4uMidfMW8xAjH+QDUBNSkuAQpAHSI0CkASFDQKuAGVsy8bARu4ArhAChQQHhGrDh4UCx+4Alq2HgsyXjE4ELgBj0AsIBEwEQIRGjsBAqUiXiAFAQVNOF6/Ks8q7yoDKnIfJiUnHj6vHwEfGTqpjRgrThD0XRlN5Bj0PBD0Xf30Xe30PE4Q9l1N5PTtAD/tP+397RD0Xe0rKz/tcf1d5BESOS88EDwQPBD9PBA8EDwBERIXORESFzkxMAFdcQBdASEVIRYVFAYHNjMyFxYzMjcXBgYjIicmJicmIyIGByc2NjU0JyM1MyYmNTQ3NjMyFhcHJiYjIgYVFAGMATv+5BNTX09BU2isPUp2OlxlMiorG80eLy9Io0NFYIYRxJohEpp8sLXrG7MPlWhvkwMplCwsV8JlFhkpOKUnGAgFPwYIMiutNcWOPT+UcGcx0HVdx7QbeIqPZW8AAgBR/lEEFQXTADgASgDUQGoEMBQwJDlmL2U6dQZ0EXodeS15Pns/e0B7QXNJc0qEBoQRix2JLYs+iz+LQItBg0iDSYNKlCkbKQ0pEyQpIjEESEMSDARFQj85JQoFIjovJwM8B0hDQj86OS8nJRIMCgwcATYcBIYBHCcbuAETQC0fHBgBACcBCxw8Gz4rB14yPjwpTysBKxpMIl4VPg8BPAA4RSlPDwEPGUtxpxgrThD0XU3t9O0Q9O1OEPZdTe307RD07QA/5D/t/eQQ9O0REhc5ARESFzkSFzkRFzkxMAFdAF0XNxYWMzI2NTQnJiUuAjU0NjcmJjU0NjMyFhcHJiYjIgYVFBcWFxYXFhYVFAcGBxYWFRQGBiMiJgE2NjU0JyYnJicGBhUUFxYXFo+1HHppZnMkPv7qlHVKeGlHOsilu9IVuxVpWVxxJDj6nTdHQ0kqcFBPZLxtv+ACM0pJNDWsiUNRRS4uoYZGGoJpaEYzK0uqW2eMTGCcH0RzQYC8sqkTemBjPDQsRJhgLTyAS3FQLi89jFBYnVO/AeQmZTA5Pz9qVDYuXDg/OTlfTwAAAQBtAdACaAPLAAsAH7kAAwFTQA4JBswgADAAAgB1DFenGCsQ9l3tAC/tMTATNDYzMhYVFAYjIiZtlWhplZVpaJUCzmmUlGlplZUAAAEAAf5pBFMFugAPAFpADU8KTwtPDk8PBAsMAQ+6AeoAAQFpQCEHCQ4jCAcADQwjCgtyEQH5AA8QDwIPDxAIGhEEGRCzehgrThDkEOYSOS9dTe0Q9Dz9PAA/PP08EO3tETk5MTABcQABESYmNTQ2MyEVIxEjESMRAZW72fHoAnmQqt/+aQQVCt+tweWt+VwGpPlcAAABAJn/5wSjBdMANgFNQIULLRstPzhGCkYRRRNPOFwuaiRqLnA4C0kIJiUlKBEQJScnJRASFBAlJyclEBIUEBASFxgZGiEgHx4dCRsiKSgnJiUkIw4PEBESExQOFSssLS4MCwoJCAgqAgMzMQYwBi8ALSwnJSYcGx0SERALCjM0Dx8yHAUBHxwYCzYACi8cCKQVKiQNuAItQBUVG8mfHAEcHDUiJAAVYBVwFYAVBBW4Aj1ADAA1NgE2JSAAAQCSN7gBNrE3GCsQ9F3tPBA8EP1d7RE5L13tEPTtEPTtAD88P+0/7REXOQEREhc5ERIXORIXORESFzmHDi4rDn0QxC4YKw59EMQQPIcOEMQxMBhDeUA0MDQWIQIHAyYgFyIbAR4ZHBsAHRwaGzMENR0AMQYvGwEhFh8bAB0aHxsANAIyHQEwBzIbAQArKysrASsrEDwQPCsrK4GBgQFdMxE0NjYzMhYVFA4CFRQXFhcWFxYVFAYjIiYnNxYWMzI2NTQnJicmJyY1ND4CNTQmIyIGFRGZWdCCrcYkXBgWFWSILUDNoH6+L5syZDdMbCAVW6YnKBtnIG1ba4gD57fFcK1yM2yhPxggHyBBWTZNaYvGh2pIXUhoRjgoGj5yOTk8J1CwWCI+X4Tc/CEAAAQAA//uBegF0wAPAB8ANgBAAYNANpoSlBaUGpoe2xLUFtQa2x4Ivyy5LQImJyktKTArMacDqAupDbYrxivWKwplCDAxL2QvdC8CL7j/0LMmLTQvuAJiQB8uLBQuLiwtLCsqKQUuMDEyAzYwMSgzLSwrKggvKSk1uAJitTc3ICFAP7gCYkAcIQAijyICIpQALi8vNk8gAQ8gbyB/IO8gBCCUGLgCYrIICxC4AmKyAAM7uAJisiZUL7oCYgAuARa2BEA3NTYhNr0CYgAgAUoADAAcAmKzBBpCFLgCYrUMGUGzehgrThD0Te1OEPZN7RD07TwQPDw8EPTt9O0AP+0/7fRdcTw8EDwQ9F08/TwREjkv/TkvEhc5AREXORIXOYcuKytxDn0QxAE5MTAYQ3lASjw+ASUkJT0mEiUOJgIlHiYWJgolBiYaJT4jOywBEQ8UIQAfARwhARcJFCEAGQccIQE8JT8sARMNECEBHQMQIQEVCxghABsFGCEAACsrKysrASsrKysrKysrKysrKysrK4GBAV1xAF0BMgQSFRQCBCMiJAI1NBIkFyIEAhUUEgQzMiQSNTQCJAERITIWFhUUBgcWFxYXFyMnJicmIyMRETMyNjU0JiYjIwL2vgFqysf+mcTE/pnIywFqvp/+06qnASyjowEspqn+0v4XARePgEx/aSsaMUdjoEhVNCRFTZ9yUyhHYJUF08P+lcXD/pjHxwFow8UBa8N9o/7RpKP+1aenASujpAEvo/vpAywtcD9ZhAgSGTBxn4CXJhz+pwHJRDgkORwAAwAD/+4F6AXTAA8AHwA6ATNAIJQSlBabGpsepgOoC6gNuTDUEtQW2xrbHtUz1jYOcAgguAKrsyGHJC+4AquzMC4BLrsCYAArADgCYkAQTyQBDyRvJH8k7yQEJJQIMrgCYkALACuPK/8rAyuUABi4AmKyCAsQuAJisgADL7gCYrIu0yC4AmKzIYgENb0CYgAnAmQADAAcAmKzBBo8FLgCYrUMGTuzehgrThD0Te1OEPZN7RD07RD07fTtAD/tP+0Q9F3tEPRdce0Q/V3kEP3kMTBDeUBUMzclKgEfKSYSJQ4mAiUeJhYmCiUGJholMyo1HwA3JTUfABEPFCEAHwEcIQEXCRQhABkHHCEBNCgyHwE2JjgfABMNECEBHQMQIQEVCxghABsFGCEAKysrKysrASsrKysrKysrKysrKysrK4GBgQFdATIEEhUUAgQjIiQCNTQSJBciBAIVFBIEMzIkEjU0AiQTFwYGIyImNTQ2NjMyFhcHJiYjIgYVFBYzMjYC9r4BasrH/pnExP6ZyMsBar6f/tOqpwEso6MBLKap/tJUex7Di7DcZLl3hbAgdx51T3OVjXBaiAXTw/6VxcP+mMfHAWjDxQFrw32j/tGko/7Vp6cBK6OkAS+j/RAkfZXkyoTDY39tHUpPpJmZnWgAAAIA4QKLBvcFugAHABQAnEAfXQsBORE1EkoRRhIECxESDw4HAAQSERALBBQTBAIUCLgBabIJAgW4AmJACg0MCgkEAA0OEA66AmIADwE7shGsEroBOwAUAmKyCAgJuAIFsgWlB7gCYkAOAKUCIAMwA2ADAwMZFdm5AS4AGCsQ9l089P309jwQ/fb29u08EDwAPzw8PDz9PBD9PBESORIXORc5ARESOTEwAV0AXQERITUhFSERIREzExMzESMRAyMDEQHp/vgCmv72AWXIzsfEfNJ72wKLArZ5ef1KAy/9dQKL/NECrP1UArb9SgAAAQDeBKoCTwXCAAMAZbkAAf/IsxcZNAK4/8CzFxk0A7j/wEAmFxk0fwGAAt8BA28DfwB/AwNvAG8BAk8BUAICAAADEAMCA4cBBAG4AmCyAoYDuAJTtQAZBNmnGCtOEPRN/fT9AD/9XTwxMAFdXV1dKysrExMzA96F7NwEqgEY/ugAAAIAPQT2Am4FwwADAAcASEAjAAMCBzwFBQIABgcFBAIDAQAHPASfAzxfAG8AjwCQAKAABQC4AiSzCHCNGCtOEPRdTf32/RA8EDwQPBA8AD88EO0ROTkxMBM1MxUzNTMVPby5vAT2zc3NzQABAE7/5AQWBcIAEwDRQIK3DbcQAgAEEwEMAwQTAgsGBRICCwcIDwILCgkOAgsNCQ4BDBAIDwEMEQUSAQwLDAEBPwILFAICCw8QEAcHCCUJDg0NCgowCQGfCc8JAgm/BBIREQYGBSUEEwAAAwMEDAsAAQIKC+gMAegCDAwEAgIOBA4PDxITVRUJCAgFBD4UcYwYKxD0PDwQPBD2PDwQPBESOS8ROS8Q7RDtAD88PzwvPBA8EDwQ/TwQPBA8EP1dcTwQPBA8EP08EDwQPIcFLiuHfcQPDw8PDw8PDzEwAV0BAyMTITUhEyE1IRMzAyEVIQMhFQHvwojD/uYBZHr+IgInxIbDARr+nHkB3QGh/kMBvagBFagBvP5EqP7rqAAAAgABAAAHkAW6AA8AEwCgQCIOEBMPDhAMABMPDyAAARQAAAETDwEDDAANDh4QEBERAAEQuAKnQDIIBgUeB38IjwgCCAgAAxMeAgECCgkeDAsPDAAIBAkgDAwSEhQVB1QDSgoaFQAZFGBbGCsZThDkGBD2TfTkERI5LzwQ/TwAPzw8PBD9PD88/TwSOS9dPP08EOYREjkvPBD9PAEREhc5hy4rfRDEARESOTkHPDwxMDMBIRUhESEVIREhFSERIQMBIREjAQLBBLP9HwKt/VMC/PxB/crIARoB5JEFuq3+Paz+D60Bp/5ZAlMCugADAFP/xQXtBfAAGwAmADABRkCwKQAqASUPAxACIgAiAzgPOhtFJkknRShSCVwhUiZULmkOgwCAAYACgwOEG4Ucuxv8APomFgscByYLJwM6BD0wSgFKBEkdRSBIJ0stWwBbA1kcVSBZIVsnUilaLWsBaQJ6MIsChSWLJ6IJ9AEYBAMLExQEGxMEBCALLRQgGy0EEgMnKA8QEAIAHCYSEREBKigmJQQdHCcwBCIvKigmJQQdHCcwBCwfAhAQMBEBFBERAR+4AruyGQMsuAK7sgsJAbgBC0ALAi0vJgcaIDIBMhG6AQsAEAExQAsiJiAVARUZMWNcGCtOEPRdTe397U4QXfZN7fTtAD/tP/2HDi4rfRDEABESFzkXOQEREhc5FzkHEA48PDw8BxAOPDw8PDEwAUNcWLkAKP/ethQ5HCIUOSi4/961EjkcIhI5KysrK1ldXV1xAF1xATcXBxYXFhUUAgQjIicmJwcnNyYmNTQSJDMyFgcmJiMiABEUFxYXAQEWFxYzMgARNATiqGOwVh4otv63uYpwVnOoY7BiQrQBRceGyQRejV/b/uIWEDMDPP0ZTUFVY9oBHAU0vFTGgGB+nOH+oLQnHlW8VMWV05TiAWG2R99KNv7X/tl0WkNiAtz8wD8ZIQE0ARbQAAADAJoBhAUeBBQAGAAmADEAzkBCJBklGiUmOyg7MUwoTDFjGmMmdRp1JoQahCYNRAgZBy0nIBQPCyMAHQQnGQ8ABCAtJxkPAAQwKioXOAQwKhE4HSoLuAG8QBEjKgQGICoHGjMtKhQZMp55GCtOEPRN7U4Q9k3tAD/t/e307RD07REXOQEREhc5ABESORESOQEREjkREjkxMEN5QDIrLx4iEhYFCgkmKxYtHwAiBSAfAS8SLR8AHgogHwEsFSofASEGIx8BLhMwHwAfCB0fAAArKysrASsrKysrgYGBgQFdATY3NjMyFhUUBgYjIicmJwYjIiY1NDYzMhMWFxYzMjY1NCYjIgcGByYmIyIGFRQWMzICsWk7UFlpt0SQTFlQO2mImWWRkWWZzVdILjlMZ2lOMSs69lBgLDpNUDllAyyEKjqYqXaHUjkrhKuZcnGa/vaHMiFwZmpwHCeUZDlSSEdVAAACAE4AAAQWBM0ACwAPAE5ALgkCCAMAbgL5A24PBQEFDw75DA0FDQoMCG4GCvkFAQ0Bbj8CkAKgAgMCVRBxjBgrEPZd5DwQPP089DwAPy8QPP08EF30/eQQPBA8MTABESE1IREzESEVIREBITUhAd3+cQGPqgGP/nEBj/w4A8gBBAGTpwGP/nGn/m3+/KgAAgBNAGoEGAU8AAYACgB2QBaOA4AFAgoJCAcEAAYFAwMMAggHJQkKvQKsAAUCWgAGAAMCWrICQAa6AVAAAgFQQBoAqwGrIAQCXwAICToEPAEwAKAAAgAZC3GMGCtOEPRdPE3t9DwQ7QAZLxrt7e3tGBoQ7RDt9jz9PAEREhc5Ehc5MTAAXRM1ARUBARUHITUhTQPL/P4DAgL8OAPIAvqoAZq0/sX+wbPxpwACAE0AagQYBTwABgAKAIpAGIACjwQCCgkIBwQABAIBAwsFCgkHCCVACbgCrLcBAKsGqwMgArsCWgBAAAEBULIDIAS7AloAQAAFAVBACSADBwo6AzwGBbgBIkALHwAwAAIAGgxxjBgrThD2XU3tPO30PAAZLxr9GBrtGRoQ/Rga7RkaEO3tGBD2Gv08EDwBERIXORIXOTEwAF0BATUBATUBAyE1IQQY/DUDAfz/A8sC/DgDyAL6/mGzAT8BO7T+ZvzIpwAAAf/9AAAEbQW6ABoA2kA3JAgkCysPKxJ5CHYSiQiFEgh0DYQNAhIRERUICQkFDAsKCg0ODxAQDQ0aDQAJGegWFgQVBQHoBLgCr7cF+QgIHxIBErgBYEAgEREQEAoKCQAAChgXFxQUEzgRAgMDBgYHOAkQPCARARG4AQBACxUVGiMACjwvCQEJuAEAsgUFALgBGbMbs3oYKxD2PBD0Xe0Q/TwQ9F3tEPQ8EDwQPBD0PBA8EDwAPz88EDwQPBD0XTwQ/f7tEDwQPBDtERI5ARE5hw59EMTEhw4QxMSHBRDEhxDEMTAAXQFdIREhNSE1ITUhATMBFhc2NwEzASEVIRUhFSERAd3+YQGf/mEBVf5qyAEiMRsXOwES1v5rAVX+ZAGc/mQBRYuPlALH/fxYQjVuAfv9OZSPi/67AAABAKD+aQP6BCYAGQCYQGUoBCgFKBY4BDgKOQtIBEgKSAtZBFsJagRqCXsEewqKBIoKERIWGQwDCwISFhkPBgIKFBwHCw0OAjMZJQEAGmAbgBsCsBvAGwLQG+AbAhsPDCUNDeAOAcAO0A4CAA4gDrAOAw4ZGrgBNrFQGCtOEPRdXV08TRD9PE4QXV1d9jxN/eQAPz/tPz88OTkROTkBERI5OTEwAF0BESM1BgcGIyInJicRIxEzERQWFjMyNjY1EQP6oTQzRl1TQDA6srI0dUxQfjQEJvvaflAeKSEZSv3+Bb3+PvWRVFiL9AHFAAIAOP/nA80F0wAbACcAbEBPdwJ2FXgehhUECQwJJQsmRAxkGnMeeSV7JooChB6KJYkmDFUaaxgCOiVFGgIvKTYaAhwVDhnoBAMj6A4JHOgV6Ao9KQDoAYYgJhFpKJtoGCsQ9u307RD27e0AP+0/7RI5OTEwAV1dXV0AXQEnNjYzMhYXFhYVEAIEIyImNTQ3NiUuAiMiBgEOAhUUFjMyNzYSAaqHRsReTHsfLy2t/tqOiauZxQHEBChgQT52AX3045NmREtVdZMEcjydiE8zT9iM/uD+P9a2peKhzwiosF9j/iwObPV+U2w3TAE9AAABAHr+UQVqBdMACwCNQCAECgAIBAMEBQMgCwoUCwsKBAUEAwUgCQoUCQkKAgMeC7gCprYBAAIGBR4JuAKmQA4HCA4BAi0GB1EgDQENBLoCOgAKAnFACwkACy0JIAgBCFYMuAEzsVwYKxD2XTz0PBD07RBd9Dz0PAA/POb9PD885v08hwUuKwh9EMSHBS4YKwh9EMQAERI5OTEwEyEVIQEBIRUhNQEBiwTV/CQCX/13BBD7EAJs/aUF06T8+fzKobsDFAMEAAABAKH+UQXzBdMABwA+QCICAwMGBw4EBQEFIwACBLoBAQO6AmwJBboAAAa6B3YInnkYKxD07TwQ7RD27TwQ7QA/7TwQPD88PBA8MTATIREjESERI6EFUr/8LsEF0/h+BtT5LAAAAQAAAAAEZAQnAAsAQUAeBgcCCysBAAYIBQoGBSUDBJIBGg0HCCUKCZIAGQz2uQKWABgrThD0TfQ8/TxOEPZN9Dz9PAA/PD88/Tw5OTEwESEVIxEjESERIxEjBGSivf5WvJ8EJ578dwOJ/HcDiQABAAD/JAIwB0cALAClQBQzCCQlACINDwkXLCoWFAQMJBApBroBmAAMAemyHSkmuAKiQCAkJCMKLhcXGgmuFycZJxOrKScBJwB2IhkgLS7MIZt6GCsrL070TfT09P309PRORWVE5gA/PE0Q9P30/e0REhc5ARESOTkREjk5MTBDeUAkJygaHBESAgUbJgMCBAICBiccKTIBEQUTMgAoGiYyABICEDIBACsrASsrKiuBgYGBExM2NzY2MzIWFRQGIyInJiMiBhUUFxIVFAMCBwYjIiY1NDYzMhYzMjY1NCcCyREJKRtfLTJLNScjKRcRERcJJRAIUjZQNEIzJyg6FBEWCSUDtAITmWVBQUMoLzkkFB0jKmf+Zv9D/ff+2WhDRDUtNkAcISpOATsAAgAvAuoCzgXTACMAMQCLQA4AHgsmJCoLJhItISECLboCfAACAR+2GRUnPxYBFroCuAASAnxANRkBDn8kHSToMPkeOCL5ICEBIWmQMwGAM8AzAmAzcDMCQDNQMwIzFeg/FgEWJyopBWkym4wYKxD27fRd7RBdXV1d9l3t9O3tPBDmAD/99F3kEP3tEDw8ERI5OQEREjk5ETkxMAEGIyImNTQ2Njc2Nzc2Ny4CIyIGByc2NjMyFxYVFQcUFyMmAwYHBgcGFRQWMzI2NzYCJHqGcYQgPzIjQJNIGAEaRztPTgmJDJiNpERDASmUFBE1i1obHEQ+SWwSBwNVa3tgMEg4EQsKFg4GRjAjQTwiWXc9PnfwPYYyKAEsDhYOGRomKTpOORQAAAIALQLkAr0F0wALABcAQ7MvGQESvQJ8AAYABgEfAAwCfEAaAAYUAAEVKQNp7xkBcBmAGQIZDykJaRibaBgrEPbtEF1d9u0APz8Q7e0Q7TEwAV0BMhYVFAYjIiY1NDYXIgYVFBYzMjY1NCYBdZG3uI+RuLeRUWNlT1BkZQXTyLCvyMSvtMiFcoF+dXWDenQAAAEAfwAABcMF3wAqAPlAJTkPORpFA0oPShpGJVkBVhFpAWYRfAF6GnQlihmEJg87AgEuCCC4AkhAKQkDKxY7FgL5FgEWOhM6EisnOycCiSf5JwInOio6AAASHhQVKSgoFQgSuAI6shUWALgCOrcnKC8WTxYCFrgCeEASExwmDUoUEBMBE2osIChAKAIouAJ4QBMpJCYFSmApAQApICkCKawrnacYKxD2XXH07RDtXRD2XTz27RDkXRA87RA87QA/PBA8EDz9PBDk5V1xEOTlXXE/7TEwQ3lAIB0jBgwiJQcmCyUeJiEIJJYAHwoclgEjBiCWAR0MIJYBKysBKysrKysrgYEBcV0lJicmAjU0EiQzIBcWERQCBwYHJRUhNTY3PgI1NAImIyIHBhEUEhcVITUB8Gw5V16fAS/EAVC0g2xXNWABbP3BUCxIZDNjyY+/aZK2oP2/oEM/YAEDncQBSbD+uv76qP79XTo/BqaxKCY9qL5nigEXknip/vHZ/slItKgAAwBE/+gGygQ+ADUAPABKAOpAYD05PUhMKU85WileOXoFByhAMCI0JUwFQw5CJURIWwRWDlYPUyVpB2cOZQ9kI3cQdCaHEBISHAA9ED0CPT0XRjYckC6gLgIuLjI6HJUXHCA6HCcnIAdGHAkyHAAAEAACALgCfUAYAwMJCzYlEjM9JS43QN8uAR8uPy6PLgMuuAHEQA8rNSQAMxArMCtAK4ArBCu4AeRAFwwbJRwiQyTfDAEfDD8MTwwDDBlLNDcYK04Q9F1xTe307RD9XU307RDkXXHtEP3k7QA/PBDtXe0Q7T88EO0Q7e0REjkvXe0REjkvXe0xMABdAV0BBgYjIiYnBgYjIiY1NDY2NzY3NjU0JiMiBgYHJz4CMzIXFhc2NjMyFhIVFAchHgIzMjY3ASEmJiMiBgcGBwYHBhUUFjMyNjc2BsYy8LJ/v01o1Xusv2OxwpZmAWmDV3g5E68cacSDp2Y7KECic6LUYgL9AQJDk1hnjxv9vwJIDph6fqG5T/NtLDtqZXOrGg8BRae2YGZmYLF/VpdOGRQdGRB+ZSpNVRV1iU4yHUBGSZ3+/n0TKpCCV3ZrARyekqD0IicRIi9MR2FyVTQAAwCB/7EEZARnABkAIQArAkpA/xgDFQUiACwNJRlGAFQZZBkIFRkBKCEBEAQUBRwQHBEcEhUiRgNJDUwQTBFFHUsmWhpmFWQeZiKKGoAizxoTEhorLAMrGi8iOwAFDAALAgQPGgIEuhHsBPsB9g8EPRE4JlQdugIE3y3pAOoC6wMEWAlcEV4miiIEhQCKDYoQihsE6QHqGvoA+gIEyiHaANoD6yIEygDKAvkEA58RmiGqA6shBHwbeSF5IqsjBGohaSN6DXoQBGwRZhptJnUABBcAOyJFAkoPBCYZLRosIjkaBKUAxBrZAuYPBE0MQxlJHkYnBHoidiOUEJUiBGQJbRVtHmgiiyIFEgMiIw0ODgIAGkAxIRAPAQEPD30OAhQODgIhIxoiBCgfAi0DAQADKAcPLBANDgMfFAAcFw0lCw8OFAIHAbgCW7QcHBcHDrgCW0ASJRwLCygkzwffB+8H8AcEBxotuP/AsxIVNC24/8BAIw0QNJAtoC3wLQMALSAtgC3gLQQtHyQfFN8U7xQDHxQBFBksugEzApEAGCtOEPRdcU3tThBdcSsr9l1N7QA/7eQ/7eQRORESORESORESOQEREhc5EjkREhc5EjkREhc5hw4uK30QxAcOPDw8PAcQDjw8PDwxMAFDXFi5AAD/3rIMOSG4/962HDkiIhI5I7j/3kAKGTkaIiU5GkAeOSsrKwArKytZXV1dXXFxAV1dXV1dXV1dXV1dXXFxQ1xYQB4pGSIaIyID6Q8BIwMkGiAiA+YA5QLkA+ME5CLvLQYBXXEAXXFZAV1xAHFdATcXBxYXFhUQBwYjIicHJzcmJyY1EAAzMhYHJiMiBhUUFwEBFjMyNjU0JyYDl2Ngaz8XH6mJwZ96aV5sOxkoASbGUooXW2SFtDQCD/4/TmKLtQwIA+eARopWRmSF/tSNcVCHR41ERG2KAS0BDSqxRszKlmUB6v25P8zMTDkqAAIAnv5TBE8EJgADACIAiEA3jB8BfB+MHgJrH3weAmAQax4CXR5dHwJLHlIQAkwSSx0COhJEEAIfHQsMBAQUJxUVBBEpGA8iBLgCr0AhAgIBPAMGFF4VbCAkASQAPAIiBF4iiA5eIBsBG3YjnpgYKxD0Xe307RA87RBd9u0AP/08EPY8P+0SOS/kERc5MTABXV1dXV1dXV0BFSM1ExYVFAcGBw4CFRQWMzI2NxcGBiMiJjU0Njc+AjcC3c3BAR4WMSS7N6R3cpsYuBn3ytj/WYNZNhkCBCbNzf6XIhFuTTo7K6RiOmqekJgVy9zqpmGgdE9KYGwAAAIA6P5sAccEJgADAAkAT7EcBLgCr0AjATwDBwMGC8sAOgQ4BQk4AzoIPAUFBjwgBwEHywoLgSHZ9RgrK/Zd/TwQ/eTkEOTk5gA/LxD95jEwS1NYswQFCQgBEDwQPFkBFSM1ExMRIxETAb/PoDffNAQmzc3+k/z4/rsBRQMIAAEAcgGoBDoEBgAFAC+2AgMBAAMlBLgBHUAOAAIBJQUAGgcDGQZXWhgrThDkEPY8Tf08AC/97RA8EDwxMAEjESE1IQQ6qvziA8gBqAG2qAAAAQBU/7IEZAdNAAcAh0A7BAYUBgIABxAHAgMGBwMEBz8CAxQCAgMHAAMEAwIETAUGFAUFBgQFAAcHTAIBFAICAQcGAwQFBwIAAwG4AWZAEQYGBgYIARoJBRkICXghcXoYKytO5BDmEjkvGAA/TeQBFzkSOTkIhy4rBX0QxAiHLhgrCH0QxAiHLhgrCId9xDEwAF0BXQEzAQEHJyUBBBpK/sj+EMYiAS0BlQdN+GUD/VtAl/zJAAABAC7+UQQ9BdQAIQC0QF5nBgEBCQkABwoLCwYZHB0YAAEiHBsZCgkHBggSEyMaACABCAMTCRIQFRgdHSUGCxQGBgsdGAsGBBoGHQgDCxgJFRwQARscBwgrGhkKCQYDHCAPIBoBGhojIAgBCBkiuAGfsdIYK04Q5F0Q5l0AP03tPzw8PP08PDw/7RE5ORESOTkBERc5hw4uK30QxAAREjkSORESORI5ARESOTkSFzkROTkHPDwHEA48PAcQDjwxMAFdEzcWMzI2NxMjNzM3Njc2NjMyFwcmIyIGBwczByMDBgYjIi4jZTM2OhCxyRjJGBYXH3NdUIcjZzM4OBMTzBnMvxp6cF7+a5sWOGAEEoyFeC0+RiaZGDdpZ4z7vJRxAAACADMBeAQyBCoAFgAtARVAYyQLIw4rFiQiIiUrLS8vBwACDw4AGQ0iDyURAhwOGg8RGRohHiIcJRomIQIhGTUCNgU1GTYcRQJGBUUZRhxWAlYZZQJlGXYFdhyGBYYcHxsKGxIbKRQtBAsKCxILKQQtBCQgI7gCoLcnIHAggCACILgCs7IQIAm4AqC3DSAMOgMYIBe4AqC3KyBwGoAaAhq4ArOzFAEgALgCoLQUIAMGJ7sBPgAkACABPrMkIyMQuwE+AA0ACQE+tA0MaS8ruwE+ABcAGgE+sxcYGBS7AT4AAAADAT63AQEAaS6bjRgrEPY8EO0Q5jwQPO0Q5hD2POYQ7TwQPOYQ7QA//fTtEPZd/fTtEPTt9P32Xe307TEwAF1dXQFdEzU2MzIWFxYWMzI2NxUGBiMiJiYjIgYDNTYzMhYXFhYzMjY3FQYGIyImJiMiBjNqrDyDe0VFI0GLNkCDUjxs7k9AcVRqrDyDe0VFI0GLNkCDUjxs7k9AcQLizXgiNR4RTjvUPDYbazf+Rc14IjUdEk471Dw2HGo3AAACABoAAATKBWsAAgAFAHJAQQIBAgABTAUEFAUFBAIAAgEAugMEFAMDBAUBAgMABAYDBUwBAQAKBAQFAwsAAQAaB+oB+AECeQEBARkGB/EhqWgYKytO5HFdEOZdGRESOS8AGD88TRD9PD8BEjk5EjmHLisIfRDEhwUuGCsIfRDEMTAhIQkDBMr7UAJ0AVD+cf5IBWv65wPH/DkAAgCGAEgD3wPYAAUACwCEQAsJAw0JGQMdCQQKBLgBy0ALCAII+QcHC/kKdQa4/8CzGRw0Brj/wEAbDxE0Bq4JQBkcNAlADhE0CZ8AAugBOgX5BHUAuP/AsxkcNAC4/8BAEg8RNACuAAMQAyADAwOsDK95GCsQ9l39Kyv2/fTtEPYrK/0rK/b9PBD9AC88/TwxMAFdAQEjAQEzEwEjAQEzAVQBA5L+wQE/lH4BCJj+xwE5mAIQ/jgByAHI/jj+OAHIAcgAAAIAjABIA+UD2AAFAAsAgEALBgMCCRYDEgkEAQe4ActAGAULCgj5BwcL+Qp1BkAZHDQGQA8RNAauCbj/wLMZHDQJuP/AQCMOETQJnwAC+QE6BegEdQBAGRw0AEAPETQArg8DHwMCA6wNnbkBhgAYKxD2Xf0rK/b99O0Q9isr/Ssr9v08EO0QAC889jwxMAFdAQEzAQEjAwEzAQEjAxf++5QBP/7Bk3/++JcBOv7GlwIQAcj+OP44AcgByP44/jgAAAMA7wAABxIAzQADAAcACwA8QBIGBQIBBAo8CAgHBwQEAwoKPAm4ARmyBzwFuAEZtwM8AMsM2fUYKxD2/fb99v0APzwQPBA8EO0XMjEwMzUzFSE1MxUhNTMV780B3s0B3c7Nzc3Nzc3////9AAAFWQcsAiYAJAAAAQcAQwFnAWoAIbECELj/wEALCxE0EAwASCsCARC6AiEAKQFkhQArASsrNQD////9AAAFWQb7AiYAJAAAAQcA1wFWAVEALEAZAg8gAf8gASBAGB00IEALEDQgAVJIKwIBHroCIQApAWSFACsBKysrcXI1//8AY//nBd0G+wImADIAAAEHANcBywFRACJACwIvLT8tAl8tAS0DuP/itEgrAgEruQIhACkAKwErXV01AAIAgf/nB78F0wAXACQA8ECgFBkUHhsgGyQEBBkEHgsgCyQEbCBuJAJlGmMeAjAZMB4CIBkgHgJ5BwEFDQHnCwG3BsYLAo8DgA4CawQBcA4BdQtzDQJ+A3wEAgMWFw4SFBMeFhYVFQIPGB4MAxESHhAPAgAXHgECCB8eBQkiLQ8CHhIXMBdQFwIgF2AXAhclJhVUEUowAEAAAlAAYAACIABwAAIAGn8mASYcJiAJAQkZJbgBM7GZGCtOEPRdTe1OEF32XV1dTfTkERI5XV0vPP085AA/7T88/Tw/PP08P+0REjkvPBD9PBE5ERI5MTAAXV1dXV1dXXEBXV1dXV1dXSUVITUGISAnJhEQACEgFzUhFSERIRUhEQEiBgIVEBIzMhIREAIHv/yih/73/tObiAEcATQBCIgDP/12Alf9qf26ZcBi56Ch5eetrdTt6M0BQwFCAbLfxq3+QKz+DASJgv732/7R/uIBHQFJATIBGwAAAwBS/+gHQwQ+ACAALgA1AOtAbSYVVwsCRBZEI0smSypELUsyRDRXBVcIUyNfJl8qUy1nCGgOYCRsJmwqYy0TXDJUNAJSFlsZAjIWMyM7JjoqMy0+MjI0BwANKAAVFCUNNTMvHJAUoBQCFBQDKxwKMxwQEAoHJRwDFxwAGxAbAhu4An1AFB4eAwsvQChAFBpAGzPfFAE/FAEUuAHEtTBA0BMBE7j/wLMLETQTuAJ/QBAhJN8GAT8GTwYCBhk2NDcYK04Q9F1xTe39K3Ht5F1x9O0Q/f0APzwQ7V3tEO0/PBDtEO0SOS9d7RE5ORESOTkBETk5MTABXV1dXQBdJQYGIyIAETQSNjMyFhc2NjMyAAMhFhYzMjY3FwYGIyImARQXFjMyNjU0JiMiBgYFISYmIyIGA9JMxnrh/u1175KKzTNAyXzcARAC/PADs4ZjjyC0K+uzhtT8+0dck4G4tYRXkk0DLQJLDJ92eKevY2QBHgEAqQELhHNYXW7+0v7TpsFvbxqls2kBxLphftTHxs1iwBGXnKQAAAH//AHKBG8CWwADAB5ADwE1AAIaBSAAAQAZBLN6GCtOEORdEOYAL03tMTADNSEVBARzAcqRkQAAAQAAAcoIAAJbAAMAGkANATUAAgUgAAEABLN6GCsQPF0QPAAv7TEwETUhFQgAAcqRkQACAFMD8wJaBdMACwAXANhAXJ8ZrxkC7wfvEwLfB98TAs8HzxMCvwe/EwKvB68TAp8HnxMCjwePEwJ+B34TAvsI+xQCbAhsFAJaCFoUAgwIDBQCFBMIBxcMDwsAAw/5DgP5Ag4NAgEMPA0APA0BuAFQQC8Tbwd/B48HAwcBEzgUPA4NDDwPDw5AFxo0DnUBBzgIPAIBADwDA48CAQIZGHGnGCtOEPRdPE0Q/TwQ/eQQ9is8EP08EP3kAD9dPP087RDtEDwQPBDtEO0BERI5ERI5ABDJEMkxMABycXFxAXFxcXFxcXFxAV0BFSM1NDc2NxcGBgchFSM1NDc2NxcGBgcBFMEgKlssNzQDAZTBICpbLDc0AwTE0aWGPFApRhdbV9GlhjxQKUYXW1cAAgBHA+kCTgXJAAsAFwDbQE6fGa8ZAvAI8BQCAQgBFALgB+ATAtAH0BMCwAfAEwKwB7ATAqIHohMCkgeSEwKCB4ITAnAHcBMCZQhlFAJTCFMUAhQTCAcXDwwLAwAUqxO4AVBADA0P+Q4ODDwNAQirB7gBUEAwAQP5AgIAPAEBDg88DBM4FCcNFz4MDA1AFxo0DXUCAgM8AAc4CCcAIAEBAWoYcacYKxD2XTz05BD9PBD2KzwQ5BD05BD9PAA/7TwQ7RD97T/tPBDtEP3tARESORESOQAQyRDJMTABcXFxcXFxcXFxcQBycQFdEzUzFRQHBgcnNjY3MzUzFRQHBgcnNjY3V8EfK1ssNjUD2MEfK1ssNjUDBPjRpYY7USlHFl9T0aWGO1EpRxZfUwAAAQCAA/MBUQXTAAsAfkA2ewiMCAINCAH9BwHeB+8HAr0HzwcCmweuBwJaB2wHAggHCwAD+QICAQsAPAEIOG8BfwGPAQMBuAFQQBUHAAEABzgIJwA8AwMgAgECGQydeRgrThD0XTxNEP305BA8AD/tXQHkABD9PBA8EO0BETkAEMkxMAFxcXFxcQBycQEVIzU0NzY3FwYGBwFBwSAqWyw3NAMExNGlhjxQKUYXW1cAAQBsA+kBPQXJAAsAdEAm0wfjBwKxB8MHAvIIAZMIoQgCcwiCCAJVCGUIAgIIAQgLAwAIqwe4AVBAHgED+QICAQsAPAEAAgM8AAc4CCcAACABAQEZDJ15GCtOEPRdPE0Q9OQQ/TwAP/08EDwQ7RD97QEREjkAyTEwAHJxcXFxAXFxEzUzFRQHBgcnNjY3fMEfK1ssNjUDBPjRpYY7USlHFl9TAAADAE4BPwQWBGcAAwAHAAsAbLUIPAAJAQm4AqlACUAFAQX5AAYBBrgCqUAzADywAQEwAZABAsAB4AECUAFwAQIBB24CPABuBgRuCzwJBgluQAVQBZAFoAUEBXEMcYwYK04Q9F1N5DwQ/eQQ9P3kAC9dXXFx/fZx/XH2ce0xMAE1MxUBITUhATUzFQHLzQF+/DgDyP21zQOazc3+5aj+GM3NAAACAC8AAAPHBY4ABQAJAJdAXQkGCQgGhQABFAAGBwABBgcGCQeFBAUUBAcIBAUJCAkGCIUCARQCCAcCAQgHCAkHhQQDFAQHBgQDBQADAgcJBggIAQQIBgQHCQEGAwAFAAIDCA8BAQFpCwRpCp55GCsQ5hDmXQA/PD88Ehc5ARESFzmHCC4rCH0QxIcILhgrCH0QxIcILhgrCH0QxIcILhgrCH0QxDEwCQIjAQEXCQICJQGi/l5v/nkBhzn+rAFUAWcFjv03/TsCxQLJYf2Y/ZkCZ///ACH+UQPuBcMCJgBcAAABBwCOALYAAAApsgIBH7j/wEATKzA0Dx8fH/AfAx8PYkgrAQICIrkCIgApACsBK3ErNTUA//8ABgAABUYG4QImADwAAAEHAI4BUAEeABtACwIBEQsASCsBAgIUugIhACkBZIUAKwErNTUAAAH+Of/HAyMF0wADADlADAEAAD8DAhQDAwIAA7gBfUAKAgEAAhoFARkEzrkBrAAYKxlOEOQQ5gAYPzxN7TmHBS4rfRDEMTAFATMB/jkETZ37szkGDPn0AAAB/+T/5wRTBdMALwC+s2YCARK4/+CzDRE0BLj/4LMJETQRuP/gswkRNC24/8xAFg4cNC0rLi4AJhcgDhw0FxkWFh4UBya4AlO0CI8lASW4AlOyHw8euAJTQC4OHx8UAB4rAxQeGQkNEAkGBA4dICQnBAsmHyIeDw4OCwgHBwstLi4XMSUeCyYiL+3UPBDWPBEzETkvMxI5LzMREjk5ERc5Ehc5AD/tP+0ROS88/TwQ9l08/TwREjkvEjkrABESORgvEjkrMTABKysrXQEiBwYHBgchByEGFRQXIQchFhcWMzI3FQYjIAMmJyM3MyY1NDcjNzMSJTYzMhcHJgMWqHJENzgKAqob/WEBAQKEHP2tKqBzhrtpfZf+PJ8gF5kcaQMBgxx0PgEFocK6fyh6BS1RMFhbUoYVE00PhuVgRWLOOgF4TGyGKjEUFYYBRo5YUbplAAEAXABIAiwD2AAFAEy5AAD/7rIWOQC4/+5AChc5BwAXAKcAAwS4ActAFgIB+QJ1AAXVBHUAPCADMAOQAwMDaga4AUuxWhgrEPZd/fbtEPbtAC/tMTABXSsrAQEjAQEzASMBCZX+xQE7lQIP/jkBxwHJAAEAXABIAiED2AAFADS1BwMXAwICuAHLQBcEBfkEAfkCdQR1ADw/A58DAgNqB3GyGCsQ9l395vbtEO0AL+0xMAFdAQEzAQEjAWX+95UBMP7QlQISAcb+QP4wAAMAFwAAA3UF0wAVABkAHQCwQFYWCAsNGQoIGX4YAA0cCAETAisDHBISEREEBAMGGhUKFxYWGxsaQB0YGRkcHJ8dvx3/HQMdGh+QCrAKAgooEhITuxEUFBVAAAUEBAEBAJICAgMZHnxQGCtOEPQ8TRD0PBA8EDwQ/TwQPPQ8EORdThD2cTwQPBA8TRD9PBA8EDwAPzw/PBA8EDwQPBD9PD/tP+0SORESOTEwQ3lADg4PBgcOBxAbAA8GDRsBKwErgYEzESM1MzU0NjMyFwcmIyIGFRUzFSMRATUzFQMRMxG3oKCIk2NUHDUsXUTOzgFWtLS0A5uLZ56oF5gJSnhFi/xlBOvPz/sVBCb72gACABcAAANzBdMAFQAZALFAVhYICw0DCggYGBcAExQUAQECKwMSEREEBAMGDRwIARkWFgAVChcWQBkZnxi/GP8YAxgaG5AKsAoCCigSEhO7FBARERQUFUAABQQEAQEAkgICAxkafFAYK04Q9DxNEPQ8EDwQPBD9PBA8EDwQ9DwQ5F1OEPZxPE0Q/TwAPzw8EDw/7T88EDwQPBD9PBA8EDw/PBESORESOTEwQ3lADg4PBgcOBxAbAA8GDRsBKwErgYEzESM1MzU0NjMyFwcmIyIGFRUzFSMRIREzEbegoIiTY1QcNSxdRM7OAVS0A5uLZ56oF5gJSnhFi/xlBbr6RgAAAQBJ/qYEIgWmABMAmEBRDQ4OBQUGIAcHDAsLCIgKCQAQDw8EBAMgAQICERISAYgTAAwNDRARbhMKCwsODg8PEhITIAAJCAgFBQQEAQEAbgIHBgYCAkADkAMCAz4UcIwYKxD0XTwQPBA8EPQ8EDwQPBA8EDwQ/TwQPBA8EDwQPBD0PDwQPAAvPPQ8EDw8EDz9PBA8EDw/PPQ8EDw8EP08EDwQPDEwAREhNSERITUhETMRIRUhESEVIREB2/5uAZL+bgGStAGT/m0Bk/5t/qYBcqEC1aEBd/6Jof0rof6OAAABALkCawGGAzgAAwAaQA4BPAACPCAAAQCgBKGYGCsQ9F39AC/tMTATNTMVuc0Ca83NAAEAbP7xAT0A0QALAG5AKPMIAZEIoAgCcgiECAIDCAHSBwG0B8MHAlQHZAcCCAsDAAirBwP5Age4AVBAGAIBCwE8AAgDgQAHOAgnASAAAQAZDJ15GCtOEPRdPE305BDtAD/tPBA87RDtEO0BERI5AMkxMAFxcXEAcnFxcTM1MxUUBwYHJzY2N3zBHytbLDY1A9GlhjtRKUcWX1MAAAIAR/7xAk4A0QALABcA1kBOnxmvGQIACAAUAuIH4hMC0AfQEwLAB8ATArAHsBMCoAegEwKRB5ETAoIHghMCcwdzEwLwCPAUAmQIZBQCVAhUFAIUEwgHFw8MCwMAFKsTuAFQQAsND/kODg08DAgHB7gBUEAsAQP5AgIBPAAIDg88DBM4FCcNDEAXGjQMdQICAzwABzgIJwGPAAEAGRhxpxgrThD0XTxN9OQQ/TwQ9is89OQQ/TwAP/08EO0Q/Tw//TwQ7RD97QEREjkREjkAEMkQyTEwAHFxcQFxcXFxcXFxcQByAV0zNTMVFAcGByc2NjczNTMVFAcGByc2NjdXwR8rWyw2NQPYwR8rWyw2NQPRpYY7USlHFl9T0aWGO1EpRxZfUwAHACX/ygfbBdMAAwAPAB4AKgA5AEUAVAF+QAuYAZcDArMIAQIDA7gCmkAPAAEUAAABAgEyKwMAFxATvAKfAA0BHwAbAp9ACwcCAToHAQMAAChRuAKfsj09Nr0CnwAiAR8AKABJAp+yQ0MuuAKftCgLVmlNvAKaAEABtgBGApqyOmoyvAKaACUBtgArApqyH2wXvAKaAAoBtgAQApqzBGlVVrgB7bMhm2gYKyv27f3t9u397fbt/e3mAD/tPBDtEP3tPBDtEDwQPD/0PBDt/e0BERI5ORESOTmHLiuHfcQxMBhDeUCMBVRTJU8mSyU4JTQmMCUdJRkmFSVSPEYfAFA+TR8BSERGHwBKQk0fATchKx8ANSMyHwEtKSsfAC8nMh8BHAYQHwAaCBcfARIOEB8AFAwXHwFUO1EfAU4/UR8BR0VJHwBMQUkfADkgNh8BMyQ2HwEsKi4fADEmLh8AHgUbHwEYCRsfAREPEx8AFgsTHwAAKysrKysrKysrKysrASsrKysrKysrKysrKysrKysrKysrK4EBXQUBMwEBNDYzMhYVFAYjIiY3FBYzMjc2NTQnJiMiBwYBNDYzMhYVFAYjIiY3FBYzMjc2NTQnJiMiBwYFNDYzMhYVFAYjIiY3FBYzMjc2NTQnJiMiBwYBQAJZg/2o/mGdgYCgjJKAoJRPQTsgKywiPD4hLQJCnYCAoYySgKCUT0E7ICstIjs+IS0CDp2BgKCLk4CglE9BOyArLCI8PiEtNgYJ+fcEgce1tsLEx7rFmGotPJuYPy8uP/xyx7W2wsTGucWXay09mpk+Ly4+lMe1tsLExrnFl2stPZqZPi8uPv////0AAAVZBywCJgAkAAABBwDWAUABagAhtQIRQA4RNLj/zrcRFAwMQQIBFboCIQApAWSFACsBKys1AP//AKIAAAToBywCJgAoAAABBwDWAWsBagAqQBIBDEAeIDQADK8MAi8MXwwCDAK4/f+0SCsBARK5AiEAKQArAStdcSs1/////QAABVkHLAImACQAAAEHAI0BPwFqACGxAhK4/8BACxIZNBIMAEgrAgEPugIhACkBZIUAKwErKzUA//8AogAABOgG4QImACgAAAEHAI4BbAEeADy3AgEOQBgcNA64/8BAFB0gNA5ADxE0oA7vDgKgDrAOAg4EuAEOtUgrAQICE7kCIQApACsBK11xKysrNTX//wCiAAAE6AcsAiYAKAAAAQcAQwGBAWoAKEAQAZ8Nrw0Cbw1/DQJADQENArj9+7RIKwEBDbkCIQApACsBK11xcTX//wCNAAAB/gcsAiYALAAAAQcAjf+vAWoAK7EBB7j/wLMXGTQHuP/AQA4iJTQvBwEHAVpIKwEBB7kCIQApACsBK10rKzUA////4AAAAlkHLAImACwAAAEHANb/xwFqACFAEwEEQDM0NARAHR80BAFhSCsBAQq5AiEAKQArASsrKzUA//8ABAAAAjUG4QImACwAAAEHAI7/xwEeABhACwIBCAIASCsBAgILuQIhACkAKwErNTX//wA2AAABrgcsAiYALAAAAQcAQ//dAWoAKEAQAQVAFxk0BUAiJTQgBQEFArj/prRIKwEBBbkCIQApACsBK10rKzX//wBj/+cF3QcsAiYAMgAAAQcAjQHHAWoAJLECH7j/wEAQFhk0cB/fHwIfAwBIKwIBH7kCIQApACsBK3ErNf//AGP/5wXdBywCJgAyAAABBwDWAcYBagAWQAoCAB4hAwNBAgEiuQIhACkAKwErNf//AGP/5wXdBywCJgAyAAABBwBDAcMBagAksQIduP/AQBALDDRQHe8dAh0DAEgrAgEduQIhACkAKwErXSs1//8Aof/nBSIHLAImADgAAAEHAI0BiAFqACtAGwEYQAwONE8YAR8YLxgCfxiPGAIYEQBIKwEBGLkCIQApACsBK11xcSs1AP//AKH/5wUiBywCJgA4AAABBwDWAYgBagAVQAoBARURFEgnAQEbuQIhACkAKwErAP//AKH/5wUiBywCJgA4AAABBwBDAYUBagAjQBQBFkAXGTR/FgGfFgEWEQBIKwEBFrkCIQApACsBK11xKzUAAAEAxgAAAXoEJgADACZAFgIBBgAKBaMCAyUBAAAgAAIAowTq0hgrEPZdPP085gA/PzwxMDMRMxHGtAQm+9oAAQAZBKoCkgXCAAYASUAUBQYBAAIQAgIChwBkBAMABTwGPQS4/8BAEQkMNARkAGQDfwE8AhkHqWgYKxlOEPQYTf0Z9hj9/SsZ9hjtAD887f1dPDw8MTABByMTMxMjAVhxztjA4cwFVKoBGP7oAAABAAYEwwKkBaoAFwCXQBGHDgFACBIQBwUECxcAOg8/CLgCuLITPwS4ArRAGQwAGRcXGgx2C4EQTRGdF3YAfxgZ4CGzehgrK/b99uT0/U5FZUTmAD9N5uz8/eQBERIXOTEwQ3lALBQWCQ4BAxUlAiYUAxYyABUWAgEUAxcyAAkOCzIBFQITMgEWARMyAQoNCDIAACsrKwErKxA8EDwrKyuBgYEBXRMmNzYzMhcWMzI2NzMGBiMiJyYjIgcGFwcBOjlZPms7IyAiB4IDbVQ/Z0MfIhUWAQTDaD4+Nh4jNHJyOCQYGC8AAAEAHQTLAo0FXwADACO5AAH/wEAPEhQ0ATUAAhoFABkEqWgYK04Q5BDmAC9N7SsxMBM1IRUdAnAEy5SUAAEALgS1An0FuAANAEuzVQIBC7gCn0AMEAR/BAIEBwgIAAAIuwKfAAcAAAKfQA9AAb0E7CAHGQ4QBAGbQRgrXU4Q9BoZTf39GhjtEO0APzwQPC9d7TEwAV0BMwYGIyImJzMWFjMyNgICew+Zf4CZD3sOU0ZRUwW4fYaFfkRDQQAAAQDlBKoBxAWKAAMAHEAOAgEDADwBAzwAywTZ9RgrEPbtAC/9PBA8MTATNTMV5d8EquDgAAIAogR/AgoF7QALABcANbQJhA9NBrgCtEAUAE0VhAMBBoQSTQNNDIQAbBieeRgrEPb9GfT0GO0AP/0Z9Bj2GfQY7TEwEzQ2MzIWFRQGIyImNxQWMzI2NTQmIyIGomtJSmpqSUtqTD8rKz8+LCs/BTpJamtMTWprTy9AQC0tQD8AAQBr/lsCHAAXABUAQbQLCQw6CbgCtbUOnE8AAQC4AlpADwIBCgw6C6UGdhJNAQKcAbgBPrMWV3kYKxD2/RD07fTkAD88/XH27fQQPDEwFzczBxYWFRQGIyInNxYzMjc2NTQmJtg0hiFVVpCRUj4LQB5eJh0XPpqxawpVNEtzDHUEGhQdEhwUAAIAOgSqAvsFwgADAAcAQUAhBwQAAAMQAwIDhwYBBQIABjwFcg8EAQTcAAI8AXIAGQhwuQGQABgrThD0TfTtEPRd9P0APzw8PE39XTw8PDEwExMzAzMTMwM6eerTy3/nzwSqARj+6AEY/ugAAAEAt/5WAm0AGAAQAFVACdkCAQ4gDRM0Brj/wLMZHDQGuAKfQA4MDwAKCCAJMAkCCVUSA7j/wEAOGRw0A6wPAawAOA+fEaG5AYYAGCsQ9vTtEO0rEPZdPAA/P+0rMTAAKwFdNzMGFRQWMzI3FQYGIyImNTTgfCdSPk1bNHotY3gYWUtEVC53GyJ4ZVYAAQAoBKoCoQXCAAYASEATBQYBDwIfAgIChwBkBAMCPAE9A7j/wEARCQw0A2QAZAR/BjwFGQebehgrGU4Q9BhN/Rn2GP39Kxn2GO0ALzzt/V08PDwxMAE3MwMjAzMBZ27M4cDYzgUYqv7oARgAAQAAAAAEKwW6AA0AekAVAAEIBA0DBA0CBwYCBwUKCQEIBQoHuwEOAAgAAgEOsgELCrgBDkAhDA0IAQEECAgKBAIgCwELVA8HCN0FCgIBCmUEAV0gDQENuAKysw47XBgrEP1d5jztEDwQPPQ8EORdAD8ZEjkvETkvGD88/TwQ7RDtDw8PDzEwEwc1NxEzEQEVAREhFSGRkZHCAUz+tALY/GYCNXunfALd/cgBGaf+5/3SrQAAAQADAAABvwW6AAsAdkBOHw1wDYANwA3QDf8NBgABCAQLAwQLAgcGAgcFCgkBCAUKB8kIAskBCgsKAQEECAgKBAAHCEUFCgIBCkAE3wEBAU4ACyAL0AsDC04MR1AYKxD9XeZdPO0QPBA89DwAPxkSOS8ROS8YPzwQ7RDtDw8PDzEwAV0TBzU3ETMRNxUHESOFgoKzh4ezAj5unm4C3v26c51z/SkA//8AXP/nBOsHJgImADYAAAEHAN8BKAFkABlADAHwMQExFhJIKwEBNLkCIQApACsBK101AP//AD//6AOxBcICJgBWAAABBwDfAJQAAAAZQAwBcDEBMRUSSCsBATW5AiIAKQArAStxNQD//wApAAAEsAcmAiYAPQAAAQcA3wEUAWQAFkAKAQASDwYHQQEBELkCIQApACsBKzX//wAoAAAD1AXCAiYAXQAAAQcA3wC4AAAAGUAKAQAUEQYOQQEBE7oCIgApAWSFACsBKzUAAAIAvP5RAVkF0wADAAcAT70AAgKuAAcBZQAGAX5AIwMACaEAAwIAAQEFBZ8ErwQCBHYGBwcgAgECoQgICdUhoZgYKytOEPRdPBA8Tf1dPBA8EDwQPBDuAD9N/f3mMTABESMRExEjEQFZnZ2dBdP86gMW+5X86QMXAAL//QAABVoFugATACUAlUAtQwgjAzAkAgIAICEeBgUCFRQeEwAIJCQmJxsmAA0BDRonIRQgBQI5AF0mYFsYKxD25Dz9PE4Q9l1N7RESOS8APzz9PD88/TwSOS88/TwxMEN5QDYHHwsMCgwJDAgMBAYdHB4cAgYPDhAOEQ4DBhkaGBoXGgMGHwcbIQEWEhshARwMICEBGg4VIQArKwErKyoqKiqBMxEjNTMRITIXFhcWEhUUAgYHBiMlITI2NzY2NTQuAiMhESEVIZ6hoQH6qlp+WXRzjsaBR4/+sQE5kqQwRU5NfJid/swBlP5sApuEApsVHUxi/s/E4P69kh8RrTYwReinrM58MP4ShAACAEn/5wQhBboAHAAoAQVAgg8ZHxk3AzoeVgNdHAYEABQAKgUkGF0ABTIIAgMDARgYFgYGBxkZBRsbABoDAwMBGxsAGhoEHBsbABgXFQYCBR0jFRIgGBcGAgQAGRsaGQQDAQAHIwUIHRsaBQMEABkgHCASMBICEo8ZBAEAABkHJhwLCx0kCBoqIyQfDwEPGSk0NxgrThD0XU3tThD2Te0AP+0/Pzw8EPZd7RESFzkBERI5Ehc5ABESFzkREjkBERIXOQcQDjwHEAg8CDyHCDyHEAh9xAg8BxAOPDEwGEN5QCQhKAkRDSUhESMdACUMIx0AJwodHQEiECAdASQOJh0AKAkmHQAAKysrASsrKyuBgQFdAF0BMxYXNxcHABEUACMiJyY1EAAzMhYXJiYnBSc3JgE0JiMiBhUUFjMyNgE02Ug11i2sAUD+6tf/j10BAsI6WEIkNjT+7SzvYQHEtYSCqq+DgLMFujYwZmZT/pD+eP3+28J/3QEFARwYI0lRO39nbVr8osDLy9HCxM8A//8ABgAABUYHLAImADwAAAEHAI0BTQFqABhACgEBEAYaSCcBARC6AiEAKQFkhQArASv//wAh/lED7gXCAiYAXAAAAQcAjQDGAAAAH0ARAQAeAZAe4B4CHg8iSCsBAR65AiIAKQArAStdcTUAAAIAngAABP0FugAPABoASEAqEBoUDxAeDtoAGRoeBAPaAQIACBQmEAogCgIKLhwCDyABIAABAF0bO1wYKxD2XTz9PBD2Xe0APz/0PP08EPTtARESOTkxMDMRMxEhMhceAhUUAiEhEREhMjY1NCYnJiMhnsIBZ5JObJJY7v7J/ogBe7yeXEwxhf6JBbr+1g4TZbZtuv79/tYB14x+W4QVDgACAIf+aQQhBboAFAAgAI5APkggVwRYEmYEaBLrIAY3HwEpCBUUABMYDwMHAQAeHAcHGBwPCwAOGyQLGiICAxMUJQEfAD8ATwADABkhRzcYKxD2XTz9PDw8ThD2Te0APz/tP+0/ETkREjkBERI5MTBDeUAcGR0IDgklDSYdCBsdARkOGx0BHAoeHQEaDBgdAAArKwErKysrgYEBXQBdExEzETY3NjMyFhYVFAIGIyInJicRAxQWMzI2NTQmIyIGh7RJN0hciNBqdd96U0c2SBGmdnirp3Rzsf5pB1H9/E0ZIoz/mKT+/IshGkv9+wOkzcTL1cvK1wABAHICfwQ6AycAAwAaQAwCJQAAGgUBGQRXWhgrThDkEPYAL03tMTABITUhBDr8OAPIAn+oAAABAKEBIAQJBIgACwD/ticEASQEAXxLU1hAFx4RCgYLAgkHBgsDCAQDCAAFAQAFAgkFuwJ3AAYAAwJ3swIHAQm7AncACAALAndAGAAGApQqAQEBlAgwAJAAAj8AUAACAAoECEEKApIACQAGApIABQACApIAAwAAApJAFgsJBZQElAOwC8ALAp8LASALAQv8DJ65AYEAGCsQ9l1dXTwZ/Pw8GBDsEOwQ7BDsEDwAL11xPBn8Xfw8GBDsEOwQPBDsEOwPDw8PS1NYsgYqCL7/1gAH/+AAA//gAAv/4EANAQACAwQFBgcICQoLCwEXODg4OAA4OFlLUVhACQIBCgkABAUEBwEXOFlZMTAAXQFdEwEBNwEBFwEBBwEBoQE7/sZ6AToBOXj+yAE6ev7G/sUBmQE7ATp6/sYBOXn+x/7GegE6/sUAAQBrAt0B3AXMAAkAUEAQASISOQMiEjkHCAABBAMJALgBH7MIA+gEuAKjQA8HBwgBCAk1AQDLBAN1Cle5AS8AGCsQ9jz2PP08AD88EPTtEP08ERI5ARESOTEwACsrAREGBzU2NjczEQFLZno+mC9sAt0CKlEgexRqPf0RAAEAGQLdAogFzAAcAG1AGwMEDBgCdRjlF+UY/AMECgUBGhkYAwcNGBkSGroCYQAcAR+2EQ0nPw4BDroCuAAKAmFAFBEBGxw6BykUvwANKQ4nABkdqWgYK04Q9E307RD97fQ8AD/99F3kEP39ETk5ARESFzkxMAFxXQBxEzY3NiQ3NjU0JiMiBgcnNjYzMhYVFAcGBwYHIRUZBik/ASAbJUZEQkEVlx2PhpeNOy2gUyMBggLdOTlW0R4pKzA+L0MQb2l2VVRLOHM9JHkAAAEAIQLLAoYFzAArAHZAESMIEBMjEE0PDxYFAScwAAEAvAK4AAUCYQApAR9ADB0ZJ18abxoCPxoBGroCuAAWAmFAGR0BD6ATKSAnCCkm3wAZKRonASkAGSypaBgrThD0Te307RD97fT99AA//fRdcuQQ/f30XeQREjkv/DkBEjkROTEwEzcWFxYzMjY1NCYjIgcGIzcWNjU0JiMiBgcnNjYzMhYVFAYHFhYVFAYjIiYhkhQgKztHVkhXDBUOCBZRSzw7OD8Xjyl9eJCDR0NZVJ6SjJQDoQ88Fh5ONzI8AgFuATwrJTQsOhdqVGtQN1YTFmVEXYpvAAMAa//HBogF0wADAA0AKgDfQBcvGwEvLDMhPyZEIVQhrCi8KOwoCAIDA7gCmkAhAAEUAAABKCkPEBEDGw4AAwECBCwrCwwEBQgHHBgbB+gIuAKjsgsEDbgBH0AJCww6AgEBG00YvwJhAB8BHwAoAmIADgApAmJACyoqDicAAAMJDicbugJjABwBHUATFSkiOioqKWksBQQMDSkECAfLBLgBRLMrV2gYKxD29jwQ/TwQPBD2PBD07f3t5AA/PBD0PBDtEO39/fQ/PPQ8/TwQ9P0REjkREjkBERI5ERIXORESFzkROYcuK30QxDEwAV0AXRcBMwEDEQYHNTY2NzMRATY3NiQ3NjU0JiMiBgcnNjYzMhYVFAcGBwYHIRXkBE2d+7M2Zno+mC9sAj0GKj4BIBslRUVCQRWXHZCFl407LZ9UIwGCOQYM+fQDFgIqUSB7FGo9/RH9BDg5V9AfKSswPS9CD3BpdlVUSzh0PSN5AAQAa//HBo4F0wADAA0AGAAbAQFAIBYRASABIAIpESsbOhE6G1YAZgCGGwkbG2YbdhsDAQAAuAKaQB0DAhQDAwILDAQAAwECBB0cGxESGA4aERIbBQfoCLgCo7ILBA24AR9AFQwMCwILOgEBFhcXEA8bGRUUFBlkD7gCsLIOExK4AR9ALRgYDgADJw4LGjUTG/kREV8QARDuDjUTFk0gGAEYrB0MDTUFBAgHyyAEAQQZHLsBoQBoABgBDoUrThD0XU32PBA8/TwQ9l3kPO39XTwQ7RDtAD/0PBA8EP08EPT9PBA8EDwQPDwQPD/kPBA8EP08EPT9ORESOTkBERI5EjkREhc5ERI5hy4rfRDEMTABXV0AXRcBMwEDEQYHNTY2NzMRATUhNQEzETMVIxUDEQP8BE6c+7NOZno+mC9sA7r+gQGVemhokOY5Bgz59AMWAipRIHsUaj39Ef0EmnsB2v4XbJoBBgEH/vkABAAh/8cGjgXTAAMALQA4ADsBM7UvPQECAwO4AppAJwABFAAAARIVEQADAQIEPTwlDBUyMzolERIFBAkxOjIwEk0RERgJBbgCqkALEAQgBDAEAwSRCRu4AqpAFx8cLxw/HAN/HAFfHG8cAl8cbxwCHJEYvQJhAB8ACQJhACsBH0ASHzMCAQE1NDQ5Njc3Lzs5ZDAvuAKxsi4zMrgBH0AJODguAwCPLgsRuAIwQB0VO/kxMTDuODo1MzaRMy4pOE49FSkiIgwpMCgBKLgCKEANBBspHCIFKQQZPHxmGCtOEPRN7fTtEP1d7fTtEPbtPOQQ7RD9PBDtEPQAP/Y8EDwQ/TwQ9Dz9PBA8EDwQPBA8Pzz0/e0Q/fRycXFd5BD0XeQREjkv/BESOTkREjkREjkBERI5ERI5ERIXORESOYcuK30QxDEwAV0XATMBATcWFxYzMjY1NCYjBiM3FjY1NCYjIgYHJzY2MzIWFRQGBxYWFRQGIyImATUhNQEzETMVIxUDEQP8BE2d+7P+iJIUICs7R1ZIVDIIFlFLPDs4PxePKX14kINHQ1lUnpKMlAVf/oIBlHtoaJHlOQYM+fQD2g88Fh5ONzI8A24BPCslNCw6F2pUa1A3VhMWZURdim/8p5p7Adr+F2yaAQYBB/75AAABAAAAAAQNBboAEQBltwceBQUECR4LuAIxQC4OHgweAh4AhhARBAIRAA4NpQoKCU0GBgVqEwcICwwPECAEAwARAgF2EZ8SoacYKxD29DwQPDw8/Tw8PDw8EPY8EPQ8EPQ8AD8/EDz07f3t/u0QPBDtMTA3IzUzESEVIREhFSERIRUhFSOoqKgDZf1dAjj9yAE7/sXC9pUEL63+Oq3+8ZX2AP//AG3/5wW5BxcCJgAqAAABBwDZAg4BXwAbQA4BcCqgKgIqDgBoKwEBKrkCIQApACsBK101AP//AEL+UQPqBbgCJgBKAAABBwDZAOQAAAAZQAwCwC8BLxMsaCsCAS+5AiIAKQArAStxNQD//wCxAAABkAb0AiYALAAAAQcA2v/MAWoAFUAKAQEHAglIJwEBB7kCIQApACsBKwD//wBc/mUE6wXTAiYANgAAAQcA3AFTAAoAIEAWAR8zAcAz8DMCkDMBMy0ZSCsBATIIKQArAStdXXE1//8AP/5vA7EEPgImAFYAAAEHANwAnwAUACpADQEQMwHgM/AzArAzATO4/8BADQ8RNDMuPEgrAQEyCikAKwErK11dcjX//wBm/+cFdgcsAiYAJgAAAQcAjQG5AWoALrYBIUAQETQhuP/AQBMTGTRwId8hAi8hASEMAEgrAQEhuQIhACkAKwErXXErKzX//wBQ/+gD7QXCAiYARgAAAQcAjQDKAAAAH0ARAQAeoB4Cfx4BHgsASCsBAR65AiIAKQArAStdcTUA//8AZv/nBXYHJgImACYAAAEHAN8BsAFkABZACgEAIyAID0EBASK5AiEAKQArASs1//8AUP/oA+0FwgImAEYAAAEHAN8AygAAABZACgEAIB0HDkEBAR+5AiIAKQArASs1AAIARv/oBHAFugAZACUA90B2UxxQJI8nAz8nASkNJhgqHjkNNhg2HDolSg1FF0YbSSVaDVoUVxVWGA8MHRkWIwEAQB4rNADUAwgJQB4rNAnUB18GbwYCHwYvBj8GXwafBgUGkQUCXwNvAwIfAy8DPwNfA58DBQORBQQACgsKHRwOCyMcFgcCAbgCa0A4CAMEJQUgMwAZDAslCgdgCAGgCAGwCNAIAgiSBQYJEApACoAKAwp0GiQfEj8STxJgEgQSGSY0UBgrThD0XU3t/V08PDz0XXFyPBD9PDw85BD9PBD9PAA/7T/tPzw/PPRdcTwQ9F1xPP0rPBD9KzwREjkSOTEwAF0Bcl0BITUhNTMVMxUjESM1BiMiJiY1NBI2MzIWFwEUFjMyNjU0JiMiBgMs/qYBWrORkadlxH/VdWrUg2CWL/3TrHV2pah7eKEEw4Rzc4T7PYaejPujnwEDilFB/mbMysHG2szEAAH/4QYeBIoGnwADACVADQIwAwMBMAADGgUAGQS6AYkBjgAYK04Q5BDmAC9N7TwQ7TEwAzUhFR8EqQYegYEAAQHxAn0CvgNKAAMAIUALAgEDADwBAzwAGQS4AU+xQRgrThD0Tf0AL/08EDwxMAE1MxUB8c0Cfc3N/////QAABVkHFwImACQAAAEHANkBUgFfABVACgIBEwwJaCcCARO5AiEAKQArASsA//8ASv/oBBwFuAImAEQAAAEHANkA9QAAABlADALPPAE8HANoKwIBPLkCIgApACsBK101AP////3+YAYMBboCJgAkAAABBwDeA58ACgAWQAwCAQ8EAEgnAgEPCCm4AWSFACsBK///AEr+bwT0BD4CJgBEAAABBwDeAocAGQASQAwCATgnAEgnAgE4CikAKwEr//8AngAABVoHJgImACcAAAEHAN8A8QFkABeyAh4CuP/2tEgrAgEhuQIhACkAKwErNQAAAwBH/+gE7gW6AAoAHAAoALxAMDYnUx9TJ2IfYicFNRg2HwItIToNSQ1DF0UeSShaDWoNCC0NIxgCBgoADCYgGRwWBrgCQ0BDAEABA0ACAgEAGxoAJkgWBxwLCiBIDgsKkQAAAQMCQAExGxscIzMLGRoMGgslEBxAHGAcgBwEHHQdJD8STxICEhkpNLkClgAYK04Q9F1N7f1d/Tw8EDwQ5BA8EP79PBA8TRDkAD/tPzw/7T88PzwQ7RDt7RESORESOQEREjkxMABdXQFdXQE1MxUUBgcnNjY3ATUGIyImJjU0EjYzMhYXETMRARQWMzI2NTQmIyIGBDa4SE4tMzEC/qhlxH/VdWrUg2CWL7P9IKx1dqWoe3ihBQG5uWV9IkQXV1L6/4aejPujnwEDilFBAg76RgISzMrBxtrMxAAAAv/9AAAFWgW6ABMAJQCVQC1DCCMDMCQCAgAgIR4GBQIVFB4TAAgkJCYnGyYADQENGichFCAFAjkAXSZgWxgrEPbkPP08ThD2XU3tERI5LwA/PP08Pzz9PBI5Lzz9PDEwQ3lANgcfCwwKDAkMCAwEBh0cHhwCBg8OEA4RDgMGGRoYGhcaAwYfBxshARYSGyEBHAwgIQEaDhUhACsrASsrKioqKoEzESM1MxEhMhcWFxYSFRQCBgcGIyUhMjY3NjY1NC4CIyERIRUhnqGhAfqqWn5ZdHOOxoFHj/6xATmSpDBFTk18mJ3+zAGU/mwCm4QCmxUdTGL+z8Tg/r2SHxGtNjBF6Kesznww/hKE//8Aov5WBOgFugImACgAAAEHAN4CeAAAABJADAEBFAsASCcBAQwIKQArASv//wBL/lYEHgQ+AiYASAAAAQcA3gE9AAAAJ0ASApAezx7fHgNgHoAeAlAeAR4TuP+6tkgrAgEeCikAKwErXV1dNQD//wCiAAAE6AcmAiYAKAAAAQcA3wEzAWQAKkASAQxAHiA0AAyvDAIvDF8MAgwCuP3/tEgrAQEQuQIhACkAKwErXXErNf//AEv/6AQeBcICJgBIAAABBwDfAOAAAAAVQAoCAR4KAEgnAgEhuQIiACkAKwErAP//AJYAAAQqBywCJgAvAAABBwCNAFIBagAVQAoBAQkCcEgnAQEJuQIhACkAKwErAP//AEIAAAGzBx0CJgBPAAABBwCN/2QBWwArsQEHuP/AsxcZNAe4/8BADiIlNC8HAQcBWkgrAQEHuQIhACkAKwErXSsrNQAAAgCWAAAEKgW6AAoAEABoswYKAAa4AVFALwEDZQIAZQIBAQ0KUQAAAQMCZQEBEg0NDAIPDh4QCwgPGhINDiAMIAsBCxkRO1wYK04Q9F08Tf08ThDmAD88Tf08PzwBERI5L/08EDwQ5AAQPBA87RDtEO0BERI5MTABNTMVFAYHJzY2NwERMxEhFQLIzVBXMjk3Av1owgLSBO3NzXGLJk0ZYVv7EwW6+vOtAAACAIgAAAJUBboACgAOAHpACS8QAQoDAAe3BrgCQ0AOAQNAAgBAAgEAAgMBAAa4AltALAczAEAfAwEDSXAQgBACnxDfEAJPEAEQDQwADgsKDQ4lDAALIAsCC04PR2YYKxD2XTz9PAA/PD88ARBxXV32Xf305BA8EDwAPzztEO0Q/e0BERI5MTABXQE1MxUUBgcnNjY3AREzEQGcuEhOLTMxAv6RtAUBubllfSJEF1dS+v8FuvpG//8AlgAABCoFugImAC8AAAEHAQEA5AAAACmxAQa4/8C0DA40BgS4/qdACkgrAQZADRE0BgS4AdCxSCsAKys1ASsrNQD//wCDAAACpAW6ACYATwAAAQYBAeYAAB1ADgGPBL8EAgQDlUgrAQQDuAJ9sUgrACs1AStdNQD//wCcAAAFHwcsAiYAMQAAAQcAjQFcAWoALUASAW8Nfw0CAA0Bvw3gDfANAw0EuP6VtEgrAQENugIhACkBZIUAKwErXXFxNQD//wCHAAAD5gXCAiYAUQAAAQcAjQDiAAAAJLQBPxoBGrj/wLQSFDQaBbj/2rRIKwEBGrkCIgApACsBKytxNf//AJwAAAUfBywCJgAxAAABBwDfAXcBagAZQAoBAA8MAQVBAQENugIhACkBZIUAKwErNQD//wCHAAAD5gXCAiYAUQAAAQcA3wDiAAAAFkAKAQAcGQELQQEBGrkCIgApACsBKzX//wBj/+cF3QcsAiYAMgAAAQcA3QGfAWoAIkATAwIAICAgAvAgASADVkgrAgMCI7kCIQApACsBK11xNTX//wBE/+gEJwXCAiYAUgAAAQcA3QDhAAAAHEAOAwKPHgEeBCtIKwIDAiG5AiIAKQArAStdNTX//wChAAAFrQcsAiYANQAAAQcAjQEZAWoAJEANAiZADBE0JkATFDQmArj/eLRIKwIBJrkCIQApACsBKysrNf//AIUAAALGBcICJgBVAAABBgCNFAAAJEANAa8V3xUCFUALDTQVBrj/e7RIKwEBFbkCIgApACsBKytdNf//AKEAAAWtByYCJgA1AAABBwDfASIBZAAoQBACPyMB7yP/IwJfI48jAiMCuP9rtEgrAgEmuQIhACkAKwErXV1xNf//ADwAAALGBcICJgBVAAABBgDfFAAAHbcBPxJPEgISBrj/lrRIKwEBFbkCIgApACsBK101AP//AFz/5wTrBywCJgA2AAABBwCNAQ4BagAhQBMBfzSPNAJPNF80AjQWAEgrAQE0uQIhACkAKwErXV01AP//AD//6AOxBcICJgBWAAABBwCNAKwAAAAlQBYBzzTfNAIvNF80Ak80ATQVAEgrAQE0uQIiACkAKwErXV1dNQAAAgAw/b0EugW6AAcAEgCQsw0SCA66ATEADQFJQA0JC2UKEghlCQkACgEKuAK5QBQHElEICAllCi0HBQIeBAMCBwAIFLgCc7UGBSAEAQS4AQG3BiABAi8DAQO4AQG3AQcgASAAAQC4AnOzE7aZGCsQ9l087RD0XTwQ/fRdPBDmAD88Pzz9PAEQ9P08EOQAEPZdPBD9PBDtEP3tARESOTEwIREhNSEVIREDNTMVFAcnNjc2NwIT/h0Eiv4bys2nMjweFAQFDa2t+vP+us3NtElMGzMhQgACACT97AIqBZkAFwAhAK9AFSEhLyMxIQMAAQ0MCh4hGAEDAAkWHrgBSUAMGRtAGhhAGRkAGgEauAK2QDYDIZEYGxoYGUAaGgEHEAkrDwoGFhwDCw8QI0kQIgAinwEBAQ0SJQwB/wcIRQlFAAcgB5AHAwe6AjAAIgE2scQYKxD0XfTkEO08/TwQXeTk5hA8AD/tPzz9PAEREjkv/TwQPBDkABD2XTwQ7RDtEO0REjkSOQEREjkAETMzEMkxMAFdJRcGIyImJjURIzUzETcRMxUjERQWFjMyAzUzFRQGByc2NwIQGkw8YmwshISztbUTKygezLlJTixfB6GfED5logJjjAEHbP6NjP2TTSwa/jW4uEZ7IkUqdAD//wAwAAAEugcmAiYANwAAAQcA3wEPAWQAJEANAQhAJSc0CEANETQIBrj/rbRIKwEBC7kCIQApACsBKysrNQACACP/8gL9BboACgAiAKpAKm8FbAd/B44HBGABYAZgB3ABcARyB4ABgAQIABcYFQYKAAsNGwwOCxQhB7gCLUAkAQe3BgBAAgIBAAczAQqRAEABQAIaJBsUKxoVBiEcDgsaDCIbuAIwQAwYHSUXFEUAEgESGSO4ATaxZhgrThD0XU3kPP089OQ8AD/tPzz9PAFOEPZN7f3kEOQAPzwQ7RDtEOQREjkSOQEREjkREjkAETMzyTEwAV0AXQE1MxUUBgcnNjY3AxcGIyImJjURIzUzETcRMxUjERQWFjMyAkW4SE4tMzECkRpMPGJsLISEs7W1EysoHgUBubllfSJEF1dS+6CfED5logJjjAEHbP6NjP2TTSwa//8Aof/nBSIHggImADgAAAEHANsBigGVABdADAECAh4GAGgnAQICHrkCIQApACsBKwD//wCD/+gD4AXtAiYAWAAAAQcA2wDcAAAAGUAMAgEAGR8REUEBAgIiuQIiACkAKwErNTUA//8Aof/nBSIHLAImADgAAAEHAN0BlwFqACBAEQIBwBkBYBkBGRFVSCsBAgIcuQIhACkAKwErXV01Nf//AIP/6APgBcICJgBYAAABBwDdALQAAAAhsgIBHbj/wEAMEhQ0HRFkSCsBAgIguQIiACkAKwErKzU0AP//ACkAAASwBywCJgA9AAABBwCNAPsBagAoQBABzxDfEAKvEAEQQAsPNBACuP9ZtEgrAQEQuQIhACkAKwErK11dNf//ACgAAAPUBcICJgBdAAABBwCNAKkAAAAetQFPEgESB7j+abRIKwEBEroCIgApAWSFACsBK101//8AKQAABLAG9AImAD0AAAEHANoBMAFqABu1Ac8NAQ0CuP8RtEgrAQENuQIhACkAKwErXTUA//8AKAAAA9QFigImAF0AAAEHANoAqQAAACdADQEfDy8PAu8P/w8CDwS4/6G0SCsBAQ+6AiIAKQFkhQArAStdcTUAAAEApAAABDgFugAFADZAGQIDHgEAAgUIEAEgAQIBGgcDBCAFBQAZBju5AY4AGCtOEPQ8TRD9PE4Q5l0APz88Tf08MTATIRUhESOkA5T9LsIFuq368wAAAwBg/+cF2gXUAAwAGAAcAN1AfmwIbQpsD2oRYxVjFwYQDhASHxQfGGMCYwQGag5jEmQUaxiYApYEBh8VEBdtAWIFYwdqC28MBxACHwQfCBIKEA8fESAeBzoIGx5PGV8ZfxmPGQTvGQEZGQkWHgMDEB4JCRxlExllDRMmIAaABgKAHgEGGh4NJiAAAQAZHWNcGCsQ9l3tEPZdXe0Q5hDmAD/tP+0SOS9xXe0xMEN5QCwBGAslEQgTIQEPCg0hABUEEyEBFwINIQASBxAhAA4MECEAFAUWIQEYARYhASsrKysBKysrKyuBAV1dXQBdXRMQACEgABEQACEiJAI3FAAzMgAREAAjIgATNSEVYAGKATQBNQGH/nb+zd3+s5PIARDk4AEW/ujb1/7g0wJEAsoBbgGc/l3+qv6s/mDdAVuo+/7BATsBFAEYATn+2v6ArKwAAwBV/8sGDQXmABIAGQAgAQJAYCAiOgM6BzUMNRA1FDQYPBs6H0QDRAdJEWAicCKEFYoenyKgIr8i8CIUACI4AwIpFSYXJhwoHjgGaARpFWUXZRxpHnYEeQZ5DXYQiASIFIUXhRyIHhM5AwEgEwgLGhkeC7gBOkBXChMeEnACgAICAqIAAwoJGgkTCgGQCQFACVAJYAlwCYAJBQkgAH8KAQoKDh0mAAVgBQIgBWAFcAWfBaAFvwXwBQcFGiIAIhAiQCIDECIwIkAisCLAIgUiuP/AQA4QEjQWJiAOAQ4ZIWNcGCsQ9l3tK11xEPZdce0SOS9xPP1xcjwQPBA8AD8/9F087RD0/TwQPBA8MTAAcV0BcV0BMxUEABUQAAUVIzUkADU0EiQ3FQYGFRQWFzM2NjU0JiMC0MIBNAFH/p7+58L+3/6mlgES087j+LnCzeje1wXmtRP+vu/+9P7KCtbWCwE/+aMBCJgKqAbWyMrSAwbawrjpAAACAEj/6ARTBD4AFAAgAK5AUAYJBhIQIjcCRwJWAlYEdgl1EoYJCggHAUkXRhlGHUkfWxdUGVQdWx9oCWgLZw95CfccDRgTASUdKh81HTofBG8IYBMCEwgDHgQQBgAGBgobuAKasgoLFbgCmkAnEAcIEwADa0CQHgEfHvAeAh5CBYAArQEBBq0FNyIYQD8NTw0CDTQhEPZd7RD27TwQ7RoQ/XFdGu0RMzMAP+0/7T8/ERIXOV0xMABxcl0BcV0BMwYDEhcjJicGISICERASMzIWFzYlIgYVFBYzMjY1NCYDm7hGO0Y7sysWU/74yPT1yn2eRAf+uIGWjn98ppsEJtz+yf5+kWRe2gEsAQEBCAEhZWcjFNDEv9rXysTIAAIASP/oBCwFugATAB8BE0CBOxIBWApaDFUPaApoDHgfBkUZShtKH1UGWgkFJxUoHzcVOB9FFQXGAwEzFjkYORwzHlscjhOHH5kDqBK4EtYV2hncHNYf5wznFvcM9xYSawZvCmMMYBBjFm8YbxxgHn4TCV8GXwpQDFAQUBZfGFocUB4IBgMVAysRawxqEAUTAgAduAKatQURBxECF7gCmrILCwK4AppAJwAAewOLAwIDAQAwEUARAlsRaxF/EY8RBAURCA5AAAEAAA4BARpACLj/wEAaJCU0MAgBAAgQCCAIAwgxIRRAHw4/DgIOMSAQ9l3tEPZdXSvtMy8RMy9dERI5OV1yERI5XQA/7T/tETM/M+0REjkxMAFxXV1dcgBdXV1xEyEVIRYXFhYVEAAjIgI1EAA3JicTFBYzMjY1NCYjIgauAyH90GTVvpb+6eD1+AEGtl35UrOLeruyh5WlBbqSZpOE4sH+/f7jAUDcAQABDQdB3/zKqty8y7zO6AABAGL/6ANjBD4AJADPQDcfJl8mfQJ9FYkBiwKDCIQPixWJFrIEsg/DBMIPDoAmASYhORo2InUHeRC0BbYhxAXGIQkeDBcWuP/AQA4JDDQWFhQAPwEBAQEDC7gCmkAJcAy/DAIMDBkDuAKasiMHFLgCmkAyGQseBhwMDBccAQAWFwZAIEAaIjQgIBwQAAEAAAAXIBdgF4AXBBeqJhFAHxxPHAIcNCUQ9l3tEPZdMi9xETMvK+0RMxEzERI5LxESOQA/7T/tEjkvce0RMy9dMxEzLyszETkxMABdAXFdAQcmIyIGFRQWMzI3FSYjIgYVFBYzMjcXBiMiJjU0NyY1NDYzMgM9gXtrWFF4dA8jIBCPb3BNjXuBoO67uLCTrrTOA65oXV42Rl0BlwFuRUdhg22qvn61TFOSd70AAAIARP/oBMMEPgAPABsAmkBZNhE2FTkXORtFEUUVSRdJG1MCWAVUCFIRVBVeF2UCagVkCGQRZBVtFxQPAgIKBBYcBwsBHA8GEBwNBxkkUARgBHAEgAQEEAQwBEAEUARgBHAEgASQBLAECQS4Ac9AGwo/AAEPAI8AAgCqHRMkCkAkJTQfCj8KAgoxHBD2XSvtEOZxXRD9XXHtAD/tP+0/7QEREjkRMzEwAV0BFSEWERAAIyIAERAAMzIXByIGFRQWMzI2NTQmBMP+34X+3dDY/ugBI81LX62Dsa2KkaudBCaSfP76/uP+8wEYARMBGwEQGH3My8rM1cKx5QABAC4AAAL6BCYABwBvQB0QCVAJYAlwCYAJnwnQCQdPCQECCgcEHAUGfwcBB7gBD7QBcAQBBLgBD0ArASUQAiACcAKAAtAC4ALwAgdAAqACsAIDAAJwAoAC0ALgAvACBgkAAgFKAi9eXV5ycV3t5F0Q5F0AP/08PzEwAXFdAREjESE1IRUB+rT+6ALMA5T8bAOUkpIAAgBI/mkE6QQ/ABsAJQCrQERAJwEjBSMXKBg4HUgdcwx6F4oJjBe0BfcCC1INZgRnBWINZxuYF6gXxw3KEsoXyhgLHDMGHBMWCxUBHAAiHAsHAAcBALj/wEA1CQ40AAAZHBQGTxUBFSUUQAsNNL8UARQUGR8kQA8BAA8QDyAPMA8EDzEnAyQ/GQEZMSY0NxgrEPZd7RD2XXHtEjkvXSv9cTwQPBE5LyszAD8/7RDtLz88/eQxMABdAV1xAQcGERQWFxE0NjYzMhYWFRQGBgcRIxEiABE0AAE2NjU0JiMiBhUB8yPPo6Iea1yPs3xi3LOyuv68AQMBrX+1hEo1MQQ7nEX+25vzIwKUanNJdPqQePHKJv6CAX4BRgEA7QEl/E0X7sGzpEl8AAAC/+H9ZwSK/usAAwAHAEO2AgE/AwAGALgCn0AYBQcFPwQHBgYDAwIaCQQFBQAAAcUIQ0EYKxD1PBA8EDxOEPY8EDwQPAAvTe08EOY8EDz9PDEwAzUhFQE1IRUfBKn7VwSp/mmCgv7+gYH//wCwAAADTwW6ACYABAAAAQcABAHAAAAADbMCAQ4EuAHAsUgnASsAAAEAUgIHApsErgAUAFpAGjUERARlBGIRdwRwEQYSDRQDAxAUAQInBgwUuAFZQBgGHBAHDSUKghQCPwEUJQEwAAEAGRVxjBgrThD0XTxN7RDtEPTtAD/t9DwQ9DwREjkvARESOTEwAF0TETMVNjYzMhYWFREjETQmIyIGFRFSgilnQFNyMo1BRFFZAgcCmUUpKj9lbf5qAZFYRVxo/pYAAwAz/+YIkwW6ADYAQQBfATVAa1MEUhxmG2UchQ6KV4lZiFuaWpxbCgYcCiMFLxYcGSMVLyMbLCM0GkUZQhpKO0o/UQNVBGQDbBNkL2UwYlB2BHsTeVN7V3pbhQSPDo8TjRaFH4k7gFCMXo1fqQ24DcQNyiPEJScaDFFYIRQkuAK3tUccKE46TbgBE0ATKBQcDAg6BzgeNDQ1Nx4AABE6ELgBE7IMB1+4ArRAQy4rCgUGNQpHHCgLURwhCz08BS5qBWoHJeVdTicXXl09TSTFSjhNakQ6CCUsBwdgYRA4HhE4VV4eGmE3Nbo2NgAZYGG4Ae+zIZtoGCsrTvQ8TRD9PE4Q9k395BDkERI5Lzz95Pb05RD2/eQQ5RDm5hDtAD/tP+0/Pzz95j/95D/tETkv7S/kEO0Q/eQQ/eUREjkREjkxMAFdAF0TITIXFhczERcRITYzMhcWFycmJiMiBhUUFxYEFhYVFAYjIiYnBwYGIyInJjURIwYGBwYjIxEjExEzMjY2NTQmJiMBEQcUFjMyNjcmJicXFhYzMjc2NTQnJiQnJiY1NDczAc7qe14NXLYBQFVcvXZfBLsGaGZmZTk4AT2LSuvEfZ5FARwvEpNBJWYfkHJPw5/CwoSgmlhIfYQDIQEuLAwaDhcSAbYIgWxpTDkjLv6vOFZRIAW6gWOuATYB/sscZlKRAVNXUC43JCRMUYhLhc5KU4MICE4sZgLHdJYhFv2qBQ/98DJ6XFN5PP6I/XEfJiwFBS9MNgFjbz0uPC4gKlsdLnhOTT8AAQBPAJ0HsANsABAAAAEzBgYHIRUhFhcjJiYnNTY2AexMOztNBjv5xWheToG6Y1fCA2x2X2BlbMmQlTAtJZgAAAEAmf5TA2gFOwAQAAATNjY3MxYWFxUmJxEjEQYGB5mRlyUuL5WQyWxlYF92A56FwlZjuoFNXmf6PgXCTDw7AAABAE8AnQewA2wAEAAAARYWFxUGBgcjNjchNSEmJicGE4XCVmO6gU1eZ/nFBjtMPDsDbJGXJS0wlZDJbGVhXnYAAQCZ/lMDaAU7ABAAABc1FhYXETMRNjcVBgYHIyYmmXdeYGVsyZCVLy4llxBMOzxMBcL6PmdeTYG6Y1bCAAABAE8AngewA24AGwAAARUGBgcjNjchFhcjJiYnNTY2NzMGByEmJzMWFgewXraCUEV9+ud9RVCCtl5etoJQRX0FGX1FUIK2AhwtK5KUrIuLrJSSKy0skZWsi4uslZEAAQCY/lUDZwW3ABsAAAEzFhYXFSYnETY3FQYGByMmJic1FhcRBgc1NjYB6S0skZSrjIyrlJEsLSuSlKuMjKuUkgW3XreCUEV++uZ+RE+Ct15et4JPRH4FGn5FUIK3AAIAmP2UA2cFtwAbAB8AAAEzFhYXFSYnETY3FQYGByMmJic1FhcRBgc1NjYBIRUhAektLJGUq4yMq5SRLC0rkpSrjIyrlJL+3ALN/TMFt163glBFfvrmfkRPgrdeXreCT0R+BRp+RVCCt/idYgAAAQFqAAAGawT/AAUAAAEzESEVIQFqZASd+v8E//tlZAABAJ4AAAUjBdQAIQCEskYIGrgCu0AaCQMREgEACBMSIBEREBojACEBISACGSKeeRgrThD0Te08EDxOEPY8TRD9PAA/PDw8P+0xMEN5QDgWHgMPHR4cHgIGBAMFAwYDBwMEBg4PDQ8MDwsPBAYXFhgWAgYbCB9YABkKFVgBHgMaWAEWDxpYASsrASsrKioqKoGBISMREDc+AzMyHgIXFhURIxE0Jy4DIyIOAgcGFQElhwcMRJXbfHfXoEULBIYGCjVvrVxctHMuBwMCbQEFRX2inGJdoLSHNPv9kwJ04z9yh3ZMUIOcaDbQAAADAHIAwgQ6BOQAAwAHAAsAakA8CwolCD8JAZAJwAkCCb8GAwIAASUwAgGfAs8CAgK/BQcGJQQFCAsLBAcHAwAaDQkKCgUFBgYCARkMV1oYK04Q9Dw8EDwQPBA8EPY8PBA8PBA8AC88Tf08EP1dcf08EDwQ/V1xPP08MTABITUhESE1IREhNSEEOvw4A8j8OAPI/DgDyAQ9p/2bqP2bqAAAAgCdAAAEOASBAAQACQAAMxEBARElIREBAZ0BzQHO/LYC+f6D/oQCegIH/fn9hlECBwGr/lUAAQBxAagEOQQGAAUALbQDJQICAbgBuUAOAAIaBwQFJQEAGQZXWhgrThD0PE39PE4Q5gAvTf48EO0xMBMRIRUhEXEDyPziAagCXqj+SgAAAQIi/f0D0AbJABYAAAEjETQ2MzIWFRQGIyInJiYjIgcGBwYVArORs3FDRzMlHhsSLxcRDgoEB/39BxPb3kEsKDQPCkkMCBMhagABAQX9/QKzBskAFgAAATMRFAYjIiY1NDYzMhcWFjMyNzY3NjUCIpGzcUNHMyQfHBIuFxEOCgQHBsn47dveQSwoNBAKSAwHFSBqAAH/6QIWBcECxQADAAABITUhBcH6KAXYAhavAAABAcn9kwJ4B0gAAwAAAREzEQHJr/2TCbX2SwAAAQJ+/ZMFwgLFAAUAAAEVIREjEQXC/WuvAsWv+30FMgAB/+n9kwMsAsUABQAAASE1IREjAn39bANDrwIWr/rOAAECfgIWBcIHSAAFAAABETMRIRUCfq8ClQIWBTL7fa8AAf/pAhYDLAdIAAUAAAEhNSERMwMs/L0ClK8CFq8EgwABAn79kwXCB0gABwAAAREzESEVIRECfq8Clf1r/ZMJtft9r/t9AAH/6f2TAywHSAAHAAABESE1IREzEQJ9/WwClK/9kwSDrwSD9ksAAf/p/ZMFwQLFAAcAAAEhNSEVIREjAn39bAXY/WuvAhavr/t9AAAB/+kCFgXBB0gABwAAASE1IREzESEFwfooApSvApUCFq8Eg/t9AAH/6f2TBcEHSAALAAABITUhETMRIRUhESMCff1sApSvApX9a68CFq8Eg/t9r/t9AAL/6QFYBcEDgwADAAcAAAEhNSERITUhBcH6KAXY+igF2ALUr/3VrwACAcD9kwPrB0gAAwAHAAABETMRIREzEQM8r/3Vr/2TCbX2Swm19ksAAQJ+/ZMFwgODAAkAAAERIRUhFSEVIRECfgNE/WsClf1r/ZMF8K/Nr/w7AAABAcD9kwXCAsUACQAAAREhFSERIxEjEQHABAL+Ka/N/ZMFMq/7fQR0+4wAAAIBwP2TBcEDgwAFAAsAAAEjESEVIQERIxEhFQJvrwQB/K4BfK8Chf2TBfCv/oT8OwR0rwAB/+n9kwMsA4MACQAAASE1ITUhNSERIwJ9/WwClP1sA0OvAVivza/6EAAB/+n9kwPqAsUACQAAARMhNSERIxEjEQG/Af4pBAGvzf2TBIOv+s4Eg/t9AAL/6f2TA+oDgwAFAAsAAAERITUhEQEhNSERIwM7/K4EAf3V/ioCha/9kwVBr/oQA8Wv+4wAAAECfgFYBcIHSAAJAAABETMRIRUhFSEVAn6vApX9awKVAVgF8Pw7r82vAAEBwAIWBcIHSAAJAAABIREzETMRMxEhBcL7/q/NrwHXAhYFMvt9BIP7fQAAAgHAAVgFwQdIAAUACwAAAREhFSERASEVIREzAm8DUvv/AisB1v17rwdI+r+vBfD8O68EdAAAAf/pAVgDLAdIAAkAAAEhNSE1ITUhETMDLPy9ApT9bAKUrwFYr82vA8UAAf/pAhYD6gdIAAkAAAEhNSERMxEzETMD6vv/Adavza8CFq8Eg/t9BIMAAv/pAVgD6gdIAAUACwAAATMRITUhAREzESE1Azuv+/8DUv6Er/17B0j6EK8BfAPF+4yvAAECfv2TBcIHSAALAAABETMRIRUhFSEVIRECfq8Clf1rApX9a/2TCbX8O6/Nr/w7AAIBwP2TBcIHSAAHAAsAAAERMxEhFSERIREzEQM8rwHX/in91a/9kwm1+32v+30JtfZLAAADAcD9kwXCB0gAAwAJAA8AAAERMxETETMRIRUBESEVIREBwK/NrwHX/XoChv4p/ZMJtfZLBUEEdPw7r/q/BHSv/DsAAAH/6f2TAywHSAALAAABITUhJyE1IREzESMCff1sApUB/WwClK+vAVivza8DxfZLAAL/6f2TA+oHSAAHAAsAAAETITUhETMRMxEzEQG/Af4pAdavza/9kwSDrwSD9ksJtfZLAAAD/+n9kwPqB0gAAwAJAA8AAAERMxEBESE1IRERITUhESMDO6/+hP17Adb+KgKFr/2TCbX2Swm1+4yvA8X6EK/7jAAC/+n9kwXBA4MAAwALAAABITUhASE1IRUhESMFwfooBdj8vP1sBdj9a68C1K/91a+v/DsAAf/p/ZMFwQLFAAsAAAETITUhFSERIxEjEQG/Af4pBdj+Ka/N/ZMEg6+v+30EdPuMAAAD/+n9kwXBA4MAAwAJAA8AAAEhNSEBITUhESMhESEVIREFwfooBdj7/v4qAoWvAXwChv4pAtSv/dWv+4wEdK/8OwAC/+kBWAXBB0gABwALAAABITUhETMRIREhNSEFwfooApSvApX6KAXYAtSvA8X8O/3VrwAAAf/pAhYFwQdIAAsAAAEhNSERMxEzETMRIQXB+igB1q/NrwHXAhavBIP7fQSD+30AA//pAVgFwQdIAAUACwAPAAABITUhETMBIREzESERITUhAm79ewHWrwNT/XqvAdf6KAXYAtSvA8X7jAR0/Dv91a8AAf/p/ZMFwQdIABMAAAEhNSE1ITUhETMRIRUhFSEVIREjAn39bAKU/WwClK8Clf1rApX9a68BWK/NrwPF/Duvza/8OwAB/+n9kwXBB0gAEwAAARMhNSERMxEzETMRIRUhESMRIxEBvwH+KQHWr82vAdf+Ka/N/ZMEg68Eg/t9BIP7fa/7fQSD+30ABP/p/ZMFwQdIAAUACwARABcAAAEhFSERMwERMxEhNQEhNSERIwERIxEhFQPrAdb9e6/91K/9ewHW/ioCha8CLK8ChQODrwR0/DsDxfuMr/3Vr/uMA8X8OwR0rwAB/+kCbQXBB0gAAwAAASERIQXB+igF2AJtBNsAAf/p/ZMFwQJtAAMAAAEhESEFwfooBdj9kwTaAAH/6f2TBcEHSAADAAADESERFwXY/ZMJtfZLAAAB/+n9kwLVB0gAAwAAAxEhERcC7P2TCbX2SwAAAQLW/ZMFwgdIAAMAAAERIREC1gLs/ZMJtfZLAB4AZv4IBcEHSAADAAcACwAPABMAFwAbAB8AIwAnACsALwAzADcAOwA/AEMARwBLAE8AUwBXAFsAXwBjAGcAawBvAHMAdwAAEzMVIyUzFSMlMxUjBTMVIyUzFSMlMxUjBzMVIyUzFSMlMxUjBTMVIyUzFSMlMxUjBzMVIyUzFSMlMxUjFzMVIyUzFSMlMxUjBzMVIyUzFSMlMxUjBTMVIyUzFSMlMxUjBzMVIyUzFSMlMxUjFzMVIyUzFSMlMxUjZn19AfJ9fQHzfX39FH19AfN8fAHyfX35fX3+DX19/g59fQTefX3+Dnx8/g19ffl9fQHyfX0B8319+X19/g58fP4NfX35fX0B8n19AfN9ff0UfX0B83x8AfJ9ffl9ff4NfX3+Dn19+X19AfN8fAHyfX0HSH19fX19fH19fX19fH19fX19fXx8fHx8fX19fX19fH19fX19fH19fX19fXx8fHx8fX19fX19fH19fX19AD//6v4IBcEHSAADAAcACwAPABMAFwAbAB8AIwAnACsALwAzADcAOwA/AEMARwBLAE8AUwBXAFsAXwBjAGsAbwBzAHcAewB/AIMAhwCLAI8AkwCXAJsAnwCjAKcAqwCvALMAtwC7AL8AwwDHAMsAzwDTANcA2wDfAOMA5wDrAO8A8wD3APsA/wAAEzMVIzczFSM3MxUjNzMVIzczFSM3MxUjBTMVIzczFSM3MxUjNzMVIzczFSM3MxUjNTMVIzUzFSMFMxUjNzMVIzczFSM3MxUjNzMVIzczFSMFMxUjNzMVIzczFSM3MxUjNzMVIzczFSM1MxUjNTMVIwUzFSM3MxUjNzMVIzczFSM3MxUjNzMVIwUzFSMlMxUjNzMVIzczFSM3MxUjJTMVIwUzFSMnMxUjJzMVIyczFSMnMxUjJzMVIwczFSM3MxUjNzMVIzczFSM3MxUjNzMVIxczFSMnMxUjJzMVIyczFSMnMxUjJzMVIwczFSM3MxUjNzMVIzczFSM3MxUjNzMVI2d8fPl8fPl9ffl9ffp8fPl8fPqlfX35fX35fX36fHz5fX35fX19fX19+598fPl8fPl9ffl9ffp8fPl8fPqlfX35fX35fX36fHz5fX35fX19fX19+598fPl8fPl9ffl9ffp8fPl8fPqlfX0B8n19+nx8+X19+X19/Bt9fQRifHz5fHz6fX35fX35fHz5fHx9fX35fX35fX36fHz5fX35fX19fHz5fHz6fX35fX35fHz5fHx9fX35fX35fX36fHz5fX35fX0HSH19fX19fX19fX19fH19fX19fX19fX19fX19fXx9fX19fX19fX19fX18fHx8fHx8fHx8fHx8fHx9fX19fX19fX19fX18fX19fX19fX19fX18fX19fX19fX19fX19fHx8fHx8fHx8fHx9fX19fX19fX19fX18fX19fX19fX19fX0AAC7///2MBdYHSAA9AEEARQBJAE0AUQBVAFkAXQBhAGUAaQBtAHEAdQB5AH0AgQCFAIkAjQCRAJUAmQCdAKEApQCpAK0AsQC1ALkAvQDBAMUAyQDNANEA1QDZAN0A4QDlAOkA7QDxAAABESMVMxEjFTMRIxUzESMVMxUhETM1IxEzNSMRMzUjETM1IxEzNTMVMzUzFTM1MxUzNTMVMzUzFTM1MxUjFSUVMzUzFTM1MxUzNTMVMzUzFTM1FyMVMycjFTMnIxUzJyMVMycjFTMHFTM1MxUzNTMVMzUzFTM1MxUzNQUjFTM3FTM1MxUzNTMVMzUzFTM1BRUzNSEVMzUHNSMVJRUzNTMVMzUTNSMVIzUjFSM1IxUjNSMVIzUjFQcVMzUzFTM1MxUzNTMVMzUzFTM1EzUjFSM1IxUjNSMVIzUjFSM1IxUHFTM1MxUzNTMVMzUzFTM1MxUzNQXWfHx8fHx8fHz6KX19fX19fX19fXx9fH19fH19fH18fPsifH18fX18fX18fX19+X19+nx8+X19+X19+Xx9fH19fH19fPyYfX18fX18fX18ffsifAF2ffp8AfJ9fXx9fXx9fXx9fXx9fHx9fH19fH19fH19fH19fH19fH18fH18fX18fX18BdL+inz+in3+inz+in18AXV9AXZ9AXV9AXZ9AXV9fX19fX19fX19ffl9fX19fX19fX19fX35fX19fX19fX19fXx8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JSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAABAH/+UwIwBkgAFwBIuQAW/+CzCxE0ELj/9LMOETQPuP/gtAoRNAABuAMGsg4NDbgC+rIODgG4AvqyAAAHuQL/ABIv7TMv7DwQ/QAvMz8zMTABKysrAQcmJyYnJhE0NzY3NjcXBgcGFRQXFhcWAjAsaDNnOUpKOmY1ZC5sODwiHDgc/oAtfU6eruQBBfrgsZ5TeSru6vny9MKdlksA//8AXf5T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AAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAA//8ARgTXAVEGDQAWAvgAAP//AEYE1wGxBhkAFgL3AAAAAgEAAAAFAAUAAAMABwAAIREhESUhESEBAAQA/CADwPxABQD7ACAEwAAAAgEAAAAFAAUAAAMABwAAIREhESUhESEBAAQA/CADwPxABQD7ACAEwAD//wBIBNcBrQaKABYC9QAA//8ARgTXAeUGWgAWAvIAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAP//AEYE1wGxBrkAFgNJAAD//wBGBNcBsQdXABYDEgAA//8ARgTXAbEG0wAWA0sAAP//AEYE1wGxBz0AFgNIAAD//wBABNkBsQcuABYDSgAA//8AMATXAc8HdwAWA0cAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAP//AEb/1QGcAKQAFgL2AAD//wBG/vYBnABbABYC8wAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIBAAAABQAFAAADAAcAACERIRElIREhAQAEAPwgA8D8QAUA+wAgBMAAAAIAygEYAckFtwASAB4APrkAEALytwdACQo0BwccvALuABYC7AAGAvG0BwcTGQC4Au2yDQ0TuQLtABkv7TMv7RESOS/tAD/9Mi8rPzEwARQHBgcGFSM0JyYnJjU0NjMyFgMUBiMiJjU0NjMyFgHJGisFGjkZCiUaRjc5SQZINDJISDQySAUdQ3bDHJKIfpk6tn4tPV1c/DcySEgyM0pKAAABAMcBGAHPAiIACwAWvgAJAu4AAwLsAAAC7QAGL+0AP+0xMAEUBiMiJjU0NjMyFgHPTzc2TE01OE4BnTZPTjc2T04AAAIAxgEYAc0EVwALABcAKrkACQLusgMDFbwC7gAPAuwAAALtsgYGDLkC7QASL+0zL+0AP/0yL+0xMAEUBiMiJjU0NjMyFhEUBiMiJjU0NjMyFgHNTjg1TEo3OE5PNzVMSzY4TgPSOE5OODdOTv2UNk9ONzZPTgACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAACAQAAAAUABQAAAwAHAAAhESERJSERIQEABAD8IAPA/EAFAPsAIATAAAABAAABJQFGAdMAAwAYvQACAu8AAQLrAAAC8LEFAS8Q5QA/7TEwASE1IQFG/roBRgElrgAAAQAAASUIRgHTAAMAGL0AAgLvAAEC6wAAAvCxBQEvEOUAP+0xMAEhNSEIRve6CEYBJa4AAAEAAAElEDoB0wADABi9AAIC7wABAusAAALwsQUBLxDlAD/tMTABITUhEDrvxhA6ASWuAAACAGP/5wasBdQADwAsAIq1GxANDjQnuP/gQBMQETQnIAkKNAogCQ40BiAJDjQCuP/gswkONA64/+BAIgkONCgQFxcMBBAeEQMMHiUDBB4dCRcoGQgsLBImEREIJhm4/8BADwsNNAAZARkAJiAhASFjLRD2Xe0vXSvtMy/tOS8REjk5AD/tP+0/7RESOS8SOTEwASsrKysr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AAAAJwDZAPUAAAEHBHQDXAAAAEJAMANQWmBakFqgWgQAWhBaMFpwWoBaBQBagFrAWtBaBABaWRwcQQLPPAE8HANoKwIBPLkCIgApACsBK101K11xcjX////9AAAFWQcrAiYAJAAAACcEewKrAAABBwSfBVAAAAAsQB8DzyPfI+8jAy8jAQAjLQECQQIAERsBAkECIEAZLTQgAC8rNQErNStdcTX//wBK/+gEHAbyAiYARAAAACcA2QD1AAABBwR6BJwAAAArsQNGuP/AQBUKDDQARlA/OUECzzwBPBwDaCsCATy5AiIAKQArAStdNSsrNQD////9/rsFWQZmAiYAJAAAACcEewKrAAABBwR9AzQAAAA1sQMkuP/AszU8NCS4/8CyEhc0uP/sQBMkJQcEQQIAERsBAkECIEAKLTQgAC8rNQErNSsrKzUA//8ASv67BBwFuAImAEQAAAAnANkA9QAAAQcEfQLIAAAAJkAWAx9HAQBHSC83QQLPPAE8HANoKwIBPLkCIgApACsBK101K101//8Aov67BOgFugImACgAAAEHBH0DXAAAABBACgEgDQEADQ4AC0EBK101//8AS/67BB4EPgImAEgAAAEHBH0C2gAAABS1AlAfYB8CuP/YtB8gBARBAStdNf//AKIAAAToBywCJgAoAAABBwR0A9QAAAALtgEAFhwBAkEBKzUA//8AS//oBB4GDQImAEgAAAEHBIUDKgAAABpAEwIAMhAyApAywDLQMgMAMjEKCkEBK11xNf//AKIAAAToBxQCJgAoAAABBwDXAXwBagAWQAoBAAwYAQJBAQEMuQIhACkAKwErNf//AEv/6AQeBaoCJgBIAAABBwDXAPAAAAAWQAoCAB4qCgpBAgEeuQLDACkAKwErNf//AKIAAAToBysCJgAoAAAAJwR8AqsAGQEHBHED/QAAADC3AtAWAQAWARa4/8BAFh8qNBYPAEgrAQAOEQECQQEOQBkoNA4ALys1ASs1KytdcTX//wBL/+gEHgcjAiYASAAAACcA1gDfAAABBwSTA0wAAABLtANfKAEouP/AQC8XGTQoIQBIKwIgQDs1IEAtMjQPIJ8gAgAgIwoKQQIfIC8gAvAgAV8gASBACQw0IAAvK11xcjUBK3IrKzUrK101AP//AKIAAAToBysCJgAoAAAAJwR8AqsAGQEHBG4DzwAA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/+gFHQXCAiYEbQAAAQcAjQDnAAAAG0AOAU8okCgCKBk8SCsBASW5AiIAKQArAStxNQD//wCh/+cGggcsAiYEbAAAAQcAQwGFAWoAIUASAX8pAW8pAZ8pASkaAEgrAQEnuQIhACkAKwErXXFyNQD//wCD/+gFHQXCAiYEbQAAAQcAQwDeAAAAGUAMAeAmASYZDEgrAQEmuQIiACkAKwErcTUA//8Aof/nBoIHLAImBGwAAAEHBHQD6AAAABRADgEvMIAw0DADADA2FB9BAStdNf//AIP/6AUdBg0CJgRtAAABBwSFAxsAAAAaQA0BUDmgOQKQOaA5AjkZuP/nsUgrAStdcTX//wCh/+cGggb7AiYEbAAAAQcA1wGZAVEAFkAKAQAmMhQfQQEBJrkCIQApACsBKzX//wCD/+gFHQWqAiYEbQAAAQcA1wDmAAAAIEASAe8lASVAU1Q0ACUxEx9BAQEluQIiACkAKwErK3E1//8Aof67BoIFugImBGwAAAEHBH0DcAAAABBACgFPJwEAJygaDkEBK3E1//8Ag/67BR0EJgImBG0AAAEHBH0CqAAAABRADgFQJmAmcCYDACYnFR1BAStdNf//AAb+uwVGBboCJgA8AAABBwR9AzQAAAALtgEADg8ADEEBKzUA//8AIf5RA+4EJgImAFwAAAEHBH0DrAAAAAu2AQAcHBISQQErNQD//wAGAAAFRgcsAiYAPAAAAQcEdAO2AAAAEkAMAdAX4BcCABcdAwlBAStdNf//ACH+UQPuBg0CJgBcAAABBwSFAvgAAAAjQAwBHy9wLwKQL6AvAi+4/8C0KzA0Lw+4/8mxSCsBKytdcTUA//8ABgAABUYG+wImADwAAAEHANcBaAFRABZACgEADRkDCUEBAQ25AiEAKQArASs1//8AIf5RA+4FqgImAFwAAAEHANcAvgAAABZACgEAGycMEkEBARu5AiIAKQArASs1/////QAABVkHIQI2ACQAAAEXAN8BNgFfABZACgIAFBEBAkECARO5AiEAKQArASs1//8ASv/oBBwFwgI2AEQAAAEXAN8A9QAAAB5AEAJgPQHgPQEAPTocHEECATy5AsMAKQArAStdcTX////iAAACWwchAjYALAAAARcA3/+6AV8AGkANASAJAQAJBgECQQEBCLkCIQApACsBK101////sAAAAikFwgI2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AJUAlgEEAJgAmQCaAQUAnACdAJ4BBgCgAKEAogCjAKQApQCmAKcAqACpAKoAqwCtAK4ArwCwALEAsgCzALQAtQC2ALcAuAC5ALoAuwC8AQcAvgC/AMAAwQDCAMMAxADFAMYAxwDIAMkAygDLAMwAzQDOAM8A0ADRANMA1ADVANYA1wDYANkA2gDbANwA3QDeAN8A4ADhAOIA4wDkAOUA5gDnAOgA6QDqAOsA7ADtAO4A7wDwAPEA8gDzAPQA9QD2APcA+AD5APoA+wD8AP0A/gD/AQABCAEJAQoBCwEMAQ0BDgEPARABEQESARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8BIAEhASIBIwEkASUBJgEnASgBKQEqASsBLAEtAS4BLwEwATEBMgEzATQBNQE2ATcBOAE5AToBOwE8AT0BPgE/AUABQQFCAUMBRAFFAUYBRwFIAUkBSgFLAUwBTQFOAU8BUAFRAVIBUwFUAVUBVgFXAVgBWQFaAVsBXAFdAV4BXwFgAWEBYgFjAWQBZQFmAWcBaAFpAWoBawFsAW0BbgFvAXABcQFyAXMBdAF1AXYBdwF4AXkBegF7AXwBfQF+AX8BgAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcoBywHMAc0BzgHPAdAB0QHSAdMB1AHVAdYB1wHYAdkB2gHbAdwB3QHeAd8B4AHhAeIB4wHkAeUB5gHnAegB6QHqAesB7AHtAe4B7wHwAfEB8gHzAfQB9QH2AfcB+AH5AfoB+wH8Af0B/gH/AgACAQICAgMCBAIFAgYCBwIIAgkCCgILAgwCDQIOAg8CEAIRAhICEwIUAhUAnwIWAhcCGAIZAhoCGwIcAh0CHgIfAiACIQIiAiMCJACXAiUCJgInAigCKQIqAisCLAItAi4CLwIwAjECMgIzAjQCNQI2AjcCOAI5AjoCOwI8Aj0CPgI/AkACQQJCAkMCRAJFAkYCRwJIAkkCSgJLAkwCTQJOAk8CUAJRAlICUwJUAlUCVgJXAlgCWQJaAlsCXAJdAl4CXwJgAmECYgJjAmQCZQJmAmcCaAJpAmoCawJsAm0CbgJvAnACcQJyAnMCdAJ1AnYCdwJ4AnkCegJ7AnwCfQJ+An8CgAKBAoICgwKEAoUChgKHAogCiQKKAosCjAKNAo4CjwKQApECkgCbApMClAKVApYClwKYApkCmgKbApwCnQKeAp8CoAKhAqICowKkAqUCpgKnAqgCqQKqAqsCrAKtAq4CrwKwArECsgKzArQCtQK2ArcCuAK5AroCuwK8Ar0CvgK/AsACwQLCAsMCxALFAsYCxwLIAskCygLLAswCzQLOAs8C0ALRAtIC0wLUAtUC1gLXAtgC2QLaAtsC3ALdAt4C3wLgAuEC4gLjAuQC5QLmAucC6ALpAuoC6wLsAu0C7gLvAvAC8QLyAvMC9AL1AvYC9wL4AvkC+gL7AvwC/QL+Av8DAAMBAwIDAwMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZAxoDGwMcAx0DHgMfAyADIQMiAyMDJAMlAyYDJwMoAykDKgMrAywDLQMuAy8DMAMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDPAM9Az4DPwNAA0EDQgNDA0QDRQNGA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSA1MDVANVA1YDVwNYA1kDWgNbA1wDXQNeA18DYANhA2IDYwC9A2QDZQNmA2cDaANpA2oDawNsA20DbgNvA3ADcQNyA3MDdAN1A3YDdwN4A3kDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwOQA5EDkgOTA5QDlQOWA5cDmAOZA5oDmwOcA50DngOfA6ADoQOiA6MDpAOlA6YDpwOoA6kDqgOrA6wDrQOuA68DsAOxA7IDswO0A7UDtgO3A7gDuQO6A7sDvAO9A74DvwPAA8EDwgPDA8QDxQPGA8cDyAPJA8oDywPMA80DzgPPA9AD0QPSA9MD1APVA9YD1wPYA9kD2gPbA9wD3QPeA98D4APhA+ID4wPkA+UD5gPnA+gD6QPqA+sD7APtA+4D7wPwA/ED8gPzA/QD9QP2A/cD+AP5A/oD+wP8A/0D/gP/BAAEAQQCBAMEBAQFBAYEBwQIBAkECgQLBAwEDQQOBA8EEAQRBBIEEwQUBBUEFgQXBBgEGQQaBBsEHAQdBB4EHwQgBCEEIgQjBCQEJQQmBCcEKAQpBCoEKwQsBC0ELgQvBDAEMQQyBDMENAQ1BDYENwQ4BDkEOgQ7BDwEPQQ+BD8EQARBBEIEQwREBEUERgRHBEgESQRKBEsETARNBE4ETwRQBFEEUgRTBFQEVQRWBFcEWARZBFoEWwRcBF0EXgRfBGAEYQRiBGMEZARlBGYEZwRoBGkEagRrBGwEbQRuBG8EcARxBHIAAAAAAAAEcwR0BHUEdgR3BHgEeQR6BHsEfAAAAAAEfQR+BH8EgASBAAAAAASCBIMEhASFBIYEhwSIBIkEigSLBIwEjQSOBI8EkASRBJIEkwSUBJUElgSXBJgEmQSaBJsEnASdBJ4EnwSgBKEEogSjBKQEpQSmBKcEqASpBKoEqwSsBK0ErgSvBLAEsQSyBLMEtAS1BLYEtwS4BLkEugS7BLwEvQS+BL8EwATBBMIEwwTEBMUExgTHBMgEyQTKBMsEzATNBM4EzwTQBNEE0gTTBNQE1QTWBNcE2ATZBNoE2wTcBN0E3gTfBOAE4QTiBOME5ATlBOYE5wToBOkE6gTrBOwE7QTuBO8E8ATxBPIE8wT0BPUE9gT3BPgE+QT6BPsE/AT9BP4E/wUABQEFAgUDBQQFBQUGBQcFCAUJAAAAAAAAAAAFCgULBQwFDQUOBQ8FEAURBRIFEwUUBRUFFgUXBRgFGQUaBRsFHAUdBR4FHwUgBSEFLm51bGwQbm9ubWFya2luZ3JldHVybgNtdTEDcGkxA09obQRFdXJvB2RtYWNyb24Jb3ZlcnNjb3JlBm1pZGRvdAZBYnJldmUGYWJyZXZlB0FvZ29uZWsHYW9nb25lawZEY2Fyb24GZGNhcm9uBkRzbGFzaAdFb2dvbmVrB2VvZ29uZWsGRWNhcm9uBmVjYXJvbgZMYWN1dGUGbGFjdXRlBkxjYXJvbgZsY2Fyb24ETGRvdARsZG90Bk5hY3V0ZQZuYWN1dGUGTmNhcm9uBm5jYXJvbglPZGJsYWN1dGUJb2RibGFjdXRlBlJhY3V0ZQZyYWN1dGUGUmNhcm9uBnJjYXJvbgZTYWN1dGUGc2FjdXRlCFRjZWRpbGxhCHRjZWRpbGxhBlRjYXJvbgZ0Y2Fyb24FVXJpbmcFdXJpbmcJVWRibGFjdXRlCXVkYmxhY3V0ZQZaYWN1dGUGemFjdXRlBFpkb3QEemRvdAVHYW1tYQVUaGV0YQNQaGkFYWxwaGEFZGVsdGEHZXBzaWxvbgVzaWdtYQN0YXUDcGhpDXVuZGVyc2NvcmVkYmwJZXhjbGFtZGJsCW5zdXBlcmlvcgZwZXNldGEJYXJyb3dsZWZ0B2Fycm93dXAKYXJyb3dyaWdodAlhcnJvd2Rvd24JYXJyb3dib3RoCWFycm93dXBkbgxhcnJvd3VwZG5ic2UKb3J0aG9nb25hbAxpbnRlcnNlY3Rpb24LZXF1aXZhbGVuY2UFaG91c2UNcmV2bG9naWNhbG5vdAppbnRlZ3JhbHRwCmludGVncmFsYnQIU0YxMDAwMDAIU0YxMTAwMDAIU0YwMTAwMDAIU0YwMzAwMDAIU0YwMjAwMDAIU0YwNDAwMDAIU0YwODAwMDAIU0YwOTAwMDAIU0YwNjAwMDAIU0YwNzAwMDAIU0YwNTAwMDAIU0Y0MzAwMDAIU0YyNDAwMDAIU0Y1MTAwMDAIU0Y1MjAwMDAIU0YzOTAwMDAIU0YyMjAwMDAIU0YyMTAwMDAIU0YyNTAwMDAIU0Y1MDAwMDAIU0Y0OTAwMDAIU0YzODAwMDAIU0YyODAwMDAIU0YyNzAwMDAIU0YyNjAwMDAIU0YzNjAwMDAIU0YzNzAwMDAIU0Y0MjAwMDAIU0YxOTAwMDAIU0YyMDAwMDAIU0YyMzAwMDAIU0Y0NzAwMDAIU0Y0ODAwMDAIU0Y0MTAwMDAIU0Y0NTAwMDAIU0Y0NjAwMDAIU0Y0MDAwMDAIU0Y1NDAwMDAIU0Y1MzAwMDAIU0Y0NDAwMDAHdXBibG9jawdkbmJsb2NrBWJsb2NrB2xmYmxvY2sHcnRibG9jawdsdHNoYWRlBXNoYWRlB2Rrc2hhZGUJZmlsbGVkYm94CmZpbGxlZHJlY3QHdHJpYWd1cAd0cmlhZ3J0B3RyaWFnZG4HdHJpYWdsZgZjaXJjbGUJaW52YnVsbGV0CWludmNpcmNsZQlzbWlsZWZhY2UMaW52c21pbGVmYWNlA3N1bgZmZW1hbGUEbWFsZQVzcGFkZQRjbHViBWhlYXJ0B2RpYW1vbmQLbXVzaWNhbG5vdGUObXVzaWNhbG5vdGVkYmwCSUoCaWoLbmFwb3N0cm9waGUGbWludXRlBnNlY29uZAlhZmlpNjEyNDgJYWZpaTYxMjg5BkgyMjA3MwZIMTg1NDMGSDE4NTUxBkgxODUzMwpvcGVuYnVsbGV0B0FtYWNyb24HYW1hY3JvbgtDY2lyY3VtZmxleAtjY2lyY3VtZmxleARDZG90BGNkb3QHRW1hY3JvbgdlbWFjcm9uBkVicmV2ZQZlYnJldmUERWRvdARlZG90C0djaXJjdW1mbGV4C2djaXJjdW1mbGV4BEdkb3QEZ2RvdAhHY2VkaWxsYQhnY2VkaWxsYQtIY2lyY3VtZmxleAtoY2lyY3VtZmxleARIYmFyBGhiYXIGSXRpbGRlBml0aWxkZQdJbWFjcm9uB2ltYWNyb24GSWJyZXZlBmlicmV2ZQdJb2dvbmVrB2lvZ29uZWsLSmNpcmN1bWZsZXgLamNpcmN1bWZsZXgIS2NlZGlsbGEIa2NlZGlsbGEMa2dyZWVubGFuZGljCExjZWRpbGxhCGxjZWRpbGxhCE5jZWRpbGxhCG5jZWRpbGxhA0VuZwNlbmcHT21hY3JvbgdvbWFjcm9uBk9icmV2ZQZvYnJldmUIUmNlZGlsbGEIcmNlZGlsbGELU2NpcmN1bWZsZXgLc2NpcmN1bWZsZXgEVGJhcgR0YmFyBlV0aWxkZQZ1dGlsZGUHVW1hY3Jvbgd1bWFjcm9uBlVicmV2ZQZ1YnJldmUHVW9nb25lawd1b2dvbmVrC1djaXJjdW1mbGV4C3djaXJjdW1mbGV4C1ljaXJjdW1mbGV4C3ljaXJjdW1mbGV4BWxvbmdzCkFyaW5nYWN1dGUKYXJpbmdhY3V0ZQdBRWFjdXRlB2FlYWN1dGULT3NsYXNoYWN1dGULb3NsYXNoYWN1dGUJYW5vdGVsZWlhBldncmF2ZQZ3Z3JhdmUGV2FjdXRlBndhY3V0ZQlXZGllcmVzaXMJd2RpZXJlc2lzBllncmF2ZQZ5Z3JhdmUNcXVvdGVyZXZlcnNlZAlyYWRpY2FsZXgJYWZpaTA4OTQxCWVzdGltYXRlZAlvbmVlaWdodGgMdGhyZWVlaWdodGhzC2ZpdmVlaWdodGhzDHNldmVuZWlnaHRocwtjb21tYWFjY2VudBB1bmRlcmNvbW1hYWNjZW50BXRvbm9zDWRpZXJlc2lzdG9ub3MKQWxwaGF0b25vcwxFcHNpbG9udG9ub3MIRXRhdG9ub3MJSW90YXRvbm9zDE9taWNyb250b25vcwxVcHNpbG9udG9ub3MKT21lZ2F0b25vcxFpb3RhZGllcmVzaXN0b25vcwVBbHBoYQRCZXRhBURlbHRhB0Vwc2lsb24EWmV0YQNFdGEESW90YQVLYXBwYQZMYW1iZGECTXUCTnUCWGkHT21pY3JvbgJQaQNSaG8FU2lnbWEDVGF1B1Vwc2lsb24DQ2hpA1BzaQxJb3RhZGllcmVzaXMPVXBzaWxvbmRpZXJlc2lzCmFscGhhdG9ub3MMZXBzaWxvbnRvbm9zCGV0YXRvbm9zCWlvdGF0b25vcxR1cHNpbG9uZGllcmVzaXN0b25vcwRiZXRhBWdhbW1hBHpldGEDZXRhBXRoZXRhBGlvdGEFa2FwcGEGbGFtYmRhAm51AnhpB29taWNyb24DcmhvBnNpZ21hMQd1cHNpbG9uA2NoaQNwc2kFb21lZ2EMaW90YWRpZXJlc2lzD3Vwc2lsb25kaWVyZXNpcwxvbWljcm9udG9ub3MMdXBzaWxvbnRvbm9zCm9tZWdhdG9ub3MJYWZpaTEwMDIzCWFmaWkxMDA1MQlhZmlpMTAwNTIJYWZpaTEwMDUzCWFmaWkxMDA1NAlhZmlpMTAwNTUJYWZpaTEwMDU2CWFmaWkxMDA1NwlhZmlpMTAwNTgJYWZpaTEwMDU5CWFmaWkxMDA2MAlhZmlpMTAwNjEJYWZpaTEwMDYyCWFmaWkxMDE0NQlhZmlpMTAwMTcJYWZpaTEwMDE4CWFmaWkxMDAxOQlhZmlpMTAwMjAJYWZpaTEwMDIxCWFmaWkxMDAyMglhZmlpMTAwMjQJYWZpaTEwMDI1CWFmaWkxMDAyNglhZmlpMTAwMjcJYWZpaTEwMDI4CWFmaWkxMDAyOQlhZmlpMTAwMzAJYWZpaTEwMDMxCWFmaWkxMDAzMglhZmlpMTAwMzMJYWZpaTEwMDM0CWFmaWkxMDAzNQlhZmlpMTAwMzYJYWZpaTEwMDM3CWFmaWkxMDAzOAlhZmlpMTAwMzkJYWZpaTEwMDQwCWFmaWkxMDA0MQlhZmlpMTAwNDIJYWZpaTEwMDQzCWFmaWkxMDA0NAlhZmlpMTAwNDUJYWZpaTEwMDQ2CWFmaWkxMDA0NwlhZmlpMTAwNDgJYWZpaTEwMDQ5CWFmaWkxMDA2NQlhZmlpMTAwNjYJYWZpaTEwMDY3CWFmaWkxMDA2OAlhZmlpMTAwNjkJYWZpaTEwMDcwCWFmaWkxMDA3MglhZmlpMTAwNzMJYWZpaTEwMDc0CWFmaWkxMDA3NQlhZmlpMTAwNzYJYWZpaTEwMDc3CWFmaWkxMDA3OAlhZmlpMTAwNzkJYWZpaTEwMDgwCWFmaWkxMDA4MQlhZmlpMTAwODIJYWZpaTEwMDgzCWFmaWkxMDA4NAlhZmlpMTAwODUJYWZpaTEwMDg2CWFmaWkxMDA4NwlhZmlpMTAwODgJYWZpaTEwMDg5CWFmaWkxMDA5MAlhZmlpMTAwOTEJYWZpaTEwMDkyCWFmaWkxMDA5MwlhZmlpMTAwOTQJYWZpaTEwMDk1CWFmaWkxMDA5NglhZmlpMTAwOTcJYWZpaTEwMDcxCWFmaWkxMDA5OQlhZmlpMTAxMDAJYWZpaTEwMTAxCWFmaWkxMDEwMglhZmlpMTAxMDMJYWZpaTEwMTA0CWFmaWkxMDEwNQlhZmlpMTAxMDYJYWZpaTEwMTA3CWFmaWkxMDEwOAlhZmlpMTAxMDkJYWZpaTEwMTEwCWFmaWkxMDE5MwlhZmlpMTAwNTAJYWZpaTEwMDk4CWFmaWkwMDIwOAlhZmlpNjEzNTIFc2hldmEKaGF0YWZzZWdvbApoYXRhZnBhdGFoC2hhdGFmcWFtYXRzBWhpcmlxBXRzZXJlBXNlZ29sBXBhdGFoBnFhbWF0cwVob2xhbQZxdWJ1dHMGZGFnZXNoBW1ldGVnBW1hcWFmBHJhZmUFcGFzZXEHc2hpbmRvdAZzaW5kb3QIc29mcGFzdXEEYWxlZgNiZXQFZ2ltZWwFZGFsZXQCaGUDdmF2BXpheWluA2hldAN0ZXQDeW9kCGZpbmFsa2FmA2thZgVsYW1lZAhmaW5hbG1lbQNtZW0IZmluYWxudW4DbnVuBnNhbWVraARheWluB2ZpbmFscGUCcGUKZmluYWx0c2FkaQV0c2FkaQNxb2YEcmVzaARzaGluA3Rhdglkb3VibGV2YXYGdmF2eW9kCWRvdWJsZXlvZAZnZXJlc2gJZ2Vyc2hheWltDW5ld3NoZXFlbHNpZ24KdmF2c2hpbmRvdA1maW5hbGthZnNoZXZhDmZpbmFsa2FmcWFtYXRzCmxhbWVkaG9sYW0QbGFtZWRob2xhbWRhZ2VzaAdhbHRheWluC3NoaW5zaGluZG90CnNoaW5zaW5kb3QRc2hpbmRhZ2VzaHNoaW5kb3QQc2hpbmRhZ2VzaHNpbmRvdAlhbGVmcGF0YWgKYWxlZnFhbWF0cwlhbGVmbWFwaXEJYmV0ZGFnZXNoC2dpbWVsZGFnZXNoC2RhbGV0ZGFnZXNoCGhlZGFnZXNoCXZhdmRhZ2VzaAt6YXlpbmRhZ2VzaAl0ZXRkYWdlc2gJeW9kZGFnZXNoDmZpbmFsa2FmZGFnZXNoCWthZmRhZ2VzaAtsYW1lZGRhZ2VzaAltZW1kYWdlc2gJbnVuZGFnZXNoDHNhbWVraGRhZ2VzaA1maW5hbHBlZGFnZXNoCHBlZGFnZXNoC3RzYWRpZGFnZXNoCXFvZmRhZ2VzaApyZXNoZGFnZXNoCnNoaW5kYWdlc2gIdGF2ZGFnZXMIdmF2aG9sYW0HYmV0cmFmZQdrYWZyYWZlBnBlcmFmZQlhbGVmbGFtZWQSemVyb3dpZHRobm9uam9pbmVyD3plcm93aWR0aGpvaW5lcg9sZWZ0dG9yaWdodG1hcmsPcmlnaHR0b2xlZnRtYXJrCWFmaWk1NzM4OAlhZmlpNTc0MDMJYWZpaTU3NDA3CWFmaWk1NzQwOQlhZmlpNTc0NDAJYWZpaTU3NDUxCWFmaWk1NzQ1MglhZmlpNTc0NTMJYWZpaTU3NDU0CWFmaWk1NzQ1NQlhZmlpNTc0NTYJYWZpaTU3NDU3CWFmaWk1NzQ1OAlhZmlpNTczOTIJYWZpaTU3MzkzCWFmaWk1NzM5NAlhZmlpNTczOTUJYWZpaTU3Mzk2CWFmaWk1NzM5NwlhZmlpNTczOTgJYWZpaTU3Mzk5CWFmaWk1NzQwMAlhZmlpNTc0MDEJYWZpaTU3MzgxCWFmaWk1NzQ2MQlhZmlpNjMxNjcJYWZpaTU3NDU5CWFmaWk1NzU0MwlhZmlpNTc1MzQJYWZpaTU3NDk0CWFmaWk2Mjg0MwlhZmlpNjI4NDQJYWZpaTYyODQ1CWFmaWk2NDI0MAlhZmlpNjQyNDEJYWZpaTYzOTU0CWFmaWk1NzM4MglhZmlpNjQyNDIJYWZpaTYyODgxCWFmaWk1NzUwNAlhZmlpNTczNjkJYWZpaTU3MzcwCWFmaWk1NzM3MQlhZmlpNTczNzIJYWZpaTU3MzczCWFmaWk1NzM3NAlhZmlpNTczNzUJYWZpaTU3MzkxCWFmaWk1NzQ3MQlhZmlpNTc0NjAJYWZpaTUyMjU4CWFmaWk1NzUwNglhZmlpNjI5NTgJYWZpaTYyOTU2CWFmaWk1Mjk1NwlhZmlpNTc1MDUJYWZpaTYyODg5CWFmaWk2Mjg4NwlhZmlpNjI4ODgJYWZpaTU3NTA3CWFmaWk2Mjk2MQlhZmlpNjI5NTkJYWZpaTYyOTYwCWFmaWk1NzUwOAlhZmlpNjI5NjIJYWZpaTU3NTY3CWFmaWk2Mjk2NAlhZmlpNTIzMDUJYWZpaTUyMzA2CWFmaWk1NzUwOQlhZmlpNjI5NjcJYWZpaTYyOTY1CWFmaWk2Mjk2NglhZmlpNTc1NTUJYWZpaTUyMzY0CWFmaWk2Mzc1MwlhZmlpNjM3NTQJYWZpaTYzNzU5CWFmaWk2Mzc2MwlhZmlpNjM3OTUJYWZpaTYyODkxCWFmaWk2MzgwOAlhZmlpNjI5MzgJYWZpaTYzODEwCWFmaWk2Mjk0MglhZmlpNjI5NDcJYWZpaTYzODEzCWFmaWk2MzgyMwlhZmlpNjM4MjQJYWZpaTYzODMzCWFmaWk2Mzg0NAlhZmlpNjI4ODIJYWZpaTYyODgzCWFmaWk2Mjg4NAlhZmlpNjI4ODUJYWZpaTYyODg2CWFmaWk2Mzg0NglhZmlpNjM4NDkHdW5pMjAyQQd1bmkyMDJCB3VuaTIwMkQHdW5pMjAyRQd1bmkyMDJDB3VuaTIwNkUIdW5pMjA2RjsHdW5pMjA2QQd1bmkyMDZCCHVuaTIwNkM7B3VuaTIwNkQHdW5pRjAwQQd1bmlGMDBCB3VuaUYwMEMHdW5pRjAwRAd1bmlGMDBFB3VuaUZGRkMJYWZpaTYzOTA0CWFmaWk2MzkwNQlhZmlpNjM5MDYJYWZpaTYzOTA4CWFmaWk2MzkxMAlhZmlpNjM5MTIJYWZpaTYyOTI3CWFmaWk2Mzk0MQlhZmlpNjI5MzkJYWZpaTYzOTQzCWFmaWk2Mjk0MwlhZmlpNjI5NDYJYWZpaTYzOTQ2CWFmaWk2Mjk1MQlhZmlpNjM5NDgJYWZpaTYyOTUzCWFmaWk2Mzk1MAlhZmlpNjM5NTEJYWZpaTYzOTUyCWFmaWk2Mzk1MwlhZmlpNjM5NTYJYWZpaTYzOTU4CWFmaWk2Mzk1OQlhZmlpNjM5NjAJYWZpaTYzOTYxCWFmaWk2NDA0NglhZmlpNjQwNTgJYWZpaTY0MDU5CWFmaWk2NDA2MAlhZmlpNjQwNjEJYWZpaTYyOTQ1CWFmaWk2NDE4NAlhZmlpNTIzOTkJYWZpaTUyNDAwCWFmaWk2Mjc1MwlhZmlpNTc0MTEJYWZpaTYyNzU0CWFmaWk1NzQxMglhZmlpNjI3NTUJYWZpaTU3NDEzCWFmaWk2Mjc1NglhZmlpNTc0MTQJYWZpaTYyNzU5CWFmaWk2Mjc1NwlhZmlpNjI3NTgJYWZpaTU3NDE1CWFmaWk2Mjc2MAlhZmlpNTc0MTYJYWZpaTYyNzYzCWFmaWk2Mjc2MQlhZmlpNjI3NjIJYWZpaTU3NDE3CWFmaWk2Mjc2NAlhZmlpNTc0MTgJYWZpaTYyNzY3CWFmaWk2Mjc2NQlhZmlpNjI3NjYJYWZpaTU3NDE5CWFmaWk2Mjc3MAlhZmlpNjI3NjgJYWZpaTYyNzY5CWFmaWk1NzQyMAlhZmlpNjI3NzMJYWZpaTYyNzcxCWFmaWk2Mjc3MglhZmlpNTc0MjEJYWZpaTYyNzc2CWFmaWk2Mjc3NAlhZmlpNjI3NzUJYWZpaTU3NDIyCWFmaWk2Mjc3OQlhZmlpNjI3NzcJYWZpaTYyNzc4CWFmaWk1NzQyMwlhZmlpNjI3ODAJYWZpaTU3NDI0CWFmaWk2Mjc4MQlhZmlpNTc0MjUJYWZpaTYyNzgyCWFmaWk1NzQyNglhZmlpNjI3ODMJYWZpaTU3NDI3CWFmaWk2Mjc4NglhZmlpNjI3ODQJYWZpaTYyNzg1CWFmaWk1NzQyOAlhZmlpNjI3ODkJYWZpaTYyNzg3CWFmaWk2Mjc4OAlhZmlpNTc0MjkJYWZpaTYyNzkyCWFmaWk2Mjc5MAlhZmlpNjI3OTEJYWZpaTU3NDMwCWFmaWk2Mjc5NQlhZmlpNjI3OTMJYWZpaTYyNzk0CWFmaWk1NzQzMQlhZmlpNjI3OTgJYWZpaTYyNzk2CWFmaWk2Mjc5NwlhZmlpNTc0MzIJYWZpaTYyODAxCWFmaWk2Mjc5OQlhZmlpNjI4MDAJYWZpaTU3NDMzCWFmaWk2MjgwNAlhZmlpNjI4MDIJYWZpaTYyODAzCWFmaWk1NzQzNAlhZmlpNjI4MDcJYWZpaTYyODA1CWFmaWk2MjgwNglhZmlpNTc0NDEJYWZpaTYyODEwCWFmaWk2MjgwOAlhZmlpNjI4MDkJYWZpaTU3NDQyCWFmaWk2MjgxMwlhZmlpNjI4MTEJYWZpaTYyODEyCWFmaWk1NzQ0MwlhZmlpNjI4MTYJYWZpaTU3NDEwCWFmaWk2MjgxNQlhZmlpNTc0NDQJYWZpaTYyODE5CWFmaWk2MjgxNwlhZmlpNjI4MTgJYWZpaTU3NDQ1CWFmaWk2MjgyMglhZmlpNjI4MjAJYWZpaTYyODIxCWFmaWk1NzQ0NglhZmlpNjI4MjUJYWZpaTYyODIzCWFmaWk2MjgyNAlhZmlpNTc0NDcJYWZpaTYyODI4CWFmaWk1NzQ3MAlhZmlpNjI4MjcJYWZpaTU3NDQ4CWFmaWk2MjgyOQlhZmlpNTc0NDkJYWZpaTYyODMwCWFmaWk1NzQ1MAlhZmlpNjI4MzMJYWZpaTYyODMxCWFmaWk2MjgzMglhZmlpNjI4MzQJYWZpaTYyODM1CWFmaWk2MjgzNglhZmlpNjI4MzcJYWZpaTYyODM4CWFmaWk2MjgzOQlhZmlpNjI4NDAJYWZpaTYyODQxCWdseXBoMTAyMQthZmlpNTc1NDMtMgthZmlpNTc0NTQtMgthZmlpNTc0NTEtMglnbHlwaDEwMjUJZ2x5cGgxMDI2C2FmaWk1NzQ3MS0yC2FmaWk1NzQ1OC0yC2FmaWk1NzQ1Ny0yC2FmaWk1NzQ5NC0yC2FmaWk1NzQ1OS0yC2FmaWk1NzQ1NS0yC2FmaWk1NzQ1Mi0yCWdseXBoMTAzNAlnbHlwaDEwMzUJZ2x5cGgxMDM2C2FmaWk2Mjg4NC0yC2FmaWk2Mjg4MS0yC2FmaWk2Mjg4Ni0yC2FmaWk2Mjg4My0yC2FmaWk2Mjg4NS0yC2FmaWk2Mjg4Mi0yC2FmaWk1NzUwNC0yC2FmaWk1NzQ1Ni0yC2FmaWk1NzQ1My0yCWdseXBoMTA0NglnbHlwaDEwNDcLYWZpaTU3NTQzLTMLYWZpaTU3NDU0LTMLYWZpaTU3NDUxLTMJZ2x5cGgxMDUxCWdseXBoMTA1MgthZmlpNTc0NzEtMwthZmlpNTc0NTgtMwthZmlpNTc0NTctMwthZmlpNTc0OTQtMwthZmlpNTc0NTktMwthZmlpNTc0NTUtMwthZmlpNTc0NTItMwlnbHlwaDEwNjAJZ2x5cGgxMDYxCWdseXBoMTA2MgthZmlpNjI4ODQtMwthZmlpNjI4ODEtMwthZmlpNjI4ODYtMwthZmlpNjI4ODMtMwthZmlpNjI4ODUtMwthZmlpNjI4ODItMwthZmlpNTc1MDQtMwthZmlpNTc0NTYtMwthZmlpNTc0NTMtMwlnbHlwaDEwNzIJZ2x5cGgxMDczC2FmaWk1NzU0My00C2FmaWk1NzQ1NC00C2FmaWk1NzQ1MS00CWdseXBoMTA3NwlnbHlwaDEwNzgLYWZpaTU3NDcxLTQLYWZpaTU3NDU4LTQLYWZpaTU3NDU3LTQLYWZpaTU3NDk0LTQLYWZpaTU3NDU5LTQLYWZpaTU3NDU1LTQLYWZpaTU3NDUyLTQJZ2x5cGgxMDg2CWdseXBoMTA4NwlnbHlwaDEwODgLYWZpaTYyODg0LTQLYWZpaTYyODgxLTQLYWZpaTYyODg2LTQLYWZpaTYyODgzLTQLYWZpaTYyODg1LTQLYWZpaTYyODgyLTQLYWZpaTU3NTA0LTQLYWZpaTU3NDU2LTQLYWZpaTU3NDUzLTQJZ2x5cGgxMDk4CWdseXBoMTA5OQlnbHlwaDExMDAJZ2x5cGgxMTAxCWdseXBoMTEwMglnbHlwaDExMDMJZ2x5cGgxMTA0CWdseXBoMTEwNQlnbHlwaDExMDYJZ2x5cGgxMTA3CWdseXBoMTEwOAlnbHlwaDExMDkJZ2x5cGgxMTEwCWdseXBoMTExMQlnbHlwaDExMTIJZ2x5cGgxMTEzCWdseXBoMTExNAlnbHlwaDExMTUJZ2x5cGgxMTE2CWdseXBoMTExNwlnbHlwaDExMTgJZ2x5cGgxMTE5CWdseXBoMTEyMAlnbHlwaDExMjEJZ2x5cGgxMTIyCWdseXBoMTEyMwlnbHlwaDExMjQJZ2x5cGgxMTI1CWdseXBoMTEyNgthZmlpNTc0NDAtMgthZmlpNTc0NDAtMwthZmlpNTc0NDAtNAVPaG9ybgVvaG9ybgVVaG9ybgV1aG9ybgRmMDA2BGYwMDcEZjAwORJjb21iaW5pbmdob29rYWJvdmUEZjAxMARmMDEzBGYwMTEEZjAxYwRmMDE1FGNvbWJpbmluZ3RpbGRlYWNjZW50BGYwMmMIZG9uZ3NpZ24Ib25ldGhpcmQJdHdvdGhpcmRzBGYwMDgEZjAwZgRmMDEyBGYwMTQEZjAxNgRmMDE3BGYwMTgEZjAxOQRmMDFhBGYwMWIEZjAxZQRmMDFmBGYwMjAEZjAyMQRmMDIyFGNvbWJpbmluZ2dyYXZlYWNjZW50FGNvbWJpbmluZ2FjdXRlYWNjZW50BGYwMWQRY29tYmluaW5nZG90YmVsb3cEZjAyMwRmMDI5BGYwMmEEZjAyYgRmMDI0BGYwMjUEZjAyNgRmMDI3BGYwMjgEZjAyZARmMDJlBGYwMmYEZjAzMARmMDMxCUFkb3RiZWxvdwlhZG90YmVsb3cKQWhvb2thYm92ZQphaG9va2Fib3ZlEEFjaXJjdW1mbGV4YWN1dGUQYWNpcmN1bWZsZXhhY3V0ZRBBY2lyY3VtZmxleGdyYXZlEGFjaXJjdW1mbGV4Z3JhdmUUQWNpcmN1bWZsZXhob29rYWJvdmUUYWNpcmN1bWZsZXhob29rYWJvdmUQQWNpcmN1bWZsZXh0aWxkZRBhY2lyY3VtZmxleHRpbGRlE0FjaXJjdW1mbGV4ZG90YmVsb3cTYWNpcmN1bWZsZXhkb3RiZWxvdwtBYnJldmVhY3V0ZQthYnJldmVhY3V0ZQtBYnJldmVncmF2ZQthYnJldmVncmF2ZQ9BYnJldmVob29rYWJvdmUPYWJyZXZlaG9va2Fib3ZlC0FicmV2ZXRpbGRlC2FicmV2ZXRpbGRlDkFicmV2ZWRvdGJlbG93DmFicmV2ZWRvdGJlbG93CUVkb3RiZWxvdwllZG90YmVsb3cKRWhvb2thYm92ZQplaG9va2Fib3ZlBkV0aWxkZQZldGlsZGUQRWNpcmN1bWZsZXhhY3V0ZRBlY2lyY3VtZmxleGFjdXRlEEVjaXJjdW1mbGV4Z3JhdmUQZWNpcmN1bWZsZXhncmF2ZRRFY2lyY3VtZmxleGhvb2thYm92ZRRlY2lyY3VtZmxleGhvb2thYm92ZRBFY2lyY3VtZmxleHRpbGRlEGVjaXJjdW1mbGV4dGlsZGUTRWNpcmN1bWZsZXhkb3RiZWxvdxNlY2lyY3VtZmxleGRvdGJlbG93Cklob29rYWJvdmUKaWhvb2thYm92ZQlJZG90YmVsb3cJaWRvdGJlbG93CU9kb3RiZWxvdwlvZG90YmVsb3cKT2hvb2thYm92ZQpvaG9va2Fib3ZlEE9jaXJjdW1mbGV4YWN1dGUQb2NpcmN1bWZsZXhhY3V0ZRBPY2lyY3VtZmxleGdyYXZlEG9jaXJjdW1mbGV4Z3JhdmUUT2NpcmN1bWZsZXhob29rYWJvdmUUb2NpcmN1bWZsZXhob29rYWJvdmUQT2NpcmN1bWZsZXh0aWxkZRBvY2lyY3VtZmxleHRpbGRlE09jaXJjdW1mbGV4ZG90YmVsb3cTb2NpcmN1bWZsZXhkb3RiZWxvdwpPaG9ybmFjdXRlCm9ob3JuYWN1dGUKT2hvcm5ncmF2ZQpvaG9ybmdyYXZlDk9ob3JuaG9va2Fib3ZlDm9ob3JuaG9va2Fib3ZlCk9ob3JudGlsZGUKb2hvcm50aWxkZQ1PaG9ybmRvdGJlbG93DW9ob3JuZG90YmVsb3cJVWRvdGJlbG93CXVkb3RiZWxvdwpVaG9va2Fib3ZlCnVob29rYWJvdmUKVWhvcm5hY3V0ZQp1aG9ybmFjdXRlClVob3JuZ3JhdmUKdWhvcm5ncmF2ZQ5VaG9ybmhvb2thYm92ZQ51aG9ybmhvb2thYm92ZQpVaG9ybnRpbGRlCnVob3JudGlsZGUNVWhvcm5kb3RiZWxvdw11aG9ybmRvdGJlbG93CVlkb3RiZWxvdwl5ZG90YmVsb3cKWWhvb2thYm92ZQp5aG9va2Fib3ZlBll0aWxkZQZ5dGlsZGUHdW5pMDFDRAd1bmkwMUNFB3VuaTAxQ0YHdW5pMDFEMAd1bmkwMUQxB3VuaTAxRDIHdW5pMDFEMwd1bmkwMUQ0B3VuaTAxRDUHdW5pMDFENgd1bmkwMUQ3B3VuaTAxRDgHdW5pMDFEOQd1bmkwMURBB3VuaTAxREIHdW5pMDFEQwd1bmkwNDkyB3VuaTA0OTMHdW5pMDQ5Ngd1bmkwNDk3B3VuaTA0OWEHdW5pMDQ5Ygd1bmkwNDljB3VuaTA0OWQHdW5pMDRhMgd1bmkwNGEzB3VuaTA0YWUHdW5pMDRhZgd1bmkwNGIwB3VuaTA0YjEHdW5pMDRiMgd1bmkwNGIzB3VuaTA0YjgHdW5pMDRiOQd1bmkwNGJhB3VuaTA0YmIHdW5pMDE4Zgd1bmkwMjU5B3VuaTA0ZTgHdW5pMDRlOQAAAAEAABVcAAEDjQwAAAkJTgADACT/jwADADf/2wADADz/2wADAfH/jwADAfn/jwADAfv/jwADAgH/jwADAgn/2wADAgr/2wADAg//2wAUABT/aAAkAAP/jwAkADf/aAAkADn/aAAkADr/tAAkADz/aAAkAFn/2wAkAFr/2wAkAFz/2wAkALb/aAApAA//HQApABH/HQApACT/jwAvAAP/tAAvADf/aAAvADn/aAAvADr/aAAvADz/aAAvAFz/tAAvALb/jwAzAAP/2wAzAA/++AAzABH++AAzACT/aAA1ADf/2wA1ADn/2wA1ADr/2wA1ADz/2wA3AAP/2wA3AA//HQA3ABD/jwA3ABH/HQA3AB3/HQA3AB7/HQA3ACT/aAA3ADL/2wA3AET/HQA3AEb/HQA3AEj/HQA3AEz/tAA3AFL/HQA3AFX/tAA3AFb/HQA3AFj/tAA3AFr/jwA3AFz/jwA5AA//RAA5ABD/jwA5ABH/RAA5AB3/tAA5AB7/tAA5ACT/aAA5AET/aAA5AEj/jwA5AEz/2wA5AFL/jwA5AFX/tAA5AFj/tAA5AFz/tAA6AA//jwA6ABD/2wA6ABH/jwA6AB3/2wA6AB7/2wA6ACT/tAA6AET/tAA6AEj/2wA6AEwAAAA6AFL/2wA6AFX/2wA6AFj/2wA6AFz/7gA8AAP/2wA8AA/++AA8ABD/RAA8ABH++AA8AB3/jwA8AB7/ewA8ACT/aAA8AET/aAA8AEj/RAA8AEz/tAA8AFL/RAA8AFP/aAA8AFT/RAA8AFj/jwA8AFn/jwBJAEn/2wBJALYAJQBVAA//jwBVABH/jwBVALYATABZAA//aABZABH/aABaAA//jwBaABH/jwBcAA//aABcABH/aAC1ALX/2wC2AAP/tAC2AFb/2wC2ALb/2wDEAi3/YADEAjb/YADEAkz/YADEAlH/vADEAlT/vAErAA//HwErABH/HwErAfgApAErAfn/RAErAfv/RAErAgH/RAErAhr/qAErAicAWAEsAfn/2wEsAfv/2wEsAgH/2wEsAgr/vgEsAg//vgEtAfn/xQEtAgr/vgEtAg//vgEvATL/4wEvAhz/2QEvAiT/yQEvAoz/4wEyAS7/4wEyAS//4wEyATH/4wEyATP/4wEyAhD/4wEyAhf/4wEyAiD/4wEyAiL/4wEyAib/4wEyAiv/4wEzATL/4wEzAhz/2QEzAiT/yQEzAoz/4wHxASz/1QHxAS3/xQHxAgX/1QHxAgn/aAHxAgr/aAHxAg//aAHxAhb/2wHxAh7/2wHxAiT/2wH1Agr/vgH2ASz/jQH2AS3/jQH2AS7/RgH2ATH/RgH2ATP/RgH2AfgAqgH2Afn/aAH2Afv/aAH2AgH/aAH2AgX/jQH2Ag3/ngH2AhL/aAH2AhP/tAH2Ahj/aAH2Ahr/tAH2Ahv/aAH2Ah3/aAH2AiD/RgH2AicAYgH2Ain/RgH3Agr/0QH3Ag//0QH5AAP/jwH5ALb/aAH5ASz/1QH5AS3/xQH5AgX/1QH5Agn/aAH5Agr/aAH5Ag//aAH5Ahb/2wH5Ah7/2wH5AiT/2wH7AAP/jwH7ASz/1QH7AgX/1QH7Agn/iQH7Agr/aAH7Ag//aAIAASz/wQIAAS3/jwIAAS7/5wIAAS//5wIAATH/5wIAATP/5wIAAgX/wQIAAhD/5wIAAhf/5wIAAhn/5wIAAh//5wIAAiD/5wIAAib/5wIAAin/5wIAAiv/5wIBAAP/jwIBASz/1QIBAgX/1QIBAgn/aAIBAgr/aAIBAg//aAIFAfn/2wIFAfv/1QIFAgH/2wIFAgr/vgIFAg//vgIHAAP/2wIHAA/++gIHABH++gIHAfn/aAIHAfv/aAIHAgH/aAIIATL/ngIIAoz/ngIJAAP/2wIJAA//HwIJABH/HwIJAB3/HwIJAB7/HwIJASz/2wIJAS3/2wIJAS7/HwIJATD/HwIJATH/HwIJATP/HwIJAfgAvAIJAfn/aAIJAfv/aAIJAgH/aAIJAgX/2wIJAg3/2wIJAhD/HwIJAhH/HwIJAhT/TgIJAhb/TgIJAhj/agIJAhr/tAIJAh3/agIJAh7/jwIJAiD/HwIJAiP/UAIJAiT/jwIJAiX/agIJAicAvAIJAij/TgIJAin/HwIJAir/TgIKAAP/2wIKAA/++gIKABD/RgIKABH++gIKAB3/jwIKAB7/jwIKASz/jQIKAS3/jQIKAS7/RgIKATH/RgIKATP/RgIKAfgAvAIKAfn/aAIKAfv/aAIKAgH/aAIKAgX/jQIKAg3/ngIKAhL/aAIKAhP/tAIKAhb/ngIKAhj/aAIKAhr/tAIKAhv/aAIKAh3/aAIKAiD/RgIKAicAeQIKAin/RgIMAS7/sgIMAS//sgIMATH/sgIMATP/sgIMAhD/sgIMAhn/2QIMAiD/sgIMAib/sgIMAin/sgIMAiv/sgINAgr/0QINAg//0QIPAAP/2wIPASz/jQIPAS3/jQIPAS7/RgIPATH/RgIPATP/RgIPAfgAqgIPAfn/aAIPAfv/aAIPAgH/aAIPAgX/jQIPAg3/ngIPAhL/aAIPAhP/tAIPAhj/aAIPAhr/tAIPAhv/aAIPAh3/aAIPAiD/RgIPAicAYgIPAin/RgIXAS7/dwIXAS//tAIXATH/dwIXATL/qgIXATP/dwIXAhD/dwIXAhL/2wIXAhb/qgIXAhj/2wIXAhn/ngIXAhr/2wIXAhv/2wIXAh7/qgIXAiD/dwIXAib/dwIXAin/dwIXAiv/dwIXAoz/qgIZAhz/2QIbAS7/5wIbAS//5wIbATH/5wIbATP/5wIbAhD/5wIbAhf/5wIbAhn/5wIbAh//5wIbAiD/5wIbAiL/5wIbAib/5wIbAin/5wIbAiv/5wIcAS7/4QIcAS//4QIcATH/4QIcATP/2wIcAhD/4QIcAh//4QIcAiD/4QIcAiL/0QIcAiP/zwIcAib/4QIcAin/4QIcAir/zwIcAiv/4QIfAS7/yQIfAS//yQIfATH/yQIfATP/yQIfAhD/yQIfAhf/yQIfAh//yQIfAiD/yQIfAiL/yQIfAin/yQIgATL/4wIgAhz/2QIgAiT/yQIgAoz/4wIhATL/4wIhAhz/2QIhAoz/4wIkAS7/yQIkAS//yQIkATH/yQIkATP/yQIkAhD/yQIkAhf/yQIkAiD/yQIkAiL/yQIkAib/yQIkAin/yQIkAiv/yQImATL/4wImAhz/2QImAiT/yQImAoz/4wIpATL/4wIpAhz/2QIpAiT/yQIpAoz/4wIrATL/4wIrAhz/2QIrAiT/yQIrAoz/4wIuAA//BgIuABH/BgIuAKn/dwIuAKr/dwIuALL/0wI0ALb/YAI1ALb/dwI6ALb/jQI6Aj4ARAI6AkH/6QI6AkUALQI6Akj/0wI6Akn/6QI6Akv/0wI6Akz/YAI6Ak3/pgI6Ak7/vAI6AlH/YAI6Alf/0wI6AloAFwI6Amz/0wI6Am3/6QI6Am4AFwI6AncALQI7Ajr/0wI7AkH/6QI7Akj/6QI7Akv/6QI7Akz/pAI7Ak3/0QI7Ak7/6QI7Ak//0wI7AlH/pAI7AlT/vAI7Alf/6QI7Aln/6QI7AmX/6QI7Am3/0wI8Ajr/vAI8Aj7/0wI8AkD/0wI8AkH/vAI8AkX/6QI8Akj/vAI8Akv/vAI8Akz/dwI8Ak3/vAI8Ak7/vAI8Ak//pgI8AlH/pAI8AlT/jQI8Aln/vAI8Al7/6QI8Amb/6QI8Amz/vAI8Am3/6QI8Am//6QI8AnH/vAI8Ann/6QI9AA//BgI9ABH/BgI9AKn/dwI9AKr/dwI9ALL/0wI9Ajr/dwI9Aj7/dwI9AkH/0wI9AkX/jQI9Akb/0QI9Akj/jQI9Akv/pAI9Aln/vAI9Alr/jQI9Alz/jQI9Al7/dwI9Al//dwI9AmL/jQI9AmX/jQI9Amb/jQI9Amf/jQI9Amj/dwI9Amr/jQI9Am3/dwI9AnX/jQI9Anb/jQI9Anj/jQI9Ann/dwI+Ak0AFwI+Ak7/0wI+AlH/ugI+AmEARAI+AmgAFwI+Am0ALQI/AkH/0wI/Amv/6QJAAkH/6QJAAkj/0wJAAkv/6QJAAkwAFwJAAk0ALQJAAlQALQJAAloAFwJAAl//5wJAAmj/6QJAAm3/6QJBAkX/6QJBAkj/6QJBAkv/6QJBAkz/0wJBAk3/6QJBAk7/6QJBAlH/0wJBAln/6QJEAkH/6QJEAkj/6QJEAkv/6QJEAk0AFwJEAk7/ugJFAk7/6QJFAlsAFwJFAm0AFwJGAk7/6QJGAlH/6QJGAloAFwJGAl8AFwJGAmgAFwJGAmsAFwJGAm0AFwJGAnH/6QJGAncAFwJIAjr/0wJIAj7/0wJIAkD/0wJIAkX/6QJIAk3/0wJIAk//pAJIAlH/0wJIAln/0wJIAl7/0wJIAmX/6QJIAm//6QJKAA/+fQJKABH+fQJKAB3/0wJKAB7/0wJKAKr/jQJKAjr/dwJKAj7/dwJKAkD/6QJKAkH/0wJKAkX/jQJKAkb/6QJKAkj/0wJKAkv/6QJKAkz/pAJKAk3/0wJKAk7/6QJKAk//pAJKAln/0wJKAlr/vAJKAl7/YAJKAl//pgJKAmj/pgJKAnf/0wJKAnn/vAJLAjr/0wJLAj7/0wJLAkH/6QJLAkX/vAJLAkb/6QJLAkj/0wJLAkz/vAJLAk3/vAJLAk//jQJLAlH/vAJLAlT/ugJLAlf/6QJLAloAFwJLAmAALQJLAnH/6QJMAA//HQJMABH/HQJMAKn/pgJMAKr/pgJMALL/0wJMAjr/vAJMAj7/vAJMAkAAFwJMAkH/6QJMAkX/0wJMAkj/pAJMAk7/vAJMAln/0wJMAlr/pAJMAlz/pgJMAl//jQJMAmL/pgJMAmT/pgJMAmX/pAJMAmb/pgJMAmj/YAJMAmn/pgJMAmr/jQJMAmv/jQJMAm3/jQJMAm//pgJMAnP/pgJMAnX/pgJMAnb/pgJMAnj/pgJMAnn/jQJNAA/+8AJNABH+8AJNAB3/0wJNAB7/0wJNAKn/pgJNAKr/pAJNALL/6QJNAjr/dwJNAj7/pAJNAkH/0wJNAkX/vAJNAkj/vAJNAk7/vAJNAlf/0wJNAln/0wJNAlv/0wJNAlz/jQJNAl3/pAJNAl7/YAJNAl//dwJNAmD/vAJNAmH/jQJNAmL/pAJNAmP/vAJNAmT/pAJNAmX/dwJNAmb/pAJNAmf/pAJNAmj/dwJNAmn/pAJNAmr/pAJNAmv/dwJNAm//pAJNAnD/pAJNAnL/pAJNAnP/pAJNAnj/pAJNAnn/dwJOAjr/0wJOAj7/vAJOAkX/vAJOAkz/jQJOAk3/pAJOAlH/0wJOAln/ugJOAmX/vAJPAkH/0wJPAkj/vAJPAkv/vAJPAk7/vAJPAlf/ugJPAmj/6QJPAm3/0wJQAkj/0wJQAloALQJTAloAFwJTAm0ALQJUALb/dwJUAln/vAJWALb/YAJWAjr/0wJWAj7/0wJWAkD/vAJWAkH/6QJWAkX/ugJWAkb/0wJWAkj/0wJWAkv/0wJWAkz/MwJWAk//pAJWAlH/YAJWAlf/6QJWAln/pAJXAj7/vAJXAkD/5wJXAkH/6QJXAkX/vAJXAk//ugJXAln/0wJXAl7/vAJXAmAAFwJXAmX/vAJXAmb/6QJXAnn/6QJYAjr/vAJYAj7/pgJYAkD/0wJYAkX/pAJYAkj/6QJYAkv/6QJYAkz/jQJYAk//pAJYAlH/vAJYAl7/pAJYAmX/pAJYAmb/6QJaAmH/6QJaAmz/0wJaAm3/6QJaAnH/0wJbAlr/0QJbAl7/pAJbAl//6QJbAmD/6QJbAmH/0wJbAmX/pAJbAmb/0wJbAmv/6QJbAm3/0wJbAm7/6QJbAm//vAJbAnH/vAJbAnT/vAJbAnf/6QJbAnn/0wJcAlr/6QJcAlv/6QJcAl7/6QJcAl//6QJcAmD/6QJcAmH/6QJcAmX/0QJcAmb/6QJcAmj/6QJcAmv/6QJcAmz/0wJcAm3/0wJcAm7/6QJcAnH/pAJcAnT/vAJcAnn/6QJdAA//BgJdABH/BgJdAlr/0wJdAl7/pAJdAl//0wJdAmH/6QJdAmX/0wJdAmj/0wJdAmv/0wJdAnn/6QJeAnT/0wJeAncAFwJfAlv/6QJfAl7/0wJfAmD/6QJfAmH/0wJfAmX/vAJfAmz/vAJfAm3/6QJfAm//0wJfAnH/vAJgAlsAFwJgAm0AFwJgAnH/6QJgAnQALQJhAlv/6QJhAl7/0wJhAl//6QJhAmH/6QJhAmX/6QJhAmj/6QJhAmv/6QJhAm3/6QJhAm7/6QJhAnH/vAJhAnT/0wJkAloALQJkAlsALQJkAl8AFwJkAmEAFwJkAmUAFwJkAmgAFwJkAmsAFwJkAmwAFwJkAm0AFwJkAncAFwJlAmgAFwJlAnH/0wJmAlv/6QJmAmH/6QJmAm0AFwJoAl7/0wJoAmD/6QJoAmH/6QJoAmX/0wJoAmz/0wJoAm3/6QJoAm//6QJoAnH/0wJqAl7/0QJqAmH/6QJqAmX/ugJqAmz/0wJqAm3/6QJqAm//6QJqAnH/0wJqAnn/6QJrAmAAFwJrAmgAFwJrAnH/6QJrAncAFwJsAA//HQJsABH/HQJsAlr/6QJsAl7/vAJsAl//6QJsAmAARAJsAmX/0wJsAmj/6QJsAmv/6QJsAm0AFwJtAA//MwJtABH/MwJtAKoAFwJtAlr/6QJtAlsAFwJtAl7/vAJtAl//6QJtAmAAFwJtAmX/0wJtAmb/6QJtAmj/5wJtAmr/6QJtAmv/6QJtAm7/6QJtAnf/6QJtAnn/6QJuAlv/6QJuAl7/0wJuAmX/0wJuAmz/0wJuAm3/6QJuAnH/0wJuAnn/6QJvAlr/6QJvAlv/6QJvAl//6QJvAmH/6QJvAmj/6QJvAmv/6QJvAmz/6QJvAm7/6QJvAnH/0wJwAl//6QJwAmH/6QJwAmj/6QJwAmv/6QJzAl//6QJzAmj/6QJzAm0AFwJ2Amz/YAJ2AnH/dwJ3Al7/0wJ3Al8AFwJ3AmH/6QJ3AmX/0wJ3AmgAFwJ3Amz/0wJ3Am//6QJ3Ann/6QJ4Al7/0wJ4AmD/6QJ4AmX/0wJ4Amb/6QJ4Amz/0wJ4Am//6QJ4AnH/0wKGAA//MwKGABH/MwKIAA//BgKIABH/BgKIAB3/0wKIAB7/0wKIAKn/YAKIAKr/YAKIALL/0wKMAS7/4wKMATH/4wKMATP/4wKMAhD/4wKMAhf/4wKMAiD/4wKMAiL/4wKMAib/4wKMAiv/4wABAABNAr8iAjkEJgAAQNoFugAATSBBcmlhbCAgICAgICAgIP////8AP//+QVJMUjAwAABAAAAA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ggQ2BgorBgEEAYI3AgEKAQH/BIIEIzCCBB+gKYAnaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvQ1BToYIDuIGCA7RUaGlzIGNlcnRpZmljYXRlIGluY29ycG9yYXRlcyBieSByZWZlcmVuY2UsIGFuZCBpdHMgdXNlIGlzIHN0cmljdGx5CnN1YmplY3QgdG8sIHRoZSBWZXJpU2lnbiBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudCAoQ1BTKQp2ZXJzaW9uIDEuMCwgYXZhaWxhYmxlIGluIHRoZSBWZXJpU2lnbiByZXBvc2l0b3J5IGF0OgpodHRwczovL3d3dy52ZXJpc2lnbi5jb207IGJ5IEUtbWFpbCBhdCBDUFMtcmVxdWVzdHNAdmVyaXNpZ24uY29tOyBvcgpieSBtYWlsIGF0IFZlcmlTaWduLCBJbmMuLCAyNTkzIENvYXN0IEF2ZS4sIE1vdW50YWluIFZpZXcsIENBIDk0MDQzClVTQSBDb3B5cmlnaHQgKGMpMTk5NiBWZXJpU2lnbiwgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gQ0VSVEFJTgpXQVJSQU5USUVTIERJU0NMQUlNRUQgQU5EIExJQUJJTElUWSBMSU1JVEVELgoKV0FSTklORzogVEhFIFVTRSBPRiBUSElTIENFUlRJRklDQVRFIElTIFNUUklDVExZIFNVQkpFQ1QgVE8gVEhFClZFUklTSUdOIENFUlRJRklDQVRJT04gUFJBQ1RJQ0UgU1RBVEVNRU5ULiAgVEhFIElTU1VJTkcgQVVUSE9SSVRZCkRJU0NMQUlNUyBDRVJUQUlOIElNUExJRUQgQU5EIEVYUFJFU1MgV0FSUkFOVElFUywgSU5DTFVESU5HIFdBUlJBTlRJRVMKT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgV0lMTCBOT1QKQkUgTElBQkxFIEZPUiBDT05TRVFVRU5USUFMLCBQVU5JVElWRSwgQU5EIENFUlRBSU4gT1RIRVIgREFNQUdFUy4gU0VFClRIRSBDUFMgRk9SIERFVEFJTFMuCgpDb250ZW50cyBvZiB0aGUgVmVyaVNpZ24gcmVnaXN0ZXJlZCBub252ZXJpZmllZFN1YmplY3RBdHRyaWJ1dGVzCmV4dGVuc2lvbiB2YWx1ZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCBhcyBhY2N1cmF0ZSBpbmZvcm1hdGlvbgp2YWxpZGF0ZWQgYnkgdGhlIElBLgqjNoA0aHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JlcG9zaXRvcnkvdmVyaXNpZ25sb2dvLmdpZjCCAh8GA1UdAwSCAhYwggISMIICDjCCAgoGC2CGSAGG+EUBBwEBMIIB+RaCAadUaGlzIGNlcnRpZmljYXRlIGluY29ycG9yYXRlcyBieSByZWZlcmVuY2UsIGFuZCBpdHMgdXNlIGlzIHN0cmljdGx5IHN1YmplY3QgdG8sIHRoZSBWZXJpU2lnbiBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudCAoQ1BTKSwgYXZhaWxhYmxlIGF0OiBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vQ1BTOyBieSBFLW1haWwgYXQgQ1BTLXJlcXVlc3RzQHZlcmlzaWduLmNvbTsgb3IgYnkgbWFpbCBhdCBWZXJpU2lnbiwgSW5jLiwgMjU5MyBDb2FzdCBBdmUuLCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0MyBVU0EgVGVsLiArMSAoNDE1KSA5NjEtODgzMCBDb3B5cmlnaHQgKGMpIDE5OTYgVmVyaVNpZ24sIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIENFUlRBSU4gV0FSUkFOVElFUyBESVNDTEFJTUVEIGFuZCBMSUFCSUxJVFkgTElNSVRFRC6gDgYMYIZIAYb4RQEHAQEBoQ4GDGCGSAGG+EUBBwEBAjAsMCoWKGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9yZXBvc2l0b3J5L0NQUyAwFgYKKwYBBAGCNwIBGwQIMAYBAf8BAf8wDQYJKoZIhvcNAQEEBQADgYEAQdoWjxEbg6og6h4XHsRzI3ACxthp22HHZkiaKfngFtX8mrj45THYpopuFuHHqK17CgaeeDNlsFhL4Fqbn25mZkT8wdpdZFiP/9WNTsE2PysW3zJvhpJq2FHzbfM8FrxMTxhKdZ3ugvzPvBHj+hcHteRCliEbiHerIEKV+N8bol0xggQsMIIEKAIBATB1MGExETAPBgNVBAcTCEludGVybmV0MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEzMDEGA1UECxMqVmVyaVNpZ24gQ29tbWVyY2lhbCBTb2Z0d2FyZSBQdWJsaXNoZXJzIENBAhB18o74qPvqbRFSlxSVS2VcMAwGCCqGSIb3DQIFBQCggbowGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARYwHwYJKoZIhvcNAQkEMRIEELwHNdrct77xGQtgUZaqmdAwXgYKKwYBBAGCNwIBDDFQME6gJoAkAEEAcgBpAGEAbAAgAFIAZQBnAHUAbABhAHIAIABGAG8AbgB0oSSAImh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS90cnVldHlwZS8wDQYJKoZIhvcNAQEBBQAEgYCRFieigzsnJtE1cMkW4963HTKnGdx4JOdFOceWCDmjnGOGRRiH/3De7NY6gfA/U69RL4+oskQtlUtl7F1maj2kyVlyyI37lLWWXOe/bJ80H9RQ3guFDmEzvzb3rUMsvOjdjQ5074ESWfU9iMN9+7esORu7loF74pCtIj46YmSaaqGCAk0wggJJBgkqhkiG9w0BCQYxggI6MIICNgIBATCBtDCBnjEfMB0GA1UEChMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazEXMBUGA1UECxMOVmVyaVNpZ24sIEluYy4xLDAqBgNVBAsTI1ZlcmlTaWduIFRpbWUgU3RhbXBpbmcgU2VydmljZSBSb290MTQwMgYDVQQLEytOTyBMSUFCSUxJVFkgQUNDRVBURUQsIChjKTk3IFZlcmlTaWduLCBJbmMuAhEA/KSlnywPwLkDmDMbe1RUHTAMBggqhkiG9w0CBQUAoFkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMDAwNTExMTg0ODU1WjAfBgkqhkiG9w0BCQQxEgQQZdd+AUltlDum35wDETIhhzANBgkqhkiG9w0BAQEFAASCAQDEFPm3kvczCYPtP4reiXz1mtLdb2dpZh65KqlwudSnRGiglxEKACE8mLCguibQKk7dbv6yjyACJ2Np3RDFuf18XA2t17QW+w9XedGBz4KDMp41bhfkH+MOLSmgfHaHgcqh7SzDhe9hkEotcxxjWKHVczScXhCc2FoZWkxhMACO6+O+p9Tf5XZTs6+ejOlbmF/lpBlQJR37Wo4iUaGePLHWcqnOu+zOlvQJ/JXutfzxGwBjjjIv0r2cJI5MdJMWMVjju96oa9VHrrv54FqM2REfYcYQIpSwZ+p4zX9T7ZBaNz+kLxQhQqBjddkei2ESGlRMEofrJEpbuxhKTUaXBzsxAA==\"","// src/tiny-inflate@1.0.3.esm.mjs\nvar TINF_OK = 0;\nvar TINF_DATA_ERROR = -3;\nfunction Tree() {\n this.table = new Uint16Array(16);\n this.trans = new Uint16Array(288);\n}\nfunction Data(source, dest) {\n this.source = source;\n this.sourceIndex = 0;\n this.tag = 0;\n this.bitcount = 0;\n this.dest = dest;\n this.destLen = 0;\n this.ltree = new Tree();\n this.dtree = new Tree();\n}\nvar sltree = new Tree();\nvar sdtree = new Tree();\nvar length_bits = new Uint8Array(30);\nvar length_base = new Uint16Array(30);\nvar dist_bits = new Uint8Array(30);\nvar dist_base = new Uint16Array(30);\nvar clcidx = new Uint8Array([\n 16,\n 17,\n 18,\n 0,\n 8,\n 7,\n 9,\n 6,\n 10,\n 5,\n 11,\n 4,\n 12,\n 3,\n 13,\n 2,\n 14,\n 1,\n 15\n]);\nvar code_tree = new Tree();\nvar lengths = new Uint8Array(288 + 32);\nfunction tinf_build_bits_base(bits, base, delta, first) {\n var i, sum;\n for (i = 0; i < delta; ++i) bits[i] = 0;\n for (i = 0; i < 30 - delta; ++i) bits[i + delta] = i / delta | 0;\n for (sum = first, i = 0; i < 30; ++i) {\n base[i] = sum;\n sum += 1 << bits[i];\n }\n}\nfunction tinf_build_fixed_trees(lt, dt) {\n var i;\n for (i = 0; i < 7; ++i) lt.table[i] = 0;\n lt.table[7] = 24;\n lt.table[8] = 152;\n lt.table[9] = 112;\n for (i = 0; i < 24; ++i) lt.trans[i] = 256 + i;\n for (i = 0; i < 144; ++i) lt.trans[24 + i] = i;\n for (i = 0; i < 8; ++i) lt.trans[24 + 144 + i] = 280 + i;\n for (i = 0; i < 112; ++i) lt.trans[24 + 144 + 8 + i] = 144 + i;\n for (i = 0; i < 5; ++i) dt.table[i] = 0;\n dt.table[5] = 32;\n for (i = 0; i < 32; ++i) dt.trans[i] = i;\n}\nvar offs = new Uint16Array(16);\nfunction tinf_build_tree(t, lengths2, off, num) {\n var i, sum;\n for (i = 0; i < 16; ++i) t.table[i] = 0;\n for (i = 0; i < num; ++i) t.table[lengths2[off + i]]++;\n t.table[0] = 0;\n for (sum = 0, i = 0; i < 16; ++i) {\n offs[i] = sum;\n sum += t.table[i];\n }\n for (i = 0; i < num; ++i) {\n if (lengths2[off + i]) t.trans[offs[lengths2[off + i]]++] = i;\n }\n}\nfunction tinf_getbit(d) {\n if (!d.bitcount--) {\n d.tag = d.source[d.sourceIndex++];\n d.bitcount = 7;\n }\n var bit = d.tag & 1;\n d.tag >>>= 1;\n return bit;\n}\nfunction tinf_read_bits(d, num, base) {\n if (!num)\n return base;\n while (d.bitcount < 24) {\n d.tag |= d.source[d.sourceIndex++] << d.bitcount;\n d.bitcount += 8;\n }\n var val = d.tag & 65535 >>> 16 - num;\n d.tag >>>= num;\n d.bitcount -= num;\n return val + base;\n}\nfunction tinf_decode_symbol(d, t) {\n while (d.bitcount < 24) {\n d.tag |= d.source[d.sourceIndex++] << d.bitcount;\n d.bitcount += 8;\n }\n var sum = 0, cur = 0, len = 0;\n var tag = d.tag;\n do {\n cur = 2 * cur + (tag & 1);\n tag >>>= 1;\n ++len;\n sum += t.table[len];\n cur -= t.table[len];\n } while (cur >= 0);\n d.tag = tag;\n d.bitcount -= len;\n return t.trans[sum + cur];\n}\nfunction tinf_decode_trees(d, lt, dt) {\n var hlit, hdist, hclen;\n var i, num, length;\n hlit = tinf_read_bits(d, 5, 257);\n hdist = tinf_read_bits(d, 5, 1);\n hclen = tinf_read_bits(d, 4, 4);\n for (i = 0; i < 19; ++i) lengths[i] = 0;\n for (i = 0; i < hclen; ++i) {\n var clen = tinf_read_bits(d, 3, 0);\n lengths[clcidx[i]] = clen;\n }\n tinf_build_tree(code_tree, lengths, 0, 19);\n for (num = 0; num < hlit + hdist; ) {\n var sym = tinf_decode_symbol(d, code_tree);\n switch (sym) {\n case 16:\n var prev = lengths[num - 1];\n for (length = tinf_read_bits(d, 2, 3); length; --length) {\n lengths[num++] = prev;\n }\n break;\n case 17:\n for (length = tinf_read_bits(d, 3, 3); length; --length) {\n lengths[num++] = 0;\n }\n break;\n case 18:\n for (length = tinf_read_bits(d, 7, 11); length; --length) {\n lengths[num++] = 0;\n }\n break;\n default:\n lengths[num++] = sym;\n break;\n }\n }\n tinf_build_tree(lt, lengths, 0, hlit);\n tinf_build_tree(dt, lengths, hlit, hdist);\n}\nfunction tinf_inflate_block_data(d, lt, dt) {\n for (; ; ) {\n var sym = tinf_decode_symbol(d, lt);\n if (sym === 256) {\n return TINF_OK;\n }\n if (sym < 256) {\n d.dest[d.destLen++] = sym;\n } else {\n var length, dist, offs2;\n var i;\n sym -= 257;\n length = tinf_read_bits(d, length_bits[sym], length_base[sym]);\n dist = tinf_decode_symbol(d, dt);\n offs2 = d.destLen - tinf_read_bits(d, dist_bits[dist], dist_base[dist]);\n for (i = offs2; i < offs2 + length; ++i) {\n d.dest[d.destLen++] = d.dest[i];\n }\n }\n }\n}\nfunction tinf_inflate_uncompressed_block(d) {\n var length, invlength;\n var i;\n while (d.bitcount > 8) {\n d.sourceIndex--;\n d.bitcount -= 8;\n }\n length = d.source[d.sourceIndex + 1];\n length = 256 * length + d.source[d.sourceIndex];\n invlength = d.source[d.sourceIndex + 3];\n invlength = 256 * invlength + d.source[d.sourceIndex + 2];\n if (length !== (~invlength & 65535))\n return TINF_DATA_ERROR;\n d.sourceIndex += 4;\n for (i = length; i; --i)\n d.dest[d.destLen++] = d.source[d.sourceIndex++];\n d.bitcount = 0;\n return TINF_OK;\n}\nfunction tinf_uncompress(source, dest) {\n var d = new Data(source, dest);\n var bfinal, btype, res;\n do {\n bfinal = tinf_getbit(d);\n btype = tinf_read_bits(d, 2, 0);\n switch (btype) {\n case 0:\n res = tinf_inflate_uncompressed_block(d);\n break;\n case 1:\n res = tinf_inflate_block_data(d, sltree, sdtree);\n break;\n case 2:\n tinf_decode_trees(d, d.ltree, d.dtree);\n res = tinf_inflate_block_data(d, d.ltree, d.dtree);\n break;\n default:\n res = TINF_DATA_ERROR;\n }\n if (res !== TINF_OK)\n throw new Error(\"Data error\");\n } while (!bfinal);\n if (d.destLen < d.dest.length) {\n if (typeof d.dest.slice === \"function\")\n return d.dest.slice(0, d.destLen);\n else\n return d.dest.subarray(0, d.destLen);\n }\n return d.dest;\n}\ntinf_build_fixed_trees(sltree, sdtree);\ntinf_build_bits_base(length_bits, length_base, 4, 3);\ntinf_build_bits_base(dist_bits, dist_base, 2, 1);\nlength_bits[28] = 0;\nlength_base[28] = 258;\n\n// src/bbox.mjs\nfunction derive(v0, v1, v2, v3, t) {\n return Math.pow(1 - t, 3) * v0 + 3 * Math.pow(1 - t, 2) * t * v1 + 3 * (1 - t) * Math.pow(t, 2) * v2 + Math.pow(t, 3) * v3;\n}\nfunction BoundingBox() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n}\nBoundingBox.prototype.isEmpty = function() {\n return isNaN(this.x1) || isNaN(this.y1) || isNaN(this.x2) || isNaN(this.y2);\n};\nBoundingBox.prototype.addPoint = function(x, y) {\n if (typeof x === \"number\") {\n if (isNaN(this.x1) || isNaN(this.x2)) {\n this.x1 = x;\n this.x2 = x;\n }\n if (x < this.x1) {\n this.x1 = x;\n }\n if (x > this.x2) {\n this.x2 = x;\n }\n }\n if (typeof y === \"number\") {\n if (isNaN(this.y1) || isNaN(this.y2)) {\n this.y1 = y;\n this.y2 = y;\n }\n if (y < this.y1) {\n this.y1 = y;\n }\n if (y > this.y2) {\n this.y2 = y;\n }\n }\n};\nBoundingBox.prototype.addX = function(x) {\n this.addPoint(x, null);\n};\nBoundingBox.prototype.addY = function(y) {\n this.addPoint(null, y);\n};\nBoundingBox.prototype.addBezier = function(x0, y0, x1, y1, x2, y2, x, y) {\n const p0 = [x0, y0];\n const p1 = [x1, y1];\n const p2 = [x2, y2];\n const p3 = [x, y];\n this.addPoint(x0, y0);\n this.addPoint(x, y);\n for (let i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0) continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0) this.addX(derive(p0[i], p1[i], p2[i], p3[i], t));\n if (i === 1) this.addY(derive(p0[i], p1[i], p2[i], p3[i], t));\n }\n continue;\n }\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0) continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0) this.addX(derive(p0[i], p1[i], p2[i], p3[i], t1));\n if (i === 1) this.addY(derive(p0[i], p1[i], p2[i], p3[i], t1));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0) this.addX(derive(p0[i], p1[i], p2[i], p3[i], t2));\n if (i === 1) this.addY(derive(p0[i], p1[i], p2[i], p3[i], t2));\n }\n }\n};\nBoundingBox.prototype.addQuad = function(x0, y0, x1, y1, x, y) {\n const cp1x = x0 + 2 / 3 * (x1 - x0);\n const cp1y = y0 + 2 / 3 * (y1 - y0);\n const cp2x = cp1x + 1 / 3 * (x - x0);\n const cp2y = cp1y + 1 / 3 * (y - y0);\n this.addBezier(x0, y0, cp1x, cp1y, cp2x, cp2y, x, y);\n};\nvar bbox_default = BoundingBox;\n\n// src/path.mjs\nfunction Path() {\n this.commands = [];\n this.fill = \"black\";\n this.stroke = null;\n this.strokeWidth = 1;\n}\nvar decimalRoundingCache = {};\nfunction roundDecimal(float, places) {\n const integerPart = Math.floor(float);\n const decimalPart = float - integerPart;\n if (!decimalRoundingCache[places]) {\n decimalRoundingCache[places] = {};\n }\n if (decimalRoundingCache[places][decimalPart] !== void 0) {\n const roundedDecimalPart2 = decimalRoundingCache[places][decimalPart];\n return integerPart + roundedDecimalPart2;\n }\n const roundedDecimalPart = +(Math.round(decimalPart + \"e+\" + places) + \"e-\" + places);\n decimalRoundingCache[places][decimalPart] = roundedDecimalPart;\n return integerPart + roundedDecimalPart;\n}\nfunction optimizeCommands(commands) {\n let subpaths = [[]];\n let startX = 0, startY = 0;\n for (let i = 0; i < commands.length; i += 1) {\n const subpath = subpaths[subpaths.length - 1];\n const cmd = commands[i];\n const firstCommand = subpath[0];\n const secondCommand = subpath[1];\n const previousCommand = subpath[subpath.length - 1];\n const nextCommand = commands[i + 1];\n subpath.push(cmd);\n if (cmd.type === \"M\") {\n startX = cmd.x;\n startY = cmd.y;\n } else if (cmd.type === \"L\" && (!nextCommand || nextCommand.type === \"Z\")) {\n if (!(Math.abs(cmd.x - startX) > 1 || Math.abs(cmd.y - startY) > 1)) {\n subpath.pop();\n }\n } else if (cmd.type === \"L\" && previousCommand && previousCommand.x === cmd.x && previousCommand.y === cmd.y) {\n subpath.pop();\n } else if (cmd.type === \"Z\") {\n if (firstCommand && secondCommand && previousCommand && firstCommand.type === \"M\" && secondCommand.type === \"L\" && previousCommand.type === \"L\" && previousCommand.x === firstCommand.x && previousCommand.y === firstCommand.y) {\n subpath.shift();\n subpath[0].type = \"M\";\n }\n if (i + 1 < commands.length) {\n subpaths.push([]);\n }\n }\n }\n commands = [].concat.apply([], subpaths);\n return commands;\n}\nfunction createSVGParsingOptions(options) {\n const defaultOptions = {\n decimalPlaces: 2,\n optimize: true,\n flipY: true,\n flipYBase: void 0,\n scale: 1,\n x: 0,\n y: 0\n };\n const newOptions = Object.assign({}, defaultOptions, options);\n return newOptions;\n}\nfunction createSVGOutputOptions(options) {\n if (parseInt(options) === options) {\n options = { decimalPlaces: options, flipY: false };\n }\n const defaultOptions = {\n decimalPlaces: 2,\n optimize: true,\n flipY: true,\n flipYBase: void 0\n };\n const newOptions = Object.assign({}, defaultOptions, options);\n return newOptions;\n}\nPath.prototype.fromSVG = function(pathData, options = {}) {\n if (typeof SVGPathElement !== \"undefined\" && pathData instanceof SVGPathElement) {\n pathData = pathData.getAttribute(\"d\");\n }\n options = createSVGParsingOptions(options);\n this.commands = [];\n const number = \"0123456789\";\n const supportedCommands = \"MmLlQqCcZzHhVv\";\n const unsupportedCommands = \"SsTtAa\";\n const sign = \"-+\";\n let command = {};\n let buffer = [\"\"];\n let isUnexpected = false;\n function parseBuffer2(buffer2) {\n return buffer2.filter((b) => b.length).map((b) => {\n let float = parseFloat(b);\n if (options.decimalPlaces || options.decimalPlaces === 0) {\n float = roundDecimal(float, options.decimalPlaces);\n }\n return float;\n });\n }\n function makeRelative(buffer2) {\n if (!this.commands.length) {\n return buffer2;\n }\n const lastCommand = this.commands[this.commands.length - 1];\n for (let i = 0; i < buffer2.length; i++) {\n buffer2[i] += lastCommand[i & 1 ? \"y\" : \"x\"];\n }\n return buffer2;\n }\n function applyCommand() {\n if (command.type === void 0) {\n return;\n }\n const commandType = command.type.toUpperCase();\n const relative = commandType !== \"Z\" && command.type.toUpperCase() !== command.type;\n let parsedBuffer = parseBuffer2(buffer);\n buffer = [\"\"];\n if (!parsedBuffer.length && commandType !== \"Z\") {\n return;\n }\n if (relative && commandType !== \"H\" && commandType !== \"V\") {\n parsedBuffer = makeRelative.apply(this, [parsedBuffer]);\n }\n const currentX = this.commands.length ? this.commands[this.commands.length - 1].x || 0 : 0;\n const currentY = this.commands.length ? this.commands[this.commands.length - 1].y || 0 : 0;\n switch (commandType) {\n case \"M\":\n this.moveTo(...parsedBuffer);\n break;\n case \"L\":\n this.lineTo(...parsedBuffer);\n break;\n case \"V\":\n for (let i = 0; i < parsedBuffer.length; i++) {\n let offset = 0;\n if (relative) {\n offset = this.commands.length ? this.commands[this.commands.length - 1].y || 0 : 0;\n }\n this.lineTo(currentX, parsedBuffer[i] + offset);\n }\n break;\n case \"H\":\n for (let i = 0; i < parsedBuffer.length; i++) {\n let offset = 0;\n if (relative) {\n offset = this.commands.length ? this.commands[this.commands.length - 1].x || 0 : 0;\n }\n this.lineTo(parsedBuffer[i] + offset, currentY);\n }\n break;\n case \"C\":\n this.bezierCurveTo(...parsedBuffer);\n break;\n case \"Q\":\n this.quadraticCurveTo(...parsedBuffer);\n break;\n case \"Z\":\n if (this.commands.length < 1 || this.commands[this.commands.length - 1].type !== \"Z\") {\n this.close();\n }\n break;\n }\n if (this.commands.length) {\n for (const prop in this.commands[this.commands.length - 1]) {\n if (this.commands[this.commands.length - 1][prop] === void 0) {\n this.commands[this.commands.length - 1][prop] = 0;\n }\n }\n }\n }\n for (let i = 0; i < pathData.length; i++) {\n const token = pathData.charAt(i);\n const lastBuffer = buffer[buffer.length - 1];\n if (number.indexOf(token) > -1) {\n buffer[buffer.length - 1] += token;\n } else if (sign.indexOf(token) > -1) {\n if (!command.type && !this.commands.length) {\n command.type = \"L\";\n }\n if (token === \"-\") {\n if (!command.type || lastBuffer.indexOf(\"-\") > 0) {\n isUnexpected = true;\n } else if (lastBuffer.length) {\n buffer.push(\"-\");\n } else {\n buffer[buffer.length - 1] = token;\n }\n } else {\n if (!command.type || lastBuffer.length > 0) {\n isUnexpected = true;\n } else {\n continue;\n }\n }\n } else if (supportedCommands.indexOf(token) > -1) {\n if (command.type) {\n applyCommand.apply(this);\n command = { type: token };\n } else {\n command.type = token;\n }\n } else if (unsupportedCommands.indexOf(token) > -1) {\n throw new Error(\"Unsupported path command: \" + token + \". Currently supported commands are \" + supportedCommands.split(\"\").join(\", \") + \".\");\n } else if (\" ,\t\\n\\r\\f\\v\".indexOf(token) > -1) {\n buffer.push(\"\");\n } else if (token === \".\") {\n if (!command.type || lastBuffer.indexOf(token) > -1) {\n isUnexpected = true;\n } else {\n buffer[buffer.length - 1] += token;\n }\n } else {\n isUnexpected = true;\n }\n if (isUnexpected) {\n throw new Error(\"Unexpected character: \" + token + \" at offset \" + i);\n }\n }\n applyCommand.apply(this);\n if (options.optimize) {\n this.commands = optimizeCommands(this.commands);\n }\n const flipY = options.flipY;\n let flipYBase = options.flipYBase;\n if (flipY === true && options.flipYBase === void 0) {\n const boundingBox = this.getBoundingBox();\n flipYBase = boundingBox.y1 + boundingBox.y2;\n }\n for (const i in this.commands) {\n const cmd = this.commands[i];\n for (const prop in cmd) {\n if ([\"x\", \"x1\", \"x2\"].includes(prop)) {\n this.commands[i][prop] = options.x + cmd[prop] * options.scale;\n } else if ([\"y\", \"y1\", \"y2\"].includes(prop)) {\n this.commands[i][prop] = options.y + (flipY ? flipYBase - cmd[prop] : cmd[prop]) * options.scale;\n }\n }\n }\n return this;\n};\nPath.fromSVG = function(path, options) {\n const newPath = new Path();\n return newPath.fromSVG(path, options);\n};\nPath.prototype.moveTo = function(x, y) {\n this.commands.push({\n type: \"M\",\n x,\n y\n });\n};\nPath.prototype.lineTo = function(x, y) {\n this.commands.push({\n type: \"L\",\n x,\n y\n });\n};\nPath.prototype.curveTo = Path.prototype.bezierCurveTo = function(x1, y1, x2, y2, x, y) {\n this.commands.push({\n type: \"C\",\n x1,\n y1,\n x2,\n y2,\n x,\n y\n });\n};\nPath.prototype.quadTo = Path.prototype.quadraticCurveTo = function(x1, y1, x, y) {\n this.commands.push({\n type: \"Q\",\n x1,\n y1,\n x,\n y\n });\n};\nPath.prototype.close = Path.prototype.closePath = function() {\n this.commands.push({\n type: \"Z\"\n });\n};\nPath.prototype.extend = function(pathOrCommands) {\n if (pathOrCommands.commands) {\n pathOrCommands = pathOrCommands.commands;\n } else if (pathOrCommands instanceof bbox_default) {\n const box = pathOrCommands;\n this.moveTo(box.x1, box.y1);\n this.lineTo(box.x2, box.y1);\n this.lineTo(box.x2, box.y2);\n this.lineTo(box.x1, box.y2);\n this.close();\n return;\n }\n Array.prototype.push.apply(this.commands, pathOrCommands);\n};\nPath.prototype.getBoundingBox = function() {\n const box = new bbox_default();\n let startX = 0;\n let startY = 0;\n let prevX = 0;\n let prevY = 0;\n for (let i = 0; i < this.commands.length; i++) {\n const cmd = this.commands[i];\n switch (cmd.type) {\n case \"M\":\n box.addPoint(cmd.x, cmd.y);\n startX = prevX = cmd.x;\n startY = prevY = cmd.y;\n break;\n case \"L\":\n box.addPoint(cmd.x, cmd.y);\n prevX = cmd.x;\n prevY = cmd.y;\n break;\n case \"Q\":\n box.addQuad(prevX, prevY, cmd.x1, cmd.y1, cmd.x, cmd.y);\n prevX = cmd.x;\n prevY = cmd.y;\n break;\n case \"C\":\n box.addBezier(prevX, prevY, cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y);\n prevX = cmd.x;\n prevY = cmd.y;\n break;\n case \"Z\":\n prevX = startX;\n prevY = startY;\n break;\n default:\n throw new Error(\"Unexpected path command \" + cmd.type);\n }\n }\n if (box.isEmpty()) {\n box.addPoint(0, 0);\n }\n return box;\n};\nPath.prototype.draw = function(ctx) {\n const layers = this._layers;\n if (layers && layers.length) {\n for (let l = 0; l < layers.length; l++) {\n this.draw.call(layers[l], ctx);\n }\n return;\n }\n const image = this._image;\n if (image) {\n ctx.drawImage(image.image, image.x, image.y, image.width, image.height);\n return;\n }\n ctx.beginPath();\n for (let i = 0; i < this.commands.length; i += 1) {\n const cmd = this.commands[i];\n if (cmd.type === \"M\") {\n ctx.moveTo(cmd.x, cmd.y);\n } else if (cmd.type === \"L\") {\n ctx.lineTo(cmd.x, cmd.y);\n } else if (cmd.type === \"C\") {\n ctx.bezierCurveTo(cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y);\n } else if (cmd.type === \"Q\") {\n ctx.quadraticCurveTo(cmd.x1, cmd.y1, cmd.x, cmd.y);\n } else if (cmd.type === \"Z\" && this.stroke && this.strokeWidth) {\n ctx.closePath();\n }\n }\n if (this.fill) {\n ctx.fillStyle = this.fill;\n ctx.fill();\n }\n if (this.stroke) {\n ctx.strokeStyle = this.stroke;\n ctx.lineWidth = this.strokeWidth;\n ctx.stroke();\n }\n};\nPath.prototype.toPathData = function(options) {\n options = createSVGOutputOptions(options);\n function floatToString(v) {\n const rounded = roundDecimal(v, options.decimalPlaces);\n if (Math.round(v) === rounded) {\n return \"\" + rounded;\n } else {\n return rounded.toFixed(options.decimalPlaces);\n }\n }\n function packValues() {\n let s = \"\";\n for (let i = 0; i < arguments.length; i += 1) {\n const v = arguments[i];\n if (v >= 0 && i > 0) {\n s += \" \";\n }\n s += floatToString(v);\n }\n return s;\n }\n let commandsCopy = this.commands;\n if (options.optimize) {\n commandsCopy = JSON.parse(JSON.stringify(this.commands));\n commandsCopy = optimizeCommands(commandsCopy);\n }\n const flipY = options.flipY;\n let flipYBase = options.flipYBase;\n if (flipY === true && flipYBase === void 0) {\n const tempPath = new Path();\n tempPath.extend(commandsCopy);\n const boundingBox = tempPath.getBoundingBox();\n flipYBase = boundingBox.y1 + boundingBox.y2;\n }\n let d = \"\";\n for (let i = 0; i < commandsCopy.length; i += 1) {\n const cmd = commandsCopy[i];\n if (cmd.type === \"M\") {\n d += \"M\" + packValues(\n cmd.x,\n flipY ? flipYBase - cmd.y : cmd.y\n );\n } else if (cmd.type === \"L\") {\n d += \"L\" + packValues(\n cmd.x,\n flipY ? flipYBase - cmd.y : cmd.y\n );\n } else if (cmd.type === \"C\") {\n d += \"C\" + packValues(\n cmd.x1,\n flipY ? flipYBase - cmd.y1 : cmd.y1,\n cmd.x2,\n flipY ? flipYBase - cmd.y2 : cmd.y2,\n cmd.x,\n flipY ? flipYBase - cmd.y : cmd.y\n );\n } else if (cmd.type === \"Q\") {\n d += \"Q\" + packValues(\n cmd.x1,\n flipY ? flipYBase - cmd.y1 : cmd.y1,\n cmd.x,\n flipY ? flipYBase - cmd.y : cmd.y\n );\n } else if (cmd.type === \"Z\") {\n d += \"Z\";\n }\n }\n return d;\n};\nPath.prototype.toSVG = function(options, pathData) {\n if (this._layers && this._layers.length) {\n console.warn(\"toSVG() does not support colr font layers yet\");\n }\n if (this._image) {\n console.warn(\"toSVG() does not support SVG glyphs yet\");\n }\n if (!pathData) {\n pathData = this.toPathData(options);\n }\n let svg = '<path d=\"';\n svg += pathData;\n svg += '\"';\n if (this.fill !== void 0 && this.fill !== \"black\") {\n if (this.fill === null) {\n svg += ' fill=\"none\"';\n } else {\n svg += ' fill=\"' + this.fill + '\"';\n }\n }\n if (this.stroke) {\n svg += ' stroke=\"' + this.stroke + '\" stroke-width=\"' + this.strokeWidth + '\"';\n }\n svg += \"/>\";\n return svg;\n};\nPath.prototype.toDOMElement = function(options, pathData) {\n if (this._layers && this._layers.length) {\n console.warn(\"toDOMElement() does not support colr font layers yet\");\n }\n if (!pathData) {\n pathData = this.toPathData(options);\n }\n const newPath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n newPath.setAttribute(\"d\", pathData);\n if (this.fill !== void 0 && this.fill !== \"black\") {\n if (this.fill === null) {\n newPath.setAttribute(\"fill\", \"none\");\n } else {\n newPath.setAttribute(\"fill\", this.fill);\n }\n }\n if (this.stroke) {\n newPath.setAttribute(\"stroke\", this.stroke);\n newPath.setAttribute(\"stroke-width\", this.strokeWidth);\n }\n return newPath;\n};\nvar path_default = Path;\n\n// src/check.mjs\nfunction fail(message) {\n throw new Error(message);\n}\nfunction argument(predicate, message) {\n if (!predicate) {\n fail(message);\n }\n}\nvar check_default = { fail, argument, assert: argument };\n\n// src/types.mjs\nvar LIMIT16 = 32768;\nvar LIMIT32 = 2147483648;\nvar MIN_16_16 = -(1 << 15);\nvar MAX_16_16 = (1 << 15) - 1 + 1 / (1 << 16);\nvar decode = {};\nvar encode = {};\nvar sizeOf = {};\nfunction constant(v) {\n return function() {\n return v;\n };\n}\nencode.BYTE = function(v) {\n check_default.argument(v >= 0 && v <= 255, \"Byte value should be between 0 and 255.\");\n return [v];\n};\nsizeOf.BYTE = constant(1);\nencode.CHAR = function(v) {\n return [v.charCodeAt(0)];\n};\nsizeOf.CHAR = constant(1);\nencode.CHARARRAY = function(v) {\n if (v === null || typeof v === \"undefined\") {\n v = \"\";\n console.warn(\"CHARARRAY with undefined or null value encountered and treated as an empty string. This is probably caused by a missing glyph name.\");\n }\n const b = [];\n for (let i = 0; i < v.length; i += 1) {\n b[i] = v.charCodeAt(i);\n }\n return b;\n};\nsizeOf.CHARARRAY = function(v) {\n if (typeof v === \"undefined\") {\n return 0;\n }\n return v.length;\n};\nencode.USHORT = function(v) {\n return [v >> 8 & 255, v & 255];\n};\nsizeOf.USHORT = constant(2);\nencode.SHORT = function(v) {\n if (v >= LIMIT16) {\n v = -(2 * LIMIT16 - v);\n }\n return [v >> 8 & 255, v & 255];\n};\nsizeOf.SHORT = constant(2);\nencode.UINT24 = function(v) {\n return [v >> 16 & 255, v >> 8 & 255, v & 255];\n};\nsizeOf.UINT24 = constant(3);\nencode.ULONG = function(v) {\n return [v >> 24 & 255, v >> 16 & 255, v >> 8 & 255, v & 255];\n};\nsizeOf.ULONG = constant(4);\nencode.LONG = function(v) {\n if (v >= LIMIT32) {\n v = -(2 * LIMIT32 - v);\n }\n return [v >> 24 & 255, v >> 16 & 255, v >> 8 & 255, v & 255];\n};\nsizeOf.LONG = constant(4);\nencode.FLOAT = function(v) {\n if (v > MAX_16_16 || v < MIN_16_16) {\n throw new Error(`Value ${v} is outside the range of representable values in 16.16 format`);\n }\n const fixedValue = Math.round(v * (1 << 16)) << 0;\n return encode.ULONG(fixedValue);\n};\nsizeOf.FLOAT = sizeOf.ULONG;\nencode.FIXED = encode.ULONG;\nsizeOf.FIXED = sizeOf.ULONG;\nencode.FWORD = encode.SHORT;\nsizeOf.FWORD = sizeOf.SHORT;\nencode.UFWORD = encode.USHORT;\nsizeOf.UFWORD = sizeOf.USHORT;\nencode.F2DOT14 = function(v) {\n return encode.USHORT(v * 16384);\n};\nsizeOf.F2DOT14 = sizeOf.USHORT;\nencode.LONGDATETIME = function(v) {\n return [0, 0, 0, 0, v >> 24 & 255, v >> 16 & 255, v >> 8 & 255, v & 255];\n};\nsizeOf.LONGDATETIME = constant(8);\nencode.TAG = function(v) {\n check_default.argument(v.length === 4, \"Tag should be exactly 4 ASCII characters.\");\n return [\n v.charCodeAt(0),\n v.charCodeAt(1),\n v.charCodeAt(2),\n v.charCodeAt(3)\n ];\n};\nsizeOf.TAG = constant(4);\nencode.Card8 = encode.BYTE;\nsizeOf.Card8 = sizeOf.BYTE;\nencode.Card16 = encode.USHORT;\nsizeOf.Card16 = sizeOf.USHORT;\nencode.OffSize = encode.BYTE;\nsizeOf.OffSize = sizeOf.BYTE;\nencode.SID = encode.USHORT;\nsizeOf.SID = sizeOf.USHORT;\nencode.NUMBER = function(v) {\n if (v >= -107 && v <= 107) {\n return [v + 139];\n } else if (v >= 108 && v <= 1131) {\n v = v - 108;\n return [(v >> 8) + 247, v & 255];\n } else if (v >= -1131 && v <= -108) {\n v = -v - 108;\n return [(v >> 8) + 251, v & 255];\n } else if (v >= -32768 && v <= 32767) {\n return encode.NUMBER16(v);\n } else {\n return encode.NUMBER32(v);\n }\n};\nsizeOf.NUMBER = function(v) {\n return encode.NUMBER(v).length;\n};\nencode.NUMBER16 = function(v) {\n return [28, v >> 8 & 255, v & 255];\n};\nsizeOf.NUMBER16 = constant(3);\nencode.NUMBER32 = function(v) {\n return [29, v >> 24 & 255, v >> 16 & 255, v >> 8 & 255, v & 255];\n};\nsizeOf.NUMBER32 = constant(5);\nencode.REAL = function(v) {\n let value = v.toString();\n const m = /\\.(\\d*?)(?:9{5,20}|0{5,20})\\d{0,2}(?:e(.+)|$)/.exec(value);\n if (m) {\n const epsilon = parseFloat(\"1e\" + ((m[2] ? +m[2] : 0) + m[1].length));\n value = (Math.round(v * epsilon) / epsilon).toString();\n }\n let nibbles = \"\";\n for (let i = 0, ii = value.length; i < ii; i += 1) {\n const c = value[i];\n if (c === \"e\") {\n nibbles += value[++i] === \"-\" ? \"c\" : \"b\";\n } else if (c === \".\") {\n nibbles += \"a\";\n } else if (c === \"-\") {\n nibbles += \"e\";\n } else {\n nibbles += c;\n }\n }\n nibbles += nibbles.length & 1 ? \"f\" : \"ff\";\n const out = [30];\n for (let i = 0, ii = nibbles.length; i < ii; i += 2) {\n out.push(parseInt(nibbles.substr(i, 2), 16));\n }\n return out;\n};\nsizeOf.REAL = function(v) {\n return encode.REAL(v).length;\n};\nencode.NAME = encode.CHARARRAY;\nsizeOf.NAME = sizeOf.CHARARRAY;\nencode.STRING = encode.CHARARRAY;\nsizeOf.STRING = sizeOf.CHARARRAY;\ndecode.UTF8 = function(data, offset, numBytes) {\n const codePoints = [];\n const numChars = numBytes;\n for (let j = 0; j < numChars; j++, offset += 1) {\n codePoints[j] = data.getUint8(offset);\n }\n return String.fromCharCode.apply(null, codePoints);\n};\ndecode.UTF16 = function(data, offset, numBytes) {\n const codePoints = [];\n const numChars = numBytes / 2;\n for (let j = 0; j < numChars; j++, offset += 2) {\n codePoints[j] = data.getUint16(offset);\n }\n return String.fromCharCode.apply(null, codePoints);\n};\nencode.UTF16 = function(v) {\n const b = [];\n for (let i = 0; i < v.length; i += 1) {\n const codepoint = v.charCodeAt(i);\n b[b.length] = codepoint >> 8 & 255;\n b[b.length] = codepoint & 255;\n }\n return b;\n};\nsizeOf.UTF16 = function(v) {\n return v.length * 2;\n};\nvar eightBitMacEncodings = {\n \"x-mac-croatian\": (\n // Python: 'mac_croatian'\n \"\\xC4\\xC5\\xC7\\xC9\\xD1\\xD6\\xDC\\xE1\\xE0\\xE2\\xE4\\xE3\\xE5\\xE7\\xE9\\xE8\\xEA\\xEB\\xED\\xEC\\xEE\\xEF\\xF1\\xF3\\xF2\\xF4\\xF6\\xF5\\xFA\\xF9\\xFB\\xFC\\u2020\\xB0\\xA2\\xA3\\xA7\\u2022\\xB6\\xDF\\xAE\\u0160\\u2122\\xB4\\xA8\\u2260\\u017D\\xD8\\u221E\\xB1\\u2264\\u2265\\u2206\\xB5\\u2202\\u2211\\u220F\\u0161\\u222B\\xAA\\xBA\\u03A9\\u017E\\xF8\\xBF\\xA1\\xAC\\u221A\\u0192\\u2248\\u0106\\xAB\\u010C\\u2026\\xA0\\xC0\\xC3\\xD5\\u0152\\u0153\\u0110\\u2014\\u201C\\u201D\\u2018\\u2019\\xF7\\u25CA\\uF8FF\\xA9\\u2044\\u20AC\\u2039\\u203A\\xC6\\xBB\\u2013\\xB7\\u201A\\u201E\\u2030\\xC2\\u0107\\xC1\\u010D\\xC8\\xCD\\xCE\\xCF\\xCC\\xD3\\xD4\\u0111\\xD2\\xDA\\xDB\\xD9\\u0131\\u02C6\\u02DC\\xAF\\u03C0\\xCB\\u02DA\\xB8\\xCA\\xE6\\u02C7\"\n ),\n \"x-mac-cyrillic\": (\n // Python: 'mac_cyrillic'\n \"\\u0410\\u0411\\u0412\\u0413\\u0414\\u0415\\u0416\\u0417\\u0418\\u0419\\u041A\\u041B\\u041C\\u041D\\u041E\\u041F\\u0420\\u0421\\u0422\\u0423\\u0424\\u0425\\u0426\\u0427\\u0428\\u0429\\u042A\\u042B\\u042C\\u042D\\u042E\\u042F\\u2020\\xB0\\u0490\\xA3\\xA7\\u2022\\xB6\\u0406\\xAE\\xA9\\u2122\\u0402\\u0452\\u2260\\u0403\\u0453\\u221E\\xB1\\u2264\\u2265\\u0456\\xB5\\u0491\\u0408\\u0404\\u0454\\u0407\\u0457\\u0409\\u0459\\u040A\\u045A\\u0458\\u0405\\xAC\\u221A\\u0192\\u2248\\u2206\\xAB\\xBB\\u2026\\xA0\\u040B\\u045B\\u040C\\u045C\\u0455\\u2013\\u2014\\u201C\\u201D\\u2018\\u2019\\xF7\\u201E\\u040E\\u045E\\u040F\\u045F\\u2116\\u0401\\u0451\\u044F\\u0430\\u0431\\u0432\\u0433\\u0434\\u0435\\u0436\\u0437\\u0438\\u0439\\u043A\\u043B\\u043C\\u043D\\u043E\\u043F\\u0440\\u0441\\u0442\\u0443\\u0444\\u0445\\u0446\\u0447\\u0448\\u0449\\u044A\\u044B\\u044C\\u044D\\u044E\"\n ),\n \"x-mac-gaelic\": (\n // http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/GAELIC.TXT\n \"\\xC4\\xC5\\xC7\\xC9\\xD1\\xD6\\xDC\\xE1\\xE0\\xE2\\xE4\\xE3\\xE5\\xE7\\xE9\\xE8\\xEA\\xEB\\xED\\xEC\\xEE\\xEF\\xF1\\xF3\\xF2\\xF4\\xF6\\xF5\\xFA\\xF9\\xFB\\xFC\\u2020\\xB0\\xA2\\xA3\\xA7\\u2022\\xB6\\xDF\\xAE\\xA9\\u2122\\xB4\\xA8\\u2260\\xC6\\xD8\\u1E02\\xB1\\u2264\\u2265\\u1E03\\u010A\\u010B\\u1E0A\\u1E0B\\u1E1E\\u1E1F\\u0120\\u0121\\u1E40\\xE6\\xF8\\u1E41\\u1E56\\u1E57\\u027C\\u0192\\u017F\\u1E60\\xAB\\xBB\\u2026\\xA0\\xC0\\xC3\\xD5\\u0152\\u0153\\u2013\\u2014\\u201C\\u201D\\u2018\\u2019\\u1E61\\u1E9B\\xFF\\u0178\\u1E6A\\u20AC\\u2039\\u203A\\u0176\\u0177\\u1E6B\\xB7\\u1EF2\\u1EF3\\u204A\\xC2\\xCA\\xC1\\xCB\\xC8\\xCD\\xCE\\xCF\\xCC\\xD3\\xD4\\u2663\\xD2\\xDA\\xDB\\xD9\\u0131\\xDD\\xFD\\u0174\\u0175\\u1E84\\u1E85\\u1E80\\u1E81\\u1E82\\u1E83\"\n ),\n \"x-mac-greek\": (\n // Python: 'mac_greek'\n \"\\xC4\\xB9\\xB2\\xC9\\xB3\\xD6\\xDC\\u0385\\xE0\\xE2\\xE4\\u0384\\xA8\\xE7\\xE9\\xE8\\xEA\\xEB\\xA3\\u2122\\xEE\\xEF\\u2022\\xBD\\u2030\\xF4\\xF6\\xA6\\u20AC\\xF9\\xFB\\xFC\\u2020\\u0393\\u0394\\u0398\\u039B\\u039E\\u03A0\\xDF\\xAE\\xA9\\u03A3\\u03AA\\xA7\\u2260\\xB0\\xB7\\u0391\\xB1\\u2264\\u2265\\xA5\\u0392\\u0395\\u0396\\u0397\\u0399\\u039A\\u039C\\u03A6\\u03AB\\u03A8\\u03A9\\u03AC\\u039D\\xAC\\u039F\\u03A1\\u2248\\u03A4\\xAB\\xBB\\u2026\\xA0\\u03A5\\u03A7\\u0386\\u0388\\u0153\\u2013\\u2015\\u201C\\u201D\\u2018\\u2019\\xF7\\u0389\\u038A\\u038C\\u038E\\u03AD\\u03AE\\u03AF\\u03CC\\u038F\\u03CD\\u03B1\\u03B2\\u03C8\\u03B4\\u03B5\\u03C6\\u03B3\\u03B7\\u03B9\\u03BE\\u03BA\\u03BB\\u03BC\\u03BD\\u03BF\\u03C0\\u03CE\\u03C1\\u03C3\\u03C4\\u03B8\\u03C9\\u03C2\\u03C7\\u03C5\\u03B6\\u03CA\\u03CB\\u0390\\u03B0\\xAD\"\n ),\n \"x-mac-icelandic\": (\n // Python: 'mac_iceland'\n \"\\xC4\\xC5\\xC7\\xC9\\xD1\\xD6\\xDC\\xE1\\xE0\\xE2\\xE4\\xE3\\xE5\\xE7\\xE9\\xE8\\xEA\\xEB\\xED\\xEC\\xEE\\xEF\\xF1\\xF3\\xF2\\xF4\\xF6\\xF5\\xFA\\xF9\\xFB\\xFC\\xDD\\xB0\\xA2\\xA3\\xA7\\u2022\\xB6\\xDF\\xAE\\xA9\\u2122\\xB4\\xA8\\u2260\\xC6\\xD8\\u221E\\xB1\\u2264\\u2265\\xA5\\xB5\\u2202\\u2211\\u220F\\u03C0\\u222B\\xAA\\xBA\\u03A9\\xE6\\xF8\\xBF\\xA1\\xAC\\u221A\\u0192\\u2248\\u2206\\xAB\\xBB\\u2026\\xA0\\xC0\\xC3\\xD5\\u0152\\u0153\\u2013\\u2014\\u201C\\u201D\\u2018\\u2019\\xF7\\u25CA\\xFF\\u0178\\u2044\\u20AC\\xD0\\xF0\\xDE\\xFE\\xFD\\xB7\\u201A\\u201E\\u2030\\xC2\\xCA\\xC1\\xCB\\xC8\\xCD\\xCE\\xCF\\xCC\\xD3\\xD4\\uF8FF\\xD2\\xDA\\xDB\\xD9\\u0131\\u02C6\\u02DC\\xAF\\u02D8\\u02D9\\u02DA\\xB8\\u02DD\\u02DB\\u02C7\"\n ),\n \"x-mac-inuit\": (\n // http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/INUIT.TXT\n \"\\u1403\\u1404\\u1405\\u1406\\u140A\\u140B\\u1431\\u1432\\u1433\\u1434\\u1438\\u1439\\u1449\\u144E\\u144F\\u1450\\u1451\\u1455\\u1456\\u1466\\u146D\\u146E\\u146F\\u1470\\u1472\\u1473\\u1483\\u148B\\u148C\\u148D\\u148E\\u1490\\u1491\\xB0\\u14A1\\u14A5\\u14A6\\u2022\\xB6\\u14A7\\xAE\\xA9\\u2122\\u14A8\\u14AA\\u14AB\\u14BB\\u14C2\\u14C3\\u14C4\\u14C5\\u14C7\\u14C8\\u14D0\\u14EF\\u14F0\\u14F1\\u14F2\\u14F4\\u14F5\\u1505\\u14D5\\u14D6\\u14D7\\u14D8\\u14DA\\u14DB\\u14EA\\u1528\\u1529\\u152A\\u152B\\u152D\\u2026\\xA0\\u152E\\u153E\\u1555\\u1556\\u1557\\u2013\\u2014\\u201C\\u201D\\u2018\\u2019\\u1558\\u1559\\u155A\\u155D\\u1546\\u1547\\u1548\\u1549\\u154B\\u154C\\u1550\\u157F\\u1580\\u1581\\u1582\\u1583\\u1584\\u1585\\u158F\\u1590\\u1591\\u1592\\u1593\\u1594\\u1595\\u1671\\u1672\\u1673\\u1674\\u1675\\u1676\\u1596\\u15A0\\u15A1\\u15A2\\u15A3\\u15A4\\u15A5\\u15A6\\u157C\\u0141\\u0142\"\n ),\n \"x-mac-ce\": (\n // Python: 'mac_latin2'\n \"\\xC4\\u0100\\u0101\\xC9\\u0104\\xD6\\xDC\\xE1\\u0105\\u010C\\xE4\\u010D\\u0106\\u0107\\xE9\\u0179\\u017A\\u010E\\xED\\u010F\\u0112\\u0113\\u0116\\xF3\\u0117\\xF4\\xF6\\xF5\\xFA\\u011A\\u011B\\xFC\\u2020\\xB0\\u0118\\xA3\\xA7\\u2022\\xB6\\xDF\\xAE\\xA9\\u2122\\u0119\\xA8\\u2260\\u0123\\u012E\\u012F\\u012A\\u2264\\u2265\\u012B\\u0136\\u2202\\u2211\\u0142\\u013B\\u013C\\u013D\\u013E\\u0139\\u013A\\u0145\\u0146\\u0143\\xAC\\u221A\\u0144\\u0147\\u2206\\xAB\\xBB\\u2026\\xA0\\u0148\\u0150\\xD5\\u0151\\u014C\\u2013\\u2014\\u201C\\u201D\\u2018\\u2019\\xF7\\u25CA\\u014D\\u0154\\u0155\\u0158\\u2039\\u203A\\u0159\\u0156\\u0157\\u0160\\u201A\\u201E\\u0161\\u015A\\u015B\\xC1\\u0164\\u0165\\xCD\\u017D\\u017E\\u016A\\xD3\\xD4\\u016B\\u016E\\xDA\\u016F\\u0170\\u0171\\u0172\\u0173\\xDD\\xFD\\u0137\\u017B\\u0141\\u017C\\u0122\\u02C7\"\n ),\n macintosh: (\n // Python: 'mac_roman'\n \"\\xC4\\xC5\\xC7\\xC9\\xD1\\xD6\\xDC\\xE1\\xE0\\xE2\\xE4\\xE3\\xE5\\xE7\\xE9\\xE8\\xEA\\xEB\\xED\\xEC\\xEE\\xEF\\xF1\\xF3\\xF2\\xF4\\xF6\\xF5\\xFA\\xF9\\xFB\\xFC\\u2020\\xB0\\xA2\\xA3\\xA7\\u2022\\xB6\\xDF\\xAE\\xA9\\u2122\\xB4\\xA8\\u2260\\xC6\\xD8\\u221E\\xB1\\u2264\\u2265\\xA5\\xB5\\u2202\\u2211\\u220F\\u03C0\\u222B\\xAA\\xBA\\u03A9\\xE6\\xF8\\xBF\\xA1\\xAC\\u221A\\u0192\\u2248\\u2206\\xAB\\xBB\\u2026\\xA0\\xC0\\xC3\\xD5\\u0152\\u0153\\u2013\\u2014\\u201C\\u201D\\u2018\\u2019\\xF7\\u25CA\\xFF\\u0178\\u2044\\u20AC\\u2039\\u203A\\uFB01\\uFB02\\u2021\\xB7\\u201A\\u201E\\u2030\\xC2\\xCA\\xC1\\xCB\\xC8\\xCD\\xCE\\xCF\\xCC\\xD3\\xD4\\uF8FF\\xD2\\xDA\\xDB\\xD9\\u0131\\u02C6\\u02DC\\xAF\\u02D8\\u02D9\\u02DA\\xB8\\u02DD\\u02DB\\u02C7\"\n ),\n \"x-mac-romanian\": (\n // Python: 'mac_romanian'\n \"\\xC4\\xC5\\xC7\\xC9\\xD1\\xD6\\xDC\\xE1\\xE0\\xE2\\xE4\\xE3\\xE5\\xE7\\xE9\\xE8\\xEA\\xEB\\xED\\xEC\\xEE\\xEF\\xF1\\xF3\\xF2\\xF4\\xF6\\xF5\\xFA\\xF9\\xFB\\xFC\\u2020\\xB0\\xA2\\xA3\\xA7\\u2022\\xB6\\xDF\\xAE\\xA9\\u2122\\xB4\\xA8\\u2260\\u0102\\u0218\\u221E\\xB1\\u2264\\u2265\\xA5\\xB5\\u2202\\u2211\\u220F\\u03C0\\u222B\\xAA\\xBA\\u03A9\\u0103\\u0219\\xBF\\xA1\\xAC\\u221A\\u0192\\u2248\\u2206\\xAB\\xBB\\u2026\\xA0\\xC0\\xC3\\xD5\\u0152\\u0153\\u2013\\u2014\\u201C\\u201D\\u2018\\u2019\\xF7\\u25CA\\xFF\\u0178\\u2044\\u20AC\\u2039\\u203A\\u021A\\u021B\\u2021\\xB7\\u201A\\u201E\\u2030\\xC2\\xCA\\xC1\\xCB\\xC8\\xCD\\xCE\\xCF\\xCC\\xD3\\xD4\\uF8FF\\xD2\\xDA\\xDB\\xD9\\u0131\\u02C6\\u02DC\\xAF\\u02D8\\u02D9\\u02DA\\xB8\\u02DD\\u02DB\\u02C7\"\n ),\n \"x-mac-turkish\": (\n // Python: 'mac_turkish'\n \"\\xC4\\xC5\\xC7\\xC9\\xD1\\xD6\\xDC\\xE1\\xE0\\xE2\\xE4\\xE3\\xE5\\xE7\\xE9\\xE8\\xEA\\xEB\\xED\\xEC\\xEE\\xEF\\xF1\\xF3\\xF2\\xF4\\xF6\\xF5\\xFA\\xF9\\xFB\\xFC\\u2020\\xB0\\xA2\\xA3\\xA7\\u2022\\xB6\\xDF\\xAE\\xA9\\u2122\\xB4\\xA8\\u2260\\xC6\\xD8\\u221E\\xB1\\u2264\\u2265\\xA5\\xB5\\u2202\\u2211\\u220F\\u03C0\\u222B\\xAA\\xBA\\u03A9\\xE6\\xF8\\xBF\\xA1\\xAC\\u221A\\u0192\\u2248\\u2206\\xAB\\xBB\\u2026\\xA0\\xC0\\xC3\\xD5\\u0152\\u0153\\u2013\\u2014\\u201C\\u201D\\u2018\\u2019\\xF7\\u25CA\\xFF\\u0178\\u011E\\u011F\\u0130\\u0131\\u015E\\u015F\\u2021\\xB7\\u201A\\u201E\\u2030\\xC2\\xCA\\xC1\\xCB\\xC8\\xCD\\xCE\\xCF\\xCC\\xD3\\xD4\\uF8FF\\xD2\\xDA\\xDB\\xD9\\uF8A0\\u02C6\\u02DC\\xAF\\u02D8\\u02D9\\u02DA\\xB8\\u02DD\\u02DB\\u02C7\"\n )\n};\ndecode.MACSTRING = function(dataView, offset, dataLength, encoding) {\n const table = eightBitMacEncodings[encoding];\n if (table === void 0) {\n return void 0;\n }\n let result = \"\";\n for (let i = 0; i < dataLength; i++) {\n const c = dataView.getUint8(offset + i);\n if (c <= 127) {\n result += String.fromCharCode(c);\n } else {\n result += table[c & 127];\n }\n }\n return result;\n};\nvar macEncodingTableCache = typeof WeakMap === \"function\" && /* @__PURE__ */ new WeakMap();\nvar macEncodingCacheKeys;\nvar getMacEncodingTable = function(encoding) {\n if (!macEncodingCacheKeys) {\n macEncodingCacheKeys = {};\n for (let e in eightBitMacEncodings) {\n macEncodingCacheKeys[e] = new String(e);\n }\n }\n const cacheKey = macEncodingCacheKeys[encoding];\n if (cacheKey === void 0) {\n return void 0;\n }\n if (macEncodingTableCache) {\n const cachedTable = macEncodingTableCache.get(cacheKey);\n if (cachedTable !== void 0) {\n return cachedTable;\n }\n }\n const decodingTable = eightBitMacEncodings[encoding];\n if (decodingTable === void 0) {\n return void 0;\n }\n const encodingTable = {};\n for (let i = 0; i < decodingTable.length; i++) {\n encodingTable[decodingTable.charCodeAt(i)] = i + 128;\n }\n if (macEncodingTableCache) {\n macEncodingTableCache.set(cacheKey, encodingTable);\n }\n return encodingTable;\n};\nencode.MACSTRING = function(str, encoding) {\n const table = getMacEncodingTable(encoding);\n if (table === void 0) {\n return void 0;\n }\n const result = [];\n for (let i = 0; i < str.length; i++) {\n let c = str.charCodeAt(i);\n if (c >= 128) {\n c = table[c];\n if (c === void 0) {\n return void 0;\n }\n }\n result[i] = c;\n }\n return result;\n};\nsizeOf.MACSTRING = function(str, encoding) {\n const b = encode.MACSTRING(str, encoding);\n if (b !== void 0) {\n return b.length;\n } else {\n return 0;\n }\n};\nfunction isByteEncodable(value) {\n return value >= -128 && value <= 127;\n}\nfunction encodeVarDeltaRunAsZeroes(deltas, pos, result) {\n let runLength = 0;\n const numDeltas = deltas.length;\n while (pos < numDeltas && runLength < 64 && deltas[pos] === 0) {\n ++pos;\n ++runLength;\n }\n result.push(128 | runLength - 1);\n return pos;\n}\nfunction encodeVarDeltaRunAsBytes(deltas, offset, result) {\n let runLength = 0;\n const numDeltas = deltas.length;\n let pos = offset;\n while (pos < numDeltas && runLength < 64) {\n const value = deltas[pos];\n if (!isByteEncodable(value)) {\n break;\n }\n if (value === 0 && pos + 1 < numDeltas && deltas[pos + 1] === 0) {\n break;\n }\n ++pos;\n ++runLength;\n }\n result.push(runLength - 1);\n for (let i = offset; i < pos; ++i) {\n result.push(deltas[i] + 256 & 255);\n }\n return pos;\n}\nfunction encodeVarDeltaRunAsWords(deltas, offset, result) {\n let runLength = 0;\n const numDeltas = deltas.length;\n let pos = offset;\n while (pos < numDeltas && runLength < 64) {\n const value = deltas[pos];\n if (value === 0) {\n break;\n }\n if (isByteEncodable(value) && pos + 1 < numDeltas && isByteEncodable(deltas[pos + 1])) {\n break;\n }\n ++pos;\n ++runLength;\n }\n result.push(64 | runLength - 1);\n for (let i = offset; i < pos; ++i) {\n const val = deltas[i];\n result.push(val + 65536 >> 8 & 255, val + 256 & 255);\n }\n return pos;\n}\nencode.VARDELTAS = function(deltas) {\n let pos = 0;\n const result = [];\n while (pos < deltas.length) {\n const value = deltas[pos];\n if (value === 0) {\n pos = encodeVarDeltaRunAsZeroes(deltas, pos, result);\n } else if (value >= -128 && value <= 127) {\n pos = encodeVarDeltaRunAsBytes(deltas, pos, result);\n } else {\n pos = encodeVarDeltaRunAsWords(deltas, pos, result);\n }\n }\n return result;\n};\nencode.INDEX = function(l) {\n let offset = 1;\n const offsets = [offset];\n const data = [];\n for (let i = 0; i < l.length; i += 1) {\n const v = encode.OBJECT(l[i]);\n Array.prototype.push.apply(data, v);\n offset += v.length;\n offsets.push(offset);\n }\n if (data.length === 0) {\n return [0, 0];\n }\n const encodedOffsets = [];\n const offSize = 1 + Math.floor(Math.log(offset) / Math.log(2)) / 8 | 0;\n const offsetEncoder = [void 0, encode.BYTE, encode.USHORT, encode.UINT24, encode.ULONG][offSize];\n for (let i = 0; i < offsets.length; i += 1) {\n const encodedOffset = offsetEncoder(offsets[i]);\n Array.prototype.push.apply(encodedOffsets, encodedOffset);\n }\n return Array.prototype.concat(\n encode.Card16(l.length),\n encode.OffSize(offSize),\n encodedOffsets,\n data\n );\n};\nsizeOf.INDEX = function(v) {\n return encode.INDEX(v).length;\n};\nencode.DICT = function(m) {\n let d = [];\n const keys = Object.keys(m);\n const length = keys.length;\n for (let i = 0; i < length; i += 1) {\n const k = parseInt(keys[i], 0);\n const v = m[k];\n const enc1 = encode.OPERAND(v.value, v.type);\n const enc2 = encode.OPERATOR(k);\n for (let j = 0; j < enc1.length; j++) {\n d.push(enc1[j]);\n }\n for (let j = 0; j < enc2.length; j++) {\n d.push(enc2[j]);\n }\n }\n return d;\n};\nsizeOf.DICT = function(m) {\n return encode.DICT(m).length;\n};\nencode.OPERATOR = function(v) {\n if (v < 1200) {\n return [v];\n } else {\n return [12, v - 1200];\n }\n};\nencode.OPERAND = function(v, type) {\n let d = [];\n if (Array.isArray(type)) {\n for (let i = 0; i < type.length; i += 1) {\n check_default.argument(v.length === type.length, \"Not enough arguments given for type\" + type);\n const enc1 = encode.OPERAND(v[i], type[i]);\n for (let j = 0; j < enc1.length; j++) {\n d.push(enc1[j]);\n }\n }\n } else {\n if (type === \"SID\") {\n const enc1 = encode.NUMBER(v);\n for (let j = 0; j < enc1.length; j++) {\n d.push(enc1[j]);\n }\n } else if (type === \"offset\") {\n const enc1 = encode.NUMBER32(v);\n for (let j = 0; j < enc1.length; j++) {\n d.push(enc1[j]);\n }\n } else if (type === \"number\") {\n const enc1 = encode.NUMBER(v);\n for (let j = 0; j < enc1.length; j++) {\n d.push(enc1[j]);\n }\n } else if (type === \"real\") {\n const enc1 = encode.REAL(v);\n for (let j = 0; j < enc1.length; j++) {\n d.push(enc1[j]);\n }\n } else {\n throw new Error(\"Unknown operand type \" + type);\n }\n }\n return d;\n};\nencode.OP = encode.BYTE;\nsizeOf.OP = sizeOf.BYTE;\nvar wmm = typeof WeakMap === \"function\" && /* @__PURE__ */ new WeakMap();\nencode.CHARSTRING = function(ops) {\n if (wmm) {\n const cachedValue = wmm.get(ops);\n if (cachedValue !== void 0) {\n return cachedValue;\n }\n }\n let d = [];\n const length = ops.length;\n for (let i = 0; i < length; i += 1) {\n const op = ops[i];\n const enc1 = encode[op.type](op.value);\n for (let j = 0; j < enc1.length; j++) {\n d.push(enc1[j]);\n }\n }\n if (wmm) {\n wmm.set(ops, d);\n }\n return d;\n};\nsizeOf.CHARSTRING = function(ops) {\n return encode.CHARSTRING(ops).length;\n};\nencode.OBJECT = function(v) {\n const encodingFunction = encode[v.type];\n check_default.argument(encodingFunction !== void 0, \"No encoding function for type \" + v.type);\n return encodingFunction(v.value);\n};\nsizeOf.OBJECT = function(v) {\n const sizeOfFunction = sizeOf[v.type];\n check_default.argument(sizeOfFunction !== void 0, \"No sizeOf function for type \" + v.type);\n return sizeOfFunction(v.value);\n};\nencode.TABLE = function(table) {\n let d = [];\n const length = (table.fields || []).length;\n const subtables = [];\n const subtableOffsets = [];\n for (let i = 0; i < length; i += 1) {\n const field = table.fields[i];\n const encodingFunction = encode[field.type];\n check_default.argument(encodingFunction !== void 0, \"No encoding function for field type \" + field.type + \" (\" + field.name + \")\");\n let value = table[field.name];\n if (value === void 0) {\n value = field.value;\n }\n const bytes = encodingFunction(value);\n if (field.type === \"TABLE\") {\n if (value.fields !== null) {\n subtableOffsets.push(d.length);\n subtables.push(bytes);\n }\n d.push(...[0, 0]);\n } else {\n for (let j = 0; j < bytes.length; j++) {\n d.push(bytes[j]);\n }\n }\n }\n for (let i = 0; i < subtables.length; i += 1) {\n const o = subtableOffsets[i];\n const offset = d.length;\n check_default.argument(offset < 65536, \"Table \" + table.tableName + \" too big.\");\n d[o] = offset >> 8;\n d[o + 1] = offset & 255;\n for (let j = 0; j < subtables[i].length; j++) {\n d.push(subtables[i][j]);\n }\n }\n return d;\n};\nsizeOf.TABLE = function(table) {\n let numBytes = 0;\n const length = (table.fields || []).length;\n for (let i = 0; i < length; i += 1) {\n const field = table.fields[i];\n const sizeOfFunction = sizeOf[field.type];\n check_default.argument(sizeOfFunction !== void 0, \"No sizeOf function for field type \" + field.type + \" (\" + field.name + \")\");\n let value = table[field.name];\n if (value === void 0) {\n value = field.value;\n }\n numBytes += sizeOfFunction(value);\n if (field.type === \"TABLE\") {\n numBytes += 2;\n }\n }\n return numBytes;\n};\nencode.RECORD = encode.TABLE;\nsizeOf.RECORD = sizeOf.TABLE;\nencode.LITERAL = function(v) {\n return v;\n};\nsizeOf.LITERAL = function(v) {\n return v.length;\n};\n\n// src/table.mjs\nfunction Table(tableName, fields, options) {\n if (fields && fields.length) {\n for (let i = 0; i < fields.length; i += 1) {\n const field = fields[i];\n this[field.name] = field.value;\n }\n }\n this.tableName = tableName;\n this.fields = fields;\n if (options) {\n const optionKeys = Object.keys(options);\n for (let i = 0; i < optionKeys.length; i += 1) {\n const k = optionKeys[i];\n const v = options[k];\n if (this[k] !== void 0) {\n this[k] = v;\n }\n }\n }\n}\nTable.prototype.encode = function() {\n return encode.TABLE(this);\n};\nTable.prototype.sizeOf = function() {\n return sizeOf.TABLE(this);\n};\nfunction ushortList(itemName, list, count) {\n if (count === void 0) {\n count = list.length;\n }\n const fields = new Array(list.length + 1);\n fields[0] = { name: itemName + \"Count\", type: \"USHORT\", value: count };\n for (let i = 0; i < list.length; i++) {\n fields[i + 1] = { name: itemName + i, type: \"USHORT\", value: list[i] };\n }\n return fields;\n}\nfunction tableList(itemName, records, itemCallback) {\n const count = records.length;\n const fields = new Array(count + 1);\n fields[0] = { name: itemName + \"Count\", type: \"USHORT\", value: count };\n for (let i = 0; i < count; i++) {\n fields[i + 1] = { name: itemName + i, type: \"TABLE\", value: itemCallback(records[i], i) };\n }\n return fields;\n}\nfunction recordList(itemName, records, itemCallback) {\n const count = records.length;\n let fields = [];\n fields[0] = { name: itemName + \"Count\", type: \"USHORT\", value: count };\n for (let i = 0; i < count; i++) {\n fields = fields.concat(itemCallback(records[i], i));\n }\n return fields;\n}\nfunction Coverage(coverageTable) {\n if (coverageTable.format === 1) {\n Table.call(\n this,\n \"coverageTable\",\n [{ name: \"coverageFormat\", type: \"USHORT\", value: 1 }].concat(ushortList(\"glyph\", coverageTable.glyphs))\n );\n } else if (coverageTable.format === 2) {\n Table.call(\n this,\n \"coverageTable\",\n [{ name: \"coverageFormat\", type: \"USHORT\", value: 2 }].concat(recordList(\"rangeRecord\", coverageTable.ranges, function(RangeRecord, i) {\n return [\n { name: \"startGlyphID\" + i, type: \"USHORT\", value: RangeRecord.start },\n { name: \"endGlyphID\" + i, type: \"USHORT\", value: RangeRecord.end },\n { name: \"startCoverageIndex\" + i, type: \"USHORT\", value: RangeRecord.index }\n ];\n }))\n );\n } else {\n check_default.assert(false, \"Coverage format must be 1 or 2.\");\n }\n}\nCoverage.prototype = Object.create(Table.prototype);\nCoverage.prototype.constructor = Coverage;\nfunction ScriptList(scriptListTable) {\n Table.call(\n this,\n \"scriptListTable\",\n recordList(\"scriptRecord\", scriptListTable, function(scriptRecord, i) {\n const script = scriptRecord.script;\n let defaultLangSys = script.defaultLangSys;\n check_default.assert(!!defaultLangSys, \"Unable to write GSUB: script \" + scriptRecord.tag + \" has no default language system.\");\n return [\n { name: \"scriptTag\" + i, type: \"TAG\", value: scriptRecord.tag },\n { name: \"script\" + i, type: \"TABLE\", value: new Table(\"scriptTable\", [\n { name: \"defaultLangSys\", type: \"TABLE\", value: new Table(\"defaultLangSys\", [\n { name: \"lookupOrder\", type: \"USHORT\", value: 0 },\n { name: \"reqFeatureIndex\", type: \"USHORT\", value: defaultLangSys.reqFeatureIndex }\n ].concat(ushortList(\"featureIndex\", defaultLangSys.featureIndexes))) }\n ].concat(recordList(\"langSys\", script.langSysRecords, function(langSysRecord, i2) {\n const langSys = langSysRecord.langSys;\n return [\n { name: \"langSysTag\" + i2, type: \"TAG\", value: langSysRecord.tag },\n { name: \"langSys\" + i2, type: \"TABLE\", value: new Table(\"langSys\", [\n { name: \"lookupOrder\", type: \"USHORT\", value: 0 },\n { name: \"reqFeatureIndex\", type: \"USHORT\", value: langSys.reqFeatureIndex }\n ].concat(ushortList(\"featureIndex\", langSys.featureIndexes))) }\n ];\n }))) }\n ];\n })\n );\n}\nScriptList.prototype = Object.create(Table.prototype);\nScriptList.prototype.constructor = ScriptList;\nfunction FeatureList(featureListTable) {\n Table.call(\n this,\n \"featureListTable\",\n recordList(\"featureRecord\", featureListTable, function(featureRecord, i) {\n const feature = featureRecord.feature;\n return [\n { name: \"featureTag\" + i, type: \"TAG\", value: featureRecord.tag },\n { name: \"feature\" + i, type: \"TABLE\", value: new Table(\"featureTable\", [\n { name: \"featureParams\", type: \"USHORT\", value: feature.featureParams }\n ].concat(ushortList(\"lookupListIndex\", feature.lookupListIndexes))) }\n ];\n })\n );\n}\nFeatureList.prototype = Object.create(Table.prototype);\nFeatureList.prototype.constructor = FeatureList;\nfunction LookupList(lookupListTable, subtableMakers3) {\n Table.call(this, \"lookupListTable\", tableList(\"lookup\", lookupListTable, function(lookupTable) {\n let subtableCallback = subtableMakers3[lookupTable.lookupType];\n check_default.assert(!!subtableCallback, \"Unable to write GSUB lookup type \" + lookupTable.lookupType + \" tables.\");\n return new Table(\"lookupTable\", [\n { name: \"lookupType\", type: \"USHORT\", value: lookupTable.lookupType },\n { name: \"lookupFlag\", type: \"USHORT\", value: lookupTable.lookupFlag }\n ].concat(tableList(\"subtable\", lookupTable.subtables, subtableCallback)));\n }));\n}\nLookupList.prototype = Object.create(Table.prototype);\nLookupList.prototype.constructor = LookupList;\nfunction ClassDef(classDefTable) {\n if (classDefTable.format === 1) {\n Table.call(\n this,\n \"classDefTable\",\n [\n { name: \"classFormat\", type: \"USHORT\", value: 1 },\n { name: \"startGlyphID\", type: \"USHORT\", value: classDefTable.startGlyph }\n ].concat(ushortList(\"glyph\", classDefTable.classes))\n );\n } else if (classDefTable.format === 2) {\n Table.call(\n this,\n \"classDefTable\",\n [{ name: \"classFormat\", type: \"USHORT\", value: 2 }].concat(recordList(\"rangeRecord\", classDefTable.ranges, function(RangeRecord, i) {\n return [\n { name: \"startGlyphID\" + i, type: \"USHORT\", value: RangeRecord.start },\n { name: \"endGlyphID\" + i, type: \"USHORT\", value: RangeRecord.end },\n { name: \"class\" + i, type: \"USHORT\", value: RangeRecord.classId }\n ];\n }))\n );\n } else {\n check_default.assert(false, \"Class format must be 1 or 2.\");\n }\n}\nClassDef.prototype = Object.create(Table.prototype);\nClassDef.prototype.constructor = ClassDef;\nvar table_default = {\n Table,\n Record: Table,\n Coverage,\n ClassDef,\n ScriptList,\n FeatureList,\n LookupList,\n ushortList,\n tableList,\n recordList\n};\n\n// src/parse.mjs\nfunction getByte(dataView, offset) {\n return dataView.getUint8(offset);\n}\nfunction getUShort(dataView, offset) {\n return dataView.getUint16(offset, false);\n}\nfunction getShort(dataView, offset) {\n return dataView.getInt16(offset, false);\n}\nfunction getUInt24(dataView, offset) {\n return (dataView.getUint16(offset) << 8) + dataView.getUint8(offset + 2);\n}\nfunction getULong(dataView, offset) {\n return dataView.getUint32(offset, false);\n}\nfunction getLong(dataView, offset) {\n return dataView.getInt32(offset, false);\n}\nfunction getFixed(dataView, offset) {\n const decimal = dataView.getInt16(offset, false);\n const fraction = dataView.getUint16(offset + 2, false);\n return decimal + fraction / 65535;\n}\nfunction getTag(dataView, offset) {\n let tag = \"\";\n for (let i = offset; i < offset + 4; i += 1) {\n tag += String.fromCharCode(dataView.getInt8(i));\n }\n return tag;\n}\nfunction getOffset(dataView, offset, offSize) {\n let v = 0;\n for (let i = 0; i < offSize; i += 1) {\n v <<= 8;\n v += dataView.getUint8(offset + i);\n }\n return v;\n}\nfunction getBytes(dataView, startOffset, endOffset) {\n const bytes = [];\n for (let i = startOffset; i < endOffset; i += 1) {\n bytes.push(dataView.getUint8(i));\n }\n return bytes;\n}\nfunction bytesToString(bytes) {\n let s = \"\";\n for (let i = 0; i < bytes.length; i += 1) {\n s += String.fromCharCode(bytes[i]);\n }\n return s;\n}\nvar typeOffsets = {\n byte: 1,\n uShort: 2,\n f2dot14: 2,\n short: 2,\n uInt24: 3,\n uLong: 4,\n fixed: 4,\n longDateTime: 8,\n tag: 4\n};\nvar masks = {\n LONG_WORDS: 32768,\n WORD_DELTA_COUNT_MASK: 32767,\n SHARED_POINT_NUMBERS: 32768,\n COUNT_MASK: 4095,\n EMBEDDED_PEAK_TUPLE: 32768,\n INTERMEDIATE_REGION: 16384,\n PRIVATE_POINT_NUMBERS: 8192,\n TUPLE_INDEX_MASK: 4095,\n POINTS_ARE_WORDS: 128,\n POINT_RUN_COUNT_MASK: 127,\n DELTAS_ARE_ZERO: 128,\n DELTAS_ARE_WORDS: 64,\n DELTA_RUN_COUNT_MASK: 63,\n INNER_INDEX_BIT_COUNT_MASK: 15,\n MAP_ENTRY_SIZE_MASK: 48\n};\nfunction Parser(data, offset) {\n this.data = data;\n this.offset = offset;\n this.relativeOffset = 0;\n}\nParser.prototype.parseByte = function() {\n const v = this.data.getUint8(this.offset + this.relativeOffset);\n this.relativeOffset += 1;\n return v;\n};\nParser.prototype.parseChar = function() {\n const v = this.data.getInt8(this.offset + this.relativeOffset);\n this.relativeOffset += 1;\n return v;\n};\nParser.prototype.parseCard8 = Parser.prototype.parseByte;\nParser.prototype.parseUShort = function() {\n const v = this.data.getUint16(this.offset + this.relativeOffset);\n this.relativeOffset += 2;\n return v;\n};\nParser.prototype.parseCard16 = Parser.prototype.parseUShort;\nParser.prototype.parseSID = Parser.prototype.parseUShort;\nParser.prototype.parseOffset16 = Parser.prototype.parseUShort;\nParser.prototype.parseShort = function() {\n const v = this.data.getInt16(this.offset + this.relativeOffset);\n this.relativeOffset += 2;\n return v;\n};\nParser.prototype.parseF2Dot14 = function() {\n const v = this.data.getInt16(this.offset + this.relativeOffset) / 16384;\n this.relativeOffset += 2;\n return v;\n};\nParser.prototype.parseUInt24 = function() {\n const v = getUInt24(this.data, this.offset + this.relativeOffset);\n this.relativeOffset += 3;\n return v;\n};\nParser.prototype.parseULong = function() {\n const v = getULong(this.data, this.offset + this.relativeOffset);\n this.relativeOffset += 4;\n return v;\n};\nParser.prototype.parseLong = function() {\n const v = getLong(this.data, this.offset + this.relativeOffset);\n this.relativeOffset += 4;\n return v;\n};\nParser.prototype.parseOffset32 = Parser.prototype.parseULong;\nParser.prototype.parseFixed = function() {\n const v = getFixed(this.data, this.offset + this.relativeOffset);\n this.relativeOffset += 4;\n return v;\n};\nParser.prototype.parseString = function(length) {\n const dataView = this.data;\n const offset = this.offset + this.relativeOffset;\n let string = \"\";\n this.relativeOffset += length;\n for (let i = 0; i < length; i++) {\n string += String.fromCharCode(dataView.getUint8(offset + i));\n }\n return string;\n};\nParser.prototype.parseTag = function() {\n return this.parseString(4);\n};\nParser.prototype.parseLongDateTime = function() {\n let v = getULong(this.data, this.offset + this.relativeOffset + 4);\n v -= 2082844800;\n this.relativeOffset += 8;\n return v;\n};\nParser.prototype.parseVersion = function(minorBase) {\n const major = getUShort(this.data, this.offset + this.relativeOffset);\n const minor = getUShort(this.data, this.offset + this.relativeOffset + 2);\n this.relativeOffset += 4;\n if (minorBase === void 0) minorBase = 4096;\n return major + minor / minorBase / 10;\n};\nParser.prototype.skip = function(type, amount) {\n if (amount === void 0) {\n amount = 1;\n }\n this.relativeOffset += typeOffsets[type] * amount;\n};\nParser.prototype.parseULongList = function(count) {\n if (count === void 0) {\n count = this.parseULong();\n }\n const offsets = new Array(count);\n const dataView = this.data;\n let offset = this.offset + this.relativeOffset;\n for (let i = 0; i < count; i++) {\n offsets[i] = dataView.getUint32(offset);\n offset += 4;\n }\n this.relativeOffset += count * 4;\n return offsets;\n};\nParser.prototype.parseOffset16List = Parser.prototype.parseUShortList = function(count) {\n if (count === void 0) {\n count = this.parseUShort();\n }\n const offsets = new Array(count);\n const dataView = this.data;\n let offset = this.offset + this.relativeOffset;\n for (let i = 0; i < count; i++) {\n offsets[i] = dataView.getUint16(offset);\n offset += 2;\n }\n this.relativeOffset += count * 2;\n return offsets;\n};\nParser.prototype.parseShortList = function(count) {\n const list = new Array(count);\n const dataView = this.data;\n let offset = this.offset + this.relativeOffset;\n for (let i = 0; i < count; i++) {\n list[i] = dataView.getInt16(offset);\n offset += 2;\n }\n this.relativeOffset += count * 2;\n return list;\n};\nParser.prototype.parseByteList = function(count) {\n const list = new Array(count);\n const dataView = this.data;\n let offset = this.offset + this.relativeOffset;\n for (let i = 0; i < count; i++) {\n list[i] = dataView.getUint8(offset++);\n }\n this.relativeOffset += count;\n return list;\n};\nParser.prototype.parseList = function(count, itemCallback) {\n if (!itemCallback) {\n itemCallback = count;\n count = this.parseUShort();\n }\n const list = new Array(count);\n for (let i = 0; i < count; i++) {\n list[i] = itemCallback.call(this);\n }\n return list;\n};\nParser.prototype.parseList32 = function(count, itemCallback) {\n if (!itemCallback) {\n itemCallback = count;\n count = this.parseULong();\n }\n const list = new Array(count);\n for (let i = 0; i < count; i++) {\n list[i] = itemCallback.call(this);\n }\n return list;\n};\nParser.prototype.parseRecordList = function(count, recordDescription) {\n if (!recordDescription) {\n recordDescription = count;\n count = this.parseUShort();\n }\n const records = new Array(count);\n const fields = Object.keys(recordDescription);\n for (let i = 0; i < count; i++) {\n const rec = {};\n for (let j = 0; j < fields.length; j++) {\n const fieldName = fields[j];\n const fieldType = recordDescription[fieldName];\n rec[fieldName] = fieldType.call(this);\n }\n records[i] = rec;\n }\n return records;\n};\nParser.prototype.parseRecordList32 = function(count, recordDescription) {\n if (!recordDescription) {\n recordDescription = count;\n count = this.parseULong();\n }\n const records = new Array(count);\n const fields = Object.keys(recordDescription);\n for (let i = 0; i < count; i++) {\n const rec = {};\n for (let j = 0; j < fields.length; j++) {\n const fieldName = fields[j];\n const fieldType = recordDescription[fieldName];\n rec[fieldName] = fieldType.call(this);\n }\n records[i] = rec;\n }\n return records;\n};\nParser.prototype.parseTupleRecords = function(tupleCount, axisCount) {\n let tuples = [];\n for (let i = 0; i < tupleCount; i++) {\n let tuple = [];\n for (let axisIndex = 0; axisIndex < axisCount; axisIndex++) {\n tuple.push(this.parseF2Dot14());\n }\n tuples.push(tuple);\n }\n return tuples;\n};\nParser.prototype.parseStruct = function(description) {\n if (typeof description === \"function\") {\n return description.call(this);\n } else {\n const fields = Object.keys(description);\n const struct = {};\n for (let j = 0; j < fields.length; j++) {\n const fieldName = fields[j];\n const fieldType = description[fieldName];\n struct[fieldName] = fieldType.call(this);\n }\n return struct;\n }\n};\nParser.prototype.parseValueRecord = function(valueFormat) {\n if (valueFormat === void 0) {\n valueFormat = this.parseUShort();\n }\n if (valueFormat === 0) {\n return;\n }\n const valueRecord = {};\n if (valueFormat & 1) {\n valueRecord.xPlacement = this.parseShort();\n }\n if (valueFormat & 2) {\n valueRecord.yPlacement = this.parseShort();\n }\n if (valueFormat & 4) {\n valueRecord.xAdvance = this.parseShort();\n }\n if (valueFormat & 8) {\n valueRecord.yAdvance = this.parseShort();\n }\n if (valueFormat & 16) {\n valueRecord.xPlaDevice = void 0;\n this.parseShort();\n }\n if (valueFormat & 32) {\n valueRecord.yPlaDevice = void 0;\n this.parseShort();\n }\n if (valueFormat & 64) {\n valueRecord.xAdvDevice = void 0;\n this.parseShort();\n }\n if (valueFormat & 128) {\n valueRecord.yAdvDevice = void 0;\n this.parseShort();\n }\n return valueRecord;\n};\nParser.prototype.parseValueRecordList = function() {\n const valueFormat = this.parseUShort();\n const valueCount = this.parseUShort();\n const values = new Array(valueCount);\n for (let i = 0; i < valueCount; i++) {\n values[i] = this.parseValueRecord(valueFormat);\n }\n return values;\n};\nParser.prototype.parsePointer = function(description) {\n const structOffset = this.parseOffset16();\n if (structOffset > 0) {\n return new Parser(this.data, this.offset + structOffset).parseStruct(description);\n }\n return void 0;\n};\nParser.prototype.parsePointer32 = function(description) {\n const structOffset = this.parseOffset32();\n if (structOffset > 0) {\n return new Parser(this.data, this.offset + structOffset).parseStruct(description);\n }\n return void 0;\n};\nParser.prototype.parseListOfLists = function(itemCallback) {\n const offsets = this.parseOffset16List();\n const count = offsets.length;\n const relativeOffset = this.relativeOffset;\n const list = new Array(count);\n for (let i = 0; i < count; i++) {\n const start = offsets[i];\n if (start === 0) {\n list[i] = void 0;\n continue;\n }\n this.relativeOffset = start;\n if (itemCallback) {\n const subOffsets = this.parseOffset16List();\n const subList = new Array(subOffsets.length);\n for (let j = 0; j < subOffsets.length; j++) {\n this.relativeOffset = start + subOffsets[j];\n subList[j] = itemCallback.call(this);\n }\n list[i] = subList;\n } else {\n list[i] = this.parseUShortList();\n }\n }\n this.relativeOffset = relativeOffset;\n return list;\n};\nParser.prototype.parseCoverage = function() {\n const startOffset = this.offset + this.relativeOffset;\n const format = this.parseUShort();\n const count = this.parseUShort();\n if (format === 1) {\n return {\n format: 1,\n glyphs: this.parseUShortList(count)\n };\n } else if (format === 2) {\n const ranges = new Array(count);\n for (let i = 0; i < count; i++) {\n ranges[i] = {\n start: this.parseUShort(),\n end: this.parseUShort(),\n index: this.parseUShort()\n };\n }\n return {\n format: 2,\n ranges\n };\n }\n throw new Error(\"0x\" + startOffset.toString(16) + \": Coverage format must be 1 or 2.\");\n};\nParser.prototype.parseClassDef = function() {\n const startOffset = this.offset + this.relativeOffset;\n const format = this.parseUShort();\n if (format === 1) {\n return {\n format: 1,\n startGlyph: this.parseUShort(),\n classes: this.parseUShortList()\n };\n } else if (format === 2) {\n return {\n format: 2,\n ranges: this.parseRecordList({\n start: Parser.uShort,\n end: Parser.uShort,\n classId: Parser.uShort\n })\n };\n }\n console.warn(`0x${startOffset.toString(16)}: This font file uses an invalid ClassDef format of ${format}. It might be corrupted and should be reacquired if it doesn't display as intended.`);\n return {\n format\n };\n};\nParser.list = function(count, itemCallback) {\n return function() {\n return this.parseList(count, itemCallback);\n };\n};\nParser.list32 = function(count, itemCallback) {\n return function() {\n return this.parseList32(count, itemCallback);\n };\n};\nParser.recordList = function(count, recordDescription) {\n return function() {\n return this.parseRecordList(count, recordDescription);\n };\n};\nParser.recordList32 = function(count, recordDescription) {\n return function() {\n return this.parseRecordList32(count, recordDescription);\n };\n};\nParser.pointer = function(description) {\n return function() {\n return this.parsePointer(description);\n };\n};\nParser.pointer32 = function(description) {\n return function() {\n return this.parsePointer32(description);\n };\n};\nParser.tag = Parser.prototype.parseTag;\nParser.byte = Parser.prototype.parseByte;\nParser.uShort = Parser.offset16 = Parser.prototype.parseUShort;\nParser.uShortList = Parser.prototype.parseUShortList;\nParser.uInt24 = Parser.prototype.parseUInt24;\nParser.uLong = Parser.offset32 = Parser.prototype.parseULong;\nParser.uLongList = Parser.prototype.parseULongList;\nParser.fixed = Parser.prototype.parseFixed;\nParser.f2Dot14 = Parser.prototype.parseF2Dot14;\nParser.struct = Parser.prototype.parseStruct;\nParser.coverage = Parser.prototype.parseCoverage;\nParser.classDef = Parser.prototype.parseClassDef;\nvar langSysTable = {\n reserved: Parser.uShort,\n reqFeatureIndex: Parser.uShort,\n featureIndexes: Parser.uShortList\n};\nParser.prototype.parseScriptList = function() {\n return this.parsePointer(Parser.recordList({\n tag: Parser.tag,\n script: Parser.pointer({\n defaultLangSys: Parser.pointer(langSysTable),\n langSysRecords: Parser.recordList({\n tag: Parser.tag,\n langSys: Parser.pointer(langSysTable)\n })\n })\n })) || [];\n};\nParser.prototype.parseFeatureList = function() {\n return this.parsePointer(Parser.recordList({\n tag: Parser.tag,\n feature: Parser.pointer({\n featureParams: Parser.offset16,\n lookupListIndexes: Parser.uShortList\n })\n })) || [];\n};\nParser.prototype.parseLookupList = function(lookupTableParsers) {\n return this.parsePointer(Parser.list(Parser.pointer(function() {\n const lookupType = this.parseUShort();\n check_default.argument(1 <= lookupType && lookupType <= 9, \"GPOS/GSUB lookup type \" + lookupType + \" unknown.\");\n const lookupFlag = this.parseUShort();\n const useMarkFilteringSet = lookupFlag & 16;\n return {\n lookupType,\n lookupFlag,\n subtables: this.parseList(Parser.pointer(lookupTableParsers[lookupType])),\n markFilteringSet: useMarkFilteringSet ? this.parseUShort() : void 0\n };\n }))) || [];\n};\nParser.prototype.parseFeatureVariationsList = function() {\n return this.parsePointer32(function() {\n const majorVersion = this.parseUShort();\n const minorVersion = this.parseUShort();\n check_default.argument(majorVersion === 1 && minorVersion < 1, \"GPOS/GSUB feature variations table unknown.\");\n const featureVariations = this.parseRecordList32({\n conditionSetOffset: Parser.offset32,\n featureTableSubstitutionOffset: Parser.offset32\n });\n return featureVariations;\n }) || [];\n};\nParser.prototype.parseVariationStore = function() {\n const vsOffset = this.relativeOffset;\n const length = this.parseUShort();\n const variationStore = {\n itemVariationStore: this.parseItemVariationStore()\n };\n this.relativeOffset = vsOffset + length + 2;\n return variationStore;\n};\nParser.prototype.parseItemVariationStore = function() {\n const itemStoreOffset = this.relativeOffset;\n const iVStore = {\n format: this.parseUShort(),\n variationRegions: [],\n itemVariationSubtables: []\n };\n const variationRegionListOffset = this.parseOffset32();\n const itemVariationDataCount = this.parseUShort();\n const itemVariationDataOffsets = this.parseULongList(itemVariationDataCount);\n this.relativeOffset = itemStoreOffset + variationRegionListOffset;\n iVStore.variationRegions = this.parseVariationRegionList();\n for (let i = 0; i < itemVariationDataCount; i++) {\n const subtableOffset = itemVariationDataOffsets[i];\n this.relativeOffset = itemStoreOffset + subtableOffset;\n iVStore.itemVariationSubtables.push(this.parseItemVariationSubtable());\n }\n return iVStore;\n};\nParser.prototype.parseVariationRegionList = function() {\n const axisCount = this.parseUShort();\n const regionCount = this.parseUShort();\n return this.parseRecordList(regionCount, {\n regionAxes: Parser.recordList(axisCount, {\n startCoord: Parser.f2Dot14,\n peakCoord: Parser.f2Dot14,\n endCoord: Parser.f2Dot14\n })\n });\n};\nParser.prototype.parseItemVariationSubtable = function() {\n const itemCount = this.parseUShort();\n const wordDeltaCount = this.parseUShort();\n const regionIndexes = this.parseUShortList();\n const regionIndexCount = regionIndexes.length;\n const subtable = {\n regionIndexes,\n deltaSets: itemCount && regionIndexCount ? this.parseDeltaSets(itemCount, wordDeltaCount, regionIndexCount) : []\n };\n return subtable;\n};\nParser.prototype.parseDeltaSetIndexMap = function() {\n const format = this.parseByte();\n const entryFormat = this.parseByte();\n const map = [];\n let mapCount = 0;\n switch (format) {\n case 0:\n mapCount = this.parseUShort();\n break;\n case 1:\n mapCount = this.parseULong();\n break;\n default:\n console.error(`unsupported DeltaSetIndexMap format ${format}`);\n }\n if (!mapCount) return {\n format,\n entryFormat\n };\n const bitCount = (entryFormat & masks.INNER_INDEX_BIT_COUNT_MASK) + 1;\n const entrySize = ((entryFormat & masks.MAP_ENTRY_SIZE_MASK) >> 4) + 1;\n for (let n = 0; n < mapCount; n++) {\n let entry;\n if (entrySize === 1) {\n entry = this.parseByte();\n } else if (entrySize === 2) {\n entry = this.parseUShort();\n } else if (entrySize === 3) {\n entry = this.parseUInt24();\n } else if (entrySize === 4) {\n entry = this.parseULong();\n } else {\n throw new Error(`Invalid entry size of ${entrySize}`);\n }\n const outerIndex = entry >> bitCount;\n const innerIndex = entry & (1 << bitCount) - 1;\n map.push({ outerIndex, innerIndex });\n }\n return {\n format,\n entryFormat,\n map\n };\n};\nParser.prototype.parseDeltaSets = function(itemCount, wordDeltaCount, regionIndexCount) {\n const deltas = Array.from({ length: itemCount }, () => []);\n const longFlag = wordDeltaCount & masks.LONG_WORDS;\n const wordCount = wordDeltaCount & masks.WORD_DELTA_COUNT_MASK;\n if (wordCount > regionIndexCount) {\n throw Error(\"wordCount must be less than or equal to regionIndexCount\");\n }\n const wordParser = (longFlag ? this.parseLong : this.parseShort).bind(this);\n const restParser = (longFlag ? this.parseShort : this.parseChar).bind(this);\n for (let i = 0; i < itemCount; i++) {\n for (let j = 0; j < regionIndexCount; j++) {\n if (j < wordCount) {\n deltas[i].push(wordParser());\n } else {\n deltas[i].push(restParser());\n }\n }\n }\n return deltas;\n};\nParser.prototype.parseTupleVariationStoreList = function(axisCount, flavor, glyphs) {\n const glyphCount = this.parseUShort();\n const flags = this.parseUShort();\n const offsetSizeIs32Bit = flags & 1;\n const glyphVariationDataArrayOffset = this.parseOffset32();\n const parseOffset = (offsetSizeIs32Bit ? this.parseULong : this.parseUShort).bind(this);\n const glyphVariations = {};\n let currentOffset = parseOffset();\n if (!offsetSizeIs32Bit) currentOffset *= 2;\n let nextOffset;\n for (let i = 0; i < glyphCount; i++) {\n nextOffset = parseOffset();\n if (!offsetSizeIs32Bit) nextOffset *= 2;\n const length = nextOffset - currentOffset;\n glyphVariations[i] = length ? this.parseTupleVariationStore(\n glyphVariationDataArrayOffset + currentOffset,\n axisCount,\n flavor,\n glyphs,\n i\n ) : void 0;\n currentOffset = nextOffset;\n }\n return glyphVariations;\n};\nParser.prototype.parseTupleVariationStore = function(tableOffset, axisCount, flavor, glyphs, glyphIndex) {\n const relativeOffset = this.relativeOffset;\n this.relativeOffset = tableOffset;\n if (flavor === \"cvar\") {\n this.relativeOffset += 4;\n }\n const tupleVariationCount = this.parseUShort();\n const hasSharedPoints = !!(tupleVariationCount & masks.SHARED_POINT_NUMBERS);\n const count = tupleVariationCount & masks.COUNT_MASK;\n let dataOffset = this.parseOffset16();\n const headers = [];\n let sharedPoints = [];\n for (let h = 0; h < count; h++) {\n const headerData = this.parseTupleVariationHeader(axisCount, flavor);\n headers.push(headerData);\n }\n if (this.relativeOffset !== tableOffset + dataOffset) {\n console.warn(`Unexpected offset after parsing tuple variation headers! Expected ${tableOffset + dataOffset}, actually ${this.relativeOffset}`);\n this.relativeOffset = tableOffset + dataOffset;\n }\n if (hasSharedPoints) {\n sharedPoints = this.parsePackedPointNumbers();\n }\n let serializedDataOffset = this.relativeOffset;\n for (let h = 0; h < count; h++) {\n const header = headers[h];\n header.privatePoints = [];\n this.relativeOffset = serializedDataOffset;\n if (flavor === \"cvar\" && !header.peakTuple) {\n console.warn(\"An embedded peak tuple is required in TupleVariationHeaders for the cvar table.\");\n }\n if (header.flags.privatePointNumbers) {\n header.privatePoints = this.parsePackedPointNumbers();\n }\n delete header.flags;\n const deltasOffset = this.offset;\n const deltasRelativeOffset = this.relativeOffset;\n const defineDeltas = (propertyName) => {\n let _deltas = void 0;\n let _deltasY = void 0;\n const parseDeltas = () => {\n let pointsCount = 0;\n if (flavor === \"gvar\") {\n pointsCount = header.privatePoints.length || sharedPoints.length;\n if (!pointsCount) {\n const glyph = glyphs.get(glyphIndex);\n glyph.path;\n pointsCount = glyph.points.length;\n pointsCount += 4;\n }\n } else if (flavor === \"cvar\") {\n pointsCount = glyphs.length;\n }\n this.offset = deltasOffset;\n this.relativeOffset = deltasRelativeOffset;\n _deltas = this.parsePackedDeltas(pointsCount);\n if (flavor === \"gvar\") {\n _deltasY = this.parsePackedDeltas(pointsCount);\n }\n };\n return {\n configurable: true,\n get: function() {\n if (_deltas === void 0) parseDeltas();\n return propertyName === \"deltasY\" ? _deltasY : _deltas;\n },\n set: function(deltas) {\n if (_deltas === void 0) parseDeltas();\n if (propertyName === \"deltasY\") {\n _deltasY = deltas;\n } else {\n _deltas = deltas;\n }\n }\n };\n };\n Object.defineProperty(header, \"deltas\", defineDeltas.call(this, \"deltas\"));\n if (flavor === \"gvar\") {\n Object.defineProperty(header, \"deltasY\", defineDeltas.call(this, \"deltasY\"));\n }\n serializedDataOffset += header.variationDataSize;\n delete header.variationDataSize;\n }\n this.relativeOffset = relativeOffset;\n const result = {\n headers\n };\n result.sharedPoints = sharedPoints;\n return result;\n};\nParser.prototype.parseTupleVariationHeader = function(axisCount, flavor) {\n const variationDataSize = this.parseUShort();\n const tupleIndex = this.parseUShort();\n const embeddedPeakTuple = !!(tupleIndex & masks.EMBEDDED_PEAK_TUPLE);\n const intermediateRegion = !!(tupleIndex & masks.INTERMEDIATE_REGION);\n const privatePointNumbers = !!(tupleIndex & masks.PRIVATE_POINT_NUMBERS);\n const sharedTupleRecordsIndex = embeddedPeakTuple ? void 0 : tupleIndex & masks.TUPLE_INDEX_MASK;\n const peakTuple = embeddedPeakTuple ? this.parseTupleRecords(1, axisCount)[0] : void 0;\n const intermediateStartTuple = intermediateRegion ? this.parseTupleRecords(1, axisCount)[0] : void 0;\n const intermediateEndTuple = intermediateRegion ? this.parseTupleRecords(1, axisCount)[0] : void 0;\n const result = {\n variationDataSize,\n peakTuple,\n intermediateStartTuple,\n intermediateEndTuple,\n flags: {\n embeddedPeakTuple,\n intermediateRegion,\n privatePointNumbers\n }\n };\n if (flavor === \"gvar\") {\n result.sharedTupleRecordsIndex = sharedTupleRecordsIndex;\n }\n return result;\n};\nParser.prototype.parsePackedPointNumbers = function() {\n const countByte1 = this.parseByte();\n const points = [];\n let totalPointCount = countByte1;\n if (countByte1 >= 128) {\n const countByte2 = this.parseByte();\n totalPointCount = (countByte1 & masks.POINT_RUN_COUNT_MASK) << 8 | countByte2;\n }\n let lastPoint = 0;\n while (points.length < totalPointCount) {\n const controlByte = this.parseByte();\n const numbersAre16Bit = !!(controlByte & masks.POINTS_ARE_WORDS);\n let runCount = (controlByte & masks.POINT_RUN_COUNT_MASK) + 1;\n for (let i = 0; i < runCount && points.length < totalPointCount; i++) {\n let pointDelta;\n if (numbersAre16Bit) {\n pointDelta = this.parseUShort();\n } else {\n pointDelta = this.parseByte();\n }\n lastPoint = lastPoint + pointDelta;\n points.push(lastPoint);\n }\n }\n return points;\n};\nParser.prototype.parsePackedDeltas = function(expectedCount) {\n const deltas = [];\n while (deltas.length < expectedCount) {\n const controlByte = this.parseByte();\n const zeroData = !!(controlByte & masks.DELTAS_ARE_ZERO);\n const deltaWords = !!(controlByte & masks.DELTAS_ARE_WORDS);\n const runCount = (controlByte & masks.DELTA_RUN_COUNT_MASK) + 1;\n for (let i = 0; i < runCount && deltas.length < expectedCount; i++) {\n if (zeroData) {\n deltas.push(0);\n } else if (deltaWords) {\n deltas.push(this.parseShort());\n } else {\n deltas.push(this.parseChar());\n }\n }\n }\n return deltas;\n};\nvar parse_default = {\n getByte,\n getCard8: getByte,\n getUShort,\n getCard16: getUShort,\n getShort,\n getUInt24,\n getULong,\n getFixed,\n getTag,\n getOffset,\n getBytes,\n bytesToString,\n Parser\n};\n\n// src/tables/name.mjs\nvar nameTableNames = [\n \"copyright\",\n // 0\n \"fontFamily\",\n // 1\n \"fontSubfamily\",\n // 2\n \"uniqueID\",\n // 3\n \"fullName\",\n // 4\n \"version\",\n // 5\n \"postScriptName\",\n // 6\n \"trademark\",\n // 7\n \"manufacturer\",\n // 8\n \"designer\",\n // 9\n \"description\",\n // 10\n \"manufacturerURL\",\n // 11\n \"designerURL\",\n // 12\n \"license\",\n // 13\n \"licenseURL\",\n // 14\n \"reserved\",\n // 15\n \"preferredFamily\",\n // 16\n \"preferredSubfamily\",\n // 17\n \"compatibleFullName\",\n // 18\n \"sampleText\",\n // 19\n \"postScriptFindFontName\",\n // 20\n \"wwsFamily\",\n // 21\n \"wwsSubfamily\"\n // 22\n];\nvar macLanguages = {\n 0: \"en\",\n 1: \"fr\",\n 2: \"de\",\n 3: \"it\",\n 4: \"nl\",\n 5: \"sv\",\n 6: \"es\",\n 7: \"da\",\n 8: \"pt\",\n 9: \"no\",\n 10: \"he\",\n 11: \"ja\",\n 12: \"ar\",\n 13: \"fi\",\n 14: \"el\",\n 15: \"is\",\n 16: \"mt\",\n 17: \"tr\",\n 18: \"hr\",\n 19: \"zh-Hant\",\n 20: \"ur\",\n 21: \"hi\",\n 22: \"th\",\n 23: \"ko\",\n 24: \"lt\",\n 25: \"pl\",\n 26: \"hu\",\n 27: \"es\",\n 28: \"lv\",\n 29: \"se\",\n 30: \"fo\",\n 31: \"fa\",\n 32: \"ru\",\n 33: \"zh\",\n 34: \"nl-BE\",\n 35: \"ga\",\n 36: \"sq\",\n 37: \"ro\",\n 38: \"cz\",\n 39: \"sk\",\n 40: \"si\",\n 41: \"yi\",\n 42: \"sr\",\n 43: \"mk\",\n 44: \"bg\",\n 45: \"uk\",\n 46: \"be\",\n 47: \"uz\",\n 48: \"kk\",\n 49: \"az-Cyrl\",\n 50: \"az-Arab\",\n 51: \"hy\",\n 52: \"ka\",\n 53: \"mo\",\n 54: \"ky\",\n 55: \"tg\",\n 56: \"tk\",\n 57: \"mn-CN\",\n 58: \"mn\",\n 59: \"ps\",\n 60: \"ks\",\n 61: \"ku\",\n 62: \"sd\",\n 63: \"bo\",\n 64: \"ne\",\n 65: \"sa\",\n 66: \"mr\",\n 67: \"bn\",\n 68: \"as\",\n 69: \"gu\",\n 70: \"pa\",\n 71: \"or\",\n 72: \"ml\",\n 73: \"kn\",\n 74: \"ta\",\n 75: \"te\",\n 76: \"si\",\n 77: \"my\",\n 78: \"km\",\n 79: \"lo\",\n 80: \"vi\",\n 81: \"id\",\n 82: \"tl\",\n 83: \"ms\",\n 84: \"ms-Arab\",\n 85: \"am\",\n 86: \"ti\",\n 87: \"om\",\n 88: \"so\",\n 89: \"sw\",\n 90: \"rw\",\n 91: \"rn\",\n 92: \"ny\",\n 93: \"mg\",\n 94: \"eo\",\n 128: \"cy\",\n 129: \"eu\",\n 130: \"ca\",\n 131: \"la\",\n 132: \"qu\",\n 133: \"gn\",\n 134: \"ay\",\n 135: \"tt\",\n 136: \"ug\",\n 137: \"dz\",\n 138: \"jv\",\n 139: \"su\",\n 140: \"gl\",\n 141: \"af\",\n 142: \"br\",\n 143: \"iu\",\n 144: \"gd\",\n 145: \"gv\",\n 146: \"ga\",\n 147: \"to\",\n 148: \"el-polyton\",\n 149: \"kl\",\n 150: \"az\",\n 151: \"nn\"\n};\nvar macLanguageToScript = {\n 0: 0,\n // langEnglish → smRoman\n 1: 0,\n // langFrench → smRoman\n 2: 0,\n // langGerman → smRoman\n 3: 0,\n // langItalian → smRoman\n 4: 0,\n // langDutch → smRoman\n 5: 0,\n // langSwedish → smRoman\n 6: 0,\n // langSpanish → smRoman\n 7: 0,\n // langDanish → smRoman\n 8: 0,\n // langPortuguese → smRoman\n 9: 0,\n // langNorwegian → smRoman\n 10: 5,\n // langHebrew → smHebrew\n 11: 1,\n // langJapanese → smJapanese\n 12: 4,\n // langArabic → smArabic\n 13: 0,\n // langFinnish → smRoman\n 14: 6,\n // langGreek → smGreek\n 15: 0,\n // langIcelandic → smRoman (modified)\n 16: 0,\n // langMaltese → smRoman\n 17: 0,\n // langTurkish → smRoman (modified)\n 18: 0,\n // langCroatian → smRoman (modified)\n 19: 2,\n // langTradChinese → smTradChinese\n 20: 4,\n // langUrdu → smArabic\n 21: 9,\n // langHindi → smDevanagari\n 22: 21,\n // langThai → smThai\n 23: 3,\n // langKorean → smKorean\n 24: 29,\n // langLithuanian → smCentralEuroRoman\n 25: 29,\n // langPolish → smCentralEuroRoman\n 26: 29,\n // langHungarian → smCentralEuroRoman\n 27: 29,\n // langEstonian → smCentralEuroRoman\n 28: 29,\n // langLatvian → smCentralEuroRoman\n 29: 0,\n // langSami → smRoman\n 30: 0,\n // langFaroese → smRoman (modified)\n 31: 4,\n // langFarsi → smArabic (modified)\n 32: 7,\n // langRussian → smCyrillic\n 33: 25,\n // langSimpChinese → smSimpChinese\n 34: 0,\n // langFlemish → smRoman\n 35: 0,\n // langIrishGaelic → smRoman (modified)\n 36: 0,\n // langAlbanian → smRoman\n 37: 0,\n // langRomanian → smRoman (modified)\n 38: 29,\n // langCzech → smCentralEuroRoman\n 39: 29,\n // langSlovak → smCentralEuroRoman\n 40: 0,\n // langSlovenian → smRoman (modified)\n 41: 5,\n // langYiddish → smHebrew\n 42: 7,\n // langSerbian → smCyrillic\n 43: 7,\n // langMacedonian → smCyrillic\n 44: 7,\n // langBulgarian → smCyrillic\n 45: 7,\n // langUkrainian → smCyrillic (modified)\n 46: 7,\n // langByelorussian → smCyrillic\n 47: 7,\n // langUzbek → smCyrillic\n 48: 7,\n // langKazakh → smCyrillic\n 49: 7,\n // langAzerbaijani → smCyrillic\n 50: 4,\n // langAzerbaijanAr → smArabic\n 51: 24,\n // langArmenian → smArmenian\n 52: 23,\n // langGeorgian → smGeorgian\n 53: 7,\n // langMoldavian → smCyrillic\n 54: 7,\n // langKirghiz → smCyrillic\n 55: 7,\n // langTajiki → smCyrillic\n 56: 7,\n // langTurkmen → smCyrillic\n 57: 27,\n // langMongolian → smMongolian\n 58: 7,\n // langMongolianCyr → smCyrillic\n 59: 4,\n // langPashto → smArabic\n 60: 4,\n // langKurdish → smArabic\n 61: 4,\n // langKashmiri → smArabic\n 62: 4,\n // langSindhi → smArabic\n 63: 26,\n // langTibetan → smTibetan\n 64: 9,\n // langNepali → smDevanagari\n 65: 9,\n // langSanskrit → smDevanagari\n 66: 9,\n // langMarathi → smDevanagari\n 67: 13,\n // langBengali → smBengali\n 68: 13,\n // langAssamese → smBengali\n 69: 11,\n // langGujarati → smGujarati\n 70: 10,\n // langPunjabi → smGurmukhi\n 71: 12,\n // langOriya → smOriya\n 72: 17,\n // langMalayalam → smMalayalam\n 73: 16,\n // langKannada → smKannada\n 74: 14,\n // langTamil → smTamil\n 75: 15,\n // langTelugu → smTelugu\n 76: 18,\n // langSinhalese → smSinhalese\n 77: 19,\n // langBurmese → smBurmese\n 78: 20,\n // langKhmer → smKhmer\n 79: 22,\n // langLao → smLao\n 80: 30,\n // langVietnamese → smVietnamese\n 81: 0,\n // langIndonesian → smRoman\n 82: 0,\n // langTagalog → smRoman\n 83: 0,\n // langMalayRoman → smRoman\n 84: 4,\n // langMalayArabic → smArabic\n 85: 28,\n // langAmharic → smEthiopic\n 86: 28,\n // langTigrinya → smEthiopic\n 87: 28,\n // langOromo → smEthiopic\n 88: 0,\n // langSomali → smRoman\n 89: 0,\n // langSwahili → smRoman\n 90: 0,\n // langKinyarwanda → smRoman\n 91: 0,\n // langRundi → smRoman\n 92: 0,\n // langNyanja → smRoman\n 93: 0,\n // langMalagasy → smRoman\n 94: 0,\n // langEsperanto → smRoman\n 128: 0,\n // langWelsh → smRoman (modified)\n 129: 0,\n // langBasque → smRoman\n 130: 0,\n // langCatalan → smRoman\n 131: 0,\n // langLatin → smRoman\n 132: 0,\n // langQuechua → smRoman\n 133: 0,\n // langGuarani → smRoman\n 134: 0,\n // langAymara → smRoman\n 135: 7,\n // langTatar → smCyrillic\n 136: 4,\n // langUighur → smArabic\n 137: 26,\n // langDzongkha → smTibetan\n 138: 0,\n // langJavaneseRom → smRoman\n 139: 0,\n // langSundaneseRom → smRoman\n 140: 0,\n // langGalician → smRoman\n 141: 0,\n // langAfrikaans → smRoman\n 142: 0,\n // langBreton → smRoman (modified)\n 143: 28,\n // langInuktitut → smEthiopic (modified)\n 144: 0,\n // langScottishGaelic → smRoman (modified)\n 145: 0,\n // langManxGaelic → smRoman (modified)\n 146: 0,\n // langIrishGaelicScript → smRoman (modified)\n 147: 0,\n // langTongan → smRoman\n 148: 6,\n // langGreekAncient → smRoman\n 149: 0,\n // langGreenlandic → smRoman\n 150: 0,\n // langAzerbaijanRoman → smRoman\n 151: 0\n // langNynorsk → smRoman\n};\nvar windowsLanguages = {\n 1078: \"af\",\n 1052: \"sq\",\n 1156: \"gsw\",\n 1118: \"am\",\n 5121: \"ar-DZ\",\n 15361: \"ar-BH\",\n 3073: \"ar\",\n 2049: \"ar-IQ\",\n 11265: \"ar-JO\",\n 13313: \"ar-KW\",\n 12289: \"ar-LB\",\n 4097: \"ar-LY\",\n 6145: \"ary\",\n 8193: \"ar-OM\",\n 16385: \"ar-QA\",\n 1025: \"ar-SA\",\n 10241: \"ar-SY\",\n 7169: \"aeb\",\n 14337: \"ar-AE\",\n 9217: \"ar-YE\",\n 1067: \"hy\",\n 1101: \"as\",\n 2092: \"az-Cyrl\",\n 1068: \"az\",\n 1133: \"ba\",\n 1069: \"eu\",\n 1059: \"be\",\n 2117: \"bn\",\n 1093: \"bn-IN\",\n 8218: \"bs-Cyrl\",\n 5146: \"bs\",\n 1150: \"br\",\n 1026: \"bg\",\n 1027: \"ca\",\n 3076: \"zh-HK\",\n 5124: \"zh-MO\",\n 2052: \"zh\",\n 4100: \"zh-SG\",\n 1028: \"zh-TW\",\n 1155: \"co\",\n 1050: \"hr\",\n 4122: \"hr-BA\",\n 1029: \"cs\",\n 1030: \"da\",\n 1164: \"prs\",\n 1125: \"dv\",\n 2067: \"nl-BE\",\n 1043: \"nl\",\n 3081: \"en-AU\",\n 10249: \"en-BZ\",\n 4105: \"en-CA\",\n 9225: \"en-029\",\n 16393: \"en-IN\",\n 6153: \"en-IE\",\n 8201: \"en-JM\",\n 17417: \"en-MY\",\n 5129: \"en-NZ\",\n 13321: \"en-PH\",\n 18441: \"en-SG\",\n 7177: \"en-ZA\",\n 11273: \"en-TT\",\n 2057: \"en-GB\",\n 1033: \"en\",\n 12297: \"en-ZW\",\n 1061: \"et\",\n 1080: \"fo\",\n 1124: \"fil\",\n 1035: \"fi\",\n 2060: \"fr-BE\",\n 3084: \"fr-CA\",\n 1036: \"fr\",\n 5132: \"fr-LU\",\n 6156: \"fr-MC\",\n 4108: \"fr-CH\",\n 1122: \"fy\",\n 1110: \"gl\",\n 1079: \"ka\",\n 3079: \"de-AT\",\n 1031: \"de\",\n 5127: \"de-LI\",\n 4103: \"de-LU\",\n 2055: \"de-CH\",\n 1032: \"el\",\n 1135: \"kl\",\n 1095: \"gu\",\n 1128: \"ha\",\n 1037: \"he\",\n 1081: \"hi\",\n 1038: \"hu\",\n 1039: \"is\",\n 1136: \"ig\",\n 1057: \"id\",\n 1117: \"iu\",\n 2141: \"iu-Latn\",\n 2108: \"ga\",\n 1076: \"xh\",\n 1077: \"zu\",\n 1040: \"it\",\n 2064: \"it-CH\",\n 1041: \"ja\",\n 1099: \"kn\",\n 1087: \"kk\",\n 1107: \"km\",\n 1158: \"quc\",\n 1159: \"rw\",\n 1089: \"sw\",\n 1111: \"kok\",\n 1042: \"ko\",\n 1088: \"ky\",\n 1108: \"lo\",\n 1062: \"lv\",\n 1063: \"lt\",\n 2094: \"dsb\",\n 1134: \"lb\",\n 1071: \"mk\",\n 2110: \"ms-BN\",\n 1086: \"ms\",\n 1100: \"ml\",\n 1082: \"mt\",\n 1153: \"mi\",\n 1146: \"arn\",\n 1102: \"mr\",\n 1148: \"moh\",\n 1104: \"mn\",\n 2128: \"mn-CN\",\n 1121: \"ne\",\n 1044: \"nb\",\n 2068: \"nn\",\n 1154: \"oc\",\n 1096: \"or\",\n 1123: \"ps\",\n 1045: \"pl\",\n 1046: \"pt\",\n 2070: \"pt-PT\",\n 1094: \"pa\",\n 1131: \"qu-BO\",\n 2155: \"qu-EC\",\n 3179: \"qu\",\n 1048: \"ro\",\n 1047: \"rm\",\n 1049: \"ru\",\n 9275: \"smn\",\n 4155: \"smj-NO\",\n 5179: \"smj\",\n 3131: \"se-FI\",\n 1083: \"se\",\n 2107: \"se-SE\",\n 8251: \"sms\",\n 6203: \"sma-NO\",\n 7227: \"sms\",\n 1103: \"sa\",\n 7194: \"sr-Cyrl-BA\",\n 3098: \"sr\",\n 6170: \"sr-Latn-BA\",\n 2074: \"sr-Latn\",\n 1132: \"nso\",\n 1074: \"tn\",\n 1115: \"si\",\n 1051: \"sk\",\n 1060: \"sl\",\n 11274: \"es-AR\",\n 16394: \"es-BO\",\n 13322: \"es-CL\",\n 9226: \"es-CO\",\n 5130: \"es-CR\",\n 7178: \"es-DO\",\n 12298: \"es-EC\",\n 17418: \"es-SV\",\n 4106: \"es-GT\",\n 18442: \"es-HN\",\n 2058: \"es-MX\",\n 19466: \"es-NI\",\n 6154: \"es-PA\",\n 15370: \"es-PY\",\n 10250: \"es-PE\",\n 20490: \"es-PR\",\n // Microsoft has defined two different language codes for\n // “Spanish with modern sorting” and “Spanish with traditional\n // sorting”. This makes sense for collation APIs, and it would be\n // possible to express this in BCP 47 language tags via Unicode\n // extensions (eg., es-u-co-trad is Spanish with traditional\n // sorting). However, for storing names in fonts, the distinction\n // does not make sense, so we give “es” in both cases.\n 3082: \"es\",\n 1034: \"es\",\n 21514: \"es-US\",\n 14346: \"es-UY\",\n 8202: \"es-VE\",\n 2077: \"sv-FI\",\n 1053: \"sv\",\n 1114: \"syr\",\n 1064: \"tg\",\n 2143: \"tzm\",\n 1097: \"ta\",\n 1092: \"tt\",\n 1098: \"te\",\n 1054: \"th\",\n 1105: \"bo\",\n 1055: \"tr\",\n 1090: \"tk\",\n 1152: \"ug\",\n 1058: \"uk\",\n 1070: \"hsb\",\n 1056: \"ur\",\n 2115: \"uz-Cyrl\",\n 1091: \"uz\",\n 1066: \"vi\",\n 1106: \"cy\",\n 1160: \"wo\",\n 1157: \"sah\",\n 1144: \"ii\",\n 1130: \"yo\"\n};\nfunction getLanguageCode(platformID, languageID, ltag) {\n switch (platformID) {\n case 0:\n if (languageID === 65535) {\n return \"und\";\n } else if (ltag) {\n return ltag[languageID];\n }\n break;\n case 1:\n return macLanguages[languageID];\n case 3:\n return windowsLanguages[languageID];\n }\n return void 0;\n}\nvar utf16 = \"utf-16\";\nvar macScriptEncodings = {\n 0: \"macintosh\",\n // smRoman\n 1: \"x-mac-japanese\",\n // smJapanese\n 2: \"x-mac-chinesetrad\",\n // smTradChinese\n 3: \"x-mac-korean\",\n // smKorean\n 6: \"x-mac-greek\",\n // smGreek\n 7: \"x-mac-cyrillic\",\n // smCyrillic\n 9: \"x-mac-devanagai\",\n // smDevanagari\n 10: \"x-mac-gurmukhi\",\n // smGurmukhi\n 11: \"x-mac-gujarati\",\n // smGujarati\n 12: \"x-mac-oriya\",\n // smOriya\n 13: \"x-mac-bengali\",\n // smBengali\n 14: \"x-mac-tamil\",\n // smTamil\n 15: \"x-mac-telugu\",\n // smTelugu\n 16: \"x-mac-kannada\",\n // smKannada\n 17: \"x-mac-malayalam\",\n // smMalayalam\n 18: \"x-mac-sinhalese\",\n // smSinhalese\n 19: \"x-mac-burmese\",\n // smBurmese\n 20: \"x-mac-khmer\",\n // smKhmer\n 21: \"x-mac-thai\",\n // smThai\n 22: \"x-mac-lao\",\n // smLao\n 23: \"x-mac-georgian\",\n // smGeorgian\n 24: \"x-mac-armenian\",\n // smArmenian\n 25: \"x-mac-chinesesimp\",\n // smSimpChinese\n 26: \"x-mac-tibetan\",\n // smTibetan\n 27: \"x-mac-mongolian\",\n // smMongolian\n 28: \"x-mac-ethiopic\",\n // smEthiopic\n 29: \"x-mac-ce\",\n // smCentralEuroRoman\n 30: \"x-mac-vietnamese\",\n // smVietnamese\n 31: \"x-mac-extarabic\"\n // smExtArabic\n};\nvar macLanguageEncodings = {\n 15: \"x-mac-icelandic\",\n // langIcelandic\n 17: \"x-mac-turkish\",\n // langTurkish\n 18: \"x-mac-croatian\",\n // langCroatian\n 24: \"x-mac-ce\",\n // langLithuanian\n 25: \"x-mac-ce\",\n // langPolish\n 26: \"x-mac-ce\",\n // langHungarian\n 27: \"x-mac-ce\",\n // langEstonian\n 28: \"x-mac-ce\",\n // langLatvian\n 30: \"x-mac-icelandic\",\n // langFaroese\n 37: \"x-mac-romanian\",\n // langRomanian\n 38: \"x-mac-ce\",\n // langCzech\n 39: \"x-mac-ce\",\n // langSlovak\n 40: \"x-mac-ce\",\n // langSlovenian\n 143: \"x-mac-inuit\",\n // langInuktitut\n 146: \"x-mac-gaelic\"\n // langIrishGaelicScript\n};\nfunction getEncoding(platformID, encodingID, languageID) {\n switch (platformID) {\n case 0:\n return utf16;\n case 1:\n return macLanguageEncodings[languageID] || macScriptEncodings[encodingID];\n case 3:\n if (encodingID === 1 || encodingID === 10) {\n return utf16;\n }\n break;\n }\n return void 0;\n}\nvar platforms = {\n 0: \"unicode\",\n 1: \"macintosh\",\n 2: \"reserved\",\n 3: \"windows\"\n};\nfunction getPlatform(platformID) {\n return platforms[platformID];\n}\nfunction parseNameTable(data, start, ltag) {\n const name = {};\n const p = new parse_default.Parser(data, start);\n const format = p.parseUShort();\n const count = p.parseUShort();\n const stringOffset = p.offset + p.parseUShort();\n for (let i = 0; i < count; i++) {\n const platformID = p.parseUShort();\n const encodingID = p.parseUShort();\n const languageID = p.parseUShort();\n const nameID = p.parseUShort();\n const property = nameTableNames[nameID] || nameID;\n const byteLength = p.parseUShort();\n const offset = p.parseUShort();\n const language = getLanguageCode(platformID, languageID, ltag);\n const encoding = getEncoding(platformID, encodingID, languageID);\n const platformName = getPlatform(platformID);\n if (encoding !== void 0 && language !== void 0 && platformName !== void 0) {\n let text;\n if (encoding === utf16) {\n text = decode.UTF16(data, stringOffset + offset, byteLength);\n } else {\n text = decode.MACSTRING(data, stringOffset + offset, byteLength, encoding);\n }\n if (text) {\n let platform = name[platformName];\n if (platform === void 0) {\n platform = name[platformName] = {};\n }\n let translations = platform[property];\n if (translations === void 0) {\n translations = platform[property] = {};\n }\n translations[language] = text;\n }\n }\n }\n if (format === 1) {\n p.parseUShort();\n }\n return name;\n}\nfunction reverseDict(dict) {\n const result = {};\n for (let key in dict) {\n result[dict[key]] = parseInt(key);\n }\n return result;\n}\nfunction makeNameRecord(platformID, encodingID, languageID, nameID, length, offset) {\n return new table_default.Record(\"NameRecord\", [\n { name: \"platformID\", type: \"USHORT\", value: platformID },\n { name: \"encodingID\", type: \"USHORT\", value: encodingID },\n { name: \"languageID\", type: \"USHORT\", value: languageID },\n { name: \"nameID\", type: \"USHORT\", value: nameID },\n { name: \"length\", type: \"USHORT\", value: length },\n { name: \"offset\", type: \"USHORT\", value: offset }\n ]);\n}\nfunction findSubArray(needle, haystack) {\n const needleLength = needle.length;\n const limit = haystack.length - needleLength + 1;\n loop:\n for (let pos = 0; pos < limit; pos++) {\n for (; pos < limit; pos++) {\n for (let k = 0; k < needleLength; k++) {\n if (haystack[pos + k] !== needle[k]) {\n continue loop;\n }\n }\n return pos;\n }\n }\n return -1;\n}\nfunction addStringToPool(s, pool) {\n let offset = findSubArray(s, pool);\n if (offset < 0) {\n offset = pool.length;\n let i = 0;\n const len = s.length;\n for (; i < len; ++i) {\n pool.push(s[i]);\n }\n }\n return offset;\n}\nfunction makeNameTable(names, ltag) {\n const platformNameIds = reverseDict(platforms);\n const macLanguageIds = reverseDict(macLanguages);\n const windowsLanguageIds = reverseDict(windowsLanguages);\n const nameRecords = [];\n const stringPool = [];\n for (let platform in names) {\n let nameID;\n const nameIDs = [];\n const namesWithNumericKeys = {};\n const nameTableIds = reverseDict(nameTableNames);\n const platformID = platformNameIds[platform];\n for (let key in names[platform]) {\n let id = nameTableIds[key];\n if (id === void 0) {\n id = key;\n }\n nameID = parseInt(id);\n if (isNaN(nameID)) {\n throw new Error('Name table entry \"' + key + '\" does not exist, see nameTableNames for complete list.');\n }\n namesWithNumericKeys[nameID] = names[platform][key];\n nameIDs.push(nameID);\n }\n for (let i = 0; i < nameIDs.length; i++) {\n nameID = nameIDs[i];\n const translations = namesWithNumericKeys[nameID];\n for (let lang in translations) {\n const text = translations[lang];\n if (platformID === 1 || platformID === 0) {\n let macLanguage = macLanguageIds[lang];\n let macScript = macLanguageToScript[macLanguage];\n const macEncoding = getEncoding(platformID, macScript, macLanguage);\n let macName = encode.MACSTRING(text, macEncoding);\n if (platformID === 0) {\n macLanguage = ltag.indexOf(lang);\n if (macLanguage < 0) {\n macLanguage = ltag.length;\n ltag.push(lang);\n }\n macScript = 4;\n macName = encode.UTF16(text);\n }\n if (macName !== void 0) {\n const macNameOffset = addStringToPool(macName, stringPool);\n nameRecords.push(makeNameRecord(\n platformID,\n macScript,\n macLanguage,\n nameID,\n macName.length,\n macNameOffset\n ));\n }\n }\n if (platformID === 3) {\n const winLanguage = windowsLanguageIds[lang];\n if (winLanguage !== void 0) {\n const winName = encode.UTF16(text);\n const winNameOffset = addStringToPool(winName, stringPool);\n nameRecords.push(makeNameRecord(\n 3,\n 1,\n winLanguage,\n nameID,\n winName.length,\n winNameOffset\n ));\n }\n }\n }\n }\n }\n nameRecords.sort(function(a, b) {\n return a.platformID - b.platformID || a.encodingID - b.encodingID || a.languageID - b.languageID || a.nameID - b.nameID;\n });\n const t = new table_default.Table(\"name\", [\n { name: \"format\", type: \"USHORT\", value: 0 },\n { name: \"count\", type: \"USHORT\", value: nameRecords.length },\n { name: \"stringOffset\", type: \"USHORT\", value: 6 + nameRecords.length * 12 }\n ]);\n for (let r = 0; r < nameRecords.length; r++) {\n t.fields.push({ name: \"record_\" + r, type: \"RECORD\", value: nameRecords[r] });\n }\n t.fields.push({ name: \"strings\", type: \"LITERAL\", value: stringPool });\n return t;\n}\nfunction getNameByID(names, nameID, allowedStandardIDs = []) {\n if (nameID < 256 && nameID in nameTableNames) {\n if (allowedStandardIDs.length && !allowedStandardIDs.includes(parseInt(nameID))) {\n return void 0;\n }\n nameID = nameTableNames[nameID];\n }\n for (let platform in names) {\n for (let nameKey in names[platform]) {\n if (nameKey === nameID || parseInt(nameKey) === nameID) {\n return names[platform][nameKey];\n }\n }\n }\n return void 0;\n}\nvar name_default = { parse: parseNameTable, make: makeNameTable, getNameByID };\n\n// src/tables/cmap.mjs\nfunction parseCmapTableFormat0(cmap, p, platformID, encodingID) {\n cmap.length = p.parseUShort();\n cmap.language = p.parseUShort() - 1;\n const indexMap = p.parseByteList(cmap.length);\n const glyphIndexMap = Object.assign({}, indexMap);\n const encoding = getEncoding(platformID, encodingID, cmap.language);\n const decodingTable = eightBitMacEncodings[encoding];\n for (let i = 0; i < decodingTable.length; i++) {\n glyphIndexMap[decodingTable.charCodeAt(i)] = indexMap[128 + i];\n }\n cmap.glyphIndexMap = glyphIndexMap;\n}\nfunction parseCmapTableFormat12or13(cmap, p, format) {\n p.parseUShort();\n cmap.length = p.parseULong();\n cmap.language = p.parseULong();\n let groupCount;\n cmap.groupCount = groupCount = p.parseULong();\n cmap.glyphIndexMap = {};\n for (let i = 0; i < groupCount; i += 1) {\n const startCharCode = p.parseULong();\n const endCharCode = p.parseULong();\n let startGlyphId = p.parseULong();\n for (let c = startCharCode; c <= endCharCode; c += 1) {\n cmap.glyphIndexMap[c] = startGlyphId;\n if (format === 12) {\n startGlyphId++;\n }\n }\n }\n}\nfunction parseCmapTableFormat4(cmap, p, data, start, offset) {\n cmap.length = p.parseUShort();\n cmap.language = p.parseUShort();\n let segCount;\n cmap.segCount = segCount = p.parseUShort() >> 1;\n p.skip(\"uShort\", 3);\n cmap.glyphIndexMap = {};\n const endCountParser = new parse_default.Parser(data, start + offset + 14);\n const startCountParser = new parse_default.Parser(data, start + offset + 16 + segCount * 2);\n const idDeltaParser = new parse_default.Parser(data, start + offset + 16 + segCount * 4);\n const idRangeOffsetParser = new parse_default.Parser(data, start + offset + 16 + segCount * 6);\n let glyphIndexOffset = start + offset + 16 + segCount * 8;\n for (let i = 0; i < segCount - 1; i += 1) {\n let glyphIndex;\n const endCount = endCountParser.parseUShort();\n const startCount = startCountParser.parseUShort();\n const idDelta = idDeltaParser.parseShort();\n const idRangeOffset = idRangeOffsetParser.parseUShort();\n for (let c = startCount; c <= endCount; c += 1) {\n if (idRangeOffset !== 0) {\n glyphIndexOffset = idRangeOffsetParser.offset + idRangeOffsetParser.relativeOffset - 2;\n glyphIndexOffset += idRangeOffset;\n glyphIndexOffset += (c - startCount) * 2;\n glyphIndex = parse_default.getUShort(data, glyphIndexOffset);\n if (glyphIndex !== 0) {\n glyphIndex = glyphIndex + idDelta & 65535;\n }\n } else {\n glyphIndex = c + idDelta & 65535;\n }\n cmap.glyphIndexMap[c] = glyphIndex;\n }\n }\n}\nfunction parseCmapTableFormat14(cmap, p) {\n const varSelectorList = {};\n p.skip(\"uLong\");\n const numVarSelectorRecords = p.parseULong();\n for (let i = 0; i < numVarSelectorRecords; i += 1) {\n const varSelector = p.parseUInt24();\n const varSelectorRecord = {\n varSelector\n };\n const defaultUVSOffset = p.parseOffset32();\n const nonDefaultUVSOffset = p.parseOffset32();\n const currentOffset = p.relativeOffset;\n if (defaultUVSOffset) {\n p.relativeOffset = defaultUVSOffset;\n varSelectorRecord.defaultUVS = p.parseStruct({\n ranges: function() {\n return p.parseRecordList32({\n startUnicodeValue: p.parseUInt24,\n additionalCount: p.parseByte\n });\n }\n });\n }\n if (nonDefaultUVSOffset) {\n p.relativeOffset = nonDefaultUVSOffset;\n varSelectorRecord.nonDefaultUVS = p.parseStruct({\n uvsMappings: function() {\n const map = {};\n const list = p.parseRecordList32({\n unicodeValue: p.parseUInt24,\n glyphID: p.parseUShort\n });\n for (let i2 = 0; i2 < list.length; i2 += 1) {\n map[list[i2].unicodeValue] = list[i2];\n }\n return map;\n }\n });\n }\n varSelectorList[varSelector] = varSelectorRecord;\n p.relativeOffset = currentOffset;\n }\n cmap.varSelectorList = varSelectorList;\n}\nfunction parseCmapTable(data, start) {\n const cmap = {};\n cmap.version = parse_default.getUShort(data, start);\n check_default.argument(cmap.version === 0, \"cmap table version should be 0.\");\n cmap.numTables = parse_default.getUShort(data, start + 2);\n let format14Parser = null;\n let format14offset = -1;\n let offset = -1;\n let platformId = null;\n let encodingId = null;\n const platform0Encodings = [0, 1, 2, 3, 4, 6];\n const platform3Encodings = [0, 1, 10];\n for (let i = cmap.numTables - 1; i >= 0; i -= 1) {\n platformId = parse_default.getUShort(data, start + 4 + i * 8);\n encodingId = parse_default.getUShort(data, start + 4 + i * 8 + 2);\n if (platformId === 3 && platform3Encodings.includes(encodingId) || platformId === 0 && platform0Encodings.includes(encodingId) || platformId === 1 && encodingId === 0) {\n if (offset > 0) continue;\n offset = parse_default.getULong(data, start + 4 + i * 8 + 4);\n if (format14Parser) {\n break;\n }\n } else if (platformId === 0 && encodingId === 5) {\n format14offset = parse_default.getULong(data, start + 4 + i * 8 + 4);\n format14Parser = new parse_default.Parser(data, start + format14offset);\n if (format14Parser.parseUShort() !== 14) {\n format14offset = -1;\n format14Parser = null;\n } else if (offset > 0) {\n break;\n }\n }\n }\n if (offset === -1) {\n throw new Error(\"No valid cmap sub-tables found.\");\n }\n const p = new parse_default.Parser(data, start + offset);\n cmap.format = p.parseUShort();\n if (cmap.format === 0) {\n parseCmapTableFormat0(cmap, p, platformId, encodingId);\n } else if (cmap.format === 12 || cmap.format === 13) {\n parseCmapTableFormat12or13(cmap, p, cmap.format);\n } else if (cmap.format === 4) {\n parseCmapTableFormat4(cmap, p, data, start, offset);\n } else {\n throw new Error(\n \"Only format 0 (platformId 1, encodingId 0), 4, 12 and 14 cmap tables are supported (found format \" + cmap.format + \", platformId \" + platformId + \", encodingId \" + encodingId + \").\"\n );\n }\n if (format14Parser) {\n parseCmapTableFormat14(cmap, format14Parser);\n }\n return cmap;\n}\nfunction addSegment(t, code, glyphIndex) {\n t.segments.push({\n end: code,\n start: code,\n delta: -(code - glyphIndex),\n offset: 0,\n glyphIndex\n });\n}\nfunction addTerminatorSegment(t) {\n t.segments.push({\n end: 65535,\n start: 65535,\n delta: 1,\n offset: 0\n });\n}\nfunction mergeSegments(segments) {\n if (segments.length === 0) return segments;\n const merged = [segments[0]];\n for (let i = 1; i < segments.length; i++) {\n const prev = merged[merged.length - 1];\n const curr = segments[i];\n if (prev.end + 1 === curr.start && prev.delta === curr.delta && curr.end !== 65535) {\n prev.end = curr.end;\n } else {\n merged.push(curr);\n }\n }\n return merged;\n}\nfunction makeCmapTable(glyphs) {\n let isPlan0Only = true;\n let i;\n for (i = glyphs.length - 1; i > 0; i -= 1) {\n const g = glyphs.get(i);\n if (g.unicode > 65535) {\n isPlan0Only = false;\n break;\n }\n }\n let cmapTable = [\n { name: \"version\", type: \"USHORT\", value: 0 },\n { name: \"numTables\", type: \"USHORT\", value: isPlan0Only ? 1 : 2 },\n // CMAP 4 header\n { name: \"platformID\", type: \"USHORT\", value: 3 },\n { name: \"encodingID\", type: \"USHORT\", value: 1 },\n { name: \"offset\", type: \"ULONG\", value: isPlan0Only ? 12 : 12 + 8 }\n ];\n if (!isPlan0Only)\n cmapTable.push(...[\n // CMAP 12 header\n { name: \"cmap12PlatformID\", type: \"USHORT\", value: 3 },\n // We encode only for PlatformID = 3 (Windows) because it is supported everywhere\n { name: \"cmap12EncodingID\", type: \"USHORT\", value: 10 },\n { name: \"cmap12Offset\", type: \"ULONG\", value: 0 }\n ]);\n cmapTable.push(...[\n // CMAP 4 Subtable\n { name: \"format\", type: \"USHORT\", value: 4 },\n { name: \"cmap4Length\", type: \"USHORT\", value: 0 },\n { name: \"language\", type: \"USHORT\", value: 0 },\n { name: \"segCountX2\", type: \"USHORT\", value: 0 },\n { name: \"searchRange\", type: \"USHORT\", value: 0 },\n { name: \"entrySelector\", type: \"USHORT\", value: 0 },\n { name: \"rangeShift\", type: \"USHORT\", value: 0 }\n ]);\n const t = new table_default.Table(\"cmap\", cmapTable);\n t.segments = [];\n for (i = 0; i < glyphs.length; i += 1) {\n const glyph = glyphs.get(i);\n for (let j = 0; j < glyph.unicodes.length; j += 1) {\n addSegment(t, glyph.unicodes[j], i);\n }\n }\n t.segments.sort(function(a, b) {\n return a.start - b.start;\n });\n t.segments = mergeSegments(t.segments);\n addTerminatorSegment(t);\n const segCount = t.segments.length;\n let segCountToRemove = 0;\n let endCounts = [];\n let startCounts = [];\n let idDeltas = [];\n let idRangeOffsets = [];\n let glyphIds = [];\n let cmap12Groups = [];\n for (i = 0; i < segCount; i += 1) {\n const segment = t.segments[i];\n if (segment.end <= 65535 && segment.start <= 65535) {\n endCounts.push({ name: \"end_\" + i, type: \"USHORT\", value: segment.end });\n startCounts.push({ name: \"start_\" + i, type: \"USHORT\", value: segment.start });\n idDeltas.push({ name: \"idDelta_\" + i, type: \"SHORT\", value: segment.delta });\n idRangeOffsets.push({ name: \"idRangeOffset_\" + i, type: \"USHORT\", value: segment.offset });\n if (segment.glyphId !== void 0) {\n glyphIds.push({ name: \"glyph_\" + i, type: \"USHORT\", value: segment.glyphId });\n }\n } else {\n segCountToRemove += 1;\n }\n if (!isPlan0Only && segment.glyphIndex !== void 0) {\n cmap12Groups.push({ name: \"cmap12Start_\" + i, type: \"ULONG\", value: segment.start });\n cmap12Groups.push({ name: \"cmap12End_\" + i, type: \"ULONG\", value: segment.end });\n cmap12Groups.push({ name: \"cmap12Glyph_\" + i, type: \"ULONG\", value: segment.glyphIndex });\n }\n }\n t.segCountX2 = (segCount - segCountToRemove) * 2;\n t.searchRange = Math.pow(2, Math.floor(Math.log(segCount - segCountToRemove) / Math.log(2))) * 2;\n t.entrySelector = Math.log(t.searchRange / 2) / Math.log(2);\n t.rangeShift = t.segCountX2 - t.searchRange;\n for (let i2 = 0; i2 < endCounts.length; i2++) {\n t.fields.push(endCounts[i2]);\n }\n t.fields.push({ name: \"reservedPad\", type: \"USHORT\", value: 0 });\n for (let i2 = 0; i2 < startCounts.length; i2++) {\n t.fields.push(startCounts[i2]);\n }\n for (let i2 = 0; i2 < idDeltas.length; i2++) {\n t.fields.push(idDeltas[i2]);\n }\n for (let i2 = 0; i2 < idRangeOffsets.length; i2++) {\n t.fields.push(idRangeOffsets[i2]);\n }\n for (let i2 = 0; i2 < glyphIds.length; i2++) {\n t.fields.push(glyphIds[i2]);\n }\n t.cmap4Length = 14 + // Subtable header\n endCounts.length * 2 + 2 + // reservedPad\n startCounts.length * 2 + idDeltas.length * 2 + idRangeOffsets.length * 2 + glyphIds.length * 2;\n if (!isPlan0Only) {\n const cmap12Length = 16 + // Subtable header\n cmap12Groups.length * 4;\n t.cmap12Offset = 12 + 2 * 2 + 4 + t.cmap4Length;\n t.fields.push(...[\n { name: \"cmap12Format\", type: \"USHORT\", value: 12 },\n { name: \"cmap12Reserved\", type: \"USHORT\", value: 0 },\n { name: \"cmap12Length\", type: \"ULONG\", value: cmap12Length },\n { name: \"cmap12Language\", type: \"ULONG\", value: 0 },\n { name: \"cmap12nGroups\", type: \"ULONG\", value: cmap12Groups.length / 3 }\n ]);\n for (let i2 = 0; i2 < cmap12Groups.length; i2++) {\n t.fields.push(cmap12Groups[i2]);\n }\n }\n return t;\n}\nvar cmap_default = { parse: parseCmapTable, make: makeCmapTable };\n\n// src/encoding.mjs\nvar cffStandardStrings = [\n \".notdef\",\n \"space\",\n \"exclam\",\n \"quotedbl\",\n \"numbersign\",\n \"dollar\",\n \"percent\",\n \"ampersand\",\n \"quoteright\",\n \"parenleft\",\n \"parenright\",\n \"asterisk\",\n \"plus\",\n \"comma\",\n \"hyphen\",\n \"period\",\n \"slash\",\n \"zero\",\n \"one\",\n \"two\",\n \"three\",\n \"four\",\n \"five\",\n \"six\",\n \"seven\",\n \"eight\",\n \"nine\",\n \"colon\",\n \"semicolon\",\n \"less\",\n \"equal\",\n \"greater\",\n \"question\",\n \"at\",\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"I\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"O\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\",\n \"bracketleft\",\n \"backslash\",\n \"bracketright\",\n \"asciicircum\",\n \"underscore\",\n \"quoteleft\",\n \"a\",\n \"b\",\n \"c\",\n \"d\",\n \"e\",\n \"f\",\n \"g\",\n \"h\",\n \"i\",\n \"j\",\n \"k\",\n \"l\",\n \"m\",\n \"n\",\n \"o\",\n \"p\",\n \"q\",\n \"r\",\n \"s\",\n \"t\",\n \"u\",\n \"v\",\n \"w\",\n \"x\",\n \"y\",\n \"z\",\n \"braceleft\",\n \"bar\",\n \"braceright\",\n \"asciitilde\",\n \"exclamdown\",\n \"cent\",\n \"sterling\",\n \"fraction\",\n \"yen\",\n \"florin\",\n \"section\",\n \"currency\",\n \"quotesingle\",\n \"quotedblleft\",\n \"guillemotleft\",\n \"guilsinglleft\",\n \"guilsinglright\",\n \"fi\",\n \"fl\",\n \"endash\",\n \"dagger\",\n \"daggerdbl\",\n \"periodcentered\",\n \"paragraph\",\n \"bullet\",\n \"quotesinglbase\",\n \"quotedblbase\",\n \"quotedblright\",\n \"guillemotright\",\n \"ellipsis\",\n \"perthousand\",\n \"questiondown\",\n \"grave\",\n \"acute\",\n \"circumflex\",\n \"tilde\",\n \"macron\",\n \"breve\",\n \"dotaccent\",\n \"dieresis\",\n \"ring\",\n \"cedilla\",\n \"hungarumlaut\",\n \"ogonek\",\n \"caron\",\n \"emdash\",\n \"AE\",\n \"ordfeminine\",\n \"Lslash\",\n \"Oslash\",\n \"OE\",\n \"ordmasculine\",\n \"ae\",\n \"dotlessi\",\n \"lslash\",\n \"oslash\",\n \"oe\",\n \"germandbls\",\n \"onesuperior\",\n \"logicalnot\",\n \"mu\",\n \"trademark\",\n \"Eth\",\n \"onehalf\",\n \"plusminus\",\n \"Thorn\",\n \"onequarter\",\n \"divide\",\n \"brokenbar\",\n \"degree\",\n \"thorn\",\n \"threequarters\",\n \"twosuperior\",\n \"registered\",\n \"minus\",\n \"eth\",\n \"multiply\",\n \"threesuperior\",\n \"copyright\",\n \"Aacute\",\n \"Acircumflex\",\n \"Adieresis\",\n \"Agrave\",\n \"Aring\",\n \"Atilde\",\n \"Ccedilla\",\n \"Eacute\",\n \"Ecircumflex\",\n \"Edieresis\",\n \"Egrave\",\n \"Iacute\",\n \"Icircumflex\",\n \"Idieresis\",\n \"Igrave\",\n \"Ntilde\",\n \"Oacute\",\n \"Ocircumflex\",\n \"Odieresis\",\n \"Ograve\",\n \"Otilde\",\n \"Scaron\",\n \"Uacute\",\n \"Ucircumflex\",\n \"Udieresis\",\n \"Ugrave\",\n \"Yacute\",\n \"Ydieresis\",\n \"Zcaron\",\n \"aacute\",\n \"acircumflex\",\n \"adieresis\",\n \"agrave\",\n \"aring\",\n \"atilde\",\n \"ccedilla\",\n \"eacute\",\n \"ecircumflex\",\n \"edieresis\",\n \"egrave\",\n \"iacute\",\n \"icircumflex\",\n \"idieresis\",\n \"igrave\",\n \"ntilde\",\n \"oacute\",\n \"ocircumflex\",\n \"odieresis\",\n \"ograve\",\n \"otilde\",\n \"scaron\",\n \"uacute\",\n \"ucircumflex\",\n \"udieresis\",\n \"ugrave\",\n \"yacute\",\n \"ydieresis\",\n \"zcaron\",\n \"exclamsmall\",\n \"Hungarumlautsmall\",\n \"dollaroldstyle\",\n \"dollarsuperior\",\n \"ampersandsmall\",\n \"Acutesmall\",\n \"parenleftsuperior\",\n \"parenrightsuperior\",\n \"266 ff\",\n \"onedotenleader\",\n \"zerooldstyle\",\n \"oneoldstyle\",\n \"twooldstyle\",\n \"threeoldstyle\",\n \"fouroldstyle\",\n \"fiveoldstyle\",\n \"sixoldstyle\",\n \"sevenoldstyle\",\n \"eightoldstyle\",\n \"nineoldstyle\",\n \"commasuperior\",\n \"threequartersemdash\",\n \"periodsuperior\",\n \"questionsmall\",\n \"asuperior\",\n \"bsuperior\",\n \"centsuperior\",\n \"dsuperior\",\n \"esuperior\",\n \"isuperior\",\n \"lsuperior\",\n \"msuperior\",\n \"nsuperior\",\n \"osuperior\",\n \"rsuperior\",\n \"ssuperior\",\n \"tsuperior\",\n \"ff\",\n \"ffi\",\n \"ffl\",\n \"parenleftinferior\",\n \"parenrightinferior\",\n \"Circumflexsmall\",\n \"hyphensuperior\",\n \"Gravesmall\",\n \"Asmall\",\n \"Bsmall\",\n \"Csmall\",\n \"Dsmall\",\n \"Esmall\",\n \"Fsmall\",\n \"Gsmall\",\n \"Hsmall\",\n \"Ismall\",\n \"Jsmall\",\n \"Ksmall\",\n \"Lsmall\",\n \"Msmall\",\n \"Nsmall\",\n \"Osmall\",\n \"Psmall\",\n \"Qsmall\",\n \"Rsmall\",\n \"Ssmall\",\n \"Tsmall\",\n \"Usmall\",\n \"Vsmall\",\n \"Wsmall\",\n \"Xsmall\",\n \"Ysmall\",\n \"Zsmall\",\n \"colonmonetary\",\n \"onefitted\",\n \"rupiah\",\n \"Tildesmall\",\n \"exclamdownsmall\",\n \"centoldstyle\",\n \"Lslashsmall\",\n \"Scaronsmall\",\n \"Zcaronsmall\",\n \"Dieresissmall\",\n \"Brevesmall\",\n \"Caronsmall\",\n \"Dotaccentsmall\",\n \"Macronsmall\",\n \"figuredash\",\n \"hypheninferior\",\n \"Ogoneksmall\",\n \"Ringsmall\",\n \"Cedillasmall\",\n \"questiondownsmall\",\n \"oneeighth\",\n \"threeeighths\",\n \"fiveeighths\",\n \"seveneighths\",\n \"onethird\",\n \"twothirds\",\n \"zerosuperior\",\n \"foursuperior\",\n \"fivesuperior\",\n \"sixsuperior\",\n \"sevensuperior\",\n \"eightsuperior\",\n \"ninesuperior\",\n \"zeroinferior\",\n \"oneinferior\",\n \"twoinferior\",\n \"threeinferior\",\n \"fourinferior\",\n \"fiveinferior\",\n \"sixinferior\",\n \"seveninferior\",\n \"eightinferior\",\n \"nineinferior\",\n \"centinferior\",\n \"dollarinferior\",\n \"periodinferior\",\n \"commainferior\",\n \"Agravesmall\",\n \"Aacutesmall\",\n \"Acircumflexsmall\",\n \"Atildesmall\",\n \"Adieresissmall\",\n \"Aringsmall\",\n \"AEsmall\",\n \"Ccedillasmall\",\n \"Egravesmall\",\n \"Eacutesmall\",\n \"Ecircumflexsmall\",\n \"Edieresissmall\",\n \"Igravesmall\",\n \"Iacutesmall\",\n \"Icircumflexsmall\",\n \"Idieresissmall\",\n \"Ethsmall\",\n \"Ntildesmall\",\n \"Ogravesmall\",\n \"Oacutesmall\",\n \"Ocircumflexsmall\",\n \"Otildesmall\",\n \"Odieresissmall\",\n \"OEsmall\",\n \"Oslashsmall\",\n \"Ugravesmall\",\n \"Uacutesmall\",\n \"Ucircumflexsmall\",\n \"Udieresissmall\",\n \"Yacutesmall\",\n \"Thornsmall\",\n \"Ydieresissmall\",\n \"001.000\",\n \"001.001\",\n \"001.002\",\n \"001.003\",\n \"Black\",\n \"Bold\",\n \"Book\",\n \"Light\",\n \"Medium\",\n \"Regular\",\n \"Roman\",\n \"Semibold\"\n];\nvar cffISOAdobeStrings = [\n \".notdef\",\n \"space\",\n \"exclam\",\n \"quotedbl\",\n \"numbersign\",\n \"dollar\",\n \"percent\",\n \"ampersand\",\n \"quoteright\",\n \"parenleft\",\n \"parenright\",\n \"asterisk\",\n \"plus\",\n \"comma\",\n \"hyphen\",\n \"period\",\n \"slash\",\n \"zero\",\n \"one\",\n \"two\",\n \"three\",\n \"four\",\n \"five\",\n \"six\",\n \"seven\",\n \"eight\",\n \"nine\",\n \"colon\",\n \"semicolon\",\n \"less\",\n \"equal\",\n \"greater\",\n \"question\",\n \"at\",\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"I\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"O\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\",\n \"bracketleft\",\n \"backslash\",\n \"bracketright\",\n \"asciicircum\",\n \"underscore\",\n \"quoteleft\",\n \"a\",\n \"b\",\n \"c\",\n \"d\",\n \"e\",\n \"f\",\n \"g\",\n \"h\",\n \"i\",\n \"j\",\n \"k\",\n \"l\",\n \"m\",\n \"n\",\n \"o\",\n \"p\",\n \"q\",\n \"r\",\n \"s\",\n \"t\",\n \"u\",\n \"v\",\n \"w\",\n \"x\",\n \"y\",\n \"z\",\n \"braceleft\",\n \"bar\",\n \"braceright\",\n \"asciitilde\",\n \"exclamdown\",\n \"cent\",\n \"sterling\",\n \"fraction\",\n \"yen\",\n \"florin\",\n \"section\",\n \"currency\",\n \"quotesingle\",\n \"quotedblleft\",\n \"guillemotleft\",\n \"guilsinglleft\",\n \"guilsinglright\",\n \"fi\",\n \"fl\",\n \"endash\",\n \"dagger\",\n \"daggerdbl\",\n \"periodcentered\",\n \"paragraph\",\n \"bullet\",\n \"quotesinglbase\",\n \"quotedblbase\",\n \"quotedblright\",\n \"guillemotright\",\n \"ellipsis\",\n \"perthousand\",\n \"questiondown\",\n \"grave\",\n \"acute\",\n \"circumflex\",\n \"tilde\",\n \"macron\",\n \"breve\",\n \"dotaccent\",\n \"dieresis\",\n \"ring\",\n \"cedilla\",\n \"hungarumlaut\",\n \"ogonek\",\n \"caron\",\n \"emdash\",\n \"AE\",\n \"ordfeminine\",\n \"Lslash\",\n \"Oslash\",\n \"OE\",\n \"ordmasculine\",\n \"ae\",\n \"dotlessi\",\n \"lslash\",\n \"oslash\",\n \"oe\",\n \"germandbls\",\n \"onesuperior\",\n \"logicalnot\",\n \"mu\",\n \"trademark\",\n \"Eth\",\n \"onehalf\",\n \"plusminus\",\n \"Thorn\",\n \"onequarter\",\n \"divide\",\n \"brokenbar\",\n \"degree\",\n \"thorn\",\n \"threequarters\",\n \"twosuperior\",\n \"registered\",\n \"minus\",\n \"eth\",\n \"multiply\",\n \"threesuperior\",\n \"copyright\",\n \"Aacute\",\n \"Acircumflex\",\n \"Adieresis\",\n \"Agrave\",\n \"Aring\",\n \"Atilde\",\n \"Ccedilla\",\n \"Eacute\",\n \"Ecircumflex\",\n \"Edieresis\",\n \"Egrave\",\n \"Iacute\",\n \"Icircumflex\",\n \"Idieresis\",\n \"Igrave\",\n \"Ntilde\",\n \"Oacute\",\n \"Ocircumflex\",\n \"Odieresis\",\n \"Ograve\",\n \"Otilde\",\n \"Scaron\",\n \"Uacute\",\n \"Ucircumflex\",\n \"Udieresis\",\n \"Ugrave\",\n \"Yacute\",\n \"Ydieresis\",\n \"Zcaron\",\n \"aacute\",\n \"acircumflex\",\n \"adieresis\",\n \"agrave\",\n \"aring\",\n \"atilde\",\n \"ccedilla\",\n \"eacute\",\n \"ecircumflex\",\n \"edieresis\",\n \"egrave\",\n \"iacute\",\n \"icircumflex\",\n \"idieresis\",\n \"igrave\",\n \"ntilde\",\n \"oacute\",\n \"ocircumflex\",\n \"odieresis\",\n \"ograve\",\n \"otilde\",\n \"scaron\",\n \"uacute\",\n \"ucircumflex\",\n \"udieresis\",\n \"ugrave\",\n \"yacute\",\n \"ydieresis\",\n \"zcaron\"\n];\nvar cffIExpertStrings = [\n \".notdef\",\n \"space\",\n \"exclamsmall\",\n \"Hungarumlautsmall\",\n \"dollaroldstyle\",\n \"dollarsuperior\",\n \"ampersandsmall\",\n \"Acutesmall\",\n \"parenleftsuperior\",\n \"parenrightsuperior\",\n \"twodotenleader\",\n \"onedotenleader\",\n \"comma\",\n \"hyphen\",\n \"period\",\n \"fraction\",\n \"zerooldstyle\",\n \"oneoldstyle\",\n \"twooldstyle\",\n \"threeoldstyle\",\n \"fouroldstyle\",\n \"fiveoldstyle\",\n \"sixoldstyle\",\n \"sevenoldstyle\",\n \"eightoldstyle\",\n \"nineoldstyle\",\n \"colon\",\n \"semicolon\",\n \"commasuperior\",\n \"threequartersemdash\",\n \"periodsuperior\",\n \"questionsmall\",\n \"asuperior\",\n \"bsuperior\",\n \"centsuperior\",\n \"dsuperior\",\n \"esuperior\",\n \"isuperior\",\n \"lsuperior\",\n \"msuperior\",\n \"nsuperior\",\n \"osuperior\",\n \"rsuperior\",\n \"ssuperior\",\n \"tsuperior\",\n \"ff\",\n \"fi\",\n \"fl\",\n \"ffi\",\n \"ffl\",\n \"parenleftinferior\",\n \"parenrightinferior\",\n \"Circumflexsmall\",\n \"hyphensuperior\",\n \"Gravesmall\",\n \"Asmall\",\n \"Bsmall\",\n \"Csmall\",\n \"Dsmall\",\n \"Esmall\",\n \"Fsmall\",\n \"Gsmall\",\n \"Hsmall\",\n \"Ismall\",\n \"Jsmall\",\n \"Ksmall\",\n \"Lsmall\",\n \"Msmall\",\n \"Nsmall\",\n \"Osmall\",\n \"Psmall\",\n \"Qsmall\",\n \"Rsmall\",\n \"Ssmall\",\n \"Tsmall\",\n \"Usmall\",\n \"Vsmall\",\n \"Wsmall\",\n \"Xsmall\",\n \"Ysmall\",\n \"Zsmall\",\n \"colonmonetary\",\n \"onefitted\",\n \"rupiah\",\n \"Tildesmall\",\n \"exclamdownsmall\",\n \"centoldstyle\",\n \"Lslashsmall\",\n \"Scaronsmall\",\n \"Zcaronsmall\",\n \"Dieresissmall\",\n \"Brevesmall\",\n \"Caronsmall\",\n \"Dotaccentsmall\",\n \"Macronsmall\",\n \"figuredash\",\n \"hypheninferior\",\n \"Ogoneksmall\",\n \"Ringsmall\",\n \"Cedillasmall\",\n \"onequarter\",\n \"onehalf\",\n \"threequarters\",\n \"questiondownsmall\",\n \"oneeighth\",\n \"threeeighths\",\n \"fiveeighths\",\n \"seveneighths\",\n \"onethird\",\n \"twothirds\",\n \"zerosuperior\",\n \"onesuperior\",\n \"twosuperior\",\n \"threesuperior\",\n \"foursuperior\",\n \"fivesuperior\",\n \"sixsuperior\",\n \"sevensuperior\",\n \"eightsuperior\",\n \"ninesuperior\",\n \"zeroinferior\",\n \"oneinferior\",\n \"twoinferior\",\n \"threeinferior\",\n \"fourinferior\",\n \"fiveinferior\",\n \"sixinferior\",\n \"seveninferior\",\n \"eightinferior\",\n \"nineinferior\",\n \"centinferior\",\n \"dollarinferior\",\n \"periodinferior\",\n \"commainferior\",\n \"Agravesmall\",\n \"Aacutesmall\",\n \"Acircumflexsmall\",\n \"Atildesmall\",\n \"Adieresissmall\",\n \"Aringsmall\",\n \"AEsmall\",\n \"Ccedillasmall\",\n \"Egravesmall\",\n \"Eacutesmall\",\n \"Ecircumflexsmall\",\n \"Edieresissmall\",\n \"Igravesmall\",\n \"Iacutesmall\",\n \"Icircumflexsmall\",\n \"Idieresissmall\",\n \"Ethsmall\",\n \"Ntildesmall\",\n \"Ogravesmall\",\n \"Oacutesmall\",\n \"Ocircumflexsmall\",\n \"Otildesmall\",\n \"Odieresissmall\",\n \"OEsmall\",\n \"Oslashsmall\",\n \"Ugravesmall\",\n \"Uacutesmall\",\n \"Ucircumflexsmall\",\n \"Udieresissmall\",\n \"Yacutesmall\",\n \"Thornsmall\",\n \"Ydieresissmall\"\n];\nvar cffExpertSubsetStrings = [\n \".notdef\",\n \"space\",\n \"dollaroldstyle\",\n \"dollarsuperior\",\n \"parenleftsuperior\",\n \"parenrightsuperior\",\n \"twodotenleader\",\n \"onedotenleader\",\n \"comma\",\n \"hyphen\",\n \"period\",\n \"fraction\",\n \"zerooldstyle\",\n \"oneoldstyle\",\n \"twooldstyle\",\n \"threeoldstyle\",\n \"fouroldstyle\",\n \"fiveoldstyle\",\n \"sixoldstyle\",\n \"sevenoldstyle\",\n \"eightoldstyle\",\n \"nineoldstyle\",\n \"colon\",\n \"semicolon\",\n \"commasuperior\",\n \"threequartersemdash\",\n \"periodsuperior\",\n \"asuperior\",\n \"bsuperior\",\n \"centsuperior\",\n \"dsuperior\",\n \"esuperior\",\n \"isuperior\",\n \"lsuperior\",\n \"msuperior\",\n \"nsuperior\",\n \"osuperior\",\n \"rsuperior\",\n \"ssuperior\",\n \"tsuperior\",\n \"ff\",\n \"fi\",\n \"fl\",\n \"ffi\",\n \"ffl\",\n \"parenleftinferior\",\n \"parenrightinferior\",\n \"hyphensuperior\",\n \"colonmonetary\",\n \"onefitted\",\n \"rupiah\",\n \"centoldstyle\",\n \"figuredash\",\n \"hypheninferior\",\n \"onequarter\",\n \"onehalf\",\n \"threequarters\",\n \"oneeighth\",\n \"threeeighths\",\n \"fiveeighths\",\n \"seveneighths\",\n \"onethird\",\n \"twothirds\",\n \"zerosuperior\",\n \"onesuperior\",\n \"twosuperior\",\n \"threesuperior\",\n \"foursuperior\",\n \"fivesuperior\",\n \"sixsuperior\",\n \"sevensuperior\",\n \"eightsuperior\",\n \"ninesuperior\",\n \"zeroinferior\",\n \"oneinferior\",\n \"twoinferior\",\n \"threeinferior\",\n \"fourinferior\",\n \"fiveinferior\",\n \"sixinferior\",\n \"seveninferior\",\n \"eightinferior\",\n \"nineinferior\",\n \"centinferior\",\n \"dollarinferior\",\n \"periodinferior\",\n \"commainferior\"\n];\nvar cffStandardEncoding = [\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"space\",\n \"exclam\",\n \"quotedbl\",\n \"numbersign\",\n \"dollar\",\n \"percent\",\n \"ampersand\",\n \"quoteright\",\n \"parenleft\",\n \"parenright\",\n \"asterisk\",\n \"plus\",\n \"comma\",\n \"hyphen\",\n \"period\",\n \"slash\",\n \"zero\",\n \"one\",\n \"two\",\n \"three\",\n \"four\",\n \"five\",\n \"six\",\n \"seven\",\n \"eight\",\n \"nine\",\n \"colon\",\n \"semicolon\",\n \"less\",\n \"equal\",\n \"greater\",\n \"question\",\n \"at\",\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"I\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"O\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\",\n \"bracketleft\",\n \"backslash\",\n \"bracketright\",\n \"asciicircum\",\n \"underscore\",\n \"quoteleft\",\n \"a\",\n \"b\",\n \"c\",\n \"d\",\n \"e\",\n \"f\",\n \"g\",\n \"h\",\n \"i\",\n \"j\",\n \"k\",\n \"l\",\n \"m\",\n \"n\",\n \"o\",\n \"p\",\n \"q\",\n \"r\",\n \"s\",\n \"t\",\n \"u\",\n \"v\",\n \"w\",\n \"x\",\n \"y\",\n \"z\",\n \"braceleft\",\n \"bar\",\n \"braceright\",\n \"asciitilde\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"exclamdown\",\n \"cent\",\n \"sterling\",\n \"fraction\",\n \"yen\",\n \"florin\",\n \"section\",\n \"currency\",\n \"quotesingle\",\n \"quotedblleft\",\n \"guillemotleft\",\n \"guilsinglleft\",\n \"guilsinglright\",\n \"fi\",\n \"fl\",\n \"\",\n \"endash\",\n \"dagger\",\n \"daggerdbl\",\n \"periodcentered\",\n \"\",\n \"paragraph\",\n \"bullet\",\n \"quotesinglbase\",\n \"quotedblbase\",\n \"quotedblright\",\n \"guillemotright\",\n \"ellipsis\",\n \"perthousand\",\n \"\",\n \"questiondown\",\n \"\",\n \"grave\",\n \"acute\",\n \"circumflex\",\n \"tilde\",\n \"macron\",\n \"breve\",\n \"dotaccent\",\n \"dieresis\",\n \"\",\n \"ring\",\n \"cedilla\",\n \"\",\n \"hungarumlaut\",\n \"ogonek\",\n \"caron\",\n \"emdash\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"AE\",\n \"\",\n \"ordfeminine\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"Lslash\",\n \"Oslash\",\n \"OE\",\n \"ordmasculine\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"ae\",\n \"\",\n \"\",\n \"\",\n \"dotlessi\",\n \"\",\n \"\",\n \"lslash\",\n \"oslash\",\n \"oe\",\n \"germandbls\"\n];\nvar cffExpertEncoding = [\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"space\",\n \"exclamsmall\",\n \"Hungarumlautsmall\",\n \"\",\n \"dollaroldstyle\",\n \"dollarsuperior\",\n \"ampersandsmall\",\n \"Acutesmall\",\n \"parenleftsuperior\",\n \"parenrightsuperior\",\n \"twodotenleader\",\n \"onedotenleader\",\n \"comma\",\n \"hyphen\",\n \"period\",\n \"fraction\",\n \"zerooldstyle\",\n \"oneoldstyle\",\n \"twooldstyle\",\n \"threeoldstyle\",\n \"fouroldstyle\",\n \"fiveoldstyle\",\n \"sixoldstyle\",\n \"sevenoldstyle\",\n \"eightoldstyle\",\n \"nineoldstyle\",\n \"colon\",\n \"semicolon\",\n \"commasuperior\",\n \"threequartersemdash\",\n \"periodsuperior\",\n \"questionsmall\",\n \"\",\n \"asuperior\",\n \"bsuperior\",\n \"centsuperior\",\n \"dsuperior\",\n \"esuperior\",\n \"\",\n \"\",\n \"isuperior\",\n \"\",\n \"\",\n \"lsuperior\",\n \"msuperior\",\n \"nsuperior\",\n \"osuperior\",\n \"\",\n \"\",\n \"rsuperior\",\n \"ssuperior\",\n \"tsuperior\",\n \"\",\n \"ff\",\n \"fi\",\n \"fl\",\n \"ffi\",\n \"ffl\",\n \"parenleftinferior\",\n \"\",\n \"parenrightinferior\",\n \"Circumflexsmall\",\n \"hyphensuperior\",\n \"Gravesmall\",\n \"Asmall\",\n \"Bsmall\",\n \"Csmall\",\n \"Dsmall\",\n \"Esmall\",\n \"Fsmall\",\n \"Gsmall\",\n \"Hsmall\",\n \"Ismall\",\n \"Jsmall\",\n \"Ksmall\",\n \"Lsmall\",\n \"Msmall\",\n \"Nsmall\",\n \"Osmall\",\n \"Psmall\",\n \"Qsmall\",\n \"Rsmall\",\n \"Ssmall\",\n \"Tsmall\",\n \"Usmall\",\n \"Vsmall\",\n \"Wsmall\",\n \"Xsmall\",\n \"Ysmall\",\n \"Zsmall\",\n \"colonmonetary\",\n \"onefitted\",\n \"rupiah\",\n \"Tildesmall\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"exclamdownsmall\",\n \"centoldstyle\",\n \"Lslashsmall\",\n \"\",\n \"\",\n \"Scaronsmall\",\n \"Zcaronsmall\",\n \"Dieresissmall\",\n \"Brevesmall\",\n \"Caronsmall\",\n \"\",\n \"Dotaccentsmall\",\n \"\",\n \"\",\n \"Macronsmall\",\n \"\",\n \"\",\n \"figuredash\",\n \"hypheninferior\",\n \"\",\n \"\",\n \"Ogoneksmall\",\n \"Ringsmall\",\n \"Cedillasmall\",\n \"\",\n \"\",\n \"\",\n \"onequarter\",\n \"onehalf\",\n \"threequarters\",\n \"questiondownsmall\",\n \"oneeighth\",\n \"threeeighths\",\n \"fiveeighths\",\n \"seveneighths\",\n \"onethird\",\n \"twothirds\",\n \"\",\n \"\",\n \"zerosuperior\",\n \"onesuperior\",\n \"twosuperior\",\n \"threesuperior\",\n \"foursuperior\",\n \"fivesuperior\",\n \"sixsuperior\",\n \"sevensuperior\",\n \"eightsuperior\",\n \"ninesuperior\",\n \"zeroinferior\",\n \"oneinferior\",\n \"twoinferior\",\n \"threeinferior\",\n \"fourinferior\",\n \"fiveinferior\",\n \"sixinferior\",\n \"seveninferior\",\n \"eightinferior\",\n \"nineinferior\",\n \"centinferior\",\n \"dollarinferior\",\n \"periodinferior\",\n \"commainferior\",\n \"Agravesmall\",\n \"Aacutesmall\",\n \"Acircumflexsmall\",\n \"Atildesmall\",\n \"Adieresissmall\",\n \"Aringsmall\",\n \"AEsmall\",\n \"Ccedillasmall\",\n \"Egravesmall\",\n \"Eacutesmall\",\n \"Ecircumflexsmall\",\n \"Edieresissmall\",\n \"Igravesmall\",\n \"Iacutesmall\",\n \"Icircumflexsmall\",\n \"Idieresissmall\",\n \"Ethsmall\",\n \"Ntildesmall\",\n \"Ogravesmall\",\n \"Oacutesmall\",\n \"Ocircumflexsmall\",\n \"Otildesmall\",\n \"Odieresissmall\",\n \"OEsmall\",\n \"Oslashsmall\",\n \"Ugravesmall\",\n \"Uacutesmall\",\n \"Ucircumflexsmall\",\n \"Udieresissmall\",\n \"Yacutesmall\",\n \"Thornsmall\",\n \"Ydieresissmall\"\n];\nvar standardNames = [\n \".notdef\",\n \".null\",\n \"nonmarkingreturn\",\n \"space\",\n \"exclam\",\n \"quotedbl\",\n \"numbersign\",\n \"dollar\",\n \"percent\",\n \"ampersand\",\n \"quotesingle\",\n \"parenleft\",\n \"parenright\",\n \"asterisk\",\n \"plus\",\n \"comma\",\n \"hyphen\",\n \"period\",\n \"slash\",\n \"zero\",\n \"one\",\n \"two\",\n \"three\",\n \"four\",\n \"five\",\n \"six\",\n \"seven\",\n \"eight\",\n \"nine\",\n \"colon\",\n \"semicolon\",\n \"less\",\n \"equal\",\n \"greater\",\n \"question\",\n \"at\",\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"I\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"O\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\",\n \"bracketleft\",\n \"backslash\",\n \"bracketright\",\n \"asciicircum\",\n \"underscore\",\n \"grave\",\n \"a\",\n \"b\",\n \"c\",\n \"d\",\n \"e\",\n \"f\",\n \"g\",\n \"h\",\n \"i\",\n \"j\",\n \"k\",\n \"l\",\n \"m\",\n \"n\",\n \"o\",\n \"p\",\n \"q\",\n \"r\",\n \"s\",\n \"t\",\n \"u\",\n \"v\",\n \"w\",\n \"x\",\n \"y\",\n \"z\",\n \"braceleft\",\n \"bar\",\n \"braceright\",\n \"asciitilde\",\n \"Adieresis\",\n \"Aring\",\n \"Ccedilla\",\n \"Eacute\",\n \"Ntilde\",\n \"Odieresis\",\n \"Udieresis\",\n \"aacute\",\n \"agrave\",\n \"acircumflex\",\n \"adieresis\",\n \"atilde\",\n \"aring\",\n \"ccedilla\",\n \"eacute\",\n \"egrave\",\n \"ecircumflex\",\n \"edieresis\",\n \"iacute\",\n \"igrave\",\n \"icircumflex\",\n \"idieresis\",\n \"ntilde\",\n \"oacute\",\n \"ograve\",\n \"ocircumflex\",\n \"odieresis\",\n \"otilde\",\n \"uacute\",\n \"ugrave\",\n \"ucircumflex\",\n \"udieresis\",\n \"dagger\",\n \"degree\",\n \"cent\",\n \"sterling\",\n \"section\",\n \"bullet\",\n \"paragraph\",\n \"germandbls\",\n \"registered\",\n \"copyright\",\n \"trademark\",\n \"acute\",\n \"dieresis\",\n \"notequal\",\n \"AE\",\n \"Oslash\",\n \"infinity\",\n \"plusminus\",\n \"lessequal\",\n \"greaterequal\",\n \"yen\",\n \"mu\",\n \"partialdiff\",\n \"summation\",\n \"product\",\n \"pi\",\n \"integral\",\n \"ordfeminine\",\n \"ordmasculine\",\n \"Omega\",\n \"ae\",\n \"oslash\",\n \"questiondown\",\n \"exclamdown\",\n \"logicalnot\",\n \"radical\",\n \"florin\",\n \"approxequal\",\n \"Delta\",\n \"guillemotleft\",\n \"guillemotright\",\n \"ellipsis\",\n \"nonbreakingspace\",\n \"Agrave\",\n \"Atilde\",\n \"Otilde\",\n \"OE\",\n \"oe\",\n \"endash\",\n \"emdash\",\n \"quotedblleft\",\n \"quotedblright\",\n \"quoteleft\",\n \"quoteright\",\n \"divide\",\n \"lozenge\",\n \"ydieresis\",\n \"Ydieresis\",\n \"fraction\",\n \"currency\",\n \"guilsinglleft\",\n \"guilsinglright\",\n \"fi\",\n \"fl\",\n \"daggerdbl\",\n \"periodcentered\",\n \"quotesinglbase\",\n \"quotedblbase\",\n \"perthousand\",\n \"Acircumflex\",\n \"Ecircumflex\",\n \"Aacute\",\n \"Edieresis\",\n \"Egrave\",\n \"Iacute\",\n \"Icircumflex\",\n \"Idieresis\",\n \"Igrave\",\n \"Oacute\",\n \"Ocircumflex\",\n \"apple\",\n \"Ograve\",\n \"Uacute\",\n \"Ucircumflex\",\n \"Ugrave\",\n \"dotlessi\",\n \"circumflex\",\n \"tilde\",\n \"macron\",\n \"breve\",\n \"dotaccent\",\n \"ring\",\n \"cedilla\",\n \"hungarumlaut\",\n \"ogonek\",\n \"caron\",\n \"Lslash\",\n \"lslash\",\n \"Scaron\",\n \"scaron\",\n \"Zcaron\",\n \"zcaron\",\n \"brokenbar\",\n \"Eth\",\n \"eth\",\n \"Yacute\",\n \"yacute\",\n \"Thorn\",\n \"thorn\",\n \"minus\",\n \"multiply\",\n \"onesuperior\",\n \"twosuperior\",\n \"threesuperior\",\n \"onehalf\",\n \"onequarter\",\n \"threequarters\",\n \"franc\",\n \"Gbreve\",\n \"gbreve\",\n \"Idotaccent\",\n \"Scedilla\",\n \"scedilla\",\n \"Cacute\",\n \"cacute\",\n \"Ccaron\",\n \"ccaron\",\n \"dcroat\"\n];\nfunction DefaultEncoding(font) {\n this.font = font;\n}\nDefaultEncoding.prototype.charToGlyphIndex = function(c) {\n const code = c.codePointAt(0);\n const glyphs = this.font.glyphs;\n if (glyphs) {\n for (let i = 0; i < glyphs.length; i += 1) {\n const glyph = glyphs.get(i);\n for (let j = 0; j < glyph.unicodes.length; j += 1) {\n if (glyph.unicodes[j] === code) {\n return i;\n }\n }\n }\n }\n return null;\n};\nfunction CmapEncoding(cmap) {\n this.cmap = cmap;\n}\nCmapEncoding.prototype.charToGlyphIndex = function(c) {\n return this.cmap.glyphIndexMap[c.codePointAt(0)] || 0;\n};\nfunction CffEncoding(encoding, charset) {\n this.encoding = encoding;\n this.charset = charset;\n}\nCffEncoding.prototype.charToGlyphIndex = function(s) {\n const code = s.codePointAt(0);\n const charName = this.encoding[code];\n return this.charset.indexOf(charName);\n};\nfunction GlyphNames(post) {\n switch (post.version) {\n case 1:\n this.names = standardNames.slice();\n break;\n case 2:\n this.names = new Array(post.numberOfGlyphs);\n for (let i = 0; i < post.numberOfGlyphs; i++) {\n if (post.glyphNameIndex[i] < standardNames.length) {\n this.names[i] = standardNames[post.glyphNameIndex[i]];\n } else {\n this.names[i] = post.names[post.glyphNameIndex[i] - standardNames.length];\n }\n }\n break;\n case 2.5:\n this.names = new Array(post.numberOfGlyphs);\n for (let i = 0; i < post.numberOfGlyphs; i++) {\n this.names[i] = standardNames[i + post.glyphNameIndex[i]];\n }\n break;\n case 3:\n this.names = [];\n break;\n default:\n this.names = [];\n break;\n }\n}\nGlyphNames.prototype.nameToGlyphIndex = function(name) {\n return this.names.indexOf(name);\n};\nGlyphNames.prototype.glyphIndexToName = function(gid) {\n return this.names[gid];\n};\nfunction addGlyphNamesAll(font) {\n let glyph;\n const glyphIndexMap = font.tables.cmap.glyphIndexMap;\n const charCodes = Object.keys(glyphIndexMap);\n for (let i = 0; i < charCodes.length; i += 1) {\n const c = charCodes[i];\n const glyphIndex = glyphIndexMap[c];\n glyph = font.glyphs.get(glyphIndex);\n glyph.addUnicode(parseInt(c));\n }\n for (let i = 0; i < font.glyphs.length; i += 1) {\n glyph = font.glyphs.get(i);\n if (font.cffEncoding) {\n glyph.name = font.cffEncoding.charset[i];\n } else if (font.glyphNames.names) {\n glyph.name = font.glyphNames.glyphIndexToName(i);\n }\n }\n}\nfunction addGlyphNamesToUnicodeMap(font) {\n font._IndexToUnicodeMap = {};\n const glyphIndexMap = font.tables.cmap.glyphIndexMap;\n const charCodes = Object.keys(glyphIndexMap);\n for (let i = 0; i < charCodes.length; i += 1) {\n const c = charCodes[i];\n let glyphIndex = glyphIndexMap[c];\n if (font._IndexToUnicodeMap[glyphIndex] === void 0) {\n font._IndexToUnicodeMap[glyphIndex] = {\n unicodes: [parseInt(c)]\n };\n } else {\n font._IndexToUnicodeMap[glyphIndex].unicodes.push(parseInt(c));\n }\n }\n}\nfunction addGlyphNames(font, opt) {\n if (opt.lowMemory) {\n addGlyphNamesToUnicodeMap(font);\n } else {\n addGlyphNamesAll(font);\n }\n}\n\n// src/draw.mjs\nfunction line(ctx, x1, y1, x2, y2) {\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n}\nvar draw_default = { line };\n\n// src/tables/cpal.mjs\nfunction parseCpalTable(data, start) {\n const p = new Parser(data, start);\n const version = p.parseShort();\n if (version !== 0) {\n console.warn(\"Only CPALv0 is currently fully supported.\");\n }\n const numPaletteEntries = p.parseShort();\n const numPalettes = p.parseShort();\n const numColorRecords = p.parseShort();\n const colorRecordsArrayOffset = p.parseOffset32();\n const colorRecordIndices = p.parseUShortList(numPalettes);\n p.relativeOffset = colorRecordsArrayOffset;\n const colorRecords = p.parseULongList(numColorRecords);\n p.relativeOffset = colorRecordsArrayOffset;\n return {\n version,\n numPaletteEntries,\n colorRecords,\n colorRecordIndices\n };\n}\nfunction makeCpalTable({ version = 0, numPaletteEntries = 0, colorRecords = [], colorRecordIndices = [0] }) {\n check_default.argument(version === 0, \"Only CPALv0 are supported.\");\n check_default.argument(colorRecords.length, \"No colorRecords given.\");\n check_default.argument(colorRecordIndices.length, \"No colorRecordIndices given.\");\n if (colorRecordIndices.length > 1) {\n check_default.argument(numPaletteEntries, \"Can't infer numPaletteEntries on multiple colorRecordIndices\");\n }\n return new table_default.Table(\"CPAL\", [\n { name: \"version\", type: \"USHORT\", value: version },\n { name: \"numPaletteEntries\", type: \"USHORT\", value: numPaletteEntries || colorRecords.length },\n { name: \"numPalettes\", type: \"USHORT\", value: colorRecordIndices.length },\n { name: \"numColorRecords\", type: \"USHORT\", value: colorRecords.length },\n { name: \"colorRecordsArrayOffset\", type: \"ULONG\", value: 12 + 2 * colorRecordIndices.length },\n ...colorRecordIndices.map((palette, i) => ({ name: \"colorRecordIndices_\" + i, type: \"USHORT\", value: palette })),\n ...colorRecords.map((color, i) => ({ name: \"colorRecords_\" + i, type: \"ULONG\", value: color }))\n ]);\n}\nfunction parseCPALColor(bgra) {\n var b = (bgra & 4278190080) >> 24;\n var g = (bgra & 16711680) >> 16;\n var r = (bgra & 65280) >> 8;\n var a = bgra & 255;\n b = b + 256 & 255;\n g = g + 256 & 255;\n r = r + 256 & 255;\n a = (a + 256 & 255) / 255;\n return { b, g, r, a };\n}\nfunction getPaletteColor(font, index, palette = 0, colorFormat = \"hexa\") {\n if (index == 65535) {\n return \"currentColor\";\n }\n const cpalTable = font && font.tables && font.tables.cpal;\n if (!cpalTable) return \"currentColor\";\n if (palette > cpalTable.colorRecordIndices.length - 1) {\n throw new Error(`Palette index out of range (colorRecordIndices.length: ${cpalTable.colorRecordIndices.length}, index: ${index})`);\n }\n if (index > cpalTable.numPaletteEntries) {\n throw new Error(`Color index out of range (numPaletteEntries: ${cpalTable.numPaletteEntries}, index: ${index})`);\n }\n const lookupIndex = cpalTable.colorRecordIndices[palette] + index;\n if (lookupIndex > cpalTable.colorRecords) {\n throw new Error(`Color index out of range (colorRecords.length: ${cpalTable.colorRecords.length}, lookupIndex: ${lookupIndex})`);\n }\n const color = parseCPALColor(cpalTable.colorRecords[lookupIndex]);\n if (colorFormat === \"bgra\") {\n return color;\n }\n return formatColor(color, colorFormat);\n}\nfunction toHex(d) {\n return (\"0\" + parseInt(d).toString(16)).slice(-2);\n}\nfunction rgbToHSL(bgra) {\n const r = bgra.r / 255;\n const g = bgra.g / 255;\n const b = bgra.b / 255;\n const max = Math.max(r, g, b), min = Math.min(r, g, b);\n let h, s, l = (max + min) / 2;\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return {\n h: h * 360,\n s: s * 100,\n l: l * 100\n };\n}\nfunction hslToRGB(hsla) {\n let { h, s, l, a } = hsla;\n h = h % 360;\n s /= 100;\n l /= 100;\n const c = (1 - Math.abs(2 * l - 1)) * s;\n const x = c * (1 - Math.abs(h / 60 % 2 - 1));\n const m = l - c / 2;\n let r = 0, g = 0, b = 0;\n if (0 <= h && h < 60) {\n r = c;\n g = x;\n b = 0;\n } else if (60 <= h && h < 120) {\n r = x;\n g = c;\n b = 0;\n } else if (120 <= h && h < 180) {\n r = 0;\n g = c;\n b = x;\n } else if (180 <= h && h < 240) {\n r = 0;\n g = x;\n b = c;\n } else if (240 <= h && h < 300) {\n r = x;\n g = 0;\n b = c;\n } else if (300 <= h && h <= 360) {\n r = c;\n g = 0;\n b = x;\n }\n return {\n r: Math.round((r + m) * 255),\n g: Math.round((g + m) * 255),\n b: Math.round((b + m) * 255),\n a\n };\n}\nfunction bgraToRaw(color) {\n return parseInt(`0x${toHex(color.b)}${toHex(color.g)}${toHex(color.r)}${toHex(color.a * 255)}`, 16);\n}\nfunction parseColor(color, targetFormat = \"hexa\") {\n const returnRaw = targetFormat == \"raw\" || targetFormat == \"cpal\";\n const isRaw = Number.isInteger(color);\n let validFormat = true;\n if (isRaw && returnRaw || color === \"currentColor\") {\n return color;\n } else if (typeof color === \"object\") {\n if (targetFormat == \"bgra\") {\n return color;\n }\n if (returnRaw) {\n return bgraToRaw(color);\n }\n } else if (!isRaw && /^#([a-f0-9]{3}|[a-f0-9]{4}|[a-f0-9]{6}|[a-f0-9]{8})$/i.test(color.trim())) {\n color = color.trim().substring(1);\n switch (color.length) {\n case 3:\n color = {\n r: parseInt(color[0].repeat(2), 16),\n g: parseInt(color[1].repeat(2), 16),\n b: parseInt(color[2].repeat(2), 16),\n a: 1\n };\n break;\n case 4:\n color = {\n r: parseInt(color[0].repeat(2), 16),\n g: parseInt(color[1].repeat(2), 16),\n b: parseInt(color[2].repeat(2), 16),\n a: parseInt(color[3].repeat(2), 16) / 255\n };\n break;\n case 6:\n color = {\n r: parseInt(color[0] + color[1], 16),\n g: parseInt(color[2] + color[3], 16),\n b: parseInt(color[4] + color[5], 16),\n a: 1\n };\n break;\n case 8:\n color = {\n r: parseInt(color[0] + color[1], 16),\n g: parseInt(color[2] + color[3], 16),\n b: parseInt(color[4] + color[5], 16),\n a: parseInt(color[6] + color[7], 16) / 255\n };\n break;\n }\n if (targetFormat == \"bgra\") {\n return color;\n }\n } else if (typeof document !== \"undefined\" && /^[a-z]+$/i.test(color)) {\n const ctx = document.createElement(\"canvas\").getContext(\"2d\");\n ctx.fillStyle = color;\n const detectedColor = formatColor(ctx.fillStyle, \"hexa\");\n if (detectedColor === \"#000000ff\" && color.toLowerCase() !== \"black\") {\n validFormat = false;\n } else {\n color = detectedColor;\n }\n } else {\n color = color.trim();\n const rgbaRegex = /rgba?\\(\\s*(?:(\\d*\\.\\d+)(%?)|(\\d+)(%?))\\s*(?:,|\\s*)\\s*(?:(\\d*\\.\\d+)(%?)|(\\d+)(%?))\\s*(?:,|\\s*)\\s*(?:(\\d*\\.\\d+)(%?)|(\\d+)(%?))\\s*(?:(?:,|\\s|\\/)\\s*(?:(0*(?:\\.\\d+)?()|0*1(?:\\.0+)?())|(?:\\.\\d+)|(\\d+)(%)|(\\d*\\.\\d+)(%)))?\\s*\\)/;\n if (rgbaRegex.test(color)) {\n const matches = color.match(rgbaRegex).filter((i) => typeof i !== \"undefined\");\n color = {\n r: Math.round(parseFloat(matches[1]) / (matches[2] ? 100 / 255 : 1)),\n g: Math.round(parseFloat(matches[3]) / (matches[4] ? 100 / 255 : 1)),\n b: Math.round(parseFloat(matches[5]) / (matches[6] ? 100 / 255 : 1)),\n a: !matches[7] ? 1 : parseFloat(matches[7]) / (matches[8] ? 100 : 1)\n };\n } else {\n const hslaRegex = /hsla?\\(\\s*(?:(\\d*\\.\\d+|\\d+)(deg|turn|))\\s*(?:,|\\s*)\\s*(?:(\\d*\\.\\d+)%?|(\\d+)%?)\\s*(?:,|\\s*)\\s*(?:(\\d*\\.\\d+)%?|(\\d+)%?)\\s*(?:(?:,|\\s|\\/)\\s*(?:(0*(?:\\.\\d+)?()|0*1(?:\\.0+)?())|(?:\\.\\d+)|(\\d+)(%)|(\\d*\\.\\d+)(%)))?\\s*\\)/;\n if (hslaRegex.test(color)) {\n const matches = color.match(hslaRegex).filter((i) => typeof i !== \"undefined\");\n color = hslToRGB({\n h: parseFloat(matches[1]) * (matches[2] === \"turn\" ? 360 : 1),\n s: parseFloat(matches[3]),\n l: parseFloat(matches[4]),\n a: !matches[5] ? 1 : parseFloat(matches[5]) / (matches[6] ? 100 : 1)\n });\n } else {\n validFormat = false;\n }\n }\n }\n if (!validFormat) {\n throw new Error(`Invalid color format: ${color}`);\n }\n return formatColor(color, targetFormat);\n}\nfunction formatColor(bgra, format = \"hexa\") {\n if (bgra === \"currentColor\") return bgra;\n if (Number.isInteger(bgra)) {\n if (format == \"raw\" || format == \"cpal\") {\n return bgra;\n }\n bgra = parseCPALColor(bgra);\n } else if (typeof bgra !== \"object\") {\n bgra = parseColor(bgra, \"bgra\");\n }\n let hsl = [\"hsl\", \"hsla\"].includes(format) ? rgbToHSL(bgra) : null;\n switch (format) {\n case \"rgba\":\n return `rgba(${bgra.r}, ${bgra.g}, ${bgra.b}, ${parseFloat(bgra.a.toFixed(3))})`;\n case \"rgb\":\n return `rgb(${bgra.r}, ${bgra.g}, ${bgra.b})`;\n case \"hex\":\n case \"hex6\":\n case \"hex-6\":\n return `#${toHex(bgra.r)}${toHex(bgra.g)}${toHex(bgra.b)}`;\n case \"hexa\":\n case \"hex8\":\n case \"hex-8\":\n return `#${toHex(bgra.r)}${toHex(bgra.g)}${toHex(bgra.b)}${toHex(bgra.a * 255)}`;\n case \"hsl\":\n return `hsl(${hsl.h.toFixed(2)}, ${hsl.s.toFixed(2)}%, ${hsl.l.toFixed(2)}%)`;\n case \"hsla\":\n return `hsla(${hsl.h.toFixed(2)}, ${hsl.s.toFixed(2)}%, ${hsl.l.toFixed(2)}%, ${parseFloat(bgra.a.toFixed(3))})`;\n case \"bgra\":\n return bgra;\n case \"raw\":\n case \"cpal\":\n return bgraToRaw(bgra);\n default:\n throw new Error(\"Unknown color format: \" + format);\n }\n}\nvar cpal_default = { parse: parseCpalTable, make: makeCpalTable, getPaletteColor, parseColor, formatColor };\n\n// src/glyph.mjs\nfunction getPathDefinition(glyph, path) {\n let _path = path || new path_default();\n return {\n configurable: true,\n get: function() {\n if (typeof _path === \"function\") {\n _path = _path();\n }\n return _path;\n },\n set: function(p) {\n _path = p;\n }\n };\n}\nfunction Glyph(options) {\n this.bindConstructorValues(options);\n}\nGlyph.prototype.bindConstructorValues = function(options) {\n this.index = options.index || 0;\n if (options.name === \".notdef\") {\n options.unicode = void 0;\n } else if (options.name === \".null\") {\n options.unicode = 0;\n }\n if (options.unicode === 0 && options.name !== \".null\") {\n throw new Error('The unicode value \"0\" is reserved for the glyph name \".null\" and cannot be used by any other glyph.');\n }\n this.name = options.name || null;\n this.unicode = options.unicode;\n this.unicodes = options.unicodes || (options.unicode !== void 0 ? [options.unicode] : []);\n if (\"xMin\" in options) {\n this.xMin = options.xMin;\n }\n if (\"yMin\" in options) {\n this.yMin = options.yMin;\n }\n if (\"xMax\" in options) {\n this.xMax = options.xMax;\n }\n if (\"yMax\" in options) {\n this.yMax = options.yMax;\n }\n if (\"advanceWidth\" in options) {\n this.advanceWidth = options.advanceWidth;\n }\n if (\"leftSideBearing\" in options) {\n this.leftSideBearing = options.leftSideBearing;\n }\n if (\"points\" in options) {\n this.points = options.points;\n }\n Object.defineProperty(this, \"path\", getPathDefinition(this, options.path));\n};\nGlyph.prototype.addUnicode = function(unicode) {\n if (this.unicodes.length === 0) {\n this.unicode = unicode;\n }\n this.unicodes.push(unicode);\n};\nGlyph.prototype.getBoundingBox = function() {\n return this.path.getBoundingBox();\n};\nGlyph.prototype.getPath = function(x, y, fontSize, options, font) {\n x = x !== void 0 ? x : 0;\n y = y !== void 0 ? y : 0;\n fontSize = fontSize !== void 0 ? fontSize : 72;\n options = Object.assign({}, font && font.defaultRenderOptions, options);\n let commands;\n let hPoints;\n let xScale = options.xScale;\n let yScale = options.yScale;\n const scale = 1 / (this.path.unitsPerEm || 1e3) * fontSize;\n let useGlyph = this;\n if (font && font.variation) {\n useGlyph = font.variation.getTransform(this, options.variation);\n commands = useGlyph.path.commands;\n }\n if (options.hinting && font && font.hinting) {\n hPoints = useGlyph.path && font.hinting.exec(useGlyph, fontSize, options);\n }\n if (hPoints) {\n commands = font.hinting.getCommands(hPoints);\n x = Math.round(x);\n y = Math.round(y);\n xScale = yScale = 1;\n } else {\n commands = useGlyph.path.commands;\n if (xScale === void 0) xScale = scale;\n if (yScale === void 0) yScale = scale;\n }\n const p = new path_default();\n if (options.drawSVG) {\n const svgImage = this.getSvgImage(font);\n if (svgImage) {\n const layer = new path_default();\n layer._image = {\n image: svgImage.image,\n x: x + svgImage.leftSideBearing * scale,\n y: y - svgImage.baseline * scale,\n width: svgImage.image.width * scale,\n height: svgImage.image.height * scale\n };\n p._layers = [layer];\n return p;\n }\n }\n if (options.drawLayers) {\n const layers = this.getLayers(font);\n if (layers && layers.length) {\n p._layers = [];\n for (let i = 0; i < layers.length; i += 1) {\n const layer = layers[i];\n let color = getPaletteColor(font, layer.paletteIndex, options.usePalette);\n if (color === \"currentColor\") {\n color = options.fill || \"black\";\n } else {\n color = formatColor(color, options.colorFormat || \"rgba\");\n }\n options = Object.assign({}, options, { fill: color });\n p._layers.push(this.getPath.call(layer.glyph, x, y, fontSize, options, font));\n }\n return p;\n }\n }\n p.fill = options.fill || this.path.fill;\n p.stroke = this.path.stroke;\n p.strokeWidth = this.path.strokeWidth * scale;\n for (let i = 0; i < commands.length; i += 1) {\n const cmd = commands[i];\n if (cmd.type === \"M\") {\n p.moveTo(x + cmd.x * xScale, y + -cmd.y * yScale);\n } else if (cmd.type === \"L\") {\n p.lineTo(x + cmd.x * xScale, y + -cmd.y * yScale);\n } else if (cmd.type === \"Q\") {\n p.quadraticCurveTo(\n x + cmd.x1 * xScale,\n y + -cmd.y1 * yScale,\n x + cmd.x * xScale,\n y + -cmd.y * yScale\n );\n } else if (cmd.type === \"C\") {\n p.curveTo(\n x + cmd.x1 * xScale,\n y + -cmd.y1 * yScale,\n x + cmd.x2 * xScale,\n y + -cmd.y2 * yScale,\n x + cmd.x * xScale,\n y + -cmd.y * yScale\n );\n } else if (cmd.type === \"Z\" && p.stroke && p.strokeWidth) {\n p.closePath();\n }\n }\n return p;\n};\nGlyph.prototype.getLayers = function(font) {\n if (!font) {\n throw new Error(\"The font object is required to read the colr/cpal tables in order to get the layers.\");\n }\n return font.layers.get(this.index);\n};\nGlyph.prototype.getSvgImage = function(font) {\n if (!font) {\n throw new Error(\"The font object is required to read the svg table in order to get the image.\");\n }\n return font.svgImages.get(this.index);\n};\nGlyph.prototype.getContours = function(transformedPoints = null) {\n if (this.points === void 0 && !transformedPoints) {\n return [];\n }\n const contours = [];\n let currentContour = [];\n let points = transformedPoints ? transformedPoints : this.points;\n for (let i = 0; i < points.length; i += 1) {\n const pt = points[i];\n currentContour.push(pt);\n if (pt.lastPointOfContour) {\n contours.push(currentContour);\n currentContour = [];\n }\n }\n check_default.argument(currentContour.length === 0, \"There are still points left in the current contour.\");\n return contours;\n};\nGlyph.prototype.getMetrics = function() {\n const commands = this.path.commands;\n const xCoords = [];\n const yCoords = [];\n for (let i = 0; i < commands.length; i += 1) {\n const cmd = commands[i];\n if (cmd.type !== \"Z\") {\n xCoords.push(cmd.x);\n yCoords.push(cmd.y);\n }\n if (cmd.type === \"Q\" || cmd.type === \"C\") {\n xCoords.push(cmd.x1);\n yCoords.push(cmd.y1);\n }\n if (cmd.type === \"C\") {\n xCoords.push(cmd.x2);\n yCoords.push(cmd.y2);\n }\n }\n const metrics = {\n xMin: Math.min.apply(null, xCoords),\n yMin: Math.min.apply(null, yCoords),\n xMax: Math.max.apply(null, xCoords),\n yMax: Math.max.apply(null, yCoords),\n leftSideBearing: this.leftSideBearing\n };\n if (!isFinite(metrics.xMin)) {\n metrics.xMin = 0;\n }\n if (!isFinite(metrics.xMax)) {\n metrics.xMax = this.advanceWidth;\n }\n if (!isFinite(metrics.yMin)) {\n metrics.yMin = 0;\n }\n if (!isFinite(metrics.yMax)) {\n metrics.yMax = 0;\n }\n metrics.rightSideBearing = this.advanceWidth - metrics.leftSideBearing - (metrics.xMax - metrics.xMin);\n return metrics;\n};\nGlyph.prototype.draw = function(ctx, x, y, fontSize, options, font) {\n options = Object.assign({}, font && font.defaultRenderOptions, options);\n const path = this.getPath(x, y, fontSize, options, font);\n path.draw(ctx);\n};\nGlyph.prototype.drawPoints = function(ctx, x, y, fontSize, options, font) {\n options = Object.assign({}, font && font.defaultRenderOptions, options);\n if (options.drawLayers) {\n const layers = this.getLayers(font);\n if (layers && layers.length) {\n for (let l = 0; l < layers.length; l += 1) {\n if (layers[l].glyph.index !== this.index) {\n this.drawPoints.call(layers[l].glyph, ctx, x, y, fontSize);\n }\n }\n return;\n }\n }\n function drawCircles(l, x2, y2, scale2) {\n ctx.beginPath();\n for (let j = 0; j < l.length; j += 1) {\n ctx.moveTo(x2 + l[j].x * scale2, y2 + l[j].y * scale2);\n ctx.arc(x2 + l[j].x * scale2, y2 + l[j].y * scale2, 2, 0, Math.PI * 2, false);\n }\n ctx.fill();\n }\n x = x !== void 0 ? x : 0;\n y = y !== void 0 ? y : 0;\n fontSize = fontSize !== void 0 ? fontSize : 24;\n const scale = 1 / this.path.unitsPerEm * fontSize;\n const blueCircles = [];\n const redCircles = [];\n const path = this.path;\n let commands = path.commands;\n if (font && font.variation) {\n commands = font.variation.getTransform(this, options.variation).path.commands;\n }\n for (let i = 0; i < commands.length; i += 1) {\n const cmd = commands[i];\n if (cmd.x !== void 0) {\n blueCircles.push({ x: cmd.x, y: -cmd.y });\n }\n if (cmd.x1 !== void 0) {\n redCircles.push({ x: cmd.x1, y: -cmd.y1 });\n }\n if (cmd.x2 !== void 0) {\n redCircles.push({ x: cmd.x2, y: -cmd.y2 });\n }\n }\n ctx.fillStyle = \"blue\";\n drawCircles(blueCircles, x, y, scale);\n ctx.fillStyle = \"red\";\n drawCircles(redCircles, x, y, scale);\n};\nGlyph.prototype.drawMetrics = function(ctx, x, y, fontSize) {\n let scale;\n x = x !== void 0 ? x : 0;\n y = y !== void 0 ? y : 0;\n fontSize = fontSize !== void 0 ? fontSize : 24;\n scale = 1 / this.path.unitsPerEm * fontSize;\n ctx.lineWidth = 1;\n ctx.strokeStyle = \"black\";\n draw_default.line(ctx, x, -1e4, x, 1e4);\n draw_default.line(ctx, -1e4, y, 1e4, y);\n const xMin = this.xMin || 0;\n let yMin = this.yMin || 0;\n const xMax = this.xMax || 0;\n let yMax = this.yMax || 0;\n const advanceWidth = this.advanceWidth || 0;\n ctx.strokeStyle = \"blue\";\n draw_default.line(ctx, x + xMin * scale, -1e4, x + xMin * scale, 1e4);\n draw_default.line(ctx, x + xMax * scale, -1e4, x + xMax * scale, 1e4);\n draw_default.line(ctx, -1e4, y + -yMin * scale, 1e4, y + -yMin * scale);\n draw_default.line(ctx, -1e4, y + -yMax * scale, 1e4, y + -yMax * scale);\n ctx.strokeStyle = \"green\";\n draw_default.line(ctx, x + advanceWidth * scale, -1e4, x + advanceWidth * scale, 1e4);\n};\nGlyph.prototype.toPathData = function(options, font) {\n options = Object.assign({}, { variation: font && font.defaultRenderOptions.variation }, options);\n let useGlyph = this;\n if (font && font.variation) {\n useGlyph = font.variation.getTransform(this, options.variation);\n }\n let usePath = useGlyph.points && options.pointsTransform ? options.pointsTransform(useGlyph.points) : useGlyph.path;\n if (options.pathTransform) {\n usePath = options.pathTransform(usePath);\n }\n return usePath.toPathData(options);\n};\nGlyph.prototype.fromSVG = function(pathData, options = {}) {\n return this.path.fromSVG(pathData, options);\n};\nGlyph.prototype.toSVG = function(options, font) {\n const pathData = this.toPathData.apply(this, [options, font]);\n return this.path.toSVG(options, pathData);\n};\nGlyph.prototype.toDOMElement = function(options, font) {\n options = Object.assign({}, { variation: font && font.defaultRenderOptions.variation }, options);\n let usePath = this.path;\n if (font && font.variation) {\n usePath = font.variation.getTransform(this, options.variation).path;\n }\n return usePath.toDOMElement(options);\n};\nvar glyph_default = Glyph;\n\n// src/glyphset.mjs\nfunction defineDependentProperty(glyph, externalName, internalName) {\n Object.defineProperty(glyph, externalName, {\n get: function() {\n typeof glyph[internalName] === \"undefined\" && glyph.path;\n return glyph[internalName];\n },\n set: function(newValue) {\n glyph[internalName] = newValue;\n },\n enumerable: true,\n configurable: true\n });\n}\nfunction GlyphSet(font, glyphs) {\n this.font = font;\n this.glyphs = {};\n if (Array.isArray(glyphs)) {\n for (let i = 0; i < glyphs.length; i++) {\n const glyph = glyphs[i];\n glyph.path.unitsPerEm = font.unitsPerEm;\n this.glyphs[i] = glyph;\n }\n }\n this.length = glyphs && glyphs.length || 0;\n}\nif (typeof Symbol !== \"undefined\" && Symbol.iterator) {\n GlyphSet.prototype[Symbol.iterator] = function() {\n let n = -1;\n return {\n next: function() {\n n++;\n const done = n >= this.length - 1;\n return { value: this.get(n), done };\n }.bind(this)\n };\n };\n}\nGlyphSet.prototype.get = function(index) {\n if (this.font._push && this.glyphs[index] === void 0) {\n this.font._push(index);\n if (typeof this.glyphs[index] === \"function\") {\n this.glyphs[index] = this.glyphs[index]();\n }\n let glyph = this.glyphs[index];\n let unicodeObj = this.font._IndexToUnicodeMap[index];\n if (unicodeObj) {\n for (let j = 0; j < unicodeObj.unicodes.length; j++)\n glyph.addUnicode(unicodeObj.unicodes[j]);\n }\n if (this.font.cffEncoding) {\n glyph.name = this.font.cffEncoding.charset[index];\n } else if (this.font.glyphNames.names) {\n glyph.name = this.font.glyphNames.glyphIndexToName(index);\n }\n this.glyphs[index].advanceWidth = this.font._hmtxTableData[index].advanceWidth;\n this.glyphs[index].leftSideBearing = this.font._hmtxTableData[index].leftSideBearing;\n } else {\n if (typeof this.glyphs[index] === \"function\") {\n this.glyphs[index] = this.glyphs[index]();\n }\n }\n return this.glyphs[index];\n};\nGlyphSet.prototype.push = function(index, loader) {\n this.glyphs[index] = loader;\n this.length++;\n};\nfunction glyphLoader(font, index) {\n return new glyph_default({ index, font });\n}\nfunction ttfGlyphLoader(font, index, parseGlyph2, data, position, buildPath2) {\n return function() {\n const glyph = new glyph_default({ index, font });\n glyph.path = function() {\n parseGlyph2(glyph, data, position);\n const path = buildPath2(font.glyphs, glyph);\n path.unitsPerEm = font.unitsPerEm;\n return path;\n };\n defineDependentProperty(glyph, \"numberOfContours\", \"_numberOfContours\");\n defineDependentProperty(glyph, \"xMin\", \"_xMin\");\n defineDependentProperty(glyph, \"xMax\", \"_xMax\");\n defineDependentProperty(glyph, \"yMin\", \"_yMin\");\n defineDependentProperty(glyph, \"yMax\", \"_yMax\");\n defineDependentProperty(glyph, \"points\", \"_points\");\n return glyph;\n };\n}\nfunction cffGlyphLoader(font, index, parseCFFCharstring2, charstring, version) {\n return function() {\n const glyph = new glyph_default({ index, font });\n glyph.path = function() {\n const path = parseCFFCharstring2(font, glyph, charstring, version);\n path.unitsPerEm = font.unitsPerEm;\n return path;\n };\n return glyph;\n };\n}\nvar glyphset_default = { GlyphSet, glyphLoader, ttfGlyphLoader, cffGlyphLoader };\n\n// src/tables/cff.mjs\nfunction equals(a, b) {\n if (a === b) {\n return true;\n } else if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return false;\n }\n for (let i = 0; i < a.length; i += 1) {\n if (!equals(a[i], b[i])) {\n return false;\n }\n }\n return true;\n } else {\n return false;\n }\n}\nvar MAX_CALL_DEPTH = 10;\nfunction calcCFFSubroutineBias(subrs) {\n let bias;\n if (subrs.length < 1240) {\n bias = 107;\n } else if (subrs.length < 33900) {\n bias = 1131;\n } else {\n bias = 32768;\n }\n return bias;\n}\nfunction parseCFFIndex(data, start, conversionFn, version) {\n const offsets = [];\n const objects = [];\n const count = version > 1 ? parse_default.getULong(data, start) : parse_default.getCard16(data, start);\n const countLength = version > 1 ? 4 : 2;\n let objectOffset;\n let endOffset;\n if (count !== 0) {\n const offsetSize = parse_default.getByte(data, start + countLength);\n objectOffset = start + (count + 1) * offsetSize + countLength;\n let pos = start + countLength + 1;\n for (let i = 0; i < count + 1; i += 1) {\n offsets.push(parse_default.getOffset(data, pos, offsetSize));\n pos += offsetSize;\n }\n endOffset = objectOffset + offsets[count];\n } else {\n endOffset = start + countLength;\n }\n for (let i = 0; i < offsets.length - 1; i += 1) {\n let value = parse_default.getBytes(data, objectOffset + offsets[i], objectOffset + offsets[i + 1]);\n if (conversionFn) {\n value = conversionFn(value, data, start, version);\n }\n objects.push(value);\n }\n return { objects, startOffset: start, endOffset };\n}\nfunction parseCFFIndexLowMemory(data, start, version) {\n const offsets = [];\n const count = version > 1 ? parse_default.getULong(data, start) : parse_default.getCard16(data, start);\n const countLength = version > 1 ? 4 : 2;\n let objectOffset;\n let endOffset;\n if (count !== 0) {\n const offsetSize = parse_default.getByte(data, start + countLength);\n objectOffset = start + (count + 1) * offsetSize + countLength;\n let pos = start + countLength + 1;\n for (let i = 0; i < count + 1; i += 1) {\n offsets.push(parse_default.getOffset(data, pos, offsetSize));\n pos += offsetSize;\n }\n endOffset = objectOffset + offsets[count];\n } else {\n endOffset = start + countLength;\n }\n return { offsets, startOffset: start, endOffset };\n}\nfunction getCffIndexObject(i, offsets, data, start, conversionFn, version) {\n const count = version > 1 ? parse_default.getULong(data, start) : parse_default.getCard16(data, start);\n const countLength = version > 1 ? 4 : 2;\n let objectOffset = 0;\n if (count !== 0) {\n const offsetSize = parse_default.getByte(data, start + countLength);\n objectOffset = start + (count + 1) * offsetSize + countLength;\n }\n let value = parse_default.getBytes(data, objectOffset + offsets[i], objectOffset + offsets[i + 1]);\n if (conversionFn) {\n value = conversionFn(value);\n }\n return value;\n}\nfunction parseFloatOperand(parser) {\n let s = \"\";\n const eof = 15;\n const lookup = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \".\", \"E\", \"E-\", null, \"-\"];\n for (; ; ) {\n const b = parser.parseByte();\n const n1 = b >> 4;\n const n2 = b & 15;\n if (n1 === eof) {\n break;\n }\n s += lookup[n1];\n if (n2 === eof) {\n break;\n }\n s += lookup[n2];\n }\n return parseFloat(s);\n}\nfunction parseOperand(parser, b0) {\n let b1;\n let b2;\n let b3;\n let b4;\n if (b0 === 28) {\n b1 = parser.parseByte();\n b2 = parser.parseByte();\n return b1 << 8 | b2;\n }\n if (b0 === 29) {\n b1 = parser.parseByte();\n b2 = parser.parseByte();\n b3 = parser.parseByte();\n b4 = parser.parseByte();\n return b1 << 24 | b2 << 16 | b3 << 8 | b4;\n }\n if (b0 === 30) {\n return parseFloatOperand(parser);\n }\n if (b0 >= 32 && b0 <= 246) {\n return b0 - 139;\n }\n if (b0 >= 247 && b0 <= 250) {\n b1 = parser.parseByte();\n return (b0 - 247) * 256 + b1 + 108;\n }\n if (b0 >= 251 && b0 <= 254) {\n b1 = parser.parseByte();\n return -(b0 - 251) * 256 - b1 - 108;\n }\n throw new Error(\"Invalid b0 \" + b0);\n}\nfunction entriesToObject(entries) {\n const o = {};\n for (let i = 0; i < entries.length; i += 1) {\n const key = entries[i][0];\n const values = entries[i][1];\n let value;\n if (values.length === 1) {\n value = values[0];\n } else {\n value = values;\n }\n if (Object.prototype.hasOwnProperty.call(o, key) && !isNaN(o[key])) {\n throw new Error(\"Object \" + o + \" already has key \" + key);\n }\n o[key] = value;\n }\n return o;\n}\nfunction parseCFFDict(data, start, size, version) {\n start = start !== void 0 ? start : 0;\n const parser = new parse_default.Parser(data, start);\n const entries = [];\n let operands = [];\n size = size !== void 0 ? size : data.byteLength;\n let operandsStart = version < 2 ? 22 : 28;\n while (parser.relativeOffset < size) {\n let op = parser.parseByte();\n if (op < operandsStart) {\n if (op === 12) {\n op = 1200 + parser.parseByte();\n }\n if (version > 1 && op === 23) {\n parseBlend(operands);\n continue;\n }\n entries.push([op, operands]);\n operands = [];\n } else {\n operands.push(parseOperand(parser, op, version));\n }\n }\n return entriesToObject(entries);\n}\nfunction getCFFString(strings, index) {\n if (index <= 390) {\n index = cffStandardStrings[index];\n } else if (strings) {\n index = strings[index - 391];\n } else {\n index = void 0;\n }\n return index;\n}\nfunction interpretDict(dict, meta, strings) {\n const newDict = {};\n let value;\n for (let i = 0; i < meta.length; i += 1) {\n const m = meta[i];\n if (Array.isArray(m.type)) {\n const values = [];\n values.length = m.type.length;\n for (let j = 0; j < m.type.length; j++) {\n value = dict[m.op] !== void 0 ? dict[m.op][j] : void 0;\n if (value === void 0) {\n value = m.value !== void 0 && m.value[j] !== void 0 ? m.value[j] : null;\n }\n if (m.type[j] === \"SID\") {\n value = getCFFString(strings, value);\n }\n values[j] = value;\n }\n newDict[m.name] = values;\n } else {\n value = dict[m.op];\n if (value === void 0) {\n value = m.value !== void 0 ? m.value : null;\n }\n if (m.type === \"SID\") {\n value = getCFFString(strings, value);\n }\n newDict[m.name] = value;\n }\n }\n return newDict;\n}\nfunction parseCFFHeader(data, start) {\n const header = {};\n header.formatMajor = parse_default.getCard8(data, start);\n header.formatMinor = parse_default.getCard8(data, start + 1);\n if (header.formatMajor > 2) {\n throw new Error(`Unsupported CFF table version ${header.formatMajor}.${header.formatMinor}`);\n }\n header.size = parse_default.getCard8(data, start + 2);\n if (header.formatMajor < 2) {\n header.offsetSize = parse_default.getCard8(data, start + 3);\n header.startOffset = start;\n header.endOffset = start + 4;\n } else {\n header.topDictLength = parse_default.getCard16(data, start + 3);\n header.endOffset = start + 8;\n }\n return header;\n}\nvar TOP_DICT_META = [\n { name: \"version\", op: 0, type: \"SID\" },\n { name: \"notice\", op: 1, type: \"SID\" },\n { name: \"copyright\", op: 1200, type: \"SID\" },\n { name: \"fullName\", op: 2, type: \"SID\" },\n { name: \"familyName\", op: 3, type: \"SID\" },\n { name: \"weight\", op: 4, type: \"SID\" },\n { name: \"isFixedPitch\", op: 1201, type: \"number\", value: 0 },\n { name: \"italicAngle\", op: 1202, type: \"number\", value: 0 },\n { name: \"underlinePosition\", op: 1203, type: \"number\", value: -100 },\n { name: \"underlineThickness\", op: 1204, type: \"number\", value: 50 },\n { name: \"paintType\", op: 1205, type: \"number\", value: 0 },\n { name: \"charstringType\", op: 1206, type: \"number\", value: 2 },\n {\n name: \"fontMatrix\",\n op: 1207,\n type: [\"real\", \"real\", \"real\", \"real\", \"real\", \"real\"],\n value: [1e-3, 0, 0, 1e-3, 0, 0]\n },\n { name: \"uniqueId\", op: 13, type: \"number\" },\n { name: \"fontBBox\", op: 5, type: [\"number\", \"number\", \"number\", \"number\"], value: [0, 0, 0, 0] },\n { name: \"strokeWidth\", op: 1208, type: \"number\", value: 0 },\n { name: \"xuid\", op: 14, type: [], value: null },\n { name: \"charset\", op: 15, type: \"offset\", value: 0 },\n { name: \"encoding\", op: 16, type: \"offset\", value: 0 },\n { name: \"charStrings\", op: 17, type: \"offset\", value: 0 },\n { name: \"private\", op: 18, type: [\"number\", \"offset\"], value: [0, 0] },\n { name: \"ros\", op: 1230, type: [\"SID\", \"SID\", \"number\"] },\n { name: \"cidFontVersion\", op: 1231, type: \"number\", value: 0 },\n { name: \"cidFontRevision\", op: 1232, type: \"number\", value: 0 },\n { name: \"cidFontType\", op: 1233, type: \"number\", value: 0 },\n { name: \"cidCount\", op: 1234, type: \"number\", value: 8720 },\n { name: \"uidBase\", op: 1235, type: \"number\" },\n { name: \"fdArray\", op: 1236, type: \"offset\" },\n { name: \"fdSelect\", op: 1237, type: \"offset\" },\n { name: \"fontName\", op: 1238, type: \"SID\" }\n];\nvar TOP_DICT_META_CFF2 = [\n {\n name: \"fontMatrix\",\n op: 1207,\n type: [\"real\", \"real\", \"real\", \"real\", \"real\", \"real\"],\n value: [1e-3, 0, 0, 1e-3, 0, 0]\n },\n { name: \"charStrings\", op: 17, type: \"offset\" },\n { name: \"fdArray\", op: 1236, type: \"offset\" },\n { name: \"fdSelect\", op: 1237, type: \"offset\" },\n { name: \"vstore\", op: 24, type: \"offset\" }\n];\nvar PRIVATE_DICT_META = [\n { name: \"subrs\", op: 19, type: \"offset\", value: 0 },\n { name: \"defaultWidthX\", op: 20, type: \"number\", value: 0 },\n { name: \"nominalWidthX\", op: 21, type: \"number\", value: 0 }\n];\nvar PRIVATE_DICT_META_CFF2 = [\n { name: \"blueValues\", op: 6, type: \"delta\" },\n { name: \"otherBlues\", op: 7, type: \"delta\" },\n { name: \"familyBlues\", op: 7, type: \"delta\" },\n { name: \"familyBlues\", op: 8, type: \"delta\" },\n { name: \"familyOtherBlues\", op: 9, type: \"delta\" },\n { name: \"blueScale\", op: 1209, type: \"number\", value: 0.039625 },\n { name: \"blueShift\", op: 1210, type: \"number\", value: 7 },\n { name: \"blueFuzz\", op: 1211, type: \"number\", value: 1 },\n { name: \"stdHW\", op: 10, type: \"number\" },\n { name: \"stdVW\", op: 11, type: \"number\" },\n { name: \"stemSnapH\", op: 1212, type: \"number\" },\n { name: \"stemSnapV\", op: 1213, type: \"number\" },\n { name: \"languageGroup\", op: 1217, type: \"number\", value: 0 },\n { name: \"expansionFactor\", op: 1218, type: \"number\", value: 0.06 },\n { name: \"vsindex\", op: 22, type: \"number\", value: 0 },\n { name: \"subrs\", op: 19, type: \"offset\" }\n];\nvar FONT_DICT_META = [\n { name: \"private\", op: 18, type: [\"number\", \"offset\"], value: [0, 0] }\n];\nfunction parseCFFTopDict(data, start, strings, version) {\n const dict = parseCFFDict(data, start, data.byteLength, version);\n return interpretDict(dict, version > 1 ? TOP_DICT_META_CFF2 : TOP_DICT_META, strings);\n}\nfunction parseCFFPrivateDict(data, start, size, strings, version) {\n const dict = parseCFFDict(data, start, size, version);\n return interpretDict(dict, version > 1 ? PRIVATE_DICT_META_CFF2 : PRIVATE_DICT_META, strings);\n}\nfunction parseFontDict(data, start, version) {\n const dict = parseCFFDict(data, start, void 0, version);\n return interpretDict(dict, FONT_DICT_META);\n}\nfunction gatherCFF2FontDicts(data, start, fdArray) {\n const fontDictArray = [];\n for (let i = 0; i < fdArray.length; i++) {\n const fontDictData = new DataView(new Uint8Array(fdArray[i]).buffer);\n const fontDict = parseFontDict(fontDictData, 0, 2);\n const privateSize = fontDict.private[0];\n const privateOffset = fontDict.private[1];\n if (privateSize !== 0 && privateOffset !== 0) {\n const privateDict = parseCFFPrivateDict(data, privateOffset + start, privateSize, [], 2);\n if (privateDict.subrs) {\n const subrOffset = privateOffset + privateDict.subrs;\n const subrIndex = parseCFFIndex(data, subrOffset + start, void 0, 2);\n fontDict._subrs = subrIndex.objects;\n fontDict._subrsBias = calcCFFSubroutineBias(fontDict._subrs);\n }\n fontDict._privateDict = privateDict;\n }\n fontDictArray.push(fontDict);\n }\n return fontDictArray;\n}\nfunction gatherCFFTopDicts(data, start, cffIndex, strings, version) {\n const topDictArray = [];\n for (let iTopDict = 0; iTopDict < cffIndex.length; iTopDict += 1) {\n const topDictData = new DataView(new Uint8Array(cffIndex[iTopDict]).buffer);\n const topDict = parseCFFTopDict(topDictData, 0, strings, version);\n topDict._subrs = [];\n topDict._subrsBias = 0;\n topDict._defaultWidthX = 0;\n topDict._nominalWidthX = 0;\n const privateSize = version < 2 ? topDict.private[0] : 0;\n const privateOffset = version < 2 ? topDict.private[1] : 0;\n if (privateSize !== 0 && privateOffset !== 0) {\n const privateDict = parseCFFPrivateDict(data, privateOffset + start, privateSize, strings, version);\n topDict._defaultWidthX = privateDict.defaultWidthX;\n topDict._nominalWidthX = privateDict.nominalWidthX;\n if (privateDict.subrs !== 0) {\n const subrOffset = privateOffset + privateDict.subrs;\n const subrIndex = parseCFFIndex(data, subrOffset + start, void 0, version);\n topDict._subrs = subrIndex.objects;\n topDict._subrsBias = calcCFFSubroutineBias(topDict._subrs);\n }\n topDict._privateDict = privateDict;\n }\n topDictArray.push(topDict);\n }\n return topDictArray;\n}\nfunction parseCFFCharset(data, start, nGlyphs, strings, isCIDFont) {\n let sid;\n let count;\n const parser = new parse_default.Parser(data, start);\n nGlyphs -= 1;\n const charset = [\".notdef\"];\n const format = parser.parseCard8();\n if (format === 0) {\n for (let i = 0; i < nGlyphs; i += 1) {\n sid = parser.parseSID();\n if (isCIDFont) {\n charset.push(sid);\n } else {\n charset.push(getCFFString(strings, sid) || sid);\n }\n }\n } else if (format === 1) {\n while (charset.length <= nGlyphs) {\n sid = parser.parseSID();\n count = parser.parseCard8();\n for (let i = 0; i <= count; i += 1) {\n if (isCIDFont) {\n charset.push(\"cid\" + (\"00000\" + sid).slice(-5));\n } else {\n charset.push(getCFFString(strings, sid) || sid);\n }\n sid += 1;\n }\n }\n } else if (format === 2) {\n while (charset.length <= nGlyphs) {\n sid = parser.parseSID();\n count = parser.parseCard16();\n for (let i = 0; i <= count; i += 1) {\n if (isCIDFont) {\n charset.push(\"cid\" + (\"00000\" + sid).slice(-5));\n } else {\n charset.push(getCFFString(strings, sid) || sid);\n }\n sid += 1;\n }\n }\n } else {\n throw new Error(\"Unknown charset format \" + format);\n }\n return charset;\n}\nfunction parseCFFEncoding(data, start) {\n let code;\n const encoding = {};\n const parser = new parse_default.Parser(data, start);\n const format = parser.parseCard8();\n if (format === 0) {\n const nCodes = parser.parseCard8();\n for (let i = 0; i < nCodes; i += 1) {\n code = parser.parseCard8();\n encoding[code] = i;\n }\n } else if (format === 1) {\n const nRanges = parser.parseCard8();\n code = 1;\n for (let i = 0; i < nRanges; i += 1) {\n const first = parser.parseCard8();\n const nLeft = parser.parseCard8();\n for (let j = first; j <= first + nLeft; j += 1) {\n encoding[j] = code;\n code += 1;\n }\n }\n } else {\n throw new Error(\"Unknown encoding format \" + format);\n }\n return encoding;\n}\nfunction parseBlend(operands) {\n let numberOfBlends = operands.pop();\n while (operands.length > numberOfBlends) {\n operands.pop();\n }\n}\nfunction applyPaintType(font, path) {\n const paintType = font.tables.cff && font.tables.cff.topDict && font.tables.cff.topDict.paintType || 0;\n if (paintType === 2) {\n path.fill = null;\n path.stroke = \"black\";\n path.strokeWidth = font.tables.cff.topDict.strokeWidth || 0;\n }\n return paintType;\n}\nfunction parseCFFCharstring(font, glyph, code, version, coords) {\n let c1x;\n let c1y;\n let c2x;\n let c2y;\n const p = new path_default();\n const stack = [];\n let nStems = 0;\n let haveWidth = false;\n let open = false;\n let x = 0;\n let y = 0;\n let subrs;\n let subrsBias;\n let defaultWidthX;\n let nominalWidthX;\n let vsindex = 0;\n let vstore = [];\n let blendVector;\n let callDepth = 0;\n const cffTable = font.tables.cff2 || font.tables.cff;\n defaultWidthX = cffTable.topDict._defaultWidthX;\n nominalWidthX = cffTable.topDict._nominalWidthX;\n coords = coords || font.variation && font.variation.get();\n if (!glyph.getBlendPath) {\n glyph.getBlendPath = function(variationCoords) {\n return parseCFFCharstring(font, glyph, code, version, variationCoords);\n };\n }\n if (font.isCIDFont || version > 1) {\n const fdIndex = cffTable.topDict._fdSelect ? cffTable.topDict._fdSelect[glyph.index] : 0;\n const fdDict = cffTable.topDict._fdArray[fdIndex];\n subrs = fdDict._subrs;\n subrsBias = fdDict._subrsBias;\n if (version > 1) {\n vstore = cffTable.topDict._vstore.itemVariationStore;\n vsindex = fdDict._privateDict.vsindex;\n } else {\n defaultWidthX = fdDict._defaultWidthX;\n nominalWidthX = fdDict._nominalWidthX;\n }\n } else {\n subrs = cffTable.topDict._subrs;\n subrsBias = cffTable.topDict._subrsBias;\n }\n const paintType = applyPaintType(font, p);\n let width = defaultWidthX;\n function newContour(x2, y2) {\n if (open && paintType !== 2) {\n p.closePath();\n }\n p.moveTo(x2, y2);\n open = true;\n }\n function parseStems() {\n let hasWidthArg;\n hasWidthArg = (stack.length & 1) !== 0;\n if (hasWidthArg && !haveWidth) {\n width = stack.shift() + nominalWidthX;\n }\n nStems += stack.length >> 1;\n stack.length = 0;\n haveWidth = true;\n }\n function parse(code2) {\n let b1;\n let b2;\n let b3;\n let b4;\n let codeIndex;\n let subrCode;\n let jpx;\n let jpy;\n let c3x;\n let c3y;\n let c4x;\n let c4y;\n let i = 0;\n while (i < code2.length) {\n let v = code2[i];\n i += 1;\n switch (v) {\n case 1:\n parseStems();\n break;\n case 3:\n parseStems();\n break;\n case 4:\n if (stack.length > 1 && !haveWidth) {\n width = stack.shift() + nominalWidthX;\n haveWidth = true;\n }\n y += stack.pop();\n newContour(x, y);\n break;\n case 5:\n while (stack.length > 0) {\n x += stack.shift();\n y += stack.shift();\n p.lineTo(x, y);\n }\n break;\n case 6:\n while (stack.length > 0) {\n x += stack.shift();\n p.lineTo(x, y);\n if (stack.length === 0) {\n break;\n }\n y += stack.shift();\n p.lineTo(x, y);\n }\n break;\n case 7:\n while (stack.length > 0) {\n y += stack.shift();\n p.lineTo(x, y);\n if (stack.length === 0) {\n break;\n }\n x += stack.shift();\n p.lineTo(x, y);\n }\n break;\n case 8:\n while (stack.length > 0) {\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n p.curveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n case 10:\n codeIndex = stack.pop() + subrsBias;\n subrCode = subrs[codeIndex];\n if (subrCode) {\n if (callDepth >= MAX_CALL_DEPTH) {\n console.warn(\"CFF charstring subroutine call depth exceeded, skipping callsubr\");\n break;\n }\n callDepth++;\n parse(subrCode);\n callDepth--;\n }\n break;\n case 11:\n if (version > 1) {\n console.error(\"CFF CharString operator return (11) is not supported in CFF2\");\n break;\n }\n return;\n case 12:\n v = code2[i];\n i += 1;\n switch (v) {\n case 35:\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n jpx = c2x + stack.shift();\n jpy = c2y + stack.shift();\n c3x = jpx + stack.shift();\n c3y = jpy + stack.shift();\n c4x = c3x + stack.shift();\n c4y = c3y + stack.shift();\n x = c4x + stack.shift();\n y = c4y + stack.shift();\n stack.shift();\n p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);\n p.curveTo(c3x, c3y, c4x, c4y, x, y);\n break;\n case 34:\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n jpx = c2x + stack.shift();\n jpy = c2y;\n c3x = jpx + stack.shift();\n c3y = c2y;\n c4x = c3x + stack.shift();\n c4y = y;\n x = c4x + stack.shift();\n p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);\n p.curveTo(c3x, c3y, c4x, c4y, x, y);\n break;\n case 36:\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n jpx = c2x + stack.shift();\n jpy = c2y;\n c3x = jpx + stack.shift();\n c3y = c2y;\n c4x = c3x + stack.shift();\n c4y = c3y + stack.shift();\n x = c4x + stack.shift();\n p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);\n p.curveTo(c3x, c3y, c4x, c4y, x, y);\n break;\n case 37:\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n jpx = c2x + stack.shift();\n jpy = c2y + stack.shift();\n c3x = jpx + stack.shift();\n c3y = jpy + stack.shift();\n c4x = c3x + stack.shift();\n c4y = c3y + stack.shift();\n if (Math.abs(c4x - x) > Math.abs(c4y - y)) {\n x = c4x + stack.shift();\n } else {\n y = c4y + stack.shift();\n }\n p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);\n p.curveTo(c3x, c3y, c4x, c4y, x, y);\n break;\n default:\n console.log(\"Glyph \" + glyph.index + \": unknown operator 1200\" + v);\n stack.length = 0;\n }\n break;\n case 14:\n if (version > 1) {\n console.error(\"CFF CharString operator endchar (14) is not supported in CFF2\");\n break;\n }\n if (stack.length >= 4) {\n const acharName = cffStandardEncoding[stack.pop()];\n const bcharName = cffStandardEncoding[stack.pop()];\n const ady = stack.pop();\n const adx = stack.pop();\n if (acharName && bcharName) {\n glyph.isComposite = true;\n glyph.components = [];\n const acharGlyphIndex = font.cffEncoding.charset.indexOf(acharName);\n const bcharGlyphIndex = font.cffEncoding.charset.indexOf(bcharName);\n glyph.components.push({\n glyphIndex: bcharGlyphIndex,\n dx: 0,\n dy: 0\n });\n glyph.components.push({\n glyphIndex: acharGlyphIndex,\n dx: adx,\n dy: ady\n });\n p.extend(font.glyphs.get(bcharGlyphIndex).path);\n const acharGlyph = font.glyphs.get(acharGlyphIndex);\n const shiftedCommands = JSON.parse(JSON.stringify(acharGlyph.path.commands));\n for (let i2 = 0; i2 < shiftedCommands.length; i2 += 1) {\n const cmd = shiftedCommands[i2];\n if (cmd.type !== \"Z\") {\n cmd.x += adx;\n cmd.y += ady;\n }\n if (cmd.type === \"Q\" || cmd.type === \"C\") {\n cmd.x1 += adx;\n cmd.y1 += ady;\n }\n if (cmd.type === \"C\") {\n cmd.x2 += adx;\n cmd.y2 += ady;\n }\n }\n p.extend(shiftedCommands);\n }\n } else if (stack.length > 0 && !haveWidth) {\n width = stack.shift() + nominalWidthX;\n haveWidth = true;\n }\n if (open && paintType !== 2) {\n p.closePath();\n open = false;\n }\n break;\n case 15:\n if (version < 2) {\n console.error(\"CFF2 CharString operator vsindex (15) is not supported in CFF\");\n break;\n }\n vsindex = stack.pop();\n break;\n case 16:\n if (version < 2) {\n console.error(\"CFF2 CharString operator blend (16) is not supported in CFF\");\n break;\n }\n if (!blendVector) {\n blendVector = font.variation && coords && font.variation.process.getBlendVector(vstore, vsindex, coords);\n }\n var n = stack.pop();\n var axisCount = blendVector ? blendVector.length : vstore.itemVariationSubtables[vsindex].regionIndexes.length;\n var deltaSetCount = n * axisCount;\n var delta = stack.length - deltaSetCount;\n var deltaSetIndex = delta - n;\n if (blendVector) {\n for (let i2 = 0; i2 < n; i2++) {\n var sum = stack[deltaSetIndex + i2];\n for (let j = 0; j < axisCount; j++) {\n sum += blendVector[j] * stack[delta++];\n }\n stack[deltaSetIndex + i2] = sum;\n }\n }\n while (deltaSetCount--) {\n stack.pop();\n }\n break;\n case 18:\n parseStems();\n break;\n case 19:\n // hintmask\n case 20:\n parseStems();\n i += nStems + 7 >> 3;\n break;\n case 21:\n if (stack.length > 2 && !haveWidth) {\n width = stack.shift() + nominalWidthX;\n haveWidth = true;\n }\n y += stack.pop();\n x += stack.pop();\n newContour(x, y);\n break;\n case 22:\n if (stack.length > 1 && !haveWidth) {\n width = stack.shift() + nominalWidthX;\n haveWidth = true;\n }\n x += stack.pop();\n newContour(x, y);\n break;\n case 23:\n parseStems();\n break;\n case 24:\n while (stack.length > 2) {\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n p.curveTo(c1x, c1y, c2x, c2y, x, y);\n }\n x += stack.shift();\n y += stack.shift();\n p.lineTo(x, y);\n break;\n case 25:\n while (stack.length > 6) {\n x += stack.shift();\n y += stack.shift();\n p.lineTo(x, y);\n }\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n p.curveTo(c1x, c1y, c2x, c2y, x, y);\n break;\n case 26:\n if (stack.length & 1) {\n x += stack.shift();\n }\n while (stack.length > 0) {\n c1x = x;\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x;\n y = c2y + stack.shift();\n p.curveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n case 27:\n if (stack.length & 1) {\n y += stack.shift();\n }\n while (stack.length > 0) {\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y;\n p.curveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n case 28:\n b1 = code2[i];\n b2 = code2[i + 1];\n stack.push((b1 << 24 | b2 << 16) >> 16);\n i += 2;\n break;\n case 29:\n codeIndex = stack.pop() + font.gsubrsBias;\n subrCode = font.gsubrs[codeIndex];\n if (subrCode) {\n if (callDepth >= MAX_CALL_DEPTH) {\n console.warn(\"CFF charstring subroutine call depth exceeded, skipping callgsubr\");\n break;\n }\n callDepth++;\n parse(subrCode);\n callDepth--;\n }\n break;\n case 30:\n while (stack.length > 0) {\n c1x = x;\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + (stack.length === 1 ? stack.shift() : 0);\n p.curveTo(c1x, c1y, c2x, c2y, x, y);\n if (stack.length === 0) {\n break;\n }\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n y = c2y + stack.shift();\n x = c2x + (stack.length === 1 ? stack.shift() : 0);\n p.curveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n case 31:\n while (stack.length > 0) {\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n y = c2y + stack.shift();\n x = c2x + (stack.length === 1 ? stack.shift() : 0);\n p.curveTo(c1x, c1y, c2x, c2y, x, y);\n if (stack.length === 0) {\n break;\n }\n c1x = x;\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + (stack.length === 1 ? stack.shift() : 0);\n p.curveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n default:\n if (v < 32) {\n console.log(\"Glyph \" + glyph.index + \": unknown operator \" + v);\n } else if (v < 247) {\n stack.push(v - 139);\n } else if (v < 251) {\n b1 = code2[i];\n i += 1;\n stack.push((v - 247) * 256 + b1 + 108);\n } else if (v < 255) {\n b1 = code2[i];\n i += 1;\n stack.push(-(v - 251) * 256 - b1 - 108);\n } else {\n b1 = code2[i];\n b2 = code2[i + 1];\n b3 = code2[i + 2];\n b4 = code2[i + 3];\n i += 4;\n stack.push((b1 << 24 | b2 << 16 | b3 << 8 | b4) / 65536);\n }\n }\n }\n }\n parse(code);\n if (font.variation && coords) {\n p.commands = p.commands.map((c) => {\n const keys = Object.keys(c);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (key === \"type\") continue;\n c[key] = Math.round(c[key]);\n }\n return c;\n });\n }\n if (haveWidth) {\n glyph.advanceWidth = width;\n }\n return p;\n}\nfunction parseCFFFDSelect(data, start, nGlyphs, fdArrayCount, version) {\n const fdSelect = [];\n let fdIndex;\n const parser = new parse_default.Parser(data, start);\n const format = parser.parseCard8();\n if (format === 0) {\n for (let iGid = 0; iGid < nGlyphs; iGid++) {\n fdIndex = parser.parseCard8();\n if (fdIndex >= fdArrayCount) {\n throw new Error(\"CFF table CID Font FDSelect has bad FD index value \" + fdIndex + \" (FD count \" + fdArrayCount + \")\");\n }\n fdSelect.push(fdIndex);\n }\n } else if (format === 3 || version > 1 && format === 4) {\n const nRanges = format === 4 ? parser.parseULong() : parser.parseCard16();\n let first = format === 4 ? parser.parseULong() : parser.parseCard16();\n if (first !== 0) {\n throw new Error(`CFF Table CID Font FDSelect format ${format} range has bad initial GID ${first}`);\n }\n let next;\n for (let iRange = 0; iRange < nRanges; iRange++) {\n fdIndex = format === 4 ? parser.parseUShort() : parser.parseCard8();\n next = format === 4 ? parser.parseULong() : parser.parseCard16();\n if (fdIndex >= fdArrayCount) {\n throw new Error(\"CFF table CID Font FDSelect has bad FD index value \" + fdIndex + \" (FD count \" + fdArrayCount + \")\");\n }\n if (next > nGlyphs) {\n throw new Error(`CFF Table CID Font FDSelect format ${version} range has bad GID ${next}`);\n }\n for (; first < next; first++) {\n fdSelect.push(fdIndex);\n }\n first = next;\n }\n if (next !== nGlyphs) {\n throw new Error(\"CFF Table CID Font FDSelect format 3 range has bad final (Sentinal) GID \" + next);\n }\n } else {\n throw new Error(\"CFF Table CID Font FDSelect table has unsupported format \" + format);\n }\n return fdSelect;\n}\nfunction parseCFFTable(data, start, font, opt) {\n let resultTable;\n const header = parseCFFHeader(data, start);\n if (header.formatMajor === 2) {\n resultTable = font.tables.cff2 = {};\n } else {\n resultTable = font.tables.cff = {};\n }\n const nameIndex = header.formatMajor > 1 ? null : parseCFFIndex(data, header.endOffset, parse_default.bytesToString);\n const topDictIndex = header.formatMajor > 1 ? null : parseCFFIndex(data, nameIndex.endOffset);\n const stringIndex = header.formatMajor > 1 ? null : parseCFFIndex(data, topDictIndex.endOffset, parse_default.bytesToString);\n const globalSubrIndex = parseCFFIndex(data, header.formatMajor > 1 ? start + header.size + header.topDictLength : stringIndex.endOffset, void 0, header.formatMajor);\n font.gsubrs = globalSubrIndex.objects;\n font.gsubrsBias = calcCFFSubroutineBias(font.gsubrs);\n let topDict;\n if (header.formatMajor > 1) {\n const topDictOffset = start + header.size;\n const topDictData = parse_default.getBytes(data, topDictOffset, topDictOffset + header.topDictLength);\n topDict = gatherCFFTopDicts(data, 0, [topDictData], void 0, header.formatMajor)[0];\n } else {\n const topDictArray = gatherCFFTopDicts(data, start, topDictIndex.objects, stringIndex.objects, header.formatMajor);\n if (topDictArray.length !== 1) {\n throw new Error(\"CFF table has too many fonts in 'FontSet' - count of fonts NameIndex.length = \" + topDictArray.length);\n }\n topDict = topDictArray[0];\n }\n resultTable.topDict = topDict;\n if (topDict._privateDict) {\n font.defaultWidthX = topDict._privateDict.defaultWidthX;\n font.nominalWidthX = topDict._privateDict.nominalWidthX;\n }\n if (header.formatMajor < 2 && topDict.ros[0] !== void 0 && topDict.ros[1] !== void 0) {\n font.isCIDFont = true;\n }\n if (header.formatMajor > 1) {\n let fdArrayIndexOffset = topDict.fdArray;\n let fdSelectOffset = topDict.fdSelect;\n if (!fdArrayIndexOffset) {\n throw new Error(\"This is a CFF2 font, but FDArray information is missing\");\n }\n const fdArrayIndex = parseCFFIndex(data, start + fdArrayIndexOffset, null, header.formatMajor);\n const fdArray = gatherCFF2FontDicts(data, start, fdArrayIndex.objects);\n topDict._fdArray = fdArray;\n if (fdSelectOffset) {\n topDict._fdSelect = parseCFFFDSelect(data, start + fdSelectOffset, font.numGlyphs, fdArray.length, header.formatMajor);\n }\n } else if (font.isCIDFont) {\n let fdArrayOffset = topDict.fdArray;\n let fdSelectOffset = topDict.fdSelect;\n if (fdArrayOffset === 0 || fdSelectOffset === 0) {\n throw new Error(\"Font is marked as a CID font, but FDArray and/or FDSelect information is missing\");\n }\n fdArrayOffset += start;\n const fdArrayIndex = parseCFFIndex(data, fdArrayOffset);\n const fdArray = gatherCFFTopDicts(data, start, fdArrayIndex.objects, stringIndex.objects, header.formatMajor);\n topDict._fdArray = fdArray;\n fdSelectOffset += start;\n topDict._fdSelect = parseCFFFDSelect(data, fdSelectOffset, font.numGlyphs, fdArray.length, header.formatMajor);\n }\n if (header.formatMajor < 2) {\n const privateDictOffset = start + topDict.private[1];\n const privateDict = parseCFFPrivateDict(data, privateDictOffset, topDict.private[0], stringIndex.objects, header.formatMajor);\n font.defaultWidthX = privateDict.defaultWidthX;\n font.nominalWidthX = privateDict.nominalWidthX;\n if (privateDict.subrs !== 0) {\n const subrOffset = privateDictOffset + privateDict.subrs;\n const subrIndex = parseCFFIndex(data, subrOffset);\n font.subrs = subrIndex.objects;\n font.subrsBias = calcCFFSubroutineBias(font.subrs);\n } else {\n font.subrs = [];\n font.subrsBias = 0;\n }\n }\n let charStringsIndex;\n if (opt.lowMemory) {\n charStringsIndex = parseCFFIndexLowMemory(data, start + topDict.charStrings, header.formatMajor);\n font.nGlyphs = charStringsIndex.offsets.length - (header.formatMajor > 1 ? 1 : 0);\n } else {\n charStringsIndex = parseCFFIndex(data, start + topDict.charStrings, null, header.formatMajor);\n font.nGlyphs = charStringsIndex.objects.length;\n }\n if (header.formatMajor > 1 && font.tables.maxp && font.nGlyphs !== font.tables.maxp.numGlyphs) {\n console.error(`Glyph count in the CFF2 table (${font.nGlyphs}) must correspond to the glyph count in the maxp table (${font.tables.maxp.numGlyphs})`);\n }\n if (header.formatMajor < 2) {\n let charset = [];\n let encoding = [];\n if (topDict.charset === 0) {\n charset = cffISOAdobeStrings;\n } else if (topDict.charset === 1) {\n charset = cffIExpertStrings;\n } else if (topDict.charset === 2) {\n charset = cffExpertSubsetStrings;\n } else {\n charset = parseCFFCharset(data, start + topDict.charset, font.nGlyphs, stringIndex.objects, font.isCIDFont);\n }\n if (topDict.encoding === 0) {\n encoding = cffStandardEncoding;\n } else if (topDict.encoding === 1) {\n encoding = cffExpertEncoding;\n } else {\n encoding = parseCFFEncoding(data, start + topDict.encoding);\n }\n font.cffEncoding = new CffEncoding(encoding, charset);\n font.encoding = font.encoding || font.cffEncoding;\n }\n font.glyphs = new glyphset_default.GlyphSet(font);\n if (opt.lowMemory) {\n font._push = function(i) {\n const charString = getCffIndexObject(i, charStringsIndex.offsets, data, start + topDict.charStrings, void 0, header.formatMajor);\n font.glyphs.push(i, glyphset_default.cffGlyphLoader(font, i, parseCFFCharstring, charString, header.formatMajor));\n };\n } else {\n for (let i = 0; i < font.nGlyphs; i += 1) {\n const charString = charStringsIndex.objects[i];\n font.glyphs.push(i, glyphset_default.cffGlyphLoader(font, i, parseCFFCharstring, charString, header.formatMajor));\n }\n }\n if (topDict.vstore) {\n const p = new parse_default.Parser(data, start + topDict.vstore);\n topDict._vstore = p.parseVariationStore();\n }\n}\nfunction encodeString(s, strings) {\n let sid;\n let i = cffStandardStrings.indexOf(s);\n if (i >= 0) {\n sid = i;\n }\n i = strings.indexOf(s);\n if (i >= 0) {\n sid = i + cffStandardStrings.length;\n } else {\n sid = cffStandardStrings.length + strings.length;\n strings.push(s);\n }\n return sid;\n}\nfunction makeHeader() {\n return new table_default.Record(\"Header\", [\n { name: \"major\", type: \"Card8\", value: 1 },\n { name: \"minor\", type: \"Card8\", value: 0 },\n { name: \"hdrSize\", type: \"Card8\", value: 4 },\n { name: \"major\", type: \"Card8\", value: 1 }\n ]);\n}\nfunction makeNameIndex(fontNames) {\n const t = new table_default.Record(\"Name INDEX\", [\n { name: \"names\", type: \"INDEX\", value: [] }\n ]);\n t.names = [];\n for (let i = 0; i < fontNames.length; i += 1) {\n t.names.push({ name: \"name_\" + i, type: \"NAME\", value: fontNames[i] });\n }\n return t;\n}\nfunction makeDict(meta, attrs, strings) {\n const m = {};\n for (let i = 0; i < meta.length; i += 1) {\n const entry = meta[i];\n let value = attrs[entry.name];\n if (value !== void 0 && !equals(value, entry.value)) {\n if (entry.type === \"SID\") {\n value = encodeString(value, strings);\n }\n m[entry.op] = { name: entry.name, type: entry.type, value };\n }\n }\n return m;\n}\nfunction makeTopDict(attrs, strings, version) {\n const t = new table_default.Record(\"Top DICT\", [\n { name: \"dict\", type: \"DICT\", value: {} }\n ]);\n t.dict = makeDict(version > 1 ? TOP_DICT_META_CFF2 : TOP_DICT_META, attrs, strings);\n return t;\n}\nfunction makeTopDictIndex(topDict) {\n const t = new table_default.Record(\"Top DICT INDEX\", [\n { name: \"topDicts\", type: \"INDEX\", value: [] }\n ]);\n t.topDicts = [{ name: \"topDict_0\", type: \"TABLE\", value: topDict }];\n return t;\n}\nfunction makeStringIndex(strings) {\n const t = new table_default.Record(\"String INDEX\", [\n { name: \"strings\", type: \"INDEX\", value: [] }\n ]);\n t.strings = [];\n for (let i = 0; i < strings.length; i += 1) {\n t.strings.push({ name: \"string_\" + i, type: \"STRING\", value: strings[i] });\n }\n return t;\n}\nfunction makeGlobalSubrIndex() {\n return new table_default.Record(\"Global Subr INDEX\", [\n { name: \"subrs\", type: \"INDEX\", value: [] }\n ]);\n}\nfunction makeCharsets(glyphNames, strings) {\n const t = new table_default.Record(\"Charsets\", [\n { name: \"format\", type: \"Card8\", value: 0 }\n ]);\n for (let i = 0; i < glyphNames.length; i += 1) {\n const glyphName = glyphNames[i];\n const glyphSID = encodeString(glyphName, strings);\n t.fields.push({ name: \"glyph_\" + i, type: \"SID\", value: glyphSID });\n }\n return t;\n}\nfunction glyphToOps(glyph, version) {\n const ops = [];\n const path = glyph.path;\n if (version < 2) {\n ops.push({ name: \"width\", type: \"NUMBER\", value: glyph.advanceWidth });\n }\n let x = 0;\n let y = 0;\n for (let i = 0; i < path.commands.length; i += 1) {\n let dx;\n let dy;\n let cmd = path.commands[i];\n if (cmd.type === \"Q\") {\n const _13 = 1 / 3;\n const _23 = 2 / 3;\n cmd = {\n type: \"C\",\n x: cmd.x,\n y: cmd.y,\n x1: Math.round(_13 * x + _23 * cmd.x1),\n y1: Math.round(_13 * y + _23 * cmd.y1),\n x2: Math.round(_13 * cmd.x + _23 * cmd.x1),\n y2: Math.round(_13 * cmd.y + _23 * cmd.y1)\n };\n }\n if (cmd.type === \"M\") {\n dx = Math.round(cmd.x - x);\n dy = Math.round(cmd.y - y);\n ops.push({ name: \"dx\", type: \"NUMBER\", value: dx });\n ops.push({ name: \"dy\", type: \"NUMBER\", value: dy });\n ops.push({ name: \"rmoveto\", type: \"OP\", value: 21 });\n x = Math.round(cmd.x);\n y = Math.round(cmd.y);\n } else if (cmd.type === \"L\") {\n dx = Math.round(cmd.x - x);\n dy = Math.round(cmd.y - y);\n ops.push({ name: \"dx\", type: \"NUMBER\", value: dx });\n ops.push({ name: \"dy\", type: \"NUMBER\", value: dy });\n ops.push({ name: \"rlineto\", type: \"OP\", value: 5 });\n x = Math.round(cmd.x);\n y = Math.round(cmd.y);\n } else if (cmd.type === \"C\") {\n const dx1 = Math.round(cmd.x1 - x);\n const dy1 = Math.round(cmd.y1 - y);\n const dx2 = Math.round(cmd.x2 - cmd.x1);\n const dy2 = Math.round(cmd.y2 - cmd.y1);\n dx = Math.round(cmd.x - cmd.x2);\n dy = Math.round(cmd.y - cmd.y2);\n ops.push({ name: \"dx1\", type: \"NUMBER\", value: dx1 });\n ops.push({ name: \"dy1\", type: \"NUMBER\", value: dy1 });\n ops.push({ name: \"dx2\", type: \"NUMBER\", value: dx2 });\n ops.push({ name: \"dy2\", type: \"NUMBER\", value: dy2 });\n ops.push({ name: \"dx\", type: \"NUMBER\", value: dx });\n ops.push({ name: \"dy\", type: \"NUMBER\", value: dy });\n ops.push({ name: \"rrcurveto\", type: \"OP\", value: 8 });\n x = Math.round(cmd.x);\n y = Math.round(cmd.y);\n }\n }\n if (version < 2) {\n ops.push({ name: \"endchar\", type: \"OP\", value: 14 });\n }\n return ops;\n}\nfunction makeCharStringsIndex(glyphs, version) {\n const t = new table_default.Record(\"CharStrings INDEX\", [\n { name: \"charStrings\", type: \"INDEX\", value: [] }\n ]);\n for (let i = 0; i < glyphs.length; i += 1) {\n const glyph = glyphs.get(i);\n const ops = glyphToOps(glyph, version);\n t.charStrings.push({ name: glyph.name, type: \"CHARSTRING\", value: ops });\n }\n return t;\n}\nfunction makePrivateDict(attrs, strings, version) {\n const t = new table_default.Record(\"Private DICT\", [\n { name: \"dict\", type: \"DICT\", value: {} }\n ]);\n t.dict = makeDict(version > 1 ? PRIVATE_DICT_META_CFF2 : PRIVATE_DICT_META, attrs, strings);\n return t;\n}\nfunction makeCFFTable(glyphs, options) {\n const cffVersion = 1;\n const t = new table_default.Table(\"CFF \", [\n { name: \"header\", type: \"RECORD\" },\n { name: \"nameIndex\", type: \"RECORD\" },\n { name: \"topDictIndex\", type: \"RECORD\" },\n { name: \"stringIndex\", type: \"RECORD\" },\n { name: \"globalSubrIndex\", type: \"RECORD\" },\n { name: \"charsets\", type: \"RECORD\" },\n { name: \"charStringsIndex\", type: \"RECORD\" },\n { name: \"privateDict\", type: \"RECORD\" }\n ]);\n const fontScale = 1 / options.unitsPerEm;\n const attrs = {\n version: options.version,\n fullName: options.fullName,\n familyName: options.familyName,\n weight: options.weightName,\n fontBBox: options.fontBBox || [0, 0, 0, 0],\n fontMatrix: [fontScale, 0, 0, fontScale, 0, 0],\n charset: 999,\n encoding: 0,\n charStrings: 999,\n private: [0, 999]\n };\n const topDictOptions = options && options.topDict || {};\n if (cffVersion < 2 && topDictOptions.paintType) {\n attrs.paintType = topDictOptions.paintType;\n attrs.strokeWidth = topDictOptions.strokeWidth || 0;\n }\n const privateAttrs = {};\n const glyphNames = [];\n let glyph;\n for (let i = 1; i < glyphs.length; i += 1) {\n glyph = glyphs.get(i);\n glyphNames.push(glyph.name);\n }\n const strings = [];\n t.header = makeHeader();\n t.nameIndex = makeNameIndex([options.postScriptName]);\n let topDict = makeTopDict(attrs, strings);\n t.topDictIndex = makeTopDictIndex(topDict);\n t.globalSubrIndex = makeGlobalSubrIndex();\n t.charsets = makeCharsets(glyphNames, strings);\n t.charStringsIndex = makeCharStringsIndex(glyphs, cffVersion);\n t.privateDict = makePrivateDict(privateAttrs, strings);\n t.stringIndex = makeStringIndex(strings);\n const startOffset = t.header.sizeOf() + t.nameIndex.sizeOf() + t.topDictIndex.sizeOf() + t.stringIndex.sizeOf() + t.globalSubrIndex.sizeOf();\n attrs.charset = startOffset;\n attrs.encoding = 0;\n attrs.charStrings = attrs.charset + t.charsets.sizeOf();\n attrs.private[1] = attrs.charStrings + t.charStringsIndex.sizeOf();\n topDict = makeTopDict(attrs, strings);\n t.topDictIndex = makeTopDictIndex(topDict);\n return t;\n}\nvar cff_default = { parse: parseCFFTable, make: makeCFFTable };\n\n// src/tables/head.mjs\nfunction parseHeadTable(data, start) {\n const head = {};\n const p = new parse_default.Parser(data, start);\n head.version = p.parseVersion();\n head.fontRevision = Math.round(p.parseFixed() * 1e3) / 1e3;\n head.checkSumAdjustment = p.parseULong();\n head.magicNumber = p.parseULong();\n check_default.argument(head.magicNumber === 1594834165, \"Font header has wrong magic number.\");\n head.flags = p.parseUShort();\n head.unitsPerEm = p.parseUShort();\n head.created = p.parseLongDateTime();\n head.modified = p.parseLongDateTime();\n head.xMin = p.parseShort();\n head.yMin = p.parseShort();\n head.xMax = p.parseShort();\n head.yMax = p.parseShort();\n head.macStyle = p.parseUShort();\n head.lowestRecPPEM = p.parseUShort();\n head.fontDirectionHint = p.parseShort();\n head.indexToLocFormat = p.parseShort();\n head.glyphDataFormat = p.parseShort();\n return head;\n}\nfunction makeHeadTable(options) {\n const timestamp = Math.round((/* @__PURE__ */ new Date()).getTime() / 1e3) + 2082844800;\n let createdTimestamp = timestamp;\n let macStyle = options.macStyle || 0;\n if (options.createdTimestamp) {\n createdTimestamp = options.createdTimestamp + 2082844800;\n }\n return new table_default.Table(\"head\", [\n { name: \"version\", type: \"FIXED\", value: 65536 },\n { name: \"fontRevision\", type: \"FIXED\", value: 65536 },\n { name: \"checkSumAdjustment\", type: \"ULONG\", value: 0 },\n { name: \"magicNumber\", type: \"ULONG\", value: 1594834165 },\n { name: \"flags\", type: \"USHORT\", value: 0 },\n { name: \"unitsPerEm\", type: \"USHORT\", value: 1e3 },\n { name: \"created\", type: \"LONGDATETIME\", value: createdTimestamp },\n { name: \"modified\", type: \"LONGDATETIME\", value: timestamp },\n { name: \"xMin\", type: \"SHORT\", value: 0 },\n { name: \"yMin\", type: \"SHORT\", value: 0 },\n { name: \"xMax\", type: \"SHORT\", value: 0 },\n { name: \"yMax\", type: \"SHORT\", value: 0 },\n { name: \"macStyle\", type: \"USHORT\", value: macStyle },\n { name: \"lowestRecPPEM\", type: \"USHORT\", value: 0 },\n { name: \"fontDirectionHint\", type: \"SHORT\", value: 2 },\n { name: \"indexToLocFormat\", type: \"SHORT\", value: 0 },\n { name: \"glyphDataFormat\", type: \"SHORT\", value: 0 }\n ], options);\n}\nvar head_default = { parse: parseHeadTable, make: makeHeadTable };\n\n// src/tables/hhea.mjs\nfunction parseHheaTable(data, start) {\n const hhea = {};\n const p = new parse_default.Parser(data, start);\n hhea.version = p.parseVersion();\n hhea.ascender = p.parseShort();\n hhea.descender = p.parseShort();\n hhea.lineGap = p.parseShort();\n hhea.advanceWidthMax = p.parseUShort();\n hhea.minLeftSideBearing = p.parseShort();\n hhea.minRightSideBearing = p.parseShort();\n hhea.xMaxExtent = p.parseShort();\n hhea.caretSlopeRise = p.parseShort();\n hhea.caretSlopeRun = p.parseShort();\n hhea.caretOffset = p.parseShort();\n p.relativeOffset += 8;\n hhea.metricDataFormat = p.parseShort();\n hhea.numberOfHMetrics = p.parseUShort();\n return hhea;\n}\nfunction makeHheaTable(options) {\n return new table_default.Table(\"hhea\", [\n { name: \"version\", type: \"FIXED\", value: 65536 },\n { name: \"ascender\", type: \"FWORD\", value: 0 },\n { name: \"descender\", type: \"FWORD\", value: 0 },\n { name: \"lineGap\", type: \"FWORD\", value: 0 },\n { name: \"advanceWidthMax\", type: \"UFWORD\", value: 0 },\n { name: \"minLeftSideBearing\", type: \"FWORD\", value: 0 },\n { name: \"minRightSideBearing\", type: \"FWORD\", value: 0 },\n { name: \"xMaxExtent\", type: \"FWORD\", value: 0 },\n { name: \"caretSlopeRise\", type: \"SHORT\", value: 1 },\n { name: \"caretSlopeRun\", type: \"SHORT\", value: 0 },\n { name: \"caretOffset\", type: \"SHORT\", value: 0 },\n { name: \"reserved1\", type: \"SHORT\", value: 0 },\n { name: \"reserved2\", type: \"SHORT\", value: 0 },\n { name: \"reserved3\", type: \"SHORT\", value: 0 },\n { name: \"reserved4\", type: \"SHORT\", value: 0 },\n { name: \"metricDataFormat\", type: \"SHORT\", value: 0 },\n { name: \"numberOfHMetrics\", type: \"USHORT\", value: 0 }\n ], options);\n}\nvar hhea_default = { parse: parseHheaTable, make: makeHheaTable };\n\n// src/tables/hmtx.mjs\nfunction parseHmtxTableAll(data, start, numMetrics, numGlyphs, glyphs) {\n let advanceWidth;\n let leftSideBearing;\n const p = new parse_default.Parser(data, start);\n for (let i = 0; i < numGlyphs; i += 1) {\n if (i < numMetrics) {\n advanceWidth = p.parseUShort();\n leftSideBearing = p.parseShort();\n }\n const glyph = glyphs.get(i);\n glyph.advanceWidth = advanceWidth;\n glyph.leftSideBearing = leftSideBearing;\n }\n}\nfunction parseHmtxTableOnLowMemory(font, data, start, numMetrics, numGlyphs) {\n font._hmtxTableData = {};\n let advanceWidth;\n let leftSideBearing;\n const p = new parse_default.Parser(data, start);\n for (let i = 0; i < numGlyphs; i += 1) {\n if (i < numMetrics) {\n advanceWidth = p.parseUShort();\n leftSideBearing = p.parseShort();\n }\n font._hmtxTableData[i] = {\n advanceWidth,\n leftSideBearing\n };\n }\n}\nfunction parseHmtxTable(font, data, start, numMetrics, numGlyphs, glyphs, opt) {\n if (opt.lowMemory)\n parseHmtxTableOnLowMemory(font, data, start, numMetrics, numGlyphs);\n else\n parseHmtxTableAll(data, start, numMetrics, numGlyphs, glyphs);\n}\nfunction makeHmtxTable(glyphs) {\n const t = new table_default.Table(\"hmtx\", []);\n for (let i = 0; i < glyphs.length; i += 1) {\n const glyph = glyphs.get(i);\n const advanceWidth = glyph.advanceWidth || 0;\n const leftSideBearing = glyph.leftSideBearing || 0;\n t.fields.push({ name: \"advanceWidth_\" + i, type: \"USHORT\", value: advanceWidth });\n t.fields.push({ name: \"leftSideBearing_\" + i, type: \"SHORT\", value: leftSideBearing });\n }\n return t;\n}\nvar hmtx_default = { parse: parseHmtxTable, make: makeHmtxTable };\n\n// src/tables/ltag.mjs\nfunction makeLtagTable(tags) {\n const result = new table_default.Table(\"ltag\", [\n { name: \"version\", type: \"ULONG\", value: 1 },\n { name: \"flags\", type: \"ULONG\", value: 0 },\n { name: \"numTags\", type: \"ULONG\", value: tags.length }\n ]);\n let stringPool = \"\";\n const stringPoolOffset = 12 + tags.length * 4;\n for (let i = 0; i < tags.length; ++i) {\n let pos = stringPool.indexOf(tags[i]);\n if (pos < 0) {\n pos = stringPool.length;\n stringPool += tags[i];\n }\n result.fields.push({ name: \"offset \" + i, type: \"USHORT\", value: stringPoolOffset + pos });\n result.fields.push({ name: \"length \" + i, type: \"USHORT\", value: tags[i].length });\n }\n result.fields.push({ name: \"stringPool\", type: \"CHARARRAY\", value: stringPool });\n return result;\n}\nfunction parseLtagTable(data, start) {\n const p = new parse_default.Parser(data, start);\n const tableVersion = p.parseULong();\n check_default.argument(tableVersion === 1, \"Unsupported ltag table version.\");\n p.skip(\"uLong\", 1);\n const numTags = p.parseULong();\n const tags = [];\n for (let i = 0; i < numTags; i++) {\n let tag = \"\";\n const offset = start + p.parseUShort();\n const length = p.parseUShort();\n for (let j = offset; j < offset + length; ++j) {\n tag += String.fromCharCode(data.getInt8(j));\n }\n tags.push(tag);\n }\n return tags;\n}\nvar ltag_default = { make: makeLtagTable, parse: parseLtagTable };\n\n// src/tables/maxp.mjs\nfunction parseMaxpTable(data, start) {\n const maxp = {};\n const p = new parse_default.Parser(data, start);\n maxp.version = p.parseVersion();\n maxp.numGlyphs = p.parseUShort();\n if (maxp.version === 1) {\n maxp.maxPoints = p.parseUShort();\n maxp.maxContours = p.parseUShort();\n maxp.maxCompositePoints = p.parseUShort();\n maxp.maxCompositeContours = p.parseUShort();\n maxp.maxZones = p.parseUShort();\n maxp.maxTwilightPoints = p.parseUShort();\n maxp.maxStorage = p.parseUShort();\n maxp.maxFunctionDefs = p.parseUShort();\n maxp.maxInstructionDefs = p.parseUShort();\n maxp.maxStackElements = p.parseUShort();\n maxp.maxSizeOfInstructions = p.parseUShort();\n maxp.maxComponentElements = p.parseUShort();\n maxp.maxComponentDepth = p.parseUShort();\n }\n return maxp;\n}\nfunction makeMaxpTable(numGlyphs) {\n return new table_default.Table(\"maxp\", [\n { name: \"version\", type: \"FIXED\", value: 20480 },\n { name: \"numGlyphs\", type: \"USHORT\", value: numGlyphs }\n ]);\n}\nvar maxp_default = { parse: parseMaxpTable, make: makeMaxpTable };\n\n// src/tables/os2.mjs\nvar unicodeRanges = [\n { begin: 0, end: 127 },\n // Basic Latin\n { begin: 128, end: 255 },\n // Latin-1 Supplement\n { begin: 256, end: 383 },\n // Latin Extended-A\n { begin: 384, end: 591 },\n // Latin Extended-B\n { begin: 592, end: 687 },\n // IPA Extensions\n { begin: 688, end: 767 },\n // Spacing Modifier Letters\n { begin: 768, end: 879 },\n // Combining Diacritical Marks\n { begin: 880, end: 1023 },\n // Greek and Coptic\n { begin: 11392, end: 11519 },\n // Coptic\n { begin: 1024, end: 1279 },\n // Cyrillic\n { begin: 1328, end: 1423 },\n // Armenian\n { begin: 1424, end: 1535 },\n // Hebrew\n { begin: 42240, end: 42559 },\n // Vai\n { begin: 1536, end: 1791 },\n // Arabic\n { begin: 1984, end: 2047 },\n // NKo\n { begin: 2304, end: 2431 },\n // Devanagari\n { begin: 2432, end: 2559 },\n // Bengali\n { begin: 2560, end: 2687 },\n // Gurmukhi\n { begin: 2688, end: 2815 },\n // Gujarati\n { begin: 2816, end: 2943 },\n // Oriya\n { begin: 2944, end: 3071 },\n // Tamil\n { begin: 3072, end: 3199 },\n // Telugu\n { begin: 3200, end: 3327 },\n // Kannada\n { begin: 3328, end: 3455 },\n // Malayalam\n { begin: 3584, end: 3711 },\n // Thai\n { begin: 3712, end: 3839 },\n // Lao\n { begin: 4256, end: 4351 },\n // Georgian\n { begin: 6912, end: 7039 },\n // Balinese\n { begin: 4352, end: 4607 },\n // Hangul Jamo\n { begin: 7680, end: 7935 },\n // Latin Extended Additional\n { begin: 7936, end: 8191 },\n // Greek Extended\n { begin: 8192, end: 8303 },\n // General Punctuation\n { begin: 8304, end: 8351 },\n // Superscripts And Subscripts\n { begin: 8352, end: 8399 },\n // Currency Symbol\n { begin: 8400, end: 8447 },\n // Combining Diacritical Marks For Symbols\n { begin: 8448, end: 8527 },\n // Letterlike Symbols\n { begin: 8528, end: 8591 },\n // Number Forms\n { begin: 8592, end: 8703 },\n // Arrows\n { begin: 8704, end: 8959 },\n // Mathematical Operators\n { begin: 8960, end: 9215 },\n // Miscellaneous Technical\n { begin: 9216, end: 9279 },\n // Control Pictures\n { begin: 9280, end: 9311 },\n // Optical Character Recognition\n { begin: 9312, end: 9471 },\n // Enclosed Alphanumerics\n { begin: 9472, end: 9599 },\n // Box Drawing\n { begin: 9600, end: 9631 },\n // Block Elements\n { begin: 9632, end: 9727 },\n // Geometric Shapes\n { begin: 9728, end: 9983 },\n // Miscellaneous Symbols\n { begin: 9984, end: 10175 },\n // Dingbats\n { begin: 12288, end: 12351 },\n // CJK Symbols And Punctuation\n { begin: 12352, end: 12447 },\n // Hiragana\n { begin: 12448, end: 12543 },\n // Katakana\n { begin: 12544, end: 12591 },\n // Bopomofo\n { begin: 12592, end: 12687 },\n // Hangul Compatibility Jamo\n { begin: 43072, end: 43135 },\n // Phags-pa\n { begin: 12800, end: 13055 },\n // Enclosed CJK Letters And Months\n { begin: 13056, end: 13311 },\n // CJK Compatibility\n { begin: 44032, end: 55215 },\n // Hangul Syllables\n { begin: 55296, end: 57343 },\n // Non-Plane 0 *\n { begin: 67840, end: 67871 },\n // Phoenicia\n { begin: 19968, end: 40959 },\n // CJK Unified Ideographs\n { begin: 57344, end: 63743 },\n // Private Use Area (plane 0)\n { begin: 12736, end: 12783 },\n // CJK Strokes\n { begin: 64256, end: 64335 },\n // Alphabetic Presentation Forms\n { begin: 64336, end: 65023 },\n // Arabic Presentation Forms-A\n { begin: 65056, end: 65071 },\n // Combining Half Marks\n { begin: 65040, end: 65055 },\n // Vertical Forms\n { begin: 65104, end: 65135 },\n // Small Form Variants\n { begin: 65136, end: 65279 },\n // Arabic Presentation Forms-B\n { begin: 65280, end: 65519 },\n // Halfwidth And Fullwidth Forms\n { begin: 65520, end: 65535 },\n // Specials\n { begin: 3840, end: 4095 },\n // Tibetan\n { begin: 1792, end: 1871 },\n // Syriac\n { begin: 1920, end: 1983 },\n // Thaana\n { begin: 3456, end: 3583 },\n // Sinhala\n { begin: 4096, end: 4255 },\n // Myanmar\n { begin: 4608, end: 4991 },\n // Ethiopic\n { begin: 5024, end: 5119 },\n // Cherokee\n { begin: 5120, end: 5759 },\n // Unified Canadian Aboriginal Syllabics\n { begin: 5760, end: 5791 },\n // Ogham\n { begin: 5792, end: 5887 },\n // Runic\n { begin: 6016, end: 6143 },\n // Khmer\n { begin: 6144, end: 6319 },\n // Mongolian\n { begin: 10240, end: 10495 },\n // Braille Patterns\n { begin: 40960, end: 42127 },\n // Yi Syllables\n { begin: 5888, end: 5919 },\n // Tagalog\n { begin: 66304, end: 66351 },\n // Old Italic\n { begin: 66352, end: 66383 },\n // Gothic\n { begin: 66560, end: 66639 },\n // Deseret\n { begin: 118784, end: 119039 },\n // Byzantine Musical Symbols\n { begin: 119808, end: 120831 },\n // Mathematical Alphanumeric Symbols\n { begin: 1044480, end: 1048573 },\n // Private Use (plane 15)\n { begin: 65024, end: 65039 },\n // Variation Selectors\n { begin: 917504, end: 917631 },\n // Tags\n { begin: 6400, end: 6479 },\n // Limbu\n { begin: 6480, end: 6527 },\n // Tai Le\n { begin: 6528, end: 6623 },\n // New Tai Lue\n { begin: 6656, end: 6687 },\n // Buginese\n { begin: 11264, end: 11359 },\n // Glagolitic\n { begin: 11568, end: 11647 },\n // Tifinagh\n { begin: 19904, end: 19967 },\n // Yijing Hexagram Symbols\n { begin: 43008, end: 43055 },\n // Syloti Nagri\n { begin: 65536, end: 65663 },\n // Linear B Syllabary\n { begin: 65856, end: 65935 },\n // Ancient Greek Numbers\n { begin: 66432, end: 66463 },\n // Ugaritic\n { begin: 66464, end: 66527 },\n // Old Persian\n { begin: 66640, end: 66687 },\n // Shavian\n { begin: 66688, end: 66735 },\n // Osmanya\n { begin: 67584, end: 67647 },\n // Cypriot Syllabary\n { begin: 68096, end: 68191 },\n // Kharoshthi\n { begin: 119552, end: 119647 },\n // Tai Xuan Jing Symbols\n { begin: 73728, end: 74751 },\n // Cuneiform\n { begin: 119648, end: 119679 },\n // Counting Rod Numerals\n { begin: 7040, end: 7103 },\n // Sundanese\n { begin: 7168, end: 7247 },\n // Lepcha\n { begin: 7248, end: 7295 },\n // Ol Chiki\n { begin: 43136, end: 43231 },\n // Saurashtra\n { begin: 43264, end: 43311 },\n // Kayah Li\n { begin: 43312, end: 43359 },\n // Rejang\n { begin: 43520, end: 43615 },\n // Cham\n { begin: 65936, end: 65999 },\n // Ancient Symbols\n { begin: 66e3, end: 66047 },\n // Phaistos Disc\n { begin: 66208, end: 66271 },\n // Carian\n { begin: 127024, end: 127135 }\n // Domino Tiles\n];\nfunction getUnicodeRange(unicode) {\n for (let i = 0; i < unicodeRanges.length; i += 1) {\n const range = unicodeRanges[i];\n if (unicode >= range.begin && unicode < range.end) {\n return i;\n }\n }\n return -1;\n}\nfunction parseOS2Table(data, start) {\n const os2 = {};\n const p = new parse_default.Parser(data, start);\n os2.version = p.parseUShort();\n os2.xAvgCharWidth = p.parseShort();\n os2.usWeightClass = p.parseUShort();\n os2.usWidthClass = p.parseUShort();\n os2.fsType = p.parseUShort();\n os2.ySubscriptXSize = p.parseShort();\n os2.ySubscriptYSize = p.parseShort();\n os2.ySubscriptXOffset = p.parseShort();\n os2.ySubscriptYOffset = p.parseShort();\n os2.ySuperscriptXSize = p.parseShort();\n os2.ySuperscriptYSize = p.parseShort();\n os2.ySuperscriptXOffset = p.parseShort();\n os2.ySuperscriptYOffset = p.parseShort();\n os2.yStrikeoutSize = p.parseShort();\n os2.yStrikeoutPosition = p.parseShort();\n os2.sFamilyClass = p.parseShort();\n os2.panose = [];\n for (let i = 0; i < 10; i++) {\n os2.panose[i] = p.parseByte();\n }\n os2.ulUnicodeRange1 = p.parseULong();\n os2.ulUnicodeRange2 = p.parseULong();\n os2.ulUnicodeRange3 = p.parseULong();\n os2.ulUnicodeRange4 = p.parseULong();\n os2.achVendID = String.fromCharCode(p.parseByte(), p.parseByte(), p.parseByte(), p.parseByte());\n os2.fsSelection = p.parseUShort();\n os2.usFirstCharIndex = p.parseUShort();\n os2.usLastCharIndex = p.parseUShort();\n os2.sTypoAscender = p.parseShort();\n os2.sTypoDescender = p.parseShort();\n os2.sTypoLineGap = p.parseShort();\n os2.usWinAscent = p.parseUShort();\n os2.usWinDescent = p.parseUShort();\n if (os2.version >= 1) {\n os2.ulCodePageRange1 = p.parseULong();\n os2.ulCodePageRange2 = p.parseULong();\n }\n if (os2.version >= 2) {\n os2.sxHeight = p.parseShort();\n os2.sCapHeight = p.parseShort();\n os2.usDefaultChar = p.parseUShort();\n os2.usBreakChar = p.parseUShort();\n os2.usMaxContent = p.parseUShort();\n }\n return os2;\n}\nfunction makeOS2Table(options) {\n return new table_default.Table(\"OS/2\", [\n { name: \"version\", type: \"USHORT\", value: 3 },\n { name: \"xAvgCharWidth\", type: \"SHORT\", value: 0 },\n { name: \"usWeightClass\", type: \"USHORT\", value: 0 },\n { name: \"usWidthClass\", type: \"USHORT\", value: 0 },\n { name: \"fsType\", type: \"USHORT\", value: 0 },\n { name: \"ySubscriptXSize\", type: \"SHORT\", value: 650 },\n { name: \"ySubscriptYSize\", type: \"SHORT\", value: 699 },\n { name: \"ySubscriptXOffset\", type: \"SHORT\", value: 0 },\n { name: \"ySubscriptYOffset\", type: \"SHORT\", value: 140 },\n { name: \"ySuperscriptXSize\", type: \"SHORT\", value: 650 },\n { name: \"ySuperscriptYSize\", type: \"SHORT\", value: 699 },\n { name: \"ySuperscriptXOffset\", type: \"SHORT\", value: 0 },\n { name: \"ySuperscriptYOffset\", type: \"SHORT\", value: 479 },\n { name: \"yStrikeoutSize\", type: \"SHORT\", value: 49 },\n { name: \"yStrikeoutPosition\", type: \"SHORT\", value: 258 },\n { name: \"sFamilyClass\", type: \"SHORT\", value: 0 },\n { name: \"bFamilyType\", type: \"BYTE\", value: 0 },\n { name: \"bSerifStyle\", type: \"BYTE\", value: 0 },\n { name: \"bWeight\", type: \"BYTE\", value: 0 },\n { name: \"bProportion\", type: \"BYTE\", value: 0 },\n { name: \"bContrast\", type: \"BYTE\", value: 0 },\n { name: \"bStrokeVariation\", type: \"BYTE\", value: 0 },\n { name: \"bArmStyle\", type: \"BYTE\", value: 0 },\n { name: \"bLetterform\", type: \"BYTE\", value: 0 },\n { name: \"bMidline\", type: \"BYTE\", value: 0 },\n { name: \"bXHeight\", type: \"BYTE\", value: 0 },\n { name: \"ulUnicodeRange1\", type: \"ULONG\", value: 0 },\n { name: \"ulUnicodeRange2\", type: \"ULONG\", value: 0 },\n { name: \"ulUnicodeRange3\", type: \"ULONG\", value: 0 },\n { name: \"ulUnicodeRange4\", type: \"ULONG\", value: 0 },\n { name: \"achVendID\", type: \"CHARARRAY\", value: \"XXXX\" },\n { name: \"fsSelection\", type: \"USHORT\", value: 0 },\n { name: \"usFirstCharIndex\", type: \"USHORT\", value: 0 },\n { name: \"usLastCharIndex\", type: \"USHORT\", value: 0 },\n { name: \"sTypoAscender\", type: \"SHORT\", value: 0 },\n { name: \"sTypoDescender\", type: \"SHORT\", value: 0 },\n { name: \"sTypoLineGap\", type: \"SHORT\", value: 0 },\n { name: \"usWinAscent\", type: \"USHORT\", value: 0 },\n { name: \"usWinDescent\", type: \"USHORT\", value: 0 },\n { name: \"ulCodePageRange1\", type: \"ULONG\", value: 0 },\n { name: \"ulCodePageRange2\", type: \"ULONG\", value: 0 },\n { name: \"sxHeight\", type: \"SHORT\", value: 0 },\n { name: \"sCapHeight\", type: \"SHORT\", value: 0 },\n { name: \"usDefaultChar\", type: \"USHORT\", value: 0 },\n { name: \"usBreakChar\", type: \"USHORT\", value: 0 },\n { name: \"usMaxContext\", type: \"USHORT\", value: 0 }\n ], options);\n}\nvar os2_default = { parse: parseOS2Table, make: makeOS2Table, unicodeRanges, getUnicodeRange };\n\n// src/tables/post.mjs\nfunction parsePostTable(data, start) {\n const post = {};\n const p = new parse_default.Parser(data, start);\n post.version = p.parseVersion();\n post.italicAngle = p.parseFixed();\n post.underlinePosition = p.parseShort();\n post.underlineThickness = p.parseShort();\n post.isFixedPitch = p.parseULong();\n post.minMemType42 = p.parseULong();\n post.maxMemType42 = p.parseULong();\n post.minMemType1 = p.parseULong();\n post.maxMemType1 = p.parseULong();\n switch (post.version) {\n case 1:\n post.names = standardNames.slice();\n break;\n case 2:\n post.numberOfGlyphs = p.parseUShort();\n post.glyphNameIndex = new Array(post.numberOfGlyphs);\n for (let i = 0; i < post.numberOfGlyphs; i++) {\n post.glyphNameIndex[i] = p.parseUShort();\n }\n post.names = [];\n for (let i = 0; i < post.numberOfGlyphs; i++) {\n if (post.glyphNameIndex[i] >= standardNames.length) {\n const nameLength = p.parseChar();\n post.names.push(p.parseString(nameLength));\n }\n }\n break;\n case 2.5:\n post.numberOfGlyphs = p.parseUShort();\n post.offset = new Array(post.numberOfGlyphs);\n for (let i = 0; i < post.numberOfGlyphs; i++) {\n post.offset[i] = p.parseChar();\n }\n break;\n }\n return post;\n}\nfunction makePostTable(font) {\n const {\n italicAngle = Math.round((font.italicAngle || 0) * 65536),\n underlinePosition = 0,\n underlineThickness = 0,\n isFixedPitch = 0,\n minMemType42 = 0,\n maxMemType42 = 0,\n minMemType1 = 0,\n maxMemType1 = 0\n } = font.tables.post || {};\n return new table_default.Table(\"post\", [\n { name: \"version\", type: \"FIXED\", value: 196608 },\n { name: \"italicAngle\", type: \"FIXED\", value: italicAngle },\n { name: \"underlinePosition\", type: \"FWORD\", value: underlinePosition },\n { name: \"underlineThickness\", type: \"FWORD\", value: underlineThickness },\n { name: \"isFixedPitch\", type: \"ULONG\", value: isFixedPitch },\n { name: \"minMemType42\", type: \"ULONG\", value: minMemType42 },\n { name: \"maxMemType42\", type: \"ULONG\", value: maxMemType42 },\n { name: \"minMemType1\", type: \"ULONG\", value: minMemType1 },\n { name: \"maxMemType1\", type: \"ULONG\", value: maxMemType1 }\n ]);\n}\nvar post_default = { parse: parsePostTable, make: makePostTable };\n\n// src/tables/gsub.mjs\nvar subtableParsers = new Array(9);\nsubtableParsers[1] = function parseLookup1() {\n const start = this.offset + this.relativeOffset;\n const substFormat = this.parseUShort();\n if (substFormat === 1) {\n return {\n substFormat: 1,\n coverage: this.parsePointer(Parser.coverage),\n deltaGlyphId: this.parseShort()\n };\n } else if (substFormat === 2) {\n return {\n substFormat: 2,\n coverage: this.parsePointer(Parser.coverage),\n substitute: this.parseOffset16List()\n };\n }\n check_default.assert(false, \"0x\" + start.toString(16) + \": lookup type 1 format must be 1 or 2.\");\n};\nsubtableParsers[2] = function parseLookup2() {\n const substFormat = this.parseUShort();\n check_default.argument(substFormat === 1, \"GSUB Multiple Substitution Subtable identifier-format must be 1\");\n return {\n substFormat,\n coverage: this.parsePointer(Parser.coverage),\n sequences: this.parseListOfLists()\n };\n};\nsubtableParsers[3] = function parseLookup3() {\n const substFormat = this.parseUShort();\n check_default.argument(substFormat === 1, \"GSUB Alternate Substitution Subtable identifier-format must be 1\");\n return {\n substFormat,\n coverage: this.parsePointer(Parser.coverage),\n alternateSets: this.parseListOfLists()\n };\n};\nsubtableParsers[4] = function parseLookup4() {\n const substFormat = this.parseUShort();\n check_default.argument(substFormat === 1, \"GSUB ligature table identifier-format must be 1\");\n return {\n substFormat,\n coverage: this.parsePointer(Parser.coverage),\n ligatureSets: this.parseListOfLists(function() {\n return {\n ligGlyph: this.parseUShort(),\n components: this.parseUShortList(this.parseUShort() - 1)\n };\n })\n };\n};\nvar lookupRecordDesc = {\n sequenceIndex: Parser.uShort,\n lookupListIndex: Parser.uShort\n};\nsubtableParsers[5] = function parseLookup5() {\n const start = this.offset + this.relativeOffset;\n const substFormat = this.parseUShort();\n if (substFormat === 1) {\n return {\n substFormat,\n coverage: this.parsePointer(Parser.coverage),\n ruleSets: this.parseListOfLists(function() {\n const glyphCount = this.parseUShort();\n const substCount = this.parseUShort();\n return {\n input: this.parseUShortList(glyphCount - 1),\n lookupRecords: this.parseRecordList(substCount, lookupRecordDesc)\n };\n })\n };\n } else if (substFormat === 2) {\n return {\n substFormat,\n coverage: this.parsePointer(Parser.coverage),\n classDef: this.parsePointer(Parser.classDef),\n classSets: this.parseListOfLists(function() {\n const glyphCount = this.parseUShort();\n const substCount = this.parseUShort();\n return {\n classes: this.parseUShortList(glyphCount - 1),\n lookupRecords: this.parseRecordList(substCount, lookupRecordDesc)\n };\n })\n };\n } else if (substFormat === 3) {\n const glyphCount = this.parseUShort();\n const substCount = this.parseUShort();\n return {\n substFormat,\n coverages: this.parseList(glyphCount, Parser.pointer(Parser.coverage)),\n lookupRecords: this.parseRecordList(substCount, lookupRecordDesc)\n };\n }\n check_default.assert(false, \"0x\" + start.toString(16) + \": lookup type 5 format must be 1, 2 or 3.\");\n};\nsubtableParsers[6] = function parseLookup6() {\n const start = this.offset + this.relativeOffset;\n const substFormat = this.parseUShort();\n if (substFormat === 1) {\n return {\n substFormat: 1,\n coverage: this.parsePointer(Parser.coverage),\n chainRuleSets: this.parseListOfLists(function() {\n return {\n backtrack: this.parseUShortList(),\n input: this.parseUShortList(this.parseShort() - 1),\n lookahead: this.parseUShortList(),\n lookupRecords: this.parseRecordList(lookupRecordDesc)\n };\n })\n };\n } else if (substFormat === 2) {\n return {\n substFormat: 2,\n coverage: this.parsePointer(Parser.coverage),\n backtrackClassDef: this.parsePointer(Parser.classDef),\n inputClassDef: this.parsePointer(Parser.classDef),\n lookaheadClassDef: this.parsePointer(Parser.classDef),\n chainClassSet: this.parseListOfLists(function() {\n return {\n backtrack: this.parseUShortList(),\n input: this.parseUShortList(this.parseShort() - 1),\n lookahead: this.parseUShortList(),\n lookupRecords: this.parseRecordList(lookupRecordDesc)\n };\n })\n };\n } else if (substFormat === 3) {\n return {\n substFormat: 3,\n backtrackCoverage: this.parseList(Parser.pointer(Parser.coverage)),\n inputCoverage: this.parseList(Parser.pointer(Parser.coverage)),\n lookaheadCoverage: this.parseList(Parser.pointer(Parser.coverage)),\n lookupRecords: this.parseRecordList(lookupRecordDesc)\n };\n }\n check_default.assert(false, \"0x\" + start.toString(16) + \": lookup type 6 format must be 1, 2 or 3.\");\n};\nsubtableParsers[7] = function parseLookup7() {\n const substFormat = this.parseUShort();\n check_default.argument(substFormat === 1, \"GSUB Extension Substitution subtable identifier-format must be 1\");\n const extensionLookupType = this.parseUShort();\n const extensionParser = new Parser(this.data, this.offset + this.parseULong());\n return {\n substFormat: 1,\n lookupType: extensionLookupType,\n extension: subtableParsers[extensionLookupType].call(extensionParser)\n };\n};\nsubtableParsers[8] = function parseLookup8() {\n const substFormat = this.parseUShort();\n check_default.argument(substFormat === 1, \"GSUB Reverse Chaining Contextual Single Substitution Subtable identifier-format must be 1\");\n return {\n substFormat,\n coverage: this.parsePointer(Parser.coverage),\n backtrackCoverage: this.parseList(Parser.pointer(Parser.coverage)),\n lookaheadCoverage: this.parseList(Parser.pointer(Parser.coverage)),\n substitutes: this.parseUShortList()\n };\n};\nfunction parseGsubTable(data, start) {\n start = start || 0;\n const p = new Parser(data, start);\n const tableVersion = p.parseVersion(1);\n check_default.argument(tableVersion === 1 || tableVersion === 1.1, \"Unsupported GSUB table version.\");\n if (tableVersion === 1) {\n return {\n version: tableVersion,\n scripts: p.parseScriptList(),\n features: p.parseFeatureList(),\n lookups: p.parseLookupList(subtableParsers)\n };\n } else {\n return {\n version: tableVersion,\n scripts: p.parseScriptList(),\n features: p.parseFeatureList(),\n lookups: p.parseLookupList(subtableParsers),\n variations: p.parseFeatureVariationsList()\n };\n }\n}\nvar subtableMakers = new Array(9);\nsubtableMakers[1] = function makeLookup1(subtable) {\n if (subtable.substFormat === 1) {\n return new table_default.Table(\"substitutionTable\", [\n { name: \"substFormat\", type: \"USHORT\", value: 1 },\n { name: \"coverage\", type: \"TABLE\", value: new table_default.Coverage(subtable.coverage) },\n { name: \"deltaGlyphID\", type: \"SHORT\", value: subtable.deltaGlyphId }\n ]);\n } else if (subtable.substFormat === 2) {\n return new table_default.Table(\"substitutionTable\", [\n { name: \"substFormat\", type: \"USHORT\", value: 2 },\n { name: \"coverage\", type: \"TABLE\", value: new table_default.Coverage(subtable.coverage) }\n ].concat(table_default.ushortList(\"substitute\", subtable.substitute)));\n }\n check_default.fail(\"Lookup type 1 substFormat must be 1 or 2.\");\n};\nsubtableMakers[2] = function makeLookup2(subtable) {\n check_default.assert(subtable.substFormat === 1, \"Lookup type 2 substFormat must be 1.\");\n return new table_default.Table(\"substitutionTable\", [\n { name: \"substFormat\", type: \"USHORT\", value: 1 },\n { name: \"coverage\", type: \"TABLE\", value: new table_default.Coverage(subtable.coverage) }\n ].concat(table_default.tableList(\"seqSet\", subtable.sequences, function(sequenceSet) {\n return new table_default.Table(\"sequenceSetTable\", table_default.ushortList(\"sequence\", sequenceSet));\n })));\n};\nsubtableMakers[3] = function makeLookup3(subtable) {\n check_default.assert(subtable.substFormat === 1, \"Lookup type 3 substFormat must be 1.\");\n return new table_default.Table(\"substitutionTable\", [\n { name: \"substFormat\", type: \"USHORT\", value: 1 },\n { name: \"coverage\", type: \"TABLE\", value: new table_default.Coverage(subtable.coverage) }\n ].concat(table_default.tableList(\"altSet\", subtable.alternateSets, function(alternateSet) {\n return new table_default.Table(\"alternateSetTable\", table_default.ushortList(\"alternate\", alternateSet));\n })));\n};\nsubtableMakers[4] = function makeLookup4(subtable) {\n check_default.assert(subtable.substFormat === 1, \"Lookup type 4 substFormat must be 1.\");\n return new table_default.Table(\"substitutionTable\", [\n { name: \"substFormat\", type: \"USHORT\", value: 1 },\n { name: \"coverage\", type: \"TABLE\", value: new table_default.Coverage(subtable.coverage) }\n ].concat(table_default.tableList(\"ligSet\", subtable.ligatureSets, function(ligatureSet) {\n return new table_default.Table(\"ligatureSetTable\", table_default.tableList(\"ligature\", ligatureSet, function(ligature) {\n return new table_default.Table(\n \"ligatureTable\",\n [{ name: \"ligGlyph\", type: \"USHORT\", value: ligature.ligGlyph }].concat(table_default.ushortList(\"component\", ligature.components, ligature.components.length + 1))\n );\n }));\n })));\n};\nsubtableMakers[5] = function makeLookup5(subtable) {\n if (subtable.substFormat === 1) {\n return new table_default.Table(\"contextualSubstitutionTable\", [\n { name: \"substFormat\", type: \"USHORT\", value: subtable.substFormat },\n { name: \"coverage\", type: \"TABLE\", value: new table_default.Coverage(subtable.coverage) }\n ].concat(table_default.tableList(\"sequenceRuleSet\", subtable.ruleSets, function(sequenceRuleSet) {\n if (!sequenceRuleSet) {\n return new table_default.Table(\"NULL\", null);\n }\n return new table_default.Table(\"sequenceRuleSetTable\", table_default.tableList(\"sequenceRule\", sequenceRuleSet, function(sequenceRule) {\n let tableData = table_default.ushortList(\"seqLookup\", [], sequenceRule.lookupRecords.length).concat(table_default.ushortList(\"inputSequence\", sequenceRule.input, sequenceRule.input.length + 1));\n [tableData[0], tableData[1]] = [tableData[1], tableData[0]];\n for (let i = 0; i < sequenceRule.lookupRecords.length; i++) {\n const record = sequenceRule.lookupRecords[i];\n tableData = tableData.concat({ name: \"sequenceIndex\" + i, type: \"USHORT\", value: record.sequenceIndex }).concat({ name: \"lookupListIndex\" + i, type: \"USHORT\", value: record.lookupListIndex });\n }\n return new table_default.Table(\"sequenceRuleTable\", tableData);\n }));\n })));\n } else if (subtable.substFormat === 2) {\n return new table_default.Table(\"contextualSubstitutionTable\", [\n { name: \"substFormat\", type: \"USHORT\", value: subtable.substFormat },\n { name: \"coverage\", type: \"TABLE\", value: new table_default.Coverage(subtable.coverage) },\n { name: \"classDef\", type: \"TABLE\", value: new table_default.ClassDef(subtable.classDef) }\n ].concat(table_default.tableList(\"classSeqRuleSet\", subtable.classSets, function(classSeqRuleSet) {\n if (!classSeqRuleSet) {\n return new table_default.Table(\"NULL\", null);\n }\n return new table_default.Table(\"classSeqRuleSetTable\", table_default.tableList(\"classSeqRule\", classSeqRuleSet, function(classSeqRule) {\n let tableData = table_default.ushortList(\"classes\", classSeqRule.classes, classSeqRule.classes.length + 1).concat(table_default.ushortList(\"seqLookupCount\", [], classSeqRule.lookupRecords.length));\n for (let i = 0; i < classSeqRule.lookupRecords.length; i++) {\n const record = classSeqRule.lookupRecords[i];\n tableData = tableData.concat({ name: \"sequenceIndex\" + i, type: \"USHORT\", value: record.sequenceIndex }).concat({ name: \"lookupListIndex\" + i, type: \"USHORT\", value: record.lookupListIndex });\n }\n return new table_default.Table(\"classSeqRuleTable\", tableData);\n }));\n })));\n } else if (subtable.substFormat === 3) {\n let tableData = [\n { name: \"substFormat\", type: \"USHORT\", value: subtable.substFormat }\n ];\n tableData.push({ name: \"inputGlyphCount\", type: \"USHORT\", value: subtable.coverages.length });\n tableData.push({ name: \"substitutionCount\", type: \"USHORT\", value: subtable.lookupRecords.length });\n for (let i = 0; i < subtable.coverages.length; i++) {\n const coverage = subtable.coverages[i];\n tableData.push({ name: \"inputCoverage\" + i, type: \"TABLE\", value: new table_default.Coverage(coverage) });\n }\n for (let i = 0; i < subtable.lookupRecords.length; i++) {\n const record = subtable.lookupRecords[i];\n tableData = tableData.concat({ name: \"sequenceIndex\" + i, type: \"USHORT\", value: record.sequenceIndex }).concat({ name: \"lookupListIndex\" + i, type: \"USHORT\", value: record.lookupListIndex });\n }\n let returnTable = new table_default.Table(\"contextualSubstitutionTable\", tableData);\n return returnTable;\n }\n check_default.assert(false, \"lookup type 5 format must be 1, 2 or 3.\");\n};\nsubtableMakers[6] = function makeLookup6(subtable) {\n if (subtable.substFormat === 1) {\n let returnTable = new table_default.Table(\"chainContextTable\", [\n { name: \"substFormat\", type: \"USHORT\", value: subtable.substFormat },\n { name: \"coverage\", type: \"TABLE\", value: new table_default.Coverage(subtable.coverage) }\n ].concat(table_default.tableList(\"chainRuleSet\", subtable.chainRuleSets, function(chainRuleSet) {\n return new table_default.Table(\"chainRuleSetTable\", table_default.tableList(\"chainRule\", chainRuleSet, function(chainRule) {\n let tableData = table_default.ushortList(\"backtrackGlyph\", chainRule.backtrack, chainRule.backtrack.length).concat(table_default.ushortList(\"inputGlyph\", chainRule.input, chainRule.input.length + 1)).concat(table_default.ushortList(\"lookaheadGlyph\", chainRule.lookahead, chainRule.lookahead.length)).concat(table_default.ushortList(\"substitution\", [], chainRule.lookupRecords.length));\n for (let i = 0; i < chainRule.lookupRecords.length; i++) {\n const record = chainRule.lookupRecords[i];\n tableData = tableData.concat({ name: \"sequenceIndex\" + i, type: \"USHORT\", value: record.sequenceIndex }).concat({ name: \"lookupListIndex\" + i, type: \"USHORT\", value: record.lookupListIndex });\n }\n return new table_default.Table(\"chainRuleTable\", tableData);\n }));\n })));\n return returnTable;\n } else if (subtable.substFormat === 2) {\n check_default.assert(false, \"lookup type 6 format 2 is not yet supported.\");\n } else if (subtable.substFormat === 3) {\n let tableData = [\n { name: \"substFormat\", type: \"USHORT\", value: subtable.substFormat }\n ];\n tableData.push({ name: \"backtrackGlyphCount\", type: \"USHORT\", value: subtable.backtrackCoverage.length });\n for (let i = 0; i < subtable.backtrackCoverage.length; i++) {\n const coverage = subtable.backtrackCoverage[i];\n tableData.push({ name: \"backtrackCoverage\" + i, type: \"TABLE\", value: new table_default.Coverage(coverage) });\n }\n tableData.push({ name: \"inputGlyphCount\", type: \"USHORT\", value: subtable.inputCoverage.length });\n for (let i = 0; i < subtable.inputCoverage.length; i++) {\n const coverage = subtable.inputCoverage[i];\n tableData.push({ name: \"inputCoverage\" + i, type: \"TABLE\", value: new table_default.Coverage(coverage) });\n }\n tableData.push({ name: \"lookaheadGlyphCount\", type: \"USHORT\", value: subtable.lookaheadCoverage.length });\n for (let i = 0; i < subtable.lookaheadCoverage.length; i++) {\n const coverage = subtable.lookaheadCoverage[i];\n tableData.push({ name: \"lookaheadCoverage\" + i, type: \"TABLE\", value: new table_default.Coverage(coverage) });\n }\n tableData.push({ name: \"substitutionCount\", type: \"USHORT\", value: subtable.lookupRecords.length });\n for (let i = 0; i < subtable.lookupRecords.length; i++) {\n const record = subtable.lookupRecords[i];\n tableData = tableData.concat({ name: \"sequenceIndex\" + i, type: \"USHORT\", value: record.sequenceIndex }).concat({ name: \"lookupListIndex\" + i, type: \"USHORT\", value: record.lookupListIndex });\n }\n let returnTable = new table_default.Table(\"chainContextTable\", tableData);\n return returnTable;\n }\n check_default.assert(false, \"lookup type 6 format must be 1, 2 or 3.\");\n};\nfunction makeGsubTable(gsub) {\n return new table_default.Table(\"GSUB\", [\n { name: \"version\", type: \"ULONG\", value: 65536 },\n { name: \"scripts\", type: \"TABLE\", value: new table_default.ScriptList(gsub.scripts) },\n { name: \"features\", type: \"TABLE\", value: new table_default.FeatureList(gsub.features) },\n { name: \"lookups\", type: \"TABLE\", value: new table_default.LookupList(gsub.lookups, subtableMakers) }\n ]);\n}\nvar gsub_default = { parse: parseGsubTable, make: makeGsubTable };\n\n// src/tables/meta.mjs\nfunction parseMetaTable(data, start) {\n const p = new parse_default.Parser(data, start);\n const tableVersion = p.parseULong();\n check_default.argument(tableVersion === 1, \"Unsupported META table version.\");\n p.parseULong();\n p.parseULong();\n const numDataMaps = p.parseULong();\n const tags = {};\n for (let i = 0; i < numDataMaps; i++) {\n const tag = p.parseTag();\n const dataOffset = p.parseULong();\n const dataLength = p.parseULong();\n if (tag === \"appl\" || tag === \"bild\")\n continue;\n const text = decode.UTF8(data, start + dataOffset, dataLength);\n tags[tag] = text;\n }\n return tags;\n}\nfunction makeMetaTable(tags) {\n const numTags = Object.keys(tags).length;\n let stringPool = \"\";\n const stringPoolOffset = 16 + numTags * 12;\n const result = new table_default.Table(\"meta\", [\n { name: \"version\", type: \"ULONG\", value: 1 },\n { name: \"flags\", type: \"ULONG\", value: 0 },\n { name: \"offset\", type: \"ULONG\", value: stringPoolOffset },\n { name: \"numTags\", type: \"ULONG\", value: numTags }\n ]);\n for (let tag in tags) {\n const pos = stringPool.length;\n stringPool += tags[tag];\n result.fields.push({ name: \"tag \" + tag, type: \"TAG\", value: tag });\n result.fields.push({ name: \"offset \" + tag, type: \"ULONG\", value: stringPoolOffset + pos });\n result.fields.push({ name: \"length \" + tag, type: \"ULONG\", value: tags[tag].length });\n }\n result.fields.push({ name: \"stringPool\", type: \"CHARARRAY\", value: stringPool });\n return result;\n}\nvar meta_default = { parse: parseMetaTable, make: makeMetaTable };\n\n// src/tables/colr.mjs\nfunction parseColrTable(data, start) {\n const p = new Parser(data, start);\n const version = p.parseUShort();\n if (version !== 0) {\n console.warn(\"Only COLRv0 is currently fully supported. A subset of color glyphs might be available in this font if provided in the v0 format.\");\n }\n const numBaseGlyphRecords = p.parseUShort();\n const baseGlyphRecordsOffset = p.parseOffset32();\n const layerRecordsOffset = p.parseOffset32();\n const numLayerRecords = p.parseUShort();\n p.relativeOffset = baseGlyphRecordsOffset;\n const baseGlyphRecords = p.parseRecordList(numBaseGlyphRecords, {\n glyphID: Parser.uShort,\n firstLayerIndex: Parser.uShort,\n numLayers: Parser.uShort\n });\n p.relativeOffset = layerRecordsOffset;\n const layerRecords = p.parseRecordList(numLayerRecords, {\n glyphID: Parser.uShort,\n paletteIndex: Parser.uShort\n });\n return {\n version,\n baseGlyphRecords,\n layerRecords\n };\n}\nfunction makeColrTable({ version = 0, baseGlyphRecords = [], layerRecords = [] }) {\n check_default.argument(version === 0, \"Only COLRv0 supported.\");\n const baseGlyphRecordsOffset = 14;\n const layerRecordsOffset = baseGlyphRecordsOffset + baseGlyphRecords.length * 6;\n return new table_default.Table(\"COLR\", [\n { name: \"version\", type: \"USHORT\", value: version },\n { name: \"numBaseGlyphRecords\", type: \"USHORT\", value: baseGlyphRecords.length },\n { name: \"baseGlyphRecordsOffset\", type: \"ULONG\", value: baseGlyphRecordsOffset },\n { name: \"layerRecordsOffset\", type: \"ULONG\", value: layerRecordsOffset },\n { name: \"numLayerRecords\", type: \"USHORT\", value: layerRecords.length },\n ...baseGlyphRecords.map((glyph, i) => [\n { name: \"glyphID_\" + i, type: \"USHORT\", value: glyph.glyphID },\n { name: \"firstLayerIndex_\" + i, type: \"USHORT\", value: glyph.firstLayerIndex },\n { name: \"numLayers_\" + i, type: \"USHORT\", value: glyph.numLayers }\n ]).flat(),\n ...layerRecords.map((layer, i) => [\n { name: \"LayerGlyphID_\" + i, type: \"USHORT\", value: layer.glyphID },\n { name: \"paletteIndex_\" + i, type: \"USHORT\", value: layer.paletteIndex }\n ]).flat()\n ]);\n}\nvar colr_default = { parse: parseColrTable, make: makeColrTable };\n\n// src/tables/fvar.mjs\nfunction makeFvarAxis(n, axis) {\n return [\n { name: \"tag_\" + n, type: \"TAG\", value: axis.tag },\n { name: \"minValue_\" + n, type: \"FIXED\", value: axis.minValue << 16 },\n { name: \"defaultValue_\" + n, type: \"FIXED\", value: axis.defaultValue << 16 },\n { name: \"maxValue_\" + n, type: \"FIXED\", value: axis.maxValue << 16 },\n { name: \"flags_\" + n, type: \"USHORT\", value: 0 },\n { name: \"nameID_\" + n, type: \"USHORT\", value: axis.axisNameID }\n ];\n}\nfunction parseFvarAxis(data, start, names) {\n const axis = {};\n const p = new parse_default.Parser(data, start);\n axis.tag = p.parseTag();\n axis.minValue = p.parseFixed();\n axis.defaultValue = p.parseFixed();\n axis.maxValue = p.parseFixed();\n p.skip(\"uShort\", 1);\n const axisNameID = p.parseUShort();\n axis.axisNameID = axisNameID;\n axis.name = getNameByID(names, axisNameID);\n return axis;\n}\nfunction makeFvarInstance(n, inst, axes, optionalFields = {}) {\n const fields = [\n { name: \"nameID_\" + n, type: \"USHORT\", value: inst.subfamilyNameID },\n { name: \"flags_\" + n, type: \"USHORT\", value: 0 }\n ];\n for (let i = 0; i < axes.length; ++i) {\n const axisTag = axes[i].tag;\n fields.push({\n name: \"axis_\" + n + \" \" + axisTag,\n type: \"FIXED\",\n value: inst.coordinates[axisTag] << 16\n });\n }\n if (optionalFields && optionalFields.postScriptNameID) {\n fields.push({\n name: \"postScriptNameID_\",\n type: \"USHORT\",\n value: inst.postScriptNameID !== void 0 ? inst.postScriptNameID : 65535\n });\n }\n return fields;\n}\nfunction parseFvarInstance(data, start, axes, names, instanceSize) {\n const inst = {};\n const p = new parse_default.Parser(data, start);\n const subfamilyNameID = p.parseUShort();\n inst.subfamilyNameID = subfamilyNameID;\n inst.name = getNameByID(names, subfamilyNameID, [2, 17]);\n p.skip(\"uShort\", 1);\n inst.coordinates = {};\n for (let i = 0; i < axes.length; ++i) {\n inst.coordinates[axes[i].tag] = p.parseFixed();\n }\n if (p.relativeOffset === instanceSize) {\n inst.postScriptNameID = void 0;\n inst.postScriptName = void 0;\n return inst;\n }\n const postScriptNameID = p.parseUShort();\n inst.postScriptNameID = postScriptNameID == 65535 ? void 0 : postScriptNameID;\n inst.postScriptName = inst.postScriptNameID !== void 0 ? getNameByID(names, postScriptNameID, [6]) : \"\";\n return inst;\n}\nfunction makeFvarTable(fvar, names) {\n const result = new table_default.Table(\"fvar\", [\n { name: \"version\", type: \"ULONG\", value: 65536 },\n { name: \"offsetToData\", type: \"USHORT\", value: 0 },\n { name: \"countSizePairs\", type: \"USHORT\", value: 2 },\n { name: \"axisCount\", type: \"USHORT\", value: fvar.axes.length },\n { name: \"axisSize\", type: \"USHORT\", value: 20 },\n { name: \"instanceCount\", type: \"USHORT\", value: fvar.instances.length },\n { name: \"instanceSize\", type: \"USHORT\", value: 4 + fvar.axes.length * 4 }\n ]);\n result.offsetToData = result.sizeOf();\n for (let i = 0; i < fvar.axes.length; i++) {\n result.fields = result.fields.concat(makeFvarAxis(i, fvar.axes[i], names));\n }\n const optionalFields = {};\n for (let j = 0; j < fvar.instances.length; j++) {\n if (fvar.instances[j].postScriptNameID !== void 0) {\n result.instanceSize += 2;\n optionalFields.postScriptNameID = true;\n break;\n }\n }\n for (let j = 0; j < fvar.instances.length; j++) {\n result.fields = result.fields.concat(makeFvarInstance(\n j,\n fvar.instances[j],\n fvar.axes,\n optionalFields\n ));\n }\n return result;\n}\nfunction parseFvarTable(data, start, names) {\n const p = new parse_default.Parser(data, start);\n const tableVersion = p.parseULong();\n check_default.argument(tableVersion === 65536, \"Unsupported fvar table version.\");\n const offsetToData = p.parseOffset16();\n p.skip(\"uShort\", 1);\n const axisCount = p.parseUShort();\n const axisSize = p.parseUShort();\n const instanceCount = p.parseUShort();\n const instanceSize = p.parseUShort();\n const axes = [];\n for (let i = 0; i < axisCount; i++) {\n axes.push(parseFvarAxis(data, start + offsetToData + i * axisSize, names));\n }\n const instances = [];\n const instanceStart = start + offsetToData + axisCount * axisSize;\n for (let j = 0; j < instanceCount; j++) {\n instances.push(parseFvarInstance(data, instanceStart + j * instanceSize, axes, names, instanceSize));\n }\n return { axes, instances };\n}\nvar fvar_default = { make: makeFvarTable, parse: parseFvarTable };\n\n// src/tables/stat.mjs\nvar axisRecordStruct = {\n tag: Parser.tag,\n nameID: Parser.uShort,\n ordering: Parser.uShort\n};\nvar axisValueParsers = new Array(5);\naxisValueParsers[1] = function axisValueParser1() {\n return {\n axisIndex: this.parseUShort(),\n flags: this.parseUShort(),\n valueNameID: this.parseUShort(),\n value: this.parseFixed()\n };\n};\naxisValueParsers[2] = function axisValueParser2() {\n return {\n axisIndex: this.parseUShort(),\n flags: this.parseUShort(),\n valueNameID: this.parseUShort(),\n nominalValue: this.parseFixed(),\n rangeMinValue: this.parseFixed(),\n rangeMaxValue: this.parseFixed()\n };\n};\naxisValueParsers[3] = function axisValueParser3() {\n return {\n axisIndex: this.parseUShort(),\n flags: this.parseUShort(),\n valueNameID: this.parseUShort(),\n value: this.parseFixed(),\n linkedValue: this.parseFixed()\n };\n};\naxisValueParsers[4] = function axisValueParser4() {\n const axisCount = this.parseUShort();\n return {\n flags: this.parseUShort(),\n valueNameID: this.parseUShort(),\n axisValues: this.parseList(axisCount, function() {\n return {\n axisIndex: this.parseUShort(),\n value: this.parseFixed()\n };\n })\n };\n};\nfunction parseSTATAxisValue() {\n const valueTableFormat = this.parseUShort();\n const axisValueParser = axisValueParsers[valueTableFormat];\n const formatStub = {\n format: valueTableFormat\n };\n if (axisValueParser === void 0) {\n console.warn(`Unknown axis value table format ${valueTableFormat}`);\n return formatStub;\n }\n return Object.assign(formatStub, this.parseStruct(axisValueParser.bind(this)));\n}\nfunction parseSTATTable(data, start, fvar) {\n if (!start) {\n start = 0;\n }\n const p = new parse_default.Parser(data, start);\n const tableVersionMajor = p.parseUShort();\n const tableVersionMinor = p.parseUShort();\n if (tableVersionMajor !== 1) {\n console.warn(`Unsupported STAT table version ${tableVersionMajor}.${tableVersionMinor}`);\n }\n const version = [\n tableVersionMajor,\n tableVersionMinor\n ];\n const designAxisSize = p.parseUShort();\n const designAxisCount = p.parseUShort();\n const designAxesOffset = p.parseOffset32();\n const axisValueCount = p.parseUShort();\n const offsetToAxisValueOffsets = p.parseOffset32();\n const elidedFallbackNameID = tableVersionMajor > 1 || tableVersionMinor > 0 ? p.parseUShort() : void 0;\n if (fvar !== void 0) {\n check_default.argument(designAxisCount >= fvar.axes.length, \"STAT axis count must be greater than or equal to fvar axis count\");\n }\n if (axisValueCount > 0) {\n check_default.argument(designAxisCount >= 0, \"STAT axis count must be greater than 0 if STAT axis value count is greater than 0\");\n }\n const axes = [];\n for (let i = 0; i < designAxisCount; i++) {\n p.offset = start + designAxesOffset;\n p.relativeOffset = i * designAxisSize;\n axes.push(p.parseStruct(axisRecordStruct));\n }\n p.offset = start;\n p.relativeOffset = offsetToAxisValueOffsets;\n const valueOffsets = p.parseUShortList(axisValueCount);\n const values = [];\n for (let i = 0; i < axisValueCount; i++) {\n p.offset = start + offsetToAxisValueOffsets;\n p.relativeOffset = valueOffsets[i];\n values.push(parseSTATAxisValue.apply(p));\n }\n return {\n version,\n axes,\n values,\n elidedFallbackNameID\n };\n}\nvar axisValueMakers = new Array(5);\naxisValueMakers[1] = function axisValueMaker1(n, table) {\n return [\n { name: `format${n}`, type: \"USHORT\", value: 1 },\n { name: `axisIndex${n}`, type: \"USHORT\", value: table.axisIndex },\n { name: `flags${n}`, type: \"USHORT\", value: table.flags },\n { name: `valueNameID${n}`, type: \"USHORT\", value: table.valueNameID },\n { name: `value${n}`, type: \"FLOAT\", value: table.value }\n ];\n};\naxisValueMakers[2] = function axisValueMaker2(n, table) {\n return [\n { name: `format${n}`, type: \"USHORT\", value: 2 },\n { name: `axisIndex${n}`, type: \"USHORT\", value: table.axisIndex },\n { name: `flags${n}`, type: \"USHORT\", value: table.flags },\n { name: `valueNameID${n}`, type: \"USHORT\", value: table.valueNameID },\n { name: `nominalValue${n}`, type: \"FLOAT\", value: table.nominalValue },\n { name: `rangeMinValue${n}`, type: \"FLOAT\", value: table.rangeMinValue },\n { name: `rangeMaxValue${n}`, type: \"FLOAT\", value: table.rangeMaxValue }\n ];\n};\naxisValueMakers[3] = function axisValueMaker3(n, table) {\n return [\n { name: `format${n}`, type: \"USHORT\", value: 3 },\n { name: `axisIndex${n}`, type: \"USHORT\", value: table.axisIndex },\n { name: `flags${n}`, type: \"USHORT\", value: table.flags },\n { name: `valueNameID${n}`, type: \"USHORT\", value: table.valueNameID },\n { name: `value${n}`, type: \"FLOAT\", value: table.value },\n { name: `linkedValue${n}`, type: \"FLOAT\", value: table.linkedValue }\n ];\n};\naxisValueMakers[4] = function axisValueMaker4(n, table) {\n let returnFields = [\n { name: `format${n}`, type: \"USHORT\", value: 4 },\n { name: `axisCount${n}`, type: \"USHORT\", value: table.axisValues.length },\n { name: `flags${n}`, type: \"USHORT\", value: table.flags },\n { name: `valueNameID${n}`, type: \"USHORT\", value: table.valueNameID }\n ];\n for (let i = 0; i < table.axisValues.length; i++) {\n returnFields = returnFields.concat([\n { name: `format${n}axisIndex${i}`, type: \"USHORT\", value: table.axisValues[i].axisIndex },\n { name: `format${n}value${i}`, type: \"FLOAT\", value: table.axisValues[i].value }\n ]);\n }\n return returnFields;\n};\nfunction makeSTATAxisRecord(n, axis) {\n return new table_default.Record(\"axisRecord_\" + n, [\n { name: \"axisTag_\" + n, type: \"TAG\", value: axis.tag },\n { name: \"axisNameID_\" + n, type: \"USHORT\", value: axis.nameID },\n { name: \"axisOrdering_\" + n, type: \"USHORT\", value: axis.ordering }\n ]);\n}\nfunction makeSTATValueTable(n, tableData) {\n const valueTableFormat = tableData.format;\n const axisValueMaker = axisValueMakers[valueTableFormat];\n check_default.argument(axisValueMaker !== void 0, `Unknown axis value table format ${valueTableFormat}`);\n const fields = axisValueMaker(n, tableData);\n return new table_default.Table(\"axisValueTable_\" + n, fields);\n}\nfunction makeSTATTable(STAT) {\n const result = new table_default.Table(\"STAT\", [\n { name: \"majorVersion\", type: \"USHORT\", value: 1 },\n { name: \"minorVersion\", type: \"USHORT\", value: 2 },\n { name: \"designAxisSize\", type: \"USHORT\", value: 8 },\n { name: \"designAxisCount\", type: \"USHORT\", value: STAT.axes.length },\n { name: \"designAxesOffset\", type: \"ULONG\", value: 0 },\n { name: \"axisValueCount\", type: \"USHORT\", value: STAT.values.length },\n { name: \"offsetToAxisValueOffsets\", type: \"ULONG\", value: 0 },\n { name: \"elidedFallbackNameID\", type: \"USHORT\", value: STAT.elidedFallbackNameID }\n ]);\n result.designAxesOffset = result.offsetToAxisValueOffsets = result.sizeOf();\n for (let i = 0; i < STAT.axes.length; i++) {\n const axisRecord = makeSTATAxisRecord(i, STAT.axes[i]);\n result.offsetToAxisValueOffsets += axisRecord.sizeOf();\n result.fields = result.fields.concat(axisRecord.fields);\n }\n const axisValueOffsets = [];\n let axisValueTables = [];\n let axisValueTableOffset = STAT.values.length * 2;\n for (let j = 0; j < STAT.values.length; j++) {\n const axisValueTable = makeSTATValueTable(j, STAT.values[j]);\n axisValueOffsets.push({\n name: \"offset_\" + j,\n type: \"USHORT\",\n value: axisValueTableOffset\n });\n axisValueTableOffset += axisValueTable.sizeOf();\n axisValueTables = axisValueTables.concat(axisValueTable.fields);\n }\n result.fields = result.fields.concat(axisValueOffsets);\n result.fields = result.fields.concat(axisValueTables);\n return result;\n}\nvar stat_default = { make: makeSTATTable, parse: parseSTATTable };\n\n// src/tables/avar.mjs\nfunction makeAvarAxisValueMap(n, axisValueMap) {\n return new table_default.Record(\"axisValueMap_\" + n, [\n { name: \"fromCoordinate_\" + n, type: \"F2DOT14\", value: axisValueMap.fromCoordinate },\n { name: \"toCoordinate_\" + n, type: \"F2DOT14\", value: axisValueMap.toCoordinate }\n ]);\n}\nfunction makeAvarSegmentMap(n, axis) {\n const returnTable = new table_default.Record(\"segmentMap_\" + n, [\n { name: \"positionMapCount_\" + n, type: \"USHORT\", value: axis.axisValueMaps.length }\n ]);\n let axisValueMaps = [];\n for (let i = 0; i < axis.axisValueMaps.length; i++) {\n const valueMap = makeAvarAxisValueMap(`${n}_${i}`, axis.axisValueMaps[i]);\n axisValueMaps = axisValueMaps.concat(valueMap.fields);\n }\n returnTable.fields = returnTable.fields.concat(axisValueMaps);\n return returnTable;\n}\nfunction makeAvarTable(avar, fvar) {\n check_default.argument(avar.axisSegmentMaps.length === fvar.axes.length, \"avar axis count must correspond to fvar axis count\");\n const result = new table_default.Table(\"avar\", [\n { name: \"majorVersion\", type: \"USHORT\", value: 1 },\n { name: \"minorVersion\", type: \"USHORT\", value: 0 },\n { name: \"reserved\", type: \"USHORT\", value: 0 },\n { name: \"axisCount\", type: \"USHORT\", value: avar.axisSegmentMaps.length }\n ]);\n for (let i = 0; i < avar.axisSegmentMaps.length; i++) {\n const axisRecord = makeAvarSegmentMap(i, avar.axisSegmentMaps[i]);\n result.fields = result.fields.concat(axisRecord.fields);\n }\n return result;\n}\nfunction parseAvarTable(data, start, fvar) {\n if (!start) {\n start = 0;\n }\n const p = new Parser(data, start);\n const tableVersionMajor = p.parseUShort();\n const tableVersionMinor = p.parseUShort();\n if (tableVersionMajor !== 1) {\n console.warn(`Unsupported avar table version ${tableVersionMajor}.${tableVersionMinor}`);\n }\n p.skip(\"uShort\", 1);\n const axisCount = p.parseUShort();\n check_default.argument(axisCount === fvar.axes.length, \"avar axis count must correspond to fvar axis count\");\n const axisSegmentMaps = [];\n for (let i = 0; i < axisCount; i++) {\n const axisValueMaps = [];\n const positionMapCount = p.parseUShort();\n for (let j = 0; j < positionMapCount; j++) {\n const fromCoordinate = p.parseF2Dot14();\n const toCoordinate = p.parseF2Dot14();\n axisValueMaps.push({\n fromCoordinate,\n toCoordinate\n });\n }\n axisSegmentMaps.push({\n axisValueMaps\n });\n }\n return {\n version: [tableVersionMajor, tableVersionMinor],\n axisSegmentMaps\n };\n}\nvar avar_default = { make: makeAvarTable, parse: parseAvarTable };\n\n// src/tables/cvar.mjs\nfunction parseCvarTable(data, start, fvar, cvt) {\n const p = new parse_default.Parser(data, start);\n const cvtVariations = p.parseTupleVariationStore(\n p.relativeOffset,\n fvar.axes.length,\n \"cvar\",\n cvt\n );\n const tableVersionMajor = p.parseUShort();\n const tableVersionMinor = p.parseUShort();\n if (tableVersionMajor !== 1) {\n console.warn(`Unsupported cvar table version ${tableVersionMajor}.${tableVersionMinor}`);\n }\n return {\n version: [tableVersionMajor, tableVersionMinor],\n ...cvtVariations\n };\n}\nfunction makeCvarTable() {\n console.warn(\"Writing of cvar tables is not yet supported.\");\n}\nvar cvar_default = { make: makeCvarTable, parse: parseCvarTable };\n\n// src/tables/gvar.mjs\nfunction parseGvarTable(data, start, fvar, glyphs) {\n const p = new parse_default.Parser(data, start);\n const tableVersionMajor = p.parseUShort();\n const tableVersionMinor = p.parseUShort();\n if (tableVersionMajor !== 1) {\n console.warn(`Unsupported gvar table version ${tableVersionMajor}.${tableVersionMinor}`);\n }\n const axisCount = p.parseUShort();\n if (axisCount !== fvar.axes.length) {\n console.warn(`axisCount ${axisCount} in gvar table does not match the number of axes ${fvar.axes.length} in the fvar table!`);\n }\n const sharedTupleCount = p.parseUShort();\n const sharedTuples = p.parsePointer32(function() {\n return this.parseTupleRecords(sharedTupleCount, axisCount);\n });\n const glyphVariations = p.parseTupleVariationStoreList(axisCount, \"gvar\", glyphs);\n return {\n version: [tableVersionMajor, tableVersionMinor],\n sharedTuples,\n glyphVariations\n };\n}\nfunction makeGvarTable() {\n console.warn(\"Writing of gvar tables is not yet supported.\");\n}\nvar gvar_default = { make: makeGvarTable, parse: parseGvarTable };\n\n// src/tables/gasp.mjs\nfunction parseGaspTable(data, start) {\n const gasp = {};\n const p = new parse_default.Parser(data, start);\n gasp.version = p.parseUShort();\n check_default.argument(gasp.version <= 1, \"Unsupported gasp table version.\");\n gasp.numRanges = p.parseUShort();\n gasp.gaspRanges = [];\n for (let i = 0; i < gasp.numRanges; i++) {\n gasp.gaspRanges[i] = {\n rangeMaxPPEM: p.parseUShort(),\n rangeGaspBehavior: p.parseUShort()\n };\n }\n return gasp;\n}\nfunction makeGaspTable(gasp) {\n const result = new table_default.Table(\"gasp\", [\n { name: \"version\", type: \"USHORT\", value: 1 },\n { name: \"numRanges\", type: \"USHORT\", value: gasp.numRanges }\n ]);\n for (let i in gasp.gaspRanges) {\n result.fields.push({ name: \"rangeMaxPPEM\", type: \"USHORT\", value: gasp.gaspRanges[i].rangeMaxPPEM });\n result.fields.push({ name: \"rangeGaspBehavior\", type: \"USHORT\", value: gasp.gaspRanges[i].rangeGaspBehavior });\n }\n return result;\n}\nvar gasp_default = { parse: parseGaspTable, make: makeGaspTable };\n\n// src/tables/svg.mjs\nfunction parseSvgTable(data, offset) {\n const svgTable = /* @__PURE__ */ new Map();\n const buf = data.buffer;\n const p = new Parser(data, offset);\n const version = p.parseUShort();\n if (version !== 0) return svgTable;\n p.relativeOffset = p.parseOffset32();\n const svgDocumentListOffset = data.byteOffset + offset + p.relativeOffset;\n const numEntries = p.parseUShort();\n const svgDocMap = /* @__PURE__ */ new Map();\n for (let i = 0; i < numEntries; i++) {\n const startGlyphID = p.parseUShort();\n const endGlyphID = p.parseUShort();\n const svgDocOffset = svgDocumentListOffset + p.parseOffset32();\n const svgDocLength = p.parseULong();\n let svgDoc = svgDocMap.get(svgDocOffset);\n if (svgDoc === void 0) {\n svgDoc = new Uint8Array(buf, svgDocOffset, svgDocLength);\n svgDocMap.set(svgDocOffset, svgDoc);\n }\n for (let i2 = startGlyphID; i2 <= endGlyphID; i2++) {\n svgTable.set(i2, svgDoc);\n }\n }\n return svgTable;\n}\nfunction makeSvgTable(svgTable) {\n const glyphIds = Array.from(svgTable.keys()).sort();\n const documentRecords = [];\n const documentBuffers = [];\n const documentOffsets = /* @__PURE__ */ new Map();\n let nextSvgDocOffset = 0;\n let record = { endGlyphID: null };\n for (let i = 0, l = glyphIds.length; i < l; i++) {\n const glyphId = glyphIds[i];\n const svgDoc = svgTable.get(glyphId);\n let svgDocOffset = documentOffsets.get(svgDoc);\n if (svgDocOffset === void 0) {\n svgDocOffset = nextSvgDocOffset;\n documentBuffers.push(svgDoc);\n documentOffsets.set(svgDoc, svgDocOffset);\n nextSvgDocOffset += svgDoc.byteLength;\n }\n if (glyphId - 1 === record.endGlyphID && svgDocOffset === record.svgDocOffset) {\n record.endGlyphID = glyphId;\n } else {\n record = {\n startGlyphID: glyphId,\n endGlyphID: glyphId,\n svgDocOffset,\n svgDocLength: svgDoc.byteLength\n };\n documentRecords.push(record);\n }\n }\n const numEntries = documentRecords.length;\n const numDocuments = documentBuffers.length;\n const documentsOffset = 2 + numEntries * (2 + 2 + 4 + 4);\n const fields = new Array(3 + 1 + numEntries * 4 + numDocuments);\n let fieldIndex = 0;\n fields[fieldIndex++] = { name: \"version\", type: \"USHORT\", value: 0 };\n fields[fieldIndex++] = { name: \"svgDocumentListOffset\", type: \"ULONG\", value: 2 + 4 + 4 };\n fields[fieldIndex++] = { name: \"reserved\", type: \"ULONG\", value: 0 };\n fields[fieldIndex++] = { name: \"numEntries\", type: \"USHORT\", value: numEntries };\n for (let i = 0; i < numEntries; i++) {\n const namePrefix = \"documentRecord_\" + i;\n const { startGlyphID, endGlyphID, svgDocOffset, svgDocLength } = documentRecords[i];\n fields[fieldIndex++] = { name: namePrefix + \"_startGlyphID\", type: \"USHORT\", value: startGlyphID };\n fields[fieldIndex++] = { name: namePrefix + \"_endGlyphID\", type: \"USHORT\", value: endGlyphID };\n fields[fieldIndex++] = { name: namePrefix + \"_svgDocOffset\", type: \"ULONG\", value: documentsOffset + svgDocOffset };\n fields[fieldIndex++] = { name: namePrefix + \"_svgDocLength\", type: \"ULONG\", value: svgDocLength };\n }\n for (let i = 0; i < numDocuments; i++) {\n fields[fieldIndex++] = { name: \"svgDoc_\" + i, type: \"LITERAL\", value: documentBuffers[i] };\n }\n return new table_default.Table(\"SVG \", fields);\n}\nvar svg_default = {\n make: makeSvgTable,\n parse: parseSvgTable\n};\n\n// src/tables/sfnt.mjs\nfunction log2(v) {\n return Math.log(v) / Math.log(2) | 0;\n}\nfunction computeCheckSum(bytes) {\n while (bytes.length % 4 !== 0) {\n bytes.push(0);\n }\n let sum = 0;\n for (let i = 0; i < bytes.length; i += 4) {\n sum += (bytes[i] << 24) + (bytes[i + 1] << 16) + (bytes[i + 2] << 8) + bytes[i + 3];\n }\n sum %= Math.pow(2, 32);\n return sum;\n}\nfunction makeTableRecord(tag, checkSum, offset, length) {\n return new table_default.Record(\"Table Record\", [\n { name: \"tag\", type: \"TAG\", value: tag !== void 0 ? tag : \"\" },\n { name: \"checkSum\", type: \"ULONG\", value: checkSum !== void 0 ? checkSum : 0 },\n { name: \"offset\", type: \"ULONG\", value: offset !== void 0 ? offset : 0 },\n { name: \"length\", type: \"ULONG\", value: length !== void 0 ? length : 0 }\n ]);\n}\nfunction makeSfntTable(tables) {\n const sfnt = new table_default.Table(\"sfnt\", [\n { name: \"version\", type: \"TAG\", value: \"OTTO\" },\n { name: \"numTables\", type: \"USHORT\", value: 0 },\n { name: \"searchRange\", type: \"USHORT\", value: 0 },\n { name: \"entrySelector\", type: \"USHORT\", value: 0 },\n { name: \"rangeShift\", type: \"USHORT\", value: 0 }\n ]);\n sfnt.tables = tables;\n sfnt.numTables = tables.length;\n const highestPowerOf2 = Math.pow(2, log2(sfnt.numTables));\n sfnt.searchRange = 16 * highestPowerOf2;\n sfnt.entrySelector = log2(highestPowerOf2);\n sfnt.rangeShift = sfnt.numTables * 16 - sfnt.searchRange;\n const recordFields = [];\n const tableFields = [];\n let offset = sfnt.sizeOf() + makeTableRecord().sizeOf() * sfnt.numTables;\n while (offset % 4 !== 0) {\n offset += 1;\n tableFields.push({ name: \"padding\", type: \"BYTE\", value: 0 });\n }\n for (let i = 0; i < tables.length; i += 1) {\n const t = tables[i];\n check_default.argument(t.tableName.length === 4, \"Table name\" + t.tableName + \" is invalid.\");\n const tableLength = t.sizeOf();\n const tableRecord = makeTableRecord(t.tableName, computeCheckSum(t.encode()), offset, tableLength);\n recordFields.push({ name: tableRecord.tag + \" Table Record\", type: \"RECORD\", value: tableRecord });\n tableFields.push({ name: t.tableName + \" table\", type: \"RECORD\", value: t });\n offset += tableLength;\n check_default.argument(!isNaN(offset), \"Something went wrong calculating the offset.\");\n while (offset % 4 !== 0) {\n offset += 1;\n tableFields.push({ name: \"padding\", type: \"BYTE\", value: 0 });\n }\n }\n recordFields.sort(function(r1, r2) {\n if (r1.value.tag > r2.value.tag) {\n return 1;\n } else {\n return -1;\n }\n });\n sfnt.fields = sfnt.fields.concat(recordFields);\n sfnt.fields = sfnt.fields.concat(tableFields);\n return sfnt;\n}\nfunction metricsForChar(font, chars, notFoundMetrics) {\n for (let i = 0; i < chars.length; i += 1) {\n const glyphIndex = font.charToGlyphIndex(chars[i]);\n if (glyphIndex > 0) {\n const glyph = font.glyphs.get(glyphIndex);\n return glyph.getMetrics();\n }\n }\n return notFoundMetrics;\n}\nfunction average(vs) {\n let sum = 0;\n for (let i = 0; i < vs.length; i += 1) {\n sum += vs[i];\n }\n return sum / vs.length;\n}\nfunction fontToSfntTable(font) {\n const xMins = [];\n const yMins = [];\n const xMaxs = [];\n const yMaxs = [];\n const advanceWidths = [];\n const leftSideBearings = [];\n const rightSideBearings = [];\n let firstCharIndex;\n let lastCharIndex = 0;\n let ulUnicodeRange1 = 0;\n let ulUnicodeRange2 = 0;\n let ulUnicodeRange3 = 0;\n let ulUnicodeRange4 = 0;\n for (let i = 0; i < font.glyphs.length; i += 1) {\n const glyph = font.glyphs.get(i);\n const unicode = glyph.unicode | 0;\n if (isNaN(glyph.advanceWidth)) {\n throw new Error(\"Glyph \" + glyph.name + \" (\" + i + \"): advanceWidth is not a number.\");\n }\n if (firstCharIndex > unicode || firstCharIndex === void 0) {\n if (unicode > 0) {\n firstCharIndex = unicode;\n }\n }\n if (lastCharIndex < unicode) {\n lastCharIndex = unicode;\n }\n const position = os2_default.getUnicodeRange(unicode);\n if (position < 32) {\n ulUnicodeRange1 |= 1 << position;\n } else if (position < 64) {\n ulUnicodeRange2 |= 1 << position - 32;\n } else if (position < 96) {\n ulUnicodeRange3 |= 1 << position - 64;\n } else if (position < 123) {\n ulUnicodeRange4 |= 1 << position - 96;\n } else {\n throw new Error(\"Unicode ranges bits > 123 are reserved for internal usage\");\n }\n if (glyph.name === \".notdef\") continue;\n const metrics = glyph.getMetrics();\n xMins.push(metrics.xMin);\n yMins.push(metrics.yMin);\n xMaxs.push(metrics.xMax);\n yMaxs.push(metrics.yMax);\n leftSideBearings.push(metrics.leftSideBearing);\n rightSideBearings.push(metrics.rightSideBearing);\n advanceWidths.push(glyph.advanceWidth);\n }\n const globals = {\n xMin: Math.min.apply(null, xMins),\n yMin: Math.min.apply(null, yMins),\n xMax: Math.max.apply(null, xMaxs),\n yMax: Math.max.apply(null, yMaxs),\n advanceWidthMax: Math.max.apply(null, advanceWidths),\n advanceWidthAvg: average(advanceWidths),\n minLeftSideBearing: Math.min.apply(null, leftSideBearings),\n maxLeftSideBearing: Math.max.apply(null, leftSideBearings),\n minRightSideBearing: Math.min.apply(null, rightSideBearings)\n };\n globals.ascender = font.ascender;\n globals.descender = font.descender;\n let macStyle = 0;\n if (font.weightClass >= 600) {\n macStyle |= font.macStyleValues.BOLD;\n }\n if (font.italicAngle < 0) {\n macStyle |= font.macStyleValues.ITALIC;\n }\n const headTable = head_default.make({\n flags: 3,\n // 00000011 (baseline for font at y=0; left sidebearing point at x=0)\n unitsPerEm: font.unitsPerEm,\n xMin: globals.xMin,\n yMin: globals.yMin,\n xMax: globals.xMax,\n yMax: globals.yMax,\n lowestRecPPEM: 3,\n macStyle,\n createdTimestamp: font.createdTimestamp\n });\n const hheaTable = hhea_default.make({\n ascender: globals.ascender,\n descender: globals.descender,\n advanceWidthMax: globals.advanceWidthMax,\n minLeftSideBearing: globals.minLeftSideBearing,\n minRightSideBearing: globals.minRightSideBearing,\n xMaxExtent: globals.maxLeftSideBearing + (globals.xMax - globals.xMin),\n numberOfHMetrics: font.glyphs.length\n });\n const maxpTable = maxp_default.make(font.glyphs.length);\n const os2Table = os2_default.make(Object.assign({\n xAvgCharWidth: Math.round(globals.advanceWidthAvg),\n usFirstCharIndex: firstCharIndex,\n usLastCharIndex: lastCharIndex,\n ulUnicodeRange1,\n ulUnicodeRange2,\n ulUnicodeRange3,\n ulUnicodeRange4,\n // See http://typophile.com/node/13081 for more info on vertical metrics.\n // We get metrics for typical characters (such as \"x\" for xHeight).\n // We provide some fallback characters if characters are unavailable: their\n // ordering was chosen experimentally.\n sTypoAscender: globals.ascender,\n sTypoDescender: globals.descender,\n sTypoLineGap: 0,\n usWinAscent: globals.yMax,\n usWinDescent: Math.abs(globals.yMin),\n ulCodePageRange1: 1,\n // FIXME: hard-code Latin 1 support for now\n sxHeight: metricsForChar(font, \"xyvw\", { yMax: Math.round(globals.ascender / 2) }).yMax,\n sCapHeight: metricsForChar(font, \"HIKLEFJMNTZBDPRAGOQSUVWXY\", globals).yMax,\n usDefaultChar: font.hasChar(\" \") ? 32 : 0,\n // Use space as the default character, if available.\n usBreakChar: font.hasChar(\" \") ? 32 : 0\n // Use space as the break character, if available.\n }, font.tables.os2));\n const hmtxTable = hmtx_default.make(font.glyphs);\n const cmapTable = cmap_default.make(font.glyphs);\n const englishFamilyName = font.getEnglishName(\"fontFamily\");\n const englishStyleName = font.getEnglishName(\"fontSubfamily\");\n const englishFullName = englishFamilyName + \" \" + englishStyleName;\n let postScriptName = font.getEnglishName(\"postScriptName\");\n if (!postScriptName) {\n postScriptName = englishFamilyName.replace(/\\s/g, \"\") + \"-\" + englishStyleName;\n }\n const names = {};\n for (let n in font.names) {\n names[n] = font.names[n];\n }\n names.unicode = names.unicode || {};\n names.macintosh = names.macintosh || {};\n names.windows = names.windows || {};\n const fontNamesUnicode = font.names.unicode || {};\n const fontNamesMacintosh = font.names.macintosh || {};\n const fontNamesWindows = font.names.windows || {};\n for (const platform in names) {\n names[platform] = names[platform] || {};\n if (!names[platform].uniqueID) {\n const manufacturer = font.getEnglishName(\"manufacturer\") || \"\";\n names[platform].uniqueID = { en: `${manufacturer}: ${englishFullName}` };\n }\n if (!names[platform].postScriptName) {\n names[platform].postScriptName = { en: postScriptName };\n }\n }\n if (!names.unicode.preferredFamily) {\n names.unicode.preferredFamily = fontNamesUnicode.fontFamily || fontNamesMacintosh.fontFamily || fontNamesWindows.fontFamily;\n }\n if (!names.macintosh.preferredFamily) {\n names.macintosh.preferredFamily = fontNamesMacintosh.fontFamily || fontNamesUnicode.fontFamily || fontNamesWindows.fontFamily;\n }\n if (!names.windows.preferredFamily) {\n names.windows.preferredFamily = fontNamesWindows.fontFamily || fontNamesUnicode.fontFamily || fontNamesMacintosh.fontFamily;\n }\n if (!names.unicode.preferredSubfamily) {\n names.unicode.preferredSubfamily = fontNamesUnicode.fontSubfamily || fontNamesMacintosh.fontSubfamily || fontNamesWindows.fontSubfamily;\n }\n if (!names.macintosh.preferredSubfamily) {\n names.macintosh.preferredSubfamily = fontNamesMacintosh.fontSubfamily || fontNamesUnicode.fontSubfamily || fontNamesWindows.fontSubfamily;\n }\n if (!names.windows.preferredSubfamily) {\n names.windows.preferredSubfamily = fontNamesWindows.fontSubfamily || fontNamesUnicode.fontSubfamily || fontNamesMacintosh.fontSubfamily;\n }\n const languageTags = [];\n const nameTable = name_default.make(names, languageTags);\n const ltagTable = languageTags.length > 0 ? ltag_default.make(languageTags) : void 0;\n const postTable = post_default.make(font);\n const cffTable = cff_default.make(font.glyphs, {\n version: font.getEnglishName(\"version\"),\n fullName: englishFullName,\n familyName: englishFamilyName,\n weightName: englishStyleName,\n postScriptName,\n unitsPerEm: font.unitsPerEm,\n fontBBox: [0, globals.yMin, globals.ascender, globals.advanceWidthMax],\n topDict: font.tables.cff && font.tables.cff.topDict || {}\n });\n const metaTable = font.metas && Object.keys(font.metas).length > 0 ? meta_default.make(font.metas) : void 0;\n const tables = [headTable, hheaTable, maxpTable, os2Table, nameTable, cmapTable, postTable, cffTable, hmtxTable];\n if (ltagTable) {\n tables.push(ltagTable);\n }\n const optionalTables = {\n gsub: gsub_default,\n cpal: cpal_default,\n colr: colr_default,\n stat: stat_default,\n avar: avar_default,\n cvar: cvar_default,\n fvar: fvar_default,\n gvar: gvar_default,\n gasp: gasp_default,\n svg: svg_default\n };\n const optionalTableArgs = {\n avar: [font.tables.fvar],\n fvar: [font.names]\n };\n for (let tableName in optionalTables) {\n const table = font.tables[tableName];\n if (table) {\n const tableData = optionalTables[tableName].make.call(font, table, ...optionalTableArgs[tableName] || []);\n if (tableData) {\n tables.push(tableData);\n }\n }\n }\n if (metaTable) {\n tables.push(metaTable);\n }\n const sfntTable = makeSfntTable(tables);\n const bytes = sfntTable.encode();\n const checkSum = computeCheckSum(bytes);\n const tableFields = sfntTable.fields;\n let checkSumAdjusted = false;\n for (let i = 0; i < tableFields.length; i += 1) {\n if (tableFields[i].name === \"head table\") {\n tableFields[i].value.checkSumAdjustment = 2981146554 - checkSum;\n checkSumAdjusted = true;\n break;\n }\n }\n if (!checkSumAdjusted) {\n throw new Error(\"Could not find head table with checkSum to adjust.\");\n }\n return sfntTable;\n}\nvar sfnt_default = { make: makeSfntTable, fontToTable: fontToSfntTable, computeCheckSum };\n\n// src/layout.mjs\nfunction searchTag(arr, tag) {\n let imin = 0;\n let imax = arr.length - 1;\n while (imin <= imax) {\n const imid = imin + imax >>> 1;\n const val = arr[imid].tag;\n if (val === tag) {\n return imid;\n } else if (val < tag) {\n imin = imid + 1;\n } else {\n imax = imid - 1;\n }\n }\n return -imin - 1;\n}\nfunction binSearch(arr, value) {\n let imin = 0;\n let imax = arr.length - 1;\n while (imin <= imax) {\n const imid = imin + imax >>> 1;\n const val = arr[imid];\n if (val === value) {\n return imid;\n } else if (val < value) {\n imin = imid + 1;\n } else {\n imax = imid - 1;\n }\n }\n return -imin - 1;\n}\nfunction searchRange(ranges, value) {\n let range;\n let imin = 0;\n let imax = ranges.length - 1;\n while (imin <= imax) {\n const imid = imin + imax >>> 1;\n range = ranges[imid];\n const start = range.start;\n if (start === value) {\n return range;\n } else if (start < value) {\n imin = imid + 1;\n } else {\n imax = imid - 1;\n }\n }\n if (imin > 0) {\n range = ranges[imin - 1];\n if (value > range.end) return 0;\n return range;\n }\n}\nfunction Layout(font, tableName) {\n this.font = font;\n this.tableName = tableName;\n}\nLayout.prototype = {\n /**\n * Binary search an object by \"tag\" property\n * @instance\n * @function searchTag\n * @memberof opentype.Layout\n * @param {Array} arr\n * @param {string} tag\n * @return {number}\n */\n searchTag,\n /**\n * Binary search in a list of numbers\n * @instance\n * @function binSearch\n * @memberof opentype.Layout\n * @param {Array} arr\n * @param {number} value\n * @return {number}\n */\n binSearch,\n /**\n * Get or create the Layout table (GSUB, GPOS etc).\n * @param {boolean} create - Whether to create a new one.\n * @return {Object} The GSUB or GPOS table.\n */\n getTable: function(create) {\n let layout = this.font.tables[this.tableName];\n if (!layout && create) {\n layout = this.font.tables[this.tableName] = this.createDefaultTable();\n }\n return layout;\n },\n /**\n * Returns all scripts in the substitution table.\n * @instance\n * @return {Array}\n */\n getScriptNames: function() {\n let layout = this.getTable();\n if (!layout) {\n return [];\n }\n return layout.scripts.map(function(script) {\n return script.tag;\n });\n },\n /**\n * Returns the best bet for a script name.\n * Returns 'DFLT' if it exists.\n * If not, returns 'latn' if it exists.\n * If neither exist, returns undefined.\n */\n getDefaultScriptName: function() {\n let layout = this.getTable();\n if (!layout) {\n return;\n }\n let hasLatn = false;\n for (let i = 0; i < layout.scripts.length; i++) {\n const name = layout.scripts[i].tag;\n if (name === \"DFLT\") return name;\n if (name === \"latn\") hasLatn = true;\n }\n if (hasLatn) return \"latn\";\n },\n /**\n * Returns all LangSysRecords in the given script.\n * @instance\n * @param {string} [script='DFLT']\n * @param {boolean} create - forces the creation of this script table if it doesn't exist.\n * @return {Object} An object with tag and script properties.\n */\n getScriptTable: function(script, create) {\n const layout = this.getTable(create);\n if (layout) {\n script = script || \"DFLT\";\n const scripts = layout.scripts;\n const pos = searchTag(layout.scripts, script);\n if (pos >= 0) {\n return scripts[pos].script;\n } else if (create) {\n const scr = {\n tag: script,\n script: {\n defaultLangSys: { reserved: 0, reqFeatureIndex: 65535, featureIndexes: [] },\n langSysRecords: []\n }\n };\n scripts.splice(-1 - pos, 0, scr);\n return scr.script;\n }\n }\n },\n /**\n * Returns a language system table\n * @instance\n * @param {string} [script='DFLT']\n * @param {string} [language='dlft']\n * @param {boolean} create - forces the creation of this langSysTable if it doesn't exist.\n * @return {Object}\n */\n getLangSysTable: function(script, language, create) {\n const scriptTable = this.getScriptTable(script, create);\n if (scriptTable) {\n if (!language || language === \"dflt\" || language === \"DFLT\") {\n return scriptTable.defaultLangSys;\n }\n const pos = searchTag(scriptTable.langSysRecords, language);\n if (pos >= 0) {\n return scriptTable.langSysRecords[pos].langSys;\n } else if (create) {\n const langSysRecord = {\n tag: language,\n langSys: { reserved: 0, reqFeatureIndex: 65535, featureIndexes: [] }\n };\n scriptTable.langSysRecords.splice(-1 - pos, 0, langSysRecord);\n return langSysRecord.langSys;\n }\n }\n },\n /**\n * Get a specific feature table.\n * @instance\n * @param {string} [script='DFLT']\n * @param {string} [language='dlft']\n * @param {string} feature - One of the codes listed at https://www.microsoft.com/typography/OTSPEC/featurelist.htm\n * @param {boolean} create - forces the creation of the feature table if it doesn't exist.\n * @return {Object}\n */\n getFeatureTable: function(script, language, feature, create) {\n const langSysTable2 = this.getLangSysTable(script, language, create);\n if (langSysTable2) {\n let featureRecord;\n const featIndexes = langSysTable2.featureIndexes;\n const allFeatures = this.font.tables[this.tableName].features;\n for (let i = 0; i < featIndexes.length; i++) {\n featureRecord = allFeatures[featIndexes[i]];\n if (featureRecord.tag === feature) {\n return featureRecord.feature;\n }\n }\n if (create) {\n const index = allFeatures.length;\n check_default.assert(index === 0 || feature >= allFeatures[index - 1].tag, \"Features must be added in alphabetical order.\");\n featureRecord = {\n tag: feature,\n feature: { params: 0, lookupListIndexes: [] }\n };\n allFeatures.push(featureRecord);\n featIndexes.push(index);\n return featureRecord.feature;\n }\n }\n },\n /**\n * Get the lookup tables of a given type for a script/language/feature.\n * @instance\n * @param {string} [script='DFLT']\n * @param {string} [language='dlft']\n * @param {string} feature - 4-letter feature code\n * @param {number} lookupType - 1 to 9\n * @param {boolean} create - forces the creation of the lookup table if it doesn't exist, with no subtables.\n * @return {Object[]}\n */\n getLookupTables: function(script, language, feature, lookupType, create) {\n const featureTable = this.getFeatureTable(script, language, feature, create);\n const tables = [];\n if (featureTable) {\n let lookupTable;\n const lookupListIndexes = featureTable.lookupListIndexes;\n const allLookups = this.font.tables[this.tableName].lookups;\n for (let i = 0; i < lookupListIndexes.length; i++) {\n lookupTable = allLookups[lookupListIndexes[i]];\n if (lookupTable.lookupType === lookupType) {\n tables.push(lookupTable);\n }\n }\n if (tables.length === 0 && create) {\n lookupTable = {\n lookupType,\n lookupFlag: 0,\n subtables: [],\n markFilteringSet: void 0\n };\n const index = allLookups.length;\n allLookups.push(lookupTable);\n lookupListIndexes.push(index);\n return [lookupTable];\n }\n }\n return tables;\n },\n /**\n * Find a glyph in a class definition table\n * https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#class-definition-table\n * @param {object} classDefTable - an OpenType Layout class definition table\n * @param {number} glyphIndex - the index of the glyph to find\n * @returns {number} -1 if not found\n */\n getGlyphClass: function(classDefTable, glyphIndex) {\n switch (classDefTable.format) {\n case 1: {\n if (classDefTable.startGlyph <= glyphIndex && glyphIndex < classDefTable.startGlyph + classDefTable.classes.length) {\n return classDefTable.classes[glyphIndex - classDefTable.startGlyph];\n }\n return 0;\n }\n case 2: {\n const range = searchRange(classDefTable.ranges, glyphIndex);\n return range ? range.classId : 0;\n }\n }\n },\n /**\n * Find a glyph in a coverage table\n * https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#coverage-table\n * @param {object} coverageTable - an OpenType Layout coverage table\n * @param {number} glyphIndex - the index of the glyph to find\n * @returns {number} -1 if not found\n */\n getCoverageIndex: function(coverageTable, glyphIndex) {\n switch (coverageTable.format) {\n case 1: {\n const index = binSearch(coverageTable.glyphs, glyphIndex);\n return index >= 0 ? index : -1;\n }\n case 2: {\n const range = searchRange(coverageTable.ranges, glyphIndex);\n return range ? range.index + glyphIndex - range.start : -1;\n }\n }\n },\n /**\n * Returns the list of glyph indexes of a coverage table.\n * Format 1: the list is stored raw\n * Format 2: compact list as range records.\n * @instance\n * @param {Object} coverageTable\n * @return {Array}\n */\n expandCoverage: function(coverageTable) {\n if (coverageTable.format === 1) {\n return coverageTable.glyphs;\n } else {\n const glyphs = [];\n const ranges = coverageTable.ranges;\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n const start = range.start;\n const end = range.end;\n for (let j = start; j <= end; j++) {\n glyphs.push(j);\n }\n }\n return glyphs;\n }\n }\n};\nvar layout_default = Layout;\n\n// src/position.mjs\nfunction Position(font) {\n layout_default.call(this, font, \"gpos\");\n}\nPosition.prototype = layout_default.prototype;\nPosition.prototype.init = function() {\n const script = this.getDefaultScriptName();\n this.defaultKerningTables = this.getKerningTables(script);\n};\nPosition.prototype.getKerningValue = function(kerningLookups, leftIndex, rightIndex) {\n for (let i = 0; i < kerningLookups.length; i++) {\n const subtables = kerningLookups[i].subtables;\n for (let j = 0; j < subtables.length; j++) {\n const subtable = subtables[j];\n const covIndex = this.getCoverageIndex(subtable.coverage, leftIndex);\n if (covIndex < 0) continue;\n switch (subtable.posFormat) {\n case 1: {\n let pairSet = subtable.pairSets[covIndex];\n for (let k = 0; k < pairSet.length; k++) {\n let pair = pairSet[k];\n if (pair.secondGlyph === rightIndex) {\n return pair.value1 && pair.value1.xAdvance || 0;\n }\n }\n break;\n }\n case 2: {\n const class1 = this.getGlyphClass(subtable.classDef1, leftIndex);\n const class2 = this.getGlyphClass(subtable.classDef2, rightIndex);\n const pair = subtable.classRecords[class1][class2];\n return pair.value1 && pair.value1.xAdvance || 0;\n }\n }\n }\n }\n return 0;\n};\nPosition.prototype.getKerningTables = function(script, language) {\n if (this.font.tables.gpos) {\n return this.getLookupTables(script, language, \"kern\", 2);\n }\n};\nvar position_default = Position;\n\n// src/util.mjs\nfunction arraysEqual(ar1, ar2) {\n const n = ar1.length;\n if (n !== ar2.length) {\n return false;\n }\n for (let i = 0; i < n; i++) {\n if (ar1[i] !== ar2[i]) {\n return false;\n }\n }\n return true;\n}\nfunction binarySearch(array, key, value) {\n let low = 0, high = array.length - 1;\n let result = null;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const record = array[mid];\n const recordValue = record[key];\n if (recordValue < value) {\n low = mid + 1;\n } else if (recordValue > value) {\n high = mid - 1;\n } else {\n result = record;\n break;\n }\n }\n return result;\n}\nfunction binarySearchIndex(array, key, value) {\n let low = 0, high = array.length - 1;\n while (low <= high) {\n const mid = Math.floor((low + high) / 2);\n const element = array[mid];\n if (element[key] < value) {\n low = mid + 1;\n } else if (element[key] > value) {\n high = mid - 1;\n } else {\n return mid;\n }\n }\n return -1;\n}\nfunction binarySearchInsert(array, key, value) {\n let low = 0, high = array.length;\n const compare = (a, b) => a[key] - b[key];\n while (low < high) {\n const mid = low + high >>> 1;\n if (compare(array[mid], value) < 0) low = mid + 1;\n else high = mid;\n }\n array.splice(low, 0, value);\n return low;\n}\nfunction isGzip(buf) {\n return buf[0] === 31 && buf[1] === 139 && buf[2] === 8;\n}\nfunction unGzip(gzip) {\n const data = new DataView(gzip.buffer, gzip.byteOffset, gzip.byteLength);\n let start = 10;\n const end = gzip.byteLength - 8;\n const flg = data.getInt8(3);\n if (flg & 4) {\n start += 2 + data.getUint16(start, true);\n }\n if (flg & 8) {\n while (start < end) if (gzip[start++] === 0) break;\n }\n if (flg & 16) {\n while (start < end) if (gzip[start++] === 0) break;\n }\n if (flg & 2) {\n start += 2;\n }\n if (start >= end) throw new Error(\"Can't find compressed blocks\");\n const isize = data.getUint32(data.byteLength - 4, true);\n return tinf_uncompress(gzip.subarray(start, end), new Uint8Array(isize));\n}\nfunction copyPoint(p) {\n return {\n x: p.x,\n y: p.y,\n onCurve: p.onCurve,\n lastPointOfContour: p.lastPointOfContour\n };\n}\nfunction copyComponent(c) {\n return {\n glyphIndex: c.glyphIndex,\n xScale: c.xScale,\n scale01: c.scale01,\n scale10: c.scale10,\n yScale: c.yScale,\n dx: c.dx,\n dy: c.dy\n };\n}\n\n// src/substitution.mjs\nfunction Substitution(font) {\n layout_default.call(this, font, \"gsub\");\n}\nfunction getSubstFormat(lookupTable, format, defaultSubtable) {\n const subtables = lookupTable.subtables;\n for (let i = 0; i < subtables.length; i++) {\n const subtable = subtables[i];\n if (subtable.substFormat === format) {\n return subtable;\n }\n }\n if (defaultSubtable) {\n subtables.push(defaultSubtable);\n return defaultSubtable;\n }\n return void 0;\n}\nSubstitution.prototype = layout_default.prototype;\nSubstitution.prototype.createDefaultTable = function() {\n return {\n version: 1,\n scripts: [{\n tag: \"DFLT\",\n script: {\n defaultLangSys: { reserved: 0, reqFeatureIndex: 65535, featureIndexes: [] },\n langSysRecords: []\n }\n }],\n features: [],\n lookups: []\n };\n};\nSubstitution.prototype.getSingle = function(feature, script, language) {\n const substitutions = [];\n const lookupTables = this.getLookupTables(script, language, feature, 1);\n for (let idx = 0; idx < lookupTables.length; idx++) {\n const subtables = lookupTables[idx].subtables;\n for (let i = 0; i < subtables.length; i++) {\n const subtable = subtables[i];\n const glyphs = this.expandCoverage(subtable.coverage);\n let j;\n if (subtable.substFormat === 1) {\n const delta = subtable.deltaGlyphId;\n for (j = 0; j < glyphs.length; j++) {\n const glyph = glyphs[j];\n substitutions.push({ sub: glyph, by: glyph + delta });\n }\n } else {\n const substitute = subtable.substitute;\n for (j = 0; j < glyphs.length; j++) {\n substitutions.push({ sub: glyphs[j], by: substitute[j] });\n }\n }\n }\n }\n return substitutions;\n};\nSubstitution.prototype.getMultiple = function(feature, script, language) {\n const substitutions = [];\n const lookupTables = this.getLookupTables(script, language, feature, 2);\n for (let idx = 0; idx < lookupTables.length; idx++) {\n const subtables = lookupTables[idx].subtables;\n for (let i = 0; i < subtables.length; i++) {\n const subtable = subtables[i];\n const glyphs = this.expandCoverage(subtable.coverage);\n let j;\n for (j = 0; j < glyphs.length; j++) {\n const glyph = glyphs[j];\n const replacements = subtable.sequences[j];\n substitutions.push({ sub: glyph, by: replacements });\n }\n }\n }\n return substitutions;\n};\nSubstitution.prototype.getAlternates = function(feature, script, language) {\n const alternates = [];\n const lookupTables = this.getLookupTables(script, language, feature, 3);\n for (let idx = 0; idx < lookupTables.length; idx++) {\n const subtables = lookupTables[idx].subtables;\n for (let i = 0; i < subtables.length; i++) {\n const subtable = subtables[i];\n const glyphs = this.expandCoverage(subtable.coverage);\n const alternateSets = subtable.alternateSets;\n for (let j = 0; j < glyphs.length; j++) {\n alternates.push({ sub: glyphs[j], by: alternateSets[j] });\n }\n }\n }\n return alternates;\n};\nSubstitution.prototype.getLigatures = function(feature, script, language) {\n const ligatures = [];\n const lookupTables = this.getLookupTables(script, language, feature, 4);\n for (let idx = 0; idx < lookupTables.length; idx++) {\n const subtables = lookupTables[idx].subtables;\n for (let i = 0; i < subtables.length; i++) {\n const subtable = subtables[i];\n const glyphs = this.expandCoverage(subtable.coverage);\n const ligatureSets = subtable.ligatureSets;\n for (let j = 0; j < glyphs.length; j++) {\n const startGlyph = glyphs[j];\n const ligSet = ligatureSets[j];\n for (let k = 0; k < ligSet.length; k++) {\n const lig = ligSet[k];\n ligatures.push({\n sub: [startGlyph].concat(lig.components),\n by: lig.ligGlyph\n });\n }\n }\n }\n }\n return ligatures;\n};\nSubstitution.prototype.addSingle = function(feature, substitution, script, language) {\n const lookupTable = this.getLookupTables(script, language, feature, 1, true)[0];\n const subtable = getSubstFormat(lookupTable, 2, {\n // lookup type 1 subtable, format 2, coverage format 1\n substFormat: 2,\n coverage: { format: 1, glyphs: [] },\n substitute: []\n });\n check_default.assert(subtable.coverage.format === 1, \"Single: unable to modify coverage table format \" + subtable.coverage.format);\n const coverageGlyph = substitution.sub;\n let pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);\n if (pos < 0) {\n pos = -1 - pos;\n subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);\n subtable.substitute.splice(pos, 0, 0);\n }\n subtable.substitute[pos] = substitution.by;\n};\nSubstitution.prototype.addMultiple = function(feature, substitution, script, language) {\n check_default.assert(substitution.by instanceof Array && substitution.by.length > 1, 'Multiple: \"by\" must be an array of two or more ids');\n const lookupTable = this.getLookupTables(script, language, feature, 2, true)[0];\n const subtable = getSubstFormat(lookupTable, 1, {\n // lookup type 2 subtable, format 1, coverage format 1\n substFormat: 1,\n coverage: { format: 1, glyphs: [] },\n sequences: []\n });\n check_default.assert(subtable.coverage.format === 1, \"Multiple: unable to modify coverage table format \" + subtable.coverage.format);\n const coverageGlyph = substitution.sub;\n let pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);\n if (pos < 0) {\n pos = -1 - pos;\n subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);\n subtable.sequences.splice(pos, 0, 0);\n }\n subtable.sequences[pos] = substitution.by;\n};\nSubstitution.prototype.addAlternate = function(feature, substitution, script, language) {\n const lookupTable = this.getLookupTables(script, language, feature, 3, true)[0];\n const subtable = getSubstFormat(lookupTable, 1, {\n // lookup type 3 subtable, format 1, coverage format 1\n substFormat: 1,\n coverage: { format: 1, glyphs: [] },\n alternateSets: []\n });\n check_default.assert(subtable.coverage.format === 1, \"Alternate: unable to modify coverage table format \" + subtable.coverage.format);\n const coverageGlyph = substitution.sub;\n let pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);\n if (pos < 0) {\n pos = -1 - pos;\n subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);\n subtable.alternateSets.splice(pos, 0, 0);\n }\n subtable.alternateSets[pos] = substitution.by;\n};\nSubstitution.prototype.addLigature = function(feature, ligature, script, language) {\n const lookupTable = this.getLookupTables(script, language, feature, 4, true)[0];\n let subtable = lookupTable.subtables[0];\n if (!subtable) {\n subtable = {\n // lookup type 4 subtable, format 1, coverage format 1\n substFormat: 1,\n coverage: { format: 1, glyphs: [] },\n ligatureSets: []\n };\n lookupTable.subtables[0] = subtable;\n }\n check_default.assert(subtable.coverage.format === 1, \"Ligature: unable to modify coverage table format \" + subtable.coverage.format);\n const coverageGlyph = ligature.sub[0];\n const ligComponents = ligature.sub.slice(1);\n const ligatureTable = {\n ligGlyph: ligature.by,\n components: ligComponents\n };\n let pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);\n if (pos >= 0) {\n const ligatureSet = subtable.ligatureSets[pos];\n for (let i = 0; i < ligatureSet.length; i++) {\n if (arraysEqual(ligatureSet[i].components, ligComponents)) {\n return;\n }\n }\n ligatureSet.push(ligatureTable);\n } else {\n pos = -1 - pos;\n subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);\n subtable.ligatureSets.splice(pos, 0, [ligatureTable]);\n }\n};\nSubstitution.prototype.getFeature = function(feature, script, language) {\n if (/ss\\d\\d/.test(feature)) {\n return this.getSingle(feature, script, language);\n }\n switch (feature) {\n case \"aalt\":\n case \"salt\":\n return this.getSingle(feature, script, language).concat(this.getAlternates(feature, script, language));\n case \"dlig\":\n case \"liga\":\n case \"rlig\":\n return this.getLigatures(feature, script, language);\n case \"ccmp\":\n return this.getMultiple(feature, script, language).concat(this.getLigatures(feature, script, language));\n case \"stch\":\n return this.getMultiple(feature, script, language);\n }\n return void 0;\n};\nSubstitution.prototype.add = function(feature, sub, script, language) {\n if (/ss\\d\\d/.test(feature)) {\n return this.addSingle(feature, sub, script, language);\n }\n switch (feature) {\n case \"aalt\":\n case \"salt\":\n if (typeof sub.by === \"number\") {\n return this.addSingle(feature, sub, script, language);\n }\n return this.addAlternate(feature, sub, script, language);\n case \"dlig\":\n case \"liga\":\n case \"rlig\":\n return this.addLigature(feature, sub, script, language);\n case \"ccmp\":\n if (sub.by instanceof Array) {\n return this.addMultiple(feature, sub, script, language);\n }\n return this.addLigature(feature, sub, script, language);\n }\n return void 0;\n};\nvar substitution_default = Substitution;\n\n// src/palettes.mjs\nvar PaletteManager = class {\n // private properties don't work with reify\n // @TODO: refactor once we migrated to ES6 modules, see https://github.com/opentypejs/opentype.js/pull/579\n // #font = null;\n /**\n * @type {integer} CPAL color used to (pre)fill unset colors in a palette.\n * Format 0xBBGGRRAA\n */\n // defaultValue = 0x000000FF;\n /**\n * \n * @param {opentype.Font} font \n */\n constructor(font) {\n this.defaultValue = 255;\n this.font = font;\n }\n /**\n * Returns the font's cpal table object if present\n * @returns {Object}\n */\n cpal() {\n if (this.font.tables && this.font.tables.cpal) {\n return this.font.tables.cpal;\n }\n return false;\n }\n /**\n * Returns an array of arrays of color values for each palette, optionally in a specified color format\n * @param {string} colorFormat \n * @returns {Array<Array>}\n */\n getAll(colorFormat) {\n const palettes = [];\n const cpal = this.cpal();\n if (!cpal) return palettes;\n for (let i = 0; i < cpal.colorRecordIndices.length; i++) {\n const startIndex = cpal.colorRecordIndices[i];\n const paletteColors = [];\n for (let j = startIndex; j < startIndex + cpal.numPaletteEntries; j++) {\n paletteColors.push(formatColor(cpal.colorRecords[j], colorFormat || \"hexa\"));\n }\n palettes.push(paletteColors);\n }\n return palettes;\n }\n /**\n * Converts a color value string or array of color value strings to CPAL integer color value(s)\n * @param {string|Array<string></string>} color \n * @returns {integer}\n */\n toCPALcolor(color) {\n if (Array.isArray(color)) {\n return color.map((color2) => parseColor(color2, \"raw\"));\n }\n return parseColor(color, \"raw\");\n }\n /**\n * Fills a set of palette colors (from palette index, or a provided array of CPAL color values) with a set of colors, falling back to the default color value, until a given count\n * @param {Array<string>|integer} palette Palette index integer or Array of colors to be filled\n * @param {Array<string|integer>} colors Colors to fill the palette with\n * @param {integer} _colorCount Number of colors to fill the palette with, defaults to the value of the numPaletteEntries field. Used internally by extend() and shouldn't be set manually\n * @returns \n */\n fillPalette(palette, colors = [], _colorCount = this.cpal().numPaletteEntries) {\n palette = Number.isInteger(palette) ? this.get(palette, \"raw\") : palette;\n return Object.assign(Array(_colorCount).fill(this.defaultValue), this.toCPALcolor(palette).concat(this.toCPALcolor(colors)));\n }\n /**\n * Extend existing palettes and numPaletteEntries by a number of color slots\n * @param {integer} num number of additional color slots to add to all palettes\n */\n extend(num) {\n if (this.ensureCPAL(Array(num).fill(this.defaultValue))) {\n return;\n }\n const cpal = this.cpal();\n const newCount = cpal.numPaletteEntries + num;\n const palettes = this.getAll().map((palette) => this.fillPalette(palette, [], newCount));\n cpal.numPaletteEntries = newCount;\n cpal.colorRecords = this.toCPALcolor(palettes.flat());\n this.updateIndices();\n }\n /**\n * Get a specific palette by its zero-based index\n * @param {integer} paletteIndex \n * @param {string} [colorFormat='hexa']\n * @returns {Array}\n */\n get(paletteIndex, colorFormat = \"hexa\") {\n return this.getAll(colorFormat)[paletteIndex] || null;\n }\n /**\n * Get a color from a specific palette by its zero-based index\n * @param {integer} index \n * @param {integer} paletteIndex\n * @param {string} [colorFormat ='hexa']\n * @returns \n */\n getColor(index, paletteIndex = 0, colorFormat = \"hexa\") {\n return getPaletteColor(this.font, index, paletteIndex, colorFormat);\n }\n /**\n * Set one or more colors on a specific palette by its zero-based index\n * @param {integer} index zero-based color index to start filling from\n * @param {string|integer|Array<string|integer>} color color value or array of color values\n * @param {integer} paletteIndex\n * @returns \n */\n setColor(index, colors, paletteIndex = 0) {\n index = parseInt(index);\n paletteIndex = parseInt(paletteIndex);\n let palettes = this.getAll(\"raw\");\n let palette = palettes[paletteIndex];\n if (!palette) {\n throw Error(`paletteIndex ${paletteIndex} out of range`);\n }\n const cpal = this.cpal();\n const colorCount = cpal.numPaletteEntries;\n if (!Array.isArray(colors)) {\n colors = [colors];\n }\n if (colors.length + index > colorCount) {\n this.extend(colors.length + index - colorCount);\n palettes = this.getAll(\"raw\");\n palette = palettes[paletteIndex];\n }\n for (let i = 0; i < colors.length; i++) {\n palette[i + index] = this.toCPALcolor(colors[i]);\n }\n cpal.colorRecords = palettes.flat();\n this.updateIndices();\n }\n /**\n * Add a new palette. \n * @param {Array} colors (optional) colors to add to the palette, differences to existing palettes will be filled with the defaultValue.\n * @returns \n */\n add(colors) {\n if (this.ensureCPAL(colors)) {\n return;\n }\n const cpal = this.cpal();\n const colorCount = cpal.numPaletteEntries;\n if (colors && colors.length) {\n colors = this.toCPALcolor(colors);\n if (colors.length > colorCount) {\n this.extend(colors.length - colorCount);\n } else if (colors.length < colorCount) {\n colors = this.fillPalette(colors);\n }\n cpal.colorRecordIndices.push(cpal.colorRecords.length);\n cpal.colorRecords.push(...colors);\n } else {\n cpal.colorRecordIndices.push(cpal.colorRecords.length);\n cpal.colorRecords.push(...Array(colorCount).fill(this.defaultValue));\n }\n }\n /**\n * deletes a palette by its zero-based index\n * @param {integer} paletteIndex \n */\n delete(paletteIndex) {\n const palettes = this.getAll(\"raw\");\n delete palettes[paletteIndex];\n const cpal = this.cpal();\n cpal.colorRecordIndices.pop();\n cpal.colorRecords = palettes.flat();\n }\n /**\n * Deletes a specific color index in all palettes and updates all layers using that color with the replacement index\n * @param {integer} colorIndex index of the color that should be deleted\n * @param {integer} replacementIndex index (according to the palette before deletion) of the color to replace in layers using the color to be to deleted\n */\n deleteColor(colorIndex, replacementIndex) {\n if (colorIndex === replacementIndex) {\n throw Error(\"replacementIndex cannot be the same as colorIndex\");\n }\n const cpal = this.cpal();\n const palettes = this.getAll(\"raw\");\n const updatedPalettes = [];\n if (replacementIndex > cpal.numPaletteEntries - 1) {\n throw Error(`Replacement index out of range: numPaletteEntries after deletion: ${cpal.numPaletteEntries - 1}, replacementIndex: ${replacementIndex})`);\n }\n for (let i = 0; i < palettes.length; i++) {\n const palette = palettes[i];\n const updatedPalette = palette.filter((color, index) => index !== colorIndex);\n updatedPalettes.push(updatedPalette);\n }\n const colrTable = this.font.tables.colr;\n if (colrTable) {\n const layerRecords = colrTable.layerRecords;\n for (let i = 0; i < layerRecords.length; i++) {\n const currentIndex = layerRecords[i].paletteIndex;\n if (currentIndex > colorIndex) {\n const shiftAmount = 1;\n layerRecords[i].paletteIndex -= shiftAmount;\n } else if (currentIndex === colorIndex) {\n let replacementShift = 0;\n for (let j = 0; j < palettes.length; j++) {\n if (replacementIndex > colorIndex && replacementIndex <= colorIndex + palettes[j].length) {\n replacementShift++;\n break;\n }\n }\n layerRecords[i].paletteIndex = replacementIndex - replacementShift;\n }\n }\n this.font.tables.colr = {\n ...colrTable,\n layerRecords\n };\n }\n const flattenedPalettes = updatedPalettes.flat();\n for (let i = 0; i < palettes.length; i++) {\n cpal.colorRecordIndices[i] -= i;\n }\n cpal.numPaletteEntries = Math.max(0, cpal.numPaletteEntries - 1);\n cpal.colorRecords = this.toCPALcolor(flattenedPalettes);\n }\n /**\n * Makes sure that the CPAL table exists and is populated with default values.\n * @param {Array} colors (optional) colors to populate on creation\n * @returns {Boolean} true if it was created, false if it already existed.\n */\n ensureCPAL(colors) {\n if (!this.cpal()) {\n if (!colors || !colors.length) {\n colors = [this.defaultValue];\n } else {\n colors = this.toCPALcolor(colors);\n }\n this.font.tables.cpal = {\n version: 0,\n numPaletteEntries: colors.length,\n colorRecords: colors,\n colorRecordIndices: [0]\n };\n return true;\n }\n return false;\n }\n /**\n * Mainly used internally. Recalculates the colorRecordIndices array based on the numPaletteEntries and number of palettes\n */\n updateIndices() {\n const cpal = this.cpal();\n const paletteCount = Math.ceil(cpal.colorRecords.length / cpal.numPaletteEntries);\n cpal.colorRecordIndices = [];\n for (let i = 0; i < paletteCount; i++) {\n cpal.colorRecordIndices.push(i * cpal.numPaletteEntries);\n }\n }\n};\n\n// src/layers.mjs\nvar LayerManager = class {\n // private properties don't work with reify\n // @TODO: refactor once we migrated to ES6 modules, see https://github.com/opentypejs/opentype.js/pull/579\n // #font = null;\n constructor(font) {\n this.font = font;\n }\n /**\n * Mainly used internally. Ensures that the COLR table exists and is populated with default values\n * @returns the LayerManager's font instance for chaining\n */\n ensureCOLR() {\n if (!this.font.tables.colr) {\n this.font.tables.colr = {\n version: 0,\n baseGlyphRecords: [],\n layerRecords: []\n };\n }\n return this.font;\n }\n /**\n * Gets the layers for a specific glyph\n * @param {integer} glyphIndex\n * @returns {Array<Object>} array of layer objects {glyph, paletteIndex}\n */\n get(glyphIndex) {\n const font = this.font;\n const layers = [];\n const colr = font.tables.colr;\n const cpal = font.tables.cpal;\n if (!colr || !cpal) {\n return layers;\n }\n const baseGlyph = binarySearch(colr.baseGlyphRecords, \"glyphID\", glyphIndex);\n if (!baseGlyph) {\n return layers;\n }\n const firstIndex = baseGlyph.firstLayerIndex;\n const numLayers = baseGlyph.numLayers;\n for (let l = 0; l < numLayers; l++) {\n const layer = colr.layerRecords[firstIndex + l];\n layers.push({\n glyph: font.glyphs.get(layer.glyphID),\n paletteIndex: layer.paletteIndex\n });\n }\n return layers;\n }\n /**\n * Adds one or more layers to a glyph, at the end or at a specific position.\n * @param {integer} glyphIndex glyph index to add the layer(s) to.\n * @param {Array|Object} layers layer object {glyph, paletteIndex}/{glyphID, paletteIndex} or array of layer objects.\n * @param {integer?} position position to insert the layers at (will default to adding at the end).\n */\n add(glyphIndex, layers, position) {\n const currentLayers = this.get(glyphIndex);\n layers = Array.isArray(layers) ? layers : [layers];\n if (position === void 0 || position === Infinity || position > currentLayers.length) {\n position = currentLayers.length;\n } else if (position < 0) {\n position = currentLayers.length + 1 + position % (currentLayers.length + 1);\n if (position >= currentLayers.length + 1) {\n position -= currentLayers.length + 1;\n }\n }\n const newLayers = [];\n for (let i = 0; i < position; i++) {\n const glyphID = Number.isInteger(currentLayers[i].glyph) ? currentLayers[i].glyph : currentLayers[i].glyph.index;\n newLayers.push({\n glyphID,\n paletteIndex: currentLayers[i].paletteIndex\n });\n }\n for (const layer of layers) {\n const glyphID = Number.isInteger(layer.glyph) ? layer.glyph : layer.glyph.index;\n newLayers.push({\n glyphID,\n paletteIndex: layer.paletteIndex\n });\n }\n for (let i = position; i < currentLayers.length; i++) {\n const glyphID = Number.isInteger(currentLayers[i].glyph) ? currentLayers[i].glyph : currentLayers[i].glyph.index;\n newLayers.push({\n glyphID,\n paletteIndex: currentLayers[i].paletteIndex\n });\n }\n this.updateColrTable(glyphIndex, newLayers);\n }\n /**\n * Sets a color glyph layer's paletteIndex property to a new index\n * @param {integer} glyphIndex glyph in the font by zero-based glyph index\n * @param {integer} layerIndex layer in the glyph by zero-based layer index\n * @param {integer} paletteIndex new color to set for the layer by zero-based index in any palette\n */\n setPaletteIndex(glyphIndex, layerIndex, paletteIndex) {\n let layers = this.get(glyphIndex);\n if (layers[layerIndex]) {\n layers = layers.map((layer, index) => ({\n glyphID: layer.glyph.index,\n paletteIndex: index === layerIndex ? paletteIndex : layer.paletteIndex\n }));\n this.updateColrTable(glyphIndex, layers);\n } else {\n console.error(\"Invalid layer index\");\n }\n }\n /**\n * Removes one or more layers from a glyph.\n * @param {integer} glyphIndex glyph index to remove the layer(s) from\n * @param {integer} start index to remove the layer at\n * @param {integer?} end (optional) if provided, removes all layers from start index to (and including) end index\n */\n remove(glyphIndex, start, end = start) {\n let currentLayers = this.get(glyphIndex);\n currentLayers = currentLayers.map((layer) => ({\n glyphID: layer.glyph.index,\n paletteIndex: layer.paletteIndex\n }));\n currentLayers.splice(start, end - start + 1);\n this.updateColrTable(glyphIndex, currentLayers);\n }\n /**\n * Mainly used internally. Mainly used internally. Updates the colr table, adding a baseGlyphRecord if needed,\n * ensuring that it's inserted at the correct position, updating numLayers, and adjusting firstLayerIndex values\n * for all baseGlyphRecords according to any deletions or insertions.\n * @param {integer} glyphIndex \n * @param {Array<Object>} layers array of layer objects {glyphID, paletteIndex}\n */\n updateColrTable(glyphIndex, layers) {\n this.ensureCOLR();\n const font = this.font;\n const colr = font.tables.colr;\n let index = binarySearchIndex(colr.baseGlyphRecords, \"glyphID\", glyphIndex);\n const addBaseGlyph = index === -1;\n if (addBaseGlyph) {\n const newBaseGlyphRecord = { glyphID: glyphIndex, firstLayerIndex: colr.layerRecords.length, numLayers: 0 };\n index = binarySearchInsert(colr.baseGlyphRecords, \"glyphID\", newBaseGlyphRecord);\n }\n const baseGlyphRecord = colr.baseGlyphRecords[index];\n const originalNumLayers = baseGlyphRecord.numLayers;\n const newNumLayers = layers.length;\n const layerDiff = newNumLayers - originalNumLayers;\n if (layerDiff > 0) {\n const newLayers = layers.slice(originalNumLayers).map((layer) => ({\n glyphID: layer.glyphID,\n paletteIndex: layer.paletteIndex\n }));\n colr.layerRecords.splice(baseGlyphRecord.firstLayerIndex + originalNumLayers, 0, ...newLayers);\n } else if (layerDiff < 0) {\n colr.layerRecords.splice(baseGlyphRecord.firstLayerIndex + newNumLayers, -layerDiff);\n }\n for (let i = 0; i < Math.min(originalNumLayers, newNumLayers); i++) {\n colr.layerRecords[baseGlyphRecord.firstLayerIndex + i] = {\n glyphID: layers[i].glyphID,\n paletteIndex: layers[i].paletteIndex\n };\n }\n baseGlyphRecord.numLayers = newNumLayers;\n if (layerDiff !== 0) {\n for (let i = 0; i < colr.baseGlyphRecords.length; i++) {\n const sibling = colr.baseGlyphRecords[i];\n if (i === index || sibling.firstLayerIndex < baseGlyphRecord.firstLayerIndex) continue;\n colr.baseGlyphRecords[i].firstLayerIndex += layerDiff;\n }\n }\n }\n};\n\n// src/svgimages.mjs\nvar SVGImageManager = class {\n /**\n * @param {opentype.Font} font\n */\n constructor(font) {\n this.font = font;\n this.cache = /* @__PURE__ */ new WeakMap();\n }\n /**\n * @param {number} glyphIndex\n * @returns {SvgImage | undefined}\n */\n get(glyphIndex) {\n const svgImageCacheEntry = this.getOrCreateSvgImageCacheEntry(glyphIndex);\n return svgImageCacheEntry && svgImageCacheEntry.image;\n }\n /**\n * @param {number} glyphIndex\n * @returns {Promise<SvgImage> | undefined}\n */\n getAsync(glyphIndex) {\n const svgImageCacheEntry = this.getOrCreateSvgImageCacheEntry(glyphIndex);\n return svgImageCacheEntry && svgImageCacheEntry.promise;\n }\n /**\n * @param {number} glyphIndex\n * @returns {SVGImageCacheEntry | undefined}\n */\n getOrCreateSvgImageCacheEntry(glyphIndex) {\n const svg = this.font.tables.svg;\n if (svg === void 0) return;\n const svgBuf = svg.get(glyphIndex);\n if (svgBuf === void 0) return;\n let svgDocCacheEntry = this.cache.get(svgBuf);\n if (svgDocCacheEntry === void 0) {\n svgDocCacheEntry = createSvgDocCacheEntry(svgBuf);\n this.cache.set(svgBuf, svgDocCacheEntry);\n }\n let svgImageCacheEntry = svgDocCacheEntry.images.get(glyphIndex);\n if (svgImageCacheEntry === void 0) {\n svgImageCacheEntry = createSvgImageCacheEntry(this.font, svgDocCacheEntry.template, glyphIndex);\n svgImageCacheEntry.promise.then((svgImage) => {\n svgImageCacheEntry.image = svgImage;\n if (typeof this.font.onGlyphUpdated === \"function\") {\n try {\n this.font.onGlyphUpdated(glyphIndex);\n } catch (error) {\n console.error(\"font.onGlyphUpdated\", glyphIndex, error);\n }\n }\n });\n svgDocCacheEntry.images.set(glyphIndex, svgImageCacheEntry);\n }\n return svgImageCacheEntry;\n }\n};\nfunction createSvgDocCacheEntry(svgBuf) {\n return {\n template: decodeSvgDocument(svgBuf).then(makeSvgTemplate),\n images: /* @__PURE__ */ new Map()\n };\n}\nfunction createSvgImageCacheEntry(font, svgTemplatePromise, glyphIndex) {\n return {\n promise: svgTemplatePromise.then((svgTemplate) => {\n let svgText;\n if (typeof svgTemplate === \"string\") {\n svgText = svgTemplate;\n } else {\n svgTemplate[4] = glyphIndex;\n svgText = svgTemplate.join(\"\");\n }\n const svgImage = makeSvgImage(svgText, font.unitsPerEm);\n return svgImage.image.decode().then(() => svgImage);\n }),\n image: void 0\n };\n}\nvar decodeSvgDocument = typeof DecompressionStream === \"function\" ? decodeSvgDocumentWithDecompressionStream : decodeSvgDocumentWithTinyInflate;\nfunction decodeSvgDocumentWithTinyInflate(buf) {\n try {\n return Promise.resolve(new TextDecoder().decode(isGzip(buf) ? unGzip(buf) : buf));\n } catch (error) {\n return Promise.reject(error);\n }\n}\nfunction decodeSvgDocumentWithDecompressionStream(buf) {\n if (isGzip(buf)) {\n return new Response(new Response(buf).body.pipeThrough(new DecompressionStream(\"gzip\"))).text();\n }\n try {\n return Promise.resolve(new TextDecoder().decode(buf));\n } catch (error) {\n return Promise.reject(error);\n }\n}\nfunction makeSvgTemplate(text) {\n const documentStart = text.indexOf(\"<svg\");\n const contentStart = text.indexOf(\">\", documentStart + 4) + 1;\n if (/ id=['\"]glyph\\d+['\"]/.test(text.substring(documentStart, contentStart))) {\n return text;\n }\n const contentEnd = text.lastIndexOf(\"</svg>\");\n return [\n text.substring(0, contentStart),\n \"<defs>\",\n text.substring(contentStart, contentEnd),\n '</defs><use href=\"#glyph',\n \"\",\n '\"/>',\n text.substring(contentEnd)\n ];\n}\nfunction makeSvgImage(text, unitsPerEm) {\n const svgDocument = new DOMParser().parseFromString(text, \"image/svg+xml\");\n const svg = svgDocument.documentElement;\n const viewBoxVal = svg.viewBox.baseVal;\n const widthVal = svg.width.baseVal;\n const heightVal = svg.height.baseVal;\n let xScale = 1;\n let yScale = 1;\n if (viewBoxVal.width > 0 && viewBoxVal.height > 0) {\n if (widthVal.unitType === 1) {\n xScale = widthVal.valueInSpecifiedUnits / viewBoxVal.width;\n yScale = heightVal.unitType === 1 ? heightVal.valueInSpecifiedUnits / viewBoxVal.height : xScale;\n } else if (heightVal.unitType === 1) {\n yScale = heightVal.valueInSpecifiedUnits / viewBoxVal.height;\n xScale = yScale;\n } else if (unitsPerEm) {\n xScale = unitsPerEm / viewBoxVal.width;\n yScale = unitsPerEm / viewBoxVal.height;\n }\n }\n const div = document.createElement(\"div\");\n div.style.position = \"fixed\";\n div.style.visibility = \"hidden\";\n div.appendChild(svg);\n document.body.appendChild(div);\n const bbox = svg.getBBox();\n document.body.removeChild(div);\n const leftSideBearing = (bbox.x - viewBoxVal.x) * xScale;\n const baseline = (viewBoxVal.y - bbox.y) * yScale;\n const width = bbox.width * xScale;\n const height = bbox.height * yScale;\n svg.setAttribute(\"viewBox\", [bbox.x, bbox.y, bbox.width, bbox.height].join(\" \"));\n if (xScale !== 1) svg.setAttribute(\"width\", width);\n if (yScale !== 1) svg.setAttribute(\"height\", height);\n const image = new Image(width, height);\n image.src = \"data:image/svg+xml;charset=utf-8,\" + encodeURIComponent(svg.outerHTML);\n return { leftSideBearing, baseline, image };\n}\n\n// src/tables/glyf.mjs\nvar _resolving = /* @__PURE__ */ new WeakMap();\nfunction parseGlyphCoordinate(p, flag, previousValue, shortVectorBitMask, sameBitMask) {\n let v;\n if ((flag & shortVectorBitMask) > 0) {\n v = p.parseByte();\n if ((flag & sameBitMask) === 0) {\n v = -v;\n }\n v = previousValue + v;\n } else {\n if ((flag & sameBitMask) > 0) {\n v = previousValue;\n } else {\n v = previousValue + p.parseShort();\n }\n }\n return v;\n}\nfunction parseGlyph(glyph, data, start) {\n const p = new parse_default.Parser(data, start);\n glyph._numberOfContours = p.parseShort();\n glyph._xMin = p.parseShort();\n glyph._yMin = p.parseShort();\n glyph._xMax = p.parseShort();\n glyph._yMax = p.parseShort();\n let flags;\n let flag;\n if (glyph._numberOfContours > 0) {\n const endPointIndices = glyph.endPointIndices = [];\n for (let i = 0; i < glyph._numberOfContours; i += 1) {\n endPointIndices.push(p.parseUShort());\n }\n glyph.instructionLength = p.parseUShort();\n glyph.instructions = [];\n for (let i = 0; i < glyph.instructionLength; i += 1) {\n glyph.instructions.push(p.parseByte());\n }\n const numberOfCoordinates = endPointIndices[endPointIndices.length - 1] + 1;\n flags = [];\n for (let i = 0; i < numberOfCoordinates; i += 1) {\n flag = p.parseByte();\n flags.push(flag);\n if ((flag & 8) > 0) {\n const repeatCount = p.parseByte();\n for (let j = 0; j < repeatCount; j += 1) {\n flags.push(flag);\n i += 1;\n }\n }\n }\n check_default.argument(flags.length === numberOfCoordinates, \"Bad flags.\");\n if (endPointIndices.length > 0) {\n const points = [];\n let point;\n if (numberOfCoordinates > 0) {\n for (let i = 0; i < numberOfCoordinates; i += 1) {\n flag = flags[i];\n point = {};\n point.onCurve = !!(flag & 1);\n point.lastPointOfContour = endPointIndices.indexOf(i) >= 0;\n points.push(point);\n }\n let px = 0;\n for (let i = 0; i < numberOfCoordinates; i += 1) {\n flag = flags[i];\n point = points[i];\n point.x = parseGlyphCoordinate(p, flag, px, 2, 16);\n px = point.x;\n }\n let py = 0;\n for (let i = 0; i < numberOfCoordinates; i += 1) {\n flag = flags[i];\n point = points[i];\n point.y = parseGlyphCoordinate(p, flag, py, 4, 32);\n py = point.y;\n }\n }\n glyph.points = points;\n } else {\n glyph.points = [];\n }\n } else if (glyph._numberOfContours === 0) {\n glyph.points = [];\n } else {\n glyph.isComposite = true;\n glyph.points = [];\n glyph.components = [];\n let moreComponents = true;\n while (moreComponents) {\n flags = p.parseUShort();\n const component = {\n glyphIndex: p.parseUShort(),\n xScale: 1,\n scale01: 0,\n scale10: 0,\n yScale: 1,\n dx: 0,\n dy: 0\n };\n if ((flags & 1) > 0) {\n if ((flags & 2) > 0) {\n component.dx = p.parseShort();\n component.dy = p.parseShort();\n } else {\n component.matchedPoints = [p.parseUShort(), p.parseUShort()];\n }\n } else {\n if ((flags & 2) > 0) {\n component.dx = p.parseChar();\n component.dy = p.parseChar();\n } else {\n component.matchedPoints = [p.parseByte(), p.parseByte()];\n }\n }\n if ((flags & 8) > 0) {\n component.xScale = component.yScale = p.parseF2Dot14();\n } else if ((flags & 64) > 0) {\n component.xScale = p.parseF2Dot14();\n component.yScale = p.parseF2Dot14();\n } else if ((flags & 128) > 0) {\n component.xScale = p.parseF2Dot14();\n component.scale01 = p.parseF2Dot14();\n component.scale10 = p.parseF2Dot14();\n component.yScale = p.parseF2Dot14();\n }\n glyph.components.push(component);\n moreComponents = !!(flags & 32);\n }\n if (flags & 256) {\n glyph.instructionLength = p.parseUShort();\n glyph.instructions = [];\n for (let i = 0; i < glyph.instructionLength; i += 1) {\n glyph.instructions.push(p.parseByte());\n }\n }\n }\n}\nfunction transformPoints(points, transform) {\n const newPoints = [];\n for (let i = 0; i < points.length; i += 1) {\n const pt = points[i];\n const newPt = {\n x: transform.xScale * pt.x + transform.scale10 * pt.y + transform.dx,\n y: transform.scale01 * pt.x + transform.yScale * pt.y + transform.dy,\n onCurve: pt.onCurve,\n lastPointOfContour: pt.lastPointOfContour\n };\n newPoints.push(newPt);\n }\n return newPoints;\n}\nfunction getContours(points) {\n const contours = [];\n let currentContour = [];\n for (let i = 0; i < points.length; i += 1) {\n const pt = points[i];\n currentContour.push(pt);\n if (pt.lastPointOfContour) {\n contours.push(currentContour);\n currentContour = [];\n }\n }\n check_default.argument(currentContour.length === 0, \"There are still points left in the current contour.\");\n return contours;\n}\nfunction getPath(points) {\n const p = new path_default();\n if (!points) {\n return p;\n }\n const contours = getContours(points);\n for (let contourIndex = 0; contourIndex < contours.length; ++contourIndex) {\n const contour = contours[contourIndex];\n let curr = contour[contour.length - 1];\n let next = contour[0];\n if (curr.onCurve) {\n p.moveTo(curr.x, curr.y);\n } else {\n if (next.onCurve) {\n p.moveTo(next.x, next.y);\n } else {\n const start = { x: (curr.x + next.x) * 0.5, y: (curr.y + next.y) * 0.5 };\n p.moveTo(start.x, start.y);\n }\n }\n for (let i = 0; i < contour.length; ++i) {\n curr = next;\n next = contour[(i + 1) % contour.length];\n if (curr.onCurve) {\n p.lineTo(curr.x, curr.y);\n } else {\n let next2 = next;\n if (!next.onCurve) {\n next2 = { x: (curr.x + next.x) * 0.5, y: (curr.y + next.y) * 0.5 };\n }\n p.quadraticCurveTo(curr.x, curr.y, next2.x, next2.y);\n }\n }\n p.closePath();\n }\n return p;\n}\nfunction buildPath(glyphs, glyph) {\n if (glyph.isComposite) {\n if (!_resolving.has(glyphs)) {\n _resolving.set(glyphs, /* @__PURE__ */ new Set());\n }\n const resolving = _resolving.get(glyphs);\n resolving.add(glyph.index);\n try {\n for (let j = 0; j < glyph.components.length; j += 1) {\n const component = glyph.components[j];\n if (resolving.has(component.glyphIndex)) {\n continue;\n }\n const componentGlyph = glyphs.get(component.glyphIndex);\n componentGlyph.getPath();\n if (componentGlyph.points) {\n let transformedPoints;\n if (component.matchedPoints === void 0) {\n transformedPoints = transformPoints(componentGlyph.points, component);\n } else {\n if (component.matchedPoints[0] > glyph.points.length - 1 || component.matchedPoints[1] > componentGlyph.points.length - 1) {\n throw Error(\"Matched points out of range in \" + glyph.name);\n }\n const firstPt = glyph.points[component.matchedPoints[0]];\n let secondPt = componentGlyph.points[component.matchedPoints[1]];\n const transform = {\n xScale: component.xScale,\n scale01: component.scale01,\n scale10: component.scale10,\n yScale: component.yScale,\n dx: 0,\n dy: 0\n };\n secondPt = transformPoints([secondPt], transform)[0];\n transform.dx = firstPt.x - secondPt.x;\n transform.dy = firstPt.y - secondPt.y;\n transformedPoints = transformPoints(componentGlyph.points, transform);\n }\n glyph.points = glyph.points.concat(transformedPoints);\n }\n }\n } finally {\n resolving.delete(glyph.index);\n }\n }\n return getPath(glyph.points);\n}\nfunction parseGlyfTableAll(data, start, loca, font) {\n const glyphs = new glyphset_default.GlyphSet(font);\n for (let i = 0; i < loca.length - 1; i += 1) {\n const offset = loca[i];\n const nextOffset = loca[i + 1];\n if (offset !== nextOffset) {\n glyphs.push(i, glyphset_default.ttfGlyphLoader(font, i, parseGlyph, data, start + offset, buildPath));\n } else {\n glyphs.push(i, glyphset_default.glyphLoader(font, i));\n }\n }\n return glyphs;\n}\nfunction parseGlyfTableOnLowMemory(data, start, loca, font) {\n const glyphs = new glyphset_default.GlyphSet(font);\n font._push = function(i) {\n const offset = loca[i];\n const nextOffset = loca[i + 1];\n if (offset !== nextOffset) {\n glyphs.push(i, glyphset_default.ttfGlyphLoader(font, i, parseGlyph, data, start + offset, buildPath));\n } else {\n glyphs.push(i, glyphset_default.glyphLoader(font, i));\n }\n };\n return glyphs;\n}\nfunction parseGlyfTable(data, start, loca, font, opt) {\n if (opt.lowMemory)\n return parseGlyfTableOnLowMemory(data, start, loca, font);\n else\n return parseGlyfTableAll(data, start, loca, font);\n}\nvar glyf_default = { getPath, parse: parseGlyfTable };\n\n// src/variationprocessor.mjs\nvar VariationProcessor = class {\n constructor(font) {\n this.font = font;\n }\n /**\n * Modifies a coords object to make sure that tags have a length of 4\n * @param {Object} coords - variation coordinates\n */\n normalizeCoordTags(coords) {\n for (const tag in coords) {\n if (tag.length < 4) {\n const padded = tag.padEnd(4, \" \");\n coords[padded] === void 0 && (coords[padded] = coords[tag]);\n delete coords[tag];\n }\n }\n }\n /**\n * Normalizes the coordinates from the axis ranges to a range of -1 to 1.\n * @param {Object} coords - The coordinates object to normalize.\n * @returns {Array<number>} The normalized coordinates as an array\n */\n getNormalizedCoords(coords) {\n if (!coords) {\n coords = this.font.variation.get();\n }\n let normalized = [];\n this.normalizeCoordTags(coords);\n for (let i = 0; i < this.fvar().axes.length; i++) {\n const axis = this.fvar().axes[i];\n let tagValue = coords[axis.tag];\n if (tagValue === void 0) {\n tagValue = axis.defaultValue;\n }\n if (tagValue < axis.defaultValue) {\n normalized.push((tagValue - axis.defaultValue + Number.EPSILON) / (axis.defaultValue - axis.minValue + Number.EPSILON));\n } else {\n normalized.push((tagValue - axis.defaultValue + Number.EPSILON) / (axis.maxValue - axis.defaultValue + Number.EPSILON));\n }\n }\n if (this.avar()) {\n for (let i = 0; i < this.avar().axisSegmentMaps.length; i++) {\n let segment = this.avar().axisSegmentMaps[i];\n for (let j = 0; j < segment.axisValueMaps.length; j++) {\n let pair = segment.axisValueMaps[j];\n if (j >= 1 && normalized[i] < pair.fromCoordinate) {\n let prev = segment.axisValueMaps[j - 1];\n normalized[i] = ((normalized[i] - prev.fromCoordinate) * (pair.toCoordinate - prev.toCoordinate) + Number.EPSILON) / (pair.fromCoordinate - prev.fromCoordinate + Number.EPSILON) + prev.toCoordinate;\n break;\n }\n }\n }\n }\n return normalized;\n }\n /**\n * Interpolates points within a glyph if deltas are not provided for all points.\n * @param {Array<Object>} points - The points to be interpolated.\n * @param {Array<Object>} glyphPoints - Reference points from the glyph.\n * @param {Object} deltaMap - A map indicating which points have deltas.\n */\n interpolatePoints(points, glyphPoints, deltaMap) {\n if (points.length === 0) {\n return;\n }\n let pointIndex = 0;\n while (pointIndex < points.length) {\n let firstPoint = pointIndex;\n let endPoint = pointIndex;\n let point = points[endPoint];\n while (!point.lastPointOfContour) {\n point = points[++endPoint];\n }\n while (pointIndex <= endPoint && !deltaMap[pointIndex]) {\n pointIndex++;\n }\n if (pointIndex > endPoint) {\n continue;\n }\n let firstDelta = pointIndex;\n let curDelta = pointIndex;\n pointIndex++;\n while (pointIndex <= endPoint) {\n if (deltaMap[pointIndex]) {\n this.deltaInterpolate(curDelta + 1, pointIndex - 1, curDelta, pointIndex, glyphPoints, points);\n curDelta = pointIndex;\n }\n pointIndex++;\n }\n if (curDelta === firstDelta) {\n this.deltaShift(firstPoint, endPoint, curDelta, glyphPoints, points);\n } else {\n this.deltaInterpolate(curDelta + 1, endPoint, curDelta, firstDelta, glyphPoints, points);\n if (firstDelta > 0) {\n this.deltaInterpolate(firstPoint, firstDelta - 1, curDelta, firstDelta, glyphPoints, points);\n }\n }\n pointIndex = endPoint + 1;\n }\n }\n /**\n * Interpolates delta values between two points.\n * @param {number} p1 - Start point index for interpolation.\n * @param {number} p2 - End point index for interpolation.\n * @param {number} ref1 - Reference point index for the start delta.\n * @param {number} ref2 - Reference point index for the end delta.\n * @param {Array<Object>} glyphPoints - Reference points from the glyph.\n * @param {Array<Object>} points - The points to be adjusted.\n */\n deltaInterpolate(p1, p2, ref1, ref2, glyphPoints, points) {\n if (p1 > p2) {\n return;\n }\n let iterable = [\"x\", \"y\"];\n for (let i = 0; i < iterable.length; i++) {\n let k = iterable[i];\n if (glyphPoints[ref1][k] > glyphPoints[ref2][k]) {\n var p = ref1;\n ref1 = ref2;\n ref2 = p;\n }\n let in1 = glyphPoints[ref1][k];\n let in2 = glyphPoints[ref2][k];\n let out1 = points[ref1][k];\n let out2 = points[ref2][k];\n if (in1 !== in2 || out1 === out2) {\n let scale = in1 === in2 ? 0 : (out2 - out1) / (in2 - in1);\n for (let p3 = p1; p3 <= p2; p3++) {\n let out = glyphPoints[p3][k];\n if (out <= in1) {\n out += out1 - in1;\n } else if (out >= in2) {\n out += out2 - in2;\n } else {\n out = out1 + (out - in1) * scale;\n }\n points[p3][k] = out;\n }\n }\n }\n }\n /**\n * Applies a delta shift to a range of points based on a reference point.\n * @param {number} p1 - Start point index for shifting.\n * @param {number} p2 - End point index for shifting.\n * @param {number} ref - Reference point index.\n * @param {Array<Object>} glyphPoints - Reference points from the glyph.\n * @param {Array<Object>} points - The points to be shifted.\n */\n deltaShift(p1, p2, ref, glyphPoints, points) {\n let deltaX = points[ref].x - glyphPoints[ref].x;\n let deltaY = points[ref].y - glyphPoints[ref].y;\n if (deltaX === 0 && deltaY === 0) {\n return;\n }\n for (let p = p1; p <= p2; p++) {\n if (p !== ref) {\n points[p].x += deltaX;\n points[p].y += deltaY;\n }\n }\n }\n /**\n * Transforms glyph components based on variation data.\n * @param {Glyph} glyph - The composite glyph to transform.\n * @param {Array<Object>} transformedPoints - Points that are already transformed.\n * @param {Object} coords - Variation coordinates.\n * @param {Array<number>} tuplePoints - Points that are part of the tuple.\n * @param {Object} header - Header information from the variation data.\n * @param {number} factor - The scaling factor for the transformation.\n */\n transformComponents(glyph, transformedPoints, coords, tuplePoints, header, factor) {\n let pointsIndex = 0;\n for (let c = 0; c < glyph.components.length; c++) {\n const component = glyph.components[c];\n const componentGlyph = this.font.glyphs.get(component.glyphIndex);\n const componentTransform = copyComponent(component);\n const deltaIndex = tuplePoints.indexOf(c);\n if (deltaIndex > -1) {\n componentTransform.dx += Math.round(header.deltas[deltaIndex] * factor);\n componentTransform.dy += Math.round(header.deltasY[deltaIndex] * factor);\n }\n const transformedComponentPoints = transformPoints(this.getTransform(componentGlyph, coords).points, componentTransform);\n transformedPoints.splice(pointsIndex, transformedComponentPoints.length, ...transformedComponentPoints);\n pointsIndex += componentGlyph.points.length;\n }\n }\n applyTupleVariationStore(variationData, points, coords, flavor = \"gvar\", args = {}) {\n if (!coords) {\n coords = this.font.variation.get();\n }\n const normalizedCoords = this.getNormalizedCoords(coords);\n const { headers, sharedPoints } = variationData;\n const axisCount = this.fvar().axes.length;\n let transformedPoints;\n if (flavor === \"gvar\") {\n transformedPoints = points.map(copyPoint);\n } else if (flavor === \"cvar\") {\n transformedPoints = [...points];\n }\n for (let h = 0; h < headers.length; h++) {\n const header = headers[h];\n let factor = 1;\n for (let a = 0; a < axisCount; a++) {\n let tupleCoords = [0];\n switch (flavor) {\n case \"gvar\":\n tupleCoords = header.peakTuple ? header.peakTuple : this.gvar().sharedTuples[header.sharedTupleRecordsIndex];\n break;\n case \"cvar\":\n tupleCoords = header.peakTuple;\n break;\n }\n if (tupleCoords[a] === 0) {\n continue;\n }\n if (normalizedCoords[a] === 0) {\n factor = 0;\n break;\n }\n if (!header.intermediateStartTuple) {\n if (normalizedCoords[a] < Math.min(0, tupleCoords[a]) || normalizedCoords[a] > Math.max(0, tupleCoords[a])) {\n factor = 0;\n break;\n }\n factor = (factor * normalizedCoords[a] + Number.EPSILON) / (tupleCoords[a] + Number.EPSILON);\n } else {\n if (normalizedCoords[a] < header.intermediateStartTuple[a] || normalizedCoords[a] > header.intermediateEndTuple[a]) {\n factor = 0;\n break;\n } else if (normalizedCoords[a] < tupleCoords[a]) {\n factor = factor * (normalizedCoords[a] - header.intermediateStartTuple[a] + Number.EPSILON) / (tupleCoords[a] - header.intermediateStartTuple[a] + Number.EPSILON);\n } else {\n factor = factor * (header.intermediateEndTuple[a] - normalizedCoords[a] + Number.EPSILON) / (header.intermediateEndTuple[a] - tupleCoords[a] + Number.EPSILON);\n }\n }\n }\n if (factor === 0) {\n continue;\n }\n const tuplePoints = header.privatePoints.length ? header.privatePoints : sharedPoints;\n if (flavor === \"gvar\" && args.glyph && args.glyph.isComposite) {\n this.transformComponents(args.glyph, transformedPoints, coords, tuplePoints, header, factor);\n } else if (tuplePoints.length === 0) {\n for (let i = 0; i < transformedPoints.length; i++) {\n const point = transformedPoints[i];\n if (flavor === \"gvar\") {\n transformedPoints[i] = {\n x: Math.round(point.x + header.deltas[i] * factor),\n y: Math.round(point.y + header.deltasY[i] * factor),\n onCurve: point.onCurve,\n lastPointOfContour: point.lastPointOfContour\n };\n } else if (flavor === \"cvar\") {\n transformedPoints[i] = Math.round(point + header.deltas[i] * factor);\n }\n }\n } else {\n let interpolatedPoints;\n if (flavor === \"gvar\") {\n interpolatedPoints = transformedPoints.map(copyPoint);\n } else if (flavor === \"cvar\") {\n interpolatedPoints = transformedPoints;\n }\n const deltaMap = Array(points.length).fill(false);\n for (let i = 0; i < tuplePoints.length; i++) {\n let pointIndex = tuplePoints[i];\n if (pointIndex < points.length) {\n let point = interpolatedPoints[pointIndex];\n if (flavor === \"gvar\") {\n deltaMap[pointIndex] = true;\n point.x += header.deltas[i] * factor;\n point.y += header.deltasY[i] * factor;\n } else if (flavor === \"cvar\") {\n transformedPoints[pointIndex] = Math.round(point + header.deltas[i] * factor);\n }\n }\n }\n if (flavor === \"gvar\") {\n this.interpolatePoints(interpolatedPoints, transformedPoints, deltaMap);\n for (let i = 0; i < points.length; i++) {\n let deltaX = interpolatedPoints[i].x - transformedPoints[i].x;\n let deltaY = interpolatedPoints[i].y - transformedPoints[i].y;\n transformedPoints[i].x = Math.round(transformedPoints[i].x + deltaX);\n transformedPoints[i].y = Math.round(transformedPoints[i].y + deltaY);\n }\n }\n }\n }\n return transformedPoints;\n }\n /**\n * Retrieves a transformed copy of a glyph based on the provided variation coordinates, or the glyph itself if no variation was applied\n * @param {opentype.Glyph|number} glyph - Glyph or index of glyph to transform.\n * @param {Object} coords - Variation coords object (will fall back to variation coords in the defaultRenderOptions)\n * @returns {opentype.Glyph} - The transformed glyph.\n */\n getTransform(glyph, coords) {\n if (Number.isInteger(glyph)) {\n glyph = this.font.glyphs.get(glyph);\n }\n const hasBlend = glyph.getBlendPath;\n const hasPoints = !!(glyph.points && glyph.points.length);\n let transformedGlyph = glyph;\n if (hasBlend || hasPoints) {\n if (!coords) {\n coords = this.font.variation.get();\n }\n if (hasPoints) {\n const variationData = this.gvar() && this.gvar().glyphVariations[glyph.index];\n if (variationData) {\n const glyphPoints = glyph.points;\n let transformedPoints = this.applyTupleVariationStore(variationData, glyphPoints, coords, \"gvar\", { glyph });\n transformedGlyph = new glyph_default(Object.assign({}, glyph, { points: transformedPoints, path: getPath(transformedPoints) }));\n }\n } else if (hasBlend) {\n const blendPath = glyph.getBlendPath(coords);\n transformedGlyph = new glyph_default(Object.assign({}, glyph, { path: blendPath }));\n }\n }\n if (this.font.tables.hvar) {\n glyph._advanceWidth = typeof glyph._advanceWidth !== \"undefined\" ? glyph._advanceWidth : glyph.advanceWidth;\n glyph.advanceWidth = transformedGlyph.advanceWidth = Math.round(glyph._advanceWidth + this.getVariableAdjustment(transformedGlyph.index, \"hvar\", \"advanceWidth\", coords));\n glyph._leftSideBearing = typeof glyph._leftSideBearing !== \"undefined\" ? glyph._leftSideBearing : glyph.leftSideBearing;\n glyph.leftSideBearing = transformedGlyph.leftSideBearing = Math.round(glyph._leftSideBearing + this.getVariableAdjustment(transformedGlyph.index, \"hvar\", \"lsb\", coords));\n }\n return transformedGlyph;\n }\n getCvarTransform(coords) {\n const cvt = this.font.tables.cvt;\n const variationData = this.cvar();\n if (!cvt || !cvt.length || !variationData || !variationData.headers.length) return cvt;\n return this.applyTupleVariationStore(variationData, cvt, coords, \"cvar\");\n }\n /**\n * Calculates the variable adjustment for a glyph property from variation data.\n * @param {number} gid - Glyph ID.\n * @param {string} tableName - The name of the variation data table.\n * @param {string} parameter - The property to adjust.\n * @param {Object} coords - Variation coordinates.\n * @returns {number} - The calculated adjustment.\n */\n getVariableAdjustment(gid, tableName, parameter, coords) {\n coords = coords || this.font.variation.get();\n let outerIndex, innerIndex;\n const table = this.font.tables[tableName];\n if (!table) {\n throw Error(`trying to get variation adjustment from non-existent table \"${table}\"`);\n }\n if (!table.itemVariationStore) {\n throw Error(`trying to get variation adjustment from table \"${table}\" which does not have an itemVariationStore`);\n }\n const mapSize = table[parameter] && table[parameter].map.length;\n if (mapSize) {\n let i = gid;\n if (i >= mapSize) {\n i = mapSize - 1;\n }\n ({ outerIndex, innerIndex } = table[parameter].map[i]);\n } else {\n outerIndex = 0;\n innerIndex = gid;\n }\n return this.getDelta(table.itemVariationStore, outerIndex, innerIndex, coords);\n }\n /**\n * Retrieves the delta value from a variation store.\n * @param {Object} itemStore - The item variation store.\n * @param {number} outerIndex - The outer index in the variation subtables.\n * @param {number} innerIndex - The inner index in the delta sets.\n * @param {Object} coords - Variation coordinates.\n * @returns {number} - The delta value.\n */\n getDelta(itemStore, outerIndex, innerIndex, coords) {\n if (outerIndex >= itemStore.itemVariationSubtables.length) {\n return 0;\n }\n let varData = itemStore.itemVariationSubtables[outerIndex];\n if (innerIndex >= varData.deltaSets.length) {\n return 0;\n }\n let deltaSet = varData.deltaSets[innerIndex];\n let blendVector = this.getBlendVector(itemStore, outerIndex, coords);\n let netAdjustment = 0;\n for (let master = 0; master < varData.regionIndexes.length; master++) {\n netAdjustment += deltaSet[master] * blendVector[master];\n }\n return netAdjustment;\n }\n /**\n * Calculates the blend vector for a set of variation coordinates.\n * @param {Object} itemStore - The item variation store.\n * @param {number} itemIndex - Index of the current item in the variation subtables.\n * @param {Object} coords - Variation coordinates.\n * @returns {Array<number>} - The blend vector for the given coordinates.\n */\n getBlendVector(itemStore, itemIndex, coords) {\n if (!coords) {\n coords = this.font.variation.get();\n }\n let varData = itemStore.itemVariationSubtables[itemIndex];\n const normalizedCoords = this.getNormalizedCoords(coords);\n let blendVector = [];\n for (let master = 0; master < varData.regionIndexes.length; master++) {\n let scalar = 1;\n let regionIndex = varData.regionIndexes[master];\n let axes = itemStore.variationRegions[regionIndex].regionAxes;\n for (let j = 0; j < axes.length; j++) {\n let axis = axes[j];\n let axisScalar;\n if (axis.startCoord > axis.peakCoord || axis.peakCoord > axis.endCoord) {\n axisScalar = 1;\n } else if (axis.startCoord < 0 && axis.endCoord > 0 && axis.peakCoord !== 0) {\n axisScalar = 1;\n } else if (axis.peakCoord === 0) {\n axisScalar = 1;\n } else if (normalizedCoords[j] < axis.startCoord || normalizedCoords[j] > axis.endCoord) {\n axisScalar = 0;\n } else {\n if (normalizedCoords[j] === axis.peakCoord) {\n axisScalar = 1;\n } else if (normalizedCoords[j] < axis.peakCoord) {\n axisScalar = (normalizedCoords[j] - axis.startCoord + Number.EPSILON) / (axis.peakCoord - axis.startCoord + Number.EPSILON);\n } else {\n axisScalar = (axis.endCoord - normalizedCoords[j] + Number.EPSILON) / (axis.endCoord - axis.peakCoord + Number.EPSILON);\n }\n }\n scalar *= axisScalar;\n }\n blendVector[master] = scalar;\n }\n return blendVector;\n }\n /**\n * Helper method that returns the font's avar table if present\n * @returns {Object|undefined}\n */\n avar() {\n return this.font.tables.avar;\n }\n /**\n * Helper method that returns the font's cvar table if present\n * @returns {Object|undefined}\n */\n cvar() {\n return this.font.tables.cvar;\n }\n /**\n * Helper method that returns the font's fvar table if present\n * @returns {Object|undefined}\n */\n fvar() {\n return this.font.tables.fvar;\n }\n /**\n * Helper method that returns the font's gvar table if present\n * @returns {Object|undefined}\n */\n gvar() {\n return this.font.tables.gvar;\n }\n /**\n * Helper method that returns the font's hvar table if present\n * @returns {Object|undefined}\n */\n hvar() {\n return this.font.tables.hvar;\n }\n};\n\n// src/variation.mjs\nvar VariationManager = class {\n constructor(font) {\n this.font = font;\n this.process = new VariationProcessor(this.font);\n this.activateDefaultVariation();\n this.getTransform = this.process.getTransform.bind(this.process);\n }\n /**\n * Tries to determine the default instance and sets its variation data as the font.defaultRenderOptions.\n * If not defaultInstance can be determined, the default coordinates of all axes are used.\n */\n activateDefaultVariation() {\n const defaultInstance = this.getDefaultInstanceIndex();\n if (defaultInstance > -1) {\n this.set(defaultInstance);\n } else {\n this.set(this.getDefaultCoordinates());\n }\n }\n /**\n * Retrieves the default coordinates for the font's variation axes.\n * @returns {Object} An object mapping axis tags to their default values.\n */\n getDefaultCoordinates() {\n return this.fvar().axes.reduce((acc, axis) => {\n acc[axis.tag] = axis.defaultValue;\n return acc;\n }, {});\n }\n /**\n * Gets the index of the default variation instance or -1 if not able to determine\n * @returns {integer} default index or -1\n */\n getDefaultInstanceIndex() {\n const defaultCoordinates = this.getDefaultCoordinates();\n let defaultInstanceIndex = this.getInstanceIndex(defaultCoordinates);\n if (defaultInstanceIndex < 0) {\n defaultInstanceIndex = this.fvar().instances.findIndex((instance) => instance.name && instance.name.en === \"Regular\");\n }\n return defaultInstanceIndex;\n }\n /**\n * Retrieves the index of the variation instance matching the coordinates object or -1 if not able to determine\n * @param {integer|Object} coordinates An object where keys are axis tags and values are the corresponding variation values.\n * @returns {integer} The index of the matching instance or -1 if no match is found.\n */\n getInstanceIndex(coordinates) {\n return this.fvar().instances.findIndex(\n (instance) => Object.keys(coordinates).every(\n (axis) => instance.coordinates[axis] === coordinates[axis]\n )\n );\n }\n /**\n * Retrieves a variation instance by its zero-based index\n * @param {integer} index - zero-based index of the variation instance\n * @returns {Object} - variation instance or null if the index is invalid.\n */\n getInstance(index) {\n return this.fvar().instances && this.fvar().instances[index];\n }\n /**\n * Set the variation coordinates to use by default for rendering in the font.defaultRenderOptions\n * @param {integer|Object} instanceIdOrObject Either the zero-based index of a variation instance or an object with axis tags as keys and variation values as values\n */\n set(instanceIdOrObject) {\n let variationData;\n if (Number.isInteger(instanceIdOrObject)) {\n const instance = this.getInstance(instanceIdOrObject);\n if (!instance) {\n throw Error(`Invalid instance index ${instanceIdOrObject}`);\n }\n variationData = { ...instance.coordinates };\n } else {\n variationData = instanceIdOrObject;\n this.process.normalizeCoordTags(variationData);\n }\n variationData = Object.assign(\n {},\n this.font.defaultRenderOptions.variation,\n variationData\n );\n this.font.defaultRenderOptions = Object.assign(\n {},\n this.font.defaultRenderOptions,\n { variation: variationData }\n );\n }\n /**\n * Returns the variation coordinates currently set in the font.defaultRenderOptions\n * @returns {Object}\n */\n get() {\n return Object.assign({}, this.font.defaultRenderOptions.variation);\n }\n /**\n * Helper method that returns the font's avar table if present\n * @returns {Object|undefined}\n */\n avar() {\n return this.font.tables.avar;\n }\n /**\n * Helper method that returns the font's cvar table if present\n * @returns {Object|undefined}\n */\n cvar() {\n return this.font.tables.cvar;\n }\n /**\n * Helper method that returns the font's fvar table if present\n * @returns {Object|undefined}\n */\n fvar() {\n return this.font.tables.fvar;\n }\n /**\n * Helper method that returns the font's gvar table if present\n * @returns {Object|undefined}\n */\n gvar() {\n return this.font.tables.gvar;\n }\n /**\n * Helper method that returns the font's hvar table if present\n * @returns {Object|undefined}\n */\n hvar() {\n return this.font.tables.hvar;\n }\n};\n\n// src/hintingtt.mjs\nvar MAX_INSTRUCTIONS = 1e6;\nvar MAX_CALL_DEPTH2 = 64;\nvar MAX_LOOP_COUNT = 1e4;\nvar instructionTable;\nvar exec;\nvar execGlyph;\nvar execComponent;\nfunction Hinting(font) {\n this.font = font;\n this.getCommands = function(hPoints) {\n return glyf_default.getPath(hPoints).commands;\n };\n this._fpgmState = this._prepState = void 0;\n this._errorState = 0;\n}\nfunction roundOff(v) {\n return v;\n}\nfunction roundToGrid(v) {\n return Math.sign(v) * Math.round(Math.abs(v));\n}\nfunction roundToDoubleGrid(v) {\n return Math.sign(v) * Math.round(Math.abs(v * 2)) / 2;\n}\nfunction roundToHalfGrid(v) {\n return Math.sign(v) * (Math.round(Math.abs(v) + 0.5) - 0.5);\n}\nfunction roundUpToGrid(v) {\n return Math.sign(v) * Math.ceil(Math.abs(v));\n}\nfunction roundDownToGrid(v) {\n return Math.sign(v) * Math.floor(Math.abs(v));\n}\nvar roundSuper = function(v) {\n const period = this.srPeriod;\n let phase = this.srPhase;\n const threshold = this.srThreshold;\n let sign = 1;\n if (v < 0) {\n v = -v;\n sign = -1;\n }\n v += threshold - phase;\n v = Math.trunc(v / period) * period;\n v += phase;\n if (v < 0) return phase * sign;\n return v * sign;\n};\nvar xUnitVector = {\n x: 1,\n y: 0,\n axis: \"x\",\n // Gets the projected distance between two points.\n // o1/o2 ... if true, respective original position is used.\n distance: function(p1, p2, o1, o2) {\n return (o1 ? p1.xo : p1.x) - (o2 ? p2.xo : p2.x);\n },\n // Moves point p so the moved position has the same relative\n // position to the moved positions of rp1 and rp2 than the\n // original positions had.\n //\n // See APPENDIX on INTERPOLATE at the bottom of this file.\n interpolate: function(p, rp1, rp2, pv) {\n let do1;\n let do2;\n let doa1;\n let doa2;\n let dm1;\n let dm2;\n let dt;\n if (!pv || pv === this) {\n do1 = p.xo - rp1.xo;\n do2 = p.xo - rp2.xo;\n dm1 = rp1.x - rp1.xo;\n dm2 = rp2.x - rp2.xo;\n doa1 = Math.abs(do1);\n doa2 = Math.abs(do2);\n dt = doa1 + doa2;\n if (dt === 0) {\n p.x = p.xo + (dm1 + dm2) / 2;\n return;\n }\n p.x = p.xo + (dm1 * doa2 + dm2 * doa1) / dt;\n return;\n }\n do1 = pv.distance(p, rp1, true, true);\n do2 = pv.distance(p, rp2, true, true);\n dm1 = pv.distance(rp1, rp1, false, true);\n dm2 = pv.distance(rp2, rp2, false, true);\n doa1 = Math.abs(do1);\n doa2 = Math.abs(do2);\n dt = doa1 + doa2;\n if (dt === 0) {\n xUnitVector.setRelative(p, p, (dm1 + dm2) / 2, pv, true);\n return;\n }\n xUnitVector.setRelative(p, p, (dm1 * doa2 + dm2 * doa1) / dt, pv, true);\n },\n // Slope of line normal to this\n normalSlope: Number.NEGATIVE_INFINITY,\n // Sets the point 'p' relative to point 'rp'\n // by the distance 'd'.\n //\n // See APPENDIX on SETRELATIVE at the bottom of this file.\n //\n // p ... point to set\n // rp ... reference point\n // d ... distance on projection vector\n // pv ... projection vector (undefined = this)\n // org ... if true, uses the original position of rp as reference.\n setRelative: function(p, rp, d, pv, org) {\n if (!pv || pv === this) {\n p.x = (org ? rp.xo : rp.x) + d;\n return;\n }\n const rpx = org ? rp.xo : rp.x;\n const rpy = org ? rp.yo : rp.y;\n const rpdx = rpx + d * pv.x;\n const rpdy = rpy + d * pv.y;\n p.x = rpdx + (p.y - rpdy) / pv.normalSlope;\n },\n // Slope of vector line.\n slope: 0,\n // Touches the point p.\n touch: function(p) {\n p.xTouched = true;\n },\n // Tests if a point p is touched.\n touched: function(p) {\n return p.xTouched;\n },\n // Untouches the point p.\n untouch: function(p) {\n p.xTouched = false;\n }\n};\nvar yUnitVector = {\n x: 0,\n y: 1,\n axis: \"y\",\n // Gets the projected distance between two points.\n // o1/o2 ... if true, respective original position is used.\n distance: function(p1, p2, o1, o2) {\n return (o1 ? p1.yo : p1.y) - (o2 ? p2.yo : p2.y);\n },\n // Moves point p so the moved position has the same relative\n // position to the moved positions of rp1 and rp2 than the\n // original positions had.\n //\n // See APPENDIX on INTERPOLATE at the bottom of this file.\n interpolate: function(p, rp1, rp2, pv) {\n let do1;\n let do2;\n let doa1;\n let doa2;\n let dm1;\n let dm2;\n let dt;\n if (!pv || pv === this) {\n do1 = p.yo - rp1.yo;\n do2 = p.yo - rp2.yo;\n dm1 = rp1.y - rp1.yo;\n dm2 = rp2.y - rp2.yo;\n doa1 = Math.abs(do1);\n doa2 = Math.abs(do2);\n dt = doa1 + doa2;\n if (dt === 0) {\n p.y = p.yo + (dm1 + dm2) / 2;\n return;\n }\n p.y = p.yo + (dm1 * doa2 + dm2 * doa1) / dt;\n return;\n }\n do1 = pv.distance(p, rp1, true, true);\n do2 = pv.distance(p, rp2, true, true);\n dm1 = pv.distance(rp1, rp1, false, true);\n dm2 = pv.distance(rp2, rp2, false, true);\n doa1 = Math.abs(do1);\n doa2 = Math.abs(do2);\n dt = doa1 + doa2;\n if (dt === 0) {\n yUnitVector.setRelative(p, p, (dm1 + dm2) / 2, pv, true);\n return;\n }\n yUnitVector.setRelative(p, p, (dm1 * doa2 + dm2 * doa1) / dt, pv, true);\n },\n // Slope of line normal to this.\n normalSlope: 0,\n // Sets the point 'p' relative to point 'rp'\n // by the distance 'd'\n //\n // See APPENDIX on SETRELATIVE at the bottom of this file.\n //\n // p ... point to set\n // rp ... reference point\n // d ... distance on projection vector\n // pv ... projection vector (undefined = this)\n // org ... if true, uses the original position of rp as reference.\n setRelative: function(p, rp, d, pv, org) {\n if (!pv || pv === this) {\n p.y = (org ? rp.yo : rp.y) + d;\n return;\n }\n const rpx = org ? rp.xo : rp.x;\n const rpy = org ? rp.yo : rp.y;\n const rpdx = rpx + d * pv.x;\n const rpdy = rpy + d * pv.y;\n p.y = rpdy + pv.normalSlope * (p.x - rpdx);\n },\n // Slope of vector line.\n slope: Number.POSITIVE_INFINITY,\n // Touches the point p.\n touch: function(p) {\n p.yTouched = true;\n },\n // Tests if a point p is touched.\n touched: function(p) {\n return p.yTouched;\n },\n // Untouches the point p.\n untouch: function(p) {\n p.yTouched = false;\n }\n};\nObject.freeze(xUnitVector);\nObject.freeze(yUnitVector);\nfunction UnitVector(x, y) {\n this.x = x;\n this.y = y;\n this.axis = void 0;\n this.slope = y / x;\n this.normalSlope = -x / y;\n Object.freeze(this);\n}\nUnitVector.prototype.distance = function(p1, p2, o1, o2) {\n return this.x * xUnitVector.distance(p1, p2, o1, o2) + this.y * yUnitVector.distance(p1, p2, o1, o2);\n};\nUnitVector.prototype.interpolate = function(p, rp1, rp2, pv) {\n let dm1;\n let dm2;\n let do1;\n let do2;\n let doa1;\n let doa2;\n let dt;\n do1 = pv.distance(p, rp1, true, true);\n do2 = pv.distance(p, rp2, true, true);\n dm1 = pv.distance(rp1, rp1, false, true);\n dm2 = pv.distance(rp2, rp2, false, true);\n doa1 = Math.abs(do1);\n doa2 = Math.abs(do2);\n dt = doa1 + doa2;\n if (dt === 0) {\n this.setRelative(p, p, (dm1 + dm2) / 2, pv, true);\n return;\n }\n this.setRelative(p, p, (dm1 * doa2 + dm2 * doa1) / dt, pv, true);\n};\nUnitVector.prototype.setRelative = function(p, rp, d, pv, org) {\n pv = pv || this;\n const rpx = org ? rp.xo : rp.x;\n const rpy = org ? rp.yo : rp.y;\n const rpdx = rpx + d * pv.x;\n const rpdy = rpy + d * pv.y;\n const pvns = pv.normalSlope;\n const fvs = this.slope;\n const px = p.x;\n const py = p.y;\n p.x = (fvs * px - pvns * rpdx + rpdy - py) / (fvs - pvns);\n p.y = fvs * (p.x - px) + py;\n};\nUnitVector.prototype.touch = function(p) {\n p.xTouched = true;\n p.yTouched = true;\n};\nfunction getUnitVector(x, y) {\n const d = Math.sqrt(x * x + y * y);\n x /= d;\n y /= d;\n if (x === 1 && y === 0) return xUnitVector;\n else if (x === 0 && y === 1) return yUnitVector;\n else return new UnitVector(x, y);\n}\nfunction HPoint(x, y, lastPointOfContour, onCurve) {\n this.x = this.xo = Math.round(x * 64) / 64;\n this.y = this.yo = Math.round(y * 64) / 64;\n this.lastPointOfContour = lastPointOfContour;\n this.onCurve = onCurve;\n this.prevPointOnContour = void 0;\n this.nextPointOnContour = void 0;\n this.xTouched = false;\n this.yTouched = false;\n Object.preventExtensions(this);\n}\nHPoint.prototype.nextTouched = function(v) {\n let p = this.nextPointOnContour;\n while (!v.touched(p) && p !== this) p = p.nextPointOnContour;\n return p;\n};\nHPoint.prototype.prevTouched = function(v) {\n let p = this.prevPointOnContour;\n while (!v.touched(p) && p !== this) p = p.prevPointOnContour;\n return p;\n};\nvar HPZero = Object.freeze(new HPoint(0, 0));\nvar defaultState = {\n cvCutIn: 17 / 16,\n // control value cut in\n deltaBase: 9,\n deltaShift: 0.125,\n loop: 1,\n // loops some instructions\n minDis: 1,\n // minimum distance\n autoFlip: true\n};\nfunction State(env, prog) {\n this.env = env;\n this.stack = [];\n this.prog = prog;\n switch (env) {\n case \"glyf\":\n this.zp0 = this.zp1 = this.zp2 = 1;\n this.rp0 = this.rp1 = this.rp2 = 0;\n /* fall through */\n case \"prep\":\n this.fv = this.pv = this.dpv = xUnitVector;\n this.round = roundToGrid;\n }\n}\nHinting.prototype.exec = function(glyph, ppem) {\n if (typeof ppem !== \"number\") {\n throw new Error(\"Point size is not a number!\");\n }\n if (this._errorState > 2) return;\n const font = this.font;\n let prepState = this._prepState;\n if (!prepState || prepState.ppem !== ppem) {\n let fpgmState = this._fpgmState;\n if (!fpgmState) {\n State.prototype = defaultState;\n fpgmState = this._fpgmState = new State(\"fpgm\", font.tables.fpgm);\n fpgmState.funcs = [];\n fpgmState.font = font;\n fpgmState.instructionCount = 0;\n fpgmState.callDepth = 0;\n if (false) {\n console.log(\"---EXEC FPGM---\");\n fpgmState.step = -1;\n }\n try {\n exec(fpgmState);\n } catch (e) {\n console.log(\"Hinting error in FPGM:\" + e);\n this._errorState = 3;\n return;\n }\n }\n State.prototype = fpgmState;\n prepState = this._prepState = new State(\"prep\", font.tables.prep);\n prepState.ppem = ppem;\n prepState.instructionCount = 0;\n prepState.callDepth = 0;\n const oCvt = font.variation && font.variation.process.getCvarTransform() || font.tables.cvt;\n if (oCvt) {\n const cvt = prepState.cvt = new Array(oCvt.length);\n const scale = ppem / font.unitsPerEm;\n for (let c = 0; c < oCvt.length; c++) {\n cvt[c] = oCvt[c] * scale;\n }\n } else {\n prepState.cvt = [];\n }\n if (false) {\n console.log(\"---EXEC PREP---\");\n prepState.step = -1;\n }\n try {\n exec(prepState);\n } catch (e) {\n if (this._errorState < 2) {\n console.log(\"Hinting error in PREP:\" + e);\n }\n this._errorState = 2;\n }\n }\n if (this._errorState > 1) return;\n try {\n return execGlyph(glyph, prepState);\n } catch (e) {\n if (this._errorState < 1) {\n console.log(\"Hinting error:\" + e);\n console.log(\"Note: further hinting errors are silenced\");\n }\n this._errorState = 1;\n return void 0;\n }\n};\nexecGlyph = function(glyph, prepState) {\n const xScale = prepState.ppem / prepState.font.unitsPerEm;\n const yScale = xScale;\n let components = glyph.components;\n let contours;\n let gZone;\n let state;\n State.prototype = prepState;\n if (!components) {\n state = new State(\"glyf\", glyph.instructions);\n state.instructionCount = 0;\n state.callDepth = 0;\n if (false) {\n console.log(\"---EXEC GLYPH---\");\n state.step = -1;\n }\n execComponent(glyph, state, xScale, yScale);\n gZone = state.gZone;\n } else {\n const font = prepState.font;\n gZone = [];\n contours = [];\n for (let i = 0; i < components.length; i++) {\n const c = components[i];\n const cg = font.glyphs.get(c.glyphIndex);\n state = new State(\"glyf\", cg.instructions);\n state.instructionCount = 0;\n state.callDepth = 0;\n if (false) {\n console.log(\"---EXEC COMP \" + i + \"---\");\n state.step = -1;\n }\n execComponent(cg, state, xScale, yScale);\n const dx = Math.round(c.dx * xScale);\n const dy = Math.round(c.dy * yScale);\n const gz = state.gZone;\n const cc = state.contours;\n for (let pi = 0; pi < gz.length; pi++) {\n const p = gz[pi];\n p.xTouched = p.yTouched = false;\n p.xo = p.x = p.x + dx;\n p.yo = p.y = p.y + dy;\n }\n const gLen = gZone.length;\n gZone.push.apply(gZone, gz);\n for (let j = 0; j < cc.length; j++) {\n contours.push(cc[j] + gLen);\n }\n }\n if (glyph.instructions && !state.inhibitGridFit) {\n state = new State(\"glyf\", glyph.instructions);\n state.gZone = state.z0 = state.z1 = state.z2 = gZone;\n state.contours = contours;\n gZone.push(\n new HPoint(0, 0),\n new HPoint(Math.round(glyph.advanceWidth * xScale), 0)\n );\n if (false) {\n console.log(\"---EXEC COMPOSITE---\");\n state.step = -1;\n }\n exec(state);\n gZone.length -= 2;\n }\n }\n return gZone;\n};\nexecComponent = function(glyph, state, xScale, yScale) {\n const points = glyph.points || [];\n const pLen = points.length;\n const gZone = state.gZone = state.z0 = state.z1 = state.z2 = [];\n const contours = state.contours = [];\n let cp;\n for (let i = 0; i < pLen; i++) {\n cp = points[i];\n gZone[i] = new HPoint(\n cp.x * xScale,\n cp.y * yScale,\n cp.lastPointOfContour,\n cp.onCurve\n );\n }\n let sp;\n let np;\n for (let i = 0; i < pLen; i++) {\n cp = gZone[i];\n if (!sp) {\n sp = cp;\n contours.push(i);\n }\n if (cp.lastPointOfContour) {\n cp.nextPointOnContour = sp;\n sp.prevPointOnContour = cp;\n sp = void 0;\n } else {\n np = gZone[i + 1];\n cp.nextPointOnContour = np;\n np.prevPointOnContour = cp;\n }\n }\n if (state.inhibitGridFit) return;\n if (false) {\n console.log(\"PROCESSING GLYPH\", state.stack);\n for (let i = 0; i < pLen; i++) {\n console.log(i, gZone[i].x, gZone[i].y);\n }\n }\n gZone.push(\n new HPoint(0, 0),\n new HPoint(Math.round(glyph.advanceWidth * xScale), 0)\n );\n exec(state);\n gZone.length -= 2;\n if (false) {\n console.log(\"FINISHED GLYPH\", state.stack);\n for (let i = 0; i < pLen; i++) {\n console.log(i, gZone[i].x, gZone[i].y);\n }\n }\n};\nexec = function(state) {\n let prog = state.prog;\n if (!prog) return;\n const pLen = prog.length;\n let ins;\n for (state.ip = 0; state.ip < pLen; state.ip++) {\n if (++state.instructionCount > MAX_INSTRUCTIONS) {\n throw new Error(\n \"Hinting instructions exceeded maximum of \" + MAX_INSTRUCTIONS\n );\n }\n if (false) state.step++;\n ins = instructionTable[prog[state.ip]];\n if (!ins) {\n throw new Error(\n \"unknown instruction: 0x\" + Number(prog[state.ip]).toString(16)\n );\n }\n ins(state);\n }\n};\nfunction initTZone(state) {\n const tZone = state.tZone = new Array(state.gZone.length);\n for (let i = 0; i < tZone.length; i++) {\n tZone[i] = new HPoint(0, 0);\n }\n}\nfunction skip(state, handleElse) {\n const prog = state.prog;\n let ip = state.ip;\n let nesting = 1;\n let ins;\n do {\n ins = prog[++ip];\n if (ins === 88)\n nesting++;\n else if (ins === 89)\n nesting--;\n else if (ins === 64)\n ip += prog[ip + 1] + 1;\n else if (ins === 65)\n ip += 2 * prog[ip + 1] + 1;\n else if (ins >= 176 && ins <= 183)\n ip += ins - 176 + 1;\n else if (ins >= 184 && ins <= 191)\n ip += (ins - 184 + 1) * 2;\n else if (handleElse && nesting === 1 && ins === 27)\n break;\n } while (nesting > 0);\n state.ip = ip;\n}\nfunction SVTCA(v, state) {\n if (false) console.log(state.step, \"SVTCA[\" + v.axis + \"]\");\n state.fv = state.pv = state.dpv = v;\n}\nfunction SPVTCA(v, state) {\n if (false) console.log(state.step, \"SPVTCA[\" + v.axis + \"]\");\n state.pv = state.dpv = v;\n}\nfunction SFVTCA(v, state) {\n if (false) console.log(state.step, \"SFVTCA[\" + v.axis + \"]\");\n state.fv = v;\n}\nfunction SPVTL(a, state) {\n const stack = state.stack;\n const p2i = stack.pop();\n const p1i = stack.pop();\n const p2 = state.z2[p2i];\n const p1 = state.z1[p1i];\n if (false) console.log(\"SPVTL[\" + a + \"]\", p2i, p1i);\n let dx;\n let dy;\n if (!a) {\n dx = p1.x - p2.x;\n dy = p1.y - p2.y;\n } else {\n dx = p2.y - p1.y;\n dy = p1.x - p2.x;\n }\n state.pv = state.dpv = getUnitVector(dx, dy);\n}\nfunction SFVTL(a, state) {\n const stack = state.stack;\n const p2i = stack.pop();\n const p1i = stack.pop();\n const p2 = state.z2[p2i];\n const p1 = state.z1[p1i];\n if (false) console.log(\"SFVTL[\" + a + \"]\", p2i, p1i);\n let dx;\n let dy;\n if (!a) {\n dx = p1.x - p2.x;\n dy = p1.y - p2.y;\n } else {\n dx = p2.y - p1.y;\n dy = p1.x - p2.x;\n }\n state.fv = getUnitVector(dx, dy);\n}\nfunction SPVFS(state) {\n const stack = state.stack;\n const y = stack.pop();\n const x = stack.pop();\n if (false) console.log(state.step, \"SPVFS[]\", y, x);\n state.pv = state.dpv = getUnitVector(x, y);\n}\nfunction SFVFS(state) {\n const stack = state.stack;\n const y = stack.pop();\n const x = stack.pop();\n if (false) console.log(state.step, \"SPVFS[]\", y, x);\n state.fv = getUnitVector(x, y);\n}\nfunction GPV(state) {\n const stack = state.stack;\n const pv = state.pv;\n if (false) console.log(state.step, \"GPV[]\");\n stack.push(pv.x * 16384);\n stack.push(pv.y * 16384);\n}\nfunction GFV(state) {\n const stack = state.stack;\n const fv = state.fv;\n if (false) console.log(state.step, \"GFV[]\");\n stack.push(fv.x * 16384);\n stack.push(fv.y * 16384);\n}\nfunction SFVTPV(state) {\n state.fv = state.pv;\n if (false) console.log(state.step, \"SFVTPV[]\");\n}\nfunction ISECT(state) {\n const stack = state.stack;\n const pa0i = stack.pop();\n const pa1i = stack.pop();\n const pb0i = stack.pop();\n const pb1i = stack.pop();\n const pi = stack.pop();\n const z0 = state.z0;\n const z1 = state.z1;\n const pa0 = z0[pa0i];\n const pa1 = z0[pa1i];\n const pb0 = z1[pb0i];\n const pb1 = z1[pb1i];\n const p = state.z2[pi];\n if (false) console.log(\"ISECT[], \", pa0i, pa1i, pb0i, pb1i, pi);\n const x1 = pa0.x;\n const y1 = pa0.y;\n const x2 = pa1.x;\n const y2 = pa1.y;\n const x3 = pb0.x;\n const y3 = pb0.y;\n const x4 = pb1.x;\n const y4 = pb1.y;\n const div = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\n const f1 = x1 * y2 - y1 * x2;\n const f2 = x3 * y4 - y3 * x4;\n p.x = (f1 * (x3 - x4) - f2 * (x1 - x2)) / div;\n p.y = (f1 * (y3 - y4) - f2 * (y1 - y2)) / div;\n}\nfunction SRP0(state) {\n state.rp0 = state.stack.pop();\n if (false) console.log(state.step, \"SRP0[]\", state.rp0);\n}\nfunction SRP1(state) {\n state.rp1 = state.stack.pop();\n if (false) console.log(state.step, \"SRP1[]\", state.rp1);\n}\nfunction SRP2(state) {\n state.rp2 = state.stack.pop();\n if (false) console.log(state.step, \"SRP2[]\", state.rp2);\n}\nfunction SZP0(state) {\n const n = state.stack.pop();\n if (false) console.log(state.step, \"SZP0[]\", n);\n state.zp0 = n;\n switch (n) {\n case 0:\n if (!state.tZone) initTZone(state);\n state.z0 = state.tZone;\n break;\n case 1:\n state.z0 = state.gZone;\n break;\n default:\n throw new Error(\"Invalid zone pointer\");\n }\n}\nfunction SZP1(state) {\n const n = state.stack.pop();\n if (false) console.log(state.step, \"SZP1[]\", n);\n state.zp1 = n;\n switch (n) {\n case 0:\n if (!state.tZone) initTZone(state);\n state.z1 = state.tZone;\n break;\n case 1:\n state.z1 = state.gZone;\n break;\n default:\n throw new Error(\"Invalid zone pointer\");\n }\n}\nfunction SZP2(state) {\n const n = state.stack.pop();\n if (false) console.log(state.step, \"SZP2[]\", n);\n state.zp2 = n;\n switch (n) {\n case 0:\n if (!state.tZone) initTZone(state);\n state.z2 = state.tZone;\n break;\n case 1:\n state.z2 = state.gZone;\n break;\n default:\n throw new Error(\"Invalid zone pointer\");\n }\n}\nfunction SZPS(state) {\n const n = state.stack.pop();\n if (false) console.log(state.step, \"SZPS[]\", n);\n state.zp0 = state.zp1 = state.zp2 = n;\n switch (n) {\n case 0:\n if (!state.tZone) initTZone(state);\n state.z0 = state.z1 = state.z2 = state.tZone;\n break;\n case 1:\n state.z0 = state.z1 = state.z2 = state.gZone;\n break;\n default:\n throw new Error(\"Invalid zone pointer\");\n }\n}\nfunction SLOOP(state) {\n state.loop = state.stack.pop();\n if (state.loop > MAX_LOOP_COUNT) {\n state.loop = MAX_LOOP_COUNT;\n }\n if (false) console.log(state.step, \"SLOOP[]\", state.loop);\n}\nfunction RTG(state) {\n if (false) console.log(state.step, \"RTG[]\");\n state.round = roundToGrid;\n}\nfunction RTHG(state) {\n if (false) console.log(state.step, \"RTHG[]\");\n state.round = roundToHalfGrid;\n}\nfunction SMD(state) {\n const d = state.stack.pop();\n if (false) console.log(state.step, \"SMD[]\", d);\n state.minDis = d / 64;\n}\nfunction ELSE(state) {\n if (false) console.log(state.step, \"ELSE[]\");\n skip(state, false);\n}\nfunction JMPR(state) {\n const o = state.stack.pop();\n if (false) console.log(state.step, \"JMPR[]\", o);\n state.ip += o - 1;\n}\nfunction SCVTCI(state) {\n const n = state.stack.pop();\n if (false) console.log(state.step, \"SCVTCI[]\", n);\n state.cvCutIn = n / 64;\n}\nfunction DUP(state) {\n const stack = state.stack;\n if (false) console.log(state.step, \"DUP[]\");\n stack.push(stack[stack.length - 1]);\n}\nfunction POP(state) {\n if (false) console.log(state.step, \"POP[]\");\n state.stack.pop();\n}\nfunction CLEAR(state) {\n if (false) console.log(state.step, \"CLEAR[]\");\n state.stack.length = 0;\n}\nfunction SWAP(state) {\n const stack = state.stack;\n const a = stack.pop();\n const b = stack.pop();\n if (false) console.log(state.step, \"SWAP[]\");\n stack.push(a);\n stack.push(b);\n}\nfunction DEPTH(state) {\n const stack = state.stack;\n if (false) console.log(state.step, \"DEPTH[]\");\n stack.push(stack.length);\n}\nfunction LOOPCALL(state) {\n const stack = state.stack;\n const fn = stack.pop();\n let c = stack.pop();\n if (c > MAX_LOOP_COUNT) c = MAX_LOOP_COUNT;\n if (false) console.log(state.step, \"LOOPCALL[]\", fn, c);\n if (++state.callDepth > MAX_CALL_DEPTH2) {\n throw new Error(\"Hinting call depth exceeded maximum of \" + MAX_CALL_DEPTH2);\n }\n const cip = state.ip;\n const cprog = state.prog;\n state.prog = state.funcs[fn];\n for (let i = 0; i < c; i++) {\n exec(state);\n if (false) console.log(\n ++state.step,\n i + 1 < c ? \"next loopcall\" : \"done loopcall\",\n i\n );\n }\n state.ip = cip;\n state.prog = cprog;\n state.callDepth--;\n}\nfunction CALL(state) {\n const fn = state.stack.pop();\n if (false) console.log(state.step, \"CALL[]\", fn);\n if (++state.callDepth > MAX_CALL_DEPTH2) {\n throw new Error(\"Hinting call depth exceeded maximum of \" + MAX_CALL_DEPTH2);\n }\n const cip = state.ip;\n const cprog = state.prog;\n state.prog = state.funcs[fn];\n exec(state);\n state.ip = cip;\n state.prog = cprog;\n state.callDepth--;\n if (false) console.log(++state.step, \"returning from\", fn);\n}\nfunction CINDEX(state) {\n const stack = state.stack;\n const k = stack.pop();\n if (false) console.log(state.step, \"CINDEX[]\", k);\n stack.push(stack[stack.length - k]);\n}\nfunction MINDEX(state) {\n const stack = state.stack;\n const k = stack.pop();\n if (false) console.log(state.step, \"MINDEX[]\", k);\n stack.push(stack.splice(stack.length - k, 1)[0]);\n}\nfunction FDEF(state) {\n if (state.env !== \"fpgm\") throw new Error(\"FDEF not allowed here\");\n const stack = state.stack;\n const prog = state.prog;\n let ip = state.ip;\n const fn = stack.pop();\n const ipBegin = ip;\n if (false) console.log(state.step, \"FDEF[]\", fn);\n while (prog[++ip] !== 45) ;\n state.ip = ip;\n state.funcs[fn] = prog.slice(ipBegin + 1, ip);\n}\nfunction MDAP(round, state) {\n const pi = state.stack.pop();\n const p = state.z0[pi];\n const fv = state.fv;\n const pv = state.pv;\n if (false) console.log(state.step, \"MDAP[\" + round + \"]\", pi);\n let d = pv.distance(p, HPZero);\n if (round) d = state.round(d);\n fv.setRelative(p, HPZero, d, pv);\n fv.touch(p);\n state.rp0 = state.rp1 = pi;\n}\nfunction IUP(v, state) {\n const z2 = state.z2;\n const pLen = z2.length - 2;\n let cp;\n let pp;\n let np;\n if (false) console.log(state.step, \"IUP[\" + v.axis + \"]\");\n for (let i = 0; i < pLen; i++) {\n cp = z2[i];\n if (v.touched(cp)) continue;\n pp = cp.prevTouched(v);\n if (pp === cp) continue;\n np = cp.nextTouched(v);\n if (pp === np) {\n v.setRelative(cp, cp, v.distance(pp, pp, false, true), v, true);\n }\n v.interpolate(cp, pp, np, v);\n }\n}\nfunction SHP(a, state) {\n const stack = state.stack;\n const rpi = a ? state.rp1 : state.rp2;\n const rp = (a ? state.z0 : state.z1)[rpi];\n const fv = state.fv;\n const pv = state.pv;\n let loop = state.loop;\n const z2 = state.z2;\n while (loop--) {\n const pi = stack.pop();\n const p = z2[pi];\n const d = pv.distance(rp, rp, false, true);\n fv.setRelative(p, p, d, pv);\n fv.touch(p);\n if (false) {\n console.log(\n state.step,\n (state.loop > 1 ? \"loop \" + (state.loop - loop) + \": \" : \"\") + \"SHP[\" + (a ? \"rp1\" : \"rp2\") + \"]\",\n pi\n );\n }\n }\n state.loop = 1;\n}\nfunction SHC(a, state) {\n const stack = state.stack;\n const rpi = a ? state.rp1 : state.rp2;\n const rp = (a ? state.z0 : state.z1)[rpi];\n const fv = state.fv;\n const pv = state.pv;\n const ci = stack.pop();\n const sp = state.z2[state.contours[ci]];\n let p = sp;\n if (false) console.log(state.step, \"SHC[\" + a + \"]\", ci);\n const d = pv.distance(rp, rp, false, true);\n do {\n if (p !== rp) fv.setRelative(p, p, d, pv);\n p = p.nextPointOnContour;\n } while (p !== sp);\n}\nfunction SHZ(a, state) {\n const stack = state.stack;\n const rpi = a ? state.rp1 : state.rp2;\n const rp = (a ? state.z0 : state.z1)[rpi];\n const fv = state.fv;\n const pv = state.pv;\n const e = stack.pop();\n if (false) console.log(state.step, \"SHZ[\" + a + \"]\", e);\n let z;\n switch (e) {\n case 0:\n z = state.tZone;\n break;\n case 1:\n z = state.gZone;\n break;\n default:\n throw new Error(\"Invalid zone\");\n }\n let p;\n const d = pv.distance(rp, rp, false, true);\n const pLen = z.length - 2;\n for (let i = 0; i < pLen; i++) {\n p = z[i];\n fv.setRelative(p, p, d, pv);\n }\n}\nfunction SHPIX(state) {\n const stack = state.stack;\n let loop = state.loop;\n const fv = state.fv;\n const d = stack.pop() / 64;\n const z2 = state.z2;\n while (loop--) {\n const pi = stack.pop();\n const p = z2[pi];\n if (false) {\n console.log(\n state.step,\n (state.loop > 1 ? \"loop \" + (state.loop - loop) + \": \" : \"\") + \"SHPIX[]\",\n pi,\n d\n );\n }\n fv.setRelative(p, p, d);\n fv.touch(p);\n }\n state.loop = 1;\n}\nfunction IP(state) {\n const stack = state.stack;\n const rp1i = state.rp1;\n const rp2i = state.rp2;\n let loop = state.loop;\n const rp1 = state.z0[rp1i];\n const rp2 = state.z1[rp2i];\n const fv = state.fv;\n const pv = state.dpv;\n const z2 = state.z2;\n while (loop--) {\n const pi = stack.pop();\n const p = z2[pi];\n if (false) {\n console.log(\n state.step,\n (state.loop > 1 ? \"loop \" + (state.loop - loop) + \": \" : \"\") + \"IP[]\",\n pi,\n rp1i,\n \"<->\",\n rp2i\n );\n }\n fv.interpolate(p, rp1, rp2, pv);\n fv.touch(p);\n }\n state.loop = 1;\n}\nfunction MSIRP(a, state) {\n const stack = state.stack;\n const d = stack.pop() / 64;\n const pi = stack.pop();\n const p = state.z1[pi];\n const rp0 = state.z0[state.rp0];\n const fv = state.fv;\n const pv = state.pv;\n fv.setRelative(p, rp0, d, pv);\n fv.touch(p);\n if (false) console.log(state.step, \"MSIRP[\" + a + \"]\", d, pi);\n state.rp1 = state.rp0;\n state.rp2 = pi;\n if (a) state.rp0 = pi;\n}\nfunction ALIGNRP(state) {\n const stack = state.stack;\n const rp0i = state.rp0;\n const rp0 = state.z0[rp0i];\n let loop = state.loop;\n const fv = state.fv;\n const pv = state.pv;\n const z1 = state.z1;\n while (loop--) {\n const pi = stack.pop();\n const p = z1[pi];\n if (false) {\n console.log(\n state.step,\n (state.loop > 1 ? \"loop \" + (state.loop - loop) + \": \" : \"\") + \"ALIGNRP[]\",\n pi\n );\n }\n fv.setRelative(p, rp0, 0, pv);\n fv.touch(p);\n }\n state.loop = 1;\n}\nfunction RTDG(state) {\n if (false) console.log(state.step, \"RTDG[]\");\n state.round = roundToDoubleGrid;\n}\nfunction MIAP(round, state) {\n const stack = state.stack;\n const n = stack.pop();\n const pi = stack.pop();\n const p = state.z0[pi];\n const fv = state.fv;\n const pv = state.pv;\n let cv = state.cvt[n];\n if (false) {\n console.log(\n state.step,\n \"MIAP[\" + round + \"]\",\n n,\n \"(\",\n cv,\n \")\",\n pi\n );\n }\n let d = pv.distance(p, HPZero);\n if (round) {\n if (Math.abs(d - cv) < state.cvCutIn) d = cv;\n d = state.round(d);\n }\n fv.setRelative(p, HPZero, d, pv);\n if (state.zp0 === 0) {\n p.xo = p.x;\n p.yo = p.y;\n }\n fv.touch(p);\n state.rp0 = state.rp1 = pi;\n}\nfunction NPUSHB(state) {\n const prog = state.prog;\n let ip = state.ip;\n const stack = state.stack;\n const n = prog[++ip];\n if (false) console.log(state.step, \"NPUSHB[]\", n);\n for (let i = 0; i < n; i++) stack.push(prog[++ip]);\n state.ip = ip;\n}\nfunction NPUSHW(state) {\n let ip = state.ip;\n const prog = state.prog;\n const stack = state.stack;\n const n = prog[++ip];\n if (false) console.log(state.step, \"NPUSHW[]\", n);\n for (let i = 0; i < n; i++) {\n let w = prog[++ip] << 8 | prog[++ip];\n if (w & 32768) w = -((w ^ 65535) + 1);\n stack.push(w);\n }\n state.ip = ip;\n}\nfunction WS(state) {\n const stack = state.stack;\n let store = state.store;\n if (!store) store = state.store = [];\n const v = stack.pop();\n const l = stack.pop();\n if (false) console.log(state.step, \"WS\", v, l);\n store[l] = v;\n}\nfunction RS(state) {\n const stack = state.stack;\n const store = state.store;\n const l = stack.pop();\n if (false) console.log(state.step, \"RS\", l);\n const v = store && store[l] || 0;\n stack.push(v);\n}\nfunction WCVTP(state) {\n const stack = state.stack;\n const v = stack.pop();\n const l = stack.pop();\n if (false) console.log(state.step, \"WCVTP\", v, l);\n state.cvt[l] = v / 64;\n}\nfunction RCVT(state) {\n const stack = state.stack;\n const cvte = stack.pop();\n if (false) console.log(state.step, \"RCVT\", cvte);\n stack.push(state.cvt[cvte] * 64);\n}\nfunction GC(a, state) {\n const stack = state.stack;\n const pi = stack.pop();\n const p = state.z2[pi];\n if (false) console.log(state.step, \"GC[\" + a + \"]\", pi);\n stack.push(state.dpv.distance(p, HPZero, a, false) * 64);\n}\nfunction MD(a, state) {\n const stack = state.stack;\n const pi2 = stack.pop();\n const pi1 = stack.pop();\n const p2 = state.z1[pi2];\n const p1 = state.z0[pi1];\n const d = state.dpv.distance(p1, p2, a, a);\n if (false) console.log(state.step, \"MD[\" + a + \"]\", pi2, pi1, \"->\", d);\n state.stack.push(Math.round(d * 64));\n}\nfunction MPPEM(state) {\n if (false) console.log(state.step, \"MPPEM[]\");\n state.stack.push(state.ppem);\n}\nfunction FLIPON(state) {\n if (false) console.log(state.step, \"FLIPON[]\");\n state.autoFlip = true;\n}\nfunction LT(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"LT[]\", e2, e1);\n stack.push(e1 < e2 ? 1 : 0);\n}\nfunction LTEQ(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"LTEQ[]\", e2, e1);\n stack.push(e1 <= e2 ? 1 : 0);\n}\nfunction GT(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"GT[]\", e2, e1);\n stack.push(e1 > e2 ? 1 : 0);\n}\nfunction GTEQ(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"GTEQ[]\", e2, e1);\n stack.push(e1 >= e2 ? 1 : 0);\n}\nfunction EQ(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"EQ[]\", e2, e1);\n stack.push(e2 === e1 ? 1 : 0);\n}\nfunction NEQ(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"NEQ[]\", e2, e1);\n stack.push(e2 !== e1 ? 1 : 0);\n}\nfunction ODD(state) {\n const stack = state.stack;\n const n = stack.pop();\n if (false) console.log(state.step, \"ODD[]\", n);\n stack.push(Math.trunc(n) & 1 ? 1 : 0);\n}\nfunction EVEN(state) {\n const stack = state.stack;\n const n = stack.pop();\n if (false) console.log(state.step, \"EVEN[]\", n);\n stack.push(Math.trunc(n) & 1 ? 0 : 1);\n}\nfunction IF(state) {\n let test = state.stack.pop();\n let ins;\n if (false) console.log(state.step, \"IF[]\", test);\n if (!test) {\n skip(state, true);\n if (false) console.log(state.step, ins === 27 ? \"ELSE[]\" : \"EIF[]\");\n }\n}\nfunction EIF(state) {\n if (false) console.log(state.step, \"EIF[]\");\n}\nfunction AND(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"AND[]\", e2, e1);\n stack.push(e2 && e1 ? 1 : 0);\n}\nfunction OR(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"OR[]\", e2, e1);\n stack.push(e2 || e1 ? 1 : 0);\n}\nfunction NOT(state) {\n const stack = state.stack;\n const e = stack.pop();\n if (false) console.log(state.step, \"NOT[]\", e);\n stack.push(e ? 0 : 1);\n}\nfunction DELTAP123(b, state) {\n const stack = state.stack;\n const n = stack.pop();\n const fv = state.fv;\n const pv = state.pv;\n const ppem = state.ppem;\n const base = state.deltaBase + (b - 1) * 16;\n const ds = state.deltaShift;\n const z0 = state.z0;\n if (false) console.log(state.step, \"DELTAP[\" + b + \"]\", n, stack);\n for (let i = 0; i < n; i++) {\n const pi = stack.pop();\n const arg = stack.pop();\n const appem = base + ((arg & 240) >> 4);\n if (appem !== ppem) continue;\n let mag = (arg & 15) - 8;\n if (mag >= 0) mag++;\n if (false) console.log(state.step, \"DELTAPFIX\", pi, \"by\", mag * ds);\n const p = z0[pi];\n fv.setRelative(p, p, mag * ds, pv);\n }\n}\nfunction SDB(state) {\n const stack = state.stack;\n const n = stack.pop();\n if (false) console.log(state.step, \"SDB[]\", n);\n state.deltaBase = n;\n}\nfunction SDS(state) {\n const stack = state.stack;\n const n = stack.pop();\n if (false) console.log(state.step, \"SDS[]\", n);\n state.deltaShift = Math.pow(0.5, n);\n}\nfunction ADD(state) {\n const stack = state.stack;\n const n2 = stack.pop();\n const n1 = stack.pop();\n if (false) console.log(state.step, \"ADD[]\", n2, n1);\n stack.push(n1 + n2);\n}\nfunction SUB(state) {\n const stack = state.stack;\n const n2 = stack.pop();\n const n1 = stack.pop();\n if (false) console.log(state.step, \"SUB[]\", n2, n1);\n stack.push(n1 - n2);\n}\nfunction DIV(state) {\n const stack = state.stack;\n const n2 = stack.pop();\n const n1 = stack.pop();\n if (false) console.log(state.step, \"DIV[]\", n2, n1);\n stack.push(n1 * 64 / n2);\n}\nfunction MUL(state) {\n const stack = state.stack;\n const n2 = stack.pop();\n const n1 = stack.pop();\n if (false) console.log(state.step, \"MUL[]\", n2, n1);\n stack.push(n1 * n2 / 64);\n}\nfunction ABS(state) {\n const stack = state.stack;\n const n = stack.pop();\n if (false) console.log(state.step, \"ABS[]\", n);\n stack.push(Math.abs(n));\n}\nfunction NEG(state) {\n const stack = state.stack;\n let n = stack.pop();\n if (false) console.log(state.step, \"NEG[]\", n);\n stack.push(-n);\n}\nfunction FLOOR(state) {\n const stack = state.stack;\n const n = stack.pop();\n if (false) console.log(state.step, \"FLOOR[]\", n);\n stack.push(Math.floor(n / 64) * 64);\n}\nfunction CEILING(state) {\n const stack = state.stack;\n const n = stack.pop();\n if (false) console.log(state.step, \"CEILING[]\", n);\n stack.push(Math.ceil(n / 64) * 64);\n}\nfunction ROUND(dt, state) {\n const stack = state.stack;\n const n = stack.pop();\n if (false) console.log(state.step, \"ROUND[]\");\n stack.push(state.round(n / 64) * 64);\n}\nfunction WCVTF(state) {\n const stack = state.stack;\n const v = stack.pop();\n const l = stack.pop();\n if (false) console.log(state.step, \"WCVTF[]\", v, l);\n state.cvt[l] = v * state.ppem / state.font.unitsPerEm;\n}\nfunction DELTAC123(b, state) {\n const stack = state.stack;\n const n = stack.pop();\n const ppem = state.ppem;\n const base = state.deltaBase + (b - 1) * 16;\n const ds = state.deltaShift;\n if (false) console.log(state.step, \"DELTAC[\" + b + \"]\", n, stack);\n for (let i = 0; i < n; i++) {\n const c = stack.pop();\n const arg = stack.pop();\n const appem = base + ((arg & 240) >> 4);\n if (appem !== ppem) continue;\n let mag = (arg & 15) - 8;\n if (mag >= 0) mag++;\n const delta = mag * ds;\n if (false) console.log(state.step, \"DELTACFIX\", c, \"by\", delta);\n state.cvt[c] += delta;\n }\n}\nfunction SROUND(state) {\n let n = state.stack.pop();\n if (false) console.log(state.step, \"SROUND[]\", n);\n state.round = roundSuper;\n let period;\n switch (n & 192) {\n case 0:\n period = 0.5;\n break;\n case 64:\n period = 1;\n break;\n case 128:\n period = 2;\n break;\n default:\n throw new Error(\"invalid SROUND value\");\n }\n state.srPeriod = period;\n switch (n & 48) {\n case 0:\n state.srPhase = 0;\n break;\n case 16:\n state.srPhase = 0.25 * period;\n break;\n case 32:\n state.srPhase = 0.5 * period;\n break;\n case 48:\n state.srPhase = 0.75 * period;\n break;\n default:\n throw new Error(\"invalid SROUND value\");\n }\n n &= 15;\n if (n === 0) state.srThreshold = 0;\n else state.srThreshold = (n / 8 - 0.5) * period;\n}\nfunction S45ROUND(state) {\n let n = state.stack.pop();\n if (false) console.log(state.step, \"S45ROUND[]\", n);\n state.round = roundSuper;\n let period;\n switch (n & 192) {\n case 0:\n period = Math.sqrt(2) / 2;\n break;\n case 64:\n period = Math.sqrt(2);\n break;\n case 128:\n period = 2 * Math.sqrt(2);\n break;\n default:\n throw new Error(\"invalid S45ROUND value\");\n }\n state.srPeriod = period;\n switch (n & 48) {\n case 0:\n state.srPhase = 0;\n break;\n case 16:\n state.srPhase = 0.25 * period;\n break;\n case 32:\n state.srPhase = 0.5 * period;\n break;\n case 48:\n state.srPhase = 0.75 * period;\n break;\n default:\n throw new Error(\"invalid S45ROUND value\");\n }\n n &= 15;\n if (n === 0) state.srThreshold = 0;\n else state.srThreshold = (n / 8 - 0.5) * period;\n}\nfunction ROFF(state) {\n if (false) console.log(state.step, \"ROFF[]\");\n state.round = roundOff;\n}\nfunction RUTG(state) {\n if (false) console.log(state.step, \"RUTG[]\");\n state.round = roundUpToGrid;\n}\nfunction RDTG(state) {\n if (false) console.log(state.step, \"RDTG[]\");\n state.round = roundDownToGrid;\n}\nfunction SCANCTRL(state) {\n const n = state.stack.pop();\n if (false) console.log(state.step, \"SCANCTRL[]\", n);\n}\nfunction SDPVTL(a, state) {\n const stack = state.stack;\n const p2i = stack.pop();\n const p1i = stack.pop();\n const p2 = state.z2[p2i];\n const p1 = state.z1[p1i];\n if (false) console.log(state.step, \"SDPVTL[\" + a + \"]\", p2i, p1i);\n let dx;\n let dy;\n if (!a) {\n dx = p1.x - p2.x;\n dy = p1.y - p2.y;\n } else {\n dx = p2.y - p1.y;\n dy = p1.x - p2.x;\n }\n state.dpv = getUnitVector(dx, dy);\n}\nfunction GETINFO(state) {\n const stack = state.stack;\n const sel = stack.pop();\n let r = 0;\n if (false) console.log(state.step, \"GETINFO[]\", sel);\n if (sel & 1) r = 35;\n if (sel & 32) r |= 4096;\n stack.push(r);\n}\nfunction ROLL(state) {\n const stack = state.stack;\n const a = stack.pop();\n const b = stack.pop();\n const c = stack.pop();\n if (false) console.log(state.step, \"ROLL[]\");\n stack.push(b);\n stack.push(a);\n stack.push(c);\n}\nfunction MAX(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"MAX[]\", e2, e1);\n stack.push(Math.max(e1, e2));\n}\nfunction MIN(state) {\n const stack = state.stack;\n const e2 = stack.pop();\n const e1 = stack.pop();\n if (false) console.log(state.step, \"MIN[]\", e2, e1);\n stack.push(Math.min(e1, e2));\n}\nfunction SCANTYPE(state) {\n const n = state.stack.pop();\n if (false) console.log(state.step, \"SCANTYPE[]\", n);\n}\nfunction INSTCTRL(state) {\n const s = state.stack.pop();\n let v = state.stack.pop();\n if (false) console.log(state.step, \"INSTCTRL[]\", s, v);\n switch (s) {\n case 1:\n state.inhibitGridFit = !!v;\n return;\n case 2:\n state.ignoreCvt = !!v;\n return;\n default:\n throw new Error(\"invalid INSTCTRL[] selector\");\n }\n}\nfunction PUSHB(n, state) {\n const stack = state.stack;\n const prog = state.prog;\n let ip = state.ip;\n if (false) console.log(state.step, \"PUSHB[\" + n + \"]\");\n for (let i = 0; i < n; i++) stack.push(prog[++ip]);\n state.ip = ip;\n}\nfunction PUSHW(n, state) {\n let ip = state.ip;\n const prog = state.prog;\n const stack = state.stack;\n if (false) console.log(state.ip, \"PUSHW[\" + n + \"]\");\n for (let i = 0; i < n; i++) {\n let w = prog[++ip] << 8 | prog[++ip];\n if (w & 32768) w = -((w ^ 65535) + 1);\n stack.push(w);\n }\n state.ip = ip;\n}\nfunction MDRP_MIRP(indirect, setRp0, keepD, ro, dt, state) {\n const stack = state.stack;\n const cvte = indirect && stack.pop();\n const pi = stack.pop();\n const rp0i = state.rp0;\n const rp = state.z0[rp0i];\n const p = state.z1[pi];\n const md = state.minDis;\n const fv = state.fv;\n const pv = state.dpv;\n let od;\n let d;\n let sign;\n let cv;\n d = od = pv.distance(p, rp, true, true);\n sign = d >= 0 ? 1 : -1;\n d = Math.abs(d);\n if (indirect) {\n cv = state.cvt[cvte];\n if (ro && Math.abs(d - cv) < state.cvCutIn) d = cv;\n }\n if (keepD && d < md) d = md;\n if (ro) d = state.round(d);\n fv.setRelative(p, rp, sign * d, pv);\n fv.touch(p);\n if (false) {\n console.log(\n state.step,\n (indirect ? \"MIRP[\" : \"MDRP[\") + (setRp0 ? \"M\" : \"m\") + (keepD ? \">\" : \"_\") + (ro ? \"R\" : \"_\") + (dt === 0 ? \"Gr\" : dt === 1 ? \"Bl\" : dt === 2 ? \"Wh\" : \"\") + \"]\",\n indirect ? cvte + \"(\" + state.cvt[cvte] + \",\" + cv + \")\" : \"\",\n pi,\n \"(d =\",\n od,\n \"->\",\n sign * d,\n \")\"\n );\n }\n state.rp1 = state.rp0;\n state.rp2 = pi;\n if (setRp0) state.rp0 = pi;\n}\ninstructionTable = [\n /* 0x00 */\n SVTCA.bind(void 0, yUnitVector),\n /* 0x01 */\n SVTCA.bind(void 0, xUnitVector),\n /* 0x02 */\n SPVTCA.bind(void 0, yUnitVector),\n /* 0x03 */\n SPVTCA.bind(void 0, xUnitVector),\n /* 0x04 */\n SFVTCA.bind(void 0, yUnitVector),\n /* 0x05 */\n SFVTCA.bind(void 0, xUnitVector),\n /* 0x06 */\n SPVTL.bind(void 0, 0),\n /* 0x07 */\n SPVTL.bind(void 0, 1),\n /* 0x08 */\n SFVTL.bind(void 0, 0),\n /* 0x09 */\n SFVTL.bind(void 0, 1),\n /* 0x0A */\n SPVFS,\n /* 0x0B */\n SFVFS,\n /* 0x0C */\n GPV,\n /* 0x0D */\n GFV,\n /* 0x0E */\n SFVTPV,\n /* 0x0F */\n ISECT,\n /* 0x10 */\n SRP0,\n /* 0x11 */\n SRP1,\n /* 0x12 */\n SRP2,\n /* 0x13 */\n SZP0,\n /* 0x14 */\n SZP1,\n /* 0x15 */\n SZP2,\n /* 0x16 */\n SZPS,\n /* 0x17 */\n SLOOP,\n /* 0x18 */\n RTG,\n /* 0x19 */\n RTHG,\n /* 0x1A */\n SMD,\n /* 0x1B */\n ELSE,\n /* 0x1C */\n JMPR,\n /* 0x1D */\n SCVTCI,\n /* 0x1E */\n void 0,\n // TODO SSWCI\n /* 0x1F */\n void 0,\n // TODO SSW\n /* 0x20 */\n DUP,\n /* 0x21 */\n POP,\n /* 0x22 */\n CLEAR,\n /* 0x23 */\n SWAP,\n /* 0x24 */\n DEPTH,\n /* 0x25 */\n CINDEX,\n /* 0x26 */\n MINDEX,\n /* 0x27 */\n void 0,\n // TODO ALIGNPTS\n /* 0x28 */\n void 0,\n /* 0x29 */\n void 0,\n // TODO UTP\n /* 0x2A */\n LOOPCALL,\n /* 0x2B */\n CALL,\n /* 0x2C */\n FDEF,\n /* 0x2D */\n void 0,\n // ENDF (eaten by FDEF)\n /* 0x2E */\n MDAP.bind(void 0, 0),\n /* 0x2F */\n MDAP.bind(void 0, 1),\n /* 0x30 */\n IUP.bind(void 0, yUnitVector),\n /* 0x31 */\n IUP.bind(void 0, xUnitVector),\n /* 0x32 */\n SHP.bind(void 0, 0),\n /* 0x33 */\n SHP.bind(void 0, 1),\n /* 0x34 */\n SHC.bind(void 0, 0),\n /* 0x35 */\n SHC.bind(void 0, 1),\n /* 0x36 */\n SHZ.bind(void 0, 0),\n /* 0x37 */\n SHZ.bind(void 0, 1),\n /* 0x38 */\n SHPIX,\n /* 0x39 */\n IP,\n /* 0x3A */\n MSIRP.bind(void 0, 0),\n /* 0x3B */\n MSIRP.bind(void 0, 1),\n /* 0x3C */\n ALIGNRP,\n /* 0x3D */\n RTDG,\n /* 0x3E */\n MIAP.bind(void 0, 0),\n /* 0x3F */\n MIAP.bind(void 0, 1),\n /* 0x40 */\n NPUSHB,\n /* 0x41 */\n NPUSHW,\n /* 0x42 */\n WS,\n /* 0x43 */\n RS,\n /* 0x44 */\n WCVTP,\n /* 0x45 */\n RCVT,\n /* 0x46 */\n GC.bind(void 0, 0),\n /* 0x47 */\n GC.bind(void 0, 1),\n /* 0x48 */\n void 0,\n // TODO SCFS\n /* 0x49 */\n MD.bind(void 0, 0),\n /* 0x4A */\n MD.bind(void 0, 1),\n /* 0x4B */\n MPPEM,\n /* 0x4C */\n void 0,\n // TODO MPS\n /* 0x4D */\n FLIPON,\n /* 0x4E */\n void 0,\n // TODO FLIPOFF\n /* 0x4F */\n void 0,\n // TODO DEBUG\n /* 0x50 */\n LT,\n /* 0x51 */\n LTEQ,\n /* 0x52 */\n GT,\n /* 0x53 */\n GTEQ,\n /* 0x54 */\n EQ,\n /* 0x55 */\n NEQ,\n /* 0x56 */\n ODD,\n /* 0x57 */\n EVEN,\n /* 0x58 */\n IF,\n /* 0x59 */\n EIF,\n /* 0x5A */\n AND,\n /* 0x5B */\n OR,\n /* 0x5C */\n NOT,\n /* 0x5D */\n DELTAP123.bind(void 0, 1),\n /* 0x5E */\n SDB,\n /* 0x5F */\n SDS,\n /* 0x60 */\n ADD,\n /* 0x61 */\n SUB,\n /* 0x62 */\n DIV,\n /* 0x63 */\n MUL,\n /* 0x64 */\n ABS,\n /* 0x65 */\n NEG,\n /* 0x66 */\n FLOOR,\n /* 0x67 */\n CEILING,\n /* 0x68 */\n ROUND.bind(void 0, 0),\n /* 0x69 */\n ROUND.bind(void 0, 1),\n /* 0x6A */\n ROUND.bind(void 0, 2),\n /* 0x6B */\n ROUND.bind(void 0, 3),\n /* 0x6C */\n void 0,\n // TODO NROUND[ab]\n /* 0x6D */\n void 0,\n // TODO NROUND[ab]\n /* 0x6E */\n void 0,\n // TODO NROUND[ab]\n /* 0x6F */\n void 0,\n // TODO NROUND[ab]\n /* 0x70 */\n WCVTF,\n /* 0x71 */\n DELTAP123.bind(void 0, 2),\n /* 0x72 */\n DELTAP123.bind(void 0, 3),\n /* 0x73 */\n DELTAC123.bind(void 0, 1),\n /* 0x74 */\n DELTAC123.bind(void 0, 2),\n /* 0x75 */\n DELTAC123.bind(void 0, 3),\n /* 0x76 */\n SROUND,\n /* 0x77 */\n S45ROUND,\n /* 0x78 */\n void 0,\n // TODO JROT[]\n /* 0x79 */\n void 0,\n // TODO JROF[]\n /* 0x7A */\n ROFF,\n /* 0x7B */\n void 0,\n /* 0x7C */\n RUTG,\n /* 0x7D */\n RDTG,\n /* 0x7E */\n POP,\n // actually SANGW, supposed to do only a pop though\n /* 0x7F */\n POP,\n // actually AA, supposed to do only a pop though\n /* 0x80 */\n void 0,\n // TODO FLIPPT\n /* 0x81 */\n void 0,\n // TODO FLIPRGON\n /* 0x82 */\n void 0,\n // TODO FLIPRGOFF\n /* 0x83 */\n void 0,\n /* 0x84 */\n void 0,\n /* 0x85 */\n SCANCTRL,\n /* 0x86 */\n SDPVTL.bind(void 0, 0),\n /* 0x87 */\n SDPVTL.bind(void 0, 1),\n /* 0x88 */\n GETINFO,\n /* 0x89 */\n void 0,\n // TODO IDEF\n /* 0x8A */\n ROLL,\n /* 0x8B */\n MAX,\n /* 0x8C */\n MIN,\n /* 0x8D */\n SCANTYPE,\n /* 0x8E */\n INSTCTRL,\n /* 0x8F */\n void 0,\n /* 0x90 */\n void 0,\n /* 0x91 */\n void 0,\n /* 0x92 */\n void 0,\n /* 0x93 */\n void 0,\n /* 0x94 */\n void 0,\n /* 0x95 */\n void 0,\n /* 0x96 */\n void 0,\n /* 0x97 */\n void 0,\n /* 0x98 */\n void 0,\n /* 0x99 */\n void 0,\n /* 0x9A */\n void 0,\n /* 0x9B */\n void 0,\n /* 0x9C */\n void 0,\n /* 0x9D */\n void 0,\n /* 0x9E */\n void 0,\n /* 0x9F */\n void 0,\n /* 0xA0 */\n void 0,\n /* 0xA1 */\n void 0,\n /* 0xA2 */\n void 0,\n /* 0xA3 */\n void 0,\n /* 0xA4 */\n void 0,\n /* 0xA5 */\n void 0,\n /* 0xA6 */\n void 0,\n /* 0xA7 */\n void 0,\n /* 0xA8 */\n void 0,\n /* 0xA9 */\n void 0,\n /* 0xAA */\n void 0,\n /* 0xAB */\n void 0,\n /* 0xAC */\n void 0,\n /* 0xAD */\n void 0,\n /* 0xAE */\n void 0,\n /* 0xAF */\n void 0,\n /* 0xB0 */\n PUSHB.bind(void 0, 1),\n /* 0xB1 */\n PUSHB.bind(void 0, 2),\n /* 0xB2 */\n PUSHB.bind(void 0, 3),\n /* 0xB3 */\n PUSHB.bind(void 0, 4),\n /* 0xB4 */\n PUSHB.bind(void 0, 5),\n /* 0xB5 */\n PUSHB.bind(void 0, 6),\n /* 0xB6 */\n PUSHB.bind(void 0, 7),\n /* 0xB7 */\n PUSHB.bind(void 0, 8),\n /* 0xB8 */\n PUSHW.bind(void 0, 1),\n /* 0xB9 */\n PUSHW.bind(void 0, 2),\n /* 0xBA */\n PUSHW.bind(void 0, 3),\n /* 0xBB */\n PUSHW.bind(void 0, 4),\n /* 0xBC */\n PUSHW.bind(void 0, 5),\n /* 0xBD */\n PUSHW.bind(void 0, 6),\n /* 0xBE */\n PUSHW.bind(void 0, 7),\n /* 0xBF */\n PUSHW.bind(void 0, 8),\n /* 0xC0 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 0),\n /* 0xC1 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 1),\n /* 0xC2 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 2),\n /* 0xC3 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 3),\n /* 0xC4 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 0),\n /* 0xC5 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 1),\n /* 0xC6 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 2),\n /* 0xC7 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 3),\n /* 0xC8 */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 0),\n /* 0xC9 */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 1),\n /* 0xCA */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 2),\n /* 0xCB */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 3),\n /* 0xCC */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 0),\n /* 0xCD */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 1),\n /* 0xCE */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 2),\n /* 0xCF */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 3),\n /* 0xD0 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 0),\n /* 0xD1 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 1),\n /* 0xD2 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 2),\n /* 0xD3 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 3),\n /* 0xD4 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 0),\n /* 0xD5 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 1),\n /* 0xD6 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 2),\n /* 0xD7 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 3),\n /* 0xD8 */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 0),\n /* 0xD9 */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 1),\n /* 0xDA */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 2),\n /* 0xDB */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 3),\n /* 0xDC */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 0),\n /* 0xDD */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 1),\n /* 0xDE */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 2),\n /* 0xDF */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 3),\n /* 0xE0 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 0),\n /* 0xE1 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 1),\n /* 0xE2 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 2),\n /* 0xE3 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 3),\n /* 0xE4 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 0),\n /* 0xE5 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 1),\n /* 0xE6 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 2),\n /* 0xE7 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 3),\n /* 0xE8 */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 0),\n /* 0xE9 */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 1),\n /* 0xEA */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 2),\n /* 0xEB */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 3),\n /* 0xEC */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 0),\n /* 0xED */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 1),\n /* 0xEE */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 2),\n /* 0xEF */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 3),\n /* 0xF0 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 0),\n /* 0xF1 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 1),\n /* 0xF2 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 2),\n /* 0xF3 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 3),\n /* 0xF4 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 0),\n /* 0xF5 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 1),\n /* 0xF6 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 2),\n /* 0xF7 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 3),\n /* 0xF8 */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 0),\n /* 0xF9 */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 1),\n /* 0xFA */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 2),\n /* 0xFB */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 3),\n /* 0xFC */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 0),\n /* 0xFD */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 1),\n /* 0xFE */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 2),\n /* 0xFF */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 3)\n];\nvar hintingtt_default = Hinting;\n\n// src/tokenizer.mjs\nfunction Token(char) {\n this.char = char;\n this.state = {};\n this.activeState = null;\n}\nfunction ContextRange(startIndex, endOffset, contextName) {\n this.contextName = contextName;\n this.startIndex = startIndex;\n this.endOffset = endOffset;\n}\nfunction ContextChecker(contextName, checkStart, checkEnd) {\n this.contextName = contextName;\n this.openRange = null;\n this.ranges = [];\n this.checkStart = checkStart;\n this.checkEnd = checkEnd;\n}\nfunction ContextParams(context, currentIndex) {\n this.context = context;\n this.index = currentIndex;\n this.length = context.length;\n this.current = context[currentIndex];\n this.backtrack = context.slice(0, currentIndex);\n this.lookahead = context.slice(currentIndex + 1);\n}\nfunction Event(eventId) {\n this.eventId = eventId;\n this.subscribers = [];\n}\nfunction initializeCoreEvents(events) {\n const coreEvents = [\n \"start\",\n \"end\",\n \"next\",\n \"newToken\",\n \"contextStart\",\n \"contextEnd\",\n \"insertToken\",\n \"removeToken\",\n \"removeRange\",\n \"replaceToken\",\n \"replaceRange\",\n \"composeRUD\",\n \"updateContextsRanges\"\n ];\n for (let i = 0; i < coreEvents.length; i++) {\n const eventId = coreEvents[i];\n Object.defineProperty(this.events, eventId, {\n value: new Event(eventId)\n });\n }\n if (events) {\n for (let i = 0; i < coreEvents.length; i++) {\n const eventId = coreEvents[i];\n const event = events[eventId];\n if (typeof event === \"function\") {\n this.events[eventId].subscribe(event);\n }\n }\n }\n const requiresContextUpdate = [\n \"insertToken\",\n \"removeToken\",\n \"removeRange\",\n \"replaceToken\",\n \"replaceRange\",\n \"composeRUD\"\n ];\n for (let i = 0; i < requiresContextUpdate.length; i++) {\n const eventId = requiresContextUpdate[i];\n this.events[eventId].subscribe(\n this.updateContextsRanges\n );\n }\n}\nfunction Tokenizer(events) {\n this.tokens = [];\n this.registeredContexts = {};\n this.contextCheckers = [];\n this.events = {};\n this.registeredModifiers = [];\n initializeCoreEvents.call(this, events);\n}\nToken.prototype.setState = function(key, value) {\n this.state[key] = value;\n this.activeState = { key, value: this.state[key] };\n return this.activeState;\n};\nToken.prototype.getState = function(stateId) {\n return this.state[stateId] || null;\n};\nTokenizer.prototype.inboundIndex = function(index) {\n return index >= 0 && index < this.tokens.length;\n};\nTokenizer.prototype.composeRUD = function(RUDs) {\n const silent = true;\n const state = RUDs.map((RUD) => this[RUD[0]].apply(this, RUD.slice(1).concat(silent)));\n const hasFAILObject = (obj) => typeof obj === \"object\" && Object.prototype.hasOwnProperty.call(obj, \"FAIL\");\n if (state.every(hasFAILObject)) {\n return {\n FAIL: \"composeRUD: one or more operations hasn't completed successfully\",\n report: state.filter(hasFAILObject)\n };\n }\n this.dispatch(\"composeRUD\", [state.filter((op) => !hasFAILObject(op))]);\n};\nTokenizer.prototype.replaceRange = function(startIndex, offset, tokens, silent) {\n offset = offset !== null ? offset : this.tokens.length;\n const isTokenType = tokens.every((token) => token instanceof Token);\n if (!isNaN(startIndex) && this.inboundIndex(startIndex) && isTokenType) {\n const replaced = this.tokens.splice.apply(\n this.tokens,\n [startIndex, offset].concat(tokens)\n );\n if (!silent) this.dispatch(\"replaceToken\", [startIndex, offset, tokens]);\n return [replaced, tokens];\n } else {\n return { FAIL: \"replaceRange: invalid tokens or startIndex.\" };\n }\n};\nTokenizer.prototype.replaceToken = function(index, token, silent) {\n if (!isNaN(index) && this.inboundIndex(index) && token instanceof Token) {\n const replaced = this.tokens.splice(index, 1, token);\n if (!silent) this.dispatch(\"replaceToken\", [index, token]);\n return [replaced[0], token];\n } else {\n return { FAIL: \"replaceToken: invalid token or index.\" };\n }\n};\nTokenizer.prototype.removeRange = function(startIndex, offset, silent) {\n offset = !isNaN(offset) ? offset : this.tokens.length;\n const tokens = this.tokens.splice(startIndex, offset);\n if (!silent) this.dispatch(\"removeRange\", [tokens, startIndex, offset]);\n return tokens;\n};\nTokenizer.prototype.removeToken = function(index, silent) {\n if (!isNaN(index) && this.inboundIndex(index)) {\n const token = this.tokens.splice(index, 1);\n if (!silent) this.dispatch(\"removeToken\", [token, index]);\n return token;\n } else {\n return { FAIL: \"removeToken: invalid token index.\" };\n }\n};\nTokenizer.prototype.insertToken = function(tokens, index, silent) {\n const tokenType = tokens.every(\n (token) => token instanceof Token\n );\n if (tokenType) {\n this.tokens.splice.apply(\n this.tokens,\n [index, 0].concat(tokens)\n );\n if (!silent) this.dispatch(\"insertToken\", [tokens, index]);\n return tokens;\n } else {\n return { FAIL: \"insertToken: invalid token(s).\" };\n }\n};\nTokenizer.prototype.registerModifier = function(modifierId, condition, modifier) {\n this.events.newToken.subscribe(function(token, contextParams) {\n const conditionParams = [token, contextParams];\n const canApplyModifier = condition === null || condition.apply(this, conditionParams) === true;\n const modifierParams = [token, contextParams];\n if (canApplyModifier) {\n let newStateValue = modifier.apply(this, modifierParams);\n token.setState(modifierId, newStateValue);\n }\n });\n this.registeredModifiers.push(modifierId);\n};\nEvent.prototype.subscribe = function(eventHandler) {\n if (typeof eventHandler === \"function\") {\n return this.subscribers.push(eventHandler) - 1;\n } else {\n return { FAIL: `invalid '${this.eventId}' event handler` };\n }\n};\nEvent.prototype.unsubscribe = function(subsId) {\n this.subscribers.splice(subsId, 1);\n};\nContextParams.prototype.setCurrentIndex = function(index) {\n this.index = index;\n this.current = this.context[index];\n this.backtrack = this.context.slice(0, index);\n this.lookahead = this.context.slice(index + 1);\n};\nContextParams.prototype.get = function(offset) {\n switch (true) {\n case offset === 0:\n return this.current;\n case (offset < 0 && Math.abs(offset) <= this.backtrack.length):\n return this.backtrack.slice(offset)[0];\n case (offset > 0 && offset <= this.lookahead.length):\n return this.lookahead[offset - 1];\n default:\n return null;\n }\n};\nTokenizer.prototype.rangeToText = function(range) {\n if (range instanceof ContextRange) {\n return this.getRangeTokens(range).map((token) => token.char).join(\"\");\n }\n};\nTokenizer.prototype.getText = function() {\n return this.tokens.map((token) => token.char).join(\"\");\n};\nTokenizer.prototype.getContext = function(contextName) {\n let context = this.registeredContexts[contextName];\n return context ? context : null;\n};\nTokenizer.prototype.on = function(eventName, eventHandler) {\n const event = this.events[eventName];\n if (event) {\n return event.subscribe(eventHandler);\n } else {\n return null;\n }\n};\nTokenizer.prototype.dispatch = function(eventName, args) {\n const event = this.events[eventName];\n if (event instanceof Event) {\n for (let i = 0; i < event.subscribers.length; i++) {\n const subscriber = event.subscribers[i];\n subscriber.apply(this, args || []);\n }\n }\n};\nTokenizer.prototype.registerContextChecker = function(contextName, contextStartCheck, contextEndCheck) {\n if (this.getContext(contextName)) return {\n FAIL: `context name '${contextName}' is already registered.`\n };\n if (typeof contextStartCheck !== \"function\") return {\n FAIL: \"missing context start check.\"\n };\n if (typeof contextEndCheck !== \"function\") return {\n FAIL: \"missing context end check.\"\n };\n const contextCheckers = new ContextChecker(\n contextName,\n contextStartCheck,\n contextEndCheck\n );\n this.registeredContexts[contextName] = contextCheckers;\n this.contextCheckers.push(contextCheckers);\n return contextCheckers;\n};\nTokenizer.prototype.getRangeTokens = function(range) {\n const endIndex = range.startIndex + range.endOffset;\n return [].concat(\n this.tokens.slice(range.startIndex, endIndex)\n );\n};\nTokenizer.prototype.getContextRanges = function(contextName) {\n const context = this.getContext(contextName);\n if (context) {\n return context.ranges;\n } else {\n return { FAIL: `context checker '${contextName}' is not registered.` };\n }\n};\nTokenizer.prototype.resetContextsRanges = function() {\n const registeredContexts = this.registeredContexts;\n for (const contextName in registeredContexts) {\n if (Object.prototype.hasOwnProperty.call(registeredContexts, contextName)) {\n const context = registeredContexts[contextName];\n context.ranges = [];\n }\n }\n};\nTokenizer.prototype.updateContextsRanges = function() {\n this.resetContextsRanges();\n const chars = this.tokens.map((token) => token.char);\n for (let i = 0; i < chars.length; i++) {\n const contextParams = new ContextParams(chars, i);\n this.runContextCheck(contextParams);\n }\n this.dispatch(\"updateContextsRanges\", [this.registeredContexts]);\n};\nTokenizer.prototype.setEndOffset = function(offset, contextName) {\n const startIndex = this.getContext(contextName).openRange.startIndex;\n let range = new ContextRange(startIndex, offset, contextName);\n const ranges = this.getContext(contextName).ranges;\n range.rangeId = `${contextName}.${ranges.length}`;\n ranges.push(range);\n this.getContext(contextName).openRange = null;\n return range;\n};\nTokenizer.prototype.runContextCheck = function(contextParams) {\n const index = contextParams.index;\n for (let i = 0; i < this.contextCheckers.length; i++) {\n const contextChecker = this.contextCheckers[i];\n let contextName = contextChecker.contextName;\n let openRange = this.getContext(contextName).openRange;\n if (!openRange && contextChecker.checkStart(contextParams)) {\n openRange = new ContextRange(index, null, contextName);\n this.getContext(contextName).openRange = openRange;\n this.dispatch(\"contextStart\", [contextName, index]);\n }\n if (!!openRange && contextChecker.checkEnd(contextParams)) {\n const offset = index - openRange.startIndex + 1;\n const range = this.setEndOffset(offset, contextName);\n this.dispatch(\"contextEnd\", [contextName, range]);\n }\n }\n};\nTokenizer.prototype.tokenize = function(text) {\n this.tokens = [];\n this.resetContextsRanges();\n let chars = Array.from(text);\n this.dispatch(\"start\");\n for (let i = 0; i < chars.length; i++) {\n const char = chars[i];\n const contextParams = new ContextParams(chars, i);\n this.dispatch(\"next\", [contextParams]);\n this.runContextCheck(contextParams);\n let token = new Token(char);\n this.tokens.push(token);\n this.dispatch(\"newToken\", [token, contextParams]);\n }\n this.dispatch(\"end\", [this.tokens]);\n return this.tokens;\n};\nvar tokenizer_default = Tokenizer;\n\n// src/char.mjs\nfunction isArabicChar(c) {\n return /[\\u0600-\\u065F\\u066A-\\u06D2\\u06FA-\\u06FF]/.test(c);\n}\nfunction isIsolatedArabicChar(char) {\n return /[\\u0630\\u0690\\u0621\\u0631\\u0661\\u0671\\u0622\\u0632\\u0672\\u0692\\u06C2\\u0623\\u0673\\u0693\\u06C3\\u0624\\u0694\\u06C4\\u0625\\u0675\\u0695\\u06C5\\u06E5\\u0676\\u0696\\u06C6\\u0627\\u0677\\u0697\\u06C7\\u0648\\u0688\\u0698\\u06C8\\u0689\\u0699\\u06C9\\u068A\\u06CA\\u066B\\u068B\\u06CB\\u068C\\u068D\\u06CD\\u06FD\\u068E\\u06EE\\u06FE\\u062F\\u068F\\u06CF\\u06EF]/.test(char);\n}\nfunction isTashkeelArabicChar(char) {\n return /[\\u0600-\\u0605\\u060C-\\u060E\\u0610-\\u061B\\u061E\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED]/.test(char);\n}\nfunction isThaiChar(c) {\n return /[\\u0E00-\\u0E7F]/.test(c);\n}\nfunction isLatinChar(c) {\n return /[A-z]/.test(c);\n}\nfunction isWhiteSpace(c) {\n return /\\s/.test(c);\n}\n\n// src/features/featureQuery.mjs\nfunction FeatureQuery(font) {\n this.font = font;\n this.features = {};\n}\nfunction SubstitutionAction(action) {\n this.id = action.id;\n this.tag = action.tag;\n this.substitution = action.substitution;\n}\nfunction lookupCoverage(glyphIndex, coverage) {\n if (!glyphIndex) return -1;\n switch (coverage.format) {\n case 1:\n return coverage.glyphs.indexOf(glyphIndex);\n case 2: {\n let ranges = coverage.ranges;\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n if (glyphIndex >= range.start && glyphIndex <= range.end) {\n let offset = glyphIndex - range.start;\n return range.index + offset;\n }\n }\n break;\n }\n default:\n return -1;\n }\n return -1;\n}\nfunction singleSubstitutionFormat1(glyphIndex, subtable) {\n let substituteIndex = lookupCoverage(glyphIndex, subtable.coverage);\n if (substituteIndex === -1) return null;\n return glyphIndex + subtable.deltaGlyphId;\n}\nfunction singleSubstitutionFormat2(glyphIndex, subtable) {\n let substituteIndex = lookupCoverage(glyphIndex, subtable.coverage);\n if (substituteIndex === -1) return null;\n return subtable.substitute[substituteIndex];\n}\nfunction lookupCoverageList(coverageList, contextParams) {\n let lookupList = [];\n for (let i = 0; i < coverageList.length; i++) {\n const coverage = coverageList[i];\n let glyphIndex = contextParams.current;\n glyphIndex = Array.isArray(glyphIndex) ? glyphIndex[0] : glyphIndex;\n const lookupIndex = lookupCoverage(glyphIndex, coverage);\n if (lookupIndex !== -1) {\n lookupList.push(lookupIndex);\n }\n }\n if (lookupList.length !== coverageList.length) return -1;\n return lookupList;\n}\nfunction chainingSubstitutionFormat3(contextParams, subtable) {\n const lookupsCount = subtable.inputCoverage.length + subtable.lookaheadCoverage.length + subtable.backtrackCoverage.length;\n if (contextParams.context.length < lookupsCount) return [];\n let inputLookups = lookupCoverageList(\n subtable.inputCoverage,\n contextParams\n );\n if (inputLookups === -1) return [];\n const lookaheadOffset = subtable.inputCoverage.length - 1;\n if (contextParams.lookahead.length < subtable.lookaheadCoverage.length) return [];\n let lookaheadContext = contextParams.lookahead.slice(lookaheadOffset);\n while (lookaheadContext.length && isTashkeelArabicChar(lookaheadContext[0].char)) {\n lookaheadContext.shift();\n }\n const lookaheadParams = new ContextParams(lookaheadContext, 0);\n let lookaheadLookups = lookupCoverageList(\n subtable.lookaheadCoverage,\n lookaheadParams\n );\n let backtrackContext = [].concat(contextParams.backtrack);\n backtrackContext.reverse();\n while (backtrackContext.length && isTashkeelArabicChar(backtrackContext[0].char)) {\n backtrackContext.shift();\n }\n if (backtrackContext.length < subtable.backtrackCoverage.length) return [];\n const backtrackParams = new ContextParams(backtrackContext, 0);\n let backtrackLookups = lookupCoverageList(\n subtable.backtrackCoverage,\n backtrackParams\n );\n const contextRulesMatch = inputLookups.length === subtable.inputCoverage.length && lookaheadLookups.length === subtable.lookaheadCoverage.length && backtrackLookups.length === subtable.backtrackCoverage.length;\n let substitutions = [];\n if (contextRulesMatch) {\n for (let i = 0; i < subtable.lookupRecords.length; i++) {\n const lookupRecord = subtable.lookupRecords[i];\n const lookupListIndex = lookupRecord.lookupListIndex;\n const lookupTable = this.getLookupByIndex(lookupListIndex);\n for (let s = 0; s < lookupTable.subtables.length; s++) {\n let subtable2 = lookupTable.subtables[s];\n let lookup;\n let substitutionType = this.getSubstitutionType(lookupTable, subtable2);\n if (substitutionType === \"71\") {\n substitutionType = this.getSubstitutionType(subtable2, subtable2.extension);\n lookup = this.getLookupMethod(subtable2, subtable2.extension);\n subtable2 = subtable2.extension;\n } else {\n lookup = this.getLookupMethod(lookupTable, subtable2);\n }\n if (substitutionType === \"12\") {\n const glyphIndex = contextParams.get(lookupRecord.sequenceIndex);\n const substitution = lookup(glyphIndex);\n if (substitution) substitutions.push(substitution);\n } else if (substitutionType === \"21\") {\n const glyphIndex = contextParams.get(lookupRecord.sequenceIndex);\n const substitution = lookup(glyphIndex);\n if (substitution) substitutions.push(substitution);\n } else {\n throw new Error(`Substitution type ${substitutionType} is not supported in chaining substitution`);\n }\n }\n }\n }\n return substitutions;\n}\nfunction ligatureSubstitutionFormat1(contextParams, subtable) {\n let glyphIndex = contextParams.current;\n let ligSetIndex = lookupCoverage(glyphIndex, subtable.coverage);\n if (ligSetIndex === -1) return null;\n let ligature;\n let ligatureSet = subtable.ligatureSets[ligSetIndex];\n for (let s = 0; s < ligatureSet.length; s++) {\n ligature = ligatureSet[s];\n for (let l = 0; l < ligature.components.length; l++) {\n const lookaheadItem = contextParams.lookahead[l];\n const component = ligature.components[l];\n if (lookaheadItem !== component) break;\n if (l === ligature.components.length - 1) return ligature;\n }\n }\n return null;\n}\nfunction contextSubstitutionFormat1(contextParams, subtable) {\n let glyphId = contextParams.current;\n let ligSetIndex = lookupCoverage(glyphId, subtable.coverage);\n if (ligSetIndex === -1)\n return null;\n for (const ruleSet of subtable.ruleSets) {\n for (const rule of ruleSet) {\n let matched = true;\n for (let i = 0; i < rule.input.length; i++) {\n if (contextParams.lookahead[i] !== rule.input[i]) {\n matched = false;\n break;\n }\n }\n if (matched) {\n let substitutions = [];\n substitutions.push(glyphId);\n for (let i = 0; i < rule.input.length; i++) {\n substitutions.push(rule.input[i]);\n }\n const parser = (substitutions2, lookupRecord) => {\n const { lookupListIndex, sequenceIndex } = lookupRecord;\n const { subtables } = this.getLookupByIndex(lookupListIndex);\n for (const subtable2 of subtables) {\n let ligSetIndex2 = lookupCoverage(substitutions2[sequenceIndex], subtable2.coverage);\n if (ligSetIndex2 !== -1) {\n substitutions2[sequenceIndex] = subtable2.deltaGlyphId;\n }\n }\n };\n for (let i = 0; i < rule.lookupRecords.length; i++) {\n const lookupRecord = rule.lookupRecords[i];\n parser(substitutions, lookupRecord);\n }\n return substitutions;\n }\n }\n }\n return null;\n}\nfunction contextSubstitutionFormat3(contextParams, subtable) {\n if (contextParams.context.length < subtable.coverages.length) {\n return [];\n }\n for (let i = 0; i < subtable.coverages.length; i++) {\n let glyphIndex = contextParams.get(i);\n glyphIndex = Array.isArray(glyphIndex) ? glyphIndex[0] : glyphIndex;\n if (lookupCoverage(glyphIndex, subtable.coverages[i]) === -1) {\n return [];\n }\n }\n let substitutions = [];\n for (let i = 0; i < subtable.lookupRecords.length; i++) {\n const lookupRecord = subtable.lookupRecords[i];\n const lookupListIndex = lookupRecord.lookupListIndex;\n const lookupTable = this.getLookupByIndex(lookupListIndex);\n for (let s = 0; s < lookupTable.subtables.length; s++) {\n let subtable2 = lookupTable.subtables[s];\n let lookup;\n let substitutionType = this.getSubstitutionType(lookupTable, subtable2);\n if (substitutionType === \"71\") {\n substitutionType = this.getSubstitutionType(subtable2, subtable2.extension);\n lookup = this.getLookupMethod(subtable2, subtable2.extension);\n subtable2 = subtable2.extension;\n } else {\n lookup = this.getLookupMethod(lookupTable, subtable2);\n }\n if (substitutionType === \"12\") {\n const glyphIndex = contextParams.get(lookupRecord.sequenceIndex);\n const substitution = lookup(glyphIndex);\n if (substitution) substitutions.push(substitution);\n } else if (substitutionType === \"21\") {\n const glyphIndex = contextParams.get(lookupRecord.sequenceIndex);\n const substitution = lookup(glyphIndex);\n if (substitution) substitutions.push(substitution);\n }\n }\n }\n return substitutions;\n}\nfunction decompositionSubstitutionFormat1(glyphIndex, subtable) {\n let substituteIndex = lookupCoverage(glyphIndex, subtable.coverage);\n if (substituteIndex === -1) return null;\n return subtable.sequences[substituteIndex];\n}\nFeatureQuery.prototype.getDefaultScriptFeaturesIndexes = function() {\n const scripts = this.font.tables.gsub.scripts;\n for (let s = 0; s < scripts.length; s++) {\n const script = scripts[s];\n if (script.tag === \"DFLT\") return script.script.defaultLangSys.featureIndexes;\n }\n return [];\n};\nFeatureQuery.prototype.getScriptFeaturesIndexes = function(scriptTag) {\n const tables = this.font.tables;\n if (!tables.gsub) return [];\n if (!scriptTag) return this.getDefaultScriptFeaturesIndexes();\n const scripts = this.font.tables.gsub.scripts;\n for (let i = 0; i < scripts.length; i++) {\n const script = scripts[i];\n if (script.tag === scriptTag && script.script.defaultLangSys) {\n return script.script.defaultLangSys.featureIndexes;\n } else {\n let langSysRecords = script.langSysRecords;\n if (langSysRecords) {\n for (let j = 0; j < langSysRecords.length; j++) {\n const langSysRecord = langSysRecords[j];\n if (langSysRecord.tag === scriptTag) {\n let langSys = langSysRecord.langSys;\n return langSys.featureIndexes;\n }\n }\n }\n }\n }\n return this.getDefaultScriptFeaturesIndexes();\n};\nFeatureQuery.prototype.mapTagsToFeatures = function(features, scriptTag) {\n let tags = {};\n for (let i = 0; i < features.length; i++) {\n const tag = features[i].tag;\n const feature = features[i].feature;\n tags[tag] = feature;\n }\n this.features[scriptTag].tags = tags;\n};\nFeatureQuery.prototype.getScriptFeatures = function(scriptTag) {\n let features = this.features[scriptTag];\n if (Object.prototype.hasOwnProperty.call(this.features, scriptTag)) return features;\n const featuresIndexes = this.getScriptFeaturesIndexes(scriptTag);\n if (!featuresIndexes) return null;\n const gsub = this.font.tables.gsub;\n features = featuresIndexes.map((index) => gsub.features[index]);\n this.features[scriptTag] = features;\n this.mapTagsToFeatures(features, scriptTag);\n return features;\n};\nFeatureQuery.prototype.getSubstitutionType = function(lookupTable, subtable) {\n const lookupType = lookupTable.lookupType.toString();\n const substFormat = subtable.substFormat.toString();\n return lookupType + substFormat;\n};\nFeatureQuery.prototype.getLookupMethod = function(lookupTable, subtable) {\n let substitutionType = this.getSubstitutionType(lookupTable, subtable);\n switch (substitutionType) {\n case \"11\":\n return (glyphIndex) => singleSubstitutionFormat1.apply(\n this,\n [glyphIndex, subtable]\n );\n case \"12\":\n return (glyphIndex) => singleSubstitutionFormat2.apply(\n this,\n [glyphIndex, subtable]\n );\n case \"63\":\n return (contextParams) => chainingSubstitutionFormat3.apply(\n this,\n [contextParams, subtable]\n );\n case \"41\":\n return (contextParams) => ligatureSubstitutionFormat1.apply(\n this,\n [contextParams, subtable]\n );\n case \"21\":\n return (glyphIndex) => decompositionSubstitutionFormat1.apply(\n this,\n [glyphIndex, subtable]\n );\n case \"51\":\n return (contextParams) => contextSubstitutionFormat1.apply(\n this,\n [contextParams, subtable]\n );\n case \"53\":\n return (contextParams) => contextSubstitutionFormat3.apply(\n this,\n [contextParams, subtable]\n );\n default:\n throw new Error(\n `substitutionType : ${substitutionType} lookupType: ${lookupTable.lookupType} - substFormat: ${subtable.substFormat} is not yet supported`\n );\n }\n};\nFeatureQuery.prototype.lookupFeature = function(query) {\n let contextParams = query.contextParams;\n let currentIndex = contextParams.index;\n const feature = this.getFeature({\n tag: query.tag,\n script: query.script\n });\n if (!feature) return new Error(\n `font '${(this.font.names.unicode || this.font.names.windows || this.font.names.macintosh).fullName.en}' doesn't support feature '${query.tag}' for script '${query.script}'.`\n );\n const lookups = this.getFeatureLookups(feature);\n const substitutions = [].concat(contextParams.context);\n for (let l = 0; l < lookups.length; l++) {\n const lookupTable = lookups[l];\n const subtables = this.getLookupSubtables(lookupTable);\n for (let s = 0; s < subtables.length; s++) {\n let subtable = subtables[s];\n let substType = this.getSubstitutionType(lookupTable, subtable);\n let lookup;\n if (substType === \"71\") {\n substType = this.getSubstitutionType(subtable, subtable.extension);\n lookup = this.getLookupMethod(subtable, subtable.extension);\n subtable = subtable.extension;\n } else {\n lookup = this.getLookupMethod(lookupTable, subtable);\n }\n let substitution;\n switch (substType) {\n case \"11\":\n substitution = lookup(contextParams.current);\n if (substitution) {\n substitutions.splice(currentIndex, 1, new SubstitutionAction({\n id: 11,\n tag: query.tag,\n substitution\n }));\n }\n break;\n case \"12\":\n substitution = lookup(contextParams.current);\n if (substitution) {\n substitutions.splice(currentIndex, 1, new SubstitutionAction({\n id: 12,\n tag: query.tag,\n substitution\n }));\n }\n break;\n case \"63\":\n substitution = lookup(contextParams);\n if (Array.isArray(substitution) && substitution.length) {\n substitutions.splice(currentIndex, 1, new SubstitutionAction({\n id: 63,\n tag: query.tag,\n substitution\n }));\n }\n break;\n case \"41\":\n substitution = lookup(contextParams);\n if (substitution) {\n substitutions.splice(currentIndex, 1, new SubstitutionAction({\n id: 41,\n tag: query.tag,\n substitution\n }));\n }\n break;\n case \"21\":\n substitution = lookup(contextParams.current);\n if (substitution) {\n substitutions.splice(currentIndex, 1, new SubstitutionAction({\n id: 21,\n tag: query.tag,\n substitution\n }));\n }\n break;\n case \"51\":\n case \"53\":\n substitution = lookup(contextParams);\n if (Array.isArray(substitution) && substitution.length) {\n substitutions.splice(currentIndex, 1, new SubstitutionAction({\n id: parseInt(substType),\n tag: query.tag,\n substitution\n }));\n }\n break;\n }\n contextParams = new ContextParams(substitutions, currentIndex);\n if (Array.isArray(substitution) && !substitution.length) continue;\n substitution = null;\n }\n }\n return substitutions.length ? substitutions : null;\n};\nFeatureQuery.prototype.supports = function(query) {\n if (!query.script) return false;\n this.getScriptFeatures(query.script);\n const supportedScript = Object.prototype.hasOwnProperty.call(this.features, query.script);\n if (!query.tag) return supportedScript;\n const supportedFeature = this.features[query.script].some((feature) => feature.tag === query.tag);\n return supportedScript && supportedFeature;\n};\nFeatureQuery.prototype.getLookupSubtables = function(lookupTable) {\n return lookupTable.subtables || null;\n};\nFeatureQuery.prototype.getLookupByIndex = function(index) {\n const lookups = this.font.tables.gsub.lookups;\n return lookups[index] || null;\n};\nFeatureQuery.prototype.getFeatureLookups = function(feature) {\n return feature.lookupListIndexes.map(this.getLookupByIndex.bind(this));\n};\nFeatureQuery.prototype.getFeature = function getFeature(query) {\n if (!this.font) return { FAIL: \"No font was found\" };\n if (!Object.prototype.hasOwnProperty.call(this.features, query.script)) {\n this.getScriptFeatures(query.script);\n }\n const scriptFeatures = this.features[query.script];\n if (!scriptFeatures) return { FAIL: `No feature for script ${query.script}` };\n if (!scriptFeatures.tags[query.tag]) return null;\n return this.features[query.script].tags[query.tag];\n};\nvar featureQuery_default = FeatureQuery;\n\n// src/features/arab/contextCheck/arabicWord.mjs\nfunction arabicWordStartCheck(contextParams) {\n const char = contextParams.current;\n const prevChar = contextParams.get(-1);\n return (\n // ? arabic first char\n prevChar === null && isArabicChar(char) || // ? arabic char preceded with a non arabic char\n !isArabicChar(prevChar) && isArabicChar(char)\n );\n}\nfunction arabicWordEndCheck(contextParams) {\n const nextChar = contextParams.get(1);\n return (\n // ? last arabic char\n nextChar === null || // ? next char is not arabic\n !isArabicChar(nextChar)\n );\n}\nvar arabicWord_default = {\n startCheck: arabicWordStartCheck,\n endCheck: arabicWordEndCheck\n};\n\n// src/features/arab/contextCheck/arabicSentence.mjs\nfunction arabicSentenceStartCheck(contextParams) {\n const char = contextParams.current;\n const prevChar = contextParams.get(-1);\n return (\n // ? an arabic char preceded with a non arabic char\n (isArabicChar(char) || isTashkeelArabicChar(char)) && !isArabicChar(prevChar)\n );\n}\nfunction arabicSentenceEndCheck(contextParams) {\n const nextChar = contextParams.get(1);\n switch (true) {\n case nextChar === null:\n return true;\n case (!isArabicChar(nextChar) && !isTashkeelArabicChar(nextChar)): {\n const nextIsWhitespace = isWhiteSpace(nextChar);\n if (!nextIsWhitespace) return true;\n if (nextIsWhitespace) {\n let arabicCharAhead = false;\n arabicCharAhead = contextParams.lookahead.some(\n (c) => isArabicChar(c) || isTashkeelArabicChar(c)\n );\n if (!arabicCharAhead) return true;\n }\n break;\n }\n default:\n return false;\n }\n}\nvar arabicSentence_default = {\n startCheck: arabicSentenceStartCheck,\n endCheck: arabicSentenceEndCheck\n};\n\n// src/features/applySubstitution.mjs\nfunction singleSubstitutionFormat12(action, tokens, index) {\n tokens[index].setState(action.tag, action.substitution);\n}\nfunction singleSubstitutionFormat22(action, tokens, index) {\n tokens[index].setState(action.tag, action.substitution);\n}\nfunction chainingSubstitutionFormat32(action, tokens, index) {\n for (let i = 0; i < action.substitution.length; i++) {\n const subst = action.substitution[i];\n const token = tokens[index + i];\n if (Array.isArray(subst)) {\n if (subst.length) {\n token.setState(action.tag, subst[0]);\n } else {\n token.setState(\"deleted\", true);\n }\n continue;\n }\n token.setState(action.tag, subst);\n }\n}\nfunction ligatureSubstitutionFormat12(action, tokens, index) {\n let token = tokens[index];\n token.setState(action.tag, action.substitution.ligGlyph);\n const compsCount = action.substitution.components.length;\n for (let i = 0; i < compsCount; i++) {\n token = tokens[index + i + 1];\n token.setState(\"deleted\", true);\n }\n}\nvar SUBSTITUTIONS = {\n 11: singleSubstitutionFormat12,\n 12: singleSubstitutionFormat22,\n 63: chainingSubstitutionFormat32,\n 41: ligatureSubstitutionFormat12,\n 51: chainingSubstitutionFormat32,\n 53: chainingSubstitutionFormat32\n};\nfunction applySubstitution(action, tokens, index) {\n if (action instanceof SubstitutionAction && SUBSTITUTIONS[action.id]) {\n SUBSTITUTIONS[action.id](action, tokens, index);\n }\n}\nvar applySubstitution_default = applySubstitution;\n\n// src/features/arab/arabicPresentationForms.mjs\nfunction willConnectPrev(charContextParams) {\n let backtrack = [].concat(charContextParams.backtrack);\n for (let i = backtrack.length - 1; i >= 0; i--) {\n const prevChar = backtrack[i];\n const isolated = isIsolatedArabicChar(prevChar);\n const tashkeel = isTashkeelArabicChar(prevChar);\n if (!isolated && !tashkeel) return true;\n if (isolated) return false;\n }\n return false;\n}\nfunction willConnectNext(charContextParams) {\n if (isIsolatedArabicChar(charContextParams.current)) return false;\n for (let i = 0; i < charContextParams.lookahead.length; i++) {\n const nextChar = charContextParams.lookahead[i];\n const tashkeel = isTashkeelArabicChar(nextChar);\n if (!tashkeel) return true;\n }\n return false;\n}\nfunction arabicPresentationForms(range) {\n const script = \"arab\";\n const tags = this.featuresTags[script];\n const tokens = this.tokenizer.getRangeTokens(range);\n if (tokens.length === 1) return;\n let contextParams = new ContextParams(\n tokens.map(\n (token) => token.getState(\"glyphIndex\")\n ),\n 0\n );\n const charContextParams = new ContextParams(\n tokens.map(\n (token) => token.char\n ),\n 0\n );\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n if (isTashkeelArabicChar(token.char)) continue;\n contextParams.setCurrentIndex(i);\n charContextParams.setCurrentIndex(i);\n let CONNECT = 0;\n if (willConnectPrev(charContextParams)) CONNECT |= 1;\n if (willConnectNext(charContextParams)) CONNECT |= 2;\n let tag;\n switch (CONNECT) {\n case 1:\n tag = \"fina\";\n break;\n case 2:\n tag = \"init\";\n break;\n case 3:\n tag = \"medi\";\n break;\n }\n if (tags.indexOf(tag) === -1) continue;\n let substitutions = this.query.lookupFeature({\n tag,\n script,\n contextParams\n });\n if (substitutions instanceof Error) {\n console.info(substitutions.message);\n continue;\n }\n for (let j = 0; j < substitutions.length; j++) {\n const action = substitutions[j];\n if (action instanceof SubstitutionAction) {\n applySubstitution_default(action, tokens, j);\n contextParams.context[j] = action.substitution;\n }\n }\n }\n}\nvar arabicPresentationForms_default = arabicPresentationForms;\n\n// src/features/arab/arabicRequiredLigatures.mjs\nfunction getContextParams(tokens, index) {\n const context = tokens.map((token) => token.activeState.value);\n return new ContextParams(context, index || 0);\n}\nfunction arabicRequiredLigatures(range) {\n const script = \"arab\";\n let tokens = this.tokenizer.getRangeTokens(range);\n let contextParams = getContextParams(tokens);\n for (let index = 0; index < contextParams.context.length; index++) {\n contextParams.setCurrentIndex(index);\n let substitutions = this.query.lookupFeature({\n tag: \"rlig\",\n script,\n contextParams\n });\n if (substitutions.length) {\n for (let i = 0; i < substitutions.length; i++) {\n const action = substitutions[i];\n applySubstitution_default(action, tokens, index);\n }\n contextParams = getContextParams(tokens);\n }\n }\n}\nvar arabicRequiredLigatures_default = arabicRequiredLigatures;\n\n// src/features/ccmp/contextCheck/ccmpReplacement.mjs\nfunction ccmpReplacementStartCheck(contextParams) {\n return contextParams.index === 0 && contextParams.context.length > 1;\n}\nfunction ccmpReplacementEndCheck(contextParams) {\n return contextParams.index === contextParams.context.length - 1;\n}\nvar ccmpReplacement_default = {\n startCheck: ccmpReplacementStartCheck,\n endCheck: ccmpReplacementEndCheck\n};\n\n// src/features/ccmp/ccmpReplacementLigatures.mjs\nfunction getContextParams2(tokens, index) {\n const context = tokens.map((token) => token.activeState.value);\n return new ContextParams(context, index || 0);\n}\nfunction ccmpReplacementLigatures(range) {\n const script = \"delf\";\n const tag = \"ccmp\";\n let tokens = this.tokenizer.getRangeTokens(range);\n let contextParams = getContextParams2(tokens);\n for (let index = 0; index < contextParams.context.length; index++) {\n if (!this.query.getFeature({ tag, script, contextParams })) {\n continue;\n }\n contextParams.setCurrentIndex(index);\n let substitutions = this.query.lookupFeature({\n tag,\n script,\n contextParams\n });\n if (substitutions.length) {\n for (let i = 0; i < substitutions.length; i++) {\n const action = substitutions[i];\n applySubstitution_default(action, tokens, index);\n }\n contextParams = getContextParams2(tokens);\n }\n }\n}\nvar ccmpReplacementLigatures_default = ccmpReplacementLigatures;\n\n// src/features/latn/contextCheck/latinWord.mjs\nfunction latinWordStartCheck(contextParams) {\n const char = contextParams.current;\n const prevChar = contextParams.get(-1);\n return (\n // ? latin first char\n prevChar === null && isLatinChar(char) || // ? latin char preceded with a non latin char\n !isLatinChar(prevChar) && isLatinChar(char)\n );\n}\nfunction latinWordEndCheck(contextParams) {\n const nextChar = contextParams.get(1);\n return (\n // ? last latin char\n nextChar === null || // ? next char is not latin\n !isLatinChar(nextChar)\n );\n}\nvar latinWord_default = {\n startCheck: latinWordStartCheck,\n endCheck: latinWordEndCheck\n};\n\n// src/features/latn/latinLigatures.mjs\nfunction getContextParams3(tokens, index) {\n const context = tokens.map((token) => token.activeState.value);\n return new ContextParams(context, index || 0);\n}\nfunction latinLigature(range) {\n const script = \"latn\";\n let tokens = this.tokenizer.getRangeTokens(range);\n let contextParams = getContextParams3(tokens);\n for (let index = 0; index < contextParams.context.length; index++) {\n contextParams.setCurrentIndex(index);\n let substitutions = this.query.lookupFeature({\n tag: \"liga\",\n script,\n contextParams\n });\n if (substitutions.length) {\n for (let i = 0; i < substitutions.length; i++) {\n const action = substitutions[i];\n applySubstitution_default(action, tokens, index);\n }\n contextParams = getContextParams3(tokens);\n }\n }\n}\nvar latinLigatures_default = latinLigature;\n\n// src/features/thai/contextCheck/thaiWord.mjs\nfunction thaiWordStartCheck(contextParams) {\n const char = contextParams.current;\n const prevChar = contextParams.get(-1);\n return (\n // ? thai first char\n prevChar === null && isThaiChar(char) || // ? thai char preceded with a non thai char\n !isThaiChar(prevChar) && isThaiChar(char)\n );\n}\nfunction thaiWordEndCheck(contextParams) {\n const nextChar = contextParams.get(1);\n return (\n // ? last thai char\n nextChar === null || // ? next char is not thai\n !isThaiChar(nextChar)\n );\n}\nvar thaiWord_default = {\n startCheck: thaiWordStartCheck,\n endCheck: thaiWordEndCheck\n};\n\n// src/features/thai/thaiGlyphComposition.mjs\nfunction getContextParams4(tokens, index) {\n const context = tokens.map((token) => token.activeState.value);\n return new ContextParams(context, index || 0);\n}\nfunction thaiGlyphComposition(range) {\n const script = \"thai\";\n let tokens = this.tokenizer.getRangeTokens(range);\n let contextParams = getContextParams4(tokens, 0);\n for (let index = 0; index < contextParams.context.length; index++) {\n contextParams.setCurrentIndex(index);\n let substitutions = this.query.lookupFeature({\n tag: \"ccmp\",\n script,\n contextParams\n });\n if (substitutions.length) {\n for (let i = 0; i < substitutions.length; i++) {\n const action = substitutions[i];\n applySubstitution_default(action, tokens, index);\n }\n contextParams = getContextParams4(tokens, index);\n }\n }\n}\nvar thaiGlyphComposition_default = thaiGlyphComposition;\n\n// src/features/thai/thaiLigatures.mjs\nfunction getContextParams5(tokens, index) {\n const context = tokens.map((token) => token.activeState.value);\n return new ContextParams(context, index || 0);\n}\nfunction thaiLigatures(range) {\n const script = \"thai\";\n let tokens = this.tokenizer.getRangeTokens(range);\n let contextParams = getContextParams5(tokens, 0);\n for (let index = 0; index < contextParams.context.length; index++) {\n contextParams.setCurrentIndex(index);\n let substitutions = this.query.lookupFeature({\n tag: \"liga\",\n script,\n contextParams\n });\n if (substitutions.length) {\n for (let i = 0; i < substitutions.length; i++) {\n const action = substitutions[i];\n applySubstitution_default(action, tokens, index);\n }\n contextParams = getContextParams5(tokens, index);\n }\n }\n}\nvar thaiLigatures_default = thaiLigatures;\n\n// src/features/thai/thaiRequiredLigatures.mjs\nfunction getContextParams6(tokens, index) {\n const context = tokens.map((token) => token.activeState.value);\n return new ContextParams(context, index || 0);\n}\nfunction thaiRequiredLigatures(range) {\n const script = \"thai\";\n let tokens = this.tokenizer.getRangeTokens(range);\n let contextParams = getContextParams6(tokens, 0);\n for (let index = 0; index < contextParams.context.length; index++) {\n contextParams.setCurrentIndex(index);\n let substitutions = this.query.lookupFeature({\n tag: \"rlig\",\n script,\n contextParams\n });\n if (substitutions.length) {\n for (let i = 0; i < substitutions.length; i++) {\n const action = substitutions[i];\n applySubstitution_default(action, tokens, index);\n }\n contextParams = getContextParams6(tokens, index);\n }\n }\n}\nvar thaiRequiredLigatures_default = thaiRequiredLigatures;\n\n// src/features/unicode/contextCheck/variationSequenceCheck.mjs\nfunction isVariationSequenceSelector(char) {\n if (char === null) return false;\n const charCode = char.codePointAt(0);\n return (\n // Mongolian Variation Selectors\n charCode >= 6155 && charCode <= 6157 || // Generic Variation Selectors\n charCode >= 65024 && charCode <= 65039 || // Ideographic Variation Sequences\n charCode >= 917760 && charCode <= 917999\n );\n}\nfunction unicodeVariationSequenceStartCheck(contextParams) {\n const char = contextParams.current;\n const nextChar = contextParams.get(1);\n return nextChar === null && isVariationSequenceSelector(char) || isVariationSequenceSelector(nextChar);\n}\nfunction unicodeVariationSequenceEndCheck(contextParams) {\n const nextChar = contextParams.get(1);\n return nextChar === null || !isVariationSequenceSelector(nextChar);\n}\nvar variationSequenceCheck_default = {\n startCheck: unicodeVariationSequenceStartCheck,\n endCheck: unicodeVariationSequenceEndCheck\n};\n\n// src/features/unicode/variationSequences.mjs\nfunction unicodeVariationSequence(range) {\n const font = this.query.font;\n const tokens = this.tokenizer.getRangeTokens(range);\n tokens[1].setState(\"deleted\", true);\n if (font.tables.cmap && font.tables.cmap.varSelectorList) {\n const baseCodePoint = tokens[0].char.codePointAt(0);\n const vsCodePoint = tokens[1].char.codePointAt(0);\n const selectorLookup = font.tables.cmap.varSelectorList[vsCodePoint];\n if (selectorLookup !== void 0) {\n if (selectorLookup.nonDefaultUVS) {\n const mappings = selectorLookup.nonDefaultUVS.uvsMappings;\n if (mappings[baseCodePoint]) {\n const replacementGlyphId = mappings[baseCodePoint].glyphID;\n if (font.glyphs.glyphs[replacementGlyphId] !== void 0) {\n tokens[0].setState(\"glyphIndex\", replacementGlyphId);\n }\n }\n }\n }\n }\n}\nvar variationSequences_default = unicodeVariationSequence;\n\n// src/bidi.mjs\nfunction Bidi(baseDir) {\n this.baseDir = baseDir || \"ltr\";\n this.tokenizer = new tokenizer_default();\n this.featuresTags = {};\n}\nBidi.prototype.setText = function(text) {\n this.text = text;\n};\nBidi.prototype.contextChecks = {\n ccmpReplacementCheck: ccmpReplacement_default,\n latinWordCheck: latinWord_default,\n arabicWordCheck: arabicWord_default,\n arabicSentenceCheck: arabicSentence_default,\n thaiWordCheck: thaiWord_default,\n unicodeVariationSequenceCheck: variationSequenceCheck_default\n};\nfunction registerContextChecker(checkId) {\n const check = this.contextChecks[`${checkId}Check`];\n return this.tokenizer.registerContextChecker(\n checkId,\n check.startCheck,\n check.endCheck\n );\n}\nfunction tokenizeText() {\n registerContextChecker.call(this, \"ccmpReplacement\");\n registerContextChecker.call(this, \"latinWord\");\n registerContextChecker.call(this, \"arabicWord\");\n registerContextChecker.call(this, \"arabicSentence\");\n registerContextChecker.call(this, \"thaiWord\");\n registerContextChecker.call(this, \"unicodeVariationSequence\");\n return this.tokenizer.tokenize(this.text);\n}\nfunction reverseArabicSentences() {\n const ranges = this.tokenizer.getContextRanges(\"arabicSentence\");\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n let rangeTokens = this.tokenizer.getRangeTokens(range);\n this.tokenizer.replaceRange(\n range.startIndex,\n range.endOffset,\n rangeTokens.reverse()\n );\n }\n}\nBidi.prototype.registerFeatures = function(script, tags) {\n const supportedTags = tags.filter(\n (tag) => this.query.supports({ script, tag })\n );\n if (!Object.prototype.hasOwnProperty.call(this.featuresTags, script)) {\n this.featuresTags[script] = supportedTags;\n } else {\n this.featuresTags[script] = this.featuresTags[script].concat(supportedTags);\n }\n};\nBidi.prototype.applyFeatures = function(font, features) {\n if (!font) throw new Error(\n \"No valid font was provided to apply features\"\n );\n if (!this.query) this.query = new featureQuery_default(font);\n for (let f = 0; f < features.length; f++) {\n const feature = features[f];\n if (!this.query.supports({ script: feature.script })) continue;\n this.registerFeatures(feature.script, feature.tags);\n }\n};\nBidi.prototype.registerModifier = function(modifierId, condition, modifier) {\n this.tokenizer.registerModifier(modifierId, condition, modifier);\n};\nfunction checkGlyphIndexStatus() {\n if (this.tokenizer.registeredModifiers.indexOf(\"glyphIndex\") === -1) {\n throw new Error(\n \"glyphIndex modifier is required to apply arabic presentation features.\"\n );\n }\n}\nfunction applyArabicPresentationForms() {\n const script = \"arab\";\n if (!Object.prototype.hasOwnProperty.call(this.featuresTags, script)) return;\n checkGlyphIndexStatus.call(this);\n const ranges = this.tokenizer.getContextRanges(\"arabicWord\");\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n arabicPresentationForms_default.call(this, range);\n }\n}\nfunction applyCcmpReplacement() {\n checkGlyphIndexStatus.call(this);\n const ranges = this.tokenizer.getContextRanges(\"ccmpReplacement\");\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n ccmpReplacementLigatures_default.call(this, range);\n }\n}\nfunction applyArabicRequireLigatures() {\n if (!this.hasFeatureEnabled(\"arab\", \"rlig\")) return;\n checkGlyphIndexStatus.call(this);\n const ranges = this.tokenizer.getContextRanges(\"arabicWord\");\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n arabicRequiredLigatures_default.call(this, range);\n }\n}\nfunction applyLatinLigatures() {\n if (!this.hasFeatureEnabled(\"latn\", \"liga\")) return;\n checkGlyphIndexStatus.call(this);\n const ranges = this.tokenizer.getContextRanges(\"latinWord\");\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n latinLigatures_default.call(this, range);\n }\n}\nfunction applyUnicodeVariationSequences() {\n const ranges = this.tokenizer.getContextRanges(\"unicodeVariationSequence\");\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n variationSequences_default.call(this, range);\n }\n}\nfunction applyThaiFeatures() {\n checkGlyphIndexStatus.call(this);\n const ranges = this.tokenizer.getContextRanges(\"thaiWord\");\n for (let i = 0; i < ranges.length; i++) {\n const range = ranges[i];\n if (this.hasFeatureEnabled(\"thai\", \"liga\")) thaiLigatures_default.call(this, range);\n if (this.hasFeatureEnabled(\"thai\", \"rlig\")) thaiRequiredLigatures_default.call(this, range);\n if (this.hasFeatureEnabled(\"thai\", \"ccmp\")) thaiGlyphComposition_default.call(this, range);\n }\n}\nBidi.prototype.checkContextReady = function(contextId) {\n return !!this.tokenizer.getContext(contextId);\n};\nBidi.prototype.applyFeaturesToContexts = function() {\n if (this.checkContextReady(\"ccmpReplacement\")) {\n applyCcmpReplacement.call(this);\n }\n if (this.checkContextReady(\"arabicWord\")) {\n applyArabicPresentationForms.call(this);\n applyArabicRequireLigatures.call(this);\n }\n if (this.checkContextReady(\"latinWord\")) {\n applyLatinLigatures.call(this);\n }\n if (this.checkContextReady(\"arabicSentence\")) {\n reverseArabicSentences.call(this);\n }\n if (this.checkContextReady(\"thaiWord\")) {\n applyThaiFeatures.call(this);\n }\n if (this.checkContextReady(\"unicodeVariationSequence\")) {\n applyUnicodeVariationSequences.call(this);\n }\n};\nBidi.prototype.hasFeatureEnabled = function(script, tag) {\n return (this.featuresTags[script] || []).indexOf(tag) !== -1;\n};\nBidi.prototype.processText = function(text) {\n if (!this.text || this.text !== text) {\n this.setText(text);\n tokenizeText.call(this);\n this.applyFeaturesToContexts();\n }\n};\nBidi.prototype.getBidiText = function(text) {\n this.processText(text);\n return this.tokenizer.getText();\n};\nBidi.prototype.getTextGlyphs = function(text) {\n this.processText(text);\n let indexes = [];\n for (let i = 0; i < this.tokenizer.tokens.length; i++) {\n const token = this.tokenizer.tokens[i];\n if (token.state.deleted) continue;\n const index = token.activeState.value;\n indexes.push(Array.isArray(index) ? index[0] : index);\n }\n return indexes;\n};\nvar bidi_default = Bidi;\n\n// src/font.mjs\nfunction createDefaultNamesInfo(options) {\n return {\n fontFamily: { en: options.familyName || \" \" },\n fontSubfamily: { en: options.styleName || \" \" },\n fullName: { en: options.fullName || options.familyName + \" \" + options.styleName },\n // postScriptName may not contain any whitespace\n postScriptName: { en: options.postScriptName || (options.familyName + options.styleName).replace(/\\s/g, \"\") },\n designer: { en: options.designer || \" \" },\n designerURL: { en: options.designerURL || \" \" },\n manufacturer: { en: options.manufacturer || \" \" },\n manufacturerURL: { en: options.manufacturerURL || \" \" },\n license: { en: options.license || \" \" },\n licenseURL: { en: options.licenseURL || \" \" },\n version: { en: options.version || \"Version 0.1\" },\n description: { en: options.description || \" \" },\n copyright: { en: options.copyright || \" \" },\n trademark: { en: options.trademark || \" \" }\n };\n}\nfunction Font(options) {\n options = options || {};\n options.tables = options.tables || {};\n if (!options.empty) {\n if (!options.familyName) throw new Error(\"When creating a new Font object, familyName is required.\");\n if (!options.styleName) throw new Error(\"When creating a new Font object, styleName is required.\");\n if (!options.unitsPerEm) throw new Error(\"When creating a new Font object, unitsPerEm is required.\");\n if (!options.ascender) throw new Error(\"When creating a new Font object, ascender is required.\");\n if (options.descender > 0) throw new Error(\"When creating a new Font object, negative descender value is required.\");\n this.names = {};\n this.names.unicode = createDefaultNamesInfo(options);\n this.names.macintosh = createDefaultNamesInfo(options);\n this.names.windows = createDefaultNamesInfo(options);\n this.unitsPerEm = options.unitsPerEm || 1e3;\n this.ascender = options.ascender;\n this.descender = options.descender;\n this.createdTimestamp = options.createdTimestamp;\n this.italicAngle = options.italicAngle || 0;\n this.weightClass = options.weightClass || 0;\n let selection = 0;\n if (options.fsSelection) {\n selection = options.fsSelection;\n } else {\n if (this.italicAngle < 0) {\n selection |= this.fsSelectionValues.ITALIC;\n } else if (this.italicAngle > 0) {\n selection |= this.fsSelectionValues.OBLIQUE;\n }\n if (this.weightClass >= 600) {\n selection |= this.fsSelectionValues.BOLD;\n }\n if (selection === 0) {\n selection = this.fsSelectionValues.REGULAR;\n }\n }\n if (!options.panose || !Array.isArray(options.panose)) {\n options.panose = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n this.tables = Object.assign(options.tables, {\n os2: Object.assign({\n usWeightClass: options.weightClass || this.usWeightClasses.MEDIUM,\n usWidthClass: options.widthClass || this.usWidthClasses.MEDIUM,\n bFamilyType: options.panose[0] || 0,\n bSerifStyle: options.panose[1] || 0,\n bWeight: options.panose[2] || 0,\n bProportion: options.panose[3] || 0,\n bContrast: options.panose[4] || 0,\n bStrokeVariation: options.panose[5] || 0,\n bArmStyle: options.panose[6] || 0,\n bLetterform: options.panose[7] || 0,\n bMidline: options.panose[8] || 0,\n bXHeight: options.panose[9] || 0,\n fsSelection: selection\n }, options.tables.os2)\n });\n }\n this.supported = true;\n this.glyphs = new glyphset_default.GlyphSet(this, options.glyphs || []);\n this.encoding = new DefaultEncoding(this);\n this.position = new position_default(this);\n this.substitution = new substitution_default(this);\n this.tables = this.tables || {};\n this.tables = new Proxy(this.tables, {\n set: (tables, tableName, tableData) => {\n tables[tableName] = tableData;\n if (tables.fvar && (tables.gvar || tables.cff2) && !this.variation) {\n this.variation = new VariationManager(this);\n }\n return true;\n }\n });\n this.palettes = new PaletteManager(this);\n this.layers = new LayerManager(this);\n this.svgImages = new SVGImageManager(this);\n this._push = null;\n this._hmtxTableData = {};\n Object.defineProperty(this, \"hinting\", {\n get: function() {\n if (this._hinting) return this._hinting;\n if (this.outlinesFormat === \"truetype\") {\n return this._hinting = new hintingtt_default(this);\n }\n return null;\n }\n });\n}\nFont.prototype.hasChar = function(c) {\n return this.encoding.charToGlyphIndex(c) > 0;\n};\nFont.prototype.charToGlyphIndex = function(s) {\n return this.encoding.charToGlyphIndex(s);\n};\nFont.prototype.charToGlyph = function(c) {\n const glyphIndex = this.charToGlyphIndex(c);\n let glyph = this.glyphs.get(glyphIndex);\n if (!glyph) {\n glyph = this.glyphs.get(0);\n }\n return glyph;\n};\nFont.prototype.updateFeatures = function(options) {\n return this.defaultRenderOptions.features.map((feature) => {\n if (feature.script === \"latn\") {\n return {\n script: \"latn\",\n tags: feature.tags.filter((tag) => options[tag])\n };\n } else {\n return feature;\n }\n });\n};\nFont.prototype.stringToGlyphIndexes = function(s, options) {\n const bidi = new bidi_default();\n const charToGlyphIndexMod = (token) => this.charToGlyphIndex(token.char);\n bidi.registerModifier(\"glyphIndex\", null, charToGlyphIndexMod);\n let features = options ? this.updateFeatures(options.features) : this.defaultRenderOptions.features;\n bidi.applyFeatures(this, features);\n return bidi.getTextGlyphs(s);\n};\nFont.prototype.stringToGlyphs = function(s, options) {\n const indexes = this.stringToGlyphIndexes(s, options);\n let length = indexes.length;\n const glyphs = new Array(length);\n const notdef = this.glyphs.get(0);\n for (let i = 0; i < length; i += 1) {\n glyphs[i] = this.glyphs.get(indexes[i]) || notdef;\n }\n return glyphs;\n};\nFont.prototype.nameToGlyphIndex = function(name) {\n return this.glyphNames.nameToGlyphIndex(name);\n};\nFont.prototype.nameToGlyph = function(name) {\n const glyphIndex = this.nameToGlyphIndex(name);\n let glyph = this.glyphs.get(glyphIndex);\n if (!glyph) {\n glyph = this.glyphs.get(0);\n }\n return glyph;\n};\nFont.prototype.glyphIndexToName = function(gid) {\n if (!this.glyphNames.glyphIndexToName) {\n return \"\";\n }\n return this.glyphNames.glyphIndexToName(gid);\n};\nFont.prototype.getKerningValue = function(leftGlyph, rightGlyph) {\n leftGlyph = leftGlyph.index || leftGlyph;\n rightGlyph = rightGlyph.index || rightGlyph;\n const gposKerning = this.position.defaultKerningTables;\n if (gposKerning) {\n return this.position.getKerningValue(gposKerning, leftGlyph, rightGlyph);\n }\n return this.kerningPairs[leftGlyph + \",\" + rightGlyph] || 0;\n};\nFont.prototype.defaultRenderOptions = {\n kerning: true,\n features: [\n /**\n * these 4 features are required to render Arabic text properly\n * and shouldn't be turned off when rendering arabic text.\n */\n { script: \"arab\", tags: [\"init\", \"medi\", \"fina\", \"rlig\"] },\n { script: \"latn\", tags: [\"liga\", \"rlig\"] },\n { script: \"thai\", tags: [\"liga\", \"rlig\", \"ccmp\"] }\n ],\n hinting: false,\n usePalette: 0,\n drawLayers: true,\n drawSVG: true\n};\nFont.prototype.forEachGlyph = function(text, x, y, fontSize, options, callback) {\n x = x !== void 0 ? x : 0;\n y = y !== void 0 ? y : 0;\n fontSize = fontSize !== void 0 ? fontSize : 72;\n options = Object.assign({}, this.defaultRenderOptions, options);\n const fontScale = 1 / this.unitsPerEm * fontSize;\n const glyphs = this.stringToGlyphs(text, options);\n let kerningLookups;\n if (options.kerning) {\n const script = options.script || this.position.getDefaultScriptName();\n kerningLookups = this.position.getKerningTables(script, options.language);\n }\n for (let i = 0; i < glyphs.length; i += 1) {\n const glyph = glyphs[i];\n callback.call(this, glyph, x, y, fontSize, options);\n if (glyph.advanceWidth) {\n x += glyph.advanceWidth * fontScale;\n }\n if (options.kerning && i < glyphs.length - 1) {\n const kerningValue = kerningLookups ? this.position.getKerningValue(kerningLookups, glyph.index, glyphs[i + 1].index) : this.getKerningValue(glyph, glyphs[i + 1]);\n x += kerningValue * fontScale;\n }\n if (options.letterSpacing) {\n x += options.letterSpacing * fontSize;\n } else if (options.tracking) {\n x += options.tracking / 1e3 * fontSize;\n }\n }\n return x;\n};\nFont.prototype.getPath = function(text, x, y, fontSize, options) {\n options = Object.assign({}, this.defaultRenderOptions, options);\n const fullPath = new path_default();\n fullPath._layers = [];\n applyPaintType(this, fullPath, fontSize);\n if (fullPath.stroke) {\n const scale = 1 / (fullPath.unitsPerEm || 1e3) * fontSize;\n fullPath.strokeWidth *= scale;\n }\n this.forEachGlyph(text, x, y, fontSize, options, (glyph, gX, gY, gFontSize) => {\n const glyphPath = glyph.getPath(gX, gY, gFontSize, options, this);\n if (options.drawSVG || options.drawLayers) {\n const layers = glyphPath._layers;\n if (layers && layers.length) {\n for (let l = 0; l < layers.length; l++) {\n const layer = layers[l];\n fullPath._layers.push(layer);\n }\n return;\n }\n }\n fullPath.extend(glyphPath);\n });\n return fullPath;\n};\nFont.prototype.getPaths = function(text, x, y, fontSize, options) {\n options = Object.assign({}, this.defaultRenderOptions, options);\n const glyphPaths = [];\n this.forEachGlyph(text, x, y, fontSize, options, function(glyph, gX, gY, gFontSize) {\n const glyphPath = glyph.getPath(gX, gY, gFontSize, options, this);\n glyphPaths.push(glyphPath);\n });\n return glyphPaths;\n};\nFont.prototype.getAdvanceWidth = function(text, fontSize, options) {\n options = Object.assign({}, this.defaultRenderOptions, options);\n return this.forEachGlyph(text, 0, 0, fontSize, options, function() {\n });\n};\nFont.prototype.draw = function(ctx, text, x, y, fontSize, options) {\n const path = this.getPath(text, x, y, fontSize, options);\n path.draw(ctx);\n};\nFont.prototype.drawPoints = function(ctx, text, x, y, fontSize, options) {\n options = Object.assign({}, this.defaultRenderOptions, options);\n this.forEachGlyph(text, x, y, fontSize, options, function(glyph, gX, gY, gFontSize) {\n glyph.drawPoints(ctx, gX, gY, gFontSize, options, this);\n });\n};\nFont.prototype.drawMetrics = function(ctx, text, x, y, fontSize, options) {\n options = Object.assign({}, this.defaultRenderOptions, options);\n this.forEachGlyph(text, x, y, fontSize, options, function(glyph, gX, gY, gFontSize) {\n glyph.drawMetrics(ctx, gX, gY, gFontSize);\n });\n};\nFont.prototype.getEnglishName = function(name) {\n const translations = (this.names.unicode || this.names.macintosh || this.names.windows)[name];\n if (translations) {\n return translations.en;\n }\n};\nFont.prototype.validate = function() {\n const warnings = [];\n const _this = this;\n function assert(predicate, message) {\n if (!predicate) {\n console.warn(`[opentype.js] ${message}`);\n warnings.push(message);\n }\n }\n function assertNamePresent(name) {\n const englishName = _this.getEnglishName(name);\n assert(\n englishName && englishName.trim().length > 0,\n \"No English \" + name + \" specified.\"\n );\n }\n assertNamePresent(\"fontFamily\");\n assertNamePresent(\"weightName\");\n assertNamePresent(\"manufacturer\");\n assertNamePresent(\"copyright\");\n assertNamePresent(\"version\");\n assert(this.unitsPerEm > 0, \"No unitsPerEm specified.\");\n if (this.tables.colr) {\n const baseGlyphs = this.tables.colr.baseGlyphRecords;\n let previousID = -1;\n for (let b = 0; b < baseGlyphs.length; b++) {\n const currentGlyphID = baseGlyphs[b].glyphID;\n assert(previousID < baseGlyphs[b].glyphID, `baseGlyphs must be sorted by GlyphID in ascending order, but glyphID ${currentGlyphID} comes after ${previousID}`);\n if (previousID > baseGlyphs[b].glyphID) {\n break;\n }\n previousID = currentGlyphID;\n }\n }\n return warnings;\n};\nFont.prototype.toTables = function() {\n return sfnt_default.fontToTable(this);\n};\nFont.prototype.toBuffer = function() {\n console.warn(\"Font.toBuffer is deprecated. Use Font.toArrayBuffer instead.\");\n return this.toArrayBuffer();\n};\nFont.prototype.toArrayBuffer = function() {\n const sfntTable = this.toTables();\n const bytes = sfntTable.encode();\n const buffer = new ArrayBuffer(bytes.length);\n const intArray = new Uint8Array(buffer);\n for (let i = 0; i < bytes.length; i++) {\n intArray[i] = bytes[i];\n }\n return buffer;\n};\nFont.prototype.download = function() {\n console.error(\"DEPRECATED: platform-specific actions are to be implemented on user-side\");\n};\nFont.prototype.fsSelectionValues = {\n ITALIC: 1,\n //1\n UNDERSCORE: 2,\n //2\n NEGATIVE: 4,\n //4\n OUTLINED: 8,\n //8\n STRIKEOUT: 16,\n //16\n BOLD: 32,\n //32\n REGULAR: 64,\n //64\n USER_TYPO_METRICS: 128,\n //128\n WWS: 256,\n //256\n OBLIQUE: 512\n //512\n};\nFont.prototype.macStyleValues = {\n BOLD: 1,\n //1\n ITALIC: 2,\n //2\n UNDERLINE: 4,\n //4\n OUTLINED: 8,\n //8\n SHADOW: 16,\n //16\n CONDENSED: 32,\n //32\n EXTENDED: 64\n //64\n};\nFont.prototype.usWidthClasses = {\n ULTRA_CONDENSED: 1,\n EXTRA_CONDENSED: 2,\n CONDENSED: 3,\n SEMI_CONDENSED: 4,\n MEDIUM: 5,\n SEMI_EXPANDED: 6,\n EXPANDED: 7,\n EXTRA_EXPANDED: 8,\n ULTRA_EXPANDED: 9\n};\nFont.prototype.usWeightClasses = {\n THIN: 100,\n EXTRA_LIGHT: 200,\n LIGHT: 300,\n NORMAL: 400,\n MEDIUM: 500,\n SEMI_BOLD: 600,\n BOLD: 700,\n EXTRA_BOLD: 800,\n BLACK: 900\n};\nvar font_default = Font;\n\n// src/tables/hvar.mjs\nfunction parseHvarTable(data, start) {\n const p = new parse_default.Parser(data, start);\n const tableVersionMajor = p.parseUShort();\n const tableVersionMinor = p.parseUShort();\n if (tableVersionMajor !== 1) {\n console.warn(`Unsupported hvar table version ${tableVersionMajor}.${tableVersionMinor}`);\n }\n const version = [\n tableVersionMajor,\n tableVersionMinor\n ];\n const itemVariationStore = p.parsePointer32(function() {\n return this.parseItemVariationStore();\n });\n const advanceWidth = p.parsePointer32(function() {\n return this.parseDeltaSetIndexMap();\n });\n const lsb = p.parsePointer32(function() {\n return this.parseDeltaSetIndexMap();\n });\n const rsb = p.parsePointer32(function() {\n return this.parseDeltaSetIndexMap();\n });\n return {\n version,\n itemVariationStore,\n advanceWidth,\n lsb,\n rsb\n };\n}\nfunction makeHvarTable() {\n console.warn(\"Writing of hvar tables is not yet supported.\");\n}\nvar hvar_default = { make: makeHvarTable, parse: parseHvarTable };\n\n// src/tables/gdef.mjs\nvar attachList = function() {\n return {\n coverage: this.parsePointer(Parser.coverage),\n attachPoints: this.parseList(Parser.pointer(Parser.uShortList))\n };\n};\nvar caretValue = function() {\n var format = this.parseUShort();\n check_default.argument(\n format === 1 || format === 2 || format === 3,\n \"Unsupported CaretValue table version.\"\n );\n if (format === 1) {\n return { coordinate: this.parseShort() };\n } else if (format === 2) {\n return { pointindex: this.parseShort() };\n } else if (format === 3) {\n return { coordinate: this.parseShort() };\n }\n};\nvar ligGlyph = function() {\n return this.parseList(Parser.pointer(caretValue));\n};\nvar ligCaretList = function() {\n return {\n coverage: this.parsePointer(Parser.coverage),\n ligGlyphs: this.parseList(Parser.pointer(ligGlyph))\n };\n};\nvar markGlyphSets = function() {\n this.parseUShort();\n return this.parseList(Parser.pointer(Parser.coverage));\n};\nfunction parseGDEFTable(data, start) {\n start = start || 0;\n const p = new Parser(data, start);\n const tableVersion = p.parseVersion(1);\n check_default.argument(\n tableVersion === 1 || tableVersion === 1.2 || tableVersion === 1.3,\n \"Unsupported GDEF table version.\"\n );\n var gdef = {\n version: tableVersion,\n classDef: p.parsePointer(Parser.classDef),\n attachList: p.parsePointer(attachList),\n ligCaretList: p.parsePointer(ligCaretList),\n markAttachClassDef: p.parsePointer(Parser.classDef)\n };\n if (tableVersion >= 1.2) {\n gdef.markGlyphSets = p.parsePointer(markGlyphSets);\n }\n return gdef;\n}\nvar gdef_default = { parse: parseGDEFTable };\n\n// src/tables/gpos.mjs\nvar subtableParsers2 = new Array(10);\nsubtableParsers2[1] = function parseLookup12() {\n const start = this.offset + this.relativeOffset;\n const posformat = this.parseUShort();\n if (posformat === 1) {\n return {\n posFormat: 1,\n coverage: this.parsePointer(Parser.coverage),\n value: this.parseValueRecord()\n };\n } else if (posformat === 2) {\n return {\n posFormat: 2,\n coverage: this.parsePointer(Parser.coverage),\n values: this.parseValueRecordList()\n };\n }\n check_default.assert(false, \"0x\" + start.toString(16) + \": GPOS lookup type 1 format must be 1 or 2.\");\n};\nsubtableParsers2[2] = function parseLookup22() {\n const start = this.offset + this.relativeOffset;\n const posFormat = this.parseUShort();\n check_default.assert(posFormat === 1 || posFormat === 2, \"0x\" + start.toString(16) + \": GPOS lookup type 2 format must be 1 or 2.\");\n const coverage = this.parsePointer(Parser.coverage);\n const valueFormat1 = this.parseUShort();\n const valueFormat2 = this.parseUShort();\n if (posFormat === 1) {\n return {\n posFormat,\n coverage,\n valueFormat1,\n valueFormat2,\n pairSets: this.parseList(Parser.pointer(Parser.list(function() {\n return {\n // pairValueRecord\n secondGlyph: this.parseUShort(),\n value1: this.parseValueRecord(valueFormat1),\n value2: this.parseValueRecord(valueFormat2)\n };\n })))\n };\n } else if (posFormat === 2) {\n const classDef1 = this.parsePointer(Parser.classDef);\n const classDef2 = this.parsePointer(Parser.classDef);\n const class1Count = this.parseUShort();\n const class2Count = this.parseUShort();\n return {\n // Class Pair Adjustment\n posFormat,\n coverage,\n valueFormat1,\n valueFormat2,\n classDef1,\n classDef2,\n class1Count,\n class2Count,\n classRecords: this.parseList(class1Count, Parser.list(class2Count, function() {\n return {\n value1: this.parseValueRecord(valueFormat1),\n value2: this.parseValueRecord(valueFormat2)\n };\n }))\n };\n }\n};\nsubtableParsers2[3] = function parseLookup32() {\n return { error: \"GPOS Lookup 3 not supported\" };\n};\nsubtableParsers2[4] = function parseLookup42() {\n return { error: \"GPOS Lookup 4 not supported\" };\n};\nsubtableParsers2[5] = function parseLookup52() {\n return { error: \"GPOS Lookup 5 not supported\" };\n};\nsubtableParsers2[6] = function parseLookup62() {\n return { error: \"GPOS Lookup 6 not supported\" };\n};\nsubtableParsers2[7] = function parseLookup72() {\n return { error: \"GPOS Lookup 7 not supported\" };\n};\nsubtableParsers2[8] = function parseLookup82() {\n return { error: \"GPOS Lookup 8 not supported\" };\n};\nsubtableParsers2[9] = function parseLookup9() {\n return { error: \"GPOS Lookup 9 not supported\" };\n};\nfunction parseGposTable(data, start) {\n start = start || 0;\n const p = new Parser(data, start);\n const tableVersion = p.parseVersion(1);\n check_default.argument(tableVersion === 1 || tableVersion === 1.1, \"Unsupported GPOS table version \" + tableVersion);\n if (tableVersion === 1) {\n return {\n version: tableVersion,\n scripts: p.parseScriptList(),\n features: p.parseFeatureList(),\n lookups: p.parseLookupList(subtableParsers2)\n };\n } else {\n return {\n version: tableVersion,\n scripts: p.parseScriptList(),\n features: p.parseFeatureList(),\n lookups: p.parseLookupList(subtableParsers2),\n variations: p.parseFeatureVariationsList()\n };\n }\n}\nvar subtableMakers2 = new Array(10);\nfunction makeGposTable(gpos) {\n return new table_default.Table(\"GPOS\", [\n { name: \"version\", type: \"ULONG\", value: 65536 },\n { name: \"scripts\", type: \"TABLE\", value: new table_default.ScriptList(gpos.scripts) },\n { name: \"features\", type: \"TABLE\", value: new table_default.FeatureList(gpos.features) },\n { name: \"lookups\", type: \"TABLE\", value: new table_default.LookupList(gpos.lookups, subtableMakers2) }\n ]);\n}\nvar gpos_default = { parse: parseGposTable, make: makeGposTable };\n\n// src/tables/kern.mjs\nfunction parseWindowsKernTable(p) {\n const pairs = {};\n p.skip(\"uShort\");\n const subtableVersion = p.parseUShort();\n check_default.argument(subtableVersion === 0, \"Unsupported kern sub-table version.\");\n p.skip(\"uShort\", 2);\n const nPairs = p.parseUShort();\n p.skip(\"uShort\", 3);\n for (let i = 0; i < nPairs; i += 1) {\n const leftIndex = p.parseUShort();\n const rightIndex = p.parseUShort();\n const value = p.parseShort();\n pairs[leftIndex + \",\" + rightIndex] = value;\n }\n return pairs;\n}\nfunction parseMacKernTable(p) {\n const pairs = {};\n p.skip(\"uShort\");\n const nTables = p.parseULong();\n if (nTables > 1) {\n console.warn(\"Only the first kern subtable is supported.\");\n }\n p.skip(\"uLong\");\n const coverage = p.parseUShort();\n const subtableVersion = coverage & 255;\n p.skip(\"uShort\");\n if (subtableVersion === 0) {\n const nPairs = p.parseUShort();\n p.skip(\"uShort\", 3);\n for (let i = 0; i < nPairs; i += 1) {\n const leftIndex = p.parseUShort();\n const rightIndex = p.parseUShort();\n const value = p.parseShort();\n pairs[leftIndex + \",\" + rightIndex] = value;\n }\n }\n return pairs;\n}\nfunction parseKernTable(data, start) {\n const p = new parse_default.Parser(data, start);\n const tableVersion = p.parseUShort();\n if (tableVersion === 0) {\n return parseWindowsKernTable(p);\n } else if (tableVersion === 1) {\n return parseMacKernTable(p);\n } else {\n throw new Error(\"Unsupported kern table version (\" + tableVersion + \").\");\n }\n}\nvar kern_default = { parse: parseKernTable };\n\n// src/tables/loca.mjs\nfunction parseLocaTable(data, start, numGlyphs, shortVersion) {\n const p = new parse_default.Parser(data, start);\n const parseFn = shortVersion ? p.parseUShort : p.parseULong;\n const glyphOffsets = [];\n for (let i = 0; i < numGlyphs + 1; i += 1) {\n let glyphOffset = parseFn.call(p);\n if (shortVersion) {\n glyphOffset *= 2;\n }\n glyphOffsets.push(glyphOffset);\n }\n return glyphOffsets;\n}\nvar loca_default = { parse: parseLocaTable };\n\n// src/opentype.mjs\nfunction parseOpenTypeTableEntries(data, numTables) {\n const tableEntries = [];\n let p = 12;\n for (let i = 0; i < numTables; i += 1) {\n const tag = parse_default.getTag(data, p);\n const checksum = parse_default.getULong(data, p + 4);\n const offset = parse_default.getULong(data, p + 8);\n const length = parse_default.getULong(data, p + 12);\n tableEntries.push({ tag, checksum, offset, length, compression: false });\n p += 16;\n }\n return tableEntries;\n}\nfunction parseWOFFTableEntries(data, numTables) {\n const tableEntries = [];\n let p = 44;\n for (let i = 0; i < numTables; i += 1) {\n const tag = parse_default.getTag(data, p);\n const offset = parse_default.getULong(data, p + 4);\n const compLength = parse_default.getULong(data, p + 8);\n const origLength = parse_default.getULong(data, p + 12);\n let compression;\n if (compLength < origLength) {\n compression = \"WOFF\";\n } else {\n compression = false;\n }\n tableEntries.push({\n tag,\n offset,\n compression,\n compressedLength: compLength,\n length: origLength\n });\n p += 20;\n }\n return tableEntries;\n}\nfunction uncompressTable(data, tableEntry) {\n if (tableEntry.compression === \"WOFF\") {\n const inBuffer = new Uint8Array(data.buffer, tableEntry.offset + 2, tableEntry.compressedLength - 2);\n const outBuffer = new Uint8Array(tableEntry.length);\n tinf_uncompress(inBuffer, outBuffer);\n if (outBuffer.byteLength !== tableEntry.length) {\n throw new Error(\"Decompression error: \" + tableEntry.tag + \" decompressed length doesn't match recorded length\");\n }\n const view = new DataView(outBuffer.buffer, 0);\n return { data: view, offset: 0 };\n } else {\n return { data, offset: tableEntry.offset };\n }\n}\nfunction parseBuffer(buffer, opt = {}) {\n let indexToLocFormat;\n let ltagTable;\n const font = new font_default({ empty: true });\n if (buffer.constructor !== ArrayBuffer) {\n buffer = new Uint8Array(buffer).buffer;\n }\n const data = new DataView(buffer, 0);\n let numTables;\n let tableEntries = [];\n const signature = parse_default.getTag(data, 0);\n if (signature === String.fromCharCode(0, 1, 0, 0) || signature === \"true\" || signature === \"typ1\") {\n font.outlinesFormat = \"truetype\";\n numTables = parse_default.getUShort(data, 4);\n tableEntries = parseOpenTypeTableEntries(data, numTables);\n } else if (signature === \"OTTO\") {\n font.outlinesFormat = \"cff\";\n numTables = parse_default.getUShort(data, 4);\n tableEntries = parseOpenTypeTableEntries(data, numTables);\n } else if (signature === \"wOFF\") {\n const flavor = parse_default.getTag(data, 4);\n if (flavor === String.fromCharCode(0, 1, 0, 0)) {\n font.outlinesFormat = \"truetype\";\n } else if (flavor === \"OTTO\") {\n font.outlinesFormat = \"cff\";\n } else {\n throw new Error(\"Unsupported OpenType flavor \" + signature);\n }\n numTables = parse_default.getUShort(data, 12);\n tableEntries = parseWOFFTableEntries(data, numTables);\n } else if (signature === \"wOF2\") {\n const issue = \"https://github.com/opentypejs/opentype.js/issues/183#issuecomment-1147228025\";\n throw new Error(\"WOFF2 require an external decompressor library, see examples at: \" + issue);\n } else {\n throw new Error(\"Unsupported OpenType signature \" + signature);\n }\n let cffTableEntry;\n let cff2TableEntry;\n let fvarTableEntry;\n let statTableEntry;\n let gvarTableEntry;\n let cvarTableEntry;\n let avarTableEntry;\n let glyfTableEntry;\n let gdefTableEntry;\n let gposTableEntry;\n let gsubTableEntry;\n let hmtxTableEntry;\n let hvarTableEntry;\n let kernTableEntry;\n let locaTableEntry;\n let nameTableEntry;\n let metaTableEntry;\n let p;\n for (let i = 0; i < numTables; i += 1) {\n const tableEntry = tableEntries[i];\n let table;\n switch (tableEntry.tag) {\n case \"avar\":\n avarTableEntry = tableEntry;\n break;\n case \"cmap\":\n table = uncompressTable(data, tableEntry);\n font.tables.cmap = cmap_default.parse(table.data, table.offset);\n font.encoding = new CmapEncoding(font.tables.cmap);\n break;\n case \"cvt \":\n table = uncompressTable(data, tableEntry);\n p = new parse_default.Parser(table.data, table.offset);\n font.tables.cvt = p.parseShortList(tableEntry.length / 2);\n break;\n case \"fvar\":\n fvarTableEntry = tableEntry;\n break;\n case \"STAT\":\n statTableEntry = tableEntry;\n break;\n case \"gvar\":\n gvarTableEntry = tableEntry;\n break;\n case \"cvar\":\n cvarTableEntry = tableEntry;\n break;\n case \"fpgm\":\n table = uncompressTable(data, tableEntry);\n p = new parse_default.Parser(table.data, table.offset);\n font.tables.fpgm = p.parseByteList(tableEntry.length);\n break;\n case \"head\":\n table = uncompressTable(data, tableEntry);\n font.tables.head = head_default.parse(table.data, table.offset);\n font.unitsPerEm = font.tables.head.unitsPerEm;\n indexToLocFormat = font.tables.head.indexToLocFormat;\n break;\n case \"hhea\":\n table = uncompressTable(data, tableEntry);\n font.tables.hhea = hhea_default.parse(table.data, table.offset);\n font.ascender = font.tables.hhea.ascender;\n font.descender = font.tables.hhea.descender;\n font.numberOfHMetrics = font.tables.hhea.numberOfHMetrics;\n break;\n case \"HVAR\":\n hvarTableEntry = tableEntry;\n break;\n case \"hmtx\":\n hmtxTableEntry = tableEntry;\n break;\n case \"ltag\":\n table = uncompressTable(data, tableEntry);\n ltagTable = ltag_default.parse(table.data, table.offset);\n break;\n case \"COLR\":\n table = uncompressTable(data, tableEntry);\n font.tables.colr = colr_default.parse(table.data, table.offset);\n break;\n case \"CPAL\":\n table = uncompressTable(data, tableEntry);\n font.tables.cpal = cpal_default.parse(table.data, table.offset);\n break;\n case \"maxp\":\n table = uncompressTable(data, tableEntry);\n font.tables.maxp = maxp_default.parse(table.data, table.offset);\n font.numGlyphs = font.tables.maxp.numGlyphs;\n break;\n case \"name\":\n nameTableEntry = tableEntry;\n break;\n case \"OS/2\":\n table = uncompressTable(data, tableEntry);\n font.tables.os2 = os2_default.parse(table.data, table.offset);\n break;\n case \"post\":\n table = uncompressTable(data, tableEntry);\n font.tables.post = post_default.parse(table.data, table.offset);\n font.glyphNames = new GlyphNames(font.tables.post);\n break;\n case \"prep\":\n table = uncompressTable(data, tableEntry);\n p = new parse_default.Parser(table.data, table.offset);\n font.tables.prep = p.parseByteList(tableEntry.length);\n break;\n case \"glyf\":\n glyfTableEntry = tableEntry;\n break;\n case \"loca\":\n locaTableEntry = tableEntry;\n break;\n case \"CFF \":\n cffTableEntry = tableEntry;\n break;\n case \"CFF2\":\n cff2TableEntry = tableEntry;\n break;\n case \"kern\":\n kernTableEntry = tableEntry;\n break;\n case \"GDEF\":\n gdefTableEntry = tableEntry;\n break;\n case \"GPOS\":\n gposTableEntry = tableEntry;\n break;\n case \"GSUB\":\n gsubTableEntry = tableEntry;\n break;\n case \"meta\":\n metaTableEntry = tableEntry;\n break;\n case \"gasp\":\n try {\n table = uncompressTable(data, tableEntry);\n font.tables.gasp = gasp_default.parse(table.data, table.offset);\n } catch (e) {\n console.warn(\"Failed to parse gasp table, skipping.\");\n console.warn(e);\n }\n break;\n case \"SVG \":\n table = uncompressTable(data, tableEntry);\n font.tables.svg = svg_default.parse(table.data, table.offset);\n break;\n default:\n break;\n }\n }\n const nameTable = uncompressTable(data, nameTableEntry);\n font.tables.name = name_default.parse(nameTable.data, nameTable.offset, ltagTable);\n font.names = font.tables.name;\n if (glyfTableEntry && locaTableEntry) {\n const shortVersion = indexToLocFormat === 0;\n const locaTable = uncompressTable(data, locaTableEntry);\n const locaOffsets = loca_default.parse(locaTable.data, locaTable.offset, font.numGlyphs, shortVersion);\n const glyfTable = uncompressTable(data, glyfTableEntry);\n font.glyphs = glyf_default.parse(glyfTable.data, glyfTable.offset, locaOffsets, font, opt);\n } else if (cffTableEntry) {\n const cffTable = uncompressTable(data, cffTableEntry);\n cff_default.parse(cffTable.data, cffTable.offset, font, opt);\n } else if (cff2TableEntry) {\n const cffTable2 = uncompressTable(data, cff2TableEntry);\n cff_default.parse(cffTable2.data, cffTable2.offset, font, opt);\n } else {\n throw new Error(\"Font doesn't contain TrueType, CFF or CFF2 outlines.\");\n }\n const hmtxTable = uncompressTable(data, hmtxTableEntry);\n hmtx_default.parse(font, hmtxTable.data, hmtxTable.offset, font.numberOfHMetrics, font.numGlyphs, font.glyphs, opt);\n addGlyphNames(font, opt);\n if (kernTableEntry) {\n const kernTable = uncompressTable(data, kernTableEntry);\n font.kerningPairs = kern_default.parse(kernTable.data, kernTable.offset);\n } else {\n font.kerningPairs = {};\n }\n if (gdefTableEntry) {\n const gdefTable = uncompressTable(data, gdefTableEntry);\n font.tables.gdef = gdef_default.parse(gdefTable.data, gdefTable.offset);\n }\n if (gposTableEntry) {\n const gposTable = uncompressTable(data, gposTableEntry);\n font.tables.gpos = gpos_default.parse(gposTable.data, gposTable.offset);\n font.position.init();\n }\n if (gsubTableEntry) {\n const gsubTable = uncompressTable(data, gsubTableEntry);\n font.tables.gsub = gsub_default.parse(gsubTable.data, gsubTable.offset);\n }\n if (fvarTableEntry) {\n const fvarTable = uncompressTable(data, fvarTableEntry);\n font.tables.fvar = fvar_default.parse(fvarTable.data, fvarTable.offset, font.names);\n }\n if (statTableEntry) {\n const statTable = uncompressTable(data, statTableEntry);\n font.tables.stat = stat_default.parse(statTable.data, statTable.offset, font.tables.fvar);\n }\n if (gvarTableEntry) {\n if (!fvarTableEntry) {\n console.warn(\"This font provides a gvar table, but no fvar table, which is required for variable fonts.\");\n }\n if (!glyfTableEntry) {\n console.warn(\"This font provides a gvar table, but no glyf table. Glyph variation only works with TrueType outlines.\");\n }\n const gvarTable = uncompressTable(data, gvarTableEntry);\n font.tables.gvar = gvar_default.parse(gvarTable.data, gvarTable.offset, font.tables.fvar, font.glyphs);\n }\n if (cvarTableEntry) {\n if (!fvarTableEntry) {\n console.warn(\"This font provides a cvar table, but no fvar table, which is required for variable fonts.\");\n }\n if (!font.tables.cvt) {\n console.warn(\"This font provides a cvar table, but no cvt table which could be made variable.\");\n }\n if (!glyfTableEntry) {\n console.warn(\"This font provides a gvar table, but no glyf table. Glyph variation only works with TrueType outlines.\");\n }\n const cvarTable = uncompressTable(data, cvarTableEntry);\n font.tables.cvar = cvar_default.parse(cvarTable.data, cvarTable.offset, font.tables.fvar, font.tables.cvt || []);\n }\n if (avarTableEntry) {\n if (!fvarTableEntry) {\n console.warn(\"This font provides an avar table, but no fvar table, which is required for variable fonts.\");\n }\n const avarTable = uncompressTable(data, avarTableEntry);\n font.tables.avar = avar_default.parse(avarTable.data, avarTable.offset, font.tables.fvar);\n }\n if (hvarTableEntry) {\n if (!fvarTableEntry) {\n console.warn(\"This font provides an HVAR table, but no fvar table, which is required for variable fonts.\");\n }\n if (!hmtxTableEntry) {\n console.warn(\"This font provides an HVAR table, but no hmtx table to vary.\");\n }\n const hvarTable = uncompressTable(data, hvarTableEntry);\n font.tables.hvar = hvar_default.parse(hvarTable.data, hvarTable.offset, font.tables.fvar);\n }\n if (metaTableEntry) {\n const metaTable = uncompressTable(data, metaTableEntry);\n font.tables.meta = meta_default.parse(metaTable.data, metaTable.offset);\n font.metas = font.tables.meta;\n }\n font.palettes = new PaletteManager(font);\n return font;\n}\nfunction load() {\n console.error(\"DEPRECATED! migrate to: opentype.parse(buffer, opt) See: https://github.com/opentypejs/opentype.js/issues/675\");\n}\nfunction loadSync() {\n console.error('DEPRECATED! migrate to: opentype.parse(require(\"fs\").readFileSync(url), opt)');\n}\nexport {\n bbox_default as BoundingBox,\n font_default as Font,\n glyph_default as Glyph,\n path_default as Path,\n parse_default as _parse,\n load,\n loadSync,\n parseBuffer as parse\n};\n","import { type Font, type Glyph, parse } from 'opentype.js';\n\nexport type FontPathCommandType = 'M' | 'L' | 'Q' | 'C' | 'Z';\n\nexport interface FontPathCommand {\n type: FontPathCommandType;\n values: number[];\n}\n\nexport interface FontPath {\n commands: FontPathCommand[];\n}\n\nexport interface FontAdapterGlyph {\n id: number;\n advanceWidth: number;\n}\n\nexport interface FontAdapterMetrics {\n ascent: number;\n descent: number;\n underlinePosition: number;\n underlineThickness: number;\n strikePosition: number;\n}\n\nexport interface FontAdapterFont {\n unitsPerEm: number;\n metrics: FontAdapterMetrics;\n stringToGlyphs(text: string): FontAdapterGlyph[];\n getKerningValue(left: FontAdapterGlyph, right: FontAdapterGlyph): number;\n getGlyphPath(glyph: FontAdapterGlyph, fontSize: number): FontPath;\n}\n\nconst fontCache = new Map<string, Promise<FontAdapterFont>>();\n\nfunction convertPath(opentypePath: ReturnType<Glyph['getPath']>): FontPath {\n const commands: FontPathCommand[] = [];\n\n for (const cmd of opentypePath.commands) {\n switch (cmd.type) {\n case 'M':\n commands.push({ type: 'M', values: [cmd.x, cmd.y] });\n break;\n case 'L':\n commands.push({ type: 'L', values: [cmd.x, cmd.y] });\n break;\n case 'Q':\n commands.push({ type: 'Q', values: [cmd.x1, cmd.y1, cmd.x, cmd.y] });\n break;\n case 'C':\n commands.push({ type: 'C', values: [cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y] });\n break;\n case 'Z':\n commands.push({ type: 'Z', values: [] });\n break;\n }\n }\n\n return { commands };\n}\n\nfunction createFontAdapter(font: Font): FontAdapterFont {\n const { unitsPerEm } = font;\n\n return {\n unitsPerEm,\n metrics: {\n ascent: font.ascender ?? unitsPerEm * 0.8,\n descent: Math.abs(font.descender ?? unitsPerEm * 0.2),\n underlinePosition: Math.abs(font.tables.post?.underlinePosition ?? unitsPerEm * 0.08),\n underlineThickness: Math.abs(font.tables.post?.underlineThickness ?? unitsPerEm * 0.05),\n strikePosition: font.tables.os2?.yStrikeoutPosition ?? unitsPerEm * 0.3,\n },\n stringToGlyphs(text: string): FontAdapterGlyph[] {\n return font\n .stringToGlyphs(text)\n .filter((g) => g.index >= 0)\n .map((g) => ({ id: g.index, advanceWidth: g.advanceWidth ?? 0 }));\n },\n getKerningValue(left: FontAdapterGlyph, right: FontAdapterGlyph): number {\n const l = font.glyphs.get(left.id);\n const r = font.glyphs.get(right.id);\n if (!l || !r) return 0;\n return font.getKerningValue(l, r) ?? 0;\n },\n getGlyphPath(glyph: FontAdapterGlyph, fontSize: number): FontPath {\n const g = font.glyphs.get(glyph.id);\n if (!g) return { commands: [] };\n return convertPath(g.getPath(0, 0, fontSize));\n },\n };\n}\n\nexport async function loadFont(fontUrl: string): Promise<FontAdapterFont> {\n const cached = fontCache.get(fontUrl);\n if (cached) return cached;\n\n const promise = (async () => {\n if (fontUrl.toLowerCase().endsWith('.woff2')) {\n throw new Error(\n `Font \"${fontUrl}\" is a WOFF2 file. opentype.js does not support WOFF2; use a .woff, .ttf, or .otf font instead.`,\n );\n }\n\n const response = await fetch(fontUrl);\n\n if (!response.ok) {\n throw new Error(\n `Failed to fetch font \"${fontUrl}\". Status: ${response.status} ${response.statusText}`,\n );\n }\n\n const buffer = await response.arrayBuffer();\n\n try {\n const font = parse(buffer);\n return createFontAdapter(font);\n } catch (error) {\n throw new Error(\n `Failed to parse font \"${fontUrl}\". Use a .woff, .ttf, or .otf file. ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n })();\n\n fontCache.set(fontUrl, promise);\n return promise;\n}\n","\nexport default function earcut(data, holeIndices, dim = 2) {\n\n const hasHoles = holeIndices && holeIndices.length;\n const outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n let outerNode = linkedList(data, 0, outerLen, dim, true);\n const triangles = [];\n\n if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\n let minX, minY, invSize;\n\n if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n if (data.length > 80 * dim) {\n minX = data[0];\n minY = data[1];\n let maxX = minX;\n let maxY = minY;\n\n for (let i = dim; i < outerLen; i += dim) {\n const x = data[i];\n const y = data[i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n\n // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n invSize = Math.max(maxX - minX, maxY - minY);\n invSize = invSize !== 0 ? 32767 / invSize : 0;\n }\n\n earcutLinked(outerNode, triangles, dim, minX, minY, invSize, 0);\n\n return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise) {\n let last;\n\n if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n for (let i = start; i < end; i += dim) last = insertNode(i / dim | 0, data[i], data[i + 1], last);\n } else {\n for (let i = end - dim; i >= start; i -= dim) last = insertNode(i / dim | 0, data[i], data[i + 1], last);\n }\n\n if (last && equals(last, last.next)) {\n removeNode(last);\n last = last.next;\n }\n\n return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end) {\n if (!start) return start;\n if (!end) end = start;\n\n let p = start,\n again;\n do {\n again = false;\n\n if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n removeNode(p);\n p = end = p.prev;\n if (p === p.next) break;\n again = true;\n\n } else {\n p = p.next;\n }\n } while (again || p !== end);\n\n return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n if (!ear) return;\n\n // interlink polygon nodes in z-order\n if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\n let stop = ear;\n\n // iterate through ears, slicing them one by one\n while (ear.prev !== ear.next) {\n const prev = ear.prev;\n const next = ear.next;\n\n if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n triangles.push(prev.i, ear.i, next.i); // cut off the triangle\n\n removeNode(ear);\n\n // skipping the next vertex leads to less sliver triangles\n ear = next.next;\n stop = next.next;\n\n continue;\n }\n\n ear = next;\n\n // if we looped through the whole remaining polygon and can't find any more ears\n if (ear === stop) {\n // try filtering points and slicing again\n if (!pass) {\n earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n\n // if this didn't work, try curing all small self-intersections locally\n } else if (pass === 1) {\n ear = cureLocalIntersections(filterPoints(ear), triangles);\n earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n\n // as a last resort, try splitting the remaining polygon into two\n } else if (pass === 2) {\n splitEarcut(ear, triangles, dim, minX, minY, invSize);\n }\n\n break;\n }\n }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n const a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // now make sure we don't have other points inside the potential ear\n const ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n // triangle bbox\n const x0 = Math.min(ax, bx, cx),\n y0 = Math.min(ay, by, cy),\n x1 = Math.max(ax, bx, cx),\n y1 = Math.max(ay, by, cy);\n\n let p = c.next;\n while (p !== a) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 &&\n pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.next;\n }\n\n return true;\n}\n\nfunction isEarHashed(ear, minX, minY, invSize) {\n const a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n const ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n // triangle bbox\n const x0 = Math.min(ax, bx, cx),\n y0 = Math.min(ay, by, cy),\n x1 = Math.max(ax, bx, cx),\n y1 = Math.max(ay, by, cy);\n\n // z-order range for the current triangle bbox;\n const minZ = zOrder(x0, y0, minX, minY, invSize),\n maxZ = zOrder(x1, y1, minX, minY, invSize);\n\n let p = ear.prevZ,\n n = ear.nextZ;\n\n // look for points inside the triangle in both directions\n while (p && p.z >= minZ && n && n.z <= maxZ) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n\n if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n // look for remaining points in decreasing z-order\n while (p && p.z >= minZ) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n }\n\n // look for remaining points in increasing z-order\n while (n && n.z <= maxZ) {\n if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles) {\n let p = start;\n do {\n const a = p.prev,\n b = p.next.next;\n\n if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n triangles.push(a.i, p.i, b.i);\n\n // remove two nodes involved\n removeNode(p);\n removeNode(p.next);\n\n p = start = b;\n }\n p = p.next;\n } while (p !== start);\n\n return filterPoints(p);\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n // look for a valid diagonal that divides the polygon into two\n let a = start;\n do {\n let b = a.next.next;\n while (b !== a.prev) {\n if (a.i !== b.i && isValidDiagonal(a, b)) {\n // split the polygon in two by the diagonal\n let c = splitPolygon(a, b);\n\n // filter colinear points around the cuts\n a = filterPoints(a, a.next);\n c = filterPoints(c, c.next);\n\n // run earcut on each half\n earcutLinked(a, triangles, dim, minX, minY, invSize, 0);\n earcutLinked(c, triangles, dim, minX, minY, invSize, 0);\n return;\n }\n b = b.next;\n }\n a = a.next;\n } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n const queue = [];\n\n for (let i = 0, len = holeIndices.length; i < len; i++) {\n const start = holeIndices[i] * dim;\n const end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n const list = linkedList(data, start, end, dim, false);\n if (list === list.next) list.steiner = true;\n queue.push(getLeftmost(list));\n }\n\n queue.sort(compareXYSlope);\n\n // process holes from left to right\n for (let i = 0; i < queue.length; i++) {\n outerNode = eliminateHole(queue[i], outerNode);\n }\n\n return outerNode;\n}\n\nfunction compareXYSlope(a, b) {\n let result = a.x - b.x;\n // when the left-most point of 2 holes meet at a vertex, sort the holes counterclockwise so that when we find\n // the bridge to the outer shell is always the point that they meet at.\n if (result === 0) {\n result = a.y - b.y;\n if (result === 0) {\n const aSlope = (a.next.y - a.y) / (a.next.x - a.x);\n const bSlope = (b.next.y - b.y) / (b.next.x - b.x);\n result = aSlope - bSlope;\n }\n }\n return result;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and link it\nfunction eliminateHole(hole, outerNode) {\n const bridge = findHoleBridge(hole, outerNode);\n if (!bridge) {\n return outerNode;\n }\n\n const bridgeReverse = splitPolygon(bridge, hole);\n\n // filter collinear points around the cuts\n filterPoints(bridgeReverse, bridgeReverse.next);\n return filterPoints(bridge, bridge.next);\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n let p = outerNode;\n const hx = hole.x;\n const hy = hole.y;\n let qx = -Infinity;\n let m;\n\n // find a segment intersected by a ray from the hole's leftmost point to the left;\n // segment's endpoint with lesser x will be potential connection point\n // unless they intersect at a vertex, then choose the vertex\n if (equals(hole, p)) return p;\n do {\n if (equals(hole, p.next)) return p.next;\n else if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n const x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n if (x <= hx && x > qx) {\n qx = x;\n m = p.x < p.next.x ? p : p.next;\n if (x === hx) return m; // hole touches outer segment; pick leftmost endpoint\n }\n }\n p = p.next;\n } while (p !== outerNode);\n\n if (!m) return null;\n\n // look for points inside the triangle of hole point, segment intersection and endpoint;\n // if there are no points found, we have a valid connection;\n // otherwise choose the point of the minimum angle with the ray as connection point\n\n const stop = m;\n const mx = m.x;\n const my = m.y;\n let tanMin = Infinity;\n\n p = m;\n\n do {\n if (hx >= p.x && p.x >= mx && hx !== p.x &&\n pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n const tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n if (locallyInside(p, hole) &&\n (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {\n m = p;\n tanMin = tan;\n }\n }\n\n p = p.next;\n } while (p !== stop);\n\n return m;\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector(m, p) {\n return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, invSize) {\n let p = start;\n do {\n if (p.z === 0) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n p.prevZ = p.prev;\n p.nextZ = p.next;\n p = p.next;\n } while (p !== start);\n\n p.prevZ.nextZ = null;\n p.prevZ = null;\n\n sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n let numMerges;\n let inSize = 1;\n\n do {\n let p = list;\n let e;\n list = null;\n let tail = null;\n numMerges = 0;\n\n while (p) {\n numMerges++;\n let q = p;\n let pSize = 0;\n for (let i = 0; i < inSize; i++) {\n pSize++;\n q = q.nextZ;\n if (!q) break;\n }\n let qSize = inSize;\n\n while (pSize > 0 || (qSize > 0 && q)) {\n\n if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n e = p;\n p = p.nextZ;\n pSize--;\n } else {\n e = q;\n q = q.nextZ;\n qSize--;\n }\n\n if (tail) tail.nextZ = e;\n else list = e;\n\n e.prevZ = tail;\n tail = e;\n }\n\n p = q;\n }\n\n tail.nextZ = null;\n inSize *= 2;\n\n } while (numMerges > 1);\n\n return list;\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder(x, y, minX, minY, invSize) {\n // coords are transformed into non-negative 15-bit integer range\n x = (x - minX) * invSize | 0;\n y = (y - minY) * invSize | 0;\n\n x = (x | (x << 8)) & 0x00FF00FF;\n x = (x | (x << 4)) & 0x0F0F0F0F;\n x = (x | (x << 2)) & 0x33333333;\n x = (x | (x << 1)) & 0x55555555;\n\n y = (y | (y << 8)) & 0x00FF00FF;\n y = (y | (y << 4)) & 0x0F0F0F0F;\n y = (y | (y << 2)) & 0x33333333;\n y = (y | (y << 1)) & 0x55555555;\n\n return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n let p = start,\n leftmost = start;\n do {\n if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;\n p = p.next;\n } while (p !== start);\n\n return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n return (cx - px) * (ay - py) >= (ax - px) * (cy - py) &&\n (ax - px) * (by - py) >= (bx - px) * (ay - py) &&\n (bx - px) * (cy - py) >= (cx - px) * (by - py);\n}\n\n// check if a point lies within a convex triangle but false if its equal to the first point of the triangle\nfunction pointInTriangleExceptFirst(ax, ay, bx, by, cx, cy, px, py) {\n return !(ax === px && ay === py) && pointInTriangle(ax, ay, bx, by, cx, cy, px, py);\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // doesn't intersect other edges\n (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible\n (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n const o1 = sign(area(p1, q1, p2));\n const o2 = sign(area(p1, q1, q2));\n const o3 = sign(area(p2, q2, p1));\n const o4 = sign(area(p2, q2, q1));\n\n if (o1 !== o2 && o3 !== o4) return true; // general case\n\n if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n return false;\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment(p, q, r) {\n return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n}\n\nfunction sign(num) {\n return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n let p = a;\n do {\n if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n intersects(p, p.next, a, b)) return true;\n p = p.next;\n } while (p !== a);\n\n return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n return area(a.prev, a, a.next) < 0 ?\n area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n let p = a;\n let inside = false;\n const px = (a.x + b.x) / 2;\n const py = (a.y + b.y) / 2;\n do {\n if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\n (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n inside = !inside;\n p = p.next;\n } while (p !== a);\n\n return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n const a2 = createNode(a.i, a.x, a.y),\n b2 = createNode(b.i, b.x, b.y),\n an = a.next,\n bp = b.prev;\n\n a.next = b;\n b.prev = a;\n\n a2.next = an;\n an.prev = a2;\n\n b2.next = a2;\n a2.prev = b2;\n\n bp.next = b2;\n b2.prev = bp;\n\n return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n const p = createNode(i, x, y);\n\n if (!last) {\n p.prev = p;\n p.next = p;\n\n } else {\n p.next = last.next;\n p.prev = last;\n last.next.prev = p;\n last.next = p;\n }\n return p;\n}\n\nfunction removeNode(p) {\n p.next.prev = p.prev;\n p.prev.next = p.next;\n\n if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction createNode(i, x, y) {\n return {\n i, // vertex index in coordinates array\n x, y, // vertex coordinates\n prev: null, // previous and next vertex nodes in a polygon ring\n next: null,\n z: 0, // z-order curve value\n prevZ: null, // previous and next nodes in z-order\n nextZ: null,\n steiner: false // indicates whether this is a steiner point\n };\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nexport function deviation(data, holeIndices, dim, triangles) {\n const hasHoles = holeIndices && holeIndices.length;\n const outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n let polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n if (hasHoles) {\n for (let i = 0, len = holeIndices.length; i < len; i++) {\n const start = holeIndices[i] * dim;\n const end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n polygonArea -= Math.abs(signedArea(data, start, end, dim));\n }\n }\n\n let trianglesArea = 0;\n for (let i = 0; i < triangles.length; i += 3) {\n const a = triangles[i] * dim;\n const b = triangles[i + 1] * dim;\n const c = triangles[i + 2] * dim;\n trianglesArea += Math.abs(\n (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\n (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n }\n\n return polygonArea === 0 && trianglesArea === 0 ? 0 :\n Math.abs((trianglesArea - polygonArea) / polygonArea);\n}\n\nfunction signedArea(data, start, end, dim) {\n let sum = 0;\n for (let i = start, j = end - dim; i < end; i += dim) {\n sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n j = i;\n }\n return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nexport function flatten(data) {\n const vertices = [];\n const holes = [];\n const dimensions = data[0][0].length;\n let holeIndex = 0;\n let prevLen = 0;\n\n for (const ring of data) {\n for (const p of ring) {\n for (let d = 0; d < dimensions; d++) vertices.push(p[d]);\n }\n if (prevLen) {\n holeIndex += prevLen;\n holes.push(holeIndex);\n }\n prevLen = ring.length;\n }\n return {vertices, holes, dimensions};\n}\n","import earcut from 'earcut';\nimport type {\n FontAdapterFont,\n FontAdapterGlyph,\n FontPath,\n} from '@/elements/Text/Vector/fontAdapter';\n\ntype Point = { x: number; y: number };\ntype Contour = Point[];\n\ntype GlyphGeometry = {\n positions: number[];\n indices: number[];\n};\n\ntype CurveQuality = {\n quadraticSteps: number;\n cubicSteps: number;\n};\n\nconst glyphGeometryCache = new Map<string, GlyphGeometry>();\n\nexport function getCurveQuality(fontSize: number): CurveQuality {\n const safeFontSize = Math.max(1, fontSize);\n\n return {\n quadraticSteps: Math.max(8, Math.min(24, Math.ceil(safeFontSize / 8))),\n cubicSteps: Math.max(12, Math.min(36, Math.ceil(safeFontSize / 6))),\n };\n}\n\nfunction signedArea(contour: Contour): number {\n let area = 0;\n\n for (let i = 0; i < contour.length; i++) {\n const p = contour[i];\n const q = contour[(i + 1) % contour.length];\n\n if (!p || !q) {\n continue;\n }\n\n area += p.x * q.y - q.x * p.y;\n }\n\n return area / 2;\n}\n\nfunction pointInPolygon(point: Point, polygon: Contour): boolean {\n let inside = false;\n\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const pi = polygon[i];\n const pj = polygon[j];\n\n if (!pi || !pj) {\n continue;\n }\n\n const intersects =\n pi.y > point.y !== pj.y > point.y &&\n point.x < ((pj.x - pi.x) * (point.y - pi.y)) / (pj.y - pi.y) + pi.x;\n\n if (intersects) {\n inside = !inside;\n }\n }\n\n return inside;\n}\n\nfunction pushQuadratic(\n contour: Contour,\n from: Point,\n cx: number,\n cy: number,\n x: number,\n y: number,\n steps: number,\n): Point {\n for (let i = 1; i <= steps; i++) {\n const t = i / steps;\n const mt = 1 - t;\n\n contour.push({\n x: mt * mt * from.x + 2 * mt * t * cx + t * t * x,\n y: mt * mt * from.y + 2 * mt * t * cy + t * t * y,\n });\n }\n\n return { x, y };\n}\n\nfunction pushCubic(\n contour: Contour,\n from: Point,\n c1x: number,\n c1y: number,\n c2x: number,\n c2y: number,\n x: number,\n y: number,\n steps: number,\n): Point {\n for (let i = 1; i <= steps; i++) {\n const t = i / steps;\n const mt = 1 - t;\n\n contour.push({\n x: mt * mt * mt * from.x + 3 * mt * mt * t * c1x + 3 * mt * t * t * c2x + t * t * t * x,\n y: mt * mt * mt * from.y + 3 * mt * mt * t * c1y + 3 * mt * t * t * c2y + t * t * t * y,\n });\n }\n\n return { x, y };\n}\n\nfunction pathToContours(path: FontPath, quality: CurveQuality): Contour[] {\n const contours: Contour[] = [];\n\n let current: Contour | null = null;\n let currentPoint: Point = { x: 0, y: 0 };\n\n for (const command of path.commands) {\n switch (command.type) {\n case 'M': {\n const [x = 0, y = 0] = command.values;\n if (current && current.length >= 3) {\n contours.push(current);\n }\n\n current = [{ x, y }];\n currentPoint = { x, y };\n\n break;\n }\n\n case 'L': {\n const [x = 0, y = 0] = command.values;\n if (!current) current = [];\n\n current.push({ x, y });\n currentPoint = { x, y };\n\n break;\n }\n\n case 'Q': {\n const [x1 = 0, y1 = 0, x = 0, y = 0] = command.values;\n if (!current) current = [];\n\n currentPoint = pushQuadratic(current, currentPoint, x1, y1, x, y, quality.quadraticSteps);\n\n break;\n }\n\n case 'C': {\n const [x1 = 0, y1 = 0, x2 = 0, y2 = 0, x = 0, y = 0] = command.values;\n if (!current) current = [];\n\n currentPoint = pushCubic(current, currentPoint, x1, y1, x2, y2, x, y, quality.cubicSteps);\n\n break;\n }\n\n case 'Z': {\n if (current && current.length >= 3) {\n const first = current[0];\n const last = current[current.length - 1];\n\n if (first && last && first.x === last.x && first.y === last.y) {\n current.pop();\n }\n\n if (current.length >= 3) {\n contours.push(current);\n }\n }\n\n current = null;\n\n break;\n }\n\n default:\n break;\n }\n }\n\n if (current && current.length >= 3) {\n contours.push(current);\n }\n\n return contours;\n}\n\nfunction triangulateContours(contours: Contour[]): GlyphGeometry {\n const cleanContours = contours.filter((c) => c.length >= 3);\n\n if (cleanContours.length === 0) {\n return { positions: [], indices: [] };\n }\n\n const sortedContours = [...cleanContours].sort((a, b) => {\n return Math.abs(signedArea(b)) - Math.abs(signedArea(a));\n });\n\n const used = new Set<Contour>();\n const positions: number[] = [];\n const indices: number[] = [];\n\n for (const outer of sortedContours) {\n if (used.has(outer)) continue;\n\n const outerArea = Math.abs(signedArea(outer));\n\n const holes = sortedContours.filter((candidate) => {\n if (candidate === outer || used.has(candidate)) return false;\n\n const candidateArea = Math.abs(signedArea(candidate));\n\n if (candidateArea >= outerArea) return false;\n\n const firstPoint = candidate[0];\n\n return firstPoint ? pointInPolygon(firstPoint, outer) : false;\n });\n\n used.add(outer);\n\n for (const hole of holes) {\n used.add(hole);\n }\n\n const flat: number[] = [];\n const holeIndices: number[] = [];\n\n for (const p of outer) {\n flat.push(p.x, p.y);\n }\n\n let vertexOffset = outer.length;\n\n for (const hole of holes) {\n holeIndices.push(vertexOffset);\n\n for (const p of hole) {\n flat.push(p.x, p.y);\n }\n\n vertexOffset += hole.length;\n }\n\n const localIndices = earcut(flat, holeIndices, 2);\n const globalVertexOffset = positions.length / 2;\n\n positions.push(...flat);\n\n for (const index of localIndices) {\n indices.push(globalVertexOffset + index);\n }\n }\n\n return { positions, indices };\n}\n\nexport function buildGlyphGeometry(\n fontUrl: string,\n font: FontAdapterFont,\n glyph: FontAdapterGlyph,\n fontSize: number,\n quality: CurveQuality,\n): GlyphGeometry {\n const glyphIndex = glyph.id;\n\n const cacheKey = [fontUrl, glyphIndex, fontSize, quality.quadraticSteps, quality.cubicSteps].join(\n ':',\n );\n\n const cached = glyphGeometryCache.get(cacheKey);\n\n if (cached) {\n return cached;\n }\n\n const glyphPath = font.getGlyphPath(glyph, fontSize);\n const contours = pathToContours(glyphPath, quality);\n const geometry = triangulateContours(contours);\n\n glyphGeometryCache.set(cacheKey, geometry);\n\n return geometry;\n}\n\nexport function appendGlyphGeometry(\n targetPositions: number[],\n targetIndices: number[],\n glyphGeometry: GlyphGeometry,\n offsetX: number,\n offsetY = 0,\n): void {\n if (glyphGeometry.positions.length === 0 || glyphGeometry.indices.length === 0) {\n return;\n }\n\n const vertexOffset = targetPositions.length / 2;\n\n for (let i = 0; i < glyphGeometry.positions.length; i += 2) {\n const x = glyphGeometry.positions[i] ?? 0;\n const y = glyphGeometry.positions[i + 1] ?? 0;\n\n targetPositions.push(x + offsetX, y + offsetY);\n }\n\n for (const index of glyphGeometry.indices) {\n targetIndices.push(vertexOffset + index);\n }\n}\n","import { Shader } from 'pixi.js';\n\nfunction normalizeFillNumber(fill: number | string): number {\n if (typeof fill === 'number') {\n return fill;\n }\n\n let value = fill.trim();\n\n if (value.startsWith('#')) {\n value = value.slice(1);\n }\n\n if (value.length === 3) {\n value = value\n .split('')\n .map((char) => char + char)\n .join('');\n }\n\n const parsed = parseInt(value, 16);\n\n return Number.isNaN(parsed) ? 0x000000 : parsed;\n}\n\nfunction fillToGLSLColor(fill: number | string, alpha = 1): string {\n const hex = normalizeFillNumber(fill);\n\n const r = ((hex >> 16) & 0xff) / 255;\n const g = ((hex >> 8) & 0xff) / 255;\n const b = (hex & 0xff) / 255;\n const a = Math.max(0, Math.min(1, alpha));\n\n return `vec4(${r.toFixed(6)}, ${g.toFixed(6)}, ${b.toFixed(6)}, ${a.toFixed(6)})`;\n}\n\nexport function createSolidColorShader(fill: number | string, alpha = 1): Shader {\n const glslColor = fillToGLSLColor(fill, alpha);\n\n const shader = Shader.from({\n gl: {\n vertex: `\n attribute vec2 aPosition;\n attribute vec2 aUV;\n\n uniform mat3 uProjectionMatrix;\n uniform mat3 uWorldTransformMatrix;\n uniform mat3 uTransformMatrix;\n varying vec2 vUV;\n\n void main() {\n mat3 mvp = uProjectionMatrix * uWorldTransformMatrix * uTransformMatrix;\n vec3 position = mvp * vec3(aPosition, 1.0);\n vUV = aUV;\n\n gl_Position = vec4(position.xy, 0.0, 1.0);\n }\n `,\n fragment: `\n precision mediump float;\n varying vec2 vUV;\n\n void main() {\n gl_FragColor = ${glslColor} + vec4(vUV * 0.0, 0.0, 0.0);\n }\n `,\n },\n });\n\n return shader as Shader;\n}\n","import { Mesh, MeshGeometry } from 'pixi.js';\nimport type {\n TextDecorationSegment,\n VectorTextLayer,\n VectorTextState,\n} from '@/elements/Text/types';\nimport { appendGlyphGeometry } from '@/elements/Text/Vector/glyphGeometry';\nimport { createSolidColorShader } from '@/elements/Text/Vector/shader';\n\ntype GlyphGeometryData = {\n positions: number[];\n indices: number[];\n};\n\nexport function normalizeGeometryPositions(positions: Float32Array): {\n width: number;\n height: number;\n minX: number;\n minY: number;\n} {\n if (positions.length === 0) {\n return { width: 1, height: 1, minX: 0, minY: 0 };\n }\n\n let minX = Number.POSITIVE_INFINITY;\n let minY = Number.POSITIVE_INFINITY;\n let maxX = Number.NEGATIVE_INFINITY;\n let maxY = Number.NEGATIVE_INFINITY;\n\n for (let i = 0; i < positions.length; i += 2) {\n const x = positions[i] ?? 0;\n const y = positions[i + 1] ?? 0;\n\n minX = Math.min(minX, x);\n minY = Math.min(minY, y);\n maxX = Math.max(maxX, x);\n maxY = Math.max(maxY, y);\n }\n\n for (let i = 0; i < positions.length; i += 2) {\n positions[i] = (positions[i] ?? 0) - minX;\n positions[i + 1] = (positions[i + 1] ?? 0) - minY;\n }\n\n return {\n width: Math.max(maxX - minX, 1),\n height: Math.max(maxY - minY, 1),\n minX,\n minY,\n };\n}\n\nexport function getDecorationThickness(fontWeight: string | undefined, fontSize: number): number {\n const weightMultiplier = fontWeight === 'bold' ? 1.35 : 1;\n return Math.max(1, fontSize * 0.055 * weightMultiplier);\n}\n\nexport function buildVectorLayer(\n positions: Float32Array,\n indices: Uint32Array,\n fill: number | string,\n alpha: number,\n originalPositions = positions,\n): VectorTextLayer {\n const geometry = new MeshGeometry({ positions, indices });\n const shader = createSolidColorShader(fill, alpha);\n const mesh = new Mesh({ geometry, shader }) as Mesh;\n\n return {\n geometry,\n mesh,\n shader,\n originalPositions: new Float32Array(originalPositions),\n };\n}\n\nexport function buildStrokeLayers(\n indices: Uint32Array,\n originalPositions: Float32Array,\n stroke: number | string | undefined,\n strokeWidth: number,\n strokeAlpha: number,\n strokeAlign: 'inside' | 'center' | 'outside',\n): VectorTextLayer[] {\n if (stroke === undefined || strokeWidth <= 0 || strokeAlpha <= 0) {\n return [];\n }\n\n const radiusMultiplier = strokeAlign === 'outside' ? 1 : strokeAlign === 'center' ? 0.5 : 0.25;\n const radius = Math.max(0.5, strokeWidth * radiusMultiplier);\n const copyCount = 12;\n const layers: VectorTextLayer[] = [];\n\n for (let i = 0; i < copyCount; i++) {\n const angle = (Math.PI * 2 * i) / copyCount;\n const layer = buildVectorLayer(\n new Float32Array(originalPositions),\n new Uint32Array(indices),\n stroke,\n strokeAlpha,\n );\n\n layer.mesh.position.set(Math.cos(angle) * radius, Math.sin(angle) * radius);\n\n layers.push(layer);\n }\n\n return layers;\n}\n\nexport function buildDecorationLayers(\n segments: TextDecorationSegment[],\n fill: number | string,\n thickness: number,\n underline: boolean | undefined,\n strikethrough: boolean | undefined,\n columns: number,\n): VectorTextLayer[] {\n if ((!underline && !strikethrough) || segments.length === 0) {\n return [];\n }\n\n const meshColumns = Math.max(8, Math.min(64, Math.floor(columns)));\n const layers: VectorTextLayer[] = [];\n\n const buildLayer = (\n ySelector: (segment: TextDecorationSegment) => number,\n ): VectorTextLayer | null => {\n const positions: number[] = [];\n const indices: number[] = [];\n\n for (const segment of segments) {\n const quad = createQuadGeometry(\n segment.x,\n ySelector(segment) - thickness / 2,\n segment.width,\n thickness,\n meshColumns,\n );\n appendGlyphGeometry(positions, indices, quad, 0, 0);\n }\n\n if (positions.length === 0 || indices.length === 0) {\n return null;\n }\n\n const originalPositions = new Float32Array(positions);\n return buildVectorLayer(\n new Float32Array(originalPositions),\n new Uint32Array(indices),\n fill,\n 1,\n originalPositions,\n );\n };\n\n if (underline) {\n const underlineLayer = buildLayer((segment) => segment.underlineY);\n if (underlineLayer) {\n layers.push(underlineLayer);\n }\n }\n\n if (strikethrough) {\n const strikethroughLayer = buildLayer((segment) => segment.strikethroughY);\n if (strikethroughLayer) {\n layers.push(strikethroughLayer);\n }\n }\n\n return layers;\n}\n\nexport function destroyVectorTextState(state: VectorTextState): void {\n const layers = [state.fillLayer, ...state.strokeLayers, ...state.decorationLayers];\n\n for (const { mesh, geometry, shader } of layers) {\n mesh.destroy();\n geometry.destroy(true);\n\n if (typeof shader.destroy === 'function') {\n shader.destroy();\n }\n }\n}\n\nfunction createQuadGeometry(\n x: number,\n y: number,\n width: number,\n height: number,\n segments = 1,\n): GlyphGeometryData {\n if (segments <= 1) {\n return {\n positions: [x, y, x + width, y, x + width, y + height, x, y + height],\n indices: [0, 1, 2, 0, 2, 3],\n };\n }\n\n const positions: number[] = [];\n const indices: number[] = [];\n\n for (let i = 0; i <= segments; i++) {\n const t = i / segments;\n const px = x + width * t;\n\n positions.push(px, y, px, y + height);\n }\n\n for (let i = 0; i < segments; i++) {\n const leftTop = i * 2;\n const leftBottom = leftTop + 1;\n const rightTop = leftTop + 2;\n const rightBottom = leftTop + 3;\n\n indices.push(leftTop, rightTop, rightBottom, leftTop, rightBottom, leftBottom);\n }\n\n return { positions, indices };\n}\n","import type { TextDecorationSegment, VectorTextRenderOptions } from '@/elements/Text/types';\nimport type {\n FontAdapterFont,\n FontAdapterGlyph,\n FontAdapterMetrics,\n} from '@/elements/Text/Vector/fontAdapter';\n\nexport type LayoutLine = {\n text: string;\n width: number;\n};\n\nexport type LineLayout = {\n x: number;\n width: number;\n baselineY: number;\n};\n\nexport type ScaledFontMetrics = {\n ascent: number;\n descent: number;\n underlineOffset: number;\n underlineThickness: number;\n strikePosition: number;\n};\n\nexport function scaleFontMetrics(\n metrics: FontAdapterMetrics,\n fontSize: number,\n unitsPerEm: number,\n): ScaledFontMetrics {\n const scale = fontSize / unitsPerEm;\n\n return {\n ascent: metrics.ascent * scale,\n descent: metrics.descent * scale,\n underlineOffset: metrics.underlinePosition * scale,\n underlineThickness: Math.max(1, metrics.underlineThickness * scale),\n strikePosition: metrics.strikePosition * scale,\n };\n}\n\nexport function buildDecorationSegments(\n lineLayouts: LineLayout[],\n metrics: ScaledFontMetrics,\n): TextDecorationSegment[] {\n return lineLayouts\n .filter((line) => line.width > 0)\n .map((line) => ({\n x: line.x,\n width: line.width,\n underlineY: line.baselineY + metrics.underlineOffset,\n strikethroughY: line.baselineY - metrics.strikePosition,\n }));\n}\n\nexport function getAlignedOffsetX(\n align: VectorTextRenderOptions['align'],\n layoutWidth: number,\n lineWidth: number,\n): number {\n switch (align) {\n case 'center':\n return Math.max((layoutWidth - lineWidth) / 2, 0);\n case 'right':\n return Math.max(layoutWidth - lineWidth, 0);\n default:\n return 0;\n }\n}\n\nexport function layoutTextLines(\n text: string,\n font: FontAdapterFont,\n fontSize: number,\n letterSpacing: number,\n): LayoutLine[] {\n const paragraphs = text.split('\\n');\n const lines: LayoutLine[] = [];\n\n for (const paragraph of paragraphs) {\n lines.push({\n text: paragraph,\n width: measureTextWidth(paragraph, font, fontSize, letterSpacing),\n });\n }\n\n return lines.length > 0\n ? lines\n : [{ text: ' ', width: measureTextWidth(' ', font, fontSize, letterSpacing) }];\n}\n\nfunction measureTextWidth(\n text: string,\n font: FontAdapterFont,\n fontSize: number,\n letterSpacing: number,\n): number {\n if (text.length === 0) return 0;\n\n const glyphs = font.stringToGlyphs(text);\n let width = 0;\n let previousGlyph: FontAdapterGlyph | null = null;\n\n for (let i = 0; i < glyphs.length; i++) {\n const glyph = glyphs[i];\n\n if (!glyph) {\n continue;\n }\n\n if (previousGlyph) {\n const kerning = font.getKerningValue(previousGlyph, glyph);\n width += (kerning * fontSize) / font.unitsPerEm;\n }\n\n width += ((glyph.advanceWidth ?? 0) * fontSize) / font.unitsPerEm;\n\n if (i < glyphs.length - 1) {\n width += letterSpacing;\n }\n\n previousGlyph = glyph;\n }\n\n return width;\n}\n","type GlyphGeometryData = {\n positions: number[];\n indices: number[];\n};\n\ntype Offset2D = {\n x: number;\n y: number;\n};\n\nfunction getGlyphBounds(positions: readonly number[]): { minY: number; maxY: number } {\n let minY = Number.POSITIVE_INFINITY;\n let maxY = Number.NEGATIVE_INFINITY;\n\n for (let i = 1; i < positions.length; i += 2) {\n const y = positions[i] ?? 0;\n minY = Math.min(minY, y);\n maxY = Math.max(maxY, y);\n }\n\n return { minY, maxY };\n}\n\nexport function applySyntheticItalic(\n glyphGeometry: GlyphGeometryData,\n fontStyle: string | undefined,\n): GlyphGeometryData {\n if (fontStyle !== 'italic' && fontStyle !== 'oblique') {\n return glyphGeometry;\n }\n\n const { positions, indices } = glyphGeometry;\n const bounds = getGlyphBounds(positions);\n const shear = fontStyle === 'oblique' ? 0.14 : 0.22;\n const transformed = new Array<number>(positions.length);\n\n for (let i = 0; i < positions.length; i += 2) {\n const x = positions[i] ?? 0;\n const y = positions[i + 1] ?? 0;\n transformed[i] = x + (bounds.maxY - y) * shear;\n transformed[i + 1] = y;\n }\n\n return { positions: transformed, indices };\n}\n\nexport function getSyntheticBoldOffsets(\n fontWeight: string | undefined,\n fontSize: number,\n): Offset2D[] {\n if (fontWeight !== 'bold') {\n return [{ x: 0, y: 0 }];\n }\n\n const radius = Math.max(0.22, Math.min(0.55, fontSize * 0.009));\n\n return [\n { x: 0, y: 0 },\n { x: -radius, y: 0 },\n { x: radius, y: 0 },\n { x: 0, y: -radius },\n { x: 0, y: radius },\n ];\n}\n","import type {\n VectorTextRenderOptions,\n VectorTextState,\n VectorTextTemplate,\n} from '@/elements/Text/types';\nimport type { FontAdapterGlyph } from '@/elements/Text/Vector/fontAdapter';\nimport { loadFont } from '@/elements/Text/Vector/fontAdapter';\nimport {\n appendGlyphGeometry,\n buildGlyphGeometry,\n getCurveQuality,\n} from '@/elements/Text/Vector/glyphGeometry';\nimport {\n buildDecorationLayers,\n buildStrokeLayers,\n buildVectorLayer,\n getDecorationThickness,\n normalizeGeometryPositions,\n} from '@/elements/Text/Vector/vectorLayers';\nimport {\n buildDecorationSegments,\n getAlignedOffsetX,\n type LineLayout,\n layoutTextLines,\n scaleFontMetrics,\n} from '@/elements/Text/Vector/vectorLayout';\nimport {\n applySyntheticItalic,\n getSyntheticBoldOffsets,\n} from '@/elements/Text/Vector/vectorStyleTransforms';\n\nconst vectorTemplateCache = new Map<string, Promise<VectorTextTemplate>>();\n\nexport function clearVectorTemplateCache(): void {\n vectorTemplateCache.clear();\n}\n\nexport async function buildVectorTextState(\n opts: VectorTextRenderOptions,\n columns: number,\n): Promise<VectorTextState> {\n const template = await getVectorTextTemplate(opts);\n return buildStateFromTemplate(template, opts, columns);\n}\n\nfunction buildStateFromTemplate(\n template: VectorTextTemplate,\n opts: VectorTextRenderOptions,\n columns: number,\n): VectorTextState {\n const {\n fill,\n stroke,\n strokeWidth = 0,\n strokeAlpha = 1,\n strokeAlign = 'center',\n fontWeight,\n } = opts;\n const fillLayer = buildVectorLayer(\n new Float32Array(template.positions),\n new Uint32Array(template.indices),\n fill,\n 1,\n template.positions,\n );\n const strokeLayers = buildStrokeLayers(\n template.indices,\n template.positions,\n stroke,\n strokeWidth,\n strokeAlpha,\n strokeAlign,\n );\n const decorationLayers = buildDecorationLayers(\n template.decorationSegments,\n fill,\n getDecorationThickness(fontWeight, opts.fontSize),\n opts.underline,\n opts.strikethrough,\n columns,\n );\n\n return {\n template,\n fillLayer,\n strokeLayers,\n decorationLayers,\n columns: Math.max(1, Math.floor(columns)),\n textureWidth: template.textureWidth,\n textureHeight: template.textureHeight,\n };\n}\n\nasync function getVectorTextTemplate(opts: VectorTextRenderOptions): Promise<VectorTextTemplate> {\n const key = getVectorTextTemplateKey(opts);\n const cached = vectorTemplateCache.get(key);\n\n if (cached) {\n return cached;\n }\n\n const pending = buildVectorTextTemplate(opts).catch((error: unknown) => {\n vectorTemplateCache.delete(key);\n throw error;\n });\n vectorTemplateCache.set(key, pending);\n return pending;\n}\n\nasync function buildVectorTextTemplate(opts: VectorTextRenderOptions): Promise<VectorTextTemplate> {\n const {\n text,\n fontUrl,\n fontSize,\n fontWeight,\n fontStyle,\n letterSpacing = 0,\n align = 'left',\n lineHeight,\n } = opts;\n\n const safeText = text && text.length > 0 ? text : ' ';\n const font = await loadFont(fontUrl);\n const quality = getCurveQuality(fontSize);\n const lines = layoutTextLines(safeText, font, fontSize, letterSpacing);\n const lineHeightPx = lineHeight ?? fontSize * 1.2;\n const layoutWidth = Math.max(...lines.map((line) => line.width), 1);\n const lineLayouts: LineLayout[] = [];\n const finalPositions: number[] = [];\n const finalIndices: number[] = [];\n\n for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) {\n const line = lines[lineIndex];\n\n if (!line) {\n continue;\n }\n\n const lineGlyphs = font.stringToGlyphs(line.text);\n let cursorX = getAlignedOffsetX(align, layoutWidth, line.width);\n lineLayouts.push({\n x: cursorX,\n width: line.width,\n baselineY: lineIndex * lineHeightPx,\n });\n\n let previousGlyph: FontAdapterGlyph | null = null;\n\n for (let glyphIndex = 0; glyphIndex < lineGlyphs.length; glyphIndex++) {\n const glyph = lineGlyphs[glyphIndex];\n\n if (!glyph) {\n continue;\n }\n\n if (previousGlyph) {\n const kerning = font.getKerningValue(previousGlyph, glyph);\n cursorX += (kerning * fontSize) / font.unitsPerEm;\n }\n\n const glyphGeometry = buildGlyphGeometry(fontUrl, font, glyph, fontSize, quality);\n const styledGlyphGeometry = applySyntheticItalic(glyphGeometry, fontStyle);\n\n for (const boldOffset of getSyntheticBoldOffsets(fontWeight, fontSize)) {\n appendGlyphGeometry(\n finalPositions,\n finalIndices,\n styledGlyphGeometry,\n cursorX + boldOffset.x,\n lineIndex * lineHeightPx + boldOffset.y,\n );\n }\n\n cursorX += ((glyph.advanceWidth ?? 0) * fontSize) / font.unitsPerEm;\n\n if (glyphIndex < lineGlyphs.length - 1) {\n cursorX += letterSpacing;\n }\n\n previousGlyph = glyph;\n }\n }\n\n const positions = new Float32Array(finalPositions);\n const indices = new Uint32Array(finalIndices);\n const bounds = normalizeGeometryPositions(positions);\n const normalizedLineLayouts = lineLayouts.map((line) => ({\n x: line.x - bounds.minX,\n width: line.width,\n baselineY: line.baselineY - bounds.minY,\n }));\n const metrics = scaleFontMetrics(font.metrics, fontSize, font.unitsPerEm);\n\n return {\n positions,\n indices,\n decorationSegments: buildDecorationSegments(normalizedLineLayouts, metrics),\n textureWidth: bounds.width,\n textureHeight: bounds.height,\n };\n}\n\nfunction getVectorTextTemplateKey(opts: VectorTextRenderOptions): string {\n return JSON.stringify({\n text: opts.text,\n fontUrl: opts.fontUrl,\n fontSize: opts.fontSize,\n fontWeight: opts.fontWeight ?? 'normal',\n fontStyle: opts.fontStyle ?? 'normal',\n letterSpacing: opts.letterSpacing,\n align: opts.align ?? 'left',\n lineHeight: opts.lineHeight ?? null,\n });\n}\n","import type {\n MeshEffectFnContext,\n MeshEffectFunction,\n VectorTextLayer,\n VectorTextState,\n} from '@/elements/Text/types';\n\nfunction getVectorTextLayers(state: VectorTextState): VectorTextLayer[] {\n return [state.fillLayer, ...state.strokeLayers, ...state.decorationLayers];\n}\n\nexport function deformVectorText(\n state: VectorTextState,\n effectFn: MeshEffectFunction,\n ctx: MeshEffectFnContext,\n): void {\n const width = Math.max(state.textureWidth, 1);\n const height = Math.max(state.textureHeight, 1);\n\n for (const layer of getVectorTextLayers(state)) {\n const { geometry, originalPositions } = layer;\n const positions = geometry.positions;\n\n for (let i = 0; i < positions.length; i += 2) {\n const originalX = originalPositions[i] ?? 0;\n const originalY = originalPositions[i + 1] ?? 0;\n\n const t = Math.max(0, Math.min(1, originalX / width));\n const col = effectFn(t, ctx);\n\n const dy = col.dy;\n const scaleY = col.scaleY ?? 1;\n const anchorY = col.anchorY ?? 1;\n\n let y: number;\n\n if (anchorY >= 1) {\n const bottomY = height + dy;\n y = bottomY - (height - originalY) * scaleY;\n } else if (anchorY <= 0) {\n const topY = dy;\n y = topY + originalY * scaleY;\n } else {\n const midY = height / 2 + dy;\n y = midY + (originalY - height / 2) * scaleY;\n }\n\n positions[i] = originalX;\n positions[i + 1] = y;\n }\n\n geometry.getBuffer('aPosition').update();\n }\n}\n","import type {\n MeshEffectEntry,\n MeshEffectFunction,\n RegisterMeshEffectOptions,\n} from '@/elements/Text/types';\n\nconst DEFAULT_MESH_COLUMNS = 100;\n\nconst effectRegistry = new Map<string, MeshEffectEntry>();\n\nfunction normalizeColumns(columns?: number): number {\n if (typeof columns !== 'number' || Number.isNaN(columns)) {\n return DEFAULT_MESH_COLUMNS;\n }\n\n return Math.max(1, Math.floor(columns));\n}\n\nexport function registerMeshEffect(\n name: string,\n fn: MeshEffectFunction,\n options?: RegisterMeshEffectOptions,\n): void {\n effectRegistry.set(name, {\n fn,\n columns: normalizeColumns(options?.columns),\n });\n}\n\nexport function getMeshEffect(name: string): MeshEffectEntry | undefined {\n return effectRegistry.get(name);\n}\n\nexport function listMeshEffects(): string[] {\n return [...effectRegistry.keys()];\n}\n","import type { Container } from 'pixi.js';\n\nimport type {\n MeshEffectFnContext,\n VectorTextRenderOptions,\n VectorTextState,\n} from '@/elements/Text/types';\nimport { buildVectorTextState } from '@/elements/Text/Vector/builder';\nimport { deformVectorText } from '@/elements/Text/Vector/deform';\nimport { getMeshEffect } from '@/elements/Text/Vector/registry';\nimport { destroyVectorTextState } from '@/elements/Text/Vector/vectorLayers';\n\ntype EffectParams = {\n type: string;\n intensity?: number;\n direction?: 'up' | 'down';\n radius?: number;\n};\n\n/**\n * Builds a vector text mesh for the given effect type.\n * Does NOT apply the effect deformation — call reapplyVectorTextEffect\n * after adding the mesh to the display tree.\n */\nexport async function renderVectorText(\n textOpts: VectorTextRenderOptions,\n effectType: string,\n): Promise<VectorTextState> {\n const entry = getMeshEffect(effectType);\n\n if (!entry) {\n throw new Error(`[Vector] Unknown effect type \"${effectType}\".`);\n }\n\n return buildVectorTextState(textOpts, entry.columns);\n}\n\nexport async function refreshMountedVectorTextLayers(\n state: VectorTextState,\n textOpts: VectorTextRenderOptions,\n effectType: string,\n displayObject: Container,\n): Promise<VectorTextState> {\n const nextState = await renderVectorText(textOpts, effectType);\n\n for (const layer of [state.fillLayer, ...state.strokeLayers, ...state.decorationLayers]) {\n displayObject.removeChild(layer.mesh);\n }\n\n destroyVectorTextState(state);\n\n for (const layer of nextState.strokeLayers) {\n displayObject.addChild(layer.mesh);\n }\n displayObject.addChild(nextState.fillLayer.mesh);\n for (const layer of nextState.decorationLayers) {\n displayObject.addChild(layer.mesh);\n }\n\n return nextState;\n}\n\n/**\n * Applies (or re-applies) the effect deformation to an existing vector state.\n * Must be called after the mesh is added to the display tree.\n */\nexport function reapplyVectorTextEffect(\n state: VectorTextState,\n effect: EffectParams,\n fontSize: number,\n): void {\n const entry = getMeshEffect(effect.type);\n\n if (!entry) return;\n\n const ctx: MeshEffectFnContext = {\n textureWidth: state.textureWidth,\n textureHeight: state.textureHeight,\n fontSize,\n radius: effect.radius ?? 200,\n intensity: effect.intensity ?? 50,\n direction: effect.direction ?? 'up',\n };\n\n deformVectorText(state, entry.fn, ctx);\n}\n","import type { Container } from 'pixi.js';\n\nimport arialFontUrl from '@/elements/Text/Fonts/Arial/Arial.ttf?url';\nimport type { TextEffectOptions } from '@/elements/Text/types';\nimport {\n destroyVectorTextState,\n reapplyVectorTextEffect,\n renderVectorText,\n type VectorTextRenderOptions,\n type VectorTextState,\n} from '@/elements/Text/Vector';\n\nexport function resolveVectorFontUrl(owner: string, fontUrl?: string): string {\n if (fontUrl) {\n return fontUrl;\n }\n\n console.warn(`[${owner}] fontUrl is not provided; using Arial.`);\n return arialFontUrl;\n}\n\nexport function disposeVectorTextState(state: VectorTextState | null): null {\n if (state) {\n destroyVectorTextState(state);\n }\n\n return null;\n}\n\ntype MountVectorTextEffectOptions = {\n version: number;\n currentVersion: number;\n destroyed: boolean;\n effect: TextEffectOptions;\n textOpts: VectorTextRenderOptions;\n clearContent: () => void;\n setVectorState: (state: VectorTextState) => void;\n displayObject: Container;\n};\n\nexport async function mountVectorTextEffect({\n version,\n currentVersion,\n destroyed,\n effect,\n textOpts,\n clearContent,\n setVectorState,\n displayObject,\n}: MountVectorTextEffectOptions): Promise<void> {\n const state = await renderVectorText(textOpts, effect.type);\n\n if (destroyed || version !== currentVersion) {\n destroyVectorTextState(state);\n return;\n }\n\n clearContent();\n setVectorState(state);\n for (const layer of state.strokeLayers) {\n displayObject.addChild(layer.mesh);\n }\n displayObject.addChild(state.fillLayer.mesh);\n for (const layer of state.decorationLayers) {\n displayObject.addChild(layer.mesh);\n }\n reapplyVectorTextEffect(state, effect, textOpts.fontSize);\n}\n","import type { Container } from 'pixi.js';\n\nimport type {\n TextEffectOptions,\n VectorTextRenderOptions,\n VectorTextState,\n} from '@/elements/Text/types';\nimport { reapplyVectorTextEffect, refreshMountedVectorTextLayers } from '@/elements/Text/Vector';\n\nconst EFFECT_PARAM_KEYS = new Set(['intensity', 'direction', 'radius']);\nconst TRANSFORM_KEYS = new Set(['x', 'y', 'rotationDeg', 'scaleX', 'scaleY', 'zIndex', 'visible']);\nconst BACKGROUND_KEYS = new Set(['background', 'backgroundAlpha', 'backgroundPadding']);\nconst STYLE_ONLY_VECTOR_KEYS = new Set([\n 'fill',\n 'stroke',\n 'strokeWidth',\n 'strokeAlpha',\n 'strokeAlign',\n 'underline',\n 'strikethrough',\n]);\n\nexport function isTransformOnlyUpdate(keys: string[]): boolean {\n return keys.length > 0 && keys.every((key) => TRANSFORM_KEYS.has(key));\n}\n\nexport function isEffectOnlyUpdate(\n keys: string[],\n nextEffect: TextEffectOptions | undefined,\n prevEffect: TextEffectOptions | undefined,\n vectorState: VectorTextState | null,\n): boolean {\n if (!nextEffect || !prevEffect) {\n return false;\n }\n\n const effectKeys = Object.keys(nextEffect);\n\n return (\n keys.includes('effect') &&\n nextEffect.type === prevEffect.type &&\n effectKeys.every((key) => EFFECT_PARAM_KEYS.has(key) || key === 'type') &&\n vectorState !== null\n );\n}\n\nexport function reapplyTextEffect(\n vectorState: VectorTextState | null,\n effect: TextEffectOptions | undefined,\n fontSize: number,\n): void {\n if (!vectorState || !effect) {\n return;\n }\n\n reapplyVectorTextEffect(vectorState, effect, fontSize);\n}\n\nexport function isBackgroundOnlyUpdate(keys: string[]): boolean {\n return keys.length > 0 && keys.every((key) => BACKGROUND_KEYS.has(key));\n}\n\nexport function isStyleOnlyVectorUpdate(\n keys: string[],\n vectorState: VectorTextState | null,\n effect: TextEffectOptions | undefined,\n): boolean {\n return (\n vectorState !== null &&\n !!effect &&\n keys.length > 0 &&\n keys.every((key) => STYLE_ONLY_VECTOR_KEYS.has(key))\n );\n}\n\ntype RefreshMountedVectorTextStyleOptions = {\n state: VectorTextState;\n effect: TextEffectOptions | undefined;\n textOpts: VectorTextRenderOptions;\n displayObject: Container;\n setVectorState: (state: VectorTextState) => void;\n};\n\nexport async function refreshMountedVectorTextStyle({\n state,\n effect,\n textOpts,\n displayObject,\n setVectorState,\n}: RefreshMountedVectorTextStyleOptions): Promise<void> {\n if (!effect) {\n return;\n }\n\n const nextState = await refreshMountedVectorTextLayers(\n state,\n textOpts,\n effect.type,\n displayObject,\n );\n setVectorState(nextState);\n reapplyTextEffect(nextState, effect, textOpts.fontSize);\n}\n","import { CanvasTextMetrics, Text, TextStyle } from 'pixi.js';\nimport type { TextStyleOptions } from '@/elements/Text/types';\n\nexport function createRasterTextNode(options: TextStyleOptions): Text {\n return new Text({\n text: options.text,\n style: createRasterTextStyle(options),\n });\n}\n\nexport function createRasterTextStyle(options: TextStyleOptions): TextStyle {\n const {\n fontFamily = 'Arial',\n fontSize = 24,\n fill = 0x000000,\n stroke,\n strokeWidth = 0,\n strokeAlpha = 1,\n fontWeight = 'normal',\n fontStyle = 'normal',\n letterSpacing = 0,\n align = 'left',\n lineHeight,\n } = options;\n\n return new TextStyle({\n fontFamily,\n fontSize,\n fill,\n fontWeight: fontWeight as 'normal' | 'bold',\n fontStyle: fontStyle as 'normal' | 'italic' | 'oblique',\n letterSpacing,\n align,\n ...(stroke !== undefined && strokeWidth > 0\n ? {\n stroke: withAlpha(stroke, strokeAlpha),\n strokeThickness: strokeWidth,\n }\n : {}),\n ...(lineHeight !== undefined ? { lineHeight } : {}),\n });\n}\n\nfunction withAlpha(color: number | string, alpha: number): string {\n const normalizedAlpha = Math.max(0, Math.min(1, alpha));\n\n if (typeof color === 'number') {\n const hex = `#${color.toString(16).padStart(6, '0').slice(-6)}`;\n return hexToRgba(hex, normalizedAlpha);\n }\n\n return hexToRgba(color, normalizedAlpha);\n}\n\nfunction hexToRgba(value: string, alpha: number): string {\n let normalized = value.trim();\n\n if (normalized.startsWith('#')) {\n normalized = normalized.slice(1);\n }\n\n if (normalized.length === 3) {\n normalized = normalized\n .split('')\n .map((char) => char + char)\n .join('');\n }\n\n if (!/^[0-9a-fA-F]{6}$/.test(normalized)) {\n return `rgba(0, 0, 0, ${alpha})`;\n }\n\n const int = Number.parseInt(normalized, 16);\n const r = (int >> 16) & 0xff;\n const g = (int >> 8) & 0xff;\n const b = int & 0xff;\n\n return `rgba(${r}, ${g}, ${b}, ${alpha})`;\n}\n\nexport function measureRasterTextLayout(options: TextStyleOptions): CanvasTextMetrics {\n return CanvasTextMetrics.measureText(options.text || ' ', createRasterTextStyle(options));\n}\n\nexport function measureRasterTextWidth(options: TextStyleOptions): number {\n const metrics = measureRasterTextLayout({\n ...options,\n lineHeight: undefined,\n });\n return Math.max(metrics.width, 1);\n}\n\nexport function updateRasterTextResolution(\n textNode: Text | null,\n scaleX: number,\n scaleY: number,\n): void {\n if (!textNode) return;\n\n const dpr = window.devicePixelRatio ?? 1;\n const maxScale = Math.max(Math.abs(scaleX), Math.abs(scaleY), 1);\n textNode.resolution = dpr * maxScale;\n}\n","import { Container, Graphics, type Text } from 'pixi.js';\n\nimport { BaseElement } from '@/core/BaseElement';\nimport { createTextBackground } from '@/elements/Text/textBackground';\nimport { disposeVectorTextState, mountVectorTextEffect } from '@/elements/Text/textEffectMount';\nimport {\n isBackgroundOnlyUpdate,\n isEffectOnlyUpdate,\n isStyleOnlyVectorUpdate,\n isTransformOnlyUpdate,\n reapplyTextEffect,\n refreshMountedVectorTextStyle,\n} from '@/elements/Text/textEffectUpdate';\nimport { updateRasterTextResolution } from '@/elements/Text/textRaster';\nimport type { BaseTextOptions } from '@/elements/Text/types';\nimport type { VectorTextRenderOptions, VectorTextState } from '@/elements/Text/Vector';\n\nexport abstract class BaseTextElement<\n TOptions extends BaseTextOptions,\n> extends BaseElement<TOptions> {\n protected vectorState: VectorTextState | null = null;\n protected standardTextNode: Text | null = null;\n protected backgroundNode: Graphics | null = null;\n protected decorationNode: Graphics | null = null;\n protected renderVersion = 0;\n protected destroyed = false;\n\n protected async initTextElement(): Promise<void> {\n this.displayObject = new Container();\n await this.beforeInitialRender();\n await this.renderContent();\n this.applyBaseTransform();\n this.centerPivot();\n }\n\n destroy(): void {\n this.destroyed = true;\n this.renderVersion++;\n this.beforeDestroy();\n this.clearContent();\n this.displayObject.destroy({ children: true });\n }\n\n protected beforeDestroy(): void {}\n\n protected async beforeInitialRender(): Promise<void> {}\n\n protected clearContent(): void {\n this.vectorState = disposeVectorTextState(this.vectorState);\n this.standardTextNode = null;\n this.backgroundNode = null;\n this.decorationNode = null;\n this.displayObject.removeChildren();\n }\n\n protected refreshTextResolution(\n scaleX = this.options.scaleX ?? 1,\n scaleY = this.options.scaleY ?? 1,\n ): void {\n updateRasterTextResolution(this.standardTextNode, scaleX, scaleY);\n }\n\n protected async dispatchUpdate(next: Partial<TOptions>): Promise<void> {\n const keys = Object.keys(next);\n const hasEffectUpdate = 'effect' in next;\n const mergedEffect = hasEffectUpdate\n ? next.effect\n ? { ...(this.options.effect ?? {}), ...next.effect }\n : undefined\n : this.options.effect;\n\n if (isTransformOnlyUpdate(keys)) {\n Object.assign(this.options, next);\n this.refreshTextResolution();\n this.applyBaseTransform();\n return;\n }\n\n if (isEffectOnlyUpdate(keys, mergedEffect, this.options.effect, this.vectorState)) {\n Object.assign(this.options, next);\n this.options.effect = mergedEffect;\n reapplyTextEffect(this.vectorState, this.options.effect, this.getResolvedFontSize());\n this.centerPivot();\n return;\n }\n\n if (isBackgroundOnlyUpdate(keys)) {\n Object.assign(this.options, next);\n this.clearBackgroundNode();\n this.renderBackground();\n return;\n }\n\n if (isStyleOnlyVectorUpdate(keys, this.vectorState, mergedEffect)) {\n const currentVectorState = this.vectorState;\n\n if (!currentVectorState) {\n return;\n }\n\n Object.assign(this.options, next);\n if (hasEffectUpdate) {\n this.options.effect = mergedEffect;\n }\n\n const textOpts = this.getVectorRenderOptions();\n\n if (!textOpts) {\n return;\n }\n\n await refreshMountedVectorTextStyle({\n state: currentVectorState,\n effect: this.options.effect,\n textOpts,\n displayObject: this.displayObject,\n setVectorState: (state) => {\n this.vectorState = state;\n },\n });\n\n this.clearBackgroundNode();\n this.renderBackground();\n this.centerPivot();\n return;\n }\n\n if (await this.handleSpecializedUpdate(next, keys)) {\n return;\n }\n\n const prevFontSize = this.getResolvedFontSize();\n Object.assign(this.options, next);\n if (hasEffectUpdate) {\n this.options.effect = mergedEffect;\n }\n this.afterOptionsAssigned(next, prevFontSize);\n\n await this.renderContent();\n\n if (!this.destroyed) {\n this.applyBaseTransform();\n this.centerPivot();\n }\n }\n\n protected getResolvedFontSize(): number {\n return this.options.fontSize ?? 24;\n }\n\n protected async handleSpecializedUpdate(\n _next: Partial<TOptions>,\n _keys: string[],\n ): Promise<boolean> {\n return false;\n }\n\n protected afterOptionsAssigned(_next: Partial<TOptions>, _prevFontSize: number): void {}\n\n protected async renderContent(): Promise<void> {\n const version = ++this.renderVersion;\n const effect = this.options.effect;\n\n if (effect) {\n const textOpts = this.getVectorRenderOptions();\n\n if (!textOpts) {\n return;\n }\n\n await mountVectorTextEffect({\n version,\n currentVersion: this.renderVersion,\n destroyed: this.destroyed,\n effect,\n textOpts,\n clearContent: () => this.clearContent(),\n setVectorState: (state) => {\n this.vectorState = state;\n },\n displayObject: this.displayObject,\n });\n\n this.renderBackground();\n\n return;\n }\n\n this.renderStandardContent();\n this.renderBackground();\n this.renderDecorations();\n }\n\n protected setStandardTextNode(textNode: Text): void {\n this.standardTextNode = textNode;\n this.refreshTextResolution();\n this.displayObject.addChild(textNode);\n }\n\n protected renderDecorations(): void {\n const { underline, strikethrough, fill = 0x000000 } = this.options;\n\n if (!underline && !strikethrough) {\n return;\n }\n\n if (this.vectorState) {\n return;\n }\n\n const thickness = this.getDecorationThickness();\n const segments = this.getDecorationSegments();\n\n if (segments.length === 0) {\n return;\n }\n\n const decoration = new Graphics();\n\n for (const segment of segments) {\n if (segment.width <= 0) {\n continue;\n }\n\n if (underline) {\n decoration\n .moveTo(segment.x, segment.underlineY)\n .lineTo(segment.x + segment.width, segment.underlineY)\n .stroke({ color: fill, width: thickness, cap: 'square' });\n }\n\n if (strikethrough) {\n decoration\n .moveTo(segment.x, segment.strikethroughY)\n .lineTo(segment.x + segment.width, segment.strikethroughY)\n .stroke({ color: fill, width: thickness, cap: 'square' });\n }\n }\n\n this.decorationNode = decoration;\n this.displayObject.addChild(decoration);\n }\n\n protected renderBackground(): void {\n const bounds = this.getContentBounds();\n const backgroundNode = createTextBackground(this.options, this.getResolvedFontSize(), bounds);\n\n if (!backgroundNode) {\n return;\n }\n\n this.backgroundNode = backgroundNode;\n this.displayObject.addChildAt(backgroundNode, 0);\n }\n\n private clearBackgroundNode(): void {\n if (!this.backgroundNode) {\n return;\n }\n\n this.displayObject.removeChild(this.backgroundNode);\n this.backgroundNode.destroy();\n this.backgroundNode = null;\n }\n\n protected getContentBounds(): { x: number; y: number; width: number; height: number } {\n if (this.standardTextNode) {\n return this.standardTextNode.getLocalBounds();\n }\n\n if (this.vectorState) {\n return this.vectorState.fillLayer.mesh.getLocalBounds();\n }\n\n return this.displayObject.getLocalBounds();\n }\n\n protected getDecorationSegments(): Array<{\n x: number;\n width: number;\n underlineY: number;\n strikethroughY: number;\n }> {\n const bounds = this.getContentBounds();\n\n if (bounds.width <= 0) {\n return [];\n }\n\n const fontSize = this.getResolvedFontSize();\n const lineInset = Math.max(0, fontSize * 0.04);\n\n return [\n {\n x: bounds.x,\n width: bounds.width,\n underlineY: bounds.y + bounds.height - lineInset,\n strikethroughY: bounds.y + bounds.height * 0.45,\n },\n ];\n }\n\n protected getDecorationThickness(fontSize = this.getResolvedFontSize()): number {\n const weightMultiplier = (this.options.fontWeight ?? 'normal') === 'bold' ? 1.35 : 1;\n return Math.max(1, fontSize * 0.055 * weightMultiplier);\n }\n\n protected abstract renderStandardContent(): void;\n protected abstract getVectorRenderOptions(): VectorTextRenderOptions | null;\n}\n","import { registerMeshEffect } from '@/elements/Text/Vector/registry';\n\nregisterMeshEffect('Arch', (t, ctx) => {\n const i = ctx.intensity / 100;\n const sagitta = ctx.textureHeight * 2.5 * i;\n\n if (sagitta < 0.5) return { dy: 0 };\n\n const hw = ctx.textureWidth / 2;\n const radius = (hw * hw + sagitta * sagitta) / (2 * sagitta);\n const halfAngle = Math.asin(Math.min(hw / radius, 1));\n const angle = halfAngle * (2 * t - 1);\n const cy = radius - sagitta;\n const arcY = cy - radius * Math.cos(angle);\n const dy = ctx.direction === 'down' ? -arcY : arcY;\n\n return { dy };\n});\n","import type { MeshEffectFunction } from '@/elements/Text/types';\n\ntype AnchorDirection = {\n up: 0 | 1;\n down: 0 | 1;\n};\n\nexport function createSinusoidalScaleEffect(anchorY: AnchorDirection): MeshEffectFunction {\n return (t, ctx) => {\n const i = ctx.intensity / 100;\n const scaleY = Math.max(0.1, 1 - i * Math.sin(t * Math.PI));\n\n return {\n dy: 0,\n scaleY,\n anchorY: ctx.direction === 'down' ? anchorY.down : anchorY.up,\n };\n };\n}\n\nexport function createLinearScaleEffect(\n anchorY: 0 | 0.5 | 1,\n directionBias: 'up' | 'down',\n): MeshEffectFunction {\n return (t, ctx) => {\n const i = ctx.intensity / 100;\n const tEff = ctx.direction === directionBias ? 1 - t : t;\n const scaleY = Math.max(0.1, 1 - i * tEff);\n\n return { dy: 0, scaleY, anchorY };\n };\n}\n\nexport function createCenterSinusoidalScaleEffect(mode: 'expand' | 'squeeze'): MeshEffectFunction {\n return (t, ctx) => {\n const i = ctx.intensity / 100;\n const wave = Math.sin(t * Math.PI);\n const squeeze = Math.max(0.1, 1 - i * wave);\n const expand = 1 + i * wave;\n const isExpanded =\n (mode === 'expand' && ctx.direction !== 'down') ||\n (mode === 'squeeze' && ctx.direction === 'down');\n\n return {\n dy: 0,\n scaleY: isExpanded ? expand : squeeze,\n anchorY: 0.5,\n };\n };\n}\n","import { createSinusoidalScaleEffect } from '@/elements/Text/Vector/effectBuilders';\nimport { registerMeshEffect } from '@/elements/Text/Vector/registry';\n\n// Top edge flat, bottom centre raised (chars shorter at centre, tops aligned).\nregisterMeshEffect('Bridge', createSinusoidalScaleEffect({ up: 0, down: 1 }));\n","import { createCenterSinusoidalScaleEffect } from '@/elements/Text/Vector/effectBuilders';\nimport { registerMeshEffect } from '@/elements/Text/Vector/registry';\n\n// Edges full height, centre expanded (center-fixed so bulge is symmetric).\n// direction:'down' turns Bulge into Pinch.\nregisterMeshEffect('Bulge', createCenterSinusoidalScaleEffect('expand'));\n","import { createLinearScaleEffect } from '@/elements/Text/Vector/effectBuilders';\nimport { registerMeshEffect } from '@/elements/Text/Vector/registry';\n\n// Centre-aligned, narrow on left expanding to full height on right.\nregisterMeshEffect('Cone', createLinearScaleEffect(0.5, 'up'));\n","import { registerMeshEffect } from '@/elements/Text/Vector/registry';\n\nregisterMeshEffect('Curved', (t, ctx) => {\n const i = ctx.intensity / 100;\n const arc = (Math.PI / 2) * i;\n const radius = arc > 0.001 ? ctx.textureWidth / (2 * Math.sin(arc / 2)) : ctx.textureWidth * 100;\n const startAngle = -Math.PI / 2 - arc / 2;\n const angle = startAngle + t * arc;\n const midY = radius;\n const arcY = radius * Math.sin(angle) + midY - ctx.textureHeight / 2;\n const dy = ctx.direction === 'down' ? -arcY : arcY;\n return { dy };\n});\n","import { createLinearScaleEffect } from '@/elements/Text/Vector/effectBuilders';\nimport { registerMeshEffect } from '@/elements/Text/Vector/registry';\n\n// Top flat, tall→short left→right (top-fixed anchor).\nregisterMeshEffect('Downward', createLinearScaleEffect(0, 'down'));\n","import { registerMeshEffect } from '@/elements/Text/Vector/registry';\n\nregisterMeshEffect('Normal', (_t, _ctx) => ({ dy: 0 }));\n","import { createCenterSinusoidalScaleEffect } from '@/elements/Text/Vector/effectBuilders';\nimport { registerMeshEffect } from '@/elements/Text/Vector/registry';\n\n// Edges full height, centre squeezed (center-fixed so squeeze is symmetric).\n// direction:'down' turns Pinch into Bulge.\nregisterMeshEffect('Pinch', createCenterSinusoidalScaleEffect('squeeze'), { columns: 250 });\n","import { registerMeshEffect } from '@/elements/Text/Vector/registry';\n\n// Centre stretched taller, edges compressed shorter, with a broad\n// perspective-style taper across the whole word. Uses a pointed\n// profile rather than a rounded bulge so the sides feel more geometric.\nregisterMeshEffect(\n 'Perspective',\n (t, ctx) => {\n const i = ctx.intensity / 100;\n const centerWeight = 1 - Math.abs(2 * t - 1);\n const plateauWidth = 0.18;\n const pointedWeight = centerWeight >= 1 - plateauWidth ? 1 : centerWeight / (1 - plateauWidth);\n\n const compressedScale = Math.max(0.2, 1 - i * 0.55);\n const expandedScale = 1 + i * 0.75;\n const scaleY =\n ctx.direction === 'down'\n ? expandedScale + (compressedScale - expandedScale) * pointedWeight\n : compressedScale + (expandedScale - compressedScale) * pointedWeight;\n\n return { dy: 0, scaleY, anchorY: 0.5 };\n },\n { columns: 180 },\n);\n","import { registerMeshEffect } from '@/elements/Text/Vector/registry';\n\n// Bottom edge flat, centre full height, corners shorter with a sharper\n// roof-like taper instead of a rounded arch.\nregisterMeshEffect('Pointed', (t, ctx) => {\n const i = ctx.intensity / 100;\n const centerPeak = 1 - Math.abs(2 * t - 1);\n const scaleY = Math.max(0.1, 1 - i * (1 - centerPeak));\n const anchorY = ctx.direction === 'down' ? 0 : 1;\n\n return { dy: 0, scaleY, anchorY };\n});\n","import { createLinearScaleEffect } from '@/elements/Text/Vector/effectBuilders';\nimport { registerMeshEffect } from '@/elements/Text/Vector/registry';\n\n// Bottom flat, short→tall left→right (bottom-fixed anchor).\nregisterMeshEffect('Upward', createLinearScaleEffect(1, 'up'));\n","import { createSinusoidalScaleEffect } from '@/elements/Text/Vector/effectBuilders';\nimport { registerMeshEffect } from '@/elements/Text/Vector/registry';\n\n// Bottom edge flat, top centre dips (chars shorter at centre, bottoms aligned).\nregisterMeshEffect('Valley', createSinusoidalScaleEffect({ up: 1, down: 0 }), { columns: 160 });\n","import type { Text } from 'pixi.js';\n\nimport { BaseTextElement } from '@/elements/Text/BaseTextElement';\nimport { resolveVectorFontUrl } from '@/elements/Text/textEffectMount';\nimport {\n createRasterTextNode,\n createRasterTextStyle,\n measureRasterTextLayout,\n} from '@/elements/Text/textRaster';\nimport type { TextOptions } from '@/elements/Text/types';\nimport type { VectorTextRenderOptions } from '@/elements/Text/Vector';\nimport '@/elements/Text/Vector/effects';\n\nexport class TextElement extends BaseTextElement<TextOptions> {\n async init(): Promise<void> {\n await this.initTextElement();\n }\n\n async update(next: Partial<TextOptions>): Promise<void> {\n await this.dispatchUpdate(next);\n }\n\n protected renderStandardContent(): void {\n this.clearContent();\n\n const fontSize = this.getResolvedFontSize();\n\n const textNode = createRasterTextNode({\n ...this.options,\n fontSize,\n lineHeight:\n this.options.lineHeight !== undefined ? this.options.lineHeight * fontSize : undefined,\n }) as Text;\n\n this.setStandardTextNode(textNode);\n }\n\n protected getVectorRenderOptions(): VectorTextRenderOptions | null {\n const {\n text,\n fontSize = 24,\n fill = 0x000000,\n stroke,\n strokeWidth,\n strokeAlpha,\n strokeAlign,\n fontWeight,\n fontStyle,\n underline,\n strikethrough,\n letterSpacing = 0,\n fontUrl,\n align = 'left',\n lineHeight,\n } = this.options;\n const resolvedFontUrl = resolveVectorFontUrl('TextElement', fontUrl);\n\n return {\n text,\n fontUrl: resolvedFontUrl,\n fontSize,\n fill,\n stroke,\n strokeWidth,\n strokeAlpha,\n strokeAlign,\n fontWeight,\n fontStyle,\n underline,\n strikethrough,\n letterSpacing,\n align,\n ...(lineHeight !== undefined ? { lineHeight: lineHeight * fontSize } : {}),\n };\n }\n\n protected override getDecorationSegments(): Array<{\n x: number;\n width: number;\n underlineY: number;\n strikethroughY: number;\n }> {\n const fontSize = this.getResolvedFontSize();\n\n if (!this.options.text.includes('\\n')) {\n const bounds = this.getContentBounds();\n\n if (bounds.width <= 0) {\n return [];\n }\n\n const leadingInset = Math.max(2, fontSize * 0.08);\n\n return [\n {\n x: bounds.x + leadingInset,\n width: Math.max(0, bounds.width - leadingInset),\n underlineY: bounds.y + bounds.height - Math.max(fontSize * 0.1, 0.5),\n strikethroughY: bounds.y + bounds.height * 0.5,\n },\n ];\n }\n\n const style = createRasterTextStyle({\n ...this.options,\n fontSize,\n lineHeight:\n this.options.lineHeight !== undefined ? this.options.lineHeight * fontSize : undefined,\n });\n const metrics = measureRasterTextLayout({\n ...this.options,\n fontSize,\n lineHeight:\n this.options.lineHeight !== undefined ? this.options.lineHeight * fontSize : undefined,\n });\n const layoutWidth = metrics.maxLineWidth;\n const bounds = this.getContentBounds();\n const ascent = metrics.fontProperties.ascent;\n const descent = metrics.fontProperties.descent;\n const leadingInset = Math.max(2, fontSize * 0.08);\n\n return metrics.lines.map((_line, index) => {\n const lineWidth = metrics.lineWidths[index] ?? 0;\n const offsetX = this.getAlignedOffsetX(style.align, layoutWidth, lineWidth);\n const lineTop = bounds.y + index * metrics.lineHeight;\n const extraLeading = Math.max(0, metrics.lineHeight - (ascent + descent));\n const contentTop = lineTop + extraLeading / 2;\n const contentHeight = ascent + descent;\n const baselineY = contentTop + ascent;\n\n return {\n x: bounds.x + offsetX + leadingInset,\n width: Math.max(0, lineWidth - leadingInset),\n underlineY: baselineY + Math.max(descent * 0.55, fontSize * 0.08),\n strikethroughY: contentTop + contentHeight * 0.54,\n };\n });\n }\n\n private getAlignedOffsetX(\n align: 'left' | 'center' | 'right' | 'justify',\n layoutWidth: number,\n lineWidth: number,\n ): number {\n if (align === 'center') {\n return (layoutWidth - lineWidth) / 2;\n }\n\n if (align === 'right') {\n return layoutWidth - lineWidth;\n }\n\n return 0;\n }\n}\n","import type { ElementFactory } from '@/core/ElementRegistry';\nimport { TextElement } from '@/elements/Text/TextElement';\nimport type { TextOptions } from '@/elements/Text/types';\n\nexport const TEXT_FACTORIES: Record<string, ElementFactory> = {\n text: (opts) => new TextElement(opts as TextOptions),\n};\n\nexport type { TextOptions };\nexport { TextElement };\n","import type { ElementRegistry } from '@/core/ElementRegistry';\nimport { IMAGE_FACTORIES } from '@/elements/Image';\nimport { getShapeFactories } from '@/elements/Shape/registry';\nimport { SVG_FACTORIES } from '@/elements/SVG';\nimport { TEXT_FACTORIES } from '@/elements/Text/registry';\n\nfunction registerFactories(\n registry: ElementRegistry,\n factories: Iterable<readonly [string, (typeof IMAGE_FACTORIES)[string]]>,\n): void {\n for (const [type, factory] of factories) {\n registry.registerFactory(type, factory);\n }\n}\n\nexport function loadElements(registry: ElementRegistry): void {\n registerFactories(registry, Object.entries(TEXT_FACTORIES));\n registerFactories(registry, Object.entries(IMAGE_FACTORIES));\n registerFactories(registry, getShapeFactories());\n registerFactories(registry, Object.entries(SVG_FACTORIES));\n}\n","import type { Bounds } from 'pixi.js';\nimport type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport type { EditorContext } from '@/core/EditorContext';\nimport type { CameraManager } from '@/extensions/camera/CameraManager';\n\nexport function isCanvasConstraintEnabled(ctx: EditorContext): boolean {\n return ctx.options.constrainToCanvas === true;\n}\n\nexport function getCanvasWorldBounds(ctx: EditorContext): Bounds {\n const pixi = ctx.app.getPixiApp();\n const camera = ctx.getExtension<CameraManager>('camera');\n\n if (!camera) {\n return {\n x: 0,\n y: 0,\n width: pixi.screen.width,\n height: pixi.screen.height,\n } as Bounds;\n }\n\n const topLeft = camera.screenToWorld(0, 0);\n const bottomRight = camera.screenToWorld(pixi.screen.width, pixi.screen.height);\n\n return {\n x: topLeft.x,\n y: topLeft.y,\n width: bottomRight.x - topLeft.x,\n height: bottomRight.y - topLeft.y,\n } as Bounds;\n}\n\nexport function screenBoundsToWorldBounds(ctx: EditorContext, bounds: Bounds): Bounds {\n const camera = ctx.getExtension<CameraManager>('camera');\n\n if (!camera) {\n return bounds;\n }\n\n const topLeft = camera.screenToWorld(bounds.x, bounds.y);\n const bottomRight = camera.screenToWorld(bounds.x + bounds.width, bounds.y + bounds.height);\n\n return {\n x: topLeft.x,\n y: topLeft.y,\n width: bottomRight.x - topLeft.x,\n height: bottomRight.y - topLeft.y,\n } as Bounds;\n}\n\nexport function getElementWorldBounds(ctx: EditorContext, el: BaseElement<BaseOptions>): Bounds {\n return screenBoundsToWorldBounds(ctx, el.getDisplayObject().getBounds());\n}\n\nexport function combineBounds(boundsList: readonly Bounds[]): Bounds {\n const [first, ...rest] = boundsList;\n\n if (!first) {\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n } as Bounds;\n }\n\n let minX = first.x;\n let minY = first.y;\n let maxX = first.x + first.width;\n let maxY = first.y + first.height;\n\n for (const bounds of rest) {\n minX = Math.min(minX, bounds.x);\n minY = Math.min(minY, bounds.y);\n maxX = Math.max(maxX, bounds.x + bounds.width);\n maxY = Math.max(maxY, bounds.y + bounds.height);\n }\n\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY,\n } as Bounds;\n}\n\nexport function getCombinedElementWorldBounds(\n ctx: EditorContext,\n elements: readonly BaseElement<BaseOptions>[],\n): Bounds {\n return combineBounds(elements.map((el) => getElementWorldBounds(ctx, el)));\n}\n\nexport function clampBoundsDelta(\n bounds: Bounds,\n dx: number,\n dy: number,\n limits: Bounds,\n): { dx: number; dy: number } {\n const nextLeft = bounds.x + dx;\n const nextTop = bounds.y + dy;\n const nextRight = nextLeft + bounds.width;\n const nextBottom = nextTop + bounds.height;\n const limitRight = limits.x + limits.width;\n const limitBottom = limits.y + limits.height;\n\n let clampedDx = dx;\n let clampedDy = dy;\n\n if (bounds.width >= limits.width) {\n clampedDx = limits.x - bounds.x;\n } else {\n if (nextLeft < limits.x) {\n clampedDx += limits.x - nextLeft;\n }\n if (nextRight > limitRight) {\n clampedDx -= nextRight - limitRight;\n }\n }\n\n if (bounds.height >= limits.height) {\n clampedDy = limits.y - bounds.y;\n } else {\n if (nextTop < limits.y) {\n clampedDy += limits.y - nextTop;\n }\n if (nextBottom > limitBottom) {\n clampedDy -= nextBottom - limitBottom;\n }\n }\n\n return { dx: clampedDx, dy: clampedDy };\n}\n\nexport async function constrainElementToCanvas(\n ctx: EditorContext,\n el: BaseElement<BaseOptions>,\n): Promise<boolean> {\n if (!isCanvasConstraintEnabled(ctx)) {\n return false;\n }\n\n const bounds = getElementWorldBounds(ctx, el);\n const limits = getCanvasWorldBounds(ctx);\n const { dx, dy } = clampBoundsDelta(bounds, 0, 0, limits);\n\n if (dx === 0 && dy === 0) {\n return false;\n }\n\n const opts = el.getOptions();\n await el.update({\n x: (opts.x ?? 0) + dx,\n y: (opts.y ?? 0) + dy,\n } as Partial<BaseOptions>);\n\n return true;\n}\n","import type { AlignmentManager } from '@/extensions/alignment/AlignmentManager';\nimport type { AlignmentAccessor } from '@/extensions/alignment/types';\n\nexport function createAlignmentAccessor(\n getManager: () => AlignmentManager | undefined,\n): AlignmentAccessor {\n return {\n align: (mode, ids) => getManager()?.align(mode, ids) ?? Promise.resolve(),\n };\n}\n","import type { Command } from '@/extensions/history/commands/Command';\nimport type { HistoryTrack } from '@/extensions/history/types';\n\nexport class CompositeCommand implements Command {\n constructor(\n readonly description: string,\n readonly kind: HistoryTrack,\n private readonly commands: readonly Command[],\n ) {}\n\n async execute(): Promise<void> {\n for (const command of this.commands) {\n await command.execute();\n }\n }\n\n async undo(): Promise<void> {\n for (let i = this.commands.length - 1; i >= 0; i--) {\n await this.commands[i]?.undo();\n }\n }\n}\n","import type { BaseOptions } from '@/core/BaseOptions';\nimport type { EditorContext } from '@/core/EditorContext';\nimport type { Command } from '@/extensions/history/commands/Command';\nimport type { HistoryTrack } from '@/extensions/history/types';\n\nexport class UpdateCommand implements Command {\n readonly description = 'Update element';\n\n static create(\n ctx: EditorContext,\n id: string,\n kind: Exclude<HistoryTrack, 'add' | 'remove'>,\n before: BaseOptions,\n after: Partial<BaseOptions>,\n ): UpdateCommand | null {\n const patches = UpdateCommand.buildPatches(before, after);\n if (!patches) {\n return null;\n }\n\n return new UpdateCommand(ctx, id, kind, patches.reverse, patches.diff);\n }\n\n static createFromSnapshot(\n ctx: EditorContext,\n id: string,\n kind: Exclude<HistoryTrack, 'add' | 'remove'>,\n snapshot: Partial<BaseOptions>,\n current: BaseOptions | undefined,\n after: BaseOptions,\n ): UpdateCommand | null {\n const before = UpdateCommand.mergeSnapshot(id, snapshot, current);\n return UpdateCommand.create(ctx, id, kind, before, after);\n }\n\n constructor(\n private readonly ctx: EditorContext,\n private readonly id: string,\n readonly kind: Exclude<HistoryTrack, 'add' | 'remove'>,\n private readonly before: Partial<BaseOptions>,\n private readonly after: Partial<BaseOptions>,\n ) {}\n\n async execute(): Promise<void> {\n const el = this.ctx.registry.get(this.id);\n if (el) {\n await el.update(this.after);\n this.ctx.events.emit('element:updated', this.id);\n }\n }\n\n async undo(): Promise<void> {\n const el = this.ctx.registry.get(this.id);\n if (el) {\n await el.update(this.before);\n this.ctx.events.emit('element:updated', this.id);\n }\n }\n\n private static buildPatches(\n before: BaseOptions,\n after: Partial<BaseOptions>,\n ): { diff: Partial<BaseOptions>; reverse: Partial<BaseOptions> } | null {\n const diff: Partial<BaseOptions> = {};\n\n for (const [key, value] of Object.entries(after) as Array<\n [keyof BaseOptions, BaseOptions[keyof BaseOptions]]\n >) {\n if (key === 'id' || key === 'type') {\n continue;\n }\n\n if (before[key] !== value) {\n diff[key] = value as never;\n }\n }\n\n if (Object.keys(diff).length === 0) {\n return null;\n }\n\n const reverse: Record<string, unknown> = {};\n for (const key of Object.keys(diff) as Array<keyof BaseOptions>) {\n reverse[key] = before[key];\n }\n\n return {\n diff,\n reverse: reverse as Partial<BaseOptions>,\n };\n }\n\n private static mergeSnapshot(\n id: string,\n snapshot: Partial<BaseOptions>,\n current?: BaseOptions,\n ): BaseOptions {\n return {\n ...(current ?? { id, type: '' }),\n ...snapshot,\n };\n }\n}\n","import type { Bounds } from 'pixi.js';\nimport type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport { combineBounds, getCanvasWorldBounds, getElementWorldBounds } from '@/core/canvasBounds';\nimport type { EditorContext } from '@/core/EditorContext';\nimport { createAlignmentAccessor } from '@/extensions/alignment/accessor';\nimport type { AlignmentMode } from '@/extensions/alignment/types';\nimport type { Extension } from '@/extensions/Extension';\nimport { CompositeCommand } from '@/extensions/history/commands/CompositeCommand';\nimport { UpdateCommand } from '@/extensions/history/commands/UpdateCommand';\nimport type { HistoryManager } from '@/extensions/history/HistoryManager';\nimport type { InteractionManager } from '@/extensions/interaction/InteractionManager';\n\ntype ElementWithBounds = {\n element: BaseElement<BaseOptions>;\n bounds: Bounds;\n};\n\nexport class AlignmentManager implements Extension {\n readonly name = 'alignment';\n accessors?: { alignment: ReturnType<typeof createAlignmentAccessor> };\n private ctx!: EditorContext;\n\n init(ctx: EditorContext): void {\n this.ctx = ctx;\n this.accessors = {\n alignment: createAlignmentAccessor(\n () => ctx.getExtension<AlignmentManager>('alignment') as AlignmentManager | undefined,\n ),\n };\n }\n\n async align(mode: AlignmentMode, ids?: readonly string[]): Promise<void> {\n const targetElements = this.getTargetElements(ids);\n const targets = targetElements.map((element) => ({\n element,\n bounds: getElementWorldBounds(this.ctx, element),\n }));\n if (targets.length === 0) {\n return;\n }\n\n const referenceBounds = this.getReferenceBounds(targets);\n const updates = targets\n .map(({ element, bounds }) => {\n const patch = this.getAlignmentPatch(mode, bounds, referenceBounds, element.getOptions());\n if (!patch) {\n return null;\n }\n\n return {\n element,\n patch,\n };\n })\n .filter(\n (item): item is { element: BaseElement<BaseOptions>; patch: Partial<BaseOptions> } =>\n item !== null,\n );\n\n if (updates.length === 0) {\n return;\n }\n\n const history = this.getHistoryManager();\n if (!history?.shouldTrack('align')) {\n for (const { element, patch } of updates) {\n await element.update(patch);\n this.ctx.events.emit('element:updated', element.getId());\n }\n return;\n }\n\n const commands = updates\n .map(({ element, patch }) =>\n UpdateCommand.create(this.ctx, element.getId(), 'align', element.getOptions(), patch),\n )\n .filter((command): command is UpdateCommand => command !== null);\n\n if (commands.length === 0) {\n return;\n }\n\n await history.execute(new CompositeCommand('Align objects', 'align', commands));\n }\n\n private getTargetElements(ids?: readonly string[]): BaseElement<BaseOptions>[] {\n const targetIds =\n ids && ids.length > 0\n ? [...ids]\n : (this.ctx.getExtension<InteractionManager>('interaction')?.getSelectedIds() ?? []);\n\n return targetIds\n .map((id) => this.ctx.registry.get(id))\n .filter((element): element is BaseElement<BaseOptions> => Boolean(element));\n }\n\n private getReferenceBounds(targets: readonly ElementWithBounds[]): Bounds {\n if (targets.length === 1) {\n return getCanvasWorldBounds(this.ctx);\n }\n\n return combineBounds(targets.map((item) => item.bounds));\n }\n\n private getAlignmentPatch(\n mode: AlignmentMode,\n bounds: Bounds,\n groupBounds: Bounds,\n options: BaseOptions,\n ): Partial<BaseOptions> | null {\n const next: Partial<BaseOptions> = {};\n\n if (mode === 'left' || mode === 'center' || mode === 'right') {\n const currentAnchorX = this.getAnchorX(mode, bounds);\n const targetAnchorX = this.getAnchorX(mode, groupBounds);\n const dx = targetAnchorX - currentAnchorX;\n if (dx !== 0) {\n next.x = (options.x ?? 0) + dx;\n }\n }\n\n if (mode === 'top' || mode === 'middle' || mode === 'bottom') {\n const currentAnchorY = this.getAnchorY(mode, bounds);\n const targetAnchorY = this.getAnchorY(mode, groupBounds);\n const dy = targetAnchorY - currentAnchorY;\n if (dy !== 0) {\n next.y = (options.y ?? 0) + dy;\n }\n }\n\n return Object.keys(next).length > 0 ? next : null;\n }\n\n private getAnchorX(mode: 'left' | 'center' | 'right', bounds: Bounds): number {\n if (mode === 'left') return bounds.x;\n if (mode === 'right') return bounds.x + bounds.width;\n return bounds.x + bounds.width / 2;\n }\n\n private getAnchorY(mode: 'top' | 'middle' | 'bottom', bounds: Bounds): number {\n if (mode === 'top') return bounds.y;\n if (mode === 'bottom') return bounds.y + bounds.height;\n return bounds.y + bounds.height / 2;\n }\n\n private getHistoryManager(): HistoryManager | undefined {\n return this.ctx.getExtension<HistoryManager>('history');\n }\n}\n","import type { CameraManager } from '@/extensions/camera/CameraManager';\nimport type { CameraAccessor } from '@/extensions/camera/types';\n\nexport function createCameraAccessor(getManager: () => CameraManager | undefined): CameraAccessor {\n return {\n getState: () => getManager()?.getState() ?? { zoom: 1, x: 0, y: 0 },\n setState: (next) => getManager()?.setState(next),\n setZoom: (zoom, anchorX, anchorY) => getManager()?.setZoom(zoom, anchorX, anchorY),\n screenToWorld: (screenX, screenY) =>\n getManager()?.screenToWorld(screenX, screenY) ?? { x: 0, y: 0 },\n worldToScreen: (worldX, worldY) =>\n getManager()?.worldToScreen(worldX, worldY) ?? { x: 0, y: 0 },\n };\n}\n","type KeyHandler = (event: KeyboardEvent) => void;\n\nexport class KeyboardShortcuts {\n private readonly listeners = new Map<string, KeyHandler>();\n private readonly boundHandler: (e: KeyboardEvent) => void;\n\n constructor(private readonly target: HTMLElement) {\n this.boundHandler = this.handleKeyDown.bind(this);\n target.addEventListener('keydown', this.boundHandler);\n }\n\n register(combo: string, handler: KeyHandler): void {\n this.listeners.set(combo.toLowerCase(), handler);\n }\n\n unregister(combo: string): void {\n this.listeners.delete(combo.toLowerCase());\n }\n\n destroy(): void {\n this.target.removeEventListener('keydown', this.boundHandler);\n this.listeners.clear();\n }\n\n private handleKeyDown(event: KeyboardEvent): void {\n const key = event.key.toLowerCase();\n const ctrl = event.ctrlKey || event.metaKey;\n const shift = event.shiftKey;\n\n const combos: string[] = [key];\n if (ctrl && shift) combos.push(`ctrl+shift+${key}`);\n else if (ctrl) combos.push(`ctrl+${key}`);\n else if (shift) combos.push(`shift+${key}`);\n\n for (const combo of combos) {\n const handler = this.listeners.get(combo);\n if (handler) {\n event.preventDefault();\n handler(event);\n return;\n }\n }\n }\n}\n","import { KeyboardShortcuts } from '@/core/KeyboardShortcuts';\n\n// Multiplicative factor per wheel tick — feels natural across zoom levels\nconst WHEEL_FACTOR = 1.08;\n\ntype Anchor = { x: number; y: number };\n\ntype ZoomHandler = (zoom: number, anchorX: number, anchorY: number) => void;\n\ntype PanBindings = {\n canvas: HTMLCanvasElement;\n getPanModifierActive(): boolean;\n setPanModifierActive(active: boolean): void;\n getPanning(): boolean;\n setPanning(active: boolean): void;\n getWorldPosition(): Anchor;\n setWorldPosition(x: number, y: number): void;\n};\n\nexport function createCameraShortcuts(\n canvas: HTMLCanvasElement,\n handlers: {\n zoomIn(): void;\n zoomOut(): void;\n reset(): void;\n },\n): KeyboardShortcuts {\n const shortcuts = new KeyboardShortcuts(canvas);\n shortcuts.register('+', handlers.zoomIn);\n shortcuts.register('=', handlers.zoomIn);\n shortcuts.register('-', handlers.zoomOut);\n shortcuts.register('0', handlers.reset);\n return shortcuts;\n}\n\nexport function attachWheelZoom(\n canvas: HTMLCanvasElement,\n enabled: boolean,\n getZoom: () => number,\n applyZoom: ZoomHandler,\n): () => void {\n if (!enabled) {\n return () => {};\n }\n\n const onWheel = (e: WheelEvent) => {\n e.preventDefault();\n const rect = canvas.getBoundingClientRect();\n const cx = e.clientX - rect.left;\n const cy = e.clientY - rect.top;\n const factor = e.deltaY < 0 ? WHEEL_FACTOR : 1 / WHEEL_FACTOR;\n applyZoom(getZoom() * factor, cx, cy);\n };\n\n canvas.addEventListener('wheel', onWheel, { passive: false });\n return () => canvas.removeEventListener('wheel', onWheel);\n}\n\nexport function attachPinchZoom(\n canvas: HTMLCanvasElement,\n getZoom: () => number,\n applyZoom: ZoomHandler,\n): Array<() => void> {\n let startDist = 0;\n let startZoom = 1;\n let anchorX = 0;\n let anchorY = 0;\n\n const distanceBetweenTouches = (touches: TouchList) => {\n const touch0 = touches[0];\n const touch1 = touches[1];\n if (!touch0 || !touch1) return 0;\n const dx = touch1.clientX - touch0.clientX;\n const dy = touch1.clientY - touch0.clientY;\n return Math.sqrt(dx * dx + dy * dy);\n };\n\n const onTouchStart = (e: TouchEvent) => {\n if (e.touches.length !== 2) return;\n e.preventDefault();\n startDist = distanceBetweenTouches(e.touches);\n startZoom = getZoom();\n const rect = canvas.getBoundingClientRect();\n const touch0 = e.touches[0];\n const touch1 = e.touches[1];\n if (!touch0 || !touch1) return;\n anchorX = (touch0.clientX + touch1.clientX) / 2 - rect.left;\n anchorY = (touch0.clientY + touch1.clientY) / 2 - rect.top;\n };\n\n const onTouchMove = (e: TouchEvent) => {\n if (e.touches.length !== 2 || startDist === 0) return;\n e.preventDefault();\n const scale = distanceBetweenTouches(e.touches) / startDist;\n applyZoom(startZoom * scale, anchorX, anchorY);\n };\n\n canvas.addEventListener('touchstart', onTouchStart, { passive: false });\n canvas.addEventListener('touchmove', onTouchMove, { passive: false });\n\n return [\n () => canvas.removeEventListener('touchstart', onTouchStart),\n () => canvas.removeEventListener('touchmove', onTouchMove),\n ];\n}\n\nexport function attachPanControls(bindings: PanBindings): Array<() => void> {\n const { canvas } = bindings;\n let panStartX = 0;\n let panStartY = 0;\n let panOriginX = 0;\n let panOriginY = 0;\n\n const updateCursor = () => {\n canvas.style.cursor = bindings.getPanning()\n ? 'grabbing'\n : bindings.getPanModifierActive()\n ? 'grab'\n : '';\n };\n\n const stopPan = () => {\n bindings.setPanning(false);\n updateCursor();\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== ' ') return;\n e.preventDefault();\n if (!bindings.getPanModifierActive()) {\n bindings.setPanModifierActive(true);\n updateCursor();\n }\n };\n\n const onKeyUp = (e: KeyboardEvent) => {\n if (e.key !== ' ') return;\n bindings.setPanModifierActive(false);\n stopPan();\n };\n\n const onBlur = () => {\n bindings.setPanModifierActive(false);\n stopPan();\n };\n\n const onPointerDown = (e: PointerEvent) => {\n canvas.focus();\n if (e.button !== 0 || !bindings.getPanModifierActive()) return;\n e.preventDefault();\n bindings.setPanning(true);\n panStartX = e.clientX;\n panStartY = e.clientY;\n const worldPosition = bindings.getWorldPosition();\n panOriginX = worldPosition.x;\n panOriginY = worldPosition.y;\n updateCursor();\n };\n\n const onPointerMove = (e: PointerEvent) => {\n if (!bindings.getPanning()) return;\n bindings.setWorldPosition(\n panOriginX + (e.clientX - panStartX),\n panOriginY + (e.clientY - panStartY),\n );\n };\n\n canvas.addEventListener('keydown', onKeyDown);\n window.addEventListener('keyup', onKeyUp);\n window.addEventListener('blur', onBlur);\n canvas.addEventListener('pointerdown', onPointerDown);\n window.addEventListener('pointermove', onPointerMove);\n window.addEventListener('pointerup', stopPan);\n window.addEventListener('pointercancel', stopPan);\n\n return [\n () => canvas.removeEventListener('keydown', onKeyDown),\n () => window.removeEventListener('keyup', onKeyUp),\n () => window.removeEventListener('blur', onBlur),\n () => canvas.removeEventListener('pointerdown', onPointerDown),\n () => window.removeEventListener('pointermove', onPointerMove),\n () => window.removeEventListener('pointerup', stopPan),\n () => window.removeEventListener('pointercancel', stopPan),\n ];\n}\n","import { type Container, Point } from 'pixi.js';\nimport type { CameraPoint } from '@/extensions/camera/types';\n\nexport function screenToWorldPoint(\n worldContainer: Container,\n screenX: number,\n screenY: number,\n): CameraPoint {\n const point = worldContainer.toLocal(new Point(screenX, screenY));\n return { x: point.x, y: point.y };\n}\n\nexport function worldToScreenPoint(\n worldContainer: Container,\n worldX: number,\n worldY: number,\n): CameraPoint {\n const point = worldContainer.toGlobal(new Point(worldX, worldY));\n return { x: point.x, y: point.y };\n}\n","import { Container } from 'pixi.js';\nimport type { EditorContext } from '@/core/EditorContext';\nimport type { CameraState } from '@/core/Events';\nimport { createCameraAccessor } from '@/extensions/camera/accessor';\nimport {\n attachPanControls,\n attachPinchZoom,\n attachWheelZoom,\n createCameraShortcuts,\n} from '@/extensions/camera/CameraControls';\nimport { screenToWorldPoint, worldToScreenPoint } from '@/extensions/camera/CameraTransforms';\nimport type { CameraConfig } from '@/extensions/camera/types';\nimport type { Extension } from '@/extensions/Extension';\n\nconst DEFAULTS: Required<CameraConfig> = {\n zoom: 1,\n minZoom: 0.1,\n maxZoom: 20,\n zoomStep: 0.1,\n wheelZoom: true,\n};\n\nexport class CameraManager implements Extension {\n readonly name = 'camera';\n accessors?: { camera: ReturnType<typeof createCameraAccessor> };\n private cfg: Required<CameraConfig>;\n private ctx!: EditorContext;\n readonly worldContainer: Container;\n private zoom: number;\n private shortcuts?: ReturnType<typeof createCameraShortcuts>;\n private panModifierActive = false;\n private panning = false;\n private cleanupFns: Array<() => void> = [];\n\n constructor(config: CameraConfig = {}) {\n this.cfg = { ...DEFAULTS, ...config };\n this.zoom = this.cfg.zoom;\n this.worldContainer = new Container();\n this.worldContainer.label = 'world';\n this.worldContainer.sortableChildren = true;\n this.worldContainer.zIndex = 0;\n }\n\n init(ctx: EditorContext): void {\n this.ctx = ctx;\n this.accessors = {\n camera: createCameraAccessor(() => ctx.getExtension<CameraManager>('camera')),\n };\n const pixi = ctx.app.getPixiApp();\n\n pixi.stage.addChild(this.worldContainer);\n\n const onElementAdded = (id: string) => {\n const el = ctx.registry.get(id);\n if (!el) return;\n const dObj = el.getDisplayObject();\n // addChild auto-removes from previous parent in PixiJS v8\n if (dObj.parent !== this.worldContainer) {\n this.worldContainer.addChild(dObj);\n }\n };\n ctx.events.on('element:added', onElementAdded);\n this.cleanupFns.push(() => ctx.events.off('element:added', onElementAdded));\n\n this.setupKeyboard();\n this.setupWheel();\n this.setupPinch();\n this.setupPan();\n\n if (this.zoom !== 1) {\n const cx = pixi.screen.width / 2;\n const cy = pixi.screen.height / 2;\n this.applyZoom(this.zoom, cx, cy);\n }\n }\n\n // ─── Public API ───────────────────────────────────────────────────────────\n\n getZoom(): number {\n return this.zoom;\n }\n\n isPanModifierActive(): boolean {\n return this.panModifierActive;\n }\n\n isPanning(): boolean {\n return this.panning;\n }\n\n getState(): CameraState {\n return { zoom: this.zoom, x: this.worldContainer.x, y: this.worldContainer.y };\n }\n\n setState(next: Partial<CameraState>): void {\n const zoom = next.zoom ?? this.zoom;\n const clampedZoom = Math.min(this.cfg.maxZoom, Math.max(this.cfg.minZoom, zoom));\n this.zoom = clampedZoom;\n this.worldContainer.scale.set(clampedZoom);\n this.setWorldPosition(next.x ?? this.worldContainer.x, next.y ?? this.worldContainer.y);\n }\n\n setZoom(zoom: number, anchorX?: number, anchorY?: number): void {\n const pixi = this.ctx.app.getPixiApp();\n this.applyZoom(zoom, anchorX ?? pixi.screen.width / 2, anchorY ?? pixi.screen.height / 2);\n }\n\n screenToWorld(screenX: number, screenY: number): { x: number; y: number } {\n return screenToWorldPoint(this.worldContainer, screenX, screenY);\n }\n\n worldToScreen(worldX: number, worldY: number): { x: number; y: number } {\n return worldToScreenPoint(this.worldContainer, worldX, worldY);\n }\n\n // ─── Internals ────────────────────────────────────────────────────────────\n\n private applyZoom(newZoom: number, anchorX: number, anchorY: number, emit = true): void {\n const clamped = Math.min(this.cfg.maxZoom, Math.max(this.cfg.minZoom, newZoom));\n const worldAnchor = this.screenToWorld(anchorX, anchorY);\n\n this.zoom = clamped;\n this.worldContainer.scale.set(clamped);\n const anchorAfterZoom = this.worldToScreen(worldAnchor.x, worldAnchor.y);\n this.setWorldPosition(\n this.worldContainer.x + (anchorX - anchorAfterZoom.x),\n this.worldContainer.y + (anchorY - anchorAfterZoom.y),\n emit,\n );\n }\n\n private setWorldPosition(x: number, y: number, emit = true): void {\n this.worldContainer.position.set(x, y);\n if (emit) {\n this.emitChanged();\n }\n }\n\n private emitChanged(): void {\n this.ctx.events.emit('camera:changed', this.getState());\n }\n\n private setupKeyboard(): void {\n const canvas = this.ctx.app.getCanvas();\n this.shortcuts = createCameraShortcuts(canvas, {\n zoomIn: () => this.stepZoom(1),\n zoomOut: () => this.stepZoom(-1),\n reset: () => this.setState({ zoom: 1, x: 0, y: 0 }),\n });\n }\n\n private setupWheel(): void {\n const canvas = this.ctx.app.getCanvas();\n this.cleanupFns.push(\n attachWheelZoom(\n canvas,\n this.cfg.wheelZoom,\n () => this.zoom,\n (zoom, anchorX, anchorY) => this.applyZoom(zoom, anchorX, anchorY),\n ),\n );\n }\n\n private setupPinch(): void {\n const canvas = this.ctx.app.getCanvas();\n this.cleanupFns.push(\n ...attachPinchZoom(\n canvas,\n () => this.zoom,\n (zoom, anchorX, anchorY) => this.applyZoom(zoom, anchorX, anchorY),\n ),\n );\n }\n\n private setupPan(): void {\n const canvas = this.ctx.app.getCanvas();\n this.cleanupFns.push(\n ...attachPanControls({\n canvas,\n getPanModifierActive: () => this.panModifierActive,\n setPanModifierActive: (active) => {\n this.panModifierActive = active;\n },\n getPanning: () => this.panning,\n setPanning: (active) => {\n this.panning = active;\n },\n getWorldPosition: () => ({ x: this.worldContainer.x, y: this.worldContainer.y }),\n setWorldPosition: (x, y) => this.setWorldPosition(x, y),\n }),\n );\n }\n\n private stepZoom(direction: 1 | -1, anchorX?: number, anchorY?: number): void {\n const factor = 1 + this.cfg.zoomStep;\n const nextZoom = direction > 0 ? this.zoom * factor : this.zoom / factor;\n this.setZoom(nextZoom, anchorX, anchorY);\n }\n\n destroy(): void {\n this.shortcuts?.destroy();\n for (const cleanup of this.cleanupFns) cleanup();\n this.cleanupFns = [];\n // worldContainer children are elements managed by CanvasKit; app.destroy() cleans them up\n }\n}\n","import type { BaseOptions } from '@/core/BaseOptions';\nimport type { ElementRegistry } from '@/core/ElementRegistry';\n\nexport function buildDuplicateOptions(\n snapshots: readonly BaseOptions[],\n nextZIndex: number,\n): BaseOptions[] {\n const duplicates = snapshots.map((options) => ({\n ...options,\n id: `${options.id}_dup_${crypto.randomUUID()}`,\n x: (options.x ?? 0) + 10,\n y: (options.y ?? 0) + 10,\n }));\n\n let currentZIndex = nextZIndex;\n for (const duplicate of duplicates) {\n duplicate.zIndex = currentZIndex++;\n }\n\n return duplicates;\n}\n\nexport function getMaxElementZIndex(registry: ElementRegistry): number {\n let maxZIndex = 0;\n for (const element of registry.getAll().values()) {\n maxZIndex = Math.max(maxZIndex, element.getDisplayObject().zIndex);\n }\n return maxZIndex;\n}\n","import type { ContextMenuManager } from '@/extensions/contextMenu/ContextMenuManager';\nimport type { ContextMenuAccessor } from '@/extensions/contextMenu/types';\n\nexport function createContextMenuAccessor(\n getManager: () => ContextMenuManager | undefined,\n): ContextMenuAccessor {\n return {\n open: (id, options) => {\n getManager()?.open(id, options);\n },\n close: () => {\n getManager()?.close();\n },\n };\n}\n","import type { ContextMenuEvent } from '@/extensions/contextMenu/types';\n\nfunction getDefaultItems(ctx: ContextMenuEvent): Array<{ label: string; action?: () => void }> {\n return [\n { label: 'Duplicate', action: ctx.actions.duplicate },\n { label: 'Delete', action: ctx.actions.delete },\n { label: 'separator' },\n { label: 'Bring to Front', action: ctx.actions.bringToFront },\n { label: 'Bring Forward', action: ctx.actions.bringForward },\n { label: 'Send Backward', action: ctx.actions.sendBackward },\n { label: 'Send to Back', action: ctx.actions.sendToBack },\n { label: 'separator' },\n { label: 'Normalize z-Index', action: ctx.actions.normalizeZIndex },\n ];\n}\n\nexport function renderDefaultContextMenu(ctx: ContextMenuEvent): HTMLElement {\n const menu = document.createElement('div');\n menu.style.cssText = `\n position: fixed;\n left: ${ctx.position.x}px;\n top: ${ctx.position.y}px;\n background: #fff;\n border: 1px solid #ddd;\n border-radius: 4px;\n box-shadow: 0 2px 8px rgba(0,0,0,0.15);\n padding: 4px 0;\n z-index: 9999;\n min-width: 160px;\n font-family: sans-serif;\n font-size: 13px;\n `;\n\n for (const item of getDefaultItems(ctx)) {\n const element = document.createElement('div');\n if (item.label === 'separator') {\n element.style.cssText = 'border-top: 1px solid #eee; margin: 4px 0;';\n } else {\n element.textContent = item.label;\n element.style.cssText = 'padding: 6px 16px; cursor: pointer; color: #222;';\n element.addEventListener('mouseenter', () => {\n element.style.background = '#f0f0f0';\n });\n element.addEventListener('mouseleave', () => {\n element.style.background = '';\n });\n element.addEventListener('click', (event) => {\n event.stopPropagation();\n item.action?.();\n });\n }\n menu.appendChild(element);\n }\n\n document.body.appendChild(menu);\n clampMenuToViewport(menu, ctx.position);\n return menu;\n}\n\nfunction clampMenuToViewport(menu: HTMLElement, position: { x: number; y: number }): void {\n const rect = menu.getBoundingClientRect();\n if (rect.right > window.innerWidth) {\n menu.style.left = `${position.x - rect.width}px`;\n }\n if (rect.bottom > window.innerHeight) {\n menu.style.top = `${position.y - rect.height}px`;\n }\n}\n","import type { BaseOptions } from '@/core/BaseOptions';\nimport type { EditorContext } from '@/core/EditorContext';\nimport type { Command } from '@/extensions/history/commands/Command';\n\nexport class AddCommand implements Command {\n readonly description = 'Add element';\n readonly kind = 'add' as const;\n\n constructor(\n private readonly ctx: EditorContext,\n private readonly snapshots: readonly BaseOptions[],\n ) {}\n\n async execute(): Promise<void> {\n for (const opts of this.snapshots) {\n const el = this.ctx.registry.createFromOptions(opts);\n await this.ctx.addElement(el);\n }\n }\n\n async undo(): Promise<void> {\n for (const opts of this.snapshots) {\n this.ctx.removeElement(opts.id);\n }\n }\n}\n","import type { BaseOptions } from '@/core/BaseOptions';\nimport type { EditorContext } from '@/core/EditorContext';\nimport type { Command } from '@/extensions/history/commands/Command';\n\nexport class RemoveCommand implements Command {\n readonly description = 'Remove element';\n readonly kind = 'remove' as const;\n private snapshots: BaseOptions[] = [];\n\n constructor(\n private readonly ctx: EditorContext,\n private readonly ids: readonly string[],\n ) {}\n\n async execute(): Promise<void> {\n this.snapshots = [];\n for (const id of this.ids) {\n const el = this.ctx.registry.get(id);\n if (el) this.snapshots.push({ ...el.getOptions() });\n this.ctx.removeElement(id);\n }\n }\n\n async undo(): Promise<void> {\n for (const opts of this.snapshots) {\n const el = this.ctx.registry.createFromOptions(opts);\n await this.ctx.addElement(el);\n }\n }\n}\n","import type { FederatedPointerEvent } from 'pixi.js';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport { buildDuplicateOptions, getMaxElementZIndex } from '@/core/duplicateOptions';\nimport type { EditorContext } from '@/core/EditorContext';\nimport { createContextMenuAccessor } from '@/extensions/contextMenu/accessor';\nimport { renderDefaultContextMenu } from '@/extensions/contextMenu/MenuRenderer';\nimport type { ContextMenuEvent, ContextMenuOpenOptions } from '@/extensions/contextMenu/types';\nimport type { Extension } from '@/extensions/Extension';\nimport { AddCommand } from '@/extensions/history/commands/AddCommand';\nimport { RemoveCommand } from '@/extensions/history/commands/RemoveCommand';\nimport type { HistoryManager } from '@/extensions/history/HistoryManager';\nimport type { InteractionManager } from '@/extensions/interaction/InteractionManager';\nimport type { LayerManager } from '@/extensions/layering/LayerManager';\nimport type { SerializationManager } from '@/extensions/serialization/SerializationManager';\nimport type { SerializedElement } from '@/extensions/serialization/types';\n\nexport class ContextMenuManager implements Extension {\n readonly name = 'contextMenu';\n accessors?: { contextMenu: ReturnType<typeof createContextMenuAccessor> };\n private ctx!: EditorContext;\n private menuEl: HTMLElement | null = null;\n private cleanupFns: Array<() => void> = [];\n private readonly elementListeners = new Map<\n string,\n {\n displayObject: {\n on(event: 'pointerdown' | 'rightclick', handler: (e: FederatedPointerEvent) => void): void;\n off(event: 'pointerdown' | 'rightclick', handler: (e: FederatedPointerEvent) => void): void;\n };\n onPointerDown: (e: FederatedPointerEvent) => void;\n onRightClick: (e: FederatedPointerEvent) => void;\n }\n >();\n\n init(ctx: EditorContext): void {\n this.ctx = ctx;\n this.accessors = {\n contextMenu: createContextMenuAccessor(() =>\n ctx.getExtension<ContextMenuManager>('contextMenu'),\n ),\n };\n\n const canvas = ctx.app.getCanvas();\n const onCanvasContextMenu = (e: MouseEvent) => {\n e.preventDefault();\n };\n canvas.addEventListener('contextmenu', onCanvasContextMenu);\n this.cleanupFns.push(() => canvas.removeEventListener('contextmenu', onCanvasContextMenu));\n\n const onElementAdded = (id: string) => {\n this.syncElementListeners(id);\n };\n ctx.events.on('element:added', onElementAdded);\n this.cleanupFns.push(() => ctx.events.off('element:added', onElementAdded));\n\n const onElementUpdated = (id: string) => {\n this.syncElementListeners(id);\n };\n ctx.events.on('element:updated', onElementUpdated);\n this.cleanupFns.push(() => ctx.events.off('element:updated', onElementUpdated));\n\n const onElementRemoved = (id: string) => {\n this.detachElementListeners(id);\n };\n ctx.events.on('element:removed', onElementRemoved);\n this.cleanupFns.push(() => ctx.events.off('element:removed', onElementRemoved));\n\n const onDocumentClick = () => this.close();\n const onDocumentKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') this.close();\n };\n document.addEventListener('click', onDocumentClick);\n document.addEventListener('keydown', onDocumentKeyDown);\n this.cleanupFns.push(\n () => document.removeEventListener('click', onDocumentClick),\n () => document.removeEventListener('keydown', onDocumentKeyDown),\n );\n }\n\n open(id: string, options: ContextMenuOpenOptions): void {\n this.close();\n\n const el = this.ctx.registry.get(id);\n if (!el) return;\n\n const targetIds = this.resolveTargetIds(id);\n const selected = targetIds.map((targetId) => this.serializeElement(targetId));\n const originalEvent =\n options.originalEvent ??\n new MouseEvent('contextmenu', {\n clientX: options.position.x,\n clientY: options.position.y,\n });\n\n const actions = {\n delete: () => {\n const history = this.ctx.getExtension<HistoryManager>('history');\n if (history) {\n void history.execute(new RemoveCommand(this.ctx, [...targetIds]));\n } else {\n for (const targetId of targetIds) this.ctx.removeElement(targetId);\n }\n this.close();\n },\n duplicate: () => {\n void this.duplicateElements(targetIds);\n this.close();\n },\n bringToFront: () => {\n this.getLayerManager()?.bringToFront([...targetIds]);\n this.close();\n },\n sendToBack: () => {\n this.getLayerManager()?.sendToBack([...targetIds]);\n this.close();\n },\n bringForward: () => {\n this.getLayerManager()?.bringForward(targetIds[0] ?? '');\n this.close();\n },\n sendBackward: () => {\n this.getLayerManager()?.sendBackward(targetIds[0] ?? '');\n this.close();\n },\n normalizeZIndex: () => {\n this.getLayerManager()?.normalizeZIndex();\n this.close();\n },\n };\n\n const payload: ContextMenuEvent = {\n selected,\n position: options.position,\n originalEvent,\n actions,\n };\n\n const contextMenuConfig =\n typeof this.ctx.options.extensions?.contextMenu === 'object'\n ? this.ctx.options.extensions.contextMenu\n : undefined;\n const userHandler = contextMenuConfig?.onElement;\n if (userHandler) {\n userHandler(payload);\n return;\n }\n\n this.menuEl = renderDefaultContextMenu(payload);\n }\n\n close(): void {\n if (this.menuEl) {\n this.menuEl.remove();\n this.menuEl = null;\n }\n }\n\n private getLayerManager(): LayerManager | undefined {\n return this.ctx.getExtension<LayerManager>('layering');\n }\n\n private getInteractionManager(): InteractionManager | undefined {\n return this.ctx.getExtension<InteractionManager>('interaction');\n }\n\n private resolveTargetIds(id: string): string[] {\n const interaction = this.getInteractionManager();\n const selectedIds = interaction ? [...interaction.getSelectedIds()] : [];\n if (!selectedIds.includes(id)) {\n interaction?.select(id);\n return [id];\n }\n return selectedIds.length ? selectedIds : [id];\n }\n\n private async duplicateElements(ids: readonly string[]): Promise<void> {\n const snapshots = ids\n .map((id) => this.ctx.registry.get(id)?.getOptions())\n .filter((options): options is BaseOptions => options !== undefined)\n .sort((a, b) => (a.zIndex ?? 0) - (b.zIndex ?? 0));\n if (!snapshots.length) {\n return;\n }\n\n const duplicates = buildDuplicateOptions(snapshots, getMaxElementZIndex(this.ctx.registry) + 1);\n\n const history = this.ctx.getExtension<HistoryManager>('history');\n if (history) {\n await history.execute(new AddCommand(this.ctx, duplicates));\n } else {\n for (const duplicate of duplicates) {\n await this.ctx.addElement(this.ctx.registry.createFromOptions(duplicate));\n }\n }\n\n this.getInteractionManager()?.select(duplicates.map((duplicate) => duplicate.id));\n }\n private serializeElement(id: string): SerializedElement {\n const element = this.ctx.registry.get(id);\n const serializer = this.ctx.getExtension<SerializationManager>('serialization');\n if (!element) {\n return { id, type: 'shape:rectangle' };\n }\n\n return serializer?.serialize(element) ?? (element.getOptions() as SerializedElement);\n }\n\n private detachElementListeners(id: string): void {\n const listenerSet = this.elementListeners.get(id);\n if (!listenerSet) return;\n\n listenerSet.displayObject.off('pointerdown', listenerSet.onPointerDown);\n listenerSet.displayObject.off('rightclick', listenerSet.onRightClick);\n this.elementListeners.delete(id);\n }\n\n private syncElementListeners(id: string): void {\n const element = this.ctx.registry.get(id);\n if (!element || element.getOptions().selectable === false) {\n this.detachElementListeners(id);\n return;\n }\n if (this.elementListeners.has(id)) {\n return;\n }\n\n const displayObject = element.getDisplayObject();\n const openFromPointer = (e: FederatedPointerEvent) => {\n e.stopPropagation();\n const nativeEvent = e.nativeEvent as MouseEvent;\n this.open(id, {\n position: { x: nativeEvent.clientX, y: nativeEvent.clientY },\n originalEvent: nativeEvent,\n });\n };\n const onPointerDown = (e: FederatedPointerEvent) => {\n if (e.button !== 2) return;\n openFromPointer(e);\n };\n const onRightClick = (e: FederatedPointerEvent) => {\n openFromPointer(e);\n };\n\n displayObject.on('pointerdown', onPointerDown);\n displayObject.on('rightclick', onRightClick);\n this.elementListeners.set(id, { displayObject, onPointerDown, onRightClick });\n }\n\n destroy(): void {\n this.close();\n for (const id of this.elementListeners.keys()) {\n this.detachElementListeners(id);\n }\n for (const cleanup of this.cleanupFns) cleanup();\n this.cleanupFns = [];\n }\n}\n","import type { ExportManager } from '@/extensions/export/ExportManager';\nimport type { ExportAccessor, ExportOptions } from '@/extensions/export/types';\n\nexport function createExportAccessor(getManager: () => ExportManager | undefined): ExportAccessor {\n return {\n render: async (format, options?: ExportOptions) => {\n const exportManager = getManager();\n if (!exportManager) {\n throw new Error('Export extension is disabled');\n }\n return exportManager.render(format, options);\n },\n };\n}\n","import { Rectangle } from 'pixi.js';\nimport type { EditorContext } from '@/core/EditorContext';\nimport type { Extension } from '@/extensions/Extension';\nimport { createExportAccessor } from '@/extensions/export/accessor';\nimport type { ExportMode, ExportOptions, ExportQuality } from '@/extensions/export/types';\nimport type { InteractionManager } from '@/extensions/interaction/InteractionManager';\n\ntype ExportFormat = 'png' | 'base64';\n\ntype ExportCanvas = {\n toDataURL(type?: string): string;\n toBlob(callback: BlobCallback, type?: string): void;\n};\n\ntype RectLike = { x: number; y: number; width: number; height: number };\n\nexport class ExportManager implements Extension {\n readonly name = 'export';\n accessors?: { export: ReturnType<typeof createExportAccessor> };\n private ctx!: EditorContext;\n\n init(ctx: EditorContext): void {\n this.ctx = ctx;\n this.accessors = {\n export: createExportAccessor(() => ctx.getExtension<ExportManager>('export')),\n };\n }\n\n async render(format: ExportFormat, options: ExportOptions = {}): Promise<Blob | string> {\n if (format === 'base64') {\n return await this.withHiddenOverlay(async () =>\n this.renderBase64(this.extractCanvas(options)),\n );\n }\n\n if (format === 'png') {\n return await this.withHiddenOverlay(async () => this.renderPng(this.extractCanvas(options)));\n }\n\n throw new Error(`Unknown export format: \"${format}\"`);\n }\n\n private async withHiddenOverlay<T>(work: () => Promise<T> | T): Promise<T> {\n const interaction = this.ctx.getExtension<InteractionManager>('interaction');\n interaction?.setOverlayVisible(false);\n\n try {\n return await work();\n } finally {\n interaction?.setOverlayVisible(true);\n }\n }\n\n private extractCanvas(options: ExportOptions): ExportCanvas {\n const pixiApp = this.ctx.app.getPixiApp();\n const canvas = pixiApp.renderer.extract.canvas({\n target: pixiApp.stage,\n frame: this.getExportFrame(options.mode ?? 'content', options.margin ?? 0),\n resolution: this.getExportResolution(options),\n clearColor: options.backgroundColor ?? this.ctx.options.backgroundColor ?? 'transparent',\n antialias: options.antialias ?? true,\n });\n\n if (!canvas.toDataURL || !canvas.toBlob) {\n throw new Error('Extracted canvas does not support export methods');\n }\n\n return {\n toDataURL: (type) => canvas.toDataURL?.(type) ?? '',\n toBlob: (callback, type) => {\n canvas.toBlob?.(callback, type);\n },\n };\n }\n\n private getExportResolution(options: ExportOptions): number {\n if (typeof options.resolution === 'number') {\n return Math.max(1, options.resolution);\n }\n\n return this.getQualityResolution(options.quality ?? 'standard');\n }\n\n private getQualityResolution(quality: ExportQuality): number {\n if (quality === 'ultra') return 3;\n if (quality === 'hd') return 2;\n return 1;\n }\n\n private getExportFrame(mode: ExportMode, margin: number): Rectangle {\n const pixiApp = this.ctx.app.getPixiApp();\n\n if (mode === 'viewport') {\n return new Rectangle(0, 0, pixiApp.screen.width, pixiApp.screen.height);\n }\n\n return this.boundsToFrame(this.getContentBounds(), margin);\n }\n\n private getContentBounds(): RectLike {\n const boundsList = Array.from(this.ctx.registry.getAll().values())\n .filter((element) => element.getOptions().visible !== false)\n .map((element) => element.getDisplayObject().getBounds())\n .filter((bounds) => bounds.width > 0 && bounds.height > 0);\n\n const [first, ...rest] = boundsList;\n\n if (!first) {\n const pixiApp = this.ctx.app.getPixiApp();\n return { x: 0, y: 0, width: pixiApp.screen.width, height: pixiApp.screen.height };\n }\n\n let minX = first.x;\n let minY = first.y;\n let maxX = first.x + first.width;\n let maxY = first.y + first.height;\n\n for (const bounds of rest) {\n minX = Math.min(minX, bounds.x);\n minY = Math.min(minY, bounds.y);\n maxX = Math.max(maxX, bounds.x + bounds.width);\n maxY = Math.max(maxY, bounds.y + bounds.height);\n }\n\n return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };\n }\n\n private boundsToFrame(bounds: RectLike, margin: number): Rectangle {\n const safeMargin = Math.max(0, margin);\n const x = Math.floor(bounds.x - safeMargin);\n const y = Math.floor(bounds.y - safeMargin);\n const right = Math.ceil(bounds.x + bounds.width + safeMargin);\n const bottom = Math.ceil(bounds.y + bounds.height + safeMargin);\n\n return new Rectangle(x, y, Math.max(1, right - x), Math.max(1, bottom - y));\n }\n\n private renderBase64(canvas: ExportCanvas): string {\n return canvas.toDataURL('image/png');\n }\n\n private async renderPng(canvas: ExportCanvas): Promise<Blob> {\n return await new Promise<Blob>((resolve, reject) => {\n canvas.toBlob((blob) => {\n if (blob) {\n resolve(blob);\n return;\n }\n reject(new Error('Failed to export PNG'));\n }, 'image/png');\n });\n }\n}\n","import type { FontManager } from '@/extensions/fonts/FontManager';\nimport type { FontsAccessor } from '@/extensions/fonts/types';\n\nexport function createFontsAccessor(getManager: () => FontManager | undefined): FontsAccessor {\n return {\n load: async (family, url) => {\n const fontManager = getManager();\n if (!fontManager) {\n throw new Error('Fonts extension is disabled');\n }\n return fontManager.load(family, url);\n },\n isLoaded: (family) => getManager()?.isLoaded(family) ?? false,\n getLoadedFonts: () => getManager()?.getLoadedFonts() ?? [],\n };\n}\n","import type { EditorContext } from '@/core/EditorContext';\nimport type { Extension } from '@/extensions/Extension';\nimport { createFontsAccessor } from '@/extensions/fonts/accessor';\n\ntype PendingFontLoad = {\n url: string;\n promise: Promise<void>;\n};\n\nexport class FontManager implements Extension {\n readonly name = 'fonts';\n accessors?: { fonts: ReturnType<typeof createFontsAccessor> };\n private readonly loaded = new Map<string, string>();\n private readonly pending = new Map<string, PendingFontLoad>();\n\n init(ctx: EditorContext): void {\n this.accessors = {\n fonts: createFontsAccessor(() => ctx.getExtension<FontManager>('fonts')),\n };\n }\n\n async load(family: string, url: string): Promise<void> {\n const loadedUrl = this.loaded.get(family);\n if (loadedUrl) {\n if (loadedUrl !== url) {\n throw new Error(\n `Font family \"${family}\" is already loaded from \"${loadedUrl}\", cannot load \"${url}\".`,\n );\n }\n return;\n }\n\n const pendingLoad = this.pending.get(family);\n if (pendingLoad) {\n if (pendingLoad.url !== url) {\n throw new Error(\n `Font family \"${family}\" is already loading from \"${pendingLoad.url}\", cannot load \"${url}\".`,\n );\n }\n return pendingLoad.promise;\n }\n\n const promise = this.loadFontFace(family, url);\n this.pending.set(family, { url, promise });\n return promise;\n }\n\n isLoaded(family: string): boolean {\n return this.loaded.has(family);\n }\n\n getLoadedFonts(): readonly string[] {\n return [...this.loaded.keys()];\n }\n\n private async loadFontFace(family: string, url: string): Promise<void> {\n try {\n const font = new FontFace(family, `url(${url})`);\n await font.load();\n document.fonts.add(font);\n this.loaded.set(family, url);\n } finally {\n this.pending.delete(family);\n }\n }\n}\n","import type { GridManager } from '@/extensions/grid/GridManager';\nimport type { GridAccessor, GridState } from '@/extensions/grid/types';\n\nconst DEFAULT_GRID_STATE: GridState = {\n cellSize: 20,\n majorInterval: 5,\n visible: true,\n};\n\nexport function createGridAccessor(getManager: () => GridManager | undefined): GridAccessor {\n return {\n setVisible: (visible) => getManager()?.setVisible(visible),\n isVisible: () => getManager()?.getState().visible ?? true,\n getState: () => getManager()?.getState() ?? DEFAULT_GRID_STATE,\n setCellSize: (size) => getManager()?.setCellSize(size),\n setMajorInterval: (interval) => getManager()?.setMajorInterval(interval),\n };\n}\n","import { Graphics, TilingSprite } from 'pixi.js';\nimport type { EditorContext } from '@/core/EditorContext';\nimport type { CameraManager } from '@/extensions/camera/CameraManager';\nimport type { Extension } from '@/extensions/Extension';\nimport { createGridAccessor } from '@/extensions/grid/accessor';\nimport type { GridConfig, GridState } from '@/extensions/grid/types';\n\nconst DEFAULTS: Required<GridConfig> = {\n cellSize: 20,\n majorInterval: 5,\n visible: true,\n minorLineColor: 0x000000,\n minorLineAlpha: 0.07,\n majorLineColor: 0x000000,\n majorLineAlpha: 0.2,\n};\n\nexport class GridManager implements Extension {\n readonly name = 'grid';\n accessors?: { grid: ReturnType<typeof createGridAccessor> };\n private cfg: Required<GridConfig>;\n private sprite?: TilingSprite;\n private ctx!: EditorContext;\n private cleanupFns: Array<() => void> = [];\n\n constructor(config: GridConfig = {}) {\n this.cfg = { ...DEFAULTS, ...config };\n }\n\n init(ctx: EditorContext): void {\n this.ctx = ctx;\n this.rebuildGrid();\n this.accessors = {\n grid: createGridAccessor(() => ctx.getExtension<GridManager>('grid')),\n };\n\n const onCameraChanged = (state: { zoom: number; x: number; y: number }) => {\n this.syncCameraTransform(state);\n };\n ctx.events.on('camera:changed', onCameraChanged);\n this.cleanupFns.push(() => ctx.events.off('camera:changed', onCameraChanged));\n }\n\n private rebuildGrid(): void {\n this.destroySprite();\n this.ensureSprite();\n this.syncVisibility();\n }\n\n private createGridTexture() {\n const pixi = this.ctx.app.getPixiApp();\n const {\n cellSize,\n majorInterval,\n minorLineColor,\n minorLineAlpha,\n majorLineColor,\n majorLineAlpha,\n } = this.cfg;\n const tileSize = cellSize * majorInterval;\n\n const g = new Graphics();\n\n // Interior minor lines (skip 0 and majorInterval — those are major borders)\n for (let i = 1; i < majorInterval; i++) {\n const pos = i * cellSize;\n g.moveTo(pos, 0).lineTo(pos, tileSize).moveTo(0, pos).lineTo(tileSize, pos);\n }\n g.stroke({ color: minorLineColor, alpha: minorLineAlpha, width: 1 });\n\n // Major border lines (top and left edges of the repeating tile)\n g.moveTo(0, 0).lineTo(tileSize, 0).moveTo(0, 0).lineTo(0, tileSize);\n g.stroke({ color: majorLineColor, alpha: majorLineAlpha, width: 1 });\n\n const texture = pixi.renderer.generateTexture(g);\n g.destroy();\n return texture;\n }\n\n private ensureSprite(): void {\n const pixi = this.ctx.app.getPixiApp();\n const texture = this.createGridTexture();\n\n const { width, height } = pixi.screen;\n this.sprite = new TilingSprite({ texture, width, height });\n this.sprite.zIndex = -1000;\n pixi.stage.addChild(this.sprite);\n const cameraState = this.ctx.getExtension<CameraManager>('camera')?.getState() ?? {\n zoom: 1,\n x: 0,\n y: 0,\n };\n this.syncCameraTransform(cameraState);\n }\n\n private destroySprite(): void {\n this.sprite?.destroy(true);\n this.sprite = undefined;\n }\n\n private syncVisibility(): void {\n if (this.sprite) {\n this.sprite.visible = this.cfg.visible;\n }\n }\n\n private syncCameraTransform({ zoom, x, y }: { zoom: number; x: number; y: number }): void {\n if (!this.sprite) return;\n this.sprite.tileScale.set(zoom);\n const tilePixels = this.cfg.cellSize * this.cfg.majorInterval * zoom;\n this.sprite.tilePosition.x = x % tilePixels;\n this.sprite.tilePosition.y = y % tilePixels;\n }\n\n getState(): GridState {\n return {\n cellSize: this.cfg.cellSize,\n majorInterval: this.cfg.majorInterval,\n visible: this.cfg.visible,\n };\n }\n\n setVisible(visible: boolean): void {\n this.cfg.visible = visible;\n this.syncVisibility();\n }\n\n setCellSize(size: number): void {\n this.cfg.cellSize = size;\n this.rebuildGrid();\n }\n\n setMajorInterval(interval: number): void {\n this.cfg.majorInterval = interval;\n this.rebuildGrid();\n }\n\n destroy(): void {\n for (const cleanup of this.cleanupFns) cleanup();\n this.cleanupFns = [];\n this.destroySprite();\n }\n}\n","import type { HistoryManager } from '@/extensions/history/HistoryManager';\nimport type { HistoryAccessor } from '@/extensions/history/types';\n\nexport function createHistoryAccessor(\n getManager: () => HistoryManager | undefined,\n): HistoryAccessor {\n return {\n undo: async () => {\n await getManager()?.undo();\n },\n redo: async () => {\n await getManager()?.redo();\n },\n canUndo: () => getManager()?.canUndo() ?? false,\n canRedo: () => getManager()?.canRedo() ?? false,\n setClipboard: (items) => {\n getManager()?.setClipboard(items);\n },\n getClipboard: () => getManager()?.getClipboard() ?? [],\n };\n}\n","import type { BaseOptions } from '@/core/BaseOptions';\nimport type { EditorContext } from '@/core/EditorContext';\nimport { KeyboardShortcuts } from '@/core/KeyboardShortcuts';\nimport type { Extension } from '@/extensions/Extension';\nimport { createHistoryAccessor } from '@/extensions/history/accessor';\nimport { AddCommand } from '@/extensions/history/commands/AddCommand';\nimport type { Command } from '@/extensions/history/commands/Command';\nimport { RemoveCommand } from '@/extensions/history/commands/RemoveCommand';\nimport { UpdateCommand } from '@/extensions/history/commands/UpdateCommand';\nimport type { HistoryConfig, HistoryTrack } from '@/extensions/history/types';\n\nconst DEFAULT_HISTORY_TRACK: readonly HistoryTrack[] = [\n 'move',\n 'resize',\n 'rotate',\n 'add',\n 'remove',\n 'zOrder',\n 'align',\n 'text',\n];\n\nexport class HistoryManager implements Extension {\n readonly name = 'history';\n accessors?: { history: ReturnType<typeof createHistoryAccessor> };\n private ctx!: EditorContext;\n private undoStack: Command[] = [];\n private redoStack: Command[] = [];\n private shortcuts: KeyboardShortcuts | null = null;\n private clipboard: BaseOptions[] = [];\n private maxEntries = 100;\n private trackedKinds = new Set<HistoryTrack>(DEFAULT_HISTORY_TRACK);\n\n constructor(private readonly config: HistoryConfig = {}) {}\n\n init(ctx: EditorContext): void {\n this.ctx = ctx;\n this.maxEntries = Math.max(1, this.config.max ?? 100);\n this.trackedKinds = new Set(this.config.track ?? DEFAULT_HISTORY_TRACK);\n\n const canvas = ctx.app.getCanvas();\n this.shortcuts = new KeyboardShortcuts(canvas);\n\n this.shortcuts.register('ctrl+z', () => this.undo());\n this.shortcuts.register('ctrl+shift+z', () => this.redo());\n\n this.accessors = {\n history: createHistoryAccessor(() => ctx.getExtension<HistoryManager>('history')),\n };\n }\n\n setClipboard(items: BaseOptions[]): void {\n this.clipboard = items.map((opts) => ({ ...opts }));\n }\n\n getClipboard(): BaseOptions[] {\n return this.clipboard.map((opts) => ({ ...opts }));\n }\n\n async execute(command: Command): Promise<void> {\n await command.execute();\n this.record(command);\n }\n\n add(items: BaseOptions | readonly BaseOptions[]): Promise<void> {\n const list = Array.isArray(items) ? items : [items];\n return this.executeCommand(list, (normalized) => new AddCommand(this.ctx, normalized));\n }\n\n remove(ids: string | readonly string[]): Promise<void> {\n const list = Array.isArray(ids) ? ids : [ids];\n return this.executeCommand(list, (normalized) => new RemoveCommand(this.ctx, normalized));\n }\n\n update(\n id: string,\n kind: 'move' | 'resize' | 'rotate' | 'zOrder' | 'align' | 'text',\n prev: BaseOptions,\n next: Partial<BaseOptions>,\n ): Promise<void> {\n const cmd = UpdateCommand.create(this.ctx, id, kind, prev, next);\n if (!cmd) return Promise.resolve();\n return this.execute(cmd);\n }\n\n record(command: Command): void {\n if (!this.shouldTrack(command.kind)) {\n return;\n }\n\n this.undoStack.push(command);\n this.trimUndoStack();\n this.redoStack = [];\n this.ctx.events.emit('history:changed');\n }\n\n async undo(): Promise<void> {\n const cmd = this.undoStack.pop();\n if (!cmd) return;\n await cmd.undo();\n this.redoStack.push(cmd);\n this.ctx.events.emit('history:changed');\n }\n\n async redo(): Promise<void> {\n const cmd = this.redoStack.pop();\n if (!cmd) return;\n await cmd.execute();\n this.undoStack.push(cmd);\n this.ctx.events.emit('history:changed');\n }\n\n canUndo(): boolean {\n return this.undoStack.length > 0;\n }\n\n canRedo(): boolean {\n return this.redoStack.length > 0;\n }\n\n shouldTrack(kind: HistoryTrack): boolean {\n return this.trackedKinds.has(kind);\n }\n\n destroy(): void {\n this.shortcuts?.destroy();\n this.undoStack = [];\n this.redoStack = [];\n this.clipboard = [];\n }\n\n private trimUndoStack(): void {\n if (this.undoStack.length <= this.maxEntries) {\n return;\n }\n\n this.undoStack.splice(0, this.undoStack.length - this.maxEntries);\n }\n\n private executeCommand<T>(\n items: readonly T[],\n create: (items: readonly T[]) => Command,\n ): Promise<void> {\n return this.execute(create(items));\n }\n}\n","import type { BaseOptions } from '@/core/BaseOptions';\nimport type { EditorContext } from '@/core/EditorContext';\nimport type { InteractionManager } from '@/extensions/interaction/InteractionManager';\nimport type { InteractionAccessor } from '@/extensions/interaction/types';\n\nexport function createInteractionAccessor(params: {\n ctx: EditorContext;\n getManager: () => InteractionManager | undefined;\n}): InteractionAccessor {\n function select(idOrIds: string | readonly string[] | null): void {\n params.getManager()?.select(idOrIds);\n }\n\n async function duplicate(): Promise<void> {\n await params.getManager()?.duplicate();\n }\n\n function getSelectedIds(): string[] {\n return [...(params.getManager()?.getSelectedIds() ?? [])];\n }\n\n function getSelectedOptions(): BaseOptions[] {\n return getSelectedIds()\n .map((id) => params.ctx.getElement(id)?.getOptions())\n .filter((opts): opts is BaseOptions => opts !== undefined);\n }\n\n return { select, duplicate, getSelectedIds, getSelectedOptions };\n}\n","import type { Container } from 'pixi.js';\nimport { Rectangle } from 'pixi.js';\nimport type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\n\nexport type HandlePosition = 'tl' | 'tc' | 'tr' | 'lc' | 'rc' | 'bl' | 'bc' | 'br' | 'top' | 'btop';\n\nexport interface HandlePoint {\n x: number;\n y: number;\n}\n\nfunction getBoundingRect(container: Container): Rectangle {\n const bounds = container.getBounds();\n return new Rectangle(bounds.x, bounds.y, bounds.width, bounds.height);\n}\n\nfunction getCombinedBoundingRect(elements: ReadonlyArray<BaseElement<BaseOptions>>): Rectangle {\n if (elements.length === 0) return new Rectangle(0, 0, 0, 0);\n\n let minX = Infinity,\n minY = Infinity,\n maxX = -Infinity,\n maxY = -Infinity;\n for (const el of elements) {\n const r = getBoundingRect(el.getDisplayObject());\n if (r.x < minX) minX = r.x;\n if (r.y < minY) minY = r.y;\n if (r.x + r.width > maxX) maxX = r.x + r.width;\n if (r.y + r.height > maxY) maxY = r.y + r.height;\n }\n\n return new Rectangle(minX, minY, maxX - minX, maxY - minY);\n}\n\nfunction getHandlePositions(rect: Rectangle, handleSize = 20): Record<HandlePosition, HandlePoint> {\n const { x, y, width: w, height: h } = rect;\n const cx = x + w / 2;\n const cy = y + h / 2;\n // Keep a fixed 12px gap between the tc handle top edge and the rotate handle bottom edge.\n const topOffset = handleSize + 12;\n\n return {\n tl: { x, y },\n tc: { x: cx, y },\n tr: { x: x + w, y },\n lc: { x, y: cy },\n rc: { x: x + w, y: cy },\n bl: { x, y: y + h },\n bc: { x: cx, y: y + h },\n br: { x: x + w, y: y + h },\n top: { x: cx, y: y - topOffset },\n btop: { x: cx, y: y - topOffset / 2 },\n };\n}\n\nexport const Transform = {\n getBoundingRect,\n getCombinedBoundingRect,\n getHandlePositions,\n};\n","export const ARROW_BOTH_SIDES_SVG = `<svg width=\"25\" height=\"25\" viewBox=\"0 0 25 25\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M22.0679 11.9341C22.2258 12.0716 22.3257 12.2741 22.3257 12.5C22.3257 12.7249 22.2267 12.9267 22.0699 13.0641L18.1064 17.0302C17.8136 17.3231 17.3387 17.3233 17.0457 17.0305C16.7528 16.7377 16.7526 16.2628 17.0454 15.9698L19.7635 13.25L4.88801 13.25L7.60597 15.9699C7.89876 16.2629 7.89859 16.7377 7.6056 17.0305C7.3126 17.3233 6.83773 17.3231 6.54494 17.0301L2.54761 13.03C2.25496 12.7372 2.25496 12.2626 2.54763 11.9697L6.54496 7.96984C6.83776 7.67686 7.31263 7.6767 7.60562 7.9695C7.8986 8.2623 7.89875 8.73718 7.60595 9.03016L4.88785 11.75L19.7633 11.75L17.0454 9.03014C16.7526 8.73715 16.7528 8.26227 17.0458 7.96948C17.3388 7.67669 17.8136 7.67686 18.1064 7.96986L22.0679 11.9341Z\" fill=\"#ffffff\"/>\n</svg>`;\n","export const COPY_SVG = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M16.8923 16.7332C16.8923 17.9759 15.885 18.9832 14.6423 18.9832H6.34375C5.10111 18.9832 4.09375 17.9759 4.09375 16.7332V8.60187C4.09375 8.00538 4.33061 7.4333 4.75226 7.01138L9.10142 2.65951C9.52341 2.23725 10.0959 2 10.6929 2H14.6423C15.885 2 16.8923 3.00736 16.8923 4.25V16.7332ZM14.6423 17.4832C15.0566 17.4832 15.3923 17.1475 15.3923 16.7332V4.25C15.3923 3.83579 15.0565 3.5 14.6423 3.5H10.8227L10.8249 6.47969C10.8257 7.72296 9.81813 8.73129 8.57486 8.73129H5.59375V16.7332C5.59375 17.1475 5.92954 17.4832 6.34375 17.4832H14.6423ZM6.65314 7.23129L9.32349 4.55928L9.32486 6.48076C9.32516 6.89518 8.98928 7.23129 8.57486 7.23129H6.65314Z\" fill=\"#ffffff\"/>\n<path d=\"M18.4065 5.68442C18.4065 5.27021 18.7423 4.93442 19.1565 4.93442C19.5707 4.93442 19.9065 5.27021 19.9065 5.68442V17.2514C19.9065 19.8747 17.7799 22.0014 15.1565 22.0014H7.79765C7.38344 22.0014 7.04765 21.6656 7.04765 21.2514C7.04765 20.8371 7.38344 20.5014 7.79765 20.5014H15.1565C16.9514 20.5014 18.4065 19.0463 18.4065 17.2514V5.68442Z\" fill=\"#ffffff\"/>\n</svg>`;\n","export const MOVE_SVG = `<svg width=\"25\" height=\"24\" viewBox=\"0 0 25 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M3.78217 3.46967C3.62191 3.62993 3.54934 3.84466 3.56445 4.05426V8C3.56445 8.41421 3.90024 8.75 4.31445 8.75C4.72867 8.75 5.06445 8.41421 5.06445 8V5.81261L11.2528 12.001L5.06445 18.1893V16C5.06445 15.5858 4.72867 15.25 4.31445 15.25C3.90024 15.25 3.56445 15.5858 3.56445 16V20C3.56445 20.4142 3.90024 20.75 4.31445 20.75H8.31409C8.72831 20.75 9.06409 20.4142 9.06409 20C9.06409 19.5858 8.72831 19.25 8.31409 19.25H6.12511L12.3135 13.0616L18.5018 19.25H16.3134C15.8992 19.25 15.5634 19.5858 15.5634 20C15.5634 20.4142 15.8992 20.75 16.3134 20.75H20.313C20.5119 20.75 20.7027 20.671 20.8433 20.5303C20.984 20.3897 21.063 20.1989 21.063 20L21.063 16C21.063 15.5858 20.7272 15.25 20.313 15.25C19.8988 15.25 19.563 15.5858 19.563 16L19.563 18.1898L13.3741 12.001L19.563 5.81212L19.563 8C19.563 8.41422 19.8988 8.75 20.313 8.75C20.7272 8.75 21.063 8.41421 21.063 8L21.063 4.04697C21.0759 3.83969 21.0032 3.62807 20.8448 3.46967C20.6982 3.32306 20.506 3.24983 20.3138 3.25C20.3135 3.25 20.3141 3.25 20.3138 3.25L16.3134 3.25C15.8991 3.25 15.5634 3.58579 15.5634 4C15.5634 4.41421 15.8991 4.75 16.3134 4.75H18.5038L12.3135 10.9403L6.12316 4.75H8.31409C8.7283 4.75 9.06409 4.41421 9.06409 4C9.06409 3.58579 8.7283 3.25 8.31409 3.25H4.31342C4.12117 3.24977 3.92885 3.32299 3.78217 3.46967Z\" fill=\"#ffffff\"/>\n</svg>`;\n","export const ROTATE_SVG = `<svg width=\"25\" height=\"24\" viewBox=\"0 0 25 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M3.13644 9.54175C3.02923 9.94185 3.26667 10.3531 3.66676 10.4603C4.06687 10.5675 4.47812 10.3301 4.58533 9.92998C5.04109 8.22904 6.04538 6.72602 7.44243 5.65403C8.83948 4.58203 10.5512 4.00098 12.3122 4.00098C14.0731 4.00098 15.7848 4.58203 17.1819 5.65403C18.3999 6.58866 19.3194 7.85095 19.8371 9.28639L18.162 8.34314C17.801 8.1399 17.3437 8.26774 17.1405 8.62867C16.9372 8.98959 17.0651 9.44694 17.426 9.65017L20.5067 11.3849C20.68 11.4825 20.885 11.5072 21.0766 11.4537C21.2682 11.4001 21.4306 11.2727 21.5282 11.0993L23.2629 8.01828C23.4661 7.65734 23.3382 7.2 22.9773 6.99679C22.6163 6.79358 22.159 6.92145 21.9558 7.28239L21.195 8.63372C20.5715 6.98861 19.5007 5.54258 18.095 4.464C16.436 3.19099 14.4033 2.50098 12.3122 2.50098C10.221 2.50098 8.1883 3.19099 6.52928 4.464C4.87027 5.737 3.67766 7.52186 3.13644 9.54175Z\" fill=\"#ffffff\"/>\n<path d=\"M21.4906 14.4582C21.5978 14.0581 21.3604 13.6469 20.9603 13.5397C20.5602 13.4325 20.1489 13.6699 20.0417 14.07C19.5859 15.7709 18.5816 17.274 17.1846 18.346C15.7875 19.418 14.0758 19.999 12.3149 19.999C10.5539 19.999 8.84219 19.418 7.44514 18.346C6.2292 17.4129 5.31079 16.1534 4.79261 14.721L6.45529 15.6573C6.81622 15.8605 7.27356 15.7327 7.47679 15.3718C7.68003 15.0108 7.55219 14.5535 7.19127 14.3502L4.11056 12.6155C3.93723 12.5179 3.73222 12.4932 3.54065 12.5467C3.34907 12.6003 3.18662 12.7278 3.08903 12.9011L1.3544 15.9821C1.15119 16.3431 1.27906 16.8004 1.64 17.0036C2.00094 17.2068 2.45828 17.079 2.66149 16.718L3.42822 15.3562C4.05115 17.0054 5.12348 18.4552 6.532 19.536C8.19102 20.809 10.2237 21.499 12.3149 21.499C14.406 21.499 16.4387 20.809 18.0977 19.536C19.7568 18.263 20.9494 16.4781 21.4906 14.4582Z\" fill=\"#ffffff\"/>\n</svg>`;\n","export const TRASH_SVG = `<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M14.7223 12.7585C14.7426 12.3448 14.4237 11.9929 14.01 11.9726C13.5963 11.9522 13.2444 12.2711 13.2241 12.6848L12.9999 17.2415C12.9796 17.6552 13.2985 18.0071 13.7122 18.0274C14.1259 18.0478 14.4778 17.7289 14.4981 17.3152L14.7223 12.7585Z\" fill=\"#ffffff\"/>\n<path d=\"M9.98802 11.9726C9.5743 11.9929 9.25542 12.3448 9.27577 12.7585L9.49993 17.3152C9.52028 17.7289 9.87216 18.0478 10.2859 18.0274C10.6996 18.0071 11.0185 17.6552 10.9981 17.2415L10.774 12.6848C10.7536 12.2711 10.4017 11.9522 9.98802 11.9726Z\" fill=\"#ffffff\"/>\n<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M10.249 2C9.00638 2 7.99902 3.00736 7.99902 4.25V5H5.5C4.25736 5 3.25 6.00736 3.25 7.25C3.25 8.28958 3.95503 9.16449 4.91303 9.42267L5.54076 19.8848C5.61205 21.0729 6.59642 22 7.78672 22H16.2113C17.4016 22 18.386 21.0729 18.4573 19.8848L19.085 9.42267C20.043 9.16449 20.748 8.28958 20.748 7.25C20.748 6.00736 19.7407 5 18.498 5H15.999V4.25C15.999 3.00736 14.9917 2 13.749 2H10.249ZM14.499 5V4.25C14.499 3.83579 14.1632 3.5 13.749 3.5H10.249C9.83481 3.5 9.49902 3.83579 9.49902 4.25V5H14.499ZM5.5 6.5C5.08579 6.5 4.75 6.83579 4.75 7.25C4.75 7.66421 5.08579 8 5.5 8H18.498C18.9123 8 19.248 7.66421 19.248 7.25C19.248 6.83579 18.9123 6.5 18.498 6.5H5.5ZM6.42037 9.5H17.5777L16.96 19.7949C16.9362 20.191 16.6081 20.5 16.2113 20.5H7.78672C7.38995 20.5 7.06183 20.191 7.03807 19.7949L6.42037 9.5Z\" fill=\"#ffffff\"/>\n</svg>`;\n","import { ARROW_BOTH_SIDES_SVG } from '@/extensions/interaction/icons/arrowBothSides';\nimport { COPY_SVG } from '@/extensions/interaction/icons/copy';\nimport { MOVE_SVG } from '@/extensions/interaction/icons/move';\nimport { ROTATE_SVG } from '@/extensions/interaction/icons/rotate';\nimport { TRASH_SVG } from '@/extensions/interaction/icons/trash';\n\nexport type IconKey = 'trash' | 'duplicate' | 'rotate' | 'arrowBothSides' | 'move';\n\nexport const ICONS: Record<IconKey, string> = {\n trash: TRASH_SVG,\n duplicate: COPY_SVG,\n rotate: ROTATE_SVG,\n arrowBothSides: ARROW_BOTH_SIDES_SVG,\n move: MOVE_SVG,\n};\n\nexport function getBuiltinIcon(key: IconKey): string {\n return ICONS[key];\n}\n\nexport function isIconKey(value: string): value is IconKey {\n return value in ICONS;\n}\n","import { Container, Graphics, Sprite, Texture } from 'pixi.js';\nimport type { HandlePosition } from '@/core/Transform';\nimport { ICONS, isIconKey } from '@/extensions/interaction/icons';\nimport type { ControlHandleOptions, HandlerType } from '@/extensions/interaction/types';\n\nconst HANDLE_W = 20;\nconst HANDLE_H = 20;\nconst HANDLE_RADIUS = 5;\nconst HANDLE_BG_COLOR = 0x1a73e8;\n\nconst HANDLE_ROTATIONS: Partial<Record<HandlePosition, number>> = {\n tl: Math.PI / 4,\n br: Math.PI / 4,\n tc: Math.PI / 2,\n bc: Math.PI / 2,\n lc: 0,\n rc: 0,\n tr: 0,\n bl: 0,\n top: 0,\n btop: 0,\n};\n\nconst TRANSFORM_CURSORS: Partial<Record<HandlePosition, string>> = {\n tl: 'nwse-resize',\n br: 'nwse-resize',\n tr: 'nesw-resize',\n bl: 'nesw-resize',\n tc: 'ns-resize',\n bc: 'ns-resize',\n lc: 'ew-resize',\n rc: 'ew-resize',\n};\n\nfunction resolveCursor(handler: HandlerType, position: HandlePosition): string {\n if (handler === 'transform') return TRANSFORM_CURSORS[position] ?? 'crosshair';\n if (handler === 'rotate') return 'grab';\n return 'pointer';\n}\n\nexport class ControlHandle {\n readonly container: Container;\n readonly position: HandlePosition;\n readonly handler: HandlerType;\n\n constructor(opts: ControlHandleOptions) {\n this.position = opts.position;\n this.handler = opts.handler;\n const w = opts.bgSize ?? HANDLE_W;\n const h = opts.bgSize ?? HANDLE_H;\n const iconSize = opts.size ?? Math.round(w * 0.6);\n\n this.container = new Container();\n this.container.eventMode = 'static';\n this.container.cursor = resolveCursor(opts.handler, opts.position);\n\n const bg = new Graphics();\n bg.roundRect(-w / 2, -h / 2, w, h, HANDLE_RADIUS);\n bg.fill({ color: opts.bgColor ?? HANDLE_BG_COLOR });\n this.container.addChild(bg);\n\n const iconRotation = HANDLE_ROTATIONS[opts.position] ?? 0;\n\n this.loadIcon(opts.icon, iconSize)\n .then((spr) => {\n if (!spr) return;\n spr.anchor.set(0.5);\n spr.width = iconSize;\n spr.height = iconSize;\n spr.rotation = iconRotation;\n this.container.addChild(spr);\n })\n .catch(() => {\n /* icon load failed silently */\n });\n }\n\n setPosition(x: number, y: number): void {\n this.container.position.set(x, y);\n }\n\n private async loadIcon(icon: string | undefined, size: number): Promise<Sprite | null> {\n if (!icon) return null;\n\n let svgString: string;\n\n if (isIconKey(icon)) {\n svgString = ICONS[icon];\n } else if (icon.trim().startsWith('<')) {\n svgString = icon;\n } else {\n try {\n const dpr = Math.ceil(window.devicePixelRatio ?? 1);\n const res = size * dpr * 2;\n const img = await this.loadImageUrl(icon, res);\n const canvas = document.createElement('canvas');\n canvas.width = res;\n canvas.height = res;\n canvas.getContext('2d')?.drawImage(img, 0, 0, res, res);\n const spr = new Sprite(Texture.from(canvas));\n spr.width = size;\n spr.height = size;\n return spr;\n } catch {\n return null;\n }\n }\n\n return this.svgToSprite(svgString, size);\n }\n\n private async svgToSprite(svgString: string, size: number): Promise<Sprite> {\n const dpr = Math.ceil(window.devicePixelRatio ?? 1);\n const res = size * dpr * 2; // render at 2× devicePixelRatio for crisp output\n const blob = new Blob([svgString], { type: 'image/svg+xml' });\n const url = URL.createObjectURL(blob);\n const img = await this.loadImageUrl(url, res);\n URL.revokeObjectURL(url);\n const canvas = document.createElement('canvas');\n canvas.width = res;\n canvas.height = res;\n canvas.getContext('2d')?.drawImage(img, 0, 0, res, res);\n const texture = Texture.from(canvas);\n const spr = new Sprite(texture);\n spr.width = size;\n spr.height = size;\n return spr;\n }\n\n private loadImageUrl(url: string, size: number): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const img = new window.Image(size, size);\n img.onload = () => resolve(img);\n img.onerror = reject;\n img.src = url;\n });\n }\n}\n","import { Container, Graphics, Rectangle } from 'pixi.js';\nimport type { CanvasKitOptions } from '@/canvas/CanvasKitOptions';\nimport type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport type { HandlePosition } from '@/core/Transform';\nimport { Transform } from '@/core/Transform';\nimport { ControlHandle } from '@/extensions/interaction/controls/ControlHandle';\nimport type { ControlConfig, InteractionTheme } from '@/extensions/interaction/types';\n\nconst DEFAULT_CONTROLS: Partial<Record<HandlePosition, ControlConfig>> = {\n tl: { icon: 'arrowBothSides', handler: 'transform' },\n tc: { icon: 'arrowBothSides', handler: 'transform' },\n tr: { icon: 'trash', handler: 'delete' },\n lc: { icon: 'arrowBothSides', handler: 'transform' },\n rc: { icon: 'arrowBothSides', handler: 'transform' },\n bl: { icon: 'duplicate', handler: 'duplicate' },\n bc: { icon: 'arrowBothSides', handler: 'transform' },\n br: { icon: 'arrowBothSides', handler: 'transform' },\n top: { icon: 'rotate', handler: 'rotate' },\n};\n\nconst DEFAULT_LINE_COLOR: number | string = 0x1a73e8;\nconst DEFAULT_LINE_THICKNESS = 1.5;\nconst DEFAULT_PADDING = 4;\n\nexport class BoundingBox {\n readonly container: Container;\n private readonly rectGraphics: Graphics;\n private readonly handles: ControlHandle[] = [];\n private isVisible = true;\n private readonly theme: InteractionTheme;\n\n constructor(overlayLayer: Container, options: CanvasKitOptions) {\n const interactionConfig =\n typeof options.extensions?.interaction === 'object'\n ? options.extensions.interaction\n : undefined;\n this.theme = interactionConfig?.theme ?? {};\n\n this.container = new Container();\n this.rectGraphics = new Graphics();\n this.container.addChild(this.rectGraphics);\n overlayLayer.addChild(this.container);\n this.container.visible = false;\n\n const controlConfigs = {\n ...DEFAULT_CONTROLS,\n ...(interactionConfig?.controls ?? {}),\n };\n\n const handleTheme = this.theme.handle;\n for (const [pos, cfg] of Object.entries(controlConfigs) as Array<\n [HandlePosition, ControlConfig]\n >) {\n if (!cfg) continue;\n const handle = new ControlHandle({\n position: pos,\n icon: cfg.icon,\n handler: cfg.handler,\n size: cfg.size,\n bgSize: handleTheme?.size,\n bgColor: handleTheme?.color,\n });\n this.container.addChild(handle.container);\n this.handles.push(handle);\n }\n }\n\n getHandles(): readonly ControlHandle[] {\n return this.handles;\n }\n\n update(elements: ReadonlyArray<BaseElement<BaseOptions>>): void {\n if (elements.length === 0) {\n this.container.visible = false;\n return;\n }\n this.container.visible = this.isVisible;\n\n if (elements.length === 1) {\n const [element] = elements;\n if (element) {\n this.updateSingle(element);\n }\n } else {\n this.container.position.set(0, 0);\n this.container.rotation = 0;\n const rect = this.padRect(Transform.getCombinedBoundingRect(elements));\n this.drawRect(rect);\n this.positionHandles(rect);\n }\n }\n\n hide(): void {\n this.isVisible = false;\n this.container.visible = false;\n }\n\n show(): void {\n this.isVisible = true;\n }\n\n destroy(): void {\n this.container.destroy({ children: true });\n }\n\n // Single-element path: rotate the bounding box container to match the element.\n // Temporarily zero rotation to get unrotated bounds, then draw rect in local space.\n private updateSingle(el: BaseElement<BaseOptions>): void {\n const dObj = el.getDisplayObject();\n const savedRot = dObj.rotation;\n\n dObj.rotation = 0;\n const bounds = dObj.getBounds();\n dObj.rotation = savedRot;\n\n const cx = bounds.x + bounds.width / 2;\n const cy = bounds.y + bounds.height / 2;\n\n this.container.position.set(cx, cy);\n this.container.rotation = savedRot;\n\n const localRect = this.padRect(\n new Rectangle(-bounds.width / 2, -bounds.height / 2, bounds.width, bounds.height),\n );\n this.drawRect(localRect);\n this.positionHandles(localRect);\n }\n\n private padRect(rect: Rectangle): Rectangle {\n const p = this.theme.boundingBox?.padding ?? DEFAULT_PADDING;\n return new Rectangle(rect.x - p, rect.y - p, rect.width + p * 2, rect.height + p * 2);\n }\n\n private drawRect(rect: Rectangle): void {\n const g = this.rectGraphics;\n g.clear();\n const { x, y, width: w, height: h } = rect;\n const color = this.theme.boundingBox?.lineColor ?? DEFAULT_LINE_COLOR;\n const thickness = this.theme.boundingBox?.lineThickness ?? DEFAULT_LINE_THICKNESS;\n const lineType = this.theme.boundingBox?.lineType ?? 'solid';\n\n if (lineType === 'dotted') {\n this.drawDottedLine(g, x, y, x + w, y, color, thickness);\n this.drawDottedLine(g, x + w, y, x + w, y + h, color, thickness);\n this.drawDottedLine(g, x + w, y + h, x, y + h, color, thickness);\n this.drawDottedLine(g, x, y + h, x, y, color, thickness);\n } else {\n g.moveTo(x, y)\n .lineTo(x + w, y)\n .moveTo(x + w, y)\n .lineTo(x + w, y + h)\n .moveTo(x + w, y + h)\n .lineTo(x, y + h)\n .moveTo(x, y + h)\n .lineTo(x, y)\n .stroke({ color, width: thickness });\n }\n\n const hasRotate = this.handles.some((h) => h.handler === 'rotate');\n if (hasRotate) {\n const cx = x + w / 2;\n const handleSize = this.theme.handle?.size ?? 20;\n const rotateCenter = y - (handleSize + 12);\n if (lineType === 'dotted') {\n this.drawDottedLine(g, cx, y, cx, rotateCenter, color, thickness);\n } else {\n g.moveTo(cx, y).lineTo(cx, rotateCenter).stroke({ color, width: thickness });\n }\n }\n }\n\n private drawDottedLine(\n g: Graphics,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n color: number | string,\n thickness: number,\n ): void {\n const dotRadius = thickness;\n const gap = 4;\n const dx = x2 - x1,\n dy = y2 - y1;\n const len = Math.sqrt(dx * dx + dy * dy);\n const nx = dx / len,\n ny = dy / len;\n const step = dotRadius * 2 + gap;\n for (let d = 0; d <= len; d += step) {\n g.circle(x1 + nx * d, y1 + ny * d, dotRadius).fill({ color });\n }\n }\n\n private positionHandles(rect: Rectangle): void {\n const handleSize = this.theme.handle?.size ?? 20;\n const positions = Transform.getHandlePositions(rect, handleSize);\n for (const handle of this.handles) {\n const pt = positions[handle.position];\n if (pt) handle.setPosition(pt.x, pt.y);\n }\n }\n}\n","import type { BaseOptions } from '@/core/BaseOptions';\nimport { getMaxElementZIndex } from '@/core/duplicateOptions';\nimport { AddCommand } from '@/extensions/history/commands/AddCommand';\nimport type { InteractionClipboardContext } from '@/extensions/interaction/types';\n\nexport function copySelectedToClipboard(ctx: InteractionClipboardContext): void {\n const snapshots = ctx.getSelectedOptions().map((options) => ({ ...options }));\n const history = ctx.getHistoryManager();\n if (history) history.setClipboard(snapshots);\n else ctx.setClipboard(snapshots);\n}\n\nexport async function pasteSelectionFromClipboard(ctx: InteractionClipboardContext): Promise<void> {\n const history = ctx.getHistoryManager();\n const items = history ? history.getClipboard() : ctx.getClipboard();\n if (!items.length) return;\n\n const pasted: BaseOptions[] = items.map((opts) => ({\n ...opts,\n id: `${opts.id}_paste_${crypto.randomUUID()}`,\n x: (opts.x ?? 0) + 10,\n y: (opts.y ?? 0) + 10,\n }));\n\n const sorted = [...pasted].sort((a, b) => (a.zIndex ?? 0) - (b.zIndex ?? 0));\n let nextZ = getMaxElementZIndex(ctx.ctx.registry) + 1;\n for (const options of sorted) options.zIndex = nextZ++;\n\n if (history) {\n await history.execute(new AddCommand(ctx.ctx, pasted));\n } else {\n for (const options of pasted) {\n await ctx.ctx.addElement(ctx.ctx.registry.createFromOptions(options));\n }\n }\n\n ctx.setSelection(pasted.map((options) => options.id));\n}\n","import type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport { buildDuplicateOptions, getMaxElementZIndex } from '@/core/duplicateOptions';\nimport { AddCommand } from '@/extensions/history/commands/AddCommand';\nimport { CompositeCommand } from '@/extensions/history/commands/CompositeCommand';\nimport { RemoveCommand } from '@/extensions/history/commands/RemoveCommand';\nimport { UpdateCommand } from '@/extensions/history/commands/UpdateCommand';\nimport {\n copySelectedToClipboard,\n pasteSelectionFromClipboard,\n} from '@/extensions/interaction/InteractionClipboard';\nimport type { InteractionActionsContext, StartState } from '@/extensions/interaction/types';\n\nexport async function deleteSelected(ctx: InteractionActionsContext): Promise<void> {\n const ids = [...ctx.getSelectedIds()];\n if (ids.length === 0) return;\n\n ctx.setSelection(null);\n\n const history = ctx.getHistoryManager();\n if (history) {\n await history.execute(new RemoveCommand(ctx.ctx, ids));\n } else {\n for (const id of ids) ctx.ctx.removeElement(id);\n }\n}\n\nexport function copySelected(ctx: InteractionActionsContext): void {\n copySelectedToClipboard(ctx);\n}\n\nexport async function duplicateSelection(ctx: InteractionActionsContext): Promise<void> {\n const snapshots = ctx\n .getSelectedElements()\n .map((el) => ({ ...el.getOptions() }))\n .sort((a, b) => (a.zIndex ?? 0) - (b.zIndex ?? 0));\n if (!snapshots.length) return;\n\n const duplicates = buildDuplicateOptions(snapshots, getMaxElementZIndex(ctx.ctx.registry) + 1);\n\n const history = ctx.getHistoryManager();\n if (history) {\n await history.execute(new AddCommand(ctx.ctx, duplicates));\n } else {\n for (const options of duplicates) {\n await ctx.ctx.addElement(ctx.ctx.registry.createFromOptions(options));\n }\n }\n\n ctx.setSelection(duplicates.map((options) => options.id));\n}\n\nexport async function pasteSelected(ctx: InteractionActionsContext): Promise<void> {\n await pasteSelectionFromClipboard(ctx);\n}\n\nexport function recordGroupUpdate(\n ctx: Pick<InteractionActionsContext, 'ctx' | 'getHistoryManager'>,\n elements: readonly BaseElement<BaseOptions>[],\n beforeStates: Map<string, StartState | BaseOptions>,\n kind: 'move' | 'resize' | 'rotate',\n): void {\n const history = ctx.getHistoryManager();\n if (!history?.shouldTrack(kind)) {\n return;\n }\n\n const commands = elements\n .map((el) => {\n const before = beforeStates.get(el.getId());\n if (!before) return null;\n\n return UpdateCommand.createFromSnapshot(\n ctx.ctx,\n el.getId(),\n kind,\n before as Partial<BaseOptions>,\n ctx.ctx.registry.get(el.getId())?.getOptions(),\n el.getOptions(),\n );\n })\n .filter((command): command is UpdateCommand => command !== null);\n\n if (commands.length === 0) {\n return;\n }\n\n const [first] = commands;\n const command =\n commands.length === 1 && first ? first : new CompositeCommand(`Update ${kind}`, kind, commands);\n\n history.record(command);\n}\n","import type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport type { InteractionSelectionStateContext } from '@/extensions/interaction/types';\n\nexport function selectOnly(ctx: InteractionSelectionStateContext, id: string): void {\n setSelection(ctx, [id]);\n}\n\nexport function toggleSelection(ctx: InteractionSelectionStateContext, id: string): void {\n if (ctx.selectedIds.has(id)) ctx.selectedIds.delete(id);\n else ctx.selectedIds.add(id);\n setSelection(ctx, [...ctx.selectedIds]);\n}\n\nexport function onStageClick(ctx: InteractionSelectionStateContext): void {\n if (ctx.isPanBlocked()) return;\n if (ctx.selectedIds.size === 0) return;\n setSelection(ctx, null);\n}\n\nexport function setSelection(\n ctx: InteractionSelectionStateContext,\n ids: readonly string[] | null,\n): void {\n ctx.selectedIds.clear();\n for (const id of ids ?? []) {\n ctx.selectedIds.add(id);\n }\n\n const selected = [...ctx.selectedIds];\n ctx.ctx.events.emit(\n 'element:selected',\n selected.length === 0 ? null : selected.length === 1 ? (selected[0] ?? null) : selected,\n );\n updateBoundingBox(ctx);\n}\n\nexport function getSelectedElements(\n ctx: InteractionSelectionStateContext,\n): BaseElement<BaseOptions>[] {\n return [...ctx.selectedIds]\n .map((id) => ctx.ctx.registry.get(id))\n .filter((el): el is BaseElement<BaseOptions> => el !== undefined);\n}\n\nexport function getSelectedOptions(ctx: InteractionSelectionStateContext): BaseOptions[] {\n return getSelectedElements(ctx).map((element) => element.getOptions());\n}\n\nexport function updateBoundingBox(ctx: InteractionSelectionStateContext): void {\n ctx.boundingBox.update(getSelectedElements(ctx));\n}\n\nexport function captureElementOptions(\n elements: readonly BaseElement<BaseOptions>[],\n patch?: (element: BaseElement<BaseOptions>) => Partial<BaseOptions>,\n): Map<string, BaseOptions> {\n const snapshots = new Map<string, BaseOptions>();\n for (const element of elements) {\n snapshots.set(element.getId(), {\n ...element.getOptions(),\n ...patch?.(element),\n });\n }\n return snapshots;\n}\n","import type { BaseOptions } from '@/core/BaseOptions';\nimport type { HandlePosition } from '@/core/Transform';\nimport type { ResizeAxes, StartState } from '@/extensions/interaction/types';\n\nexport const TRANSFORM_AXES: Partial<Record<HandlePosition, ResizeAxes>> = {\n tl: { xDir: -1, yDir: -1, proportional: true },\n tc: { xDir: 0, yDir: -1 },\n lc: { xDir: -1, yDir: 0 },\n rc: { xDir: 1, yDir: 0 },\n bl: { xDir: -1, yDir: 1 },\n bc: { xDir: 0, yDir: 1 },\n br: { xDir: 1, yDir: 1, proportional: true },\n tr: { xDir: 1, yDir: -1 },\n};\n\nexport function createResizeStartState(\n options: BaseOptions & {\n fontSize?: number;\n width?: number;\n height?: number;\n radius?: number;\n strokeWidth?: number;\n },\n): StartState {\n return {\n x: options.x ?? 0,\n y: options.y ?? 0,\n scaleX: options.scaleX ?? 1,\n scaleY: options.scaleY ?? 1,\n fontSize: options.fontSize,\n width: options.width,\n height: options.height,\n radius: options.radius,\n strokeWidth: options.strokeWidth,\n };\n}\n\nexport function resolveResizeAnchor(\n axes: { xDir: -1 | 0 | 1; yDir: -1 | 0 | 1 },\n rect: { x: number; y: number; width: number; height: number },\n): { x: number; y: number } {\n return {\n x: axes.xDir < 0 ? rect.x + rect.width : axes.xDir > 0 ? rect.x : rect.x + rect.width / 2,\n y: axes.yDir < 0 ? rect.y + rect.height : axes.yDir > 0 ? rect.y : rect.y + rect.height / 2,\n };\n}\n\nexport function resolveResizeScale(params: {\n axes: { xDir: -1 | 0 | 1; yDir: -1 | 0 | 1; proportional?: true };\n dx: number;\n dy: number;\n width: number;\n height: number;\n}): { sx: number; sy: number } {\n const { axes, dx, dy, width, height } = params;\n\n if (axes.proportional) {\n const diagX = axes.xDir * width;\n const diagY = axes.yDir * height;\n const diagLen = Math.sqrt(diagX * diagX + diagY * diagY);\n const proj = dx * (diagX / diagLen) + dy * (diagY / diagLen);\n const minScale = 10 / Math.max(width, height);\n const scale = Math.max(minScale, (diagLen + proj) / diagLen);\n return { sx: scale, sy: scale };\n }\n\n const newW = Math.max(10, width + axes.xDir * dx);\n const newH = Math.max(10, height + axes.yDir * dy);\n return {\n sx: axes.xDir !== 0 ? newW / width : 1,\n sy: axes.yDir !== 0 ? newH / height : 1,\n };\n}\n","import type { BaseOptions } from '@/core/BaseOptions';\nimport type { ResizeAxes, StartState } from '@/extensions/interaction/types';\n\n/**\n * Computes the update payload for one element during a resize drag.\n * Returns a partial options object ready to pass directly to el.update().\n */\nexport function computeResizeUpdate(\n type: string,\n s: StartState,\n axes: ResizeAxes,\n sx: number,\n sy: number,\n ax: number,\n ay: number,\n): Partial<BaseOptions> {\n const x = ax + (s.x - ax) * sx;\n const y = ay + (s.y - ay) * sy;\n const dims = computeDims(type, s, axes, sx, sy);\n return { x, y, ...dims } as Partial<BaseOptions>;\n}\n\n// ── Per-category dimension helpers ───────────────────────────────────────────\n\nfunction computeDims(\n type: string,\n s: StartState,\n axes: ResizeAxes,\n sx: number,\n sy: number,\n): Record<string, unknown> {\n if (type === 'text') {\n return textDims(s, axes, sx, sy);\n }\n if (type.startsWith('shape:')) {\n return shapeDims(s, axes, sx, sy);\n }\n return scaleDims(s, sx, sy);\n}\n\nfunction textDims(\n s: StartState,\n axes: ResizeAxes,\n sx: number,\n sy: number,\n): Record<string, unknown> {\n if (axes.proportional && s.fontSize !== undefined) {\n return {\n fontSize: Math.max(1, s.fontSize * sx),\n // Preserve any prior side-handle scaling so a later corner drag\n // compounds with the current visual transform instead of resetting it.\n scaleX: s.scaleX,\n scaleY: s.scaleY,\n };\n }\n return scaleDims(s, sx, sy);\n}\n\nfunction shapeDims(\n s: StartState,\n axes: ResizeAxes,\n sx: number,\n sy: number,\n): Record<string, unknown> {\n if (s.width !== undefined && s.height !== undefined) {\n // Rectangle / Circle / Star — scale each axis independently.\n return {\n ...(axes.xDir !== 0 ? { width: Math.max(1, s.width * sx) } : {}),\n ...(axes.yDir !== 0 ? { height: Math.max(1, s.height * sy) } : {}),\n scaleX: 1,\n scaleY: 1,\n };\n }\n if (s.width !== undefined) {\n // Line — x-handles change length (width), y-handles change thickness (strokeWidth).\n return {\n ...(axes.xDir !== 0 ? { width: Math.max(1, s.width * sx) } : {}),\n ...(axes.yDir !== 0 && s.strokeWidth !== undefined\n ? { strokeWidth: Math.max(0.5, s.strokeWidth * sy) }\n : {}),\n scaleX: 1,\n scaleY: 1,\n };\n }\n if (s.radius !== undefined) {\n // Circle with only radius — scale uniformly.\n const us = Math.sqrt(sx * sy);\n return { radius: Math.max(1, s.radius * us), scaleX: 1, scaleY: 1 };\n }\n // Line or unknown shape — fall back to scale.\n return scaleDims(s, sx, sy);\n}\n\nfunction scaleDims(s: StartState, sx: number, sy: number): Record<string, unknown> {\n return { scaleX: s.scaleX * sx, scaleY: s.scaleY * sy };\n}\n","import type { FederatedPointerEvent } from 'pixi.js';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport {\n clampBoundsDelta,\n getCanvasWorldBounds,\n getCombinedElementWorldBounds,\n isCanvasConstraintEnabled,\n} from '@/core/canvasBounds';\nimport type { HandlePosition } from '@/core/Transform';\nimport { Transform } from '@/core/Transform';\nimport { captureElementOptions } from '@/extensions/interaction/InteractionSelectionState';\nimport {\n createResizeStartState,\n resolveResizeAnchor,\n resolveResizeScale,\n TRANSFORM_AXES,\n} from '@/extensions/interaction/ResizeSession';\nimport { computeResizeUpdate } from '@/extensions/interaction/ResizeStrategy';\nimport type { InteractionGesturesContext, StartState } from '@/extensions/interaction/types';\nimport type { InternalSnapResult } from '@/extensions/snap/types';\n\nexport function startResize(\n ctx: InteractionGesturesContext,\n e: FederatedPointerEvent,\n pos: HandlePosition,\n): void {\n const elements = ctx.getSelectedElements();\n if (!elements.length) return;\n\n const axes = TRANSFORM_AXES[pos];\n if (!axes) return;\n\n const startRect = Transform.getCombinedBoundingRect(elements);\n if (startRect.width === 0 || startRect.height === 0) return;\n\n const camera = ctx.getCameraManager();\n const { x: axScreen, y: ayScreen } = resolveResizeAnchor(axes, startRect);\n const { x: ax, y: ay } = camera?.screenToWorld(axScreen, ayScreen) ?? {\n x: axScreen,\n y: ayScreen,\n };\n\n const startStates = new Map<string, StartState>();\n for (const el of elements) {\n startStates.set(\n el.getId(),\n createResizeStartState(\n el.getOptions() as BaseOptions & {\n fontSize?: number;\n width?: number;\n height?: number;\n radius?: number;\n strokeWidth?: number;\n },\n ),\n );\n }\n\n const startX = e.globalX;\n const startY = e.globalY;\n\n const onMove = (mv: FederatedPointerEvent) => {\n const dx = mv.globalX - startX;\n const dy = mv.globalY - startY;\n const { sx, sy } = resolveResizeScale({\n axes,\n dx,\n dy,\n width: startRect.width,\n height: startRect.height,\n });\n\n for (const el of elements) {\n const state = startStates.get(el.getId());\n if (!state) continue;\n el.update(computeResizeUpdate(el.getType(), state, axes, sx, sy, ax, ay));\n ctx.ctx.events.emit('element:updated', el.getId());\n }\n ctx.updateBoundingBox();\n };\n\n attachStageDrag(ctx, onMove, () => {\n ctx.recordGroupUpdate(elements, startStates, 'resize');\n });\n}\n\nexport function startRotate(ctx: InteractionGesturesContext, e: FederatedPointerEvent): void {\n const elements = ctx.getSelectedElements();\n if (!elements.length) return;\n\n const rect = Transform.getCombinedBoundingRect(elements);\n const cx = rect.x + rect.width / 2;\n const cy = rect.y + rect.height / 2;\n\n const startAngle = Math.atan2(e.globalY - cy, e.globalX - cx);\n const startRots = new Map<string, number>();\n for (const el of elements) {\n startRots.set(el.getId(), el.getOptions().rotationDeg ?? 0);\n }\n\n const onMove = (mv: FederatedPointerEvent) => {\n const angle = Math.atan2(mv.globalY - cy, mv.globalX - cx);\n const deltaDeg = (angle - startAngle) * (180 / Math.PI);\n for (const el of elements) {\n el.update({\n rotationDeg: (startRots.get(el.getId()) ?? 0) + deltaDeg,\n } as Partial<BaseOptions>);\n ctx.ctx.events.emit('element:updated', el.getId());\n }\n ctx.updateBoundingBox();\n };\n\n attachStageDrag(ctx, onMove, () => {\n ctx.recordGroupUpdate(\n elements,\n captureElementOptions(elements, (element) => ({\n rotationDeg: startRots.get(element.getId()) ?? 0,\n })),\n 'rotate',\n );\n });\n}\n\nexport function startElementDrag(ctx: InteractionGesturesContext, e: FederatedPointerEvent): void {\n const startX = e.globalX;\n const startY = e.globalY;\n const selectedElements = ctx.getSelectedElements();\n const startPositions = captureElementOptions(selectedElements);\n\n const camera = ctx.getCameraManager();\n const snap = ctx.getSnapManager();\n\n const startBounds = snap ? getCombinedElementWorldBounds(ctx.ctx, selectedElements) : null;\n const startConstraintBounds = isCanvasConstraintEnabled(ctx.ctx)\n ? getCombinedElementWorldBounds(ctx.ctx, selectedElements)\n : null;\n\n ctx.boundingBox.hide();\n\n const onMove = (mv: FederatedPointerEvent) => {\n const zoom = camera?.getZoom() ?? 1;\n const dx = (mv.globalX - startX) / zoom;\n const dy = (mv.globalY - startY) / zoom;\n\n let snapDx = dx;\n let snapDy = dy;\n\n let snapResult: InternalSnapResult | null = null;\n\n if (snap && startBounds) {\n const result = snap.resolve(startBounds.x + dx, startBounds.y + dy, {\n width: startBounds.width,\n height: startBounds.height,\n exclude: [...ctx.getSelectedIds()],\n });\n snapDx = result.x - startBounds.x;\n snapDy = result.y - startBounds.y;\n snapResult = result;\n }\n\n if (isCanvasConstraintEnabled(ctx.ctx) && startConstraintBounds) {\n const constrained = clampBoundsDelta(\n {\n x: startConstraintBounds.x,\n y: startConstraintBounds.y,\n width: startConstraintBounds.width,\n height: startConstraintBounds.height,\n } as never,\n snapDx,\n snapDy,\n getCanvasWorldBounds(ctx.ctx),\n );\n snapDx = constrained.dx;\n snapDy = constrained.dy;\n }\n\n for (const [id, start] of startPositions) {\n const el = ctx.ctx.registry.get(id);\n if (!el) continue;\n el.update({\n x: (start.x ?? 0) + snapDx,\n y: (start.y ?? 0) + snapDy,\n } as Partial<BaseOptions>);\n ctx.ctx.events.emit('element:updated', id);\n }\n\n if (snap && snapResult) {\n const actualBounds = getCombinedElementWorldBounds(ctx.ctx, selectedElements);\n snap.showLines({\n ...snapResult,\n lineX: resolveSnapLinePosition(actualBounds.x, actualBounds.width, snapResult.xAnchor),\n lineY: resolveSnapLinePosition(actualBounds.y, actualBounds.height, snapResult.yAnchor),\n });\n }\n };\n\n attachStageDrag(ctx, onMove, () => {\n snap?.hideLines();\n ctx.boundingBox.show();\n ctx.updateBoundingBox();\n ctx.recordGroupUpdate(selectedElements, startPositions, 'move');\n });\n}\n\nfunction resolveSnapLinePosition(\n start: number,\n size: number,\n anchor: InternalSnapResult['xAnchor'] | InternalSnapResult['yAnchor'],\n): number | undefined {\n switch (anchor) {\n case 'min':\n return start;\n case 'center':\n return start + size / 2;\n case 'max':\n return start + size;\n default:\n return undefined;\n }\n}\n\nfunction attachStageDrag(\n ctx: Pick<InteractionGesturesContext, 'ctx'>,\n onMove: (e: FederatedPointerEvent) => void,\n onEnd?: () => void,\n): void {\n const stage = ctx.ctx.app.getPixiApp().stage;\n const onUp = () => {\n stage.off('pointermove', onMove);\n stage.off('pointerup', onUp);\n stage.off('pointerupoutside', onUp);\n onEnd?.();\n };\n stage.on('pointermove', onMove);\n stage.on('pointerup', onUp);\n stage.on('pointerupoutside', onUp);\n}\n","import type { FederatedPointerEvent } from 'pixi.js';\nimport { selectOnly, toggleSelection } from '@/extensions/interaction/InteractionSelectionState';\nimport type { InteractionSelectionBindingsContext } from '@/extensions/interaction/types';\n\nexport function syncSelectableElement(ctx: InteractionSelectionBindingsContext, id: string): void {\n const el = ctx.ctx.registry.get(id);\n if (!el || el.getOptions().selectable === false) {\n detachSelectableElement(ctx, id);\n return;\n }\n\n const displayObject = el.getDisplayObject();\n displayObject.eventMode = 'static';\n displayObject.cursor = 'move';\n\n const existing = ctx.selectableBindings.get(id);\n if (existing?.displayObject === displayObject) {\n return;\n }\n detachSelectableElement(ctx, id);\n\n const onPointerDown = (e: FederatedPointerEvent) => {\n if (e.button !== 0) return;\n if (ctx.isPanBlocked()) return;\n\n e.stopPropagation();\n const native = e.nativeEvent as PointerEvent | null;\n if (native?.ctrlKey || native?.metaKey) {\n toggleSelection(ctx, el.getId());\n } else {\n selectOnly(ctx, el.getId());\n }\n ctx.startElementDrag(e);\n };\n\n displayObject.on('pointerdown', onPointerDown);\n ctx.selectableBindings.set(id, { displayObject, onPointerDown });\n}\n\nexport function detachSelectableElement(\n ctx: InteractionSelectionBindingsContext,\n id: string,\n): void {\n const binding = ctx.selectableBindings.get(id);\n if (!binding) return;\n\n binding.displayObject.off('pointerdown', binding.onPointerDown);\n ctx.selectableBindings.delete(id);\n}\n","import type { FederatedPointerEvent } from 'pixi.js';\nimport { Container } from 'pixi.js';\nimport type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport type { EditorContext } from '@/core/EditorContext';\nimport { KeyboardShortcuts } from '@/core/KeyboardShortcuts';\nimport type { CameraManager } from '@/extensions/camera/CameraManager';\nimport type { Extension } from '@/extensions/Extension';\nimport type { HistoryManager } from '@/extensions/history/HistoryManager';\nimport { createInteractionAccessor } from '@/extensions/interaction/accessor';\nimport { BoundingBox } from '@/extensions/interaction/BoundingBox';\nimport {\n copySelected,\n deleteSelected,\n duplicateSelection,\n pasteSelected,\n recordGroupUpdate,\n} from '@/extensions/interaction/InteractionActions';\nimport {\n startElementDrag,\n startResize,\n startRotate,\n} from '@/extensions/interaction/InteractionGestures';\nimport {\n detachSelectableElement,\n syncSelectableElement,\n} from '@/extensions/interaction/InteractionSelectionBindings';\nimport {\n getSelectedElements,\n getSelectedOptions,\n onStageClick,\n setSelection,\n updateBoundingBox,\n} from '@/extensions/interaction/InteractionSelectionState';\nimport type {\n InteractionActionsContext,\n InteractionGesturesContext,\n InteractionSelectionBindingsContext,\n InteractionSelectionStateContext,\n SelectableBinding,\n StartState,\n} from '@/extensions/interaction/types';\nimport type { SnapManager } from '@/extensions/snap/SnapManager';\n\nexport class InteractionManager implements Extension {\n readonly name = 'interaction';\n accessors?: { interaction: ReturnType<typeof createInteractionAccessor> };\n private ctx!: EditorContext;\n private overlayLayer!: Container;\n private boundingBox!: BoundingBox;\n private selectedIds = new Set<string>();\n private shortcuts!: KeyboardShortcuts;\n private cleanupFns: Array<() => void> = [];\n private readonly selectableBindings = new Map<string, SelectableBinding>();\n private clipboard: BaseOptions[] = [];\n private selectionStateContext!: InteractionSelectionStateContext;\n private selectionBindingsContext!: InteractionSelectionBindingsContext;\n private gesturesContext!: InteractionGesturesContext;\n private actionsContext!: InteractionActionsContext;\n\n init(ctx: EditorContext): void {\n this.ctx = ctx;\n this.accessors = {\n interaction: createInteractionAccessor({\n ctx,\n getManager: () => ctx.getExtension<InteractionManager>('interaction'),\n }),\n };\n\n this.overlayLayer = new Container();\n this.overlayLayer.zIndex = Number.MAX_SAFE_INTEGER;\n this.overlayLayer.eventMode = 'passive';\n ctx.app.getPixiApp().stage.addChild(this.overlayLayer);\n\n this.boundingBox = new BoundingBox(this.overlayLayer, ctx.options);\n this.createContexts();\n this.setupHandleEvents();\n\n const selection = this.getSelectionBindingsContext();\n for (const id of ctx.registry.getAll().keys()) {\n syncSelectableElement(selection, id);\n }\n\n const onElementAdded = (id: string) => {\n syncSelectableElement(this.getSelectionBindingsContext(), id);\n };\n ctx.events.on('element:added', onElementAdded);\n this.cleanupFns.push(() => ctx.events.off('element:added', onElementAdded));\n\n const onElementRemoved = (id: string) => {\n this.selectedIds.delete(id);\n detachSelectableElement(this.getSelectionBindingsContext(), id);\n updateBoundingBox(this.getSelectionStateContext());\n };\n ctx.events.on('element:removed', onElementRemoved);\n this.cleanupFns.push(() => ctx.events.off('element:removed', onElementRemoved));\n\n const onElementUpdated = (id: string) => {\n syncSelectableElement(this.getSelectionBindingsContext(), id);\n if (this.selectedIds.has(id)) {\n updateBoundingBox(this.getSelectionStateContext());\n }\n };\n ctx.events.on('element:updated', onElementUpdated);\n this.cleanupFns.push(() => ctx.events.off('element:updated', onElementUpdated));\n\n const stage = ctx.app.getPixiApp().stage;\n const onStagePointerDown = (e: FederatedPointerEvent) => {\n if (e.button === 0) {\n onStageClick(this.getSelectionStateContext());\n }\n };\n stage.on('pointerdown', onStagePointerDown);\n this.cleanupFns.push(() => stage.off('pointerdown', onStagePointerDown));\n\n this.shortcuts = new KeyboardShortcuts(ctx.app.getCanvas());\n this.shortcuts.register('delete', () => {\n void deleteSelected(this.actionsContext);\n });\n this.shortcuts.register('backspace', () => {\n void deleteSelected(this.actionsContext);\n });\n this.shortcuts.register('ctrl+c', () => copySelected(this.actionsContext));\n this.shortcuts.register('ctrl+v', () => {\n void pasteSelected(this.actionsContext);\n });\n this.shortcuts.register('ctrl+d', () => {\n void duplicateSelection(this.actionsContext);\n });\n }\n\n private setupHandleEvents(): void {\n for (const handle of this.boundingBox.getHandles()) {\n const handler = handle.handler;\n const position = handle.position;\n\n if (handler === 'delete') {\n this.attachHandlePointerDown(handle.container, (e) => {\n if (this.isPanBlocked()) return;\n e.stopPropagation();\n void deleteSelected(this.actionsContext);\n });\n } else if (handler === 'duplicate') {\n this.attachHandlePointerDown(handle.container, (e) => {\n if (this.isPanBlocked()) return;\n e.stopPropagation();\n void duplicateSelection(this.actionsContext);\n });\n } else if (handler === 'transform') {\n this.attachHandlePointerDown(handle.container, (e) => {\n if (this.isPanBlocked()) return;\n e.stopPropagation();\n startResize(this.gesturesContext, e, position);\n });\n } else if (handler === 'rotate') {\n this.attachHandlePointerDown(handle.container, (e) => {\n if (this.isPanBlocked()) return;\n e.stopPropagation();\n startRotate(this.gesturesContext, e);\n });\n } else if (typeof handler === 'function') {\n this.attachHandlePointerDown(handle.container, (e) => {\n if (this.isPanBlocked()) return;\n e.stopPropagation();\n handler({ selectedIds: [...this.selectedIds] });\n });\n }\n }\n }\n\n private attachHandlePointerDown(\n container: {\n on(event: 'pointerdown', handler: (e: FederatedPointerEvent) => void): void;\n off(event: 'pointerdown', handler: (e: FederatedPointerEvent) => void): void;\n },\n handler: (e: FederatedPointerEvent) => void,\n ): void {\n container.on('pointerdown', handler);\n this.cleanupFns.push(() => container.off('pointerdown', handler));\n }\n\n private isPanBlocked(): boolean {\n const camera = this.getCameraManager();\n return Boolean(camera?.isPanModifierActive() || camera?.isPanning());\n }\n\n setOverlayVisible(visible: boolean): void {\n if (visible) this.boundingBox.show();\n else this.boundingBox.hide();\n }\n\n select(idOrIds: string | readonly string[] | null): void {\n if (idOrIds === null) {\n setSelection(this.getSelectionStateContext(), null);\n return;\n }\n\n const ids = Array.isArray(idOrIds) ? idOrIds : [idOrIds];\n const nextSelectedIds: string[] = [];\n\n for (const id of ids) {\n if (this.ctx.registry.get(id)) {\n nextSelectedIds.push(id);\n }\n }\n\n setSelection(this.getSelectionStateContext(), nextSelectedIds);\n }\n\n async duplicate(): Promise<void> {\n await duplicateSelection(this.actionsContext);\n }\n\n getSelectedIds(): readonly string[] {\n return [...this.selectedIds];\n }\n\n getSelectedOptions(): BaseOptions[] {\n return getSelectedOptions(this.getSelectionStateContext());\n }\n\n private getHistoryManager(): HistoryManager | undefined {\n return this.ctx.getExtension<HistoryManager>('history');\n }\n\n private getCameraManager(): CameraManager | undefined {\n return this.ctx.getExtension<CameraManager>('camera');\n }\n\n private getSnapManager(): SnapManager | undefined {\n return this.ctx.getExtension<SnapManager>('snap');\n }\n\n private recordGroupUpdate(\n elements: readonly BaseElement<BaseOptions>[],\n beforeStates: Map<string, StartState | BaseOptions>,\n kind: 'move' | 'resize' | 'rotate',\n ): void {\n recordGroupUpdate(this.actionsContext, elements, beforeStates, kind);\n }\n\n destroy(): void {\n for (const id of this.selectableBindings.keys()) {\n detachSelectableElement(this.getSelectionBindingsContext(), id);\n }\n this.shortcuts?.destroy();\n for (const cleanup of this.cleanupFns) cleanup();\n this.cleanupFns = [];\n this.boundingBox?.destroy();\n }\n\n private createContexts(): void {\n this.selectionStateContext = {\n ctx: this.ctx,\n boundingBox: this.boundingBox,\n selectedIds: this.selectedIds,\n isPanBlocked: () => this.isPanBlocked(),\n };\n\n this.gesturesContext = {\n ctx: this.ctx,\n boundingBox: this.boundingBox,\n getCameraManager: () => this.getCameraManager(),\n getSnapManager: () => this.getSnapManager(),\n getSelectedIds: () => this.getSelectedIds(),\n getSelectedElements: () => getSelectedElements(this.selectionStateContext),\n updateBoundingBox: () => updateBoundingBox(this.selectionStateContext),\n recordGroupUpdate: (elements, beforeStates, kind) =>\n this.recordGroupUpdate(elements, beforeStates, kind),\n };\n\n this.selectionBindingsContext = {\n ctx: this.ctx,\n boundingBox: this.boundingBox,\n selectedIds: this.selectedIds,\n selectableBindings: this.selectableBindings,\n isPanBlocked: () => this.isPanBlocked(),\n startElementDrag: (e) => startElementDrag(this.gesturesContext, e),\n };\n\n this.actionsContext = {\n ctx: this.ctx,\n getHistoryManager: () => this.getHistoryManager(),\n getSelectedIds: () => this.getSelectedIds(),\n getSelectedElements: () => getSelectedElements(this.selectionStateContext),\n getSelectedOptions: () => getSelectedOptions(this.selectionStateContext),\n setSelection: (ids) => setSelection(this.selectionStateContext, ids),\n getClipboard: () => this.clipboard,\n setClipboard: (items) => {\n this.clipboard = items;\n },\n };\n }\n\n private getSelectionStateContext(): InteractionSelectionStateContext {\n return this.selectionStateContext;\n }\n\n private getSelectionBindingsContext(): InteractionSelectionBindingsContext {\n return this.selectionBindingsContext;\n }\n}\n","import type { EditorContext } from '@/core/EditorContext';\nimport type { Command } from '@/extensions/history/commands/Command';\n\ntype LayerSnapshot = {\n id: string;\n zIndex: number;\n};\n\nexport class LayerCommand implements Command {\n readonly description = 'Change layer order';\n readonly kind = 'zOrder' as const;\n\n constructor(\n private readonly ctx: EditorContext,\n private readonly before: readonly LayerSnapshot[],\n private readonly after: readonly LayerSnapshot[],\n ) {}\n\n async execute(): Promise<void> {\n this.apply(this.after);\n }\n\n async undo(): Promise<void> {\n this.apply(this.before);\n }\n\n private apply(snapshots: readonly LayerSnapshot[]): void {\n for (const snapshot of snapshots) {\n const el = this.ctx.registry.get(snapshot.id);\n if (!el) continue;\n el.setZIndex(snapshot.zIndex);\n this.ctx.events.emit('element:updated', snapshot.id);\n }\n\n this.ctx.events.emit('layer:changed');\n }\n}\n","import type { LayerManager } from '@/extensions/layering/LayerManager';\nimport type { LayeringAccessor } from '@/extensions/layering/types';\n\nexport function createLayeringAccessor(\n getManager: () => LayerManager | undefined,\n): LayeringAccessor {\n const call = <Args extends unknown[]>(invoke: (manager: LayerManager, ...args: Args) => void) => {\n return (...args: Args): void => {\n const manager = getManager();\n if (!manager) return;\n invoke(manager, ...args);\n };\n };\n\n return {\n bringToFront: call((manager, idOrIds) => manager.bringToFront(idOrIds)),\n sendToBack: call((manager, idOrIds) => manager.sendToBack(idOrIds)),\n bringForward: call((manager, id) => manager.bringForward(id)),\n sendBackward: call((manager, id) => manager.sendBackward(id)),\n normalizeZIndex: call((manager) => manager.normalizeZIndex()),\n };\n}\n","import type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport type { EditorContext } from '@/core/EditorContext';\nimport type { Extension } from '@/extensions/Extension';\nimport { LayerCommand } from '@/extensions/history/commands/LayerCommand';\nimport type { HistoryManager } from '@/extensions/history/HistoryManager';\nimport { createLayeringAccessor } from '@/extensions/layering/accessor';\n\nexport class LayerManager implements Extension {\n readonly name = 'layering';\n accessors?: { layer: ReturnType<typeof createLayeringAccessor> };\n private ctx!: EditorContext;\n private cleanupFns: Array<() => void> = [];\n\n init(ctx: EditorContext): void {\n this.ctx = ctx;\n this.accessors = {\n layer: createLayeringAccessor(() => ctx.getExtension<LayerManager>('layering')),\n };\n\n const onElementAdded = (id: string) => {\n const el = ctx.registry.get(id);\n if (el) this.assignTopZIndex(el);\n };\n ctx.events.on('element:added', onElementAdded);\n this.cleanupFns.push(() => ctx.events.off('element:added', onElementAdded));\n }\n\n private assignTopZIndex(el: BaseElement<BaseOptions>): void {\n if ((el.getOptions().zIndex ?? 0) > 0) {\n return;\n }\n const max = this.getMaxZIndex();\n el.setZIndex(max + 1);\n }\n\n private getMaxZIndex(): number {\n let max = 0;\n for (const el of this.ctx.registry.getAll().values()) {\n const z = el.getDisplayObject().zIndex;\n if (z > max) max = z;\n }\n return max;\n }\n\n private getSortedElements(): BaseElement<BaseOptions>[] {\n return [...this.ctx.registry.getAll().values()].sort(\n (a, b) => a.getDisplayObject().zIndex - b.getDisplayObject().zIndex,\n );\n }\n\n private getLayerSnapshots(\n elements = this.getSortedElements(),\n ): Array<{ id: string; zIndex: number }> {\n return elements.map((el) => ({\n id: el.getId(),\n zIndex: el.getDisplayObject().zIndex,\n }));\n }\n\n private emitLayerChange(ids: readonly string[]): void {\n for (const id of ids) {\n this.ctx.events.emit('element:updated', id);\n }\n this.ctx.events.emit('layer:changed');\n }\n\n private getHistoryManager(): HistoryManager | undefined {\n return this.ctx.getExtension<HistoryManager>('history');\n }\n\n private trackLayerChange(mutate: () => void): void {\n const history = this.getHistoryManager();\n const before = this.getLayerSnapshots();\n mutate();\n const after = this.getLayerSnapshots();\n const changedIds = this.getChangedLayerIds(before, after);\n\n if (changedIds.length === 0) {\n return;\n }\n\n if (history?.shouldTrack('zOrder')) {\n history.record(new LayerCommand(this.ctx, before, after));\n }\n this.emitLayerChange(changedIds);\n }\n\n private getChangedLayerIds(\n before: readonly { id: string; zIndex: number }[],\n after: readonly { id: string; zIndex: number }[],\n ): string[] {\n const beforeMap = new Map(before.map((item) => [item.id, item.zIndex]));\n return after.filter((item) => beforeMap.get(item.id) !== item.zIndex).map((item) => item.id);\n }\n\n private normalizeIds(idOrIds: string | readonly string[]): string[] {\n return typeof idOrIds === 'string' ? [idOrIds] : [...idOrIds];\n }\n\n private reorderGroup(idOrIds: string | readonly string[], placement: 'front' | 'back'): void {\n const ids = this.normalizeIds(idOrIds);\n this.trackLayerChange(() => {\n const sorted = this.getSortedElements();\n const moving = sorted.filter((el) => ids.includes(el.getId()));\n const staying = sorted.filter((el) => !ids.includes(el.getId()));\n const ordered = placement === 'front' ? [...staying, ...moving] : [...moving, ...staying];\n\n let z = 1;\n for (const el of ordered) el.setZIndex(z++);\n });\n }\n\n bringToFront(idOrIds: string | readonly string[]): void {\n this.reorderGroup(idOrIds, 'front');\n }\n\n sendToBack(idOrIds: string | readonly string[]): void {\n this.reorderGroup(idOrIds, 'back');\n }\n\n private swapWithNeighbor(id: string, direction: 'forward' | 'backward'): void {\n this.trackLayerChange(() => {\n const sorted = this.getSortedElements();\n const index = sorted.findIndex((el) => el.getId() === id);\n const neighborIndex = direction === 'forward' ? index + 1 : index - 1;\n if (index < 0 || neighborIndex < 0 || neighborIndex >= sorted.length) {\n return;\n }\n\n const current = sorted[index];\n const neighbor = sorted[neighborIndex];\n if (!current || !neighbor) return;\n\n const currentZ = current.getDisplayObject().zIndex;\n current.setZIndex(neighbor.getDisplayObject().zIndex);\n neighbor.setZIndex(currentZ);\n });\n }\n\n bringForward(id: string): void {\n this.swapWithNeighbor(id, 'forward');\n }\n\n sendBackward(id: string): void {\n this.swapWithNeighbor(id, 'backward');\n }\n\n normalizeZIndex(): void {\n this.trackLayerChange(() => {\n const sorted = this.getSortedElements();\n sorted.forEach((el, i) => {\n el.setZIndex(i + 1);\n });\n });\n }\n\n destroy(): void {\n for (const cleanup of this.cleanupFns) cleanup();\n this.cleanupFns = [];\n }\n}\n","import type { PerformanceManager } from '@/extensions/performance/PerformanceManager';\nimport type { PerformanceAccessor } from '@/extensions/performance/types';\n\nexport function createPerformanceAccessor(\n getManager: () => PerformanceManager | undefined,\n): PerformanceAccessor {\n return {\n markDirty: (id) => getManager()?.dirtyTracker.markDirty(id),\n isDirty: (id) => getManager()?.dirtyTracker.isDirty(id) ?? false,\n flushDirty: () => getManager()?.dirtyTracker.flush() ?? [],\n clearDirty: () => getManager()?.dirtyTracker.clear(),\n\n retainAsset: (url) => getManager()?.cacheManager.retain(url),\n releaseAsset: async (url) => {\n const perf = getManager();\n if (!perf) return;\n await perf.cacheManager.release(url);\n },\n clearAssets: async () => {\n const perf = getManager();\n if (!perf) return;\n await perf.cacheManager.clear();\n },\n };\n}\n","import { Assets } from 'pixi.js';\n\nexport class CacheManager {\n private readonly trackedUrls = new Map<string, number>();\n\n retain(url: string): void {\n this.trackedUrls.set(url, (this.trackedUrls.get(url) ?? 0) + 1);\n }\n\n async release(url: string): Promise<void> {\n const count = this.trackedUrls.get(url);\n if (count === undefined) return;\n\n if (count <= 1) {\n this.trackedUrls.delete(url);\n try {\n await Assets.unload(url);\n } catch {\n // Texture may not have been loaded via Assets\n }\n } else {\n this.trackedUrls.set(url, count - 1);\n }\n }\n\n async clear(): Promise<void> {\n const urls = [...this.trackedUrls.keys()];\n this.trackedUrls.clear();\n await Promise.all(\n urls.map(async (url) => {\n try {\n await Assets.unload(url);\n } catch {\n // Texture may not have been loaded via Assets\n }\n }),\n );\n }\n}\n","export class DirtyTracker {\n private readonly dirtySet = new Set<string>();\n\n markDirty(id: string): void {\n this.dirtySet.add(id);\n }\n\n isDirty(id: string): boolean {\n return this.dirtySet.has(id);\n }\n\n flush(): readonly string[] {\n const ids = [...this.dirtySet];\n this.dirtySet.clear();\n return ids;\n }\n\n clear(): void {\n this.dirtySet.clear();\n }\n}\n","import type { EditorContext } from '@/core/EditorContext';\nimport type { Extension } from '@/extensions/Extension';\nimport { createPerformanceAccessor } from '@/extensions/performance/accessor';\nimport { CacheManager } from '@/extensions/performance/CacheManager';\nimport { DirtyTracker } from '@/extensions/performance/DirtyTracker';\n\nexport class PerformanceManager implements Extension {\n readonly name = 'performance';\n accessors?: { performance: ReturnType<typeof createPerformanceAccessor> };\n readonly dirtyTracker = new DirtyTracker();\n readonly cacheManager = new CacheManager();\n private cleanupFns: Array<() => void> = [];\n\n init(ctx: EditorContext): void {\n this.accessors = {\n performance: createPerformanceAccessor(() =>\n ctx.getExtension<PerformanceManager>('performance'),\n ),\n };\n\n const onElementUpdated = (id: string) => {\n this.dirtyTracker.markDirty(id);\n };\n ctx.events.on('element:updated', onElementUpdated);\n this.cleanupFns.push(() => ctx.events.off('element:updated', onElementUpdated));\n }\n\n destroy(): void {\n for (const cleanup of this.cleanupFns) cleanup();\n this.cleanupFns = [];\n this.dirtyTracker.clear();\n void this.cacheManager.clear();\n }\n}\n","import type { SerializationManager } from '@/extensions/serialization/SerializationManager';\nimport type { SerializerAccessor } from '@/extensions/serialization/types';\n\nexport function createSerializerAccessor(\n getManager: () => SerializationManager | undefined,\n): SerializerAccessor {\n return {\n serialize: () => getManager()?.serializeAll() ?? [],\n append: async (data) => {\n const manager = getManager();\n if (!manager) return;\n await manager.appendAll(data);\n },\n replace: async (data) => {\n const manager = getManager();\n if (!manager) return;\n await manager.replaceAll(data);\n },\n\n serializeElement: (element) => {\n const manager = getManager();\n if (!manager) {\n throw new Error('Serialization extension is unavailable.');\n }\n return manager.serialize(element);\n },\n registerAdapter: (adapter) => getManager()?.registerAdapter(adapter),\n };\n}\n","import type { BaseOptions } from '@/core/BaseOptions';\nimport type { EditorContext } from '@/core/EditorContext';\nimport type { SerializationAdapter } from '@/extensions/serialization/types';\n\nexport function createDefaultSerializationAdapters(ctx: EditorContext): SerializationAdapter[] {\n const registryBackedTypes = [\n 'text',\n 'image',\n 'svg',\n 'shape:rectangle',\n 'shape:circle',\n 'shape:star',\n 'shape:line',\n ] as const;\n\n const registryAdapters = registryBackedTypes.map(\n (type): SerializationAdapter<BaseOptions> => ({\n type,\n serialize: (element) => element.getOptions(),\n deserialize: (data) => ctx.registry.createFromOptions(data),\n }),\n );\n\n return registryAdapters;\n}\n","import type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport type { EditorContext } from '@/core/EditorContext';\nimport type { Extension } from '@/extensions/Extension';\nimport { createSerializerAccessor } from '@/extensions/serialization/accessor';\nimport { createDefaultSerializationAdapters } from '@/extensions/serialization/defaultAdapters';\nimport type { SerializationAdapter, SerializedElement } from '@/extensions/serialization/types';\n\ntype RegisteredSerializationAdapter = {\n readonly type: string;\n serialize(element: BaseElement<BaseOptions>): SerializedElement;\n deserialize(data: SerializedElement): BaseElement<BaseOptions>;\n};\n\nexport class SerializationManager implements Extension {\n readonly name = 'serialization';\n accessors?: { serializer: ReturnType<typeof createSerializerAccessor> };\n private ctx!: EditorContext;\n private readonly adapters = new Map<string, RegisteredSerializationAdapter>();\n\n init(ctx: EditorContext): void {\n this.ctx = ctx;\n this.registerDefaultAdapters();\n this.accessors = {\n serializer: createSerializerAccessor(() =>\n ctx.getExtension<SerializationManager>('serialization'),\n ),\n };\n }\n\n private registerDefaultAdapters(): void {\n for (const adapter of createDefaultSerializationAdapters(this.ctx)) {\n this.registerAdapter(adapter);\n }\n }\n\n registerAdapter<T extends BaseOptions>(adapter: SerializationAdapter<T>): void {\n if (this.adapters.has(adapter.type)) {\n throw new Error(`A serialization adapter is already registered for \"${adapter.type}\".`);\n }\n\n this.adapters.set(adapter.type, {\n type: adapter.type,\n serialize: (element) => adapter.serialize(element as BaseElement<T>) as SerializedElement,\n deserialize: (data) => adapter.deserialize(data as T),\n });\n }\n\n serialize(element: BaseElement<BaseOptions>): SerializedElement {\n const adapter = this.adapters.get(element.getType());\n if (!adapter) {\n throw new Error(`No serialization adapter registered for \"${element.getType()}\".`);\n }\n return adapter.serialize(element) as unknown as SerializedElement;\n }\n\n serializeAll(): SerializedElement[] {\n return [...this.ctx.registry.getAll().values()].map((el) => this.serialize(el));\n }\n\n async appendAll(data: SerializedElement[]): Promise<void> {\n const elements = data.map((opts, index) => this.deserializeElement(opts, index));\n for (const element of elements) {\n await this.ctx.addElement(element);\n }\n }\n\n async replaceAll(data: SerializedElement[]): Promise<void> {\n const previousScene = this.serializeAll();\n this.ctx.clearElements();\n try {\n await this.appendAll(data);\n } catch (error) {\n try {\n this.ctx.clearElements();\n await this.appendAll(previousScene);\n } catch (restoreError) {\n const importMessage = (error instanceof Error ? error.message : String(error)).replace(\n /\\.+$/,\n '',\n );\n const restoreMessage = (\n restoreError instanceof Error ? restoreError.message : String(restoreError)\n ).replace(/\\.+$/, '');\n throw new Error(\n `Failed to replace scene and restore the previous scene. Import error: ${importMessage}. Restore error: ${restoreMessage}.`,\n );\n }\n throw error;\n }\n }\n\n private deserializeElement(opts: SerializedElement, index: number): BaseElement<BaseOptions> {\n const type = opts.type;\n if (!type) {\n throw new Error(`Serialized element at index ${index} is missing \"type\".`);\n }\n const adapter = this.adapters.get(type);\n if (!adapter) {\n throw new Error(`No serialization adapter registered for \"${type}\".`);\n }\n return adapter.deserialize(opts);\n }\n}\n","export interface SnapConfig {\n grid?: boolean;\n objects?: boolean;\n edges?: boolean;\n guides?: boolean;\n threshold?: number;\n lineColor?: number | string;\n lineAlpha?: number;\n lineWidth?: number;\n}\n\nexport interface Guide {\n id: string;\n orientation: 'vertical' | 'horizontal';\n position: number;\n}\n\nexport interface SnapTarget {\n type: 'grid' | 'object' | 'edge' | 'guide';\n reference?: string;\n}\n\nexport interface SnapResult {\n x: number;\n y: number;\n snapped: boolean;\n xSnapped: boolean;\n ySnapped: boolean;\n lineX?: number;\n lineY?: number;\n xTarget?: SnapTarget;\n yTarget?: SnapTarget;\n}\n\nexport type SnapAnchor = 'min' | 'center' | 'max';\n\nexport type InternalSnapResult = SnapResult & {\n xAnchor?: SnapAnchor;\n yAnchor?: SnapAnchor;\n};\n\nexport interface ResolveOptions {\n width?: number;\n height?: number;\n exclude?: string[];\n}\n\nexport interface SnapState {\n config: Required<SnapConfig>;\n guides: Guide[];\n}\n\nexport type SnapAccessor = {\n resolve(x: number, y: number, opts?: ResolveOptions): SnapResult;\n showLines(result: SnapResult): void;\n hideLines(): void;\n addGuide(guide: Guide): void;\n removeGuide(id: string): void;\n clearGuides(): void;\n configure(patch: Partial<SnapConfig>): void;\n getState(): SnapState;\n};\n\nexport interface SnapLineStyle {\n color: number | string;\n alpha: number;\n width: number;\n}\n\nexport const DEFAULT_SNAP_CONFIG: Required<SnapConfig> = {\n grid: true,\n objects: true,\n edges: true,\n guides: true,\n threshold: 8,\n lineColor: 0x1a73e8,\n lineAlpha: 0.75,\n lineWidth: 1,\n};\n","import type { SnapManager } from '@/extensions/snap/SnapManager';\nimport { DEFAULT_SNAP_CONFIG, type SnapAccessor, type SnapState } from '@/extensions/snap/types';\n\nconst EMPTY_STATE: SnapState = {\n config: { ...DEFAULT_SNAP_CONFIG },\n guides: [],\n};\n\nexport function createSnapAccessor(getManager: () => SnapManager | undefined): SnapAccessor {\n return {\n resolve: (x, y, opts) => {\n const snap = getManager();\n if (!snap) {\n return {\n x,\n y,\n snapped: false,\n xSnapped: false,\n ySnapped: false,\n };\n }\n const result = snap.resolve(x, y, opts);\n return {\n x: result.x,\n y: result.y,\n snapped: result.snapped,\n xSnapped: result.xSnapped,\n ySnapped: result.ySnapped,\n lineX: result.lineX,\n lineY: result.lineY,\n xTarget: result.xTarget,\n yTarget: result.yTarget,\n };\n },\n showLines: (result) => getManager()?.showLines(result),\n hideLines: () => getManager()?.hideLines(),\n\n addGuide: (guide) => getManager()?.addGuide(guide),\n removeGuide: (id) => getManager()?.removeGuide(id),\n clearGuides: () => getManager()?.clearGuides(),\n\n configure: (patch) => getManager()?.configure(patch),\n getState: () => getManager()?.getState() ?? EMPTY_STATE,\n };\n}\n","import { Container, Graphics } from 'pixi.js';\nimport type { SnapLineStyle } from '@/extensions/snap/types';\n\nconst DEFAULT_LINE_STYLE: SnapLineStyle = {\n color: 0x1a73e8,\n alpha: 0.75,\n width: 1,\n};\n\nexport class SnapLines {\n private readonly container: Container;\n private readonly vLine: Graphics;\n private readonly hLine: Graphics;\n private style: SnapLineStyle;\n\n constructor(stage: Container, style: Partial<SnapLineStyle> = {}) {\n this.vLine = new Graphics();\n this.hLine = new Graphics();\n this.container = new Container();\n this.style = { ...DEFAULT_LINE_STYLE, ...style };\n this.container.addChild(this.vLine, this.hLine);\n this.container.visible = false;\n this.container.eventMode = 'none';\n // Sit just below the bounding box overlay\n this.container.zIndex = Number.MAX_SAFE_INTEGER - 1;\n stage.addChild(this.container);\n }\n\n setStyle(style: Partial<SnapLineStyle>): void {\n this.style = { ...this.style, ...style };\n }\n\n update(\n lineX: number | undefined,\n lineY: number | undefined,\n width: number,\n height: number,\n offsetX = 0,\n offsetY = 0,\n ): void {\n this.vLine.clear();\n this.hLine.clear();\n\n if (lineX !== undefined) {\n this.vLine\n .moveTo(lineX, offsetY)\n .lineTo(lineX, offsetY + height)\n .stroke({\n color: this.style.color,\n alpha: this.style.alpha,\n width: this.style.width,\n });\n }\n\n if (lineY !== undefined) {\n this.hLine\n .moveTo(offsetX, lineY)\n .lineTo(offsetX + width, lineY)\n .stroke({\n color: this.style.color,\n alpha: this.style.alpha,\n width: this.style.width,\n });\n }\n\n this.container.visible = lineX !== undefined || lineY !== undefined;\n }\n\n hide(): void {\n this.container.visible = false;\n }\n\n destroy(): void {\n this.container.destroy({ children: true });\n }\n}\n","import type { Bounds } from 'pixi.js';\nimport type { ElementRegistry } from '@/core/ElementRegistry';\nimport type {\n Guide,\n InternalSnapResult,\n ResolveOptions,\n SnapAnchor,\n SnapConfig,\n SnapTarget,\n} from '@/extensions/snap/types';\n\ninterface AxisSnap {\n value: number;\n linePos: number;\n target: SnapTarget;\n anchor: SnapAnchor;\n}\n\ninterface AxisSnapCandidate {\n snap: AxisSnap | null;\n distance: number;\n}\n\nexport function resolveSnap(\n config: Required<SnapConfig>,\n guides: ReadonlyMap<string, Guide>,\n registry: ElementRegistry,\n getGridCellSize: () => number,\n getElementBounds: (id: string) => Bounds | null,\n x: number,\n y: number,\n opts: ResolveOptions = {},\n): InternalSnapResult {\n const { width = 0, height = 0, exclude = [] } = opts;\n const { threshold } = config;\n\n const xMid = x + width / 2;\n const xMax = x + width;\n const yMid = y + height / 2;\n const yMax = y + height;\n\n let snapX: AxisSnap | undefined;\n let snapY: AxisSnap | undefined;\n\n if (config.guides && guides.size > 0) {\n snapX = resolveGuideAxis(\n guides,\n 'vertical',\n { value: x, anchor: 'min' },\n { value: xMid, anchor: 'center' },\n { value: xMax, anchor: 'max' },\n x,\n threshold,\n );\n snapY = resolveGuideAxis(\n guides,\n 'horizontal',\n { value: y, anchor: 'min' },\n { value: yMid, anchor: 'center' },\n { value: yMax, anchor: 'max' },\n y,\n threshold,\n );\n }\n\n if (config.objects || config.edges) {\n const excludeSet = new Set(exclude);\n for (const [id] of registry.getAll()) {\n if (excludeSet.has(id)) continue;\n const bounds = getElementBounds(id);\n if (!bounds) continue;\n\n if (!snapX) {\n const hit = resolveObjectAxis(\n config,\n { value: x, anchor: 'min' },\n { value: xMid, anchor: 'center' },\n { value: xMax, anchor: 'max' },\n x,\n bounds.x,\n bounds.x + bounds.width / 2,\n bounds.x + bounds.width,\n threshold,\n id,\n );\n if (hit) snapX = hit;\n }\n\n if (!snapY) {\n const hit = resolveObjectAxis(\n config,\n { value: y, anchor: 'min' },\n { value: yMid, anchor: 'center' },\n { value: yMax, anchor: 'max' },\n y,\n bounds.y,\n bounds.y + bounds.height / 2,\n bounds.y + bounds.height,\n threshold,\n id,\n );\n if (hit) snapY = hit;\n }\n\n if (snapX && snapY) break;\n }\n }\n\n if (config.grid) {\n const cell = getGridCellSize();\n if (!snapX) {\n snapX = resolveGridAxis(\n cell,\n threshold,\n { value: x, anchor: 'min' },\n { value: xMid, anchor: 'center' },\n { value: xMax, anchor: 'max' },\n x,\n );\n }\n if (!snapY) {\n snapY = resolveGridAxis(\n cell,\n threshold,\n { value: y, anchor: 'min' },\n { value: yMid, anchor: 'center' },\n { value: yMax, anchor: 'max' },\n y,\n );\n }\n }\n\n return {\n x: snapX?.value ?? x,\n y: snapY?.value ?? y,\n snapped: !!(snapX || snapY),\n xSnapped: !!snapX,\n ySnapped: !!snapY,\n lineX: snapX?.linePos,\n lineY: snapY?.linePos,\n xTarget: snapX?.target,\n yTarget: snapY?.target,\n xAnchor: snapX?.anchor,\n yAnchor: snapY?.anchor,\n };\n}\n\nfunction resolveGridAxis(\n cellSize: number,\n threshold: number,\n anchor1: { value: number; anchor: SnapAnchor },\n anchor2: { value: number; anchor: SnapAnchor },\n anchor3: { value: number; anchor: SnapAnchor },\n base: number,\n): AxisSnap | undefined {\n let best: AxisSnapCandidate = { snap: null, distance: Infinity };\n\n best = updateGridAxisSnap(best, cellSize, threshold, anchor1, base);\n best = updateGridAxisSnap(best, cellSize, threshold, anchor2, base);\n best = updateGridAxisSnap(best, cellSize, threshold, anchor3, base);\n\n return best.snap ?? undefined;\n}\n\nfunction resolveGuideAxis(\n guides: ReadonlyMap<string, Guide>,\n orientation: Guide['orientation'],\n anchor1: { value: number; anchor: SnapAnchor },\n anchor2: { value: number; anchor: SnapAnchor },\n anchor3: { value: number; anchor: SnapAnchor },\n base: number,\n threshold: number,\n): AxisSnap | undefined {\n let best: AxisSnapCandidate = { snap: null, distance: Infinity };\n\n for (const guide of guides.values()) {\n if (guide.orientation !== orientation) continue;\n best = updateBestAxisSnap(best, guide.position, threshold, anchor1, guide.id, base, 'guide');\n best = updateBestAxisSnap(best, guide.position, threshold, anchor2, guide.id, base, 'guide');\n best = updateBestAxisSnap(best, guide.position, threshold, anchor3, guide.id, base, 'guide');\n }\n\n return best.snap ?? undefined;\n}\n\nfunction resolveObjectAxis(\n config: Required<SnapConfig>,\n anchor1: { value: number; anchor: SnapAnchor },\n anchor2: { value: number; anchor: SnapAnchor },\n anchor3: { value: number; anchor: SnapAnchor },\n base: number,\n edge1: number,\n center: number,\n edge2: number,\n threshold: number,\n elementId: string,\n): AxisSnap | null {\n let best: AxisSnapCandidate = { snap: null, distance: Infinity };\n\n if (config.edges) {\n best = updateBestAxisSnap(best, edge1, threshold, anchor1, elementId, base, 'edge');\n best = updateBestAxisSnap(best, edge1, threshold, anchor2, elementId, base, 'edge');\n best = updateBestAxisSnap(best, edge1, threshold, anchor3, elementId, base, 'edge');\n best = updateBestAxisSnap(best, edge2, threshold, anchor1, elementId, base, 'edge');\n best = updateBestAxisSnap(best, edge2, threshold, anchor2, elementId, base, 'edge');\n best = updateBestAxisSnap(best, edge2, threshold, anchor3, elementId, base, 'edge');\n }\n\n if (config.objects) {\n best = updateBestAxisSnap(best, center, threshold, anchor1, elementId, base, 'object');\n best = updateBestAxisSnap(best, center, threshold, anchor2, elementId, base, 'object');\n best = updateBestAxisSnap(best, center, threshold, anchor3, elementId, base, 'object');\n }\n\n return best.snap;\n}\n\nfunction updateBestAxisSnap(\n current: AxisSnapCandidate,\n targetPos: number,\n threshold: number,\n source: { value: number; anchor: SnapAnchor },\n reference: string,\n base: number,\n type: SnapTarget['type'],\n): AxisSnapCandidate {\n const distance = Math.abs(source.value - targetPos);\n if (distance > threshold || distance >= current.distance) {\n return current;\n }\n\n return {\n distance,\n snap: {\n value: base + (targetPos - source.value),\n linePos: targetPos,\n target: { type, reference },\n anchor: source.anchor,\n },\n };\n}\n\nfunction updateGridAxisSnap(\n current: AxisSnapCandidate,\n cellSize: number,\n threshold: number,\n source: { value: number; anchor: SnapAnchor },\n base: number,\n): AxisSnapCandidate {\n const gridPos = Math.round(source.value / cellSize) * cellSize;\n const distance = Math.abs(source.value - gridPos);\n if (distance > threshold || distance >= current.distance) {\n return current;\n }\n\n return {\n distance,\n snap: {\n value: base + (gridPos - source.value),\n linePos: gridPos,\n target: { type: 'grid' },\n anchor: source.anchor,\n },\n };\n}\n","import { getCanvasWorldBounds, getElementWorldBounds } from '@/core/canvasBounds';\nimport type { EditorContext } from '@/core/EditorContext';\nimport type { CameraManager } from '@/extensions/camera/CameraManager';\nimport type { Extension } from '@/extensions/Extension';\nimport type { GridManager } from '@/extensions/grid/GridManager';\nimport { createSnapAccessor } from '@/extensions/snap/accessor';\nimport { SnapLines } from '@/extensions/snap/SnapLines';\nimport { resolveSnap } from '@/extensions/snap/SnapResolver';\nimport {\n DEFAULT_SNAP_CONFIG,\n type Guide,\n type InternalSnapResult,\n type ResolveOptions,\n type SnapConfig,\n type SnapResult,\n type SnapState,\n} from '@/extensions/snap/types';\n\nexport class SnapManager implements Extension {\n readonly name = 'snap';\n accessors?: { snap: ReturnType<typeof createSnapAccessor> };\n private cfg: Required<SnapConfig>;\n private ctx!: EditorContext;\n private guides = new Map<string, Guide>();\n private lines?: SnapLines;\n\n constructor(config: SnapConfig = {}) {\n this.cfg = { ...DEFAULT_SNAP_CONFIG, ...config };\n }\n\n init(ctx: EditorContext): void {\n this.ctx = ctx;\n const pixi = ctx.app.getPixiApp();\n this.lines = new SnapLines(pixi.stage, {\n color: this.cfg.lineColor,\n alpha: this.cfg.lineAlpha,\n width: this.cfg.lineWidth,\n });\n this.accessors = {\n snap: createSnapAccessor(() => ctx.getExtension<SnapManager>('snap')),\n };\n }\n\n // ─── Main API ─────────────────────────────────────────────────────────────\n\n resolve(x: number, y: number, opts: ResolveOptions = {}): InternalSnapResult {\n return resolveSnap(\n this.cfg,\n this.guides,\n this.ctx.registry,\n () => this.getGridCellSize(),\n (id) => {\n const element = this.ctx.registry.get(id);\n return element ? getElementWorldBounds(this.ctx, element) : null;\n },\n x,\n y,\n opts,\n );\n }\n\n showLines(result: SnapResult): void {\n const visibleBounds = getCanvasWorldBounds(this.ctx);\n const { lineX, lineY } = this.toScreenLinePositions(result.lineX, result.lineY);\n const topLeft = this.toScreenPoint(visibleBounds.x, visibleBounds.y);\n const bottomRight = this.toScreenPoint(\n visibleBounds.x + visibleBounds.width,\n visibleBounds.y + visibleBounds.height,\n );\n this.lines?.update(\n lineX,\n lineY,\n bottomRight.x - topLeft.x,\n bottomRight.y - topLeft.y,\n topLeft.x,\n topLeft.y,\n );\n }\n\n hideLines(): void {\n this.lines?.hide();\n }\n\n // ─── Guide management ─────────────────────────────────────────────────────\n\n addGuide(guide: Guide): void {\n this.guides.set(guide.id, guide);\n }\n\n removeGuide(id: string): void {\n this.guides.delete(id);\n }\n\n clearGuides(): void {\n this.guides.clear();\n }\n\n // ─── Runtime config ───────────────────────────────────────────────────────\n\n configure(patch: Partial<SnapConfig>): void {\n Object.assign(this.cfg, patch);\n this.lines?.setStyle({\n color: this.cfg.lineColor,\n alpha: this.cfg.lineAlpha,\n width: this.cfg.lineWidth,\n });\n }\n\n getState(): SnapState {\n return {\n config: { ...this.cfg },\n guides: [...this.guides.values()].map((guide) => ({ ...guide })),\n };\n }\n\n private getGridCellSize(): number {\n const grid = this.ctx.getExtension<GridManager>('grid');\n return grid?.getState().cellSize ?? 20;\n }\n\n private toScreenLinePositions(\n lineX: number | undefined,\n lineY: number | undefined,\n ): { lineX: number | undefined; lineY: number | undefined } {\n return {\n lineX: lineX === undefined ? undefined : this.toScreenPoint(lineX, 0).x,\n lineY: lineY === undefined ? undefined : this.toScreenPoint(0, lineY).y,\n };\n }\n\n private toScreenPoint(x: number, y: number): { x: number; y: number } {\n const camera = this.ctx.getExtension<CameraManager>('camera');\n if (!camera) {\n return { x, y };\n }\n return camera.worldToScreen(x, y);\n }\n\n destroy(): void {\n this.guides.clear();\n this.lines?.destroy();\n this.lines = undefined;\n }\n}\n","import type { ExtensionsConfig } from '@/canvas/CanvasKitOptions';\nimport { AlignmentManager } from '@/extensions/alignment/AlignmentManager';\nimport { CameraManager } from '@/extensions/camera/CameraManager';\nimport { ContextMenuManager } from '@/extensions/contextMenu/ContextMenuManager';\nimport type { Extension } from '@/extensions/Extension';\nimport { ExportManager } from '@/extensions/export/ExportManager';\nimport { FontManager } from '@/extensions/fonts/FontManager';\nimport { GridManager } from '@/extensions/grid/GridManager';\nimport { HistoryManager } from '@/extensions/history/HistoryManager';\nimport { InteractionManager } from '@/extensions/interaction/InteractionManager';\nimport { LayerManager } from '@/extensions/layering/LayerManager';\nimport { PerformanceManager } from '@/extensions/performance/PerformanceManager';\nimport { SerializationManager } from '@/extensions/serialization/SerializationManager';\nimport { SnapManager } from '@/extensions/snap/SnapManager';\n\nexport function buildExtensionList(config: ExtensionsConfig = {}): Extension[] {\n const extensions: Extension[] = [];\n const isEnabled = (key: keyof ExtensionsConfig): boolean => config[key] !== false;\n const pushIfEnabled = (key: keyof ExtensionsConfig, extension: Extension): void => {\n if (isEnabled(key)) {\n extensions.push(extension);\n }\n };\n const pushIfConfigured = <TConfig>(\n value: boolean | TConfig | undefined,\n create: (config: TConfig | undefined) => Extension,\n ): void => {\n if (value) {\n extensions.push(create(typeof value === 'object' ? value : undefined));\n }\n };\n\n pushIfEnabled('layering', new LayerManager());\n pushIfEnabled('alignment', new AlignmentManager());\n pushIfEnabled(\n 'history',\n new HistoryManager(typeof config.history === 'object' ? config.history : {}),\n );\n pushIfEnabled('serialization', new SerializationManager());\n pushIfEnabled('interaction', new InteractionManager());\n pushIfEnabled('contextMenu', new ContextMenuManager());\n pushIfEnabled('fonts', new FontManager());\n pushIfEnabled('performance', new PerformanceManager());\n pushIfEnabled('export', new ExportManager());\n pushIfConfigured(config.camera, (cameraConfig) => new CameraManager(cameraConfig ?? {}));\n pushIfConfigured(config.grid, (gridConfig) => new GridManager(gridConfig ?? {}));\n pushIfConfigured(config.snap, (snapConfig) => new SnapManager(snapConfig ?? {}));\n\n return extensions;\n}\n","import type { CanvasKitOptions } from '@/canvas/CanvasKitOptions';\nimport type { EditorContext } from '@/core/EditorContext';\nimport { buildExtensionList } from '@/extensions';\n\nexport function loadExtensions(params: {\n ctx: EditorContext;\n options: CanvasKitOptions;\n extensions: Map<string, unknown>;\n target: object;\n}): void {\n const list = buildExtensionList(params.options.extensions ?? {});\n for (const ext of list) {\n ext.init(params.ctx);\n if (ext.accessors) {\n Object.assign(params.target, ext.accessors);\n }\n params.extensions.set(ext.name, ext);\n }\n}\n","import type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\n\nexport type ElementFactory = (options: BaseOptions) => BaseElement<BaseOptions>;\n\nexport class ElementRegistry {\n private readonly elements = new Map<string, BaseElement<BaseOptions>>();\n private readonly factories = new Map<string, ElementFactory>();\n\n registerFactory(type: string, factory: ElementFactory): void {\n this.factories.set(type, factory);\n }\n\n add(element: BaseElement<BaseOptions>): void {\n this.elements.set(element.getId(), element);\n }\n\n get(id: string): BaseElement<BaseOptions> | undefined {\n return this.elements.get(id);\n }\n\n has(id: string): boolean {\n return this.elements.has(id);\n }\n\n remove(id: string): BaseElement<BaseOptions> | undefined {\n const el = this.elements.get(id);\n if (el) this.elements.delete(id);\n return el;\n }\n\n getAll(): ReadonlyMap<string, BaseElement<BaseOptions>> {\n return this.elements;\n }\n\n clear(): void {\n this.elements.clear();\n }\n\n createFromOptions(options: BaseOptions): BaseElement<BaseOptions> {\n const factory = this.factories.get(options.type);\n if (!factory) {\n throw new Error(`No factory registered for element type: \"${options.type}\"`);\n }\n return factory(options);\n }\n}\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","import EventEmitter from 'eventemitter3';\n\nexport type CameraState = { zoom: number; x: number; y: number };\n\nexport type EditorEventMap = {\n 'element:added': [id: string];\n 'element:removed': [id: string];\n 'element:updated': [id: string];\n 'element:selected': [ids: string | readonly string[] | null];\n 'history:changed': [];\n 'layer:changed': [];\n 'camera:changed': [state: CameraState];\n};\n\nexport class EditorEventBus {\n private readonly bus = new EventEmitter();\n\n emit<K extends keyof EditorEventMap>(event: K, ...args: EditorEventMap[K]): void {\n this.bus.emit(event, ...args);\n }\n\n on<K extends keyof EditorEventMap>(\n event: K,\n listener: (...args: EditorEventMap[K]) => void,\n ): void {\n this.bus.on(event, listener as (...args: unknown[]) => void);\n }\n\n off<K extends keyof EditorEventMap>(\n event: K,\n listener: (...args: EditorEventMap[K]) => void,\n ): void {\n this.bus.off(event, listener as (...args: unknown[]) => void);\n }\n}\n","import { Application } from '@/canvas/Application';\nimport {\n addWithHistory,\n clearElements,\n getElementSnapshot,\n removeWithHistory,\n updateWithHistory,\n} from '@/canvas/CanvasKitActions';\nimport type { CanvasKitOptions } from '@/canvas/CanvasKitOptions';\nimport { loadElements } from '@/canvas/ElementLoader';\nimport { loadExtensions } from '@/canvas/ExtensionLoader';\nimport type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport { constrainElementToCanvas, isCanvasConstraintEnabled } from '@/core/canvasBounds';\nimport type { EditorContext } from '@/core/EditorContext';\nimport { ElementRegistry } from '@/core/ElementRegistry';\nimport { EditorEventBus, type EditorEventMap } from '@/core/Events';\nimport { createAlignmentAccessor } from '@/extensions/alignment/accessor';\nimport type { AlignmentAccessor } from '@/extensions/alignment/types';\nimport { createCameraAccessor } from '@/extensions/camera/accessor';\nimport type { CameraAccessor } from '@/extensions/camera/types';\nimport { createContextMenuAccessor } from '@/extensions/contextMenu/accessor';\nimport type { ContextMenuAccessor } from '@/extensions/contextMenu/types';\nimport { createExportAccessor } from '@/extensions/export/accessor';\nimport type { ExportAccessor } from '@/extensions/export/types';\nimport { createFontsAccessor } from '@/extensions/fonts/accessor';\nimport type { FontsAccessor } from '@/extensions/fonts/types';\nimport { createGridAccessor } from '@/extensions/grid/accessor';\nimport type { GridAccessor } from '@/extensions/grid/types';\nimport { createHistoryAccessor } from '@/extensions/history/accessor';\nimport type { HistoryManager } from '@/extensions/history/HistoryManager';\nimport type { HistoryAccessor, HistoryTrack } from '@/extensions/history/types';\nimport { createInteractionAccessor } from '@/extensions/interaction/accessor';\nimport type { InteractionAccessor } from '@/extensions/interaction/types';\nimport { createLayeringAccessor } from '@/extensions/layering/accessor';\nimport type { LayeringAccessor } from '@/extensions/layering/types';\nimport { createPerformanceAccessor } from '@/extensions/performance/accessor';\nimport type { PerformanceAccessor } from '@/extensions/performance/types';\nimport { createSerializerAccessor } from '@/extensions/serialization/accessor';\nimport type { SerializationManager } from '@/extensions/serialization/SerializationManager';\nimport type { SerializedElement, SerializerAccessor } from '@/extensions/serialization/types';\nimport { createSnapAccessor } from '@/extensions/snap/accessor';\nimport type { SnapAccessor } from '@/extensions/snap/types';\n\nexport class CanvasKit {\n public readonly ready: Promise<void>;\n readonly history: HistoryAccessor;\n readonly alignment: AlignmentAccessor;\n readonly layer: LayeringAccessor;\n readonly interaction: InteractionAccessor;\n readonly camera: CameraAccessor;\n readonly contextMenu: ContextMenuAccessor;\n readonly export: ExportAccessor;\n readonly fonts: FontsAccessor;\n readonly grid: GridAccessor;\n readonly performance: PerformanceAccessor;\n readonly serializer: SerializerAccessor;\n readonly snap: SnapAccessor;\n\n private readonly app: Application;\n private readonly registry: ElementRegistry;\n private readonly events: EditorEventBus;\n private readonly editorOptions: CanvasKitOptions;\n private readonly extensions = new Map<string, unknown>();\n private ctx!: EditorContext;\n private destroyed = false;\n\n constructor(container: HTMLElement, options: CanvasKitOptions = {}) {\n this.editorOptions = options;\n this.events = new EditorEventBus();\n this.registry = new ElementRegistry();\n this.history = createHistoryAccessor(() => this.getHistoryManager());\n this.alignment = createAlignmentAccessor(() => this.getExtension('alignment'));\n this.layer = createLayeringAccessor(() => this.getExtension('layering'));\n this.interaction = createInteractionAccessor({\n ctx: {\n getElement: (id) => this.registry.get(id),\n } as EditorContext,\n getManager: () => this.getExtension('interaction'),\n });\n this.camera = createCameraAccessor(() => this.getExtension('camera'));\n this.contextMenu = createContextMenuAccessor(() => this.getExtension('contextMenu'));\n this.export = createExportAccessor(() => this.getExtension('export'));\n this.fonts = createFontsAccessor(() => this.getExtension('fonts'));\n this.grid = createGridAccessor(() => this.getExtension('grid'));\n this.performance = createPerformanceAccessor(() => this.getExtension('performance'));\n this.serializer = createSerializerAccessor(() => this.getSerializationManager());\n this.snap = createSnapAccessor(() => this.getExtension('snap'));\n this.app = new Application(container, {\n width: options.width,\n height: options.height,\n backgroundColor: options.backgroundColor,\n });\n this.ready = this.app.ready.then(async () => {\n if (this.destroyed) return;\n await this.initExtensions();\n });\n }\n\n private async initExtensions(): Promise<void> {\n loadElements(this.registry);\n this.ctx = this.buildContext();\n loadExtensions({\n ctx: this.ctx,\n options: this.editorOptions,\n extensions: this.extensions,\n target: this,\n });\n }\n\n private buildContext(): EditorContext {\n return {\n app: this.app,\n registry: this.registry,\n events: this.events,\n options: this.editorOptions,\n stage: this.app.getPixiApp().stage,\n getElement: (id) => this.registry.get(id),\n addElement: (el) => this.addElement(el),\n removeElement: (id) => this.removeElement(id),\n clearElements: () => clearElements(this.registry, (id) => this.removeElement(id)),\n getExtension: <T>(name: string) => this.extensions.get(name) as T | undefined,\n hasExtension: (name: string) => this.extensions.has(name),\n };\n }\n\n private async addElement(element: BaseElement<BaseOptions>): Promise<void> {\n const existing = this.registry.get(element.getId());\n if (existing) {\n await existing.update(element.getOptions());\n this.events.emit('element:updated', element.getId());\n } else {\n const screen = this.app.getPixiApp().screen;\n element.applyDefaultPosition(screen.width / 2, screen.height / 2);\n await element.init();\n this.registry.add(element);\n this.app.getPixiApp().stage.addChild(element.getDisplayObject());\n this.events.emit('element:added', element.getId());\n }\n }\n\n private removeElement(id: string): void {\n const el = this.registry.remove(id);\n if (el) {\n this.app.getPixiApp().stage.removeChild(el.getDisplayObject());\n el.destroy();\n this.events.emit('element:removed', id);\n }\n }\n\n private async updateElement(\n el: BaseElement<BaseOptions>,\n next: Partial<BaseOptions>,\n ): Promise<void> {\n await el.update(next);\n if (isCanvasConstraintEnabled(this.ctx) && this.shouldConstrainAfterUpdate(next)) {\n await constrainElementToCanvas(this.ctx, el);\n }\n this.events.emit('element:updated', el.getId());\n }\n\n private shouldConstrainAfterUpdate(next: Partial<BaseOptions>): boolean {\n const keys = Object.keys(next);\n return keys.some(\n (key) =>\n key === 'x' ||\n key === 'y' ||\n key === 'scaleX' ||\n key === 'scaleY' ||\n key === 'rotationDeg' ||\n key === 'width' ||\n key === 'height',\n );\n }\n\n private getUpdateKind(\n el: BaseElement<BaseOptions>,\n next: Partial<BaseOptions>,\n ): Exclude<HistoryTrack, 'add' | 'remove'> | null {\n const keys = Object.keys(next) as Array<keyof BaseOptions>;\n\n if (keys.length === 0) {\n return null;\n }\n\n if (keys.every((key) => key === 'x' || key === 'y')) {\n return 'move';\n }\n\n if (keys.every((key) => key === 'rotationDeg')) {\n return 'rotate';\n }\n\n if (keys.every((key) => key === 'zIndex')) {\n return 'zOrder';\n }\n\n if (el.getType() === 'text') {\n return 'text';\n }\n\n if (keys.some((key) => key === 'scaleX' || key === 'scaleY')) {\n return 'resize';\n }\n\n return null;\n }\n\n private getHistoryManager(): HistoryManager | undefined {\n return this.extensions.get('history') as HistoryManager | undefined;\n }\n\n private getSerializationManager(): SerializationManager | undefined {\n return this.extensions.get('serialization') as SerializationManager | undefined;\n }\n\n private getActionsContext() {\n return {\n registry: this.registry,\n getHistoryManager: () => this.getHistoryManager(),\n getSerializationManager: () => this.getSerializationManager(),\n addElement: (element: BaseElement<BaseOptions>) => this.addElement(element),\n removeElement: (id: string) => this.removeElement(id),\n updateElement: (element: BaseElement<BaseOptions>, next: Partial<BaseOptions>) =>\n this.updateElement(element, next),\n getUpdateKind: (element: BaseElement<BaseOptions>, next: Partial<BaseOptions>) =>\n this.getUpdateKind(element, next),\n };\n }\n\n add(element: BaseElement<BaseOptions>): Promise<void> {\n return addWithHistory(this.getActionsContext(), element);\n }\n\n remove(id: string): Promise<void> {\n return removeWithHistory(this.getActionsContext(), id);\n }\n\n update(id: string, next: Partial<BaseOptions>): Promise<void> {\n return updateWithHistory(this.getActionsContext(), id, next);\n }\n\n clear(): void {\n clearElements(this.registry, (id) => this.removeElement(id));\n }\n\n get(id: string, raw?: false): SerializedElement | undefined;\n get(id: string, raw: true): BaseElement<BaseOptions> | undefined;\n get(id: string, raw = false): unknown {\n if (raw) {\n return this.registry.get(id);\n }\n\n return getElementSnapshot(this.registry, () => this.getSerializationManager(), id);\n }\n\n getExtension<T>(name: string): T | undefined {\n return this.extensions.get(name) as T | undefined;\n }\n\n on<K extends keyof EditorEventMap>(\n event: K,\n listener: (...args: EditorEventMap[K]) => void,\n ): this {\n this.events.on(event, listener);\n return this;\n }\n\n off<K extends keyof EditorEventMap>(\n event: K,\n listener: (...args: EditorEventMap[K]) => void,\n ): this {\n this.events.off(event, listener);\n return this;\n }\n\n destroy(): void {\n this.destroyed = true;\n for (const ext of this.extensions.values()) {\n (ext as { destroy?: () => void } | undefined)?.destroy?.();\n }\n this.extensions.clear();\n this.registry.clear();\n this.app.destroy();\n }\n}\n","import type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport type { ElementFactory } from '@/core/ElementRegistry';\nimport type { CircleOptions } from '@/elements/Shape/Circle/CircleOptions';\nimport type { LineOptions } from '@/elements/Shape/Line/LineOptions';\nimport type { RectangleOptions } from '@/elements/Shape/Rectangle/RectangleOptions';\nimport {\n CircleShape,\n createShape,\n getShapeFactories,\n LineShape,\n RectangleShape,\n registerShapeFactory,\n StarShape,\n} from '@/elements/Shape/registry';\nimport type { StarOptions } from '@/elements/Shape/Star/StarOptions';\n\nconst Rectangle = 'shape:rectangle' as const;\nconst Circle = 'shape:circle' as const;\nconst Star = 'shape:star' as const;\nconst Line = 'shape:line' as const;\n\nfunction create(type: typeof Rectangle, options: RectangleOptions): RectangleShape;\nfunction create(type: typeof Circle, options: CircleOptions): CircleShape;\nfunction create(type: typeof Star, options: StarOptions): StarShape;\nfunction create(type: typeof Line, options: LineOptions): LineShape;\nfunction create(type: string, options: BaseOptions): BaseElement<BaseOptions> {\n return createShape({ ...options, type });\n}\n\nfunction register(type: string, factory: ElementFactory): void {\n registerShapeFactory(type, factory);\n}\n\nexport const Shape = {\n Rectangle,\n Circle,\n Star,\n Line,\n create,\n register,\n get factories(): ReadonlyMap<string, ElementFactory> {\n return getShapeFactories();\n },\n} as const;\n\nexport type { CircleOptions, LineOptions, RectangleOptions, StarOptions };\nexport {\n CircleShape,\n getShapeFactories,\n LineShape,\n RectangleShape,\n registerShapeFactory,\n StarShape,\n};\n","import type { BaseElement } from '@/core/BaseElement';\nimport type { BaseOptions } from '@/core/BaseOptions';\nimport { TEXT_FACTORIES } from '@/elements/Text/registry';\nimport { TextElement } from '@/elements/Text/TextElement';\nimport type {\n MeshEffectFunction,\n RegisterMeshEffectOptions,\n TextOptions,\n} from '@/elements/Text/types';\nimport { clearVectorTemplateCache } from '@/elements/Text/Vector/builder';\nimport {\n getMeshEffect,\n listMeshEffects,\n registerMeshEffect,\n} from '@/elements/Text/Vector/registry';\n\nexport namespace Text {\n export const Type = 'text' as const;\n\n export function create(options: TextOptions): TextElement;\n export function create(type: string, options: BaseOptions): BaseElement<BaseOptions>;\n export function create(\n typeOrOptions: string | TextOptions,\n maybeOptions?: BaseOptions,\n ): BaseElement<BaseOptions> {\n const type = typeof typeOrOptions === 'string' ? typeOrOptions : Type;\n const options = typeof typeOrOptions === 'string' ? maybeOptions : typeOrOptions;\n const factory = TEXT_FACTORIES[type];\n\n if (!factory || !options) {\n throw new Error(`Unknown text type: \"${type}\"`);\n }\n\n return factory(options);\n }\n\n export function registerEffect(\n name: string,\n fn: MeshEffectFunction,\n options?: RegisterMeshEffectOptions,\n ): void {\n registerMeshEffect(name, fn, options);\n }\n\n export const getEffect = getMeshEffect;\n export const listEffects = listMeshEffects;\n export const clearEffectCache = clearVectorTemplateCache;\n export const factories = TEXT_FACTORIES;\n}\n\nexport type {\n BaseTextOptions,\n MeshEffectColumn,\n MeshEffectEntry,\n MeshEffectFnContext,\n MeshEffectFunction,\n RegisterMeshEffectOptions,\n TextAlign,\n TextEffect,\n TextEffectOptions,\n TextOptions,\n TextStrokeAlign,\n TextStyleOptions,\n VectorTextRenderOptions,\n VectorTextState,\n} from '@/elements/Text/types';\nexport { TextElement };\n"],"names":["Application","container","config","PixiApplication","canvas","applyHistoryAwareChange","getHistoryManager","fallback","withHistory","history","addWithHistory","ctx","element","existing","kind","removeWithHistory","id","updateWithHistory","next","clearElements","registry","removeElement","getElementSnapshot","getSerializationManager","serializer","BaseElement","options","x","y","zIndex","rotationDeg","scaleX","scaleY","visible","bounds","ImageElement","Container","srcChanged","texture","Assets","Sprite","IMAGE_FACTORIES","opts","create","Image","getStrokeAlignment","strokeAlign","CircleShape","Graphics","g","radius","width","height","fill","fillAlpha","stroke","strokeWidth","strokeAlpha","rx","ry","drawShape","LineShape","RectangleShape","borderRadius","StarShape","points","outerRadius","innerRadius","shapeFactories","registerShapeFactory","type","factory","getShapeFactories","createShape","SVGElement","src","imgUrl","img","w","h","offscreen","Texture","svgString","blob","url","resolve","reject","SVG_FACTORIES","createTextBackground","fontSize","background","backgroundAlpha","backgroundPadding","resolvedPadding","padX","padY","backgroundNode","arialFontUrl","TINF_OK","TINF_DATA_ERROR","Tree","Data","source","dest","sltree","sdtree","length_bits","length_base","dist_bits","dist_base","clcidx","code_tree","lengths","tinf_build_bits_base","bits","base","delta","first","i","sum","tinf_build_fixed_trees","lt","dt","offs","tinf_build_tree","t","lengths2","off","num","tinf_getbit","d","bit","tinf_read_bits","val","tinf_decode_symbol","cur","len","tag","tinf_decode_trees","hlit","hdist","hclen","length","clen","sym","prev","tinf_inflate_block_data","dist","offs2","tinf_inflate_uncompressed_block","invlength","tinf_uncompress","bfinal","btype","res","derive","v0","v1","v2","v3","BoundingBox","x0","y0","x1","y1","x2","y2","p0","p1","p2","p3","b","a","c","b2ac","t1","t2","cp1x","cp1y","cp2x","cp2y","bbox_default","Path","decimalRoundingCache","roundDecimal","float","places","integerPart","decimalPart","roundedDecimalPart2","roundedDecimalPart","optimizeCommands","commands","subpaths","startX","startY","subpath","cmd","firstCommand","secondCommand","previousCommand","nextCommand","createSVGParsingOptions","createSVGOutputOptions","pathData","number","supportedCommands","unsupportedCommands","sign","command","buffer","isUnexpected","parseBuffer2","buffer2","makeRelative","lastCommand","applyCommand","commandType","relative","parsedBuffer","currentX","currentY","offset","prop","token","lastBuffer","flipY","flipYBase","boundingBox","path","pathOrCommands","box","prevX","prevY","layers","l","image","floatToString","v","rounded","packValues","s","commandsCopy","tempPath","svg","newPath","path_default","fail","message","argument","predicate","check_default","LIMIT16","LIMIT32","MIN_16_16","MAX_16_16","decode","encode","sizeOf","constant","fixedValue","value","m","epsilon","nibbles","ii","out","data","numBytes","codePoints","numChars","j","codepoint","eightBitMacEncodings","dataView","dataLength","encoding","table","result","macEncodingTableCache","macEncodingCacheKeys","getMacEncodingTable","e","cacheKey","cachedTable","decodingTable","encodingTable","str","isByteEncodable","encodeVarDeltaRunAsZeroes","deltas","pos","runLength","numDeltas","encodeVarDeltaRunAsBytes","encodeVarDeltaRunAsWords","offsets","encodedOffsets","offSize","offsetEncoder","encodedOffset","keys","k","enc1","enc2","wmm","ops","cachedValue","op","encodingFunction","sizeOfFunction","subtables","subtableOffsets","field","bytes","Table","tableName","fields","optionKeys","ushortList","itemName","list","count","tableList","records","itemCallback","recordList","Coverage","coverageTable","RangeRecord","ScriptList","scriptListTable","scriptRecord","script","defaultLangSys","langSysRecord","i2","langSys","FeatureList","featureListTable","featureRecord","feature","LookupList","lookupListTable","subtableMakers3","lookupTable","subtableCallback","ClassDef","classDefTable","table_default","getByte","getUShort","getShort","getUInt24","getULong","getLong","getFixed","decimal","fraction","getTag","getOffset","getBytes","startOffset","endOffset","bytesToString","typeOffsets","masks","Parser","string","minorBase","major","minor","amount","recordDescription","rec","fieldName","fieldType","tupleCount","axisCount","tuples","tuple","axisIndex","description","struct","valueFormat","valueRecord","valueCount","values","structOffset","relativeOffset","start","subOffsets","subList","format","ranges","langSysTable","lookupTableParsers","lookupType","lookupFlag","useMarkFilteringSet","majorVersion","minorVersion","vsOffset","variationStore","itemStoreOffset","iVStore","variationRegionListOffset","itemVariationDataCount","itemVariationDataOffsets","subtableOffset","regionCount","itemCount","wordDeltaCount","regionIndexes","regionIndexCount","entryFormat","map","mapCount","bitCount","entrySize","n","entry","outerIndex","innerIndex","longFlag","wordCount","wordParser","restParser","flavor","glyphs","glyphCount","offsetSizeIs32Bit","glyphVariationDataArrayOffset","parseOffset","glyphVariations","currentOffset","nextOffset","tableOffset","glyphIndex","tupleVariationCount","hasSharedPoints","dataOffset","headers","sharedPoints","headerData","serializedDataOffset","header","deltasOffset","deltasRelativeOffset","defineDeltas","propertyName","_deltas","_deltasY","parseDeltas","pointsCount","glyph","variationDataSize","tupleIndex","embeddedPeakTuple","intermediateRegion","privatePointNumbers","sharedTupleRecordsIndex","peakTuple","intermediateStartTuple","intermediateEndTuple","countByte1","totalPointCount","countByte2","lastPoint","controlByte","numbersAre16Bit","runCount","pointDelta","expectedCount","zeroData","deltaWords","parse_default","nameTableNames","macLanguages","macLanguageToScript","windowsLanguages","getLanguageCode","platformID","languageID","ltag","utf16","macScriptEncodings","macLanguageEncodings","getEncoding","encodingID","platforms","getPlatform","parseNameTable","name","p","stringOffset","nameID","property","byteLength","language","platformName","text","platform","translations","reverseDict","dict","key","makeNameRecord","findSubArray","needle","haystack","needleLength","limit","loop","addStringToPool","pool","makeNameTable","names","platformNameIds","macLanguageIds","windowsLanguageIds","nameRecords","stringPool","nameIDs","namesWithNumericKeys","nameTableIds","lang","macLanguage","macScript","macEncoding","macName","macNameOffset","winLanguage","winName","winNameOffset","r","getNameByID","allowedStandardIDs","nameKey","name_default","parseCmapTableFormat0","cmap","indexMap","glyphIndexMap","parseCmapTableFormat12or13","groupCount","startCharCode","endCharCode","startGlyphId","parseCmapTableFormat4","segCount","endCountParser","startCountParser","idDeltaParser","idRangeOffsetParser","glyphIndexOffset","endCount","startCount","idDelta","idRangeOffset","parseCmapTableFormat14","varSelectorList","numVarSelectorRecords","varSelector","varSelectorRecord","defaultUVSOffset","nonDefaultUVSOffset","parseCmapTable","format14Parser","format14offset","platformId","encodingId","platform0Encodings","platform3Encodings","addSegment","code","addTerminatorSegment","mergeSegments","segments","merged","curr","makeCmapTable","isPlan0Only","cmapTable","segCountToRemove","endCounts","startCounts","idDeltas","idRangeOffsets","glyphIds","cmap12Groups","segment","cmap12Length","cmap_default","cffStandardStrings","cffISOAdobeStrings","cffIExpertStrings","cffExpertSubsetStrings","cffStandardEncoding","cffExpertEncoding","standardNames","DefaultEncoding","font","CmapEncoding","CffEncoding","charset","charName","GlyphNames","post","gid","addGlyphNamesAll","charCodes","addGlyphNamesToUnicodeMap","addGlyphNames","opt","line","draw_default","parseCpalTable","version","numPaletteEntries","numPalettes","numColorRecords","colorRecordsArrayOffset","colorRecordIndices","colorRecords","makeCpalTable","palette","color","parseCPALColor","bgra","getPaletteColor","index","colorFormat","cpalTable","lookupIndex","formatColor","toHex","rgbToHSL","max","min","hslToRGB","hsla","bgraToRaw","parseColor","targetFormat","returnRaw","isRaw","validFormat","detectedColor","rgbaRegex","matches","hslaRegex","hsl","cpal_default","getPathDefinition","_path","Glyph","unicode","hPoints","xScale","yScale","scale","useGlyph","svgImage","layer","transformedPoints","contours","currentContour","pt","xCoords","yCoords","metrics","drawCircles","scale2","blueCircles","redCircles","xMin","yMin","xMax","yMax","advanceWidth","usePath","glyph_default","defineDependentProperty","externalName","internalName","newValue","GlyphSet","done","unicodeObj","loader","glyphLoader","ttfGlyphLoader","parseGlyph2","position","buildPath2","cffGlyphLoader","parseCFFCharstring2","charstring","glyphset_default","equals","MAX_CALL_DEPTH","calcCFFSubroutineBias","subrs","bias","parseCFFIndex","conversionFn","objects","countLength","objectOffset","offsetSize","parseCFFIndexLowMemory","getCffIndexObject","parseFloatOperand","parser","lookup","n1","n2","parseOperand","b0","b1","b2","b3","b4","entriesToObject","entries","o","parseCFFDict","size","operands","operandsStart","parseBlend","getCFFString","strings","interpretDict","meta","newDict","parseCFFHeader","TOP_DICT_META","TOP_DICT_META_CFF2","PRIVATE_DICT_META","PRIVATE_DICT_META_CFF2","FONT_DICT_META","parseCFFTopDict","parseCFFPrivateDict","parseFontDict","gatherCFF2FontDicts","fdArray","fontDictArray","fontDictData","fontDict","privateSize","privateOffset","privateDict","subrOffset","subrIndex","gatherCFFTopDicts","cffIndex","topDictArray","iTopDict","topDictData","topDict","parseCFFCharset","nGlyphs","isCIDFont","sid","parseCFFEncoding","nCodes","nRanges","nLeft","numberOfBlends","applyPaintType","paintType","parseCFFCharstring","coords","c1x","c1y","c2x","c2y","stack","nStems","haveWidth","open","subrsBias","defaultWidthX","nominalWidthX","vsindex","vstore","blendVector","callDepth","cffTable","variationCoords","fdIndex","fdDict","newContour","parseStems","hasWidthArg","parse","code2","codeIndex","subrCode","jpx","jpy","c3x","c3y","c4x","c4y","acharName","bcharName","ady","adx","acharGlyphIndex","bcharGlyphIndex","acharGlyph","shiftedCommands","deltaSetCount","deltaSetIndex","parseCFFFDSelect","fdArrayCount","fdSelect","iGid","iRange","parseCFFTable","resultTable","nameIndex","topDictIndex","stringIndex","globalSubrIndex","topDictOffset","fdArrayIndexOffset","fdSelectOffset","fdArrayIndex","fdArrayOffset","privateDictOffset","charStringsIndex","charString","encodeString","makeHeader","makeNameIndex","fontNames","makeDict","attrs","makeTopDict","makeTopDictIndex","makeStringIndex","makeGlobalSubrIndex","makeCharsets","glyphNames","glyphName","glyphSID","glyphToOps","dx","dy","_13","_23","dx1","dy1","dx2","dy2","makeCharStringsIndex","makePrivateDict","makeCFFTable","fontScale","topDictOptions","privateAttrs","cff_default","parseHeadTable","head","makeHeadTable","timestamp","createdTimestamp","macStyle","head_default","parseHheaTable","hhea","makeHheaTable","hhea_default","parseHmtxTableAll","numMetrics","numGlyphs","leftSideBearing","parseHmtxTableOnLowMemory","parseHmtxTable","makeHmtxTable","hmtx_default","makeLtagTable","tags","stringPoolOffset","parseLtagTable","tableVersion","numTags","ltag_default","parseMaxpTable","maxp","makeMaxpTable","maxp_default","unicodeRanges","getUnicodeRange","range","parseOS2Table","os2","makeOS2Table","os2_default","parsePostTable","nameLength","makePostTable","italicAngle","underlinePosition","underlineThickness","isFixedPitch","minMemType42","maxMemType42","minMemType1","maxMemType1","post_default","subtableParsers","substFormat","lookupRecordDesc","substCount","extensionLookupType","extensionParser","parseGsubTable","subtableMakers","subtable","sequenceSet","alternateSet","ligatureSet","ligature","sequenceRuleSet","sequenceRule","tableData","record","classSeqRuleSet","classSeqRule","coverage","chainRuleSet","chainRule","makeGsubTable","gsub","gsub_default","parseMetaTable","numDataMaps","makeMetaTable","meta_default","parseColrTable","numBaseGlyphRecords","baseGlyphRecordsOffset","layerRecordsOffset","numLayerRecords","baseGlyphRecords","layerRecords","makeColrTable","colr_default","makeFvarAxis","axis","parseFvarAxis","axisNameID","makeFvarInstance","inst","axes","optionalFields","axisTag","parseFvarInstance","instanceSize","subfamilyNameID","postScriptNameID","makeFvarTable","fvar","parseFvarTable","offsetToData","axisSize","instanceCount","instances","instanceStart","fvar_default","axisRecordStruct","axisValueParsers","parseSTATAxisValue","valueTableFormat","axisValueParser","formatStub","parseSTATTable","tableVersionMajor","tableVersionMinor","designAxisSize","designAxisCount","designAxesOffset","axisValueCount","offsetToAxisValueOffsets","elidedFallbackNameID","valueOffsets","axisValueMakers","returnFields","makeSTATAxisRecord","makeSTATValueTable","axisValueMaker","makeSTATTable","STAT","axisRecord","axisValueOffsets","axisValueTables","axisValueTableOffset","axisValueTable","stat_default","makeAvarAxisValueMap","axisValueMap","makeAvarSegmentMap","returnTable","axisValueMaps","valueMap","makeAvarTable","avar","parseAvarTable","axisSegmentMaps","positionMapCount","fromCoordinate","toCoordinate","avar_default","parseCvarTable","cvt","cvtVariations","makeCvarTable","cvar_default","parseGvarTable","sharedTupleCount","sharedTuples","makeGvarTable","gvar_default","parseGaspTable","gasp","makeGaspTable","gasp_default","parseSvgTable","svgTable","buf","svgDocumentListOffset","numEntries","svgDocMap","startGlyphID","endGlyphID","svgDocOffset","svgDocLength","svgDoc","makeSvgTable","documentRecords","documentBuffers","documentOffsets","nextSvgDocOffset","glyphId","numDocuments","documentsOffset","fieldIndex","namePrefix","svg_default","log2","computeCheckSum","makeTableRecord","checkSum","makeSfntTable","tables","sfnt","highestPowerOf2","recordFields","tableFields","tableLength","tableRecord","r1","r2","metricsForChar","chars","notFoundMetrics","average","vs","fontToSfntTable","xMins","yMins","xMaxs","yMaxs","advanceWidths","leftSideBearings","rightSideBearings","firstCharIndex","lastCharIndex","ulUnicodeRange1","ulUnicodeRange2","ulUnicodeRange3","ulUnicodeRange4","globals","headTable","hheaTable","maxpTable","os2Table","hmtxTable","englishFamilyName","englishStyleName","englishFullName","postScriptName","fontNamesUnicode","fontNamesMacintosh","fontNamesWindows","manufacturer","languageTags","nameTable","ltagTable","postTable","metaTable","optionalTables","optionalTableArgs","sfntTable","checkSumAdjusted","sfnt_default","searchTag","arr","imin","imax","imid","binSearch","searchRange","Layout","layout","hasLatn","scripts","scr","scriptTable","langSysTable2","featIndexes","allFeatures","featureTable","lookupListIndexes","allLookups","end","layout_default","Position","kerningLookups","leftIndex","rightIndex","covIndex","pairSet","pair","class1","class2","position_default","arraysEqual","ar1","ar2","binarySearch","array","low","high","mid","recordValue","binarySearchIndex","binarySearchInsert","compare","isGzip","unGzip","gzip","flg","isize","copyPoint","copyComponent","Substitution","getSubstFormat","defaultSubtable","substitutions","lookupTables","idx","substitute","replacements","alternates","alternateSets","ligatures","ligatureSets","startGlyph","ligSet","lig","substitution","coverageGlyph","ligComponents","ligatureTable","sub","substitution_default","PaletteManager","palettes","cpal","startIndex","paletteColors","color2","colors","_colorCount","newCount","paletteIndex","colorCount","colorIndex","replacementIndex","updatedPalettes","updatedPalette","colrTable","currentIndex","replacementShift","flattenedPalettes","paletteCount","LayerManager","colr","baseGlyph","firstIndex","numLayers","currentLayers","newLayers","glyphID","layerIndex","newBaseGlyphRecord","baseGlyphRecord","originalNumLayers","newNumLayers","layerDiff","sibling","SVGImageManager","svgImageCacheEntry","svgBuf","svgDocCacheEntry","createSvgDocCacheEntry","createSvgImageCacheEntry","error","decodeSvgDocument","makeSvgTemplate","svgTemplatePromise","svgTemplate","svgText","makeSvgImage","decodeSvgDocumentWithDecompressionStream","decodeSvgDocumentWithTinyInflate","documentStart","contentStart","contentEnd","unitsPerEm","viewBoxVal","widthVal","heightVal","div","bbox","baseline","_resolving","parseGlyphCoordinate","flag","previousValue","shortVectorBitMask","sameBitMask","parseGlyph","flags","endPointIndices","numberOfCoordinates","repeatCount","point","px","py","moreComponents","component","transformPoints","transform","newPoints","newPt","getContours","getPath","contourIndex","contour","next2","buildPath","resolving","componentGlyph","firstPt","secondPt","parseGlyfTableAll","loca","parseGlyfTableOnLowMemory","parseGlyfTable","glyf_default","VariationProcessor","padded","normalized","tagValue","glyphPoints","deltaMap","pointIndex","firstPoint","endPoint","firstDelta","curDelta","ref1","ref2","iterable","in1","in2","out1","out2","ref","deltaX","deltaY","tuplePoints","factor","pointsIndex","componentTransform","deltaIndex","transformedComponentPoints","variationData","args","normalizedCoords","tupleCoords","interpolatedPoints","hasBlend","hasPoints","transformedGlyph","blendPath","parameter","mapSize","itemStore","varData","deltaSet","netAdjustment","master","itemIndex","scalar","regionIndex","axisScalar","VariationManager","defaultInstance","acc","defaultCoordinates","defaultInstanceIndex","instance","coordinates","instanceIdOrObject","MAX_INSTRUCTIONS","MAX_CALL_DEPTH2","MAX_LOOP_COUNT","instructionTable","exec","execGlyph","execComponent","Hinting","roundOff","roundToGrid","roundToDoubleGrid","roundToHalfGrid","roundUpToGrid","roundDownToGrid","roundSuper","period","phase","threshold","xUnitVector","o1","o2","rp1","rp2","pv","do1","do2","doa1","doa2","dm1","dm2","rp","org","rpx","rpy","rpdx","rpdy","yUnitVector","UnitVector","pvns","fvs","getUnitVector","HPoint","lastPointOfContour","onCurve","HPZero","defaultState","State","env","prog","ppem","prepState","fpgmState","oCvt","components","gZone","state","cg","gz","cc","pi","gLen","pLen","cp","sp","np","ins","initTZone","tZone","skip","handleElse","ip","nesting","SVTCA","SPVTCA","SFVTCA","SPVTL","p2i","p1i","SFVTL","SPVFS","SFVFS","GPV","GFV","fv","SFVTPV","ISECT","pa0i","pa1i","pb0i","pb1i","z0","z1","pa0","pa1","pb0","pb1","x3","y3","x4","y4","f1","f2","SRP0","SRP1","SRP2","SZP0","SZP1","SZP2","SZPS","SLOOP","RTG","RTHG","SMD","ELSE","JMPR","SCVTCI","DUP","POP","CLEAR","SWAP","DEPTH","LOOPCALL","fn","cip","cprog","CALL","CINDEX","MINDEX","FDEF","ipBegin","MDAP","round","IUP","z2","pp","SHP","rpi","SHC","ci","SHZ","z","SHPIX","IP","rp1i","rp2i","MSIRP","rp0","ALIGNRP","rp0i","RTDG","MIAP","cv","NPUSHB","NPUSHW","WS","store","RS","WCVTP","RCVT","cvte","GC","MD","pi2","pi1","MPPEM","FLIPON","LT","e2","e1","LTEQ","GT","GTEQ","EQ","NEQ","ODD","EVEN","IF","EIF","AND","OR","NOT","DELTAP123","ds","arg","mag","SDB","SDS","ADD","SUB","DIV","MUL","ABS","NEG","FLOOR","CEILING","ROUND","WCVTF","DELTAC123","SROUND","S45ROUND","ROFF","RUTG","RDTG","SCANCTRL","SDPVTL","GETINFO","sel","ROLL","MAX","MIN","SCANTYPE","INSTCTRL","PUSHB","PUSHW","MDRP_MIRP","indirect","setRp0","keepD","ro","md","hintingtt_default","Token","char","ContextRange","contextName","ContextChecker","checkStart","checkEnd","ContextParams","context","Event","eventId","initializeCoreEvents","events","coreEvents","event","requiresContextUpdate","Tokenizer","stateId","RUDs","RUD","hasFAILObject","obj","tokens","silent","isTokenType","replaced","modifierId","condition","modifier","contextParams","conditionParams","canApplyModifier","modifierParams","newStateValue","eventHandler","subsId","eventName","contextStartCheck","contextEndCheck","contextCheckers","endIndex","registeredContexts","contextChecker","openRange","tokenizer_default","isArabicChar","isIsolatedArabicChar","isTashkeelArabicChar","isThaiChar","isLatinChar","isWhiteSpace","FeatureQuery","SubstitutionAction","action","lookupCoverage","singleSubstitutionFormat1","singleSubstitutionFormat2","substituteIndex","lookupCoverageList","coverageList","lookupList","chainingSubstitutionFormat3","lookupsCount","inputLookups","lookaheadOffset","lookaheadContext","lookaheadParams","lookaheadLookups","backtrackContext","backtrackParams","backtrackLookups","contextRulesMatch","lookupRecord","lookupListIndex","subtable2","substitutionType","ligatureSubstitutionFormat1","ligSetIndex","lookaheadItem","contextSubstitutionFormat1","ruleSet","rule","matched","substitutions2","sequenceIndex","contextSubstitutionFormat3","decompositionSubstitutionFormat1","scriptTag","langSysRecords","features","featuresIndexes","query","lookups","substType","supportedScript","supportedFeature","scriptFeatures","featureQuery_default","arabicWordStartCheck","prevChar","arabicWordEndCheck","nextChar","arabicWord_default","arabicSentenceStartCheck","arabicSentenceEndCheck","nextIsWhitespace","arabicCharAhead","arabicSentence_default","singleSubstitutionFormat12","singleSubstitutionFormat22","chainingSubstitutionFormat32","subst","ligatureSubstitutionFormat12","compsCount","SUBSTITUTIONS","applySubstitution","applySubstitution_default","willConnectPrev","charContextParams","backtrack","isolated","tashkeel","willConnectNext","arabicPresentationForms","CONNECT","arabicPresentationForms_default","getContextParams","arabicRequiredLigatures","arabicRequiredLigatures_default","ccmpReplacementStartCheck","ccmpReplacementEndCheck","ccmpReplacement_default","getContextParams2","ccmpReplacementLigatures","ccmpReplacementLigatures_default","latinWordStartCheck","latinWordEndCheck","latinWord_default","getContextParams3","latinLigature","latinLigatures_default","thaiWordStartCheck","thaiWordEndCheck","thaiWord_default","getContextParams4","thaiGlyphComposition","thaiGlyphComposition_default","getContextParams5","thaiLigatures","thaiLigatures_default","getContextParams6","thaiRequiredLigatures","thaiRequiredLigatures_default","isVariationSequenceSelector","charCode","unicodeVariationSequenceStartCheck","unicodeVariationSequenceEndCheck","variationSequenceCheck_default","unicodeVariationSequence","baseCodePoint","vsCodePoint","selectorLookup","mappings","replacementGlyphId","variationSequences_default","Bidi","baseDir","registerContextChecker","checkId","check","tokenizeText","reverseArabicSentences","rangeTokens","supportedTags","f","checkGlyphIndexStatus","applyArabicPresentationForms","applyCcmpReplacement","applyArabicRequireLigatures","applyLatinLigatures","applyUnicodeVariationSequences","applyThaiFeatures","contextId","indexes","bidi_default","createDefaultNamesInfo","Font","selection","bidi","charToGlyphIndexMod","notdef","leftGlyph","rightGlyph","gposKerning","callback","kerningValue","fullPath","gX","gY","gFontSize","glyphPath","glyphPaths","warnings","_this","assert","assertNamePresent","englishName","baseGlyphs","previousID","currentGlyphID","intArray","font_default","parseHvarTable","itemVariationStore","lsb","rsb","makeHvarTable","hvar_default","attachList","caretValue","ligGlyph","ligCaretList","markGlyphSets","parseGDEFTable","gdef","gdef_default","subtableParsers2","posformat","posFormat","valueFormat1","valueFormat2","classDef1","classDef2","class1Count","class2Count","parseGposTable","subtableMakers2","makeGposTable","gpos","gpos_default","parseWindowsKernTable","pairs","subtableVersion","nPairs","parseMacKernTable","parseKernTable","kern_default","parseLocaTable","shortVersion","parseFn","glyphOffsets","glyphOffset","loca_default","parseOpenTypeTableEntries","numTables","tableEntries","checksum","parseWOFFTableEntries","compLength","origLength","compression","uncompressTable","tableEntry","inBuffer","outBuffer","parseBuffer","indexToLocFormat","signature","issue","cffTableEntry","cff2TableEntry","fvarTableEntry","statTableEntry","gvarTableEntry","cvarTableEntry","avarTableEntry","glyfTableEntry","gdefTableEntry","gposTableEntry","gsubTableEntry","hmtxTableEntry","hvarTableEntry","kernTableEntry","locaTableEntry","nameTableEntry","metaTableEntry","locaTable","locaOffsets","glyfTable","cffTable2","kernTable","gdefTable","gposTable","gsubTable","fvarTable","statTable","gvarTable","cvarTable","avarTable","hvarTable","fontCache","convertPath","opentypePath","createFontAdapter","_a","_b","_c","left","right","loadFont","fontUrl","cached","promise","response","earcut","holeIndices","dim","hasHoles","outerLen","outerNode","linkedList","triangles","minX","minY","invSize","eliminateHoles","maxX","maxY","earcutLinked","clockwise","last","signedArea","insertNode","removeNode","filterPoints","again","area","ear","pass","indexCurve","stop","isEarHashed","isEar","cureLocalIntersections","splitEarcut","ax","bx","cx","ay","by","cy","pointInTriangleExceptFirst","minZ","zOrder","maxZ","intersects","locallyInside","isValidDiagonal","splitPolygon","queue","getLeftmost","compareXYSlope","eliminateHole","aSlope","bSlope","hole","bridge","findHoleBridge","bridgeReverse","hx","hy","qx","mx","my","tanMin","pointInTriangle","tan","sectorContainsSector","sortLinked","numMerges","inSize","tail","q","pSize","qSize","leftmost","intersectsPolygon","middleInside","q1","q2","o3","o4","onSegment","inside","a2","createNode","an","bp","glyphGeometryCache","getCurveQuality","safeFontSize","pointInPolygon","polygon","pj","pushQuadratic","from","steps","mt","pushCubic","pathToContours","quality","current","currentPoint","triangulateContours","cleanContours","sortedContours","used","positions","indices","outer","outerArea","holes","candidate","flat","vertexOffset","localIndices","globalVertexOffset","buildGlyphGeometry","geometry","appendGlyphGeometry","targetPositions","targetIndices","glyphGeometry","offsetX","offsetY","normalizeFillNumber","parsed","fillToGLSLColor","alpha","hex","createSolidColorShader","glslColor","Shader","normalizeGeometryPositions","getDecorationThickness","fontWeight","weightMultiplier","buildVectorLayer","originalPositions","MeshGeometry","shader","mesh","Mesh","buildStrokeLayers","copyCount","angle","buildDecorationLayers","thickness","underline","strikethrough","columns","meshColumns","buildLayer","ySelector","quad","createQuadGeometry","underlineLayer","strikethroughLayer","destroyVectorTextState","leftTop","leftBottom","rightTop","rightBottom","scaleFontMetrics","buildDecorationSegments","lineLayouts","getAlignedOffsetX","align","layoutWidth","lineWidth","layoutTextLines","letterSpacing","paragraphs","lines","paragraph","measureTextWidth","previousGlyph","kerning","getGlyphBounds","applySyntheticItalic","fontStyle","shear","transformed","getSyntheticBoldOffsets","vectorTemplateCache","clearVectorTemplateCache","buildVectorTextState","template","getVectorTextTemplate","buildStateFromTemplate","fillLayer","strokeLayers","decorationLayers","getVectorTextTemplateKey","pending","buildVectorTextTemplate","lineHeight","safeText","lineHeightPx","finalPositions","finalIndices","lineIndex","lineGlyphs","cursorX","styledGlyphGeometry","boldOffset","normalizedLineLayouts","getVectorTextLayers","deformVectorText","effectFn","originalX","originalY","col","anchorY","DEFAULT_MESH_COLUMNS","effectRegistry","normalizeColumns","registerMeshEffect","getMeshEffect","listMeshEffects","renderVectorText","textOpts","effectType","refreshMountedVectorTextLayers","displayObject","nextState","reapplyVectorTextEffect","effect","resolveVectorFontUrl","owner","disposeVectorTextState","mountVectorTextEffect","currentVersion","destroyed","clearContent","setVectorState","EFFECT_PARAM_KEYS","TRANSFORM_KEYS","BACKGROUND_KEYS","STYLE_ONLY_VECTOR_KEYS","isTransformOnlyUpdate","isEffectOnlyUpdate","nextEffect","prevEffect","vectorState","effectKeys","reapplyTextEffect","isBackgroundOnlyUpdate","isStyleOnlyVectorUpdate","refreshMountedVectorTextStyle","createRasterTextNode","Text","createRasterTextStyle","fontFamily","TextStyle","withAlpha","normalizedAlpha","hexToRgba","int","measureRasterTextLayout","CanvasTextMetrics","updateRasterTextResolution","textNode","dpr","maxScale","BaseTextElement","hasEffectUpdate","mergedEffect","currentVectorState","prevFontSize","_next","_keys","_prevFontSize","decoration","lineInset","sagitta","hw","arcY","createSinusoidalScaleEffect","createLinearScaleEffect","directionBias","tEff","createCenterSinusoidalScaleEffect","mode","wave","squeeze","expand","arc","midY","_t","_ctx","centerWeight","plateauWidth","pointedWeight","compressedScale","expandedScale","centerPeak","TextElement","resolvedFontUrl","leadingInset","style","ascent","descent","_line","lineTop","extraLeading","contentTop","contentHeight","baselineY","TEXT_FACTORIES","registerFactories","factories","loadElements","isCanvasConstraintEnabled","getCanvasWorldBounds","pixi","camera","topLeft","bottomRight","screenBoundsToWorldBounds","getElementWorldBounds","el","combineBounds","boundsList","rest","getCombinedElementWorldBounds","elements","clampBoundsDelta","limits","nextLeft","nextTop","nextRight","nextBottom","limitRight","limitBottom","clampedDx","clampedDy","constrainElementToCanvas","createAlignmentAccessor","getManager","ids","CompositeCommand","UpdateCommand","before","after","patches","snapshot","diff","reverse","AlignmentManager","targets","referenceBounds","updates","patch","item","groupBounds","currentAnchorX","currentAnchorY","createCameraAccessor","zoom","anchorX","screenX","screenY","worldX","worldY","KeyboardShortcuts","target","combo","handler","ctrl","shift","combos","WHEEL_FACTOR","createCameraShortcuts","handlers","shortcuts","attachWheelZoom","enabled","getZoom","applyZoom","onWheel","rect","attachPinchZoom","startDist","startZoom","distanceBetweenTouches","touches","touch0","touch1","onTouchStart","onTouchMove","attachPanControls","bindings","panStartX","panStartY","panOriginX","panOriginY","updateCursor","stopPan","onKeyDown","onKeyUp","onBlur","onPointerDown","worldPosition","onPointerMove","screenToWorldPoint","worldContainer","Point","worldToScreenPoint","DEFAULTS","CameraManager","onElementAdded","dObj","clampedZoom","newZoom","emit","clamped","worldAnchor","anchorAfterZoom","active","direction","nextZoom","cleanup","buildDuplicateOptions","snapshots","nextZIndex","duplicates","currentZIndex","duplicate","getMaxElementZIndex","maxZIndex","createContextMenuAccessor","getDefaultItems","renderDefaultContextMenu","menu","clampMenuToViewport","AddCommand","RemoveCommand","ContextMenuManager","onCanvasContextMenu","onElementUpdated","onElementRemoved","onDocumentClick","onDocumentKeyDown","targetIds","selected","targetId","originalEvent","actions","payload","contextMenuConfig","userHandler","interaction","selectedIds","listenerSet","openFromPointer","nativeEvent","onRightClick","createExportAccessor","exportManager","ExportManager","work","pixiApp","margin","Rectangle","safeMargin","bottom","createFontsAccessor","family","fontManager","FontManager","loadedUrl","pendingLoad","DEFAULT_GRID_STATE","createGridAccessor","interval","GridManager","onCameraChanged","cellSize","majorInterval","minorLineColor","minorLineAlpha","majorLineColor","majorLineAlpha","tileSize","TilingSprite","cameraState","tilePixels","createHistoryAccessor","items","DEFAULT_HISTORY_TRACK","HistoryManager","createInteractionAccessor","params","select","idOrIds","getSelectedIds","getSelectedOptions","getBoundingRect","getCombinedBoundingRect","getHandlePositions","handleSize","topOffset","Transform","ARROW_BOTH_SIDES_SVG","COPY_SVG","MOVE_SVG","ROTATE_SVG","TRASH_SVG","ICONS","isIconKey","HANDLE_W","HANDLE_H","HANDLE_RADIUS","HANDLE_BG_COLOR","HANDLE_ROTATIONS","TRANSFORM_CURSORS","resolveCursor","ControlHandle","iconSize","bg","iconRotation","spr","icon","DEFAULT_CONTROLS","DEFAULT_LINE_COLOR","DEFAULT_LINE_THICKNESS","DEFAULT_PADDING","overlayLayer","interactionConfig","controlConfigs","handleTheme","cfg","handle","savedRot","localRect","lineType","_d","rotateCenter","dotRadius","gap","nx","ny","step","copySelectedToClipboard","pasteSelectionFromClipboard","pasted","sorted","nextZ","deleteSelected","copySelected","duplicateSelection","pasteSelected","recordGroupUpdate","beforeStates","selectOnly","setSelection","toggleSelection","onStageClick","updateBoundingBox","getSelectedElements","captureElementOptions","TRANSFORM_AXES","createResizeStartState","resolveResizeAnchor","resolveResizeScale","diagX","diagY","diagLen","proj","minScale","newW","newH","computeResizeUpdate","sx","sy","dims","computeDims","textDims","shapeDims","scaleDims","us","startResize","startRect","axScreen","ayScreen","startStates","attachStageDrag","mv","startRotate","startAngle","startRots","deltaDeg","startElementDrag","selectedElements","startPositions","snap","startBounds","startConstraintBounds","snapDx","snapDy","snapResult","constrained","actualBounds","resolveSnapLinePosition","anchor","onMove","onEnd","stage","onUp","syncSelectableElement","detachSelectableElement","native","binding","InteractionManager","onStagePointerDown","nextSelectedIds","LayerCommand","createLayeringAccessor","call","invoke","manager","mutate","changedIds","beforeMap","placement","moving","staying","ordered","neighborIndex","neighbor","currentZ","createPerformanceAccessor","perf","CacheManager","urls","DirtyTracker","PerformanceManager","createSerializerAccessor","adapter","createDefaultSerializationAdapters","SerializationManager","previousScene","restoreError","importMessage","restoreMessage","DEFAULT_SNAP_CONFIG","EMPTY_STATE","createSnapAccessor","guide","DEFAULT_LINE_STYLE","SnapLines","lineX","lineY","resolveSnap","guides","getGridCellSize","getElementBounds","exclude","xMid","yMid","snapX","snapY","resolveGuideAxis","excludeSet","hit","resolveObjectAxis","cell","resolveGridAxis","anchor1","anchor2","anchor3","best","updateGridAxisSnap","orientation","updateBestAxisSnap","edge1","center","edge2","elementId","targetPos","reference","distance","gridPos","SnapManager","visibleBounds","grid","buildExtensionList","extensions","isEnabled","pushIfEnabled","extension","pushIfConfigured","cameraConfig","gridConfig","snapConfig","loadExtensions","ext","ElementRegistry","has","prefix","Events","EE","once","addListener","emitter","listener","evt","clearEvent","EventEmitter","ee","listeners","a1","a3","a4","a5","module","EditorEventBus","CanvasKit","screen","raw","Circle","Star","Line","register","Shape","typeOrOptions","maybeOptions","registerEffect"],"mappings":"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AEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,IAAI;AAAA;AAAA,EAEJ,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAAA,EAEL,KAAK;AAAA;AAEP,GACIC,KAAmB;AAAA,EACrB,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,MAAM;AAAA,EACN,OAAO;AAAA,EACP,OAAO;AAAA,EACP,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQP,MAAM;AAAA,EACN,MAAM;AAA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AAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACIC,KAAqB;AAAA,EACvB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACIC,KAAoB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACIC,KAAyB;AAAA,EAC3B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACIC,KAAsB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACIC,KAAoB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GACIC,KAAgB;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACA,SAASC,GAAgBC,GAAM;AAC7B,OAAK,OAAOA;AACd;AACAD,GAAgB,UAAU,mBAAmB,SAAS5a,GAAG;AACvD,QAAMkZ,IAAOlZ,EAAE,YAAY,CAAC,GACtBgQ,IAAS,KAAK,KAAK;AACzB,MAAIA;AACF,aAASvT,IAAI,GAAGA,IAAIuT,EAAO,QAAQvT,KAAK,GAAG;AACzC,YAAMiV,IAAQ1B,EAAO,IAAIvT,CAAC;AAC1B,eAASyJ,IAAI,GAAGA,IAAIwL,EAAM,SAAS,QAAQxL,KAAK;AAC9C,YAAIwL,EAAM,SAASxL,CAAC,MAAMgT;AACxB,iBAAOzc;AAAA,IAGb;AAEF,SAAO;AACT;AACA,SAASqe,GAAa9D,GAAM;AAC1B,OAAK,OAAOA;AACd;AACA8D,GAAa,UAAU,mBAAmB,SAAS9a,GAAG;AACpD,SAAO,KAAK,KAAK,cAAcA,EAAE,YAAY,CAAC,CAAC,KAAK;AACtD;AACA,SAAS+a,GAAYxU,GAAUyU,GAAS;AACtC,OAAK,WAAWzU,GAChB,KAAK,UAAUyU;AACjB;AACAD,GAAY,UAAU,mBAAmB,SAAS3W,GAAG;AACnD,QAAM8U,IAAO9U,EAAE,YAAY,CAAC,GACtB6W,IAAW,KAAK,SAAS/B,CAAI;AACnC,SAAO,KAAK,QAAQ,QAAQ+B,CAAQ;AACtC;AACA,SAASC,GAAWC,GAAM;AACxB,UAAQA,EAAK,SAAO;AAAA,IAClB,KAAK;AACH,WAAK,QAAQR,GAAc,MAAK;AAChC;AAAA,IACF,KAAK;AACH,WAAK,QAAQ,IAAI,MAAMQ,EAAK,cAAc;AAC1C,eAAS1e,IAAI,GAAGA,IAAI0e,EAAK,gBAAgB1e;AACvC,QAAI0e,EAAK,eAAe1e,CAAC,IAAIke,GAAc,SACzC,KAAK,MAAMle,CAAC,IAAIke,GAAcQ,EAAK,eAAe1e,CAAC,CAAC,IAEpD,KAAK,MAAMA,CAAC,IAAI0e,EAAK,MAAMA,EAAK,eAAe1e,CAAC,IAAIke,GAAc,MAAM;AAG5E;AAAA,IACF,KAAK;AACH,WAAK,QAAQ,IAAI,MAAMQ,EAAK,cAAc;AAC1C,eAAS1e,IAAI,GAAGA,IAAI0e,EAAK,gBAAgB1e;AACvC,aAAK,MAAMA,CAAC,IAAIke,GAAcle,IAAI0e,EAAK,eAAe1e,CAAC,CAAC;AAE1D;AAAA,IACF,KAAK;AACH,WAAK,QAAQ,CAAA;AACb;AAAA,IACF;AACE,WAAK,QAAQ,CAAA;AACb;AAAA,EACN;AACA;AACAye,GAAW,UAAU,mBAAmB,SAASlH,GAAM;AACrD,SAAO,KAAK,MAAM,QAAQA,CAAI;AAChC;AACAkH,GAAW,UAAU,mBAAmB,SAASE,GAAK;AACpD,SAAO,KAAK,MAAMA,CAAG;AACvB;AACA,SAASC,GAAiBR,GAAM;AAC9B,MAAInJ;AACJ,QAAMwF,IAAgB2D,EAAK,OAAO,KAAK,eACjCS,IAAY,OAAO,KAAKpE,CAAa;AAC3C,WAASza,IAAI,GAAGA,IAAI6e,EAAU,QAAQ7e,KAAK,GAAG;AAC5C,UAAMuD,IAAIsb,EAAU7e,CAAC,GACfgU,IAAayG,EAAclX,CAAC;AAClC,IAAA0R,IAAQmJ,EAAK,OAAO,IAAIpK,CAAU,GAClCiB,EAAM,WAAW,SAAS1R,CAAC,CAAC;AAAA,EAC9B;AACA,WAASvD,IAAI,GAAGA,IAAIoe,EAAK,OAAO,QAAQpe,KAAK;AAC3C,IAAAiV,IAAQmJ,EAAK,OAAO,IAAIpe,CAAC,GACrBoe,EAAK,cACPnJ,EAAM,OAAOmJ,EAAK,YAAY,QAAQpe,CAAC,IAC9Boe,EAAK,WAAW,UACzBnJ,EAAM,OAAOmJ,EAAK,WAAW,iBAAiBpe,CAAC;AAGrD;AACA,SAAS8e,GAA0BV,GAAM;AACvC,EAAAA,EAAK,qBAAqB,CAAA;AAC1B,QAAM3D,IAAgB2D,EAAK,OAAO,KAAK,eACjCS,IAAY,OAAO,KAAKpE,CAAa;AAC3C,WAASza,IAAI,GAAGA,IAAI6e,EAAU,QAAQ7e,KAAK,GAAG;AAC5C,UAAMuD,IAAIsb,EAAU7e,CAAC;AACrB,QAAIgU,IAAayG,EAAclX,CAAC;AAChC,IAAI6a,EAAK,mBAAmBpK,CAAU,MAAM,SAC1CoK,EAAK,mBAAmBpK,CAAU,IAAI;AAAA,MACpC,UAAU,CAAC,SAASzQ,CAAC,CAAC;AAAA,IAC9B,IAEM6a,EAAK,mBAAmBpK,CAAU,EAAE,SAAS,KAAK,SAASzQ,CAAC,CAAC;AAAA,EAEjE;AACF;AACA,SAASwb,GAAcX,GAAMY,GAAK;AAChC,EAAIA,EAAI,YACNF,GAA0BV,CAAI,IAE9BQ,GAAiBR,CAAI;AAEzB;AAGA,SAASa,GAAK5lB,GAAKwJ,GAAIC,GAAIC,GAAIC,GAAI;AACjC,EAAA3J,EAAI,UAAS,GACbA,EAAI,OAAOwJ,GAAIC,CAAE,GACjBzJ,EAAI,OAAO0J,GAAIC,CAAE,GACjB3J,EAAI,OAAM;AACZ;AACA,IAAI6lB,KAAe,EAAE,MAAAD,GAAI;AAGzB,SAASE,GAAe9V,GAAM2H,GAAO;AACnC,QAAMwG,IAAI,IAAI/H,EAAOpG,GAAM2H,CAAK,GAC1BoO,IAAU5H,EAAE,WAAU;AAC5B,EAAI4H,MAAY,KACd,QAAQ,KAAK,2CAA2C;AAE1D,QAAMC,IAAoB7H,EAAE,WAAU,GAChC8H,IAAc9H,EAAE,WAAU,GAC1B+H,IAAkB/H,EAAE,WAAU,GAC9BgI,IAA0BhI,EAAE,cAAa,GACzCiI,IAAqBjI,EAAE,gBAAgB8H,CAAW;AACxD,EAAA9H,EAAE,iBAAiBgI;AACnB,QAAME,IAAelI,EAAE,eAAe+H,CAAe;AACrD,SAAA/H,EAAE,iBAAiBgI,GACZ;AAAA,IACL,SAAAJ;AAAA,IACA,mBAAAC;AAAA,IACA,cAAAK;AAAA,IACA,oBAAAD;AAAA,EACJ;AACA;AACA,SAASE,GAAc,EAAE,SAAAP,IAAU,GAAG,mBAAAC,IAAoB,GAAG,cAAAK,IAAe,IAAI,oBAAAD,IAAqB,CAAC,CAAC,EAAC,GAAI;AAC1G,SAAApX,EAAc,SAAS+W,MAAY,GAAG,4BAA4B,GAClE/W,EAAc,SAASqX,EAAa,QAAQ,wBAAwB,GACpErX,EAAc,SAASoX,EAAmB,QAAQ,8BAA8B,GAC5EA,EAAmB,SAAS,KAC9BpX,EAAc,SAASgX,GAAmB,8DAA8D,GAEnG,IAAI9Q,EAAc,MAAM,QAAQ;AAAA,IACrC,EAAE,MAAM,WAAW,MAAM,UAAU,OAAO6Q,EAAO;AAAA,IACjD,EAAE,MAAM,qBAAqB,MAAM,UAAU,OAAOC,KAAqBK,EAAa,OAAM;AAAA,IAC5F,EAAE,MAAM,eAAe,MAAM,UAAU,OAAOD,EAAmB,OAAM;AAAA,IACvE,EAAE,MAAM,mBAAmB,MAAM,UAAU,OAAOC,EAAa,OAAM;AAAA,IACrE,EAAE,MAAM,2BAA2B,MAAM,SAAS,OAAO,KAAK,IAAID,EAAmB,OAAM;AAAA,IAC3F,GAAGA,EAAmB,IAAI,CAACG,GAAS,OAAO,EAAE,MAAM,wBAAwB,GAAG,MAAM,UAAU,OAAOA,EAAO,EAAG;AAAA,IAC/G,GAAGF,EAAa,IAAI,CAACG,GAAO,OAAO,EAAE,MAAM,kBAAkB,GAAG,MAAM,SAAS,OAAOA,EAAK,EAAG;AAAA,EAClG,CAAG;AACH;AACA,SAASC,GAAeC,GAAM;AAC5B,MAAI1c,KAAK0c,IAAO,eAAe,IAC3BpkB,KAAKokB,IAAO,aAAa,IACzB9F,KAAK8F,IAAO,UAAU,GACtBzc,IAAIyc,IAAO;AACf,SAAA1c,IAAIA,IAAI,MAAM,KACd1H,IAAIA,IAAI,MAAM,KACdse,IAAIA,IAAI,MAAM,KACd3W,KAAKA,IAAI,MAAM,OAAO,KACf,EAAE,GAAAD,GAAG,GAAA1H,GAAG,GAAAse,GAAG,GAAA3W,EAAC;AACrB;AACA,SAAS0c,GAAgB5B,GAAM6B,GAAOL,IAAU,GAAGM,IAAc,QAAQ;AACvE,MAAID,KAAS;AACX,WAAO;AAET,QAAME,IAAY/B,KAAQA,EAAK,UAAUA,EAAK,OAAO;AACrD,MAAI,CAAC+B,EAAW,QAAO;AACvB,MAAIP,IAAUO,EAAU,mBAAmB,SAAS;AAClD,UAAM,IAAI,MAAM,0DAA0DA,EAAU,mBAAmB,MAAM,YAAYF,CAAK,GAAG;AAEnI,MAAIA,IAAQE,EAAU;AACpB,UAAM,IAAI,MAAM,gDAAgDA,EAAU,iBAAiB,YAAYF,CAAK,GAAG;AAEjH,QAAMG,IAAcD,EAAU,mBAAmBP,CAAO,IAAIK;AAC5D,MAAIG,IAAcD,EAAU;AAC1B,UAAM,IAAI,MAAM,kDAAkDA,EAAU,aAAa,MAAM,kBAAkBC,CAAW,GAAG;AAEjI,QAAMP,IAAQC,GAAeK,EAAU,aAAaC,CAAW,CAAC;AAChE,SAAIF,MAAgB,SACXL,IAEFQ,GAAYR,GAAOK,CAAW;AACvC;AACA,SAASI,GAAM1f,GAAG;AAChB,UAAQ,MAAM,SAASA,CAAC,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE;AAClD;AACA,SAAS2f,GAASR,GAAM;AACtB,QAAM9F,IAAI8F,EAAK,IAAI,KACbpkB,IAAIokB,EAAK,IAAI,KACb1c,IAAI0c,EAAK,IAAI,KACbS,IAAM,KAAK,IAAIvG,GAAGte,GAAG0H,CAAC,GAAGod,IAAM,KAAK,IAAIxG,GAAGte,GAAG0H,CAAC;AACrD,MAAI5F,GAAGkK,GAAGN,KAAKmZ,IAAMC,KAAO;AAC5B,MAAID,MAAQC;AACV,IAAAhjB,IAAIkK,IAAI;AAAA,OACH;AACL,UAAM/G,IAAI4f,IAAMC;AAEhB,YADA9Y,IAAIN,IAAI,MAAMzG,KAAK,IAAI4f,IAAMC,KAAO7f,KAAK4f,IAAMC,IACvCD,GAAG;AAAA,MACT,KAAKvG;AACH,QAAAxc,KAAK9B,IAAI0H,KAAKzC,KAAKjF,IAAI0H,IAAI,IAAI;AAC/B;AAAA,MACF,KAAK1H;AACH,QAAA8B,KAAK4F,IAAI4W,KAAKrZ,IAAI;AAClB;AAAA,MACF,KAAKyC;AACH,QAAA5F,KAAKwc,IAAIte,KAAKiF,IAAI;AAClB;AAAA,IACR;AACI,IAAAnD,KAAK;AAAA,EACP;AACA,SAAO;AAAA,IACL,GAAGA,IAAI;AAAA,IACP,GAAGkK,IAAI;AAAA,IACP,GAAGN,IAAI;AAAA,EACX;AACA;AACA,SAASqZ,GAASC,GAAM;AACtB,MAAI,EAAE,GAAAljB,GAAG,GAAAkK,GAAG,GAAAN,GAAG,GAAA/D,EAAC,IAAKqd;AACrB,EAAAljB,IAAIA,IAAI,KACRkK,KAAK,KACLN,KAAK;AACL,QAAM9D,KAAK,IAAI,KAAK,IAAI,IAAI8D,IAAI,CAAC,KAAKM,GAChCtN,IAAIkJ,KAAK,IAAI,KAAK,IAAI9F,IAAI,KAAK,IAAI,CAAC,IACpCuL,IAAI3B,IAAI9D,IAAI;AAClB,MAAI0W,IAAI,GAAGte,IAAI,GAAG0H,IAAI;AACtB,SAAI,KAAK5F,KAAKA,IAAI,MAChBwc,IAAI1W,GACJ5H,IAAItB,GACJgJ,IAAI,KACK,MAAM5F,KAAKA,IAAI,OACxBwc,IAAI5f,GACJsB,IAAI4H,GACJF,IAAI,KACK,OAAO5F,KAAKA,IAAI,OACzBwc,IAAI,GACJte,IAAI4H,GACJF,IAAIhJ,KACK,OAAOoD,KAAKA,IAAI,OACzBwc,IAAI,GACJte,IAAItB,GACJgJ,IAAIE,KACK,OAAO9F,KAAKA,IAAI,OACzBwc,IAAI5f,GACJsB,IAAI,GACJ0H,IAAIE,KACK,OAAO9F,KAAKA,KAAK,QAC1Bwc,IAAI1W,GACJ5H,IAAI,GACJ0H,IAAIhJ,IAEC;AAAA,IACL,GAAG,KAAK,OAAO4f,IAAIjR,KAAK,GAAG;AAAA,IAC3B,GAAG,KAAK,OAAOrN,IAAIqN,KAAK,GAAG;AAAA,IAC3B,GAAG,KAAK,OAAO3F,IAAI2F,KAAK,GAAG;AAAA,IAC3B,GAAA1F;AAAA,EACJ;AACA;AACA,SAASsd,GAAUf,GAAO;AACxB,SAAO,SAAS,KAAKS,GAAMT,EAAM,CAAC,CAAC,GAAGS,GAAMT,EAAM,CAAC,CAAC,GAAGS,GAAMT,EAAM,CAAC,CAAC,GAAGS,GAAMT,EAAM,IAAI,GAAG,CAAC,IAAI,EAAE;AACpG;AACA,SAASgB,GAAWhB,GAAOiB,IAAe,QAAQ;AAChD,QAAMC,IAAYD,KAAgB,SAASA,KAAgB,QACrDE,IAAQ,OAAO,UAAUnB,CAAK;AACpC,MAAIoB,IAAc;AAClB,MAAID,KAASD,KAAalB,MAAU;AAClC,WAAOA;AACF,MAAI,OAAOA,KAAU,UAAU;AACpC,QAAIiB,KAAgB;AAClB,aAAOjB;AAET,QAAIkB;AACF,aAAOH,GAAUf,CAAK;AAAA,EAE1B,WAAW,CAACmB,KAAS,wDAAwD,KAAKnB,EAAM,KAAI,CAAE,GAAG;AAE/F,YADAA,IAAQA,EAAM,OAAO,UAAU,CAAC,GACxBA,EAAM,QAAM;AAAA,MAClB,KAAK;AACH,QAAAA,IAAQ;AAAA,UACN,GAAG,SAASA,EAAM,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE;AAAA,UAClC,GAAG,SAASA,EAAM,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE;AAAA,UAClC,GAAG,SAASA,EAAM,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE;AAAA,UAClC,GAAG;AAAA,QACb;AACQ;AAAA,MACF,KAAK;AACH,QAAAA,IAAQ;AAAA,UACN,GAAG,SAASA,EAAM,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE;AAAA,UAClC,GAAG,SAASA,EAAM,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE;AAAA,UAClC,GAAG,SAASA,EAAM,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE;AAAA,UAClC,GAAG,SAASA,EAAM,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI;AAAA,QAChD;AACQ;AAAA,MACF,KAAK;AACH,QAAAA,IAAQ;AAAA,UACN,GAAG,SAASA,EAAM,CAAC,IAAIA,EAAM,CAAC,GAAG,EAAE;AAAA,UACnC,GAAG,SAASA,EAAM,CAAC,IAAIA,EAAM,CAAC,GAAG,EAAE;AAAA,UACnC,GAAG,SAASA,EAAM,CAAC,IAAIA,EAAM,CAAC,GAAG,EAAE;AAAA,UACnC,GAAG;AAAA,QACb;AACQ;AAAA,MACF,KAAK;AACH,QAAAA,IAAQ;AAAA,UACN,GAAG,SAASA,EAAM,CAAC,IAAIA,EAAM,CAAC,GAAG,EAAE;AAAA,UACnC,GAAG,SAASA,EAAM,CAAC,IAAIA,EAAM,CAAC,GAAG,EAAE;AAAA,UACnC,GAAG,SAASA,EAAM,CAAC,IAAIA,EAAM,CAAC,GAAG,EAAE;AAAA,UACnC,GAAG,SAASA,EAAM,CAAC,IAAIA,EAAM,CAAC,GAAG,EAAE,IAAI;AAAA,QACjD;AACQ;AAAA,IACR;AACI,QAAIiB,KAAgB;AAClB,aAAOjB;AAAA,EAEX,WAAW,OAAO,WAAa,OAAe,YAAY,KAAKA,CAAK,GAAG;AACrE,UAAMxmB,IAAM,SAAS,cAAc,QAAQ,EAAE,WAAW,IAAI;AAC5D,IAAAA,EAAI,YAAYwmB;AAChB,UAAMqB,IAAgBb,GAAYhnB,EAAI,WAAW,MAAM;AACvD,IAAI6nB,MAAkB,eAAerB,EAAM,YAAW,MAAO,UAC3DoB,IAAc,KAEdpB,IAAQqB;AAAA,EAEZ,OAAO;AACL,IAAArB,IAAQA,EAAM,KAAI;AAClB,UAAMsB,IAAY;AAClB,QAAIA,EAAU,KAAKtB,CAAK,GAAG;AACzB,YAAMuB,IAAUvB,EAAM,MAAMsB,CAAS,EAAE,OAAO,CAACnhB,MAAM,OAAOA,IAAM,GAAW;AAC7E,MAAA6f,IAAQ;AAAA,QACN,GAAG,KAAK,MAAM,WAAWuB,EAAQ,CAAC,CAAC,KAAKA,EAAQ,CAAC,IAAI,MAAM,MAAM,EAAE;AAAA,QACnE,GAAG,KAAK,MAAM,WAAWA,EAAQ,CAAC,CAAC,KAAKA,EAAQ,CAAC,IAAI,MAAM,MAAM,EAAE;AAAA,QACnE,GAAG,KAAK,MAAM,WAAWA,EAAQ,CAAC,CAAC,KAAKA,EAAQ,CAAC,IAAI,MAAM,MAAM,EAAE;AAAA,QACnE,GAAIA,EAAQ,CAAC,IAAQ,WAAWA,EAAQ,CAAC,CAAC,KAAKA,EAAQ,CAAC,IAAI,MAAM,KAAjD;AAAA,MACzB;AAAA,IACI,OAAO;AACL,YAAMC,IAAY;AAClB,UAAIA,EAAU,KAAKxB,CAAK,GAAG;AACzB,cAAMuB,IAAUvB,EAAM,MAAMwB,CAAS,EAAE,OAAO,CAACrhB,MAAM,OAAOA,IAAM,GAAW;AAC7E,QAAA6f,IAAQa,GAAS;AAAA,UACf,GAAG,WAAWU,EAAQ,CAAC,CAAC,KAAKA,EAAQ,CAAC,MAAM,SAAS,MAAM;AAAA,UAC3D,GAAG,WAAWA,EAAQ,CAAC,CAAC;AAAA,UACxB,GAAG,WAAWA,EAAQ,CAAC,CAAC;AAAA,UACxB,GAAIA,EAAQ,CAAC,IAAQ,WAAWA,EAAQ,CAAC,CAAC,KAAKA,EAAQ,CAAC,IAAI,MAAM,KAAjD;AAAA,QAC3B,CAAS;AAAA,MACH;AACE,QAAAH,IAAc;AAAA,IAElB;AAAA,EACF;AACA,MAAI,CAACA;AACH,UAAM,IAAI,MAAM,yBAAyBpB,CAAK,EAAE;AAElD,SAAOQ,GAAYR,GAAOiB,CAAY;AACxC;AACA,SAAST,GAAYN,GAAM5O,IAAS,QAAQ;AAC1C,MAAI4O,MAAS,eAAgB,QAAOA;AACpC,MAAI,OAAO,UAAUA,CAAI,GAAG;AAC1B,QAAI5O,KAAU,SAASA,KAAU;AAC/B,aAAO4O;AAET,IAAAA,IAAOD,GAAeC,CAAI;AAAA,EAC5B,MAAO,CAAI,OAAOA,KAAS,aACzBA,IAAOc,GAAWd,GAAM,MAAM;AAEhC,MAAIuB,IAAM,CAAC,OAAO,MAAM,EAAE,SAASnQ,CAAM,IAAIoP,GAASR,CAAI,IAAI;AAC9D,UAAQ5O,GAAM;AAAA,IACZ,KAAK;AACH,aAAO,QAAQ4O,EAAK,CAAC,KAAKA,EAAK,CAAC,KAAKA,EAAK,CAAC,KAAK,WAAWA,EAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AAAA,IAC/E,KAAK;AACH,aAAO,OAAOA,EAAK,CAAC,KAAKA,EAAK,CAAC,KAAKA,EAAK,CAAC;AAAA,IAC5C,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,IAAIO,GAAMP,EAAK,CAAC,CAAC,GAAGO,GAAMP,EAAK,CAAC,CAAC,GAAGO,GAAMP,EAAK,CAAC,CAAC;AAAA,IAC1D,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,aAAO,IAAIO,GAAMP,EAAK,CAAC,CAAC,GAAGO,GAAMP,EAAK,CAAC,CAAC,GAAGO,GAAMP,EAAK,CAAC,CAAC,GAAGO,GAAMP,EAAK,IAAI,GAAG,CAAC;AAAA,IAChF,KAAK;AACH,aAAO,OAAOuB,EAAI,EAAE,QAAQ,CAAC,CAAC,KAAKA,EAAI,EAAE,QAAQ,CAAC,CAAC,MAAMA,EAAI,EAAE,QAAQ,CAAC,CAAC;AAAA,IAC3E,KAAK;AACH,aAAO,QAAQA,EAAI,EAAE,QAAQ,CAAC,CAAC,KAAKA,EAAI,EAAE,QAAQ,CAAC,CAAC,MAAMA,EAAI,EAAE,QAAQ,CAAC,CAAC,MAAM,WAAWvB,EAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;AAAA,IAC/G,KAAK;AACH,aAAOA;AAAA,IACT,KAAK;AAAA,IACL,KAAK;AACH,aAAOa,GAAUb,CAAI;AAAA,IACvB;AACE,YAAM,IAAI,MAAM,2BAA2B5O,CAAM;AAAA,EACvD;AACA;AACA,IAAIoQ,KAAe,EAAE,OAAOpC,IAAgB,MAAMQ,IAAe,iBAAAK,IAAiB,YAAAa,IAAY,aAAAR,GAAW;AAGzG,SAASmB,GAAkBvM,GAAOlO,GAAM;AACtC,MAAI0a,IAAQ1a,KAAQ,IAAIiB,GAAY;AACpC,SAAO;AAAA,IACL,cAAc;AAAA,IACd,KAAK,WAAW;AACd,aAAI,OAAOyZ,KAAU,eACnBA,IAAQA,EAAK,IAERA;AAAA,IACT;AAAA,IACA,KAAK,SAASjK,GAAG;AACf,MAAAiK,IAAQjK;AAAA,IACV;AAAA,EACJ;AACA;AACA,SAASkK,EAAMtnB,GAAS;AACtB,OAAK,sBAAsBA,CAAO;AACpC;AACAsnB,EAAM,UAAU,wBAAwB,SAAStnB,GAAS;AAOxD,MANA,KAAK,QAAQA,EAAQ,SAAS,GAC1BA,EAAQ,SAAS,YACnBA,EAAQ,UAAU,SACTA,EAAQ,SAAS,YAC1BA,EAAQ,UAAU,IAEhBA,EAAQ,YAAY,KAAKA,EAAQ,SAAS;AAC5C,UAAM,IAAI,MAAM,qGAAqG;AAEvH,OAAK,OAAOA,EAAQ,QAAQ,MAC5B,KAAK,UAAUA,EAAQ,SACvB,KAAK,WAAWA,EAAQ,aAAaA,EAAQ,YAAY,SAAS,CAACA,EAAQ,OAAO,IAAI,CAAA,IAClF,UAAUA,MACZ,KAAK,OAAOA,EAAQ,OAElB,UAAUA,MACZ,KAAK,OAAOA,EAAQ,OAElB,UAAUA,MACZ,KAAK,OAAOA,EAAQ,OAElB,UAAUA,MACZ,KAAK,OAAOA,EAAQ,OAElB,kBAAkBA,MACpB,KAAK,eAAeA,EAAQ,eAE1B,qBAAqBA,MACvB,KAAK,kBAAkBA,EAAQ,kBAE7B,YAAYA,MACd,KAAK,SAASA,EAAQ,SAExB,OAAO,eAAe,MAAM,QAAQonB,GAAkB,MAAMpnB,EAAQ,IAAI,CAAC;AAC3E;AACAsnB,EAAM,UAAU,aAAa,SAASC,GAAS;AAC7C,EAAI,KAAK,SAAS,WAAW,MAC3B,KAAK,UAAUA,IAEjB,KAAK,SAAS,KAAKA,CAAO;AAC5B;AACAD,EAAM,UAAU,iBAAiB,WAAW;AAC1C,SAAO,KAAK,KAAK,eAAc;AACjC;AACAA,EAAM,UAAU,UAAU,SAASrnB,GAAGC,GAAG6D,GAAU/D,GAASgkB,GAAM;AAChE,EAAA/jB,IAAIA,MAAM,SAASA,IAAI,GACvBC,IAAIA,MAAM,SAASA,IAAI,GACvB6D,IAAWA,MAAa,SAASA,IAAW,IAC5C/D,IAAU,OAAO,OAAO,CAAA,GAAIgkB,KAAQA,EAAK,sBAAsBhkB,CAAO;AACtE,MAAIsK,GACAkd,GACAC,IAASznB,EAAQ,QACjB0nB,IAAS1nB,EAAQ;AACrB,QAAM2nB,IAAQ,KAAK,KAAK,KAAK,cAAc,OAAO5jB;AAClD,MAAI6jB,IAAW;AACf,EAAI5D,KAAQA,EAAK,cACf4D,IAAW5D,EAAK,UAAU,aAAa,MAAMhkB,EAAQ,SAAS,GAC9DsK,IAAWsd,EAAS,KAAK,WAEvB5nB,EAAQ,WAAWgkB,KAAQA,EAAK,YAClCwD,IAAUI,EAAS,QAAQ5D,EAAK,QAAQ,KAAK4D,GAAU7jB,GAAU/D,CAAO,IAEtEwnB,KACFld,IAAW0Z,EAAK,QAAQ,YAAYwD,CAAO,GAC3CvnB,IAAI,KAAK,MAAMA,CAAC,GAChBC,IAAI,KAAK,MAAMA,CAAC,GAChBunB,IAASC,IAAS,MAElBpd,IAAWsd,EAAS,KAAK,UACrBH,MAAW,WAAQA,IAASE,IAC5BD,MAAW,WAAQA,IAASC;AAElC,QAAMvK,IAAI,IAAIxP,GAAY;AAC1B,MAAI5N,EAAQ,SAAS;AACnB,UAAM6nB,IAAW,KAAK,YAAY7D,CAAI;AACtC,QAAI6D,GAAU;AACZ,YAAMC,IAAQ,IAAIla,GAAY;AAC9B,aAAAka,EAAM,SAAS;AAAA,QACb,OAAOD,EAAS;AAAA,QAChB,GAAG5nB,IAAI4nB,EAAS,kBAAkBF;AAAA,QAClC,GAAGznB,IAAI2nB,EAAS,WAAWF;AAAA,QAC3B,OAAOE,EAAS,MAAM,QAAQF;AAAA,QAC9B,QAAQE,EAAS,MAAM,SAASF;AAAA,MACxC,GACMvK,EAAE,UAAU,CAAC0K,CAAK,GACX1K;AAAA,IACT;AAAA,EACF;AACA,MAAIpd,EAAQ,YAAY;AACtB,UAAMgN,IAAS,KAAK,UAAUgX,CAAI;AAClC,QAAIhX,KAAUA,EAAO,QAAQ;AAC3B,MAAAoQ,EAAE,UAAU,CAAA;AACZ,eAASxX,IAAI,GAAGA,IAAIoH,EAAO,QAAQpH,KAAK,GAAG;AACzC,cAAMkiB,IAAQ9a,EAAOpH,CAAC;AACtB,YAAI6f,IAAQG,GAAgB5B,GAAM8D,EAAM,cAAc9nB,EAAQ,UAAU;AACxE,QAAIylB,MAAU,iBACZA,IAAQzlB,EAAQ,QAAQ,UAExBylB,IAAQQ,GAAYR,GAAOzlB,EAAQ,eAAe,MAAM,GAE1DA,IAAU,OAAO,OAAO,CAAA,GAAIA,GAAS,EAAE,MAAMylB,GAAO,GACpDrI,EAAE,QAAQ,KAAK,KAAK,QAAQ,KAAK0K,EAAM,OAAO7nB,GAAGC,GAAG6D,GAAU/D,GAASgkB,CAAI,CAAC;AAAA,MAC9E;AACA,aAAO5G;AAAA,IACT;AAAA,EACF;AACA,EAAAA,EAAE,OAAOpd,EAAQ,QAAQ,KAAK,KAAK,MACnCod,EAAE,SAAS,KAAK,KAAK,QACrBA,EAAE,cAAc,KAAK,KAAK,cAAcuK;AACxC,WAAS/hB,IAAI,GAAGA,IAAI0E,EAAS,QAAQ1E,KAAK,GAAG;AAC3C,UAAM+E,IAAML,EAAS1E,CAAC;AACtB,IAAI+E,EAAI,SAAS,MACfyS,EAAE,OAAOnd,IAAI0K,EAAI,IAAI8c,GAAQvnB,IAAI,CAACyK,EAAI,IAAI+c,CAAM,IACvC/c,EAAI,SAAS,MACtByS,EAAE,OAAOnd,IAAI0K,EAAI,IAAI8c,GAAQvnB,IAAI,CAACyK,EAAI,IAAI+c,CAAM,IACvC/c,EAAI,SAAS,MACtByS,EAAE;AAAA,MACAnd,IAAI0K,EAAI,KAAK8c;AAAA,MACbvnB,IAAI,CAACyK,EAAI,KAAK+c;AAAA,MACdznB,IAAI0K,EAAI,IAAI8c;AAAA,MACZvnB,IAAI,CAACyK,EAAI,IAAI+c;AAAA,IACrB,IACe/c,EAAI,SAAS,MACtByS,EAAE;AAAA,MACAnd,IAAI0K,EAAI,KAAK8c;AAAA,MACbvnB,IAAI,CAACyK,EAAI,KAAK+c;AAAA,MACdznB,IAAI0K,EAAI,KAAK8c;AAAA,MACbvnB,IAAI,CAACyK,EAAI,KAAK+c;AAAA,MACdznB,IAAI0K,EAAI,IAAI8c;AAAA,MACZvnB,IAAI,CAACyK,EAAI,IAAI+c;AAAA,IACrB,IACe/c,EAAI,SAAS,OAAOyS,EAAE,UAAUA,EAAE,eAC3CA,EAAE,UAAS;AAAA,EAEf;AACA,SAAOA;AACT;AACAkK,EAAM,UAAU,YAAY,SAAStD,GAAM;AACzC,MAAI,CAACA;AACH,UAAM,IAAI,MAAM,sFAAsF;AAExG,SAAOA,EAAK,OAAO,IAAI,KAAK,KAAK;AACnC;AACAsD,EAAM,UAAU,cAAc,SAAStD,GAAM;AAC3C,MAAI,CAACA;AACH,UAAM,IAAI,MAAM,8EAA8E;AAEhG,SAAOA,EAAK,UAAU,IAAI,KAAK,KAAK;AACtC;AACAsD,EAAM,UAAU,cAAc,SAASS,IAAoB,MAAM;AAC/D,MAAI,KAAK,WAAW,UAAU,CAACA;AAC7B,WAAO,CAAA;AAET,QAAMC,IAAW,CAAA;AACjB,MAAIC,IAAiB,CAAA,GACjB1lB,IAASwlB,KAAwC,KAAK;AAC1D,WAASniB,IAAI,GAAGA,IAAIrD,EAAO,QAAQqD,KAAK,GAAG;AACzC,UAAMsiB,IAAK3lB,EAAOqD,CAAC;AACnB,IAAAqiB,EAAe,KAAKC,CAAE,GAClBA,EAAG,uBACLF,EAAS,KAAKC,CAAc,GAC5BA,IAAiB,CAAA;AAAA,EAErB;AACA,SAAAha,EAAc,SAASga,EAAe,WAAW,GAAG,qDAAqD,GAClGD;AACT;AACAV,EAAM,UAAU,aAAa,WAAW;AACtC,QAAMhd,IAAW,KAAK,KAAK,UACrB6d,IAAU,CAAA,GACVC,IAAU,CAAA;AAChB,WAASxiB,IAAI,GAAGA,IAAI0E,EAAS,QAAQ1E,KAAK,GAAG;AAC3C,UAAM+E,IAAML,EAAS1E,CAAC;AACtB,IAAI+E,EAAI,SAAS,QACfwd,EAAQ,KAAKxd,EAAI,CAAC,GAClByd,EAAQ,KAAKzd,EAAI,CAAC,KAEhBA,EAAI,SAAS,OAAOA,EAAI,SAAS,SACnCwd,EAAQ,KAAKxd,EAAI,EAAE,GACnByd,EAAQ,KAAKzd,EAAI,EAAE,IAEjBA,EAAI,SAAS,QACfwd,EAAQ,KAAKxd,EAAI,EAAE,GACnByd,EAAQ,KAAKzd,EAAI,EAAE;AAAA,EAEvB;AACA,QAAM0d,IAAU;AAAA,IACd,MAAM,KAAK,IAAI,MAAM,MAAMF,CAAO;AAAA,IAClC,MAAM,KAAK,IAAI,MAAM,MAAMC,CAAO;AAAA,IAClC,MAAM,KAAK,IAAI,MAAM,MAAMD,CAAO;AAAA,IAClC,MAAM,KAAK,IAAI,MAAM,MAAMC,CAAO;AAAA,IAClC,iBAAiB,KAAK;AAAA,EAC1B;AACE,SAAK,SAASC,EAAQ,IAAI,MACxBA,EAAQ,OAAO,IAEZ,SAASA,EAAQ,IAAI,MACxBA,EAAQ,OAAO,KAAK,eAEjB,SAASA,EAAQ,IAAI,MACxBA,EAAQ,OAAO,IAEZ,SAASA,EAAQ,IAAI,MACxBA,EAAQ,OAAO,IAEjBA,EAAQ,mBAAmB,KAAK,eAAeA,EAAQ,mBAAmBA,EAAQ,OAAOA,EAAQ,OAC1FA;AACT;AACAf,EAAM,UAAU,OAAO,SAASroB,GAAKgB,GAAGC,GAAG6D,GAAU/D,GAASgkB,GAAM;AAClE,EAAAhkB,IAAU,OAAO,OAAO,CAAA,GAAIgkB,KAAQA,EAAK,sBAAsBhkB,CAAO,GACzD,KAAK,QAAQC,GAAGC,GAAG6D,GAAU/D,GAASgkB,CAAI,EAClD,KAAK/kB,CAAG;AACf;AACAqoB,EAAM,UAAU,aAAa,SAASroB,GAAKgB,GAAGC,GAAG6D,GAAU/D,GAASgkB,GAAM;AAExE,MADAhkB,IAAU,OAAO,OAAO,CAAA,GAAIgkB,KAAQA,EAAK,sBAAsBhkB,CAAO,GAClEA,EAAQ,YAAY;AACtB,UAAMgN,IAAS,KAAK,UAAUgX,CAAI;AAClC,QAAIhX,KAAUA,EAAO,QAAQ;AAC3B,eAASC,IAAI,GAAGA,IAAID,EAAO,QAAQC,KAAK;AACtC,QAAID,EAAOC,CAAC,EAAE,MAAM,UAAU,KAAK,SACjC,KAAK,WAAW,KAAKD,EAAOC,CAAC,EAAE,OAAOhO,GAAKgB,GAAGC,GAAG6D,CAAQ;AAG7D;AAAA,IACF;AAAA,EACF;AACA,WAASukB,EAAYrb,GAAGtE,GAAIC,GAAI2f,GAAQ;AACtC,IAAAtpB,EAAI,UAAS;AACb,aAASoQ,IAAI,GAAGA,IAAIpC,EAAE,QAAQoC,KAAK;AACjC,MAAApQ,EAAI,OAAO0J,IAAKsE,EAAEoC,CAAC,EAAE,IAAIkZ,GAAQ3f,IAAKqE,EAAEoC,CAAC,EAAE,IAAIkZ,CAAM,GACrDtpB,EAAI,IAAI0J,IAAKsE,EAAEoC,CAAC,EAAE,IAAIkZ,GAAQ3f,IAAKqE,EAAEoC,CAAC,EAAE,IAAIkZ,GAAQ,GAAG,GAAG,KAAK,KAAK,GAAG,EAAK;AAE9E,IAAAtpB,EAAI,KAAI;AAAA,EACV;AACA,EAAAgB,IAAIA,MAAM,SAASA,IAAI,GACvBC,IAAIA,MAAM,SAASA,IAAI,GACvB6D,IAAWA,MAAa,SAASA,IAAW;AAC5C,QAAM4jB,IAAQ,IAAI,KAAK,KAAK,aAAa5jB,GACnCykB,IAAc,CAAA,GACdC,IAAa,CAAA;AAEnB,MAAIne,IADS,KAAK,KACE;AACpB,EAAI0Z,KAAQA,EAAK,cACf1Z,IAAW0Z,EAAK,UAAU,aAAa,MAAMhkB,EAAQ,SAAS,EAAE,KAAK;AAEvE,WAAS4F,IAAI,GAAGA,IAAI0E,EAAS,QAAQ1E,KAAK,GAAG;AAC3C,UAAM+E,IAAML,EAAS1E,CAAC;AACtB,IAAI+E,EAAI,MAAM,UACZ6d,EAAY,KAAK,EAAE,GAAG7d,EAAI,GAAG,GAAG,CAACA,EAAI,GAAG,GAEtCA,EAAI,OAAO,UACb8d,EAAW,KAAK,EAAE,GAAG9d,EAAI,IAAI,GAAG,CAACA,EAAI,IAAI,GAEvCA,EAAI,OAAO,UACb8d,EAAW,KAAK,EAAE,GAAG9d,EAAI,IAAI,GAAG,CAACA,EAAI,IAAI;AAAA,EAE7C;AACA,EAAA1L,EAAI,YAAY,QAChBqpB,EAAYE,GAAavoB,GAAGC,GAAGynB,CAAK,GACpC1oB,EAAI,YAAY,OAChBqpB,EAAYG,GAAYxoB,GAAGC,GAAGynB,CAAK;AACrC;AACAL,EAAM,UAAU,cAAc,SAASroB,GAAKgB,GAAGC,GAAG6D,GAAU;AAC1D,MAAI4jB;AACJ,EAAA1nB,IAAIA,MAAM,SAASA,IAAI,GACvBC,IAAIA,MAAM,SAASA,IAAI,GACvB6D,IAAWA,MAAa,SAASA,IAAW,IAC5C4jB,IAAQ,IAAI,KAAK,KAAK,aAAa5jB,GACnC9E,EAAI,YAAY,GAChBA,EAAI,cAAc,SAClB6lB,GAAa,KAAK7lB,GAAKgB,GAAG,MAAMA,GAAG,GAAG,GACtC6kB,GAAa,KAAK7lB,GAAK,MAAMiB,GAAG,KAAKA,CAAC;AACtC,QAAMwoB,IAAO,KAAK,QAAQ;AAC1B,MAAIC,IAAO,KAAK,QAAQ;AACxB,QAAMC,IAAO,KAAK,QAAQ;AAC1B,MAAIC,IAAO,KAAK,QAAQ;AACxB,QAAMC,IAAe,KAAK,gBAAgB;AAC1C,EAAA7pB,EAAI,cAAc,QAClB6lB,GAAa,KAAK7lB,GAAKgB,IAAIyoB,IAAOf,GAAO,MAAM1nB,IAAIyoB,IAAOf,GAAO,GAAG,GACpE7C,GAAa,KAAK7lB,GAAKgB,IAAI2oB,IAAOjB,GAAO,MAAM1nB,IAAI2oB,IAAOjB,GAAO,GAAG,GACpE7C,GAAa,KAAK7lB,GAAK,MAAMiB,IAAI,CAACyoB,IAAOhB,GAAO,KAAKznB,IAAI,CAACyoB,IAAOhB,CAAK,GACtE7C,GAAa,KAAK7lB,GAAK,MAAMiB,IAAI,CAAC2oB,IAAOlB,GAAO,KAAKznB,IAAI,CAAC2oB,IAAOlB,CAAK,GACtE1oB,EAAI,cAAc,SAClB6lB,GAAa,KAAK7lB,GAAKgB,IAAI6oB,IAAenB,GAAO,MAAM1nB,IAAI6oB,IAAenB,GAAO,GAAG;AACtF;AACAL,EAAM,UAAU,aAAa,SAAStnB,GAASgkB,GAAM;AACnD,EAAAhkB,IAAU,OAAO,OAAO,CAAA,GAAI,EAAE,WAAWgkB,KAAQA,EAAK,qBAAqB,UAAS,GAAIhkB,CAAO;AAC/F,MAAI4nB,IAAW;AACf,EAAI5D,KAAQA,EAAK,cACf4D,IAAW5D,EAAK,UAAU,aAAa,MAAMhkB,EAAQ,SAAS;AAEhE,MAAI+oB,IAAUnB,EAAS,UAAU5nB,EAAQ,kBAAkBA,EAAQ,gBAAgB4nB,EAAS,MAAM,IAAIA,EAAS;AAC/G,SAAI5nB,EAAQ,kBACV+oB,IAAU/oB,EAAQ,cAAc+oB,CAAO,IAElCA,EAAQ,WAAW/oB,CAAO;AACnC;AACAsnB,EAAM,UAAU,UAAU,SAASpc,GAAUlL,IAAU,CAAA,GAAI;AACzD,SAAO,KAAK,KAAK,QAAQkL,GAAUlL,CAAO;AAC5C;AACAsnB,EAAM,UAAU,QAAQ,SAAStnB,GAASgkB,GAAM;AAC9C,QAAM9Y,IAAW,KAAK,WAAW,MAAM,MAAM,CAAClL,GAASgkB,CAAI,CAAC;AAC5D,SAAO,KAAK,KAAK,MAAMhkB,GAASkL,CAAQ;AAC1C;AACAoc,EAAM,UAAU,eAAe,SAAStnB,GAASgkB,GAAM;AACrD,EAAAhkB,IAAU,OAAO,OAAO,CAAA,GAAI,EAAE,WAAWgkB,KAAQA,EAAK,qBAAqB,UAAS,GAAIhkB,CAAO;AAC/F,MAAI+oB,IAAU,KAAK;AACnB,SAAI/E,KAAQA,EAAK,cACf+E,IAAU/E,EAAK,UAAU,aAAa,MAAMhkB,EAAQ,SAAS,EAAE,OAE1D+oB,EAAQ,aAAa/oB,CAAO;AACrC;AACA,IAAIgpB,KAAgB1B;AAGpB,SAAS2B,GAAwBpO,GAAOqO,GAAcC,GAAc;AAClE,SAAO,eAAetO,GAAOqO,GAAc;AAAA,IACzC,KAAK,WAAW;AACd,oBAAOrO,EAAMsO,CAAY,IAAM,OAAetO,EAAM,MAC7CA,EAAMsO,CAAY;AAAA,IAC3B;AAAA,IACA,KAAK,SAASC,GAAU;AACtB,MAAAvO,EAAMsO,CAAY,IAAIC;AAAA,IACxB;AAAA,IACA,YAAY;AAAA,IACZ,cAAc;AAAA,EAClB,CAAG;AACH;AACA,SAASC,GAASrF,GAAM7K,GAAQ;AAG9B,MAFA,KAAK,OAAO6K,GACZ,KAAK,SAAS,CAAA,GACV,MAAM,QAAQ7K,CAAM;AACtB,aAASvT,IAAI,GAAGA,IAAIuT,EAAO,QAAQvT,KAAK;AACtC,YAAMiV,IAAQ1B,EAAOvT,CAAC;AACtB,MAAAiV,EAAM,KAAK,aAAamJ,EAAK,YAC7B,KAAK,OAAOpe,CAAC,IAAIiV;AAAA,IACnB;AAEF,OAAK,SAAS1B,KAAUA,EAAO,UAAU;AAC3C;AACI,OAAO,SAAW,OAAe,OAAO,aAC1CkQ,GAAS,UAAU,OAAO,QAAQ,IAAI,WAAW;AAC/C,MAAI3Q,IAAI;AACR,SAAO;AAAA,IACL,OAAM,WAAW;AACf,MAAAA;AACA,YAAM4Q,IAAO5Q,KAAK,KAAK,SAAS;AAChC,aAAO,EAAE,OAAO,KAAK,IAAIA,CAAC,GAAG,MAAA4Q,EAAI;AAAA,IACnC,GAAE,KAAK,IAAI;AAAA,EACjB;AACE;AAEFD,GAAS,UAAU,MAAM,SAASxD,GAAO;AACvC,MAAI,KAAK,KAAK,SAAS,KAAK,OAAOA,CAAK,MAAM,QAAQ;AACpD,SAAK,KAAK,MAAMA,CAAK,GACjB,OAAO,KAAK,OAAOA,CAAK,KAAM,eAChC,KAAK,OAAOA,CAAK,IAAI,KAAK,OAAOA,CAAK,EAAC;AAEzC,QAAIhL,IAAQ,KAAK,OAAOgL,CAAK,GACzB0D,IAAa,KAAK,KAAK,mBAAmB1D,CAAK;AACnD,QAAI0D;AACF,eAASla,IAAI,GAAGA,IAAIka,EAAW,SAAS,QAAQla;AAC9C,QAAAwL,EAAM,WAAW0O,EAAW,SAASla,CAAC,CAAC;AAE3C,IAAI,KAAK,KAAK,cACZwL,EAAM,OAAO,KAAK,KAAK,YAAY,QAAQgL,CAAK,IACvC,KAAK,KAAK,WAAW,UAC9BhL,EAAM,OAAO,KAAK,KAAK,WAAW,iBAAiBgL,CAAK,IAE1D,KAAK,OAAOA,CAAK,EAAE,eAAe,KAAK,KAAK,eAAeA,CAAK,EAAE,cAClE,KAAK,OAAOA,CAAK,EAAE,kBAAkB,KAAK,KAAK,eAAeA,CAAK,EAAE;AAAA,EACvE;AACE,IAAI,OAAO,KAAK,OAAOA,CAAK,KAAM,eAChC,KAAK,OAAOA,CAAK,IAAI,KAAK,OAAOA,CAAK,EAAC;AAG3C,SAAO,KAAK,OAAOA,CAAK;AAC1B;AACAwD,GAAS,UAAU,OAAO,SAASxD,GAAO2D,GAAQ;AAChD,OAAK,OAAO3D,CAAK,IAAI2D,GACrB,KAAK;AACP;AACA,SAASC,GAAYzF,GAAM6B,GAAO;AAChC,SAAO,IAAImD,GAAc,EAAE,OAAAnD,GAAO,MAAA7B,EAAI,CAAE;AAC1C;AACA,SAAS0F,GAAe1F,GAAM6B,GAAO8D,GAAa1a,GAAM2a,GAAUC,GAAY;AAC5E,SAAO,WAAW;AAChB,UAAMhP,IAAQ,IAAImO,GAAc,EAAE,OAAAnD,GAAO,MAAA7B,EAAI,CAAE;AAC/C,WAAAnJ,EAAM,OAAO,WAAW;AACtB,MAAA8O,EAAY9O,GAAO5L,GAAM2a,CAAQ;AACjC,YAAMjd,IAAOkd,EAAW7F,EAAK,QAAQnJ,CAAK;AAC1C,aAAAlO,EAAK,aAAaqX,EAAK,YAChBrX;AAAA,IACT,GACAsc,GAAwBpO,GAAO,oBAAoB,mBAAmB,GACtEoO,GAAwBpO,GAAO,QAAQ,OAAO,GAC9CoO,GAAwBpO,GAAO,QAAQ,OAAO,GAC9CoO,GAAwBpO,GAAO,QAAQ,OAAO,GAC9CoO,GAAwBpO,GAAO,QAAQ,OAAO,GAC9CoO,GAAwBpO,GAAO,UAAU,SAAS,GAC3CA;AAAA,EACT;AACF;AACA,SAASiP,GAAe9F,GAAM6B,GAAOkE,GAAqBC,GAAYhF,GAAS;AAC7E,SAAO,WAAW;AAChB,UAAMnK,IAAQ,IAAImO,GAAc,EAAE,OAAAnD,GAAO,MAAA7B,EAAI,CAAE;AAC/C,WAAAnJ,EAAM,OAAO,WAAW;AACtB,YAAMlO,IAAOod,EAAoB/F,GAAMnJ,GAAOmP,GAAYhF,CAAO;AACjE,aAAArY,EAAK,aAAaqX,EAAK,YAChBrX;AAAA,IACT,GACOkO;AAAA,EACT;AACF;AACA,IAAIoP,KAAmB,EAAE,UAAAZ,IAAU,aAAAI,IAAa,gBAAAC,IAAgB,gBAAAI,GAAc;AAG9E,SAASI,GAAOhhB,GAAGD,GAAG;AACpB,MAAIC,MAAMD;AACR,WAAO;AACF,MAAI,MAAM,QAAQC,CAAC,KAAK,MAAM,QAAQD,CAAC,GAAG;AAC/C,QAAIC,EAAE,WAAWD,EAAE;AACjB,aAAO;AAET,aAASrD,IAAI,GAAGA,IAAIsD,EAAE,QAAQtD,KAAK;AACjC,UAAI,CAACskB,GAAOhhB,EAAEtD,CAAC,GAAGqD,EAAErD,CAAC,CAAC;AACpB,eAAO;AAGX,WAAO;AAAA,EACT;AACE,WAAO;AAEX;AACA,IAAIukB,KAAiB;AACrB,SAASC,GAAsBC,GAAO;AACpC,MAAIC;AACJ,SAAID,EAAM,SAAS,OACjBC,IAAO,MACED,EAAM,SAAS,QACxBC,IAAO,OAEPA,IAAO,OAEFA;AACT;AACA,SAASC,GAActb,GAAM2H,GAAO4T,GAAcxF,GAAS;AACzD,QAAMlU,IAAU,CAAA,GACV2Z,IAAU,CAAA,GACVjY,IAAQwS,IAAU,IAAI9I,EAAc,SAASjN,GAAM2H,CAAK,IAAIsF,EAAc,UAAUjN,GAAM2H,CAAK,GAC/F8T,IAAc1F,IAAU,IAAI,IAAI;AACtC,MAAI2F,GACA1V;AACJ,MAAIzC,MAAU,GAAG;AACf,UAAMoY,IAAa1O,EAAc,QAAQjN,GAAM2H,IAAQ8T,CAAW;AAClE,IAAAC,IAAe/T,KAASpE,IAAQ,KAAKoY,IAAaF;AAClD,QAAIja,IAAMmG,IAAQ8T,IAAc;AAChC,aAAS9kB,IAAI,GAAGA,IAAI4M,IAAQ,GAAG5M,KAAK;AAClC,MAAAkL,EAAQ,KAAKoL,EAAc,UAAUjN,GAAMwB,GAAKma,CAAU,CAAC,GAC3Dna,KAAOma;AAET,IAAA3V,IAAY0V,IAAe7Z,EAAQ0B,CAAK;AAAA,EAC1C;AACE,IAAAyC,IAAY2B,IAAQ8T;AAEtB,WAAS9kB,IAAI,GAAGA,IAAIkL,EAAQ,SAAS,GAAGlL,KAAK,GAAG;AAC9C,QAAI+I,IAAQuN,EAAc,SAASjN,GAAM0b,IAAe7Z,EAAQlL,CAAC,GAAG+kB,IAAe7Z,EAAQlL,IAAI,CAAC,CAAC;AACjG,IAAI4kB,MACF7b,IAAQ6b,EAAa7b,GAAOM,GAAM2H,GAAOoO,CAAO,IAElDyF,EAAQ,KAAK9b,CAAK;AAAA,EACpB;AACA,SAAO,EAAE,SAAA8b,GAAS,aAAa7T,GAAO,WAAA3B,EAAS;AACjD;AACA,SAAS4V,GAAuB5b,GAAM2H,GAAOoO,GAAS;AACpD,QAAMlU,IAAU,CAAA,GACV0B,IAAQwS,IAAU,IAAI9I,EAAc,SAASjN,GAAM2H,CAAK,IAAIsF,EAAc,UAAUjN,GAAM2H,CAAK,GAC/F8T,IAAc1F,IAAU,IAAI,IAAI;AACtC,MAAI2F,GACA1V;AACJ,MAAIzC,MAAU,GAAG;AACf,UAAMoY,IAAa1O,EAAc,QAAQjN,GAAM2H,IAAQ8T,CAAW;AAClE,IAAAC,IAAe/T,KAASpE,IAAQ,KAAKoY,IAAaF;AAClD,QAAIja,IAAMmG,IAAQ8T,IAAc;AAChC,aAAS9kB,IAAI,GAAGA,IAAI4M,IAAQ,GAAG5M,KAAK;AAClC,MAAAkL,EAAQ,KAAKoL,EAAc,UAAUjN,GAAMwB,GAAKma,CAAU,CAAC,GAC3Dna,KAAOma;AAET,IAAA3V,IAAY0V,IAAe7Z,EAAQ0B,CAAK;AAAA,EAC1C;AACE,IAAAyC,IAAY2B,IAAQ8T;AAEtB,SAAO,EAAE,SAAA5Z,GAAS,aAAa8F,GAAO,WAAA3B,EAAS;AACjD;AACA,SAAS6V,GAAkBllB,GAAGkL,GAAS7B,GAAM2H,GAAO4T,GAAcxF,GAAS;AACzE,QAAMxS,IAAQwS,IAAU,IAAI9I,EAAc,SAASjN,GAAM2H,CAAK,IAAIsF,EAAc,UAAUjN,GAAM2H,CAAK,GAC/F8T,IAAc1F,IAAU,IAAI,IAAI;AACtC,MAAI2F,IAAe;AACnB,MAAInY,MAAU,GAAG;AACf,UAAMoY,IAAa1O,EAAc,QAAQjN,GAAM2H,IAAQ8T,CAAW;AAClE,IAAAC,IAAe/T,KAASpE,IAAQ,KAAKoY,IAAaF;AAAA,EACpD;AAKA,SAJYxO,EAAc,SAASjN,GAAM0b,IAAe7Z,EAAQlL,CAAC,GAAG+kB,IAAe7Z,EAAQlL,IAAI,CAAC,CAAC;AAKnG;AACA,SAASmlB,GAAkBC,GAAQ;AACjC,MAAIzd,IAAI;AAER,QAAM0d,IAAS,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,GAAG;AAC3F,aAAW;AACT,UAAMhiB,IAAI+hB,EAAO,UAAS,GACpBE,IAAKjiB,KAAK,GACVkiB,IAAKliB,IAAI;AAKf,QAJIiiB,MAAO,OAGX3d,KAAK0d,EAAOC,CAAE,GACVC,MAAO;AACT;AAEF,IAAA5d,KAAK0d,EAAOE,CAAE;AAAA,EAChB;AACA,SAAO,WAAW5d,CAAC;AACrB;AACA,SAAS6d,GAAaJ,GAAQK,GAAI;AAChC,MAAIC,GACAC,GACAC,GACAC;AACJ,MAAIJ,MAAO;AACT,WAAAC,IAAKN,EAAO,UAAS,GACrBO,IAAKP,EAAO,UAAS,GACdM,KAAM,IAAIC;AAEnB,MAAIF,MAAO;AACT,WAAAC,IAAKN,EAAO,UAAS,GACrBO,IAAKP,EAAO,UAAS,GACrBQ,IAAKR,EAAO,UAAS,GACrBS,IAAKT,EAAO,UAAS,GACdM,KAAM,KAAKC,KAAM,KAAKC,KAAM,IAAIC;AAEzC,MAAIJ,MAAO;AACT,WAAON,GAAkBC,CAAM;AAEjC,MAAIK,KAAM,MAAMA,KAAM;AACpB,WAAOA,IAAK;AAEd,MAAIA,KAAM,OAAOA,KAAM;AACrB,WAAAC,IAAKN,EAAO,UAAS,IACbK,IAAK,OAAO,MAAMC,IAAK;AAEjC,MAAID,KAAM,OAAOA,KAAM;AACrB,WAAAC,IAAKN,EAAO,UAAS,GACd,EAAEK,IAAK,OAAO,MAAMC,IAAK;AAElC,QAAM,IAAI,MAAM,gBAAgBD,CAAE;AACpC;AACA,SAASK,GAAgBC,GAAS;AAChC,QAAMC,IAAI,CAAA;AACV,WAAShmB,IAAI,GAAGA,IAAI+lB,EAAQ,QAAQ/lB,KAAK,GAAG;AAC1C,UAAMoY,IAAM2N,EAAQ/lB,CAAC,EAAE,CAAC,GAClB6Q,IAASkV,EAAQ/lB,CAAC,EAAE,CAAC;AAC3B,QAAI+I;AAMJ,QALI8H,EAAO,WAAW,IACpB9H,IAAQ8H,EAAO,CAAC,IAEhB9H,IAAQ8H,GAEN,OAAO,UAAU,eAAe,KAAKmV,GAAG5N,CAAG,KAAK,CAAC,MAAM4N,EAAE5N,CAAG,CAAC;AAC/D,YAAM,IAAI,MAAM,YAAY4N,IAAI,sBAAsB5N,CAAG;AAE3D,IAAA4N,EAAE5N,CAAG,IAAIrP;AAAA,EACX;AACA,SAAOid;AACT;AACA,SAASC,GAAa5c,GAAM2H,GAAOkV,GAAM9G,GAAS;AAChD,EAAApO,IAAQA,MAAU,SAASA,IAAQ;AACnC,QAAMoU,IAAS,IAAI9O,EAAc,OAAOjN,GAAM2H,CAAK,GAC7C+U,IAAU,CAAA;AAChB,MAAII,IAAW,CAAA;AACf,EAAAD,IAAOA,MAAS,SAASA,IAAO7c,EAAK;AACrC,MAAI+c,IAAgBhH,IAAU,IAAI,KAAK;AACvC,SAAOgG,EAAO,iBAAiBc,KAAM;AACnC,QAAIpa,IAAKsZ,EAAO,UAAS;AACzB,QAAItZ,IAAKsa,GAAe;AAItB,UAHIta,MAAO,OACTA,IAAK,OAAOsZ,EAAO,UAAS,IAE1BhG,IAAU,KAAKtT,MAAO,IAAI;AAC5B,QAAAua,GAAWF,CAAQ;AACnB;AAAA,MACF;AACA,MAAAJ,EAAQ,KAAK,CAACja,GAAIqa,CAAQ,CAAC,GAC3BA,IAAW,CAAA;AAAA,IACb;AACE,MAAAA,EAAS,KAAKX,GAAaJ,GAAQtZ,CAAW,CAAC;AAAA,EAEnD;AACA,SAAOga,GAAgBC,CAAO;AAChC;AACA,SAASO,GAAaC,GAAStG,GAAO;AACpC,SAAIA,KAAS,MACXA,IAAQrC,GAAmBqC,CAAK,IACvBsG,IACTtG,IAAQsG,EAAQtG,IAAQ,GAAG,IAE3BA,IAAQ,QAEHA;AACT;AACA,SAASuG,GAAcrO,GAAMsO,GAAMF,GAAS;AAC1C,QAAMG,IAAU,CAAA;AAChB,MAAI3d;AACJ,WAAS,IAAI,GAAG,IAAI0d,EAAK,QAAQ,KAAK,GAAG;AACvC,UAAMzd,IAAIyd,EAAK,CAAC;AAChB,QAAI,MAAM,QAAQzd,EAAE,IAAI,GAAG;AACzB,YAAM6H,IAAS,CAAA;AACf,MAAAA,EAAO,SAAS7H,EAAE,KAAK;AACvB,eAASS,IAAI,GAAGA,IAAIT,EAAE,KAAK,QAAQS;AACjC,QAAAV,IAAQoP,EAAKnP,EAAE,EAAE,MAAM,SAASmP,EAAKnP,EAAE,EAAE,EAAES,CAAC,IAAI,QAC5CV,MAAU,WACZA,IAAQC,EAAE,UAAU,UAAUA,EAAE,MAAMS,CAAC,MAAM,SAAST,EAAE,MAAMS,CAAC,IAAI,OAEjET,EAAE,KAAKS,CAAC,MAAM,UAChBV,IAAQud,GAAaC,GAASxd,CAAK,IAErC8H,EAAOpH,CAAC,IAAIV;AAEd,MAAA2d,EAAQ1d,EAAE,IAAI,IAAI6H;AAAA,IACpB;AACE,MAAA9H,IAAQoP,EAAKnP,EAAE,EAAE,GACbD,MAAU,WACZA,IAAQC,EAAE,UAAU,SAASA,EAAE,QAAQ,OAErCA,EAAE,SAAS,UACbD,IAAQud,GAAaC,GAASxd,CAAK,IAErC2d,EAAQ1d,EAAE,IAAI,IAAID;AAAA,EAEtB;AACA,SAAO2d;AACT;AACA,SAASC,GAAetd,GAAM2H,GAAO;AACnC,QAAMwD,IAAS,CAAA;AAGf,MAFAA,EAAO,cAAc8B,EAAc,SAASjN,GAAM2H,CAAK,GACvDwD,EAAO,cAAc8B,EAAc,SAASjN,GAAM2H,IAAQ,CAAC,GACvDwD,EAAO,cAAc;AACvB,UAAM,IAAI,MAAM,iCAAiCA,EAAO,WAAW,IAAIA,EAAO,WAAW,EAAE;AAE7F,SAAAA,EAAO,OAAO8B,EAAc,SAASjN,GAAM2H,IAAQ,CAAC,GAChDwD,EAAO,cAAc,KACvBA,EAAO,aAAa8B,EAAc,SAASjN,GAAM2H,IAAQ,CAAC,GAC1DwD,EAAO,cAAcxD,GACrBwD,EAAO,YAAYxD,IAAQ,MAE3BwD,EAAO,gBAAgB8B,EAAc,UAAUjN,GAAM2H,IAAQ,CAAC,GAC9DwD,EAAO,YAAYxD,IAAQ,IAEtBwD;AACT;AACA,IAAIoS,KAAgB;AAAA,EAClB,EAAE,MAAM,WAAW,IAAI,GAAG,MAAM,MAAK;AAAA,EACrC,EAAE,MAAM,UAAU,IAAI,GAAG,MAAM,MAAK;AAAA,EACpC,EAAE,MAAM,aAAa,IAAI,MAAM,MAAM,MAAK;AAAA,EAC1C,EAAE,MAAM,YAAY,IAAI,GAAG,MAAM,MAAK;AAAA,EACtC,EAAE,MAAM,cAAc,IAAI,GAAG,MAAM,MAAK;AAAA,EACxC,EAAE,MAAM,UAAU,IAAI,GAAG,MAAM,MAAK;AAAA,EACpC,EAAE,MAAM,gBAAgB,IAAI,MAAM,MAAM,UAAU,OAAO,EAAC;AAAA,EAC1D,EAAE,MAAM,eAAe,IAAI,MAAM,MAAM,UAAU,OAAO,EAAC;AAAA,EACzD,EAAE,MAAM,qBAAqB,IAAI,MAAM,MAAM,UAAU,OAAO,KAAI;AAAA,EAClE,EAAE,MAAM,sBAAsB,IAAI,MAAM,MAAM,UAAU,OAAO,GAAE;AAAA,EACjE,EAAE,MAAM,aAAa,IAAI,MAAM,MAAM,UAAU,OAAO,EAAC;AAAA,EACvD,EAAE,MAAM,kBAAkB,IAAI,MAAM,MAAM,UAAU,OAAO,EAAC;AAAA,EAC5D;AAAA,IACE,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,MAAM,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,MAAM;AAAA,IACrD,OAAO,CAAC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC;AAAA,EAClC;AAAA,EACE,EAAE,MAAM,YAAY,IAAI,IAAI,MAAM,SAAQ;AAAA,EAC1C,EAAE,MAAM,YAAY,IAAI,GAAG,MAAM,CAAC,UAAU,UAAU,UAAU,QAAQ,GAAG,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,EAAC;AAAA,EAC9F,EAAE,MAAM,eAAe,IAAI,MAAM,MAAM,UAAU,OAAO,EAAC;AAAA,EACzD,EAAE,MAAM,QAAQ,IAAI,IAAI,MAAM,CAAA,GAAI,OAAO,KAAI;AAAA,EAC7C,EAAE,MAAM,WAAW,IAAI,IAAI,MAAM,UAAU,OAAO,EAAC;AAAA,EACnD,EAAE,MAAM,YAAY,IAAI,IAAI,MAAM,UAAU,OAAO,EAAC;AAAA,EACpD,EAAE,MAAM,eAAe,IAAI,IAAI,MAAM,UAAU,OAAO,EAAC;AAAA,EACvD,EAAE,MAAM,WAAW,IAAI,IAAI,MAAM,CAAC,UAAU,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,EAAC;AAAA,EACpE,EAAE,MAAM,OAAO,IAAI,MAAM,MAAM,CAAC,OAAO,OAAO,QAAQ,EAAC;AAAA,EACvD,EAAE,MAAM,kBAAkB,IAAI,MAAM,MAAM,UAAU,OAAO,EAAC;AAAA,EAC5D,EAAE,MAAM,mBAAmB,IAAI,MAAM,MAAM,UAAU,OAAO,EAAC;AAAA,EAC7D,EAAE,MAAM,eAAe,IAAI,MAAM,MAAM,UAAU,OAAO,EAAC;AAAA,EACzD,EAAE,MAAM,YAAY,IAAI,MAAM,MAAM,UAAU,OAAO,KAAI;AAAA,EACzD,EAAE,MAAM,WAAW,IAAI,MAAM,MAAM,SAAQ;AAAA,EAC3C,EAAE,MAAM,WAAW,IAAI,MAAM,MAAM,SAAQ;AAAA,EAC3C,EAAE,MAAM,YAAY,IAAI,MAAM,MAAM,SAAQ;AAAA,EAC5C,EAAE,MAAM,YAAY,IAAI,MAAM,MAAM,MAAK;AAC3C,GACIC,KAAqB;AAAA,EACvB;AAAA,IACE,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,MAAM,CAAC,QAAQ,QAAQ,QAAQ,QAAQ,QAAQ,MAAM;AAAA,IACrD,OAAO,CAAC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC;AAAA,EAClC;AAAA,EACE,EAAE,MAAM,eAAe,IAAI,IAAI,MAAM,SAAQ;AAAA,EAC7C,EAAE,MAAM,WAAW,IAAI,MAAM,MAAM,SAAQ;AAAA,EAC3C,EAAE,MAAM,YAAY,IAAI,MAAM,MAAM,SAAQ;AAAA,EAC5C,EAAE,MAAM,UAAU,IAAI,IAAI,MAAM,SAAQ;AAC1C,GACIC,KAAoB;AAAA,EACtB,EAAE,MAAM,SAAS,IAAI,IAAI,MAAM,UAAU,OAAO,EAAC;AAAA,EACjD,EAAE,MAAM,iBAAiB,IAAI,IAAI,MAAM,UAAU,OAAO,EAAC;AAAA,EACzD,EAAE,MAAM,iBAAiB,IAAI,IAAI,MAAM,UAAU,OAAO,EAAC;AAC3D,GACIC,KAAyB;AAAA,EAC3B,EAAE,MAAM,cAAc,IAAI,GAAG,MAAM,QAAO;AAAA,EAC1C,EAAE,MAAM,cAAc,IAAI,GAAG,MAAM,QAAO;AAAA,EAC1C,EAAE,MAAM,eAAe,IAAI,GAAG,MAAM,QAAO;AAAA,EAC3C,EAAE,MAAM,eAAe,IAAI,GAAG,MAAM,QAAO;AAAA,EAC3C,EAAE,MAAM,oBAAoB,IAAI,GAAG,MAAM,QAAO;AAAA,EAChD,EAAE,MAAM,aAAa,IAAI,MAAM,MAAM,UAAU,OAAO,SAAQ;AAAA,EAC9D,EAAE,MAAM,aAAa,IAAI,MAAM,MAAM,UAAU,OAAO,EAAC;AAAA,EACvD,EAAE,MAAM,YAAY,IAAI,MAAM,MAAM,UAAU,OAAO,EAAC;AAAA,EACtD,EAAE,MAAM,SAAS,IAAI,IAAI,MAAM,SAAQ;AAAA,EACvC,EAAE,MAAM,SAAS,IAAI,IAAI,MAAM,SAAQ;AAAA,EACvC,EAAE,MAAM,aAAa,IAAI,MAAM,MAAM,SAAQ;AAAA,EAC7C,EAAE,MAAM,aAAa,IAAI,MAAM,MAAM,SAAQ;AAAA,EAC7C,EAAE,MAAM,iBAAiB,IAAI,MAAM,MAAM,UAAU,OAAO,EAAC;AAAA,EAC3D,EAAE,MAAM,mBAAmB,IAAI,MAAM,MAAM,UAAU,OAAO,KAAI;AAAA,EAChE,EAAE,MAAM,WAAW,IAAI,IAAI,MAAM,UAAU,OAAO,EAAC;AAAA,EACnD,EAAE,MAAM,SAAS,IAAI,IAAI,MAAM,SAAQ;AACzC,GACIC,KAAiB;AAAA,EACnB,EAAE,MAAM,WAAW,IAAI,IAAI,MAAM,CAAC,UAAU,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,EAAC;AACtE;AACA,SAASC,GAAgB5d,GAAM2H,GAAOuV,GAASnH,GAAS;AACtD,QAAMjH,IAAO8N,GAAa5c,GAAM2H,GAAO3H,EAAK,YAAY+V,CAAO;AAC/D,SAAOoH,GAAcrO,GAAMiH,IAAU,IAAIyH,KAAqBD,IAAeL,CAAO;AACtF;AACA,SAASW,GAAoB7d,GAAM2H,GAAOkV,GAAMK,GAASnH,GAAS;AAChE,QAAMjH,IAAO8N,GAAa5c,GAAM2H,GAAOkV,GAAM9G,CAAO;AACpD,SAAOoH,GAAcrO,GAAMiH,IAAU,IAAI2H,KAAyBD,IAAmBP,CAAO;AAC9F;AACA,SAASY,GAAc9d,GAAM2H,GAAOoO,GAAS;AAC3C,QAAMjH,IAAO8N,GAAa5c,GAAM2H,GAAO,QAAQoO,CAAO;AACtD,SAAOoH,GAAcrO,GAAM6O,EAAc;AAC3C;AACA,SAASI,GAAoB/d,GAAM2H,GAAOqW,GAAS;AACjD,QAAMC,IAAgB,CAAA;AACtB,WAAStnB,IAAI,GAAGA,IAAIqnB,EAAQ,QAAQrnB,KAAK;AACvC,UAAMunB,IAAe,IAAI,SAAS,IAAI,WAAWF,EAAQrnB,CAAC,CAAC,EAAE,MAAM,GAC7DwnB,IAAWL,GAAcI,GAAc,GAAG,CAAC,GAC3CE,IAAcD,EAAS,QAAQ,CAAC,GAChCE,IAAgBF,EAAS,QAAQ,CAAC;AACxC,QAAIC,MAAgB,KAAKC,MAAkB,GAAG;AAC5C,YAAMC,IAAcT,GAAoB7d,GAAMqe,IAAgB1W,GAAOyW,GAAa,CAAA,GAAI,CAAC;AACvF,UAAIE,EAAY,OAAO;AACrB,cAAMC,IAAaF,IAAgBC,EAAY,OACzCE,IAAYlD,GAActb,GAAMue,IAAa5W,GAAO,QAAQ,CAAC;AACnE,QAAAwW,EAAS,SAASK,EAAU,SAC5BL,EAAS,aAAahD,GAAsBgD,EAAS,MAAM;AAAA,MAC7D;AACA,MAAAA,EAAS,eAAeG;AAAA,IAC1B;AACA,IAAAL,EAAc,KAAKE,CAAQ;AAAA,EAC7B;AACA,SAAOF;AACT;AACA,SAASQ,GAAkBze,GAAM2H,GAAO+W,GAAUxB,GAASnH,GAAS;AAClE,QAAM4I,IAAe,CAAA;AACrB,WAASC,IAAW,GAAGA,IAAWF,EAAS,QAAQE,KAAY,GAAG;AAChE,UAAMC,IAAc,IAAI,SAAS,IAAI,WAAWH,EAASE,CAAQ,CAAC,EAAE,MAAM,GACpEE,IAAUlB,GAAgBiB,GAAa,GAAG3B,GAASnH,CAAO;AAChE,IAAA+I,EAAQ,SAAS,CAAA,GACjBA,EAAQ,aAAa,GACrBA,EAAQ,iBAAiB,GACzBA,EAAQ,iBAAiB;AACzB,UAAMV,IAAcrI,IAAU,IAAI+I,EAAQ,QAAQ,CAAC,IAAI,GACjDT,IAAgBtI,IAAU,IAAI+I,EAAQ,QAAQ,CAAC,IAAI;AACzD,QAAIV,MAAgB,KAAKC,MAAkB,GAAG;AAC5C,YAAMC,IAAcT,GAAoB7d,GAAMqe,IAAgB1W,GAAOyW,GAAalB,GAASnH,CAAO;AAGlG,UAFA+I,EAAQ,iBAAiBR,EAAY,eACrCQ,EAAQ,iBAAiBR,EAAY,eACjCA,EAAY,UAAU,GAAG;AAC3B,cAAMC,IAAaF,IAAgBC,EAAY,OACzCE,IAAYlD,GAActb,GAAMue,IAAa5W,GAAO,QAAQoO,CAAO;AACzE,QAAA+I,EAAQ,SAASN,EAAU,SAC3BM,EAAQ,aAAa3D,GAAsB2D,EAAQ,MAAM;AAAA,MAC3D;AACA,MAAAA,EAAQ,eAAeR;AAAA,IACzB;AACA,IAAAK,EAAa,KAAKG,CAAO;AAAA,EAC3B;AACA,SAAOH;AACT;AACA,SAASI,GAAgB/e,GAAM2H,GAAOqX,GAAS9B,GAAS+B,GAAW;AACjE,MAAIC,GACA3b;AACJ,QAAMwY,IAAS,IAAI9O,EAAc,OAAOjN,GAAM2H,CAAK;AACnD,EAAAqX,KAAW;AACX,QAAM9J,IAAU,CAAC,SAAS,GACpBpN,IAASiU,EAAO,WAAU;AAChC,MAAIjU,MAAW;AACb,aAASnR,IAAI,GAAGA,IAAIqoB,GAASroB,KAAK;AAChC,MAAAuoB,IAAMnD,EAAO,SAAQ,GACjBkD,IACF/J,EAAQ,KAAKgK,CAAG,IAEhBhK,EAAQ,KAAK+H,GAAaC,GAASgC,CAAG,KAAKA,CAAG;AAAA,WAGzCpX,MAAW;AACpB,WAAOoN,EAAQ,UAAU8J,KAAS;AAChC,MAAAE,IAAMnD,EAAO,SAAQ,GACrBxY,IAAQwY,EAAO,WAAU;AACzB,eAASplB,IAAI,GAAGA,KAAK4M,GAAO5M,KAAK;AAC/B,QAAIsoB,IACF/J,EAAQ,KAAK,SAAS,UAAUgK,GAAK,MAAM,EAAE,CAAC,IAE9ChK,EAAQ,KAAK+H,GAAaC,GAASgC,CAAG,KAAKA,CAAG,GAEhDA,KAAO;AAAA,IAEX;AAAA,WACSpX,MAAW;AACpB,WAAOoN,EAAQ,UAAU8J,KAAS;AAChC,MAAAE,IAAMnD,EAAO,SAAQ,GACrBxY,IAAQwY,EAAO,YAAW;AAC1B,eAASplB,IAAI,GAAGA,KAAK4M,GAAO5M,KAAK;AAC/B,QAAIsoB,IACF/J,EAAQ,KAAK,SAAS,UAAUgK,GAAK,MAAM,EAAE,CAAC,IAE9ChK,EAAQ,KAAK+H,GAAaC,GAASgC,CAAG,KAAKA,CAAG,GAEhDA,KAAO;AAAA,IAEX;AAAA;AAEA,UAAM,IAAI,MAAM,4BAA4BpX,CAAM;AAEpD,SAAOoN;AACT;AACA,SAASiK,GAAiBnf,GAAM2H,GAAO;AACrC,MAAIyL;AACJ,QAAM3S,IAAW,CAAA,GACXsb,IAAS,IAAI9O,EAAc,OAAOjN,GAAM2H,CAAK,GAC7CG,IAASiU,EAAO,WAAU;AAChC,MAAIjU,MAAW,GAAG;AAChB,UAAMsX,IAASrD,EAAO,WAAU;AAChC,aAASplB,IAAI,GAAGA,IAAIyoB,GAAQzoB,KAAK;AAC/B,MAAAyc,IAAO2I,EAAO,WAAU,GACxBtb,EAAS2S,CAAI,IAAIzc;AAAA,EAErB,WAAWmR,MAAW,GAAG;AACvB,UAAMuX,IAAUtD,EAAO,WAAU;AACjC,IAAA3I,IAAO;AACP,aAASzc,IAAI,GAAGA,IAAI0oB,GAAS1oB,KAAK,GAAG;AACnC,YAAMD,IAAQqlB,EAAO,WAAU,GACzBuD,IAAQvD,EAAO,WAAU;AAC/B,eAAS3b,IAAI1J,GAAO0J,KAAK1J,IAAQ4oB,GAAOlf,KAAK;AAC3C,QAAAK,EAASL,CAAC,IAAIgT,GACdA,KAAQ;AAAA,IAEZ;AAAA,EACF;AACE,UAAM,IAAI,MAAM,6BAA6BtL,CAAM;AAErD,SAAOrH;AACT;AACA,SAASuc,GAAWF,GAAU;AAC5B,MAAIyC,IAAiBzC,EAAS,IAAG;AACjC,SAAOA,EAAS,SAASyC;AACvB,IAAAzC,EAAS,IAAG;AAEhB;AACA,SAAS0C,GAAezK,GAAMrX,GAAM;AAClC,QAAM+hB,IAAY1K,EAAK,OAAO,OAAOA,EAAK,OAAO,IAAI,WAAWA,EAAK,OAAO,IAAI,QAAQ,aAAa;AACrG,SAAI0K,MAAc,MAChB/hB,EAAK,OAAO,MACZA,EAAK,SAAS,SACdA,EAAK,cAAcqX,EAAK,OAAO,IAAI,QAAQ,eAAe,IAErD0K;AACT;AACA,SAASC,GAAmB3K,GAAMnJ,GAAOwH,GAAM2C,GAAS4J,GAAQ;AAC9D,MAAIC,GACAC,GACAC,GACAC;AACJ,QAAM5R,IAAI,IAAIxP,GAAY,GACpBqhB,IAAQ,CAAA;AACd,MAAIC,IAAS,GACTC,IAAY,IACZC,IAAO,IACPnvB,IAAI,GACJC,IAAI,GACJmqB,GACAgF,GACAC,GACAC,GACAC,IAAU,GACVC,IAAS,CAAA,GACTC,GACAC,IAAY;AAChB,QAAMC,IAAW5L,EAAK,OAAO,QAAQA,EAAK,OAAO;AASjD,MARAsL,IAAgBM,EAAS,QAAQ,gBACjCL,IAAgBK,EAAS,QAAQ,gBACjChB,IAASA,KAAU5K,EAAK,aAAaA,EAAK,UAAU,IAAG,GAClDnJ,EAAM,iBACTA,EAAM,eAAe,SAASgV,GAAiB;AAC7C,WAAOlB,GAAmB3K,GAAMnJ,GAAOwH,GAAM2C,GAAS6K,CAAe;AAAA,EACvE,IAEE7L,EAAK,aAAagB,IAAU,GAAG;AACjC,UAAM8K,IAAUF,EAAS,QAAQ,YAAYA,EAAS,QAAQ,UAAU/U,EAAM,KAAK,IAAI,GACjFkV,IAASH,EAAS,QAAQ,SAASE,CAAO;AAChD,IAAAzF,IAAQ0F,EAAO,QACfV,IAAYU,EAAO,YACf/K,IAAU,KACZyK,IAASG,EAAS,QAAQ,QAAQ,oBAClCJ,IAAUO,EAAO,aAAa,YAE9BT,IAAgBS,EAAO,gBACvBR,IAAgBQ,EAAO;AAAA,EAE3B;AACE,IAAA1F,IAAQuF,EAAS,QAAQ,QACzBP,IAAYO,EAAS,QAAQ;AAE/B,QAAMlB,IAAYD,GAAezK,GAAM5G,CAAC;AACxC,MAAI3b,IAAQ6tB;AACZ,WAASU,EAAWrnB,GAAIC,GAAI;AAC1B,IAAIwmB,KAAQV,MAAc,KACxBtR,EAAE,UAAS,GAEbA,EAAE,OAAOzU,GAAIC,CAAE,GACfwmB,IAAO;AAAA,EACT;AACA,WAASa,IAAa;AACpB,QAAIC;AACJ,IAAAA,KAAejB,EAAM,SAAS,OAAO,GACjCiB,KAAe,CAACf,MAClB1tB,IAAQwtB,EAAM,MAAK,IAAKM,IAE1BL,KAAUD,EAAM,UAAU,GAC1BA,EAAM,SAAS,GACfE,IAAY;AAAA,EACd;AACA,WAASgB,EAAMC,GAAO;AACpB,QAAI9E,GACAC,GACAC,IACAC,IACA4E,IACAC,IACAC,GACAC,IACAC,GACAC,IACAC,GACAC,GACAhrB,IAAI;AACR,WAAOA,IAAIwqB,EAAM,UAAQ;AACvB,UAAIhjB,KAAIgjB,EAAMxqB,CAAC;AAEf,cADAA,KAAK,GACGwH,IAAC;AAAA,QACP,KAAK;AACH,UAAA6iB,EAAU;AACV;AAAA,QACF,KAAK;AACH,UAAAA,EAAU;AACV;AAAA,QACF,KAAK;AACH,UAAIhB,EAAM,SAAS,KAAK,CAACE,MACvB1tB,IAAQwtB,EAAM,MAAK,IAAKM,GACxBJ,IAAY,KAEdjvB,KAAK+uB,EAAM,IAAG,GACde,EAAW/vB,GAAGC,CAAC;AACf;AAAA,QACF,KAAK;AACH,iBAAO+uB,EAAM,SAAS;AACpB,YAAAhvB,KAAKgvB,EAAM,MAAK,GAChB/uB,KAAK+uB,EAAM,MAAK,GAChB7R,EAAE,OAAOnd,GAAGC,CAAC;AAEf;AAAA,QACF,KAAK;AACH,iBAAO+uB,EAAM,SAAS,MACpBhvB,KAAKgvB,EAAM,MAAK,GAChB7R,EAAE,OAAOnd,GAAGC,CAAC,GACT+uB,EAAM,WAAW;AAGrB,YAAA/uB,KAAK+uB,EAAM,MAAK,GAChB7R,EAAE,OAAOnd,GAAGC,CAAC;AAEf;AAAA,QACF,KAAK;AACH,iBAAO+uB,EAAM,SAAS,MACpB/uB,KAAK+uB,EAAM,MAAK,GAChB7R,EAAE,OAAOnd,GAAGC,CAAC,GACT+uB,EAAM,WAAW;AAGrB,YAAAhvB,KAAKgvB,EAAM,MAAK,GAChB7R,EAAE,OAAOnd,GAAGC,CAAC;AAEf;AAAA,QACF,KAAK;AACH,iBAAO+uB,EAAM,SAAS;AACpB,YAAAJ,IAAM5uB,IAAIgvB,EAAM,MAAK,GACrBH,IAAM5uB,IAAI+uB,EAAM,MAAK,GACrBF,IAAMF,IAAMI,EAAM,MAAK,GACvBD,IAAMF,IAAMG,EAAM,MAAK,GACvBhvB,IAAI8uB,IAAME,EAAM,MAAK,GACrB/uB,IAAI8uB,IAAMC,EAAM,MAAK,GACrB7R,EAAE,QAAQyR,GAAKC,GAAKC,GAAKC,GAAK/uB,GAAGC,CAAC;AAEpC;AAAA,QACF,KAAK;AAGH,cAFAmwB,KAAYpB,EAAM,IAAG,IAAKI,GAC1BiB,KAAWjG,EAAMgG,EAAS,GACtBC,IAAU;AACZ,gBAAIX,KAAaxF,IAAgB;AAC/B,sBAAQ,KAAK,kEAAkE;AAC/E;AAAA,YACF;AACA,YAAAwF,KACAQ,EAAMG,EAAQ,GACdX;AAAA,UACF;AACA;AAAA,QACF,KAAK;AACH,cAAI3K,IAAU,GAAG;AACf,oBAAQ,MAAM,8DAA8D;AAC5E;AAAA,UACF;AACA;AAAA,QACF,KAAK;AAGH,kBAFA5X,KAAIgjB,EAAMxqB,CAAC,GACXA,KAAK,GACGwH,IAAC;AAAA,YACP,KAAK;AACH,cAAAyhB,IAAM5uB,IAAIgvB,EAAM,MAAK,GACrBH,IAAM5uB,IAAI+uB,EAAM,MAAK,GACrBF,IAAMF,IAAMI,EAAM,MAAK,GACvBD,IAAMF,IAAMG,EAAM,MAAK,GACvBsB,IAAMxB,IAAME,EAAM,MAAK,GACvBuB,KAAMxB,IAAMC,EAAM,MAAK,GACvBwB,IAAMF,IAAMtB,EAAM,MAAK,GACvByB,KAAMF,KAAMvB,EAAM,MAAK,GACvB0B,IAAMF,IAAMxB,EAAM,MAAK,GACvB2B,IAAMF,KAAMzB,EAAM,MAAK,GACvBhvB,IAAI0wB,IAAM1B,EAAM,MAAK,GACrB/uB,IAAI0wB,IAAM3B,EAAM,MAAK,GACrBA,EAAM,MAAK,GACX7R,EAAE,QAAQyR,GAAKC,GAAKC,GAAKC,GAAKuB,GAAKC,EAAG,GACtCpT,EAAE,QAAQqT,GAAKC,IAAKC,GAAKC,GAAK3wB,GAAGC,CAAC;AAClC;AAAA,YACF,KAAK;AACH,cAAA2uB,IAAM5uB,IAAIgvB,EAAM,MAAK,GACrBH,IAAM5uB,GACN6uB,IAAMF,IAAMI,EAAM,MAAK,GACvBD,IAAMF,IAAMG,EAAM,MAAK,GACvBsB,IAAMxB,IAAME,EAAM,MAAK,GACvBuB,KAAMxB,GACNyB,IAAMF,IAAMtB,EAAM,MAAK,GACvByB,KAAM1B,GACN2B,IAAMF,IAAMxB,EAAM,MAAK,GACvB2B,IAAM1wB,GACND,IAAI0wB,IAAM1B,EAAM,MAAK,GACrB7R,EAAE,QAAQyR,GAAKC,GAAKC,GAAKC,GAAKuB,GAAKC,EAAG,GACtCpT,EAAE,QAAQqT,GAAKC,IAAKC,GAAKC,GAAK3wB,GAAGC,CAAC;AAClC;AAAA,YACF,KAAK;AACH,cAAA2uB,IAAM5uB,IAAIgvB,EAAM,MAAK,GACrBH,IAAM5uB,IAAI+uB,EAAM,MAAK,GACrBF,IAAMF,IAAMI,EAAM,MAAK,GACvBD,IAAMF,IAAMG,EAAM,MAAK,GACvBsB,IAAMxB,IAAME,EAAM,MAAK,GACvBuB,KAAMxB,GACNyB,IAAMF,IAAMtB,EAAM,MAAK,GACvByB,KAAM1B,GACN2B,IAAMF,IAAMxB,EAAM,MAAK,GACvB2B,IAAMF,KAAMzB,EAAM,MAAK,GACvBhvB,IAAI0wB,IAAM1B,EAAM,MAAK,GACrB7R,EAAE,QAAQyR,GAAKC,GAAKC,GAAKC,GAAKuB,GAAKC,EAAG,GACtCpT,EAAE,QAAQqT,GAAKC,IAAKC,GAAKC,GAAK3wB,GAAGC,CAAC;AAClC;AAAA,YACF,KAAK;AACH,cAAA2uB,IAAM5uB,IAAIgvB,EAAM,MAAK,GACrBH,IAAM5uB,IAAI+uB,EAAM,MAAK,GACrBF,IAAMF,IAAMI,EAAM,MAAK,GACvBD,IAAMF,IAAMG,EAAM,MAAK,GACvBsB,IAAMxB,IAAME,EAAM,MAAK,GACvBuB,KAAMxB,IAAMC,EAAM,MAAK,GACvBwB,IAAMF,IAAMtB,EAAM,MAAK,GACvByB,KAAMF,KAAMvB,EAAM,MAAK,GACvB0B,IAAMF,IAAMxB,EAAM,MAAK,GACvB2B,IAAMF,KAAMzB,EAAM,MAAK,GACnB,KAAK,IAAI0B,IAAM1wB,CAAC,IAAI,KAAK,IAAI2wB,IAAM1wB,CAAC,IACtCD,IAAI0wB,IAAM1B,EAAM,MAAK,IAErB/uB,IAAI0wB,IAAM3B,EAAM,MAAK,GAEvB7R,EAAE,QAAQyR,GAAKC,GAAKC,GAAKC,GAAKuB,GAAKC,EAAG,GACtCpT,EAAE,QAAQqT,GAAKC,IAAKC,GAAKC,GAAK3wB,GAAGC,CAAC;AAClC;AAAA,YACF;AACE,sBAAQ,IAAI,WAAW2a,EAAM,QAAQ,4BAA4BzN,EAAC,GAClE6hB,EAAM,SAAS;AAAA,UAC7B;AACU;AAAA,QACF,KAAK;AACH,cAAIjK,IAAU,GAAG;AACf,oBAAQ,MAAM,+DAA+D;AAC7E;AAAA,UACF;AACA,cAAIiK,EAAM,UAAU,GAAG;AACrB,kBAAM4B,KAAYjN,GAAoBqL,EAAM,IAAG,CAAE,GAC3C6B,KAAYlN,GAAoBqL,EAAM,IAAG,CAAE,GAC3C8B,KAAM9B,EAAM,IAAG,GACf+B,KAAM/B,EAAM,IAAG;AACrB,gBAAI4B,MAAaC,IAAW;AAC1B,cAAAjW,EAAM,cAAc,IACpBA,EAAM,aAAa,CAAA;AACnB,oBAAMoW,KAAkBjN,EAAK,YAAY,QAAQ,QAAQ6M,EAAS,GAC5DK,KAAkBlN,EAAK,YAAY,QAAQ,QAAQ8M,EAAS;AAClE,cAAAjW,EAAM,WAAW,KAAK;AAAA,gBACpB,YAAYqW;AAAA,gBACZ,IAAI;AAAA,gBACJ,IAAI;AAAA,cACpB,CAAe,GACDrW,EAAM,WAAW,KAAK;AAAA,gBACpB,YAAYoW;AAAA,gBACZ,IAAID;AAAA,gBACJ,IAAID;AAAA,cACpB,CAAe,GACD3T,EAAE,OAAO4G,EAAK,OAAO,IAAIkN,EAAe,EAAE,IAAI;AAC9C,oBAAMC,KAAanN,EAAK,OAAO,IAAIiN,EAAe,GAC5CG,KAAkB,KAAK,MAAM,KAAK,UAAUD,GAAW,KAAK,QAAQ,CAAC;AAC3E,uBAAS7d,KAAK,GAAGA,KAAK8d,GAAgB,QAAQ9d,MAAM,GAAG;AACrD,sBAAM3I,KAAMymB,GAAgB9d,EAAE;AAC9B,gBAAI3I,GAAI,SAAS,QACfA,GAAI,KAAKqmB,IACTrmB,GAAI,KAAKomB,MAEPpmB,GAAI,SAAS,OAAOA,GAAI,SAAS,SACnCA,GAAI,MAAMqmB,IACVrmB,GAAI,MAAMomB,KAERpmB,GAAI,SAAS,QACfA,GAAI,MAAMqmB,IACVrmB,GAAI,MAAMomB;AAAA,cAEd;AACA,cAAA3T,EAAE,OAAOgU,EAAe;AAAA,YAC1B;AAAA,UACF,MAAO,CAAInC,EAAM,SAAS,KAAK,CAACE,MAC9B1tB,IAAQwtB,EAAM,MAAK,IAAKM,GACxBJ,IAAY;AAEd,UAAIC,KAAQV,MAAc,MACxBtR,EAAE,UAAS,GACXgS,IAAO;AAET;AAAA,QACF,KAAK;AACH,cAAIpK,IAAU,GAAG;AACf,oBAAQ,MAAM,+DAA+D;AAC7E;AAAA,UACF;AACA,UAAAwK,IAAUP,EAAM,IAAG;AACnB;AAAA,QACF,KAAK;AACH,cAAIjK,IAAU,GAAG;AACf,oBAAQ,MAAM,6DAA6D;AAC3E;AAAA,UACF;AACA,UAAK0K,MACHA,IAAc1L,EAAK,aAAa4K,KAAU5K,EAAK,UAAU,QAAQ,eAAeyL,GAAQD,GAASZ,CAAM;AAEzG,cAAIlW,IAAIuW,EAAM,IAAG,GACbjZ,KAAY0Z,IAAcA,EAAY,SAASD,EAAO,uBAAuBD,CAAO,EAAE,cAAc,QACpG6B,KAAgB3Y,IAAI1C,IACpBtQ,KAAQupB,EAAM,SAASoC,IACvBC,KAAgB5rB,KAAQgT;AAC5B,cAAIgX;AACF,qBAASpc,KAAK,GAAGA,KAAKoF,GAAGpF,MAAM;AAC7B,kBAAIzN,KAAMopB,EAAMqC,KAAgBhe,EAAE;AAClC,uBAASjE,KAAI,GAAGA,KAAI2G,IAAW3G;AAC7B,gBAAAxJ,MAAO6pB,EAAYrgB,EAAC,IAAI4f,EAAMvpB,IAAO;AAEvC,cAAAupB,EAAMqC,KAAgBhe,EAAE,IAAIzN;AAAA,YAC9B;AAEF,iBAAOwrB;AACL,YAAApC,EAAM,IAAG;AAEX;AAAA,QACF,KAAK;AACH,UAAAgB,EAAU;AACV;AAAA,QACF,KAAK;AAAA;AAAA,QAEL,KAAK;AACH,UAAAA,EAAU,GACVrqB,KAAKspB,IAAS,KAAK;AACnB;AAAA,QACF,KAAK;AACH,UAAID,EAAM,SAAS,KAAK,CAACE,MACvB1tB,IAAQwtB,EAAM,MAAK,IAAKM,GACxBJ,IAAY,KAEdjvB,KAAK+uB,EAAM,IAAG,GACdhvB,KAAKgvB,EAAM,IAAG,GACde,EAAW/vB,GAAGC,CAAC;AACf;AAAA,QACF,KAAK;AACH,UAAI+uB,EAAM,SAAS,KAAK,CAACE,MACvB1tB,IAAQwtB,EAAM,MAAK,IAAKM,GACxBJ,IAAY,KAEdlvB,KAAKgvB,EAAM,IAAG,GACde,EAAW/vB,GAAGC,CAAC;AACf;AAAA,QACF,KAAK;AACH,UAAA+vB,EAAU;AACV;AAAA,QACF,KAAK;AACH,iBAAOhB,EAAM,SAAS;AACpB,YAAAJ,IAAM5uB,IAAIgvB,EAAM,MAAK,GACrBH,IAAM5uB,IAAI+uB,EAAM,MAAK,GACrBF,IAAMF,IAAMI,EAAM,MAAK,GACvBD,IAAMF,IAAMG,EAAM,MAAK,GACvBhvB,IAAI8uB,IAAME,EAAM,MAAK,GACrB/uB,IAAI8uB,IAAMC,EAAM,MAAK,GACrB7R,EAAE,QAAQyR,GAAKC,GAAKC,GAAKC,GAAK/uB,GAAGC,CAAC;AAEpC,UAAAD,KAAKgvB,EAAM,MAAK,GAChB/uB,KAAK+uB,EAAM,MAAK,GAChB7R,EAAE,OAAOnd,GAAGC,CAAC;AACb;AAAA,QACF,KAAK;AACH,iBAAO+uB,EAAM,SAAS;AACpB,YAAAhvB,KAAKgvB,EAAM,MAAK,GAChB/uB,KAAK+uB,EAAM,MAAK,GAChB7R,EAAE,OAAOnd,GAAGC,CAAC;AAEf,UAAA2uB,IAAM5uB,IAAIgvB,EAAM,MAAK,GACrBH,IAAM5uB,IAAI+uB,EAAM,MAAK,GACrBF,IAAMF,IAAMI,EAAM,MAAK,GACvBD,IAAMF,IAAMG,EAAM,MAAK,GACvBhvB,IAAI8uB,IAAME,EAAM,MAAK,GACrB/uB,IAAI8uB,IAAMC,EAAM,MAAK,GACrB7R,EAAE,QAAQyR,GAAKC,GAAKC,GAAKC,GAAK/uB,GAAGC,CAAC;AAClC;AAAA,QACF,KAAK;AAIH,eAHI+uB,EAAM,SAAS,MACjBhvB,KAAKgvB,EAAM,MAAK,IAEXA,EAAM,SAAS;AACpB,YAAAJ,IAAM5uB,GACN6uB,IAAM5uB,IAAI+uB,EAAM,MAAK,GACrBF,IAAMF,IAAMI,EAAM,MAAK,GACvBD,IAAMF,IAAMG,EAAM,MAAK,GACvBhvB,IAAI8uB,GACJ7uB,IAAI8uB,IAAMC,EAAM,MAAK,GACrB7R,EAAE,QAAQyR,GAAKC,GAAKC,GAAKC,GAAK/uB,GAAGC,CAAC;AAEpC;AAAA,QACF,KAAK;AAIH,eAHI+uB,EAAM,SAAS,MACjB/uB,KAAK+uB,EAAM,MAAK,IAEXA,EAAM,SAAS;AACpB,YAAAJ,IAAM5uB,IAAIgvB,EAAM,MAAK,GACrBH,IAAM5uB,GACN6uB,IAAMF,IAAMI,EAAM,MAAK,GACvBD,IAAMF,IAAMG,EAAM,MAAK,GACvBhvB,IAAI8uB,IAAME,EAAM,MAAK,GACrB/uB,IAAI8uB,GACJ5R,EAAE,QAAQyR,GAAKC,GAAKC,GAAKC,GAAK/uB,GAAGC,CAAC;AAEpC;AAAA,QACF,KAAK;AACH,UAAAorB,IAAK8E,EAAMxqB,CAAC,GACZ2lB,IAAK6E,EAAMxqB,IAAI,CAAC,GAChBqpB,EAAM,MAAM3D,KAAM,KAAKC,KAAM,OAAO,EAAE,GACtC3lB,KAAK;AACL;AAAA,QACF,KAAK;AAGH,cAFAyqB,KAAYpB,EAAM,IAAG,IAAKjL,EAAK,YAC/BsM,KAAWtM,EAAK,OAAOqM,EAAS,GAC5BC,IAAU;AACZ,gBAAIX,KAAaxF,IAAgB;AAC/B,sBAAQ,KAAK,mEAAmE;AAChF;AAAA,YACF;AACA,YAAAwF,KACAQ,EAAMG,EAAQ,GACdX;AAAA,UACF;AACA;AAAA,QACF,KAAK;AACH,iBAAOV,EAAM,SAAS,MACpBJ,IAAM5uB,GACN6uB,IAAM5uB,IAAI+uB,EAAM,MAAK,GACrBF,IAAMF,IAAMI,EAAM,MAAK,GACvBD,IAAMF,IAAMG,EAAM,MAAK,GACvBhvB,IAAI8uB,IAAME,EAAM,MAAK,GACrB/uB,IAAI8uB,KAAOC,EAAM,WAAW,IAAIA,EAAM,MAAK,IAAK,IAChD7R,EAAE,QAAQyR,GAAKC,GAAKC,GAAKC,GAAK/uB,GAAGC,CAAC,GAC9B+uB,EAAM,WAAW;AAGrB,YAAAJ,IAAM5uB,IAAIgvB,EAAM,MAAK,GACrBH,IAAM5uB,GACN6uB,IAAMF,IAAMI,EAAM,MAAK,GACvBD,IAAMF,IAAMG,EAAM,MAAK,GACvB/uB,IAAI8uB,IAAMC,EAAM,MAAK,GACrBhvB,IAAI8uB,KAAOE,EAAM,WAAW,IAAIA,EAAM,MAAK,IAAK,IAChD7R,EAAE,QAAQyR,GAAKC,GAAKC,GAAKC,GAAK/uB,GAAGC,CAAC;AAEpC;AAAA,QACF,KAAK;AACH,iBAAO+uB,EAAM,SAAS,MACpBJ,IAAM5uB,IAAIgvB,EAAM,MAAK,GACrBH,IAAM5uB,GACN6uB,IAAMF,IAAMI,EAAM,MAAK,GACvBD,IAAMF,IAAMG,EAAM,MAAK,GACvB/uB,IAAI8uB,IAAMC,EAAM,MAAK,GACrBhvB,IAAI8uB,KAAOE,EAAM,WAAW,IAAIA,EAAM,MAAK,IAAK,IAChD7R,EAAE,QAAQyR,GAAKC,GAAKC,GAAKC,GAAK/uB,GAAGC,CAAC,GAC9B+uB,EAAM,WAAW;AAGrB,YAAAJ,IAAM5uB,GACN6uB,IAAM5uB,IAAI+uB,EAAM,MAAK,GACrBF,IAAMF,IAAMI,EAAM,MAAK,GACvBD,IAAMF,IAAMG,EAAM,MAAK,GACvBhvB,IAAI8uB,IAAME,EAAM,MAAK,GACrB/uB,IAAI8uB,KAAOC,EAAM,WAAW,IAAIA,EAAM,MAAK,IAAK,IAChD7R,EAAE,QAAQyR,GAAKC,GAAKC,GAAKC,GAAK/uB,GAAGC,CAAC;AAEpC;AAAA,QACF;AACE,UAAIkN,KAAI,KACN,QAAQ,IAAI,WAAWyN,EAAM,QAAQ,wBAAwBzN,EAAC,IACrDA,KAAI,MACb6hB,EAAM,KAAK7hB,KAAI,GAAG,IACTA,KAAI,OACbke,IAAK8E,EAAMxqB,CAAC,GACZA,KAAK,GACLqpB,EAAM,MAAM7hB,KAAI,OAAO,MAAMke,IAAK,GAAG,KAC5Ble,KAAI,OACbke,IAAK8E,EAAMxqB,CAAC,GACZA,KAAK,GACLqpB,EAAM,KAAK,EAAE7hB,KAAI,OAAO,MAAMke,IAAK,GAAG,MAEtCA,IAAK8E,EAAMxqB,CAAC,GACZ2lB,IAAK6E,EAAMxqB,IAAI,CAAC,GAChB4lB,KAAK4E,EAAMxqB,IAAI,CAAC,GAChB6lB,KAAK2E,EAAMxqB,IAAI,CAAC,GAChBA,KAAK,GACLqpB,EAAM,MAAM3D,KAAM,KAAKC,KAAM,KAAKC,MAAM,IAAIC,MAAM,KAAK;AAAA,MAEnE;AAAA,IACI;AAAA,EACF;AACA,SAAA0E,EAAM9N,CAAI,GACN2B,EAAK,aAAa4K,MACpBxR,EAAE,WAAWA,EAAE,SAAS,IAAI,CAACjU,MAAM;AACjC,UAAMgI,IAAO,OAAO,KAAKhI,CAAC;AAC1B,aAASvD,IAAI,GAAGA,IAAIuL,EAAK,QAAQvL,KAAK;AACpC,YAAMoY,KAAM7M,EAAKvL,CAAC;AAClB,MAAIoY,OAAQ,WACZ7U,EAAE6U,EAAG,IAAI,KAAK,MAAM7U,EAAE6U,EAAG,CAAC;AAAA,IAC5B;AACA,WAAO7U;AAAA,EACT,CAAC,IAECgmB,MACFtU,EAAM,eAAepZ,IAEhB2b;AACT;AACA,SAASmU,GAAiBtiB,GAAM2H,GAAOqX,GAASuD,GAAcxM,GAAS;AACrE,QAAMyM,IAAW,CAAA;AACjB,MAAI3B;AACJ,QAAM9E,IAAS,IAAI9O,EAAc,OAAOjN,GAAM2H,CAAK,GAC7CG,IAASiU,EAAO,WAAU;AAChC,MAAIjU,MAAW;AACb,aAAS2a,IAAO,GAAGA,IAAOzD,GAASyD,KAAQ;AAEzC,UADA5B,IAAU9E,EAAO,WAAU,GACvB8E,KAAW0B;AACb,cAAM,IAAI,MAAM,wDAAwD1B,IAAU,gBAAgB0B,IAAe,GAAG;AAEtH,MAAAC,EAAS,KAAK3B,CAAO;AAAA,IACvB;AAAA,WACS/Y,MAAW,KAAKiO,IAAU,KAAKjO,MAAW,GAAG;AACtD,UAAMuX,IAAUvX,MAAW,IAAIiU,EAAO,WAAU,IAAKA,EAAO,YAAW;AACvE,QAAIrlB,IAAQoR,MAAW,IAAIiU,EAAO,WAAU,IAAKA,EAAO,YAAW;AACnE,QAAIrlB,MAAU;AACZ,YAAM,IAAI,MAAM,sCAAsCoR,CAAM,8BAA8BpR,CAAK,EAAE;AAEnG,QAAInG;AACJ,aAASmyB,IAAS,GAAGA,IAASrD,GAASqD,KAAU;AAG/C,UAFA7B,IAAU/Y,MAAW,IAAIiU,EAAO,YAAW,IAAKA,EAAO,WAAU,GACjExrB,IAAOuX,MAAW,IAAIiU,EAAO,WAAU,IAAKA,EAAO,YAAW,GAC1D8E,KAAW0B;AACb,cAAM,IAAI,MAAM,wDAAwD1B,IAAU,gBAAgB0B,IAAe,GAAG;AAEtH,UAAIhyB,IAAOyuB;AACT,cAAM,IAAI,MAAM,sCAAsCjJ,CAAO,sBAAsBxlB,CAAI,EAAE;AAE3F,aAAOmG,IAAQnG,GAAMmG;AACnB,QAAA8rB,EAAS,KAAK3B,CAAO;AAEvB,MAAAnqB,IAAQnG;AAAA,IACV;AACA,QAAIA,MAASyuB;AACX,YAAM,IAAI,MAAM,6EAA6EzuB,CAAI;AAAA,EAErG;AACE,UAAM,IAAI,MAAM,8DAA8DuX,CAAM;AAEtF,SAAO0a;AACT;AACA,SAASG,GAAc3iB,GAAM2H,GAAOoN,GAAMY,GAAK;AAC7C,MAAIiN;AACJ,QAAMzX,IAASmS,GAAetd,GAAM2H,CAAK;AACzC,EAAIwD,EAAO,gBAAgB,IACzByX,IAAc7N,EAAK,OAAO,OAAO,CAAA,IAEjC6N,IAAc7N,EAAK,OAAO,MAAM,CAAA;AAElC,QAAM8N,IAAY1X,EAAO,cAAc,IAAI,OAAOmQ,GAActb,GAAMmL,EAAO,WAAW8B,EAAc,aAAa,GAC7G6V,IAAe3X,EAAO,cAAc,IAAI,OAAOmQ,GAActb,GAAM6iB,EAAU,SAAS,GACtFE,IAAc5X,EAAO,cAAc,IAAI,OAAOmQ,GAActb,GAAM8iB,EAAa,WAAW7V,EAAc,aAAa,GACrH+V,IAAkB1H,GAActb,GAAMmL,EAAO,cAAc,IAAIxD,IAAQwD,EAAO,OAAOA,EAAO,gBAAgB4X,EAAY,WAAW,QAAQ5X,EAAO,WAAW;AACnK,EAAA4J,EAAK,SAASiO,EAAgB,SAC9BjO,EAAK,aAAaoG,GAAsBpG,EAAK,MAAM;AACnD,MAAI+J;AACJ,MAAI3T,EAAO,cAAc,GAAG;AAC1B,UAAM8X,IAAgBtb,IAAQwD,EAAO,MAC/B0T,IAAc5R,EAAc,SAASjN,GAAMijB,GAAeA,IAAgB9X,EAAO,aAAa;AACpG,IAAA2T,IAAUL,GAAkBze,GAAM,GAAG,CAAC6e,CAAW,GAAG,QAAQ1T,EAAO,WAAW,EAAE,CAAC;AAAA,EACnF,OAAO;AACL,UAAMwT,IAAeF,GAAkBze,GAAM2H,GAAOmb,EAAa,SAASC,EAAY,SAAS5X,EAAO,WAAW;AACjH,QAAIwT,EAAa,WAAW;AAC1B,YAAM,IAAI,MAAM,mFAAmFA,EAAa,MAAM;AAExH,IAAAG,IAAUH,EAAa,CAAC;AAAA,EAC1B;AASA,MARAiE,EAAY,UAAU9D,GAClBA,EAAQ,iBACV/J,EAAK,gBAAgB+J,EAAQ,aAAa,eAC1C/J,EAAK,gBAAgB+J,EAAQ,aAAa,gBAExC3T,EAAO,cAAc,KAAK2T,EAAQ,IAAI,CAAC,MAAM,UAAUA,EAAQ,IAAI,CAAC,MAAM,WAC5E/J,EAAK,YAAY,KAEf5J,EAAO,cAAc,GAAG;AAC1B,QAAI+X,IAAqBpE,EAAQ,SAC7BqE,IAAiBrE,EAAQ;AAC7B,QAAI,CAACoE;AACH,YAAM,IAAI,MAAM,yDAAyD;AAE3E,UAAME,IAAe9H,GAActb,GAAM2H,IAAQub,GAAoB,MAAM/X,EAAO,WAAW,GACvF6S,IAAUD,GAAoB/d,GAAM2H,GAAOyb,EAAa,OAAO;AACrE,IAAAtE,EAAQ,WAAWd,GACfmF,MACFrE,EAAQ,YAAYwD,GAAiBtiB,GAAM2H,IAAQwb,GAAgBpO,EAAK,WAAWiJ,EAAQ,QAAQ7S,EAAO,WAAW;AAAA,EAEzH,WAAW4J,EAAK,WAAW;AACzB,QAAIsO,IAAgBvE,EAAQ,SACxBqE,IAAiBrE,EAAQ;AAC7B,QAAIuE,MAAkB,KAAKF,MAAmB;AAC5C,YAAM,IAAI,MAAM,kFAAkF;AAEpG,IAAAE,KAAiB1b;AACjB,UAAMyb,IAAe9H,GAActb,GAAMqjB,CAAa,GAChDrF,IAAUS,GAAkBze,GAAM2H,GAAOyb,EAAa,SAASL,EAAY,SAAS5X,EAAO,WAAW;AAC5G,IAAA2T,EAAQ,WAAWd,GACnBmF,KAAkBxb,GAClBmX,EAAQ,YAAYwD,GAAiBtiB,GAAMmjB,GAAgBpO,EAAK,WAAWiJ,EAAQ,QAAQ7S,EAAO,WAAW;AAAA,EAC/G;AACA,MAAIA,EAAO,cAAc,GAAG;AAC1B,UAAMmY,IAAoB3b,IAAQmX,EAAQ,QAAQ,CAAC,GAC7CR,IAAcT,GAAoB7d,GAAMsjB,GAAmBxE,EAAQ,QAAQ,CAAC,GAAGiE,EAAY,SAAS5X,EAAO,WAAW;AAG5H,QAFA4J,EAAK,gBAAgBuJ,EAAY,eACjCvJ,EAAK,gBAAgBuJ,EAAY,eAC7BA,EAAY,UAAU,GAAG;AAC3B,YAAMC,IAAa+E,IAAoBhF,EAAY,OAC7CE,IAAYlD,GAActb,GAAMue,CAAU;AAChD,MAAAxJ,EAAK,QAAQyJ,EAAU,SACvBzJ,EAAK,YAAYoG,GAAsBpG,EAAK,KAAK;AAAA,IACnD;AACE,MAAAA,EAAK,QAAQ,CAAA,GACbA,EAAK,YAAY;AAAA,EAErB;AACA,MAAIwO;AAWJ,MAVI5N,EAAI,aACN4N,IAAmB3H,GAAuB5b,GAAM2H,IAAQmX,EAAQ,aAAa3T,EAAO,WAAW,GAC/F4J,EAAK,UAAUwO,EAAiB,QAAQ,UAAUpY,EAAO,cAAc,IAAI,IAAI,OAE/EoY,IAAmBjI,GAActb,GAAM2H,IAAQmX,EAAQ,aAAa,MAAM3T,EAAO,WAAW,GAC5F4J,EAAK,UAAUwO,EAAiB,QAAQ,SAEtCpY,EAAO,cAAc,KAAK4J,EAAK,OAAO,QAAQA,EAAK,YAAYA,EAAK,OAAO,KAAK,aAClF,QAAQ,MAAM,kCAAkCA,EAAK,OAAO,2DAA2DA,EAAK,OAAO,KAAK,SAAS,GAAG,GAElJ5J,EAAO,cAAc,GAAG;AAC1B,QAAI+J,IAAU,CAAA,GACVzU,IAAW,CAAA;AACf,IAAIqe,EAAQ,YAAY,IACtB5J,IAAUV,KACDsK,EAAQ,YAAY,IAC7B5J,IAAUT,KACDqK,EAAQ,YAAY,IAC7B5J,IAAUR,KAEVQ,IAAU6J,GAAgB/e,GAAM2H,IAAQmX,EAAQ,SAAS/J,EAAK,SAASgO,EAAY,SAAShO,EAAK,SAAS,GAExG+J,EAAQ,aAAa,IACvBre,IAAWkU,KACFmK,EAAQ,aAAa,IAC9Bre,IAAWmU,KAEXnU,IAAW0e,GAAiBnf,GAAM2H,IAAQmX,EAAQ,QAAQ,GAE5D/J,EAAK,cAAc,IAAIE,GAAYxU,GAAUyU,CAAO,GACpDH,EAAK,WAAWA,EAAK,YAAYA,EAAK;AAAA,EACxC;AAEA,MADAA,EAAK,SAAS,IAAIiG,GAAiB,SAASjG,CAAI,GAC5CY,EAAI;AACN,IAAAZ,EAAK,QAAQ,SAASpe,GAAG;AACvB,YAAM6sB,IAAa3H,GAAkBllB,GAAG4sB,EAAiB,SAASvjB,GAAM2H,IAAQmX,EAAQ,aAAa,QAAQ3T,EAAO,WAAW;AAC/H,MAAA4J,EAAK,OAAO,KAAKpe,GAAGqkB,GAAiB,eAAejG,GAAMpe,GAAG+oB,IAAoB8D,GAAYrY,EAAO,WAAW,CAAC;AAAA,IAClH;AAAA;AAEA,aAASxU,IAAI,GAAGA,IAAIoe,EAAK,SAASpe,KAAK,GAAG;AACxC,YAAM6sB,IAAaD,EAAiB,QAAQ5sB,CAAC;AAC7C,MAAAoe,EAAK,OAAO,KAAKpe,GAAGqkB,GAAiB,eAAejG,GAAMpe,GAAG+oB,IAAoB8D,GAAYrY,EAAO,WAAW,CAAC;AAAA,IAClH;AAEF,MAAI2T,EAAQ,QAAQ;AAClB,UAAM3Q,IAAI,IAAIlB,EAAc,OAAOjN,GAAM2H,IAAQmX,EAAQ,MAAM;AAC/D,IAAAA,EAAQ,UAAU3Q,EAAE,oBAAmB;AAAA,EACzC;AACF;AACA,SAASsV,GAAanlB,GAAG4e,GAAS;AAChC,MAAIgC,GACAvoB,IAAI4d,GAAmB,QAAQjW,CAAC;AACpC,SAAI3H,KAAK,MACPuoB,IAAMvoB,IAERA,IAAIumB,EAAQ,QAAQ5e,CAAC,GACjB3H,KAAK,IACPuoB,IAAMvoB,IAAI4d,GAAmB,UAE7B2K,IAAM3K,GAAmB,SAAS2I,EAAQ,QAC1CA,EAAQ,KAAK5e,CAAC,IAET4gB;AACT;AACA,SAASwE,KAAa;AACpB,SAAO,IAAIxe,EAAc,OAAO,UAAU;AAAA,IACxC,EAAE,MAAM,SAAS,MAAM,SAAS,OAAO,EAAC;AAAA,IACxC,EAAE,MAAM,SAAS,MAAM,SAAS,OAAO,EAAC;AAAA,IACxC,EAAE,MAAM,WAAW,MAAM,SAAS,OAAO,EAAC;AAAA,IAC1C,EAAE,MAAM,SAAS,MAAM,SAAS,OAAO,EAAC;AAAA,EAC5C,CAAG;AACH;AACA,SAASye,GAAcC,GAAW;AAChC,QAAM1sB,IAAI,IAAIgO,EAAc,OAAO,cAAc;AAAA,IAC/C,EAAE,MAAM,SAAS,MAAM,SAAS,OAAO,CAAA,EAAE;AAAA,EAC7C,CAAG;AACD,EAAAhO,EAAE,QAAQ,CAAA;AACV,WAASP,IAAI,GAAGA,IAAIitB,EAAU,QAAQjtB,KAAK;AACzC,IAAAO,EAAE,MAAM,KAAK,EAAE,MAAM,UAAUP,GAAG,MAAM,QAAQ,OAAOitB,EAAUjtB,CAAC,EAAC,CAAE;AAEvE,SAAOO;AACT;AACA,SAAS2sB,GAASzG,GAAM0G,GAAO5G,GAAS;AACtC,QAAMvd,IAAI,CAAA;AACV,WAAShJ,IAAI,GAAGA,IAAIymB,EAAK,QAAQzmB,KAAK,GAAG;AACvC,UAAM+S,IAAQ0T,EAAKzmB,CAAC;AACpB,QAAI+I,IAAQokB,EAAMpa,EAAM,IAAI;AAC5B,IAAIhK,MAAU,UAAU,CAACub,GAAOvb,GAAOgK,EAAM,KAAK,MAC5CA,EAAM,SAAS,UACjBhK,IAAQ+jB,GAAa/jB,GAAOwd,CAAO,IAErCvd,EAAE+J,EAAM,EAAE,IAAI,EAAE,MAAMA,EAAM,MAAM,MAAMA,EAAM,MAAM,OAAAhK,EAAK;AAAA,EAE7D;AACA,SAAOC;AACT;AACA,SAASokB,GAAYD,GAAO5G,GAASnH,GAAS;AAC5C,QAAM7e,IAAI,IAAIgO,EAAc,OAAO,YAAY;AAAA,IAC7C,EAAE,MAAM,QAAQ,MAAM,QAAQ,OAAO,CAAA,EAAE;AAAA,EAC3C,CAAG;AACD,SAAAhO,EAAE,OAAO2sB,GAA4CtG,IAAeuG,GAAO5G,CAAO,GAC3EhmB;AACT;AACA,SAAS8sB,GAAiBlF,GAAS;AACjC,QAAM5nB,IAAI,IAAIgO,EAAc,OAAO,kBAAkB;AAAA,IACnD,EAAE,MAAM,YAAY,MAAM,SAAS,OAAO,CAAA,EAAE;AAAA,EAChD,CAAG;AACD,SAAAhO,EAAE,WAAW,CAAC,EAAE,MAAM,aAAa,MAAM,SAAS,OAAO4nB,GAAS,GAC3D5nB;AACT;AACA,SAAS+sB,GAAgB/G,GAAS;AAChC,QAAMhmB,IAAI,IAAIgO,EAAc,OAAO,gBAAgB;AAAA,IACjD,EAAE,MAAM,WAAW,MAAM,SAAS,OAAO,CAAA,EAAE;AAAA,EAC/C,CAAG;AACD,EAAAhO,EAAE,UAAU,CAAA;AACZ,WAASP,IAAI,GAAGA,IAAIumB,EAAQ,QAAQvmB,KAAK;AACvC,IAAAO,EAAE,QAAQ,KAAK,EAAE,MAAM,YAAYP,GAAG,MAAM,UAAU,OAAOumB,EAAQvmB,CAAC,EAAC,CAAE;AAE3E,SAAOO;AACT;AACA,SAASgtB,KAAsB;AAC7B,SAAO,IAAIhf,EAAc,OAAO,qBAAqB;AAAA,IACnD,EAAE,MAAM,SAAS,MAAM,SAAS,OAAO,CAAA,EAAE;AAAA,EAC7C,CAAG;AACH;AACA,SAASif,GAAaC,GAAYlH,GAAS;AACzC,QAAM,IAAI,IAAIhY,EAAc,OAAO,YAAY;AAAA,IAC7C,EAAE,MAAM,UAAU,MAAM,SAAS,OAAO,EAAC;AAAA,EAC7C,CAAG;AACD,WAASvO,IAAI,GAAGA,IAAIytB,EAAW,QAAQztB,KAAK,GAAG;AAC7C,UAAM0tB,IAAYD,EAAWztB,CAAC,GACxB2tB,IAAWb,GAAaY,GAAWnH,CAAO;AAChD,MAAE,OAAO,KAAK,EAAE,MAAM,WAAWvmB,GAAG,MAAM,OAAO,OAAO2tB,EAAQ,CAAE;AAAA,EACpE;AACA,SAAO;AACT;AACA,SAASC,GAAW3Y,GAAOmK,GAAS;AAClC,QAAMxT,IAAM,CAAA,GACN7E,IAAOkO,EAAM;AAEjB,EAAArJ,EAAI,KAAK,EAAE,MAAM,SAAS,MAAM,UAAU,OAAOqJ,EAAM,cAAc;AAEvE,MAAI5a,IAAI,GACJC,IAAI;AACR,WAAS0F,IAAI,GAAGA,IAAI+G,EAAK,SAAS,QAAQ/G,KAAK,GAAG;AAChD,QAAI6tB,GACAC,GACA/oB,IAAMgC,EAAK,SAAS/G,CAAC;AACzB,QAAI+E,EAAI,SAAS,KAAK;AACpB,YAAMgpB,IAAM,oBACNC,IAAM,IAAI;AAChB,MAAAjpB,IAAM;AAAA,QACJ,MAAM;AAAA,QACN,GAAGA,EAAI;AAAA,QACP,GAAGA,EAAI;AAAA,QACP,IAAI,KAAK,MAAMgpB,IAAM1zB,IAAI2zB,IAAMjpB,EAAI,EAAE;AAAA,QACrC,IAAI,KAAK,MAAMgpB,IAAMzzB,IAAI0zB,IAAMjpB,EAAI,EAAE;AAAA,QACrC,IAAI,KAAK,MAAMgpB,IAAMhpB,EAAI,IAAIipB,IAAMjpB,EAAI,EAAE;AAAA,QACzC,IAAI,KAAK,MAAMgpB,IAAMhpB,EAAI,IAAIipB,IAAMjpB,EAAI,EAAE;AAAA,MACjD;AAAA,IACI;AACA,QAAIA,EAAI,SAAS;AACf,MAAA8oB,IAAK,KAAK,MAAM9oB,EAAI,IAAI1K,CAAC,GACzByzB,IAAK,KAAK,MAAM/oB,EAAI,IAAIzK,CAAC,GACzBsR,EAAI,KAAK,EAAE,MAAM,MAAM,MAAM,UAAU,OAAOiiB,GAAI,GAClDjiB,EAAI,KAAK,EAAE,MAAM,MAAM,MAAM,UAAU,OAAOkiB,GAAI,GAClDliB,EAAI,KAAK,EAAE,MAAM,WAAW,MAAM,MAAM,OAAO,IAAI,GACnDvR,IAAI,KAAK,MAAM0K,EAAI,CAAC,GACpBzK,IAAI,KAAK,MAAMyK,EAAI,CAAC;AAAA,aACXA,EAAI,SAAS;AACtB,MAAA8oB,IAAK,KAAK,MAAM9oB,EAAI,IAAI1K,CAAC,GACzByzB,IAAK,KAAK,MAAM/oB,EAAI,IAAIzK,CAAC,GACzBsR,EAAI,KAAK,EAAE,MAAM,MAAM,MAAM,UAAU,OAAOiiB,GAAI,GAClDjiB,EAAI,KAAK,EAAE,MAAM,MAAM,MAAM,UAAU,OAAOkiB,GAAI,GAClDliB,EAAI,KAAK,EAAE,MAAM,WAAW,MAAM,MAAM,OAAO,GAAG,GAClDvR,IAAI,KAAK,MAAM0K,EAAI,CAAC,GACpBzK,IAAI,KAAK,MAAMyK,EAAI,CAAC;AAAA,aACXA,EAAI,SAAS,KAAK;AAC3B,YAAMkpB,IAAM,KAAK,MAAMlpB,EAAI,KAAK1K,CAAC,GAC3B6zB,IAAM,KAAK,MAAMnpB,EAAI,KAAKzK,CAAC,GAC3B6zB,IAAM,KAAK,MAAMppB,EAAI,KAAKA,EAAI,EAAE,GAChCqpB,IAAM,KAAK,MAAMrpB,EAAI,KAAKA,EAAI,EAAE;AACtC,MAAA8oB,IAAK,KAAK,MAAM9oB,EAAI,IAAIA,EAAI,EAAE,GAC9B+oB,IAAK,KAAK,MAAM/oB,EAAI,IAAIA,EAAI,EAAE,GAC9B6G,EAAI,KAAK,EAAE,MAAM,OAAO,MAAM,UAAU,OAAOqiB,GAAK,GACpDriB,EAAI,KAAK,EAAE,MAAM,OAAO,MAAM,UAAU,OAAOsiB,GAAK,GACpDtiB,EAAI,KAAK,EAAE,MAAM,OAAO,MAAM,UAAU,OAAOuiB,GAAK,GACpDviB,EAAI,KAAK,EAAE,MAAM,OAAO,MAAM,UAAU,OAAOwiB,GAAK,GACpDxiB,EAAI,KAAK,EAAE,MAAM,MAAM,MAAM,UAAU,OAAOiiB,GAAI,GAClDjiB,EAAI,KAAK,EAAE,MAAM,MAAM,MAAM,UAAU,OAAOkiB,GAAI,GAClDliB,EAAI,KAAK,EAAE,MAAM,aAAa,MAAM,MAAM,OAAO,GAAG,GACpDvR,IAAI,KAAK,MAAM0K,EAAI,CAAC,GACpBzK,IAAI,KAAK,MAAMyK,EAAI,CAAC;AAAA,IACtB;AAAA,EACF;AAEE,SAAA6G,EAAI,KAAK,EAAE,MAAM,WAAW,MAAM,MAAM,OAAO,IAAI,GAE9CA;AACT;AACA,SAASyiB,GAAqB9a,GAAQ6L,GAAS;AAC7C,QAAM,IAAI,IAAI7Q,EAAc,OAAO,qBAAqB;AAAA,IACtD,EAAE,MAAM,eAAe,MAAM,SAAS,OAAO,CAAA,EAAE;AAAA,EACnD,CAAG;AACD,WAASvO,IAAI,GAAGA,IAAIuT,EAAO,QAAQvT,KAAK,GAAG;AACzC,UAAMiV,IAAQ1B,EAAO,IAAIvT,CAAC,GACpB4L,IAAMgiB,GAAW3Y,CAAc;AACrC,MAAE,YAAY,KAAK,EAAE,MAAMA,EAAM,MAAM,MAAM,cAAc,OAAOrJ,EAAG,CAAE;AAAA,EACzE;AACA,SAAO;AACT;AACA,SAAS0iB,GAAgBnB,GAAO5G,GAASnH,GAAS;AAChD,QAAM7e,IAAI,IAAIgO,EAAc,OAAO,gBAAgB;AAAA,IACjD,EAAE,MAAM,QAAQ,MAAM,QAAQ,OAAO,CAAA,EAAE;AAAA,EAC3C,CAAG;AACD,SAAAhO,EAAE,OAAO2sB,GAAgDpG,IAAmBqG,GAAO5G,CAAO,GACnFhmB;AACT;AACA,SAASguB,GAAahb,GAAQnZ,GAAS;AAErC,QAAM,IAAI,IAAImU,EAAc,MAAM,QAAQ;AAAA,IACxC,EAAE,MAAM,UAAU,MAAM,SAAQ;AAAA,IAChC,EAAE,MAAM,aAAa,MAAM,SAAQ;AAAA,IACnC,EAAE,MAAM,gBAAgB,MAAM,SAAQ;AAAA,IACtC,EAAE,MAAM,eAAe,MAAM,SAAQ;AAAA,IACrC,EAAE,MAAM,mBAAmB,MAAM,SAAQ;AAAA,IACzC,EAAE,MAAM,YAAY,MAAM,SAAQ;AAAA,IAClC,EAAE,MAAM,oBAAoB,MAAM,SAAQ;AAAA,IAC1C,EAAE,MAAM,eAAe,MAAM,SAAQ;AAAA,EACzC,CAAG,GACKigB,IAAY,IAAIp0B,EAAQ,YACxB+yB,IAAQ;AAAA,IACZ,SAAS/yB,EAAQ;AAAA,IACjB,UAAUA,EAAQ;AAAA,IAClB,YAAYA,EAAQ;AAAA,IACpB,QAAQA,EAAQ;AAAA,IAChB,UAAUA,EAAQ,YAAY,CAAC,GAAG,GAAG,GAAG,CAAC;AAAA,IACzC,YAAY,CAACo0B,GAAW,GAAG,GAAGA,GAAW,GAAG,CAAC;AAAA,IAC7C,SAAS;AAAA,IACT,UAAU;AAAA,IACV,aAAa;AAAA,IACb,SAAS,CAAC,GAAG,GAAG;AAAA,EACpB,GACQC,IAAiBr0B,KAAWA,EAAQ,WAAW,CAAA;AACrD,EAAsBq0B,EAAe,cACnCtB,EAAM,YAAYsB,EAAe,WACjCtB,EAAM,cAAcsB,EAAe,eAAe;AAEpD,QAAMC,IAAe,CAAA,GACfjB,IAAa,CAAA;AACnB,MAAIxY;AACJ,WAASjV,IAAI,GAAGA,IAAIuT,EAAO,QAAQvT,KAAK;AACtC,IAAAiV,IAAQ1B,EAAO,IAAIvT,CAAC,GACpBytB,EAAW,KAAKxY,EAAM,IAAI;AAE5B,QAAMsR,IAAU,CAAA;AAChB,IAAE,SAASwG,GAAU,GACrB,EAAE,YAAYC,GAAc,CAAC5yB,EAAQ,cAAc,CAAC;AACpD,MAAI+tB,IAAUiF,GAAYD,GAAO5G,CAAO;AACxC,IAAE,eAAe8G,GAAiBlF,CAAO,GACzC,EAAE,kBAAkBoF,GAAmB,GACvC,EAAE,WAAWC,GAAaC,GAAYlH,CAAO,GAC7C,EAAE,mBAAmB8H,GAAqB9a,CAAkB,GAC5D,EAAE,cAAc+a,GAAgBI,GAAcnI,CAAO,GACrD,EAAE,cAAc+G,GAAgB/G,CAAO;AACvC,QAAMnX,IAAc,EAAE,OAAO,OAAM,IAAK,EAAE,UAAU,WAAW,EAAE,aAAa,OAAM,IAAK,EAAE,YAAY,OAAM,IAAK,EAAE,gBAAgB,OAAM;AAC1I,SAAA+d,EAAM,UAAU/d,GAChB+d,EAAM,WAAW,GACjBA,EAAM,cAAcA,EAAM,UAAU,EAAE,SAAS,OAAM,GACrDA,EAAM,QAAQ,CAAC,IAAIA,EAAM,cAAc,EAAE,iBAAiB,OAAM,GAChEhF,IAAUiF,GAAYD,GAAO5G,CAAO,GACpC,EAAE,eAAe8G,GAAiBlF,CAAO,GAClC;AACT;AACA,IAAIwG,KAAc,EAAE,OAAO3C,IAAe,MAAMuC,GAAY;AAG5D,SAASK,GAAevlB,GAAM2H,GAAO;AACnC,QAAM6d,IAAO,CAAA,GACPrX,IAAI,IAAIlB,EAAc,OAAOjN,GAAM2H,CAAK;AAC9C,SAAA6d,EAAK,UAAUrX,EAAE,aAAY,GAC7BqX,EAAK,eAAe,KAAK,MAAMrX,EAAE,WAAU,IAAK,GAAG,IAAI,KACvDqX,EAAK,qBAAqBrX,EAAE,WAAU,GACtCqX,EAAK,cAAcrX,EAAE,WAAU,GAC/BnP,EAAc,SAASwmB,EAAK,gBAAgB,YAAY,qCAAqC,GAC7FA,EAAK,QAAQrX,EAAE,YAAW,GAC1BqX,EAAK,aAAarX,EAAE,YAAW,GAC/BqX,EAAK,UAAUrX,EAAE,kBAAiB,GAClCqX,EAAK,WAAWrX,EAAE,kBAAiB,GACnCqX,EAAK,OAAOrX,EAAE,WAAU,GACxBqX,EAAK,OAAOrX,EAAE,WAAU,GACxBqX,EAAK,OAAOrX,EAAE,WAAU,GACxBqX,EAAK,OAAOrX,EAAE,WAAU,GACxBqX,EAAK,WAAWrX,EAAE,YAAW,GAC7BqX,EAAK,gBAAgBrX,EAAE,YAAW,GAClCqX,EAAK,oBAAoBrX,EAAE,WAAU,GACrCqX,EAAK,mBAAmBrX,EAAE,WAAU,GACpCqX,EAAK,kBAAkBrX,EAAE,WAAU,GAC5BqX;AACT;AACA,SAASC,GAAc10B,GAAS;AAC9B,QAAM20B,IAAY,KAAK,OAAuB,oBAAI,KAAI,GAAI,QAAO,IAAK,GAAG,IAAI;AAC7E,MAAIC,IAAmBD,GACnBE,IAAW70B,EAAQ,YAAY;AACnC,SAAIA,EAAQ,qBACV40B,IAAmB50B,EAAQ,mBAAmB,aAEzC,IAAImU,EAAc,MAAM,QAAQ;AAAA,IACrC,EAAE,MAAM,WAAW,MAAM,SAAS,OAAO,MAAK;AAAA,IAC9C,EAAE,MAAM,gBAAgB,MAAM,SAAS,OAAO,MAAK;AAAA,IACnD,EAAE,MAAM,sBAAsB,MAAM,SAAS,OAAO,EAAC;AAAA,IACrD,EAAE,MAAM,eAAe,MAAM,SAAS,OAAO,WAAU;AAAA,IACvD,EAAE,MAAM,SAAS,MAAM,UAAU,OAAO,EAAC;AAAA,IACzC,EAAE,MAAM,cAAc,MAAM,UAAU,OAAO,IAAG;AAAA,IAChD,EAAE,MAAM,WAAW,MAAM,gBAAgB,OAAOygB,EAAgB;AAAA,IAChE,EAAE,MAAM,YAAY,MAAM,gBAAgB,OAAOD,EAAS;AAAA,IAC1D,EAAE,MAAM,QAAQ,MAAM,SAAS,OAAO,EAAC;AAAA,IACvC,EAAE,MAAM,QAAQ,MAAM,SAAS,OAAO,EAAC;AAAA,IACvC,EAAE,MAAM,QAAQ,MAAM,SAAS,OAAO,EAAC;AAAA,IACvC,EAAE,MAAM,QAAQ,MAAM,SAAS,OAAO,EAAC;AAAA,IACvC,EAAE,MAAM,YAAY,MAAM,UAAU,OAAOE,EAAQ;AAAA,IACnD,EAAE,MAAM,iBAAiB,MAAM,UAAU,OAAO,EAAC;AAAA,IACjD,EAAE,MAAM,qBAAqB,MAAM,SAAS,OAAO,EAAC;AAAA,IACpD,EAAE,MAAM,oBAAoB,MAAM,SAAS,OAAO,EAAC;AAAA,IACnD,EAAE,MAAM,mBAAmB,MAAM,SAAS,OAAO,EAAC;AAAA,EACtD,GAAK70B,CAAO;AACZ;AACA,IAAI80B,KAAe,EAAE,OAAON,IAAgB,MAAME,GAAa;AAG/D,SAASK,GAAe9lB,GAAM2H,GAAO;AACnC,QAAMoe,IAAO,CAAA,GACP5X,IAAI,IAAIlB,EAAc,OAAOjN,GAAM2H,CAAK;AAC9C,SAAAoe,EAAK,UAAU5X,EAAE,aAAY,GAC7B4X,EAAK,WAAW5X,EAAE,WAAU,GAC5B4X,EAAK,YAAY5X,EAAE,WAAU,GAC7B4X,EAAK,UAAU5X,EAAE,WAAU,GAC3B4X,EAAK,kBAAkB5X,EAAE,YAAW,GACpC4X,EAAK,qBAAqB5X,EAAE,WAAU,GACtC4X,EAAK,sBAAsB5X,EAAE,WAAU,GACvC4X,EAAK,aAAa5X,EAAE,WAAU,GAC9B4X,EAAK,iBAAiB5X,EAAE,WAAU,GAClC4X,EAAK,gBAAgB5X,EAAE,WAAU,GACjC4X,EAAK,cAAc5X,EAAE,WAAU,GAC/BA,EAAE,kBAAkB,GACpB4X,EAAK,mBAAmB5X,EAAE,WAAU,GACpC4X,EAAK,mBAAmB5X,EAAE,YAAW,GAC9B4X;AACT;AACA,SAASC,GAAcj1B,GAAS;AAC9B,SAAO,IAAImU,EAAc,MAAM,QAAQ;AAAA,IACrC,EAAE,MAAM,WAAW,MAAM,SAAS,OAAO,MAAK;AAAA,IAC9C,EAAE,MAAM,YAAY,MAAM,SAAS,OAAO,EAAC;AAAA,IAC3C,EAAE,MAAM,aAAa,MAAM,SAAS,OAAO,EAAC;AAAA,IAC5C,EAAE,MAAM,WAAW,MAAM,SAAS,OAAO,EAAC;AAAA,IAC1C,EAAE,MAAM,mBAAmB,MAAM,UAAU,OAAO,EAAC;AAAA,IACnD,EAAE,MAAM,sBAAsB,MAAM,SAAS,OAAO,EAAC;AAAA,IACrD,EAAE,MAAM,uBAAuB,MAAM,SAAS,OAAO,EAAC;AAAA,IACtD,EAAE,MAAM,cAAc,MAAM,SAAS,OAAO,EAAC;AAAA,IAC7C,EAAE,MAAM,kBAAkB,MAAM,SAAS,OAAO,EAAC;AAAA,IACjD,EAAE,MAAM,iBAAiB,MAAM,SAAS,OAAO,EAAC;AAAA,IAChD,EAAE,MAAM,eAAe,MAAM,SAAS,OAAO,EAAC;AAAA,IAC9C,EAAE,MAAM,aAAa,MAAM,SAAS,OAAO,EAAC;AAAA,IAC5C,EAAE,MAAM,aAAa,MAAM,SAAS,OAAO,EAAC;AAAA,IAC5C,EAAE,MAAM,aAAa,MAAM,SAAS,OAAO,EAAC;AAAA,IAC5C,EAAE,MAAM,aAAa,MAAM,SAAS,OAAO,EAAC;AAAA,IAC5C,EAAE,MAAM,oBAAoB,MAAM,SAAS,OAAO,EAAC;AAAA,IACnD,EAAE,MAAM,oBAAoB,MAAM,UAAU,OAAO,EAAC;AAAA,EACxD,GAAKnU,CAAO;AACZ;AACA,IAAIk1B,KAAe,EAAE,OAAOH,IAAgB,MAAME,GAAa;AAG/D,SAASE,GAAkBlmB,GAAM2H,GAAOwe,GAAYC,GAAWlc,GAAQ;AACrE,MAAI2P,GACAwM;AACJ,QAAMlY,IAAI,IAAIlB,EAAc,OAAOjN,GAAM2H,CAAK;AAC9C,WAAShR,IAAI,GAAGA,IAAIyvB,GAAWzvB,KAAK,GAAG;AACrC,IAAIA,IAAIwvB,MACNtM,IAAe1L,EAAE,YAAW,GAC5BkY,IAAkBlY,EAAE,WAAU;AAEhC,UAAMvC,IAAQ1B,EAAO,IAAIvT,CAAC;AAC1B,IAAAiV,EAAM,eAAeiO,GACrBjO,EAAM,kBAAkBya;AAAA,EAC1B;AACF;AACA,SAASC,GAA0BvR,GAAM/U,GAAM2H,GAAOwe,GAAYC,GAAW;AAC3E,EAAArR,EAAK,iBAAiB,CAAA;AACtB,MAAI8E,GACAwM;AACJ,QAAMlY,IAAI,IAAIlB,EAAc,OAAOjN,GAAM2H,CAAK;AAC9C,WAAShR,IAAI,GAAGA,IAAIyvB,GAAWzvB,KAAK;AAClC,IAAIA,IAAIwvB,MACNtM,IAAe1L,EAAE,YAAW,GAC5BkY,IAAkBlY,EAAE,WAAU,IAEhC4G,EAAK,eAAepe,CAAC,IAAI;AAAA,MACvB,cAAAkjB;AAAA,MACA,iBAAAwM;AAAA,IACN;AAEA;AACA,SAASE,GAAexR,GAAM/U,GAAM2H,GAAOwe,GAAYC,GAAWlc,GAAQyL,GAAK;AAC7E,EAAIA,EAAI,YACN2Q,GAA0BvR,GAAM/U,GAAM2H,GAAOwe,GAAYC,CAAS,IAElEF,GAAkBlmB,GAAM2H,GAAOwe,GAAYC,GAAWlc,CAAM;AAChE;AACA,SAASsc,GAActc,GAAQ;AAC7B,QAAMhT,IAAI,IAAIgO,EAAc,MAAM,QAAQ,CAAA,CAAE;AAC5C,WAASvO,IAAI,GAAGA,IAAIuT,EAAO,QAAQvT,KAAK,GAAG;AACzC,UAAMiV,IAAQ1B,EAAO,IAAIvT,CAAC,GACpBkjB,IAAejO,EAAM,gBAAgB,GACrCya,IAAkBza,EAAM,mBAAmB;AACjD,IAAA1U,EAAE,OAAO,KAAK,EAAE,MAAM,kBAAkBP,GAAG,MAAM,UAAU,OAAOkjB,EAAY,CAAE,GAChF3iB,EAAE,OAAO,KAAK,EAAE,MAAM,qBAAqBP,GAAG,MAAM,SAAS,OAAO0vB,EAAe,CAAE;AAAA,EACvF;AACA,SAAOnvB;AACT;AACA,IAAIuvB,KAAe,EAAE,OAAOF,IAAgB,MAAMC,GAAa;AAG/D,SAASE,GAAcC,GAAM;AAC3B,QAAMhmB,IAAS,IAAIuE,EAAc,MAAM,QAAQ;AAAA,IAC7C,EAAE,MAAM,WAAW,MAAM,SAAS,OAAO,EAAC;AAAA,IAC1C,EAAE,MAAM,SAAS,MAAM,SAAS,OAAO,EAAC;AAAA,IACxC,EAAE,MAAM,WAAW,MAAM,SAAS,OAAOyhB,EAAK,OAAM;AAAA,EACxD,CAAG;AACD,MAAI5W,IAAa;AACjB,QAAM6W,IAAmB,KAAKD,EAAK,SAAS;AAC5C,WAAShwB,IAAI,GAAGA,IAAIgwB,EAAK,QAAQ,EAAEhwB,GAAG;AACpC,QAAI6K,IAAMuO,EAAW,QAAQ4W,EAAKhwB,CAAC,CAAC;AACpC,IAAI6K,IAAM,MACRA,IAAMuO,EAAW,QACjBA,KAAc4W,EAAKhwB,CAAC,IAEtBgK,EAAO,OAAO,KAAK,EAAE,MAAM,YAAYhK,GAAG,MAAM,UAAU,OAAOiwB,IAAmBplB,EAAG,CAAE,GACzFb,EAAO,OAAO,KAAK,EAAE,MAAM,YAAYhK,GAAG,MAAM,UAAU,OAAOgwB,EAAKhwB,CAAC,EAAE,OAAM,CAAE;AAAA,EACnF;AACA,SAAAgK,EAAO,OAAO,KAAK,EAAE,MAAM,cAAc,MAAM,aAAa,OAAOoP,GAAY,GACxEpP;AACT;AACA,SAASkmB,GAAe7mB,GAAM2H,GAAO;AACnC,QAAMwG,IAAI,IAAIlB,EAAc,OAAOjN,GAAM2H,CAAK,GACxCmf,IAAe3Y,EAAE,WAAU;AACjC,EAAAnP,EAAc,SAAS8nB,MAAiB,GAAG,iCAAiC,GAC5E3Y,EAAE,KAAK,SAAS,CAAC;AACjB,QAAM4Y,IAAU5Y,EAAE,WAAU,GACtBwY,IAAO,CAAA;AACb,WAAShwB,IAAI,GAAGA,IAAIowB,GAASpwB,KAAK;AAChC,QAAImB,IAAM;AACV,UAAMqF,IAASwK,IAAQwG,EAAE,YAAW,GAC9BhW,IAASgW,EAAE,YAAW;AAC5B,aAAS/N,IAAIjD,GAAQiD,IAAIjD,IAAShF,GAAQ,EAAEiI;AAC1C,MAAAtI,KAAO,OAAO,aAAakI,EAAK,QAAQI,CAAC,CAAC;AAE5C,IAAAumB,EAAK,KAAK7uB,CAAG;AAAA,EACf;AACA,SAAO6uB;AACT;AACA,IAAIK,KAAe,EAAE,MAAMN,IAAe,OAAOG,GAAc;AAG/D,SAASI,GAAejnB,GAAM2H,GAAO;AACnC,QAAMuf,IAAO,CAAA,GACP/Y,IAAI,IAAIlB,EAAc,OAAOjN,GAAM2H,CAAK;AAC9C,SAAAuf,EAAK,UAAU/Y,EAAE,aAAY,GAC7B+Y,EAAK,YAAY/Y,EAAE,YAAW,GAC1B+Y,EAAK,YAAY,MACnBA,EAAK,YAAY/Y,EAAE,YAAW,GAC9B+Y,EAAK,cAAc/Y,EAAE,YAAW,GAChC+Y,EAAK,qBAAqB/Y,EAAE,YAAW,GACvC+Y,EAAK,uBAAuB/Y,EAAE,YAAW,GACzC+Y,EAAK,WAAW/Y,EAAE,YAAW,GAC7B+Y,EAAK,oBAAoB/Y,EAAE,YAAW,GACtC+Y,EAAK,aAAa/Y,EAAE,YAAW,GAC/B+Y,EAAK,kBAAkB/Y,EAAE,YAAW,GACpC+Y,EAAK,qBAAqB/Y,EAAE,YAAW,GACvC+Y,EAAK,mBAAmB/Y,EAAE,YAAW,GACrC+Y,EAAK,wBAAwB/Y,EAAE,YAAW,GAC1C+Y,EAAK,uBAAuB/Y,EAAE,YAAW,GACzC+Y,EAAK,oBAAoB/Y,EAAE,YAAW,IAEjC+Y;AACT;AACA,SAASC,GAAcf,GAAW;AAChC,SAAO,IAAIlhB,EAAc,MAAM,QAAQ;AAAA,IACrC,EAAE,MAAM,WAAW,MAAM,SAAS,OAAO,MAAK;AAAA,IAC9C,EAAE,MAAM,aAAa,MAAM,UAAU,OAAOkhB,EAAS;AAAA,EACzD,CAAG;AACH;AACA,IAAIgB,KAAe,EAAE,OAAOH,IAAgB,MAAME,GAAa,GAG3DE,KAAgB;AAAA,EAClB,EAAE,OAAO,GAAG,KAAK,IAAG;AAAA;AAAA,EAEpB,EAAE,OAAO,KAAK,KAAK,IAAG;AAAA;AAAA,EAEtB,EAAE,OAAO,KAAK,KAAK,IAAG;AAAA;AAAA,EAEtB,EAAE,OAAO,KAAK,KAAK,IAAG;AAAA;AAAA,EAEtB,EAAE,OAAO,KAAK,KAAK,IAAG;AAAA;AAAA,EAEtB,EAAE,OAAO,KAAK,KAAK,IAAG;AAAA;AAAA,EAEtB,EAAE,OAAO,KAAK,KAAK,IAAG;AAAA;AAAA,EAEtB,EAAE,OAAO,KAAK,KAAK,KAAI;AAAA;AAAA,EAEvB,EAAE,OAAO,OAAO,KAAK,MAAK;AAAA;AAAA,EAE1B,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,OAAO,KAAK,MAAK;AAAA;AAAA,EAE1B,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,MAAK;AAAA;AAAA,EAEzB,EAAE,OAAO,OAAO,KAAK,MAAK;AAAA;AAAA,EAE1B,EAAE,OAAO,OAAO,KAAK,MAAK;AAAA;AAAA,EAE1B,EAAE,OAAO,OAAO,KAAK,MAAK;AAAA;AAAA,EAE1B,EAAE,OAAO,OAAO,KAAK,MAAK;AAAA;AAAA,EAE1B,EAAE,OAAO,OAAO,KAAK,MAAK;AAAA;AAAA,EAE1B,EAAE,OAAO,OAAO,KAAK,MAAK;AAAA;AAAA,EAE1B,EAAE,OAAO,OAAO,KAAK,MAAK;AAAA;AAAA,EAE1B,EAAE,OAAO,OAAO,KAAK,MAAK;AAAA;AAAA,EAE1B,EAAE,OAAO,OAAO,KAAK,MAAK;AAAA;AAAA,EAE1B,EAAE,OAAO,OAAO,KAAK,MAAK;AAAA;AAAA,EAE1B,EAAE,OAAO,OAAO,KAAK,MAAK;AAAA;AAAA,EAE1B,EAAE,OAAO,OAAO,KAAK,MAAK;AAAA;AAAA,EAE1B,EAAE,OAAO,OAAO,KAAK,MAAK;AAAA;AAAA,EAE1B,EAAE,OAAO,OAAO,KAAK,MAAK;AAAA;AAAA,EAE1B,EAAE,OAAO,OAAO,KAAK,MAAK;AAAA;AAAA,EAE1B,EAAE,OAAO,OAAO,KAAK,MAAK;AAAA;AAAA,EAE1B,EAAE,OAAO,OAAO,KAAK,MAAK;AAAA;AAAA,EAE1B,EAAE,OAAO,OAAO,KAAK,MAAK;AAAA;AAAA,EAE1B,EAAE,OAAO,OAAO,KAAK,MAAK;AAAA;AAAA,EAE1B,EAAE,OAAO,OAAO,KAAK,MAAK;AAAA;AAAA,EAE1B,EAAE,OAAO,OAAO,KAAK,MAAK;AAAA;AAAA,EAE1B,EAAE,OAAO,OAAO,KAAK,MAAK;AAAA;AAAA,EAE1B,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAAE,OAAO,OAAO,KAAK,MAAK;AAAA;AAAA,EAE1B,EAAE,OAAO,OAAO,KAAK,MAAK;AAAA;AAAA,EAE1B,EAAE,OAAO,MAAM,KAAK,KAAI;AAAA;AAAA,EAExB,EAA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GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA;AAAA,EAEpCA,EAAU,KAAK,QAAQ,GAAG,G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","x_google_ignoreList":[15,17,107]}