@datamoc/mw_games 0.30.0 → 0.33.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.
Files changed (71) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/README.md +1 -1
  3. package/api-surface.json +384 -0
  4. package/dist/assets/index.d.ts +2 -0
  5. package/dist/assets/index.d.ts.map +1 -1
  6. package/dist/assets/index.js +1 -0
  7. package/dist/assets/index.js.map +1 -1
  8. package/dist/assets/svg.d.ts +87 -0
  9. package/dist/assets/svg.d.ts.map +1 -0
  10. package/dist/assets/svg.js +162 -0
  11. package/dist/assets/svg.js.map +1 -0
  12. package/dist/index.d.ts +1 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +1 -0
  15. package/dist/index.js.map +1 -1
  16. package/dist/mw_games.global.js +41 -41
  17. package/dist/mwl/fengari.d.ts +12 -6
  18. package/dist/mwl/fengari.d.ts.map +1 -1
  19. package/dist/mwl/fengari.js +56 -70
  20. package/dist/mwl/fengari.js.map +1 -1
  21. package/dist/mwl/runtime.d.ts +13 -0
  22. package/dist/mwl/runtime.d.ts.map +1 -1
  23. package/dist/mwl/runtime.js +72 -4
  24. package/dist/mwl/runtime.js.map +1 -1
  25. package/dist/mwl/schema.d.ts.map +1 -1
  26. package/dist/mwl/schema.js +4 -1
  27. package/dist/mwl/schema.js.map +1 -1
  28. package/dist/roguelike/Cave.d.ts +109 -0
  29. package/dist/roguelike/Cave.d.ts.map +1 -0
  30. package/dist/roguelike/Cave.js +192 -0
  31. package/dist/roguelike/Cave.js.map +1 -0
  32. package/dist/roguelike/Overworld.d.ts +82 -0
  33. package/dist/roguelike/Overworld.d.ts.map +1 -0
  34. package/dist/roguelike/Overworld.js +306 -0
  35. package/dist/roguelike/Overworld.js.map +1 -0
  36. package/dist/roguelike/index.d.ts +4 -0
  37. package/dist/roguelike/index.d.ts.map +1 -1
  38. package/dist/roguelike/index.js +2 -0
  39. package/dist/roguelike/index.js.map +1 -1
  40. package/dist/skeleton/index.d.ts +131 -0
  41. package/dist/skeleton/index.d.ts.map +1 -0
  42. package/dist/skeleton/index.js +206 -0
  43. package/dist/skeleton/index.js.map +1 -0
  44. package/dist/testing/SceneControls.d.ts +35 -0
  45. package/dist/testing/SceneControls.d.ts.map +1 -0
  46. package/dist/testing/SceneControls.js +49 -0
  47. package/dist/testing/SceneControls.js.map +1 -0
  48. package/dist/testing/index.d.ts +2 -0
  49. package/dist/testing/index.d.ts.map +1 -1
  50. package/dist/testing/index.js +1 -0
  51. package/dist/testing/index.js.map +1 -1
  52. package/dist/two-d/render/Camera.d.ts +13 -3
  53. package/dist/two-d/render/Camera.d.ts.map +1 -1
  54. package/dist/two-d/render/Camera.js +35 -25
  55. package/dist/two-d/render/Camera.js.map +1 -1
  56. package/dist/two-d/render/SkeletalSprite.d.ts +118 -0
  57. package/dist/two-d/render/SkeletalSprite.d.ts.map +1 -0
  58. package/dist/two-d/render/SkeletalSprite.js +189 -0
  59. package/dist/two-d/render/SkeletalSprite.js.map +1 -0
  60. package/dist/two-d/render/SpriteMotion.d.ts +121 -0
  61. package/dist/two-d/render/SpriteMotion.d.ts.map +1 -0
  62. package/dist/two-d/render/SpriteMotion.js +193 -0
  63. package/dist/two-d/render/SpriteMotion.js.map +1 -0
  64. package/dist/two-d/render/index.d.ts +4 -0
  65. package/dist/two-d/render/index.d.ts.map +1 -1
  66. package/dist/two-d/render/index.js +2 -0
  67. package/dist/two-d/render/index.js.map +1 -1
  68. package/dist/version.d.ts +1 -1
  69. package/dist/version.js +1 -1
  70. package/package.json +7 -2
  71. package/sbom.cdx.json +222 -222
@@ -0,0 +1,87 @@
1
+ /**
2
+ * SVG as inbound data (roadmap 398): sanitization, named scale variants, and group-split
3
+ * parts.
4
+ *
5
+ * An SVG is inbound data that can carry active content - `<script>`, event-handler
6
+ * attributes, `foreignObject` - the same way a save slot or a replay file is inbound data.
7
+ * `sanitizeSvg` refuses what it cannot prove inert, by name, conservatively: anything the
8
+ * scan does not recognize as inert is an error, never a silent pass, and the posture is the
9
+ * same one the saves and replay rules carry rather than a trust in the `file://` CSP to make
10
+ * the question moot.
11
+ *
12
+ * `svgScaleVariants` rasterizes one source once per named scale (1x, 2x, 3x), so a game
13
+ * picks the variant by device the way it picks an asset path, instead of every call site
14
+ * re-deciding a resolution multiplier. `splitSvgGroups` loads an SVG authored with named
15
+ * `<g>` groups as one standalone SVG per group - the natural authoring form for a skeletal
16
+ * puppet: one drawing, one source of truth, split at load.
17
+ *
18
+ * All three are string processing with no renderer: they run headless, and the compiled
19
+ * `data:` URI form is what they consume and produce.
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * import { sanitizeSvg, splitSvgGroups } from '@datamoc/mw_games/assets';
24
+ *
25
+ * const puppet = '<svg><g id=\"arm\"><rect/></g></svg>';
26
+ * const parts = splitSvgGroups(sanitizeSvg(puppet));
27
+ * console.log(Object.keys(parts)); // ['arm']
28
+ * ```
29
+ */
30
+ /**
31
+ * Refuse an SVG that is not proven inert, by name. The scan is deliberately conservative:
32
+ * it names what it refuses, and anything it cannot read as inert is an error rather than a
33
+ * silent pass. The source is returned unchanged once proven inert - sanitization here is a
34
+ * gate, not a rewrite; what a game authors is what a game gets.
35
+ */
36
+ export declare function sanitizeSvg(source: string): string;
37
+ export interface ScaleVariant {
38
+ /** the name a game picks the variant by, the way it picks an asset path */
39
+ name: string;
40
+ /** the rasterization resolution multiple, so a device picks its sharpness at load */
41
+ resolution: number;
42
+ }
43
+ export interface SvgVariant {
44
+ name: string;
45
+ /** a `data:image/svg\+xml` URI ready for the asset loader */
46
+ src: string;
47
+ /** the loader's own resolution hint, carried from the named scale */
48
+ resolution: number;
49
+ }
50
+ /**
51
+ * The `data:image/svg+xml` form of a source, ready for the loader.
52
+ *
53
+ * @example
54
+ * ```ts
55
+ * import { svgDataUri } from '@datamoc/mw_games/assets';
56
+ *
57
+ * console.log(svgDataUri('<svg/>').startsWith('data:image/svg+xml,')); // true
58
+ * ```
59
+ */
60
+ export declare function svgDataUri(source: string): string;
61
+ /**
62
+ * One source, one variant per named scale. Each variant is the same proven-inert source at
63
+ * its own resolution multiple, so the loader rasterizes each scale once and a game asks for
64
+ * the variant by name instead of re-deciding a multiplier at every call site.
65
+ */
66
+ /**
67
+ * One source, one variant per named scale.
68
+ *
69
+ * @example
70
+ * ```ts
71
+ * import { svgScaleVariants } from '@datamoc/mw_games/assets';
72
+ *
73
+ * const [sharp] = svgScaleVariants('<svg/>', [{ name: '3x', resolution: 3 }]);
74
+ * console.log(sharp.resolution); // 3
75
+ * ```
76
+ */
77
+ export declare function svgScaleVariants(source: string, scales: readonly ScaleVariant[]): SvgVariant[];
78
+ /**
79
+ * An SVG authored with named `<g id="...">` groups loads as one standalone SVG per group -
80
+ * the natural authoring form for a skeletal puppet: one drawing, one source of truth for
81
+ * palette and style, split at load. Each part keeps the original `<svg>` root attributes
82
+ * (viewBox included) and carries exactly one group's children.
83
+ *
84
+ * Refused by name: an empty id, a duplicate id, and any group the scan cannot balance.
85
+ */
86
+ export declare function splitSvgGroups(source: string): Record<string, string>;
87
+ //# sourceMappingURL=svg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svg.d.ts","sourceRoot":"","sources":["../../src/assets/svg.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAcH;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAIlD;AAED,MAAM,WAAW,YAAY;IAC5B,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,qFAAqF;IACrF,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,GAAG,EAAE,MAAM,CAAC;IACZ,qEAAqE;IACrE,UAAU,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;;GAIG;AACH;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,YAAY,EAAE,GAAG,UAAU,EAAE,CAa9F;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA2CrE"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * SVG as inbound data (roadmap 398): sanitization, named scale variants, and group-split
3
+ * parts.
4
+ *
5
+ * An SVG is inbound data that can carry active content - `<script>`, event-handler
6
+ * attributes, `foreignObject` - the same way a save slot or a replay file is inbound data.
7
+ * `sanitizeSvg` refuses what it cannot prove inert, by name, conservatively: anything the
8
+ * scan does not recognize as inert is an error, never a silent pass, and the posture is the
9
+ * same one the saves and replay rules carry rather than a trust in the `file://` CSP to make
10
+ * the question moot.
11
+ *
12
+ * `svgScaleVariants` rasterizes one source once per named scale (1x, 2x, 3x), so a game
13
+ * picks the variant by device the way it picks an asset path, instead of every call site
14
+ * re-deciding a resolution multiplier. `splitSvgGroups` loads an SVG authored with named
15
+ * `<g>` groups as one standalone SVG per group - the natural authoring form for a skeletal
16
+ * puppet: one drawing, one source of truth, split at load.
17
+ *
18
+ * All three are string processing with no renderer: they run headless, and the compiled
19
+ * `data:` URI form is what they consume and produce.
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * import { sanitizeSvg, splitSvgGroups } from '@datamoc/mw_games/assets';
24
+ *
25
+ * const puppet = '<svg><g id=\"arm\"><rect/></g></svg>';
26
+ * const parts = splitSvgGroups(sanitizeSvg(puppet));
27
+ * console.log(Object.keys(parts)); // ['arm']
28
+ * ```
29
+ */
30
+ /** active shapes and attributes a name-based scan refuses, by name, conservatively */
31
+ const REFUSED_PATTERNS = [
32
+ { name: '<script>', pattern: /<script[\s/>]/i },
33
+ { name: '<foreignObject>', pattern: /<foreignobject[\s/>]/i },
34
+ { name: '<iframe>', pattern: /<iframe[\s/>]/i },
35
+ { name: '<embed>', pattern: /<embed[\s/>]/i },
36
+ { name: '<object>', pattern: /<object[\s/>]/i },
37
+ { name: 'an event-handler attribute', pattern: /\son[a-z]+\s*=/i },
38
+ { name: 'a javascript: URL', pattern: /javascript\s*:/i },
39
+ { name: 'a data: URL of an active type', pattern: /data:(?:text\/html|application\/xml|image\/svg\+xml)/i },
40
+ ];
41
+ /**
42
+ * Refuse an SVG that is not proven inert, by name. The scan is deliberately conservative:
43
+ * it names what it refuses, and anything it cannot read as inert is an error rather than a
44
+ * silent pass. The source is returned unchanged once proven inert - sanitization here is a
45
+ * gate, not a rewrite; what a game authors is what a game gets.
46
+ */
47
+ export function sanitizeSvg(source) {
48
+ for (const { name, pattern } of REFUSED_PATTERNS)
49
+ if (pattern.test(source))
50
+ throw new Error(`SVG refused: contains ${name}`);
51
+ return source;
52
+ }
53
+ /**
54
+ * The `data:image/svg+xml` form of a source, ready for the loader.
55
+ *
56
+ * @example
57
+ * ```ts
58
+ * import { svgDataUri } from '@datamoc/mw_games/assets';
59
+ *
60
+ * console.log(svgDataUri('<svg/>').startsWith('data:image/svg+xml,')); // true
61
+ * ```
62
+ */
63
+ export function svgDataUri(source) {
64
+ return `data:image/svg\+xml,${encodeURIComponent(source)}`;
65
+ }
66
+ /**
67
+ * One source, one variant per named scale. Each variant is the same proven-inert source at
68
+ * its own resolution multiple, so the loader rasterizes each scale once and a game asks for
69
+ * the variant by name instead of re-deciding a multiplier at every call site.
70
+ */
71
+ /**
72
+ * One source, one variant per named scale.
73
+ *
74
+ * @example
75
+ * ```ts
76
+ * import { svgScaleVariants } from '@datamoc/mw_games/assets';
77
+ *
78
+ * const [sharp] = svgScaleVariants('<svg/>', [{ name: '3x', resolution: 3 }]);
79
+ * console.log(sharp.resolution); // 3
80
+ * ```
81
+ */
82
+ export function svgScaleVariants(source, scales) {
83
+ const inert = sanitizeSvg(source);
84
+ if (scales.length === 0)
85
+ throw new Error('SVG scale variants need at least one named scale');
86
+ const seen = new Set();
87
+ for (const scale of scales) {
88
+ if (!scale.name)
89
+ throw new Error('an SVG scale variant needs a name');
90
+ if (!Number.isFinite(scale.resolution) || scale.resolution <= 0)
91
+ throw new Error(`SVG scale variant ${scale.name} needs a positive resolution`);
92
+ if (seen.has(scale.name))
93
+ throw new Error(`duplicate SVG scale variant ${scale.name}`);
94
+ seen.add(scale.name);
95
+ }
96
+ const src = svgDataUri(inert);
97
+ return scales.map((scale) => ({ name: scale.name, src, resolution: scale.resolution }));
98
+ }
99
+ /**
100
+ * An SVG authored with named `<g id="...">` groups loads as one standalone SVG per group -
101
+ * the natural authoring form for a skeletal puppet: one drawing, one source of truth for
102
+ * palette and style, split at load. Each part keeps the original `<svg>` root attributes
103
+ * (viewBox included) and carries exactly one group's children.
104
+ *
105
+ * Refused by name: an empty id, a duplicate id, and any group the scan cannot balance.
106
+ */
107
+ export function splitSvgGroups(source) {
108
+ const inert = sanitizeSvg(source);
109
+ const root = /^([\s\S]*?)<svg([^>]*)>/i.exec(inert);
110
+ const close = inert.lastIndexOf('</svg>');
111
+ if (!root || close < 0)
112
+ throw new Error('SVG group split needs an <svg> root');
113
+ const body = inert.slice(root[0].length, close);
114
+ const parts = {};
115
+ let position = 0;
116
+ while (position < body.length) {
117
+ const open = /<g\b([^>]*?)(\/?)>/i.exec(body.slice(position));
118
+ if (!open)
119
+ break;
120
+ const attributes = open[1];
121
+ const id = /\bid\s*=\s*["']([^"']+)["']/i.exec(attributes)?.[1];
122
+ const contentStart = position + open.index + open[0].length;
123
+ if (open[2] === '/') {
124
+ //a self-closing group is an empty part, not a walk that never closes
125
+ if (!id)
126
+ throw new Error('SVG group split refuses a group with no id');
127
+ if (id in parts)
128
+ throw new Error(`SVG group split refuses a duplicate id ${id}`);
129
+ parts[id] = `${root[0]}</svg>`;
130
+ position = contentStart;
131
+ continue;
132
+ }
133
+ //walk forward balancing nested <g> opens against their closes
134
+ let depth = 1;
135
+ let cursor = contentStart;
136
+ let closer = '';
137
+ while (depth > 0 && cursor < body.length) {
138
+ const next = body.slice(cursor).match(/<g\b[^>]*>|<\/g\s*>/i);
139
+ if (!next)
140
+ throw new Error(`SVG group ${id ?? '<unnamed>'} never closes`);
141
+ if (next[0].startsWith('</')) {
142
+ depth--;
143
+ if (depth === 0)
144
+ closer = next[0];
145
+ }
146
+ else
147
+ depth++;
148
+ cursor += next.index + next[0].length;
149
+ }
150
+ const content = body.slice(contentStart, cursor - closer.length);
151
+ position = cursor;
152
+ if (!id)
153
+ throw new Error('SVG group split refuses a group with no id');
154
+ if (id in parts)
155
+ throw new Error(`SVG group split refuses a duplicate id ${id}`);
156
+ parts[id] = `${root[0]}${content}</svg>`;
157
+ }
158
+ if (Object.keys(parts).length === 0)
159
+ throw new Error('SVG group split found no named groups');
160
+ return parts;
161
+ }
162
+ //# sourceMappingURL=svg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svg.js","sourceRoot":"","sources":["../../src/assets/svg.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -22,4 +22,5 @@ export * as Audio from './audio/index.ts';
22
22
  export * as Simulation from './simulation/index.ts';
23
23
  export * as Mwl from './mwl/index.ts';
24
24
  export * as AI from './ai/index.ts';
25
+ export * as Skeleton from './skeleton/index.ts';
25
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -22,4 +22,5 @@ export * as Audio from './audio/index.js';
22
22
  export * as Simulation from './simulation/index.js';
23
23
  export * as Mwl from './mwl/index.js';
24
24
  export * as AI from './ai/index.js';
25
+ export * as Skeleton from './skeleton/index.js';
25
26
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,OAAO,KAAK,SAAS,MAAM,mBAAmB,CAAC;AAC/C,OAAO,KAAK,SAAS,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,IAAI,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC;AAC1C,OAAO,KAAK,UAAU,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC"}