diff --git a/.gitignore b/.gitignore index 2a1f967..5c2a8c9 100644 --- a/.gitignore +++ b/.gitignore @@ -315,4 +315,5 @@ cython_debug/ /backend/logs/ /backend/note_results /backend/models -/backend/.idea \ No newline at end of file +/backend/.idea/* +/backend/bili_note.db \ No newline at end of file diff --git a/BillNote_frontend/.env example b/BillNote_frontend/.env example deleted file mode 100644 index 3d0eeae..0000000 --- a/BillNote_frontend/.env example +++ /dev/null @@ -1,3 +0,0 @@ -# 前端专用 -VITE_API_BASE_URL=http://127.0.0.1:8000 -VITE_SCREENSHOT_BASE_URL=http://127.0.0.1:8000/static/screenshots \ No newline at end of file diff --git a/BillNote_frontend/.prettierignore b/BillNote_frontend/.prettierignore new file mode 100644 index 0000000..db18f00 --- /dev/null +++ b/BillNote_frontend/.prettierignore @@ -0,0 +1,8 @@ +dist +build +node_modules +*.svg +*.lock +*.png +public +coverage \ No newline at end of file diff --git a/BillNote_frontend/.prettierrc b/BillNote_frontend/.prettierrc new file mode 100644 index 0000000..61f5407 --- /dev/null +++ b/BillNote_frontend/.prettierrc @@ -0,0 +1,11 @@ +{ + "semi": false, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "es5", + "printWidth": 100, + "bracketSpacing": true, + "arrowParens": "avoid", + "endOfLine": "lf", + "plugins": ["prettier-plugin-tailwindcss"] +} diff --git a/BillNote_frontend/Dockerfile b/BillNote_frontend/Dockerfile index 27856a6..44deee5 100644 --- a/BillNote_frontend/Dockerfile +++ b/BillNote_frontend/Dockerfile @@ -1,32 +1,13 @@ -# === 前端构建阶段 === FROM node:18-alpine AS build -# 安装 pnpm -RUN npm install -g pnpm - -# 设置工作目录 WORKDIR /app -# 拷贝前端源码 COPY ./BillNote_frontend /app -# 安装依赖并构建 -RUN pnpm install && pnpm run build +RUN npm install && npm run build -# === nginx 运行阶段 === FROM nginx:alpine -# 拷贝模板配置 -COPY ./BillNote_frontend/deploy/default.conf.template /etc/nginx/templates/default.conf.template - -# 拷贝构建产物 COPY --from=build /app/dist /usr/share/nginx/html -# 拷贝启动脚本 -COPY ./BillNote_frontend/deploy/start.sh /start.sh -RUN chmod +x /start.sh - EXPOSE 80 - -# 使用启动脚本启动容器 -CMD ["/start.sh"] \ No newline at end of file diff --git a/BillNote_frontend/components.json b/BillNote_frontend/components.json index 73afbdb..13e1db0 100644 --- a/BillNote_frontend/components.json +++ b/BillNote_frontend/components.json @@ -18,4 +18,4 @@ "hooks": "@/hooks" }, "iconLibrary": "lucide" -} \ No newline at end of file +} diff --git a/BillNote_frontend/deploy/default.conf.template b/BillNote_frontend/deploy/default.conf.template deleted file mode 100644 index a6bcf4d..0000000 --- a/BillNote_frontend/deploy/default.conf.template +++ /dev/null @@ -1,18 +0,0 @@ -server { - listen 80; - resolver 127.0.0.11 valid=10s; - - location / { - root /usr/share/nginx/html; - index index.html; - try_files $uri $uri/ /index.html; - } - - location /api/ { - proxy_pass http://backend:${BACKEND_PORT}; - 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_set_header X-Forwarded-Proto $scheme; -} -} \ No newline at end of file diff --git a/BillNote_frontend/deploy/start.sh b/BillNote_frontend/deploy/start.sh deleted file mode 100644 index af0819a..0000000 --- a/BillNote_frontend/deploy/start.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh -### - # @Author: Jefferyhcool 1063474837@qq.com - # @Date: 2025-04-16 01:57:05 - # @LastEditors: Jefferyhcool 1063474837@qq.com - # @LastEditTime: 2025-04-16 01:59:37 - # @FilePath: /hotfix-dev/BillNote_frontend/deploy/start.sh - # @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE -### -# 等待后端健康检查通过 -until curl -s "http://backend:${BACKEND_PORT}/health" > /dev/null; do - echo "等待后端服务就绪..." - sleep 2 -done - -# 生成 nginx 配置文件(动态变量替换) -envsubst '${BACKEND_HOST} ${BACKEND_PORT}' < /etc/nginx/templates/default.conf.template > /etc/nginx/conf.d/default.conf - -# 启动 Nginx(在前台运行) -exec nginx -g 'daemon off;' \ No newline at end of file diff --git a/BillNote_frontend/eslint.config.js b/BillNote_frontend/eslint.config.js index 092408a..91d3441 100644 --- a/BillNote_frontend/eslint.config.js +++ b/BillNote_frontend/eslint.config.js @@ -19,10 +19,7 @@ export default tseslint.config( }, rules: { ...reactHooks.configs.recommended.rules, - 'react-refresh/only-export-components': [ - 'warn', - { allowConstantExport: true }, - ], + 'react-refresh/only-export-components': ['warn', { allowConstantExport: true }], }, - }, + } ) diff --git a/BillNote_frontend/package.json b/BillNote_frontend/package.json index 704a5ed..9ea2297 100644 --- a/BillNote_frontend/package.json +++ b/BillNote_frontend/package.json @@ -11,12 +11,17 @@ }, "dependencies": { "@hookform/resolvers": "^5.0.1", + "@lobehub/icons": "^1.97.1", + "@lobehub/icons-static-svg": "^1.45.0", "@lottiefiles/dotlottie-react": "^0.13.3", "@radix-ui/react-checkbox": "^1.1.4", + "@radix-ui/react-dialog": "^1.1.7", "@radix-ui/react-label": "^2.1.2", "@radix-ui/react-scroll-area": "^1.2.3", "@radix-ui/react-select": "^2.1.6", "@radix-ui/react-slot": "^1.1.2", + "@radix-ui/react-switch": "^1.2.2", + "@radix-ui/react-tabs": "^1.1.4", "@radix-ui/react-tooltip": "^1.1.8", "@tailwindcss/vite": "^4.1.3", "@uiw/react-markdown-preview": "^5.1.3", @@ -33,6 +38,7 @@ "react-hook-form": "^7.55.0", "react-hot-toast": "^2.5.2", "react-markdown": "^10.1.0", + "react-router-dom": "^7.5.1", "react-syntax-highlighter": "^15.6.1", "remark-gfm": "1.0.0", "sonner": "^2.0.3", @@ -54,6 +60,8 @@ "eslint-plugin-react-hooks": "^5.1.0", "eslint-plugin-react-refresh": "^0.4.19", "globals": "^15.15.0", + "prettier": "^3.5.3", + "prettier-plugin-tailwindcss": "^0.6.11", "typescript": "~5.7.2", "typescript-eslint": "^8.24.1", "vite": "^6.2.0" diff --git a/BillNote_frontend/postcss.config.cjs b/BillNote_frontend/postcss.config.cjs index 56c28dd..668a5b9 100644 --- a/BillNote_frontend/postcss.config.cjs +++ b/BillNote_frontend/postcss.config.cjs @@ -1,6 +1,6 @@ module.exports = { - plugins: { - '@tailwindcss/postcss': {}, - autoprefixer: {}, - }, + plugins: { + '@tailwindcss/postcss': {}, + autoprefixer: {}, + }, } diff --git a/BillNote_frontend/src/App.tsx b/BillNote_frontend/src/App.tsx index 6e74fc8..a490dc1 100644 --- a/BillNote_frontend/src/App.tsx +++ b/BillNote_frontend/src/App.tsx @@ -1,16 +1,36 @@ - import './App.css' -import {HomePage} from "./pages/Home.tsx"; -import {useTaskPolling} from "@/hooks/useTaskPolling.ts"; - +import { HomePage } from './pages/HomePage/Home.tsx' +import { useTaskPolling } from '@/hooks/useTaskPolling.ts' +import SettingPage from './pages/SettingPage/index.tsx' +import { BrowserRouter, Navigate, Routes } from 'react-router-dom' +import { Route } from 'react-router-dom' +import Index from '@/pages/Index.tsx' +import NotFoundPage from '@/pages/NotFoundPage' // +import Model from '@/pages/SettingPage/Model.tsx' +import ProviderForm from '@/components/Form/modelForm/Form.tsx' function App() { - useTaskPolling(3000) // 每 3 秒轮询一次 + useTaskPolling(3000) // 每 3 秒轮询一次 - return ( - <> - - - ) + return ( + <> + + + }> + } /> + }> + } /> + }> + } /> + } /> + + } /> + + } /> + + + + + ) } export default App diff --git a/BillNote_frontend/src/assets/Lottie/idle.json b/BillNote_frontend/src/assets/Lottie/idle.json index e2daede..22a08a7 100644 --- a/BillNote_frontend/src/assets/Lottie/idle.json +++ b/BillNote_frontend/src/assets/Lottie/idle.json @@ -1 +1,5070 @@ -{"v":"4.8.0","meta":{"g":"LottieFiles AE 1.1.0","a":"","k":"","d":"","tc":""},"fr":30,"ip":0,"op":77,"w":1000,"h":1000,"nm":"Comp 1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[480,505.99999999999994,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-142,44],[-98,110],[-318,28],[-207.607,328.098],[-164,184],[-384,353],[-387,39]],"o":[[-142,44],[-169.454,162.28300000000002],[-386,184],[-120,280],[-265.995,293.645],[-242.43,-15.879999999999995],[-439,95]],"v":[[-142,44],[-139,140],[-352,106],[-171,308],[-204,227],[-313,168],[-413,67]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":30,"ix":1}},{"n":"g","nm":"gap","v":{"a":0,"k":1369,"ix":2}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[103],"__fnct":[null]},{"t":70.0000028511585,"s":[-1303]}],"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"_render":true}],"ip":22.0000008960784,"op":1810.00007372281,"st":12.00000048877,"bm":0,"completed":true},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[500,500,0],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-142,44],[-98,110],[-318,28],[-207.607,328.098],[-164,184],[-384,353],[-387,39]],"o":[[-142,44],[-169.454,162.28300000000002],[-386,184],[-120,280],[-265.995,293.645],[-242.43,-15.879999999999995],[-439,95]],"v":[[-142,44],[-139,140],[-352,106],[-171,308],[-204,227],[-313,168],[-413,67]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"d":[{"n":"d","nm":"dash","v":{"a":0,"k":12,"ix":1}},{"n":"g","nm":"gap","v":{"a":0,"k":1369,"ix":2}},{"n":"o","nm":"offset","v":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":20,"s":[103],"__fnct":[null]},{"t":58.0000023623884,"s":[-1303]}],"ix":7}}],"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"_render":true}],"ip":22.0000008960784,"op":1798.00007323404,"st":0,"bm":0,"completed":true},{"ddd":0,"ind":3,"ty":4,"nm":"head/boxgirl2 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":9,"s":[0],"__fnct":[null]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":45,"s":[-5],"__fnct":[null]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":50,"s":[-5],"__fnct":[null]},{"t":75.0000030548126,"s":[0]}],"ix":10},"p":{"a":0,"k":[504.173,279.4,0],"ix":2},"a":{"a":0,"k":[615.874,302.163,0],"ix":1},"s":{"a":0,"k":[83,83,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[3.318,-1.01],[-1.033,-1.01],[-1.5230000000000001,-0.857],[-2.355,-0.29700000000000004],[-3.083,0.40700000000000003],[-3.318,1.01],[1.032,1.01],[1.5230000000000001,0.858],[2.355,0.29700000000000004],[3.083,-0.40800000000000003]],"o":[[3.115,-1.01],[-1.264,-1.01],[-2.033,-0.5509999999999999],[-2.827,0.174],[-3.234,0.785],[-3.115,1.01],[1.264,1.01],[2.033,0.5509999999999999],[2.827,-0.174],[3.234,-0.786]],"v":[[3.115,-1.01],[-1.033,-1.01],[-1.711,-0.745],[-2.621,-0.032],[-3.193,0.682],[-3.115,1.01],[1.032,1.01],[1.711,0.745],[2.621,0.031],[3.193,-0.682]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[592.024,140.01],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.084,-1.01],[-2.561,-1.01],[-3.7720000000000002,-0.40800000000000003],[-5.084,1.01],[2.56,1.01],[3.7720000000000002,0.40800000000000003]],"o":[[4.643,-1.01],[-3.1319999999999997,-1.01],[-4.235,0.053000000000000005],[-4.643,1.01],[3.132,1.01],[4.234,-0.053000000000000005]],"v":[[4.643,-1.01],[-2.561,-1.01],[-4.149,-0.032],[-4.643,1.01],[2.56,1.01],[4.149,0.032]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[589.932,134.862],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.772,-1.01],[-0.487,-1.01],[-0.978,-0.857],[-1.81,-0.29700000000000004],[-2.538,0.40700000000000003],[-2.7729999999999997,1.01],[0.486,1.01],[0.9770000000000001,0.858],[1.8090000000000002,0.29700000000000004],[2.537,-0.40800000000000003]],"o":[[2.569,-1.01],[-0.719,-1.01],[-1.488,-0.5509999999999999],[-2.282,0.174],[-2.6889999999999996,0.785],[-2.57,1.01],[0.718,1.01],[1.487,0.552],[2.281,-0.174],[2.6879999999999997,-0.786]],"v":[[2.569,-1.01],[-0.487,-1.01],[-1.165,-0.745],[-2.076,-0.032],[-2.647,0.682],[-2.57,1.01],[0.486,1.01],[1.165,0.745],[2.075,0.032],[2.647,-0.682]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[594.189,130.405],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[2.801,-6.987],[-1.301,-7.2940000000000005],[-4.465,-3.311],[2.381,-0.7919999999999998],[1.0779999999999998,4.202],[-2.5759999999999996,2.357],[-5.6930000000000005,2.3280000000000003],[2.222,6.802],[5.319,-0.5130000000000001],[1.815,-2.954],[-1.187,-3.9110000000000005],[-0.495,-5.009]],"o":[[0.23199999999999998,-7.466],[-3.714,-4.845000000000001],[-1.4260000000000002,-0.5469999999999999],[3.258,3.98],[-1.6340000000000001,3.422],[-3.387,0.605],[-3.314,7.465999999999999],[5.693,1.4709999999999999],[2.9050000000000002,-2.571],[0.41800000000000004,-3.532],[-1.38,-5.344],[1.081,-4.716]],"v":[[2.104,-7.117],[-2.682,-5.892],[-3.188,-2.149],[2.92,2.141],[-0.213,3.831],[-3.175,1.063],[-5.296,3.185],[4.569,3.198],[3.753,-1.848],[0.801,-3.374],[-1.262,-4.469],[0.261,-4.868]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[602.895,136.398],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.716,-0.848],[0.9320000000000004,1.168]],"o":[[-6.716,-0.848],[6.716,-1.168]],"v":[[-6.716,-0.848],[6.716,-1.168]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"fl","c":{"a":0,"k":[0.2353,0.4667,0.9843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[605.021,201.209],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 5","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-6.716,-2.008],[0.9320000000000004,2.008]],"o":[[-6.716,-2.008],[6.716,-0.328]],"v":[[-6.716,-2.008],[6.716,-0.328]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"fl","c":{"a":0,"k":[0.2353,0.4667,0.9843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[582.244,200.369],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 6","np":3,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[22.043,0.722],[20.149,0.266],[-6.656000000000001,-16.256],[-22.237000000000002,-0.14900000000000002],[-8.729000000000001,14.901],[15.616999999999997,14.252],[19.248,0.025]],"o":[[21.08,0.499],[-2.001999999999999,-5.6739999999999995],[-20.734,-8.834],[-15.590000000000002,11.676],[4.767,16.256],[22.237,12.775],[19.248,0.025]],"v":[[22.043,0.722],[19.248,0.025],[-14.734,-11.997],[-18.914,5.764],[-1.981,15.578],[22.237,12.775],[19.248,0.025]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"fl","c":{"a":0,"k":[0.2353,0.4667,0.9843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[543.515,174.404],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 7","np":3,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-72.745,16.895],[-29.706,4.359],[2.358999999999998,-45.148],[80.24799999999999,-10.884],[-19.215999999999998,34.159],[-64.667,12.637],[-80.248,28.744],[-66.74,43.793],[-42.394,43.144],[-38.763,28.917]],"o":[[-72.745,16.895],[-25.887999999999998,-23.289],[57.803,-38.668],[14.373999999999995,35.269999999999996],[-60.013,23.218000000000004],[-78.745,20.058],[-73.60100000000001,40.568],[-53.244,45.147999999999996],[-35.774,41.668],[-38.763,28.917]],"v":[[-72.745,16.895],[-29.706,4.359],[30.081,-41.908],[77.588,16.899],[-38.763,28.917],[-72.745,16.895],[-76.924,34.656],[-59.992,44.47],[-35.774,41.668],[-38.763,28.917]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"fl","c":{"a":0,"k":[0.5632,0.6878,0.9568,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[601.526,145.512],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 8","np":3,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-36.33,-25.893],[-33.935,-14.556000000000001],[-13.227,25.703],[32.913,14.046]],"o":[[-33.596,-12.952],[-27.971,13.673],[18.022,25.894],[36.33,-1.201]],"v":[[-36.33,-25.893],[-31.201,-1.615],[2.397,25.799],[36.33,-1.201]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[602.33,214.252],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[5.451,-19.487],[0.6400000000000006,12.189999999999998]],"o":[[4.526999999999999,-6.494999999999997],[-5.451,19.487]],"v":[[5.451,-19.487],[-5.451,19.487]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[594.411,259.908],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 10","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":4,"s":[{"i":[[-67.624,-74.46],[-59.432,-64.406],[-62.772000000000006,-11.378],[-32.257,55.667],[41.224000000000004,67.645],[60.596000000000004,-4.450000000000001],[1.633,-43.886],[-1.9909999999999997,-80.972]],"o":[[-60.32299999999999,-66.62599999999999],[-63.241,-26.447000000000003],[-48.133,34.510999999999996],[12.459000000000001,73.57300000000001],[68.354,27.844],[13.686999999999998,-21.225],[2.477,-75.40100000000001],[-13.363,-83.18299999999999]],"v":[[-67.624,-74.46],[-60.836,-50.411],[-55.453,11.567],[-9.899,64.62],[54.789,47.744],[37.918,-12.56],[2.322,-69.611],[-7.677,-82.077]],"c":true}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":34,"s":[{"i":[[-67.624,-74.46],[-59.432,-64.406],[-63.501000000000005,-1.7669999999999995],[-32.986000000000004,65.277],[40.495000000000005,77.256],[59.867000000000004,5.161],[1.633,-43.886],[-1.9909999999999997,-80.972]],"o":[[-60.32299999999999,-66.62599999999999],[-63.241,-26.447000000000003],[-48.862,44.122],[11.73,83.183],[67.625,37.455],[12.957999999999998,-11.613999999999999],[2.477,-75.40100000000001],[-13.363,-83.18299999999999]],"v":[[-67.624,-74.46],[-60.836,-50.411],[-56.182,21.178],[-10.628,74.23],[54.06,57.355],[37.189,-2.949],[2.322,-69.611],[-7.677,-82.077]],"c":true}]},{"t":74.0000030140818,"s":[{"i":[[-67.624,-74.46],[-59.432,-64.406],[-62.772000000000006,-11.378],[-32.257,55.667],[41.224000000000004,67.645],[60.596000000000004,-4.450000000000001],[1.633,-43.886],[-1.9909999999999997,-80.972]],"o":[[-60.32299999999999,-66.62599999999999],[-63.241,-26.447000000000003],[-48.133,34.510999999999996],[12.459000000000001,73.57300000000001],[68.354,27.844],[13.686999999999998,-21.225],[2.477,-75.40100000000001],[-13.363,-83.18299999999999]],"v":[[-67.624,-74.46],[-60.836,-50.411],[-55.453,11.567],[-9.899,64.62],[54.789,47.744],[37.918,-12.56],[2.322,-69.611],[-7.677,-82.077]],"c":true}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"fl","c":{"a":0,"k":[0.5221,0.6538,0.9379,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[692.302,244.019],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 11","np":3,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false,"_render":true}],"ip":0,"op":1798.00007323404,"st":0,"bm":0,"completed":true},{"ddd":0,"ind":4,"ty":4,"nm":"arms/boxgirl2 Outlines","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":7,"s":[-18],"__fnct":[null]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":13.824,"s":[0],"__fnct":[null]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":21,"s":[-18],"__fnct":[null]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":27,"s":[0],"__fnct":[null]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":37,"s":[-18],"__fnct":[null]},{"t":54.0000021994651,"s":[-18]}],"ix":10},"p":{"a":0,"k":[506.439,444.242,0],"ix":2},"a":{"a":0,"k":[534.439,398.222,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[6.169,-3.407],[3.407,6.169],[-6.168,3.407],[-3.407,-6.169]],"o":[[6.169,3.407],[-3.407,6.169],[-6.168,-3.407],[3.407,-6.169]],"v":[[6.169,0],[0,6.169],[-6.168,0],[0,-6.169]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[632.081,461.246],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":7,"s":[{"i":[[-38.207,26.791],[15.561000000000003,30.099],[76.72500000000001,31.052999999999997]],"o":[[-12.919,19.393],[74.176,34.041],[87.513,-6.807]],"v":[[-38.207,26.791],[38.078,30.823],[87.513,-6.807]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":14,"s":[{"i":[[-38.207,26.791],[15.318999999999999,22.708000000000002],[18.337,0.0779999999999994]],"o":[[-12.919,19.393],[20.904,7.313000000000002],[21.086,-17.93]],"v":[[-38.207,26.791],[38.207,35.761],[21.086,-17.93]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":21,"s":[{"i":[[-38.207,26.791],[15.561000000000003,30.099],[76.72500000000001,31.052999999999997]],"o":[[-12.919,19.393],[74.176,34.041],[87.513,-6.807]],"v":[[-38.207,26.791],[38.078,30.823],[87.513,-6.807]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":27.176,"s":[{"i":[[-38.207,26.791],[15.318999999999999,22.708000000000002],[18.337,0.0779999999999994]],"o":[[-12.919,19.393],[20.904,7.313000000000002],[21.086,-17.93]],"v":[[-38.207,26.791],[38.207,35.761],[21.086,-17.93]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":37,"s":[{"i":[[-38.207,26.791],[15.561000000000003,30.099],[76.72500000000001,31.052999999999997]],"o":[[-12.919,19.393],[74.176,34.041],[87.513,-6.807]],"v":[[-38.207,26.791],[38.078,30.823],[87.513,-6.807]],"c":false}]},{"t":54.0000021994651,"s":[{"i":[[-38.207,26.791],[15.561000000000003,30.099],[76.72500000000001,31.052999999999997]],"o":[[-12.919,19.393],[74.176,34.041],[87.513,-6.807]],"v":[[-38.207,26.791],[38.078,30.823],[87.513,-6.807]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[636.453,358.075],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-34.042,-55.116],[-26.754,-55.077000000000005],[-13.267999999999999,-37.167],[-20.535999999999998,-9.768],[-29.046,18.156999999999996],[-28.105,26.975],[-4.29,45.054],[34.043,-18.987000000000002]],"o":[[-30.499000000000002,-55.652],[-15.787000000000003,-47.982],[-16.053,-18.372999999999998],[-27.043,8.082],[-27.997,28.159],[-27.687,37.533],[13.969999999999999,19.922000000000004],[14.035,-54.499]],"v":[[-34.042,-55.116],[-23.763,-53.142],[-14.661,-27.77],[-23.79,-0.843],[-27.997,28.159],[-28.105,26.975],[6.752,55.652],[14.035,-54.499]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"fl","c":{"a":0,"k":[0.5632,0.6878,0.9568,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[635.71,439.352],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 3","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-19.251,-20.715],[19.252,-11.749],[12.525,20.715],[-9.779,13.975]],"o":[[-19.251,-20.715],[19.252,-11.749],[12.525,20.715],[-9.779,13.975]],"v":[[-19.251,-20.715],[19.252,-11.749],[12.525,20.715],[-9.779,13.975]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":3,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"fl","c":{"a":0,"k":[0.88,0.918,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[617.497,415.331],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 4","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[55.805,-7.473],[11.559,-17.777],[-4.366,-29.569],[-16.451,-29.727],[-47.911,-37.771],[-33.007,37.771],[56.886,25.512]],"o":[[55.805,-7.473],[11.559,-17.777],[-9.364999999999998,-33.269999999999996],[-16.488,-23.507],[-56.886,4.811999999999999],[1.026,8.632],[56.886,25.512]],"v":[[55.805,-7.473],[11.559,-17.777],[-4.366,-29.569],[-16.488,-23.507],[-52.904,-14.08],[1.026,8.632],[56.886,25.512]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"fl","c":{"a":0,"k":[0.94,0.959,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[554.414,404.877],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 5","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-16.19,-29.242],[-2.2809999999999997,-43.230000000000004],[16.19,-22.095],[8.922,5.3039999999999985],[0.41200000000000014,33.229],[-5.502,15.172]],"o":[[-15.619000000000002,-38.724000000000004],[13.67,-32.909],[13.404,-3.3019999999999996],[2.414,23.154],[-1.5210000000000001,32.20099999999999],[-8.484,4.143]],"v":[[-16.19,-29.242],[5.695,-38.07],[14.797,-12.698],[5.668,14.229],[1.461,43.23],[-8.484,4.143]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"fl","c":{"a":0,"k":[0.2353,0.4667,0.9843,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[606.252,424.28],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 6","np":3,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":7,"s":[{"i":[[63.279,-99.083],[69.19600000000001,90.923],[-48.309,74.336]],"o":[[140.729,-33.355000000000004],[-24.338,80.07],[-65.557,72.343]],"v":[[63.279,-99.083],[-7.091,82.071],[-65.557,72.343]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":14,"s":[{"i":[[-26.996,-99.139],[65.55699999999999,92.606],[-48.309,74.336]],"o":[[56.043000000000006,-73.076],[-36.681,86.729],[-65.557,72.343]],"v":[[-26.996,-99.139],[-19.347,87.726],[-65.557,72.343]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":21,"s":[{"i":[[63.279,-99.083],[69.19600000000001,90.923],[-48.309,74.336]],"o":[[140.729,-33.355000000000004],[-24.338,80.07],[-65.557,72.343]],"v":[[63.279,-99.083],[-7.091,82.071],[-65.557,72.343]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.167,"y":0},"t":27,"s":[{"i":[[-46.273,-107.574],[65.55699999999999,92.606],[-48.309,74.336]],"o":[[41.95799999999999,-100.755],[-36.681,86.729],[-65.557,72.343]],"v":[[-46.273,-107.574],[-19.347,87.726],[-65.557,72.343]],"c":false}]},{"i":{"x":0.833,"y":1},"o":{"x":0.333,"y":0},"t":37,"s":[{"i":[[63.279,-99.083],[69.19600000000001,90.923],[-48.309,74.336]],"o":[[140.729,-33.355000000000004],[-24.338,80.07],[-65.557,72.343]],"v":[[63.279,-99.083],[-7.091,82.071],[-65.557,72.343]],"c":false}]},{"t":54.0000021994651,"s":[{"i":[[63.279,-99.083],[69.19600000000001,90.923],[-48.309,74.336]],"o":[[140.729,-33.355000000000004],[-24.338,80.07],[-65.557,72.343]],"v":[[63.279,-99.083],[-7.091,82.071],[-65.557,72.343]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"fl","c":{"a":0,"k":[0.5632,0.6878,0.9568,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[717.313,386.909],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 7","np":3,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false,"_render":true}],"ip":0,"op":1798.00007323404,"st":0,"bm":0,"completed":true},{"ddd":0,"ind":5,"ty":4,"nm":"BOX/boxgirl2 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":7,"s":[-11],"__fnct":[null]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":14.961,"s":[0],"__fnct":[null]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":21.216,"s":[-11],"__fnct":[null]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":26.903,"s":[0],"__fnct":[null]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":36.569,"s":[-11],"__fnct":[null]},{"t":76.0000030955435,"s":[-11]}],"ix":10},"p":{"s":true,"x":{"a":0,"k":497.232,"ix":3},"y":{"a":1,"k":[{"i":{"x":[0.525],"y":[0.999]},"o":{"x":[0.167],"y":[0.012]},"t":7,"s":[534.782],"__fnct":[null]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.714],"y":[-0.001]},"t":14.961,"s":[473.393],"__fnct":[null]},{"i":{"x":[0.086],"y":[1.001]},"o":{"x":[0.333],"y":[0]},"t":20.648,"s":[554.791],"__fnct":[null]},{"i":{"x":[0.345],"y":[1.257]},"o":{"x":[0.475],"y":[0.001]},"t":26.903,"s":[484.088],"__fnct":[null]},{"i":{"x":[0.058],"y":[8.039]},"o":{"x":[0.207],"y":[-15.641]},"t":37.138,"s":[534.782],"__fnct":[null]},{"t":76.0000030955435,"s":[534.782]}],"ix":4}},"a":{"a":0,"k":[572.5,586.5,0],"ix":1},"s":{"a":0,"k":[83,83,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[6.609,2.7120000000000033],[-8.285,42.896],[-2.262,-43.63],[8.286,-42.896]],"o":[[2.264,43.63],[-2.4910000000000005,2.4909999999999997],[-2.262,-43.63],[8.286,-42.896]],"v":[[2.264,43.63],[-8.285,42.896],[-2.262,-43.63],[8.286,-42.896]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[307.842,426.297],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0.841,-83.44],[2.61,83.441]],"o":[[0.841,-83.44],[-2.611,82.013]],"v":[[0.841,-83.44],[-2.611,82.013]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[306.142,427.058],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-112.026,3.123],[42.03399999999999,-2.109]],"o":[[-42.033,2.109],[112.026,-3.123]],"v":[[-112.026,3.123],[112.026,-3.123]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[477.19,351.902],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-56.581,-95.724],[17.612000000000002,-78.46499999999999],[54.133,32.857000000000006]],"o":[[-14.921000000000006,-86.63900000000001],[54.760000000000005,-9.606999999999992],[52.313,95.724]],"v":[[-56.581,-95.724],[56.581,-72.475],[52.313,95.724]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"fl","c":{"a":0,"k":[0,0.3167,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[308.254,427.051],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 4","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-58.843,-95.902],[96.32,-90.894],[151.082,16.786],[9.390999999999998,96.907],[-126.993,76.826],[-161.34300000000002,-57.053000000000004]],"o":[[49.659000000000006,-83.102],[155.906,-27.889000000000003],[93.44999999999999,102.303],[-102.195,82.337],[-162.40699999999998,1.0829999999999984],[-123.763,-102.302]],"v":[[-15.044,-99.102],[169.981,-81.65],[161.058,90.364],[-59.207,94.101],[-169.981,65.062],[-167.562,-99.102]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"fl","c":{"a":0,"k":[0,0.3167,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[419.236,430.43],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 5","np":3,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[81.443,-11.521],[76.766,29.972],[14.717999999999996,29.973],[-34.679,-14.004000000000001]],"o":[[75.562,16.718999999999998],[23.845999999999997,39.096000000000004],[-32.872,-18.823],[-29.331,-40.56]],"v":[[81.443,-11.521],[72.476,56.222],[-39.877,9.497],[-29.331,-40.56]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":17.235,"s":[{"i":[[81.443,-11.521],[76.766,29.972],[14.717999999999996,29.972],[-34.679,-14.004000000000001]],"o":[[75.562,16.718999999999998],[23.845999999999997,39.096000000000004],[-32.872,-18.823],[-29.331,-40.56]],"v":[[81.443,-11.521],[72.476,56.222],[-39.877,9.497],[-29.331,-40.56]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[81.443,-11.521],[50.298,-12.889000000000001],[-23.436999999999998,-29.824],[-53.312,-35.891000000000005]],"o":[[55.669,-15.620000000000001],[-16.669000000000004,-29.583000000000002],[-51.86,-44.198],[-29.331,-40.56]],"v":[[81.443,-11.521],[31.961,-12.457],[-76.764,-40.908],[-29.331,-40.56]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22.921,"s":[{"i":[[81.443,-11.521],[76.766,29.972],[14.717999999999996,29.973],[-34.679,-14.004000000000001]],"o":[[75.562,16.718999999999998],[23.845999999999997,39.096000000000004],[-32.872,-18.823],[-29.331,-40.56]],"v":[[81.443,-11.521],[72.476,56.222],[-39.877,9.497],[-29.331,-40.56]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.608,"s":[{"i":[[81.443,-11.521],[76.766,29.972],[14.717999999999996,29.973],[-34.679,-14.004000000000001]],"o":[[75.562,16.718999999999998],[23.845999999999997,39.096000000000004],[-32.872,-18.823],[-29.331,-40.56]],"v":[[81.443,-11.521],[72.476,56.222],[-39.877,9.497],[-29.331,-40.56]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[81.443,-11.521],[50.298,-12.889000000000001],[-23.436999999999998,-29.825],[-53.312,-35.891000000000005]],"o":[[55.669,-15.620000000000001],[-16.669000000000004,-29.583000000000002],[-51.86,-44.199],[-29.331,-40.56]],"v":[[81.443,-11.521],[31.961,-12.457],[-76.764,-40.909],[-29.331,-40.56]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[81.443,-11.521],[76.766,29.972],[14.717999999999996,29.973],[-34.679,-14.004000000000001]],"o":[[75.562,16.718999999999998],[23.845999999999997,39.096000000000004],[-32.872,-18.823],[-29.331,-40.56]],"v":[[81.443,-11.521],[72.476,56.222],[-39.877,9.497],[-29.331,-40.56]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":62,"s":[{"i":[[81.443,-11.521],[73.68900000000001,29.584],[14.717999999999996,29.973],[-34.679,-14.004000000000001]],"o":[[75.562,16.718999999999998],[19.764000000000003,37.995999999999995],[-32.872,-18.823],[-29.331,-40.56]],"v":[[81.443,-11.521],[68.394,55.122],[-39.877,9.497],[-29.331,-40.56]],"c":false}]},{"t":77.0000031362743,"s":[{"i":[[81.443,-11.521],[76.766,29.972],[14.717999999999996,29.973],[-34.679,-14.004000000000001]],"o":[[75.562,16.718999999999998],[23.845999999999997,39.096000000000004],[-32.872,-18.823],[-29.331,-40.56]],"v":[[81.443,-11.521],[72.476,56.222],[-39.877,9.497],[-29.331,-40.56]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"fl","c":{"a":0,"k":[0,0.3167,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[278.586,536.051],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 6","np":3,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":0,"s":[{"i":[[96.352,-34.341],[103.138,0.0519999999999996],[-29.39099999999999,34.992000000000004],[-114.33099999999999,-1.931000000000001]],"o":[[98.29,-13.144000000000002],[26.03,33.185],[-117.343,13.732000000000003],[-118.704,-27.565]],"v":[[96.352,-34.341],[106.656,24.809],[-115.038,40.968],[-118.704,-27.565]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":8,"s":[{"i":[[96.353,-34.341],[102.80799999999999,2.7590000000000003],[-24.644999999999996,35.827999999999996],[-114.33099999999999,-1.931000000000001]],"o":[[98.291,-13.144000000000002],[29.58999999999999,33.812],[-112.59700000000001,14.566999999999997],[-118.704,-27.565]],"v":[[96.353,-34.341],[110.216,25.436],[-110.292,41.803],[-118.704,-27.565]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":16.666,"s":[{"i":[[96.353,-34.341],[103.138,0.0519999999999996],[-29.39099999999999,34.993],[-114.33099999999999,-1.931000000000001]],"o":[[98.291,-13.144000000000002],[26.03,33.185],[-117.343,13.732000000000003],[-118.704,-27.565]],"v":[[96.353,-34.341],[106.656,24.809],[-115.038,40.968],[-118.704,-27.565]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[96.353,-34.341],[106.97300000000001,-24.811],[15.943999999999988,-2.248],[-99.317,-13.166000000000002]],"o":[[109.91199999999999,-20.628],[52.691,-2.850999999999999],[-100.533,-9.71],[-118.704,-27.565]],"v":[[96.353,-34.341],[136.329,-10.87],[-68.498,3.481],[-118.704,-27.565]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":22.921,"s":[{"i":[[96.352,-34.341],[103.138,0.0519999999999996],[-29.39099999999999,34.992000000000004],[-114.33099999999999,-1.931000000000001]],"o":[[98.29,-13.144000000000002],[26.03,33.185],[-117.343,13.732000000000003],[-118.704,-27.565]],"v":[[96.352,-34.341],[106.656,24.809],[-115.038,40.968],[-118.704,-27.565]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":28.608,"s":[{"i":[[96.352,-34.341],[103.138,0.0519999999999996],[-29.39099999999999,34.992000000000004],[-114.33099999999999,-1.931000000000001]],"o":[[98.29,-13.144000000000002],[26.03,33.185],[-117.343,13.732000000000003],[-118.704,-27.565]],"v":[[96.352,-34.341],[106.656,24.809],[-115.038,40.968],[-118.704,-27.565]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":31,"s":[{"i":[[96.353,-34.341],[106.97300000000001,-24.811],[15.943999999999988,-2.248],[-99.317,-13.166000000000002]],"o":[[109.91199999999999,-20.628],[52.691,-2.850999999999999],[-100.533,-9.71],[-118.704,-27.565]],"v":[[96.353,-34.341],[136.329,-10.87],[-68.498,3.481],[-118.704,-27.565]],"c":false}]},{"i":{"x":0.667,"y":1},"o":{"x":0.167,"y":0.167},"t":46,"s":[{"i":[[96.352,-34.341],[103.138,0.0519999999999996],[-29.39099999999999,34.992000000000004],[-114.33099999999999,-1.931000000000001]],"o":[[98.29,-13.144000000000002],[26.03,33.185],[-117.343,13.732000000000003],[-118.704,-27.565]],"v":[[96.352,-34.341],[106.656,24.809],[-115.038,40.968],[-118.704,-27.565]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":52,"s":[{"i":[[96.352,-34.341],[87.83699999999999,0.8170000000000002],[-42.516000000000005,33.054],[-124.00899999999999,-1.6990000000000016]],"o":[[91.988,-14.233],[2.8699999999999903,32.365],[-124.995,12.838000000000001],[-118.704,-27.565]],"v":[[96.352,-34.341],[83.496,23.989],[-128.163,39.03],[-118.704,-27.565]],"c":false}]},{"t":77.0000031362743,"s":[{"i":[[96.352,-34.341],[103.138,0.0519999999999996],[-29.39099999999999,34.992000000000004],[-114.33099999999999,-1.931000000000001]],"o":[[98.29,-13.144000000000002],[26.03,33.185],[-117.343,13.732000000000003],[-118.704,-27.565]],"v":[[96.352,-34.341],[106.656,24.809],[-115.038,40.968],[-118.704,-27.565]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"fl","c":{"a":0,"k":[0,0.3167,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[483.54,552.116],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 7","np":3,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false,"_render":true}],"ip":0,"op":1798.00007323404,"st":0,"bm":0,"completed":true},{"ddd":0,"ind":6,"ty":4,"nm":"Legs/boxgirl2 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[477.2320000000001,513.782,0],"ix":2},"a":{"a":0,"k":[572.5,586.5,0],"ix":1},"s":{"a":0,"k":[83,83,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-48.474,-30.191],[-58.521,-17.664],[-15.118,20.055],[33.069,30.191000000000003]],"o":[[-53.916999999999994,-24.621],[-55.75,10.007],[12.83,26.966],[58.521,27.626]],"v":[[-48.474,-30.191],[-57.779,-10.254],[-0.625,23.639],[58.521,27.626]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"fl","c":{"a":0,"k":[0.94,0.959,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[647.342,989.901],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-11.624,-6.953],[3.5600000000000005,6.953]],"o":[[-11.624,-6.953],[11.624,1.731]],"v":[[-11.624,-6.953],[11.624,1.731]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"fl","c":{"a":0,"k":[0.94,0.959,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[618.704,1014.636],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 2","np":3,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-66.997,10.39],[-73.244,7.593],[-73.244,-10.39],[-70.416,-10.39],[73.244,-10.39],[73.244,4.143],[70.447,10.39]],"o":[[-70.447,10.39],[-73.244,4.143],[-73.244,-10.39],[-70.416,-10.39],[73.244,-10.39],[73.244,7.593],[66.997,10.39]],"v":[[-66.997,10.39],[-73.244,4.143],[-73.244,-10.39],[-70.416,-10.39],[73.244,-10.39],[73.244,4.143],[66.997,10.39]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"fl","c":{"a":0,"k":[0.94,0.959,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[630.328,1057.988],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 3","np":3,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[74.419,-1.574],[75.315,23.542],[-68.346,23.542],[-72.36399999999999,18.759999999999998],[-70.87700000000001,0.798],[-21.177,-16.372],[-11.369,-23.542]],"o":[[74.419,-1.574],[75.315,23.542],[-70.90700000000001,21.297],[-75.315,8.691999999999998],[-63.465,-1.762],[-21.177,-16.372],[-11.369,-23.542]],"v":[[74.419,-1.574],[75.315,23.542],[-68.346,23.542],[-73.109,16.217],[-63.465,-1.762],[-21.177,-16.372],[-11.369,-23.542]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"fl","c":{"a":0,"k":[0.94,0.959,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[628.258,1024.055],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 4","np":3,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-30.309,-32.271],[-60.321,-7.144],[-13.7,26.514],[35.20399999999999,32.271]],"o":[[-30.309,-11.495000000000001],[-55.07,20.163999999999998],[14.757000000000001,30.881],[60.321,27.425]],"v":[[-30.309,-32.271],[-58.915,0.168],[1.056,28.779],[60.321,27.425]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[561.487,975.205],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 5","np":2,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-11.967,-6.242],[4.407,6.242]],"o":[[-11.967,-6.242],[11.968,0.315]],"v":[[-11.967,-6.242],[11.968,0.315]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[519.21,1005.327],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 6","np":2,"cix":2,"bm":0,"ix":6,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[74.051,5],[71.843,-16.903],[-74.051,-3.715],[-72.448,10.933],[-69.1,16.903]],"o":[[74.051,5],[71.843,-16.903],[-74.051,-3.715],[-72.13699999999999,14.369],[-65.663,16.593]],"v":[[74.051,5],[71.843,-16.903],[-74.051,-3.715],[-72.448,10.933],[-65.663,16.593]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[535.094,1047.055],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 7","np":2,"cix":2,"bm":0,"ix":7,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[1.577,12.468],[-1.576,-12.468]],"o":[[1.577,12.468],[-1.576,-12.468]],"v":[[1.577,12.468],[-1.576,-12.468]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[605.36,1017.685],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 8","np":2,"cix":2,"bm":0,"ix":8,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[30.393,-26.012],[21.269,-17.987],[-19.532,0.37],[-30.392999999999997,11.847000000000001],[-24.867,24.007]],"o":[[30.393,-26.012],[21.269,-17.987],[-26.683,3.588],[-26.548,21.61],[-22.114,26.012]],"v":[[30.393,-26.012],[21.269,-17.987],[-19.532,0.37],[-27.519,19.143],[-22.114,26.012]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[485.974,1017.073],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 9","np":2,"cix":2,"bm":0,"ix":9,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.98,"s":[{"i":[[-9.493,-158.357],[6.052,52.786]],"o":[[-28.197000000000003,-46.14],[9.494,158.357]],"v":[[-9.493,-158.357],[9.494,158.357]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.393,"s":[{"i":[[-9.493,-158.357],[6.052,52.786]],"o":[[-6.051,-52.786],[9.494,158.357]],"v":[[-9.493,-158.357],[9.494,158.357]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20.648,"s":[{"i":[[-9.493,-158.357],[6.052,52.786]],"o":[[-28.197000000000003,-46.14],[9.494,158.357]],"v":[[-9.493,-158.357],[9.494,158.357]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.765,"s":[{"i":[[-9.493,-158.357],[6.052,52.786]],"o":[[-6.051,-52.786],[9.494,158.357]],"v":[[-9.493,-158.357],[9.494,158.357]],"c":false}]},{"t":32.588751327367,"s":[{"i":[[-9.493,-158.357],[6.052,52.786]],"o":[[-28.197000000000003,-46.14],[9.494,158.357]],"v":[[-9.493,-158.357],[9.494,158.357]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[519.695,753.384],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 10","np":2,"cix":2,"bm":0,"ix":10,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.98,"s":[{"i":[[2.06,-160.308],[9.141,55.657]],"o":[[-9.141,-51.699],[6.06,160.309]],"v":[[2.06,-160.308],[6.06,160.309]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.393,"s":[{"i":[[2.06,-160.308],[9.141,55.657]],"o":[[7.302,-54.150999999999996],[6.06,160.309]],"v":[[2.06,-160.308],[6.06,160.309]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20.648,"s":[{"i":[[2.06,-160.308],[9.141,55.657]],"o":[[-9.141,-51.699],[6.06,160.309]],"v":[[2.06,-160.308],[6.06,160.309]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.765,"s":[{"i":[[2.06,-160.308],[9.141,55.657]],"o":[[7.302,-54.15199999999999],[6.06,160.309]],"v":[[2.06,-160.308],[6.06,160.309]],"c":false}]},{"t":32.588751327367,"s":[{"i":[[2.06,-160.308],[9.141,55.657]],"o":[[-9.141,-51.699],[6.06,160.309]],"v":[[2.06,-160.308],[6.06,160.309]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[591.424,810.794],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 11","np":2,"cix":2,"bm":0,"ix":11,"mn":"ADBE Vector Group","hd":false,"_render":true},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.98,"s":[{"i":[[12.646,-187.238],[-0.7970000000000006,80.96]],"o":[[-21.131,-95.752],[21.131,187.238]],"v":[[12.646,-187.238],[21.131,187.238]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.393,"s":[{"i":[[12.646,-187.238],[10.471,78.756]],"o":[[8.061,-94.738],[21.131,187.238]],"v":[[12.646,-187.238],[21.131,187.238]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20.648,"s":[{"i":[[12.646,-187.238],[-0.7970000000000006,80.96]],"o":[[-21.131,-95.752],[21.131,187.238]],"v":[[12.646,-187.238],[21.131,187.238]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.765,"s":[{"i":[[12.646,-187.238],[10.471,78.756]],"o":[[8.061,-94.738],[21.131,187.238]],"v":[[12.646,-187.238],[21.131,187.238]],"c":false}]},{"t":32.588751327367,"s":[{"i":[[12.646,-187.238],[-0.7970000000000006,80.96]],"o":[[-21.131,-95.752],[21.131,187.238]],"v":[[12.646,-187.238],[21.131,187.238]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[685.846,756.199],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 12","np":2,"cix":2,"bm":0,"ix":12,"mn":"ADBE Vector Group","hd":false,"_render":true}],"ip":0,"op":1798.00007323404,"st":0,"bm":0,"completed":true},{"ddd":0,"ind":7,"ty":4,"nm":"Body/boxgirl2 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":10.98,"s":[477.2320000000001,513.782,0],"to":null,"ti":null},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":14.393,"s":[477.2320000000001,506.78200000000004,0],"to":null,"ti":null},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20.648,"s":[477.2320000000001,513.782,0],"to":null,"ti":null},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":25.765,"s":[477.2320000000001,506.78200000000004,0],"to":null,"ti":null},{"t":32.588751327367,"s":[477.2320000000001,513.782,0]}],"ix":2},"a":{"a":0,"k":[572.5,586.5,0],"ix":1},"s":{"a":0,"k":[83,83,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":11,"s":[{"i":[[132.53,-11.826],[159.30499999999998,87.824],[126.691,131.893],[50.889,113.17],[-155.983,138.43399999999997],[-17.374,-144.415],[23.696,-102.197],[71.999,-130.707],[108.833,-143.035]],"o":[[138.89600000000002,6.579999999999998],[163.196,127.087],[70.292,117.933],[-0.019,112.697],[-37.274,-100.093],[-1.019,-144.415],[23.696,-102.197],[90.52099999999999,-143.45499999999998],[125.265,-134.421]],"v":[[132.53,-11.826],[161.147,106.417],[106.529,126.902],[-0.019,112.697],[-47.61,-79.325],[-1.019,-144.415],[23.696,-102.197],[71.999,-130.707],[125.265,-134.421]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":15,"s":[{"i":[[132.53,-11.826],[159.30499999999998,87.824],[126.691,131.893],[50.889,113.17],[-180.063,125.13700000000001],[-17.374,-144.415],[23.696,-102.197],[71.999,-130.707],[108.833,-143.035]],"o":[[138.89600000000002,6.579999999999998],[163.196,127.087],[70.292,117.933],[-0.019,112.697],[-66.09899999999999,-137.961],[-1.019,-144.415],[23.696,-102.197],[90.52099999999999,-143.45499999999998],[125.265,-134.421]],"v":[[132.53,-11.826],[161.147,106.417],[106.529,126.902],[-0.019,112.697],[-75.32,-116.675],[-1.019,-144.415],[23.696,-102.197],[71.999,-130.707],[125.265,-134.421]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":20,"s":[{"i":[[132.53,-11.826],[159.30499999999998,87.824],[126.691,131.893],[50.889,113.17],[-155.983,128.795],[-17.374,-144.415],[23.696,-102.197],[71.999,-130.707],[108.833,-143.035]],"o":[[138.89600000000002,6.579999999999998],[163.196,127.087],[70.292,117.933],[-0.019,112.697],[-37.274,-109.732],[-1.019,-144.415],[23.696,-102.197],[90.52099999999999,-143.45499999999998],[125.265,-134.421]],"v":[[132.53,-11.826],[161.147,106.417],[106.529,126.902],[-0.019,112.697],[-47.61,-88.964],[-1.019,-144.415],[23.696,-102.197],[71.999,-130.707],[125.265,-134.421]],"c":false}]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":26,"s":[{"i":[[132.53,-11.826],[159.30499999999998,87.824],[126.691,131.893],[50.889,113.17],[-171.645,111.92799999999998],[-17.374,-144.415],[23.696,-102.197],[71.999,-130.707],[108.833,-143.035]],"o":[[138.89600000000002,6.579999999999998],[163.196,127.087],[70.292,117.933],[-0.019,112.697],[-52.936,-126.599],[-1.019,-144.415],[23.696,-102.197],[90.52099999999999,-143.45499999999998],[125.265,-134.421]],"v":[[132.53,-11.826],[161.147,106.417],[106.529,126.902],[-0.019,112.697],[-63.272,-105.831],[-1.019,-144.415],[23.696,-102.197],[71.999,-130.707],[125.265,-134.421]],"c":false}]},{"t":33.0000013441176,"s":[{"i":[[132.53,-11.826],[159.30499999999998,87.824],[126.691,131.893],[50.889,113.17],[-155.983,138.43399999999997],[-17.374,-144.415],[23.696,-102.197],[71.999,-130.707],[108.833,-143.035]],"o":[[138.89600000000002,6.579999999999998],[163.196,127.087],[70.292,117.933],[-0.019,112.697],[-37.274,-100.093],[-1.019,-144.415],[23.696,-102.197],[90.52099999999999,-143.45499999999998],[125.265,-134.421]],"v":[[132.53,-11.826],[161.147,106.417],[106.529,126.902],[-0.019,112.697],[-47.61,-79.325],[-1.019,-144.415],[23.696,-102.197],[71.999,-130.707],[125.265,-134.421]],"c":false}]}],"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"st","c":{"a":0,"k":[0,0.1267,0.4,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":5,"ix":5},"lc":2,"lj":1,"ml":10,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false,"_render":true},{"ty":"fl","c":{"a":0,"k":[0.5632,0.6878,0.9568,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[559.529,428.725],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"_render":true}],"ip":0,"op":1798.00007323404,"st":0,"bm":0,"completed":true},{"ddd":0,"ind":8,"ty":4,"nm":"Layer 8/boxgirl2 Outlines","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[477.2320000000001,513.782,0],"ix":2},"a":{"a":0,"k":[572.5,586.5,0],"ix":1},"s":{"a":0,"k":[83,83,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-116.236,-550.8929999999999],[-269.867,-440.473],[-231.303,-284.373],[-264.719,-85.20800000000001],[-366.109,319.10799999999995],[45.461,532.296],[71.05199999999999,214.332],[302.66700000000003,-26.977999999999994],[350.387,-318.394],[143.66400000000002,-382.35200000000003]],"o":[[-219.65300000000002,-519.029],[-276.299,-298.66],[-219.17499999999998,-129.882],[-347.199,119.33],[-180.78499999999997,550.893],[176.183,326.85400000000004],[198.876,-41.914],[366.10900000000004,-219.02100000000002],[231.714,-463.56100000000004],[-91.67,-511.58000000000004]],"v":[[-164.114,-536.141],[-273.101,-369.18],[-225.408,-209.28],[-297.757,-3.278],[-280.381,426.328],[113.978,424.615],[140.88,74.349],[340.696,-142.095],[303.58,-375.651],[-19.035,-471.694]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false,"_render":true},{"ty":"fl","c":{"a":0,"k":[0.94,0.959,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false,"_render":true},{"ty":"tr","p":{"a":0,"k":[655.005,614.237],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform","_render":true}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false,"_render":true}],"ip":0,"op":1798.00007323404,"st":0,"bm":0,"completed":true}],"markers":[],"__complete":true} \ No newline at end of file +{ + "v": "4.8.0", + "meta": { "g": "LottieFiles AE 1.1.0", "a": "", "k": "", "d": "", "tc": "" }, + "fr": 30, + "ip": 0, + "op": 77, + "w": 1000, + "h": 1000, + "nm": "Comp 1", + "ddd": 0, + "assets": [], + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "Shape Layer 2", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [480, 505.99999999999994, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-142, 44], + [-98, 110], + [-318, 28], + [-207.607, 328.098], + [-164, 184], + [-384, 353], + [-387, 39] + ], + "o": [ + [-142, 44], + [-169.454, 162.28300000000002], + [-386, 184], + [-120, 280], + [-265.995, 293.645], + [-242.43, -15.879999999999995], + [-439, 95] + ], + "v": [ + [-142, 44], + [-139, 140], + [-352, 106], + [-171, 308], + [-204, 227], + [-313, 168], + [-413, 67] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 2, "ix": 5 }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "d": [ + { "n": "d", "nm": "dash", "v": { "a": 0, "k": 30, "ix": 1 } }, + { "n": "g", "nm": "gap", "v": { "a": 0, "k": 1369, "ix": 2 } }, + { + "n": "o", + "nm": "offset", + "v": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 32, + "s": [103], + "__fnct": [null] + }, + { "t": 70.0000028511585, "s": [-1303] } + ], + "ix": 7 + } + } + ], + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + } + ], + "ip": 22.0000008960784, + "op": 1810.00007372281, + "st": 12.00000048877, + "bm": 0, + "completed": true + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "Shape Layer 1", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [500, 500, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-142, 44], + [-98, 110], + [-318, 28], + [-207.607, 328.098], + [-164, 184], + [-384, 353], + [-387, 39] + ], + "o": [ + [-142, 44], + [-169.454, 162.28300000000002], + [-386, 184], + [-120, 280], + [-265.995, 293.645], + [-242.43, -15.879999999999995], + [-439, 95] + ], + "v": [ + [-142, 44], + [-139, 140], + [-352, 106], + [-171, 308], + [-204, 227], + [-313, 168], + [-413, 67] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 2, "ix": 5 }, + "lc": 1, + "lj": 1, + "ml": 4, + "bm": 0, + "d": [ + { "n": "d", "nm": "dash", "v": { "a": 0, "k": 12, "ix": 1 } }, + { "n": "g", "nm": "gap", "v": { "a": 0, "k": 1369, "ix": 2 } }, + { + "n": "o", + "nm": "offset", + "v": { + "a": 1, + "k": [ + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 20, + "s": [103], + "__fnct": [null] + }, + { "t": 58.0000023623884, "s": [-1303] } + ], + "ix": 7 + } + } + ], + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Shape 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + } + ], + "ip": 22.0000008960784, + "op": 1798.00007323404, + "st": 0, + "bm": 0, + "completed": true + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "head/boxgirl2 Outlines", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 9, + "s": [0], + "__fnct": [null] + }, + { + "i": { "x": [0.833], "y": [0.833] }, + "o": { "x": [0.167], "y": [0.167] }, + "t": 45, + "s": [-5], + "__fnct": [null] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 50, + "s": [-5], + "__fnct": [null] + }, + { "t": 75.0000030548126, "s": [0] } + ], + "ix": 10 + }, + "p": { "a": 0, "k": [504.173, 279.4, 0], "ix": 2 }, + "a": { "a": 0, "k": [615.874, 302.163, 0], "ix": 1 }, + "s": { "a": 0, "k": [83, 83, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [3.318, -1.01], + [-1.033, -1.01], + [-1.5230000000000001, -0.857], + [-2.355, -0.29700000000000004], + [-3.083, 0.40700000000000003], + [-3.318, 1.01], + [1.032, 1.01], + [1.5230000000000001, 0.858], + [2.355, 0.29700000000000004], + [3.083, -0.40800000000000003] + ], + "o": [ + [3.115, -1.01], + [-1.264, -1.01], + [-2.033, -0.5509999999999999], + [-2.827, 0.174], + [-3.234, 0.785], + [-3.115, 1.01], + [1.264, 1.01], + [2.033, 0.5509999999999999], + [2.827, -0.174], + [3.234, -0.786] + ], + "v": [ + [3.115, -1.01], + [-1.033, -1.01], + [-1.711, -0.745], + [-2.621, -0.032], + [-3.193, 0.682], + [-3.115, 1.01], + [1.032, 1.01], + [1.711, 0.745], + [2.621, 0.031], + [3.193, -0.682] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [592.024, 140.01], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [5.084, -1.01], + [-2.561, -1.01], + [-3.7720000000000002, -0.40800000000000003], + [-5.084, 1.01], + [2.56, 1.01], + [3.7720000000000002, 0.40800000000000003] + ], + "o": [ + [4.643, -1.01], + [-3.1319999999999997, -1.01], + [-4.235, 0.053000000000000005], + [-4.643, 1.01], + [3.132, 1.01], + [4.234, -0.053000000000000005] + ], + "v": [ + [4.643, -1.01], + [-2.561, -1.01], + [-4.149, -0.032], + [-4.643, 1.01], + [2.56, 1.01], + [4.149, 0.032] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [589.932, 134.862], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 2", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [2.772, -1.01], + [-0.487, -1.01], + [-0.978, -0.857], + [-1.81, -0.29700000000000004], + [-2.538, 0.40700000000000003], + [-2.7729999999999997, 1.01], + [0.486, 1.01], + [0.9770000000000001, 0.858], + [1.8090000000000002, 0.29700000000000004], + [2.537, -0.40800000000000003] + ], + "o": [ + [2.569, -1.01], + [-0.719, -1.01], + [-1.488, -0.5509999999999999], + [-2.282, 0.174], + [-2.6889999999999996, 0.785], + [-2.57, 1.01], + [0.718, 1.01], + [1.487, 0.552], + [2.281, -0.174], + [2.6879999999999997, -0.786] + ], + "v": [ + [2.569, -1.01], + [-0.487, -1.01], + [-1.165, -0.745], + [-2.076, -0.032], + [-2.647, 0.682], + [-2.57, 1.01], + [0.486, 1.01], + [1.165, 0.745], + [2.075, 0.032], + [2.647, -0.682] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [594.189, 130.405], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 3", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 3, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [2.801, -6.987], + [-1.301, -7.2940000000000005], + [-4.465, -3.311], + [2.381, -0.7919999999999998], + [1.0779999999999998, 4.202], + [-2.5759999999999996, 2.357], + [-5.6930000000000005, 2.3280000000000003], + [2.222, 6.802], + [5.319, -0.5130000000000001], + [1.815, -2.954], + [-1.187, -3.9110000000000005], + [-0.495, -5.009] + ], + "o": [ + [0.23199999999999998, -7.466], + [-3.714, -4.845000000000001], + [-1.4260000000000002, -0.5469999999999999], + [3.258, 3.98], + [-1.6340000000000001, 3.422], + [-3.387, 0.605], + [-3.314, 7.465999999999999], + [5.693, 1.4709999999999999], + [2.9050000000000002, -2.571], + [0.41800000000000004, -3.532], + [-1.38, -5.344], + [1.081, -4.716] + ], + "v": [ + [2.104, -7.117], + [-2.682, -5.892], + [-3.188, -2.149], + [2.92, 2.141], + [-0.213, 3.831], + [-3.175, 1.063], + [-5.296, 3.185], + [4.569, 3.198], + [3.753, -1.848], + [0.801, -3.374], + [-1.262, -4.469], + [0.261, -4.868] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [602.895, 136.398], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 4", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 4, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-6.716, -0.848], + [0.9320000000000004, 1.168] + ], + "o": [ + [-6.716, -0.848], + [6.716, -1.168] + ], + "v": [ + [-6.716, -0.848], + [6.716, -1.168] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.2353, 0.4667, 0.9843, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [605.021, 201.209], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 5", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 5, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-6.716, -2.008], + [0.9320000000000004, 2.008] + ], + "o": [ + [-6.716, -2.008], + [6.716, -0.328] + ], + "v": [ + [-6.716, -2.008], + [6.716, -0.328] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.2353, 0.4667, 0.9843, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [582.244, 200.369], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 6", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 6, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [22.043, 0.722], + [20.149, 0.266], + [-6.656000000000001, -16.256], + [-22.237000000000002, -0.14900000000000002], + [-8.729000000000001, 14.901], + [15.616999999999997, 14.252], + [19.248, 0.025] + ], + "o": [ + [21.08, 0.499], + [-2.001999999999999, -5.6739999999999995], + [-20.734, -8.834], + [-15.590000000000002, 11.676], + [4.767, 16.256], + [22.237, 12.775], + [19.248, 0.025] + ], + "v": [ + [22.043, 0.722], + [19.248, 0.025], + [-14.734, -11.997], + [-18.914, 5.764], + [-1.981, 15.578], + [22.237, 12.775], + [19.248, 0.025] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.2353, 0.4667, 0.9843, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [543.515, 174.404], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 7", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 7, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-72.745, 16.895], + [-29.706, 4.359], + [2.358999999999998, -45.148], + [80.24799999999999, -10.884], + [-19.215999999999998, 34.159], + [-64.667, 12.637], + [-80.248, 28.744], + [-66.74, 43.793], + [-42.394, 43.144], + [-38.763, 28.917] + ], + "o": [ + [-72.745, 16.895], + [-25.887999999999998, -23.289], + [57.803, -38.668], + [14.373999999999995, 35.269999999999996], + [-60.013, 23.218000000000004], + [-78.745, 20.058], + [-73.60100000000001, 40.568], + [-53.244, 45.147999999999996], + [-35.774, 41.668], + [-38.763, 28.917] + ], + "v": [ + [-72.745, 16.895], + [-29.706, 4.359], + [30.081, -41.908], + [77.588, 16.899], + [-38.763, 28.917], + [-72.745, 16.895], + [-76.924, 34.656], + [-59.992, 44.47], + [-35.774, 41.668], + [-38.763, 28.917] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.5632, 0.6878, 0.9568, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [601.526, 145.512], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 8", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 8, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-36.33, -25.893], + [-33.935, -14.556000000000001], + [-13.227, 25.703], + [32.913, 14.046] + ], + "o": [ + [-33.596, -12.952], + [-27.971, 13.673], + [18.022, 25.894], + [36.33, -1.201] + ], + "v": [ + [-36.33, -25.893], + [-31.201, -1.615], + [2.397, 25.799], + [36.33, -1.201] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [602.33, 214.252], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 9", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 9, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [5.451, -19.487], + [0.6400000000000006, 12.189999999999998] + ], + "o": [ + [4.526999999999999, -6.494999999999997], + [-5.451, 19.487] + ], + "v": [ + [5.451, -19.487], + [-5.451, 19.487] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [594.411, 259.908], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 10", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 10, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 4, + "s": [ + { + "i": [ + [-67.624, -74.46], + [-59.432, -64.406], + [-62.772000000000006, -11.378], + [-32.257, 55.667], + [41.224000000000004, 67.645], + [60.596000000000004, -4.450000000000001], + [1.633, -43.886], + [-1.9909999999999997, -80.972] + ], + "o": [ + [-60.32299999999999, -66.62599999999999], + [-63.241, -26.447000000000003], + [-48.133, 34.510999999999996], + [12.459000000000001, 73.57300000000001], + [68.354, 27.844], + [13.686999999999998, -21.225], + [2.477, -75.40100000000001], + [-13.363, -83.18299999999999] + ], + "v": [ + [-67.624, -74.46], + [-60.836, -50.411], + [-55.453, 11.567], + [-9.899, 64.62], + [54.789, 47.744], + [37.918, -12.56], + [2.322, -69.611], + [-7.677, -82.077] + ], + "c": true + } + ] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 34, + "s": [ + { + "i": [ + [-67.624, -74.46], + [-59.432, -64.406], + [-63.501000000000005, -1.7669999999999995], + [-32.986000000000004, 65.277], + [40.495000000000005, 77.256], + [59.867000000000004, 5.161], + [1.633, -43.886], + [-1.9909999999999997, -80.972] + ], + "o": [ + [-60.32299999999999, -66.62599999999999], + [-63.241, -26.447000000000003], + [-48.862, 44.122], + [11.73, 83.183], + [67.625, 37.455], + [12.957999999999998, -11.613999999999999], + [2.477, -75.40100000000001], + [-13.363, -83.18299999999999] + ], + "v": [ + [-67.624, -74.46], + [-60.836, -50.411], + [-56.182, 21.178], + [-10.628, 74.23], + [54.06, 57.355], + [37.189, -2.949], + [2.322, -69.611], + [-7.677, -82.077] + ], + "c": true + } + ] + }, + { + "t": 74.0000030140818, + "s": [ + { + "i": [ + [-67.624, -74.46], + [-59.432, -64.406], + [-62.772000000000006, -11.378], + [-32.257, 55.667], + [41.224000000000004, 67.645], + [60.596000000000004, -4.450000000000001], + [1.633, -43.886], + [-1.9909999999999997, -80.972] + ], + "o": [ + [-60.32299999999999, -66.62599999999999], + [-63.241, -26.447000000000003], + [-48.133, 34.510999999999996], + [12.459000000000001, 73.57300000000001], + [68.354, 27.844], + [13.686999999999998, -21.225], + [2.477, -75.40100000000001], + [-13.363, -83.18299999999999] + ], + "v": [ + [-67.624, -74.46], + [-60.836, -50.411], + [-55.453, 11.567], + [-9.899, 64.62], + [54.789, 47.744], + [37.918, -12.56], + [2.322, -69.611], + [-7.677, -82.077] + ], + "c": true + } + ] + } + ], + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.5221, 0.6538, 0.9379, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [692.302, 244.019], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 11", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 11, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + } + ], + "ip": 0, + "op": 1798.00007323404, + "st": 0, + "bm": 0, + "completed": true + }, + { + "ddd": 0, + "ind": 4, + "ty": 4, + "nm": "arms/boxgirl2 Outlines", + "parent": 5, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 7, + "s": [-18], + "__fnct": [null] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 13.824, + "s": [0], + "__fnct": [null] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 21, + "s": [-18], + "__fnct": [null] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 27, + "s": [0], + "__fnct": [null] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 37, + "s": [-18], + "__fnct": [null] + }, + { "t": 54.0000021994651, "s": [-18] } + ], + "ix": 10 + }, + "p": { "a": 0, "k": [506.439, 444.242, 0], "ix": 2 }, + "a": { "a": 0, "k": [534.439, 398.222, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [6.169, -3.407], + [3.407, 6.169], + [-6.168, 3.407], + [-3.407, -6.169] + ], + "o": [ + [6.169, 3.407], + [-3.407, 6.169], + [-6.168, -3.407], + [3.407, -6.169] + ], + "v": [ + [6.169, 0], + [0, 6.169], + [-6.168, 0], + [0, -6.169] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [632.081, 461.246], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 1 }, + "o": { "x": 0.167, "y": 0 }, + "t": 7, + "s": [ + { + "i": [ + [-38.207, 26.791], + [15.561000000000003, 30.099], + [76.72500000000001, 31.052999999999997] + ], + "o": [ + [-12.919, 19.393], + [74.176, 34.041], + [87.513, -6.807] + ], + "v": [ + [-38.207, 26.791], + [38.078, 30.823], + [87.513, -6.807] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 1 }, + "o": { "x": 0.167, "y": 0 }, + "t": 14, + "s": [ + { + "i": [ + [-38.207, 26.791], + [15.318999999999999, 22.708000000000002], + [18.337, 0.0779999999999994] + ], + "o": [ + [-12.919, 19.393], + [20.904, 7.313000000000002], + [21.086, -17.93] + ], + "v": [ + [-38.207, 26.791], + [38.207, 35.761], + [21.086, -17.93] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 1 }, + "o": { "x": 0.167, "y": 0 }, + "t": 21, + "s": [ + { + "i": [ + [-38.207, 26.791], + [15.561000000000003, 30.099], + [76.72500000000001, 31.052999999999997] + ], + "o": [ + [-12.919, 19.393], + [74.176, 34.041], + [87.513, -6.807] + ], + "v": [ + [-38.207, 26.791], + [38.078, 30.823], + [87.513, -6.807] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 1 }, + "o": { "x": 0.167, "y": 0 }, + "t": 27.176, + "s": [ + { + "i": [ + [-38.207, 26.791], + [15.318999999999999, 22.708000000000002], + [18.337, 0.0779999999999994] + ], + "o": [ + [-12.919, 19.393], + [20.904, 7.313000000000002], + [21.086, -17.93] + ], + "v": [ + [-38.207, 26.791], + [38.207, 35.761], + [21.086, -17.93] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 1 }, + "o": { "x": 0.167, "y": 0 }, + "t": 37, + "s": [ + { + "i": [ + [-38.207, 26.791], + [15.561000000000003, 30.099], + [76.72500000000001, 31.052999999999997] + ], + "o": [ + [-12.919, 19.393], + [74.176, 34.041], + [87.513, -6.807] + ], + "v": [ + [-38.207, 26.791], + [38.078, 30.823], + [87.513, -6.807] + ], + "c": false + } + ] + }, + { + "t": 54.0000021994651, + "s": [ + { + "i": [ + [-38.207, 26.791], + [15.561000000000003, 30.099], + [76.72500000000001, 31.052999999999997] + ], + "o": [ + [-12.919, 19.393], + [74.176, 34.041], + [87.513, -6.807] + ], + "v": [ + [-38.207, 26.791], + [38.078, 30.823], + [87.513, -6.807] + ], + "c": false + } + ] + } + ], + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [636.453, 358.075], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 2", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-34.042, -55.116], + [-26.754, -55.077000000000005], + [-13.267999999999999, -37.167], + [-20.535999999999998, -9.768], + [-29.046, 18.156999999999996], + [-28.105, 26.975], + [-4.29, 45.054], + [34.043, -18.987000000000002] + ], + "o": [ + [-30.499000000000002, -55.652], + [-15.787000000000003, -47.982], + [-16.053, -18.372999999999998], + [-27.043, 8.082], + [-27.997, 28.159], + [-27.687, 37.533], + [13.969999999999999, 19.922000000000004], + [14.035, -54.499] + ], + "v": [ + [-34.042, -55.116], + [-23.763, -53.142], + [-14.661, -27.77], + [-23.79, -0.843], + [-27.997, 28.159], + [-28.105, 26.975], + [6.752, 55.652], + [14.035, -54.499] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.5632, 0.6878, 0.9568, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [635.71, 439.352], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 3", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 3, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-19.251, -20.715], + [19.252, -11.749], + [12.525, 20.715], + [-9.779, 13.975] + ], + "o": [ + [-19.251, -20.715], + [19.252, -11.749], + [12.525, 20.715], + [-9.779, 13.975] + ], + "v": [ + [-19.251, -20.715], + [19.252, -11.749], + [12.525, 20.715], + [-9.779, 13.975] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 3, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.88, 0.918, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [617.497, 415.331], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 4", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 4, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [55.805, -7.473], + [11.559, -17.777], + [-4.366, -29.569], + [-16.451, -29.727], + [-47.911, -37.771], + [-33.007, 37.771], + [56.886, 25.512] + ], + "o": [ + [55.805, -7.473], + [11.559, -17.777], + [-9.364999999999998, -33.269999999999996], + [-16.488, -23.507], + [-56.886, 4.811999999999999], + [1.026, 8.632], + [56.886, 25.512] + ], + "v": [ + [55.805, -7.473], + [11.559, -17.777], + [-4.366, -29.569], + [-16.488, -23.507], + [-52.904, -14.08], + [1.026, 8.632], + [56.886, 25.512] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.94, 0.959, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [554.414, 404.877], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 5", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 5, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-16.19, -29.242], + [-2.2809999999999997, -43.230000000000004], + [16.19, -22.095], + [8.922, 5.3039999999999985], + [0.41200000000000014, 33.229], + [-5.502, 15.172] + ], + "o": [ + [-15.619000000000002, -38.724000000000004], + [13.67, -32.909], + [13.404, -3.3019999999999996], + [2.414, 23.154], + [-1.5210000000000001, 32.20099999999999], + [-8.484, 4.143] + ], + "v": [ + [-16.19, -29.242], + [5.695, -38.07], + [14.797, -12.698], + [5.668, 14.229], + [1.461, 43.23], + [-8.484, 4.143] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.2353, 0.4667, 0.9843, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [606.252, 424.28], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 6", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 6, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 1 }, + "o": { "x": 0.333, "y": 0 }, + "t": 7, + "s": [ + { + "i": [ + [63.279, -99.083], + [69.19600000000001, 90.923], + [-48.309, 74.336] + ], + "o": [ + [140.729, -33.355000000000004], + [-24.338, 80.07], + [-65.557, 72.343] + ], + "v": [ + [63.279, -99.083], + [-7.091, 82.071], + [-65.557, 72.343] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 1 }, + "o": { "x": 0.167, "y": 0 }, + "t": 14, + "s": [ + { + "i": [ + [-26.996, -99.139], + [65.55699999999999, 92.606], + [-48.309, 74.336] + ], + "o": [ + [56.043000000000006, -73.076], + [-36.681, 86.729], + [-65.557, 72.343] + ], + "v": [ + [-26.996, -99.139], + [-19.347, 87.726], + [-65.557, 72.343] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 1 }, + "o": { "x": 0.333, "y": 0 }, + "t": 21, + "s": [ + { + "i": [ + [63.279, -99.083], + [69.19600000000001, 90.923], + [-48.309, 74.336] + ], + "o": [ + [140.729, -33.355000000000004], + [-24.338, 80.07], + [-65.557, 72.343] + ], + "v": [ + [63.279, -99.083], + [-7.091, 82.071], + [-65.557, 72.343] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 1 }, + "o": { "x": 0.167, "y": 0 }, + "t": 27, + "s": [ + { + "i": [ + [-46.273, -107.574], + [65.55699999999999, 92.606], + [-48.309, 74.336] + ], + "o": [ + [41.95799999999999, -100.755], + [-36.681, 86.729], + [-65.557, 72.343] + ], + "v": [ + [-46.273, -107.574], + [-19.347, 87.726], + [-65.557, 72.343] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 1 }, + "o": { "x": 0.333, "y": 0 }, + "t": 37, + "s": [ + { + "i": [ + [63.279, -99.083], + [69.19600000000001, 90.923], + [-48.309, 74.336] + ], + "o": [ + [140.729, -33.355000000000004], + [-24.338, 80.07], + [-65.557, 72.343] + ], + "v": [ + [63.279, -99.083], + [-7.091, 82.071], + [-65.557, 72.343] + ], + "c": false + } + ] + }, + { + "t": 54.0000021994651, + "s": [ + { + "i": [ + [63.279, -99.083], + [69.19600000000001, 90.923], + [-48.309, 74.336] + ], + "o": [ + [140.729, -33.355000000000004], + [-24.338, 80.07], + [-65.557, 72.343] + ], + "v": [ + [63.279, -99.083], + [-7.091, 82.071], + [-65.557, 72.343] + ], + "c": false + } + ] + } + ], + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.5632, 0.6878, 0.9568, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [717.313, 386.909], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 7", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 7, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + } + ], + "ip": 0, + "op": 1798.00007323404, + "st": 0, + "bm": 0, + "completed": true + }, + { + "ddd": 0, + "ind": 5, + "ty": 4, + "nm": "BOX/boxgirl2 Outlines", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { + "a": 1, + "k": [ + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.167], "y": [0] }, + "t": 7, + "s": [-11], + "__fnct": [null] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 14.961, + "s": [0], + "__fnct": [null] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 21.216, + "s": [-11], + "__fnct": [null] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 26.903, + "s": [0], + "__fnct": [null] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.333], "y": [0] }, + "t": 36.569, + "s": [-11], + "__fnct": [null] + }, + { "t": 76.0000030955435, "s": [-11] } + ], + "ix": 10 + }, + "p": { + "s": true, + "x": { "a": 0, "k": 497.232, "ix": 3 }, + "y": { + "a": 1, + "k": [ + { + "i": { "x": [0.525], "y": [0.999] }, + "o": { "x": [0.167], "y": [0.012] }, + "t": 7, + "s": [534.782], + "__fnct": [null] + }, + { + "i": { "x": [0.667], "y": [1] }, + "o": { "x": [0.714], "y": [-0.001] }, + "t": 14.961, + "s": [473.393], + "__fnct": [null] + }, + { + "i": { "x": [0.086], "y": [1.001] }, + "o": { "x": [0.333], "y": [0] }, + "t": 20.648, + "s": [554.791], + "__fnct": [null] + }, + { + "i": { "x": [0.345], "y": [1.257] }, + "o": { "x": [0.475], "y": [0.001] }, + "t": 26.903, + "s": [484.088], + "__fnct": [null] + }, + { + "i": { "x": [0.058], "y": [8.039] }, + "o": { "x": [0.207], "y": [-15.641] }, + "t": 37.138, + "s": [534.782], + "__fnct": [null] + }, + { "t": 76.0000030955435, "s": [534.782] } + ], + "ix": 4 + } + }, + "a": { "a": 0, "k": [572.5, 586.5, 0], "ix": 1 }, + "s": { "a": 0, "k": [83, 83, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [6.609, 2.7120000000000033], + [-8.285, 42.896], + [-2.262, -43.63], + [8.286, -42.896] + ], + "o": [ + [2.264, 43.63], + [-2.4910000000000005, 2.4909999999999997], + [-2.262, -43.63], + [8.286, -42.896] + ], + "v": [ + [2.264, 43.63], + [-8.285, 42.896], + [-2.262, -43.63], + [8.286, -42.896] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "fl", + "c": { "a": 0, "k": [1, 1, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [307.842, 426.297], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [0.841, -83.44], + [2.61, 83.441] + ], + "o": [ + [0.841, -83.44], + [-2.611, 82.013] + ], + "v": [ + [0.841, -83.44], + [-2.611, 82.013] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [306.142, 427.058], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 2", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-112.026, 3.123], + [42.03399999999999, -2.109] + ], + "o": [ + [-42.033, 2.109], + [112.026, -3.123] + ], + "v": [ + [-112.026, 3.123], + [112.026, -3.123] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [477.19, 351.902], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 3", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 3, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-56.581, -95.724], + [17.612000000000002, -78.46499999999999], + [54.133, 32.857000000000006] + ], + "o": [ + [-14.921000000000006, -86.63900000000001], + [54.760000000000005, -9.606999999999992], + [52.313, 95.724] + ], + "v": [ + [-56.581, -95.724], + [56.581, -72.475], + [52.313, 95.724] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0, 0.3167, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [308.254, 427.051], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 4", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 4, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-58.843, -95.902], + [96.32, -90.894], + [151.082, 16.786], + [9.390999999999998, 96.907], + [-126.993, 76.826], + [-161.34300000000002, -57.053000000000004] + ], + "o": [ + [49.659000000000006, -83.102], + [155.906, -27.889000000000003], + [93.44999999999999, 102.303], + [-102.195, 82.337], + [-162.40699999999998, 1.0829999999999984], + [-123.763, -102.302] + ], + "v": [ + [-15.044, -99.102], + [169.981, -81.65], + [161.058, 90.364], + [-59.207, 94.101], + [-169.981, 65.062], + [-167.562, -99.102] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0, 0.3167, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [419.236, 430.43], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 5", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 5, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 0, + "s": [ + { + "i": [ + [81.443, -11.521], + [76.766, 29.972], + [14.717999999999996, 29.973], + [-34.679, -14.004000000000001] + ], + "o": [ + [75.562, 16.718999999999998], + [23.845999999999997, 39.096000000000004], + [-32.872, -18.823], + [-29.331, -40.56] + ], + "v": [ + [81.443, -11.521], + [72.476, 56.222], + [-39.877, 9.497], + [-29.331, -40.56] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 17.235, + "s": [ + { + "i": [ + [81.443, -11.521], + [76.766, 29.972], + [14.717999999999996, 29.972], + [-34.679, -14.004000000000001] + ], + "o": [ + [75.562, 16.718999999999998], + [23.845999999999997, 39.096000000000004], + [-32.872, -18.823], + [-29.331, -40.56] + ], + "v": [ + [81.443, -11.521], + [72.476, 56.222], + [-39.877, 9.497], + [-29.331, -40.56] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 20, + "s": [ + { + "i": [ + [81.443, -11.521], + [50.298, -12.889000000000001], + [-23.436999999999998, -29.824], + [-53.312, -35.891000000000005] + ], + "o": [ + [55.669, -15.620000000000001], + [-16.669000000000004, -29.583000000000002], + [-51.86, -44.198], + [-29.331, -40.56] + ], + "v": [ + [81.443, -11.521], + [31.961, -12.457], + [-76.764, -40.908], + [-29.331, -40.56] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 22.921, + "s": [ + { + "i": [ + [81.443, -11.521], + [76.766, 29.972], + [14.717999999999996, 29.973], + [-34.679, -14.004000000000001] + ], + "o": [ + [75.562, 16.718999999999998], + [23.845999999999997, 39.096000000000004], + [-32.872, -18.823], + [-29.331, -40.56] + ], + "v": [ + [81.443, -11.521], + [72.476, 56.222], + [-39.877, 9.497], + [-29.331, -40.56] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 28.608, + "s": [ + { + "i": [ + [81.443, -11.521], + [76.766, 29.972], + [14.717999999999996, 29.973], + [-34.679, -14.004000000000001] + ], + "o": [ + [75.562, 16.718999999999998], + [23.845999999999997, 39.096000000000004], + [-32.872, -18.823], + [-29.331, -40.56] + ], + "v": [ + [81.443, -11.521], + [72.476, 56.222], + [-39.877, 9.497], + [-29.331, -40.56] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 31, + "s": [ + { + "i": [ + [81.443, -11.521], + [50.298, -12.889000000000001], + [-23.436999999999998, -29.825], + [-53.312, -35.891000000000005] + ], + "o": [ + [55.669, -15.620000000000001], + [-16.669000000000004, -29.583000000000002], + [-51.86, -44.199], + [-29.331, -40.56] + ], + "v": [ + [81.443, -11.521], + [31.961, -12.457], + [-76.764, -40.909], + [-29.331, -40.56] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.667, "y": 1 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 46, + "s": [ + { + "i": [ + [81.443, -11.521], + [76.766, 29.972], + [14.717999999999996, 29.973], + [-34.679, -14.004000000000001] + ], + "o": [ + [75.562, 16.718999999999998], + [23.845999999999997, 39.096000000000004], + [-32.872, -18.823], + [-29.331, -40.56] + ], + "v": [ + [81.443, -11.521], + [72.476, 56.222], + [-39.877, 9.497], + [-29.331, -40.56] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 62, + "s": [ + { + "i": [ + [81.443, -11.521], + [73.68900000000001, 29.584], + [14.717999999999996, 29.973], + [-34.679, -14.004000000000001] + ], + "o": [ + [75.562, 16.718999999999998], + [19.764000000000003, 37.995999999999995], + [-32.872, -18.823], + [-29.331, -40.56] + ], + "v": [ + [81.443, -11.521], + [68.394, 55.122], + [-39.877, 9.497], + [-29.331, -40.56] + ], + "c": false + } + ] + }, + { + "t": 77.0000031362743, + "s": [ + { + "i": [ + [81.443, -11.521], + [76.766, 29.972], + [14.717999999999996, 29.973], + [-34.679, -14.004000000000001] + ], + "o": [ + [75.562, 16.718999999999998], + [23.845999999999997, 39.096000000000004], + [-32.872, -18.823], + [-29.331, -40.56] + ], + "v": [ + [81.443, -11.521], + [72.476, 56.222], + [-39.877, 9.497], + [-29.331, -40.56] + ], + "c": false + } + ] + } + ], + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0, 0.3167, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [278.586, 536.051], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 6", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 6, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 0, + "s": [ + { + "i": [ + [96.352, -34.341], + [103.138, 0.0519999999999996], + [-29.39099999999999, 34.992000000000004], + [-114.33099999999999, -1.931000000000001] + ], + "o": [ + [98.29, -13.144000000000002], + [26.03, 33.185], + [-117.343, 13.732000000000003], + [-118.704, -27.565] + ], + "v": [ + [96.352, -34.341], + [106.656, 24.809], + [-115.038, 40.968], + [-118.704, -27.565] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 8, + "s": [ + { + "i": [ + [96.353, -34.341], + [102.80799999999999, 2.7590000000000003], + [-24.644999999999996, 35.827999999999996], + [-114.33099999999999, -1.931000000000001] + ], + "o": [ + [98.291, -13.144000000000002], + [29.58999999999999, 33.812], + [-112.59700000000001, 14.566999999999997], + [-118.704, -27.565] + ], + "v": [ + [96.353, -34.341], + [110.216, 25.436], + [-110.292, 41.803], + [-118.704, -27.565] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 16.666, + "s": [ + { + "i": [ + [96.353, -34.341], + [103.138, 0.0519999999999996], + [-29.39099999999999, 34.993], + [-114.33099999999999, -1.931000000000001] + ], + "o": [ + [98.291, -13.144000000000002], + [26.03, 33.185], + [-117.343, 13.732000000000003], + [-118.704, -27.565] + ], + "v": [ + [96.353, -34.341], + [106.656, 24.809], + [-115.038, 40.968], + [-118.704, -27.565] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 20, + "s": [ + { + "i": [ + [96.353, -34.341], + [106.97300000000001, -24.811], + [15.943999999999988, -2.248], + [-99.317, -13.166000000000002] + ], + "o": [ + [109.91199999999999, -20.628], + [52.691, -2.850999999999999], + [-100.533, -9.71], + [-118.704, -27.565] + ], + "v": [ + [96.353, -34.341], + [136.329, -10.87], + [-68.498, 3.481], + [-118.704, -27.565] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 22.921, + "s": [ + { + "i": [ + [96.352, -34.341], + [103.138, 0.0519999999999996], + [-29.39099999999999, 34.992000000000004], + [-114.33099999999999, -1.931000000000001] + ], + "o": [ + [98.29, -13.144000000000002], + [26.03, 33.185], + [-117.343, 13.732000000000003], + [-118.704, -27.565] + ], + "v": [ + [96.352, -34.341], + [106.656, 24.809], + [-115.038, 40.968], + [-118.704, -27.565] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 28.608, + "s": [ + { + "i": [ + [96.352, -34.341], + [103.138, 0.0519999999999996], + [-29.39099999999999, 34.992000000000004], + [-114.33099999999999, -1.931000000000001] + ], + "o": [ + [98.29, -13.144000000000002], + [26.03, 33.185], + [-117.343, 13.732000000000003], + [-118.704, -27.565] + ], + "v": [ + [96.352, -34.341], + [106.656, 24.809], + [-115.038, 40.968], + [-118.704, -27.565] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 31, + "s": [ + { + "i": [ + [96.353, -34.341], + [106.97300000000001, -24.811], + [15.943999999999988, -2.248], + [-99.317, -13.166000000000002] + ], + "o": [ + [109.91199999999999, -20.628], + [52.691, -2.850999999999999], + [-100.533, -9.71], + [-118.704, -27.565] + ], + "v": [ + [96.353, -34.341], + [136.329, -10.87], + [-68.498, 3.481], + [-118.704, -27.565] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.667, "y": 1 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 46, + "s": [ + { + "i": [ + [96.352, -34.341], + [103.138, 0.0519999999999996], + [-29.39099999999999, 34.992000000000004], + [-114.33099999999999, -1.931000000000001] + ], + "o": [ + [98.29, -13.144000000000002], + [26.03, 33.185], + [-117.343, 13.732000000000003], + [-118.704, -27.565] + ], + "v": [ + [96.352, -34.341], + [106.656, 24.809], + [-115.038, 40.968], + [-118.704, -27.565] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 52, + "s": [ + { + "i": [ + [96.352, -34.341], + [87.83699999999999, 0.8170000000000002], + [-42.516000000000005, 33.054], + [-124.00899999999999, -1.6990000000000016] + ], + "o": [ + [91.988, -14.233], + [2.8699999999999903, 32.365], + [-124.995, 12.838000000000001], + [-118.704, -27.565] + ], + "v": [ + [96.352, -34.341], + [83.496, 23.989], + [-128.163, 39.03], + [-118.704, -27.565] + ], + "c": false + } + ] + }, + { + "t": 77.0000031362743, + "s": [ + { + "i": [ + [96.352, -34.341], + [103.138, 0.0519999999999996], + [-29.39099999999999, 34.992000000000004], + [-114.33099999999999, -1.931000000000001] + ], + "o": [ + [98.29, -13.144000000000002], + [26.03, 33.185], + [-117.343, 13.732000000000003], + [-118.704, -27.565] + ], + "v": [ + [96.352, -34.341], + [106.656, 24.809], + [-115.038, 40.968], + [-118.704, -27.565] + ], + "c": false + } + ] + } + ], + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0, 0.3167, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [483.54, 552.116], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 7", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 7, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + } + ], + "ip": 0, + "op": 1798.00007323404, + "st": 0, + "bm": 0, + "completed": true + }, + { + "ddd": 0, + "ind": 6, + "ty": 4, + "nm": "Legs/boxgirl2 Outlines", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [477.2320000000001, 513.782, 0], "ix": 2 }, + "a": { "a": 0, "k": [572.5, 586.5, 0], "ix": 1 }, + "s": { "a": 0, "k": [83, 83, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-48.474, -30.191], + [-58.521, -17.664], + [-15.118, 20.055], + [33.069, 30.191000000000003] + ], + "o": [ + [-53.916999999999994, -24.621], + [-55.75, 10.007], + [12.83, 26.966], + [58.521, 27.626] + ], + "v": [ + [-48.474, -30.191], + [-57.779, -10.254], + [-0.625, 23.639], + [58.521, 27.626] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.94, 0.959, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [647.342, 989.901], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-11.624, -6.953], + [3.5600000000000005, 6.953] + ], + "o": [ + [-11.624, -6.953], + [11.624, 1.731] + ], + "v": [ + [-11.624, -6.953], + [11.624, 1.731] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.94, 0.959, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [618.704, 1014.636], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 2", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 2, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-66.997, 10.39], + [-73.244, 7.593], + [-73.244, -10.39], + [-70.416, -10.39], + [73.244, -10.39], + [73.244, 4.143], + [70.447, 10.39] + ], + "o": [ + [-70.447, 10.39], + [-73.244, 4.143], + [-73.244, -10.39], + [-70.416, -10.39], + [73.244, -10.39], + [73.244, 7.593], + [66.997, 10.39] + ], + "v": [ + [-66.997, 10.39], + [-73.244, 4.143], + [-73.244, -10.39], + [-70.416, -10.39], + [73.244, -10.39], + [73.244, 4.143], + [66.997, 10.39] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.94, 0.959, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [630.328, 1057.988], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 3", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 3, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [74.419, -1.574], + [75.315, 23.542], + [-68.346, 23.542], + [-72.36399999999999, 18.759999999999998], + [-70.87700000000001, 0.798], + [-21.177, -16.372], + [-11.369, -23.542] + ], + "o": [ + [74.419, -1.574], + [75.315, 23.542], + [-70.90700000000001, 21.297], + [-75.315, 8.691999999999998], + [-63.465, -1.762], + [-21.177, -16.372], + [-11.369, -23.542] + ], + "v": [ + [74.419, -1.574], + [75.315, 23.542], + [-68.346, 23.542], + [-73.109, 16.217], + [-63.465, -1.762], + [-21.177, -16.372], + [-11.369, -23.542] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.94, 0.959, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [628.258, 1024.055], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 4", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 4, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-30.309, -32.271], + [-60.321, -7.144], + [-13.7, 26.514], + [35.20399999999999, 32.271] + ], + "o": [ + [-30.309, -11.495000000000001], + [-55.07, 20.163999999999998], + [14.757000000000001, 30.881], + [60.321, 27.425] + ], + "v": [ + [-30.309, -32.271], + [-58.915, 0.168], + [1.056, 28.779], + [60.321, 27.425] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [561.487, 975.205], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 5", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 5, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-11.967, -6.242], + [4.407, 6.242] + ], + "o": [ + [-11.967, -6.242], + [11.968, 0.315] + ], + "v": [ + [-11.967, -6.242], + [11.968, 0.315] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [519.21, 1005.327], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 6", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 6, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [74.051, 5], + [71.843, -16.903], + [-74.051, -3.715], + [-72.448, 10.933], + [-69.1, 16.903] + ], + "o": [ + [74.051, 5], + [71.843, -16.903], + [-74.051, -3.715], + [-72.13699999999999, 14.369], + [-65.663, 16.593] + ], + "v": [ + [74.051, 5], + [71.843, -16.903], + [-74.051, -3.715], + [-72.448, 10.933], + [-65.663, 16.593] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [535.094, 1047.055], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 7", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 7, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [1.577, 12.468], + [-1.576, -12.468] + ], + "o": [ + [1.577, 12.468], + [-1.576, -12.468] + ], + "v": [ + [1.577, 12.468], + [-1.576, -12.468] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [605.36, 1017.685], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 8", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 8, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [30.393, -26.012], + [21.269, -17.987], + [-19.532, 0.37], + [-30.392999999999997, 11.847000000000001], + [-24.867, 24.007] + ], + "o": [ + [30.393, -26.012], + [21.269, -17.987], + [-26.683, 3.588], + [-26.548, 21.61], + [-22.114, 26.012] + ], + "v": [ + [30.393, -26.012], + [21.269, -17.987], + [-19.532, 0.37], + [-27.519, 19.143], + [-22.114, 26.012] + ], + "c": false + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [485.974, 1017.073], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 9", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 9, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 10.98, + "s": [ + { + "i": [ + [-9.493, -158.357], + [6.052, 52.786] + ], + "o": [ + [-28.197000000000003, -46.14], + [9.494, 158.357] + ], + "v": [ + [-9.493, -158.357], + [9.494, 158.357] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 14.393, + "s": [ + { + "i": [ + [-9.493, -158.357], + [6.052, 52.786] + ], + "o": [ + [-6.051, -52.786], + [9.494, 158.357] + ], + "v": [ + [-9.493, -158.357], + [9.494, 158.357] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 20.648, + "s": [ + { + "i": [ + [-9.493, -158.357], + [6.052, 52.786] + ], + "o": [ + [-28.197000000000003, -46.14], + [9.494, 158.357] + ], + "v": [ + [-9.493, -158.357], + [9.494, 158.357] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 25.765, + "s": [ + { + "i": [ + [-9.493, -158.357], + [6.052, 52.786] + ], + "o": [ + [-6.051, -52.786], + [9.494, 158.357] + ], + "v": [ + [-9.493, -158.357], + [9.494, 158.357] + ], + "c": false + } + ] + }, + { + "t": 32.588751327367, + "s": [ + { + "i": [ + [-9.493, -158.357], + [6.052, 52.786] + ], + "o": [ + [-28.197000000000003, -46.14], + [9.494, 158.357] + ], + "v": [ + [-9.493, -158.357], + [9.494, 158.357] + ], + "c": false + } + ] + } + ], + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [519.695, 753.384], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 10", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 10, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 10.98, + "s": [ + { + "i": [ + [2.06, -160.308], + [9.141, 55.657] + ], + "o": [ + [-9.141, -51.699], + [6.06, 160.309] + ], + "v": [ + [2.06, -160.308], + [6.06, 160.309] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 14.393, + "s": [ + { + "i": [ + [2.06, -160.308], + [9.141, 55.657] + ], + "o": [ + [7.302, -54.150999999999996], + [6.06, 160.309] + ], + "v": [ + [2.06, -160.308], + [6.06, 160.309] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 20.648, + "s": [ + { + "i": [ + [2.06, -160.308], + [9.141, 55.657] + ], + "o": [ + [-9.141, -51.699], + [6.06, 160.309] + ], + "v": [ + [2.06, -160.308], + [6.06, 160.309] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 25.765, + "s": [ + { + "i": [ + [2.06, -160.308], + [9.141, 55.657] + ], + "o": [ + [7.302, -54.15199999999999], + [6.06, 160.309] + ], + "v": [ + [2.06, -160.308], + [6.06, 160.309] + ], + "c": false + } + ] + }, + { + "t": 32.588751327367, + "s": [ + { + "i": [ + [2.06, -160.308], + [9.141, 55.657] + ], + "o": [ + [-9.141, -51.699], + [6.06, 160.309] + ], + "v": [ + [2.06, -160.308], + [6.06, 160.309] + ], + "c": false + } + ] + } + ], + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [591.424, 810.794], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 11", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 11, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + }, + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 10.98, + "s": [ + { + "i": [ + [12.646, -187.238], + [-0.7970000000000006, 80.96] + ], + "o": [ + [-21.131, -95.752], + [21.131, 187.238] + ], + "v": [ + [12.646, -187.238], + [21.131, 187.238] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 14.393, + "s": [ + { + "i": [ + [12.646, -187.238], + [10.471, 78.756] + ], + "o": [ + [8.061, -94.738], + [21.131, 187.238] + ], + "v": [ + [12.646, -187.238], + [21.131, 187.238] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 20.648, + "s": [ + { + "i": [ + [12.646, -187.238], + [-0.7970000000000006, 80.96] + ], + "o": [ + [-21.131, -95.752], + [21.131, 187.238] + ], + "v": [ + [12.646, -187.238], + [21.131, 187.238] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 25.765, + "s": [ + { + "i": [ + [12.646, -187.238], + [10.471, 78.756] + ], + "o": [ + [8.061, -94.738], + [21.131, 187.238] + ], + "v": [ + [12.646, -187.238], + [21.131, 187.238] + ], + "c": false + } + ] + }, + { + "t": 32.588751327367, + "s": [ + { + "i": [ + [12.646, -187.238], + [-0.7970000000000006, 80.96] + ], + "o": [ + [-21.131, -95.752], + [21.131, 187.238] + ], + "v": [ + [12.646, -187.238], + [21.131, 187.238] + ], + "c": false + } + ] + } + ], + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [685.846, 756.199], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 12", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 12, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + } + ], + "ip": 0, + "op": 1798.00007323404, + "st": 0, + "bm": 0, + "completed": true + }, + { + "ddd": 0, + "ind": 7, + "ty": 4, + "nm": "Body/boxgirl2 Outlines", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 10.98, + "s": [477.2320000000001, 513.782, 0], + "to": null, + "ti": null + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 14.393, + "s": [477.2320000000001, 506.78200000000004, 0], + "to": null, + "ti": null + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 20.648, + "s": [477.2320000000001, 513.782, 0], + "to": null, + "ti": null + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 25.765, + "s": [477.2320000000001, 506.78200000000004, 0], + "to": null, + "ti": null + }, + { "t": 32.588751327367, "s": [477.2320000000001, 513.782, 0] } + ], + "ix": 2 + }, + "a": { "a": 0, "k": [572.5, 586.5, 0], "ix": 1 }, + "s": { "a": 0, "k": [83, 83, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 1, + "k": [ + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 11, + "s": [ + { + "i": [ + [132.53, -11.826], + [159.30499999999998, 87.824], + [126.691, 131.893], + [50.889, 113.17], + [-155.983, 138.43399999999997], + [-17.374, -144.415], + [23.696, -102.197], + [71.999, -130.707], + [108.833, -143.035] + ], + "o": [ + [138.89600000000002, 6.579999999999998], + [163.196, 127.087], + [70.292, 117.933], + [-0.019, 112.697], + [-37.274, -100.093], + [-1.019, -144.415], + [23.696, -102.197], + [90.52099999999999, -143.45499999999998], + [125.265, -134.421] + ], + "v": [ + [132.53, -11.826], + [161.147, 106.417], + [106.529, 126.902], + [-0.019, 112.697], + [-47.61, -79.325], + [-1.019, -144.415], + [23.696, -102.197], + [71.999, -130.707], + [125.265, -134.421] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 15, + "s": [ + { + "i": [ + [132.53, -11.826], + [159.30499999999998, 87.824], + [126.691, 131.893], + [50.889, 113.17], + [-180.063, 125.13700000000001], + [-17.374, -144.415], + [23.696, -102.197], + [71.999, -130.707], + [108.833, -143.035] + ], + "o": [ + [138.89600000000002, 6.579999999999998], + [163.196, 127.087], + [70.292, 117.933], + [-0.019, 112.697], + [-66.09899999999999, -137.961], + [-1.019, -144.415], + [23.696, -102.197], + [90.52099999999999, -143.45499999999998], + [125.265, -134.421] + ], + "v": [ + [132.53, -11.826], + [161.147, 106.417], + [106.529, 126.902], + [-0.019, 112.697], + [-75.32, -116.675], + [-1.019, -144.415], + [23.696, -102.197], + [71.999, -130.707], + [125.265, -134.421] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 20, + "s": [ + { + "i": [ + [132.53, -11.826], + [159.30499999999998, 87.824], + [126.691, 131.893], + [50.889, 113.17], + [-155.983, 128.795], + [-17.374, -144.415], + [23.696, -102.197], + [71.999, -130.707], + [108.833, -143.035] + ], + "o": [ + [138.89600000000002, 6.579999999999998], + [163.196, 127.087], + [70.292, 117.933], + [-0.019, 112.697], + [-37.274, -109.732], + [-1.019, -144.415], + [23.696, -102.197], + [90.52099999999999, -143.45499999999998], + [125.265, -134.421] + ], + "v": [ + [132.53, -11.826], + [161.147, 106.417], + [106.529, 126.902], + [-0.019, 112.697], + [-47.61, -88.964], + [-1.019, -144.415], + [23.696, -102.197], + [71.999, -130.707], + [125.265, -134.421] + ], + "c": false + } + ] + }, + { + "i": { "x": 0.833, "y": 0.833 }, + "o": { "x": 0.167, "y": 0.167 }, + "t": 26, + "s": [ + { + "i": [ + [132.53, -11.826], + [159.30499999999998, 87.824], + [126.691, 131.893], + [50.889, 113.17], + [-171.645, 111.92799999999998], + [-17.374, -144.415], + [23.696, -102.197], + [71.999, -130.707], + [108.833, -143.035] + ], + "o": [ + [138.89600000000002, 6.579999999999998], + [163.196, 127.087], + [70.292, 117.933], + [-0.019, 112.697], + [-52.936, -126.599], + [-1.019, -144.415], + [23.696, -102.197], + [90.52099999999999, -143.45499999999998], + [125.265, -134.421] + ], + "v": [ + [132.53, -11.826], + [161.147, 106.417], + [106.529, 126.902], + [-0.019, 112.697], + [-63.272, -105.831], + [-1.019, -144.415], + [23.696, -102.197], + [71.999, -130.707], + [125.265, -134.421] + ], + "c": false + } + ] + }, + { + "t": 33.0000013441176, + "s": [ + { + "i": [ + [132.53, -11.826], + [159.30499999999998, 87.824], + [126.691, 131.893], + [50.889, 113.17], + [-155.983, 138.43399999999997], + [-17.374, -144.415], + [23.696, -102.197], + [71.999, -130.707], + [108.833, -143.035] + ], + "o": [ + [138.89600000000002, 6.579999999999998], + [163.196, 127.087], + [70.292, 117.933], + [-0.019, 112.697], + [-37.274, -100.093], + [-1.019, -144.415], + [23.696, -102.197], + [90.52099999999999, -143.45499999999998], + [125.265, -134.421] + ], + "v": [ + [132.53, -11.826], + [161.147, 106.417], + [106.529, 126.902], + [-0.019, 112.697], + [-47.61, -79.325], + [-1.019, -144.415], + [23.696, -102.197], + [71.999, -130.707], + [125.265, -134.421] + ], + "c": false + } + ] + } + ], + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "st", + "c": { "a": 0, "k": [0, 0.1267, 0.4, 1], "ix": 3 }, + "o": { "a": 0, "k": 100, "ix": 4 }, + "w": { "a": 0, "k": 5, "ix": 5 }, + "lc": 2, + "lj": 1, + "ml": 10, + "bm": 0, + "nm": "Stroke 1", + "mn": "ADBE Vector Graphic - Stroke", + "hd": false, + "_render": true + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.5632, 0.6878, 0.9568, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [559.529, 428.725], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 1", + "np": 3, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + } + ], + "ip": 0, + "op": 1798.00007323404, + "st": 0, + "bm": 0, + "completed": true + }, + { + "ddd": 0, + "ind": 8, + "ty": 4, + "nm": "Layer 8/boxgirl2 Outlines", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100, "ix": 11 }, + "r": { "a": 0, "k": 0, "ix": 10 }, + "p": { "a": 0, "k": [477.2320000000001, 513.782, 0], "ix": 2 }, + "a": { "a": 0, "k": [572.5, 586.5, 0], "ix": 1 }, + "s": { "a": 0, "k": [83, 83, 100], "ix": 6 } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ind": 0, + "ty": "sh", + "ix": 1, + "ks": { + "a": 0, + "k": { + "i": [ + [-116.236, -550.8929999999999], + [-269.867, -440.473], + [-231.303, -284.373], + [-264.719, -85.20800000000001], + [-366.109, 319.10799999999995], + [45.461, 532.296], + [71.05199999999999, 214.332], + [302.66700000000003, -26.977999999999994], + [350.387, -318.394], + [143.66400000000002, -382.35200000000003] + ], + "o": [ + [-219.65300000000002, -519.029], + [-276.299, -298.66], + [-219.17499999999998, -129.882], + [-347.199, 119.33], + [-180.78499999999997, 550.893], + [176.183, 326.85400000000004], + [198.876, -41.914], + [366.10900000000004, -219.02100000000002], + [231.714, -463.56100000000004], + [-91.67, -511.58000000000004] + ], + "v": [ + [-164.114, -536.141], + [-273.101, -369.18], + [-225.408, -209.28], + [-297.757, -3.278], + [-280.381, 426.328], + [113.978, 424.615], + [140.88, 74.349], + [340.696, -142.095], + [303.58, -375.651], + [-19.035, -471.694] + ], + "c": true + }, + "ix": 2 + }, + "nm": "Path 1", + "mn": "ADBE Vector Shape - Group", + "hd": false, + "_render": true + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.94, 0.959, 1, 1], "ix": 4 }, + "o": { "a": 0, "k": 100, "ix": 5 }, + "r": 1, + "bm": 0, + "nm": "Fill 1", + "mn": "ADBE Vector Graphic - Fill", + "hd": false, + "_render": true + }, + { + "ty": "tr", + "p": { "a": 0, "k": [655.005, 614.237], "ix": 2 }, + "a": { "a": 0, "k": [0, 0], "ix": 1 }, + "s": { "a": 0, "k": [100, 100], "ix": 3 }, + "r": { "a": 0, "k": 0, "ix": 6 }, + "o": { "a": 0, "k": 100, "ix": 7 }, + "sk": { "a": 0, "k": 0, "ix": 4 }, + "sa": { "a": 0, "k": 0, "ix": 5 }, + "nm": "Transform", + "_render": true + } + ], + "nm": "Group 1", + "np": 2, + "cix": 2, + "bm": 0, + "ix": 1, + "mn": "ADBE Vector Group", + "hd": false, + "_render": true + } + ], + "ip": 0, + "op": 1798.00007323404, + "st": 0, + "bm": 0, + "completed": true + } + ], + "markers": [], + "__complete": true +} diff --git a/BillNote_frontend/src/assets/Lottie/loading.json b/BillNote_frontend/src/assets/Lottie/loading.json index 967bcdb..a3a680c 100644 --- a/BillNote_frontend/src/assets/Lottie/loading.json +++ b/BillNote_frontend/src/assets/Lottie/loading.json @@ -1 +1,463 @@ -{"nm":"Loading 15","ddd":0,"h":1080,"w":1080,"meta":{"g":"@lottiefiles/toolkit-js 0.47.2"},"layers":[{"ty":4,"nm":"Sq 01","sr":1,"st":0,"op":91,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[90,90,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[390,390,0],"t":5},{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[390,540,0],"t":23},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[390,690,0],"t":40},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[390,690,0],"t":45},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[390,690,0],"t":68},{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[390,690,0],"t":73},{"s":[540,690,0],"t":90}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Rectangle 1","ix":1,"cix":2,"np":3,"it":[{"ty":"rc","bm":0,"hd":false,"mn":"ADBE Vector Shape - Rect","nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":300},"s":{"a":1,"k":[{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[300,300],"t":5},{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[300,600],"t":23},{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[300,300],"t":40},{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[300,300],"t":45},{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[300,300],"t":68},{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[300,300],"t":73},{"s":[600,300],"t":90}]}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":2,"lj":2,"ml":1,"o":{"a":0,"k":100},"w":{"a":0,"k":10},"c":{"a":0,"k":[0.2353,0.4667,0.9843,1]}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0,0.3167,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":1},{"ty":4,"nm":"Sq 02","sr":1,"st":0,"op":91,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[90,90,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[690,390,0],"t":0},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[690,390,0],"t":23},{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[690,390,0],"t":28},{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[540,390,0],"t":45},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[390,390,0],"t":63},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[390,390,0],"t":68},{"s":[390,390,0],"t":90}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Rectangle 1","ix":1,"cix":2,"np":3,"it":[{"ty":"rc","bm":0,"hd":false,"mn":"ADBE Vector Shape - Rect","nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":300},"s":{"a":1,"k":[{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[300,300],"t":0},{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[300,300],"t":23},{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[300,300],"t":28},{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[600,300],"t":45},{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[300,300],"t":63},{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[300,300],"t":68},{"s":[300,300],"t":90}]}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":2,"lj":2,"ml":1,"o":{"a":0,"k":100},"w":{"a":0,"k":10},"c":{"a":0,"k":[0.2353,0.4667,0.9843,1]}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0,0.3167,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":2},{"ty":4,"nm":"Sq 03","sr":1,"st":0,"op":91,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[90,90,100]},"sk":{"a":0,"k":0},"p":{"a":1,"k":[{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[540,690,0],"t":0},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[690,690,0],"t":18},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[690,690,0],"t":23},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[690,690,0],"t":45},{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[690,690,0],"t":50},{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[690,540,0],"t":68},{"o":{"x":0.167,"y":0.167},"i":{"x":0.833,"y":0.833},"s":[690,390,0],"t":85},{"s":[690,390,0],"t":90}]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Rectangle 1","ix":1,"cix":2,"np":3,"it":[{"ty":"rc","bm":0,"hd":false,"mn":"ADBE Vector Shape - Rect","nm":"Rectangle Path 1","d":1,"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":300},"s":{"a":1,"k":[{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[600,300],"t":0},{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[300,300],"t":18},{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[300,300],"t":23},{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[300,300],"t":45},{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[300,300],"t":50},{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[300,600],"t":68},{"o":{"x":0.5,"y":0},"i":{"x":0.5,"y":1},"s":[300,300],"t":85},{"s":[300,300],"t":90}]}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":2,"lj":2,"ml":1,"o":{"a":0,"k":100},"w":{"a":0,"k":10},"c":{"a":0,"k":[0.2353,0.4667,0.9843,1]}},{"ty":"fl","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Fill","nm":"Fill 1","c":{"a":0,"k":[0,0.3167,1,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,1.1368683772161603e-13]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,1.1368683772161603e-13]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":3}],"v":"5.12.1","fr":30,"op":91,"ip":0,"assets":[]} \ No newline at end of file +{ + "nm": "Loading 15", + "ddd": 0, + "h": 1080, + "w": 1080, + "meta": { "g": "@lottiefiles/toolkit-js 0.47.2" }, + "layers": [ + { + "ty": 4, + "nm": "Sq 01", + "sr": 1, + "st": 0, + "op": 91, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { "a": 0, "k": [90, 90, 100] }, + "sk": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { "o": { "x": 0.5, "y": 0 }, "i": { "x": 0.5, "y": 1 }, "s": [390, 390, 0], "t": 5 }, + { "o": { "x": 0.5, "y": 0 }, "i": { "x": 0.5, "y": 1 }, "s": [390, 540, 0], "t": 23 }, + { + "o": { "x": 0.167, "y": 0.167 }, + "i": { "x": 0.833, "y": 0.833 }, + "s": [390, 690, 0], + "t": 40 + }, + { + "o": { "x": 0.167, "y": 0.167 }, + "i": { "x": 0.833, "y": 0.833 }, + "s": [390, 690, 0], + "t": 45 + }, + { + "o": { "x": 0.167, "y": 0.167 }, + "i": { "x": 0.833, "y": 0.833 }, + "s": [390, 690, 0], + "t": 68 + }, + { "o": { "x": 0.5, "y": 0 }, "i": { "x": 0.5, "y": 1 }, "s": [390, 690, 0], "t": 73 }, + { "s": [540, 690, 0], "t": 90 } + ] + }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Rectangle 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "rc", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 1", + "d": 1, + "p": { "a": 0, "k": [0, 0] }, + "r": { "a": 0, "k": 300 }, + "s": { + "a": 1, + "k": [ + { "o": { "x": 0.5, "y": 0 }, "i": { "x": 0.5, "y": 1 }, "s": [300, 300], "t": 5 }, + { + "o": { "x": 0.5, "y": 0 }, + "i": { "x": 0.5, "y": 1 }, + "s": [300, 600], + "t": 23 + }, + { + "o": { "x": 0.5, "y": 0 }, + "i": { "x": 0.5, "y": 1 }, + "s": [300, 300], + "t": 40 + }, + { + "o": { "x": 0.5, "y": 0 }, + "i": { "x": 0.5, "y": 1 }, + "s": [300, 300], + "t": 45 + }, + { + "o": { "x": 0.5, "y": 0 }, + "i": { "x": 0.5, "y": 1 }, + "s": [300, 300], + "t": 68 + }, + { + "o": { "x": 0.5, "y": 0 }, + "i": { "x": 0.5, "y": 1 }, + "s": [300, 300], + "t": 73 + }, + { "s": [600, 300], "t": 90 } + ] + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 2, + "lj": 2, + "ml": 1, + "o": { "a": 0, "k": 100 }, + "w": { "a": 0, "k": 10 }, + "c": { "a": 0, "k": [0.2353, 0.4667, 0.9843, 1] } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { "a": 0, "k": [0, 0.3167, 1, 1] }, + "r": 1, + "o": { "a": 0, "k": 100 } + }, + { + "ty": "tr", + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "sk": { "a": 0, "k": 0 }, + "p": { "a": 0, "k": [0, 0] }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + } + ] + } + ], + "ind": 1 + }, + { + "ty": 4, + "nm": "Sq 02", + "sr": 1, + "st": 0, + "op": 91, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { "a": 0, "k": [90, 90, 100] }, + "sk": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { + "o": { "x": 0.167, "y": 0.167 }, + "i": { "x": 0.833, "y": 0.833 }, + "s": [690, 390, 0], + "t": 0 + }, + { + "o": { "x": 0.167, "y": 0.167 }, + "i": { "x": 0.833, "y": 0.833 }, + "s": [690, 390, 0], + "t": 23 + }, + { "o": { "x": 0.5, "y": 0 }, "i": { "x": 0.5, "y": 1 }, "s": [690, 390, 0], "t": 28 }, + { "o": { "x": 0.5, "y": 0 }, "i": { "x": 0.5, "y": 1 }, "s": [540, 390, 0], "t": 45 }, + { + "o": { "x": 0.167, "y": 0.167 }, + "i": { "x": 0.833, "y": 0.833 }, + "s": [390, 390, 0], + "t": 63 + }, + { + "o": { "x": 0.167, "y": 0.167 }, + "i": { "x": 0.833, "y": 0.833 }, + "s": [390, 390, 0], + "t": 68 + }, + { "s": [390, 390, 0], "t": 90 } + ] + }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Rectangle 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "rc", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 1", + "d": 1, + "p": { "a": 0, "k": [0, 0] }, + "r": { "a": 0, "k": 300 }, + "s": { + "a": 1, + "k": [ + { "o": { "x": 0.5, "y": 0 }, "i": { "x": 0.5, "y": 1 }, "s": [300, 300], "t": 0 }, + { + "o": { "x": 0.5, "y": 0 }, + "i": { "x": 0.5, "y": 1 }, + "s": [300, 300], + "t": 23 + }, + { + "o": { "x": 0.5, "y": 0 }, + "i": { "x": 0.5, "y": 1 }, + "s": [300, 300], + "t": 28 + }, + { + "o": { "x": 0.5, "y": 0 }, + "i": { "x": 0.5, "y": 1 }, + "s": [600, 300], + "t": 45 + }, + { + "o": { "x": 0.5, "y": 0 }, + "i": { "x": 0.5, "y": 1 }, + "s": [300, 300], + "t": 63 + }, + { + "o": { "x": 0.5, "y": 0 }, + "i": { "x": 0.5, "y": 1 }, + "s": [300, 300], + "t": 68 + }, + { "s": [300, 300], "t": 90 } + ] + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 2, + "lj": 2, + "ml": 1, + "o": { "a": 0, "k": 100 }, + "w": { "a": 0, "k": 10 }, + "c": { "a": 0, "k": [0.2353, 0.4667, 0.9843, 1] } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { "a": 0, "k": [0, 0.3167, 1, 1] }, + "r": 1, + "o": { "a": 0, "k": 100 } + }, + { + "ty": "tr", + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "sk": { "a": 0, "k": 0 }, + "p": { "a": 0, "k": [0, 0] }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + } + ] + } + ], + "ind": 2 + }, + { + "ty": 4, + "nm": "Sq 03", + "sr": 1, + "st": 0, + "op": 91, + "ip": 0, + "hd": false, + "ddd": 0, + "bm": 0, + "hasMask": false, + "ao": 0, + "ks": { + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { "a": 0, "k": [90, 90, 100] }, + "sk": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { "o": { "x": 0.5, "y": 0 }, "i": { "x": 0.5, "y": 1 }, "s": [540, 690, 0], "t": 0 }, + { + "o": { "x": 0.167, "y": 0.167 }, + "i": { "x": 0.833, "y": 0.833 }, + "s": [690, 690, 0], + "t": 18 + }, + { + "o": { "x": 0.167, "y": 0.167 }, + "i": { "x": 0.833, "y": 0.833 }, + "s": [690, 690, 0], + "t": 23 + }, + { + "o": { "x": 0.167, "y": 0.167 }, + "i": { "x": 0.833, "y": 0.833 }, + "s": [690, 690, 0], + "t": 45 + }, + { "o": { "x": 0.5, "y": 0 }, "i": { "x": 0.5, "y": 1 }, "s": [690, 690, 0], "t": 50 }, + { "o": { "x": 0.5, "y": 0 }, "i": { "x": 0.5, "y": 1 }, "s": [690, 540, 0], "t": 68 }, + { + "o": { "x": 0.167, "y": 0.167 }, + "i": { "x": 0.833, "y": 0.833 }, + "s": [690, 390, 0], + "t": 85 + }, + { "s": [690, 390, 0], "t": 90 } + ] + }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + }, + "ef": [], + "shapes": [ + { + "ty": "gr", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Group", + "nm": "Rectangle 1", + "ix": 1, + "cix": 2, + "np": 3, + "it": [ + { + "ty": "rc", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Shape - Rect", + "nm": "Rectangle Path 1", + "d": 1, + "p": { "a": 0, "k": [0, 0] }, + "r": { "a": 0, "k": 300 }, + "s": { + "a": 1, + "k": [ + { "o": { "x": 0.5, "y": 0 }, "i": { "x": 0.5, "y": 1 }, "s": [600, 300], "t": 0 }, + { + "o": { "x": 0.5, "y": 0 }, + "i": { "x": 0.5, "y": 1 }, + "s": [300, 300], + "t": 18 + }, + { + "o": { "x": 0.5, "y": 0 }, + "i": { "x": 0.5, "y": 1 }, + "s": [300, 300], + "t": 23 + }, + { + "o": { "x": 0.5, "y": 0 }, + "i": { "x": 0.5, "y": 1 }, + "s": [300, 300], + "t": 45 + }, + { + "o": { "x": 0.5, "y": 0 }, + "i": { "x": 0.5, "y": 1 }, + "s": [300, 300], + "t": 50 + }, + { + "o": { "x": 0.5, "y": 0 }, + "i": { "x": 0.5, "y": 1 }, + "s": [300, 600], + "t": 68 + }, + { + "o": { "x": 0.5, "y": 0 }, + "i": { "x": 0.5, "y": 1 }, + "s": [300, 300], + "t": 85 + }, + { "s": [300, 300], "t": 90 } + ] + } + }, + { + "ty": "st", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Stroke", + "nm": "Stroke 1", + "lc": 2, + "lj": 2, + "ml": 1, + "o": { "a": 0, "k": 100 }, + "w": { "a": 0, "k": 10 }, + "c": { "a": 0, "k": [0.2353, 0.4667, 0.9843, 1] } + }, + { + "ty": "fl", + "bm": 0, + "hd": false, + "mn": "ADBE Vector Graphic - Fill", + "nm": "Fill 1", + "c": { "a": 0, "k": [0, 0.3167, 1, 1] }, + "r": 1, + "o": { "a": 0, "k": 100 } + }, + { + "ty": "tr", + "a": { "a": 0, "k": [0, 1.1368683772161603e-13] }, + "s": { "a": 0, "k": [100, 100] }, + "sk": { "a": 0, "k": 0 }, + "p": { "a": 0, "k": [0, 1.1368683772161603e-13] }, + "r": { "a": 0, "k": 0 }, + "sa": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + } + ] + } + ], + "ind": 3 + } + ], + "v": "5.12.1", + "fr": 30, + "op": 91, + "ip": 0, + "assets": [] +} diff --git a/BillNote_frontend/src/components/Form/modelForm/Form.tsx b/BillNote_frontend/src/components/Form/modelForm/Form.tsx new file mode 100644 index 0000000..4add4f9 --- /dev/null +++ b/BillNote_frontend/src/components/Form/modelForm/Form.tsx @@ -0,0 +1,153 @@ +import { useForm } from 'react-hook-form'; +import { z } from 'zod'; +import { zodResolver } from '@hookform/resolvers/zod'; +import { + Form, + FormField, + FormItem, + FormLabel, + FormControl, + FormDescription, + FormMessage, +} from '@/components/ui/form'; +import { Input } from '@/components/ui/input'; +import { Button } from '@/components/ui/button'; +import { useParams } from 'react-router-dom'; +import { useProviderStore } from '@/store/providerStore'; +import {useEffect, useState} from 'react'; + +// ✅ 表单校验 schema +const ProviderSchema = z.object({ + name: z.string().min(2, '名称不能少于 2 个字符'), + apiKey: z.string().optional(), + baseUrl: z.string().url('必须是合法 URL'), + type: z.string(), // 只展示,不可改 +}); + +type ProviderFormValues = z.infer; + +const ProviderForm = () => { + const rawId= useParams(); + console.log('rawId',rawId) + // @ts-ignore + const [providerName, idPart] = rawId.id.split('&'); + const [id,setId ]= useState(Number(idPart?.split('=')[1])) // => "1" + const getProviderById = useProviderStore((state) => state.getProviderById); + const provider = getProviderById(id); + + const form = useForm({ + resolver: zodResolver(ProviderSchema), + defaultValues: { + name: '', + apiKey: '', + baseUrl: '', + type: '', + }, + }); + + useEffect(() => { + console.log(provider) + // if (provider) { + // form.reset({ + // name: provider.name, + // apiKey: provider.apiKey, + // baseUrl: provider.baseUrl, + // type: provider.type, + // }); + // } + }, [id,provider, form]); + + const isBuiltIn = provider?.type === 'built-in'; + + const onSubmit = (values: ProviderFormValues) => { + console.log('📝 提交表单数据:', values); + // TODO: 提交接口 /update_provider + }; + + // if (!provider) return
加载中...
; + + return ( + +
+ + +
模型供应商配置
+ + {/* 名称 */} + ( + + 名称 + + + + + + )} + /> + + {/* API Key */} + ( + + API Key + + + + + + + + + + + )} + /> + + {/* Base URL */} + ( + + API 代理地址 + + + + + + )} + /> + + {/* 类型 */} + ( + + 类型 + + + + + )} + /> + +
+ +
+ + + ); +}; + +export default ProviderForm; \ No newline at end of file diff --git a/BillNote_frontend/src/components/Form/modelForm/Provider.tsx b/BillNote_frontend/src/components/Form/modelForm/Provider.tsx new file mode 100644 index 0000000..fbf013d --- /dev/null +++ b/BillNote_frontend/src/components/Form/modelForm/Provider.tsx @@ -0,0 +1,33 @@ +import ProviderCard from '@/components/Form/modelForm/components/providerCard.tsx' +import { Button } from '@/components/ui/button.tsx' +import { useProviderStore } from '@/store/providerStore' + +const Provider = () => { + const providers = useProviderStore(state => state.provider) + + + return ( +
+
+ +
+
模型供应商列表
+
+ {providers && + providers.map((provider, index) => { + return ( + + ) + })} +
+
+ ) +} +export default Provider diff --git a/BillNote_frontend/src/components/Form/modelForm/components/index.module.css b/BillNote_frontend/src/components/Form/modelForm/components/index.module.css new file mode 100644 index 0000000..469119f --- /dev/null +++ b/BillNote_frontend/src/components/Form/modelForm/components/index.module.css @@ -0,0 +1,6 @@ +.card { + transition: all 0.2s ease-in-out; +} +.card:hover { + background-color: #f7f7f7; +} diff --git a/BillNote_frontend/src/components/Form/modelForm/components/providerCard.tsx b/BillNote_frontend/src/components/Form/modelForm/components/providerCard.tsx new file mode 100644 index 0000000..b73f9d0 --- /dev/null +++ b/BillNote_frontend/src/components/Form/modelForm/components/providerCard.tsx @@ -0,0 +1,43 @@ +import { Switch } from '@/components/ui/switch' +import { FC } from 'react' +import styles from './index.module.css' +import {useNavigate, useParams} from 'react-router-dom' +import AILogo from "@/components/Icons"; +export interface IProviderCardProps { + id: string + providerName: string + Icon: string +} +const ProviderCard: FC = ({ providerName, Icon, id }: IProviderCardProps) => { + const navigate = useNavigate() + const handleClick = () => { + navigate(`/settings/model/${providerName}&id=${id}`) + } + const rawId= useParams(); + console.log('rawId',rawId) + // @ts-ignore + const { id: currentId } = useParams(); + const isActive = currentId === id + return ( +
{ + handleClick() + }} + className={ + styles.card + ' flex h-14 items-center justify-between rounded border border-[#f3f3f3] p-2' + +(isActive ? ' bg-[#F0F0F0] font-semibold text-blue-600' : '') + } + > +
+
+ +
+
{providerName}
+
+
+ +
+
+ ) +} +export default ProviderCard diff --git a/BillNote_frontend/src/components/Icons/iconMap.ts b/BillNote_frontend/src/components/Icons/iconMap.ts new file mode 100644 index 0000000..c30ec36 --- /dev/null +++ b/BillNote_frontend/src/components/Icons/iconMap.ts @@ -0,0 +1,4 @@ +// iconMap.ts +import * as Icons from '@lobehub/icons' + +export const IconMap = Icons; \ No newline at end of file diff --git a/BillNote_frontend/src/components/Icons/index.tsx b/BillNote_frontend/src/components/Icons/index.tsx new file mode 100644 index 0000000..ca8ac53 --- /dev/null +++ b/BillNote_frontend/src/components/Icons/index.tsx @@ -0,0 +1,24 @@ +import * as Icons from '@lobehub/icons'; + +interface AILogoProps { + name: string; // 图标名称(区分大小写!如 OpenAI、DeepSeek) + style?: 'Color' | 'Text' | 'Outlined' | 'Glyph'; + size?: number; +} + +const AILogo = ({ name, style = 'Color', size = 24 }: AILogoProps) => { + const Icon = Icons[name as keyof typeof Icons]; + if (!Icon) { + console.error(`❌ 图标组件不存在: ${name}`); + return 🚫; + } + + const Variant = Icon[style as keyof typeof Icon]; + if (!Variant) { + return ; + } + + return ; +}; + +export default AILogo; \ No newline at end of file diff --git a/BillNote_frontend/src/components/Lottie/404.tsx b/BillNote_frontend/src/components/Lottie/404.tsx new file mode 100644 index 0000000..0a9f16f --- /dev/null +++ b/BillNote_frontend/src/components/Lottie/404.tsx @@ -0,0 +1,13 @@ +import { FC } from 'react' +import Lottie from 'lottie-react' +import Animation from '@/assets/Lottie/404.json' + +const NotFound: FC = () => { + return ( +
+ +
+ ) +} + +export default NotFound diff --git a/BillNote_frontend/src/components/Lottie/Idle.tsx b/BillNote_frontend/src/components/Lottie/Idle.tsx index 709b8a5..59495a9 100644 --- a/BillNote_frontend/src/components/Lottie/Idle.tsx +++ b/BillNote_frontend/src/components/Lottie/Idle.tsx @@ -3,16 +3,11 @@ import Lottie from 'lottie-react' import loadingJson from '@/assets/Lottie/idle.json' const Idle: FC = () => { - return ( -
- -
- ) + return ( +
+ +
+ ) } export default Idle diff --git a/BillNote_frontend/src/components/Lottie/Loading.tsx b/BillNote_frontend/src/components/Lottie/Loading.tsx index 41f8c8a..4de2112 100644 --- a/BillNote_frontend/src/components/Lottie/Loading.tsx +++ b/BillNote_frontend/src/components/Lottie/Loading.tsx @@ -3,16 +3,11 @@ import Lottie from 'lottie-react' import loadingJson from '@/assets/Lottie/loading.json' const Loading: FC = () => { - return ( -
- -
- ) + return ( +
+ +
+ ) } export default Loading diff --git a/BillNote_frontend/src/components/ui/badge.tsx b/BillNote_frontend/src/components/ui/badge.tsx index 0205413..043b577 100644 --- a/BillNote_frontend/src/components/ui/badge.tsx +++ b/BillNote_frontend/src/components/ui/badge.tsx @@ -1,26 +1,24 @@ -import * as React from "react" -import { Slot } from "@radix-ui/react-slot" -import { cva, type VariantProps } from "class-variance-authority" +import * as React from 'react' +import { Slot } from '@radix-ui/react-slot' +import { cva, type VariantProps } from 'class-variance-authority' -import { cn } from "@/lib/utils" +import { cn } from '@/lib/utils' const badgeVariants = cva( - "inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden", + 'inline-flex items-center justify-center rounded-md border px-2 py-0.5 text-xs font-medium w-fit whitespace-nowrap shrink-0 [&>svg]:size-3 gap-1 [&>svg]:pointer-events-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive transition-[color,box-shadow] overflow-hidden', { variants: { variant: { - default: - "border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90", + default: 'border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90', secondary: - "border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90", + 'border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90', destructive: - "border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", - outline: - "text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground", + 'border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60', + outline: 'text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground', }, }, defaultVariants: { - variant: "default", + variant: 'default', }, } ) @@ -30,17 +28,10 @@ function Badge({ variant, asChild = false, ...props -}: React.ComponentProps<"span"> & - VariantProps & { asChild?: boolean }) { - const Comp = asChild ? Slot : "span" +}: React.ComponentProps<'span'> & VariantProps & { asChild?: boolean }) { + const Comp = asChild ? Slot : 'span' - return ( - - ) + return } export { Badge, badgeVariants } diff --git a/BillNote_frontend/src/components/ui/button.tsx b/BillNote_frontend/src/components/ui/button.tsx index a2df8dc..86546a6 100644 --- a/BillNote_frontend/src/components/ui/button.tsx +++ b/BillNote_frontend/src/components/ui/button.tsx @@ -1,36 +1,33 @@ -import * as React from "react" -import { Slot } from "@radix-ui/react-slot" -import { cva, type VariantProps } from "class-variance-authority" +import * as React from 'react' +import { Slot } from '@radix-ui/react-slot' +import { cva, type VariantProps } from 'class-variance-authority' -import { cn } from "@/lib/utils" +import { cn } from '@/lib/utils' const buttonVariants = cva( "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", { variants: { variant: { - default: - "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90", + default: 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90', destructive: - "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60", + 'bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60', outline: - "border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50", - secondary: - "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80", - ghost: - "hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50", - link: "text-primary underline-offset-4 hover:underline", + 'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50', + secondary: 'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80', + ghost: 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50', + link: 'text-primary underline-offset-4 hover:underline', }, size: { - default: "h-9 px-4 py-2 has-[>svg]:px-3", - sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5", - lg: "h-10 rounded-md px-6 has-[>svg]:px-4", - icon: "size-9", + default: 'h-9 px-4 py-2 has-[>svg]:px-3', + sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5', + lg: 'h-10 rounded-md px-6 has-[>svg]:px-4', + icon: 'size-9', }, }, defaultVariants: { - variant: "default", - size: "default", + variant: 'default', + size: 'default', }, } ) @@ -41,11 +38,11 @@ function Button({ size, asChild = false, ...props -}: React.ComponentProps<"button"> & +}: React.ComponentProps<'button'> & VariantProps & { asChild?: boolean }) { - const Comp = asChild ? Slot : "button" + const Comp = asChild ? Slot : 'button' return ( ) { +function Card({ className, ...props }: React.ComponentProps<'div'>) { return (
) { ) } -function CardHeader({ className, ...props }: React.ComponentProps<"div">) { +function CardHeader({ className, ...props }: React.ComponentProps<'div'>) { return (
) { ) } -function CardTitle({ className, ...props }: React.ComponentProps<"div">) { +function CardTitle({ className, ...props }: React.ComponentProps<'div'>) { return (
) } -function CardDescription({ className, ...props }: React.ComponentProps<"div">) { +function CardDescription({ className, ...props }: React.ComponentProps<'div'>) { return (
) } -function CardAction({ className, ...props }: React.ComponentProps<"div">) { +function CardAction({ className, ...props }: React.ComponentProps<'div'>) { return (
) } -function CardContent({ className, ...props }: React.ComponentProps<"div">) { - return ( -
- ) +function CardContent({ className, ...props }: React.ComponentProps<'div'>) { + return
} -function CardFooter({ className, ...props }: React.ComponentProps<"div">) { +function CardFooter({ className, ...props }: React.ComponentProps<'div'>) { return (
) } -export { - Card, - CardHeader, - CardFooter, - CardTitle, - CardAction, - CardDescription, - CardContent, -} +export { Card, CardHeader, CardFooter, CardTitle, CardAction, CardDescription, CardContent } diff --git a/BillNote_frontend/src/components/ui/checkbox.tsx b/BillNote_frontend/src/components/ui/checkbox.tsx index defeb01..2d2e45a 100644 --- a/BillNote_frontend/src/components/ui/checkbox.tsx +++ b/BillNote_frontend/src/components/ui/checkbox.tsx @@ -1,18 +1,15 @@ -import * as React from "react" -import * as CheckboxPrimitive from "@radix-ui/react-checkbox" -import { CheckIcon } from "lucide-react" +import * as React from 'react' +import * as CheckboxPrimitive from '@radix-ui/react-checkbox' +import { CheckIcon } from 'lucide-react' -import { cn } from "@/lib/utils" +import { cn } from '@/lib/utils' -function Checkbox({ - className, - ...props -}: React.ComponentProps) { +function Checkbox({ className, ...props }: React.ComponentProps) { return ( ( - {} as FormFieldContextValue -) +const FormFieldContext = React.createContext({} as FormFieldContextValue) const FormField = < TFieldValues extends FieldValues = FieldValues, @@ -48,7 +46,7 @@ const useFormField = () => { const fieldState = getFieldState(fieldContext.name, formState) if (!fieldContext) { - throw new Error("useFormField should be used within ") + throw new Error('useFormField should be used within ') } const { id } = itemContext @@ -67,35 +65,26 @@ type FormItemContextValue = { id: string } -const FormItemContext = React.createContext( - {} as FormItemContextValue -) +const FormItemContext = React.createContext({} as FormItemContextValue) -function FormItem({ className, ...props }: React.ComponentProps<"div">) { +function FormItem({ className, ...props }: React.ComponentProps<'div'>) { const id = React.useId() return ( -
+
) } -function FormLabel({ - className, - ...props -}: React.ComponentProps) { +function FormLabel({ className, ...props }: React.ComponentProps) { const { error, formItemId } = useFormField() return (
- ) -} - -export default MarkdownViewer diff --git a/BillNote_frontend/src/pages/components/NoteForm.tsx b/BillNote_frontend/src/pages/components/NoteForm.tsx deleted file mode 100644 index d714293..0000000 --- a/BillNote_frontend/src/pages/components/NoteForm.tsx +++ /dev/null @@ -1,287 +0,0 @@ -import { - Form, - FormControl, - FormDescription, - FormField, - FormItem, - FormLabel, - FormMessage, -} from "@/components/ui/form" -import { Input } from "@/components/ui/input" -import { - Select, - SelectContent, - SelectItem, - SelectTrigger, - SelectValue, -} from "@/components/ui/select" -import { Button } from "@/components/ui/button" -import { Checkbox } from "@/components/ui/checkbox" -import { useForm } from "react-hook-form" -import { z } from "zod" -import { zodResolver } from "@hookform/resolvers/zod" -import { Info,Clock } from "lucide-react" - -import {Tooltip, TooltipContent, TooltipProvider, TooltipTrigger} from "@/components/ui/tooltip.tsx"; -import {generateNote} from "@/services/note.ts"; -import {useTaskStore} from "@/store/taskStore"; -import { useState } from "react" -import NoteHistory from "@/pages/components/NoteHistory.tsx"; - -// ✅ 定义表单 schema -const formSchema = z.object({ - video_url: z.string().url("请输入正确的视频链接"), - platform: z.string().nonempty("请选择平台"), - quality: z.enum(["fast", "medium", "slow"], { - required_error: "请选择音频质量", - }), - screenshot: z.boolean().optional(), - link:z.boolean().optional(), -}) - - -type NoteFormValues = z.infer - -const NoteForm = () => { - const [selectedTaskId] = useState(null) - - const tasks = useTaskStore((state) => state.tasks) - const setCurrentTask=useTaskStore((state)=>state.setCurrentTask) - const currentTaskId=useTaskStore(state=>state.currentTaskId ) - tasks.find((t) => t.id === selectedTaskId); - const form = useForm({ - resolver: zodResolver(formSchema), - defaultValues: { - video_url: "", - platform: "bilibili", - quality: "medium", // 默认中等质量 - screenshot: false, - }, - }) - - - const isGenerating = false - - const onSubmit = async (data: NoteFormValues) => { - console.log("🎯 提交内容:", data) - await generateNote({ - video_url: data.video_url, - platform: data.platform, - quality: data.quality, - screenshot:data.screenshot, - link:data.link - }); - } - - return ( -
-
- -
-
-

视频链接

- - - - - - -

输入视频链接,支持哔哩哔哩、YouTube等平台

-
-
-
-
- -
- {/* 平台选择 */} - ( - - - - - )} - /> - - {/* 视频地址 */} - ( - - - - - - - )} - /> - -
- {/*

*/} - {/* 支持哔哩哔哩视频链接,例如:*/} - {/* https://www.bilibili.com/video/BV1vc25YQE9X/*/} - {/*

*/} - ( - -
-

音频质量

- - - - - - -

质量越高,下载体积越大,速度越慢

-
-
-
-
- - {/**/} - {/* 质量越高,下载体积越大,速度越慢*/} - {/**/} - -
- )} - /> - -
- - {/* 是否需要原片位置 */} - ( - - {/* Tooltip 部分 */} - - - - - - - - 是否插入内容跳转链接 - - - )} - /> - {/* 是否需要下载 */} - ( - - {/* Tooltip 部分 */} - - - - - - - - 是否插入视频截图 - - - )} - /> - - {/* 提交按钮 */} - - - - - - {/*生成历史 */} -
- -

生成历史

-
-
- - -
- - {/* 添加一些额外的说明或功能介绍 */} -
-

功能介绍

-
    -
  • - - 自动提取视频内容,生成结构化笔记 -
  • -
  • - - 支持多个视频平台,包括哔哩哔哩、YouTube等 -
  • -
  • - - 一键复制笔记,支持Markdown格式 -
  • -
  • - - 可选择是否插入图片 -
  • -
-
-
- ) -} - -export default NoteForm diff --git a/BillNote_frontend/src/pages/components/NoteFormWrapper.tsx b/BillNote_frontend/src/pages/components/NoteFormWrapper.tsx deleted file mode 100644 index b39329c..0000000 --- a/BillNote_frontend/src/pages/components/NoteFormWrapper.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { useForm } from "react-hook-form" -import { Form } from "@/components/ui/form" -import NoteForm from "./NoteForm" - -const NoteFormWrapper = () => { - const form = useForm() - - return ( -
- - - ) -} - -export default NoteFormWrapper diff --git a/BillNote_frontend/src/pages/components/NoteHistory.tsx b/BillNote_frontend/src/pages/components/NoteHistory.tsx deleted file mode 100644 index b870021..0000000 --- a/BillNote_frontend/src/pages/components/NoteHistory.tsx +++ /dev/null @@ -1,100 +0,0 @@ -import { useTaskStore } from "@/store/taskStore" -import { FC } from "react" -import { ScrollArea } from "@/components/ui/scroll-area" -import { Badge } from "@/components/ui/badge" -import { cn } from "@/lib/utils" -import { Trash ,Clock} from "lucide-react" -import { Button } from "@/components/ui/button" -import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip" - -interface NoteHistoryProps { - onSelect: (taskId: string) => void - selectedId: string | null -} - -const NoteHistory: FC = ({ onSelect, selectedId }) => { - const tasks = useTaskStore((state) => state.tasks) - const removeTask = useTaskStore((state) => state.removeTask) - - if (tasks.length === 0) { - return ( -
-

暂无历史记录

-
- ) - } - - return ( - - -
- {tasks.map((task) => ( -
onSelect(task.id)} - > - {/* 封面图 */} - 封面 - - {/* 标题 + 状态 */} - -
- - - -
{task.audioMeta.title || "未命名笔记"}
-
- -

{task.audioMeta.title || "未命名笔记"}

-
-
-
-
- {task.status === "SUCCESS" && 已完成} - {task.status === "PENDING" && 等待中} - {task.status === "FAILED" && 失败} -
-
- - - {/* 删除按钮 */} - - - - - - -

删除

-
-
-
-
- - ))} -
-
- ) -} - -export default NoteHistory diff --git a/BillNote_frontend/src/services/model.ts b/BillNote_frontend/src/services/model.ts new file mode 100644 index 0000000..f561baf --- /dev/null +++ b/BillNote_frontend/src/services/model.ts @@ -0,0 +1,5 @@ +import request from '@/utils/request.ts' + +export const getProviderList = async () => { + return await request.get('/get_all_providers') +} diff --git a/BillNote_frontend/src/services/note.ts b/BillNote_frontend/src/services/note.ts index 9ded547..a09d20b 100644 --- a/BillNote_frontend/src/services/note.ts +++ b/BillNote_frontend/src/services/note.ts @@ -1,97 +1,81 @@ -import request from "@/utils/request" +import request from '@/utils/request' import toast from 'react-hot-toast' -import {useTaskStore} from "@/store/taskStore"; -import request from "@/utils/request" -interface GenerateNotePayload { - video_url: string - platform: "bilibili" | "youtube" - quality: "fast" | "medium" | "slow" -} - +import { useTaskStore } from '@/store/taskStore' +import request from '@/utils/request' export const generateNote = async (data: { - video_url: string; - link: undefined | boolean; - screenshot: undefined | boolean; - platform: string; - quality: string + video_url: string + link: undefined | boolean + screenshot: undefined | boolean + platform: string + quality: string }) => { - try { - const response = await request.post("/generate_note", data) + try { + const response = await request.post('/generate_note', data) - if (response.data.code!=0){ - if (response.data.msg){ - toast.error(response.data.msg) - - } - return null - } - toast.success("笔记生成任务已提交!") - - const taskId = response.data.data.task_id - - console.log('res',response) - // 成功提示 - useTaskStore.getState().addPendingTask(taskId, data.platform) - - return response.data - } catch (e: any) { - console.error("❌ 请求出错", e) - - // 错误提示 - toast.error( - "笔记生成失败,请稍后重试" - ) - - throw e // 抛出错误以便调用方处理 + if (response.data.code != 0) { + if (response.data.msg) { + toast.error(response.data.msg) + } + return null } + toast.success('笔记生成任务已提交!') + + const taskId = response.data.data.task_id + + console.log('res', response) + // 成功提示 + useTaskStore.getState().addPendingTask(taskId, data.platform) + + return response.data + } catch (e: any) { + console.error('❌ 请求出错', e) + + // 错误提示 + toast.error('笔记生成失败,请稍后重试') + + throw e // 抛出错误以便调用方处理 + } } - - -export const delete_task = async ({video_id, platform}) => { - try { - const data={ - video_id,platform - } - const res = await request.post("/delete_task", - data - ) - - if (res.data.code === 0) { - toast.success("任务已成功删除") - return res.data - } else { - toast.error(res.data.message || "删除失败") - throw new Error(res.data.message || "删除失败") - } - } catch (e) { - toast.error("请求异常,删除任务失败") - console.error("❌ 删除任务失败:", e) - throw e +export const delete_task = async ({ video_id, platform }) => { + try { + const data = { + video_id, + platform, } + const res = await request.post('/delete_task', data) + + if (res.data.code === 0) { + toast.success('任务已成功删除') + return res.data + } else { + toast.error(res.data.message || '删除失败') + throw new Error(res.data.message || '删除失败') + } + } catch (e) { + toast.error('请求异常,删除任务失败') + console.error('❌ 删除任务失败:', e) + throw e + } } +export const get_task_status = async (task_id: string) => { + try { + const response = await request.get('/task_status/' + task_id) -export const get_task_status=async (task_id:string)=>{ - try { - const response = await request.get("/task_status/"+task_id) - - if (response.data.code==0 && response.data.status=='SUCCESS') { - // toast.success("笔记生成成功") - } - console.log('res',response) - // 成功提示 - - return response.data + if (response.data.code == 0 && response.data.status == 'SUCCESS') { + // toast.success("笔记生成成功") } - catch (e){ - console.error("❌ 请求出错", e) + console.log('res', response) + // 成功提示 - // 错误提示 - toast.error( - "笔记生成失败,请稍后重试" - ) + return response.data + } catch (e) { + console.error('❌ 请求出错', e) - throw e // 抛出错误以便调用方处理 - } -} \ No newline at end of file + // 错误提示 + toast.error('笔记生成失败,请稍后重试') + + throw e // 抛出错误以便调用方处理 + } +} diff --git a/BillNote_frontend/src/store/providerStore/index.ts b/BillNote_frontend/src/store/providerStore/index.ts new file mode 100644 index 0000000..4cbf286 --- /dev/null +++ b/BillNote_frontend/src/store/providerStore/index.ts @@ -0,0 +1,67 @@ +import { create } from 'zustand' +import { IProvider } from '@/types' +import { getProviderList } from '@/services/model.ts' + +interface ProviderStore { + provider: IProvider[] + setProvider: (provider: IProvider) => void + setAllProviders: (providers: IProvider[]) => void + getProviderById: (id: number) => IProvider | undefined + getProviderList: () => IProvider[] + fetchProviderList: () => Promise +} + +export const useProviderStore = create((set, get) => ({ + provider: [], + + + // 添加或更新一个 provider + setProvider: newProvider => + set(state => { + const exists = state.provider.find(p => p.id === newProvider.id) + if (exists) { + return { + provider: state.provider.map(p => (p.id === newProvider.id ? newProvider : p)), + } + } else { + return { provider: [...state.provider, newProvider] } + } + }), + + // 设置整个 provider 列表 + setAllProviders: providers => set({ provider: providers }), + + // 按 id 获取单个 provider + getProviderById: id => get().provider.find(p => p.id === id), + + getProviderList: () => get().provider, + fetchProviderList: async () => { + try { + const res = await getProviderList() + if (res.data.code === 0) { + set({ + provider: res.data.data.map( + (item: { + id: string + name: string + logo: string + api_key: string + base_url: string + }) => { + return { + id: item.id, + name: item.name, + logo: item.logo, + apiKey: item.api_key, + baseUrl: item.base_url, + type: item.type, + } + } + ), + }) + } + } catch (error) { + console.error('Error fetching provider list:', error) + } + }, +})) diff --git a/BillNote_frontend/src/store/taskStore/index.ts b/BillNote_frontend/src/store/taskStore/index.ts index 3367802..dae5486 100644 --- a/BillNote_frontend/src/store/taskStore/index.ts +++ b/BillNote_frontend/src/store/taskStore/index.ts @@ -1,124 +1,120 @@ import { create } from 'zustand' import { persist } from 'zustand/middleware' -import {delete_task} from "@/services/note.ts"; +import { delete_task } from '@/services/note.ts' export type TaskStatus = 'PENDING' | 'RUNNING' | 'SUCCESS' | 'FAILD' export interface AudioMeta { - cover_url: string - duration: number - file_path: string - platform: string - raw_info: any - title: string - video_id: string + cover_url: string + duration: number + file_path: string + platform: string + raw_info: any + title: string + video_id: string } export interface Segment { - start: number - end: number - text: string + start: number + end: number + text: string } export interface Transcript { - full_text: string - language: string - raw: any - segments: Segment[] + full_text: string + language: string + raw: any + segments: Segment[] } export interface Task { - id: string - markdown: string - transcript: Transcript - status: TaskStatus - audioMeta: AudioMeta - createdAt: string + id: string + markdown: string + transcript: Transcript + status: TaskStatus + audioMeta: AudioMeta + createdAt: string } interface TaskStore { - tasks: Task[] - currentTaskId: string | null - platform:string|null - addPendingTask: (taskId: string, platform: string) => void - updateTaskContent: (id: string, data: Partial>) => void - removeTask: (id: string) => void - clearTasks: () => void - setCurrentTask: (taskId: string | null) => void - getCurrentTask: () => Task | null + tasks: Task[] + currentTaskId: string | null + addPendingTask: (taskId: string, platform: string) => void + updateTaskContent: (id: string, data: Partial>) => void + removeTask: (id: string) => void + clearTasks: () => void + setCurrentTask: (taskId: string | null) => void + getCurrentTask: () => Task | null } export const useTaskStore = create()( - persist( - (set,get) => ({ - tasks: [], - currentTaskId: null, + persist( + (set, get) => ({ + tasks: [], + currentTaskId: null, - addPendingTask: (taskId: string,platform: string) => - set((state) => ({ - tasks: [ - { - id: taskId, - status: "PENDING", - markdown: "", - platform:platform, - transcript: { - full_text: "", - language: "", - raw: null, - segments: [], - }, - createdAt: new Date().toISOString(), - audioMeta: { - cover_url: "", - duration: 0, - file_path: "", - platform: '', - raw_info: null, - title: "", - video_id: "", - }, - }, - ...state.tasks, - ], - currentTaskId: taskId, // 默认设置为当前任务 - })), - - updateTaskContent: (id, data) => - set((state) => ({ - tasks: state.tasks.map((task) => - task.id === id ? { ...task, ...data } : task - ), - })), - getCurrentTask: () => { - const currentTaskId = get().currentTaskId - return get().tasks.find((task) => task.id === currentTaskId) || null + addPendingTask: (taskId: string, platform: string) => + set(state => ({ + tasks: [ + { + id: taskId, + status: 'PENDING', + markdown: '', + platform: platform, + transcript: { + full_text: '', + language: '', + raw: null, + segments: [], + }, + createdAt: new Date().toISOString(), + audioMeta: { + cover_url: '', + duration: 0, + file_path: '', + platform: '', + raw_info: null, + title: '', + video_id: '', + }, }, - removeTask: async (id) => { - const task = get().tasks.find((t) => t.id === id) + ...state.tasks, + ], + currentTaskId: taskId, // 默认设置为当前任务 + })), - // 更新 Zustand 状态 - set((state) => ({ - tasks: state.tasks.filter((task) => task.id !== id), - currentTaskId: state.currentTaskId === id ? null : state.currentTaskId, - })) + updateTaskContent: (id, data) => + set(state => ({ + tasks: state.tasks.map(task => (task.id === id ? { ...task, ...data } : task)), + })), + getCurrentTask: () => { + const currentTaskId = get().currentTaskId + return get().tasks.find(task => task.id === currentTaskId) || null + }, + removeTask: async id => { + const task = get().tasks.find(t => t.id === id) - // 调用后端删除接口(如果找到了任务) - if (task) { - await delete_task({ - video_id: task.audioMeta.video_id, - platform: task.platform, - }) - } - }, + // 更新 Zustand 状态 + set(state => ({ + tasks: state.tasks.filter(task => task.id !== id), + currentTaskId: state.currentTaskId === id ? null : state.currentTaskId, + })) - - clearTasks: () => set({ tasks: [], currentTaskId: null }), - - setCurrentTask: (taskId) => set({ currentTaskId: taskId }), - }), - { - name: 'task-storage', + // 调用后端删除接口(如果找到了任务) + if (task) { + await delete_task({ + video_id: task.audioMeta.video_id, + platform: task.platform, + }) } - ) + }, + + clearTasks: () => set({ tasks: [], currentTaskId: null }), + + setCurrentTask: taskId => set({ currentTaskId: taskId }), + }), + { + name: 'task-storage', + } + ) ) diff --git a/BillNote_frontend/src/types/index.d.ts b/BillNote_frontend/src/types/index.d.ts new file mode 100644 index 0000000..312c2f5 --- /dev/null +++ b/BillNote_frontend/src/types/index.d.ts @@ -0,0 +1,8 @@ +export interface IProvider { + id: string + name: string + logo: string + type: string + apiKey: string + baseUrl: string +} diff --git a/BillNote_frontend/src/utils/index.ts b/BillNote_frontend/src/utils/index.ts new file mode 100644 index 0000000..2118643 --- /dev/null +++ b/BillNote_frontend/src/utils/index.ts @@ -0,0 +1,9 @@ +// 解析URL +export function parseUrl(url: string): { protocol: string, host: string, path: string } { + const urlObj = new URL(url); + return { + protocol: urlObj.protocol, + host: urlObj.host, + path: urlObj.pathname + }; +} \ No newline at end of file diff --git a/BillNote_frontend/src/utils/request.ts b/BillNote_frontend/src/utils/request.ts index 20b8a6e..e261220 100644 --- a/BillNote_frontend/src/utils/request.ts +++ b/BillNote_frontend/src/utils/request.ts @@ -1,8 +1,8 @@ -import axios from "axios" +import axios from 'axios' const request = axios.create({ - baseURL: "/api", // 默认请求路径前缀 - timeout: 10000, + baseURL: '/api', // 默认请求路径前缀 + timeout: 10000, }) -export default request \ No newline at end of file +export default request diff --git a/BillNote_frontend/tailwind.config.cjs b/BillNote_frontend/tailwind.config.cjs index f6470d1..71b18f8 100644 --- a/BillNote_frontend/tailwind.config.cjs +++ b/BillNote_frontend/tailwind.config.cjs @@ -1,11 +1,8 @@ /** @type {import('tailwindcss').Config} */ module.exports = { - content: [ - './index.html', - './src/**/*.{vue,js,ts,js,jsx,tsx}' - ], - theme: { - extend: {}, - }, - plugins: [], -}; \ No newline at end of file + content: ['./index.html', './src/**/*.{vue,js,ts,js,jsx,tsx}'], + theme: { + extend: {}, + }, + plugins: [], +} diff --git a/BillNote_frontend/tsconfig.app.json b/BillNote_frontend/tsconfig.app.json index b6f0da4..2ed0104 100644 --- a/BillNote_frontend/tsconfig.app.json +++ b/BillNote_frontend/tsconfig.app.json @@ -24,9 +24,7 @@ "baseUrl": ".", "paths": { - "@/*": [ - "./src/*" - ] + "@/*": ["./src/*"] } }, "include": ["src"] diff --git a/BillNote_frontend/tsconfig.json b/BillNote_frontend/tsconfig.json index fec8c8e..2b78387 100644 --- a/BillNote_frontend/tsconfig.json +++ b/BillNote_frontend/tsconfig.json @@ -1,9 +1,6 @@ { "files": [], - "references": [ - { "path": "./tsconfig.app.json" }, - { "path": "./tsconfig.node.json" } - ], + "references": [{ "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" }], "compilerOptions": { "baseUrl": ".", "paths": { diff --git a/BillNote_frontend/vite.config.ts b/BillNote_frontend/vite.config.ts index 542074d..cd017d1 100644 --- a/BillNote_frontend/vite.config.ts +++ b/BillNote_frontend/vite.config.ts @@ -1,7 +1,7 @@ import { defineConfig, loadEnv } from 'vite' import react from '@vitejs/plugin-react' -import path from "path" -import tailwindcss from "@tailwindcss/vite" +import path from 'path' +import tailwindcss from '@tailwindcss/vite' // https://vitejs.dev/config/ export default defineConfig(({ mode }) => { @@ -13,7 +13,7 @@ export default defineConfig(({ mode }) => { plugins: [react(), tailwindcss()], resolve: { alias: { - "@": path.resolve(__dirname, "./src"), + '@': path.resolve(__dirname, './src'), }, }, server: { @@ -28,4 +28,4 @@ export default defineConfig(({ mode }) => { }, }, } -}) \ No newline at end of file +}) diff --git a/backend/app/__init__.py b/backend/app/__init__.py index 7e9514f..262916a 100644 --- a/backend/app/__init__.py +++ b/backend/app/__init__.py @@ -1,8 +1,9 @@ from fastapi import FastAPI -from .routers import note +from .routers import note, provider def create_app() -> FastAPI: app = FastAPI(title="BiliNote") app.include_router(note.router, prefix="/api") + app.include_router(provider.router, prefix="/api") return app diff --git a/backend/app/db/provider_dao.py b/backend/app/db/provider_dao.py new file mode 100644 index 0000000..2b11c6a --- /dev/null +++ b/backend/app/db/provider_dao.py @@ -0,0 +1,131 @@ +from app.db.sqlite_client import get_connection +from app.utils.logger import get_logger + +logger = get_logger(__name__) + +def init_provider_table(): + conn = get_connection() + if conn is None: + logger.error("Failed to connect to the database.") + return + cursor = conn.cursor() + cursor.execute(""" + CREATE TABLE IF NOT EXISTS providers ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + logo TEXT NOT NULL, + type TEXT NOT NULL, -- ✅ 新增字段 + api_key TEXT NOT NULL, + base_url TEXT NOT NULL, + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ) + """) + try: + conn.commit() + conn.close() + logger.info("provider table created successfully.") + except Exception as e: + logger.error(f"Failed to create provider table: {e}") +def insert_provider(name: str, api_key: str, base_url: str, logo: str, type_: str): + conn = get_connection() + if conn is None: + logger.error("Failed to connect to the database.") + return + cursor = conn.cursor() + cursor.execute(""" + INSERT INTO providers (name, api_key, base_url, logo, type) + VALUES (?, ?, ?, ?, ?) + """, (name, api_key, base_url, logo, type_)) + try: + conn.commit() + cursor_id = cursor.lastrowid + conn.close() + logger.info(f"Provider inserted successfully. name: {name}, type: {type_}") + return cursor_id + except Exception as e: + logger.error(f"Failed to insert provider: {e}") + return None +def get_provider_by_name(name: str): + conn = get_connection() + if conn is None: + logger.error("Failed to connect to the database.") + return + cursor = conn.cursor() + cursor.execute("SELECT * FROM providers WHERE name = ?", (name,)) + try: + row = cursor.fetchone() + conn.close() + if row is None: + logger.info(f"Provider not found: {name}") + return None + logger.info(f"Provider found: {row}") + return row + except Exception as e: + logger.error(f"Failed to get provider by name: {e}") + +def get_provider_by_id(id: int): + conn = get_connection() + if conn is None: + logger.error("Failed to connect to the database.") + return + cursor = conn.cursor() + cursor.execute("SELECT * FROM providers WHERE id = ?", (id,)) + try: + row = cursor.fetchone() + conn.close() + if row is None: + logger.info(f"Provider not found: {id}") + return None + logger.info(f"Provider found: {row}") + return row + except Exception as e: + logger.error(f"Failed to get provider by id: {e}") + +def get_all_providers(): + conn = get_connection() + if conn is None: + logger.error("Failed to connect to the database.") + return + cursor = conn.cursor() + cursor.execute("SELECT * FROM providers") + try: + rows = cursor.fetchall() + conn.close() + if rows is None: + logger.info("No providers found") + return None + logger.info(f"Providers found: {rows}") + return rows + except Exception as e: + logger.error(f"Failed to get all providers: {e}") + +def update_provider(id: int, name: str, api_key: str, base_url: str, logo: str, type_: str): + conn = get_connection() + if conn is None: + logger.error("Failed to connect to the database.") + return + cursor = conn.cursor() + cursor.execute(""" + UPDATE providers + SET name = ?, api_key = ?, base_url = ?, logo = ?, type = ? + WHERE id = ? + """, (name, api_key, base_url, logo, type_, id)) + try: + conn.commit() + conn.close() + logger.info(f"Provider updated successfully. id: {id}, type: {type_}") + except Exception as e: + logger.error(f"Failed to update provider: {e}") +def delete_provider(id: int): + conn = get_connection() + if conn is None: + logger.error("Failed to connect to the database.") + return + cursor = conn.cursor() + cursor.execute("DELETE FROM providers WHERE id = ?", (id,)) + try: + conn.commit() + conn.close() + logger.info(f"Provider deleted successfully. id: {id}") + except Exception as e: + logger.error(f"Failed to delete provider: {e}") \ No newline at end of file diff --git a/backend/app/db/sqlite_client.py b/backend/app/db/sqlite_client.py index e3fea0d..9d686eb 100644 --- a/backend/app/db/sqlite_client.py +++ b/backend/app/db/sqlite_client.py @@ -1,4 +1,4 @@ import sqlite3 def get_connection(): - return sqlite3.connect("note_tasks.db") + return sqlite3.connect("bili_note.db") diff --git a/backend/app/downloaders/bilibili_downloader.py b/backend/app/downloaders/bilibili_downloader.py index dad8e7c..f167160 100644 --- a/backend/app/downloaders/bilibili_downloader.py +++ b/backend/app/downloaders/bilibili_downloader.py @@ -31,6 +31,13 @@ class BilibiliDownloader(Downloader, ABC): ydl_opts = { 'format': 'bestaudio[ext=m4a]/bestaudio/best', 'outtmpl': output_path, + 'postprocessors': [ + { + 'key': 'FFmpegExtractAudio', + 'preferredcodec': 'mp3', + 'preferredquality': '64', + } + ], 'noplaylist': True, 'quiet': False, } @@ -41,7 +48,7 @@ class BilibiliDownloader(Downloader, ABC): title = info.get("title") duration = info.get("duration", 0) cover_url = info.get("thumbnail") - audio_path = os.path.join(output_dir, f"{video_id}.m4a") + audio_path = os.path.join(output_dir, f"{video_id}.mp3") return AudioDownloadResult( file_path=audio_path, @@ -69,7 +76,7 @@ class BilibiliDownloader(Downloader, ABC): output_path = os.path.join(output_dir, "%(id)s.%(ext)s") ydl_opts = { - 'format': 'bv*+ba/bestvideo+bestaudio/best', + 'format': 'bv*[ext=mp4]/bestvideo+bestaudio/best', 'outtmpl': output_path, 'noplaylist': True, 'quiet': False, diff --git a/backend/app/downloaders/douyin_downloader.py b/backend/app/downloaders/douyin_downloader.py index 9e53613..b0cc9f0 100644 --- a/backend/app/downloaders/douyin_downloader.py +++ b/backend/app/downloaders/douyin_downloader.py @@ -27,6 +27,13 @@ class DouyinDownloader(Downloader, ABC): ydl_opts = { 'format': 'bestaudio[ext=m4a]/bestaudio/best', 'outtmpl': output_path, + 'postprocessors': [ + { + 'key': 'FFmpegExtractAudio', + 'preferredcodec': 'mp3', + 'preferredquality': '64', + } + ], 'noplaylist': True, 'quiet': False, } @@ -37,7 +44,7 @@ class DouyinDownloader(Downloader, ABC): title = info.get("title") duration = info.get("duration", 0) cover_url = info.get("thumbnail") - audio_path = os.path.join(output_dir, f"{video_id}.m4a") + audio_path = os.path.join(output_dir, f"{video_id}.mp3") return AudioDownloadResult( file_path=audio_path, diff --git a/backend/app/downloaders/youtube_downloader.py b/backend/app/downloaders/youtube_downloader.py index a9a9bdd..d639d2f 100644 --- a/backend/app/downloaders/youtube_downloader.py +++ b/backend/app/downloaders/youtube_downloader.py @@ -42,7 +42,7 @@ class YoutubeDownloader(Downloader, ABC): title = info.get("title") duration = info.get("duration", 0) cover_url = info.get("thumbnail") - audio_path = os.path.join(output_dir, f"{video_id}.m4a") + audio_path = os.path.join(output_dir, f"{video_id}.mp3") return AudioDownloadResult( file_path=audio_path, diff --git a/backend/app/gpt/base.py b/backend/app/gpt/base.py index f1e7914..058ea6c 100644 --- a/backend/app/gpt/base.py +++ b/backend/app/gpt/base.py @@ -10,4 +10,8 @@ class GPT(ABC): :param source: :return: ''' + pass + def create_messages(self, segments:list,**kwargs)->list: + pass + def list_models(self): pass \ No newline at end of file diff --git a/backend/app/gpt/gpt_factory.py b/backend/app/gpt/gpt_factory.py new file mode 100644 index 0000000..b433572 --- /dev/null +++ b/backend/app/gpt/gpt_factory.py @@ -0,0 +1,13 @@ +from openai import OpenAI + +from app.gpt.base import GPT +from app.gpt.provider.OpenAI_compatible_provider import OpenAICompatibleProvider +from app.gpt.universal_gpt import UniversalGPT +from app.models.model_config import ModelConfig + + +class GPTFactory: + @staticmethod + def from_config(config: ModelConfig) -> GPT: + client = OpenAICompatibleProvider(api_key=config.api_key, base_url=config.base_url).get_client() + return UniversalGPT(client=client, model=config.model_name) \ No newline at end of file diff --git a/backend/app/gpt/openai_gpt.py b/backend/app/gpt/openai_gpt.py index 32ee989..1b85af1 100644 --- a/backend/app/gpt/openai_gpt.py +++ b/backend/app/gpt/openai_gpt.py @@ -2,6 +2,7 @@ from typing import List from app.gpt.base import GPT from openai import OpenAI from app.gpt.prompt import BASE_PROMPT, AI_SUM, SCREENSHOT, LINK +from app.gpt.provider.OpenAI_compatible_provider import OpenAICompatibleProvider from app.gpt.utils import fix_markdown from app.models.gpt_model import GPTSource from app.models.transcriber_model import TranscriptSegment @@ -15,7 +16,7 @@ class OpenaiGPT(GPT): self.base_url = getenv("OPENAI_API_BASE_URL") self.model=getenv('OPENAI_MODEL') print(self.model) - self.client = OpenAI(api_key=self.api_key, base_url=self.base_url) + self.client = OpenAICompatibleProvider(api_key=self.api_key, base_url=self.base_url) self.screenshot = False self.link=False @@ -49,17 +50,20 @@ class OpenaiGPT(GPT): print(content) return [{"role": "user", "content": content + AI_SUM}] - + def list_models(self): + return self.client.list_models() def summarize(self, source: GPTSource) -> str: self.screenshot = source.screenshot self.link = source.link source.segment = self.ensure_segments_type(source.segment) messages = self.create_messages(source.segment, source.title,source.tags) - response = self.client.chat.completions.create( + response = self.client.chat( model=self.model, messages=messages, temperature=0.7 ) return response.choices[0].message.content.strip() - +if __name__ == '__main__': + gpt = OpenaiGPT() + print(gpt.list_models()) diff --git a/backend/app/gpt/provider/OpenAI_compatible_provider.py b/backend/app/gpt/provider/OpenAI_compatible_provider.py new file mode 100644 index 0000000..111fc66 --- /dev/null +++ b/backend/app/gpt/provider/OpenAI_compatible_provider.py @@ -0,0 +1,22 @@ +from typing import Optional, Union + +from openai import OpenAI + +class OpenAICompatibleProvider: + def __init__(self, api_key: str, base_url: str, model: Union[str, None]=None): + self.client = OpenAI(api_key=api_key, base_url=base_url) + self.model = model + + @property + def get_client(self): + return self.client + + @staticmethod + def test_connection(api_key: str, base_url: str) -> bool: + try: + client = OpenAI(api_key=api_key, base_url=base_url) + client.models.list() + return True + except Exception as e: + print(f"Error connecting to OpenAI API: {e}") + return False \ No newline at end of file diff --git a/backend/app/gpt/qwen_gpt.py b/backend/app/gpt/qwen_gpt.py index 2268a1c..c39e879 100644 --- a/backend/app/gpt/qwen_gpt.py +++ b/backend/app/gpt/qwen_gpt.py @@ -2,6 +2,7 @@ from typing import List from app.gpt.base import GPT from openai import OpenAI from app.gpt.prompt import BASE_PROMPT, AI_SUM, SCREENSHOT +from app.gpt.provider.OpenAI_compatible_provider import OpenAICompatibleProvider from app.gpt.utils import fix_markdown from app.models.gpt_model import GPTSource from app.models.transcriber_model import TranscriptSegment @@ -15,7 +16,7 @@ class QwenGPT(GPT): self.base_url = getenv("QWEN_API_BASE_URL") self.model=getenv('QWEN_MODEL') print(self.model) - self.client = OpenAI(api_key=self.api_key, base_url=self.base_url) + self.client = OpenAICompatibleProvider(api_key=self.api_key, base_url=self.base_url) self.screenshot = False def _format_time(self, seconds: float) -> str: @@ -44,7 +45,8 @@ class QwenGPT(GPT): content += SCREENSHOT print(content) return [{"role": "user", "content": content + AI_SUM}] - + def list_models(self): + return self.client.list_models() def summarize(self, source: GPTSource) -> str: self.screenshot = source.screenshot source.segment = self.ensure_segments_type(source.segment) @@ -56,4 +58,6 @@ class QwenGPT(GPT): ) return response.choices[0].message.content.strip() - +if __name__ == '__main__': + gpt = QwenGPT() + print(gpt.list_models()) diff --git a/backend/app/gpt/test.py b/backend/app/gpt/test.py new file mode 100644 index 0000000..dec785e --- /dev/null +++ b/backend/app/gpt/test.py @@ -0,0 +1,17 @@ +from app.models.model_config import ModelConfig + +if __name__ == '__main__': + from app.gpt.gpt_factory import GPTFactory + # 构建模型config + config=ModelConfig( + id='asas', + api_key='', + base_url='', + model_name="gpt-4o", + provider='openai', + name='gpt-4o' + ) + # 构建GPT + gpt=GPTFactory().from_config(config) + + diff --git a/backend/app/gpt/universal_gpt.py b/backend/app/gpt/universal_gpt.py new file mode 100644 index 0000000..2ed7993 --- /dev/null +++ b/backend/app/gpt/universal_gpt.py @@ -0,0 +1,62 @@ +from app.gpt.base import GPT +from app.models.gpt_model import GPTSource +from app.gpt.prompt import BASE_PROMPT, AI_SUM, SCREENSHOT, LINK +from app.gpt.utils import fix_markdown +from app.models.transcriber_model import TranscriptSegment +from datetime import timedelta +from typing import List + +class UniversalGPT(GPT): + def __init__(self, client, model: str, temperature: float = 0.7): + self.client = client + self.model = model + self.temperature = temperature + self.screenshot = False + self.screenshot = False + self.link = False + + def _format_time(self, seconds: float) -> str: + return str(timedelta(seconds=int(seconds)))[2:] + + def _build_segment_text(self, segments: List[TranscriptSegment]) -> str: + return "\n".join( + f"{self._format_time(seg.start)} - {seg.text.strip()}" + for seg in segments + ) + + def ensure_segments_type(self, segments) -> List[TranscriptSegment]: + return [TranscriptSegment(**seg) if isinstance(seg, dict) else seg for seg in segments] + + def create_messages(self, segments: List[TranscriptSegment],**kwargs): + content = BASE_PROMPT.format( + video_title=kwargs.get('title'), + segment_text=self._build_segment_text(segments), + tags=kwargs.get('tags') + ) + if self.screenshot: + print(":需要截图") + content += SCREENSHOT + if self.link: + print(":需要链接") + content += LINK + + print(content) + return [{"role": "user", "content": content + AI_SUM}] + + def list_models(self): + return self.client.list_models() + def summarize(self, source: GPTSource) -> str: + self.screenshot = source.screenshot + self.link = source.link + source.segment = self.ensure_segments_type(source.segment) + messages = self.create_messages(source.segment, source.title,source.tags) + response = self.client.chat( + model=self.model, + messages=messages, + temperature=0.7 + ) + return response.choices[0].message.content.strip() + +if __name__ == '__main__': + print('s') + diff --git a/backend/app/models/model_config.py b/backend/app/models/model_config.py new file mode 100644 index 0000000..1d466d1 --- /dev/null +++ b/backend/app/models/model_config.py @@ -0,0 +1,16 @@ +from dataclasses import dataclass +from datetime import datetime +from typing import Optional + + +@dataclass +class ModelConfig: + """ + 存储每个模型提供商的调用参数信息,用于从数据库读取并动态构建 GPT 调用实例。 + """ + name: str # 展示名,如 "GPT-4 Turbo"(用于前端展示) + provider: str # 模型提供商,如 "openai"、"qwen"、"deepseek" + api_key: str # 调用该模型使用的 API Key + base_url: str # 模型 API 接口地址(OpenAI SDK兼容) + model_name: str # 实际请求用的模型名称,如 "gpt-4-turbo" + created_at: Optional[datetime] = None # 可选:创建时间(从 SQLite 自动生成) \ No newline at end of file diff --git a/backend/app/models/provide_model.py b/backend/app/models/provide_model.py new file mode 100644 index 0000000..0100925 --- /dev/null +++ b/backend/app/models/provide_model.py @@ -0,0 +1,16 @@ +from dataclasses import dataclass +from datetime import datetime +from typing import Optional + + +@dataclass +class ProviderModel: + """ + 存储每个模型提供商的调用参数信息,用于从数据库读取并动态构建 GPT 调用实例。 + """ + id: str # 模型唯一 ID(推荐用 UUID) + logo: str # 模型图标 URL + name: str # 展示名,如 "GPT-4 Turbo"(用于前端展示) + api_key: str # 调用该模型使用的 API Key + base_url: str # 模型 API 接口地址(OpenAI SDK兼容) + created_at: Optional[datetime] = None # 可选:创建时间(从 SQLite 自动生成) \ No newline at end of file diff --git a/backend/app/routers/provider.py b/backend/app/routers/provider.py new file mode 100644 index 0000000..dd0dd78 --- /dev/null +++ b/backend/app/routers/provider.py @@ -0,0 +1,82 @@ +from typing import Optional +from fastapi import APIRouter +from pydantic import BaseModel +from app.utils.response import ResponseWrapper as R +from app.services.provider import ProviderService + +router = APIRouter() + +# ✅ 新增 type 字段 +class ProviderRequest(BaseModel): + name: str + api_key: str + base_url: str + logo: str + type: str + +class ProviderUpdateRequest(BaseModel): + id: int + name: Optional[str] = None + api_key: Optional[str] = None + base_url: Optional[str] = None + logo: Optional[str] = None + type: Optional[str] = None + +@router.post("/add_provider") +def add_provider(data: ProviderRequest): + try: + ProviderService.add_provider( + name=data.name, + api_key=data.api_key, + base_url=data.base_url, + logo=data.logo, + type_=data.type + ) + return R.success(msg='添加模型供应商成功') + except Exception as e: + return R.error(msg=e) + +@router.get("/get_all_providers") +def get_all_providers(): + try: + res = ProviderService.get_all_providers() + return R.success(data=res) + except Exception as e: + return R.error(msg=e) + +@router.get("/get_provider_by_id/{id}") +def get_provider_by_id(id: int): + try: + res = ProviderService.get_provider_by_id(id) + return R.success(data=res) + except Exception as e: + return R.error(msg=e) + +@router.get("/get_provider_by_name/{name}") +def get_provider_by_name(name: str): + try: + res = ProviderService.get_provider_by_name(name) + return R.success(data=res) + except Exception as e: + return R.error(msg=e) + +@router.post("/update_provider/") +def update_provider(data: ProviderUpdateRequest): + try: + if all( + field is None + for field in [data.name, data.api_key, data.base_url, data.logo, data.type] + ): + return R.error(msg='请至少填写一个参数') + + ProviderService.update_provider( + id=data.id, + name=data.name or '', + api_key=data.api_key or '', + base_url=data.base_url or '', + logo=data.logo or '', + type_=data.type or '' + ) + return R.success(msg='更新模型供应商成功') + except Exception as e: + return R.error(msg=e) \ No newline at end of file diff --git a/backend/app/services/model.py b/backend/app/services/model.py new file mode 100644 index 0000000..fa8c042 --- /dev/null +++ b/backend/app/services/model.py @@ -0,0 +1,23 @@ +from app.gpt.gpt_factory import GPTFactory +from app.models.model_config import ModelConfig +from app.services.provider import ProviderService + + +class ModelService: + @staticmethod + def get_model_list(provider_id: int): + provider=ProviderService.get_provider_by_id(provider_id) + if not provider: + return [] + config=ModelConfig( + api_key=provider.api_key, + base_url=provider.base_url, + provider=provider.name, + model_name='', + name=provider.name, + ) + GPT=GPTFactory().from_config(config) + return GPT.list_models() + +if __name__ == '__main__': + print(ModelService.get_model_list(1)) \ No newline at end of file diff --git a/backend/app/services/note.py b/backend/app/services/note.py index 5a3020d..68adedb 100644 --- a/backend/app/services/note.py +++ b/backend/app/services/note.py @@ -53,21 +53,18 @@ class NoteGenerator: def get_gpt(self) -> GPT: - self.provider = self.provider.lower() if self.provider == 'openai': logger.info("使用OpenAI") return OpenaiGPT() - elif self.provider == 'deepseek': + elif self.provider == 'deepSeek': logger.info("使用DeepSeek") return DeepSeekGPT() elif self.provider == 'qwen': logger.info("使用Qwen") return QwenGPT() else: - self.provider = 'openai' - logger.warning("不支持的AI提供商,使用 OpenAI 做完GPT") - return OpenaiGPT() - + logger.warning("不支持的AI提供商") + raise ValueError(f"不支持的AI提供商:{self.provider}") def get_downloader(self, platform: str) -> Downloader: if platform == "bilibili": @@ -162,9 +159,9 @@ class NoteGenerator: # 1. 选择下载器 downloader = self.get_downloader(platform) gpt = self.get_gpt() - logger.info(f'使用{downloader.__class__.__name__}下载器') - logger.info(f'使用{gpt.__class__.__name__}GPT') - logger.info(f'视频地址:{video_url}') + logger.info(f'使用{downloader.__class__.__name__}下载器\n' + f'使用{gpt.__class__.__name__}GPT\n' + f'视频地址:{video_url}') if screenshot: video_path = downloader.download_video(video_url) diff --git a/backend/app/services/provider.py b/backend/app/services/provider.py new file mode 100644 index 0000000..b02602e --- /dev/null +++ b/backend/app/services/provider.py @@ -0,0 +1,54 @@ +from app.db.provider_dao import ( + insert_provider, + init_provider_table, + get_all_providers, + get_provider_by_name, + get_provider_by_id, + update_provider, + delete_provider, +) + +class ProviderService: + + @staticmethod + def add_provider(name: str, api_key: str, base_url: str, logo: str, type_: str): + return insert_provider(name, api_key, base_url, logo, type_) + + @staticmethod + def get_all_providers(): + provider_list = [] + provider = get_all_providers() + + for i in provider: + provider_list.append({ + "id": i[0], + "name": i[1], + "logo": i[2], + "type": i[3], # ✅ 加上类型 + "api_key": i[4], + "base_url": i[5], + }) + return provider_list + + @staticmethod + def get_provider_by_name(name: str): + return get_provider_by_name(name) + + @staticmethod + def get_provider_by_id(id: int): + return get_provider_by_id(id) + + @staticmethod + def update_provider( + id: int, + name: str, + api_key: str, + base_url: str, + logo: str, + type_: str + ): + return update_provider(id, name, api_key, base_url, logo, type_) + + @staticmethod + def delete_provider(id: int): + return delete_provider(id) \ No newline at end of file diff --git a/backend/app/transcriber/bcut.py b/backend/app/transcriber/bcut.py deleted file mode 100644 index e1f5c92..0000000 --- a/backend/app/transcriber/bcut.py +++ /dev/null @@ -1,250 +0,0 @@ -import json -import logging -import time -from typing import Optional, List, Dict, Union - -import requests - -from app.decorators.timeit import timeit -from app.models.transcriber_model import TranscriptSegment, TranscriptResult -from app.transcriber.base import Transcriber -from app.utils.logger import get_logger -from events import transcription_finished - -__version__ = "0.0.3" - -API_BASE_URL = "https://member.bilibili.com/x/bcut/rubick-interface" - -# 申请上传 -API_REQ_UPLOAD = API_BASE_URL + "/resource/create" - -# 提交上传 -API_COMMIT_UPLOAD = API_BASE_URL + "/resource/create/complete" - -# 创建任务 -API_CREATE_TASK = API_BASE_URL + "/task" - -# 查询结果 -API_QUERY_RESULT = API_BASE_URL + "/task/result" - -logger = get_logger(__name__) - -class BcutTranscriber(Transcriber): - """必剪 语音识别接口""" - headers = { - 'User-Agent': 'Bilibili/1.0.0 (https://www.bilibili.com)', - 'Content-Type': 'application/json' - } - - def __init__(self): - self.session = requests.Session() - self.task_id = None - self.__etags = [] - - self.__in_boss_key: Optional[str] = None - self.__resource_id: Optional[str] = None - self.__upload_id: Optional[str] = None - self.__upload_urls: List[str] = [] - self.__per_size: Optional[int] = None - self.__clips: Optional[int] = None - - self.__etags: List[str] = [] - self.__download_url: Optional[str] = None - self.task_id: Optional[str] = None - - def _load_file(self, file_path: str) -> bytes: - """读取文件内容""" - with open(file_path, 'rb') as f: - return f.read() - - def _upload(self, file_path: str) -> None: - """申请上传""" - file_binary = self._load_file(file_path) - if not file_binary: - raise ValueError("无法读取文件数据") - - payload = json.dumps({ - "type": 2, - "name": "audio.mp3", - "size": len(file_binary), - "ResourceFileType": "mp3", - "model_id": "8", - }) - - resp = self.session.post( - API_REQ_UPLOAD, - data=payload, - headers=self.headers - ) - resp.raise_for_status() - resp = resp.json() - resp_data = resp["data"] - - self.__in_boss_key = resp_data["in_boss_key"] - self.__resource_id = resp_data["resource_id"] - self.__upload_id = resp_data["upload_id"] - self.__upload_urls = resp_data["upload_urls"] - self.__per_size = resp_data["per_size"] - self.__clips = len(resp_data["upload_urls"]) - - logger.info( - f"申请上传成功, 总计大小{resp_data['size'] // 1024}KB, {self.__clips}分片, 分片大小{resp_data['per_size'] // 1024}KB: {self.__in_boss_key}" - ) - self.__upload_part(file_binary) - self.__commit_upload() - - def __upload_part(self, file_binary: bytes) -> None: - """上传音频数据""" - for clip in range(self.__clips): - start_range = clip * self.__per_size - end_range = min((clip + 1) * self.__per_size, len(file_binary)) - logger.info(f"开始上传分片{clip}: {start_range}-{end_range}") - resp = self.session.put( - self.__upload_urls[clip], - data=file_binary[start_range:end_range], - headers={'Content-Type': 'application/octet-stream'} - ) - resp.raise_for_status() - etag = resp.headers.get("Etag", "").strip('"') - self.__etags.append(etag) - logger.info(f"分片{clip}上传成功: {etag}") - - def __commit_upload(self) -> None: - """提交上传数据""" - data = json.dumps({ - "InBossKey": self.__in_boss_key, - "ResourceId": self.__resource_id, - "Etags": ",".join(self.__etags), - "UploadId": self.__upload_id, - "model_id": "8", - }) - resp = self.session.post( - API_COMMIT_UPLOAD, - data=data, - headers=self.headers - ) - resp.raise_for_status() - resp = resp.json() - if resp.get("code") != 0: - error_msg = f"上传提交失败: {resp.get('message', '未知错误')}" - logger.error(error_msg) - raise Exception(error_msg) - - self.__download_url = resp["data"]["download_url"] - logger.info(f"提交成功,下载链接: {self.__download_url}") - - def _create_task(self) -> str: - """开始创建转换任务""" - resp = self.session.post( - API_CREATE_TASK, json={"resource": self.__download_url, "model_id": "8"}, headers=self.headers - ) - resp.raise_for_status() - resp = resp.json() - if resp.get("code") != 0: - error_msg = f"创建任务失败: {resp.get('message', '未知错误')}" - logger.error(error_msg) - raise Exception(error_msg) - - self.task_id = resp["data"]["task_id"] - logger.info(f"任务已创建: {self.task_id}") - return self.task_id - - def _query_result(self) -> dict: - """查询转换结果""" - resp = self.session.get( - API_QUERY_RESULT, - params={"model_id": 7, "task_id": self.task_id}, - headers=self.headers - ) - resp.raise_for_status() - resp = resp.json() - if resp.get("code") != 0: - error_msg = f"查询结果失败: {resp.get('message', '未知错误')}" - logger.error(error_msg) - raise Exception(error_msg) - - return resp["data"] - - @timeit - def transcript(self, file_path: str) -> TranscriptResult: - """执行识别过程,符合 Transcriber 接口""" - try: - logger.info(f"开始处理文件: {file_path}") - - # 上传文件 - logger.info("正在上传文件...") - self._upload(file_path) - - # 创建任务 - logger.info("提交转录任务...") - self._create_task() - - # 轮询检查任务状态 - logger.info("等待转录结果...") - task_resp = None - max_retries = 500 - for i in range(max_retries): - task_resp = self._query_result() - - if task_resp["state"] == 4: # 完成状态 - break - elif task_resp["state"] == 3: # 失败状态 - error_msg = f"B站ASR任务失败,状态码: {task_resp['state']}" - logger.error(error_msg) - raise Exception(error_msg) - - # 每隔一段时间打印进度 - if i % 10 == 0: - logger.info(f"转录进行中... {i}/{max_retries}") - - time.sleep(1) - - if not task_resp or task_resp["state"] != 4: - error_msg = f"B站ASR任务未能完成,状态: {task_resp.get('state') if task_resp else 'Unknown'}" - logger.error(error_msg) - raise Exception(error_msg) - - # 解析结果 - logger.info("转录成功,处理结果...") - result_json = json.loads(task_resp["result"]) - - # 提取分段数据 - segments = [] - full_text = "" - - for u in result_json.get("utterances", []): - text = u.get("transcript", "").strip() - # B站ASR返回的时间戳是毫秒,需要转换为秒 - start_time = float(u.get("start_time", 0)) / 1000.0 - end_time = float(u.get("end_time", 0)) / 1000.0 - - full_text += text + " " - segments.append(TranscriptSegment( - start=start_time, - end=end_time, - text=text - )) - - # 创建结果对象 - result = TranscriptResult( - language=result_json.get("language", "zh"), - full_text=full_text.strip(), - segments=segments, - raw=result_json - ) - - # 触发完成事件 - self.on_finish(file_path, result) - - return result - - except Exception as e: - logger.error(f"B站ASR处理失败: {str(e)}") - raise - - def on_finish(self, video_path: str, result: TranscriptResult) -> None: - """转录完成的回调""" - logger.info(f"B站ASR转写完成: {video_path}") - transcription_finished.send({ - "file_path": video_path, - }) \ No newline at end of file diff --git a/backend/app/transcriber/kuaishou.py b/backend/app/transcriber/kuaishou.py deleted file mode 100644 index 4d7c4b4..0000000 --- a/backend/app/transcriber/kuaishou.py +++ /dev/null @@ -1,115 +0,0 @@ -import requests -import logging -import os -from typing import Union, List, Dict, Optional - -from app.decorators.timeit import timeit -from app.models.transcriber_model import TranscriptSegment, TranscriptResult -from app.transcriber.base import Transcriber -from app.utils.logger import get_logger -from events import transcription_finished - -logger = get_logger(__name__) - -class KuaishouTranscriber(Transcriber): - """快手语音识别实现""" - - API_URL = "https://ai.kuaishou.com/api/effects/subtitle_generate" - - def __init__(self): - pass - - def _load_file(self, file_path: str) -> bytes: - """读取文件内容""" - with open(file_path, 'rb') as f: - return f.read() - - def _submit(self, file_path: str) -> dict: - """提交识别请求""" - try: - file_binary = self._load_file(file_path) - - payload = { - "typeId": "1" - } - - # 使用文件名作为上传文件名 - file_name = os.path.basename(file_path) - files = [('file', (file_name, file_binary, 'audio/mpeg'))] - - logger.info(f"开始向快手API提交请求,文件: {file_name}") - response = requests.post(self.API_URL, data=payload, files=files, timeout=300) - response.raise_for_status() # 检查HTTP错误 - - result = response.json() - - # 检查快手API返回是否包含错误 - if "data" not in result or result.get("code", 0) != 0: - error_msg = f"快手API返回错误: {result.get('message', '未知错误')}" - logger.error(error_msg) - raise Exception(error_msg) - - return result - - except requests.exceptions.RequestException as e: - error_msg = f"快手ASR请求网络错误: {str(e)}" - logger.error(error_msg) - raise - except Exception as e: - error_msg = f"快手ASR请求处理错误: {str(e)}" - logger.error(error_msg) - raise - - @timeit - def transcript(self, file_path: str) -> TranscriptResult: - """执行转录过程,符合 Transcriber 接口""" - try: - logger.info(f"开始处理文件: {file_path}") - - # 提交请求并获取结果 - logger.info("向快手API提交识别请求...") - result_data = self._submit(file_path) - - logger.info("请求成功,处理结果...") - - # 提取分段数据 - segments = [] - full_text = "" - - # 解析快手API返回的文本段 - texts = result_data.get('data', {}).get('text', []) - for u in texts: - text = u.get('text', '').strip() - start_time = float(u.get('start_time', 0)) - end_time = float(u.get('end_time', 0)) - - full_text += text + " " - segments.append(TranscriptSegment( - start=start_time, - end=end_time, - text=text - )) - - # 创建结果对象 - result = TranscriptResult( - language="zh", # 快手API可能不返回语言信息,默认为中文 - full_text=full_text.strip(), - segments=segments, - raw=result_data - ) - - # 触发完成事件 - self.on_finish(file_path, result) - - return result - - except Exception as e: - logger.error(f"快手ASR处理失败: {str(e)}") - raise - - def on_finish(self, video_path: str, result: TranscriptResult) -> None: - """转录完成的回调""" - logger.info(f"快手ASR转写完成: {video_path}") - transcription_finished.send({ - "file_path": video_path, - }) \ No newline at end of file diff --git a/backend/app/transcriber/transcriber_provider.py b/backend/app/transcriber/transcriber_provider.py index e621612..b074d3e 100644 --- a/backend/app/transcriber/transcriber_provider.py +++ b/backend/app/transcriber/transcriber_provider.py @@ -1,74 +1,19 @@ from app.transcriber.whisper import WhisperTranscriber -from app.transcriber.bcut import BcutTranscriber -from app.transcriber.kuaishou import KuaishouTranscriber from app.utils.logger import get_logger logger = get_logger(__name__) -logger.info('初始化转录服务提供器') +logger.info('实例化transcriber') +# TODO:后面需要加入逻辑选择 +_transcriber = None -# 维护各种转录器的单例实例 -_transcribers = { - 'whisper': None, - 'bcut': None, - 'kuaishou': None -} +def get_transcriber(model_size="base", device="cuda"): + global _transcriber -def get_whisper_transcriber(model_size="base", device="cuda"): - """获取 Whisper 转录器实例""" - if _transcribers['whisper'] is None: - logger.info(f'创建 Whisper 转录器实例,参数:{model_size}, {device}') + if _transcriber is None: + logger.info('不存在 transcriber ,开始实例化transcriber。') try: - _transcribers['whisper'] = WhisperTranscriber(model_size=model_size, device=device) - logger.info('Whisper 转录器创建成功') + _transcriber = WhisperTranscriber(model_size=model_size, device=device) + logger.info(f'实例化transcriber成功。参数:{model_size}, {device} ') except Exception as e: - logger.error(f"Whisper 转录器创建失败: {e}") - raise - return _transcribers['whisper'] - -def get_bcut_transcriber(): - """获取 Bcut 转录器实例""" - if _transcribers['bcut'] is None: - logger.info('创建 Bcut 转录器实例') - try: - _transcribers['bcut'] = BcutTranscriber() - logger.info('Bcut 转录器创建成功') - except Exception as e: - logger.error(f"Bcut 转录器创建失败: {e}") - raise - return _transcribers['bcut'] - -def get_kuaishou_transcriber(): - """获取快手转录器实例""" - if _transcribers['kuaishou'] is None: - logger.info('创建快手转录器实例') - try: - _transcribers['kuaishou'] = KuaishouTranscriber() - logger.info('快手转录器创建成功') - except Exception as e: - logger.error(f"快手转录器创建失败: {e}") - raise - return _transcribers['kuaishou'] - -def get_transcriber(transcriber_type="whisper", model_size="base", device="cuda"): - """ - 获取指定类型的转录器实例 - - 参数: - transcriber_type: 转录器类型,支持 "whisper", "bcut", "kuaishou" - model_size: 模型大小,whisper 特有参数 - device: 设备类型,whisper 特有参数 - - 返回: - 对应类型的转录器实例 - """ - logger.info(f'获取转录器,类型: {transcriber_type}') - - if transcriber_type == "whisper": - return get_whisper_transcriber(model_size, device) - elif transcriber_type == "bcut": - return get_bcut_transcriber() - elif transcriber_type == "kuaishou": - return get_kuaishou_transcriber() - else: - logger.warning(f'未知转录器类型 "{transcriber_type}",使用默认 whisper') - return get_whisper_transcriber(model_size, device) \ No newline at end of file + logger.error(f"实例化transcriber失败,请检查是否安装whisper。{e}") + return _transcriber \ No newline at end of file diff --git a/backend/app/transcriber/whisper.py b/backend/app/transcriber/whisper.py index 486c774..c06c749 100644 --- a/backend/app/transcriber/whisper.py +++ b/backend/app/transcriber/whisper.py @@ -4,19 +4,14 @@ from app.decorators.timeit import timeit from app.models.transcriber_model import TranscriptSegment, TranscriptResult from app.transcriber.base import Transcriber from app.utils.env_checker import is_cuda_available, is_torch_installed -from app.utils.logger import get_logger from app.utils.path_helper import get_model_dir from events import transcription_finished -from pathlib import Path -import os -from tqdm import tqdm -from huggingface_hub import snapshot_download ''' Size of the model to use (tiny, tiny.en, base, base.en, small, small.en, distil-small.en, medium, medium.en, distil-medium.en, large-v1, large-v2, large-v3, large, distil-large-v2, distil-large-v3, large-v3-turbo, or turbo ''' -logger=get_logger(__name__) + class WhisperTranscriber(Transcriber): # TODO:修改为可配置 @@ -36,25 +31,15 @@ class WhisperTranscriber(Transcriber): self.compute_type = compute_type or ("float16" if self.device == "cuda" else "int8") - model_dir = get_model_dir("whisper") - model_path = os.path.join(model_dir, f"whisper-{model_size}") - if not Path(model_path).exists(): - logger.info(f"模型 whisper-{model_size} 不存在,开始下载...") - repo_id = f"guillaumekln/faster-whisper-{model_size}" - snapshot_download( - repo_id, - local_dir=model_path, - local_dir_use_symlinks=False, - ) - logger.info("模型下载完成") - + model_path = get_model_dir("whisper") self.model = WhisperModel( model_size, device=self.device, - compute_type=self.compute_type, + # compute_type="int8", # 或 "float16" cpu_threads=cpu_threads, - download_root=model_dir + download_root=model_path ) + @staticmethod def is_torch_installed() -> bool: try: diff --git a/backend/main.py b/backend/main.py index e98005a..6e36671 100644 --- a/backend/main.py +++ b/backend/main.py @@ -3,6 +3,8 @@ import os import uvicorn from starlette.staticfiles import StaticFiles from dotenv import load_dotenv + +from app.db.provider_dao import init_provider_table from app.utils.logger import get_logger from app import create_app from app.db.video_task_dao import init_video_task_table @@ -36,6 +38,7 @@ async def startup_event(): ensure_ffmpeg_or_raise() get_transcriber() init_video_task_table() + init_provider_table() if __name__ == "__main__": port = int(os.getenv("BACKEND_PORT", 8000)) diff --git a/backend/requirements.txt b/backend/requirements.txt index e179c2c..bae6463 100644 Binary files a/backend/requirements.txt and b/backend/requirements.txt differ