@hatiolab/figure-model 0.1.76 → 0.1.78

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.
Files changed (135) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +60 -138
  3. package/dist/index.d.ts +1 -13
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +3 -26
  6. package/dist/index.js.map +1 -1
  7. package/dist/v3-asset-types.d.ts +1 -2
  8. package/dist/v3-asset-types.d.ts.map +1 -1
  9. package/dist/v3-asset.js +1 -1
  10. package/dist/v3-asset.js.map +1 -1
  11. package/dist/v3-authoring-actions.d.ts +9 -12
  12. package/dist/v3-authoring-actions.d.ts.map +1 -1
  13. package/dist/v3-authoring-actions.js +4 -5
  14. package/dist/v3-authoring-actions.js.map +1 -1
  15. package/dist/v3-capabilities.js +4 -1
  16. package/dist/v3-capabilities.js.map +1 -1
  17. package/dist/v3-cost.d.ts.map +1 -1
  18. package/dist/v3-cost.js +3 -5
  19. package/dist/v3-cost.js.map +1 -1
  20. package/dist/v3-create.d.ts +1 -1
  21. package/dist/v3-create.d.ts.map +1 -1
  22. package/dist/v3-examples.js +1 -1
  23. package/dist/v3-gate.d.ts +7 -8
  24. package/dist/v3-gate.d.ts.map +1 -1
  25. package/dist/v3-gate.js +11 -14
  26. package/dist/v3-gate.js.map +1 -1
  27. package/dist/v3-graph.d.ts +1 -2
  28. package/dist/v3-graph.d.ts.map +1 -1
  29. package/dist/v3-graph.js +5 -7
  30. package/dist/v3-graph.js.map +1 -1
  31. package/dist/v3-instance-size.d.ts +3 -5
  32. package/dist/v3-instance-size.d.ts.map +1 -1
  33. package/dist/v3-instance-size.js +2 -4
  34. package/dist/v3-instance-size.js.map +1 -1
  35. package/dist/v3-kernel-version.d.ts +1 -1
  36. package/dist/v3-kernel-version.js +1 -1
  37. package/dist/v3-part-edit.d.ts +4 -5
  38. package/dist/v3-part-edit.d.ts.map +1 -1
  39. package/dist/v3-part-edit.js +2 -2
  40. package/dist/v3-part-edit.js.map +1 -1
  41. package/dist/v3-proposal.js +1 -1
  42. package/dist/v3-proposal.js.map +1 -1
  43. package/dist/v3-release-contract.js +1 -1
  44. package/dist/v3-release-contract.js.map +1 -1
  45. package/dist/v3-score.d.ts +4 -5
  46. package/dist/v3-score.d.ts.map +1 -1
  47. package/dist/v3-score.js +7 -8
  48. package/dist/v3-score.js.map +1 -1
  49. package/dist/v3-words.d.ts +105 -0
  50. package/dist/v3-words.d.ts.map +1 -0
  51. package/dist/v3-words.js +107 -0
  52. package/dist/v3-words.js.map +1 -0
  53. package/docs/assembly-constraints-v3.md +13 -23
  54. package/docs/v3-asset-persistence.md +4 -4
  55. package/docs/v3-common-kernel-experiment.md +1 -1
  56. package/docs/v3-core-semantics.md +3 -3
  57. package/docs/v3-cutover.md +5 -3
  58. package/docs/v3-design.md +13 -26
  59. package/docs/v3-editor-integration.md +2 -2
  60. package/docs/v3-full-conveyor-validation.md +3 -3
  61. package/docs/v3-layout-system.md +1 -1
  62. package/docs/v3-minimal-model.md +0 -1
  63. package/docs/v3-motion-contract.md +21 -56
  64. package/docs/v3-runtime-extraction.md +7 -7
  65. package/docs/v3-sample-validation-expanded.md +1 -1
  66. package/docs/v3-sample-validation.md +1 -1
  67. package/docs/v3-shape-dimension-contract.md +23 -57
  68. package/docs/v3-status.md +5 -5
  69. package/docs/v3-storage-integration.md +4 -4
  70. package/package.json +2 -20
  71. package/dist/blueprint-shape.d.ts +0 -10
  72. package/dist/blueprint-shape.d.ts.map +0 -1
  73. package/dist/blueprint-shape.js +0 -194
  74. package/dist/blueprint-shape.js.map +0 -1
  75. package/dist/blueprint.d.ts +0 -73
  76. package/dist/blueprint.d.ts.map +0 -1
  77. package/dist/blueprint.js +0 -388
  78. package/dist/blueprint.js.map +0 -1
  79. package/dist/cost-chart.d.ts +0 -35
  80. package/dist/cost-chart.d.ts.map +0 -1
  81. package/dist/cost-chart.js +0 -150
  82. package/dist/cost-chart.js.map +0 -1
  83. package/dist/cost.d.ts +0 -162
  84. package/dist/cost.d.ts.map +0 -1
  85. package/dist/cost.js +0 -194
  86. package/dist/cost.js.map +0 -1
  87. package/dist/gate.d.ts +0 -65
  88. package/dist/gate.d.ts.map +0 -1
  89. package/dist/gate.js +0 -284
  90. package/dist/gate.js.map +0 -1
  91. package/dist/grouping.d.ts +0 -121
  92. package/dist/grouping.d.ts.map +0 -1
  93. package/dist/grouping.js +0 -224
  94. package/dist/grouping.js.map +0 -1
  95. package/dist/keys.d.ts +0 -45
  96. package/dist/keys.d.ts.map +0 -1
  97. package/dist/keys.js +0 -84
  98. package/dist/keys.js.map +0 -1
  99. package/dist/origin.d.ts +0 -33
  100. package/dist/origin.d.ts.map +0 -1
  101. package/dist/origin.js +0 -46
  102. package/dist/origin.js.map +0 -1
  103. package/dist/release-contract.d.ts +0 -38
  104. package/dist/release-contract.d.ts.map +0 -1
  105. package/dist/release-contract.js +0 -246
  106. package/dist/release-contract.js.map +0 -1
  107. package/dist/sizing.d.ts +0 -231
  108. package/dist/sizing.d.ts.map +0 -1
  109. package/dist/sizing.js +0 -550
  110. package/dist/sizing.js.map +0 -1
  111. package/dist/types.d.ts +0 -1233
  112. package/dist/types.d.ts.map +0 -1
  113. package/dist/types.js +0 -547
  114. package/dist/types.js.map +0 -1
  115. package/dist/v3-from-v2.d.ts +0 -203
  116. package/dist/v3-from-v2.d.ts.map +0 -1
  117. package/dist/v3-from-v2.js +0 -2053
  118. package/dist/v3-from-v2.js.map +0 -1
  119. package/dist/v3-mesh-compare.d.ts +0 -24
  120. package/dist/v3-mesh-compare.d.ts.map +0 -1
  121. package/dist/v3-mesh-compare.js +0 -55
  122. package/dist/v3-mesh-compare.js.map +0 -1
  123. package/dist/validate.d.ts +0 -7
  124. package/dist/validate.d.ts.map +0 -1
  125. package/dist/validate.js +0 -1119
  126. package/dist/validate.js.map +0 -1
  127. package/dist/visual-evidence.d.ts +0 -21
  128. package/dist/visual-evidence.d.ts.map +0 -1
  129. package/dist/visual-evidence.js +0 -52
  130. package/dist/visual-evidence.js.map +0 -1
  131. package/docs/design.md +0 -193
  132. package/docs/format-survey.md +0 -108
  133. package/docs/format.md +0 -704
  134. package/docs/sizing.md +0 -183
  135. package/docs/validation.md +0 -357
package/dist/sizing.d.ts DELETED
@@ -1,231 +0,0 @@
1
- import type { AnchorRule, Axis, SizingSubject, FigurePart, Vec3 } from './types.ts';
2
- export type { Axis };
3
- /**
4
- * 인스턴스 크기가 바뀔 때 부품이 어떻게 반응하나.
5
- *
6
- * ## 왜 따로 떼어 두나
7
- *
8
- * 같은 답을 세 곳이 낸다 — 3D(`figure-real-object`), 2D 톱뷰(`figure-instance`),
9
- * 그리고 속성 편집기. 저마다 계산하면 화면마다 다른 모양이 나오고, 그때는 어느 쪽이
10
- * 맞는지 알 방법이 없다.
11
- *
12
- * ## 규칙 넷
13
- *
14
- * scale 비례 확대. 인스턴스 배율을 그대로 받는다 — 아무것도 하지 않아도 된다
15
- * fixed 크기는 그대로. **붙잡은 자리에서 잰 거리**를 지킨다
16
- * stretch 가장 길게 뻗은 축이 **양쪽 면 사이를 채운다**
17
- * repeat 크기는 그대로 두고 **개수**가 늘어난다
18
- *
19
- * ## 자리도 규칙의 일부다
20
- *
21
- * 한동안 이 파일은 **크기**만 다뤘고 자리는 언제나 비례였다. 그래서 시그널 타워를
22
- * 3 배로 세우면 기둥은 늘어나는데 램프들은 기둥 위 공중으로 흩어졌다.
23
- *
24
- * 1× foot 0..90 · pole 85..705 · bracket 703..747 · cap 1037..1087
25
- * 3× foot 90..180 · pole 255..2115 · bracket 2153..2197 · cap 3161..3211
26
- *
27
- * 램프는 상자 안 어디쯤이 아니라 **기둥 꼭대기**에 붙어 있다. 그 말을 하는 것이
28
- * 앵커다 — 부품이 어느 면에서 잰 거리를 지키는가.
29
- *
30
- * 세 가지가 한 규칙의 세 경우다. 축마다
31
- *
32
- * 아무 데도 안 붙잡는다 비례로 따라간다 `scale`
33
- * 한 자리를 붙잡는다 거기서 잰 거리 유지 `fixed` · `repeat` 의 옆 축
34
- * 두 면을 다 붙잡는다 가운데가 늘어나 채운다 `stretch` 의 긴 축
35
- *
36
- * 붙잡는 자리는 아래 면(`min`) · 가운데(`center`) · 위 면(`max`) 셋이다. 셋이 같은
37
- * 규칙이다 — 기준이 어디냐만 다르다. 한동안 `center` 만 「비례로 밀린다」였는데, 그러면
38
- * 가운데 가까이 저작한 것이 상자가 커질 때마다 밖으로 밀려 이웃과 갈라진다. 크레들의
39
- * V 홈 패드 둘이 ±80 에서 ±240 으로 벌어져 축을 놓친 것이 그것이었다.
40
- *
41
- * 3D 도구의 나인슬라이스가 하는 일과 같고, 여기서는 그것이 세 축으로 있다.
42
- *
43
- * ## 어떻게 되돌리나
44
- *
45
- * 부모(`object3d`)가 인스턴스 배율 `S` 를 이미 걸고 있다. 그래서 크기를 그대로 두려면
46
- * 자식이 `1/S` 로 되돌리면 된다. 자리는 부모의 배율을 그대로 받으므로 따라간다.
47
- *
48
- * 월드 = S · (자리 + (1/S) ⊙ 형상) = S·자리 + 형상
49
- *
50
- * 회전은 **형상에 미리 구워** 둔다. 그래야 위 식이 정확히 성립한다 — 회전을 mesh 에
51
- * 걸면 비균등 배율이 회전 뒤에 곱해져 형상이 기울어진다.
52
- *
53
- * 이 방식의 값은 **geometry 를 그대로 나눠 쓴다**는 것이다. 인스턴스가 몇이든 정점
54
- * 버퍼는 늘지 않는다. 대신 합칠 수 없어 draw call 이 부품 수만큼 는다 — 그 비용은
55
- * 청사진의 묶음 수에 그대로 잡히고 성숙도가 잰다.
56
- */
57
- /**
58
- * 이 축에서 이 부품이 어떻게 서나. **크기와 자리를 함께 정하는 한 값이다.**
59
- *
60
- * 저작자가 적었으면 그것이 이기고, 없으면 `sizing` 이 정한다.
61
- *
62
- * fixed 가까운 면
63
- * stretch 가장 긴 축은 `span`, 나머지는 가까운 면
64
- * repeat 늘어나는 축은 `center`(줄이 제자리에 남는다), 나머지는 가까운 면
65
- *
66
- * **가까운 면**은 상자의 위 절반에 저작한 것은 위를, 아래 절반은 아래를 붙잡는 것이다.
67
- * 사람이 램프를 꼭대기 근처에 놓을 때 뜻하는 것이 그것이다. 정확히 가운데면 `center` 이고,
68
- * 그때는 비례로 따라가는 것이 맞다 — 어느 쪽도 더 가깝지 않기 때문이다.
69
- *
70
- * 세는 것은 **부품의 면에서 상자의 면까지**이지 중심에서가 아니다. 중심으로 재면
71
- * 굵은 부품과 얇은 부품이 같은 자리에서 다른 답을 낸다.
72
- */
73
- /**
74
- * 저작면이 묻는 자리 — **부품 하나로 답한다.**
75
- *
76
- * `anchorOf` 는 `SizingSubject` 를 받는다. 그런데 이 값을 **보여 줘야 하는 곳**은 저작면이고,
77
- * 거기에는 청사진이 없다(편집 중인 `FigurePart` 만 있다). 그 자리가 규칙을 다시 쓰면 화면이
78
- * 말하는 붙잡는 면과 실제로 그려지는 것이 갈린다 — 규칙은 한 벌이어야 한다.
79
- *
80
- * 부품은 `sizing` 하나만 채우면 그 모양이 된다. 청사진에만 있는 칸(`geometryKey` · `triangles`)은
81
- * 셈이 보지 않는다 — 그 사실이 어긋나면 아래 시험이 깨진다(`gate.test.ts`: 부품과 청사진이 같은 답).
82
- */
83
- export declare function anchorOfPart(part: FigurePart, base: Vec3, axis: Axis): AnchorRule;
84
- /**
85
- * 저작면이 묻는 개수 — **부품 하나로 답한다.**
86
- *
87
- * `anchorOfPart` 와 같은 자리다. 저작면에는 청사진이 없고 편집 중인 부품만 있는데, 「피치를
88
- * 이렇게 두면 몇 개가 되나」는 화면이 보여 줘야 하는 값이다. 그 자리가 개수를 다시 계산하면
89
- * 화면이 말하는 개수와 실제로 그려지는 개수가 달라진다.
90
- *
91
- * 기본값도 청사진과 같게 채운다 — 부품의 `sizing` 은 안 적을 수 있고 청사진은 그때
92
- * `DEFAULT_SIZING` 을 채운다.
93
- */
94
- export declare function repeatPlanOfPart(part: FigurePart, scale: InstanceScale, base: Vec3): {
95
- axis: Axis;
96
- count: number;
97
- pitch: number;
98
- } | null;
99
- export declare function anchorOf(member: SizingSubject, base: Vec3, axis: Axis): AnchorRule;
100
- /**
101
- * 부품의 면에서 상자의 면까지 — 지켜야 할 거리 둘.
102
- *
103
- * Exported for the V2 → V3 converter, which writes these two distances into the V3 graph as constants.
104
- */
105
- export declare function clearance(member: SizingSubject, base: Vec3, axis: Axis): {
106
- min: number;
107
- max: number;
108
- };
109
- /** 인스턴스 배율. `bounds ÷ base` 다. */
110
- export interface InstanceScale {
111
- x: number;
112
- y: number;
113
- z: number;
114
- }
115
- /**
116
- * 되돌릴 것이 있는 부품인가.
117
- *
118
- * `scale` 은 부모 배율을 그대로 받으면 되므로 합쳐 둔 채로 그린다. 나머지 셋은 따로
119
- * 세운다.
120
- *
121
- * **곡면은 `scale` 이어도 따로 선다.** 합친 형상은 변환을 하나만 받는데, 인스턴스가
122
- * 축마다 다른 배율이면 그 하나가 원기둥을 타원 기둥으로 만든다. 원기둥이라고 적어
123
- * 놓고 원기둥이 아닌 것을 그리게 된다.
124
- *
125
- * 값이 있는 만큼 값을 치른다 — 곡면 부품 하나가 draw call 하나다. figure-model 의
126
- * `standsAlone` 이 **같은 답**을 내야 한다. 갈리면 성숙도가 세는 수와 화면이 그리는
127
- * 수가 달라진다.
128
- */
129
- export declare function needsOwnMesh(member: SizingSubject): boolean;
130
- /**
131
- * 회전까지 반영한 부품의 축별 크기.
132
- *
133
- * 회전한 상자의 여덟 꼭짓점을 각 축에 내린 것 — 축에 맞춘 경계다. 회전 행렬은
134
- * `Rx·Ry·Rz` 이고 three 의 기본 Euler 순서('XYZ')와 같다. `memberGeometry` 가 같은
135
- * 순서로 돌리므로 여기만 다르면 답이 갈린다.
136
- *
137
- * figure-model 의 `rotatedExtentOf` 와 같은 식이다. 그쪽이 정본이고 여기는 읽는 쪽의
138
- * 사본이다 — 이 패키지는 figure-model 에 의존하지 않는다(`figure-blueprint.ts` 참고).
139
- */
140
- export declare function rotatedExtent(member: SizingSubject): Vec3;
141
- /**
142
- * `stretch` 일 때 늘어나는 축 — **가장 길게 뻗은 축**이다.
143
- *
144
- * 형식에 축을 적는 자리가 없어서 크기에서 읽는다. 프레임 · 벨트 · 레일이 전부 "길어서
145
- * 그 물건인 것"이라 이 규칙과 맞는다. 같으면 x → z → y 순으로 정한다.
146
- */
147
- export declare function stretchAxis(member: SizingSubject): Axis;
148
- /**
149
- * 부품 mesh 에 걸 배율 — 부모가 건 인스턴스 배율을 **어디까지 되돌릴까**.
150
- *
151
- * `1` 은 인스턴스를 그대로 따라간다는 뜻이고, `1/S` 는 저작한 크기를 지킨다는 뜻이다.
152
- *
153
- * `repeat` 는 부품 자체의 크기를 지킨다 — 늘어나는 것은 개수다.
154
- */
155
- export declare function sizingScale(member: SizingSubject, scale: InstanceScale, base: Vec3): Vec3;
156
- /** 원기둥의 축 — 돌리기 전 y 를 부품의 회전으로 옮겨 가장 크게 놓인 축. Exported for the V2 → V3 converter. */
157
- export declare function longAxis(member: SizingSubject): Axis;
158
- /**
159
- * 부품을 놓을 자리 — **부모가 배율을 걸기 전의 자리**다.
160
- *
161
- * 부모(`object3d`)가 인스턴스 배율 `S` 를 걸므로, 월드에서 원하는 자리를 `S` 로 나눠
162
- * 돌려준다. 그래서 `S = 1` 이면 언제나 저작한 자리 그대로다 — 저작 화면에서 보던 것이
163
- * 인스턴스 배율 1 에서 그대로 선다.
164
- *
165
- * center 저작한 자리. 상자와 함께 비례로 밀린다
166
- * min 아래 면에서 잰 거리를 지킨다
167
- * max 위 면에서 잰 거리를 지킨다
168
- * stretch 양쪽을 다 지키므로 자리는 두 끝의 가운데다
169
- */
170
- export declare function sizingPosition(member: SizingSubject, scale: InstanceScale, base: Vec3): Vec3;
171
- /**
172
- * Where a joint's origin sits at an instance scale, in the frame `sizingPosition` answers in: before the
173
- * parent applies the instance scale (ADR-0066 decision 3).
174
- *
175
- * The origin is a point fixed to the part it is attached to (the joint child's parent part), so it
176
- * follows that part under sizing: it moves with the part's seat and keeps its offset from the part's
177
- * centre at the part's own scale. With no parent part the origin hangs from the figure frame and only
178
- * the instance scale moves it, which is the rest position unchanged in this frame.
179
- *
180
- * Sizing is solved in the rest pose. The joint's own movement is applied afterwards, as a rigid
181
- * transform, so turning a child never shears it under a lopsided instance.
182
- */
183
- export declare function jointOriginPosition(joint: {
184
- origin: Vec3;
185
- }, attach: SizingSubject | undefined, scale: InstanceScale, base: Vec3): Vec3;
186
- /**
187
- * `repeat` 를 몇 개로 펼치나.
188
- *
189
- * **기준 상자를 한 칸씩 채운다.** 저작자는 **단위 하나**를 그리고, 런타임이 그 축의
190
- * 길이를 채운다. 3D 도구의 배열 변형이 "길이에 맞추기" 로 하는 일과 같다.
191
- *
192
- * 개수 = floor(기준 상자의 그 축 길이 × 인스턴스 배율 ÷ 한 칸)
193
- *
194
- * ## 한 칸은 **중심에서 다음 중심까지**다
195
- *
196
- * 부품 크기와 무관하다. 전에는 `부품 크기 + 틈` 으로 셌는데, 그러면 부품을 굵게 하거나
197
- * 돌릴 때마다 줄 전체가 다시 깔린다. 롤러를 30° 기울였더니 축 방향 경계상자가 96 에서
198
- * 343 으로 늘어 개수가 16 에서 6 으로 무너졌다. 기울어진 롤러 둘은 빗살처럼 나란히
199
- * 놓이므로 그렇게 벌릴 이유가 없는데도 그랬다.
200
- *
201
- * 이제 기울여도 개수가 그대로다. **기울인 채로 바짝 붙여 까는 것**이 표현된다.
202
- *
203
- * ## 왜 부품 크기가 아니라 기준 상자를 채우나
204
- *
205
- * 전에는 "그 부품이 `scale` 이었다면 차지했을 만큼" 을 채웠다. 지름 96 짜리 롤러는
206
- * 컨베이어를 3 배로 늘려도 288 밖에 안 되어 롤러가 한두 개 나온다. 2400 짜리 컨베이어에
207
- * 롤러 하나는 컨베이어가 아니다.
208
- *
209
- * 롤러는 일정한 간격으로 전 구간에 깔린다. 길이가 두 배면 롤러도 두 배다.
210
- */
211
- export declare function repeatPlan(member: SizingSubject, scale: InstanceScale, base: Vec3): {
212
- axis: Axis;
213
- count: number;
214
- pitch: number;
215
- } | null;
216
- /**
217
- * 한 부품이 펼쳐질 수 있는 최대 개수.
218
- *
219
- * 복제본 하나가 draw call 하나다. 인스턴스를 아주 크게 늘리면 개수가 끝없이 늘어 한
220
- * 자산이 프레임을 다 먹는다. 그 지점에서는 이미 낱개를 셀 수 없으므로 더 늘려도 보이는
221
- * 것이 달라지지 않는다.
222
- */
223
- export declare const REPEAT_LIMIT = 100;
224
- /**
225
- * 복제본 하나의 자리 — 저작한 자리를 가운데 두고 양쪽으로 벌린다.
226
- *
227
- * 한쪽으로만 늘어놓으면 부품이 커질 때마다 한 방향으로 밀려서, 저작할 때 맞춰 둔 자리가
228
- * 어긋난다. 가운데를 지키면 대칭으로 놓은 것들이 계속 대칭이다.
229
- */
230
- export declare function repeatOffset(index: number, count: number, pitch: number): number;
231
- //# sourceMappingURL=sizing.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sizing.d.ts","sourceRoot":"","sources":["../src/sizing.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAGnF,YAAY,EAAE,IAAI,EAAE,CAAA;AAEpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AAEH;;;;;;;;;;;;;;;GAeG;AACH;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,UAAU,CAQjF;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,IAAI,GACT;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAErD;AAED,wBAAgB,QAAQ,CACtB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,GACT,UAAU,CAYZ;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,GACT;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAM9B;AA0BD,kCAAkC;AAClC,MAAM,WAAW,aAAa;IAC5B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAGD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAE3D;AAeD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAsBzD;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAKvD;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,IAAI,GACT,IAAI,CAkDN;AAwFD,qFAAqF;AACrF,wBAAgB,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAsBpD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,IAAI,GACT,IAAI,CA4CN;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE;IAAE,MAAM,EAAE,IAAI,CAAA;CAAE,EACvB,MAAM,EAAE,aAAa,GAAG,SAAS,EACjC,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,IAAI,GACT,IAAI,CAaN;AASD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,IAAI,GACT;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAwBrD;AAED;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,MAAM,CAAA;AAE/B;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhF"}