@swf2es/player 0.1.0 → 0.1.1

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 (277) hide show
  1. package/package.json +7 -7
  2. package/dist/audio.d.ts +0 -22
  3. package/dist/audio.d.ts.map +0 -1
  4. package/dist/audio.js +0 -106
  5. package/dist/audio.js.map +0 -1
  6. package/dist/bitmap-filters.d.ts +0 -29
  7. package/dist/bitmap-filters.d.ts.map +0 -1
  8. package/dist/bitmap-filters.js +0 -906
  9. package/dist/bitmap-filters.js.map +0 -1
  10. package/dist/bitmap-ops.d.ts +0 -113
  11. package/dist/bitmap-ops.d.ts.map +0 -1
  12. package/dist/bitmap-ops.js +0 -725
  13. package/dist/bitmap-ops.js.map +0 -1
  14. package/dist/bitmap.d.ts +0 -98
  15. package/dist/bitmap.d.ts.map +0 -1
  16. package/dist/bitmap.js +0 -314
  17. package/dist/bitmap.js.map +0 -1
  18. package/dist/bounds.d.ts +0 -26
  19. package/dist/bounds.d.ts.map +0 -1
  20. package/dist/bounds.js +0 -300
  21. package/dist/bounds.js.map +0 -1
  22. package/dist/color.d.ts +0 -7
  23. package/dist/color.d.ts.map +0 -1
  24. package/dist/color.js +0 -42
  25. package/dist/color.js.map +0 -1
  26. package/dist/display.d.ts +0 -425
  27. package/dist/display.d.ts.map +0 -1
  28. package/dist/display.js +0 -1274
  29. package/dist/display.js.map +0 -1
  30. package/dist/drawing.d.ts +0 -52
  31. package/dist/drawing.d.ts.map +0 -1
  32. package/dist/drawing.js +0 -204
  33. package/dist/drawing.js.map +0 -1
  34. package/dist/filters.d.ts +0 -54
  35. package/dist/filters.d.ts.map +0 -1
  36. package/dist/filters.js +0 -155
  37. package/dist/filters.js.map +0 -1
  38. package/dist/fonts.d.ts +0 -23
  39. package/dist/fonts.d.ts.map +0 -1
  40. package/dist/fonts.js +0 -91
  41. package/dist/fonts.js.map +0 -1
  42. package/dist/geometry.d.ts +0 -21
  43. package/dist/geometry.d.ts.map +0 -1
  44. package/dist/geometry.js +0 -76
  45. package/dist/geometry.js.map +0 -1
  46. package/dist/gradients.d.ts +0 -29
  47. package/dist/gradients.d.ts.map +0 -1
  48. package/dist/gradients.js +0 -116
  49. package/dist/gradients.js.map +0 -1
  50. package/dist/images.d.ts +0 -22
  51. package/dist/images.d.ts.map +0 -1
  52. package/dist/images.js +0 -147
  53. package/dist/images.js.map +0 -1
  54. package/dist/input.d.ts +0 -79
  55. package/dist/input.d.ts.map +0 -1
  56. package/dist/input.js +0 -366
  57. package/dist/input.js.map +0 -1
  58. package/dist/keyboard.d.ts +0 -97
  59. package/dist/keyboard.d.ts.map +0 -1
  60. package/dist/keyboard.js +0 -583
  61. package/dist/keyboard.js.map +0 -1
  62. package/dist/morph.d.ts +0 -17
  63. package/dist/morph.d.ts.map +0 -1
  64. package/dist/morph.js +0 -218
  65. package/dist/morph.js.map +0 -1
  66. package/dist/pixi-blend.d.ts +0 -7
  67. package/dist/pixi-blend.d.ts.map +0 -1
  68. package/dist/pixi-blend.js +0 -253
  69. package/dist/pixi-blend.js.map +0 -1
  70. package/dist/pixi-color.d.ts +0 -54
  71. package/dist/pixi-color.d.ts.map +0 -1
  72. package/dist/pixi-color.js +0 -336
  73. package/dist/pixi-color.js.map +0 -1
  74. package/dist/pixi-filters.d.ts +0 -40
  75. package/dist/pixi-filters.d.ts.map +0 -1
  76. package/dist/pixi-filters.js +0 -953
  77. package/dist/pixi-filters.js.map +0 -1
  78. package/dist/pixi-resolve.d.ts +0 -4
  79. package/dist/pixi-resolve.d.ts.map +0 -1
  80. package/dist/pixi-resolve.js +0 -76
  81. package/dist/pixi-resolve.js.map +0 -1
  82. package/dist/pixi.d.ts +0 -219
  83. package/dist/pixi.d.ts.map +0 -1
  84. package/dist/pixi.js +0 -2169
  85. package/dist/pixi.js.map +0 -1
  86. package/dist/playerglobal/flash/filters/filters.d.ts +0 -26
  87. package/dist/playerglobal/flash/filters/filters.d.ts.map +0 -1
  88. package/dist/playerglobal/flash/filters/filters.js +0 -287
  89. package/dist/playerglobal/flash/filters/filters.js.map +0 -1
  90. package/dist/playerglobal/flash/system/FSCommand.d.ts +0 -4
  91. package/dist/playerglobal/flash/system/FSCommand.d.ts.map +0 -1
  92. package/dist/playerglobal/flash/system/FSCommand.js +0 -18
  93. package/dist/playerglobal/flash/system/FSCommand.js.map +0 -1
  94. package/dist/playerglobal/natives.d.ts +0 -10
  95. package/dist/playerglobal/natives.d.ts.map +0 -1
  96. package/dist/playerglobal/natives.js +0 -53
  97. package/dist/playerglobal/natives.js.map +0 -1
  98. package/dist/png.d.ts +0 -4
  99. package/dist/png.d.ts.map +0 -1
  100. package/dist/png.js +0 -140
  101. package/dist/png.js.map +0 -1
  102. package/dist/render/art.d.ts +0 -148
  103. package/dist/render/art.d.ts.map +0 -1
  104. package/dist/render/art.js +0 -575
  105. package/dist/render/art.js.map +0 -1
  106. package/dist/render/batchers.d.ts +0 -23
  107. package/dist/render/batchers.d.ts.map +0 -1
  108. package/dist/render/batchers.js +0 -52
  109. package/dist/render/batchers.js.map +0 -1
  110. package/dist/render/bitmaps.d.ts +0 -117
  111. package/dist/render/bitmaps.d.ts.map +0 -1
  112. package/dist/render/bitmaps.js +0 -422
  113. package/dist/render/bitmaps.js.map +0 -1
  114. package/dist/render/blend.d.ts +0 -37
  115. package/dist/render/blend.d.ts.map +0 -1
  116. package/dist/render/blend.js +0 -195
  117. package/dist/render/blend.js.map +0 -1
  118. package/dist/render/color.d.ts +0 -111
  119. package/dist/render/color.d.ts.map +0 -1
  120. package/dist/render/color.js +0 -533
  121. package/dist/render/color.js.map +0 -1
  122. package/dist/render/compositing.d.ts +0 -77
  123. package/dist/render/compositing.d.ts.map +0 -1
  124. package/dist/render/compositing.js +0 -188
  125. package/dist/render/compositing.js.map +0 -1
  126. package/dist/render/filters.d.ts +0 -98
  127. package/dist/render/filters.d.ts.map +0 -1
  128. package/dist/render/filters.js +0 -1326
  129. package/dist/render/filters.js.map +0 -1
  130. package/dist/render/hooks.d.ts +0 -4
  131. package/dist/render/hooks.d.ts.map +0 -1
  132. package/dist/render/hooks.js +0 -48
  133. package/dist/render/hooks.js.map +0 -1
  134. package/dist/render/node.d.ts +0 -139
  135. package/dist/render/node.d.ts.map +0 -1
  136. package/dist/render/node.js +0 -59
  137. package/dist/render/node.js.map +0 -1
  138. package/dist/render/patches.d.ts +0 -54
  139. package/dist/render/patches.d.ts.map +0 -1
  140. package/dist/render/patches.js +0 -154
  141. package/dist/render/patches.js.map +0 -1
  142. package/dist/render/planes.d.ts +0 -74
  143. package/dist/render/planes.d.ts.map +0 -1
  144. package/dist/render/planes.js +0 -267
  145. package/dist/render/planes.js.map +0 -1
  146. package/dist/render/pointer.d.ts +0 -5
  147. package/dist/render/pointer.d.ts.map +0 -1
  148. package/dist/render/pointer.js +0 -279
  149. package/dist/render/pointer.js.map +0 -1
  150. package/dist/render/pools.d.ts +0 -122
  151. package/dist/render/pools.d.ts.map +0 -1
  152. package/dist/render/pools.js +0 -238
  153. package/dist/render/pools.js.map +0 -1
  154. package/dist/render/resolve.d.ts +0 -4
  155. package/dist/render/resolve.d.ts.map +0 -1
  156. package/dist/render/resolve.js +0 -76
  157. package/dist/render/resolve.js.map +0 -1
  158. package/dist/render/saffron.d.ts +0 -135
  159. package/dist/render/saffron.d.ts.map +0 -1
  160. package/dist/render/saffron.js +0 -725
  161. package/dist/render/saffron.js.map +0 -1
  162. package/dist/render/settle.d.ts +0 -60
  163. package/dist/render/settle.d.ts.map +0 -1
  164. package/dist/render/settle.js +0 -128
  165. package/dist/render/settle.js.map +0 -1
  166. package/dist/render/shared.d.ts +0 -25
  167. package/dist/render/shared.d.ts.map +0 -1
  168. package/dist/render/shared.js +0 -33
  169. package/dist/render/shared.js.map +0 -1
  170. package/dist/render/snapshot.d.ts +0 -21
  171. package/dist/render/snapshot.d.ts.map +0 -1
  172. package/dist/render/snapshot.js +0 -91
  173. package/dist/render/snapshot.js.map +0 -1
  174. package/dist/render/spares.d.ts +0 -56
  175. package/dist/render/spares.d.ts.map +0 -1
  176. package/dist/render/spares.js +0 -160
  177. package/dist/render/spares.js.map +0 -1
  178. package/dist/render/strokes.d.ts +0 -107
  179. package/dist/render/strokes.d.ts.map +0 -1
  180. package/dist/render/strokes.js +0 -448
  181. package/dist/render/strokes.js.map +0 -1
  182. package/dist/render/table.d.ts +0 -213
  183. package/dist/render/table.d.ts.map +0 -1
  184. package/dist/render/table.js +0 -795
  185. package/dist/render/table.js.map +0 -1
  186. package/dist/render/tessellate.d.ts +0 -89
  187. package/dist/render/tessellate.d.ts.map +0 -1
  188. package/dist/render/tessellate.js +0 -386
  189. package/dist/render/tessellate.js.map +0 -1
  190. package/dist/render/text.d.ts +0 -40
  191. package/dist/render/text.d.ts.map +0 -1
  192. package/dist/render/text.js +0 -309
  193. package/dist/render/text.js.map +0 -1
  194. package/dist/render/three.d.ts +0 -83
  195. package/dist/render/three.d.ts.map +0 -1
  196. package/dist/render/three.js +0 -511
  197. package/dist/render/three.js.map +0 -1
  198. package/dist/render/triangles.d.ts +0 -28
  199. package/dist/render/triangles.d.ts.map +0 -1
  200. package/dist/render/triangles.js +0 -189
  201. package/dist/render/triangles.js.map +0 -1
  202. package/dist/render/view.d.ts +0 -238
  203. package/dist/render/view.d.ts.map +0 -1
  204. package/dist/render/view.js +0 -1173
  205. package/dist/render/view.js.map +0 -1
  206. package/dist/render/worker/bitmaps.d.ts +0 -43
  207. package/dist/render/worker/bitmaps.d.ts.map +0 -1
  208. package/dist/render/worker/bitmaps.js +0 -151
  209. package/dist/render/worker/bitmaps.js.map +0 -1
  210. package/dist/render/worker/drawing.d.ts +0 -21
  211. package/dist/render/worker/drawing.d.ts.map +0 -1
  212. package/dist/render/worker/drawing.js +0 -356
  213. package/dist/render/worker/drawing.js.map +0 -1
  214. package/dist/render/worker/filters.d.ts +0 -7
  215. package/dist/render/worker/filters.d.ts.map +0 -1
  216. package/dist/render/worker/filters.js +0 -125
  217. package/dist/render/worker/filters.js.map +0 -1
  218. package/dist/render/worker/frames.d.ts +0 -32
  219. package/dist/render/worker/frames.d.ts.map +0 -1
  220. package/dist/render/worker/frames.js +0 -124
  221. package/dist/render/worker/frames.js.map +0 -1
  222. package/dist/render/worker/host.d.ts +0 -60
  223. package/dist/render/worker/host.d.ts.map +0 -1
  224. package/dist/render/worker/host.js +0 -297
  225. package/dist/render/worker/host.js.map +0 -1
  226. package/dist/render/worker/libraries.d.ts +0 -36
  227. package/dist/render/worker/libraries.d.ts.map +0 -1
  228. package/dist/render/worker/libraries.js +0 -153
  229. package/dist/render/worker/libraries.js.map +0 -1
  230. package/dist/render/worker/presentation.d.ts +0 -18
  231. package/dist/render/worker/presentation.d.ts.map +0 -1
  232. package/dist/render/worker/presentation.js +0 -47
  233. package/dist/render/worker/presentation.js.map +0 -1
  234. package/dist/render/worker/renderer.d.ts +0 -4
  235. package/dist/render/worker/renderer.d.ts.map +0 -1
  236. package/dist/render/worker/renderer.js +0 -21
  237. package/dist/render/worker/renderer.js.map +0 -1
  238. package/dist/render/worker/scene.d.ts +0 -32
  239. package/dist/render/worker/scene.d.ts.map +0 -1
  240. package/dist/render/worker/scene.js +0 -611
  241. package/dist/render/worker/scene.js.map +0 -1
  242. package/dist/render/worker/text.d.ts +0 -47
  243. package/dist/render/worker/text.d.ts.map +0 -1
  244. package/dist/render/worker/text.js +0 -261
  245. package/dist/render/worker/text.js.map +0 -1
  246. package/dist/render/worker/thread.d.ts +0 -23
  247. package/dist/render/worker/thread.d.ts.map +0 -1
  248. package/dist/render/worker/thread.js +0 -107
  249. package/dist/render/worker/thread.js.map +0 -1
  250. package/dist/render/worker/values.d.ts +0 -18
  251. package/dist/render/worker/values.d.ts.map +0 -1
  252. package/dist/render/worker/values.js +0 -64
  253. package/dist/render/worker/values.js.map +0 -1
  254. package/dist/sha256.d.ts +0 -5
  255. package/dist/sha256.d.ts.map +0 -1
  256. package/dist/sha256.js +0 -96
  257. package/dist/sha256.js.map +0 -1
  258. package/dist/shapes.d.ts +0 -71
  259. package/dist/shapes.d.ts.map +0 -1
  260. package/dist/shapes.js +0 -340
  261. package/dist/shapes.js.map +0 -1
  262. package/dist/static-text.d.ts +0 -33
  263. package/dist/static-text.d.ts.map +0 -1
  264. package/dist/static-text.js +0 -105
  265. package/dist/static-text.js.map +0 -1
  266. package/dist/text-layout.d.ts +0 -66
  267. package/dist/text-layout.d.ts.map +0 -1
  268. package/dist/text-layout.js +0 -315
  269. package/dist/text-layout.js.map +0 -1
  270. package/dist/text.d.ts +0 -67
  271. package/dist/text.d.ts.map +0 -1
  272. package/dist/text.js +0 -383
  273. package/dist/text.js.map +0 -1
  274. package/dist/timeline.d.ts +0 -150
  275. package/dist/timeline.d.ts.map +0 -1
  276. package/dist/timeline.js +0 -266
  277. package/dist/timeline.js.map +0 -1
@@ -1,448 +0,0 @@
1
- import { Matrix } from "pixi.js";
2
- import { blendLayers, droppedLayers } from "../display/morph.js";
3
- import { LINE, pointsOf } from "../display/shapes.js";
4
- import { deviceMemory, IdleBudget, LINES_IDLE_MOST, LINES_IDLE_MS, LINES_IDLE_VERTICES, linesCeiling, } from "./pools.js";
5
- import { destroyContext, remakeable, shapeContext, trace } from "./tessellate.js";
6
- export const UNIT = [1, 0, 0, 1];
7
- export function sameLinear(p, q) {
8
- return p[0] === q[0] && p[1] === q[1] && p[2] === q[2] && p[3] === q[3];
9
- }
10
- /**
11
- * A line's width on the stage. Flash strokes a transformed shape with one
12
- * width all along, not the local width stretched by the transform: the
13
- * width scaled by the transform's (a + c, b + d) as a line's scale mode
14
- * allows, never under `least`, a pixel of the screen it is shown on, which
15
- * is also how wide a hairline is.
16
- */
17
- function screenWidth(line, m, least) {
18
- const sx = Math.abs(m[0] + m[2]);
19
- const sy = Math.abs(m[1] + m[3]);
20
- const scale = line.noHScale
21
- ? line.noVScale
22
- ? 1
23
- : sy
24
- : line.noVScale
25
- ? sx
26
- : Math.sqrt((sx * sx + sy * sy) / 2);
27
- return Math.max(least, (line.width / 20) * scale);
28
- }
29
- function stroke(line, m, least) {
30
- const caps = ["round", "butt", "square"];
31
- const joins = ["round", "bevel", "miter"];
32
- return {
33
- width: screenWidth(line, m, least),
34
- color: line.color & 0xffffff,
35
- alpha: (line.color >>> 24) / 255,
36
- cap: caps[line.startCap] ?? "round",
37
- join: joins[line.join] ?? "round",
38
- miterLimit: line.miterLimit,
39
- alignment: 0.5,
40
- };
41
- }
42
- function transformPath(path, m) {
43
- const out = path.slice();
44
- for (let i = 0; i < out.length;) {
45
- const points = pointsOf(out[i]);
46
- for (let k = 0; k < points; k++) {
47
- const x = out[i + 1 + 2 * k];
48
- const y = out[i + 2 + 2 * k];
49
- out[i + 1 + 2 * k] = m[0] * x + m[2] * y;
50
- out[i + 2 + 2 * k] = m[1] * x + m[3] * y;
51
- }
52
- i += 1 + 2 * points;
53
- }
54
- return out;
55
- }
56
- /**
57
- * The context a line's Graphics shows until restroke gives it its own: one
58
- * for all, never given back nor destroyed, where each made one of its own
59
- * to throw away.
60
- */
61
- export const NO_LINES = shapeContext();
62
- /**
63
- * A layer's lines as seen through `m`, drawn in its space so that their
64
- * width is even; as wide as `by` makes them, which is `m` but for a 9-slice's.
65
- */
66
- function strokeContext(layer, m, least, by = m) {
67
- const context = shapeContext();
68
- for (const { line, paths, closes, triangles } of layer.strokes) {
69
- context.beginPath();
70
- let next = 0;
71
- for (const [i, path] of paths.entries()) {
72
- const close = closes?.[next]?.at === i ? closes[next++] : null;
73
- // Back to the path's start, a closed path, joined there as Flash joins it; a triangle's
74
- // outline is, its last point its first, which Pixi drops.
75
- const home = triangles || (close?.x === path[1] && close.y === path[2]);
76
- trace(context, transformPath(close && !home ? [...path, LINE, close.x, close.y] : path, m));
77
- if (home) {
78
- context.closePath();
79
- }
80
- }
81
- context.stroke(stroke(line, by, least));
82
- }
83
- return context;
84
- }
85
- /**
86
- * Lines' contexts by shape layer and the linear transform they are seen
87
- * through, shared by every instance that sees a character's layer alike:
88
- * instances of one creature in step, or one instance on its loop's next
89
- * turn. Contexts are counted as they are taken and given back, a removed
90
- * object's too; one no longer taken waits among the idle, destroyed after
91
- * LINES_IDLE_MS or, the oldest first, past the budget of their vertices,
92
- * which grows from LINES_IDLE_VERTICES as content comes back to what it
93
- * let go (IdleBudget), or past as many of them, LINES_IDLE_MOST for that
94
- * budget's least and more for more. Only a character's layers
95
- * are shared, which never change, and a blend's while its morph keeps it:
96
- * one it has dropped is never drawn from again, so its lines go at once.
97
- */
98
- export class StrokeContexts {
99
- counts;
100
- byLayer = new WeakMap();
101
- uses = new Map();
102
- keys = new Map();
103
- /** Contexts no one holds, oldest first, with the time each went idle. */
104
- idle = new Map();
105
- /** The idle ones' vertices as they went idle, and their sum. */
106
- idleSizes = new Map();
107
- idleVertices = 0;
108
- /** How many vertices the idle may hold, grown as content comes back to what went for room. */
109
- budget;
110
- /** Each layer's number, for the budget's keys, which must hold no layer. */
111
- layerIds = new WeakMap();
112
- layerCount = 0;
113
- /** The idle ones of blends, which go as soon as their morph drops the blend. */
114
- idleBlends = new Set();
115
- constructor(counts, device = deviceMemory()) {
116
- this.counts = counts;
117
- this.budget = new IdleBudget(LINES_IDLE_VERTICES, linesCeiling(device), LINES_IDLE_MS, 4 * LINES_IDLE_MOST);
118
- }
119
- /** Content unloaded: the budget back to its floor, the unloaded content's idle lines going on the next tick. */
120
- unloaded() {
121
- this.budget.reset();
122
- }
123
- /** The layer's lines under `key` if they are kept, not taken: for a view drawn once to borrow. */
124
- peek(layer, key) {
125
- return this.byLayer.get(layer)?.get(key) ?? null;
126
- }
127
- /** The layer's lines seen through `m`, taken: made or found. */
128
- take(layer, m, least, key = linesKey(m, least)) {
129
- let contexts = this.byLayer.get(layer);
130
- if (!contexts) {
131
- contexts = new Map();
132
- this.byLayer.set(layer, contexts);
133
- }
134
- let context = contexts.get(key);
135
- if (context) {
136
- this.counts.strokeReuses++;
137
- this.wake(context);
138
- }
139
- else {
140
- context = linesContext(layer, m, least);
141
- this.counts.strokeContexts++;
142
- if (this.budget.remembered > 0) {
143
- this.budget.missed(this.ghostKey(layer, key), performance.now());
144
- }
145
- contexts.set(key, context);
146
- this.keys.set(context, [layer, key]);
147
- }
148
- this.uses.set(context, (this.uses.get(context) ?? 0) + 1);
149
- return context;
150
- }
151
- /** Give a context back: one of these goes idle when no one holds it; any other is destroyed. */
152
- give(context) {
153
- if (context === NO_LINES) {
154
- return;
155
- }
156
- const uses = this.uses.get(context);
157
- if (uses === undefined) {
158
- destroyContext(context);
159
- return;
160
- }
161
- if (uses > 1) {
162
- this.uses.set(context, uses - 1);
163
- return;
164
- }
165
- this.uses.delete(context);
166
- const layer = this.keys.get(context)[0];
167
- if (droppedLayers.has(layer)) {
168
- this.drop(context);
169
- return;
170
- }
171
- const vertices = verticesOf(context);
172
- this.idle.set(context, performance.now());
173
- this.idleSizes.set(context, vertices);
174
- this.idleVertices += vertices;
175
- if (blendLayers.has(layer)) {
176
- this.idleBlends.add(context);
177
- }
178
- this.trim();
179
- }
180
- /** A frame prepared: the contexts idle too long go, and those of blends their morph dropped. */
181
- tick() {
182
- for (const context of this.idleBlends) {
183
- if (droppedLayers.has(this.keys.get(context)[0])) {
184
- this.drop(context);
185
- }
186
- }
187
- const now = performance.now();
188
- for (const [context, since] of this.idle) {
189
- if (now - since < LINES_IDLE_MS) {
190
- break;
191
- }
192
- this.drop(context);
193
- }
194
- this.budget.tick(now);
195
- this.trim();
196
- }
197
- /** The oldest idle let go, their keys remembered, till the rest are within the budget. */
198
- trim() {
199
- const budget = this.budget.size;
200
- const most = (LINES_IDLE_MOST * budget) / LINES_IDLE_VERTICES;
201
- while (this.idle.size > most || this.idleVertices > budget) {
202
- const [context, since] = this.idle.entries().next().value;
203
- const [layer, key] = this.keys.get(context);
204
- // At least a context's share of the least budget: one let go for their count grows it too.
205
- const size = Math.max(this.idleSizes.get(context) ?? 0, LINES_IDLE_VERTICES / LINES_IDLE_MOST);
206
- this.budget.evicted(this.ghostKey(layer, key), since, size);
207
- this.drop(context);
208
- }
209
- }
210
- ghostKey(layer, key) {
211
- let id = this.layerIds.get(layer);
212
- if (id === undefined) {
213
- id = this.layerCount++;
214
- this.layerIds.set(layer, id);
215
- }
216
- return `${id}:${key}`;
217
- }
218
- /** Take a context off the idle, if it is there. */
219
- wake(context) {
220
- this.idleVertices -= this.idleSizes.get(context) ?? 0;
221
- this.idleSizes.delete(context);
222
- this.idle.delete(context);
223
- this.idleBlends.delete(context);
224
- }
225
- drop(context) {
226
- this.wake(context);
227
- const [layer, key] = this.keys.get(context);
228
- this.keys.delete(context);
229
- this.byLayer.get(layer)?.delete(key);
230
- destroyContext(context);
231
- }
232
- }
233
- /**
234
- * The vertices Pixi tessellated a context into, for each renderer that drew
235
- * it: what keeping it costs.
236
- */
237
- function verticesOf(context) {
238
- const data = context._gpuData;
239
- let vertices = 0;
240
- for (const uid in data) {
241
- vertices += (data[uid]?.geometryData?.vertices.length ?? 0) / 2;
242
- }
243
- return vertices;
244
- }
245
- /** The key a layer's lines seen through `m`, at least `least` wide, are kept by. */
246
- function linesKey(m, least) {
247
- return `${m[0]},${m[1]},${m[2]},${m[3]},${least}`;
248
- }
249
- /** Lines stroked through `m`: the key they are kept by, and the inverse that takes them back to the object's axes. */
250
- export function strokeFrame(m, least) {
251
- const det = m[0] * m[3] - m[1] * m[2];
252
- return {
253
- m,
254
- key: linesKey(m, least),
255
- inverse: det === 0 ? null : new Matrix(m[3] / det, -m[1] / det, -m[2] / det, m[0] / det, 0, 0),
256
- };
257
- }
258
- /**
259
- * `m`'s stretch, without its turn or mirror: m is a rotation or a mirror
260
- * times this symmetric stretch, and a line scaled both ways is as wide
261
- * through either (screenWidth reads |m's columns' sum|, which no rotation
262
- * changes), so its lines are the same stroked through the stretch alone
263
- * and then turned. A limb that turns on every frame of a loop, a spinning
264
- * particle squashed one way, every mirror and every instance alike then
265
- * share the lines of one context, where each angle was tessellated anew.
266
- * Rounded, so that one stretch has one key however its turn rounded it;
267
- * null where m flattens everything, or nearly, where rounding would.
268
- */
269
- export function stretchOf(m, out) {
270
- const a = m[0];
271
- const b = m[1];
272
- const c = m[2];
273
- const d = m[3];
274
- // S = sqrt(mᵀm), in closed form for 2 by 2.
275
- const p = a * a + b * b;
276
- const q = c * c + d * d;
277
- const r = a * c + b * d;
278
- const det = Math.abs(a * d - b * c);
279
- const t = Math.sqrt(p + q + 2 * det);
280
- if (det === 0 || t === 0) {
281
- return null;
282
- }
283
- const off = roundStretch(r, t);
284
- const a2 = roundStretch(p + det, t);
285
- const d2 = roundStretch(q + det, t);
286
- // Near collapse, a scale of a few 65536ths rounds away, and the lines with it.
287
- const rounded = Math.abs(a2 * d2 - off * off);
288
- if (Math.abs(rounded - det) > 1e-3 * det) {
289
- return null;
290
- }
291
- // Into `out` where given: a turn each frame then makes no array to compare.
292
- const stretch = out ?? [0, 0, 0, 0];
293
- stretch[0] = a2;
294
- stretch[1] = off;
295
- stretch[2] = off;
296
- stretch[3] = d2;
297
- return stretch;
298
- }
299
- const roundStretch = (x, t) => Math.round((x / t) * 65536) / 65536;
300
- /**
301
- * How far, in pixels of the screen, a line's edge may stand from where its
302
- * own stretch puts it when stroked through a nearby one on the grid
303
- * (settledStretch): a twentieth of a pixel, a twip, for a hairline, whose
304
- * width the stretch does not change; a wider line's width moves with the
305
- * stretch as well as its stroke, and its edges up to twice as far. A
306
- * fiftieth gave a hairline a step of 1/64 of its scale, and a crowded
307
- * room's hairlines, scaled a little more or less on each frame by their
308
- * tweens, a stretch of their own on most frames: nine in ten lines stroked
309
- * anew each frame were such hairlines.
310
- */
311
- const EDGE_SLACK = 0.05;
312
- /**
313
- * How far, in pixels of the screen, a line's edge may stand from its own
314
- * stretch's place when stroked through an even one (settledStretch): two
315
- * twips, a tenth of a pixel. A part that turns inside a parent scaled a
316
- * little unevenly, as a limb in a squashed body, has a stretch that turns
317
- * with it, a new one each frame, and its lines were tessellated each frame;
318
- * stroked through one even scale, every angle shares them.
319
- */
320
- const EVEN_SLACK = 0.1;
321
- /** The coarsest step of the stretches' grid, a hairline's: about 6% of a scale. */
322
- const COARSEST_STEP = 1 / 16;
323
- /** The finest: a line wider than this allows is stroked through its own stretch. */
324
- const FINEST_STEP = 1 / 4096;
325
- /**
326
- * The stretch `s` (stretchOf's, symmetric with a positive determinant)
327
- * moved to the nearest point of a grid, `widest` the width of its widest
328
- * line in twips and `least` a pixel of the screen; or `s` itself. A tween
329
- * that scales a little on every frame, a character that breathes, gave
330
- * each frame a stretch of its own, and its lines were tessellated again
331
- * on every frame of every loop, faster than the cache could keep them; the
332
- * grid gives such a pulse a few. Lines stroked through the grid's stretch
333
- * and taken back through its inverse (strokeFrame) follow the shape's path
334
- * exactly; only their width and joins see the small difference between
335
- * the two stretches, s q⁻¹'s from the identity, which the grid keeps under
336
- * EDGE_SLACK of a pixel at their edges. The grid is on the stretch's
337
- * logarithm, a symmetric matrix whose entries measure scale and shear
338
- * alike, in a step that is a power of two, so that stretches settled alike
339
- * share their contexts; one it would move further than a step, as it may
340
- * one that squashes nearly flat, is its own.
341
- */
342
- export function settledStretch(s, widest, least, out) {
343
- // s = mean I + N, N = [[half, off], [off, -half]], N² = r² I: its scales are mean ± r, along
344
- // the axes P± = (I ± N / r) / 2 project on.
345
- const mean = (s[0] + s[3]) / 2;
346
- const half = (s[0] - s[3]) / 2;
347
- const off = s[1];
348
- const r = Math.sqrt(half * half + off * off);
349
- if (!(mean - r > 0)) {
350
- return s;
351
- }
352
- // Nearly even: stroked through the even stretch of the same area, k, which no turn changes,
353
- // and taken back through its inverse, a line is as wide as k makes it times what s q⁻¹ = s / k
354
- // stretches each way, between the smaller scale over k and the larger. Through s itself it is
355
- // one width all along, somewhere in that span as screenWidth reads s at its angle; its edges
356
- // share the difference, which must stay within the slack at every angle, so that a part
357
- // turning does not flip between the even stretch and its own. A hairline, a pixel wide however
358
- // small its scale, stretches with s / k as any line: a part squashed far keeps its own.
359
- if (r > 0) {
360
- const k = Math.sqrt((mean + r) * (mean - r));
361
- const stroked = Math.max(least, (widest / 20) * k);
362
- if ((stroked * 2 * r) / k <= 2 * EVEN_SLACK * least) {
363
- const even = out ?? [0, 0, 0, 0];
364
- even[0] = k;
365
- even[1] = 0;
366
- even[2] = 0;
367
- even[3] = k;
368
- return settledStretch(even, widest, least, even);
369
- }
370
- }
371
- // Half the widest line's width on the screen, at most as the larger scale makes it, times the
372
- // step must stay under the slack.
373
- const width = Math.max(least, (widest / 20) * (mean + r));
374
- const most = Math.min(COARSEST_STEP, (2 * EDGE_SLACK * least) / width);
375
- if (!(most >= FINEST_STEP)) {
376
- return s;
377
- }
378
- const step = 2 ** Math.floor(Math.log2(most));
379
- // Its logarithm, ln(mean + r) P+ + ln(mean - r) P-, is α I + β N; its entries go on the grid.
380
- const large = Math.log(mean + r);
381
- const small = Math.log(mean - r);
382
- const alpha = (large + small) / 2;
383
- const beta = r === 0 ? 1 / mean : (large - small) / (2 * r);
384
- const l11 = Math.round((alpha + beta * half) / step) * step;
385
- const l22 = Math.round((alpha - beta * half) / step) * step;
386
- const l12 = Math.round((beta * off) / step) * step;
387
- // And back: the grid's α' I + N', N'² = ρ² I, is e^(α' + ρ) P'+ + e^(α' - ρ) P'-.
388
- const h = (l11 - l22) / 2;
389
- const rho = Math.sqrt(h * h + l12 * l12);
390
- const up = Math.exp((l11 + l22) / 2 + rho);
391
- const down = Math.exp((l11 + l22) / 2 - rho);
392
- const across = rho === 0 ? 0 : (up - down) / (2 * rho);
393
- const q0 = (up + down) / 2 + across * h;
394
- const q1 = across * l12;
395
- const q3 = (up + down) / 2 - across * h;
396
- // s q⁻¹ near the identity, within a step by its norm, the most it stretches any direction: the
397
- // edges, half the widest line from the path, within the slack of their place. (Each entry
398
- // within a step alone let an edge stray to nearly twice that, 0.036 of a pixel measured.)
399
- const qDet = q0 * q3 - q1 * q1;
400
- const e0 = (s[0] * q3 - s[2] * q1) / qDet;
401
- const e1 = (s[1] * q3 - s[3] * q1) / qDet;
402
- const e2 = (s[2] * q0 - s[0] * q1) / qDet;
403
- const e3 = (s[3] * q0 - s[1] * q1) / qDet;
404
- // The spectral norm of D = s q⁻¹ - I: the root of the larger eigenvalue of DᵀD.
405
- const d0 = e0 - 1;
406
- const d3 = e3 - 1;
407
- const frobenius = d0 * d0 + e1 * e1 + e2 * e2 + d3 * d3;
408
- const det = d0 * d3 - e1 * e2;
409
- const norm = Math.sqrt((frobenius + Math.sqrt(Math.max(0, frobenius * frobenius - 4 * det * det))) / 2);
410
- if (!(norm <= step)) {
411
- return s;
412
- }
413
- // Into `out` where given, which may be `s`, as stretchOf's: a move each frame then makes no
414
- // array to compare.
415
- const q = out ?? [0, 0, 0, 0];
416
- q[0] = q0;
417
- q[1] = q1;
418
- q[2] = q1;
419
- q[3] = q3;
420
- return q;
421
- }
422
- /** The width of the layer's widest line, in twips. */
423
- export function widestLine(layer) {
424
- let widest = 0;
425
- for (const { line } of layer.strokes) {
426
- widest = Math.max(widest, line.width);
427
- }
428
- return widest;
429
- }
430
- /** Whether every line of the layer scales both ways, whose width no rotation changes; one scaled one way alone turns with it. */
431
- export function scalesEvenly(layer) {
432
- return layer.strokes.every(({ line }) => !line.noHScale && !line.noVScale);
433
- }
434
- /** A layer's lines seen through `m`, nothing where `m` flattens them. */
435
- export function linesContext(layer, m, least, by = m) {
436
- // Empty, drawn alone as every shape's are: one batched would get no
437
- // instruction till its group rebuilt.
438
- if (m[0] * m[3] - m[1] * m[2] === 0) {
439
- return shapeContext();
440
- }
441
- // A view's alone, whose renderer builds it once: its paths go then. The
442
- // transforms copied, as a caller may reuse its arrays.
443
- const seen = [m[0], m[1], m[2], m[3]];
444
- const width = [by[0], by[1], by[2], by[3]];
445
- const make = () => strokeContext(layer, seen, least, width);
446
- return remakeable(make(), make);
447
- }
448
- //# sourceMappingURL=strokes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"strokes.js","sourceRoot":"","sources":["../../src/render/strokes.ts"],"names":[],"mappings":"AAIA,OAAO,EAAwB,MAAM,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,IAAI,EAAa,QAAQ,EAAmB,MAAM,sBAAsB,CAAC;AAClF,OAAO,EAEL,YAAY,EACZ,UAAU,EACV,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAKlF,MAAM,CAAC,MAAM,IAAI,GAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEzC,MAAM,UAAU,UAAU,CAAC,CAAS,EAAE,CAAS;IAC7C,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,IAAU,EAAE,CAAS,EAAE,KAAa;IACvD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ;QACzB,CAAC,CAAC,IAAI,CAAC,QAAQ;YACb,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,EAAE;QACN,CAAC,CAAC,IAAI,CAAC,QAAQ;YACb,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;AACpD,CAAC;AAED,SAAS,MAAM,CAAC,IAAU,EAAE,CAAS,EAAE,KAAa;IAClD,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAU,CAAC;IAClD,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAU,CAAC;IACnD,OAAO;QACL,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC;QAClC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,QAAQ;QAC5B,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,GAAG,GAAG;QAChC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,OAAO;QACnC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO;QACjC,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,SAAS,EAAE,GAAG;KACf,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,IAAU,EAAE,CAAS;IAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,GAAI,CAAC;QACjC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7B,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACzC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC;QAED,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;IACtB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;AAEvC;;;GAGG;AACH,SAAS,aAAa,CAAC,KAAiB,EAAE,CAAS,EAAE,KAAa,EAAE,EAAE,GAAG,CAAC;IACxE,MAAM,OAAO,GAAG,YAAY,EAAE,CAAC;IAC/B,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAC/D,OAAO,CAAC,SAAS,EAAE,CAAC;QACpB,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,KAAK,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC/D,wFAAwF;YACxF,0DAA0D;YAC1D,MAAM,IAAI,GAAG,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACxE,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5F,IAAI,IAAI,EAAE,CAAC;gBACT,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,CAAC;QACH,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,cAAc;IAkBN,MAAM;IAjBR,OAAO,GAAG,IAAI,OAAO,EAA4C,CAAC;IAClE,IAAI,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC1C,IAAI,GAAG,IAAI,GAAG,EAAyC,CAAC;IACzE,yEAAyE;IACxD,IAAI,GAAG,IAAI,GAAG,EAA2B,CAAC;IAC3D,gEAAgE;IAC/C,SAAS,GAAG,IAAI,GAAG,EAA2B,CAAC;IACxD,YAAY,GAAG,CAAC,CAAC;IACzB,8FAA8F;IACrF,MAAM,CAAa;IAC5B,4EAA4E;IAC3D,QAAQ,GAAG,IAAI,OAAO,EAAsB,CAAC;IACtD,UAAU,GAAG,CAAC,CAAC;IACvB,gFAAgF;IAC/D,UAAU,GAAG,IAAI,GAAG,EAAmB,CAAC;IAEzD,YACmB,MAAwD,EACzE,MAAM,GAAiB,YAAY,EAAE;sBADpB,MAAM;QAGvB,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAC1B,mBAAmB,EACnB,YAAY,CAAC,MAAM,CAAC,EACpB,aAAa,EACb,CAAC,GAAG,eAAe,CACpB,CAAC;IACJ,CAAC;IAED,gHAAgH;IAChH,QAAQ;QACN,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IACtB,CAAC;IAED,kGAAkG;IAClG,IAAI,CAAC,KAAiB,EAAE,GAAW;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACnD,CAAC;IAED,gEAAgE;IAChE,IAAI,CAAC,KAAiB,EAAE,CAAS,EAAE,KAAa,EAAE,GAAG,GAAG,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC;QACxE,IAAI,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;gBAC/B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;YACnE,CAAC;YAED,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1D,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,gGAAgG;IAChG,IAAI,CAAC,OAAwB;QAC3B,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,cAAc,CAAC,OAAO,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QAED,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;YACjC,OAAO;QACT,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1B,MAAM,KAAK,GAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAA0B,CAAC,CAAC,CAAC,CAAC;QAClE,IAAI,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnB,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACtC,IAAI,CAAC,YAAY,IAAI,QAAQ,CAAC;QAC9B,IAAI,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,gGAAgG;IAChG,IAAI;QACF,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACtC,IAAI,aAAa,CAAC,GAAG,CAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAA0B,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3E,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACzC,IAAI,GAAG,GAAG,KAAK,GAAG,aAAa,EAAE,CAAC;gBAChC,MAAM;YACR,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,0FAA0F;IAClF,IAAI;QACV,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;QAChC,MAAM,IAAI,GAAG,CAAC,eAAe,GAAG,MAAM,CAAC,GAAG,mBAAmB,CAAC;QAC9D,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,YAAY,GAAG,MAAM,EAAE,CAAC;YAC3D,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAkC,CAAC;YACvF,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAyB,CAAC;YACpE,2FAA2F;YAC3F,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CACnB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAChC,mBAAmB,GAAG,eAAe,CACtC,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YAC5D,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAEO,QAAQ,CAAC,KAAiB,EAAE,GAAW;QAC7C,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACrB,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC/B,CAAC;QAED,OAAO,GAAG,EAAE,IAAI,GAAG,EAAE,CAAC;IACxB,CAAC;IAED,mDAAmD;IAC3C,IAAI,CAAC,OAAwB;QACnC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAEO,IAAI,CAAC,OAAwB;QACnC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnB,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAyB,CAAC;QACpE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QACrC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;CACF;AAED;;;GAGG;AACH,SAAS,UAAU,CAAC,OAAwB;IAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC;IAC9B,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,oFAAoF;AACpF,SAAS,QAAQ,CAAC,CAAS,EAAE,KAAa;IACxC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC;AACpD,CAAC;AAED,sHAAsH;AACtH,MAAM,UAAU,WAAW,CACzB,CAAS,EACT,KAAa;IAEb,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,OAAO;QACL,CAAC;QACD,GAAG,EAAE,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC;QACvB,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;KAC/F,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,SAAS,CAAC,CAAS,EAAE,GAAY;IAC/C,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACf,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACf,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACf,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACf,4CAA4C;IAC5C,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IACrC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;IACpC,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;IACpC,+EAA+E;IAC/E,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;IAC9C,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,GAAG,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4EAA4E;IAC5E,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACpC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAChB,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACjB,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACjB,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IAChB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;AAEnF;;;;;;;;;;GAUG;AACH,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB;;;;;;;GAOG;AACH,MAAM,UAAU,GAAG,GAAG,CAAC;AACvB,mFAAmF;AACnF,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,CAAC;AAC7B,oFAAoF;AACpF,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC;AAE7B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,cAAc,CAAC,CAAS,EAAE,MAAc,EAAE,KAAa,EAAE,GAAY;IACnF,6FAA6F;IAC7F,4CAA4C;IAC5C,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;IAC7C,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,4FAA4F;IAC5F,+FAA+F;IAC/F,8FAA8F;IAC9F,6FAA6F;IAC7F,wFAAwF;IACxF,+FAA+F;IAC/F,wFAAwF;IACxF,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACV,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,UAAU,GAAG,KAAK,EAAE,CAAC;YACpD,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACjC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACZ,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACZ,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACZ,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACZ,OAAO,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QACnD,CAAC;IACH,CAAC;IAED,8FAA8F;IAC9F,kCAAkC;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,GAAG,UAAU,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;IACvE,IAAI,CAAC,CAAC,IAAI,IAAI,WAAW,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,8FAA8F;IAC9F,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IACnD,kFAAkF;IAClF,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;IACzC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IACvD,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,MAAM,GAAG,GAAG,CAAC;IACxB,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC;IACxC,+FAA+F;IAC/F,0FAA0F;IAC1F,0FAA0F;IAC1F,MAAM,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC/B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;IAC1C,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;IAC1C,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;IAC1C,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;IAC1C,gFAAgF;IAChF,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAClB,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAClB,MAAM,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACxD,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CACpB,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAChF,CAAC;IACF,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,4FAA4F;IAC5F,oBAAoB;IACpB,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACV,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACV,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACV,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACV,OAAO,CAAC,CAAC;AACX,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,UAAU,CAAC,KAAiB;IAC1C,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,iIAAiI;AACjI,MAAM,UAAU,YAAY,CAAC,KAAiB;IAC5C,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7E,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,YAAY,CAAC,KAAiB,EAAE,CAAS,EAAE,KAAa,EAAE,EAAE,GAAG,CAAC;IAC9E,oEAAoE;IACpE,sCAAsC;IACtC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,wEAAwE;IACxE,uDAAuD;IACvD,MAAM,IAAI,GAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC5D,OAAO,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;AAClC,CAAC"}