@pixi-ui-editor/schema 0.13.0 → 0.15.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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { Type, type Static, type TSchema } from \"@sinclair/typebox\";\nimport Ajv from \"ajv\";\nimport addFormats from \"ajv-formats\";\nimport type { ErrorObject } from \"ajv\";\nimport { applyPrefabNodePatch, materializePrefabInstance, PREFAB_NODE_PATH_SEPARATOR, resolveOwnerNodeGraph, resolvePrefabInstanceBaseNodes } from \"./prefabs.js\";\nimport { collectBindingKeys, collectBindingKeyScopes } from \"./bindingKeys.js\";\nimport { collectLocalizationIssues, createDefaultLocalization, LocalizationSchema } from \"./localization.js\";\n\nexport { collectBindingKeys, collectBindingKeyScopes, OWNER_BINDING_KEY_SCOPE } from \"./bindingKeys.js\";\nexport { rewriteNodeReferences, rewritePrefabInstanceReferencePatches, type NodeReferenceRewriter } from \"./nodeReferences.js\";\n\nexport const CURRENT_SCHEMA_VERSION = 39 as const;\nconst Id = Type.String({ format: \"uuid\" });\nconst Name = Type.String({ minLength: 1 });\n/**\n * Ссылка на узел внутри инстанса пресета: собственный id узла либо путь по вложенным пресетам\n * (`idA::prefab-node::idB`). Обычная нода сцены всегда использует первую форму; вторая появляется\n * только у `parentId` локально добавленного узла и у `nodeId` property override. Разрешимость\n * адреса проверяет семантическая валидация, структурная — только его форму.\n */\nconst NodeAddress = Type.Union([Id, Type.String({ pattern: `^.+${PREFAB_NODE_PATH_SEPARATOR}.+$` })]);\nexport const LayoutProfileIdSchema = Type.Union([Type.Literal(\"desktop\"), Type.Literal(\"mobile\")]);\nexport type LayoutProfileId = Static<typeof LayoutProfileIdSchema>;\n// Unity RectTransform semantics in logical Canvas units: x/y are anchoredPosition and width/height\n// are sizeDelta. A point axis needs a positive sizeDelta; a stretched axis may use negative insets.\nconst Transform = Type.Object({ x: Type.Number(), y: Type.Number(), width: Type.Number(), height: Type.Number(), scaleX: Type.Number(), scaleY: Type.Number(), rotation: Type.Number(), pivotX: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })), pivotY: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })), anchorMinX: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })), anchorMinY: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })), anchorMaxX: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })), anchorMaxY: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })) });\nconst Alignment = Type.Union([Type.Literal(\"upper-left\"), Type.Literal(\"upper-center\"), Type.Literal(\"upper-right\"), Type.Literal(\"middle-left\"), Type.Literal(\"middle-center\"), Type.Literal(\"middle-right\"), Type.Literal(\"lower-left\"), Type.Literal(\"lower-center\"), Type.Literal(\"lower-right\")]);\nexport type LayoutAlignment = Static<typeof Alignment>;\nconst Padding = Type.Object({ left: Type.Number({ minimum: 0 }), right: Type.Number({ minimum: 0 }), top: Type.Number({ minimum: 0 }), bottom: Type.Number({ minimum: 0 }) });\nexport type LayoutPadding = Static<typeof Padding>;\nconst LayoutItem = Type.Object({ flexGrow: Type.Number({ minimum: 0 }), flexShrink: Type.Number({ minimum: 0 }), flexBasis: Type.Optional(Type.Number({ exclusiveMinimum: 0 })), alignSelf: Type.Optional(Type.Union([Type.Literal(\"auto\"), Type.Literal(\"flex-start\"), Type.Literal(\"center\"), Type.Literal(\"flex-end\"), Type.Literal(\"stretch\")])) });\nexport type LayoutItemDefinition = Static<typeof LayoutItem>;\nconst LinearLayoutSettings = Type.Object({ padding: Padding, spacing: Type.Number({ minimum: 0 }), childAlignment: Alignment, reverseOrder: Type.Boolean(), controlChildWidth: Type.Boolean(), controlChildHeight: Type.Boolean(), forceExpandWidth: Type.Boolean(), forceExpandHeight: Type.Boolean() });\nexport type LinearLayoutSettings = Static<typeof LinearLayoutSettings>;\nconst GridLayoutSettings = Type.Object({ padding: Padding, spacingX: Type.Number({ minimum: 0 }), spacingY: Type.Number({ minimum: 0 }), cellWidth: Type.Number({ exclusiveMinimum: 0 }), cellHeight: Type.Number({ exclusiveMinimum: 0 }), startCorner: Type.Union([Type.Literal(\"upper-left\"), Type.Literal(\"upper-right\"), Type.Literal(\"lower-left\"), Type.Literal(\"lower-right\")]), startAxis: Type.Union([Type.Literal(\"horizontal\"), Type.Literal(\"vertical\")]), childAlignment: Alignment, constraint: Type.Union([Type.Literal(\"flexible\"), Type.Literal(\"fixed-column-count\"), Type.Literal(\"fixed-row-count\")]), constraintCount: Type.Optional(Type.Number({ exclusiveMinimum: 0 })) });\nexport type GridLayoutSettings = Static<typeof GridLayoutSettings>;\nconst ProfiledLayout = <T extends TSchema>(settings: T) => Type.Object({ base: settings, overrides: Type.Optional(Type.Partial(Type.Object({ desktop: Type.Partial(settings), mobile: Type.Partial(settings) }))) });\nconst Override = Type.Object({ visible: Type.Optional(Type.Boolean()), transform: Type.Optional(Type.Partial(Transform)) });\n// `editorOnly` and `locked` are authoring metadata. `locked` protects the node and its descendants\n// from editor mutations but deliberately has no runtime rendering semantics.\n// `bindingKey` — публичный семантический ключ ноды для игрового кода: он не меняется при rename,\n// перемещении и замене ассета. Ключ необязателен, а его уникальность проверяется в пределах\n// materialized-графа владельца (`collectBindingKeys`), поэтому нода внутри одного prefab-инстанса\n// получает собственный ключ, не задевая другой инстанс того же пресета.\nconst NodeBase = Type.Object({ id: Id, name: Name, parentId: Type.Union([NodeAddress, Type.Null()]), children: Type.Array(Id), visible: Type.Boolean(), editorOnly: Type.Optional(Type.Boolean()), locked: Type.Optional(Type.Boolean()), transform: Transform, layoutOverrides: Type.Optional(Type.Partial(Type.Object({ desktop: Override, mobile: Override }))), layoutItem: Type.Optional(LayoutItem), bindingKey: Type.Optional(Type.String()) });\nconst Container = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"container\") })]);\n// A mask clips its complete child subtree to its resolved layout rectangle. The rectangular shape\n// deliberately has no serialized settings: RectTransform is the single source of truth for it.\nconst Mask = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"mask\") })]);\n// Один множитель прозрачности на всё поддерево — тот же контракт, что Unity `CanvasGroup.alpha`:\n// значение умножается в каждого потомка отдельно (PixiJS `worldAlpha`), а не сплющивает группу в\n// offscreen-текстуру. Перекрывающиеся дети поэтому просвечивают друг сквозь друга на промежуточных\n// значениях — как и в Unity. Настоящий Photoshop-овский group opacity потребовал бы `AlphaFilter` с\n// render pass на кадр и здесь сознательно не используется: узел существует ради дешёвых fade-анимаций.\n// `opacity` — авторский дефолт и стартовое значение; текущее значение во время игры транзиентно и\n// задаётся односторонне через `setOpacityGroupViewOpacity`, как текущая стадия `staged-button`.\nconst OpacityGroup = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"opacity-group\"), opacity: Type.Number({ minimum: 0, maximum: 1 }) })]);\nconst HorizontalLayout = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"horizontal-layout\"), backgroundAssetId: Type.Optional(Id), layoutGroup: ProfiledLayout(LinearLayoutSettings) })]);\nconst VerticalLayout = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"vertical-layout\"), backgroundAssetId: Type.Optional(Id), layoutGroup: ProfiledLayout(LinearLayoutSettings) })]);\nconst GridLayout = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"grid-layout\"), backgroundAssetId: Type.Optional(Id), layoutGroup: ProfiledLayout(GridLayoutSettings) })]);\n// assetId отсутствует — нода без источника: рантайм и редактор рисуют белый прямоугольник её размера.\n// `nineSlice` отсутствует — обычный Sprite, растянутый по transform (старое поведение, без миграции).\n// При наличии — рамки в пикселях источника (как @pixi/ui fillPadding), не сериализованные проценты:\n// нода `NineSliceSprite`, углы/края не искажаются при растяжении.\nconst ImageTint = Type.String({ pattern: \"^#[0-9A-Fa-f]{6}$\" });\nconst Image = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"image\"), assetId: Type.Optional(Id), opacity: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })), tint: Type.Optional(ImageTint), nineSlice: Type.Optional(Padding) })]);\nconst TextStroke = Type.Object({ color: Type.String({ pattern: \"^#[0-9A-Fa-f]{6}([0-9A-Fa-f]{2})?$\" }), width: Type.Number({ minimum: 0 }) });\n// Числовые начертания соответствуют CSS/PIXI `font-weight` напрямую (без адаптера): у каждого\n// значения должен быть загружен свой файл шрифта с тем же `family` (см. FontAsset.weight), иначе\n// в отсутствие соответствующего `FontFace` браузер молча использует единственное загруженное\n// начертание — визуально вес не поменяется, что бы тут ни было выбрано.\nexport const TextStyleDefinitionSchema = Type.Object({ fontAssetId: Type.Optional(Id), fontFamily: Type.String({ minLength: 1 }), fontSize: Type.Number({ exclusiveMinimum: 0 }), fontWeight: Type.Union([Type.Literal(\"300\"), Type.Literal(\"normal\"), Type.Literal(\"500\"), Type.Literal(\"600\"), Type.Literal(\"bold\"), Type.Literal(\"800\")]), fontStyle: Type.Union([Type.Literal(\"normal\"), Type.Literal(\"italic\")]), fill: Type.String({ pattern: \"^#[0-9A-Fa-f]{6}([0-9A-Fa-f]{2})?$\" }), align: Type.Union([Type.Literal(\"left\"), Type.Literal(\"center\"), Type.Literal(\"right\"), Type.Literal(\"justify\")]), verticalAlign: Type.Union([Type.Literal(\"top\"), Type.Literal(\"middle\"), Type.Literal(\"bottom\")]), wordWrap: Type.Boolean(), breakWords: Type.Boolean(), lineHeight: Type.Optional(Type.Number({ exclusiveMinimum: 0 })), letterSpacing: Type.Number(), stroke: Type.Optional(TextStroke) });\nexport type TextStyleDefinition = Static<typeof TextStyleDefinitionSchema>;\nconst TextStyleOverrides = Type.Partial(Type.Object({ desktop: Type.Partial(TextStyleDefinitionSchema), mobile: Type.Partial(TextStyleDefinitionSchema) }));\n// `textKey` — единственная ссылка локализации, и она живёт именно на `Text`, а не на `NodeBase`:\n// несовместимая нода структурно не может получить localization key. `text` остаётся обязательной\n// авторской строкой, ручным режимом и последним содержательным fallback.\n// `autoSize`/`minFontSize` mirror `bitmap-text` (ADR 0027): the resolved `style.fontSize` stays the\n// authored upper bound, and with `autoSize: true` the runtime shrinks down to `minFontSize` (default\n// 1) to keep the rendered text inside the resolved rectangle. Both live on the node itself, not inside\n// `style`/`textStyleOverrides`: shrinking is a runtime fit computed from the resolved box at render\n// time, not an authored per-orientation style choice, the same reasoning bitmap text's fields follow.\nexport const TextCaseSchema = Type.Union([Type.Literal(\"none\"), Type.Literal(\"uppercase\"), Type.Literal(\"lowercase\")]);\nexport type TextCase = Static<typeof TextCaseSchema>;\n// Display-only transform applied on top of the resolved string (authored text, translation, or live\n// preview) right before it reaches the renderer/measurer — never written back into `text`/catalog\n// entries, so switching the case later, or reading the source string back out, stays lossless.\n// Omitted/`\"none\"` keeps historical documents byte-for-byte unchanged without a migration.\nconst Text = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"text\"), text: Type.String(), textKey: Type.Optional(Type.String()), style: Type.Optional(TextStyleDefinitionSchema), textStyleOverrides: Type.Optional(TextStyleOverrides), autoSize: Type.Optional(Type.Boolean()), minFontSize: Type.Optional(Type.Number({ exclusiveMinimum: 0 })), textCase: Type.Optional(TextCaseSchema) })]);\n// Optional preserves existing documents; omitted animationSpeed is interpreted as 1 by every runtime.\n// `autoplay` is the serialized initial playback decision. Older documents are migrated to true,\n// preserving the runtime behavior they had before this field became explicit.\nconst SpineProfileSettings = Type.Object({\n // `null` explicitly removes an inherited base animation; an absent key inherits it.\n animation: Type.Union([Type.String({ minLength: 1 }), Type.Null()]),\n autoplay: Type.Boolean(),\n loop: Type.Boolean(),\n animationSpeed: Type.Number({ exclusiveMinimum: 0 }),\n});\nconst SpineOverrides = Type.Partial(Type.Object({ desktop: Type.Partial(SpineProfileSettings), mobile: Type.Partial(SpineProfileSettings) }));\n/** A presentation-time mount point: game code decides when the target follows its Spine part. */\nexport const SpineConnectorSchema = Type.Object({\n partType: Type.Union([Type.Literal(\"bone\"), Type.Literal(\"slot\")]),\n partName: Type.String({ minLength: 1 }),\n targetNodeId: NodeAddress,\n // Множитель проецируемой позиции части по осям (1 = следовать за костью ровно, 2 = вдвое дальше\n // от origin ноды Spine, отрицательное значение — зеркально). Отсутствует — `{ x: 1, y: 1 }`.\n // Profile-aware тем же sparse-mobile приёмом, что `spineOverrides` (ADR 0022): base редактируется\n // в Horizontal, `positionMultiplierOverrides.mobile` — в Vertical.\n positionMultiplier: Type.Optional(Type.Object({ x: Type.Number(), y: Type.Number() })),\n positionMultiplierOverrides: Type.Optional(Type.Object({ mobile: Type.Optional(Type.Object({ x: Type.Optional(Type.Number()), y: Type.Optional(Type.Number()) })) })),\n});\nexport type SpineConnector = Static<typeof SpineConnectorSchema>;\nexport function resolveSpineConnectorPositionMultiplier(connector: Pick<SpineConnector, \"positionMultiplier\" | \"positionMultiplierOverrides\">, profile: LayoutProfileId): { x: number; y: number } {\n const base = connector.positionMultiplier ?? { x: 1, y: 1 };\n const override = profile === \"desktop\" ? undefined : connector.positionMultiplierOverrides?.mobile;\n return { x: override?.x ?? base.x, y: override?.y ?? base.y };\n}\nconst Spine = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"spine\"), assetId: Id, animation: Type.Optional(Type.String({ minLength: 1 })), autoplay: Type.Optional(Type.Boolean()), loop: Type.Optional(Type.Boolean()), animationSpeed: Type.Optional(Type.Number({ exclusiveMinimum: 0 })), spineOverrides: Type.Optional(SpineOverrides), connectors: Type.Optional(Type.Array(SpineConnectorSchema)) })]);\nconst BitmapTextAlign = Type.Union([Type.Literal(\"left\"), Type.Literal(\"center\"), Type.Literal(\"right\")]);\n// A bitmap font's glyphs come pre-rendered from its texture, so unlike `Text` there is no system\n// fallback: `assetId` is required (like Spine's), and the \"Bitmap Text\" add-node entry stays disabled\n// until at least one `bitmapFont` asset exists — a bitmap-text node with no asset has nothing to draw.\nconst BitmapText = Type.Composite([NodeBase, Type.Object({\n type: Type.Literal(\"bitmap-text\"),\n text: Type.String(),\n assetId: Id,\n // The authored/preferred size. With `autoSize` on, this doubles as the upper bound the runtime\n // shrinks down from — never grows past it — the same \"Best Fit\" contract Unity's legacy Text uses.\n fontSize: Type.Number({ exclusiveMinimum: 0 }),\n fill: Type.String({ pattern: \"^#[0-9A-Fa-f]{6}([0-9A-Fa-f]{2})?$\" }),\n align: BitmapTextAlign,\n verticalAlign: Type.Union([Type.Literal(\"top\"), Type.Literal(\"middle\"), Type.Literal(\"bottom\")]),\n letterSpacing: Type.Number(),\n wordWrap: Type.Boolean(),\n // Omitted/false keeps the historical behavior: fixed `fontSize`, overflow simply clips/overruns.\n autoSize: Type.Optional(Type.Boolean()),\n // The floor `autoSize` won't shrink past; omitted defaults to 1 at the runtime/view layer, not here,\n // so old documents (no `autoSize`, no `minFontSize`) stay byte-for-byte meaningful without migration.\n minFontSize: Type.Optional(Type.Number({ exclusiveMinimum: 0 })),\n})]);\nexport const PrefabNodeOverrideSchema = Type.Object({\n /** Адрес переопределяемого узла внутри инстанса; для вложенных пресетов это путь. */\n nodeId: NodeAddress,\n /**\n * RFC-7396-like merge patch. Semantic validation rejects structural fields and validates the\n * effective node after applying it to the referenced prefab-definition node.\n */\n patch: Type.Record(Type.String(), Type.Unknown()),\n});\nexport type PrefabNodeOverride = Static<typeof PrefabNodeOverrideSchema>;\n/**\n * Состояния кнопки. Все четыре опциональны: `hover`/`pressed`/`disabled` при отсутствии используют\n * изображение `normal`, а `normal` без ассета рендерится невидимой (alpha 0), но по-прежнему\n * кликабельной областью — кнопку можно расставлять до того, как в проект загружена графика, и клик\n * уже работает.\n */\nexport const BUTTON_STATE_KEYS = [\"normal\", \"hover\", \"pressed\", \"disabled\"] as const;\nexport type ButtonStateKey = (typeof BUTTON_STATE_KEYS)[number];\n/** Discriminated transition: в v0 поддержан только `instant`, чтобы позже добавить bump/slide/fade без неявных полей. */\nconst ButtonTransition = Type.Object({ kind: Type.Literal(\"instant\") });\nconst ButtonTint = Type.String({ pattern: \"^#[0-9A-Fa-f]{6}$\" });\n/**\n * Appearance is owned by each visual button state. Missing tint/opacity deliberately mean the\n * neutral Pixi values (white and 1), so existing button artwork preserves its exact appearance.\n */\nconst ButtonStates = Type.Object({\n normalAssetId: Type.Optional(Id), hoverAssetId: Type.Optional(Id), pressedAssetId: Type.Optional(Id), disabledAssetId: Type.Optional(Id),\n normalTint: Type.Optional(ButtonTint), hoverTint: Type.Optional(ButtonTint), pressedTint: Type.Optional(ButtonTint), disabledTint: Type.Optional(ButtonTint),\n normalOpacity: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })), hoverOpacity: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })), pressedOpacity: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })), disabledOpacity: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })),\n});\nconst ButtonSounds = Type.Object({ pressAssetId: Type.Optional(Id), hoverAssetId: Type.Optional(Id) });\nconst ButtonTransitions = Type.Partial(Type.Object({ normal: ButtonTransition, hover: ButtonTransition, pressed: ButtonTransition, disabled: ButtonTransition }));\n// `enabled` — сериализованное начальное presentation-состояние; runtime setter документ не меняет.\n// `nineSlice` — общие для всех 4 состояний границы (как у Image): рамка кнопки обычно одной формы\n// независимо от того, какая картинка сейчас показана.\nconst Button = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"button\"), states: ButtonStates, sounds: Type.Optional(ButtonSounds), enabled: Type.Boolean(), transitions: Type.Optional(ButtonTransitions), nineSlice: Type.Optional(Padding) })]);\n// A staged button is a separate component, not a generalization of `button`: it reuses `ButtonStates`\n// (and `BUTTON_STATE_KEYS`) so a stage's own normal/hover/pressed/disabled fallback rule stays the\n// single existing definition, but owns its own node type, view class and Inspector section.\n// \"How many stages\" is the length of `stages`, not a parallel count field: a count without artwork is\n// meaningless and two independent fields would inevitably drift apart. `value` is an arbitrary author\n// string for game code; its uniqueness is not required — `id` uniqueness is, since it is what\n// `defaultStageId` and runtime addressing key off. `nineSlice`/`sounds` are shared across every stage,\n// like `nineSlice` is shared across a button's four states.\nconst StagedButtonStage = Type.Object({ id: Id, value: Type.String(), states: ButtonStates });\nconst StagedButton = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"staged-button\"), stages: Type.Array(StagedButtonStage, { minItems: 1 }), defaultStageId: Id, wrap: Type.Boolean(), enabled: Type.Boolean(), sounds: Type.Optional(ButtonSounds), nineSlice: Type.Optional(Padding) })]);\n// Базовые unchecked/checked обязательны — в отличие от кнопки, тут нет запасного normal. Hover-пара\n// опциональна и при отсутствии падает обратно на свою базовую картинку (как hover/pressed у кнопки).\nexport const CHECKBOX_STATE_KEYS = [\"unchecked\", \"checked\", \"uncheckedHover\", \"checkedHover\"] as const;\nexport type CheckboxStateKey = (typeof CHECKBOX_STATE_KEYS)[number];\nconst CheckboxStates = Type.Object({ uncheckedAssetId: Id, checkedAssetId: Id, uncheckedHoverAssetId: Type.Optional(Id), checkedHoverAssetId: Type.Optional(Id) });\nconst CheckboxSounds = Type.Object({ checkAssetId: Type.Optional(Id), uncheckAssetId: Type.Optional(Id) });\n// `group` — необязательный radio-scope: при клике рантайм снимает `checked` у остальных чекбоксов\n// с тем же `parentId` и тем же `group` (см. `wireCheckboxGroups` в runtime-pixi). Без `group` узел\n// ведёт себя как независимый toggle. `defaultChecked` — сериализованное начальное состояние, как\n// `enabled` у кнопки: рантайм-переключение документ не меняет.\nconst Checkbox = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"checkbox\"), states: CheckboxStates, sounds: Type.Optional(CheckboxSounds), enabled: Type.Boolean(), defaultChecked: Type.Boolean(), group: Type.Optional(Type.String({ minLength: 1 })) })]);\n// Прямые children — scroll items; их позицию владеет `@pixi/ui` List, поэтому per-profile overrides\n// настроек не нужны (как у text style) — только собственные transform/visibility остаются profile-aware.\nconst ScrollViewDirection = Type.Union([Type.Literal(\"vertical\"), Type.Literal(\"horizontal\"), Type.Literal(\"both\")]);\nexport type ScrollViewDirection = Static<typeof ScrollViewDirection>;\nconst ScrollViewSettings = Type.Object({\n direction: ScrollViewDirection,\n padding: Padding,\n itemSpacing: Type.Number({ minimum: 0 }),\n backgroundColor: Type.Optional(Type.String({ pattern: \"^#[0-9A-Fa-f]{6}([0-9A-Fa-f]{2})?$\" })),\n cornerRadius: Type.Number({ minimum: 0 }),\n easingEnabled: Type.Boolean(),\n // Значим только при direction \"horizontal\"; для остальных направлений безопасно игнорируется.\n shiftWheelHorizontal: Type.Optional(Type.Boolean()),\n});\nexport type ScrollViewSettings = Static<typeof ScrollViewSettings>;\nconst ScrollView = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"scroll-view\"), scrollView: ScrollViewSettings })]);\n// A page group shows exactly one direct child (\"page\") at a time and hides the rest; each page fills\n// the group's full resolved rectangle, the same \"children don't own their own position\" contract\n// layout groups and scroll-view already have (see `isPositionManagingContainer`). Page order is simply\n// hierarchy child order — no parallel count field, the same reasoning `staged-button.stages` follows.\n// `defaultPage` is the authored/initial visible page; switching pages at runtime is driven one-way by\n// game code (or the standalone `pagination` widget's `onPageChange`) through `setPageGroupPage`, never\n// by the group itself — it has no built-in swipe gesture or transition.\n// Optional carousel arrows: existing authored buttons wired the same way `pagination`'s\n// `prevButtonNodeId`/`nextButtonNodeId` are (ADR 0043) — the group renders nothing of its own, only\n// subscribes to a press. `pageUpButtonNodeId` advances (wraps past the last page to the first),\n// `pageDownButtonNodeId` goes back (wraps past the first page to the last) — unlike pagination's\n// prev/next, page-group never disables an arrow at the edge of the range, because there is no edge.\nconst PageGroup = Type.Composite([NodeBase, Type.Object({\n type: Type.Literal(\"page-group\"),\n defaultPage: Type.Integer({ minimum: 0 }),\n pageUpButtonNodeId: Type.Optional(NodeAddress),\n pageDownButtonNodeId: Type.Optional(NodeAddress),\n})]);\n// Контейнер фиксированной вместимости: держит список дочерних узлов и показывает только первые\n// `visibleCount` из них, остальные скрыты всегда. Это не страницы (`page-group` показывает ровно\n// одного ребёнка и растягивает его на себя) и не раскладка (`isPositionManagingContainer` его не\n// включает — дети сохраняют собственный transform): единственная ответственность узла — вместимость.\n// Она profile-aware, потому что в разной ориентации экрана на экран влезает разное число строк;\n// `visibleCountOverrides` — тот же sparse-mobile приём, что у `textStyleOverrides`/`spineOverrides`.\n// Чем наполнять видимые элементы и когда — решает игровой код через generic runtime API\n// (`getItemTableViewVisibleItems` и соседи); редактор не знает ни про какие данные.\nconst ItemTable = Type.Composite([NodeBase, Type.Object({\n type: Type.Literal(\"item-table\"),\n // Явный авторский список узлов, а не дети: элемент обычно уже лежит там, где его выравнивает\n // layout-группа, и переподчинение таблице отдало бы его позицию другому владельцу. Порядок\n // массива — порядок элементов, иерархия на него не влияет.\n // `NodeAddress`, а не `Id`: элементом может быть узел внутри инстанса пресета, а он адресуется\n // путём `instanceId::prefab-node::nodeId` — ровно как цель spine-коннектора.\n items: Type.Optional(Type.Array(NodeAddress)),\n visibleCount: Type.Integer({ minimum: 0 }),\n visibleCountOverrides: Type.Optional(Type.Object({ mobile: Type.Optional(Type.Integer({ minimum: 0 })) })),\n})]);\nconst InputAlign = Type.Union([Type.Literal(\"left\"), Type.Literal(\"center\"), Type.Literal(\"right\")]);\nexport type InputAlign = Static<typeof InputAlign>;\n// Reuses the shared `TextStyleDefinition` (TASK-029) so an input never grows an incompatible parallel\n// font/style field set; fields that don't apply to a single line (wordWrap, verticalAlign, ...) are\n// simply ignored by the runtime view, the same way a button ignores unused optional state assets.\nconst Input = Type.Composite([NodeBase, Type.Object({\n type: Type.Literal(\"input\"),\n backgroundAssetId: Type.Optional(Id),\n placeholder: Type.String(),\n defaultValue: Type.String(),\n // Positive integer: a character-count limit can't be fractional or non-positive.\n maxLength: Type.Optional(Type.Integer({ exclusiveMinimum: 0 })),\n secure: Type.Boolean(),\n align: InputAlign,\n padding: Padding,\n cleanOnFocus: Type.Boolean(),\n clipText: Type.Boolean(),\n textStyle: TextStyleDefinitionSchema,\n})]);\nconst Slider = Type.Composite([NodeBase, Type.Object({\n type: Type.Literal(\"slider\"),\n backgroundAssetId: Id,\n fillAssetId: Id,\n handleAssetId: Id,\n min: Type.Number(),\n max: Type.Number(),\n step: Type.Number(),\n defaultValue: Type.Number(),\n fillPadding: Padding,\n showValue: Type.Optional(Type.Boolean()),\n valueTextStyle: Type.Optional(TextStyleDefinitionSchema),\n})]);\nconst ProgressBar = Type.Composite([NodeBase, Type.Object({\n type: Type.Literal(\"progress-bar\"),\n backgroundAssetId: Id,\n fillAssetId: Id,\n defaultProgress: Type.Number(),\n fillPadding: Padding,\n})]);\nconst PaginationDirection = Type.Union([Type.Literal(\"horizontal\"), Type.Literal(\"vertical\")]);\nexport type PaginationDirection = Static<typeof PaginationDirection>;\nconst DotSize = Type.Object({ width: Type.Number({ exclusiveMinimum: 0 }), height: Type.Number({ exclusiveMinimum: 0 }) });\nconst PaginationItemStyle = Type.Union([Type.Literal(\"dots\"), Type.Literal(\"numbers\")]);\nexport type PaginationItemStyle = Static<typeof PaginationItemStyle>;\n// A standalone page indicator, deliberately not wired to any scroll-view: game code owns the actual\n// page transition and drives the widget one-way via the runtime API (`setPaginationViewPage`/\n// `setPaginationViewPageCount`), the same relationship a slider/progress-bar has to whatever value\n// they display. `pageCount`/`defaultPage` are authored defaults for editor preview and the initial\n// runtime state; the real page count is normally data-driven and set at runtime. `clickable` is\n// optional interactivity: a click highlights the dot immediately and emits `onPageChange`, mirroring\n// how a checkbox/slider updates its own visual state before notifying game code.\n// `style` picks between image dots (`activeAssetId`/`inactiveAssetId`, required only in this style)\n// and rendered page-number text (`numberStyle`/`numberActiveColor`, an optional highlight applied only\n// to the current page's digit): the two visual kinds are mutually exclusive, so each style's own fields\n// stay optional at the schema level and are required only semantically (validated in `hierarchy()`).\nconst Pagination = Type.Composite([NodeBase, Type.Object({\n type: Type.Literal(\"pagination\"),\n style: PaginationItemStyle,\n activeAssetId: Type.Optional(Id),\n inactiveAssetId: Type.Optional(Id),\n numberStyle: Type.Optional(TextStyleDefinitionSchema),\n numberActiveColor: Type.Optional(Type.String({ pattern: \"^#[0-9A-Fa-f]{6}([0-9A-Fa-f]{2})?$\" })),\n // Optional \"pill\" background behind the current page's digit only (a plain Sprite, or a\n // NineSliceSprite when `numberActiveNineSlice` is set) — sized to `dotSize`, the same field a\n // `dots`-style item already uses for its own box. Absent means no background, same as before this\n // field existed: just the `numberActiveColor` text highlight.\n numberActiveBackgroundAssetId: Type.Optional(Id),\n numberActiveNineSlice: Type.Optional(Padding),\n pageCount: Type.Integer({ minimum: 1 }),\n defaultPage: Type.Integer({ minimum: 0 }),\n direction: PaginationDirection,\n spacing: Type.Number({ minimum: 0 }),\n dotSize: DotSize,\n clickable: Type.Boolean(),\n // Existing button nodes wired as the widget's prev/next arrows: the arrows are ordinary authored\n // buttons placed wherever the layout needs them, and this is only the wiring that makes a press\n // step the current page and emit `onPageChange`. Referenced by id rather than owned, because the\n // widget deliberately renders nothing but its own page items — see ADR 0043.\n // `NodeAddress`, а не `Id`: стрелка часто лежит внутри инстанса пресета и адресуется путём.\n prevButtonNodeId: Type.Optional(NodeAddress),\n nextButtonNodeId: Type.Optional(NodeAddress),\n // How many indicator slots are rendered at once. Must be odd, because the active page always sits\n // in the middle slot: 4 pages with page 3 active render 2-3-4. A slot whose page falls outside\n // 0..pageCount-1 keeps its `dotSize` footprint and renders nothing, so the active page never moves\n // sideways as pages are added. Absent means \"one slot per page\" (the pre-v36 behavior).\n visiblePageCount: Type.Optional(Type.Integer({ minimum: 1 })),\n})]);\nconst Range = Type.Object({ min: Type.Number(), max: Type.Number() });\nconst PositiveRange = Type.Object({ min: Type.Number({ exclusiveMinimum: 0 }), max: Type.Number({ exclusiveMinimum: 0 }) });\nconst Color = Type.String({ pattern: \"^#[0-9A-Fa-f]{6}([0-9A-Fa-f]{2})?$\" });\nconst ParticleSource = Type.Union([\n Type.Object({ type: Type.Literal(\"single\"), assetId: Id }),\n Type.Object({ type: Type.Literal(\"random\"), assetIds: Type.Array(Id, { minItems: 1 }) }),\n Type.Object({ type: Type.Literal(\"sequence\"), assetIds: Type.Array(Id, { minItems: 1 }), fps: Type.Number({ exclusiveMinimum: 0 }), loop: Type.Boolean(), randomStartFrame: Type.Boolean() }),\n]);\nexport const EffectDefinitionSchema = Type.Union([Type.Object({\n id: Id, name: Name, type: Type.Literal(\"particles\"), maxParticles: Type.Integer({ minimum: 1, maximum: 10000 }), seed: Type.Integer({ minimum: 0, maximum: 4294967295 }),\n emission: Type.Object({ delay: Type.Number({ minimum: 0 }), duration: Type.Number({ exclusiveMinimum: 0 }), loop: Type.Boolean(), rate: Type.Number({ minimum: 0 }), bursts: Type.Array(Type.Object({ time: Type.Number({ minimum: 0 }), count: Type.Integer({ minimum: 1 }) })) }),\n particle: Type.Object({\n lifetime: PositiveRange,\n spawnShape: Type.Object({ type: Type.Union([Type.Literal(\"point\"), Type.Literal(\"rectangle\"), Type.Literal(\"circle\")]) }),\n movement: Type.Object({ speed: Range, directionDegrees: Type.Number({ minimum: 0, maximum: 360 }), spreadDegrees: Type.Number({ minimum: 0, maximum: 360 }), accelerationX: Type.Number(), accelerationY: Type.Number(), drag: Type.Number({ minimum: 0 }) }),\n visual: Type.Object({ source: ParticleSource, alpha: Type.Object({ start: Type.Number({ minimum: 0, maximum: 1 }), end: Type.Number({ minimum: 0, maximum: 1 }) }), scale: Type.Object({ start: PositiveRange, end: PositiveRange }), tint: Type.Object({ start: Color, end: Color }), rotation: Type.Object({ initialDegrees: Range, angularVelocityDegrees: Range }), blendMode: Type.Union([Type.Literal(\"normal\"), Type.Literal(\"add\"), Type.Literal(\"multiply\"), Type.Literal(\"screen\")]) }),\n }),\n})]);\nexport type EffectDefinition = Static<typeof EffectDefinitionSchema>;\nexport type ParticleEffectDefinition = Extract<EffectDefinition, { type: \"particles\" }>;\nexport function isParticleEffect(effect: EffectDefinition): effect is ParticleEffectDefinition { return effect.type === \"particles\"; }\nconst ParticleEmitter = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"particle-emitter\"), effectId: Id, autoplay: Type.Boolean(), simulationSpace: Type.Union([Type.Literal(\"local\"), Type.Literal(\"world\")]) })]);\n/**\n * Локальное добавление внутри инстанса — обычный узел любого типа, включая другой инстанс пресета\n * (как added GameObject в Unity). Поэтому схема узла рекурсивна: `prefab-instance` содержит массив\n * таких же узлов.\n */\nconst UI_NODE_SCHEMA_ID = \"UINode\";\nexport const UINodeSchema = Type.Recursive((Self) => Type.Union([Container, Mask, OpacityGroup, ItemTable, HorizontalLayout, VerticalLayout, GridLayout, Image, Text, BitmapText, Spine, Button, StagedButton, Checkbox, Type.Composite([NodeBase, Type.Object({\n type: Type.Literal(\"prefab-instance\"),\n prefabId: Id,\n propertyOverrides: Type.Optional(Type.Array(PrefabNodeOverrideSchema)),\n locallyAddedNodes: Type.Optional(Type.Array(Self)),\n})]), ScrollView, PageGroup, Input, Slider, ProgressBar, ParticleEmitter, Pagination]), { $id: UI_NODE_SCHEMA_ID });\nexport type UINode = Static<typeof UINodeSchema>;\n/**\n * Ссылка на схему узла для владельцев (сцена, пресет). Встроить рекурсивную схему дважды нельзя:\n * её `$id` оказался бы в документе в двух местах, и Ajv не смог бы разрешить внутренние `$ref`.\n * Поэтому схема узла регистрируется в Ajv один раз, а владельцы ссылаются на неё.\n */\nconst UINodeRef = Type.Unsafe<UINode>({ $ref: UI_NODE_SCHEMA_ID });\n/** Исторический псевдоним: локальное добавление больше ничем не ограничено по сравнению с узлом сцены. */\nexport const LocallyAddedNodeSchema = UINodeSchema;\nexport type LocallyAddedNode = UINode;\nexport type LayoutGroupNode = Extract<UINode, { type: \"horizontal-layout\" | \"vertical-layout\" | \"grid-layout\" }>;\nexport function isLayoutGroup(node: UINode): node is LayoutGroupNode { return node.type === \"horizontal-layout\" || node.type === \"vertical-layout\" || node.type === \"grid-layout\"; }\nexport function resolveLayoutGroupSettings<T extends LayoutGroupNode[\"layoutGroup\"][\"base\"]>(node: LayoutGroupNode, profile: LayoutProfileId): T {\n return { ...node.layoutGroup.base, ...node.layoutGroup.overrides?.[profile] } as T;\n}\nexport type ScrollViewNode = Extract<UINode, { type: \"scroll-view\" }>;\nexport function isScrollView(node: UINode): node is ScrollViewNode { return node.type === \"scroll-view\"; }\nexport type PageGroupNode = Extract<UINode, { type: \"page-group\" }>;\nexport function isPageGroup(node: UINode): node is PageGroupNode { return node.type === \"page-group\"; }\nexport type OpacityGroupNode = Extract<UINode, { type: \"opacity-group\" }>;\nexport function isOpacityGroup(node: UINode): node is OpacityGroupNode { return node.type === \"opacity-group\"; }\n/** A direct child of this node does not own its own position: a layout group's Yoga solver, a scroll-view's `@pixi/ui` List, or a page group's single-visible-child switch does. */\nexport function isPositionManagingContainer(node: UINode): boolean { return isLayoutGroup(node) || isScrollView(node) || isPageGroup(node); }\nexport type TextNode = Extract<UINode, { type: \"text\" }>;\nexport function isTextNode(node: UINode): node is TextNode { return node.type === \"text\"; }\nexport type SpineNode = Extract<UINode, { type: \"spine\" }>;\nexport type BitmapTextNode = Extract<UINode, { type: \"bitmap-text\" }>;\nexport type ImageNode = Extract<UINode, { type: \"image\" }>;\nexport type InputNode = Extract<UINode, { type: \"input\" }>;\nexport type CheckboxNode = Extract<UINode, { type: \"checkbox\" }>;\nexport type SliderNode = Extract<UINode, { type: \"slider\" }>;\nexport type ProgressBarNode = Extract<UINode, { type: \"progress-bar\" }>;\nexport type PaginationNode = Extract<UINode, { type: \"pagination\" }>;\nexport type ItemTableNode = Extract<UINode, { type: \"item-table\" }>;\nexport function isItemTable(node: UINode): node is ItemTableNode { return node.type === \"item-table\"; }\n/**\n * Сколько первых детей таблица показывает в этом профиле. Единственная реализация для валидации,\n * runtime-вида и Inspector; `undefined` в override означает «наследовать base», а не ноль.\n */\nexport function resolveItemTableVisibleCount(node: Pick<ItemTableNode, \"visibleCount\" | \"visibleCountOverrides\">, profile: LayoutProfileId): number {\n const override = profile === \"desktop\" ? undefined : node.visibleCountOverrides?.mobile;\n return Math.max(0, Math.round(override ?? node.visibleCount));\n}\nexport type ParticleEmitterNode = Extract<UINode, { type: \"particle-emitter\" }>;\nexport type StagedButtonNode = Extract<UINode, { type: \"staged-button\" }>;\nexport function isParticleEmitterNode(node: UINode): node is ParticleEmitterNode { return node.type === \"particle-emitter\"; }\nconst Viewport = Type.Object({ width: Type.Number({ exclusiveMinimum: 0 }), height: Type.Number({ exclusiveMinimum: 0 }) });\nconst SceneAudio = Type.Object({ backgroundMusicAssetId: Type.Optional(Id), volume: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })) });\nexport const SceneSchema = Type.Object({ id: Id, name: Name, rootNodeIds: Type.Array(Id), nodes: Type.Array(UINodeRef), layout: Type.Object({ referenceViewports: Type.Object({ desktop: Viewport, mobile: Viewport }), preferredViewports: Type.Object({ desktop: Viewport, mobile: Viewport }) }), audio: Type.Optional(SceneAudio) });\nexport type Scene = Static<typeof SceneSchema>;\nexport const AssetFileSchema = Type.Object({ name: Name, uri: Type.String({ minLength: 1 }), mediaType: Type.String({ minLength: 1 }) });\nexport type AssetFile = Static<typeof AssetFileSchema>;\nconst ImageAsset = Type.Object({ id: Id, name: Name, type: Type.Literal(\"image\"), source: Type.Object({ uri: Type.String({ minLength: 1 }), mediaType: Type.String({ minLength: 1 }), version: Type.Optional(Type.String({ minLength: 1 })) }) });\nexport const SpineReferenceFrameSchema = Type.Object({\n x: Type.Number(),\n y: Type.Number(),\n width: Type.Number({ exclusiveMinimum: 0 }),\n height: Type.Number({ exclusiveMinimum: 0 }),\n});\nexport type SpineReferenceFrame = Static<typeof SpineReferenceFrameSchema>;\nconst SpineAsset = Type.Object({ id: Id, name: Name, type: Type.Literal(\"spine\"), files: Type.Object({ skeleton: AssetFileSchema, atlas: AssetFileSchema, textures: Type.Array(AssetFileSchema, { minItems: 1 }) }), referenceFrame: Type.Optional(SpineReferenceFrameSchema) });\n// `weight`/`style` описывают начертание, которое реально содержит загруженный файл (см.\n// TextStyleDefinitionSchema.fontWeight выше): загрузка того же `family` под разными весами\n// регистрирует несколько `FontFace` и позволяет тексту переключаться между ними.\nconst FontAsset = Type.Object({ id: Id, name: Name, type: Type.Literal(\"font\"), family: Name, weight: Type.Union([Type.Literal(\"300\"), Type.Literal(\"normal\"), Type.Literal(\"500\"), Type.Literal(\"600\"), Type.Literal(\"bold\"), Type.Literal(\"800\")]), style: Type.Union([Type.Literal(\"normal\"), Type.Literal(\"italic\")]), source: Type.Object({ uri: Type.String({ minLength: 1 }), mediaType: Type.String({ minLength: 1 }), version: Type.Optional(Type.String({ minLength: 1 })) }) });\n// Имя фрейма из spritesheet JSON → стабильный id фрейма; nodes ссылаются на этот id как на обычный image assetId.\nconst AtlasAsset = Type.Object({ id: Id, name: Name, type: Type.Literal(\"atlas\"), files: Type.Object({ json: AssetFileSchema, texture: AssetFileSchema }), frames: Type.Record(Type.String({ minLength: 1 }), Id) });\nconst SoundAsset = Type.Object({ id: Id, name: Name, type: Type.Literal(\"sound\"), source: Type.Object({ uri: Type.String({ minLength: 1 }), mediaType: Type.String({ minLength: 1 }), version: Type.Optional(Type.String({ minLength: 1 })) }) });\n// A BMFont/XML export: `xml` carries the glyph layout (`<info>`/`<chars>`), `texture` the glyph sheet\n// it describes. Unlike a TTF/OTF `FontAsset`, one bitmap font is one fixed rendered appearance —\n// there is no separate weight/style to tag, so a bold or condensed variant is just another asset.\n// `frames` mirrors `AtlasAsset.frames`: glyph name (e.g. a digit) → stable id, cropped from the same\n// texture at import time from the parsed BMFont `<chars>` list. Nodes reference a frame id exactly\n// like a normal image assetId, so one glyph can be reused directly in an Image/Button/etc. `Optional`\n// (unlike atlas, which never predates this) because it was added after `bitmapFont` already shipped:\n// existing assets simply have none, same as an atlas would if all its frames were deleted.\nconst BitmapFontAsset = Type.Object({ id: Id, name: Name, type: Type.Literal(\"bitmapFont\"), files: Type.Object({ xml: AssetFileSchema, texture: AssetFileSchema }), frames: Type.Optional(Type.Record(Type.String({ minLength: 1 }), Id)) });\nexport const AssetSchema = Type.Union([ImageAsset, SpineAsset, FontAsset, AtlasAsset, SoundAsset, BitmapFontAsset]);\nexport type Asset = Static<typeof AssetSchema>;\nexport const PrefabDefinitionSchema = Type.Object({ id: Id, name: Name, rootNodeIds: Type.Array(Id), nodes: Type.Array(UINodeRef), exposedProperties: Type.Array(Type.Object({ name: Name, type: Type.Union([Type.Literal(\"string\"), Type.Literal(\"number\"), Type.Literal(\"boolean\"), Type.Literal(\"asset\"), Type.Literal(\"visibility\")]) })) });\nexport type PrefabDefinition = Static<typeof PrefabDefinitionSchema>;\nexport const ProjectDocumentSchema = Type.Object({ schemaVersion: Type.Literal(CURRENT_SCHEMA_VERSION), project: Type.Object({ id: Id, name: Name }), settings: Type.Object({ layoutProfileSelection: Type.Object({ mode: Type.Literal(\"aspect-ratio\"), mobileMaxAspectRatio: Type.Number({ exclusiveMinimum: 0 }) }) }), localization: LocalizationSchema, assets: Type.Array(AssetSchema), effects: Type.Array(EffectDefinitionSchema), prefabs: Type.Array(PrefabDefinitionSchema), scenes: Type.Array(SceneSchema) });\nexport type ProjectDocument = Static<typeof ProjectDocumentSchema>;\n\nexport type ValidationIssue = { code: string; path: string; message: string; severity: \"error\" | \"warning\" };\n/** `valid` означает отсутствие issues с severity `error`, а не пустой массив: warnings сохраняемы. */\nexport type ValidationResult = { valid: boolean; issues: ValidationIssue[] };\nexport class ProjectDocumentMigrationError extends Error { readonly code = \"UNSUPPORTED_SCHEMA_VERSION\"; constructor(message: string) { super(message); this.name = \"ProjectDocumentMigrationError\"; } }\nconst AjvConstructor = Ajv as unknown as typeof import(\"ajv\").default;\nconst addAjvFormats = addFormats as unknown as typeof import(\"ajv-formats\").default;\nconst createAjv = () => { const instance = new AjvConstructor({ allErrors: true, strict: false }); addAjvFormats(instance); return instance; };\n// Рекурсивная схема узла несёт собственный `$id`, поэтому её нельзя компилировать дважды в одном\n// экземпляре Ajv: документ уже зарегистрировал этот `$id` внутри себя.\nconst documentAjv = createAjv(); documentAjv.addSchema(UINodeSchema);\nconst structural = documentAjv.compile(ProjectDocumentSchema); const structuralNode = createAjv().compile(UINodeSchema);\nexport function createStableId(): string { return crypto.randomUUID(); }\nconst add = (issues: ValidationIssue[], code: string, path: string, message: string) => issues.push({ code, path, message, severity: \"error\" });\n\n/** Общая проверка владельца: одинаковые issue получают и сцена, и определение пресета. */\nfunction checkBindingKeys(document: ProjectDocument, owner: Owner, path: string, issues: ValidationIssue[]): void {\n const graph = resolveOwnerNodeGraph(document, owner);\n // Пустой ключ не зависит от области: это дефект самой ноды, и сообщить о нём нужно ровно один раз.\n if (graph.nodes.some((node) => node.bindingKey !== undefined && node.bindingKey.trim() === \"\")) {\n add(issues, \"EMPTY_BINDING_KEY\", `${path}/bindingKey`, \"A binding key must not be empty after trimming.\");\n }\n const reported = new Set<string>();\n collectBindingKeyScopes(graph).forEach((nodes) => {\n collectBindingKeys(nodes).forEach((nodeIds, key) => {\n if (key === \"\" || nodeIds.length <= 1 || reported.has(key)) return;\n reported.add(key);\n add(issues, \"DUPLICATE_BINDING_KEY\", `${path}/bindingKey/${key}`, `Binding key '${key}' is used by ${nodeIds.length} nodes here.`);\n });\n });\n}\n\n/**\n * Node-to-node references (Spine connector targets, pagination items) resolve in the same materialized\n * owner graph as runtime node views — one graph build for every kind of reference, so a new reference\n * kind cannot end up resolving in a subtly different scope than the existing ones.\n */\nfunction checkNodeReferences(document: ProjectDocument, owner: Owner, path: string, issues: ValidationIssue[]): void {\n const graph = resolveOwnerNodeGraph(document, owner);\n const nodes = new Map(graph.nodes.map((node) => [node.id, node]));\n for (const node of graph.nodes) {\n if (node.type === \"item-table\") {\n for (const [index, itemId] of (node.items ?? []).entries()) {\n const itemPath = `${path}/itemTableItems/${node.id}/${index}`;\n if (!nodes.has(itemId)) add(issues, \"MISSING_ITEM_TABLE_ITEM\", itemPath, `Item table item '${itemId}' does not exist in this owner.`);\n else if (itemId === node.id) add(issues, \"INVALID_ITEM_TABLE_ITEM\", itemPath, \"An item table cannot list itself as an item.\");\n }\n continue;\n }\n if (node.type === \"pagination\") {\n for (const field of [\"prevButtonNodeId\", \"nextButtonNodeId\"] as const) {\n const buttonId = node[field];\n if (buttonId === undefined) continue;\n const arrowPath = `${path}/paginationArrows/${node.id}/${field}`;\n const target = nodes.get(buttonId);\n if (target === undefined) add(issues, \"MISSING_PAGINATION_ARROW\", arrowPath, `Pagination arrow '${buttonId}' does not exist in this owner.`);\n else if (target.type !== \"button\" && target.type !== \"staged-button\") add(issues, \"INVALID_PAGINATION_ARROW\", arrowPath, \"A pagination arrow must reference a button or staged-button node.\");\n }\n continue;\n }\n if (node.type === \"page-group\") {\n for (const field of [\"pageUpButtonNodeId\", \"pageDownButtonNodeId\"] as const) {\n const buttonId = node[field];\n if (buttonId === undefined) continue;\n const arrowPath = `${path}/pageGroupArrows/${node.id}/${field}`;\n const target = nodes.get(buttonId);\n if (target === undefined) add(issues, \"MISSING_PAGE_GROUP_ARROW\", arrowPath, `Page group arrow '${buttonId}' does not exist in this owner.`);\n else if (target.type !== \"button\" && target.type !== \"staged-button\") add(issues, \"INVALID_PAGE_GROUP_ARROW\", arrowPath, \"A page group arrow must reference a button or staged-button node.\");\n }\n continue;\n }\n if (node.type !== \"spine\") continue;\n const claimedSlots = new Set<string>();\n const claimedTargets = new Set<string>();\n for (const [index, connector] of (node.connectors ?? []).entries()) {\n const connectorPath = `${path}/spineConnectors/${node.id}/${index}`;\n if (connector.partType === \"slot\") {\n if (claimedSlots.has(connector.partName)) add(issues, \"DUPLICATE_SPINE_CONNECTOR_SLOT\", `${connectorPath}/partName`, `Spine slot '${connector.partName}' can host only one connector target.`);\n else claimedSlots.add(connector.partName);\n }\n const target = nodes.get(connector.targetNodeId);\n if (target === undefined) {\n add(issues, \"MISSING_SPINE_CONNECTOR_TARGET\", `${connectorPath}/targetNodeId`, `Spine connector target '${connector.targetNodeId}' does not exist in this owner.`);\n continue;\n }\n if (target.id === node.id) {\n add(issues, \"INVALID_SPINE_CONNECTOR_TARGET\", `${connectorPath}/targetNodeId`, \"A Spine node cannot connect itself to one of its bones.\");\n continue;\n }\n let ancestorId = node.parentId;\n const visited = new Set<string>();\n while (ancestorId !== null && !visited.has(ancestorId)) {\n if (ancestorId === target.id) {\n add(issues, \"INVALID_SPINE_CONNECTOR_TARGET\", `${connectorPath}/targetNodeId`, \"A Spine connector target cannot be an ancestor of the Spine node.\");\n break;\n }\n visited.add(ancestorId);\n ancestorId = nodes.get(ancestorId)?.parentId ?? null;\n }\n if (claimedTargets.has(target.id)) add(issues, \"DUPLICATE_SPINE_CONNECTOR_TARGET\", `${connectorPath}/targetNodeId`, `Node '${target.id}' is already used by another connector on this Spine node.`);\n else claimedTargets.add(target.id);\n }\n }\n}\n\ntype Owner = { rootNodeIds: string[]; nodes: UINode[] };\ntype TransformData = Static<typeof Transform>;\n/** A point-anchor sizeDelta is the whole rect and must be positive; stretch sizeDelta may be negative. */\nfunction checkResolvedSizes(node: UINode, nodePath: string, issues: ValidationIssue[]): void {\n for (const profile of [\"desktop\", \"mobile\"] as const) {\n const merged: TransformData = { ...node.transform, ...node.layoutOverrides?.[profile]?.transform };\n const minX = merged.anchorMinX ?? 0;\n const minY = merged.anchorMinY ?? 0;\n const maxX = merged.anchorMaxX ?? minX;\n const maxY = merged.anchorMaxY ?? minY;\n if (maxX === minX && merged.width <= 0) add(issues, \"NON_POSITIVE_SIZE\", `${nodePath}/transform/width`, `Width must be positive on a non-stretched axis in the '${profile}' profile.`);\n if (maxY === minY && merged.height <= 0) add(issues, \"NON_POSITIVE_SIZE\", `${nodePath}/transform/height`, `Height must be positive on a non-stretched axis in the '${profile}' profile.`);\n }\n}\nfunction particleAssetIds(effect: ParticleEffectDefinition): string[] { const source = effect.particle.visual.source; return source.type === \"single\" ? [source.assetId] : source.assetIds; }\nexport function collectEffectAssetIds(effect: EffectDefinition): string[] { return isParticleEffect(effect) ? particleAssetIds(effect) : []; }\nfunction hierarchy(owner: Owner, path: string, assets: Map<string, Asset>, prefabs: Set<string>, effects: Map<string, EffectDefinition>, issues: ValidationIssue[]): void {\n const nodes = new Map<string, UINode>();\n owner.nodes.forEach((node, i) => { if (nodes.has(node.id)) add(issues, \"DUPLICATE_ID\", `${path}/nodes/${i}/id`, `Duplicate node ID '${node.id}'.`); nodes.set(node.id, node); });\n const childOwners = new Map<string, string>();\n owner.rootNodeIds.forEach((id, i) => { const node = nodes.get(id); if (!node) add(issues, \"MISSING_NODE_REFERENCE\", `${path}/rootNodeIds/${i}`, `Root node '${id}' does not exist.`); else if (node.parentId !== null) add(issues, \"HIERARCHY_PARENT_MISMATCH\", `${path}/rootNodeIds/${i}`, \"A root node must have parentId null.\"); });\n owner.nodes.forEach((node, i) => {\n const nodePath = `${path}/nodes/${i}`;\n if (node.parentId !== null && !nodes.has(node.parentId)) add(issues, \"MISSING_PARENT_REFERENCE\", `${nodePath}/parentId`, `Parent '${node.parentId}' does not exist.`);\n node.children.forEach((childId, childIndex) => { const child = nodes.get(childId), childPath = `${nodePath}/children/${childIndex}`; if (!child) add(issues, \"MISSING_CHILD_REFERENCE\", childPath, `Child '${childId}' does not exist.`); else { const prior = childOwners.get(childId); if (prior && prior !== node.id) add(issues, \"MULTIPLE_PARENTS\", childPath, `Node '${childId}' belongs to more than one parent.`); childOwners.set(childId, node.id); if (child.parentId !== node.id) add(issues, \"HIERARCHY_PARENT_MISMATCH\", childPath, `Child '${childId}' does not point back to parent '${node.id}'.`); } });\n if (node.parentId !== null) { const parent = nodes.get(node.parentId); if (parent && !parent.children.includes(node.id)) add(issues, \"HIERARCHY_CHILD_MISMATCH\", `${nodePath}/parentId`, `Parent '${node.parentId}' does not list node '${node.id}'.`); }\n if ((node.type === \"image\" || node.type === \"spine\") && node.assetId !== undefined) { const asset = assets.get(node.assetId); if (!asset) add(issues, \"MISSING_ASSET_REFERENCE\", `${nodePath}/assetId`, `Asset '${node.assetId}' does not exist.`); else if (asset.type !== node.type) add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", `${nodePath}/assetId`, `A ${node.type} node requires a ${node.type} asset.`); }\n if (isLayoutGroup(node) && node.backgroundAssetId !== undefined) { const asset = assets.get(node.backgroundAssetId); if (!asset) add(issues, \"MISSING_ASSET_REFERENCE\", `${nodePath}/backgroundAssetId`, `Background asset '${node.backgroundAssetId}' does not exist.`); else if (asset.type !== \"image\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", `${nodePath}/backgroundAssetId`, \"A layout group background requires an image asset.\"); }\n // Путь ошибки сохраняется до конкретного state field, чтобы Inspector мог подсветить нужный picker.\n if (node.type === \"button\") BUTTON_STATE_KEYS.forEach((state) => { const field = `${state}AssetId` as const; const assetId = node.states[field]; if (assetId === undefined) return; const asset = assets.get(assetId), path = `${nodePath}/states/${field}`; if (!asset) add(issues, \"MISSING_ASSET_REFERENCE\", path, `Asset '${assetId}' does not exist.`); else if (asset.type !== \"image\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", path, `A button '${state}' state requires an image asset.`); });\n if (node.type === \"button\") for (const field of [\"pressAssetId\", \"hoverAssetId\"] as const) { const assetId = node.sounds?.[field]; if (assetId === undefined) continue; const asset = assets.get(assetId), soundPath = `${nodePath}/sounds/${field}`; if (!asset) add(issues, \"MISSING_ASSET_REFERENCE\", soundPath, `Asset '${assetId}' does not exist.`); else if (asset.type !== \"sound\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", soundPath, `A button ${field} requires a sound asset.`); }\n if (node.type === \"staged-button\") {\n const stageIds = new Set<string>();\n node.stages.forEach((stage, stageIndex) => {\n if (stageIds.has(stage.id)) add(issues, \"DUPLICATE_STAGE_ID\", `${nodePath}/stages/${stageIndex}/id`, `Duplicate stage ID '${stage.id}'.`);\n stageIds.add(stage.id);\n BUTTON_STATE_KEYS.forEach((state) => { const field = `${state}AssetId` as const; const assetId = stage.states[field]; if (assetId === undefined) return; const asset = assets.get(assetId), statePath = `${nodePath}/stages/${stageIndex}/states/${field}`; if (!asset) add(issues, \"MISSING_ASSET_REFERENCE\", statePath, `Asset '${assetId}' does not exist.`); else if (asset.type !== \"image\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", statePath, `A staged button stage '${state}' state requires an image asset.`); });\n });\n if (!node.stages.some((stage) => stage.id === node.defaultStageId)) add(issues, \"MISSING_STAGE_REFERENCE\", `${nodePath}/defaultStageId`, `Default stage '${node.defaultStageId}' does not exist.`);\n for (const field of [\"pressAssetId\", \"hoverAssetId\"] as const) { const assetId = node.sounds?.[field]; if (assetId === undefined) continue; const asset = assets.get(assetId), soundPath = `${nodePath}/sounds/${field}`; if (!asset) add(issues, \"MISSING_ASSET_REFERENCE\", soundPath, `Asset '${assetId}' does not exist.`); else if (asset.type !== \"sound\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", soundPath, `A staged button ${field} requires a sound asset.`); }\n }\n if (node.type === \"checkbox\") CHECKBOX_STATE_KEYS.forEach((state) => { const field = `${state}AssetId` as const; const assetId = node.states[field]; if (assetId === undefined) return; const asset = assets.get(assetId), path = `${nodePath}/states/${field}`; if (!asset) add(issues, \"MISSING_ASSET_REFERENCE\", path, `Asset '${assetId}' does not exist.`); else if (asset.type !== \"image\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", path, `A checkbox '${state}' state requires an image asset.`); });\n if (node.type === \"checkbox\") for (const field of [\"checkAssetId\", \"uncheckAssetId\"] as const) { const assetId = node.sounds?.[field]; if (assetId === undefined) continue; const asset = assets.get(assetId), soundPath = `${nodePath}/sounds/${field}`; if (!asset) add(issues, \"MISSING_ASSET_REFERENCE\", soundPath, `Asset '${assetId}' does not exist.`); else if (asset.type !== \"sound\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", soundPath, `A checkbox ${field} requires a sound asset.`); }\n if (node.type === \"bitmap-text\") { const asset = assets.get(node.assetId); if (!asset) add(issues, \"MISSING_ASSET_REFERENCE\", `${nodePath}/assetId`, `Asset '${node.assetId}' does not exist.`); else if (asset.type !== \"bitmapFont\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", `${nodePath}/assetId`, \"A bitmap text node requires a bitmap font asset.\"); }\n if (node.type === \"text\") {\n const fontReferences = [\n [node.style?.fontAssetId, `${nodePath}/style/fontAssetId`],\n [node.textStyleOverrides?.desktop?.fontAssetId, `${nodePath}/textStyleOverrides/desktop/fontAssetId`],\n [node.textStyleOverrides?.mobile?.fontAssetId, `${nodePath}/textStyleOverrides/mobile/fontAssetId`],\n ] as const;\n for (const [fontAssetId, fontPath] of fontReferences) {\n if (fontAssetId === undefined) continue;\n const asset = assets.get(fontAssetId);\n if (!asset) add(issues, \"MISSING_ASSET_REFERENCE\", fontPath, `Asset '${fontAssetId}' does not exist.`);\n else if (asset.type !== \"font\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", fontPath, \"A text node fontAssetId requires a font asset.\");\n }\n }\n if (node.type === \"input\" && node.backgroundAssetId !== undefined) { const asset = assets.get(node.backgroundAssetId); if (!asset) add(issues, \"MISSING_ASSET_REFERENCE\", `${nodePath}/backgroundAssetId`, `Background asset '${node.backgroundAssetId}' does not exist.`); else if (asset.type !== \"image\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", `${nodePath}/backgroundAssetId`, \"An input background requires an image asset.\"); }\n if (node.type === \"input\" && node.textStyle.fontAssetId !== undefined) { const asset = assets.get(node.textStyle.fontAssetId), path = `${nodePath}/textStyle/fontAssetId`; if (!asset) add(issues, \"MISSING_ASSET_REFERENCE\", path, `Asset '${node.textStyle.fontAssetId}' does not exist.`); else if (asset.type !== \"font\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", path, \"An input node textStyle fontAssetId requires a font asset.\"); }\n if (node.type === \"slider\" || node.type === \"progress-bar\") {\n const imageReferences: [string, string][] = [[\"backgroundAssetId\", node.backgroundAssetId], [\"fillAssetId\", node.fillAssetId]];\n if (node.type === \"slider\") imageReferences.push([\"handleAssetId\", node.handleAssetId]);\n for (const [field, assetId] of imageReferences) {\n const asset = assets.get(assetId);\n const assetPath = `${nodePath}/${field}`;\n if (!asset) add(issues, \"MISSING_ASSET_REFERENCE\", assetPath, `Asset '${assetId}' does not exist.`);\n else if (asset.type !== \"image\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", assetPath, `A ${node.type} ${field} requires an image asset.`);\n }\n }\n if (node.type === \"slider\") {\n if (!(node.min < node.max) || !(node.step > 0)) add(issues, \"INVALID_VALUE_RANGE\", nodePath, \"A slider requires min < max and step > 0.\");\n if (node.defaultValue < node.min || node.defaultValue > node.max) add(issues, \"VALUE_OUT_OF_RANGE\", `${nodePath}/defaultValue`, \"Slider defaultValue must be inside the inclusive min/max range.\");\n if (node.valueTextStyle?.fontAssetId !== undefined) { const asset = assets.get(node.valueTextStyle.fontAssetId), fontPath = `${nodePath}/valueTextStyle/fontAssetId`; if (!asset) add(issues, \"MISSING_ASSET_REFERENCE\", fontPath, `Asset '${node.valueTextStyle.fontAssetId}' does not exist.`); else if (asset.type !== \"font\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", fontPath, \"A slider valueTextStyle fontAssetId requires a font asset.\"); }\n }\n if (node.type === \"progress-bar\" && (node.defaultProgress < 0 || node.defaultProgress > 100)) add(issues, \"VALUE_OUT_OF_RANGE\", `${nodePath}/defaultProgress`, \"Progress bar defaultProgress must be inside the inclusive 0..100 range.\");\n if (node.type === \"pagination\") {\n if (node.style === \"dots\") {\n for (const field of [\"activeAssetId\", \"inactiveAssetId\"] as const) {\n const assetId = node[field];\n const assetPath = `${nodePath}/${field}`;\n if (assetId === undefined) { add(issues, \"MISSING_PAGINATION_DOT_ASSET\", assetPath, `Pagination in 'dots' style requires ${field}.`); continue; }\n const asset = assets.get(assetId);\n if (!asset) add(issues, \"MISSING_ASSET_REFERENCE\", assetPath, `Asset '${assetId}' does not exist.`);\n else if (asset.type !== \"image\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", assetPath, `A pagination ${field} requires an image asset.`);\n }\n } else {\n if (node.numberStyle?.fontAssetId !== undefined) {\n const asset = assets.get(node.numberStyle.fontAssetId);\n const fontPath = `${nodePath}/numberStyle/fontAssetId`;\n if (!asset) add(issues, \"MISSING_ASSET_REFERENCE\", fontPath, `Asset '${node.numberStyle.fontAssetId}' does not exist.`);\n else if (asset.type !== \"font\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", fontPath, \"A pagination numberStyle fontAssetId requires a font asset.\");\n }\n if (node.numberActiveBackgroundAssetId !== undefined) {\n const asset = assets.get(node.numberActiveBackgroundAssetId);\n const bgPath = `${nodePath}/numberActiveBackgroundAssetId`;\n if (!asset) add(issues, \"MISSING_ASSET_REFERENCE\", bgPath, `Asset '${node.numberActiveBackgroundAssetId}' does not exist.`);\n else if (asset.type !== \"image\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", bgPath, \"A pagination numberActiveBackgroundAssetId requires an image asset.\");\n }\n }\n if (node.defaultPage > node.pageCount - 1) add(issues, \"VALUE_OUT_OF_RANGE\", `${nodePath}/defaultPage`, \"Pagination defaultPage must be inside the inclusive 0..pageCount-1 range.\");\n // Odd only: the active page is always the middle slot, which an even slot count has no room for.\n if (node.visiblePageCount !== undefined && node.visiblePageCount % 2 === 0) add(issues, \"VALUE_OUT_OF_RANGE\", `${nodePath}/visiblePageCount`, \"Pagination visiblePageCount must be an odd number so the active page stays centered.\");\n }\n if (node.type === \"page-group\" && node.children.length > 0 && node.defaultPage > node.children.length - 1) add(issues, \"VALUE_OUT_OF_RANGE\", `${nodePath}/defaultPage`, \"Page group defaultPage must be inside the inclusive 0..children.length-1 range.\");\n if (node.type === \"prefab-instance\" && !prefabs.has(node.prefabId)) add(issues, \"MISSING_PREFAB_REFERENCE\", `${nodePath}/prefabId`, `Prefab '${node.prefabId}' does not exist.`);\n if (node.type === \"particle-emitter\") { const effect = effects.get(node.effectId); if (!effect) add(issues, \"MISSING_EFFECT_REFERENCE\", `${nodePath}/effectId`, `Effect '${node.effectId}' does not exist.`); else if (effect.type !== \"particles\") add(issues, \"INCOMPATIBLE_EFFECT_REFERENCE\", `${nodePath}/effectId`, \"Particle emitter requires a particle effect.\"); }\n if (node.type === \"grid-layout\" && node.layoutGroup.base.constraint !== \"flexible\" && node.layoutGroup.base.constraintCount === undefined) add(issues, \"MISSING_GRID_CONSTRAINT_COUNT\", `${nodePath}/layoutGroup/base/constraintCount`, \"A fixed grid constraint requires constraintCount.\");\n for (const profile of [\"desktop\", \"mobile\"] as const) {\n const grid = node.type === \"grid-layout\" ? { ...node.layoutGroup.base, ...node.layoutGroup.overrides?.[profile] } : undefined;\n if (grid !== undefined && grid.constraint !== \"flexible\" && grid.constraintCount === undefined) add(issues, \"MISSING_GRID_CONSTRAINT_COUNT\", `${nodePath}/layoutGroup/overrides/${profile}/constraintCount`, \"A fixed grid constraint requires constraintCount.\");\n }\n checkResolvedSizes(node, nodePath, issues);\n });\n const visiting = new Set<string>(), visited = new Set<string>(); const visit = (id: string): void => { if (visiting.has(id)) { add(issues, \"HIERARCHY_CYCLE\", path, `Hierarchy contains a cycle through '${id}'.`); return; } if (visited.has(id)) return; const node = nodes.get(id); if (!node) return; visiting.add(id); node.children.forEach(visit); visiting.delete(id); visited.add(id); }; nodes.forEach((_, id) => visit(id));\n}\nfunction semantic(document: ProjectDocument): ValidationIssue[] {\n const issues: ValidationIssue[] = [], ids = new Set<string>(), register = (id: string, path: string) => { if (ids.has(id)) add(issues, \"DUPLICATE_ID\", path, `Duplicate entity ID '${id}'.`); ids.add(id); };\n register(document.project.id, \"/project/id\"); const assets = new Map<string, Asset>(), prefabs = new Set<string>(), effects = new Map<string, EffectDefinition>();\n const fontMediaTypes = new Set([\"font/woff2\", \"font/woff\", \"font/ttf\", \"font/otf\", \"application/font-woff\", \"application/x-font-ttf\", \"application/x-font-opentype\"]);\n document.assets.forEach((asset, i) => { register(asset.id, `/assets/${i}/id`); assets.set(asset.id, asset); if (asset.type === \"font\" && !fontMediaTypes.has(asset.source.mediaType)) add(issues, \"INVALID_FONT_MEDIA_TYPE\", `/assets/${i}/source/mediaType`, `Unsupported font media type '${asset.source.mediaType}'.`); });\n // Каждый atlas-фрейм и bitmap-font glyph-фрейм ведёт себя как обычный image-ассет во всех местах, где\n // нода ссылается на assetId: виртуальная запись позволяет существующим\n // MISSING_ASSET_REFERENCE/INCOMPATIBLE_ASSET_REFERENCE проверкам работать без изменений в каждой ветке hierarchy().\n document.assets.forEach((asset) => {\n const frames = asset.type === \"atlas\" ? asset.frames : asset.type === \"bitmapFont\" ? asset.frames ?? {} : undefined;\n if (frames === undefined) return;\n for (const frameId of Object.values(frames)) { if (!assets.has(frameId)) assets.set(frameId, { id: frameId, name: frameId, type: \"image\", source: { uri: \"\", mediaType: \"image/png\" } }); }\n });\n document.effects.forEach((effect, i) => { register(effect.id, `/effects/${i}/id`); effects.set(effect.id, effect); if (!isParticleEffect(effect)) return; const p = `/effects/${i}`, e = effect.emission, v = effect.particle.visual; const ranges: [string, { min: number; max: number }][] = [[\"particle/lifetime\", effect.particle.lifetime], [\"particle/movement/speed\", effect.particle.movement.speed], [\"particle/visual/scale/start\", v.scale.start], [\"particle/visual/scale/end\", v.scale.end], [\"particle/visual/rotation/initialDegrees\", v.rotation.initialDegrees], [\"particle/visual/rotation/angularVelocityDegrees\", v.rotation.angularVelocityDegrees]]; ranges.forEach(([field, range]) => { if (range.min > range.max) add(issues, \"INVALID_PARTICLE_RANGE\", `${p}/${field}`, \"Particle range min must not exceed max.\"); }); if (e.rate === 0 && e.bursts.length === 0) add(issues, \"EMPTY_PARTICLE_EMISSION\", `${p}/emission`, \"Particle emission needs a rate or a burst.\"); e.bursts.forEach((burst, j) => { if (burst.time > e.duration) add(issues, \"PARTICLE_BURST_OUTSIDE_DURATION\", `${p}/emission/bursts/${j}/time`, \"Particle burst time must be inside emission duration.\"); }); const source = v.source; particleAssetIds(effect).forEach((id, j) => { const asset = assets.get(id), sourcePath = source.type === \"single\" ? `${p}/particle/visual/source/assetId` : `${p}/particle/visual/source/assetIds/${j}`; if (!asset) add(issues, \"MISSING_ASSET_REFERENCE\", sourcePath, `Asset '${id}' does not exist.`); else if (asset.type !== \"image\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", sourcePath, \"Particle visual source requires an image asset or atlas frame.\"); }); });\n document.prefabs.forEach((prefab, i) => { register(prefab.id, `/prefabs/${i}/id`); prefabs.add(prefab.id); }); document.scenes.forEach((scene, i) => register(scene.id, `/scenes/${i}/id`));\n const prefabById = new Map(document.prefabs.map((prefab) => [prefab.id, prefab]));\n const validateInstance = (instance: Extract<UINode, { type: \"prefab-instance\" }>, path: string, checkHierarchy = true): void => {\n const prefab = prefabById.get(instance.prefabId);\n if (prefab === undefined) return;\n // База адресуется путём: у вложенных пресетов переопределяемый узел живёт не в `prefab.nodes`,\n // а глубже, поэтому цель override резолвится через тот же материализатор.\n const definitionNodes = resolvePrefabInstanceBaseNodes(document, instance);\n const overridden = new Set<string>();\n for (const [index, override] of (instance.propertyOverrides ?? []).entries()) {\n const overridePath = `${path}/propertyOverrides/${index}`;\n if (overridden.has(override.nodeId)) add(issues, \"DUPLICATE_PREFAB_NODE_OVERRIDE\", `${overridePath}/nodeId`, `Prefab node '${override.nodeId}' has more than one property override.`);\n overridden.add(override.nodeId);\n const definitionNode = definitionNodes.get(override.nodeId);\n if (definitionNode === undefined) {\n add(issues, \"MISSING_PREFAB_OVERRIDE_TARGET\", `${overridePath}/nodeId`, `Prefab node '${override.nodeId}' does not exist in definition '${prefab.id}'.`);\n continue;\n }\n for (const key of [\"id\", \"type\", \"parentId\", \"children\", \"editorOnly\", \"locked\", \"prefabId\", \"propertyOverrides\", \"locallyAddedNodes\"]) {\n if (Object.hasOwn(override.patch, key)) add(issues, \"STRUCTURAL_PREFAB_OVERRIDE\", `${overridePath}/patch/${key}`, `Prefab instances cannot override structural field '${key}'.`);\n }\n // База развёрнута, поэтому несёт instance-scoped id и связи. Патч их менять не может, а\n // структурная схема требует обычных uuid, поэтому идентичность подменяется на нейтральную.\n const effective = applyPrefabNodePatch({ ...definitionNode, id: instance.id, parentId: null, children: [] } as UINode, override.patch);\n if (!structuralNode(effective)) add(issues, \"INVALID_PREFAB_NODE_OVERRIDE\", `${overridePath}/patch`, \"The property override produces an invalid UI node.\");\n }\n // Локально добавленный инстанс сам владеет своей конфигурацией, поэтому проверяется рекурсивно.\n // Иерархию при этом сверяет только внешний инстанс: его материализация уже включает вложенные.\n for (const [index, localNode] of (instance.locallyAddedNodes ?? []).entries()) {\n const localPath = `${path}/locallyAddedNodes/${index}`;\n register(localNode.id, `${localPath}/id`);\n if (localNode.type === \"prefab-instance\") validateInstance(localNode, localPath, false);\n }\n if (!checkHierarchy) return;\n const materialized = materializePrefabInstance(document, instance);\n if (materialized !== undefined) hierarchy(materialized, `${path}/materialized`, assets, prefabs, effects, issues);\n };\n document.prefabs.forEach((prefab, i) => { prefab.nodes.forEach((node, j) => register(node.id, `/prefabs/${i}/nodes/${j}/id`)); hierarchy(prefab, `/prefabs/${i}`, assets, prefabs, effects, issues); });\n document.prefabs.forEach((prefab, i) => { prefab.nodes.forEach((node, j) => { if (node.type === \"prefab-instance\") validateInstance(node, `/prefabs/${i}/nodes/${j}`); }); checkBindingKeys(document, prefab, `/prefabs/${i}`, issues); checkNodeReferences(document, prefab, `/prefabs/${i}`, issues); });\n document.scenes.forEach((scene, i) => { scene.nodes.forEach((node, j) => register(node.id, `/scenes/${i}/nodes/${j}/id`)); hierarchy(scene, `/scenes/${i}`, assets, prefabs, effects, issues); scene.nodes.forEach((node, j) => { if (node.type === \"prefab-instance\") validateInstance(node, `/scenes/${i}/nodes/${j}`); }); const musicAssetId = scene.audio?.backgroundMusicAssetId; if (musicAssetId !== undefined) { const asset = assets.get(musicAssetId), musicPath = `/scenes/${i}/audio/backgroundMusicAssetId`; if (!asset) add(issues, \"MISSING_ASSET_REFERENCE\", musicPath, `Asset '${musicAssetId}' does not exist.`); else if (asset.type !== \"sound\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", musicPath, \"Background music requires a sound asset.\"); } checkBindingKeys(document, scene, `/scenes/${i}`, issues); checkNodeReferences(document, scene, `/scenes/${i}`, issues); });\n // Каталог локализации проверяет единственный модуль: структурные ошибки делают документ невалидным,\n // authoring diagnostics приходят warnings и не мешают заполнять переводы постепенно.\n issues.push(...collectLocalizationIssues(document));\n return issues;\n}\nfunction collectNonFiniteNumbers(input: unknown, path: string, issues: ValidationIssue[]): void {\n if (typeof input === \"number\") {\n if (!Number.isFinite(input)) add(issues, \"NON_FINITE_NUMBER\", path, \"Numbers must be finite.\");\n return;\n }\n if (Array.isArray(input)) input.forEach((value, index) => collectNonFiniteNumbers(value, `${path}/${index}`, issues));\n else if (typeof input === \"object\" && input !== null) Object.entries(input).forEach(([key, value]) => collectNonFiniteNumbers(value, `${path}/${key}`, issues));\n}\nexport function validateProjectDocument(input: unknown): ValidationResult { if (!structural(input)) return { valid: false, issues: (structural.errors ?? []).map((error: ErrorObject) => ({ code: \"STRUCTURAL_SCHEMA\", path: error.instancePath || \"/\", message: error.message ?? \"Invalid document structure.\", severity: \"error\" })) }; const issues: ValidationIssue[] = []; collectNonFiniteNumbers(input, \"\", issues); issues.push(...semantic(input as ProjectDocument)); return { valid: !issues.some((issue) => issue.severity === \"error\"), issues }; }\nexport function assertProjectDocument(input: unknown): asserts input is ProjectDocument { const result = validateProjectDocument(input); if (!result.valid) throw new TypeError(`Invalid ProjectDocument: ${result.issues.filter((x) => x.severity === \"error\").map((x) => `${x.code} at ${x.path}`).join(\", \")}`); }\n/** v1 хранил точечный якорь anchorX/anchorY; v2 заменяет его парой anchorMin/anchorMax с тем же значением. */\nfunction migrateTransformV1(transform: Record<string, unknown>): void {\n for (const axis of [\"X\", \"Y\"] as const) {\n const value = transform[`anchor${axis}`];\n delete transform[`anchor${axis}`];\n if (typeof value !== \"number\") continue;\n transform[`anchorMin${axis}`] = value;\n transform[`anchorMax${axis}`] = value;\n }\n}\nfunction migrateV1ToV2(document: Record<string, unknown>): void {\n const owners = [...(document.scenes as { nodes: unknown[] }[] ?? []), ...(document.prefabs as { nodes: unknown[] }[] ?? [])];\n for (const owner of owners) {\n for (const node of owner.nodes as Record<string, unknown>[]) {\n if (typeof node.transform === \"object\" && node.transform !== null) migrateTransformV1(node.transform as Record<string, unknown>);\n const overrides = node.layoutOverrides as Record<string, { transform?: Record<string, unknown> }> | undefined;\n for (const profile of [\"desktop\", \"mobile\"]) {\n const transform = overrides?.[profile]?.transform;\n if (typeof transform === \"object\" && transform !== null) migrateTransformV1(transform);\n }\n }\n }\n}\n\ntype MigratingTransform = Record<string, unknown> & { x: number; y: number; width: number; height: number };\ntype MigratingNode = {\n id: string;\n parentId: string | null;\n children: string[];\n transform: MigratingTransform;\n layoutOverrides?: Record<string, { transform?: Record<string, unknown> }>;\n};\ntype MigratingSize = { width: number; height: number };\n\nfunction migrateOwnerToPreferredRects(\n owner: { rootNodeIds: string[]; nodes: MigratingNode[] },\n viewports?: { referenceViewports: Record<\"desktop\" | \"mobile\", MigratingSize>; preferredViewports: Record<\"desktop\" | \"mobile\", MigratingSize> },\n source: \"legacy\" | \"v9\" = \"legacy\",\n): void {\n const originalNodes = structuredClone(owner.nodes);\n const nodesById = new Map(originalNodes.map((node) => [node.id, node]));\n const convertedByProfile = new Map<\"desktop\" | \"mobile\", Map<string, { transform: MigratingTransform; currentSize: MigratingSize; preferredSize: MigratingSize }>>();\n\n for (const profile of [\"desktop\", \"mobile\"] as const) {\n const converted = new Map<string, { transform: MigratingTransform; currentSize: MigratingSize; preferredSize: MigratingSize }>();\n const visiting = new Set<string>();\n const visit = (nodeId: string): { transform: MigratingTransform; currentSize: MigratingSize; preferredSize: MigratingSize } | undefined => {\n const cached = converted.get(nodeId);\n if (cached !== undefined) return cached;\n if (visiting.has(nodeId)) return undefined;\n const node = nodesById.get(nodeId);\n if (node === undefined) return undefined;\n visiting.add(nodeId);\n const parent = node.parentId === null ? undefined : nodesById.get(node.parentId);\n const convertedParent = parent === undefined ? undefined : visit(parent.id);\n visiting.delete(nodeId);\n\n const referenceRoot = viewports?.referenceViewports[profile];\n const preferredRoot = viewports?.preferredViewports[profile];\n const usesSceneBoundary = viewports !== undefined && parent?.parentId === null;\n const currentParent = node.parentId === null || usesSceneBoundary ? referenceRoot : convertedParent?.currentSize;\n const preferredParent = node.parentId === null || usesSceneBoundary ? preferredRoot : convertedParent?.preferredSize;\n const override = node.layoutOverrides?.[profile]?.transform;\n const merged = { ...node.transform, ...override } as MigratingTransform;\n const minX = typeof merged.anchorMinX === \"number\" ? merged.anchorMinX : 0;\n const maxX = typeof merged.anchorMaxX === \"number\" ? merged.anchorMaxX : minX;\n const minY = typeof merged.anchorMinY === \"number\" ? merged.anchorMinY : 0;\n const maxY = typeof merged.anchorMaxY === \"number\" ? merged.anchorMaxY : minY;\n const stretchX = maxX > minX;\n const stretchY = maxY > minY;\n const legacyResponsive = typeof merged.responsiveSize === \"object\" && merged.responsiveSize !== null\n ? merged.responsiveSize as { referenceParentWidth?: unknown; referenceParentHeight?: unknown }\n : undefined;\n const fallbackWidth = typeof legacyResponsive?.referenceParentWidth === \"number\" ? legacyResponsive.referenceParentWidth : 1;\n const fallbackHeight = typeof legacyResponsive?.referenceParentHeight === \"number\" ? legacyResponsive.referenceParentHeight : 1;\n const current = currentParent ?? { width: fallbackWidth, height: fallbackHeight };\n const preferred = preferredParent ?? current;\n const oldScaleX = source === \"v9\"\n ? stretchX ? current.width / preferred.width : 1\n : stretchX && typeof legacyResponsive?.referenceParentWidth === \"number\"\n ? current.width / legacyResponsive.referenceParentWidth\n : 1;\n const oldScaleY = source === \"v9\"\n ? stretchY ? current.height / preferred.height : 1\n : stretchY && typeof legacyResponsive?.referenceParentHeight === \"number\"\n ? current.height / legacyResponsive.referenceParentHeight\n : 1;\n const renderedOffsetX = stretchX ? merged.x * oldScaleX : merged.x;\n const renderedOffsetY = stretchY ? merged.y * oldScaleY : merged.y;\n const renderedWidth = stretchX\n ? source === \"v9\" || legacyResponsive !== undefined\n ? merged.width * oldScaleX\n : merged.width + (maxX - minX) * current.width\n : merged.width;\n const renderedHeight = stretchY\n ? source === \"v9\" || legacyResponsive !== undefined\n ? merged.height * oldScaleY\n : merged.height + (maxY - minY) * current.height\n : merged.height;\n const currentWidth = current.width > 0 ? current.width : preferred.width;\n const currentHeight = current.height > 0 ? current.height : preferred.height;\n const next = { ...merged };\n delete next.responsiveSize;\n next.x = renderedOffsetX * preferred.width / currentWidth;\n next.y = renderedOffsetY * preferred.height / currentHeight;\n next.width = renderedWidth * preferred.width / currentWidth;\n next.height = renderedHeight * preferred.height / currentHeight;\n const result = {\n transform: next,\n currentSize: {\n width: next.width * currentWidth / preferred.width,\n height: next.height * currentHeight / preferred.height,\n },\n preferredSize: { width: next.width, height: next.height },\n };\n converted.set(nodeId, result);\n return result;\n };\n owner.rootNodeIds.forEach(visit);\n originalNodes.forEach((node) => visit(node.id));\n convertedByProfile.set(profile, converted);\n }\n\n for (const node of owner.nodes) {\n const desktop = convertedByProfile.get(\"desktop\")?.get(node.id)?.transform;\n const mobile = convertedByProfile.get(\"mobile\")?.get(node.id)?.transform;\n if (desktop !== undefined) node.transform = desktop;\n if (mobile !== undefined) {\n const mobilePatch = Object.fromEntries(\n Object.entries(mobile).filter(([key, value]) => !Object.is(value, desktop?.[key])),\n );\n const existingMobile = node.layoutOverrides?.mobile;\n if (Object.keys(mobilePatch).length > 0 || existingMobile !== undefined) {\n node.layoutOverrides ??= {};\n node.layoutOverrides.mobile ??= {};\n if (Object.keys(mobilePatch).length > 0) node.layoutOverrides.mobile.transform = mobilePatch;\n else delete node.layoutOverrides.mobile.transform;\n if (Object.keys(node.layoutOverrides.mobile).length === 0) delete node.layoutOverrides.mobile;\n if (Object.keys(node.layoutOverrides).length === 0) delete node.layoutOverrides;\n }\n }\n const desktopOverride = node.layoutOverrides?.desktop?.transform;\n if (desktopOverride !== undefined) delete desktopOverride.responsiveSize;\n }\n}\n\nfunction migrateToV10(document: Record<string, unknown>, source: \"legacy\" | \"v9\"): void {\n for (const scene of document.scenes as Array<{ rootNodeIds: string[]; nodes: MigratingNode[]; layout: { referenceViewports: Record<\"desktop\" | \"mobile\", MigratingSize>; preferredViewports: Record<\"desktop\" | \"mobile\", MigratingSize> } }> ?? []) {\n migrateOwnerToPreferredRects(scene, scene.layout, source);\n }\n for (const prefab of document.prefabs as Array<{ rootNodeIds: string[]; nodes: MigratingNode[] }> ?? []) {\n migrateOwnerToPreferredRects(prefab, undefined, source);\n }\n}\n\n/** Converts v10 absolute preferred-space rects to anchoredPosition/sizeDelta without a visual jump. */\nfunction migrateOwnerV10ToV11(\n owner: { rootNodeIds: string[]; nodes: MigratingNode[] },\n preferredViewports?: Record<\"desktop\" | \"mobile\", MigratingSize>,\n): void {\n const originalNodes = structuredClone(owner.nodes);\n const nodesById = new Map(originalNodes.map((node) => [node.id, node]));\n const convertedByProfile = new Map<\"desktop\" | \"mobile\", Map<string, MigratingTransform>>();\n\n for (const profile of [\"desktop\", \"mobile\"] as const) {\n const converted = new Map<string, MigratingTransform>();\n const visit = (nodeId: string): MigratingTransform | undefined => {\n const cached = converted.get(nodeId);\n if (cached !== undefined) return cached;\n const node = nodesById.get(nodeId);\n if (node === undefined) return undefined;\n const parent = node.parentId === null ? undefined : nodesById.get(node.parentId);\n const convertedParent = parent === undefined ? undefined : visit(parent.id);\n const merged = { ...node.transform, ...node.layoutOverrides?.[profile]?.transform } as MigratingTransform;\n const sceneBoundary = preferredViewports?.[profile];\n const parentSize = sceneBoundary !== undefined && (node.parentId === null || parent?.parentId === null)\n ? sceneBoundary\n : convertedParent === undefined\n ? { width: merged.width, height: merged.height }\n : {\n width: typeof convertedParent.__resolvedWidth === \"number\" ? convertedParent.__resolvedWidth : convertedParent.width,\n height: typeof convertedParent.__resolvedHeight === \"number\" ? convertedParent.__resolvedHeight : convertedParent.height,\n };\n const minX = typeof merged.anchorMinX === \"number\" ? merged.anchorMinX : 0;\n const minY = typeof merged.anchorMinY === \"number\" ? merged.anchorMinY : 0;\n const maxX = typeof merged.anchorMaxX === \"number\" ? merged.anchorMaxX : minX;\n const maxY = typeof merged.anchorMaxY === \"number\" ? merged.anchorMaxY : minY;\n const pivotX = typeof merged.pivotX === \"number\" ? merged.pivotX : 0;\n const pivotY = typeof merged.pivotY === \"number\" ? merged.pivotY : 0;\n const resolvedWidth = merged.width;\n const resolvedHeight = merged.height;\n const next = {\n ...merged,\n x: merged.x - (maxX - minX) * pivotX * parentSize.width,\n y: merged.y - (maxY - minY) * pivotY * parentSize.height,\n width: resolvedWidth - (maxX - minX) * parentSize.width,\n height: resolvedHeight - (maxY - minY) * parentSize.height,\n __resolvedWidth: resolvedWidth,\n __resolvedHeight: resolvedHeight,\n };\n converted.set(nodeId, next);\n return next;\n };\n owner.rootNodeIds.forEach(visit);\n originalNodes.forEach((node) => visit(node.id));\n convertedByProfile.set(profile, converted);\n }\n\n for (const node of owner.nodes) {\n const stripInternal = (transform: MigratingTransform | undefined): MigratingTransform | undefined => {\n if (transform === undefined) return undefined;\n const next = { ...transform };\n delete next.__resolvedWidth;\n delete next.__resolvedHeight;\n return next;\n };\n const desktop = stripInternal(convertedByProfile.get(\"desktop\")?.get(node.id));\n const mobile = stripInternal(convertedByProfile.get(\"mobile\")?.get(node.id));\n if (desktop === undefined || mobile === undefined) continue;\n node.transform = desktop;\n const desktopOverride = node.layoutOverrides?.desktop;\n if (desktopOverride !== undefined) {\n delete desktopOverride.transform;\n if (Object.keys(desktopOverride).length === 0 && node.layoutOverrides !== undefined) delete node.layoutOverrides.desktop;\n }\n const mobilePatch = Object.fromEntries(Object.entries(mobile).filter(([key, value]) => !Object.is(value, desktop[key])));\n if (Object.keys(mobilePatch).length > 0) {\n node.layoutOverrides ??= {};\n node.layoutOverrides.mobile ??= {};\n node.layoutOverrides.mobile.transform = mobilePatch;\n } else if (node.layoutOverrides?.mobile !== undefined) {\n delete node.layoutOverrides.mobile.transform;\n if (Object.keys(node.layoutOverrides.mobile).length === 0) delete node.layoutOverrides.mobile;\n }\n if (node.layoutOverrides !== undefined && Object.keys(node.layoutOverrides).length === 0) delete node.layoutOverrides;\n }\n}\n\nfunction migrateV10ToV11(document: Record<string, unknown>): void {\n for (const scene of document.scenes as Array<{ rootNodeIds: string[]; nodes: MigratingNode[]; layout: { preferredViewports: Record<\"desktop\" | \"mobile\", MigratingSize> } }> ?? []) {\n migrateOwnerV10ToV11(scene, scene.layout.preferredViewports);\n }\n for (const prefab of document.prefabs as Array<{ rootNodeIds: string[]; nodes: MigratingNode[] }> ?? []) {\n migrateOwnerV10ToV11(prefab);\n }\n}\n\n/** v15 makes Spine's initial playback explicit; previous runtime behavior always started it. */\nfunction migrateV14ToV15(document: Record<string, unknown>): void {\n const visit = (node: Record<string, unknown>): void => {\n if (node.type === \"spine\" && typeof node.autoplay !== \"boolean\") node.autoplay = true;\n const localNodes = node.locallyAddedNodes;\n if (Array.isArray(localNodes)) for (const localNode of localNodes) if (typeof localNode === \"object\" && localNode !== null) visit(localNode as Record<string, unknown>);\n };\n const owners = [...(document.scenes as { nodes?: unknown[] }[] ?? []), ...(document.prefabs as { nodes?: unknown[] }[] ?? [])];\n for (const owner of owners) for (const node of owner.nodes ?? []) if (typeof node === \"object\" && node !== null) visit(node as Record<string, unknown>);\n}\n\n/**\n * v19 adds optional, sparse presentation overrides. v18 values already are the canonical base values,\n * including nodes nested in prefab instances, so conversion deliberately preserves the complete node\n * graph byte-for-byte and only the caller advances schemaVersion after this explicit migration step.\n */\nfunction migrateV18ToV19(_document: Record<string, unknown>): void {}\n\n/**\n * v20 добавляет каталог локализации. Старому документу достаётся базовая локаль `en` и пустой\n * `entries`; `textKey` существующим `Text` не добавляется, поэтому визуально документ не меняется:\n * нода без ключа локализацию не запрашивает вовсе.\n */\nfunction migrateV19ToV20(document: Record<string, unknown>): void {\n if (typeof document.localization !== \"object\" || document.localization === null) document.localization = createDefaultLocalization();\n}\n\n/** v21 adds the optional `mask` node variant; every v20 document is already valid without it. */\nfunction migrateV20ToV21(_document: Record<string, unknown>): void {}\n\n/**\n * v22 переименовывает `UINode.binding` в `bindingKey`. Смысл поля не меняется — это тот же публичный\n * ключ ноды для игрового кода, — но имя `binding` путалось с keyboard bindings редактора.\n *\n * Значение переносится как есть, включая override-патчи внутри prefab-инстансов и локально\n * добавленные узлы: патч — RFC-7396-like merge patch, поэтому в нём переименовывается сам ключ\n * свойства вместе с его значением, в том числе `null` (снятие ключа). Конфликты, возникшие в старых\n * документах, не исправляются молча — после миграции они становятся обычными validation errors.\n */\nfunction migrateV21ToV22(document: Record<string, unknown>): void {\n const rename = (record: Record<string, unknown>): void => {\n if (!Object.hasOwn(record, \"binding\")) return;\n record.bindingKey = record.binding;\n delete record.binding;\n };\n const visit = (node: Record<string, unknown>): void => {\n rename(node);\n const overrides = node.propertyOverrides;\n if (Array.isArray(overrides)) for (const override of overrides) {\n const patch = (override as { patch?: unknown }).patch;\n if (typeof patch === \"object\" && patch !== null) rename(patch as Record<string, unknown>);\n }\n const localNodes = node.locallyAddedNodes;\n if (Array.isArray(localNodes)) for (const localNode of localNodes) if (typeof localNode === \"object\" && localNode !== null) visit(localNode as Record<string, unknown>);\n };\n const owners = [...(document.scenes as { nodes?: unknown[] }[] ?? []), ...(document.prefabs as { nodes?: unknown[] }[] ?? [])];\n for (const owner of owners) for (const node of owner.nodes ?? []) if (typeof node === \"object\" && node !== null) visit(node as Record<string, unknown>);\n}\n\n/**\n * v23 добавляет промежуточные веса шрифта (300/500/600/800) к прежним `normal`/`bold`. Прежние\n * значения остаются в новом union без изменений, поэтому переписывать документ не нужно.\n */\nfunction migrateV22ToV23(_document: Record<string, unknown>): void {}\n\n/** v24 adds the `bitmapFont` asset type and the `bitmap-text` node variant; every v23 document is already valid without them. */\nfunction migrateV23ToV24(_document: Record<string, unknown>): void {}\n\n/** v25 adds optional `bitmap-text` auto-size (`autoSize`/`minFontSize`); every v24 document is already valid without them. */\nfunction migrateV24ToV25(_document: Record<string, unknown>): void {}\n\n/** v26 adds optional `bitmapFont.frames` (reusable glyph crops); every v25 document is already valid without them. */\nfunction migrateV25ToV26(_document: Record<string, unknown>): void {}\n\n/** v27 adds optional `text` auto-size (`autoSize`/`minFontSize`), mirroring bitmap-text (ADR 0027); every v26 document is already valid without them. */\nfunction migrateV26ToV27(_document: Record<string, unknown>): void {}\n\n/** v28 adds the optional `staged-button` node variant; every v27 document is already valid without it. */\nfunction migrateV27ToV28(_document: Record<string, unknown>): void {}\n\n/** v29 adds optional opaque image tint; omitted keeps the existing white rendering. */\nfunction migrateV28ToV29(_document: Record<string, unknown>): void {}\n\n/** v30 adds optional Spine bone connectors; every v29 document is already valid without them. */\nfunction migrateV29ToV30(_document: Record<string, unknown>): void {}\n\nfunction normalizeLegacySpineConnectors(document: Record<string, unknown>): void {\n const migrateConnectors = (record: Record<string, unknown>): void => {\n if (!Array.isArray(record.connectors)) return;\n record.connectors = record.connectors.map((value) => {\n if (typeof value !== \"object\" || value === null) return value;\n const connector = value as Record<string, unknown>;\n if (typeof connector.boneName !== \"string\") return value;\n const migrated: Record<string, unknown> = { ...connector, partType: \"bone\", partName: connector.boneName };\n delete migrated.boneName;\n return migrated;\n });\n };\n const visit = (node: Record<string, unknown>): void => {\n migrateConnectors(node);\n if (Array.isArray(node.propertyOverrides)) for (const override of node.propertyOverrides) {\n const patch = (override as { patch?: unknown }).patch;\n if (typeof patch === \"object\" && patch !== null) migrateConnectors(patch as Record<string, unknown>);\n }\n if (Array.isArray(node.locallyAddedNodes)) for (const local of node.locallyAddedNodes) if (typeof local === \"object\" && local !== null) visit(local as Record<string, unknown>);\n };\n const owners = [...(document.scenes as { nodes?: unknown[] }[] ?? []), ...(document.prefabs as { nodes?: unknown[] }[] ?? [])];\n for (const owner of owners) for (const node of owner.nodes ?? []) if (typeof node === \"object\" && node !== null) visit(node as Record<string, unknown>);\n}\n\n/** v31 generalizes connector bones into typed parts and keeps every v30 connector as a bone. */\nfunction migrateV30ToV31(document: Record<string, unknown>): void { normalizeLegacySpineConnectors(document); }\n\nfunction normalizeLegacyPagination(document: Record<string, unknown>): void {\n const visit = (node: Record<string, unknown>): void => {\n if (node.type === \"pagination\" && !Object.hasOwn(node, \"style\")) node.style = \"dots\";\n const localNodes = node.locallyAddedNodes;\n if (Array.isArray(localNodes)) for (const localNode of localNodes) if (typeof localNode === \"object\" && localNode !== null) visit(localNode as Record<string, unknown>);\n };\n const owners = [...(document.scenes as { nodes?: unknown[] }[] ?? []), ...(document.prefabs as { nodes?: unknown[] }[] ?? [])];\n for (const owner of owners) for (const node of owner.nodes ?? []) if (typeof node === \"object\" && node !== null) visit(node as Record<string, unknown>);\n}\n\n/** v32 adds pagination/page-group variants to the merged develop lineage and normalizes legacy pagination dots. */\nfunction migrateV31ToV32(document: Record<string, unknown>): void { normalizeLegacyPagination(document); }\n\n/**\n * v33 reconciles the independently numbered develop and pagination feature histories. Feature documents\n * may already report v29..v32 while still carrying legacy Spine `boneName`; develop documents may report\n * v29..v31 without pagination. Both normalizers are deliberately idempotent so either lineage is safe.\n */\nfunction migrateV32ToV33(document: Record<string, unknown>): void {\n normalizeLegacySpineConnectors(document);\n normalizeLegacyPagination(document);\n}\n\nexport function migrateProjectDocument(input: unknown): ProjectDocument { if (typeof input !== \"object\" || input === null || !Object.hasOwn(input, \"schemaVersion\")) throw new ProjectDocumentMigrationError(\"A schemaVersion is required for migration.\"); const version = (input as { schemaVersion?: unknown }).schemaVersion; if (typeof version !== \"number\" || !Number.isInteger(version) || version < 1 || version > CURRENT_SCHEMA_VERSION) throw new ProjectDocumentMigrationError(`Unsupported schemaVersion '${String(version)}'.`); const migrated = structuredClone(input) as Record<string, unknown>; if (version <= 1) migrateV1ToV2(migrated); if (version <= 6) migrated.effects = []; if (version <= 7) for (const scene of migrated.scenes as { layout?: Record<string, unknown> }[] ?? []) { const layout = scene.layout; if (layout?.referenceViewports !== undefined) layout.preferredViewports = structuredClone(layout.referenceViewports); } if (version <= 9) migrateToV10(migrated, version === 9 ? \"v9\" : \"legacy\"); if (version <= 10) migrateV10ToV11(migrated); if (version <= 14) migrateV14ToV15(migrated); if (version <= 18) migrateV18ToV19(migrated); if (version <= 19) migrateV19ToV20(migrated); if (version <= 20) migrateV20ToV21(migrated); if (version <= 21) migrateV21ToV22(migrated); if (version <= 22) migrateV22ToV23(migrated); if (version <= 23) migrateV23ToV24(migrated); if (version <= 24) migrateV24ToV25(migrated); if (version <= 25) migrateV25ToV26(migrated); if (version <= 26) migrateV26ToV27(migrated); if (version <= 27) migrateV27ToV28(migrated); if (version <= 28) migrateV28ToV29(migrated); if (version <= 29) migrateV29ToV30(migrated); if (version <= 30) migrateV30ToV31(migrated); if (version <= 31) migrateV31ToV32(migrated); if (version <= 32) migrateV32ToV33(migrated);\n // v36 → v37 (position multiplier у spine-коннекторов) не требует переписывания данных:\n // добавлены только опциональные поля коннектора, и любой документ v36 уже валиден как v37.\n // v34 → v35 (`states.normalAssetId` стал опциональным у button/staged-button) не требует\n // переписывания данных: ослабление обязательного поля — любой документ v34 уже валиден как v35.\n // v33 → v34 (`opacity-group`) не требует переписывания данных: добавлен новый вариант узла, а\n // любой документ v33 уже валиден как v34 — существующих узлов этого типа в нём быть не может.\n // v17 → v18 (image без assetId) тоже не требует переписывания данных: старый формат — строгое\n // подмножество нового, у каждой существующей image-ноды assetId просто остаётся на месте.\n // v15 → v16 (вложенные пресеты) не требует переписывания данных: новый формат — надмножество\n // старого. `propertyOverrides[].nodeId` и `parentId` локального узла стали путями, а путь длиной в\n // один сегмент — это ровно прежний id узла определения; вложенных инстансов в `locallyAddedNodes`\n // v15 хранить не мог, поэтому запрещённых значений в старых документах не бывает.\n // v38 → v39 (per-state button tint/opacity) не требует переписывания данных: новые appearance\n // fields optional and therefore resolve to white / 1 for every existing button.\n // v37 → v38 (page-group carousel arrows) не требует переписывания данных: добавлены только\n // опциональные поля `pageUpButtonNodeId`/`pageDownButtonNodeId`, любой документ v37 уже валиден как v38.\n migrated.schemaVersion = CURRENT_SCHEMA_VERSION; assertProjectDocument(migrated); return migrated; }\nfunction canonicalizeJson(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(canonicalizeJson);\n if (typeof value === \"object\" && value !== null) return Object.fromEntries(Object.keys(value).sort().map((key) => [key, canonicalizeJson((value as Record<string, unknown>)[key])]));\n return value;\n}\nexport function serializeProjectDocument(document: ProjectDocument): string { assertProjectDocument(document); return `${JSON.stringify(canonicalizeJson(document))}\\n`; }\n\nexport * from \"./assetPaths.js\";\nexport * from \"./localization.js\";\nexport * from \"./manifest.js\";\nexport * from \"./prefabs.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAA6B,MAAM,mBAAmB,CAAC;AACpE,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,UAAU,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,qBAAqB,EAAE,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAClK,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE7G,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AACxG,OAAO,EAAE,qBAAqB,EAAE,qCAAqC,EAA8B,MAAM,qBAAqB,CAAC;AAC/H,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAW,CAAC;AAClD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;AAC3C;;;;;GAKG;AACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,0BAA0B,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACtG,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAEnG,mGAAmG;AACnG,oGAAoG;AACpG,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAC1kB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAEvS,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAE9K,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAExV,MAAM,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,iBAAiB,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,kBAAkB,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,iBAAiB,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAE1S,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAEpqB,MAAM,cAAc,GAAG,CAAoB,QAAW,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACrN,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;AAC5H,mGAAmG;AACnG,6EAA6E;AAC7E,iGAAiG;AACjG,4FAA4F;AAC5F,kGAAkG;AAClG,wEAAwE;AACxE,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AACvb,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/F,kGAAkG;AAClG,+FAA+F;AAC/F,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACrF,iGAAiG;AACjG,iGAAiG;AACjG,mGAAmG;AACnG,oGAAoG;AACpG,uGAAuG;AACvG,kGAAkG;AAClG,gGAAgG;AAChG,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACxJ,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,cAAc,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACvM,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,cAAc,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACnM,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,cAAc,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACzL,sGAAsG;AACtG,sGAAsG;AACtG,oGAAoG;AACpG,kEAAkE;AAClE,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;AAChE,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACvP,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,oCAAoC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC9I,8FAA8F;AAC9F,iGAAiG;AACjG,6FAA6F;AAC7F,wEAAwE;AACxE,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,oCAAoC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AAE52B,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5J,iGAAiG;AACjG,iGAAiG;AACjG,yEAAyE;AACzE,oGAAoG;AACpG,qGAAqG;AACrG,uGAAuG;AACvG,oGAAoG;AACpG,sGAAsG;AACtG,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAEvH,oGAAoG;AACpG,kGAAkG;AAClG,+FAA+F;AAC/F,2FAA2F;AAC3F,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7Y,sGAAsG;AACtG,gGAAgG;AAChG,8EAA8E;AAC9E,MAAM,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAAC;IACvC,oFAAoF;IACpF,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACnE,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE;IACxB,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE;IACpB,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;CACrD,CAAC,CAAC;AACH,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9I,iGAAiG;AACjG,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAAC;IAC9C,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAClE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACvC,YAAY,EAAE,WAAW;IACzB,gGAAgG;IAChG,6FAA6F;IAC7F,kGAAkG;IAClG,mEAAmE;IACnE,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACtF,2BAA2B,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;CACtK,CAAC,CAAC;AAEH,MAAM,UAAU,uCAAuC,CAAC,SAAqF,EAAE,OAAwB;IACrK,MAAM,IAAI,GAAG,SAAS,CAAC,kBAAkB,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAC5D,MAAM,QAAQ,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,2BAA2B,EAAE,MAAM,CAAC;IACnG,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC;AAChE,CAAC;AACD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5Z,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1G,iGAAiG;AACjG,sGAAsG;AACtG,uGAAuG;AACvG,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC;IAClC,OAAO,EAAE,EAAE;IACX,+FAA+F;IAC/F,mGAAmG;IACnG,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;IAC9C,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,oCAAoC,EAAE,CAAC;IACpE,KAAK,EAAE,eAAe;IACtB,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChG,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE;IAC5B,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE;CACzB,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;AACzI,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;QACvD,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;QACjC,gGAAgG;QAChG,sFAAsF;QACtF,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;QACnB,GAAG,eAAe,CAAC,UAAU;QAC7B,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QACvD,iGAAiG;QACjG,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACvC,qGAAqG;QACrG,sGAAsG;QACtG,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC;KACjE,CAAC,CAAC,CAAC,CAAC;AACL,MAAM,CAAC,MAAM,wBAAwB,GAAG,IAAI,CAAC,MAAM,CAAC;IAClD,qFAAqF;IACrF,MAAM,EAAE,WAAW;IACnB;;;OAGG;IACH,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;CAClD,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,CAAU,CAAC;AAErF,yHAAyH;AACzH,MAAM,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACxE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC,CAAC;AACjE;;;GAGG;AACH,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC;IAC/B,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;IACxI,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC;IAC5J,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;CAC7R,CAAC,CAAC;AACH,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACvG,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;AAClK,mGAAmG;AACnG,kGAAkG;AAClG,sDAAsD;AACtD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/P,sGAAsG;AACtG,mGAAmG;AACnG,4FAA4F;AAC5F,sGAAsG;AACtG,sGAAsG;AACtG,8FAA8F;AAC9F,uGAAuG;AACvG,4DAA4D;AAC5D,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;AAC9F,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACzS,oGAAoG;AACpG,qGAAqG;AACrG,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,cAAc,CAAU,CAAC;AAEvG,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,qBAAqB,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,mBAAmB,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AACnK,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC3G,kGAAkG;AAClG,mGAAmG;AACnG,iGAAiG;AACjG,+DAA+D;AAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1Q,oGAAoG;AACpG,yGAAyG;AACzG,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAErH,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC;IACrC,SAAS,EAAE,mBAAmB;IAC9B,OAAO,EAAE,OAAO;IAChB,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACxC,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,oCAAoC,EAAE,CAAC,CAAC;IAC9F,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IACzC,aAAa,EAAE,IAAI,CAAC,OAAO,EAAE;IAC7B,8FAA8F;IAC9F,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;CACpD,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,UAAU,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,CAAC;AAClI,qGAAqG;AACrG,iGAAiG;AACjG,uGAAuG;AACvG,sGAAsG;AACtG,sGAAsG;AACtG,uGAAuG;AACvG,wEAAwE;AACxE,wFAAwF;AACxF,oGAAoG;AACpG,gGAAgG;AAChG,iGAAiG;AACjG,oGAAoG;AACpG,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;QACtD,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QAChC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QACzC,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC9C,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;KACjD,CAAC,CAAC,CAAC,CAAC;AACL,+FAA+F;AAC/F,iGAAiG;AACjG,iGAAiG;AACjG,qGAAqG;AACrG,gGAAgG;AAChG,qGAAqG;AACrG,wFAAwF;AACxF,oFAAoF;AACpF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;QACtD,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QAChC,6FAA6F;QAC7F,2FAA2F;QAC3F,2DAA2D;QAC3D,+FAA+F;QAC/F,6EAA6E;QAC7E,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC7C,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QAC1C,qBAAqB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;KAC3G,CAAC,CAAC,CAAC,CAAC;AACL,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAErG,sGAAsG;AACtG,oGAAoG;AACpG,kGAAkG;AAClG,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;QAClD,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAC3B,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpC,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE;QAC1B,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE;QAC3B,iFAAiF;QACjF,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/D,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE;QACtB,KAAK,EAAE,UAAU;QACjB,OAAO,EAAE,OAAO;QAChB,YAAY,EAAE,IAAI,CAAC,OAAO,EAAE;QAC5B,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE;QACxB,SAAS,EAAE,yBAAyB;KACrC,CAAC,CAAC,CAAC,CAAC;AACL,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;QACnD,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC5B,iBAAiB,EAAE,EAAE;QACrB,WAAW,EAAE,EAAE;QACf,aAAa,EAAE,EAAE;QACjB,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE;QAClB,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE;QAClB,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE;QACnB,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE;QAC3B,WAAW,EAAE,OAAO;QACpB,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QACxC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC;KACzD,CAAC,CAAC,CAAC,CAAC;AACL,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;QACxD,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;QAClC,iBAAiB,EAAE,EAAE;QACrB,WAAW,EAAE,EAAE;QACf,eAAe,EAAE,IAAI,CAAC,MAAM,EAAE;QAC9B,WAAW,EAAE,OAAO;KACrB,CAAC,CAAC,CAAC,CAAC;AACL,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAE/F,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC3H,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAExF,oGAAoG;AACpG,8FAA8F;AAC9F,mGAAmG;AACnG,mGAAmG;AACnG,gGAAgG;AAChG,qGAAqG;AACrG,iFAAiF;AACjF,oGAAoG;AACpG,uGAAuG;AACvG,wGAAwG;AACxG,qGAAqG;AACrG,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;QACvD,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;QAChC,KAAK,EAAE,mBAAmB;QAC1B,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACrD,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,oCAAoC,EAAE,CAAC,CAAC;QAChG,wFAAwF;QACxF,8FAA8F;QAC9F,kGAAkG;QAClG,8DAA8D;QAC9D,6BAA6B,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChD,qBAAqB,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC7C,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QACvC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QACzC,SAAS,EAAE,mBAAmB;QAC9B,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QACpC,OAAO,EAAE,OAAO;QAChB,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE;QACzB,iGAAiG;QACjG,gGAAgG;QAChG,iGAAiG;QACjG,6EAA6E;QAC7E,4FAA4F;QAC5F,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC5C,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC5C,kGAAkG;QAClG,+FAA+F;QAC/F,mGAAmG;QACnG,wFAAwF;QACxF,gBAAgB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;KAC9D,CAAC,CAAC,CAAC,CAAC;AACL,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACtE,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5H,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,oCAAoC,EAAE,CAAC,CAAC;AAC7E,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC;IAChC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAC1D,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACxF,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;CAC9L,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QAC5D,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;QACxK,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACnR,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;YACpB,QAAQ,EAAE,aAAa;YACvB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YACzH,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YAC7P,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,KAAK,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;SACle,CAAC;KACH,CAAC,CAAC,CAAC,CAAC;AAGL,MAAM,UAAU,gBAAgB,CAAC,MAAwB,IAAwC,OAAO,MAAM,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC;AACtI,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACjO;;;;GAIG;AACH,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AACnC,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,cAAc,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;YAC7P,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC;YACrC,QAAQ,EAAE,EAAE;YACZ,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;YACtE,iBAAiB,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SACnD,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,iBAAiB,EAAE,CAAC,CAAC;AAEpH;;;;GAIG;AACH,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAS,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;AACnE,0GAA0G;AAC1G,MAAM,CAAC,MAAM,sBAAsB,GAAG,YAAY,CAAC;AAGnD,MAAM,UAAU,aAAa,CAAC,IAAY,IAA6B,OAAO,IAAI,CAAC,IAAI,KAAK,mBAAmB,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC;AACpL,MAAM,UAAU,0BAA0B,CAAmD,IAAqB,EAAE,OAAwB;IAC1I,OAAO,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,EAAO,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,IAA4B,OAAO,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC;AAE1G,MAAM,UAAU,WAAW,CAAC,IAAY,IAA2B,OAAO,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC;AAEvG,MAAM,UAAU,cAAc,CAAC,IAAY,IAA8B,OAAO,IAAI,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC,CAAC;AAChH,oLAAoL;AACpL,MAAM,UAAU,2BAA2B,CAAC,IAAY,IAAa,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAE7I,MAAM,UAAU,UAAU,CAAC,IAAY,IAAsB,OAAO,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC;AAU3F,MAAM,UAAU,WAAW,CAAC,IAAY,IAA2B,OAAO,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC;AACvG;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAAC,IAAmE,EAAE,OAAwB;IACxI,MAAM,QAAQ,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACxF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AAChE,CAAC;AAGD,MAAM,UAAU,qBAAqB,CAAC,IAAY,IAAiC,OAAO,IAAI,CAAC,IAAI,KAAK,kBAAkB,CAAC,CAAC,CAAC;AAC7H,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC5H,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,sBAAsB,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9I,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AAEzU,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAEzI,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAClP,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,CAAC,MAAM,CAAC;IACnD,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE;IAChB,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;IAC3C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;CAC7C,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC;AACjR,wFAAwF;AACxF,2FAA2F;AAC3F,iFAAiF;AACjF,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAC3d,kHAAkH;AAClH,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AACrN,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAClP,sGAAsG;AACtG,iGAAiG;AACjG,kGAAkG;AAClG,qGAAqG;AACrG,mGAAmG;AACnG,sGAAsG;AACtG,qGAAqG;AACrG,2FAA2F;AAC3F,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAC7O,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC;AAEpH,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAEjV,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,sBAAsB,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,oBAAoB,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAM1f,MAAM,OAAO,6BAA8B,SAAQ,KAAK;IAAY,IAAI,GAAG,4BAA4B,CAAC;IAAC,YAAY,OAAe,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,+BAA+B,CAAC,CAAC,CAAC;CAAE;AACxM,MAAM,cAAc,GAAG,GAA8C,CAAC;AACtE,MAAM,aAAa,GAAG,UAA6D,CAAC;AACpF,MAAM,SAAS,GAAG,GAAG,EAAE,GAAG,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC/I,iGAAiG;AACjG,uEAAuE;AACvE,MAAM,WAAW,GAAG,SAAS,EAAE,CAAC;AAAC,WAAW,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;AACrE,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;AAAC,MAAM,cAAc,GAAG,SAAS,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACxH,MAAM,UAAU,cAAc,KAAa,OAAO,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AACxE,MAAM,GAAG,GAAG,CAAC,MAAyB,EAAE,IAAY,EAAE,IAAY,EAAE,OAAe,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;AAChJ,kGAAkG;AAClG,iGAAiG;AACjG,qGAAqG;AACrG,oGAAoG;AACpG,sGAAsG;AACtG,MAAM,UAAU,GAAG,CAAC,MAAyB,EAAE,IAAY,EAAE,IAAY,EAAE,OAAe,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;AAEzJ,0FAA0F;AAC1F,SAAS,gBAAgB,CAAC,QAAyB,EAAE,KAAY,EAAE,IAAY,EAAE,MAAyB;IACxG,MAAM,KAAK,GAAG,qBAAqB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACrD,mGAAmG;IACnG,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAC/F,GAAG,CAAC,MAAM,EAAE,mBAAmB,EAAE,GAAG,IAAI,aAAa,EAAE,iDAAiD,CAAC,CAAC;IAC5G,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,uBAAuB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/C,kBAAkB,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;YACjD,IAAI,GAAG,KAAK,EAAE,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO;YACnE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClB,GAAG,CAAC,MAAM,EAAE,uBAAuB,EAAE,GAAG,IAAI,eAAe,GAAG,EAAE,EAAE,gBAAgB,GAAG,gBAAgB,OAAO,CAAC,MAAM,cAAc,CAAC,CAAC;QACrI,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,QAAyB,EAAE,KAAY,EAAE,IAAY,EAAE,MAAyB;IAC3G,MAAM,KAAK,GAAG,qBAAqB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAClE,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC/B,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC3D,MAAM,QAAQ,GAAG,GAAG,IAAI,mBAAmB,IAAI,CAAC,EAAE,IAAI,KAAK,EAAE,CAAC;gBAC9D,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;oBAAE,GAAG,CAAC,MAAM,EAAE,yBAAyB,EAAE,QAAQ,EAAE,oBAAoB,MAAM,iCAAiC,CAAC,CAAC;qBACjI,IAAI,MAAM,KAAK,IAAI,CAAC,EAAE;oBAAE,GAAG,CAAC,MAAM,EAAE,yBAAyB,EAAE,QAAQ,EAAE,8CAA8C,CAAC,CAAC;YAChI,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC/B,KAAK,MAAM,KAAK,IAAI,CAAC,kBAAkB,EAAE,kBAAkB,CAAU,EAAE,CAAC;gBACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC7B,IAAI,QAAQ,KAAK,SAAS;oBAAE,SAAS;gBACrC,MAAM,SAAS,GAAG,GAAG,IAAI,qBAAqB,IAAI,CAAC,EAAE,IAAI,KAAK,EAAE,CAAC;gBACjE,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACnC,IAAI,MAAM,KAAK,SAAS;oBAAE,GAAG,CAAC,MAAM,EAAE,0BAA0B,EAAE,SAAS,EAAE,qBAAqB,QAAQ,iCAAiC,CAAC,CAAC;qBACxI,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe;oBAAE,GAAG,CAAC,MAAM,EAAE,0BAA0B,EAAE,SAAS,EAAE,mEAAmE,CAAC,CAAC;YAChM,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC/B,KAAK,MAAM,KAAK,IAAI,CAAC,oBAAoB,EAAE,sBAAsB,CAAU,EAAE,CAAC;gBAC5E,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC7B,IAAI,QAAQ,KAAK,SAAS;oBAAE,SAAS;gBACrC,MAAM,SAAS,GAAG,GAAG,IAAI,oBAAoB,IAAI,CAAC,EAAE,IAAI,KAAK,EAAE,CAAC;gBAChE,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACnC,IAAI,MAAM,KAAK,SAAS;oBAAE,GAAG,CAAC,MAAM,EAAE,0BAA0B,EAAE,SAAS,EAAE,qBAAqB,QAAQ,iCAAiC,CAAC,CAAC;qBACxI,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,eAAe;oBAAE,GAAG,CAAC,MAAM,EAAE,0BAA0B,EAAE,SAAS,EAAE,mEAAmE,CAAC,CAAC;YAChM,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;YAAE,SAAS;QACpC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;QACvC,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;QACzC,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;YACnE,MAAM,aAAa,GAAG,GAAG,IAAI,oBAAoB,IAAI,CAAC,EAAE,IAAI,KAAK,EAAE,CAAC;YACpE,IAAI,SAAS,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;gBAClC,IAAI,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC;oBAAE,GAAG,CAAC,MAAM,EAAE,gCAAgC,EAAE,GAAG,aAAa,WAAW,EAAE,eAAe,SAAS,CAAC,QAAQ,uCAAuC,CAAC,CAAC;;oBAC1L,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC5C,CAAC;YACD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;YACjD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,GAAG,CAAC,MAAM,EAAE,gCAAgC,EAAE,GAAG,aAAa,eAAe,EAAE,2BAA2B,SAAS,CAAC,YAAY,iCAAiC,CAAC,CAAC;gBACnK,SAAS;YACX,CAAC;YACD,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE,CAAC;gBAC1B,GAAG,CAAC,MAAM,EAAE,gCAAgC,EAAE,GAAG,aAAa,eAAe,EAAE,yDAAyD,CAAC,CAAC;gBAC1I,SAAS;YACX,CAAC;YACD,IAAI,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC/B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;YAClC,OAAO,UAAU,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBACvD,IAAI,UAAU,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC;oBAC7B,GAAG,CAAC,MAAM,EAAE,gCAAgC,EAAE,GAAG,aAAa,eAAe,EAAE,mEAAmE,CAAC,CAAC;oBACpJ,MAAM;gBACR,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBACxB,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC;YACvD,CAAC;YACD,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAAE,GAAG,CAAC,MAAM,EAAE,kCAAkC,EAAE,GAAG,aAAa,eAAe,EAAE,SAAS,MAAM,CAAC,EAAE,4DAA4D,CAAC,CAAC;;gBAC/L,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;AACH,CAAC;AAID,0GAA0G;AAC1G,SAAS,kBAAkB,CAAC,IAAY,EAAE,QAAgB,EAAE,MAAyB;IACnF,KAAK,MAAM,OAAO,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAU,EAAE,CAAC;QACrD,MAAM,MAAM,GAAkB,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;QACnG,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC;QACvC,IAAI,IAAI,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC;YAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,EAAE,GAAG,QAAQ,kBAAkB,EAAE,0DAA0D,OAAO,YAAY,CAAC,CAAC;QACvL,IAAI,IAAI,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC;YAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,EAAE,GAAG,QAAQ,mBAAmB,EAAE,2DAA2D,OAAO,YAAY,CAAC,CAAC;IAC5L,CAAC;AACH,CAAC;AACD,SAAS,gBAAgB,CAAC,MAAgC,IAAc,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC7L,MAAM,UAAU,qBAAqB,CAAC,MAAwB,IAAc,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9I,SAAS,SAAS,CAAC,KAAY,EAAE,IAAY,EAAE,MAA0B,EAAE,OAAoB,EAAE,OAAsC,EAAE,MAAyB;IAChK,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,sBAAsB,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjL,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC9C,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;QAAE,GAAG,CAAC,MAAM,EAAE,wBAAwB,EAAE,GAAG,IAAI,gBAAgB,CAAC,EAAE,EAAE,cAAc,EAAE,mBAAmB,CAAC,CAAC;SAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;QAAE,GAAG,CAAC,MAAM,EAAE,2BAA2B,EAAE,GAAG,IAAI,gBAAgB,CAAC,EAAE,EAAE,sCAAsC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxU,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QAC9B,MAAM,QAAQ,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,GAAG,CAAC,MAAM,EAAE,0BAA0B,EAAE,GAAG,QAAQ,WAAW,EAAE,WAAW,IAAI,CAAC,QAAQ,mBAAmB,CAAC,CAAC;QACtK,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,GAAG,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,GAAG,QAAQ,aAAa,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK;YAAE,GAAG,CAAC,MAAM,EAAE,yBAAyB,EAAE,SAAS,EAAE,UAAU,OAAO,mBAAmB,CAAC,CAAC;aAAM,CAAC;YAAC,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAAC,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,CAAC,EAAE;gBAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,EAAE,SAAS,EAAE,SAAS,OAAO,oCAAoC,CAAC,CAAC;YAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YAAC,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE;gBAAE,GAAG,CAAC,MAAM,EAAE,2BAA2B,EAAE,SAAS,EAAE,UAAU,OAAO,oCAAoC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1lB,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAAC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAAC,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE,GAAG,CAAC,MAAM,EAAE,0BAA0B,EAAE,GAAG,QAAQ,WAAW,EAAE,WAAW,IAAI,CAAC,QAAQ,yBAAyB,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAAC,CAAC;QACzP,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAAC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAAC,IAAI,CAAC,KAAK;gBAAE,UAAU,CAAC,MAAM,EAAE,yBAAyB,EAAE,GAAG,QAAQ,UAAU,EAAE,UAAU,IAAI,CAAC,OAAO,mBAAmB,CAAC,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;gBAAE,GAAG,CAAC,MAAM,EAAE,8BAA8B,EAAE,GAAG,QAAQ,UAAU,EAAE,KAAK,IAAI,CAAC,IAAI,oBAAoB,IAAI,CAAC,IAAI,SAAS,CAAC,CAAC;QAAC,CAAC;QACzZ,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;YAAC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAAC,IAAI,CAAC,KAAK;gBAAE,UAAU,CAAC,MAAM,EAAE,yBAAyB,EAAE,GAAG,QAAQ,oBAAoB,EAAE,qBAAqB,IAAI,CAAC,iBAAiB,mBAAmB,CAAC,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;gBAAE,GAAG,CAAC,MAAM,EAAE,8BAA8B,EAAE,GAAG,QAAQ,oBAAoB,EAAE,oDAAoD,CAAC,CAAC;QAAC,CAAC;QACvb,oGAAoG;QACpG,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;YAAE,iBAAiB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,MAAM,KAAK,GAAG,GAAG,KAAK,SAAkB,CAAC,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,GAAG,GAAG,QAAQ,WAAW,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK;gBAAE,UAAU,CAAC,MAAM,EAAE,yBAAyB,EAAE,IAAI,EAAE,UAAU,OAAO,mBAAmB,CAAC,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;gBAAE,GAAG,CAAC,MAAM,EAAE,8BAA8B,EAAE,IAAI,EAAE,aAAa,KAAK,kCAAkC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjf,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;YAAE,KAAK,MAAM,KAAK,IAAI,CAAC,cAAc,EAAE,cAAc,CAAU,EAAE,CAAC;gBAAC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;gBAAC,IAAI,OAAO,KAAK,SAAS;oBAAE,SAAS;gBAAC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,GAAG,QAAQ,WAAW,KAAK,EAAE,CAAC;gBAAC,IAAI,CAAC,KAAK;oBAAE,UAAU,CAAC,MAAM,EAAE,yBAAyB,EAAE,SAAS,EAAE,UAAU,OAAO,mBAAmB,CAAC,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;oBAAE,GAAG,CAAC,MAAM,EAAE,8BAA8B,EAAE,SAAS,EAAE,YAAY,KAAK,0BAA0B,CAAC,CAAC;YAAC,CAAC;QACze,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;gBACxC,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,EAAE,GAAG,QAAQ,WAAW,UAAU,KAAK,EAAE,uBAAuB,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC1I,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACvB,iBAAiB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,MAAM,KAAK,GAAG,GAAG,KAAK,SAAkB,CAAC,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,KAAK,SAAS;oBAAE,OAAO,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,GAAG,QAAQ,WAAW,UAAU,WAAW,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK;oBAAE,UAAU,CAAC,MAAM,EAAE,yBAAyB,EAAE,SAAS,EAAE,UAAU,OAAO,mBAAmB,CAAC,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;oBAAE,GAAG,CAAC,MAAM,EAAE,8BAA8B,EAAE,SAAS,EAAE,0BAA0B,KAAK,kCAAkC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzgB,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,cAAc,CAAC;gBAAE,GAAG,CAAC,MAAM,EAAE,yBAAyB,EAAE,GAAG,QAAQ,iBAAiB,EAAE,kBAAkB,IAAI,CAAC,cAAc,mBAAmB,CAAC,CAAC;YACnM,KAAK,MAAM,KAAK,IAAI,CAAC,cAAc,EAAE,cAAc,CAAU,EAAE,CAAC;gBAAC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;gBAAC,IAAI,OAAO,KAAK,SAAS;oBAAE,SAAS;gBAAC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,GAAG,QAAQ,WAAW,KAAK,EAAE,CAAC;gBAAC,IAAI,CAAC,KAAK;oBAAE,UAAU,CAAC,MAAM,EAAE,yBAAyB,EAAE,SAAS,EAAE,UAAU,OAAO,mBAAmB,CAAC,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;oBAAE,GAAG,CAAC,MAAM,EAAE,8BAA8B,EAAE,SAAS,EAAE,mBAAmB,KAAK,0BAA0B,CAAC,CAAC;YAAC,CAAC;QACtd,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;YAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,MAAM,KAAK,GAAG,GAAG,KAAK,SAAkB,CAAC,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,GAAG,GAAG,QAAQ,WAAW,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK;gBAAE,UAAU,CAAC,MAAM,EAAE,yBAAyB,EAAE,IAAI,EAAE,UAAU,OAAO,mBAAmB,CAAC,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;gBAAE,GAAG,CAAC,MAAM,EAAE,8BAA8B,EAAE,IAAI,EAAE,eAAe,KAAK,kCAAkC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvf,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;YAAE,KAAK,MAAM,KAAK,IAAI,CAAC,cAAc,EAAE,gBAAgB,CAAU,EAAE,CAAC;gBAAC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;gBAAC,IAAI,OAAO,KAAK,SAAS;oBAAE,SAAS;gBAAC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,GAAG,QAAQ,WAAW,KAAK,EAAE,CAAC;gBAAC,IAAI,CAAC,KAAK;oBAAE,UAAU,CAAC,MAAM,EAAE,yBAAyB,EAAE,SAAS,EAAE,UAAU,OAAO,mBAAmB,CAAC,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;oBAAE,GAAG,CAAC,MAAM,EAAE,8BAA8B,EAAE,SAAS,EAAE,cAAc,KAAK,0BAA0B,CAAC,CAAC;YAAC,CAAC;QAC/e,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YAChC,MAAM,cAAc,GAAG;gBACrB,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,QAAQ,UAAU,CAAC;gBACrC,CAAC,IAAI,CAAC,mBAAmB,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,QAAQ,sCAAsC,CAAC;gBAC/F,CAAC,IAAI,CAAC,mBAAmB,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,qCAAqC,CAAC;aACrF,CAAC;YACX,KAAK,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,cAAc,EAAE,CAAC;gBAClD,IAAI,OAAO,KAAK,SAAS;oBAAE,SAAS;gBACpC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAClC,IAAI,CAAC,KAAK;oBAAE,UAAU,CAAC,MAAM,EAAE,yBAAyB,EAAE,SAAS,EAAE,UAAU,OAAO,mBAAmB,CAAC,CAAC;qBACtG,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;oBAAE,GAAG,CAAC,MAAM,EAAE,8BAA8B,EAAE,SAAS,EAAE,kDAAkD,CAAC,CAAC;YACnJ,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,MAAM,cAAc,GAAG;gBACrB,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,QAAQ,oBAAoB,CAAC;gBAC1D,CAAC,IAAI,CAAC,kBAAkB,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,QAAQ,yCAAyC,CAAC;gBACrG,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,wCAAwC,CAAC;aAC3F,CAAC;YACX,KAAK,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,cAAc,EAAE,CAAC;gBACrD,IAAI,WAAW,KAAK,SAAS;oBAAE,SAAS;gBACxC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBACtC,IAAI,CAAC,KAAK;oBAAE,UAAU,CAAC,MAAM,EAAE,yBAAyB,EAAE,QAAQ,EAAE,UAAU,WAAW,mBAAmB,CAAC,CAAC;qBACzG,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;oBAAE,GAAG,CAAC,MAAM,EAAE,8BAA8B,EAAE,QAAQ,EAAE,gDAAgD,CAAC,CAAC;YAC1I,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;YAAC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAAC,IAAI,CAAC,KAAK;gBAAE,UAAU,CAAC,MAAM,EAAE,yBAAyB,EAAE,GAAG,QAAQ,oBAAoB,EAAE,qBAAqB,IAAI,CAAC,iBAAiB,mBAAmB,CAAC,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;gBAAE,GAAG,CAAC,MAAM,EAAE,8BAA8B,EAAE,GAAG,QAAQ,oBAAoB,EAAE,8CAA8C,CAAC,CAAC;QAAC,CAAC;QACnb,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAAC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,IAAI,GAAG,GAAG,QAAQ,wBAAwB,CAAC;YAAC,IAAI,CAAC,KAAK;gBAAE,UAAU,CAAC,MAAM,EAAE,yBAAyB,EAAE,IAAI,EAAE,UAAU,IAAI,CAAC,SAAS,CAAC,WAAW,mBAAmB,CAAC,CAAC;iBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;gBAAE,GAAG,CAAC,MAAM,EAAE,8BAA8B,EAAE,IAAI,EAAE,4DAA4D,CAAC,CAAC;QAAC,CAAC;QACvb,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YAC3D,MAAM,eAAe,GAAuB,CAAC,CAAC,mBAAmB,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YAC/H,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;gBAAE,eAAe,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;YACxF,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,eAAe,EAAE,CAAC;gBAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAClC,MAAM,SAAS,GAAG,GAAG,QAAQ,IAAI,KAAK,EAAE,CAAC;gBACzC,IAAI,CAAC,KAAK;oBAAE,UAAU,CAAC,MAAM,EAAE,yBAAyB,EAAE,SAAS,EAAE,UAAU,OAAO,mBAAmB,CAAC,CAAC;qBACtG,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;oBAAE,GAAG,CAAC,MAAM,EAAE,8BAA8B,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC,IAAI,IAAI,KAAK,2BAA2B,CAAC,CAAC;YAC9I,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;gBAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,EAAE,QAAQ,EAAE,2CAA2C,CAAC,CAAC;YAC1I,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG;gBAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,EAAE,GAAG,QAAQ,eAAe,EAAE,iEAAiE,CAAC,CAAC;YACnM,IAAI,IAAI,CAAC,cAAc,EAAE,WAAW,KAAK,SAAS,EAAE,CAAC;gBAAC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,QAAQ,GAAG,GAAG,QAAQ,6BAA6B,CAAC;gBAAC,IAAI,CAAC,KAAK;oBAAE,UAAU,CAAC,MAAM,EAAE,yBAAyB,EAAE,QAAQ,EAAE,UAAU,IAAI,CAAC,cAAc,CAAC,WAAW,mBAAmB,CAAC,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;oBAAE,GAAG,CAAC,MAAM,EAAE,8BAA8B,EAAE,QAAQ,EAAE,4DAA4D,CAAC,CAAC;YAAC,CAAC;QACjc,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,IAAI,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,IAAI,CAAC,eAAe,GAAG,GAAG,CAAC;YAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,EAAE,GAAG,QAAQ,kBAAkB,EAAE,yEAAyE,CAAC,CAAC;QAC1O,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;gBAC1B,KAAK,MAAM,KAAK,IAAI,CAAC,eAAe,EAAE,iBAAiB,CAAU,EAAE,CAAC;oBAClE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC5B,MAAM,SAAS,GAAG,GAAG,QAAQ,IAAI,KAAK,EAAE,CAAC;oBACzC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;wBAAC,GAAG,CAAC,MAAM,EAAE,8BAA8B,EAAE,SAAS,EAAE,uCAAuC,KAAK,GAAG,CAAC,CAAC;wBAAC,SAAS;oBAAC,CAAC;oBACjJ,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAClC,IAAI,CAAC,KAAK;wBAAE,UAAU,CAAC,MAAM,EAAE,yBAAyB,EAAE,SAAS,EAAE,UAAU,OAAO,mBAAmB,CAAC,CAAC;yBACtG,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;wBAAE,GAAG,CAAC,MAAM,EAAE,8BAA8B,EAAE,SAAS,EAAE,gBAAgB,KAAK,2BAA2B,CAAC,CAAC;gBAC5I,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,IAAI,CAAC,WAAW,EAAE,WAAW,KAAK,SAAS,EAAE,CAAC;oBAChD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;oBACvD,MAAM,QAAQ,GAAG,GAAG,QAAQ,0BAA0B,CAAC;oBACvD,IAAI,CAAC,KAAK;wBAAE,UAAU,CAAC,MAAM,EAAE,yBAAyB,EAAE,QAAQ,EAAE,UAAU,IAAI,CAAC,WAAW,CAAC,WAAW,mBAAmB,CAAC,CAAC;yBAC1H,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;wBAAE,GAAG,CAAC,MAAM,EAAE,8BAA8B,EAAE,QAAQ,EAAE,6DAA6D,CAAC,CAAC;gBACvJ,CAAC;gBACD,IAAI,IAAI,CAAC,6BAA6B,KAAK,SAAS,EAAE,CAAC;oBACrD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;oBAC7D,MAAM,MAAM,GAAG,GAAG,QAAQ,gCAAgC,CAAC;oBAC3D,IAAI,CAAC,KAAK;wBAAE,UAAU,CAAC,MAAM,EAAE,yBAAyB,EAAE,MAAM,EAAE,UAAU,IAAI,CAAC,6BAA6B,mBAAmB,CAAC,CAAC;yBAC9H,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;wBAAE,GAAG,CAAC,MAAM,EAAE,8BAA8B,EAAE,MAAM,EAAE,qEAAqE,CAAC,CAAC;gBAC9J,CAAC;YACH,CAAC;YACD,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC;gBAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,EAAE,GAAG,QAAQ,cAAc,EAAE,2EAA2E,CAAC,CAAC;YACrL,iGAAiG;YACjG,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS,IAAI,IAAI,CAAC,gBAAgB,GAAG,CAAC,KAAK,CAAC;gBAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,EAAE,GAAG,QAAQ,mBAAmB,EAAE,sFAAsF,CAAC,CAAC;QACxO,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,EAAE,GAAG,QAAQ,cAAc,EAAE,iFAAiF,CAAC,CAAC;QAC3P,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,GAAG,CAAC,MAAM,EAAE,0BAA0B,EAAE,GAAG,QAAQ,WAAW,EAAE,WAAW,IAAI,CAAC,QAAQ,mBAAmB,CAAC,CAAC;QACjL,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YAAC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAAC,IAAI,CAAC,MAAM;gBAAE,GAAG,CAAC,MAAM,EAAE,0BAA0B,EAAE,GAAG,QAAQ,WAAW,EAAE,WAAW,IAAI,CAAC,QAAQ,mBAAmB,CAAC,CAAC;iBAAM,IAAI,MAAM,CAAC,IAAI,KAAK,WAAW;gBAAE,GAAG,CAAC,MAAM,EAAE,+BAA+B,EAAE,GAAG,QAAQ,WAAW,EAAE,8CAA8C,CAAC,CAAC;QAAC,CAAC;QAC3W,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,KAAK,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,KAAK,SAAS;YAAE,GAAG,CAAC,MAAM,EAAE,+BAA+B,EAAE,GAAG,QAAQ,mCAAmC,EAAE,mDAAmD,CAAC,CAAC;QAC7R,KAAK,MAAM,OAAO,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAU,EAAE,CAAC;YACrD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9H,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,UAAU,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS;gBAAE,GAAG,CAAC,MAAM,EAAE,+BAA+B,EAAE,GAAG,QAAQ,0BAA0B,OAAO,kBAAkB,EAAE,mDAAmD,CAAC,CAAC;QACpQ,CAAC;QACD,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,EAAE,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAAC,MAAM,KAAK,GAAG,CAAC,EAAU,EAAQ,EAAE,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,uCAAuC,EAAE,IAAI,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAAE,OAAO,CAAC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AACza,CAAC;AACD,SAAS,QAAQ,CAAC,QAAyB;IACzC,MAAM,MAAM,GAAsB,EAAE,EAAE,GAAG,GAAG,IAAI,GAAG,EAAU,EAAE,QAAQ,GAAG,CAAC,EAAU,EAAE,IAAY,EAAE,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7M,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAAC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAiB,EAAE,OAAO,GAAG,IAAI,GAAG,EAAU,EAAE,OAAO,GAAG,IAAI,GAAG,EAA4B,CAAC;IAClK,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,6BAA6B,CAAC,CAAC,CAAC;IACtK,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC;QAAE,GAAG,CAAC,MAAM,EAAE,yBAAyB,EAAE,WAAW,CAAC,mBAAmB,EAAE,gCAAgC,KAAK,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9T,sGAAsG;IACtG,uEAAuE;IACvE,oHAAoH;IACpH,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QAChC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACpH,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO;QACjC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;QAAC,CAAC;IAC7L,CAAC,CAAC,CAAC;IACH,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAAE,OAAO,CAAC,MAAM,CAAC,GAAG,YAAY,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,MAAM,GAA6C,CAAC,CAAC,mBAAmB,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,yBAAyB,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,2BAA2B,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,yCAAyC,EAAE,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,iDAAiD,EAAE,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG;QAAE,GAAG,CAAC,MAAM,EAAE,wBAAwB,EAAE,GAAG,CAAC,IAAI,KAAK,EAAE,EAAE,yCAAyC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,GAAG,CAAC,MAAM,EAAE,yBAAyB,EAAE,GAAG,CAAC,WAAW,EAAE,4CAA4C,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ;QAAE,GAAG,CAAC,MAAM,EAAE,iCAAiC,EAAE,GAAG,CAAC,oBAAoB,CAAC,OAAO,EAAE,uDAAuD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,CAAC,GAAG,CAAC,oCAAoC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK;QAAE,UAAU,CAAC,MAAM,EAAE,yBAAyB,EAAE,UAAU,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;QAAE,GAAG,CAAC,MAAM,EAAE,8BAA8B,EAAE,UAAU,EAAE,gEAAgE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9nD,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5L,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAClF,MAAM,gBAAgB,GAAG,CAAC,QAAsD,EAAE,IAAY,EAAE,cAAc,GAAG,IAAI,EAAQ,EAAE;QAC7H,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO;QACjC,+FAA+F;QAC/F,0EAA0E;QAC1E,MAAM,eAAe,GAAG,8BAA8B,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC3E,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;YAC7E,MAAM,YAAY,GAAG,GAAG,IAAI,sBAAsB,KAAK,EAAE,CAAC;YAC1D,IAAI,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,GAAG,CAAC,MAAM,EAAE,gCAAgC,EAAE,GAAG,YAAY,SAAS,EAAE,gBAAgB,QAAQ,CAAC,MAAM,wCAAwC,CAAC,CAAC;YACtL,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAChC,MAAM,cAAc,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC5D,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;gBACjC,GAAG,CAAC,MAAM,EAAE,gCAAgC,EAAE,GAAG,YAAY,SAAS,EAAE,gBAAgB,QAAQ,CAAC,MAAM,mCAAmC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;gBACzJ,SAAS;YACX,CAAC;YACD,KAAK,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,mBAAmB,EAAE,mBAAmB,CAAC,EAAE,CAAC;gBACvI,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;oBAAE,GAAG,CAAC,MAAM,EAAE,4BAA4B,EAAE,GAAG,YAAY,UAAU,GAAG,EAAE,EAAE,sDAAsD,GAAG,IAAI,CAAC,CAAC;YACnL,CAAC;YACD,wFAAwF;YACxF,2FAA2F;YAC3F,MAAM,SAAS,GAAG,oBAAoB,CAAC,EAAE,GAAG,cAAc,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YACvI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;gBAAE,GAAG,CAAC,MAAM,EAAE,8BAA8B,EAAE,GAAG,YAAY,QAAQ,EAAE,oDAAoD,CAAC,CAAC;QAC7J,CAAC;QACD,gGAAgG;QAChG,+FAA+F;QAC/F,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;YAC9E,MAAM,SAAS,GAAG,GAAG,IAAI,sBAAsB,KAAK,EAAE,CAAC;YACvD,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,SAAS,KAAK,CAAC,CAAC;YAC1C,IAAI,SAAS,CAAC,IAAI,KAAK,iBAAiB;gBAAE,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC1F,CAAC;QACD,IAAI,CAAC,cAAc;YAAE,OAAO;QAC5B,MAAM,YAAY,GAAG,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACnE,IAAI,YAAY,KAAK,SAAS;YAAE,SAAS,CAAC,YAAY,EAAE,GAAG,IAAI,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACpH,CAAC,CAAC;IACF,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB;QAAE,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3S,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB;QAAE,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,EAAE,sBAAsB,CAAC,CAAC,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAAC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC,+BAA+B,CAAC;QAAC,IAAI,CAAC,KAAK;YAAE,UAAU,CAAC,MAAM,EAAE,yBAAyB,EAAE,SAAS,EAAE,UAAU,YAAY,mBAAmB,CAAC,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO;YAAE,GAAG,CAAC,MAAM,EAAE,8BAA8B,EAAE,SAAS,EAAE,0CAA0C,CAAC,CAAC;IAAC,CAAC,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/2B,oGAAoG;IACpG,qFAAqF;IACrF,MAAM,CAAC,IAAI,CAAC,GAAG,yBAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpD,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,SAAS,uBAAuB,CAAC,KAAc,EAAE,IAAY,EAAE,MAAyB;IACtF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,GAAG,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,EAAE,yBAAyB,CAAC,CAAC;QAC/F,OAAO;IACT,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,uBAAuB,CAAC,KAAK,EAAE,GAAG,IAAI,IAAI,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;SACjH,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,uBAAuB,CAAC,KAAK,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AAClK,CAAC;AACD,MAAM,UAAU,uBAAuB,CAAC,KAAc,IAAsB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAkB,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,KAAK,CAAC,YAAY,IAAI,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,6BAA6B,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,MAAM,GAAsB,EAAE,CAAC,CAAC,uBAAuB,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAwB,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;AAChiB,MAAM,UAAU,qBAAqB,CAAC,KAAc,IAAsC,MAAM,MAAM,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;IAAE,MAAM,IAAI,SAAS,CAAC,4BAA4B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACrT,8GAA8G;AAC9G,SAAS,kBAAkB,CAAC,SAAkC;IAC5D,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,CAAU,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QACzC,OAAO,SAAS,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QAClC,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAS;QACxC,SAAS,CAAC,YAAY,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC;QACtC,SAAS,CAAC,YAAY,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC;IACxC,CAAC;AACH,CAAC;AACD,SAAS,aAAa,CAAC,QAAiC;IACtD,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAgC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAiC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7H,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAkC,EAAE,CAAC;YAC5D,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI;gBAAE,kBAAkB,CAAC,IAAI,CAAC,SAAoC,CAAC,CAAC;YACjI,MAAM,SAAS,GAAG,IAAI,CAAC,eAAsF,CAAC;YAC9G,KAAK,MAAM,OAAO,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC;gBAC5C,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;gBAClD,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI;oBAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;YACzF,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAYD,SAAS,4BAA4B,CACnC,KAAwD,EACxD,SAAgJ,EAChJ,MAAM,GAAoB,QAAQ;IAElC,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAkI,CAAC;IAErK,KAAK,MAAM,OAAO,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAU,EAAE,CAAC;QACrD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAuG,CAAC;QACjI,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,MAAM,KAAK,GAAG,CAAC,MAAc,EAA2G,EAAE;YACxI,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACrC,IAAI,MAAM,KAAK,SAAS;gBAAE,OAAO,MAAM,CAAC;YACxC,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,OAAO,SAAS,CAAC;YAC3C,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YACzC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACrB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjF,MAAM,eAAe,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5E,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAExB,MAAM,aAAa,GAAG,SAAS,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAC7D,MAAM,aAAa,GAAG,SAAS,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAC7D,MAAM,iBAAiB,GAAG,SAAS,KAAK,SAAS,IAAI,MAAM,EAAE,QAAQ,KAAK,IAAI,CAAC;YAC/E,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,EAAE,WAAW,CAAC;YACjH,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe,EAAE,aAAa,CAAC;YACrH,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;YAC5D,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,QAAQ,EAAwB,CAAC;YACxE,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3E,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;YAC9E,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3E,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;YAC9E,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;YAC7B,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;YAC7B,MAAM,gBAAgB,GAAG,OAAO,MAAM,CAAC,cAAc,KAAK,QAAQ,IAAI,MAAM,CAAC,cAAc,KAAK,IAAI;gBAClG,CAAC,CAAC,MAAM,CAAC,cAAqF;gBAC9F,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,aAAa,GAAG,OAAO,gBAAgB,EAAE,oBAAoB,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7H,MAAM,cAAc,GAAG,OAAO,gBAAgB,EAAE,qBAAqB,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;YAChI,MAAM,OAAO,GAAG,aAAa,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;YAClF,MAAM,SAAS,GAAG,eAAe,IAAI,OAAO,CAAC;YAC7C,MAAM,SAAS,GAAG,MAAM,KAAK,IAAI;gBAC/B,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAChD,CAAC,CAAC,QAAQ,IAAI,OAAO,gBAAgB,EAAE,oBAAoB,KAAK,QAAQ;oBACtE,CAAC,CAAC,OAAO,CAAC,KAAK,GAAG,gBAAgB,CAAC,oBAAoB;oBACvD,CAAC,CAAC,CAAC,CAAC;YACR,MAAM,SAAS,GAAG,MAAM,KAAK,IAAI;gBAC/B,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAClD,CAAC,CAAC,QAAQ,IAAI,OAAO,gBAAgB,EAAE,qBAAqB,KAAK,QAAQ;oBACvE,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,gBAAgB,CAAC,qBAAqB;oBACzD,CAAC,CAAC,CAAC,CAAC;YACR,MAAM,eAAe,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YACnE,MAAM,eAAe,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YACnE,MAAM,aAAa,GAAG,QAAQ;gBAC5B,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,gBAAgB,KAAK,SAAS;oBACjD,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,SAAS;oBAC1B,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK;gBAChD,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;YACjB,MAAM,cAAc,GAAG,QAAQ;gBAC7B,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,gBAAgB,KAAK,SAAS;oBACjD,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS;oBAC3B,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM;gBAClD,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;YAClB,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;YACzE,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC;YAC7E,MAAM,IAAI,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,cAAc,CAAC;YAC3B,IAAI,CAAC,CAAC,GAAG,eAAe,GAAG,SAAS,CAAC,KAAK,GAAG,YAAY,CAAC;YAC1D,IAAI,CAAC,CAAC,GAAG,eAAe,GAAG,SAAS,CAAC,MAAM,GAAG,aAAa,CAAC;YAC5D,IAAI,CAAC,KAAK,GAAG,aAAa,GAAG,SAAS,CAAC,KAAK,GAAG,YAAY,CAAC;YAC5D,IAAI,CAAC,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC,MAAM,GAAG,aAAa,CAAC;YAChE,MAAM,MAAM,GAAG;gBACb,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE;oBACX,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,YAAY,GAAG,SAAS,CAAC,KAAK;oBAClD,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC,MAAM;iBACvD;gBACD,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;aAC1D,CAAC;YACF,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC9B,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QACF,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAChD,kBAAkB,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC;QAC3E,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC;QACzE,IAAI,OAAO,KAAK,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;QACpD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CACpC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CACnF,CAAC;YACF,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC;YACpD,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;gBACxE,IAAI,CAAC,eAAe,KAAK,EAAE,CAAC;gBAC5B,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,EAAE,CAAC;gBACnC,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC;oBAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,GAAG,WAAW,CAAC;;oBACxF,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC;gBAClD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;gBAC9F,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,IAAI,CAAC,eAAe,CAAC;YAClF,CAAC;QACH,CAAC;QACD,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,SAAS,CAAC;QACjE,IAAI,eAAe,KAAK,SAAS;YAAE,OAAO,eAAe,CAAC,cAAc,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,QAAiC,EAAE,MAAuB;IAC9E,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAgN,IAAI,EAAE,EAAE,CAAC;QACpP,4BAA4B,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAmE,IAAI,EAAE,EAAE,CAAC;QACxG,4BAA4B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED,uGAAuG;AACvG,SAAS,oBAAoB,CAC3B,KAAwD,EACxD,kBAAgE;IAEhE,MAAM,aAAa,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACxE,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAyD,CAAC;IAE5F,KAAK,MAAM,OAAO,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAU,EAAE,CAAC;QACrD,MAAM,SAAS,GAAG,IAAI,GAAG,EAA8B,CAAC;QACxD,MAAM,KAAK,GAAG,CAAC,MAAc,EAAkC,EAAE;YAC/D,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACrC,IAAI,MAAM,KAAK,SAAS;gBAAE,OAAO,MAAM,CAAC;YACxC,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,IAAI,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YACzC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACjF,MAAM,eAAe,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5E,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,EAAwB,CAAC;YAC1G,MAAM,aAAa,GAAG,kBAAkB,EAAE,CAAC,OAAO,CAAC,CAAC;YACpD,MAAM,UAAU,GAAG,aAAa,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,MAAM,EAAE,QAAQ,KAAK,IAAI,CAAC;gBACrG,CAAC,CAAC,aAAa;gBACf,CAAC,CAAC,eAAe,KAAK,SAAS;oBAC7B,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;oBAChD,CAAC,CAAC;wBACA,KAAK,EAAE,OAAO,eAAe,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK;wBACpH,MAAM,EAAE,OAAO,eAAe,CAAC,gBAAgB,KAAK,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM;qBACzH,CAAC;YACN,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3E,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3E,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;YAC9E,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;YAC9E,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACrE,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACrE,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;YACnC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;YACrC,MAAM,IAAI,GAAG;gBACX,GAAG,MAAM;gBACT,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,UAAU,CAAC,KAAK;gBACvD,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,UAAU,CAAC,MAAM;gBACxD,KAAK,EAAE,aAAa,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK;gBACvD,MAAM,EAAE,cAAc,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM;gBAC1D,eAAe,EAAE,aAAa;gBAC9B,gBAAgB,EAAE,cAAc;aACjC,CAAC;YACF,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QACF,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAChD,kBAAkB,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC/B,MAAM,aAAa,GAAG,CAAC,SAAyC,EAAkC,EAAE;YAClG,IAAI,SAAS,KAAK,SAAS;gBAAE,OAAO,SAAS,CAAC;YAC9C,MAAM,IAAI,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,eAAe,CAAC;YAC5B,OAAO,IAAI,CAAC,gBAAgB,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,aAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAG,aAAa,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7E,IAAI,OAAO,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS;YAAE,SAAS;QAC5D,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;QACzB,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC;QACtD,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;YAClC,OAAO,eAAe,CAAC,SAAS,CAAC;YACjC,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS;gBAAE,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC;QAC3H,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACzH,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,eAAe,KAAK,EAAE,CAAC;YAC5B,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,EAAE,CAAC;YACnC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,GAAG,WAAW,CAAC;QACtD,CAAC;aAAM,IAAI,IAAI,CAAC,eAAe,EAAE,MAAM,KAAK,SAAS,EAAE,CAAC;YACtD,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC;YAC7C,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;QAChG,CAAC;QACD,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,eAAe,CAAC;IACxH,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,QAAiC;IACxD,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAA+I,IAAI,EAAE,EAAE,CAAC;QACnL,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC/D,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAmE,IAAI,EAAE,EAAE,CAAC;QACxG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,gGAAgG;AAChG,SAAS,eAAe,CAAC,QAAiC;IACxD,MAAM,KAAK,GAAG,CAAC,IAA6B,EAAQ,EAAE;QACpD,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,SAAS;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACtF,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;YAAE,KAAK,MAAM,SAAS,IAAI,UAAU;gBAAE,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI;oBAAE,KAAK,CAAC,SAAoC,CAAC,CAAC;IAC1K,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAiC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAkC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/H,KAAK,MAAM,KAAK,IAAI,MAAM;QAAE,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE;YAAE,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;gBAAE,KAAK,CAAC,IAA+B,CAAC,CAAC;AAC1J,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,SAAkC,IAAS,CAAC;AAErE;;;;GAIG;AACH,SAAS,eAAe,CAAC,QAAiC;IACxD,IAAI,OAAO,QAAQ,CAAC,YAAY,KAAK,QAAQ,IAAI,QAAQ,CAAC,YAAY,KAAK,IAAI;QAAE,QAAQ,CAAC,YAAY,GAAG,yBAAyB,EAAE,CAAC;AACvI,CAAC;AAED,iGAAiG;AACjG,SAAS,eAAe,CAAC,SAAkC,IAAS,CAAC;AAErE;;;;;;;;GAQG;AACH,SAAS,eAAe,CAAC,QAAiC;IACxD,MAAM,MAAM,GAAG,CAAC,MAA+B,EAAQ,EAAE;QACvD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;YAAE,OAAO;QAC9C,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC;QACnC,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,IAA6B,EAAQ,EAAE;QACpD,MAAM,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC;QACzC,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;YAAE,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAC/D,MAAM,KAAK,GAAI,QAAgC,CAAC,KAAK,CAAC;gBACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;oBAAE,MAAM,CAAC,KAAgC,CAAC,CAAC;YAC5F,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;YAAE,KAAK,MAAM,SAAS,IAAI,UAAU;gBAAE,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI;oBAAE,KAAK,CAAC,SAAoC,CAAC,CAAC;IAC1K,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAiC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAkC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/H,KAAK,MAAM,KAAK,IAAI,MAAM;QAAE,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE;YAAE,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;gBAAE,KAAK,CAAC,IAA+B,CAAC,CAAC;AAC1J,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CAAC,SAAkC,IAAS,CAAC;AAErE,iIAAiI;AACjI,SAAS,eAAe,CAAC,SAAkC,IAAS,CAAC;AAErE,8HAA8H;AAC9H,SAAS,eAAe,CAAC,SAAkC,IAAS,CAAC;AAErE,sHAAsH;AACtH,SAAS,eAAe,CAAC,SAAkC,IAAS,CAAC;AAErE,yJAAyJ;AACzJ,SAAS,eAAe,CAAC,SAAkC,IAAS,CAAC;AAErE,0GAA0G;AAC1G,SAAS,eAAe,CAAC,SAAkC,IAAS,CAAC;AAErE,uFAAuF;AACvF,SAAS,eAAe,CAAC,SAAkC,IAAS,CAAC;AAErE,iGAAiG;AACjG,SAAS,eAAe,CAAC,SAAkC,IAAS,CAAC;AAErE,SAAS,8BAA8B,CAAC,QAAiC;IACvE,MAAM,iBAAiB,GAAG,CAAC,MAA+B,EAAQ,EAAE;QAClE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;YAAE,OAAO;QAC9C,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;YAC9D,MAAM,SAAS,GAAG,KAAgC,CAAC;YACnD,IAAI,OAAO,SAAS,CAAC,QAAQ,KAAK,QAAQ;gBAAE,OAAO,KAAK,CAAC;YACzD,MAAM,QAAQ,GAA4B,EAAE,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC;YAC3G,OAAO,QAAQ,CAAC,QAAQ,CAAC;YACzB,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,IAA6B,EAAQ,EAAE;QACpD,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC;YAAE,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzF,MAAM,KAAK,GAAI,QAAgC,CAAC,KAAK,CAAC;gBACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;oBAAE,iBAAiB,CAAC,KAAgC,CAAC,CAAC;YACvG,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC;YAAE,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,iBAAiB;gBAAE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;oBAAE,KAAK,CAAC,KAAgC,CAAC,CAAC;IAClL,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAiC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAkC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/H,KAAK,MAAM,KAAK,IAAI,MAAM;QAAE,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE;YAAE,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;gBAAE,KAAK,CAAC,IAA+B,CAAC,CAAC;AAC1J,CAAC;AAED,gGAAgG;AAChG,SAAS,eAAe,CAAC,QAAiC,IAAU,8BAA8B,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAE/G,SAAS,yBAAyB,CAAC,QAAiC;IAClE,MAAM,KAAK,GAAG,CAAC,IAA6B,EAAQ,EAAE;QACpD,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;YAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;QACrF,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;YAAE,KAAK,MAAM,SAAS,IAAI,UAAU;gBAAE,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,KAAK,IAAI;oBAAE,KAAK,CAAC,SAAoC,CAAC,CAAC;IAC1K,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAiC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAkC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/H,KAAK,MAAM,KAAK,IAAI,MAAM;QAAE,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,EAAE;YAAE,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;gBAAE,KAAK,CAAC,IAA+B,CAAC,CAAC;AAC1J,CAAC;AAED,mHAAmH;AACnH,SAAS,eAAe,CAAC,QAAiC,IAAU,yBAAyB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAE1G;;;;GAIG;AACH,SAAS,eAAe,CAAC,QAAiC;IACxD,8BAA8B,CAAC,QAAQ,CAAC,CAAC;IACzC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED,kGAAkG;AAClG,SAAS,eAAe,CAAC,SAAkC,IAAS,CAAC;AAErE,MAAM,UAAU,sBAAsB,CAAC,KAAc;IAAqB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,eAAe,CAAC;QAAE,MAAM,IAAI,6BAA6B,CAAC,4CAA4C,CAAC,CAAC;IAAC,MAAM,OAAO,GAAI,KAAqC,CAAC,aAAa,CAAC;IAAC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,sBAAsB;QAAE,MAAM,IAAI,6BAA6B,CAAC,8CAA8C,OAAO,wCAAwC,sBAAsB,0DAA0D,CAAC,CAAC;IAAC,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC;QAAE,MAAM,IAAI,6BAA6B,CAAC,8BAA8B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,MAAM,QAAQ,GAAG,eAAe,CAAC,KAAK,CAA4B,CAAC;IAAC,IAAI,OAAO,IAAI,CAAC;QAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IAAC,IAAI,OAAO,IAAI,CAAC;QAAE,QAAQ,CAAC,OAAO,GAAG,EAAE,CAAC;IAAC,IAAI,OAAO,IAAI,CAAC;QAAE,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAgD,IAAI,EAAE,EAAE,CAAC;YAAC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YAAC,IAAI,MAAM,EAAE,kBAAkB,KAAK,SAAS;gBAAE,MAAM,CAAC,kBAAkB,GAAG,eAAe,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAAC,CAAC;IAAC,IAAI,OAAO,IAAI,CAAC;QAAE,YAAY,CAAC,QAAQ,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAAC,IAAI,OAAO,IAAI,EAAE;QAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAAC,IAAI,OAAO,IAAI,EAAE;QAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAAC,IAAI,OAAO,IAAI,EAAE;QAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAAC,IAAI,OAAO,IAAI,EAAE;QAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAAC,IAAI,OAAO,IAAI,EAAE;QAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAAC,IAAI,OAAO,IAAI,EAAE;QAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAAC,IAAI,OAAO,IAAI,EAAE;QAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAAC,IAAI,OAAO,IAAI,EAAE;QAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAAC,IAAI,OAAO,IAAI,EAAE;QAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAAC,IAAI,OAAO,IAAI,EAAE;QAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAAC,IAAI,OAAO,IAAI,EAAE;QAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAAC,IAAI,OAAO,IAAI,EAAE;QAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAAC,IAAI,OAAO,IAAI,EAAE;QAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAAC,IAAI,OAAO,IAAI,EAAE;QAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAAC,IAAI,OAAO,IAAI,EAAE;QAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAAC,IAAI,OAAO,IAAI,EAAE;QAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAAC,IAAI,OAAO,IAAI,EAAE;QAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAAC,IAAI,OAAO,IAAI,EAAE;QAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAChkE,uFAAuF;IACvF,2FAA2F;IAC3F,yFAAyF;IACzF,gGAAgG;IAChG,8FAA8F;IAC9F,8FAA8F;IAC9F,8FAA8F;IAC9F,0FAA0F;IAC1F,6FAA6F;IAC7F,mGAAmG;IACnG,kGAAkG;IAClG,kFAAkF;IAClF,8FAA8F;IAC9F,gFAAgF;IAChF,4FAA4F;IAC5F,2FAA2F;IAC3F,yGAAyG;IACzG,QAAQ,CAAC,aAAa,GAAG,sBAAsB,CAAC;IAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAAC,OAAO,QAAQ,CAAC;AAAC,CAAC;AACtG,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC7D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,gBAAgB,CAAE,KAAiC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrL,OAAO,KAAK,CAAC;AACf,CAAC;AACD,MAAM,UAAU,wBAAwB,CAAC,QAAyB,IAAY,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAE1K,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC","sourcesContent":["import { Type, type Static, type TSchema } from \"@sinclair/typebox\";\nimport Ajv from \"ajv\";\nimport addFormats from \"ajv-formats\";\nimport type { ErrorObject } from \"ajv\";\nimport { applyPrefabNodePatch, materializePrefabInstance, PREFAB_NODE_PATH_SEPARATOR, resolveOwnerNodeGraph, resolvePrefabInstanceBaseNodes } from \"./prefabs.js\";\nimport { collectBindingKeys, collectBindingKeyScopes } from \"./bindingKeys.js\";\nimport { collectLocalizationIssues, createDefaultLocalization, LocalizationSchema } from \"./localization.js\";\n\nexport { collectBindingKeys, collectBindingKeyScopes, OWNER_BINDING_KEY_SCOPE } from \"./bindingKeys.js\";\nexport { rewriteNodeReferences, rewritePrefabInstanceReferencePatches, type NodeReferenceRewriter } from \"./nodeReferences.js\";\nexport { clearNodeAssetReferences } from \"./assetReferences.js\";\n\nexport const CURRENT_SCHEMA_VERSION = 40 as const;\nconst Id = Type.String({ format: \"uuid\" });\nconst Name = Type.String({ minLength: 1 });\n/**\n * Ссылка на узел внутри инстанса пресета: собственный id узла либо путь по вложенным пресетам\n * (`idA::prefab-node::idB`). Обычная нода сцены всегда использует первую форму; вторая появляется\n * только у `parentId` локально добавленного узла и у `nodeId` property override. Разрешимость\n * адреса проверяет семантическая валидация, структурная — только его форму.\n */\nconst NodeAddress = Type.Union([Id, Type.String({ pattern: `^.+${PREFAB_NODE_PATH_SEPARATOR}.+$` })]);\nexport const LayoutProfileIdSchema = Type.Union([Type.Literal(\"desktop\"), Type.Literal(\"mobile\")]);\nexport type LayoutProfileId = Static<typeof LayoutProfileIdSchema>;\n// Unity RectTransform semantics in logical Canvas units: x/y are anchoredPosition and width/height\n// are sizeDelta. A point axis needs a positive sizeDelta; a stretched axis may use negative insets.\nconst Transform = Type.Object({ x: Type.Number(), y: Type.Number(), width: Type.Number(), height: Type.Number(), scaleX: Type.Number(), scaleY: Type.Number(), rotation: Type.Number(), pivotX: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })), pivotY: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })), anchorMinX: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })), anchorMinY: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })), anchorMaxX: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })), anchorMaxY: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })) });\nconst Alignment = Type.Union([Type.Literal(\"upper-left\"), Type.Literal(\"upper-center\"), Type.Literal(\"upper-right\"), Type.Literal(\"middle-left\"), Type.Literal(\"middle-center\"), Type.Literal(\"middle-right\"), Type.Literal(\"lower-left\"), Type.Literal(\"lower-center\"), Type.Literal(\"lower-right\")]);\nexport type LayoutAlignment = Static<typeof Alignment>;\nconst Padding = Type.Object({ left: Type.Number({ minimum: 0 }), right: Type.Number({ minimum: 0 }), top: Type.Number({ minimum: 0 }), bottom: Type.Number({ minimum: 0 }) });\nexport type LayoutPadding = Static<typeof Padding>;\nconst LayoutItem = Type.Object({ flexGrow: Type.Number({ minimum: 0 }), flexShrink: Type.Number({ minimum: 0 }), flexBasis: Type.Optional(Type.Number({ exclusiveMinimum: 0 })), alignSelf: Type.Optional(Type.Union([Type.Literal(\"auto\"), Type.Literal(\"flex-start\"), Type.Literal(\"center\"), Type.Literal(\"flex-end\"), Type.Literal(\"stretch\")])) });\nexport type LayoutItemDefinition = Static<typeof LayoutItem>;\nconst LinearLayoutSettings = Type.Object({ padding: Padding, spacing: Type.Number({ minimum: 0 }), childAlignment: Alignment, reverseOrder: Type.Boolean(), controlChildWidth: Type.Boolean(), controlChildHeight: Type.Boolean(), forceExpandWidth: Type.Boolean(), forceExpandHeight: Type.Boolean() });\nexport type LinearLayoutSettings = Static<typeof LinearLayoutSettings>;\nconst GridLayoutSettings = Type.Object({ padding: Padding, spacingX: Type.Number({ minimum: 0 }), spacingY: Type.Number({ minimum: 0 }), cellWidth: Type.Number({ exclusiveMinimum: 0 }), cellHeight: Type.Number({ exclusiveMinimum: 0 }), startCorner: Type.Union([Type.Literal(\"upper-left\"), Type.Literal(\"upper-right\"), Type.Literal(\"lower-left\"), Type.Literal(\"lower-right\")]), startAxis: Type.Union([Type.Literal(\"horizontal\"), Type.Literal(\"vertical\")]), childAlignment: Alignment, constraint: Type.Union([Type.Literal(\"flexible\"), Type.Literal(\"fixed-column-count\"), Type.Literal(\"fixed-row-count\")]), constraintCount: Type.Optional(Type.Number({ exclusiveMinimum: 0 })) });\nexport type GridLayoutSettings = Static<typeof GridLayoutSettings>;\nconst ProfiledLayout = <T extends TSchema>(settings: T) => Type.Object({ base: settings, overrides: Type.Optional(Type.Partial(Type.Object({ desktop: Type.Partial(settings), mobile: Type.Partial(settings) }))) });\nconst Override = Type.Object({ visible: Type.Optional(Type.Boolean()), transform: Type.Optional(Type.Partial(Transform)) });\n// `editorOnly` and `locked` are authoring metadata. `locked` protects the node and its descendants\n// from editor mutations but deliberately has no runtime rendering semantics.\n// `bindingKey` — публичный семантический ключ ноды для игрового кода: он не меняется при rename,\n// перемещении и замене ассета. Ключ необязателен, а его уникальность проверяется в пределах\n// materialized-графа владельца (`collectBindingKeys`), поэтому нода внутри одного prefab-инстанса\n// получает собственный ключ, не задевая другой инстанс того же пресета.\nconst NodeBase = Type.Object({ id: Id, name: Name, parentId: Type.Union([NodeAddress, Type.Null()]), children: Type.Array(Id), visible: Type.Boolean(), editorOnly: Type.Optional(Type.Boolean()), locked: Type.Optional(Type.Boolean()), transform: Transform, layoutOverrides: Type.Optional(Type.Partial(Type.Object({ desktop: Override, mobile: Override }))), layoutItem: Type.Optional(LayoutItem), bindingKey: Type.Optional(Type.String()) });\nconst Container = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"container\") })]);\n// A mask clips its complete child subtree to its resolved layout rectangle. The rectangular shape\n// deliberately has no serialized settings: RectTransform is the single source of truth for it.\nconst Mask = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"mask\") })]);\n// Один множитель прозрачности на всё поддерево — тот же контракт, что Unity `CanvasGroup.alpha`:\n// значение умножается в каждого потомка отдельно (PixiJS `worldAlpha`), а не сплющивает группу в\n// offscreen-текстуру. Перекрывающиеся дети поэтому просвечивают друг сквозь друга на промежуточных\n// значениях — как и в Unity. Настоящий Photoshop-овский group opacity потребовал бы `AlphaFilter` с\n// render pass на кадр и здесь сознательно не используется: узел существует ради дешёвых fade-анимаций.\n// `opacity` — авторский дефолт и стартовое значение; текущее значение во время игры транзиентно и\n// задаётся односторонне через `setOpacityGroupViewOpacity`, как текущая стадия `staged-button`.\nconst OpacityGroup = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"opacity-group\"), opacity: Type.Number({ minimum: 0, maximum: 1 }) })]);\nconst HorizontalLayout = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"horizontal-layout\"), backgroundAssetId: Type.Optional(Id), layoutGroup: ProfiledLayout(LinearLayoutSettings) })]);\nconst VerticalLayout = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"vertical-layout\"), backgroundAssetId: Type.Optional(Id), layoutGroup: ProfiledLayout(LinearLayoutSettings) })]);\nconst GridLayout = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"grid-layout\"), backgroundAssetId: Type.Optional(Id), layoutGroup: ProfiledLayout(GridLayoutSettings) })]);\n// assetId отсутствует — нода без источника: рантайм и редактор рисуют белый прямоугольник её размера.\n// `nineSlice` отсутствует — обычный Sprite, растянутый по transform (старое поведение, без миграции).\n// При наличии — рамки в пикселях источника (как @pixi/ui fillPadding), не сериализованные проценты:\n// нода `NineSliceSprite`, углы/края не искажаются при растяжении.\nconst ImageTint = Type.String({ pattern: \"^#[0-9A-Fa-f]{6}$\" });\nconst Image = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"image\"), assetId: Type.Optional(Id), opacity: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })), tint: Type.Optional(ImageTint), nineSlice: Type.Optional(Padding) })]);\nconst TextStroke = Type.Object({ color: Type.String({ pattern: \"^#[0-9A-Fa-f]{6}([0-9A-Fa-f]{2})?$\" }), width: Type.Number({ minimum: 0 }) });\n// Числовые начертания соответствуют CSS/PIXI `font-weight` напрямую (без адаптера): у каждого\n// значения должен быть загружен свой файл шрифта с тем же `family` (см. FontAsset.weight), иначе\n// в отсутствие соответствующего `FontFace` браузер молча использует единственное загруженное\n// начертание — визуально вес не поменяется, что бы тут ни было выбрано.\nexport const TextStyleDefinitionSchema = Type.Object({ fontAssetId: Type.Optional(Id), fontFamily: Type.String({ minLength: 1 }), fontSize: Type.Number({ exclusiveMinimum: 0 }), fontWeight: Type.Union([Type.Literal(\"300\"), Type.Literal(\"normal\"), Type.Literal(\"500\"), Type.Literal(\"600\"), Type.Literal(\"bold\"), Type.Literal(\"800\")]), fontStyle: Type.Union([Type.Literal(\"normal\"), Type.Literal(\"italic\")]), fill: Type.String({ pattern: \"^#[0-9A-Fa-f]{6}([0-9A-Fa-f]{2})?$\" }), align: Type.Union([Type.Literal(\"left\"), Type.Literal(\"center\"), Type.Literal(\"right\"), Type.Literal(\"justify\")]), verticalAlign: Type.Union([Type.Literal(\"top\"), Type.Literal(\"middle\"), Type.Literal(\"bottom\")]), wordWrap: Type.Boolean(), breakWords: Type.Boolean(), lineHeight: Type.Optional(Type.Number({ exclusiveMinimum: 0 })), letterSpacing: Type.Number(), stroke: Type.Optional(TextStroke) });\nexport type TextStyleDefinition = Static<typeof TextStyleDefinitionSchema>;\nconst TextStyleOverrides = Type.Partial(Type.Object({ desktop: Type.Partial(TextStyleDefinitionSchema), mobile: Type.Partial(TextStyleDefinitionSchema) }));\n// `textKey` — единственная ссылка локализации, и она живёт именно на `Text`, а не на `NodeBase`:\n// несовместимая нода структурно не может получить localization key. `text` остаётся обязательной\n// авторской строкой, ручным режимом и последним содержательным fallback.\n// `autoSize`/`minFontSize` mirror `bitmap-text` (ADR 0027): the resolved `style.fontSize` stays the\n// authored upper bound, and with `autoSize: true` the runtime shrinks down to `minFontSize` (default\n// 1) to keep the rendered text inside the resolved rectangle. Both live on the node itself, not inside\n// `style`/`textStyleOverrides`: shrinking is a runtime fit computed from the resolved box at render\n// time, not an authored per-orientation style choice, the same reasoning bitmap text's fields follow.\nexport const TextCaseSchema = Type.Union([Type.Literal(\"none\"), Type.Literal(\"uppercase\"), Type.Literal(\"lowercase\")]);\nexport type TextCase = Static<typeof TextCaseSchema>;\n// Display-only transform applied on top of the resolved string (authored text, translation, or live\n// preview) right before it reaches the renderer/measurer — never written back into `text`/catalog\n// entries, so switching the case later, or reading the source string back out, stays lossless.\n// Omitted/`\"none\"` keeps historical documents byte-for-byte unchanged without a migration.\nconst Text = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"text\"), text: Type.String(), textKey: Type.Optional(Type.String()), style: Type.Optional(TextStyleDefinitionSchema), textStyleOverrides: Type.Optional(TextStyleOverrides), autoSize: Type.Optional(Type.Boolean()), minFontSize: Type.Optional(Type.Number({ exclusiveMinimum: 0 })), textCase: Type.Optional(TextCaseSchema) })]);\n// Optional preserves existing documents; omitted animationSpeed is interpreted as 1 by every runtime.\n// `autoplay` is the serialized initial playback decision. Older documents are migrated to true,\n// preserving the runtime behavior they had before this field became explicit.\nconst SpineProfileSettings = Type.Object({\n // `null` explicitly removes an inherited base animation; an absent key inherits it.\n animation: Type.Union([Type.String({ minLength: 1 }), Type.Null()]),\n autoplay: Type.Boolean(),\n loop: Type.Boolean(),\n animationSpeed: Type.Number({ exclusiveMinimum: 0 }),\n});\nconst SpineOverrides = Type.Partial(Type.Object({ desktop: Type.Partial(SpineProfileSettings), mobile: Type.Partial(SpineProfileSettings) }));\n/** A presentation-time mount point: game code decides when the target follows its Spine part. */\nexport const SpineConnectorSchema = Type.Object({\n partType: Type.Union([Type.Literal(\"bone\"), Type.Literal(\"slot\")]),\n partName: Type.String({ minLength: 1 }),\n targetNodeId: NodeAddress,\n // Множитель проецируемой позиции части по осям (1 = следовать за костью ровно, 2 = вдвое дальше\n // от origin ноды Spine, отрицательное значение — зеркально). Отсутствует — `{ x: 1, y: 1 }`.\n // Profile-aware тем же sparse-mobile приёмом, что `spineOverrides` (ADR 0022): base редактируется\n // в Horizontal, `positionMultiplierOverrides.mobile` — в Vertical.\n positionMultiplier: Type.Optional(Type.Object({ x: Type.Number(), y: Type.Number() })),\n positionMultiplierOverrides: Type.Optional(Type.Object({ mobile: Type.Optional(Type.Object({ x: Type.Optional(Type.Number()), y: Type.Optional(Type.Number()) })) })),\n});\nexport type SpineConnector = Static<typeof SpineConnectorSchema>;\nexport function resolveSpineConnectorPositionMultiplier(connector: Pick<SpineConnector, \"positionMultiplier\" | \"positionMultiplierOverrides\">, profile: LayoutProfileId): { x: number; y: number } {\n const base = connector.positionMultiplier ?? { x: 1, y: 1 };\n const override = profile === \"desktop\" ? undefined : connector.positionMultiplierOverrides?.mobile;\n return { x: override?.x ?? base.x, y: override?.y ?? base.y };\n}\nconst Spine = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"spine\"), assetId: Id, animation: Type.Optional(Type.String({ minLength: 1 })), autoplay: Type.Optional(Type.Boolean()), loop: Type.Optional(Type.Boolean()), animationSpeed: Type.Optional(Type.Number({ exclusiveMinimum: 0 })), spineOverrides: Type.Optional(SpineOverrides), connectors: Type.Optional(Type.Array(SpineConnectorSchema)) })]);\nconst BitmapTextAlign = Type.Union([Type.Literal(\"left\"), Type.Literal(\"center\"), Type.Literal(\"right\")]);\n// A bitmap font's glyphs come pre-rendered from its texture, so unlike `Text` there is no system\n// fallback: `assetId` is required (like Spine's), and the \"Bitmap Text\" add-node entry stays disabled\n// until at least one `bitmapFont` asset exists — a bitmap-text node with no asset has nothing to draw.\nconst BitmapTextStyle = Type.Object({\n assetId: Id,\n // The authored/preferred size. With `autoSize` on, this doubles as the upper bound the runtime\n // shrinks down from — never grows past it — the same \"Best Fit\" contract Unity's legacy Text uses.\n fontSize: Type.Number({ exclusiveMinimum: 0 }),\n fill: Type.String({ pattern: \"^#[0-9A-Fa-f]{6}([0-9A-Fa-f]{2})?$\" }),\n align: BitmapTextAlign,\n verticalAlign: Type.Union([Type.Literal(\"top\"), Type.Literal(\"middle\"), Type.Literal(\"bottom\")]),\n letterSpacing: Type.Number(),\n wordWrap: Type.Boolean(),\n});\nexport type BitmapTextStyle = Static<typeof BitmapTextStyle>;\nconst BitmapTextOverrides = Type.Partial(Type.Object({ desktop: Type.Partial(BitmapTextStyle), mobile: Type.Partial(BitmapTextStyle) }));\nconst BitmapText = Type.Composite([NodeBase, Type.Object({\n type: Type.Literal(\"bitmap-text\"),\n // Content and runtime fit are shared. The visual font presentation follows the same base/mobile\n // override convention as `Text.style`; text remains one localization/game-data value.\n text: Type.String(),\n ...BitmapTextStyle.properties,\n bitmapTextOverrides: Type.Optional(BitmapTextOverrides),\n // Omitted/false keeps the historical behavior: fixed `fontSize`, overflow simply clips/overruns.\n autoSize: Type.Optional(Type.Boolean()),\n // The floor `autoSize` won't shrink past; omitted defaults to 1 at the runtime/view layer, not here,\n // so old documents (no `autoSize`, no `minFontSize`) stay byte-for-byte meaningful without migration.\n minFontSize: Type.Optional(Type.Number({ exclusiveMinimum: 0 })),\n})]);\nexport const PrefabNodeOverrideSchema = Type.Object({\n /** Адрес переопределяемого узла внутри инстанса; для вложенных пресетов это путь. */\n nodeId: NodeAddress,\n /**\n * RFC-7396-like merge patch. Semantic validation rejects structural fields and validates the\n * effective node after applying it to the referenced prefab-definition node.\n */\n patch: Type.Record(Type.String(), Type.Unknown()),\n});\nexport type PrefabNodeOverride = Static<typeof PrefabNodeOverrideSchema>;\n/**\n * Состояния кнопки. Все четыре опциональны: `hover`/`pressed`/`disabled` при отсутствии используют\n * изображение `normal`, а `normal` без ассета рендерится невидимой (alpha 0), но по-прежнему\n * кликабельной областью — кнопку можно расставлять до того, как в проект загружена графика, и клик\n * уже работает.\n */\nexport const BUTTON_STATE_KEYS = [\"normal\", \"hover\", \"pressed\", \"disabled\"] as const;\nexport type ButtonStateKey = (typeof BUTTON_STATE_KEYS)[number];\n/** Discriminated transition: в v0 поддержан только `instant`, чтобы позже добавить bump/slide/fade без неявных полей. */\nconst ButtonTransition = Type.Object({ kind: Type.Literal(\"instant\") });\nconst ButtonTint = Type.String({ pattern: \"^#[0-9A-Fa-f]{6}$\" });\n/**\n * Appearance is owned by each visual button state. Missing tint/opacity deliberately mean the\n * neutral Pixi values (white and 1), so existing button artwork preserves its exact appearance.\n */\nconst ButtonStates = Type.Object({\n normalAssetId: Type.Optional(Id), hoverAssetId: Type.Optional(Id), pressedAssetId: Type.Optional(Id), disabledAssetId: Type.Optional(Id),\n normalTint: Type.Optional(ButtonTint), hoverTint: Type.Optional(ButtonTint), pressedTint: Type.Optional(ButtonTint), disabledTint: Type.Optional(ButtonTint),\n normalOpacity: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })), hoverOpacity: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })), pressedOpacity: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })), disabledOpacity: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })),\n});\nconst ButtonSounds = Type.Object({ pressAssetId: Type.Optional(Id), hoverAssetId: Type.Optional(Id) });\nconst ButtonTransitions = Type.Partial(Type.Object({ normal: ButtonTransition, hover: ButtonTransition, pressed: ButtonTransition, disabled: ButtonTransition }));\n// `enabled` — сериализованное начальное presentation-состояние; runtime setter документ не меняет.\n// `nineSlice` — общие для всех 4 состояний границы (как у Image): рамка кнопки обычно одной формы\n// независимо от того, какая картинка сейчас показана.\nconst Button = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"button\"), states: ButtonStates, sounds: Type.Optional(ButtonSounds), enabled: Type.Boolean(), transitions: Type.Optional(ButtonTransitions), nineSlice: Type.Optional(Padding) })]);\n// A staged button is a separate component, not a generalization of `button`: it reuses `ButtonStates`\n// (and `BUTTON_STATE_KEYS`) so a stage's own normal/hover/pressed/disabled fallback rule stays the\n// single existing definition, but owns its own node type, view class and Inspector section.\n// \"How many stages\" is the length of `stages`, not a parallel count field: a count without artwork is\n// meaningless and two independent fields would inevitably drift apart. `value` is an arbitrary author\n// string for game code; its uniqueness is not required — `id` uniqueness is, since it is what\n// `defaultStageId` and runtime addressing key off. `nineSlice`/`sounds` are shared across every stage,\n// like `nineSlice` is shared across a button's four states.\nconst StagedButtonStage = Type.Object({ id: Id, value: Type.String(), states: ButtonStates });\nconst StagedButton = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"staged-button\"), stages: Type.Array(StagedButtonStage, { minItems: 1 }), defaultStageId: Id, wrap: Type.Boolean(), enabled: Type.Boolean(), sounds: Type.Optional(ButtonSounds), nineSlice: Type.Optional(Padding) })]);\n// Базовые unchecked/checked обязательны — в отличие от кнопки, тут нет запасного normal. Hover-пара\n// опциональна и при отсутствии падает обратно на свою базовую картинку (как hover/pressed у кнопки).\nexport const CHECKBOX_STATE_KEYS = [\"unchecked\", \"checked\", \"uncheckedHover\", \"checkedHover\"] as const;\nexport type CheckboxStateKey = (typeof CHECKBOX_STATE_KEYS)[number];\nconst CheckboxStates = Type.Object({ uncheckedAssetId: Id, checkedAssetId: Id, uncheckedHoverAssetId: Type.Optional(Id), checkedHoverAssetId: Type.Optional(Id) });\nconst CheckboxSounds = Type.Object({ checkAssetId: Type.Optional(Id), uncheckAssetId: Type.Optional(Id) });\n// `group` — необязательный radio-scope: при клике рантайм снимает `checked` у остальных чекбоксов\n// с тем же `parentId` и тем же `group` (см. `wireCheckboxGroups` в runtime-pixi). Без `group` узел\n// ведёт себя как независимый toggle. `defaultChecked` — сериализованное начальное состояние, как\n// `enabled` у кнопки: рантайм-переключение документ не меняет.\nconst Checkbox = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"checkbox\"), states: CheckboxStates, sounds: Type.Optional(CheckboxSounds), enabled: Type.Boolean(), defaultChecked: Type.Boolean(), group: Type.Optional(Type.String({ minLength: 1 })) })]);\n// Прямые children — scroll items; их позицию владеет `@pixi/ui` List, поэтому per-profile overrides\n// настроек не нужны (как у text style) — только собственные transform/visibility остаются profile-aware.\nconst ScrollViewDirection = Type.Union([Type.Literal(\"vertical\"), Type.Literal(\"horizontal\"), Type.Literal(\"both\")]);\nexport type ScrollViewDirection = Static<typeof ScrollViewDirection>;\nconst ScrollViewSettings = Type.Object({\n direction: ScrollViewDirection,\n padding: Padding,\n itemSpacing: Type.Number({ minimum: 0 }),\n backgroundColor: Type.Optional(Type.String({ pattern: \"^#[0-9A-Fa-f]{6}([0-9A-Fa-f]{2})?$\" })),\n cornerRadius: Type.Number({ minimum: 0 }),\n easingEnabled: Type.Boolean(),\n // Значим только при direction \"horizontal\"; для остальных направлений безопасно игнорируется.\n shiftWheelHorizontal: Type.Optional(Type.Boolean()),\n});\nexport type ScrollViewSettings = Static<typeof ScrollViewSettings>;\nconst ScrollView = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"scroll-view\"), scrollView: ScrollViewSettings })]);\n// A page group shows exactly one direct child (\"page\") at a time and hides the rest; each page fills\n// the group's full resolved rectangle, the same \"children don't own their own position\" contract\n// layout groups and scroll-view already have (see `isPositionManagingContainer`). Page order is simply\n// hierarchy child order — no parallel count field, the same reasoning `staged-button.stages` follows.\n// `defaultPage` is the authored/initial visible page; switching pages at runtime is driven one-way by\n// game code (or the standalone `pagination` widget's `onPageChange`) through `setPageGroupPage`, never\n// by the group itself — it has no built-in swipe gesture or transition.\n// Optional carousel arrows: existing authored buttons wired the same way `pagination`'s\n// `prevButtonNodeId`/`nextButtonNodeId` are (ADR 0043) — the group renders nothing of its own, only\n// subscribes to a press. `pageUpButtonNodeId` advances (wraps past the last page to the first),\n// `pageDownButtonNodeId` goes back (wraps past the first page to the last) — unlike pagination's\n// prev/next, page-group never disables an arrow at the edge of the range, because there is no edge.\nconst PageGroup = Type.Composite([NodeBase, Type.Object({\n type: Type.Literal(\"page-group\"),\n defaultPage: Type.Integer({ minimum: 0 }),\n pageUpButtonNodeId: Type.Optional(NodeAddress),\n pageDownButtonNodeId: Type.Optional(NodeAddress),\n})]);\n// Контейнер фиксированной вместимости: держит список дочерних узлов и показывает только первые\n// `visibleCount` из них, остальные скрыты всегда. Это не страницы (`page-group` показывает ровно\n// одного ребёнка и растягивает его на себя) и не раскладка (`isPositionManagingContainer` его не\n// включает — дети сохраняют собственный transform): единственная ответственность узла — вместимость.\n// Она profile-aware, потому что в разной ориентации экрана на экран влезает разное число строк;\n// `visibleCountOverrides` — тот же sparse-mobile приём, что у `textStyleOverrides`/`spineOverrides`.\n// Чем наполнять видимые элементы и когда — решает игровой код через generic runtime API\n// (`getItemTableViewVisibleItems` и соседи); редактор не знает ни про какие данные.\nconst ItemTable = Type.Composite([NodeBase, Type.Object({\n type: Type.Literal(\"item-table\"),\n // Явный авторский список узлов, а не дети: элемент обычно уже лежит там, где его выравнивает\n // layout-группа, и переподчинение таблице отдало бы его позицию другому владельцу. Порядок\n // массива — порядок элементов, иерархия на него не влияет.\n // `NodeAddress`, а не `Id`: элементом может быть узел внутри инстанса пресета, а он адресуется\n // путём `instanceId::prefab-node::nodeId` — ровно как цель spine-коннектора.\n items: Type.Optional(Type.Array(NodeAddress)),\n visibleCount: Type.Integer({ minimum: 0 }),\n visibleCountOverrides: Type.Optional(Type.Object({ mobile: Type.Optional(Type.Integer({ minimum: 0 })) })),\n})]);\nconst InputAlign = Type.Union([Type.Literal(\"left\"), Type.Literal(\"center\"), Type.Literal(\"right\")]);\nexport type InputAlign = Static<typeof InputAlign>;\n// Reuses the shared `TextStyleDefinition` (TASK-029) so an input never grows an incompatible parallel\n// font/style field set; fields that don't apply to a single line (wordWrap, verticalAlign, ...) are\n// simply ignored by the runtime view, the same way a button ignores unused optional state assets.\nconst Input = Type.Composite([NodeBase, Type.Object({\n type: Type.Literal(\"input\"),\n backgroundAssetId: Type.Optional(Id),\n placeholder: Type.String(),\n defaultValue: Type.String(),\n // Positive integer: a character-count limit can't be fractional or non-positive.\n maxLength: Type.Optional(Type.Integer({ exclusiveMinimum: 0 })),\n secure: Type.Boolean(),\n align: InputAlign,\n padding: Padding,\n cleanOnFocus: Type.Boolean(),\n clipText: Type.Boolean(),\n textStyle: TextStyleDefinitionSchema,\n})]);\nconst Slider = Type.Composite([NodeBase, Type.Object({\n type: Type.Literal(\"slider\"),\n backgroundAssetId: Id,\n fillAssetId: Id,\n handleAssetId: Id,\n min: Type.Number(),\n max: Type.Number(),\n step: Type.Number(),\n defaultValue: Type.Number(),\n fillPadding: Padding,\n showValue: Type.Optional(Type.Boolean()),\n valueTextStyle: Type.Optional(TextStyleDefinitionSchema),\n})]);\nconst ProgressBar = Type.Composite([NodeBase, Type.Object({\n type: Type.Literal(\"progress-bar\"),\n backgroundAssetId: Id,\n fillAssetId: Id,\n defaultProgress: Type.Number(),\n fillPadding: Padding,\n})]);\nconst PaginationDirection = Type.Union([Type.Literal(\"horizontal\"), Type.Literal(\"vertical\")]);\nexport type PaginationDirection = Static<typeof PaginationDirection>;\nconst DotSize = Type.Object({ width: Type.Number({ exclusiveMinimum: 0 }), height: Type.Number({ exclusiveMinimum: 0 }) });\nconst PaginationItemStyle = Type.Union([Type.Literal(\"dots\"), Type.Literal(\"numbers\")]);\nexport type PaginationItemStyle = Static<typeof PaginationItemStyle>;\n// A standalone page indicator, deliberately not wired to any scroll-view: game code owns the actual\n// page transition and drives the widget one-way via the runtime API (`setPaginationViewPage`/\n// `setPaginationViewPageCount`), the same relationship a slider/progress-bar has to whatever value\n// they display. `pageCount`/`defaultPage` are authored defaults for editor preview and the initial\n// runtime state; the real page count is normally data-driven and set at runtime. `clickable` is\n// optional interactivity: a click highlights the dot immediately and emits `onPageChange`, mirroring\n// how a checkbox/slider updates its own visual state before notifying game code.\n// `style` picks between image dots (`activeAssetId`/`inactiveAssetId`, required only in this style)\n// and rendered page-number text (`numberStyle`/`numberActiveColor`, an optional highlight applied only\n// to the current page's digit): the two visual kinds are mutually exclusive, so each style's own fields\n// stay optional at the schema level and are required only semantically (validated in `hierarchy()`).\nconst Pagination = Type.Composite([NodeBase, Type.Object({\n type: Type.Literal(\"pagination\"),\n style: PaginationItemStyle,\n activeAssetId: Type.Optional(Id),\n inactiveAssetId: Type.Optional(Id),\n numberStyle: Type.Optional(TextStyleDefinitionSchema),\n numberActiveColor: Type.Optional(Type.String({ pattern: \"^#[0-9A-Fa-f]{6}([0-9A-Fa-f]{2})?$\" })),\n // Optional \"pill\" background behind the current page's digit only (a plain Sprite, or a\n // NineSliceSprite when `numberActiveNineSlice` is set) — sized to `dotSize`, the same field a\n // `dots`-style item already uses for its own box. Absent means no background, same as before this\n // field existed: just the `numberActiveColor` text highlight.\n numberActiveBackgroundAssetId: Type.Optional(Id),\n numberActiveNineSlice: Type.Optional(Padding),\n pageCount: Type.Integer({ minimum: 1 }),\n defaultPage: Type.Integer({ minimum: 0 }),\n direction: PaginationDirection,\n spacing: Type.Number({ minimum: 0 }),\n dotSize: DotSize,\n clickable: Type.Boolean(),\n // Existing button nodes wired as the widget's prev/next arrows: the arrows are ordinary authored\n // buttons placed wherever the layout needs them, and this is only the wiring that makes a press\n // step the current page and emit `onPageChange`. Referenced by id rather than owned, because the\n // widget deliberately renders nothing but its own page items — see ADR 0043.\n // `NodeAddress`, а не `Id`: стрелка часто лежит внутри инстанса пресета и адресуется путём.\n prevButtonNodeId: Type.Optional(NodeAddress),\n nextButtonNodeId: Type.Optional(NodeAddress),\n // How many indicator slots are rendered at once. Must be odd, because the active page always sits\n // in the middle slot: 4 pages with page 3 active render 2-3-4. A slot whose page falls outside\n // 0..pageCount-1 keeps its `dotSize` footprint and renders nothing, so the active page never moves\n // sideways as pages are added. Absent means \"one slot per page\" (the pre-v36 behavior).\n visiblePageCount: Type.Optional(Type.Integer({ minimum: 1 })),\n})]);\nconst Range = Type.Object({ min: Type.Number(), max: Type.Number() });\nconst PositiveRange = Type.Object({ min: Type.Number({ exclusiveMinimum: 0 }), max: Type.Number({ exclusiveMinimum: 0 }) });\nconst Color = Type.String({ pattern: \"^#[0-9A-Fa-f]{6}([0-9A-Fa-f]{2})?$\" });\nconst ParticleSource = Type.Union([\n Type.Object({ type: Type.Literal(\"single\"), assetId: Id }),\n Type.Object({ type: Type.Literal(\"random\"), assetIds: Type.Array(Id, { minItems: 1 }) }),\n Type.Object({ type: Type.Literal(\"sequence\"), assetIds: Type.Array(Id, { minItems: 1 }), fps: Type.Number({ exclusiveMinimum: 0 }), loop: Type.Boolean(), randomStartFrame: Type.Boolean() }),\n]);\nexport const EffectDefinitionSchema = Type.Union([Type.Object({\n id: Id, name: Name, type: Type.Literal(\"particles\"), maxParticles: Type.Integer({ minimum: 1, maximum: 10000 }), seed: Type.Integer({ minimum: 0, maximum: 4294967295 }),\n emission: Type.Object({ delay: Type.Number({ minimum: 0 }), duration: Type.Number({ exclusiveMinimum: 0 }), loop: Type.Boolean(), rate: Type.Number({ minimum: 0 }), bursts: Type.Array(Type.Object({ time: Type.Number({ minimum: 0 }), count: Type.Integer({ minimum: 1 }) })) }),\n particle: Type.Object({\n lifetime: PositiveRange,\n spawnShape: Type.Object({ type: Type.Union([Type.Literal(\"point\"), Type.Literal(\"rectangle\"), Type.Literal(\"circle\")]) }),\n movement: Type.Object({ speed: Range, directionDegrees: Type.Number({ minimum: 0, maximum: 360 }), spreadDegrees: Type.Number({ minimum: 0, maximum: 360 }), accelerationX: Type.Number(), accelerationY: Type.Number(), drag: Type.Number({ minimum: 0 }) }),\n visual: Type.Object({ source: ParticleSource, alpha: Type.Object({ start: Type.Number({ minimum: 0, maximum: 1 }), end: Type.Number({ minimum: 0, maximum: 1 }) }), scale: Type.Object({ start: PositiveRange, end: PositiveRange }), tint: Type.Object({ start: Color, end: Color }), rotation: Type.Object({ initialDegrees: Range, angularVelocityDegrees: Range }), blendMode: Type.Union([Type.Literal(\"normal\"), Type.Literal(\"add\"), Type.Literal(\"multiply\"), Type.Literal(\"screen\")]) }),\n }),\n})]);\nexport type EffectDefinition = Static<typeof EffectDefinitionSchema>;\nexport type ParticleEffectDefinition = Extract<EffectDefinition, { type: \"particles\" }>;\nexport function isParticleEffect(effect: EffectDefinition): effect is ParticleEffectDefinition { return effect.type === \"particles\"; }\nconst ParticleEmitter = Type.Composite([NodeBase, Type.Object({ type: Type.Literal(\"particle-emitter\"), effectId: Id, autoplay: Type.Boolean(), simulationSpace: Type.Union([Type.Literal(\"local\"), Type.Literal(\"world\")]) })]);\n/**\n * Локальное добавление внутри инстанса — обычный узел любого типа, включая другой инстанс пресета\n * (как added GameObject в Unity). Поэтому схема узла рекурсивна: `prefab-instance` содержит массив\n * таких же узлов.\n */\nconst UI_NODE_SCHEMA_ID = \"UINode\";\nexport const UINodeSchema = Type.Recursive((Self) => Type.Union([Container, Mask, OpacityGroup, ItemTable, HorizontalLayout, VerticalLayout, GridLayout, Image, Text, BitmapText, Spine, Button, StagedButton, Checkbox, Type.Composite([NodeBase, Type.Object({\n type: Type.Literal(\"prefab-instance\"),\n prefabId: Id,\n propertyOverrides: Type.Optional(Type.Array(PrefabNodeOverrideSchema)),\n locallyAddedNodes: Type.Optional(Type.Array(Self)),\n})]), ScrollView, PageGroup, Input, Slider, ProgressBar, ParticleEmitter, Pagination]), { $id: UI_NODE_SCHEMA_ID });\nexport type UINode = Static<typeof UINodeSchema>;\n/**\n * Ссылка на схему узла для владельцев (сцена, пресет). Встроить рекурсивную схему дважды нельзя:\n * её `$id` оказался бы в документе в двух местах, и Ajv не смог бы разрешить внутренние `$ref`.\n * Поэтому схема узла регистрируется в Ajv один раз, а владельцы ссылаются на неё.\n */\nconst UINodeRef = Type.Unsafe<UINode>({ $ref: UI_NODE_SCHEMA_ID });\n/** Исторический псевдоним: локальное добавление больше ничем не ограничено по сравнению с узлом сцены. */\nexport const LocallyAddedNodeSchema = UINodeSchema;\nexport type LocallyAddedNode = UINode;\nexport type LayoutGroupNode = Extract<UINode, { type: \"horizontal-layout\" | \"vertical-layout\" | \"grid-layout\" }>;\nexport function isLayoutGroup(node: UINode): node is LayoutGroupNode { return node.type === \"horizontal-layout\" || node.type === \"vertical-layout\" || node.type === \"grid-layout\"; }\nexport function resolveLayoutGroupSettings<T extends LayoutGroupNode[\"layoutGroup\"][\"base\"]>(node: LayoutGroupNode, profile: LayoutProfileId): T {\n return { ...node.layoutGroup.base, ...node.layoutGroup.overrides?.[profile] } as T;\n}\nexport type ScrollViewNode = Extract<UINode, { type: \"scroll-view\" }>;\nexport function isScrollView(node: UINode): node is ScrollViewNode { return node.type === \"scroll-view\"; }\nexport type PageGroupNode = Extract<UINode, { type: \"page-group\" }>;\nexport function isPageGroup(node: UINode): node is PageGroupNode { return node.type === \"page-group\"; }\nexport type OpacityGroupNode = Extract<UINode, { type: \"opacity-group\" }>;\nexport function isOpacityGroup(node: UINode): node is OpacityGroupNode { return node.type === \"opacity-group\"; }\n/** A direct child of this node does not own its own position: a layout group's Yoga solver, a scroll-view's `@pixi/ui` List, or a page group's single-visible-child switch does. */\nexport function isPositionManagingContainer(node: UINode): boolean { return isLayoutGroup(node) || isScrollView(node) || isPageGroup(node); }\nexport type TextNode = Extract<UINode, { type: \"text\" }>;\nexport function isTextNode(node: UINode): node is TextNode { return node.type === \"text\"; }\nexport type SpineNode = Extract<UINode, { type: \"spine\" }>;\nexport type BitmapTextNode = Extract<UINode, { type: \"bitmap-text\" }>;\nexport type ImageNode = Extract<UINode, { type: \"image\" }>;\nexport type InputNode = Extract<UINode, { type: \"input\" }>;\nexport type CheckboxNode = Extract<UINode, { type: \"checkbox\" }>;\nexport type SliderNode = Extract<UINode, { type: \"slider\" }>;\nexport type ProgressBarNode = Extract<UINode, { type: \"progress-bar\" }>;\nexport type PaginationNode = Extract<UINode, { type: \"pagination\" }>;\nexport type ItemTableNode = Extract<UINode, { type: \"item-table\" }>;\nexport function isItemTable(node: UINode): node is ItemTableNode { return node.type === \"item-table\"; }\n/**\n * Сколько первых детей таблица показывает в этом профиле. Единственная реализация для валидации,\n * runtime-вида и Inspector; `undefined` в override означает «наследовать base», а не ноль.\n */\nexport function resolveItemTableVisibleCount(node: Pick<ItemTableNode, \"visibleCount\" | \"visibleCountOverrides\">, profile: LayoutProfileId): number {\n const override = profile === \"desktop\" ? undefined : node.visibleCountOverrides?.mobile;\n return Math.max(0, Math.round(override ?? node.visibleCount));\n}\nexport type ParticleEmitterNode = Extract<UINode, { type: \"particle-emitter\" }>;\nexport type StagedButtonNode = Extract<UINode, { type: \"staged-button\" }>;\nexport function isParticleEmitterNode(node: UINode): node is ParticleEmitterNode { return node.type === \"particle-emitter\"; }\nconst Viewport = Type.Object({ width: Type.Number({ exclusiveMinimum: 0 }), height: Type.Number({ exclusiveMinimum: 0 }) });\nconst SceneAudio = Type.Object({ backgroundMusicAssetId: Type.Optional(Id), volume: Type.Optional(Type.Number({ minimum: 0, maximum: 1 })) });\nexport const SceneSchema = Type.Object({ id: Id, name: Name, rootNodeIds: Type.Array(Id), nodes: Type.Array(UINodeRef), layout: Type.Object({ referenceViewports: Type.Object({ desktop: Viewport, mobile: Viewport }), preferredViewports: Type.Object({ desktop: Viewport, mobile: Viewport }) }), audio: Type.Optional(SceneAudio) });\nexport type Scene = Static<typeof SceneSchema>;\nexport const AssetFileSchema = Type.Object({ name: Name, uri: Type.String({ minLength: 1 }), mediaType: Type.String({ minLength: 1 }) });\nexport type AssetFile = Static<typeof AssetFileSchema>;\nconst ImageAsset = Type.Object({ id: Id, name: Name, type: Type.Literal(\"image\"), source: Type.Object({ uri: Type.String({ minLength: 1 }), mediaType: Type.String({ minLength: 1 }), version: Type.Optional(Type.String({ minLength: 1 })) }) });\nexport const SpineReferenceFrameSchema = Type.Object({\n x: Type.Number(),\n y: Type.Number(),\n width: Type.Number({ exclusiveMinimum: 0 }),\n height: Type.Number({ exclusiveMinimum: 0 }),\n});\nexport type SpineReferenceFrame = Static<typeof SpineReferenceFrameSchema>;\nconst SpineAsset = Type.Object({ id: Id, name: Name, type: Type.Literal(\"spine\"), files: Type.Object({ skeleton: AssetFileSchema, atlas: AssetFileSchema, textures: Type.Array(AssetFileSchema, { minItems: 1 }) }), referenceFrame: Type.Optional(SpineReferenceFrameSchema) });\n// `weight`/`style` описывают начертание, которое реально содержит загруженный файл (см.\n// TextStyleDefinitionSchema.fontWeight выше): загрузка того же `family` под разными весами\n// регистрирует несколько `FontFace` и позволяет тексту переключаться между ними.\nconst FontAsset = Type.Object({ id: Id, name: Name, type: Type.Literal(\"font\"), family: Name, weight: Type.Union([Type.Literal(\"300\"), Type.Literal(\"normal\"), Type.Literal(\"500\"), Type.Literal(\"600\"), Type.Literal(\"bold\"), Type.Literal(\"800\")]), style: Type.Union([Type.Literal(\"normal\"), Type.Literal(\"italic\")]), source: Type.Object({ uri: Type.String({ minLength: 1 }), mediaType: Type.String({ minLength: 1 }), version: Type.Optional(Type.String({ minLength: 1 })) }) });\n// Имя фрейма из spritesheet JSON → стабильный id фрейма; nodes ссылаются на этот id как на обычный image assetId.\nconst AtlasAsset = Type.Object({ id: Id, name: Name, type: Type.Literal(\"atlas\"), files: Type.Object({ json: AssetFileSchema, texture: AssetFileSchema }), frames: Type.Record(Type.String({ minLength: 1 }), Id) });\nconst SoundAsset = Type.Object({ id: Id, name: Name, type: Type.Literal(\"sound\"), source: Type.Object({ uri: Type.String({ minLength: 1 }), mediaType: Type.String({ minLength: 1 }), version: Type.Optional(Type.String({ minLength: 1 })) }) });\n// A BMFont/XML export: `xml` carries the glyph layout (`<info>`/`<chars>`), `texture` the glyph sheet\n// it describes. Unlike a TTF/OTF `FontAsset`, one bitmap font is one fixed rendered appearance —\n// there is no separate weight/style to tag, so a bold or condensed variant is just another asset.\n// `frames` mirrors `AtlasAsset.frames`: glyph name (e.g. a digit) → stable id, cropped from the same\n// texture at import time from the parsed BMFont `<chars>` list. Nodes reference a frame id exactly\n// like a normal image assetId, so one glyph can be reused directly in an Image/Button/etc. `Optional`\n// (unlike atlas, which never predates this) because it was added after `bitmapFont` already shipped:\n// existing assets simply have none, same as an atlas would if all its frames were deleted.\nconst BitmapFontAsset = Type.Object({ id: Id, name: Name, type: Type.Literal(\"bitmapFont\"), files: Type.Object({ xml: AssetFileSchema, texture: AssetFileSchema }), frames: Type.Optional(Type.Record(Type.String({ minLength: 1 }), Id)) });\nexport const AssetSchema = Type.Union([ImageAsset, SpineAsset, FontAsset, AtlasAsset, SoundAsset, BitmapFontAsset]);\nexport type Asset = Static<typeof AssetSchema>;\nexport const PrefabDefinitionSchema = Type.Object({ id: Id, name: Name, rootNodeIds: Type.Array(Id), nodes: Type.Array(UINodeRef), exposedProperties: Type.Array(Type.Object({ name: Name, type: Type.Union([Type.Literal(\"string\"), Type.Literal(\"number\"), Type.Literal(\"boolean\"), Type.Literal(\"asset\"), Type.Literal(\"visibility\")]) })) });\nexport type PrefabDefinition = Static<typeof PrefabDefinitionSchema>;\nexport const ProjectDocumentSchema = Type.Object({ schemaVersion: Type.Literal(CURRENT_SCHEMA_VERSION), project: Type.Object({ id: Id, name: Name }), settings: Type.Object({ layoutProfileSelection: Type.Object({ mode: Type.Literal(\"aspect-ratio\"), mobileMaxAspectRatio: Type.Number({ exclusiveMinimum: 0 }) }) }), localization: LocalizationSchema, assets: Type.Array(AssetSchema), effects: Type.Array(EffectDefinitionSchema), prefabs: Type.Array(PrefabDefinitionSchema), scenes: Type.Array(SceneSchema) });\nexport type ProjectDocument = Static<typeof ProjectDocumentSchema>;\n\nexport type ValidationIssue = { code: string; path: string; message: string; severity: \"error\" | \"warning\" };\n/** `valid` означает отсутствие issues с severity `error`, а не пустой массив: warnings сохраняемы. */\nexport type ValidationResult = { valid: boolean; issues: ValidationIssue[] };\nexport class ProjectDocumentMigrationError extends Error { readonly code = \"UNSUPPORTED_SCHEMA_VERSION\"; constructor(message: string) { super(message); this.name = \"ProjectDocumentMigrationError\"; } }\nconst AjvConstructor = Ajv as unknown as typeof import(\"ajv\").default;\nconst addAjvFormats = addFormats as unknown as typeof import(\"ajv-formats\").default;\nconst createAjv = () => { const instance = new AjvConstructor({ allErrors: true, strict: false }); addAjvFormats(instance); return instance; };\n// Рекурсивная схема узла несёт собственный `$id`, поэтому её нельзя компилировать дважды в одном\n// экземпляре Ajv: документ уже зарегистрировал этот `$id` внутри себя.\nconst documentAjv = createAjv(); documentAjv.addSchema(UINodeSchema);\nconst structural = documentAjv.compile(ProjectDocumentSchema); const structuralNode = createAjv().compile(UINodeSchema);\nexport function createStableId(): string { return crypto.randomUUID(); }\nconst add = (issues: ValidationIssue[], code: string, path: string, message: string) => issues.push({ code, path, message, severity: \"error\" });\n// A missing asset reference is downgraded to a warning: deleting an asset must always be possible\n// (see AssetPanel's delete action), and after deletion any node still pointing at it necessarily\n// dangles. Blocking the whole document as invalid would make asset deletion silently no-op instead —\n// exactly the confusing \"it won't delete\" experience this severity exists to avoid. A type mismatch\n// (`INCOMPATIBLE_ASSET_REFERENCE`) stays an error: that is real corruption, not a dangling reference.\nconst addWarning = (issues: ValidationIssue[], code: string, path: string, message: string) => issues.push({ code, path, message, severity: \"warning\" });\n\n/** Общая проверка владельца: одинаковые issue получают и сцена, и определение пресета. */\nfunction checkBindingKeys(document: ProjectDocument, owner: Owner, path: string, issues: ValidationIssue[]): void {\n const graph = resolveOwnerNodeGraph(document, owner);\n // Пустой ключ не зависит от области: это дефект самой ноды, и сообщить о нём нужно ровно один раз.\n if (graph.nodes.some((node) => node.bindingKey !== undefined && node.bindingKey.trim() === \"\")) {\n add(issues, \"EMPTY_BINDING_KEY\", `${path}/bindingKey`, \"A binding key must not be empty after trimming.\");\n }\n const reported = new Set<string>();\n collectBindingKeyScopes(graph).forEach((nodes) => {\n collectBindingKeys(nodes).forEach((nodeIds, key) => {\n if (key === \"\" || nodeIds.length <= 1 || reported.has(key)) return;\n reported.add(key);\n add(issues, \"DUPLICATE_BINDING_KEY\", `${path}/bindingKey/${key}`, `Binding key '${key}' is used by ${nodeIds.length} nodes here.`);\n });\n });\n}\n\n/**\n * Node-to-node references (Spine connector targets, pagination items) resolve in the same materialized\n * owner graph as runtime node views — one graph build for every kind of reference, so a new reference\n * kind cannot end up resolving in a subtly different scope than the existing ones.\n */\nfunction checkNodeReferences(document: ProjectDocument, owner: Owner, path: string, issues: ValidationIssue[]): void {\n const graph = resolveOwnerNodeGraph(document, owner);\n const nodes = new Map(graph.nodes.map((node) => [node.id, node]));\n for (const node of graph.nodes) {\n if (node.type === \"item-table\") {\n for (const [index, itemId] of (node.items ?? []).entries()) {\n const itemPath = `${path}/itemTableItems/${node.id}/${index}`;\n if (!nodes.has(itemId)) add(issues, \"MISSING_ITEM_TABLE_ITEM\", itemPath, `Item table item '${itemId}' does not exist in this owner.`);\n else if (itemId === node.id) add(issues, \"INVALID_ITEM_TABLE_ITEM\", itemPath, \"An item table cannot list itself as an item.\");\n }\n continue;\n }\n if (node.type === \"pagination\") {\n for (const field of [\"prevButtonNodeId\", \"nextButtonNodeId\"] as const) {\n const buttonId = node[field];\n if (buttonId === undefined) continue;\n const arrowPath = `${path}/paginationArrows/${node.id}/${field}`;\n const target = nodes.get(buttonId);\n if (target === undefined) add(issues, \"MISSING_PAGINATION_ARROW\", arrowPath, `Pagination arrow '${buttonId}' does not exist in this owner.`);\n else if (target.type !== \"button\" && target.type !== \"staged-button\") add(issues, \"INVALID_PAGINATION_ARROW\", arrowPath, \"A pagination arrow must reference a button or staged-button node.\");\n }\n continue;\n }\n if (node.type === \"page-group\") {\n for (const field of [\"pageUpButtonNodeId\", \"pageDownButtonNodeId\"] as const) {\n const buttonId = node[field];\n if (buttonId === undefined) continue;\n const arrowPath = `${path}/pageGroupArrows/${node.id}/${field}`;\n const target = nodes.get(buttonId);\n if (target === undefined) add(issues, \"MISSING_PAGE_GROUP_ARROW\", arrowPath, `Page group arrow '${buttonId}' does not exist in this owner.`);\n else if (target.type !== \"button\" && target.type !== \"staged-button\") add(issues, \"INVALID_PAGE_GROUP_ARROW\", arrowPath, \"A page group arrow must reference a button or staged-button node.\");\n }\n continue;\n }\n if (node.type !== \"spine\") continue;\n const claimedSlots = new Set<string>();\n const claimedTargets = new Set<string>();\n for (const [index, connector] of (node.connectors ?? []).entries()) {\n const connectorPath = `${path}/spineConnectors/${node.id}/${index}`;\n if (connector.partType === \"slot\") {\n if (claimedSlots.has(connector.partName)) add(issues, \"DUPLICATE_SPINE_CONNECTOR_SLOT\", `${connectorPath}/partName`, `Spine slot '${connector.partName}' can host only one connector target.`);\n else claimedSlots.add(connector.partName);\n }\n const target = nodes.get(connector.targetNodeId);\n if (target === undefined) {\n add(issues, \"MISSING_SPINE_CONNECTOR_TARGET\", `${connectorPath}/targetNodeId`, `Spine connector target '${connector.targetNodeId}' does not exist in this owner.`);\n continue;\n }\n if (target.id === node.id) {\n add(issues, \"INVALID_SPINE_CONNECTOR_TARGET\", `${connectorPath}/targetNodeId`, \"A Spine node cannot connect itself to one of its bones.\");\n continue;\n }\n let ancestorId = node.parentId;\n const visited = new Set<string>();\n while (ancestorId !== null && !visited.has(ancestorId)) {\n if (ancestorId === target.id) {\n add(issues, \"INVALID_SPINE_CONNECTOR_TARGET\", `${connectorPath}/targetNodeId`, \"A Spine connector target cannot be an ancestor of the Spine node.\");\n break;\n }\n visited.add(ancestorId);\n ancestorId = nodes.get(ancestorId)?.parentId ?? null;\n }\n if (claimedTargets.has(target.id)) add(issues, \"DUPLICATE_SPINE_CONNECTOR_TARGET\", `${connectorPath}/targetNodeId`, `Node '${target.id}' is already used by another connector on this Spine node.`);\n else claimedTargets.add(target.id);\n }\n }\n}\n\ntype Owner = { rootNodeIds: string[]; nodes: UINode[] };\ntype TransformData = Static<typeof Transform>;\n/** A point-anchor sizeDelta is the whole rect and must be positive; stretch sizeDelta may be negative. */\nfunction checkResolvedSizes(node: UINode, nodePath: string, issues: ValidationIssue[]): void {\n for (const profile of [\"desktop\", \"mobile\"] as const) {\n const merged: TransformData = { ...node.transform, ...node.layoutOverrides?.[profile]?.transform };\n const minX = merged.anchorMinX ?? 0;\n const minY = merged.anchorMinY ?? 0;\n const maxX = merged.anchorMaxX ?? minX;\n const maxY = merged.anchorMaxY ?? minY;\n if (maxX === minX && merged.width <= 0) add(issues, \"NON_POSITIVE_SIZE\", `${nodePath}/transform/width`, `Width must be positive on a non-stretched axis in the '${profile}' profile.`);\n if (maxY === minY && merged.height <= 0) add(issues, \"NON_POSITIVE_SIZE\", `${nodePath}/transform/height`, `Height must be positive on a non-stretched axis in the '${profile}' profile.`);\n }\n}\nfunction particleAssetIds(effect: ParticleEffectDefinition): string[] { const source = effect.particle.visual.source; return source.type === \"single\" ? [source.assetId] : source.assetIds; }\nexport function collectEffectAssetIds(effect: EffectDefinition): string[] { return isParticleEffect(effect) ? particleAssetIds(effect) : []; }\nfunction hierarchy(owner: Owner, path: string, assets: Map<string, Asset>, prefabs: Set<string>, effects: Map<string, EffectDefinition>, issues: ValidationIssue[]): void {\n const nodes = new Map<string, UINode>();\n owner.nodes.forEach((node, i) => { if (nodes.has(node.id)) add(issues, \"DUPLICATE_ID\", `${path}/nodes/${i}/id`, `Duplicate node ID '${node.id}'.`); nodes.set(node.id, node); });\n const childOwners = new Map<string, string>();\n owner.rootNodeIds.forEach((id, i) => { const node = nodes.get(id); if (!node) add(issues, \"MISSING_NODE_REFERENCE\", `${path}/rootNodeIds/${i}`, `Root node '${id}' does not exist.`); else if (node.parentId !== null) add(issues, \"HIERARCHY_PARENT_MISMATCH\", `${path}/rootNodeIds/${i}`, \"A root node must have parentId null.\"); });\n owner.nodes.forEach((node, i) => {\n const nodePath = `${path}/nodes/${i}`;\n if (node.parentId !== null && !nodes.has(node.parentId)) add(issues, \"MISSING_PARENT_REFERENCE\", `${nodePath}/parentId`, `Parent '${node.parentId}' does not exist.`);\n node.children.forEach((childId, childIndex) => { const child = nodes.get(childId), childPath = `${nodePath}/children/${childIndex}`; if (!child) add(issues, \"MISSING_CHILD_REFERENCE\", childPath, `Child '${childId}' does not exist.`); else { const prior = childOwners.get(childId); if (prior && prior !== node.id) add(issues, \"MULTIPLE_PARENTS\", childPath, `Node '${childId}' belongs to more than one parent.`); childOwners.set(childId, node.id); if (child.parentId !== node.id) add(issues, \"HIERARCHY_PARENT_MISMATCH\", childPath, `Child '${childId}' does not point back to parent '${node.id}'.`); } });\n if (node.parentId !== null) { const parent = nodes.get(node.parentId); if (parent && !parent.children.includes(node.id)) add(issues, \"HIERARCHY_CHILD_MISMATCH\", `${nodePath}/parentId`, `Parent '${node.parentId}' does not list node '${node.id}'.`); }\n if ((node.type === \"image\" || node.type === \"spine\") && node.assetId !== undefined) { const asset = assets.get(node.assetId); if (!asset) addWarning(issues, \"MISSING_ASSET_REFERENCE\", `${nodePath}/assetId`, `Asset '${node.assetId}' does not exist.`); else if (asset.type !== node.type) add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", `${nodePath}/assetId`, `A ${node.type} node requires a ${node.type} asset.`); }\n if (isLayoutGroup(node) && node.backgroundAssetId !== undefined) { const asset = assets.get(node.backgroundAssetId); if (!asset) addWarning(issues, \"MISSING_ASSET_REFERENCE\", `${nodePath}/backgroundAssetId`, `Background asset '${node.backgroundAssetId}' does not exist.`); else if (asset.type !== \"image\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", `${nodePath}/backgroundAssetId`, \"A layout group background requires an image asset.\"); }\n // Путь ошибки сохраняется до конкретного state field, чтобы Inspector мог подсветить нужный picker.\n if (node.type === \"button\") BUTTON_STATE_KEYS.forEach((state) => { const field = `${state}AssetId` as const; const assetId = node.states[field]; if (assetId === undefined) return; const asset = assets.get(assetId), path = `${nodePath}/states/${field}`; if (!asset) addWarning(issues, \"MISSING_ASSET_REFERENCE\", path, `Asset '${assetId}' does not exist.`); else if (asset.type !== \"image\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", path, `A button '${state}' state requires an image asset.`); });\n if (node.type === \"button\") for (const field of [\"pressAssetId\", \"hoverAssetId\"] as const) { const assetId = node.sounds?.[field]; if (assetId === undefined) continue; const asset = assets.get(assetId), soundPath = `${nodePath}/sounds/${field}`; if (!asset) addWarning(issues, \"MISSING_ASSET_REFERENCE\", soundPath, `Asset '${assetId}' does not exist.`); else if (asset.type !== \"sound\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", soundPath, `A button ${field} requires a sound asset.`); }\n if (node.type === \"staged-button\") {\n const stageIds = new Set<string>();\n node.stages.forEach((stage, stageIndex) => {\n if (stageIds.has(stage.id)) add(issues, \"DUPLICATE_STAGE_ID\", `${nodePath}/stages/${stageIndex}/id`, `Duplicate stage ID '${stage.id}'.`);\n stageIds.add(stage.id);\n BUTTON_STATE_KEYS.forEach((state) => { const field = `${state}AssetId` as const; const assetId = stage.states[field]; if (assetId === undefined) return; const asset = assets.get(assetId), statePath = `${nodePath}/stages/${stageIndex}/states/${field}`; if (!asset) addWarning(issues, \"MISSING_ASSET_REFERENCE\", statePath, `Asset '${assetId}' does not exist.`); else if (asset.type !== \"image\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", statePath, `A staged button stage '${state}' state requires an image asset.`); });\n });\n if (!node.stages.some((stage) => stage.id === node.defaultStageId)) add(issues, \"MISSING_STAGE_REFERENCE\", `${nodePath}/defaultStageId`, `Default stage '${node.defaultStageId}' does not exist.`);\n for (const field of [\"pressAssetId\", \"hoverAssetId\"] as const) { const assetId = node.sounds?.[field]; if (assetId === undefined) continue; const asset = assets.get(assetId), soundPath = `${nodePath}/sounds/${field}`; if (!asset) addWarning(issues, \"MISSING_ASSET_REFERENCE\", soundPath, `Asset '${assetId}' does not exist.`); else if (asset.type !== \"sound\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", soundPath, `A staged button ${field} requires a sound asset.`); }\n }\n if (node.type === \"checkbox\") CHECKBOX_STATE_KEYS.forEach((state) => { const field = `${state}AssetId` as const; const assetId = node.states[field]; if (assetId === undefined) return; const asset = assets.get(assetId), path = `${nodePath}/states/${field}`; if (!asset) addWarning(issues, \"MISSING_ASSET_REFERENCE\", path, `Asset '${assetId}' does not exist.`); else if (asset.type !== \"image\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", path, `A checkbox '${state}' state requires an image asset.`); });\n if (node.type === \"checkbox\") for (const field of [\"checkAssetId\", \"uncheckAssetId\"] as const) { const assetId = node.sounds?.[field]; if (assetId === undefined) continue; const asset = assets.get(assetId), soundPath = `${nodePath}/sounds/${field}`; if (!asset) addWarning(issues, \"MISSING_ASSET_REFERENCE\", soundPath, `Asset '${assetId}' does not exist.`); else if (asset.type !== \"sound\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", soundPath, `A checkbox ${field} requires a sound asset.`); }\n if (node.type === \"bitmap-text\") {\n const fontReferences = [\n [node.assetId, `${nodePath}/assetId`],\n [node.bitmapTextOverrides?.desktop?.assetId, `${nodePath}/bitmapTextOverrides/desktop/assetId`],\n [node.bitmapTextOverrides?.mobile?.assetId, `${nodePath}/bitmapTextOverrides/mobile/assetId`],\n ] as const;\n for (const [assetId, assetPath] of fontReferences) {\n if (assetId === undefined) continue;\n const asset = assets.get(assetId);\n if (!asset) addWarning(issues, \"MISSING_ASSET_REFERENCE\", assetPath, `Asset '${assetId}' does not exist.`);\n else if (asset.type !== \"bitmapFont\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", assetPath, \"A bitmap text node requires a bitmap font asset.\");\n }\n }\n if (node.type === \"text\") {\n const fontReferences = [\n [node.style?.fontAssetId, `${nodePath}/style/fontAssetId`],\n [node.textStyleOverrides?.desktop?.fontAssetId, `${nodePath}/textStyleOverrides/desktop/fontAssetId`],\n [node.textStyleOverrides?.mobile?.fontAssetId, `${nodePath}/textStyleOverrides/mobile/fontAssetId`],\n ] as const;\n for (const [fontAssetId, fontPath] of fontReferences) {\n if (fontAssetId === undefined) continue;\n const asset = assets.get(fontAssetId);\n if (!asset) addWarning(issues, \"MISSING_ASSET_REFERENCE\", fontPath, `Asset '${fontAssetId}' does not exist.`);\n else if (asset.type !== \"font\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", fontPath, \"A text node fontAssetId requires a font asset.\");\n }\n }\n if (node.type === \"input\" && node.backgroundAssetId !== undefined) { const asset = assets.get(node.backgroundAssetId); if (!asset) addWarning(issues, \"MISSING_ASSET_REFERENCE\", `${nodePath}/backgroundAssetId`, `Background asset '${node.backgroundAssetId}' does not exist.`); else if (asset.type !== \"image\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", `${nodePath}/backgroundAssetId`, \"An input background requires an image asset.\"); }\n if (node.type === \"input\" && node.textStyle.fontAssetId !== undefined) { const asset = assets.get(node.textStyle.fontAssetId), path = `${nodePath}/textStyle/fontAssetId`; if (!asset) addWarning(issues, \"MISSING_ASSET_REFERENCE\", path, `Asset '${node.textStyle.fontAssetId}' does not exist.`); else if (asset.type !== \"font\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", path, \"An input node textStyle fontAssetId requires a font asset.\"); }\n if (node.type === \"slider\" || node.type === \"progress-bar\") {\n const imageReferences: [string, string][] = [[\"backgroundAssetId\", node.backgroundAssetId], [\"fillAssetId\", node.fillAssetId]];\n if (node.type === \"slider\") imageReferences.push([\"handleAssetId\", node.handleAssetId]);\n for (const [field, assetId] of imageReferences) {\n const asset = assets.get(assetId);\n const assetPath = `${nodePath}/${field}`;\n if (!asset) addWarning(issues, \"MISSING_ASSET_REFERENCE\", assetPath, `Asset '${assetId}' does not exist.`);\n else if (asset.type !== \"image\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", assetPath, `A ${node.type} ${field} requires an image asset.`);\n }\n }\n if (node.type === \"slider\") {\n if (!(node.min < node.max) || !(node.step > 0)) add(issues, \"INVALID_VALUE_RANGE\", nodePath, \"A slider requires min < max and step > 0.\");\n if (node.defaultValue < node.min || node.defaultValue > node.max) add(issues, \"VALUE_OUT_OF_RANGE\", `${nodePath}/defaultValue`, \"Slider defaultValue must be inside the inclusive min/max range.\");\n if (node.valueTextStyle?.fontAssetId !== undefined) { const asset = assets.get(node.valueTextStyle.fontAssetId), fontPath = `${nodePath}/valueTextStyle/fontAssetId`; if (!asset) addWarning(issues, \"MISSING_ASSET_REFERENCE\", fontPath, `Asset '${node.valueTextStyle.fontAssetId}' does not exist.`); else if (asset.type !== \"font\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", fontPath, \"A slider valueTextStyle fontAssetId requires a font asset.\"); }\n }\n if (node.type === \"progress-bar\" && (node.defaultProgress < 0 || node.defaultProgress > 100)) add(issues, \"VALUE_OUT_OF_RANGE\", `${nodePath}/defaultProgress`, \"Progress bar defaultProgress must be inside the inclusive 0..100 range.\");\n if (node.type === \"pagination\") {\n if (node.style === \"dots\") {\n for (const field of [\"activeAssetId\", \"inactiveAssetId\"] as const) {\n const assetId = node[field];\n const assetPath = `${nodePath}/${field}`;\n if (assetId === undefined) { add(issues, \"MISSING_PAGINATION_DOT_ASSET\", assetPath, `Pagination in 'dots' style requires ${field}.`); continue; }\n const asset = assets.get(assetId);\n if (!asset) addWarning(issues, \"MISSING_ASSET_REFERENCE\", assetPath, `Asset '${assetId}' does not exist.`);\n else if (asset.type !== \"image\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", assetPath, `A pagination ${field} requires an image asset.`);\n }\n } else {\n if (node.numberStyle?.fontAssetId !== undefined) {\n const asset = assets.get(node.numberStyle.fontAssetId);\n const fontPath = `${nodePath}/numberStyle/fontAssetId`;\n if (!asset) addWarning(issues, \"MISSING_ASSET_REFERENCE\", fontPath, `Asset '${node.numberStyle.fontAssetId}' does not exist.`);\n else if (asset.type !== \"font\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", fontPath, \"A pagination numberStyle fontAssetId requires a font asset.\");\n }\n if (node.numberActiveBackgroundAssetId !== undefined) {\n const asset = assets.get(node.numberActiveBackgroundAssetId);\n const bgPath = `${nodePath}/numberActiveBackgroundAssetId`;\n if (!asset) addWarning(issues, \"MISSING_ASSET_REFERENCE\", bgPath, `Asset '${node.numberActiveBackgroundAssetId}' does not exist.`);\n else if (asset.type !== \"image\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", bgPath, \"A pagination numberActiveBackgroundAssetId requires an image asset.\");\n }\n }\n if (node.defaultPage > node.pageCount - 1) add(issues, \"VALUE_OUT_OF_RANGE\", `${nodePath}/defaultPage`, \"Pagination defaultPage must be inside the inclusive 0..pageCount-1 range.\");\n // Odd only: the active page is always the middle slot, which an even slot count has no room for.\n if (node.visiblePageCount !== undefined && node.visiblePageCount % 2 === 0) add(issues, \"VALUE_OUT_OF_RANGE\", `${nodePath}/visiblePageCount`, \"Pagination visiblePageCount must be an odd number so the active page stays centered.\");\n }\n if (node.type === \"page-group\" && node.children.length > 0 && node.defaultPage > node.children.length - 1) add(issues, \"VALUE_OUT_OF_RANGE\", `${nodePath}/defaultPage`, \"Page group defaultPage must be inside the inclusive 0..children.length-1 range.\");\n if (node.type === \"prefab-instance\" && !prefabs.has(node.prefabId)) add(issues, \"MISSING_PREFAB_REFERENCE\", `${nodePath}/prefabId`, `Prefab '${node.prefabId}' does not exist.`);\n if (node.type === \"particle-emitter\") { const effect = effects.get(node.effectId); if (!effect) add(issues, \"MISSING_EFFECT_REFERENCE\", `${nodePath}/effectId`, `Effect '${node.effectId}' does not exist.`); else if (effect.type !== \"particles\") add(issues, \"INCOMPATIBLE_EFFECT_REFERENCE\", `${nodePath}/effectId`, \"Particle emitter requires a particle effect.\"); }\n if (node.type === \"grid-layout\" && node.layoutGroup.base.constraint !== \"flexible\" && node.layoutGroup.base.constraintCount === undefined) add(issues, \"MISSING_GRID_CONSTRAINT_COUNT\", `${nodePath}/layoutGroup/base/constraintCount`, \"A fixed grid constraint requires constraintCount.\");\n for (const profile of [\"desktop\", \"mobile\"] as const) {\n const grid = node.type === \"grid-layout\" ? { ...node.layoutGroup.base, ...node.layoutGroup.overrides?.[profile] } : undefined;\n if (grid !== undefined && grid.constraint !== \"flexible\" && grid.constraintCount === undefined) add(issues, \"MISSING_GRID_CONSTRAINT_COUNT\", `${nodePath}/layoutGroup/overrides/${profile}/constraintCount`, \"A fixed grid constraint requires constraintCount.\");\n }\n checkResolvedSizes(node, nodePath, issues);\n });\n const visiting = new Set<string>(), visited = new Set<string>(); const visit = (id: string): void => { if (visiting.has(id)) { add(issues, \"HIERARCHY_CYCLE\", path, `Hierarchy contains a cycle through '${id}'.`); return; } if (visited.has(id)) return; const node = nodes.get(id); if (!node) return; visiting.add(id); node.children.forEach(visit); visiting.delete(id); visited.add(id); }; nodes.forEach((_, id) => visit(id));\n}\nfunction semantic(document: ProjectDocument): ValidationIssue[] {\n const issues: ValidationIssue[] = [], ids = new Set<string>(), register = (id: string, path: string) => { if (ids.has(id)) add(issues, \"DUPLICATE_ID\", path, `Duplicate entity ID '${id}'.`); ids.add(id); };\n register(document.project.id, \"/project/id\"); const assets = new Map<string, Asset>(), prefabs = new Set<string>(), effects = new Map<string, EffectDefinition>();\n const fontMediaTypes = new Set([\"font/woff2\", \"font/woff\", \"font/ttf\", \"font/otf\", \"application/font-woff\", \"application/x-font-ttf\", \"application/x-font-opentype\"]);\n document.assets.forEach((asset, i) => { register(asset.id, `/assets/${i}/id`); assets.set(asset.id, asset); if (asset.type === \"font\" && !fontMediaTypes.has(asset.source.mediaType)) add(issues, \"INVALID_FONT_MEDIA_TYPE\", `/assets/${i}/source/mediaType`, `Unsupported font media type '${asset.source.mediaType}'.`); });\n // Каждый atlas-фрейм и bitmap-font glyph-фрейм ведёт себя как обычный image-ассет во всех местах, где\n // нода ссылается на assetId: виртуальная запись позволяет существующим\n // MISSING_ASSET_REFERENCE/INCOMPATIBLE_ASSET_REFERENCE проверкам работать без изменений в каждой ветке hierarchy().\n document.assets.forEach((asset) => {\n const frames = asset.type === \"atlas\" ? asset.frames : asset.type === \"bitmapFont\" ? asset.frames ?? {} : undefined;\n if (frames === undefined) return;\n for (const frameId of Object.values(frames)) { if (!assets.has(frameId)) assets.set(frameId, { id: frameId, name: frameId, type: \"image\", source: { uri: \"\", mediaType: \"image/png\" } }); }\n });\n document.effects.forEach((effect, i) => { register(effect.id, `/effects/${i}/id`); effects.set(effect.id, effect); if (!isParticleEffect(effect)) return; const p = `/effects/${i}`, e = effect.emission, v = effect.particle.visual; const ranges: [string, { min: number; max: number }][] = [[\"particle/lifetime\", effect.particle.lifetime], [\"particle/movement/speed\", effect.particle.movement.speed], [\"particle/visual/scale/start\", v.scale.start], [\"particle/visual/scale/end\", v.scale.end], [\"particle/visual/rotation/initialDegrees\", v.rotation.initialDegrees], [\"particle/visual/rotation/angularVelocityDegrees\", v.rotation.angularVelocityDegrees]]; ranges.forEach(([field, range]) => { if (range.min > range.max) add(issues, \"INVALID_PARTICLE_RANGE\", `${p}/${field}`, \"Particle range min must not exceed max.\"); }); if (e.rate === 0 && e.bursts.length === 0) add(issues, \"EMPTY_PARTICLE_EMISSION\", `${p}/emission`, \"Particle emission needs a rate or a burst.\"); e.bursts.forEach((burst, j) => { if (burst.time > e.duration) add(issues, \"PARTICLE_BURST_OUTSIDE_DURATION\", `${p}/emission/bursts/${j}/time`, \"Particle burst time must be inside emission duration.\"); }); const source = v.source; particleAssetIds(effect).forEach((id, j) => { const asset = assets.get(id), sourcePath = source.type === \"single\" ? `${p}/particle/visual/source/assetId` : `${p}/particle/visual/source/assetIds/${j}`; if (!asset) addWarning(issues, \"MISSING_ASSET_REFERENCE\", sourcePath, `Asset '${id}' does not exist.`); else if (asset.type !== \"image\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", sourcePath, \"Particle visual source requires an image asset or atlas frame.\"); }); });\n document.prefabs.forEach((prefab, i) => { register(prefab.id, `/prefabs/${i}/id`); prefabs.add(prefab.id); }); document.scenes.forEach((scene, i) => register(scene.id, `/scenes/${i}/id`));\n const prefabById = new Map(document.prefabs.map((prefab) => [prefab.id, prefab]));\n const validateInstance = (instance: Extract<UINode, { type: \"prefab-instance\" }>, path: string, checkHierarchy = true): void => {\n const prefab = prefabById.get(instance.prefabId);\n if (prefab === undefined) return;\n // База адресуется путём: у вложенных пресетов переопределяемый узел живёт не в `prefab.nodes`,\n // а глубже, поэтому цель override резолвится через тот же материализатор.\n const definitionNodes = resolvePrefabInstanceBaseNodes(document, instance);\n const overridden = new Set<string>();\n for (const [index, override] of (instance.propertyOverrides ?? []).entries()) {\n const overridePath = `${path}/propertyOverrides/${index}`;\n if (overridden.has(override.nodeId)) add(issues, \"DUPLICATE_PREFAB_NODE_OVERRIDE\", `${overridePath}/nodeId`, `Prefab node '${override.nodeId}' has more than one property override.`);\n overridden.add(override.nodeId);\n const definitionNode = definitionNodes.get(override.nodeId);\n if (definitionNode === undefined) {\n add(issues, \"MISSING_PREFAB_OVERRIDE_TARGET\", `${overridePath}/nodeId`, `Prefab node '${override.nodeId}' does not exist in definition '${prefab.id}'.`);\n continue;\n }\n for (const key of [\"id\", \"type\", \"parentId\", \"children\", \"editorOnly\", \"locked\", \"prefabId\", \"propertyOverrides\", \"locallyAddedNodes\"]) {\n if (Object.hasOwn(override.patch, key)) add(issues, \"STRUCTURAL_PREFAB_OVERRIDE\", `${overridePath}/patch/${key}`, `Prefab instances cannot override structural field '${key}'.`);\n }\n // База развёрнута, поэтому несёт instance-scoped id и связи. Патч их менять не может, а\n // структурная схема требует обычных uuid, поэтому идентичность подменяется на нейтральную.\n const effective = applyPrefabNodePatch({ ...definitionNode, id: instance.id, parentId: null, children: [] } as UINode, override.patch);\n if (!structuralNode(effective)) add(issues, \"INVALID_PREFAB_NODE_OVERRIDE\", `${overridePath}/patch`, \"The property override produces an invalid UI node.\");\n }\n // Локально добавленный инстанс сам владеет своей конфигурацией, поэтому проверяется рекурсивно.\n // Иерархию при этом сверяет только внешний инстанс: его материализация уже включает вложенные.\n for (const [index, localNode] of (instance.locallyAddedNodes ?? []).entries()) {\n const localPath = `${path}/locallyAddedNodes/${index}`;\n register(localNode.id, `${localPath}/id`);\n if (localNode.type === \"prefab-instance\") validateInstance(localNode, localPath, false);\n }\n if (!checkHierarchy) return;\n const materialized = materializePrefabInstance(document, instance);\n if (materialized !== undefined) hierarchy(materialized, `${path}/materialized`, assets, prefabs, effects, issues);\n };\n document.prefabs.forEach((prefab, i) => { prefab.nodes.forEach((node, j) => register(node.id, `/prefabs/${i}/nodes/${j}/id`)); hierarchy(prefab, `/prefabs/${i}`, assets, prefabs, effects, issues); });\n document.prefabs.forEach((prefab, i) => { prefab.nodes.forEach((node, j) => { if (node.type === \"prefab-instance\") validateInstance(node, `/prefabs/${i}/nodes/${j}`); }); checkBindingKeys(document, prefab, `/prefabs/${i}`, issues); checkNodeReferences(document, prefab, `/prefabs/${i}`, issues); });\n document.scenes.forEach((scene, i) => { scene.nodes.forEach((node, j) => register(node.id, `/scenes/${i}/nodes/${j}/id`)); hierarchy(scene, `/scenes/${i}`, assets, prefabs, effects, issues); scene.nodes.forEach((node, j) => { if (node.type === \"prefab-instance\") validateInstance(node, `/scenes/${i}/nodes/${j}`); }); const musicAssetId = scene.audio?.backgroundMusicAssetId; if (musicAssetId !== undefined) { const asset = assets.get(musicAssetId), musicPath = `/scenes/${i}/audio/backgroundMusicAssetId`; if (!asset) addWarning(issues, \"MISSING_ASSET_REFERENCE\", musicPath, `Asset '${musicAssetId}' does not exist.`); else if (asset.type !== \"sound\") add(issues, \"INCOMPATIBLE_ASSET_REFERENCE\", musicPath, \"Background music requires a sound asset.\"); } checkBindingKeys(document, scene, `/scenes/${i}`, issues); checkNodeReferences(document, scene, `/scenes/${i}`, issues); });\n // Каталог локализации проверяет единственный модуль: структурные ошибки делают документ невалидным,\n // authoring diagnostics приходят warnings и не мешают заполнять переводы постепенно.\n issues.push(...collectLocalizationIssues(document));\n return issues;\n}\nfunction collectNonFiniteNumbers(input: unknown, path: string, issues: ValidationIssue[]): void {\n if (typeof input === \"number\") {\n if (!Number.isFinite(input)) add(issues, \"NON_FINITE_NUMBER\", path, \"Numbers must be finite.\");\n return;\n }\n if (Array.isArray(input)) input.forEach((value, index) => collectNonFiniteNumbers(value, `${path}/${index}`, issues));\n else if (typeof input === \"object\" && input !== null) Object.entries(input).forEach(([key, value]) => collectNonFiniteNumbers(value, `${path}/${key}`, issues));\n}\nexport function validateProjectDocument(input: unknown): ValidationResult { if (!structural(input)) return { valid: false, issues: (structural.errors ?? []).map((error: ErrorObject) => ({ code: \"STRUCTURAL_SCHEMA\", path: error.instancePath || \"/\", message: error.message ?? \"Invalid document structure.\", severity: \"error\" })) }; const issues: ValidationIssue[] = []; collectNonFiniteNumbers(input, \"\", issues); issues.push(...semantic(input as ProjectDocument)); return { valid: !issues.some((issue) => issue.severity === \"error\"), issues }; }\nexport function assertProjectDocument(input: unknown): asserts input is ProjectDocument { const result = validateProjectDocument(input); if (!result.valid) throw new TypeError(`Invalid ProjectDocument: ${result.issues.filter((x) => x.severity === \"error\").map((x) => `${x.code} at ${x.path}`).join(\", \")}`); }\n/** v1 хранил точечный якорь anchorX/anchorY; v2 заменяет его парой anchorMin/anchorMax с тем же значением. */\nfunction migrateTransformV1(transform: Record<string, unknown>): void {\n for (const axis of [\"X\", \"Y\"] as const) {\n const value = transform[`anchor${axis}`];\n delete transform[`anchor${axis}`];\n if (typeof value !== \"number\") continue;\n transform[`anchorMin${axis}`] = value;\n transform[`anchorMax${axis}`] = value;\n }\n}\nfunction migrateV1ToV2(document: Record<string, unknown>): void {\n const owners = [...(document.scenes as { nodes: unknown[] }[] ?? []), ...(document.prefabs as { nodes: unknown[] }[] ?? [])];\n for (const owner of owners) {\n for (const node of owner.nodes as Record<string, unknown>[]) {\n if (typeof node.transform === \"object\" && node.transform !== null) migrateTransformV1(node.transform as Record<string, unknown>);\n const overrides = node.layoutOverrides as Record<string, { transform?: Record<string, unknown> }> | undefined;\n for (const profile of [\"desktop\", \"mobile\"]) {\n const transform = overrides?.[profile]?.transform;\n if (typeof transform === \"object\" && transform !== null) migrateTransformV1(transform);\n }\n }\n }\n}\n\ntype MigratingTransform = Record<string, unknown> & { x: number; y: number; width: number; height: number };\ntype MigratingNode = {\n id: string;\n parentId: string | null;\n children: string[];\n transform: MigratingTransform;\n layoutOverrides?: Record<string, { transform?: Record<string, unknown> }>;\n};\ntype MigratingSize = { width: number; height: number };\n\nfunction migrateOwnerToPreferredRects(\n owner: { rootNodeIds: string[]; nodes: MigratingNode[] },\n viewports?: { referenceViewports: Record<\"desktop\" | \"mobile\", MigratingSize>; preferredViewports: Record<\"desktop\" | \"mobile\", MigratingSize> },\n source: \"legacy\" | \"v9\" = \"legacy\",\n): void {\n const originalNodes = structuredClone(owner.nodes);\n const nodesById = new Map(originalNodes.map((node) => [node.id, node]));\n const convertedByProfile = new Map<\"desktop\" | \"mobile\", Map<string, { transform: MigratingTransform; currentSize: MigratingSize; preferredSize: MigratingSize }>>();\n\n for (const profile of [\"desktop\", \"mobile\"] as const) {\n const converted = new Map<string, { transform: MigratingTransform; currentSize: MigratingSize; preferredSize: MigratingSize }>();\n const visiting = new Set<string>();\n const visit = (nodeId: string): { transform: MigratingTransform; currentSize: MigratingSize; preferredSize: MigratingSize } | undefined => {\n const cached = converted.get(nodeId);\n if (cached !== undefined) return cached;\n if (visiting.has(nodeId)) return undefined;\n const node = nodesById.get(nodeId);\n if (node === undefined) return undefined;\n visiting.add(nodeId);\n const parent = node.parentId === null ? undefined : nodesById.get(node.parentId);\n const convertedParent = parent === undefined ? undefined : visit(parent.id);\n visiting.delete(nodeId);\n\n const referenceRoot = viewports?.referenceViewports[profile];\n const preferredRoot = viewports?.preferredViewports[profile];\n const usesSceneBoundary = viewports !== undefined && parent?.parentId === null;\n const currentParent = node.parentId === null || usesSceneBoundary ? referenceRoot : convertedParent?.currentSize;\n const preferredParent = node.parentId === null || usesSceneBoundary ? preferredRoot : convertedParent?.preferredSize;\n const override = node.layoutOverrides?.[profile]?.transform;\n const merged = { ...node.transform, ...override } as MigratingTransform;\n const minX = typeof merged.anchorMinX === \"number\" ? merged.anchorMinX : 0;\n const maxX = typeof merged.anchorMaxX === \"number\" ? merged.anchorMaxX : minX;\n const minY = typeof merged.anchorMinY === \"number\" ? merged.anchorMinY : 0;\n const maxY = typeof merged.anchorMaxY === \"number\" ? merged.anchorMaxY : minY;\n const stretchX = maxX > minX;\n const stretchY = maxY > minY;\n const legacyResponsive = typeof merged.responsiveSize === \"object\" && merged.responsiveSize !== null\n ? merged.responsiveSize as { referenceParentWidth?: unknown; referenceParentHeight?: unknown }\n : undefined;\n const fallbackWidth = typeof legacyResponsive?.referenceParentWidth === \"number\" ? legacyResponsive.referenceParentWidth : 1;\n const fallbackHeight = typeof legacyResponsive?.referenceParentHeight === \"number\" ? legacyResponsive.referenceParentHeight : 1;\n const current = currentParent ?? { width: fallbackWidth, height: fallbackHeight };\n const preferred = preferredParent ?? current;\n const oldScaleX = source === \"v9\"\n ? stretchX ? current.width / preferred.width : 1\n : stretchX && typeof legacyResponsive?.referenceParentWidth === \"number\"\n ? current.width / legacyResponsive.referenceParentWidth\n : 1;\n const oldScaleY = source === \"v9\"\n ? stretchY ? current.height / preferred.height : 1\n : stretchY && typeof legacyResponsive?.referenceParentHeight === \"number\"\n ? current.height / legacyResponsive.referenceParentHeight\n : 1;\n const renderedOffsetX = stretchX ? merged.x * oldScaleX : merged.x;\n const renderedOffsetY = stretchY ? merged.y * oldScaleY : merged.y;\n const renderedWidth = stretchX\n ? source === \"v9\" || legacyResponsive !== undefined\n ? merged.width * oldScaleX\n : merged.width + (maxX - minX) * current.width\n : merged.width;\n const renderedHeight = stretchY\n ? source === \"v9\" || legacyResponsive !== undefined\n ? merged.height * oldScaleY\n : merged.height + (maxY - minY) * current.height\n : merged.height;\n const currentWidth = current.width > 0 ? current.width : preferred.width;\n const currentHeight = current.height > 0 ? current.height : preferred.height;\n const next = { ...merged };\n delete next.responsiveSize;\n next.x = renderedOffsetX * preferred.width / currentWidth;\n next.y = renderedOffsetY * preferred.height / currentHeight;\n next.width = renderedWidth * preferred.width / currentWidth;\n next.height = renderedHeight * preferred.height / currentHeight;\n const result = {\n transform: next,\n currentSize: {\n width: next.width * currentWidth / preferred.width,\n height: next.height * currentHeight / preferred.height,\n },\n preferredSize: { width: next.width, height: next.height },\n };\n converted.set(nodeId, result);\n return result;\n };\n owner.rootNodeIds.forEach(visit);\n originalNodes.forEach((node) => visit(node.id));\n convertedByProfile.set(profile, converted);\n }\n\n for (const node of owner.nodes) {\n const desktop = convertedByProfile.get(\"desktop\")?.get(node.id)?.transform;\n const mobile = convertedByProfile.get(\"mobile\")?.get(node.id)?.transform;\n if (desktop !== undefined) node.transform = desktop;\n if (mobile !== undefined) {\n const mobilePatch = Object.fromEntries(\n Object.entries(mobile).filter(([key, value]) => !Object.is(value, desktop?.[key])),\n );\n const existingMobile = node.layoutOverrides?.mobile;\n if (Object.keys(mobilePatch).length > 0 || existingMobile !== undefined) {\n node.layoutOverrides ??= {};\n node.layoutOverrides.mobile ??= {};\n if (Object.keys(mobilePatch).length > 0) node.layoutOverrides.mobile.transform = mobilePatch;\n else delete node.layoutOverrides.mobile.transform;\n if (Object.keys(node.layoutOverrides.mobile).length === 0) delete node.layoutOverrides.mobile;\n if (Object.keys(node.layoutOverrides).length === 0) delete node.layoutOverrides;\n }\n }\n const desktopOverride = node.layoutOverrides?.desktop?.transform;\n if (desktopOverride !== undefined) delete desktopOverride.responsiveSize;\n }\n}\n\nfunction migrateToV10(document: Record<string, unknown>, source: \"legacy\" | \"v9\"): void {\n for (const scene of document.scenes as Array<{ rootNodeIds: string[]; nodes: MigratingNode[]; layout: { referenceViewports: Record<\"desktop\" | \"mobile\", MigratingSize>; preferredViewports: Record<\"desktop\" | \"mobile\", MigratingSize> } }> ?? []) {\n migrateOwnerToPreferredRects(scene, scene.layout, source);\n }\n for (const prefab of document.prefabs as Array<{ rootNodeIds: string[]; nodes: MigratingNode[] }> ?? []) {\n migrateOwnerToPreferredRects(prefab, undefined, source);\n }\n}\n\n/** Converts v10 absolute preferred-space rects to anchoredPosition/sizeDelta without a visual jump. */\nfunction migrateOwnerV10ToV11(\n owner: { rootNodeIds: string[]; nodes: MigratingNode[] },\n preferredViewports?: Record<\"desktop\" | \"mobile\", MigratingSize>,\n): void {\n const originalNodes = structuredClone(owner.nodes);\n const nodesById = new Map(originalNodes.map((node) => [node.id, node]));\n const convertedByProfile = new Map<\"desktop\" | \"mobile\", Map<string, MigratingTransform>>();\n\n for (const profile of [\"desktop\", \"mobile\"] as const) {\n const converted = new Map<string, MigratingTransform>();\n const visit = (nodeId: string): MigratingTransform | undefined => {\n const cached = converted.get(nodeId);\n if (cached !== undefined) return cached;\n const node = nodesById.get(nodeId);\n if (node === undefined) return undefined;\n const parent = node.parentId === null ? undefined : nodesById.get(node.parentId);\n const convertedParent = parent === undefined ? undefined : visit(parent.id);\n const merged = { ...node.transform, ...node.layoutOverrides?.[profile]?.transform } as MigratingTransform;\n const sceneBoundary = preferredViewports?.[profile];\n const parentSize = sceneBoundary !== undefined && (node.parentId === null || parent?.parentId === null)\n ? sceneBoundary\n : convertedParent === undefined\n ? { width: merged.width, height: merged.height }\n : {\n width: typeof convertedParent.__resolvedWidth === \"number\" ? convertedParent.__resolvedWidth : convertedParent.width,\n height: typeof convertedParent.__resolvedHeight === \"number\" ? convertedParent.__resolvedHeight : convertedParent.height,\n };\n const minX = typeof merged.anchorMinX === \"number\" ? merged.anchorMinX : 0;\n const minY = typeof merged.anchorMinY === \"number\" ? merged.anchorMinY : 0;\n const maxX = typeof merged.anchorMaxX === \"number\" ? merged.anchorMaxX : minX;\n const maxY = typeof merged.anchorMaxY === \"number\" ? merged.anchorMaxY : minY;\n const pivotX = typeof merged.pivotX === \"number\" ? merged.pivotX : 0;\n const pivotY = typeof merged.pivotY === \"number\" ? merged.pivotY : 0;\n const resolvedWidth = merged.width;\n const resolvedHeight = merged.height;\n const next = {\n ...merged,\n x: merged.x - (maxX - minX) * pivotX * parentSize.width,\n y: merged.y - (maxY - minY) * pivotY * parentSize.height,\n width: resolvedWidth - (maxX - minX) * parentSize.width,\n height: resolvedHeight - (maxY - minY) * parentSize.height,\n __resolvedWidth: resolvedWidth,\n __resolvedHeight: resolvedHeight,\n };\n converted.set(nodeId, next);\n return next;\n };\n owner.rootNodeIds.forEach(visit);\n originalNodes.forEach((node) => visit(node.id));\n convertedByProfile.set(profile, converted);\n }\n\n for (const node of owner.nodes) {\n const stripInternal = (transform: MigratingTransform | undefined): MigratingTransform | undefined => {\n if (transform === undefined) return undefined;\n const next = { ...transform };\n delete next.__resolvedWidth;\n delete next.__resolvedHeight;\n return next;\n };\n const desktop = stripInternal(convertedByProfile.get(\"desktop\")?.get(node.id));\n const mobile = stripInternal(convertedByProfile.get(\"mobile\")?.get(node.id));\n if (desktop === undefined || mobile === undefined) continue;\n node.transform = desktop;\n const desktopOverride = node.layoutOverrides?.desktop;\n if (desktopOverride !== undefined) {\n delete desktopOverride.transform;\n if (Object.keys(desktopOverride).length === 0 && node.layoutOverrides !== undefined) delete node.layoutOverrides.desktop;\n }\n const mobilePatch = Object.fromEntries(Object.entries(mobile).filter(([key, value]) => !Object.is(value, desktop[key])));\n if (Object.keys(mobilePatch).length > 0) {\n node.layoutOverrides ??= {};\n node.layoutOverrides.mobile ??= {};\n node.layoutOverrides.mobile.transform = mobilePatch;\n } else if (node.layoutOverrides?.mobile !== undefined) {\n delete node.layoutOverrides.mobile.transform;\n if (Object.keys(node.layoutOverrides.mobile).length === 0) delete node.layoutOverrides.mobile;\n }\n if (node.layoutOverrides !== undefined && Object.keys(node.layoutOverrides).length === 0) delete node.layoutOverrides;\n }\n}\n\nfunction migrateV10ToV11(document: Record<string, unknown>): void {\n for (const scene of document.scenes as Array<{ rootNodeIds: string[]; nodes: MigratingNode[]; layout: { preferredViewports: Record<\"desktop\" | \"mobile\", MigratingSize> } }> ?? []) {\n migrateOwnerV10ToV11(scene, scene.layout.preferredViewports);\n }\n for (const prefab of document.prefabs as Array<{ rootNodeIds: string[]; nodes: MigratingNode[] }> ?? []) {\n migrateOwnerV10ToV11(prefab);\n }\n}\n\n/** v15 makes Spine's initial playback explicit; previous runtime behavior always started it. */\nfunction migrateV14ToV15(document: Record<string, unknown>): void {\n const visit = (node: Record<string, unknown>): void => {\n if (node.type === \"spine\" && typeof node.autoplay !== \"boolean\") node.autoplay = true;\n const localNodes = node.locallyAddedNodes;\n if (Array.isArray(localNodes)) for (const localNode of localNodes) if (typeof localNode === \"object\" && localNode !== null) visit(localNode as Record<string, unknown>);\n };\n const owners = [...(document.scenes as { nodes?: unknown[] }[] ?? []), ...(document.prefabs as { nodes?: unknown[] }[] ?? [])];\n for (const owner of owners) for (const node of owner.nodes ?? []) if (typeof node === \"object\" && node !== null) visit(node as Record<string, unknown>);\n}\n\n/**\n * v19 adds optional, sparse presentation overrides. v18 values already are the canonical base values,\n * including nodes nested in prefab instances, so conversion deliberately preserves the complete node\n * graph byte-for-byte and only the caller advances schemaVersion after this explicit migration step.\n */\nfunction migrateV18ToV19(_document: Record<string, unknown>): void {}\n\n/**\n * v20 добавляет каталог локализации. Старому документу достаётся базовая локаль `en` и пустой\n * `entries`; `textKey` существующим `Text` не добавляется, поэтому визуально документ не меняется:\n * нода без ключа локализацию не запрашивает вовсе.\n */\nfunction migrateV19ToV20(document: Record<string, unknown>): void {\n if (typeof document.localization !== \"object\" || document.localization === null) document.localization = createDefaultLocalization();\n}\n\n/** v21 adds the optional `mask` node variant; every v20 document is already valid without it. */\nfunction migrateV20ToV21(_document: Record<string, unknown>): void {}\n\n/**\n * v22 переименовывает `UINode.binding` в `bindingKey`. Смысл поля не меняется — это тот же публичный\n * ключ ноды для игрового кода, — но имя `binding` путалось с keyboard bindings редактора.\n *\n * Значение переносится как есть, включая override-патчи внутри prefab-инстансов и локально\n * добавленные узлы: патч — RFC-7396-like merge patch, поэтому в нём переименовывается сам ключ\n * свойства вместе с его значением, в том числе `null` (снятие ключа). Конфликты, возникшие в старых\n * документах, не исправляются молча — после миграции они становятся обычными validation errors.\n */\nfunction migrateV21ToV22(document: Record<string, unknown>): void {\n const rename = (record: Record<string, unknown>): void => {\n if (!Object.hasOwn(record, \"binding\")) return;\n record.bindingKey = record.binding;\n delete record.binding;\n };\n const visit = (node: Record<string, unknown>): void => {\n rename(node);\n const overrides = node.propertyOverrides;\n if (Array.isArray(overrides)) for (const override of overrides) {\n const patch = (override as { patch?: unknown }).patch;\n if (typeof patch === \"object\" && patch !== null) rename(patch as Record<string, unknown>);\n }\n const localNodes = node.locallyAddedNodes;\n if (Array.isArray(localNodes)) for (const localNode of localNodes) if (typeof localNode === \"object\" && localNode !== null) visit(localNode as Record<string, unknown>);\n };\n const owners = [...(document.scenes as { nodes?: unknown[] }[] ?? []), ...(document.prefabs as { nodes?: unknown[] }[] ?? [])];\n for (const owner of owners) for (const node of owner.nodes ?? []) if (typeof node === \"object\" && node !== null) visit(node as Record<string, unknown>);\n}\n\n/**\n * v23 добавляет промежуточные веса шрифта (300/500/600/800) к прежним `normal`/`bold`. Прежние\n * значения остаются в новом union без изменений, поэтому переписывать документ не нужно.\n */\nfunction migrateV22ToV23(_document: Record<string, unknown>): void {}\n\n/** v24 adds the `bitmapFont` asset type and the `bitmap-text` node variant; every v23 document is already valid without them. */\nfunction migrateV23ToV24(_document: Record<string, unknown>): void {}\n\n/** v25 adds optional `bitmap-text` auto-size (`autoSize`/`minFontSize`); every v24 document is already valid without them. */\nfunction migrateV24ToV25(_document: Record<string, unknown>): void {}\n\n/** v26 adds optional `bitmapFont.frames` (reusable glyph crops); every v25 document is already valid without them. */\nfunction migrateV25ToV26(_document: Record<string, unknown>): void {}\n\n/** v27 adds optional `text` auto-size (`autoSize`/`minFontSize`), mirroring bitmap-text (ADR 0027); every v26 document is already valid without them. */\nfunction migrateV26ToV27(_document: Record<string, unknown>): void {}\n\n/** v28 adds the optional `staged-button` node variant; every v27 document is already valid without it. */\nfunction migrateV27ToV28(_document: Record<string, unknown>): void {}\n\n/** v29 adds optional opaque image tint; omitted keeps the existing white rendering. */\nfunction migrateV28ToV29(_document: Record<string, unknown>): void {}\n\n/** v30 adds optional Spine bone connectors; every v29 document is already valid without them. */\nfunction migrateV29ToV30(_document: Record<string, unknown>): void {}\n\nfunction normalizeLegacySpineConnectors(document: Record<string, unknown>): void {\n const migrateConnectors = (record: Record<string, unknown>): void => {\n if (!Array.isArray(record.connectors)) return;\n record.connectors = record.connectors.map((value) => {\n if (typeof value !== \"object\" || value === null) return value;\n const connector = value as Record<string, unknown>;\n if (typeof connector.boneName !== \"string\") return value;\n const migrated: Record<string, unknown> = { ...connector, partType: \"bone\", partName: connector.boneName };\n delete migrated.boneName;\n return migrated;\n });\n };\n const visit = (node: Record<string, unknown>): void => {\n migrateConnectors(node);\n if (Array.isArray(node.propertyOverrides)) for (const override of node.propertyOverrides) {\n const patch = (override as { patch?: unknown }).patch;\n if (typeof patch === \"object\" && patch !== null) migrateConnectors(patch as Record<string, unknown>);\n }\n if (Array.isArray(node.locallyAddedNodes)) for (const local of node.locallyAddedNodes) if (typeof local === \"object\" && local !== null) visit(local as Record<string, unknown>);\n };\n const owners = [...(document.scenes as { nodes?: unknown[] }[] ?? []), ...(document.prefabs as { nodes?: unknown[] }[] ?? [])];\n for (const owner of owners) for (const node of owner.nodes ?? []) if (typeof node === \"object\" && node !== null) visit(node as Record<string, unknown>);\n}\n\n/** v31 generalizes connector bones into typed parts and keeps every v30 connector as a bone. */\nfunction migrateV30ToV31(document: Record<string, unknown>): void { normalizeLegacySpineConnectors(document); }\n\nfunction normalizeLegacyPagination(document: Record<string, unknown>): void {\n const visit = (node: Record<string, unknown>): void => {\n if (node.type === \"pagination\" && !Object.hasOwn(node, \"style\")) node.style = \"dots\";\n const localNodes = node.locallyAddedNodes;\n if (Array.isArray(localNodes)) for (const localNode of localNodes) if (typeof localNode === \"object\" && localNode !== null) visit(localNode as Record<string, unknown>);\n };\n const owners = [...(document.scenes as { nodes?: unknown[] }[] ?? []), ...(document.prefabs as { nodes?: unknown[] }[] ?? [])];\n for (const owner of owners) for (const node of owner.nodes ?? []) if (typeof node === \"object\" && node !== null) visit(node as Record<string, unknown>);\n}\n\n/** v32 adds pagination/page-group variants to the merged develop lineage and normalizes legacy pagination dots. */\nfunction migrateV31ToV32(document: Record<string, unknown>): void { normalizeLegacyPagination(document); }\n\n/**\n * v33 reconciles the independently numbered develop and pagination feature histories. Feature documents\n * may already report v29..v32 while still carrying legacy Spine `boneName`; develop documents may report\n * v29..v31 without pagination. Both normalizers are deliberately idempotent so either lineage is safe.\n */\nfunction migrateV32ToV33(document: Record<string, unknown>): void {\n normalizeLegacySpineConnectors(document);\n normalizeLegacyPagination(document);\n}\n\n/** v40 adds sparse bitmap-text presentation overrides; existing values remain the shared base. */\nfunction migrateV39ToV40(_document: Record<string, unknown>): void {}\n\nexport function migrateProjectDocument(input: unknown): ProjectDocument { if (typeof input !== \"object\" || input === null || !Object.hasOwn(input, \"schemaVersion\")) throw new ProjectDocumentMigrationError(\"A schemaVersion is required for migration.\"); const version = (input as { schemaVersion?: unknown }).schemaVersion; if (typeof version === \"number\" && Number.isInteger(version) && version > CURRENT_SCHEMA_VERSION) throw new ProjectDocumentMigrationError(`This project was saved with schema version ${version}, which is newer than schema version ${CURRENT_SCHEMA_VERSION} supported by this editor. Update the editor to open it.`); if (typeof version !== \"number\" || !Number.isInteger(version) || version < 1) throw new ProjectDocumentMigrationError(`Unsupported schemaVersion '${String(version)}'.`); const migrated = structuredClone(input) as Record<string, unknown>; if (version <= 1) migrateV1ToV2(migrated); if (version <= 6) migrated.effects = []; if (version <= 7) for (const scene of migrated.scenes as { layout?: Record<string, unknown> }[] ?? []) { const layout = scene.layout; if (layout?.referenceViewports !== undefined) layout.preferredViewports = structuredClone(layout.referenceViewports); } if (version <= 9) migrateToV10(migrated, version === 9 ? \"v9\" : \"legacy\"); if (version <= 10) migrateV10ToV11(migrated); if (version <= 14) migrateV14ToV15(migrated); if (version <= 18) migrateV18ToV19(migrated); if (version <= 19) migrateV19ToV20(migrated); if (version <= 20) migrateV20ToV21(migrated); if (version <= 21) migrateV21ToV22(migrated); if (version <= 22) migrateV22ToV23(migrated); if (version <= 23) migrateV23ToV24(migrated); if (version <= 24) migrateV24ToV25(migrated); if (version <= 25) migrateV25ToV26(migrated); if (version <= 26) migrateV26ToV27(migrated); if (version <= 27) migrateV27ToV28(migrated); if (version <= 28) migrateV28ToV29(migrated); if (version <= 29) migrateV29ToV30(migrated); if (version <= 30) migrateV30ToV31(migrated); if (version <= 31) migrateV31ToV32(migrated); if (version <= 32) migrateV32ToV33(migrated); if (version <= 39) migrateV39ToV40(migrated);\n // v36 → v37 (position multiplier у spine-коннекторов) не требует переписывания данных:\n // добавлены только опциональные поля коннектора, и любой документ v36 уже валиден как v37.\n // v34 → v35 (`states.normalAssetId` стал опциональным у button/staged-button) не требует\n // переписывания данных: ослабление обязательного поля — любой документ v34 уже валиден как v35.\n // v33 → v34 (`opacity-group`) не требует переписывания данных: добавлен новый вариант узла, а\n // любой документ v33 уже валиден как v34 — существующих узлов этого типа в нём быть не может.\n // v17 → v18 (image без assetId) тоже не требует переписывания данных: старый формат — строгое\n // подмножество нового, у каждой существующей image-ноды assetId просто остаётся на месте.\n // v15 → v16 (вложенные пресеты) не требует переписывания данных: новый формат — надмножество\n // старого. `propertyOverrides[].nodeId` и `parentId` локального узла стали путями, а путь длиной в\n // один сегмент — это ровно прежний id узла определения; вложенных инстансов в `locallyAddedNodes`\n // v15 хранить не мог, поэтому запрещённых значений в старых документах не бывает.\n // v38 → v39 (per-state button tint/opacity) не требует переписывания данных: новые appearance\n // fields optional and therefore resolve to white / 1 for every existing button.\n // v39 → v40 (bitmap-text presentation overrides) likewise adds only optional sparse fields.\n // v37 → v38 (page-group carousel arrows) не требует переписывания данных: добавлены только\n // опциональные поля `pageUpButtonNodeId`/`pageDownButtonNodeId`, любой документ v37 уже валиден как v38.\n migrated.schemaVersion = CURRENT_SCHEMA_VERSION; assertProjectDocument(migrated); return migrated; }\nfunction canonicalizeJson(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(canonicalizeJson);\n if (typeof value === \"object\" && value !== null) return Object.fromEntries(Object.keys(value).sort().map((key) => [key, canonicalizeJson((value as Record<string, unknown>)[key])]));\n return value;\n}\nexport function serializeProjectDocument(document: ProjectDocument): string { assertProjectDocument(document); return `${JSON.stringify(canonicalizeJson(document))}\\n`; }\n\nexport * from \"./assetPaths.js\";\nexport * from \"./localization.js\";\nexport * from \"./manifest.js\";\nexport * from \"./prefabs.js\";\n"]}