@f2a/network 0.1.2 → 0.1.3

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 (136) hide show
  1. package/package.json +8 -1
  2. package/.github/workflows/ci.yml +0 -113
  3. package/.github/workflows/publish.yml +0 -60
  4. package/MONOREPO.md +0 -58
  5. package/SKILL.md +0 -137
  6. package/dist/adapters/openclaw.d.ts +0 -103
  7. package/dist/adapters/openclaw.d.ts.map +0 -1
  8. package/dist/adapters/openclaw.js +0 -297
  9. package/dist/adapters/openclaw.js.map +0 -1
  10. package/dist/core/connection-manager.d.ts +0 -80
  11. package/dist/core/connection-manager.d.ts.map +0 -1
  12. package/dist/core/connection-manager.js +0 -235
  13. package/dist/core/connection-manager.js.map +0 -1
  14. package/dist/core/connection-manager.test.d.ts +0 -2
  15. package/dist/core/connection-manager.test.d.ts.map +0 -1
  16. package/dist/core/connection-manager.test.js +0 -52
  17. package/dist/core/connection-manager.test.js.map +0 -1
  18. package/dist/core/identity.d.ts +0 -47
  19. package/dist/core/identity.d.ts.map +0 -1
  20. package/dist/core/identity.js +0 -130
  21. package/dist/core/identity.js.map +0 -1
  22. package/dist/core/identity.test.d.ts +0 -2
  23. package/dist/core/identity.test.d.ts.map +0 -1
  24. package/dist/core/identity.test.js +0 -43
  25. package/dist/core/identity.test.js.map +0 -1
  26. package/dist/core/serverless.d.ts +0 -155
  27. package/dist/core/serverless.d.ts.map +0 -1
  28. package/dist/core/serverless.js +0 -615
  29. package/dist/core/serverless.js.map +0 -1
  30. package/dist/daemon/webhook.test.d.ts +0 -2
  31. package/dist/daemon/webhook.test.d.ts.map +0 -1
  32. package/dist/daemon/webhook.test.js +0 -24
  33. package/dist/daemon/webhook.test.js.map +0 -1
  34. package/dist/protocol/messages.d.ts +0 -739
  35. package/dist/protocol/messages.d.ts.map +0 -1
  36. package/dist/protocol/messages.js +0 -188
  37. package/dist/protocol/messages.js.map +0 -1
  38. package/dist/protocol/messages.test.d.ts +0 -2
  39. package/dist/protocol/messages.test.d.ts.map +0 -1
  40. package/dist/protocol/messages.test.js +0 -55
  41. package/dist/protocol/messages.test.js.map +0 -1
  42. package/docs/F2A-PROTOCOL.md +0 -61
  43. package/docs/MOBILE_BOOTSTRAP_DESIGN.md +0 -126
  44. package/docs/a2a-lessons.md +0 -316
  45. package/docs/middleware-guide.md +0 -448
  46. package/docs/readme-update-checklist.md +0 -90
  47. package/docs/reputation-guide.md +0 -396
  48. package/docs/rfcs/001-reputation-system.md +0 -712
  49. package/docs/security-design.md +0 -247
  50. package/install.sh +0 -231
  51. package/packages/openclaw-adapter/README.md +0 -510
  52. package/packages/openclaw-adapter/openclaw.plugin.json +0 -106
  53. package/packages/openclaw-adapter/package.json +0 -40
  54. package/packages/openclaw-adapter/src/announcement-queue.test.ts +0 -449
  55. package/packages/openclaw-adapter/src/announcement-queue.ts +0 -403
  56. package/packages/openclaw-adapter/src/capability-detector.test.ts +0 -99
  57. package/packages/openclaw-adapter/src/capability-detector.ts +0 -183
  58. package/packages/openclaw-adapter/src/claim-handlers.test.ts +0 -974
  59. package/packages/openclaw-adapter/src/claim-handlers.ts +0 -482
  60. package/packages/openclaw-adapter/src/connector.business.test.ts +0 -583
  61. package/packages/openclaw-adapter/src/connector.ts +0 -795
  62. package/packages/openclaw-adapter/src/index.test.ts +0 -82
  63. package/packages/openclaw-adapter/src/index.ts +0 -18
  64. package/packages/openclaw-adapter/src/integration.e2e.test.ts +0 -829
  65. package/packages/openclaw-adapter/src/logger.ts +0 -51
  66. package/packages/openclaw-adapter/src/network-client.test.ts +0 -266
  67. package/packages/openclaw-adapter/src/network-client.ts +0 -251
  68. package/packages/openclaw-adapter/src/network-recovery.test.ts +0 -465
  69. package/packages/openclaw-adapter/src/node-manager.test.ts +0 -136
  70. package/packages/openclaw-adapter/src/node-manager.ts +0 -429
  71. package/packages/openclaw-adapter/src/plugin.test.ts +0 -439
  72. package/packages/openclaw-adapter/src/plugin.ts +0 -104
  73. package/packages/openclaw-adapter/src/reputation.test.ts +0 -221
  74. package/packages/openclaw-adapter/src/reputation.ts +0 -368
  75. package/packages/openclaw-adapter/src/task-guard.test.ts +0 -502
  76. package/packages/openclaw-adapter/src/task-guard.ts +0 -860
  77. package/packages/openclaw-adapter/src/task-queue.concurrency.test.ts +0 -462
  78. package/packages/openclaw-adapter/src/task-queue.edge-cases.test.ts +0 -284
  79. package/packages/openclaw-adapter/src/task-queue.persistence.test.ts +0 -408
  80. package/packages/openclaw-adapter/src/task-queue.ts +0 -668
  81. package/packages/openclaw-adapter/src/tool-handlers.test.ts +0 -906
  82. package/packages/openclaw-adapter/src/tool-handlers.ts +0 -574
  83. package/packages/openclaw-adapter/src/types.ts +0 -361
  84. package/packages/openclaw-adapter/src/webhook-pusher.test.ts +0 -188
  85. package/packages/openclaw-adapter/src/webhook-pusher.ts +0 -220
  86. package/packages/openclaw-adapter/src/webhook-server.test.ts +0 -580
  87. package/packages/openclaw-adapter/src/webhook-server.ts +0 -202
  88. package/packages/openclaw-adapter/tsconfig.json +0 -20
  89. package/src/cli/commands.test.ts +0 -157
  90. package/src/cli/commands.ts +0 -129
  91. package/src/cli/index.test.ts +0 -77
  92. package/src/cli/index.ts +0 -234
  93. package/src/core/autonomous-economy.test.ts +0 -291
  94. package/src/core/autonomous-economy.ts +0 -428
  95. package/src/core/e2ee-crypto.test.ts +0 -125
  96. package/src/core/e2ee-crypto.ts +0 -246
  97. package/src/core/f2a.test.ts +0 -269
  98. package/src/core/f2a.ts +0 -618
  99. package/src/core/p2p-network.test.ts +0 -199
  100. package/src/core/p2p-network.ts +0 -1432
  101. package/src/core/reputation-security.test.ts +0 -403
  102. package/src/core/reputation-security.ts +0 -562
  103. package/src/core/reputation.test.ts +0 -260
  104. package/src/core/reputation.ts +0 -576
  105. package/src/core/review-committee.test.ts +0 -380
  106. package/src/core/review-committee.ts +0 -401
  107. package/src/core/token-manager.test.ts +0 -133
  108. package/src/core/token-manager.ts +0 -140
  109. package/src/daemon/control-server.test.ts +0 -216
  110. package/src/daemon/control-server.ts +0 -292
  111. package/src/daemon/index.test.ts +0 -85
  112. package/src/daemon/index.ts +0 -89
  113. package/src/daemon/main.ts +0 -44
  114. package/src/daemon/start.ts +0 -29
  115. package/src/daemon/webhook.test.ts +0 -68
  116. package/src/daemon/webhook.ts +0 -105
  117. package/src/index.test.ts +0 -436
  118. package/src/index.ts +0 -72
  119. package/src/types/index.test.ts +0 -87
  120. package/src/types/index.ts +0 -341
  121. package/src/types/result.ts +0 -68
  122. package/src/utils/benchmark.ts +0 -237
  123. package/src/utils/logger.ts +0 -331
  124. package/src/utils/middleware.ts +0 -229
  125. package/src/utils/rate-limiter.ts +0 -207
  126. package/src/utils/signature.ts +0 -136
  127. package/src/utils/validation.ts +0 -186
  128. package/tests/docker/Dockerfile.node +0 -23
  129. package/tests/docker/Dockerfile.runner +0 -18
  130. package/tests/docker/docker-compose.test.yml +0 -73
  131. package/tests/integration/message-passing.test.ts +0 -109
  132. package/tests/integration/multi-node.test.ts +0 -92
  133. package/tests/integration/p2p-connection.test.ts +0 -83
  134. package/tests/integration/test-config.ts +0 -32
  135. package/tsconfig.json +0 -21
  136. package/vitest.config.ts +0 -26
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@f2a/network",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Friend-to-Agent P2P networking protocol for OpenClaw Agents",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -8,11 +8,18 @@
8
8
  "bin": {
9
9
  "f2a": "./dist/cli/index.js"
10
10
  },
11
+ "files": [
12
+ "dist",
13
+ "LICENSE",
14
+ "README.md",
15
+ "package.json"
16
+ ],
11
17
  "workspaces": [
12
18
  "packages/*"
13
19
  ],
14
20
  "scripts": {
15
21
  "build": "tsc",
22
+ "lint": "tsc --noEmit",
16
23
  "build:watch": "tsc --watch",
17
24
  "build:all": "npm run build && npm run build --workspaces",
18
25
  "clean": "rm -rf dist",
@@ -1,113 +0,0 @@
1
- name: CI
2
-
3
- on:
4
- push:
5
- branches: [main, develop]
6
- pull_request:
7
- branches: [main, develop]
8
-
9
- jobs:
10
- # Lint 检查
11
- lint:
12
- runs-on: ubuntu-latest
13
- steps:
14
- - uses: actions/checkout@v4
15
-
16
- - uses: actions/setup-node@v4
17
- with:
18
- node-version: '20'
19
-
20
- - name: Install dependencies
21
- run: npm install
22
-
23
- - name: Run lint
24
- run: npm run lint || npm run build -- --noEmit
25
-
26
- # 单元测试(Node 20 & 22)
27
- unit-tests:
28
- runs-on: ubuntu-latest
29
- needs: lint
30
- strategy:
31
- matrix:
32
- node-version: [20, 22]
33
- steps:
34
- - uses: actions/checkout@v4
35
-
36
- - uses: actions/setup-node@v4
37
- with:
38
- node-version: ${{ matrix.node-version }}
39
-
40
- - name: Install dependencies
41
- run: npm install
42
-
43
- - name: Build
44
- run: npm run build
45
-
46
- - name: Run unit tests
47
- run: npm run test:unit
48
-
49
- - name: Upload coverage
50
- uses: codecov/codecov-action@v4
51
- if: matrix.node-version == 20
52
- with:
53
- files: ./coverage/lcov.info
54
- flags: unittests
55
-
56
- # 集成测试(仅 push 触发)
57
- integration-tests:
58
- runs-on: ubuntu-latest
59
- needs: unit-tests
60
- if: github.event_name == 'push'
61
- steps:
62
- - uses: actions/checkout@v4
63
-
64
- - uses: actions/setup-node@v4
65
- with:
66
- node-version: '20'
67
-
68
- - name: Install dependencies
69
- run: npm install
70
-
71
- - name: Build
72
- run: npm run build
73
-
74
- - name: Run Docker integration tests
75
- run: npm run test:docker
76
-
77
- - name: Export logs on failure
78
- if: failure()
79
- run: docker compose -f tests/docker/docker-compose.test.yml logs > test-logs.txt
80
-
81
- - name: Upload logs on failure
82
- if: failure()
83
- uses: actions/upload-artifact@v4
84
- with:
85
- name: integration-test-logs
86
- path: test-logs.txt
87
-
88
- - name: Upload coverage
89
- uses: codecov/codecov-action@v4
90
- with:
91
- files: ./coverage/lcov.info
92
- flags: integration
93
-
94
- # 多节点测试(仅 main 分支)
95
- multi-node-tests:
96
- runs-on: ubuntu-latest
97
- needs: integration-tests
98
- if: github.event_name == 'push' && github.ref == 'refs/heads/main'
99
- steps:
100
- - uses: actions/checkout@v4
101
-
102
- - uses: actions/setup-node@v4
103
- with:
104
- node-version: '20'
105
-
106
- - name: Install dependencies
107
- run: npm install
108
-
109
- - name: Build
110
- run: npm run build
111
-
112
- - name: Run 10-node test
113
- run: npm run test:docker:10
@@ -1,60 +0,0 @@
1
- name: Publish to NPM
2
-
3
- on:
4
- push:
5
- tags:
6
- - 'v*'
7
- workflow_dispatch:
8
-
9
- jobs:
10
- publish-core:
11
- runs-on: ubuntu-latest
12
- steps:
13
- - uses: actions/checkout@v4
14
-
15
- - uses: actions/setup-node@v4
16
- with:
17
- node-version: '20'
18
- registry-url: 'https://registry.npmjs.org'
19
-
20
- - name: Install dependencies
21
- run: npm install
22
-
23
- - name: Build
24
- run: npm run build
25
-
26
- - name: Publish core package
27
- run: npm publish --access public
28
- env:
29
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
30
-
31
- publish-adapter:
32
- runs-on: ubuntu-latest
33
- needs: publish-core
34
- steps:
35
- - uses: actions/checkout@v4
36
-
37
- - uses: actions/setup-node@v4
38
- with:
39
- node-version: '20'
40
- registry-url: 'https://registry.npmjs.org'
41
-
42
- - name: Wait for package to be available
43
- run: sleep 30
44
-
45
- - name: Install dependencies
46
- working-directory: packages/openclaw-adapter
47
- run: |
48
- # Replace file: reference with npm package reference
49
- npm install @f2a/network@latest --save
50
- npm install
51
-
52
- - name: Build adapter
53
- working-directory: packages/openclaw-adapter
54
- run: npm run build
55
-
56
- - name: Publish adapter package
57
- working-directory: packages/openclaw-adapter
58
- run: npm publish --access public
59
- env:
60
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
package/MONOREPO.md DELETED
@@ -1,58 +0,0 @@
1
- # F2A Monorepo
2
-
3
- F2A (Friend-to-Agent) 是一个用于 OpenClaw Agents 的 P2P 网络协议。
4
-
5
- ## 仓库结构
6
-
7
- ```
8
- F2A/
9
- ├── packages/ # 子包目录
10
- │ └── openclaw-adapter/ # OpenClaw 插件
11
- │ ├── package.json
12
- │ ├── tsconfig.json
13
- │ ├── README.md
14
- │ └── src/
15
- ├── src/ # F2A 核心代码
16
- │ ├── core/ # 核心 P2P 网络
17
- │ ├── daemon/ # Daemon 服务
18
- │ ├── cli/ # CLI 工具
19
- │ └── types/ # 类型定义
20
- ├── docs/ # 文档
21
- ├── package.json # 根 package.json (workspaces)
22
- └── tsconfig.json
23
- ```
24
-
25
- ## 包说明
26
-
27
- | 包 | 路径 | 说明 |
28
- |----|------|------|
29
- | `f2a-network` | `./` | F2A P2P 网络核心 |
30
- | `@f2a/openclaw-adapter` | `./packages/openclaw-adapter` | OpenClaw 插件 |
31
-
32
- ## 开发
33
-
34
- ```bash
35
- # 安装所有依赖
36
- npm install
37
-
38
- # 构建所有包
39
- npm run build:all
40
-
41
- # 测试所有包
42
- npm run test:all
43
-
44
- # 构建特定包
45
- cd packages/openclaw-adapter
46
- npm run build
47
- ```
48
-
49
- ## 发布
50
-
51
- ```bash
52
- # 发布核心包
53
- npm publish
54
-
55
- # 发布子包
56
- cd packages/openclaw-adapter
57
- npm publish --access public
58
- ```
package/SKILL.md DELETED
@@ -1,137 +0,0 @@
1
- ---
2
- name: f2a-network
3
- description: Activate when the user wants to discover, connect, or communicate with other OpenClaw Agents in the local network. Use for P2P networking, messaging between agents, invoking skills on remote agents, file sharing, or group chat.
4
- ---
5
-
6
- # F2A - Friend-to-Agent P2P Network
7
-
8
- ## 概述
9
-
10
- F2A 是一个 P2P 协作网络,让 OpenClaw Agent 能够:
11
- - 发现局域网内的其他 Agent
12
- - 与其他 Agent 建立加密通信
13
- - 委托任务给其他 Agent
14
- - 共享文件和能力
15
-
16
- ## 安装
17
-
18
- ```bash
19
- cd /path/to/f2a
20
- npm install
21
- npm run build
22
- ```
23
-
24
- ## 命令参考
25
-
26
- ### 启动/停止
27
-
28
- ```bash
29
- # 启动 Daemon(后台服务)
30
- node dist/daemon/index.js
31
-
32
- # 或使用 PM2
33
- pm2 start dist/daemon/index.js --name f2a
34
-
35
- # 停止
36
- pm2 stop f2a
37
- ```
38
-
39
- ### CLI 命令
40
-
41
- | 命令 | 说明 |
42
- |------|------|
43
- | `status` | 查看节点状态 |
44
- | `peers` | 查看已连接的 Peers |
45
- | `discover [--capability <name>]` | 发现网络中的 Agents |
46
- | `pending` | 查看待确认连接 |
47
- | `confirm <id|index>` | 确认连接请求 |
48
- | `reject <id|index>` | 拒绝连接请求 |
49
-
50
- ### 使用示例
51
-
52
- #### 场景一:发现其他 Agent
53
-
54
- ```bash
55
- # 发现所有 Agent
56
- node dist/cli/index.js discover
57
-
58
- # 按能力过滤
59
- node dist/cli/index.js discover --capability code-generation
60
- ```
61
-
62
- #### 场景二:查看连接状态
63
-
64
- ```bash
65
- node dist/cli/index.js status
66
- node dist/cli/index.js peers
67
- ```
68
-
69
- #### 场景三:管理连接请求
70
-
71
- ```bash
72
- # 查看待确认连接
73
- node dist/cli/index.js pending
74
-
75
- # 确认连接
76
- node dist/cli/index.js confirm 1
77
-
78
- # 拒绝连接
79
- node dist/cli/index.js reject 2 --reason "unknown agent"
80
- ```
81
-
82
- ## 环境变量
83
-
84
- | 变量 | 默认值 | 说明 |
85
- |------|--------|------|
86
- | `F2A_CONTROL_PORT` | 9001 | HTTP 控制端口 |
87
- | `F2A_CONTROL_TOKEN` | f2a-default-token | 认证 Token(生产环境务必修改) |
88
-
89
- ## 安全注意事项
90
-
91
- ⚠️ **默认 Token 不安全!** 生产环境请设置:
92
-
93
- ```bash
94
- export F2A_CONTROL_TOKEN=$(openssl rand -hex 32)
95
- ```
96
-
97
- ## 故障排除
98
-
99
- ### 问题:无法发现其他 Agent
100
-
101
- 检查:
102
- 1. 是否在同一局域网?
103
- 2. 防火墙是否阻止了 UDP 8768 端口?
104
- 3. MDNS 是否被路由器禁用?
105
-
106
- ### 问题:连接被拒绝
107
-
108
- 检查:
109
- 1. 对方是否已启动 F2A?
110
- 2. Token 是否正确?
111
- 3. 是否在对方的黑名单中?
112
-
113
- ### 问题:端口被占用
114
-
115
- ```bash
116
- # 检查端口占用
117
- lsof -i :9001
118
-
119
- # 使用其他端口
120
- F2A_CONTROL_PORT=9002 node dist/daemon/index.js
121
- ```
122
-
123
- ## 更多文档
124
-
125
- - 详细文档:`docs/`
126
- - 协议规范:`skill/references/protocol.md`
127
- - 完整 README:`README.md`
128
-
129
- ## 日志查看
130
-
131
- ```bash
132
- # 使用 PM2 查看日志
133
- pm2 logs f2a
134
-
135
- # 或查看日志文件
136
- tail -f ~/.f2a/f2a.log
137
- ```
@@ -1,103 +0,0 @@
1
- /**
2
- * OpenClaw F2A 适配器
3
- * 将 F2A P2P 网络集成到 OpenClaw
4
- *
5
- * 使用方式:
6
- * ```typescript
7
- * const adapter = await OpenClawF2AAdapter.create(openclawSession);
8
- * await adapter.start();
9
- *
10
- * // 委托任务给网络
11
- * const result = await adapter.delegateTask({
12
- * capability: 'code-generation',
13
- * description: 'Generate a Python function to calculate fibonacci'
14
- * });
15
- * ```
16
- */
17
- import { AgentCapability, TaskDelegateOptions, TaskDelegateResult, AgentInfo } from '../index';
18
- import type { Result } from '../types';
19
- export interface OpenClawSession {
20
- execute: (task: string, options?: unknown) => Promise<unknown>;
21
- on: (event: string, handler: (...args: unknown[]) => void) => void;
22
- }
23
- export interface OpenClawF2AAdapterOptions {
24
- /** 节点显示名称 */
25
- displayName?: string;
26
- /** 监听端口(0表示随机) */
27
- listenPort?: number;
28
- /** 引导节点列表 */
29
- bootstrapPeers?: string[];
30
- /** 是否启用本地 MDNS 发现 */
31
- enableMDNS?: boolean;
32
- /** 能力处理器映射 */
33
- capabilityHandlers?: Record<string, (params: Record<string, unknown>) => Promise<unknown>>;
34
- }
35
- export declare class OpenClawF2AAdapter {
36
- private f2a;
37
- private openclaw;
38
- private options;
39
- private running;
40
- private constructor();
41
- /**
42
- * 创建适配器实例
43
- */
44
- static create(openclaw: OpenClawSession, options?: OpenClawF2AAdapterOptions): Promise<OpenClawF2AAdapter>;
45
- /**
46
- * 注册默认能力
47
- */
48
- private static registerDefaultCapabilities;
49
- /**
50
- * 检测 OpenClaw 的能力
51
- */
52
- private static detectOpenClawCapabilities;
53
- /**
54
- * 创建默认能力处理器
55
- */
56
- private static createDefaultHandler;
57
- /**
58
- * 构建任务描述
59
- */
60
- private static buildTaskDescription;
61
- /**
62
- * 启动适配器
63
- */
64
- start(): Promise<Result<void>>;
65
- /**
66
- * 停止适配器
67
- */
68
- stop(): Promise<void>;
69
- /**
70
- * 处理收到的任务请求
71
- */
72
- private handleTaskRequest;
73
- /**
74
- * 委托任务给网络中的其他 Agent
75
- */
76
- delegateTask(options: TaskDelegateOptions): Promise<Result<TaskDelegateResult>>;
77
- /**
78
- * 发现网络中的 Agents
79
- */
80
- discoverAgents(capability?: string): Promise<AgentInfo[]>;
81
- /**
82
- * 直接发送任务给特定 Peer
83
- */
84
- sendTaskTo(peerId: string, taskType: string, description: string, parameters?: Record<string, unknown>): Promise<Result<unknown>>;
85
- /**
86
- * 获取本节点信息
87
- */
88
- getAgentInfo(): AgentInfo;
89
- /**
90
- * 获取已连接的 Peers
91
- */
92
- getConnectedPeers(): AgentInfo[];
93
- /**
94
- * 注册新能力
95
- */
96
- registerCapability(capability: AgentCapability, handler: (params: Record<string, unknown>) => Promise<unknown>): void;
97
- /**
98
- * 获取 PeerID
99
- */
100
- get peerId(): string;
101
- }
102
- export default OpenClawF2AAdapter;
103
- //# sourceMappingURL=openclaw.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openclaw.d.ts","sourceRoot":"","sources":["../../src/adapters/openclaw.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAO,eAAe,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACpG,OAAO,KAAK,EAAc,MAAM,EAAoB,MAAM,UAAU,CAAC;AAGrE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/D,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC;CACpE;AAED,MAAM,WAAW,yBAAyB;IACxC,aAAa;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa;IACb,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,qBAAqB;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc;IACd,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;CAC5F;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,GAAG,CAAM;IACjB,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,OAAO,CAAkB;IAEjC,OAAO;IAMP;;OAEG;WACU,MAAM,CACjB,QAAQ,EAAE,eAAe,EACzB,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,kBAAkB,CAAC;IA4B9B;;OAEG;mBACkB,2BAA2B;IAchD;;OAEG;mBACkB,0BAA0B;IAyG/C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAkBnC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAQnC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAsBpC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAS3B;;OAEG;YACW,iBAAiB;IAqC/B;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAIrF;;OAEG;IACG,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAI/D;;OAEG;IACG,UAAU,CACd,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAI3B;;OAEG;IACH,YAAY,IAAI,SAAS;IAIzB;;OAEG;IACH,iBAAiB,IAAI,SAAS,EAAE;IAIhC;;OAEG;IACH,kBAAkB,CAChB,UAAU,EAAE,eAAe,EAC3B,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAC7D,IAAI;IAIP;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;CACF;AAGD,eAAe,kBAAkB,CAAC"}