关于 three.ws for Grok
three.ws 是开源(Apache-2.0)的浏览器端 3D AI Agent 平台,可从文本或图片生成 GLB 模型并嵌入网页。README 介绍了 Grok 相关的免费文本与图片转 3D 功能,以及登录后的 Agent 使用。
主要功能
- 01文本与图片生成 3D 模型(Forge)
- 02基于 WebGL 2.0 的 glTF / GLB 查看器
- 03Agent 运行时与工具循环
- 04x402 支付与 Agent 间协议(A2A)
- 05以 Web Component 方式嵌入网页
适用场景
- 01通过文本描述生成可下载的 GLB 模型
- 02将带有语音与情感表现的 3D Agent 嵌入网站
- 03为 Agent 配置链上身份与支付能力
MCP 相关
三者 README 描述的平台提供 MCP 端点,使外部 AI 系统可以通过 MCP 驱动虚拟形象。该条目的 MCP 服务用于 Grok 场景,具体工具细节未在输入中说明。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://three.ws/api/mcp-grokclaude mcp add --transport http nirholas-threews-grok https://three.ws/api/mcp-grok{"mcpServers":{"nirholas-threews-grok":{"type":"http","url":"https://three.ws/api/mcp-grok"}}}在 Cursor 中打开{"servers":{"nirholas-threews-grok":{"type":"http","url":"https://three.ws/api/mcp-grok"}}}在 VS Code 中打开{"mcpServers":{"nirholas-threews-grok":{"type":"http","url":"https://three.ws/api/mcp-grok"}}}{"mcpServers":{"nirholas-threews-grok":{"serverUrl":"https://three.ws/api/mcp-grok"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
15| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| tier | enum | 否 | 细节级别:draft(最快)、standard(默认)或 high(效果最佳、速度较慢;负载较高时可能回退到 standard)。draft | standard | high |
| prompt | string | 是 | 要建模的单个物体或角色的描述,例如 "a friendly round robot mascot, glossy white plastic"。 |
| idempotency_key | string | 否 | 可选的重试键。再次发送相同的键(同一调用方、相同参数,且在 24 小时内),即可取回原任务,而不是启动第二次生成,因此超时后的重试不会重复消耗配额。每个不同的请求都使用新的键。失败的尝试不会被记录,因此其键可以重用。 |
详细介绍
three.ws
网站 · 文档 · 更新日志 · X / Twitter · GitHub · pump.fun 上的 $THREE
https://github.com/user-attachments/assets/d52515d1-cb04-4dd6-98bd-fef233312dc4
赋予你的 AI 一个身体。 three.ws 是一个开源(Apache-2.0)、原生运行于浏览器的 3D AI Agent 平台。输入提示词,Forge 就会生成带纹理的 3D 模型;你也可以直接上传已有的 GLB。添加大模型作为大脑,进行链上注册,并嵌入到任何地方:无需插件、无需上传到服务器,也无需安装。
**60 秒即可体验:**打开 three.ws/forge,输入 “一只全身的黄铜蒸汽朋克猫头鹰”,然后下载 GLB。文本→3D、图像→3D 和草图→3D——免费草稿档,无需账户。跳转至 Forge 部分 ↓
想和我们一起构建吗?你的首次贡献会通过一个完整示例,带你在约 15 分钟内从克隆项目到提交开放的拉取请求。每个
good first issue都会注明要修改的文件,以及用于验证效果的命令。欢迎在 Discussions 或 Telegram 上打个招呼。
认识这个虚拟形象:就在这里的实时 3D 模型
拖动即可旋转。这不是图片或视频,而是由 GitHub 原生渲染的交互式 3D 模型。这个虚拟形象是在 three.ws Forge 上通过一行文本提示词生成的(免费档),经过简化后仅有 1,200 个三角形,并以 ASCII STL 格式嵌入。我们使用的 readme-3d 是一个开源工具包,可将 3D 模型放入任何 GitHub README、议题或讨论中。
solid threews_avatar
facet normal -0.34 -0.93 0.11
outer loop
vertex 7.06 -3.99 23.19
vertex 9.13 -4.19 27.78
vertex 3.98 -2.59 25.51
endloop
endfacet
facet normal -0.94 -0.30 0.16
outer loop
vertex 17.94 3.99 37.76
vertex 18.01 2.79 35.88
vertex 18.27 2.91 37.66
endloop
endfacet
facet normal -0.90 0.43 0.10
outer loop
vertex 18.27 2.91 37.66
vertex 18.01 2.79 35.88
vertex 17.73 2.15 36.16
endloop
endfacet
facet normal -0.92 0.36 0.15
outer loop
vertex 18.27 2.91 37.66
vertex 17.73 2.15 36.16
vertex 17.95 2.20 37.37
endloop
endfacet
facet normal 0.94 0.34 0.00
outer loop
vertex 27.20 5.38 33.47
vertex 28.47 1.83 38.79
vertex 28.90 0.61 31.76
endloop
endfacet
facet normal 0.91 -0.25 0.33
outer loop
vertex 28.01 -2.89 36.41
vertex 28.47 1.83 38.79
vertex 26.14 -2.49 41.92
endloop
endfacet
facet normal 0.99 -0.14 0.08
outer loop
vertex 28.47 1.83 38.79
vertex 28.01 -2.89 36.41
vertex 28.90 0.61 31.76
endloop
endfacet
facet normal 0.91 0.06 -0.40
outer loop
vertex 28.90 0.61 31.76
vertex 27.10 -0.47 27.53
vertex 27.03 3.46 27.96
endloop
endfacet
facet normal 0.83 -0.51 -0.22
outer loop
vertex 28.01 -2.89 36.41
vertex 27.10 -0.47 27.53
vertex 28.90 0.61 31.76
endloop
endfacet
facet normal 0.91 0.38 -0.16
outer loop
vertex 27.20 5.38 33.47
vertex 28.90 0.61 31.76
vertex 27.03 3.46 27.96
endloop
endfacet
facet normal 0.89 0.45 0.09
outer loop
vertex 26.88 4.99 38.80
vertex 28.47 1.83 38.79
vertex 27.20 5.38 33.47
endloop
endfacet
facet normal 0.90 -0.39 -0.20
outer loop
vertex 28.01 -2.89 36.41
vertex 26.22 -3.16 28.82
vertex 27.10 -0.47 27.53
endloop
endfacet
facet normal 0.82 -0.02 0.58
outer loop
vertex 23.27 4.13 46.24
vertex 26.14 -2.49 41.92
vertex 28.47 1.83 38.79
endloop
endfacet
facet normal 0.80 0.40 0.44
outer loop
vertex 26.88 4.99 38.80
vertex 23.27 4.13 46.24
vertex 28.47 1.83 38.79
endloop
endfacet
facet normal 0.70 -0.07 -0.71
outer loop
vertex 27.03 3.46 27.96
vertex 24.69 2.15 25.80
vertex 25.39 4.36 26.25
endloop
endfacet
facet normal 0.63 -0.73 0.27
outer loop
vertex 28.01 -2.89 36.41
vertex 26.14 -2.49 41.92
vertex 24.39 -5.14 38.78
endloop
endfacet
facet normal 0.56 -0.82 0.08
outer loop
vertex 28.01 -2.89 36.41
vertex 24.39 -5.14 38.78
vertex 24.40 -5.59 34.11
endloop
endfacet
facet normal 0.64 -0.76 -0.12
outer loop
vertex 28.01 -2.89 36.41
vertex 24.40 -5.59 34.11
vertex 26.22 -3.16 28.82
endloop
endfacet
facet normal 0.37 -0.89 -0.28
outer loop
vertex 24.40 -5.59 34.11
vertex 23.26 -5.15 31.23
vertex 26.22 -3.16 28.82
endloop
endfacet
facet normal 0.42 -0.20 -0.89
outer loop
vertex 27.10 -0.47 27.53
vertex 24.15 0.41 25.94
vertex 24.69 2.15 25.80
endloop
endfacet
facet normal 0.34 -0.94 0.00
outer loop
vertex 26.22 -3.16 28.82
vertex 23.11 -4.26 27.61
vertex 24.16 -3.89 27.34
endloop
endfacet
facet normal 0.40 -0.88 -0.23
outer loop
vertex 23.26 -5.15 31.23
vertex 23.11 -4.26 27.61
vertex 26.22 -3.16 28.82
endloop
endfacet
facet normal -0.24 0.97 -0.05
outer loop
vertex 24.58 4.14 25.81
vertex 25.39 4.36 26.25
vertex 22.37 3.43 22.62
endloop
endfacet
facet normal 0.64 -0.61 -0.46
outer loop
vertex 27.10 -0.47 27.53
vertex 24.14 -2.60 26.21
vertex 21.62 -2.12 22.03
endloop
endfacet
facet normal 0.78 -0.11 -0.62
outer loop
vertex 25.39 4.36 26.25
vertex 22.59 1.54 23.24
vertex 22.37 3.43 22.62
endloop
endfacet
facet normal 0.78 -0.12 -0.61
outer loop
vertex 25.39 4.36 26.25
vertex 24.69 2.15 25.80
vertex 22.59 1.54 23.24
endloop
endfacet
facet normal 0.46 -0.87 -0.17
outer loop
vertex 22.82 1.11 26.12
vertex 22.59 1.54 23.24
vertex 24.69 2.15 25.80
endloop
endfacet
facet normal 0.05 -0.66 -0.75
outer loop
vertex 23.11 -4.26 27.61
vertex 24.14 -2.60 26.21
vertex 24.16 -3.89 27.34
endloop
endfacet
facet normal 0.32 -0.80 0.50
outer loop
vertex 26.14 -2.49 41.92
vertex 21.60 -3.52 43.21
vertex 24.39 -5.14 38.78
endloop
endfacet
facet normal -0.37 -0.90 -0.21
outer loop
vertex 23.26 -5.15 31.23
vertex 21.41 -3.57 27.63
vertex 23.11 -4.26 27.61
endloop
endfacet
facet normal -0.23 -0.54 -0.81
outer loop
vertex 23.11 -4.26 27.61
vertex 21.41 -3.57 27.63
vertex 24.14 -2.60 26.21
endloop
endfacet
facet normal -0.01 -1.00 0.10
outer loop
vertex 24.39 -5.14 38.78
vertex 20.81 -5.34 36.22
vertex 24.40 -5.59 34.11
endloop
endfacet
facet normal 0.52 -0.77 0.37
outer loop
vertex 20.28 -1.08 52.96
vertex 18.87 -2.53 51.93
vertex 26.14 -2.49 41.92
endloop
endfacet
facet normal -0.14 -0.95 0.26
outer loop
vertex 21.60 -3.52 43.21
vertex 20.81 -5.34 36.22
vertex 24.39 -5.14 38.78
endloop
endfacet
facet normal -0.13 -0.99 -0.10
outer loop
vertex 24.40 -5.59 34.11
vertex 20.81 -5.34 36.22
vertex 23.26 -5.15 31.23
endloop
endfacet
facet normal 0.03 -0.99 -0.15
outer loop
vertex 22.82 1.11 26.12
vertex 19.99 1.49 22.99
vertex 22.59 1.54 23.24
endloop
endfacet
facet normal 0.91 0.14 0.38
outer loop
vertex 23.27 4.13 46.24
vertex 20.84 0.68 53.36
vertex 26.14 -2.49 41.92
endloop
endfacet
facet normal -0.14 -0.99 -0.03
outer loop
vertex 24.14 -2.60 26.21
vertex 18.46 -1.70 22.74
vertex 21.62 -2.12 22.03
endloop
endfacet
facet normal 0.87 0.27 0.43
outer loop
vertex 20.33 2.84 53.04
vertex 20.84 0.68 53.36
vertex 23.27 4.13 46.24
endloop
endfacet
facet normal -0.48 -0.82 0.30
outer loop
vertex 22.34 1.45 26.31
vertex 18.93 2.50 23.81
vertex 22.82 1.11 26.12
endloop
endfacet
facet normal -0.49 -0.80 0.35
outer loop
vertex 22.82 1.11 26.12
vertex 18.93 2.50 23.81
vertex 19.99 1.49 22.99
endloop
endfacet
facet normal 0.80 -0.36 0.47
outer loop
vertex 20.84 0.68 53.36
vertex 20.28 -1.08 52.96
vertex 26.14 -2.49 41.92
endloop
endfacet
facet normal -0.62 -0.30 0.72
outer loop
vertex 22.22 3.87 27.21
vertex 18.93 2.50 23.81
vertex 22.34 1.45 26.31
endloop
endfacet
facet normal -0.80 0.13 0.59
outer loop
vertex 21.74 -0.40 26.89
vertex 18.46 -1.70 22.74
vertex 21.76 -1.78 27.21
endloop
endfacet
facet normal -0.79 -0.21 0.58
outer loop
vertex 21.76 -1.78 27.21
vertex 18.46 -1.70 22.74
vertex 21.75 -2.39 26.98
endloop
endfacet
facet normal -0.54 -0.84 -0.09
outer loop
vertex 23.26 -5.15 31.23
vertex 17.89 -1.75 31.72
vertex 21.41 -3.57 27.63
endloop
endfacet
facet normal 0.10 -0.26 -0.96
outer loop
vertex 22.59 1.54 23.24
vertex 19.99 1.49 22.99
vertex 20.26 3.48 22.48
endloop
endfacet
facet normal 0.96 0.24 0.12
outer loop
vertex 20.67 -0.54 57.28
vertex 20.84 0.68 53.36
vertex 20.33 2.84 53.04
endloop
endfacet
facet normal -0.53 -0.80 -0.29
outer loop
vertex 20.81 -5.34 36.22
vertex 17.89 -1.75 31.72
vertex 23.26 -5.15 31.23
endloop
endfacet
facet normal 1.00 0.05 0.05
outer loop
vertex 19.64 4.31 87.94
vertex 19.89 8.80 78.04
vertex 19.60 7.11 85.93
endloop
endfacet
facet normal 1.00 0.04 0.04
outer loop
vertex 19.64 4.31 87.94
vertex 19.78 0.25 88.57
vertex 19.89 8.80 78.04
endloop
endfacet
facet normal 0.96 0.26 0.13
outer loop
vertex 19.46 3.33 58.61
vertex 20.67 -0.54 57.28
vertex 20.33 2.84 53.04
endloop
endfacet
facet normal 0.96 -0.29 -0.05
outer loop
vertex 20.67 -0.54 57.28
vertex 20.28 -1.08 52.96
vertex 20.84 0.68 53.36
endloop
endfacet
facet normal -0.11 -0.99 -0.07
outer loop
vertex 24.14 -2.60 26.21
vertex 21.75 -2.39 26.98
vertex 18.46 -1.70 22.74
endloop
endfacet
facet normal 1.00 -0.03 -0.02
outer loop
vertex 19.89 8.80 78.04
vertex 19.78 0.25 88.57
vertex 19.45 -6.79 83.01
endloop
endfacet
facet normal 1.00 0.00 0.07
outer loop
vertex 19.89 8.80 78.04
vertex 19.45 -6.79 83.01
vertex 20.12 -4.30 73.94
endloop
endfacet
facet normal 0.93 0.30 -0.21
outer loop
vertex 19.89 8.80 78.04
vertex 19.93 5.01 72.90
vertex 19.58 8.54 76.35
endloop
endfacet
facet normal -0.70 -0.09 0.71
outer loop
vertex 22.22 3.87 27.21
vertex 19.00 3.74 24.02
vertex 18.93 2.50 23.81
endloop
endfacet
facet normal 0.99 0.00 -0.17
outer loop
vertex 20.12 -4.30 73.94
vertex 19.78 1.87 71.95
vertex 19.93 5.01 72.90
endloop
endfacet
facet normal 1.00 0.02 -0.01
outer loop
vertex 19.89 8.80 78.04
vertex 20.12 -4.30 73.94
vertex 19.93 5.01 72.90
endloop
endfacet
facet normal 0.79 -0.61 0.01
outer loop
vertex 20.67 -0.54 57.28
vertex 18.66 -3.15 57.91
vertex 20.28 -1.08 52.96
endloop
endfacet
facet normal 0.27 -0.95 0.19
outer loop
vertex 26.14 -2.49 41.92
vertex 18.87 -2.53 51.93
vertex 21.60 -3.52 43.21
endloop
endfacet
facet normal 0.99 0.13 0.11
outer loop
vertex 19.45 -6.79 83.01
vertex 20.12 -5.67 75.56
vertex 20.12 -4.30 73.94
endloop
endfacet
facet normal -0.77 -0.07 0.63
outer loop
vertex 19.80 0.58 24.64
vertex 18.46 -1.70 22.74
vertex 21.74 -0.40 26.89
endloop
endfacet
facet normal 0.99 -0.11 0.08
outer loop
vertex 19.78 0.25 88.57
vertex 19.38 -4.86 86.48
vertex 19.45 -6.79 83.01
endloop
endfacet
facet normal 0.73 -0.52 -0.45
outer loop
vertex 20.12 -4.30 73.94
vertex 20.12 -5.67 75.56
vertex 17.93 -5.99 72.36
endloop
endfacet
facet normal 0.30 -0.95 -0.11
outer loop
vertex 19.45 -6.79 83.01
vertex 17.93 -5.99 72.36
vertex 20.12 -5.67 75.56
endloop
endfacet
facet normal -0.47 0.12 0.87
outer loop
vertex 18.22 5.83 86.97
vertex 18.49 -1.78 88.13
vertex 19.78 0.25 88.57
endloop
endfacet
facet normal 0.97 0.25 0.07
outer loop
vertex 19.11 0.55 6.61
vertex 18.74 3.81 0.23
vertex 18.00 5.61 3.97
endloop
endfacet
facet normal 1.00 0.07 -0.02
outer loop
vertex 18.74 3.81 0.23
vertex 19.11 0.55 6.61
vertex 19.30 -4.41 0.13
endloop
endfacet
facet normal 0.28 -0.37 0.89
outer loop
vertex 19.78 0.25 88.57
vertex 18.49 -1.78 88.13
vertex 18.53 -3.21 87.53
endloop
endfacet
facet normal 0.73 -0.68 -0.04
outer loop
vertex 18.66 -3.15 57.91
vertex 18.87 -2.53 51.93
vertex 20.28 -1.08 52.96
endloop
endfacet
facet normal 0.06 -0.99 0.13
outer loop
vertex 18.87 -2.53 51.93
vertex 17.09 -2.77 50.96
vertex 21.60 -3.52 43.21
endloop
endfacet
facet normal -0.68 -0.64 0.36
outer loop
vertex 21.60 -3.52 43.21
vertex 18.20 -0.42 42.36
vertex 18.38 -3.05 38.01
endloop
endfacet
facet normal 1.00 -0.02 0.05
outer loop
vertex 19.01 -4.77 6.21
vertex 19.30 -4.41 0.13
vertex 19.11 0.55 6.61
endloop
endfacet
facet normal 0.33 -0.38 0.86
outer loop
vertex 19.78 0.25 88.57
vertex 18.53 -3.21 87.53
vertex 19.38 -4.86 86.48
endloop
endfacet
facet normal -0.72 -0.69 -0.09
outer loop
vertex 20.81 -5.34 36.22
vertex 18.38 -3.05 38.01
vertex 17.89 -1.75 31.72
endloop
endfacet
facet normal -0.47 0.12 0.87
outer loop
vertex 19.64 4.31 87.94
vertex 18.22 5.83 86.97
vertex 19.78 0.25 88.57
endloop
endfacet
facet normal 0.63 -0.07 0.78
outer loop
vertex 19.46 3.33 58.61
vertex 18.15 -2.50 59.15
vertex 20.67 -0.54 57.28
endloop
endfacet
facet normal 0.73 -0.44 0.53
outer loop
vertex 20.67 -0.54 57.28
vertex 18.15 -2.50 59.15
vertex 18.66 -3.15 57.91
endloop
endfacet
facet normal -0.75 -0.58 0.31
outer loop
vertex 18.53 -3.21 87.53
vertex 19.45 -6.79 83.01
vertex 19.38 -4.86 86.48
endloop
endfacet
facet normal 0.98 -0.19 0.03
outer loop
vertex 19.01 -4.77 6.21
vertex 18.35 -9.34 0.20
vertex 19.30 -4.41 0.13
endloop
endfacet
facet normal 0.84 0.53 -0.09
outer loop
vertex 18.00 5.61 3.97
vertex 18.74 3.81 0.23
vertex 15.98 8.19 0.20
endloop
endfacet
facet normal -0.91 -0.37 0.19
outer loop
vertex 18.20 -0.42 42.36
vertex 17.46 -0.51 38.61
vertex 18.38 -3.05 38.01
endloop
endfacet
facet normal 0.41 -0.07 -0.91
outer loop
vertex 19.81 4.08 29.79
vertex 18.75 -0.34 29.66
vertex 16.22 3.38 28.24
endloop
endfacet
facet normal 0.62 0.14 0.77
outer loop
vertex 18.22 5.83 86.97
vertex 15.47 -5.06 91.14
vertex 18.49 -1.78 88.13
endloop
endfacet
facet normal 0.55 -0.05 0.83
outer loop
vertex 19.46 3.33 58.61
vertex 15.94 0.49 60.78
vertex 18.15 -2.50 59.15
endloop
endfacet
facet normal 0.37 -0.75 0.55
outer loop
vertex 18.15 -2.50 59.15
vertex 16.52 -3.84 58.40
vertex 18.66 -3.15 57.91
endloop
endfacet
facet normal 0.49 -0.77 0.41
outer loop
vertex 17.89 -1.75 31.72
vertex 17.07 -2.53 31.23
vertex 19.02 -1.97 29.92
endloop
endfacet
facet normal 0.71 -0.07 0.70
outer loop
vertex 19.11 0.55 6.61
vertex 15.26 -5.01 10.00
vertex 19.01 -4.77 6.21
endloop
endfacet
facet normal 0.91 -0.38 0.19
outer loop
vertex 19.01 -4.77 6.21
vertex 16.89 -9.62 6.67
vertex 18.35 -9.34 0.20
endloop
endfacet
facet normal 0.61 -0.66 0.44
outer loop
vertex 17.94 3.99 37.76
vertex 16.93 2.01 36.18
vertex 18.01 2.79 35.88
endloop
endfacet
facet normal -0.14 0.08 0.99
outer loop
vertex 18.70 4.53 31.50
vertex 16.29 2.09 31.35
vertex 17.47 1.45 31.57
endloop
endfacet
facet normal -0.05 0.42 0.91
outer loop
vertex 18.01 2.79 35.88
vertex 16.93 2.01 36.18
vertex 17.73 2.15 36.16
endloop
endfacet
facet normal -0.01 -0.48 0.88
outer loop
vertex 18.15 -2.50 59.15
vertex 15.94 0.49 60.78
vertex 16.52 -3.84 58.40
endloop
endfacet
facet normal 0.80 -0.22 0.57
outer loop
vertex 18.49 -1.78 88.13
vertex 15.47 -5.06 91.14
vertex 18.53 -3.21 87.53
endloop
endfacet
facet normal 0.74 -0.11 0.66
outer loop
vertex 19.11 0.55 6.61
vertex 16.35 -0.79 9.47
vertex 15.26 -5.01 10.00
endloop
endfacet
facet normal 0.70 -0.25 0.67
outer loop
vertex 19.01 -4.77 6.21
vertex 15.26 -5.01 10.00
vertex 15.17 -9.29 8.52
endloop
endfacet
facet normal 0.79 -0.59 0.15
outer loop
vertex 16.89 -9.62 6.67
vertex 16.62 -11.67 0.18
vertex 18.35 -9.34 0.20
endloop
endfacet
facet normal 0.84 0.42 0.35
outer loop
vertex 16.06 10.04 87.13
vertex 18.22 5.83 86.97
vertex 18.19 7.96 84.49
endloop
endfacet
facet normal 0.76 0.42 0.50
outer loop
vertex 15.15 6.32 7.73
vertex 19.11 0.55 6.61
vertex 18.00 5.61 3.97
endloop
endfacet
facet normal -0.32 -0.23 0.92
outer loop
vertex 17.47 -0.77 31.82
vertex 17.07 -2.53 31.23
vertex 17.89 -1.75 31.72
endloop
endfacet
facet normal 0.42 -0.87 0.26
outer loop
vertex 17.07 -2.53 31.23
vertex 16.95 -3.37 28.55
vertex 19.02 -1.97 29.92
endloop
endfacet
facet normal 0.54 0.03 -0.84
outer loop
vertex 19.02 -1.97 29.92
vertex 16.95 -3.37 28.55
vertex 15.24 -1.91 27.51
endloop
endfacet
facet normal 0.69 -0.24 0.69
outer loop
vertex 15.17 -9.29 8.52
vertex 16.89 -9.62 6.67
vertex 19.01 -4.77 6.21
endloop
endfacet
facet normal 0.93 -0.35 -0.16
outer loop
vertex 17.93 -5.99 72.36
vertex 19.45 -6.79 83.01
vertex 16.89 -9.27 73.44
endloop
endfacet
facet normal 0.30 0.32 0.90
outer loop
vertex 19.46 3.33 58.61
vertex 15.61 3.83 59.72
vertex 15.94 0.49 60.78
endloop
endfacet
facet normal 0.62 0.28 0.73
outer loop
vertex 19.11 0.55 6.61
vertex 15.15 6.32 7.73
vertex 16.35 -0.79 9.47
endloop
endfacet
facet normal 0.76 -0.16 -0.63
outer loop
vertex 20.12 -4.30 73.94
vertex 14.47 -7.07 67.83
vertex 19.78 1.87 71.95
endloop
endfacet
facet normal 0.33 -0.86 -0.39
outer loop
vertex 18.87 -2.53 51.93
vertex 15.90 -3.74 52.11
vertex 17.09 -2.77 50.96
endloop
endfacet
facet normal 0.37 -0.93 -0.08
outer loop
vertex 18.66 -3.15 57.91
vertex 15.90 -3.74 52.11
vertex 18.87 -2.53 51.93
endloop
endfacet
facet normal 0.72 -0.54 -0.42
outer loop
vertex 20.12 -4.30 73.94
vertex 17.93 -5.99 72.36
vertex 14.47 -7.07 67.83
endloop
endfacet
facet normal 0.77 0.63 0.13
outer loop
vertex 11.40 16.58 83.07
vertex 16.06 10.04 87.13
vertex 18.19 7.96 84.49
endloop
endfacet
facet normal 0.79 0.39 0.47
outer loop
vertex 15.11 9.98 88.77
vertex 18.22 5.83 86.97
vertex 16.06 10.04 87.13
endloop
endfacet
facet normal 0.88 -0.04 0.48
outer loop
vertex 15.35 3.82 92.08
vertex 15.47 -5.06 91.14
vertex 18.22 5.83 86.97
endloop
endfacet
facet normal 0.27 -0.85 -0.44
outer loop
vertex 15.90 -3.74 52.11
vertex 16.50 -1.52 48.21
vertex 17.09 -2.77 50.96
endloop
endfacet
facet normal -0.71 -0.66 0.24
outer loop
vertex 16.95 -3.37 28.55
vertex 17.07 -2.53 31.23
vertex 15.24 -1.91 27.51
endloop
endfacet
facet normal 0.83 -0.39 -0.40
outer loop
vertex 16.89 -9.27 73.44
vertex 15.58 -10.03 71.48
vertex 17.93 -5.99 72.36
endloop
endfacet
facet normal 0.80 0.37 -0.47
outer loop
vertex 18.54 7.21 74.10
vertex 19.78 1.87 71.95
vertex 14.22 8.62 67.90
endloop
endfacet
facet normal 0.97 0.25 0.08
outer loop
vertex 15.39 5.36 54.00
vertex 16.56 2.63 48.23
vertex 15.68 7.10 45.14
endloop
endfacet
facet normal -0.11 0.89 -0.44
outer loop
vertex 15.39 5.36 54.00
vertex 16.55 3.65 50.29
vertex 16.56 2.63 48.23
endloop
endfacet
facet normal 0.99 0.14 -0.07
outer loop
vertex 16.56 2.63 48.23
vertex 16.72 0.23 45.64
vertex 15.68 7.10 45.14
endloop
endfacet
facet normal -0.18 0.28 0.94
outer loop
vertex 15.61 3.83 59.72
vertex 13.19 1.84 59.86
vertex 15.94 0.49 60.78
endloop
endfacet
facet normal -0.49 -0.82 0.30
outer loop
vertex 16.29 2.09 31.35
vertex 15.35 2.03 29.63
vertex 17.47 1.45 31.57
endloop
endfacet
facet normal -0.66 0.08 0.74
outer loop
vertex 17.47 1.45 31.57
vertex 15.35 2.03 29.63
vertex 17.47 -0.77 31.82
endloop
endfacet
facet normal 0.69 -0.70 -0.19
outer loop
vertex 16.89 -9.27 73.44
vertex 11.91 -13.35 70.39
vertex 15.58 -10.03 71.48
endloop
endfacet
facet normal 0.79 0.42 -0.45
outer loop
vertex 18.54 7.21 74.10
vertex 14.22 8.62 67.90
vertex 13.55 12.96 70.78
endloop
endfacet
facet normal 0.70 0.58 0.42
outer loop
vertex 15.56 8.35 4.24
vertex 15.15 6.32 7.73
vertex 18.00 5.61 3.97
endloop
endfacet
facet normal 0.93 0.36 0.10
outer loop
vertex 13.91 9.95 51.03
vertex 15.39 5.36 54.00
vertex 15.68 7.10 45.14
endloop
endfacet
facet normal 0.98 0.14 -0.15
outer loop
vertex 16.72 0.23 45.64
vertex 15.23 2.48 37.71
vertex 15.68 7.10 45.14
endloop
endfacet
facet normal 0.96 0.20 0.17
outer loop
vertex 12.17 0.67 31.81
vertex 16.35 -0.79 9.47
vertex 15.15 6.32 7.73
endloop
endfacet
facet normal 0.98 0.01 -0.18
outer loop
vertex 16.72 0.23 45.64
vertex 15.38 -1.56 38.27
vertex 15.23 2.48 37.71
endloop
endfacet
facet normal 0.02 -0.63 -0.77
outer loop
vertex 16.52 -3.84 58.40
vertex 13.93 -3.61 58.14
vertex 18.66 -3.15 57.91
endloop
endfacet
facet normal 0.10 -0.99 0.05
outer loop
vertex 18.66 -3.15 57.91
vertex 13.93 -3.61 58.14
vertex 15.90 -3.74 52.11
endloop
endfacet
facet normal 0.96 -0.26 -0.09
outer loop
vertex 16.50 -1.52 48.21
vertex 14.15 -8.99 44.47
vertex 16.72 0.23 45.64
endloop
endfacet
facet normal 0.96 -0.29 -0.02
outer loop
vertex 16.50 -1.52 48.21
vertex 15.90 -3.74 52.11
vertex 14.15 -8.99 44.47
endloop
endfacet
facet normal 0.79 -0.39 0.47
outer loop
vertex 18.53 -3.21 87.53
vertex 15.47 -5.06 91.14
vertex 19.45 -6.79 83.01
endloop
endfacet
facet normal 0.78 -0.34 -0.52
outer loop
vertex 17.93 -5.99 72.36
vertex 15.58 -10.03 71.48
vertex 14.47 -7.07 67.83
endloop
endfacet
facet normal 0.82 -0.57 -0.07
outer loop
vertex 19.45 -6.79 83.01
vertex 14.09 -13.48 75.24
vertex 16.89 -9.27 73.44
endloop
endfacet
facet normal 0.79 -0.05 0.61
outer loop
vertex 15.35 3.82 92.08
vertex 13.27 -2.78 94.19
vertex 15.47 -5.06 91.14
endloop
endfacet
facet normal 0.52 -0.03 0.85
outer loop
vertex 16.35 -0.79 9.47
vertex 14.96 -3.20 10.24
vertex 15.26 -5.01 10.00
endloop
endfacet
facet normal 0.73 -0.68 0.08
outer loop
vertex 13.93 -12.26 86.65
vertex 14.09 -13.48 75.24
vertex 19.45 -6.79 83.01
endloop
endfacet
facet normal -0.39 -0.20 0.90
outer loop
vertex 15.94 0.49 60.78
vertex 13.19 1.84 59.86
vertex 13.54 -2.80 58.99
endloop
endfacet
facet normal 0.01 -0.48 0.88
outer loop
vertex 15.94 0.49 60.78
vertex 13.54 -2.80 58.99
vertex 16.52 -3.84 58.40
endloop
endfacet
facet normal 0.67 -0.05 -0.74
outer loop
vertex 19.78 1.87 71.95
vertex 14.47 -7.07 67.83
vertex 9.23 3.47 62.37
endloop
endfacet
facet normal 0.34 -0.07 0.94
outer loop
vertex 14.96 -3.20 10.24
vertex 14.04 -4.14 10.50
vertex 15.26 -5.01 10.00
endloop
endfacet
facet normal 0.96 -0.25 -0.11
outer loop
vertex 16.72 0.23 45.64
vertex 14.15 -8.99 44.47
vertex 15.38 -1.56 38.27
endloop
endfacet
facet normal 0.92 -0.38 0.05
outer loop
vertex 15.90 -3.74 52.11
vertex 13.81 -8.82 52.21
vertex 14.15 -8.99 44.47
endloop
endfacet
facet normal 0.23 -0.32 0.92
outer loop
vertex 15.26 -5.01 10.00
vertex 10.29 -9.63 9.64
vertex 15.17 -9.29 8.52
endloop
endfacet
facet normal 0.76 -0.45 0.47
outer loop
vertex 15.47 -5.06 91.14
vertex 13.93 -12.26 86.65
vertex 19.45 -6.79 83.01
endloop
endfacet
facet normal 0.41 0.91 0.01
outer loop
vertex 12.94 9.56 0.15
vertex 15.56 8.35 4.24
vertex 15.98 8.19 0.20
endloop
endfacet
facet normal 0.91 -0.02 -0.41
outer loop
vertex 15.23 2.48 37.71
vertex 15.38 -1.56 38.27
vertex 11.37 -2.58 29.40
endloop
endfacet
facet normal -0.13 -0.75 0.65
outer loop
vertex 16.52 -3.84 58.40
vertex 13.54 -2.80 58.99
vertex 13.93 -3.61 58.14
endloop
endfacet
facet normal 0.94 -0.29 -0.16
outer loop
vertex 15.38 -1.56 38.27
vertex 14.15 -8.99 44.47
vertex 13.35 -7.97 37.87
endloop
endfacet
facet normal 0.89 -0.36 0.30
outer loop
vertex 13.93 -3.61 58.14
vertex 13.81 -8.82 52.21
vertex 15.90 -3.74 52.11
endloop
endfacet
facet normal 0.40 -0.76 0.51
outer loop
vertex 16.89 -9.62 6.67
vertex 15.17 -9.29 8.52
vertex 12.21 -12.35 6.23
endloop
endfacet
facet normal 0.71 -0.62 -0.34
outer loop
vertex 16.89 -9.27 73.44
vertex 14.09 -13.48 75.24
vertex 11.91 -13.35 70.39
endloop
endfacet
facet normal 0.37 -0.89 0.27
outer loop
vertex 16.89 -9.62 6.67
vertex 12.07 -13.56 0.11
vertex 16.62 -11.67 0.18
endloop
endfacet
facet normal 0.68 -0.72 0.09
outer loop
vertex 13.93 -12.26 86.65
vertex 9.15 -17.53 80.47
vertex 14.09 -13.48 75.24
endloop
endfacet
facet normal 0.65 0.65 0.40
outer loop
vertex 16.06 10.04 87.13
vertex 10.53 13.41 90.66
vertex 15.11 9.98 88.77
endloop
endfacet
facet normal 0.60 0.44 0.66
outer loop
vertex 9.34 8.19 95.26
vertex 15.11 9.98 88.77
vertex 10.53 13.41 90.66
endloop
endfacet
facet normal 0.76 0.51 0.41
outer loop
vertex 12.49 5.31 59.51
vertex 15.39 5.36 54.00
vertex 13.91 9.95 51.03
endloop
endfacet
facet normal 0.70 0.22 0.68
outer loop
vertex 15.11 9.98 88.77
vertex 9.34 8.19 95.26
vertex 18.22 5.83 86.97
endloop
endfacet
facet normal 0.66 0.50 0.57
outer loop
vertex 15.35 3.82 92.08
vertex 18.22 5.83 86.97
vertex 9.34 8.19 95.26
endloop
endfacet
facet normal -0.45 0.59 0.67
outer loop
vertex 15.61 3.83 59.72
vertex 13.97 4.61 57.95
vertex 13.19 1.84 59.86
endloop
endfacet
facet normal 0.79 -0.59 0.19
outer loop
vertex 11.32 -3.43 22.47
vertex 16.35 -0.79 9.47
vertex 12.17 0.67 31.81
endloop
endfacet
facet normal 0.87 -0.42 0.25
outer loop
vertex 11.32 -3.43 22.47
vertex 14.96 -3.20 10.24
vertex 16.35 -0.79 9.47
endloop
endfacet
facet normal 0.63 -0.50 -0.59
outer loop
vertex 15.58 -10.03 71.48
vertex 11.91 -13.35 70.39
vertex 14.47 -7.07 67.83
endloop
endfacet
facet normal 0.49 -0.86 0.16
outer loop
vertex 12.21 -12.35 6.23
vertex 12.07 -13.56 0.11
vertex 16.89 -9.62 6.67
endloop
endfacet
facet normal 0.74 0.66 -0.11
outer loop
vertex 18.42 8.44 76.34
vertex 13.55 12.96 70.78
vertex 10.93 16.12 72.25
endloop
endfacet
facet normal 0.83 0.56 -0.02
outer loop
vertex 13.91 9.95 51.03
vertex 15.68 7.10 45.14
vertex 11.78 13.01 47.59
endloop
endfacet
facet normal 0.82 0.57 -0.07
outer loop
vertex 15.68 7.10 45.14
vertex 13.24 10.02 39.97
vertex 11.78 13.01 47.59
endloop
endfacet
facet normal 0.38 0.89 0.26
outer loop
vertex 12.17 0.67 31.81
vertex 15.15 6.32 7.73
vertex 12.96 7.02 8.53
endloop
endfacet
facet normal 0.72 -0.66 0.20
outer loop
vertex 11.32 -3.43 22.47
vertex 14.04 -4.14 10.50
vertex 14.96 -3.20 10.24
endloop
endfacet
facet normal 0.89 -0.26 -0.37
outer loop
vertex 15.38 -1.56 38.27
vertex 13.35 -7.97 37.87
vertex 11.37 -2.58 29.40
endloop
endfacet
facet normal 0.68 0.72 -0.15
outer loop
vertex 11.78 13.01 47.59
vertex 13.24 10.02 39.97
vertex 9.14 13.41 37.70
endloop
endfacet
facet normal 0.83 0.35 -0.44
outer loop
vertex 13.24 10.02 39.97
vertex 15.23 2.48 37.71
vertex 9.34 6.54 29.76
endloop
endfacet
facet normal 0.69 0.63 0.37
outer loop
vertex 12.49 5.31 59.51
vertex 13.97 4.61 57.95
vertex 15.39 5.36 54.00
endloop
endfacet
facet normal 0.82 0.42 -0.39
outer loop
vertex 15.23 2.48 37.71
vertex 11.73 3.63 31.66
vertex 9.34 6.54 29.76
endloop
endfacet
facet normal 0.94 0.32 0.12
outer loop
vertex 12.72 6.52 11.74
vertex 12.17 0.67 31.81
vertex 12.96 7.02 8.53
endloop
endfacet
facet normal 0.99 0.15 0.07
outer loop
vertex 11.73 3.63 31.66
vertex 12.17 0.67 31.81
vertex 12.72 6.52 11.74
endloop
endfacet
facet normal 0.87 0.11 -0.48
outer loop
vertex 15.23 2.48 37.71
vertex 12.17 0.67 31.81
vertex 11.73 3.63 31.66
endloop
endfacet
facet normal 0.86 0.15 -0.49
outer loop
vertex 15.23 2.48 37.71
vertex 11.37 -2.58 29.40
vertex 12.17 0.67 31.81
endloop
endfacet
facet normal 0.97 -0.26 0.02
outer loop
vertex 11.37 -2.58 29.40
vertex 11.32 -3.43 22.47
vertex 12.17 0.67 31.81
endloop
endfacet
facet normal 0.69 -0.33 0.64
outer loop
vertex 13.54 -2.80 58.99
vertex 12.16 -7.44 58.05
vertex 13.93 -3.61 58.14
endloop
endfacet
facet normal 0.85 -0.40 0.34
outer loop
vertex 12.16 -7.44 58.05
vertex 13.81 -8.82 52.21
vertex 13.93 -3.61 58.14
endloop
endfacet
facet normal 0.79 -0.61 0.05
outer loop
vertex 13.81 -8.82 52.21
vertex 10.98 -12.74 48.67
vertex 14.15 -8.99 44.47
endloop
endfacet
facet normal 0.54 0.14 0.83
outer loop
vertex 9.34 8.19 95.26
vertex 5.89 5.28 98.02
vertex 15.35 3.82 92.08
endloop
endfacet
facet normal 0.75 0.21 0.62
outer loop
vertex 12.49 5.31 59.51
vertex 13.19 1.84 59.86
vertex 13.97 4.61 57.95
endloop
endfacet
facet normal 0.52 -0.84 0.17
outer loop
vertex 14.04 -4.14 10.50
vertex 11.32 -3.43 22.47
vertex 8.38 -5.67 20.45
endloop
endfacet
facet normal 0.19 -0.28 0.94
outer loop
vertex 15.26 -5.01 10.00
vertex 14.04 -4.14 10.50
vertex 10.29 -9.63 9.64
endloop
endfacet
facet normal 0.57 -0.50 -0.65
outer loop
vertex 14.47 -7.07 67.83
vertex 11.91 -13.35 70.39
vertex 8.91 -13.34 67.77
endloop
endfacet
facet normal 0.46 -0.86 -0.23
outer loop
vertex 14.09 -13.48 75.24
vertex 9.15 -17.53 80.47
vertex 11.91 -13.35 70.39
endloop
endfacet
facet normal 0.73 0.54 0.42
outer loop
vertex 8.93 13.86 54.71
vertex 12.49 5.31 59.51
vertex 13.91 9.95 51.03
endloop
endfacet
facet normal 0.77 -0.44 -0.46
outer loop
vertex 13.35 -7.97 37.87
vertex 9.35 -9.24 32.36
vertex 11.37 -2.58 29.40
endloop
endfacet
facet normal 0.57 0.81 0.15
outer loop
vertex 10.41 5.14 28.48
vertex 11.73 3.63 31.66
vertex 12.72 6.52 11.74
endloop
endfacet
facet normal 0.63 -0.75 -0.19
outer loop
vertex 10.98 -12.74 48.67
vertex 13.35 -7.97 37.87
vertex 14.15 -8.99 44.47
endloop
endfacet
facet normal 0.49 -0.13 0.86
outer loop
vertex 9.23 3.47 62.37
vertex 13.54 -2.80 58.99
vertex 13.19 1.84 59.86
endloop
endfacet
facet normal 0.53 -0.84 0.10
outer loop
vertex 9.13 -4.19 27.78
vertex 11.32 -3.43 22.47
vertex 11.37 -2.58 29.40
endloop
endfacet
facet normal 0.04 -0.18 0.98
outer loop
vertex 14.04 -4.14 10.50
vertex 7.42 -5.02 10.59
vertex 10.29 -9.63 9.64
endloop
endfacet
facet normal 0.60 -0.39 0.70
outer loop
vertex 15.47 -5.06 91.14
vertex 9.05 -10.82 93.50
vertex 11.18 -11.25 91.43
endloop
endfacet
facet normal 0.67 -0.70 0.24
outer loop
vertex 7.76 -13.16 56.28
vertex 10.98 -12.74 48.67
vertex 13.81 -8.82 52.21
endloop
endfacet
facet normal 0.72 -0.47 0.51
outer loop
vertex 15.47 -5.06 91.14
vertex 11.18 -11.25 91.43
vertex 13.93 -12.26 86.65
endloop
endfacet
facet normal 0.49 0.03 0.87
outer loop
vertex 13.27 -2.78 94.19
vertex 5.89 5.28 98.02
vertex 7.34 -4.63 97.60
endloop
endfacet
facet normal 0.13 -0.99 -0.08
outer loop
vertex 8.38 -5.67 20.45
vertex 7.42 -5.02 10.59
vertex 14.04 -4.14 10.50
endloop
endfacet
facet normal 0.20 -0.71 0.68
outer loop
vertex 15.17 -9.29 8.52
vertex 10.29 -9.63 9.64
vertex 12.21 -12.35 6.23
endloop
endfacet
facet normal 0.62 -0.77 0.18
outer loop
vertex 13.93 -12.26 86.65
vertex 9.21 -15.77 87.96
vertex 9.15 -17.53 80.47
endloop
endfacet
facet normal 0.20 -0.79 0.58
outer loop
vertex 11.32 -3.43 22.47
vertex 7.06 -3.99 23.19
vertex 8.38 -5.67 20.45
endloop
endfacet
facet normal 0.69 -0.64 0.34
outer loop
vertex 13.81 -8.82 52.21
vertex 12.16 -7.44 58.05
vertex 7.76 -13.16 56.28
endloop
endfacet
facet normal 0.58 0.20 0.79
outer loop
vertex 12.49 5.31 59.51
vertex 9.23 3.47 62.37
vertex 13.19 1.84 59.86
endloop
endfacet
facet normal 0.60 -0.02 0.80
outer loop
vertex 9.23 3.47 62.37
vertex 8.71 -4.02 62.58
vertex 13.54 -2.80 58.99
endloop
endfacet
facet normal 0.11 -0.99 -0.09
outer loop
vertex 9.13 -4.19 27.78
vertex 7.06 -3.99 23.19
vertex 11.32 -3.43 22.47
endloop
endfacet
facet normal 0.58 -0.34 0.75
outer loop
vertex 15.47 -5.06 91.14
vertex 7.34 -4.63 97.60
vertex 9.05 -10.82 93.50
endloop
endfacet
facet normal 0.55 -0.43 0.72
outer loop
vertex 7.34 -4.63 97.60
vertex 15.47 -5.06 91.14
vertex 13.27 -2.78 94.19
endloop
endfacet
facet normal 0.61 -0.63 0.48
outer loop
vertex 11.18 -11.25 91.43
vertex 9.21 -15.77 87.96
vertex 13.93 -12.26 86.65
endloop
endfacet
facet normal -0.32 -0.95 -0.03
outer loop
vertex 5.44 -4.55 16.66
vertex 7.42 -5.02 10.59
vertex 8.38 -5.67 20.45
endloop
endfacet
facet normal 0.52 -0.56 0.65
outer loop
vertex 9.05 -10.82 93.50
vertex 7.42 -12.77 93.11
vertex 11.18 -11.25 91.43
endloop
endfacet
facet normal 0.59 -0.76 -0.26
outer loop
vertex 13.35 -7.97 37.87
vertex 6.61 -11.39 32.43
vertex 9.35 -9.24 32.36
endloop
endfacet
facet normal 0.61 -0.73 -0.30
outer loop
vertex 7.08 -14.88 41.74
vertex 6.61 -11.39 32.43
vertex 13.35 -7.97 37.87
endloop
endfacet
facet normal -0.13 -0.97 0.20
outer loop
vertex 7.19 -12.90 0.11
vertex 12.07 -13.56 0.11
vertex 12.21 -12.35 6.23
endloop
endfacet
facet normal 0.68 -0.71 -0.16
outer loop
vertex 13.35 -7.97 37.87
vertex 10.98 -12.74 48.67
vertex 7.08 -14.88 41.74
endloop
endfacet
facet normal 0.27 -0.94 0.22
outer loop
vertex 9.21 -15.77 87.96
vertex 4.54 -16.54 90.43
vertex 9.15 -17.53 80.47
endloop
endfacet
facet normal 0.57 0.22 0.79
outer loop
vertex 12.49 5.31 59.51
vertex 8.51 5.03 62.46
vertex 9.23 3.47 62.37
endloop
endfacet
facet normal 0.63 -0.47 -0.62
outer loop
vertex 11.37 -2.58 29.40
vertex 9.35 -9.24 32.36
vertex 7.41 -7.74 29.29
endloop
endfacet
facet normal 0.69 0.54 0.47
outer loop
vertex 12.49 5.31 59.51
vertex 7.52 13.06 57.90
vertex 9.67 8.17 60.38
endloop
endfacet
facet normal 0.55 0.30 0.78
outer loop
vertex 9.67 8.17 60.38
vertex 8.00 5.87 62.43
vertex 12.49 5.31 59.51
endloop
endfacet
facet normal 0.54 0.35 0.77
outer loop
vertex 12.49 5.31 59.51
vertex 8.00 5.87 62.43
vertex 8.51 5.03 62.46
endloop
endfacet
facet normal 0.90 0.42 -0.12
outer loop
vertex 8.51 5.03 62.46
vertex 8.79 4.45 62.54
vertex 9.23 3.47 62.37
endloop
endfacet
facet normal 0.62 -0.33 0.72
outer loop
vertex 8.71 -4.02 62.58
vertex 12.16 -7.44 58.05
vertex 13.54 -2.80 58.99
endloop
endfacet
facet normal 0.47 -0.57 0.67
outer loop
vertex 7.76 -13.16 56.28
vertex 12.16 -7.44 58.05
vertex 4.63 -13.71 58.03
endloop
endfacet
facet normal 0.34 -0.85 -0.40
outer loop
vertex 11.91 -13.35 70.39
vertex 2.01 -18.49 72.87
vertex 8.91 -13.34 67.77
endloop
endfacet
facet normal 0.60 0.53 -0.59
outer loop
vertex 6.17 9.88 29.54
vertex 9.34 6.54 29.76
vertex 6.45 6.00 26.34
endloop
endfacet
facet normal 0.71 -0.54 -0.45
outer loop
vertex 11.37 -2.58 29.40
vertex 7.41 -7.74 29.29
vertex 9.13 -4.19 27.78
endloop
endfacet
facet normal 0.34 -0.45 0.82
outer loop
vertex 7.34 -4.63 97.60
vertex 7.42 -12.77 93.11
vertex 9.05 -10.82 93.50
endloop
endfacet
facet normal 0.43 -0.66 0.61
outer loop
vertex 11.18 -11.25 91.43
vertex 4.54 -16.54 90.43
vertex 9.21 -15.77 87.96
endloop
endfacet
facet normal 0.44 0.40 0.80
outer loop
vertex 9.67 8.17 60.38
vertex 5.10 8.89 62.54
vertex 8.00 5.87 62.43
endloop
endfacet
facet normal 0.99 0.04 0.16
outer loop
vertex 7.33 -3.87 99.15
vertex 7.59 -7.36 98.53
vertex 8.33 -12.81 95.38
endloop
endfacet
facet normal 0.44 -0.53 0.73
outer loop
vertex 8.71 -4.02 62.58
vertex 4.63 -13.71 58.03
vertex 12.16 -7.44 58.05
endloop
endfacet
facet normal -0.26 -0.82 0.51
outer loop
vertex 10.29 -9.63 9.64
vertex 4.38 -10.70 4.87
vertex 12.21 -12.35 6.23
endloop
endfacet
facet normal -0.24 -0.93 0.28
outer loop
vertex 12.21 -12.35 6.23
vertex 4.38 -10.70 4.87
vertex 7.19 -12.90 0.11
endloop
endfacet
facet normal 0.90 -0.24 -0.37
outer loop
vertex 8.33 -12.81 95.38
vertex 5.49 -18.55 92.12
vertex 7.42 -12.77 93.11
endloop
endfacet
facet normal 0.50 -0.72 0.48
outer loop
vertex 11.18 -11.25 91.43
vertex 7.42 -12.77 93.11
vertex 4.54 -16.54 90.43
endloop
endfacet
facet normal 0.39 0.56 0.73
outer loop
vertex 10.53 13.41 90.66
vertex 3.45 14.23 93.81
vertex 9.34 8.19 95.26
endloop
endfacet
facet normal 0.80 0.14 -0.59
outer loop
vertex 7.22 2.42 99.14
vertex 7.34 -4.63 97.60
vertex 5.89 5.28 98.02
endloop
endfacet
facet normal 1.00 0.02 0.00
outer loop
vertex 7.22 2.42 99.14
vertex 7.33 -3.87 99.15
vertex 7.34 -4.63 97.60
endloop
endfacet
facet normal 0.99 0.14 -0.06
outer loop
vertex 7.33 -3.87 99.15
vertex 8.33 -12.81 95.38
vertex 7.34 -4.63 97.60
endloop
endfacet
facet normal 0.91 0.21 -0.36
outer loop
vertex 8.33 -12.81 95.38
vertex 7.42 -12.77 93.11
vertex 7.34 -4.63 97.60
endloop
endfacet
facet normal 0.48 -0.63 -0.61
outer loop
vertex 6.61 -11.39 32.43
vertex 7.41 -7.74 29.29
vertex 9.35 -9.24 32.36
endloop
endfacet
facet normal 0.77 -0.15 -0.62
outer loop
vertex 5.49 -18.55 92.12
vertex 4.54 -16.54 90.43
vertex 7.42 -12.77 93.11
endloop
endfacet
facet normal 0.42 0.59 0.69
outer loop
vertex 9.67 8.17 60.38
vertex 4.47 14.69 57.92
vertex 5.10 8.89 62.54
endloop
endfacet
facet normal -0.36 -0.40 0.84
outer loop
vertex 7.42 -5.02 10.59
vertex 3.08 -6.57 8.03
vertex 10.29 -9.63 9.64
endloop
endfacet
facet normal 0.69 -0.52 0.50
outer loop
vertex 8.71 -4.02 62.58
vertex 5.18 -8.44 62.81
vertex 4.63 -13.71 58.03
endloop
endfacet
facet normal 0.21 -0.56 0.80
outer loop
vertex 8.33 -12.81 95.38
vertex -0.40 -15.90 95.49
vertex 5.49 -18.55 92.12
endloop
endfacet
facet normal 0.29 0.53 0.80
outer loop
vertex 7.52 13.06 57.90
vertex 4.47 14.69 57.92
vertex 9.67 8.17 60.38
endloop
endfacet
facet normal 0.27 0.47 0.84
outer loop
vertex 9.34 8.19 95.26
vertex 3.45 14.23 93.81
vertex 5.89 5.28 98.02
endloop
endfacet
facet normal 0.33 0.77 0.55
outer loop
vertex 1.24 17.51 90.53
vertex 3.45 14.23 93.81
vertex 10.53 13.41 90.66
endloop
endfacet
facet normal -0.44 -0.90 -0.07
outer loop
vertex 5.44 -4.55 16.66
vertex 5.03 -3.78 9.66
vertex 7.42 -5.02 10.59
endloop
endfacet
facet normal 0.04 -0.17 0.98
outer loop
vertex 7.33 -3.87 99.15
vertex -0.71 -9.55 98.52
vertex 7.59 -7.36 98.53
endloop
endfacet
facet normal 0.43 -0.89 0.13
outer loop
vertex 7.76 -13.16 56.28
vertex 1.55 -16.68 52.71
vertex 10.98 -12.74 48.67
endloop
endfacet
facet normal -0.11 0.00 0.99
outer loop
vertex 7.22 2.42 99.14
vertex 5.28 6.14 98.93
vertex 7.33 -3.87 99.15
endloop
endfacet
facet normal 0.01 -0.85 0.53
outer loop
vertex 7.06 -3.99 23.19
vertex 3.98 -2.59 25.51
vertex 8.38 -5.67 20.45
endloop
endfacet
facet normal -0.44 -0.20 0.87
outer loop
vertex 5.03 -3.78 9.66
vertex 3.08 -6.57 8.03
vertex 7.42 -5.02 10.59
endloop
endfacet
facet normal -0.20 -0.87 0.45
outer loop
vertex 4.44 -9.22 7.78
vertex 4.38 -10.70 4.87
vertex 10.29 -9.63 9.64
endloop
endfacet
facet normal 0.13 -0.48 0.87
outer loop
vertex 7.59 -7.36 98.53
vertex -0.71 -9.55 98.52
vertex 8.33 -12.81 95.38
endloop
endfacet
facet normal 0.33 -0.89 0.31
outer loop
vertex 7.76 -13.16 56.28
vertex 4.63 -13.71 58.03
vertex 1.55 -16.68 52.71
endloop
endfacet
facet normal 0.42 -0.90 0.10
outer loop
vertex 10.98 -12.74 48.67
vertex 1.55 -16.68 52.71
vertex 2.07 -16.61 51.15
endloop
endfacet
facet normal 0.41 -0.91 0.05
outer loop
vertex 10.98 -12.74 48.67
vertex 2.07 -16.61 51.15
vertex 7.08 -14.88 41.74
endloop
endfacet
facet normal 0.25 -0.83 -0.50
outer loop
vertex 2.01 -18.49 72.87
vertex 2.12 -14.63 66.51
vertex 8.91 -13.34 67.77
endloop
endfacet
facet normal 0.39 -0.88 -0.26
outer loop
vertex 9.15 -17.53 80.47
vertex 2.01 -18.49 72.87
vertex 11.91 -13.35 70.39
endloop
endfacet
facet normal -0.48 -0.87 0.11
outer loop
vertex 8.38 -5.67 20.45
vertex 3.98 -2.59 25.51
vertex 5.44 -4.55 16.66
endloop
endfacet
facet normal 0.27 -0.37 -0.89
outer loop
vertex 9.13 -4.19 27.78
vertex 4.25 -8.01 27.88
vertex 3.98 -2.59 25.51
endloop
endfacet
facet normal 0.25 -0.59 -0.77
outer loop
vertex 5.18 -8.44 62.81
vertex 8.91 -13.34 67.77
vertex 2.12 -14.63 66.51
endloop
endfacet
facet normal 0.33 0.61 0.72
outer loop
vertex 4.47 14.69 57.92
vertex 2.02 10.41 62.69
vertex 5.10 8.89 62.54
endloop
endfacet
facet normal -0.31 -0.24 0.92
outer loop
vertex 3.08 -6.57 8.03
vertex 4.44 -9.22 7.78
vertex 10.29 -9.63 9.64
endloop
endfacet
facet normal -0.83 -0.56 -0.01
outer loop
vertex 3.98 -2.59 25.51
vertex 5.03 -3.78 9.66
vertex 5.44 -4.55 16.66
endloop
endfacet
facet normal -0.53 -0.84 0.07
outer loop
vertex 4.38 -10.70 4.87
vertex 3.71 -10.68 0.19
vertex 7.19 -12.90 0.11
endloop
endfacet
facet normal -0.70 -0.63 0.34
outer loop
vertex 4.44 -9.22 7.78
vertex 3.13 -9.26 5.00
vertex 4.38 -10.70 4.87
endloop
endfacet
facet normal 0.34 -0.66 -0.68
outer loop
vertex 6.61 -11.39 32.43
vertex 1.59 -10.60 29.18
vertex 7.41 -7.74 29.29
endloop
endfacet
facet normal 0.17 0.46 0.87
outer loop
vertex 3.45 14.23 93.81
vertex -1.73 7.66 98.23
vertex 5.89 5.28 98.02
endloop
endfacet
facet normal -0.61 -0.04 0.79
outer loop
vertex 5.03 -3.78 9.66
vertex 3.05 2.00 8.46
vertex 3.08 -6.57 8.03
endloop
endfacet
facet normal -0.81 -0.45 0.39
outer loop
vertex 3.08 -6.57 8.03
vertex 3.13 -9.26 5.00
vertex 4.44 -9.22 7.78
endloop
endfacet
facet normal 0.35 -0.68 -0.64
outer loop
vertex 7.41 -7.74 29.29
vertex 1.59 -10.60 29.18
vertex 4.25 -8.01 27.88
endloop
endfacet
facet normal 0.16 -0.42 0.89
outer loop
vertex 8.33 -12.81 95.38
vertex -0.71 -9.55 98.52
vertex -0.40 -15.90 95.49
endloop
endfacet
facet normal 0.26 -0.90 -0.35
outer loop
vertex 7.08 -14.88 41.74
vertex -0.48 -14.23 34.37
vertex 6.61 -11.39 32.43
endloop
endfacet
facet normal 0.23 -0.92 -0.32
outer loop
vertex -0.49 -16.23 40.16
vertex -0.48 -14.23 34.37
vertex 7.08 -14.88 41.74
endloop
endfacet
facet normal 0.08 -0.99 -0.14
outer loop
vertex 2.07 -16.61 51.15
vertex -1.98 -16.83 50.25
vertex 7.08 -14.88 41.74
endloop
endfacet
facet normal 0.19 0.76 -0.62
outer loop
vertex 3.91 18.32 70.74
vertex 5.72 14.33 66.35
vertex 1.37 15.37 66.30
endloop
endfacet
facet normal 0.09 0.72 0.69
outer loop
vertex 4.47 14.69 57.92
vertex -2.04 15.54 57.89
vertex 2.02 10.41 62.69
endloop
endfacet
facet normal -0.75 -0.66 0.11
outer loop
vertex 4.38 -10.70 4.87
vertex 3.13 -9.26 5.00
vertex 3.71 -10.68 0.19
endloop
endfacet
facet normal 0.12 -0.67 0.73
outer loop
vertex 4.63 -13.71 58.03
vertex 5.18 -8.44 62.81
vertex -0.44 -14.78 57.91
endloop
endfacet
facet normal 0.18 -0.98 -0.03
outer loop
vertex -1.98 -16.83 50.25
vertex -0.49 -16.23 40.16
vertex 7.08 -14.88 41.74
endloop
endfacet
facet normal 0.04 0.54 0.84
outer loop
vertex 3.45 14.23 93.81
vertex -2.15 14.69 93.77
vertex -1.73 7.66 98.23
endloop
endfacet
facet normal 0.20 -0.84 -0.51
outer loop
vertex -0.48 -14.23 34.37
vertex 1.59 -10.60 29.18
vertex 6.61 -11.39 32.43
endloop
endfacet
facet normal 0.18 -0.90 0.40
outer loop
vertex 4.63 -13.71 58.03
vertex -0.44 -14.78 57.91
vertex 1.55 -16.68 52.71
endloop
endfacet
facet normal 0.14 -0.98 0.16
outer loop
vertex 4.54 -16.54 90.43
vertex -0.42 -17.31 90.18
vertex 9.15 -17.53 80.47
endloop
endfacet
facet normal 0.05 0.72 0.69
outer loop
vertex 3.45 14.23 93.81
vertex 1.24 17.51 90.53
vertex -2.15 14.69 93.77
endloop
endfacet
facet normal 0.31 -0.74 0.60
outer loop
vertex 5.18 -8.44 62.81
vertex 1.41 -9.92 62.96
vertex -0.44 -14.78 57.91
endloop
endfacet
facet normal 0.69 0.64 -0.34
outer loop
vertex 1.83 -16.79 51.03
vertex 2.77 -19.64 47.53
vertex 1.56 -18.21 47.79
endloop
endfacet
facet normal 0.03 -0.76 0.65
outer loop
vertex -0.40 -15.90 95.49
vertex -5.05 -19.03 92.04
vertex 5.49 -18.55 92.12
endloop
endfacet
facet normal 0.83 -0.31 0.47
outer loop
vertex 1.83 -16.79 51.03
vertex 0.75 -18.84 51.61
vertex 2.77 -19.64 47.53
endloop
endfacet
facet normal -0.18 -0.41 0.90
outer loop
vertex 2.07 -16.61 51.15
vertex 1.59 -16.58 51.07
vertex -1.98 -16.83 50.25
endloop
endfacet
facet normal 0.57 -0.81 0.15
outer loop
vertex 1.55 -16.68 52.71
vertex 1.83 -16.79 51.03
vertex 2.07 -16.61 51.15
endloop
endfacet
facet normal 0.89 -0.42 0.18
outer loop
vertex 1.83 -16.79 51.03
vertex 1.55 -16.68 52.71
vertex 0.75 -18.84 51.61
endloop
endfacet
facet normal -0.30 -0.41 0.86
outer loop
vertex 1.56 -18.21 47.79
vertex 0.85 -18.52 47.39
vertex 2.77 -19.64 47.53
endloop
endfacet
facet normal 0.04 -0.85 -0.52
outer loop
vertex 2.01 -18.49 72.87
vertex -2.39 -15.22 67.10
vertex 2.12 -14.63 66.51
endloop
endfacet
facet normal 0.13 -0.99 0.08
outer loop
vertex 2.77 -19.64 47.53
vertex -0.63 -20.17 46.23
vertex 2.32 -19.76 46.71
endloop
endfacet
facet normal 0.00 -0.99 0.13
outer loop
vertex 9.15 -17.53 80.47
vertex -2.60 -18.49 72.85
vertex 2.01 -18.49 72.87
endloop
endfacet
facet normal -0.28 -0.37 0.89
outer loop
vertex 2.77 -19.64 47.53
vertex 0.85 -18.52 47.39
vertex -0.63 -20.17 46.23
endloop
endfacet
facet normal -0.02 0.68 0.74
outer loop
vertex 2.02 10.41 62.69
vertex -2.04 15.54 57.89
vertex -3.30 10.28 62.69
endloop
endfacet
facet normal 0.03 -0.40 -0.92
outer loop
vertex 4.25 -8.01 27.88
vertex -3.63 -8.61 27.84
vertex 3.98 -2.59 25.51
endloop
endfacet
facet normal 0.04 -0.48 -0.87
outer loop
vertex 1.59 -10.60 29.18
vertex -3.63 -8.61 27.84
vertex 4.25 -8.01 27.88
endloop
endfacet
facet normal 0.06 0.72 0.69
outer loop
vertex 1.24 17.51 90.53
vertex -2.27 16.05 92.35
vertex -2.15 14.69 93.77
endloop
endfacet
facet normal 0.07 -0.93 0.37
outer loop
vertex -0.44 -14.78 57.91
vertex -2.34 -16.42 54.14
vertex 1.55 -16.68 52.71
endloop
endfacet
facet normal -0.07 -1.00 0.00
outer loop
vertex -2.34 -16.42 54.14
vertex -1.62 -16.48 52.63
vertex 1.53 -16.71 51.99
endloop
endfacet
facet normal 0.10 -0.99 -0.13
outer loop
vertex 1.53 -16.71 51.99
vertex -1.98 -16.83 50.25
vertex 1.59 -16.58 51.07
endloop
endfacet
facet normal 0.21 -0.68 0.70
outer loop
vertex 0.85 -18.52 47.39
vertex -2.50 -18.07 48.82
vertex -0.63 -20.17 46.23
endloop
endfacet
facet normal 0.08 -0.99 0.10
outer loop
vertex -0.42 -17.31 90.18
vertex -6.10 -18.81 79.30
vertex 9.15 -17.53 80.47
endloop
endfacet
facet normal 0.09 -0.74 0.67
outer loop
vertex -2.50 -18.07 48.82
vertex -2.38 -19.98 46.68
vertex -0.63 -20.17 46.23
endloop
endfacet
facet normal -0.02 -0.15 0.99
outer loop
vertex 0.45 7.94 99.10
vertex -2.98 7.58 98.98
vertex 5.28 6.14 98.93
endloop
endfacet
facet normal 0.05 0.23 0.97
outer loop
vertex -2.98 7.58 98.98
vertex -3.91 3.43 100.00
vertex 5.28 6.14 98.93
endloop
endfacet
facet normal 0.10 0.04 0.99
outer loop
vertex 5.28 6.14 98.93
vertex -3.91 3.43 100.00
vertex 7.33 -3.87 99.15
endloop
endfacet
facet normal -0.22 -0.66 0.72
outer loop
vertex 1.41 -9.92 62.96
vertex -7.43 -7.32 62.69
vertex -0.44 -14.78 57.91
endloop
endfacet
facet normal -0.04 -0.99 0.15
outer loop
vertex -1.62 -16.48 52.63
vertex -1.98 -16.83 50.25
vertex 1.53 -16.71 51.99
endloop
endfacet
facet normal 0.00 -0.12 0.99
outer loop
vertex 7.33 -3.87 99.15
vertex -7.84 -1.66 99.47
vertex -0.71 -9.55 98.52
endloop
endfacet
facet normal 0.23 -0.96 0.15
outer loop
vertex -2.34 -16.42 54.14
vertex -2.29 -16.60 52.89
vertex -1.62 -16.48 52.63
endloop
endfacet
facet normal 0.00 -0.87 -0.49
outer loop
vertex -2.60 -18.49 72.85
vertex -2.39 -15.22 67.10
vertex 2.01 -18.49 72.87
endloop
endfacet
facet normal 0.37 -0.11 0.92
outer loop
vertex -1.62 -16.48 52.63
vertex -2.29 -16.60 52.89
vertex -1.89 -18.33 52.52
endloop
endfacet
facet normal 0.98 -0.14 -0.13
outer loop
vertex -1.62 -16.48 52.63
vertex -1.89 -18.33 52.52
vertex -1.98 -16.83 50.25
endloop
endfacet
facet normal 1.00 0.07 0.03
outer loop
vertex -2.34 2.52 4.65
vertex -1.83 -4.74 4.51
vertex -1.88 -2.03 0.05
endloop
endfacet
facet normal 0.93 0.06 0.38
outer loop
vertex -3.17 -5.01 7.87
vertex -1.83 -4.74 4.51
vertex -2.34 2.52 4.65
endloop
endfacet
facet normal 0.99 -0.11 -0.08
outer loop
vertex -1.83 -4.74 4.51
vertex -2.47 -7.15 0.06
vertex -1.88 -2.03 0.05
endloop
endfacet
facet normal 0.96 -0.20 -0.17
outer loop
vertex -1.89 -18.33 52.52
vertex -2.50 -18.07 48.82
vertex -1.98 -16.83 50.25
endloop
endfacet
facet normal -0.04 0.25 0.97
outer loop
vertex -2.98 7.58 98.98
vertex -4.39 7.10 99.05
vertex -3.91 3.43 100.00
endloop
endfacet
facet normal 0.94 0.28 -0.18
outer loop
vertex -2.34 2.52 4.65
vertex -1.88 -2.03 0.05
vertex -4.42 6.78 0.28
endloop
endfacet
facet normal 0.00 -0.11 0.99
outer loop
vertex -3.91 3.43 100.00
vertex -7.84 -1.66 99.47
vertex 7.33 -3.87 99.15
endloop
endfacet
facet normal 0.92 -0.37 0.07
outer loop
vertex -1.83 -4.74 4.51
vertex -3.68 -9.48 3.64
vertex -2.47 -7.15 0.06
endloop
endfacet
facet normal -0.19 -0.81 0.55
outer loop
vertex -0.44 -14.78 57.91
vertex -5.31 -14.67 56.33
vertex -1.62 -15.60 56.27
endloop
endfacet
facet normal 0.53 0.64 -0.56
outer loop
vertex -2.45 -17.49 49.52
vertex -2.50 -18.07 48.82
vertex -2.78 -17.54 49.15
endloop
endfacet
facet normal 0.92 -0.34 -0.17
outer loop
vertex -1.89 -18.33 52.52
vertex -2.93 -19.65 49.60
vertex -2.50 -18.07 48.82
endloop
endfacet
facet normal 0.97 -0.17 0.20
outer loop
vertex -2.50 -18.07 48.82
vertex -2.93 -19.65 49.60
vertex -2.38 -19.98 46.68
endloop
endfacet
facet normal 0.05 -0.99 0.12
outer loop
vertex -2.93 -19.65 49.60
vertex -3.00 -19.92 47.43
vertex -2.38 -19.98 46.68
endloop
endfacet
facet normal 0.90 0.44 0.01
outer loop
vertex -4.41 6.70 4.63
vertex -2.34 2.52 4.65
vertex -4.42 6.78 0.28
endloop
endfacet
facet normal 0.95 0.03 0.32
outer loop
vertex -3.65 0.74 8.66
vertex -3.17 -5.01 7.87
vertex -2.34 2.52 4.65
endloop
endfacet
facet normal 0.86 -0.40 0.32
outer loop
vertex -3.17 -5.01 7.87
vertex -5.11 -9.21 7.80
vertex -3.68 -9.48 3.64
endloop
endfacet
facet normal 0.86 -0.40 0.31
outer loop
vertex -3.17 -5.01 7.87
vertex -3.68 -9.48 3.64
vertex -1.83 -4.74 4.51
endloop
endfacet
facet normal 0.88 -0.48 -0.02
outer loop
vertex -3.68 -9.48 3.64
vertex -4.36 -10.61 0.00
vertex -2.47 -7.15 0.06
endloop
endfacet
facet normal -0.20 -0.77 -0.61
outer loop
vertex -0.48 -14.23 34.37
vertex -7.96 -12.04 34.02
vertex 1.59 -10.60 29.18
endloop
endfacet
facet normal -0.15 -0.98 0.13
outer loop
vertex -2.34 -16.42 54.14
vertex -2.58 -16.92 50.22
vertex -2.29 -16.60 52.89
endloop
endfacet
facet normal 0.81 0.40 0.44
outer loop
vertex -5.83 5.66 8.21
vertex -2.34 2.52 4.65
vertex -4.41 6.70 4.63
endloop
endfacet
facet normal -0.05 -0.51 -0.86
outer loop
vertex -2.39 -15.22 67.10
vertex -7.43 -7.32 62.69
vertex 2.12 -14.63 66.51
endloop
endfacet
facet normal -0.25 -0.91 -0.32
outer loop
vertex -0.49 -16.23 40.16
vertex -7.96 -12.04 34.02
vertex -0.48 -14.23 34.37
endloop
endfacet
facet normal -0.34 -0.93 0.14
outer loop
vertex -2.34 -16.42 54.14
vertex -5.37 -15.24 54.69
vertex -2.58 -16.92 50.22
endloop
endfacet
facet normal 0.81 0.40 0.44
outer loop
vertex -5.83 5.66 8.21
vertex -3.65 0.74 8.66
vertex -2.34 2.52 4.65
endloop
endfacet
facet normal -0.22 -0.91 -0.35
outer loop
vertex -0.49 -16.23 40.16
vertex -5.58 -15.84 42.39
vertex -7.96 -12.04 34.02
endloop
endfacet
facet normal -0.28 -0.74 -0.62
outer loop
vertex -2.39 -15.22 67.10
vertex -4.93 -16.80 70.13
vertex -9.83 -15.05 70.23
endloop
endfacet
facet normal 0.91 0.40 -0.06
outer loop
vertex -3.25 2.37 25.40
vertex -3.65 0.74 8.66
vertex -5.83 5.66 8.21
endloop
endfacet
facet normal 0.96 -0.28 0.00
outer loop
vertex -3.25 2.37 25.40
vertex -4.70 -2.57 25.36
vertex -3.65 0.74 8.66
endloop
endfacet
facet normal 0.54 -0.07 0.84
outer loop
vertex -3.65 0.74 8.66
vertex -5.64 -3.66 9.59
vertex -3.17 -5.01 7.87
endloop
endfacet
facet normal 0.47 -0.23 0.85
outer loop
vertex -3.17 -5.01 7.87
vertex -5.64 -3.66 9.59
vertex -5.11 -9.21 7.80
endloop
endfacet
facet normal -0.15 -0.43 0.89
outer loop
vertex -0.71 -9.55 98.52
vertex -8.96 -12.01 95.91
vertex -0.40 -15.90 95.49
endloop
endfacet
facet normal -0.22 -0.92 0.33
outer loop
vertex -5.31 -14.67 56.33
vertex -5.37 -15.24 54.69
vertex -1.62 -15.60 56.27
endloop
endfacet
facet normal -0.26 -0.87 0.42
outer loop
vertex -1.62 -15.60 56.27
vertex -5.37 -15.24 54.69
vertex -2.34 -16.42 54.14
endloop
endfacet
facet normal -0.11 -0.99 -0.07
outer loop
vertex -1.98 -16.83 50.25
vertex -5.58 -15.84 42.39
vertex -0.49 -16.23 40.16
endloop
endfacet
facet normal 0.87 0.50 -0.03
outer loop
vertex -4.89 5.24 25.72
vertex -3.25 2.37 25.40
vertex -5.83 5.66 8.21
endloop
endfacet
facet normal 0.91 -0.42 -0.03
outer loop
vertex -4.70 -2.57 25.36
vertex -5.64 -3.66 9.59
vertex -3.65 0.74 8.66
endloop
endfacet
facet normal 0.41 -0.89 0.20
outer loop
vertex -3.68 -9.48 3.64
vertex -5.11 -9.21 7.80
vertex -4.36 -10.61 0.00
endloop
endfacet
facet normal -0.13 -0.85 -0.50
outer loop
vertex 1.59 -10.60 29.18
vertex -7.96 -12.04 34.02
vertex -5.36 -9.63 29.27
endloop
endfacet
facet normal -0.20 -0.65 0.73
outer loop
vertex -7.43 -7.32 62.69
vertex -7.95 -12.32 58.07
vertex -0.44 -14.78 57.91
endloop
endfacet
facet normal -0.22 -0.73 0.65
outer loop
vertex -0.44 -14.78 57.91
vertex -7.95 -12.32 58.07
vertex -5.31 -14.67 56.33
endloop
endfacet
facet normal -0.12 0.90 -0.41
outer loop
vertex -2.58 -16.92 50.22
vertex -5.37 -15.24 54.69
vertex -1.98 -16.83 50.25
endloop
endfacet
facet normal -0.05 -0.87 -0.50
outer loop
vertex -2.39 -15.22 67.10
vertex -2.60 -18.49 72.85
vertex -4.93 -16.80 70.13
endloop
endfacet
facet normal -0.24 0.94 0.26
outer loop
vertex -0.50 19.72 85.66
vertex -6.85 19.38 81.09
vertex -6.89 17.20 88.92
endloop
endfacet
facet normal -0.26 0.21 0.94
outer loop
vertex -3.91 3.43 100.00
vertex -4.39 7.10 99.05
vertex -7.83 2.62 99.10
endloop
endfacet
facet normal 0.81 -0.59 -0.01
outer loop
vertex -4.70 -2.57 25.36
vertex -6.33 -4.71 17.19
vertex -5.64 -3.66 9.59
endloop
endfacet
facet normal -0.37 -0.93 0.05
outer loop
vertex -5.37 -15.24 54.69
vertex -5.58 -15.84 42.39
vertex -1.98 -16.83 50.25
endloop
endfacet
facet normal -0.67 -0.73 -0.15
outer loop
vertex -4.81 3.04 24.13
vertex -6.86 5.01 23.63
vertex -5.04 3.35 23.67
endloop
endfacet
facet normal -0.10 -0.21 0.97
outer loop
vertex -7.84 -1.66 99.47
vertex -8.63 -7.67 98.10
vertex -0.71 -9.55 98.52
endloop
endfacet
facet normal -0.43 -0.80 0.42
outer loop
vertex -7.95 -12.32 58.07
vertex -8.25 -13.82 54.92
vertex -5.31 -14.67 56.33
endloop
endfacet
facet normal -0.20 -0.95 0.23
outer loop
vertex -6.55 -15.83 90.85
vertex -10.00 -16.18 86.29
vertex -0.42 -17.31 90.18
endloop
endfacet
facet normal -0.21 -0.95 0.24
outer loop
vertex -0.42 -17.31 90.18
vertex -10.00 -16.18 86.29
vertex -6.10 -18.81 79.30
endloop
endfacet
facet normal -0.39 -0.84 -0.36
outer loop
vertex -5.05 -19.03 92.04
vertex -6.52 -18.38 92.11
vertex -6.32 -18.30 91.72
endloop
endfacet
facet normal -0.44 -0.47 0.77
outer loop
vertex -5.04 3.35 23.67
vertex -6.86 5.01 23.63
vertex -7.56 1.97 21.37
endloop
endfacet
facet normal -0.72 0.20 0.67
outer loop
vertex -5.04 3.35 23.67
vertex -7.56 1.97 21.37
vertex -6.74 -3.37 23.83
endloop
endfacet
facet normal 0.40 -0.92 -0.04
outer loop
vertex -6.18 -3.24 26.07
vertex -6.74 -3.37 23.83
vertex -4.70 -2.57 25.36
endloop
endfacet
facet normal 0.35 -0.26 0.90
outer loop
vertex -5.64 -3.66 9.59
vertex -9.47 -5.19 10.66
vertex -5.11 -9.21 7.80
endloop
endfacet
facet normal 0.31 -0.30 0.90
outer loop
vertex -5.11 -9.21 7.80
vertex -9.47 -5.19 10.66
vertex -11.08 -8.20 10.22
endloop
endfacet
facet normal -0.40 -0.86 0.31
outer loop
vertex -5.31 -14.67 56.33
vertex -8.25 -13.82 54.92
vertex -5.37 -15.24 54.69
endloop
endfacet
facet normal -0.04 -0.91 -0.40
outer loop
vertex -5.58 -15.84 42.39
vertex -7.14 -14.79 40.16
vertex -7.96 -12.04 34.02
endloop
endfacet
facet normal -0.32 -0.88 -0.36
outer loop
vertex -4.93 -16.80 70.13
vertex -10.22 -16.21 73.43
vertex -9.83 -15.05 70.23
endloop
endfacet
facet normal -0.35 0.62 0.71
outer loop
vertex -1.73 7.66 98.23
vertex -9.83 4.95 96.60
vertex -6.39 5.33 97.97
endloop
endfacet
facet normal -0.24 0.08 0.97
outer loop
vertex -3.91 3.43 100.00
vertex -7.83 2.62 99.10
vertex -7.84 -1.66 99.47
endloop
endfacet
facet normal -0.15 -0.44 0.89
outer loop
vertex -8.63 -7.67 98.10
vertex -8.96 -12.01 95.91
vertex -0.71 -9.55 98.52
endloop
endfacet
facet normal -0.46 -0.67 -0.59
outer loop
vertex -7.96 -12.04 34.02
vertex -7.18 -8.10 28.96
vertex -5.36 -9.63 29.27
endloop
endfacet
facet normal -0.29 -0.93 -0.21
outer loop
vertex -6.10 -18.81 79.30
vertex -10.22 -16.21 73.43
vertex -2.60 -18.49 72.85
endloop
endfacet
facet normal -0.19 -0.52 0.83
outer loop
vertex -8.96 -12.01 95.91
vertex -8.45 -16.09 93.50
vertex -0.40 -15.90 95.49
endloop
endfacet
facet normal -0.24 -0.94 0.22
outer loop
vertex -10.00 -16.18 86.29
vertex -10.45 -16.84 82.95
vertex -6.10 -18.81 79.30
endloop
endfacet
facet normal -0.38 0.10 0.92
outer loop
vertex -6.39 5.33 97.97
vertex -9.83 4.95 96.60
vertex -8.07 -1.79 98.06
endloop
endfacet
facet normal 0.28 -0.94 0.19
outer loop
vertex -4.70 -2.57 25.36
vertex -10.52 -5.32 20.44
vertex -6.33 -4.71 17.19
endloop
endfacet
facet normal 0.47 -0.86 0.20
outer loop
vertex -5.11 -9.21 7.80
vertex -9.38 -13.35 0.12
vertex -4.36 -10.61 0.00
endloop
endfacet
facet normal -0.25 -0.65 0.72
outer loop
vertex -8.45 -16.09 93.50
vertex -6.52 -18.38 92.11
vertex -5.05 -19.03 92.04
endloop
endfacet
facet normal 0.04 -0.99 -0.13
outer loop
vertex -6.33 -4.71 17.19
vertex -10.52 -5.32 20.44
vertex -5.64 -3.66 9.59
endloop
endfacet
facet normal 0.38 -0.93 0.03
outer loop
vertex -10.52 -5.32 20.44
vertex -9.47 -5.19 10.66
vertex -5.64 -3.66 9.59
endloop
endfacet
facet normal -0.17 -0.76 0.62
outer loop
vertex -4.70 -2.57 25.36
vertex -6.74 -3.37 23.83
vertex -10.52 -5.32 20.44
endloop
endfacet
facet normal -0.47 0.65 0.60
outer loop
vertex -2.04 15.54 57.89
vertex -7.62 7.47 62.40
vertex -3.30 10.28 62.69
endloop
endfacet
facet normal 0.38 0.29 0.88
outer loop
vertex -9.83 4.95 96.60
vertex -9.51 2.16 97.38
vertex -8.07 -1.79 98.06
endloop
endfacet
facet normal -0.54 -0.54 0.64
outer loop
vertex -7.43 -7.32 62.69
vertex -12.29 -7.75 58.25
vertex -7.95 -12.32 58.07
endloop
endfacet
facet normal -0.34 0.34 0.88
outer loop
vertex -7.89 11.69 94.30
vertex -11.56 5.20 95.44
vertex -1.73 7.66 98.23
endloop
endfacet
facet normal -0.35 0.65 0.67
outer loop
vertex -1.73 7.66 98.23
vertex -11.56 5.20 95.44
vertex -9.83 4.95 96.60
endloop
endfacet
facet normal -0.22 0.38 0.90
outer loop
vertex -7.56 1.97 21.37
vertex -10.06 -3.91 23.23
vertex -6.74 -3.37 23.83
endloop
endfacet
facet normal 0.13 -0.71 -0.69
outer loop
vertex -8.97 -4.39 27.54
vertex -8.75 -4.06 27.24
vertex -8.42 -4.04 27.29
endloop
endfacet
facet normal 0.64 -0.77 0.06
outer loop
vertex -5.11 -9.21 7.80
vertex -9.49 -13.15 3.73
vertex -9.38 -13.35 0.12
endloop
endfacet
facet normal -0.81 -0.49 0.34
outer loop
vertex -7.14 -14.79 40.16
vertex -5.58 -15.84 42.39
vertex -8.85 -13.38 38.12
endloop
endfacet
facet normal -0.29 0.61 0.73
outer loop
vertex -9.91 11.76 57.90
vertex -7.62 7.47 62.40
vertex -2.04 15.54 57.89
endloop
endfacet
facet normal -0.01 -1.00 -0.04
outer loop
vertex -6.85 4.90 26.37
vertex -10.96 5.06 23.64
vertex -6.86 5.01 23.63
endloop
endfacet
facet normal -0.23 0.59 0.77
outer loop
vertex -10.06 -3.91 23.23
vertex -10.15 -4.31 23.51
vertex -6.74 -3.37 23.83
endloop
endfacet
facet normal -0.37 -0.23 0.90
outer loop
vertex -7.97 -4.57 97.40
vertex -8.07 -1.79 98.06
vertex -9.50 -5.00 96.66
endloop
endfacet
facet normal 0.85 -0.52 0.06
outer loop
vertex -8.75 -4.06 27.24
vertex -8.97 -4.39 27.54
vertex -8.91 -4.39 26.69
endloop
endfacet
facet normal 0.23 -0.93 0.28
outer loop
vertex -10.15 -4.31 23.51
vertex -10.52 -5.32 20.44
vertex -6.74 -3.37 23.83
endloop
endfacet
facet normal -0.29 -0.42 0.86
outer loop
vertex -7.97 -4.57 97.40
vertex -9.50 -5.00 96.66
vertex -8.05 -10.91 94.29
endloop
endfacet
facet normal -0.45 -0.89 -0.05
outer loop
vertex -10.45 -16.84 82.95
vertex -12.23 -15.52 75.67
vertex -6.10 -18.81 79.30
endloop
endfacet
facet normal -0.02 -1.00 -0.02
outer loop
vertex -6.85 4.90 26.37
vertex -11.19 5.00 26.18
vertex -10.96 5.06 23.64
endloop
endfacet
facet normal -0.11 -0.99 -0.01
outer loop
vertex -8.97 -4.39 27.54
vertex -10.00 -4.25 24.66
vertex -8.91 -4.39 26.69
endloop
endfacet
facet normal 0.01 -0.73 -0.68
outer loop
vertex -6.85 4.90 26.37
vertex -12.76 3.29 28.01
vertex -11.19 5.00 26.18
endloop
endfacet
facet normal 0.00 -0.62 0.79
outer loop
vertex -6.86 5.01 23.63
vertex -10.96 5.06 23.64
vertex -10.83 2.64 21.75
endloop
endfacet
facet normal -0.03 -0.59 0.81
outer loop
vertex -6.86 5.01 23.63
vertex -10.83 2.64 21.75
vertex -7.56 1.97 21.37
endloop
endfacet
facet normal 0.16 0.24 0.96
outer loop
vertex -7.56 1.97 21.37
vertex -10.83 2.64 21.75
vertex -10.06 -3.91 23.23
endloop
endfacet
facet normal 0.23 -0.56 0.80
outer loop
vertex -11.08 -8.20 10.22
vertex -11.01 -11.63 7.77
vertex -5.11 -9.21 7.80
endloop
endfacet
facet normal -0.48 -0.60 0.64
outer loop
vertex -6.55 -15.83 90.85
vertex -8.05 -10.91 94.29
vertex -11.35 -8.86 93.74
endloop
endfacet
facet normal -0.50 -0.86 0.03
outer loop
vertex -8.25 -13.82 54.92
vertex -12.56 -11.44 51.73
vertex -5.58 -15.84 42.39
endloop
endfacet
facet normal 0.95 -0.29 -0.11
outer loop
vertex -10.00 -4.25 24.66
vertex -10.15 -4.31 23.51
vertex -10.06 -3.91 23.23
endloop
endfacet
facet normal -0.50 -0.15 0.85
outer loop
vertex -8.07 -1.79 98.06
vertex -12.38 -3.37 95.27
vertex -9.50 -5.00 96.66
endloop
endfacet
facet normal 0.34 -0.83 0.44
outer loop
vertex -5.11 -9.21 7.80
vertex -11.01 -11.63 7.77
vertex -9.49 -13.15 3.73
endloop
endfacet
facet normal -0.42 -0.90 -0.10
outer loop
vertex -6.10 -18.81 79.30
vertex -12.23 -15.52 75.67
vertex -10.22 -16.21 73.43
endloop
endfacet
facet normal -0.51 0.52 0.69
outer loop
vertex -12.11 13.09 90.10
vertex -11.85 8.19 94.03
vertex -7.89 11.69 94.30
endloop
endfacet
facet normal -0.38 0.36 0.85
outer loop
vertex -7.89 11.69 94.30
vertex -11.85 8.19 94.03
vertex -11.56 5.20 95.44
endloop
endfacet
facet normal -0.53 0.17 0.83
outer loop
vertex -11.56 5.20 95.44
vertex -9.51 2.16 97.38
vertex -9.83 4.95 96.60
endloop
endfacet
facet normal 0.11 0.65 -0.75
outer loop
vertex -11.55 -2.11 28.27
vertex -11.40 -1.67 28.68
vertex -8.91 -4.39 26.69
endloop
endfacet
facet normal -0.40 -0.42 0.81
outer loop
vertex -8.05 -10.91 94.29
vertex -9.50 -5.00 96.66
vertex -11.35 -8.86 93.74
endloop
endfacet
facet normal -0.09 -0.94 0.32
outer loop
vertex -11.01 -11.63 7.77
vertex -12.92 -13.75 1.06
vertex -9.49 -13.15 3.73
endloop
endfacet
facet normal -0.57 -0.82 -0.04
outer loop
vertex -12.56 -11.44 51.73
vertex -8.85 -13.38 38.12
vertex -5.58 -15.84 42.39
endloop
endfacet
facet normal 0.13 -0.99 0.06
outer loop
vertex -9.49 -13.15 3.73
vertex -12.92 -13.75 1.06
vertex -9.38 -13.35 0.12
endloop
endfacet
facet normal -0.56 -0.80 0.23
outer loop
vertex -10.00 -16.18 86.29
vertex -12.79 -14.66 84.76
vertex -10.45 -16.84 82.95
endloop
endfacet
facet normal -0.43 -0.10 0.90
outer loop
vertex -10.45 1.82 62.30
vertex -14.53 -1.69 59.96
vertex -7.43 -7.32 62.69
endloop
endfacet
facet normal -0.61 -0.76 -0.23
outer loop
vertex -12.03 -3.20 31.61
vertex -11.97 -2.57 29.42
vertex -8.97 -4.39 27.54
endloop
endfacet
facet normal -0.61 -0.61 0.51
outer loop
vertex -6.55 -15.83 90.85
vertex -12.79 -14.66 84.76
vertex -10.00 -16.18 86.29
endloop
endfacet
facet normal -0.69 0.58 0.43
outer loop
vertex -9.91 11.76 57.90
vertex -10.31 12.71 56.01
vertex -13.56 8.97 55.86
endloop
endfacet
facet normal 0.73 -0.40 0.56
outer loop
vertex -10.83 2.64 21.75
vertex -10.96 5.06 23.64
vertex -12.37 1.98 23.28
endloop
endfacet
facet normal 0.29 0.24 0.93
outer loop
vertex -10.83 2.64 21.75
vertex -12.49 -0.47 23.08
vertex -10.06 -3.91 23.23
endloop
endfacet
facet normal 0.62 0.77 0.16
outer loop
vertex -12.01 -2.43 23.75
vertex -10.00 -4.25 24.66
vertex -10.06 -3.91 23.23
endloop
endfacet
facet normal -0.53 -0.84 0.12
outer loop
vertex -10.00 -4.25 24.66
vertex -12.89 -2.83 21.72
vertex -10.15 -4.31 23.51
endloop
endfacet
facet normal -0.60 -0.74 0.31
outer loop
vertex -10.15 -4.31 23.51
vertex -12.89 -2.83 21.72
vertex -10.52 -5.32 20.44
endloop
endfacet
facet normal -0.55 -0.32 0.77
outer loop
vertex -12.38 -3.37 95.27
vertex -11.35 -8.86 93.74
vertex -9.50 -5.00 96.66
endloop
endfacet
facet normal -0.66 -0.66 -0.36
outer loop
vertex -8.85 -13.38 38.12
vertex -13.23 -7.86 35.98
vertex -7.96 -12.04 34.02
endloop
endfacet
facet normal -0.48 -0.81 -0.35
outer loop
vertex -10.22 -16.21 73.43
vertex -12.16 -15.09 73.51
vertex -9.83 -15.05 70.23
endloop
endfacet
facet normal -0.60 0.30 0.75
outer loop
vertex -11.85 8.19 94.03
vertex -14.36 6.90 92.53
vertex -11.56 5.20 95.44
endloop
endfacet
facet normal 0.65 -0.76 0.04
outer loop
vertex -10.96 5.06 23.64
vertex -11.19 5.00 26.18
vertex -12.74 3.56 23.93
endloop
endfacet
facet normal 0.50 0.39 0.77
outer loop
vertex -12.01 -2.43 23.75
vertex -10.06 -3.91 23.23
vertex -12.49 -0.47 23.08
endloop
endfacet
facet normal -0.51 -0.86 0.09
outer loop
vertex -11.97 -2.57 29.42
vertex -12.89 -2.83 21.72
vertex -10.00 -4.25 24.66
endloop
endfacet
facet normal -0.58 -0.79 0.19
outer loop
vertex -12.79 -14.66 84.76
vertex -12.10 -15.80 82.23
vertex -10.45 -16.84 82.95
endloop
endfacet
facet normal -0.49 -0.85 -0.18
outer loop
vertex -10.22 -16.21 73.43
vertex -12.23 -15.52 75.67
vertex -12.16 -15.09 73.51
endloop
endfacet
facet normal -0.61 0.45 0.65
outer loop
vertex -7.62 7.47 62.40
vertex -13.56 8.97 55.86
vertex -14.50 4.74 57.87
endloop
endfacet
facet normal 0.71 -0.70 -0.04
outer loop
vertex -12.76 3.29 28.01
vertex -12.74 3.56 23.93
vertex -11.19 5.00 26.18
endloop
endfacet
facet normal 0.38 -0.27 0.89
outer loop
vertex -10.96 5.06 23.64
vertex -12.74 3.56 23.93
vertex -12.37 1.98 23.28
endloop
endfacet
facet normal 0.72 -0.09 0.68
outer loop
vertex -10.83 2.64 21.75
vertex -12.37 1.98 23.28
vertex -12.49 -0.47 23.08
endloop
endfacet
facet normal 0.77 0.62 -0.12
outer loop
vertex -12.80 -0.60 28.02
vertex -11.55 -2.11 28.27
vertex -12.01 -2.43 23.75
endloop
endfacet
facet normal -0.59 -0.41 0.69
outer loop
vertex -7.43 -7.32 62.69
vertex -14.53 -1.69 59.96
vertex -12.29 -7.75 58.25
endloop
endfacet
facet normal -0.65 -0.65 0.39
outer loop
vertex -12.29 -7.75 58.25
vertex -12.56 -11.44 51.73
vertex -8.25 -13.82 54.92
endloop
endfacet
facet normal -0.24 -0.90 0.35
outer loop
vertex -11.01 -11.63 7.77
vertex -16.78 -10.65 6.36
vertex -12.92 -13.75 1.06
endloop
endfacet
facet normal -0.60 -0.62 0.50
outer loop
vertex -6.55 -15.83 90.85
vertex -11.35 -8.86 93.74
vertex -12.79 -14.66 84.76
endloop
endfacet
facet normal -0.69 -0.53 -0.50
outer loop
vertex -12.16 -15.09 73.51
vertex -15.72 -12.56 75.72
vertex -9.83 -15.05 70.23
endloop
endfacet
facet normal -0.59 0.48 0.64
outer loop
vertex -12.11 13.09 90.10
vertex -15.12 8.50 90.79
vertex -11.85 8.19 94.03
endloop
endfacet
facet normal 0.96 0.26 0.07
outer loop
vertex -12.80 -0.60 28.02
vertex -12.01 -2.43 23.75
vertex -12.49 -0.47 23.08
endloop
endfacet
facet normal -0.27 -0.96 -0.04
outer loop
vertex -10.52 -5.32 20.44
vertex -14.81 -3.65 10.35
vertex -9.47 -5.19 10.66
endloop
endfacet
facet normal -0.29 -0.56 0.78
outer loop
vertex -11.08 -8.20 10.22
vertex -16.78 -10.65 6.36
vertex -11.01 -11.63 7.77
endloop
endfacet
facet normal -0.86 -0.51 0.00
outer loop
vertex -12.10 -15.80 82.23
vertex -12.79 -14.66 84.76
vertex -12.23 -15.52 75.67
endloop
endfacet
facet normal -0.74 -0.07 0.67
outer loop
vertex -14.36 6.90 92.53
vertex -9.51 2.16 97.38
vertex -11.56 5.20 95.44
endloop
endfacet
facet normal 1.00 0.06 0.01
outer loop
vertex -12.76 3.29 28.01
vertex -12.49 -0.47 23.08
vertex -12.74 3.56 23.93
endloop
endfacet
facet normal 0.75 -0.09 0.65
outer loop
vertex -12.74 3.56 23.93
vertex -12.49 -0.47 23.08
vertex -12.37 1.98 23.28
endloop
endfacet
facet normal 1.00 -0.01 0.06
outer loop
vertex -12.76 3.29 28.01
vertex -12.80 -0.60 28.02
vertex -12.49 -0.47 23.08
endloop
endfacet
facet normal -0.78 -0.61 0.11
outer loop
vertex -11.97 -2.57 29.42
vertex -13.92 -1.70 20.75
vertex -12.89 -2.83 21.72
endloop
endfacet
facet normal -0.09 -0.10 0.99
outer loop
vertex -9.47 -5.19 10.66
vertex -14.81 -3.65 10.35
vertex -11.08 -8.20 10.22
endloop
endfacet
facet normal -0.76 -0.64 -0.11
outer loop
vertex -12.56 -11.44 51.73
vertex -13.23 -7.86 35.98
vertex -8.85 -13.38 38.12
endloop
endfacet
facet normal -0.64 -0.75 -0.17
outer loop
vertex -12.23 -15.52 75.67
vertex -15.72 -12.56 75.72
vertex -12.16 -15.09 73.51
endloop
endfacet
facet normal -0.65 -0.76 0.03
outer loop
vertex -12.23 -15.52 75.67
vertex -12.79 -14.66 84.76
vertex -15.72 -12.56 75.72
endloop
endfacet
facet normal -0.33 0.94 0.01
outer loop
vertex -16.43 8.45 0.29
vertex -14.73 9.02 4.55
vertex -12.77 9.74 0.21
endloop
endfacet
facet normal -0.51 -0.40 0.76
outer loop
vertex -14.53 -1.69 59.96
vertex -14.70 -2.97 59.17
vertex -12.29 -7.75 58.25
endloop
endfacet
facet normal -0.16 -0.16 0.97
outer loop
vertex -14.81 -3.65 10.35
vertex -15.10 -8.08 9.59
vertex -11.08 -8.20 10.22
endloop
endfacet
facet normal -0.53 -0.05 0.85
outer loop
vertex -8.07 -1.79 98.06
vertex -9.51 2.16 97.38
vertex -12.38 -3.37 95.27
endloop
endfacet
facet normal 0.72 -0.17 0.68
outer loop
vertex -13.64 1.69 59.87
vertex -14.52 0.42 60.49
vertex -14.53 -1.69 59.96
endloop
endfacet
facet normal -0.55 -0.66 0.51
outer loop
vertex -11.35 -8.86 93.74
vertex -15.80 -11.01 86.17
vertex -12.79 -14.66 84.76
endloop
endfacet
facet normal -0.61 0.43 0.66
outer loop
vertex -15.12 8.50 90.79
vertex -14.36 6.90 92.53
vertex -11.85 8.19 94.03
endloop
endfacet
facet normal 0.59 0.55 0.59
outer loop
vertex -14.50 4.74 57.87
vertex -15.24 3.84 59.44
vertex -13.64 1.69 59.87
endloop
endfacet
facet normal 0.19 0.32 0.93
outer loop
vertex -15.24 3.84 59.44
vertex -14.52 0.42 60.49
vertex -13.64 1.69 59.87
endloop
endfacet
facet normal -0.73 -0.65 0.20
outer loop
vertex -10.52 -5.32 20.44
vertex -16.08 -2.33 9.99
vertex -14.81 -3.65 10.35
endloop
endfacet
facet normal -0.61 0.17 0.78
outer loop
vertex -14.36 6.90 92.53
vertex -16.37 3.81 91.66
vertex -9.51 2.16 97.38
endloop
endfacet
facet normal -0.44 -0.88 0.19
outer loop
vertex -16.78 -10.65 6.36
vertex -17.09 -11.83 0.17
vertex -12.92 -13.75 1.06
endloop
endfacet
facet normal -0.13 -0.64 -0.76
outer loop
vertex -12.92 -13.75 1.06
vertex -17.09 -11.83 0.17
vertex -9.38 -13.35 0.12
endloop
endfacet
facet normal 0.06 0.30 0.95
outer loop
vertex -15.24 3.84 59.44
vertex -17.55 3.97 59.55
vertex -14.52 0.42 60.49
endloop
endfacet
facet normal 0.16 0.38 0.91
outer loop
vertex -14.52 0.42 60.49
vertex -17.55 3.97 59.55
vertex -17.86 1.93 60.46
endloop
endfacet
facet normal -0.65 -0.36 0.67
outer loop
vertex -16.37 3.81 91.66
vertex -18.99 2.53 88.43
vertex -9.51 2.16 97.38
endloop
endfacet
facet normal -0.68 0.08 0.73
outer loop
vertex -9.51 2.16 97.38
vertex -18.99 2.53 88.43
vertex -12.38 -3.37 95.27
endloop
endfacet
facet normal -0.12 -0.24 0.96
outer loop
vertex -14.52 0.42 60.49
vertex -17.86 1.93 60.46
vertex -14.53 -1.69 59.96
endloop
endfacet
facet normal -0.39 -0.13 0.91
outer loop
vertex -14.81 -3.65 10.35
vertex -16.08 -2.33 9.99
vertex -15.10 -8.08 9.59
endloop
endfacet
facet normal -0.01 -0.92 0.39
outer loop
vertex -17.81 -2.85 59.37
vertex -15.22 -4.36 55.87
vertex -14.70 -2.97 59.17
endloop
endfacet
facet normal -0.74 -0.33 0.59
outer loop
vertex -19.06 -1.54 88.25
vertex -19.20 -4.59 86.36
vertex -11.35 -8.86 93.74
endloop
endfacet
facet normal -0.12 -0.74 0.66
outer loop
vertex -15.10 -8.08 9.59
vertex -16.78 -10.65 6.36
vertex -11.08 -8.20 10.22
endloop
endfacet
facet normal -0.73 -0.40 0.55
outer loop
vertex -19.20 -4.59 86.36
vertex -15.80 -11.01 86.17
vertex -11.35 -8.86 93.74
endloop
endfacet
facet normal 0.17 0.82 0.55
outer loop
vertex -14.50 4.74 57.87
vertex -17.53 4.98 58.45
vertex -15.24 3.84 59.44
endloop
endfacet
facet normal 0.98 0.07 0.17
outer loop
vertex -17.26 3.52 30.88
vertex -16.22 -2.44 27.38
vertex -16.83 3.51 28.37
endloop
endfacet
facet normal 0.95 -0.02 0.31
outer loop
vertex -17.26 3.52 30.88
vertex -17.25 -3.20 30.51
vertex -16.22 -2.44 27.38
endloop
endfacet
facet normal -0.09 -0.22 0.97
outer loop
vertex -17.86 1.93 60.46
vertex -17.81 -2.85 59.37
vertex -14.53 -1.69 59.96
endloop
endfacet
facet normal 0.04 -0.53 0.85
outer loop
vertex -14.53 -1.69 59.96
vertex -17.81 -2.85 59.37
vertex -14.70 -2.97 59.17
endloop
endfacet
facet normal -0.24 -0.94 0.23
outer loop
vertex -17.81 -2.85 59.37
vertex -19.78 -3.38 55.19
vertex -15.22 -4.36 55.87
endloop
endfacet
facet normal -0.17 -0.96 -0.22
outer loop
vertex -19.78 -3.38 55.19
vertex -19.28 -2.69 51.78
vertex -16.89 -2.78 50.33
endloop
endfacet
facet normal -0.17 -0.96 -0.22
outer loop
vertex -15.22 -4.36 55.87
vertex -19.78 -3.38 55.19
vertex -16.89 -2.78 50.33
endloop
endfacet
facet normal -0.63 0.42 0.66
outer loop
vertex -17.30 6.34 6.02
vertex -19.35 2.04 6.79
vertex -14.37 6.39 8.79
endloop
endfacet
facet normal -0.65 0.47 0.59
outer loop
vertex -14.37 6.39 8.79
vertex -19.35 2.04 6.79
vertex -16.70 2.03 9.70
endloop
endfacet
facet normal 0.83 -0.46 -0.30
outer loop
vertex -16.89 -2.78 50.33
vertex -18.85 -1.53 42.99
vertex -17.20 -1.49 47.50
endloop
endfacet
facet normal 0.31 -0.92 -0.24
outer loop
vertex -16.89 -2.78 50.33
vertex -23.72 -3.30 43.51
vertex -18.85 -1.53 42.99
endloop
endfacet
facet normal -0.97 -0.15 -0.20
outer loop
vertex -16.08 -2.33 9.99
vertex -16.70 2.03 9.70
vertex -15.10 -8.08 9.59
endloop
endfacet
facet normal -0.63 -0.11 0.77
outer loop
vertex -15.10 -8.08 9.59
vertex -16.70 2.03 9.70
vertex -19.13 -6.49 6.49
endloop
endfacet
facet normal -0.19 -0.94 -0.29
outer loop
vertex -17.25 -3.20 30.51
vertex -19.61 -2.94 31.17
vertex -16.22 -2.44 27.38
endloop
endfacet
facet normal -0.50 -0.84 0.19
outer loop
vertex -16.78 -10.65 6.36
vertex -18.27 -10.94 1.02
vertex -17.09 -11.83 0.17
endloop
endfacet
facet normal 0.43 0.05 0.90
outer loop
vertex -17.26 3.52 30.88
vertex -18.71 3.17 31.60
vertex -18.24 1.18 31.48
endloop
endfacet
facet normal 0.97 -0.12 -0.19
outer loop
vertex -17.50 2.23 34.58
vertex -17.69 -1.61 35.95
vertex -18.24 1.18 31.48
endloop
endfacet
facet normal 0.91 -0.40 -0.06
outer loop
vertex -17.26 3.52 30.88
vertex -18.24 1.18 31.48
vertex -18.48 0.70 31.08
endloop
endfacet
facet normal 0.77 -0.29 0.57
outer loop
vertex -18.48 0.70 31.08
vertex -18.61 -0.12 30.83
vertex -17.26 3.52 30.88
endloop
endfacet
facet normal 0.91 -0.27 -0.33
outer loop
vertex -17.20 -1.49 47.50
vertex -18.85 -1.53 42.99
vertex -17.34 0.41 45.58
endloop
endfacet
facet normal -0.78 0.28 0.56
outer loop
vertex -18.61 -0.12 30.83
vertex -18.49 -1.69 31.79
vertex -17.26 3.52 30.88
endloop
endfacet
facet normal 0.69 -0.04 0.72
outer loop
vertex -17.26 3.52 30.88
vertex -18.49 -1.69 31.79
vertex -17.25 -3.20 30.51
endloop
endfacet
facet normal 0.01 -1.00 0.07
outer loop
vertex -16.89 -2.78 50.33
vertex -19.28 -2.69 51.78
vertex -23.72 -3.30 43.51
endloop
endfacet
facet normal -0.54 -0.77 0.35
outer loop
vertex -20.03 -1.56 58.80
vertex -19.78 -3.38 55.19
vertex -17.81 -2.85 59.37
endloop
endfacet
facet normal -0.86 -0.48 -0.16
outer loop
vertex -19.23 -7.00 77.87
vertex -19.21 -6.14 75.07
vertex -15.72 -12.56 75.72
endloop
endfacet
facet normal -0.72 -0.54 -0.43
outer loop
vertex -17.09 -11.83 0.17
vertex -18.27 -10.94 1.02
vertex -19.07 -9.21 0.19
endloop
endfacet
facet normal -0.36 0.69 0.63
outer loop
vertex -17.53 4.98 58.45
vertex -19.56 3.41 59.03
vertex -17.55 3.97 59.55
endloop
endfacet
facet normal -0.34 0.43 0.84
outer loop
vertex -17.55 3.97 59.55
vertex -19.56 3.41 59.03
vertex -17.86 1.93 60.46
endloop
endfacet
facet normal 0.92 0.24 -0.30
outer loop
vertex -18.71 3.17 31.60
vertex -17.50 2.23 34.58
vertex -18.24 1.18 31.48
endloop
endfacet
facet normal 0.97 0.04 0.25
outer loop
vertex -19.66 3.89 42.46
vertex -17.69 -1.61 35.95
vertex -17.50 2.23 34.58
endloop
endfacet
facet normal 0.84 0.07 -0.54
outer loop
vertex -19.66 3.89 42.46
vertex -17.34 0.41 45.58
vertex -18.85 -1.53 42.99
endloop
endfacet
facet normal 0.98 -0.11 -0.19
outer loop
vertex -18.24 1.18 31.48
vertex -17.69 -1.61 35.95
vertex -18.49 -1.69 31.79
endloop
endfacet
facet normal 0.17 -0.55 0.82
outer loop
vertex -18.49 -1.69 31.79
vertex -19.61 -2.94 31.17
vertex -17.25 -3.20 30.51
endloop
endfacet
facet normal 0.97 0.16 0.16
outer loop
vertex -19.66 3.89 42.46
vertex -18.85 -1.53 42.99
vertex -17.69 -1.61 35.95
endloop
endfacet
facet normal 0.91 -0.12 -0.39
outer loop
vertex -18.24 1.18 31.48
vertex -18.49 -1.69 31.79
vertex -18.48 0.70 31.08
endloop
endfacet
facet normal 0.97 -0.08 -0.25
outer loop
vertex -18.49 -1.69 31.79
vertex -18.61 -0.12 30.83
vertex -18.48 0.70 31.08
endloop
endfacet
facet normal 0.78 0.62 0.08
outer loop
vertex -19.66 3.89 42.46
vertex -17.50 2.23 34.58
vertex -20.94 6.69 33.09
endloop
endfacet
facet normal -0.54 0.80 0.26
outer loop
vertex -21.02 3.14 56.84
vertex -19.56 3.41 59.03
vertex -17.53 4.98 58.45
endloop
endfacet
facet normal 0.81 0.57 -0.15
outer loop
vertex -17.50 2.23 34.58
vertex -18.71 3.17 31.60
vertex -20.94 6.69 33.09
endloop
endfacet
facet normal 0.60 0.77 -0.22
outer loop
vertex -21.37 5.31 42.77
vertex -17.02 3.99 50.02
vertex -19.66 3.89 42.46
endloop
endfacet
facet normal 0.78 0.06 -0.62
outer loop
vertex -18.48 0.70 31.08
vertex -18.61 -0.12 30.83
vertex -19.53 -0.65 29.62
endloop
endfacet
facet normal 0.71 0.43 0.55
outer loop
vertex -18.88 8.29 83.81
vertex -20.02 6.73 86.49
vertex -18.99 2.53 88.43
endloop
endfacet
facet normal -0.71 0.14 0.69
outer loop
vertex -18.99 2.53 88.43
vertex -20.02 6.73 86.49
vertex -20.17 -2.21 88.21
endloop
endfacet
facet normal 0.83 0.55 -0.07
outer loop
vertex -20.94 6.69 33.09
vertex -18.71 3.17 31.60
vertex -19.35 3.82 29.10
endloop
endfacet
facet normal 0.96 -0.27 0.11
outer loop
vertex -19.50 3.46 25.45
vertex -20.04 1.58 25.51
vertex -19.29 3.54 23.82
endloop
endfacet
facet normal 0.95 -0.29 0.09
outer loop
vertex -19.29 3.54 23.82
vertex -20.04 1.58 25.51
vertex -19.80 1.66 23.05
endloop
endfacet
facet normal -0.01 -0.05 1.00
outer loop
vertex -20.17 -2.21 88.21
vertex -19.06 -1.54 88.25
vertex -18.99 2.53 88.43
endloop
endfacet
facet normal -0.63 0.02 0.77
outer loop
vertex -19.56 3.41 59.03
vertex -20.03 -1.56 58.80
vertex -17.86 1.93 60.46
endloop
endfacet
facet normal -0.36 -0.21 0.91
outer loop
vertex -17.86 1.93 60.46
vertex -20.03 -1.56 58.80
vertex -17.81 -2.85 59.37
endloop
endfacet
facet normal 0.99 0.00 0.11
outer loop
vertex -19.20 -0.81 22.66
vertex -19.40 -2.47 24.51
vertex -19.19 -2.35 22.59
endloop
endfacet
facet normal 0.28 -0.51 0.81
outer loop
vertex -19.06 -1.54 88.25
vertex -20.17 -2.21 88.21
vertex -19.20 -4.59 86.36
endloop
endfacet
facet normal 0.77 -0.63 -0.14
outer loop
vertex -18.49 -1.69 31.79
vertex -17.69 -1.61 35.95
vertex -19.61 -2.94 31.17
endloop
endfacet
facet normal 0.00 -0.99 -0.13
outer loop
vertex -19.61 -2.94 31.17
vertex -20.34 -2.74 29.64
vertex -16.22 -2.44 27.38
endloop
endfacet
facet normal -0.19 -0.94 -0.29
outer loop
vertex -19.23 -7.00 77.87
vertex -20.72 -6.12 75.99
vertex -19.21 -6.14 75.07
endloop
endfacet
facet normal 0.46 0.23 -0.86
outer loop
vertex -19.29 3.54 23.82
vertex -19.80 1.66 23.05
vertex -22.07 3.56 22.34
endloop
endfacet
facet normal 0.68 0.51 0.53
outer loop
vertex -22.55 -0.69 26.86
vertex -19.40 -2.47 24.51
vertex -19.20 -0.81 22.66
endloop
endfacet
facet normal -0.08 -0.63 0.77
outer loop
vertex -20.17 -2.21 88.21
vertex -20.04 -5.86 85.22
vertex -19.20 -4.59 86.36
endloop
endfacet
facet normal -0.44 -0.55 -0.71
outer loop
vertex -20.72 -6.12 75.99
vertex -20.54 -1.47 72.24
vertex -19.21 -6.14 75.07
endloop
endfacet
facet normal 0.74 -0.65 0.18
outer loop
vertex -19.20 -4.59 86.36
vertex -20.04 -5.86 85.22
vertex -19.23 -7.00 77.87
endloop
endfacet
facet normal 0.60 -0.77 0.19
outer loop
vertex -19.23 -7.00 77.87
vertex -20.04 -5.86 85.22
vertex -20.20 -7.07 80.73
endloop
endfacet
facet normal 0.62 -0.69 -0.38
outer loop
vertex -19.61 -2.94 31.17
vertex -20.84 -4.57 32.16
vertex -20.34 -2.74 29.64
endloop
endfacet
facet normal 0.75 -0.65 0.13
outer loop
vertex -18.85 -1.53 42.99
vertex -20.83 -4.62 38.86
vertex -17.69 -1.61 35.95
endloop
endfacet
facet normal 0.76 -0.64 -0.13
outer loop
vertex -17.69 -1.61 35.95
vertex -20.84 -4.57 32.16
vertex -19.61 -2.94 31.17
endloop
endfacet
facet normal 0.69 -0.73 -0.01
outer loop
vertex -20.83 -4.62 38.86
vertex -20.84 -4.57 32.16
vertex -17.69 -1.61 35.95
endloop
endfacet
facet normal -0.36 -0.92 -0.14
outer loop
vertex -19.23 -7.00 77.87
vertex -20.20 -7.07 80.73
vertex -20.72 -6.12 75.99
endloop
endfacet
facet normal 0.42 0.81 -0.41
outer loop
vertex -20.94 6.69 33.09
vertex -19.35 3.82 29.10
vertex -21.34 5.38 30.11
endloop
endfacet
facet normal 0.68 -0.04 -0.73
outer loop
vertex -19.28 1.12 29.76
vertex -19.53 -0.65 29.62
vertex -22.62 1.50 26.64
endloop
endfacet
facet normal -0.83 -0.04 0.56
outer loop
vertex -20.03 -1.56 58.80
vertex -21.62 1.41 56.63
vertex -21.54 -0.26 56.64
endloop
endfacet
facet normal 0.35 -0.82 0.45
outer loop
vertex -18.85 -1.53 42.99
vertex -23.72 -3.30 43.51
vertex -20.83 -4.62 38.86
endloop
endfacet
facet normal 0.52 -0.12 0.84
outer loop
vertex -19.50 3.46 25.45
vertex -22.25 3.63 27.18
vertex -20.04 1.58 25.51
endloop
endfacet
facet normal 0.02 -1.00 -0.03
outer loop
vertex -20.04 1.58 25.51
vertex -22.62 1.50 26.64
vertex -19.80 1.66 23.05
endloop
endfacet
facet normal -0.68 -0.61 0.41
outer loop
vertex -19.28 -2.69 51.78
vertex -23.86 0.76 49.34
vertex -23.72 -3.30 43.51
endloop
endfacet
facet normal 0.64 0.14 0.75
outer loop
vertex -22.55 -0.69 26.86
vertex -22.69 -2.60 27.34
vertex -19.40 -2.47 24.51
endloop
endfacet
facet normal 0.23 -0.97 -0.04
outer loop
vertex -19.40 -2.47 24.51
vertex -23.38 -3.50 27.08
vertex -19.19 -2.35 22.59
endloop
endfacet
facet normal 0.01 -1.00 -0.03
outer loop
vertex -23.54 1.62 22.92
vertex -22.19 1.65 22.40
vertex -19.80 1.66 23.05
endloop
endfacet
facet normal 0.68 -0.05 -0.74
outer loop
vertex -22.62 1.50 26.64
vertex -19.53 -0.65 29.62
vertex -22.55 -0.69 26.86
endloop
endfacet
facet normal 0.22 -0.98 -0.05
outer loop
vertex -23.38 -3.50 27.08
vertex -20.16 -2.53 21.76
vertex -19.19 -2.35 22.59
endloop
endfacet
facet normal 0.65 -0.67 -0.36
outer loop
vertex -20.84 -4.57 32.16
vertex -22.52 -4.42 28.80
vertex -20.34 -2.74 29.64
endloop
endfacet
facet normal 0.27 -0.87 0.41
outer loop
vertex -23.72 -3.30 43.51
vertex -23.27 -5.29 39.02
vertex -20.83 -4.62 38.86
endloop
endfacet
facet normal 0.56 0.73 -0.40
outer loop
vertex -20.94 6.69 33.09
vertex -21.34 5.38 30.11
vertex -22.34 6.69 31.09
endloop
endfacet
facet normal 0.39 -0.29 0.87
outer loop
vertex -22.25 3.63 27.18
vertex -22.62 1.50 26.64
vertex -20.04 1.58 25.51
endloop
endfacet
facet normal -0.85 0.11 0.52
outer loop
vertex -21.41 1.72 53.15
vertex -23.86 0.76 49.34
vertex -21.50 0.68 53.23
endloop
endfacet
facet normal 0.01 -1.00 -0.04
outer loop
vertex -19.80 1.66 23.05
vertex -22.62 1.50 26.64
vertex -23.54 1.62 22.92
endloop
endfacet
facet normal -0.07 -1.00 -0.01
outer loop
vertex -25.37 -4.24 29.49
vertex -22.52 -4.42 28.80
vertex -20.84 -4.57 32.16
endloop
endfacet
facet normal 0.91 0.30 0.30
outer loop
vertex -23.46 5.52 28.98
vertex -22.25 3.63 27.18
vertex -22.96 5.60 27.37
endloop
endfacet
facet normal 0.26 -0.96 -0.05
outer loop
vertex -23.27 -5.29 39.02
vertex -24.83 -5.37 32.44
vertex -20.83 -4.62 38.86
endloop
endfacet
facet normal 0.20 -0.98 -0.01
outer loop
vertex -20.83 -4.62 38.86
vertex -24.83 -5.37 32.44
vertex -20.84 -4.57 32.16
endloop
endfacet
facet normal 0.54 -0.59 0.60
outer loop
vertex -22.69 -2.60 27.34
vertex -23.38 -3.50 27.08
vertex -19.40 -2.47 24.51
endloop
endfacet
facet normal 0.16 -0.91 -0.38
outer loop
vertex -24.83 -5.37 32.44
vertex -25.37 -4.24 29.49
vertex -20.84 -4.57 32.16
endloop
endfacet
facet normal -0.01 -1.00 -0.03
outer loop
vertex -22.62 1.50 26.64
vertex -25.03 1.54 26.19
vertex -23.54 1.62 22.92
endloop
endfacet
facet normal -0.15 -0.90 -0.40
outer loop
vertex -25.37 -4.24 29.49
vertex -23.38 -3.50 27.08
vertex -22.52 -4.42 28.80
endloop
endfacet
facet normal -0.41 -0.88 -0.25
outer loop
vertex -23.38 -3.50 27.08
vertex -26.05 -1.96 25.98
vertex -23.70 -2.14 22.77
endloop
endfacet
facet normal -0.16 -0.91 0.39
outer loop
vertex -23.72 -3.30 43.51
vertex -25.82 -4.07 40.81
vertex -23.27 -5.29 39.02
endloop
endfacet
facet normal -0.06 0.99 0.12
outer loop
vertex -20.74 6.70 37.98
vertex -25.72 6.88 34.20
vertex -24.67 6.09 41.03
endloop
endfacet
facet normal -0.37 -0.92 0.10
outer loop
vertex -25.82 -4.07 40.81
vertex -24.83 -5.37 32.44
vertex -23.27 -5.29 39.02
endloop
endfacet
facet normal -0.36 -0.87 -0.34
outer loop
vertex -27.39 -2.41 28.54
vertex -26.05 -1.96 25.98
vertex -23.38 -3.50 27.08
endloop
endfacet
facet normal -0.54 -0.84 0.07
outer loop
vertex -25.82 -4.07 40.81
vertex -28.69 -2.83 33.06
vertex -24.83 -5.37 32.44
endloop
endfacet
facet normal -0.56 -0.80 -0.20
outer loop
vertex -24.83 -5.37 32.44
vertex -28.69 -2.83 33.06
vertex -25.37 -4.24 29.49
endloop
endfacet
facet normal -0.61 0.77 0.17
outer loop
vertex -28.13 5.02 33.46
vertex -28.52 3.53 38.82
vertex -24.67 6.09 41.03
endloop
endfacet
facet normal -0.66 -0.74 0.13
outer loop
vertex -25.82 -4.07 40.81
vertex -28.70 -1.83 38.84
vertex -28.69 -2.83 33.06
endloop
endfacet
facet normal 0.65 0.09 -0.76
outer loop
vertex 27.03 3.46 27.96
vertex 27.10 -0.47 27.53
vertex 24.69 2.15 25.80
endloop
endfacet
facet normal 0.47 0.85 0.22
outer loop
vertex 22.17 5.19 44.80
vertex 27.20 5.38 33.47
vertex 24.41 7.05 32.91
endloop
endfacet
facet normal 0.54 0.79 -0.29
outer loop
vertex 27.20 5.38 33.47
vertex 27.03 3.46 27.96
vertex 24.41 7.05 32.91
endloop
endfacet
facet normal 0.15 0.99 0.08
outer loop
vertex 26.88 4.99 38.80
vertex 27.20 5.38 33.47
vertex 22.17 5.19 44.80
endloop
endfacet
facet normal 0.52 0.80 -0.30
outer loop
vertex 24.41 7.05 32.91
vertex 27.03 3.46 27.96
vertex 23.09 5.84 27.42
endloop
endfacet
facet normal 0.61 -0.49 -0.61
outer loop
vertex 24.16 -3.89 27.34
vertex 27.10 -0.47 27.53
vertex 26.22 -3.16 28.82
endloop
endfacet
facet normal 0.42 0.85 0.30
outer loop
vertex 23.27 4.13 46.24
vertex 26.88 4.99 38.80
vertex 22.17 5.19 44.80
endloop
endfacet
facet normal 0.52 0.85 -0.05
outer loop
vertex 23.09 5.84 27.42
vertex 27.03 3.46 27.96
vertex 25.39 4.36 26.25
endloop
endfacet
facet normal 0.63 -0.51 -0.59
outer loop
vertex 24.14 -2.60 26.21
vertex 27.10 -0.47 27.53
vertex 24.16 -3.89 27.34
endloop
endfacet
facet normal -0.15 -0.03 -0.99
outer loop
vertex 24.69 2.15 25.80
vertex 24.15 0.41 25.94
vertex 22.82 1.11 26.12
endloop
endfacet
facet normal 0.15 0.75 -0.65
outer loop
vertex 23.09 5.84 27.42
vertex 25.39 4.36 26.25
vertex 24.58 4.14 25.81
endloop
endfacet
facet normal 0.51 0.83 0.23
outer loop
vertex 22.17 5.19 44.80
vertex 24.41 7.05 32.91
vertex 21.84 7.00 38.95
endloop
endfacet
facet normal 0.52 0.53 -0.67
outer loop
vertex 24.15 0.41 25.94
vertex 27.10 -0.47 27.53
vertex 21.62 -2.12 22.03
endloop
endfacet
facet normal 0.05 0.97 -0.23
outer loop
vertex 21.70 6.92 31.79
vertex 24.41 7.05 32.91
vertex 23.09 5.84 27.42
endloop
endfacet
facet normal 0.39 0.64 -0.66
outer loop
vertex 18.84 0.12 22.57
vertex 24.15 0.41 25.94
vertex 21.62 -2.12 22.03
endloop
endfacet
facet normal -0.05 1.00 -0.01
outer loop
vertex 21.70 6.92 31.79
vertex 21.84 7.00 38.95
vertex 24.41 7.05 32.91
endloop
endfacet
facet normal -0.84 0.40 -0.37
outer loop
vertex 21.70 6.92 31.79
vertex 23.09 5.84 27.42
vertex 22.11 5.06 28.80
endloop
endfacet
facet normal -0.51 0.31 -0.80
outer loop
vertex 22.22 3.87 27.21
vertex 23.09 5.84 27.42
vertex 24.58 4.14 25.81
endloop
endfacet
facet normal -0.08 1.00 0.04
outer loop
vertex 22.22 3.87 27.21
vertex 24.58 4.14 25.81
vertex 19.00 3.74 24.02
endloop
endfacet
facet normal 0.32 0.76 -0.57
outer loop
vertex 22.82 1.11 26.12
vertex 24.15 0.41 25.94
vertex 18.84 0.12 22.57
endloop
endfacet
facet normal -0.84 0.41 -0.36
outer loop
vertex 22.11 5.06 28.80
vertex 23.09 5.84 27.42
vertex 22.22 3.87 27.21
endloop
endfacet
facet normal 0.00 0.98 -0.22
outer loop
vertex 24.58 4.14 25.81
vertex 22.37 3.43 22.62
vertex 19.00 3.74 24.02
endloop
endfacet
facet normal 0.06 -0.31 -0.95
outer loop
vertex 20.26 3.48 22.48
vertex 22.37 3.43 22.62
vertex 22.59 1.54 23.24
endloop
endfacet
facet normal -0.90 0.11 -0.42
outer loop
vertex 22.15 0.71 26.54
vertex 22.22 3.87 27.21
vertex 22.34 1.45 26.31
endloop
endfacet
facet normal -0.46 -0.16 -0.87
outer loop
vertex 22.15 0.71 26.54
vertex 22.34 1.45 26.31
vertex 22.82 1.11 26.12
endloop
endfacet
facet normal -0.40 0.90 0.20
outer loop
vertex 22.15 0.71 26.54
vertex 22.82 1.11 26.12
vertex 18.84 0.12 22.57
endloop
endfacet
facet normal -0.31 -0.39 -0.87
outer loop
vertex 21.75 -2.39 26.98
vertex 24.14 -2.60 26.21
vertex 21.41 -3.57 27.63
endloop
endfacet
facet normal -0.37 0.88 0.29
outer loop
vertex 19.31 4.42 43.53
vertex 22.17 5.19 44.80
vertex 21.84 7.00 38.95
endloop
endfacet
facet normal -0.52 0.67 -0.53
outer loop
vertex 19.81 4.08 29.79
vertex 22.11 5.06 28.80
vertex 22.22 3.87 27.21
endloop
endfacet
facet normal -0.83 0.13 -0.54
outer loop
vertex 22.22 3.87 27.21
vertex 22.15 0.71 26.54
vertex 21.74 -0.40 26.89
endloop
endfacet
facet normal -0.52 0.83 0.18
outer loop
vertex 19.31 4.42 43.53
vertex 21.84 7.00 38.95
vertex 19.67 6.58 34.61
endloop
endfacet
facet normal -0.95 0.12 -0.28
outer loop
vertex 21.41 -3.57 27.63
vertex 21.76 -1.78 27.21
vertex 21.75 -2.39 26.98
endloop
endfacet
facet normal -0.51 0.69 -0.50
outer loop
vertex 21.70 6.92 31.79
vertex 22.11 5.06 28.80
vertex 19.81 4.08 29.79
endloop
endfacet
facet normal 0.03 0.99 -0.14
outer loop
vertex 19.00 3.74 24.02
vertex 22.37 3.43 22.62
vertex 20.26 3.48 22.48
endloop
endfacet
facet normal 0.19 0.94 -0.29
outer loop
vertex 19.80 0.58 24.64
vertex 22.15 0.71 26.54
vertex 18.84 0.12 22.57
endloop
endfacet
facet normal -0.59 0.43 0.69
outer loop
vertex 21.74 -0.40 26.89
vertex 22.15 0.71 26.54
vertex 19.80 0.58 24.64
endloop
endfacet
facet normal -0.67 -0.18 -0.72
outer loop
vertex 18.75 -0.34 29.66
vertex 21.74 -0.40 26.89
vertex 21.76 -1.78 27.21
endloop
endfacet
facet normal -0.22 -0.04 -0.97
outer loop
vertex 18.84 0.12 22.57
vertex 21.62 -2.12 22.03
vertex 18.46 -1.70 22.74
endloop
endfacet
facet normal -0.18 0.98 -0.01
outer loop
vertex 19.67 6.58 34.61
vertex 21.84 7.00 38.95
vertex 21.70 6.92 31.79
endloop
endfacet
facet normal 0.39 0.86 0.33
outer loop
vertex 18.43 4.21 51.70
vertex 23.27 4.13 46.24
vertex 22.17 5.19 44.80
endloop
endfacet
facet normal -0.67 0.13 -0.73
outer loop
vertex 22.22 3.87 27.21
vertex 21.74 -0.40 26.89
vertex 18.75 -0.34 29.66
endloop
endfacet
facet normal -0.70 -0.03 -0.71
outer loop
vertex 21.76 -1.78 27.21
vertex 21.41 -3.57 27.63
vertex 19.02 -1.97 29.92
endloop
endfacet
facet normal 0.49 0.63 -0.60
outer loop
vertex 19.58 8.54 76.35
vertex 19.93 5.01 72.90
vertex 18.54 7.21 74.10
endloop
endfacet
facet normal -0.57 0.76 -0.32
outer loop
vertex 19.67 6.58 34.61
vertex 21.70 6.92 31.79
vertex 18.70 4.53 31.50
endloop
endfacet
facet normal -0.50 0.69 -0.51
outer loop
vertex 18.70 4.53 31.50
vertex 21.70 6.92 31.79
vertex 19.81 4.08 29.79
endloop
endfacet
facet normal 0.39 0.86 0.33
outer loop
vertex 18.43 4.21 51.70
vertex 20.33 2.84 53.04
vertex 23.27 4.13 46.24
endloop
endfacet
facet normal -0.68 -0.23 -0.70
outer loop
vertex 18.75 -0.34 29.66
vertex 21.76 -1.78 27.21
vertex 19.02 -1.97 29.92
endloop
endfacet
facet normal -0.74 -0.54 -0.40
outer loop
vertex 19.02 -1.97 29.92
vertex 21.41 -3.57 27.63
vertex 17.89 -1.75 31.72
endloop
endfacet
facet normal 0.94 0.32 0.10
outer loop
vertex 19.40 8.41 83.74
vertex 19.60 7.11 85.93
vertex 19.89 8.80 78.04
endloop
endfacet
facet normal -0.55 -0.79 0.27
outer loop
vertex 21.60 -3.52 43.21
vertex 18.38 -3.05 38.01
vertex 20.81 -5.34 36.22
endloop
endfacet
facet normal -0.01 0.86 0.51
outer loop
vertex 18.19 7.96 84.49
vertex 19.60 7.11 85.93
vertex 19.40 8.41 83.74
endloop
endfacet
facet normal -0.21 0.74 0.64
outer loop
vertex 18.22 5.83 86.97
vertex 19.60 7.11 85.93
vertex 18.19 7.96 84.49
endloop
endfacet
facet normal 0.07 0.58 0.81
outer loop
vertex 18.22 5.83 86.97
vertex 19.64 4.31 87.94
vertex 19.60 7.11 85.93
endloop
endfacet
facet normal 0.78 0.62 0.07
outer loop
vertex 18.49 4.60 58.18
vertex 19.46 3.33 58.61
vertex 20.33 2.84 53.04
endloop
endfacet
facet normal -0.32 0.29 -0.90
outer loop
vertex 18.54 7.21 74.10
vertex 19.93 5.01 72.90
vertex 19.78 1.87 71.95
endloop
endfacet
facet normal -0.67 -0.10 -0.74
outer loop
vertex 18.93 2.50 23.81
vertex 20.26 3.48 22.48
vertex 19.99 1.49 22.99
endloop
endfacet
facet normal -0.71 0.19 -0.68
outer loop
vertex 18.75 -0.34 29.66
vertex 19.81 4.08 29.79
vertex 22.22 3.87 27.21
endloop
endfacet
facet normal -0.33 0.94 0.04
outer loop
vertex 19.40 8.41 83.74
vertex 19.89 8.80 78.04
vertex 18.19 7.96 84.49
endloop
endfacet
facet normal -0.29 0.96 0.05
outer loop
vertex 18.19 7.96 84.49
vertex 19.89 8.80 78.04
vertex 18.42 8.44 76.34
endloop
endfacet
facet normal -0.09 0.99 -0.13
outer loop
vertex 19.89 8.80 78.04
vertex 19.58 8.54 76.35
vertex 18.42 8.44 76.34
endloop
endfacet
facet normal -0.07 0.87 -0.48
outer loop
vertex 18.42 8.44 76.34
vertex 19.58 8.54 76.35
vertex 18.54 7.21 74.10
endloop
endfacet
facet normal 0.64 0.75 -0.15
outer loop
vertex 17.68 5.59 55.51
vertex 20.33 2.84 53.04
vertex 18.43 4.21 51.70
endloop
endfacet
facet normal -0.75 0.15 -0.64
outer loop
vertex 18.93 2.50 23.81
vertex 19.00 3.74 24.02
vertex 20.26 3.48 22.48
endloop
endfacet
facet normal -0.90 0.22 0.37
outer loop
vertex 19.80 0.58 24.64
vertex 18.84 0.12 22.57
vertex 18.46 -1.70 22.74
endloop
endfacet
facet normal 0.73 0.68 0.03
outer loop
vertex 18.49 4.60 58.18
vertex 20.33 2.84 53.04
vertex 17.68 5.59 55.51
endloop
endfacet
facet normal -0.89 0.44 0.07
outer loop
vertex 19.31 4.42 43.53
vertex 19.67 6.58 34.61
vertex 17.76 1.94 39.51
endloop
endfacet
facet normal 0.04 -0.02 -1.00
outer loop
vertex 19.30 -4.41 0.13
vertex 18.35 -9.34 0.20
vertex 16.62 -11.67 0.18
endloop
endfacet
facet normal -0.87 0.49 -0.07
outer loop
vertex 17.94 3.99 37.76
vertex 19.67 6.58 34.61
vertex 16.93 2.01 36.18
endloop
endfacet
facet normal -0.87 0.50 -0.06
outer loop
vertex 16.93 2.01 36.18
vertex 19.67 6.58 34.61
vertex 18.70 4.53 31.50
endloop
endfacet
facet normal -0.26 0.97 0.00
outer loop
vertex 16.55 3.65 50.29
vertex 22.17 5.19 44.80
vertex 19.31 4.42 43.53
endloop
endfacet
facet normal 0.44 0.56 0.70
outer loop
vertex 17.76 1.94 39.51
vertex 19.67 6.58 34.61
vertex 17.94 3.99 37.76
endloop
endfacet
facet normal -0.16 0.04 -0.99
outer loop
vertex 17.94 3.99 37.76
vertex 18.27 2.91 37.66
vertex 17.57 2.80 37.77
endloop
endfacet
facet normal -0.20 0.45 -0.87
outer loop
vertex 17.57 2.80 37.77
vertex 18.27 2.91 37.66
vertex 17.95 2.20 37.37
endloop
endfacet
facet normal -0.95 0.15 0.27
outer loop
vertex 19.31 4.42 43.53
vertex 17.76 1.94 39.51
vertex 18.20 -0.42 42.36
endloop
endfacet
facet normal -0.02 0.94 0.35
outer loop
vertex 13.97 4.61 57.95
vertex 18.49 4.60 58.18
vertex 17.68 5.59 55.51
endloop
endfacet
facet normal -0.27 0.96 -0.01
outer loop
vertex 18.43 4.21 51.70
vertex 22.17 5.19 44.80
vertex 16.55 3.65 50.29
endloop
endfacet
facet normal -0.92 0.30 0.25
outer loop
vertex 17.76 1.94 39.51
vertex 17.94 3.99 37.76
vertex 17.57 2.80 37.77
endloop
endfacet
facet normal 0.06 0.58 -0.81
outer loop
vertex 17.57 2.80 37.77
vertex 17.95 2.20 37.37
vertex 17.25 1.97 37.15
endloop
endfacet
facet normal -0.36 0.92 0.16
outer loop
vertex 17.25 1.97 37.15
vertex 17.95 2.20 37.37
vertex 16.93 2.01 36.18
endloop
endfacet
facet normal -0.18 0.98 -0.01
outer loop
vertex 16.93 2.01 36.18
vertex 17.95 2.20 37.37
vertex 17.73 2.15 36.16
endloop
endfacet
facet normal -0.85 0.30 -0.44
outer loop
vertex 16.72 0.23 45.64
vertex 19.31 4.42 43.53
vertex 18.20 -0.42 42.36
endloop
endfacet
facet normal -0.98 0.05 0.19
outer loop
vertex 18.20 -0.42 42.36
vertex 17.76 1.94 39.51
vertex 17.46 -0.51 38.61
endloop
endfacet
facet normal 0.54 -0.05 -0.84
outer loop
vertex 18.75 -0.34 29.66
vertex 19.02 -1.97 29.92
vertex 15.24 -1.91 27.51
endloop
endfacet
facet normal -0.89 -0.38 0.25
outer loop
vertex 17.46 -0.51 38.61
vertex 17.26 -1.34 36.63
vertex 18.38 -3.05 38.01
endloop
endfacet
facet normal -0.82 -0.58 -0.06
outer loop
vertex 18.38 -3.05 38.01
vertex 17.26 -1.34 36.63
vertex 17.89 -1.75 31.72
endloop
endfacet
facet normal 0.12 0.94 -0.32
outer loop
vertex 17.68 5.59 55.51
vertex 18.43 4.21 51.70
vertex 15.39 5.36 54.00
endloop
endfacet
facet normal 0.04 0.91 -0.41
outer loop
vertex 15.39 5.36 54.00
vertex 18.43 4.21 51.70
vertex 16.55 3.65 50.29
endloop
endfacet
facet normal -0.81 0.53 -0.27
outer loop
vertex 19.31 4.42 43.53
vertex 16.56 2.63 48.23
vertex 16.55 3.65 50.29
endloop
endfacet
facet normal -0.92 0.36 -0.15
outer loop
vertex 16.93 2.01 36.18
vertex 18.70 4.53 31.50
vertex 17.47 1.45 31.57
endloop
endfacet
facet normal -0.86 0.34 -0.37
outer loop
vertex 16.56 2.63 48.23
vertex 19.31 4.42 43.53
vertex 16.72 0.23 45.64
endloop
endfacet
facet normal -0.96 0.21 0.21
outer loop
vertex 17.76 1.94 39.51
vertex 17.57 2.80 37.77
vertex 17.25 1.97 37.15
endloop
endfacet
facet normal 0.46 -0.02 -0.89
outer loop
vertex 16.22 3.38 28.24
vertex 18.75 -0.34 29.66
vertex 16.40 -0.17 28.42
endloop
endfacet
facet normal -0.96 -0.03 -0.26
outer loop
vertex 16.80 -0.54 34.28
vertex 17.47 1.45 31.57
vertex 17.47 -0.77 31.82
endloop
endfacet
facet normal 0.47 0.14 -0.87
outer loop
vertex 16.40 -0.17 28.42
vertex 18.75 -0.34 29.66
vertex 15.24 -1.91 27.51
endloop
endfacet
facet normal -0.61 -0.74 -0.28
outer loop
vertex 18.20 -0.42 42.36
vertex 21.60 -3.52 43.21
vertex 17.09 -2.77 50.96
endloop
endfacet
facet normal -0.45 -0.85 -0.29
outer loop
vertex 16.50 -1.52 48.21
vertex 18.20 -0.42 42.36
vertex 17.09 -2.77 50.96
endloop
endfacet
facet normal -0.04 0.01 -1.00
outer loop
vertex 18.74 3.81 0.23
vertex 19.30 -4.41 0.13
vertex 16.62 -11.67 0.18
endloop
endfacet
facet normal 0.78 0.62 0.06
outer loop
vertex 11.40 16.58 83.07
vertex 18.19 7.96 84.49
vertex 18.42 8.44 76.34
endloop
endfacet
facet normal 0.30 0.51 0.81
outer loop
vertex 19.46 3.33 58.61
vertex 18.49 4.60 58.18
vertex 15.61 3.83 59.72
endloop
endfacet
facet normal 0.01 0.97 -0.25
outer loop
vertex 18.70 4.53 31.50
vertex 19.81 4.08 29.79
vertex 16.06 3.93 29.05
endloop
endfacet
facet normal -0.98 0.15 -0.13
outer loop
vertex 16.80 -0.54 34.28
vertex 16.93 2.01 36.18
vertex 17.47 1.45 31.57
endloop
endfacet
facet normal 0.27 0.96 -0.05
outer loop
vertex 17.76 1.94 39.51
vertex 17.25 1.97 37.15
vertex 16.93 2.01 36.18
endloop
endfacet
facet normal -0.97 0.03 0.24
outer loop
vertex 17.76 1.94 39.51
vertex 16.93 2.01 36.18
vertex 17.46 -0.51 38.61
endloop
endfacet
facet normal -0.88 -0.36 -0.32
outer loop
vertex 16.50 -1.52 48.21
vertex 16.72 0.23 45.64
vertex 18.20 -0.42 42.36
endloop
endfacet
facet normal -0.90 -0.37 -0.21
outer loop
vertex 16.80 -0.54 34.28
vertex 17.47 -0.77 31.82
vertex 17.89 -1.75 31.72
endloop
endfacet
facet normal -0.98 -0.13 0.15
outer loop
vertex 17.46 -0.51 38.61
vertex 16.80 -0.54 34.28
vertex 17.26 -1.34 36.63
endloop
endfacet
facet normal -0.79 -0.61 -0.05
outer loop
vertex 17.26 -1.34 36.63
vertex 16.80 -0.54 34.28
vertex 17.89 -1.75 31.72
endloop
endfacet
facet normal -0.18 0.98 0.12
outer loop
vertex 13.97 4.61 57.95
vertex 17.68 5.59 55.51
vertex 15.39 5.36 54.00
endloop
endfacet
facet normal -0.62 0.58 0.53
outer loop
vertex 16.29 2.09 31.35
vertex 18.70 4.53 31.50
vertex 16.06 3.93 29.05
endloop
endfacet
facet normal -0.99 -0.06 0.15
outer loop
vertex 17.46 -0.51 38.61
vertex 16.93 2.01 36.18
vertex 16.80 -0.54 34.28
endloop
endfacet
facet normal 0.80 0.54 -0.26
outer loop
vertex 18.42 8.44 76.34
vertex 18.54 7.21 74.10
vertex 13.55 12.96 70.78
endloop
endfacet
facet normal 0.75 0.66 0.05
outer loop
vertex 15.56 8.35 4.24
vertex 18.00 5.61 3.97
vertex 15.98 8.19 0.20
endloop
endfacet
facet normal -0.02 0.91 0.42
outer loop
vertex 13.97 4.61 57.95
vertex 15.61 3.83 59.72
vertex 18.49 4.60 58.18
endloop
endfacet
facet normal 0.08 0.83 -0.55
outer loop
vertex 16.06 3.93 29.05
vertex 19.81 4.08 29.79
vertex 16.22 3.38 28.24
endloop
endfacet
facet normal -0.91 0.24 -0.34
outer loop
vertex 16.06 3.93 29.05
vertex 16.22 3.38 28.24
vertex 15.35 2.03 29.63
endloop
endfacet
facet normal -0.39 -0.07 -0.92
outer loop
vertex 16.22 3.38 28.24
vertex 16.40 -0.17 28.42
vertex 15.35 -1.50 28.96
endloop
endfacet
facet normal 0.91 0.32 -0.25
outer loop
vertex 13.24 10.02 39.97
vertex 15.68 7.10 45.14
vertex 15.23 2.48 37.71
endloop
endfacet
facet normal -0.80 0.43 0.42
outer loop
vertex 16.29 2.09 31.35
vertex 16.06 3.93 29.05
vertex 15.35 2.03 29.63
endloop
endfacet
facet normal -0.75 -0.05 0.66
outer loop
vertex 17.07 -2.53 31.23
vertex 17.47 -0.77 31.82
vertex 15.35 2.03 29.63
endloop
endfacet
facet normal -0.80 0.59 -0.11
outer loop
vertex 15.35 -1.50 28.96
vertex 16.40 -0.17 28.42
vertex 15.24 -1.91 27.51
endloop
endfacet
facet normal -0.88 0.09 -0.47
outer loop
vertex 15.35 2.03 29.63
vertex 16.22 3.38 28.24
vertex 15.35 -1.50 28.96
endloop
endfacet
facet normal -0.82 -0.11 0.57
outer loop
vertex 17.07 -2.53 31.23
vertex 15.35 2.03 29.63
vertex 15.35 -1.50 28.96
endloop
endfacet
facet normal -0.72 -0.65 0.25
outer loop
vertex 15.35 -1.50 28.96
vertex 15.24 -1.91 27.51
vertex 17.07 -2.53 31.23
endloop
endfacet
facet normal 0.42 0.76 0.49
outer loop
vertex 12.96 7.02 8.53
vertex 15.15 6.32 7.73
vertex 15.56 8.35 4.24
endloop
endfacet
facet normal 0.64 0.68 0.36
outer loop
vertex 10.53 13.41 90.66
vertex 16.06 10.04 87.13
vertex 11.40 16.58 83.07
endloop
endfacet
facet normal 0.17 0.97 0.18
outer loop
vertex 15.56 8.35 4.24
vertex 12.94 9.56 0.15
vertex 8.64 9.52 4.44
endloop
endfacet
facet normal 0.76 0.64 0.02
outer loop
vertex 11.40 16.58 83.07
vertex 18.42 8.44 76.34
vertex 11.03 17.19 77.10
endloop
endfacet
facet normal 0.75 0.65 -0.16
outer loop
vertex 11.03 17.19 77.10
vertex 18.42 8.44 76.34
vertex 10.93 16.12 72.25
endloop
endfacet
facet normal 0.16 0.91 0.38
outer loop
vertex 12.96 7.02 8.53
vertex 15.56 8.35 4.24
vertex 8.64 9.52 4.44
endloop
endfacet
facet normal 0.68 0.12 -0.73
outer loop
vertex 9.23 3.47 62.37
vertex 14.22 8.62 67.90
vertex 19.78 1.87 71.95
endloop
endfacet
facet normal 0.50 0.36 -0.79
outer loop
vertex 8.79 4.45 62.54
vertex 14.22 8.62 67.90
vertex 9.23 3.47 62.37
endloop
endfacet
facet normal 0.54 0.10 0.84
outer loop
vertex 13.27 -2.78 94.19
vertex 15.35 3.82 92.08
vertex 5.89 5.28 98.02
endloop
endfacet
facet normal 0.66 0.66 0.35
outer loop
vertex 10.53 13.41 90.66
vertex 11.40 16.58 83.07
vertex 9.16 16.61 87.23
endloop
endfacet
facet normal 0.80 0.40 -0.44
outer loop
vertex 13.24 10.02 39.97
vertex 9.34 6.54 29.76
vertex 9.42 11.73 34.65
endloop
endfacet
facet normal 0.02 0.00 -1.00
outer loop
vertex 12.94 9.56 0.15
vertex 15.98 8.19 0.20
vertex 4.81 7.61 0.01
endloop
endfacet
facet normal 0.00 -0.01 -1.00
outer loop
vertex 1.35 -4.79 0.11
vertex 16.62 -11.67 0.18
vertex 3.71 -10.68 0.19
endloop
endfacet
facet normal 0.69 0.70 0.19
outer loop
vertex 8.93 13.86 54.71
vertex 13.91 9.95 51.03
vertex 11.78 13.01 47.59
endloop
endfacet
facet normal 0.48 0.53 -0.69
outer loop
vertex 5.72 14.33 66.35
vertex 13.55 12.96 70.78
vertex 14.22 8.62 67.90
endloop
endfacet
facet normal 0.37 0.91 0.17
outer loop
vertex 12.96 7.02 8.53
vertex 8.64 9.52 4.44
vertex 12.72 6.52 11.74
endloop
endfacet
facet normal 0.47 0.40 -0.79
outer loop
vertex 5.10 8.89 62.54
vertex 14.22 8.62 67.90
vertex 8.79 4.45 62.54
endloop
endfacet
facet normal 0.65 -0.07 -0.75
outer loop
vertex 8.71 -4.02 62.58
vertex 9.23 3.47 62.37
vertex 14.47 -7.07 67.83
endloop
endfacet
facet normal 0.74 0.64 0.22
outer loop
vertex 8.93 13.86 54.71
vertex 11.78 13.01 47.59
vertex 9.98 14.42 49.55
endloop
endfacet
facet normal 0.54 0.84 -0.11
outer loop
vertex 9.98 14.42 49.55
vertex 11.78 13.01 47.59
vertex 6.05 15.65 39.41
endloop
endfacet
facet normal 0.54 0.83 -0.11
outer loop
vertex 6.05 15.65 39.41
vertex 11.78 13.01 47.59
vertex 9.14 13.41 37.70
endloop
endfacet
facet normal 0.70 0.65 -0.29
outer loop
vertex 9.42 11.73 34.65
vertex 9.14 13.41 37.70
vertex 13.24 10.02 39.97
endloop
endfacet
facet normal 0.00 0.04 -1.00
outer loop
vertex 3.71 -10.68 0.19
vertex 16.62 -11.67 0.18
vertex 7.19 -12.90 0.11
endloop
endfacet
facet normal 0.00 0.03 -1.00
outer loop
vertex 7.19 -12.90 0.11
vertex 16.62 -11.67 0.18
vertex 12.07 -13.56 0.11
endloop
endfacet
facet normal 0.01 0.00 -1.00
outer loop
vertex 1.35 -4.79 0.11
vertex 18.74 3.81 0.23
vertex 16.62 -11.67 0.18
endloop
endfacet
facet normal 0.03 1.00 0.04
outer loop
vertex 8.64 9.52 4.44
vertex 12.94 9.56 0.15
vertex 8.79 9.68 0.57
endloop
endfacet
facet normal 0.61 0.54 -0.58
outer loop
vertex 6.17 9.88 29.54
vertex 9.42 11.73 34.65
vertex 9.34 6.54 29.76
endloop
endfacet
facet normal 0.46 0.47 -0.75
outer loop
vertex 5.72 14.33 66.35
vertex 14.22 8.62 67.90
vertex 5.10 8.89 62.54
endloop
endfacet
facet normal 0.78 0.62 -0.03
outer loop
vertex 9.34 6.54 29.76
vertex 11.73 3.63 31.66
vertex 10.41 5.14 28.48
endloop
endfacet
facet normal 0.02 0.00 -1.00
outer loop
vertex 4.81 7.61 0.01
vertex 15.98 8.19 0.20
vertex 18.74 3.81 0.23
endloop
endfacet
facet normal 0.48 -0.42 -0.77
outer loop
vertex 8.71 -4.02 62.58
vertex 14.47 -7.07 67.83
vertex 8.91 -13.34 67.77
endloop
endfacet
facet normal 0.37 0.91 -0.21
outer loop
vertex 3.62 20.17 77.07
vertex 11.03 17.19 77.10
vertex 10.93 16.12 72.25
endloop
endfacet
facet normal 0.16 0.98 0.10
outer loop
vertex 6.45 6.00 26.34
vertex 10.41 5.14 28.48
vertex 12.72 6.52 11.74
endloop
endfacet
facet normal 0.48 -0.42 -0.77
outer loop
vertex 8.71 -4.02 62.58
vertex 8.91 -13.34 67.77
vertex 5.18 -8.44 62.81
endloop
endfacet
facet normal -0.08 0.40 -0.91
outer loop
vertex 8.79 9.68 0.57
vertex 12.94 9.56 0.15
vertex 4.81 7.61 0.01
endloop
endfacet
facet normal 0.45 0.66 -0.60
outer loop
vertex 10.93 16.12 72.25
vertex 13.55 12.96 70.78
vertex 5.72 14.33 66.35
endloop
endfacet
facet normal 0.71 0.55 0.45
outer loop
vertex 7.52 13.06 57.90
vertex 12.49 5.31 59.51
vertex 8.93 13.86 54.71
endloop
endfacet
facet normal 0.23 0.86 -0.45
outer loop
vertex 9.14 13.41 37.70
vertex 9.42 11.73 34.65
vertex 6.17 9.88 29.54
endloop
endfacet
facet normal -0.22 0.85 0.47
outer loop
vertex 7.32 7.15 8.11
vertex 12.72 6.52 11.74
vertex 8.64 9.52 4.44
endloop
endfacet
facet normal 0.07 1.00 0.07
outer loop
vertex 7.32 7.15 8.11
vertex 6.45 6.00 26.34
vertex 12.72 6.52 11.74
endloop
endfacet
facet normal 0.43 0.77 -0.48
outer loop
vertex 9.34 6.54 29.76
vertex 10.41 5.14 28.48
vertex 6.45 6.00 26.34
endloop
endfacet
facet normal 0.37 0.93 0.07
outer loop
vertex 11.40 16.58 83.07
vertex 11.03 17.19 77.10
vertex 3.62 20.17 77.07
endloop
endfacet
facet normal 0.25 0.21 0.94
outer loop
vertex 5.10 8.89 62.54
vertex 8.79 4.45 62.54
vertex 8.00 5.87 62.43
endloop
endfacet
facet normal 0.63 0.40 0.66
outer loop
vertex 8.00 5.87 62.43
vertex 8.79 4.45 62.54
vertex 8.51 5.03 62.46
endloop
endfacet
facet normal 0.33 0.82 -0.47
outer loop
vertex 6.05 15.65 39.41
vertex 9.14 13.41 37.70
vertex 6.17 9.88 29.54
endloop
endfacet
facet normal 0.52 0.75 0.42
outer loop
vertex 7.52 13.06 57.90
vertex 8.93 13.86 54.71
vertex 6.61 14.70 56.07
endloop
endfacet
facet normal 0.36 0.76 -0.54
outer loop
vertex 3.91 18.32 70.74
vertex 10.93 16.12 72.25
vertex 5.72 14.33 66.35
endloop
endfacet
facet normal 0.45 0.87 0.19
outer loop
vertex 3.58 16.93 53.18
vertex 8.93 13.86 54.71
vertex 9.98 14.42 49.55
endloop
endfacet
facet normal 0.44 0.87 0.21
outer loop
vertex 6.61 14.70 56.07
vertex 8.93 13.86 54.71
vertex 3.58 16.93 53.18
endloop
endfacet
facet normal -0.46 0.89 0.02
outer loop
vertex 8.64 9.52 4.44
vertex 8.79 9.68 0.57
vertex 4.81 7.61 0.01
endloop
endfacet
facet normal 0.35 0.93 0.10
outer loop
vertex 3.84 19.07 86.31
vertex 11.40 16.58 83.07
vertex 3.62 20.17 77.07
endloop
endfacet
facet normal 0.32 0.75 0.57
outer loop
vertex 1.24 17.51 90.53
vertex 10.53 13.41 90.66
vertex 9.16 16.61 87.23
endloop
endfacet
facet normal 0.16 0.63 -0.76
outer loop
vertex 6.17 9.88 29.54
vertex 6.45 6.00 26.34
vertex 5.64 8.22 28.03
endloop
endfacet
facet normal -0.47 0.81 0.35
outer loop
vertex 7.32 7.15 8.11
vertex 8.64 9.52 4.44
vertex 3.74 6.63 4.57
endloop
endfacet
facet normal -0.31 0.95 0.04
outer loop
vertex 4.26 5.30 25.65
vertex 6.45 6.00 26.34
vertex 7.32 7.15 8.11
endloop
endfacet
facet normal 0.39 -0.51 -0.76
outer loop
vertex 4.25 -8.01 27.88
vertex 9.13 -4.19 27.78
vertex 7.41 -7.74 29.29
endloop
endfacet
facet normal 0.38 0.90 0.20
outer loop
vertex 9.16 16.61 87.23
vertex 11.40 16.58 83.07
vertex 3.84 19.07 86.31
endloop
endfacet
facet normal 0.35 0.93 -0.02
outer loop
vertex 9.98 14.42 49.55
vertex 6.05 15.65 39.41
vertex 3.58 16.93 53.18
endloop
endfacet
facet normal 0.41 0.77 0.49
outer loop
vertex 7.52 13.06 57.90
vertex 6.61 14.70 56.07
vertex 4.47 14.69 57.92
endloop
endfacet
facet normal 0.34 0.91 -0.25
outer loop
vertex 3.62 20.17 77.07
vertex 10.93 16.12 72.25
vertex 3.91 18.32 70.74
endloop
endfacet
facet normal -0.50 0.86 0.07
outer loop
vertex 3.74 6.63 4.57
vertex 8.64 9.52 4.44
vertex 4.81 7.61 0.01
endloop
endfacet
facet normal -0.62 0.78 -0.03
outer loop
vertex 4.26 5.30 25.65
vertex 7.32 7.15 8.11
vertex 4.46 4.88 8.05
endloop
endfacet
facet normal 0.87 0.46 0.14
outer loop
vertex 5.28 6.14 98.93
vertex 7.22 2.42 99.14
vertex 5.89 5.28 98.02
endloop
endfacet
facet normal 0.30 0.82 0.49
outer loop
vertex 1.24 17.51 90.53
vertex 9.16 16.61 87.23
vertex 3.84 19.07 86.31
endloop
endfacet
facet normal 0.30 0.88 0.36
outer loop
vertex 4.47 14.69 57.92
vertex 6.61 14.70 56.07
vertex 3.58 16.93 53.18
endloop
endfacet
facet normal 0.34 0.57 -0.75
outer loop
vertex 3.30 9.18 27.69
vertex 6.17 9.88 29.54
vertex 5.64 8.22 28.03
endloop
endfacet
facet normal 0.01 -0.01 -1.00
outer loop
vertex 4.81 7.61 0.01
vertex 18.74 3.81 0.23
vertex 1.35 -4.79 0.11
endloop
endfacet
facet normal -0.56 0.69 0.46
outer loop
vertex 7.32 7.15 8.11
vertex 3.74 6.63 4.57
vertex 4.46 4.88 8.05
endloop
endfacet
facet normal 0.19 -0.57 -0.80
outer loop
vertex 1.41 -9.92 62.96
vertex 5.18 -8.44 62.81
vertex 2.12 -14.63 66.51
endloop
endfacet
facet normal 0.23 0.54 -0.81
outer loop
vertex 2.02 10.41 62.69
vertex 5.72 14.33 66.35
vertex 5.10 8.89 62.54
endloop
endfacet
facet normal 0.05 0.62 -0.79
outer loop
vertex 5.64 8.22 28.03
vertex 6.45 6.00 26.34
vertex 4.26 5.30 25.65
endloop
endfacet
facet normal 0.02 0.96 -0.28
outer loop
vertex 3.62 20.17 77.07
vertex 3.91 18.32 70.74
vertex -4.89 19.79 75.21
endloop
endfacet
facet normal -0.64 0.77 0.02
outer loop
vertex 3.74 6.63 4.57
vertex 4.81 7.61 0.01
vertex 3.75 6.74 0.41
endloop
endfacet
facet normal 0.23 0.78 -0.59
outer loop
vertex -1.73 7.66 98.23
vertex 5.28 6.14 98.93
vertex 5.89 5.28 98.02
endloop
endfacet
facet normal -0.55 0.31 -0.78
outer loop
vertex 3.75 6.74 0.41
vertex 4.81 7.61 0.01
vertex 1.72 2.35 0.11
endloop
endfacet
facet normal -0.90 0.44 -0.02
outer loop
vertex 4.26 5.30 25.65
vertex 4.46 4.88 8.05
vertex 3.05 2.00 8.46
endloop
endfacet
facet normal -0.94 -0.33 -0.04
outer loop
vertex 3.98 -2.59 25.51
vertex 3.05 2.00 8.46
vertex 5.03 -3.78 9.66
endloop
endfacet
facet normal 0.41 0.79 -0.46
outer loop
vertex 6.05 15.65 39.41
vertex 6.17 9.88 29.54
vertex 1.81 14.84 34.24
endloop
endfacet
facet normal -0.80 0.45 0.39
outer loop
vertex 3.05 2.00 8.46
vertex 4.46 4.88 8.05
vertex 3.74 6.63 4.57
endloop
endfacet
facet normal -0.94 0.33 0.00
outer loop
vertex 4.26 5.30 25.65
vertex 3.05 2.00 8.46
vertex 2.61 0.61 25.39
endloop
endfacet
facet normal 0.13 0.99 0.11
outer loop
vertex 3.84 19.07 86.31
vertex 3.62 20.17 77.07
vertex -0.50 19.72 85.66
endloop
endfacet
facet normal -0.04 0.90 0.43
outer loop
vertex 4.47 14.69 57.92
vertex 3.58 16.93 53.18
vertex -2.31 17.73 51.04
endloop
endfacet
facet normal -0.91 0.42 0.01
outer loop
vertex 3.74 6.63 4.57
vertex 3.75 6.74 0.41
vertex 1.72 2.35 0.11
endloop
endfacet
facet normal -0.82 0.44 0.37
outer loop
vertex 3.05 2.00 8.46
vertex 3.74 6.63 4.57
vertex 1.75 2.91 4.54
endloop
endfacet
facet normal -0.92 -0.39 -0.06
outer loop
vertex 3.98 -2.59 25.51
vertex 2.61 0.61 25.39
vertex 3.05 2.00 8.46
endloop
endfacet
facet normal -0.03 0.00 -1.00
outer loop
vertex 1.72 2.35 0.11
vertex 4.81 7.61 0.01
vertex 1.35 -4.79 0.11
endloop
endfacet
facet normal 0.09 0.81 -0.59
outer loop
vertex -1.30 16.56 67.53
vertex 3.91 18.32 70.74
vertex 1.37 15.37 66.30
endloop
endfacet
facet normal 0.22 0.97 -0.05
outer loop
vertex -2.37 17.86 45.38
vertex 3.58 16.93 53.18
vertex 6.05 15.65 39.41
endloop
endfacet
facet normal 0.22 0.77 -0.60
outer loop
vertex 1.81 14.84 34.24
vertex 6.17 9.88 29.54
vertex -0.41 11.27 28.85
endloop
endfacet
facet normal 0.22 0.75 -0.63
outer loop
vertex -0.41 11.27 28.85
vertex 6.17 9.88 29.54
vertex 3.30 9.18 27.69
endloop
endfacet
facet normal -0.90 -0.34 0.29
outer loop
vertex 3.08 -6.57 8.03
vertex 1.18 -4.54 4.53
vertex 3.13 -9.26 5.00
endloop
endfacet
facet normal -0.92 -0.38 0.00
outer loop
vertex 3.13 -9.26 5.00
vertex 1.18 -4.54 4.53
vertex 3.71 -10.68 0.19
endloop
endfacet
facet normal 0.13 -0.60 -0.79
outer loop
vertex 4.54 -16.54 90.43
vertex 5.49 -18.55 92.12
vertex -0.42 -17.31 90.18
endloop
endfacet
facet normal 0.65 0.62 -0.44
outer loop
vertex 1.56 -18.21 47.79
vertex 2.77 -19.64 47.53
vertex 2.32 -19.76 46.71
endloop
endfacet
facet normal 0.09 0.97 -0.23
outer loop
vertex -2.37 17.86 45.38
vertex 6.05 15.65 39.41
vertex 1.81 14.84 34.24
endloop
endfacet
facet normal 0.15 0.59 -0.79
outer loop
vertex 1.37 15.37 66.30
vertex 5.72 14.33 66.35
vertex 2.02 10.41 62.69
endloop
endfacet
facet normal -0.88 0.47 -0.05
outer loop
vertex 3.74 6.63 4.57
vertex 1.72 2.35 0.11
vertex 1.75 2.91 4.54
endloop
endfacet
facet normal -0.94 0.07 0.33
outer loop
vertex 3.05 2.00 8.46
vertex 1.75 2.91 4.54
vertex 1.18 -4.54 4.53
endloop
endfacet
facet normal -0.88 -0.03 0.46
outer loop
vertex 3.08 -6.57 8.03
vertex 3.05 2.00 8.46
vertex 1.18 -4.54 4.53
endloop
endfacet
facet normal 0.04 -0.78 -0.62
outer loop
vertex -0.42 -17.31 90.18
vertex 5.49 -18.55 92.12
vertex -5.05 -19.03 92.04
endloop
endfacet
facet normal -0.05 1.00 0.03
outer loop
vertex -0.50 19.72 85.66
vertex 3.62 20.17 77.07
vertex -4.89 19.79 75.21
endloop
endfacet
facet normal 0.08 0.92 0.39
outer loop
vertex 1.24 17.51 90.53
vertex 3.84 19.07 86.31
vertex -0.50 19.72 85.66
endloop
endfacet
facet normal -0.93 -0.37 -0.01
outer loop
vertex 1.18 -4.54 4.53
vertex 1.35 -4.79 0.11
vertex 3.71 -10.68 0.19
endloop
endfacet
facet normal 0.18 0.36 -0.92
outer loop
vertex 1.59 -16.58 51.07
vertex 2.07 -16.61 51.15
vertex 1.83 -16.79 51.03
endloop
endfacet
facet normal 0.16 0.62 -0.77
outer loop
vertex 0.85 -18.52 47.39
vertex 1.56 -18.21 47.79
vertex 2.32 -19.76 46.71
endloop
endfacet
facet normal -0.76 -0.59 -0.26
outer loop
vertex 0.75 -18.84 51.61
vertex 1.56 -18.21 47.79
vertex 2.77 -19.64 47.53
endloop
endfacet
facet normal 0.21 0.64 -0.74
outer loop
vertex 0.45 7.94 99.10
vertex 5.28 6.14 98.93
vertex -1.73 7.66 98.23
endloop
endfacet
facet normal -0.67 -0.72 -0.15
outer loop
vertex 1.53 -16.71 51.99
vertex 1.59 -16.58 51.07
vertex 1.83 -16.79 51.03
endloop
endfacet
facet normal -0.94 0.34 0.01
outer loop
vertex 1.55 -16.68 52.71
vertex 1.53 -16.71 51.99
vertex 0.75 -18.84 51.61
endloop
endfacet
facet normal -0.87 0.38 -0.31
outer loop
vertex 0.75 -18.84 51.61
vertex 1.53 -16.71 51.99
vertex 1.83 -16.79 51.03
endloop
endfacet
facet normal -0.05 0.91 -0.41
outer loop
vertex -4.89 19.79 75.21
vertex 3.91 18.32 70.74
vertex -1.30 16.56 67.53
endloop
endfacet
facet normal -0.07 0.84 -0.53
outer loop
vertex -4.81 14.51 34.56
vertex 1.81 14.84 34.24
vertex -0.41 11.27 28.85
endloop
endfacet
facet normal -1.00 0.05 0.00
outer loop
vertex 1.75 2.91 4.54
vertex 1.72 2.35 0.11
vertex 1.35 -4.79 0.11
endloop
endfacet
facet normal -1.00 0.08 -0.04
outer loop
vertex 1.18 -4.54 4.53
vertex 1.75 2.91 4.54
vertex 1.35 -4.79 0.11
endloop
endfacet
facet normal -0.16 -0.61 -0.78
outer loop
vertex -7.43 -7.32 62.69
vertex 1.41 -9.92 62.96
vertex 2.12 -14.63 66.51
endloop
endfacet
facet normal -0.05 -1.00 0.04
outer loop
vertex 1.55 -16.68 52.71
vertex -2.34 -16.42 54.14
vertex 1.53 -16.71 51.99
endloop
endfacet
facet normal 0.13 0.99 0.02
outer loop
vertex 3.58 16.93 53.18
vertex -2.37 17.86 45.38
vertex -2.31 17.73 51.04
endloop
endfacet
facet normal -0.02 0.59 -0.81
outer loop
vertex -3.30 10.28 62.69
vertex 1.37 15.37 66.30
vertex 2.02 10.41 62.69
endloop
endfacet
facet normal 0.32 0.50 -0.80
outer loop
vertex 3.30 9.18 27.69
vertex 5.64 8.22 28.03
vertex 4.26 5.30 25.65
endloop
endfacet
facet normal -0.89 0.44 -0.12
outer loop
vertex 0.75 -18.84 51.61
vertex 1.83 -16.79 51.03
vertex 1.56 -18.21 47.79
endloop
endfacet
facet normal -0.14 0.88 0.45
outer loop
vertex -2.27 16.05 92.35
vertex 1.24 17.51 90.53
vertex -0.50 19.72 85.66
endloop
endfacet
facet normal 0.12 0.95 0.30
outer loop
vertex -2.04 15.54 57.89
vertex 4.47 14.69 57.92
vertex -2.31 17.73 51.04
endloop
endfacet
facet normal -0.02 0.46 -0.89
outer loop
vertex 0.85 -18.52 47.39
vertex 2.32 -19.76 46.71
vertex -2.38 -19.98 46.68
endloop
endfacet
facet normal 0.08 -1.00 0.00
outer loop
vertex -2.60 -18.49 72.85
vertex 9.15 -17.53 80.47
vertex -6.10 -18.81 79.30
endloop
endfacet
facet normal -0.05 0.92 0.39
outer loop
vertex -2.38 -19.98 46.68
vertex 2.32 -19.76 46.71
vertex -1.20 -19.75 46.28
endloop
endfacet
facet normal 0.12 0.26 -0.96
outer loop
vertex -1.20 -19.75 46.28
vertex 2.32 -19.76 46.71
vertex -0.63 -20.17 46.23
endloop
endfacet
facet normal -0.18 0.73 -0.66
outer loop
vertex -2.50 -18.07 48.82
vertex 0.85 -18.52 47.39
vertex -2.38 -19.98 46.68
endloop
endfacet
facet normal -0.06 0.96 -0.28
outer loop
vertex -2.37 17.86 45.38
vertex 1.81 14.84 34.24
vertex -4.81 14.51 34.56
endloop
endfacet
facet normal -0.10 0.99 -0.06
outer loop
vertex -2.98 7.58 98.98
vertex 0.45 7.94 99.10
vertex -1.73 7.66 98.23
endloop
endfacet
facet normal 0.02 -0.03 -1.00
outer loop
vertex -4.70 -2.57 25.36
vertex 2.61 0.61 25.39
vertex 3.98 -2.59 25.51
endloop
endfacet
facet normal 0.01 0.50 -0.87
outer loop
vertex -0.41 11.27 28.85
vertex 3.30 9.18 27.69
vertex -3.59 9.38 27.73
endloop
endfacet
facet normal 0.01 0.43 -0.90
outer loop
vertex -3.59 9.38 27.73
vertex 3.30 9.18 27.69
vertex -4.89 5.24 25.72
endloop
endfacet
facet normal -0.01 0.46 -0.89
outer loop
vertex -4.89 5.24 25.72
vertex 3.30 9.18 27.69
vertex 4.26 5.30 25.65
endloop
endfacet
facet normal -0.01 0.11 -0.99
outer loop
vertex -4.89 5.24 25.72
vertex 4.26 5.30 25.65
vertex -3.25 2.37 25.40
endloop
endfacet
facet normal 0.28 -0.92 0.26
outer loop
vertex -0.44 -14.78 57.91
vertex -1.62 -15.60 56.27
vertex -2.34 -16.42 54.14
endloop
endfacet
facet normal 0.01 0.05 -1.00
outer loop
vertex 4.26 5.30 25.65
vertex 2.61 0.61 25.39
vertex -3.25 2.37 25.40
endloop
endfacet
facet normal 0.00 0.01 -1.00
outer loop
vertex -3.25 2.37 25.40
vertex 2.61 0.61 25.39
vertex -4.70 -2.57 25.36
endloop
endfacet
facet normal -0.27 -0.26 -0.93
outer loop
vertex -2.38 -19.98 46.68
vertex -1.20 -19.75 46.28
vertex -0.63 -20.17 46.23
endloop
endfacet
facet normal -0.09 0.76 -0.64
outer loop
vertex -2.58 -16.92 50.22
vertex -1.98 -16.83 50.25
vertex -2.45 -17.49 49.52
endloop
endfacet
facet normal -0.13 0.77 -0.62
outer loop
vertex -2.45 -17.49 49.52
vertex -1.98 -16.83 50.25
vertex -2.50 -18.07 48.82
endloop
endfacet
facet normal -0.03 -0.33 -0.94
outer loop
vertex -6.18 -3.24 26.07
vertex 3.98 -2.59 25.51
vertex -3.63 -8.61 27.84
endloop
endfacet
facet normal -0.80 0.60 0.01
outer loop
vertex -2.83 -17.27 50.32
vertex -2.29 -16.60 52.89
vertex -2.58 -16.92 50.22
endloop
endfacet
facet normal -0.77 0.42 -0.49
outer loop
vertex -2.83 -17.27 50.32
vertex -2.58 -16.92 50.22
vertex -2.45 -17.49 49.52
endloop
endfacet
facet normal 0.10 0.97 -0.22
outer loop
vertex -2.83 -17.27 50.32
vertex -2.45 -17.49 49.52
vertex -2.78 -17.54 49.15
endloop
endfacet
facet normal -0.93 -0.27 0.27
outer loop
vertex -1.89 -18.33 52.52
vertex -2.29 -16.60 52.89
vertex -2.83 -17.27 50.32
endloop
endfacet
facet normal -0.63 0.14 -0.77
outer loop
vertex -2.78 -17.54 49.15
vertex -2.50 -18.07 48.82
vertex -2.98 -17.87 49.25
endloop
endfacet
facet normal -0.29 0.71 -0.65
outer loop
vertex -2.98 -17.87 49.25
vertex -2.50 -18.07 48.82
vertex -2.38 -19.98 46.68
endloop
endfacet
facet normal -0.12 0.88 0.45
outer loop
vertex -6.89 17.20 88.92
vertex -2.27 16.05 92.35
vertex -0.50 19.72 85.66
endloop
endfacet
facet normal -0.87 0.47 -0.15
outer loop
vertex -2.83 -17.27 50.32
vertex -2.78 -17.54 49.15
vertex -2.98 -17.87 49.25
endloop
endfacet
facet normal -0.93 -0.07 0.36
outer loop
vertex -1.89 -18.33 52.52
vertex -2.83 -17.27 50.32
vertex -2.93 -19.65 49.60
endloop
endfacet
facet normal -0.64 0.51 -0.57
outer loop
vertex -2.98 -17.87 49.25
vertex -2.38 -19.98 46.68
vertex -3.00 -19.92 47.43
endloop
endfacet
facet normal -0.11 0.90 -0.43
outer loop
vertex -4.89 19.79 75.21
vertex -1.30 16.56 67.53
vertex -6.98 16.73 69.35
endloop
endfacet
facet normal -0.33 0.67 0.67
outer loop
vertex -2.15 14.69 93.77
vertex -2.27 16.05 92.35
vertex -6.89 17.20 88.92
endloop
endfacet
facet normal 0.01 -0.74 -0.68
outer loop
vertex -4.70 -2.57 25.36
vertex 3.98 -2.59 25.51
vertex -6.18 -3.24 26.07
endloop
endfacet
facet normal -0.20 -0.42 -0.88
outer loop
vertex -6.55 -15.83 90.85
vertex -0.42 -17.31 90.18
vertex -5.05 -19.03 92.04
endloop
endfacet
facet normal -0.99 0.00 0.13
outer loop
vertex -2.83 -17.27 50.32
vertex -2.98 -17.87 49.25
vertex -2.93 -19.65 49.60
endloop
endfacet
facet normal -1.00 -0.02 0.03
outer loop
vertex -2.93 -19.65 49.60
vertex -2.98 -17.87 49.25
vertex -3.00 -19.92 47.43
endloop
endfacet
facet normal -0.15 0.83 -0.54
outer loop
vertex -6.98 16.73 69.35
vertex -1.30 16.56 67.53
vertex -5.65 15.83 67.62
endloop
endfacet
facet normal -0.11 0.58 -0.81
outer loop
vertex -1.30 16.56 67.53
vertex 1.37 15.37 66.30
vertex -5.65 15.83 67.62
endloop
endfacet
facet normal -0.30 0.71 -0.63
outer loop
vertex -4.81 14.51 34.56
vertex -0.41 11.27 28.85
vertex -8.47 12.84 34.39
endloop
endfacet
facet normal -0.31 0.85 -0.42
outer loop
vertex -4.39 7.10 99.05
vertex -2.98 7.58 98.98
vertex -1.73 7.66 98.23
endloop
endfacet
facet normal -0.08 1.00 0.04
outer loop
vertex -0.50 19.72 85.66
vertex -4.89 19.79 75.21
vertex -6.85 19.38 81.09
endloop
endfacet
facet normal -0.10 0.64 -0.77
outer loop
vertex 1.37 15.37 66.30
vertex -3.30 10.28 62.69
vertex -5.65 15.83 67.62
endloop
endfacet
facet normal -0.25 0.77 -0.58
outer loop
vertex -8.47 12.84 34.39
vertex -0.41 11.27 28.85
vertex -3.59 9.38 27.73
endloop
endfacet
facet normal -0.34 0.74 -0.59
outer loop
vertex -4.39 7.10 99.05
vertex -1.73 7.66 98.23
vertex -6.39 5.33 97.97
endloop
endfacet
facet normal -0.11 -0.74 -0.66
outer loop
vertex -3.63 -8.61 27.84
vertex 1.59 -10.60 29.18
vertex -5.36 -9.63 29.27
endloop
endfacet
facet normal -0.07 0.01 -1.00
outer loop
vertex -1.88 -2.03 0.05
vertex -2.47 -7.15 0.06
vertex -4.42 6.78 0.28
endloop
endfacet
facet normal -0.35 0.50 -0.79
outer loop
vertex -3.59 9.38 27.73
vertex -4.89 5.24 25.72
vertex -6.20 6.81 27.28
endloop
endfacet
facet normal -0.81 0.22 0.55
outer loop
vertex -4.81 3.04 24.13
vertex -5.04 3.35 23.67
vertex -6.74 -3.37 23.83
endloop
endfacet
facet normal -0.98 0.21 0.00
outer loop
vertex -6.18 -3.24 26.07
vertex -5.15 1.51 26.30
vertex -4.81 3.04 24.13
endloop
endfacet
facet normal -0.94 0.27 0.22
outer loop
vertex -6.18 -3.24 26.07
vertex -4.81 3.04 24.13
vertex -6.74 -3.37 23.83
endloop
endfacet
facet normal -0.19 0.52 0.83
outer loop
vertex -1.73 7.66 98.23
vertex -2.15 14.69 93.77
vertex -7.89 11.69 94.30
endloop
endfacet
facet normal 0.56 0.83 0.01
outer loop
vertex -4.41 6.70 4.63
vertex -4.42 6.78 0.28
vertex -7.92 9.13 0.18
endloop
endfacet
facet normal -0.82 -0.40 -0.41
outer loop
vertex -6.85 4.90 26.37
vertex -4.81 3.04 24.13
vertex -5.15 1.51 26.30
endloop
endfacet
facet normal -0.56 -0.27 -0.78
outer loop
vertex -6.85 4.90 26.37
vertex -5.15 1.51 26.30
vertex -7.13 0.37 28.12
endloop
endfacet
facet normal -0.72 0.19 -0.67
outer loop
vertex -7.13 0.37 28.12
vertex -5.15 1.51 26.30
vertex -6.18 -3.24 26.07
endloop
endfacet
facet normal 0.05 -0.33 -0.94
outer loop
vertex -6.55 -15.83 90.85
vertex -5.05 -19.03 92.04
vertex -6.32 -18.30 91.72
endloop
endfacet
facet normal -0.29 -0.90 -0.31
outer loop
vertex -10.22 -16.21 73.43
vertex -4.93 -16.80 70.13
vertex -2.60 -18.49 72.85
endloop
endfacet
facet normal 0.02 0.72 -0.70
outer loop
vertex -6.20 6.81 27.28
vertex -4.89 5.24 25.72
vertex -6.80 5.93 26.36
endloop
endfacet
facet normal -0.33 -0.43 -0.84
outer loop
vertex -6.18 -3.24 26.07
vertex -3.63 -8.61 27.84
vertex -7.18 -8.10 28.96
endloop
endfacet
facet normal -0.32 -0.54 -0.78
outer loop
vertex -3.63 -8.61 27.84
vertex -5.36 -9.63 29.27
vertex -7.18 -8.10 28.96
endloop
endfacet
facet normal -0.32 -0.61 -0.73
outer loop
vertex -7.43 -7.32 62.69
vertex -2.39 -15.22 67.10
vertex -9.83 -15.05 70.23
endloop
endfacet
facet normal -0.30 0.69 0.65
outer loop
vertex -7.89 11.69 94.30
vertex -2.15 14.69 93.77
vertex -6.89 17.20 88.92
endloop
endfacet
facet normal 0.34 0.94 0.00
outer loop
vertex -6.80 5.93 26.36
vertex -4.89 5.24 25.72
vertex -5.83 5.66 8.21
endloop
endfacet
facet normal -0.72 0.56 0.42
outer loop
vertex -7.83 2.62 99.10
vertex -4.39 7.10 99.05
vertex -6.39 5.33 97.97
endloop
endfacet
facet normal -0.69 -0.73 -0.03
outer loop
vertex -6.85 4.90 26.37
vertex -6.86 5.01 23.63
vertex -4.81 3.04 24.13
endloop
endfacet
facet normal -0.53 0.27 -0.80
outer loop
vertex -8.42 -4.04 27.29
vertex -6.18 -3.24 26.07
vertex -8.97 -4.39 27.54
endloop
endfacet
facet normal 0.00 0.02 -1.00
outer loop
vertex -4.42 6.78 0.28
vertex -2.47 -7.15 0.06
vertex -4.36 -10.61 0.00
endloop
endfacet
facet normal -0.31 -0.88 -0.35
outer loop
vertex -7.14 -14.79 40.16
vertex -8.85 -13.38 38.12
vertex -7.96 -12.04 34.02
endloop
endfacet
facet normal -0.46 0.77 -0.44
outer loop
vertex -11.75 4.56 29.17
vertex -6.20 6.81 27.28
vertex -6.80 5.93 26.36
endloop
endfacet
facet normal -0.18 -0.60 0.78
outer loop
vertex -0.40 -15.90 95.49
vertex -8.45 -16.09 93.50
vertex -5.05 -19.03 92.04
endloop
endfacet
facet normal -0.35 0.88 -0.33
outer loop
vertex -4.89 19.79 75.21
vertex -6.98 16.73 69.35
vertex -11.01 15.75 70.96
endloop
endfacet
facet normal -0.41 0.64 -0.65
outer loop
vertex -6.98 16.73 69.35
vertex -5.65 15.83 67.62
vertex -11.01 15.75 70.96
endloop
endfacet
facet normal -0.43 0.56 -0.71
outer loop
vertex -10.14 8.83 31.24
vertex -3.59 9.38 27.73
vertex -6.20 6.81 27.28
endloop
endfacet
facet normal -0.79 0.18 -0.58
outer loop
vertex -7.83 2.62 99.10
vertex -6.39 5.33 97.97
vertex -8.07 -1.79 98.06
endloop
endfacet
facet normal -0.54 0.30 -0.79
outer loop
vertex -8.42 -4.04 27.29
vertex -7.13 0.37 28.12
vertex -6.18 -3.24 26.07
endloop
endfacet
facet normal -0.77 -0.27 -0.58
outer loop
vertex -8.45 -16.09 93.50
vertex -6.55 -15.83 90.85
vertex -6.32 -18.30 91.72
endloop
endfacet
facet normal -0.42 0.90 -0.08
outer loop
vertex -6.85 19.38 81.09
vertex -4.89 19.79 75.21
vertex -12.91 16.08 75.22
endloop
endfacet
facet normal -0.40 0.90 -0.19
outer loop
vertex -2.37 17.86 45.38
vertex -4.81 14.51 34.56
vertex -11.90 12.77 41.17
endloop
endfacet
facet normal -0.26 -0.45 -0.85
outer loop
vertex -8.97 -4.39 27.54
vertex -6.18 -3.24 26.07
vertex -7.18 -8.10 28.96
endloop
endfacet
facet normal -0.03 0.02 -1.00
outer loop
vertex -4.42 6.78 0.28
vertex -4.36 -10.61 0.00
vertex -9.38 -13.35 0.12
endloop
endfacet
facet normal -0.41 0.88 -0.25
outer loop
vertex -12.91 16.08 75.22
vertex -4.89 19.79 75.21
vertex -11.01 15.75 70.96
endloop
endfacet
facet normal -0.40 0.92 0.03
outer loop
vertex -9.42 14.54 53.79
vertex -2.31 17.73 51.04
vertex -2.37 17.86 45.38
endloop
endfacet
facet normal -0.29 0.91 0.30
outer loop
vertex -2.04 15.54 57.89
vertex -2.31 17.73 51.04
vertex -9.42 14.54 53.79
endloop
endfacet
facet normal -0.31 0.55 -0.77
outer loop
vertex -5.65 15.83 67.62
vertex -3.30 10.28 62.69
vertex -7.62 7.47 62.40
endloop
endfacet
facet normal -0.40 0.66 -0.63
outer loop
vertex -8.47 12.84 34.39
vertex -3.59 9.38 27.73
vertex -10.14 8.83 31.24
endloop
endfacet
facet normal 0.39 0.90 0.18
outer loop
vertex -4.41 6.70 4.63
vertex -7.92 9.13 0.18
vertex -11.11 9.65 4.59
endloop
endfacet
facet normal 0.37 0.84 0.39
outer loop
vertex -5.83 5.66 8.21
vertex -4.41 6.70 4.63
vertex -11.11 9.65 4.59
endloop
endfacet
facet normal -0.99 0.02 0.15
outer loop
vertex -7.84 -1.66 99.47
vertex -7.83 2.62 99.10
vertex -8.07 -1.79 98.06
endloop
endfacet
facet normal -0.98 -0.07 0.16
outer loop
vertex -7.84 -1.66 99.47
vertex -8.07 -1.79 98.06
vertex -7.97 -4.57 97.40
endloop
endfacet
facet normal -0.95 0.21 -0.24
outer loop
vertex -7.84 -1.66 99.47
vertex -7.97 -4.57 97.40
vertex -8.74 -7.99 97.41
endloop
endfacet
facet normal -0.99 0.11 0.10
outer loop
vertex -8.63 -7.67 98.10
vertex -7.84 -1.66 99.47
vertex -8.74 -7.99 97.41
endloop
endfacet
facet normal -1.00 0.00 0.03
outer loop
vertex -8.01 -7.78 96.02
vertex -7.97 -4.57 97.40
vertex -8.05 -10.91 94.29
endloop
endfacet
facet normal -0.91 0.22 -0.36
outer loop
vertex -8.01 -7.78 96.02
vertex -8.05 -10.91 94.29
vertex -8.96 -12.01 95.91
endloop
endfacet
facet normal -0.79 -0.38 -0.48
outer loop
vertex -6.52 -18.38 92.11
vertex -8.45 -16.09 93.50
vertex -6.32 -18.30 91.72
endloop
endfacet
facet normal -0.46 0.89 -0.03
outer loop
vertex -9.42 14.54 53.79
vertex -2.37 17.86 45.38
vertex -11.90 12.77 41.17
endloop
endfacet
facet normal -0.39 0.68 0.62
outer loop
vertex -7.89 11.69 94.30
vertex -6.89 17.20 88.92
vertex -12.11 13.09 90.10
endloop
endfacet
facet normal -0.40 0.90 -0.19
outer loop
vertex -4.81 14.51 34.56
vertex -8.47 12.84 34.39
vertex -11.90 12.77 41.17
endloop
endfacet
facet normal 0.34 0.84 0.42
outer loop
vertex -10.97 7.74 8.25
vertex -5.83 5.66 8.21
vertex -11.11 9.65 4.59
endloop
endfacet
facet normal -0.24 0.25 -0.94
outer loop
vertex -7.13 0.37 28.12
vertex -8.42 -4.04 27.29
vertex -11.40 -1.67 28.68
endloop
endfacet
facet normal -0.88 0.20 -0.44
outer loop
vertex -8.74 -7.99 97.41
vertex -7.97 -4.57 97.40
vertex -8.01 -7.78 96.02
endloop
endfacet
facet normal -0.88 0.21 -0.43
outer loop
vertex -8.74 -7.99 97.41
vertex -8.01 -7.78 96.02
vertex -8.96 -12.01 95.91
endloop
endfacet
facet normal -0.88 0.05 -0.46
outer loop
vertex -8.96 -12.01 95.91
vertex -8.05 -10.91 94.29
vertex -6.55 -15.83 90.85
endloop
endfacet
facet normal -0.80 0.22 -0.55
outer loop
vertex -8.96 -12.01 95.91
vertex -6.55 -15.83 90.85
vertex -8.45 -16.09 93.50
endloop
endfacet
facet normal -0.44 -0.90 0.05
outer loop
vertex -5.37 -15.24 54.69
vertex -8.25 -13.82 54.92
vertex -5.58 -15.84 42.39
endloop
endfacet
facet normal 0.08 0.57 -0.82
outer loop
vertex -8.42 -4.04 27.29
vertex -8.75 -4.06 27.24
vertex -11.40 -1.67 28.68
endloop
endfacet
facet normal -0.99 0.00 0.15
outer loop
vertex -8.63 -7.67 98.10
vertex -8.74 -7.99 97.41
vertex -8.96 -12.01 95.91
endloop
endfacet
facet normal -0.39 -0.58 -0.72
outer loop
vertex -7.43 -7.32 62.69
vertex -9.83 -15.05 70.23
vertex -13.37 -8.49 66.89
endloop
endfacet
facet normal -0.66 -0.65 0.37
outer loop
vertex -7.95 -12.32 58.07
vertex -12.29 -7.75 58.25
vertex -8.25 -13.82 54.92
endloop
endfacet
facet normal -0.42 0.87 0.24
outer loop
vertex -6.89 17.20 88.92
vertex -6.85 19.38 81.09
vertex -13.21 15.25 84.88
endloop
endfacet
facet normal -0.42 0.63 -0.65
outer loop
vertex -11.01 15.75 70.96
vertex -5.65 15.83 67.62
vertex -13.05 11.16 67.84
endloop
endfacet
facet normal -0.38 0.78 0.49
outer loop
vertex -10.31 12.71 56.01
vertex -2.04 15.54 57.89
vertex -9.42 14.54 53.79
endloop
endfacet
facet normal -0.01 -0.06 -1.00
outer loop
vertex -12.77 9.74 0.21
vertex -7.92 9.13 0.18
vertex -4.42 6.78 0.28
endloop
endfacet
facet normal 0.38 0.75 -0.55
outer loop
vertex -11.40 -1.67 28.68
vertex -8.75 -4.06 27.24
vertex -8.91 -4.39 26.69
endloop
endfacet
facet normal -0.38 0.79 0.48
outer loop
vertex -9.91 11.76 57.90
vertex -2.04 15.54 57.89
vertex -10.31 12.71 56.01
endloop
endfacet
facet normal -0.58 0.34 -0.74
outer loop
vertex -10.14 8.83 31.24
vertex -6.20 6.81 27.28
vertex -11.02 5.99 30.63
endloop
endfacet
facet normal -0.47 0.74 -0.49
outer loop
vertex -11.02 5.99 30.63
vertex -6.20 6.81 27.28
vertex -11.75 4.56 29.17
endloop
endfacet
facet normal 0.12 0.99 -0.03
outer loop
vertex -11.11 9.65 4.59
vertex -7.92 9.13 0.18
vertex -12.77 9.74 0.21
endloop
endfacet
facet normal 0.37 0.93 0.01
outer loop
vertex -10.97 7.74 8.25
vertex -6.80 5.93 26.36
vertex -5.83 5.66 8.21
endloop
endfacet
facet normal 0.04 -0.78 -0.62
outer loop
vertex -12.76 3.29 28.01
vertex -6.85 4.90 26.37
vertex -12.19 3.09 28.30
endloop
endfacet
facet normal -0.22 -0.34 -0.92
outer loop
vertex -12.19 3.09 28.30
vertex -6.85 4.90 26.37
vertex -7.13 0.37 28.12
endloop
endfacet
facet normal -0.64 -0.56 -0.53
outer loop
vertex -13.23 -7.86 35.98
vertex -7.18 -8.10 28.96
vertex -7.96 -12.04 34.02
endloop
endfacet
facet normal -0.37 0.55 -0.75
outer loop
vertex -5.65 15.83 67.62
vertex -7.62 7.47 62.40
vertex -13.05 11.16 67.84
endloop
endfacet
facet normal -0.65 -0.52 -0.55
outer loop
vertex -13.23 -7.86 35.98
vertex -8.97 -4.39 27.54
vertex -7.18 -8.10 28.96
endloop
endfacet
facet normal -0.52 0.85 0.06
outer loop
vertex -13.21 15.25 84.88
vertex -6.85 19.38 81.09
vertex -12.91 16.08 75.22
endloop
endfacet
facet normal -0.50 0.76 0.42
outer loop
vertex -12.11 13.09 90.10
vertex -6.89 17.20 88.92
vertex -13.21 15.25 84.88
endloop
endfacet
facet normal -0.65 0.36 0.67
outer loop
vertex -9.91 11.76 57.90
vertex -13.56 8.97 55.86
vertex -7.62 7.47 62.40
endloop
endfacet
facet normal -0.57 0.30 -0.77
outer loop
vertex -13.05 11.16 67.84
vertex -7.62 7.47 62.40
vertex -10.45 1.82 62.30
endloop
endfacet
facet normal -0.09 -0.09 -0.99
outer loop
vertex -12.19 3.09 28.30
vertex -7.13 0.37 28.12
vertex -11.40 -1.67 28.68
endloop
endfacet
facet normal 0.55 0.80 -0.24
outer loop
vertex -11.55 -2.11 28.27
vertex -8.91 -4.39 26.69
vertex -10.00 -4.25 24.66
endloop
endfacet
facet normal -0.80 -0.28 -0.52
outer loop
vertex -13.23 -7.86 35.98
vertex -12.03 -3.20 31.61
vertex -8.97 -4.39 27.54
endloop
endfacet
facet normal -0.60 0.29 0.74
outer loop
vertex -14.50 4.74 57.87
vertex -10.45 1.82 62.30
vertex -7.62 7.47 62.40
endloop
endfacet
facet normal 0.70 0.71 -0.12
outer loop
vertex -11.55 -2.11 28.27
vertex -10.00 -4.25 24.66
vertex -12.01 -2.43 23.75
endloop
endfacet
facet normal -0.46 -0.88 0.12
outer loop
vertex -8.97 -4.39 27.54
vertex -11.97 -2.57 29.42
vertex -10.00 -4.25 24.66
endloop
endfacet
facet normal -0.53 -0.85 -0.03
outer loop
vertex -10.45 -16.84 82.95
vertex -12.10 -15.80 82.23
vertex -12.23 -15.52 75.67
endloop
endfacet
facet normal -0.43 0.90 -0.04
outer loop
vertex -12.86 12.63 48.33
vertex -9.42 14.54 53.79
vertex -11.90 12.77 41.17
endloop
endfacet
facet normal -0.15 0.83 0.53
outer loop
vertex -14.37 6.39 8.79
vertex -11.11 9.65 4.59
vertex -14.73 9.02 4.55
endloop
endfacet
facet normal -0.27 0.85 0.45
outer loop
vertex -14.37 6.39 8.79
vertex -10.97 7.74 8.25
vertex -11.11 9.65 4.59
endloop
endfacet
facet normal -0.19 0.97 0.14
outer loop
vertex -11.75 4.56 29.17
vertex -6.80 5.93 26.36
vertex -10.97 7.74 8.25
endloop
endfacet
facet normal 0.62 0.40 -0.67
outer loop
vertex -12.80 -0.60 28.02
vertex -11.40 -1.67 28.68
vertex -11.55 -2.11 28.27
endloop
endfacet
facet normal -0.61 0.68 0.41
outer loop
vertex -15.33 11.84 87.33
vertex -12.11 13.09 90.10
vertex -13.21 15.25 84.88
endloop
endfacet
facet normal -0.52 0.63 -0.58
outer loop
vertex -14.02 13.14 70.83
vertex -11.01 15.75 70.96
vertex -13.05 11.16 67.84
endloop
endfacet
facet normal -0.17 0.98 0.08
outer loop
vertex -14.73 9.02 4.55
vertex -11.11 9.65 4.59
vertex -12.77 9.74 0.21
endloop
endfacet
facet normal -0.01 -0.04 -1.00
outer loop
vertex -12.77 9.74 0.21
vertex -4.42 6.78 0.28
vertex -16.43 8.45 0.29
endloop
endfacet
facet normal -0.35 0.93 0.13
outer loop
vertex -14.37 6.39 8.79
vertex -11.75 4.56 29.17
vertex -10.97 7.74 8.25
endloop
endfacet
facet normal -0.60 0.18 0.78
outer loop
vertex -10.45 1.82 62.30
vertex -13.64 1.69 59.87
vertex -14.53 -1.69 59.96
endloop
endfacet
facet normal -0.94 -0.31 -0.11
outer loop
vertex -11.97 -2.57 29.42
vertex -12.03 -3.20 31.61
vertex -13.14 0.36 31.23
endloop
endfacet
facet normal -0.54 -0.21 -0.82
outer loop
vertex -10.45 1.82 62.30
vertex -7.43 -7.32 62.69
vertex -13.37 -8.49 66.89
endloop
endfacet
facet normal -0.73 0.64 0.24
outer loop
vertex -10.31 12.71 56.01
vertex -9.42 14.54 53.79
vertex -12.86 12.63 48.33
endloop
endfacet
facet normal -0.67 0.67 -0.33
outer loop
vertex -11.90 12.77 41.17
vertex -8.47 12.84 34.39
vertex -13.73 9.33 37.92
endloop
endfacet
facet normal -0.84 0.24 -0.48
outer loop
vertex -16.11 2.47 37.71
vertex -11.02 5.99 30.63
vertex -12.77 2.80 32.07
endloop
endfacet
facet normal -0.88 0.47 -0.03
outer loop
vertex -12.77 2.80 32.07
vertex -11.02 5.99 30.63
vertex -11.75 4.56 29.17
endloop
endfacet
facet normal 0.44 0.00 -0.90
outer loop
vertex -12.76 3.29 28.01
vertex -12.19 3.09 28.30
vertex -11.40 -1.67 28.68
endloop
endfacet
facet normal 0.42 -0.01 -0.91
outer loop
vertex -12.76 3.29 28.01
vertex -11.40 -1.67 28.68
vertex -12.80 -0.60 28.02
endloop
endfacet
facet normal -0.89 -0.18 -0.43
outer loop
vertex -13.23 -7.86 35.98
vertex -16.11 2.47 37.71
vertex -12.03 -3.20 31.61
endloop
endfacet
facet normal -0.73 0.63 0.27
outer loop
vertex -13.56 8.97 55.86
vertex -10.31 12.71 56.01
vertex -14.69 9.91 50.51
endloop
endfacet
facet normal -0.68 0.61 -0.41
outer loop
vertex -13.73 9.33 37.92
vertex -8.47 12.84 34.39
vertex -10.14 8.83 31.24
endloop
endfacet
facet normal -0.83 0.35 -0.42
outer loop
vertex -16.11 2.47 37.71
vertex -10.14 8.83 31.24
vertex -11.02 5.99 30.63
endloop
endfacet
facet normal -0.86 0.48 0.15
outer loop
vertex -14.03 4.90 15.33
vertex -11.75 4.56 29.17
vertex -14.37 6.39 8.79
endloop
endfacet
facet normal -0.58 0.33 0.75
outer loop
vertex -10.45 1.82 62.30
vertex -14.50 4.74 57.87
vertex -13.64 1.69 59.87
endloop
endfacet
facet normal -0.95 0.22 -0.21
outer loop
vertex -12.77 2.80 32.07
vertex -11.75 4.56 29.17
vertex -13.14 0.36 31.23
endloop
endfacet
facet normal -0.66 0.52 0.54
outer loop
vertex -15.12 8.50 90.79
vertex -12.11 13.09 90.10
vertex -15.33 11.84 87.33
endloop
endfacet
facet normal -0.69 -0.14 0.71
outer loop
vertex -12.03 -3.20 31.61
vertex -12.77 2.80 32.07
vertex -13.14 0.36 31.23
endloop
endfacet
facet normal -0.86 -0.07 -0.51
outer loop
vertex -16.11 2.47 37.71
vertex -12.77 2.80 32.07
vertex -12.03 -3.20 31.61
endloop
endfacet
facet normal -0.61 0.72 -0.33
outer loop
vertex -12.91 16.08 75.22
vertex -11.01 15.75 70.96
vertex -14.02 13.14 70.83
endloop
endfacet
facet normal -0.77 0.39 -0.51
outer loop
vertex -19.21 6.95 73.84
vertex -14.02 13.14 70.83
vertex -13.05 11.16 67.84
endloop
endfacet
facet normal -0.71 0.66 0.23
outer loop
vertex -14.69 9.91 50.51
vertex -10.31 12.71 56.01
vertex -12.86 12.63 48.33
endloop
endfacet
facet normal -0.86 0.49 -0.11
outer loop
vertex -14.69 9.91 50.51
vertex -12.86 12.63 48.33
vertex -11.90 12.77 41.17
endloop
endfacet
facet normal -0.67 -0.72 0.15
outer loop
vertex -12.89 -2.83 21.72
vertex -16.08 -2.33 9.99
vertex -10.52 -5.32 20.44
endloop
endfacet
facet normal 0.00 0.01 -1.00
outer loop
vertex -19.07 -9.21 0.19
vertex -4.42 6.78 0.28
vertex -9.38 -13.35 0.12
endloop
endfacet
facet normal -0.84 0.53 -0.09
outer loop
vertex -14.69 9.91 50.51
vertex -11.90 12.77 41.17
vertex -13.73 9.33 37.92
endloop
endfacet
facet normal -0.91 0.32 0.25
outer loop
vertex -13.56 8.97 55.86
vertex -14.69 9.91 50.51
vertex -14.50 4.74 57.87
endloop
endfacet
facet normal -0.48 0.73 0.49
outer loop
vertex -17.30 6.34 6.02
vertex -14.37 6.39 8.79
vertex -14.73 9.02 4.55
endloop
endfacet
facet normal -0.97 -0.11 0.21
outer loop
vertex -11.97 -2.57 29.42
vertex -16.70 2.03 9.70
vertex -13.92 -1.70 20.75
endloop
endfacet
facet normal -0.82 -0.49 0.31
outer loop
vertex -12.29 -7.75 58.25
vertex -15.22 -4.36 55.87
vertex -12.56 -11.44 51.73
endloop
endfacet
facet normal -0.71 0.70 0.04
outer loop
vertex -13.21 15.25 84.88
vertex -12.91 16.08 75.22
vertex -15.84 13.10 74.66
endloop
endfacet
facet normal -0.65 0.70 -0.30
outer loop
vertex -15.84 13.10 74.66
vertex -12.91 16.08 75.22
vertex -14.02 13.14 70.83
endloop
endfacet
facet normal 0.00 0.01 -1.00
outer loop
vertex -4.42 6.78 0.28
vertex -20.05 0.39 0.21
vertex -16.43 8.45 0.29
endloop
endfacet
facet normal -0.90 0.39 0.18
outer loop
vertex -13.14 0.36 31.23
vertex -11.75 4.56 29.17
vertex -16.70 2.03 9.70
endloop
endfacet
facet normal -0.85 0.50 0.15
outer loop
vertex -11.75 4.56 29.17
vertex -14.03 4.90 15.33
vertex -16.70 2.03 9.70
endloop
endfacet
facet normal -0.90 -0.43 0.11
outer loop
vertex -11.97 -2.57 29.42
vertex -13.14 0.36 31.23
vertex -16.70 2.03 9.70
endloop
endfacet
facet normal 0.00 0.00 -1.00
outer loop
vertex -20.05 0.39 0.21
vertex -4.42 6.78 0.28
vertex -19.07 -9.21 0.19
endloop
endfacet
facet normal -0.80 -0.57 0.19
outer loop
vertex -16.08 -2.33 9.99
vertex -12.89 -2.83 21.72
vertex -13.92 -1.70 20.75
endloop
endfacet
facet normal -0.82 -0.48 0.33
outer loop
vertex -12.29 -7.75 58.25
vertex -14.70 -2.97 59.17
vertex -15.22 -4.36 55.87
endloop
endfacet
facet normal -0.65 -0.59 -0.48
outer loop
vertex -13.37 -8.49 66.89
vertex -9.83 -15.05 70.23
vertex -17.70 -8.75 73.10
endloop
endfacet
facet normal -0.74 0.31 0.60
outer loop
vertex -14.36 6.90 92.53
vertex -15.12 8.50 90.79
vertex -16.37 3.81 91.66
endloop
endfacet
facet normal -0.83 0.30 -0.47
outer loop
vertex -13.73 9.33 37.92
vertex -10.14 8.83 31.24
vertex -16.11 2.47 37.71
endloop
endfacet
facet normal -0.66 -0.63 -0.42
outer loop
vertex -15.72 -12.56 75.72
vertex -17.70 -8.75 73.10
vertex -9.83 -15.05 70.23
endloop
endfacet
facet normal -0.97 -0.12 0.20
outer loop
vertex -16.70 2.03 9.70
vertex -16.08 -2.33 9.99
vertex -13.92 -1.70 20.75
endloop
endfacet
facet normal -0.89 -0.42 0.15
outer loop
vertex -15.22 -4.36 55.87
vertex -16.89 -2.78 50.33
vertex -12.56 -11.44 51.73
endloop
endfacet
facet normal -0.89 -0.41 0.21
outer loop
vertex -12.56 -11.44 51.73
vertex -16.89 -2.78 50.33
vertex -16.37 -5.98 46.30
endloop
endfacet
facet normal -0.76 -0.64 -0.11
outer loop
vertex -12.56 -11.44 51.73
vertex -16.37 -5.98 46.30
vertex -13.23 -7.86 35.98
endloop
endfacet
facet normal -0.69 0.72 0.03
outer loop
vertex -13.21 15.25 84.88
vertex -15.84 13.10 74.66
vertex -17.64 11.25 78.33
endloop
endfacet
facet normal -0.79 0.48 -0.37
outer loop
vertex -19.21 6.95 73.84
vertex -15.84 13.10 74.66
vertex -14.02 13.14 70.83
endloop
endfacet
facet normal -0.83 0.37 0.41
outer loop
vertex -15.12 8.50 90.79
vertex -15.33 11.84 87.33
vertex -18.99 2.53 88.43
endloop
endfacet
facet normal -0.79 0.31 0.52
outer loop
vertex -15.12 8.50 90.79
vertex -18.99 2.53 88.43
vertex -16.37 3.81 91.66
endloop
endfacet
facet normal -0.86 0.49 0.16
outer loop
vertex -14.03 4.90 15.33
vertex -14.37 6.39 8.79
vertex -16.70 2.03 9.70
endloop
endfacet
facet normal -0.67 -0.13 -0.73
outer loop
vertex -20.54 -1.47 72.24
vertex -10.45 1.82 62.30
vertex -13.37 -8.49 66.89
endloop
endfacet
facet normal -0.73 -0.31 0.61
outer loop
vertex -11.35 -8.86 93.74
vertex -12.38 -3.37 95.27
vertex -19.06 -1.54 88.25
endloop
endfacet
facet normal -0.76 -0.36 -0.54
outer loop
vertex -20.54 -1.47 72.24
vertex -13.37 -8.49 66.89
vertex -17.70 -8.75 73.10
endloop
endfacet
facet normal -0.75 0.17 -0.64
outer loop
vertex -13.05 11.16 67.84
vertex -10.45 1.82 62.30
vertex -19.21 6.95 73.84
endloop
endfacet
facet normal -0.91 0.34 0.26
outer loop
vertex -17.02 3.99 50.02
vertex -14.50 4.74 57.87
vertex -14.69 9.91 50.51
endloop
endfacet
facet normal 0.09 0.99 0.07
outer loop
vertex -17.53 4.98 58.45
vertex -14.50 4.74 57.87
vertex -18.83 5.38 54.74
endloop
endfacet
facet normal -0.78 0.60 0.16
outer loop
vertex -15.33 11.84 87.33
vertex -13.21 15.25 84.88
vertex -17.64 11.25 78.33
endloop
endfacet
facet normal -0.92 0.37 -0.09
outer loop
vertex -17.02 3.99 50.02
vertex -14.69 9.91 50.51
vertex -13.73 9.33 37.92
endloop
endfacet
facet normal 0.27 0.95 -0.18
outer loop
vertex -18.83 5.38 54.74
vertex -14.50 4.74 57.87
vertex -17.02 3.99 50.02
endloop
endfacet
facet normal 0.07 0.74 0.67
outer loop
vertex -17.55 3.97 59.55
vertex -15.24 3.84 59.44
vertex -17.53 4.98 58.45
endloop
endfacet
facet normal -0.94 0.33 -0.11
outer loop
vertex -17.02 3.99 50.02
vertex -13.73 9.33 37.92
vertex -16.11 2.47 37.71
endloop
endfacet
facet normal -0.72 0.13 -0.68
outer loop
vertex -20.54 -1.47 72.24
vertex -19.29 4.03 72.02
vertex -10.45 1.82 62.30
endloop
endfacet
facet normal -0.62 0.43 -0.66
outer loop
vertex -19.21 6.95 73.84
vertex -10.45 1.82 62.30
vertex -19.29 4.03 72.02
endloop
endfacet
facet normal 0.03 0.96 -0.27
outer loop
vertex -18.83 5.38 54.74
vertex -17.02 3.99 50.02
vertex -18.73 4.45 51.46
endloop
endfacet
facet normal -0.97 0.21 -0.10
outer loop
vertex -16.11 2.47 37.71
vertex -17.34 0.41 45.58
vertex -17.02 3.99 50.02
endloop
endfacet
facet normal -0.95 -0.23 -0.21
outer loop
vertex -17.34 0.41 45.58
vertex -16.11 2.47 37.71
vertex -13.23 -7.86 35.98
endloop
endfacet
facet normal -0.95 -0.26 -0.19
outer loop
vertex -17.20 -1.49 47.50
vertex -17.34 0.41 45.58
vertex -13.23 -7.86 35.98
endloop
endfacet
facet normal -0.73 -0.02 0.69
outer loop
vertex -19.06 -1.54 88.25
vertex -12.38 -3.37 95.27
vertex -18.99 2.53 88.43
endloop
endfacet
facet normal -0.96 -0.11 -0.27
outer loop
vertex -17.20 -1.49 47.50
vertex -13.23 -7.86 35.98
vertex -16.37 -5.98 46.30
endloop
endfacet
facet normal -0.98 -0.19 0.02
outer loop
vertex -16.89 -2.78 50.33
vertex -17.20 -1.49 47.50
vertex -16.37 -5.98 46.30
endloop
endfacet
facet normal -0.77 -0.64 0.01
outer loop
vertex -15.80 -11.01 86.17
vertex -19.23 -7.00 77.87
vertex -12.79 -14.66 84.76
endloop
endfacet
facet normal -0.81 -0.57 0.13
outer loop
vertex -12.79 -14.66 84.76
vertex -19.23 -7.00 77.87
vertex -15.72 -12.56 75.72
endloop
endfacet
facet normal -0.01 0.00 -1.00
outer loop
vertex -19.07 -9.21 0.19
vertex -9.38 -13.35 0.12
vertex -17.09 -11.83 0.17
endloop
endfacet
facet normal -0.77 0.62 0.16
outer loop
vertex -18.88 8.29 83.81
vertex -15.33 11.84 87.33
vertex -17.64 11.25 78.33
endloop
endfacet
facet normal -0.64 0.75 0.15
outer loop
vertex -18.00 7.02 0.73
vertex -14.73 9.02 4.55
vertex -16.43 8.45 0.29
endloop
endfacet
facet normal -0.88 -0.48 -0.04
outer loop
vertex -15.72 -12.56 75.72
vertex -19.21 -6.14 75.07
vertex -17.70 -8.75 73.10
endloop
endfacet
facet normal -0.85 0.49 -0.17
outer loop
vertex -17.64 11.25 78.33
vertex -15.84 13.10 74.66
vertex -19.21 6.95 73.84
endloop
endfacet
facet normal -0.66 0.73 0.18
outer loop
vertex -17.30 6.34 6.02
vertex -14.73 9.02 4.55
vertex -18.00 7.02 0.73
endloop
endfacet
facet normal 0.13 0.99 0.02
outer loop
vertex -19.35 3.82 29.10
vertex -17.26 3.52 30.88
vertex -16.83 3.51 28.37
endloop
endfacet
facet normal -0.10 0.96 0.28
outer loop
vertex -18.71 3.17 31.60
vertex -17.26 3.52 30.88
vertex -19.35 3.82 29.10
endloop
endfacet
facet normal 0.90 0.31 -0.32
outer loop
vertex -19.66 3.89 42.46
vertex -17.02 3.99 50.02
vertex -17.34 0.41 45.58
endloop
endfacet
facet normal -0.56 0.08 -0.82
outer loop
vertex -16.83 3.51 28.37
vertex -16.22 -2.44 27.38
vertex -18.78 -0.21 29.33
endloop
endfacet
facet normal -0.65 -0.39 0.65
outer loop
vertex -16.78 -10.65 6.36
vertex -15.10 -8.08 9.59
vertex -19.13 -6.49 6.49
endloop
endfacet
facet normal -0.87 0.49 0.06
outer loop
vertex -18.88 8.29 83.81
vertex -17.64 11.25 78.33
vertex -18.98 8.87 78.06
endloop
endfacet
facet normal -0.81 0.37 0.44
outer loop
vertex -18.99 2.53 88.43
vertex -15.33 11.84 87.33
vertex -18.88 8.29 83.81
endloop
endfacet
facet normal -0.95 0.28 0.16
outer loop
vertex -17.30 6.34 6.02
vertex -18.00 7.02 0.73
vertex -20.05 0.39 0.21
endloop
endfacet
facet normal -0.43 0.20 -0.88
outer loop
vertex -18.00 7.02 0.73
vertex -16.43 8.45 0.29
vertex -20.05 0.39 0.21
endloop
endfacet
facet normal -0.29 -0.10 -0.95
outer loop
vertex -19.35 3.82 29.10
vertex -16.83 3.51 28.37
vertex -18.78 -0.21 29.33
endloop
endfacet
facet normal -0.84 -0.15 -0.52
outer loop
vertex -19.35 3.82 29.10
vertex -18.78 -0.21 29.33
vertex -19.28 1.12 29.76
endloop
endfacet
facet normal -0.99 0.12 0.10
outer loop
vertex -18.61 -0.12 30.83
vertex -18.48 0.70 31.08
vertex -18.78 -0.21 29.33
endloop
endfacet
facet normal -0.83 -0.43 0.36
outer loop
vertex -18.48 0.70 31.08
vertex -19.28 1.12 29.76
vertex -18.78 -0.21 29.33
endloop
endfacet
facet normal -0.50 0.87 0.00
outer loop
vertex -18.61 -0.12 30.83
vertex -18.78 -0.21 29.33
vertex -19.53 -0.65 29.62
endloop
endfacet
facet normal -0.46 0.23 -0.86
outer loop
vertex -19.53 -0.65 29.62
vertex -18.78 -0.21 29.33
vertex -16.22 -2.44 27.38
endloop
endfacet
facet normal -0.91 -0.38 -0.20
outer loop
vertex -19.21 -6.14 75.07
vertex -20.54 -1.47 72.24
vertex -17.70 -8.75 73.10
endloop
endfacet
facet normal -0.84 -0.48 0.26
outer loop
vertex -16.78 -10.65 6.36
vertex -19.13 -6.49 6.49
vertex -18.27 -10.94 1.02
endloop
endfacet
facet normal -0.92 -0.36 0.15
outer loop
vertex -18.27 -10.94 1.02
vertex -19.13 -6.49 6.49
vertex -19.07 -9.21 0.19
endloop
endfacet
facet normal -0.85 0.50 -0.18
outer loop
vertex -18.98 8.87 78.06
vertex -17.64 11.25 78.33
vertex -19.21 6.95 73.84
endloop
endfacet
facet normal -0.54 0.79 0.28
outer loop
vertex -17.53 4.98 58.45
vertex -18.83 5.38 54.74
vertex -21.02 3.14 56.84
endloop
endfacet
facet normal 0.84 -0.08 -0.54
outer loop
vertex -19.28 1.12 29.76
vertex -18.48 0.70 31.08
vertex -19.53 -0.65 29.62
endloop
endfacet
facet normal -0.87 -0.47 0.14
outer loop
vertex -15.80 -11.01 86.17
vertex -19.20 -4.59 86.36
vertex -19.23 -7.00 77.87
endloop
endfacet
facet normal 0.27 0.96 0.09
outer loop
vertex -18.88 8.29 83.81
vertex -18.98 8.87 78.06
vertex -20.00 8.70 82.78
endloop
endfacet
facet normal -0.13 0.90 -0.40
outer loop
vertex -18.98 8.87 78.06
vertex -19.21 6.95 73.84
vertex -20.20 9.03 78.80
endloop
endfacet
facet normal -0.79 0.59 -0.19
outer loop
vertex -21.02 3.14 56.84
vertex -18.83 5.38 54.74
vertex -18.73 4.45 51.46
endloop
endfacet
facet normal -0.90 0.43 -0.01
outer loop
vertex -19.35 2.04 6.79
vertex -17.30 6.34 6.02
vertex -20.05 0.39 0.21
endloop
endfacet
facet normal -0.48 0.18 -0.86
outer loop
vertex -19.53 -0.65 29.62
vertex -16.22 -2.44 27.38
vertex -20.34 -2.74 29.64
endloop
endfacet
facet normal -0.80 0.00 0.61
outer loop
vertex -19.13 -6.49 6.49
vertex -16.70 2.03 9.70
vertex -20.19 -1.76 5.11
endloop
endfacet
facet normal 0.17 0.98 0.07
outer loop
vertex -20.00 8.70 82.78
vertex -18.98 8.87 78.06
vertex -20.20 9.03 78.80
endloop
endfacet
facet normal -0.10 0.88 0.47
outer loop
vertex -18.88 8.29 83.81
vertex -20.00 8.70 82.78
vertex -20.02 6.73 86.49
endloop
endfacet
facet normal 0.27 0.96 0.01
outer loop
vertex -18.73 4.45 51.46
vertex -17.02 3.99 50.02
vertex -21.37 5.31 42.77
endloop
endfacet
facet normal 0.23 -0.23 -0.95
outer loop
vertex -20.84 3.52 28.81
vertex -19.35 3.82 29.10
vertex -19.28 1.12 29.76
endloop
endfacet
facet normal -0.98 0.19 0.06
outer loop
vertex -20.19 -1.76 5.11
vertex -19.35 2.04 6.79
vertex -20.05 0.39 0.21
endloop
endfacet
facet normal -0.17 0.00 -0.99
outer loop
vertex -19.29 4.03 72.02
vertex -20.54 -1.47 72.24
vertex -20.58 2.86 72.24
endloop
endfacet
facet normal -0.73 -0.13 0.67
outer loop
vertex -16.70 2.03 9.70
vertex -19.35 2.04 6.79
vertex -20.19 -1.76 5.11
endloop
endfacet
facet normal 0.65 0.04 -0.76
outer loop
vertex -19.20 -0.81 22.66
vertex -19.19 -2.35 22.59
vertex -20.16 -2.53 21.76
endloop
endfacet
facet normal -0.25 0.88 -0.42
outer loop
vertex -20.20 9.03 78.80
vertex -19.21 6.95 73.84
vertex -20.53 6.48 73.62
endloop
endfacet
facet normal 0.95 0.31 -0.04
outer loop
vertex -19.66 3.89 42.46
vertex -20.94 6.69 33.09
vertex -20.74 6.70 37.98
endloop
endfacet
facet normal -0.05 0.53 -0.85
outer loop
vertex -20.53 6.48 73.62
vertex -19.21 6.95 73.84
vertex -19.29 4.03 72.02
endloop
endfacet
facet normal -0.75 0.64 -0.17
outer loop
vertex -21.41 1.72 53.15
vertex -21.02 3.14 56.84
vertex -18.73 4.45 51.46
endloop
endfacet
facet normal -0.99 -0.10 -0.07
outer loop
vertex -20.19 -1.76 5.11
vertex -20.05 0.39 0.21
vertex -19.07 -9.21 0.19
endloop
endfacet
facet normal -0.98 -0.20 0.08
outer loop
vertex -19.13 -6.49 6.49
vertex -20.19 -1.76 5.11
vertex -19.07 -9.21 0.19
endloop
endfacet
facet normal -0.99 0.12 0.06
outer loop
vertex -20.02 6.73 86.49
vertex -20.00 8.70 82.78
vertex -20.20 9.03 78.80
endloop
endfacet
facet normal 0.64 0.71 0.29
outer loop
vertex -21.37 5.31 42.77
vertex -19.66 3.89 42.46
vertex -20.74 6.70 37.98
endloop
endfacet
facet normal -0.44 0.33 -0.84
outer loop
vertex -20.53 6.48 73.62
vertex -19.29 4.03 72.02
vertex -20.58 2.86 72.24
endloop
endfacet
facet normal -0.51 0.76 0.41
outer loop
vertex -21.41 1.72 53.15
vertex -18.73 4.45 51.46
vertex -24.67 6.09 41.03
endloop
endfacet
facet normal 0.74 0.23 -0.63
outer loop
vertex -20.84 3.52 28.81
vertex -19.28 1.12 29.76
vertex -22.25 3.63 27.18
endloop
endfacet
facet normal -0.78 0.05 0.63
outer loop
vertex -20.03 -1.56 58.80
vertex -19.56 3.41 59.03
vertex -21.62 1.41 56.63
endloop
endfacet
facet normal 0.04 0.58 -0.81
outer loop
vertex -21.34 5.38 30.11
vertex -19.35 3.82 29.10
vertex -20.84 3.52 28.81
endloop
endfacet
facet normal 0.21 0.98 0.03
outer loop
vertex -24.67 6.09 41.03
vertex -18.73 4.45 51.46
vertex -21.37 5.31 42.77
endloop
endfacet
facet normal 0.03 1.00 -0.05
outer loop
vertex -22.88 3.81 26.88
vertex -19.29 3.54 23.82
vertex -22.07 3.56 22.34
endloop
endfacet
facet normal -0.94 0.33 -0.03
outer loop
vertex -21.62 1.41 56.63
vertex -21.02 3.14 56.84
vertex -21.41 1.72 53.15
endloop
endfacet
facet normal -0.82 0.22 0.52
outer loop
vertex -19.56 3.41 59.03
vertex -21.02 3.14 56.84
vertex -21.62 1.41 56.63
endloop
endfacet
facet normal -0.80 -0.56 0.23
outer loop
vertex -20.03 -1.56 58.80
vertex -21.54 -0.26 56.64
vertex -19.78 -3.38 55.19
endloop
endfacet
facet normal -0.98 -0.16 0.08
outer loop
vertex -20.20 -7.07 80.73
vertex -20.04 -5.86 85.22
vertex -20.72 -6.12 75.99
endloop
endfacet
facet normal -1.00 0.05 0.04
outer loop
vertex -20.02 6.73 86.49
vertex -20.20 9.03 78.80
vertex -20.53 6.48 73.62
endloop
endfacet
facet normal 0.13 0.99 0.07
outer loop
vertex -19.50 3.46 25.45
vertex -19.29 3.54 23.82
vertex -22.88 3.81 26.88
endloop
endfacet
facet normal -1.00 -0.01 0.06
outer loop
vertex -20.53 6.48 73.62
vertex -20.58 2.86 72.24
vertex -20.54 -1.47 72.24
endloop
endfacet
facet normal -1.00 0.02 0.04
outer loop
vertex -20.17 -2.21 88.21
vertex -20.02 6.73 86.49
vertex -20.72 -6.12 75.99
endloop
endfacet
facet normal -1.00 0.02 0.04
outer loop
vertex -20.72 -6.12 75.99
vertex -20.02 6.73 86.49
vertex -20.53 6.48 73.62
endloop
endfacet
facet normal 0.26 -0.04 -0.96
outer loop
vertex -22.07 3.56 22.34
vertex -19.80 1.66 23.05
vertex -22.19 1.65 22.40
endloop
endfacet
facet normal 0.69 0.07 -0.72
outer loop
vertex -22.25 3.63 27.18
vertex -19.28 1.12 29.76
vertex -22.62 1.50 26.64
endloop
endfacet
facet normal -1.00 0.08 -0.05
outer loop
vertex -21.62 1.41 56.63
vertex -21.41 1.72 53.15
vertex -21.50 0.68 53.23
endloop
endfacet
facet normal -1.00 -0.05 -0.02
outer loop
vertex -21.54 -0.26 56.64
vertex -21.62 1.41 56.63
vertex -21.50 0.68 53.23
endloop
endfacet
facet normal 0.66 -0.26 -0.71
outer loop
vertex -22.55 -0.69 26.86
vertex -19.53 -0.65 29.62
vertex -20.34 -2.74 29.64
endloop
endfacet
facet normal -0.89 -0.40 -0.21
outer loop
vertex -19.78 -3.38 55.19
vertex -21.54 -0.26 56.64
vertex -19.28 -2.69 51.78
endloop
endfacet
facet normal -0.85 -0.50 -0.15
outer loop
vertex -19.28 -2.69 51.78
vertex -21.54 -0.26 56.64
vertex -21.50 0.68 53.23
endloop
endfacet
facet normal -0.09 0.50 -0.86
outer loop
vertex -23.49 -0.32 23.41
vertex -19.20 -0.81 22.66
vertex -20.16 -2.53 21.76
endloop
endfacet
facet normal 0.60 -0.46 -0.65
outer loop
vertex -22.69 -2.60 27.34
vertex -20.34 -2.74 29.64
vertex -22.52 -4.42 28.80
endloop
endfacet
facet normal -0.99 -0.10 0.08
outer loop
vertex -20.04 -5.86 85.22
vertex -20.17 -2.21 88.21
vertex -20.72 -6.12 75.99
endloop
endfacet
facet normal -1.00 0.01 -0.04
outer loop
vertex -20.53 6.48 73.62
vertex -20.54 -1.47 72.24
vertex -20.72 -6.12 75.99
endloop
endfacet
facet normal 0.07 0.96 0.29
outer loop
vertex -21.37 5.31 42.77
vertex -20.74 6.70 37.98
vertex -24.67 6.09 41.03
endloop
endfacet
facet normal 0.41 0.59 -0.69
outer loop
vertex -23.46 5.52 28.98
vertex -21.34 5.38 30.11
vertex -20.84 3.52 28.81
endloop
endfacet
facet normal 0.19 0.96 0.20
outer loop
vertex -22.25 3.63 27.18
vertex -19.50 3.46 25.45
vertex -22.88 3.81 26.88
endloop
endfacet
facet normal 0.53 0.74 -0.42
outer loop
vertex -23.46 5.52 28.98
vertex -20.84 3.52 28.81
vertex -22.25 3.63 27.18
endloop
endfacet
facet normal -0.68 -0.62 0.40
outer loop
vertex -19.28 -2.69 51.78
vertex -21.50 0.68 53.23
vertex -23.86 0.76 49.34
endloop
endfacet
facet normal 0.67 -0.23 -0.70
outer loop
vertex -22.55 -0.69 26.86
vertex -20.34 -2.74 29.64
vertex -22.69 -2.60 27.34
endloop
endfacet
facet normal 0.36 0.72 -0.59
outer loop
vertex -22.34 6.69 31.09
vertex -21.34 5.38 30.11
vertex -23.46 5.52 28.98
endloop
endfacet
facet normal -0.66 0.64 0.41
outer loop
vertex -21.41 1.72 53.15
vertex -24.67 6.09 41.03
vertex -28.52 3.53 38.82
endloop
endfacet
facet normal -0.36 0.00 -0.93
outer loop
vertex -22.07 3.56 22.34
vertex -22.19 1.65 22.40
vertex -23.54 1.62 22.92
endloop
endfacet
facet normal 0.13 0.99 0.07
outer loop
vertex -22.55 -0.69 26.86
vertex -19.20 -0.81 22.66
vertex -23.49 -0.32 23.41
endloop
endfacet
facet normal 0.72 -0.39 -0.57
outer loop
vertex -23.38 -3.50 27.08
vertex -22.69 -2.60 27.34
vertex -22.52 -4.42 28.80
endloop
endfacet
facet normal 0.00 1.00 0.00
outer loop
vertex -20.74 6.70 37.98
vertex -20.94 6.69 33.09
vertex -22.34 6.69 31.09
endloop
endfacet
facet normal 0.48 0.25 -0.84
outer loop
vertex -22.96 5.60 27.37
vertex -22.25 3.63 27.18
vertex -22.88 3.81 26.88
endloop
endfacet
facet normal -0.22 0.35 -0.91
outer loop
vertex -23.49 -0.32 23.41
vertex -20.16 -2.53 21.76
vertex -23.70 -2.14 22.77
endloop
endfacet
facet normal 0.15 0.26 -0.95
outer loop
vertex -25.25 4.91 26.83
vertex -22.96 5.60 27.37
vertex -22.88 3.81 26.88
endloop
endfacet
facet normal -0.02 1.00 -0.06
outer loop
vertex -26.51 3.72 26.38
vertex -22.88 3.81 26.88
vertex -22.07 3.56 22.34
endloop
endfacet
facet normal -0.65 0.65 0.40
outer loop
vertex -21.41 1.72 53.15
vertex -28.52 3.53 38.82
vertex -24.17 1.94 48.37
endloop
endfacet
facet normal -0.85 0.19 0.50
outer loop
vertex -21.41 1.72 53.15
vertex -24.17 1.94 48.37
vertex -23.86 0.76 49.34
endloop
endfacet
facet normal 0.24 -0.09 -0.97
outer loop
vertex -22.62 1.50 26.64
vertex -22.55 -0.69 26.86
vertex -24.93 -0.42 26.24
endloop
endfacet
facet normal 0.09 0.99 0.08
outer loop
vertex -24.93 -0.42 26.24
vertex -22.55 -0.69 26.86
vertex -23.49 -0.32 23.41
endloop
endfacet
facet normal -0.18 -0.94 -0.28
outer loop
vertex -23.70 -2.14 22.77
vertex -20.16 -2.53 21.76
vertex -23.38 -3.50 27.08
endloop
endfacet
facet normal 0.04 1.00 -0.01
outer loop
vertex -25.72 6.88 34.20
vertex -20.74 6.70 37.98
vertex -22.34 6.69 31.09
endloop
endfacet
facet normal -0.64 0.28 -0.72
outer loop
vertex -26.51 3.72 26.38
vertex -22.07 3.56 22.34
vertex -23.54 1.62 22.92
endloop
endfacet
facet normal 0.18 -0.01 -0.98
outer loop
vertex -25.03 1.54 26.19
vertex -22.62 1.50 26.64
vertex -24.93 -0.42 26.24
endloop
endfacet
facet normal -0.79 0.28 -0.54
outer loop
vertex -25.37 -0.95 25.83
vertex -23.49 -0.32 23.41
vertex -23.70 -2.14 22.77
endloop
endfacet
facet normal 0.53 0.59 -0.61
outer loop
vertex -22.34 6.69 31.09
vertex -23.46 5.52 28.98
vertex -25.25 4.91 26.83
endloop
endfacet
facet normal -0.28 0.96 -0.04
outer loop
vertex -25.25 4.91 26.83
vertex -23.46 5.52 28.98
vertex -22.96 5.60 27.37
endloop
endfacet
facet normal 0.13 0.23 -0.96
outer loop
vertex -25.25 4.91 26.83
vertex -22.88 3.81 26.88
vertex -26.51 3.72 26.38
endloop
endfacet
facet normal -0.78 -0.50 -0.37
outer loop
vertex -25.03 1.54 26.19
vertex -26.51 3.72 26.38
vertex -23.54 1.62 22.92
endloop
endfacet
facet normal -0.36 -0.04 -0.93
outer loop
vertex -25.87 0.02 26.59
vertex -25.03 1.54 26.19
vertex -24.93 -0.42 26.24
endloop
endfacet
facet normal -0.61 0.74 -0.29
outer loop
vertex -24.93 -0.42 26.24
vertex -23.49 -0.32 23.41
vertex -25.37 -0.95 25.83
endloop
endfacet
facet normal -0.91 0.09 0.40
outer loop
vertex -24.17 1.94 48.37
vertex -28.70 -1.83 38.84
vertex -23.86 0.76 49.34
endloop
endfacet
facet normal 0.00 0.61 -0.79
outer loop
vertex -25.87 0.02 26.59
vertex -24.93 -0.42 26.24
vertex -25.37 -0.95 25.83
endloop
endfacet
facet normal -0.73 0.40 -0.56
outer loop
vertex -26.05 -1.96 25.98
vertex -25.37 -0.95 25.83
vertex -23.70 -2.14 22.77
endloop
endfacet
facet normal -0.91 0.03 0.42
outer loop
vertex -24.17 1.94 48.37
vertex -28.52 3.53 38.82
vertex -28.70 -1.83 38.84
endloop
endfacet
facet normal -0.27 -0.10 -0.96
outer loop
vertex -26.51 3.72 26.38
vertex -25.03 1.54 26.19
vertex -25.87 0.02 26.59
endloop
endfacet
facet normal -0.61 -0.66 0.44
outer loop
vertex -23.86 0.76 49.34
vertex -28.70 -1.83 38.84
vertex -23.72 -3.30 43.51
endloop
endfacet
facet normal -0.59 0.29 -0.75
outer loop
vertex -25.87 0.02 26.59
vertex -25.37 -0.95 25.83
vertex -26.05 -1.96 25.98
endloop
endfacet
facet normal -0.40 -0.73 -0.55
outer loop
vertex -27.39 -2.41 28.54
vertex -23.38 -3.50 27.08
vertex -25.37 -4.24 29.49
endloop
endfacet
facet normal -0.38 0.80 -0.47
outer loop
vertex -28.90 3.82 31.60
vertex -25.72 6.88 34.20
vertex -22.34 6.69 31.09
endloop
endfacet
facet normal -0.52 0.80 -0.30
outer loop
vertex -28.90 3.82 31.60
vertex -28.13 5.02 33.46
vertex -25.72 6.88 34.20
endloop
endfacet
facet normal -0.63 0.75 0.18
outer loop
vertex -24.67 6.09 41.03
vertex -25.72 6.88 34.20
vertex -28.13 5.02 33.46
endloop
endfacet
facet normal -0.40 0.91 -0.10
outer loop
vertex -22.34 6.69 31.09
vertex -25.25 4.91 26.83
vertex -28.90 3.82 31.60
endloop
endfacet
facet normal -0.67 -0.16 -0.72
outer loop
vertex -26.51 3.72 26.38
vertex -25.87 0.02 26.59
vertex -27.39 -2.41 28.54
endloop
endfacet
facet normal -0.88 0.21 -0.43
outer loop
vertex -27.39 -2.41 28.54
vertex -25.87 0.02 26.59
vertex -26.05 -1.96 25.98
endloop
endfacet
facet normal -0.70 -0.33 0.64
outer loop
vertex -25.82 -4.07 40.81
vertex -23.72 -3.30 43.51
vertex -28.70 -1.83 38.84
endloop
endfacet
facet normal -0.60 0.75 -0.29
outer loop
vertex -28.90 3.82 31.60
vertex -25.25 4.91 26.83
vertex -26.51 3.72 26.38
endloop
endfacet
facet normal -0.59 -0.77 -0.24
outer loop
vertex -28.69 -2.83 33.06
vertex -27.39 -2.41 28.54
vertex -25.37 -4.24 29.49
endloop
endfacet
facet normal -0.88 0.47 0.06
outer loop
vertex -28.52 3.53 38.82
vertex -28.13 5.02 33.46
vertex -28.90 3.82 31.60
endloop
endfacet
facet normal -0.96 0.04 -0.27
outer loop
vertex -28.69 -2.83 33.06
vertex -26.51 3.72 26.38
vertex -27.39 -2.41 28.54
endloop
endfacet
facet normal -0.90 -0.12 -0.41
outer loop
vertex -28.69 -2.83 33.06
vertex -28.90 3.82 31.60
vertex -26.51 3.72 26.38
endloop
endfacet
facet normal -1.00 -0.02 0.05
outer loop
vertex -28.52 3.53 38.82
vertex -28.90 3.82 31.60
vertex -28.69 -2.83 33.06
endloop
endfacet
facet normal -1.00 0.03 -0.01
outer loop
vertex -28.70 -1.83 38.84
vertex -28.52 3.53 38.82
vertex -28.69 -2.83 33.06
endloop
endfacet
endsolid threews_avatar
想要自己的模型吗?npx readme-3d your-model.glb 可将任何 GLB 转换为可直接粘贴的 Markdown 块。了解其工作原理 →
$THREE
$THREE 是 three.ws 生态系统的原生代币,也是该平台唯一的代币。
| 代币 | $THREE |
| 合约地址(CA) | FeMbDoX7R1Psc4GEcvJdsbNbZA3bfztcyDCatJVJpump |
| 网络 | Solana |
| 交易 | pump.fun |
| 区块链浏览器 | Solscan |
| 产品内入口 | /pulse(实时平台经济) · /launches(发布目录) |
交易前请务必核实上方的合约地址。
$THREE是唯一与 three.ws 相关的代币。
目录
- three.ws 是什么?
- 主要功能
- 截图
- Forge — 文本和图像转 3D
- 平台页面
- 快速开始
- 示例
- 教程
- 架构
- 技术栈
- 项目结构
- Agent 系统
- 动画系统
- Web 组件和嵌入
- 小组件系统
- 嵌入式编辑器
- 姿势工作室
- Avatar 配件和 Coin Launchpad
- Launchpad
- 俱乐部
- 漫游和多人游戏
- Coin 社区
- Coin 大战和实时活动
- 城市
- 好友、在线状态和社交
- 游戏内经济
- 语音实验室和动作捕捉工作室
- 对话模式和口型同步
- 演示中心
- 技能库
- 开发者 SDK
- API 参考
- 身份验证和 OAuth 2.1
- MCP 服务
- Brain 代理和大模型路由
- Claude Code 集成
- 在 Claude Code 中安装
- 云市场
- 生态目录
- IBM watsonx 和 Granite
- x402 支付
- A2A — Agent-to-Agent 协议
- 链上身份(ERC-8004 + Metaplex Core)
- Pump.fun 集成
- WASM 个性化地址生成器
- Solana Mobile(Seeker)
- 愿景
- 路线图
- 自拍重建流程(阶段 1)
- 语音和角色中心(阶段 2)
- Livepeer 推理网络(阶段 4)
- 新闻 CMS 和联合发布
- 安全加固
- 数据库架构
- 构建和部署
- 环境变量
- 测试
- 常见问题和故障排除
- 社区
- 贡献
- 贡献者
- 许可证
什么是 three.ws?
three.ws 是一个用于创建、部署和嵌入 3D AI Agent 的全栈系统。它将 WebGL 模型查看器、由大模型驱动的 Agent 运行时、链上身份合约和可分发的 Web 组件整合为一个统一平台。
它的核心功能有五项:
-
生成:通过文本提示词、最多 6 张照片或一张草图,生成可下载的纹理 GLB,使用 Forge。免费草稿版无需账号;同一流程还支持自动绑定骨骼、重新设计风格和重新贴图。
-
渲染 — 在 WebGL 2.0 中加载并验证 glTF 2.0 / GLB 模型,无需任何服务器端处理。将文件拖入浏览器即可立即渲染,并完整支持 Draco、KTX2 和 Meshopt 解压。
-
赋予形体 — 为任意化身配备一个大模型大脑。Agent 会聆听用户、借助 Claude 思考、执行工具(动画、手势、记忆操作、技能调用),并通过实时混合 3D 模型上的形态目标来表达情绪。
-
注册 — 可选择在链上铸造 Agent:铸造为任意 EVM 链上的 ERC-8004 代币,或 Solana 上的 Metaplex Core NFT。无论采用哪种方式,Agent 都能获得稳定的链上身份、钱包地址、签名的操作历史,以及无法伪造的声誉评分。
-
嵌入 — 将 Agent 作为
<agent-3d>Web 组件分发,任何人都可以将其放入网页;也可以选择五种专用小组件类型之一(转台、动画图库、会说话的 Agent、身份卡、热点导览),并内置 Open Graph 和 oEmbed 支持。
后端由一组无服务器风格的处理程序组成(位于 api/),生产环境中由单个 Google Cloud Run 容器 (server/index.mjs) 提供服务,元数据存储在 Neon Postgres 中,模型存储在 Cloudflare R2 中,速率限制由 Upstash Redis 提供支持。它还提供完整的 OAuth 2.1 授权服务和 MCP(模型上下文协议)端点,供外部 AI 系统以编程方式驱动化身。
three.ws 已可用于生产环境,并通过 Google Cloud Run 在线提供 three.ws:GET https://three.ws/api/version 会返回网站当前运行的准确提交版本。整个技术栈(查看器、Agent 运行时、合约、后端和 Web 组件)都已根据 Apache License 2.0 在此仓库中开源:你可以派生仓库、自行托管,并将其用于商业项目。
主要功能
Companion(亲自送达的通知)
- three.ws/companion:连接你自己的 Telegram 机器人、日历发布的私有 iCal 链接、通过应用专用密码访问的 IMAP 收件箱,或者只提供一个令牌,让你的手机、Mac、构建脚本或 AI Agent 向其发送 POST 请求
- 每条消息都会获得 0 至 100 的评分(例如,已保存联系人向你提问、一次性验证码、十分钟后开始的会议、付款失败);达到你设定标准的消息会被大声读出,其余消息会连同未播报的原因一起保存在信息流中
- 为联系人设置化身和声音,他们发来的消息就会以对应的形象出现
- 可通过网站、手机推送,以及桌面上的 companion app 联系你;这个角色会在你的屏幕上行走
- 开发者:
@three-ws/companion提供客户端、服务器运行的同款分流规则(在本地为自己的邮件评分)、即插即用的 3D 舞台、CLI 和 MCP 服务,让 Agent 可以当面打断人类
文本 → 3D 生成(Forge)
- 在 three.ws/forge 进行文本生成 3D——用一句话描述物体,即可下载带纹理的 GLB
- 在同一个创作器中支持图像→3D(1 至 6 张照片)和草图→3D
- 提供多种生成引擎,并实时检查运行状况:自托管通道,以及自带密钥的 Meshy 和 Tripo(密钥保留在浏览器中)
- 在 three.ws/create/prompt 进行文本生成虚拟形象——描述即可生成可绑定骨骼、可制作动画的 3D 虚拟形象
- 生成的模型可直接用于 Scene Studio、嵌入式内容、虚拟世界和链上部署
3D 查看器
- 通过 three.js r184 实现 WebGL 2.0 渲染
- 支持 glTF 2.0 和 GLB,以及 Draco 几何体压缩、KTX2 纹理压缩和 Meshopt 网格优化
- 遵循 Khronos 规范验证 glTF,并报告错误所在行
- 支持 HDR 环境贴图、PBR 材质、蒙皮网格动画、变形目标和嵌入式摄像机
- OrbitControls(平移、缩放、旋转),支持配置自动旋转
- 通过 dat.GUI 实时调整参数(灯光、曝光、变形权重)
Agent 运行时
- 由 Claude(Anthropic API)驱动的大模型核心,采用结构化工具循环架构
- 每轮最多执行 8 次工具迭代,然后返回最终输出
- 内置工具:
wave、lookAt、play_clip、setExpression、speak、remember - 可组合技能系统——从 IPFS、Arweave 或 HTTP 安装技能;每项技能都是独立的软件包,包含描述、工具定义和异步处理程序
- 加权情绪混合(庆祝、关切、好奇、共情、耐心)由协议事件驱动,而非有限状态机
- 开箱即用的 Web Speech API,用于 STT/TTS;当清单将
voice.stt.provider设为"whisper"时,使用设备端语音转文字(英文使用 Moonshine,99 种语言使用 Whisper,通过 transformers.js 在浏览器中运行,并以 NVIDIA Riva 通道作为备用),因此在 Firefox 和 Safari 中也能进行听写;集成 ElevenLabs,提供适用于生产环境的高品质语音 - 对话模式支持音频驱动的 ARKit-52 口型同步——实时分析 TTS 音频,并驱动虚拟形象上的 52 个标准混合形状
- 为未认证访客提供 Groq 驱动的匿名聊天;当 Agent 有付费作者时启用所有者卡片门控
x402 付款与 Bazaar
- 在 Base、BSC 和 Solana 上提供原生 x402 付费端点——Agent 之间使用 USDC 付款,以调用 API、下载资源和支付技能版税
- Base 主网上使用 Coinbase CDP 付款协调器;BSC 上使用直接方案付款
- 每个由 CDP 结算的端点都提供 Permit2 代付 Gas 的同类端点(买家签名,中继方支付 Gas)
- 按名称付款——
/api/x402/pay-by-name可将@username、*.sol(含子域名)或原始 base58 解析为收款方,并为付款人的钱包构建未签名的 USDC 转账。每个由命名 Agent 生成的 402 清单都会在钱包旁公布recipient_name,方便付款人在签名前核实易读的名称 /dashboard/x402提供 SKU 目录和 Stripe 风格的结账流程;以及收据账本- 支持订阅、幂等令牌、报价收据、付费资源下载,以及 Bazaar 列表/搜索 API
- 为需要身份验证的付费端点提供 SIWX(使用 X 链登录)服务器
- 已列入 x402scan 和 MCP Registry
SNS / *.threews.sol 子域名
/threews/claim允许任何已登录用户通过单笔原子 Solana 交易铸造[username].threews.sol——createSubdomain→ URL 记录 → 将子域名转移给用户的钱包,Gas 由 three.ws 承担- Brave Browser 会通过 SNS URL 记录将该子域名直接解析到用户的
/u/[username]展示页 - Agent 可通过
/api/agents/:id/sns绑定.sol名称(已有名称或新注册名称);绑定后,所有公开页面——Agent 页面、x402 清单、MCP 列表和市场卡片——都会显示该名称,而非原始钱包地址
A2A — Agent 对 Agent 协议
- A2A 客户端 + 服务端、MCP 桥接、DID 解析、支出账本、收据存储
- Agent 通过其委托签名者钱包和 EIP-7710 权限自主进行交易
身份与链上功能
- ERC-8004 智能合约(IdentityRegistry、ReputationRegistry、ValidationRegistry)可部署到任何 EVM 链上——另有 Solana 上无需程序的 Metaplex Core 类似方案(资产公钥 = Agent ID,声誉与验证证明由 SPL Memo 锚定)
- 每个 Agent 都是一个 ERC-721 代币,具有稳定的
agentId、所有者钱包、委托签名者(EIP-712)和固定到 IPFS 的清单 - 已签名的操作日志——每个
speak、remember、skill-done和validate事件都会按需记录在链上,或连同加密签名记录在数据库中 - EIP-7710 委托权限,用于可组合的 Agent 间授权
- 支持 Solana(SIWS 登录、Solana 钱包关联、Metaplex NFT 选项)
嵌入与分发
<agent-3d>自定义元素——可放置在任意位置,无需依赖任何框架- 五种小组件类型:转台、动画画廊、会说话的 Agent、ERC-8004 通行证卡片、热点导览
/studio中的 Widget Studio:选择头像(或粘贴自己的模型 URL)、选择小组件类型、实时调整并复制代码片段;对于 URL 内置类型,无需账户/launchpad中的 Launchpad——在/p/[slug]上托管面向公众的发布页面,适用于代币、Agent 和发行项目- 分享链接时支持 Open Graph 元数据和 oEmbed,以提供丰富的社交预览
- 版本化 CDN 包位于
/agent-3d/x.y.z/agent-3d.js
社交与多人 3D
/communities+/play中的 Coin Communities——每个 Solana 代币都有一个实时 3D 世界;选择同一枚代币即可一同进入,世界中包含同伴头像、聊天、表情动作、体素建造和实时市值屏幕/city中的 City——可自由漫游的 3D 城市场景- 好友、在线状态与私信——账户级社交关系图谱,包含实时在线状态(“在线 · Mainland”)、私信,以及每个账户的实时消息投递中心
/club中的 The Club——多人场所,包含绑定骨骼的舞者、音轨、打赏、排行榜、定时运行的支付任务,以及可感知性能并在帧速率低时自动降级的渲染器/walk中的 Walk——由multiplayer/中的 Colyseus 服务端提供支持的权威多人漫步场景(可部署到 Google Cloud Run)/pose中的 Pose Studio、/voice中的 Voice Lab、/mocap-studio中的 Mocap Studio——制作姿势、绑定语音,并采集/重定向动作以生成可复用片段
后端与集成
- OAuth 2.1 服务端(RFC 6749 + PKCE、RFC 7591 动态注册、RFC 7009 撤销、RFC 7662 内省、RFC 8414 发现)
- 支持作用域和过期时间的开发者 API 密钥
- 基于 HTTP 的 MCP(Model Context Protocol),使用 JSON-RPC 2.0 支持外部 AI 系统调用工具;A2A 桥接将付费工具作为 x402 端点公开
- 集成 Avaturn(照片转头像)、Character Studio(浏览器内构建器)、Avatar Studio(更名后的市场)和 Privy(嵌入式钱包)
- 由 Replicate 提供支持的头像再生成服务提供方,适用于照片转头像工作流
- 原生自拍重建流程(第 1 阶段)+ Livepeer 推理网络(第 4 阶段)接入 Agent 运行时
- 通过定时任务执行 DCA 策略并安排链上订阅
- Solana Mobile(Seeker)MWA 钱包接入 Web 应用 + Solana Mobile dApp Store 发布流程
- 加固的 API 接口:SSRF 防护、CSRF 检查、请求头来源锁定、失败时关闭的定时任务
- 在
/openapi.json生成 OpenAPI 3.1 规范
截图
以下每张图片都是生产环境网站的真实截图。点击任意标题即可打开对应页面。
| 首页 | Forge:文本 → 3D |
|---|---|
![]() | ![]() |
| 位于 /app 的查看器 | 创建 Avatar |
|---|---|
![]() | ![]() |
| Agent 发现 | 市场 |
|---|---|
![]() | ![]() |
| The Club(多人场馆) | Coin 社区 |
|---|---|
![]() | ![]() |
| x402 Bazaar | The Money Pulse |
|---|---|
![]() | ![]() |
下文各部分还会内嵌更多截图:Widget Studio、Embed Editor、Pose Studio、City、Walk、Launchpad、vanity grinder、Demos Hub 和 Chat。
Forge — 文本与图像转 3D
输入一句话,即可生成 3D 模型。Forge 可将文本提示词、1 到 6 张照片或粗略草图转换为带纹理、可下载的 GLB,并在浏览器中完成;提供免费草稿档位,无需账号。
| 输入 | 工作方式 | 通常耗时 |
|---|---|---|
| 文本 | 描述物体——“一只全身的黄铜蒸汽朋克猫头鹰” | ~30–90 s |
| 图像 | 上传 1 到 6 张参考视图(正面/背面/左侧/右侧/顶部/四分之三视角);多视图可避免凭空生成物体背面 | ~30 to 90 s |
| 草图 | 画出并命名物体——TripoSG-scribble 可重建几何形状 | ~30–90 s |
提供三个质量档位——draft(约 12k 个多边形)、standard(约 30k,默认)和 high(约 200k + PBR 纹理)——以及两种生成路径:无需任何密钥即可使用的平台密钥图像流水线(FLUX → TRELLIS),以及使用自己的密钥,通过 Meshy 或 Tripo 生成原生几何体,以获得最整洁的四边形拓扑(密钥会保留在你的浏览器中)。
Forge 不只是生成模型。每个生成的模型都能直接用于平台的其他功能:在 Scene Studio 中打开,将其自动绑定骨骼以成为可动画角色,为其更换风格(voxel / brick / voronoi / low-poly),通过提示词为其重新添加纹理,用 <agent-3d> 嵌入,为其配置 LLM 大脑,或将其部署到链上。three.ws/create/prompt 提供从提示词创建 Avatar 的功能——描述即可变成带绑定骨骼、可动画的 Agent 身体。
REST API
同一引擎只需一次 HTTP 调用即可使用,免费且无需身份验证:
# Submit a text→3D job
curl -X POST https://three.ws/api/forge \
-H 'content-type: application/json' \
-d '{"prompt": "a brass steampunk owl, full body", "tier": "standard"}'
# → { "job_id": "…", … }
# Poll until done
curl 'https://three.ws/api/forge?job=<job_id>'
# → { "status": "done", "glb_url": "https://…/model.glb", … }
图像转 3D 使用相同端点,只需将提示词替换为 image_urls: ["https://…/front.png", …](1 到 6 个视图)。GET /api/forge?catalog 可返回实时的档位/后端/费用矩阵。
来自 Claude、Cursor 或任意 MCP 客户端
3D Studio MCP 服务位于 https://three.ws/api/mcp-3d,通过 40 个工具(text_to_3d、image_to_3d、auto_rig_model、apply_animation、stylize_model、retexture_model、segment_model 等)提供完整工作流,让 AI 助手能够在对话中生成、绑定骨骼并为模型添加动画,还能将其渲染为内嵌交互式作品。请参阅 docs/mcp-3d-studio.md。
面向自主 Agent 的按次付费(x402)
POST /api/x402/forge 是付费版本:Agent 无需 API 密钥或账户,即可在 Solana 主网上使用 USDC 按次付费生成。草稿版 $0.05、标准版 $0.15、高质量版 $0.50;轮询免费;重试的付款具有幂等性,绝不会重复扣费。请参阅 docs/api/forge-x402.md。
了解更多
- 教程:将文本提示词转化为 3D 模型 — 约一分钟即可生成首个模型
- 教程:将照片转化为 3D 模型:根据最多 6 张照片重建真实物体
- 3D Studio MCP 服务 — 在 Claude 或 Cursor 中生成
- 付费生成 API(x402) — 自主 Agent 对 Agent 生成
平台页面
所有面向用户的路由一览。 STRUCTURE.md 将每个产品界面映射到其实现目录,而 data/pages.json 是生成所有公开路由的注册表(站点地图、llms.txt、features.json、更新日志)。
| Section | Key URLs | What it does |
|---|---|---|
| 首页 | /, /features, /discover | 产品推广、公开 Agent 目录 |
| Forge(文本→3D) | /forge, /create/prompt | 提示词 / 照片 / 草图 → 纹理化 GLB;提示词 → 可绑定骨骼、可动画的虚拟形象 |
| 应用 / 核心 | /app, /create, /first-meet | 3D 查看器、Agent 创建向导、引导流程 |
| 市场 | /marketplace, /marketplace/agents/[id] | 可浏览的 Agent 市场 |
| 聊天 SPA | /chat | 完整的 Svelte AI 聊天应用,包含模型选择器、工具、工件、钱包 |
| 聊天 — 产品推广 | /chat#solutions/*, /chat#business/* | 面向各团队和企业的落地页 |
| 聊天 — 功能 | /chat#features/* | 功能详情页(web-app、mobile-app、ai-design、ai-slides、browser-operator、wide-research、mail、skills) |
| 聊天 — 资源 | /chat#resources/* | 博客、文档、信任中心、更新、使用案例 |
| 身份验证 | /login, /register, /forgot-password, /reset-password | 使用电子邮件和钱包登录 / 注册 |
| Agent(平台) | /agent/[id], /agent/[id]/embed, /agent/[id]/edit | Agent 聊天、无浏览器控件的嵌入式版本、清单编辑器 |
| Agent(链上) | /a/[chain]/[id], /a/sol/[asset] | ERC-8004 和 Metaplex Core 身份凭证 |
| 个人资料 | /profile, /u/[username], /avatars/[id] | 用户和虚拟形象公开页面 — 当 [username].threews.sol 已被认领时,显示 SNS 徽章和按名称付款弹窗 |
| SNS 子域名 | /threews/claim | 铸造 [label].threews.sol,将 URL 记录设为你的展示页,转让所有权 — 单笔交易,平台支付 |
| 控制面板 | /dashboard, /dashboard/actions, /dashboard/wallets, /dashboard/usage, /dashboard/x402 | 账户管理、设置和 x402 收据 / 收款 |
| 工作室 / 工具 | /studio, /avatar-studio, /pose, /gestures, /choreograph, /voice, /mocap-studio, /hydrate, /validation, /strategy-lab | 小组件工作室(所见即所得嵌入式构建器)、虚拟形象工作室、姿势创作、手势词汇表和覆盖项构建器、动作编排器、语音实验室、动作捕捉工作室、链上导入、glTF 验证器、DCA |
| 小组件 | /widgets, /w/[id] | 小组件库和公开小组件页面(OG + oEmbed) |
| Launchpad | /launchpad, /p/[slug] | Launchpad Studio 和托管式发布页面(代币、Agent、发售活动) |
| 俱乐部 | /club | 多人 3D 场馆 — 打赏、排行榜、音轨、兼顾性能的渲染器 |
| 漫游 | /walk | 权威式多人漫游场景(Fly.io 上的 Colyseus) |
| 代币社区 | /communities, /communities/[mint], /worlds, /play, /crews | 每个 Solana 代币对应一个实时 3D 世界:大厅、代币资料、共享代币键控世界和团队总部 |
| 城市 | /city | 可自由漫游的 3D 城市场景 |
| Bazaar(x402) | /x402, /x402/studio | 付费 API 市场和上架工作室 |
| 工件 | /artifact, /artifact/snippet, /artifact-example | Claude 工件查看器 |
| Solana / DeFi | /pumpfun, /pump-visualizer, /vanity-wallet | pump.fun 启动器、实时代币可视化工具、WASM 个性化地址生成器 |
| 移动端(Seeker) | Solana Mobile dApp Store | 集成到 Web 应用的钱包 MWA + Seeker 发布流程 |
| 新闻 / 博客 | /news | 新闻动态,通过 RSS 向外同步(自动导入 HackerNoon) |
| 声誉 | /reputation, /monitor | 声誉注册表、集群运维室控制面板 |
| 实验项目 | /rider, /holo | A-Frame WebVR 音乐可视化、程序化全息贴纸 |
| 集成 | /cz, /lobehub/iframe | CZ 演示、LobeHub 插件 |
| IBM / Granite | /galaxy, /ibm/x402-demo, /ibm/hello | watsonx.ai 上的 Granite:语义 Agent 星系、按次付费的 Granite 演示、Hello World 嵌入式版本 |
| 文档 | /docs, /docs/widgets | 开发者文档 |
| Awesome 列表 | /awesome | Awesome 3D Agents:精选且已检查链接的工具列表,帮助 AI 拥有实体身体 |
| 法律 | /legal/privacy, /legal/tos | 隐私政策和服务条款 |
快速入门
前提条件
- Node.js 24+(项目在
package.json中固定使用"engines.node": "24.x";较早的主版本未经测试) - npm 10+
- Neon Postgres 数据库
- Cloudflare R2 存储桶
- Anthropic API 密钥
安装与设置
- 克隆仓库:
git clone https://github.com/nirholas/three.ws.git cd three.ws - 安装依赖:
npm install - 设置环境变量:
将
.env.example文件复制为.env.local,并填写所需值。更多详情请参阅环境变量部分。cp .env.example .env.local - 初始化数据库:
此架构具有幂等性。对你的 Postgres 实例运行以下命令以创建所有表:
psql $DATABASE_URL < api/_lib/schema.sql - 运行开发服务器:
应用将在npm run devhttp://localhost:3000上运行。
示例
可直接复制粘贴的常见用例代码片段。替换为你自己的 GLB URL 即可。
无需克隆任何内容即可运行: three.ws/examples 会渲染相同的代码片段,每个片段旁都有一个 运行 按钮。代码会在页面上的沙盒框架中,使用生产 CDN 程序包执行,因此你看到的运行效果与你复制的内容完全一致。该页面还会列出
examples/中提供的所有示例,这些示例通过扫描仓库生成,因此不会过时。
1. 最简查看器(无 AI)
尽可能简单的设置——一个 script 标签、一个元素,无需构建步骤。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>3D Viewer</title>
<style>
body {
margin: 0;
background: #0a0a0a;
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
}
agent-3d {
width: 400px;
height: 560px;
display: block;
}
</style>
</head>
<body>
<script type="module" src="https://three.ws/agent-3d/1.5.2/agent-3d.js"></script>
<agent-3d body="https://three.ws/avatars/default.glb"></agent-3d>
</body>
</html>
拖动即可旋转,滚动即可缩放,并支持完整的 PBR 渲染——无需 API 密钥或账户。将 body= 替换为任意可公开访问的 .glb URL。
2. 带内联指令的对话 Agent
添加 brain= 和 instructions=,将查看器变为对话式 Agent。
<script type="module" src="https://three.ws/agent-3d/1.5.2/agent-3d.js"></script>
<agent-3d
body="https://three.ws/avatars/default.glb"
brain="claude-sonnet-4-6"
name="Aria"
instructions="You are Aria, a friendly AI guide. Be warm, concise, and occasionally playful.
When someone greets you, wave at them. Keep replies to 2–3 sentences."
mode="inline"
width="400px"
height="560px"
></agent-3d>
设置 brain 后,聊天输入框和麦克风按钮会自动出现。无需构建 UI。
3. 浮动气泡(支持组件样式)
将 Agent 固定在页面角落,让它在用户滚动时始终显示。
<script type="module" src="https://three.ws/agent-3d/1.5.2/agent-3d.js"></script>
<agent-3d
body="https://three.ws/avatars/default.glb"
brain="claude-sonnet-4-6"
instructions="You are a helpful product assistant. Answer questions about our features."
mode="floating"
position="bottom-right"
width="320px"
height="420px"
></agent-3d>
position 接受 bottom-right、bottom-left、top-right 或 top-left。
4. 按 ID 加载已注册的 Agent
如果你已在平台上注册 Agent,可完全通过其清单加载,无需内联属性。
<agent-3d agent-id="a_abc123def456"></agent-3d>
<agent-3d agent-id="42" chain-id="8453"></agent-3d>
该元素会自动获取清单(模型 URL、指令、技能、记忆配置)。
5. 使用 JavaScript API 的自定义聊天 UI
隐藏内置界面,并使用元素的 JS API 接入你自己的输入框。
<script type="module" src="https://three.ws/agent-3d/1.5.2/agent-3d.js"></script>
<agent-3d
id="agent"
body="https://three.ws/avatars/default.glb"
brain="claude-sonnet-4-6"
kiosk
style="width:400px;height:560px;display:block"
></agent-3d>
<input id="msg" type="text" placeholder="Ask something…" />
<button onclick="send()">Send</button>
<script>
const agent = document.getElementById('agent');
const input = document.getElementById('msg');
async function send() {
const text = input.value.trim();
if (!text) return;
input.value = '';
await agent.say(text);
}
input.addEventListener('keydown', (e) => {
if (e.key === 'Enter') send();
});
// Auto-greet on load
agent.addEventListener('agent:ready', () => {
setTimeout(() => agent.say('Hello! How can I help you today?'), 1200);
});
// Listen to replies
agent.addEventListener('brain:message', (e) => {
if (e.detail.role === 'assistant') console.log('Agent:', e.detail.content);
});
</script>
完整 JS API:
| 方法 | 说明 |
|---|---|
agent.say(text) | 发送消息;Agent 会朗读消息并为回复添加动画 |
agent.ask(text) | 与 say() 相同,并以字符串形式返回回复文本 |
agent.wave() | 直接触发挥手动作 |
agent.lookAt(target) | 'camera'、'model' 或 'user' |
agent.play(clipName) | 播放指定名称的动画片段 |
agent.clearConversation() | 重置对话历史 |
agent.expressEmotion(trigger, weight) | 手动注入情绪混合效果 |
关键事件: agent:ready、brain:message、brain:thinking、skill:tool-called、voice:transcript
6. iframe 小组件(适用于 Notion、Substack、Webflow)
直接使用小组件 URL——无需 script 标签。
<iframe
src="https://three.ws/a/8453/42/embed"
width="400"
height="560"
frameborder="0"
allow="microphone"
style="border-radius:16px;"
></iframe>
在 Widget Studio 生成 src URL——选择一个虚拟形象和小组件类型,然后复制代码片段。
7. Agent manifest JSON
如果要定义的不只是一个简短说明,请在 manifest 文件中定义 Agent,并通过 manifest= 引用。
agent.json:
{
"spec": "agent-manifest/0.2",
"name": "Aria",
"description": "A friendly AI guide",
"body": {
"uri": "https://three.ws/avatars/default.glb",
"format": "gltf-binary"
},
"brain": {
"provider": "anthropic",
"model": "claude-sonnet-4-6",
"instructions": "You are Aria, a warm and curious AI guide. Wave when greeted.",
"temperature": 0.8,
"maxTokens": 1024
},
"voice": {
"tts": { "provider": "browser", "rate": 1.05 },
"stt": { "provider": "browser", "language": "en-US" }
},
"memory": { "mode": "local" },
"skills": [{ "uri": "https://three.ws/cdn/skills/wave/" }]
}
<agent-3d manifest="./agent.json" width="400px" height="560px"></agent-3d>
8. 极简复制粘贴小组件
要以最简单的方式嵌入 Agent,请使用这段代码。无需构建工具或导入任何内容,只需将其复制并粘贴到 HTML 中即可。
<div data-agent-id="YOUR_AGENT_ID" style="width: 400px; height: 500px;"></div>
<script type="module" src="https://three.ws/artifact.js"></script>
加载器 (public/artifact.js) 会在页面上每个 [data-agent-id] 元素中挂载一个可旋转的 3D 查看器。你可以在 Agent 的设置页面找到其 ID。这种方式非常适合在 WordPress、Ghost 等平台或任何静态 HTML 网站上快速集成;使用 style 属性调整尺寸。如需可配置的代码片段(聊天模式、环境、尺寸预设),请前往 /studio 使用 Widget Studio。
教程
docs/tutorials/ 中提供了 66 篇循序渐进的指南,每篇都已发布在 three.ws/tutorials。如果你更愿意运行代码而不是阅读,three.ws/examples 可直接在页面上运行每个代码片段。核心学习路径:
| 教程 | 你将构建的内容 | 用时 | 在线查看 |
|---|---|---|---|
| 将文本提示词转换为 3D 模型 | 根据一行描述生成真实、带纹理且可下载的 3D 模型 | 约 5 分钟 | 打开 |
| 将照片转换为 3D 模型 | 根据真实物体的最多 6 张照片重建 GLB | 约 10 分钟 | 打开 |
| 构建你的第一个 Agent | 从零开始,在可分享的页面上创建一个会说话的 3D 角色 | 约 20 分钟 | 打开 |
| 嵌入到你的网站 | 将 Agent 添加到任意页面:纯 HTML、React、Webflow、WordPress | 约 15 分钟 | 打开 |
| 编写自定义技能 | 添加一个 Agent 可调用的新工具(例如,获取实时天气数据) | 约 30 分钟 | 打开 |
| 在链上注册 | 在链上铸造你的 Agent:在 EVM 上使用 ERC-8004,或在 Solana 上使用 Metaplex Core | 约 20 分钟 | 打开 |
| 构建个人 AI 网站 | 创建一个完整的个人网站,并嵌入一个 AI 版本的你自己 | 约 45 分钟 | 打开 |
除核心学习路径外,教程目录还涵盖了本 README 中的所有方面。以下是按目标分类的一些示例:
- 嵌入与集成: 30 秒完成嵌入 · 为你的应用添加 3D 助手 · 构建网站导览助手 · Shopify 购物助手 · JS API 和事件 · 通过页面事件触发
- 虚拟形象与 3D: 自拍生成虚拟形象 · 为你的虚拟形象添加动画 · 构建 3D 场景 · 在 AR 中查看 · 上传自定义 GLB · 语音与口型同步
- Agent 与 AI: 连接 AI 大脑 · Agent 个性 · 创建和编辑记忆 · 多 Agent 协调 · 为你的 Agent 搭建 MCP 服务
- 链上与支付: 认领你的 threews.sol 名称 · 铸造 pump.fun 代币 · 挖掘个性化地址 · x402 服务 SDK · Solana Agent 声誉
常见问题
CORS — 如果你的 GLB 托管在其他域名下,服务器必须发送 Access-Control-Allow-Origin: *。否则,获取请求会被阻止,画布会保持空白。通过平台的存储上传会自动设置此项。
文件大小 — 超过约 50 MB 的模型加载速度较慢。使用 Draco 压缩:
npx gltf-transform draco input.glb output.glb
HTTPS 下的语音 — getUserMedia(麦克风)需要 HTTPS。localhost 不受此限制;任何远程部署都需要 TLS。Vercel 和 Netlify 都会自动提供 TLS。
CSP — 如果你的页面使用严格的内容安全策略,请添加:
script-src 'self' https://three.ws;
对于沙盒化 iframe,请改用 widget 嵌入路径——它会在自己的浏览上下文中运行。
架构
该平台分为四层。所有层都通过单一事件总线(agent-protocol)进行通信,而非直接调用。
┌────────────────────────────────────────────────────────────┐
│ Layer 4: Embed & Distribution │
│ <agent-3d> web component · CDN library · 5 widget types │
│ Widget Studio · oEmbed · Open Graph cards │
└────────────────────────────────────────────────────────────┘
↓ protocol events
┌────────────────────────────────────────────────────────────┐
│ Layer 3: Identity & Persistence │
│ Agent passport · ERC-8004 (EVM) + Metaplex Core (Solana) │
│ Signed action log · Memory store · Cross-chain SIWX │
└────────────────────────────────────────────────────────────┘
↓ protocol events
┌────────────────────────────────────────────────────────────┐
│ Layer 2: Agent Runtime │
│ LLM tool-loop · Built-in tools · Skill registry │
│ Empathy Layer (emotion blending) · TTS/STT │
└────────────────────────────────────────────────────────────┘
↓ protocol events
┌────────────────────────────────────────────────────────────┐
│ Layer 1: Viewer │
│ three.js r184 · glTF / GLB · Draco / KTX2 / Meshopt │
│ Animations · Morph targets · HDR · Validation │
└────────────────────────────────────────────────────────────┘
事件总线解耦了所有组件。虚拟形象的情绪系统会响应 speak 事件,而无需知道运行时的存在。身份模块会记录操作,而无需知道 UI 的存在。这使系统易于测试、可独立嵌入,并且能在多个页面中组合使用。
后端采用无状态的无服务器函数。所有持久状态都存储在 Postgres(Neon)、对象存储(Cloudflare R2)或链上。Cron 作业负责处理定时区块链操作(ERC-8004 爬取、DCA 执行、订阅执行)。
设计文档与规范
上面的架构图展示了整体概览;每个关键部分都有专门的规范,定义其线格式、不变量和扩展点。新贡献者应先浏览即将修改的子系统对应的规范。
| 规范 | 涵盖内容 |
|---|---|
| specs/AGENT_MANIFEST.md | Agent 清单 JSON 架构——body、brain、voice、memory、skills、签名。每个 <agent-3d> 都会读取的约定。 |
| specs/3D_AGENT_CARD.md | 链上通行证卡片布局——字段、签名和渲染规则。 |
| specs/SKILL_SPEC.md | 技能包布局(SKILL.md、tools.json、handlers.js)、信任模式和分发方式。 |
| specs/PERMISSIONS_SPEC.md | EIP-7710 委托权限模型——能力范围、兑换和撤销。 |
| specs/MEMORY_SPEC.md | 记忆文件格式、类型、显著性模型和存储模式。 |
| specs/STAGE_SPEC.md | 场景/舞台配置:相机预设、灯光、环境贴图和热点。 |
| specs/EDITOR_SPEC.md | Widget Studio + Embed Editor 配置界面与持久化结构。 |
| specs/EMBED_SPEC.md | <agent-3d> 元素和无边框 iframe——属性、JS API 和生命周期。 |
| specs/EMBED_HOST_PROTOCOL.md | iframe 与宿主页面之间的 postMessage 线协议(来源锁定、消息类型、RTT)。 |
| specs/CLAUDE_ARTIFACT.md | Claude Artifact 查看器集成——代码片段加载和沙箱边界。 |
| specs/ENS_AGENT_CLAIM.md | 基于 ENS 的 Agent 认领流程,用于建立可验证的所有者 ↔ Agent 绑定。 |
| specs/VALIDATORS.md | 验证者证明规则——签署内容、签署者及证明的读取方式。 |
| specs/SECURITY.md | 威胁模型、信任边界,以及生产部署的加固清单。 |
更详细的架构和操作文档位于 docs/ 下:docs/architecture.md、docs/agent-system.md、docs/3d-asset-pipeline.md、docs/animations.md、docs/web-component.md、docs/api-reference.md、docs/mcp.md、docs/permissions.md、docs/security.md、docs/smart-contracts.md 等。
3D 资产流水线 — FBX、GLB、JSON
网站渲染的每个虚拟形象都是一个 GLB(二进制 glTF 2.0——将身体、骨架和纹理整合在一个文件中);每个共享手势和舞蹈都是一种格式轻量的 clip JSON(序列化的 THREE.AnimationClip——仅包含动作,可在运行时重定向到任意骨架);二者都源自 Mixamo 或 DCC 工具生成的 FBX 源文件。一个 FBX 可以生成两种转换结果——npm run convert:fbx 用于生成完整角色 GLB,npm run build:animations 用于生成可复用的动画库片段——然后通过 npm run optimize:glb 将其优化为适用于 Web 的格式(体积缩小约 90%)。完整说明、格式规范、运行时模块,以及从生成→绑定骨架→制作动画→导出的能力链,详见 docs/3d-asset-pipeline.md。
技术栈
前端
- 主界面:核心应用包括 3D 查看器、Agent 创建和市场,使用原生 JavaScript 模块和 Vite 构建。
- 聊天:聊天界面是一个独立的 Svelte 应用,位于
chat/目录中。 - 3D 渲染:使用 three.js(r184)进行 WebGL 2.0 渲染。
后端(Google Cloud Run)
- 运行时:Node.js —
api/中的无服务器风格处理程序由 Cloud Run(three-ws-api,us-central1)上的一个 Express 容器提供服务(server/index.mjs)。 - 数据库:Neon Postgres(无服务器)
- 存储:使用 Cloudflare R2 存储模型和虚拟形象。
- 速率限制:Upstash Redis。
- 大模型:Agent 的大脑由 Anthropic(Claude)SDK 提供支持。
智能合约
- 语言:Solidity 0.8+
- 框架:使用 Foundry 编译、测试和部署 ERC-8004 合约。
- 标准:ERC-721、EIP-712、EIP-7710。
浏览器支持
查看器面向所有在桌面或现代移动设备上支持 WebGL 2.0 的浏览器。具体支持矩阵如下:
| 浏览器 | 最低版本 | 备注 |
|---|---|---|
| Chrome / Edge(Chromium) | 113+ | 支持完整功能,包括需通过标志启用的 WebGPU 实验功能。推荐用于开发。 |
| Safari(macOS / iOS) | 16.4+ | 支持 WebGL 2.0 和 Web Speech 识别(iOS 16.4 新增了需通过权限提示启用的支持)。语音输入需要 HTTPS。 |
| Firefox | 115+ | 支持所有 KTX2 / Meshopt 解码器。Web Speech 识别是否可用取决于用户区域设置。 |
| Mobile Safari | iOS 16.4+ | 通过 OrbitControls 映射触控控制和陀螺仪。 |
| Android Chrome | 113+ | 支持完整功能;如果有 AR 按钮,则会触发 Scene Viewer 意图。 |
功能与优雅降级
- WebGL 2.0 是必需的;如果不支持,查看器将拒绝启动并显示回退提示。
- WebAssembly 是 Draco / KTX2 / Meshopt 解码器的必需组件。这些解码器由
scripts/copy-three-decoders.mjs在postinstall时复制到public/three/draco/和public/three/basis/(这两个路径均为生成目录并已加入 gitignore,因此只有运行npm install后才会存在),此外还需要node_modules/three/examples/jsm/libs/。 getUserMedia(麦克风) 需要 HTTPS——参见常见问题。不满足时,Agent 将改用文本输入。speechSynthesis会在运行时检测;如果 TTS 不可用,Agent 将改为静默文本回复。- WebGPU 不是必需功能,目前也尚未使用——第 4 阶段将其预留用于客户端推理实验。
项目结构
src/:主应用的核心前端 JavaScript,包括 3D 查看器、Agent 协议、自定义元素和功能模块(club-*.js、walk*.js、pose-*.js、voice/、selfie-*.js)。社交和游戏玩法界面位于game/(Coin Communities:coincommunities*、spin-wheel-ui、cosmetics-visual、avatar-rig)、city/(/city世界)、social/(情绪分析、X 帖子影响力)、community/(代币大厅/城镇),以及friends.js、communities.js、marketplace*.js和token-pay.js。api/:构成后端 API 的无服务器风格处理程序;生产环境中由 Cloud Run 容器(server/index.mjs)提供服务,并采用与vercel.json等效的路由配置。子目录包括x402/、a2a/、club/、pump/、persona/、news/、admin/、agents/、auth/、oauth/、cron/,以及社交/游戏界面play/、token/、three-token/、friends/、social/、community/、marketplace/和mocap/。public/:静态资源和各类子应用(club/、seeker/、news/、persona/、vanity-wallet.html、pumpfun.html)。chat/:用于聊天界面的独立 Svelte 应用。character-studio/:用于在浏览器中创建角色的子项目;也为重新命名后的 Avatar Studio 市场提供服务。rider/:A-Frame WebVR 音乐可视化实验。contracts/:用于链上身份(ERC-8004)和多链支付工厂的 Solidity 智能合约。multiplayer/:用于/walk和/play(WalkRoom)的 Colyseus WebSocket 服务;可部署到 Fly.io。包含权威世界逻辑和唯一事实来源文件——items.js、playerStore.js、game-token.js、play-pass.js、holder-pass.js,以及按账户划分的social-hub.js。sdk/:@three-ws/sdk(AgentKit SDK;旧版头像辅助工具位于sdk/agent-sdk/)。agent-payments-sdk/:EVM Agent 支付 SDK(Base / BSC / 其他 EVM 链)。solana-agent-sdk/:用于与 Solana 区块链交互的 SDK(Metaplex Core 铸造、SIWS、证明)。pump-fun-skills/:与 pump.fun 集成相关的技能。scripts/:用于开发、构建、部署和 pump.fun 启动自动化的 Node.js 脚本。workers/:后台工作程序代码——包括 pump.fun MCP 读取 API 的 Cloudflare Worker 镜像,位于workers/pump-fun-mcp/。docs/:面向公众的开发者文档。docs/internal/:工作文档(PLAN、STATUS、TODO、NEXT、PROGRESS、RELEASE_CHECKLIST、club 场地说明)——不属于已发布的文档内容。tests/:Vitest 单元测试(tests/api/、tests/src/、tests/workers/)和 Playwright 端到端冒烟测试(tests/e2e/)。
Agent 系统
事件总线(Agent Protocol)
src/agent-protocol.js 实现了一个轻量级的 EventTarget 子类,是平台的神经中枢。每个组件——虚拟形象、运行时、身份和 UI——都只通过此总线通信。各层之间没有直接的方法调用。
总线维护一个包含 200 条操作的环形缓冲区,用于调试和重放。嵌入式变体通过 postMessage 向宿主页面公开经过筛选的事件子集。
核心事件类型:
| 事件 | 负载 | 发出者 | 监听者 |
|---|---|---|---|
speak | { text, sentiment: -1..1 } | 运行时、技能 | 虚拟形象(情绪)、身份(日志)、聊天 UI |
think | { thought } | 运行时 | 首页(时间线)、虚拟形象 |
gesture | { name, duration } | 虚拟形象、技能 | 虚拟形象(单次播放片段) |
emote | { trigger, weight: 0..1 } | 虚拟形象 | 虚拟形象(注入情绪) |
look-at | { target: 'user'|'camera'|'center' } | 技能 | 场景控制器 |
perform-skill | { skill, args, animationHint } | 运行时 | 技能注册表 |
skill-done | { skill, result } | 技能 | 虚拟形象、身份 |
skill-error | { skill, error } | 技能 | 虚拟形象、身份 |
remember | { type, content, ... } | 技能、运行时 | 记忆、身份 |
load-start / load-end | { uri, error? } | 查看器 | 虚拟形象(情绪) |
validate | { errors, warnings } | 验证器 | 虚拟形象、身份 |
presence | { state } | 元素 | 首页 UI |
与身份相关的事件(speak、remember、sign、skill-done、validate、load-end)会通过 POST /api/agent-actions 触发并转发,以便持久化记录。
LLM 运行时
src/runtime/index.js 实现了 Runtime 类,为 Agent 提供由 LLM 驱动的“大脑”。
工具循环流程:
- 收到用户消息(文本或 STT 转录文本)
- 组装系统提示词:清单说明 + 回忆的记忆 + 技能描述
- 调用 Claude,并传入对话历史和所有可用工具
- 按顺序分发工具调用——每个内置工具或技能处理程序都会收到一个丰富的上下文对象:
{ viewer, memory, llm, speak, listen, fetch, loadGLB, loadClip, loadJSON, call, stage, agentId; } - 将工具结果作为
tool_result消息追加到对话历史中 - 重复步骤 3–5,直到 Claude 返回时没有工具调用,或达到迭代上限(8 次)
- 最终文本回复可选择通过 TTS 朗读
提供方(src/runtime/providers.js):
AnthropicProvider— 连接 Anthropic API,支持流式传输NullProvider— 用于测试和离线模式的空操作提供方
内置工具(src/runtime/tools.js):
| 工具 | 描述 |
|---|---|
wave | 播放挥手手势动画 |
lookAt | 引导 Agent 注视(用户、摄像头或场景中心) |
play_clip | 播放模型或动画库中的指定动画片段 |
setExpression | 直接设置指定变形目标的权重 |
speak | 通过 TTS 和协议总线发送文本 |
remember | 写入一条记忆(用户、反馈、项目或参考类型) |
技能可以定义其他工具,以覆盖或扩展内置工具。每轮对话开始前,都会从 Agent 清单中加载技能注册表。
共情层
src/agent-avatar.js 实现了共情层——一种持续变化的加权情绪混合,实时驱动虚拟形象的面部变形目标和头部朝向。
情绪并非有限状态机中的状态。每种情绪都是一个浮点数(0..1),每帧按不同速率线性衰减。协议事件会注入峰值:
| 触发条件 | 情绪 | 峰值 |
|---|---|---|
speak(正面情绪) | 庆祝 | +0.7 |
speak(负面情绪) | 担忧 | +0.5 |
skill-error | 担忧 + 共情 | +0.6 / +0.5 |
load-start | 耐心 + 好奇心 | +0.4 / +0.3 |
validate(无错误) | 庆祝 | +0.5 |
validate(有错误) | 担忧 | +0.6 |
衰减半衰期(约值):
- 耐心:~20s — 在长时间操作期间持续存在
- 共情:~13s — 情绪事件发生后仍会持续一段时间
- 担忧:~12s — 持续的忧虑
- 好奇心:~8s — 保持警觉,适度消退
- 庆祝:~6s — 短暂而愉快
混合后的情绪比例会逐帧驱动变形目标的值。例如:
- 庆祝 →
mouthSmile 0.85、mouthOpen 0.2 - 担忧 →
mouthFrown 0.55、browInnerUp 0.6 - 共情 →
eyeSquint 0.4、browInnerUp 0.5
头部倾斜和前倾也由情绪混合驱动——好奇心会让头部倾斜,耐心则会让身体稍微后仰。
这种架构让虚拟形象的反应自然、情绪连贯,无需手动编写动画触发条件。
技能
技能是独立的能力包,可扩展 Agent 的工具集。每个技能都位于自己的目录中:
skills/wave/
├── SKILL.md # Human-readable description and usage instructions
├── tools.json # Tool definitions (name, description, input JSON schema)
└── handlers.js # Async handler functions (default export)
tools.json 示例:
[
{
"name": "wave",
"description": "Plays a waving gesture on the avatar for the specified duration.",
"inputSchema": {
"type": "object",
"properties": {
"duration_ms": { "type": "integer", "minimum": 500, "maximum": 5000 }
}
}
}
]
handlers.js 示例:
export default {
async wave(args, ctx) {
const { viewer, speak } = ctx;
await viewer.playClipByName('wave');
return { ok: true, output: 'Waved!' };
},
};
技能会在运行时从 Agent 清单中加载。SkillRegistry 支持三种信任模式:
any— 从任何来源安装技能(仅用于开发)owned-only— 仅安装 Agent 所有者注册的技能whitelist— 仅安装已批准的技能 URI
技能通过 IPFS、Arweave 或 HTTP 分发。公共技能注册表位于 /public/skills-index.json。
记忆
src/memory/index.js 实现了基于文件的记忆系统(仿照本项目自身的 Claude 记忆系统)。记忆是带有 YAML frontmatter 的 Markdown 文件,按类型组织:
---
type: user
key: user_role
name: User's Role
created: 2024-01-15T10:30:00Z
salience: 0.95
---
User is a game developer interested in character animation.
系统会自动维护 MEMORY.md 索引文件。每轮对话开始时,系统会扫描记忆存储,并将高显著性的条目注入系统提示词;MEMORY.md 索引本身会完整注入,但最多不超过规范规定的 200 行。
存储模式:
local— 存储在浏览器的本地存储中(开发环境默认)remote— 通过/api/agent-memory按 Agent 持久化(仅限所有者)ipfs— 通过 Pinata 或 Web3.Storage 固定到 IPFSencrypted-ipfs— 固定前加密(密钥由用户持有)none— 无状态,会话之间不保留记忆
记忆类型(user、feedback、project、reference)遵循本代码库自身 Claude 指南使用的相同分类体系。
接入自定义记忆后端
若要添加向量存储或情景日志,无需派生 Memory——注册一个后端并按名称选择即可。内置模式保持不变;你的模式只是另一种选项。
import { Memory } from 'https://three.ws/agent-3d/latest/agent-3d.js';
Memory.registerBackend('vector', {
async load({ namespace }) {
const rows = await myVectorStore.fetchAll(namespace);
return { files: Object.fromEntries(rows.map((r) => [r.filename, r.markdown])) };
},
async persist(memory) { // after every write()/note()
await myVectorStore.replace(memory.namespace, [...memory.files]);
await myEpisodicLog.replace(memory.namespace, memory.timeline);
},
async recall(query, memory, { limit = 5 } = {}) { // real semantic search
const m = await myVectorStore.search(memory.namespace, query, limit);
return m.map((x) => ({ file: x.filename, meta: x.meta, body: x.body, score: x.score }));
},
});
<agent-3d src="agent://…" memory="vector"></agent-3d>
只有 load 是必需的;persist 可实现持久化,recall 可实现语义搜索(如果它抛出异常,则会回退到子字符串匹配)。若只替换排序器并保留内置存储,可将 manifest.json → memory.retriever 指向一个技能。完整参考:specs/MEMORY_SPEC.md → 自定义后端。
记忆快照约定
memory.snapshot() 返回一个同步且可安全序列化为 JSON 的 memory/0.1 对象,以便嵌入式小组件在页面重新加载时序列化/反序列化状态;Memory.fromSnapshot(snap, { mode, namespace }) 会将其恢复(如果索引不存在,则重建索引)。
sessionStorage.setItem('agent-mem', JSON.stringify(agent.memory.snapshot()));
// …after reload:
const restored = Memory.fromSnapshot(JSON.parse(sessionStorage.getItem('agent-mem')));
动画系统
虚拟形象运行时内置了基于插槽的动画管理器,将动画片段与骨骼绑定解耦——为一个身体创作的片段可在加载时重定向到任意其他骨骼绑定。
| 模块 | 路径 | 作用 |
|---|---|---|
| 管理器 | src/animation-manager.js | 按插槽(待机、手势、移动)加载、混合和交叉淡化片段 |
| 状态机 | src/animation-state-machine.js | 根据协议事件驱动插槽转换 |
| 待机库 | src/idle-animation.js | 在其他所有动画下方播放的细微呼吸/重心转移循环 |
| 获取器 | npm run fetch-animations | 从 R2 下载规范动画片段库 |
| 构建器 | scripts/build-animations.mjs | 将片段包重新打包为经 Meshopt + Draco 压缩的 GLB |
可以在 Blender 中基于任意骨骼绑定创作新片段,导出为 GLB,再放入动画库——管理器会自动加载它,Agent 运行时也可通过 play_clip 工具调用它。
sitidle 片段作为聊天模式虚拟形象的默认坐姿待机动画提供;gemini-jump 片段则驱动 / 页面上的主角。
Web 组件与嵌入
自定义元素 <agent-3d>(src/element.js)是主要的分发方式。它会在进入视口时延迟启动(IntersectionObserver),因此屏幕外的 Agent 不会在可见之前加载。
基本用法:
<script src="https://three.ws/agent-3d/latest/agent-3d.js"></script>
<agent-3d
body="https://three.ws/avatars/michelle.glb"
brain="https://example.com/manifest.json"
mode="chat"
></agent-3d>
主要属性:
| 属性 | 类型 | 描述 |
|---|---|---|
body | URL | GLB 模型 URL |
brain | URL | Agent 清单 JSON URL |
agent-id | string | 已注册的 Agent ID(自动解析清单) |
mode | view | chat | embed | 交互模式 |
eager | boolean | 不检查视口,立即加载 |
sandbox | boolean | 禁用网络调用(离线模式) |
width / height | number | 生成嵌入代码时的 iframe 尺寸 |
该元素会触发用于与宿主页面通信的 postMessage API(详见 specs/EMBED_HOST_PROTOCOL.md)。宿主可以向 Agent 发送事件,并接收返回的 speak、think 和 skill-done 事件。
带版本号的 CDN 包发布在 /agent-3d/x.y.z/agent-3d.js。使用 latest 自动更新,或固定到某个版本以确保稳定:
<script src="https://three.ws/agent-3d/1.5.2/agent-3d.js"></script>
使用嵌入 SDK 快速开始 iframe
如果你想使用可由父页面控制的无边框 iframe(而不是 <agent-3d> Web 组件),请引入嵌入 SDK:
<iframe
id="agent"
src="https://three.ws/agent/abc123/embed"
style="width:480px;height:600px;border:0"
></iframe>
<script src="https://three.ws/embed-sdk.js"></script>
<script>
const bridge = Agent3D.connect(document.getElementById('agent'), {
agentId: 'abc123',
onReady: ({ name }) => console.log('agent ready:', name),
onAction: (action) => console.log('agent action:', action),
onError: (err) => console.error('embed error:', err),
});
// Drive the agent
bridge.send({ type: 'speak', payload: { text: 'Hello!' } });
bridge.ping().then((rttMs) => console.log('rtt', rttMs, 'ms'));
</script>
源站约定。 SDK 会根据 iframe.src 推导 iframe 的源站,无法推导时会拒绝启动(绝不使用通配目标)。iframe 会根据收到的第一条经过身份验证的消息锁定父页面的源站,并忽略之后来自其他源站的消息。完整规则请参阅 specs/EMBED_SPEC.md §“桥接源站模型”。
类型安全的宿主桥接(适用于 npm)
对于 TypeScript/打包工具工作流,可直接导入 EmbedHostBridge:
import { EmbedHostBridge } from 'three-ws/embed-host-bridge';
const iframe = document.getElementById('agent');
const bridge = new EmbedHostBridge({
iframe,
agentId: 'abc123',
allowedOrigin: new URL(iframe.src).origin, // required, never '*'
});
await bridge.ready;
await bridge.speak('Hello world');
const off = bridge.on('action', (a) => console.log(a));
// Clean up when done.
off();
bridge.destroy();
两种方式都使用相同的 v1 线协议——选择适合你技术栈的一种。
Widget 系统
Widget Studio(three.ws/studio)让任何人都能无需编写代码,创建可分享、可嵌入的 3D 体验。选择一个头像和一种 Widget 类型,完成配置,然后获取 iframe 代码片段。
五种 Widget 类型:
| Widget | 描述 |
|---|---|
| Turntable | 可自动旋转的模型展示,支持配置背景、光照和摄像机 |
| Animation Gallery | 分页显示命名片段的网格;点击任意片段即可在模型上播放 |
| Talking Agent | 带有大模型核心的完整聊天界面;可在任何地方嵌入对话 Agent |
| ERC-8004 Passport | 链上身份卡——显示 Agent 名称、所有者、信誉评分和验证徽章 |
| Hotspot Tour | 固定在世界空间坐标上的 3D 热点;点击即可显示文本注释 |
每个 Widget 都有:
/w/<id>公共 URL,并提供服务器渲染的 Open Graph 元数据,以生成丰富的链接预览/api/widgets/oembedoEmbed 端点,供 WordPress、Ghost、Notion 嵌入内容/api/widgets/<id>/viewiframe 嵌入 URL/api/widgets/<id>/stats视图计数器追踪端点/api/widgets/<id>/duplicate复制 API
Widget 以 JSON 配置的形式存储在 Postgres 中,并指向 R2 中的一个头像。
嵌入编辑器
所见即所得的嵌入编辑器位于 Widget Studio 中(public/studio/studio.js)。独立的 /embed 页面已合并到其中:不带参数的路径会 301 重定向到 /studio,带参数的 /embed?… 链接则会重写到该页面,因为 Studio 读取相同的参数名。
| 功能 | 描述 |
|---|---|
| 嵌入模式 | 静态(空闲姿势)、空闲(自行缓慢移动)、行走(摇杆/键盘)、聊天(在 iframe 中显示现有 Agent 的页面),以及所有其他 Widget 类型 |
| 头像选择器 | 你的库、公开头像搜索,或你自行托管的模型 URL(.glb、.gltf、.vrm) |
| 实时预览 | 渲染代码片段实际使用的运行时:/walk-embed、/a/<id>?embed=1 或 /widget |
| 环境 | Studio(透明)、Void、Beach、Sunset、Night、Grid |
| 尺寸预设 | S / M / L,加上自定义宽度 × 高度,以及响应式(流式)代码片段 |
| 无需账号 | 行走头像和 Agent 聊天会将配置嵌入 URL,因此代码片段无需登录或保存 Widget 即可使用 |
| 代码片段体验 | 真正复制 iframe 或 script 标签形式到剪贴板,并提供针对各平台的粘贴说明(HTML、React、WordPress、Webflow、Shopify) |
| 支持深度链接 | 每项控件都会同步到 URL 查询参数,因此可分享已配置的嵌入内容并重新打开 |
Pose Studio
three.ws/pose 是一款受 setpose.com 启发的 3D 姿势参考工具。它会构建一个 Three.js 场景,包含可活动关节的人偶、轨道相机、地面和网格,以及一个控制面板;你可以选择预设、拖动关节调整姿势、用滑块微调、更换体型、添加地面道具、调整光照和 FOV,并导出 PNG 截图。
| 模块 | 路径 | 作用 |
|---|---|---|
| 人偶 | src/pose-rig.js | 带有命名关节和 IK 的活动关节骨架 |
| 预设库 | src/pose-presets.js | 站立、坐姿、动作、待机、富有表现力的姿势 |
| Studio 外壳 | src/pose-studio.js | 场景、控制、导出、道具、光照 |
姿势可以通过 play_clip 工具无缝写入头像运行时,Agent 可按需采用任意已保存姿势。导出的 PNG 可用于营销渲染图,也可作为下游图像/视频工作流的参考帧。
头像配饰与代币启动平台
头像不只是 GLB 文件,更是可组合的骨架,运行时可以为其添加链上配饰。
配饰
- 帽子、眼镜和道具可通过 src/agent-accessories.js 附加到命名骨骼插槽
- 配饰本身也是 ERC-1155 代币,可独立于头像持有和交易
- 装配配饰不会产生破坏性修改:Agent 的基础清单保持不变,配饰仅在运行时叠加
代币启动平台
每个 Agent 都可以在创建头像的同时铸造代币,让 Agent 成为可交易的经济对象。
| 界面 | 路径 | 用途 |
|---|---|---|
| 启动平台 Studio | /launchpad | 配置代币名称、代码、供应量、费用分成 |
| 托管页面 | /p/[slug] | 公开启动页面,包含 <agent-3d> 组件和购买按钮 |
| 头像代币发行 | public/demo/coin/ | 演示流程:连接钱包 → 在一笔交易中铸造头像和代币 |
| Pump.fun 桥接 | POST /api/pump/launch-prep | 通过 pump.fun 的联合曲线发起启动 |
| 直接铸造 | contracts/script/ | 在 Agent 旁部署独立的 ERC-20 / SPL-22 |
代币元数据会指回 Agent 的链上身份——EVM 上的 ERC-8004 代币,或 Solana 上的 Metaplex Core 资产——Agent 的清单则会引用该代币。双向绑定信息可从任一链上的 bazaar、marketplace 和 reputation registry 读取。
Launchpad
three.ws/launchpad 上的 Launchpad 是一个托管页面构建器,用于代币发布、Agent 首秀和限量投放活动。每个已发布页面都有一个公开 URL,例如 /p/<slug>,并包含完整的 Open Graph 元数据,便于分享。实时发布目录位于 three.ws/launches。
| 页面部分 | 路径 | 用途 |
|---|---|---|
| 工作室 | /launchpad | 编辑界面 — 选择模板、配置文案、头像和铸造目标 |
| 公开页面 | /p/[slug] | 服务端渲染的托管落地页,带有 OG 卡片 |
| 发布 API | POST /api/launchpad/... | 页面包的版本化发布与回滚 |
Launchpad 模板通过 JSON 配置,可嵌入任意组合的 <agent-3d> 小组件、x402 付费端点或 pump.fun 发布按钮。页面存储在 Postgres 中,并以静态 HTML 的形式提供,交互元素则通过水合实现。
The Club
three.ws/club 是一个多人 3D 场馆:包含配有骨骼绑定舞者的俱乐部场景、音轨、聚光灯、镜面球立方体摄像机以及链上打赏(截图见上方图库)。
技术栈:
- 场馆 GLB + HDRI 由四盏聚光灯照亮;高阶画质档启用泛光和色差效果
- 音轨通过 R2 流式传输,并在各客户端之间同步播放
- 摄像机状态机 — DJ 台、俯视、舞池、跟随视角 — 按音轨编排
- 性能配置检测器根据
navigator.deviceMemory、hardwareConcurrency、pointer: coarse和 UA 字符串选择high/medium/low - 帧预算监控器会在检测到持续的慢帧时自动降低性能配置
经济机制:
/api/club/tips上的打赏 API — 观众通过 x402 使用 USDC 向舞者打赏(由 CDP 结算,另有支持 Permit2 免 Gas 的同类方案)/api/club/leaderboard上的排行榜采用时间窗口统计打赏金额最高者,结果缓存 15 秒,因此满员房间每个窗口只需一次聚合查询,而不是每位观众查询一次;数据库超出容量时会返回带重试提示的503,而非直接失败。每行还包含agent_tip_count,即来自已注册平台钱包的tip_count占比,因此页面可以区分来自真人和 Agent 的打赏/api/club/tips/stream上的实时打赏动态(SSE);冷启动的数据流会将游标回退到首位观众到达的时刻,因此安静下来的房间不会把积压的历史记录当作实时动态重放。动态流和/api/club/tips中的行都带有agent(付款方属于x402_ring_wallets时为 true)以及舞蹈编排风格(durationSec、track、pole、sequence),因此每位观众都会重放对应打赏所购买的舞蹈动作- 每小时运行的付款 cron 会将打赏账本中的款项划入舞者的资金库钱包
详情: 性能说明、场馆规划和发布检查清单与其他内部工作文档一同存放在 docs/internal/ 中。
Walk 与多人游戏
three.ws/walk 是一个权威式多人漫步场景。玩家加入共享的 3D 空间,实时查看彼此的头像,并通过 WebSocket 连接发送手势。
无服务器风格的请求/响应层无法维持长连接 WebSocket,因此多人游戏服务运行在独立的工作区 multiplayer/ 中——这是一个打包了 Fly.io fly.toml 和 Dockerfile 的 Colyseus 服务。/walk 上的 Vite 客户端会自动发现服务(开发环境使用 ws://localhost:2567,生产环境使用部署后的主机)。
# Run both servers together
npm run dev:walk-all # Vite (:3000) + Colyseus (:2567)
WalkRoom(multiplayer/src/rooms/WalkRoom.js)是权威状态容器,管理位置、旋转、手势和在线状态。WS 升级时会执行来源允许列表检查(使用 ALLOWED_ORIGINS 环境变量;预览部署始终允许 *.vercel.app 和 *.three.ws)。同一个 Colyseus 服务还运行按账户划分的社交中心(multiplayer/src/social-hub.js),用于在线状态管理和实时事件推送。
Coin Communities
每个 Solana 代币都有一个实时 3D 世界。Coin Communities(three.ws/communities,截图见上方图库)会将铸币地址变为多人共享空间:选择与他人相同的代币,即可共同进入世界,在其中漫步、发送表情、语音聊天、用体素搭建,并在场景内屏幕上查看实时市值图表。
| 界面 | 路由 | 功能 |
|---|---|---|
| 大厅 | /communities,/worlds | 浏览 pump.fun 实时热门代币并进行搜索、选择头像、进入世界 |
| 代币资料页 | /communities/[mint] | 可通过深层链接访问的代币页面——元数据、联合曲线价格、毕业进度、近期交易 |
| 3D 世界 | /play | 按代币划分的共享世界——玩家头像、名称标签、聊天、表情、体素搭建、市值屏幕 |
工作原理
- 使用真实 pump.fun 数据,不用模拟数据。 大厅和代币资料页会从 pump.fun 信息流获取实时热门代币、搜索结果、联合曲线定价和近期交易。
- 使用任意头像。 可使用默认头像、上传的 GLB/VRM,或粘贴模型 URL。同一套骨骼(
src/game/avatar-rig.js)驱动/play、/walk和/city,动作不会出现偏差。 - 实时在线状态与聊天。 每种代币都有自己的房间。城镇聊天由 CoinCommunities 服务提供支持——读取功能开箱即用;发布消息则需先通过 X-OAuth 登录并关联钱包。若未设置
CC_API_KEY,聊天会显示专门设计的锁定状态。 - 体素搭建与空间语音。 支持协作放置方块(受服务端限制),并可选择启用有地理围栏限制的 WebRTC 语音(
src/game/voice-chat.js)。 - 持有者门控房间。 代币可要求参与者持有代币(分为
holders持有者等级和普通等级);门控由服务端通过密封的游戏通行证执行。
关键文件:src/communities.js(大厅)、src/game/coincommunities.js 和 coincommunities-ui.js(3D 场景与 HUD)、src/game/community-net.js(套接字桥接)、api/community/*(worlds、messages、ws-ticket、capabilities、me)、api/_lib/coin-communities.js(CoinCommunities SDK 客户端)。代币图片通过平台图片代理加载,而非直接从项目启动元数据 URI 加载,因此即使热链接图片阻止跨源读取,图片仍会正常显示,不会留下损坏的图块。
Coin Wars 与实时活动
两个 Coin 社区可以在同一个竞技场相遇,为各自的 Coin 而战。/play 上的每个世界都在广场中设有一个战争传送门(src/game/war-portal.js):走到传送门旁,面板就会显示社区的 Elo 评分、排名、战绩、K/D 和最近的战斗。按 E 排队;当第二个社区也加入队列后,双方会进入同一场战斗,竞技场随即在 three.ws/play/war 开放。
入场限制由服务端执行,并非徒有其表:如果你没有持有某个社区的 Coin,竞技场就不会让你加入该社区的队伍;配对信息本身也会写入经过签名的战争票据,确保战士无法进入一个从未同意交战的社区的竞技场。战斗结果会写入战斗账本,联赛排名则由 multiplayer/src/war-standings.js 根据该账本计算;竞技场自己的联赛也读取同一个模块,因此传送门面板不会给出另一套说法。所有功能都由以下端点提供:GET /api/wars(面板)、GET /api/wars?action=live(观众轮询)、POST /api/wars?action=queue|leave,以及游戏服务的 HMAC 签名 ?action=report 写入端点(api/wars.js)。完整参考:docs/coin-wars.md。
实时活动也在同一个世界中举行。倒计时、日程、分环节横幅和同步烟花表演都由同一个配置文件驱动,因此无需更改代码即可创建或停止活动(src/game/meetup-event.js、src/game/event-countdown.js、docs/play-live-events.md)。活动进行期间,所有进入活动世界的人都会获赠一件纪念穿戴物;活动结束后,这件物品不会再次发放,也无法购买:参见 docs/event-souvenirs.md。
City
three.ws/city 是一个可自由漫游的 3D 城市场景:一座可步行探索的城市世界(使用真实的曼哈顿地图数据),配有跟随摄像机、地图和玩家控制器,基于与平台其他部分相同的 Three.js 技术栈构建。
关键文件:src/city/city-world.js(场景 + 渲染循环)、city-map.js(布局)、city-player.js(移动/控制器)、city-camera.js(跟随摄像机)、city.css。
好友、在线状态与社交
完整的账户级社交层覆盖所有多人游戏界面。好友关系持久保存;在线状态则是临时的——两者都关联到账户,而非临时会话,因此重新连接或切换区域后仍会保留。
| 功能 | 实现方式 |
|---|---|
| 好友关系图 | POST /api/friends(请求、接受、拒绝、移除、屏蔽、取消屏蔽),GET /api/friends(关系图 + 实时在线状态) |
| 用户搜索 | GET /api/friends/search?q= — 按显示名称查找账户,并直接显示关系状态 |
| 私信 | GET/POST /api/friends/messages — 私信对话;在线时实时送达,离线时进入持久队列 |
| 在线状态 | 短时有效的签名票据(GET /api/friends/presence-ticket)→ 多人游戏服务将 presence:<uid> 写入 Redis(TTL 为 75 秒,每 30 秒发送一次心跳) |
| 实时送达 | 社交中心(multiplayer/src/social-hub.js)会将私信和好友事件推送到该账户的每个已打开套接字 |
好友数据存储在 Postgres 中(friendships、direct_messages、user_mutes——参见迁移文件 api/_lib/migrations/2026-06-01-friends.sql);在线状态存储在 Upstash Redis 中,并能在进程退出时自动恢复。屏蔽只影响发送端——被屏蔽的账户不会收到任何通知。好友面板 UI(src/friends.js、src/game/friends-panel.js)会在 /play 中显示好友请求、私信对话以及“在线”/“离线”状态。src/social/ 模块还提供情绪倾向和 X 帖子影响力评分,供社区界面使用。
游戏内经济系统
three.ws/play 开放世界使用两种严格分开的货币,这种区分正是整个设计的核心。Cash(随身携带的钱包余额)是纯粹的游戏资源:通过采集、钓鱼和战斗获得,在商贩处消费,绝不上链,也不是代币。$THREE 是平台唯一的代币,玩家通过已连接的 Solana 钱包在链上消费,以解锁高级外观。价格表存放在一个模块(multiplayer/src/shop.js)中,由权威服务器和客户端共同导入,因此玩家看到的价格与服务器收取的价格完全一致。
| 界面 | 走近对象 | 功能 |
|---|---|---|
| 杂货店 | 店员 NPC(E) | 按固定商贩价格出售采集品(木材、石头、煤、鱼、熟鱼、骨头、兽皮),或用 Cash 购买工具、消耗品、弹药和护甲背心。只有采集和掠夺获得的物品可以出售:工具、武器、坐骑和初始套装均被刻意排除,避免玩家出售自己的套装,或通过先买后卖进行套利。 |
| 银行柜员 / ATM | 柜员 NPC(E) | 在随身携带的钱包余额和受保护的银行余额之间转移 Cash。死亡时,随身携带的钱包余额和物品会掉落到墓碑中(dropCarried);存入银行的 Cash 则不会丢失,这正是前往银行所涉及的风险与回报机制。 |
$THREE 精品店 | 精品店 | 通过真实的链上 $THREE 付款解锁高级服饰外观。报价、签名、结算:服务器根据目录计算费用(绝不使用客户端提供的数字),玩家进行签名,然后服务器通过 Solana RPC 重新获取已确认的交易,并在发放物品前核验收款地址和金额。已结算的报价 nonce 会被保留,以防重放。 |
| 幸运转盘 | 广场地标(E) | 每 12 小时可免费抽奖一次,冷却时间会持久化,即使断开连接也不会重置;也可支付 $3 的 $THREE 抽奖。付费抽奖的金额会 50/50 分配给持有者奖励池和金库,并在发放奖品前进行链上验证。20 个扇区的中奖概率经过设计,完全相同,且与客户端的固定角度渲染精确匹配。平均技能等级达到 3 才能参与,作为轻量级的防刷门槛。 |
美元价格通过 fetchTokenPriceUsd 按实时汇率换算为 $THREE。该函数会依次访问主数据源和备用数据源,并短暂缓存结果。如果所有数据源都不可用,服务器会拒绝提供报价,而不是猜测价格。整个循环由成长系统支撑:五项技能(战斗、伐木、采矿、钓鱼、烹饪)的等级上限为 99,背包有 24 个格子,快捷栏有 6 个格子(multiplayer/src/economy.js)。服务器配置:GAME_TOKEN_MINT、GAME_TOKEN_TREASURY、GAME_TOKEN_DECIMALS、GAME_TOKEN_SECRET。
这一游戏内支付渠道与两个容易混淆的相邻渠道不同:USDC x402 外观支付渠道(api/x402/cosmetic-purchase.js)为独立角色创建器出售另一套目录中的商品;公开的已结算外观销售账本则位于 /fits。商贩交易和银行交易完全在 Colyseus 房间状态中结算;只有精品店和付费抽奖会触及区块链。
上述所有目录、门槛和概率表都会实时发布在 three.ws/play/economy,由 GET /api/play/economy 提供(api/play/economy.js)。该端点导入游戏自身的模块,而非重新陈述其中的内容,因此公开参考信息始终与服务器的收费标准一致。完整参考文档:docs/in-game-economy.md。实操教程:docs/tutorials/earn-and-spend-in-play.md。
语音实验室与动作捕捉工作室
除了 Pose Studio,还有两个创作工具:
- Voice Lab(
/voice、src/voice-lab.js)——为 Agent 试听并绑定语音,基于 Voice & Persona Hub 构建。 - Mocap Studio(
/mocap-studio、src/mocap-studio.js、api/mocap/):在绑定骨骼的虚拟形象上录制摄像头面部动作捕捉(MediaPipe FaceLandmarker),校准至中性姿势,然后通过/api/mocap/clips保存、回放和分享片段(任何人都可以回放公开片段,系统会通过 slug 查找片段)。
对话模式与口型同步
talk 交互模式将大模型运行时、ElevenLabs TTS 和音频驱动的 ARKit-52 口型同步驱动程序连接起来,将实时音频振幅和共振峰分析结果映射到 52 个标准 ARKit blendshape。
Agent 说话时,驱动程序以约 60fps 运行,控制 mouthClose、jawOpen、mouthSmileLeft/Right 以及其余 ARKit-52 集合中的形状——Empathy Layer 的情绪变形会继续叠加,因此虚拟形象可以同时表达情绪并清晰发音。ARKit-52 映射的单元测试位于 tests/src/arkit-morphs.test.js。
启用对话模式
在 <agent-3d> 元素上设置 mode="talk",并在 Agent 清单中提供 ElevenLabs 语音 ID:
{
"voice": {
"tts": { "provider": "elevenlabs", "voiceId": "YOUR_VOICE_ID" },
"stt": { "provider": "browser", "language": "en-US" }
}
}
工作流程(分步说明)
- 用户说话 →
getUserMedia捕获音频 → Web Speech API 生成文本转录。 - 转录文本进入大模型工具循环;最终回复文本会发送至 ElevenLabs TTS。
- 返回的
AudioBuffer会通过 Web Audio API 的AnalyserNode传输。 - 口型同步驱动程序(
src/voice/lipsync-driver.js)在每个动画帧采样分析器,提取振幅和频谱质心,并将它们映射为 ARKit-52 blendshape 权重。 - 权重会直接应用到已加载 GLB 的变形目标上,使用
src/voice/avatar-morph-target.js完成——无需重新渲染场景。 - Empathy Layer 会在同一帧注入情绪变形权重,使发音动作与情绪表达同时融合,彼此不会冲突。
该驱动程序与音频来源无关:它可以接收任何 AudioBuffer,因此对 ElevenLabs、浏览器 TTS 或预录片段的处理方式都相同。标准 ARKit-52 blendshape 表位于 src/voice/arkit-blendshapes.js;每个骨架的绑定(将标准名称映射到已加载 GLB 中的特定变形目标)由 src/voice/avatar-morph-target.js 处理。
Demos Hub
three.ws/demos 是一个精选索引,汇总了可单独体验各项平台功能的沙盒页面。每个演示都是 public/demos/ 中的一个独立 HTML 文件:非常适合录屏、复现错误,或在不展示应用其他部分的情况下展示某项功能。下方所有路径均为有效链接。
| 演示 | 路径 | 展示内容 |
|---|---|---|
| USDZ 与 AR Quick Look | /demos/usdz-ar.html | 在真实设备上导出 iOS USDZ + AR Quick Look |
| 半身 XR | /demos/halfbody-xr.html | WebXR 中的上半身 Avatar(Meta Quest、Vision Pro) |
| Avatar SDK | /demos/avatar-sdk.html | 使用 @three-ws/avatar SDK 加载并驱动 Avatar |
| React SDK | /demos/react-sdk.html | <agent-3d> 元素的 React 封装 |
| 音频驱动的口型同步(麦克风) | /lipsync/mic | 实时麦克风 → ARKit-52 口型同步 |
| 音频驱动的口型同步(TTS) | /lipsync | ElevenLabs TTS → ARKit-52 口型同步 |
| 多 LLM 大脑 | /brain | 并排比较 Claude / GPT / Groq / Gemini |
| ERC-8004 注册表浏览器 | /demos/erc8004.html | 浏览各条链上所有已注册的 Agent |
| 按钮跳跃 | /demos/button-jump.html | Avatar 对 2D 按钮按下做出反应 |
| Create v2 | /demos/create-v2.html | 新一代 Agent 创建流程 |
| 3D 主页 | /demos/3d-home.html | 带叠加画布和透明背景查看器的主页 |
| 自拍适配 | /demos/selfie-fit.html | 自拍重建流程(第 1 阶段) |
| Persona 提取 | /demos/persona-extract.html | Voice & Persona Hub 入门访谈 |
| 记忆植入 | /demos/memory-seed.html | 从 X/GitHub/Farcaster 植入记忆 |
| 语音克隆 | /demos/voice-clone.html | 3-10 秒录音 → ElevenLabs 自定义语音 |
| Livepeer 推理 | /demos/livepeer-inference.html | 端到端去中心化 GPU 推理 |
| 技能版税 | /demos/skill-royalty.html | 向技能作者支付每次调用的版税 |
| EAS 声誉 | /demos/eas-reputation.html | EAS 认证的声誉查看器 |
| 联合曲线 | /demos/bonding-curve.html | 上线前联合曲线定价模拟器 |
| 图库选择器 | /demos/gallery-picker.html | 延迟加载 3D 缩略图的 Avatar 选择器(Embed Editor 基元) |
| 按钮 | /demos/button.html | 极简 <agent-3d> 嵌入反应测试 |
这些演示有意与生产路由(/create、/avatars/[id] 等)分开,这样在测试新想法时,生产流程仍能正常运行。
技能库
该平台内置了一组 Agent 技能,打包在 src/agent-skills-*.js 中,并通过 public/skills-index.json 注册。
| 技能 | 模块 | 功能 |
|---|---|---|
| Wave / 场景 | src/agent-skills-scene.js | 内置 wave、lookAt、play_clip、setExpression 处理器 |
| 情感倾向 | src/agent-skills-sentiment.js | 为传入文本打分(0–1),驱动 Empathy Layer 峰值 |
| Agent 支付 | src/agent-skills-agent-payments.js | EVM A2A 支付、EIP-7710 委托签名 |
| Solana Blinks | src/agent-skills-blinks.js | 编写并广播 Solana Action / Blink 链接 |
| Jupiter | src/agent-skills-jupiter.js | 通过 Jupiter v6 为任意 SPL 代币报价并兑换 |
| NFT | src/agent-skills-nfts.js | 铸造、转移和查询 Metaplex Core / SPL-22 NFT |
| Pumpfun 监控 | src/agent-skills-pumpfun-watch.js | 订阅 pump.fun 事件(recent-claims、token-intel、watch-start、watch-stop) |
| Pumpfun 编写 | src/agent-skills-pumpfun-compose.js | 构建带有创作者签名者拆分的 pump.fun 启动交易 |
| Pumpfun 钩子 | src/agent-skills-pumpfun-hooks.js | 用于应用内 pump.fun 集成的 React 风格钩子 |
| Pumpfun 自主交易 | src/agent-skills-pumpfun-autonomous.js | 根据信号和情感倾向自主执行交易 |
| Pumpfun 核心 | src/agent-skills-pumpfun.js | 共享的 pump.fun 客户端工具 |
| 配饰 | src/agent-accessories.js | 为绑定骨骼的虚拟形象装配帽子 / 眼镜 / 道具槽位 |
| 记忆 | src/agent-memory.js | 基于文件的记忆 CRUD(参见 记忆) |
| 声誉 | src/agent-reputation.js | 读取链上声誉,并在聊天界面中显示 |
第三方技能通过 IPFS / Arweave / HTTP 分发。完整的技能清单规范和编写指南请参见 docs/skills.md。
开发者 SDK
该仓库提供 15 个软件包,均以 @three-ws 作用域发布到 npm。只安装所需的软件包即可——每个软件包都有自己的 README,其中包含可直接复制粘贴的快速入门指南和完整的 API / 工具参考。
虚拟形象与 3D
| Package | Install | 作用 |
|---|---|---|
@three-ws/avatar | npm i @three-ws/avatar | 3D 头像查看器、创作者 iframe、AR/VR 运行时和 React 绑定(/react) |
@three-ws/agent-ui | npm i @three-ws/agent-ui | 在任意 UI 中嵌入 3D 头像覆盖层;它会响应按钮、输入和导航操作 |
@three-ws/avatar-schema | npm i @three-ws/avatar-schema | 用于链上头像清单的 JSON Schema 和验证器 |
@three-ws/viewer-presets | npm i @three-ws/viewer-presets | 为头像查看器调校的灯光架、地面反射和泛光预设 |
@three-ws/avatar-cli | npm i -g @three-ws/avatar-cli | 在命令行或 CI 中创建脚手架、验证、哈希处理和预览头像清单 |
Agent 和支付
| Package | Install | 作用 |
|---|---|---|
@three-ws/sdk | npm i @three-ws/sdk | 发布 ERC-8004 Agent:聊天面板、语音 I/O、链上注册、.well-known 清单 |
@three-ws/solana-agent | npm i @three-ws/solana-agent | Solana Agent 操作:密钥对和浏览器钱包、转账、兑换、x402 exact-scheme 支付 |
@three-ws/agent-payments | npm i @three-ws/agent-payments | Agent 代币支付:USDC/Token-2022、v2 交易,以及 EVM / x402 / a2a / 跨链 |
MCP 服务(通过单条命令使用 stdio 运行 — 也收录于 官方 MCP 注册表)
各服务的详细介绍(包含每个工具、参数、环境变量和示例):场景 · x402 钱包 · 情报 · Vanity 地址 · 命名 · 市场。完整目录:docs/mcp.md。
@three-ws/sdk 快速入门:
import { AgentKit, loadAvatar } from '@three-ws/sdk';
import '@three-ws/sdk/styles';
const agent = new AgentKit({
name: 'My Agent',
description: 'Does cool stuff',
endpoint: 'https://myapp.com',
onMessage: async (text) => `You said: ${text}`,
});
agent.mount(document.body);
// Drop a three.ws agent's avatar onto the page
loadAvatar('a_abc123', document.getElementById('avatar-slot'));
@three-ws/sdk 还提供 AgentClient(x402 付费调用)、PermissionsClient 和 ERC-8004 注册表辅助工具。请参阅 sdk/README.md、SDK 指南 和 示例。
API 参考
完整的 OpenAPI 3.1 规范可在 /openapi.json 查看。主要 API 接口如下。
Agent API
| 方法 | 路由 | 身份验证 | 描述 |
|---|---|---|---|
| GET | /api/agents | session | 列出你的 Agent |
| POST | /api/agents | session | 创建 Agent |
| GET | /api/agents/:id | — | 获取 Agent 详情 |
| PATCH | /api/agents/:id | session | 更新 Agent |
| DELETE | /api/agents/:id | session | 删除 Agent |
| GET | /api/agents/:id/manifest | — | 下载 manifest JSON |
| POST | /api/agents/:id/sign | session | 使用 Agent 钱包签署消息 |
| GET/POST | /api/agents/:id/embed-policy | session | 管理 iframe 来源允许列表 |
| POST | /api/agents/register-prep | session | 准备 EVM 链上注册(ERC-8004) |
| POST | /api/agents/register-confirm | session | 确认 EVM 注册(ERC-8004) |
| POST | /api/agents/register-solana | session | 在 Solana 上铸造 Metaplex Core Agent NFT |
| GET | /api/agents/solana-attestations | — | 读取 Agent 的 Solana 反馈/验证备忘录 |
| GET | /api/agents/solana-card | — | Solana Agent 护照卡(对应 EVM /a/[chain]/[id]) |
| GET | /api/agents/solana-reputation | — | Solana 链下声誉快照 |
| POST | /api/agent-actions | session | 记录已签名的 Agent 操作 |
头像 API
| 方法 | 路由 | 身份验证 | 描述 |
|---|---|---|---|
| GET | /api/avatars | — | 列出公开头像 |
| POST | /api/avatars | session | 创建头像记录 |
| GET | /api/avatars/:id | — | 获取头像详情 |
| PATCH | /api/avatars/:id | session | 更新元数据 |
| DELETE | /api/avatars/:id | session | 软删除头像 |
| POST | /api/avatars/:id/presign | session | 获取预签名的 R2 上传 URL |
| POST | /api/avatars/:id/pin-ipfs | session | 固定到 IPFS |
三步上传流程:
1. POST /api/avatars/:id/presign → { url, storage_key }
2. PUT <presigned_url> ← raw GLB bytes
3. POST /api/avatars → register metadata with storage_key
Widget API
| 方法 | 路由 | 身份验证 | 描述 |
|---|---|---|---|
| GET | /api/widgets | session | 列出你的 Widget |
| POST | /api/widgets | session | 创建 Widget |
| PATCH | /api/widgets/:id | session | 更新 Widget |
| DELETE | /api/widgets/:id | session | 删除 Widget |
| POST | /api/widgets/:id/duplicate | session | 克隆 Widget |
| GET | /api/widgets/:id/stats | — | 查看统计数据 |
| GET | /api/widgets/oembed | — | oEmbed 卡片 |
记忆 API
| 方法 | 路由 | 身份验证 | 描述 |
|---|---|---|---|
| GET | /api/agent-memory/:id | session | 获取 Agent 记忆存储 |
| POST | /api/agent-memory/:id | session | 追加记忆条目 |
| PUT | /api/agent-memory/:id | session | 替换记忆存储 |
聊天与大模型
| 方法 | 路由 | 身份验证 | 描述 |
|---|---|---|---|
| POST | /api/chat | session | api-key | 与 Agent 聊天(Claude 后端) |
| POST | /api/llm/anthropic | allowlisted embed origin | session | api-key | Anthropic API 代理 |
定时任务
Cron 调度配置在 vercel.json 中(服务器读取的仍是实时 Cron/路由配置),并由 Google Cloud Scheduler 在生产环境中执行,后者会按计划调用各个端点。所有 Cron 端点均采用失败即关闭策略——缺少身份验证令牌时会报错并中止,而不是静默跳过(参见安全加固)。
vercel.json 中的 Cron(截至 2026-10-25 共 151 项)通过单个动态处理程序 api/cron/[name].js 进行路由;name 段用于选择处理函数。调度器作业依据 vercel.json 中的 Cron 列表,通过 scripts/create-gcp-scheduler.mjs 配置。下表列出了部分重要作业,每项调度计划均逐字引用自 vercel.json;该文件包含完整列表。
| Schedule | Endpoint | Purpose |
|---|---|---|
| 每分钟 | /api/cron/run-x-scheduled-posts | 发布队列中的 X(Twitter)帖子 |
| 每 3 分钟 | /api/cron/pumpfun-monitor | 监视新创建的 pump.fun 代币 |
| 每 5 分钟 | /api/cron/expire-pending-purchases | 清除过期的 x402 待处理购买 |
| 每 10 分钟 | /api/cron/solana-attestations-crawl | 索引新的 Solana 反馈/验证备忘录 |
| 每 5 分钟 | /api/cron/index-delegations | 索引 EIP-7710 委托 |
| 每 5 分钟 | /api/cron/run-x-triggers | 发布由触发条件触发的 X 帖子(提及、里程碑) |
| 每 5 分钟 | /api/cron/run-coin-cycle | 统一的代币发布周期任务:持有者快照、金库领取、抽奖、反射奖励 |
| 每 5 分钟(错开) | /api/cron/run-coin-payouts | 清空代币付款队列;安排在与 run-coin-cycle 不同的分钟运行,确保卡住的付款不会阻塞下一个周期 |
| 每 5 分钟(错开) | /api/cron/club-payouts | 将未支付的 Pole Club 小费结算至各舞者的钱包 |
| 每 10 分钟 | /api/cron/pump-agent-stats | 刷新 pump Agent 仪表板统计数据 |
| 每 10 分钟 | /api/cron/solana-attest-event-cleanup | 清理约 1 小时前的 Solana 证明事件 |
| 每 15 分钟 | /api/cron/erc8004-crawl | 索引已索引链上新铸造的 ERC-8004 代币 |
| 每 15 分钟 | /api/cron/pumpfun-signals | 将 pump.fun 信号写入 pumpfun_signals 表 |
| 每小时 | /api/cron/cleanup-csrf-tokens | 使已使用/过期的 CSRF 令牌失效 |
| 每小时 | /api/cron/process-withdrawals | 处理创作者提现(pump.fun、小费) |
| 每小时 | /api/cron/run-dca | 执行 DCA 策略订单 |
| 每小时 | /api/cron/run-subscriptions | 执行周期性 x402 订阅 |
| 每天 03:00 UTC | /api/cron/siwx-gc | 清理 SIWX 随机数(10 分钟重放窗口)和过期的付款授权 |
| 每 6 小时 | /api/cron/fetch-x-metrics | 获取自有账号的 X 互动指标 |
| 每 6 小时 | /api/cron/process-subscriptions | 向即将到期的创作者订阅周期收费 |
| 每天 03:00 UTC | /api/cron/settle-royalties | 结算应付的创作者和技能版税 |
| 每天 04:00 UTC | /api/cron/audit-log-cleanup | 轮换超过保留期限的审计日志 |
身份验证与 OAuth 2.1
three.ws 支持三种身份验证方式:
1. 邮箱 + 密码(会话 Cookie)
POST /api/auth/register → create account
POST /api/auth/login → JWT session cookie
GET /api/auth/me → current user
POST /api/auth/logout → revoke session
2. 钱包(SIWE / SIWS)
POST /api/auth/siwe → get nonce challenge
POST /api/auth/siwe/verify → verify EIP-4361 signed message → session
POST /api/auth/siws → Solana equivalent
3. 开发者 API 密钥
POST /api/api-keys → create key (set scope + expiry)
DELETE /api/api-keys/:id → revoke key
Authorization: Bearer sk-... → authenticate requests
OAuth 2.1 服务(RFC 6749 + PKCE)
适用于第三方应用和 MCP 集成:
GET /oauth/authorize → consent screen
POST /oauth/authorize → submit consent → auth code
POST /oauth/token → exchange code for tokens
POST /oauth/register → RFC 7591 dynamic client reg
POST /oauth/revoke → RFC 7009 token revocation
POST /oauth/introspect → RFC 7662 token check
GET /.well-known/oauth-authorization-server → RFC 8414 discovery
GET /.well-known/oauth-protected-resource → RFC 9728 resource discovery
令牌作用域(完整列表见 api/_lib/oauth-scopes.js):avatars:read、avatars:write、avatars:delete、profile、offline_access、memory:read、memory:write、agents:read、agents:write、feedback:read、home:read、home:act、wallet:read、wallet:write、services:write。持有者令牌受限于授予它的作用域:所有会转移 Agent 资金的路由都需要 wallet:write,且持有者只能创建作用域不超出自身持有范围的 API 密钥。钱包和服务作用域用于控制 Agent 钱包 MCP 服务的访问;wallet:write 还需要通过单独的同意屏幕复选框授权,因此应用无法仅凭提出请求就从用户的钱包中支出。
访问令牌是有效期较短的 JWT(1 小时)。刷新令牌是存储在 Postgres 中的哈希不透明字符串。
MCP 服务
api/mcp.js 是一个精简的 HTTP 入口(POST / GET-SSE / DELETE),通过 JSON-RPC 2.0 实现 Model Context Protocol 2025-06-18 规范。协议逻辑拆分在 api/_mcp/ 中:auth.js(Bearer/OAuth + x402 付费墙)、dispatch.js(JSON-RPC 路由)、catalog.js(动态工具目录)、payments.js(x402 付费工具结算)、render.js 和 embed-policy.js。工具按类别注册在 api/_mcp/tools/ 下(共 14 个类别模块:avatars.js、models.js、solana.js、pumpfun.js、animations.js、agents.js、garments.js、memory.js、oracle.js、trader.js、embed.js、sign.js、crypto-data.js、tokenize.js)。外部 AI 系统(包括 Claude Desktop、其他 Agent 或自定义集成)可通过此接口以编程方式驱动虚拟形象。
端点:POST /api/mcp(工具)、GET /api/mcp(SSE)、DELETE /api/mcp(终止会话)
**身份验证:**OAuth 2.1 Bearer 令牌或 API 密钥,每个工具都会检查自身所需的作用域(例如 avatars:read,或 delete_avatar 所需的 avatars:delete);不要求作用域的工具接受任何已通过身份验证的 Bearer 令牌,部分工具还需要通过 x402 支付 USDC
**注册表:**已列入官方 MCP 注册表,名称为 io.github.nirholas/three.ws,与在 io.github.nirholas 命名空间下发布的其他 three.ws 服务并列(threews-3d-studio、threews-avatar、threews-pumpfun、threews-x402-bazaar、three-token-mcp 等)。也可在 Smithery、Glama 和 PulseMCP 上发现。
x402scan:在 x402scan 上查看 — 付费 MCP 工具调用和收入
可用工具:
目录会在每次收到请求时,根据各类别工具模块动态组装。当前工具:
虚拟形象(api/_mcp/tools/avatars.js)
| 工具 | 描述 |
|---|---|
list_my_avatars | 列出已通过身份验证的用户的头像,包括 id、名称、slug、大小、可见性,以及(在允许的情况下)直接的 model_url。 |
get_avatar | 按 id 或所有者+slug 获取单个头像;返回元数据,以及公开的 model_url 或私有头像的短时签名 URL。 |
search_public_avatars | 在公开头像库中进行全文和标签搜索;无需事先知道 id,即可查找用于渲染的角色。 |
render_avatar | 生成可渲染指定头像的 HTML <model-viewer> 代码片段,并可配置背景、相机轨道、海报和 AR 按钮。 |
render_avatar_image | 将存储的头像渲染为真实的 PNG/JPEG/WebP 图像(无头 three.js),支持相机取景、姿势预设和 ARKit-52 表情;结果会缓存。 |
delete_avatar | 软删除你拥有的头像。需要 avatars:delete scope。 |
| 工具 | 描述 |
|---|---|
validate_model | 对公开的 https GLB/glTF URL 运行 Khronos glTF-Validator;返回包含错误、警告、信息和提示的结构化报告。已强化防止 SSRF。 |
inspect_model | 解析 GLB/glTF 并返回结构统计信息:场景/节点/网格数量、顶点和三角形总数、材质和纹理摘要,以及使用的扩展。仅进行检查,不提供建议。 |
optimize_model | 检查模型并返回可执行的建议,以减小体积和绘制调用开销:三角形预算、Draco/Meshopt、过大的纹理、KTX2 转码、非索引图元、冗余材质等。 |
Solana (api/_mcp/tools/solana.js) — 均为公开工具,无需身份验证
| 工具 | 描述 |
|---|---|
solana_agent_reputation | Solana 注册 Agent 的计算声誉摘要:反馈总数/已验证反馈数、原始及仅已验证反馈的平均分、验证通过/失败、任务接受情况和争议数量。 |
solana_agent_attestations | 列出关于 Solana Agent 的近期链上证明(反馈、验证、任务提议、接受、争议);每一行都包含已验证/有争议/已撤销标记。 |
solana_agent_passport | Solana Agent 的完整发现卡片:身份、所有者钱包、声誉摘要、最新验证结果和证明模式端点——相当于 Solana 版 ERC-8004 护照。 |
Pump.fun (api/_mcp/tools/pumpfun.js)
| 工具 | 描述 |
|---|---|
pumpfun_recent_claims | 最新的 pump.fun GitHub 社交费用领取事件,包含完整的增强信息:GitHub 个人资料、X/Twitter 粉丝数据、影响者等级、首次领取标记、虚假领取检测和 AI 摘要。 |
pumpfun_recent_graduations | 最近从联合曲线迁移到 PumpAMM 的代币,包含创建者和持有者分析。 |
pumpfun_token_intel | pump.fun 代币的完整情报:迁移状态、联合曲线进度、创建者资料、主要持有者、交易量、捆绑检测和信任信号。 |
pumpfun_creator_intel | pump.fun 创建者钱包的信誉资料:过往发行、迁移率、领取活动和行为信任信号。 |
另外还有十个类别模块,用于注册目录中的其余工具:动画(list_animations、animation_signature、find_similar_animations、apply_animation、text_to_animation)、Agent(call_agent、register_agent、attach_avatar_to_agent、identity_check)、服装(generate_garment、garment_status、list_garment_catalog)、记忆(remember、recall、forget)、预言机(oracle_top_plays、oracle_coin、oracle_arm_watch、oracle_watch_status)、交易者(trader_leaderboard、trader_profile、copy_subscribe、copy_status)、嵌入(get_embed_code、create_gated_embed)、手语(list_sign_vocabulary、sign_text)、加密货币数据(crypto_data、token_snapshot)和_token 化_(mint_3d_asset、get_3d_asset_onchain)。
MCP 发现: 在仓库根目录的 .mcp.json 中配置,用于与 Claude Desktop 集成。
SSE 流: GET /api/mcp 返回一个服务器发送事件流,用于接收长时间运行操作(验证、优化)的实时通知。
大脑代理与 LLM 路由
three.ws 支持通过统一的 brain 接口接入多个 LLM 提供商。运行时与提供商无关:只需改一行配置,即可从 Claude 切换到 GPT、Gemini 或本地模型。可在实时聊天界面 three.ws/chat 中亲自体验(模型选择器、工具、技能、钱包)。
| 提供商 | 路径 | 用途 |
|---|---|---|
| Anthropic (Claude) | POST /api/llm/anthropic | 默认 — 工具循环、流式传输、带情感标签的发言 |
| Groq | (匿名) | /chat 上供未认证访客使用的免费快速模式聊天 |
| 多 LLM 大脑 | /brain、POST /api/brain/chat | 对同一提示词并排比较 Claude / GPT / Gemini / Groq |
| OpenRouter | 通过 brain 代理 | 主提供商受到速率限制时的备用方案 |
| 空提供商 | src/runtime/providers.js | 用于测试和离线模式的空操作 |
切换提供商
提供商按 Agent 单独选择,并由清单中的 brain.provider 字段控制:
{
"brain": {
"provider": "anthropic",
"model": "claude-sonnet-4-6",
"temperature": 0.8,
"maxTokens": 1024
}
}
支持的 provider 值:anthropic · groq · openrouter · null(离线)。添加新提供商时,只需在 src/runtime/providers.js 中实现双方法接口(chat() 和 stream())——无需更改其他文件。
免费优先路由策略
平台在 src/llm.js 中的 DEFAULT_PROVIDER_ORDER 可确保 AI 聊天不会因单一配额耗尽而悄无声息地失败:始终优先尝试免费层级(Groq、OpenRouter :free 模型、NVIDIA);付费密钥(Anthropic、OpenAI)仅作为最后手段。系统配置了用于 :free 模型的 OpenRouter 备用密钥,因此即使主账户额度耗尽,也不会导致 /chat 界面不可用。
所有者卡片门控
当 Agent 拥有付费所有者(通过 ERC-8004 铸造或 x402 订阅确立)时,嵌入内容会解锁:
- 更长的上下文窗口(每轮最多 32k 个令牌,而匿名用户上限为 8k)
- 使用更高级别模型的权限(Claude Sonnet / Opus,而非 Groq 备用方案)
- 在嵌入界面中显示于头像下方的所有者归属卡片
门控检查在服务器端运行,位于 api/chat.js,并依据 Postgres 中 Agent 的订阅记录进行验证。客户端无法绕过此检查——模型选择和上下文限制会在请求到达 LLM 提供商之前,于 API 层应用。
Claude Code 集成
three.ws 以一流的 Claude Code SDK 形式提供。有两种集成方式——选择其中一种,也可以同时使用:
1. MCP 服务(通过 npx 使用付费工具)
只需一步,即可将 @three-ws/mcp-server 添加到 Claude Desktop、Cursor 或 Claude Code 配置中:
{
"mcpServers": {
"3d-agent": {
"command": "npx",
"args": ["-y", "@three-ws/mcp-server"],
"env": {
"MCP_EVM_PAYMENT_ADDRESS": "0xYourBaseWallet",
"MCP_SVM_PAYMENT_ADDRESS": "YourSolanaWallet"
}
}
}
}
| 配置文件位置 | 平台 |
|---|---|
~/Library/Application Support/Claude/claude_desktop_config.json | macOS Claude Desktop |
%APPDATA%\Claude\claude_desktop_config.json | Windows Claude Desktop |
项目根目录中的 .mcp.json | Claude Code(项目级) |
~/.cursor/mcp.json | Cursor |
配置完成后,Claude 即可在对话中直接调用这些工具——无需 API 密钥,每次调用均通过 x402 以 USDC 结算:
| 工具 | 价格 | 功能 |
|---|---|---|
get_pose_seed | $0.001 | 根据纯文本提示词生成 three.ws 头像的姿势映射 |
pump_snapshot | $0.005 | pump.fun 代币实时快照——价格、交易量、持有者和信任信号 |
agent_reputation | $0.01 | Agent 声誉——EVM 上的 ERC-8004 ReputationRegistry,以及 Solana 上的 attestation-memo 汇总 |
vanity_grinder | 最高 $0.50 | 挖掘具有自定义地址前缀的 Solana 密钥对 |
有关完整的环境变量参考和编程式客户端用法,请参阅 mcp-server/README.md。
2. 斜杠命令(marketplace/plugins/three-ws-developer/commands/)
此仓库提供三个 Claude Code 斜杠命令,可在引用此仓库的任何项目中使用:
| 命令 | 功能 |
|---|---|
/setup-mcp | 检测操作系统、收集钱包地址,并将 MCP 配置写入正确的文件——端到端完成,无需手动编辑 JSON |
/scaffold-agent | 在项目中搭建新的 three.ws Agent:安装依赖、创建接入 MCP 客户端的 agent.js,并添加 .env.example |
/use-tools [tool_name] | 生成完整、可运行的 Node.js 脚本,用于调用指定的付费 MCP 工具,并自动处理 x402 付款 |
命令位于 marketplace/plugins/three-ws-developer/commands/,并随 three-ws-developer 插件提供;安装该插件后,Claude Code 即可识别这些命令。
在 Claude Code 中安装
three.ws 提供官方的 Claude Code 插件市场——只需一条命令,即可将钱包、付款、pump.fun 交易、Agent 搭建和 3D Forge 安装为带命名空间的技能和 MCP 工具。添加一次市场:
/plugin marketplace add nirholas/three.ws
然后安装四个插件中的任意一个:
/plugin install three-ws-core@three-ws # wallet + x402 — authenticate, fund, send, trade, bazaar, pay, monetize, query onchain
/plugin install three-ws-developer@three-ws # scaffold agents, configure MCP, runnable code examples
/plugin install three-ws-pump-fun@three-ws # create coins, swap, creator fees, tokenize agents, live avatar reactions
/plugin install three-ws-3d@three-ws # text→3D (free), text→avatar, mesh forge, auto-rig + scene/avatar MCP
运行 /reload-plugins,技能就会显示在各插件的命名空间下(例如 /three-ws-3d:forge-3d)。提供 MCP 工具的插件(three-ws-developer、three-ws-3d)会自动接入已发布的 @three-ws/* MCP 服务——forge_free 免费(无需钱包);付费通道通过 x402 以 USDC 结算。规范清单位于 .claude-plugin/marketplace.json。
云市场
three.ws 已入驻主要云市场,并欢迎基础设施合作伙伴关系。
| 云平台 | 状态 |
|---|---|
| AWS | AWS 合作伙伴(APN 软件路径)。AWS Marketplace SaaS 上架申请正在审核中:请参阅 docs/aws-marketplace.md 和公开的合作伙伴页面 three.ws/aws。部分技术栈运行在 AWS us-east-1 上(Forge 雕刻师 Lambda three-ws-forge 和 S3 头像存储桶),并已在 AWS MyApplications 中注册,账户为 155407237916(主应用运行在 Google Cloud Run 上)。我们在 AWS Builder Center 以 @threews 发布工程文章;索引见 docs/aws-builder-center.md。 |
| Alibaba Cloud | 已上线:产品页面 → · 店铺主页 → |
| Google Cloud | 生产环境运行在 Google Cloud Run(three-ws-api,us-central1),前端由全球 HTTPS 负载均衡器和 Cloud CDN 提供服务;所有 110 个定时作业均使用 Cloud Scheduler,GPU 推理工作进程运行在 Cloud Run 上:这与 GCP 的 AI 基础设施和 Vertex AI 天然契合。欢迎共同上架、提供额度和联合 GTM。 |
生态目录
three.ws 已收录在 chain-ecosystem dApp 目录中,方便社区发现、评估和排名。
| 目录 | 状态 |
|---|---|
| BNB Chain · Dappbay | 已上线:dappbay.bnbchain.org/detail/three → — 分类:AI Agent 启动平台 · AI 数据 · AI 基础设施 |
IBM watsonx & Granite
three.ws 是 IBM Business Partner,Agent 运行时基于通过 IBM watsonx.ai 提供服务的 IBM Granite 基础模型运行。一个 IBM Cloud API 密钥和项目即可解锁整套功能;每次调用都是真实推理(没有模拟路径:未配置时,端点会返回 503)。完整文档:docs/ibm.md。在线演示:three.ws/galaxy。
公开演示并不代表合作关系。
/ibm/*下的演示是 three.ws 为开发者独立构建的工具,供他们探索 watsonx.ai 上的 Granite 并构建自己的集成——这些并非 IBM 官方合作交付内容,不是 IBM 产品,也未获 IBM 背书。我们与 IBM 的正式合作项目正在 IBM 平台上构建,目前尚未公开。
| Granite 模型 | 运行位置 |
|---|---|
granite-3-8b-instruct | 可选头像的大脑和所有旁白 |
granite-guardian-3-8b | 信任层——允许/审核/拦截治理关卡,在头像转移价值之前内联运行于 /api/chat |
granite-ttm-512/1024/1536-96-r2 | TimeSeries 预测(Oracle、Twin、Proof) |
granite-embedding-278m-multilingual | 语义 Agent 地图和 /api/watsonx/embed |
granite-vision-3-2-2b | 视觉——读取头像并生成完整的 Agent 身份 |
三个在线界面将其展示出来:Agent Galaxy(由 Granite 将每个公开 Agent 嵌入可导航的语义 3D 星图)、x402 Granite 演示(以 USDC 结算的按次付费 Granite 推理)和 hello-world 嵌入示例。这些界面背后的后端端点位于 api/ibm/(galaxy、oracle、twin、vision、attest)。独立连接器 @three-ws/ibm-watsonx-mcp(npm)可将 watsonx.ai 提供给任何 MCP 宿主;它由社区构建,并非 IBM 产品。托管平台集成运行在 IBM watsonx.ai 上。
通过 MCP 按次付费调用 Granite(x402)
全球首个支持 x402 的 IBM Cloud MCP 服务:@three-ws/ibm-x402-mcp 将 IBM Granite 变为任何 AI Agent 都能调用的计量式服务。运营方持有 IBM 凭据并为推理提供资金;调用方每次调用支付几美分的 USDC——无需 IBM Cloud 账户、订阅或注册 API 密钥。完整指南:docs/ibm-x402-mcp.md。
| 工具 | 功能 | 价格 |
|---|---|---|
ibm_granite_chat | 对话式 AI——问答、起草、推理 | $0.02 |
ibm_granite_code | 生成/审查/重构/解释/测试/编写代码文档 | $0.025 |
ibm_granite_embed | 批量文本嵌入(1–64 个),用于 RAG、搜索和聚类 | $0.005 |
ibm_granite_analyze | 结构化文档分析——实体、情感、风险、后续步骤 | $0.04 |
ibm_granite_forecast | 通过 Granite TTM 进行零样本时间序列预测 | $0.05 |
同样的五个工具支持两种传输方式:stdio(npx @three-ws/ibm-x402-mcp,适用于 Claude Desktop / Code / Cursor,以 Solana 付款)和 Streamable HTTP(https://three.ws/api/ibm-mcp,适用于托管客户端和 watsonx Orchestrate,以 Base 或 Solana 付款)。未付款的 tools/call 会返回 402,其中列明确切的 USDC 价格;支持 x402 的客户端会自动付款并重试,只有工具成功后才进行链上结算。这是通过 watsonx.ai 集成 IBM Granite 的独立项目,并非 IBM 产品。
x402 支付
three.ws 是一流的 x402 托管平台。Agent 既可以支付费用,也可以提供付费端点。结算在 Base、BSC 和 Solana 上进行;three.ws/x402 上的集市是发现入口。
VS Code 的 x402 扩展将这一流程带入编辑器:浏览集市、查看 402 挑战,并使用 $THREE 或 Solana 上的 USDC 付款。$THREE 合约地址为 FeMbDoX7R1Psc4GEcvJdsbNbZA3bfztcyDCatJVJpump。设置指南介绍了安全的钱包存储、代币选择、确认和结算收据。
**公开证明:**此服务已列入 x402scan,展示其付费工具调用和收入;three.ws/pulse 会在每笔 Agent 对 Agent 支付上链结算时实时呈现(每天数百笔 x402 结算、实时计数器,仅显示真实事件)。
支付通道
| 链 | 结算方式 | Permit2 同类端点 | 状态 |
|---|---|---|---|
| Base 主网 | Coinbase CDP 协调器 | 通过中继器免 Gas | 已上线 |
| Base sepolia | CDP 协调器 | 支持 | 已上线 |
| BSC | 直接方案(无需协调器) | — | 已上线 |
| Solana(devnet) | x402-solana 直接结算 | — | 已上线 |
每个由 CDP 结算的端点都提供一个 Permit2 同类端点,可使用 EIP-2612 许可代替预先授权——买家签名一次,中继器支付 Gas。tests/e2e/ 中提供了线路级检查,可端到端测试买家和卖家的流程。
付费端点
| 路由 | 可获得内容 |
|---|---|
POST /api/x402/mint-to-mesh | 将头像的网格铸造为 NFT |
POST /api/x402/mint-to-mesh-batch | 批量铸造最多 N 个网格 |
POST /api/x402/dance-tip | 向俱乐部舞者打赏 USDC |
POST /api/x402/model-check | 以付费服务的形式运行 Khronos glTF 验证 |
POST /api/x402/pump-agent-audit | 审计 pump.fun 代币的创建者历史 |
POST /api/x402/agent-reputation | 计算链上声誉快照 |
POST /api/x402/onchain-identity-verify | 验证钱包的 ERC-8004 身份 |
POST /api/x402/symbol-availability | 检查代币符号在各条链上的可用性 |
POST /api/x402/skill-marketplace | 付费技能市场列表 |
POST /api/x402/asset-download | 下载受限 R2 资源时按次付费 |
POST /api/x402/did | 作为服务提供 DID 解析 |
GET /api/x402/my-receipts | 买家端收据账本 |
Bazaar、SKU 和订阅
| 界面 | 路径 | 用途 |
|---|---|---|
| Bazaar | /x402 | 可浏览的付费端点市场 |
| 列表工作室 | /x402/studio | 编写并发布你自己的付费列表 |
| 结账 | /api/x402-checkout | 类似 Stripe 的一次性购买 |
| SKU 目录 | /api/x402-skus | 由服务端定义、按行定价的 SKU |
| 仪表板 | /dashboard/x402 | 卖家和买家仪表板、收据、付款 |
| 订阅 | /api/x402/subscriptions | 通过 cron 定期收取 x402 费用 |
| 状态 | /api/x402-status | 健康状况和链可达性检查 |
如何公开付费端点
import { paidEndpoint } from './_lib/x402-paid-endpoint.js';
export default paidEndpoint({
route: '/api/your-endpoint',
method: 'POST',
priceAtomics: '100000', // USDC atomic units (6 decimals): $0.10
networks: ['solana', 'base'], // solana | base | bsc; Solana listed first by default
description: 'What the buyer is paying for',
handler: async ({ req, payer }) => {
// payer is verified. RETURN the good; the wrapper settles, then flushes it
return { ok: true, payer };
},
});
此辅助函数负责处理 402 挑战、Permit2 备用方式、收据回写、幂等令牌强制执行以及 CSRF/SSRF 防护。可选钩子:metered 会将签名的计量任务收据附加到响应中(推理网络的工作量证明通道),onSettled 会在结算后以即发即弃方式触发(用于按调用累积技能版税)。请参阅 api/_lib/x402-paid-endpoint.js。
Wire 检查
- Wire 层的 CORS、CDP 和 Permit2 备用方式检查:
tests/e2e/ - 报价收据架构及买家获取: api/_lib/x402-buyer-fetch.js
- 错误信封:完整的 402 正文通过
PAYMENT-REQUIRED标头返回
A2A — Agent 对 Agent 协议
Agent 通过构建在 MCP 服务和 x402 支付之上的 A2A 桥接,直接相互交易。
工作原理
当 Agent A 想要调用 Agent B 的付费工具时:
- 发现 — A 通过
POST /api/x402/did解析 B 的 DID,获取 B 的 MCP 端点 URL 和支付钱包地址。 - 调用 — A 向 B 的 MCP 端点发送
tools/callJSON-RPC 请求。 - 支付 — B 的服务返回带有 USDC 价格的
402 Payment Required。A 的 SDK 在链上(Base 或 Solana)结算 x402 支付,并在X-PAYMENT标头中附上支付证明后重试。 - 执行 — B 验证支付、运行工具,并将签名收据写入
api/a2a/receipts。 - 账本 — 双方都会在
api/a2a/spending中累积一条记录:A 记录对外支出,B 记录收入。
Agent 钱包使用 EIP-7710 委托权限签名——委托签名者代表 Agent 的根密钥行事,但始终不会暴露该密钥。
| 界面 | 路径 | 用途 |
|---|---|---|
| A2A 客户端 | sdk/a2a/ | 对外调用——向其他 Agent 付款并结算响应 |
| A2A 服务 | api/a2a/ | 通过 MCP 桥接公开的入站付费工具 |
| MCP 桥接 | api/mcp.js | 将付费工具封装为 MCP tools/call,并自动重试 402 |
| 支出账本 | api/a2a/spending | 按 Agent 设置支出上限和授权关卡 |
| 收据存储 | api/a2a/receipts | 每次付费调用都会写入签名收据 |
| DID 解析 | POST /api/x402/did | 将交易方 DID 解析为钱包和端点 |
**SIWX(使用 X-chain 登录)**为付费会话中介跨链身份验证:Base 上的 Agent 可证明拥有 Solana 钱包(反之亦然),以解锁特定链的付费端点。
链上身份(ERC-8004 + Metaplex Core)
three.ws 将两种链上身份路径视为同等重要的一等路径——每个信誉、证明和发现界面都会读取两者,而 SIWX 会在两者之间协调证明,因此单个 Agent 可以同时在两者上建立信誉。
- EVM 路径 — ERC-8004,一项用于可验证 3D Agent 身份的草案标准,已部署在 Base、BSC 和其他受支持的 EVM 链上。
contracts/目录包含完整的 Foundry 实现(IdentityRegistry、ReputationRegistry、ValidationRegistry)。 - Solana 路径 — 通过
solana-agent-sdk铸造的 Metaplex Core 资产。无需自定义链上程序:资产公钥就是 Agent ID,反馈和验证事件会以链上 memo 的形式写入,索引器会将其汇总为信誉分数(请参阅下方的 Solana 变体 部分)。
ERC-8004(EVM)
ERC-8004 是一项用于可验证 3D Agent 身份的草案标准。contracts/ 目录包含完整的 Foundry 实现。
合约
IdentityRegistry.sol — 主要的 EVM 合约。每个 Agent 都是一个 ERC-721 代币,包含:
agentId— 稳定的数字 ID(代币 ID)owner— Agent 所有者的 EVM 地址delegatedSigner— 用于运行时签名的可选辅助地址(EIP-712 类型化签名)tokenURI— Agent 清单 JSON 的 IPFS URLmetadata— 链上的名称、描述和图像指针
在 Solana 上,对应的身份是 Metaplex Core 资产:资产公钥就是 Agent ID,资产的 update_authority 是所有者,而资产 URI 指向同一份固定在 IPFS 上的清单。无需部署自定义程序——Metaplex Core 原生处理铸造、转移和更新。
ReputationRegistry.sol — 存储签名反馈分数。每位评价者可以为每个 Agent 提交一个分数。分数取平均值,作为链上信誉指标。Solana 对应方案是使用 envelope 为 threews.feedback.v1 的 SPL Memo,并在包含 Agent 的 Metaplex Core 资产公钥的交易中发布——任何客户端都可以通过 getSignaturesForAddress 读取。
ValidationRegistry.sol — 记录针对链下证明的验证者证明(glTF 验证报告、技能审计、安全审查)。Solana 对应方案使用 envelope 为 threews.validation.v1 的 SPL Memo,并关联到 Agent 的 Metaplex Core 资产公钥。
部署地址
有关当前主网和测试网地址,请参阅 contracts/DEPLOYMENTS.md。所有三个注册表都通过 CREATE2 部署到自定义靓号前缀工厂,因此在同一环境类别内,所有受支持的 EVM 链上使用的都是相同地址——主网合约使用一个地址,测试网合约使用另一个地址。
主网(覆盖 Ethereum、Optimism、BSC、Gnosis、Polygon、Fantom、zkSync Era、Moonbeam、Mantle、Base、Arbitrum One、Celo、Avalanche、Linea、Scroll):
| 合约 | 地址 | 证明 |
|---|---|---|
| IdentityRegistry | 0x8004A169FB4a3325136EB29fA0ceB6D2e539a432 | Basescan · Etherscan |
| ReputationRegistry | 0x8004BAa17C55a88189AE136b182e5fdA19dE9b63 | Basescan · Etherscan |
| ValidationRegistry | 尚未部署到主网 | 请参阅 contracts/DEPLOYMENTS.md |
测试网(BSC Testnet、Ethereum Sepolia、Base Sepolia、Arbitrum Sepolia、Optimism Sepolia、Polygon Amoy、Avalanche Fuji):
| 合约 | 地址 | 证明 |
|---|---|---|
| IdentityRegistry | 0x8004A818BFB912233c491871b3d84c89A494BD9e | Base Sepolia |
| ReputationRegistry | 0x8004B663056A597Dffe9eCcC1965A193B7388713 | Base Sepolia |
| ValidationRegistry | 0x8004Cb1BF31DAf7788923b405b754f57acEB4272 | Base Sepolia |
CREATE2 工厂(ThreeWSFactory)
使用位于 0x00000000D49195AE81759cd247cFeDD9D0B479df(前导 7 个零)的自定义靓号前缀 CREATE2 部署器,在各链上生成匹配的地址。工厂 init code 哈希为 0x30f9d9020bf9622bbe7f8a1625d447efe350dfafd0a91e6dbd62d56547db835f;所有已部署链上的字节码完全相同。源码已在各链的区块浏览器上验证。
审计与 EAS
- 第 3 阶段将安排对声誉、版税和委托合约进行智能合约审计
- EAS(Ethereum Attestation Service)集成将作为配套的声誉界面推出——查看器请参阅
/demos/eas-reputation.html - 0xsplits SDK 已接入,可将技能版税分配给多位作者
注册流程(EVM)
1. POST /api/agents/register-prep → { manifest, typedData }
(uploads manifest to IPFS, builds EIP-712 typed data for signing)
2. User signs typedData with their wallet
3. POST /api/agents/register-confirm → { txHash, agentId }
(submits transaction, waits for confirmation, updates agent record)
此时,Agent 已成为 ERC-721 代币。其清单存储在 IPFS 上。其操作历史锚定到其 agentId。任何第三方都可以验证 Agent 的身份、所有者和声誉,而无需信任 three.ws。
注册流程(Solana)
Solana 提供 ERC-8004 的对应实现,无需任何自定义链上程序——身份是 Metaplex Core 资产,声誉和验证则是引用该资产、锚定在 SPL Memo 上的证明。
1. POST /api/agents/register-solana → { tx }
(server builds a Metaplex Core mint instruction; client signs)
2. User signs and submits the tx with their Solana wallet (Phantom / Backpack / Seeker MWA)
3. POST /api/agents/register-solana?step=confirm → { asset, agentId }
(server verifies the mint, writes back the asset pubkey as the agent's ID)
此时,Agent 已成为 Metaplex Core NFT。其资产公钥是规范的 Agent ID。任何人都可以通过 getSignaturesForAddress(assetPubkey) 读取与之相关的每条反馈/验证证明——请参阅下文的 Solana 变体——形态相同,无已部署程序。
链上索引
api/cron/erc8004-crawl.js 每 15 分钟运行一次,用于索引新的 IdentityRegistry 铸造事件。已索引的 Agent 会显示在 /discover 中,并可通过 /hydrate 导入。
Solana 变体 — 结构相同,无已部署的程序
Solana 提供了 ERC-8004 的类比方案,无需任何自定义链上程序:
- 身份 — 通过
registerSolanaAgent()铸造的 Metaplex Core NFT(资产公钥即为 Agent ID)。 - 声誉 + 验证 — 引用 Agent 资产公钥的已签名 SPL Memo 交易,包含 JSON 封装(
threews.feedback.v1/threews.validation.v1)。任何人都可以通过getSignaturesForAddress(assetPubkey)读取有关某个 Agent 的所有证明。
SDK:
import { attestFeedback, attestValidation, listAttestations } from '@three-ws/sdk';
await attestFeedback({ agentAsset, score: 5, network: 'devnet' });
await attestValidation({ agentAsset, taskHash: '0x…', passed: true, network: 'devnet' });
const rows = await listAttestations({ agentAsset, kind: 'all', network: 'devnet' });
服务端读取端点:GET /api/agents/solana-attestations?asset=<pubkey>&kind=feedback|validation|all&network=devnet|mainnet。
演示页面:sdk/example/solana-attest.html。
Pump.fun 信号(Solana 链下声誉)
Solana Agent 可以接入实时 pump.fun 活动(GitHub 社交费用申领、代币毕业),将其作为链下信任信号,纳入 Agent 的 Solana 声誉评分,并通过 Empathy Layer 实时呈现。
| 界面 | 路径 | 用途 |
|---|---|---|
| MCP 客户端 | api/_lib/pumpfun-mcp.js | 面向上游 pumpfun-claims-bot 的缓存 JSON-RPC 客户端 |
| 读取 API | api/agents/pumpfun.js | GET ?op=claims|graduations|token|creator,以及用于 SSE 事件流的 ?_handler=feed 和用于代币元数据的 ?_handler=metadata。身份验证:会话或 bearer(mcp/profile 范围)。 |
| 写入操作 | api/agents/pumpfun/[action].js | 动态分发器,支持 buy、sell、swap、launch、pay、portfolio、balances 和回购生命周期操作(create、accept、withdraw、distribute、extend_account、update_authority、update_buyback)。 |
| 定时爬虫 | api/cron/[name].js(name=pumpfun-signals) | 每 15 分钟扫描一次,并写入 pumpfun_signals 表;通过动态定时任务处理程序进行路由。 |
| 技能 | src/agent-skills-pumpfun-watch.js | recent-claims、token-intel、watch-start、watch-stop |
| 小组件 | src/widgets/pumpfun-feed.js | 实时卡片叠层 |
| 声誉 | api/agents/solana/[action].js(action=reputation) | 声誉摘要,响应中包含 pumpfun_signals 块 |
| 护照 | api/agents/solana/[action].js(action=card) | 公开护照卡片,Agent 卡片中包含 pumpfun 块 |
爬虫按 */15 * * * * 计划运行(参见 vercel.json),并写入 pumpfun_signals 表。通过 watch-start 订阅的 Agent 会通过现有协议总线响应传入事件——无需新增事件类型。
完整设计和配置见 docs/solana-pumpfun.md。
Pump.fun 集成
除上文介绍的 Solana 声誉信号外,平台还提供面向用户的 pump.fun 工具:
- Pump.fun Stream(已上线:three.ws/pumpfun):实时展示每次发行、交易、毕业和费用申领,并配有会做出反应、可选择进行旁白的 3D Agent,源文件位于 public/pumpfun.html。其中的 “Launch a coin” 按钮会打开 three.ws/launch 中的发行工具。
- 实时仪表板(已上线:three.ws/pump-live):实时追踪新代币,源文件位于 pages/pump-live.html。
- 技能 — pump-fun-skills/ 目录包含用于读取和操作 pump.fun 的 Agent 技能。
代币发行工具(USDC v2)
该发行工具使用 pump.fun 的 v2 USDC 报价载荷,并支持创建者与签名者分离——Agent 的所有者可以授权委托签名者发布代币,而无需暴露根密钥。
| 界面 | 路径 | 用途 |
|---|---|---|
| Web 界面 | /pumpfun | 单页发行工具(头像、代币代码、供应量、费用分成) |
| 准备 | POST /api/pump/launch-prep | 构建创建者与签名者分离的发行交易 |
| 报价 | POST /api/pump/quote-sdk | v2 USDC 报价(取代已弃用的 v1 路径) |
| 曲线 | GET /api/pump/curve | 用于预览发行前定价的联合曲线模拟 |
| 仪表板 | GET /api/pump/dashboard | 按创建者统计的发行历史和累计收入 |
| 统计数据 | GET /api/pump/helius-stats | 由 Helius 提供支持的单个代币持有者和交易次数统计 |
| 交易流 | GET /api/pump/trades-stream | 代币交易的 SSE 数据流 |
| 首次发行 | scripts/pump-launch-usdc.mjs | 用于铸造平台代币的首次 USDC 发行流程 |
Pump-swap 回购
回购流程允许 Agent 将来自 x402 付费端点的收入用于购买自身代币的 pump-swap,从而打通付费使用与代币持有者价值之间的闭环。请参阅 scripts/pump-launch-usdc.mjs 以及 docs/internal/ 中首次发行的自包含提示词。
Pump 可视化工具
three.ws/pump-visualizer 实时展示 pump.fun 活动,包含三种模式:
| 模式 | 显示内容 |
|---|---|
| 动态流 | 实时显示最新发行,包含封面图片和创建者历史 |
| 迁移 | 从曲线毕业并迁移至 pump-swap 池的代币 |
| 脉冲 | 叠加在图表上的实时交易脉冲 |
该可视化工具支持搜索、排序、实时脉冲和自动刷新。其数据由与定时爬虫相同的 Helius Webhook 和 JSON-RPC 客户端提供。
Pump.fun MCP 边缘工作进程
对于需要低延迟获取 pump.fun 数据的外部 Agent,workers/pump-fun-mcp/ 中提供了一个 Cloudflare Worker 版读取 API 镜像。使用 wrangler deploy 进行部署——该 Worker 会代理上游的 pumpfun-claims-bot,并在边缘处理 MCP tools/call 请求。
频道与 Telegram 桥接
| 端点 | 用途 |
|---|---|
GET /api/pump/channel-feed | 任意 Agent 频道页面的按创作者划分的活动动态 |
POST /api/pump/deliver-telegram | 用于交易和迁移提醒的可选 Telegram 桥接 |
POST /api/pump/accept-payment-prep / accept-payment-confirm | 回购流程的两步 USDC 交接 |
POST /api/pump/withdraw-prep / withdraw-confirm | 创作者费用提现,并进行签名验证 |
个性化 Mint 地址
该平台的 pump.fun 发布会使用 WASM 磨矿器预先磨矿个性化 Mint 地址,使代币地址以与品牌相关的后缀结尾(…pump、…ws 等)。请参阅 WASM 个性化磨矿器。
WASM 个性化磨矿器
three.ws/vanity-wallet 是一款基于浏览器、编译为 WebAssembly 的个性化地址磨矿器。几秒内即可生成带前缀(0xBEEF…)或符合指定模式的 EVM 地址,或生成 Solana 地址(base58 前缀 / 后缀,例如 …pump);所有操作都在客户端完成,不会将私钥泄露给任何服务。
| 模块 | 路径 | 作用 |
|---|---|---|
| WASM 磨矿器 | public/vanity-wallet.html | 通过 WebWorkers 进行多线程 secp256k1 密钥生成 |
| Solana 变体 | scripts/pump-vanity-grind.mjs | 用于 pump.fun Mint 个性化地址的服务端磨矿器 |
该平台的常见用途:创建带品牌标识的 Agent 钱包地址(例如名为 agent.eth 的 Agent 获取一个以 0xA6EF… 开头的地址),或创建 pump.fun 代币 Mint 个性化地址(例如以 pump 结尾)。
Solana 磨矿器为该平台的 pump.fun 发布提供支持——首批 USDC 代币发布会预先磨矿个性化 Mint 地址,以生成便于分享的代币地址。
Solana Mobile(Seeker)
three.ws 内置了接入 Web 应用的 Mobile Wallet Adapter(MWA),并提供面向 Solana Mobile dApp Store 的发布流程。
钱包检测优先级
在 Seeker / Saga 硬件上,应用优先使用由 seed vault 支持的签名方式——私钥绝不会离开安全元件。在标准 Android 或桌面设备上,应用会自动依次回退到 WalletConnect 和浏览器扩展钱包,无需更改代码。
MWA 为 Seeker 硬件带来的功能
- 使用 seed vault 签署 x402 USDC 付款,无需任何浏览器扩展
- 在应用内完成 Metaplex Core Agent Mint(Solana 链上注册),无需离开应用
- 使用硬件保护的签名进行 SPL Memo 证明(信誉和验证)
- 在芯片层而非软件层进行身份验证的 SIWS(Sign-In with Solana)会话
发布流程
- dApp Store 商品详情文案和发布配置位于
solana-mobile/publish/ - 发布流程脚本会处理构建 → 签名 → 提交 APK,以更新 dApp Store
- 商品详情以 Seeker 为首要目标,并兼容 Saga Gen 1 和 Gen 2
愿景
总有一天,创建你的 Agent 会像自拍一样简单。
将摄像头对准自己,或任何人,看着一个完整的 3D 虚拟形象逐渐出现:你的脸、你的声音、你的个性,在浏览器中鲜活呈现。这个虚拟形象会成为一个拥有记忆和技能的 Agent,并在链上注册——作为 EVM 上的 ERC-8004 代币,或 Solana 上的 Metaplex Core 资产——永久存在,任何人都可以永远验证。无需 3D 软件。无需设置钱包。无需上传。只需一张照片和一个名字。
这就是 three.ws 的发展方向:在一个流程中实现 照片 → 虚拟形象 → Agent → 链上身份。基础设施已经就绪——查看器、运行时、合约、嵌入层。接下来要做的是弥合一张人物照片与一个能在互联网上永久存在、可拥有、可嵌入的鲜活个体之间的差距。
路线图
three.ws 分五个阶段推出。每个阶段都会弥合当前平台与最终愿景之间的特定差距:任何人都可以铸造自己的 3D Agent,在链上拥有它,并将它嵌入互联网上的任何地方。
| 阶段 | 主题 | 状态 |
|---|---|---|
| 0 | 平台基础(查看器、运行时、ERC-8004 + Metaplex Core 身份、嵌入层) | ✅ 已上线 |
| 1 | 自拍 → 虚拟形象引擎(拍摄 3 张照片、托管推理) | 🟡 进行中:拍摄、重建后端、骨骼绑定、R2 存储和草稿铸造已端到端接通;相似度保真度仍在开发中 |
| 2 | Agent 个性化 + 声音克隆 | 🟡 进行中 — 声音克隆、角色设定、记忆种子已在 /demos 下发布;下一步是集成到主流程 |
| 3 | 链上经济(Agent 代币、声誉市场、版税) | 🟡 进行中:联合曲线模拟、EAS 声誉查看器、0xsplits + EAS SDK 已接入;付费技能调用会累积每次调用的技能版税(royalty_ledger);下一步是合约 + 审计 |
| 4 | 开放推理网络(去中心化 GPU 层) | 🟡 核心功能已上线:开放的节点运营商客户端(CPU + CUDA 镜像)+ /api/nodes 任务队列,已发布签名且由服务器重新计算的回执;Livepeer 联邦功能通过标志控制 |
| 5 | 原生小组件(主屏幕和桌面上的 Agent) | 🟡 进行中:Glance 已发布卡片端点(JSON、SVG、PNG、Adaptive Card)、Windows 11 小组件(从 PWA 清单安装,无需应用商店)、<agent-glance> 元素,以及 Android 主屏幕小组件(应用版本 1.1.0,通过 /glance 链接,使用独立且可撤销的令牌);接下来是 macOS 和 iOS |
阶段 0 — 基础 (已上线)
完整技术栈已在 three.ws 上线:WebGL 查看器、大模型 Agent 运行时、ERC-8004 身份合约(EVM)和 Metaplex Core 铸造(Solana)、OAuth 2.1 服务、MCP 端点,以及 <agent-3d> Web 组件。如今任何人都可以注册 Agent——但虚拟形象仍须来自 3D 艺术家或第三方工具。
可用功能: 模型上传、Agent 运行时、链上注册、嵌入、签名操作历史记录、声誉评分。 尚不可用: 尚无从真实人脸自动生成可用 3D 虚拟形象的途径。
阶段 1 — 自拍照 → Avatar 引擎
**目标:**任何用户拍摄 3 张自拍照(左侧、正面、右侧),并在 60 秒内获得一个已绑定骨骼、可制作动画的 3D Avatar。
交付内容
- 移动端优先的拍摄 UX,带有实时质量检测(光线、取景、模糊)。已交付:src/selfie-capture.js、src/selfie-gates.js
- 多视角面部重建流水线(在基础身体网格上拟合特征点)。已交付:workers/avatar-reconstruction 会将绑定骨骼的模板头部变形,以匹配人物的 468 个 MediaPipe 特征点,并将照片投射到其皮肤上
- 用于在一分钟内完成生成的托管推理工作器。已在 Cloud Run 上交付:提交、作业状态、骨骼绑定链,以及未完成标签页的兜底处理均已上线(见下文重建后端)
- 将输出直接写入 R2,并铸造为草稿 Agent 代币:EVM 上的 ERC-8004,Solana 上的 Metaplex Core 资产。已交付:api/_lib/reconstruct-finalize.js
开放方向: likeness 保真度,通过 Identity Shape Error 衡量,而非目测。workers/avatar-reconstruction/eval 中包含该指标、参考集和对抗集;项目计划见 docs/avatar-fidelity-program.md。
重建后端:自拍照 → 已绑定骨骼的 GLB
拍摄内容从头到尾实际经过的路径。每个环节都是真实服务;此处没有任何模拟实现。
| 步骤 | 位置 | 处理内容 |
|---|---|---|
| 1. 拍摄 + 检测 | src/selfie-pipeline.js | 拍摄 3 张照片(正面、左侧、右侧)。正面照片必须包含人脸;其他检测项均为警告,用户可忽略并继续。每张照片都会分离背景并重新构图为头肩方形图像,然后再发送。 |
| 2. 提交 | POST /api/avatars/reconstruct | 解析服务提供方(优先使用平台凭据,然后使用调用方自己的密钥)、提交请求,并写入一条 avatar_regen_jobs 记录。提交失败并切换到下一个服务提供方时,不会重复收费。 |
| 3. 生成 | Cloud Run 工作器 | 工作器将头部几何和皮肤拟合到照片,并返回已绑定骨骼的 GLB。无法使用的拍摄内容会被归类为输入错误返回,因此客户端可以告知用户需要修正什么,而不是只说“重试”。 |
| 4. 骨骼绑定链 | api/_lib/reconstruct-finalize.js | 如果收到的网格没有骨架,就会发送给骨骼绑定工作器。如果骨骼绑定不可用或失败,则会交付标记为 unrigged 的裸网格:用户始终能获得结果。 |
| 5. 存储 + 注册 | R2、avatars、forge_creations | 对 GLB 进行规范化(骨骼名称、向上轴),存储到 R2,并注册到平台其他部分使用的同一 Forge 存储中,以便图库、嵌入内容和来源信息都能像处理其他创作一样处理拍摄内容。 |
| 6. 铸造草稿 | api/_lib/draft-mint.js | 尽力创建草稿 Agent 身份。铸造过程的小故障不会导致已交付的 Avatar 失效。 |
| 7. 轮询 | GET /api/avatars/regenerate-status?jobId=… | 从浏览器驱动步骤 4 到 6,并报告 queued / running / rigging / done / failed 状态。 |
| 8. 兜底处理 | api/cron/reconstruct-sweep.js | 关闭标签页后,浏览器轮询会停止。定期扫描任务会在服务器端执行相同的收尾阶段,因此即使拍摄流程被中途放弃,结果仍会进入用户的资料库。 |
计算资源要求
- 推理使用 A100/H100 级 GPU,按上线时每天约 10k 个 Avatar 的规模配置
- 用于在精选数据集上微调风格化人脸拟合器的训练预算
- 为高分辨率 GLB 交付扩展 CDN 出口带宽
**验证:**1,000 名测试用户端到端完成拍摄,并铸造代表自己的链上 Agent,likeness 评分 ≥4/5。
阶段 2 — Agent 个性化
目标: 头像不只是_你_的形象——Agent 的_行为_也要像你。
交付内容
- 声音克隆(30+ 秒语音 → ElevenLabs 自定义语音,并绑定到 Agent)
- 从简短的引导访谈中提取个性(语气、词汇、兴趣)
- 在用户明确同意的情况下,从关联账户(X、GitHub、Farcaster)导入记忆
- 为每个 Agent 微调系统提示词,将其存储在清单中、签名并固定到 IPFS
**验证:**用户会回来与自己的 Agent 交谈;铸造的 Agent 第 2 周留存率 ≥30%。
阶段 3 — 链上经济
**目标:**Agent 是 EVM 和 Solana 上真正的经济对象,而不只是收藏品。
交付内容
- Agent 代币 — 通过 ERC-8004 铸造,并采用联合曲线定价或公平发行选项
- 声誉市场 — 对 Agent 进行质押,根据其行动历史获利(扩展
ReputationRegistry.sol) - 技能版税 — 技能作者通过 EIP-7710 委托权限按调用收取费用
- Agent 间支付 — Agent 通过其委托签名钱包自主交易
- 订阅和 DCA — 向创作者进行周期性链上支付(定时任务基础设施已就绪)
资金需求
- 对声誉、版税和委托合约进行智能合约审计(多家审计机构)
- 为 Agent 代币发行提供流动性
- 覆盖 Base、Solana 和其他 EVM 链的索引器基础设施
**验证:**铸造的 Agent ≥1,000 个,且具有活跃的链上声誉;累计支付技能版税 ≥$X。
阶段 4 — 开放推理网络
**目标:**让 Agent 推理不再依赖单一提供商。任何人都可以运行节点;Agent 通过链上支付向节点购买计算服务。
交付内容
- Agent 推理开放协议(模型权重、GPU 运行时、签名响应)
- 节点运营方客户端(Docker + GPU 驱动程序),支持链上注册
- 推理任务链上结算 — 按 Token 付费,并提供加密回执
- 在适当情况下与现有去中心化计算网络互联
**目前已交付:**任何人现在都可以运行节点。packages/node-operator/ 客户端使用其自身 Solana ed25519 密钥的签名向协调器注册(无需担心共享密钥泄露),从 /api/nodes 队列领取任务,使用 CPU 或 CUDA 上运行的真实开放模型执行任务,并返回对规范回执的签名。该回执绑定任务、模型以及输入/输出哈希;协调器会在接受前重新计算并验证。该包中的 npm run e2e 可针对真实处理程序验证整个流程。/api/x402/llm-proxy 上的付费推理通过 x402 付费端点封装器上的计量钩子结算;POST /api/x402/inference-verify 会发布平台签名密钥,以便离线验证回执。接口协议:specs/inference-nodes.md。运营方指南:docs/inference-node-operator.md。
计算资源需求
- 为早期节点运营方提供启动 GPU 额度
- 加密经济安全模型(罚没、验证者集合)——研究和审计预算
**验证:**生产环境中由独立节点运营方提供服务的 Agent 流量 ≥50%;延迟与中心化推理持平。
阶段 5:原生小组件
**目标:**你的 Agent 常驻主屏幕,而不只是浏览器标签页。一个一目了然的小组件,显示你拥有的 Agent、与之相关的一个实时数据,并可通过一次点击返回应用。
这与 three.ws/widgets 上的可嵌入网页小组件是不同的产品;后者是在他人的网页上放置 3D Agent。阶段 5 聚焦于操作系统界面:Android 主屏幕、Windows 11 小组件面板,以及 macOS 和 iOS 小组件图库。
为何这是下一步。 Android 外壳已经存在。three.ws 以签名的 Trusted Web Activity(ws.three.app)形式发布到 Solana dApp Store,Digital Asset Links 已通过线上发布密钥验证,深层链接、快捷方式和分享面板也都已能打开应用。小组件是让应用值得在访问间隙继续保留安装的关键。渲染端也已就绪:POST /api/render/avatar-clip 已能通过无头渲染器生成任意头像的姿态调整、镜头取景 PNG,这正是小组件所需的图像,因为这些平台上的小组件运行时都无法执行 WebGL。
交付顺序
| # | 平台 | 所需外壳 | 状态 |
|---|---|---|---|
| 1 | Windows 11 小组件面板 | 无 | **已发布。**已安装的 PWA 声明了 widgets 清单成员和 Adaptive Card 模板(/api/glance/template);服务工作线程(public/glance-sw.js)会响应 widgetinstall、widgetresume、widgetclick 和 periodicsync |
| 2 | 任意网页 | 无 | 已发布。<agent-glance>(public/glance/element.js),以及一个 SVG 或 PNG URL,可用于 README、Slack 展开预览或任意 <img> |
| 3 | Android 主屏幕 | 已发布(ws.three.app) | **已在应用 1.1.0 中发布。**在 Bubblewrap 项目上叠加原生 AppWidgetProvider(solana-mobile/android-overlay),提供 2x2 和 4x2 / 4x3 布局;通过 WorkManager 大约每 30 分钟从 GET /api/glance/mine?format=png 刷新;手机离线时保留上次卡片;点击后通过深层链接进入 TWA。它使用专属的 glw_ 小组件令牌,可从 /glance(“关联此手机”)关联,并可随时在此撤销 |
| 4 | macOS | 小型 SwiftUI 宿主应用 | WidgetKit 扩展和菜单栏伴侣应用;需要 Apple Developer 账户 |
| 5 | iOS | App Store 封装应用 | 与 macOS 共用同一个 WidgetKit 扩展目标;需先发布 iOS 应用 |
交付内容
- ✅ 可缓存的卡片端点 /api/glance/card,以 JSON、SVG、PNG 和 Adaptive Card 格式提供单个模型;另有 /api/glance/mine 提供所有者自己的 Agent,通过会话 Cookie 或小组件专属的不记名令牌进行身份验证,并将每种状态(已登出、小组件未关联、尚无 Agent)都呈现为设计好的卡片,而非 401。规范:specs/GLANCE_CARD.md
- ✅ 通过 PWA 清单支持 Windows 11 小组件,无需单独提交到应用商店即可安装;机器离线时退化为最后缓存的卡片,无人登录时则退化为登录卡片
- ✅ 值得占据主屏幕位置的卡片内容:Agent、一个实时数值(过去 24 小时的操作数)、最近一次操作,以及直接返回应用的方式
- ✅ /glance 上的演示场和安装指南,以及带有终端渲染器的 npm 客户端 @three-ws/agent-glance
- ✅ Android 应用小组件提供两种布局(2x2 和 4x2 / 4x3),由 WorkManager 按照考虑电池状态的计划刷新;设备离线时退化为最后缓存的卡片
- 面向 Apple 平台的原生外壳,这也是构建 iOS 版 three.ws 的前提
**验证:**从 Android 应用安装的小组件无需打开应用即可更新,在重启和飞行模式下仍能正常工作,点击后会将用户带回正确的屏幕。Apple 部分是在同一端点之上构建一个 WidgetKit 扩展,由 Mac 菜单栏应用和 iPhone 应用共用;npm run check:apple-widget 可在没有 Mac 的情况下验证这两个 Xcode 项目及其接口约定。产品文档:docs/native-widgets.md。源文件:apple/。
我们需要什么
| 资源 | 用途 | 阶段 |
|---|---|---|
| 推理 GPU | 头像生成、Agent 对话 | 1、2 |
| 训练算力 | 微调后的人脸拟合器、语音模型 | 1、2 |
| 智能合约审计 | 声誉、版税、委托合约 | 3 |
| 代币发行流动性 | Agent 代币市场 | 3 |
| 索引器基础设施 | 多链爬取与声誉聚合 | 3 |
| 节点运营商额度 | 启动开源推理网络 | 4 |
| 工程人员 | 捕获流水线、合约、索引器、运营 | 1–4 |
| Apple 开发者账户 | macOS 和 iOS 小组件宿主应用、App Store 审核 | 5 |
阶段 1 和 2 将解锁面向消费者的愿景——任何人都能拥有一个自己的 Agent。阶段 3 和 4 将解锁链上愿景——这些 Agent 是真正的经济参与者,无需依赖任何一家公司即可持续运行。实现这一愿景两者缺一不可;目前两者都尚未获得资金支持。
如果你想支持这个项目——提供算力额度、资助、合作或贡献——请提交 issue,或通过 three.ws 联系我们。
自拍重建流水线(阶段 1)
任何人拍摄 3 张自拍照(左、中、右),不到一分钟即可获得一个带骨骼绑定、可动画化的 3D 头像。该流水线采用原生实现,不依赖第三方黑盒。
| 模块 | 路径 | 作用 |
|---|---|---|
| 拍摄 UX | src/selfie-capture.js | 移动端优先的 3 张拍摄流程,带实时质量检查(光线、取景、模糊) |
| 流水线 | src/selfie-pipeline.js | 多视角拟合 → FLAME / 3DMM 人脸 → 基础身体网格 → 带骨骼绑定的 GLB |
| 沙盒路由 | /creating | 独立的重建测试台,与主流程解耦 |
| 输出 | Cloudflare R2 | 经过 Meshopt 压缩的 GLB,固定至 IPFS 并铸造为 Agent 代币草案——在 EVM 上使用 ERC-8004,或在 Solana 上使用 Metaplex Core |
重建推理运行在与 Agent 运行时相同的 Cloud Run 处理程序池上;对于 GPU 密集型步骤,还可以选择卸载到 Livepeer Inference Network(见下文)。
语音与角色中心(第 2 阶段)
虚拟形象不只是_你_——Agent 的_行为举止_也会像你。语音与角色中心收集各项输入,让一个躯体拥有鲜明个性。
| 界面 | 路径 | 用途 |
|---|---|---|
| 角色提取 | api/persona/extract.js | 简短的入门访谈 → 语气、词汇和兴趣档案 |
| 角色预览 | api/persona/preview.js | 保存前,用测试提示词试用提取出的角色 |
| 角色密钥 | scripts/generate-persona-key.mjs | 每个 Agent 的签名密钥和角色 SSO 设置 |
| 语音克隆模态框 | src/voice/voice-clone-modal.js | 录制 30 秒以上音频或上传 → ElevenLabs 自定义语音(自带密钥或平台密钥,每天最多克隆 3 次),并绑定到 Agent |
| 对话控制器 | src/voice/talk-controller.js | 按住说话语音循环:麦克风 STT(Riva 或浏览器)→ /api/chat → ElevenLabs/Edge TTS |
| ARKit 混合变形 | src/voice/arkit-blendshapes.js | 标准 ARKit-52 变形表 |
| 唇形同步驱动器 | src/voice/lipsync-driver.js | Web Audio 分析器 → 每帧混合变形权重 |
| 虚拟形象变形目标 | src/voice/avatar-morph-target.js | 将 ARKit 混合变形逐个绑定到已加载的 GLB 模型 |
| 虚拟形象快照 | src/voice/avatar-snapshot.js | 捕获渲染时的姿势,用于缩略图和 OG 卡片 |
| 角色文档 | docs/persona-hub.md | 完整设计与入门流程 |
记忆种子扩展(X、GitHub、Farcaster)会在创建时将内容写入 Agent 的记忆存储,且须获得用户明确同意——详见 docs/persona-hub.md。
每个 Agent 的微调系统提示词会存储在清单中,经过签名并固定到 IPFS——角色由此成为 Agent 可验证的链上身份组成部分。
Livepeer 推理网络(第 4 阶段)
three.ws 接入 Livepeer 去中心化 GPU 网络,作为平台自有开放推理网络的替代推理后端。
- 开放协议:模型权重、GPU 运行时、签名响应
- 链上结算:按 Token 付费,附带加密回执,并由上文所述的同一套 x402 通道处理
- 节点运营商客户端(Docker + GPU 驱动程序),支持链上注册
- 在适当情况下与现有去中心化计算网络组成联邦
联邦功能已在功能开关后启用:设置 LIVEPEER_FEDERATION_ENABLED 后,文生图链路可以将一种 GPU 作业类别路由到 Livepeer 网关(操作手册:docs/ops/livepeer-federation.md)。目标:生产环境中由独立节点运营商提供服务的 Agent 流量达到 ≥50%,且延迟与集中式推理相当。
新闻与内容聚合
新闻文章存放在代码仓库中(data/rss/items.json),并随部署一同发布;此前的站内 CMS 已随管理面板移除。
| 页面 | 路径 | 用途 |
|---|---|---|
| 公开列表 | /news | 带永久链接的封面图片网格 |
| 文章 | /news/<slug> | 服务端渲染的文章,带 OG 卡片 |
| RSS | /rss/announcements.xml | 符合标准的订阅源,供 HackerNoon 自动导入 |
安全加固
该平台已针对 OWASP 十大风险以及一系列 Agent 付款和跨链身份相关问题进行了加固。
| 控制措施 | 位置 |
|---|---|
| SSRF 防护 | Agent 运行时和技能发出的所有出站 fetch() 请求都会经过 SSRF 允许列表过滤器(api/_lib/safe-fetch.js) |
| CSRF 防护 | 更改状态的端点要求进行 Origin + Sec-Fetch-Site 检查;仅使用 bearer 的路径除外 |
| 来源标头绑定 | iframe 桥接会从第一条经过身份验证的消息中锁定父级来源,并忽略之后来自不同来源的消息 |
| 失败时默认拒绝的定时任务 | 如果缺少身份验证令牌,定时任务端点将默认拒绝,而不会静默跳过 |
| 幂等令牌 | x402 付费端点要求提供幂等键,以防重试时重复扣费 |
| 嵌入策略 | 每个 Agent 的 iframe 来源允许列表(/api/agents/:id/embed-policy)控制无边框嵌入 |
| 速率限制 | 每个公开端点都通过 Upstash Redis 按用户、API 密钥和 IP 分别进行限流 |
| JWT 密钥轮换 | JWT_KID 允许轮换签名密钥,而不会使进行中的会话失效 |
| Bcrypt 成本 | 可通过 PASSWORD_ROUNDS 调整(默认为 11) |
| 审计签名 | 每项 Agent 操作都使用委托签名密钥签名,并串联记录到每个 Agent 的操作日志中 |
数据库架构
Postgres 架构(api/_lib/schema.sql)完全支持幂等执行——每个 CREATE TABLE 都使用 IF NOT EXISTS,因此该文件可在任何环境中安全地重复运行。各功能的迁移文件位于 api/_lib/migrations/ 下,并通过 npm run db:migrate 应用。
该架构目前定义了约 53 张表,分组如下。列出的字段是最常查询的字段;请以源文件为准。
核心身份与内容
users (id, email, password_hash, display_name, avatar_url, plan, wallet_address, deleted_at)
avatars (id, owner_id, slug, name, description, storage_key, visibility,
tags, checksum_sha256, version, deleted_at)
sessions (id, user_id, token_hash, user_agent, ip, expires_at, revoked_at)
api_keys (id, user_id, prefix, token_hash, scope, expires_at, revoked_at)
user_prefs (user_id, key, value, updated_at)
agent_identities (id, user_id, name, description, avatar_id, skills,
meta, wallet_address, erc8004_agent_id, deleted_at)
agent_actions (id, agent_id, type, payload, source_skill,
signature, signer_address, created_at)
agent_memories (id, agent_id, type, content, tags, context,
salience, expires_at, created_at)
OAuth 2.1
oauth_clients (client_id, client_secret_hash, redirect_uris, grant_types, scope, ...)
oauth_auth_codes (code, client_id, user_id, code_challenge, expires_at, consumed_at)
oauth_refresh_tokens (token_hash, client_id, user_id, scope, expires_at, revoked_at, ...)
钱包与签名
user_wallets (user_id, address, chain_type, chain_id, is_primary)
siwe_nonces (nonce, address, issued_at, expires_at, consumed_at)
siws_nonces (same shape for Solana)
gate_nonces (nonce, scene_gate_id, issued_at, consumed_at)
scene_gates (id, owner_id, scope, policy, created_at)
csrf_tokens (token, user_id, issued_at, consumed_at)
身份验证扩展
email_verifications (token_hash, user_id, expires_at, consumed_at)
password_resets (token_hash, user_id, expires_at, consumed_at)
social_connections (user_id, provider, provider_user_id, access_token_hash, ...)
小组件
widgets (id, owner_id, kind, config, public_slug, ...)
widget_views (widget_id, ip_hash, user_agent_hash, viewed_at)
ERC-8004 / EVM 索引
erc8004_agents_index (chain_id, agent_id, owner, token_uri, ...)
erc8004_crawl_cursor (chain_id, last_block, updated_at)
indexer_state (key, value, updated_at)
agent_registrations_pending (id, user_id, chain_id, typed_data, signed_payload, status, ...)
agent_delegations (agent_id, delegate, scope, expires_at, ...)
Solana 证明与注册
solana_attestations (asset_pubkey, kind, payload, signer, network, slot, sig)
solana_attestations_cursor (network, last_slot, updated_at)
solana_credentials (user_id, asset_pubkey, network, role)
pumpfun_signals (asset_pubkey, signal_kind, payload, observed_at)
pumpfun_graduations (mint, creator, graduated_at, amm_pool, ...)
市场、技能与版税
marketplace_skills (id, skill_uri, owner_id, title, description, price_usdc, ...)
skill_installs (skill_id, agent_id, installed_at)
skill_purchases (skill_id, buyer_user_id, price_usdc, settled_at, tx_hash)
skill_ratings (skill_id, rater_user_id, stars, comment, created_at)
agent_skill_prices (agent_id, skill_id, override_price_usdc)
royalty_ledger (id, owner_id, source, amount_usdc, settled_at, tx_hash)
plugins (id, owner_id, manifest, public_slug, ...)
订阅、DCA 与付款
subscriptions (id, user_id, plan_id, status, current_period_end, ...)
subscription_plans (id, owner_id, name, price_usd, cadence)
subscription_payments (subscription_id, status, amount_usdc, tx_hash, attempted_at)
creator_subscriptions (id, subscriber_user_id, plan_id, status, current_period_end, ...)
agent_subscriptions (id, agent_id, subscriber_user_id, status, ...)
agent_payments (id, agent_id, payer_user_id, amount_usdc, status, tx_hash)
agent_payment_intents (id, agent_id, status, payload, created_at)
plan_payment_intents (id, plan_id, status, payload, created_at)
dca_strategies (id, owner_id, source_token, target_token, cadence, amount, status)
dca_executions (strategy_id, status, amount, tx_hash, executed_at)
purchase_events (id, kind, payload, observed_at)
purchase_receipts (purchase_id, receipt_json, settled_at)
使用量与配额
usage_events (user_id, api_key_id, client_id, avatar_id, kind, tool, status, bytes, latency_ms)
plan_quotas (plan, max_avatars, max_bytes_per_avatar, max_total_bytes)
构建与部署
npm 脚本
| 命令 | 说明 |
|---|---|
npm run dev | 在端口 3000 上运行带 HMR 的 Vite 开发服务器 |
npm run build | 将生产版本构建到 dist/ |
npm run build:lib | 将 <agent-3d> Web 组件库构建到 dist-lib/ |
npm run build:artifact | 构建独立的 Claude 工件查看器包 |
npm run build:all | 聊天构建,然后并行运行 build + build:lib + build:rider |
npm run publish:lib | 布置 /agent-3d/ CDN:已发布版本来自存档,渠道来自构建 |
npm run release:lib | 发布新的 <agent-3d> 版本:将其字节归档一次,并记录其 SRI 哈希 |
npm run test | Vitest 单元测试套件 + Playwright 端到端测试套件 |
npm run test:e2e | 仅运行 Playwright 端到端测试套件 |
npm run verify | Prettier 检查 + Vite 构建(部署前检查) |
npm run format | 使用 Prettier 格式化(整个仓库) |
npm run deploy:gcp | 部署到 Cloud Run 生产环境:check:dist → db:check → gcloud builds submit → 清除 CDN |
npm run clean | 删除 dist/ 和 dist-lib/ |
npm run fetch-animations | 下载动画片段资源 |
npm run generate-icons | 生成 PWA 图标集 |
npm run db:migrate | 应用 scripts/migrations/ 中的 Postgres 迁移 |
npm run db:status | 显示待处理的 Postgres 迁移 |
npm run seed:skills | 使用 skills-manifest.js 初始化技能注册表 |
npm run install:sdk | 安装并构建 agent-payments-sdk,并在本地链接 |
npm run validate:cards | 验证 src/agents/ 中的 Agent 定义卡片 |
npm run pump:smoke | 运行 pump.fun 生命周期冒烟测试 |
Claude CLI
scripts/claude.sh(别名为 npm run claude)封装了上述 npm 脚本,并在破坏性命令(deploy、db-migrate)执行前提示确认。适用于需要安全防护措施,或需要为 Agent 提供统一操作入口的场景。
npm run claude -- <command>
# or
./scripts/claude.sh <command>
| 命令 | 封装的命令 |
|---|---|
install-sdk | npm run install:sdk |
validate-cards | npm run validate:cards |
db-migrate | npm run db:migrate(需确认) |
db-status | npm run db:status |
pump-smoke-test | npm run pump:smoke |
seed-skills | npm run seed:skills |
test | npm run test |
format | npm run format |
clean | npm run clean |
deploy | npm run deploy(需确认) |
deploy-agent <name> | 将 Agent 打包为可分发的 zip 文件 |
help | 列出所有命令 |
生产环境部署(Google Cloud Run)
生产环境运行在 Google Cloud Run(three-ws-api,区域 us-central1):一个 Express 容器(server/index.mjs)提供静态前端、vercel.json 路由表以及所有 api/** 处理程序,并由全球 HTTPS 负载均衡器 + Cloud CDN 提供服务。部署分为两步:在干净的部署 worktree 中先构建,再提交(npm run prep:worktree -- --apply):
npm run build:gcp # the full, order-dependent build chain (lib, avatar SDK, chat, frontend, checks)
npm run deploy:gcp # check:dist + check:pages, then the gated submit, cron sync, CDN purge, smoke test
npm run deploy:gcp 会运行 deploy:gcp:submit(迁移检查 db:check 以及上传和导入检查,然后运行 gcloud builds submit --config server/cloudbuild.yaml),接着运行 deploy:gcp:sync-crons,为新声明的 cron 创建 Cloud Scheduler 作业,然后同步清除 CDN 缓存并运行 smoke:prod。npm run deploy:gcp:full 可用一条命令完成构建和部署。路由、缓存标头和 cron 计划定义在 vercel.json 中,服务端会在运行时读取该文件。计划作业(每个作业对应 vercel.json 的 crons 数组中的一个条目)在 Cloud Scheduler 上运行(由 scripts/create-gcp-scheduler.mjs 配置);GPU 推理工作进程作为独立的 Cloud Run 服务运行。完整运维手册(负载均衡器、DNS/TLS、环境变量、回滚、恢复):docs/ops/gcp-production.md。
环境变量保存在 Cloud Run 服务上,而非 .env 文件中——使用 gcloud run services describe/update three-ws-api --region us-central1 查看或更新。完整列表请参阅环境变量。
自托管
传统服务器部署方式:
- 构建:
npm run build→dist/ - 将
dist/作为静态文件提供服务(nginx、Caddy、Express) - 通过 Node.js 运行
api/端点(使用 server/index.mjs 中的 Express 容器提供服务,与生产环境相同) - 连接到 Postgres(Neon 或自托管)
- 连接到兼容 S3 的存储(R2、MinIO、AWS S3)
- 使用 node-cron 或 systemd 计时器安排 cron 作业
最简 nginx 配置:
server {
listen 80;
root /var/www/3d-agent/dist;
index index.html;
location /api {
proxy_pass http://localhost:3001;
}
location / {
try_files $uri $uri/ /index.html;
}
}
版本控制与兼容性
three.ws 遵循 语义化版本规范。权威版本号位于 package.json;当前版本会显示在本 README 顶部的徽章中。
“稳定”的含义
| Surface | 稳定性 | 版本控制 |
|---|---|---|
<agent-3d> Web 组件的属性、JS API 和事件 | 稳定 — 破坏性变更会提升 semver 主版本 | 在 <script> 标签中固定主版本,例如 /agent-3d/1.x/agent-3d.js |
agent-manifest/0.2 JSON 架构 | 稳定,适用于 0.2.x;0.3 将尽可能只增加内容 | 由每个清单中的 spec 字段标明 |
公共 REST API(/api/agents、/api/widgets、/api/avatars、/api/chat) | 稳定 — 仅进行无需提升主版本的增量变更 | 记录在 /openapi.json 中的 OpenAPI 文档 |
OAuth 2.1 端点(/oauth/*、/.well-known/*) | 稳定 — 由相关 RFC 冻结 | 不适用 |
POST /api/mcp 上的 MCP 接口 | 稳定 — 固定使用协议版本 2025-06-18;工具目录仅作增量扩充 | 每个响应中都包含协议版本 |
内部处理程序、api/_lib/ 和 api/_mcp/ 下的辅助函数 | 不稳定 — 不提供兼容性保证 | 可能在不同版本间重构 |
contracts/ 中的 Solidity 合约 | 按部署保持稳定 — 地址请参见 contracts/DEPLOYMENTS.md | 新增链时添加行;现有部署不可变 |
固定版本建议
- 对于生产环境中的嵌入,固定到补丁版本(
/agent-3d/1.5.2/agent-3d.js),并谨慎升级。 - 对于原型,固定到主版本(
/agent-3d/1.x/agent-3d.js),以便自动获取错误修复。 - 对于 Agent 清单,始终设置
spec字段 — 加载器会拒绝未知spec的清单,而不会自行猜测。 - 对于 API 使用方,请求
application/json并检查响应的version标头(每个端点都会提供)。
弃用政策。 稳定接口会在变更日志中发布弃用通知,并至少在一个次要版本中发出运行时警告,然后才会移除。上表中标记为不稳定的内容可能随时变更。
环境变量
必需(后端)
# App
PUBLIC_APP_ORIGIN=https://three.ws # No trailing slash
# Database
DATABASE_URL=postgres://user:pass@host/db # Neon or any Postgres 15+
# Object storage (Cloudflare R2 or S3-compatible)
S3_ENDPOINT=https://...
S3_ACCESS_KEY_ID=...
S3_SECRET_ACCESS_KEY=...
S3_BUCKET=3d-agent-avatars
S3_PUBLIC_DOMAIN=https://pub-<hash>.r2.dev # bucket's public origin (R2 dev domain)
# Public model URLs are served through the first-party CDN instead of that
# origin: https://three.ws/cdn/<r2-key> (api/cdn-object.js). The r2.dev domain is
# Cloudflare rate-limited and answers CORS with an exact-origin allowlist, so
# prefer /cdn/ in anything user- or developer-facing.
# Redis (rate limiting)
UPSTASH_REDIS_REST_URL=...
UPSTASH_REDIS_REST_TOKEN=...
# Auth
JWT_SECRET=<base64> # openssl rand -base64 64
JWT_KID=k1 # Key ID (rotate by incrementing)
PASSWORD_ROUNDS=11 # bcrypt cost factor
# LLM
ANTHROPIC_API_KEY=sk-ant-...
CHAT_MODEL=claude-sonnet-4-6
CHAT_MAX_TOKENS=1024
可选(后端)
# Email (required for registration flow)
RESEND_API_KEY=...
# Error monitoring
SENTRY_DSN=...
# Privy (social/embedded wallets)
PRIVY_APP_ID=...
PRIVY_APP_SECRET=...
# Avatar regeneration
AVATURN_API_KEY=...
AVATAR_REGEN_PROVIDER=none # none | avaturn
# EIP-7710 permissions relayer
PERMISSIONS_RELAYER_ENABLED=false
AGENT_RELAYER_KEY=0x...
AGENT_RELAYER_ADDRESS=0x...
# Per-chain RPC URLs (add chains as needed)
RPC_URL_84532=https://sepolia.base.org
RPC_URL_8453=https://mainnet.base.org
# IPFS pinning
PINATA_JWT=...
WEB3_STORAGE_TOKEN=... # Fallback
# Coin Communities chat (reads work without keys; posting needs these)
CC_API_KEY=... # read + WebSocket tickets
CC_SERVER_KEY=... # server-attributed posts (optional)
CC_SERVER_SECRET=...
多人游戏/游戏服务器。
multiplayer/中的 Colyseus 服务读取自己的配置 — 游戏准入门控使用PLAY_GATE_MINT/PLAY_GATE_MIN和HOLDER_PASS_SECRET,游戏内 $THREE 经济系统使用GAME_TOKEN_MINT/GAME_TOKEN_TREASURY/GAME_TOKEN_BURN/GAME_TOKEN_SECRET。这些变量属于游戏服务器的环境,而非 Cloud Run 处理程序池。
可选(前端,前缀为 VITE_)
VITE_CHARACTER_STUDIO_URL=https://studio.three.ws # Avatar builder iframe origin
VITE_PRIVY_APP_ID=...
VITE_AVATURN_EDITOR_URL=https://editor.avaturn.me/
VITE_AVATURN_DEVELOPER_ID=...
测试
npm run test 会运行 Vitest(单元测试 + 集成测试),随后运行 Playwright(端到端测试)。API 测试会对数据库和身份验证层进行桩接;前端测试会对查看器进行桩接。项目目前在 tests/、tests/api/、tests/src/ 和 tests/e2e/ 中共有约 1,500 个测试文件。
npm run test # Vitest then Playwright
npx vitest run tests/api/agents.test.js # Single Vitest file
npm run test:e2e # Playwright only
npm run verify # Prettier check + Vite build
Vitest 代表性测试覆盖范围(完整清单见 tests/):
Playwright 端到端冒烟测试
浏览器驱动的冒烟测试位于 tests/e2e/,针对本地开发堆栈(Vite + api/ 处理程序)运行。它们覆盖 Vitest 无法涵盖的用户可见流程。
| 冒烟测试 | 测试内容 |
|---|---|
| tests/e2e/club.spec.js | /club 场馆、HDRI 加载以及冷启动时间预算内的音频会话 |
运行 npx playwright test(或 npm run test:e2e)。配置位于 playwright.config.js;结果位于 test-results/(已加入 gitignore)。
智能合约
智能合约测试位于 contracts/test/,通过 Foundry 运行:
cd contracts && forge test
多链工厂和支付合约的 CREATE2 靓号地址搜索记录在 contracts/DEPLOYMENTS.md 中。
常见问题与故障排查
使用 three.ws 需要钱包吗?
不需要。查看器、Agent 运行时、清单编辑器和 /app 无需钱包或账号即可使用。只有进行链上注册(ERC-8004 铸造、Solana Metaplex Core 铸造)以及使用付费功能(x402 端点、Agent 代币发行)时才需要钱包。
我的 GLB 会被上传到哪里吗? 除非你明确选择发布或注册 Agent,否则不会。查看器中的拖放操作完全在客户端进行,文件不会离开浏览器。只有在“Publish”和“Register”流程中,GLB 才会上传到 R2。
Agent 使用哪个大模型?
默认使用 Anthropic Claude(生产环境使用 claude-sonnet-4-6,低成本开发使用 claude-haiku-4-5-20251001)。可以通过清单以及 <agent-3d> 上的 brain 属性,为每个 Agent 配置大脑路由。通过扩展 src/runtime/providers.js,还可以接入其他提供商。
我可以完全离线运行 three.ws 吗?
查看器可以,Agent 运行时不行。在 <agent-3d> 上设置 sandbox 后,该元素会拒绝所有网络调用;你仍然可以加载本地 GLB、播放动画并测试清单。大模型大脑、语音和链上功能需要网络连接。
为什么虚拟形象显示为黑色或全白?
通常是缺少 HDR 环境,或材质需要环境贴图。确认 GLB 有默认场景、已设置光照属性(exposure、env),并且构建可以访问 public/env/(HDR 资源随项目附带于此)。如果虚拟形象全白,请检查形态目标是否因情绪混合为空而被归零。
Agent 一直没有语音回复,怎么回事?
最常见的原因是聊天输入未传到大脑。按顺序检查:(1) 已设置 brain 属性或 manifest.brain;(2) 网络面板显示 POST /api/chat(或配置的代理)请求成功;(3) 响应正文未被内容安全策略拦截;(4) 支持 TTS,且操作系统层面未静音。如果在本地运行,请在 .env.local 中设置 ANTHROPIC_API_KEY。
为什么部署后麦克风采集失败?
getUserMedia 需要 HTTPS。localhost 不受此限制;任何远程部署都需要 TLS。Vercel 和 Netlify 会自动提供 TLS。可自托管的部署必须在应用前端终止 TLS。
GLB 最大可以多大?
硬性上限:50 MB,超过后加载器会拒绝(可通过 maxBytes 属性配置)。建议目标:≤8 MB,以便在典型宽带连接下冷启动时间低于 3 秒。运行 npx gltf-transform draco input.glb output.glb 和 npx gltf-transform ktx output.glb output.ktx2.glb,即可在几乎不损失画质的情况下大幅压缩。
我可以将 Web 组件托管在自己的 CDN 上吗?
可以。运行 npm run build:lib,并从任意位置提供生成的 dist-lib/agent-3d.js。相应更新嵌入代码片段中的 <script> 标签。该元素不假定使用固定来源,只会联系你通过 manifest/brain 属性指定的后端。
如何轮换 JWT_SECRET 而不让会话失效?
递增 JWT_KID 并添加新密钥。现有令牌仍会通过旧的 kid 验证;新令牌则使用新密钥签名。默认会话窗口(30 天)过期后,从轮换配置中移除旧的 kid。
如何获取帮助?
- Bug 和功能请求:提交 GitHub Issue
- 安全问题:请参阅报告安全问题
- 讨论和作品展示:GitHub Discussions
- 实时状态:three.ws
社区
three.ws 以开放方式构建。选择适合你需求的交流空间。
| 渠道 | 适合内容 |
|---|---|
| GitHub 讨论区 | 设计问题、功能创意、展示与分享 |
| Telegram 社区 | 实时聊天和快速求助 |
| X 社区 | 演示、大家制作的头像、发布动态 |
| IBM 社区小组 | 企业与集成相关讨论 |
| 发布频道 | 每次面向用户的变更都会在部署时自动推送 |
| X 上的 @trythreews | 产品公告 |
关于不同问题适合在哪个渠道讨论,以及社区规范,请参阅 docs/community.md。
想要贡献? 你的首次贡献提供了完整的实操示例,带你在约 15 分钟内从克隆项目到提交开放的拉取请求;good first issue 则是精选列表,每条都注明要修改的文件以及用于验证修改有效的命令。关于问题分流方式以及预计响应时间,请参阅 docs/triage.md。
贡献
完整的贡献指南请参阅 CONTRIBUTING.md。贡献者在项目的所有空间中——包括问题、拉取请求、讨论,以及链接到此仓库的任何社区渠道——都应遵守贡献者公约行为准则。
快速规则:
- 遵循现有风格——不要重新格式化相邻代码
- 每一处改动都应与任务相关
- 为新增的 API 端点添加测试
- 提交 PR 前运行
npm run verify(Prettier + 构建检查) - 保持 PR 聚焦——每个 PR 只处理一个事项
分支约定:
feat/...— 新功能fix/...— 错误修复refactor/...— 不改变行为的结构调整docs/...— 仅限文档
开发提示:
- 查看器可独立运行于
/app——无需身份验证,也无需后端 - 在
<agent-3d>元素中使用mode=view,即可在没有大脑的情况下测试渲染 - 在本地设置
CHAT_MODEL=claude-haiku-4-5-20251001,以降低开发期间的 API 费用 - MCP 服务可使用
curl进行测试——它采用纯 HTTP JSON-RPC
报告安全问题
请不要在 GitHub 上公开提交漏洞问题。我们会按协调好的时间线进行披露,以便用户能在详细信息传播前获得修复。
- 发送邮件至 [email protected],或创建私密 GitHub 安全公告,并清楚说明受影响的组件、复现步骤以及你观察到的影响。
- 你将在两个工作日内收到确认回复。
- 对于高严重性报告,我们的目标是在 30 天内发布修复或缓解措施,并在发布说明中致谢报告者(除非你要求匿名)。
当前的威胁模型和强化说明见 specs/SECURITY.md 和 docs/security.md。上文的安全强化一节总结了代码库中的控制措施。
范围内:此仓库及其已部署的服务(three.ws,包括 /cdn/ 资源路由,以及 *.three.ws)。范围外:我们集成的第三方服务(Google Cloud、Neon、Cloudflare R2、Upstash、Privy、Anthropic、ElevenLabs、pump.fun)——请直接向这些服务报告。
贡献者
感谢所有通过代码、评审、错误报告和设计建议来改进 three.ws 的人。实时名单见 three.ws/contributors,提交级别的历史记录见 GitHub 贡献者图表。
特别感谢 @Victoriaali04 在 issue #164 中提供了精准的 Forge 照片上传问题报告。报告中的时间戳、请求顺序和经过删减的 R2 签名证据,直接促成了更完善的存储运行状况检查,以及如实且可重试的错误提示,取代了误导性的“网络错误”。
想让自己的名字出现在这里吗?贡献不只是提交代码:你可以提交 PR、报告可复现的错误、改进文档,或者提出能让平台变得更好的设计问题。请参阅贡献指南。
许可证
three.ws 采用 Apache License 2.0 开源。你可以使用、修改和分发它,也可以基于它构建商业产品,包括闭源作品,但须保留许可证和署名声明,并说明所做的更改。Apache-2.0 还明确规定了每位贡献者授予的专利许可,这对于本仓库中的链上合约尤为重要。
贡献内容也采用相同许可证;请参阅 CONTRIBUTING.md。
供应的第三方代码仍遵循其自身许可证。衍生代码和资源的署名信息见 character-studio/LICENSE、src/scene-studio/vendor/LICENSE、public/animations/LICENSES.md,以及 public/club/ 下各资源对应的 LICENSES.md 文件。
支持项目
如果 three.ws 为你节省了时间,请在 GitHub 上为它点星。星标能帮助其他开发者和 AI Agent 找到值得信赖的仓库,而且只需点击一下。
认识可能会用到它的人吗?在 X 上发布 · 分享到 Bluesky · 分享到 LinkedIn · 提交到 Hacker News · 分享到 Reddit
也为 AI Agent 打造
编码 Agent 和大模型工具可以直接读取此仓库:AGENTS.md、llms.txt、llms-full.txt。将 https://github.com/nirholas/three.ws 提供给 Agent,它就能获取所需的上下文。
同一作者的更多项目
- nirholas 的所有仓库:完整目录,按主题分组
- three.ws:面向 3D AI Agent 的平台,提供 Solana 钱包、技能市场和 x402 支付
- 问题或想法:提交 issue或发起讨论
贡献者
星标历史
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。


















