arise-browser 0.1.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 (148) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +247 -0
  3. package/deploy/neko/CONTEXT.md +37 -0
  4. package/deploy/neko/arise-browser.service +13 -0
  5. package/deploy/neko/neko.yaml +12 -0
  6. package/deploy/neko/openbox.xml +763 -0
  7. package/deploy/neko/policies.json +28 -0
  8. package/deploy/neko/pulseaudio.pa +16 -0
  9. package/deploy/neko/setup.sh +308 -0
  10. package/deploy/neko/xorg.conf +118 -0
  11. package/dist/bin/arise-browser.d.ts +26 -0
  12. package/dist/bin/arise-browser.d.ts.map +1 -0
  13. package/dist/bin/arise-browser.js +224 -0
  14. package/dist/bin/arise-browser.js.map +1 -0
  15. package/dist/src/browser/action-executor.d.ts +98 -0
  16. package/dist/src/browser/action-executor.d.ts.map +1 -0
  17. package/dist/src/browser/action-executor.js +2726 -0
  18. package/dist/src/browser/action-executor.js.map +1 -0
  19. package/dist/src/browser/behavior-recorder.d.ts +61 -0
  20. package/dist/src/browser/behavior-recorder.d.ts.map +1 -0
  21. package/dist/src/browser/behavior-recorder.js +442 -0
  22. package/dist/src/browser/behavior-recorder.js.map +1 -0
  23. package/dist/src/browser/browser-session.d.ts +202 -0
  24. package/dist/src/browser/browser-session.d.ts.map +1 -0
  25. package/dist/src/browser/browser-session.js +1647 -0
  26. package/dist/src/browser/browser-session.js.map +1 -0
  27. package/dist/src/browser/config.d.ts +43 -0
  28. package/dist/src/browser/config.d.ts.map +1 -0
  29. package/dist/src/browser/config.js +59 -0
  30. package/dist/src/browser/config.js.map +1 -0
  31. package/dist/src/browser/page-snapshot.d.ts +38 -0
  32. package/dist/src/browser/page-snapshot.d.ts.map +1 -0
  33. package/dist/src/browser/page-snapshot.js +241 -0
  34. package/dist/src/browser/page-snapshot.js.map +1 -0
  35. package/dist/src/browser/scripts/behavior_tracker.js +424 -0
  36. package/dist/src/browser/scripts/unified_analyzer.js +1576 -0
  37. package/dist/src/index.d.ts +15 -0
  38. package/dist/src/index.d.ts.map +1 -0
  39. package/dist/src/index.js +15 -0
  40. package/dist/src/index.js.map +1 -0
  41. package/dist/src/lock.d.ts +11 -0
  42. package/dist/src/lock.d.ts.map +1 -0
  43. package/dist/src/lock.js +47 -0
  44. package/dist/src/lock.js.map +1 -0
  45. package/dist/src/logger.d.ts +17 -0
  46. package/dist/src/logger.d.ts.map +1 -0
  47. package/dist/src/logger.js +29 -0
  48. package/dist/src/logger.js.map +1 -0
  49. package/dist/src/server/middleware/auth.d.ts +6 -0
  50. package/dist/src/server/middleware/auth.d.ts.map +1 -0
  51. package/dist/src/server/middleware/auth.js +24 -0
  52. package/dist/src/server/middleware/auth.js.map +1 -0
  53. package/dist/src/server/route-utils.d.ts +15 -0
  54. package/dist/src/server/route-utils.d.ts.map +1 -0
  55. package/dist/src/server/route-utils.js +33 -0
  56. package/dist/src/server/route-utils.js.map +1 -0
  57. package/dist/src/server/routes/action.d.ts +5 -0
  58. package/dist/src/server/routes/action.d.ts.map +1 -0
  59. package/dist/src/server/routes/action.js +69 -0
  60. package/dist/src/server/routes/action.js.map +1 -0
  61. package/dist/src/server/routes/actions.d.ts +3 -0
  62. package/dist/src/server/routes/actions.d.ts.map +1 -0
  63. package/dist/src/server/routes/actions.js +53 -0
  64. package/dist/src/server/routes/actions.js.map +1 -0
  65. package/dist/src/server/routes/cookies.d.ts +3 -0
  66. package/dist/src/server/routes/cookies.d.ts.map +1 -0
  67. package/dist/src/server/routes/cookies.js +27 -0
  68. package/dist/src/server/routes/cookies.js.map +1 -0
  69. package/dist/src/server/routes/download.d.ts +3 -0
  70. package/dist/src/server/routes/download.d.ts.map +1 -0
  71. package/dist/src/server/routes/download.js +35 -0
  72. package/dist/src/server/routes/download.js.map +1 -0
  73. package/dist/src/server/routes/evaluate.d.ts +3 -0
  74. package/dist/src/server/routes/evaluate.d.ts.map +1 -0
  75. package/dist/src/server/routes/evaluate.js +27 -0
  76. package/dist/src/server/routes/evaluate.js.map +1 -0
  77. package/dist/src/server/routes/health.d.ts +3 -0
  78. package/dist/src/server/routes/health.d.ts.map +1 -0
  79. package/dist/src/server/routes/health.js +11 -0
  80. package/dist/src/server/routes/health.js.map +1 -0
  81. package/dist/src/server/routes/navigate.d.ts +3 -0
  82. package/dist/src/server/routes/navigate.d.ts.map +1 -0
  83. package/dist/src/server/routes/navigate.js +36 -0
  84. package/dist/src/server/routes/navigate.js.map +1 -0
  85. package/dist/src/server/routes/page-model.d.ts +3 -0
  86. package/dist/src/server/routes/page-model.d.ts.map +1 -0
  87. package/dist/src/server/routes/page-model.js +22 -0
  88. package/dist/src/server/routes/page-model.js.map +1 -0
  89. package/dist/src/server/routes/pdf.d.ts +3 -0
  90. package/dist/src/server/routes/pdf.d.ts.map +1 -0
  91. package/dist/src/server/routes/pdf.js +20 -0
  92. package/dist/src/server/routes/pdf.js.map +1 -0
  93. package/dist/src/server/routes/recording.d.ts +5 -0
  94. package/dist/src/server/routes/recording.d.ts.map +1 -0
  95. package/dist/src/server/routes/recording.js +217 -0
  96. package/dist/src/server/routes/recording.js.map +1 -0
  97. package/dist/src/server/routes/screenshot.d.ts +3 -0
  98. package/dist/src/server/routes/screenshot.d.ts.map +1 -0
  99. package/dist/src/server/routes/screenshot.js +32 -0
  100. package/dist/src/server/routes/screenshot.js.map +1 -0
  101. package/dist/src/server/routes/snapshot.d.ts +3 -0
  102. package/dist/src/server/routes/snapshot.d.ts.map +1 -0
  103. package/dist/src/server/routes/snapshot.js +454 -0
  104. package/dist/src/server/routes/snapshot.js.map +1 -0
  105. package/dist/src/server/routes/tab-lock.d.ts +3 -0
  106. package/dist/src/server/routes/tab-lock.d.ts.map +1 -0
  107. package/dist/src/server/routes/tab-lock.js +30 -0
  108. package/dist/src/server/routes/tab-lock.js.map +1 -0
  109. package/dist/src/server/routes/tab.d.ts +3 -0
  110. package/dist/src/server/routes/tab.d.ts.map +1 -0
  111. package/dist/src/server/routes/tab.js +47 -0
  112. package/dist/src/server/routes/tab.js.map +1 -0
  113. package/dist/src/server/routes/tabs.d.ts +3 -0
  114. package/dist/src/server/routes/tabs.d.ts.map +1 -0
  115. package/dist/src/server/routes/tabs.js +13 -0
  116. package/dist/src/server/routes/tabs.js.map +1 -0
  117. package/dist/src/server/routes/text.d.ts +3 -0
  118. package/dist/src/server/routes/text.d.ts.map +1 -0
  119. package/dist/src/server/routes/text.js +20 -0
  120. package/dist/src/server/routes/text.js.map +1 -0
  121. package/dist/src/server/routes/upload.d.ts +3 -0
  122. package/dist/src/server/routes/upload.d.ts.map +1 -0
  123. package/dist/src/server/routes/upload.js +38 -0
  124. package/dist/src/server/routes/upload.js.map +1 -0
  125. package/dist/src/server/server.d.ts +7 -0
  126. package/dist/src/server/server.d.ts.map +1 -0
  127. package/dist/src/server/server.js +69 -0
  128. package/dist/src/server/server.js.map +1 -0
  129. package/dist/src/types/index.d.ts +125 -0
  130. package/dist/src/types/index.d.ts.map +1 -0
  131. package/dist/src/types/index.js +5 -0
  132. package/dist/src/types/index.js.map +1 -0
  133. package/dist/src/virtual-display/manager.d.ts +37 -0
  134. package/dist/src/virtual-display/manager.d.ts.map +1 -0
  135. package/dist/src/virtual-display/manager.js +229 -0
  136. package/dist/src/virtual-display/manager.js.map +1 -0
  137. package/dist/src/virtual-display/process-runner.d.ts +43 -0
  138. package/dist/src/virtual-display/process-runner.d.ts.map +1 -0
  139. package/dist/src/virtual-display/process-runner.js +174 -0
  140. package/dist/src/virtual-display/process-runner.js.map +1 -0
  141. package/dist/tsconfig.tsbuildinfo +1 -0
  142. package/package.json +57 -0
  143. package/plugin/openclaw.plugin.json +148 -0
  144. package/skill/arise-browser/SKILL.md +275 -0
  145. package/skill/arise-browser/TRUST.md +42 -0
  146. package/skill/arise-browser/references/api.md +198 -0
  147. package/src/browser/scripts/behavior_tracker.js +424 -0
  148. package/src/browser/scripts/unified_analyzer.js +1576 -0
@@ -0,0 +1,224 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * AriseBrowser CLI — Start the HTTP server.
4
+ *
5
+ * Usage:
6
+ * npx arise-browser [options]
7
+ *
8
+ * Options:
9
+ * --port, -p Server port (default: 9867)
10
+ * --host Bind address (default: 127.0.0.1)
11
+ * --token Auth token
12
+ * --headless Run headless (default: true)
13
+ * --no-headless Run with visible browser
14
+ * --profile Browser profile directory (enables managed mode)
15
+ * --cdp CDP endpoint URL (enables cdp mode)
16
+ * --help Show help
17
+ *
18
+ * Environment variables (Pinchtab-compatible):
19
+ * ARISE_BROWSER_PORT / BRIDGE_PORT
20
+ * ARISE_BROWSER_BIND / BRIDGE_BIND
21
+ * ARISE_BROWSER_TOKEN / BRIDGE_TOKEN
22
+ * ARISE_BROWSER_HEADLESS
23
+ * ARISE_BROWSER_PROFILE
24
+ */
25
+ import { createServer } from "../src/server/server.js";
26
+ import { VirtualDisplayManager } from "../src/virtual-display/manager.js";
27
+ import { readFileSync } from "node:fs";
28
+ function getPackageVersion() {
29
+ const candidates = [
30
+ new URL("../package.json", import.meta.url),
31
+ new URL("../../package.json", import.meta.url),
32
+ ];
33
+ for (const candidate of candidates) {
34
+ try {
35
+ const pkg = JSON.parse(readFileSync(candidate, "utf-8"));
36
+ if (pkg.version) {
37
+ return pkg.version;
38
+ }
39
+ }
40
+ catch {
41
+ // try next path
42
+ }
43
+ }
44
+ throw new Error(`Could not locate package.json for CLI version. Tried: ${candidates.join(", ")}`);
45
+ }
46
+ const PKG_VERSION = getPackageVersion();
47
+ const args = process.argv.slice(2);
48
+ function getArg(names) {
49
+ for (const name of names) {
50
+ const idx = args.indexOf(name);
51
+ if (idx !== -1 && idx + 1 < args.length) {
52
+ return args[idx + 1];
53
+ }
54
+ }
55
+ return undefined;
56
+ }
57
+ function hasFlag(names) {
58
+ return names.some((n) => args.includes(n));
59
+ }
60
+ if (hasFlag(["--help", "-h"])) {
61
+ console.log(`
62
+ AriseBrowser — AI browser automation engine
63
+
64
+ Usage: arise-browser [options]
65
+
66
+ Options:
67
+ --port, -p <port> Server port (default: 9867)
68
+ --host <host> Bind address (default: 127.0.0.1)
69
+ --token <token> Bearer auth token
70
+ --headless Run headless (default)
71
+ --no-headless Run with visible browser
72
+ --profile <dir> Browser profile dir (managed mode)
73
+ --cdp <url> CDP endpoint URL (cdp mode)
74
+ --help Show this help
75
+
76
+ Virtual display mode (Linux server):
77
+ --virtual-display Enable Xvfb + Neko streaming
78
+ --neko-port <port> Neko HTTP/WS port (default: 6090)
79
+ --neko-password <pwd> Neko user password (default: "neko")
80
+ --neko-admin-password <pwd> Neko admin password (default: "admin")
81
+
82
+ Environment variables:
83
+ ARISE_BROWSER_PORT / BRIDGE_PORT Default: 9867
84
+ ARISE_BROWSER_BIND / BRIDGE_BIND Default: 127.0.0.1
85
+ ARISE_BROWSER_TOKEN / BRIDGE_TOKEN Auth token
86
+ ARISE_BROWSER_HEADLESS "true" or "false"
87
+ ARISE_BROWSER_PROFILE Profile dir (managed mode)
88
+ ARISE_BROWSER_VIRTUAL_DISPLAY "true" to enable virtual display
89
+ ARISE_BROWSER_NEKO_PORT Neko port (default: 6090)
90
+ ARISE_BROWSER_NEKO_PASSWORD Neko user password
91
+ ARISE_BROWSER_NEKO_ADMIN_PASSWORD Neko admin password
92
+ `);
93
+ process.exit(0);
94
+ }
95
+ const port = parseInt(getArg(["--port", "-p"])
96
+ || process.env.ARISE_BROWSER_PORT
97
+ || process.env.BRIDGE_PORT
98
+ || "9867", 10);
99
+ if (Number.isNaN(port) || port < 0 || port > 65535) {
100
+ console.error("Error: invalid port number");
101
+ process.exit(1);
102
+ }
103
+ const host = getArg(["--host"])
104
+ || process.env.ARISE_BROWSER_BIND
105
+ || process.env.BRIDGE_BIND
106
+ || "127.0.0.1";
107
+ const token = getArg(["--token"])
108
+ || process.env.ARISE_BROWSER_TOKEN
109
+ || process.env.BRIDGE_TOKEN;
110
+ const cdpUrl = getArg(["--cdp"]);
111
+ const profileDir = getArg(["--profile"])
112
+ || process.env.ARISE_BROWSER_PROFILE;
113
+ let headless = true;
114
+ if (hasFlag(["--no-headless"])) {
115
+ headless = false;
116
+ }
117
+ else if (process.env.ARISE_BROWSER_HEADLESS === "false") {
118
+ headless = false;
119
+ }
120
+ // Virtual display mode
121
+ const virtualDisplayEnabled = hasFlag(["--virtual-display"])
122
+ || process.env.ARISE_BROWSER_VIRTUAL_DISPLAY === "true";
123
+ const nekoPort = parseInt(getArg(["--neko-port"])
124
+ || process.env.ARISE_BROWSER_NEKO_PORT
125
+ || "6090", 10);
126
+ const nekoPassword = getArg(["--neko-password"])
127
+ || process.env.ARISE_BROWSER_NEKO_PASSWORD
128
+ || "neko";
129
+ const nekoAdminPassword = getArg(["--neko-admin-password"])
130
+ || process.env.ARISE_BROWSER_NEKO_ADMIN_PASSWORD
131
+ || "admin";
132
+ // Determine mode
133
+ let mode = "standalone";
134
+ let effectiveCdpUrl = cdpUrl;
135
+ if (virtualDisplayEnabled) {
136
+ // Virtual display forces CDP mode — Chrome is launched by VirtualDisplayManager
137
+ mode = "cdp";
138
+ effectiveCdpUrl = "http://localhost:9222";
139
+ }
140
+ else if (cdpUrl) {
141
+ mode = "cdp";
142
+ }
143
+ else if (profileDir) {
144
+ mode = "managed";
145
+ }
146
+ const browserConfig = {
147
+ mode,
148
+ cdpUrl: effectiveCdpUrl,
149
+ headless,
150
+ profileDir,
151
+ stealthHeaders: true,
152
+ ...(virtualDisplayEnabled && {
153
+ virtualDisplay: {
154
+ enabled: true,
155
+ nekoPort,
156
+ nekoPassword,
157
+ nekoAdminPassword,
158
+ },
159
+ }),
160
+ };
161
+ async function main() {
162
+ console.log(`AriseBrowser v${PKG_VERSION}`);
163
+ console.log(`Mode: ${mode} | Headless: ${headless} | Port: ${port}`);
164
+ let displayManager = null;
165
+ // Start virtual display environment before the HTTP server
166
+ if (virtualDisplayEnabled) {
167
+ console.log(`Virtual display: enabled (Neko :${nekoPort})`);
168
+ displayManager = new VirtualDisplayManager({
169
+ nekoPort,
170
+ nekoPassword,
171
+ nekoAdminPassword,
172
+ });
173
+ await displayManager.start();
174
+ }
175
+ const server = await createServer(browserConfig, { port, host, token });
176
+ await server.listen({ port, host });
177
+ console.log(`Server listening on http://${host}:${port}`);
178
+ if (token) {
179
+ console.log(`Auth: Bearer token required`);
180
+ }
181
+ else {
182
+ console.log(`Auth: disabled (set ARISE_BROWSER_TOKEN to enable)`);
183
+ }
184
+ if (displayManager) {
185
+ console.log(`Neko streaming on http://0.0.0.0:${nekoPort}`);
186
+ }
187
+ // Graceful shutdown with forced exit timeout
188
+ let shuttingDown = false;
189
+ const shutdown = async () => {
190
+ if (shuttingDown) {
191
+ console.log("Forced exit.");
192
+ process.exit(1);
193
+ }
194
+ shuttingDown = true;
195
+ console.log("\nShutting down...");
196
+ const forceTimer = setTimeout(() => {
197
+ console.error("Shutdown timed out — forcing exit");
198
+ process.exit(1);
199
+ }, 15_000);
200
+ forceTimer.unref();
201
+ try {
202
+ await server.close();
203
+ }
204
+ catch (e) {
205
+ console.error("Error during server shutdown:", e);
206
+ }
207
+ if (displayManager) {
208
+ try {
209
+ await displayManager.stop();
210
+ }
211
+ catch (e) {
212
+ console.error("Error during display shutdown:", e);
213
+ }
214
+ }
215
+ process.exit(0);
216
+ };
217
+ process.on("SIGINT", shutdown);
218
+ process.on("SIGTERM", shutdown);
219
+ }
220
+ main().catch((err) => {
221
+ console.error("Fatal:", err);
222
+ process.exit(1);
223
+ });
224
+ //# sourceMappingURL=arise-browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arise-browser.js","sourceRoot":"","sources":["../../bin/arise-browser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * ActionExecutor — Executes high-level actions on a Playwright Page.
3
+ *
4
+ * Action types: click, type, select, wait, extract, scroll, enter,
5
+ * mouse_control, mouse_drag, press_key, navigate, back, forward,
6
+ * hover, focus
7
+ *
8
+ * Click: supports aria-ref/CSS selector, prefers regular click,
9
+ * and validates observable state change to avoid false success.
10
+ * Mouse control: JS elementFromPoint + dispatchEvent.
11
+ */
12
+ import type { Page } from "playwright";
13
+ import type { ActionDict, ActionResult, SessionRef } from "../types/index.js";
14
+ export declare class ActionExecutor {
15
+ private page;
16
+ private session;
17
+ private defaultTimeout;
18
+ private shortTimeout;
19
+ private maxScrollAmount;
20
+ constructor(page: Page, session?: SessionRef);
21
+ execute(action: ActionDict): Promise<ActionResult>;
22
+ static shouldUpdateSnapshot(action: ActionDict): boolean;
23
+ private _click;
24
+ private _type;
25
+ private _select;
26
+ private _wait;
27
+ private _extract;
28
+ private _scroll;
29
+ private _enter;
30
+ private _mouseControl;
31
+ private _mouseDrag;
32
+ private _pressKey;
33
+ private _navigate;
34
+ private _back;
35
+ private _forward;
36
+ private _hover;
37
+ private _focus;
38
+ private _normalizeClickIntent;
39
+ private _normalizeClickExpectedEffect;
40
+ private _deriveClickIntent;
41
+ private _resolveExpectedHref;
42
+ private _resolveAbsoluteUrl;
43
+ private _classifyExpectedHref;
44
+ private _tryParseUrl;
45
+ private _normalizePath;
46
+ private _urlMatchesExpected;
47
+ private _arraysEqual;
48
+ private _recoverClickTarget;
49
+ private _clearRecoveryMarker;
50
+ private _executeAutoClick;
51
+ private _attemptCtrlClickNewTab;
52
+ private _executeSameTabLinkClick;
53
+ private _clickAndVerifyLinkAttempt;
54
+ private _waitForLinkVerification;
55
+ private _executeUiClick;
56
+ private _executeCalendarClick;
57
+ private _classifyCalendarTarget;
58
+ private _captureCalendarObservation;
59
+ private _evaluateCalendarObservationChange;
60
+ private _didMeaningfulUiChange;
61
+ private _isLikelyLink;
62
+ private _captureClickObservation;
63
+ private _didClickObservationChange;
64
+ private _toMeaningfulClickTargetState;
65
+ private _toSemanticPageVector;
66
+ private _evaluateObservedClickEffect;
67
+ private _getClickObservationDelta;
68
+ private _formatFocusOnlyClickMessage;
69
+ private _readTypeIdentity;
70
+ private _readTypeState;
71
+ private _readTypeStateWithFallback;
72
+ private _reacquireTypeControl;
73
+ private _buildTypeIdentityLocators;
74
+ private _shouldPreferKeyboardTyping;
75
+ private _typeStateMatchesExpected;
76
+ private _normalizeTypeToken;
77
+ private _normalizeSelectToken;
78
+ private _escapeAttributeValue;
79
+ private _parseTimeToken;
80
+ private _parseCountToken;
81
+ private _inferSelectDomain;
82
+ private _resolveSelectOption;
83
+ private _selectStateMatchesOption;
84
+ private _selectModelMatchesResolution;
85
+ private _readSelectModel;
86
+ private _clickFirstVisible;
87
+ private _readScopedSelectOptions;
88
+ private _reacquireSelectModel;
89
+ private _buildSelectIdentityLocators;
90
+ private _openCustomSelectScope;
91
+ private _findVisiblePopupScope;
92
+ private _clickScopedSelectOption;
93
+ private _toSelectStateDebug;
94
+ private _toSelectOptionDebug;
95
+ private _toSelectResolutionDebug;
96
+ private _validCoordinates;
97
+ }
98
+ //# sourceMappingURL=action-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-executor.d.ts","sourceRoot":"","sources":["../../../src/browser/action-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,YAAY,CAAC;AAGhD,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAsL9E,qBAAa,cAAc;IACzB,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAAS;gBAEpB,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,UAAU;IAQtC,OAAO,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;IAkDxD,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO;YAW1C,MAAM;YAuNN,KAAK;YAuHL,OAAO;YAkHP,KAAK;YA4BL,QAAQ;YA6BR,OAAO;YAmCP,MAAM;YAQN,aAAa;YAsFb,UAAU;YAkFV,SAAS;YAuBT,SAAS;YAoBT,KAAK;YAWL,QAAQ;YAaR,MAAM;YA0BN,MAAM;IA0BpB,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,6BAA6B;IAQrC,OAAO,CAAC,kBAAkB;IAsB1B,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,qBAAqB;IAwB7B,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,YAAY;YAKN,mBAAmB;YAiJnB,oBAAoB;YAYpB,iBAAiB;YA2IjB,uBAAuB;YAuEvB,wBAAwB;YAiFxB,0BAA0B;YAkD1B,wBAAwB;YAkGxB,eAAe;YAuGf,qBAAqB;IAwEnC,OAAO,CAAC,uBAAuB;YAwBjB,2BAA2B;IAyIzC,OAAO,CAAC,kCAAkC;IAgD1C,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,aAAa;YAcP,wBAAwB;IA2NtC,OAAO,CAAC,0BAA0B;IAIlC,OAAO,CAAC,6BAA6B;IAgBrC,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,4BAA4B;IAqCpC,OAAO,CAAC,yBAAyB;IAwBjC,OAAO,CAAC,4BAA4B;YAItB,iBAAiB;YAuBjB,cAAc;YA4Bd,0BAA0B;YA2B1B,qBAAqB;IAYnC,OAAO,CAAC,0BAA0B;IAiDlC,OAAO,CAAC,2BAA2B;IAWnC,OAAO,CAAC,yBAAyB;IAoBjC,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,eAAe;IAmCvB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,oBAAoB;IA8C5B,OAAO,CAAC,yBAAyB;IA+CjC,OAAO,CAAC,6BAA6B;YAIvB,gBAAgB;YAmFhB,kBAAkB;YAmClB,wBAAwB;YAsDxB,qBAAqB;IAQnC,OAAO,CAAC,4BAA4B;YA4BtB,sBAAsB;YAsCtB,sBAAsB;YA6BtB,wBAAwB;IA+CtC,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,wBAAwB;IAShC,OAAO,CAAC,iBAAiB;CAO1B"}