@webflow/cloud-app 0.1.0 → 0.1.1-beta.bad4bbe.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 (56) hide show
  1. package/README.md +41 -61
  2. package/dist/assetVersionToken.d.ts +9 -0
  3. package/dist/assetVersionToken.d.ts.map +1 -0
  4. package/dist/assetVersionToken.js +37 -0
  5. package/dist/assetVersionToken.js.map +1 -0
  6. package/dist/config/package-json.d.ts +2 -2
  7. package/dist/frameworks/astro/astro5.d.ts +1 -0
  8. package/dist/frameworks/astro/astro5.d.ts.map +1 -1
  9. package/dist/frameworks/astro/astro5.js +5 -0
  10. package/dist/frameworks/astro/astro5.js.map +1 -1
  11. package/dist/frameworks/astro/astro6.d.ts +1 -0
  12. package/dist/frameworks/astro/astro6.d.ts.map +1 -1
  13. package/dist/frameworks/astro/astro6.js +5 -0
  14. package/dist/frameworks/astro/astro6.js.map +1 -1
  15. package/dist/frameworks/astro/astro7.d.ts +1 -0
  16. package/dist/frameworks/astro/astro7.d.ts.map +1 -1
  17. package/dist/frameworks/astro/astro7.js +5 -0
  18. package/dist/frameworks/astro/astro7.js.map +1 -1
  19. package/dist/frameworks/astro/templates/astro.config.webflow.ts +38 -1
  20. package/dist/frameworks/astro/templates/v5/astro.config.mjs.template +1 -0
  21. package/dist/frameworks/astro/templates/v6/astro.config.mjs.template +1 -0
  22. package/dist/frameworks/astro/templates/v7/astro.config.mjs.template +1 -0
  23. package/dist/frameworks/base.d.ts +19 -1
  24. package/dist/frameworks/base.d.ts.map +1 -1
  25. package/dist/frameworks/base.js +24 -0
  26. package/dist/frameworks/base.js.map +1 -1
  27. package/dist/frameworks/nextjs/index.d.ts +13 -0
  28. package/dist/frameworks/nextjs/index.d.ts.map +1 -1
  29. package/dist/frameworks/nextjs/index.js +41 -1
  30. package/dist/frameworks/nextjs/index.js.map +1 -1
  31. package/dist/frameworks/nextjs/supportPolicy.d.ts +28 -0
  32. package/dist/frameworks/nextjs/supportPolicy.d.ts.map +1 -0
  33. package/dist/frameworks/nextjs/supportPolicy.js +127 -0
  34. package/dist/frameworks/nextjs/supportPolicy.js.map +1 -0
  35. package/dist/frameworks/nextjs/templates/next.config.ts.template +1 -0
  36. package/dist/frameworks/nextjs/templates/next.config.webflow.ts +6 -1
  37. package/dist/frameworks/types.d.ts +14 -0
  38. package/dist/frameworks/types.d.ts.map +1 -1
  39. package/dist/index.d.ts +6 -0
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +14 -1
  42. package/dist/index.js.map +1 -1
  43. package/dist/pipeline.d.ts.map +1 -1
  44. package/dist/pipeline.js +13 -0
  45. package/dist/pipeline.js.map +1 -1
  46. package/dist/types.d.ts +2 -0
  47. package/dist/types.d.ts.map +1 -1
  48. package/package.json +1 -1
  49. package/dist/frameworks/astro/adapter-patches/ensure-fixed-cloudflare-adapter.d.ts +0 -36
  50. package/dist/frameworks/astro/adapter-patches/ensure-fixed-cloudflare-adapter.d.ts.map +0 -1
  51. package/dist/frameworks/astro/adapter-patches/ensure-fixed-cloudflare-adapter.js +0 -94
  52. package/dist/frameworks/astro/adapter-patches/ensure-fixed-cloudflare-adapter.js.map +0 -1
  53. package/dist/frameworks/astro/adapter-patches/strip-cloudflare-base-nesting.d.ts +0 -2
  54. package/dist/frameworks/astro/adapter-patches/strip-cloudflare-base-nesting.d.ts.map +0 -1
  55. package/dist/frameworks/astro/adapter-patches/strip-cloudflare-base-nesting.js +0 -97
  56. package/dist/frameworks/astro/adapter-patches/strip-cloudflare-base-nesting.js.map +0 -1
@@ -1,36 +0,0 @@
1
- import type { Logger, CommandRunner } from '../../../ports';
2
- export interface EnsureFixedCloudflareAdapterParams {
3
- log: Logger;
4
- runCommand: CommandRunner;
5
- cwd: string;
6
- /** e.g. `@astrojs/cloudflare`. */
7
- adapterName: string;
8
- /** The version spec we install/force, e.g. `^13.3.1` (Astro 6) or `^14.0.0` (Astro 7). */
9
- installVersion: string;
10
- /** First release with the base-path fix for this Astro line, e.g. `13.3.1` / `14.0.0`. */
11
- fixedFloor: string;
12
- /** The user's declared adapter spec (from package.json), or undefined if absent. */
13
- declaredVersion: string | undefined;
14
- }
15
- /**
16
- * Ensure the project resolves a `@astrojs/cloudflare` adapter at or above the release that
17
- * fixes the base-path bug (withastro/astro#16276, fixed in 13.3.1). Companion to
18
- * `stripCloudflareBaseNesting`: forcing a fixed adapter is what keeps the strip a rare
19
- * backstop rather than load-bearing — a buggy 13.0.0–13.3.0 adapter emits the client tree
20
- * WITHOUT the base prefix, so assets end up at the wrong URL no matter how we copy them.
21
- *
22
- * - Adapter absent → install our pinned version.
23
- * - Declared below the fixed floor, SAME major (e.g. Astro 6's `13.x` → `13.3.1`, a
24
- * non-breaking bump) → force-install the fixed version and warn.
25
- * - Declared below the floor but reaching the fix would CROSS a major → warn only; forcing a
26
- * major upgrade could break the build. (This is the only path Astro 7 can hit — a sub-14
27
- * adapter — and in practice it can't install anyway: `13.x` peers on `astro@^6`.)
28
- *
29
- * Note: we key off the declared range floor (`semver.coerce`), not the resolved version.
30
- * `npm install --save <pkg>@<range>` rewrites BOTH package.json and the lockfile entry for
31
- * this package, so a forced bump overrides a lockfile-pinned buggy version. The trade-off: a
32
- * wide range like `^13.0.0` that already resolves to a fixed `13.5.0` still coerces to
33
- * `13.0.0`, triggering a harmless, unnecessary reinstall.
34
- */
35
- export declare function ensureFixedCloudflareAdapter(params: EnsureFixedCloudflareAdapterParams): Promise<void>;
36
- //# sourceMappingURL=ensure-fixed-cloudflare-adapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ensure-fixed-cloudflare-adapter.d.ts","sourceRoot":"","sources":["../../../../src/frameworks/astro/adapter-patches/ensure-fixed-cloudflare-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG5D,MAAM,WAAW,kCAAkC;IACjD,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,aAAa,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,0FAA0F;IAC1F,cAAc,EAAE,MAAM,CAAC;IACvB,0FAA0F;IAC1F,UAAU,EAAE,MAAM,CAAC;IACnB,oFAAoF;IACpF,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,kCAAkC,GACzC,OAAO,CAAC,IAAI,CAAC,CAwCf"}
@@ -1,94 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.ensureFixedCloudflareAdapter = ensureFixedCloudflareAdapter;
37
- const semver = __importStar(require("semver"));
38
- const utils_1 = require("../../../utils");
39
- /**
40
- * Ensure the project resolves a `@astrojs/cloudflare` adapter at or above the release that
41
- * fixes the base-path bug (withastro/astro#16276, fixed in 13.3.1). Companion to
42
- * `stripCloudflareBaseNesting`: forcing a fixed adapter is what keeps the strip a rare
43
- * backstop rather than load-bearing — a buggy 13.0.0–13.3.0 adapter emits the client tree
44
- * WITHOUT the base prefix, so assets end up at the wrong URL no matter how we copy them.
45
- *
46
- * - Adapter absent → install our pinned version.
47
- * - Declared below the fixed floor, SAME major (e.g. Astro 6's `13.x` → `13.3.1`, a
48
- * non-breaking bump) → force-install the fixed version and warn.
49
- * - Declared below the floor but reaching the fix would CROSS a major → warn only; forcing a
50
- * major upgrade could break the build. (This is the only path Astro 7 can hit — a sub-14
51
- * adapter — and in practice it can't install anyway: `13.x` peers on `astro@^6`.)
52
- *
53
- * Note: we key off the declared range floor (`semver.coerce`), not the resolved version.
54
- * `npm install --save <pkg>@<range>` rewrites BOTH package.json and the lockfile entry for
55
- * this package, so a forced bump overrides a lockfile-pinned buggy version. The trade-off: a
56
- * wide range like `^13.0.0` that already resolves to a fixed `13.5.0` still coerces to
57
- * `13.0.0`, triggering a harmless, unnecessary reinstall.
58
- */
59
- async function ensureFixedCloudflareAdapter(params) {
60
- const { log, runCommand, cwd, adapterName, installVersion, fixedFloor, declaredVersion } = params;
61
- if (!declaredVersion) {
62
- log.warn(`Installing ${adapterName}@${installVersion} (required for Cloudflare deployment)...`);
63
- await (0, utils_1.npm)({
64
- log,
65
- runCommand,
66
- cwd,
67
- args: ['install', '--save', `${adapterName}@${installVersion}`],
68
- });
69
- return;
70
- }
71
- const resolved = semver.coerce(declaredVersion);
72
- if (!resolved || !semver.lt(resolved, fixedFloor)) {
73
- // Already fixed (or an unparseable spec we leave alone).
74
- return;
75
- }
76
- const floorMajor = semver.coerce(fixedFloor)?.major;
77
- if (resolved.major === floorMajor) {
78
- log.warn(`Detected ${adapterName}@${declaredVersion}, which has a known base-path bug ` +
79
- `(withastro/astro#16276) that breaks static assets on mounted apps. ` +
80
- `Upgrading to ${installVersion}.`);
81
- await (0, utils_1.npm)({
82
- log,
83
- runCommand,
84
- cwd,
85
- args: ['install', '--save', `${adapterName}@${installVersion}`],
86
- });
87
- }
88
- else {
89
- log.warn(`${adapterName}@${declaredVersion} predates the base-path fix in ${fixedFloor} and ` +
90
- `upgrading crosses a major version. Please upgrade to ${adapterName}@${installVersion} ` +
91
- `manually to avoid broken asset serving on mounted apps.`);
92
- }
93
- }
94
- //# sourceMappingURL=ensure-fixed-cloudflare-adapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ensure-fixed-cloudflare-adapter.js","sourceRoot":"","sources":["../../../../src/frameworks/astro/adapter-patches/ensure-fixed-cloudflare-adapter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,oEA0CC;AAjFD,+CAAiC;AAGjC,0CAAqC;AAgBrC;;;;;;;;;;;;;;;;;;;GAmBG;AACI,KAAK,UAAU,4BAA4B,CAChD,MAA0C;IAE1C,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC;IAElG,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,GAAG,CAAC,IAAI,CAAC,cAAc,WAAW,IAAI,cAAc,0CAA0C,CAAC,CAAC;QAChG,MAAM,IAAA,WAAG,EAAC;YACR,GAAG;YACH,UAAU;YACV,GAAG;YACH,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,WAAW,IAAI,cAAc,EAAE,CAAC;SAChE,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IAChD,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC;QAClD,yDAAyD;QACzD,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC;IACpD,IAAI,QAAQ,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;QAClC,GAAG,CAAC,IAAI,CACN,YAAY,WAAW,IAAI,eAAe,oCAAoC;YAC5E,qEAAqE;YACrE,gBAAgB,cAAc,GAAG,CACpC,CAAC;QACF,MAAM,IAAA,WAAG,EAAC;YACR,GAAG;YACH,UAAU;YACV,GAAG;YACH,IAAI,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,WAAW,IAAI,cAAc,EAAE,CAAC;SAChE,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,IAAI,CACN,GAAG,WAAW,IAAI,eAAe,kCAAkC,UAAU,OAAO;YAClF,wDAAwD,WAAW,IAAI,cAAc,GAAG;YACxF,yDAAyD,CAC5D,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare function stripCloudflareBaseNesting(cwd: string, assetsPath: string, cleanMountPath: string): string;
2
- //# sourceMappingURL=strip-cloudflare-base-nesting.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"strip-cloudflare-base-nesting.d.ts","sourceRoot":"","sources":["../../../../src/frameworks/astro/adapter-patches/strip-cloudflare-base-nesting.ts"],"names":[],"mappings":"AA6CA,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,GACrB,MAAM,CAkBR"}
@@ -1,97 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.stripCloudflareBaseNesting = stripCloudflareBaseNesting;
37
- const fs = __importStar(require("node:fs"));
38
- const path = __importStar(require("node:path"));
39
- /**
40
- * Resolve the real source subtree to copy static assets from, for Astro 6/7.
41
- *
42
- * WHY THIS EXISTS — it reconciles two facts that would otherwise double-nest assets:
43
- * 1. The generated `astro.config` sets `base = mountPath`, so a CORRECT `@astrojs/cloudflare`
44
- * (>= 13.3.1 on Astro 6, all 14.x on Astro 7) nests the client tree under
45
- * `dist/client/<mount>/`.
46
- * 2. `copyAssets` ALWAYS copies into `assets/<mount>/` — it re-appends the mount to the
47
- * destination unconditionally.
48
- * Handing `copyAssets` the whole `dist/client` makes (1)+(2) produce `assets/<mount>/<mount>/…`
49
- * → `/app/app/_astro` → 404. So we descend into the already-nested `dist/client/<mount>/`
50
- * first, and the copy re-applies the mount exactly once.
51
- *
52
- * Behavior by adapter:
53
- * - Fixed adapter (the normal case): `<assetsPath>/<mount>/_astro` exists → the whole client
54
- * tree really is nested there → descend into `<assetsPath>/<mount>`.
55
- * - Buggy pre-13.3.1 adapter that emitted a FLAT tree (rare — `ensureFixedCloudflareAdapter`
56
- * forces a fixed version, so this only survives a version we could not safely bump):
57
- * no nested `_astro` → return `assetsPath` unchanged (copy the flat tree as-is).
58
- * We key off the nested bundled-assets dir (`_astro`), NOT merely `<assetsPath>/<mount>`
59
- * existing: on a flat build a same-named page route (e.g. a `src/pages/<mount>/` route) also
60
- * produces `<assetsPath>/<mount>`, and descending into it would silently drop `_astro` and
61
- * every other top-level output. Handles any nesting depth, including multi-segment mounts.
62
- *
63
- * NOTE: this is REQUIRED on every deploy with a nesting (i.e. fixed) adapter — it is NOT a
64
- * buggy-adapter workaround. Removing it must be paired with removing the destination-side
65
- * mount re-append in `copyAssets`; deleting only one reintroduces the double-nest 404.
66
- *
67
- * Background: withastro/astro#16276 (base-path bug in `@astrojs/cloudflare` 13.0.0–13.3.0,
68
- * fixed in 13.3.1; all 14.x are fixed).
69
- *
70
- * @param cwd - project/workspace root that `assetsPath` is relative to.
71
- * @param assetsPath - the framework's static assets path (e.g. `dist/client`), relative to `cwd`.
72
- * @param cleanMountPath - the mount path with leading/trailing slashes trimmed.
73
- * @returns the (possibly deeper) assets path, relative to `cwd`.
74
- */
75
- /** True when `abs` is an existing directory (never throws). */
76
- function isDirectory(abs) {
77
- const stat = fs.statSync(abs, { throwIfNoEntry: false });
78
- return stat?.isDirectory() === true;
79
- }
80
- function stripCloudflareBaseNesting(cwd, assetsPath, cleanMountPath) {
81
- if (!cleanMountPath) {
82
- return assetsPath;
83
- }
84
- // With a fixed adapter the whole client tree nests under exactly this known
85
- // (possibly multi-segment) mount path. Only descend when the nested dir is the
86
- // real client root — i.e. it contains the bundled-assets dir (`_astro`). A bare
87
- // `<assetsPath>/<mount>` can also be a same-named page route on a flat build, and
88
- // descending into that would drop `_astro` and every other top-level output.
89
- const candidate = `${assetsPath}/${cleanMountPath}`;
90
- const candidateAbs = path.join(cwd, candidate);
91
- const nestedBundle = path.join(candidateAbs, '_astro');
92
- if (isDirectory(candidateAbs) && isDirectory(nestedBundle)) {
93
- return candidate;
94
- }
95
- return assetsPath;
96
- }
97
- //# sourceMappingURL=strip-cloudflare-base-nesting.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"strip-cloudflare-base-nesting.js","sourceRoot":"","sources":["../../../../src/frameworks/astro/adapter-patches/strip-cloudflare-base-nesting.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6CA,gEAsBC;AAnED,4CAA8B;AAC9B,gDAAkC;AAElC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,+DAA+D;AAC/D,SAAS,WAAW,CAAC,GAAW;IAC9B,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,OAAO,IAAI,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;AACtC,CAAC;AAED,SAAgB,0BAA0B,CACxC,GAAW,EACX,UAAkB,EAClB,cAAsB;IAEtB,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,4EAA4E;IAC5E,+EAA+E;IAC/E,gFAAgF;IAChF,kFAAkF;IAClF,6EAA6E;IAC7E,MAAM,SAAS,GAAG,GAAG,UAAU,IAAI,cAAc,EAAE,CAAC;IACpD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IACvD,IAAI,WAAW,CAAC,YAAY,CAAC,IAAI,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;QAC3D,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC"}