easyoref 1.21.8 → 1.21.11
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.
- package/dist/bin.d.ts +2 -1
- package/dist/bin.d.ts.map +1 -1
- package/dist/bin.js +31 -3
- package/dist/bin.js.map +1 -1
- package/dist/service.js +165 -0
- package/dist/service.js.map +1 -0
- package/package.json +1 -1
package/dist/bin.d.ts
CHANGED
|
@@ -5,9 +5,10 @@
|
|
|
5
5
|
* easyoref — run the bot (foreground)
|
|
6
6
|
* easyoref run — same as above
|
|
7
7
|
* easyoref init — interactive setup wizard
|
|
8
|
+
* easyoref update — update to latest version
|
|
8
9
|
* easyoref install — create systemd service + start
|
|
9
10
|
* easyoref uninstall — remove systemd service
|
|
10
|
-
* easyoref start — start service
|
|
11
|
+
* easyoref start — start service
|
|
11
12
|
* easyoref stop — stop service
|
|
12
13
|
* easyoref restart — restart service
|
|
13
14
|
* easyoref status — show service status
|
package/dist/bin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;GAcG"}
|
package/dist/bin.js
CHANGED
|
@@ -5,14 +5,16 @@
|
|
|
5
5
|
* easyoref — run the bot (foreground)
|
|
6
6
|
* easyoref run — same as above
|
|
7
7
|
* easyoref init — interactive setup wizard
|
|
8
|
+
* easyoref update — update to latest version
|
|
8
9
|
* easyoref install — create systemd service + start
|
|
9
10
|
* easyoref uninstall — remove systemd service
|
|
10
|
-
* easyoref start — start service
|
|
11
|
+
* easyoref start — start service
|
|
11
12
|
* easyoref stop — stop service
|
|
12
13
|
* easyoref restart — restart service
|
|
13
14
|
* easyoref status — show service status
|
|
14
15
|
* easyoref logs — follow service logs
|
|
15
16
|
*/
|
|
17
|
+
import { execSync } from "node:child_process";
|
|
16
18
|
const command = process.argv[2];
|
|
17
19
|
switch (command) {
|
|
18
20
|
case "init": {
|
|
@@ -20,6 +22,32 @@ switch (command) {
|
|
|
20
22
|
await init();
|
|
21
23
|
break;
|
|
22
24
|
}
|
|
25
|
+
case "update": {
|
|
26
|
+
console.log("\n🚀 Updating EasyOref...\n");
|
|
27
|
+
try {
|
|
28
|
+
console.log(" → sudo npm install -g easyoref@latest");
|
|
29
|
+
execSync("sudo npm install -g easyoref@latest", { stdio: "inherit" });
|
|
30
|
+
// Ensure redis is running
|
|
31
|
+
try {
|
|
32
|
+
execSync("docker inspect easyoref-redis --format '{{.State.Running}}' 2>/dev/null | grep -q true", { stdio: "pipe" });
|
|
33
|
+
console.log("\n → redis already running");
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
console.log("\n → docker run redis");
|
|
37
|
+
execSync("docker run -d --name easyoref-redis --restart unless-stopped " +
|
|
38
|
+
"-v easyoref-redis:/data " +
|
|
39
|
+
"redis:7-alpine redis-server --appendonly yes --maxmemory 64mb --maxmemory-policy allkeys-lru", { stdio: "inherit" });
|
|
40
|
+
}
|
|
41
|
+
console.log("\n → sudo systemctl restart easyoref");
|
|
42
|
+
execSync("sudo systemctl restart easyoref", { stdio: "inherit" });
|
|
43
|
+
console.log("\n✅ EasyOref updated successfully!");
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
console.error("\n❌ Update failed:", err);
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
23
51
|
case "install": {
|
|
24
52
|
const svc = await import("./service.js");
|
|
25
53
|
svc.install();
|
|
@@ -63,11 +91,12 @@ switch (command) {
|
|
|
63
91
|
Usage:
|
|
64
92
|
easyoref Run the bot (foreground)
|
|
65
93
|
easyoref init Interactive setup wizard
|
|
94
|
+
easyoref update Update to latest version
|
|
66
95
|
|
|
67
96
|
Service management:
|
|
68
97
|
easyoref install Create systemd service & start
|
|
69
98
|
easyoref uninstall Remove systemd service
|
|
70
|
-
easyoref start Start service
|
|
99
|
+
easyoref start Start service
|
|
71
100
|
easyoref stop Stop service
|
|
72
101
|
easyoref restart Restart service
|
|
73
102
|
easyoref status Show service status
|
|
@@ -78,5 +107,4 @@ switch (command) {
|
|
|
78
107
|
default:
|
|
79
108
|
await import("./bot.js");
|
|
80
109
|
}
|
|
81
|
-
export {};
|
|
82
110
|
//# sourceMappingURL=bin.js.map
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
|
package/dist/service.js
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EasyOref — systemd service management (à la Homebridge)
|
|
3
|
+
*
|
|
4
|
+
* easyoref install — create & enable systemd service, then start
|
|
5
|
+
* easyoref uninstall — stop & remove systemd service
|
|
6
|
+
* easyoref start — start the service (install first if needed)
|
|
7
|
+
* easyoref stop — stop the service
|
|
8
|
+
* easyoref restart — restart the service
|
|
9
|
+
* easyoref status — show service status
|
|
10
|
+
* easyoref logs — follow journal logs
|
|
11
|
+
*/
|
|
12
|
+
import { execSync, spawnSync } from "node:child_process";
|
|
13
|
+
import { existsSync, writeFileSync } from "node:fs";
|
|
14
|
+
import { homedir } from "node:os";
|
|
15
|
+
import { join } from "node:path";
|
|
16
|
+
const SERVICE_NAME = "easyoref";
|
|
17
|
+
const UNIT_PATH = `/etc/systemd/system/${SERVICE_NAME}.service`;
|
|
18
|
+
const CONFIG_DIR = join(homedir(), ".easyoref");
|
|
19
|
+
const CONFIG_PATH = join(CONFIG_DIR, "config.yaml");
|
|
20
|
+
function whichBin() {
|
|
21
|
+
try {
|
|
22
|
+
return execSync("which easyoref", { encoding: "utf-8" }).trim();
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// Fallback: resolve from npm global
|
|
26
|
+
try {
|
|
27
|
+
return execSync("npm bin -g", { encoding: "utf-8" }).trim() + "/easyoref";
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return "/usr/bin/easyoref";
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function whichNode() {
|
|
35
|
+
try {
|
|
36
|
+
return execSync("which node", { encoding: "utf-8" }).trim();
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return "/usr/bin/node";
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function isRoot() {
|
|
43
|
+
return process.getuid?.() === 0;
|
|
44
|
+
}
|
|
45
|
+
function sudoExec(cmd) {
|
|
46
|
+
const result = spawnSync("sudo", cmd.split(" "), {
|
|
47
|
+
stdio: "inherit",
|
|
48
|
+
});
|
|
49
|
+
if (result.status !== 0) {
|
|
50
|
+
console.error(`❌ Command failed: sudo ${cmd}`);
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function exec(cmd) {
|
|
55
|
+
const result = spawnSync(cmd.split(" ")[0], cmd.split(" ").slice(1), {
|
|
56
|
+
stdio: "inherit",
|
|
57
|
+
});
|
|
58
|
+
if (result.status !== 0) {
|
|
59
|
+
process.exit(result.status ?? 1);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function isInstalled() {
|
|
63
|
+
return existsSync(UNIT_PATH);
|
|
64
|
+
}
|
|
65
|
+
function generateUnit() {
|
|
66
|
+
const bin = whichBin();
|
|
67
|
+
const node = whichNode();
|
|
68
|
+
const user = process.env.USER || process.env.LOGNAME || "pi";
|
|
69
|
+
const home = homedir();
|
|
70
|
+
return `[Unit]
|
|
71
|
+
Description=EasyOref Telegram Bot
|
|
72
|
+
After=network-online.target
|
|
73
|
+
Wants=network-online.target
|
|
74
|
+
|
|
75
|
+
[Service]
|
|
76
|
+
Type=simple
|
|
77
|
+
User=${user}
|
|
78
|
+
Environment=HOME=${home}
|
|
79
|
+
Environment=NODE_ENV=production
|
|
80
|
+
ExecStart=${node} ${bin} run
|
|
81
|
+
WorkingDirectory=${home}
|
|
82
|
+
Restart=always
|
|
83
|
+
RestartSec=10
|
|
84
|
+
|
|
85
|
+
[Install]
|
|
86
|
+
WantedBy=multi-user.target
|
|
87
|
+
`;
|
|
88
|
+
}
|
|
89
|
+
// ── Commands ─────────────────────────────────────────────
|
|
90
|
+
export function install() {
|
|
91
|
+
if (!existsSync(CONFIG_PATH)) {
|
|
92
|
+
console.error(`❌ Config not found at ${CONFIG_PATH}`);
|
|
93
|
+
console.error(` Run: easyoref init`);
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
96
|
+
console.log(`📦 Installing ${SERVICE_NAME} systemd service...`);
|
|
97
|
+
const unit = generateUnit();
|
|
98
|
+
const tmpPath = `/tmp/${SERVICE_NAME}.service`;
|
|
99
|
+
writeFileSync(tmpPath, unit);
|
|
100
|
+
sudoExec(`cp ${tmpPath} ${UNIT_PATH}`);
|
|
101
|
+
sudoExec("systemctl daemon-reload");
|
|
102
|
+
sudoExec(`systemctl enable ${SERVICE_NAME}`);
|
|
103
|
+
sudoExec(`systemctl start ${SERVICE_NAME}`);
|
|
104
|
+
console.log(`✅ Service installed and started`);
|
|
105
|
+
console.log(` Config: ${CONFIG_PATH}`);
|
|
106
|
+
console.log(` Logs: easyoref logs`);
|
|
107
|
+
console.log(` Status: easyoref status`);
|
|
108
|
+
}
|
|
109
|
+
export function uninstall() {
|
|
110
|
+
if (!isInstalled()) {
|
|
111
|
+
console.log("ℹ️ Service not installed");
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
console.log(`🗑 Removing ${SERVICE_NAME} systemd service...`);
|
|
115
|
+
sudoExec(`systemctl stop ${SERVICE_NAME}`);
|
|
116
|
+
sudoExec(`systemctl disable ${SERVICE_NAME}`);
|
|
117
|
+
sudoExec(`rm ${UNIT_PATH}`);
|
|
118
|
+
sudoExec("systemctl daemon-reload");
|
|
119
|
+
console.log("✅ Service removed");
|
|
120
|
+
}
|
|
121
|
+
export function start() {
|
|
122
|
+
if (!isInstalled()) {
|
|
123
|
+
console.log("Service not installed — installing first...");
|
|
124
|
+
install();
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
sudoExec(`systemctl start ${SERVICE_NAME}`);
|
|
128
|
+
console.log("✅ Started");
|
|
129
|
+
}
|
|
130
|
+
export function stop() {
|
|
131
|
+
if (!isInstalled()) {
|
|
132
|
+
console.log("ℹ️ Service not installed");
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
sudoExec(`systemctl stop ${SERVICE_NAME}`);
|
|
136
|
+
console.log("✅ Stopped");
|
|
137
|
+
}
|
|
138
|
+
export function restart() {
|
|
139
|
+
if (!isInstalled()) {
|
|
140
|
+
console.log("Service not installed — installing first...");
|
|
141
|
+
install();
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
sudoExec(`systemctl restart ${SERVICE_NAME}`);
|
|
145
|
+
console.log("✅ Restarted");
|
|
146
|
+
}
|
|
147
|
+
export function status() {
|
|
148
|
+
if (!isInstalled()) {
|
|
149
|
+
console.log("ℹ️ Service not installed. Run: easyoref install");
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
spawnSync("systemctl", ["status", SERVICE_NAME, "--no-pager"], {
|
|
153
|
+
stdio: "inherit",
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
export function logs() {
|
|
157
|
+
if (!isInstalled()) {
|
|
158
|
+
console.log("ℹ️ Service not installed. Run: easyoref install");
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
spawnSync("journalctl", ["-u", SERVICE_NAME, "-f", "--no-pager", "-o", "cat"], {
|
|
162
|
+
stdio: "inherit",
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,YAAY,GAAG,UAAU,CAAC;AAChC,MAAM,SAAS,GAAG,uBAAuB,YAAY,UAAU,CAAC;AAChE,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAChD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEpD,SAAS,QAAQ;IACf,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,oCAAoC;QACpC,IAAI,CAAC;YACH,OAAO,QAAQ,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,WAAW,CAAC;QAC5E,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,mBAAmB,CAAC;QAC7B,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,SAAS;IAChB,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,eAAe,CAAC;IACzB,CAAC;AACH,CAAC;AAED,SAAS,MAAM;IACb,OAAO,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW;IAC3B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;QAC/C,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,KAAK,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,IAAI,CAAC,GAAW;IACvB,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QACnE,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC;IAC7D,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,OAAO;;;;;;;OAOF,IAAI;mBACQ,IAAI;;YAEX,IAAI,IAAI,GAAG;mBACJ,IAAI;;;;;;CAMtB,CAAC;AACF,CAAC;AAED,4DAA4D;AAE5D,MAAM,UAAU,OAAO;IACrB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,yBAAyB,WAAW,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iBAAiB,YAAY,qBAAqB,CAAC,CAAC;IAEhE,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,QAAQ,YAAY,UAAU,CAAC;IAC/C,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAE7B,QAAQ,CAAC,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC,CAAC;IACvC,QAAQ,CAAC,yBAAyB,CAAC,CAAC;IACpC,QAAQ,CAAC,oBAAoB,YAAY,EAAE,CAAC,CAAC;IAC7C,QAAQ,CAAC,mBAAmB,YAAY,EAAE,CAAC,CAAC;IAE5C,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,cAAc,WAAW,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,gBAAgB,YAAY,qBAAqB,CAAC,CAAC;IAE/D,QAAQ,CAAC,kBAAkB,YAAY,EAAE,CAAC,CAAC;IAC3C,QAAQ,CAAC,qBAAqB,YAAY,EAAE,CAAC,CAAC;IAC9C,QAAQ,CAAC,MAAM,SAAS,EAAE,CAAC,CAAC;IAC5B,QAAQ,CAAC,yBAAyB,CAAC,CAAC;IAEpC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,KAAK;IACnB,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAC3D,OAAO,EAAE,CAAC;QACV,OAAO;IACT,CAAC;IACD,QAAQ,CAAC,mBAAmB,YAAY,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,IAAI;IAClB,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO;IACT,CAAC;IACD,QAAQ,CAAC,kBAAkB,YAAY,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAC3D,OAAO,EAAE,CAAC;QACV,OAAO;IACT,CAAC;IACD,QAAQ,CAAC,qBAAqB,YAAY,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,MAAM;IACpB,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAChE,OAAO;IACT,CAAC;IACD,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE;QAC7D,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,IAAI;IAClB,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAChE,OAAO;IACT,CAAC;IACD,SAAS,CACP,YAAY,EACZ,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,CAAC,EACrD;QACE,KAAK,EAAE,SAAS;KACjB,CACF,CAAC;AACJ,CAAC"}
|