opencode-mobile 1.2.13 → 1.3.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.
@@ -0,0 +1,543 @@
1
+ #!/usr/bin/env node
2
+ import { spawn, execSync } from "child_process";
3
+ import * as fs from "fs";
4
+ import * as path from "path";
5
+ import * as os from "os";
6
+ import { createInterface } from "readline";
7
+ const PROVIDERS = ["cloudflare", "ngrok", "localtunnel", "none"];
8
+ const CONFIG_DIR = path.join(os.homedir(), ".config", "opencode-mobile");
9
+ const CONFIG_FILE = path.join(CONFIG_DIR, "tunnel-config.json");
10
+ function parseArgs(args) {
11
+ const options = {
12
+ help: false,
13
+ noTui: false,
14
+ };
15
+ for (let i = 0; i < args.length; i++) {
16
+ const arg = args[i];
17
+ switch (arg) {
18
+ case "--help":
19
+ case "-h":
20
+ options.help = true;
21
+ break;
22
+ case "--no-tui":
23
+ options.noTui = true;
24
+ break;
25
+ case "--provider":
26
+ case "-p":
27
+ i++;
28
+ if (i < args.length) {
29
+ const provider = args[i];
30
+ if (PROVIDERS.includes(provider)) {
31
+ options.provider = provider;
32
+ }
33
+ }
34
+ break;
35
+ case "--authtoken":
36
+ case "-t":
37
+ i++;
38
+ if (i < args.length) {
39
+ options.authtoken = args[i];
40
+ }
41
+ break;
42
+ case "--domain":
43
+ case "-d":
44
+ i++;
45
+ if (i < args.length) {
46
+ options.domain = args[i];
47
+ }
48
+ break;
49
+ }
50
+ }
51
+ return options;
52
+ }
53
+ function showHelp() {
54
+ console.log(`
55
+ šŸš€ Tunnel Provider Setup for OpenCode Mobile
56
+
57
+ Usage: tunnel-setup [options]
58
+
59
+ Options:
60
+ -h, --help Show this help message
61
+ --no-tui Run in non-interactive mode (JSON output)
62
+ -p, --provider <name> Pre-select provider (cloudflare|ngrok|localtunnel|none)
63
+ -t, --authtoken <token> Set ngrok auth token (non-interactive)
64
+ -d, --domain <domain> Set custom domain for Cloudflare
65
+
66
+ Examples:
67
+ # Interactive setup
68
+ tunnel-setup
69
+
70
+ # Non-interactive with provider
71
+ tunnel-setup --no-tui --provider cloudflare
72
+
73
+ # Setup ngrok with token
74
+ tunnel-setup --no-tui --provider ngrok --authtoken YOUR_TOKEN
75
+
76
+ Providers:
77
+ ā˜ļø cloudflare Most secure, free tier available, custom domains supported
78
+ 🌐 ngrok Well-established, requires auth token
79
+ šŸš€ localtunnel Zero setup, pure JavaScript (dev only)
80
+ āŒ none Skip setup, configure manually later
81
+ `);
82
+ }
83
+ function prompt(question) {
84
+ const rl = createInterface({
85
+ input: process.stdin,
86
+ output: process.stdout,
87
+ });
88
+ return new Promise((resolve) => {
89
+ rl.question(question, (answer) => {
90
+ rl.close();
91
+ resolve(answer.trim());
92
+ });
93
+ });
94
+ }
95
+ function isCloudflaredInstalled() {
96
+ try {
97
+ execSync("which cloudflared", { stdio: "ignore" });
98
+ return true;
99
+ }
100
+ catch {
101
+ return false;
102
+ }
103
+ }
104
+ function isNgrokInstalled() {
105
+ try {
106
+ const packageJsonPath = path.join(process.cwd(), "package.json");
107
+ if (!fs.existsSync(packageJsonPath)) {
108
+ return false;
109
+ }
110
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
111
+ const deps = { ...packageJson.dependencies, ...packageJson.devDependencies };
112
+ return "@ngrok/ngrok" in deps;
113
+ }
114
+ catch {
115
+ return false;
116
+ }
117
+ }
118
+ async function installCloudflared() {
119
+ const platform = os.platform();
120
+ if (platform === "darwin") {
121
+ console.log("šŸ“¦ Installing cloudflared via Homebrew...");
122
+ try {
123
+ execSync("brew install cloudflared", { stdio: "inherit" });
124
+ return true;
125
+ }
126
+ catch (error) {
127
+ console.error("āŒ Failed to install cloudflared via Homebrew");
128
+ return false;
129
+ }
130
+ }
131
+ else if (platform === "linux") {
132
+ console.log("šŸ“¦ Installing cloudflared via curl...");
133
+ try {
134
+ execSync("curl -L --output /tmp/cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb && sudo dpkg -i /tmp/cloudflared.deb", { stdio: "inherit" });
135
+ return true;
136
+ }
137
+ catch (error) {
138
+ console.error("āŒ Failed to install cloudflared");
139
+ return false;
140
+ }
141
+ }
142
+ else {
143
+ console.log("āš ļø Automatic installation not supported on Windows");
144
+ console.log(" Please install cloudflared manually from:");
145
+ console.log(" https://github.com/cloudflare/cloudflared/releases");
146
+ return false;
147
+ }
148
+ }
149
+ async function runCloudflaredLogin() {
150
+ console.log("\nšŸ” Starting Cloudflare authentication...");
151
+ console.log(" A browser window will open. Please log in to your Cloudflare account.\n");
152
+ return new Promise((resolve) => {
153
+ const child = spawn("cloudflared", ["tunnel", "login"], {
154
+ stdio: "inherit",
155
+ });
156
+ child.on("close", (code) => {
157
+ resolve(code === 0);
158
+ });
159
+ });
160
+ }
161
+ async function installNgrokPackage() {
162
+ console.log("šŸ“¦ Installing @ngrok/ngrok package...");
163
+ try {
164
+ execSync("npm install @ngrok/ngrok", { stdio: "inherit" });
165
+ return true;
166
+ }
167
+ catch (error) {
168
+ console.error("āŒ Failed to install @ngrok/ngrok package");
169
+ return false;
170
+ }
171
+ }
172
+ function saveConfig(config) {
173
+ if (!fs.existsSync(CONFIG_DIR)) {
174
+ fs.mkdirSync(CONFIG_DIR, { recursive: true });
175
+ }
176
+ fs.writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2));
177
+ // Set restrictive permissions (owner read/write only)
178
+ try {
179
+ fs.chmodSync(CONFIG_FILE, 0o600);
180
+ }
181
+ catch {
182
+ // Ignore permission errors on Windows
183
+ }
184
+ }
185
+ function loadConfig() {
186
+ if (!fs.existsSync(CONFIG_FILE)) {
187
+ return null;
188
+ }
189
+ try {
190
+ const content = fs.readFileSync(CONFIG_FILE, "utf-8");
191
+ return JSON.parse(content);
192
+ }
193
+ catch {
194
+ return null;
195
+ }
196
+ }
197
+ async function setupCloudflare(options) {
198
+ if (options.noTui) {
199
+ // Non-interactive mode
200
+ if (!isCloudflaredInstalled()) {
201
+ const output = {
202
+ status: "error",
203
+ message: "cloudflared not installed",
204
+ action: "install_cloudflared",
205
+ instructions: "Install cloudflared from https://github.com/cloudflare/cloudflared/releases",
206
+ };
207
+ console.log(JSON.stringify(output, null, 2));
208
+ process.exit(1);
209
+ }
210
+ if (options.domain) {
211
+ // Custom domain setup
212
+ const config = {
213
+ provider: "cloudflare",
214
+ mode: "custom",
215
+ domain: options.domain,
216
+ tunnelName: `opencode-mobile-${options.domain.replace(/\./g, "-")}`,
217
+ };
218
+ saveConfig(config);
219
+ console.log(JSON.stringify({
220
+ status: "success",
221
+ message: "Cloudflare configured with custom domain",
222
+ config,
223
+ }, null, 2));
224
+ }
225
+ else {
226
+ // Free tier setup
227
+ const config = {
228
+ provider: "cloudflare",
229
+ mode: "free",
230
+ };
231
+ saveConfig(config);
232
+ console.log(JSON.stringify({
233
+ status: "success",
234
+ message: "Cloudflare configured for free tier (trycloudflare.com)",
235
+ config,
236
+ }, null, 2));
237
+ }
238
+ return;
239
+ }
240
+ // Interactive mode
241
+ console.log("\nā˜ļø Cloudflare Tunnel Setup\n");
242
+ if (!isCloudflaredInstalled()) {
243
+ console.log("āš ļø cloudflared is not installed.");
244
+ const install = await prompt("Would you like to install it now? (y/n): ");
245
+ if (install.toLowerCase() === "y") {
246
+ const success = await installCloudflared();
247
+ if (!success) {
248
+ console.log("\nāŒ Installation failed. Please install manually and try again.");
249
+ return;
250
+ }
251
+ }
252
+ else {
253
+ console.log("\nāŒ cloudflared is required. Setup cancelled.");
254
+ return;
255
+ }
256
+ }
257
+ console.log("\nāœ… cloudflared is installed!");
258
+ console.log("\nCloudflare offers two modes:");
259
+ console.log(" 1) Free tier (trycloudflare.com) - No account needed");
260
+ console.log(" 2) Custom domain - Requires Cloudflare account + domain\n");
261
+ const mode = await prompt("Select mode (1/2): ");
262
+ if (mode === "1") {
263
+ const config = {
264
+ provider: "cloudflare",
265
+ mode: "free",
266
+ };
267
+ saveConfig(config);
268
+ console.log("\nāœ… Cloudflare configured for free tier!");
269
+ console.log(" Your tunnel will use trycloudflare.com URLs.");
270
+ }
271
+ else if (mode === "2") {
272
+ console.log("\nšŸ” You'll need to authenticate with Cloudflare.");
273
+ const auth = await prompt("Start authentication now? (y/n): ");
274
+ if (auth.toLowerCase() === "y") {
275
+ const success = await runCloudflaredLogin();
276
+ if (!success) {
277
+ console.log("\nāŒ Authentication failed. Please try again.");
278
+ return;
279
+ }
280
+ }
281
+ const domain = options.domain || (await prompt("Enter your domain (e.g., mobile.example.com): "));
282
+ if (!domain) {
283
+ console.log("\nāŒ Domain is required for custom setup.");
284
+ return;
285
+ }
286
+ const config = {
287
+ provider: "cloudflare",
288
+ mode: "custom",
289
+ domain,
290
+ tunnelName: `opencode-mobile-${domain.replace(/\./g, "-")}`,
291
+ };
292
+ saveConfig(config);
293
+ console.log("\nāœ… Cloudflare configured with custom domain!");
294
+ console.log(` Domain: ${domain}`);
295
+ }
296
+ else {
297
+ console.log("\nāŒ Invalid selection. Setup cancelled.");
298
+ }
299
+ }
300
+ async function setupNgrok(options) {
301
+ if (options.noTui) {
302
+ // Non-interactive mode
303
+ if (!isNgrokInstalled()) {
304
+ const output = {
305
+ status: "error",
306
+ message: "@ngrok/ngrok package not installed",
307
+ action: "install_ngrok",
308
+ instructions: "Run: npm install @ngrok/ngrok",
309
+ };
310
+ console.log(JSON.stringify(output, null, 2));
311
+ process.exit(1);
312
+ }
313
+ if (!options.authtoken) {
314
+ const output = {
315
+ status: "error",
316
+ message: "ngrok auth token required",
317
+ action: "provide_authtoken",
318
+ instructions: "Get your auth token from https://dashboard.ngrok.com/get-started/your-authtoken",
319
+ };
320
+ console.log(JSON.stringify(output, null, 2));
321
+ process.exit(1);
322
+ }
323
+ // Configure auth token
324
+ try {
325
+ const ngrokModule = await import("@ngrok/ngrok");
326
+ await ngrokModule.authtoken(options.authtoken);
327
+ const config = {
328
+ provider: "ngrok",
329
+ authtokenConfigured: true,
330
+ };
331
+ saveConfig(config);
332
+ console.log(JSON.stringify({
333
+ status: "success",
334
+ message: "ngrok configured successfully",
335
+ config,
336
+ }, null, 2));
337
+ }
338
+ catch (error) {
339
+ console.log(JSON.stringify({
340
+ status: "error",
341
+ message: "Failed to configure ngrok",
342
+ error: error instanceof Error ? error.message : String(error),
343
+ }, null, 2));
344
+ process.exit(1);
345
+ }
346
+ return;
347
+ }
348
+ // Interactive mode
349
+ console.log("\n🌐 Ngrok Setup\n");
350
+ if (!isNgrokInstalled()) {
351
+ console.log("āš ļø @ngrok/ngrok package is not installed.");
352
+ const install = await prompt("Would you like to install it now? (y/n): ");
353
+ if (install.toLowerCase() === "y") {
354
+ const success = await installNgrokPackage();
355
+ if (!success) {
356
+ console.log("\nāŒ Installation failed. Please install manually:");
357
+ console.log(" npm install @ngrok/ngrok");
358
+ return;
359
+ }
360
+ }
361
+ else {
362
+ console.log("\nāŒ @ngrok/ngrok is required. Setup cancelled.");
363
+ return;
364
+ }
365
+ }
366
+ console.log("\nāœ… @ngrok/ngrok is installed!");
367
+ console.log("\nšŸ“ Ngrok requires an auth token.");
368
+ console.log(" 1. Sign up at https://ngrok.com");
369
+ console.log(" 2. Get your auth token from https://dashboard.ngrok.com/get-started/your-authtoken");
370
+ console.log(" 3. Enter it below (input will be hidden)\n");
371
+ const authtoken = options.authtoken || (await prompt("Auth token: "));
372
+ if (!authtoken) {
373
+ console.log("\nāŒ Auth token is required.");
374
+ return;
375
+ }
376
+ console.log("\nšŸ” Configuring ngrok...");
377
+ try {
378
+ const ngrokModule = await import("@ngrok/ngrok");
379
+ await ngrokModule.authtoken(authtoken);
380
+ const config = {
381
+ provider: "ngrok",
382
+ authtokenConfigured: true,
383
+ };
384
+ saveConfig(config);
385
+ console.log("\nāœ… Ngrok configured successfully!");
386
+ }
387
+ catch (error) {
388
+ console.error("\nāŒ Failed to configure ngrok:", error instanceof Error ? error.message : error);
389
+ }
390
+ }
391
+ async function setupLocaltunnel() {
392
+ console.log("\nšŸš€ Localtunnel Setup\n");
393
+ console.log("āœ… Localtunnel is ready to use!");
394
+ console.log("\nāš ļø Important Security Notice:");
395
+ console.log(" Localtunnel is a community project with known security concerns.");
396
+ console.log(" It's recommended for development only, not production use.\n");
397
+ console.log("Usage:");
398
+ console.log(" The plugin will automatically use localtunnel when configured.");
399
+ console.log(" No additional setup required.\n");
400
+ const config = {
401
+ provider: "localtunnel",
402
+ };
403
+ saveConfig(config);
404
+ console.log("āœ… Localtunnel configured!");
405
+ }
406
+ async function selectProvider() {
407
+ console.log("\nšŸš€ Tunnel Provider Setup\n");
408
+ console.log("Select a tunnel provider:\n");
409
+ console.log(" 1) ā˜ļø Cloudflare (Recommended)");
410
+ console.log(" • Most secure & trustworthy");
411
+ console.log(" • Free tier: trycloudflare.com (no account needed)");
412
+ console.log(" • Custom domains: requires Cloudflare account + domain");
413
+ console.log("");
414
+ console.log(" 2) 🌐 Ngrok");
415
+ console.log(" • Well-established, SOC 2 compliant");
416
+ console.log(" • Requires auth token (free signup)");
417
+ console.log(" • Limited free tier (interstitial page)");
418
+ console.log("");
419
+ console.log(" 3) šŸš€ Localtunnel");
420
+ console.log(" • Zero setup, pure JavaScript");
421
+ console.log(" • āš ļø Security concerns (use for dev only)");
422
+ console.log("");
423
+ console.log(" 4) āŒ None / Skip");
424
+ console.log(" • I'll configure tunnels manually later");
425
+ console.log("");
426
+ const choice = await prompt("Enter choice (1-4): ");
427
+ switch (choice) {
428
+ case "1":
429
+ return "cloudflare";
430
+ case "2":
431
+ return "ngrok";
432
+ case "3":
433
+ return "localtunnel";
434
+ case "4":
435
+ return "none";
436
+ default:
437
+ console.log("\nāŒ Invalid choice. Please try again.\n");
438
+ return selectProvider();
439
+ }
440
+ }
441
+ async function runTui() {
442
+ // Check for existing config
443
+ const existingConfig = loadConfig();
444
+ if (existingConfig) {
445
+ console.log("\nā„¹ļø Existing configuration found:");
446
+ console.log(` Provider: ${existingConfig.provider}`);
447
+ if (existingConfig.domain) {
448
+ console.log(` Domain: ${existingConfig.domain}`);
449
+ }
450
+ const overwrite = await prompt("\nOverwrite existing configuration? (y/n): ");
451
+ if (overwrite.toLowerCase() !== "y") {
452
+ console.log("\nSetup cancelled. Existing configuration preserved.");
453
+ return;
454
+ }
455
+ }
456
+ const provider = await selectProvider();
457
+ switch (provider) {
458
+ case "cloudflare":
459
+ await setupCloudflare({ help: false, noTui: false });
460
+ break;
461
+ case "ngrok":
462
+ await setupNgrok({ help: false, noTui: false });
463
+ break;
464
+ case "localtunnel":
465
+ await setupLocaltunnel();
466
+ break;
467
+ case "none":
468
+ console.log("\nāœ… Setup skipped. You can run this again anytime with:");
469
+ console.log(" npx tunnel-setup");
470
+ break;
471
+ }
472
+ console.log("\nšŸ’” Configuration saved to:");
473
+ console.log(` ${CONFIG_FILE}`);
474
+ }
475
+ async function runNoTui(options) {
476
+ if (!options.provider) {
477
+ console.log(JSON.stringify({
478
+ status: "error",
479
+ message: "Provider required in non-interactive mode",
480
+ usage: "tunnel-setup --no-tui --provider <cloudflare|ngrok|localtunnel|none>",
481
+ }, null, 2));
482
+ process.exit(1);
483
+ }
484
+ switch (options.provider) {
485
+ case "cloudflare":
486
+ await setupCloudflare(options);
487
+ break;
488
+ case "ngrok":
489
+ await setupNgrok(options);
490
+ break;
491
+ case "localtunnel":
492
+ await setupLocaltunnel();
493
+ break;
494
+ case "none":
495
+ console.log(JSON.stringify({
496
+ status: "success",
497
+ message: "Setup skipped",
498
+ }, null, 2));
499
+ break;
500
+ }
501
+ }
502
+ async function main(args) {
503
+ const options = parseArgs(args);
504
+ if (options.help) {
505
+ showHelp();
506
+ return;
507
+ }
508
+ try {
509
+ if (options.noTui) {
510
+ await runNoTui(options);
511
+ }
512
+ else {
513
+ await runTui();
514
+ }
515
+ }
516
+ catch (error) {
517
+ if (options.noTui) {
518
+ console.log(JSON.stringify({
519
+ status: "error",
520
+ message: error instanceof Error ? error.message : String(error),
521
+ }, null, 2));
522
+ }
523
+ else {
524
+ console.error("\nāŒ Error:", error instanceof Error ? error.message : error);
525
+ }
526
+ process.exit(1);
527
+ }
528
+ }
529
+ // Handle Ctrl+C gracefully
530
+ process.on("SIGINT", () => {
531
+ console.log("\n\nšŸ‘‹ Setup cancelled.");
532
+ process.exit(0);
533
+ });
534
+ process.on("SIGTERM", () => {
535
+ console.log("\n\nšŸ‘‹ Setup cancelled.");
536
+ process.exit(0);
537
+ });
538
+ // Run if called directly
539
+ if (import.meta.url === `file://${process.argv[1]}`) {
540
+ main(process.argv.slice(2));
541
+ }
542
+ export { parseArgs, showHelp, prompt, isCloudflaredInstalled, isNgrokInstalled, installCloudflared, installNgrokPackage, saveConfig, loadConfig, setupCloudflare, setupNgrok, setupLocaltunnel, selectProvider, runTui, runNoTui, main, };
543
+ //# sourceMappingURL=tunnel-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tunnel-setup.js","sourceRoot":"","sources":["../../../src/cli/tunnel-setup.ts"],"names":[],"mappings":"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"}
@@ -17,9 +17,6 @@ export declare function ensureNgrokReady(): Promise<{
17
17
  * Start an ngrok tunnel with multi-strategy fallback
18
18
  */
19
19
  export declare function startNgrokTunnel(config: TunnelConfig): Promise<TunnelInfo>;
20
- /**
21
- * Stop the ngrok tunnel
22
- */
23
20
  export declare function stopNgrokTunnel(): Promise<void>;
24
21
  /**
25
22
  * Stop ngrok (legacy name for compatibility)
@@ -1 +1 @@
1
- {"version":3,"file":"ngrok.d.ts","sourceRoot":"","sources":["../../../src/tunnel/ngrok.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAI1E;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,gBAAgB,CAAC,CA6F/D;AAoED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CA8C9F;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAyPhF;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAKrD;AAED;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAOzD;AAGD;;GAEG;AACH,wBAAgB,WAAW,IAAI,GAAG,CAEjC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI,CAE/C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAEpC"}
1
+ {"version":3,"file":"ngrok.d.ts","sourceRoot":"","sources":["../../../src/tunnel/ngrok.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAM1E;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,gBAAgB,CAAC,CA6F/D;AAoED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CA8C9F;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAmPhF;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAsBrD;AAED;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAOzD;AAGD;;GAEG;AACH,wBAAgB,WAAW,IAAI,GAAG,CAEjC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,GAAG,GAAG,IAAI,CAE/C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAEpC"}