From 7cddd83d6de8a30cc0dd759a077db79d5d09d7fd Mon Sep 17 00:00:00 2001
From: 陈炜 <5856420@qq.com>
Date: 星期二, 13 九月 2022 11:41:23 +0800
Subject: [PATCH] 合并提交

---
 49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/hosts                                                                     |    7 
 install.sh                                                                                                                                 |  738 +++++++++
 nginx.conf                                                                                                                                 |  164 ++
 haha.sh                                                                                                                                    |   28 
 web.xml                                                                                                                                    |  161 ++
 0.default.conf                                                                                                                             |    7 
 49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/config.v2.json                                                            |    1 
 Android FUStaKit 集成文档.md                                                                                                                   | 1205 +++++++++++++++
 开关机盒子测试报告.md                                                                                                                               |   47 
 STA更新日志.md                                                                                                                                 |  120 +
 49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/resolv.conf.hash                                                          |    1 
 manager.xml                                                                                                                                |   28 
 java_gaga.com.conf                                                                                                                         |   57 
 java_wa.cn.conf                                                                                                                            |   57 
 49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/resolv.conf                                                               |    3 
 Android FUStaKit Java API 参考文档.md                                                                                                          |  867 ++++++++++
 黑宝塔install_6.0.sh                                                                                                                          |  738 +++++++++
 phpfpm_status.conf                                                                                                                         |   69 
 server.xml                                                                                                                                 |   24 
 49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da-json.log |  251 +++
 duan.md                                                                                                                                    |   54 
 nn.cn.conf                                                                                                                                 |   51 
 49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/hostname                                                                  |    1 
 49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/hostconfig.json                                                           |  100 +
 24 files changed, 4,779 insertions(+), 0 deletions(-)

diff --git a/0.default.conf b/0.default.conf
new file mode 100644
index 0000000..7a73121
--- /dev/null
+++ b/0.default.conf
@@ -0,0 +1,7 @@
+server
+{
+    listen 80;
+    server_name _;
+    index index.html;
+    root /www/server/nginx/html;
+}
\ No newline at end of file
diff --git a/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da-json.log b/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da-json.log
new file mode 100644
index 0000000..cf37a88
--- /dev/null
+++ b/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da-json.log
@@ -0,0 +1,251 @@
+{"log":"/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration\n","stream":"stdout","time":"2022-07-05T17:11:43.023884377Z"}
+{"log":"/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/\n","stream":"stdout","time":"2022-07-05T17:11:43.023953693Z"}
+{"log":"/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh\n","stream":"stdout","time":"2022-07-05T17:11:43.027132386Z"}
+{"log":"10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf\n","stream":"stdout","time":"2022-07-05T17:11:43.053161519Z"}
+{"log":"10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf\n","stream":"stdout","time":"2022-07-05T17:11:43.065952329Z"}
+{"log":"/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh\n","stream":"stdout","time":"2022-07-05T17:11:43.066287049Z"}
+{"log":"/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh\n","stream":"stdout","time":"2022-07-05T17:11:43.0714795Z"}
+{"log":"/docker-entrypoint.sh: Configuration complete; ready for start up\n","stream":"stdout","time":"2022-07-05T17:11:43.074755632Z"}
+{"log":"2022/07/05 17:11:43 [notice] 1#1: using the \"epoll\" event method\n","stream":"stderr","time":"2022-07-05T17:11:43.085978711Z"}
+{"log":"2022/07/05 17:11:43 [notice] 1#1: nginx/1.23.0\n","stream":"stderr","time":"2022-07-05T17:11:43.086008851Z"}
+{"log":"2022/07/05 17:11:43 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6) \n","stream":"stderr","time":"2022-07-05T17:11:43.086016264Z"}
+{"log":"2022/07/05 17:11:43 [notice] 1#1: OS: Linux 3.10.0-1160.el7.x86_64\n","stream":"stderr","time":"2022-07-05T17:11:43.086022197Z"}
+{"log":"2022/07/05 17:11:43 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576\n","stream":"stderr","time":"2022-07-05T17:11:43.086027701Z"}
+{"log":"2022/07/05 17:11:43 [notice] 1#1: start worker processes\n","stream":"stderr","time":"2022-07-05T17:11:43.086033201Z"}
+{"log":"2022/07/05 17:11:43 [notice] 1#1: start worker process 31\n","stream":"stderr","time":"2022-07-05T17:11:43.086185158Z"}
+{"log":"2022/07/05 17:11:43 [notice] 1#1: start worker process 32\n","stream":"stderr","time":"2022-07-05T17:11:43.086298454Z"}
+{"log":"2022/07/05 17:11:43 [notice] 1#1: start worker process 33\n","stream":"stderr","time":"2022-07-05T17:11:43.086508701Z"}
+{"log":"2022/07/05 17:11:43 [notice] 1#1: start worker process 34\n","stream":"stderr","time":"2022-07-05T17:11:43.086645748Z"}
+{"log":"2022/07/05 17:11:43 [notice] 1#1: start worker process 35\n","stream":"stderr","time":"2022-07-05T17:11:43.086846015Z"}
+{"log":"2022/07/05 17:11:43 [notice] 1#1: start worker process 36\n","stream":"stderr","time":"2022-07-05T17:11:43.087038398Z"}
+{"log":"2022/07/05 17:11:43 [notice] 1#1: start worker process 37\n","stream":"stderr","time":"2022-07-05T17:11:43.087223435Z"}
+{"log":"2022/07/05 17:11:43 [notice] 1#1: start worker process 38\n","stream":"stderr","time":"2022-07-05T17:11:43.088882515Z"}
+{"log":"2022/07/05 17:11:43 [notice] 1#1: start worker process 39\n","stream":"stderr","time":"2022-07-05T17:11:43.088898883Z"}
+{"log":"2022/07/05 17:11:43 [notice] 1#1: start worker process 40\n","stream":"stderr","time":"2022-07-05T17:11:43.088901981Z"}
+{"log":"2022/07/05 17:11:43 [notice] 1#1: start worker process 41\n","stream":"stderr","time":"2022-07-05T17:11:43.088904384Z"}
+{"log":"2022/07/05 17:11:43 [notice] 1#1: start worker process 42\n","stream":"stderr","time":"2022-07-05T17:11:43.088906786Z"}
+{"log":"2022/07/05 17:11:43 [notice] 1#1: start worker process 43\n","stream":"stderr","time":"2022-07-05T17:11:43.088909311Z"}
+{"log":"2022/07/05 17:11:43 [notice] 1#1: start worker process 44\n","stream":"stderr","time":"2022-07-05T17:11:43.088911564Z"}
+{"log":"2022/07/05 17:11:43 [notice] 1#1: start worker process 45\n","stream":"stderr","time":"2022-07-05T17:11:43.088969256Z"}
+{"log":"2022/07/05 17:11:43 [notice] 1#1: start worker process 46\n","stream":"stderr","time":"2022-07-05T17:11:43.089228027Z"}
+{"log":"192.168.1.21 - - [05/Jul/2022:17:11:56 +0000] \"GET / HTTP/1.1\" 200 615 \"-\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36\" \"-\"\n","stream":"stdout","time":"2022-07-05T17:11:56.614265095Z"}
+{"log":"192.168.1.21 - - [05/Jul/2022:17:11:56 +0000] \"GET /favicon.ico HTTP/1.1\" 404 555 \"http://192.168.1.233:8080/\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36\" \"-\"\n","stream":"stdout","time":"2022-07-05T17:11:56.698158889Z"}
+{"log":"2022/07/05 17:11:56 [error] 32#32: *2 open() \"/usr/share/nginx/html/favicon.ico\" failed (2: No such file or directory), client: 192.168.1.21, server: localhost, request: \"GET /favicon.ico HTTP/1.1\", host: \"192.168.1.233:8080\", referrer: \"http://192.168.1.233:8080/\"\n","stream":"stderr","time":"2022-07-05T17:11:56.698244049Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: signal 3 (SIGQUIT) received, shutting down\n","stream":"stderr","time":"2022-07-05T17:27:31.784883933Z"}
+{"log":"2022/07/05 17:27:31 [notice] 32#32: gracefully shutting down\n","stream":"stderr","time":"2022-07-05T17:27:31.785033304Z"}
+{"log":"2022/07/05 17:27:31 [notice] 32#32: exiting\n","stream":"stderr","time":"2022-07-05T17:27:31.785043587Z"}
+{"log":"2022/07/05 17:27:31 [notice] 37#37: gracefully shutting down\n","stream":"stderr","time":"2022-07-05T17:27:31.7850468Z"}
+{"log":"2022/07/05 17:27:31 [notice] 33#33: gracefully shutting down\n","stream":"stderr","time":"2022-07-05T17:27:31.785050024Z"}
+{"log":"2022/07/05 17:27:31 [notice] 33#33: exiting\n","stream":"stderr","time":"2022-07-05T17:27:31.78505328Z"}
+{"log":"2022/07/05 17:27:31 [notice] 37#37: exiting\n","stream":"stderr","time":"2022-07-05T17:27:31.78505666Z"}
+{"log":"2022/07/05 17:27:31 [notice] 33#33: exit\n","stream":"stderr","time":"2022-07-05T17:27:31.785059675Z"}
+{"log":"2022/07/05 17:27:31 [notice] 32#32: exit\n","stream":"stderr","time":"2022-07-05T17:27:31.785062615Z"}
+{"log":"2022/07/05 17:27:31 [notice] 37#37: exit\n","stream":"stderr","time":"2022-07-05T17:27:31.785065819Z"}
+{"log":"2022/07/05 17:27:31 [notice] 44#44: gracefully shutting down\n","stream":"stderr","time":"2022-07-05T17:27:31.785118012Z"}
+{"log":"2022/07/05 17:27:31 [notice] 42#42: gracefully shutting down\n","stream":"stderr","time":"2022-07-05T17:27:31.785124897Z"}
+{"log":"2022/07/05 17:27:31 [notice] 38#38: gracefully shutting down\n","stream":"stderr","time":"2022-07-05T17:27:31.785128102Z"}
+{"log":"2022/07/05 17:27:31 [notice] 35#35: gracefully shutting down\n","stream":"stderr","time":"2022-07-05T17:27:31.785281534Z"}
+{"log":"2022/07/05 17:27:31 [notice] 39#39: gracefully shutting down\n","stream":"stderr","time":"2022-07-05T17:27:31.785310007Z"}
+{"log":"2022/07/05 17:27:31 [notice] 44#44: exiting\n","stream":"stderr","time":"2022-07-05T17:27:31.785316867Z"}
+{"log":"2022/07/05 17:27:31 [notice] 42#42: exiting\n","stream":"stderr","time":"2022-07-05T17:27:31.78532278Z"}
+{"log":"2022/07/05 17:27:31 [notice] 38#38: exiting\n","stream":"stderr","time":"2022-07-05T17:27:31.785328734Z"}
+{"log":"2022/07/05 17:27:31 [notice] 40#40: gracefully shutting down\n","stream":"stderr","time":"2022-07-05T17:27:31.78533466Z"}
+{"log":"2022/07/05 17:27:31 [notice] 35#35: exiting\n","stream":"stderr","time":"2022-07-05T17:27:31.785340464Z"}
+{"log":"2022/07/05 17:27:31 [notice] 36#36: gracefully shutting down\n","stream":"stderr","time":"2022-07-05T17:27:31.785346727Z"}
+{"log":"2022/07/05 17:27:31 [notice] 39#39: exiting\n","stream":"stderr","time":"2022-07-05T17:27:31.785352504Z"}
+{"log":"2022/07/05 17:27:31 [notice] 40#40: exiting\n","stream":"stderr","time":"2022-07-05T17:27:31.785486697Z"}
+{"log":"2022/07/05 17:27:31 [notice] 31#31: gracefully shutting down\n","stream":"stderr","time":"2022-07-05T17:27:31.785497671Z"}
+{"log":"2022/07/05 17:27:31 [notice] 36#36: exiting\n","stream":"stderr","time":"2022-07-05T17:27:31.785503664Z"}
+{"log":"2022/07/05 17:27:31 [notice] 35#35: exit\n","stream":"stderr","time":"2022-07-05T17:27:31.785509191Z"}
+{"log":"2022/07/05 17:27:31 [notice] 44#44: exit\n","stream":"stderr","time":"2022-07-05T17:27:31.785529984Z"}
+{"log":"2022/07/05 17:27:31 [notice] 42#42: exit\n","stream":"stderr","time":"2022-07-05T17:27:31.785536784Z"}
+{"log":"2022/07/05 17:27:31 [notice] 38#38: exit\n","stream":"stderr","time":"2022-07-05T17:27:31.785542237Z"}
+{"log":"2022/07/05 17:27:31 [notice] 31#31: exiting\n","stream":"stderr","time":"2022-07-05T17:27:31.785547857Z"}
+{"log":"2022/07/05 17:27:31 [notice] 36#36: exit\n","stream":"stderr","time":"2022-07-05T17:27:31.785553251Z"}
+{"log":"2022/07/05 17:27:31 [notice] 39#39: exit\n","stream":"stderr","time":"2022-07-05T17:27:31.785558431Z"}
+{"log":"2022/07/05 17:27:31 [notice] 40#40: exit\n","stream":"stderr","time":"2022-07-05T17:27:31.785563757Z"}
+{"log":"2022/07/05 17:27:31 [notice] 31#31: exit\n","stream":"stderr","time":"2022-07-05T17:27:31.785569204Z"}
+{"log":"2022/07/05 17:27:31 [notice] 45#45: gracefully shutting down\n","stream":"stderr","time":"2022-07-05T17:27:31.785660804Z"}
+{"log":"2022/07/05 17:27:31 [notice] 45#45: exiting\n","stream":"stderr","time":"2022-07-05T17:27:31.785670791Z"}
+{"log":"2022/07/05 17:27:31 [notice] 45#45: exit\n","stream":"stderr","time":"2022-07-05T17:27:31.785758197Z"}
+{"log":"2022/07/05 17:27:31 [notice] 34#34: gracefully shutting down\n","stream":"stderr","time":"2022-07-05T17:27:31.785874241Z"}
+{"log":"2022/07/05 17:27:31 [notice] 34#34: exiting\n","stream":"stderr","time":"2022-07-05T17:27:31.785885124Z"}
+{"log":"2022/07/05 17:27:31 [notice] 43#43: gracefully shutting down\n","stream":"stderr","time":"2022-07-05T17:27:31.785976184Z"}
+{"log":"2022/07/05 17:27:31 [notice] 34#34: exit\n","stream":"stderr","time":"2022-07-05T17:27:31.785985534Z"}
+{"log":"2022/07/05 17:27:31 [notice] 43#43: exiting\n","stream":"stderr","time":"2022-07-05T17:27:31.785991021Z"}
+{"log":"2022/07/05 17:27:31 [notice] 43#43: exit\n","stream":"stderr","time":"2022-07-05T17:27:31.786072678Z"}
+{"log":"2022/07/05 17:27:31 [notice] 41#41: gracefully shutting down\n","stream":"stderr","time":"2022-07-05T17:27:31.786081931Z"}
+{"log":"2022/07/05 17:27:31 [notice] 41#41: exiting\n","stream":"stderr","time":"2022-07-05T17:27:31.786171004Z"}
+{"log":"2022/07/05 17:27:31 [notice] 41#41: exit\n","stream":"stderr","time":"2022-07-05T17:27:31.786180041Z"}
+{"log":"2022/07/05 17:27:31 [notice] 46#46: gracefully shutting down\n","stream":"stderr","time":"2022-07-05T17:27:31.786849618Z"}
+{"log":"2022/07/05 17:27:31 [notice] 46#46: exiting\n","stream":"stderr","time":"2022-07-05T17:27:31.78699349Z"}
+{"log":"2022/07/05 17:27:31 [notice] 46#46: exit\n","stream":"stderr","time":"2022-07-05T17:27:31.787007725Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: signal 17 (SIGCHLD) received from 40\n","stream":"stderr","time":"2022-07-05T17:27:31.792423349Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: worker process 40 exited with code 0\n","stream":"stderr","time":"2022-07-05T17:27:31.792444142Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: worker process 39 exited with code 0\n","stream":"stderr","time":"2022-07-05T17:27:31.792448464Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: signal 29 (SIGIO) received\n","stream":"stderr","time":"2022-07-05T17:27:31.792853331Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: signal 17 (SIGCHLD) received from 39\n","stream":"stderr","time":"2022-07-05T17:27:31.792868194Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: worker process 33 exited with code 0\n","stream":"stderr","time":"2022-07-05T17:27:31.792901385Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: worker process 36 exited with code 0\n","stream":"stderr","time":"2022-07-05T17:27:31.792906033Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: worker process 37 exited with code 0\n","stream":"stderr","time":"2022-07-05T17:27:31.792952488Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: worker process 38 exited with code 0\n","stream":"stderr","time":"2022-07-05T17:27:31.792959076Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: signal 17 (SIGCHLD) received from 44\n","stream":"stderr","time":"2022-07-05T17:27:31.793303196Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: worker process 44 exited with code 0\n","stream":"stderr","time":"2022-07-05T17:27:31.79331285Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: signal 29 (SIGIO) received\n","stream":"stderr","time":"2022-07-05T17:27:31.793352688Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: signal 29 (SIGIO) received\n","stream":"stderr","time":"2022-07-05T17:27:31.793446618Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: signal 17 (SIGCHLD) received from 42\n","stream":"stderr","time":"2022-07-05T17:27:31.79345632Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: worker process 32 exited with code 0\n","stream":"stderr","time":"2022-07-05T17:27:31.793525097Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: worker process 42 exited with code 0\n","stream":"stderr","time":"2022-07-05T17:27:31.79354997Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: signal 29 (SIGIO) received\n","stream":"stderr","time":"2022-07-05T17:27:31.793665833Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: signal 17 (SIGCHLD) received from 35\n","stream":"stderr","time":"2022-07-05T17:27:31.794379787Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: worker process 35 exited with code 0\n","stream":"stderr","time":"2022-07-05T17:27:31.794404941Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: worker process 34 exited with code 0\n","stream":"stderr","time":"2022-07-05T17:27:31.794411194Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: signal 29 (SIGIO) received\n","stream":"stderr","time":"2022-07-05T17:27:31.794543027Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: signal 17 (SIGCHLD) received from 34\n","stream":"stderr","time":"2022-07-05T17:27:31.794555131Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: signal 17 (SIGCHLD) received from 31\n","stream":"stderr","time":"2022-07-05T17:27:31.796654336Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: worker process 31 exited with code 0\n","stream":"stderr","time":"2022-07-05T17:27:31.796685429Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: worker process 43 exited with code 0\n","stream":"stderr","time":"2022-07-05T17:27:31.796692869Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: signal 29 (SIGIO) received\n","stream":"stderr","time":"2022-07-05T17:27:31.796698899Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: signal 17 (SIGCHLD) received from 43\n","stream":"stderr","time":"2022-07-05T17:27:31.796704589Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: worker process 45 exited with code 0\n","stream":"stderr","time":"2022-07-05T17:27:31.796710306Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: worker process 41 exited with code 0\n","stream":"stderr","time":"2022-07-05T17:27:31.796724102Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: signal 29 (SIGIO) received\n","stream":"stderr","time":"2022-07-05T17:27:31.796729789Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: signal 17 (SIGCHLD) received from 41\n","stream":"stderr","time":"2022-07-05T17:27:31.796736776Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: signal 17 (SIGCHLD) received from 46\n","stream":"stderr","time":"2022-07-05T17:27:31.796897943Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: worker process 46 exited with code 0\n","stream":"stderr","time":"2022-07-05T17:27:31.796924143Z"}
+{"log":"2022/07/05 17:27:31 [notice] 1#1: exit\n","stream":"stderr","time":"2022-07-05T17:27:31.797136969Z"}
+{"log":"/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration\n","stream":"stdout","time":"2022-07-05T17:29:27.356495697Z"}
+{"log":"/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/\n","stream":"stdout","time":"2022-07-05T17:29:27.356539534Z"}
+{"log":"/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh\n","stream":"stdout","time":"2022-07-05T17:29:27.359725623Z"}
+{"log":"10-listen-on-ipv6-by-default.sh: info: IPv6 listen already enabled\n","stream":"stdout","time":"2022-07-05T17:29:27.366524468Z"}
+{"log":"/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh\n","stream":"stdout","time":"2022-07-05T17:29:27.366913132Z"}
+{"log":"/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh\n","stream":"stdout","time":"2022-07-05T17:29:27.37328057Z"}
+{"log":"/docker-entrypoint.sh: Configuration complete; ready for start up\n","stream":"stdout","time":"2022-07-05T17:29:27.376860026Z"}
+{"log":"2022/07/05 17:29:27 [notice] 1#1: using the \"epoll\" event method\n","stream":"stderr","time":"2022-07-05T17:29:27.387190285Z"}
+{"log":"2022/07/05 17:29:27 [notice] 1#1: nginx/1.23.0\n","stream":"stderr","time":"2022-07-05T17:29:27.387208187Z"}
+{"log":"2022/07/05 17:29:27 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6) \n","stream":"stderr","time":"2022-07-05T17:29:27.387212772Z"}
+{"log":"2022/07/05 17:29:27 [notice] 1#1: OS: Linux 3.10.0-1160.el7.x86_64\n","stream":"stderr","time":"2022-07-05T17:29:27.387215297Z"}
+{"log":"2022/07/05 17:29:27 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576\n","stream":"stderr","time":"2022-07-05T17:29:27.387217901Z"}
+{"log":"2022/07/05 17:29:27 [notice] 1#1: start worker processes\n","stream":"stderr","time":"2022-07-05T17:29:27.387220406Z"}
+{"log":"2022/07/05 17:29:27 [notice] 1#1: start worker process 24\n","stream":"stderr","time":"2022-07-05T17:29:27.387385128Z"}
+{"log":"2022/07/05 17:29:27 [notice] 1#1: start worker process 25\n","stream":"stderr","time":"2022-07-05T17:29:27.387507241Z"}
+{"log":"2022/07/05 17:29:27 [notice] 1#1: start worker process 26\n","stream":"stderr","time":"2022-07-05T17:29:27.38766927Z"}
+{"log":"2022/07/05 17:29:27 [notice] 1#1: start worker process 27\n","stream":"stderr","time":"2022-07-05T17:29:27.387852483Z"}
+{"log":"2022/07/05 17:29:27 [notice] 1#1: start worker process 28\n","stream":"stderr","time":"2022-07-05T17:29:27.388800028Z"}
+{"log":"2022/07/05 17:29:27 [notice] 1#1: start worker process 29\n","stream":"stderr","time":"2022-07-05T17:29:27.388815818Z"}
+{"log":"2022/07/05 17:29:27 [notice] 1#1: start worker process 30\n","stream":"stderr","time":"2022-07-05T17:29:27.388819192Z"}
+{"log":"2022/07/05 17:29:27 [notice] 1#1: start worker process 31\n","stream":"stderr","time":"2022-07-05T17:29:27.388821416Z"}
+{"log":"2022/07/05 17:29:27 [notice] 1#1: start worker process 32\n","stream":"stderr","time":"2022-07-05T17:29:27.388823911Z"}
+{"log":"2022/07/05 17:29:27 [notice] 1#1: start worker process 33\n","stream":"stderr","time":"2022-07-05T17:29:27.38905136Z"}
+{"log":"2022/07/05 17:29:27 [notice] 1#1: start worker process 34\n","stream":"stderr","time":"2022-07-05T17:29:27.389254357Z"}
+{"log":"2022/07/05 17:29:27 [notice] 1#1: start worker process 35\n","stream":"stderr","time":"2022-07-05T17:29:27.389529243Z"}
+{"log":"2022/07/05 17:29:27 [notice] 1#1: start worker process 36\n","stream":"stderr","time":"2022-07-05T17:29:27.390566303Z"}
+{"log":"2022/07/05 17:29:27 [notice] 1#1: start worker process 37\n","stream":"stderr","time":"2022-07-05T17:29:27.390579337Z"}
+{"log":"2022/07/05 17:29:27 [notice] 1#1: start worker process 38\n","stream":"stderr","time":"2022-07-05T17:29:27.390582228Z"}
+{"log":"2022/07/05 17:29:27 [notice] 1#1: start worker process 39\n","stream":"stderr","time":"2022-07-05T17:29:27.390584482Z"}
+{"log":"/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration\n","stream":"stdout","time":"2022-07-06T09:20:42.621797321Z"}
+{"log":"/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/\n","stream":"stdout","time":"2022-07-06T09:20:42.630989561Z"}
+{"log":"/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh\n","stream":"stdout","time":"2022-07-06T09:20:42.671377719Z"}
+{"log":"10-listen-on-ipv6-by-default.sh: info: IPv6 listen already enabled\n","stream":"stdout","time":"2022-07-06T09:20:42.743092643Z"}
+{"log":"/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh\n","stream":"stdout","time":"2022-07-06T09:20:42.743456494Z"}
+{"log":"/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh\n","stream":"stdout","time":"2022-07-06T09:20:42.760016Z"}
+{"log":"/docker-entrypoint.sh: Configuration complete; ready for start up\n","stream":"stdout","time":"2022-07-06T09:20:42.763675892Z"}
+{"log":"2022/07/06 09:20:42 [notice] 1#1: using the \"epoll\" event method\n","stream":"stderr","time":"2022-07-06T09:20:42.942126479Z"}
+{"log":"2022/07/06 09:20:42 [notice] 1#1: nginx/1.23.0\n","stream":"stderr","time":"2022-07-06T09:20:42.942157735Z"}
+{"log":"2022/07/06 09:20:42 [notice] 1#1: built by gcc 10.2.1 20210110 (Debian 10.2.1-6) \n","stream":"stderr","time":"2022-07-06T09:20:42.942165355Z"}
+{"log":"2022/07/06 09:20:42 [notice] 1#1: OS: Linux 3.10.0-1160.el7.x86_64\n","stream":"stderr","time":"2022-07-06T09:20:42.942171169Z"}
+{"log":"2022/07/06 09:20:42 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576\n","stream":"stderr","time":"2022-07-06T09:20:42.942177075Z"}
+{"log":"2022/07/06 09:20:42 [notice] 1#1: start worker processes\n","stream":"stderr","time":"2022-07-06T09:20:42.942376859Z"}
+{"log":"2022/07/06 09:20:42 [notice] 1#1: start worker process 24\n","stream":"stderr","time":"2022-07-06T09:20:42.942603109Z"}
+{"log":"2022/07/06 09:20:42 [notice] 1#1: start worker process 25\n","stream":"stderr","time":"2022-07-06T09:20:42.942880286Z"}
+{"log":"2022/07/06 09:20:42 [notice] 1#1: start worker process 26\n","stream":"stderr","time":"2022-07-06T09:20:42.943177023Z"}
+{"log":"2022/07/06 09:20:42 [notice] 1#1: start worker process 27\n","stream":"stderr","time":"2022-07-06T09:20:42.943465683Z"}
+{"log":"2022/07/06 09:20:42 [notice] 1#1: start worker process 28\n","stream":"stderr","time":"2022-07-06T09:20:42.943775436Z"}
+{"log":"2022/07/06 09:20:42 [notice] 1#1: start worker process 29\n","stream":"stderr","time":"2022-07-06T09:20:42.944104823Z"}
+{"log":"2022/07/06 09:20:42 [notice] 1#1: start worker process 30\n","stream":"stderr","time":"2022-07-06T09:20:42.94444174Z"}
+{"log":"2022/07/06 09:20:42 [notice] 1#1: start worker process 31\n","stream":"stderr","time":"2022-07-06T09:20:42.944786871Z"}
+{"log":"2022/07/06 09:20:42 [notice] 1#1: start worker process 32\n","stream":"stderr","time":"2022-07-06T09:20:42.945142594Z"}
+{"log":"2022/07/06 09:20:42 [notice] 1#1: start worker process 33\n","stream":"stderr","time":"2022-07-06T09:20:42.945523908Z"}
+{"log":"2022/07/06 09:20:42 [notice] 1#1: start worker process 34\n","stream":"stderr","time":"2022-07-06T09:20:42.945921218Z"}
+{"log":"2022/07/06 09:20:42 [notice] 1#1: start worker process 35\n","stream":"stderr","time":"2022-07-06T09:20:42.946303805Z"}
+{"log":"2022/07/06 09:20:42 [notice] 1#1: start worker process 36\n","stream":"stderr","time":"2022-07-06T09:20:42.946722425Z"}
+{"log":"2022/07/06 09:20:42 [notice] 1#1: start worker process 37\n","stream":"stderr","time":"2022-07-06T09:20:42.947126812Z"}
+{"log":"2022/07/06 09:20:42 [notice] 1#1: start worker process 38\n","stream":"stderr","time":"2022-07-06T09:20:42.947589949Z"}
+{"log":"2022/07/06 09:20:42 [notice] 1#1: start worker process 39\n","stream":"stderr","time":"2022-07-06T09:20:42.94806926Z"}
+{"log":"192.168.1.21 - - [06/Jul/2022:09:20:54 +0000] \"GET / HTTP/1.1\" 200 615 \"-\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36\" \"-\"\n","stream":"stdout","time":"2022-07-06T09:20:54.337362109Z"}
+{"log":"192.168.1.21 - - [06/Jul/2022:09:20:54 +0000] \"GET /favicon.ico HTTP/1.1\" 404 555 \"http://192.168.1.233:8080/\" \"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36\" \"-\"\n","stream":"stdout","time":"2022-07-06T09:20:54.414529771Z"}
+{"log":"2022/07/06 09:20:54 [error] 25#25: *1 open() \"/usr/share/nginx/html/favicon.ico\" failed (2: No such file or directory), client: 192.168.1.21, server: localhost, request: \"GET /favicon.ico HTTP/1.1\", host: \"192.168.1.233:8080\", referrer: \"http://192.168.1.233:8080/\"\n","stream":"stderr","time":"2022-07-06T09:20:54.414547748Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: signal 3 (SIGQUIT) received, shutting down\n","stream":"stderr","time":"2022-07-06T09:21:17.354390973Z"}
+{"log":"2022/07/06 09:21:17 [notice] 25#25: gracefully shutting down\n","stream":"stderr","time":"2022-07-06T09:21:17.355691939Z"}
+{"log":"2022/07/06 09:21:17 [notice] 28#28: gracefully shutting down\n","stream":"stderr","time":"2022-07-06T09:21:17.355729569Z"}
+{"log":"2022/07/06 09:21:17 [notice] 30#30: gracefully shutting down\n","stream":"stderr","time":"2022-07-06T09:21:17.355749506Z"}
+{"log":"2022/07/06 09:21:17 [notice] 24#24: gracefully shutting down\n","stream":"stderr","time":"2022-07-06T09:21:17.355753507Z"}
+{"log":"2022/07/06 09:21:17 [notice] 26#26: gracefully shutting down\n","stream":"stderr","time":"2022-07-06T09:21:17.355756232Z"}
+{"log":"2022/07/06 09:21:17 [notice] 28#28: exiting\n","stream":"stderr","time":"2022-07-06T09:21:17.355759072Z"}
+{"log":"2022/07/06 09:21:17 [notice] 30#30: exiting\n","stream":"stderr","time":"2022-07-06T09:21:17.355761634Z"}
+{"log":"2022/07/06 09:21:17 [notice] 26#26: exiting\n","stream":"stderr","time":"2022-07-06T09:21:17.355764229Z"}
+{"log":"2022/07/06 09:21:17 [notice] 24#24: exiting\n","stream":"stderr","time":"2022-07-06T09:21:17.355767152Z"}
+{"log":"2022/07/06 09:21:17 [notice] 39#39: gracefully shutting down\n","stream":"stderr","time":"2022-07-06T09:21:17.355769914Z"}
+{"log":"2022/07/06 09:21:17 [notice] 27#27: gracefully shutting down\n","stream":"stderr","time":"2022-07-06T09:21:17.355772554Z"}
+{"log":"2022/07/06 09:21:17 [notice] 28#28: exit\n","stream":"stderr","time":"2022-07-06T09:21:17.355775181Z"}
+{"log":"2022/07/06 09:21:17 [notice] 30#30: exit\n","stream":"stderr","time":"2022-07-06T09:21:17.355777776Z"}
+{"log":"2022/07/06 09:21:17 [notice] 26#26: exit\n","stream":"stderr","time":"2022-07-06T09:21:17.355780457Z"}
+{"log":"2022/07/06 09:21:17 [notice] 39#39: exiting\n","stream":"stderr","time":"2022-07-06T09:21:17.355783031Z"}
+{"log":"2022/07/06 09:21:17 [notice] 27#27: exiting\n","stream":"stderr","time":"2022-07-06T09:21:17.355785594Z"}
+{"log":"2022/07/06 09:21:17 [notice] 24#24: exit\n","stream":"stderr","time":"2022-07-06T09:21:17.355788269Z"}
+{"log":"2022/07/06 09:21:17 [notice] 33#33: gracefully shutting down\n","stream":"stderr","time":"2022-07-06T09:21:17.355790997Z"}
+{"log":"2022/07/06 09:21:17 [notice] 34#34: gracefully shutting down\n","stream":"stderr","time":"2022-07-06T09:21:17.355793597Z"}
+{"log":"2022/07/06 09:21:17 [notice] 39#39: exit\n","stream":"stderr","time":"2022-07-06T09:21:17.355796192Z"}
+{"log":"2022/07/06 09:21:17 [notice] 33#33: exiting\n","stream":"stderr","time":"2022-07-06T09:21:17.355798749Z"}
+{"log":"2022/07/06 09:21:17 [notice] 27#27: exit\n","stream":"stderr","time":"2022-07-06T09:21:17.355801406Z"}
+{"log":"2022/07/06 09:21:17 [notice] 32#32: gracefully shutting down\n","stream":"stderr","time":"2022-07-06T09:21:17.355803911Z"}
+{"log":"2022/07/06 09:21:17 [notice] 29#29: gracefully shutting down\n","stream":"stderr","time":"2022-07-06T09:21:17.355806502Z"}
+{"log":"2022/07/06 09:21:17 [notice] 33#33: exit\n","stream":"stderr","time":"2022-07-06T09:21:17.355809192Z"}
+{"log":"2022/07/06 09:21:17 [notice] 36#36: gracefully shutting down\n","stream":"stderr","time":"2022-07-06T09:21:17.355811891Z"}
+{"log":"2022/07/06 09:21:17 [notice] 32#32: exiting\n","stream":"stderr","time":"2022-07-06T09:21:17.355814477Z"}
+{"log":"2022/07/06 09:21:17 [notice] 29#29: exiting\n","stream":"stderr","time":"2022-07-06T09:21:17.355817047Z"}
+{"log":"2022/07/06 09:21:17 [notice] 34#34: exiting\n","stream":"stderr","time":"2022-07-06T09:21:17.355819574Z"}
+{"log":"2022/07/06 09:21:17 [notice] 36#36: exiting\n","stream":"stderr","time":"2022-07-06T09:21:17.355822201Z"}
+{"log":"2022/07/06 09:21:17 [notice] 32#32: exit\n","stream":"stderr","time":"2022-07-06T09:21:17.355824736Z"}
+{"log":"2022/07/06 09:21:17 [notice] 34#34: exit\n","stream":"stderr","time":"2022-07-06T09:21:17.355827277Z"}
+{"log":"2022/07/06 09:21:17 [notice] 29#29: exit\n","stream":"stderr","time":"2022-07-06T09:21:17.355829912Z"}
+{"log":"2022/07/06 09:21:17 [notice] 36#36: exit\n","stream":"stderr","time":"2022-07-06T09:21:17.355832454Z"}
+{"log":"2022/07/06 09:21:17 [notice] 35#35: gracefully shutting down\n","stream":"stderr","time":"2022-07-06T09:21:17.355835554Z"}
+{"log":"2022/07/06 09:21:17 [notice] 35#35: exiting\n","stream":"stderr","time":"2022-07-06T09:21:17.355838291Z"}
+{"log":"2022/07/06 09:21:17 [notice] 35#35: exit\n","stream":"stderr","time":"2022-07-06T09:21:17.355843702Z"}
+{"log":"2022/07/06 09:21:17 [notice] 37#37: gracefully shutting down\n","stream":"stderr","time":"2022-07-06T09:21:17.355956091Z"}
+{"log":"2022/07/06 09:21:17 [notice] 31#31: gracefully shutting down\n","stream":"stderr","time":"2022-07-06T09:21:17.355978114Z"}
+{"log":"2022/07/06 09:21:17 [notice] 37#37: exiting\n","stream":"stderr","time":"2022-07-06T09:21:17.355985071Z"}
+{"log":"2022/07/06 09:21:17 [notice] 31#31: exiting\n","stream":"stderr","time":"2022-07-06T09:21:17.355990341Z"}
+{"log":"2022/07/06 09:21:17 [notice] 37#37: exit\n","stream":"stderr","time":"2022-07-06T09:21:17.355995661Z"}
+{"log":"2022/07/06 09:21:17 [notice] 31#31: exit\n","stream":"stderr","time":"2022-07-06T09:21:17.356001041Z"}
+{"log":"2022/07/06 09:21:17 [notice] 38#38: gracefully shutting down\n","stream":"stderr","time":"2022-07-06T09:21:17.356326528Z"}
+{"log":"2022/07/06 09:21:17 [notice] 38#38: exiting\n","stream":"stderr","time":"2022-07-06T09:21:17.356412983Z"}
+{"log":"2022/07/06 09:21:17 [notice] 38#38: exit\n","stream":"stderr","time":"2022-07-06T09:21:17.356521935Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: signal 17 (SIGCHLD) received from 34\n","stream":"stderr","time":"2022-07-06T09:21:17.362293119Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: worker process 34 exited with code 0\n","stream":"stderr","time":"2022-07-06T09:21:17.362310967Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: worker process 26 exited with code 0\n","stream":"stderr","time":"2022-07-06T09:21:17.362314188Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: signal 29 (SIGIO) received\n","stream":"stderr","time":"2022-07-06T09:21:17.362422059Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: signal 17 (SIGCHLD) received from 26\n","stream":"stderr","time":"2022-07-06T09:21:17.36243076Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: worker process 28 exited with code 0\n","stream":"stderr","time":"2022-07-06T09:21:17.362433169Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: worker process 24 exited with code 0\n","stream":"stderr","time":"2022-07-06T09:21:17.362534199Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: worker process 29 exited with code 0\n","stream":"stderr","time":"2022-07-06T09:21:17.362557946Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: worker process 30 exited with code 0\n","stream":"stderr","time":"2022-07-06T09:21:17.362564769Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: worker process 27 exited with code 0\n","stream":"stderr","time":"2022-07-06T09:21:17.362570333Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: worker process 33 exited with code 0\n","stream":"stderr","time":"2022-07-06T09:21:17.362575993Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: worker process 36 exited with code 0\n","stream":"stderr","time":"2022-07-06T09:21:17.362581683Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: worker process 39 exited with code 0\n","stream":"stderr","time":"2022-07-06T09:21:17.362587236Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: signal 29 (SIGIO) received\n","stream":"stderr","time":"2022-07-06T09:21:17.362965863Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: signal 17 (SIGCHLD) received from 39\n","stream":"stderr","time":"2022-07-06T09:21:17.36299692Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: signal 17 (SIGCHLD) received from 32\n","stream":"stderr","time":"2022-07-06T09:21:17.363087306Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: worker process 32 exited with code 0\n","stream":"stderr","time":"2022-07-06T09:21:17.363104773Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: signal 29 (SIGIO) received\n","stream":"stderr","time":"2022-07-06T09:21:17.36313471Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: signal 17 (SIGCHLD) received from 37\n","stream":"stderr","time":"2022-07-06T09:21:17.365167351Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: worker process 31 exited with code 0\n","stream":"stderr","time":"2022-07-06T09:21:17.365185651Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: worker process 35 exited with code 0\n","stream":"stderr","time":"2022-07-06T09:21:17.365191591Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: worker process 37 exited with code 0\n","stream":"stderr","time":"2022-07-06T09:21:17.365211448Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: signal 29 (SIGIO) received\n","stream":"stderr","time":"2022-07-06T09:21:17.365322291Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: signal 17 (SIGCHLD) received from 31\n","stream":"stderr","time":"2022-07-06T09:21:17.365340408Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: signal 17 (SIGCHLD) received from 38\n","stream":"stderr","time":"2022-07-06T09:21:17.366217352Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: worker process 38 exited with code 0\n","stream":"stderr","time":"2022-07-06T09:21:17.366235909Z"}
+{"log":"2022/07/06 09:21:17 [notice] 1#1: signal 29 (SIGIO) received\n","stream":"stderr","time":"2022-07-06T09:21:17.366306542Z"}
diff --git a/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/config.v2.json b/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/config.v2.json
new file mode 100644
index 0000000..b28aa08
--- /dev/null
+++ b/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/config.v2.json
@@ -0,0 +1 @@
+{"StreamConfig":{},"State":{"Running":false,"Paused":false,"Restarting":false,"OOMKilled":false,"RemovalInProgress":false,"Dead":false,"Pid":0,"ExitCode":137,"Error":"","StartedAt":"2022-07-06T09:20:42.477658398Z","FinishedAt":"2022-07-06T09:21:27.449539552Z","Health":null},"ID":"49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da","Created":"2022-07-05T17:08:58.650960754Z","Managed":false,"Path":"/docker-entrypoint.sh","Args":["nginx","-g","daemon off;"],"Config":{"Hostname":"49c6b2e842c4","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"ExposedPorts":{"80/tcp":{}},"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":["PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","NGINX_VERSION=1.23.0","NJS_VERSION=0.7.5","PKG_RELEASE=1~bullseye"],"Cmd":["nginx","-g","daemon off;"],"Image":"nginx","Volumes":null,"WorkingDir":"","Entrypoint":["/docker-entrypoint.sh"],"OnBuild":null,"Labels":{"maintainer":"NGINX Docker Maintainers \u003cdocker-maint@nginx.com\u003e"},"StopSignal":"SIGQUIT"},"Image":"sha256:55f4b40fe486a5b734b46bb7bf28f52fa31426bf23be068c8e7b19e58d9b8deb","NetworkSettings":{"Bridge":"","SandboxID":"b946b0337d5c27a04f486818f98ef5a23c7e198776c380a261e50cdfc50b1af3","HairpinMode":false,"LinkLocalIPv6Address":"","LinkLocalIPv6PrefixLen":0,"Networks":{"bridge":{"IPAMConfig":null,"Links":null,"Aliases":null,"NetworkID":"d8847f36e01af680c74244f0b44c635f80f7dbd6ec7a6f03ee499cb73d0360ed","EndpointID":"","Gateway":"","IPAddress":"","IPPrefixLen":0,"IPv6Gateway":"","GlobalIPv6Address":"","GlobalIPv6PrefixLen":0,"MacAddress":"","DriverOpts":null,"IPAMOperational":false}},"Service":null,"Ports":null,"SandboxKey":"/var/run/docker/netns/b946b0337d5c","SecondaryIPAddresses":null,"SecondaryIPv6Addresses":null,"IsAnonymousEndpoint":false,"HasSwarmEndpoint":false},"LogPath":"/var/lib/docker/containers/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da-json.log","Name":"/hahan","Driver":"overlay2","OS":"linux","MountLabel":"","ProcessLabel":"","RestartCount":0,"HasBeenStartedBefore":true,"HasBeenManuallyStopped":true,"MountPoints":{},"SecretReferences":null,"ConfigReferences":null,"AppArmorProfile":"","HostnamePath":"/var/lib/docker/containers/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/hostname","HostsPath":"/var/lib/docker/containers/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/hosts","ShmPath":"","ResolvConfPath":"/var/lib/docker/containers/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/resolv.conf","SeccompProfile":"","NoNewPrivileges":false,"LocalLogCacheMeta":{"HaveNotifyEnabled":false}}
diff --git a/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/hostconfig.json b/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/hostconfig.json
new file mode 100644
index 0000000..e51af1a
--- /dev/null
+++ b/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/hostconfig.json
@@ -0,0 +1,100 @@
+{
+    "Binds": null,
+    "ContainerIDFile": "",
+    "LogConfig": {
+        "Type": "json-file",
+        "Config": {}
+    },
+    "NetworkMode": "default",
+    "PortBindings": {
+        "80/tcp": [
+            {
+                "HostIp": "",
+                "HostPort": "8080"
+            }
+        ]
+    },
+    "RestartPolicy": {
+        "Name": "no",
+        "MaximumRetryCount": 0
+    },
+    "AutoRemove": false,
+    "VolumeDriver": "",
+    "VolumesFrom": null,
+    "CapAdd": null,
+    "CapDrop": null,
+    "CgroupnsMode": "host",
+    "Dns": [],
+    "DnsOptions": [],
+    "DnsSearch": [],
+    "ExtraHosts": null,
+    "GroupAdd": null,
+    "IpcMode": "private",
+    "Cgroup": "",
+    "Links": null,
+    "OomScoreAdj": 0,
+    "PidMode": "",
+    "Privileged": false,
+    "PublishAllPorts": false,
+    "ReadonlyRootfs": false,
+    "SecurityOpt": null,
+    "UTSMode": "",
+    "UsernsMode": "",
+    "ShmSize": 67108864,
+    "Runtime": "runc",
+    "ConsoleSize": [
+        0,
+        0
+    ],
+    "Isolation": "",
+    "CpuShares": 0,
+    "Memory": 0,
+    "NanoCpus": 0,
+    "CgroupParent": "",
+    "BlkioWeight": 0,
+    "BlkioWeightDevice": [],
+    "BlkioDeviceReadBps": null,
+    "BlkioDeviceWriteBps": null,
+    "BlkioDeviceReadIOps": null,
+    "BlkioDeviceWriteIOps": null,
+    "CpuPeriod": 0,
+    "CpuQuota": 0,
+    "CpuRealtimePeriod": 0,
+    "CpuRealtimeRuntime": 0,
+    "CpusetCpus": "",
+    "CpusetMems": "",
+    "Devices": [],
+    "DeviceCgroupRules": null,
+    "DeviceRequests": null,
+    "KernelMemory": 0,
+    "KernelMemoryTCP": 0,
+    "MemoryReservation": 0,
+    "MemorySwap": 0,
+    "MemorySwappiness": null,
+    "OomKillDisable": false,
+    "PidsLimit": null,
+    "Ulimits": null,
+    "CpuCount": 0,
+    "CpuPercent": 0,
+    "IOMaximumIOps": 0,
+    "IOMaximumBandwidth": 0,
+    "MaskedPaths": [
+        "/proc/asound",
+        "/proc/acpi",
+        "/proc/kcore",
+        "/proc/keys",
+        "/proc/latency_stats",
+        "/proc/timer_list",
+        "/proc/timer_stats",
+        "/proc/sched_debug",
+        "/proc/scsi",
+        "/sys/firmware"
+    ],
+    "ReadonlyPaths": [
+        "/proc/bus",
+        "/proc/fs",
+        "/proc/irq",
+        "/proc/sys",
+        "/proc/sysrq-trigger"
+    ]
+}
\ No newline at end of file
diff --git a/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/hostname b/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/hostname
new file mode 100644
index 0000000..10bc8d6
--- /dev/null
+++ b/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/hostname
@@ -0,0 +1 @@
+49c6b2e842c4
diff --git a/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/hosts b/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/hosts
new file mode 100644
index 0000000..8930fb1
--- /dev/null
+++ b/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/hosts
@@ -0,0 +1,7 @@
+127.0.0.1	localhost
+::1	localhost ip6-localhost ip6-loopback
+fe00::0	ip6-localnet
+ff00::0	ip6-mcastprefix
+ff02::1	ip6-allnodes
+ff02::2	ip6-allrouters
+172.17.0.2	49c6b2e842c4
diff --git a/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/resolv.conf b/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/resolv.conf
new file mode 100644
index 0000000..b55c08e
--- /dev/null
+++ b/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/resolv.conf
@@ -0,0 +1,3 @@
+# Generated by NetworkManager
+nameserver 202.96.209.133
+nameserver 114.114.114.114
diff --git a/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/resolv.conf.hash b/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/resolv.conf.hash
new file mode 100644
index 0000000..c3d57e4
--- /dev/null
+++ b/49c6b2e842c45bff058c346866e55f799e6b3d53d116898c3386f87d2623d9da/resolv.conf.hash
@@ -0,0 +1 @@
+sha256:a5f0b8686d307e34722405f285ba7230bf9c08653699822f0dd54a95d379d5ed
\ No newline at end of file
diff --git "a/Android FUStaKit Java API \345\217\202\350\200\203\346\226\207\346\241\243.md" "b/Android FUStaKit Java API \345\217\202\350\200\203\346\226\207\346\241\243.md"
new file mode 100644
index 0000000..54388ff
--- /dev/null
+++ "b/Android FUStaKit Java API \345\217\202\350\200\203\346\226\207\346\241\243.md"
@@ -0,0 +1,867 @@
+# FUStaSDK鎺ュ彛鏂囨。
+鏈� SDK 闆嗘垚浜� FaceUnity 鐨勮闊抽┍鍔ㄥ舰璞″紩鎿�(Speeach to Animation) 锛岃兘澶熷揩閫熸瀯寤哄苟椹卞姩铏氭嫙褰㈣薄璇磋瘽锛岃惀閫犳洿鍔犵湡瀹炶嚜鐒剁殑浜烘満浜や簰鍦烘櫙銆�
+
+## 鐗堟湰淇℃伅
+鐗堟湰鍙�:2.1
+
+鏇存柊鏃ユ湡:2022-01-21
+
+鏇存柊鍐呭:
+- 浼樺寲CPU鎬ц兘浠ュ強鏌ヨ鏁堢巼
+- 鏂板鍔ㄧ敾鎾斁閫熷害鎺у埗鎺ュ彛
+- 鏇存柊BS绯绘暟57-47
+- 淇闈欓煶甯ч棶棰�
+- 饨�鏂板璁剧疆鏃嬭浆瑙掑害
+- 浼樺寲闃村奖閿娇绠楁硶
+- 澧炲姞璇︾粏鏃ュ織鎺ュ彛
+
+## APIs
+SDK鎺ュ彛鏍规嵁浣滅敤閫昏緫褰掍负浜旂被
+- <a href="#1">閰嶇疆鍒濆鍖栨暟鎹�</a>
+- <a href="#2">鍒濆鍖�</a>
+- <a href="#3">Avatar鍒囨崲</a>
+- <a href="#4">娓叉煋鎺у埗</a>
+- <a href="#5">鍙e瀷鏌ヨ鍜岄┍鍔�</a>
+- <a href="#6">Avatar鍔ㄧ敾鍜岃〃鎯呭垏鎹�</a>
+- <a href="#7">閿�姣�</a>
+- <a href="#8">鍏朵粬</a>
+
+------
+
+
+> ### <a name="1">閰嶇疆鍒濆鍖栨暟鎹�</a>
+
+###### FUSta SDK閰嶇疆鍒濆鍖栨暟鎹�(鍦ㄧ嚎閴存潈鏁版嵁)
+
+
+    FUStaKit.Builder builder = new FUStaKit
+                    .Builder(mContext)
+                    .setAuth(authpack.A())
+                    .setAlignData(bytesAlign)
+                     //.setAsrData(bytesAsr)                
+                    .setFUTtsType(FUTtsType.ALIGNMENT)                
+                    .setCharacterDecoder(bytesDecoder);
+     mFUStaKit = builder.build();                
+
+###### 鎺ュ彛璇存槑
+
+鍒濆鍖朏USta锛屼紶鍏ヤ笂涓嬫枃锛堝繀瑕侊級锛�
+鍔犺浇缃戠粶閴存潈鏁版嵁锛堝繀瑕侊級锛�
+璁剧疆璇煶鑷姩鏍″噯宸ュ叿鍖咃紙Align妯″紡闇�瑕佽缃級锛�
+璁剧疆璇煶璇嗗埆宸ュ叿鍖咃紙ASR鏂瑰紡闇�瑕佽缃紝姝ゅ鏄疉lign妯″紡鏁呮敞閲婅鏂规硶锛夛紝
+璁剧疆tts鏌ヨ鏂瑰紡锛屽繀瑕侊紙ASR鏂瑰紡闇�瑕佽缃細FUTtsType.ASR锛汚lign鏂瑰紡闇�瑕佽缃細FUTtsType.ALIGNMENT锛屾澶勬槸Align妯″紡鏁呰缃负FUTtsType.ALIGNMENT锛�
+璁剧疆鏂囧瓧缂栫爜鍔熻兘鏁版嵁鏂囦欢(ALIGN鏂瑰紡鍜屾枃鏈椂闂存埑闇�瑕佽缃�)銆�
+
+###### 鍙傛暟璇存槑
+
+``` context ```锛氫笂涓嬫枃
+
+``` setAuth(byte[]) ```锛氱綉缁滈壌鏉冩暟鎹�
+
+``` setAlignData(byte[]) ```锛氳闊宠嚜鍔ㄦ牎鍑嗗伐鍏峰寘鏁版嵁
+
+``` setAsrData(byte[]) ```锛氳闊宠瘑鍒伐鍏峰寘鏁版嵁
+
+``` setFUTtsType(TtsTypeEnum type) ```锛歵ts鏌ヨ鏂瑰紡
+
+``` setCharacterDecoder(byte[]) ```锛氭枃瀛楃紪鐮佸姛鑳芥暟鎹�
+
+###### 澶囨敞锛�
+
+App 鍚姩鍚庡彧闇�瑕� SDK閰嶇疆鍒濆鍖栨暟鎹� 涓�娆″嵆鍙紝鍏朵腑 authpack.A() 閴存潈鏁版嵁澹版槑鍦� authpack.java 涓�傚繀椤婚厤缃ソ鏈夋晥鐨勮瘉涔︼紝SDK 鎵嶈兘姝e父宸ヤ綔銆�
+鍦ㄧ嚎閴存潈鍙渶瑕佽缃產uthpack.A() 閴存潈鏁版嵁鍗冲彲銆侳USta SDK 閰嶇疆鍒濆鍖栨暟鎹瑙�"Android FUStaKit 闆嗘垚鏂囨。"銆�
+
+
+###### FUSta SDK閰嶇疆鍒濆鍖栨暟鎹�(绂荤嚎閴存潈鏁版嵁)
+
+    
+     FUStaKit.Builder builder = new FUStaKit
+                    .Builder(mContext)
+                    .setAuth(authpack.A())
+                    .setAlignData(bytesAlign)
+                     //.setAsrData(bytesAsr)                
+                    .setFUTtsType(FUTtsType.ALIGNMENT)                
+                    .setCharacterDecoder(bytesDecoder);
+                    .setOffLineData(offLineAuth);
+     mFUStaKit = builder.build();              
+
+###### 鎺ュ彛璇存槑
+
+鍒濆鍖朏USta锛屼紶鍏ヤ笂涓嬫枃锛堝繀瑕侊級锛�
+鍔犺浇缃戠粶閴存潈鏁版嵁锛堝繀瑕侊級锛�
+璁剧疆璇煶鑷姩鏍″噯宸ュ叿鍖咃紙Align妯″紡闇�瑕佽缃級锛�
+璁剧疆璇煶璇嗗埆宸ュ叿鍖咃紙ASR鏂瑰紡闇�瑕佽缃紝姝ゅ鏄疉lign妯″紡鏁呮敞閲婅鏂规硶锛夛紝
+璁剧疆tts鏌ヨ鏂瑰紡锛屽繀瑕侊紙ASR鏂瑰紡闇�瑕佽缃細FUTtsType.ASR锛汚lign鏂瑰紡闇�瑕佽缃細FUTtsType.ALIGNMENT锛屾澶勬槸Align妯″紡鏁呰缃负FUTtsType.ALIGNMENT锛�
+璁剧疆鏂囧瓧缂栫爜鍔熻兘鏁版嵁鏂囦欢(ALIGN鏂瑰紡鍜屾枃鏈椂闂存埑闇�瑕佽缃�)銆�
+
+###### 鍙傛暟璇存槑
+
+``` context ```锛氫笂涓嬫枃
+
+``` setAuth(byte[]) ```锛氱綉缁滈壌鏉冩暟鎹�
+
+``` setAlignData(byte[]) ```锛氳闊宠嚜鍔ㄦ牎鍑嗗伐鍏峰寘鏁版嵁
+
+``` setAsrData(byte[]) ```锛氳闊宠瘑鍒伐鍏峰寘鏁版嵁
+
+``` setFUTtsType(TtsTypeEnum type) ```锛歵ts鏌ヨ鏂瑰紡
+
+``` setCharacterDecoder(byte[]) ```锛氭枃瀛楃紪鐮佸姛鑳芥暟鎹�
+
+``` setOffLineData(byte[]) ```锛氱绾块壌鏉冩暟鎹�
+
+###### 澶囨敞锛�
+
+App 鍚姩鍚庡彧闇�瑕� SDK閰嶇疆鍒濆鍖栨暟鎹� 涓�娆″嵆鍙紝鍏朵腑 authpack.A() 閴存潈鏁版嵁澹版槑鍦� authpack.java 涓�傚繀椤婚厤缃ソ鏈夋晥鐨勮瘉涔︼紝SDK 鎵嶈兘姝e父宸ヤ綔銆�
+绂荤嚎閴存潈闄や簡璁剧疆authpack.A() 閴存潈鏁版嵁锛岃繕闇�瑕佽缃绾块壌鏉冩暟鎹寘璺緞锛歴etOffLineAuth(byte[])銆�
+娉ㄦ剰锛屾湁key.bundle灏变娇鐢╧ey.bundle锛岃繖鏍蜂細璧扮绾匡紱浣跨敤鏈壌鏉冪殑bundle锛屼細鑱旂綉閴存潈銆�
+鏍规嵁搴旂敤闇�姹傦紝閴存潈鏁版嵁涔熷彲浠ヨ繍琛屾椂鎻愪緵锛堝缃戠粶涓嬭浇锛夛紝涓嶈繃瑕佹敞鎰忚瘉涔︽硠闇查闄╋紝闃叉璇佷功琚互鐢ㄣ�侳USta SDK 閰嶇疆鍒濆鍖栨暟鎹瑙�"Android FUStaKit 闆嗘垚鏂囨。"銆�
+
+---
+
+
+> ### <a name="2">鍒濆鍖�</a>
+
+###### FUSta SDK鍒濆鍖栵紙鍦ㄧ嚎閴存潈锛�
+
+```
+void init(FUAuthType.ONLINE, StaKitInitCallback listener);
+```
+
+###### 鎺ュ彛璇存槑
+
+璋冪敤FUSta SDK鍒濆鍖栨柟娉曪紝蹇呴』鏀惧湪 FUStaKit SDK閰嶇疆鍒濆鍖栨暟鎹箣鍚�
+
+###### 鍙傛暟璇存槑
+
+``` FUAuthType.ONLINE ```锛氬湪绾块壌鏉�
+``` FUStaKit.StaKitInitCallback ```锛歋DK鍒濆鍖栫姸鎬佺殑鍥炶皟锛屽弬鏁颁綅绌哄嵆娌℃湁鍒濆鍖栧畬鎴愬洖璋冪殑鏂瑰紡锛屽鏋滆皟鐢ㄨ鏂规硶涔嬪悗绱ф帴鐫�璋冪敤鍙e瀷椹卞姩鏂规硶锛屽彛鍨嬮┍鍔ㄤ换鍔′細绛夊緟鍒濆鍖栦换鍔″畬鎴愭墠寮�濮嬨�傚紑鍙戣�呭彲鏍规嵁鍒濆鍖栧洖璋冭繘琛岀浉鍏抽�昏緫澶勭悊銆�
+
+###### 澶囨敞锛�
+
+init 鍒濆鍖栨柟娉曪紝鍔″繀鍦ㄥ悗缁搷浣滃墠璋冪敤锛屽惁鍒欐棤娉曢┍鍔ㄥ彛鍨嬨��
+FUSta SDK 鍒濆鍖栬瑙�"Android FUStaKit 闆嗘垚鏂囨。鈥溿��
+
+###### FUSta SDK鍒濆鍖栵紙绂荤嚎閴存潈锛�
+
+```
+void init(FUAuthType.OFFLINE_BUNDLE, StaKitInitCallback listener);
+```
+
+###### 鎺ュ彛璇存槑
+
+璋冪敤FUSta SDK鍒濆鍖栨柟娉曪紝蹇呴』鏀惧湪 FUStaKit SDK閰嶇疆鍒濆鍖栨暟鎹箣鍚�
+
+###### 鍙傛暟璇存槑
+
+``` FUAuthType.OFFLINE_BUNDLE ```锛氱绾块壌鏉�
+``` FUStaKit.StaKitInitCallback ```锛歋DK鍒濆鍖栫姸鎬佺殑鍥炶皟锛屽弬鏁颁綅绌哄嵆娌℃湁鍒濆鍖栧畬鎴愬洖璋冪殑鏂瑰紡锛屽鏋滆皟鐢ㄨ鏂规硶涔嬪悗绱ф帴鐫�璋冪敤鍙e瀷椹卞姩鏂规硶锛屽彛鍨嬮┍鍔ㄤ换鍔′細绛夊緟鍒濆鍖栦换鍔″畬鎴愭墠寮�濮嬨�傚紑鍙戣�呭彲鏍规嵁鍒濆鍖栧洖璋冭繘琛岀浉鍏抽�昏緫澶勭悊銆�
+
+###### 澶囨敞锛�
+
+init 鍒濆鍖栨柟娉曪紝鍔″繀鍦ㄥ悗缁搷浣滃墠璋冪敤锛屽惁鍒欐棤娉曢┍鍔ㄥ彛鍨嬨��
+FUSta SDK 鍒濆鍖栬瑙�"Android FUStaKit 闆嗘垚鏂囨。鈥溿��
+
+---
+
+
+> ### <a name="3">Avatar鍒囨崲</a>
+
+###### FUSta SDK璁剧疆Avatar
+
+```
+void setAvatar(FUAvatar avatar, FUAvatarType avatarType);
+鎴�
+void setAvatar(FUAvatar avatar, FUAvatarType avatarType, OnAvatarStateListener listener);
+```
+
+###### 鎺ュ彛璇存槑
+
+鍒囨崲Avatar鏂规硶锛岃缃悗鍦ㄦ覆鏌撴椂浼氬垏鎹㈠搴擜vatar銆�
+
+
+###### 鍙傛暟璇存槑
+
+``` avatar ```锛欶UAvatar瀹炰緥
+
+``` avatarType ```锛欰vatar绫诲瀷鐨勬灇涓撅紝鐢ㄦ潵琛ㄧずAvatar绫诲瀷锛岀敤鏉ュ尯鍒唴缃〃鎯呮暟鎹簮锛岄粯璁わ細`FUAvatarType.CARTOON`
+
+``` listener ```锛欰vatar鎵ц鐘舵�佹帴鍙o紝瀹炵幇鎺ュ彛锛孉vatar鍔犺浇瀹屾垚鍥炶皟onAvatarComplete()
+
+###### 澶囨敞锛�
+
+###### FUSta SDK璁剧疆Avatar浣嶇疆
+```
+void setPosition(double positionX, double positionY, double positionZ);
+```
+###### 鎺ュ彛璇存槑
+
+璁剧疆Avatar鍦ㄥ潗鏍囩郴鐨勪綅缃��
+
+###### 鍙傛暟璇存槑
+
+``` positionX ```锛歑杞村潗鏍� 鑼冨洿`-200, 200`
+
+``` positionY ```锛歒杞村潗鏍� 鑼冨洿`-600, 800`
+
+``` positionZ ```锛歓杞村潗鏍� 鑼冨洿`-3000, 600`
+
+###### 澶囨敞锛�
+
+###### FUSta SDK璁剧疆Avatar鑳屾櫙
+```
+void setBackground(String background);
+```
+###### 鎺ュ彛璇存槑
+
+璁剧疆Avatar鑳屾櫙銆�
+
+###### 鍙傛暟璇存槑
+
+``` background ```锛氳儗鏅亾鍏疯矾寰勶紝background涓虹┖鍒欒儗鏅�忔槑
+
+###### 澶囨敞锛�
+
+###### FUSta SDK璁剧疆Avatar鍏夌収
+```
+void setLight(String light);
+```
+###### 鎺ュ彛璇存槑
+
+璁剧疆Avatar鍏夌収銆�
+
+###### 鍙傛暟璇存槑
+
+``` light ```锛氱伅鍏夐亾鍏疯矾寰�
+
+###### 澶囨敞锛�
+
+###### FUSta SDK璁剧疆Avatar鐩告満浣�
+```
+void setCamera(String camera);
+```
+###### 鎺ュ彛璇存槑
+
+璁剧疆Avatar鐩告満浣嶃��
+
+###### 鍙傛暟璇存槑
+
+``` camera ```锛氱浉鏈洪亾鍏疯矾寰�
+
+###### 澶囨敞锛�
+
+###### FUSta SDK寮�鍚槾褰�
+```
+void enableShadow(Boolean enableShadow);
+```
+###### 鎺ュ彛璇存槑
+
+璁剧疆鏄惁寮�鍚槾褰便��
+
+###### 鍙傛暟璇存槑
+
+``` enableShadow ```锛氭槸鍚﹀紑鍚槾褰�
+
+###### 澶囨敞锛�
+
+---
+
+> ### <a name="4">娓叉煋鎺у埗</a>
+
+###### FUSta SDK寮�濮嬫覆鏌�
+```
+void requestRender(GLTextureView glTextureView);
+```
+###### 鎺ュ彛璇存槑
+
+寮�濮嬫覆鏌撱��
+
+###### 鍙傛暟璇存槑
+
+``` glTextureView ```锛欸LTextureView锛孲DK鎻愪緵鐨勬覆鏌揤iew
+
+###### 澶囨敞锛�
+
+###### FUSta SDK娓叉煋鐘舵�佸悓姝�
+```
+void onResume();
+void onPause();
+void onDestroy();
+```
+###### 鎺ュ彛璇存槑
+
+onResume() 瀵瑰簲Activity onResume(),
+onPause() 瀵瑰簲Activity onPause(),
+onDestroy() 瀵瑰簲Activity onDestroy()銆�
+
+###### 鍙傛暟璇存槑
+
+###### 澶囨敞锛�
+
+onResume()涓巓nPause()鎴愬鍑虹幇锛屽湪Activity鐨刼nPause()璋冪敤鏃跺仠姝㈠悗鍙版覆鏌撳噺灏戞秷鑰楋紝骞朵笖鍦ˋctivity鐨刼nResume()璋冪敤鏃堕噸鏂板姞杞姐��
+
+onResume()涓巓nPause()鍙笉鐢ㄨ皟鐢紝鍦ˋctivity鐨刼nPause()璋冪敤鏃跺悗鍙颁細缁х画娓叉煋锛�
+
+onDestroy()蹇呴』璋冪敤銆�
+
+###### FUSta SDK璁剧疆娓叉煋鍒嗚鲸鐜�
+```
+void setCustomRenderResolution(int renderWidth, int renderHeight);
+```
+###### 鎺ュ彛璇存槑
+
+璁剧疆娓叉煋鍒嗚鲸鐜囧昂瀵搞��
+
+###### 鍙傛暟璇存槑
+
+``` renderWidth ```锛氱汗鐞嗗搴�
+
+``` renderHeight ```锛氱汗鐞嗗搴�
+
+###### 澶囨敞锛�
+
+###### FUSta SDK璁剧疆娓叉煋甯х巼
+```
+void setRenderFPS(int renderFPS);
+```
+###### 鎺ュ彛璇存槑
+
+璁剧疆娓叉煋甯х巼锛岄粯璁�30甯�/s銆�
+
+###### 鍙傛暟璇存槑
+
+``` renderFPS ```锛氭覆鏌撳抚鐜�
+
+###### 澶囨敞锛�
+
+濡傛灉浣庣璁惧鏈�澶у抚鐜囧皬浜庤缃殑甯х巼锛屽疄闄呭抚鐜囦负璇ヨ澶囩殑鏈�澶у抚鐜囥��
+
+###### FUSta SDK璁剧疆鎶楅敮榻�
+```
+void setMultiSamples(int samples);
+```
+###### 鎺ュ彛璇存槑
+
+3D鎶楅敮榻块厤缃�
+
+###### 鍙傛暟璇存槑
+
+``` samples ```锛氭姉閿娇绾у埆锛岄粯璁�4銆�
+
+###### 澶囨敞锛�
+
+###### FUSta SDK璁剧疆闃村奖鎶楅敮榻�
+```
+void setShadowPCFLevel(int level);
+```
+###### 鎺ュ彛璇存槑
+
+璁剧疆闃村奖鎶楅敮榻跨骇鍒�
+
+###### 鍙傛暟璇存槑
+
+``` level ```锛氭姉閿娇绾у埆锛岄粯璁�2銆�
+
+###### 澶囨敞锛�
+
+###### FUSta SDK璁剧疆娓叉煋淇℃伅鍥炶皟鎺ュ彛
+```
+void setEnableDebug(boolean enableDebug)
+void setStaRenderDebugListener(OnRenderDebugListener renderDebugListener);
+```
+###### 鎺ュ彛璇存槑
+
+璁剧疆娓叉煋debug鏁版嵁鐨勫洖璋�
+
+###### 鍙傛暟璇存槑
+
+``` enableDebug ```锛氳皟璇曞紑鍏充负true锛岀浉鍏砫ebug鏁版嵁鎵嶄細杩涜缁熻銆�
+``` renderDebugListener ```锛氭覆鏌揹ebug鏁版嵁鎺ュ彛锛宱nBenchmarkFPSChanged(int width, int height, double fps, double renderTime)銆�
+
+###### 澶囨敞锛�
+
+###### FUSta SDK鏃ュ織淇濆瓨鍒版湰鍦�
+```
+void setLogOutputDir(String dir);
+void enableLogOutput(boolean enableDebug)
+```
+###### 鎺ュ彛璇存槑
+
+SDK鏃ュ織淇濆瓨鍒版湰鍦�
+
+###### 鍙傛暟璇存槑
+
+``` dir ```锛氳缃繚瀛樺埌鏈湴鐨勬寚瀹氱洰褰曘��
+``` enableDebug ```锛氭槸鍚︿繚瀛樻棩蹇椾俊鎭埌鎸囧畾鐨勭洰褰曘��
+
+###### 澶囨敞锛�
+
+---
+
+> ### <a name="5">鍙e瀷鏌ヨ鍜岄┍鍔�</a>
+
+###### FUSta SDK鍒濆鍖栨挱鏀惧櫒
+
+```
+void initStaPlayer(FUPlayerConfig playerConfig);
+```
+
+###### 鎺ュ彛璇存槑
+
+鍒濆鍖栨挱鏀惧櫒
+
+###### 鍙傛暟璇存槑
+
+``` playerConfig ```锛氭挱鏀惧櫒鐩稿叧閰嶇疆锛屼富瑕佹槸閲囨牱鐜囥�佸0閬撳拰浣嶆繁锛孲DK鏍规嵁鎾斁鍣ㄧ殑閰嶇疆鍐呴儴浼氬垵濮嬪寲瀵瑰簲鎾斁鍣ㄣ��
+
+###### 澶囨敞锛�
+
+璇ユ挱鏀惧櫒鐢ㄤ簬鍐呴儴鎾斁锛屽閲囩敤澶栭儴鎾斁鍣ㄦ挱鏀惧彲涓嶈缃��
+
+###### FUSta SDK鍙e瀷椹卞姩骞朵笖鎾斁闊抽
+
+```
+void staProcess(FUStaParams staParams);
+```
+###### 鎺ュ彛璇存槑
+
+FUSta SDK鏌ヨ鍙e瀷绯绘暟锛屾挱鏀鹃煶棰戝苟椹卞姩瀵瑰簲鍙e瀷銆�
+
+浣跨敤鍦烘櫙锛�
+         1銆佹祦寮忛煶棰戯紝鏈夋椂闂存埑锛屽彧鏀寔pcm
+         2銆佹祦寮忛煶棰戯紝鏃犳椂闂存埑锛屽彧鏀寔pcm
+         3銆佹祦寮忛煶棰戯紝鏃犳椂闂存埑锛屾湁Align鏂囨湰锛屽彧鏀寔pcm
+         4銆侀潪娴佸紡闊抽锛屾湁鏃堕棿鎴筹紝鏀寔pcm涓巜av
+         5銆侀潪娴佸紡闊抽锛屾棤鏃堕棿鎴筹紝鏀寔pcm涓巜av
+         6銆侀潪娴佸紡闊抽锛屾棤鏃堕棿鎴筹紝鏈堿lign鏂囨湰锛屾敮鎸乸cm涓巜av
+
+###### 鍙傛暟璇存槑
+
+``` params ```锛欶UStaParams涓洪厤缃被锛屽弬鏁板熀鏈缃細 璁剧疆STA鎿嶄綔涓洪潪娴佸紡銆佽缃煶棰戞暟鎹�佽缃煶棰戞暟鎹被鍨嬨�佽缃煶棰戞暟鎹搴旀椂闂存埑绛夛紝鐩墠鏀寔 pcm 涓� wav
+
+###### 澶囨敞锛�
+
+鏈夋椂闂存埑锛屾煡璇㈠彛鍨嬬郴鏁版牴鎹椂闂存埑鏌ヨ锛岄�熷害浼氭洿蹇��
+鏃犳椂闂存埑锛屾煡璇㈠彛鍨嬬郴鏁版牴鎹煶棰戞暟鎹煡璇紝鏍规嵁鏈哄瀷閰嶇疆涓嶅悓鑰楁椂涔熸湁宸埆锛屾煡璇㈤�熷害绋嶈�楁椂銆備竴鑸棤鏃堕棿鎴虫煡璇㈠彛鍨嬬郴鏁版柟寮忔湁ASR鏂瑰紡鍜孉LIGN鏂瑰紡锛孉LIGN鏂瑰紡杈冨揩锛孉SR鏂瑰紡杈冩參銆�
+FUStaParams鍙傛暟璇︽儏涓庤鍙e瀷椹卞姩妯″紡璋冪敤瑙乣``Android FUStaKit 闆嗘垚鏂囨。```
+
+###### FUSta SDK娴佸紡鏌ヨ鐘舵�佸悓姝�
+
+```
+void notifyStaProcessStart();
+void notifyStaProcessFinish();
+```
+###### 鎺ュ彛璇存槑
+
+娴佸紡鍙e瀷椹卞姩妯″紡涓嬶紝闇�瑕佺粰SDK鍚屾鏌ヨ鐘舵�併��
+notifyStaProcessStart()瀵瑰簲浜庢祦寮忔煡璇㈠紑濮嬭皟鐢紱notifyStaProcessFinish()瀵瑰簲浜庢祦寮忔煡璇㈢粨鏉熻皟鐢ㄣ��
+
+###### 鍙傛暟璇存槑
+
+###### 澶囨敞锛�
+
+娴佸紡鏌ヨ蹇呴』瑕佺粰SDK璁剧疆鍚屾鐘舵�併�傝鎯呰```Android FUStaKit 闆嗘垚鏂囨。```
+
+###### FUSta SDK璁剧疆鍐呴儴鎾斁鍣ㄧ姸鎬佹帴鍙�
+
+```
+void setStaPlayerListener(OnStaPlayerListener staPlayerListener);
+```
+###### 鎺ュ彛璇存槑
+
+SDK閲囩敤鍐呴儴鎾斁鍣ㄦ挱鏀撅紝鎾斁鍣ㄧ姸鎬佹帴鍙c��
+
+###### 鍙傛暟璇存槑
+
+```OnStaPlayerListener```锛氬疄鐜拌鎺ュ彛锛岀浉鍏虫柟娉曞畾涔夛細
+
+```onPrepared()```锛氭挱鏀惧紑濮�
+
+```onCompleted()```锛氭挱鏀剧粨鏉�
+
+```onCancel()```锛氭挱鏀惧彇娑�
+
+```onError(String message)```锛氭挱鏀惧嚭閿�
+
+###### 澶囨敞锛�
+
+###### FUSta SDK鍙e瀷椹卞姩锛堝閮ㄦ挱鏀惧満鏅級
+
+```
+void staProcessNoPlayer(FUStaParams staParams);
+```
+###### 鎺ュ彛璇存槑
+
+FUSta SDK鏌ヨ鍙e瀷绯绘暟锛屽閮ㄦ挱鏀惧櫒鎾斁闊抽锛岄渶瑕佷袱鑰呴厤鍚堥┍鍔ㄥ搴斿彛鍨嬨��
+
+浣跨敤鍦烘櫙锛�
+         1銆佹祦寮忛煶棰戯紝鏈夋椂闂存埑锛屽彧鏀寔pcm
+         2銆佹祦寮忛煶棰戯紝鏃犳椂闂存埑锛屽彧鏀寔pcm
+         3銆佹祦寮忛煶棰戯紝鏃犳椂闂存埑锛屾湁Align鏂囨湰锛屽彧鏀寔pcm
+         4銆侀潪娴佸紡闊抽锛屾湁鏃堕棿鎴筹紝鏀寔pcm涓巜av
+         5銆侀潪娴佸紡闊抽锛屾棤鏃堕棿鎴筹紝鏀寔pcm涓巜av
+         6銆侀潪娴佸紡闊抽锛屾棤鏃堕棿鎴筹紝鏈堿lign鏂囨湰锛屾敮鎸乸cm涓巜av
+
+###### 鍙傛暟璇存槑
+
+``` params ```锛欶UStaParams涓洪厤缃被锛屽弬鏁板熀鏈缃細 璁剧疆STA鎿嶄綔涓洪潪娴佸紡銆佽缃煶棰戞暟鎹�佽缃煶棰戞暟鎹被鍨嬨�佽缃煶棰戞暟鎹搴旀椂闂存埑绛夛紝鐩墠鏀寔 pcm 涓� wav
+
+###### 澶囨敞锛�
+
+鏈夋椂闂存埑锛屾煡璇㈠彛鍨嬬郴鏁版牴鎹椂闂存埑鏌ヨ锛岄�熷害浼氭洿蹇��
+鏃犳椂闂存埑锛屾煡璇㈠彛鍨嬬郴鏁版牴鎹煶棰戞暟鎹煡璇紝鏍规嵁鏈哄瀷閰嶇疆涓嶅悓鑰楁椂涔熸湁宸埆锛屾煡璇㈤�熷害绋嶈�楁椂銆備竴鑸棤鏃堕棿鎴虫煡璇㈠彛鍨嬬郴鏁版柟寮忔湁ASR鏂瑰紡鍜孉LIGN鏂瑰紡锛孉LIGN鏂瑰紡杈冨揩锛孉SR鏂瑰紡杈冩參銆�
+FUStaParams鍙傛暟璇︽儏涓庤鍙e瀷椹卞姩妯″紡璋冪敤瑙乣``Android FUStaKit 闆嗘垚鏂囨。```
+
+###### FUSta SDK澶栭儴鎾斁鍦烘櫙鐘舵�佸悓姝�
+
+```
+void onExternalPlayerStart();
+void onExternalPlayerStop();
+```
+###### 鎺ュ彛璇存槑
+
+SDK鍐呴儴鍙e瀷绯绘暟鏌ヨ锛屽閮ㄦ挱鏀惧櫒鎾斁锛屼袱鑰呴厤鍚堥┍鍔ㄥ彛鍨嬶紝闇�瑕佺粰SDK鍚屾鎾斁鍣ㄧ姸鎬侊紝璁剧疆鍙e瀷椹卞姩鐨勫紑鍏炽��
+onExternalPlayerStart()瀵瑰簲浜庡閮ㄦ挱鏀惧櫒鎾斁寮�濮嬶紱onExternalPlayerStop()瀵瑰簲浜庡閮ㄦ挱鏀惧櫒鎾斁鏆傚仠鎴栫粨鏉熴��
+
+###### 鍙傛暟璇存槑
+
+###### 澶囨敞锛�
+
+澶栭儴鎾斁鍦烘櫙蹇呴』瑕佺粰SDK璁剧疆鍚屾鐘舵�併�傝鎯呰```Android FUStaKit 闆嗘垚鏂囨。```
+
+###### FUSta SDK璁剧疆澶栭儴鎾斁鍣ㄦ帴鍙�
+
+```
+void setExternalPlayerListener(OnExternalPlayerListener externalPlayerListener);
+```
+###### 鎺ュ彛璇存槑
+
+SDK鍐呴儴鍙e瀷绯绘暟鏌ヨ锛屽閮ㄦ挱鏀惧櫒鎾斁锛屼袱鑰呴厤鍚堥┍鍔ㄥ彛鍨嬶紝闇�瑕佺粰SDK鍚屾鎾斁鍣ㄨ繘搴︼紝sdk鎷垮埌鎾斁杩涘害椹卞姩瀵瑰簲鐨勫彛鍨嬨��
+
+###### 鍙傛暟璇存槑
+
+```OnExternalPlayerListener```锛氬疄鐜拌鎺ュ彛锛岀浉鍏虫柟娉曞畾涔夛細
+
+```updateCurrentPosition()```锛氳幏鍙栧閮ㄦ挱鏀惧櫒闊抽鎾斁杩涘害
+
+###### 澶囨敞锛�
+
+###### FUSta SDK璁剧疆闊抽鏁版嵁鏌ヨ鐘舵�佺殑鎺ュ彛
+
+```
+void setStaProcessListener(OnStaProcessListener onStaProcessListener);
+```
+###### 鎺ュ彛璇存槑
+
+SDK鍐呴儴鍙e瀷绯绘暟鏌ヨ锛岃鎺ュ彛浼氬洖璋冩瘡涓�娈垫煡璇㈤煶棰戞暟鎹殑鏁版嵁锛歚FUAudioProgressType`鍜屽唴閮ㄥ鐞嗚繃鍚庣殑闊抽锛岃鐘舵�佹帴鍙d富瑕佺敤浜庡閮ㄦ挱鏀惧櫒鍦烘櫙涓嬶紝涓轰簡瑙勯伩鍙e瀷绯绘暟鏌ヨ鑰楁椂鐨勫奖鍝嶏紝閫氱煡寮�鍙戣�匰DK宸茬粡鏈夊彛鍨嬫煡璇㈠畬鎴愶紝鍙互鎵ц澶栭儴鎾斁鍣ㄦ挱鏀鹃�昏緫銆�
+
+###### 鍙傛暟璇存槑
+
+```OnStaProcessListener```锛氬疄鐜拌鎺ュ彛锛岀浉鍏虫柟娉曞畾涔夛細
+
+```onStaProcess(FUAudioProgressType audioProgressType, byte[] data)```锛氬洖璋冩瘡涓�娈垫煡璇㈤煶棰戞暟鎹殑鏁版嵁
+
+###### 澶囨敞锛�
+
+```FUAudioProgressType```鏄痐寮�濮媊銆乣涓棿`銆乣缁撴潫`銆乣鏁存`鐨勬灇涓俱�俙date`鏄瘡涓�娈电殑闊抽锛屾敞鎰忚闊抽涓嶄竴瀹氱瓑浜庣敤鎴蜂紶鍏ョ殑闊抽鏍煎紡鍜屽ぇ灏忋��
+
+
+###### FUSta SDK鍋滄鍙e瀷鏌ヨ鍜岄┍鍔�
+
+```
+void stopStaProcess();
+```
+###### 鎺ュ彛璇存槑
+
+鎵撴柇SDK鍐呴儴鍙e瀷绯绘暟鏌ヨ浠诲姟锛岃鎺ュ彛浼氭竻鎺夊凡缁忔煡璇㈢殑鍙e瀷鏁版嵁鐨勭紦瀛橈紝鍋滄鍐呴儴鎾斁鍣ㄧ殑鎾斁銆�
+
+###### 鍙傛暟璇存槑
+
+###### 澶囨敞锛�
+
+澶栭儴鎾斁鍦烘櫙闇�瑕侀厤鍚堝閮ㄦ挱鏀惧櫒鍋滄鏂规硶鍜岃皟鐢⊿DK澶栭儴鎾斁鍣ㄦ挱鏀炬殏鍋滄垨缁撴潫閫氱煡鏂规硶锛歚onExternalPlayerStop()`銆�
+
+
+###### FUSta SDK璁剧疆鑻辫鍙e瀷寮犲紑骞呭害
+
+```
+void setENIntensity(float intensity);
+```
+###### 鎺ュ彛璇存槑
+
+璁剧疆鑻辫鍙e瀷寮犲紑骞呭害銆�
+
+###### 鍙傛暟璇存槑
+
+```intensity```锛氳嫳璇彛鍨嬪紶寮�骞呭害锛屽彇鍊艰寖鍥碻1.0, 1.5`锛�
+
+###### 澶囨敞锛�
+
+
+---
+
+> ### <a name="6">Avatar鍔ㄧ敾鍜岃〃鎯呭垏鎹�</a>
+
+###### 鍔ㄧ敾寰幆鎾斁
+
+```
+void playAnimation(String anim);
+鎴�
+void playAnimation(String anim, String[] prop, String[] propAnimation);
+```
+###### 鎺ュ彛璇存槑
+
+寰幆鎾斁Avatar鍔ㄧ敾銆�
+
+###### 鍙傛暟璇存槑
+
+```anim```锛歋tring锛孉vatar鍔ㄧ敾閬撳叿璺緞
+```prop```锛歋tring[], 閬撳叿璺緞鏁扮粍
+```propAnimation```锛歋tring[], 閬撳叿鍔ㄧ敾璺緞鏁扮粍
+
+###### 澶囨敞锛�
+
+###### 鍔ㄧ敾鍗曟鎾斁
+
+```
+void playAnimationOnce(String anim);
+鎴�
+void playAnimationOnce(String anim, String[] prop, String[] propAnimation);
+```
+###### 鎺ュ彛璇存槑
+
+鍗曟鎾斁Avatar鍔ㄧ敾銆�
+
+###### 鍙傛暟璇存槑
+
+```anim```锛歋tring锛孉vatar鍔ㄧ敾閬撳叿璺緞
+```prop```锛歋tring[], 閬撳叿璺緞鏁扮粍
+```propAnimation```锛歋tring[], 閬撳叿鍔ㄧ敾璺緞鏁扮粍
+
+###### 澶囨敞锛�
+
+###### 缁х画鎾斁褰撳墠鍔ㄧ敾
+
+```
+void startCurrentAnimation();
+```
+###### 鎺ュ彛璇存槑
+
+缁х画鎾斁褰撳墠鍔ㄧ敾銆�
+
+###### 鍙傛暟璇存槑
+
+###### 澶囨敞锛�
+
+###### 鏆傚仠鎾斁褰撳墠鍔ㄧ敾
+
+```
+void pauseCurrentAnimation();
+```
+###### 鎺ュ彛璇存槑
+
+缁х画鎾斁褰撳墠鍔ㄧ敾銆�
+
+###### 鍙傛暟璇存槑
+
+###### 澶囨敞锛�
+
+###### 绉婚櫎鍔ㄧ敾
+
+```
+void removeAnimation(String anim);
+```
+###### 鎺ュ彛璇存槑
+
+绉婚櫎鍔ㄧ敾銆�
+
+###### 鍙傛暟璇存槑
+
+```anim```锛歋tring锛岃绉婚櫎鐨凙vatar鍔ㄧ敾閬撳叿璺緞
+
+###### 澶囨敞锛�
+
+###### 璁剧疆鍔ㄧ敾鐨勮繃娓℃椂闂�
+
+```
+void setAnimationTransitionTime(float time);
+```
+###### 鎺ュ彛璇存槑
+
+璁剧疆鍔ㄧ敾鐨勮繃娓℃椂闂达紝鍗曚綅涓虹锛岄粯璁�0.5绉掋��
+
+###### 鍙傛暟璇存槑
+
+```time```锛歠loat锛屽姩鐢荤殑杩囨浮鏃堕棿
+
+###### 澶囨敞锛�
+
+###### 璁剧疆鍔ㄧ敾鐨勬挱鏀鹃�熷害
+
+```
+void setAnimationSpeed(float speed);
+```
+###### 鎺ュ彛璇存槑
+
+璁剧疆鍔ㄧ敾鐨勬挱鏀鹃�熷害绯绘暟锛岄粯璁や负1锛岃寖鍥碻0.2, 5.2`銆�
+
+###### 鍙傛暟璇存槑
+
+```speed```锛歠loat锛屾挱鏀鹃�熷害绯绘暟
+
+###### 澶囨敞锛�
+
+###### 鍐呯疆琛ㄦ儏鍒囨崲
+
+```
+void updateEmotion(FUEmotionType emotionType);
+鎴�
+void updateEmotion(FUEmotionType emotionType, int fpsNum);
+```
+###### 鎺ュ彛璇存槑
+
+SDK鍐呯疆琛ㄦ儏鍒囨崲锛屽湪`fpsNum`甯у唴杩囨浮鍒扮洰鏍囪〃鎯呫��
+
+###### 鍙傛暟璇存槑
+
+```emotionType```锛欶UEmotionType锛屽唴缃〃鎯呯殑鏋氫妇锛岀洰鍓嶅彧鏀寔鐗瑰畾鐨凙vatar绫诲瀷锛坄FUAvatarType.CARTOON`鍜宍FUAvatarType.REAL`锛夈��
+```fpsNum```锛歩nt锛屽湪`fpsNum`甯у唴杩囨浮鍒扮洰鏍囪〃鎯咃紝榛樿涓�0銆�
+
+###### 澶囨敞锛�
+
+###### 鑷畾涔夎〃鎯呭垏鎹�
+
+```
+void updateCustomEmotion(String path);
+鎴�
+void updateCustomEmotion(String path, int fpsNum);
+```
+###### 鎺ュ彛璇存槑
+
+鑷畾涔夎〃鎯呭垏鎹紝閫氳繃浼犲叆鑷畾涔塨s鏂囦欢锛屽唴閮ㄨВ鏋愬苟涓旈┍鍔ㄨ〃鎯咃紝鍦╜fpsNum`甯у唴杩囨浮鍒扮洰鏍囪〃鎯呫��
+
+###### 鍙傛暟璇存槑
+
+```path```锛歋tring锛岃嚜瀹氫箟琛ㄦ儏鐨勬枃浠躲��
+```fpsNum```锛歩nt锛屽湪`fpsNum`甯у唴杩囨浮鍒扮洰鏍囪〃鎯咃紝榛樿涓�0銆�
+
+###### 澶囨敞锛�
+
+###### 璁剧疆鏍囩閰嶇疆琛�
+
+```
+void setAlignTagConfig(String tagConfig, String defaultAnimation);
+```
+###### 鎺ュ彛璇存槑
+
+璁剧疆鏍囩閰嶇疆琛紝閰嶅悎Align妯″紡浣跨敤鍙畾鍒跺姩浣滆〃鎯呭垏鎹㈢殑瀹為檯銆�
+
+###### 鍙傛暟璇存槑
+
+```tagConfig```锛歋tring锛屾爣绛鹃厤缃〃
+```defaultAnimation```锛歋tring锛屾爣绛鹃厤缃〃鍔ㄤ綔鎵ц瀹屾垚鍚庢墽琛岀殑榛樿鍔ㄤ綔閬撳叿璺緞
+
+###### 澶囨敞锛�
+
+鏍囩閰嶇疆琛ㄨ皟鐢ㄨ```Android FUStaKit 闆嗘垚鏂囨。```
+
+---
+
+> ### <a name="7">閿�姣�</a>
+
+###### 閿�姣� FUSta SDK 
+
+```
+void release();
+```
+###### 鎺ュ彛璇存槑
+
+閿�姣丼DK锛岄噴鏀惧唴瀛樿祫婧愩��
+
+###### 鍙傛暟璇存槑
+
+###### 澶囨敞锛�
+
+---
+
+> ### <a name="8">鍏朵粬</a>
+
+###### 鏃嬭浆Avatar
+
+```
+setRotDelta(float delta)
+```
+###### 鎺ュ彛璇存槑
+
+鏃嬭浆瑙掕壊銆�
+
+###### 鍙傛暟璇存槑
+
+```delta```锛氳〃绀烘棆杞閲忥紝鍙栧�艰寖鍥碻-1.0, 1.0`
+
+###### 澶囨敞锛�
+
+
+###### 缂╂斁Avatar
+
+```
+setScaleDelta(float delta)
+```
+###### 鎺ュ彛璇存槑
+
+缂╂斁瑙掕壊銆�
+
+###### 鍙傛暟璇存槑
+
+```delta```锛氳〃绀虹缉鏀惧閲忥紝鍙栧�艰寖鍥碻-1.0, 1.0`
+
+###### 澶囨敞锛�
+
+
+###### 涓婁笅绉诲姩Avatar
+
+```
+setTranslateDelta(float delta)
+```
+###### 鎺ュ彛璇存槑
+
+涓婁笅绉诲姩瑙掕壊銆�
+
+###### 鍙傛暟璇存槑
+
+```delta```锛氳〃绀轰笂涓嬪閲忥紝鍙栧�艰寖鍥碻-1.0, 1.0`
+
+###### 澶囨敞锛�
+
+###### 璁剧疆Avatar鏃嬭浆瑙掑害
+
+```
+setRotate(float rotate)
+```
+###### 鎺ュ彛璇存槑
+
+璁剧疆Avatar鏃嬭浆瑙掑害銆�
+
+###### 鍙傛暟璇存槑
+
+```rotate```锛氳〃绀烘棆杞搴�
+
+###### 澶囨敞锛�
+
+###### 璁剧疆bs琛ㄦ儏绯绘暟鏁版嵁
+
+```
+setBSConfigData(String configPath)
+```
+###### 鎺ュ彛璇存槑
+
+璁剧疆褰撳墠Avatarbs琛ㄦ儏绯绘暟鏁版嵁鍖呰矾寰勶紝鍙笉璁剧疆锛屼笉璁剧疆鍒欎娇鐢ㄩ粯璁ゆ暟鎹寘
+
+###### 鍙傛暟璇存槑
+
+```configPath```锛歋tring锛宐s琛ㄦ儏绯绘暟鏁版嵁鍖呰矾寰�
+
+###### 澶囨敞锛�
+
+---
+
diff --git "a/Android FUStaKit \351\233\206\346\210\220\346\226\207\346\241\243.md" "b/Android FUStaKit \351\233\206\346\210\220\346\226\207\346\241\243.md"
new file mode 100644
index 0000000..8d1c43a
--- /dev/null
+++ "b/Android FUStaKit \351\233\206\346\210\220\346\226\207\346\241\243.md"
@@ -0,0 +1,1205 @@
+### FUStaSDK闆嗘垚鏂囨。
+
+鏈� SDK 闆嗘垚浜� FaceUnity 鐨勮闊抽┍鍔ㄥ舰璞″紩鎿�(Speeach to Animation) 锛岃兘澶熷揩閫熸瀯寤哄苟椹卞姩铏氭嫙褰㈣薄璇磋瘽锛岃惀閫犳洿鍔犵湡瀹炶嚜鐒剁殑浜烘満浜や簰鍦烘櫙銆�
+
+
+## 鐗堟湰淇℃伅
+
+* **鐗堟湰鍙�**:2.1
+
+* **鏇存柊鏃ユ湡**:2022-01-21
+
+* **鏇存柊鍐呭**:
+  1. 浼樺寲CPU鎬ц兘浠ュ強鏌ヨ鏁堢巼
+  2. 鏂板鍔ㄧ敾鎾斁閫熷害鎺у埗鎺ュ彛
+  3. 鏇存柊BS绯绘暟57-47
+  4. 淇闈欓煶甯ч棶棰�
+  5. 鏂板璁剧疆鏃嬭浆瑙掑害
+  6. 浼樺寲闃村奖閿娇绠楁硶
+  7. 澧炲姞璇︾粏鏃ュ織鎺ュ彛
+
+* **澧為噺澶у皬**:
+    SDK 浣撶Н浠ュ強apk澧為噺鏁版嵁锛堝崟浣嶏細M锛夛細
+    * v7a + v8a 22.8M   app 澧為噺锛�32.6M
+
+    SDK 鍐呴儴鍐呯疆璧勬簮鍏辫6.57M锛屽叾涓寘鍚細
+  1. `controller_cpp.bundle`  鍏�1.46M锛実raphics鐩稿叧銆�
+  2. `new_BSConfig` 鍏�4.11M锛宐s琛ㄦ儏绯绘暟鏁版嵁鍖呫��
+  3. 鍏朵粬璧勬簮  绾�1M
+
+澶囨敞锛�
+
+  鐩墠SDK鍙敮鎸佸綋鍓嶄袱涓灦鏋勶紝濡傛湁鐗规畩闇�姹傚彲鎵撳寘瀵瑰簲鏋舵瀯鐨凷DK銆�
+
+
+## 閰嶇疆瑕佹眰
+
+* **SDK鏀寔瀹夊崜鐗堟湰锛歚API 21` 鍙婁互涓婏紝蹇呴』鍦ㄧ‖浠跺姞閫熺殑绐楀彛涓娇鐢�**
+
+
+## 蹇�熼泦鎴�
+
+1. 棣栧厛瑕佽幏鍙栬瘉涔� `authpack.java`锛屾斁鍒� `faceunity` 妯″潡 `com.faceunity.fustademo` 鍖呬笅锛涜闊虫牎鍑嗗伐鍏峰寘`data_ali.bin`鏀惧埌`assets`鐩綍涓嬶紙ALIGN鏂瑰紡鏌ヨ鍙e瀷锛屽彲涓嶈缃級锛岃闊宠瘑鍒伐鍏峰寘`data_asr.bin`鏀惧埌`assets`鐩綍涓嬶紙ASR鏂瑰紡鏌ヨ鍙e瀷锛屽彲涓嶈缃級锛屼互涓婂伐鍏峰寘閮戒笉璁剧疆榛樿鍙敮鎸侀煶棰戞椂闂存埑鏌ヨ鍙e瀷绯绘暟銆�
+2. 鏋勫缓宸ョ▼锛岃繍琛屽埌鎵嬫満涓婏紝鍗冲彲浣撻獙 demo 鍔熻兘銆�
+3. 鎯宠浣撻獙`娴佸紡闊抽鎾姤`鍔熻兘锛屽彲鐢宠`鏍囪礉`TTS鐨刞client_id`鍜宍client_secret`鎴栬�呭鎺ュ叾浠栦笁鏂圭殑TTS鏈嶅姟銆�
+  
+
+## 浣跨敤璇存槑
+
+* **FU璇煶鍔╂墜**
+
+    **鍔熻兘妯″潡**:
+
+    1. 闈炴祦寮忛煶棰戞挱鎶�
+
+        鎾姤涓�鏁存闊抽鏂囦欢锛屾煡璇㈤煶棰戝搴旂殑鍙e瀷绯绘暟锛屽苟鎾斁闊抽銆�
+
+    2. 娴佸紡闊抽鎾姤
+
+        鏂囨湰杈撳叆閫氳繃璇煶鍚堟垚锛圱TS锛夛紙鐢辩涓夋柟鏈嶅姟鍟嗗疄鐜帮級鐢熸垚闊抽浼犲叆SDK锛屾煡璇㈤煶棰戝搴旂殑鍙e瀷绯绘暟锛屽苟鎾斁闊抽銆�
+
+    3. 姝屾洸婕斿敱
+
+        鎾斁姝屾洸椹卞姩褰㈣薄锛屾瓕璇嶆槸甯︽湁闊崇礌鐨勬枃鏈紝鏌ヨ闊抽瀵瑰簲鐨勫彛鍨嬬郴鏁帮紝骞舵挱鏀鹃煶棰戙��
+
+
+    **Demo璧勬簮闆嗘垚**:
+
+    浠ヤ笅鏄綋鍓岲emo鐨凙vatar璧勬簮鐩稿叧鍜孲TA鐩稿叧鏁版嵁鍖呯殑闆嗘垚鐨勮В鏋愶紝渚夸簬寮�鍙戣�呯悊瑙emo鍜孲DK璋冪敤銆備絾涓嶄粎浠呴檺浜庡綋鍓嶉泦鎴愭柟寮忥紝寮�鍙戣�呭彲鏍规嵁椤圭洰闇�姹傝嚜琛屽畾涔夐泦鎴愭柟寮忋��
+
+    1. assets 鐩綍
+
+       璇ョ洰褰曞瓨鏀炬墍鏈夌殑褰㈣薄璧勬簮浠ュ強STA鐩稿叧鏁版嵁鍖呰祫婧愶紝涓嶅悓璧勬簮閮藉瓨鏀惧湪瀵瑰簲鐨勫瓙鏂囦欢澶逛腑銆�
+
+      - fusta_demo/src/main/assets/sta:璇ョ洰褰曚负鎵�鏈堿vatar璧勬簮鐨勫瓨鏀剧洰褰�
+
+      - fusta_demo/src/main/assets/sta/animation:璇ョ洰褰曚负鎵�鏈堿vatar鐨勫姩鐢昏祫婧愮殑瀛樻斁鐩綍
+
+      - fusta_demo/src/main/assets/sta/body:璇ョ洰褰曚负鎵�鏈堿vatar鐨刡ody璧勬簮鐨勫瓨鏀剧洰褰�
+
+      - fusta_demo/src/main/assets/sta/builtin:璇ョ洰褰曠粨鏋勪笅鏈変竴涓� avatar_list.json 鏂囦欢锛屼富瑕佺敤鏉ラ厤缃� avatar 鍒楄〃锛屽叾鏍煎紡濡備笅锛�
+          ```
+          [      
+            {
+                "name": "3D路鍗¢�氬コ",// avatar 鍚嶇О锛屽彲浠ヤ笉閰嶇疆銆�
+                "dirName": "cartoon_female_moren"// avatar 鏂囦欢澶瑰悕绉帮紝璇ユ枃浠跺す浣嶄簬 avatar 鐩綍鐨勬牴鐩綍銆�
+            },
+            {
+                "name": "3D路鍗¢�氱敺",
+                "dirName": "cartoon_male_moren"
+            }
+          ]
+          ```
+        濡� avatar_list.json 閰嶇疆锛屾瘡涓厓绱犲搴斾竴涓猘vatar鏂囦欢澶癸紝鍦ㄦ枃浠跺す涓繚瀛樼潃褰㈣薄鐨� avatar.json 閰嶇疆鏂囦欢銆佺礌鏉愭枃浠朵互鍙婂浘鏍囩瓑鐩稿叧鏂囦欢锛宎vatar.json 鐨勬牸寮忓涓嬶細
+          ```
+          {
+          "gender": 0,// 鎬у埆锛�0鐢枫��1濂炽��2閫氱敤锛屽繀椤婚厤缃�
+          "components": [// 韬綋鍚勪釜閮ㄤ欢锛岄渶瑕侀厤缃儴浠跺悕绉板姞璺緞
+            {
+              "name": "body",
+              "path": "@assets/body/STA_avatar_kt_def_female_moren.bundle"
+            }
+          ],
+          "animations": [// 褰㈣薄鍔ㄧ敾锛岄渶瑕侀厤缃姩鐢诲悕绉板姞璺緞
+            {
+              "name": "榛樿鍛煎惛",
+              "path": "@assets/animation/STA_anim_kt_def_female_weixiao.bundle"
+            }
+          ],
+          "position": {// 褰㈣薄榛樿鐨勫潗鏍�
+            "x": 10.0,
+            "y": 50.0,
+            "z": -600.0
+          },
+          "scene": {// 鍦烘櫙閰嶇疆锛屽寘鎷儗鏅紙background锛夈�佺浉鏈猴紙camera锛夈�佺伅鍏夛紙light锛夛紝闇�瑕侀厤缃悕绉板姞璺緞
+            "background": {
+              "name": "background",
+              "path": "@assets/STA_default_bg.bundle"
+            },
+            "light": {
+              "name": "light",
+              "path": "@assets/STA_default_light.bundle"
+            }
+          },
+          "custom": ""//Demo涓氬姟閫昏緫鐩稿叧鐨勯厤缃紝涓昏鏄疉vatar鍚嶇О銆佸姩浣滃垪琛ㄥ拰鏍囩鍒楄〃鐨勫畾涔�
+        }
+        ```
+        澶囨敞锛氳矾寰勬寚瀹氱殑鍓嶇紑@assets琛ㄧず璧勬簮瀛樺湪鐨刟ssets涓嬨��
+
+      - fusta_demo/src/main/assets/sta_kit:璇ョ洰褰曞瓨鏀炬墍鏈塖TA鐩稿叧鏁版嵁鍖呰祫婧愶紝璇ユ枃浠剁殑STA鐩稿叧璧勬簮鍖呮暟鎹細
+
+        `data_ali.bin`璇煶鑷姩鏍″噯宸ュ叿鍖咃紙Align妯″紡闇�瑕佽缃級
+
+        `data_asr.bin`璁剧疆鏂囧瓧缂栫爜鍔熻兘鏁版嵁鏂囦欢锛圓lign妯″紡鍜屾枃鏈椂闂存埑闇�瑕佽缃級
+
+        `data_decoder.bin`璁剧疆璇煶璇嗗埆宸ュ叿鍖咃紙ASR鏂瑰紡闇�瑕佽缃級
+
+        鍦╜fusta_demo/src/main/java/com/faceunity/fustademo/util/StaKitUtils.java`鐨刞init`鏂规硶涓寜闇�鍔犺浇銆�
+
+      - fusta_demo/src/main/assets/sta_kit/emotion:璇ョ洰褰曞瓨鏀捐嚜瀹氫箟琛ㄦ儏bs鏂囦欢銆�
+
+      - fusta_demo/src/main/assets/sta_kit/song:璇ョ洰褰曞瓨鏀炬瓕鏇茬浉鍏虫枃浠讹紝鐢ㄤ簬姝屾洸鎾斁鑳藉姏灞曠ず銆�
+
+  2. 褰㈣薄灞曠ず
+
+     `com.faceunity.fu_data.data.FUDataCenter`浼氭牴鎹厤缃殑 avatar 鐩綍璺緞锛岃鍙� avatar_list.json 浠ラ亶鍘嗘墍鏈夊舰璞℃枃浠跺す涓殑 avatar.json 锛岀敓鎴� avatar 妯″瀷鍒楄〃锛屼笂灞備笟鍔¤皟鐢ㄨ�呭彧闇�瑕佷紶鍏ヤ笅鏍囦究鍙交鏉鹃�夋嫨瑕佸睍绀虹殑褰㈣薄銆傚叿浣撹皟鐢ㄧず渚嬪涓嬶細
+
+     ```
+     FUDataCenter fuDataCenter = new FUDataCenter(mContext);
+     fuDataCenter.initWithAvatarDirAndAssetsPath(null, FUConstant.STA_ASSENTS_PATH);
+     ArrayList<FUAvatarModel> avatarModels = fuDataCenter.loadAvatarLists();
+     ```
+     `com.faceunity.fustademo.data.AvatarDataFactory`鎸佹湁`avatarModels`鍒楄〃鏁版嵁锛岃皟鐢╜setAvatar(int index)`鎷垮埌瀵瑰簲鐨刞FUAvatarModel`杩涜�屽疄鐜癆vatar鍔犺浇鎴栧垏鎹€��
+
+* **璇佷功**
+   
+    demo涓殑`authpack.java`鏄垜鍙稿彂甯冪殑SDK璇佷功锛孎UStaSDK闇�瑕侀�氳繃`authpack`閴存潈骞跺垵濮嬪寲銆傛棤娉曠嫭绔嬩簬璇佷功杩愯锛屽洜姝ら渶瑕佸皢`authpack.java`鏇挎崲鍒颁綘鐨勫伐绋嬩腑銆�
+
+
+* **鏈壌鏉冪殑bundle**
+
+    锛堢绾块壌鏉冨唴瀹癸紝鍦ㄧ嚎閴存潈妯″紡璇峰拷鐣ワ級assets鐩綍涓嬬殑`fustaengine\offline\***.bundle`鏁版嵁鏄湭閴存潈鐨刡undle鏁版嵁锛岀绾块壌鏉冭繃绋嬮鍏堥渶瑕佷娇鐢ㄦ湭閴存潈鐨刡undle鏁版嵁鑱旂綉杩涜涓�娆″湪绾块壌鏉冿紝閴存潈鎴愬姛鍚庣敓鎴恅key.bundle`锛�
+
+
+* **key.bundle**
+
+    锛堢绾块壌鏉冨唴瀹癸紝鍦ㄧ嚎閴存潈妯″紡璇峰拷鐣ワ級`key.bundle`鏄疭DK鍐呴儴鑷姩鐢熸垚鐨刡undle锛屾湁浜嗚bundle鍚庣画寮�鍙戣�呭彲浣跨敤璇ユ枃浠惰繘琛岀绾挎潈闄愶紝涓嶅啀闇�瑕佽仈缃戞搷浣溿�俙key.bundle`鏄涓�娆¤仈缃戦壌鏉冩垚鍔熷悗鐢熸垚鐨勶紝淇濆瓨鍦⊿D鍗$洰褰曚笅鐨刓FaceUnity\FUStaKit\key.bundle
+
+
+* **FUStaKit**
+   
+    `FUStaKit`鏄疭DK瀵瑰鐨勯棬闈㈢被銆傞�氳繃`FUStaKit`瀵硅薄璋冪敤SDK鐩稿叧鍔熻兘銆�
+
+
+* **閬撳叿璧勬簮**
+   
+    闄や簡SDK鍜岃瘉涔︼紝鎴戜滑杩橀渶瑕侀亾鍏疯祫婧愪緵SDK鍔犺浇锛孌emo涓殑`assets`鏂囦欢澶瑰寘鍚簡涓�浜涢缃殑璧勬簮鏂囦欢(鑳屾櫙銆佸舰璞°�佸姩浣溿�佹墿灞曞姛鑳芥暟鎹寘绛�)銆傜敱浜庨儴鍒嗛亾鍏疯祫婧愭枃浠惰緝澶э紝瀹為檯寮�鍙戣繃绋嬩腑鍙互閫夋嫨閫氳繃缃戠粶涓嬭浇鐨勬柟寮忛泦鎴愬埌浣犵殑椤圭洰涓�備綘鍙互鏆傚厛灏咲emo涓殑`assets`鏂囦欢澶规嫋鍏ュ埌浣犵殑宸ョ▼涓娇鐢ㄥ厤璐归亾鍏�
+
+## 闆嗘垚 SDK
+
+### 1. 娣诲姞渚濊禆
+
+鍦ㄥ伐绋嬬洰褰曚笅`build.gradle`->`repositories`涓嬫坊鍔燻 maven { url 'http://maven.faceunity.com/repository/maven-public/' }`銆�
+
+鍦ㄩ」鐩洰褰曚笅鐨刞build.gradle`涓嬫坊鍔犱緷璧栧簱`api 'com.faceunity:sta-full-featured:2.1.0-RELEASES'`
+
+### 2. FUStaKit SDK 閰嶇疆鍒濆鍖栨暟鎹�
+
+鍦‵UStaKit SDK鍒濆鍖栦箣鍓嶏紝涓�鑸斁鍦╜Application`涓厤缃�傞壌鏉冩柟寮忓垎涓哄湪绾块壌鏉冨拰绂荤嚎閴存潈锛屽彲鏍规嵁涓氬姟闇�姹傝嚜琛岄�夋嫨锛�
+
+#### 閰嶇疆鍦ㄧ嚎閴存潈鍒濆鍖栨暟鎹�
+
+**绀轰緥浠g爜锛�**
+
+```
+public void initOnline(@NonNull Context context) {
+     mContext = context.getApplicationContext();
+     FUStaKit.Builder builder = new FUStaKit
+                   //浼犲叆涓婁笅鏂囷紝蹇呰
+                   .Builder(mContext)
+                   //楠岃瘉璇佷功锛屽繀瑕�
+                   .setAuth(authpack.A())
+                   //璁剧疆tts鏌ヨ鏂瑰紡锛屽繀瑕侊紙ASR鏂瑰紡闇�瑕佽缃細FUTtsType.ASR锛汚lign鏂瑰紡闇�瑕佽缃細FUTtsType.ALIGNMENT锛�
+                   .setFUTtsType(FUTtsType.ALIGNMENT)
+                   //璁剧疆璇煶璇嗗埆宸ュ叿鍖咃紙ASR鏂瑰紡闇�瑕佽缃級
+                   // .setAsrData(bytesAsr)
+                   //璁剧疆璇煶鑷姩鏍″噯宸ュ叿鍖咃紙Align妯″紡闇�瑕佽缃級
+                   .setAlignData(bytesAlign)
+                   //璁剧疆鏂囧瓧缂栫爜鍔熻兘鏁版嵁鏂囦欢锛圓lign妯″紡鍜屾枃鏈椂闂存埑闇�瑕佽缃級
+                   .setCharacterDecoder(bytesDecoder);
+     mFUStaKit = builder.build();
+}  
+```
+澶囨敞锛�
+
+#### 閰嶇疆绂荤嚎閴存潈鍒濆鍖栨暟鎹�
+
+**绀轰緥浠g爜锛�**
+
+```
+public void initOffline(@NonNull Context context) {
+     mContext = context.getApplicationContext();
+     FUStaKit.Builder builder = new FUStaKit
+                    //浼犲叆涓婁笅鏂囷紝蹇呰
+                    .Builder(mContext)
+                    //楠岃瘉璇佷功锛屽繀瑕�
+                    .setAuth(authpack.A())
+                    //璁剧疆tts鏌ヨ鏂瑰紡锛屽繀瑕侊紙ASR鏂瑰紡闇�瑕佽缃細FUTtsType.ASR锛汚lign鏂瑰紡闇�瑕佽缃細FUTtsType.ALIGNMENT锛�
+                    .setFUTtsType(FUTtsType.ALIGNMENT)
+                    //璁剧疆璇煶璇嗗埆宸ュ叿鍖咃紙ASR鏂瑰紡闇�瑕佽缃級
+                    // .setAsrData(bytesAsr)
+                    //璁剧疆璇煶鑷姩鏍″噯宸ュ叿鍖咃紙Align妯″紡闇�瑕佽缃級
+                    .setAlignData(bytesAlign)
+                    //璁剧疆鏂囧瓧缂栫爜鍔熻兘鏁版嵁鏂囦欢锛圓lign妯″紡鍜屾枃鏈椂闂存埑闇�瑕佽缃級
+                    .setCharacterDecoder(bytesDecoder)
+                    //璁剧疆绂荤嚎閴存潈鏁版嵁
+                    .setOffLineData(offLineAuth);
+     mFUStaKit = builder.build();
+}  
+```
+澶囨敞锛�
+
+绂荤嚎閴存潈闄や簡璁剧疆`authpack.A()` 閴存潈鏁版嵁锛岃繕闇�瑕佽缃绾块壌鏉冩暟鎹寘鏁版嵁锛歚setOffLineAuth(offLineAuth)`锛岃閫昏緫鍙弬鑰冮泦鎴怐emo涓殑绀轰緥浠g爜锛歔StaKitUtils.java: Lines 82-150](../app/src/main/java/com/faceunity/fustademo/util/StaKitUtils.java#L82-L150)銆�
+娉ㄦ剰绂荤嚎閴存潈杩橀渶瑕佹湁WRITE_EXTERNAL_STORAGE鏉冮檺銆�
+
+
+### 3. FUStaKit SDK 閴存潈
+ 
+FUStaKit SDK鍒濆鍖栵紝蹇呴』鏀惧湪 FUStaKit SDK閰嶇疆鍒濆鍖栨暟鎹箣鍚庯紝閴存潈鏂瑰紡鍒嗕负鍦ㄧ嚎閴存潈鍜岀绾块壌鏉冿紝鍙牴鎹笟鍔¢渶姹傝嚜琛岄�夋嫨锛�
+
+#### 閰嶇疆鍦ㄧ嚎閴存潈鍒濆鍖栨暟鎹�
+
+鏂规硶锛歚init(FUAuthType.ONLINE, StaKitInitCallback listener)`
+     `init(FUAuthType.ONLINE, null)`
+
+鍙傛暟锛歚FUAuthType.ONLINE`锛氬湪绾块壌鏉冿紱
+     `FUStaKit.StaKitInitCallback`锛孲DK鍒濆鍖栫姸鎬佺殑鍥炶皟銆傚弬鏁板彲涓虹┖銆�
+
+**绀轰緥浠g爜锛�**
+
+    1.鏈夊垵濮嬪寲瀹屾垚鍥炶皟鐨勬柟寮忥紝SDK鍒濆鍖栧畬鎴愮殑鍥炶皟锛岃繘鍏ュ姛鑳介〉闈�
+    // 鍒濆鐘舵�佺洃鍚櫒锛岀洃鍚琲nit鏄惁鎴愬姛锛屽洖璋冨湪闈濽I绾跨▼
+    private FUStaKit.StaKitInitCallback mInitListener = new FUStaKit.StaKitInitCallback() {
+
+        @Override
+        public void onInitComplete(int code, @NotNull String msg) {
+        }
+
+        @Override
+        public void onError(int errCode, @Nullable String errMsg) {
+        }
+    };
+    // SDK 鍒濆鍖�
+    mFUStaKit.init(FUAuthType.ONLINE, mInitListener);
+    
+    2.娌℃湁鍒濆鍖栧畬鎴愬洖璋冪殑鏂瑰紡锛屽鏋滆皟鐢ㄨ鏂规硶涔嬪悗绱ф帴鐫�璋冪敤鍙e瀷椹卞姩鏂规硶锛屽彛鍨嬮┍鍔ㄤ换鍔′細绛夊緟鍒濆鍖栦换鍔″畬鎴愭墠寮�濮�
+    // SDK 鍒濆鍖�
+    mFUStaKit.init(null);
+
+澶囨敞锛�
+
+init 鍒濆鍖栨柟娉曪紝鍔″繀鍦ㄥ悗缁搷浣滃墠璋冪敤锛屽惁鍒欐棤娉曢┍鍔ㄥ彛鍨嬨��
+SDK鍒濆鍖栨柟娉曟槸鑰楁椂鐨勶紝SDK鍐呴儴宸插皢浠诲姟娣诲姞鍒板紓姝ョ嚎绋嬪鐞嗐�傚鏋淪DK鍒濆鍖栦换鍔″皻鏈鐞嗗畬姣曪紝鍚庣画鍙e瀷椹卞姩浠诲姟鍥炶皟鍔犲埌浠诲姟闃熷垪绛夊緟璇ユ柟娉曞鐞嗗畬姣曞啀鎸夌収椤哄簭鎿嶄綔锛岀敤鎴风琛ㄧ幇涓虹涓�娆″彛鍨嬮┍鍔ㄨ�楁椂鏃堕棿闀裤��
+璇ユ楠ゅ彲鍙傝�冮泦鎴怐emo涓殑绀轰緥浠g爜锛歔SplashActivity.java: Lines 72-117](../app/src/main/java/com/faceunity/fustademo/ui/SplashActivity.java#L72-L117)
+
+#### 閰嶇疆绂荤嚎閴存潈鍒濆鍖栨暟鎹�
+
+鏂规硶锛歚init(FUAuthType.OFFLINE_BUNDLE, StaKitInitCallback listener)`
+     `init(FUAuthType.OFFLINE_BUNDLE, null)`
+
+鍙傛暟锛歚FUAuthType.OFFLINE_BUNDLE`锛氱绾块壌鏉冿紱
+     `FUStaKit.StaKitInitCallback`锛歋DK鍒濆鍖栫姸鎬佺殑鍥炶皟銆傚弬鏁板彲涓虹┖銆�
+
+**绀轰緥浠g爜锛�**
+
+    1.鏈夊垵濮嬪寲瀹屾垚鍥炶皟鐨勬柟寮忥紝SDK鍒濆鍖栧畬鎴愮殑鍥炶皟锛岃繘鍏ュ姛鑳介〉闈�
+    // SDK 鍒濆鍖�
+    mFUStaKit.init(FUAuthType.OFFLINE_BUNDLE, mInitListener);
+    
+    2.娌℃湁鍒濆鍖栧畬鎴愬洖璋冪殑鏂瑰紡锛屽鏋滆皟鐢ㄨ鏂规硶涔嬪悗绱ф帴鐫�璋冪敤鍙e瀷椹卞姩鏂规硶锛屽彛鍨嬮┍鍔ㄤ换鍔′細绛夊緟鍒濆鍖栦换鍔″畬鎴愭墠寮�濮�
+    // SDK 鍒濆鍖�
+    mFUStaKit.init(null);
+
+澶囨敞锛�
+
+### 4. FUStaKit SDK 璁剧疆榛樿FUAvatar
+
+璁剧疆榛樿鐨凢UAvatar锛屾帹鑽愬湪寮�濮嬫覆鏌撳墠璁剧疆榛樿FUAvatar銆�
+
+鏂规硶锛歚setAvatar(FUAvatar avatar, FUAvatarType avatarType, OnAvatarStateListener listener)`
+
+鏂规硶浼犲叆鍙傛暟涓昏鏄細
+`FUAvatar`锛欶UStaKit SDK Avatar浜虹墿鏁版嵁妯″瀷;
+`FUAvatarType`锛欰vatar绫诲瀷鐨勬灇涓撅細`FUAvatarType.CARTOON`銆乣FUAvatarType.REAL`锛岄粯璁ゆ槸`FUAvatarType.CARTOON`锛岃鍙傛暟涓昏鐢ㄦ潵鍖哄埆SDK鍐呯疆琛ㄦ儏銆傜己鐪佸弬鏁般��
+`OnAvatarStateListener`锛欰vatar鎵ц鐘舵�佹帴鍙o紝鏂规硶`onAvatarComplete()`琛ㄧずAvatar鍔犺浇瀹屾垚銆傜己鐪佸弬鏁般��
+
+**绀轰緥浠g爜锛�**
+
+```
+ FUAvatar fuAvatar = new FUAvatar.Builder()
+                    .setAvatar(avatar)// 鍒囨崲褰㈣薄
+                    .setCoordinate(x, y, z)// 璁剧疆褰㈣薄浣嶇疆
+                    .setBackground(backGround)// 璁剧疆鑳屾櫙
+                    .setCamera(camera)// 璁剧疆鐩告満浣�
+                    .setLight(light)// 璁剧疆鍏夌収
+                    .enableShadow(enable)// 璁剧疆闃村奖
+                    .build();
+                    
+// 鍒囨崲Avatar
+mFUStaKit.setAvatar(fuAvatar);
+鎴�
+mFUStaKit.setAvatar(fuAvatar, FUAvatarType.CARTOON);
+鎴�
+mFUStaKit.setAvatar(fuAvatar, FUAvatarType.CARTOON, onAvatarStateListener);
+```
+
+澶囨敞锛�
+
+璁剧疆榛樿鐨凙vatar鍜孉vatar鍒囨崲璋冪敤鏂瑰紡涓�鑷达紝璋冪敤鏃舵満鍙互鍦ㄥ紑濮嬫覆鏌撳墠璁剧疆涔熷彲浠ュ湪娓叉煋鍚庤缃紝Avatar鍒囨崲鍏跺搴旂殑鐗瑰緛涔熶細鏈夊彉鍖栵紝渚嬪鍒囨崲Avatar涔熶細鍒囨崲瀵瑰簲鐨勮儗鏅�佸厜鐓с�佷綅缃瓑绛夈��
+
+璇ユ楠ゅ彲鍙傝�冮泦鎴怐emo涓殑绀轰緥浠g爜锛歔AvatarDataFactory.java: Lines 250-278](../app/src/main/java/com/faceunity/fustademo/data/AvatarDataFactory.java#L250-L278)
+
+
+### 5. FUStaKit SDK 寮�濮嬫覆鏌�
+
+SDK閰嶇疆娓叉煋鐩稿叧鍙傛暟骞跺紑濮嬫覆鏌撱��
+
+鏂规硶锛歚requestRender(GLTextureView glTextureView)`
+鍙傛暟: `GLTextureView` SDK鎻愪緵鐨勬覆鏌撶殑缁勪欢
+
+**绀轰緥浠g爜锛�**
+
+	mFUStaKit.requestRender(glTextureView);// 璇锋眰娓叉煋
+    mFUStaKit.setCustomRenderResolution(renderWidth, renderHeight);// 璁剧疆娓叉煋鍒嗚鲸鐜囷紝renderWidth锛氬搴︼紝榛樿1280锛況enderHeight锛氶珮搴︼紝榛樿720
+
+    // Activity onDestroy 璋冪敤
+    Activity.onDestroy() {
+        super.onDestroy();
+        mFUStaKit.onDestroy();
+    }
+
+澶囨敞锛�
+
+璇ユ楠ゅ彲鍙傝�冮泦鎴怐emo涓殑绀轰緥浠g爜锛歔AvatarDataFactory.java: Lines 149-155](../app/src/main/java/com/faceunity/fustademo/data/AvatarDataFactory.java#L149-L155)
+
+### 6. 褰㈣薄鍙e瀷鏌ヨ鍜岄┍鍔�
+
+鏍规嵁浼犲叆鐨勯煶棰戞暟鎹垨鑰呮槸鏃堕棿鎴虫暟鎹煡璇㈠彛鍨嬪苟椹卞姩鍙e瀷锛屽紑鍙戣�呭彲鏍规嵁涓氬姟鍦烘櫙鍜岄渶姹傞�夋嫨鍚堥�傜殑椹卞姩鏂瑰紡锛�  
+鏍规嵁闊抽鏁版嵁鎴栬�呮椂闂存埑鏁版嵁鐨勮繑鍥炴柟寮忓彲鍒嗕负`娴佸紡闊抽椹卞姩`鍜宍闈炴祦寮忛煶棰戦┍鍔╜锛�
+鏍规嵁鑳藉鎻愪緵鐨勬暟鎹祫婧愬彲鍒嗕负`鏃堕棿鎴抽┍鍔╜銆乣Align椹卞姩`銆乣ASR椹卞姩`锛�
+鏍规嵁鏄惁鐢盨DK鎾斁鍣ㄦ挱鎶ラ煶棰戝彲鍒嗕负`SDK鍐呯疆鎾斁鍣ㄦ挱鎶銆乣鑷畾涔夋挱鏀惧櫒鎾姤`銆�
+鏂囨。浠SDK鍐呯疆鎾斁鍣ㄦ挱鎶銆乣鑷畾涔夋挱鏀惧櫒鎾姤`涓ょ妯″紡鍒嗙被璁茶В銆�
+
+#### SDK 鍐呯疆鎾斁鍣ㄦ挱鎶�
+
+鍐呯疆鎾斁鍣ㄦ挱鎶ワ紝闇�瑕佸湪鍙e瀷鏌ヨ涔嬪墠鍒濆鍖栧唴閮ㄦ挱鏀惧櫒銆�
+
+鏂规硶锛歚initStaPlayer(new FUPlayerConfig.Builder().setAudioSampleRate(sampleRate).build())`
+鍙傛暟: `FUPlayerConfig`锛氬唴閮ㄦ挱鏀惧櫒鐨勫弬鏁伴厤缃被锛屼富瑕侀厤缃噰鏍风巼銆佸0閬撴暟鍜屼綅娣便��
+
+**绀轰緥浠g爜锛�**
+
+    mFUStaKit.initStaPlayer(new FUPlayerConfig.Builder().setAudioSampleRate(16000).build());// 璁剧疆閲囨牱鐜囦负16k
+
+澶囨敞锛�
+
+鍐呯疆鎾斁鍣ㄦ挱鎶�,蹇呴』瑕佸厛鍒濆鍖栨挱鏀惧櫒锛屾帴涓嬫潵鎵嶈兘寮�濮嬪彛鍨嬬殑鏌ヨ鍜岄┍鍔ㄣ��
+
+
+* **娴佸紡闊抽锛屾棤鏃堕棿鎴�**
+
+    閽堝娴佸紡杩斿洖鐨勯煶棰戞暟鎹笖鏃犳椂闂存埑鐨勫満鏅痐锛堟湁鏃堕棿鎴宠偗瀹氳閲囩敤鏃堕棿鎴虫柟寮忥紝鍥犱负鏃堕棿鎴虫煡璇㈡晥鐜囬珮锛屽彛鍨嬫洿绮惧噯锛塦锛屾敮鎸侀煶棰戠被鍨嬶細`pcm`锛屾牴鎹煶棰戞暟鎹俊鎭煡璇㈠彛鍨嬬郴鏁帮紝鎾斁闊抽骞堕┍鍔ㄥ搴旂殑鍙e瀷銆�
+    鏍规嵁鑳戒笉鑳芥彁渚涢煶棰戞暟鎹搴旂殑鏂囨湰`锛堝悗鏂囩粺涓�绉颁箣涓篈lignText锛塦鍒嗕负锛歚Align`鏂瑰紡 涓� `ASR` 鏂瑰紡銆�
+
+    1銆乣ALIGN` 鏂瑰紡
+
+	 `Align`鏂瑰紡鏌ヨ鍙e瀷绯绘暟鏄潬闊抽鏁版嵁鍜屼笌涔嬪搴旂殑AlignText锛屽湪娴佸紡鐨勬煡璇腑锛岄煶棰戞暟鎹槸涓�娈垫杩斿洖锛屼絾鏄疉lignText鏄畬鏁寸殑涓�娈垫枃鏈紝`Align`鏂瑰紡鏌ヨ閫熷害杈僠ASR`鏂瑰紡鏇村揩锛屼篃鍙互鏀寔楂樼骇鐨勫姩浣滆〃鎯呯殑瀹氬埗鍖栵紝浣嗘槸涔熸湁闄愬埗锛屼緥濡侫lignText涓嶆敮鎸佺箒浣撲腑鏂囥��
+
+    **绀轰緥浠g爜锛�**
+
+      // 娴佸紡澶勭悊寮�濮�
+      mFUStaKit.notifyStaProcessStart(); 1銆乣ALIGN` 鏂瑰紡
+
+	 `Align`鏂瑰紡鏌ヨ鍙e瀷绯绘暟鏄潬闊抽鏁版嵁鍜屼笌涔嬪搴旂殑AlignText锛屽湪娴佸紡鐨勬煡璇腑锛岄煶棰戞暟鎹槸涓�娈垫杩斿洖锛屼絾鏄疉lignText鏄畬鏁寸殑涓�娈垫枃鏈紝`Align`鏂瑰紡鏌ヨ閫熷害杈僠ASR`鏂瑰紡鏇村揩锛屼篃鍙互鏀寔楂樼骇鐨勫姩浣滆〃鎯呯殑瀹氬埗鍖栵紝浣嗘槸涔熸湁闄愬埗锛屼緥濡侫lignText涓嶆敮鎸佺箒浣撲腑鏂囥��
+
+    **绀轰緥浠g爜锛�**
+
+      // 娴佸紡澶勭悊寮�濮�
+      mFUStaKit.notifyStaProcessStart();
+
+      ...
+      // 鍙e瀷鏌ヨ銆侀煶棰戞挱鏀惧苟椹卞姩瀵瑰簲鍙e瀷锛岃繖娈垫槸澶氭璋冪敤鐨勶紝鍗虫瘡娆℃湁娴佸紡闊抽杩斿洖閮戒細閲嶆柊璁剧疆`FUStaParams`骞惰皟鐢╜staProcess(params)`
+      FUStaParams params = new FUStaParams.Builder()
+                .setStreamMode(1)// 1 娴佸紡妯″紡锛� 0 闈炴祦寮忔ā寮�   榛樿闈炴祦寮�
+                .setAudioData(data)// 闊抽鏁版嵁锛屾祦寮忔煡璇㈣姹傚彧鑳芥槸PCM
+                .setAudioType(FUAudioType.PCM)// 闊抽绫诲瀷 娴佸紡鏌ヨ鍙敮鎸乸cm  榛樿pcm  
+                .setAlignText(align)// AlignText 娉ㄦ剰姝ゅ璁剧疆鐨勬槸鏁存鐨勬枃鏈�屼笉鏄笌璇ユ闊抽瀵瑰簲鐨勬枃鏈�
+                .setTimestampType(FUTimestampType.PHONE)// 鏃堕棿鎴崇被鍨嬶紝`ALIGN` 鏂瑰紡璁剧疆涓篳FUTimestampType.PHONE`
+                .build();
+      mFUStaKit.staProcess(params);
+      ...
+         
+      // 娴佸紡澶勭悊缁撴潫
+      mFUStaKit.notifyStaProcessFinish();
+
+	澶囨敞锛�
+
+	  闊抽鏃堕棿鎴虫湁涓ょ绫诲瀷锛氶煶绱犳椂闂存埑鍜屾枃瀛楁椂闂存埑锛屽垎鍒搴� `FUTimestampType.PHONE` 鍜� `FUTimestampType.CHARACTER`锛屾湁鍏抽煶绱犳椂闂存埑鍜屾枃鏈椂闂存埑鐨勫尯鍒彲鍙傝�僠12. FUStaParams 鍙傛暟閰嶇疆绫籤閲岄潰瀵规椂闂存埑鐨勭ず渚嬨��
+	 
+	  娴佸紡鏃犳椂闂存埑閲囩敤`ALIGN`鏂瑰紡鏌ヨ鍙e瀷绯绘暟锛宻dk鍐呴儴浼氭牴鎹煶棰戞暟鎹拰鐢熸垚鏁存闊抽鐨勬枃鏈绠楀嚭闊崇礌鏃堕棿鎴筹紝鏁卄setTimestampType(FUTimestampType.PHONE)`蹇呴』璁剧疆銆�
+	
+	  鍏充簬娴佸紡`ALIGN`鏂瑰紡锛屾瘮娴佸紡`ASR`鏂瑰紡闇�瑕佸璁剧疆鐢熸垚闊抽鏁版嵁鐨勬枃鏈紝娉ㄦ剰姝ゅ璁剧疆鐨勬槸鏁存鐨勬枃鏈�屼笉鏄笌璇ユ闊抽瀵瑰簲鐨勬枃鏈��
+      
+      璇ユ楠ゅ彲鍙傝�冮泦鎴怐emo涓殑绀轰緥浠g爜com.faceunity.fustademo.ui.TtsActivity.DataBakerTtsCallback銆�
+
+  
+    2銆乣ASR`鏂瑰紡
+
+    `ASR`鏂瑰紡鏌ヨ鍙e瀷绯绘暟鏄潬闊抽鏁版嵁锛宍ASR`鏂瑰紡鏌ヨ閫熷害杈冩參锛屽崟浣嶉煶棰戝鐞嗛�熷害绋嶈�楁椂锛屼絾娴佸紡鏌ヨ鍦烘櫙涓嬶紝SDK搴曞眰搴撴煡璇㈠鐞唍绉掔殑闊抽閫熷害杩滆繙澶т簬n绉掗煶棰戞挱鏀炬椂闀匡紝鍥犳鍙拷鐣ユ�ц兘宸紓銆�
+  
+     **绀轰緥浠g爜锛�**
+	  
+	  // 娴佸紡澶勭悊寮�濮�
+      mFUStaKit.notifyStaProcessStart();
+
+      ...
+      // 鍙e瀷鏌ヨ銆侀煶棰戞挱鏀惧苟椹卞姩瀵瑰簲鍙e瀷锛岃繖娈垫槸澶氭璋冪敤鐨勶紝鍗虫瘡娆℃湁娴佸紡闊抽杩斿洖閮戒細閲嶆柊璁剧疆`FUStaParams`骞惰皟鐢╜staProcess(params)`
+      FUStaParams params = new FUStaParams.Builder()
+                .setStreamMode(1)// 1 娴佸紡妯″紡锛� 0 闈炴祦寮忔ā寮�   榛樿闈炴祦寮�
+                .setAudioData(data)// 闊抽鏁版嵁锛屾祦寮忔煡璇㈣姹傚彧鑳芥槸PCM
+                .setAudioType(FUAudioType.PCM)// 闊抽绫诲瀷 娴佸紡鏌ヨ鍙敮鎸乸cm  榛樿pcm  
+                .setTimestampType(FUTimestampType.PHONE)// 鏃堕棿鎴崇被鍨嬶紝`ASR` 鏂瑰紡璁剧疆涓篳FUTimestampType.PHONE`
+                .build();
+      mFUStaKit.staProcess(params);
+      ...
+         
+      // 娴佸紡澶勭悊缁撴潫
+      mFUStaKit.notifyStaProcessFinish();
+  
+	澶囨敞锛�
+	
+	闊抽鏃堕棿鎴虫湁涓ょ绫诲瀷锛氶煶绱犳椂闂存埑鍜屾枃瀛楁椂闂存埑锛屽垎鍒搴� `FUTimestampType.PHONE` 鍜� `FUTimestampType.CHARACTER`锛屾湁鍏抽煶绱犳椂闂存埑鍜屾枃鏈椂闂存埑鐨勫尯鍒彲鍙傝�僠12. FUStaParams 鍙傛暟閰嶇疆绫籤閲岄潰瀵规椂闂存埑鐨勭ず渚嬨��
+	
+	娴佸紡鏃犳椂闂存埑閲囩敤`ASR`鏂瑰紡鏌ヨ鍙e瀷绯绘暟锛宻dk鍐呴儴浼氭牴鎹煶棰戞暟鎹绠楀嚭闊崇礌鏃堕棿鎴筹紝鏁卄setTimestampType(FUTimestampType.PHONE)`蹇呴』璁剧疆銆�
+
+    璇ユ楠ゅ彲鍙傝�冮泦鎴怐emo涓殑绀轰緥浠g爜com.faceunity.fustademo.ui.TtsActivity.DataBakerTtsCallback銆�
+
+   
+* **娴佸紡闊抽锛屾湁鏃堕棿鎴�**
+
+	 閽堝娴佸紡杩斿洖鐨勯煶棰戞暟鎹笖鏈夋椂闂存埑鐨勫満鏅紝鏌ヨ鑰楁椂鏈�灏戯紝鏈夋椂闂存埑鏁版嵁浼樺厛閲囩敤鏃堕棿鎴虫柟寮忋�傛敮鎸侀煶棰戠被鍨嬶細`pcm`锛屾牴鎹煶棰戞暟鎹俊鎭煡璇㈠彛鍨嬬郴鏁帮紝鎾斁闊抽骞堕┍鍔ㄥ搴旂殑鍙e瀷銆�
+
+    **绀轰緥浠g爜锛�**
+  
+	  // 娴佸紡澶勭悊寮�濮�
+      mFUStaKit.notifyStaProcessStart();
+
+      ...
+      // 鍙e瀷鏌ヨ銆侀煶棰戞挱鏀惧苟椹卞姩瀵瑰簲鍙e瀷锛岃繖娈垫槸澶氭璋冪敤鐨勶紝鍗虫瘡娆℃湁娴佸紡闊抽杩斿洖閮戒細閲嶆柊璁剧疆`FUStaParams`骞惰皟鐢╜staProcess(params)`
+      FUStaParams params = new FUStaParams.Builder()
+                .setStreamMode(1)// 1 娴佸紡妯″紡锛� 0 闈炴祦寮忔ā寮�   榛樿闈炴祦寮�
+                .setAudioData(data)// 闊抽鏁版嵁锛屾祦寮忔煡璇㈣姹傚彧鑳芥槸PCM
+                .setAudioType(FUAudioType.PCM)// 闊抽绫诲瀷 娴佸紡鏌ヨ鍙敮鎸乸cm  榛樿pcm  
+                .setTimestamp(timestamp)// 鏃堕棿鎴虫暟鎹�
+                .setTimestampType(FUTimestampType.PHONE)// 鏃堕棿鎴崇被鍨嬶紝鍏蜂綋绫诲瀷瑕佹牴鎹椂闂存埑鐨勭被鍨嬫潵瀹�
+                .build();
+      mFUStaKit.staProcess(params);
+      ...
+         
+      // 娴佸紡澶勭悊缁撴潫
+      mFUStaKit.notifyStaProcessFinish();
+
+  
+	澶囨敞锛�
+	
+	闊抽鏃堕棿鎴虫湁涓ょ绫诲瀷锛氶煶绱犳椂闂存埑鍜屾枃瀛楁椂闂存埑锛屽垎鍒搴� `FUTimestampType.PHONE` 鍜� `FUTimestampType.CHARACTER`锛屾湁鍏抽煶绱犳椂闂存埑鍜屾枃鏈椂闂存埑鐨勫尯鍒彲鍙傝�僠12. FUStaParams 鍙傛暟閰嶇疆绫籤閲岄潰瀵规椂闂存埑鐨勭ず渚嬨��
+
+    璇ユ楠ゅ彲鍙傝�冮泦鎴怐emo涓殑绀轰緥浠g爜com.faceunity.fustademo.ui.TtsActivity.DataBakerTtsCallback銆�
+
+  
+* **闈炴祦寮忛煶棰戯紝鏃犳椂闂存埑**
+
+    閽堝闈炴祦寮忚繑鍥炵殑闊抽鏁版嵁涓旀棤鏃堕棿鎴崇殑鍦烘櫙`锛堟湁鏃堕棿鎴宠偗瀹氳閲囩敤鏃堕棿鎴虫柟寮忥紝鍥犱负鏃堕棿鎴虫煡璇㈡晥鐜囬珮锛屽彛鍨嬫洿绮惧噯锛塦锛屾敮鎸侀煶棰戠被鍨嬶細`pcm\wav`锛屾牴鎹煶棰戞暟鎹俊鎭煡璇㈠彛鍨嬬郴鏁帮紝鎾斁闊抽骞堕┍鍔ㄥ搴旂殑鍙e瀷銆�
+    鏍规嵁鑳戒笉鑳芥彁渚涢煶棰戞暟鎹搴旂殑鏂囨湰`锛堝悗鏂囩粺涓�绉颁箣涓篈lignText锛塦鍒嗕负锛歚Align`鏂瑰紡 涓� `ASR` 鏂瑰紡銆�
+
+    1銆乣ALIGN` 鏂瑰紡
+
+     `Align`鏂瑰紡鏌ヨ鍙e瀷绯绘暟鏄潬闊抽鏁版嵁鍜屼笌涔嬪搴旂殑AlignText锛屽湪闈炴祦寮忕殑鏌ヨ涓紝闊抽鏁版嵁鏄竴鏁存杩斿洖锛孉lignText鏄煶棰戝搴旂殑鏂囨湰锛宍Align`鏂瑰紡鏌ヨ閫熷害杈僠ASR`鏂瑰紡鏇村揩锛屼篃鍙互鏀寔楂樼骇鐨勫姩浣滆〃鎯呯殑瀹氬埗鍖栵紝浣嗘槸涔熸湁闄愬埗锛屼緥濡侫lignText涓嶆敮鎸佺箒浣撲腑鏂囥��
+
+    **绀轰緥浠g爜锛�**
+
+      // 鍙e瀷鏌ヨ銆侀煶棰戞挱鏀惧苟椹卞姩瀵瑰簲鍙e瀷锛岃繖娈垫槸鍗曟璋冪敤鐨�
+      FUStaParams params = new FUStaParams.Builder()
+                .setAudioData(data)// 闊抽鏁版嵁锛岄潪娴佸紡鏌ヨ鏀寔PCM鍜學AV
+                .setAudioType(FUAudioType.PCM)// 闊抽绫诲瀷 闈炴祦寮忔煡璇㈡敮鎸乸cm銆亀av  榛樿pcm  
+                .setAlignText(align)// AlignText 娉ㄦ剰姝ゅ璁剧疆鐨勬槸鏁存鐨勬枃鏈�屼笉鏄笌璇ユ闊抽瀵瑰簲鐨勬枃鏈�
+                .setTimestampType(FUTimestampType.PHONE)// 鏃堕棿鎴崇被鍨嬶紝`ALIGN` 鏂瑰紡璁剧疆涓篳FUTimestampType.PHONE`
+                .build();
+      mFUStaKit.staProcess(params);
+
+	 澶囨敞锛�
+
+	 闊抽鏃堕棿鎴虫湁涓ょ绫诲瀷锛氶煶绱犳椂闂存埑鍜屾枃瀛楁椂闂存埑锛屽垎鍒搴� `FUTimestampType.PHONE` 鍜� `FUTimestampType.CHARACTER`锛屾湁鍏抽煶绱犳椂闂存埑鍜屾枃鏈椂闂存埑鐨勫尯鍒彲鍙傝�僠12. FUStaParams 鍙傛暟閰嶇疆绫籤閲岄潰瀵规椂闂存埑鐨勭ず渚嬨��
+	 
+	 `setTimestampType(FUTimestampType.PHONE)`锛岄潪娴佸紡鏃犳椂闂存埑閲囩敤`ALIGN`鏂瑰紡鏌ヨ鍙e瀷绯绘暟锛宻dk鍐呴儴浼氭牴鎹煶棰戞暟鎹拰鐢熸垚鏁存闊抽鐨勬枃鏈绠楀嚭闊崇礌鏃堕棿鎴筹紝鏁卄setTimestampType(FUTimestampType.PHONE)`蹇呴』璁剧疆銆�
+
+     璇ユ楠ゅ彲鍙傝�冮泦鎴怐emo涓殑绀轰緥浠g爜com.faceunity.fustademo.ui.SimpleActivity#sendText銆�
+
+	2銆乣ASR` 鏂瑰紡
+	   
+	  `ASR`鏂瑰紡鏌ヨ鍙e瀷绯绘暟鏄潬闊抽鏁版嵁锛宍ASR`鏂瑰紡鏌ヨ閫熷害杈冩參锛屽崟浣嶉煶棰戝鐞嗛�熷害绋嶈�楁椂锛� 鍗曚綅闊抽澶勭悊閫熷害涓嶅`ALIGN`鏂瑰紡锛屼絾鍐呴儴瀹炵幇浜嗛煶棰戝垎鍓叉彁楂樻晥鐜囥��
+
+ 	 **绀轰緥浠g爜锛�**
+
+      // 鍙e瀷鏌ヨ銆侀煶棰戞挱鏀惧苟椹卞姩瀵瑰簲鍙e瀷锛岃繖娈垫槸鍗曟璋冪敤鐨�
+      FUStaParams params = new FUStaParams.Builder()
+                .setAudioData(data)// 闊抽鏁版嵁锛岄潪娴佸紡鏌ヨ鏀寔PCM鍜學AV
+                .setAudioType(FUAudioType.PCM)// 闊抽绫诲瀷 闈炴祦寮忔煡璇㈡敮鎸乸cm銆亀av  榛樿pcm  
+                .setTimestampType(FUTimestampType.PHONE)// 鏃堕棿鎴崇被鍨嬶紝`ASR` 鏂瑰紡璁剧疆涓篳FUTimestampType.PHONE`
+                .build();
+      mFUStaKit.staProcess(params);
+  
+    澶囨敞锛�
+
+    闊抽鏃堕棿鎴虫湁涓ょ绫诲瀷锛氶煶绱犳椂闂存埑鍜屾枃瀛楁椂闂存埑锛屽垎鍒搴� `FUTimestampType.PHONE` 鍜� `FUTimestampType.CHARACTER`锛屾湁鍏抽煶绱犳椂闂存埑鍜屾枃鏈椂闂存埑鐨勫尯鍒彲鍙傝�僠12. FUStaParams 鍙傛暟閰嶇疆绫籤閲岄潰瀵规椂闂存埑鐨勭ず渚嬨��
+
+    闈炴祦寮忔棤鏃堕棿鎴抽噰鐢╜ASR`鏂瑰紡鏌ヨ鍙e瀷绯绘暟锛宻dk鍐呴儴浼氭牴鎹煶棰戞暟鎹绠楀嚭闊崇礌鏃堕棿鎴筹紝鏁卄setTimestampType(FUTimestampType.PHONE)`蹇呴』璁剧疆銆�
+
+    璇ユ楠ゅ彲鍙傝�冮泦鎴怐emo涓殑绀轰緥浠g爜com.faceunity.fustademo.ui.SimpleActivity#sendText銆�
+
+* **闈炴祦寮忛煶棰戯紝鏈夋椂闂存埑**
+
+    閽堝闈炴祦寮忚繑鍥炵殑闊抽鏁版嵁涓旀湁鏃堕棿鎴崇殑鍦烘櫙锛屾煡璇㈣�楁椂鏈�灏戯紝鏈夋椂闂存埑鏁版嵁浼樺厛閲囩敤鏃堕棿鎴虫柟寮忋�傛敮鎸侀煶棰戠被鍨嬶細`pcm\wav`锛屾牴鎹煶棰戞暟鎹俊鎭煡璇㈠彛鍨嬬郴鏁帮紝鎾斁闊抽骞堕┍鍔ㄥ搴旂殑鍙e瀷銆�
+
+	**绀轰緥浠g爜锛�**
+	  
+    // 鍙e瀷鏌ヨ銆侀煶棰戞挱鏀惧苟椹卞姩瀵瑰簲鍙e瀷
+    FUStaParams params = new FUStaParams.Builder()
+              .setAudioData(data)// 闊抽鏁版嵁锛岄潪娴佸紡鏌ヨ鏀寔PCM鍜學AV
+              .setAudioType(FUAudioType.PCM)// 闊抽绫诲瀷 闈炴祦寮忔煡璇㈡敮鎸乸cm銆亀av  榛樿pcm
+              .setTimestamp(timestamp)// 鏃堕棿鎴虫暟鎹�
+              .setTimestampType(FUTimestampType.PHONE)// 鏃堕棿鎴崇被鍨嬶紝`ASR` 鏂瑰紡璁剧疆涓篳FUTimestampType.PHONE`
+              .build();
+    mFUStaKit.staProcess(params);
+	  
+	澶囨敞锛�
+	
+	  闊抽鏃堕棿鎴虫湁涓ょ绫诲瀷锛氶煶绱犳椂闂存埑鍜屾枃瀛楁椂闂存埑锛屽垎鍒搴� `FUTimestampType.PHONE` 鍜� `FUTimestampType.CHARACTER`锛屾湁鍏抽煶绱犳椂闂存埑鍜屾枃鏈椂闂存埑鐨勫尯鍒彲鍙傝�僠12. FUStaParams 鍙傛暟閰嶇疆绫籤閲岄潰瀵规椂闂存埑鐨勭ず渚嬨��
+      
+      璇ユ楠ゅ彲鍙傝�冮泦鎴怐emo涓殑绀轰緥浠g爜com.faceunity.fustademo.ui.SimpleActivity#sendText銆�
+
+
+* **璁剧疆鍐呴儴鎾斁鍣ㄦ挱鏀剧姸鎬佹帴鍙�**
+
+	 浠ヤ笂鏂瑰紡鍧囬噰鐢ㄥ唴閮ㄦ挱鏀惧櫒鎾斁闊抽锛孲DK鍐呴儴鎾斁鐘舵�佺殑鎺ュ彛涓篳OnStaPlayerListener`;
+
+	 鏂规硶锛歚setStaPlayerListener(OnStaPlayerListener listener)`锛屾柟娉曚紶鍏ュ弬鏁颁富瑕佹槸`OnStaPlayerListener`銆�
+
+  	 **绀轰緥浠g爜锛�**
+
+	  mFUStaKit.setStaPlayerListener(new OnStaPlayerListener() {
+            @Override
+            public void onPrepared() {
+                // 鎾斁寮�濮�
+            }
+
+            @Override
+            public void onCompleted() {
+                // 鎾斁缁撴潫
+            }
+
+            @Override
+            public void onCancel() {
+                // 鎾斁鍙栨秷
+            }
+
+            @Override
+            public void onError(@Nullable String message) {
+                // 鎾斁鍑洪敊
+            }
+        });
+
+  澶囨敞锛�
+
+  璇ユ楠ゅ彲鍙傝�冮泦鎴怐emo涓殑绀轰緥浠g爜[AvatarDataFactory.java: Lines 98-105](../app/src/main/java/com/faceunity/fustademo/data/AvatarDataFactory.java#L98-L105)
+
+
+#### 鑷畾涔夋挱鏀惧櫒鎾姤
+
+    鐢ㄦ埛鑷畾涔夋挱鏀惧櫒鎾姤锛屽厛鏌ヨ鍙e瀷绯绘暟锛屾煡璇㈠畬鎴愭垨鑰呴娈垫煡璇㈠畬鎴愬嵆鍙互寮�濮嬭嚜瀹氫箟鐨勬挱鏀惧櫒鎾斁锛岀劧鍚庨�氳繃`OnExternalPlayerListener`鎺ュ彛鐨刞updateCurrentPosition()`杩斿洖鎾斁杩涘害缁橲DK,
+    SDK鎷垮埌鎾斁杩涘害椹卞姩瀵瑰簲鐨勫彛鍨嬶紝鍏蜂綋姝ラ涓猴細
+    
+#### 1銆佽嚜瀹氫箟鎾斁鍣ㄦ煡璇�
+
+   `鑷畾涔夋挱鏀惧櫒鎾姤`鏌ヨ鏂规硶涓巂鍐呯疆鎾斁鍣ㄦ挱鎶涓嶅悓锛屼笉杩嘸FUStaParams`鍙傛暟璁剧疆鏂瑰紡閮戒竴鑷淬�傝繖閲岀畝鍗曞垪涓綻娴佸紡鏃堕棿鎴虫煡璇鍜宍闈炴祦寮忔椂闂存埑鏌ヨ`涓ょ鏂瑰紡銆�
+
+###### 娴佸紡鏃堕棿鎴虫煡璇�
+
+   閽堝娴佸紡杩斿洖鐨勯煶棰戞暟鎹笖鏈夋椂闂存埑鐨勫満鏅紝鏌ヨ鑰楁椂鏈�灏戯紝鏈夋椂闂存埑鏁版嵁浼樺厛閲囩敤鏃堕棿鎴虫柟寮忋�傛敮鎸侀煶棰戠被鍨嬶細`pcm`锛屾牴鎹煶棰戞暟鎹俊鎭煡璇㈠彛鍨嬬郴鏁帮紝鎾斁闊抽骞堕┍鍔ㄥ搴旂殑鍙e瀷銆�
+
+   **绀轰緥浠g爜锛�**
+  
+    // 娴佸紡澶勭悊寮�濮�
+    mFUStaKit.notifyStaProcessStart();
+
+    ...
+    // 鍙e瀷鏌ヨ銆侀煶棰戞挱鏀惧苟椹卞姩瀵瑰簲鍙e瀷锛岃繖娈垫槸澶氭璋冪敤鐨勶紝鍗虫瘡娆℃湁娴佸紡闊抽杩斿洖閮戒細閲嶆柊璁剧疆`FUStaParams`骞惰皟鐢╜staProcess(params)`
+    FUStaParams params = new FUStaParams.Builder()
+              .setStreamMode(1)// 1 娴佸紡妯″紡锛� 0 闈炴祦寮忔ā寮�   榛樿闈炴祦寮�
+              .setAudioType(FUAudioType.PCM)// 闊抽绫诲瀷 娴佸紡鏌ヨ鍙敮鎸乸cm  榛樿pcm  
+              .setTimestamp(timestamp)// 鏃堕棿鎴虫暟鎹�
+              .setTimestampType(FUTimestampType.PHONE)// 鏃堕棿鎴崇被鍨嬶紝鍏蜂綋绫诲瀷瑕佹牴鎹椂闂存埑鐨勭被鍨嬫潵瀹�
+              .build();
+    mFUStaKit.staProcessNoPlayer(params);
+    ...
+         
+    // 娴佸紡澶勭悊缁撴潫
+    mFUStaKit.notifyStaProcessFinish();
+
+  
+   澶囨敞锛�
+
+   闊抽鏃堕棿鎴虫湁涓ょ绫诲瀷锛氶煶绱犳椂闂存埑鍜屾枃瀛楁椂闂存埑锛屽垎鍒搴� `FUTimestampType.PHONE` 鍜� `FUTimestampType.CHARACTER`锛屾湁鍏抽煶绱犳椂闂存埑鍜屾枃鏈椂闂存埑鐨勫尯鍒彲鍙傝�僠12. FUStaParams 鍙傛暟閰嶇疆绫籤閲岄潰瀵规椂闂存埑鐨勭ず渚嬨��
+ 
+
+###### 闈炴祦寮忔椂闂存埑鏌ヨ
+
+   閽堝闈炴祦寮忚繑鍥炵殑闊抽鏁版嵁涓旀湁鏃堕棿鎴崇殑鍦烘櫙锛屾煡璇㈣�楁椂鏈�灏戯紝鏈夋椂闂存埑鏁版嵁浼樺厛閲囩敤鏃堕棿鎴虫柟寮忋�傛敮鎸侀煶棰戠被鍨嬶細`pcm\wav`锛屾牴鎹煶棰戞暟鎹俊鎭煡璇㈠彛鍨嬬郴鏁帮紝鎾斁闊抽骞堕┍鍔ㄥ搴旂殑鍙e瀷銆�
+
+   **绀轰緥浠g爜锛�**
+
+    // 鍙e瀷鏌ヨ銆侀煶棰戞挱鏀惧苟椹卞姩瀵瑰簲鍙e瀷锛岃繖娈垫槸澶氭璋冪敤鐨勶紝鍗虫瘡娆℃湁娴佸紡闊抽杩斿洖閮戒細閲嶆柊璁剧疆`FUStaParams`骞惰皟鐢╜staProcess(params)`
+    FUStaParams params = new FUStaParams.Builder()
+              .setAudioType(FUAudioType.PCM)// 闊抽绫诲瀷 娴佸紡鏌ヨ鍙敮鎸乸cm  榛樿pcm  
+              .setTimestamp(timestamp)// 鏃堕棿鎴虫暟鎹�
+              .setTimestampType(FUTimestampType.PHONE)// 鏃堕棿鎴崇被鍨嬶紝鍏蜂綋绫诲瀷瑕佹牴鎹椂闂存埑鐨勭被鍨嬫潵瀹�
+              .build();
+    mFUStaKit.staProcessNoPlayer(params);
+
+
+   澶囨敞锛�
+
+   闊抽鏃堕棿鎴虫湁涓ょ绫诲瀷锛氶煶绱犳椂闂存埑鍜屾枃瀛楁椂闂存埑锛屽垎鍒搴� `FUTimestampType.PHONE` 鍜� `FUTimestampType.CHARACTER`锛屾湁鍏抽煶绱犳椂闂存埑鍜屾枃鏈椂闂存埑鐨勫尯鍒彲鍙傝�僠12. FUStaParams 鍙傛暟閰嶇疆绫籤閲岄潰瀵规椂闂存埑鐨勭ず渚嬨��
+   璇ユ楠ゅ彲鍙傝�冮泦鎴怐emo涓殑绀轰緥浠g爜锛歝om.faceunity.fustademo.ui.SongActivity.SongSelectedListener#play銆�
+
+
+#### 2銆佽缃甋DK鍙e瀷鏌ヨ鐘舵�佹帴鍙�
+
+   鍦╜1銆佽嚜瀹氫箟鎾斁鍣ㄦ煡璇涓煡璇㈠彛鍨嬬郴鏁版暟鎹紝鏃犺娴佸紡鏌ヨ杩樻槸闈炴祦寮忔煡璇紝鎴戜滑閮借兘澶熼�氳繃`OnStaProcessListener`鎺ュ彛鑾峰緱鏌ヨ涓�娆″彛鍨嬬郴鏁版暟鎹殑鍥炶皟锛�
+   鏈変釜杩欎釜鍥炶皟锛屾垜浠彲浠ヨ涓虹幇鍦⊿DK鍐呴儴宸茬粡鏈夊彛鍨嬬郴鏁扮殑缂撳瓨浜嗭紝杩欐椂鍊欏氨鍙互寮�濮嬭嚜瀹氫箟鎾斁鍣ㄧ殑鎾斁銆�
+
+   **绀轰緥浠g爜锛�**
+
+    mFUStaKit.setStaProcessListener(new OnStaProcessListener() {
+        @Override
+        public void onStaProcess(FUAudioProgressType audioProgressType, byte[] date) {
+              // 浼唬鐮�
+              CustomPlayer.startPlay();                       
+        }
+	});
+	  
+   澶囨敞锛�
+	
+   瀵逛簬娴佸紡鏌ヨ锛屾垜浠彲浠ュ湪璇ユ鏌ヨ棣栨`onStaProcess()`鏂规硶鍥炶皟鏃惰皟鐢ㄥ閮ㄦ挱鏀惧櫒鐨勬挱鏀炬柟娉曪紱瀵逛簬闈炴祦寮忔煡璇紝鎴戜滑鍙互鍦╜onStaProcess()`鏂规硶鍥炶皟鏃惰皟鐢ㄥ閮ㄦ挱鏀惧櫒鐨勬挱鏀炬柟娉曘��
+   `onStaProcess()`鏂规硶鍥炶皟鍦ㄩ潪UI绾跨▼銆�
+
+
+#### 3銆佸閮ㄦ挱鏀惧櫒鎾斁鐘舵�佸悓姝�
+
+   鍦╜2銆佽缃甋DK鍙e瀷鏌ヨ鐘舵�佹帴鍙鎴戜滑閫氳繃`OnStaProcessListener`鎺ュ彛鐭ラ亾浜嗚嚜瀹氫箟鎾斁鍣ㄧ殑鎾斁鏃舵満锛屾帴涓嬫潵杩涜澶栭儴鎾斁鍣ㄥ拰SDK鐨勭姸鎬佸悓姝ユ墠鑳介┍鍔ㄥ彛鍨嬨��
+
+* **鑷畾涔夋挱鏀惧櫒鎾姤鐘舵�佸悓姝�**
+
+   澶栭儴鎾斁鍣ㄦ挱鏀剧殑鐘舵�乣is playing`闇�瑕佸悜SDK鍚屾锛孲DK鍙湁鎺ユ敹鍒癭playing`淇″彿鎵嶈涓哄閮ㄦ挱鏀惧櫒寮�濮嬫挱鏀撅紝杩涜�屾牴鎹挱鏀捐繘搴﹂┍鍔ㄥ彛鍨嬨��
+ 
+	  CustomPlayer.startPlay() // 澶栭儴鎾斁鍣ㄦ挱鏀撅紙浼唬鐮侊級
+	  mFUStaKit.onExternalPlayerStart(); // 鎾斁鍣ㄦ挱鏀撅紝閫氱煡SDK鎾斁鍣ㄧ姸鎬侊細playing
+	  
+	  CustomPlayer.pause(); // 澶栭儴鎾斁鍣ㄦ殏鍋滐紙浼唬鐮侊級
+	  mFUStaKit.onExternalPlayerStop();  // 鎾斁鍣ㄦ殏鍋滐紝閫氱煡SDK鎾斁鍣ㄧ姸鎬侊細no playing
+	  
+	  CustomPlayer.resume(); // 澶栭儴鎾斁鍣ㄦ仮澶嶆挱鏀撅紙浼唬鐮侊級
+	  mFUStaKit.onExternalPlayerStart(); // 鎾斁鍣ㄥ鎾斁锛岄�氱煡SDK鎾斁鍣ㄧ姸鎬侊細playing
+	  
+	  CustomPlayer.stop(); // 澶栭儴鎾斁鍣ㄥ仠姝㈡挱鏀撅紙浼唬鐮侊級
+	  mFUStaKit.onExternalPlayerStop(); // 鎾斁鍣ㄥ仠姝㈡挱鏀撅紝閫氱煡SDK鎾斁鍣ㄧ姸鎬侊細no playing
+
+   澶囨敞锛�
+
+* **鑷畾涔夋挱鏀惧櫒鎾姤杩涘害鍚屾**
+
+   澶栭儴鎾斁鍣ㄦ挱鏀剧殑杩涘害閫氳繃`OnExternalPlayerListener`鐨刞updateCurrentPosition()`鍚屾鎾斁杩涘害缁橲DK锛孲DK鎺ユ敹鍒癭playing`淇″彿鏍规嵁鎾斁杩涘害椹卞姩鍙e瀷銆�
+
+	 **绀轰緥浠g爜锛�**
+
+      mFUStaKit.setExternalPlayerListener(new OnExternalPlayerListener() {
+          @Override
+          public long updateCurrentPosition() {
+            return position;
+          }
+	  });
+
+   澶囨敞锛氳姝ラ鍙弬鑰冮泦鎴怐emo涓殑绀轰緥浠g爜锛歔AvatarDataFactory.java: Lines 195-202](../app/src/main/java/com/faceunity/fustademo/data/AvatarDataFactory.java#L195-L202)銆�
+
+
+### 7. Align鏂瑰紡TAG鏍囩鍔熻兘
+
+   楂樼骇鐢ㄦ硶锛岄�氳繃閰嶇疆`鏍囩鏄犲皠琛╜鍜屽湪AlignText涓缃浐瀹氭爣璁颁綅锛屾挱鏀捐繃绋嬩腑鐢ㄦ潵绮剧‘鎺у埗褰㈣薄鍔ㄤ綔琛屼负鐨勮兘鍔涳紝鏀寔娴佸紡鍜岄潪娴佸紡銆�
+    
+   涓昏姝ラ濡備笅锛�
+
+#### 1銆侀厤缃爣绛炬槧灏勮〃
+
+   `鏍囩鏄犲皠琛╜锛屼互JSON琛ㄧず锛孞SON涓瓧娈典笉鍙殢鎰忔洿鏀�
+
+   鏂规硶锛歚setAlignTagConfig(String tagConfig, String defaultAnimation)`锛�
+   鏂规硶浼犲叆鍙傛暟涓昏鏄痐tagConfig`锛氭爣绛炬槧灏勮〃锛沗defaultAnimation`锛氭爣绛惧姩浣滄挱鏀惧畬姣曚細鍒囨崲鍒扮殑鍔ㄤ綔璺緞銆�
+
+   **绀轰緥浠g爜锛�**
+
+    JSON:
+    {
+      "tag": "#%娆㈣繋#%",// 瀵瑰簲鏍囩锛屽搴斿�间负鍥哄畾鏍煎紡鐨勫瓧娈碉紝鎴戜滑瑙勫畾鐨勬爣绛炬牸寮忥細`#%瀛楃#%`锛�
+      "emotion": "welcome emotion path",// 瀵瑰簲琛ㄦ儏bs璺緞锛屽姩鎬佸垏鎹㈣〃鎯�
+      "animation": "sta/animation/STA_anim_real_def_chuchu_v3_huanying.bundle"// 瀵瑰簲鍔ㄤ綔璺緞锛屽搴斿�间负鍔ㄤ綔鐨勭粷瀵硅矾寰勩��
+    },
+    {
+      "tag": "#%鍗曟墜寮鸿皟#%",
+      "animation": "sta/animation/STA_anim_real_def_chuchu_v3_danshouqiangdiao.bundle"
+    },
+    {
+      "tag": "#%鎸囧紩璧�#%",
+      "animation": "sta/animation/STA_anim_real_def_chuchu_v3_zhiyinzou.bundle"
+    },
+    {
+      "tag": "#%姣斿績#%",
+      "emotion": "default emotion path",
+      "animation": "sta/animation/STA_anim_real_def_chuchu_v3_bixin.bundle"
+    }
+
+    // 鏇存柊鏍囩閰嶇疆琛�
+    mFUStaKit.setAlignTagConfig(JSON, defaultAnimation);
+        
+   澶囨敞锛�
+
+   `setAlignTagConfig`蹇呴』瑕佷紶鍏defaultAnimation`榛樿鍔ㄧ敾锛屾墽琛屽畬鏍囩鍔ㄤ綔鍚庝細寰幆鎵ц`defaultAnimation`鍔ㄧ敾銆�
+
+     
+#### 2銆佽缃瓵lignText
+
+   閫氳繃璇ユ枃鏈彃鍏鏍囩鏄犲皠琛╜涓厤缃殑鏍囩锛屽悗缁煶棰戦┍鍔ㄦ椂闊抽鎾斁鍒版彃鍏ユ爣绛惧叧閿瓧鏃跺氨浼氬垏鎹㈣鏍囩鍖归厤鐨勫姩浣滃拰琛ㄦ儏銆�
+    
+   **绀轰緥浠g爜锛�**
+
+	闊抽鎾斁鍐呭锛�"澶у濂絶鎴戞槸灏忕帀銆備笅闈㈢敱鎴戞潵浠嬬粛涓�涓嬪叕鍙革細鎴戜滑涓撴敞浜庢櫤鑳藉浘褰㈢殑鍒涙柊涓庡簲鐢紝涓虹Щ鍔ㄤ簰鑱旂綉鎻愪緵3D鍐呭鐢熸垚涓庝簰鍔ㄧ殑琛屼笟瑙e喅鏂规銆傝嚧鍔涗簬灏嗗ソ鑾卞潪鐢靛奖绾х殑鐗规晥鎶�鏈湪娑堣垂绾у簲鐢ㄤ腑鐨勬櫘鍙娿��";
+    AlignText锛�"澶у濂絶鎴戞槸灏忕帀銆備笅闈㈢敱鎴戞潵#%娆㈣繋#%浠嬬粛涓�涓嬪叕鍙革細#%鍗曟墜寮鸿皟#%鎴戜滑涓撴敞浜庢櫤鑳藉浘褰㈢殑鍒涙柊涓庡簲鐢紝#%鎸囧紩璧�#%涓虹Щ鍔ㄤ簰鑱旂綉鎻愪緵3D鍐呭鐢熸垚涓庝簰鍔ㄧ殑琛屼笟瑙e喅鏂规銆�#%姣斿績#%鑷村姏浜庡皢濂借幈鍧炵數褰辩骇鐨勭壒鏁堟妧鏈湪娑堣垂绾у簲鐢ㄤ腑鐨勬櫘鍙娿��";
+
+    FUStaParams params = new FUStaParams.Builder()
+                .setStreamMode(1)// 1 娴佸紡妯″紡锛� 0 闈炴祦寮忔ā寮�   榛樿闈炴祦寮�
+                .setAudioData(data)// 闊抽鏁版嵁锛屾祦寮忔煡璇㈣姹傚彧鑳芥槸PCM
+                .setAudioType(FUAudioType.PCM)// 闊抽绫诲瀷 娴佸紡鏌ヨ鍙敮鎸乸cm  榛樿pcm  
+                .setAlignText(align)// AlignText 娉ㄦ剰姝ゅ璁剧疆鐨勬槸鏁存鐨勬枃鏈�屼笉鏄笌璇ユ闊抽瀵瑰簲鐨勬枃鏈�
+                .setTimestampType(FUTimestampType.PHONE)// 鏃堕棿鎴崇被鍨嬶紝`ALIGN` 鏂瑰紡璁剧疆涓篳FUTimestampType.PHONE`
+                .build();
+    mFUStaKit.staProcess(params);            
+        
+  澶囨敞锛�
+       
+  涓婅堪绀轰緥涓紝鎾斁鍐呭鏃讹紝浼氬湪鈥滄潵鈥濆叧閿瓧鍒囨崲#%娆㈣繋#%瀵瑰簲鐨勨�淪TA_anim_real_def_chuchu_v3_huanying.bundle鈥濆姩浣滃拰瀵瑰簲琛ㄦ儏銆�
+  鈥滅浉鈥濆叧閿瓧鍒囨崲#%鍗曟墜寮鸿皟#%瀵瑰簲鐨勨�淪TA_anim_real_def_chuchu_v3_danshouqiangdiao.bundle鈥濆姩浣滃拰瀵瑰簲琛ㄦ儏銆傚悗缁幇璞″潎涓鸿鍒版墍鎻掑叆鏍囩鍏抽敭瀛楁椂鍒囨崲瀵瑰簲鍔ㄤ綔鍜屽搴旇〃鎯呫��
+  鏈�鍚庢挱鏀锯�滆嚧鍔涗簬鈥濆叧閿瓧涔嬪墠鍒囨崲#%姣斿績#%瀵瑰簲鐨勫姩浣滃拰琛ㄦ儏锛屾鏃堕煶棰戞挱鏀惧畬鎴愬姩浣滆繕娌℃挱鏀惧畬鎴愮殑璇濅篃浼氱户缁挱鏀惧姩浣滐紝绛夊姩浣滄挱鏀惧畬姣曚細鍒囨崲鍒伴粯璁ゅ姩浣溿��
+      
+
+### 8. Avatar鍔ㄧ敾鍒囨崲鍔熻兘
+
+   Avatar鍒囨崲骞舵挱鏀惧叾鏀寔鐨勫姩鐢伙紝鏀寔鍗曟鎾斁鍜屽惊鐜挱鏀撅紝鏀寔澶氶亾鍏峰拰澶氶亾鍏峰姩浣滃拰Avatar鍔ㄧ敾鍚屾椂鎵ц銆�
+
+* **寰幆鎾斁鍔ㄧ敾**
+
+   鏂规硶锛歚playAnimation(String path, String[] prop, String[] propAnimation)`
+
+   鏂规硶浼犲叆鍙傛暟锛�
+   `path`锛欰vatar瑕佸垏鎹㈢殑鐩爣鍔ㄧ敾鐨勮矾寰勩��
+   `prop`锛欰vatar瑕佸姞杞界殑閬撳叿鐨勮矾寰勬暟缁勶紝缂虹渷鍙傛暟銆�
+   `propAnimation`锛欰vatar瑕佸姞杞界殑閬撳叿鍔ㄤ綔鐨勮矾寰勬暟缁勶紝缂虹渷鍙傛暟锛岀己鐪佸弬鏁般��
+
+   **绀轰緥浠g爜锛�**
+
+      // 鍒囨崲鍔ㄤ綔
+      mFUStaKit.playAnimation(animPath, prop, propAnimation);
+      鎴�
+      mFUStaKit.playAnimation(animPath);
+
+   澶囨敞锛�
+
+   璇ユ楠ゅ彲鍙傝�冮泦鎴怐emo涓殑绀轰緥浠g爜锛歔AvatarDataFactory.java: Lines 290-305](../app/src/main/java/com/faceunity/fustademo/data/AvatarDataFactory.java#L290-L305)銆�
+
+
+* **鎾斁鍗曟鍔ㄧ敾**
+
+   鏂规硶锛歚playAnimationOnce(String path, String[] prop, String[] propAnimation)`
+
+   鏂规硶浼犲叆鍙傛暟锛�
+   `path`锛欰vatar瑕佸垏鎹㈢殑鐩爣鍔ㄧ敾鐨勮矾寰勩��
+   `prop`锛欰vatar瑕佸姞杞界殑閬撳叿鐨勮矾寰勬暟缁勶紝缂虹渷鍙傛暟銆�
+   `propAnimation`锛欰vatar瑕佸姞杞界殑閬撳叿鍔ㄤ綔鐨勮矾寰勬暟缁勶紝缂虹渷鍙傛暟锛岀己鐪佸弬鏁般��
+
+   **绀轰緥浠g爜锛�**
+
+      // 鍒囨崲鍔ㄤ綔
+      mFUStaKit.playAnimationOnce(animPath, prop, propAnimation);
+      鎴�
+      mFUStaKit.playAnimationOnce(animPath);
+
+   澶囨敞锛�
+
+   璇ユ楠ゅ彲鍙傝�冮泦鎴怐emo涓殑绀轰緥浠g爜锛歔AvatarDataFactory.java: Lines 290-305](../app/src/main/java/com/faceunity/fustademo/data/AvatarDataFactory.java#L290-L305)銆�
+
+
+### 9. Avatar琛ㄦ儏鍒囨崲鍔熻兘
+
+   Avatar鍒囨崲琛ㄦ儏锛屾敮鎸丼DK鍐呯疆琛ㄦ儏鍜岃嚜瀹氫箟琛ㄦ儏銆�
+
+* **鍒囨崲SDK鍐呯疆琛ㄦ儏**
+
+   鏂规硶锛歚updateEmotion(FUEmotionType emotionType, int fpsNum)`
+
+   鏂规硶浼犲叆鍙傛暟锛�
+   `FUEmotionType`锛歋DK鏀寔鐨勫唴缃〃鎯呯殑鏋氫妇銆�
+   `fpsNum`锛氳繃娓″抚锛屽綋鍓嶈〃鎯呭垏鎹㈠埌鐩爣琛ㄦ儏鐨勫抚鏁帮紝榛樿涓�0锛岀己鐪佸弬鏁般��
+
+   **绀轰緥浠g爜锛�**
+
+      // 鍒囨崲鍔ㄤ綔
+      mFUStaKit.updateEmotion(emotionType, 5);
+      鎴�
+      mFUStaKit.updateEmotion(emotionType);
+
+   澶囨敞锛�
+
+   `FUEmotionType`璇︾粏浠嬬粛璇峰弬鑰僠13. FUEmotionType SDK鏀寔鐨勫唴缃〃鎯呯殑鏋氫妇`銆�
+
+   璇ユ楠ゅ彲鍙傝�冮泦鎴怐emo涓殑绀轰緥浠g爜锛歔AvatarDataFactory.java: Lines 392-400](../app/src/main/java/com/faceunity/fustademo/data/AvatarDataFactory.java#L392-L400)銆�
+
+* **鍒囨崲SDK鑷畾涔夎〃鎯�**
+
+   鏂规硶锛歚updateCustomEmotion(String path, int fpsNum)`
+
+   鏂规硶浼犲叆鍙傛暟锛�
+   `path`锛氳嚜瀹氫箟琛ㄦ儏bs鏂囦欢璺緞銆�
+   `fpsNum`锛氳繃娓″抚锛屽綋鍓嶈〃鎯呭垏鎹㈠埌鐩爣琛ㄦ儏鐨勫抚鏁帮紝榛樿涓�0锛岀己鐪佸弬鏁般��
+
+   **绀轰緥浠g爜锛�**
+
+      // 鍒囨崲鍔ㄤ綔
+      mFUStaKit.updateCustomEmotion(animPath, 5);
+      鎴�
+      mFUStaKit.updateCustomEmotion(animPath);
+
+   澶囨敞锛�
+
+   璇ユ楠ゅ彲鍙傝�冮泦鎴怐emo涓殑绀轰緥浠g爜锛歔AvatarDataFactory.java: Lines 392-400](../app/src/main/java/com/faceunity/fustademo/data/AvatarDataFactory.java#L392-L400)銆�
+
+
+### 10. 甯哥敤鏂规硶
+
+* **璁剧疆3D鎶楅敮榻块厤缃�**
+
+	璁剧疆鎶楅敮榻匡紝鍑忓皯娓叉煋鐨勯敮榻挎劅銆�
+
+	**绀轰緥浠g爜锛�**
+
+	  mFUStaKit.setMultiSamples(int samples);// samples榛樿涓�4
+
+
+* **璁剧疆娓叉煋甯х巼**
+
+	璁剧疆娓叉煋甯х巼銆�
+
+	**绀轰緥浠g爜锛�**
+
+	  mFUStaKit.setRenderFPS(int renderFPS);// renderFPS榛樿30
+
+
+* **SDK onResume()**
+
+	涓巗dk onPause()鎴愬鍑虹幇锛屽搴擜ctivity onResume()鍑忓皯涓嶅繀瑕佺殑娓叉煋浠庤�屾彁楂樻�ц兘锛涢潪蹇呴渶璋冪敤锛屽彲涓嶈缃鏂规硶銆�
+
+	**绀轰緥浠g爜锛�**
+
+	  mFUStaKit.onResume();
+
+
+* **SDK onPause()**
+
+	涓巗dk onResume()鎴愬鍑虹幇锛屽搴擜ctivity onPause()鍑忓皯涓嶅繀瑕佺殑娓叉煋浠庤�屾彁楂樻�ц兘锛涢潪蹇呴渶璋冪敤锛屽彲涓嶈缃鏂规硶銆�
+
+	**绀轰緥浠g爜锛�**
+
+	  mFUStaKit.onPause();
+
+
+* **SDK onDestroy()**
+
+    Activity onDestroy()璋冪敤銆�
+
+    **绀轰緥浠g爜锛�**
+
+      mFUStaKit.onDestroy();
+
+
+* **Avatar鏇存柊鑳屾櫙**
+
+	鏀寔鑳屾櫙閬撳叿鏇存柊銆傚弬鏁�: 鑳屾櫙閬撳叿鐨勭粷瀵硅矾寰勩��
+	
+	**绀轰緥浠g爜锛�**
+
+	  mFUStaKit.setBackground(String background);// 鑳屾櫙鍒囨崲锛屽弬鏁颁负鑳屾櫙閬撳叿璺緞
+      
+      
+* **Avatar鍏夌収鏇存柊**
+
+	鏀寔鍏夌収閬撳叿鏇存柊銆傚弬鏁�: 鐏厜閬撳叿鐨勭粷瀵硅矾寰勩��
+
+	**绀轰緥浠g爜锛�**
+
+	  mFUStaKit.setLight(String light);// 鏇存柊鍏夌収锛屽弬鏁颁负鐏厜閬撳叿璺緞
+
+
+* **Avatar鐩告満浣嶆洿鏂�**
+
+	鏀寔鐩告満浣嶉亾鍏锋洿鏂般�傚弬鏁�: 鐩告満浣嶉亾鍏风殑缁濆璺緞銆�
+
+	**绀轰緥浠g爜锛�**
+
+	  mFUStaKit.setCamera(String camera);// 鏇存柊鐩告満浣嶏紝鍙傛暟涓虹浉鏈洪亾鍏疯矾寰�
+
+
+* **Avatar寮�鍚槾褰�**
+
+	鏀寔寮�鍚槾褰便��
+
+	**绀轰緥浠g爜锛�**
+
+	  mFUStaKit.enableShadow(String enableShadow);// 鏄惁寮�鍚槾褰�
+
+
+* **Avatar寮�鍚槾褰辨姉閿娇**
+
+	寮�鍚槾褰辨姉閿娇銆�
+
+	**绀轰緥浠g爜锛�**
+
+	  mFUStaKit.setShadowPCFLevel(int level);// 闃村奖閿娇绠楁硶绾у埆
+
+
+* **璁剧疆Avatar浣嶇疆**
+
+	璁剧疆瑙掕壊鍦ㄤ笁缁寸┖闂寸殑浣嶇疆锛屽弬鏁�:  
+	x锛歞ouble X杞村潗鏍� 涓�鑸皟鏁磋寖鍥� -200.0~200.0
+	y锛歞ouble Y杞村潗鏍� 涓�鑸皟鏁磋寖鍥� -600.0~800.0
+	z锛歞ouble Z杞村潗鏍� 涓�鑸皟鏁磋寖鍥� -3000.0~600.0
+
+	**绀轰緥浠g爜锛�**
+
+	  mFUStaKit.setPosition(x锛寉, z);
+
+
+* **鏃嬭浆褰㈣薄**
+
+	鏃嬭浆瑙掕壊锛屽弬鏁�:double 琛ㄧず鏃嬭浆澧為噺锛屼竴鑸皟鏁磋寖鍥� -1.0~1.0锛屾晥鏋滀负鏃嬭浆
+
+	**绀轰緥浠g爜锛�**
+
+	  mFUStaKit.setRotDelta(val)  // 鏃嬭浆瑙掕壊
+
+      
+* **缂╂斁褰㈣薄**
+
+    缂╂斁瑙掕壊锛屽弬鏁�:double 琛ㄧず缂╂斁澧為噺锛屼竴鑸皟鏁磋寖鍥� -1.0~1.0锛屾晥鏋滀负缂╂斁
+
+    **绀轰緥浠g爜锛�**
+
+      mFUStaKit.setScaleDelta(val)  // 缂╂斁瑙掕壊
+
+
+* **涓婁笅绉诲姩褰㈣薄**
+
+    涓婁笅绉诲姩瑙掕壊锛屽弬鏁�:double 琛ㄧず涓婁笅澧為噺锛屼竴鑸皟鏁磋寖鍥� -1.0~1.0锛屾晥鏋滀负涓婁笅绉诲姩
+
+    **绀轰緥浠g爜锛�**
+
+      mFUStaKit.setTranslateDelta(val)  // 涓婁笅绉诲姩瑙掕壊
+      
+      
+* **璁剧疆鏃嬭浆瑙掑害**
+
+    璁剧疆鏃嬭浆瑙掑害锛屽弬鏁�:float 琛ㄧず鏃嬭浆瑙掑害锛屾晥鏋滀负鏃嬭浆
+
+    **绀轰緥浠g爜锛�**
+
+      mFUStaKit.setRotate(val)  // 璁剧疆鏃嬭浆瑙掑害
+
+
+* **Avatar鍔ㄧ敾鎭㈠鎾斁**
+
+    鎭㈠鎾斁褰撳墠鍔ㄧ敾
+
+    **绀轰緥浠g爜锛�**
+
+	  // 缁х画鎾斁褰撳墠鍔ㄧ敾
+	  mFUStaKit.startCurrentAnimation();
+
+
+* **Avatar鍔ㄧ敾鏆傚仠鎾斁**
+
+    鏆傚仠鎾斁褰撳墠鍔ㄧ敾
+
+    **绀轰緥浠g爜锛�**
+
+      // 鏆傚仠鎾斁褰撳墠鍔ㄧ敾
+	  mFUStaKit.pauseCurrentAnimation();
+
+
+* **璁剧疆Avatar鍔ㄧ敾鐨勮繃娓℃椂闂�**
+
+    鍔ㄧ敾鍒囨崲鏈変竴涓繃娓★紝姝ゆ柟娉曡缃姩浣滃垏鎹㈡椂锛屽師鍔ㄤ綔鍜屽垏鎹㈠姩浣滅殑杩囨浮鏃堕棿銆�
+    鍙傛暟锛氳繃娓℃椂闂达紝鍗曚綅涓虹锛岄粯璁や负0.5
+
+    **绀轰緥浠g爜锛�**
+
+      // 璁剧疆鍔ㄤ綔鐨勮繃娓℃椂闂�
+	  mFUStaKit.setAnimationTransitionTime(time);
+      
+      
+* **璁剧疆Avatar鍔ㄧ敾鐨勬挱鏀鹃�熷害**
+
+    鍔ㄧ敾鍒囨崲鏈変竴涓繃娓★紝姝ゆ柟娉曡缃姩浣滄挱鏀剧殑閫熷害銆�
+    鍙傛暟锛氭挱鏀鹃�熷害鎸′綅锛岃寖鍥�0.2-5.0锛岄粯璁や负1.0
+
+    **绀轰緥浠g爜锛�**
+
+      // 璁剧疆鍔ㄤ綔鐨勬挱鏀鹃�熷害
+	  mFUStaKit.setAnimationSpeed(speed);
+      
+      
+ * **璁剧疆鏃ュ織鏄惁杈撳嚭鍒版枃浠�**
+
+    璁剧疆SDK杈撳嚭鍒版寚瀹氭湰鍦扮洰褰曘��
+
+    **绀轰緥浠g爜锛�**
+      // 璁剧疆鏃ュ織杈撳嚭鐨勭洰褰曡矾寰�
+      mFUStaKit.setLogOutputDir(logcatDir)
+      // 璁剧疆鏃ュ織鏄惁杈撳嚭鍒版枃浠�
+	  mFUStaKit.enableLogOutput(enable);
+
+
+### 11. 閿�姣� FUStaKit 瀹炰緥
+
+鍦ㄩ渶瑕侀攢姣丗UStaKit鏃讹紝閿�姣丼DK锛岄噴鏀惧唴瀛樿祫婧愩��
+
+**绀轰緥浠g爜锛�**
+
+```
+mFUStaKit().release();
+```
+
+### 12. FUStaParams 鍙傛暟閰嶇疆绫�
+
+`streamMode` : 1 娴佸紡妯″紡锛� 0 闈炴祦寮忔ā寮�  榛樿锛�0
+
+`splitSegmentSeconds` : 娴佸紡鍒嗗壊姣忔闂撮殧锛屽崟浣嶇  榛樿锛�2
+
+`audioData` : 闊抽鏁版嵁 绫诲瀷锛氬瓧鑺傛暟缁�
+
+`audioType` : 闊抽绫诲瀷 `FUAudioType.WAV`锛宍FUAudioType.PCM`锛岄粯璁�:`FUAudioType.PCM`
+
+`audioSampleRate` : 閲囨牱鐜� 榛樿锛�16K锛屽繀椤讳笌鍐呴儴鎾斁鍣ㄨ缃殑閲囨牱鐜囦竴鑷�
+
+`audioEncoding` : 閲囨牱绮惧害  榛樿锛�16
+
+`audioChannel` : 澹伴亾鏁�  榛樿锛� 1
+
+`alignText` : 闊抽瀵瑰簲鐨勬枃鏈�
+
+`timestamp` : 鏃堕棿鎴�  绫诲瀷锛歋tring  鐢ㄤ簬瀛樺湪鏃堕棿鎴崇殑鎯呭喌
+```
+鏃堕棿鎴虫牸寮忕ず渚�:
+0.000000 0.070000 sil
+0.070000 0.105000 n
+0.105000 0.165000 i
+0.165000 0.275000 h
+0.275000 0.452000 ao
+0.452000 0.802000 sil
+```
+姣忎釜闊崇礌浠ユ崲琛岀\n鍒嗚锛屾瘡琛屽唴瀹瑰垎鍒负:寮�濮嬫椂闂达紝缁撴潫鏃堕棿锛岄煶绱�
+
+`timestampType` 锛� 鏃堕棿鎴崇被鍨�  闊抽鏁版嵁绫诲瀷瀵瑰簲鐫�闊宠妭鏃堕棿鎴筹紝鏈変袱绉嶇被鍨嬶細闊崇礌銆佹枃瀛楁椂闂存埑鏍煎紡锛屽垎鍒搴� `FUTimestampType.PHONE` 銆� `FUTimestampType.CHARACTER`  榛樿锛欶UTimestampType.CHARACTER
+```
+闊崇礌绫诲瀷锛屾瘮濡傦細
+0.0 0.075 SIL
+0.075 0.185 c
+0.185 0.315 ong
+0.315 0.41 m
+0.41 0.509 ing
+0.509 0.594 t
+0.594 0.779 ian
+0.779 0.98399997 q
+0.98399997 1.189 i
+1.189 1.511 SIL
+         
+         
+鏂囨湰绫诲瀷锛屾瘮濡傦細
+0.000000 1.871000 SIL
+1.872000 2.056000 鎴�
+2.057000 2.248000 鐨�
+2.249000 2.444000 鐪�
+2.445000 2.993000 鐫�
+2.994000 3.313000 鏈�
+3.314000 3.680000 鍚�
+3.681000 4.130000 绐�
+4.131000 4.767000 澶�
+4.767000 4.967000 SIL
+```
+
+### 13. FUEmotionType SDK鏀寔鐨勫唴缃〃鎯呯殑鏋氫妇
+
+```
+NONE : 鏃犺〃鎯咃紝鐪ㄧ溂锛岃〃鎯呰窡闅忓姩鐢昏〃鎯�
+DYNAMIC_NORMAL : 姝e父琛ㄦ儏
+DYNAMIC_JOY : 鍔ㄦ�佸紑蹇�
+DYNAMIC_ANGER : 鍔ㄦ�佺敓姘�
+DYNAMIC_DISGUST : 鍔ㄦ�佸帉鎭�
+DYNAMIC_SURPRISE : 鍔ㄦ�佹儕璁�
+DYNAMIC_FEAR : 鍔ㄦ�佹亹鎯�
+DYNAMIC_TRUST : 鍔ㄦ�佷俊浠�
+DYNAMIC_SADNESS : 鍔ㄦ�佹偛浼�
+DYNAMIC_DOUBT : 鍔ㄦ�佺枒闂�
+```
+
+### 14. 甯歌闂
+
+* **濡備綍璁╄幏鍙栨棩蹇�**
+
+    瑙g瓟:
+	1. 鍦ㄥ垵濮嬪寲鍓嶈缃甡FUStaKit.setStaKitDebug(FUStaLogger.LogLevel.TRACE)`銆�
+	2. 鍙e瀷闂鍙互鐢╜FUSTA_LOG`杩囨护锛屾覆鏌撻棶棰樺彲浠ョ敤`KIT_SDKController`杩囨护銆�
+
+* **褰㈣薄鍔犺浇澶辫触\鍔犺浇涓嶅嚭鏉�**
+    
+    瑙g瓟:
+	1. 妫�鏌ヨ瘉涔︽槸鍚﹁繃鏈熴��
+	2. 妫�鏌ヨ祫婧愭枃浠讹紙bundle锛夎矾寰勶紙缁濆璺緞锛夋槸鍚﹁缃纭��
+	3. 妫�鏌ュ苟璋冩暣褰㈣薄浣嶇疆澶у皬銆�
+	4. 妫�鏌UStaSDK鐗堟湰涓庤鍔犺浇鐨勮祫婧愭枃浠剁増鏈槸鍚﹀搴斻��
+
+* **褰㈣薄鏃犳硶椹卞姩鍙e瀷**
+    
+    瑙g瓟锛�
+	1. 妫�鏌ヨ瘉涔︽槸鍚﹁繃鏈熴��
+    2. 妫�鏌DK鍒濆鍖栬缃��
+    3. 妫�鏌ュ舰璞¢┍鍔ㄥ彛鍨嬫柟娉曞弬鏁伴厤缃��
+    4. 澶栭儴鎾斁鍣ㄦ槸鍚﹁缃簡寮�濮嬫挱鏀炬柟娉曟垨鑰呮湁娌℃湁璁剧疆鎾斁杩涘害銆�
+    5. 濡傛灉浣跨敤浜哸sr鎴栬�卆lign鏂瑰紡锛屾鏌ユ槸鍚﹀姞杞戒簡鎵╁睍鏁版嵁鍖呫��
+    6. 妫�鏌ョ洰鏍囨灦鏋勫拰SDK鎵�鏀寔鏋舵瀯鏄惁涓�鑷淬��
+    7. 妫�鏌ユ槸鍚︽湁绗笁鏂瑰簱涓嶴DK鍐茬獊涓斿紑鍙戝仛浜嗕互涓嬫搷浣滐細鎵撳寘鏃剁Щ闄ら」鐩腑鐨勫簱鏂囦欢鎴栬缃尮閰嶅埌绗竴涓簱鏂囦欢銆�
+
+
+* **鍙e瀷涓嶅噯纭�**
+    
+    瑙g瓟锛�
+    1. 妫�鏌ュ舰璞¢┍鍔ㄥ彛鍨嬫柟娉曞弬鏁伴厤缃��
+    2. 澶栭儴鎾斁鍣ㄥ悓姝ュ埌SDK鐨勬挱鏀捐繘搴︿笉鍑嗙‘銆�
+
+* **鑳屾櫙閫忔槑**
+
+    鏈変簺闇�姹傚満鏅笇鏈涘彲浠ュ疄鐜拌儗鏅�忔槑鐨勯渶姹傦紝鍙弬鑰冧互涓嬫柟寮忋��
+
+    瑙g瓟锛�
+  1. GLTextureView.setOpaque(false);
+  2. mFUStaKit.setBackground(null);
+
+* **妯珫灞忓垏鎹�**
+
+    瑙g瓟锛�
+  1. 鍦ˋndroidManifest.xml涓厤缃瓵ctivity android:configChanges="orientation|screenSize"銆�
diff --git "a/STA\346\233\264\346\226\260\346\227\245\345\277\227.md" "b/STA\346\233\264\346\226\260\346\227\245\345\277\227.md"
new file mode 100644
index 0000000..68ca86c
--- /dev/null
+++ "b/STA\346\233\264\346\226\260\346\227\245\345\277\227.md"
@@ -0,0 +1,120 @@
+#### 2019.11.08
+
+**1.1.1**
+
+- 娣诲姞閴存潈鏂瑰紡锛岀洰鍓嶆敮鎸佸湪绾块壌鏉冦�乼ype1銆佺绾块壌鏉僼ype2
+- 浼樺寲sdk鍒濆鍖栨暟鎹寘鏂规硶
+- 鎻愰珮搴曞眰鏌ヨ閫熷害锛岄�傞厤澶氳澶囧舰璞″睍绀�
+- 鏇存柊褰㈣薄鍔ㄤ綔璧勬簮
+
+#### 2019.11.26
+
+**2.1.1**
+
+- 鏇存柊娣诲姞褰㈣薄鍔ㄤ綔璧勬簮
+- 鍒犻櫎鏃lign搴曞眰搴�
+- 娣诲姞褰㈣薄鏀寔鐗瑰畾鍏夌収bundle銆乥sconfigdata锛坆s绯绘暟锛�
+- 鏇存柊sta銆乻ta_lite搴曞眰搴�,鏈�浣庢敮鎸佸畨鍗�4.2鐗堟湰
+
+#### 2019.12.25
+
+**1.0**
+
+- 鍩轰簬2.1.1鏇存柊鐨勭ǔ瀹氱増鏈�
+- 淇娴佸紡鎾斁鍣╞ug
+- 鏇存崲controller銆乶ama銆侀粯璁ゅ厜鐓э紝鍗囩骇鍔ㄧ敾绯荤粺锛宑ontroller鍙鐢紝鏀寔璧勬簮鏁扮粍鍜岀嫭绔媋vatar璧勬簮鍔犺浇
+- 鏇存柊bs绯绘暟锛屾坊鍔燽s铻嶅悎
+- 鏀寔璧勬簮璺緞鍔犺浇鏂瑰紡锛歛ssets\sdcard
+
+#### 2020.01.15
+
+**1.1**
+
+- 淇鎾斁鍣╞ug
+- 鏇存柊搴曞眰搴擄紝sta搴撴敮鎸佹祦寮忔煡璇紝Align鏂瑰紡鏀寔娴佸紡鏌ヨ
+- 鏇挎崲浜嗘祦寮忔椂闂存埑鍜屾祦寮忛煶棰戦┍鍔ㄥ彛鍨嬬畻娉�
+- 鏀寔闀块煶棰戞寜鐓ч潤闊冲抚鍒嗗壊
+- 浼樺寲椹卞姩閫昏緫
+
+#### 2020.04.1
+
+**1.2**
+
+- 澧炲姞sdk鍒濆鍖栧洖璋�
+- 鏇存敼GLSurfaceView涓篏LTextureView,瀹屽叏鏀寔鑳屾櫙閫忔槑鏂规
+- 鏇存柊nama鍜宑ontroller,鏀寔鐗╃悊鍔ㄦ晥
+- 鏇存柊sta鍙e瀷搴撳拰鐩稿叧閰嶇疆鏂囦欢
+- 鎾斁鍣ㄦ柊澧瀋ancle()鍥炶皟
+- 鏂板鍔ㄧ敾鏆傚仠銆佹仮澶嶆挱鏀炬柟娉�
+
+#### 2020.06.9
+
+**1.2.1**
+
+- 鍐呴儴閫昏緫浼樺寲
+- 鏀寔鍔ㄦ�佸垏鎹㈣儗鏅痓undle鍜岃嚜瀹氫箟鑳屾櫙
+
+#### 2020.07.6
+
+**1.3**
+
+- 鏀寔浜咥lign妯″紡鐨勬爣绛惧姛鑳�
+- 鏀寔缁勫悎閬撳叿鍒囨崲
+- 鏀寔鍔ㄦ�侀槾褰遍亾鍏�
+- 鏀寔璁剧疆鍔ㄧ敾杩囨浮鏃堕棿
+
+#### 2020.01.20
+
+**1.4**
+
+- 鏇存柊sta鍙e瀷搴擄紝浼樺寲鍙e瀷
+- 鏇存柊CNama搴擄紝淇娓叉煋鐩稿叧bug
+- 鏂板鍔ㄦ�侀槾褰卞紑鍏�
+- 鏂板妯″瀷鏃嬭浆銆佺缉鏀俱�佷笂涓嬬Щ鍔ㄧ殑鏂规硶
+- 鏂板琛ㄦ儏杩囨浮寮�鍏筹紝鏇存柊琛ㄦ儏bs鏂囦欢
+- 浼樺寲鏃ュ織鍒嗙骇鎵撳嵃鍔熻兘
+- 浼樺寲鑳屾櫙閫忔槑鍜岃儗鏅垏鎹㈡晥鏋�
+- 浼樺寲浠g爜閫昏緫
+
+#### 2021.02.24
+
+**1.4.1**
+
+- 浼樺寲琛ㄦ儏鍒囨崲鍜岃〃鎯呰繃娓″姛鑳�
+- 浼樺寲鍙e瀷鎾姤鏁堟灉
+- 淇鍏朵粬宸茬煡闂
+
+#### 2021.04.23
+
+**1.5**
+
+- 饨�鎸佲緝瀹氫箟甯х巼
+- 饨�鎸佲緝瀹氫箟鍒嗚鲸鐜�
+- 饨�鎸佽繍饩忔椂淇敼鏍囩閰嶇疆琛�
+- 饨�鎸佽緭鍑篟GBABuffer鏁版嵁
+- 浼樺寲閫忔槑鑳屾櫙鎶楅敮饣晥鏋�
+- 浼樺寲澶氶亾鍏风粍鍚堟帴饧�
+- 淇饩冨畾涔夎儗鏅け鏁堢殑闂
+
+#### 2021.09.30
+
+**2.0**
+
+- 鏇存柊sta鍙e瀷搴�
+- 鍩轰簬Render-Kit缁勪欢娓叉煋
+- 鏇存柊閮ㄥ垎鏂规硶瀹氫箟
+- 饨�鎸佸姩鎬佹洿鏂版満浣�
+- 饨�鎸佸姩鎬佹洿鏂板厜鐓�
+
+#### 2022.01.21
+
+**2.1**
+
+- 浼樺寲CPU鎬ц兘浠ュ強鏌ヨ鏁堢巼
+- 鏂板鍔ㄧ敾鎾斁閫熷害鎺у埗鎺ュ彛
+- 鏇存柊BS绯绘暟57-47
+- 淇闈欓煶甯ч棶棰�
+- 饨�鏂板璁剧疆鏃嬭浆瑙掑害
+- 浼樺寲闃村奖閿娇绠楁硶
+- 澧炲姞璇︾粏鏃ュ織鎺ュ彛
+
diff --git a/duan.md b/duan.md
new file mode 100644
index 0000000..600b697
--- /dev/null
+++ b/duan.md
@@ -0,0 +1,54 @@
+				寮�鍏虫満鐩掑瓙娴嬭瘯鎶ュ憡
+娴嬭瘯绱犳潗锛�
+
+鏃�
+
+娴嬭瘯鐩殑锛�
+
+纭18涓紑鍏虫満鐩掑瓙鏄惁姝e父寮�鍏虫満
+
+娴嬭瘯鏃堕棿锛�
+
+绗笁鎵癸細寮�濮嬫椂闂�2021-12-24
+                  缁撴潫鏃堕棿2021-12-30
+
+缁堢MAC鍦板潃锛�
+
+01锛�0025E1033D53
+02锛�0025E1033CF6
+03锛�0025E1033D00
+04锛�0025E1033D02
+05锛�0025E1033CF3
+06锛�0025E1033D72
+07锛�0025E1033D66
+08锛�0025E1033A8B
+09锛�0025E1033CF2
+10锛�0025E1033D5B
+11锛�0025E1033D6F
+12锛�0025E1033A61
+13锛�0025E1033D4A
+14锛�0025E1033D68
+15锛�0025E1033D67
+16锛�0025E1033CE4
+17锛�0025E1033D47
+18锛�0025E1033DA1
+
+娴嬭瘯杩囩▼锛�
+
+1銆� 灏�18鍙板紑鍏虫満鐩掑瓙鏃堕棿璁剧疆缁熶竴锛岀粺涓�鍕鹃�夊叧鏈烘椂娈靛唴涓婄數淇濇寔寮�鏈� 
+鍛ㄤ竴鑷冲懆浜旓細08:15 鈥� 09:00
+                                    09:10 鈥� 10:00
+                			 10:10 鈥� 12:00
+               			 12:10 鈥� 13:00
+              			 13:10 鈥� 18:00
+            鍛ㄥ叚鍏ㄥぉ寮�
+            鍛ㄦ棩鍏ㄥぉ鍏�
+
+缁撴灉锛�18鍙板紑鍏虫満鐩掑瓙鍦ㄨ瀹氱殑鏃堕棿姝e父寮�鍏虫満
+  
+   
+
+鎬荤粨
+Mac鍦板潃涓�0025E1033CF2 绾挎帴閿欎簡锛屼互涓嬫槸鍥剧墖锛�
+
+
diff --git a/haha.sh b/haha.sh
new file mode 100644
index 0000000..890d0d6
--- /dev/null
+++ b/haha.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+#妫�鏌ユ槸鍚︿负root璐﹀彿
+if [ $(whoami) != "root" ];then
+    echo "璇蜂娇鐢╮oot鏉冮檺鎵ц"
+    exit 1;
+fi
+
+#妫�鏌ユ槸鍚︿负64浣嶇郴缁�
+is64bit=$(getconf LONG_BIT)
+if [ "${is64bit}" != '64' ];then
+    Red_Error "璇蜂娇鐢�64浣嶇郴缁�";
+fi
+
+#璁惧畾杞欢瀹夎鐩綍涓�/server
+cd /
+mkdir server
+install_path="/server"
+
+#瀹夎JDK骞惰缃幆澧冨彉閲�
+mkdir $install_path/JDK
+rm -rf $install_path/JDK/jdk-18.0.2.1/
+tar -xvf /Tools/jdk-18_linux-x64_bin.tar.gz -C $install_path/JDK
+JAVA_HOME=$install_path/JDK/jdk-18.0.2.1
+echo export JAVA_HOME=$install_path/JDK/jdk-18.0.2.1 >> /etc/profile
+echo export PATH=$JAVA_HOME/bin:$PATH >> /etc/profile
+echo export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar >> /etc/profile
+source /etc/profile
diff --git a/install.sh b/install.sh
new file mode 100644
index 0000000..207b2f5
--- /dev/null
+++ b/install.sh
@@ -0,0 +1,738 @@
+#!/bin/bash
+PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
+export PATH
+LANG=en_US.UTF-8
+
+if [ $(whoami) != "root" ];then
+	echo "璇蜂娇鐢╮oot鏉冮檺鎵ц瀹濆瀹夎鍛戒护锛�"
+	exit 1;
+fi
+
+is64bit=$(getconf LONG_BIT)
+if [ "${is64bit}" != '64' ];then
+	Red_Error "鎶辨瓑, 褰撳墠闈㈡澘鐗堟湰涓嶆敮鎸�32浣嶇郴缁�, 璇蜂娇鐢�64浣嶇郴缁熸垨瀹夎瀹濆5.9!";
+fi
+
+cd ~
+setup_path="/www"
+python_bin=$setup_path/server/panel/pyenv/bin/python
+cpu_cpunt=$(cat /proc/cpuinfo|grep processor|wc -l)
+
+if [ "$1" ];then
+	IDC_CODE=$1
+fi
+
+GetSysInfo(){
+	if [ -s "/etc/redhat-release" ];then
+		SYS_VERSION=$(cat /etc/redhat-release)
+	elif [ -s "/etc/issue" ]; then
+		SYS_VERSION=$(cat /etc/issue)
+	fi
+	SYS_INFO=$(uname -a)
+	SYS_BIT=$(getconf LONG_BIT)
+	MEM_TOTAL=$(free -m|grep Mem|awk '{print $2}')
+	CPU_INFO=$(getconf _NPROCESSORS_ONLN)
+
+	echo -e ${SYS_VERSION}
+	echo -e Bit:${SYS_BIT} Mem:${MEM_TOTAL}M Core:${CPU_INFO}
+	echo -e ${SYS_INFO}
+	echo -e "璇锋埅鍥句互涓婃姤閿欎俊鎭彂甯栬嚦璁哄潧v7.hostcli.com/bbs姹傚姪"
+}
+Red_Error(){
+	echo '=================================================';
+	printf '\033[1;31;40m%b\033[0m\n' "$1";
+	GetSysInfo
+	exit 1;
+}
+Lock_Clear(){
+	if [ -f "/etc/bt_crack.pl" ];then
+		chattr -R -ia /www
+		chattr -ia /etc/init.d/bt
+		\cp -rpa /www/backup/panel/vhost/* /www/server/panel/vhost/
+		mv /www/server/panel/BTPanel/__init__.bak /www/server/panel/BTPanel/__init__.py
+		rm -f /etc/bt_crack.pl
+	fi
+}
+Install_Check(){
+	if [ "${INSTALL_FORCE}" ];then
+		return
+	fi
+	echo -e "----------------------------------------------------"
+	echo -e "妫�鏌ュ凡鏈夊叾浠朩eb/mysql鐜锛屽畨瑁呭疂濉斿彲鑳藉奖鍝嶇幇鏈夌珯鐐瑰強鏁版嵁"
+	echo -e "Web/mysql service is alreday installed,Can't install panel"
+	echo -e "----------------------------------------------------"
+	echo -e "宸茬煡椋庨櫓/Enter yes to force installation"
+	read -p "杈撳叆yes寮哄埗瀹夎: " yes;
+	if [ "$yes" != "yes" ];then
+		echo -e "------------"
+		echo "鍙栨秷瀹夎"
+		exit;
+	fi
+	INSTALL_FORCE="true"
+}
+System_Check(){
+	MYSQLD_CHECK=$(ps -ef |grep mysqld|grep -v grep|grep -v /www/server/mysql)
+	PHP_CHECK=$(ps -ef|grep php-fpm|grep master|grep -v /www/server/php)
+	NGINX_CHECK=$(ps -ef|grep nginx|grep master|grep -v /www/server/nginx)
+	HTTPD_CHECK=$(ps -ef |grep -E 'httpd|apache'|grep -v /www/server/apache|grep -v grep)
+	if [ "${PHP_CHECK}" ] || [ "${MYSQLD_CHECK}" ] || [ "${NGINX_CHECK}" ] || [ "${HTTPD_CHECK}" ];then
+		Install_Check
+	fi
+}
+Get_Pack_Manager(){
+	if [ -f "/usr/bin/yum" ] && [ -d "/etc/yum.repos.d" ]; then
+		PM="yum"
+	elif [ -f "/usr/bin/apt-get" ] && [ -f "/usr/bin/dpkg" ]; then
+		PM="apt-get"		
+	fi
+}
+Auto_Swap()
+{
+	swap=$(free |grep Swap|awk '{print $2}')
+	if [ "${swap}" -gt 1 ];then
+		echo "Swap total sizse: $swap";
+		return;
+	fi
+	if [ ! -d /www ];then
+		mkdir /www
+	fi
+	swapFile="/www/swap"
+	dd if=/dev/zero of=$swapFile bs=1M count=1025
+	mkswap -f $swapFile
+	swapon $swapFile
+	echo "$swapFile    swap    swap    defaults    0 0" >> /etc/fstab
+	swap=`free |grep Swap|awk '{print $2}'`
+	if [ $swap -gt 1 ];then
+		echo "Swap total sizse: $swap";
+		return;
+	fi
+	
+	sed -i "/\/www\/swap/d" /etc/fstab
+	rm -f $swapFile
+}
+Service_Add(){
+	if [ "${PM}" == "yum" ] || [ "${PM}" == "dnf" ]; then
+		chkconfig --add bt
+		chkconfig --level 2345 bt on
+	elif [ "${PM}" == "apt-get" ]; then
+		update-rc.d bt defaults
+	fi 
+}
+
+get_node_url(){
+	if [ ! -f /bin/curl ];then
+		if [ "${PM}" = "yum" ]; then
+			yum install curl -y
+		elif [ "${PM}" = "apt-get" ]; then
+			apt-get install curl -y
+		fi
+	fi
+	
+	echo '---------------------------------------------';
+	echo "Selected download node...";	
+	download_Url='http://v7.hostcli.com';
+	echo "Download node: $download_Url";
+	echo '---------------------------------------------';
+}
+Remove_Package(){
+	local PackageNmae=$1
+	if [ "${PM}" == "yum" ];then
+		isPackage=$(rpm -q ${PackageNmae}|grep "not installed")
+		if [ -z "${isPackage}" ];then
+			yum remove ${PackageNmae} -y
+		fi 
+	elif [ "${PM}" == "apt-get" ];then
+		isPackage=$(dpkg -l|grep ${PackageNmae})
+		if [ "${PackageNmae}" ];then
+			apt-get remove ${PackageNmae} -y
+		fi
+	fi
+}
+Install_RPM_Pack(){
+	yumPath=/etc/yum.conf
+	Centos8Check=$(cat /etc/redhat-release | grep ' 8.' | grep -iE 'centos|Red Hat')
+	isExc=$(cat $yumPath|grep httpd)
+	if [ "$isExc" = "" ];then
+		echo "exclude=httpd nginx php mysql mairadb python-psutil python2-psutil" >> $yumPath
+	fi
+
+	#yumBaseUrl=$(cat /etc/yum.repos.d/CentOS-Base.repo|grep baseurl=http|cut -d '=' -f 2|cut -d '$' -f 1|head -n 1)
+	#[ "${yumBaseUrl}" ] && checkYumRepo=$(curl --connect-timeout 5 --head -s -o /dev/null -w %{http_code} ${yumBaseUrl})	
+	#if [ "${checkYumRepo}" != "200" ];then
+	#	curl -Ss --connect-timeout 3 -m 60 http://download.bt.cn/install/yumRepo_select.sh|bash
+	#fi
+	
+	#灏濊瘯鍚屾鏃堕棿(浠巄t.cn)
+	echo 'Synchronizing system time...'
+	getBtTime=$(curl -sS --connect-timeout 3 -m 60 http://v7.hostcli.com/api/index/get_time)
+	if [ "${getBtTime}" ];then	
+		date -s "$(date -d @$getBtTime +"%Y-%m-%d %H:%M:%S")"
+	fi
+
+	if [ -z "${Centos8Check}" ]; then
+		yum install ntp -y
+		rm -rf /etc/localtime
+		ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
+
+		#灏濊瘯鍚屾鍥介檯鏃堕棿(浠巒tp鏈嶅姟鍣�)
+		ntpdate 0.asia.pool.ntp.org
+		setenforce 0
+	fi
+
+	startTime=`date +%s`
+
+	sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
+	#yum remove -y python-requests python3-requests python-greenlet python3-greenlet
+	yumPacks="libcurl-devel wget tar gcc make zip unzip openssl openssl-devel gcc libxml2 libxml2-devel libxslt* zlib zlib-devel libjpeg-devel libpng-devel libwebp libwebp-devel freetype freetype-devel lsof pcre pcre-devel vixie-cron crontabs icu libicu-devel c-ares libffi-devel bzip2-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel"
+	yum install -y ${yumPacks}
+
+	for yumPack in ${yumPacks}
+	do
+		rpmPack=$(rpm -q ${yumPack})
+		packCheck=$(echo ${rpmPack}|grep not)
+		if [ "${packCheck}" ]; then
+			yum install ${yumPack} -y
+		fi
+	done
+	if [ -f "/usr/bin/dnf" ]; then
+		dnf install -y redhat-rpm-config
+	fi
+
+	ALI_OS=$(cat /etc/redhat-release |grep "Alibaba Cloud Linux release 3")
+	if [ -z "${ALI_OS}" ];then 
+		yum install epel-release -y
+	fi
+}
+Install_Deb_Pack(){
+	ln -sf bash /bin/sh
+	apt-get update -y
+	apt-get install ruby -y
+	apt-get install lsb-release -y
+	#apt-get install ntp ntpdate -y
+	#/etc/init.d/ntp stop
+	#update-rc.d ntp remove
+	#cat >>~/.profile<<EOF
+	#TZ='Asia/Shanghai'; export TZ
+	#EOF
+	#rm -rf /etc/localtime
+	#cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
+	#echo 'Synchronizing system time...'
+	#ntpdate 0.asia.pool.ntp.org
+	#apt-get upgrade -y
+	debPacks="wget curl libcurl4-openssl-dev gcc make zip unzip tar openssl libssl-dev gcc libxml2 libxml2-dev zlib1g zlib1g-dev libjpeg-dev libpng-dev lsof libpcre3 libpcre3-dev cron net-tools swig build-essential libffi-dev libbz2-dev libncurses-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libdb++-dev libpcap-dev xz-utils git";
+	apt-get install -y $debPacks --force-yes
+
+	for debPack in ${debPacks}
+	do
+		packCheck=$(dpkg -l ${debPack})
+		if [ "$?" -ne "0" ] ;then
+			apt-get install -y debPack
+		fi
+	done
+
+	if [ ! -d '/etc/letsencrypt' ];then
+		mkdir -p /etc/letsencryp
+		mkdir -p /var/spool/cron
+		if [ ! -f '/var/spool/cron/crontabs/root' ];then
+			echo '' > /var/spool/cron/crontabs/root
+			chmod 600 /var/spool/cron/crontabs/root
+		fi	
+	fi
+}
+Install_Bt(){
+	panelPort="8888"
+	if [ -f ${setup_path}/server/panel/data/port.pl ];then
+		panelPort=$(cat ${setup_path}/server/panel/data/port.pl)
+	fi
+	mkdir -p ${setup_path}/server/panel/logs
+	mkdir -p ${setup_path}/server/panel/vhost/apache
+	mkdir -p ${setup_path}/server/panel/vhost/nginx
+	mkdir -p ${setup_path}/server/panel/vhost/rewrite
+	mkdir -p ${setup_path}/server/panel/install
+	mkdir -p /www/server
+	mkdir -p /www/wwwroot
+	mkdir -p /www/wwwlogs
+	mkdir -p /www/backup/database
+	mkdir -p /www/backup/site
+
+	if [ ! -f "/usr/bin/unzip" ]; then
+		if [ "${PM}" = "yum" ]; then
+			yum install unzip -y
+		elif [ "${PM}" = "apt-get" ]; then
+			apt-get install unzip -y
+		fi
+	fi
+
+	if [ -f "/etc/init.d/bt" ]; then
+		/etc/init.d/bt stop
+		sleep 1
+	fi
+
+	wget -O panel.zip ${download_Url}/install/src/panel_new.zip -T 10
+	wget -O /etc/init.d/bt ${download_Url}/install/src/bt6.init -T 10
+	wget -O /www/server/panel/install/public.sh ${download_Url}/install/public.sh -T 10
+
+	if [ -f "${setup_path}/server/panel/data/default.db" ];then
+		if [ -d "/${setup_path}/server/panel/old_data" ];then
+			rm -rf ${setup_path}/server/panel/old_data
+		fi
+		mkdir -p ${setup_path}/server/panel/old_data
+		d_format=$(date +"%Y%m%d_%H%M%S")
+		\cp -arf ${setup_path}/server/panel/data/default.db ${setup_path}/server/panel/data/default_backup_${d_format}.db
+		mv -f ${setup_path}/server/panel/data/default.db ${setup_path}/server/panel/old_data/default.db
+		mv -f ${setup_path}/server/panel/data/system.db ${setup_path}/server/panel/old_data/system.db
+		mv -f ${setup_path}/server/panel/data/port.pl ${setup_path}/server/panel/old_data/port.pl
+		mv -f ${setup_path}/server/panel/data/admin_path.pl ${setup_path}/server/panel/old_data/admin_path.pl
+	fi
+
+	unzip -o panel.zip -d ${setup_path}/server/ > /dev/null
+
+	if [ -d "${setup_path}/server/panel/old_data" ];then
+		mv -f ${setup_path}/server/panel/old_data/default.db ${setup_path}/server/panel/data/default.db
+		mv -f ${setup_path}/server/panel/old_data/system.db ${setup_path}/server/panel/data/system.db
+		mv -f ${setup_path}/server/panel/old_data/port.pl ${setup_path}/server/panel/data/port.pl
+		mv -f ${setup_path}/server/panel/old_data/admin_path.pl ${setup_path}/server/panel/data/admin_path.pl
+		if [ -d "/${setup_path}/server/panel/old_data" ];then
+			rm -rf ${setup_path}/server/panel/old_data
+		fi
+	fi
+
+	rm -f panel.zip
+
+	if [ ! -f ${setup_path}/server/panel/tools.py ];then
+		Red_Error "ERROR: Failed to download, please try install again!"
+	fi
+
+	rm -f ${setup_path}/server/panel/class/*.pyc
+	rm -f ${setup_path}/server/panel/*.pyc
+
+	chmod +x /etc/init.d/bt
+	chmod -R 600 ${setup_path}/server/panel
+	chmod -R +x ${setup_path}/server/panel/script
+	ln -sf /etc/init.d/bt /usr/bin/bt
+	echo "${panelPort}" > ${setup_path}/server/panel/data/port.pl
+	wget -O /etc/init.d/bt ${download_Url}/install/src/bt7.init -T 10
+	wget -O /www/server/panel/init.sh ${download_Url}/install/src/bt7.init -T 10
+}
+Install_Python_Lib(){
+	curl -Ss --connect-timeout 3 -m 60 $download_Url/install/pip_select.sh|bash
+	pyenv_path="/www/server/panel"
+	if [ -f $pyenv_path/pyenv/bin/python ];then
+		is_err=$($pyenv_path/pyenv/bin/python3.7 -V 2>&1|grep 'Could not find platform')
+		if [ "$is_err" = "" ];then
+			chmod -R 700 $pyenv_path/pyenv/bin
+			is_package=$($python_bin -m psutil 2>&1|grep package)
+			if [ "$is_package" = "" ];then
+				wget -O $pyenv_path/pyenv/pip.txt $download_Url/install/pyenv/pip.txt -T 5
+				$pyenv_path/pyenv/bin/pip install -U pip
+				$pyenv_path/pyenv/bin/pip install -U setuptools
+				$pyenv_path/pyenv/bin/pip install -r $pyenv_path/pyenv/pip.txt
+			fi
+			source $pyenv_path/pyenv/bin/activate
+			return
+		else
+			rm -rf $pyenv_path/pyenv
+		fi
+	fi
+	py_version="3.7.8"
+	mkdir -p $pyenv_path
+	os_type='el'
+	os_version='7'
+	is_export_openssl=0
+	Get_Versions
+	Centos6_Openssl
+	Other_Openssl
+	echo "OS: $os_type - $os_version"
+	is_aarch64=$(uname -a|grep aarch64)
+	if [ "$is_aarch64" != "" ];then
+		os_version="aarch64"
+	fi
+	
+	if [ -f "/www/server/panel/pymake.pl" ];then
+		os_version=""
+		rm -f /www/server/panel/pymake.pl
+	fi	
+
+	if [ "${os_version}" != "" ];then
+		pyenv_file="/www/pyenv.tar.gz"
+		wget -O $pyenv_file $download_Url/install/pyenv/pyenv-${os_type}${os_version}-x${is64bit}.tar.gz -T 10
+		tmp_size=$(du -b $pyenv_file|awk '{print $1}')
+		if [ $tmp_size -lt 703460 ];then
+			rm -f $pyenv_file
+			echo "ERROR: Download python env fielded."
+		else
+			echo "Install python env..."
+			tar zxvf $pyenv_file -C $pyenv_path/ > /dev/null
+			chmod -R 700 $pyenv_path/pyenv/bin
+			if [ ! -f $pyenv_path/pyenv/bin/python ];then
+				rm -f $pyenv_file
+				Red_Error "ERROR: Install python env fielded."
+			fi
+			is_err=$($pyenv_path/pyenv/bin/python3.7 -V 2>&1|grep 'Could not find platform')
+			if [ "$is_err" = "" ];then
+				rm -f $pyenv_file
+				ln -sf $pyenv_path/pyenv/bin/pip3.7 /usr/bin/btpip
+				ln -sf $pyenv_path/pyenv/bin/python3.7 /usr/bin/btpython
+				source $pyenv_path/pyenv/bin/activate
+				return
+			else
+				rm -f $pyenv_file
+				rm -rf $pyenv_path/pyenv
+			fi
+		fi
+		
+	fi
+	if [ -f /usr/local/openssl/lib/libssl.so ];then
+		export LDFLAGS="-L/usr/local/openssl/lib"
+		export CPPFLAGS="-I/usr/local/openssl/include"
+		export PKG_CONFIG_PATH="/usr/local/openssl/lib/pkgconfig"
+		echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/openssl/lib" >> /etc/profile
+		source /etc/profile
+	fi
+	cd /www
+	python_src='/www/python_src.tar.xz'
+	python_src_path="/www/Python-${py_version}"
+	wget -O $python_src $download_Url/src/Python-${py_version}.tar.xz -T 5
+	tmp_size=$(du -b $python_src|awk '{print $1}')
+	if [ $tmp_size -lt 10703460 ];then
+		rm -f $python_src
+		Red_Error "ERROR: Download python source code fielded."
+	fi
+	tar xvf $python_src
+	rm -f $python_src
+	cd $python_src_path
+	./configure --prefix=$pyenv_path/pyenv
+	make -j$cpu_cpunt
+	make install
+	if [ ! -f $pyenv_path/pyenv/bin/python3.7 ];then
+		rm -rf $python_src_path
+		Red_Error "ERROR: Make python env fielded."
+	fi
+	cd ~
+	rm -rf $python_src_path
+	wget -O $pyenv_path/pyenv/bin/activate $download_Url/install/pyenv/activate.panel -T 5
+	wget -O $pyenv_path/pyenv/pip.txt $download_Url/install/pyenv/pip-3.7.8.txt -T 5
+	ln -sf $pyenv_path/pyenv/bin/pip3.7 $pyenv_path/pyenv/bin/pip
+	ln -sf $pyenv_path/pyenv/bin/python3.7 $pyenv_path/pyenv/bin/python
+	ln -sf $pyenv_path/pyenv/bin/pip3.7 /usr/bin/btpip
+	ln -sf $pyenv_path/pyenv/bin/python3.7 /usr/bin/btpython
+	chmod -R 700 $pyenv_path/pyenv/bin
+	$pyenv_path/pyenv/bin/pip install -U pip
+	$pyenv_path/pyenv/bin/pip install -U setuptools
+	$pyenv_path/pyenv/bin/pip install -U wheel==0.34.2 
+	$pyenv_path/pyenv/bin/pip install -r $pyenv_path/pyenv/pip.txt
+	source $pyenv_path/pyenv/bin/activate
+}
+Other_Openssl(){
+	openssl_version=$(openssl version|grep -Eo '[0-9]\.[0-9]\.[0-9]')
+	if [ "$openssl_version" = '1.0.1' ] || [ "$openssl_version" = '1.0.0' ];then	
+		opensslVersion="1.0.2r"
+		if [ ! -f "/usr/local/openssl/lib/libssl.so" ];then
+			cd /www
+			openssl_src_file=/www/openssl.tar.gz
+			wget -O $openssl_src_file ${download_Url}/src/openssl-${opensslVersion}.tar.gz
+			tmp_size=$(du -b $openssl_src_file|awk '{print $1}')
+			if [ $tmp_size -lt 703460 ];then
+				rm -f $openssl_src_file
+				Red_Error "ERROR: Download openssl-1.0.2 source code fielded."
+			fi
+			tar -zxf $openssl_src_file
+			rm -f $openssl_src_file
+			cd openssl-${opensslVersion}
+			#zlib-dynamic shared
+			./config --openssldir=/usr/local/openssl zlib-dynamic shared
+			make -j${cpuCore} 
+			make install
+			echo  "/usr/local/openssl/lib" > /etc/ld.so.conf.d/zopenssl.conf
+			ldconfig
+			cd ..
+			rm -rf openssl-${opensslVersion}
+			is_export_openssl=1
+			cd ~
+		fi
+	fi
+}
+Insatll_Libressl(){
+	openssl_version=$(openssl version|grep -Eo '[0-9]\.[0-9]\.[0-9]')
+	if [ "$openssl_version" = '1.0.1' ] || [ "$openssl_version" = '1.0.0' ];then	
+		opensslVersion="3.0.2"
+		cd /www
+		openssl_src_file=/www/openssl.tar.gz
+		wget -O $openssl_src_file ${download_Url}/install/pyenv/libressl-${opensslVersion}.tar.gz
+		tmp_size=$(du -b $openssl_src_file|awk '{print $1}')
+		if [ $tmp_size -lt 703460 ];then
+			rm -f $openssl_src_file
+			Red_Error "ERROR: Download libressl-$opensslVersion source code fielded."
+		fi
+		tar -zxf $openssl_src_file
+		rm -f $openssl_src_file
+		cd libressl-${opensslVersion}
+		./config 鈥損refix=/usr/local/lib
+		make -j${cpuCore}
+		make install
+		ldconfig
+		ldconfig -v
+		cd ..
+		rm -rf libressl-${opensslVersion}
+		is_export_openssl=1
+		cd ~
+	fi
+}
+Centos6_Openssl(){
+	if [ "$os_type" != 'el' ];then
+		return
+	fi
+	if [ "$os_version" != '6' ];then
+		return
+	fi
+	echo 'Centos6 install openssl-1.0.2...'
+	openssl_rpm_file="/www/openssl.rpm"
+	wget -O $openssl_rpm_file $download_Url/rpm/centos6/${is64bit}/bt-openssl102.rpm -T 10
+	tmp_size=$(du -b $openssl_rpm_file|awk '{print $1}')
+	if [ $tmp_size -lt 102400 ];then
+		rm -f $openssl_rpm_file
+		Red_Error "ERROR: Download python env fielded."
+	fi
+	rpm -ivh $openssl_rpm_file
+	rm -f $openssl_rpm_file
+	is_export_openssl=1
+}
+Get_Versions(){
+	redhat_version_file="/etc/redhat-release"
+	deb_version_file="/etc/issue"
+	if [ -f $redhat_version_file ];then
+		os_type='el'
+		is_aliyunos=$(cat $redhat_version_file|grep Aliyun)
+		if [ "$is_aliyunos" != "" ];then
+			return
+		fi
+		os_version=$(cat $redhat_version_file|grep CentOS|grep -Eo '([0-9]+\.)+[0-9]+'|grep -Eo '^[0-9]')
+		if [ "${os_version}" = "5" ];then
+			os_version=""
+		fi
+	else
+		os_type='ubuntu'
+		os_version=$(cat $deb_version_file|grep Ubuntu|grep -Eo '([0-9]+\.)+[0-9]+'|grep -Eo '^[0-9]+')
+		if [ "${os_version}" = "" ];then
+			os_type='debian'
+			os_version=$(cat $deb_version_file|grep Debian|grep -Eo '([0-9]+\.)+[0-9]+'|grep -Eo '[0-9]+')
+			if [ "${os_version}" = "" ];then
+				os_version=$(cat $deb_version_file|grep Debian|grep -Eo '[0-9]+')
+			fi
+			if [ "${os_version}" = "8" ];then
+				os_version=""
+			fi
+			if [ "${is64bit}" = '32' ];then
+				os_version=""
+			fi
+		else
+			if [ "$os_version" = "14" ];then
+				os_version=""
+			fi
+			if [ "$os_version" = "12" ];then
+				os_version=""
+			fi
+			if [ "$os_version" = "19" ];then
+				os_version=""
+			fi
+
+		fi
+	fi
+}
+Set_Bt_Panel(){
+	password=$(cat /dev/urandom | head -n 16 | md5sum | head -c 8)
+	sleep 1
+	admin_auth="/www/server/panel/data/admin_path.pl"
+	if [ ! -f ${admin_auth} ];then
+		auth_path=$(cat /dev/urandom | head -n 16 | md5sum | head -c 8)
+		echo "/${auth_path}" > ${admin_auth}
+	fi
+	auth_path=$(cat ${admin_auth})
+	cd ${setup_path}/server/panel/
+	/etc/init.d/bt start
+	$python_bin -m py_compile tools.py
+	$python_bin tools.py username
+	username=$($python_bin tools.py panel ${password})
+	cd ~
+	echo "${password}" > ${setup_path}/server/panel/default.pl
+	chmod 600 ${setup_path}/server/panel/default.pl
+	sleep 3
+	/etc/init.d/bt restart 	
+	sleep 3
+	isStart=$(ps aux |grep 'BT-Panel'|grep -v grep|awk '{print $2}')
+	LOCAL_CURL=$(curl 127.0.0.1:8888/login 2>&1 |grep -i html)
+	if [ -z "${isStart}" ] && [ -z "${LOCAL_CURL}" ];then
+		/etc/init.d/bt 22
+		cd /www/server/panel/pyenv/bin
+		touch t.pl
+		ls -al python3.7 python
+		lsattr python3.7 python
+		Red_Error "ERROR: The BT-Panel service startup failed."
+	fi
+}
+Set_Firewall(){
+	sshPort=$(cat /etc/ssh/sshd_config | grep 'Port '|awk '{print $2}')
+	if [ "${PM}" = "apt-get" ]; then
+		apt-get install -y ufw
+		if [ -f "/usr/sbin/ufw" ];then
+			ufw allow 20/tcp
+			ufw allow 21/tcp
+			ufw allow 22/tcp
+			ufw allow 80/tcp
+			ufw allow 888/tcp
+			ufw allow ${panelPort}/tcp
+			ufw allow ${sshPort}/tcp
+			ufw allow 39000:40000/tcp
+			ufw_status=`ufw status`
+			echo y|ufw enable
+			ufw default deny
+			ufw reload
+		fi
+	else
+		if [ -f "/etc/init.d/iptables" ];then
+			iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT
+			iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
+			iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
+			iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
+			iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport ${panelPort} -j ACCEPT
+			iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport ${sshPort} -j ACCEPT
+			iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 39000:40000 -j ACCEPT
+			#iptables -I INPUT -p tcp -m state --state NEW -m udp --dport 39000:40000 -j ACCEPT
+			iptables -A INPUT -p icmp --icmp-type any -j ACCEPT
+			iptables -A INPUT -s localhost -d localhost -j ACCEPT
+			iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
+			iptables -P INPUT DROP
+			service iptables save
+			sed -i "s#IPTABLES_MODULES=\"\"#IPTABLES_MODULES=\"ip_conntrack_netbios_ns ip_conntrack_ftp ip_nat_ftp\"#" /etc/sysconfig/iptables-config
+			iptables_status=$(service iptables status | grep 'not running')
+			if [ "${iptables_status}" == '' ];then
+				service iptables restart
+			fi
+		else
+			AliyunCheck=$(cat /etc/redhat-release|grep "Aliyun Linux")
+			[ "${AliyunCheck}" ] && return
+			yum install firewalld -y
+			[ "${Centos8Check}" ] && yum reinstall python3-six -y
+			systemctl enable firewalld
+			systemctl start firewalld
+			firewall-cmd --set-default-zone=public > /dev/null 2>&1
+			firewall-cmd --permanent --zone=public --add-port=20/tcp > /dev/null 2>&1
+			firewall-cmd --permanent --zone=public --add-port=21/tcp > /dev/null 2>&1
+			firewall-cmd --permanent --zone=public --add-port=22/tcp > /dev/null 2>&1
+			firewall-cmd --permanent --zone=public --add-port=80/tcp > /dev/null 2>&1
+			firewall-cmd --permanent --zone=public --add-port=${panelPort}/tcp > /dev/null 2>&1
+			firewall-cmd --permanent --zone=public --add-port=${sshPort}/tcp > /dev/null 2>&1
+			firewall-cmd --permanent --zone=public --add-port=39000-40000/tcp > /dev/null 2>&1
+			#firewall-cmd --permanent --zone=public --add-port=39000-40000/udp > /dev/null 2>&1
+			firewall-cmd --reload
+		fi
+	fi
+}
+Get_Ip_Address(){
+	getIpAddress=""
+	getIpAddress=$(curl -sS --connect-timeout 10 -m 60 https://v7.hostcli.com/Api/getIpAddress)
+	if [ -z "${getIpAddress}" ] || [ "${getIpAddress}" = "0.0.0.0" ]; then
+		isHosts=$(cat /etc/hosts|grep 'v7.hostcli.com')
+		if [ -z "${isHosts}" ];then
+			#echo "" >> /etc/hosts
+			#echo "103.224.251.67 v7.hostcli.com" >> /etc/hosts
+			getIpAddress=$(curl -sS --connect-timeout 10 -m 60 https://v7.hostcli.com/Api/getIpAddress)
+			if [ -z "${getIpAddress}" ];then
+				sed -i "/v7.hostcli.com/d" /etc/hosts
+			fi
+		fi
+	fi
+
+	ipv4Check=$($python_bin -c "import re; print(re.match('^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$','${getIpAddress}'))")
+	if [ "${ipv4Check}" == "None" ];then
+		ipv6Address=$(echo ${getIpAddress}|tr -d "[]")
+		ipv6Check=$($python_bin -c "import re; print(re.match('^([0-9a-fA-F]{0,4}:){1,7}[0-9a-fA-F]{0,4}$','${ipv6Address}'))")
+		if [ "${ipv6Check}" == "None" ]; then
+			getIpAddress="SERVER_IP"
+		else
+			echo "True" > ${setup_path}/server/panel/data/ipv6.pl
+			sleep 1
+			/etc/init.d/bt restart
+		fi
+	fi
+
+	if [ "${getIpAddress}" != "SERVER_IP" ];then
+		echo "${getIpAddress}" > ${setup_path}/server/panel/data/iplist.txt
+	fi
+	LOCAL_IP=$(ip addr | grep -E -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -E -v "^127\.|^255\.|^0\." | head -n 1)
+}
+Setup_Count(){
+	curl -sS --connect-timeout 10 -m 60 https://v7.hostcli.com/Api/SetupCount?type=Linux\&o=$1 > /dev/null 2>&1
+	if [ "$1" != "" ];then
+		echo $1 > /www/server/panel/data/o.pl
+		cd /www/server/panel
+		$python_bin tools.py o
+	fi
+	echo /www > /var/bt_setupPath.conf
+}
+Install_Main(){
+	startTime=`date +%s`
+	Lock_Clear
+	System_Check
+	Get_Pack_Manager
+	get_node_url
+
+	MEM_TOTAL=$(free -g|grep Mem|awk '{print $2}')
+	if [ "${MEM_TOTAL}" -le "1" ];then
+		Auto_Swap
+	fi
+	
+	if [ "${PM}" = "yum" ]; then
+		Install_RPM_Pack
+	elif [ "${PM}" = "apt-get" ]; then
+		Install_Deb_Pack
+	fi
+
+	Install_Python_Lib
+	Install_Bt
+	
+
+	Set_Bt_Panel
+	Service_Add
+	Set_Firewall
+
+	Get_Ip_Address
+	Setup_Count ${IDC_CODE}
+}
+
+echo "
++----------------------------------------------------------------------
+| hostcli.com FOR CentOS/Ubuntu/Debian
++----------------------------------------------------------------------
+| Copyright 漏 2015-2099 HostCli(http://v7.hostcli.com) All rights reserved.
++----------------------------------------------------------------------
+| The WebPanel URL will be http://SERVER_IP:8888 when installed.
++----------------------------------------------------------------------
+"
+while [ "$go" != 'y' ] && [ "$go" != 'n' ]
+do
+	read -p "Do you want to install Bt-Panel to the $setup_path directory now?(y/n): " go;
+done
+
+if [ "$go" == 'n' ];then
+	exit;
+fi
+
+Install_Main
+echo > /www/server/panel/data/bind.pl
+echo -e "=================================================================="
+echo -e "\033[32mCongratulations! Installed successfully!\033[0m"
+echo -e "=================================================================="
+echo  "澶栫綉闈㈡澘鍦板潃: http://${getIpAddress}:${panelPort}${auth_path}"
+echo  "鍐呯綉闈㈡澘鍦板潃: http://${LOCAL_IP}:${panelPort}${auth_path}"
+echo -e "username: $username"
+echo -e "password: $password"
+echo -e "\033[33mIf you cannot access the panel,\033[0m"
+echo -e "\033[33mrelease the following panel port [${panelPort}] in the security group\033[0m"
+echo -e "\033[33m鑻ユ棤娉曡闂潰鏉匡紝璇锋鏌ラ槻鐏/瀹夊叏缁勬槸鍚︽湁鏀捐闈㈡澘[${panelPort}]绔彛\033[0m"
+echo -e "=================================================================="
+
+endTime=`date +%s`
+((outTime=($endTime-$startTime)/60))
+echo -e "Time consumed:\033[32m $outTime \033[0mMinute!"
+
diff --git a/java_gaga.com.conf b/java_gaga.com.conf
new file mode 100644
index 0000000..846d4e8
--- /dev/null
+++ b/java_gaga.com.conf
@@ -0,0 +1,57 @@
+server
+{
+    listen 80;
+    server_name gaga.com aa.com bb.com;
+    index index.html index.htm default.htm default.html;
+    root /www/wwwroot/gaga.com;
+    
+    #SSL-START SSL鐩稿叧閰嶇疆
+    #error_page 404/404.html;
+    
+    #SSL-END
+    
+    #ERROR-PAGE-START  閿欒椤电浉鍏抽厤缃�
+    #error_page 404 /404.html;
+    #error_page 502 /502.html;
+    #ERROR-PAGE-END
+    
+    
+    #REWRITE-START 浼潤鎬佺浉鍏抽厤缃�
+    include /www/server/panel/vhost/rewrite/java_gaga.com.conf;
+    #REWRITE-END
+    
+    #绂佹璁块棶鐨勬枃浠舵垨鐩綍
+    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md|package.json|package-lock.json|\.env|node_modules) {
+        return 404;
+    }
+    
+    #涓�閿敵璇稴SL璇佷功楠岃瘉鐩綍鐩稿叧璁剧疆
+    location /.well-known/ {
+        root /www/wwwroot/java_node_ssl;
+    }
+
+    # HTTP鍙嶅悜浠g悊鐩稿叧閰嶇疆寮�濮� >>>
+    location ~ /purge(/.*) {
+        proxy_cache_purge cache_one gaga.com$request_uri$is_args$args;
+    }
+
+    location / {
+        proxy_pass http://127.0.0.1:8231;
+        proxy_set_header Host gaga.com:$server_port;
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_set_header REMOTE-HOST $remote_addr;
+        add_header X-Cache $upstream_cache_status;
+
+        proxy_connect_timeout 30s;
+        proxy_read_timeout 86400s;
+        proxy_send_timeout 30s;
+        proxy_http_version 1.1;
+        proxy_set_header Upgrade $http_upgrade;
+        proxy_set_header Connection "upgrade";
+    }
+    # HTTP鍙嶅悜浠g悊鐩稿叧閰嶇疆缁撴潫 <<<
+    
+    access_log  /www/wwwlogs/gaga.com.log;
+    error_log  /www/wwwlogs/gaga.com.error.log;
+}
\ No newline at end of file
diff --git a/java_wa.cn.conf b/java_wa.cn.conf
new file mode 100644
index 0000000..fc06b29
--- /dev/null
+++ b/java_wa.cn.conf
@@ -0,0 +1,57 @@
+server
+{
+    listen 80;
+    server_name wa.cn;
+    index index.html index.htm default.htm default.html;
+    root /www/wwwroot/wa.cn;
+    
+    #SSL-START SSL鐩稿叧閰嶇疆
+    #error_page 404/404.html;
+    
+    #SSL-END
+    
+    #ERROR-PAGE-START  閿欒椤电浉鍏抽厤缃�
+    #error_page 404 /404.html;
+    #error_page 502 /502.html;
+    #ERROR-PAGE-END
+    
+    
+    #REWRITE-START 浼潤鎬佺浉鍏抽厤缃�
+    include /www/server/panel/vhost/rewrite/java_wa.cn.conf;
+    #REWRITE-END
+    
+    #绂佹璁块棶鐨勬枃浠舵垨鐩綍
+    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md|package.json|package-lock.json|\.env|node_modules) {
+        return 404;
+    }
+    
+    #涓�閿敵璇稴SL璇佷功楠岃瘉鐩綍鐩稿叧璁剧疆
+    location /.well-known/ {
+        root /www/wwwroot/java_node_ssl;
+    }
+
+    # HTTP鍙嶅悜浠g悊鐩稿叧閰嶇疆寮�濮� >>>
+    location ~ /purge(/.*) {
+        proxy_cache_purge cache_one wa.cn$request_uri$is_args$args;
+    }
+
+    location / {
+        proxy_pass http://127.0.0.1:99;
+        proxy_set_header Host wa.cn:$server_port;
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        proxy_set_header REMOTE-HOST $remote_addr;
+        add_header X-Cache $upstream_cache_status;
+
+        proxy_connect_timeout 30s;
+        proxy_read_timeout 86400s;
+        proxy_send_timeout 30s;
+        proxy_http_version 1.1;
+        proxy_set_header Upgrade $http_upgrade;
+        proxy_set_header Connection "upgrade";
+    }
+    # HTTP鍙嶅悜浠g悊鐩稿叧閰嶇疆缁撴潫 <<<
+    
+    access_log  /www/wwwlogs/wa.cn.log;
+    error_log  /www/wwwlogs/wa.cn.error.log;
+}
\ No newline at end of file
diff --git a/manager.xml b/manager.xml
new file mode 100644
index 0000000..48ac6f8
--- /dev/null
+++ b/manager.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<!--
+
+    Context configuration file for the Tomcat Manager Web App
+
+-->
+<Context docBase="${catalina.home}/webapps/manager"
+         privileged="true" antiResourceLocking="false" antiJARLocking="false">
+  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
+         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
+  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
+</Context>
diff --git a/nginx.conf b/nginx.conf
new file mode 100644
index 0000000..91c7bd4
--- /dev/null
+++ b/nginx.conf
@@ -0,0 +1,164 @@
+
+#user  nobody;
+worker_processes  1;
+
+#error_log  logs/error.log;
+#error_log  logs/error.log  notice;
+#error_log  logs/error.log  info;
+
+#pid        logs/nginx.pid;
+
+
+events {
+    worker_connections  1024;
+}
+
+
+http {
+    include       mime.types;
+    default_type  application/octet-stream;
+
+    server_tokens        off;
+    sendfile        on;
+    #tcp_nopush     on;
+    client_max_body_size 5m;
+
+    #keepalive_timeout  0;
+    keepalive_timeout  65;
+
+    #gzip  on;
+
+server {
+        listen 80 default_server;
+        listen 8888 default_server;
+        server_name  _;
+        return 444;
+    }
+
+    server {
+        listen       8888;
+        server_name  oa.shiyi.tv oa.brawin.cn;
+	    #寮哄埗杞琀TTPS
+	    #rewrite ^(.*)$  https://$host$1 permanent;
+
+    	#寮哄埗鍩熷悕璁块棶
+#	if ($host != oa.shiyi.tv) {
+#            return 403;
+#           }
+
+        #charset koi8-r;
+
+        #access_log  logs/host.access.log  main;
+
+        #绂佹Scrapy绛夌埇铏伐鍏风殑鎶撳彇,濡傛灉鐢ㄥ埌鐧惧害鏀跺綍锛岃繖閲屽氨瑕佹敞閲婃帀
+        if ($http_user_agent ~* "Scrapy|Sogou web spider|Baiduspider") {
+            return 403;
+            }
+
+        #绂佹鎸囧畾UA鍙奤A涓虹┖鐨勮闂�
+        if ($http_user_agent ~ "FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|LinkpadBot|Ezooms|^$"){
+            return 403;
+            }
+
+        #绂佹闈濭ET|HEAD|POST鏂瑰紡鐨勬姄鍙�,姝ゅ鍙兘浼氬鑷寸綉椤垫墦涓嶅紑
+        #if ($request_method !~ A(GET|HEAD|POST)$) {
+        #    return 403;
+        #   }
+
+        #閽堝鐗规畩鐨剈ser_agent鐨勮闂�
+        if ($http_user_agent ~ "Mozilla/4.0\ \(compatible;\ MSIE\ 6.;\ Windows\ NT\ 5.1;\ SV1;\ .NET\ CLR\ 1.1.4322;\ .NET\ CLR\ 2.0.50727\)") {
+            return 404;
+        }
+
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        #proxy_set_header Host $host;
+        proxy_set_header Upgrade-Insecure-Requests 1;
+        proxy_set_header X-Forwarded-Proto https;
+        proxy_read_timeout 300;
+
+        location / {
+            root   html;
+            index  index.html index.htm;
+	    proxy_pass http://192.168.1.91:80;
+            proxy_redirect off;
+            proxy_set_header Host $host;
+            proxy_set_header X-Real-IP $remote_addr;
+            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+            proxy_http_version 1.1;
+            proxy_set_header Upgrade $http_upgrade;
+            proxy_set_header Connection "upgrade";
+
+        }
+
+        error_page   500 502 503 504  /50x.html;
+        location = /50x.html {
+            root   html;
+        }
+
+    }
+
+        server {
+        listen       80;
+        server_name  oa.shiyi.tv oa.brawin.cn;
+	    #寮哄埗杞琀TTPS
+	    #rewrite ^(.*)$  https://$host$1 permanent;
+
+    	#寮哄埗鍩熷悕璁块棶
+#	if ($host != oa.shiyi.tv) {
+#            return 403;
+#           }
+
+        #charset koi8-r;
+
+        #access_log  logs/host.access.log  main;
+
+        #绂佹Scrapy绛夌埇铏伐鍏风殑鎶撳彇,濡傛灉鐢ㄥ埌鐧惧害鏀跺綍锛岃繖閲屽氨瑕佹敞閲婃帀
+        if ($http_user_agent ~* "Scrapy|Sogou web spider|Baiduspider") {
+            return 403;
+            }
+
+        #绂佹鎸囧畾UA鍙奤A涓虹┖鐨勮闂�
+        if ($http_user_agent ~ "FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|LinkpadBot|Ezooms|^$"){
+            return 403;
+            }
+
+        #绂佹闈濭ET|HEAD|POST鏂瑰紡鐨勬姄鍙�,姝ゅ鍙兘浼氬鑷寸綉椤垫墦涓嶅紑
+        #if ($request_method !~ A(GET|HEAD|POST)$) {
+        #    return 403;
+        #   }
+
+        #閽堝鐗规畩鐨剈ser_agent鐨勮闂�
+        if ($http_user_agent ~ "Mozilla/4.0\ \(compatible;\ MSIE\ 6.;\ Windows\ NT\ 5.1;\ SV1;\ .NET\ CLR\ 1.1.4322;\ .NET\ CLR\ 2.0.50727\)") {
+            return 404;
+        }
+
+        proxy_set_header X-Real-IP $remote_addr;
+        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+        #proxy_set_header Host $host;
+        proxy_set_header Upgrade-Insecure-Requests 1;
+        proxy_set_header X-Forwarded-Proto https;
+        proxy_read_timeout 300;
+
+        location / {
+            root   html;
+            index  index.html index.htm;
+	        proxy_pass http://192.168.1.91:80;
+            proxy_redirect off;
+            proxy_set_header Host $host;
+            proxy_set_header X-Real-IP $remote_addr;
+            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+            proxy_http_version 1.1;
+            proxy_set_header Upgrade $http_upgrade;
+            proxy_set_header Connection "upgrade";
+
+        }
+
+        error_page   500 502 503 504  /50x.html;
+        location = /50x.html {
+            root   html;
+        }
+
+    }
+
+}
diff --git a/nn.cn.conf b/nn.cn.conf
new file mode 100644
index 0000000..a7369d4
--- /dev/null
+++ b/nn.cn.conf
@@ -0,0 +1,51 @@
+server
+{
+    listen 80;
+    server_name nn.cn 192.168.1.233;
+    index index.php index.html index.htm default.php default.htm default.html;
+    root /www/wwwroot/nn.cn;
+
+    #SSL-START SSL鐩稿叧閰嶇疆锛岃鍕垮垹闄ゆ垨淇敼涓嬩竴琛屽甫娉ㄩ噴鐨�404瑙勫垯
+    #error_page 404/404.html;
+    #SSL-END
+
+    #ERROR-PAGE-START  閿欒椤甸厤缃紝鍙互娉ㄩ噴銆佸垹闄ゆ垨淇敼
+    #error_page 404 /404.html;
+    #error_page 502 /502.html;
+    #ERROR-PAGE-END
+
+    #PHP-INFO-START  PHP寮曠敤閰嶇疆锛屽彲浠ユ敞閲婃垨淇敼
+    include enable-php-00.conf;
+    #PHP-INFO-END
+
+    #REWRITE-START URL閲嶅啓瑙勫垯寮曠敤,淇敼鍚庡皢瀵艰嚧闈㈡澘璁剧疆鐨勪吉闈欐�佽鍒欏け鏁�
+    include /www/server/panel/vhost/rewrite/nn.cn.conf;
+    #REWRITE-END
+
+    #绂佹璁块棶鐨勬枃浠舵垨鐩綍
+    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
+    {
+        return 404;
+    }
+
+    #涓�閿敵璇稴SL璇佷功楠岃瘉鐩綍鐩稿叧璁剧疆
+    location ~ \.well-known{
+        allow all;
+    }
+
+    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
+    {
+        expires      30d;
+        error_log /dev/null;
+        access_log /dev/null;
+    }
+
+    location ~ .*\.(js|css)?$
+    {
+        expires      12h;
+        error_log /dev/null;
+        access_log /dev/null;
+    }
+    access_log  /www/wwwlogs/nn.cn.log;
+    error_log  /www/wwwlogs/nn.cn.error.log;
+}
\ No newline at end of file
diff --git a/phpfpm_status.conf b/phpfpm_status.conf
new file mode 100644
index 0000000..fb87473
--- /dev/null
+++ b/phpfpm_status.conf
@@ -0,0 +1,69 @@
+server {
+	listen 80;
+	server_name 127.0.0.1;
+	allow 127.0.0.1;
+	location /nginx_status {
+		stub_status on;
+		access_log off;
+	}
+	location /phpfpm_52_status {
+		fastcgi_pass unix:/tmp/php-cgi-52.sock;
+		include fastcgi_params;
+		fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
+	}
+	location /phpfpm_53_status {
+		fastcgi_pass unix:/tmp/php-cgi-53.sock;
+		include fastcgi_params;
+		fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
+	}
+	location /phpfpm_54_status {
+		fastcgi_pass unix:/tmp/php-cgi-54.sock;
+		include fastcgi_params;
+		fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
+	}
+	location /phpfpm_55_status {
+		fastcgi_pass unix:/tmp/php-cgi-55.sock;
+		include fastcgi_params;
+		fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
+	}
+	location /phpfpm_56_status {
+		fastcgi_pass unix:/tmp/php-cgi-56.sock;
+		include fastcgi_params;
+		fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
+	}
+	location /phpfpm_70_status {
+		fastcgi_pass unix:/tmp/php-cgi-70.sock;
+		include fastcgi_params;
+		fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
+	}
+	location /phpfpm_71_status {
+		fastcgi_pass unix:/tmp/php-cgi-71.sock;
+		include fastcgi_params;
+		fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
+	}
+	location /phpfpm_72_status {
+		fastcgi_pass unix:/tmp/php-cgi-72.sock;
+		include fastcgi_params;
+		fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
+	}
+	location /phpfpm_73_status {
+		fastcgi_pass unix:/tmp/php-cgi-73.sock;
+		include fastcgi_params;
+		fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
+	}
+	location /phpfpm_74_status {
+		fastcgi_pass unix:/tmp/php-cgi-74.sock;
+		include fastcgi_params;
+		fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
+	}
+	location /phpfpm_80_status {
+		fastcgi_pass unix:/tmp/php-cgi-80.sock;
+		include fastcgi_params;
+		fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
+	}
+	location /phpfpm_81_status {
+		fastcgi_pass unix:/tmp/php-cgi-81.sock;
+		include fastcgi_params;
+		fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
+	}
+}
diff --git a/server.xml b/server.xml
new file mode 100644
index 0000000..4d42c3c
--- /dev/null
+++ b/server.xml
@@ -0,0 +1,24 @@
+<Server port="5712" shutdown="SHUTDOWN">
+  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
+<Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener" />
+<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
+<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
+<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
+<GlobalNamingResources>
+    <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase" />
+  </GlobalNamingResources>
+<Service name="Catalina">
+    <Connector connectionTimeout="20000" port="99" protocol="HTTP/1.1" redirectPort="8490" />
+  <Engine defaultHost="localhost" name="Catalina">
+      <Realm className="org.apache.catalina.realm.LockOutRealm">
+        <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" />
+      </Realm>
+    <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
+        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log" suffix=".txt" />
+      </Host>
+    <Host autoDeploy="true" name="wa.cn" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false">
+        <Context crossContext="true" docBase="/www/wwwroot/wa.cn" path="" reloadable="true" />
+      </Host>
+    </Engine>
+  </Service>
+</Server>
\ No newline at end of file
diff --git a/web.xml b/web.xml
new file mode 100644
index 0000000..30107ae
--- /dev/null
+++ b/web.xml
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<web-app xmlns="http://java.sun.com/xml/ns/javaee"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
+                      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
+  version="3.0"
+  metadata-complete="true">
+
+  <display-name>Tomcat Host Manager Application</display-name>
+  <description>
+    A scriptable host management web application for the Tomcat Web Server;
+    Manager lets you view, create and remove virtual hosts.
+  </description>
+
+  <servlet>
+    <servlet-name>HostManager</servlet-name>
+    <servlet-class>org.apache.catalina.manager.host.HostManagerServlet</servlet-class>
+    <init-param>
+      <param-name>debug</param-name>
+      <param-value>2</param-value>
+    </init-param>
+  </servlet>
+  <servlet>
+    <servlet-name>HTMLHostManager</servlet-name>
+    <servlet-class>org.apache.catalina.manager.host.HTMLHostManagerServlet</servlet-class>
+    <init-param>
+      <param-name>debug</param-name>
+      <param-value>2</param-value>
+    </init-param>
+  </servlet>
+
+  <filter>
+    <filter-name>SetCharacterEncoding</filter-name>
+    <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
+    <init-param>
+      <param-name>encoding</param-name>
+      <param-value>UTF-8</param-value>
+    </init-param>
+  </filter>
+
+  <filter-mapping>
+    <filter-name>SetCharacterEncoding</filter-name>
+    <url-pattern>/*</url-pattern>
+  </filter-mapping>
+
+  <filter>
+    <filter-name>CSRF</filter-name>
+    <filter-class>org.apache.catalina.filters.CsrfPreventionFilter</filter-class>
+    <init-param>
+      <param-name>entryPoints</param-name>
+      <param-value>/html,/html/,/html/list,/index.jsp</param-value>
+    </init-param>
+  </filter>
+
+  <!-- Configured to set X-FRAME-OPTIONS. Disable HSTS in case it interferes -->
+  <!-- with an existing setting. Keep X-Content-Type-Options and             -->
+  <!-- X-XSS-Protection as they are page specific.                           -->
+  <filter>
+    <filter-name>HTTP header security filter</filter-name>
+    <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
+    <init-param>
+      <param-name>hstsEnabled</param-name>
+      <param-value>false</param-value>
+    </init-param>
+  </filter>
+
+  <filter-mapping>
+    <filter-name>CSRF</filter-name>
+    <servlet-name>HTMLHostManager</servlet-name>
+  </filter-mapping>
+
+  <filter-mapping>
+    <filter-name>HTTP header security filter</filter-name>
+    <url-pattern>/*</url-pattern>
+  </filter-mapping>
+
+  <!-- Define the Manager Servlet Mapping -->
+  <servlet-mapping>
+    <servlet-name>HostManager</servlet-name>
+    <url-pattern>/text/*</url-pattern>
+  </servlet-mapping>
+  <servlet-mapping>
+    <servlet-name>HTMLHostManager</servlet-name>
+    <url-pattern>/html/*</url-pattern>
+  </servlet-mapping>
+
+  <!-- Define a Security Constraint on this Application -->
+  <security-constraint>
+    <web-resource-collection>
+      <web-resource-name>HostManager commands</web-resource-name>
+      <url-pattern>/text/*</url-pattern>
+    </web-resource-collection>
+    <auth-constraint>
+       <!-- NOTE:  This role is not present in the default users file -->
+       <role-name>admin-script</role-name>
+    </auth-constraint>
+  </security-constraint>
+  <security-constraint>
+    <web-resource-collection>
+      <web-resource-name>HTMLHostManager commands</web-resource-name>
+      <url-pattern>/html/*</url-pattern>
+    </web-resource-collection>
+    <auth-constraint>
+       <!-- NOTE:  This role is not present in the default users file -->
+       <role-name>admin-gui</role-name>
+    </auth-constraint>
+  </security-constraint>
+
+  <!-- Define the Login Configuration for this Application -->
+  <login-config>
+    <auth-method>BASIC</auth-method>
+    <realm-name>Tomcat Host Manager Application</realm-name>
+  </login-config>
+
+  <!-- Security roles referenced by this web application -->
+  <security-role>
+    <description>
+      The role that is required to log in to the Host Manager Application HTML
+      interface
+    </description>
+    <role-name>admin-gui</role-name>
+  </security-role>
+  <security-role>
+    <description>
+      The role that is required to log in to the Host Manager Application text
+      interface
+    </description>
+    <role-name>admin-script</role-name>
+  </security-role>
+
+  <error-page>
+    <error-code>401</error-code>
+    <location>/WEB-INF/jsp/401.jsp</location>
+  </error-page>
+  <error-page>
+    <error-code>403</error-code>
+    <location>/WEB-INF/jsp/403.jsp</location>
+  </error-page>
+  <error-page>
+    <error-code>404</error-code>
+    <location>/WEB-INF/jsp/404.jsp</location>
+  </error-page>
+
+</web-app>
diff --git "a/\345\274\200\345\205\263\346\234\272\347\233\222\345\255\220\346\265\213\350\257\225\346\212\245\345\221\212.md" "b/\345\274\200\345\205\263\346\234\272\347\233\222\345\255\220\346\265\213\350\257\225\346\212\245\345\221\212.md"
new file mode 100644
index 0000000..73af396
--- /dev/null
+++ "b/\345\274\200\345\205\263\346\234\272\347\233\222\345\255\220\346\265\213\350\257\225\346\212\245\345\221\212.md"
@@ -0,0 +1,47 @@
+# 寮�鍏虫満鐩掑瓙娴嬭瘯鎶ュ憡
+## 娴嬭瘯绱犳潗
+鏃�
+
+## 娴嬭瘯鐩殑
+纭18涓紑鍏虫満鐩掑瓙鏄惁姝e父寮�鍏虫満
+
+## 娴嬭瘯鏃堕棿
+绗笁鎵癸細2021.12.24 - 2021.12.30
+
+## 缁堢MAC鍦板潃
+01锛�0025E1033D53
+02锛�0025E1033CF6
+03锛�0025E1033D00
+04锛�0025E1033D02
+05锛�0025E1033CF3
+06锛�0025E1033D72
+07锛�0025E1033D66
+08锛�0025E1033A8B
+09锛�0025E1033CF2
+10锛�0025E1033D5B
+11锛�0025E1033D6F
+12锛�0025E1033A61
+13锛�0025E1033D4A
+14锛�0025E1033D68
+15锛�0025E1033D67
+16锛�0025E1033CE4
+17锛�0025E1033D47
+18锛�0025E1033DA1
+
+## 娴嬭瘯渚�
+灏�18鍙板紑鍏虫満鐩掑瓙鏃堕棿璁剧疆缁熶竴锛岀粺涓�鍕鹃�夊叧鏈烘椂娈靛唴涓婄數淇濇寔寮�鏈� 
+鍛ㄤ竴鑷冲懆浜旓細
+08:15 鈥� 09:00
+09:10 鈥� 10:00
+10:10 鈥� 12:00
+12:10 鈥� 13:00
+13:10 鈥� 18:00
+鍛ㄥ叚锛氬叏澶╁紑
+鍛ㄦ棩锛氬叏澶╁叧
+
+## 娴嬭瘯缁撴灉
+17鍙板紑鍏虫満鐩掑瓙鍦ㄨ瀹氱殑鏃堕棿姝e父寮�鍏虫満
+1鍙颁笉鑹�
+
+## 涓嶈壇鍘熷洜鍒嗘瀽
+Mac鍦板潃涓�0025E1033CF2 绾挎帴閿欎簡锛屼互涓嬫槸鍥剧墖锛�
\ No newline at end of file
diff --git "a/\351\273\221\345\256\235\345\241\224install_6.0.sh" "b/\351\273\221\345\256\235\345\241\224install_6.0.sh"
new file mode 100644
index 0000000..207b2f5
--- /dev/null
+++ "b/\351\273\221\345\256\235\345\241\224install_6.0.sh"
@@ -0,0 +1,738 @@
+#!/bin/bash
+PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
+export PATH
+LANG=en_US.UTF-8
+
+if [ $(whoami) != "root" ];then
+	echo "璇蜂娇鐢╮oot鏉冮檺鎵ц瀹濆瀹夎鍛戒护锛�"
+	exit 1;
+fi
+
+is64bit=$(getconf LONG_BIT)
+if [ "${is64bit}" != '64' ];then
+	Red_Error "鎶辨瓑, 褰撳墠闈㈡澘鐗堟湰涓嶆敮鎸�32浣嶇郴缁�, 璇蜂娇鐢�64浣嶇郴缁熸垨瀹夎瀹濆5.9!";
+fi
+
+cd ~
+setup_path="/www"
+python_bin=$setup_path/server/panel/pyenv/bin/python
+cpu_cpunt=$(cat /proc/cpuinfo|grep processor|wc -l)
+
+if [ "$1" ];then
+	IDC_CODE=$1
+fi
+
+GetSysInfo(){
+	if [ -s "/etc/redhat-release" ];then
+		SYS_VERSION=$(cat /etc/redhat-release)
+	elif [ -s "/etc/issue" ]; then
+		SYS_VERSION=$(cat /etc/issue)
+	fi
+	SYS_INFO=$(uname -a)
+	SYS_BIT=$(getconf LONG_BIT)
+	MEM_TOTAL=$(free -m|grep Mem|awk '{print $2}')
+	CPU_INFO=$(getconf _NPROCESSORS_ONLN)
+
+	echo -e ${SYS_VERSION}
+	echo -e Bit:${SYS_BIT} Mem:${MEM_TOTAL}M Core:${CPU_INFO}
+	echo -e ${SYS_INFO}
+	echo -e "璇锋埅鍥句互涓婃姤閿欎俊鎭彂甯栬嚦璁哄潧v7.hostcli.com/bbs姹傚姪"
+}
+Red_Error(){
+	echo '=================================================';
+	printf '\033[1;31;40m%b\033[0m\n' "$1";
+	GetSysInfo
+	exit 1;
+}
+Lock_Clear(){
+	if [ -f "/etc/bt_crack.pl" ];then
+		chattr -R -ia /www
+		chattr -ia /etc/init.d/bt
+		\cp -rpa /www/backup/panel/vhost/* /www/server/panel/vhost/
+		mv /www/server/panel/BTPanel/__init__.bak /www/server/panel/BTPanel/__init__.py
+		rm -f /etc/bt_crack.pl
+	fi
+}
+Install_Check(){
+	if [ "${INSTALL_FORCE}" ];then
+		return
+	fi
+	echo -e "----------------------------------------------------"
+	echo -e "妫�鏌ュ凡鏈夊叾浠朩eb/mysql鐜锛屽畨瑁呭疂濉斿彲鑳藉奖鍝嶇幇鏈夌珯鐐瑰強鏁版嵁"
+	echo -e "Web/mysql service is alreday installed,Can't install panel"
+	echo -e "----------------------------------------------------"
+	echo -e "宸茬煡椋庨櫓/Enter yes to force installation"
+	read -p "杈撳叆yes寮哄埗瀹夎: " yes;
+	if [ "$yes" != "yes" ];then
+		echo -e "------------"
+		echo "鍙栨秷瀹夎"
+		exit;
+	fi
+	INSTALL_FORCE="true"
+}
+System_Check(){
+	MYSQLD_CHECK=$(ps -ef |grep mysqld|grep -v grep|grep -v /www/server/mysql)
+	PHP_CHECK=$(ps -ef|grep php-fpm|grep master|grep -v /www/server/php)
+	NGINX_CHECK=$(ps -ef|grep nginx|grep master|grep -v /www/server/nginx)
+	HTTPD_CHECK=$(ps -ef |grep -E 'httpd|apache'|grep -v /www/server/apache|grep -v grep)
+	if [ "${PHP_CHECK}" ] || [ "${MYSQLD_CHECK}" ] || [ "${NGINX_CHECK}" ] || [ "${HTTPD_CHECK}" ];then
+		Install_Check
+	fi
+}
+Get_Pack_Manager(){
+	if [ -f "/usr/bin/yum" ] && [ -d "/etc/yum.repos.d" ]; then
+		PM="yum"
+	elif [ -f "/usr/bin/apt-get" ] && [ -f "/usr/bin/dpkg" ]; then
+		PM="apt-get"		
+	fi
+}
+Auto_Swap()
+{
+	swap=$(free |grep Swap|awk '{print $2}')
+	if [ "${swap}" -gt 1 ];then
+		echo "Swap total sizse: $swap";
+		return;
+	fi
+	if [ ! -d /www ];then
+		mkdir /www
+	fi
+	swapFile="/www/swap"
+	dd if=/dev/zero of=$swapFile bs=1M count=1025
+	mkswap -f $swapFile
+	swapon $swapFile
+	echo "$swapFile    swap    swap    defaults    0 0" >> /etc/fstab
+	swap=`free |grep Swap|awk '{print $2}'`
+	if [ $swap -gt 1 ];then
+		echo "Swap total sizse: $swap";
+		return;
+	fi
+	
+	sed -i "/\/www\/swap/d" /etc/fstab
+	rm -f $swapFile
+}
+Service_Add(){
+	if [ "${PM}" == "yum" ] || [ "${PM}" == "dnf" ]; then
+		chkconfig --add bt
+		chkconfig --level 2345 bt on
+	elif [ "${PM}" == "apt-get" ]; then
+		update-rc.d bt defaults
+	fi 
+}
+
+get_node_url(){
+	if [ ! -f /bin/curl ];then
+		if [ "${PM}" = "yum" ]; then
+			yum install curl -y
+		elif [ "${PM}" = "apt-get" ]; then
+			apt-get install curl -y
+		fi
+	fi
+	
+	echo '---------------------------------------------';
+	echo "Selected download node...";	
+	download_Url='http://v7.hostcli.com';
+	echo "Download node: $download_Url";
+	echo '---------------------------------------------';
+}
+Remove_Package(){
+	local PackageNmae=$1
+	if [ "${PM}" == "yum" ];then
+		isPackage=$(rpm -q ${PackageNmae}|grep "not installed")
+		if [ -z "${isPackage}" ];then
+			yum remove ${PackageNmae} -y
+		fi 
+	elif [ "${PM}" == "apt-get" ];then
+		isPackage=$(dpkg -l|grep ${PackageNmae})
+		if [ "${PackageNmae}" ];then
+			apt-get remove ${PackageNmae} -y
+		fi
+	fi
+}
+Install_RPM_Pack(){
+	yumPath=/etc/yum.conf
+	Centos8Check=$(cat /etc/redhat-release | grep ' 8.' | grep -iE 'centos|Red Hat')
+	isExc=$(cat $yumPath|grep httpd)
+	if [ "$isExc" = "" ];then
+		echo "exclude=httpd nginx php mysql mairadb python-psutil python2-psutil" >> $yumPath
+	fi
+
+	#yumBaseUrl=$(cat /etc/yum.repos.d/CentOS-Base.repo|grep baseurl=http|cut -d '=' -f 2|cut -d '$' -f 1|head -n 1)
+	#[ "${yumBaseUrl}" ] && checkYumRepo=$(curl --connect-timeout 5 --head -s -o /dev/null -w %{http_code} ${yumBaseUrl})	
+	#if [ "${checkYumRepo}" != "200" ];then
+	#	curl -Ss --connect-timeout 3 -m 60 http://download.bt.cn/install/yumRepo_select.sh|bash
+	#fi
+	
+	#灏濊瘯鍚屾鏃堕棿(浠巄t.cn)
+	echo 'Synchronizing system time...'
+	getBtTime=$(curl -sS --connect-timeout 3 -m 60 http://v7.hostcli.com/api/index/get_time)
+	if [ "${getBtTime}" ];then	
+		date -s "$(date -d @$getBtTime +"%Y-%m-%d %H:%M:%S")"
+	fi
+
+	if [ -z "${Centos8Check}" ]; then
+		yum install ntp -y
+		rm -rf /etc/localtime
+		ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
+
+		#灏濊瘯鍚屾鍥介檯鏃堕棿(浠巒tp鏈嶅姟鍣�)
+		ntpdate 0.asia.pool.ntp.org
+		setenforce 0
+	fi
+
+	startTime=`date +%s`
+
+	sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
+	#yum remove -y python-requests python3-requests python-greenlet python3-greenlet
+	yumPacks="libcurl-devel wget tar gcc make zip unzip openssl openssl-devel gcc libxml2 libxml2-devel libxslt* zlib zlib-devel libjpeg-devel libpng-devel libwebp libwebp-devel freetype freetype-devel lsof pcre pcre-devel vixie-cron crontabs icu libicu-devel c-ares libffi-devel bzip2-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel"
+	yum install -y ${yumPacks}
+
+	for yumPack in ${yumPacks}
+	do
+		rpmPack=$(rpm -q ${yumPack})
+		packCheck=$(echo ${rpmPack}|grep not)
+		if [ "${packCheck}" ]; then
+			yum install ${yumPack} -y
+		fi
+	done
+	if [ -f "/usr/bin/dnf" ]; then
+		dnf install -y redhat-rpm-config
+	fi
+
+	ALI_OS=$(cat /etc/redhat-release |grep "Alibaba Cloud Linux release 3")
+	if [ -z "${ALI_OS}" ];then 
+		yum install epel-release -y
+	fi
+}
+Install_Deb_Pack(){
+	ln -sf bash /bin/sh
+	apt-get update -y
+	apt-get install ruby -y
+	apt-get install lsb-release -y
+	#apt-get install ntp ntpdate -y
+	#/etc/init.d/ntp stop
+	#update-rc.d ntp remove
+	#cat >>~/.profile<<EOF
+	#TZ='Asia/Shanghai'; export TZ
+	#EOF
+	#rm -rf /etc/localtime
+	#cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
+	#echo 'Synchronizing system time...'
+	#ntpdate 0.asia.pool.ntp.org
+	#apt-get upgrade -y
+	debPacks="wget curl libcurl4-openssl-dev gcc make zip unzip tar openssl libssl-dev gcc libxml2 libxml2-dev zlib1g zlib1g-dev libjpeg-dev libpng-dev lsof libpcre3 libpcre3-dev cron net-tools swig build-essential libffi-dev libbz2-dev libncurses-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libdb++-dev libpcap-dev xz-utils git";
+	apt-get install -y $debPacks --force-yes
+
+	for debPack in ${debPacks}
+	do
+		packCheck=$(dpkg -l ${debPack})
+		if [ "$?" -ne "0" ] ;then
+			apt-get install -y debPack
+		fi
+	done
+
+	if [ ! -d '/etc/letsencrypt' ];then
+		mkdir -p /etc/letsencryp
+		mkdir -p /var/spool/cron
+		if [ ! -f '/var/spool/cron/crontabs/root' ];then
+			echo '' > /var/spool/cron/crontabs/root
+			chmod 600 /var/spool/cron/crontabs/root
+		fi	
+	fi
+}
+Install_Bt(){
+	panelPort="8888"
+	if [ -f ${setup_path}/server/panel/data/port.pl ];then
+		panelPort=$(cat ${setup_path}/server/panel/data/port.pl)
+	fi
+	mkdir -p ${setup_path}/server/panel/logs
+	mkdir -p ${setup_path}/server/panel/vhost/apache
+	mkdir -p ${setup_path}/server/panel/vhost/nginx
+	mkdir -p ${setup_path}/server/panel/vhost/rewrite
+	mkdir -p ${setup_path}/server/panel/install
+	mkdir -p /www/server
+	mkdir -p /www/wwwroot
+	mkdir -p /www/wwwlogs
+	mkdir -p /www/backup/database
+	mkdir -p /www/backup/site
+
+	if [ ! -f "/usr/bin/unzip" ]; then
+		if [ "${PM}" = "yum" ]; then
+			yum install unzip -y
+		elif [ "${PM}" = "apt-get" ]; then
+			apt-get install unzip -y
+		fi
+	fi
+
+	if [ -f "/etc/init.d/bt" ]; then
+		/etc/init.d/bt stop
+		sleep 1
+	fi
+
+	wget -O panel.zip ${download_Url}/install/src/panel_new.zip -T 10
+	wget -O /etc/init.d/bt ${download_Url}/install/src/bt6.init -T 10
+	wget -O /www/server/panel/install/public.sh ${download_Url}/install/public.sh -T 10
+
+	if [ -f "${setup_path}/server/panel/data/default.db" ];then
+		if [ -d "/${setup_path}/server/panel/old_data" ];then
+			rm -rf ${setup_path}/server/panel/old_data
+		fi
+		mkdir -p ${setup_path}/server/panel/old_data
+		d_format=$(date +"%Y%m%d_%H%M%S")
+		\cp -arf ${setup_path}/server/panel/data/default.db ${setup_path}/server/panel/data/default_backup_${d_format}.db
+		mv -f ${setup_path}/server/panel/data/default.db ${setup_path}/server/panel/old_data/default.db
+		mv -f ${setup_path}/server/panel/data/system.db ${setup_path}/server/panel/old_data/system.db
+		mv -f ${setup_path}/server/panel/data/port.pl ${setup_path}/server/panel/old_data/port.pl
+		mv -f ${setup_path}/server/panel/data/admin_path.pl ${setup_path}/server/panel/old_data/admin_path.pl
+	fi
+
+	unzip -o panel.zip -d ${setup_path}/server/ > /dev/null
+
+	if [ -d "${setup_path}/server/panel/old_data" ];then
+		mv -f ${setup_path}/server/panel/old_data/default.db ${setup_path}/server/panel/data/default.db
+		mv -f ${setup_path}/server/panel/old_data/system.db ${setup_path}/server/panel/data/system.db
+		mv -f ${setup_path}/server/panel/old_data/port.pl ${setup_path}/server/panel/data/port.pl
+		mv -f ${setup_path}/server/panel/old_data/admin_path.pl ${setup_path}/server/panel/data/admin_path.pl
+		if [ -d "/${setup_path}/server/panel/old_data" ];then
+			rm -rf ${setup_path}/server/panel/old_data
+		fi
+	fi
+
+	rm -f panel.zip
+
+	if [ ! -f ${setup_path}/server/panel/tools.py ];then
+		Red_Error "ERROR: Failed to download, please try install again!"
+	fi
+
+	rm -f ${setup_path}/server/panel/class/*.pyc
+	rm -f ${setup_path}/server/panel/*.pyc
+
+	chmod +x /etc/init.d/bt
+	chmod -R 600 ${setup_path}/server/panel
+	chmod -R +x ${setup_path}/server/panel/script
+	ln -sf /etc/init.d/bt /usr/bin/bt
+	echo "${panelPort}" > ${setup_path}/server/panel/data/port.pl
+	wget -O /etc/init.d/bt ${download_Url}/install/src/bt7.init -T 10
+	wget -O /www/server/panel/init.sh ${download_Url}/install/src/bt7.init -T 10
+}
+Install_Python_Lib(){
+	curl -Ss --connect-timeout 3 -m 60 $download_Url/install/pip_select.sh|bash
+	pyenv_path="/www/server/panel"
+	if [ -f $pyenv_path/pyenv/bin/python ];then
+		is_err=$($pyenv_path/pyenv/bin/python3.7 -V 2>&1|grep 'Could not find platform')
+		if [ "$is_err" = "" ];then
+			chmod -R 700 $pyenv_path/pyenv/bin
+			is_package=$($python_bin -m psutil 2>&1|grep package)
+			if [ "$is_package" = "" ];then
+				wget -O $pyenv_path/pyenv/pip.txt $download_Url/install/pyenv/pip.txt -T 5
+				$pyenv_path/pyenv/bin/pip install -U pip
+				$pyenv_path/pyenv/bin/pip install -U setuptools
+				$pyenv_path/pyenv/bin/pip install -r $pyenv_path/pyenv/pip.txt
+			fi
+			source $pyenv_path/pyenv/bin/activate
+			return
+		else
+			rm -rf $pyenv_path/pyenv
+		fi
+	fi
+	py_version="3.7.8"
+	mkdir -p $pyenv_path
+	os_type='el'
+	os_version='7'
+	is_export_openssl=0
+	Get_Versions
+	Centos6_Openssl
+	Other_Openssl
+	echo "OS: $os_type - $os_version"
+	is_aarch64=$(uname -a|grep aarch64)
+	if [ "$is_aarch64" != "" ];then
+		os_version="aarch64"
+	fi
+	
+	if [ -f "/www/server/panel/pymake.pl" ];then
+		os_version=""
+		rm -f /www/server/panel/pymake.pl
+	fi	
+
+	if [ "${os_version}" != "" ];then
+		pyenv_file="/www/pyenv.tar.gz"
+		wget -O $pyenv_file $download_Url/install/pyenv/pyenv-${os_type}${os_version}-x${is64bit}.tar.gz -T 10
+		tmp_size=$(du -b $pyenv_file|awk '{print $1}')
+		if [ $tmp_size -lt 703460 ];then
+			rm -f $pyenv_file
+			echo "ERROR: Download python env fielded."
+		else
+			echo "Install python env..."
+			tar zxvf $pyenv_file -C $pyenv_path/ > /dev/null
+			chmod -R 700 $pyenv_path/pyenv/bin
+			if [ ! -f $pyenv_path/pyenv/bin/python ];then
+				rm -f $pyenv_file
+				Red_Error "ERROR: Install python env fielded."
+			fi
+			is_err=$($pyenv_path/pyenv/bin/python3.7 -V 2>&1|grep 'Could not find platform')
+			if [ "$is_err" = "" ];then
+				rm -f $pyenv_file
+				ln -sf $pyenv_path/pyenv/bin/pip3.7 /usr/bin/btpip
+				ln -sf $pyenv_path/pyenv/bin/python3.7 /usr/bin/btpython
+				source $pyenv_path/pyenv/bin/activate
+				return
+			else
+				rm -f $pyenv_file
+				rm -rf $pyenv_path/pyenv
+			fi
+		fi
+		
+	fi
+	if [ -f /usr/local/openssl/lib/libssl.so ];then
+		export LDFLAGS="-L/usr/local/openssl/lib"
+		export CPPFLAGS="-I/usr/local/openssl/include"
+		export PKG_CONFIG_PATH="/usr/local/openssl/lib/pkgconfig"
+		echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/openssl/lib" >> /etc/profile
+		source /etc/profile
+	fi
+	cd /www
+	python_src='/www/python_src.tar.xz'
+	python_src_path="/www/Python-${py_version}"
+	wget -O $python_src $download_Url/src/Python-${py_version}.tar.xz -T 5
+	tmp_size=$(du -b $python_src|awk '{print $1}')
+	if [ $tmp_size -lt 10703460 ];then
+		rm -f $python_src
+		Red_Error "ERROR: Download python source code fielded."
+	fi
+	tar xvf $python_src
+	rm -f $python_src
+	cd $python_src_path
+	./configure --prefix=$pyenv_path/pyenv
+	make -j$cpu_cpunt
+	make install
+	if [ ! -f $pyenv_path/pyenv/bin/python3.7 ];then
+		rm -rf $python_src_path
+		Red_Error "ERROR: Make python env fielded."
+	fi
+	cd ~
+	rm -rf $python_src_path
+	wget -O $pyenv_path/pyenv/bin/activate $download_Url/install/pyenv/activate.panel -T 5
+	wget -O $pyenv_path/pyenv/pip.txt $download_Url/install/pyenv/pip-3.7.8.txt -T 5
+	ln -sf $pyenv_path/pyenv/bin/pip3.7 $pyenv_path/pyenv/bin/pip
+	ln -sf $pyenv_path/pyenv/bin/python3.7 $pyenv_path/pyenv/bin/python
+	ln -sf $pyenv_path/pyenv/bin/pip3.7 /usr/bin/btpip
+	ln -sf $pyenv_path/pyenv/bin/python3.7 /usr/bin/btpython
+	chmod -R 700 $pyenv_path/pyenv/bin
+	$pyenv_path/pyenv/bin/pip install -U pip
+	$pyenv_path/pyenv/bin/pip install -U setuptools
+	$pyenv_path/pyenv/bin/pip install -U wheel==0.34.2 
+	$pyenv_path/pyenv/bin/pip install -r $pyenv_path/pyenv/pip.txt
+	source $pyenv_path/pyenv/bin/activate
+}
+Other_Openssl(){
+	openssl_version=$(openssl version|grep -Eo '[0-9]\.[0-9]\.[0-9]')
+	if [ "$openssl_version" = '1.0.1' ] || [ "$openssl_version" = '1.0.0' ];then	
+		opensslVersion="1.0.2r"
+		if [ ! -f "/usr/local/openssl/lib/libssl.so" ];then
+			cd /www
+			openssl_src_file=/www/openssl.tar.gz
+			wget -O $openssl_src_file ${download_Url}/src/openssl-${opensslVersion}.tar.gz
+			tmp_size=$(du -b $openssl_src_file|awk '{print $1}')
+			if [ $tmp_size -lt 703460 ];then
+				rm -f $openssl_src_file
+				Red_Error "ERROR: Download openssl-1.0.2 source code fielded."
+			fi
+			tar -zxf $openssl_src_file
+			rm -f $openssl_src_file
+			cd openssl-${opensslVersion}
+			#zlib-dynamic shared
+			./config --openssldir=/usr/local/openssl zlib-dynamic shared
+			make -j${cpuCore} 
+			make install
+			echo  "/usr/local/openssl/lib" > /etc/ld.so.conf.d/zopenssl.conf
+			ldconfig
+			cd ..
+			rm -rf openssl-${opensslVersion}
+			is_export_openssl=1
+			cd ~
+		fi
+	fi
+}
+Insatll_Libressl(){
+	openssl_version=$(openssl version|grep -Eo '[0-9]\.[0-9]\.[0-9]')
+	if [ "$openssl_version" = '1.0.1' ] || [ "$openssl_version" = '1.0.0' ];then	
+		opensslVersion="3.0.2"
+		cd /www
+		openssl_src_file=/www/openssl.tar.gz
+		wget -O $openssl_src_file ${download_Url}/install/pyenv/libressl-${opensslVersion}.tar.gz
+		tmp_size=$(du -b $openssl_src_file|awk '{print $1}')
+		if [ $tmp_size -lt 703460 ];then
+			rm -f $openssl_src_file
+			Red_Error "ERROR: Download libressl-$opensslVersion source code fielded."
+		fi
+		tar -zxf $openssl_src_file
+		rm -f $openssl_src_file
+		cd libressl-${opensslVersion}
+		./config 鈥損refix=/usr/local/lib
+		make -j${cpuCore}
+		make install
+		ldconfig
+		ldconfig -v
+		cd ..
+		rm -rf libressl-${opensslVersion}
+		is_export_openssl=1
+		cd ~
+	fi
+}
+Centos6_Openssl(){
+	if [ "$os_type" != 'el' ];then
+		return
+	fi
+	if [ "$os_version" != '6' ];then
+		return
+	fi
+	echo 'Centos6 install openssl-1.0.2...'
+	openssl_rpm_file="/www/openssl.rpm"
+	wget -O $openssl_rpm_file $download_Url/rpm/centos6/${is64bit}/bt-openssl102.rpm -T 10
+	tmp_size=$(du -b $openssl_rpm_file|awk '{print $1}')
+	if [ $tmp_size -lt 102400 ];then
+		rm -f $openssl_rpm_file
+		Red_Error "ERROR: Download python env fielded."
+	fi
+	rpm -ivh $openssl_rpm_file
+	rm -f $openssl_rpm_file
+	is_export_openssl=1
+}
+Get_Versions(){
+	redhat_version_file="/etc/redhat-release"
+	deb_version_file="/etc/issue"
+	if [ -f $redhat_version_file ];then
+		os_type='el'
+		is_aliyunos=$(cat $redhat_version_file|grep Aliyun)
+		if [ "$is_aliyunos" != "" ];then
+			return
+		fi
+		os_version=$(cat $redhat_version_file|grep CentOS|grep -Eo '([0-9]+\.)+[0-9]+'|grep -Eo '^[0-9]')
+		if [ "${os_version}" = "5" ];then
+			os_version=""
+		fi
+	else
+		os_type='ubuntu'
+		os_version=$(cat $deb_version_file|grep Ubuntu|grep -Eo '([0-9]+\.)+[0-9]+'|grep -Eo '^[0-9]+')
+		if [ "${os_version}" = "" ];then
+			os_type='debian'
+			os_version=$(cat $deb_version_file|grep Debian|grep -Eo '([0-9]+\.)+[0-9]+'|grep -Eo '[0-9]+')
+			if [ "${os_version}" = "" ];then
+				os_version=$(cat $deb_version_file|grep Debian|grep -Eo '[0-9]+')
+			fi
+			if [ "${os_version}" = "8" ];then
+				os_version=""
+			fi
+			if [ "${is64bit}" = '32' ];then
+				os_version=""
+			fi
+		else
+			if [ "$os_version" = "14" ];then
+				os_version=""
+			fi
+			if [ "$os_version" = "12" ];then
+				os_version=""
+			fi
+			if [ "$os_version" = "19" ];then
+				os_version=""
+			fi
+
+		fi
+	fi
+}
+Set_Bt_Panel(){
+	password=$(cat /dev/urandom | head -n 16 | md5sum | head -c 8)
+	sleep 1
+	admin_auth="/www/server/panel/data/admin_path.pl"
+	if [ ! -f ${admin_auth} ];then
+		auth_path=$(cat /dev/urandom | head -n 16 | md5sum | head -c 8)
+		echo "/${auth_path}" > ${admin_auth}
+	fi
+	auth_path=$(cat ${admin_auth})
+	cd ${setup_path}/server/panel/
+	/etc/init.d/bt start
+	$python_bin -m py_compile tools.py
+	$python_bin tools.py username
+	username=$($python_bin tools.py panel ${password})
+	cd ~
+	echo "${password}" > ${setup_path}/server/panel/default.pl
+	chmod 600 ${setup_path}/server/panel/default.pl
+	sleep 3
+	/etc/init.d/bt restart 	
+	sleep 3
+	isStart=$(ps aux |grep 'BT-Panel'|grep -v grep|awk '{print $2}')
+	LOCAL_CURL=$(curl 127.0.0.1:8888/login 2>&1 |grep -i html)
+	if [ -z "${isStart}" ] && [ -z "${LOCAL_CURL}" ];then
+		/etc/init.d/bt 22
+		cd /www/server/panel/pyenv/bin
+		touch t.pl
+		ls -al python3.7 python
+		lsattr python3.7 python
+		Red_Error "ERROR: The BT-Panel service startup failed."
+	fi
+}
+Set_Firewall(){
+	sshPort=$(cat /etc/ssh/sshd_config | grep 'Port '|awk '{print $2}')
+	if [ "${PM}" = "apt-get" ]; then
+		apt-get install -y ufw
+		if [ -f "/usr/sbin/ufw" ];then
+			ufw allow 20/tcp
+			ufw allow 21/tcp
+			ufw allow 22/tcp
+			ufw allow 80/tcp
+			ufw allow 888/tcp
+			ufw allow ${panelPort}/tcp
+			ufw allow ${sshPort}/tcp
+			ufw allow 39000:40000/tcp
+			ufw_status=`ufw status`
+			echo y|ufw enable
+			ufw default deny
+			ufw reload
+		fi
+	else
+		if [ -f "/etc/init.d/iptables" ];then
+			iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT
+			iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
+			iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
+			iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
+			iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport ${panelPort} -j ACCEPT
+			iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport ${sshPort} -j ACCEPT
+			iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 39000:40000 -j ACCEPT
+			#iptables -I INPUT -p tcp -m state --state NEW -m udp --dport 39000:40000 -j ACCEPT
+			iptables -A INPUT -p icmp --icmp-type any -j ACCEPT
+			iptables -A INPUT -s localhost -d localhost -j ACCEPT
+			iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
+			iptables -P INPUT DROP
+			service iptables save
+			sed -i "s#IPTABLES_MODULES=\"\"#IPTABLES_MODULES=\"ip_conntrack_netbios_ns ip_conntrack_ftp ip_nat_ftp\"#" /etc/sysconfig/iptables-config
+			iptables_status=$(service iptables status | grep 'not running')
+			if [ "${iptables_status}" == '' ];then
+				service iptables restart
+			fi
+		else
+			AliyunCheck=$(cat /etc/redhat-release|grep "Aliyun Linux")
+			[ "${AliyunCheck}" ] && return
+			yum install firewalld -y
+			[ "${Centos8Check}" ] && yum reinstall python3-six -y
+			systemctl enable firewalld
+			systemctl start firewalld
+			firewall-cmd --set-default-zone=public > /dev/null 2>&1
+			firewall-cmd --permanent --zone=public --add-port=20/tcp > /dev/null 2>&1
+			firewall-cmd --permanent --zone=public --add-port=21/tcp > /dev/null 2>&1
+			firewall-cmd --permanent --zone=public --add-port=22/tcp > /dev/null 2>&1
+			firewall-cmd --permanent --zone=public --add-port=80/tcp > /dev/null 2>&1
+			firewall-cmd --permanent --zone=public --add-port=${panelPort}/tcp > /dev/null 2>&1
+			firewall-cmd --permanent --zone=public --add-port=${sshPort}/tcp > /dev/null 2>&1
+			firewall-cmd --permanent --zone=public --add-port=39000-40000/tcp > /dev/null 2>&1
+			#firewall-cmd --permanent --zone=public --add-port=39000-40000/udp > /dev/null 2>&1
+			firewall-cmd --reload
+		fi
+	fi
+}
+Get_Ip_Address(){
+	getIpAddress=""
+	getIpAddress=$(curl -sS --connect-timeout 10 -m 60 https://v7.hostcli.com/Api/getIpAddress)
+	if [ -z "${getIpAddress}" ] || [ "${getIpAddress}" = "0.0.0.0" ]; then
+		isHosts=$(cat /etc/hosts|grep 'v7.hostcli.com')
+		if [ -z "${isHosts}" ];then
+			#echo "" >> /etc/hosts
+			#echo "103.224.251.67 v7.hostcli.com" >> /etc/hosts
+			getIpAddress=$(curl -sS --connect-timeout 10 -m 60 https://v7.hostcli.com/Api/getIpAddress)
+			if [ -z "${getIpAddress}" ];then
+				sed -i "/v7.hostcli.com/d" /etc/hosts
+			fi
+		fi
+	fi
+
+	ipv4Check=$($python_bin -c "import re; print(re.match('^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$','${getIpAddress}'))")
+	if [ "${ipv4Check}" == "None" ];then
+		ipv6Address=$(echo ${getIpAddress}|tr -d "[]")
+		ipv6Check=$($python_bin -c "import re; print(re.match('^([0-9a-fA-F]{0,4}:){1,7}[0-9a-fA-F]{0,4}$','${ipv6Address}'))")
+		if [ "${ipv6Check}" == "None" ]; then
+			getIpAddress="SERVER_IP"
+		else
+			echo "True" > ${setup_path}/server/panel/data/ipv6.pl
+			sleep 1
+			/etc/init.d/bt restart
+		fi
+	fi
+
+	if [ "${getIpAddress}" != "SERVER_IP" ];then
+		echo "${getIpAddress}" > ${setup_path}/server/panel/data/iplist.txt
+	fi
+	LOCAL_IP=$(ip addr | grep -E -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -E -v "^127\.|^255\.|^0\." | head -n 1)
+}
+Setup_Count(){
+	curl -sS --connect-timeout 10 -m 60 https://v7.hostcli.com/Api/SetupCount?type=Linux\&o=$1 > /dev/null 2>&1
+	if [ "$1" != "" ];then
+		echo $1 > /www/server/panel/data/o.pl
+		cd /www/server/panel
+		$python_bin tools.py o
+	fi
+	echo /www > /var/bt_setupPath.conf
+}
+Install_Main(){
+	startTime=`date +%s`
+	Lock_Clear
+	System_Check
+	Get_Pack_Manager
+	get_node_url
+
+	MEM_TOTAL=$(free -g|grep Mem|awk '{print $2}')
+	if [ "${MEM_TOTAL}" -le "1" ];then
+		Auto_Swap
+	fi
+	
+	if [ "${PM}" = "yum" ]; then
+		Install_RPM_Pack
+	elif [ "${PM}" = "apt-get" ]; then
+		Install_Deb_Pack
+	fi
+
+	Install_Python_Lib
+	Install_Bt
+	
+
+	Set_Bt_Panel
+	Service_Add
+	Set_Firewall
+
+	Get_Ip_Address
+	Setup_Count ${IDC_CODE}
+}
+
+echo "
++----------------------------------------------------------------------
+| hostcli.com FOR CentOS/Ubuntu/Debian
++----------------------------------------------------------------------
+| Copyright 漏 2015-2099 HostCli(http://v7.hostcli.com) All rights reserved.
++----------------------------------------------------------------------
+| The WebPanel URL will be http://SERVER_IP:8888 when installed.
++----------------------------------------------------------------------
+"
+while [ "$go" != 'y' ] && [ "$go" != 'n' ]
+do
+	read -p "Do you want to install Bt-Panel to the $setup_path directory now?(y/n): " go;
+done
+
+if [ "$go" == 'n' ];then
+	exit;
+fi
+
+Install_Main
+echo > /www/server/panel/data/bind.pl
+echo -e "=================================================================="
+echo -e "\033[32mCongratulations! Installed successfully!\033[0m"
+echo -e "=================================================================="
+echo  "澶栫綉闈㈡澘鍦板潃: http://${getIpAddress}:${panelPort}${auth_path}"
+echo  "鍐呯綉闈㈡澘鍦板潃: http://${LOCAL_IP}:${panelPort}${auth_path}"
+echo -e "username: $username"
+echo -e "password: $password"
+echo -e "\033[33mIf you cannot access the panel,\033[0m"
+echo -e "\033[33mrelease the following panel port [${panelPort}] in the security group\033[0m"
+echo -e "\033[33m鑻ユ棤娉曡闂潰鏉匡紝璇锋鏌ラ槻鐏/瀹夊叏缁勬槸鍚︽湁鏀捐闈㈡澘[${panelPort}]绔彛\033[0m"
+echo -e "=================================================================="
+
+endTime=`date +%s`
+((outTime=($endTime-$startTime)/60))
+echo -e "Time consumed:\033[32m $outTime \033[0mMinute!"
+

--
Gitblit v1.10.0