From d5cc07c25956f98a7c5d83bab4beb8613d01322f Mon Sep 17 00:00:00 2001 From: polwex Date: Sun, 6 Oct 2024 18:19:22 +0000 Subject: [PATCH] Done --- .envrc | 3 + .gitignore | 9 + LICENSE | 10 + README.md | 11 + desk/app/ucm.hoon | 329 + desk/desk.bill | 2 + desk/desk.docket-0 | 11 + desk/desk.ship | 1 + desk/gen/blog/export.hoon | 5 + .../test1/assets/7e77ee776b761225-index.css | 1 + .../test1/assets/a4e0f2ed22786f63-index.js | 285 + desk/globs/test1/index.html | 14 + desk/globs/test1/vite.svg | 1 + desk/lib/apps.hoon | 147 + desk/lib/constants.hoon | 6 + desk/lib/dbug.hoon | 155 + desk/lib/docket.hoon | 223 + desk/lib/ethereum.hoon | 1006 + desk/lib/json.hoon | 105 + desk/lib/metamask.hoon | 169 + desk/lib/mip.hoon | 55 + desk/lib/naive.hoon | 926 + desk/lib/seed.hoon | 8 + desk/lib/server.hoon | 174 + desk/lib/sigil/sigil.hoon | 227 + desk/lib/sigil/symbols.hoon | 14332 +++++++++ desk/lib/skeleton.hoon | 51 + desk/lib/sortug.hoon | 1 + desk/lib/sss.hoon | 388 + desk/lib/strand.hoon | 1 + desk/lib/strandio.hoon | 832 + desk/lib/tiny.hoon | 670 + desk/lib/ucm.hoon | 161 + desk/lib/web.hoon | 319 + desk/mar/arch.hoon | 16 + desk/mar/bill.hoon | 34 + desk/mar/css.hoon | 21 + desk/mar/docket-0.hoon | 25 + desk/mar/docket/install.hoon | 14 + desk/mar/docket/uninstall.hoon | 13 + desk/mar/hoon.hoon | 49 + desk/mar/html.hoon | 22 + desk/mar/ico.hoon | 12 + desk/mar/js.hoon | 25 + desk/mar/json.hoon | 26 + desk/mar/kelvin.hoon | 28 + desk/mar/md.hoon | 20 + desk/mar/mime.hoon | 32 + desk/mar/ninja.hoon | 26 + desk/mar/noun.hoon | 22 + desk/mar/png.hoon | 12 + desk/mar/ship.hoon | 20 + desk/mar/sss/blog-paths.hoon | 6 + desk/mar/sss/to-pub.hoon | 15 + desk/mar/svg.hoon | 12 + desk/mar/txt.hoon | 274 + desk/mar/webmanifest.hoon | 12 + desk/mar/woff.hoon | 12 + desk/mar/woff2.hoon | 12 + desk/sur/blog-paths.hoon | 21 + desk/sur/docket.hoon | 82 + desk/sur/hood.hoon | 392 + desk/sur/spider.hoon | 27 + desk/sur/sss.hoon | 46 + desk/sur/tlon/channels.hoon | 464 + desk/sur/tlon/cite.hoon | 57 + desk/sur/tlon/groups.hoon | 384 + desk/sur/ucm.hoon | 52 + desk/sys.kelvin | 1 + desk/ted/import.hoon | 85 + desk/ted/iris-thread.hoon | 26 + desk/web | 1 + devenv.lock | 122 + devenv.nix | 52 + devenv.yaml | 14 + fe/.gitignore | 24 + fe/.prettierrc.json | 7 + fe/README.md | 50 + fe/bun.lockb | Bin 0 -> 314023 bytes fe/eslint.config.js | 25 + fe/index.html | 21 + fe/package.json | 56 + fe/public/android-chrome-192x192.png | Bin 0 -> 45563 bytes fe/public/android-chrome-512x512.png | Bin 0 -> 230591 bytes fe/public/apple-touch-icon.png | Bin 0 -> 40892 bytes fe/public/favicon-16x16.png | Bin 0 -> 903 bytes fe/public/favicon-32x32.png | Bin 0 -> 2592 bytes fe/public/favicon.ico | Bin 0 -> 15406 bytes fe/public/site.webmanifest | 1 + fe/src/App.css | 72 + fe/src/App.tsx | 24 + fe/src/Router.tsx | 48 + fe/src/assets/icons/comet.svg | 23 + fe/src/assets/icons/spinner.svg | 1 + fe/src/assets/react.svg | 1 + fe/src/dashboard/CreateForm.tsx | 118 + fe/src/dashboard/Dashboard.tsx | 87 + fe/src/dashboard/Site.tsx | 543 + fe/src/logic/comms.ts | 549 + fe/src/logic/constants.ts | 37 + fe/src/logic/ob/co.ts | 400 + fe/src/logic/ob/muk.ts | 116 + fe/src/logic/ob/ob.ts | 166 + fe/src/logic/ob/types.ts | 7 + fe/src/logic/store.ts | 126 + fe/src/logic/tlon-helpers.ts | 690 + fe/src/logic/types-tlon.ts | 630 + fe/src/logic/types.ts | 105 + fe/src/logic/utils.ts | 562 + fe/src/main.tsx | 15 + fe/src/modals/Example.tsx | 43 + fe/src/modals/Modal.tsx | 289 + fe/src/ui/Components.tsx | 111 + fe/src/ui/Drag.tsx | 96 + fe/src/ui/Sigil.tsx | 49 + fe/src/ui/shared-theme/AppTheme.tsx | 58 + .../ui/shared-theme/ColorModeIconDropdown.tsx | 88 + fe/src/ui/shared-theme/ColorModeSelect.tsx | 26 + .../customizations/dataDisplay.tsx | 233 + .../shared-theme/customizations/feedback.tsx | 46 + .../ui/shared-theme/customizations/inputs.tsx | 445 + .../customizations/navigation.tsx | 279 + .../shared-theme/customizations/surfaces.ts | 113 + fe/src/ui/shared-theme/themePrimitives.ts | 399 + fe/src/ui/sigil-ts/index.json | 24315 ++++++++++++++++ fe/src/ui/sigil-ts/index.ts | 296 + fe/src/ui/sigil-ts/lib.ts | 17 + fe/src/ui/sigil-ts/reactImageRenderer.ts | 24 + fe/src/ui/sigil-ts/reactRenderer.ts | 21 + fe/src/ui/sigil-ts/stringRenderer.ts | 10 + fe/src/ui/sigil-ts/types.ts | 54 + fe/src/ui/sign-up/CustomIcons.tsx | 120 + fe/src/ui/sign-up/README.md | 15 + fe/src/ui/sign-up/SignUp.tsx | 259 + fe/src/ui/sign-up/TemplateFrame.tsx | 115 + fe/src/ui/sign-up/ToggleColorMode.tsx | 34 + fe/src/ui/sign-up/getSignUpTheme.tsx | 720 + .../theme/customizations/dataDisplay.tsx | 233 + .../sign-up/theme/customizations/feedback.tsx | 46 + .../ui/sign-up/theme/customizations/index.ts | 5 + .../sign-up/theme/customizations/inputs.tsx | 445 + .../theme/customizations/navigation.tsx | 279 + .../sign-up/theme/customizations/surfaces.ts | 113 + fe/src/ui/sign-up/theme/getSignUpTheme.tsx | 23 + fe/src/ui/sign-up/theme/themePrimitives.ts | 235 + fe/src/ui/theme.tsx | 234 + .../ui/theme/customizations/dataDisplay.tsx | 233 + fe/src/ui/theme/customizations/feedback.tsx | 46 + fe/src/ui/theme/customizations/index.ts | 5 + fe/src/ui/theme/customizations/inputs.tsx | 445 + fe/src/ui/theme/customizations/navigation.tsx | 279 + fe/src/ui/theme/customizations/surfaces.ts | 113 + fe/src/ui/theme/getSignUpTheme.tsx | 23 + fe/src/ui/theme/themePrimitives.ts | 235 + fe/src/vite-env.d.ts | 1 + fe/tsconfig.app.json | 29 + fe/tsconfig.app.tsbuildinfo | 1 + fe/tsconfig.json | 4 + fe/tsconfig.node.json | 22 + fe/tsconfig.node.tsbuildinfo | 1 + fe/vite.config.ts | 32 + site/.gitignore | 24 + site/.prettierrc.json | 7 + site/README.md | 50 + site/bun.lockb | Bin 0 -> 306847 bytes site/eslint.config.js | 28 + site/index.html | 13 + site/package.json | 51 + site/public/vite.svg | 1 + site/rename-files.js | 48 + site/src/App.css | 110 + site/src/App.tsx | 61 + site/src/assets/icons/comet.svg | 23 + site/src/assets/icons/spinner.svg | 1 + site/src/assets/react.svg | 1 + site/src/logic/comms.ts | 529 + site/src/logic/constants.ts | 37 + site/src/logic/ob/co.ts | 392 + site/src/logic/ob/muk.ts | 116 + site/src/logic/ob/ob.ts | 166 + site/src/logic/ob/types.ts | 7 + site/src/logic/store.ts | 150 + site/src/logic/tlon-helpers.ts | 705 + site/src/logic/types-tlon.ts | 630 + site/src/logic/types.ts | 95 + site/src/logic/utils.ts | 493 + site/src/main.tsx | 15 + site/src/modals/Modal.tsx | 85 + site/src/site/Blog.tsx | 154 + site/src/site/BlogPost.tsx | 215 + site/src/site/Board.tsx | 212 + site/src/site/BoardThread.tsx | 303 + site/src/site/Chat.tsx | 157 + site/src/site/Chatroom.tsx | 208 + site/src/site/Composer.tsx | 125 + site/src/site/Forum.tsx | 205 + site/src/site/Home.tsx | 181 + site/src/site/Login.tsx | 119 + site/src/site/Navbar.tsx | 81 + site/src/site/PostContent.tsx | 293 + site/src/site/Radio.tsx | 249 + site/src/site/Search.tsx | 88 + site/src/site/Snippets.tsx | 352 + site/src/site/StaticPage.tsx | 37 + site/src/site/User.tsx | 47 + site/src/site/Wiki.tsx | 26 + site/src/ui/Components.tsx | 119 + site/src/ui/Sigil.tsx | 49 + site/src/ui/sigil-ts/index.json | 24315 ++++++++++++++++ site/src/ui/sigil-ts/index.ts | 296 + site/src/ui/sigil-ts/lib.ts | 17 + site/src/ui/sigil-ts/reactImageRenderer.ts | 24 + site/src/ui/sigil-ts/reactRenderer.ts | 21 + site/src/ui/sigil-ts/stringRenderer.ts | 10 + site/src/ui/sigil-ts/types.ts | 54 + site/src/ui/theme.tsx | 52 + site/src/ui/theme/AppTheme.tsx | 57 + site/src/ui/theme/ColorModeIconDropdown.tsx | 87 + site/src/ui/theme/ColorModeSelect.tsx | 26 + .../ui/theme/customizations/dataDisplay.tsx | 233 + site/src/ui/theme/customizations/feedback.tsx | 46 + site/src/ui/theme/customizations/inputs.tsx | 449 + .../ui/theme/customizations/navigation.tsx | 285 + site/src/ui/theme/customizations/surfaces.ts | 117 + site/src/ui/theme/themePrimitives.ts | 399 + site/src/vite-env.d.ts | 1 + site/tsconfig.app.json | 29 + site/tsconfig.app.tsbuildinfo | 1 + site/tsconfig.json | 7 + site/tsconfig.node.json | 22 + site/tsconfig.node.tsbuildinfo | 1 + site/vite.config.ts | 9 + 232 files changed, 92701 insertions(+) create mode 100644 .envrc create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 desk/app/ucm.hoon create mode 100644 desk/desk.bill create mode 100644 desk/desk.docket-0 create mode 100644 desk/desk.ship create mode 100644 desk/gen/blog/export.hoon create mode 100644 desk/globs/test1/assets/7e77ee776b761225-index.css create mode 100644 desk/globs/test1/assets/a4e0f2ed22786f63-index.js create mode 100644 desk/globs/test1/index.html create mode 100644 desk/globs/test1/vite.svg create mode 100644 desk/lib/apps.hoon create mode 100644 desk/lib/constants.hoon create mode 100644 desk/lib/dbug.hoon create mode 100644 desk/lib/docket.hoon create mode 100644 desk/lib/ethereum.hoon create mode 100644 desk/lib/json.hoon create mode 100644 desk/lib/metamask.hoon create mode 100644 desk/lib/mip.hoon create mode 100644 desk/lib/naive.hoon create mode 100644 desk/lib/seed.hoon create mode 100644 desk/lib/server.hoon create mode 100644 desk/lib/sigil/sigil.hoon create mode 100644 desk/lib/sigil/symbols.hoon create mode 100644 desk/lib/skeleton.hoon create mode 120000 desk/lib/sortug.hoon create mode 100644 desk/lib/sss.hoon create mode 100644 desk/lib/strand.hoon create mode 100644 desk/lib/strandio.hoon create mode 100644 desk/lib/tiny.hoon create mode 100644 desk/lib/ucm.hoon create mode 100644 desk/lib/web.hoon create mode 100644 desk/mar/arch.hoon create mode 100644 desk/mar/bill.hoon create mode 100644 desk/mar/css.hoon create mode 100644 desk/mar/docket-0.hoon create mode 100644 desk/mar/docket/install.hoon create mode 100644 desk/mar/docket/uninstall.hoon create mode 100644 desk/mar/hoon.hoon create mode 100644 desk/mar/html.hoon create mode 100644 desk/mar/ico.hoon create mode 100644 desk/mar/js.hoon create mode 100644 desk/mar/json.hoon create mode 100644 desk/mar/kelvin.hoon create mode 100644 desk/mar/md.hoon create mode 100644 desk/mar/mime.hoon create mode 100644 desk/mar/ninja.hoon create mode 100644 desk/mar/noun.hoon create mode 100644 desk/mar/png.hoon create mode 100644 desk/mar/ship.hoon create mode 100644 desk/mar/sss/blog-paths.hoon create mode 100644 desk/mar/sss/to-pub.hoon create mode 100644 desk/mar/svg.hoon create mode 100644 desk/mar/txt.hoon create mode 100644 desk/mar/webmanifest.hoon create mode 100644 desk/mar/woff.hoon create mode 100644 desk/mar/woff2.hoon create mode 100644 desk/sur/blog-paths.hoon create mode 100644 desk/sur/docket.hoon create mode 100644 desk/sur/hood.hoon create mode 100644 desk/sur/spider.hoon create mode 100644 desk/sur/sss.hoon create mode 100644 desk/sur/tlon/channels.hoon create mode 100644 desk/sur/tlon/cite.hoon create mode 100644 desk/sur/tlon/groups.hoon create mode 100644 desk/sur/ucm.hoon create mode 100644 desk/sys.kelvin create mode 100644 desk/ted/import.hoon create mode 100644 desk/ted/iris-thread.hoon create mode 120000 desk/web create mode 100644 devenv.lock create mode 100644 devenv.nix create mode 100644 devenv.yaml create mode 100644 fe/.gitignore create mode 100644 fe/.prettierrc.json create mode 100644 fe/README.md create mode 100755 fe/bun.lockb create mode 100644 fe/eslint.config.js create mode 100644 fe/index.html create mode 100644 fe/package.json create mode 100644 fe/public/android-chrome-192x192.png create mode 100644 fe/public/android-chrome-512x512.png create mode 100644 fe/public/apple-touch-icon.png create mode 100644 fe/public/favicon-16x16.png create mode 100644 fe/public/favicon-32x32.png create mode 100644 fe/public/favicon.ico create mode 100644 fe/public/site.webmanifest create mode 100644 fe/src/App.css create mode 100644 fe/src/App.tsx create mode 100644 fe/src/Router.tsx create mode 100644 fe/src/assets/icons/comet.svg create mode 100755 fe/src/assets/icons/spinner.svg create mode 100644 fe/src/assets/react.svg create mode 100644 fe/src/dashboard/CreateForm.tsx create mode 100644 fe/src/dashboard/Dashboard.tsx create mode 100644 fe/src/dashboard/Site.tsx create mode 100644 fe/src/logic/comms.ts create mode 100644 fe/src/logic/constants.ts create mode 100644 fe/src/logic/ob/co.ts create mode 100644 fe/src/logic/ob/muk.ts create mode 100644 fe/src/logic/ob/ob.ts create mode 100644 fe/src/logic/ob/types.ts create mode 100644 fe/src/logic/store.ts create mode 100644 fe/src/logic/tlon-helpers.ts create mode 100644 fe/src/logic/types-tlon.ts create mode 100644 fe/src/logic/types.ts create mode 100644 fe/src/logic/utils.ts create mode 100644 fe/src/main.tsx create mode 100644 fe/src/modals/Example.tsx create mode 100644 fe/src/modals/Modal.tsx create mode 100644 fe/src/ui/Components.tsx create mode 100644 fe/src/ui/Drag.tsx create mode 100644 fe/src/ui/Sigil.tsx create mode 100644 fe/src/ui/shared-theme/AppTheme.tsx create mode 100644 fe/src/ui/shared-theme/ColorModeIconDropdown.tsx create mode 100644 fe/src/ui/shared-theme/ColorModeSelect.tsx create mode 100644 fe/src/ui/shared-theme/customizations/dataDisplay.tsx create mode 100644 fe/src/ui/shared-theme/customizations/feedback.tsx create mode 100644 fe/src/ui/shared-theme/customizations/inputs.tsx create mode 100644 fe/src/ui/shared-theme/customizations/navigation.tsx create mode 100644 fe/src/ui/shared-theme/customizations/surfaces.ts create mode 100644 fe/src/ui/shared-theme/themePrimitives.ts create mode 100644 fe/src/ui/sigil-ts/index.json create mode 100644 fe/src/ui/sigil-ts/index.ts create mode 100644 fe/src/ui/sigil-ts/lib.ts create mode 100644 fe/src/ui/sigil-ts/reactImageRenderer.ts create mode 100644 fe/src/ui/sigil-ts/reactRenderer.ts create mode 100644 fe/src/ui/sigil-ts/stringRenderer.ts create mode 100644 fe/src/ui/sigil-ts/types.ts create mode 100644 fe/src/ui/sign-up/CustomIcons.tsx create mode 100644 fe/src/ui/sign-up/README.md create mode 100644 fe/src/ui/sign-up/SignUp.tsx create mode 100644 fe/src/ui/sign-up/TemplateFrame.tsx create mode 100644 fe/src/ui/sign-up/ToggleColorMode.tsx create mode 100644 fe/src/ui/sign-up/getSignUpTheme.tsx create mode 100644 fe/src/ui/sign-up/theme/customizations/dataDisplay.tsx create mode 100644 fe/src/ui/sign-up/theme/customizations/feedback.tsx create mode 100644 fe/src/ui/sign-up/theme/customizations/index.ts create mode 100644 fe/src/ui/sign-up/theme/customizations/inputs.tsx create mode 100644 fe/src/ui/sign-up/theme/customizations/navigation.tsx create mode 100644 fe/src/ui/sign-up/theme/customizations/surfaces.ts create mode 100644 fe/src/ui/sign-up/theme/getSignUpTheme.tsx create mode 100644 fe/src/ui/sign-up/theme/themePrimitives.ts create mode 100644 fe/src/ui/theme.tsx create mode 100644 fe/src/ui/theme/customizations/dataDisplay.tsx create mode 100644 fe/src/ui/theme/customizations/feedback.tsx create mode 100644 fe/src/ui/theme/customizations/index.ts create mode 100644 fe/src/ui/theme/customizations/inputs.tsx create mode 100644 fe/src/ui/theme/customizations/navigation.tsx create mode 100644 fe/src/ui/theme/customizations/surfaces.ts create mode 100644 fe/src/ui/theme/getSignUpTheme.tsx create mode 100644 fe/src/ui/theme/themePrimitives.ts create mode 100644 fe/src/vite-env.d.ts create mode 100644 fe/tsconfig.app.json create mode 100644 fe/tsconfig.app.tsbuildinfo create mode 100644 fe/tsconfig.json create mode 100644 fe/tsconfig.node.json create mode 100644 fe/tsconfig.node.tsbuildinfo create mode 100644 fe/vite.config.ts create mode 100644 site/.gitignore create mode 100644 site/.prettierrc.json create mode 100644 site/README.md create mode 100755 site/bun.lockb create mode 100644 site/eslint.config.js create mode 100644 site/index.html create mode 100644 site/package.json create mode 100644 site/public/vite.svg create mode 100644 site/rename-files.js create mode 100644 site/src/App.css create mode 100644 site/src/App.tsx create mode 100644 site/src/assets/icons/comet.svg create mode 100755 site/src/assets/icons/spinner.svg create mode 100644 site/src/assets/react.svg create mode 100644 site/src/logic/comms.ts create mode 100644 site/src/logic/constants.ts create mode 100644 site/src/logic/ob/co.ts create mode 100644 site/src/logic/ob/muk.ts create mode 100644 site/src/logic/ob/ob.ts create mode 100644 site/src/logic/ob/types.ts create mode 100644 site/src/logic/store.ts create mode 100644 site/src/logic/tlon-helpers.ts create mode 100644 site/src/logic/types-tlon.ts create mode 100644 site/src/logic/types.ts create mode 100644 site/src/logic/utils.ts create mode 100644 site/src/main.tsx create mode 100644 site/src/modals/Modal.tsx create mode 100644 site/src/site/Blog.tsx create mode 100644 site/src/site/BlogPost.tsx create mode 100644 site/src/site/Board.tsx create mode 100644 site/src/site/BoardThread.tsx create mode 100644 site/src/site/Chat.tsx create mode 100644 site/src/site/Chatroom.tsx create mode 100644 site/src/site/Composer.tsx create mode 100644 site/src/site/Forum.tsx create mode 100644 site/src/site/Home.tsx create mode 100644 site/src/site/Login.tsx create mode 100644 site/src/site/Navbar.tsx create mode 100644 site/src/site/PostContent.tsx create mode 100644 site/src/site/Radio.tsx create mode 100644 site/src/site/Search.tsx create mode 100644 site/src/site/Snippets.tsx create mode 100644 site/src/site/StaticPage.tsx create mode 100644 site/src/site/User.tsx create mode 100644 site/src/site/Wiki.tsx create mode 100644 site/src/ui/Components.tsx create mode 100644 site/src/ui/Sigil.tsx create mode 100644 site/src/ui/sigil-ts/index.json create mode 100644 site/src/ui/sigil-ts/index.ts create mode 100644 site/src/ui/sigil-ts/lib.ts create mode 100644 site/src/ui/sigil-ts/reactImageRenderer.ts create mode 100644 site/src/ui/sigil-ts/reactRenderer.ts create mode 100644 site/src/ui/sigil-ts/stringRenderer.ts create mode 100644 site/src/ui/sigil-ts/types.ts create mode 100644 site/src/ui/theme.tsx create mode 100644 site/src/ui/theme/AppTheme.tsx create mode 100644 site/src/ui/theme/ColorModeIconDropdown.tsx create mode 100644 site/src/ui/theme/ColorModeSelect.tsx create mode 100644 site/src/ui/theme/customizations/dataDisplay.tsx create mode 100644 site/src/ui/theme/customizations/feedback.tsx create mode 100644 site/src/ui/theme/customizations/inputs.tsx create mode 100644 site/src/ui/theme/customizations/navigation.tsx create mode 100644 site/src/ui/theme/customizations/surfaces.ts create mode 100644 site/src/ui/theme/themePrimitives.ts create mode 100644 site/src/vite-env.d.ts create mode 100644 site/tsconfig.app.json create mode 100644 site/tsconfig.app.tsbuildinfo create mode 100644 site/tsconfig.json create mode 100644 site/tsconfig.node.json create mode 100644 site/tsconfig.node.tsbuildinfo create mode 100644 site/vite.config.ts diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..5bf8fc1 --- /dev/null +++ b/.envrc @@ -0,0 +1,3 @@ +source_url "https://raw.githubusercontent.com/cachix/devenv/95f329d49a8a5289d31e0982652f7058a189bfca/direnvrc" "sha256-d+8cBpDfDBj41inrADaJt+bDWhOktwslgoP5YiGJ1v0=" + +use devenv \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4d058db --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +# Devenv +.devenv* +devenv.local.nix + +# direnv +.direnv + +# pre-commit +.pre-commit-config.yaml diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..00d45c8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,10 @@ +MIT License + +Copyright (c) 2024 polwex + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/README.md b/README.md new file mode 100644 index 0000000..be52af5 --- /dev/null +++ b/README.md @@ -0,0 +1,11 @@ +# Urbit Community Manager + +Create self-hosted communities on Urbit. +Currently supports Blog, Static sites, Chat, Forum, Radio and Wiki apps. +Supports EAuth and Metamask login with Urbit ID. + + +### Installation +Two options: +1.- On dojo run `|install ~dister-dozzod-sortug %ucm` +2.- Symlink the `desk` folder to a folder inside your pier, then commit and `|install our `. diff --git a/desk/app/ucm.hoon b/desk/app/ucm.hoon new file mode 100644 index 0000000..227df8d --- /dev/null +++ b/desk/app/ucm.hoon @@ -0,0 +1,329 @@ +/- sur=ucm, blog-paths, docket +:: XX sss; remove on transition to %4 +/+ jon=json, lib=ucm, dbug, *sss, cons=constants, metamask, sr=sortug, apps, web +:: /= router /web/router +:: +%- agent:dbug +^- agent:gall +=> |% + +$ versioned-state + $% state-0:sur + == + :: XX move into +* below + +$ card $+(card card:agent:gall) + -- +=| versioned-state +=* state - +:: +=< +|_ =bowl:gall ++* this . + hd ~(. +> [state bowl]) + :: rout ~(. router:router [state bowl]) + metalib ~(. metamask [sessions.state bowl]) + :: XX sss; remove on transition to state-4 + du-paths + =/ du + (du blog-paths ,[%paths ~]) + (du pub-paths bowl -:!>(*result:du)) +:: +++ on-init + ^- (quip card _this) + :_ this + :_ ~ (add-eyre-binding [dap.bowl ~]) +:: +++ on-save + !>(state) +:: +++ on-load + |= =vase + ^- (quip card _this) + =+ !<(old=versioned-state vase) + ?- -.old + %0 :_ this(state old) ~ + == +:: +++ on-poke + |= [=mark =vase] + =. src.bowl login:metalib + |^ + ^- (quip card _this) + ?+ mark + ~|("unexpected poke to {} with mark {}" !!) + :: + %noun (handle-poke !<(* vase)) + %json (handle-json !<(json vase)) + %handle-http-request (serve-http !<([@ta inbound-request:eyre] vase)) + == :: end of pokes + ++ handle-poke |= a=* + ?: ?=([%ui *] a) (handle-ui a) + :: metamask + ?: ?=([%meta @] a) + =. sessions (handle-meta:metalib +.a) `this + ?: ?=([%auth @p @p @uv] a) + =. sessions (handle-auth:metalib +.a) `this + ?: ?=(%sessions a) handle-sess + ?: ?=(%chal a) handle-chal + ?: ?=([%glob *] a) (handle-glob +.a) + (handle-debug a) + :: + ++ handle-json |= j=json + =/ =action:sur (de:jon j) + ?- -.action + %dash (handle-dash +.action) + %site (handle-site +.action) + == + + ++ handle-dash |= a=dash-action:sur + ?- -.a + %del =. sites (~(del by sites) name.a) + `this + %set + =/ site (~(get by sites) binding.a) + =/ nsite ?~ site *site:sur u.site + =/ ns %= nsite + sitename sitename.a + description description.a + groupname groupname.a + binding binding.a + icon icon.a + home home.a + css css.a + hidden hidden.a + apps apps.a + app-order app-order.a + == + =. sites (~(put by sites) binding.a ns) + :: =/ cards [(add-eyre-binding:hd binding.a) (diff-sites nsite ns)] + =/ cards [(add-eyre-binding:hd binding.a) ~] + [cards this] + == + ++ handle-site |= [name=@t a=site-action:sur] + ?- -.a + %lol `this + %search `this + == + :: ++ diff-sites |= [sa=site:sur sb=site:sur] ^- (list card) + :: =/ applib ~(. apps [groupname.sb bowl]) + :: =, applib + :: =/ a apps.sa =/ b apps.sb + :: %- zing + :: :~ (group-diff sa sb) + :: (blog-diff blog.a blog.b) + :: (chat-diff chat.a chat.b) + :: (forum-diff forum.a forum.b) + :: (radio-diff radio.a radio.b) + :: (wiki-diff wiki.a wiki.b) + :: == + ++ handle-sess + ~& >> users.sessions + `this + ++ handle-chal + ~& >> challenges.sessions + ~& "wiping challenges" + =. challenges.sessions *(set @uv) + `this + ++ handle-glob |= arg=* + =/ pat (path arg) + =/ ta-now `@ta`(scot %da now.bowl) + :_ this :_ ~ + [%pass (weld /glob pat) %arvo %k %fard dap.bowl %make-glob %noun !>(pat)] + :: + ++ handle-debug |= arg=* + ~& debug=arg + =/ applib ~(. apps [%lol bowl]) + ?: .=(%seed arg) + + + `this + ?: .=(%print arg) + =/ log + =/ l ~(tap by sites) + |- ?~ l ~ + =/ site +.i.l + ~& site + $(l t.l) + `this + ?: .=(%vats arg) ~& show-vats:applib `this + ?: .=(%eyre arg) :_ this + =/ cards wipe-eyre-bindings:hd + ~& cards=cards + cards + + ?: .=([%add *] arg) + =/ ssite *site:sur + =/ ms %= ssite + sitename 'My test site' + binding /test1 + groupname %my-test-site-3 + == + =. sites (~(put by sites) /test1 ms) + `this + ?: ?=([%order *] arg) + ~& > ordering=arg + =/ pat (path +.arg) + ~& > ordering=pat + =/ site (~(get by sites) pat) + ~& site + ?~ site `this + :: TODO resurrect when wiki is usable + :: =. app-order.u.site ~[%blog %chat %forum %radio %wiki] + =. app-order.u.site ~[%blog %chat %forum %radio] + + =. sites (~(put by sites) pat u.site) + `this + ?: .=(%wipe-subs arg) + :_ this %+ weld + %+ turn ~(tap by wex.bowl) |= [[=wire =ship =term] [acked=? =path]] + ^- card + [%pass wire %agent [ship term] %leave ~] + %+ turn ~(tap by sup.bowl) |= [* p=@p pat=path] + ^- card + [%give %kick ~[pat] `p] + :: ?: .=(arg 5) + :: :_ this :_ ~ (add-eyre-binding /test) + :: ?: .=(arg 4) + :: :_ this :_ ~ (remove-eyre-binding /test) + :: ~& >> unrecognized-poke-to-ublog=a + `this + :: UI poke handler + ++ handle-ui |= a=* + :: =/ ua ((soft sail-poke:sur) a) + :: ?~ ua `this =/ action action.u.ua + :: =. sites + :: ?+ -.action sites + :: %launch (handle-launch +.action) + :: %delist (handle-delist +.action) + :: %delete (handle-delete +.action) + :: :: %add-app + :: :: %hide-app + :: :: %del-app + :: == + :: :_ this (redirect:router eyre-id.u.ua "") + `this + :: ++ handle-launch |= [name=@t] + :: ?: =('' name) sites + :: =/ site (~(get by sites) name) + :: ?~ site + :: =/ nsite *site:sur + :: (~(put by sites) name nsite) + :: =. hidden.u.site .n + :: (~(put by sites) name u.site) + :: ++ handle-delist |= name=@t + :: =/ site (~(get by sites) name) + :: ?~ site sites + :: =. hidden.u.site .y + :: (~(put by sites) name u.site) + + :: ++ handle-delete |= name=@t + :: (~(del by sites) name) + + +++ serve-http |= [id=@ta req=inbound-request:eyre] + =/ weblib ~(. web [bowl id req state]) + :- route:weblib this + +-- +:: +++ on-peek + |= =path + ^- (unit (unit cage)) + :: ~& >> "attempting scry on {}" + ?+ path ~&("unexpected scry into {} on path {}" ~) + [%x %state ~] :- ~ :- ~ :- %json !> + (en:jon sites) + == +++ on-watch + |= =(pole knot) + ?+ pole !! + :: dashboard + [%ui ~] :_ this :~(give-state:hd) + :: site + [%ui rest=*] + :_ this :~((give-site-state:hd rest.pole)) + [%http-response *] `this + [%proxy app=@t rest=*] + :_ this + :: ~ + :_ ~ + (proxy-watch:hd rest.pole our.bowl app.pole) + == +:: +++ on-arvo + |= [=(pole knot) =sign-arvo] + `this + +++ on-agent |= [wire=(pole knot) =sign:agent:gall] + :: ?: ?=(%kick -.sign) :_ this :~((re-watch:hd wire)) + ?. ?=(%fact -.sign) `this + ?+ wire `this + [%ninja-sub app=@t rest=*] + =/ return-path (weld /proxy [app.wire rest.wire]) + =/ =mars:clay [p.cage.sign %json] + =/ mars-path /[a.mars]/[b.mars] + :: this is annoyingly ad-hoc but I'm tired + =/ base ?: ?=(?(%tower %tenna) app.wire) + /(scot %p our.bowl)/[%radio]/(scot %da now.bowl) + /(scot %p our.bowl)/[%groups]/(scot %da now.bowl) + =/ scry-path (weld base mars-path) + =/ mark-conversion-gate .^(tube:clay %cc scry-path) + =/ vas (mark-conversion-gate q.cage.sign) + :_ this :_ ~ + [%give %fact ~[return-path] %json vas] + == +++ on-leave |~(* [~ this]) +++ on-fail |~(* [~ this]) +-- +|_ [s=versioned-state =bowl:gall] +:: cards +++ add-eyre-binding + |= =path ^- card + [%pass /eyre/connect %arvo %e %connect [~ path] dap.bowl] + +++ wipe-eyre-bindings + =/ l .^((list [=binding:eyre duct =action:eyre]) %e /(scot %p our.bowl)/bindings/(scot %da now.bowl)) + =/ cards=(list card) [(add-eyre-binding [dap.bowl ~]) ~] + |- ?~ l cards + =/ target action.i.l + ?. ?=(%app -.target) $(l t.l) + ?. .=(dap.bowl app.target) $(l t.l) + =/ nc (remove-eyre-binding binding.i.l) + =. cards [nc cards] + $(l t.l) + +++ remove-eyre-binding |= =binding:eyre ^- card + [%pass /eyre/disconnect %arvo %e %disconnect binding] + +++ give-state ^- card + [%give %fact ~ [%json !>((en:jon sites))]] +++ give-site-state |= sitepath=path ^- card + =/ usite (~(get by sites) sitepath) + =/ j=json + ?~ usite ~ (en-site:en:jon u.usite) + [%give %fact ~ [%json !>(j)]] + + +++ proxy-watch |= [=path =ship app=term] ^- card + =/ sub-path (weld /ninja-sub [app path]) + [%pass sub-path %agent [ship app] %watch path] +++ re-watch |= wire=(pole knot) ^- card + ?. ?=([%ninja-sub app=@t rest=*] wire) !! + [%pass wire %agent [our.bowl app.wire] %watch rest.wire] + +:: ++ cache-card +:: |= path=tape ^- card +:: =/ pathc (crip "{base-url:cons}{path}") +:: ~& >> caching=pathc +:: =/ router-path ?~ path '/' pathc +:: =/ pl=simple-payload:http (render:rout router-path) +:: =/ entry=cache-entry:eyre [.n %payload pl] +:: [%pass /root %arvo %e %set-response pathc `entry] +:: ++ uncache-card +:: |= path=tape ^- card +:: =/ pathc (crip "{base-url:cons}{path}") +:: ~& >> uncaching=pathc +:: =/ router-path ?~ path '/' pathc +:: =/ pl=simple-payload:http (render:rout router-path) +:: =/ entry=cache-entry:eyre [.n %payload pl] +:: [%pass /root %arvo %e %set-response pathc ~] +-- diff --git a/desk/desk.bill b/desk/desk.bill new file mode 100644 index 0000000..97507e7 --- /dev/null +++ b/desk/desk.bill @@ -0,0 +1,2 @@ +:~ %ucm +== diff --git a/desk/desk.docket-0 b/desk/desk.docket-0 new file mode 100644 index 0000000..1e4e334 --- /dev/null +++ b/desk/desk.docket-0 @@ -0,0 +1,11 @@ +:~ + title+'Urbit Community Manager' + info+'Self-host your whole community on Urbit' + color+0xef.f0f4 + version+[0 1 0] + website+'https://sortug.com' + license+'MIT' + image+'https://s3.sortug.com/img/icons/ucm-logo.png' + base+'ucm' + glob-http+['https://s3.sortug.com/globs/glob-0v1.fiva2.d83ct.k90tn.n7tjl.58mjq.glob' 0v1.fiva2.d83ct.k90tn.n7tjl.58mjq] +== diff --git a/desk/desk.ship b/desk/desk.ship new file mode 100644 index 0000000..6d9f878 --- /dev/null +++ b/desk/desk.ship @@ -0,0 +1 @@ +~dister-bonbud-macryg \ No newline at end of file diff --git a/desk/gen/blog/export.hoon b/desk/gen/blog/export.hoon new file mode 100644 index 0000000..f9fa526 --- /dev/null +++ b/desk/gen/blog/export.hoon @@ -0,0 +1,5 @@ +:- %say +:: css is whether to append the css to exported html in ') +:: +++ http-response-cards + |= [id=@tas hed=response-header:http data=(unit octs)] + ^- (list card:agent:gall) + =/ paths [/http-response/[id]]~ + :~ [%give %fact paths %http-response-header !>(hed)] + [%give %fact paths %http-response-data !>(data)] + [%give %kick paths ~] + == +++ serve + |= [eyre-id=@ta =simple-payload:http] + ^- (list card:agent:gall) + =/ header-cage + [%http-response-header !>(response-header.simple-payload)] + =/ data-cage + [%http-response-data !>(data.simple-payload)] + :~ [%give %fact ~[/http-response/[eyre-id]] header-cage] + [%give %fact ~[/http-response/[eyre-id]] data-cage] + [%give %kick ~[/http-response/[eyre-id]] ~] + == ++$ request-line + $: [ext=(unit @ta) site=(list @t)] + args=(list [key=@t value=@t]) + == +:: +parse-request-line: take a cord and parse out a url +:: +++ parse-request-line + |= url=@t + ^- request-line + (fall (rush url ;~(plug apat:de-purl:html yque:de-purl:html)) [[~ ~] ~]) +++ serve-manx |= =manx ^- simple-payload:http + :- [200 [['content-type' 'text/html'] ~]] + `(as-octt:mimes:html (en-xml:html manx)) + +++ serve-file |= [name=@t htmls=@t] ^- simple-payload:http + :- [200 [['content-type' 'text/html'] ~]] + `(as-octs:mimes:html htmls) + +++ insert |= [layout=manx body=marl] ^- manx + =/ m layout + |- + ?~ c.m m + ?: .=(%body n.g.i.c.m) + =. c.i.c.m (weld c.i.c.m body) m + $(c.m t.c.m) +++ login-page + |= redirect=tape + ^- manx +:: TODO + =/ css ^~ %- trip + ''' + #login{ + margin-top: 3rem; + & h1, & p { + text-align: center; + } + & form{ + margin: auto; + width: 50%; + text-align: center; + + & input[type=text]{ + outline: none; + padding: 0.5rem; + } + & button{ + display: block; + margin: 1rem auto; + padding: 0.4rem; + background-color: white; + } + + } + } + ''' +;html + ;head + ;title:"Sblog" + ;meta(charset "utf-8"); + == + ;body + ;div#login.blog + ;style: {css} + ;h1: Login + ;p: Please login to your Urbit ID to access this page. + ;form(action "/~/login", method "post") + ;input.mono(type "text") + =name "name" + =id "name" + =placeholder "~sorreg-namtyv" + =required "true" + =minlength "4" + =maxlength "14" + =pattern "~((([a-z]\{6})\{1,2}-\{0,2})+|[a-z]\{3})"; + ;input(type "hidden", name "redirect", value redirect); + ;button(name "eauth", type "submit"):"Login" + == + == + == +== +++ not-found-page ^- manx +:: TODO +;html + ;head + ;title:"Sblog" + ;meta(charset "utf-8"); + == + ;body + ;p:"404" + == +== +++ layout ^- manx +;html + ;head + ;title:"Sblog" + ;meta(charset "utf-8"); + == + ;body + ;span; + == +== +-- diff --git a/desk/lib/web.hoon b/desk/lib/web.hoon new file mode 100644 index 0000000..4b0fb67 --- /dev/null +++ b/desk/lib/web.hoon @@ -0,0 +1,319 @@ +/- sur=ucm, docket +/+ server, jon=json, sr=sortug, metamask, cons=constants +|_ [=bowl:gall eyre-id=@ta req=inbound-request:eyre =state:sur] ++$ card card:agent:gall +++ session-timeout ~d300 +:: +++ get-file-at + |= [base=path file=path ext=@ta] + ^- (unit octs) + =/ =path + :* (scot %p our.bowl) + q.byk.bowl + (scot %da now.bowl) + (snoc (weld base file) ext) + == + ?. .^(? %cu path) ~ + %- some + %- as-octs:mimes:html + .^(@ %cx path) + +++ handle-get-request + |= [headers=header-list:http request-line:server] + ^- simple-payload:http + ?~ ext $(ext `%html, site [%index ~]) + ?: ?=([%ucm *] site) $(site +.site) + :: serve dynamic session.js + :: + ?: =([/session `%js] [site ext]) + %- js-response:gen:server + %- as-octt:mimes:html + """ + window.ship = '{(scow %p src.bowl)}'; + """ + =/ file=(unit octs) + (get-file-at /web site u.ext) + ?~ file ~& "file not found" not-found:gen:server + ?+ u.ext not-found:gen:server + %html (html-response:gen:server u.file) + %js (js-response:gen:server u.file) + %css (css-response:gen:server u.file) + %png (png-response:gen:server u.file) + == + + + + + + + + +++ route + :: set cookie + =/ metalib ~(. metamask [sessions.state bowl]) + =/ rl (parse-request-line:server url.request.req) + =/ sitepath=path /[(head site.rl)] + =/ pat=(pole knot) site.rl + ?: .=(%'PUT' method.request.req) (ninja-put pat) + ?+ pat ebail + [%ucm %metamask rest=*] (serve-metamask-challenge:metalib eyre-id) + [%ucm %auth rest=*] (process-metamask-auth:metalib eyre-id body.request.req) + [%ucm %api rest=*] (serve-site-json rest.pat) + [%ucm %napi rest=*] (ninja-scry rest.pat) + [site=@t *] (send-response (handle-get-request header-list.request.req rl)) + == ++$ channel-request + $% :: %ack: acknowledges that the client has received events up to :id + :: + [%ack event-id=@ud] + :: %poke: pokes an application, validating :noun against :mark + :: + [%poke request-id=@ud ship=@p app=term mark=@tas =noun] + :: %poke-json: pokes an application, translating :json to :mark + :: + :: TODO important!! must add desk + [%poke-json request-id=@ud ship=@p desk=term app=term mark=@tas =json] + :: %watch: subscribes to an application path + :: + [%subscribe request-id=@ud ship=@p app=term =path] + :: %leave: unsubscribes from an application path + :: + [%unsubscribe request-id=@ud subscription-id=@ud] + :: %delete: kills a channel + :: + [%delete ~] + == +++ parse-channel-request-json + |= request-list=json + ^- (unit (list channel-request)) + :: parse top + :: + =, dejs-soft:format + =- ((ar -) request-list) + :: + |= item=json + ^- (unit channel-request) + :: + ?~ maybe-key=((ot action+so ~) item) + ~ + ?: =('ack' u.maybe-key) + ((pe %ack (ot event-id+ni ~)) item) + ?: =('poke' u.maybe-key) + %. item + %+ pe %poke-json + :: TODO important!! must add desk + (ot id+ni ship+(su fed:ag) desk+so app+so mark+(su sym) json+some ~) + ?: =('subscribe' u.maybe-key) + %. item + %+ pe %subscribe + (ot id+ni ship+(su fed:ag) app+so path+(su stap) ~) + ?: =('unsubscribe' u.maybe-key) + %. item + %+ pe %unsubscribe + (ot id+ni subscription+ni ~) + ?: =('delete' u.maybe-key) + `[%delete ~] + :: if we reached this, we have an invalid action key. fail parsing. + :: + ~ + + +++ ninja-put |= pat=(pole knot) + ^- (list card) + =/ octs body.request.req + ?~ octs ~|(%empty-auth-request !!) + =/ jon (de:json:html q.u.octs) + ?~ jon ~|(%empty-auth-json !!) + %+ weld + %- send-response + (json-response:gen:server [%s 'ok']) + =/ body=json u.jon + =/ mchan-reqs (parse-channel-request-json body) + ?~ mchan-reqs ~ + %+ roll u.mchan-reqs |= [cr=channel-request acc=(list card)] + ?+ -.cr acc + %poke-json + :: TODO channels has ?>(.=(our.bowl src.bowk)) + :: channels-server has ?>(.=(src.bowl author.essay)) + :: damn wat do + =/ =mars:clay [%json mark.cr] + =/ mars-path /[a.mars]/[b.mars] + =/ base /(scot %p our.bowl)/[desk.cr]/(scot %da now.bowl) + =/ scry-path (weld base mars-path) + =/ mark-conversion-gate .^(tube:clay %cc scry-path) + =/ vas (mark-conversion-gate !>(json.cr)) + :_ acc + [%pass /ninja-poke %agent [ship.cr app.cr] %poke mark.cr vas] + == + + :: ~& ninja-put=pat + :: ?. ?=([%ucm rest=*] pat) !! + :: =/ channel-url (path:enjs:format rest.pat) + :: ?. ?=(%s -.channel-url) !! + :: :_ ~ + :: [%pass /ninja-poke %arvo %k %fard %ucm %iris-thread %noun !>([+.channel-url request.req])] + :: ~& ninja-put=req + :: =/ octs body.request.req + :: ?~ octs ~|(%empty-auth-request !!) + :: =/ jon (de:json:html q.u.octs) + :: ?~ jon ~|(%empty-auth-json !!) + :: =/ body=json u.jon + :: ~& (en:json:html body) +++ session-cookie-string + |= [session=@uv extend=?] + ^- @t + %- crip + =; max-age=tape + :: "urbauth-{(scow %p src.bowl)}={(scow %uv session)}; Path=/; Max-Age={max-age}" + "ucm-{(scow %p src.bowl)}={(scow %uv session)}; Path=/; Max-Age={max-age}" + %+ scow:parsing:sr %ud + ?. extend 0 + (div (msec:milly session-timeout) 1.000) +++ session-id-from-request + |= =request:http + ^- (unit @uv) + :: are there cookies passed with this request? + :: + =/ cookie-header=@t + %+ roll header-list.request + |= [[key=@t value=@t] c=@t] + ?. =(key 'cookie') + c + (cat 3 (cat 3 c ?~(c 0 '; ')) value) + :: is the cookie line valid? + :: + ?~ cookies=(rush cookie-header cock:de-purl:html) + ~ + :: is there an urbauth cookie? + :: + ?~ urbauth=(get-header:http (crip "urblog-{(scow %p src.bowl)}") u.cookies) + ~ + :: if it's formatted like a valid session cookie, produce it + :: + `(unit @)`(rush u.urbauth ;~(pfix (jest '0v') viz:ag)) +++ send-response + |= =simple-payload:http + =/ cookie ['set-cookie' (session-cookie-string 0vublog .y)] + =. headers.response-header.simple-payload + [cookie headers.response-header.simple-payload] + %+ give-simple-payload:app:server eyre-id simple-payload + +++ ebail + ^- (list card:agent:gall) + (send-response pbail) +++ egive + |= pl=simple-payload:http + ^- (list card:agent:gall) + (send-response pl) +++ pbail + %- html-response:gen:server + %- manx-to-octs:server + manx-bail +++ manx-bail ^- manx ;div:"404" +++ manx-payload + |= =manx + ^- simple-payload:http + %- html-response:gen:server + %- manx-to-octs:server manx +:: +++ serve-site-json :: serve site state and group state + |= =path + =/ site (~(get by sites.state) path) + ?~ site ebail + =/ site-j=json (en-site:en:jon u.site) + + =/ group-j .^(json %gx /(scot %p our.bowl)/groups/(scot %da now.bowl)/groups/(scot %p our.bowl)/[groupname.u.site]/v1/json) + =/ j=json %- pairs:enjs:format + :~ group+group-j + site+site-j + == + %- send-response + (json-response:gen:server j) +++ ninja-scry :: serve site state and group state + |= pat=path + :: ~& >> ninja-scry=[eyre-id pat] + ?~ pat !! + =/ [app=@t rest=path] pat + =/ base /(scot %p our.bowl)/[app]/(scot %da now.bowl) + =/ scrypath (weld (weld base rest) /json) + =/ res .^(json %gx scrypath) + %- send-response + (json-response:gen:server res) + + :: async function scryGroups() { + :: const app = "groups"; + :: const path = "/groups/v1"; + :: return await scry(app, path); + :: } + + :: async function scryDiary( + :: ship: Ship, + :: name: string, + :: count: number, + :: ): Promise { + :: const app = "channels"; + :: const path = `/v1/diary/${ship}/${name}/posts/newest/${count}/post`; + :: return await scry(app, path); + :: } + :: async function scryDiaryPost( + :: ship: Ship, + :: name: string, + :: id: string, + :: ): Promise { + :: const app = "channels"; + :: const path = `/v1/diary/${ship}/${name}/posts/post/${id}`; + :: return await scry(app, path); + :: } + :: async function scryChat( + :: ship: Ship, + :: name: string, + :: count: number, + :: ): Promise { + :: const app = "channels"; + :: const path = `/v1/chat/${ship}/${name}/posts/newest/${count}/post`; + :: return await scry(app, path); + :: } + + :: // other apps + + :: async function scryPikes() { + :: const app = "hood"; + :: const path = "/kiln/pikes"; + :: return await scry(app, path); + :: } + + + + + + +++ payload-from-glob + |= [=glob:docket what=request-line:server eyre-id=@ta] + %- send-response + ^- simple-payload:http + =/ suffix=path + (weld site.what (drop ext.what)) + ?: =(suffix /desk/js) + %- inline-js-response + (rap 3 'window.desk = "' %ucm '";' ~) + =? suffix !(~(has by glob) suffix) + (turn suffix |=(s=@t (crip (en-urlt:html (trip s))))) + =/ requested + ?: (~(has by glob) suffix) suffix + %+ weld suffix /index/html + =/ data=mime + (~(got by glob) requested) + =/ mime-type=@t (rsh 3 (crip )) + =; headers + [[200 headers] `q.data] + :- content-type+mime-type + ?: =(/index/html requested) ~ + ~[max-1-wk:gen:server] +++ inline-js-response + |= js=cord + ^- simple-payload:http + %. (as-octs:mimes:html js) + %* . js-response:gen:server + cache %.n + == +-- diff --git a/desk/mar/arch.hoon b/desk/mar/arch.hoon new file mode 100644 index 0000000..ff1dfa5 --- /dev/null +++ b/desk/mar/arch.hoon @@ -0,0 +1,16 @@ +|_ arch=(list @ta) +:: +++ grab + |% + ++ noun (list @ta) + -- +:: +++ grow + |% + ++ noun arch + ++ json + [%a (turn arch |=(c=@ta [%s c]))] + -- +:: +++ grad %noun +-- diff --git a/desk/mar/bill.hoon b/desk/mar/bill.hoon new file mode 100644 index 0000000..76cef34 --- /dev/null +++ b/desk/mar/bill.hoon @@ -0,0 +1,34 @@ +|_ bil=(list dude:gall) +++ grow + |% + ++ mime `^mime`[/text/x-bill (as-octs:mimes:html hoon)] + ++ noun bil + ++ hoon + ^- @t + |^ (crip (of-wall:format (wrap-lines (spit-duz bil)))) + :: + ++ wrap-lines + |= taz=wall + ^- wall + ?~ taz ["~"]~ + :- (weld ":~ " i.taz) + %- snoc :_ "==" + (turn t.taz |=(t=tape (weld " " t))) + :: + ++ spit-duz + |= duz=(list dude:gall) + ^- wall + (turn duz |=(=dude:gall ['%' (trip dude)])) + -- + ++ txt (to-wain:format hoon) + -- +++ grab + |% + ++ noun (list dude:gall) + ++ mime + |= [=mite len=@ud tex=@] + ~_ tex + !<((list dude:gall) (slap !>(~) (ream tex))) + -- +++ grad %noun +-- diff --git a/desk/mar/css.hoon b/desk/mar/css.hoon new file mode 100644 index 0000000..c4810b2 --- /dev/null +++ b/desk/mar/css.hoon @@ -0,0 +1,21 @@ +:: +:::: /hoon/css/mar + :: +/? 310 +=, eyre +=, mimes:html +|_ mud=@t +++ grow :: convert to + |% ++ mime [/text/css (as-octs mud)] :: convert to %mime + ++ elem ;style :: convert to %hymn + ;- (trip mud) + == + ++ hymn ;html:(head:"{elem}" body) + -- +++ grab + |% :: convert from + ++ mime |=([p=mite q=octs] (@t q.q)) + ++ noun @t :: clam from %noun + -- +++ grad %mime +-- diff --git a/desk/mar/docket-0.hoon b/desk/mar/docket-0.hoon new file mode 100644 index 0000000..911d34c --- /dev/null +++ b/desk/mar/docket-0.hoon @@ -0,0 +1,25 @@ +/+ dock=docket +|_ =docket:dock +++ grow + |% + ++ mime + ^- ^mime + [/text/x-docket (as-octt:mimes:html (spit-docket:mime:dock docket))] + ++ noun docket + ++ json (docket:enjs:dock docket) + -- +++ grab + |% + :: + ++ mime + |= [=mite len=@ud tex=@] + ^- docket:dock + %- need + %- from-clauses:mime:dock + !<((list clause:dock) (slap !>(~) (ream tex))) + + :: + ++ noun docket:dock + -- +++ grad %noun +-- diff --git a/desk/mar/docket/install.hoon b/desk/mar/docket/install.hoon new file mode 100644 index 0000000..3f021b6 --- /dev/null +++ b/desk/mar/docket/install.hoon @@ -0,0 +1,14 @@ +|_ [=ship =desk] +++ grad %noun +++ grow + |% + ++ noun [ship desk] + ++ json `^json`s+(crip "{(scow %p ship)}/{(trip desk)}") + -- +++ grab + |% + ++ noun _[ship desk] + ++ json + (su:dejs:format ;~((glue fas) ;~(pfix sig fed:ag) sym)) + -- +-- diff --git a/desk/mar/docket/uninstall.hoon b/desk/mar/docket/uninstall.hoon new file mode 100644 index 0000000..335cd95 --- /dev/null +++ b/desk/mar/docket/uninstall.hoon @@ -0,0 +1,13 @@ +|_ =desk +++ grad %noun +++ grow + |% + ++ noun desk + ++ json s+desk + -- +++ grab + |% + ++ noun ^desk + ++ json so:dejs:format + -- +-- diff --git a/desk/mar/hoon.hoon b/desk/mar/hoon.hoon new file mode 100644 index 0000000..b6f5906 --- /dev/null +++ b/desk/mar/hoon.hoon @@ -0,0 +1,49 @@ +:::: /hoon/hoon/mar + :: +/? 310 +:: +=, eyre +|_ own=@t +:: +++ grow :: convert to + |% + ++ mime `^mime`[/text/x-hoon (as-octs:mimes:html own)] :: convert to %mime + ++ elem :: convert to %html + ;div:pre(urb_codemirror "", mode "hoon"):"{(trip own)}" + :: =+ gen-id="src-{<`@ui`(mug own)>}" + :: ;div + :: ;textarea(id "{gen-id}"):"{(trip own)}" + :: ;script:""" + :: CodeMirror.fromTextArea( + :: window[{}], + :: \{lineNumbers:true, readOnly:true} + :: ) + :: """ + :: == + ++ hymn + :: ;html:(head:title:"Source" "+{elem}") + ;html + ;head + ;title:"Source" + ;script@"//cdnjs.cloudflare.com/ajax/libs/codemirror/4.3.0/codemirror.js"; + ;script@"/lib/syntax/hoon.js"; + ;link(rel "stylesheet", href "//cdnjs.cloudflare.com/ajax/libs/". + "codemirror/4.3.0/codemirror.min.css"); + ;link/"/lib/syntax/codemirror.css"(rel "stylesheet"); + == + ;body + ;textarea#src:"{(trip own)}" + ;script:'CodeMirror.fromTextArea(src, {lineNumbers:true, readOnly:true})' + == + == + ++ txt + (to-wain:format own) + -- +++ grab + |% :: convert from + ++ mime |=([p=mite q=octs] q.q) + ++ noun @t :: clam from %noun + ++ txt of-wain:format + -- +++ grad %txt +-- diff --git a/desk/mar/html.hoon b/desk/mar/html.hoon new file mode 100644 index 0000000..203d75f --- /dev/null +++ b/desk/mar/html.hoon @@ -0,0 +1,22 @@ +:: +:::: /hoon/html/mar + :: +/? 310 + :: +:::: compute + :: +=, html +|_ htm=@t +++ grow :: convert to + ^? + |% :: + ++ mime [/text/html (met 3 htm) htm] :: to %mime + ++ hymn (need (de-xml htm)) :: to %hymn + -- :: +++ grab ^? + |% :: convert from + ++ noun @t :: clam from %noun + ++ mime |=([p=mite q=octs] q.q) :: retrieve form %mime + -- +++ grad %mime +-- diff --git a/desk/mar/ico.hoon b/desk/mar/ico.hoon new file mode 100644 index 0000000..e862b9b --- /dev/null +++ b/desk/mar/ico.hoon @@ -0,0 +1,12 @@ +|_ dat=@ +++ grow + |% + ++ mime [/image/x-icon (as-octs:mimes:html dat)] + -- +++ grab + |% + ++ mime |=([p=mite q=octs] q.q) + ++ noun @ + -- +++ grad %mime +-- diff --git a/desk/mar/js.hoon b/desk/mar/js.hoon new file mode 100644 index 0000000..fe010d9 --- /dev/null +++ b/desk/mar/js.hoon @@ -0,0 +1,25 @@ +:: +:::: /hoon/js/mar + :: +/? 310 +:: +=, eyre +|_ mud=@ +++ grow + |% + ++ mime [/application/javascript (as-octs:mimes:html (@t mud))] + ++ hymn :: convert to %hymn + |^ html + ++ script ;script + ;- (trip (@t mud)) + == + ++ html ;html:(head:"{script}" body) + -- + -- +++ grab + |% :: convert from + ++ mime |=([p=mite q=octs] (@t q.q)) + ++ noun cord :: clam from %noun + -- +++ grad %mime +-- diff --git a/desk/mar/json.hoon b/desk/mar/json.hoon new file mode 100644 index 0000000..7d6fcbf --- /dev/null +++ b/desk/mar/json.hoon @@ -0,0 +1,26 @@ +:: +:::: /hoon/json/mar + :: +/? 310 + :: +:::: compute + :: +=, eyre +=, format +=, html +|_ jon=^json +:: +++ grow :: convert to + |% + ++ mime [/application/json (as-octs:mimes -:txt)] :: convert to %mime + ++ txt [(en:json jon)]~ + -- +++ grab + |% :: convert from + ++ mime |=([p=mite q=octs] (fall (de:json (@t q.q)) *^json)) + ++ noun ^json :: clam from %noun + ++ numb numb:enjs + ++ time time:enjs + -- +++ grad %mime +-- diff --git a/desk/mar/kelvin.hoon b/desk/mar/kelvin.hoon new file mode 100644 index 0000000..7f1b409 --- /dev/null +++ b/desk/mar/kelvin.hoon @@ -0,0 +1,28 @@ +|_ kal=waft:clay +++ grow + |% + ++ mime `^mime`[/text/x-kelvin (as-octs:mimes:html hoon)] + ++ noun kal + ++ hoon + %+ rap 3 + %+ turn + %+ sort + ~(tap in (waft-to-wefts:clay kal)) + |= [a=weft b=weft] + ?: =(lal.a lal.b) + (gte num.a num.b) + (gte lal.a lal.b) + |= =weft + (rap 3 '[%' (scot %tas lal.weft) ' ' (scot %ud num.weft) ']\0a' ~) + :: + ++ txt (to-wain:format hoon) + -- +++ grab + |% + ++ noun waft:clay + ++ mime + |= [=mite len=@ud tex=@] + (cord-to-waft:clay tex) + -- +++ grad %noun +-- diff --git a/desk/mar/md.hoon b/desk/mar/md.hoon new file mode 100644 index 0000000..4f790f8 --- /dev/null +++ b/desk/mar/md.hoon @@ -0,0 +1,20 @@ +:: +:::: /hoon/md/mar + :: +/? 310 +:: +=, format +=, mimes:html +|_ txt=wain +:: +++ grab :: convert from + |% + ++ mime |=((pair mite octs) (to-wain q.q)) + ++ noun wain :: clam from %noun + -- +++ grow + |% + ++ mime [/text/plain (as-octs (of-wain txt))] + -- +++ grad %mime +-- diff --git a/desk/mar/mime.hoon b/desk/mar/mime.hoon new file mode 100644 index 0000000..83b4dae --- /dev/null +++ b/desk/mar/mime.hoon @@ -0,0 +1,32 @@ +:: +:::: /hoon/mime/mar + :: +/? 310 +:: +|_ own=mime +++ grow + ^? + |% + ++ jam `@`q.q.own + -- +:: +++ grab :: convert from + ^? + |% + ++ noun mime :: clam from %noun + ++ tape + |=(a=_"" [/application/x-urb-unknown (as-octt:mimes:html a)]) + -- +++ grad + ^? + |% + ++ form %mime + ++ diff |=(mime +<) + ++ pact |=(mime +<) + ++ join |=([mime mime] `(unit mime)`~) + ++ mash + |= [[ship desk mime] [ship desk mime]] + ^- mime + ~|(%mime-mash !!) + -- +-- diff --git a/desk/mar/ninja.hoon b/desk/mar/ninja.hoon new file mode 100644 index 0000000..7d6fcbf --- /dev/null +++ b/desk/mar/ninja.hoon @@ -0,0 +1,26 @@ +:: +:::: /hoon/json/mar + :: +/? 310 + :: +:::: compute + :: +=, eyre +=, format +=, html +|_ jon=^json +:: +++ grow :: convert to + |% + ++ mime [/application/json (as-octs:mimes -:txt)] :: convert to %mime + ++ txt [(en:json jon)]~ + -- +++ grab + |% :: convert from + ++ mime |=([p=mite q=octs] (fall (de:json (@t q.q)) *^json)) + ++ noun ^json :: clam from %noun + ++ numb numb:enjs + ++ time time:enjs + -- +++ grad %mime +-- diff --git a/desk/mar/noun.hoon b/desk/mar/noun.hoon new file mode 100644 index 0000000..7fe50f1 --- /dev/null +++ b/desk/mar/noun.hoon @@ -0,0 +1,22 @@ +:: +:::: /hoon/noun/mar + :: +/? 310 +!: +|_ non=* +++ grab |% + ++ noun * + ++ mime |=([p=mite q=octs] (cue q.q)) + -- +++ grow |% + ++ mime [/application/octet-stream (as-octs:mimes:html (jam non))] + -- +++ grad + |% + ++ form %noun + ++ diff |=(* +<) + ++ pact |=(* +<) + ++ join |=([* *] *(unit *)) + ++ mash |=([[ship desk *] [ship desk *]] `*`~|(%noun-mash !!)) + -- +-- diff --git a/desk/mar/png.hoon b/desk/mar/png.hoon new file mode 100644 index 0000000..6a60a6a --- /dev/null +++ b/desk/mar/png.hoon @@ -0,0 +1,12 @@ +|_ dat=@ +++ grow + |% + ++ mime [/image/png (as-octs:mimes:html dat)] + -- +++ grab + |% + ++ mime |=([p=mite q=octs] q.q) + ++ noun @ + -- +++ grad %mime +-- diff --git a/desk/mar/ship.hoon b/desk/mar/ship.hoon new file mode 100644 index 0000000..176bcad --- /dev/null +++ b/desk/mar/ship.hoon @@ -0,0 +1,20 @@ +|_ s=ship +++ grad %noun +++ grow + |% + ++ noun s + ++ json s+(scot %p s) + ++ mime + ^- ^mime + [/text/x-ship (as-octt:mimes:html (scow %p s))] + + -- +++ grab + |% + ++ noun ship + ++ json (su:dejs:format ;~(pfix sig fed:ag)) + ++ mime + |= [=mite len=@ tex=@] + (slav %p (snag 0 (to-wain:format tex))) + -- +-- diff --git a/desk/mar/sss/blog-paths.hoon b/desk/mar/sss/blog-paths.hoon new file mode 100644 index 0000000..9b746e3 --- /dev/null +++ b/desk/mar/sss/blog-paths.hoon @@ -0,0 +1,6 @@ +:: +:: XX remove this file in transition to %4 +:: +/- blog-paths +/+ *sss +(mk-mar blog-paths) diff --git a/desk/mar/sss/to-pub.hoon b/desk/mar/sss/to-pub.hoon new file mode 100644 index 0000000..a042502 --- /dev/null +++ b/desk/mar/sss/to-pub.hoon @@ -0,0 +1,15 @@ +:: +:: XX remove this file in transition to %4 +:: +/- *sss +|_ =(request:poke) +++ grow + |% + ++ noun request + -- +++ grab + |% + ++ noun (request:poke) + -- +++ grad %noun +-- diff --git a/desk/mar/svg.hoon b/desk/mar/svg.hoon new file mode 100644 index 0000000..2911e49 --- /dev/null +++ b/desk/mar/svg.hoon @@ -0,0 +1,12 @@ +|_ dat=@ +++ grow + |% + ++ mime [/image/'svg+xml' (as-octs:mimes:html dat)] + -- +++ grab + |% + ++ mime |=([p=mite q=octs] q.q) + ++ noun @ + -- +++ grad %mime +-- diff --git a/desk/mar/txt.hoon b/desk/mar/txt.hoon new file mode 100644 index 0000000..982dce9 --- /dev/null +++ b/desk/mar/txt.hoon @@ -0,0 +1,274 @@ +:: +:::: /hoon/txt/mar + :: +/? 310 +:: +=, clay +=, differ +=, format +=, mimes:html +|_ txt=wain +:: +++ grab :: convert from + |% + ++ mime |=((pair mite octs) (to-wain q.q)) + ++ noun wain :: clam from %noun + -- +++ grow + => v=. + |% + ++ mime => v [/text/plain (as-octs (of-wain txt))] + -- +++ grad + |% + ++ form %txt-diff + ++ diff + |= tyt=wain + ^- (urge cord) + (lusk txt tyt (loss txt tyt)) + :: + ++ pact + |= dif=(urge cord) + ~| [%pacting dif] + ^- wain + (lurk txt dif) + :: + ++ join + |= [ali=(urge cord) bob=(urge cord)] + ^- (unit (urge cord)) + |^ + =. ali (clean ali) + =. bob (clean bob) + |- ^- (unit (urge cord)) + ?~ ali `bob + ?~ bob `ali + ?- -.i.ali + %& + ?- -.i.bob + %& + ?: =(p.i.ali p.i.bob) + %+ bind $(ali t.ali, bob t.bob) + |=(cud=(urge cord) [i.ali cud]) + ?: (gth p.i.ali p.i.bob) + %+ bind $(p.i.ali (sub p.i.ali p.i.bob), bob t.bob) + |=(cud=(urge cord) [i.bob cud]) + %+ bind $(ali t.ali, p.i.bob (sub p.i.bob p.i.ali)) + |=(cud=(urge cord) [i.ali cud]) + :: + %| + ?: =(p.i.ali (lent p.i.bob)) + %+ bind $(ali t.ali, bob t.bob) + |=(cud=(urge cord) [i.bob cud]) + ?: (gth p.i.ali (lent p.i.bob)) + %+ bind $(p.i.ali (sub p.i.ali (lent p.i.bob)), bob t.bob) + |=(cud=(urge cord) [i.bob cud]) + ~ + == + :: + %| + ?- -.i.bob + %| + ?. =(i.ali i.bob) + ~ + %+ bind $(ali t.ali, bob t.bob) + |=(cud=(urge cord) [i.ali cud]) + :: + %& + ?: =(p.i.bob (lent p.i.ali)) + %+ bind $(ali t.ali, bob t.bob) + |=(cud=(urge cord) [i.ali cud]) + ?: (gth p.i.bob (lent p.i.ali)) + %+ bind $(ali t.ali, p.i.bob (sub p.i.bob (lent p.i.ali))) + |=(cud=(urge cord) [i.ali cud]) + ~ + == + == + ++ clean :: clean + |= wig=(urge cord) + ^- (urge cord) + ?~ wig ~ + ?~ t.wig wig + ?: ?=(%& -.i.wig) + ?: ?=(%& -.i.t.wig) + $(wig [[%& (add p.i.wig p.i.t.wig)] t.t.wig]) + [i.wig $(wig t.wig)] + ?: ?=(%| -.i.t.wig) + $(wig [[%| (welp p.i.wig p.i.t.wig) (welp q.i.wig q.i.t.wig)] t.t.wig]) + [i.wig $(wig t.wig)] + -- + :: + ++ mash + |= $: [als=ship ald=desk ali=(urge cord)] + [bos=ship bod=desk bob=(urge cord)] + == + ^- (urge cord) + |^ + =. ali (clean ali) + =. bob (clean bob) + |- ^- (urge cord) + ?~ ali bob + ?~ bob ali + ?- -.i.ali + %& + ?- -.i.bob + %& + ?: =(p.i.ali p.i.bob) + [i.ali $(ali t.ali, bob t.bob)] + ?: (gth p.i.ali p.i.bob) + [i.bob $(p.i.ali (sub p.i.ali p.i.bob), bob t.bob)] + [i.ali $(ali t.ali, p.i.bob (sub p.i.bob p.i.ali))] + :: + %| + ?: =(p.i.ali (lent p.i.bob)) + [i.bob $(ali t.ali, bob t.bob)] + ?: (gth p.i.ali (lent p.i.bob)) + [i.bob $(p.i.ali (sub p.i.ali (lent p.i.bob)), bob t.bob)] + =/ [fic=(unce cord) ali=(urge cord) bob=(urge cord)] + (resolve ali bob) + [fic $(ali ali, bob bob)] + :: ~ :: here, alice is good for a while, but not for the whole + == :: length of bob's changes + :: + %| + ?- -.i.bob + %| + =/ [fic=(unce cord) ali=(urge cord) bob=(urge cord)] + (resolve ali bob) + [fic $(ali ali, bob bob)] + :: + %& + ?: =(p.i.bob (lent p.i.ali)) + [i.ali $(ali t.ali, bob t.bob)] + ?: (gth p.i.bob (lent p.i.ali)) + [i.ali $(ali t.ali, p.i.bob (sub p.i.bob (lent p.i.ali)))] + =/ [fic=(unce cord) ali=(urge cord) bob=(urge cord)] + (resolve ali bob) + [fic $(ali ali, bob bob)] + == + == + :: + ++ annotate :: annotate conflict + |= $: ali=(list @t) + bob=(list @t) + bas=(list @t) + == + ^- (list @t) + %- zing + ^- (list (list @t)) + %- flop + ^- (list (list @t)) + :- :_ ~ + %^ cat 3 '<<<<<<<<<<<<' + %^ cat 3 ' ' + %^ cat 3 `@t`(scot %p bos) + %^ cat 3 '/' + bod + + :- bob + :- ~['------------'] + :- bas + :- ~['++++++++++++'] + :- ali + :- :_ ~ + %^ cat 3 '>>>>>>>>>>>>' + %^ cat 3 ' ' + %^ cat 3 `@t`(scot %p als) + %^ cat 3 '/' + ald + ~ + :: + ++ clean :: clean + |= wig=(urge cord) + ^- (urge cord) + ?~ wig ~ + ?~ t.wig wig + ?: ?=(%& -.i.wig) + ?: ?=(%& -.i.t.wig) + $(wig [[%& (add p.i.wig p.i.t.wig)] t.t.wig]) + [i.wig $(wig t.wig)] + ?: ?=(%| -.i.t.wig) + $(wig [[%| (welp p.i.wig p.i.t.wig) (welp q.i.wig q.i.t.wig)] t.t.wig]) + [i.wig $(wig t.wig)] + :: + ++ resolve + |= [ali=(urge cord) bob=(urge cord)] + ^- [fic=[%| p=(list cord) q=(list cord)] ali=(urge cord) bob=(urge cord)] + =- [[%| bac (annotate alc boc bac)] ali bob] + |- ^- $: $: bac=(list cord) + alc=(list cord) + boc=(list cord) + == + ali=(urge cord) + bob=(urge cord) + == + ?~ ali [[~ ~ ~] ali bob] + ?~ bob [[~ ~ ~] ali bob] + ?- -.i.ali + %& + ?- -.i.bob + %& [[~ ~ ~] ali bob] :: no conflict + %| + =+ lob=(lent p.i.bob) + ?: =(lob p.i.ali) + [[p.i.bob p.i.bob q.i.bob] t.ali t.bob] + ?: (lth lob p.i.ali) + [[p.i.bob p.i.bob q.i.bob] [[%& (sub p.i.ali lob)] t.ali] t.bob] + =+ wat=(scag (sub lob p.i.ali) p.i.bob) + =+ ^= res + %= $ + ali t.ali + bob [[%| (scag (sub lob p.i.ali) p.i.bob) ~] t.bob] + == + :* :* (welp bac.res wat) + (welp alc.res wat) + (welp boc.res q.i.bob) + == + ali.res + bob.res + == + == + :: + %| + ?- -.i.bob + %& + =+ loa=(lent p.i.ali) + ?: =(loa p.i.bob) + [[p.i.ali q.i.ali p.i.ali] t.ali t.bob] + ?: (lth loa p.i.bob) + [[p.i.ali q.i.ali p.i.ali] t.ali [[%& (sub p.i.bob loa)] t.bob]] + =+ wat=(slag (sub loa p.i.bob) p.i.ali) + =+ ^= res + %= $ + ali [[%| (scag (sub loa p.i.bob) p.i.ali) ~] t.ali] + bob t.bob + == + :* :* (welp bac.res wat) + (welp alc.res q.i.ali) + (welp boc.res wat) + == + ali.res + bob.res + == + :: + %| + =+ loa=(lent p.i.ali) + =+ lob=(lent p.i.bob) + ?: =(loa lob) + [[p.i.ali q.i.ali q.i.bob] t.ali t.bob] + =+ ^= res + ?: (gth loa lob) + $(ali [[%| (scag (sub loa lob) p.i.ali) ~] t.ali], bob t.bob) + ~& [%scagging loa=loa pibob=p.i.bob slag=(scag loa p.i.bob)] + $(ali t.ali, bob [[%| (scag (sub lob loa) p.i.bob) ~] t.bob]) + :* :* (welp bac.res ?:((gth loa lob) p.i.bob p.i.ali)) + (welp alc.res q.i.ali) + (welp boc.res q.i.bob) + == + ali.res + bob.res + == + == + == + -- + -- +-- diff --git a/desk/mar/webmanifest.hoon b/desk/mar/webmanifest.hoon new file mode 100644 index 0000000..6a60a6a --- /dev/null +++ b/desk/mar/webmanifest.hoon @@ -0,0 +1,12 @@ +|_ dat=@ +++ grow + |% + ++ mime [/image/png (as-octs:mimes:html dat)] + -- +++ grab + |% + ++ mime |=([p=mite q=octs] q.q) + ++ noun @ + -- +++ grad %mime +-- diff --git a/desk/mar/woff.hoon b/desk/mar/woff.hoon new file mode 100644 index 0000000..d0a733b --- /dev/null +++ b/desk/mar/woff.hoon @@ -0,0 +1,12 @@ +|_ dat=@ +++ grow + |% + ++ mime [/font/woff (as-octs:mimes:html dat)] + -- +++ grab + |% + ++ mime |=([p=mite q=octs] q.q) + ++ noun @ + -- +++ grad %mime +-- diff --git a/desk/mar/woff2.hoon b/desk/mar/woff2.hoon new file mode 100644 index 0000000..191b669 --- /dev/null +++ b/desk/mar/woff2.hoon @@ -0,0 +1,12 @@ +|_ dat=@ +++ grow + |% + ++ mime [/font/woff2 (as-octs:mimes:html dat)] + -- +++ grab + |% + ++ mime |=([p=mite q=octs] q.q) + ++ noun @ + -- +++ grad %mime +-- diff --git a/desk/sur/blog-paths.hoon b/desk/sur/blog-paths.hoon new file mode 100644 index 0000000..5c1a309 --- /dev/null +++ b/desk/sur/blog-paths.hoon @@ -0,0 +1,21 @@ +:: +:: XX remove this file in transition to %4 +:: +|% +++ name %blog-paths ++$ rock [uri=@t paths=(set path)] ++$ wave + $% [%init paths=(set path)] + [%post =path] + [%depost =path] + [%uri uri=@t] + == +++ wash + |= [=rock =wave] + ?- -.wave + %init rock(paths paths.wave) + %post rock(paths (~(put in paths.rock) path.wave)) + %depost rock(paths (~(del in paths.rock) path.wave)) + %uri rock(uri uri.wave) + == +-- diff --git a/desk/sur/docket.hoon b/desk/sur/docket.hoon new file mode 100644 index 0000000..091c8c9 --- /dev/null +++ b/desk/sur/docket.hoon @@ -0,0 +1,82 @@ +|% +:: ++$ version + [major=@ud minor=@ud patch=@ud] +:: ++$ glob (map path mime) +:: ++$ url cord +:: $glob-location: How to retrieve a glob +:: ++$ glob-reference + [hash=@uvH location=glob-location] +:: ++$ glob-location + $% [%http =url] + [%ames =ship] + == +:: $href: Where a tile links to +:: ++$ href + $% [%glob base=term =glob-reference] + [%site =path] + == +:: $chad: State of a docket +:: ++$ chad + $~ [%install ~] + $% :: Done + [%glob =glob] + [%site ~] + :: Waiting + [%install ~] + [%suspend glob=(unit glob)] + :: Error + [%hung err=cord] + == +:: +:: $charge: A realized $docket +:: ++$ charge + $: =docket + =chad + == +:: +:: $clause: A key and value, as part of a docket +:: +:: Only used to parse $docket +:: ++$ clause + $% [%title title=@t] + [%info info=@t] + [%color color=@ux] + [%glob-http url=cord hash=@uvH] + [%glob-ames =ship hash=@uvH] + [%image =url] + [%site =path] + [%base base=term] + [%version =version] + [%website website=url] + [%license license=cord] + == +:: +:: $docket: A description of JS bundles for a desk +:: ++$ docket + $: %1 + title=@t + info=@t + color=@ux + =href + image=(unit url) + =version + website=url + license=cord + == +:: ++$ charge-update + $% [%initial initial=(map desk charge)] + [%add-charge =desk =charge] + [%del-charge =desk] + == +-- diff --git a/desk/sur/hood.hoon b/desk/sur/hood.hoon new file mode 100644 index 0000000..3cde86c --- /dev/null +++ b/desk/sur/hood.hoon @@ -0,0 +1,392 @@ +/% kelvin %kelvin +=, clay +=* dude dude:gall +|% ++$ pike + $: sync=(unit [=ship =desk]) + hash=@uv + =zest + wic=(set weft) + == +:: ++$ pikes (map desk pike) +:: $jump: changes to update source change requests +:: ++$ jump + $% [%all all=(map dock dock)] :: pending requests + [%add old=dock new=dock] :: new request + [%yea old=dock new=dock] :: approved + [%nay old=dock new=dock] :: denied + == +:: $rung: reference to upstream commit +:: ++$ rung [=aeon =weft] +:: #sync-record: source and destination of a kiln sync +:: ++$ sync-record :: + $: syd=desk :: local desk + her=ship :: foreign ship + sud=desk :: foreign desk + == +:: ++$ sync-state :: + $: nun=@ta :: nonce + kid=(unit desk) :: has kids desk too? + let=@ud :: next revision + nit=(unit ?) :: automerge or default + hav=(unit @ud) :: update available + yea=? :: update approved + == +:: ++$ sync-update + $% [%new for=sync-record rev=@ud] + [%done for=sync-record rev=@ud] + [%drop for=sync-record rev=@ud] + [%pending pending=(set [for=sync-record rev=@ud])] + == +:: ++$ sink (unit [her=@p sud=desk kid=(unit desk) let=@ud]) +:: +truncate-hash: get last 5 digits of hash and convert to tape +:: +++ truncate-hash + |= hash=@uv + ^- tape + (slag 2 <`@uv`(mod hash 0v1.00000)>) +:: +report-prep: get data required for reports +:: +++ report-prep + |= [our=@p now=@da] + =/ ego (scot %p our) + =/ wen (scot %da now) + :* .^(rock:tire %cx /[ego]//[wen]/tire) + .^(cone %cx /[ego]//[wen]/domes) + .^((map desk [ship desk]) %gx /[ego]/hood/[wen]/kiln/sources/noun) + .^ (map [desk ship desk] sync-state) %gx + /[ego]/hood/[wen]/kiln/syncs/noun + == + == +:: +report-vats: report on all desk installations +:: +++ report-vats + |= [our=@p now=@da desks=(list desk) filt=@tas verb=?] + ^- tang + =/ ego (scot %p our) + =/ wen (scot %da now) + =+ prep=[tyr cone sor zyn]=(report-prep our now) + ?: =(%$ filt) + %- zing + %+ turn + ?^ desks + (flop desks) + %+ sort ~(tap in ~(key by tyr.prep)) + |= [a=desk b=desk] + ?: |(=(a %kids) =(b %base)) & + ?: |(=(a %base) =(b %kids)) | + (aor b a) + |=(syd=@tas (report-vat prep our now syd verb)) + =/ deks=(list [=desk =zest wic=(set weft)]) + ?~ desks + %+ sort ~(tap by tyr.prep) + |= [[a=desk *] [b=desk *]] + ?: |(=(a %kids) =(b %base)) & + ?: |(=(a %base) =(b %kids)) | + (aor b a) + %+ murn (flop desks) + |= des=desk + ^- (unit [=desk =zest wic=(set weft)]) + ?~ got=(~(get by tyr.prep) des) + ~ + `[des u.got] + ?: =(filt %blocking) + =/ base-weft=(unit weft) + %- ~(rep in wic:(~(got by tyr.prep) %base)) + |= [=weft out=(unit weft)] + ?~ out + `weft + ?: (lth num.weft num.u.out) + out + `weft + ?~ base-weft ~['%base already up-to-date'] + =/ blockers=(list desk) + %+ sort + ^- (list desk) + %+ murn deks + |= [=desk =zest wic=(set weft)] + ^- (unit ^desk) + ?. =(%live zest) + ~ + ?: (~(has in wic) u.base-weft) + ~ + `desk + aor + ?~ blockers ~['No desks blocking upgrade'] + %- zing + ^- (list tang) + :- :~ %+ rap 3 + :~ 'These desks are blocking upgrade to [%zuse ' + (scot %ud num.u.base-weft) + ']:' + == == + %+ turn blockers + |=(syd=desk (report-vat prep our now syd verb)) + :: + %- zing + %+ turn + ?+ filt !! + %exists + %+ skip deks + |= [syd=desk *] + ?~ got=(~(get by cone.prep) our syd) + & + =(0 let.u.got) + :: + %running + %+ skim deks + |=([* [zest=@tas *]] =(zest %live)) + :: + %suspended + %+ skip deks + |= [syd=@tas [zest=@tas *]] + ?| =(syd %kids) + =(zest %live) + ?~ got=(~(get by cone.prep) our syd) + & + =(0 let.u.got) + == + :: + %exists-not + %+ skim deks + |= [syd=desk *] + ?~ got=(~(get by cone.prep) our syd) + | + =(0 let.u.got) + == + |=([syd=desk *] (report-vat prep our now syd verb)) +:: +report-vat: report on a single desk installation +:: +++ report-vat + |= $: $: tyr=rock:tire =cone sor=(map desk (pair ship desk)) + zyn=(map [desk ship desk] sync-state) + == + our=ship now=@da syd=desk verb=? + == + |^ ^- tang + =/ ego (scot %p our) + =/ wen (scot %da now) + ?. ((sane %tas) syd) + ~[(cat 3 'insane desk: %' syd)] + ?. (~(has by cone) our syd) + ~[(cat 3 'desk does not yet exist: %' syd)] + =/ hash .^(@uv %cz /[ego]/[syd]/[wen]) + ?: =(%kids syd) + ~[(cat 3 '%kids %cz hash: ' (scot %uv hash))] + =/ kel-path /[ego]/[syd]/[wen]/sys/kelvin + ?. .^(? %cu kel-path) + ~[(cat 3 'bad desk: %' syd)] + =+ .^(=waft %cx kel-path) + ^- tang + =/ =sink + ?~ s=(~(get by sor) syd) + ~ + ?~ z=(~(get by zyn) syd u.s) + ~ + `[p.u.s q.u.s [kid let]:u.z] + =/ meb=(list @uv) + ?~ sink ~[hash] + %+ turn + .^ (list tako) %cs + /[ego]/[syd]/[wen]/base/(scot %p her.u.sink)/[sud.u.sink] + == + |=(=tako .^(@uv %cs /[ego]/[syd]/[wen]/hash/(scot %uv tako))) + =/ dek (~(got by tyr) syd) + =/ sat + ?- zest.dek + %live 'running' + %dead 'suspended' + %held 'suspended until next update' + == + =/ kul=cord (print-wefts (waft-to-wefts waft)) + ?. verb + :~ '::' + (cat 3 ' pending updates: ' (print-wefts wic.dek)) + (cat 3 ' source ship: ' ?~(sink '~' (scot %p her.u.sink))) + (cat 3 ' app status: ' sat) + (cat 3 ' %cz hash ends in: ' (print-shorthash hash)) + (cat 3 ' /sys/kelvin: ' (print-wefts (waft-to-wefts waft))) + (cat 3 '%' syd) + == + :: + =/ [on=(list @tas) of=(list @tas)] + =/ [on=(list @tas) of=(list @tas)] + %- ~(rep by ren:(~(got by cone) our syd)) + |= [[=dude:gall is-on=?] on=(list @tas) of=(list @tas)] + ?: is-on + [[dude on] of] + [on [dude of]] + [(sort on aor) (sort of aor)] + :~ '::' + (cat 3 ' pending updates: ' (print-wefts wic.dek)) + %^ cat 3 ' kids desk: ' ?~ sink '~' + ?~ kid.u.sink '~' + (cat 3 '%' u.kid.u.sink) + (cat 3 ' source aeon: ' ?~(sink '~' (scot %ud let.u.sink))) + (cat 3 ' source desk: ' ?~(sink '~' (cat 3 '%' sud.u.sink))) + (cat 3 ' source ship: ' ?~(sink '~' (scot %p her.u.sink))) + (cat 3 ' updates: ' ?~(sink 'local' 'remote')) + %^ cat 3 ' publishing ship: ' ?~ got=(get-publisher our syd now) + '~' + (scot %p u.got) + :: + (cat 3 ' force off: ' (print-agents of)) + (cat 3 ' force on: ' (print-agents on)) + (cat 3 ' app status: ' sat) + :: + (cat 3 ' %cz hash: ' (scot %uv hash)) + (cat 3 ' base hash: ' (print-mergebases meb)) + (cat 3 ' /sys/kelvin: ' (print-wefts (waft-to-wefts waft))) + (cat 3 '%' syd) + == + ++ print-wefts + |= wefts=(set weft) + ^- @t + ?: =(~ wefts) + '~' + %+ roll (sort ~(tap in wefts) aor) + |= [=weft out=@t] + ?: =('' out) + (rap 3 '[%' lal.weft ' ' (scot %ud num.weft) ']' ~) + (rap 3 out ' [%' lal.weft ' ' (scot %ud num.weft) ']' ~) + :: + ++ print-shorthash + |= hash=@uv + ^- @t + (crip ((v-co:co 5) (end [0 25] hash))) + :: + ++ print-mergebases + |= hashes=(list @uv) + ^- @t + ?~ hashes + '~' + ?~ t.hashes + (scot %uv i.hashes) + %+ roll `(list @uv)`hashes + |= [hash=@uv out=@t] + ?: =('' out) + (print-shorthash hash) + (rap 3 out ' ' (print-shorthash hash) ~) + :: + ++ print-agents + |= agents=(list @tas) + ^- @t + ?~ agents + '~' + %+ roll `(list @tas)`agents + |= [agent=@tas out=@tas] + ?: =('' out) + (cat 3 '%' agent) + (rap 3 out ' %' agent ~) + -- +:: +report-kids: non-vat cz hash report for kids desk +:: +++ report-kids + |= [our=ship now=@da] + ^- tank + =/ syd %kids + =/ ego (scot %p our) + =/ wen (scot %da now) + ?. (~(has in .^((set desk) %cd /[ego]//[wen])) syd) + 'no %kids desk' + =+ .^(hash=@uv %cz /[ego]/[syd]/[wen]) + (cat 3 '%kids %cz hash: ' (scot %uv hash)) +:: +read-bill-foreign: read /desk/bill from a foreign desk +:: +++ read-bill-foreign + |= [=ship =desk =aeon] + ^- (list dude) + ~| +< + =/ her (scot %p ship) + =/ syd (scot %tas desk) + =/ yon (scot %ud aeon) + :: + =/ dom .^(domo cv/~[her syd yon]) + =/ tak ~| aeons=~(key by hit.dom) + (scot %uv (~(got by hit.dom) aeon)) + =/ yak .^(yaki cs/~[her syd yon %yaki tak]) + =/ fil (~(get by q.yak) /desk/bill) + ?~ fil ~ + =/ lob (scot %uv u.fil) + =/ peg .^(page cs/~[her syd yon %blob lob]) + ;;((list dude) q.peg) +:: +read-bill: read contents of /desk/bill manifest +:: +++ read-bill + |= [our=ship =desk now=@da] + =/ pax (en-beam [our desk da+now] /desk/bill) + ?. .^(? cu/pax) + *(list dude) + .^((list dude) cx/pax) +:: +++ get-remote-diff + |= [our=ship here=desk now=@da her=ship there=desk when=aeon] + =+ .^(our-hash=@uv cz/[(scot %p our) here (scot %da now) ~]) + =+ .^(her-hash=@uv cz/[(scot %p her) there (scot %ud when) ~]) + !=(our-hash her-hash) +:: +++ get-publisher + |= [our=ship =desk now=@da] + ^- (unit ship) + =/ pax /(scot %p our)/[desk]/(scot %da now)/desk/ship + ?. .^(? %cu pax) ~ + `.^(ship %cx pax) +:: +++ get-apps-live + |= [our=ship =desk now=@da] + ^- (list dude) + %+ murn (get-apps-have our desk now) + |=([=dude live=?] ?.(live ~ `dude)) +:: +get-apps-have: find which apps Gall is running on a desk +:: +++ get-apps-have + |= [our=ship =desk now=@da] + ^- (list [=dude live=?]) + %~ tap in + .^((set [=dude live=?]) ge+/(scot %p our)/[desk]/(scot %da now)/$) +:: +++ mergebase-hashes + |= [our=@p syd=desk now=@da her=ship sud=desk] + =/ her (scot %p her) + =/ ego (scot %p our) + =/ wen (scot %da now) + %+ turn .^((list tako) %cs /[ego]/[syd]/[wen]/base/[her]/[sud]) + |=(=tako .^(@uv %cs /[ego]/[syd]/[wen]/hash/(scot %uv tako))) +:: +++ enjs + =, enjs:format + |% + ++ tim + |= t=@ + ^- json + (numb (fall (mole |.((unm:chrono:userlib t))) 0)) + :: + ++ cass + |= c=^cass + %- pairs + :~ ud+(numb ud.c) + da+(tim da.c) + == + :: + ++ weft + |= w=^weft + %- pairs + :~ name+s+lal.w + kelvin+(numb num.w) + == + :: + ++ rung + |= r=^rung + %- pairs + :~ aeon+(numb aeon.r) + weft+(weft weft.r) + == + -- +-- diff --git a/desk/sur/spider.hoon b/desk/sur/spider.hoon new file mode 100644 index 0000000..7c21268 --- /dev/null +++ b/desk/sur/spider.hoon @@ -0,0 +1,27 @@ +/+ libstrand=strand +=, strand=strand:libstrand +|% ++$ thread $-(vase shed:khan) ++$ input [=tid =cage] ++$ tid tid:strand ++$ bowl bowl:strand ++$ http-error + $? %bad-request :: 400 + %forbidden :: 403 + %nonexistent :: 404 + %offline :: 504 + == ++$ start-args + $: parent=(unit tid) + use=(unit tid) + =beak + file=term + =vase + == ++$ inline-args + $: parent=(unit tid) + use=(unit tid) + =beak + =shed:khan + == +-- diff --git a/desk/sur/sss.hoon b/desk/sur/sss.hoon new file mode 100644 index 0000000..a5b889a --- /dev/null +++ b/desk/sur/sss.hoon @@ -0,0 +1,46 @@ +:: +:: XX remove this file in transition to %4 +:: +|% +++ lake + |$ [rock wave] + $_ ^? + |% + ++ name *term + +$ rock ^rock + +$ wave ^wave + ++ wash |~ [rock wave] *rock + -- ++$ aeon @ud ++$ dude dude:agent:gall ++$ what ?(%rock %wave) +++ poke + |% + ++ request + |* paths=mold + $: path=paths + =dude + when=(unit aeon) + == + ++ response + |* [=(lake) paths=mold] + $: path=paths + =dude + =aeon + $% [type=?(%nigh %yore %tomb) ~] + $: type=%scry + $% [what=%rock =rock:lake] + [what=%wave =wave:lake] + == == == == + ++ on-rock + |* [=(lake) paths=mold] + $: path=paths + src=ship + from=dude + stale=? + fail=? + =rock:lake + wave=(unit wave:lake) + == + -- +-- diff --git a/desk/sur/tlon/channels.hoon b/desk/sur/tlon/channels.hoon new file mode 100644 index 0000000..c222d4c --- /dev/null +++ b/desk/sur/tlon/channels.hoon @@ -0,0 +1,464 @@ +:: channels: message stream structures +:: +:: four shapes that cross client-subscriber-publisher boundaries: +:: - actions client-to-subscriber change requests (user actions) +:: - commands subscriber-to-publisher change requests +:: - updates publisher-to-subscriber change notifications +:: - responses subscriber-to-client change notifications +:: +:: --action--> --command--> +:: client subscriber publisher +:: <--response-- <--update-- +:: +:: local actions _may_ become responses, +:: remote actions become commands, +:: commands _may_ become updates, +:: updates _may_ become responses. +:: +/- g=tlon-groups, c=tlon-cite +/+ mp=mop-extensions +|% ++| %ancients +:: +++ mar + |% + ++ act `mark`%channel-action + ++ cmd `mark`%channel-command + ++ upd `mark`%channel-update + ++ log `mark`%channel-logs + ++ not `mark`%channel-posts + -- +:: ++| %primitives +:: ++$ flag (pair ship term) ++$ v-channels (map nest v-channel) +++ v-channel + |^ ,[global local] + :: $global: should be identical between ships + :: + +$ global + $: posts=v-posts + order=(rev order=arranged-posts) + view=(rev =view) + sort=(rev =sort) + perm=(rev =perm) + == + :: $window: sparse set of time ranges + :: + ::TODO populate this + +$ window (list [from=time to=time]) + :: .window: time range for requested posts that we haven't received + :: .diffs: diffs for posts in the window, to apply on receipt + :: + +$ future + [=window diffs=(jug id-post u-post)] + :: $local: local-only information + :: + +$ local + $: =net + =log + =remark + =window + =future + == + -- +:: $v-post: a channel post +:: ++$ v-post [v-seal (rev essay)] ++$ id-post time ++$ v-posts ((mop id-post (unit v-post)) lte) +++ on-v-posts ((on id-post (unit v-post)) lte) +++ mo-v-posts ((mp id-post (unit v-post)) lte) +:: $v-reply: a post comment +:: ++$ v-reply [v-reply-seal (rev memo)] ++$ id-reply time ++$ v-replies ((mop id-reply (unit v-reply)) lte) +++ on-v-replies ((on id-reply (unit v-reply)) lte) +++ mo-v-replies ((mp time (unit v-reply)) lte) +:: $v-seal: host-side data for a post +:: ++$ v-seal $+ channel-seal + $: id=id-post + replies=v-replies + reacts=v-reacts + == +:: $v-reply-seal: host-side data for a reply +:: ++$ v-reply-seal + $: id=id-reply + reacts=v-reacts + == +:: $essay: top-level post, with metadata +:: ++$ essay [memo =kind-data] +:: $reply-meta: metadata for all replies ++$ reply-meta + $: reply-count=@ud + last-repliers=(set ship) + last-reply=(unit time) + == +:: $kind-data: metadata for a channel type's "post" +:: ++$ kind-data + $% [%diary title=@t image=@t] + [%heap title=(unit @t)] + [%chat kind=$@(~ [%notice ~])] + == +:: $memo: post data proper +:: +:: content: the body of the comment +:: author: the ship that wrote the comment +:: sent: the client-side time the comment was made +:: ++$ memo + $: content=story + author=ship + sent=time + == +:: $story: post body content +:: ++$ story (list verse) +:: $verse: a chunk of post content +:: +:: blocks stand on their own. inlines come in groups and get wrapped +:: into a paragraph +:: ++$ verse + $% [%block p=block] + [%inline p=(list inline)] + == +:: $listing: recursive type for infinitely nested
    or
      ++$ listing + $% [%list p=?(%ordered %unordered %tasklist) q=(list listing) r=(list inline)] + [%item p=(list inline)] + == +:: $block: post content that sits outside of the normal text +:: +:: %image: a visual, we record dimensions for better rendering +:: %cite: an Urbit reference +:: %header: a traditional HTML heading, h1-h6 +:: %listing: a traditional HTML list, ul and ol +:: %code: a block of code +:: ++$ block $+ channel-block + $% [%image src=cord height=@ud width=@ud alt=cord] + [%cite =cite:c] + [%header p=?(%h1 %h2 %h3 %h4 %h5 %h6) q=(list inline)] + [%listing p=listing] + [%rule ~] + [%code code=cord lang=cord] + == +:: $inline: post content that flows within a paragraph +:: +:: @t: plain text +:: %italics: italic text +:: %bold: bold text +:: %strike: strikethrough text +:: %inline-code: code formatting for small snippets +:: %blockquote: blockquote surrounded content +:: %block: link/reference to blocks +:: %code: code formatting for large snippets +:: %tag: tag gets special signifier +:: %link: link to a URL with a face +:: %break: line break +:: ++$ inline $+ channel-inline + $@ @t + $% [%italics p=(list inline)] + [%bold p=(list inline)] + [%strike p=(list inline)] + [%blockquote p=(list inline)] + [%inline-code p=cord] + [%code p=cord] + [%ship p=ship] + [%block p=@ud q=cord] + [%tag p=cord] + [%link p=cord q=cord] + [%task p=?(%.y %.n) q=(list inline)] + [%break ~] + == +:: ++$ kind ?(%diary %heap %chat) +:: $nest: identifier for a channel ++$ nest [=kind =ship name=term] +:: $view: the persisted display format for a channel ++$ view $~(%list ?(%grid %list)) +:: $sort: the persisted sort type for a channel ++$ sort $~(%time ?(%alpha %time %arranged)) +:: $arranged-posts: an array of postIds ++$ arranged-posts (unit (list time)) +:: $hidden-posts: a set of ids for posts that are hidden ++$ hidden-posts (set id-post) +:: $post-toggle: hide or show a particular post by id ++$ post-toggle + $% [%hide =id-post] + [%show =id-post] + == +:: $react: either an emoji identifier like :diff or a URL for custom ++$ react @ta ++$ v-reacts (map ship (rev (unit react))) +:: $scan: search results ++$ scan (list reference) ++$ reference + $% [%post =post] + [%reply =id-post =reply] + == +:: $said: used for references ++$ said (pair nest reference) +:: $plan: index into channel state +:: p: Post being referred to +:: q: Reply being referred to, if any +:: ++$ plan + (pair time (unit time)) +:: +:: $net: subscriber-only state +:: ++$ net [p=ship load=_|] +:: +:: $unreads: a map of channel unread information, for clients +:: $unread: unread data for a specific channel, for clients +:: recency: time of most recent message +:: count: how many posts are unread +:: unread-id: the id of the first unread top-level post +:: threads: for each unread thread, the id of the first unread reply +:: ++$ unreads (map nest unread) ++$ unread + $: recency=time + count=@ud + unread-id=(unit id-post) + threads=(map id-post id-reply) + == +:: $remark: markers representing unread state +:: last-read: time at which the user last read this channel +:: watching: unused, intended for disabling unread accumulation +:: unread-threads: threads that contain unread messages +:: ++$ remark [recency=time last-read=time watching=_| unread-threads=(set id-post)] +:: +:: $perm: represents the permissions for a channel and gives a +:: pointer back to the group it belongs to. +:: ++$ perm + $: writers=(set sect:g) + group=flag:g + == +:: +:: $log: a time ordered history of modifications to a channel +:: ++$ log ((mop time u-channel) lte) +++ log-on ((on time u-channel) lte) +:: +:: $create-channel: represents a request to create a channel +:: +:: $create-channel is consumed by the channel agent first and then +:: passed to the groups agent to register the channel with the group. +:: +:: Write permission is stored with the specific agent in the channel, +:: read permission is stored with the group's data. +:: ++$ create-channel + $: =kind + name=term + group=flag:g + title=cord + description=cord + readers=(set sect:g) + writers=(set sect:g) + == +:: $outline: abridged $post +:: .replies: number of comments +:: ++$ outline + [replies=@ud replyers=(set ship) essay] +:: +++ outlines + =< outlines + |% + +$ outlines ((mop time outline) lte) + ++ on ((^on time outline) lte) + -- +++ rev + |$ [data] + [rev=@ud data] +:: +++ apply-rev + |* [old=(rev) new=(rev)] + ^+ [changed=& old] + ?: (lth rev.old rev.new) + &+new + |+old +:: +++ next-rev + |* [old=(rev) new=*] + ^+ [changed=& old] + ?: =(+.old new) + |+old + &+old(rev +(rev.old), + new) +:: ++| %actions +:: +:: some actions happen to be the same as commands, but this can freely +:: change +:: +::NOTE we might want to add a action-id=uuid to this eventually, threading +:: that through all the way, so that an $r-channels may indicate what +:: originally caused it ++$ a-channels + $% [%create =create-channel] + [%pin pins=(list nest)] + [%channel =nest =a-channel] + [%toggle-post toggle=post-toggle] + == ++$ a-channel + $% [%join group=flag:g] + [%leave ~] + a-remark + c-channel + == +:: ++$ a-remark + $~ [%read ~] + $% [%read ~] + [%read-at =time] + [%watch ~] + [%unwatch ~] + == +:: ++$ a-post c-post ++$ a-reply c-reply +:: ++| %commands +:: ++$ c-channels + $% [%create =create-channel] + [%channel =nest =c-channel] + == ++$ c-channel + $% [%post =c-post] + [%view =view] + [%sort =sort] + [%order order=arranged-posts] + [%add-writers sects=(set sect:g)] + [%del-writers sects=(set sect:g)] + == +:: ++$ c-post + $% [%add =essay] + [%edit id=id-post =essay] + [%del id=id-post] + [%reply id=id-post =c-reply] + c-react + == +:: ++$ c-reply + $% [%add =memo] + [%edit id=id-reply =memo] + [%del id=id-reply] + c-react + == +:: ++$ c-react + $% [%add-react id=@da p=ship q=react] + [%del-react id=@da p=ship] + == +:: ++| %updates +:: ++$ update [=time =u-channel] ++$ u-channels [=nest =u-channel] ++$ u-channel + $% [%create =perm] + [%order (rev order=arranged-posts)] + [%view (rev =view)] + [%sort (rev =sort)] + [%perm (rev =perm)] + [%post id=id-post =u-post] + == +:: ++$ u-post + $% [%set post=(unit v-post)] + [%reacts reacts=v-reacts] + [%essay (rev =essay)] + [%reply id=id-reply =u-reply] + == +:: ++$ u-reply + $% [%set reply=(unit v-reply)] + [%reacts reacts=v-reacts] + == +:: ++$ u-checkpoint global:v-channel +:: ++| %responses +:: ++$ r-channels [=nest =r-channel] ++$ r-channel + $% [%posts =posts] + [%post id=id-post =r-post] + [%order order=arranged-posts] + [%view =view] + [%sort =sort] + [%perm =perm] + :: + [%create =perm] + [%join group=flag:g] + [%leave ~] + a-remark + == +:: ++$ r-post + $% [%set post=(unit post)] + [%reply id=id-reply =reply-meta =r-reply] + [%reacts =reacts] + [%essay =essay] + == +:: ++$ r-reply + $% [%set reply=(unit reply)] + [%reacts =reacts] + == +:: versions of backend types with their revision numbers stripped, +:: because the frontend shouldn't care to learn those. +:: ++$ channels (map nest channel) +++ channel + |^ ,[global local] + +$ global + $: =posts + order=arranged-posts + =view + =sort + =perm + == + :: + +$ local + $: =net + =remark + == + -- ++$ paged-posts + $: =posts + newer=(unit time) + older=(unit time) + total=@ud + == ++$ posts ((mop id-post (unit post)) lte) ++$ post [seal essay] ++$ seal + $: id=id-post + =reacts + =replies + =reply-meta + == ++$ reacts (map ship react) ++$ reply [reply-seal memo] ++$ replies ((mop id-reply reply) lte) ++$ reply-seal [id=id-reply parent-id=id-post =reacts] +++ on-posts ((on id-post (unit post)) lte) +++ on-replies ((on id-reply reply) lte) ++$ cite cite:c +-- diff --git a/desk/sur/tlon/cite.hoon b/desk/sur/tlon/cite.hoon new file mode 100644 index 0000000..1d92a46 --- /dev/null +++ b/desk/sur/tlon/cite.hoon @@ -0,0 +1,57 @@ +/- g=tlon-groups +=< cite +|% +++ purse + |= =(pole knot) + ^- (unit cite) + ?. =(~.1 -.pole) ~ + =. pole +.pole + ?+ pole ~ + [%chan agent=@ ship=@ name=@ rest=*] + =/ ship (slaw %p ship.pole) + ?~ ship ~ + `[%chan [agent.pole u.ship name.pole] rest.pole] + :: + [%desk ship=@ name=@ rest=*] + =/ ship (slaw %p ship.pole) + ?~ ship ~ + `[%desk [u.ship name.pole] rest.pole] + :: + [%group ship=@ name=@ ~] + =/ ship (slaw %p ship.pole) + ?~ ship ~ + `[%group u.ship name.pole] + == +:: +++ parse + |= =path + ^- cite + (need (purse path)) +:: +++ print + |= c=cite + |^ ^- path + :- (scot %ud 1) + ?- -.c + %chan chan/(welp (nest nest.c) wer.c) + %desk desk/(welp (flag flag.c) wer.c) + %group group/(flag flag.c) + %bait bait/:(welp (flag grp.c) (flag gra.c) wer.c) + == + ++ flag + |= f=flag:g + ~[(scot %p p.f) q.f] + ++ nest + |= n=nest:g + [p.n (flag q.n)] + -- +:: ++$ cite + $% [%chan =nest:g wer=path] + [%group =flag:g] + [%desk =flag:g wer=path] + [%bait grp=flag:g gra=flag:g wer=path] + :: scry into groups when you receive a bait for a chat that doesn't exist yet + :: work out what app + == +-- diff --git a/desk/sur/tlon/groups.hoon b/desk/sur/tlon/groups.hoon new file mode 100644 index 0000000..2cb22bb --- /dev/null +++ b/desk/sur/tlon/groups.hoon @@ -0,0 +1,384 @@ +|% ++$ kind ?(%diary %heap %chat) +++ epic +|% ++$ saga + $~ [%lev ~] + $% [%dex ver=@ud] + [%lev ~] + [%chi ~] + == + ++$ epic @ud +-- +++ meta +|% ++$ data + $: title=cord + description=cord + image=cord + cover=cord + == ++$ diff + $% [%title =cord] + [%description =cord] + [%image =cord] + [%cover =cord] + == +-- +++ e epic +++ okay `epic:e`2 +++ mar + |% + ++ act `mark`(rap 3 %group-action '-' (scot %ud okay) ~) + ++ upd `mark`(rap 3 %group-update '-' (scot %ud okay) ~) + ++ log `mark`(rap 3 %group-log '-' (scot %ud okay) ~) + ++ int `mark`(rap 3 %group-init '-' (scot %ud okay) ~) + -- +:: $flag: ID for a group +:: ++$ flag (pair ship term) +:: +:: $nest: ID for a channel, {app}/{ship}/{name} +:: ++$ nest (pair term flag) +:: +:: $sect: ID for cabal, similar to a role +:: ++$ sect term +:: +:: $zone: channel grouping +:: +:: includes its own metadata for display and keeps the order of +:: channels within. +:: +:: zone: the term that represents the ID of a zone +:: realm: the metadata representing the zone and the order of channels +:: delta: the set of actions that can be taken on a zone +:: %add: create a zone +:: %del: delete the zone +:: %edit: modify the zone metadata +:: %mov: reorders the zone in the group +:: %mov-nest: reorders a channel within the zone +:: +++ zone + =< zone + |% + +$ zone @tas + +$ realm + $: met=data:meta + ord=(list nest) + == + +$ diff (pair zone delta) + +$ delta + $% [%add meta=data:meta] + [%del ~] + [%edit meta=data:meta] + [%mov idx=@ud] + [%mov-nest =nest idx=@ud] + == + -- +:: +:: $fleet: group members and their associated metadata +:: +:: vessel: a user's set of sects or roles and the time that they joined +:: @da default represents an admin added member that has yet to join +:: +++ fleet + =< fleet + |% + +$ fleet (map ship vessel) + +$ vessel + $: sects=(set sect) + joined=time + == + +$ diff + $% [%add ~] + [%del ~] + [%add-sects sects=(set sect)] + [%del-sects sects=(set sect)] + == + -- +:: +:: $channel: a medium for interaction +:: +++ channel + =< channel + |% + +$ preview + $: =nest + meta=data:meta + group=^preview + == + :: + +$ channels (map nest channel) + :: + :: $channel: a collection of metadata about a specific agent integration + :: + :: meta: title, description, image, cover + :: added: when the channel was created + :: zone: what zone or section to bucket in + :: join: should the channel be joined by new members + :: readers: what sects can see the channel, empty means anyone + :: + +$ channel + $: meta=data:meta + added=time + =zone + join=? + readers=(set sect) + == + :: + :: $diff: represents the set of actions you can take on a channel + :: + :: add: create a channel + :: edit: edit a channel + :: del: delete a channel + :: add-sects: add sects to readers + :: del-sects: delete sects from readers + :: zone: change the zone of the channel + :: join: toggle default join + :: + +$ diff + $% [%add =channel] + [%edit =channel] + [%del ~] + :: + [%add-sects sects=(set sect)] + [%del-sects sects=(set sect)] + :: + [%zone =zone] + :: + [%join join=_|] + == + -- +:: +:: $group: collection of people and the pathways in which they interact +:: +:: group holds all data around members, permissions, channel +:: organization, and its own metadata to represent the group +:: ++$ group + $: =fleet + cabals=(map sect cabal) + zones=(map zone realm:zone) + zone-ord=(list zone) + =bloc + =channels:channel + imported=(set nest) + =cordon + secret=? + meta=data:meta + == +:: ++$ group-ui [group saga=(unit saga:e)] +:: $cabal: metadata representing a $sect or role +:: +++ cabal + =< cabal + |% + :: + +$ cabal + [meta=data:meta ~] + :: + +$ diff + $% [%add meta=data:meta] + [%edit meta=data:meta] + [%del ~] + == + -- +:: +:: $cordon: group entry and visibility permissions +:: +++ cordon + =< cordon + |% + :: + :: $open: a group with open entry, only bans are barred entry + :: + ++ open + |% + :: $ban: set of ships and ranks/classes that are not allowed entry + :: + :: bans can either be done at the individual ship level or by the + :: rank level (comet/moon/etc.) + :: + +$ ban [ships=(set ship) ranks=(set rank:title)] + +$ diff + $% [%add-ships p=(set ship)] + [%del-ships p=(set ship)] + :: + [%add-ranks p=(set rank:title)] + [%del-ranks p=(set rank:title)] + == + -- + :: + :: $shut: a group with closed entry, everyone barred entry + :: + :: a shut cordon means that the group is closed, but still visible. + :: people may request entry and either be accepted or denied or + :: they may be invited directly + :: + :: ask: represents those requesting entry + :: pending: represents those who've been invited + :: + ++ shut + |% + +$ state [pend=(set ship) ask=(set ship)] + +$ kind ?(%ask %pending) + +$ diff + $% [%add-ships p=kind q=(set ship)] + [%del-ships p=kind q=(set ship)] + == + -- + :: + :: $cordon: a set of metadata to represent the entry policy for a group + :: + :: open: a group with open entry, only bans barred entry + :: shut: a group with closed entry, everyone barred entry + :: afar: a custom entry policy defined by another agent + :: + +$ cordon + $% [%shut state:shut] + [%afar =flag =path desc=@t] + [%open =ban:open] + == + :: + :: $diff: the actions you can take on a cordon + :: + +$ diff + $% [%shut p=diff:shut] + [%open p=diff:open] + [%swap p=cordon] + == + -- +:: +:: $bloc: superuser sects +:: +:: sects in the bloc set are allowed to make modifications to the group +:: and its various metadata and permissions +:: +++ bloc + =< bloc + |% + +$ bloc (set sect) + +$ diff + $% [%add p=(set sect)] + [%del p=(set sect)] + == + -- +:: +:: $diff: the general set of changes that can be made to a group +:: ++$ diff + $% [%fleet p=(set ship) q=diff:fleet] + [%cabal p=sect q=diff:cabal] + [%channel p=nest q=diff:channel] + [%bloc p=diff:bloc] + [%cordon p=diff:cordon] + [%zone p=diff:zone] + [%meta p=data:meta] + [%secret p=?] + [%create p=group] + [%del ~] + == +:: +:: $action: the complete set of data required to edit a group +:: ++$ action + (pair flag update) +:: +:: $update: a representation in time of a modification of a group +:: ++$ update + (pair time diff) +:: +:: $create: a request to make a group +:: ++$ create + $: name=term + title=cord + description=cord + image=cord + cover=cord + =cordon + members=(jug ship sect) + secret=? + == +:: ++$ init [=time =group] +:: +:: $groups-ui: map for frontend to display groups ++$ groups-ui + (map flag group-ui) ++$ groups + (map flag group) ++$ net-groups + (map flag [net group]) +:: +:: $log: a time ordered map of all modifications to groups +:: ++$ log + ((mop time diff) lte) +:: +++ log-on + ((on time diff) lte) +:: +:: $net: an indicator of whether I'm a host or subscriber +:: ++$ net + $~ [%pub ~] + $% [%pub p=log] + [%sub p=time load=_| =saga:e] + == +:: +:: $join: a join request, can elect to join all channels +:: ++$ join + $: =flag + join-all=? + == +:: +:: $knock: a request to enter a closed group +:: ++$ knock flag +:: +:: $progress: the state of a group join +:: ++$ progress + ?(%knocking %adding %watching %done %error) +:: +:: $claim: a mark for gangs to represent a join in progress +:: ++$ claim + $: join-all=? + =progress + == +:: +:: $preview: the metadata and entry policy for a group +:: ++$ preview + $: =flag + meta=data:meta + =cordon + =time + secret=? + == +:: ++$ previews (map flag preview) +:: +:: $invite: a marker to show you've been invited to a group +:: ++$ invite (pair flag ship) +:: +:: $gang: view of foreign group +:: ++$ gang + $: cam=(unit claim) + pev=(unit preview) + vit=(unit invite) + == +:: ++$ gangs (map flag gang) +:: +-- diff --git a/desk/sur/ucm.hoon b/desk/sur/ucm.hoon new file mode 100644 index 0000000..8b9e345 --- /dev/null +++ b/desk/sur/ucm.hoon @@ -0,0 +1,52 @@ +/- t=tlon-groups, docket +/+ metalib=metamask +|% +:: ++$ state state-0 ++$ state-0 + $: %0 + =sites + sessions=sess:metalib + == ++$ sites (map path site) ++$ site + $: sitename=@t + description=@t + groupname=@tas + binding=path + icon=@t + home=@t + css=@t + =apps + =app-order + hidden=_| + == ++$ app-order (list navbar-app) ++$ navbar-app $@(app-type [%static @tas]) ++$ apps + $: blog=@t + radio=? + chat=(set term) + forum=(set term) + wiki=@t + static=(map @tas @t) :: markdown + == ++$ filedata [html=@t md=@t theme=@tas public=?] +:: %blog-action ++$ sail-poke [%ui ship=@p eyre-id=@ta =action] ++$ action + :: global + $% [%dash dash-action] + [%site name=@t action=site-action] + == ++$ dash-action + $% [%set site] + [%del name=path] +== ++$ site-action + $% + [%search query=@t start=(unit @da) end=(unit @da) apps=(list app-type) by=(unit @p)] + [%lol @t] + == ++$ app-type $?(%blog %chat %forum %radio %wiki) +-- diff --git a/desk/sys.kelvin b/desk/sys.kelvin new file mode 100644 index 0000000..14d80f1 --- /dev/null +++ b/desk/sys.kelvin @@ -0,0 +1 @@ +[%zuse 411] diff --git a/desk/ted/import.hoon b/desk/ted/import.hoon new file mode 100644 index 0000000..25670a0 --- /dev/null +++ b/desk/ted/import.hoon @@ -0,0 +1,85 @@ +/- spider, blog +/+ *strandio +=, strand=strand:spider +=, strand-fail=strand-fail:libstrand:spider +^- thread:spider +|= arg=vase +=/ m (strand ,vase) +^- form:m +;< our=@p bind:m get-our +;< now=@da bind:m get-time +=/ files-path=path /(scot %p our)/blog/(scot %da now)/import +=/ files=(axal *) + |- + =+ .^(=arch %cy files-path) + ?: (test dir.arch ~) + =/ mark + ?+ (rear files-path) !! + %md wain + %html @t + %css @t + %noun noun + == + :- [~ .^(mark %cx files-path)] + (~(urn by dir.arch) |=([name=@ta ~] ^$(files-path (snoc files-path name)))) + :- fil.arch + (~(urn by dir.arch) |=([name=@ta ~] ^$(files-path (snoc files-path name)))) +:: +=| $= imp + $: pub=(map path [html=@t md=@t theme=@tas]) + dra=(map path md=@t) + thm=(map @tas css=@t) + == +=. imp + =/ all-files ~(tap of files) + |- + ?~ all-files imp + %. i.all-files + |= [=path content=*] + %= ^$ + all-files t.all-files + imp + ?+ (rear path) imp + %md + =+ content=(of-wain:format ((list cord) content)) + ?: ?=(%published (snag 0 path)) + =/ file-name (oust [0 2] (snip path)) + =/ file (~(gut by pub.imp) file-name [html='' md='' theme=%default]) + imp(pub (~(put by pub.imp) file-name file(md content))) + =/ draft-name (oust [0 1] (snip path)) + =/ draft (~(gut by dra.imp) draft-name [md='']) + imp(dra (~(put by dra.imp) draft-name draft(md content))) + :: + %css + =/ theme-name (@tas (rear (oust [0 1] (snip path)))) + =/ theme (~(gut by thm.imp) theme-name [css='']) + imp(thm (~(put by thm.imp) theme-name theme(css (@t (@tas content))))) + :: + %html + =/ file-name (oust [0 2] (snip path)) + =/ file (~(gut by pub.imp) file-name [html='' md='' theme=%default]) + imp(pub (~(put by pub.imp) file-name file(html (@t (@tas content))))) + == + == +=/ thm-map ;; (map path @tas) + :: XX is this expecting a folder called 'meta' in the export? + :: there wasn't one when i exported files from ~bonbud-macryg, + :: but that might be because the export process crashed my ship + .^(noun %cx /(scot %p our)/blog/(scot %da now)/import/published/meta/noun) +=/ act |=(=vase [%pass /poke %agent [our %blog] %poke %blog-action vase]) +;< ~ bind:m + %- send-raw-cards + %- zing + :~ %+ turn ~(tap by pub.imp) + |= [=path html=@t md=@t theme=@tas] + (act !>([%publish path html md (~(gut by thm-map) path %default)])) + :: + %+ turn ~(tap by dra.imp) + |= [=path md=@t] + (act !>([%save-draft path md])) + :: + %+ turn ~(tap by thm.imp) + |= [theme=@tas css=@t] + (act !>([%save-theme theme css])) + == +(pure:m !>(~)) \ No newline at end of file diff --git a/desk/ted/iris-thread.hoon b/desk/ted/iris-thread.hoon new file mode 100644 index 0000000..b1458e0 --- /dev/null +++ b/desk/ted/iris-thread.hoon @@ -0,0 +1,26 @@ +/- spider +/+ strandio +=, strand=strand:spider +^- thread:spider +|= arg=vase +=/ m (strand ,vase) +^- form:m +~& "calling iris thread" +=/ req !<([@t request:http] arg) +=/ [channel-slug=@t =request:http] req +~& >> request +=/ origin (get-header:http 'origin' header-list.request) +?~ origin (pure:m !>(~)) +=/ url (cat 3 [u.origin channel-slug]) +~& >> `@t`url +=. url.request url +=/ =task:iris [%request request *outbound-config:iris] +=/ =card:agent:gall [%pass /http-req %arvo %i task] +;< ~ bind:m (send-raw-card:strandio card) +;< res=(pair wire sign-arvo) bind:m take-sign-arvo:strandio +?. ?=([%iris %http-response %finished *] q.res) + (strand-fail:strand %bad-sign ~) +~& +.q.res +?~ full-file.client-response.q.res + (strand-fail:strand %no-body ~) +(pure:m !>(`@t`q.data.u.full-file.client-response.q.res)) diff --git a/desk/web b/desk/web new file mode 120000 index 0000000..6f11f71 --- /dev/null +++ b/desk/web @@ -0,0 +1 @@ +../site/dist \ No newline at end of file diff --git a/devenv.lock b/devenv.lock new file mode 100644 index 0000000..f3b5fd6 --- /dev/null +++ b/devenv.lock @@ -0,0 +1,122 @@ +{ + "nodes": { + "devenv": { + "locked": { + "dir": "src/modules", + "lastModified": 1726063457, + "owner": "cachix", + "repo": "devenv", + "rev": "39bf6ce569103c9390d37322daa59468c31b3ce7", + "treeHash": "839747a1cb35ba6d5b36cce9a739ab2ba5e4a5d4", + "type": "github" + }, + "original": { + "dir": "src/modules", + "owner": "cachix", + "repo": "devenv", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1696426674, + "owner": "edolstra", + "repo": "flake-compat", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "treeHash": "2addb7b71a20a25ea74feeaf5c2f6a6b30898ecb", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "treeHash": "ca14199cabdfe1a06a7b1654c76ed49100a689f9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1716977621, + "owner": "cachix", + "repo": "devenv-nixpkgs", + "rev": "4267e705586473d3e5c8d50299e71503f16a6fb6", + "treeHash": "6d9f1f7ca0faf1bc2eeb397c78a49623260d3412", + "type": "github" + }, + "original": { + "owner": "cachix", + "ref": "rolling", + "repo": "devenv-nixpkgs", + "type": "github" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1725930920, + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "44a71ff39c182edaf25a7ace5c9454e7cba2c658", + "treeHash": "56e93544112b7bb7aa0c3093d537295683ef9148", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "pre-commit-hooks": { + "inputs": { + "flake-compat": "flake-compat", + "gitignore": "gitignore", + "nixpkgs": [ + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable" + }, + "locked": { + "lastModified": 1725513492, + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "7570de7b9b504cfe92025dd1be797bf546f66528", + "treeHash": "4b46d77870afecd8f642541cb4f4927326343b59", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "root": { + "inputs": { + "devenv": "devenv", + "nixpkgs": "nixpkgs", + "pre-commit-hooks": "pre-commit-hooks" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/devenv.nix b/devenv.nix new file mode 100644 index 0000000..d1072bb --- /dev/null +++ b/devenv.nix @@ -0,0 +1,52 @@ +{ + pkgs, + lib, + config, + inputs, + ... +}: { + # https://devenv.sh/basics/ + env.GREET = "devenv"; + + # https://devenv.sh/packages/ + packages = with pkgs; [ + git + nodePackages.typescript-language-server + nodePackages.vscode-json-languageserver + nodePackages.prettier + ]; + + # https://devenv.sh/languages/ + # languages.rust.enable = true; + languages.javascript = { + enable = true; + bun.enable = true; + }; + + # https://devenv.sh/processes/ + # processes.cargo-watch.exec = "cargo-watch"; + + # https://devenv.sh/services/ + # services.postgres.enable = true; + + # https://devenv.sh/scripts/ + scripts.hello.exec = '' + echo hello from $GREET + ''; + + enterShell = '' + hello + git --version + ''; + + # https://devenv.sh/tests/ + enterTest = '' + echo "Running tests" + git --version | grep --color=auto "${pkgs.git.version}" + ''; + + # https://devenv.sh/pre-commit-hooks/ + # pre-commit.hooks.shellcheck.enable = true; + + # See full reference at https://devenv.sh/reference/options/ +} diff --git a/devenv.yaml b/devenv.yaml new file mode 100644 index 0000000..fefdd49 --- /dev/null +++ b/devenv.yaml @@ -0,0 +1,14 @@ +# yaml-language-server: $schema=https://devenv.sh/devenv.schema.json +inputs: + nixpkgs: + url: github:cachix/devenv-nixpkgs/rolling +# If you're using non-OSS software, you can set allowUnfree to true. +# allowUnfree: true + +# If you're willing to use a package that's vulnerable +# permittedInsecurePackages: +# - "openssl-1.1.1w" + +# If you have more than one devenv you can merge them +#imports: +# - ./backend diff --git a/fe/.gitignore b/fe/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/fe/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/fe/.prettierrc.json b/fe/.prettierrc.json new file mode 100644 index 0000000..6ec5828 --- /dev/null +++ b/fe/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "all", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "printWidth": 90 +} diff --git a/fe/README.md b/fe/README.md new file mode 100644 index 0000000..1e5a46b --- /dev/null +++ b/fe/README.md @@ -0,0 +1,50 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type aware lint rules: + +- Configure the top-level `parserOptions` property like this: + +```js +export default tseslint.config({ + languageOptions: { + // other options... + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + }, +}); +``` + +- Replace `tseslint.configs.recommended` to `tseslint.configs.recommendedTypeChecked` or `tseslint.configs.strictTypeChecked` +- Optionally add `...tseslint.configs.stylisticTypeChecked` +- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and update the config: + +```js +// eslint.config.js +import react from 'eslint-plugin-react'; + +export default tseslint.config({ + // Set the react version + settings: { react: { version: '18.3' } }, + plugins: { + // Add the react plugin + react, + }, + rules: { + // other rules... + // Enable its recommended rules + ...react.configs.recommended.rules, + ...react.configs['jsx-runtime'].rules, + }, +}); +``` diff --git a/fe/bun.lockb b/fe/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..87dfbcfbc3f1456640222ba6b7d5564d7ce8b27d GIT binary patch literal 314023 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�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

      q24PgG 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 + + + + + + + + + + + + + + Urbit Community Manager + + +

      + + + diff --git a/fe/package.json b/fe/package.json new file mode 100644 index 0000000..ba1e19e --- /dev/null +++ b/fe/package.json @@ -0,0 +1,56 @@ +{ + "name": "ucm", + "private": true, + "version": "0.1.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@emotion/react": "^11.13.3", + "@emotion/styled": "^11.13.0", + "@fontsource/inter": "^5.1.0", + "@fontsource/roboto": "^5.1.0", + "@hello-pangea/dnd": "^17.0.0", + "@mui/icons-material": "^6.1.0", + "@mui/material": "^6.1.0", + "@urbit/http-api": "file:../../js-http-api", + "any-ascii": "^0.3.2", + "bn.js": "^5.2.1", + "invariant": "^2.2.4", + "lodash": "^4.17.21", + "marked": "^14.1.2", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-html-parser": "^2.0.2", + "react-player": "^2.16.0", + "svgson": "^5.3.1", + "transformation-matrix": "^2.16.1", + "wouter": "^3.3.5", + "zustand": "^4.5.5" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "devDependencies": { + "@eslint/js": "^9.9.0", + "@faker-js/faker": "^9.0.3", + "@types/bn.js": "^5.1.6", + "@types/invariant": "^2.2.37", + "@types/lodash": "^4.17.7", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@vitejs/plugin-react": "^4.3.1", + "eslint": "^9.9.0", + "eslint-plugin-react-hooks": "^5.1.0-rc.0", + "eslint-plugin-react-refresh": "^0.4.9", + "globals": "^15.9.0", + "typescript": "^5.5.3", + "typescript-eslint": "^8.0.1", + "vite": "^5.4.1" + } +} diff --git a/fe/public/android-chrome-192x192.png b/fe/public/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..98b84a8d934c1edccc4b26b133dde303bc9560f3 GIT binary patch literal 45563 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%0AOf1S<|V<6eO<&7-ZepXhIQt@9`dd=D0&} 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 geEU!g1JG$L)TqjmQ!IJlyxhks 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

      >xnHqUn#267{ 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 literal 0 HcmV?d00001 diff --git a/fe/public/favicon-16x16.png b/fe/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..fb8d14b1716dd807b2d96fe543ee6dc45fe4dac7 GIT binary patch literal 903 zcmV;219<$2P)Px&K}keGR5(v9l5I@YRUF4ZzjOZ2cObqX+RBx+>V<7imMd4S*(}G>B+JD4KuZ{N zm_%r!4YLQ(nH%}gdV(?)TNkIc+JK6XX++|!HfcDbWF`x6kxP;8<-$Gf|ED+Syg29k z{e2&Pa^v^iMvDgRU}=rAJdE~GN?>{ljDhf7*`O?pwh`^{&qRiTCwCy@19iqIk8{1F zOr)lG@8D@VIxld??RhlpD`ips9LP+A3P~K$HWO)BzIr!3XZw(`zFM=PqM5diJ~A0Y zR(3$ui$%Oy*F?@NpVnj5+&AxL5CvM3!s6NDcWCeU2`z&B^>ejRj!!DBXz3iFytf-30YZ2PGIXlc*tUyueJtDKWani{UTR|9s)xAv#~3|{ z0c@>l_+TsL75ho0QYaJ|KnuuV+j^rN7uWF+Ct&1Sh6PLavSR6cCa2-6_FoW7ao5~D zo?p9|nw@dPNTfiNLi$gvG>+$Cdoi>VAdbVP?cdPa+0Xu6Yp8$!TP_ZcMzub(d?A+W z5HW08IKGeV`B;vNwqjgOS`<8YglpqTw!d6R--RLKCwj;T)YcSnB;G~; zuR~D~@?+y8#`b-jz{7T8ShkC{Jr2bCssHdy6x8Ae@1f}Fhe@0t_T?Kl@NnE1wjZEvm)0LfsoK*Wr5zGjmc_P`C3N=ka=qZNVY@M>it=Xx)(r{{g#N8wz?n%zFR;002ovPDHLkV1glNygC2? literal 0 HcmV?d00001 diff --git a/fe/public/favicon-32x32.png b/fe/public/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..afc27b5f9c544a4dce5981dd4d366f35e907e6a9 GIT binary patch literal 2592 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 CNdiv{ + width: 100%; + height: 100% !important; +} +.textarea textarea{ + overflow-y: scroll !important; +} +a { + font-weight: 500; + text-decoration: inherit; +} diff --git a/fe/src/App.tsx b/fe/src/App.tsx new file mode 100644 index 0000000..d938d1f --- /dev/null +++ b/fe/src/App.tsx @@ -0,0 +1,24 @@ +import { useEffect, useState } from 'react'; +import './App.css'; +import useStore from './logic/store'; +import Router from './Router'; +import { LoadingScreen } from './ui/Components'; +import { createTheme, ThemeProvider, styled, PaletteMode } from '@mui/material/styles'; +import CssBaseline from '@mui/material/CssBaseline'; +import AppTheme from './ui/shared-theme/AppTheme'; + +function App() { + // data loading + const { init, loading } = useStore(['init', 'loading']); + useEffect(() => { + init(); + }, []); + return ( + + + {loading ? : } + + ); +} + +export default App; diff --git a/fe/src/Router.tsx b/fe/src/Router.tsx new file mode 100644 index 0000000..7e26b8f --- /dev/null +++ b/fe/src/Router.tsx @@ -0,0 +1,48 @@ +import { Link, Route, Router } from "wouter"; +import Dashboard from "./dashboard/Dashboard.tsx"; +import CreateForm from "./dashboard/CreateForm.tsx"; +import SiteDash from "./dashboard/Site.tsx"; +import Modal from "./modals/Modal.tsx"; +import useStore from "./logic/store.ts"; +import { Button, Container, Typography } from "@mui/material"; + +export default function () { + const { airlock, state, groups, modal } = useStore([ + "airlock", + "state", + "groups", + "modal", + ]); + return ( + <> + + + + + {(params) => { + const binding = `/${params.site}`; + const site = state[binding]; + if (!site) return ; + else { + const groupParam = `~${airlock.ship}/${site.groupname}`; + const group = groups[groupParam]; + return ; + } + }} + + + {modal && {modal}} + + ); +} + +export function NotFound({ err }: { err: string }) { + return ( + + {err} not found + + + + + ); +} diff --git a/fe/src/assets/icons/comet.svg b/fe/src/assets/icons/comet.svg new file mode 100644 index 0000000..2d5c3f5 --- /dev/null +++ b/fe/src/assets/icons/comet.svg @@ -0,0 +1,23 @@ + + + + + diff --git a/fe/src/assets/icons/spinner.svg b/fe/src/assets/icons/spinner.svg new file mode 100755 index 0000000..2a516de --- /dev/null +++ b/fe/src/assets/icons/spinner.svg @@ -0,0 +1 @@ + diff --git a/fe/src/assets/react.svg b/fe/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/fe/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/fe/src/dashboard/CreateForm.tsx b/fe/src/dashboard/CreateForm.tsx new file mode 100644 index 0000000..5fb86e5 --- /dev/null +++ b/fe/src/dashboard/CreateForm.tsx @@ -0,0 +1,118 @@ +import { useState } from "react"; +import { useLocation, Link } from "wouter"; +import { + Alert, + Button, + TextField, + Typography, + Box, + Container, + Card, + CardHeader, + CardContent, + Stack, + CircularProgress, +} from "@mui/material"; +import useStore from "../logic/store"; +import { AppBunt, Site } from "../logic/types"; +import { enkebab } from "../logic/utils"; +import { Centered, Flex, WholeFlex } from "../ui/Components"; + +export default function () { + const { sync, dashIO } = useStore(["sync", "dashIO"]); + const [location, navigate] = useLocation(); + const [loading, setLoading] = useState(false); + const [siteName, setSite] = useState(""); + const [sitePath, setPath] = useState("/"); + const [siteDesc, setDesc] = useState(""); + const [error, setError] = useState(""); + function setSitePath(e: React.ChangeEvent) { + const input = e.currentTarget.value.slice(1).replace("/", ""); + setPath("/" + input); + } + + // TODO add automated name change logic if site already exists + async function create() { + const { createGroup, createSite } = dashIO(); + if (!siteName) { + setError("Site name can't be empty"); + return; + } + setLoading(true); + // Create Group first + // Then create site on agent + const site: Site = { + sitename: siteName, + description: siteDesc, + groupname: enkebab(siteName), + binding: sitePath, + icon: "", + home: "", + css: "", + apps: AppBunt, + "app-order": [], + hidden: false, + }; + const res = await createSite(site); + if (res) { + await createGroup(siteName); + await sync(); + navigate("/"); + console.log(res, "res"); + } + } + return ( + + + + + + + Choose the name of your site and the URL path you want for it + + + {error && {error}.} + + setSite(e.currentTarget.value)} + /> + + setDesc(e.currentTarget.value)} + /> + + {loading ? ( + + + + ) : ( + <> + + + + + + )} + + + + + ); +} diff --git a/fe/src/dashboard/Dashboard.tsx b/fe/src/dashboard/Dashboard.tsx new file mode 100644 index 0000000..e180294 --- /dev/null +++ b/fe/src/dashboard/Dashboard.tsx @@ -0,0 +1,87 @@ +import useStore from "../logic/store"; +import { Site } from "../logic/types"; +import { useLocation, Link as RouterLink } from "wouter"; +import { + Card, + CardContent, + CardMedia, + Paper, + Typography, + Button, + Container, + Stack, +} from "@mui/material"; +import { DEFAULT_ICON } from "../logic/constants"; +import { Centered, Row, SpreadRow } from "../ui/Components"; +import * as muiStyles from "@mui/material/styles"; +import { ThemeToggle } from "../ui/theme"; +// import { ColorToggle } from "../ui/theme"; + +export default function () { + const using = muiStyles.useColorScheme(); + const [_location, navigate] = useLocation(); + const { state } = useStore(["state"]); + const list = Object.values(state); + function create() { + navigate("/create-site"); + } + return ( + + + + + Urbit Community Manager + + + + + + Your Sites + + + {list.length !== 0 ? ( + list.map((site) => ) + ) : ( + + Nothing yet{" "} + + )} + + + + + + ); +} + +function SiteCard({ site }: { site: Site }) { + console.log(site, "site"); + const icon = site.icon || DEFAULT_ICON; + // Responsive font sizes huh + return ( + + + + + + + + + {site.sitename} + + + + + + + ); +} diff --git a/fe/src/dashboard/Site.tsx b/fe/src/dashboard/Site.tsx new file mode 100644 index 0000000..1e5321c --- /dev/null +++ b/fe/src/dashboard/Site.tsx @@ -0,0 +1,543 @@ +import { useEffect, useState } from "react"; +import { + AppType, + Apps, + Channels, + ChannelsBunt, + RichMetadata, + Ship, + Site, + Wiki, +} from "../logic/types"; +import { + Button, + TextField, + Typography, + Box, + Container, + CardHeader, + Card, + CardContent, + CardActions, + CircularProgress, + Avatar, + Collapse, + Accordion, + AccordionSummary, + AccordionDetails, + Link as MuiLink, + List, + ListItem, + Divider, +} from "@mui/material"; +import useStore from "../logic/store"; +import { + AddAppModal, + ConfirmationModal, + StaticPageModal, +} from "../modals/Modal"; +import { ChannelType, Group } from "../logic/types-tlon"; +import { APP_NAME, RADIO_SHIP, WIKI_SHIP } from "../logic/constants"; +import { useLocation } from "wouter"; +import { capitalize, doubleCheckApps, delay, enkebab } from "../logic/utils"; + +import DragContainer from "../ui/Drag.tsx"; +import { DropResult } from "@hello-pangea/dnd"; +import { Centered, SpreadRow } from "../ui/Components.tsx"; +import { ExpandMore } from "@mui/icons-material"; + +export function SiteDash({ site, group }: { site: Site; group: Group }) { + useEffect(() => { + setChans(); + // const apporder = ["blog", "chat", "forum", "radio", "wiki", "about"]; + const order = [...site["app-order"]]; + if (!order.includes("blog")) order.push("blog"); + if (!order.includes("chat")) order.push("chat"); + if (!order.includes("forum")) order.push("forum"); + if (!order.includes("radio")) order.push("radio"); + if (!order.includes("wiki")) order.push("wiki"); + for (const title of Object.keys(site.apps.static)) { + const key = `static/${title}` as AppType; + if (!order.includes(key)) order.push(key); + } + setAppOrder(order as AppType[]); + }, [group, site]); + function setChans() { + const chans = Object.entries(group.channels); + const agg = chans.reduce((acc: Channels, [nam, chan]) => { + const [kind, ship, name] = nam.split("/"); + const host = ship as Ship; + const meta: RichMetadata = { + ...chan.meta, + name, + host, + kind: kind as ChannelType, + }; + if (kind === "chat") return { ...acc, chats: [...acc.chats, meta] }; + else if (kind === "diary" && name.includes("ucm-ublog")) + return { ...acc, blog: meta }; + else if (kind === "diary") + return { ...acc, forums: [...acc.forums, meta] }; + else return acc; + }, ChannelsBunt); + setChannels(agg); + } + + useEffect(() => { + fetchWikis(); + }, []); + + async function fetchWikis() { + try { + const res = await dashIO().scryWiki(); + setWiki(res.filter((w) => w.public)); + } catch { + setWiki(null); + } + } + + const { setModal, dashIO, pikes, sync } = useStore([ + "setModal", + "dashIO", + "pikes", + "sync", + ]); + const [wikis, setWiki] = useState(null); + const [modal, showModal] = useState(false); + const [error, setError] = useState(""); + const [homeMarkdown, setHome] = useState(site.home); + const [customPalette, setPalette] = useState(site.css); + const [siteName, setSite] = useState(site.sitename); + const [siteDesc, setDesc] = useState(site.description); + const [sitePath, setPath] = useState(site.binding); + const [siteIcon, setSiteIcon] = useState(site.icon); + const [hidden, setHidden] = useState(site.hidden); + const [channels, setChannels] = useState(ChannelsBunt); + const [appOrder, setAppOrder] = useState([]); + const [apps, setApps] = useState(site.apps); + + useEffect(() => { + doubleCheckApps(site.apps, channels, pikes).then((a) => setApps(a)); + }, [channels, site, pikes]); + + function setSitePath(e: React.ChangeEvent) { + const input = e.currentTarget.value.slice(1).replace("/", ""); + setPath("/" + input); + } + + async function save() { + const ns: Site = { + description: siteDesc, + icon: siteIcon, + home: homeMarkdown, + css: customPalette, + binding: sitePath, + sitename: siteName, + groupname: enkebab(siteName), + "app-order": appOrder, + apps, + hidden, + }; + const res = await dashIO().createSite(ns); + sync(); + } + + // drag + function reorder(result: DropResult) { + // dropped outside the list + if (!result.destination) { + return; + } + const newlist = Array.from(appOrder); + const [removed] = newlist.splice(result.source.index, 1); + newlist.splice(result.destination.index, 0, removed); + setAppOrder(newlist); + } + + const [loading, setLoading] = useState(false); + const [_, navigate] = useLocation(); + async function destroy() { + const res = await dashIO().delSite(site.binding); + if (res) { + await sync(); + navigate("/"); + } + } + function confirmDestroy() { + setModal(); + } + + return ( + + + + {loading ? ( + + ) : ( + + )} + + + {site.sitename} + + + + + + + + setSite(e.currentTarget.value)} + /> + + setDesc(e.currentTarget.value)} + /> + + + setSiteIcon(e.currentTarget.value)} + /> + + + + + Apps + +

      + +
      + + + }> + Home Page + + + + Write some Markdown to display in the root page of your site + + setHome(e.currentTarget.value)} + /> + + + + {/* + }> + Custom Styling + + + + {APP_NAME} uses{" "} + + Material UI + + for its styling + + + You can use a custom color palette by adding the palette object in + JSON format below. + + setPalette(e.currentTarget.value)} + /> + + */} + + + + + + + ); +} + +function cardWrapper(site: Site, channels: Channels, wiki: Wiki[] | null) { + return function buildCard(a: AppType) { + const { enabled, content, actions } = + a === "blog" + ? buildBlogCard(site, channels) + : a === "chat" + ? buildChatCard(site) + : a === "forum" + ? buildForumCard(site) + : a === "radio" + ? buildRadioCard(site) + : a === "wiki" + ? buildWikiCard(site, wiki) + : buildStaticCard(a, site); + + const opacity = enabled ? 1 : 0.7; + const title = a.startsWith("static") ? "Static" : capitalize(a); + return ( + + + + + {content} + + + + {actions} + + + ); + }; +} + +function buildBlogCard(site: Site, channels: Channels) { + const { setModal, dashIO, sync } = useStore(["setModal", "dashIO", "sync"]); + const [loading, setLoading] = useState(false); + function addBlog() { + setModal(); + } + async function toggle(blog: string) { + setLoading(true); + const ns = { ...site, apps: { ...site.apps, blog } }; + const res = await dashIO().createSite(ns); + await sync(); + setLoading(false); + } + const enabled = !!site.apps.blog; + const content = {channels.blog?.title}; + const actions = loading ? ( + + ) : !channels.blog ? ( + + ) : !enabled ? ( + + ) : ( + + ); + return { enabled, content, actions }; +} +function buildChatCard(site: Site) { + const { setModal } = useStore(["setModal"]); + function addChat() { + setModal(); + } + const enabled = site.apps.chat.length > 0; + const content = !enabled ? ( + No chats + ) : ( + + {site.apps.chat.map((c, i) => ( + + -{c} + + ))} + + ); + const actions = ; + return { enabled, content, actions }; +} +function buildForumCard(site: Site) { + const { setModal } = useStore(["setModal"]); + function addForum() { + setModal(); + } + const enabled = site.apps.forum.length > 0; + const content = !enabled ? ( + No forums + ) : ( + + {site.apps.forum.map((c, i) => ( + + -{c} + + ))} + + ); + const actions = ; + return { enabled, content, actions }; +} + +function buildRadioCard(site: Site) { + const { sync, dashIO, pikes } = useStore(["sync", "dashIO", "pikes"]); + const [loading, setLoading] = useState(false); + const { createSite, scryPikes } = dashIO(); + async function toggle(bool: boolean) { + setLoading(true); + const ns = { ...site, apps: { ...site.apps, radio: bool } }; + await createSite(ns); + await sync(); + setLoading(false); + } + async function install() { + setLoading(true); + const res = await dashIO().installApp(RADIO_SHIP, "radio"); + await delay(3000); + const pikes = await scryPikes(); + if (pikes?.radio?.sync?.ship === RADIO_SHIP) setLoading(false); + else { + await delay(5000); + if (pikes?.radio?.sync?.ship === RADIO_SHIP) setLoading(false); + } + // sync(); + } + const pike = pikes.radio; + const installed = pike?.sync?.ship === RADIO_SHIP; + const content = !installed ? Not Installed : <>; + const enabled = site.apps.radio; + const actions = loading ? ( + + ) : !installed ? ( + + ) : site.apps.radio ? ( + + ) : ( + + ); + return { enabled, content, actions }; +} +function buildWikiCard(site: Site, wiki: Wiki[] | null) { + const { sync, dashIO, pikes } = useStore(["sync", "dashIO", "pikes"]); + const [loading, setLoading] = useState(false); + async function disable() { + const ns = { ...site, apps: { ...site.apps, wiki: "" } }; + const res = await dashIO().createSite(ns); + sync(); + } + async function toggleWiki(name: string) { + const ns = { ...site, apps: { ...site.apps, wiki: name } }; + const res = await dashIO().createSite(ns); + sync(); + } + async function install() { + setLoading(true); + const res = await dashIO().installApp(WIKI_SHIP, "wiki"); + sync(); + } + const pike = pikes.wiki; + const installed = pike?.sync?.ship === WIKI_SHIP; + const content = !wiki ? ( + Not Installed + ) : ( + wiki.map((w) => ( + toggleWiki(w.id)} + key={w.id} + > + {w.title} + + )) + ); + const actions = !wiki ? ( + + ) : site.apps.wiki ? ( + + ) : null; + + return { enabled: installed, content, actions }; +} + +function buildStaticCard(title: string, site: Site) { + const { setModal } = useStore(["setModal"]); + async function openEditor() { + const text = site.apps.static[name]; + setModal(); + } + const [_, name] = title.split("/"); + if (name) { + const content = {name}; + const actions = ; + return { enabled: true, content, actions }; + } else { + const content = <>; + const actions = ; + return { enabled: false, content, actions }; + } +} + +export default SiteDash; diff --git a/fe/src/logic/comms.ts b/fe/src/logic/comms.ts new file mode 100644 index 0000000..0c3bef4 --- /dev/null +++ b/fe/src/logic/comms.ts @@ -0,0 +1,549 @@ +import anyAscii from "any-ascii"; +import { + faker, + Faker, + es, + en, + zh_CN, + ja, + th, + mergeLocales, +} from "@faker-js/faker"; +import { APP_NAME, RADIO_SHIP, WIKI_SHIP } from "./constants"; +import { + AppChoice, + AppType, + Pikes, + RichMetadata, + Ship, + Site, + Wiki, +} from "./types"; +import { enkebab, generateRandomBase64, isValidHttpUrl } from "./utils"; +import { + ChannelsRes, + Content, + DiaryPage, + DiaryPost, + Essay, + PostsPage, +} from "./types-tlon"; +import Urbit from "@urbit/http-api"; +import { hex2patp } from "./ob/co"; +import { tokenize } from "./tlon-helpers"; + +type EventHandler = (data: any) => void; +type ErrorHandler = (data: any, id: string) => void; + +export function urbitIO(airlock: Urbit) { + const sub = async ( + app: string, + path: string, + event: EventHandler, + err?: ErrorHandler, + quit?: EventHandler, + ) => airlock.subscribe({ app, path, event }); + const unsub = async (num: number) => airlock.unsubscribe(num); + const scry = async (app: string, path: string) => airlock.scry({ app, path }); + const poke = async (app: string, mark: string, json: any) => + airlock.poke({ app, mark, json }); + const thread = async ( + threadName: string, + desk: string, + inputMark: string, + outputMark: string, + body: any, + ) => airlock.thread({ threadName, desk, inputMark, outputMark, body }); + return { + sub, + unsub, + scry, + poke, + thread, + }; +} + +export function dashIO(airlock: Urbit) { + const { scry, sub, unsub, poke, thread } = urbitIO(airlock); + + async function initSubs(handler: EventHandler) { + const err = (err: any, id: string) => console.log(err, ""); + const quit = (data: any) => console.log(data, ""); + const res = await sub(APP_NAME, "/ui", handler, err, quit); + return res; + } + async function initialScries() { + const groups = scry("groups", "/groups/v1"); + const pikes = scry("hood", "/kiln/pikes"); + return { groups: await groups, pikes: await pikes }; + } + // pokes + + async function createSite(site: Site) { + const obj = { dash: { set: site } }; + return poke(APP_NAME, "json", obj); + } + async function delSite(path: string) { + const obj = { dash: { del: path } }; + return poke(APP_NAME, "json", obj); + } + + // Tlon + async function createGroup(title: string) { + const name = enkebab(title); + const mark = "group-create"; + const app = "groups"; + const json = { + title, + description: "Backend Group for UCM site", + image: "#999999", + cover: "#D9D9D9", + name, + members: {}, + cordon: { + open: { + ships: [], + ranks: [], + }, + }, + secret: false, + }; + return poke(app, mark, json); + } + async function createBlog( + groupname: string, + title: string, + description: string, + ) { + const group = `~${airlock.ship}/${groupname}`; + const randomString = generateRandomBase64(3); + const name = "ucm-" + "ublog-" + enkebab(title) + "-" + randomString; + const mark = "channel-action"; + const app = "channels"; + const json = { + create: { + kind: "diary", + group, + name, + title, + description, + readers: [], + writers: [], + }, + }; + console.log(json); + return poke(app, mark, json); + } + async function createChannel( + groupname: string, + title: string, + description: string, + kind: string, + ) { + const group = `~${airlock.ship}/${groupname}`; + const randomString = generateRandomBase64(3); + const name = "ucm-" + enkebab(title) + "-" + randomString; + const mark = "channel-action"; + const app = "channels"; + const json = { + create: { + kind, + group, + name, + title, + description, + readers: [], + writers: [], + }, + }; + // console.log(json); + return poke(app, mark, json); + } + async function scryState(): Promise { + const res = await scry(APP_NAME, "/state"); + return res; + } + async function scryGroups() { + const app = "groups"; + const path = "/groups/v1"; + return await scry(app, path); + } + async function scryPikes() { + const app = "hood"; + const path = "/kiln/pikes"; + return await scry(app, path); + } + async function fetchApps(pikes: Pikes) { + const haveWiki = pikes.wiki && pikes.wiki.sync.ship === WIKI_SHIP; + if (!haveWiki) installApp(WIKI_SHIP, "wiki"); + } + async function installApp(ship: Ship, appName: string) { + const app = "docket"; + const mark = "docket-install"; + const json = `${ship}/${appName}`; + return poke(app, mark, json); + } + async function scryWiki(): Promise { + const app = "wiki"; + const path = `/list/mine`; + return await scry(app, path); + } + + return { + initSubs, + initialScries, + createSite, + delSite, + createGroup, + createBlog, + createChannel, + scryGroups, + scryState, + scryPikes, + fetchApps, + installApp, + scryWiki, + }; +} +export default function appIO(airlock: Urbit) { + const { scry, sub, unsub, poke, thread } = urbitIO(airlock); + + async function channelsSub(handler: EventHandler) { + const err = (err: any, id: string) => console.log(err, ""); + const quit = (data: any) => console.log(data, ""); + const res = await sub("channels", "/v1", handler, err, quit); + return res; + } + + // { + // "kind": "chat", + // "group": "~zod/my-test-site-3", + // "name": "shat-number-2", + // "title": "shat number 2", + // "description": "my new shat", + // "readers": [], + // "writers": [] + // } + + // tlom + async function sendChatMsg( + author: Ship, + host: Ship, + name: string, + content: Content, + sent: number, + ) { + const nest = `chat/${host}/${name}`; + const mark = "channel-action"; + const app = "channels"; + const json = { + channel: { + nest, + action: { + post: { + add: { + "kind-data": { + chat: null, + }, + author, + content, + sent, + }, + }, + }, + }, + }; + return poke(app, mark, json); + } + async function sendChatReply( + author: Ship, + host: Ship, + name: string, + parent: string, + content: Content, + ) { + const nest = `chat/${host}/${name}`; + const mark = "channel-action"; + const app = "channels"; + const json = { + channel: { + nest, + action: { + post: { + reply: { + id: parent, + action: { + add: { + author, + sent: Date.now(), + content, + }, + }, + }, + }, + }, + }, + }; + return poke(app, mark, json); + } + + async function sendDiaryPost( + author: Ship, + host: Ship, + name: string, + title: string, + image: string, + content: Content, + sent: number, + ) { + const nest = `diary/${host}/${name}`; + const mark = "channel-action"; + const app = "channels"; + const kind = { diary: { title, image } }; + const json = { + channel: { + nest, + action: { + post: { + add: { + author, + sent, + content, + "kind-data": kind, + }, + }, + }, + }, + }; + return poke(app, mark, json); + } + async function sendDiaryReply( + author: Ship, + host: Ship, + name: string, + parent: string, + content: Content, + ) { + const nest = `diary/${host}/${name}`; + const mark = "channel-action"; + const app = "channels"; + const json = { + channel: { + nest, + action: { + post: { + reply: { + id: parent, // dotted! + action: { + add: { + author, + sent: Date.now(), + content, + }, + }, + }, + }, + }, + }, + }; + console.log(json, "sending diary reply"); + return poke(app, mark, json); + } + async function sendReact( + author: Ship, + kind: string, + host: Ship, + name: string, + id: string, + react: string, + ) { + const nest = `${kind}/${host}/${name}`; + const mark = "channel-action"; + const app = "channels"; + const json = { + channel: { + nest, + action: { + post: { + "add-react": { + id, + react, + ship: author, + }, + }, + }, + }, + }; + return poke(app, mark, json); + } + async function sendReplyReact( + author: Ship, + kind: string, + host: Ship, + name: string, + parentId: string, + id: string, + react: string, + ) { + const nest = `${kind}/${host}/${name}`; + const mark = "channel-action"; + const app = "channels"; + const json = { + channel: { + nest, + action: { + post: { + reply: { + id: parentId, + action: { + "add-react": { + id, + react, + ship: author, + }, + }, + }, + }, + }, + }, + }; + return poke(app, mark, json); + } + + async function scryDiary( + ship: Ship, + name: string, + count: number, + ): Promise { + const app = "channels"; + const path = `/v1/diary/${ship}/${name}/posts/newest/${count}/post`; + return await scry(app, path); + } + async function scryDiaryPost( + ship: Ship, + name: string, + id: string, + ): Promise { + const app = "channels"; + const path = `/v1/diary/${ship}/${name}/posts/post/${id}`; + return await scry(app, path); + } + async function scryChat( + ship: Ship, + name: string, + count: number, + ): Promise { + const app = "channels"; + const path = `/v1/chat/${ship}/${name}/posts/newest/${count}/post`; + return await scry(app, path); + } + + // other apps + + async function search( + query: string, + apps: AppType[], + by: string, + start?: number, + end?: number, + ) { + const obj = { site: { search: { query, apps, by, start, end } } }; + return poke(APP_NAME, "json", obj); + } + async function scryChatroom( + ship: Ship, + name: string, + count: number, + ): Promise { + const res = await scry( + "channels", + `/v2/chat/${ship}/${name}/posts/newest/${count}/outline`, + ); + return res; + } + + async function fixChatMsg( + airlock: Urbit, + host: Ship, + name: string, + id: string, + essay: Essay, + ) { + const nest = `chat/${host}/${name}`; + const mark = "channel-action"; + const desk = "groups"; + const app = "channels"; + const json = { + channel: { + nest, + action: { + post: { + edit: { + id, + essay, + }, + }, + }, + }, + }; + console.log(airlock, "airlock"); + return airlock.ninjaPoke({ desk, app, mark, json, proxyApp: "ucm" }); + } + async function scryChannels(): Promise { + const res = await scry("channels", "/v2/channels/full"); + // const res4 = await scry("channels", "/v2/heads"); + // console.log(res4, "channs4"); + return res; + } + async function radioSub(handler: EventHandler) { + return sub("tenna", "/frontend", handler); + } + async function radioSub2(handler: EventHandler) { + await sub("tower", "/greg/local", handler); + // return sub("tower", "/personal", handler); + } + async function radioChat(from: Ship, message: string) { + const time = Date.now(); + const json = { + chat: { + from, + message, + time, + }, + }; + return poke("tenna", "radio-action", json); + } + async function radioSpin(playUrl: string) { + if (!isValidHttpUrl(playUrl)) return; + let currentUnixTime = Date.now(); + currentUnixTime = Math.ceil(currentUnixTime); + const json = { + spin: { + url: playUrl, + time: currentUnixTime, + }, + }; + return await poke("tenna", "radio-action", json); + } + + return { + channelsSub, + sendChatMsg, + sendChatReply, + sendDiaryPost, + sendDiaryReply, + sendReact, + sendReplyReact, + scryDiary, + scryDiaryPost, + scryChat, + search, + scryChatroom, + fixChatMsg, + scryChannels, + radioSub, + radioSub2, + radioSpin, + radioChat, + }; +} diff --git a/fe/src/logic/constants.ts b/fe/src/logic/constants.ts new file mode 100644 index 0000000..4aa679c --- /dev/null +++ b/fe/src/logic/constants.ts @@ -0,0 +1,37 @@ +import { Ship } from "./types"; + +export const APP_NAME = "ucm"; +export const URL = import.meta.env.PROD ? "" : "http://localhost:8081"; + +export const MOBILE_BROWSER_REGEX = + /Android|webOS|iPhone|iPad|iPod|BlackBerry/i; +export const AUDIO_REGEX = new RegExp(/https:\/\/.+\.(mp3|wav|ogg)\b/gim); +export const VIDEO_REGEX = new RegExp(/https:\/\/.+\.(mov|mp4|ogv)\b/gim); +export const TWITTER_REGEX = new RegExp( + /https:\/\/(twitter|x)\.com\/.+\/status\/\d+/gim, +); + +export const REF_REGEX = new RegExp( + /urbit:\/\/[a-z0-9-]+\/~[a-z-_]+\/[a-z0-9-_]+/gim, +); +export const RADIO_REGEX = new RegExp(/urbit:\/\/radio\/~[a-z-_]+/gim); + +export const IMAGE_REGEX = new RegExp( + /https:\/\/.+\.(jpg|img|png|gif|tiff|jpeg|webp|webm|svg)\b/gim, +); + +export const SHIP_REGEX = new RegExp(/\B~[a-z-]+/); +export const HASHTAGS_REGEX = new RegExp(/#[a-z-]+/g); + +export const DEFAULT_DATE = { year: 1970, month: 1, day: 1 }; +export const RADIO = "📻"; + +export const RADIO_SHIP: Ship = "~nodmyn-dosrux" as Ship; +export const WIKI_SHIP: Ship = "~holnes" as Ship; + +export const DEFAULT_ICON = "https://s3.sortug.com/img/icons/ucm-logo.png"; + +export const MAGIC_COMET = + "~dozzod-polwex-dozzod-polwex--dozzod-polwex-dozzod-polwex"; +const paths = window.location.pathname.split("/"); +export const BASE_PATH = `/${paths[4]}`; diff --git a/fe/src/logic/ob/co.ts b/fe/src/logic/ob/co.ts new file mode 100644 index 0000000..892c86a --- /dev/null +++ b/fe/src/logic/ob/co.ts @@ -0,0 +1,400 @@ +// ++ co +// +// See arvo/sys/hoon.hoon. +import { BN } from "bn.js"; +import { chunk, isEqual } from "lodash"; +import { ob } from "./ob"; +import type { Bn, PatP, PatQ, Rank, Iterable, Number } from "./types"; + +const zero = new BN(0); +const one = new BN(1); +const two = new BN(2); +const three = new BN(3); +const four = new BN(4); +const five = new BN(5); + +const pre = ` +dozmarbinwansamlitsighidfidlissogdirwacsabwissib\ +rigsoldopmodfoglidhopdardorlorhodfolrintogsilmir\ +holpaslacrovlivdalsatlibtabhanticpidtorbolfosdot\ +losdilforpilramtirwintadbicdifrocwidbisdasmidlop\ +rilnardapmolsanlocnovsitnidtipsicropwitnatpanmin\ +ritpodmottamtolsavposnapnopsomfinfonbanmorworsip\ +ronnorbotwicsocwatdolmagpicdavbidbaltimtasmallig\ +sivtagpadsaldivdactansidfabtarmonranniswolmispal\ +lasdismaprabtobrollatlonnodnavfignomnibpagsopral\ +bilhaddocridmocpacravripfaltodtiltinhapmicfanpat\ +taclabmogsimsonpinlomrictapfirhasbosbatpochactid\ +havsaplindibhosdabbitbarracparloddosbortochilmac\ +tomdigfilfasmithobharmighinradmashalraglagfadtop\ +mophabnilnosmilfopfamdatnoldinhatnacrisfotribhoc\ +nimlarfitwalrapsarnalmoslandondanladdovrivbacpol\ +laptalpitnambonrostonfodponsovnocsorlavmatmipfip\ +`; + +const suf = ` +zodnecbudwessevpersutletfulpensytdurwepserwylsun\ +rypsyxdyrnuphebpeglupdepdysputlughecryttyvsydnex\ +lunmeplutseppesdelsulpedtemledtulmetwenbynhexfeb\ +pyldulhetmevruttylwydtepbesdexsefwycburderneppur\ +rysrebdennutsubpetrulsynregtydsupsemwynrecmegnet\ +secmulnymtevwebsummutnyxrextebfushepbenmuswyxsym\ +selrucdecwexsyrwetdylmynmesdetbetbeltuxtugmyrpel\ +syptermebsetdutdegtexsurfeltudnuxruxrenwytnubmed\ +lytdusnebrumtynseglyxpunresredfunrevrefmectedrus\ +bexlebduxrynnumpyxrygryxfeptyrtustyclegnemfermer\ +tenlusnussyltecmexpubrymtucfyllepdebbermughuttun\ +bylsudpemdevlurdefbusbeprunmelpexdytbyttyplevmyl\ +wedducfurfexnulluclennerlexrupnedlecrydlydfenwel\ +nydhusrelrudneshesfetdesretdunlernyrsebhulryllud\ +remlysfynwerrycsugnysnyllyndyndemluxfedsedbecmun\ +lyrtesmudnytbyrsenwegfyrmurtelreptegpecnelnevfes\ +`; + +const patp2syls = (name: string): string[] => + name.replace(/[\^~-]/g, "").match(/.{1,3}/g) || []; + +const splitAt = (index: number, str: string) => [ + str.slice(0, index), + str.slice(index), +]; + +const prefixes = pre.match(/.{1,3}/g) as RegExpMatchArray; + +const suffixes = suf.match(/.{1,3}/g) as RegExpMatchArray; + +const bex = (n: Bn): Bn => two.pow(n); + +const rsh = (a: Bn, b: Bn, c: Bn): Bn => c.div(bex(bex(a).mul(b))); + +const met = (a: Bn, b: Bn, c: Bn = zero): Bn => + b.eq(zero) ? c : met(a, rsh(a, one, b), c.add(one)); + +const end = (a: Bn, b: Bn, c: Bn) => c.mod(bex(bex(a).mul(b))); + +/** + * Convert a hex-encoded string to a @p-encoded string. + * + */ +export const hex2patp = (hex: string): string => { + if (hex === null) { + throw new Error("hex2patp: null input"); + } + return patp(new BN(hex, "hex")); +}; + +/** + * Convert a @p-encoded string to a hex-encoded string. + * + * @param {String} name @p + * @return {String} + */ +const patp2hex = (name: PatP): string => { + if (isValidPat(name) === false) { + throw new Error("patp2hex: not a valid @p"); + } + const syls = patp2syls(name); + + const syl2bin = (idx: number) => idx.toString(2).padStart(8, "0"); + + const addr = syls.reduce( + (acc, syl, idx) => + idx % 2 !== 0 || syls.length === 1 + ? acc + syl2bin(suffixes.indexOf(syl)) + : acc + syl2bin(prefixes.indexOf(syl)), + "", + ); + + const bn = new BN(addr, 2); + const hex = ob.fynd(bn).toString("hex"); + return hex.length % 2 !== 0 ? hex.padStart(hex.length + 1, "0") : hex; +}; + +/** + * Convert a @p-encoded string to a bignum. + * + */ +const patp2bn = (name: PatP): Bn => new BN(patp2hex(name), "hex"); + +/** + * Convert a @p-encoded string to a decimal-encoded string. + * + */ +export const patp2dec = (name: PatP): string => { + let bn; + try { + bn = patp2bn(name); + } catch (_) { + throw new Error("patp2dec: not a valid @p"); + } + return bn.toString(); +}; + +/** + * Convert a number to a @q-encoded string. + * + */ +const patq = (arg: number | Bn | string): string => { + const bn = new BN(arg); + const buf = bn.toArrayLike(Buffer); + return buf2patq(buf); +}; + +/** + * Convert a Buffer into a @q-encoded string. + * + */ +const buf2patq = (buf: Buffer): string => { + const chunked = + buf.length % 2 !== 0 && buf.length > 1 + ? [[buf[0]]].concat(chunk(buf.slice(1), 2)) + : chunk(buf, 2); + + const prefixName = (byts: number[]) => + byts[1] === undefined + ? prefixes[0] + suffixes[byts[0]] + : prefixes[byts[0]] + suffixes[byts[1]]; + + const name = (byts: number[]) => + byts[1] === undefined + ? suffixes[byts[0]] + : prefixes[byts[0]] + suffixes[byts[1]]; + + const alg = (pair: number[]) => + pair.length % 2 !== 0 && chunked.length > 1 ? prefixName(pair) : name(pair); + + return chunked.reduce( + (acc, elem) => acc + (acc === "~" ? "" : "-") + alg(elem), + "~", + ); +}; + +/** + * Convert a hex-encoded string to a @q-encoded string. + * + * Note that this preserves leading zero bytes. + * + */ +const hex2patq = (arg: string): string => { + const hex = arg.length % 2 !== 0 ? arg.padStart(arg.length + 1, "0") : arg; + + const buf = Buffer.from(hex, "hex"); + return buf2patq(buf); +}; + +/** + * Convert a @q-encoded string to a hex-encoded string. + * + * Note that this preserves leading zero bytes. + * + */ +const patq2hex = (name: PatQ): string => { + if (isValidPat(name) === false) { + throw new Error("patq2hex: not a valid @q"); + } + const chunks = name.slice(1).split("-"); + const dec2hex = (dec: number) => dec.toString(16).padStart(2, "0"); + + const splat = chunks.map((chunk) => { + let syls = splitAt(3, chunk); + return syls[1] === "" + ? dec2hex(suffixes.indexOf(syls[0])) + : dec2hex(prefixes.indexOf(syls[0])) + dec2hex(suffixes.indexOf(syls[1])); + }); + + return name.length === 0 ? "00" : splat.join(""); +}; + +/** + * Convert a @q-encoded string to a bignum. + * + */ +const patq2bn = (name: PatQ): Bn => new BN(patq2hex(name), "hex"); + +/** + * Convert a @q-encoded string to a decimal-encoded string. + * + */ +const patq2dec = (name: PatQ): string => { + let bn; + try { + bn = patq2bn(name); + } catch (_) { + throw new Error("patq2dec: not a valid @q"); + } + return bn.toString(); +}; + +/** + * Determine the ship class of a @p value. + * + */ +const clan = (who: PatP): Rank => { + let name; + try { + name = patp2bn(who); + } catch (_) { + throw new Error("clan: not a valid @p"); + } + + const wid = met(three, name); + return wid.lte(one) + ? "galaxy" + : wid.eq(two) + ? "star" + : wid.lte(four) + ? "planet" + : wid.lte(new BN(8)) + ? "moon" + : "comet"; +}; + +/** + * Determine the parent of a @p value. + * + */ +const sein = (name: PatP): PatP => { + let who; + try { + who = patp2bn(name); + } catch (_) { + throw new Error("sein: not a valid @p"); + } + + let mir; + try { + mir = clan(name); + } catch (_) { + throw new Error("sein: not a valid @p"); + } + + const res = + mir === "galaxy" + ? who + : mir === "star" + ? end(three, one, who) + : mir === "planet" + ? end(four, one, who) + : mir === "moon" + ? end(five, one, who) + : zero; + return patp(res); +}; + +/** + * Weakly check if a string is a valid @p or @q value. + * + * This is, at present, a pretty weak sanity check. It doesn't confirm the + * structure precisely (e.g. dashes), and for @q, it's required that q values + * of (greater than one) odd bytelength have been zero-padded. So, for + * example, '~doznec-binwod' will be considered a valid @q, but '~nec-binwod' + * will not. + * + + */ +export const isValidPat = (name: PatQ | PatP): boolean => { + if (typeof name !== "string") { + throw new Error("isValidPat: non-string input"); + } + + const leadingTilde = name.slice(0, 1) === "~"; + + if (leadingTilde === false || name.length < 4) { + return false; + } else { + const syls = patp2syls(name); + const wrongLength = syls.length % 2 !== 0 && syls.length !== 1; + const sylsExist = syls.reduce( + (acc: boolean, syl, index) => + acc && + (index % 2 !== 0 || syls.length === 1 + ? suffixes.includes(syl) + : prefixes.includes(syl)), + true, + ); + + return !wrongLength && sylsExist; + } +}; + +/** + * Validate a @p string. + * + */ +export const isValidPatp = (str: PatP): boolean => + isValidPat(str) && str === patp(patp2dec(str)); + +/** + * Validate a @q string. + * + */ +const isValidPatq = (str: PatQ): boolean => + isValidPat(str) && eqPatq(str, patq(patq2dec(str))); + +/** + * Remove all leading zero bytes from a sliceable value. + */ +const removeLeadingZeroBytes = (str: Iterable): Iterable => + str.slice(0, 2) === "00" ? removeLeadingZeroBytes(str.slice(2)) : str; + +/** + * Equality comparison, modulo leading zero bytes. + */ +const eqModLeadingZeroBytes = (s: Iterable, t: Iterable): boolean => + isEqual(removeLeadingZeroBytes(s), removeLeadingZeroBytes(t)); + +/** + * Equality comparison on @q values. + */ +const eqPatq = (p: PatQ, q: PatQ): boolean => { + let phex; + try { + phex = patq2hex(p); + } catch (_) { + throw new Error("eqPatq: not a valid @q"); + } + + let qhex; + try { + qhex = patq2hex(q); + } catch (_) { + throw new Error("eqPatq: not a valid @q"); + } + + return eqModLeadingZeroBytes(phex, qhex); +}; + +/** + * Convert a number to a @p-encoded string. + * + * @param {String, Number, BN} arg + * @return {String} + */ +const patp = (arg: number | string | Bn): PatP => { + if (arg === null) { + throw new Error("patp: null input"); + } + const n = new BN(arg); + + const sxz = ob.fein(n); + const dyy = met(four, sxz); + + const loop = (tsxz: Bn, timp: Bn, trep: string): string => { + const log = end(four, one, tsxz); + const pre = prefixes[rsh(three, one, log).toNumber()]; + const suf = suffixes[end(three, one, log).toNumber()]; + const etc = timp.mod(four).eq(zero) ? (timp.eq(zero) ? "" : "--") : "-"; + + const res = pre + suf + etc + trep; + + return timp.eq(dyy) ? trep : loop(rsh(four, one, tsxz), timp.add(one), res); + }; + + const dyx = met(three, sxz); + + return "~" + (dyx.lte(one) ? suffixes[sxz.toNumber()] : loop(sxz, zero, "")); +}; + +export const co = { + patp, +}; diff --git a/fe/src/logic/ob/muk.ts b/fe/src/logic/ob/muk.ts new file mode 100644 index 0000000..c9d191b --- /dev/null +++ b/fe/src/logic/ob/muk.ts @@ -0,0 +1,116 @@ +// ++ muk +// +// See arvo/sys/hoon.hoon. +import { BN } from 'bn.js'; +import type { Bn, PatP, PatQ, Rank, Iterable, Number } from './types'; + +const ux_FF = new BN(0xff); +const ux_FF00 = new BN(0xff00); +const u_256 = new BN(256); + +/** + * Standard murmur3. + * + */ +export const muk = (syd: number, len: number, key: Bn): Bn => { + const lo = key.and(ux_FF).toNumber(); + const hi = key.and(ux_FF00).div(u_256).toNumber(); + const kee = String.fromCharCode(lo) + String.fromCharCode(hi); + return new BN(murmurhash3_32_gc(kee, syd)); +}; + +// see: https://github.com/garycourt/murmurhash-js +// +// Copyright (c) 2011 Gary Court +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of +// this software and associated documentation files (the "Software"), to deal in +// the Software without restriction, including without limitation the rights to +// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +// of the Software, and to permit persons to whom the Software is furnished to do +// so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +/** + * JS Implementation of MurmurHash3 (r136) (as of May 20, 2011) + * + * @author Gary Court + * @see http://github.com/garycourt/murmurhash-js + * @author Austin Appleby + * @see http://sites.google.com/site/murmurhash/ + * + * @param {string} key ASCII only + * @param {number} seed Positive integer only + * @return {number} 32-bit positive integer hash + **/ +const murmurhash3_32_gc = (key: string, seed: number): number => { + // eslint-disable-next-line no-unused-vars + let remainder, bytes, h1, h1b, c1, c1b, c2, c2b, k1, i; + + remainder = key.length & 3; // key.length % 4 + bytes = key.length - remainder; + h1 = seed; + c1 = 0xcc9e2d51; + c2 = 0x1b873593; + i = 0; + + while (i < bytes) { + k1 = + (key.charCodeAt(i) & 0xff) | + ((key.charCodeAt(++i) & 0xff) << 8) | + ((key.charCodeAt(++i) & 0xff) << 16) | + ((key.charCodeAt(++i) & 0xff) << 24); + ++i; + + k1 = ((k1 & 0xffff) * c1 + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff; + k1 = (k1 << 15) | (k1 >>> 17); + k1 = ((k1 & 0xffff) * c2 + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff; + + h1 ^= k1; + h1 = (h1 << 13) | (h1 >>> 19); + h1b = ((h1 & 0xffff) * 5 + ((((h1 >>> 16) * 5) & 0xffff) << 16)) & 0xffffffff; + h1 = (h1b & 0xffff) + 0x6b64 + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16); + } + + k1 = 0; + + switch (remainder) { + case 3: + k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16; + // eslint-disable-next-line no-fallthrough + case 2: + k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8; + // eslint-disable-next-line no-fallthrough + case 1: + k1 ^= key.charCodeAt(i) & 0xff; + + k1 = ((k1 & 0xffff) * c1 + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff; + k1 = (k1 << 15) | (k1 >>> 17); + k1 = ((k1 & 0xffff) * c2 + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff; + h1 ^= k1; + } + + h1 ^= key.length; + + h1 ^= h1 >>> 16; + h1 = + ((h1 & 0xffff) * 0x85ebca6b + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & + 0xffffffff; + h1 ^= h1 >>> 13; + h1 = + ((h1 & 0xffff) * 0xc2b2ae35 + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16)) & + 0xffffffff; + h1 ^= h1 >>> 16; + + return h1 >>> 0; +}; diff --git a/fe/src/logic/ob/ob.ts b/fe/src/logic/ob/ob.ts new file mode 100644 index 0000000..70f5c22 --- /dev/null +++ b/fe/src/logic/ob/ob.ts @@ -0,0 +1,166 @@ +// ++ ob +// +// See arvo/sys/hoon.hoon. +import { BN } from 'bn.js'; +import { muk } from './muk'; +import type { Bn, Number } from './types'; + +const ux_1_0000 = new BN('10000', 'hex'); +const ux_ffff_ffff = new BN('ffffffff', 'hex'); +const ux_1_0000_0000 = new BN('100000000', 'hex'); +const ux_ffff_ffff_ffff_ffff = new BN('ffffffffffffffff', 'hex'); +const ux_ffff_ffff_0000_0000 = new BN('ffffffff00000000', 'hex'); + +const u_65535 = new BN('65535'); +const u_65536 = new BN('65536'); + +// a PRF for j in { 0, .., 3 } +const F = (j: number, arg: Bn): Bn => { + const raku = [0xb76d5eed, 0xee281300, 0x85bcae01, 0x4b387af7]; + + return muk(raku[j], 2, arg); +}; + +/** + * Conceal structure v3. + * + */ +const fein = (arg: Number): Bn => { + const loop = (pyn: Bn): Bn => { + const lo = pyn.and(ux_ffff_ffff); + const hi = pyn.and(ux_ffff_ffff_0000_0000); + + return pyn.gte(ux_1_0000) && pyn.lte(ux_ffff_ffff) + ? ux_1_0000.add(feis(pyn.sub(ux_1_0000))) + : pyn.gte(ux_1_0000_0000) && pyn.lte(ux_ffff_ffff_ffff_ffff) + ? hi.or(loop(lo)) + : pyn; + }; + + return loop(new BN(arg)); +}; + +/** + * Restore structure v3. + * + */ +const fynd = (arg: Number): Bn => { + const loop = (cry: Bn): Bn => { + const lo = cry.and(ux_ffff_ffff); + const hi = cry.and(ux_ffff_ffff_0000_0000); + + return cry.gte(ux_1_0000) && cry.lte(ux_ffff_ffff) + ? ux_1_0000.add(tail(cry.sub(ux_1_0000))) + : cry.gte(ux_1_0000_0000) && cry.lte(ux_ffff_ffff_ffff_ffff) + ? hi.or(loop(lo)) + : cry; + }; + + return loop(new BN(arg)); +}; + +/** + * Generalised Feistel cipher. + * + * See: Black and Rogaway (2002), "Ciphers with arbitrary finite domains." + * + * Note that this has been adjusted from the reference paper in order to + * support some legacy behaviour. + * + * @param {String, Number, BN} + * @return {BN} + */ +const feis = (arg: Number): Bn => Fe(4, u_65535, u_65536, ux_ffff_ffff, F, new BN(arg)); + +const Fe = (r: number, a: Bn, b: Bn, k: Bn, f: typeof F, m: Bn): Bn => { + const c = fe(r, a, b, f, m); + return c.lt(k) ? c : fe(r, a, b, f, c); +}; + +const fe = (r: number, a: Bn, b: Bn, f: typeof F, m: Bn) => { + const loop = (j: number, ell: Bn, arr: Bn): Bn => { + if (j > r) { + return r % 2 !== 0 + ? a.mul(arr).add(ell) + : arr.eq(a) + ? a.mul(arr).add(ell) + : a.mul(ell).add(arr); + } else { + const eff = f(j - 1, arr); + + const tmp = j % 2 !== 0 ? ell.add(eff).mod(a) : ell.add(eff).mod(b); + + return loop(j + 1, arr, tmp); + } + }; + + const L = m.mod(a); + const R = m.div(a); + + return loop(1, L, R); +}; + +/** + * Reverse 'feis'. + * + * See: Black and Rogaway (2002), "Ciphers with arbitrary finite domains." + * + * Note that this has been adjusted from the reference paper in order to + * support some legacy behaviour. + * + * @param {Number, String, BN} arg + * @return {BN} + */ +const tail = (arg: Number): Bn => Fen(4, u_65535, u_65536, ux_ffff_ffff, F, new BN(arg)); + +const Fen = (r: number, a: Bn, b: Bn, k: Bn, f: typeof F, m: Bn): Bn => { + const c = fen(r, a, b, f, m); + return c.lt(k) ? c : fen(r, a, b, f, c); +}; + +const fen = (r: number, a: Bn, b: Bn, f: typeof F, m: Bn) => { + const loop = (j: number, ell: Bn, arr: Bn): Bn => { + if (j < 1) { + return a.mul(arr).add(ell); + } else { + const eff = f(j - 1, ell); + + // NB (jtobin): + // + // Slight deviation from B&R (2002) here to prevent negative values. We + // add 'a' or 'b' to arr as appropriate and reduce 'eff' modulo the same + // number before performing subtraction. + // + const tmp = + j % 2 !== 0 + ? arr.add(a).sub(eff.mod(a)).mod(a) + : arr.add(b).sub(eff.mod(b)).mod(b); + + return loop(j - 1, tmp, ell); + } + }; + + const ahh = r % 2 !== 0 ? m.div(a) : m.mod(a); + + const ale = r % 2 !== 0 ? m.mod(a) : m.div(a); + + const L = ale.eq(a) ? ahh : ale; + + const R = ale.eq(a) ? ale : ahh; + + return loop(r, L, R); +}; + +export const ob = { + F, + + fe, + Fe, + feis, + fein, + + fen, + Fen, + tail, + fynd, +}; diff --git a/fe/src/logic/ob/types.ts b/fe/src/logic/ob/types.ts new file mode 100644 index 0000000..8d74530 --- /dev/null +++ b/fe/src/logic/ob/types.ts @@ -0,0 +1,7 @@ +import { BN } from 'bn.js'; +export type Bn = InstanceType; +export type PatP = string; +export type PatQ = string; +export type Rank = 'galaxy' | 'star' | 'planet' | 'moon' | 'comet'; +export type Iterable = any[] | Buffer | string; +export type Number = number | string | Bn; diff --git a/fe/src/logic/store.ts b/fe/src/logic/store.ts new file mode 100644 index 0000000..9cf69da --- /dev/null +++ b/fe/src/logic/store.ts @@ -0,0 +1,126 @@ +import Urbit from "@urbit/http-api"; +import { create } from "zustand"; +import { persist } from "zustand/middleware"; +import { APP_NAME, URL } from "./constants"; +import { dashIO } from "./comms"; +import { Pikes, Ship, Site, SiteBunt } from "./types"; +import { Group as TlonGroup } from "./types-tlon"; + +interface ClientState { + // dashboard stuff + airlock: Urbit; + init: () => Promise; + sync: () => Promise; + modal: JSX.Element | null; + setModal: (m: JSX.Element | null) => void; + state: Record; + groups: Record; + pikes: Pikes; + loading: boolean; + setLoading: (b: boolean) => void; + dashIO: () => ReturnType; +} +export async function start(): Promise { + const airlock = new Urbit(URL, ""); + const res = await fetch(URL + "/~/host"); + const ship = await res.text(); + airlock.ship = ship.slice(1); + airlock.desk = APP_NAME; + await airlock.poke({ app: "hood", mark: "helm-hi", json: "opening airlock" }); + await airlock.eventSource(); + return airlock; +} +export async function getShip(): Promise { + const res2 = await fetch(URL + "/~/name"); + const ship2 = await res2.text(); + return ship2 as Ship; +} + +const stateStore = create()( + // persist( + (set, get) => ({ + loading: true, + setLoading: (loading) => set({ loading }), + airlock: new Urbit(URL), + state: {}, + channelsState: {}, + groups: {}, + pikes: {}, + sync: async () => { + const airlock = get().airlock; + const aio = dashIO(airlock); + const state = aio.scryState(); + const groups = aio.scryGroups(); + const pikes = aio.scryPikes(); + set({ + state: await state, + groups: await groups, + pikes: await pikes, + loading: false, + }); + }, + init: async () => { + const airlock = await start(); + const dio = dashIO(airlock); + const scries = dio.initialScries(); + dio.initSubs((data) => { + console.log(data, "sub data"); + const state = data; + set({ state }); + }); + // TODO this is only for seeding phase + const ss = await scries; + const { groups, pikes } = ss; + set({ + airlock, + groups, + pikes, + loading: false, + }); + }, + modal: null, + setModal: (m) => set({ modal: m }), + dashIO: () => { + const airlock = get().airlock; + const aio = dashIO(airlock); + return aio; + }, + }), + // { + // name: "ucm-storage", + // }, + // ), +); + +// very nice +// https://dev.to/eraywebdev/optimizing-zustand-how-to-prevent-unnecessary-re-renders-in-your-react-app-59do +import { StoreApi, UseBoundStore } from "zustand"; +import { shallow } from "zustand/shallow"; +import { addDots } from "./utils"; + +type GenericState = Record; + +export const createStoreWithSelectors = ( + store: UseBoundStore>, +): ((keys: K[]) => Pick) => { + const useStore: (keys: K[]) => Pick = < + K extends keyof T, + >( + keys: K[], + ) => { + // console.log(keys, "keys"); + return store((state) => { + const x = keys.reduce((acc, cur) => { + acc[cur] = state[cur]; + return acc; + }, {} as T); + + return x as Pick; + }, shallow); + }; + + return useStore; +}; + +const useStore = createStoreWithSelectors(stateStore); +export default useStore; diff --git a/fe/src/logic/tlon-helpers.ts b/fe/src/logic/tlon-helpers.ts new file mode 100644 index 0000000..e1dbb37 --- /dev/null +++ b/fe/src/logic/tlon-helpers.ts @@ -0,0 +1,690 @@ +import { + Block, + ChatQuoteParams, + Content, + Essay, + Inline, + Listing, + Memo, + Nest, + Reply, + Seal, + Verse, + Writ, +} from './types-tlon'; +import { Ship } from './types'; +import { Token, Tokens, marked } from 'marked'; +import { isValidPatp } from './ob/co'; +import { addDots5, makeDottedIndex } from './utils'; +import { REF_REGEX, SHIP_REGEX } from './constants'; +export function buildMemo(author: Ship, content: Content): Memo { + return { + author, + sent: Date.now(), + content, + }; +} +export function buildEssay(author: Ship, content: Content): Essay { + return { + author, + sent: Date.now(), + content, + 'kind-data': { chat: null }, + }; +} + +export function buildClubPost(author: Ship, chatID: string, essay: Essay) { + // ids now are ~ship/170.123... + const { 'kind-data': _, ...memo } = essay; + const index = makeDottedIndex(); + const id = `${author}/${index}`; + const json = { + id: chatID, + diff: { + uid: '0v3', + delta: { + writ: { + id, + delta: { + add: { + time: null, + kind: null, + memo, + }, + }, + }, + }, + }, + }; + return { + app: 'chat', + mark: 'chat-club-action-0', + json, + }; +} +export function buildNDM(author: Ship, ship: Ship, memo: Memo) { + // ids now are ~ship/170.123... + const index = makeDottedIndex(); + const id = `${author}/${index}`; + const json = { + ship, + diff: { + id: id, + delta: { + add: { + time: null, + kind: null, + memo, + }, + }, + }, + }; + return { + app: 'chat', + mark: 'chat-dm-action', + json, + }; +} +export function buildNChatPost(nes: Nest, essay: Essay) { + const nest = nestToString(nes); + // ids now are ~ship/170.123... + const json = { + channel: { + nest, + action: { + post: { + add: essay, + }, + }, + }, + }; + return { + app: 'channels', + mark: 'channel-action', + json, + }; +} +export function buildDMReply( + our: Ship, + ship: Ship, + author: Ship, + parent: string, + memo: Memo, +) { + const id = makeDottedIndex(); + const json = { + ship, + diff: { + id: `${author}/${parent}`, + delta: { + reply: { + meta: null, + id: `${our}/${id}`, + delta: { + add: { + memo, + time: null, + }, + }, + }, + }, + }, + }; + return { + app: 'chat', + mark: 'chat-dm-action', + json, + }; +} +export function buildClubReply( + our: Ship, + clubID: string, + author: Ship, + parent: string, + memo: Memo, +) { + const id = makeDottedIndex(); + const json = { + id: addDots5(clubID), + diff: { + delta: { + writ: { + delta: { + reply: { + delta: { + add: { + memo, + time: null, + }, + }, + meta: null, + id: `${our}/${id}`, + }, + }, + id: `${author}/${parent}`, + }, + }, + uid: '0v3', + }, + }; + return { + app: 'chat', + mark: 'chat-club-action-0', + json, + }; +} +export function buildChatReply(parent: string, nest: string, memo: Memo) { + // club reply + const json = { + channel: { + nest, + action: { + post: { + reply: { + id: parent, + action: { + add: memo, + }, + }, + }, + }, + }, + }; + return { + app: 'channels', + mark: 'channel-action', + json, + }; +} +export function buildDiaryPost( + author: Ship, + resource: string, + title: string, + inline: Inline[], +) { + const index = makeDottedIndex(); + const json = { + flag: resource, + update: { + time: '', + diff: { + notes: { + time: index, + delta: { + add: { + author, + image: '', + title, + sent: Date.now(), + content: [{ inline }], + }, + }, + }, + }, + }, + }; + return { + app: 'diary', + mark: 'diary-action-0', + json, + }; +} +export function buildHeapPost( + author: Ship, + resource: string, + title: string, + inline: Inline[], +) { + const index = makeDottedIndex(); + const json = { + flag: resource, + update: { + time: '', + diff: { + curios: { + time: index, + delta: { + add: { + author, + title, + replying: null, + sent: Date.now(), + content: { + block: [], + inline, + }, + }, + }, + }, + }, + }, + }; + return { + app: 'heap', + mark: 'heap-action-0', + json, + }; +} +// export function markdownToReply( +// our: Ship, +// parent: string, +// s: string +// ): ReplyGraph { +// const verses = tokenize(s); +// const memo = buildMemo(our, verses); +// const provIndex = makeDottedIndex(); +// const graph = memoToReply(provIndex, parent, memo); +// return graph; +// } +export function chatQuoteToCite(cq: ChatQuoteParams): Verse { + const nest = cq.nest as any; + const where = `/msg/${cq.id}`; + return { + block: { + cite: { + chan: { nest, where }, + }, + }, + }; +} +export function markdownToWrit( + our: Ship, + s: string, + images: string[], + cite: ChatQuoteParams | null, +): Essay { + const verses = tokenize(s); + const fverses = cite ? [...verses, chatQuoteToCite(cite)] : verses; + const f = [...fverses, ...images.map(buildImage)]; + const essay = buildEssay(our, f); + return essay; +} +function buildImage(src: string): Verse { + return { + block: { + image: { + src, + alt: '', + height: 100, + width: 100, // TODO wtf + }, + }, + }; +} + +export function provWrit(essay: Essay): Writ { + const seal: Seal = { + id: essay.sent.toString(), + reacts: {}, + replies: {}, + meta: { + lastRepliers: [], + lastReply: null, + replyCount: 0, + }, + }; + return { essay, seal, prov: true }; +} +// export function memoToReply(id: string, parent: string, memo: Memo): ReplyGraph { +// const writ = { +// memo, +// seal: { +// reacts: {}, +// id, +// "parent-id": parent, +// }, +// }; +// return { [id]: writ }; +// } + +export function memoToChatReply( + parentID: string, + fullID: string, + id: string, + memo: Memo, +): Reply { + const seal = { + id: fullID, + reacts: {}, + 'parent-id': parentID, + time: id, // non dotted + }; + return { memo, seal }; +} +export function memoToWrit(id: string, memo: Memo, time: string): Writ { + const writ = { + essay: { ...memo, 'kind-data': { chat: null } }, + seal: { + time, + reacts: {}, + id, + replies: {}, + meta: { + lastRepliers: [], + lastReply: null, + replyCount: 0, + }, + }, + }; + return writ; +} +export function essayToWrit(id: string, essay: Essay): Writ { + return { + essay, + seal: { + reacts: {}, + id: `${essay.author}/${id}`, + replies: {}, + meta: { + lastRepliers: [], + lastReply: null, + replyCount: 0, + }, + }, + }; +} +export function tokenize(s: string): Content { + // TODO there must be a better way to do this + // // man this is annoying. Thanks github, fuck you maintainers. + // const notEscape: marked.MarkedExtension = { + // name: "singleQuote", + // level: "inline", // This is an inline-level tokenizer + // start(src: string) { + // return src.match(/['"<>&]/); + // }, // Hint to Marked.js to stop and check for a match + // tokenizer(src: string, tokens: marked.Token[]) { + // const rule = /['"<>&]/; // Regex for the complete token, anchor to string start + // const match = rule.exec(src); + // if (match) { + // return { + // // Token to generate + // type: "singleQuote", // Should match "name" above + // raw: match[0], // Text to consume from the source + // // text: match[0], // Additional custom properties + // }; + // } + // }, + // renderer(token) { + // return token.text; + // } + // }; + marked.use({ + breaks: true, + }); + // marked.use({ extensions: [notEscape] }); + // const m = marked.lexer(s); + // const tokens = m.map(lexerToTlon).flat(); + // return tokens; + const m = inputToMDTokens(s); + const tokens = m.reduce(lexerToTlonTop, [] as Verse[]); + return tokens; +} +export function inputToMDTokens(input: string) { + const refExtension = { + name: 'ref', + level: 'inline' as 'inline', + start(src: string) { + return src.match(REF_REGEX)?.index; + }, + tokenizer(src: string) { + const ref = src.match(REF_REGEX); + if (!ref || !ref.index || ref.index > 0) return; + return { + type: 'ref', + raw: src, + text: src, + }; + }, + }; + const shipExtension = { + name: 'ship', + level: 'inline' as 'inline', + start(src: string) { + return src.match(SHIP_REGEX)?.index; + }, + tokenizer(src: string) { + const ship = src.match(SHIP_REGEX); + if (ship && isValidPatp(ship[0])) { + if (!ship || !ship.index || ship.index > 0) return; + return { + type: 'ship', + raw: ship[0], + text: ship[0].trim(), + }; + } + }, + }; + marked.use({ breaks: true, extensions: [refExtension, shipExtension] }); + const md = marked.lexer(input); + return md; +} +function lexerToTlonTop(acc: Verse[], m: Token): Verse[] { + // console.log(m, "parsing"); + if (m.type === 'paragraph') + return [...acc, { inline: m.tokens!.map(lexerToTlon).flat() }]; + if (m.type === 'blockquote') + return [...acc, { inline: [{ blockquote: m.tokens!.map(lexerToTlon).flat() }] }]; + if (m.type === 'code') return [...acc, { block: tlonCodeblock(m) }]; + if (m.type === 'list') return [...acc, { block: { listing: tlonList(m) } }]; + if (m.type === 'heading') return [...acc, { block: tlonHeading(m) }]; + else return acc; +} +function tlonHeading(t: any) { + return { + header: { + content: t.tokens.map(lexerToTlon).flat(), + tag: `h${t.depth}`, + }, + }; +} +function tlonCodeblock(t: any) { + return { + code: { + code: t.text, + lang: t.lang, + }, + }; +} +function tlonList(t: any): Listing { + return { + list: { + type: t.ordered ? 'ordered' : 'unordered', + items: t.items.map(tlonListItem), + contents: [], + }, + }; +} +function tlonListItem(t: any) { + return { + item: t.tokens.map(lexerToTlon).flat(), + }; +} +export function unEscape(s: string): string { + var e = document.createElement('textarea'); + e.innerHTML = s; + // handle case of empty input + return e.childNodes.length === 0 ? '' : e.childNodes[0].nodeValue || ''; +} +function lexerToTlon(m: Token): Inline[] { + if ('text' in m) m.text = unEscape(m.text.trim()); + if (m.type === 'text') return parsePlainText(m.text.trim()); + if (m.type === 'ref') return m.text; + else if (m.type === 'paragraph') return m.tokens!.map(lexerToTlon).flat(); + else if (m.type === 'space') return [{ break: null }]; + else if (m.type === 'ship') return [{ ship: m.text }]; + else if (m.type === 'em') return [{ italics: m.tokens!.map(lexerToTlon).flat() }]; + else if (m.type === 'strong') return [{ bold: m.tokens!.map(lexerToTlon).flat() }]; + else if (m.type === 'del') return [{ strike: m.tokens!.map(lexerToTlon).flat() }]; + else if (m.type === 'blockquote') + return [{ blockquote: m.tokens!.map(lexerToTlon).flat() }]; + else if (m.type === 'link') return [{ link: { href: m.href, content: m.text } }]; + else if (m.type === 'image') return [{ link: { href: m.href, content: m.text } }]; + else if (m.type === 'code') return [{ code: m.text, lang: m.lang }]; + else if (m.type === 'codespan') return [{ 'inline-code': m.text }]; + else if (m.type === 'br') return [{ break: null }]; + else if (m.type === 'list') return m.items.map(markdownListToTlon).flat(); + else if (m.type === 'html' || m.type === 'heading') return parsePlainText(m.text); + else return [m.raw]; +} +function markdownListToTlon(m: Tokens.ListItem): Inline[] { + return [m.raw, { break: null }]; +} +function parsePlainText(s: string): Inline[] { + let data: tokenizerData = [s, []]; + data = extract_mention(data); + data = extract_url(data); + return extract_text(data); +} +// tokenizer adapted from graph-store implementation +type tokenizerData = [string, taggedContent[]]; +type taggedContent = [string, Inline]; +export function extract_mention(data: tokenizerData): tokenizerData { + // const regex = /(^|\s)~[a-z_-]+/g; + const matches = data[0].match(SHIP_REGEX); + if (!matches) return data; + else + return matches.reduce((acc, item) => { + const uid = `;;${Math.random().toString(36).substring(8)};;`; + if (isValidPatp(item.trim())) + return [acc[0].replace(item, uid), [...acc[1], [uid, { ship: item.trim() }]]]; + else return acc; + }, data); +} +export const URL_REGEX = + /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,10}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/g; +function extract_url(data: tokenizerData): tokenizerData { + const matches = data[0].match(URL_REGEX); + if (!matches) return data; + else + return matches.reduce((acc, item) => { + const uid = `;;${Math.random().toString(36).substring(8)};;`; + return [ + acc[0].replace(item, uid), + [...acc[1], [uid, { link: { href: item, content: item } }]], + ]; + }, data); +} +function extract_text(data: tokenizerData): Inline[] { + const uids = data[1].map((tuple) => tuple[0].replace(/;/g, '')); + const ret = data[0].split(';;').map((section) => { + if (uids.includes(section)) { + const tc = data[1].find((tagged) => tagged[0] === `;;${section};;`); + if (tc) return tc[1]; + else return section; + } else return section; + }); + return ret; +} + +export function newUv(seed = Date.now()) { + return formatUv(unixToDa(seed)); +} +export const DA_UNIX_EPOCH = BigInt('170141184475152167957503069145530368000'); // `@ud` ~1970.1.1 + +export const DA_SECOND = BigInt('18446744073709551616'); // `@ud` ~s1 + +export const EPOCH = BigInt('292277024400'); +export function unixToDa(unix: number): bigint { + const timeSinceEpoch = (BigInt(unix) * DA_SECOND) / 1000n; + return DA_UNIX_EPOCH + timeSinceEpoch; +} +export function formatUv(x: bigint): string { + const uvMask = BigInt(31); + const uvAlphabet = '0123456789abcdefghijklmnopqrstuv'; + let res = ''; + while (x !== BigInt(0)) { + let nextSix = Number(x & uvMask); + res = uvAlphabet[nextSix] + res; + x = x >> BigInt(5); + } + return addDots5(`0v${res}`); +} + +export function replyToPost(post: Reply): Writ { + const essay: Essay = { ...post.memo, 'kind-data': { chat: null } }; + const seal: Seal = { + id: post.seal.id, + reacts: post.seal.reacts, + time: post.seal?.time as string, + replies: {}, + meta: { + lastRepliers: [], + lastReply: null, + replyCount: 0, + }, + }; + return { essay, seal }; +} +export function postToReply(post: Writ): Reply { + const { 'kind-data': _, ...memo } = post.essay; + const seal = { + id: post.seal.id, + reacts: post.seal.reacts, + 'parent-id': post.seal.id, + time: post.seal.time!, + }; + return { memo, seal }; +} + +export function writToMD(content: Content): string { + return content.reduce((acc, verse) => { + if ('block' in verse) return acc + '\n\n' + blockReducer(verse.block); + else return acc + `\n\n` + inlineReducer(verse.inline); + }, ''); +} +function blockReducer(b: Block): string { + if ('image' in b) return `![](${b.image.src})`; + else if ('code' in b) + return ` + \`\`\` + ${b.code.code} + \`\`\` + `; + else if ('header' in b) { + const tag = + b.header.tag === 'h1' + ? '#' + : b.header.tag === 'h2' + ? '##' + : b.header.tag === 'h3' + ? '###' + : b.header.tag === 'h4' + ? '####' + : b.header.tag === 'h5' + ? '#####' + : b.header.tag === 'h6' + ? '######' + : ''; + return `${tag} ${b.header.content}`; + } else if ('listing' in b) + return ''; // TODO + else if ('cite' in b) + return ''; // TODO + else return ''; +} +function inlineReducer(ar: Inline[]): string { + const res = ar.reduce((acc: string, item) => { + return `${acc} ${inlineToString(item)}`; + }, ''); + return res as string; +} +function inlineToString(i: Inline): string { + if (typeof i === 'string') return i; + else if ('break' in i) return `\n`; + else if ('ship' in i) return i.ship; + else if ('inline-code' in i) return `\`${i['inline-code']}\``; + else if ('code' in i) return `\`${i.code}\``; + else if ('link' in i) return `![${i.link.content}](${i.link.href})`; + else if ('italics' in i) return `_${inlineReducer(i.italics).trim()}_`; + else if ('bold' in i) return `*${inlineReducer(i.bold).trim()}*`; + else if ('blockquote' in i) return `> ${inlineReducer(i.blockquote).trim()}`; + else if ('strike' in i) return `~~${inlineReducer(i.strike).trim()}~~`; + else return ''; +} +export function nestFromString(s: string): Nest { + const ss = s.split('/'); + return { type: ss[0] as any, host: ss[1] as any, name: ss[2] }; +} +export function nestToString(nes: Nest): string { + return `${nes.type}/${nes.host}/${nes.name}`; +} diff --git a/fe/src/logic/types-tlon.ts b/fe/src/logic/types-tlon.ts new file mode 100644 index 0000000..2e8e3d7 --- /dev/null +++ b/fe/src/logic/types-tlon.ts @@ -0,0 +1,630 @@ +import { Ship } from "./types"; + +export type Timestamp = number; +export type UrbitTime = string; +// Tlon Channels +export type TlonUnreads = { + dms: Record; + clubs: Record; + channels: Record; + invites: Ship[]; +}; +export type DMType = Ship | string; +export type Nest = { + type: ChannelType; + host: Ship; + name: string; +}; +export type NestString = `${ChannelType}/${Ship}/${string}`; +export type ChannelType = "chat" | "diary" | "heap"; +export type ChatTypeI = { dm: Ship } | { club: string } | { channel: Nest }; +export type ChatType = ChatTypeI | { thread: Thread }; + +export type Thread = { author: Ship; op: string; in: ChatTypeI }; + +export const buntUnread: ChannelUnread = { + count: 0, + recency: Date.now(), + unread: null, + threads: {}, + meta: { + cover: "", + image: "", + title: "", + description: "", + team: [], + }, +}; +export type ChannelUnread = { + count: number; + recency: Timestamp; + unread: null | Unread; + threads: Record; // kana + meta: Metadata; +}; +export type Unread = { + count: number; + id: PostID; + time: UrbitTime; +}; +export type Atom = string; +export type PostID = `${Ship}/${Atom}` | Atom; + +// Groups + +export type GroupsMap = Record; +export type Group = { + bloc: string[]; // roles + cabals: Record; + channels: Record; + cordon: any; // bans I think + fleet: Record; + meta: GroupMetadata; + "flagged-content": any; // mmm + saga: any; // ? + zones: Record; + "zone-ord": string[]; +}; +export const GroupBunt: Group = { + bloc: [], // roles + cabals: {}, + channels: {}, + cordon: null, // bans I think + fleet: {}, + meta: { cover: "", image: "", title: "", description: "" }, + "flagged-content": {}, // mmm + saga: {}, // ? + zones: {}, + "zone-ord": [], +}; +export type Zone = { + idx: string; // channeltype/host/name + meta: GroupMetadata; +}; +export type Membership = { + joined: number; + sects: Sect[]; +}; +export type Sect = any; // idk man +export type ChannelData = { + added: number; // date + join: boolean; + meta: GroupMetadata; + readers: Ship[]; + zone: string; // the section I think +}; +export type Metadata = { + cover: string; + image: string; + title: string; + description: string; + team: Ship[]; +}; +export type GroupMetadata = { + cover: string; + image: string; + title: string; + description: string; +}; +export type ClubsMap = Record; +export type Club = { + hive: Ship[]; + team: Ship[]; + net: string; // "done" or sop + meta: GroupMetadata; +}; + +export type ChannelsRes = Record; +export type ChanString = `${ChannelType}/${Ship}/${string}`; +export type ChanState = { + order: string[]; // ? + sort: string; // ? "time" | w/e + view: string; // ? "list" | w/e + pending: { + posts: any; // ? + replies: any; + }; + perms: { + group: string; + writers: Ship[]; + }; + posts: Record; +}; +export type DottedPostID = string; + +// Chat posts +export interface Writ { + seal: Seal; + essay: Essay; + prov?: boolean; +} +export interface Reply { + seal: ReplySeal; + memo: Memo; + unconfirmed?: boolean; +} +export interface DiaryPage { + newer: string | null; // atom, no-dots + older: string | null; + total: number; + posts: DiaryGraph; +} +export interface DiaryPost { + type: "post"; // or? + essay: DiaryEssay; + seal: Seal; + revision: string; // number +} +export interface DiaryEssay extends Memo { + "kind-data": { diary: { image: string; title: string } }; +} +export interface PostsPage { + newer: string | null; // atom, no-dots + older: string | null; + total: number; + posts: WritGraph; +} +export type Cursor = string | null; +export interface WritPage { + newer: Cursor; + older: Cursor; + total: number; + writs: WritGraph; + prov?: WritGraph; +} +export interface DiaryGraph { + [id: string]: DiaryPost; +} +export interface ReplyGraph { + [id: string]: Reply; +} +export interface WritGraph { + [id: string]: Writ; +} +export interface Seal { + id: WritID; + reacts: Reacts; + replies: ReplyGraph; + meta: { + lastRepliers: Ship[]; + lastReply: number | null; //WritID | null; // ? + replyCount: number; + }; + time?: string; // chats have this, channels don't (...) +} +export interface ReplySeal { + id: string; + "parent-id": string; + reacts: Reacts; + time?: string; // always?? +} +export interface Memo { + author: Ship; + content: Content; + sent: number; // unix ts +} +export interface Essay extends Memo { + "kind-data": { chat: null } | { notice: null }; +} +export type Reacts = Record; +type WritID = string; // ship/123.123 + +export type Block = + | { cite: Cite } + | { image: ImageBlock } + | { header: { tag: string; content: Inline[] } } + | { listing: Listing } + | { rule: null } + | { code: { code: string; lang: string } }; + +export type Verse = { block: Block } | { inline: Inline[] }; +export type Content = Verse[]; + +export type Listing = + | { item: Inline[] } + | { list: { type: string; items: Listing[]; contents: Inline[] } }; +export type Cite = ChannelCite | GroupCite | DeskCite | BaitCite; +export interface ChannelCite { + chan: { + nest: `${App}/${Ship}/${string}`; + where: string; // "/msg/123.123" path in hoon, idgi yet + }; +} +export interface GroupCite { + group: string; // ship/term +} +export interface DeskCite { + desk: { + flag: string; // flag + where: string; // + }; +} +export interface BaitCite { + bait: { + group: string; // flag + graph: string; // flag + where: string; // + }; +} +export type App = "chat" | "diary" | "heap"; +export interface ImageBlock { + width: number; + height: number; + alt: string; + src: string; // url +} +export type Inline = + | string + | { italics: Inline[] } + | { bold: Inline[] } + | { blockquote: Inline[] } + | { strike: Inline[] } + | { code: string; lang: string } // not actually in the type, but it should + | { "inline-code": string } + | { ship: string } + | { tag: string } + | { link: { content: string; href: string } } + | { task: { checked: boolean; content: Inline[] } } + | { break: null }; + +// kinda custom but still +// +export interface Skein { + unread: boolean; + count: number; + top: { + button: null; + id: string; // @uv + con: Array; + wer: string; // path + time: number; + rope: { + channel: string; + desk: string; + group: string; + thread: string; + }; + }; + "ship-count": number; + time: number; +} + +export interface Brief { + uid: string; + title: string; + group: string; + count: number; + last: number; // date + "read-id": string; // ~ship/123.123.123 + icon: string; // url + cover: string; // url + desc: string; +} +export interface Briefs { + dms: Brief[]; + groups: Brief[]; + threads: Brief[]; + clubs: Brief[]; +} + +export interface NewPostUpdate { + set: { + type: "post"; // or? + essay: Essay; + seal: Seal; + }; +} +export interface ReplyMeta { + replyCount: number; + lastReply: number; // ts + lastRepliers: Ship[]; +} +export interface NewReplyUpdate { + reply: { + id: string; // atom, no dots + meta: ReplyMeta; + "r-reply": NewReplySet | NewReactUpdate; + }; +} +export interface NewReplySet { + set: Reply; +} +export interface NewReactUpdate { + reacts: Reacts; +} + +export type ChannelPendingUpdate = { + pending: { + id: { author: Ship; sent: number }; + pending: { + post: Essay; + }; + }; +}; +export type RPost = NewPostUpdate | NewReactUpdate | NewReplyUpdate; +export type ChanRPost = { + host: Ship; + name: string; + kind: ChannelType; + update: RPost; +}; +export interface ChannelPostUpdate { + post: { + id: string; // atom, no dots + "r-post": RPost; + }; +} +export type ChannelPermUpdate = { + perm: { + group: string; + writers: Ship[]; + }; +}; +export type ChannelCreateUpdate = { + create: { + group: string; + writers: Ship[]; + }; +}; +export interface ChannelUpdate { + nest: string; + response: + | ChannelPendingUpdate + | ChannelPostUpdate + | ChannelPermUpdate + | ChannelCreateUpdate; +} +export interface NewChatPostUpdate { + add: { + memo: Essay; + time: string; // atom, no dots + }; + id?: string; // ~ship/string, only on threads, to set the child, reply.id being the parent +} +export interface NewChatReactUpdate { + "add-react": { ship: Ship; react: string }; +} +export interface ChatUpdate { + id: WritID; + response: NewChatPostUpdate | NewChatReactUpdate | NewChatReplyUpdate; +} + +export interface NewChatReplyUpdate { + reply: { + meta: ReplyMeta; + id: string; // author/dottedID + delta: NewChatPostUpdate | NewChatReactUpdate; + }; +} + +// graph-store +type ID = string; +export interface Graph { + [keys: ID]: GraphStoreNode; +} +export interface GraphStoreNode { + post: GSPost; + children: Graph | null; +} +export type GSContent = any; +export interface GSPost { + author: Ship; + contents: GSContent[]; + "time-sent": number; + hash: string | null; + signatures: string[]; + index: string; +} +export interface GSKey { + name: string; + ship: Ship; +} +export interface AssociationGraph { + [key: string]: Association; +} +export interface Association { + metadata: Metadatum; + "app-name": "graph" | "groups"; + resource: string; // resource string + group: string; // same + groupName: string; // here we ourselves add the group title +} +export interface Metadatum { + preview: boolean; + vip: string; + title: string; + description: string; + creator: Ship; + picture: string; //URL + hidden: boolean; + config: MetadataConfig; + "date-created": string; + color: string; +} +type MetadataConfig = GroupConfig | GraphConfig; +export interface GroupConfig { + group: { + "app-name": "graph"; + resource: string; ///ship/~bacrys/pokur-14 + }; +} +export interface GraphConfig { + graph: GraphType; +} +export type GraphType = "chat" | "publish" | "link" | "post"; + +export interface GSResource { + entity: Ship; + name: string; +} + +export interface Contact { + p?: Ship; + nickname: string; + bio: string; + status: string; + color: string; + avatar: string | null; + cover: string | null; +} + +// responses +export interface Pals { + incoming: Record; + outgoing: Record; +} +export type Contacts = Record; + +export interface DisterApps { + ini: Record; +} +export type FlagString = `${Ship}/${string}`; +export type AppData = { + cass: { + da: string; // @da string + }; + image: string; + info: string; // description + license: string; + ship: Ship; + title: string; // dude + version: string; + website: string; + color: string; // @ux string; + desk: string; + hash: string; // @uv string; + href: { + glob: { + base: string; // desk name + "glob-reference": { + location: { + http: string; // URL, + // could be ames too I guess? + }; + hash: string; + }; + }; + }; +}; + +export type Gangs = Record; +export type GroupPreview = { + claim: null; // + invite: null; // + preview: { + secret: boolean; + time: number; + flag: FlagString; + cordon: { + shut: { + // suspect this is a whitelist/blacklist thing + pending: Ship[]; + ask: Ship[]; + }; + }; + meta: GroupMetadata; + }; +}; + +// %vitals + +interface Connected { + complete: "yes"; +} + +interface YetToCheck { + complete: "no-data"; +} + +interface NoDNS { + complete: "no-dns"; +} + +interface Crash { + complete: "crash"; + crash: string[][]; +} + +interface NoOurPlanet { + complete: "no-our-planet"; + "last-contact": number; +} + +interface NoOurGalaxy { + complete: "no-our-galaxy"; + "last-contact": number; +} + +interface NoSponsorHit { + complete: "no-sponsor-hit"; + ship: string; +} + +interface NoSponsorMiss { + complete: "no-sponsor-miss"; + ship: string; +} + +interface NoTheirGalaxy { + complete: "no-their-galaxy"; + "last-contact": number; +} + +export type ConnectionCompleteStatusKey = + | "yes" + | "crash" + | "no-data" + | "no-dns" + | "no-our-planet" + | "no-our-galaxy" + | "no-sponsor-hit" + | "no-sponsor-miss" + | "no-their-galaxy"; + +export interface CompleteStatus { + complete: ConnectionCompleteStatusKey; +} + +export type ConnectionCompleteStatus = + | Connected + | YetToCheck + | Crash + | NoDNS + | NoOurPlanet + | NoOurGalaxy + | NoSponsorHit + | NoSponsorMiss + | NoTheirGalaxy; + +export type ConnectionPendingStatusKey = + | "setting-up" + | "trying-dns" + | "trying-local" + | "trying-target" + | "trying-sponsor"; + +export type ConnectionPendingStatus = + | { + pending: Omit; + } + | { + pending: "trying-sponsor"; + ship: string; + }; + +export type ConnectionStatus = + | ConnectionCompleteStatus + | ConnectionPendingStatus; + +export interface ConnectionUpdate { + status: ConnectionStatus; + timestamp: number; +} + +export interface ConnectivityCheckOptions { + useStale?: boolean; + enabled?: boolean; + staleTime?: number; + waitToDisplay?: number; +} +export type ChatQuoteParams = { p: Ship; nest: string; id: string }; diff --git a/fe/src/logic/types.ts b/fe/src/logic/types.ts new file mode 100644 index 0000000..7b62643 --- /dev/null +++ b/fe/src/logic/types.ts @@ -0,0 +1,105 @@ +import { ChannelType, GroupMetadata, Inline } from "./types-tlon"; + +export type Site = { + sitename: string; + description: string; + groupname: string; + binding: string; + icon: string; + home: string; // home page markdown + css: string; + hidden: boolean; + apps: Apps; + "app-order": AppType[]; +}; +export type AppType = + | "blog" + | "chat" + | "forum" + | "radio" + | "wiki" + | `static/${string}`; +export type Apps = { + chat: string[]; + forum: string[]; + blog: string; + radio: boolean; + wiki: string; + static: Record; +}; +export const AppBunt: Apps = { + blog: "", + chat: [], + forum: [], + radio: false, + wiki: "", + static: {}, +}; +export const SiteBunt: Site = { + sitename: "lol", + description: "", + groupname: "lmao", + binding: "/lol", + icon: "", + home: "", + css: "", + hidden: false, + apps: AppBunt, + "app-order": [], +}; + +export type AppChoice = { type: AppType; name: string; id: number }; +export type Ship = `~${string};`; +export type RichMetadata = GroupMetadata & { + name: string; + host: Ship; + kind: ChannelType; +}; +export type Channels = { + chats: RichMetadata[]; + forums: RichMetadata[]; + blog: RichMetadata | null; +}; + +export const ChannelsBunt: Channels = { + chats: [], + forums: [], + blog: null, +}; + +export type Pikes = Record; +export type Pike = { + sync: Desk; + zest: "live" | "dead"; + wefts: any[]; //? + hash: string; +}; +export type Desk = { + ship: Ship; + desk: string; +}; +export type Paragraph = NotRetardedInline[]; +type NInline = NotRetardedInline; +export type NotRetardedInline = + | { text: string } + | { italics: Inline[] } + | { bold: Inline[] } + | { blockquote: Inline[] } + | { strike: Inline[] } + | { code: string; lang: string } // not actually in the type, but it should + | { "inline-code": string } + | { ship: string } + | { tag: string } + | { link: { content: string; href: string } } + | { task: { checked: boolean; content: Inline[] } } + | { break: null }; + +export type Wiki = { + host: Ship; + id: string; + title: string; + public: boolean; + pageCount: number; + mustLogin: boolean; + edited: number; +}; diff --git a/fe/src/logic/utils.ts b/fe/src/logic/utils.ts new file mode 100644 index 0000000..c4acc02 --- /dev/null +++ b/fe/src/logic/utils.ts @@ -0,0 +1,562 @@ +import type { + Apps, + Channels, + NotRetardedInline, + Paragraph, + Pikes, + Ship, +} from "./types"; +import { patp2dec, isValidPatp } from "./ob/co"; +import anyAscii from "any-ascii"; +import { Renderer, Token, marked } from "marked"; +import { RADIO_SHIP, REF_REGEX, SHIP_REGEX, WIKI_SHIP } from "./constants"; +import { unEscape } from "./tlon-helpers"; +import type { + GraphStoreNode, + AssociationGraph, + Association, + GSResource, + Graph, + Contacts, + Pals, + Contact, + Content, + Inline, +} from "./types-tlon"; + +export function addScheme(url: string) { + if (url.includes("localhost")) { + return `http://${url.replace("http://", "")}`; + } else { + return `https://${url.replace("http://", "")}`; + } +} + +export function easyCode(code: string) { + const string = code.replace(/-/g, ""); + const matches = string.match(/.{1,6}/g); + if (matches) return matches.join("-"); +} + +export function tilde(patp: Ship) { + if (patp[0] == "~") { + return patp; + } else { + return "~" + patp; + } +} + +export function color_to_hex(color: string) { + let hex = "#" + color.replace(".", "").replace("0x", "").toUpperCase(); + if (hex == "#0") { + hex = "#000000"; + } + return hex; +} + +export function date_diff(date: number | Date, type: "short" | "long") { + const now = new Date().getTime(); + const diff = now - new Date(date).getTime(); + if (type == "short") { + return to_string(diff / 1000); + } else { + return to_string_long(diff / 1000); + } +} + +function to_string(s: number) { + if (s < 60) { + return "now"; + } else if (s < 3600) { + return `${Math.ceil(s / 60)}m`; + } else if (s < 86400) { + return `${Math.ceil(s / 60 / 60)}h`; + } else if (s < 2678400) { + return `${Math.ceil(s / 60 / 60 / 24)}d`; + } else if (s < 32140800) { + return `${Math.ceil(s / 60 / 60 / 24 / 30)}mo`; + } else { + return `${Math.ceil(s / 60 / 60 / 24 / 30 / 12)}y`; + } +} + +function to_string_long(s: number) { + if (s < 60) { + return "right now"; + } else if (s < 3600) { + return `${Math.ceil(s / 60)} minutes ago`; + } else if (s < 86400) { + return `${Math.ceil(s / 60 / 60)} hours ago`; + } else if (s < 2678400) { + return `${Math.ceil(s / 60 / 60 / 24)} days ago`; + } else if (s < 32140800) { + return `${Math.ceil(s / 60 / 60 / 24 / 30)} months ago`; + } else { + return `${Math.ceil(s / 60 / 60 / 24 / 30 / 12)} years ago`; + } +} + +export function regexes() { + const IMAGE_REGEX = new RegExp(/(jpg|img|png|gif|tiff|jpeg|webp|webm|svg)$/i); + const AUDIO_REGEX = new RegExp(/(mp3|wav|ogg)$/i); + const VIDEO_REGEX = new RegExp(/(mov|mp4|ogv)$/i); + return { img: IMAGE_REGEX, aud: AUDIO_REGEX, vid: VIDEO_REGEX }; +} + +export function stringToSymbol(str: string) { + const ascii = anyAscii(str); + let result = ""; + for (let i = 0; i < ascii.length; i++) { + const n = ascii.charCodeAt(i); + if ((n >= 97 && n <= 122) || (n >= 48 && n <= 57)) { + result += ascii[i]; + } else if (n >= 65 && n <= 90) { + result += String.fromCharCode(n + 32); + } else { + result += "-"; + } + } + result = result.replace(/^[\-\d]+|\-+/g, "-"); + result = result.replace(/^\-+|\-+$/g, ""); + return result; +} +export function buildDM(author: Ship, recipient: Ship, contents: Content[]) { + const node: any = {}; + const point = patp2dec(recipient); + const index = `/${point}/${makeIndex()}`; + node[index] = { + children: null, + post: { + author: author, + contents: contents, + hash: null, + index: index, + signatures: [], + "time-sent": Date.now(), + }, + }; + return { + app: "dm-hook", + mark: "graph-update-3", + json: { + "add-nodes": { + resource: { name: "dm-inbox", ship: author }, + nodes: node, + }, + }, + }; +} + +export function buildChatPost( + author: Ship, + resource: GSResource, + c: Content[], +) { + const index = `/${makeIndex()}`; + return { + "add-nodes": { + resource: { name: resource.name, ship: resource.entity }, + nodes: { + [index]: { + children: null, + post: { + author: author, + contents: c, + hash: null, + index: index, + signatures: [], + "time-sent": Date.now(), + }, + }, + }, + }, + }; +} + +export function buildNotebookPost( + author: Ship, + resource: GSResource, + c: Content[], +) { + const index = `/${makeIndex()}`; + const node: GraphStoreNode = { + children: { + "1": { + post: { + author: author, + contents: [], + hash: null, + index: index + "/1", + signatures: [], + "time-sent": Date.now(), + }, + children: { + "1": { + children: null, + post: { + author: author, + contents: c, + hash: null, + index: index + "/1/1", + signatures: [], + "time-sent": Date.now(), + }, + }, + }, + }, + "2": { + children: null, + post: { + author: author, + contents: [], + hash: null, + index: index + "/2", + signatures: [], + "time-sent": Date.now(), + }, + }, + }, + post: { + author: author, + contents: [], + hash: null, + index: index, + signatures: [], + "time-sent": Date.now(), + }, + }; + const graph = { [index]: node }; + return { + "add-nodes": { + resource: { name: resource.name, ship: resource.entity }, + nodes: graph, + }, + }; +} +export function buildCollectionPost( + author: Ship, + resource: GSResource, + c: Content[], +) { + const index = `/${makeIndex()}`; + const node: GraphStoreNode = { + children: null, + post: { + author: author, + contents: c, + hash: null, + index: index, + signatures: [], + "time-sent": Date.now(), + }, + }; + const graph: Graph = { [index]: node }; + return { + "add-nodes": { + resource: { name: resource.name, ship: resource.entity }, + nodes: graph, + }, + }; +} + +export function makeIndex(): string { + const DA_UNIX_EPOCH = BigInt("170141184475152167957503069145530368000"); + const DA_SECOND = BigInt("18446744073709551616"); + const timeSinceEpoch = (BigInt(Date.now()) * DA_SECOND) / BigInt(1000); + return (DA_UNIX_EPOCH + timeSinceEpoch).toString(); +} +export function makeDottedIndex() { + const DA_UNIX_EPOCH = BigInt("170141184475152167957503069145530368000"); + const DA_SECOND = BigInt("18446744073709551616"); + const timeSinceEpoch = (BigInt(Date.now()) * DA_SECOND) / BigInt(1000); + const index = (DA_UNIX_EPOCH + timeSinceEpoch).toString(); + return index.replace(/\B(?=(\d{3})+(?!\d))/g, "."); +} + +export function nodeToText(n: GraphStoreNode): string { + const c = n.post.contents; + return c.reduce((acc, item) => { + if ("text" in item) return acc + item.text; + else if ("mention" in item) return acc + item.mention; + else return acc; + }, ""); +} + +export function nodesFromGraphUpdate(g: any): GraphStoreNode[] { + const nodes = g["graph-update"]["add-nodes"]["nodes"]; + return Object.keys(nodes).map((n) => nodes[n]); +} + +export function cleanMetadata(metadata: AssociationGraph): Association[] { + const all: Association[] = Object.values(metadata); + const graphs = all.filter((a) => a["app-name"] === "graph"); + return graphs.map((g) => { + const gn = `${g.group}/groups${g.group}`; + const gn2 = `${g.group}/graph${g.group}`; + const group = metadata[gn] || metadata[gn2]; + if (!group) console.log(g, "you lack metadata for this graph"); + const title = group ? group.metadata.title : "error"; + return { ...g, ...{ groupName: title } }; + }); +} + +export function abbreviateChat(s: string): string { + const plist = s.trim().split(" "); + if (isValidPatp(plist[0]) && plist.length > 1) { + return `${plist[0]} & ${plist.length - 1}+`; + } else if (s.length < 25) return s; + else return `${s.substring(0, 25)}...`; +} + +export function timestring(n: number): string { + const nn = new Date(n); + return nn.toTimeString().slice(0, 5); +} +export function wait(ms: number) { + return new Promise((resolve, _reject) => { + setTimeout(resolve, ms); + }); +} + +export function checkTilde(s: string) { + if (s[0] === "~") return s; + else return "~" + s; +} + +export function addDots(s: string, num: number): string { + const reversed = s.split("").reverse().join(""); + const reg = new RegExp(`.{${num}}`, "g"); + const withCommas = reversed.replace(reg, "$&."); + return withCommas.split("").reverse().join("").slice(1); +} +export function addDots5(s: string): string { + const reversed = s.split("").reverse().join(""); + const withCommas = reversed.replace(/.{5}/g, "$&."); + return withCommas.split("").reverse().join(""); +} +// TODO +export function isTwatterLink(s: string) { + const sp = s + .replace("https://", "") + .split("/") + .filter((s) => s); + return sp.length === 4 && sp[0] === "twitter.com" && sp[2] === "status"; +} +export const isSortugLink = (s: string) => !!s.match(REF_REGEX); + +export const markdownRenderer: Partial = { + // paragraph(content: any) { + // // console.log(content, "rendering") + // return content; + // }, + // text(text: string) { + // return text; + // }, + // codespan(code, lang) { + // console.log(code, "code"); + // console.log(lang, "lang"); + // return "" + // }, +}; + +export function auraToHex(s: string): string { + if (s.startsWith("0x")) { + let numbers = s.replace("0x", "").replace(".", ""); + while (numbers.length < 6) { + numbers = "0" + numbers; + } + return "#" + numbers; + } else if (s.startsWith("#")) return s; + else { + // console.log(s, "weird hex"); + return "black"; + } +} + +// default cursors +export function makeNewestIndex() { + const DA_UNIX_EPOCH = BigInt("170141184475152167957503069145530368000"); + const DA_SECOND = BigInt("18446744073709551616"); + const timeSinceEpoch = (BigInt(Date.now()) * DA_SECOND) / BigInt(1000); + return (DA_UNIX_EPOCH + timeSinceEpoch).toString(); +} +export const startCursor = makeNewestIndex(); +export const endCursor = "0"; + +export function displayCount(c: number): string { + if (c === 0) return ""; + else if (c < 1_000) return `${c}`; + else if (c >= 1_000 && c < 1_000_000) return `${Math.round(c / 1_00) / 10}K`; + else if (c >= 1_000_000) return `${Math.round(c / 100_000) / 10}M`; + else return ""; +} +export function isWhiteish(hex: string): boolean { + if (hex.indexOf("#") === 0) hex = hex.slice(1); + const r = parseInt(hex.slice(0, 2), 16); + const g = parseInt(hex.slice(2, 4), 16); + const b = parseInt(hex.slice(4, 6), 16); + return r > 200 && g > 200 && b > 200; +} + +export function localISOString(date: Date) { + const offset = new Date().getTimezoneOffset(); + const localts = date.getTime() - offset * 60_000; + return new Date(localts).toISOString().slice(0, 16); +} + +export function goback() { + window.history.back(); +} + +export function reverseRecord( + a: Record, +): Record { + return Object.entries(a).reduce((acc: any, [k, v]) => { + acc[v] = k; + return acc; + }, {}); +} + +function contactMatch(contact: Contact, input: string): boolean { + return ( + (contact.nickname || "").includes(input) || + (contact.avatar || "").includes(input) || + (contact.cover || "").includes(input) || + (contact.bio || "").includes(input) || + (contact.status || "").includes(input) || + (contact.color || "").includes(input) + ); +} + +export function getColorHex(color: string): string { + if (color.startsWith("0x")) + return `#${padString(stripFuckingDots(color), 6)}`; + else if (color.startsWith("#") && color.length === 7) return color; + else if (color.length === 6) return `#${color}`; + else { + console.log(color, "something weird with this color"); + return "#FFFFFF"; + } +} + +export function stripFuckingDots(hex: string) { + return hex.replace("0x", "").replaceAll(".", ""); +} +export function padString(s: string, size: number) { + if (s.length >= size) return s; + else return padString(`0${s}`, size); +} +export function isDark(hexColor: string): boolean { + const r = parseInt(hexColor.substring(1, 2), 16); + const g = parseInt(hexColor.substring(3, 5), 16); + const b = parseInt(hexColor.substring(5, 7), 16); + + const sr = r / 255; + const sg = g / 255; + const sb = b / 255; + const rSrgb = + sr <= 0.03928 ? sr / 12.92 : Math.pow((sr + 0.055) / 1.055, 2.4); + const gSrgb = + sg <= 0.03928 ? sg / 12.92 : Math.pow((sg + 0.055) / 1.055, 2.4); + const bSrgb = + sb <= 0.03928 ? sb / 12.92 : Math.pow((sb + 0.055) / 1.055, 2.4); + + // Calculate luminance + const luminance = 0.2126 * rSrgb + 0.7152 * gSrgb + 0.0722 * bSrgb; + return luminance < 0.12; +} + +export function checkIfClickedOutside( + e: React.MouseEvent, + el: HTMLElement, + close: any, +) { + e.stopPropagation(); + if (el.contains(e.currentTarget)) close(); +} + +export function enkebab(s: string) { + return anyAscii(s.trim()) + .toLowerCase() + .replace(/[^a-zA-Z0-9-\s]/g, "") + .replace(/\s+/g, "-"); +} + +export function generateRandomBase64(length: number) { + const bytes = new Uint8Array(length); + crypto.getRandomValues(bytes); + return btoa(String.fromCharCode(...bytes)) + .slice(0, 4) + .toLowerCase(); +} + +export function capitalize(s: string) { + return s.charAt(0).toUpperCase() + s.slice(1); +} + +export function retardedTlonTokens(tokens: Inline[]): Paragraph[] { + let ps: Paragraph[] = []; + ps.push([]); + for (const token of tokens) { + const currentP: NotRetardedInline[] = ps[ps.length - 1]; + if (typeof token === "string") currentP.push({ text: token }); + else if ("break" in token) ps.push([] as NotRetardedInline[]); + else if ("blockquote" in token) { + ps.push([token]); + ps.push([] as NotRetardedInline[]); + } else currentP.push(token); + } + return ps; +} + +export async function doubleCheckApps( + apps: Apps, + chans: Channels, + pikes: Pikes, +): Promise { + const blog = chans.blog && apps.blog ? chans.blog.name : apps.blog; + const chat = chans.chats.map((c) => c.title); + const forum = chans.forums.map((c) => c.title); + const radio = pikes?.radio?.sync?.ship === RADIO_SHIP && apps.radio; + + return { blog, chat, forum, radio, wiki: apps.wiki, static: apps.static }; +} +export async function checkWikis(pikes: Pikes): Promise { + const installed = pikes?.wiki?.sync?.ship === WIKI_SHIP; + if (!installed) return []; + else { + // const wikires = await fetch("/wiki"); // wtf man give me scry endpoints + // const wikires = await fetch("http://localhost:8081/wiki"); // wtf man give me scry endpoints + // const html = await wikires.text(); + // const parser = new DOMParser(); + // const parsed = parser.parseFromString(html, "text/html"); + // console.log(parsed, "fucking wiki frontend"); + return []; + } +} +export async function waitUntil(condition: boolean) { + return await new Promise((resolve) => { + const interval = setInterval(() => { + if (condition) { + resolve(true); + clearInterval(interval); + } + }, 1000); + }); +} + +export async function delay(ms: number) { + // return await for better async stack trace support in case of errors. + return await new Promise((resolve) => setTimeout(resolve, ms)); +} +export function isValidHttpUrl(string: string) { + let url; + + try { + url = new URL(string); + } catch (_) { + return false; + } + + return url.protocol === "http:" || url.protocol === "https:"; +} diff --git a/fe/src/main.tsx b/fe/src/main.tsx new file mode 100644 index 0000000..7b4cc34 --- /dev/null +++ b/fe/src/main.tsx @@ -0,0 +1,15 @@ +// import "@fontsource/roboto/300.css"; +// import "@fontsource/roboto/400.css"; +// import "@fontsource/roboto/500.css"; +// import "@fontsource/roboto/700.css"; +import "@fontsource/inter/400.css"; +import "@fontsource/inter/700.css"; +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; +import App from "./App.tsx"; + +createRoot(document.getElementById("root")!).render( + + + , +); diff --git a/fe/src/modals/Example.tsx b/fe/src/modals/Example.tsx new file mode 100644 index 0000000..0edba2d --- /dev/null +++ b/fe/src/modals/Example.tsx @@ -0,0 +1,43 @@ +import * as React from 'react'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import Typography from '@mui/material/Typography'; +import Modal from '@mui/material/Modal'; +import { AddAppModal } from './Modal'; +import { SiteBunt } from '../logic/types'; +// import { ColorToggle, ThemeTest } from "../ui/theme"; + +const style = { + position: 'absolute' as 'absolute', + top: '50%', + left: '50%', + transform: 'translate(-50%, -50%)', + width: 400, + bgcolor: 'background.paper', + border: '2px solid #000', + boxShadow: 24, + p: 4, +}; + +export default function BasicModal() { + const [open, setOpen] = React.useState(false); + const handleOpen = () => setOpen(true); + + function handleClose(e: any, r: any) { + console.log(e); + console.log(r); + } + return ( + + + + + + + ); +} diff --git a/fe/src/modals/Modal.tsx b/fe/src/modals/Modal.tsx new file mode 100644 index 0000000..24ff547 --- /dev/null +++ b/fe/src/modals/Modal.tsx @@ -0,0 +1,289 @@ +import { ReactNode, useEffect, useRef, useState } from "react"; +import { useLocation, Link } from "wouter"; +import { + Alert, + Button, + TextField, + Typography, + Box, + Container, + AvatarGroup, + Stack, + CardContent, + CardActions, + Dialog, + DialogTitle, + DialogActions, + ButtonPropsColorOverrides, +} from "@mui/material"; +import useStore from "../logic/store"; +import { Site, AppType, Ship } from "../logic/types"; +import { tokenize } from "../logic/tlon-helpers"; +import { addDots, capitalize } from "../logic/utils"; +import { Row, Scrollable, WholeFlex } from "../ui/Components"; + +export default function MuhModal({ children }: { children: ReactNode }) { + const { setModal } = useStore(["setModal"]); + function close(e: any, reason: any) { + setModal(null); + } + function onKey(event: any) { + if (event.key === "Escape") setModal(null); + } + useEffect(() => { + document.addEventListener("keyup", onKey); + return () => { + document.removeEventListener("keyup", onKey); + }; + }, [children]); + + function clickAway(e: React.MouseEvent) { + e.stopPropagation(); + if (!modalRef.current || !modalRef.current.contains(e.target as any)) + setModal(null); + } + const modalRef = useRef(null); + const bgStyle = { + position: "fixed" as "fixed", + left: 0, + top: 0, + width: "100vw", + height: "100vh", + backgroundColor: "rgb(0, 0, 0, 0.7)", + zIndex: 0, + }; + const modalStyle = { + position: "fixed" as "fixed", + transform: "translate(-50%, -50%)", + top: "50%", + left: "50%", + backgroundColor: "white", + }; + return ( + + ); +} +export function StaticPageModal({ + name, + text, + site, +}: { + name: string; + text: string; + site: Site; +}) { + useEffect(() => { + setTitle(name); + setInput(text); + const tit = localStorage.getItem("staticPageDraftTitle"); + if (tit) setTitle(tit); + const inp = localStorage.getItem("staticPageDraftInput"); + if (inp) setInput(inp); + }, []); + const { sync, setModal, dashIO } = useStore(["sync", "setModal", "dashIO"]); + const [location, navigate] = useLocation(); + const [title, setTitle] = useState(""); + const [input, setInput] = useState(""); + const [error, setError] = useState(""); + const { createSite } = dashIO(); + async function save() { + localStorage.removeItem("staticPageDraftTitle"); + localStorage.removeItem("staticPageDraftInput"); + const stat = { ...site.apps.static, [title]: input }; + const apps = { ...site.apps, static: stat }; + const ns = { ...site, apps }; + console.log(ns, "ns"); + await createSite(ns); + sync().then((_) => setModal(null)); + } + async function del() { + const { [name]: _, ...rest } = site.apps.static; + const apps = { ...site.apps, static: rest }; + const ns = { ...site, apps }; + await createSite(ns); + sync().then((_) => setModal(null)); + } + useEffect(() => { + console.log("setting", title); + if (title) localStorage.setItem("staticPageDraftTitle", title); + }, [title]); + useEffect(() => { + if (input) localStorage.setItem("staticPageDraftInput", input); + }, [input]); + return ( + + + + + Static Page Editor + + + + setTitle(e.currentTarget.value)} + /> + setInput(e.currentTarget.value)} + /> + + + + + + ); +} + +export function AddAppModal({ kind, site }: { kind: AppType; site: Site }) { + // weird that this has to be written manually + const style = { + container: { + width: "70vw", + bgcolor: "background.paper", + border: "2px solid #000", + boxShadow: 24, + py: 3, + px: 4, + height: "90vh", + }, + coverImg: { + border: "1px solid primary.dark", + width: "100%", + minHeight: "3rem", + display: "block", + marginTop: "2ch", + }, + }; + const { sync, setModal, dashIO } = useStore(["sync", "setModal", "dashIO"]); + const [location, navigate] = useLocation(); + const [title, setTitle] = useState(""); + const [desc, setDesc] = useState(""); + const [image, setImg] = useState(""); + const [error, setError] = useState(""); + + // TODO add automated name change logic if site already exists + async function create() { + const { createBlog, createChannel } = dashIO(); + if (!title) { + setError("name can't be empty"); + return; + } + const taip = kind === "chat" ? "chat" : kind === "forum" ? "diary" : ""; + const res = + kind === "blog" + ? await createBlog(site.groupname, title, desc) + : await createChannel(site.groupname, title, desc, taip); + if (res) { + await sync(); + setModal(null); + console.log(res, "res"); + } + } + return ( + + + Add {capitalize(kind)} + + + {error && {error}.} + + setTitle(e.currentTarget.value)} + /> + setDesc(e.currentTarget.value)} + /> + {kind === "blog" || kind === "forum" ? ( + + setImg(e.currentTarget.value)} + /> + + + ) : ( + <> + )} + + + + + + + ); +} + +export function ConfirmationModal({ + fun, + color, + text, +}: { + text: string; + color: any; + fun: any; +}) { + const { setModal } = useStore(["setModal"]); + return ( + + Are you sure? + + + + + + ); +} diff --git a/fe/src/ui/Components.tsx b/fe/src/ui/Components.tsx new file mode 100644 index 0000000..4b3594b --- /dev/null +++ b/fe/src/ui/Components.tsx @@ -0,0 +1,111 @@ +import { Box, Card, CircularProgress, SxProps, Theme } from '@mui/material'; +import { ReactNode } from 'react'; + +export function WholeFlex({ + children, + sx, +}: { + sx?: SxProps; + children: ReactNode; +}) { + const style: any = { + display: 'flex', + flexDirection: 'column', + height: '100%', + ...sx, + }; + return {children}; +} + +export const styles = { + steady: { + overflow: 'hidden', + }, +}; + +export function Flex({ + sx, + children, + dir = 'row', + gap = '1rem', +}: { + sx?: SxProps; + children: ReactNode; + dir?: 'row' | 'column'; + gap?: string; +}) { + const styl: any = { display: 'flex', flexDirection: dir, gap, ...sx }; + return {children}; +} +export function Row({ sx, children }: { sx?: SxProps; children: ReactNode }) { + const styl: any = { ...sx, display: 'flex' }; + return {children}; +} +export function SpreadRow({ + children, + sx, +}: { + sx?: SxProps; + children: ReactNode; +}) { + const styl: any = { ...sx, display: 'flex', justifyContent: 'space-between' }; + return {children}; +} +export function Centered({ + children, + y = false, + sx, + fixed = false, +}: { + y?: boolean; + fixed?: boolean; + sx?: SxProps; + children: ReactNode; +}) { + if (!y) { + return ( + + {children} + + ); + } else { + const position = fixed ? 'fixed' : 'absolute'; + const styles = y + ? { + transform: 'translate(-50%, -50%)', + top: '50%', + left: '50%', + } + : { transform: 'translateX(-50%)', left: '50%' }; + + const styl: any = { position, ...styles, ...sx }; + return {children}; + } +} + +export function Scrollable({ + children, + x = false, + sx, +}: { + x?: boolean; + sx?: SxProps; + children: ReactNode; +}) { + const xstyles = x ? { overflowX: 'auto' } : {}; + const styles: any = { ...sx, ...xstyles, overflowY: 'auto' }; + return {children}; +} + +export function LoadingScreen() { + return ( + + + + + +

      Syncing with your Urbit...

      +
      +
      + ); +} diff --git a/fe/src/ui/Drag.tsx b/fe/src/ui/Drag.tsx new file mode 100644 index 0000000..c2be8b7 --- /dev/null +++ b/fe/src/ui/Drag.tsx @@ -0,0 +1,96 @@ +import { + DragDropContext, + Draggable, + DraggableProvided, + DraggableRubric, + DraggableStateSnapshot, + Droppable, + DropResult, +} from "@hello-pangea/dnd"; +import { useEffect, useState } from "react"; +import { AppType } from "../logic/types"; +import { useTheme } from "@mui/material"; + +export default DragContainer; +function DragContainer({ + apps, + buildCard, + onEnd, +}: { + apps: AppType[]; + buildCard: Function; + onEnd: (d: DropResult) => void; +}) { + useEffect(() => { + setItems(apps); + }, [apps]); + // fake data generator + const baseItems = ["blog", "chat", "forum", "radio", "wiki"]; + const theme = useTheme(); + + // a little function to help us with reordering the result + + const grid = 5; + + const getItemStyle = (isDragging: boolean, draggableStyle: any) => ({ + // some basic styles to make the items look a bit nicer + userSelect: "none", + margin: `0 ${grid * 2}px 0 0`, + + // change background colour if dragging + background: isDragging ? theme.palette.warning.light : "grey", + + // styles we need to apply on draggables + ...draggableStyle, + }); + + const getListStyle = (isDraggingOver: boolean) => ({ + background: isDraggingOver ? theme.palette.secondary.light : "grey", + display: "flex", + padding: grid, + overflow: "auto", + height: "100%", + }); + + const [items, setItems] = useState(baseItems); + + // Normally you would want to split things out into separate components. + // But in this example everything is just done in one place for simplicity + return ( + + + {(provided, snapshot) => ( +
      + {items.map((item, index) => ( + + {(provided, snapshot) => ( +
      + {buildCard(item)} +
      + )} +
      + ))} + {provided.placeholder} +
      + )} +
      +
      + ); +} diff --git a/fe/src/ui/Sigil.tsx b/fe/src/ui/Sigil.tsx new file mode 100644 index 0000000..ecb4f56 --- /dev/null +++ b/fe/src/ui/Sigil.tsx @@ -0,0 +1,49 @@ +import { sigil, reactRenderer } from './sigil-ts'; +import { isValidPatp } from '../logic/ob/co'; +import comet from '../assets/icons/comet.svg'; +import { auraToHex } from '../logic/utils'; + +interface SigilProps { + patp: string; + size: number; + color?: string; +} + +const Sigil = (props: SigilProps) => { + const color = props.color ? auraToHex(props.color) : 'black'; + if (!isValidPatp(props.patp)) return
      X
      ; + else if (props.patp.length > 28) + return ( + + ); + else if (props.patp.length > 15) + // moons + return ( + <> + {sigil({ + patp: props.patp.substring(props.patp.length - 13), + renderer: reactRenderer, + size: props.size, + colors: ['grey', 'white'], + })} + + ); + else + return ( + <> + {sigil({ + patp: props.patp, + renderer: reactRenderer, + size: props.size, + colors: [color, 'white'], + })} + + ); +}; + +export default Sigil; diff --git a/fe/src/ui/shared-theme/AppTheme.tsx b/fe/src/ui/shared-theme/AppTheme.tsx new file mode 100644 index 0000000..c26d206 --- /dev/null +++ b/fe/src/ui/shared-theme/AppTheme.tsx @@ -0,0 +1,58 @@ +import * as React from 'react'; +import { ThemeProvider, createTheme, responsiveFontSizes } from '@mui/material/styles'; +import type { ThemeOptions } from '@mui/material/styles'; +import { inputsCustomizations } from './customizations/inputs'; +import { dataDisplayCustomizations } from './customizations/dataDisplay'; +import { feedbackCustomizations } from './customizations/feedback'; +import { navigationCustomizations } from './customizations/navigation'; +import { surfacesCustomizations } from './customizations/surfaces'; +import { colorSchemes, typography, shadows, shape } from './themePrimitives'; + +interface AppThemeProps { + children: React.ReactNode; + /** + * This is for the docs site. You can ignore it or remove it. + */ + disableCustomTheme?: boolean; + themeComponents?: ThemeOptions['components']; +} + +export default function AppTheme({ + children, + disableCustomTheme, + themeComponents, +}: AppThemeProps) { + // Mmm hope this works + let t1 = createTheme({ + // For more details about CSS variables configuration, see https://mui.com/material-ui/customization/css-theme-variables/configuration/ + cssVariables: { + colorSchemeSelector: 'data-mui-color-scheme', + cssVarPrefix: 'template', + }, + colorSchemes, // Recently added in v6 for building light & dark mode app, see https://mui.com/material-ui/customization/palette/#color-schemes + typography, + shadows, + shape, + components: { + ...inputsCustomizations, + ...dataDisplayCustomizations, + ...feedbackCustomizations, + ...navigationCustomizations, + ...surfacesCustomizations, + ...themeComponents, + }, + }); + t1 = responsiveFontSizes(t1, {}); + t1.palette.warning; + const theme = React.useMemo(() => { + return disableCustomTheme ? {} : t1; + }, [disableCustomTheme, themeComponents]); + if (disableCustomTheme) { + return {children}; + } + return ( + + {children} + + ); +} diff --git a/fe/src/ui/shared-theme/ColorModeIconDropdown.tsx b/fe/src/ui/shared-theme/ColorModeIconDropdown.tsx new file mode 100644 index 0000000..2b76bb3 --- /dev/null +++ b/fe/src/ui/shared-theme/ColorModeIconDropdown.tsx @@ -0,0 +1,88 @@ +import * as React from 'react'; +import DarkModeIcon from '@mui/icons-material/DarkModeOutlined'; +import LightModeIcon from '@mui/icons-material/LightModeOutlined'; +import Box from '@mui/material/Box'; +import IconButton from '@mui/material/IconButton'; +import Menu from '@mui/material/Menu'; +import MenuItem from '@mui/material/MenuItem'; +import { useColorScheme } from '@mui/material/styles'; + +export default function ColorModeIconDropdown() { + const { mode, systemMode, setMode } = useColorScheme(); + const [anchorEl, setAnchorEl] = React.useState(null); + const open = Boolean(anchorEl); + // TODO this is actually useful too + const handleClick = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + const handleClose = () => { + setAnchorEl(null); + }; + const handleMode = (targetMode: 'system' | 'light' | 'dark') => () => { + setMode(targetMode); + handleClose(); + }; + if (!mode) { + return ( + ({ + verticalAlign: 'bottom', + display: 'inline-flex', + width: '2.25rem', + height: '2.25rem', + borderRadius: (theme.vars || theme).shape.borderRadius, + border: '1px solid', + borderColor: (theme.vars || theme).palette.divider, + })} + /> + ); + } + const resolvedMode = (systemMode || mode) as 'light' | 'dark'; + const icon = { + light: , + dark: , + }[resolvedMode]; + return ( + + + {icon} + + + + System + + + Light + + + Dark + + + + ); +} diff --git a/fe/src/ui/shared-theme/ColorModeSelect.tsx b/fe/src/ui/shared-theme/ColorModeSelect.tsx new file mode 100644 index 0000000..4bb20df --- /dev/null +++ b/fe/src/ui/shared-theme/ColorModeSelect.tsx @@ -0,0 +1,26 @@ +import * as React from 'react'; +import { useColorScheme } from '@mui/material/styles'; +import MenuItem from '@mui/material/MenuItem'; +import Select, { SelectProps } from '@mui/material/Select'; + +export default function ColorModeSelect(props: SelectProps) { + const { mode, setMode } = useColorScheme(); + if (!mode) { + return null; + } + return ( + + ); +} diff --git a/fe/src/ui/shared-theme/customizations/dataDisplay.tsx b/fe/src/ui/shared-theme/customizations/dataDisplay.tsx new file mode 100644 index 0000000..b6b2b46 --- /dev/null +++ b/fe/src/ui/shared-theme/customizations/dataDisplay.tsx @@ -0,0 +1,233 @@ +import { Theme, alpha, Components } from '@mui/material/styles'; +import { svgIconClasses } from '@mui/material/SvgIcon'; +import { typographyClasses } from '@mui/material/Typography'; +import { buttonBaseClasses } from '@mui/material/ButtonBase'; +import { chipClasses } from '@mui/material/Chip'; +import { iconButtonClasses } from '@mui/material/IconButton'; +import { gray, red, green } from '../themePrimitives'; + +/* eslint-disable import/prefer-default-export */ +export const dataDisplayCustomizations: Components = { + MuiList: { + styleOverrides: { + root: { + padding: '8px', + display: 'flex', + flexDirection: 'column', + gap: 0, + }, + }, + }, + MuiListItem: { + styleOverrides: { + root: ({ theme }) => ({ + [`& .${svgIconClasses.root}`]: { + width: '1rem', + height: '1rem', + color: (theme.vars || theme).palette.text.secondary, + }, + [`& .${typographyClasses.root}`]: { + fontWeight: 500, + }, + [`& .${buttonBaseClasses.root}`]: { + display: 'flex', + gap: 8, + padding: '2px 8px', + borderRadius: (theme.vars || theme).shape.borderRadius, + opacity: 0.7, + '&.Mui-selected': { + opacity: 1, + backgroundColor: alpha(theme.palette.action.selected, 0.3), + [`& .${svgIconClasses.root}`]: { + color: (theme.vars || theme).palette.text.primary, + }, + '&:focus-visible': { + backgroundColor: alpha(theme.palette.action.selected, 0.3), + }, + '&:hover': { + backgroundColor: alpha(theme.palette.action.selected, 0.5), + }, + }, + '&:focus-visible': { + backgroundColor: 'transparent', + }, + }, + }), + }, + }, + MuiListItemText: { + styleOverrides: { + primary: ({ theme }) => ({ + fontSize: theme.typography.body2.fontSize, + fontWeight: 500, + lineHeight: theme.typography.body2.lineHeight, + }), + secondary: ({ theme }) => ({ + fontSize: theme.typography.caption.fontSize, + lineHeight: theme.typography.caption.lineHeight, + }), + }, + }, + MuiListSubheader: { + styleOverrides: { + root: ({ theme }) => ({ + backgroundColor: 'transparent', + padding: '4px 8px', + fontSize: theme.typography.caption.fontSize, + fontWeight: 500, + lineHeight: theme.typography.caption.lineHeight, + }), + }, + }, + MuiListItemIcon: { + styleOverrides: { + root: { + minWidth: 0, + }, + }, + }, + MuiChip: { + defaultProps: { + size: 'small', + }, + styleOverrides: { + root: ({ theme }) => ({ + border: '1px solid', + borderRadius: '999px', + [`& .${chipClasses.label}`]: { + fontWeight: 600, + }, + variants: [ + { + props: { + color: 'default', + }, + style: { + borderColor: gray[200], + backgroundColor: gray[100], + [`& .${chipClasses.label}`]: { + color: gray[500], + }, + [`& .${chipClasses.icon}`]: { + color: gray[500], + }, + ...theme.applyStyles('dark', { + borderColor: gray[700], + backgroundColor: gray[800], + [`& .${chipClasses.label}`]: { + color: gray[300], + }, + [`& .${chipClasses.icon}`]: { + color: gray[300], + }, + }), + }, + }, + { + props: { + color: 'success', + }, + style: { + borderColor: green[200], + backgroundColor: green[50], + [`& .${chipClasses.label}`]: { + color: green[500], + }, + [`& .${chipClasses.icon}`]: { + color: green[500], + }, + ...theme.applyStyles('dark', { + borderColor: green[800], + backgroundColor: green[900], + [`& .${chipClasses.label}`]: { + color: green[300], + }, + [`& .${chipClasses.icon}`]: { + color: green[300], + }, + }), + }, + }, + { + props: { + color: 'error', + }, + style: { + borderColor: red[100], + backgroundColor: red[50], + [`& .${chipClasses.label}`]: { + color: red[500], + }, + [`& .${chipClasses.icon}`]: { + color: red[500], + }, + ...theme.applyStyles('dark', { + borderColor: red[800], + backgroundColor: red[900], + [`& .${chipClasses.label}`]: { + color: red[200], + }, + [`& .${chipClasses.icon}`]: { + color: red[300], + }, + }), + }, + }, + { + props: { size: 'small' }, + style: { + maxHeight: 20, + [`& .${chipClasses.label}`]: { + fontSize: theme.typography.caption.fontSize, + }, + [`& .${svgIconClasses.root}`]: { + fontSize: theme.typography.caption.fontSize, + }, + }, + }, + { + props: { size: 'medium' }, + style: { + [`& .${chipClasses.label}`]: { + fontSize: theme.typography.caption.fontSize, + }, + }, + }, + ], + }), + }, + }, + MuiTablePagination: { + styleOverrides: { + actions: { + display: 'flex', + gap: 8, + marginRight: 6, + [`& .${iconButtonClasses.root}`]: { + minWidth: 0, + width: 36, + height: 36, + }, + }, + }, + }, + MuiIcon: { + defaultProps: { + fontSize: 'small', + }, + styleOverrides: { + root: { + variants: [ + { + props: { + fontSize: 'small', + }, + style: { + fontSize: '1rem', + }, + }, + ], + }, + }, + }, +}; diff --git a/fe/src/ui/shared-theme/customizations/feedback.tsx b/fe/src/ui/shared-theme/customizations/feedback.tsx new file mode 100644 index 0000000..6d475c9 --- /dev/null +++ b/fe/src/ui/shared-theme/customizations/feedback.tsx @@ -0,0 +1,46 @@ +import { Theme, alpha, Components } from '@mui/material/styles'; +import { gray, orange } from '../themePrimitives'; + +/* eslint-disable import/prefer-default-export */ +export const feedbackCustomizations: Components = { + MuiAlert: { + styleOverrides: { + root: ({ theme }) => ({ + borderRadius: 10, + backgroundColor: orange[100], + color: (theme.vars || theme).palette.text.primary, + border: `1px solid ${alpha(orange[300], 0.5)}`, + '& .MuiAlert-icon': { + color: orange[500], + }, + ...theme.applyStyles('dark', { + backgroundColor: `${alpha(orange[900], 0.5)}`, + border: `1px solid ${alpha(orange[800], 0.5)}`, + }), + }), + }, + }, + MuiDialog: { + styleOverrides: { + root: ({ theme }) => ({ + '& .MuiDialog-paper': { + borderRadius: '10px', + border: '1px solid', + borderColor: (theme.vars || theme).palette.divider, + }, + }), + }, + }, + MuiLinearProgress: { + styleOverrides: { + root: ({ theme }) => ({ + height: 8, + borderRadius: 8, + backgroundColor: gray[200], + ...theme.applyStyles('dark', { + backgroundColor: gray[800], + }), + }), + }, + }, +}; diff --git a/fe/src/ui/shared-theme/customizations/inputs.tsx b/fe/src/ui/shared-theme/customizations/inputs.tsx new file mode 100644 index 0000000..b384563 --- /dev/null +++ b/fe/src/ui/shared-theme/customizations/inputs.tsx @@ -0,0 +1,445 @@ +import * as React from 'react'; +import { alpha, Theme, Components } from '@mui/material/styles'; +import { outlinedInputClasses } from '@mui/material/OutlinedInput'; +import { svgIconClasses } from '@mui/material/SvgIcon'; +import { toggleButtonGroupClasses } from '@mui/material/ToggleButtonGroup'; +import { toggleButtonClasses } from '@mui/material/ToggleButton'; +import CheckBoxOutlineBlankRoundedIcon from '@mui/icons-material/CheckBoxOutlineBlankRounded'; +import CheckRoundedIcon from '@mui/icons-material/CheckRounded'; +import RemoveRoundedIcon from '@mui/icons-material/RemoveRounded'; +import { gray, brand } from '../themePrimitives'; + +/* eslint-disable import/prefer-default-export */ +export const inputsCustomizations: Components = { + MuiButtonBase: { + defaultProps: { + disableTouchRipple: true, + disableRipple: true, + }, + styleOverrides: { + root: ({ theme }) => ({ + boxSizing: 'border-box', + transition: 'all 100ms ease-in', + '&:focus-visible': { + outline: `3px solid ${alpha(theme.palette.primary.main, 0.5)}`, + outlineOffset: '2px', + }, + }), + }, + }, + MuiButton: { + styleOverrides: { + root: ({ theme }) => ({ + boxShadow: 'none', + borderRadius: (theme.vars || theme).shape.borderRadius, + textTransform: 'none', + variants: [ + { + props: { + size: 'small', + }, + style: { + height: '2.25rem', + padding: '8px 12px', + }, + }, + { + props: { + size: 'medium', + }, + style: { + height: '2.5rem', // 40px + }, + }, + { + props: { + color: 'primary', + variant: 'contained', + }, + style: { + color: 'white', + backgroundColor: gray[900], + backgroundImage: `linear-gradient(to bottom, ${gray[700]}, ${gray[800]})`, + boxShadow: `inset 0 1px 0 ${gray[600]}, inset 0 -1px 0 1px hsl(220, 0%, 0%)`, + border: `1px solid ${gray[700]}`, + '&:hover': { + backgroundImage: 'none', + backgroundColor: gray[700], + boxShadow: 'none', + }, + '&:active': { + backgroundColor: gray[800], + }, + ...theme.applyStyles('dark', { + color: 'black', + backgroundColor: gray[50], + backgroundImage: `linear-gradient(to bottom, ${gray[100]}, ${gray[50]})`, + boxShadow: 'inset 0 -1px 0 hsl(220, 30%, 80%)', + border: `1px solid ${gray[50]}`, + '&:hover': { + backgroundImage: 'none', + backgroundColor: gray[300], + boxShadow: 'none', + }, + '&:active': { + backgroundColor: gray[400], + }, + }), + }, + }, + { + props: { + color: 'secondary', + variant: 'contained', + }, + style: { + color: 'white', + backgroundColor: brand[300], + backgroundImage: `linear-gradient(to bottom, ${alpha(brand[400], 0.8)}, ${brand[500]})`, + boxShadow: `inset 0 2px 0 ${alpha(brand[200], 0.2)}, inset 0 -2px 0 ${alpha(brand[700], 0.4)}`, + border: `1px solid ${brand[500]}`, + '&:hover': { + backgroundColor: brand[700], + boxShadow: 'none', + }, + '&:active': { + backgroundColor: brand[700], + backgroundImage: 'none', + }, + }, + }, + { + props: { + variant: 'outlined', + }, + style: { + color: (theme.vars || theme).palette.text.primary, + border: '1px solid', + borderColor: gray[200], + backgroundColor: alpha(gray[50], 0.3), + '&:hover': { + backgroundColor: gray[100], + borderColor: gray[300], + }, + '&:active': { + backgroundColor: gray[200], + }, + ...theme.applyStyles('dark', { + backgroundColor: gray[800], + borderColor: gray[700], + + '&:hover': { + backgroundColor: gray[900], + borderColor: gray[600], + }, + '&:active': { + backgroundColor: gray[900], + }, + }), + }, + }, + { + props: { + color: 'secondary', + variant: 'outlined', + }, + style: { + color: brand[700], + border: '1px solid', + borderColor: brand[200], + backgroundColor: brand[50], + '&:hover': { + backgroundColor: brand[100], + borderColor: brand[400], + }, + '&:active': { + backgroundColor: alpha(brand[200], 0.7), + }, + ...theme.applyStyles('dark', { + color: brand[50], + border: '1px solid', + borderColor: brand[900], + backgroundColor: alpha(brand[900], 0.3), + '&:hover': { + borderColor: brand[700], + backgroundColor: alpha(brand[900], 0.6), + }, + '&:active': { + backgroundColor: alpha(brand[900], 0.5), + }, + }), + }, + }, + { + props: { + variant: 'text', + }, + style: { + color: gray[600], + '&:hover': { + backgroundColor: gray[100], + }, + '&:active': { + backgroundColor: gray[200], + }, + ...theme.applyStyles('dark', { + color: gray[50], + '&:hover': { + backgroundColor: gray[700], + }, + '&:active': { + backgroundColor: alpha(gray[700], 0.7), + }, + }), + }, + }, + { + props: { + color: 'secondary', + variant: 'text', + }, + style: { + color: brand[700], + '&:hover': { + backgroundColor: alpha(brand[100], 0.5), + }, + '&:active': { + backgroundColor: alpha(brand[200], 0.7), + }, + ...theme.applyStyles('dark', { + color: brand[100], + '&:hover': { + backgroundColor: alpha(brand[900], 0.5), + }, + '&:active': { + backgroundColor: alpha(brand[900], 0.3), + }, + }), + }, + }, + ], + }), + }, + }, + MuiIconButton: { + styleOverrides: { + root: ({ theme }) => ({ + boxShadow: 'none', + borderRadius: (theme.vars || theme).shape.borderRadius, + textTransform: 'none', + fontWeight: theme.typography.fontWeightMedium, + letterSpacing: 0, + color: (theme.vars || theme).palette.text.primary, + border: '1px solid ', + borderColor: gray[200], + backgroundColor: alpha(gray[50], 0.3), + '&:hover': { + backgroundColor: gray[100], + borderColor: gray[300], + }, + '&:active': { + backgroundColor: gray[200], + }, + ...theme.applyStyles('dark', { + backgroundColor: gray[800], + borderColor: gray[700], + '&:hover': { + backgroundColor: gray[900], + borderColor: gray[600], + }, + '&:active': { + backgroundColor: gray[900], + }, + }), + variants: [ + { + props: { + size: 'small', + }, + style: { + width: '2.25rem', + height: '2.25rem', + padding: '0.25rem', + [`& .${svgIconClasses.root}`]: { fontSize: '1rem' }, + }, + }, + { + props: { + size: 'medium', + }, + style: { + width: '2.5rem', + height: '2.5rem', + }, + }, + ], + }), + }, + }, + MuiToggleButtonGroup: { + styleOverrides: { + root: ({ theme }) => ({ + borderRadius: '10px', + boxShadow: `0 4px 16px ${alpha(gray[400], 0.2)}`, + [`& .${toggleButtonGroupClasses.selected}`]: { + color: brand[500], + }, + ...theme.applyStyles('dark', { + [`& .${toggleButtonGroupClasses.selected}`]: { + color: '#fff', + }, + boxShadow: `0 4px 16px ${alpha(brand[700], 0.5)}`, + }), + }), + }, + }, + MuiToggleButton: { + styleOverrides: { + root: ({ theme }) => ({ + padding: '12px 16px', + textTransform: 'none', + borderRadius: '10px', + fontWeight: 500, + ...theme.applyStyles('dark', { + color: gray[400], + boxShadow: '0 4px 16px rgba(0, 0, 0, 0.5)', + [`&.${toggleButtonClasses.selected}`]: { + color: brand[300], + }, + }), + }), + }, + }, + MuiCheckbox: { + defaultProps: { + disableRipple: true, + icon: ( + + ), + checkedIcon: , + indeterminateIcon: , + }, + styleOverrides: { + root: ({ theme }) => ({ + margin: 10, + height: 16, + width: 16, + borderRadius: 5, + border: '1px solid ', + borderColor: alpha(gray[300], 0.8), + boxShadow: '0 0 0 1.5px hsla(210, 0%, 0%, 0.04) inset', + backgroundColor: alpha(gray[100], 0.4), + transition: 'border-color, background-color, 120ms ease-in', + '&:hover': { + borderColor: brand[300], + }, + '&.Mui-focusVisible': { + outline: `3px solid ${alpha(brand[500], 0.5)}`, + outlineOffset: '2px', + borderColor: brand[400], + }, + '&.Mui-checked': { + color: 'white', + backgroundColor: brand[500], + borderColor: brand[500], + boxShadow: `none`, + '&:hover': { + backgroundColor: brand[600], + }, + }, + ...theme.applyStyles('dark', { + borderColor: alpha(gray[700], 0.8), + boxShadow: '0 0 0 1.5px hsl(210, 0%, 0%) inset', + backgroundColor: alpha(gray[900], 0.8), + '&:hover': { + borderColor: brand[300], + }, + '&.Mui-focusVisible': { + borderColor: brand[400], + outline: `3px solid ${alpha(brand[500], 0.5)}`, + outlineOffset: '2px', + }, + }), + }), + }, + }, + MuiInputBase: { + styleOverrides: { + root: { + border: 'none', + }, + input: { + '&::placeholder': { + opacity: 0.7, + color: gray[500], + }, + }, + }, + }, + MuiOutlinedInput: { + styleOverrides: { + input: { + padding: 0, + }, + root: ({ theme }) => ({ + padding: '8px 12px', + color: (theme.vars || theme).palette.text.primary, + borderRadius: (theme.vars || theme).shape.borderRadius, + border: `1px solid ${(theme.vars || theme).palette.divider}`, + backgroundColor: (theme.vars || theme).palette.background.default, + transition: 'border 120ms ease-in', + '&:hover': { + borderColor: gray[400], + }, + [`&.${outlinedInputClasses.focused}`]: { + outline: `3px solid ${alpha(brand[500], 0.5)}`, + borderColor: brand[400], + }, + ...theme.applyStyles('dark', { + '&:hover': { + borderColor: gray[500], + }, + }), + variants: [ + { + props: { + size: 'small', + }, + style: { + height: '2.25rem', + }, + }, + { + props: { + size: 'medium', + }, + style: { + height: '2.5rem', + }, + }, + ], + }), + notchedOutline: { + border: 'none', + }, + }, + }, + MuiInputAdornment: { + styleOverrides: { + root: ({ theme }) => ({ + color: (theme.vars || theme).palette.grey[500], + ...theme.applyStyles('dark', { + color: (theme.vars || theme).palette.grey[400], + }), + }), + }, + }, + MuiFormLabel: { + styleOverrides: { + root: ({ theme }) => ({ + typography: theme.typography.caption, + marginBottom: 8, + }), + }, + }, +}; diff --git a/fe/src/ui/shared-theme/customizations/navigation.tsx b/fe/src/ui/shared-theme/customizations/navigation.tsx new file mode 100644 index 0000000..3cb9713 --- /dev/null +++ b/fe/src/ui/shared-theme/customizations/navigation.tsx @@ -0,0 +1,279 @@ +import * as React from 'react'; +import { Theme, alpha, Components } from '@mui/material/styles'; +import { SvgIconProps } from '@mui/material/SvgIcon'; +import { buttonBaseClasses } from '@mui/material/ButtonBase'; +import { dividerClasses } from '@mui/material/Divider'; +import { menuItemClasses } from '@mui/material/MenuItem'; +import { selectClasses } from '@mui/material/Select'; +import { tabClasses } from '@mui/material/Tab'; +import UnfoldMoreRoundedIcon from '@mui/icons-material/UnfoldMoreRounded'; +import { gray, brand } from '../themePrimitives'; + +/* eslint-disable import/prefer-default-export */ +export const navigationCustomizations: Components = { + MuiMenuItem: { + styleOverrides: { + root: ({ theme }) => ({ + borderRadius: (theme.vars || theme).shape.borderRadius, + padding: '6px 8px', + [`&.${menuItemClasses.focusVisible}`]: { + backgroundColor: 'transparent', + }, + [`&.${menuItemClasses.selected}`]: { + [`&.${menuItemClasses.focusVisible}`]: { + backgroundColor: alpha(theme.palette.action.selected, 0.3), + }, + }, + }), + }, + }, + MuiMenu: { + styleOverrides: { + list: { + gap: '0px', + [`&.${dividerClasses.root}`]: { + margin: '0 -8px', + }, + }, + paper: ({ theme }) => ({ + marginTop: '4px', + borderRadius: (theme.vars || theme).shape.borderRadius, + border: `1px solid ${(theme.vars || theme).palette.divider}`, + backgroundImage: 'none', + background: 'hsl(0, 0%, 100%)', + boxShadow: + 'hsla(220, 30%, 5%, 0.07) 0px 4px 16px 0px, hsla(220, 25%, 10%, 0.07) 0px 8px 16px -5px', + [`& .${buttonBaseClasses.root}`]: { + '&.Mui-selected': { + backgroundColor: alpha(theme.palette.action.selected, 0.3), + }, + }, + ...theme.applyStyles('dark', { + background: gray[900], + boxShadow: + 'hsla(220, 30%, 5%, 0.7) 0px 4px 16px 0px, hsla(220, 25%, 10%, 0.8) 0px 8px 16px -5px', + }), + }), + }, + }, + MuiSelect: { + defaultProps: { + IconComponent: React.forwardRef((props, ref) => ( + + )), + }, + styleOverrides: { + root: ({ theme }) => ({ + borderRadius: (theme.vars || theme).shape.borderRadius, + border: '1px solid', + borderColor: gray[200], + backgroundColor: (theme.vars || theme).palette.background.paper, + boxShadow: `inset 0 1px 0 1px hsla(220, 0%, 100%, 0.6), inset 0 -1px 0 1px hsla(220, 35%, 90%, 0.5)`, + '&:hover': { + borderColor: gray[300], + backgroundColor: (theme.vars || theme).palette.background.paper, + boxShadow: 'none', + }, + [`&.${selectClasses.focused}`]: { + outlineOffset: 0, + borderColor: gray[400], + }, + '&:before, &:after': { + display: 'none', + }, + + ...theme.applyStyles('dark', { + borderRadius: (theme.vars || theme).shape.borderRadius, + borderColor: gray[700], + backgroundColor: (theme.vars || theme).palette.background.paper, + boxShadow: `inset 0 1px 0 1px ${alpha(gray[700], 0.15)}, inset 0 -1px 0 1px hsla(220, 0%, 0%, 0.7)`, + '&:hover': { + borderColor: alpha(gray[700], 0.7), + backgroundColor: (theme.vars || theme).palette.background.paper, + boxShadow: 'none', + }, + [`&.${selectClasses.focused}`]: { + outlineOffset: 0, + borderColor: gray[900], + }, + '&:before, &:after': { + display: 'none', + }, + }), + }), + select: ({ theme }) => ({ + display: 'flex', + alignItems: 'center', + ...theme.applyStyles('dark', { + display: 'flex', + alignItems: 'center', + '&:focus-visible': { + backgroundColor: gray[900], + }, + }), + }), + }, + }, + MuiLink: { + defaultProps: { + underline: 'none', + }, + styleOverrides: { + root: ({ theme }) => ({ + color: (theme.vars || theme).palette.text.primary, + fontWeight: 500, + position: 'relative', + textDecoration: 'none', + width: 'fit-content', + '&::before': { + content: '""', + position: 'absolute', + width: '100%', + height: '1px', + bottom: 0, + left: 0, + backgroundColor: (theme.vars || theme).palette.text.secondary, + opacity: 0.3, + transition: 'width 0.3s ease, opacity 0.3s ease', + }, + '&:hover::before': { + width: 0, + }, + '&:focus-visible': { + outline: `3px solid ${alpha(brand[500], 0.5)}`, + outlineOffset: '4px', + borderRadius: '2px', + }, + }), + }, + }, + MuiDrawer: { + styleOverrides: { + paper: ({ theme }) => ({ + backgroundColor: (theme.vars || theme).palette.background.default, + }), + }, + }, + MuiPaginationItem: { + styleOverrides: { + root: ({ theme }) => ({ + '&.Mui-selected': { + color: 'white', + backgroundColor: (theme.vars || theme).palette.grey[900], + }, + ...theme.applyStyles('dark', { + '&.Mui-selected': { + color: 'black', + backgroundColor: (theme.vars || theme).palette.grey[50], + }, + }), + }), + }, + }, + MuiTabs: { + styleOverrides: { + root: { minHeight: 'fit-content' }, + indicator: ({ theme }) => ({ + backgroundColor: (theme.vars || theme).palette.grey[800], + ...theme.applyStyles('dark', { + backgroundColor: (theme.vars || theme).palette.grey[200], + }), + }), + }, + }, + MuiTab: { + styleOverrides: { + root: ({ theme }) => ({ + padding: '6px 8px', + marginBottom: '8px', + textTransform: 'none', + minWidth: 'fit-content', + minHeight: 'fit-content', + color: (theme.vars || theme).palette.text.secondary, + borderRadius: (theme.vars || theme).shape.borderRadius, + border: '1px solid', + borderColor: 'transparent', + ':hover': { + color: (theme.vars || theme).palette.text.primary, + backgroundColor: gray[100], + borderColor: gray[200], + }, + [`&.${tabClasses.selected}`]: { + color: gray[900], + }, + ...theme.applyStyles('dark', { + ':hover': { + color: (theme.vars || theme).palette.text.primary, + backgroundColor: gray[800], + borderColor: gray[700], + }, + [`&.${tabClasses.selected}`]: { + color: '#fff', + }, + }), + }), + }, + }, + MuiStepConnector: { + styleOverrides: { + line: ({ theme }) => ({ + borderTop: '1px solid', + borderColor: (theme.vars || theme).palette.divider, + flex: 1, + borderRadius: '99px', + }), + }, + }, + MuiStepIcon: { + styleOverrides: { + root: ({ theme }) => ({ + color: 'transparent', + border: `1px solid ${gray[400]}`, + width: 12, + height: 12, + borderRadius: '50%', + '& text': { + display: 'none', + }, + '&.Mui-active': { + border: 'none', + color: (theme.vars || theme).palette.primary.main, + }, + '&.Mui-completed': { + border: 'none', + color: (theme.vars || theme).palette.success.main, + }, + ...theme.applyStyles('dark', { + border: `1px solid ${gray[700]}`, + '&.Mui-active': { + border: 'none', + color: (theme.vars || theme).palette.primary.light, + }, + '&.Mui-completed': { + border: 'none', + color: (theme.vars || theme).palette.success.light, + }, + }), + variants: [ + { + props: { completed: true }, + style: { + width: 12, + height: 12, + }, + }, + ], + }), + }, + }, + MuiStepLabel: { + styleOverrides: { + label: ({ theme }) => ({ + '&.Mui-completed': { + opacity: 0.6, + ...theme.applyStyles('dark', { opacity: 0.5 }), + }, + }), + }, + }, +}; diff --git a/fe/src/ui/shared-theme/customizations/surfaces.ts b/fe/src/ui/shared-theme/customizations/surfaces.ts new file mode 100644 index 0000000..f47a6d8 --- /dev/null +++ b/fe/src/ui/shared-theme/customizations/surfaces.ts @@ -0,0 +1,113 @@ +import { alpha, Theme, Components } from '@mui/material/styles'; +import { gray } from '../themePrimitives'; + +/* eslint-disable import/prefer-default-export */ +export const surfacesCustomizations: Components = { + MuiAccordion: { + defaultProps: { + elevation: 0, + disableGutters: true, + }, + styleOverrides: { + root: ({ theme }) => ({ + padding: 4, + overflow: 'clip', + backgroundColor: (theme.vars || theme).palette.background.default, + border: '1px solid', + borderColor: (theme.vars || theme).palette.divider, + ':before': { + backgroundColor: 'transparent', + }, + '&:not(:last-of-type)': { + borderBottom: 'none', + }, + '&:first-of-type': { + borderTopLeftRadius: (theme.vars || theme).shape.borderRadius, + borderTopRightRadius: (theme.vars || theme).shape.borderRadius, + }, + '&:last-of-type': { + borderBottomLeftRadius: (theme.vars || theme).shape.borderRadius, + borderBottomRightRadius: (theme.vars || theme).shape.borderRadius, + }, + }), + }, + }, + MuiAccordionSummary: { + styleOverrides: { + root: ({ theme }) => ({ + border: 'none', + borderRadius: 8, + '&:hover': { backgroundColor: gray[50] }, + '&:focus-visible': { backgroundColor: 'transparent' }, + ...theme.applyStyles('dark', { + '&:hover': { backgroundColor: gray[800] }, + }), + }), + }, + }, + MuiAccordionDetails: { + styleOverrides: { + root: { mb: 20, border: 'none' }, + }, + }, + MuiPaper: { + defaultProps: { + elevation: 0, + }, + }, + MuiCard: { + styleOverrides: { + root: ({ theme }) => { + return { + padding: 16, + gap: 16, + transition: 'all 100ms ease', + backgroundColor: gray[50], + borderRadius: (theme.vars || theme).shape.borderRadius, + border: `1px solid ${(theme.vars || theme).palette.divider}`, + boxShadow: 'none', + ...theme.applyStyles('dark', { + backgroundColor: gray[800], + }), + variants: [ + { + props: { + variant: 'outlined', + }, + style: { + border: `1px solid ${(theme.vars || theme).palette.divider}`, + boxShadow: 'none', + background: 'hsl(0, 0%, 100%)', + ...theme.applyStyles('dark', { + background: alpha(gray[900], 0.4), + }), + }, + }, + ], + }; + }, + }, + }, + MuiCardContent: { + styleOverrides: { + root: { + padding: 0, + '&:last-child': { paddingBottom: 0 }, + }, + }, + }, + MuiCardHeader: { + styleOverrides: { + root: { + padding: 0, + }, + }, + }, + MuiCardActions: { + styleOverrides: { + root: { + padding: 0, + }, + }, + }, +}; diff --git a/fe/src/ui/shared-theme/themePrimitives.ts b/fe/src/ui/shared-theme/themePrimitives.ts new file mode 100644 index 0000000..b9b8a04 --- /dev/null +++ b/fe/src/ui/shared-theme/themePrimitives.ts @@ -0,0 +1,399 @@ +import { createTheme, alpha, PaletteMode, Shadows } from '@mui/material/styles'; + +declare module '@mui/material/Paper' { + interface PaperPropsVariantOverrides { + highlighted: true; + } +} +declare module '@mui/material/styles/createPalette' { + interface ColorRange { + 50: string; + 100: string; + 200: string; + 300: string; + 400: string; + 500: string; + 600: string; + 700: string; + 800: string; + 900: string; + } + + interface PaletteColor extends ColorRange {} + + interface Palette { + baseShadow: string; + } +} + +const defaultTheme = createTheme(); + +const customShadows: Shadows = [...defaultTheme.shadows]; + +export const brand = { + 50: 'hsl(210, 100%, 95%)', + 100: 'hsl(210, 100%, 92%)', + 200: 'hsl(210, 100%, 80%)', + 300: 'hsl(210, 100%, 65%)', + 400: 'hsl(210, 98%, 48%)', + 500: 'hsl(210, 98%, 42%)', + 600: 'hsl(210, 98%, 55%)', + 700: 'hsl(210, 100%, 35%)', + 800: 'hsl(210, 100%, 16%)', + 900: 'hsl(210, 100%, 21%)', +}; + +export const gray = { + 50: 'hsl(220, 35%, 97%)', + 100: 'hsl(220, 30%, 94%)', + 200: 'hsl(220, 20%, 88%)', + 300: 'hsl(220, 20%, 80%)', + 400: 'hsl(220, 20%, 65%)', + 500: 'hsl(220, 20%, 42%)', + 600: 'hsl(220, 20%, 35%)', + 700: 'hsl(220, 20%, 25%)', + 800: 'hsl(220, 30%, 6%)', + 900: 'hsl(220, 35%, 3%)', +}; + +export const green = { + 50: 'hsl(120, 80%, 98%)', + 100: 'hsl(120, 75%, 94%)', + 200: 'hsl(120, 75%, 87%)', + 300: 'hsl(120, 61%, 77%)', + 400: 'hsl(120, 44%, 53%)', + 500: 'hsl(120, 59%, 30%)', + 600: 'hsl(120, 70%, 25%)', + 700: 'hsl(120, 75%, 16%)', + 800: 'hsl(120, 84%, 10%)', + 900: 'hsl(120, 87%, 6%)', +}; + +export const orange = { + 50: 'hsl(45, 100%, 97%)', + 100: 'hsl(45, 92%, 90%)', + 200: 'hsl(45, 94%, 80%)', + 300: 'hsl(45, 90%, 65%)', + 400: 'hsl(45, 90%, 40%)', + 500: 'hsl(45, 90%, 35%)', + 600: 'hsl(45, 91%, 25%)', + 700: 'hsl(45, 94%, 20%)', + 800: 'hsl(45, 95%, 16%)', + 900: 'hsl(45, 93%, 12%)', +}; + +export const red = { + 50: 'hsl(0, 100%, 97%)', + 100: 'hsl(0, 92%, 90%)', + 200: 'hsl(0, 94%, 80%)', + 300: 'hsl(0, 90%, 65%)', + 400: 'hsl(0, 90%, 40%)', + 500: 'hsl(0, 90%, 30%)', + 600: 'hsl(0, 91%, 25%)', + 700: 'hsl(0, 94%, 18%)', + 800: 'hsl(0, 95%, 12%)', + 900: 'hsl(0, 93%, 6%)', +}; + +export const getDesignTokens = (mode: PaletteMode) => { + customShadows[1] = + mode === 'dark' + ? 'hsla(220, 30%, 5%, 0.7) 0px 4px 16px 0px, hsla(220, 25%, 10%, 0.8) 0px 8px 16px -5px' + : 'hsla(220, 30%, 5%, 0.07) 0px 4px 16px 0px, hsla(220, 25%, 10%, 0.07) 0px 8px 16px -5px'; + + return { + palette: { + mode, + primary: { + light: brand[200], + main: brand[400], + dark: brand[700], + contrastText: brand[50], + ...(mode === 'dark' && { + contrastText: brand[50], + light: brand[300], + main: brand[400], + dark: brand[700], + }), + }, + info: { + light: brand[100], + main: brand[300], + dark: brand[600], + contrastText: gray[50], + ...(mode === 'dark' && { + contrastText: brand[300], + light: brand[500], + main: brand[700], + dark: brand[900], + }), + }, + warning: { + light: orange[300], + main: orange[400], + dark: orange[800], + ...(mode === 'dark' && { + light: orange[400], + main: orange[500], + dark: orange[700], + }), + }, + error: { + light: red[300], + main: red[400], + dark: red[800], + ...(mode === 'dark' && { + light: red[400], + main: red[500], + dark: red[700], + }), + }, + success: { + light: green[300], + main: green[400], + dark: green[800], + ...(mode === 'dark' && { + light: green[400], + main: green[500], + dark: green[700], + }), + }, + grey: { + ...gray, + }, + divider: mode === 'dark' ? alpha(gray[700], 0.6) : alpha(gray[300], 0.4), + background: { + default: 'hsl(0, 0%, 99%)', + paper: 'hsl(220, 35%, 97%)', + ...(mode === 'dark' && { default: gray[900], paper: 'hsl(220, 30%, 7%)' }), + }, + text: { + primary: gray[800], + secondary: gray[600], + warning: orange[400], + ...(mode === 'dark' && { primary: 'hsl(0, 0%, 100%)', secondary: gray[400] }), + }, + action: { + hover: alpha(gray[200], 0.2), + selected: `${alpha(gray[200], 0.3)}`, + ...(mode === 'dark' && { + hover: alpha(gray[600], 0.2), + selected: alpha(gray[600], 0.3), + }), + }, + }, + typography: { + fontFamily: ['"Inter", "sans-serif"'].join(','), + h1: { + fontSize: defaultTheme.typography.pxToRem(48), + fontWeight: 600, + lineHeight: 1.2, + letterSpacing: -0.5, + }, + h2: { + fontSize: defaultTheme.typography.pxToRem(36), + fontWeight: 600, + lineHeight: 1.2, + }, + h3: { + fontSize: defaultTheme.typography.pxToRem(30), + lineHeight: 1.2, + }, + h4: { + fontSize: defaultTheme.typography.pxToRem(24), + fontWeight: 600, + lineHeight: 1.5, + }, + h5: { + fontSize: defaultTheme.typography.pxToRem(20), + fontWeight: 600, + }, + h6: { + fontSize: defaultTheme.typography.pxToRem(18), + fontWeight: 600, + }, + subtitle1: { + fontSize: defaultTheme.typography.pxToRem(18), + }, + subtitle2: { + fontSize: defaultTheme.typography.pxToRem(14), + fontWeight: 500, + }, + body1: { + fontSize: defaultTheme.typography.pxToRem(14), + }, + body2: { + fontSize: defaultTheme.typography.pxToRem(14), + fontWeight: 400, + }, + caption: { + fontSize: defaultTheme.typography.pxToRem(12), + fontWeight: 400, + }, + }, + shape: { + borderRadius: 8, + }, + shadows: customShadows, + }; +}; + +export const colorSchemes = { + light: { + palette: { + primary: { + light: brand[200], + main: brand[400], + dark: brand[700], + contrastText: brand[50], + }, + info: { + light: brand[100], + main: brand[300], + dark: brand[600], + contrastText: gray[50], + }, + warning: { + light: orange[300], + main: orange[400], + dark: orange[800], + }, + error: { + light: red[300], + main: red[400], + dark: red[800], + }, + success: { + light: green[300], + main: green[400], + dark: green[800], + }, + grey: { + ...gray, + }, + divider: alpha(gray[300], 0.4), + background: { + default: 'hsl(0, 0%, 99%)', + paper: 'hsl(220, 35%, 97%)', + }, + text: { + primary: gray[800], + secondary: gray[600], + warning: orange[400], + }, + action: { + hover: alpha(gray[200], 0.2), + selected: `${alpha(gray[200], 0.3)}`, + }, + baseShadow: + 'hsla(220, 30%, 5%, 0.07) 0px 4px 16px 0px, hsla(220, 25%, 10%, 0.07) 0px 8px 16px -5px', + }, + }, + dark: { + palette: { + primary: { + contrastText: brand[50], + light: brand[300], + main: brand[400], + dark: brand[700], + }, + info: { + contrastText: brand[300], + light: brand[500], + main: brand[700], + dark: brand[900], + }, + warning: { + light: orange[400], + main: orange[500], + dark: orange[700], + }, + error: { + light: red[400], + main: red[500], + dark: red[700], + }, + success: { + light: green[400], + main: green[500], + dark: green[700], + }, + grey: { + ...gray, + }, + divider: alpha(gray[700], 0.6), + background: { + default: gray[900], + paper: 'hsl(220, 30%, 7%)', + }, + text: { + primary: 'hsl(0, 0%, 100%)', + secondary: gray[400], + }, + action: { + hover: alpha(gray[600], 0.2), + selected: alpha(gray[600], 0.3), + }, + baseShadow: + 'hsla(220, 30%, 5%, 0.7) 0px 4px 16px 0px, hsla(220, 25%, 10%, 0.8) 0px 8px 16px -5px', + }, + }, +}; + +export const typography = { + fontFamily: ['"Inter", "sans-serif"'].join(','), + h1: { + fontSize: defaultTheme.typography.pxToRem(48), + fontWeight: 600, + lineHeight: 1.2, + letterSpacing: -0.5, + }, + h2: { + fontSize: defaultTheme.typography.pxToRem(36), + fontWeight: 600, + lineHeight: 1.2, + }, + h3: { + fontSize: defaultTheme.typography.pxToRem(30), + lineHeight: 1.2, + }, + h4: { + fontSize: defaultTheme.typography.pxToRem(24), + fontWeight: 600, + lineHeight: 1.5, + }, + h5: { + fontSize: defaultTheme.typography.pxToRem(20), + fontWeight: 600, + }, + h6: { + fontSize: defaultTheme.typography.pxToRem(18), + fontWeight: 600, + }, + subtitle1: { + fontSize: defaultTheme.typography.pxToRem(18), + }, + subtitle2: { + fontSize: defaultTheme.typography.pxToRem(14), + fontWeight: 500, + }, + body1: { + fontSize: defaultTheme.typography.pxToRem(14), + }, + body2: { + fontSize: defaultTheme.typography.pxToRem(14), + fontWeight: 400, + }, + caption: { + fontSize: defaultTheme.typography.pxToRem(12), + fontWeight: 400, + }, +}; + +export const shape = { + borderRadius: 8, +}; + +// @ts-ignore +const defaultShadows: Shadows = ['var(--mui-palette-baseShadow)', ...defaultTheme.shadows.slice(1)]; +export const shadows = defaultShadows; diff --git a/fe/src/ui/sigil-ts/index.json b/fe/src/ui/sigil-ts/index.json new file mode 100644 index 0000000..3c8f95b --- /dev/null +++ b/fe/src/ui/sigil-ts/index.json @@ -0,0 +1,24315 @@ +{ + "bac": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bal": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "32.0072", + "x2": "32.7071", + "y2": "127.3", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64.0072", + "x2": "64.7071", + "y2": "127.3", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "96.0072", + "x2": "96.7071", + "y2": "127.3", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ban": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0C128 70.6924 70.6924 128 -1.52588e-05 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bar": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bat": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0C128 35.3462 99.3462 64 64 64C28.6538 64 0 35.3462 0 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bec": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bel": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ben": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "8", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bep": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 92.6538 64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ber": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0L96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bes": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 128C64 92.6538 35.3462 64 0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bet": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0036", + "y1": "15.9965", + "x2": "48.0036", + "y2": "47.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bex": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0036", + "y1": "15.9965", + "x2": "48.0036", + "y2": "47.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bic": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C74.9807 96 32 53.0193 32 -4.19629e-06", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bid": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0C32 70.6925 74.9807 128 128 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bil": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9965", + "x2": "112.004", + "y2": "111.997", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bin": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bis": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-8.87604e-09", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "96", + "x2": "-8.87604e-09", + "y2": "96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "32", + "x2": "-8.87604e-09", + "y2": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bit": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bol": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-4.37114e-08", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bon": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128C92.6538 128 64 99.3462 64 64C64 28.6538 92.6538 4.215e-07 128 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bor": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 128C4.63574e-06 92.6489 14.3309 60.6449 37.5 37.4807", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 128C32 101.492 42.7436 77.4939 60.1138 60.1217", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 128C64 110.328 71.1626 94.3287 82.7432 82.7471", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M95.6284 128C95.6284 119.164 99.2097 111.164 105 105.374", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bos": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bot": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "32", + "y1": "2.18557e-08", + "x2": "32", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bud": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M16 64C16 90.5097 37.4903 112 64 112", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bur": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M7.37542e-06 -3.56072e-06C1.19529e-06 70.6924 57.3075 128 128 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bus": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 128C32 110.327 17.6731 96 0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "byl": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M22.1288 22.6299C16.0075 28.7511 8.0234 31.874 0.00134547 31.9986M44.7562 45.2573C32.3866 57.6269 16.2133 63.8747 0.00134277 64.0005M67.3836 67.8847C48.7656 86.5027 24.403 95.8749 0.00134412 96.0012", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "byn": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0C128 35.3511 113.669 67.3551 90.5 90.5193", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0C96 26.5077 85.2564 50.5061 67.8862 67.8783", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0C64 17.6721 56.8374 33.6713 45.2568 45.2529", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32.3716 0C32.3716 8.83603 28.7903 16.8356 23 22.6264", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "byr": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "80", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "80", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "byt": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dab": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "y1": "-0.5", + "x2": "45.2548", + "y2": "-0.5", + "transform": "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.6499)", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dac": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L-5.96046e-08 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dal": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "63.29", + "y2": "63.2929", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "32.0072", + "x2": "32.7071", + "y2": "127.3", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64.0072", + "x2": "64.7071", + "y2": "127.3", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "96.0072", + "x2": "96.7071", + "y2": "127.3", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dan": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "96", + "y1": "2.18557e-08", + "x2": "96", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dap": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9964", + "x2": "112.004", + "y2": "111.996", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dar": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M86.6274 86.6274C99.1242 74.1307 99.1242 53.8694 86.6274 41.3726C74.1306 28.8758 53.8694 28.8758 41.3726 41.3726", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M75.3137 75.3137C81.5621 69.0653 81.5621 58.9347 75.3137 52.6863C69.0653 46.4379 58.9347 46.4379 52.6863 52.6863", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M97.9411 97.9411C116.686 79.1959 116.686 48.804 97.9411 30.0589C79.196 11.3137 48.804 11.3137 30.0589 30.0589", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "das": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dat": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128C92.6538 128 64 99.3462 64 64C64 28.6538 92.6538 -1.54503e-06 128 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dav": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 64C96 46.3269 81.6731 32 64 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "deb": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 -6.35781e-07C64 35.3462 35.3462 64 0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dec": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "112", + "cy": "16", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "112", + "cy": "16", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "def": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 128L128 0", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 94L94 0", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 64L64 0", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 32L32 0", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "deg": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 128C64 92.6538 35.3462 64 0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "del": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dem": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 -6.35781e-07C64 35.3462 35.3462 64 0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "den": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.52575e-06 96C53.0193 96 96 53.0193 96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dep": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 128C32 101.492 42.7436 77.4939 60.1138 60.1216", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 128C64 110.328 71.1626 94.3287 82.7432 82.7471", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M95.6284 128C95.6284 119.164 99.2097 111.164 105 105.374", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "der": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 64L5.59506e-06 0L128 1.11901e-05V64C128 99.3462 99.3462 128 64 128C28.6538 128 -4.6351e-06 99.3462 0 64Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 128L96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "des": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0L96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "det": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9964", + "y1": "111.996", + "x2": "47.9964", + "y2": "79.9964", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dev": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "96.5", + "y1": "3.07317e-08", + "x2": "96.5", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "32.5", + "y1": "3.07317e-08", + "x2": "32.5", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dex": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dib": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "8.74228e-08", + "y1": "64", + "x2": "128", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "5.25874e-08", + "y1": "32", + "x2": "128", + "y2": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dif": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M60.1244 67.3837C41.5063 48.7657 32.1342 24.4031 32.0079 0.00145601M82.7518 44.7563C70.3822 32.3867 64.1344 16.2134 64.0086 0.00145196M105.379 22.1289C99.258 16.0077 96.1351 8.02351 96.0105 0.00145196", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "16", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "16", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dig": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64.5", + "y1": "-0.5", + "x2": "64.5", + "y2": "127.5", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0035", + "y1": "15.9965", + "x2": "48.0035", + "y2": "47.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dil": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0036", + "y1": "79.9964", + "x2": "112.004", + "y2": "111.996", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "din": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "96", + "y1": "2.18557e-08", + "x2": "96", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dir": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 64C96 81.6731 81.6731 96 64 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0035", + "y1": "15.9965", + "x2": "48.0035", + "y2": "47.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dis": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.0029152 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "div": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-4.19629e-06 96C70.6924 96 128 53.0193 128 5.59506e-06", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-2.79753e-06 64C70.6924 64 128 35.3462 128 5.59506e-06", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "doc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M127.997 0L-0.00291443 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M86.6274 41.3726C74.1306 28.8758 53.8694 28.8758 41.3726 41.3726C28.8758 53.8694 28.8758 74.1306 41.3726 86.6274", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dol": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-4.19629e-06 16C26.5097 16 48 37.4903 48 64C48 90.5097 26.5097 112 0 112", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "don": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-3.8147e-06 128C-7.24632e-07 92.6538 28.6538 64 64 64C99.3462 64 128 92.6538 128 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dop": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 112C90.5097 112 112 90.5097 112 64C112 37.4903 90.5097 16 64 16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dor": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "y1": "63.5", + "x2": "128", + "y2": "63.5", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dos": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M86.6274 86.6274C99.1242 74.1306 99.1242 53.8693 86.6274 41.3725C74.1306 28.8758 53.8694 28.8758 41.3726 41.3725", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dot": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dov": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.701724 31.9914C25.6281 31.9914 49.4822 42.5913 66.8261 59.7565M-0.701723 63.9914C16.7916 63.9914 32.6456 71.0098 44.1982 82.3844M-0.701722 95.9914C7.955 95.9914 15.8089 99.4288 21.5694 105.013", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 0C35.3511 0 67.3551 14.3309 90.5193 37.5", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "doz": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128L0 0", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M30.0589 30.0589C48.804 11.3137 79.196 11.3137 97.9411 30.0589C116.686 48.804 116.686 79.196 97.9411 97.9411", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M52.6863 52.6863C58.9347 46.4379 69.0653 46.4379 75.3137 52.6863C81.5621 58.9347 81.5621 69.0653 75.3137 75.3137", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M41.3726 41.3726C53.8694 28.8758 74.1306 28.8758 86.6274 41.3726C99.1242 53.8694 99.1242 74.1306 86.6274 86.6274", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "duc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32L0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dul": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 16C90.5097 16 112 37.4903 112 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 64L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dun": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M112 64C112 37.4903 90.5097 16 64 16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dur": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 64L5.59506e-06 0L128 1.11901e-05V64C128 99.3462 99.3462 128 64 128C28.6538 128 -4.6351e-06 99.3462 0 64Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dus": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 -3.05151e-06C32 53.0193 74.9807 96 128 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dut": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dux": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-2.79795e-06 -3.55988e-06C70.6924 -4.40288e-06 128 57.3075 128 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dyl": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M2.03434e-06 128C70.6924 128 128 70.6925 128 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dyn": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32L0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dyr": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dys": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-3.8147e-06 1.11901e-05C-7.24633e-07 35.3462 28.6538 64 64 64C99.3462 64 128 35.3462 128 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dyt": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fab": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fad": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fal": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 128L128 0", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 0C35.3511 0 67.3551 14.3309 90.5193 37.5", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 32C26.5077 32 50.5061 42.7436 67.8783 60.1138", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 64C17.6721 64 33.6713 71.1626 45.2529 82.7432", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 95.6284C8.83603 95.6284 16.8356 99.2097 22.6264 105", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fam": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-4.37114e-08", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fan": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fas": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "feb": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M7.37542e-06 -3.56072e-06C1.19529e-06 70.6924 57.3075 128 128 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fed": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32L0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fel": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "y1": "-0.5", + "x2": "45.2548", + "y2": "-0.5", + "transform": "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.6499)", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fen": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 128C4.63574e-06 92.6489 14.3309 60.6449 37.5 37.4807", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 128C32 101.492 42.7436 77.4939 60.1138 60.1217", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 128C64 110.328 71.1626 94.3287 82.7432 82.7471", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M95.6284 128C95.6284 119.164 99.2097 111.164 105 105.374", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fep": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fer": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fes": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fet": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fex": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "y1": "-0.5", + "x2": "45.2548", + "y2": "-0.5", + "transform": "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.6499 47.6499)", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fid": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00291443 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fig": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fil": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-4.37114e-08", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "32", + "y1": "2.18557e-08", + "x2": "32", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fin": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "98", + "y1": "2.18557e-08", + "x2": "98", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fip": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fir": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "y1": "-0.5", + "x2": "45.2548", + "y2": "-0.5", + "transform": "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.6499)", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0036", + "y1": "79.9965", + "x2": "112.004", + "y2": "111.997", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0035", + "y1": "15.9965", + "x2": "48.0035", + "y2": "47.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fit": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fod": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fog": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M86.6274 86.6274C99.1242 74.1306 99.1242 53.8694 86.6274 41.3726C74.1306 28.8758 53.8694 28.8758 41.3726 41.3726", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fol": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-4.37114e-08", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fon": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fop": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M16 64C16 90.5097 37.4903 112 64 112", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "for": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "96", + "y1": "2.18557e-08", + "x2": "96", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fos": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0C96 53.0193 53.0193 96 0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0C64 35.3462 35.3462 64 0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0C32 17.6731 17.6731 32 0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fot": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9964", + "y1": "111.997", + "x2": "47.9964", + "y2": "79.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ful": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 96C81.6731 96 96 81.6731 96 64C96 46.3269 81.6731 32 64 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fun": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 64V128H0L2.79753e-06 64C4.34256e-06 28.6538 28.6538 -1.54503e-06 64 0C99.3462 1.54503e-06 128 28.6538 128 64Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9964", + "y1": "111.997", + "x2": "47.9964", + "y2": "79.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fur": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M86.8823 41.6275C74.3855 29.1307 54.1242 29.1307 41.6274 41.6275C29.1307 54.1243 29.1307 74.3855 41.6274 86.8823", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fus": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 128C32 110.327 17.6731 96 0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fyl": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M22.1288 22.6299C16.0075 28.7511 8.0234 31.874 0.00134547 31.9986M44.7562 45.2573C32.3866 57.6269 16.2133 63.8747 0.00134277 64.0005M67.3836 67.8847C48.7656 86.5027 24.403 95.8749 0.00134412 96.0012", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fyn": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fyr": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00268555 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "y1": "-0.5", + "x2": "45.2548", + "y2": "-0.5", + "transform": "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.6499 47.6499)", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hab": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M60.1244 67.3837C41.5063 48.7657 32.1342 24.4031 32.0079 0.00145601M82.7518 44.7563C70.3822 32.3867 64.1344 16.2134 64.0086 0.00145196M105.379 22.1289C99.258 16.0077 96.1351 8.02351 96.0105 0.00145196", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hac": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "had": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hal": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64.5", + "y1": "-0.5", + "x2": "64.5", + "y2": "127.5", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M16 64C16 90.5097 37.4903 112 64 112", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M112 64C112 37.4903 90.5097 16 64 16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "han": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hap": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "har": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "has": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hat": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "16", + "r": "8", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M48 32C48 40.8366 40.8366 48 32 48C23.1634 48 16 40.8366 16 32C16 23.1634 23.1634 16 32 16C40.8366 16 48 23.1634 48 32ZM32 40C36.4183 40 40 36.4183 40 32C40 27.5817 36.4183 24 32 24C27.5817 24 24 27.5817 24 32C24 36.4183 27.5817 40 32 40Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hav": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "96", + "y1": "2.18557e-08", + "x2": "96", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "heb": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M2.03434e-06 128C70.6924 128 128 70.6925 128 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hec": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hep": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.00285417", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hes": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M48 96C48 104.837 40.8366 112 32 112C23.1634 112 16 104.837 16 96C16 87.1634 23.1634 80 32 80C40.8366 80 48 87.1634 48 96ZM32 104C36.4183 104 40 100.418 40 96C40 91.5817 36.4183 88 32 88C27.5817 88 24 91.5817 24 96C24 100.418 27.5817 104 32 104Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "het": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 128L96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hex": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hid": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M2.03434e-06 128C70.6924 128 128 70.6925 128 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.52575e-06 96C53.0193 96 96 53.0193 96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.01717e-06 64C35.3462 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M5.08584e-07 32C17.6731 32 32 17.6731 32 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hil": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "8.74228e-08", + "y1": "64", + "x2": "128", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hin": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "32", + "y1": "2.18557e-08", + "x2": "32", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M48 64C48 72.8366 40.8366 80 32 80C23.1634 80 16 72.8366 16 64C16 55.1634 23.1634 48 32 48C40.8366 48 48 55.1634 48 64ZM32 72C36.4183 72 40 68.4183 40 64C40 59.5817 36.4183 56 32 56C27.5817 56 24 59.5817 24 64C24 68.4183 27.5817 72 32 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hob": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 64V128H0L2.79753e-06 64C4.34256e-06 28.6538 28.6538 -1.54503e-06 64 0C99.3462 1.54503e-06 128 28.6538 128 64Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-4.37114e-08", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hoc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "y1": "-0.5", + "x2": "45.2548", + "y2": "-0.5", + "transform": "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.6499)", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hod": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hol": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-4.37114e-08", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hop": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 96C81.6731 96 96 81.6731 96 64C96 46.3269 81.6731 32 64 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hos": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0036", + "y1": "79.9965", + "x2": "112.004", + "y2": "111.997", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0036", + "y1": "15.9965", + "x2": "48.0036", + "y2": "47.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "48", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "48", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "47", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "47", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "81", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "81", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "80", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "80", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hul": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hus": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 96C46.3269 96 32 81.6731 32 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hut": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lab": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "y1": "-0.5", + "x2": "45.2548", + "y2": "-0.5", + "transform": "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.6499)", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9964", + "y1": "111.997", + "x2": "47.9964", + "y2": "79.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lac": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 -9.40976e-06C64 70.6924 92.6538 128 128 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 -7.63193e-07C32 70.6924 74.9807 128 128 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lad": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "95.35", + "y1": "32.7071", + "x2": "32.0571", + "y2": "96", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lag": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 112C90.5097 112 112 90.5097 112 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lan": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "32", + "y1": "2.18557e-08", + "x2": "32", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lap": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M112 64C112 37.4903 90.5097 16 64 16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "112", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "112", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lar": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "2.78181e-08", + "y1": "64", + "x2": "128", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "las": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lat": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M2.03434e-06 128C70.6924 128 128 70.6925 128 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.52575e-06 96C53.0193 96 96 53.0193 96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.01717e-06 64C35.3462 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M5.08584e-07 32C17.6731 32 32 17.6731 32 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lav": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128C92.6489 128 60.6449 113.669 37.4807 90.5", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C101.492 96 77.4939 85.2564 60.1217 67.8862", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C110.328 64 94.3287 56.8374 82.7471 45.2568", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32.3716C119.164 32.3716 111.164 28.7903 105.374 23", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "leb": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-1.64036e-05 32C53.0193 32 96 74.9807 96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lec": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "led": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "leg": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M7.63192e-07 32C17.6731 32 32 46.3269 32 64C32 81.6731 17.6731 96 0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "len": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lep": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C110.327 96 96 110.327 96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ler": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "let": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lev": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lex": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9965", + "y1": "111.997", + "x2": "47.9965", + "y2": "79.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lib": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 92.6538 64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lid": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0036", + "y1": "15.9965", + "x2": "48.0036", + "y2": "47.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lig": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lin": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "128", + "x2": "64", + "y2": "-6.55671e-08", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "64", + "r": "8", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lis": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-4.70488e-06 64C35.3462 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lit": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00286865 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0C128 35.3511 113.669 67.3551 90.5 90.5193", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0C96 26.5077 85.2564 50.5061 67.8862 67.8783", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0C64 17.6721 56.8374 33.6713 45.2568 45.2529", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32.3716 0C32.3716 8.83603 28.7903 16.8356 23 22.6264", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "liv": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-5.21346e-06 32C70.6924 32 128 17.6731 128 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M3.4331e-06 96C70.6924 96 128 53.0193 128 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "loc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C74.9807 96 32 53.0193 32 -4.19629e-06", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lod": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M16 64C16 90.5097 37.4903 112 64 112", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lom": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lon": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M2.03434e-06 128C70.6924 128 128 70.6925 128 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.52575e-06 96C53.0193 96 96 53.0193 96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.01717e-06 64C35.3462 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M5.08584e-07 32C17.6731 32 32 17.6731 32 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lop": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-8.87604e-09", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "32", + "x2": "-8.87604e-09", + "y2": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lor": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "los": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "luc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-8.87604e-09", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96L0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lud": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0L96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lug": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 -7.62939e-06L64 -2.03434e-06C99.3462 1.05573e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lun": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lup": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 -7.62939e-06L64 -2.03434e-06C99.3462 1.05573e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 16C90.5097 16 112 37.4903 112 64C112 90.5097 90.5097 112 64 112", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-8.87604e-09", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lur": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0L96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lus": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lut": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lux": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lyd": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lyn": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lyr": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00268555 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "48", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "48", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lys": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lyt": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9965", + "x2": "112.003", + "y2": "111.997", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lyx": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mac": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mag": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mal": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9964", + "x2": "112.004", + "y2": "111.996", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "map": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0036", + "y1": "79.9965", + "x2": "112.004", + "y2": "111.997", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mar": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.0029152 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 64L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M86.6274 86.6274C99.1242 74.1307 99.1242 53.8694 86.6274 41.3726C74.1306 28.8758 53.8694 28.8758 41.3726 41.3726", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M75.3137 75.3137C81.5621 69.0653 81.5621 58.9347 75.3137 52.6863C69.0653 46.4379 58.9347 46.4379 52.6863 52.6863", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M97.9411 97.9411C116.686 79.1959 116.686 48.804 97.9411 30.0589C79.196 11.3137 48.804 11.3137 30.0589 30.0589", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mas": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mat": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32C110.327 32 96 17.6731 96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "meb": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 -3.05151e-06C32 53.0193 74.9807 96 128 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mec": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9965", + "x2": "112.003", + "y2": "111.997", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "med": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "meg": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 92.6538 64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mel": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9964", + "y1": "111.997", + "x2": "47.9964", + "y2": "79.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mep": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96L0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32L0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mer": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mes": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9964", + "y1": "111.996", + "x2": "47.9964", + "y2": "79.9964", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "met": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 128L32 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mev": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mex": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mic": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-2.09815e-06 80C26.5097 80 48 101.49 48 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mid": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-4.37114e-08", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 92.6538 64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mig": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0036", + "y1": "79.9965", + "x2": "112.004", + "y2": "111.997", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mil": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-4.37114e-08", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "32", + "x2": "-4.37114e-08", + "y2": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "96", + "x2": "-4.37114e-08", + "y2": "96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "min": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mip": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128C92.6538 128 64 99.3462 64 64C64 28.6538 92.6538 4.215e-07 128 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mir": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0036", + "y1": "15.9964", + "x2": "48.0036", + "y2": "47.9964", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 64C96 46.3269 81.6731 32 64 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mis": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 92.6538 64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00286865 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mit": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "moc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96L0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32L0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mod": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 96L128 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0035", + "y1": "15.9965", + "x2": "48.0035", + "y2": "47.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mog": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mol": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-4.37114e-08", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M112 64C112 90.5097 90.5097 112 64 112C37.4903 112 16 90.5097 16 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M112 0C112 26.5097 90.5097 48 64 48C37.4903 48 16 26.5097 16 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mon": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mop": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mor": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0035", + "y1": "15.9964", + "x2": "48.0035", + "y2": "47.9964", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9964", + "y1": "111.996", + "x2": "47.9964", + "y2": "79.9964", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mos": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mot": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C110.327 96 96 81.6731 96 64C96 46.3269 110.327 32 128 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mud": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "80", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "80", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mug": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 96C81.6731 96 96 81.6731 96 64C96 46.3269 81.6731 32 64 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mul": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9964", + "x2": "112.003", + "y2": "111.996", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M112 64C112 37.4903 90.5097 16 64 16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mun": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mur": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mus": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 128C96 74.9807 53.0193 32 0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mut": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "myl": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0035", + "y1": "15.9965", + "x2": "48.0035", + "y2": "47.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "16", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "16", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "myn": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 1.52638e-06C57.3076 -7.74381e-06 9.2702e-06 57.3075 0 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32C74.9807 32 32 74.9807 32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 92.6538 64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C110.327 96 96 110.327 96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "myr": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nac": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nal": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M2.82114e-06 110C60.7513 110 110 60.7513 110 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-5.09828e-06 73C40.3168 73 73 40.3168 73 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-6.63647e-07 37C20.4345 37 37 20.4345 37 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nam": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "8.74228e-08", + "y1": "64", + "x2": "128", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "112", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "112", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nap": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nar": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "8", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nat": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-1.52588e-05 128C-9.07866e-06 57.3075 57.3076 1.44926e-06 128 7.62939e-06", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nav": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C101.492 96 77.4939 85.2564 60.1217 67.8862", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C110.328 64 94.3287 56.8374 82.7471 45.2568", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32.3716C119.164 32.3716 111.164 28.7903 105.374 23", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "neb": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32C74.9807 32 32 74.9807 32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nec": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ned": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nel": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00268555 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 1.90735e-06C96 53.0193 53.0193 96 0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nem": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 92.6538 64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nep": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128C57.3076 128 3.09007e-06 70.6925 0 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C74.9807 96 32 53.0193 32 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32C110.327 32 96 17.6731 96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ner": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9965", + "y1": "111.997", + "x2": "47.9965", + "y2": "79.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nes": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "net": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 64L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nev": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nex": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 -7.62939e-06L64 -2.03434e-06C99.3462 1.05573e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9964", + "x2": "112.003", + "y2": "111.996", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nib": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96L0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nid": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128C92.6538 128 64 70.6925 64 7.63192e-07", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nil": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-8.87604e-09", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "32", + "x2": "-8.87604e-09", + "y2": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nim": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 64V128H0L2.79753e-06 64C4.34256e-06 28.6538 28.6538 -1.54503e-06 64 0C99.3462 1.54503e-06 128 28.6538 128 64Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nis": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32C74.9807 32 32 74.9807 32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00285435 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "noc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nod": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nol": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "1.51277e-05", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nom": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nop": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "y1": "-0.5", + "x2": "45.2548", + "y2": "-0.5", + "transform": "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.65)", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nor": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 96C46.3269 96 32 81.6731 32 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nos": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nov": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M2.03434e-06 128C70.6924 128 128 70.6925 128 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.52575e-06 96C53.0193 96 96 53.0193 96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.01717e-06 64C35.3462 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M5.08584e-07 32C17.6731 32 32 17.6731 32 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nub": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nul": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "num": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nup": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 -7.62939e-06L64 -2.03434e-06C99.3462 1.05573e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 16C90.5097 16 112 37.4903 112 64C112 90.5097 90.5097 112 64 112", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nus": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0.000105172 128C35.3582 128 67.3679 113.664 90.5332 90.4863", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "31", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "31", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nut": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9964", + "x2": "112.003", + "y2": "111.996", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "y1": "-0.5", + "x2": "45.2548", + "y2": "-0.5", + "transform": "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.6499 47.6499)", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nux": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96L0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32L0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nyd": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nyl": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 128C4.63574e-06 92.6489 14.3309 60.6449 37.5 37.4807", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 128C32 101.492 42.7436 77.4939 60.1138 60.1217", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 128C64 110.328 71.1626 94.3287 82.7432 82.7471", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M95.6284 128C95.6284 119.164 99.2097 111.164 105 105.374", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nym": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0L96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nyr": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00268555 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M95.9984 0C95.9984 26.3298 85.3985 50.1839 68.2332 67.5278M63.9983 0C63.9983 17.4933 56.9799 33.3473 45.6054 44.8999M31.9983 0C31.9983 8.65672 28.5609 16.5106 22.9766 22.2711", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nys": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nyt": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 32C81.6731 32 96 46.3269 96 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 16C90.5097 16 112 37.4903 112 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nyx": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pac": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pad": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pag": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9964", + "y1": "111.997", + "x2": "47.9964", + "y2": "79.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pal": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C101.492 96 77.4939 85.2564 60.1217 67.8862", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C110.328 64 94.3287 56.8374 82.7471 45.2568", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32.3716C119.164 32.3716 111.164 28.7903 105.374 23", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pan": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M41.3726 86.6274C28.8758 74.1306 28.8758 53.8693 41.3726 41.3725C53.8694 28.8758 74.1306 28.8758 86.6274 41.3725", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "par": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.693 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pas": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0L96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pat": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 -2.67054e-06C32 53.0193 74.9807 96 128 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 -1.78036e-06C64 35.3462 92.6538 64 128 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 -8.9018e-07C96 17.6731 110.327 32 128 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pec": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ped": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "peg": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0C96 17.6731 81.6731 32 64 32C46.3269 32 32 17.6731 32 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pel": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M112 64C112 37.4903 90.5097 16 64 16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pem": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 128C64 92.6538 35.3462 64 0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pen": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0C96 17.6731 81.6731 32 64 32C46.3269 32 32 17.6731 32 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "per": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 64L5.59506e-06 0L128 1.11901e-05V64C128 99.3462 99.3462 128 64 128C28.6538 128 -4.6351e-06 99.3462 0 64Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pes": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 112C90.5097 112 112 90.5097 112 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.00285417", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pet": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9964", + "x2": "112.003", + "y2": "111.996", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pex": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pic": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 128C96 74.9807 53.0193 32 0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 128C64 92.6538 35.3462 64 0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 128C32 110.327 17.6731 96 0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pid": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pil": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pin": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pit": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "poc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64.5", + "y1": "-0.5", + "x2": "64.5", + "y2": "127.5", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "96.5", + "y1": "-0.5", + "x2": "96.5", + "y2": "127.5", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "32.5", + "y1": "-0.5", + "x2": "32.5", + "y2": "127.5", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pod": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "96", + "x2": "-8.87604e-09", + "y2": "96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pol": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "32", + "x2": "-8.87604e-09", + "y2": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pon": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pos": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pub": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pun": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M112 64C112 37.4903 90.5097 16 64 16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 64C96 46.3269 81.6731 32 64 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M80 64C80 55.1634 72.8366 48 64 48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pur": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M3.73284e-05 64C17.6633 64 33.6554 56.8445 45.2356 45.2741", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "put": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pyl": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-5.59506e-06 128C35.3462 128 64 99.3462 64 64C64 28.6538 35.3462 1.54503e-06 0 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pyx": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rab": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9965", + "y1": "111.997", + "x2": "47.9964", + "y2": "79.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rac": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rad": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rag": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0036", + "y1": "15.9965", + "x2": "48.0036", + "y2": "47.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ral": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ram": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ran": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00291443 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rap": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "-1.29797e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rav": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32L0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "reb": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 -9.40976e-06C57.3075 -6.31969e-06 -3.09007e-06 57.3075 0 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rec": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "red": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ref": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "reg": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C110.327 96 96 81.6731 96 64C96 46.3269 110.327 32 128 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rel": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96L0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32L0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rem": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ren": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9965", + "x2": "112.003", + "y2": "111.997", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rep": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 128C32 74.9807 74.9807 32 128 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "res": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9965", + "x2": "112.003", + "y2": "111.997", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ret": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rev": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9965", + "y1": "111.997", + "x2": "53.9965", + "y2": "73.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rex": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rib": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "8.74228e-08", + "y1": "64", + "x2": "128", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ric": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 128C96 74.9807 53.0193 32 0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rid": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0L96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rig": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ril": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.693 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rin": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "32", + "y1": "2.18557e-08", + "x2": "32", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rip": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 64C96 46.3269 81.6731 32 64 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ris": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0C128 35.3511 113.669 67.3551 90.5 90.5193", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0C96 26.5077 85.2564 50.5061 67.8862 67.8783", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0C64 17.6721 56.8374 33.6713 45.2568 45.2529", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32.3716 0C32.3716 8.83603 28.7903 16.8356 23 22.6264", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rit": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "riv": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "roc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "112", + "cy": "16", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "112", + "cy": "16", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rol": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 16C90.5097 16 112 37.4903 112 64C112 90.5097 90.5097 112 64 112", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ron": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0C128 70.6924 70.6925 128 0 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rop": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M112 64C112 37.4903 90.5097 16 64 16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ros": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rov": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0C128 35.3511 113.669 67.3551 90.5 90.5193", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0C96 26.5077 85.2564 50.5061 67.8862 67.8783", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0C64 17.6721 56.8374 33.6713 45.2568 45.2529", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32.3716 0C32.3716 8.83603 28.7903 16.8356 23 22.6264", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ruc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32L0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rud": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rul": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9964", + "x2": "112.003", + "y2": "111.996", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rum": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M5.08584e-07 32C17.6731 32 32 17.6731 32 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "run": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0L96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rup": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 112C90.5097 112 112 90.5097 112 64C112 37.4903 90.5097 16 64 16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rus": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 128C64 92.6538 35.3462 64 0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rut": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rux": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 64C32 81.6731 46.3269 96 64 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ryc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96L0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ryd": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 64C96 81.6731 81.6731 96 64 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ryg": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-2.79795e-06 -3.55988e-06C70.6924 -4.40288e-06 128 57.3075 128 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0035", + "y1": "15.9965", + "x2": "48.0035", + "y2": "47.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ryl": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128C92.6489 128 60.6449 113.669 37.4807 90.5", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C101.492 96 77.4939 85.2564 60.1217 67.8862", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C110.328 64 94.3287 56.8374 82.7471 45.2568", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32.3716C119.164 32.3716 111.164 28.7903 105.374 23", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rym": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96L0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ryn": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128C57.3075 128 -3.09007e-06 70.6925 0 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ryp": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rys": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.52575e-06 96C53.0193 96 96 53.0193 96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ryt": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 -7.62939e-06L64 -2.03434e-06C99.3462 1.05573e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ryx": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sab": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "y1": "-0.5", + "x2": "45.2548", + "y2": "-0.5", + "transform": "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.65)", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sal": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 128L128 0", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.701724 31.9914C25.6281 31.9914 49.4822 42.5913 66.8261 59.7565M-0.701723 63.9914C16.7916 63.9914 32.6456 71.0098 44.1982 82.3844M-0.701722 95.9914C7.955 95.9914 15.8089 99.4288 21.5694 105.013", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sam": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "san": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sap": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-4.37114e-08", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "8", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sar": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sat": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 0 0 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sav": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 64C96 46.3269 81.6731 32 64 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "seb": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sec": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sed": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sef": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "seg": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 128C32 110.327 46.3269 96 64 96C81.6731 96 96 110.327 96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sel": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "8", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sem": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.01717e-06 64C35.3462 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sen": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 128C96 110.327 81.6731 96 64 96C46.3269 96 32 110.327 32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sep": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 128L64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 128L32 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 128L96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ser": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 64L5.59506e-06 0L128 1.11901e-05V64C128 99.3462 99.3462 128 64 128C28.6538 128 -4.6351e-06 99.3462 0 64Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "set": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 64L128 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sev": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sib": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 9.40976e-06C64 35.3462 92.6538 64 128 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sic": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sid": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128C110.327 128 96 113.673 96 96C96 78.3269 110.327 64 128 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sig": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sil": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0036", + "y1": "15.9965", + "x2": "48.0036", + "y2": "47.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sim": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 64V128H0L2.79753e-06 64C4.34256e-06 28.6538 28.6538 -1.54503e-06 64 0C99.3462 1.54503e-06 128 28.6538 128 64Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sip": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M16 64C16 37.4903 37.4903 16 64 16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sit": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "siv": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96L0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "soc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "16", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "16", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sog": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 96C81.6731 96 96 81.6731 96 64C96 46.3269 81.6731 32 64 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sol": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L-5.96046e-08 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "som": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "son": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "127.553", + "y1": "128.224", + "x2": "63.5528", + "y2": "0.223598", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sop": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sor": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0C128 35.3511 113.669 67.3551 90.5 90.5193", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0C96 26.5077 85.2564 50.5061 67.8862 67.8783", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0C64 17.6721 56.8374 33.6713 45.2568 45.2529", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32.3716 0C32.3716 8.83603 28.7903 16.8356 23 22.6264", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sov": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 128L128 0", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128C92.6489 128 60.6449 113.669 37.4807 90.5", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C101.492 96 77.4939 85.2564 60.1217 67.8862", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C110.328 64 94.3287 56.8374 82.7471 45.2568", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32.3716C119.164 32.3716 111.164 28.7903 105.374 23", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sub": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sud": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-8.87604e-09", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sug": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sul": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 96C46.3269 96 32 81.6731 32 64C32 46.3269 46.3269 32 64 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sum": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.01717e-06 64C35.3462 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sun": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "80", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "80", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "48", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "48", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "48", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "48", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "80", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "80", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sup": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 112C90.5097 112 112 90.5097 112 64C112 37.4903 90.5097 16 64 16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sur": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M3.73284e-05 64.0001C17.6633 64.0001 33.6554 56.8446 45.2356 45.2742", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0.000105172 128C35.3582 128 67.3679 113.664 90.5332 90.4863", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sut": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "syd": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 16C37.4903 16 16 37.4903 16 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "syl": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sym": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "96.5", + "y1": "3.07317e-08", + "x2": "96.5", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "syn": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 0C35.3511 0 67.3551 14.3309 90.5193 37.5", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 32C26.5077 32 50.5061 42.7436 67.8783 60.1138", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 64C17.6721 64 33.6713 71.1626 45.2529 82.7432", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 95.6284C8.83603 95.6284 16.8356 99.2097 22.6264 105", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "syp": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.01717e-06 64C35.3462 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "syr": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "syt": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "syx": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 128C4.63574e-06 92.6488 14.3309 60.6449 37.5 37.4807", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 128C32 101.492 42.7436 77.4939 60.1138 60.1216", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 128C64 110.328 71.1626 94.3287 82.7432 82.7471", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M95.6284 128C95.6284 119.164 99.2097 111.164 105 105.374", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tab": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "8", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tac": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tad": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tag": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0036", + "y1": "79.9964", + "x2": "112.004", + "y2": "111.996", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tal": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 128C96 74.9807 53.0193 32 0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tam": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "96", + "x2": "-8.87604e-09", + "y2": "96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "32", + "x2": "-8.87604e-09", + "y2": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tan": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 128C96 74.9807 53.0193 32 0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 128C64 92.6538 35.3462 64 0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M48 128C48 101.49 26.5097 80 0 80", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 128C32 110.327 17.6731 96 0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M16 128C16 119.163 8.83656 112 0 112", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3075 70.6925 0 0 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tap": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-8.87604e-09", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 32C81.6731 32 96 46.3269 96 64C96 81.6731 81.6731 96 64 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tar": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tas": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 32C81.6731 32 96 46.3269 96 64C96 81.6731 81.6731 96 64 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "teb": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.52575e-06 96C53.0193 96 96 53.0193 96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tec": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9965", + "x2": "112.003", + "y2": "111.997", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ted": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "teg": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 80C119.163 80 112 72.8366 112 64C112 55.1634 119.163 48 128 48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tel": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "15", + "cy": "112", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "15", + "cy": "112", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 0L127.986 127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L128 96", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L128 64", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0L128 32", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tem": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 92.6538 64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.00285417", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ten": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "48", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "48", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "48", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "48", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "80", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "80", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "80", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "80", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tep": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.14479e-06 96C53.0193 96 96 53.0193 96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ter": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 64L5.59506e-06 0L128 1.11901e-05V64C128 99.3462 99.3462 128 64 128C28.6538 128 -4.6351e-06 99.3462 0 64Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "96.5", + "y1": "3.07317e-08", + "x2": "96.5", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.01717e-06 64C35.3462 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tes": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tev": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tex": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9965", + "y1": "111.997", + "x2": "47.9965", + "y2": "79.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tic": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32C110.327 32 96 17.6731 96 -1.39876e-06", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tid": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "96", + "y1": "2.18557e-08", + "x2": "96", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M112 32C112 40.8366 104.837 48 96 48C87.1634 48 80 40.8366 80 32C80 23.1634 87.1634 16 96 16C104.837 16 112 23.1634 112 32ZM96 40C100.418 40 104 36.4183 104 32C104 27.5817 100.418 24 96 24C91.5817 24 88 27.5817 88 32C88 36.4183 91.5817 40 96 40Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "til": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0036", + "y1": "79.9965", + "x2": "112.004", + "y2": "111.997", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tim": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 64V128H0L2.79753e-06 64C4.34256e-06 28.6538 28.6538 -1.54503e-06 64 0C99.3462 1.54503e-06 128 28.6538 128 64Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00291443 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tin": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "32", + "y1": "2.18557e-08", + "x2": "32", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tip": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tir": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tob": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 64V128H0L2.79753e-06 64C4.34256e-06 28.6538 28.6538 -1.54503e-06 64 0C99.3462 1.54503e-06 128 28.6538 128 64Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96L0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "toc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "96", + "x2": "-8.87604e-09", + "y2": "96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tod": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tog": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 96C46.3269 96 32 81.6731 32 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tol": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-4.37114e-08", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M16 128C16 101.49 37.4903 80 64 80C90.5097 80 112 101.49 112 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tom": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ton": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32C74.9807 32 32 74.9807 32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 92.6538 64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C110.327 96 96 110.327 96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "top": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tor": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tuc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96L0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tud": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tug": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32L0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tul": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tun": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 64V128H0L2.79753e-06 64C4.34256e-06 28.6538 28.6538 -1.54503e-06 64 0C99.3462 1.54503e-06 128 28.6538 128 64Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tus": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tux": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tyc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tyd": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "y1": "-0.5", + "x2": "45.2548", + "y2": "-0.5", + "transform": "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.6499)", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9964", + "y1": "111.997", + "x2": "47.9964", + "y2": "79.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tyl": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M7.37542e-06 -3.56072e-06C1.19529e-06 70.6924 57.3075 128 128 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tyn": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 -2.28831e-06C57.3076 -3.13131e-06 8.42999e-07 57.3075 0 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "typ": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 1.90735e-06C96 53.0193 53.0193 96 0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tyr": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 0L128 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 64C35.3462 64 64 92.6538 64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tyv": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M256 0L128 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wac": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wal": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64.5", + "y1": "-0.5", + "x2": "64.5", + "y2": "127.5", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "32", + "y1": "2.18557e-08", + "x2": "32", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wan": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wat": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "web": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3075 70.6925 0 0 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wed": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "weg": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M79.5254 0C79.5254 8.83656 72.3619 16 63.5254 16C54.6888 16 47.5254 8.83656 47.5254 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wel": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32C74.9807 32 32 74.9807 32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 92.6538 64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C110.327 96 96 110.327 96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wen": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.01717e-06 64C35.3462 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wep": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wer": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 64L5.59506e-06 0L128 1.11901e-05V64C128 99.3462 99.3462 128 64 128C28.6538 128 -4.6351e-06 99.3462 0 64Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wes": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9965", + "x2": "112.003", + "y2": "111.997", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "112", + "cy": "112", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "112", + "cy": "112", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wet": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 64H0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wex": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wic": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wid": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "48.0035", + "y1": "80.0036", + "x2": "16.0035", + "y2": "112.004", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "win": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wis": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32L0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wit": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "32", + "y1": "2.18557e-08", + "x2": "32", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "96", + "y1": "2.18557e-08", + "x2": "96", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wol": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 64L128 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C110.327 96 96 81.6731 96 64C96 46.3269 110.327 32 128 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wor": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "y1": "-0.5", + "x2": "45.2548", + "y2": "-0.5", + "transform": "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.65)", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 96C46.3269 96 32 81.6731 32 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wyc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wyd": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 64C32 46.3269 46.3269 32 64 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wyl": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-3.8147e-06 128C-7.24633e-07 92.6538 28.6538 64 64 64C99.3462 64 128 92.6538 128 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wyn": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.52575e-06 96C53.0193 96 96 53.0193 96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.01717e-06 64C35.3462 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M5.08584e-07 32C17.6731 32 32 17.6731 32 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wyt": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wyx": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "zod": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + } +} diff --git a/fe/src/ui/sigil-ts/index.ts b/fe/src/ui/sigil-ts/index.ts new file mode 100644 index 0000000..a9b5ac5 --- /dev/null +++ b/fe/src/ui/sigil-ts/index.ts @@ -0,0 +1,296 @@ +import { scale, translate, transform, toString } from 'transformation-matrix'; +import invariant from 'invariant'; + +import stringRenderer from './stringRenderer'; +import reactRenderer from './reactRenderer'; +import reactImageRenderer from './reactImageRenderer'; +import { Ast, Config } from './types'; +import { deepClone, chunkStr, isUndefined } from './lib'; +import index from './index.json'; + +const FG = 1; +const BG = 0; + +const COLOR_CODES = { + FG: '@FG', + BG: '@BG', +}; + +const UNIT_GRIDS = { + 4: [ + { x: 0, y: 0 }, + { x: 128, y: 0 }, + { x: 0, y: 128 }, + { x: 128, y: 128 }, + ], + 2: [ + { x: 0, y: 0 }, + { x: 128, y: 0 }, + ], + 1: [{ x: 0, y: 0 }], +}; + +const TILEMAP = { + 4: { x: 2, y: 2 }, + 2: { x: 2, y: 1 }, + 1: { x: 1, y: 1 }, +}; + +// class ConfigError extends Error {} + +// apply color preference +const paint = (node: Ast, colors: [string, string], strokeWidth: number): Ast => { + const fillIndex = node.attributes.fill === COLOR_CODES.FG ? FG : BG; + const strokeIndex = node.attributes.stroke === COLOR_CODES.FG ? FG : BG; + + if (node.attributes.fill !== undefined && node.attributes.fill !== 'none') { + node.attributes.fill = colors[fillIndex]; + } + + if (node.attributes.stroke !== undefined && node.attributes.stroke !== 'none') { + node.attributes.stroke = colors[strokeIndex]; + node.attributes['stroke-width'] = strokeWidth + 'px'; + node.attributes['stroke-linecap'] = 'square'; + // non-scaling-stroke is used to prevent the stroke from scaling when a scaling transformation is applied by sigil() + node.attributes['vector-effect'] = 'non-scaling-stroke'; + } + + return { + ...node, + ...{ + name: node.name, + attributes: node.attributes, + children: node.children.map((n) => paint(n, colors, strokeWidth)), + }, + }; +}; + +const sigil = (props: Config) => { + props = { ...props }; + + // Set default values from config + if (typeof props.colors === 'undefined') { + props.colors = ['#000', '#fff']; + } + + if (typeof props.attributes === 'undefined') { + props.attributes = {}; + } + + if (typeof props.style === 'undefined') { + props.style = {}; + } + + if (typeof props.class === 'undefined') { + props.class = ''; + } + + // if props.size is defined, set width and height + if (!(typeof props.size === 'undefined')) { + props.width = props.size; + props.height = props.size; + } + + // if width and height are undefined, set default size + if (typeof props.width === 'undefined' || typeof props.height === 'undefined') { + props.width = 128; + props.height = 128; + } + + if (typeof props.margin === 'undefined') { + props.margin = true; + } + + if (props.icon === true) { + props.margin = false; + } + + // get phonemes as array from patp input and split into array + let phonemes = chunkStr(props.patp.replace(/[\^~-]/g, ''), 3); + + invariant(Array.isArray(phonemes), `Invalid patp argument`); + + // Throw an error if the phoneme length is not a 32, 16 or 8 bit point. + const phonemeLengthDidPass = + phonemes.length === 1 || phonemes.length === 2 || phonemes.length === 4; + + invariant( + phonemeLengthDidPass, + `@tlon/sigil-js cannot render @p of length ${phonemes.length}. Only lengths of 1 (galaxy), 2 (star), and 4 (planet) are supported at this time.`, + ); + + // get symbols and clone them. If no symbol is found, the @p prop was invalid. + let patpDidPass; + + let symbols = phonemes.map((phoneme) => { + // @ts-ignore + const ast = index[phoneme]; + if (isUndefined(ast)) { + patpDidPass = false; + return {}; + } else { + patpDidPass = true; + return deepClone(ast); + } + }); + + invariant( + patpDidPass, + `@tlon/sigil-js needs a valid patp (point name). Patp field is invalid. Recieved ${props.patp}`, + ); + + if (props.icon === true) { + symbols = symbols.map((s: Ast) => { + return { + ...s, + children: s.children.filter((c: Ast) => c.attributes['dataisgeon']), + }; + }); + } + + const tier = symbols.length === 4 ? 4 : symbols.length === 2 ? 2 : 1; + + // get a grid according to the point's tier (planet, start, galaxy) + const grid = UNIT_GRIDS[tier]; + + // Move each symbol into it's new x/y position on a unit rectangle sized 256 by 256. + for (let i = 0; i < grid.length; i++) { + const positionTransform = toString(translate(grid[i].x, grid[i].y)); + if (symbols[i].attributes === undefined) { + symbols[i].attributes = {}; + } + symbols[i].attributes.transform = positionTransform; + } + + // Create a variable that will store a ratio used to scale the symbolsGroup to its final size driven primarily by props.size, or props.width fallback. + let resizeRatio; + + if (tier === 1) { + // If there is only 1 symbol being drawn + if (props.margin === true) { + // If this symbol will be drawn with a margin + resizeRatio = 0.5 * 0.8; + } else { + // If this symbol will be drawn without a margin + resizeRatio = 1; + } + } else { + // If the sigils is 2 symbols wide + if (props.margin === true) { + // If this symbol will be drawn with a margin + resizeRatio = 0.5 * 0.8; + } else { + // If this symbol will be drawn without a margin + resizeRatio = 0.5; + } + } + + // Calculate the size of each symbol - IE, for planets, there are four symbols. + const symbolSize = { + x: props.width * resizeRatio, + y: props.height * resizeRatio, + }; + + // Calculate the left and top margins that will be used to transform the symbolsGroup. + const marginPx = { + x: (props.width - TILEMAP[tier].x * symbolSize.x) / 2, + y: (props.height - TILEMAP[tier].y * symbolSize.y) / 2, + }; + + if (props.margin === false || props.icon === true) { + marginPx.x = 0; + if (props.icon !== true) { + marginPx.y = 0; + } + } + + // Calculate how much the symbolsGroups should change in scale. 128 is the unit size of the SVGs as drawn in their source file. + const symbolsGroupScale = symbolSize.x / 128; + + // First translate the symbols group to a centered x/y position, then scale the group to it's final size. + const scaleAndCenteringTransform = toString( + transform( + translate(marginPx.x, marginPx.y), + scale(symbolsGroupScale, symbolsGroupScale), + ), + ); + + // Create a SVG AST group and assign the transformation and child symbols to it. + const symbolsGroup = { + name: 'g', + type: '', + value: '', + attributes: { + transform: scaleAndCenteringTransform, + }, + children: symbols, + }; + + if (props.style === undefined) { + props.style = {}; + } + + if (props.style.width === undefined) { + props.style.width = `${props.width}px`; + } + + if (props.style.height === undefined) { + props.style.height = `${props.height}px`; + } + + const wrapped = { + name: 'svg', + type: '', + value: '', + attributes: { + style: { + // prevent bottom margin on svg tag + display: 'block', + ...props.style, + }, + viewBox: `0 0 ${props.width} ${props.height}`, + version: '1.1', + xmlns: 'http://www.w3.org/2000/svg', + class: props.class, + ...props.attributes, + }, + children: [ + // Background rectangle + { + name: 'rect', + type: '', + value: '', + attributes: { + fill: COLOR_CODES.BG, + width: `${props.width}px`, + height: `${props.height}px`, + x: 0 + 'px', + y: 0 + 'px', + }, + children: [], + }, + symbolsGroup, + ], + }; + + // Calculate a strokeWidth based on props.size + let strokeWidth; + + if (props.strokeScalingFunction) { + strokeWidth = props.strokeScalingFunction(props.size); + } else { + strokeWidth = props.width / 128 + 0.33; + } + + if (props.icon === true) { + strokeWidth = 0.8; + } + + // Recursively apply color and other style attributes. + const out = paint(wrapped, props.colors, strokeWidth); + + // If a renderer function has been provided, call this renderer with provided AST. If there is no renderer, return the AST. + return props.renderer === undefined ? out : props.renderer(out); +}; + +export { sigil, stringRenderer, reactRenderer, reactImageRenderer }; diff --git a/fe/src/ui/sigil-ts/lib.ts b/fe/src/ui/sigil-ts/lib.ts new file mode 100644 index 0000000..b27775b --- /dev/null +++ b/fe/src/ui/sigil-ts/lib.ts @@ -0,0 +1,17 @@ +const deepClone = (v: any) => JSON.parse(JSON.stringify(v)); + +const chunkStr = (str: string, size: number) => { + const r = new RegExp(`.{1,${size}}`, 'g'); + return str.match(r); +}; + +const compose = (...fns: Array) => { + return fns.reduce((f, g) => (...xs: any) => { + const r = g(...xs); + return Array.isArray(r) ? f(...r) : f(r); + }); +}; + +const isUndefined = (v: any) => typeof v === 'undefined'; + +export { deepClone, chunkStr, compose, isUndefined }; diff --git a/fe/src/ui/sigil-ts/reactImageRenderer.ts b/fe/src/ui/sigil-ts/reactImageRenderer.ts new file mode 100644 index 0000000..f67025d --- /dev/null +++ b/fe/src/ui/sigil-ts/reactImageRenderer.ts @@ -0,0 +1,24 @@ +import React from 'react'; +import stringRenderer from './stringRenderer'; +import { Ast } from './types'; + +const reactImageRenderer = (node: Ast) => { + let w; + let h; + + if (node.attributes.style) { + w = node.attributes.style.width || ''; + h = node.attributes.style.height || ''; + } + + return React.createElement('div', { + style: { + backgroundRepeat: 'no-repeat', + width: w, + height: h, + backgroundImage: `url(data:image/svg+xml;base64,${btoa(stringRenderer(node))})`, + }, + }); +}; + +export default reactImageRenderer; diff --git a/fe/src/ui/sigil-ts/reactRenderer.ts b/fe/src/ui/sigil-ts/reactRenderer.ts new file mode 100644 index 0000000..01b57c5 --- /dev/null +++ b/fe/src/ui/sigil-ts/reactRenderer.ts @@ -0,0 +1,21 @@ +import * as React from 'react'; +import { Ast } from './types'; + +const toCamelCase = (s: string) => s.replace(/-([a-z])/g, (g) => g[1].toUpperCase()); + +const attributesToProps = (o: {}) => + Object.entries(o).reduce((a, [k, v]) => { + if (k === 'class') k = 'className'; + return { ...a, [`${toCamelCase(k)}`]: v }; + }, {}); + +const reactRenderer = (node: Ast, i: string): JSX.Element => { + if (i === undefined) i = ''; + return React.createElement( + node.name, + { ...attributesToProps(node.attributes), key: `${i}` }, + node.children.map((child, j) => reactRenderer(child, `${i}:${j}`)), + ); +}; + +export default reactRenderer; diff --git a/fe/src/ui/sigil-ts/stringRenderer.ts b/fe/src/ui/sigil-ts/stringRenderer.ts new file mode 100644 index 0000000..c70a0de --- /dev/null +++ b/fe/src/ui/sigil-ts/stringRenderer.ts @@ -0,0 +1,10 @@ +// @ts-ignore +import { stringify } from 'svgson'; +import { Ast } from './types'; + +const stringRenderer = (ast: Ast) => { + if (ast.attributes.style !== undefined) delete ast.attributes.style; + return stringify(ast as any); +}; + +export default stringRenderer; diff --git a/fe/src/ui/sigil-ts/types.ts b/fe/src/ui/sigil-ts/types.ts new file mode 100644 index 0000000..06f0b57 --- /dev/null +++ b/fe/src/ui/sigil-ts/types.ts @@ -0,0 +1,54 @@ +export type Attributes = { + style?: { + [key: string]: string; + }; + version?: string; + class?: string; + width?: string; + height?: string; + viewBox?: string; + fill?: string; + xmlns?: string; + id?: string; + 'clip-path'?: string; + d?: string; + stroke?: string; + 'stroke-width'?: string; + x1?: string; + x2?: string; + y2?: string; + 'stroke-linecap'?: string; + cx?: string; + cy?: string; + r?: string; + x?: string; + y?: string; + transform?: string; + 'vector-effect'?: string; + dataisgeon?: string; +}; + +export type Ast = { + name: string; + type: string; + value: string; + attributes: Attributes; + children: Ast[]; +}; + +export type Config = { + patp: string; + colors?: [string, string]; + attributes?: Attributes; + style?: { + [key: string]: string; + }; + class?: string; + size?: number; + width?: number; + height?: number; + margin?: boolean; + strokeScalingFunction?: Function; + renderer?: Function; + icon?: boolean; +}; diff --git a/fe/src/ui/sign-up/CustomIcons.tsx b/fe/src/ui/sign-up/CustomIcons.tsx new file mode 100644 index 0000000..1c24a77 --- /dev/null +++ b/fe/src/ui/sign-up/CustomIcons.tsx @@ -0,0 +1,120 @@ +import * as React from 'react'; +import SvgIcon from '@mui/material/SvgIcon'; + +export function SitemarkIcon() { + return ( + + + + + + + + + + + + + ); +} + +export function FacebookIcon() { + return ( + + + + + + + + + + + + + ); +} + +export function GoogleIcon() { + return ( + + + + + + + + + ); +} diff --git a/fe/src/ui/sign-up/README.md b/fe/src/ui/sign-up/README.md new file mode 100644 index 0000000..aa89e29 --- /dev/null +++ b/fe/src/ui/sign-up/README.md @@ -0,0 +1,15 @@ +# Sign-up template + +## Usage + + + +1. Copy the files into your project, or one of the [example projects](https://github.com/mui/material-ui/tree/master/examples). +2. Make sure your project has the required dependencies: @mui/material, @mui/icons-material, @emotion/styled, @emotion/react. +3. Import and use the `SignUp` component. + +## Demo + + + +View the demo at https://mui.com/material-ui/getting-started/templates/sign-up/. diff --git a/fe/src/ui/sign-up/SignUp.tsx b/fe/src/ui/sign-up/SignUp.tsx new file mode 100644 index 0000000..858dcd1 --- /dev/null +++ b/fe/src/ui/sign-up/SignUp.tsx @@ -0,0 +1,259 @@ +import * as React from 'react'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import Checkbox from '@mui/material/Checkbox'; +import CssBaseline from '@mui/material/CssBaseline'; +import Divider from '@mui/material/Divider'; +import FormControlLabel from '@mui/material/FormControlLabel'; +import FormLabel from '@mui/material/FormLabel'; +import FormControl from '@mui/material/FormControl'; +import Link from '@mui/material/Link'; +import TextField from '@mui/material/TextField'; +import Typography from '@mui/material/Typography'; +import Stack from '@mui/material/Stack'; +import MuiCard from '@mui/material/Card'; +import { createTheme, ThemeProvider, styled, PaletteMode } from '@mui/material/styles'; +import getSignUpTheme from './theme/getSignUpTheme'; +import { GoogleIcon, FacebookIcon, SitemarkIcon } from './CustomIcons'; +import TemplateFrame from './TemplateFrame'; + +const Card = styled(MuiCard)(({ theme }) => ({ + display: 'flex', + flexDirection: 'column', + alignSelf: 'center', + width: '100%', + padding: theme.spacing(4), + gap: theme.spacing(2), + margin: 'auto', + boxShadow: + 'hsla(220, 30%, 5%, 0.05) 0px 5px 15px 0px, hsla(220, 25%, 10%, 0.05) 0px 15px 35px -5px', + [theme.breakpoints.up('sm')]: { + width: '450px', + }, + ...theme.applyStyles('dark', { + boxShadow: + 'hsla(220, 30%, 5%, 0.5) 0px 5px 15px 0px, hsla(220, 25%, 10%, 0.08) 0px 15px 35px -5px', + }), +})); + +const SignUpContainer = styled(Stack)(({ theme }) => ({ + minHeight: '100%', + padding: theme.spacing(2), + [theme.breakpoints.up('sm')]: { + padding: theme.spacing(4), + }, + backgroundImage: + 'radial-gradient(ellipse at 50% 50%, hsl(210, 100%, 97%), hsl(0, 0%, 100%))', + backgroundRepeat: 'no-repeat', + ...theme.applyStyles('dark', { + backgroundImage: + 'radial-gradient(at 50% 50%, hsla(210, 100%, 16%, 0.5), hsl(220, 30%, 5%))', + }), +})); + +export default function SignUp() { + const [mode, setMode] = React.useState('light'); + const [showCustomTheme, setShowCustomTheme] = React.useState(true); + const defaultTheme = createTheme({ palette: { mode } }); + const SignUpTheme = createTheme(getSignUpTheme(mode)); + const [nameError, setNameError] = React.useState(false); + const [nameErrorMessage, setNameErrorMessage] = React.useState(''); + const [emailError, setEmailError] = React.useState(false); + const [emailErrorMessage, setEmailErrorMessage] = React.useState(''); + const [passwordError, setPasswordError] = React.useState(false); + const [passwordErrorMessage, setPasswordErrorMessage] = React.useState(''); + // This code only runs on the client side, to determine the system color preference + React.useEffect(() => { + // Check if there is a preferred mode in localStorage + const savedMode = localStorage.getItem('themeMode') as PaletteMode | null; + if (savedMode) { + setMode(savedMode); + } else { + // If no preference is found, it uses system preference + const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches; + setMode(systemPrefersDark ? 'dark' : 'light'); + } + }, []); + + const toggleColorMode = () => { + const newMode = mode === 'dark' ? 'light' : 'dark'; + setMode(newMode); + localStorage.setItem('themeMode', newMode); // Save the selected mode to localStorage + }; + + const toggleCustomTheme = () => { + setShowCustomTheme((prev) => !prev); + }; + + const validateInputs = () => { + const email = document.getElementById('email') as HTMLInputElement; + const password = document.getElementById('password') as HTMLInputElement; + const name = document.getElementById('name') as HTMLInputElement; + + let isValid = true; + + if (!email.value || !/\S+@\S+\.\S+/.test(email.value)) { + setEmailError(true); + setEmailErrorMessage('Please enter a valid email address.'); + isValid = false; + } else { + setEmailError(false); + setEmailErrorMessage(''); + } + + if (!password.value || password.value.length < 6) { + setPasswordError(true); + setPasswordErrorMessage('Password must be at least 6 characters long.'); + isValid = false; + } else { + setPasswordError(false); + setPasswordErrorMessage(''); + } + + if (!name.value || name.value.length < 1) { + setNameError(true); + setNameErrorMessage('Name is required.'); + isValid = false; + } else { + setNameError(false); + setNameErrorMessage(''); + } + + return isValid; + }; + + const handleSubmit = (event: React.FormEvent) => { + if (nameError || emailError || passwordError) { + event.preventDefault(); + return; + } + const data = new FormData(event.currentTarget); + console.log({ + name: data.get('name'), + lastName: data.get('lastName'), + email: data.get('email'), + password: data.get('password'), + }); + }; + + return ( + + + + + + + + Sign up + + + + Full name + + + + Email + + + + Password + + + } + label="I want to receive updates via email." + /> + + + Already have an account?{' '} + + + Sign in + + + + + + or + + + + + + + + + + ); +} diff --git a/fe/src/ui/sign-up/TemplateFrame.tsx b/fe/src/ui/sign-up/TemplateFrame.tsx new file mode 100644 index 0000000..15f6cf5 --- /dev/null +++ b/fe/src/ui/sign-up/TemplateFrame.tsx @@ -0,0 +1,115 @@ +import * as React from 'react'; +import { + createTheme, + ThemeProvider, + PaletteMode, + styled, +} from '@mui/material/styles'; +import Select, { SelectChangeEvent } from '@mui/material/Select'; +import MenuItem from '@mui/material/MenuItem'; +import FormControl from '@mui/material/FormControl'; +import Button from '@mui/material/Button'; +import IconButton from '@mui/material/IconButton'; +import Box from '@mui/material/Box'; +import AppBar from '@mui/material/AppBar'; +import Toolbar from '@mui/material/Toolbar'; +import ArrowBackRoundedIcon from '@mui/icons-material/ArrowBackRounded'; +import ToggleColorMode from './ToggleColorMode'; +import getSignUpTheme from './theme/getSignUpTheme'; + +const StyledAppBar = styled(AppBar)(({ theme }) => ({ + position: 'relative', + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + flexShrink: 0, + borderBottom: '1px solid', + borderColor: theme.palette.divider, + backgroundColor: theme.palette.background.paper, + boxShadow: 'none', + backgroundImage: 'none', + zIndex: theme.zIndex.drawer + 1, + flex: '0 0 auto', +})); + +interface TemplateFrameProps { + showCustomTheme: boolean; + toggleCustomTheme: (theme: boolean) => void; + mode: PaletteMode; + toggleColorMode: () => void; + children: React.ReactNode; +} + +export default function TemplateFrame({ + showCustomTheme, + toggleCustomTheme, + mode, + toggleColorMode, + children, +}: TemplateFrameProps) { + const handleChange = (event: SelectChangeEvent) => { + toggleCustomTheme(event.target.value === 'custom'); + }; + const signUpTheme = createTheme(getSignUpTheme(mode)); + + return ( + + + + + + + + + + + + + + + + + {children} + + + ); +} diff --git a/fe/src/ui/sign-up/ToggleColorMode.tsx b/fe/src/ui/sign-up/ToggleColorMode.tsx new file mode 100644 index 0000000..1de6afc --- /dev/null +++ b/fe/src/ui/sign-up/ToggleColorMode.tsx @@ -0,0 +1,34 @@ +import * as React from 'react'; + +import { PaletteMode } from '@mui/material/styles'; +import IconButton, { IconButtonProps } from '@mui/material/IconButton'; + +import ModeNightRoundedIcon from '@mui/icons-material/ModeNightRounded'; +import WbSunnyRoundedIcon from '@mui/icons-material/WbSunnyRounded'; + +interface ToggleColorModeProps extends IconButtonProps { + mode: PaletteMode; + toggleColorMode: () => void; +} + +export default function ToggleColorMode({ + mode, + toggleColorMode, + ...props +}: ToggleColorModeProps) { + return ( + + {mode === 'dark' ? ( + + ) : ( + + )} + + ); +} diff --git a/fe/src/ui/sign-up/getSignUpTheme.tsx b/fe/src/ui/sign-up/getSignUpTheme.tsx new file mode 100644 index 0000000..76dfd82 --- /dev/null +++ b/fe/src/ui/sign-up/getSignUpTheme.tsx @@ -0,0 +1,720 @@ +import * as React from 'react'; +import type {} from '@mui/material/themeCssVarsAugmentation'; +import { createTheme, ThemeOptions, alpha, PaletteMode } from '@mui/material/styles'; + +import CheckBoxOutlineBlankRoundedIcon from '@mui/icons-material/CheckBoxOutlineBlankRounded'; +import CheckRoundedIcon from '@mui/icons-material/CheckRounded'; + +declare module '@mui/material/styles/createPalette' { + interface ColorRange { + 50: string; + 100: string; + 200: string; + 300: string; + 400: string; + 500: string; + 600: string; + 700: string; + 800: string; + 900: string; + } + + interface PaletteColor extends ColorRange {} +} + +const customTheme = createTheme(); + +export const brand = { + 50: 'hsl(210, 100%, 97%)', + 100: 'hsl(210, 100%, 90%)', + 200: 'hsl(210, 100%, 80%)', + 300: 'hsl(210, 100%, 65%)', + 400: 'hsl(210, 98%, 48%)', + 500: 'hsl(210, 98%, 42%)', + 600: 'hsl(210, 98%, 55%)', + 700: 'hsl(210, 100%, 35%)', + 800: 'hsl(210, 100%, 16%)', + 900: 'hsl(210, 100%, 21%)', +}; + +export const gray = { + 50: 'hsl(220, 60%, 99%)', + 100: 'hsl(220, 35%, 94%)', + 200: 'hsl(220, 35%, 88%)', + 300: 'hsl(220, 25%, 80%)', + 400: 'hsl(220, 20%, 65%)', + 500: 'hsl(220, 20%, 42%)', + 600: 'hsl(220, 25%, 35%)', + 700: 'hsl(220, 25%, 25%)', + 800: 'hsl(220, 25%, 10%)', + 900: 'hsl(220, 30%, 5%)', +}; + +export const green = { + 50: 'hsl(120, 80%, 98%)', + 100: 'hsl(120, 75%, 94%)', + 200: 'hsl(120, 75%, 87%)', + 300: 'hsl(120, 61%, 77%)', + 400: 'hsl(120, 44%, 53%)', + 500: 'hsl(120, 59%, 30%)', + 600: 'hsl(120, 70%, 25%)', + 700: 'hsl(120, 75%, 16%)', + 800: 'hsl(120, 84%, 10%)', + 900: 'hsl(120, 87%, 6%)', +}; + +export const orange = { + 50: 'hsl(45, 100%, 97%)', + 100: 'hsl(45, 92%, 90%)', + 200: 'hsl(45, 94%, 80%)', + 300: 'hsl(45, 90%, 65%)', + 400: 'hsl(45, 90%, 40%)', + 500: 'hsl(45, 90%, 35%)', + 600: 'hsl(45, 91%, 25%)', + 700: 'hsl(45, 94%, 20%)', + 800: 'hsl(45, 95%, 16%)', + 900: 'hsl(45, 93%, 12%)', +}; + +export const red = { + 50: 'hsl(0, 100%, 97%)', + 100: 'hsl(0, 92%, 90%)', + 200: 'hsl(0, 94%, 80%)', + 300: 'hsl(0, 90%, 65%)', + 400: 'hsl(0, 90%, 40%)', + 500: 'hsl(0, 90%, 30%)', + 600: 'hsl(0, 91%, 25%)', + 700: 'hsl(0, 94%, 20%)', + 800: 'hsl(0, 95%, 16%)', + 900: 'hsl(0, 93%, 12%)', +}; + +const getDesignTokens = (mode: PaletteMode) => ({ + palette: { + mode, + primary: { + light: brand[200], + main: brand[500], + dark: brand[800], + contrastText: brand[50], + ...(mode === 'dark' && { + contrastText: brand[100], + light: brand[300], + main: brand[400], + dark: brand[800], + }), + }, + warning: { + light: orange[300], + main: orange[400], + dark: orange[800], + ...(mode === 'dark' && { + light: orange[400], + main: orange[500], + dark: orange[700], + }), + }, + error: { + light: red[300], + main: red[400], + dark: red[800], + ...(mode === 'dark' && { + light: red[400], + main: red[500], + dark: red[700], + }), + }, + success: { + light: green[300], + main: green[400], + dark: green[800], + ...(mode === 'dark' && { + light: green[400], + main: green[500], + dark: green[700], + }), + }, + grey: { + ...gray, + }, + divider: mode === 'dark' ? alpha(gray[600], 0.3) : alpha(gray[300], 0.5), + background: { + default: 'hsl(0, 0%, 100%)', + paper: gray[100], + ...(mode === 'dark' && { default: 'hsl(220, 30%, 3%)', paper: gray[900] }), + }, + text: { + primary: gray[800], + secondary: gray[600], + ...(mode === 'dark' && { primary: 'hsl(0, 0%, 100%)', secondary: gray[400] }), + }, + action: { + selected: `${alpha(brand[200], 0.2)}`, + ...(mode === 'dark' && { + selected: alpha(brand[800], 0.2), + }), + }, + }, + typography: { + fontFamily: ['"Inter", "sans-serif"'].join(','), + h1: { + fontSize: customTheme.typography.pxToRem(60), + fontWeight: 600, + lineHeight: 1.2, + letterSpacing: -0.5, + }, + h2: { + fontSize: customTheme.typography.pxToRem(48), + fontWeight: 600, + lineHeight: 1.2, + }, + h3: { + fontSize: customTheme.typography.pxToRem(42), + lineHeight: 1.2, + }, + h4: { + fontSize: customTheme.typography.pxToRem(36), + fontWeight: 500, + lineHeight: 1.5, + }, + h5: { + fontSize: customTheme.typography.pxToRem(20), + fontWeight: 600, + }, + h6: { + fontSize: customTheme.typography.pxToRem(18), + }, + subtitle1: { + fontSize: customTheme.typography.pxToRem(18), + }, + subtitle2: { + fontSize: customTheme.typography.pxToRem(16), + }, + body1: { + fontSize: customTheme.typography.pxToRem(15), + fontWeight: 400, + }, + body2: { + fontSize: customTheme.typography.pxToRem(14), + fontWeight: 400, + }, + caption: { + fontSize: customTheme.typography.pxToRem(12), + fontWeight: 400, + }, + }, + shape: { + borderRadius: 12, + }, +}); + +export default function getSignUpTheme(mode: PaletteMode): ThemeOptions { + return { + ...getDesignTokens(mode), + components: { + MuiButtonBase: { + defaultProps: { + disableTouchRipple: true, + disableRipple: true, + }, + styleOverrides: { + root: { + boxSizing: 'border-box', + transition: 'all 100ms ease', + '&:focus-visible': { + outline: `3px solid ${alpha(brand[400], 0.5)}`, + outlineOffset: '2px', + }, + }, + }, + }, + MuiButton: { + styleOverrides: { + root: ({ theme }) => ({ + boxShadow: 'none', + borderRadius: theme.shape.borderRadius, + textTransform: 'none', + variants: [ + { + props: { + size: 'small', + }, + style: { + height: '2rem', // 32px + padding: '0 0.5rem', + }, + }, + { + props: { + size: 'medium', + }, + style: { + height: '2.5rem', // 40px + }, + }, + { + props: { + color: 'primary', + variant: 'contained', + }, + style: { + color: 'white', + backgroundColor: brand[300], + backgroundImage: `linear-gradient(to bottom, ${alpha(brand[400], 0.8)}, ${brand[500]})`, + boxShadow: `inset 0 2px 0 ${alpha(brand[200], 0.2)}, inset 0 -2px 0 ${alpha(brand[700], 0.4)}`, + border: `1px solid ${brand[500]}`, + '&:hover': { + backgroundColor: brand[700], + boxShadow: 'none', + }, + '&:active': { + backgroundColor: brand[700], + boxShadow: `inset 0 2.5px 0 ${alpha(brand[700], 0.4)}`, + }, + }, + }, + { + props: { + variant: 'outlined', + }, + style: { + color: brand[700], + backgroundColor: alpha(brand[300], 0.1), + borderColor: alpha(brand[200], 0.8), + boxShadow: `inset 0 2px ${alpha(brand[50], 0.5)}, inset 0 -2px ${alpha(brand[200], 0.2)}`, + '&:hover': { + backgroundColor: alpha(brand[300], 0.2), + borderColor: alpha(brand[300], 0.5), + boxShadow: 'none', + }, + '&:active': { + backgroundColor: alpha(brand[300], 0.3), + boxShadow: `inset 0 2.5px 0 ${alpha(brand[400], 0.2)}`, + backgroundImage: 'none', + }, + ...theme.applyStyles('dark', { + color: brand[200], + backgroundColor: alpha(brand[600], 0.1), + borderColor: alpha(brand[600], 0.6), + boxShadow: `inset 0 2.5px ${alpha(brand[400], 0.1)}, inset 0 -2px ${alpha(gray[900], 0.5)}`, + '&:hover': { + backgroundColor: alpha(brand[700], 0.2), + borderColor: alpha(brand[700], 0.5), + boxShadow: 'none', + }, + '&:active': { + backgroundColor: alpha(brand[800], 0.2), + boxShadow: `inset 0 2.5px 0 ${alpha(brand[900], 0.4)}`, + backgroundImage: 'none', + }, + }), + }, + }, + { + props: { + color: 'secondary', + variant: 'outlined', + }, + style: { + backgroundColor: alpha(gray[300], 0.1), + borderColor: alpha(gray[300], 0.5), + color: gray[700], + '&:hover': { + backgroundColor: alpha(gray[300], 0.3), + borderColor: alpha(gray[300], 0.5), + boxShadow: 'none', + }, + '&:active': { + backgroundColor: alpha(gray[300], 0.4), + boxShadow: `inset 0 2.5px 0 ${alpha(gray[400], 0.2)}`, + backgroundImage: 'none', + }, + ...theme.applyStyles('dark', { + color: gray[300], + backgroundColor: alpha(gray[600], 0.1), + borderColor: alpha(gray[700], 0.5), + boxShadow: `inset 0 2.5px ${alpha(gray[600], 0.1)}, inset 0 -2px ${alpha(gray[900], 0.5)}`, + '&:hover': { + backgroundColor: alpha(gray[700], 0.2), + borderColor: alpha(gray[700], 0.5), + boxShadow: 'none', + }, + '&:active': { + backgroundColor: alpha(gray[800], 0.2), + boxShadow: `inset 0 2.5px 0 ${alpha(gray[900], 0.4)}`, + backgroundImage: 'none', + }, + }), + }, + }, + { + props: { + color: 'primary', + variant: 'text', + }, + style: { + color: brand[700], + '&:hover': { + backgroundColor: alpha(brand[300], 0.3), + }, + ...theme.applyStyles('dark', { + color: brand[200], + '&:hover': { + backgroundColor: alpha(brand[700], 0.3), + }, + }), + }, + }, + { + props: { + color: 'info', + variant: 'text', + }, + style: { + color: gray[700], + '&:hover': { + backgroundColor: alpha(gray[300], 0.3), + }, + ...theme.applyStyles('dark', { + color: gray[200], + '&:hover': { + backgroundColor: alpha(gray[700], 0.3), + }, + }), + }, + }, + ], + }), + }, + }, + MuiCard: { + styleOverrides: { + root: ({ theme }) => ({ + transition: 'all 100ms ease', + backgroundColor: gray[50], + borderRadius: theme.shape.borderRadius, + border: `1px solid ${alpha(gray[200], 0.5)}`, + boxShadow: 'none', + ...theme.applyStyles('dark', { + backgroundColor: alpha(gray[800], 0.6), + border: `1px solid ${alpha(gray[700], 0.3)}`, + }), + variants: [ + { + props: { + variant: 'outlined', + }, + style: { + border: `1px solid ${gray[200]}`, + boxShadow: 'none', + background: `linear-gradient(to bottom, hsl(0, 0%, 100%), ${gray[50]})`, + ...theme.applyStyles('dark', { + border: `1px solid ${alpha(gray[700], 0.4)}`, + boxShadow: 'none', + background: `linear-gradient(to bottom, ${gray[900]}, ${alpha( + gray[800], + 0.5, + )})`, + }), + }, + }, + ], + }), + }, + }, + MuiCheckbox: { + defaultProps: { + disableRipple: true, + icon: ( + + ), + checkedIcon: , + }, + styleOverrides: { + root: ({ theme }) => ({ + margin: 10, + height: 16, + width: 16, + borderRadius: 5, + border: '1px solid ', + borderColor: alpha(gray[300], 0.8), + backgroundColor: alpha(gray[100], 0.4), + boxShadow: '0 0 0 1.5px hsla(210, 0%, 0%, 0.04) inset', + transition: 'border-color, background-color, 120ms ease-in', + '&:hover': { + borderColor: gray[400], + }, + '&.Mui-focusVisible': { + outline: `3px solid ${alpha(brand[500], 0.5)}`, + outlineOffset: '2px', + borderColor: brand[400], + }, + '&.Mui-checked': { + color: 'white', + backgroundColor: brand[500], + borderColor: brand[500], + boxShadow: `none`, + '&:hover': { + backgroundColor: brand[600], + }, + }, + ...theme.applyStyles('dark', { + borderColor: alpha(gray[700], 0.5), + boxShadow: '0 0 0 1.5px hsl(210, 0%, 0%) inset', + backgroundColor: alpha(gray[900], 0.8), + '&:hover': { + borderColor: brand[300], + }, + '&.Mui-focusVisible': { + borderColor: brand[400], + outline: `3px solid ${alpha(brand[500], 0.5)}`, + outlineOffset: '2px', + }, + }), + }), + }, + }, + MuiDialog: { + styleOverrides: { + root: ({ theme }) => ({ + '& .MuiDialog-paper': { + borderRadius: '10px', + border: '1px solid', + borderColor: theme.palette.divider, + }, + }), + }, + }, + MuiDivider: { + styleOverrides: { + root: ({ theme }) => ({ + borderColor: `${alpha(gray[200], 0.8)}`, + ...theme.applyStyles('dark', { + borderColor: `${alpha(gray[700], 0.4)}`, + }), + }), + }, + }, + MuiFormLabel: { + styleOverrides: { + root: ({ theme }) => ({ + typography: theme.typography.caption, + marginBottom: 8, + }), + }, + }, + MuiIconButton: { + styleOverrides: { + root: ({ theme }) => ({ + color: brand[500], + '&:hover': { + backgroundColor: alpha(brand[300], 0.3), + borderColor: brand[200], + }, + ...theme.applyStyles('dark', { + color: brand[200], + '&:hover': { + backgroundColor: alpha(brand[600], 0.3), + borderColor: brand[700], + }, + }), + variants: [ + { + props: { + size: 'small', + }, + style: { + height: '2rem', + width: '2rem', + }, + }, + { + props: { + size: 'medium', + }, + style: { + height: '2.5rem', + width: '2.5rem', + }, + }, + ], + }), + }, + }, + MuiInputBase: { + styleOverrides: { + root: { + border: 'none', + }, + }, + }, + MuiLink: { + defaultProps: { + underline: 'none', + }, + styleOverrides: { + root: ({ theme }) => ({ + color: brand[700], + fontWeight: 500, + position: 'relative', + textDecoration: 'none', + '&::before': { + content: '""', + position: 'absolute', + width: 0, + height: '1px', + bottom: 0, + left: 0, + backgroundColor: brand[200], + opacity: 0.7, + transition: 'width 0.3s ease, opacity 0.3s ease', + }, + '&:hover::before': { + width: '100%', + opacity: 1, + }, + '&:focus-visible': { + outline: `3px solid ${alpha(brand[500], 0.5)}`, + outlineOffset: '4px', + borderRadius: '2px', + }, + ...theme.applyStyles('dark', { + color: brand[200], + }), + }), + }, + }, + MuiOutlinedInput: { + styleOverrides: { + notchedOutline: { + border: 'none', + }, + input: { + paddingLeft: 10, + }, + root: ({ theme }) => ({ + 'input:-webkit-autofill': { + WebkitBoxShadow: `0 0 0 1000px ${brand[100]} inset, 0 0 0 1px ${brand[200]}`, + maxHeight: '4px', + borderRadius: '8px', + }, + '& .MuiInputBase-input': { + fontSize: '1rem', + '&::placeholder': { + opacity: 0.7, + color: gray[500], + }, + }, + boxSizing: 'border-box', + flexGrow: 1, + height: '40px', + borderRadius: theme.shape.borderRadius, + border: '1px solid', + borderColor: alpha(gray[300], 0.8), + boxShadow: '0 0 0 1.5px hsla(210, 0%, 0%, 0.02) inset', + transition: 'border-color 120ms ease-in', + backgroundColor: alpha(gray[100], 0.4), + '&:hover': { + borderColor: brand[300], + }, + '&.Mui-focused': { + outline: `3px solid ${alpha(brand[500], 0.5)}`, + outlineOffset: '2px', + borderColor: brand[400], + }, + ...theme.applyStyles('dark', { + 'input:-webkit-autofill': { + WebkitBoxShadow: `0 0 0 1000px ${brand[900]} inset, 0 0 0 1px ${brand[600]}`, + maxHeight: '6px', + borderRadius: '8px', + }, + '& .MuiInputBase-input': { + fontSize: '1rem', + '&::placeholder': { + opacity: 1, + color: gray[500], + }, + }, + borderColor: alpha(gray[700], 0.5), + boxShadow: '0 0 0 1.5px hsl(210, 0%, 0%) inset', + backgroundColor: alpha(gray[900], 0.8), + transition: 'border-color 120ms ease-in', + '&:hover': { + borderColor: brand[300], + }, + '&.Mui-focused': { + borderColor: brand[400], + outline: `3px solid ${alpha(brand[500], 0.5)}`, + outlineOffset: '2px', + }, + }), + variants: [ + { + props: { + color: 'error', + }, + style: { + borderColor: red[200], + color: red[500], + '& + .MuiFormHelperText-root': { + color: red[500], + }, + ...theme.applyStyles('dark', { + borderColor: red[700], + color: red[300], + '& + .MuiFormHelperText-root': { + color: red[300], + }, + }), + }, + }, + ], + }), + }, + }, + MuiPaper: { + defaultProps: { + elevation: 0, + }, + }, + MuiStack: { + defaultProps: { + useFlexGap: true, + }, + }, + MuiToggleButtonGroup: { + styleOverrides: { + root: ({ theme }) => ({ + borderRadius: theme.shape.borderRadius, + boxShadow: `0 1px 2px hsla(210, 0%, 0%, 0.05), 0 2px 12px ${alpha(brand[200], 0.5)}`, + '& .Mui-selected': { + color: brand[500], + }, + ...theme.applyStyles('dark', { + '& .Mui-selected': { + color: 'hsl(0, 0%, 100%)', + }, + boxShadow: `0 0 0 1px hsla(210, 0%, 0%, 0.5), 0 2px 12px ${alpha(brand[700], 0.5)}`, + }), + }), + }, + }, + MuiToggleButton: { + styleOverrides: { + root: ({ theme }) => ({ + padding: '12px 16px', + textTransform: 'none', + borderRadius: theme.shape.borderRadius, + fontWeight: 500, + ...theme.applyStyles('dark', { + color: gray[400], + '&.Mui-selected': { color: brand[300] }, + }), + }), + }, + }, + }, + }; +} diff --git a/fe/src/ui/sign-up/theme/customizations/dataDisplay.tsx b/fe/src/ui/sign-up/theme/customizations/dataDisplay.tsx new file mode 100644 index 0000000..c93ccbf --- /dev/null +++ b/fe/src/ui/sign-up/theme/customizations/dataDisplay.tsx @@ -0,0 +1,233 @@ +import { Theme, alpha, Components } from '@mui/material/styles'; +import { svgIconClasses } from '@mui/material/SvgIcon'; +import { typographyClasses } from '@mui/material/Typography'; +import { buttonBaseClasses } from '@mui/material/ButtonBase'; +import { chipClasses } from '@mui/material/Chip'; +import { iconButtonClasses } from '@mui/material/IconButton'; +import { gray, red, green } from '../themePrimitives'; + +/* eslint-disable import/prefer-default-export */ +export const dataDisplayCustomizations: Components = { + MuiList: { + styleOverrides: { + root: { + padding: '8px', + display: 'flex', + flexDirection: 'column', + gap: 0, + }, + }, + }, + MuiListItem: { + styleOverrides: { + root: ({ theme }) => ({ + [`& .${svgIconClasses.root}`]: { + width: '1rem', + height: '1rem', + color: theme.palette.text.secondary, + }, + [`& .${typographyClasses.root}`]: { + fontWeight: 500, + }, + [`& .${buttonBaseClasses.root}`]: { + display: 'flex', + gap: 8, + padding: '2px 8px', + borderRadius: theme.shape.borderRadius, + opacity: 0.7, + '&.Mui-selected': { + opacity: 1, + backgroundColor: alpha(theme.palette.action.selected, 0.3), + [`& .${svgIconClasses.root}`]: { + color: theme.palette.text.primary, + }, + '&:focus-visible': { + backgroundColor: alpha(theme.palette.action.selected, 0.3), + }, + '&:hover': { + backgroundColor: alpha(theme.palette.action.selected, 0.5), + }, + }, + '&:focus-visible': { + backgroundColor: 'transparent', + }, + }, + }), + }, + }, + MuiListItemText: { + styleOverrides: { + primary: ({ theme }) => ({ + fontSize: theme.typography.body2.fontSize, + fontWeight: 500, + lineHeight: theme.typography.body2.lineHeight, + }), + secondary: ({ theme }) => ({ + fontSize: theme.typography.caption.fontSize, + lineHeight: theme.typography.caption.lineHeight, + }), + }, + }, + MuiListSubheader: { + styleOverrides: { + root: ({ theme }) => ({ + backgroundColor: 'transparent', + padding: '4px 8px', + fontSize: theme.typography.caption.fontSize, + fontWeight: 500, + lineHeight: theme.typography.caption.lineHeight, + }), + }, + }, + MuiListItemIcon: { + styleOverrides: { + root: { + minWidth: 0, + }, + }, + }, + MuiChip: { + defaultProps: { + size: 'small', + }, + styleOverrides: { + root: ({ theme }) => ({ + border: '1px solid', + borderRadius: '999px', + [`& .${chipClasses.label}`]: { + fontWeight: 600, + }, + variants: [ + { + props: { + color: 'default', + }, + style: { + borderColor: gray[200], + backgroundColor: gray[100], + [`& .${chipClasses.label}`]: { + color: gray[500], + }, + [`& .${chipClasses.icon}`]: { + color: gray[500], + }, + ...theme.applyStyles('dark', { + borderColor: gray[700], + backgroundColor: gray[800], + [`& .${chipClasses.label}`]: { + color: gray[300], + }, + [`& .${chipClasses.icon}`]: { + color: gray[300], + }, + }), + }, + }, + { + props: { + color: 'success', + }, + style: { + borderColor: green[200], + backgroundColor: green[50], + [`& .${chipClasses.label}`]: { + color: green[500], + }, + [`& .${chipClasses.icon}`]: { + color: green[500], + }, + ...theme.applyStyles('dark', { + borderColor: green[800], + backgroundColor: green[900], + [`& .${chipClasses.label}`]: { + color: green[300], + }, + [`& .${chipClasses.icon}`]: { + color: green[300], + }, + }), + }, + }, + { + props: { + color: 'error', + }, + style: { + borderColor: red[100], + backgroundColor: red[50], + [`& .${chipClasses.label}`]: { + color: red[500], + }, + [`& .${chipClasses.icon}`]: { + color: red[500], + }, + ...theme.applyStyles('dark', { + borderColor: red[800], + backgroundColor: red[900], + [`& .${chipClasses.label}`]: { + color: red[200], + }, + [`& .${chipClasses.icon}`]: { + color: red[300], + }, + }), + }, + }, + { + props: { size: 'small' }, + style: { + maxHeight: 20, + [`& .${chipClasses.label}`]: { + fontSize: theme.typography.caption.fontSize, + }, + [`& .${svgIconClasses.root}`]: { + fontSize: theme.typography.caption.fontSize, + }, + }, + }, + { + props: { size: 'medium' }, + style: { + [`& .${chipClasses.label}`]: { + fontSize: theme.typography.caption.fontSize, + }, + }, + }, + ], + }), + }, + }, + MuiTablePagination: { + styleOverrides: { + actions: { + display: 'flex', + gap: 8, + marginRight: 6, + [`& .${iconButtonClasses.root}`]: { + minWidth: 0, + width: 36, + height: 36, + }, + }, + }, + }, + MuiIcon: { + defaultProps: { + fontSize: 'small', + }, + styleOverrides: { + root: { + variants: [ + { + props: { + fontSize: 'small', + }, + style: { + fontSize: '1rem', + }, + }, + ], + }, + }, + }, +}; diff --git a/fe/src/ui/sign-up/theme/customizations/feedback.tsx b/fe/src/ui/sign-up/theme/customizations/feedback.tsx new file mode 100644 index 0000000..aaf0000 --- /dev/null +++ b/fe/src/ui/sign-up/theme/customizations/feedback.tsx @@ -0,0 +1,46 @@ +import { Theme, alpha, Components } from '@mui/material/styles'; +import { gray, orange } from '../themePrimitives'; + +/* eslint-disable import/prefer-default-export */ +export const feedbackCustomizations: Components = { + MuiAlert: { + styleOverrides: { + root: ({ theme }) => ({ + borderRadius: 10, + backgroundColor: orange[100], + color: theme.palette.text.primary, + border: `1px solid ${alpha(orange[300], 0.5)}`, + '& .MuiAlert-icon': { + color: orange[500], + }, + ...theme.applyStyles('dark', { + backgroundColor: `${alpha(orange[900], 0.5)}`, + border: `1px solid ${alpha(orange[800], 0.5)}`, + }), + }), + }, + }, + MuiDialog: { + styleOverrides: { + root: ({ theme }) => ({ + '& .MuiDialog-paper': { + borderRadius: '10px', + border: '1px solid', + borderColor: theme.palette.divider, + }, + }), + }, + }, + MuiLinearProgress: { + styleOverrides: { + root: ({ theme }) => ({ + height: 8, + borderRadius: 8, + backgroundColor: gray[200], + ...theme.applyStyles('dark', { + backgroundColor: gray[800], + }), + }), + }, + }, +}; diff --git a/fe/src/ui/sign-up/theme/customizations/index.ts b/fe/src/ui/sign-up/theme/customizations/index.ts new file mode 100644 index 0000000..91a4485 --- /dev/null +++ b/fe/src/ui/sign-up/theme/customizations/index.ts @@ -0,0 +1,5 @@ +export { inputsCustomizations } from './inputs'; +export { dataDisplayCustomizations } from './dataDisplay'; +export { feedbackCustomizations } from './feedback'; +export { navigationCustomizations } from './navigation'; +export { surfacesCustomizations } from './surfaces'; diff --git a/fe/src/ui/sign-up/theme/customizations/inputs.tsx b/fe/src/ui/sign-up/theme/customizations/inputs.tsx new file mode 100644 index 0000000..4be4c18 --- /dev/null +++ b/fe/src/ui/sign-up/theme/customizations/inputs.tsx @@ -0,0 +1,445 @@ +import * as React from 'react'; +import { alpha, Theme, Components } from '@mui/material/styles'; +import { outlinedInputClasses } from '@mui/material/OutlinedInput'; +import { svgIconClasses } from '@mui/material/SvgIcon'; +import { toggleButtonGroupClasses } from '@mui/material/ToggleButtonGroup'; +import { toggleButtonClasses } from '@mui/material/ToggleButton'; +import CheckBoxOutlineBlankRoundedIcon from '@mui/icons-material/CheckBoxOutlineBlankRounded'; +import CheckRoundedIcon from '@mui/icons-material/CheckRounded'; +import RemoveRoundedIcon from '@mui/icons-material/RemoveRounded'; +import { gray, brand } from '../themePrimitives'; + +/* eslint-disable import/prefer-default-export */ +export const inputsCustomizations: Components = { + MuiButtonBase: { + defaultProps: { + disableTouchRipple: true, + disableRipple: true, + }, + styleOverrides: { + root: ({ theme }) => ({ + boxSizing: 'border-box', + transition: 'all 100ms ease-in', + '&:focus-visible': { + outline: `3px solid ${alpha(theme.palette.primary.main, 0.5)}`, + outlineOffset: '2px', + }, + }), + }, + }, + MuiButton: { + styleOverrides: { + root: ({ theme }) => ({ + boxShadow: 'none', + borderRadius: theme.shape.borderRadius, + textTransform: 'none', + variants: [ + { + props: { + size: 'small', + }, + style: { + height: '2.25rem', + padding: '8px 12px', + }, + }, + { + props: { + size: 'medium', + }, + style: { + height: '2.5rem', // 40px + }, + }, + { + props: { + color: 'primary', + variant: 'contained', + }, + style: { + color: 'white', + backgroundColor: gray[900], + backgroundImage: `linear-gradient(to bottom, ${gray[700]}, ${gray[800]})`, + boxShadow: `inset 0 1px 0 ${gray[600]}, inset 0 -1px 0 1px hsl(220, 0%, 0%)`, + border: `1px solid ${gray[700]}`, + '&:hover': { + backgroundImage: 'none', + backgroundColor: gray[700], + boxShadow: 'none', + }, + '&:active': { + backgroundColor: gray[800], + }, + ...theme.applyStyles('dark', { + color: 'black', + backgroundColor: gray[50], + backgroundImage: `linear-gradient(to bottom, ${gray[100]}, ${gray[50]})`, + boxShadow: 'inset 0 -1px 0 hsl(220, 30%, 80%)', + border: `1px solid ${gray[50]}`, + '&:hover': { + backgroundImage: 'none', + backgroundColor: gray[300], + boxShadow: 'none', + }, + '&:active': { + backgroundColor: gray[400], + }, + }), + }, + }, + { + props: { + color: 'secondary', + variant: 'contained', + }, + style: { + color: 'white', + backgroundColor: brand[300], + backgroundImage: `linear-gradient(to bottom, ${alpha(brand[400], 0.8)}, ${brand[500]})`, + boxShadow: `inset 0 2px 0 ${alpha(brand[200], 0.2)}, inset 0 -2px 0 ${alpha(brand[700], 0.4)}`, + border: `1px solid ${brand[500]}`, + '&:hover': { + backgroundColor: brand[700], + boxShadow: 'none', + }, + '&:active': { + backgroundColor: brand[700], + backgroundImage: 'none', + }, + }, + }, + { + props: { + variant: 'outlined', + }, + style: { + color: theme.palette.text.primary, + border: '1px solid', + borderColor: gray[200], + backgroundColor: alpha(gray[50], 0.3), + '&:hover': { + backgroundColor: gray[100], + borderColor: gray[300], + }, + '&:active': { + backgroundColor: gray[200], + }, + ...theme.applyStyles('dark', { + backgroundColor: gray[800], + borderColor: gray[700], + + '&:hover': { + backgroundColor: gray[900], + borderColor: gray[600], + }, + '&:active': { + backgroundColor: gray[900], + }, + }), + }, + }, + { + props: { + color: 'secondary', + variant: 'outlined', + }, + style: { + color: brand[700], + border: '1px solid', + borderColor: brand[200], + backgroundColor: brand[50], + '&:hover': { + backgroundColor: brand[100], + borderColor: brand[400], + }, + '&:active': { + backgroundColor: alpha(brand[200], 0.7), + }, + ...theme.applyStyles('dark', { + color: brand[50], + border: '1px solid', + borderColor: brand[900], + backgroundColor: alpha(brand[900], 0.3), + '&:hover': { + borderColor: brand[700], + backgroundColor: alpha(brand[900], 0.6), + }, + '&:active': { + backgroundColor: alpha(brand[900], 0.5), + }, + }), + }, + }, + { + props: { + variant: 'text', + }, + style: { + color: gray[600], + '&:hover': { + backgroundColor: gray[100], + }, + '&:active': { + backgroundColor: gray[200], + }, + ...theme.applyStyles('dark', { + color: gray[50], + '&:hover': { + backgroundColor: gray[700], + }, + '&:active': { + backgroundColor: alpha(gray[700], 0.7), + }, + }), + }, + }, + { + props: { + color: 'secondary', + variant: 'text', + }, + style: { + color: brand[700], + '&:hover': { + backgroundColor: alpha(brand[100], 0.5), + }, + '&:active': { + backgroundColor: alpha(brand[200], 0.7), + }, + ...theme.applyStyles('dark', { + color: brand[100], + '&:hover': { + backgroundColor: alpha(brand[900], 0.5), + }, + '&:active': { + backgroundColor: alpha(brand[900], 0.3), + }, + }), + }, + }, + ], + }), + }, + }, + MuiIconButton: { + styleOverrides: { + root: ({ theme }) => ({ + boxShadow: 'none', + borderRadius: theme.shape.borderRadius, + textTransform: 'none', + fontWeight: theme.typography.fontWeightMedium, + letterSpacing: 0, + color: theme.palette.text.primary, + border: '1px solid ', + borderColor: gray[200], + backgroundColor: alpha(gray[50], 0.3), + '&:hover': { + backgroundColor: gray[100], + borderColor: gray[300], + }, + '&:active': { + backgroundColor: gray[200], + }, + ...theme.applyStyles('dark', { + backgroundColor: gray[800], + borderColor: gray[700], + '&:hover': { + backgroundColor: gray[900], + borderColor: gray[600], + }, + '&:active': { + backgroundColor: gray[900], + }, + }), + variants: [ + { + props: { + size: 'small', + }, + style: { + width: '2.25rem', + height: '2.25rem', + padding: '0.25rem', + [`& .${svgIconClasses.root}`]: { fontSize: '1rem' }, + }, + }, + { + props: { + size: 'medium', + }, + style: { + width: '2.5rem', + height: '2.5rem', + }, + }, + ], + }), + }, + }, + MuiToggleButtonGroup: { + styleOverrides: { + root: ({ theme }) => ({ + borderRadius: '10px', + boxShadow: `0 4px 16px ${alpha(gray[400], 0.2)}`, + [`& .${toggleButtonGroupClasses.selected}`]: { + color: brand[500], + }, + ...theme.applyStyles('dark', { + [`& .${toggleButtonGroupClasses.selected}`]: { + color: '#fff', + }, + boxShadow: `0 4px 16px ${alpha(brand[700], 0.5)}`, + }), + }), + }, + }, + MuiToggleButton: { + styleOverrides: { + root: ({ theme }) => ({ + padding: '12px 16px', + textTransform: 'none', + borderRadius: '10px', + fontWeight: 500, + ...theme.applyStyles('dark', { + color: gray[400], + boxShadow: '0 4px 16px rgba(0, 0, 0, 0.5)', + [`&.${toggleButtonClasses.selected}`]: { + color: brand[300], + }, + }), + }), + }, + }, + MuiCheckbox: { + defaultProps: { + disableRipple: true, + icon: ( + + ), + checkedIcon: , + indeterminateIcon: , + }, + styleOverrides: { + root: ({ theme }) => ({ + margin: 10, + height: 16, + width: 16, + borderRadius: 5, + border: '1px solid ', + borderColor: alpha(gray[300], 0.8), + boxShadow: '0 0 0 1.5px hsla(210, 0%, 0%, 0.04) inset', + backgroundColor: alpha(gray[100], 0.4), + transition: 'border-color, background-color, 120ms ease-in', + '&:hover': { + borderColor: brand[300], + }, + '&.Mui-focusVisible': { + outline: `3px solid ${alpha(brand[500], 0.5)}`, + outlineOffset: '2px', + borderColor: brand[400], + }, + '&.Mui-checked': { + color: 'white', + backgroundColor: brand[500], + borderColor: brand[500], + boxShadow: `none`, + '&:hover': { + backgroundColor: brand[600], + }, + }, + ...theme.applyStyles('dark', { + borderColor: alpha(gray[700], 0.8), + boxShadow: '0 0 0 1.5px hsl(210, 0%, 0%) inset', + backgroundColor: alpha(gray[900], 0.8), + '&:hover': { + borderColor: brand[300], + }, + '&.Mui-focusVisible': { + borderColor: brand[400], + outline: `3px solid ${alpha(brand[500], 0.5)}`, + outlineOffset: '2px', + }, + }), + }), + }, + }, + MuiInputBase: { + styleOverrides: { + root: { + border: 'none', + }, + input: { + '&::placeholder': { + opacity: 0.7, + color: gray[500], + }, + }, + }, + }, + MuiOutlinedInput: { + styleOverrides: { + input: { + padding: 0, + }, + root: ({ theme }) => ({ + padding: '8px 12px', + color: theme.palette.text.primary, + borderRadius: theme.shape.borderRadius, + border: `1px solid ${theme.palette.divider}`, + backgroundColor: theme.palette.background.default, + transition: 'border 120ms ease-in', + '&:hover': { + borderColor: gray[400], + }, + [`&.${outlinedInputClasses.focused}`]: { + outline: `3px solid ${alpha(brand[500], 0.5)}`, + borderColor: brand[400], + }, + ...theme.applyStyles('dark', { + '&:hover': { + borderColor: gray[500], + }, + }), + variants: [ + { + props: { + size: 'small', + }, + style: { + height: '2.25rem', + }, + }, + { + props: { + size: 'medium', + }, + style: { + height: '2.5rem', + }, + }, + ], + }), + notchedOutline: { + border: 'none', + }, + }, + }, + MuiInputAdornment: { + styleOverrides: { + root: ({ theme }) => ({ + color: theme.palette.grey[500], + ...theme.applyStyles('dark', { + color: theme.palette.grey[400], + }), + }), + }, + }, + MuiFormLabel: { + styleOverrides: { + root: ({ theme }) => ({ + typography: theme.typography.caption, + marginBottom: 8, + }), + }, + }, +}; diff --git a/fe/src/ui/sign-up/theme/customizations/navigation.tsx b/fe/src/ui/sign-up/theme/customizations/navigation.tsx new file mode 100644 index 0000000..f6b92e5 --- /dev/null +++ b/fe/src/ui/sign-up/theme/customizations/navigation.tsx @@ -0,0 +1,279 @@ +import * as React from 'react'; +import { Theme, alpha, Components } from '@mui/material/styles'; +import { SvgIconProps } from '@mui/material/SvgIcon'; +import { buttonBaseClasses } from '@mui/material/ButtonBase'; +import { dividerClasses } from '@mui/material/Divider'; +import { menuItemClasses } from '@mui/material/MenuItem'; +import { selectClasses } from '@mui/material/Select'; +import { tabClasses } from '@mui/material/Tab'; +import UnfoldMoreRoundedIcon from '@mui/icons-material/UnfoldMoreRounded'; +import { gray, brand } from '../themePrimitives'; + +/* eslint-disable import/prefer-default-export */ +export const navigationCustomizations: Components = { + MuiMenuItem: { + styleOverrides: { + root: ({ theme }) => ({ + borderRadius: theme.shape.borderRadius, + padding: '6px 8px', + [`&.${menuItemClasses.focusVisible}`]: { + backgroundColor: 'transparent', + }, + [`&.${menuItemClasses.selected}`]: { + [`&.${menuItemClasses.focusVisible}`]: { + backgroundColor: alpha(theme.palette.action.selected, 0.3), + }, + }, + }), + }, + }, + MuiMenu: { + styleOverrides: { + list: { + gap: '0px', + [`&.${dividerClasses.root}`]: { + margin: '0 -8px', + }, + }, + paper: ({ theme }) => ({ + marginTop: '4px', + borderRadius: theme.shape.borderRadius, + border: `1px solid ${theme.palette.divider}`, + backgroundImage: 'none', + background: 'hsl(0, 0%, 100%)', + boxShadow: + 'hsla(220, 30%, 5%, 0.07) 0px 4px 16px 0px, hsla(220, 25%, 10%, 0.07) 0px 8px 16px -5px', + [`& .${buttonBaseClasses.root}`]: { + '&.Mui-selected': { + backgroundColor: alpha(theme.palette.action.selected, 0.3), + }, + }, + ...theme.applyStyles('dark', { + background: gray[900], + boxShadow: + 'hsla(220, 30%, 5%, 0.7) 0px 4px 16px 0px, hsla(220, 25%, 10%, 0.8) 0px 8px 16px -5px', + }), + }), + }, + }, + MuiSelect: { + defaultProps: { + IconComponent: React.forwardRef((props, ref) => ( + + )), + }, + styleOverrides: { + root: ({ theme }) => ({ + borderRadius: theme.shape.borderRadius, + border: '1px solid', + borderColor: gray[200], + backgroundColor: theme.palette.background.paper, + boxShadow: `inset 0 1px 0 1px hsla(220, 0%, 100%, 0.6), inset 0 -1px 0 1px hsla(220, 35%, 90%, 0.5)`, + '&:hover': { + borderColor: gray[300], + backgroundColor: theme.palette.background.paper, + boxShadow: 'none', + }, + [`&.${selectClasses.focused}`]: { + outlineOffset: 0, + borderColor: gray[400], + }, + '&:before, &:after': { + display: 'none', + }, + + ...theme.applyStyles('dark', { + borderRadius: theme.shape.borderRadius, + borderColor: gray[700], + backgroundColor: theme.palette.background.paper, + boxShadow: `inset 0 1px 0 1px ${alpha(gray[700], 0.15)}, inset 0 -1px 0 1px hsla(220, 0%, 0%, 0.7)`, + '&:hover': { + borderColor: alpha(gray[700], 0.7), + backgroundColor: theme.palette.background.paper, + boxShadow: 'none', + }, + [`&.${selectClasses.focused}`]: { + outlineOffset: 0, + borderColor: gray[900], + }, + '&:before, &:after': { + display: 'none', + }, + }), + }), + select: ({ theme }) => ({ + display: 'flex', + alignItems: 'center', + ...theme.applyStyles('dark', { + display: 'flex', + alignItems: 'center', + '&:focus-visible': { + backgroundColor: gray[900], + }, + }), + }), + }, + }, + MuiLink: { + defaultProps: { + underline: 'none', + }, + styleOverrides: { + root: ({ theme }) => ({ + color: theme.palette.text.primary, + fontWeight: 500, + position: 'relative', + textDecoration: 'none', + width: 'fit-content', + '&::before': { + content: '""', + position: 'absolute', + width: '100%', + height: '1px', + bottom: 0, + left: 0, + backgroundColor: theme.palette.text.secondary, + opacity: 0.3, + transition: 'width 0.3s ease, opacity 0.3s ease', + }, + '&:hover::before': { + width: 0, + }, + '&:focus-visible': { + outline: `3px solid ${alpha(brand[500], 0.5)}`, + outlineOffset: '4px', + borderRadius: '2px', + }, + }), + }, + }, + MuiDrawer: { + styleOverrides: { + paper: ({ theme }) => ({ + backgroundColor: theme.palette.background.default, + }), + }, + }, + MuiPaginationItem: { + styleOverrides: { + root: ({ theme }) => ({ + '&.Mui-selected': { + color: 'white', + backgroundColor: theme.palette.grey[900], + }, + ...theme.applyStyles('dark', { + '&.Mui-selected': { + color: 'black', + backgroundColor: theme.palette.grey[50], + }, + }), + }), + }, + }, + MuiTabs: { + styleOverrides: { + root: { minHeight: 'fit-content' }, + indicator: ({ theme }) => ({ + backgroundColor: theme.palette.grey[800], + ...theme.applyStyles('dark', { + backgroundColor: theme.palette.grey[200], + }), + }), + }, + }, + MuiTab: { + styleOverrides: { + root: ({ theme }) => ({ + padding: '6px 8px', + marginBottom: '8px', + textTransform: 'none', + minWidth: 'fit-content', + minHeight: 'fit-content', + color: theme.palette.text.secondary, + borderRadius: theme.shape.borderRadius, + border: '1px solid', + borderColor: 'transparent', + ':hover': { + color: theme.palette.text.primary, + backgroundColor: gray[100], + borderColor: gray[200], + }, + [`&.${tabClasses.selected}`]: { + color: gray[900], + }, + ...theme.applyStyles('dark', { + ':hover': { + color: theme.palette.text.primary, + backgroundColor: gray[800], + borderColor: gray[700], + }, + [`&.${tabClasses.selected}`]: { + color: '#fff', + }, + }), + }), + }, + }, + MuiStepConnector: { + styleOverrides: { + line: ({ theme }) => ({ + borderTop: '1px solid', + borderColor: theme.palette.divider, + flex: 1, + borderRadius: '99px', + }), + }, + }, + MuiStepIcon: { + styleOverrides: { + root: ({ theme }) => ({ + color: 'transparent', + border: `1px solid ${gray[400]}`, + width: 12, + height: 12, + borderRadius: '50%', + '& text': { + display: 'none', + }, + '&.Mui-active': { + border: 'none', + color: theme.palette.primary.main, + }, + '&.Mui-completed': { + border: 'none', + color: theme.palette.success.main, + }, + ...theme.applyStyles('dark', { + border: `1px solid ${gray[700]}`, + '&.Mui-active': { + border: 'none', + color: theme.palette.primary.light, + }, + '&.Mui-completed': { + border: 'none', + color: theme.palette.success.light, + }, + }), + variants: [ + { + props: { completed: true }, + style: { + width: 12, + height: 12, + }, + }, + ], + }), + }, + }, + MuiStepLabel: { + styleOverrides: { + label: ({ theme }) => ({ + '&.Mui-completed': { + opacity: 0.6, + ...theme.applyStyles('dark', { opacity: 0.5 }), + }, + }), + }, + }, +}; diff --git a/fe/src/ui/sign-up/theme/customizations/surfaces.ts b/fe/src/ui/sign-up/theme/customizations/surfaces.ts new file mode 100644 index 0000000..5bcdfc5 --- /dev/null +++ b/fe/src/ui/sign-up/theme/customizations/surfaces.ts @@ -0,0 +1,113 @@ +import { alpha, Theme, Components } from '@mui/material/styles'; +import { gray } from '../themePrimitives'; + +/* eslint-disable import/prefer-default-export */ +export const surfacesCustomizations: Components = { + MuiAccordion: { + defaultProps: { + elevation: 0, + disableGutters: true, + }, + styleOverrides: { + root: ({ theme }) => ({ + padding: 4, + overflow: 'clip', + backgroundColor: theme.palette.background.default, + border: '1px solid', + borderColor: theme.palette.divider, + ':before': { + backgroundColor: 'transparent', + }, + '&:not(:last-of-type)': { + borderBottom: 'none', + }, + '&:first-of-type': { + borderTopLeftRadius: theme.shape.borderRadius, + borderTopRightRadius: theme.shape.borderRadius, + }, + '&:last-of-type': { + borderBottomLeftRadius: theme.shape.borderRadius, + borderBottomRightRadius: theme.shape.borderRadius, + }, + }), + }, + }, + MuiAccordionSummary: { + styleOverrides: { + root: ({ theme }) => ({ + border: 'none', + borderRadius: 8, + '&:hover': { backgroundColor: gray[50] }, + '&:focus-visible': { backgroundColor: 'transparent' }, + ...theme.applyStyles('dark', { + '&:hover': { backgroundColor: gray[800] }, + }), + }), + }, + }, + MuiAccordionDetails: { + styleOverrides: { + root: { mb: 20, border: 'none' }, + }, + }, + MuiPaper: { + defaultProps: { + elevation: 0, + }, + }, + MuiCard: { + styleOverrides: { + root: ({ theme }) => { + return { + padding: 16, + gap: 16, + transition: 'all 100ms ease', + backgroundColor: gray[50], + borderRadius: theme.shape.borderRadius, + border: `1px solid ${theme.palette.divider}`, + boxShadow: 'none', + ...theme.applyStyles('dark', { + backgroundColor: gray[800], + }), + variants: [ + { + props: { + variant: 'outlined', + }, + style: { + border: `1px solid ${theme.palette.divider}`, + boxShadow: 'none', + background: 'hsl(0, 0%, 100%)', + ...theme.applyStyles('dark', { + background: alpha(gray[900], 0.4), + }), + }, + }, + ], + }; + }, + }, + }, + MuiCardContent: { + styleOverrides: { + root: { + padding: 0, + '&:last-child': { paddingBottom: 0 }, + }, + }, + }, + MuiCardHeader: { + styleOverrides: { + root: { + padding: 0, + }, + }, + }, + MuiCardActions: { + styleOverrides: { + root: { + padding: 0, + }, + }, + }, +}; diff --git a/fe/src/ui/sign-up/theme/getSignUpTheme.tsx b/fe/src/ui/sign-up/theme/getSignUpTheme.tsx new file mode 100644 index 0000000..514832b --- /dev/null +++ b/fe/src/ui/sign-up/theme/getSignUpTheme.tsx @@ -0,0 +1,23 @@ +import type {} from '@mui/material/themeCssVarsAugmentation'; +import { ThemeOptions, PaletteMode } from '@mui/material/styles'; +import { getDesignTokens } from './themePrimitives'; +import { + inputsCustomizations, + dataDisplayCustomizations, + feedbackCustomizations, + navigationCustomizations, + surfacesCustomizations, +} from './customizations'; + +export default function getSignUpTheme(mode: PaletteMode): ThemeOptions { + return { + ...getDesignTokens(mode), + components: { + ...inputsCustomizations, + ...dataDisplayCustomizations, + ...feedbackCustomizations, + ...navigationCustomizations, + ...surfacesCustomizations, + }, + }; +} diff --git a/fe/src/ui/sign-up/theme/themePrimitives.ts b/fe/src/ui/sign-up/theme/themePrimitives.ts new file mode 100644 index 0000000..41b517b --- /dev/null +++ b/fe/src/ui/sign-up/theme/themePrimitives.ts @@ -0,0 +1,235 @@ +import { createTheme, alpha, PaletteMode, Shadows } from '@mui/material/styles'; + +declare module '@mui/material/Paper' { + interface PaperPropsVariantOverrides { + highlighted: true; + } +} +declare module '@mui/material/styles/createPalette' { + interface ColorRange { + 50: string; + 100: string; + 200: string; + 300: string; + 400: string; + 500: string; + 600: string; + 700: string; + 800: string; + 900: string; + } + + interface PaletteColor extends ColorRange {} +} + +const defaultTheme = createTheme(); + +const customShadows: Shadows = [...defaultTheme.shadows]; + +export const brand = { + 50: 'hsl(210, 100%, 95%)', + 100: 'hsl(210, 100%, 92%)', + 200: 'hsl(210, 100%, 80%)', + 300: 'hsl(210, 100%, 65%)', + 400: 'hsl(210, 98%, 48%)', + 500: 'hsl(210, 98%, 42%)', + 600: 'hsl(210, 98%, 55%)', + 700: 'hsl(210, 100%, 35%)', + 800: 'hsl(210, 100%, 16%)', + 900: 'hsl(210, 100%, 21%)', +}; + +export const gray = { + 50: 'hsl(220, 35%, 97%)', + 100: 'hsl(220, 30%, 94%)', + 200: 'hsl(220, 20%, 88%)', + 300: 'hsl(220, 20%, 80%)', + 400: 'hsl(220, 20%, 65%)', + 500: 'hsl(220, 20%, 42%)', + 600: 'hsl(220, 20%, 35%)', + 700: 'hsl(220, 20%, 25%)', + 800: 'hsl(220, 30%, 6%)', + 900: 'hsl(220, 35%, 3%)', +}; + +export const green = { + 50: 'hsl(120, 80%, 98%)', + 100: 'hsl(120, 75%, 94%)', + 200: 'hsl(120, 75%, 87%)', + 300: 'hsl(120, 61%, 77%)', + 400: 'hsl(120, 44%, 53%)', + 500: 'hsl(120, 59%, 30%)', + 600: 'hsl(120, 70%, 25%)', + 700: 'hsl(120, 75%, 16%)', + 800: 'hsl(120, 84%, 10%)', + 900: 'hsl(120, 87%, 6%)', +}; + +export const orange = { + 50: 'hsl(45, 100%, 97%)', + 100: 'hsl(45, 92%, 90%)', + 200: 'hsl(45, 94%, 80%)', + 300: 'hsl(45, 90%, 65%)', + 400: 'hsl(45, 90%, 40%)', + 500: 'hsl(45, 90%, 35%)', + 600: 'hsl(45, 91%, 25%)', + 700: 'hsl(45, 94%, 20%)', + 800: 'hsl(45, 95%, 16%)', + 900: 'hsl(45, 93%, 12%)', +}; + +export const red = { + 50: 'hsl(0, 100%, 97%)', + 100: 'hsl(0, 92%, 90%)', + 200: 'hsl(0, 94%, 80%)', + 300: 'hsl(0, 90%, 65%)', + 400: 'hsl(0, 90%, 40%)', + 500: 'hsl(0, 90%, 30%)', + 600: 'hsl(0, 91%, 25%)', + 700: 'hsl(0, 94%, 18%)', + 800: 'hsl(0, 95%, 12%)', + 900: 'hsl(0, 93%, 6%)', +}; + +export const getDesignTokens = (mode: PaletteMode) => { + customShadows[1] = + mode === 'dark' + ? 'hsla(220, 30%, 5%, 0.7) 0px 4px 16px 0px, hsla(220, 25%, 10%, 0.8) 0px 8px 16px -5px' + : 'hsla(220, 30%, 5%, 0.07) 0px 4px 16px 0px, hsla(220, 25%, 10%, 0.07) 0px 8px 16px -5px'; + + return { + palette: { + mode, + primary: { + light: brand[200], + main: brand[400], + dark: brand[700], + contrastText: brand[50], + ...(mode === 'dark' && { + contrastText: brand[50], + light: brand[300], + main: brand[400], + dark: brand[700], + }), + }, + info: { + light: brand[100], + main: brand[300], + dark: brand[600], + contrastText: gray[50], + ...(mode === 'dark' && { + contrastText: brand[300], + light: brand[500], + main: brand[700], + dark: brand[900], + }), + }, + warning: { + light: orange[300], + main: orange[400], + dark: orange[800], + ...(mode === 'dark' && { + light: orange[400], + main: orange[500], + dark: orange[700], + }), + }, + error: { + light: red[300], + main: red[400], + dark: red[800], + ...(mode === 'dark' && { + light: red[400], + main: red[500], + dark: red[700], + }), + }, + success: { + light: green[300], + main: green[400], + dark: green[800], + ...(mode === 'dark' && { + light: green[400], + main: green[500], + dark: green[700], + }), + }, + grey: { + ...gray, + }, + divider: mode === 'dark' ? alpha(gray[700], 0.6) : alpha(gray[300], 0.4), + background: { + default: 'hsl(0, 0%, 99%)', + paper: 'hsl(220, 35%, 97%)', + ...(mode === 'dark' && { default: gray[900], paper: 'hsl(220, 30%, 7%)' }), + }, + text: { + primary: gray[800], + secondary: gray[600], + warning: orange[400], + ...(mode === 'dark' && { primary: 'hsl(0, 0%, 100%)', secondary: gray[400] }), + }, + action: { + hover: alpha(gray[200], 0.2), + selected: `${alpha(gray[200], 0.3)}`, + ...(mode === 'dark' && { + hover: alpha(gray[600], 0.2), + selected: alpha(gray[600], 0.3), + }), + }, + }, + typography: { + fontFamily: ['"Inter", "sans-serif"'].join(','), + h1: { + fontSize: defaultTheme.typography.pxToRem(48), + fontWeight: 600, + lineHeight: 1.2, + letterSpacing: -0.5, + }, + h2: { + fontSize: defaultTheme.typography.pxToRem(36), + fontWeight: 600, + lineHeight: 1.2, + }, + h3: { + fontSize: defaultTheme.typography.pxToRem(30), + lineHeight: 1.2, + }, + h4: { + fontSize: defaultTheme.typography.pxToRem(24), + fontWeight: 600, + lineHeight: 1.5, + }, + h5: { + fontSize: defaultTheme.typography.pxToRem(20), + fontWeight: 600, + }, + h6: { + fontSize: defaultTheme.typography.pxToRem(18), + fontWeight: 600, + }, + subtitle1: { + fontSize: defaultTheme.typography.pxToRem(18), + }, + subtitle2: { + fontSize: defaultTheme.typography.pxToRem(14), + fontWeight: 500, + }, + body1: { + fontSize: defaultTheme.typography.pxToRem(14), + }, + body2: { + fontSize: defaultTheme.typography.pxToRem(14), + fontWeight: 400, + }, + caption: { + fontSize: defaultTheme.typography.pxToRem(12), + fontWeight: 400, + }, + }, + shape: { + borderRadius: 8, + }, + shadows: customShadows, + }; +}; diff --git a/fe/src/ui/theme.tsx b/fe/src/ui/theme.tsx new file mode 100644 index 0000000..9731593 --- /dev/null +++ b/fe/src/ui/theme.tsx @@ -0,0 +1,234 @@ +import { useEffect, useState } from "react"; +import { + createTheme, + ThemeProvider, + styled, + PaletteMode, +} from "@mui/material/styles"; +import CssBaseline from "@mui/material/CssBaseline"; +import Box from "@mui/material/Box"; +import Button from "@mui/material/Button"; +import Checkbox from "@mui/material/Checkbox"; +import Divider from "@mui/material/Divider"; +import FormControlLabel from "@mui/material/FormControlLabel"; +import FormLabel from "@mui/material/FormLabel"; +import FormControl from "@mui/material/FormControl"; +import Link from "@mui/material/Link"; +import TextField from "@mui/material/TextField"; +import Typography from "@mui/material/Typography"; +import Stack from "@mui/material/Stack"; +import MuiCard from "@mui/material/Card"; +import { + Brightness3, + Brightness5, + DarkMode, + ImportContacts, + ImportContactsTwoTone, + LightMode, +} from "@mui/icons-material"; +import { IconButton, IconButtonProps } from "@mui/material"; + +export function ThemeTest1() { + const [mode, setMode] = useState("light"); + const [showCustomTheme, setShowCustomTheme] = useState(true); + const defaultTheme = createTheme({ palette: { mode } }); + useEffect(() => { + // Check if there is a preferred mode in localStorage + const savedMode = localStorage.getItem("themeMode") as PaletteMode | null; + if (savedMode) { + setMode(savedMode); + } else { + // If no preference is found, it uses system preference + const systemPrefersDark = window.matchMedia( + "(prefers-color-scheme: dark)", + ).matches; + setMode(systemPrefersDark ? "dark" : "light"); + } + }, []); + const toggleColorMode = () => { + const newMode = mode === "dark" ? "light" : "dark"; + setMode(newMode); + localStorage.setItem("themeMode", newMode); // Save the selected mode to localStorage + }; + + return ( + + + + + + Sign up + + + + Full name + + + + Email + + + } + label="I want to receive updates via email." + /> + + + Already have an account?{" "} + + + Sign in + + + + + + or + + + + + + + + ); +} +interface ToggleColorModeProps extends IconButtonProps { + mode: PaletteMode; + toggleColorMode: () => void; +} +import ModeNightRoundedIcon from "@mui/icons-material/ModeNightRounded"; +import WbSunnyRoundedIcon from "@mui/icons-material/WbSunnyRounded"; +import AppTheme from "./shared-theme/AppTheme.tsx"; +import ColorModeSelect from "./shared-theme/ColorModeSelect.tsx"; +export function ToggleColorMode({ + mode, + toggleColorMode, + ...props +}: ToggleColorModeProps) { + return ( + + {mode === "dark" ? ( + + ) : ( + + )} + + ); +} + +export function ThemeTest() { + return ( + + + + Hey + + + + + ); +} + +import { useColorScheme } from "@mui/material/styles"; +export function ThemeToggle() { + const { mode, systemMode, setMode } = useColorScheme(); + const handleClick = (event: React.MouseEvent) => { + const nmode = mode === "dark" ? "light" : "dark"; + setMode(nmode); + }; + if (!mode) { + return ( + ({ + verticalAlign: "bottom", + display: "inline-flex", + width: "2.25rem", + height: "2.25rem", + borderRadius: (theme.vars || theme).shape.borderRadius, + border: "1px solid", + borderColor: (theme.vars || theme).palette.divider, + })} + /> + ); + } + const resolvedMode = (systemMode || mode) as "light" | "dark"; + const icon = { + light: , + dark: , + }[resolvedMode]; + return ( + + {icon} + + ); +} + +export const scrollableStyle = { + overflowY: "auto", + overflowX: "hidden", + scrollbarWidth: "none", + "&::-webkit-scrollbar": { + display: "none", + }, +}; diff --git a/fe/src/ui/theme/customizations/dataDisplay.tsx b/fe/src/ui/theme/customizations/dataDisplay.tsx new file mode 100644 index 0000000..c93ccbf --- /dev/null +++ b/fe/src/ui/theme/customizations/dataDisplay.tsx @@ -0,0 +1,233 @@ +import { Theme, alpha, Components } from '@mui/material/styles'; +import { svgIconClasses } from '@mui/material/SvgIcon'; +import { typographyClasses } from '@mui/material/Typography'; +import { buttonBaseClasses } from '@mui/material/ButtonBase'; +import { chipClasses } from '@mui/material/Chip'; +import { iconButtonClasses } from '@mui/material/IconButton'; +import { gray, red, green } from '../themePrimitives'; + +/* eslint-disable import/prefer-default-export */ +export const dataDisplayCustomizations: Components = { + MuiList: { + styleOverrides: { + root: { + padding: '8px', + display: 'flex', + flexDirection: 'column', + gap: 0, + }, + }, + }, + MuiListItem: { + styleOverrides: { + root: ({ theme }) => ({ + [`& .${svgIconClasses.root}`]: { + width: '1rem', + height: '1rem', + color: theme.palette.text.secondary, + }, + [`& .${typographyClasses.root}`]: { + fontWeight: 500, + }, + [`& .${buttonBaseClasses.root}`]: { + display: 'flex', + gap: 8, + padding: '2px 8px', + borderRadius: theme.shape.borderRadius, + opacity: 0.7, + '&.Mui-selected': { + opacity: 1, + backgroundColor: alpha(theme.palette.action.selected, 0.3), + [`& .${svgIconClasses.root}`]: { + color: theme.palette.text.primary, + }, + '&:focus-visible': { + backgroundColor: alpha(theme.palette.action.selected, 0.3), + }, + '&:hover': { + backgroundColor: alpha(theme.palette.action.selected, 0.5), + }, + }, + '&:focus-visible': { + backgroundColor: 'transparent', + }, + }, + }), + }, + }, + MuiListItemText: { + styleOverrides: { + primary: ({ theme }) => ({ + fontSize: theme.typography.body2.fontSize, + fontWeight: 500, + lineHeight: theme.typography.body2.lineHeight, + }), + secondary: ({ theme }) => ({ + fontSize: theme.typography.caption.fontSize, + lineHeight: theme.typography.caption.lineHeight, + }), + }, + }, + MuiListSubheader: { + styleOverrides: { + root: ({ theme }) => ({ + backgroundColor: 'transparent', + padding: '4px 8px', + fontSize: theme.typography.caption.fontSize, + fontWeight: 500, + lineHeight: theme.typography.caption.lineHeight, + }), + }, + }, + MuiListItemIcon: { + styleOverrides: { + root: { + minWidth: 0, + }, + }, + }, + MuiChip: { + defaultProps: { + size: 'small', + }, + styleOverrides: { + root: ({ theme }) => ({ + border: '1px solid', + borderRadius: '999px', + [`& .${chipClasses.label}`]: { + fontWeight: 600, + }, + variants: [ + { + props: { + color: 'default', + }, + style: { + borderColor: gray[200], + backgroundColor: gray[100], + [`& .${chipClasses.label}`]: { + color: gray[500], + }, + [`& .${chipClasses.icon}`]: { + color: gray[500], + }, + ...theme.applyStyles('dark', { + borderColor: gray[700], + backgroundColor: gray[800], + [`& .${chipClasses.label}`]: { + color: gray[300], + }, + [`& .${chipClasses.icon}`]: { + color: gray[300], + }, + }), + }, + }, + { + props: { + color: 'success', + }, + style: { + borderColor: green[200], + backgroundColor: green[50], + [`& .${chipClasses.label}`]: { + color: green[500], + }, + [`& .${chipClasses.icon}`]: { + color: green[500], + }, + ...theme.applyStyles('dark', { + borderColor: green[800], + backgroundColor: green[900], + [`& .${chipClasses.label}`]: { + color: green[300], + }, + [`& .${chipClasses.icon}`]: { + color: green[300], + }, + }), + }, + }, + { + props: { + color: 'error', + }, + style: { + borderColor: red[100], + backgroundColor: red[50], + [`& .${chipClasses.label}`]: { + color: red[500], + }, + [`& .${chipClasses.icon}`]: { + color: red[500], + }, + ...theme.applyStyles('dark', { + borderColor: red[800], + backgroundColor: red[900], + [`& .${chipClasses.label}`]: { + color: red[200], + }, + [`& .${chipClasses.icon}`]: { + color: red[300], + }, + }), + }, + }, + { + props: { size: 'small' }, + style: { + maxHeight: 20, + [`& .${chipClasses.label}`]: { + fontSize: theme.typography.caption.fontSize, + }, + [`& .${svgIconClasses.root}`]: { + fontSize: theme.typography.caption.fontSize, + }, + }, + }, + { + props: { size: 'medium' }, + style: { + [`& .${chipClasses.label}`]: { + fontSize: theme.typography.caption.fontSize, + }, + }, + }, + ], + }), + }, + }, + MuiTablePagination: { + styleOverrides: { + actions: { + display: 'flex', + gap: 8, + marginRight: 6, + [`& .${iconButtonClasses.root}`]: { + minWidth: 0, + width: 36, + height: 36, + }, + }, + }, + }, + MuiIcon: { + defaultProps: { + fontSize: 'small', + }, + styleOverrides: { + root: { + variants: [ + { + props: { + fontSize: 'small', + }, + style: { + fontSize: '1rem', + }, + }, + ], + }, + }, + }, +}; diff --git a/fe/src/ui/theme/customizations/feedback.tsx b/fe/src/ui/theme/customizations/feedback.tsx new file mode 100644 index 0000000..aaf0000 --- /dev/null +++ b/fe/src/ui/theme/customizations/feedback.tsx @@ -0,0 +1,46 @@ +import { Theme, alpha, Components } from '@mui/material/styles'; +import { gray, orange } from '../themePrimitives'; + +/* eslint-disable import/prefer-default-export */ +export const feedbackCustomizations: Components = { + MuiAlert: { + styleOverrides: { + root: ({ theme }) => ({ + borderRadius: 10, + backgroundColor: orange[100], + color: theme.palette.text.primary, + border: `1px solid ${alpha(orange[300], 0.5)}`, + '& .MuiAlert-icon': { + color: orange[500], + }, + ...theme.applyStyles('dark', { + backgroundColor: `${alpha(orange[900], 0.5)}`, + border: `1px solid ${alpha(orange[800], 0.5)}`, + }), + }), + }, + }, + MuiDialog: { + styleOverrides: { + root: ({ theme }) => ({ + '& .MuiDialog-paper': { + borderRadius: '10px', + border: '1px solid', + borderColor: theme.palette.divider, + }, + }), + }, + }, + MuiLinearProgress: { + styleOverrides: { + root: ({ theme }) => ({ + height: 8, + borderRadius: 8, + backgroundColor: gray[200], + ...theme.applyStyles('dark', { + backgroundColor: gray[800], + }), + }), + }, + }, +}; diff --git a/fe/src/ui/theme/customizations/index.ts b/fe/src/ui/theme/customizations/index.ts new file mode 100644 index 0000000..91a4485 --- /dev/null +++ b/fe/src/ui/theme/customizations/index.ts @@ -0,0 +1,5 @@ +export { inputsCustomizations } from './inputs'; +export { dataDisplayCustomizations } from './dataDisplay'; +export { feedbackCustomizations } from './feedback'; +export { navigationCustomizations } from './navigation'; +export { surfacesCustomizations } from './surfaces'; diff --git a/fe/src/ui/theme/customizations/inputs.tsx b/fe/src/ui/theme/customizations/inputs.tsx new file mode 100644 index 0000000..4be4c18 --- /dev/null +++ b/fe/src/ui/theme/customizations/inputs.tsx @@ -0,0 +1,445 @@ +import * as React from 'react'; +import { alpha, Theme, Components } from '@mui/material/styles'; +import { outlinedInputClasses } from '@mui/material/OutlinedInput'; +import { svgIconClasses } from '@mui/material/SvgIcon'; +import { toggleButtonGroupClasses } from '@mui/material/ToggleButtonGroup'; +import { toggleButtonClasses } from '@mui/material/ToggleButton'; +import CheckBoxOutlineBlankRoundedIcon from '@mui/icons-material/CheckBoxOutlineBlankRounded'; +import CheckRoundedIcon from '@mui/icons-material/CheckRounded'; +import RemoveRoundedIcon from '@mui/icons-material/RemoveRounded'; +import { gray, brand } from '../themePrimitives'; + +/* eslint-disable import/prefer-default-export */ +export const inputsCustomizations: Components = { + MuiButtonBase: { + defaultProps: { + disableTouchRipple: true, + disableRipple: true, + }, + styleOverrides: { + root: ({ theme }) => ({ + boxSizing: 'border-box', + transition: 'all 100ms ease-in', + '&:focus-visible': { + outline: `3px solid ${alpha(theme.palette.primary.main, 0.5)}`, + outlineOffset: '2px', + }, + }), + }, + }, + MuiButton: { + styleOverrides: { + root: ({ theme }) => ({ + boxShadow: 'none', + borderRadius: theme.shape.borderRadius, + textTransform: 'none', + variants: [ + { + props: { + size: 'small', + }, + style: { + height: '2.25rem', + padding: '8px 12px', + }, + }, + { + props: { + size: 'medium', + }, + style: { + height: '2.5rem', // 40px + }, + }, + { + props: { + color: 'primary', + variant: 'contained', + }, + style: { + color: 'white', + backgroundColor: gray[900], + backgroundImage: `linear-gradient(to bottom, ${gray[700]}, ${gray[800]})`, + boxShadow: `inset 0 1px 0 ${gray[600]}, inset 0 -1px 0 1px hsl(220, 0%, 0%)`, + border: `1px solid ${gray[700]}`, + '&:hover': { + backgroundImage: 'none', + backgroundColor: gray[700], + boxShadow: 'none', + }, + '&:active': { + backgroundColor: gray[800], + }, + ...theme.applyStyles('dark', { + color: 'black', + backgroundColor: gray[50], + backgroundImage: `linear-gradient(to bottom, ${gray[100]}, ${gray[50]})`, + boxShadow: 'inset 0 -1px 0 hsl(220, 30%, 80%)', + border: `1px solid ${gray[50]}`, + '&:hover': { + backgroundImage: 'none', + backgroundColor: gray[300], + boxShadow: 'none', + }, + '&:active': { + backgroundColor: gray[400], + }, + }), + }, + }, + { + props: { + color: 'secondary', + variant: 'contained', + }, + style: { + color: 'white', + backgroundColor: brand[300], + backgroundImage: `linear-gradient(to bottom, ${alpha(brand[400], 0.8)}, ${brand[500]})`, + boxShadow: `inset 0 2px 0 ${alpha(brand[200], 0.2)}, inset 0 -2px 0 ${alpha(brand[700], 0.4)}`, + border: `1px solid ${brand[500]}`, + '&:hover': { + backgroundColor: brand[700], + boxShadow: 'none', + }, + '&:active': { + backgroundColor: brand[700], + backgroundImage: 'none', + }, + }, + }, + { + props: { + variant: 'outlined', + }, + style: { + color: theme.palette.text.primary, + border: '1px solid', + borderColor: gray[200], + backgroundColor: alpha(gray[50], 0.3), + '&:hover': { + backgroundColor: gray[100], + borderColor: gray[300], + }, + '&:active': { + backgroundColor: gray[200], + }, + ...theme.applyStyles('dark', { + backgroundColor: gray[800], + borderColor: gray[700], + + '&:hover': { + backgroundColor: gray[900], + borderColor: gray[600], + }, + '&:active': { + backgroundColor: gray[900], + }, + }), + }, + }, + { + props: { + color: 'secondary', + variant: 'outlined', + }, + style: { + color: brand[700], + border: '1px solid', + borderColor: brand[200], + backgroundColor: brand[50], + '&:hover': { + backgroundColor: brand[100], + borderColor: brand[400], + }, + '&:active': { + backgroundColor: alpha(brand[200], 0.7), + }, + ...theme.applyStyles('dark', { + color: brand[50], + border: '1px solid', + borderColor: brand[900], + backgroundColor: alpha(brand[900], 0.3), + '&:hover': { + borderColor: brand[700], + backgroundColor: alpha(brand[900], 0.6), + }, + '&:active': { + backgroundColor: alpha(brand[900], 0.5), + }, + }), + }, + }, + { + props: { + variant: 'text', + }, + style: { + color: gray[600], + '&:hover': { + backgroundColor: gray[100], + }, + '&:active': { + backgroundColor: gray[200], + }, + ...theme.applyStyles('dark', { + color: gray[50], + '&:hover': { + backgroundColor: gray[700], + }, + '&:active': { + backgroundColor: alpha(gray[700], 0.7), + }, + }), + }, + }, + { + props: { + color: 'secondary', + variant: 'text', + }, + style: { + color: brand[700], + '&:hover': { + backgroundColor: alpha(brand[100], 0.5), + }, + '&:active': { + backgroundColor: alpha(brand[200], 0.7), + }, + ...theme.applyStyles('dark', { + color: brand[100], + '&:hover': { + backgroundColor: alpha(brand[900], 0.5), + }, + '&:active': { + backgroundColor: alpha(brand[900], 0.3), + }, + }), + }, + }, + ], + }), + }, + }, + MuiIconButton: { + styleOverrides: { + root: ({ theme }) => ({ + boxShadow: 'none', + borderRadius: theme.shape.borderRadius, + textTransform: 'none', + fontWeight: theme.typography.fontWeightMedium, + letterSpacing: 0, + color: theme.palette.text.primary, + border: '1px solid ', + borderColor: gray[200], + backgroundColor: alpha(gray[50], 0.3), + '&:hover': { + backgroundColor: gray[100], + borderColor: gray[300], + }, + '&:active': { + backgroundColor: gray[200], + }, + ...theme.applyStyles('dark', { + backgroundColor: gray[800], + borderColor: gray[700], + '&:hover': { + backgroundColor: gray[900], + borderColor: gray[600], + }, + '&:active': { + backgroundColor: gray[900], + }, + }), + variants: [ + { + props: { + size: 'small', + }, + style: { + width: '2.25rem', + height: '2.25rem', + padding: '0.25rem', + [`& .${svgIconClasses.root}`]: { fontSize: '1rem' }, + }, + }, + { + props: { + size: 'medium', + }, + style: { + width: '2.5rem', + height: '2.5rem', + }, + }, + ], + }), + }, + }, + MuiToggleButtonGroup: { + styleOverrides: { + root: ({ theme }) => ({ + borderRadius: '10px', + boxShadow: `0 4px 16px ${alpha(gray[400], 0.2)}`, + [`& .${toggleButtonGroupClasses.selected}`]: { + color: brand[500], + }, + ...theme.applyStyles('dark', { + [`& .${toggleButtonGroupClasses.selected}`]: { + color: '#fff', + }, + boxShadow: `0 4px 16px ${alpha(brand[700], 0.5)}`, + }), + }), + }, + }, + MuiToggleButton: { + styleOverrides: { + root: ({ theme }) => ({ + padding: '12px 16px', + textTransform: 'none', + borderRadius: '10px', + fontWeight: 500, + ...theme.applyStyles('dark', { + color: gray[400], + boxShadow: '0 4px 16px rgba(0, 0, 0, 0.5)', + [`&.${toggleButtonClasses.selected}`]: { + color: brand[300], + }, + }), + }), + }, + }, + MuiCheckbox: { + defaultProps: { + disableRipple: true, + icon: ( + + ), + checkedIcon: , + indeterminateIcon: , + }, + styleOverrides: { + root: ({ theme }) => ({ + margin: 10, + height: 16, + width: 16, + borderRadius: 5, + border: '1px solid ', + borderColor: alpha(gray[300], 0.8), + boxShadow: '0 0 0 1.5px hsla(210, 0%, 0%, 0.04) inset', + backgroundColor: alpha(gray[100], 0.4), + transition: 'border-color, background-color, 120ms ease-in', + '&:hover': { + borderColor: brand[300], + }, + '&.Mui-focusVisible': { + outline: `3px solid ${alpha(brand[500], 0.5)}`, + outlineOffset: '2px', + borderColor: brand[400], + }, + '&.Mui-checked': { + color: 'white', + backgroundColor: brand[500], + borderColor: brand[500], + boxShadow: `none`, + '&:hover': { + backgroundColor: brand[600], + }, + }, + ...theme.applyStyles('dark', { + borderColor: alpha(gray[700], 0.8), + boxShadow: '0 0 0 1.5px hsl(210, 0%, 0%) inset', + backgroundColor: alpha(gray[900], 0.8), + '&:hover': { + borderColor: brand[300], + }, + '&.Mui-focusVisible': { + borderColor: brand[400], + outline: `3px solid ${alpha(brand[500], 0.5)}`, + outlineOffset: '2px', + }, + }), + }), + }, + }, + MuiInputBase: { + styleOverrides: { + root: { + border: 'none', + }, + input: { + '&::placeholder': { + opacity: 0.7, + color: gray[500], + }, + }, + }, + }, + MuiOutlinedInput: { + styleOverrides: { + input: { + padding: 0, + }, + root: ({ theme }) => ({ + padding: '8px 12px', + color: theme.palette.text.primary, + borderRadius: theme.shape.borderRadius, + border: `1px solid ${theme.palette.divider}`, + backgroundColor: theme.palette.background.default, + transition: 'border 120ms ease-in', + '&:hover': { + borderColor: gray[400], + }, + [`&.${outlinedInputClasses.focused}`]: { + outline: `3px solid ${alpha(brand[500], 0.5)}`, + borderColor: brand[400], + }, + ...theme.applyStyles('dark', { + '&:hover': { + borderColor: gray[500], + }, + }), + variants: [ + { + props: { + size: 'small', + }, + style: { + height: '2.25rem', + }, + }, + { + props: { + size: 'medium', + }, + style: { + height: '2.5rem', + }, + }, + ], + }), + notchedOutline: { + border: 'none', + }, + }, + }, + MuiInputAdornment: { + styleOverrides: { + root: ({ theme }) => ({ + color: theme.palette.grey[500], + ...theme.applyStyles('dark', { + color: theme.palette.grey[400], + }), + }), + }, + }, + MuiFormLabel: { + styleOverrides: { + root: ({ theme }) => ({ + typography: theme.typography.caption, + marginBottom: 8, + }), + }, + }, +}; diff --git a/fe/src/ui/theme/customizations/navigation.tsx b/fe/src/ui/theme/customizations/navigation.tsx new file mode 100644 index 0000000..f6b92e5 --- /dev/null +++ b/fe/src/ui/theme/customizations/navigation.tsx @@ -0,0 +1,279 @@ +import * as React from 'react'; +import { Theme, alpha, Components } from '@mui/material/styles'; +import { SvgIconProps } from '@mui/material/SvgIcon'; +import { buttonBaseClasses } from '@mui/material/ButtonBase'; +import { dividerClasses } from '@mui/material/Divider'; +import { menuItemClasses } from '@mui/material/MenuItem'; +import { selectClasses } from '@mui/material/Select'; +import { tabClasses } from '@mui/material/Tab'; +import UnfoldMoreRoundedIcon from '@mui/icons-material/UnfoldMoreRounded'; +import { gray, brand } from '../themePrimitives'; + +/* eslint-disable import/prefer-default-export */ +export const navigationCustomizations: Components = { + MuiMenuItem: { + styleOverrides: { + root: ({ theme }) => ({ + borderRadius: theme.shape.borderRadius, + padding: '6px 8px', + [`&.${menuItemClasses.focusVisible}`]: { + backgroundColor: 'transparent', + }, + [`&.${menuItemClasses.selected}`]: { + [`&.${menuItemClasses.focusVisible}`]: { + backgroundColor: alpha(theme.palette.action.selected, 0.3), + }, + }, + }), + }, + }, + MuiMenu: { + styleOverrides: { + list: { + gap: '0px', + [`&.${dividerClasses.root}`]: { + margin: '0 -8px', + }, + }, + paper: ({ theme }) => ({ + marginTop: '4px', + borderRadius: theme.shape.borderRadius, + border: `1px solid ${theme.palette.divider}`, + backgroundImage: 'none', + background: 'hsl(0, 0%, 100%)', + boxShadow: + 'hsla(220, 30%, 5%, 0.07) 0px 4px 16px 0px, hsla(220, 25%, 10%, 0.07) 0px 8px 16px -5px', + [`& .${buttonBaseClasses.root}`]: { + '&.Mui-selected': { + backgroundColor: alpha(theme.palette.action.selected, 0.3), + }, + }, + ...theme.applyStyles('dark', { + background: gray[900], + boxShadow: + 'hsla(220, 30%, 5%, 0.7) 0px 4px 16px 0px, hsla(220, 25%, 10%, 0.8) 0px 8px 16px -5px', + }), + }), + }, + }, + MuiSelect: { + defaultProps: { + IconComponent: React.forwardRef((props, ref) => ( + + )), + }, + styleOverrides: { + root: ({ theme }) => ({ + borderRadius: theme.shape.borderRadius, + border: '1px solid', + borderColor: gray[200], + backgroundColor: theme.palette.background.paper, + boxShadow: `inset 0 1px 0 1px hsla(220, 0%, 100%, 0.6), inset 0 -1px 0 1px hsla(220, 35%, 90%, 0.5)`, + '&:hover': { + borderColor: gray[300], + backgroundColor: theme.palette.background.paper, + boxShadow: 'none', + }, + [`&.${selectClasses.focused}`]: { + outlineOffset: 0, + borderColor: gray[400], + }, + '&:before, &:after': { + display: 'none', + }, + + ...theme.applyStyles('dark', { + borderRadius: theme.shape.borderRadius, + borderColor: gray[700], + backgroundColor: theme.palette.background.paper, + boxShadow: `inset 0 1px 0 1px ${alpha(gray[700], 0.15)}, inset 0 -1px 0 1px hsla(220, 0%, 0%, 0.7)`, + '&:hover': { + borderColor: alpha(gray[700], 0.7), + backgroundColor: theme.palette.background.paper, + boxShadow: 'none', + }, + [`&.${selectClasses.focused}`]: { + outlineOffset: 0, + borderColor: gray[900], + }, + '&:before, &:after': { + display: 'none', + }, + }), + }), + select: ({ theme }) => ({ + display: 'flex', + alignItems: 'center', + ...theme.applyStyles('dark', { + display: 'flex', + alignItems: 'center', + '&:focus-visible': { + backgroundColor: gray[900], + }, + }), + }), + }, + }, + MuiLink: { + defaultProps: { + underline: 'none', + }, + styleOverrides: { + root: ({ theme }) => ({ + color: theme.palette.text.primary, + fontWeight: 500, + position: 'relative', + textDecoration: 'none', + width: 'fit-content', + '&::before': { + content: '""', + position: 'absolute', + width: '100%', + height: '1px', + bottom: 0, + left: 0, + backgroundColor: theme.palette.text.secondary, + opacity: 0.3, + transition: 'width 0.3s ease, opacity 0.3s ease', + }, + '&:hover::before': { + width: 0, + }, + '&:focus-visible': { + outline: `3px solid ${alpha(brand[500], 0.5)}`, + outlineOffset: '4px', + borderRadius: '2px', + }, + }), + }, + }, + MuiDrawer: { + styleOverrides: { + paper: ({ theme }) => ({ + backgroundColor: theme.palette.background.default, + }), + }, + }, + MuiPaginationItem: { + styleOverrides: { + root: ({ theme }) => ({ + '&.Mui-selected': { + color: 'white', + backgroundColor: theme.palette.grey[900], + }, + ...theme.applyStyles('dark', { + '&.Mui-selected': { + color: 'black', + backgroundColor: theme.palette.grey[50], + }, + }), + }), + }, + }, + MuiTabs: { + styleOverrides: { + root: { minHeight: 'fit-content' }, + indicator: ({ theme }) => ({ + backgroundColor: theme.palette.grey[800], + ...theme.applyStyles('dark', { + backgroundColor: theme.palette.grey[200], + }), + }), + }, + }, + MuiTab: { + styleOverrides: { + root: ({ theme }) => ({ + padding: '6px 8px', + marginBottom: '8px', + textTransform: 'none', + minWidth: 'fit-content', + minHeight: 'fit-content', + color: theme.palette.text.secondary, + borderRadius: theme.shape.borderRadius, + border: '1px solid', + borderColor: 'transparent', + ':hover': { + color: theme.palette.text.primary, + backgroundColor: gray[100], + borderColor: gray[200], + }, + [`&.${tabClasses.selected}`]: { + color: gray[900], + }, + ...theme.applyStyles('dark', { + ':hover': { + color: theme.palette.text.primary, + backgroundColor: gray[800], + borderColor: gray[700], + }, + [`&.${tabClasses.selected}`]: { + color: '#fff', + }, + }), + }), + }, + }, + MuiStepConnector: { + styleOverrides: { + line: ({ theme }) => ({ + borderTop: '1px solid', + borderColor: theme.palette.divider, + flex: 1, + borderRadius: '99px', + }), + }, + }, + MuiStepIcon: { + styleOverrides: { + root: ({ theme }) => ({ + color: 'transparent', + border: `1px solid ${gray[400]}`, + width: 12, + height: 12, + borderRadius: '50%', + '& text': { + display: 'none', + }, + '&.Mui-active': { + border: 'none', + color: theme.palette.primary.main, + }, + '&.Mui-completed': { + border: 'none', + color: theme.palette.success.main, + }, + ...theme.applyStyles('dark', { + border: `1px solid ${gray[700]}`, + '&.Mui-active': { + border: 'none', + color: theme.palette.primary.light, + }, + '&.Mui-completed': { + border: 'none', + color: theme.palette.success.light, + }, + }), + variants: [ + { + props: { completed: true }, + style: { + width: 12, + height: 12, + }, + }, + ], + }), + }, + }, + MuiStepLabel: { + styleOverrides: { + label: ({ theme }) => ({ + '&.Mui-completed': { + opacity: 0.6, + ...theme.applyStyles('dark', { opacity: 0.5 }), + }, + }), + }, + }, +}; diff --git a/fe/src/ui/theme/customizations/surfaces.ts b/fe/src/ui/theme/customizations/surfaces.ts new file mode 100644 index 0000000..5bcdfc5 --- /dev/null +++ b/fe/src/ui/theme/customizations/surfaces.ts @@ -0,0 +1,113 @@ +import { alpha, Theme, Components } from '@mui/material/styles'; +import { gray } from '../themePrimitives'; + +/* eslint-disable import/prefer-default-export */ +export const surfacesCustomizations: Components = { + MuiAccordion: { + defaultProps: { + elevation: 0, + disableGutters: true, + }, + styleOverrides: { + root: ({ theme }) => ({ + padding: 4, + overflow: 'clip', + backgroundColor: theme.palette.background.default, + border: '1px solid', + borderColor: theme.palette.divider, + ':before': { + backgroundColor: 'transparent', + }, + '&:not(:last-of-type)': { + borderBottom: 'none', + }, + '&:first-of-type': { + borderTopLeftRadius: theme.shape.borderRadius, + borderTopRightRadius: theme.shape.borderRadius, + }, + '&:last-of-type': { + borderBottomLeftRadius: theme.shape.borderRadius, + borderBottomRightRadius: theme.shape.borderRadius, + }, + }), + }, + }, + MuiAccordionSummary: { + styleOverrides: { + root: ({ theme }) => ({ + border: 'none', + borderRadius: 8, + '&:hover': { backgroundColor: gray[50] }, + '&:focus-visible': { backgroundColor: 'transparent' }, + ...theme.applyStyles('dark', { + '&:hover': { backgroundColor: gray[800] }, + }), + }), + }, + }, + MuiAccordionDetails: { + styleOverrides: { + root: { mb: 20, border: 'none' }, + }, + }, + MuiPaper: { + defaultProps: { + elevation: 0, + }, + }, + MuiCard: { + styleOverrides: { + root: ({ theme }) => { + return { + padding: 16, + gap: 16, + transition: 'all 100ms ease', + backgroundColor: gray[50], + borderRadius: theme.shape.borderRadius, + border: `1px solid ${theme.palette.divider}`, + boxShadow: 'none', + ...theme.applyStyles('dark', { + backgroundColor: gray[800], + }), + variants: [ + { + props: { + variant: 'outlined', + }, + style: { + border: `1px solid ${theme.palette.divider}`, + boxShadow: 'none', + background: 'hsl(0, 0%, 100%)', + ...theme.applyStyles('dark', { + background: alpha(gray[900], 0.4), + }), + }, + }, + ], + }; + }, + }, + }, + MuiCardContent: { + styleOverrides: { + root: { + padding: 0, + '&:last-child': { paddingBottom: 0 }, + }, + }, + }, + MuiCardHeader: { + styleOverrides: { + root: { + padding: 0, + }, + }, + }, + MuiCardActions: { + styleOverrides: { + root: { + padding: 0, + }, + }, + }, +}; diff --git a/fe/src/ui/theme/getSignUpTheme.tsx b/fe/src/ui/theme/getSignUpTheme.tsx new file mode 100644 index 0000000..514832b --- /dev/null +++ b/fe/src/ui/theme/getSignUpTheme.tsx @@ -0,0 +1,23 @@ +import type {} from '@mui/material/themeCssVarsAugmentation'; +import { ThemeOptions, PaletteMode } from '@mui/material/styles'; +import { getDesignTokens } from './themePrimitives'; +import { + inputsCustomizations, + dataDisplayCustomizations, + feedbackCustomizations, + navigationCustomizations, + surfacesCustomizations, +} from './customizations'; + +export default function getSignUpTheme(mode: PaletteMode): ThemeOptions { + return { + ...getDesignTokens(mode), + components: { + ...inputsCustomizations, + ...dataDisplayCustomizations, + ...feedbackCustomizations, + ...navigationCustomizations, + ...surfacesCustomizations, + }, + }; +} diff --git a/fe/src/ui/theme/themePrimitives.ts b/fe/src/ui/theme/themePrimitives.ts new file mode 100644 index 0000000..41b517b --- /dev/null +++ b/fe/src/ui/theme/themePrimitives.ts @@ -0,0 +1,235 @@ +import { createTheme, alpha, PaletteMode, Shadows } from '@mui/material/styles'; + +declare module '@mui/material/Paper' { + interface PaperPropsVariantOverrides { + highlighted: true; + } +} +declare module '@mui/material/styles/createPalette' { + interface ColorRange { + 50: string; + 100: string; + 200: string; + 300: string; + 400: string; + 500: string; + 600: string; + 700: string; + 800: string; + 900: string; + } + + interface PaletteColor extends ColorRange {} +} + +const defaultTheme = createTheme(); + +const customShadows: Shadows = [...defaultTheme.shadows]; + +export const brand = { + 50: 'hsl(210, 100%, 95%)', + 100: 'hsl(210, 100%, 92%)', + 200: 'hsl(210, 100%, 80%)', + 300: 'hsl(210, 100%, 65%)', + 400: 'hsl(210, 98%, 48%)', + 500: 'hsl(210, 98%, 42%)', + 600: 'hsl(210, 98%, 55%)', + 700: 'hsl(210, 100%, 35%)', + 800: 'hsl(210, 100%, 16%)', + 900: 'hsl(210, 100%, 21%)', +}; + +export const gray = { + 50: 'hsl(220, 35%, 97%)', + 100: 'hsl(220, 30%, 94%)', + 200: 'hsl(220, 20%, 88%)', + 300: 'hsl(220, 20%, 80%)', + 400: 'hsl(220, 20%, 65%)', + 500: 'hsl(220, 20%, 42%)', + 600: 'hsl(220, 20%, 35%)', + 700: 'hsl(220, 20%, 25%)', + 800: 'hsl(220, 30%, 6%)', + 900: 'hsl(220, 35%, 3%)', +}; + +export const green = { + 50: 'hsl(120, 80%, 98%)', + 100: 'hsl(120, 75%, 94%)', + 200: 'hsl(120, 75%, 87%)', + 300: 'hsl(120, 61%, 77%)', + 400: 'hsl(120, 44%, 53%)', + 500: 'hsl(120, 59%, 30%)', + 600: 'hsl(120, 70%, 25%)', + 700: 'hsl(120, 75%, 16%)', + 800: 'hsl(120, 84%, 10%)', + 900: 'hsl(120, 87%, 6%)', +}; + +export const orange = { + 50: 'hsl(45, 100%, 97%)', + 100: 'hsl(45, 92%, 90%)', + 200: 'hsl(45, 94%, 80%)', + 300: 'hsl(45, 90%, 65%)', + 400: 'hsl(45, 90%, 40%)', + 500: 'hsl(45, 90%, 35%)', + 600: 'hsl(45, 91%, 25%)', + 700: 'hsl(45, 94%, 20%)', + 800: 'hsl(45, 95%, 16%)', + 900: 'hsl(45, 93%, 12%)', +}; + +export const red = { + 50: 'hsl(0, 100%, 97%)', + 100: 'hsl(0, 92%, 90%)', + 200: 'hsl(0, 94%, 80%)', + 300: 'hsl(0, 90%, 65%)', + 400: 'hsl(0, 90%, 40%)', + 500: 'hsl(0, 90%, 30%)', + 600: 'hsl(0, 91%, 25%)', + 700: 'hsl(0, 94%, 18%)', + 800: 'hsl(0, 95%, 12%)', + 900: 'hsl(0, 93%, 6%)', +}; + +export const getDesignTokens = (mode: PaletteMode) => { + customShadows[1] = + mode === 'dark' + ? 'hsla(220, 30%, 5%, 0.7) 0px 4px 16px 0px, hsla(220, 25%, 10%, 0.8) 0px 8px 16px -5px' + : 'hsla(220, 30%, 5%, 0.07) 0px 4px 16px 0px, hsla(220, 25%, 10%, 0.07) 0px 8px 16px -5px'; + + return { + palette: { + mode, + primary: { + light: brand[200], + main: brand[400], + dark: brand[700], + contrastText: brand[50], + ...(mode === 'dark' && { + contrastText: brand[50], + light: brand[300], + main: brand[400], + dark: brand[700], + }), + }, + info: { + light: brand[100], + main: brand[300], + dark: brand[600], + contrastText: gray[50], + ...(mode === 'dark' && { + contrastText: brand[300], + light: brand[500], + main: brand[700], + dark: brand[900], + }), + }, + warning: { + light: orange[300], + main: orange[400], + dark: orange[800], + ...(mode === 'dark' && { + light: orange[400], + main: orange[500], + dark: orange[700], + }), + }, + error: { + light: red[300], + main: red[400], + dark: red[800], + ...(mode === 'dark' && { + light: red[400], + main: red[500], + dark: red[700], + }), + }, + success: { + light: green[300], + main: green[400], + dark: green[800], + ...(mode === 'dark' && { + light: green[400], + main: green[500], + dark: green[700], + }), + }, + grey: { + ...gray, + }, + divider: mode === 'dark' ? alpha(gray[700], 0.6) : alpha(gray[300], 0.4), + background: { + default: 'hsl(0, 0%, 99%)', + paper: 'hsl(220, 35%, 97%)', + ...(mode === 'dark' && { default: gray[900], paper: 'hsl(220, 30%, 7%)' }), + }, + text: { + primary: gray[800], + secondary: gray[600], + warning: orange[400], + ...(mode === 'dark' && { primary: 'hsl(0, 0%, 100%)', secondary: gray[400] }), + }, + action: { + hover: alpha(gray[200], 0.2), + selected: `${alpha(gray[200], 0.3)}`, + ...(mode === 'dark' && { + hover: alpha(gray[600], 0.2), + selected: alpha(gray[600], 0.3), + }), + }, + }, + typography: { + fontFamily: ['"Inter", "sans-serif"'].join(','), + h1: { + fontSize: defaultTheme.typography.pxToRem(48), + fontWeight: 600, + lineHeight: 1.2, + letterSpacing: -0.5, + }, + h2: { + fontSize: defaultTheme.typography.pxToRem(36), + fontWeight: 600, + lineHeight: 1.2, + }, + h3: { + fontSize: defaultTheme.typography.pxToRem(30), + lineHeight: 1.2, + }, + h4: { + fontSize: defaultTheme.typography.pxToRem(24), + fontWeight: 600, + lineHeight: 1.5, + }, + h5: { + fontSize: defaultTheme.typography.pxToRem(20), + fontWeight: 600, + }, + h6: { + fontSize: defaultTheme.typography.pxToRem(18), + fontWeight: 600, + }, + subtitle1: { + fontSize: defaultTheme.typography.pxToRem(18), + }, + subtitle2: { + fontSize: defaultTheme.typography.pxToRem(14), + fontWeight: 500, + }, + body1: { + fontSize: defaultTheme.typography.pxToRem(14), + }, + body2: { + fontSize: defaultTheme.typography.pxToRem(14), + fontWeight: 400, + }, + caption: { + fontSize: defaultTheme.typography.pxToRem(12), + fontWeight: 400, + }, + }, + shape: { + borderRadius: 8, + }, + shadows: customShadows, + }; +}; diff --git a/fe/src/vite-env.d.ts b/fe/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/fe/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/fe/tsconfig.app.json b/fe/tsconfig.app.json new file mode 100644 index 0000000..588add2 --- /dev/null +++ b/fe/tsconfig.app.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable", "WebWorker", "ES2021.String"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noFallthroughCasesInSwitch": false + }, + "include": ["src"], + "types": ["vite/client", "vite-plugin-pwa/client"], + "baseUrl": "./src", + "paths": { + "@/*": ["*"] + } +} diff --git a/fe/tsconfig.app.tsbuildinfo b/fe/tsconfig.app.tsbuildinfo new file mode 100644 index 0000000..c9a18eb --- /dev/null +++ b/fe/tsconfig.app.tsbuildinfo @@ -0,0 +1 @@ +{"root":["./src/App.tsx","./src/Router.tsx","./src/main.tsx","./src/vite-env.d.ts","./src/dashboard/CreateForm.tsx","./src/dashboard/Dashboard.tsx","./src/dashboard/Site.tsx","./src/logic/comms.ts","./src/logic/constants.ts","./src/logic/store.ts","./src/logic/tlon-helpers.ts","./src/logic/types-tlon.ts","./src/logic/types.ts","./src/logic/utils.ts","./src/logic/ob/co.ts","./src/logic/ob/muk.ts","./src/logic/ob/ob.ts","./src/logic/ob/types.ts","./src/modals/Example.tsx","./src/modals/Modal.tsx","./src/ui/Components.tsx","./src/ui/Drag.tsx","./src/ui/Sigil.tsx","./src/ui/theme.tsx","./src/ui/shared-theme/AppTheme.tsx","./src/ui/shared-theme/ColorModeIconDropdown.tsx","./src/ui/shared-theme/ColorModeSelect.tsx","./src/ui/shared-theme/themePrimitives.ts","./src/ui/shared-theme/customizations/dataDisplay.tsx","./src/ui/shared-theme/customizations/feedback.tsx","./src/ui/shared-theme/customizations/inputs.tsx","./src/ui/shared-theme/customizations/navigation.tsx","./src/ui/shared-theme/customizations/surfaces.ts","./src/ui/sigil-ts/index.ts","./src/ui/sigil-ts/lib.ts","./src/ui/sigil-ts/reactImageRenderer.ts","./src/ui/sigil-ts/reactRenderer.ts","./src/ui/sigil-ts/stringRenderer.ts","./src/ui/sigil-ts/types.ts","./src/ui/sign-up/CustomIcons.tsx","./src/ui/sign-up/SignUp.tsx","./src/ui/sign-up/TemplateFrame.tsx","./src/ui/sign-up/ToggleColorMode.tsx","./src/ui/sign-up/getSignUpTheme.tsx","./src/ui/sign-up/theme/getSignUpTheme.tsx","./src/ui/sign-up/theme/themePrimitives.ts","./src/ui/sign-up/theme/customizations/dataDisplay.tsx","./src/ui/sign-up/theme/customizations/feedback.tsx","./src/ui/sign-up/theme/customizations/index.ts","./src/ui/sign-up/theme/customizations/inputs.tsx","./src/ui/sign-up/theme/customizations/navigation.tsx","./src/ui/sign-up/theme/customizations/surfaces.ts","./src/ui/theme/getSignUpTheme.tsx","./src/ui/theme/themePrimitives.ts","./src/ui/theme/customizations/dataDisplay.tsx","./src/ui/theme/customizations/feedback.tsx","./src/ui/theme/customizations/index.ts","./src/ui/theme/customizations/inputs.tsx","./src/ui/theme/customizations/navigation.tsx","./src/ui/theme/customizations/surfaces.ts"],"version":"5.6.2"} \ No newline at end of file diff --git a/fe/tsconfig.json b/fe/tsconfig.json new file mode 100644 index 0000000..d32ff68 --- /dev/null +++ b/fe/tsconfig.json @@ -0,0 +1,4 @@ +{ + "files": [], + "references": [{ "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" }] +} diff --git a/fe/tsconfig.node.json b/fe/tsconfig.node.json new file mode 100644 index 0000000..0d3d714 --- /dev/null +++ b/fe/tsconfig.node.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["vite.config.ts"] +} diff --git a/fe/tsconfig.node.tsbuildinfo b/fe/tsconfig.node.tsbuildinfo new file mode 100644 index 0000000..98ef2f9 --- /dev/null +++ b/fe/tsconfig.node.tsbuildinfo @@ -0,0 +1 @@ +{"root":["./vite.config.ts"],"version":"5.6.2"} \ No newline at end of file diff --git a/fe/vite.config.ts b/fe/vite.config.ts new file mode 100644 index 0000000..70001c4 --- /dev/null +++ b/fe/vite.config.ts @@ -0,0 +1,32 @@ +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; +import { createHash } from "crypto"; + +export default defineConfig({ + base: "/apps/ucm", + plugins: [react()], + resolve: { + alias: { "@": new URL("./src/", import.meta.url).pathname }, + }, + build: { + rollupOptions: { + output: { + assetFileNames: (a) => { + let hash = createHash("sha256"); + hash.update(a.source); + hash.update(a.name!); + const str = hash.digest("hex").slice(0, 16); + return `assets/${str}-${a.name}`; + }, + entryFileNames: (c) => { + let hash = createHash("sha256"); + for (let m of c.moduleIds) { + hash.update(m); + } + const str = hash.digest("hex").slice(0, 16); + return `assets/${str}-${c.name}.js`; + }, + }, + }, + }, +}); diff --git a/site/.gitignore b/site/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/site/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/site/.prettierrc.json b/site/.prettierrc.json new file mode 100644 index 0000000..6ec5828 --- /dev/null +++ b/site/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "trailingComma": "all", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "printWidth": 90 +} diff --git a/site/README.md b/site/README.md new file mode 100644 index 0000000..74872fd --- /dev/null +++ b/site/README.md @@ -0,0 +1,50 @@ +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type aware lint rules: + +- Configure the top-level `parserOptions` property like this: + +```js +export default tseslint.config({ + languageOptions: { + // other options... + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + }, +}) +``` + +- Replace `tseslint.configs.recommended` to `tseslint.configs.recommendedTypeChecked` or `tseslint.configs.strictTypeChecked` +- Optionally add `...tseslint.configs.stylisticTypeChecked` +- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and update the config: + +```js +// eslint.config.js +import react from 'eslint-plugin-react' + +export default tseslint.config({ + // Set the react version + settings: { react: { version: '18.3' } }, + plugins: { + // Add the react plugin + react, + }, + rules: { + // other rules... + // Enable its recommended rules + ...react.configs.recommended.rules, + ...react.configs['jsx-runtime'].rules, + }, +}) +``` diff --git a/site/bun.lockb b/site/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..d2d2af73d6cbce25da47221b45883aadbdffeae6 GIT binary patch literal 306847 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 DKk0A# literal 0 HcmV?d00001 diff --git a/site/eslint.config.js b/site/eslint.config.js new file mode 100644 index 0000000..092408a --- /dev/null +++ b/site/eslint.config.js @@ -0,0 +1,28 @@ +import js from '@eslint/js' +import globals from 'globals' +import reactHooks from 'eslint-plugin-react-hooks' +import reactRefresh from 'eslint-plugin-react-refresh' +import tseslint from 'typescript-eslint' + +export default tseslint.config( + { ignores: ['dist'] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ['**/*.{ts,tsx}'], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + 'react-hooks': reactHooks, + 'react-refresh': reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + 'react-refresh/only-export-components': [ + 'warn', + { allowConstantExport: true }, + ], + }, + }, +) diff --git a/site/index.html b/site/index.html new file mode 100644 index 0000000..0592657 --- /dev/null +++ b/site/index.html @@ -0,0 +1,13 @@ + + + + + + UCM Site + + +
      + + + + diff --git a/site/package.json b/site/package.json new file mode 100644 index 0000000..92ffc0a --- /dev/null +++ b/site/package.json @@ -0,0 +1,51 @@ +{ + "name": "ucm site", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint .", + "preview": "vite preview" + }, + "dependencies": { + "@emotion/react": "^11.13.3", + "@emotion/styled": "^11.13.0", + "@fontsource/inter": "^5.1.0", + "@fontsource/roboto": "^5.1.0", + "@mui/icons-material": "^6.1.0", + "@mui/material": "^6.1.0", + "@tanstack/react-query": "^5.59.0", + "@urbit/http-api": "file:../../js-http-api", + "bn.js": "^5.2.1", + "invariant": "^2.2.4", + "lodash": "^4.17.21", + "marked": "^14.1.2", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-html-parser": "^2.0.2", + "react-player": "^2.16.0", + "svgson": "^5.3.1", + "transformation-matrix": "^2.16.1", + "wouter": "^3.3.5", + "zustand": "^4.5.5" + }, + "peerDependencies": { + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "devDependencies": { + "@eslint/js": "^9.9.0", + "@types/bn.js": "^5.1.6", + "@types/invariant": "^2.2.37", + "@types/lodash": "^4.17.7", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@types/react-html-parser": "^2.0.6", + "@vitejs/plugin-react": "^4.3.1", + "globals": "^15.9.0", + "typescript": "^5.6.2", + "vite": "^5.4.1" + } +} diff --git a/site/public/vite.svg b/site/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/site/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/rename-files.js b/site/rename-files.js new file mode 100644 index 0000000..b684d43 --- /dev/null +++ b/site/rename-files.js @@ -0,0 +1,48 @@ + +// rename-files.js +import fs from 'fs'; +import path from 'path'; + +const distDir = path.resolve(__dirname, 'dist'); + +let files; +function renameFilesToLowercase(dir) { + files = fs.readdirSync(dir); + console.log(files, "files") + + files.forEach((file) => { + const oldPath = path.join(dir, file); + const newPath = path.join(dir, file.toLowerCase()); + + // Rename files + if (oldPath !== newPath) { + fs.renameSync(oldPath, newPath); + } + + // If it's a directory, recursively rename files inside + if (fs.statSync(newPath).isDirectory()) { + renameFilesToLowercase(newPath); + } + }); +} +function updateReferences(dir) { + const regex = new RegExp(files.join("|"), 'gi'); + const fils = fs.readdirSync(dir); + console.log("renamed files", fils) + fils.forEach((file) => { + const filePath = path.join(dir, file); + if (fs.statSync(filePath).isFile()) { + let content = fs.readFileSync(filePath, 'utf-8'); + const newContent = content.replace(regex, (match) => match.toLowerCase()); + + if (content !== newContent) { + fs.writeFileSync(filePath, newContent); + } + } else if (fs.statSync(filePath).isDirectory()) { + updateReferences(filePath); + } + }); +} + +renameFilesToLowercase(distDir); +updateReferences(distDir); diff --git a/site/src/App.css b/site/src/App.css new file mode 100644 index 0000000..7bdb146 --- /dev/null +++ b/site/src/App.css @@ -0,0 +1,110 @@ +html, +body, +#root { + width: 100%; + height: 100%; + overflow: hidden; + /* max-width: 1280px; */ + /* margin: 0 auto; */ + /* padding: 2rem; */ + /* text-align: center; */ +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} +em { + margin: 0 0.5ch; +} + +.logo { + height: 6em; + padding: 1.5em; + will-change: filter; + transition: filter 300ms; +} +.logo:hover { + filter: drop-shadow(0 0 2em #646cffaa); +} +.logo.react:hover { + filter: drop-shadow(0 0 2em #61dafbaa); +} + +@keyframes logo-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +@media (prefers-reduced-motion: no-preference) { + a:nth-of-type(2) .logo { + animation: logo-spin infinite 20s linear; + } +} + +.card { + padding: 2em; +} + +.read-the-docs { + color: #888; +} +.textarea textarea, .textarea >div{ + width: 100%; + height: 100% !important; +} +.textarea textarea{ + overflow-y: scroll !important; +} +a { + font-weight: 500; + text-decoration: inherit; +} + + +.msg-inline-code{ + font-family: monospace; + background-color: rgb(0, 0, 0, 0.1); + padding: 0.1rem; +} +.inline-content > span{ + margin: 0 0.3ch; +} +.msg-ship-mention{ + font-family: monospace; +} diff --git a/site/src/App.tsx b/site/src/App.tsx new file mode 100644 index 0000000..e03672f --- /dev/null +++ b/site/src/App.tsx @@ -0,0 +1,61 @@ +import { useEffect } from "react"; +import "./App.css"; +import useStore from "./logic/store"; +import Router, { NotFound } from "./site/Home"; +import CssBaseline from "@mui/material/CssBaseline"; +import AppTheme from "./ui/theme/AppTheme"; +import { LoadingScreen } from "./ui/Components"; +import { + QueryClient, + QueryClientProvider, + useQuery, + useQueryClient, +} from "@tanstack/react-query"; +import { SITE_NAME } from "./logic/constants"; +import { useParams } from "wouter"; +import { ScryRes } from "./logic/comms"; + +function App() { + const { init, loading } = useStore(["init", "loading"]); + useEffect(() => { + init(); + }, []); + const queryClient = new QueryClient(); + + return ( + + + + {loading ? : } + + + ); +} + +export default App; + +function Loader() { + const queryClient = useQueryClient(); + const params: any = useParams(); + const { io } = useStore(["io"]); + const { initSubs, scrySite } = io(); + const { isLoading, data } = useQuery({ + queryKey: ["site"], + queryFn: scrySite, + }); + useEffect(() => { + initSubs(SITE_NAME, (site) => { + queryClient.setQueryData(["site"], (old: ScryRes) => { + return { ...old, site }; + }); + }); + }, []); + + return isLoading ? ( + + ) : data && data.site && data.group ? ( + + ) : ( + + ); +} diff --git a/site/src/assets/icons/comet.svg b/site/src/assets/icons/comet.svg new file mode 100644 index 0000000..2d5c3f5 --- /dev/null +++ b/site/src/assets/icons/comet.svg @@ -0,0 +1,23 @@ + + + + + diff --git a/site/src/assets/icons/spinner.svg b/site/src/assets/icons/spinner.svg new file mode 100755 index 0000000..2a516de --- /dev/null +++ b/site/src/assets/icons/spinner.svg @@ -0,0 +1 @@ + diff --git a/site/src/assets/react.svg b/site/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/site/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/site/src/logic/comms.ts b/site/src/logic/comms.ts new file mode 100644 index 0000000..4362632 --- /dev/null +++ b/site/src/logic/comms.ts @@ -0,0 +1,529 @@ +import { APP_NAME } from "./constants"; +import { AppType, Ship, Site } from "./types"; +import { addDots, isValidHttpUrl } from "./utils"; +import { + ChannelUpdate, + ChannelsRes, + Content, + DiaryPage, + DiaryPost, + Essay, + Group, + Memo, + PostsPage, +} from "./types-tlon"; +import Urbit from "@urbit/http-api"; + +type EventHandler = (data: any) => void; +type ErrorHandler = (data: any, id: string) => void; + +export function urbitIO(airlock: Urbit) { + const sub = async ( + app: string, + path: string, + event: EventHandler, + err?: ErrorHandler, + quit?: EventHandler, + ) => airlock.subscribe({ app, path, event }); + const unsub = async (num: number) => airlock.unsubscribe(num); + const ninjaSub = async ( + app: string, + path: string, + event: EventHandler, + err?: ErrorHandler, + quit?: EventHandler, + ) => + airlock.subscribe({ app: APP_NAME, path: `/proxy/${app}${path}`, event }); + + const poke = async (app: string, mark: string, json: any) => + // airlock.poke({ + // app: APP_NAME, + // mark: "json", + // json: { ...json, app, mark }, + // }); + airlock.poke({ app, mark, json }); + const ninjaPoke = async ( + desk: string, + app: string, + mark: string, + json: any, + ) => airlock.ninjaPoke({ desk, app, mark, json, proxyApp: APP_NAME }); + const thread = async ( + threadName: string, + desk: string, + inputMark: string, + outputMark: string, + body: any, + ) => airlock.thread({ threadName, desk, inputMark, outputMark, body }); + return { + sub, + unsub, + poke, + ninjaSub, + ninjaPoke, + thread, + }; +} + +export type ScryRes = { + site: Site; + group: Group; +}; +export default function appIO(airlock: Urbit) { + const { sub, unsub, poke, ninjaPoke, ninjaSub, thread } = urbitIO(airlock); + + async function scrySite(): Promise { + const site = window.location.pathname.split("/")[1]; + const res = await fetch("/ucm/api/" + site); + const j = await res.json(); + return j; + } + async function ninjaScry(app: string, path: string): Promise { + const res = await fetch("/ucm/napi" + `/${app}${path}`); + const j = await res.json(); + return j; + } + + async function initSubs(site: string, handler: EventHandler) { + const err = (err: any, id: string) => console.log(err, ""); + const quit = (data: any) => console.log(data, ""); + const res = await sub(APP_NAME, `/ui/${site}`, handler, err, quit); + return res; + } + async function channelsSub(handler: EventHandler) { + const err = (err: any, id: string) => console.log(err, ""); + const quit = (data: any) => console.log(data, ""); + const res = await ninjaSub("channels", "/v1", handler, err, quit); + return res; + } + + // pokes + + async function search( + query: string, + apps: AppType[], + by: string, + start?: number, + end?: number, + ) { + const obj = { site: { search: { query, apps, by, start, end } } }; + return poke(APP_NAME, "json", obj); + } + + // Tlon + async function scryChannels(): Promise { + const res = await ninjaScry("channels", "/v2/channels/full"); + return res; + } + async function scryChatroom( + ship: Ship, + name: string, + count: number, + ): Promise { + const res = await ninjaScry( + "channels", + `/v2/chat/${ship}/${name}/posts/newest/${count}/outline`, + ); + return res; + } + async function sendChatMsg( + author: Ship, + host: Ship, + name: string, + content: Content, + sent: number, + ) { + const nest = `chat/${host}/${name}`; + const mark = "channel-action"; + const desk = "groups"; + const app = "channels"; + const essay = { + "kind-data": { + chat: null, + }, + author, + sent, + content, + }; + const json = { + channel: { + nest, + action: { + post: { + add: essay, + }, + }, + }, + }; + return ninjaPoke(desk, app, mark, json); + } + function fixTlon(pending: Map, update: ChannelUpdate) { + if (!("post" in update.response)) return; + const [kind, host, name] = update.nest.split("/"); + const rpost = update.response.post["r-post"]; + const id = addDots(update.response.post.id, 3); + const needFix = + "set" in rpost + ? editPostAuthor(pending, kind, host as Ship, name, id, rpost.set.essay) + : "reply" in rpost && "set" in rpost.reply["r-reply"] + ? editReplyAuthor( + pending, + kind, + host as Ship, + name, + id, + rpost.reply.id, + rpost.reply["r-reply"].set.memo, + ) + : false; + if (!needFix) return rpost; + } + function editPostAuthor( + pending: Map, + kind: string, + host: Ship, + name: string, + id: string, + essay: Essay, + ) { + const clientShip = (window as any).ship; + const isPending = pending.has(essay.sent); + if (essay.author === host && clientShip !== host && isPending) { + const nessay = { ...essay, author: clientShip }; + fixPost(kind, host, name, id, nessay); + return true; + } else return false; + } + function editReplyAuthor( + pending: Map, + kind: string, + host: Ship, + name: string, + parent_id: string, + id: string, + memo: Memo, + ) { + const clientShip = (window as any).ship; + const isPending = pending.has(memo.sent); + if (memo.author === host && clientShip !== "host" && isPending) { + const nmemo = { ...memo, author: clientShip }; + fixReply(kind, host, name, parent_id, id, nmemo); + return true; + } else return false; + } + + async function fixPost( + kind: string, + host: Ship, + name: string, + id: string, + essay: Essay, + ) { + const nest = `${kind}/${host}/${name}`; + const mark = "channel-action"; + const desk = "groups"; + const app = "channels"; + const json = { + channel: { + nest, + action: { + post: { + edit: { + id, + essay, + }, + }, + }, + }, + }; + return ninjaPoke(desk, app, mark, json); + } + async function fixReply( + kind: string, + host: Ship, + name: string, + parent_id: string, + id: string, + memo: Memo, + ) { + const nest = `${kind}/${host}/${name}`; + const mark = "channel-action"; + const desk = "groups"; + const app = "channels"; + const json = { + channel: { + nest, + action: { + post: { + reply: { + id: parent_id, + action: { + edit: { + id: addDots(id, 3), + memo, + }, + }, + }, + }, + }, + }, + }; + return ninjaPoke(desk, app, mark, json); + } + async function sendChatReply( + author: Ship, + host: Ship, + name: string, + parent: string, + content: Content, + sent: number, + ) { + const nest = `chat/${host}/${name}`; + const mark = "channel-action"; + const desk = "groups"; + const app = "channels"; + const json = { + channel: { + nest, + action: { + post: { + reply: { + id: parent, + action: { + add: { + author, + sent, + content, + }, + }, + }, + }, + }, + }, + }; + return ninjaPoke(desk, app, mark, json); + } + + async function sendDiaryReply( + author: Ship, + host: Ship, + name: string, + parent: string, + content: Content, + sent: number, + ) { + const nest = `diary/${host}/${name}`; + const mark = "channel-action"; + const desk = "groups"; + const app = "channels"; + const json = { + channel: { + nest, + action: { + post: { + reply: { + id: parent, // dotted! + action: { + add: { + author, + sent, + content, + }, + }, + }, + }, + }, + }, + }; + return ninjaPoke(desk, app, mark, json); + } + async function sendReact( + author: Ship, + kind: string, + host: Ship, + name: string, + id: string, + react: string, + ) { + const nest = `${kind}/${host}/${name}`; + const mark = "channel-action"; + const desk = "groups"; + const app = "channels"; + const json = { + channel: { + nest, + action: { + post: { + "add-react": { + id, + react, + ship: author, + }, + }, + }, + }, + }; + return ninjaPoke(desk, app, mark, json); + } + async function sendReplyReact( + author: Ship, + kind: string, + host: Ship, + name: string, + parentId: string, + id: string, + react: string, + ) { + const nest = `${kind}/${host}/${name}`; + const mark = "channel-action"; + const app = "channels"; + const json = { + channel: { + nest, + action: { + post: { + reply: { + id: parentId, + action: { + "add-react": { + id, + react, + ship: author, + }, + }, + }, + }, + }, + }, + }; + return ninjaPoke("groups", app, mark, json); + } + + async function radioSub(handler: EventHandler) { + return ninjaSub("tower", "/global", handler); + } + async function radioSub2(handler: EventHandler) { + // return ninjaSub("tower", "/greg/local", handler); + return ninjaSub("tower", "/personal", handler); + } + async function radioChat(from: Ship, message: string) { + const time = Date.now(); + const json = { + chat: { + from, + message, + time, + }, + }; + return poke("tower", "radio-action", json); + } + async function radioSpin(title: string, desc: string, playUrl: string) { + if (!isValidHttpUrl(playUrl)) return; + let currentUnixTime = Date.now(); + currentUnixTime = Math.ceil(currentUnixTime); + let pokes = []; + if (title) + pokes.push( + poke("tower", "radio-action", { + talk: title, + }), + ); + if (desc) + pokes.push( + poke("tower", "radio-action", { + description: desc, + }), + ); + if (playUrl) + pokes.push( + poke("tower", "radio-action", { + spin: { + url: playUrl, + time: currentUnixTime, + }, + }), + ); + return await Promise.all(pokes); + } + + async function sendDiaryPost( + author: Ship, + host: Ship, + name: string, + title: string, + image: string, + content: Content, + sent: number, + ) { + const nest = `diary/${host}/${name}`; + const mark = "channel-action"; + const app = "channels"; + const kind = { diary: { title, image } }; + const json = { + channel: { + nest, + action: { + post: { + add: { + author, + sent, + content, + "kind-data": kind, + }, + }, + }, + }, + }; + return ninjaPoke("groups", app, mark, json); + } + async function scryDiary( + ship: Ship, + name: string, + count: number, + ): Promise { + const app = "channels"; + const path = `/v1/diary/${ship}/${name}/posts/newest/${count}/post`; + return await ninjaScry(app, path); + } + async function scryDiaryPost( + ship: Ship, + name: string, + id: string, + ): Promise { + const app = "channels"; + const path = `/v1/diary/${ship}/${name}/posts/post/${id}`; + return await ninjaScry(app, path); + } + async function scryChat( + ship: Ship, + name: string, + count: number, + ): Promise { + const app = "channels"; + const path = `/v1/chat/${ship}/${name}/posts/newest/${count}/post`; + return await ninjaScry(app, path); + } + return { + scrySite, + ninjaScry, + initSubs, + channelsSub, + scryChannels, + scryChatroom, + sendChatMsg, + fixTlon, + sendChatReply, + sendDiaryPost, + sendDiaryReply, + sendReact, + sendReplyReact, + radioSub, + radioSub2, + radioSpin, + radioChat, + search, + scryDiary, + scryDiaryPost, + scryChat, + }; +} diff --git a/site/src/logic/constants.ts b/site/src/logic/constants.ts new file mode 100644 index 0000000..8b374dc --- /dev/null +++ b/site/src/logic/constants.ts @@ -0,0 +1,37 @@ +import { Ship } from "./types"; + +export const APP_NAME = "ucm"; +// export const URL = import.meta.env.PROD ? "" : "http://localhost:8081"; +export const URL = window.location.origin; + +export const MOBILE_BROWSER_REGEX = + /Android|webOS|iPhone|iPad|iPod|BlackBerry/i; +export const AUDIO_REGEX = new RegExp(/https:\/\/.+\.(mp3|wav|ogg)\b/gim); +export const VIDEO_REGEX = new RegExp(/https:\/\/.+\.(mov|mp4|ogv)\b/gim); +export const TWITTER_REGEX = new RegExp( + /https:\/\/(twitter|x)\.com\/.+\/status\/\d+/gim, +); + +export const REF_REGEX = new RegExp( + /urbit:\/\/[a-z0-9-]+\/~[a-z-_]+\/[a-z0-9-_]+/gim, +); +export const RADIO_REGEX = new RegExp(/urbit:\/\/radio\/~[a-z-_]+/gim); + +export const IMAGE_REGEX = new RegExp( + /https:\/\/.+\.(jpg|img|png|gif|tiff|jpeg|webp|webm|svg)\b/gim, +); + +export const SHIP_REGEX = new RegExp(/\B~[a-z-]+/); +export const HASHTAGS_REGEX = new RegExp(/#[a-z-]+/g); + +export const DEFAULT_DATE = { year: 1970, month: 1, day: 1 }; +export const RADIO = "📻"; + +export const RADIO_SHIP: Ship = "~nodmyn-dosrux" as Ship; +export const WIKI_SHIP: Ship = "~holnes" as Ship; + +export const DEFAULT_ICON = "https://s3.sortug.com/img/icons/ucm-logo.png"; + +const firstSlug = window.location.pathname.split("/")[1]; +export const SITE_NAME = firstSlug; +export const BASE_PATH = `/${firstSlug}`; diff --git a/site/src/logic/ob/co.ts b/site/src/logic/ob/co.ts new file mode 100644 index 0000000..c63faae --- /dev/null +++ b/site/src/logic/ob/co.ts @@ -0,0 +1,392 @@ +// ++ co +// +// See arvo/sys/hoon.hoon. +import { BN } from 'bn.js'; +import { chunk, isEqual } from 'lodash'; +import { ob } from './ob'; +import type { Bn, PatP, PatQ, Rank, Iterable, Number } from './types'; + +const zero = new BN(0); +const one = new BN(1); +const two = new BN(2); +const three = new BN(3); +const four = new BN(4); +const five = new BN(5); + +const pre = ` +dozmarbinwansamlitsighidfidlissogdirwacsabwissib\ +rigsoldopmodfoglidhopdardorlorhodfolrintogsilmir\ +holpaslacrovlivdalsatlibtabhanticpidtorbolfosdot\ +losdilforpilramtirwintadbicdifrocwidbisdasmidlop\ +rilnardapmolsanlocnovsitnidtipsicropwitnatpanmin\ +ritpodmottamtolsavposnapnopsomfinfonbanmorworsip\ +ronnorbotwicsocwatdolmagpicdavbidbaltimtasmallig\ +sivtagpadsaldivdactansidfabtarmonranniswolmispal\ +lasdismaprabtobrollatlonnodnavfignomnibpagsopral\ +bilhaddocridmocpacravripfaltodtiltinhapmicfanpat\ +taclabmogsimsonpinlomrictapfirhasbosbatpochactid\ +havsaplindibhosdabbitbarracparloddosbortochilmac\ +tomdigfilfasmithobharmighinradmashalraglagfadtop\ +mophabnilnosmilfopfamdatnoldinhatnacrisfotribhoc\ +nimlarfitwalrapsarnalmoslandondanladdovrivbacpol\ +laptalpitnambonrostonfodponsovnocsorlavmatmipfip\ +`; + +const suf = ` +zodnecbudwessevpersutletfulpensytdurwepserwylsun\ +rypsyxdyrnuphebpeglupdepdysputlughecryttyvsydnex\ +lunmeplutseppesdelsulpedtemledtulmetwenbynhexfeb\ +pyldulhetmevruttylwydtepbesdexsefwycburderneppur\ +rysrebdennutsubpetrulsynregtydsupsemwynrecmegnet\ +secmulnymtevwebsummutnyxrextebfushepbenmuswyxsym\ +selrucdecwexsyrwetdylmynmesdetbetbeltuxtugmyrpel\ +syptermebsetdutdegtexsurfeltudnuxruxrenwytnubmed\ +lytdusnebrumtynseglyxpunresredfunrevrefmectedrus\ +bexlebduxrynnumpyxrygryxfeptyrtustyclegnemfermer\ +tenlusnussyltecmexpubrymtucfyllepdebbermughuttun\ +bylsudpemdevlurdefbusbeprunmelpexdytbyttyplevmyl\ +wedducfurfexnulluclennerlexrupnedlecrydlydfenwel\ +nydhusrelrudneshesfetdesretdunlernyrsebhulryllud\ +remlysfynwerrycsugnysnyllyndyndemluxfedsedbecmun\ +lyrtesmudnytbyrsenwegfyrmurtelreptegpecnelnevfes\ +`; + +const patp2syls = (name: string): string[] => + name.replace(/[\^~-]/g, '').match(/.{1,3}/g) || []; + +const splitAt = (index: number, str: string) => [str.slice(0, index), str.slice(index)]; + +const prefixes = pre.match(/.{1,3}/g) as RegExpMatchArray; + +const suffixes = suf.match(/.{1,3}/g) as RegExpMatchArray; + +const bex = (n: Bn): Bn => two.pow(n); + +const rsh = (a: Bn, b: Bn, c: Bn): Bn => c.div(bex(bex(a).mul(b))); + +const met = (a: Bn, b: Bn, c: Bn = zero): Bn => + b.eq(zero) ? c : met(a, rsh(a, one, b), c.add(one)); + +const end = (a: Bn, b: Bn, c: Bn) => c.mod(bex(bex(a).mul(b))); + +/** + * Convert a hex-encoded string to a @p-encoded string. + * + */ +const hex2patp = (hex: string): string => { + if (hex === null) { + throw new Error('hex2patp: null input'); + } + return patp(new BN(hex, 'hex')); +}; + +/** + * Convert a @p-encoded string to a hex-encoded string. + * + * @param {String} name @p + * @return {String} + */ +const patp2hex = (name: PatP): string => { + if (isValidPat(name) === false) { + throw new Error('patp2hex: not a valid @p'); + } + const syls = patp2syls(name); + + const syl2bin = (idx: number) => idx.toString(2).padStart(8, '0'); + + const addr = syls.reduce( + (acc, syl, idx) => + idx % 2 !== 0 || syls.length === 1 + ? acc + syl2bin(suffixes.indexOf(syl)) + : acc + syl2bin(prefixes.indexOf(syl)), + '', + ); + + const bn = new BN(addr, 2); + const hex = ob.fynd(bn).toString('hex'); + return hex.length % 2 !== 0 ? hex.padStart(hex.length + 1, '0') : hex; +}; + +/** + * Convert a @p-encoded string to a bignum. + * + */ +const patp2bn = (name: PatP): Bn => new BN(patp2hex(name), 'hex'); + +/** + * Convert a @p-encoded string to a decimal-encoded string. + * + */ +export const patp2dec = (name: PatP): string => { + let bn; + try { + bn = patp2bn(name); + } catch (_) { + throw new Error('patp2dec: not a valid @p'); + } + return bn.toString(); +}; + +/** + * Convert a number to a @q-encoded string. + * + */ +const patq = (arg: number | Bn | string): string => { + const bn = new BN(arg); + const buf = bn.toArrayLike(Buffer); + return buf2patq(buf); +}; + +/** + * Convert a Buffer into a @q-encoded string. + * + */ +const buf2patq = (buf: Buffer): string => { + const chunked = + buf.length % 2 !== 0 && buf.length > 1 + ? [[buf[0]]].concat(chunk(buf.slice(1), 2)) + : chunk(buf, 2); + + const prefixName = (byts: number[]) => + byts[1] === undefined + ? prefixes[0] + suffixes[byts[0]] + : prefixes[byts[0]] + suffixes[byts[1]]; + + const name = (byts: number[]) => + byts[1] === undefined ? suffixes[byts[0]] : prefixes[byts[0]] + suffixes[byts[1]]; + + const alg = (pair: number[]) => + pair.length % 2 !== 0 && chunked.length > 1 ? prefixName(pair) : name(pair); + + return chunked.reduce((acc, elem) => acc + (acc === '~' ? '' : '-') + alg(elem), '~'); +}; + +/** + * Convert a hex-encoded string to a @q-encoded string. + * + * Note that this preserves leading zero bytes. + * + */ +const hex2patq = (arg: string): string => { + const hex = arg.length % 2 !== 0 ? arg.padStart(arg.length + 1, '0') : arg; + + const buf = Buffer.from(hex, 'hex'); + return buf2patq(buf); +}; + +/** + * Convert a @q-encoded string to a hex-encoded string. + * + * Note that this preserves leading zero bytes. + * + */ +const patq2hex = (name: PatQ): string => { + if (isValidPat(name) === false) { + throw new Error('patq2hex: not a valid @q'); + } + const chunks = name.slice(1).split('-'); + const dec2hex = (dec: number) => dec.toString(16).padStart(2, '0'); + + const splat = chunks.map((chunk) => { + let syls = splitAt(3, chunk); + return syls[1] === '' + ? dec2hex(suffixes.indexOf(syls[0])) + : dec2hex(prefixes.indexOf(syls[0])) + dec2hex(suffixes.indexOf(syls[1])); + }); + + return name.length === 0 ? '00' : splat.join(''); +}; + +/** + * Convert a @q-encoded string to a bignum. + * + */ +const patq2bn = (name: PatQ): Bn => new BN(patq2hex(name), 'hex'); + +/** + * Convert a @q-encoded string to a decimal-encoded string. + * + */ +const patq2dec = (name: PatQ): string => { + let bn; + try { + bn = patq2bn(name); + } catch (_) { + throw new Error('patq2dec: not a valid @q'); + } + return bn.toString(); +}; + +/** + * Determine the ship class of a @p value. + * + */ +const clan = (who: PatP): Rank => { + let name; + try { + name = patp2bn(who); + } catch (_) { + throw new Error('clan: not a valid @p'); + } + + const wid = met(three, name); + return wid.lte(one) + ? 'galaxy' + : wid.eq(two) + ? 'star' + : wid.lte(four) + ? 'planet' + : wid.lte(new BN(8)) + ? 'moon' + : 'comet'; +}; + +/** + * Determine the parent of a @p value. + * + */ +const sein = (name: PatP): PatP => { + let who; + try { + who = patp2bn(name); + } catch (_) { + throw new Error('sein: not a valid @p'); + } + + let mir; + try { + mir = clan(name); + } catch (_) { + throw new Error('sein: not a valid @p'); + } + + const res = + mir === 'galaxy' + ? who + : mir === 'star' + ? end(three, one, who) + : mir === 'planet' + ? end(four, one, who) + : mir === 'moon' + ? end(five, one, who) + : zero; + return patp(res); +}; + +/** + * Weakly check if a string is a valid @p or @q value. + * + * This is, at present, a pretty weak sanity check. It doesn't confirm the + * structure precisely (e.g. dashes), and for @q, it's required that q values + * of (greater than one) odd bytelength have been zero-padded. So, for + * example, '~doznec-binwod' will be considered a valid @q, but '~nec-binwod' + * will not. + * + + */ +export const isValidPat = (name: PatQ | PatP): boolean => { + if (typeof name !== 'string') { + throw new Error('isValidPat: non-string input'); + } + + const leadingTilde = name.slice(0, 1) === '~'; + + if (leadingTilde === false || name.length < 4) { + return false; + } else { + const syls = patp2syls(name); + const wrongLength = syls.length % 2 !== 0 && syls.length !== 1; + const sylsExist = syls.reduce( + (acc: boolean, syl, index) => + acc && + (index % 2 !== 0 || syls.length === 1 + ? suffixes.includes(syl) + : prefixes.includes(syl)), + true, + ); + + return !wrongLength && sylsExist; + } +}; + +/** + * Validate a @p string. + * + */ +export const isValidPatp = (str: PatP): boolean => + isValidPat(str) && str === patp(patp2dec(str)); + +/** + * Validate a @q string. + * + */ +const isValidPatq = (str: PatQ): boolean => + isValidPat(str) && eqPatq(str, patq(patq2dec(str))); + +/** + * Remove all leading zero bytes from a sliceable value. + */ +const removeLeadingZeroBytes = (str: Iterable): Iterable => + str.slice(0, 2) === '00' ? removeLeadingZeroBytes(str.slice(2)) : str; + +/** + * Equality comparison, modulo leading zero bytes. + */ +const eqModLeadingZeroBytes = (s: Iterable, t: Iterable): boolean => + isEqual(removeLeadingZeroBytes(s), removeLeadingZeroBytes(t)); + +/** + * Equality comparison on @q values. + */ +const eqPatq = (p: PatQ, q: PatQ): boolean => { + let phex; + try { + phex = patq2hex(p); + } catch (_) { + throw new Error('eqPatq: not a valid @q'); + } + + let qhex; + try { + qhex = patq2hex(q); + } catch (_) { + throw new Error('eqPatq: not a valid @q'); + } + + return eqModLeadingZeroBytes(phex, qhex); +}; + +/** + * Convert a number to a @p-encoded string. + * + * @param {String, Number, BN} arg + * @return {String} + */ +const patp = (arg: number | string | Bn): PatP => { + if (arg === null) { + throw new Error('patp: null input'); + } + const n = new BN(arg); + + const sxz = ob.fein(n); + const dyy = met(four, sxz); + + const loop = (tsxz: Bn, timp: Bn, trep: string): string => { + const log = end(four, one, tsxz); + const pre = prefixes[rsh(three, one, log).toNumber()]; + const suf = suffixes[end(three, one, log).toNumber()]; + const etc = timp.mod(four).eq(zero) ? (timp.eq(zero) ? '' : '--') : '-'; + + const res = pre + suf + etc + trep; + + return timp.eq(dyy) ? trep : loop(rsh(four, one, tsxz), timp.add(one), res); + }; + + const dyx = met(three, sxz); + + return '~' + (dyx.lte(one) ? suffixes[sxz.toNumber()] : loop(sxz, zero, '')); +}; + +export const co = { + patp, +}; diff --git a/site/src/logic/ob/muk.ts b/site/src/logic/ob/muk.ts new file mode 100644 index 0000000..c9d191b --- /dev/null +++ b/site/src/logic/ob/muk.ts @@ -0,0 +1,116 @@ +// ++ muk +// +// See arvo/sys/hoon.hoon. +import { BN } from 'bn.js'; +import type { Bn, PatP, PatQ, Rank, Iterable, Number } from './types'; + +const ux_FF = new BN(0xff); +const ux_FF00 = new BN(0xff00); +const u_256 = new BN(256); + +/** + * Standard murmur3. + * + */ +export const muk = (syd: number, len: number, key: Bn): Bn => { + const lo = key.and(ux_FF).toNumber(); + const hi = key.and(ux_FF00).div(u_256).toNumber(); + const kee = String.fromCharCode(lo) + String.fromCharCode(hi); + return new BN(murmurhash3_32_gc(kee, syd)); +}; + +// see: https://github.com/garycourt/murmurhash-js +// +// Copyright (c) 2011 Gary Court +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of +// this software and associated documentation files (the "Software"), to deal in +// the Software without restriction, including without limitation the rights to +// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +// of the Software, and to permit persons to whom the Software is furnished to do +// so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +/** + * JS Implementation of MurmurHash3 (r136) (as of May 20, 2011) + * + * @author Gary Court + * @see http://github.com/garycourt/murmurhash-js + * @author Austin Appleby + * @see http://sites.google.com/site/murmurhash/ + * + * @param {string} key ASCII only + * @param {number} seed Positive integer only + * @return {number} 32-bit positive integer hash + **/ +const murmurhash3_32_gc = (key: string, seed: number): number => { + // eslint-disable-next-line no-unused-vars + let remainder, bytes, h1, h1b, c1, c1b, c2, c2b, k1, i; + + remainder = key.length & 3; // key.length % 4 + bytes = key.length - remainder; + h1 = seed; + c1 = 0xcc9e2d51; + c2 = 0x1b873593; + i = 0; + + while (i < bytes) { + k1 = + (key.charCodeAt(i) & 0xff) | + ((key.charCodeAt(++i) & 0xff) << 8) | + ((key.charCodeAt(++i) & 0xff) << 16) | + ((key.charCodeAt(++i) & 0xff) << 24); + ++i; + + k1 = ((k1 & 0xffff) * c1 + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff; + k1 = (k1 << 15) | (k1 >>> 17); + k1 = ((k1 & 0xffff) * c2 + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff; + + h1 ^= k1; + h1 = (h1 << 13) | (h1 >>> 19); + h1b = ((h1 & 0xffff) * 5 + ((((h1 >>> 16) * 5) & 0xffff) << 16)) & 0xffffffff; + h1 = (h1b & 0xffff) + 0x6b64 + ((((h1b >>> 16) + 0xe654) & 0xffff) << 16); + } + + k1 = 0; + + switch (remainder) { + case 3: + k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16; + // eslint-disable-next-line no-fallthrough + case 2: + k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8; + // eslint-disable-next-line no-fallthrough + case 1: + k1 ^= key.charCodeAt(i) & 0xff; + + k1 = ((k1 & 0xffff) * c1 + ((((k1 >>> 16) * c1) & 0xffff) << 16)) & 0xffffffff; + k1 = (k1 << 15) | (k1 >>> 17); + k1 = ((k1 & 0xffff) * c2 + ((((k1 >>> 16) * c2) & 0xffff) << 16)) & 0xffffffff; + h1 ^= k1; + } + + h1 ^= key.length; + + h1 ^= h1 >>> 16; + h1 = + ((h1 & 0xffff) * 0x85ebca6b + ((((h1 >>> 16) * 0x85ebca6b) & 0xffff) << 16)) & + 0xffffffff; + h1 ^= h1 >>> 13; + h1 = + ((h1 & 0xffff) * 0xc2b2ae35 + ((((h1 >>> 16) * 0xc2b2ae35) & 0xffff) << 16)) & + 0xffffffff; + h1 ^= h1 >>> 16; + + return h1 >>> 0; +}; diff --git a/site/src/logic/ob/ob.ts b/site/src/logic/ob/ob.ts new file mode 100644 index 0000000..70f5c22 --- /dev/null +++ b/site/src/logic/ob/ob.ts @@ -0,0 +1,166 @@ +// ++ ob +// +// See arvo/sys/hoon.hoon. +import { BN } from 'bn.js'; +import { muk } from './muk'; +import type { Bn, Number } from './types'; + +const ux_1_0000 = new BN('10000', 'hex'); +const ux_ffff_ffff = new BN('ffffffff', 'hex'); +const ux_1_0000_0000 = new BN('100000000', 'hex'); +const ux_ffff_ffff_ffff_ffff = new BN('ffffffffffffffff', 'hex'); +const ux_ffff_ffff_0000_0000 = new BN('ffffffff00000000', 'hex'); + +const u_65535 = new BN('65535'); +const u_65536 = new BN('65536'); + +// a PRF for j in { 0, .., 3 } +const F = (j: number, arg: Bn): Bn => { + const raku = [0xb76d5eed, 0xee281300, 0x85bcae01, 0x4b387af7]; + + return muk(raku[j], 2, arg); +}; + +/** + * Conceal structure v3. + * + */ +const fein = (arg: Number): Bn => { + const loop = (pyn: Bn): Bn => { + const lo = pyn.and(ux_ffff_ffff); + const hi = pyn.and(ux_ffff_ffff_0000_0000); + + return pyn.gte(ux_1_0000) && pyn.lte(ux_ffff_ffff) + ? ux_1_0000.add(feis(pyn.sub(ux_1_0000))) + : pyn.gte(ux_1_0000_0000) && pyn.lte(ux_ffff_ffff_ffff_ffff) + ? hi.or(loop(lo)) + : pyn; + }; + + return loop(new BN(arg)); +}; + +/** + * Restore structure v3. + * + */ +const fynd = (arg: Number): Bn => { + const loop = (cry: Bn): Bn => { + const lo = cry.and(ux_ffff_ffff); + const hi = cry.and(ux_ffff_ffff_0000_0000); + + return cry.gte(ux_1_0000) && cry.lte(ux_ffff_ffff) + ? ux_1_0000.add(tail(cry.sub(ux_1_0000))) + : cry.gte(ux_1_0000_0000) && cry.lte(ux_ffff_ffff_ffff_ffff) + ? hi.or(loop(lo)) + : cry; + }; + + return loop(new BN(arg)); +}; + +/** + * Generalised Feistel cipher. + * + * See: Black and Rogaway (2002), "Ciphers with arbitrary finite domains." + * + * Note that this has been adjusted from the reference paper in order to + * support some legacy behaviour. + * + * @param {String, Number, BN} + * @return {BN} + */ +const feis = (arg: Number): Bn => Fe(4, u_65535, u_65536, ux_ffff_ffff, F, new BN(arg)); + +const Fe = (r: number, a: Bn, b: Bn, k: Bn, f: typeof F, m: Bn): Bn => { + const c = fe(r, a, b, f, m); + return c.lt(k) ? c : fe(r, a, b, f, c); +}; + +const fe = (r: number, a: Bn, b: Bn, f: typeof F, m: Bn) => { + const loop = (j: number, ell: Bn, arr: Bn): Bn => { + if (j > r) { + return r % 2 !== 0 + ? a.mul(arr).add(ell) + : arr.eq(a) + ? a.mul(arr).add(ell) + : a.mul(ell).add(arr); + } else { + const eff = f(j - 1, arr); + + const tmp = j % 2 !== 0 ? ell.add(eff).mod(a) : ell.add(eff).mod(b); + + return loop(j + 1, arr, tmp); + } + }; + + const L = m.mod(a); + const R = m.div(a); + + return loop(1, L, R); +}; + +/** + * Reverse 'feis'. + * + * See: Black and Rogaway (2002), "Ciphers with arbitrary finite domains." + * + * Note that this has been adjusted from the reference paper in order to + * support some legacy behaviour. + * + * @param {Number, String, BN} arg + * @return {BN} + */ +const tail = (arg: Number): Bn => Fen(4, u_65535, u_65536, ux_ffff_ffff, F, new BN(arg)); + +const Fen = (r: number, a: Bn, b: Bn, k: Bn, f: typeof F, m: Bn): Bn => { + const c = fen(r, a, b, f, m); + return c.lt(k) ? c : fen(r, a, b, f, c); +}; + +const fen = (r: number, a: Bn, b: Bn, f: typeof F, m: Bn) => { + const loop = (j: number, ell: Bn, arr: Bn): Bn => { + if (j < 1) { + return a.mul(arr).add(ell); + } else { + const eff = f(j - 1, ell); + + // NB (jtobin): + // + // Slight deviation from B&R (2002) here to prevent negative values. We + // add 'a' or 'b' to arr as appropriate and reduce 'eff' modulo the same + // number before performing subtraction. + // + const tmp = + j % 2 !== 0 + ? arr.add(a).sub(eff.mod(a)).mod(a) + : arr.add(b).sub(eff.mod(b)).mod(b); + + return loop(j - 1, tmp, ell); + } + }; + + const ahh = r % 2 !== 0 ? m.div(a) : m.mod(a); + + const ale = r % 2 !== 0 ? m.mod(a) : m.div(a); + + const L = ale.eq(a) ? ahh : ale; + + const R = ale.eq(a) ? ale : ahh; + + return loop(r, L, R); +}; + +export const ob = { + F, + + fe, + Fe, + feis, + fein, + + fen, + Fen, + tail, + fynd, +}; diff --git a/site/src/logic/ob/types.ts b/site/src/logic/ob/types.ts new file mode 100644 index 0000000..8d74530 --- /dev/null +++ b/site/src/logic/ob/types.ts @@ -0,0 +1,7 @@ +import { BN } from 'bn.js'; +export type Bn = InstanceType; +export type PatP = string; +export type PatQ = string; +export type Rank = 'galaxy' | 'star' | 'planet' | 'moon' | 'comet'; +export type Iterable = any[] | Buffer | string; +export type Number = number | string | Bn; diff --git a/site/src/logic/store.ts b/site/src/logic/store.ts new file mode 100644 index 0000000..6a46288 --- /dev/null +++ b/site/src/logic/store.ts @@ -0,0 +1,150 @@ +import Urbit from "@urbit/http-api"; +import { create } from "zustand"; +import { persist } from "zustand/middleware"; +import { SITE_NAME, URL } from "./constants"; +import io from "./comms"; +import { Ship, Site, SiteBunt } from "./types"; +import { + ChanRPost, + ChannelType, + ChannelUpdate, + ChannelsRes, + Content, + GroupBunt, + Group as TlonGroup, +} from "./types-tlon"; + +interface ClientState { + airlock: Urbit; + clientShip: Ship; + init: () => Promise; + sync: () => Promise; + modal: JSX.Element | null; + setModal: (m: JSX.Element | null) => void; + setSiteState: (s: Site) => void; + siteState: Site; + group: TlonGroup; + loading: boolean; + setLoading: (b: boolean) => void; + addPending: (ts: number, c: Content) => void; + delPending: (ts: number) => void; + pendingPosts: Map; + lastChannelUpdate: ChanRPost | null; + io: () => ReturnType; +} +export async function start(): Promise { + const airlock = new Urbit(URL, ""); + await airlock.getShipName(); + await airlock.poke({ app: "hood", mark: "helm-hi", json: "opening airlock" }); + await airlock.eventSource(); + return airlock; +} +export async function getShip(): Promise { + const res2 = await fetch(URL + "/~/name"); + const ship2 = await res2.text(); + return ship2 as Ship; +} + +const stateStore = create()( + // persist( + (set, get) => ({ + loading: true, + setLoading: (loading) => set({ loading }), + airlock: new Urbit(URL), + clientShip: (window as any).ship, + setSiteState: (siteState) => set({ siteState }), + siteState: SiteBunt, + group: GroupBunt, + sync: async () => { + set({ loading: true }); + const airlock = get().airlock; + set({ + loading: false, + }); + }, + init: async () => { + const airlock = await start(); + const aio = io(airlock); + aio.channelsSub((data: ChannelUpdate) => { + const pending = get().pendingPosts; + if ("pending" in data.response) { + return; + } else { + const [kind, host, name] = data.nest.split("/"); + const rpost = aio.fixTlon(pending, data); + if (rpost) + set({ + lastChannelUpdate: { + update: rpost, + host: host as Ship, + kind: kind as ChannelType, + name, + }, + }); + } + }); + set({ + airlock, + loading: false, + }); + }, + addPending: (ts, content) => { + set((s) => { + s.pendingPosts.set(ts, content); + return { pendingPosts: s.pendingPosts }; + }); + }, + delPending: (ts) => { + set((s) => { + s.pendingPosts.delete(ts); + return { pendingPosts: s.pendingPosts }; + }); + }, + pendingPosts: new Map(), + lastChannelUpdate: null, + modal: null, + setModal: (m) => set({ modal: m }), + io: () => { + const airlock = get().airlock; + const aio = io(airlock); + return aio; + }, + }), + // { + // name: "ublog-storage", + // }, + // ), +); + +// very nice +// https://dev.to/eraywebdev/optimizing-zustand-how-to-prevent-unnecessary-re-renders-in-your-react-app-59do +import { StoreApi, UseBoundStore } from "zustand"; +import { shallow } from "zustand/shallow"; +import { addDots } from "./utils"; + +type GenericState = Record; + +export const createStoreWithSelectors = ( + store: UseBoundStore>, +): ((keys: K[]) => Pick) => { + const useStore: (keys: K[]) => Pick = < + K extends keyof T, + >( + keys: K[], + ) => { + // console.log(keys, "keys"); + return store((state) => { + const x = keys.reduce((acc, cur) => { + acc[cur] = state[cur]; + return acc; + }, {} as T); + + return x as Pick; + }, shallow); + }; + + return useStore; +}; + +const useStore = createStoreWithSelectors(stateStore); +export default useStore; diff --git a/site/src/logic/tlon-helpers.ts b/site/src/logic/tlon-helpers.ts new file mode 100644 index 0000000..f67a664 --- /dev/null +++ b/site/src/logic/tlon-helpers.ts @@ -0,0 +1,705 @@ +import { + Block, + ChannelUpdate, + ChatQuoteParams, + Content, + Essay, + Inline, + Listing, + Memo, + Nest, + RPost, + Reply, + Seal, + Verse, + Writ, +} from "./types-tlon"; +import { Ship } from "./types"; +import { Token, Tokens, marked } from "marked"; +import { isValidPatp } from "./ob/co"; +import { addDots, addDots5, makeDottedIndex } from "./utils"; +import { REF_REGEX, SHIP_REGEX } from "./constants"; +import Urbit from "@urbit/http-api"; +export function buildMemo(author: Ship, content: Content): Memo { + return { + author, + sent: Date.now(), + content, + }; +} +export function buildEssay(author: Ship, content: Content): Essay { + return { + author, + sent: Date.now(), + content, + "kind-data": { chat: null }, + }; +} + +export function buildClubPost(author: Ship, chatID: string, essay: Essay) { + // ids now are ~ship/170.123... + const { "kind-data": _, ...memo } = essay; + const index = makeDottedIndex(); + const id = `${author}/${index}`; + const json = { + id: chatID, + diff: { + uid: "0v3", + delta: { + writ: { + id, + delta: { + add: { + time: null, + kind: null, + memo, + }, + }, + }, + }, + }, + }; + return { + app: "chat", + mark: "chat-club-action-0", + json, + }; +} +export function buildNDM(author: Ship, ship: Ship, memo: Memo) { + // ids now are ~ship/170.123... + const index = makeDottedIndex(); + const id = `${author}/${index}`; + const json = { + ship, + diff: { + id: id, + delta: { + add: { + time: null, + kind: null, + memo, + }, + }, + }, + }; + return { + app: "chat", + mark: "chat-dm-action", + json, + }; +} +export function buildNChatPost(nes: Nest, essay: Essay) { + const nest = nestToString(nes); + // ids now are ~ship/170.123... + const json = { + channel: { + nest, + action: { + post: { + add: essay, + }, + }, + }, + }; + return { + app: "channels", + mark: "channel-action", + json, + }; +} +export function buildDMReply( + our: Ship, + ship: Ship, + author: Ship, + parent: string, + memo: Memo, +) { + const id = makeDottedIndex(); + const json = { + ship, + diff: { + id: `${author}/${parent}`, + delta: { + reply: { + meta: null, + id: `${our}/${id}`, + delta: { + add: { + memo, + time: null, + }, + }, + }, + }, + }, + }; + return { + app: "chat", + mark: "chat-dm-action", + json, + }; +} +export function buildClubReply( + our: Ship, + clubID: string, + author: Ship, + parent: string, + memo: Memo, +) { + const id = makeDottedIndex(); + const json = { + id: addDots5(clubID), + diff: { + delta: { + writ: { + delta: { + reply: { + delta: { + add: { + memo, + time: null, + }, + }, + meta: null, + id: `${our}/${id}`, + }, + }, + id: `${author}/${parent}`, + }, + }, + uid: "0v3", + }, + }; + return { + app: "chat", + mark: "chat-club-action-0", + json, + }; +} +export function buildChatReply(parent: string, nest: string, memo: Memo) { + // club reply + const json = { + channel: { + nest, + action: { + post: { + reply: { + id: parent, + action: { + add: memo, + }, + }, + }, + }, + }, + }; + return { + app: "channels", + mark: "channel-action", + json, + }; +} +export function buildDiaryPost( + author: Ship, + resource: string, + title: string, + inline: Inline[], +) { + const index = makeDottedIndex(); + const json = { + flag: resource, + update: { + time: "", + diff: { + notes: { + time: index, + delta: { + add: { + author, + image: "", + title, + sent: Date.now(), + content: [{ inline }], + }, + }, + }, + }, + }, + }; + return { + app: "diary", + mark: "diary-action-0", + json, + }; +} +export function buildHeapPost( + author: Ship, + resource: string, + title: string, + inline: Inline[], +) { + const index = makeDottedIndex(); + const json = { + flag: resource, + update: { + time: "", + diff: { + curios: { + time: index, + delta: { + add: { + author, + title, + replying: null, + sent: Date.now(), + content: { + block: [], + inline, + }, + }, + }, + }, + }, + }, + }; + return { + app: "heap", + mark: "heap-action-0", + json, + }; +} +// export function markdownToReply( +// our: Ship, +// parent: string, +// s: string +// ): ReplyGraph { +// const verses = tokenize(s); +// const memo = buildMemo(our, verses); +// const provIndex = makeDottedIndex(); +// const graph = memoToReply(provIndex, parent, memo); +// return graph; +// } +export function chatQuoteToCite(cq: ChatQuoteParams): Verse { + const nest = cq.nest as any; + const where = `/msg/${cq.id}`; + return { + block: { + cite: { + chan: { nest, where }, + }, + }, + }; +} +export function markdownToWrit( + our: Ship, + s: string, + images: string[], + cite: ChatQuoteParams | null, +): Essay { + const verses = tokenize(s); + const fverses = cite ? [...verses, chatQuoteToCite(cite)] : verses; + const f = [...fverses, ...images.map(buildImage)]; + const essay = buildEssay(our, f); + return essay; +} +function buildImage(src: string): Verse { + return { + block: { + image: { + src, + alt: "", + height: 100, + width: 100, // TODO wtf + }, + }, + }; +} + +export function provWrit(essay: Essay): Writ { + const seal: Seal = { + id: essay.sent.toString(), + reacts: {}, + replies: {}, + meta: { + lastRepliers: [], + lastReply: null, + replyCount: 0, + }, + }; + return { essay, seal, prov: true }; +} +// export function memoToReply(id: string, parent: string, memo: Memo): ReplyGraph { +// const writ = { +// memo, +// seal: { +// reacts: {}, +// id, +// "parent-id": parent, +// }, +// }; +// return { [id]: writ }; +// } + +export function memoToChatReply( + parentID: string, + fullID: string, + id: string, + memo: Memo, +): Reply { + const seal = { + id: fullID, + reacts: {}, + "parent-id": parentID, + time: id, // non dotted + }; + return { memo, seal }; +} +export function memoToWrit(id: string, memo: Memo, time: string): Writ { + const writ = { + essay: { ...memo, "kind-data": { chat: null } }, + seal: { + time, + reacts: {}, + id, + replies: {}, + meta: { + lastRepliers: [], + lastReply: null, + replyCount: 0, + }, + }, + }; + return writ; +} +export function essayToWrit(id: string, essay: Essay): Writ { + return { + essay, + seal: { + reacts: {}, + id: `${essay.author}/${id}`, + replies: {}, + meta: { + lastRepliers: [], + lastReply: null, + replyCount: 0, + }, + }, + }; +} +export function tokenize(s: string): Content { + // TODO there must be a better way to do this + // // man this is annoying. Thanks github, fuck you maintainers. + // const notEscape: marked.MarkedExtension = { + // name: "singleQuote", + // level: "inline", // This is an inline-level tokenizer + // start(src: string) { + // return src.match(/['"<>&]/); + // }, // Hint to Marked.js to stop and check for a match + // tokenizer(src: string, tokens: marked.Token[]) { + // const rule = /['"<>&]/; // Regex for the complete token, anchor to string start + // const match = rule.exec(src); + // if (match) { + // return { + // // Token to generate + // type: "singleQuote", // Should match "name" above + // raw: match[0], // Text to consume from the source + // // text: match[0], // Additional custom properties + // }; + // } + // }, + // renderer(token) { + // return token.text; + // } + // }; + marked.use({ + breaks: true, + }); + // marked.use({ extensions: [notEscape] }); + // const m = marked.lexer(s); + // const tokens = m.map(lexerToTlon).flat(); + // return tokens; + const m = inputToMDTokens(s); + const tokens = m.reduce(lexerToTlonTop, [] as Verse[]); + return tokens; +} +export function inputToMDTokens(input: string) { + const refExtension = { + name: "ref", + level: "inline" as "inline", + start(src: string) { + return src.match(REF_REGEX)?.index; + }, + tokenizer(src: string) { + const ref = src.match(REF_REGEX); + if (!ref || !ref.index || ref.index > 0) return; + return { + type: "ref", + raw: src, + text: src, + }; + }, + }; + const shipExtension = { + name: "ship", + level: "inline" as "inline", + start(src: string) { + return src.match(SHIP_REGEX)?.index; + }, + tokenizer(src: string) { + const ship = src.match(SHIP_REGEX); + if (ship && isValidPatp(ship[0])) { + if (!ship || !ship.index || ship.index > 0) return; + return { + type: "ship", + raw: ship[0], + text: ship[0].trim(), + }; + } + }, + }; + marked.use({ breaks: true, extensions: [refExtension, shipExtension] }); + const md = marked.lexer(input); + return md; +} +function lexerToTlonTop(acc: Verse[], m: Token): Verse[] { + // console.log(m, "parsing"); + if (m.type === "paragraph") + return [...acc, { inline: m.tokens!.map(lexerToTlon).flat() }]; + if (m.type === "blockquote") + return [ + ...acc, + { inline: [{ blockquote: m.tokens!.map(lexerToTlon).flat() }] }, + ]; + if (m.type === "code") return [...acc, { block: tlonCodeblock(m) }]; + if (m.type === "list") return [...acc, { block: { listing: tlonList(m) } }]; + if (m.type === "heading") return [...acc, { block: tlonHeading(m) }]; + else return acc; +} +function tlonHeading(t: any) { + return { + header: { + content: t.tokens.map(lexerToTlon).flat(), + tag: `h${t.depth}`, + }, + }; +} +function tlonCodeblock(t: any) { + return { + code: { + code: t.text, + lang: t.lang, + }, + }; +} +function tlonList(t: any): Listing { + return { + list: { + type: t.ordered ? "ordered" : "unordered", + items: t.items.map(tlonListItem), + contents: [], + }, + }; +} +function tlonListItem(t: any) { + return { + item: t.tokens.map(lexerToTlon).flat(), + }; +} +export function unEscape(s: string): string { + var e = document.createElement("textarea"); + e.innerHTML = s; + // handle case of empty input + return e.childNodes.length === 0 ? "" : e.childNodes[0].nodeValue || ""; +} +function lexerToTlon(m: Token): Inline[] { + if ("text" in m) m.text = unEscape(m.text.trim()); + if (m.type === "text") return parsePlainText(m.text.trim()); + if (m.type === "ref") return m.text; + else if (m.type === "paragraph") return m.tokens!.map(lexerToTlon).flat(); + else if (m.type === "space") return [{ break: null }]; + else if (m.type === "ship") return [{ ship: m.text }]; + else if (m.type === "em") + return [{ italics: m.tokens!.map(lexerToTlon).flat() }]; + else if (m.type === "strong") + return [{ bold: m.tokens!.map(lexerToTlon).flat() }]; + else if (m.type === "del") + return [{ strike: m.tokens!.map(lexerToTlon).flat() }]; + else if (m.type === "blockquote") + return [{ blockquote: m.tokens!.map(lexerToTlon).flat() }]; + else if (m.type === "link") + return [{ link: { href: m.href, content: m.text } }]; + else if (m.type === "image") + return [{ link: { href: m.href, content: m.text } }]; + else if (m.type === "code") return [{ code: m.text, lang: m.lang }]; + else if (m.type === "codespan") return [{ "inline-code": m.text }]; + else if (m.type === "br") return [{ break: null }]; + else if (m.type === "list") return m.items.map(markdownListToTlon).flat(); + else if (m.type === "html" || m.type === "heading") + return parsePlainText(m.text); + else return [m.raw]; +} +function markdownListToTlon(m: Tokens.ListItem): Inline[] { + return [m.raw, { break: null }]; +} +function parsePlainText(s: string): Inline[] { + let data: tokenizerData = [s, []]; + data = extract_mention(data); + data = extract_url(data); + return extract_text(data); +} +// tokenizer adapted from graph-store implementation +type tokenizerData = [string, taggedContent[]]; +type taggedContent = [string, Inline]; +export function extract_mention(data: tokenizerData): tokenizerData { + // const regex = /(^|\s)~[a-z_-]+/g; + const matches = data[0].match(SHIP_REGEX); + if (!matches) return data; + else + return matches.reduce((acc, item) => { + const uid = `;;${Math.random().toString(36).substring(8)};;`; + if (isValidPatp(item.trim())) + return [ + acc[0].replace(item, uid), + [...acc[1], [uid, { ship: item.trim() }]], + ]; + else return acc; + }, data); +} +export const URL_REGEX = + /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,10}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/g; +function extract_url(data: tokenizerData): tokenizerData { + const matches = data[0].match(URL_REGEX); + if (!matches) return data; + else + return matches.reduce((acc, item) => { + const uid = `;;${Math.random().toString(36).substring(8)};;`; + return [ + acc[0].replace(item, uid), + [...acc[1], [uid, { link: { href: item, content: item } }]], + ]; + }, data); +} +function extract_text(data: tokenizerData): Inline[] { + const uids = data[1].map((tuple) => tuple[0].replace(/;/g, "")); + const ret = data[0].split(";;").map((section) => { + if (uids.includes(section)) { + const tc = data[1].find((tagged) => tagged[0] === `;;${section};;`); + if (tc) return tc[1]; + else return section; + } else return section; + }); + return ret; +} + +export function newUv(seed = Date.now()) { + return formatUv(unixToDa(seed)); +} +export const DA_UNIX_EPOCH = BigInt("170141184475152167957503069145530368000"); // `@ud` ~1970.1.1 + +export const DA_SECOND = BigInt("18446744073709551616"); // `@ud` ~s1 + +export const EPOCH = BigInt("292277024400"); +export function unixToDa(unix: number): bigint { + const timeSinceEpoch = (BigInt(unix) * DA_SECOND) / 1000n; + return DA_UNIX_EPOCH + timeSinceEpoch; +} +export function formatUv(x: bigint): string { + const uvMask = BigInt(31); + const uvAlphabet = "0123456789abcdefghijklmnopqrstuv"; + let res = ""; + while (x !== BigInt(0)) { + let nextSix = Number(x & uvMask); + res = uvAlphabet[nextSix] + res; + x = x >> BigInt(5); + } + return addDots5(`0v${res}`); +} + +export function replyToPost(post: Reply): Writ { + const essay: Essay = { ...post.memo, "kind-data": { chat: null } }; + const seal: Seal = { + id: post.seal.id, + reacts: post.seal.reacts, + time: post.seal?.time as string, + replies: {}, + meta: { + lastRepliers: [], + lastReply: null, + replyCount: 0, + }, + }; + return { essay, seal }; +} +export function postToReply(post: Writ): Reply { + const { "kind-data": _, ...memo } = post.essay; + const seal = { + id: post.seal.id, + reacts: post.seal.reacts, + "parent-id": post.seal.id, + time: post.seal.time!, + }; + return { memo, seal }; +} + +export function writToMD(content: Content): string { + return content.reduce((acc, verse) => { + if ("block" in verse) return acc + "\n\n" + blockReducer(verse.block); + else return acc + `\n\n` + inlineReducer(verse.inline); + }, ""); +} +function blockReducer(b: Block): string { + if ("image" in b) return `![](${b.image.src})`; + else if ("code" in b) + return ` + \`\`\` + ${b.code.code} + \`\`\` + `; + else if ("header" in b) { + const tag = + b.header.tag === "h1" + ? "#" + : b.header.tag === "h2" + ? "##" + : b.header.tag === "h3" + ? "###" + : b.header.tag === "h4" + ? "####" + : b.header.tag === "h5" + ? "#####" + : b.header.tag === "h6" + ? "######" + : ""; + return `${tag} ${b.header.content}`; + } else if ("listing" in b) + return ""; // TODO + else if ("cite" in b) + return ""; // TODO + else return ""; +} +function inlineReducer(ar: Inline[]): string { + const res = ar.reduce((acc: string, item) => { + return `${acc} ${inlineToString(item)}`; + }, ""); + return res as string; +} +function inlineToString(i: Inline): string { + if (typeof i === "string") return i; + else if ("break" in i) return `\n`; + else if ("ship" in i) return i.ship; + else if ("inline-code" in i) return `\`${i["inline-code"]}\``; + else if ("code" in i) return `\`${i.code}\``; + else if ("link" in i) return `![${i.link.content}](${i.link.href})`; + else if ("italics" in i) return `_${inlineReducer(i.italics).trim()}_`; + else if ("bold" in i) return `*${inlineReducer(i.bold).trim()}*`; + else if ("blockquote" in i) return `> ${inlineReducer(i.blockquote).trim()}`; + else if ("strike" in i) return `~~${inlineReducer(i.strike).trim()}~~`; + else return ""; +} +export function nestFromString(s: string): Nest { + const ss = s.split("/"); + return { type: ss[0] as any, host: ss[1] as any, name: ss[2] }; +} +export function nestToString(nes: Nest): string { + return `${nes.type}/${nes.host}/${nes.name}`; +} diff --git a/site/src/logic/types-tlon.ts b/site/src/logic/types-tlon.ts new file mode 100644 index 0000000..a59890a --- /dev/null +++ b/site/src/logic/types-tlon.ts @@ -0,0 +1,630 @@ +import { Ship } from "./types"; + +export type Timestamp = number; +export type UrbitTime = string; +// Tlon Channels +export type TlonUnreads = { + dms: Record; + clubs: Record; + channels: Record; + invites: Ship[]; +}; +export type DMType = Ship | string; +export type Nest = { + type: ChannelType; + host: Ship; + name: string; +}; +export type NestString = `${ChannelType}/${Ship}/${string}`; +export type ChannelType = "chat" | "diary" | "heap"; +export type ChatTypeI = { dm: Ship } | { club: string } | { channel: Nest }; +export type ChatType = ChatTypeI | { thread: Thread }; + +export type Thread = { author: Ship; op: string; in: ChatTypeI }; + +export const buntUnread: ChannelUnread = { + count: 0, + recency: Date.now(), + unread: null, + threads: {}, + meta: { + cover: "", + image: "", + title: "", + description: "", + team: [], + }, +}; +export type ChannelUnread = { + count: number; + recency: Timestamp; + unread: null | Unread; + threads: Record; // kana + meta: Metadata; +}; +export type Unread = { + count: number; + id: PostID; + time: UrbitTime; +}; +export type Atom = string; +export type PostID = `${Ship}/${Atom}` | Atom; + +// Groups + +export type GroupsMap = Record; +export type Group = { + bloc: string[]; // roles + cabals: Record; + channels: Record; + cordon: any; // bans I think + fleet: Record; + meta: GroupMetadata; + "flagged-content": any; // mmm + saga: any; // ? + zones: Record; + "zone-ord": string[]; +}; +export const GroupBunt: Group = { + bloc: [], // roles + cabals: {}, + channels: {}, + cordon: null, // bans I think + fleet: {}, + meta: { cover: "", image: "", title: "", description: "" }, + "flagged-content": {}, // mmm + saga: {}, // ? + zones: {}, + "zone-ord": [], +}; +export type Zone = { + idx: string; // channeltype/host/name + meta: GroupMetadata; +}; +export type Membership = { + joined: number; + sects: Sect[]; +}; +export type Sect = any; // idk man +export type ChannelData = { + added: number; // date + join: boolean; + meta: GroupMetadata; + readers: Ship[]; + zone: string; // the section I think +}; +export type Metadata = { + cover: string; + image: string; + title: string; + description: string; + team: Ship[]; +}; +export type GroupMetadata = { + cover: string; + image: string; + title: string; + description: string; +}; +export type ClubsMap = Record; +export type Club = { + hive: Ship[]; + team: Ship[]; + net: string; // "done" or sop + meta: GroupMetadata; +}; + +export type ChannelsRes = Record; +export type ChanString = `${ChannelType}/${Ship}/${string}`; +export type ChanState = { + order: string[]; // ? + sort: string; // ? "time" | w/e + view: string; // ? "list" | w/e + pending: { + posts: any; // ? + replies: any; + }; + perms: { + group: string; + writers: Ship[]; + }; + posts: Record; +}; +export type DottedPostID = string; +// Chat posts +export interface Writ { + seal: Seal; + essay: Essay; + prov?: boolean; +} +export interface Reply { + seal: ReplySeal; + memo: Memo; + unconfirmed?: boolean; +} +export interface DiaryPage { + newer: string | null; // atom, no-dots + older: string | null; + total: number; + posts: DiaryGraph; +} +export interface DiaryPost { + type: "post"; // or? + essay: DiaryEssay; + seal: Seal; + revision: string; // number +} +export interface DiaryEssay extends Memo { + "kind-data": { diary: { image: string; title: string } }; +} +export interface PostsPage { + newer: string | null; // atom, no-dots + older: string | null; + total: number; + posts: WritGraph; +} +export type Cursor = string | null; +export interface WritPage { + newer: Cursor; + older: Cursor; + total: number; + writs: WritGraph; + prov?: WritGraph; +} +export interface DiaryGraph { + [id: string]: DiaryPost; +} +export interface ReplyGraph { + [id: string]: Reply; +} +export interface WritGraph { + [id: string]: Writ; +} +export interface Seal { + id: WritID; + reacts: Reacts; + replies: ReplyGraph; + meta: SealMeta; + time?: string; // chats have this, channels don't (...) +} +export interface SealMeta { + lastRepliers: Ship[]; + lastReply: number | null; //WritID | null; // ? + replyCount: number; +} +export interface ReplySeal { + id: string; + "parent-id": string; + reacts: Reacts; + time?: string; // always?? +} +export interface Memo { + author: Ship; + content: Content; + sent: number; // unix ts +} +export interface Essay extends Memo { + "kind-data": { chat: null } | { notice: null }; +} +export type Reacts = Record; +type WritID = string; // ship/123.123 + +export type Block = + | { cite: Cite } + | { image: ImageBlock } + | { header: { tag: string; content: Inline[] } } + | { listing: Listing } + | { rule: null } + | { code: { code: string; lang: string } }; + +export type Verse = { block: Block } | { inline: Inline[] }; +export type Content = Verse[]; + +export type Listing = + | { item: Inline[] } + | { list: { type: string; items: Listing[]; contents: Inline[] } }; +export type Cite = ChannelCite | GroupCite | DeskCite | BaitCite; +export interface ChannelCite { + chan: { + nest: `${App}/${Ship}/${string}`; + where: string; // "/msg/123.123" path in hoon, idgi yet + }; +} +export interface GroupCite { + group: string; // ship/term +} +export interface DeskCite { + desk: { + flag: string; // flag + where: string; // + }; +} +export interface BaitCite { + bait: { + group: string; // flag + graph: string; // flag + where: string; // + }; +} +export type App = "chat" | "diary" | "heap"; +export interface ImageBlock { + width: number; + height: number; + alt: string; + src: string; // url +} +export type Inline = + | string + | { italics: Inline[] } + | { bold: Inline[] } + | { blockquote: Inline[] } + | { strike: Inline[] } + | { code: string; lang: string } // not actually in the type, but it should + | { "inline-code": string } + | { ship: string } + | { tag: string } + | { link: { content: string; href: string } } + | { task: { checked: boolean; content: Inline[] } } + | { break: null }; + +// kinda custom but still +// +export interface Skein { + unread: boolean; + count: number; + top: { + button: null; + id: string; // @uv + con: Array; + wer: string; // path + time: number; + rope: { + channel: string; + desk: string; + group: string; + thread: string; + }; + }; + "ship-count": number; + time: number; +} + +export interface Brief { + uid: string; + title: string; + group: string; + count: number; + last: number; // date + "read-id": string; // ~ship/123.123.123 + icon: string; // url + cover: string; // url + desc: string; +} +export interface Briefs { + dms: Brief[]; + groups: Brief[]; + threads: Brief[]; + clubs: Brief[]; +} + +export interface NewPostUpdate { + set: { + type: "post"; // or? + essay: Essay; + seal: Seal; + }; +} +export interface ReplyMeta { + replyCount: number; + lastReply: number; // ts + lastRepliers: Ship[]; +} +export interface NewReplyUpdate { + reply: { + id: string; // atom, no dots + meta: ReplyMeta; + "r-reply": NewReplySet | NewReactUpdate; + }; +} +export interface NewReplySet { + set: Reply; +} +export interface NewReactUpdate { + reacts: Reacts; +} + +export type ChannelPendingUpdate = { + pending: { + id: { author: Ship; sent: number }; + pending: + | { post: Essay } + | { reply: { memo: Memo; meta: SealMeta; top: string } }; + }; +}; +export type RPost = NewPostUpdate | NewReactUpdate | NewReplyUpdate; +export type ChanRPost = { + host: Ship; + name: string; + kind: ChannelType; + update: RPost; +}; +export interface ChannelPostUpdate { + post: { + id: string; // atom, no dots + "r-post": RPost; + }; +} +export interface ChannelUpdate { + nest: string; + response: + | ChannelPendingUpdate + | ChannelPostUpdate + | ChannelPermUpdate + | ChannelCreateUpdate; +} +export type ChannelPermUpdate = { + perm: { + group: string; + writers: Ship[]; + }; +}; +export type ChannelCreateUpdate = { + create: { + group: string; + writers: Ship[]; + }; +}; +export interface NewChatPostUpdate { + add: { + memo: Essay; + time: string; // atom, no dots + }; + id?: string; // ~ship/string, only on threads, to set the child, reply.id being the parent +} +export interface NewChatReactUpdate { + "add-react": { ship: Ship; react: string }; +} +export interface ChatUpdate { + id: WritID; + response: NewChatPostUpdate | NewChatReactUpdate | NewChatReplyUpdate; +} + +export interface NewChatReplyUpdate { + reply: { + meta: ReplyMeta; + id: string; // author/dottedID + delta: NewChatPostUpdate | NewChatReactUpdate; + }; +} + +// graph-store +type ID = string; +export interface Graph { + [keys: ID]: GraphStoreNode; +} +export interface GraphStoreNode { + post: GSPost; + children: Graph | null; +} +export type GSContent = any; +export interface GSPost { + author: Ship; + contents: GSContent[]; + "time-sent": number; + hash: string | null; + signatures: string[]; + index: string; +} +export interface GSKey { + name: string; + ship: Ship; +} +export interface AssociationGraph { + [key: string]: Association; +} +export interface Association { + metadata: Metadatum; + "app-name": "graph" | "groups"; + resource: string; // resource string + group: string; // same + groupName: string; // here we ourselves add the group title +} +export interface Metadatum { + preview: boolean; + vip: string; + title: string; + description: string; + creator: Ship; + picture: string; //URL + hidden: boolean; + config: MetadataConfig; + "date-created": string; + color: string; +} +type MetadataConfig = GroupConfig | GraphConfig; +export interface GroupConfig { + group: { + "app-name": "graph"; + resource: string; ///ship/~bacrys/pokur-14 + }; +} +export interface GraphConfig { + graph: GraphType; +} +export type GraphType = "chat" | "publish" | "link" | "post"; + +export interface GSResource { + entity: Ship; + name: string; +} + +export interface Contact { + p?: Ship; + nickname: string; + bio: string; + status: string; + color: string; + avatar: string | null; + cover: string | null; +} + +// responses +export interface Pals { + incoming: Record; + outgoing: Record; +} +export type Contacts = Record; + +export interface DisterApps { + ini: Record; +} +export type FlagString = `${Ship}/${string}`; +export type AppData = { + cass: { + da: string; // @da string + }; + image: string; + info: string; // description + license: string; + ship: Ship; + title: string; // dude + version: string; + website: string; + color: string; // @ux string; + desk: string; + hash: string; // @uv string; + href: { + glob: { + base: string; // desk name + "glob-reference": { + location: { + http: string; // URL, + // could be ames too I guess? + }; + hash: string; + }; + }; + }; +}; + +export type Gangs = Record; +export type GroupPreview = { + claim: null; // + invite: null; // + preview: { + secret: boolean; + time: number; + flag: FlagString; + cordon: { + shut: { + // suspect this is a whitelist/blacklist thing + pending: Ship[]; + ask: Ship[]; + }; + }; + meta: GroupMetadata; + }; +}; + +// %vitals + +interface Connected { + complete: "yes"; +} + +interface YetToCheck { + complete: "no-data"; +} + +interface NoDNS { + complete: "no-dns"; +} + +interface Crash { + complete: "crash"; + crash: string[][]; +} + +interface NoOurPlanet { + complete: "no-our-planet"; + "last-contact": number; +} + +interface NoOurGalaxy { + complete: "no-our-galaxy"; + "last-contact": number; +} + +interface NoSponsorHit { + complete: "no-sponsor-hit"; + ship: string; +} + +interface NoSponsorMiss { + complete: "no-sponsor-miss"; + ship: string; +} + +interface NoTheirGalaxy { + complete: "no-their-galaxy"; + "last-contact": number; +} + +export type ConnectionCompleteStatusKey = + | "yes" + | "crash" + | "no-data" + | "no-dns" + | "no-our-planet" + | "no-our-galaxy" + | "no-sponsor-hit" + | "no-sponsor-miss" + | "no-their-galaxy"; + +export interface CompleteStatus { + complete: ConnectionCompleteStatusKey; +} + +export type ConnectionCompleteStatus = + | Connected + | YetToCheck + | Crash + | NoDNS + | NoOurPlanet + | NoOurGalaxy + | NoSponsorHit + | NoSponsorMiss + | NoTheirGalaxy; + +export type ConnectionPendingStatusKey = + | "setting-up" + | "trying-dns" + | "trying-local" + | "trying-target" + | "trying-sponsor"; + +export type ConnectionPendingStatus = + | { + pending: Omit; + } + | { + pending: "trying-sponsor"; + ship: string; + }; + +export type ConnectionStatus = + | ConnectionCompleteStatus + | ConnectionPendingStatus; + +export interface ConnectionUpdate { + status: ConnectionStatus; + timestamp: number; +} + +export interface ConnectivityCheckOptions { + useStale?: boolean; + enabled?: boolean; + staleTime?: number; + waitToDisplay?: number; +} +export type ChatQuoteParams = { p: Ship; nest: string; id: string }; diff --git a/site/src/logic/types.ts b/site/src/logic/types.ts new file mode 100644 index 0000000..1cb1a14 --- /dev/null +++ b/site/src/logic/types.ts @@ -0,0 +1,95 @@ +import { ChannelType, GroupMetadata, Inline } from "./types-tlon"; + +export type Site = { + sitename: string; + description: string; + groupname: string; + binding: string; + icon: string; + home: string; + css: string; + hidden: boolean; + apps: Apps; + "app-order": AppType[]; +}; +export type AppType = + | "blog" + | "chat" + | "forum" + | "radio" + | "wiki" + | `static/${string}`; +export type Apps = { + chat: string[]; + forum: string[]; + blog: string; + radio: boolean; + wiki: string[]; + static: Record; +}; +export const AppBunt: Apps = { + blog: "", + chat: [], + forum: [], + radio: false, + wiki: [], + static: {}, +}; +export const SiteBunt: Site = { + sitename: "lol", + description: "", + groupname: "lmao", + binding: "/lol", + icon: "", + home: "", + css: "", + hidden: false, + apps: AppBunt, + "app-order": [], +}; + +export type AppChoice = { type: AppType; name: string; id: number }; +export type Ship = `~${string};`; +export type RichMetadata = GroupMetadata & { + name: string; + host: Ship; + kind: ChannelType; +}; +export type Channels = { + chats: RichMetadata[]; + forums: RichMetadata[]; + blog: RichMetadata | null; +}; + +export const ChannelsBunt: Channels = { + chats: [], + forums: [], + blog: null, +}; + +export type Pikes = Record; +export type Pike = { + sync: Desk; + zest: "live" | "dead"; + wefts: any[]; //? + hash: string; +}; +export type Desk = { + ship: Ship; + desk: string; +}; +export type Paragraph = NotRetardedInline[]; +type NInline = NotRetardedInline; +export type NotRetardedInline = + | { text: string } + | { italics: Inline[] } + | { bold: Inline[] } + | { blockquote: Inline[] } + | { strike: Inline[] } + | { code: string; lang: string } // not actually in the type, but it should + | { "inline-code": string } + | { ship: string } + | { tag: string } + | { link: { content: string; href: string } } + | { task: { checked: boolean; content: Inline[] } } + | { break: null }; diff --git a/site/src/logic/utils.ts b/site/src/logic/utils.ts new file mode 100644 index 0000000..20d6446 --- /dev/null +++ b/site/src/logic/utils.ts @@ -0,0 +1,493 @@ +import type { NotRetardedInline, Paragraph, Ship } from "./types"; +import { patp2dec, isValidPatp } from "./ob/co"; +import { Renderer, Token, marked } from "marked"; +import { REF_REGEX, SHIP_REGEX } from "./constants"; +import { unEscape } from "./tlon-helpers"; +import type { + GraphStoreNode, + AssociationGraph, + Association, + GSResource, + Graph, + Contacts, + Pals, + Contact, + Content, + Inline, +} from "./types-tlon"; + +export function addScheme(url: string) { + if (url.includes("localhost")) { + return `http://${url.replace("http://", "")}`; + } else { + return `https://${url.replace("http://", "")}`; + } +} + +export function easyCode(code: string) { + const string = code.replace(/-/g, ""); + const matches = string.match(/.{1,6}/g); + if (matches) return matches.join("-"); +} + +export function tilde(patp: Ship) { + if (patp[0] == "~") { + return patp; + } else { + return "~" + patp; + } +} + +export function color_to_hex(color: string) { + let hex = "#" + color.replace(".", "").replace("0x", "").toUpperCase(); + if (hex == "#0") { + hex = "#000000"; + } + return hex; +} + +export function date_diff(date: number | Date, type: "short" | "long") { + const now = new Date().getTime(); + const diff = now - new Date(date).getTime(); + if (type == "short") { + return to_string(diff / 1000); + } else { + return to_string_long(diff / 1000); + } +} + +function to_string(s: number) { + if (s < 60) { + return "now"; + } else if (s < 3600) { + return `${Math.ceil(s / 60)}m`; + } else if (s < 86400) { + return `${Math.ceil(s / 60 / 60)}h`; + } else if (s < 2678400) { + return `${Math.ceil(s / 60 / 60 / 24)}d`; + } else if (s < 32140800) { + return `${Math.ceil(s / 60 / 60 / 24 / 30)}mo`; + } else { + return `${Math.ceil(s / 60 / 60 / 24 / 30 / 12)}y`; + } +} + +function to_string_long(s: number) { + if (s < 60) { + return "right now"; + } else if (s < 3600) { + return `${Math.ceil(s / 60)} minutes ago`; + } else if (s < 86400) { + return `${Math.ceil(s / 60 / 60)} hours ago`; + } else if (s < 2678400) { + return `${Math.ceil(s / 60 / 60 / 24)} days ago`; + } else if (s < 32140800) { + return `${Math.ceil(s / 60 / 60 / 24 / 30)} months ago`; + } else { + return `${Math.ceil(s / 60 / 60 / 24 / 30 / 12)} years ago`; + } +} + +export function regexes() { + const IMAGE_REGEX = new RegExp(/(jpg|img|png|gif|tiff|jpeg|webp|webm|svg)$/i); + const AUDIO_REGEX = new RegExp(/(mp3|wav|ogg)$/i); + const VIDEO_REGEX = new RegExp(/(mov|mp4|ogv)$/i); + return { img: IMAGE_REGEX, aud: AUDIO_REGEX, vid: VIDEO_REGEX }; +} + +export function buildDM(author: Ship, recipient: Ship, contents: Content[]) { + const node: any = {}; + const point = patp2dec(recipient); + const index = `/${point}/${makeIndex()}`; + node[index] = { + children: null, + post: { + author: author, + contents: contents, + hash: null, + index: index, + signatures: [], + "time-sent": Date.now(), + }, + }; + return { + app: "dm-hook", + mark: "graph-update-3", + json: { + "add-nodes": { + resource: { name: "dm-inbox", ship: author }, + nodes: node, + }, + }, + }; +} + +export function buildChatPost( + author: Ship, + resource: GSResource, + c: Content[], +) { + const index = `/${makeIndex()}`; + return { + "add-nodes": { + resource: { name: resource.name, ship: resource.entity }, + nodes: { + [index]: { + children: null, + post: { + author: author, + contents: c, + hash: null, + index: index, + signatures: [], + "time-sent": Date.now(), + }, + }, + }, + }, + }; +} + +export function buildNotebookPost( + author: Ship, + resource: GSResource, + c: Content[], +) { + const index = `/${makeIndex()}`; + const node: GraphStoreNode = { + children: { + "1": { + post: { + author: author, + contents: [], + hash: null, + index: index + "/1", + signatures: [], + "time-sent": Date.now(), + }, + children: { + "1": { + children: null, + post: { + author: author, + contents: c, + hash: null, + index: index + "/1/1", + signatures: [], + "time-sent": Date.now(), + }, + }, + }, + }, + "2": { + children: null, + post: { + author: author, + contents: [], + hash: null, + index: index + "/2", + signatures: [], + "time-sent": Date.now(), + }, + }, + }, + post: { + author: author, + contents: [], + hash: null, + index: index, + signatures: [], + "time-sent": Date.now(), + }, + }; + const graph = { [index]: node }; + return { + "add-nodes": { + resource: { name: resource.name, ship: resource.entity }, + nodes: graph, + }, + }; +} +export function buildCollectionPost( + author: Ship, + resource: GSResource, + c: Content[], +) { + const index = `/${makeIndex()}`; + const node: GraphStoreNode = { + children: null, + post: { + author: author, + contents: c, + hash: null, + index: index, + signatures: [], + "time-sent": Date.now(), + }, + }; + const graph: Graph = { [index]: node }; + return { + "add-nodes": { + resource: { name: resource.name, ship: resource.entity }, + nodes: graph, + }, + }; +} + +export function makeIndex(): string { + const DA_UNIX_EPOCH = BigInt("170141184475152167957503069145530368000"); + const DA_SECOND = BigInt("18446744073709551616"); + const timeSinceEpoch = (BigInt(Date.now()) * DA_SECOND) / BigInt(1000); + return (DA_UNIX_EPOCH + timeSinceEpoch).toString(); +} +export function makeDottedIndex() { + const DA_UNIX_EPOCH = BigInt("170141184475152167957503069145530368000"); + const DA_SECOND = BigInt("18446744073709551616"); + const timeSinceEpoch = (BigInt(Date.now()) * DA_SECOND) / BigInt(1000); + const index = (DA_UNIX_EPOCH + timeSinceEpoch).toString(); + return index.replace(/\B(?=(\d{3})+(?!\d))/g, "."); +} + +export function nodeToText(n: GraphStoreNode): string { + const c = n.post.contents; + return c.reduce((acc, item) => { + if ("text" in item) return acc + item.text; + else if ("mention" in item) return acc + item.mention; + else return acc; + }, ""); +} + +export function nodesFromGraphUpdate(g: any): GraphStoreNode[] { + const nodes = g["graph-update"]["add-nodes"]["nodes"]; + return Object.keys(nodes).map((n) => nodes[n]); +} + +export function cleanMetadata(metadata: AssociationGraph): Association[] { + const all: Association[] = Object.values(metadata); + const graphs = all.filter((a) => a["app-name"] === "graph"); + return graphs.map((g) => { + const gn = `${g.group}/groups${g.group}`; + const gn2 = `${g.group}/graph${g.group}`; + const group = metadata[gn] || metadata[gn2]; + if (!group) console.log(g, "you lack metadata for this graph"); + const title = group ? group.metadata.title : "error"; + return { ...g, ...{ groupName: title } }; + }); +} + +export function abbreviateChat(s: string): string { + const plist = s.trim().split(" "); + if (isValidPatp(plist[0]) && plist.length > 1) { + return `${plist[0]} & ${plist.length - 1}+`; + } else if (s.length < 25) return s; + else return `${s.substring(0, 25)}...`; +} + +export function timestring(n: number): string { + const nn = new Date(n); + return nn.toTimeString().slice(0, 5); +} +export function wait(ms: number) { + return new Promise((resolve, _reject) => { + setTimeout(resolve, ms); + }); +} + +export function checkTilde(s: string) { + if (s[0] === "~") return s; + else return "~" + s; +} + +export function addDots(s: string, num: number): string { + const reversed = s.split("").reverse().join(""); + const reg = new RegExp(`.{${num}}`, "g"); + const withCommas = reversed.replace(reg, "$&."); + return withCommas.split("").reverse().join("").slice(1); +} +export function addDots5(s: string): string { + const reversed = s.split("").reverse().join(""); + const withCommas = reversed.replace(/.{5}/g, "$&."); + return withCommas.split("").reverse().join(""); +} +// TODO +export function isTwatterLink(s: string) { + const sp = s + .replace("https://", "") + .split("/") + .filter((s) => s); + return sp.length === 4 && sp[0] === "twitter.com" && sp[2] === "status"; +} +export const isSortugLink = (s: string) => !!s.match(REF_REGEX); + +export const markdownRenderer: Partial = { + // paragraph(content: any) { + // // console.log(content, "rendering") + // return content; + // }, + // text(text: string) { + // return text; + // }, + // codespan(code, lang) { + // console.log(code, "code"); + // console.log(lang, "lang"); + // return "" + // }, +}; + +export function auraToHex(s: string): string { + if (s.startsWith("0x")) { + let numbers = s.replace("0x", "").replace(".", ""); + while (numbers.length < 6) { + numbers = "0" + numbers; + } + return "#" + numbers; + } else if (s.startsWith("#")) return s; + else { + // console.log(s, "weird hex"); + return "black"; + } +} + +// default cursors +export function makeNewestIndex() { + const DA_UNIX_EPOCH = BigInt("170141184475152167957503069145530368000"); + const DA_SECOND = BigInt("18446744073709551616"); + const timeSinceEpoch = (BigInt(Date.now()) * DA_SECOND) / BigInt(1000); + return (DA_UNIX_EPOCH + timeSinceEpoch).toString(); +} +export const startCursor = makeNewestIndex(); +export const endCursor = "0"; + +export function displayCount(c: number): string { + if (c === 0) return ""; + else if (c < 1_000) return `${c}`; + else if (c >= 1_000 && c < 1_000_000) return `${Math.round(c / 1_00) / 10}K`; + else if (c >= 1_000_000) return `${Math.round(c / 100_000) / 10}M`; + else return ""; +} +export function isWhiteish(hex: string): boolean { + if (hex.indexOf("#") === 0) hex = hex.slice(1); + const r = parseInt(hex.slice(0, 2), 16); + const g = parseInt(hex.slice(2, 4), 16); + const b = parseInt(hex.slice(4, 6), 16); + return r > 200 && g > 200 && b > 200; +} + +export function localISOString(date: Date) { + const offset = new Date().getTimezoneOffset(); + const localts = date.getTime() - offset * 60_000; + return new Date(localts).toISOString().slice(0, 16); +} + +export function goback() { + window.history.back(); +} + +export function reverseRecord( + a: Record, +): Record { + return Object.entries(a).reduce((acc: any, [k, v]) => { + acc[v] = k; + return acc; + }, {}); +} + +function contactMatch(contact: Contact, input: string): boolean { + return ( + (contact.nickname || "").includes(input) || + (contact.avatar || "").includes(input) || + (contact.cover || "").includes(input) || + (contact.bio || "").includes(input) || + (contact.status || "").includes(input) || + (contact.color || "").includes(input) + ); +} + +export function getColorHex(color: string): string { + if (color.startsWith("0x")) + return `#${padString(stripFuckingDots(color), 6)}`; + else if (color.startsWith("#") && color.length === 7) return color; + else if (color.length === 6) return `#${color}`; + else { + console.log(color, "something weird with this color"); + return "#FFFFFF"; + } +} + +export function stripFuckingDots(hex: string) { + return hex.replace("0x", "").replaceAll(".", ""); +} +export function padString(s: string, size: number) { + if (s.length >= size) return s; + else return padString(`0${s}`, size); +} +export function isDark(hexColor: string): boolean { + const r = parseInt(hexColor.substring(1, 2), 16); + const g = parseInt(hexColor.substring(3, 5), 16); + const b = parseInt(hexColor.substring(5, 7), 16); + + const sr = r / 255; + const sg = g / 255; + const sb = b / 255; + const rSrgb = + sr <= 0.03928 ? sr / 12.92 : Math.pow((sr + 0.055) / 1.055, 2.4); + const gSrgb = + sg <= 0.03928 ? sg / 12.92 : Math.pow((sg + 0.055) / 1.055, 2.4); + const bSrgb = + sb <= 0.03928 ? sb / 12.92 : Math.pow((sb + 0.055) / 1.055, 2.4); + + // Calculate luminance + const luminance = 0.2126 * rSrgb + 0.7152 * gSrgb + 0.0722 * bSrgb; + return luminance < 0.12; +} + +export function checkIfClickedOutside( + e: React.MouseEvent, + el: HTMLElement, + close: any, +) { + e.stopPropagation(); + if (el.contains(e.currentTarget)) close(); +} + +export function generateRandomBase64(length: number) { + const bytes = new Uint8Array(length); + crypto.getRandomValues(bytes); + return btoa(String.fromCharCode(...bytes)) + .slice(0, 4) + .toLowerCase(); +} + +export function capitalize(s: string) { + return s.charAt(0).toUpperCase() + s.slice(1); +} + +export function retardedTlonTokens(tokens: Inline[]): Paragraph[] { + let ps: Paragraph[] = []; + ps.push([]); + for (const token of tokens) { + const currentP: NotRetardedInline[] = ps[ps.length - 1]; + if (typeof token === "string") currentP.push({ text: token }); + else if ("break" in token) ps.push([] as NotRetardedInline[]); + else if ("blockquote" in token) { + ps.push([token]); + ps.push([] as NotRetardedInline[]); + } else currentP.push(token); + } + return ps; +} +export function isValidHttpUrl(string: string) { + let url; + + try { + url = new URL(string); + } catch (_) { + return false; + } + + return url.protocol === "http:" || url.protocol === "https:"; +} +export function displayAnon(ship: Ship): string { + if (ship.length > 30) return "anon"; + else return ship; +} diff --git a/site/src/main.tsx b/site/src/main.tsx new file mode 100644 index 0000000..7b4cc34 --- /dev/null +++ b/site/src/main.tsx @@ -0,0 +1,15 @@ +// import "@fontsource/roboto/300.css"; +// import "@fontsource/roboto/400.css"; +// import "@fontsource/roboto/500.css"; +// import "@fontsource/roboto/700.css"; +import "@fontsource/inter/400.css"; +import "@fontsource/inter/700.css"; +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; +import App from "./App.tsx"; + +createRoot(document.getElementById("root")!).render( + + + , +); diff --git a/site/src/modals/Modal.tsx b/site/src/modals/Modal.tsx new file mode 100644 index 0000000..f91b504 --- /dev/null +++ b/site/src/modals/Modal.tsx @@ -0,0 +1,85 @@ +import { useEffect, useRef, useState } from "react"; +import { useLocation, Link } from "wouter"; +import { + Alert, + Button, + TextField, + Typography, + Box, + Container, +} from "@mui/material"; +import useStore from "../logic/store"; +import { Site, AppType, Ship } from "../logic/types"; +import { tokenize } from "../logic/tlon-helpers"; +import { addDots } from "../logic/utils"; + +// weird that this has to be written manually +const style = { + position: "absolute" as "absolute", + top: "50%", + left: "50%", + transform: "translate(-50%, -50%)", + width: 400, + bgcolor: "background.paper", + border: "2px solid #000", + boxShadow: 24, + p: 4, +}; +export default function MuhModal({ children }: { children: JSX.Element }) { + const { setModal } = useStore(["setModal"]); + function close(e: any, reason: any) { + setModal(null); + } + function onKey(event: any) { + if (event.key === "Escape") setModal(null); + } + useEffect(() => { + document.addEventListener("keyup", onKey); + return () => { + document.removeEventListener("keyup", onKey); + }; + }, [children]); + + function clickAway(e: React.MouseEvent) { + e.stopPropagation(); + if (!modalRef.current || !modalRef.current.contains(e.target as any)) + setModal(null); + } + const modalRef = useRef(null); + const bgStyle = { + position: "fixed" as "fixed", + left: 0, + top: 0, + width: "100vw", + height: "100vh", + backgroundColor: "rgb(0, 0, 0, 0.7)", + zIndex: 0, + }; + const modalStyle = { + position: "fixed" as "fixed", + transform: "translate(-50%, -50%)", + top: "50%", + left: "50%", + }; + return ( + + ); +} + +export function ForumReplyModal({ board, id }: { board: string; id: string }) { + // const { io, airlock, clientShip } = useStore(["io", "airlock", "clientShip"]); + // const { sendDiaryReply } = io(); + // const [input, setInput] = useState(""); + // async function sendReply() { + // const host = `~${airlock.ship}` as Ship; + // console.log(id, "parent id!!, dots??"); + // const did = addDots(id, 3); + // const tokens = tokenize(input); + // const res = await sendDiaryReply(clientShip, host, board, did, tokens); + // } + return ; +} diff --git a/site/src/site/Blog.tsx b/site/src/site/Blog.tsx new file mode 100644 index 0000000..6b03f66 --- /dev/null +++ b/site/src/site/Blog.tsx @@ -0,0 +1,154 @@ +import { + Box, + Container, + Divider, + Typography, + Link as Lin, + Button, + List, + ListItem, + CircularProgress, +} from "@mui/material"; +import { RichMetadata, Ship, Site } from "../logic/types"; +import { Link, Route, Switch, useLocation } from "wouter"; +import useStore from "../logic/store"; +import { Content, DiaryPage, DiaryPost, Group } from "../logic/types-tlon"; +import { tokenize, writToMD } from "../logic/tlon-helpers"; +import BlogPost from "./BlogPost"; +import { PostContent } from "./PostContent"; +import { Centered } from "../ui/Components"; +import Composer from "./Composer"; +import { useQuery } from "@tanstack/react-query"; +export default function Page({ + site, + group, + meta, +}: { + site: Site; + group: Group; + meta: RichMetadata; +}) { + return ( + + Composer({ kind: "Blog Post", meta })} + /> + BlogPost({ site, group, meta })} + /> + BlogPage({ meta })} /> + + ); +} +function BlogPage({ meta }: { meta: RichMetadata }) { + const { io, clientShip } = useStore(["airlock", "io", "clientShip"]); + const { scryDiary } = io(); + const { isLoading, data } = useQuery({ + queryKey: ["diary", meta.name], + queryFn: () => scryDiary(meta.host, meta.name, 300), + }); + const [_, navigate] = useLocation(); + function openEditor() { + navigate("/e"); + } + return ( + + + + + {meta.title} + + + {meta.description} + + {meta.host === clientShip ? ( + + + + ) : ( + <> + )} + + + + {!data ? ( + + + + ) : ( + + )} + + + ); +} + +function PostList({ page }: { page: DiaryPage }) { + return ( + + {Object.entries(page.posts) + .sort((a, b) => b[1].essay.sent - a[1].essay.sent) + .map((entry) => ( + + + + ))} + + ); +} + +function PostPreview({ post }: { post: DiaryPost }) { + const [_, navigate] = useLocation(); + const date = new Date(post.essay.sent).toLocaleDateString(); + const commentCount = post.seal.meta.replyCount; + function openPost() { + navigate(`/${post.seal.id}`, { state: { post } }); + } + return ( + + + {post.essay["kind-data"].diary.title} + + + + + Continue + + + Posted on {date} + {commentCount > 0 && ( + {commentCount} comments + )} + + + ); +} + +function Snippet({ content }: { content: Content }) { + const markdown = writToMD(content); + const snip = markdown.substring(0, 200); + const tokens = tokenize(snip); + return ; +} + +const styles = { + previewTitle: { + cursor: "pointer", + color: "primary.main", + }, +}; diff --git a/site/src/site/BlogPost.tsx b/site/src/site/BlogPost.tsx new file mode 100644 index 0000000..f429a85 --- /dev/null +++ b/site/src/site/BlogPost.tsx @@ -0,0 +1,215 @@ +import { + Box, + Button, + CircularProgress, + Container, + Divider, + Link, + Stack, + TextField, + Typography, +} from "@mui/material"; +import { RichMetadata, Ship, Site } from "../logic/types"; +import { useParams } from "wouter"; +import useStore from "../logic/store"; +import { DiaryPost, Group, Reply } from "../logic/types-tlon"; +import { useEffect, useState } from "react"; +import { addDots, displayAnon } from "../logic/utils"; +import { NotFound } from "./Home"; +import { PostContent } from "./PostContent"; +import { tokenize } from "../logic/tlon-helpers"; +import Sigil from "../ui/Sigil"; +// import { TweetSnippet } from "./Snippets"; + +export default function BlogPost({ + site, + group, + meta, +}: { + site: Site; + group: Group; + meta: RichMetadata; +}) { + const { airlock, io } = useStore(["airlock", "io"]); + const params: any = useParams(); + useEffect(() => { + loadPost(); + }, [history.state]); + async function loadPost() { + if (history.state?.post) setPost(history.state.post); + else { + const { scryDiary } = io(); + const res = await scryDiary(`~${airlock.ship}` as Ship, meta.name, 300); + const dotId = addDots(params.post, 3); + const post = res.posts[dotId]; + if (post) setPost(post); + else setDead(true); + } + } + const [post, setPost] = useState(); + const [dead, setDead] = useState(false); + if (dead) return ; + return {post && }; +} + +function Post({ post, meta }: { meta: RichMetadata; post: DiaryPost }) { + const author = post.essay.author; + const date = new Date(post.essay.sent).toLocaleDateString(); + return ( + + + + + {post.essay["kind-data"].diary.title} + + + Posted by {author} on {date} + + + + + + + + + + ); +} +function CommentComposer({ + post, + parent, + meta, + replyingTo, + close, +}: { + parent: string; + meta: RichMetadata; + post: DiaryPost; + replyingTo?: Ship; + close?: () => void; +}) { + useEffect(() => { + if (replyingTo) setInput(`${replyingTo}: `); + }, [post, replyingTo]); + const { io, clientShip, addPending } = useStore([ + "io", + "clientShip", + "addPending", + ]); + const { sendDiaryReply } = io(); + const [input, setInput] = useState(""); + async function send() { + setSending(true); + const content = tokenize(input); + const ts = Date.now(); + if (meta.host !== clientShip) addPending(ts, content); + const res = await sendDiaryReply( + // clientShip, + meta.host, + meta.host, + meta.name, + addDots(parent, 3), + content, + ts, + ); + if (res) { + setSending(false); + if (close) close(); + } + } + const [sending, setSending] = useState(false); + return ( + + setInput(e.currentTarget.value)} + /> + + + Posting as + + {clientShip} + + {sending ? ( + + ) : ( + + )} + + + ); +} +function Comments({ post, meta }: { meta: RichMetadata; post: DiaryPost }) { + const { lastChannelUpdate } = useStore(["lastChannelUpdate"]); + useEffect(() => { + if (!lastChannelUpdate) return; + const { name, update } = lastChannelUpdate; + if (name !== meta.name) return; + const rpost = update; + if (!("reply" in rpost)) return; + if (!("set" in rpost.reply["r-reply"])) return; + const rep: Reply = rpost.reply["r-reply"].set; + const id = addDots(rep.seal.id, 3); + setIncoming((s) => ({ ...s, [id]: rep })); + }, [lastChannelUpdate]); + const [incoming, setIncoming] = useState>({}); + return ( + + + + {post.seal.meta.replyCount} comments + + + {Object.values({ ...post.seal.replies, ...incoming }) + .sort((a, b) => a.memo.sent - b.memo.sent) + .map((r) => ( + + ))} + + ); +} +function Comment({ + post, + meta, + comment, +}: { + post: DiaryPost; + meta: RichMetadata; + comment: Reply; +}) { + const [replying, setReplying] = useState(false); + return ( + + + + {displayAnon(comment.memo.author)} + + {new Date(comment.memo.sent).toLocaleString()} + + + setReplying(true)}> + Reply + + {replying && ( + setReplying(false)} + /> + )} + + ); +} diff --git a/site/src/site/Board.tsx b/site/src/site/Board.tsx new file mode 100644 index 0000000..712a565 --- /dev/null +++ b/site/src/site/Board.tsx @@ -0,0 +1,212 @@ +import { RichMetadata, Site, Ship } from "../logic/types"; +import Thread from "./BoardThread"; +import Composer from "./Composer"; +import { Link, Route, Switch, useLocation, useParams } from "wouter"; +import useStore from "../logic/store"; +import Sigil from "../ui/Sigil"; +import { + Content, + DiaryPage, + DiaryPost, + Group, + PostsPage, + Writ, +} from "../logic/types-tlon"; +import { + Box, + Button, + CircularProgress, + List, + ListItem, + TextField, + Typography, +} from "@mui/material"; +import { useEffect, useLayoutEffect, useRef, useState } from "react"; +import { NotFound } from "./Home"; +import { PostContent } from "./PostContent"; +import { Centered, WholeFlex } from "../ui/Components"; +import { tokenize, writToMD } from "../logic/tlon-helpers"; +import { addDots, date_diff } from "../logic/utils"; + +export function Board({ page, meta }: { page: DiaryPage; meta: RichMetadata }) { + const [_, navigate] = useLocation(); + function openEditor() { + navigate("/e"); + } + return ( + + <> + + {meta!.title} + {meta!.description} + + + + + + + + ); +} + +const styles = { + chatHeader: { + textAlign: "center", + borderBottom: "2px solid black", + padding: "1rem", + }, + chatList: { + flexGrow: "1", + }, + chatMessage: { + display: "flex", + gap: "1rem", + minHeight: "4rem", + }, + chatInput: { + display: "flex", + width: "100%", + borderTop: "2px solid black", + }, + textInput: { + flexGrow: "1", + border: "none", + outline: "none", + padding: "0.5rem", + }, + threadPreview: { + gap: "1rem", + cursor: "pointer", + }, +}; + +function Loader({ page, meta }: { page: DiaryPage; meta: RichMetadata }) { + const { lastChannelUpdate } = useStore(["lastChannelUpdate"]); + const [incoming, setIncoming] = useState>({}); + useEffect(() => { + if (!lastChannelUpdate) return; + const { kind, host, name, update } = lastChannelUpdate; + if (kind !== "diary") return; + if (host !== meta.host || name !== meta.name) return; + // TODO handle new replies and posts + // if (!("set" in rpost)) return; // const writ: Writ = { essay: rpost.set.essay, seal: rpost.set.seal }; + // const id = addDots(writ.seal.id, 3); + // setIncoming((s) => ({ ...s, [id]: writ })); + }, [lastChannelUpdate]); + return ( + + ); +} +function ThreadList({ page, meta }: { page: DiaryPage; meta: RichMetadata }) { + const [pages, setPages] = useState([]); + return ( + + {Object.values(page.posts) + .sort((a, b) => b.essay.sent - a.essay.sent) + .map((p) => ( + + ))} + + ); +} + +function ThreadPreview({ post, board }: { post: DiaryPost; board: string }) { + const [_, navigate] = useLocation(); + function openThread() { + const n = post.seal.id; + navigate(`/${n}`, { state: { thread: post, board } }); + } + return ( + + + + + + + {post.essay["kind-data"].diary.title} + + + {post.essay.author} + + + {date_diff(post.essay.sent, "short")} + {post.seal.meta.replyCount} replies + + + ); +} +function Snippet({ content }: { content: Content }) { + const markdown = writToMD(content.filter((c) => c)); + const snip = markdown.substring(0, 200); + const tokens = tokenize(snip); + const style = { + container: { + margin: 0, + }, + paragraph: { + margin: 0, + }, + }; + return ; +} + +export default function Router({ + site, + group, + forums, +}: { + site: Site; + group: Group; + forums: RichMetadata[]; +}) { + const params: any = useParams(); + const { airlock, io } = useStore(["airlock", "io"]); + const [dead, setDead] = useState(false); + const [loading, setLoading] = useState(false); + const [page, setPage] = useState(); + const [meta, setMeta] = useState(); + useEffect(() => { + setLoading(true); + const param = params.board; + if (!param) setDead(true); + else getData(param); + }, [params]); + async function getData(name: string) { + const { scryDiary } = io(); + const ship = `~${airlock.ship}` as Ship; + const us = forums.find((c) => c.name === name); + if (us) setMeta(us); + const res = await scryDiary(ship, name, 300); + setPage(res); + setLoading(false); + } + + if (dead) return ; + else if (loading) + return ( + + + + ); + else if (page && meta) + return ( + + Composer({ kind: "Forum Thread", meta })} + /> + + Board({ page, meta })} /> + + ); +} diff --git a/site/src/site/BoardThread.tsx b/site/src/site/BoardThread.tsx new file mode 100644 index 0000000..581ee06 --- /dev/null +++ b/site/src/site/BoardThread.tsx @@ -0,0 +1,303 @@ +import { scrollableStyle } from "../ui/theme"; +import { RichMetadata, Site, Ship } from "../logic/types"; +import { Link, Route, Switch, useLocation, useParams } from "wouter"; +import useStore from "../logic/store"; +import Sigil from "../ui/Sigil"; +import { + ChanString, + ChannelsRes, + Content, + DiaryPage, + DiaryPost, + Group, + Memo, + PostsPage, + Reply, + ReplySeal, + Writ, +} from "../logic/types-tlon"; +import { + Box, + Button, + CircularProgress, + Container, + List, + ListItem, + Stack, + TextField, + Toolbar, + Typography, +} from "@mui/material"; +import { useEffect, useLayoutEffect, useRef, useState } from "react"; +import { NotFound } from "./Home"; +import { PostContent } from "./PostContent"; +import { WholeFlex } from "../ui/Components"; +import { tokenize, writToMD } from "../logic/tlon-helpers"; +import { addDots, date_diff } from "../logic/utils"; + +export default function Thread() { + const { airlock, io } = useStore(["airlock", "io"]); + const { scryChannels } = io(); + const chansQuery = useQuery({ + queryKey: ["channels"], + queryFn: scryChannels, + }); + + const params: any = useParams(); + const [dead, setDead] = useState(false); + const [loading, setLoading] = useState(false); + const [boardName, setBoard] = useState(""); + const [thread, setThread] = useState(); + // const [meta, setMeta] = useState(); + useEffect(() => { + loadPost(); + }, [params]); + async function loadPost() { + if (history.state) { + const { thread, board } = history.state; + if (thread && board) { + setThread(history.state.thread); + setBoard(history.state.board); + } + } else { + const { board, thread } = params; + if (board) setBoard(board); + if (board && thread && chansQuery.data) + getData(board, thread, chansQuery.data); + else setDead(true); + } + } + + async function getData( + name: string, + tid: string, + channelsState: ChannelsRes, + ) { + const dted = addDots(tid, 3); + const host = `~${airlock.ship}`; + const chanString = `diary/${host}/${name}` as ChanString; + const board = channelsState[chanString]; + const ted = board.posts[dted] as unknown as DiaryPost; + setThread(ted); + // const { scryDiaryPost } = io(); + // const ship = `~${airlock.ship}` as Ship; + // const res = await scryDiaryPost(ship, name, dted); + // setThread(res); + setLoading(false); + } + + if (dead) return ; + else if (loading) return ; + else if (thread && boardName) + return ( + + + + {thread.essay["kind-data"].diary.title} + + + + + ); + else return
      ; +} + +function Posts({ thread, board }: { board: string; thread: DiaryPost }) { + const { lastChannelUpdate } = useStore(["lastChannelUpdate"]); + const seal = { ...thread.seal, "parent-id": thread.seal.id }; + useEffect(() => { + if (!lastChannelUpdate) return; + const { kind, name, update } = lastChannelUpdate; + if (kind !== "diary") return; + if (name !== board) return; + const rpost = update; + if (!("reply" in rpost)) return; + if (!("set" in rpost.reply["r-reply"])) return; + const rep: Reply = rpost.reply["r-reply"].set; + const id = addDots(rep.seal.id, 3); + setIncoming((s) => ({ ...s, [id]: rep })); + }, [lastChannelUpdate]); + const [incoming, setIncoming] = useState>({}); + + return ( + + + {Object.values({ ...thread.seal.replies, ...incoming }) + .sort((a, b) => a.memo.sent - b.memo.sent) + .map((p) => ( + + ))} + + ); +} + +import LinkIcon from "@mui/icons-material/Link"; +import ThumbUpIcon from "@mui/icons-material/ThumbUp"; +import ThumbDownIcon from "@mui/icons-material/ThumbDown"; +import ReplyIcon from "@mui/icons-material/Reply"; +import { ForumReplyModal } from "../modals/Modal"; +import { useQuery } from "@tanstack/react-query"; + +function ThreadPost({ + memo, + seal, + boardName, +}: { + memo: Memo; + seal: ReplySeal; + boardName: string; +}) { + const postStyle = { + paragraph: { + marginLeft: 0, + marginRight: 0, + }, + container: {}, + }; + const datetime = new Date(memo.sent).toLocaleString(); + + async function handleLink(e: React.MouseEvent) { + e.stopPropagation(); + const r = await navigator.clipboard.writeText(window.location.href); + } + useEffect(() => { + const s = Object.values(seal.reacts).reduce((acc, item) => { + return item === "👍" ? acc + 1 : item === "👎" ? acc - 1 : acc; + }, 0); + setScore(s); + }, [seal]); + const [score, setScore] = useState(0); + const [replying, setReplying] = useState(false); + const [input, setInput] = useState(""); + const { airlock, io, clientShip, addPending } = useStore([ + "airlock", + "io", + "clientShip", + "addPending", + ]); + const { sendDiaryReply, sendReplyReact, sendReact } = io(); + async function doReact(react: string) { + if (!canPoke) return; + setCanPoke(false); + const host = `~${airlock.ship}` as Ship; + const res = + seal.id === seal["parent-id"] + ? await sendReact( + clientShip, + "diary", + host, + boardName, + addDots(seal.id, 3), + react, + ) + : await sendReplyReact( + clientShip, + "diary", + host, + boardName, + addDots(seal["parent-id"], 3), + addDots(seal.id, 3), + react, + ); + console.log("react sent"); + if (res) { + setTimeout(() => { + setCanPoke(true); + }, 3000); + } + } + async function sendReply() { + setSending(true); + const host = `~${airlock.ship}` as Ship; + const content = tokenize(input); + const ts = Date.now(); + if (host !== clientShip) addPending(ts, content); + const res = await sendDiaryReply( + host, + // clientShip, + host, + boardName, + // WTF Can't nest replies! thanks Tlon + addDots(seal["parent-id"], 3), + content, + ts, + ); + if (res) { + setSending(false); + setReplying(false); + } + } + const [sending, setSending] = useState(false); + const [canPoke, setCanPoke] = useState(true); + return ( + + + + {memo.author} + + + + + Posted: {datetime} + + + + doReact("👍")} /> + = 0 ? "green" : "red"}> + {score} + + doReact("👎")} /> + setReplying(true)} /> + + + + {replying && ( + + setInput(e.currentTarget.value)} + /> + + + Replying as + + {clientShip} + + {sending ? ( + + ) : ( + + )} + + + )} + + + ); +} + +const styles = { + poast: { + border: "1px solid black", + gap: "1rem", + }, + postMeta: { + display: "flex", + alignItems: "center", + justifyContent: "space-between", + borderBottom: "1px solid black", + height: "2rem", + }, +}; diff --git a/site/src/site/Chat.tsx b/site/src/site/Chat.tsx new file mode 100644 index 0000000..6a57d56 --- /dev/null +++ b/site/src/site/Chat.tsx @@ -0,0 +1,157 @@ +import { + Box, + List, + ListItem, + ListItemText, + Stack, + Typography, +} from "@mui/material"; +import { RichMetadata, Site } from "../logic/types"; +import { Route, Switch } from "wouter"; +import { Group } from "../logic/types-tlon"; +import { useEffect, useState } from "react"; +import Chatroom from "./Chatroom"; +import { NotFound } from "./Home"; +import { WholeFlex } from "../ui/Components"; +import { scrollableStyle } from "../ui/theme"; + +const styles = { + logo: { + width: "64px", + height: "64px", + }, + navbar: { + backgroundColor: "black", + }, + appLinks: { + flexGrow: 1, + justifyContent: "space-evenly", + }, + appLink: { + color: "white", + textTransform: "uppercase", + }, + root: { + cursor: "pointer", + "&$selected": { + backgroundColor: "red", + color: "white", + "& .MuiListItemIcon-root": { + color: "white", + }, + }, + "&$selected:hover": { + backgroundColor: "purple", + color: "white", + "& .MuiListItemIcon-root": { + color: "white", + }, + }, + "&:hover": { + backgroundColor: "blue", + color: "white", + "& .MuiListItemIcon-root": { + color: "white", + }, + }, + }, +}; + +function ChatPage({ + chats, + active, +}: { + active: RichMetadata | null; + chats: RichMetadata[]; +}) { + useEffect(() => { + setActiveChat(active); + }, [active, chats]); + const [activeChat, setActiveChat] = useState(null); + async function openChat(meta: RichMetadata) { + setActiveChat(meta); + const p = window.location.pathname; + window.history.pushState({}, "", p + `/${meta.name}`); + } + return ( + + + + + Chats + + + {chats.map((c) => ( + + openChat(c)} primary={c.title} /> + + ))} + + + + + + {activeChat ? ( + + + {activeChat.title} + + + {activeChat.description} + + + ) : ( + <> + )} + + {activeChat ? : } + + + + + ); +} + +function ChatPlaceholder() { + return <>; +} +export default function Router({ + site, + group, + chats, +}: { + site: Site; + group: Group; + chats: RichMetadata[]; +}) { + return ( + + + {(params) => { + const chat = chats.find((c) => c.name == params.room); + if (!chat) return ; + else return ; + }} + + ChatPage({ chats, active: null })} /> + + ); +} diff --git a/site/src/site/Chatroom.tsx b/site/src/site/Chatroom.tsx new file mode 100644 index 0000000..fa71213 --- /dev/null +++ b/site/src/site/Chatroom.tsx @@ -0,0 +1,208 @@ +import { RichMetadata, Site, Ship } from "../logic/types"; +import useStore from "../logic/store"; +import Sigil from "../ui/Sigil"; +import { Group, PostsPage, Writ } from "../logic/types-tlon"; +import { + Box, + Button, + CircularProgress, + List, + ListItem, + TextField, + Typography, +} from "@mui/material"; +import { useEffect, useLayoutEffect, useRef, useState } from "react"; +import { NotFound } from "./Home"; +import { PostContent } from "./PostContent"; +import { Centered, WholeFlex } from "../ui/Components"; +import { tokenize } from "../logic/tlon-helpers"; +import { addDots, displayAnon } from "../logic/utils"; + +export default function Chatroom({ chat }: { chat: RichMetadata }) { + const { airlock, io } = useStore(["airlock", "io"]); + const [dead, setDead] = useState(false); + const [loading, setLoading] = useState(true); + const [page, setPage] = useState(); + useEffect(() => { + getData(); + }, [chat]); + async function getData() { + const { scryChatroom } = io(); + const ship = `~${airlock.ship}` as Ship; + const count = 300; + const res = await scryChatroom(chat.host, chat.name, count); + // const res2 = await scryGroups(); + // const channelName = `chat/${ship}/${name}`; + // const chat = res.channel[channelName]; + // if (!chat) return; + // const pending = chat.pending.posts; + // const pendingReplies = chat.pending.replies; + + if (res) { + setLoading(false); + setPage(res); + } + } + + if (dead) return ; + else if (loading) + return ( + + + + ); + else if (page) + return ( + <> + + + + ); + else return null; +} + +const styles = { + chatList: { + flexGrow: "1", + overflowY: "auto", + }, + reverseScroll: { + display: "flex", + flexDirection: "column", + justifyContent: "end", + }, + chatMessage: { + display: "flex", + gap: "1rem", + p: 1, + }, + chatInput: { + display: "flex", + width: "100%", + borderTop: "2px solid black", + }, + textInput: { + flexGrow: "1", + border: "none", + outline: "none", + padding: "0.5rem", + }, +}; + +function ChatLoader({ page, meta }: { page: PostsPage; meta: RichMetadata }) { + const { lastChannelUpdate } = useStore(["lastChannelUpdate"]); + const [incoming, setIncoming] = useState>({}); + useEffect(() => { + if (!lastChannelUpdate) return; + const { kind, host, name, update } = lastChannelUpdate; + if (kind !== "chat") return; + if (host !== meta.host || name !== meta.name) return; + const rpost = update; + if (!("set" in rpost)) return; + const writ: Writ = { essay: rpost.set.essay, seal: rpost.set.seal }; + const id = addDots(writ.seal.id, 3); + setIncoming((s) => ({ ...s, [id]: writ })); + }, [lastChannelUpdate]); + return ( + + ); +} +function PostList({ page, meta }: { page: PostsPage; meta: RichMetadata }) { + const [pages, setPages] = useState([]); + useLayoutEffect(() => { + scrollDown(); + }, [page]); + function scrollDown() { + bottomRef?.current?.scrollIntoView({ behavior: "instant" }); + } + const bottomRef = useRef(null); + return ( + + {Object.values(page.posts) + .sort((a, b) => a.essay.sent - b.essay.sent) + .map((p) => ( + + ))} +
      + + ); +} + +function ChatMessage({ post }: { post: Writ }) { + const time = new Date(post.essay.sent).toLocaleTimeString(); + const postStyles = { + container: { + lineHeight: "unset", + }, + paragraph: { + margin: 0, + fontWeight: 600, + }, + }; + return ( + + + + + + + {displayAnon(post.essay.author)} + {time} + + + + + ); +} + +function Input({ meta }: { meta: RichMetadata }) { + const { airlock, io, clientShip, addPending } = useStore([ + "airlock", + "io", + "clientShip", + "addPending", + ]); + const [input, setInput] = useState(""); + const inputRef = useRef(null); + function handleKeyboard(event: React.KeyboardEvent) { + if (event.key === "Enter" && event.shiftKey !== true && input) { + event.preventDefault(); + send(); + } + } + async function send() { + setInput(""); + const { sendChatMsg } = io(); + const content = tokenize(input); + const ts = Date.now(); + const host = `~${airlock.ship}` as Ship; + if (host !== clientShip) addPending(ts, content); + const res = await sendChatMsg(meta.host, meta.host, meta.name, content, ts); + inputRef?.current?.focus(); + } + return ( + + setInput(e.currentTarget.value)} + /> + + + ); +} diff --git a/site/src/site/Composer.tsx b/site/src/site/Composer.tsx new file mode 100644 index 0000000..05c4d7c --- /dev/null +++ b/site/src/site/Composer.tsx @@ -0,0 +1,125 @@ +import { + Container, + Typography, + Link as Lin, + Button, + Stack, + TextField, + CircularProgress, +} from "@mui/material"; +import { RichMetadata, Ship, Site } from "../logic/types"; +import useStore from "../logic/store"; +import { useEffect, useState } from "react"; +import { tokenize } from "../logic/tlon-helpers"; +import { WholeFlex } from "../ui/Components"; + +export default function Editor({ + kind, + meta, +}: { + kind: string; + meta: RichMetadata; +}) { + useEffect(() => { + const tit = localStorage.getItem("blogDraftTitle"); + if (tit) setTitle(tit); + const inp = localStorage.getItem("blogDraftInput"); + if (inp) setInput(inp); + const img = localStorage.getItem("blogDraftImage"); + if (img) setImage(img); + }, []); + const { io, airlock, addPending } = useStore([ + "airlock", + "sync", + "setModal", + "io", + "clientShip", + "addPending", + ]); + const [title, setTitle] = useState(""); + const [input, setInput] = useState(""); + const [image, setImage] = useState(""); + const [saving, setSaving] = useState(false); + const [error, setError] = useState(""); + const { sendDiaryPost } = io(); + async function save() { + setSaving(true); + const host = `~${airlock.ship}` as Ship; + const clientShip = (window as any).ship; + const content = tokenize(input); + const ts = Date.now(); + if (host !== clientShip) addPending(ts, content); + const res = await sendDiaryPost( + // clientShip, + host, + host, + meta.name, + title, + image, + content, + ts, + ); + console.log(res, "res"); + if (res) { + localStorage.removeItem("blogDraftTitle"); + localStorage.removeItem("blogDraftInput"); + localStorage.removeItem("blogDraftImage"); + history.back(); + } + } + useEffect(() => { + if (title) localStorage.setItem("blogDraftTitle", title); + }, [title]); + useEffect(() => { + if (input) localStorage.setItem("blogDraftInput", input); + }, [input]); + useEffect(() => { + if (input) localStorage.setItem("blogDraftImage", image); + }, [image]); + return ( + + + + + {kind} Editor + + {!saving ? ( + + ) : ( + + )} + + + setImage(e.currentTarget.value)} + /> + setTitle(e.currentTarget.value)} + /> + setInput(e.currentTarget.value)} + /> + + + + ); +} diff --git a/site/src/site/Forum.tsx b/site/src/site/Forum.tsx new file mode 100644 index 0000000..2efe7b0 --- /dev/null +++ b/site/src/site/Forum.tsx @@ -0,0 +1,205 @@ +import { + Avatar, + Box, + Card, + CardHeader, + CircularProgress, + Container, + List, + ListItem, + ListItemAvatar, + Typography, +} from "@mui/material"; +import { RichMetadata, Site } from "../logic/types"; +import { Link, Route, Switch, useLocation } from "wouter"; +import useStore from "../logic/store"; +import Sigil from "../ui/Sigil"; +import Board from "./Board"; +import { ChannelsRes, DiaryEssay, Group, Writ } from "../logic/types-tlon"; +import { useEffect, useState } from "react"; +import { scrollableStyle } from "../ui/theme"; +import { date_diff } from "../logic/utils"; +import { Centered } from "../ui/Components"; +import { useQuery } from "@tanstack/react-query"; + +type RichWrit = Writ & { chan: RichMetadata }; +function FPage({ + site, + forums, + group, + channelsState, +}: { + site: Site; + group: Group; + forums: RichMetadata[]; + channelsState: ChannelsRes; +}) { + const [_, navigate] = useLocation(); + const [loading, setLoading] = useState(true); + useEffect(() => { + const threads = Object.entries(channelsState).reduce( + (acc, [chan, state]) => { + const groupname = state.perms.group.split("/")[1]; + if (groupname !== site.groupname) return acc; + const [kind, _host, name] = chan.split("/"); + if (kind !== "diary") return acc; + if (chan.includes("ucm-ublog")) return acc; + const board = group.channels[chan]; + if (!board) return acc; + const chanmeta = { ...board.meta, name }; + const poasts = Object.entries(state.posts).map(([k, v]) => { + const nv = { ...v, chan: chanmeta }; + return [k, nv]; + }); + return { ...acc, ...Object.fromEntries(poasts) }; + }, + {} as Record, + ); + const sorted = Object.entries(threads).sort( + ([a, av], [b, bv]) => + Number(a.replaceAll(".", "")) - Number(b.replaceAll(".", "")), + ); + setThreads(sorted); + setLoading(false); + }, [channelsState]); + const [allThreads, setThreads] = useState>([]); + return ( + + + + + Forums + + + {forums.map((f) => ( + + + + + + ))} + + + + + Latest Threads + + {loading ? ( + + + + ) : ( + + {allThreads + .sort((a, b) => b[1].essay.sent - a[1].essay.sent) + .map((t) => ( + + + + + + ))} + + )} + + + + ); +} + +function ForumPreview({ meta }: { meta: RichMetadata }) { + return ( + + + {meta.title} + {meta.description} + + + ); +} +function ThreadPreview({ thread }: { thread: [string, RichWrit] }) { + const [id, writ] = thread; + const essay = writ.essay as unknown as DiaryEssay; + const repCount = writ.seal.meta.replyCount; + return ( + + + + + + + {essay["kind-data"].diary.title} + + {writ.chan.title} + + + {date_diff(essay.sent, "short")} + {repCount > 0 ? ( + {repCount} replies + ) : null} + + + ); +} +export default function Router({ + site, + group, + forums, +}: { + site: Site; + group: Group; + forums: RichMetadata[]; +}) { + const { io } = useStore(["io"]); + const { scryChannels } = io(); + const { isLoading, data } = useQuery({ + queryKey: ["channels"], + queryFn: scryChannels, + }); + if (!data) + return ( + + + + ); + else + return ( + + Board({ site, group, forums })} + /> + FPage({ site, forums, group, channelsState: data })} + /> + + ); +} diff --git a/site/src/site/Home.tsx b/site/src/site/Home.tsx new file mode 100644 index 0000000..645a495 --- /dev/null +++ b/site/src/site/Home.tsx @@ -0,0 +1,181 @@ +import { useEffect, useState } from "react"; +import { Channels, ChannelsBunt, Ship, Site } from "../logic/types"; +import { + Button, + Typography, + Box, + Container, + CircularProgress, + Divider, +} from "@mui/material"; +import useStore from "../logic/store"; +import ChatPage from "./Chat"; +import ForumPage from "./Forum"; +import BlogPage from "./Blog"; +import SearchPage from "./Search"; +import Radio from "./Radio"; +import Login from "./Login"; +import UserPage from "./User"; +import { ChannelType, Group } from "../logic/types-tlon"; +import Navbar from "./Navbar"; +import StaticPage, { MarkdownPage } from "./StaticPage"; +import { Router, Route, Link, Switch, useLocation, useParams } from "wouter"; +import { Centered, WholeFlex } from "../ui/Components"; +import { isValidPatp } from "../logic/ob/co"; +import { BASE_PATH } from "../logic/constants"; +import { useQueryClient } from "@tanstack/react-query"; + +export function Home({ site, group }: { site: Site; group: Group }) { + const { clientShip, io } = useStore(["clientShip", "io"]); + const { scryChannels } = io(); + const queryClient = useQueryClient(); + async function prefetch() { + // Not that prefetching does much in a single-threaded runtime... + await queryClient.prefetchQuery({ + queryKey: ["channels"], + queryFn: scryChannels, + }); + } + useEffect(() => { + prefetch(); + }, []); + + useEffect(() => { + let favicon = document.querySelector( + "link[rel~='icon']", + ) as HTMLLinkElement | null; + if (!favicon) { + favicon = document.createElement("link"); + favicon.rel = "icon"; + document.head.appendChild(favicon); + favicon.href = site.icon; + } + let title = document.querySelector("title"); + if (title) title.innerText = site.sitename; + }, [site]); + useEffect(() => { + setChans(); + }, [group]); + function setChans() { + const chans = Object.entries(group.channels); + const agg = chans.reduce((acc: Channels, [nam, chan]) => { + const [kind, ship, name] = nam.split("/"); + const host = ship as Ship; + const meta = { ...chan.meta, name, host, kind: kind as ChannelType }; + if (kind === "chat") return { ...acc, chats: [...acc.chats, meta] }; + else if (kind === "diary" && name.includes("ucm-ublog")) + return { ...acc, blog: meta }; + else if (kind === "diary") + return { ...acc, forums: [...acc.forums, meta] }; + else return acc; + }, ChannelsBunt); + setChannels(agg); + setLoading(false); + } + const [loading, setLoading] = useState(true); + const [channels, setChannels] = useState(ChannelsBunt); + + if (loading) + return ( + + + + ); + else + return ( + + <> + + + + + HomePage({ site, group })} /> + + + ChatPage({ site, group, chats: channels.chats }) + } + /> + + ForumPage({ site, group, forums: channels.forums }) + } + /> + + BlogPage({ site, group, meta: channels.blog! }) + } + /> + + SearchPage({ site })} + /> + + {(params) => { + const patp = params.patp as Ship; + if (clientShip.length > 28) + return ; + if (isValidPatp(patp)) return ; + else return ; + }} + + + {(params) => { + const text = site.apps.static[params.page]; + if (!text) return ; + else + return ( + + ); + }} + + + + + + + ); +} + +function HomePage({ site, group }: { site: Site; group: Group }) { + return ( + + + {site.sitename} + + + + {site.description} + + + + + + + ); +} + +export default Home; + +export function NotFound({ err }: { err: string }) { + return ( + + {err} not found + + + + + ); +} diff --git a/site/src/site/Login.tsx b/site/src/site/Login.tsx new file mode 100644 index 0000000..d744cc7 --- /dev/null +++ b/site/src/site/Login.tsx @@ -0,0 +1,119 @@ +import { Link, Redirect, Route, Router, useLocation } from "wouter"; +import useStore from "../logic/store.ts"; +import { + Box, + Button, + Card, + CardContent, + CardHeader, + Container, + Stack, + TextField, + Typography, +} from "@mui/material"; +import { useState } from "react"; +import { Ship } from "../logic/types.ts"; +import { BASE_PATH } from "../logic/constants.ts"; +import { isValidPatp } from "../logic/ob/co.ts"; + +export default function () { + const [input, setInput] = useState(""); + const [error, setError] = useState(""); + async function runEauth() { + const formBody = new URLSearchParams(); + formBody.append("name", input); + formBody.append("eauth", ""); + formBody.append("redirect", window.location.href); + const opts = { method: "POST", body: formBody }; + const res = await fetch("/~/login", opts); + console.log(res, "eauth res"); + } + function runMetamask() { + if (!isValidPatp(input)) setError("Not a valid Urbit ID name"); + else connectMetamask(input as Ship); + } + return ( + + + + +
      + setInput(e.currentTarget.value)} + /> + + + + + + +
      +
      +
      + ); +} + +async function fetchSecret() { + try { + const response = await fetch("/ucm/metamask"); + if (response.ok) { + const data = await response.json(); + return data.challenge; + } else { + throw new Error("Failed to retrieve secret"); + } + } catch (error) { + console.error("Error fetching secret:", error); + } +} +async function connectMetamask(who: Ship) { + const secret = await fetchSecret(); + console.log("metamask secret", secret); + try { + const eth = (window as any).ethereum; + const accounts = await eth.request({ method: "eth_requestAccounts" }); + const account = accounts[0]; + + const signature = await eth.request({ + method: "personal_sign", + params: [secret, account], + }); + + const response = await fetch("/ucm/auth", { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + who, + secret: secret, + address: account, + signature: signature, + }), + }); + + if (response.ok) { + // location.reload(); + window.location.replace(BASE_PATH); + } else { + alert("Login failed. Please try again."); + } + } catch (error) { + console.error("MetaMask login failed", error); + } +} diff --git a/site/src/site/Navbar.tsx b/site/src/site/Navbar.tsx new file mode 100644 index 0000000..0e36df7 --- /dev/null +++ b/site/src/site/Navbar.tsx @@ -0,0 +1,81 @@ +import { AppBar, Toolbar, Typography } from "@mui/material"; +import { Site } from "../logic/types"; +import { DEFAULT_ICON } from "../logic/constants"; +import useStore from "../logic/store"; +import Sigil from "../ui/Sigil"; +import { useEffect, useState } from "react"; +import { ThemeToggle } from "../ui/theme"; +import { Link } from "wouter"; + +const styles = { + logo: { + width: "64px", + height: "64px", + }, + navbar: { + backgroundColor: "black", + }, + appLinks: { + flexGrow: 1, + gap: "2rem", + justifyContent: "center", + }, + appLink: { + color: "white", + textTransform: "uppercase", + textDecoration: "none", + }, +}; +export default function Navbar({ site }: { site: Site }) { + useEffect(() => { + const ord: string[] = []; + for (const app of site["app-order"]) { + if (app.startsWith("static/")) ord.push(app.split("/")[1]); + if (app === "blog" && site.apps.blog) ord.push("blog"); + if (app === "radio" && site.apps.radio) ord.push("radio"); + if (app === "chat" && site.apps.chat.length > 0) ord.push("chat"); + if (app === "forum" && site.apps.forum.length > 0) ord.push("forum"); + if (app === "wiki" && site.apps.wiki.length > 0) ord.push("wiki"); + } + // ord.push("search"); + setOrder(ord); + }, [site]); + const { clientShip } = useStore(["clientShip"]); + const icon = site.icon || DEFAULT_ICON; + const [order, setOrder] = useState([]); + return ( + + + + + + + {order.map((page) => { + if (page === "wiki") + return ( + + {page} + + ); + else + return ( + + {page} + + ); + })} + + + {clientShip.length > 28 ? ( + + Login + + ) : ( + + + + )} + + + ); +} diff --git a/site/src/site/PostContent.tsx b/site/src/site/PostContent.tsx new file mode 100644 index 0000000..971ba4b --- /dev/null +++ b/site/src/site/PostContent.tsx @@ -0,0 +1,293 @@ +import { + Block, + ChannelCite, + Cite, + Content, + DiaryPost, + Inline, +} from "../logic/types-tlon"; +import { Box, Divider, Typography } from "@mui/material"; +import { retardedTlonTokens } from "../logic/utils"; +import { NotRetardedInline, Ship } from "../logic/types"; +import { CSSProperties } from "react"; +import { IMAGE_REGEX } from "../logic/constants"; + +const styles = { + logo: { + width: "64px", + height: "64px", + }, + navbar: { + backgroundColor: "black", + }, + appLinks: { + flexGrow: 1, + justifyContent: "space-evenly", + }, + appLink: { + color: "white", + textTransform: "uppercase", + }, + blogText: { + margin: "24px 0", + lineHeight: 1.61, + textAlign: "justify", + }, + snip: {}, + paragraph: {}, +}; + +export type PostStyles = { + container: CSSProperties; + paragraph: CSSProperties; +}; +export function PostContent({ + content, + style, +}: { + content: Content; + style?: PostStyles; +}) { + const containerStyle = style?.container ? style.container : styles.blogText; + const paragraphStyle = style?.paragraph ? style.paragraph : styles.paragraph; + return ( + + {content.map((v, i) => { + const key = JSON.stringify(v) + i; + if ("block" in v) return ; + else + return ( + + + + ); + })} + + ); +} +function BlockDiv({ block }: { block: Block }) { + if ("image" in block) + return ( + {block.image.alt} + ); + if ("header" in block) { + if (block.header.tag === "h1") + return ( +

      + +

      + ); + if (block.header.tag === "h2") + return ( +

      + +

      + ); + if (block.header.tag === "h3") + return ( +

      + +

      + ); + if (block.header.tag === "h4") + return ( +

      + +

      + ); + if (block.header.tag === "h5") + return ( +
      + +
      + ); + if (block.header.tag === "h6") + return ( +
      + +
      + ); + } + if ("rule" in block) return
      ; + if ("code" in block) + return ( +
      +        {block.code.code}
      +      
      + ); + if ("listing" in block) { + if ("item" in block.listing) + return ( +
    1. + +
    2. + ); + if (block.listing.list.type === "tasklist") + return ( +
      + {block.listing.list.items.map((l, i) => ( + + ))} +
      + ); + if (block.listing.list.type === "unordered") + return ( +
        + {block.listing.list.items.map((l, i) => ( + + ))} +
      + ); + if (block.listing.list.type === "ordered") + return ( +
        + {block.listing.list.items.map((l, i) => ( + + ))} +
      + ); + } +} +interface ReferenceProps { + cite: Cite; +} +function Reference({ cite }: ReferenceProps) { + if ("chan" in cite) return ; + // console.log(cite, "cite"); + // return ( + //
      + // {"group" in cite ? ( + //
      + // ) : "chan" in cite ? ( + // ) : "desk" in cite ? ( + //
      + // ) : "bait" in cite ? ( + //
      + // ) : null} + //
      + // ); +} + +function ChanRef({ cite }: { cite: ChannelCite }) { + //
      + // + //
      + return
      ; +} +type QuoteProps = { + post: DiaryPost; +}; +// export function Quote({ post }: QuoteProps) { +// // const profile = useProfile(post.essay.author); +// const name = profile?.nickname ? profile.nickname : post.essay.author; +// return ( +// <> +//

      {name}

      +//
      +// +//
      +// +// ); +// } + +export function Paragraph({ + inline, + inner, +}: { + inner?: boolean; + inline: Inline[]; +}) { + const paragraphs = retardedTlonTokens(inline); + return paragraphs.map((p, i) => ( + + )); +} +interface InlineProps { + inline: NotRetardedInline[]; + isPost?: boolean; +} +export function InlineText({ inline, isPost }: InlineProps) { + // const { setModal } = useStore(); + function openShipModal(s: Ship) {} + // return ; + return ( + + {inline.map((i, ind) => { + const key = JSON.stringify(i) + ind; + // console.log(i, 'inline'); + if ("text" in i) return {i.text}; + if ("bold" in i) + return ( + + + + ); + if ("italics" in i) + return ( + + + + ); + if ("strike" in i) + return ( + + + + ); + if ("link" in i) { + const containsProtocol = i.link.href.match(/https?:\/\//); + if (i.link.href.match(IMAGE_REGEX)) + return ( + + ); + else + return ( + + {i.link.content} + + ); + } + if ("blockquote" in i) + return ( +
      + +
      + ); + if ("code" in i) + return ( +
      +              {i.code}
      +            
      + ); + if ("task" in i) + return ( + + + + + ); + if ("inline-code" in i) + return ( + + {i["inline-code"]} + + ); + if ("ship" in i) + return ( + + {i.ship} + + ); + // if ("break" in i) return
      ; + })} +
      + ); +} diff --git a/site/src/site/Radio.tsx b/site/src/site/Radio.tsx new file mode 100644 index 0000000..9d28dd7 --- /dev/null +++ b/site/src/site/Radio.tsx @@ -0,0 +1,249 @@ +import { + AppBar, + Box, + Container, + Divider, + Toolbar, + Typography, + Link as Lin, + TextField, + Button, + List, + ListItem, + Stack, +} from "@mui/material"; +import { displayAnon } from "../logic/utils"; +import ReactPlayer from "react-player"; +import useStore from "../logic/store"; +import { useEffect, useLayoutEffect, useRef, useState } from "react"; +import { Centered } from "../ui/Components"; +import { Ship } from "../logic/types"; +import { OnProgressProps } from "react-player/base"; + +type Chatlog = Array<{ from: Ship; message: string; time: number }>; +export default function Radio() { + const { airlock, io, clientShip } = useStore(["airlock", "io", "clientShip"]); + const { radioSub, radioSub2, radioSpin, radioChat } = io(); + useEffect(() => { + // airlock.subscribeOnce("tower", "/personal").then((data) => { + // }); + radioSub((data) => { + console.log(data, "radio sub"); + if ("chat" in data) setChatlog((cl) => [...cl, data.chat]); + if ("spin" in data) { + setURL(data.spin.time); + setSpinTime(data.spin.time); + } + }); + // }); + }, []); + + useEffect(() => { + radioSub2((data) => { + console.log(data, "radio sub2"); + if (!("tower-update" in data)) return; + const tower = data["tower-update"]; + setTitle(tower.talk); + setTitleInput(tower.talk); + setDesc(tower.description); + setDescInput(tower.description); + setURL(tower.spin.url); + setInput(tower.spin.url); + setSpinTime(tower.spin.time); + setViewers(tower.viewers); + setChatlog(tower.chatlog); + }); + }, []); + async function submit() { + const res = await radioSpin(titleInput, descInput, input); + if (res) { + window.location.reload(); + } + } + const [error, setError] = useState(""); + // admin + const [input, setInput] = useState(""); + const [titleInput, setTitleInput] = useState(""); + const [descInput, setDescInput] = useState(""); + // radio + + const [chatlog, setChatlog] = useState([]); + const [mediaURL, setURL] = useState(""); + const [spinTime, setSpinTime] = useState(0); + const [title, setTitle] = useState(""); + const [desc, setDesc] = useState(""); + const [viewers, setViewers] = useState([]); + function handleReady(a: any) { + console.log(a, "radio ready"); + } + const playerRef = useRef(null); + function handleProgress(progress: OnProgressProps) { + if (!playerRef.current) return; + const duration = playerRef.current.getDuration(); + if (!duration) return; + const localProgress = progress.playedSeconds; + const ts = Date.now() / 1000; + let globalProgress = Math.ceil(ts - spinTime); + globalProgress = globalProgress % duration; + const outOfSync = Math.abs(localProgress - globalProgress); + if (outOfSync > 2) resync(); + } + useEffect(() => { + resync(); + }, [spinTime]); + function resync() { + if (!playerRef.current) return; + const ts = Date.now() / 1000; + const globalProgress = Math.ceil(ts - spinTime); + if (globalProgress > 10_000) return; + playerRef.current.seekTo(globalProgress, "seconds"); + } + // chatbox + useLayoutEffect(() => { + scrollDown(); + }, [chatlog]); + + function scrollDown() { + bottomRef?.current?.scrollIntoView({ behavior: "instant" }); + } + const bottomRef = useRef(null); + + return ( + + + + Radio + + + {`~${airlock.ship}` === clientShip && ( + + Choose what to play + + setTitleInput(e.currentTarget.value)} + /> + setDescInput(e.currentTarget.value)} + /> + setInput(e.currentTarget.value)} + /> + + + + )} + + Current Session: {title} + {desc} + + + + + + + + + Radio Chat + + + {chatlog.slice(-50).map((msg, i) => ( + + + + {displayAnon(msg.from)}: + + {msg.message} + + + ))} +
      + + + + + + ); +} +function Input() { + const { io, clientShip } = useStore(["io", "clientShip"]); + const [input, setInput] = useState(""); + const inputRef = useRef(null); + function handleKeyboard(event: React.KeyboardEvent) { + if (event.key === "Enter" && event.shiftKey !== true && input) { + event.preventDefault(); + send(); + } + } + async function send() { + setInput(""); + const { radioChat } = io(); + await radioChat(clientShip, input); + inputRef?.current?.focus(); + } + return ( + + setInput(e.currentTarget.value)} + /> + + + ); +} diff --git a/site/src/site/Search.tsx b/site/src/site/Search.tsx new file mode 100644 index 0000000..5892219 --- /dev/null +++ b/site/src/site/Search.tsx @@ -0,0 +1,88 @@ +import { + AppBar, + Box, + Container, + Divider, + Toolbar, + Typography, + Link as Lin, + TextField, + Button, + List, + ListItem, +} from '@mui/material'; +import { AppType, RichMetadata, Ship, Site } from '../logic/types'; +import { Link, Route, Switch, useLocation } from 'wouter'; +import useStore from '../logic/store'; +import { Content, DiaryPage, DiaryPost, Group } from '../logic/types-tlon'; +import { useEffect, useState } from 'react'; +import { tokenize, writToMD } from '../logic/tlon-helpers'; +import BlogPost from './BlogPost'; +import { PostContent } from './PostContent'; +import { Centered } from '../ui/Components'; +import { TypeSpecimenOutlined } from '@mui/icons-material'; + +export type SearchResults = {}; + +export default function BlogPage({ site }: { site: Site }) { + const { airlock, io } = useStore(['airlock', 'io']); + const { search } = io(); + const [error, setError] = useState(''); + const [input, setInput] = useState(''); + const [start, setStart] = useState(''); + const [end, setEbd] = useState(''); + const [apps, setApps] = useState([]); + const [mention, setMention] = useState(''); + const [results, setResults] = useState(); + + async function submit() { + const sts = new Date(start).getTime() || undefined; + const ets = new Date(end).getTime() || undefined; + const res = await search(input, apps, mention, sts, ets); + console.log(res, 'search result'); + if (res) setResults(res); + } + return ( + + + + Search + + + + + + + + {results && } + + ); +} + +function Results({ data }: { data: any }) { + const list: string[] = data.things; + return ( + <> + Results + + {list.map((i) => ( + + + + ))} + + + ); +} diff --git a/site/src/site/Snippets.tsx b/site/src/site/Snippets.tsx new file mode 100644 index 0000000..51edb47 --- /dev/null +++ b/site/src/site/Snippets.tsx @@ -0,0 +1,352 @@ +// import { fetchTweet, lurkTweet } from "@/logic/twatter/calls"; +// import { pokeDister, scryDister, scryGangs } from "@/logic/requests/tlon"; +// import { useEffect, useState } from "react"; +// import Tweet from "@/sections/twatter/Tweet"; +// import { toFlat } from "@/sections/feed/thread/helpers"; +// import PostData from "@/sections/feed/PostData"; +// import Post from "@/sections/feed/post/Post"; +// import { FullNode, SortugRef } from "@/types/trill"; +// import { useQuery, useQueryClient } from "@tanstack/react-query"; +// import { subscribe, unsub } from "@/logic/requests/generic"; +// import { AppData, GroupMetadata } from "@/types/tlon"; +// import comet from "@/assets/icons/comet.svg"; +// import Sigil from "@/ui/Sigil"; +// import { parseThread, parseTweet } from "@/logic/twatter/parser"; +// import { Tweet as TweetType } from "@/types/twatter"; +// import { scryRadio } from "@/logic/requests/trill"; +// import useLocalState from "@/state/state"; +// import { RadioTower, ScheduledRadio, radioLink } from "@/logic/requests/radio"; +// import { Ship } from "@/types/urbit"; +// import { RADIO } from "@/logic/constants"; +// import { SigilOnly } from "../Avatar"; +// import { date_diff } from "../logic/utils"; +// import ShipsModal from "../modals/ShipsModal"; + +// export function TweetSnippet({ +// link, +// giveBack, +// }: { +// link: string; +// giveBack?: Function; +// }) { +// const id = link.split("/")[5]; +// const { isLoading, isError, data } = useQuery({ +// queryKey: ["twatter-thread", id], +// queryFn: () => lurkTweet(id), +// }); +// const [tw, setTw] = useState(); +// useEffect(() => { +// if (data && "thread-lurk" in data) { +// const js = JSON.parse(data["thread-lurk"]).data.tweetResult; +// if (JSON.stringify(js) === "{}") return; +// if (giveBack) giveBack(JSON.stringify(parseTweet(js.result))); +// } +// }, [data]); +// if (isLoading || isError) +// return ( +//
      +//

      Fetching Tweet from your Urbit...

      +//
      +// ); +// else { +// if ("no-coki" in data) +// return ( +// +// ); +// if ("fail" in data) +// return ( +//

      +// Bad request. Please send some feedback (here) of what you were trying +// to fetch. +//

      +// ); +// if ("thread-lurk" in data) { +// const js = JSON.parse(data["thread-lurk"]).data.tweetResult; +// if (JSON.stringify(js) === "{}") +// return null; // TODO wtf +// else +// return ( +//
      +// +//
      +// ); +// } +// // else { +// // const head = parseThread(JSON.parse(data.thread)); +// // const tweet = head.thread.tweets[0] +// // giveBack(JSON.stringify(tweet)) +// // return ( +// //
      +// // +// //
      +// // ); +// // } +// } +// } + +// export function AppSnippet({ r }: { r: SortugRef }) { +// async function sub() { +// if (!subn) { +// const s = await subscribe( +// "treaty", +// "/treaties", +// (data: { add: AppData }) => { +// if ("ini" in data) { +// const app = Object.values(data.ini).find((d) => d.desk === name); +// setApp(app); +// } +// if ("add" in data && data.add.desk === name) setApp(data.add); +// if (appData) unsub(subn); +// }, +// ); +// setSub(s); +// const res = await pokeDister(ship); +// } +// } +// const { ship, path } = r; +// const name = path.slice(1); +// const [appData, setApp] = useState(); +// const [subn, setSub] = useState(); +// const { isLoading, data, isError } = useQuery({ +// queryKey: ["dister", ship], +// queryFn: () => scryDister(ship), +// }); +// if (isLoading || isError) return
      ...
      ; +// else { +// const app = Object.values(data.ini).find((d) => d.desk === name); +// if (!app && !appData) sub(); +// const a = app +// ? app +// : appData +// ? appData +// : { title: name, image: comet, info: "", ship }; +// return ( +//
      +// +//
      +// ); +// } +// } +// function AppDiv({ app }: { app: Partial }) { +// return ( +// <> +// +//
      +//

      {app.title}

      +//

      {app.info}

      +//

      App from {app.ship}

      +//
      +//

      +// +//

      +// +// ); +// } + +// export function TlonSnippet({ r }: { r: SortugRef }) { +// if (r.type === "app") return ; +// if (r.type === "groups") return ; +// } +// export function GroupSnippet({ r }: { r: SortugRef }) { +// const queryClient = useQueryClient(); +// async function sub() { +// if (!subn) { +// const path = `/gangs/index/${ship}`; +// const s = await subscribe("groups", path, (data: any) => { +// const key = `${ship}/${name}`; +// const val = data[key]; +// queryClient.setQueryData(["gangs"], (old: any) => { +// return { ...old, [key]: { preview: val } }; +// }); +// }); +// setSub(s); +// } +// } +// const { ship, path } = r; +// const name = path.slice(1); +// const [groupData, setGroup] = useState(); +// const [subn, setSub] = useState(); +// const { isLoading, data, isError } = useQuery({ +// queryKey: ["gangs"], +// queryFn: scryGangs, +// }); +// if (isLoading || isError) return
      ...
      ; +// else { +// const group = data[`${ship}/${name}`]; +// if (!group && !groupData) sub(); +// const a = +// group && group.preview +// ? group.preview.meta +// : groupData +// ? groupData +// : { title: name, image: comet, cover: "", description: "" }; +// return ( +//
      +// {a.image.startsWith("#") ? ( +//
      +// ) : ( +// +// )} +//
      +//

      {a.title}

      +//

      +// {a.description.length > 25 +// ? a.description.substring(0, 25) + "..." +// : a.description} +//

      +//

      Group by {ship}

      +//
      +// {/*

      +// +//

      */} +//
      +// ); +// } +// } + +// export function RadioSnippet({ ship }: { ship: Ship }) { +// const { our } = useLocalState(); +// return ship === our ? : ; +// } + +// function DudesRadio({ ship }: { ship }) { +// function onc() { +// radioLink(ship); +// } +// const { radioTowers } = useLocalState(); +// const tower = radioTowers.find((t) => t.location === ship); +// if (!tower) +// return ( +//
      +//

      {RADIO}

      +//
      +//

      Radio data not published. Click and check.

      ; +//
      +//
      +// ); +// else +// return ( +//
      +//

      {RADIO}

      +//
      +//

      Radio Session. Playing: {tower.description}

      +//

      Started {new Date(tower.time).toLocaleString()}

      +//
      +//
      +// +// +// {tower.viewers} +// 👀 +// +//
      +//
      +// ); +// } + +// function OwnRadio() { +// const { currentRadio, our, setModal, radioTowers } = useLocalState(); +// const [scheduled, setS] = useState(null); +// function onc() { +// radioLink(our); +// } +// useEffect(() => { +// scryRadio().then((r) => { +// if (r) setS(r.radio); +// }); +// }, []); +// function showViewers() { +// const modal = ( +// +// ); +// setModal(modal); +// } +// if (scheduled && scheduled.time > Date.now()) +// return ( +//
      +//

      {RADIO}

      +//
      +//

      +// Radio Session. Playing: +// +// {scheduled.desc} +// +//

      +//

      Starting at {new Date(scheduled.time).toLocaleString()}

      +//
      +//
      +// +//
      +//
      +// ); +// else if (!currentRadio) +// return ( +//
      +//

      {RADIO}

      +//
      +//

      Radio unavailable

      +//
      +//
      +// ); +// else +// return ( +//
      +//

      {RADIO}

      +//
      +//

      +// Radio Session. Playing: +// +// {currentRadio.description} +// +//

      +// {/*

      Started {date_diff(currentRadio.time, "long")}

      */} +//
      +//
      +// +// +// {currentRadio?.viewers?.length || ""} +// 👀 +// +//
      +//
      +// ); + +// // return ( +// // {scheduled > Date.now() +// // ? (<> +// //

      +// // Radio Session. Playing: +// // +// // {currentRadio.description} +// // +// //

      + +// //

      Starting at {new Date(scheduled).toLocaleString()}

      +// // + +// // ): scheduled !== 0() + +// // } +// //

      +// // Radio Session. Playing: +// // +// // {currentRadio.description} +// // +// //

      +// // {scheduled && scheduled > Date.now() ? ( +// //

      Starting at {new Date(scheduled).toLocaleString()}

      +// // ) : scheduled !== 0 ? ( +// //

      Started {date_diff(new Date(scheduled), "long")}. Click to join.

      +// // ) : ( +// //

      Unscheduled session. Click to join.

      +// // )} +// // ); +// } diff --git a/site/src/site/StaticPage.tsx b/site/src/site/StaticPage.tsx new file mode 100644 index 0000000..01f09d4 --- /dev/null +++ b/site/src/site/StaticPage.tsx @@ -0,0 +1,37 @@ +import { Box, Container, Typography } from "@mui/material"; +import { Site } from "../logic/types"; +import { marked } from "marked"; +import ReactHtmlParser from "react-html-parser"; +import { useEffect, useState } from "react"; + +export default function StaticPage({ + site, + title, + markdown, +}: { + site: Site; + title: string; + markdown: string; +}) { + useEffect(() => { + marked.parse(markdown, { async: true }).then((h) => setHTML(h)); + }, [markdown]); + const [html, setHTML] = useState(""); + return ( + + + + {title} + + + {ReactHtmlParser(html)} + + ); +} +export function MarkdownPage({ markdown }: { markdown: string }) { + useEffect(() => { + marked.parse(markdown, { async: true }).then((h) => setHTML(h)); + }, [markdown]); + const [html, setHTML] = useState(""); + return {ReactHtmlParser(html)}; +} diff --git a/site/src/site/User.tsx b/site/src/site/User.tsx new file mode 100644 index 0000000..46594c3 --- /dev/null +++ b/site/src/site/User.tsx @@ -0,0 +1,47 @@ +import { AppBar, Box, Button, Card, Container, Toolbar, Typography } from '@mui/material'; +import { Ship } from '../logic/types'; +import { Link } from 'wouter'; +import useStore from '../logic/store'; +import Sigil from '../ui/Sigil'; +import { BASE_PATH } from '../logic/constants'; +import { Centered } from '../ui/Components'; + +const styles: any = { + logo: { + width: '64px', + height: '64px', + }, + navbar: { + backgroundColor: 'black', + }, + appLinks: { + flexGrow: 1, + justifyContent: 'space-evenly', + }, + appLink: { + color: 'white', + textTransform: 'uppercase', + }, +}; +export default function Page({ patp }: { patp: Ship }) { + const redirect = BASE_PATH; + return ( + + + + + + + {patp} + + + + + + + ); +} diff --git a/site/src/site/Wiki.tsx b/site/src/site/Wiki.tsx new file mode 100644 index 0000000..da9afdc --- /dev/null +++ b/site/src/site/Wiki.tsx @@ -0,0 +1,26 @@ +import { AppBar, Box, Toolbar, Typography } from '@mui/material'; +import { Site } from '../logic/types'; +import { Link } from 'wouter'; +import useStore from '../logic/store'; +import Sigil from '../ui/Sigil'; + +const styles = { + logo: { + width: '64px', + height: '64px', + }, + navbar: { + backgroundColor: 'black', + }, + appLinks: { + flexGrow: 1, + justifyContent: 'space-evenly', + }, + appLink: { + color: 'white', + textTransform: 'uppercase', + }, +}; +export default function Page({ site }: { site: Site }) { + return ; +} diff --git a/site/src/ui/Components.tsx b/site/src/ui/Components.tsx new file mode 100644 index 0000000..59038f0 --- /dev/null +++ b/site/src/ui/Components.tsx @@ -0,0 +1,119 @@ +import { Box, Card, CircularProgress, SxProps, Theme } from "@mui/material"; +import { ReactNode } from "react"; +import useStore from "../logic/store"; + +export function WholeFlex({ + children, + sx, +}: { + sx?: SxProps; + children: ReactNode; +}) { + const style: any = { + display: "flex", + flexDirection: "column", + height: "100%", + ...sx, + }; + return {children}; +} + +export const styles = { + steady: { + overflow: "hidden", + }, +}; + +export function Flex({ + sx, + children, + dir = "row", + gap = "1rem", +}: { + sx?: SxProps; + children: ReactNode; + dir?: "row" | "column"; + gap?: string; +}) { + const styl: any = { display: "flex", flexDirection: dir, gap, ...sx }; + return {children}; +} +export function Row({ + sx, + children, +}: { + sx?: SxProps; + children: ReactNode; +}) { + const styl: any = { ...sx, display: "flex" }; + return {children}; +} +export function SpreadRow({ + children, + sx, +}: { + sx?: SxProps; + children: ReactNode; +}) { + const styl: any = { ...sx, display: "flex", justifyContent: "space-between" }; + return {children}; +} +export function Centered({ + children, + y = false, + sx, + fixed = false, +}: { + y?: boolean; + fixed?: boolean; + sx?: SxProps; + children: ReactNode; +}) { + if (!y) { + return ( + + {children} + + ); + } else { + const position = fixed ? "fixed" : "absolute"; + const styles = y + ? { + transform: "translate(-50%, -50%)", + top: "50%", + left: "50%", + } + : { transform: "translateX(-50%)", left: "50%" }; + + const styl: any = { ...sx, position, ...styles }; + return {children}; + } +} + +export function Scrollable({ + children, + x = false, + sx, +}: { + x?: boolean; + sx?: SxProps; + children: ReactNode; +}) { + const xstyles = x ? { overflowX: "auto" } : {}; + const styles: any = { ...sx, ...xstyles, overflowY: "auto" }; + return {children}; +} + +export function LoadingScreen() { + const { airlock } = useStore(["airlock"]); + return ( + + + + + +

      Loading...

      +
      +
      + ); +} diff --git a/site/src/ui/Sigil.tsx b/site/src/ui/Sigil.tsx new file mode 100644 index 0000000..ecb4f56 --- /dev/null +++ b/site/src/ui/Sigil.tsx @@ -0,0 +1,49 @@ +import { sigil, reactRenderer } from './sigil-ts'; +import { isValidPatp } from '../logic/ob/co'; +import comet from '../assets/icons/comet.svg'; +import { auraToHex } from '../logic/utils'; + +interface SigilProps { + patp: string; + size: number; + color?: string; +} + +const Sigil = (props: SigilProps) => { + const color = props.color ? auraToHex(props.color) : 'black'; + if (!isValidPatp(props.patp)) return
      X
      ; + else if (props.patp.length > 28) + return ( + + ); + else if (props.patp.length > 15) + // moons + return ( + <> + {sigil({ + patp: props.patp.substring(props.patp.length - 13), + renderer: reactRenderer, + size: props.size, + colors: ['grey', 'white'], + })} + + ); + else + return ( + <> + {sigil({ + patp: props.patp, + renderer: reactRenderer, + size: props.size, + colors: [color, 'white'], + })} + + ); +}; + +export default Sigil; diff --git a/site/src/ui/sigil-ts/index.json b/site/src/ui/sigil-ts/index.json new file mode 100644 index 0000000..3c8f95b --- /dev/null +++ b/site/src/ui/sigil-ts/index.json @@ -0,0 +1,24315 @@ +{ + "bac": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bal": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "32.0072", + "x2": "32.7071", + "y2": "127.3", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64.0072", + "x2": "64.7071", + "y2": "127.3", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "96.0072", + "x2": "96.7071", + "y2": "127.3", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ban": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0C128 70.6924 70.6924 128 -1.52588e-05 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bar": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bat": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0C128 35.3462 99.3462 64 64 64C28.6538 64 0 35.3462 0 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bec": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bel": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ben": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "8", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bep": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 92.6538 64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ber": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0L96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bes": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 128C64 92.6538 35.3462 64 0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bet": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0036", + "y1": "15.9965", + "x2": "48.0036", + "y2": "47.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bex": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0036", + "y1": "15.9965", + "x2": "48.0036", + "y2": "47.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bic": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C74.9807 96 32 53.0193 32 -4.19629e-06", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bid": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0C32 70.6925 74.9807 128 128 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bil": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9965", + "x2": "112.004", + "y2": "111.997", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bin": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bis": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-8.87604e-09", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "96", + "x2": "-8.87604e-09", + "y2": "96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "32", + "x2": "-8.87604e-09", + "y2": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bit": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bol": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-4.37114e-08", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bon": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128C92.6538 128 64 99.3462 64 64C64 28.6538 92.6538 4.215e-07 128 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bor": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 128C4.63574e-06 92.6489 14.3309 60.6449 37.5 37.4807", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 128C32 101.492 42.7436 77.4939 60.1138 60.1217", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 128C64 110.328 71.1626 94.3287 82.7432 82.7471", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M95.6284 128C95.6284 119.164 99.2097 111.164 105 105.374", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bos": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bot": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "32", + "y1": "2.18557e-08", + "x2": "32", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bud": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M16 64C16 90.5097 37.4903 112 64 112", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bur": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M7.37542e-06 -3.56072e-06C1.19529e-06 70.6924 57.3075 128 128 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "bus": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 128C32 110.327 17.6731 96 0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "byl": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M22.1288 22.6299C16.0075 28.7511 8.0234 31.874 0.00134547 31.9986M44.7562 45.2573C32.3866 57.6269 16.2133 63.8747 0.00134277 64.0005M67.3836 67.8847C48.7656 86.5027 24.403 95.8749 0.00134412 96.0012", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "byn": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0C128 35.3511 113.669 67.3551 90.5 90.5193", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0C96 26.5077 85.2564 50.5061 67.8862 67.8783", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0C64 17.6721 56.8374 33.6713 45.2568 45.2529", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32.3716 0C32.3716 8.83603 28.7903 16.8356 23 22.6264", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "byr": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "80", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "80", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "byt": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dab": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "y1": "-0.5", + "x2": "45.2548", + "y2": "-0.5", + "transform": "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.6499)", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dac": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L-5.96046e-08 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dal": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "63.29", + "y2": "63.2929", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "32.0072", + "x2": "32.7071", + "y2": "127.3", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64.0072", + "x2": "64.7071", + "y2": "127.3", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "96.0072", + "x2": "96.7071", + "y2": "127.3", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dan": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "96", + "y1": "2.18557e-08", + "x2": "96", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dap": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9964", + "x2": "112.004", + "y2": "111.996", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dar": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M86.6274 86.6274C99.1242 74.1307 99.1242 53.8694 86.6274 41.3726C74.1306 28.8758 53.8694 28.8758 41.3726 41.3726", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M75.3137 75.3137C81.5621 69.0653 81.5621 58.9347 75.3137 52.6863C69.0653 46.4379 58.9347 46.4379 52.6863 52.6863", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M97.9411 97.9411C116.686 79.1959 116.686 48.804 97.9411 30.0589C79.196 11.3137 48.804 11.3137 30.0589 30.0589", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "das": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dat": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128C92.6538 128 64 99.3462 64 64C64 28.6538 92.6538 -1.54503e-06 128 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dav": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 64C96 46.3269 81.6731 32 64 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "deb": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 -6.35781e-07C64 35.3462 35.3462 64 0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dec": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "112", + "cy": "16", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "112", + "cy": "16", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "def": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 128L128 0", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 94L94 0", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 64L64 0", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 32L32 0", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "deg": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 128C64 92.6538 35.3462 64 0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "del": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dem": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 -6.35781e-07C64 35.3462 35.3462 64 0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "den": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.52575e-06 96C53.0193 96 96 53.0193 96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dep": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 128C32 101.492 42.7436 77.4939 60.1138 60.1216", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 128C64 110.328 71.1626 94.3287 82.7432 82.7471", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M95.6284 128C95.6284 119.164 99.2097 111.164 105 105.374", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "der": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 64L5.59506e-06 0L128 1.11901e-05V64C128 99.3462 99.3462 128 64 128C28.6538 128 -4.6351e-06 99.3462 0 64Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 128L96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "des": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0L96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "det": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9964", + "y1": "111.996", + "x2": "47.9964", + "y2": "79.9964", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dev": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "96.5", + "y1": "3.07317e-08", + "x2": "96.5", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "32.5", + "y1": "3.07317e-08", + "x2": "32.5", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dex": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dib": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "8.74228e-08", + "y1": "64", + "x2": "128", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "5.25874e-08", + "y1": "32", + "x2": "128", + "y2": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dif": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M60.1244 67.3837C41.5063 48.7657 32.1342 24.4031 32.0079 0.00145601M82.7518 44.7563C70.3822 32.3867 64.1344 16.2134 64.0086 0.00145196M105.379 22.1289C99.258 16.0077 96.1351 8.02351 96.0105 0.00145196", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "16", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "16", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dig": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64.5", + "y1": "-0.5", + "x2": "64.5", + "y2": "127.5", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0035", + "y1": "15.9965", + "x2": "48.0035", + "y2": "47.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dil": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0036", + "y1": "79.9964", + "x2": "112.004", + "y2": "111.996", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "din": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "96", + "y1": "2.18557e-08", + "x2": "96", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dir": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 64C96 81.6731 81.6731 96 64 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0035", + "y1": "15.9965", + "x2": "48.0035", + "y2": "47.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dis": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.0029152 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "div": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-4.19629e-06 96C70.6924 96 128 53.0193 128 5.59506e-06", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-2.79753e-06 64C70.6924 64 128 35.3462 128 5.59506e-06", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "doc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M127.997 0L-0.00291443 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M86.6274 41.3726C74.1306 28.8758 53.8694 28.8758 41.3726 41.3726C28.8758 53.8694 28.8758 74.1306 41.3726 86.6274", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dol": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-4.19629e-06 16C26.5097 16 48 37.4903 48 64C48 90.5097 26.5097 112 0 112", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "don": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-3.8147e-06 128C-7.24632e-07 92.6538 28.6538 64 64 64C99.3462 64 128 92.6538 128 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dop": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 112C90.5097 112 112 90.5097 112 64C112 37.4903 90.5097 16 64 16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dor": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "y1": "63.5", + "x2": "128", + "y2": "63.5", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dos": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M86.6274 86.6274C99.1242 74.1306 99.1242 53.8693 86.6274 41.3725C74.1306 28.8758 53.8694 28.8758 41.3726 41.3725", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dot": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dov": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.701724 31.9914C25.6281 31.9914 49.4822 42.5913 66.8261 59.7565M-0.701723 63.9914C16.7916 63.9914 32.6456 71.0098 44.1982 82.3844M-0.701722 95.9914C7.955 95.9914 15.8089 99.4288 21.5694 105.013", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 0C35.3511 0 67.3551 14.3309 90.5193 37.5", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "doz": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128L0 0", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M30.0589 30.0589C48.804 11.3137 79.196 11.3137 97.9411 30.0589C116.686 48.804 116.686 79.196 97.9411 97.9411", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M52.6863 52.6863C58.9347 46.4379 69.0653 46.4379 75.3137 52.6863C81.5621 58.9347 81.5621 69.0653 75.3137 75.3137", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M41.3726 41.3726C53.8694 28.8758 74.1306 28.8758 86.6274 41.3726C99.1242 53.8694 99.1242 74.1306 86.6274 86.6274", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "duc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32L0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dul": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 16C90.5097 16 112 37.4903 112 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 64L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dun": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M112 64C112 37.4903 90.5097 16 64 16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dur": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 64L5.59506e-06 0L128 1.11901e-05V64C128 99.3462 99.3462 128 64 128C28.6538 128 -4.6351e-06 99.3462 0 64Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dus": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 -3.05151e-06C32 53.0193 74.9807 96 128 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dut": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dux": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-2.79795e-06 -3.55988e-06C70.6924 -4.40288e-06 128 57.3075 128 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dyl": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M2.03434e-06 128C70.6924 128 128 70.6925 128 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dyn": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32L0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dyr": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dys": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-3.8147e-06 1.11901e-05C-7.24633e-07 35.3462 28.6538 64 64 64C99.3462 64 128 35.3462 128 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "dyt": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fab": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fad": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fal": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 128L128 0", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 0C35.3511 0 67.3551 14.3309 90.5193 37.5", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 32C26.5077 32 50.5061 42.7436 67.8783 60.1138", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 64C17.6721 64 33.6713 71.1626 45.2529 82.7432", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 95.6284C8.83603 95.6284 16.8356 99.2097 22.6264 105", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fam": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-4.37114e-08", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fan": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fas": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "feb": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M7.37542e-06 -3.56072e-06C1.19529e-06 70.6924 57.3075 128 128 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fed": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32L0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fel": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "y1": "-0.5", + "x2": "45.2548", + "y2": "-0.5", + "transform": "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.6499)", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fen": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 128C4.63574e-06 92.6489 14.3309 60.6449 37.5 37.4807", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 128C32 101.492 42.7436 77.4939 60.1138 60.1217", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 128C64 110.328 71.1626 94.3287 82.7432 82.7471", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M95.6284 128C95.6284 119.164 99.2097 111.164 105 105.374", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fep": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fer": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fes": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fet": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fex": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "y1": "-0.5", + "x2": "45.2548", + "y2": "-0.5", + "transform": "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.6499 47.6499)", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fid": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00291443 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fig": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fil": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-4.37114e-08", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "32", + "y1": "2.18557e-08", + "x2": "32", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fin": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "98", + "y1": "2.18557e-08", + "x2": "98", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fip": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fir": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "y1": "-0.5", + "x2": "45.2548", + "y2": "-0.5", + "transform": "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.6499)", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0036", + "y1": "79.9965", + "x2": "112.004", + "y2": "111.997", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0035", + "y1": "15.9965", + "x2": "48.0035", + "y2": "47.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fit": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fod": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fog": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M86.6274 86.6274C99.1242 74.1306 99.1242 53.8694 86.6274 41.3726C74.1306 28.8758 53.8694 28.8758 41.3726 41.3726", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fol": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-4.37114e-08", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fon": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fop": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M16 64C16 90.5097 37.4903 112 64 112", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "for": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "96", + "y1": "2.18557e-08", + "x2": "96", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fos": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0C96 53.0193 53.0193 96 0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0C64 35.3462 35.3462 64 0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0C32 17.6731 17.6731 32 0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fot": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9964", + "y1": "111.997", + "x2": "47.9964", + "y2": "79.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ful": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 96C81.6731 96 96 81.6731 96 64C96 46.3269 81.6731 32 64 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fun": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 64V128H0L2.79753e-06 64C4.34256e-06 28.6538 28.6538 -1.54503e-06 64 0C99.3462 1.54503e-06 128 28.6538 128 64Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9964", + "y1": "111.997", + "x2": "47.9964", + "y2": "79.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fur": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M86.8823 41.6275C74.3855 29.1307 54.1242 29.1307 41.6274 41.6275C29.1307 54.1243 29.1307 74.3855 41.6274 86.8823", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fus": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 128C32 110.327 17.6731 96 0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fyl": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M22.1288 22.6299C16.0075 28.7511 8.0234 31.874 0.00134547 31.9986M44.7562 45.2573C32.3866 57.6269 16.2133 63.8747 0.00134277 64.0005M67.3836 67.8847C48.7656 86.5027 24.403 95.8749 0.00134412 96.0012", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fyn": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "fyr": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00268555 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "y1": "-0.5", + "x2": "45.2548", + "y2": "-0.5", + "transform": "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.6499 47.6499)", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hab": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M60.1244 67.3837C41.5063 48.7657 32.1342 24.4031 32.0079 0.00145601M82.7518 44.7563C70.3822 32.3867 64.1344 16.2134 64.0086 0.00145196M105.379 22.1289C99.258 16.0077 96.1351 8.02351 96.0105 0.00145196", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hac": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "had": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hal": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64.5", + "y1": "-0.5", + "x2": "64.5", + "y2": "127.5", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M16 64C16 90.5097 37.4903 112 64 112", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M112 64C112 37.4903 90.5097 16 64 16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "han": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hap": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "har": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "has": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hat": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "16", + "r": "8", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M48 32C48 40.8366 40.8366 48 32 48C23.1634 48 16 40.8366 16 32C16 23.1634 23.1634 16 32 16C40.8366 16 48 23.1634 48 32ZM32 40C36.4183 40 40 36.4183 40 32C40 27.5817 36.4183 24 32 24C27.5817 24 24 27.5817 24 32C24 36.4183 27.5817 40 32 40Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hav": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "96", + "y1": "2.18557e-08", + "x2": "96", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "heb": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M2.03434e-06 128C70.6924 128 128 70.6925 128 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hec": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hep": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.00285417", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hes": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M48 96C48 104.837 40.8366 112 32 112C23.1634 112 16 104.837 16 96C16 87.1634 23.1634 80 32 80C40.8366 80 48 87.1634 48 96ZM32 104C36.4183 104 40 100.418 40 96C40 91.5817 36.4183 88 32 88C27.5817 88 24 91.5817 24 96C24 100.418 27.5817 104 32 104Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "het": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 128L96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hex": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hid": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M2.03434e-06 128C70.6924 128 128 70.6925 128 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.52575e-06 96C53.0193 96 96 53.0193 96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.01717e-06 64C35.3462 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M5.08584e-07 32C17.6731 32 32 17.6731 32 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hil": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "8.74228e-08", + "y1": "64", + "x2": "128", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hin": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "32", + "y1": "2.18557e-08", + "x2": "32", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M48 64C48 72.8366 40.8366 80 32 80C23.1634 80 16 72.8366 16 64C16 55.1634 23.1634 48 32 48C40.8366 48 48 55.1634 48 64ZM32 72C36.4183 72 40 68.4183 40 64C40 59.5817 36.4183 56 32 56C27.5817 56 24 59.5817 24 64C24 68.4183 27.5817 72 32 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hob": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 64V128H0L2.79753e-06 64C4.34256e-06 28.6538 28.6538 -1.54503e-06 64 0C99.3462 1.54503e-06 128 28.6538 128 64Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-4.37114e-08", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hoc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "y1": "-0.5", + "x2": "45.2548", + "y2": "-0.5", + "transform": "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.6499)", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hod": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hol": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-4.37114e-08", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hop": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 96C81.6731 96 96 81.6731 96 64C96 46.3269 81.6731 32 64 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hos": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0036", + "y1": "79.9965", + "x2": "112.004", + "y2": "111.997", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0036", + "y1": "15.9965", + "x2": "48.0036", + "y2": "47.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "48", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "48", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "47", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "47", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "81", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "81", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "80", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "80", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hul": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hus": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 96C46.3269 96 32 81.6731 32 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "hut": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lab": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "y1": "-0.5", + "x2": "45.2548", + "y2": "-0.5", + "transform": "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.6499)", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9964", + "y1": "111.997", + "x2": "47.9964", + "y2": "79.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lac": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 -9.40976e-06C64 70.6924 92.6538 128 128 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 -7.63193e-07C32 70.6924 74.9807 128 128 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lad": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "95.35", + "y1": "32.7071", + "x2": "32.0571", + "y2": "96", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lag": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 112C90.5097 112 112 90.5097 112 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lan": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "32", + "y1": "2.18557e-08", + "x2": "32", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lap": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M112 64C112 37.4903 90.5097 16 64 16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "112", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "112", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lar": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "2.78181e-08", + "y1": "64", + "x2": "128", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "las": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lat": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M2.03434e-06 128C70.6924 128 128 70.6925 128 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.52575e-06 96C53.0193 96 96 53.0193 96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.01717e-06 64C35.3462 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M5.08584e-07 32C17.6731 32 32 17.6731 32 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lav": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128C92.6489 128 60.6449 113.669 37.4807 90.5", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C101.492 96 77.4939 85.2564 60.1217 67.8862", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C110.328 64 94.3287 56.8374 82.7471 45.2568", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32.3716C119.164 32.3716 111.164 28.7903 105.374 23", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "leb": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-1.64036e-05 32C53.0193 32 96 74.9807 96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lec": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "led": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "leg": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M7.63192e-07 32C17.6731 32 32 46.3269 32 64C32 81.6731 17.6731 96 0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "len": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lep": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C110.327 96 96 110.327 96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ler": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "let": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lev": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lex": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9965", + "y1": "111.997", + "x2": "47.9965", + "y2": "79.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lib": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 92.6538 64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lid": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0036", + "y1": "15.9965", + "x2": "48.0036", + "y2": "47.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lig": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lin": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "128", + "x2": "64", + "y2": "-6.55671e-08", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "64", + "r": "8", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lis": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-4.70488e-06 64C35.3462 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lit": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00286865 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0C128 35.3511 113.669 67.3551 90.5 90.5193", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0C96 26.5077 85.2564 50.5061 67.8862 67.8783", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0C64 17.6721 56.8374 33.6713 45.2568 45.2529", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32.3716 0C32.3716 8.83603 28.7903 16.8356 23 22.6264", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "liv": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-5.21346e-06 32C70.6924 32 128 17.6731 128 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M3.4331e-06 96C70.6924 96 128 53.0193 128 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "loc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C74.9807 96 32 53.0193 32 -4.19629e-06", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lod": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M16 64C16 90.5097 37.4903 112 64 112", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lom": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lon": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M2.03434e-06 128C70.6924 128 128 70.6925 128 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.52575e-06 96C53.0193 96 96 53.0193 96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.01717e-06 64C35.3462 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M5.08584e-07 32C17.6731 32 32 17.6731 32 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lop": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-8.87604e-09", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "32", + "x2": "-8.87604e-09", + "y2": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lor": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "los": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "luc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-8.87604e-09", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96L0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lud": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0L96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lug": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 -7.62939e-06L64 -2.03434e-06C99.3462 1.05573e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lun": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lup": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 -7.62939e-06L64 -2.03434e-06C99.3462 1.05573e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 16C90.5097 16 112 37.4903 112 64C112 90.5097 90.5097 112 64 112", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-8.87604e-09", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lur": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0L96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lus": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lut": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lux": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lyd": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lyn": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lyr": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00268555 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "48", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "48", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lys": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lyt": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9965", + "x2": "112.003", + "y2": "111.997", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "lyx": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mac": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mag": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mal": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9964", + "x2": "112.004", + "y2": "111.996", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "map": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0036", + "y1": "79.9965", + "x2": "112.004", + "y2": "111.997", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mar": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.0029152 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 64L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M86.6274 86.6274C99.1242 74.1307 99.1242 53.8694 86.6274 41.3726C74.1306 28.8758 53.8694 28.8758 41.3726 41.3726", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M75.3137 75.3137C81.5621 69.0653 81.5621 58.9347 75.3137 52.6863C69.0653 46.4379 58.9347 46.4379 52.6863 52.6863", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M97.9411 97.9411C116.686 79.1959 116.686 48.804 97.9411 30.0589C79.196 11.3137 48.804 11.3137 30.0589 30.0589", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mas": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mat": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32C110.327 32 96 17.6731 96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "meb": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 -3.05151e-06C32 53.0193 74.9807 96 128 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mec": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9965", + "x2": "112.003", + "y2": "111.997", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "med": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "meg": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 92.6538 64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mel": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9964", + "y1": "111.997", + "x2": "47.9964", + "y2": "79.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mep": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96L0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32L0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mer": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mes": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9964", + "y1": "111.996", + "x2": "47.9964", + "y2": "79.9964", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "met": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 128L32 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mev": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mex": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mic": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-2.09815e-06 80C26.5097 80 48 101.49 48 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mid": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-4.37114e-08", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 92.6538 64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mig": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0036", + "y1": "79.9965", + "x2": "112.004", + "y2": "111.997", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mil": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-4.37114e-08", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "32", + "x2": "-4.37114e-08", + "y2": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "96", + "x2": "-4.37114e-08", + "y2": "96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "min": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mip": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128C92.6538 128 64 99.3462 64 64C64 28.6538 92.6538 4.215e-07 128 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mir": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0036", + "y1": "15.9964", + "x2": "48.0036", + "y2": "47.9964", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 64C96 46.3269 81.6731 32 64 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mis": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 92.6538 64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00286865 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mit": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "moc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96L0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32L0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mod": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 96L128 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0035", + "y1": "15.9965", + "x2": "48.0035", + "y2": "47.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mog": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mol": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-4.37114e-08", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M112 64C112 90.5097 90.5097 112 64 112C37.4903 112 16 90.5097 16 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M112 0C112 26.5097 90.5097 48 64 48C37.4903 48 16 26.5097 16 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mon": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mop": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mor": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0035", + "y1": "15.9964", + "x2": "48.0035", + "y2": "47.9964", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9964", + "y1": "111.996", + "x2": "47.9964", + "y2": "79.9964", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mos": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mot": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C110.327 96 96 81.6731 96 64C96 46.3269 110.327 32 128 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mud": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "80", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "80", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mug": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 96C81.6731 96 96 81.6731 96 64C96 46.3269 81.6731 32 64 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mul": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9964", + "x2": "112.003", + "y2": "111.996", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M112 64C112 37.4903 90.5097 16 64 16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mun": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mur": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mus": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 128C96 74.9807 53.0193 32 0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "mut": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "myl": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0035", + "y1": "15.9965", + "x2": "48.0035", + "y2": "47.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "16", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "16", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "myn": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 1.52638e-06C57.3076 -7.74381e-06 9.2702e-06 57.3075 0 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32C74.9807 32 32 74.9807 32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 92.6538 64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C110.327 96 96 110.327 96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "myr": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nac": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nal": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M2.82114e-06 110C60.7513 110 110 60.7513 110 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-5.09828e-06 73C40.3168 73 73 40.3168 73 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-6.63647e-07 37C20.4345 37 37 20.4345 37 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nam": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "8.74228e-08", + "y1": "64", + "x2": "128", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "112", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "112", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nap": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nar": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "8", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nat": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-1.52588e-05 128C-9.07866e-06 57.3075 57.3076 1.44926e-06 128 7.62939e-06", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nav": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C101.492 96 77.4939 85.2564 60.1217 67.8862", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C110.328 64 94.3287 56.8374 82.7471 45.2568", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32.3716C119.164 32.3716 111.164 28.7903 105.374 23", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "neb": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32C74.9807 32 32 74.9807 32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nec": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ned": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nel": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00268555 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 1.90735e-06C96 53.0193 53.0193 96 0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nem": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 92.6538 64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nep": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128C57.3076 128 3.09007e-06 70.6925 0 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C74.9807 96 32 53.0193 32 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32C110.327 32 96 17.6731 96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ner": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9965", + "y1": "111.997", + "x2": "47.9965", + "y2": "79.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nes": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "net": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 64L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nev": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nex": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 -7.62939e-06L64 -2.03434e-06C99.3462 1.05573e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9964", + "x2": "112.003", + "y2": "111.996", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nib": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96L0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nid": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128C92.6538 128 64 70.6925 64 7.63192e-07", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nil": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-8.87604e-09", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "32", + "x2": "-8.87604e-09", + "y2": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nim": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 64V128H0L2.79753e-06 64C4.34256e-06 28.6538 28.6538 -1.54503e-06 64 0C99.3462 1.54503e-06 128 28.6538 128 64Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nis": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32C74.9807 32 32 74.9807 32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00285435 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "noc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nod": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nol": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "1.51277e-05", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nom": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nop": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "y1": "-0.5", + "x2": "45.2548", + "y2": "-0.5", + "transform": "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.65)", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nor": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 96C46.3269 96 32 81.6731 32 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nos": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nov": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M2.03434e-06 128C70.6924 128 128 70.6925 128 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.52575e-06 96C53.0193 96 96 53.0193 96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.01717e-06 64C35.3462 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M5.08584e-07 32C17.6731 32 32 17.6731 32 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nub": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nul": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "num": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nup": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 -7.62939e-06L64 -2.03434e-06C99.3462 1.05573e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 16C90.5097 16 112 37.4903 112 64C112 90.5097 90.5097 112 64 112", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nus": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0.000105172 128C35.3582 128 67.3679 113.664 90.5332 90.4863", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "31", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "31", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nut": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9964", + "x2": "112.003", + "y2": "111.996", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "y1": "-0.5", + "x2": "45.2548", + "y2": "-0.5", + "transform": "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.6499 47.6499)", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nux": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96L0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32L0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nyd": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nyl": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 128C4.63574e-06 92.6489 14.3309 60.6449 37.5 37.4807", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 128C32 101.492 42.7436 77.4939 60.1138 60.1217", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 128C64 110.328 71.1626 94.3287 82.7432 82.7471", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M95.6284 128C95.6284 119.164 99.2097 111.164 105 105.374", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nym": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0L96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nyr": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00268555 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M95.9984 0C95.9984 26.3298 85.3985 50.1839 68.2332 67.5278M63.9983 0C63.9983 17.4933 56.9799 33.3473 45.6054 44.8999M31.9983 0C31.9983 8.65672 28.5609 16.5106 22.9766 22.2711", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nys": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nyt": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 32C81.6731 32 96 46.3269 96 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 16C90.5097 16 112 37.4903 112 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "nyx": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pac": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pad": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pag": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9964", + "y1": "111.997", + "x2": "47.9964", + "y2": "79.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pal": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C101.492 96 77.4939 85.2564 60.1217 67.8862", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C110.328 64 94.3287 56.8374 82.7471 45.2568", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32.3716C119.164 32.3716 111.164 28.7903 105.374 23", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pan": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M41.3726 86.6274C28.8758 74.1306 28.8758 53.8693 41.3726 41.3725C53.8694 28.8758 74.1306 28.8758 86.6274 41.3725", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "par": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.693 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pas": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0L96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pat": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 -2.67054e-06C32 53.0193 74.9807 96 128 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 -1.78036e-06C64 35.3462 92.6538 64 128 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 -8.9018e-07C96 17.6731 110.327 32 128 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pec": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ped": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "peg": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0C96 17.6731 81.6731 32 64 32C46.3269 32 32 17.6731 32 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pel": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M112 64C112 37.4903 90.5097 16 64 16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pem": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 128C64 92.6538 35.3462 64 0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pen": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0C96 17.6731 81.6731 32 64 32C46.3269 32 32 17.6731 32 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "per": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 64L5.59506e-06 0L128 1.11901e-05V64C128 99.3462 99.3462 128 64 128C28.6538 128 -4.6351e-06 99.3462 0 64Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pes": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 112C90.5097 112 112 90.5097 112 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.00285417", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pet": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9964", + "x2": "112.003", + "y2": "111.996", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pex": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pic": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 128C96 74.9807 53.0193 32 0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 128C64 92.6538 35.3462 64 0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 128C32 110.327 17.6731 96 0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pid": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pil": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pin": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pit": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "poc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64.5", + "y1": "-0.5", + "x2": "64.5", + "y2": "127.5", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "96.5", + "y1": "-0.5", + "x2": "96.5", + "y2": "127.5", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "32.5", + "y1": "-0.5", + "x2": "32.5", + "y2": "127.5", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pod": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "96", + "x2": "-8.87604e-09", + "y2": "96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pol": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "32", + "x2": "-8.87604e-09", + "y2": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pon": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pos": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pub": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pun": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M112 64C112 37.4903 90.5097 16 64 16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 64C96 46.3269 81.6731 32 64 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M80 64C80 55.1634 72.8366 48 64 48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pur": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M3.73284e-05 64C17.6633 64 33.6554 56.8445 45.2356 45.2741", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "put": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pyl": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-5.59506e-06 128C35.3462 128 64 99.3462 64 64C64 28.6538 35.3462 1.54503e-06 0 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "pyx": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rab": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9965", + "y1": "111.997", + "x2": "47.9964", + "y2": "79.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rac": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rad": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rag": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0036", + "y1": "15.9965", + "x2": "48.0036", + "y2": "47.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ral": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ram": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ran": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00291443 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rap": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "-1.29797e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rav": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32L0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "reb": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 -9.40976e-06C57.3075 -6.31969e-06 -3.09007e-06 57.3075 0 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rec": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "red": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ref": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "reg": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C110.327 96 96 81.6731 96 64C96 46.3269 110.327 32 128 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rel": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96L0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32L0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rem": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ren": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9965", + "x2": "112.003", + "y2": "111.997", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rep": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 128C32 74.9807 74.9807 32 128 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "res": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9965", + "x2": "112.003", + "y2": "111.997", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ret": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rev": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9965", + "y1": "111.997", + "x2": "53.9965", + "y2": "73.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rex": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rib": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "8.74228e-08", + "y1": "64", + "x2": "128", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ric": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 128C96 74.9807 53.0193 32 0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rid": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0L96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rig": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ril": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.693 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rin": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "32", + "y1": "2.18557e-08", + "x2": "32", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rip": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 64C96 46.3269 81.6731 32 64 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ris": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0C128 35.3511 113.669 67.3551 90.5 90.5193", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0C96 26.5077 85.2564 50.5061 67.8862 67.8783", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0C64 17.6721 56.8374 33.6713 45.2568 45.2529", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32.3716 0C32.3716 8.83603 28.7903 16.8356 23 22.6264", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rit": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "riv": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "roc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "112", + "cy": "16", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "112", + "cy": "16", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rol": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 16C90.5097 16 112 37.4903 112 64C112 90.5097 90.5097 112 64 112", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ron": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0C128 70.6924 70.6925 128 0 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rop": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M112 64C112 37.4903 90.5097 16 64 16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ros": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rov": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0C128 35.3511 113.669 67.3551 90.5 90.5193", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0C96 26.5077 85.2564 50.5061 67.8862 67.8783", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0C64 17.6721 56.8374 33.6713 45.2568 45.2529", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32.3716 0C32.3716 8.83603 28.7903 16.8356 23 22.6264", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ruc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32L0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rud": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rul": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9964", + "x2": "112.003", + "y2": "111.996", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rum": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M5.08584e-07 32C17.6731 32 32 17.6731 32 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "run": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0L96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rup": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 112C90.5097 112 112 90.5097 112 64C112 37.4903 90.5097 16 64 16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rus": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 128C64 92.6538 35.3462 64 0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rut": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rux": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 64C32 81.6731 46.3269 96 64 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ryc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96L0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ryd": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 64C96 81.6731 81.6731 96 64 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ryg": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-2.79795e-06 -3.55988e-06C70.6924 -4.40288e-06 128 57.3075 128 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0035", + "y1": "15.9965", + "x2": "48.0035", + "y2": "47.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ryl": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128C92.6489 128 60.6449 113.669 37.4807 90.5", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C101.492 96 77.4939 85.2564 60.1217 67.8862", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C110.328 64 94.3287 56.8374 82.7471 45.2568", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32.3716C119.164 32.3716 111.164 28.7903 105.374 23", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rym": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96L0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ryn": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128C57.3075 128 -3.09007e-06 70.6925 0 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ryp": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "rys": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.52575e-06 96C53.0193 96 96 53.0193 96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ryt": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 -7.62939e-06L64 -2.03434e-06C99.3462 1.05573e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ryx": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sab": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "y1": "-0.5", + "x2": "45.2548", + "y2": "-0.5", + "transform": "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.65)", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sal": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 128L128 0", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.701724 31.9914C25.6281 31.9914 49.4822 42.5913 66.8261 59.7565M-0.701723 63.9914C16.7916 63.9914 32.6456 71.0098 44.1982 82.3844M-0.701722 95.9914C7.955 95.9914 15.8089 99.4288 21.5694 105.013", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sam": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "san": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sap": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-4.37114e-08", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "8", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sar": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sat": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 0 0 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sav": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 64C96 46.3269 81.6731 32 64 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "seb": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sec": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sed": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sef": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "seg": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 128C32 110.327 46.3269 96 64 96C81.6731 96 96 110.327 96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sel": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "8", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sem": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.01717e-06 64C35.3462 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sen": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 128C96 110.327 81.6731 96 64 96C46.3269 96 32 110.327 32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sep": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 128L64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 128L32 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 128L96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ser": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 64L5.59506e-06 0L128 1.11901e-05V64C128 99.3462 99.3462 128 64 128C28.6538 128 -4.6351e-06 99.3462 0 64Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "set": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 64L128 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sev": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sib": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 9.40976e-06C64 35.3462 92.6538 64 128 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sic": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sid": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128C110.327 128 96 113.673 96 96C96 78.3269 110.327 64 128 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sig": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sil": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "16.0036", + "y1": "15.9965", + "x2": "48.0036", + "y2": "47.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sim": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 64V128H0L2.79753e-06 64C4.34256e-06 28.6538 28.6538 -1.54503e-06 64 0C99.3462 1.54503e-06 128 28.6538 128 64Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sip": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M16 64C16 37.4903 37.4903 16 64 16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sit": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "siv": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96L0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "soc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "16", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "16", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sog": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 96C81.6731 96 96 81.6731 96 64C96 46.3269 81.6731 32 64 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sol": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L-5.96046e-08 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "som": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "son": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "127.553", + "y1": "128.224", + "x2": "63.5528", + "y2": "0.223598", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sop": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sor": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0C128 35.3511 113.669 67.3551 90.5 90.5193", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0C96 26.5077 85.2564 50.5061 67.8862 67.8783", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0C64 17.6721 56.8374 33.6713 45.2568 45.2529", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32.3716 0C32.3716 8.83603 28.7903 16.8356 23 22.6264", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sov": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 128L128 0", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128C92.6489 128 60.6449 113.669 37.4807 90.5", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C101.492 96 77.4939 85.2564 60.1217 67.8862", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C110.328 64 94.3287 56.8374 82.7471 45.2568", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32.3716C119.164 32.3716 111.164 28.7903 105.374 23", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sub": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sud": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-8.87604e-09", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sug": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sul": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 96C46.3269 96 32 81.6731 32 64C32 46.3269 46.3269 32 64 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sum": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.01717e-06 64C35.3462 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sun": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "80", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "80", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "48", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "48", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "48", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "48", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "80", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "80", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sup": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 112C90.5097 112 112 90.5097 112 64C112 37.4903 90.5097 16 64 16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sur": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M3.73284e-05 64.0001C17.6633 64.0001 33.6554 56.8446 45.2356 45.2742", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0.000105172 128C35.3582 128 67.3679 113.664 90.5332 90.4863", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sut": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "syd": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 16C37.4903 16 16 37.4903 16 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "syl": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "sym": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "96.5", + "y1": "3.07317e-08", + "x2": "96.5", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "syn": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 0C35.3511 0 67.3551 14.3309 90.5193 37.5", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 32C26.5077 32 50.5061 42.7436 67.8783 60.1138", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 64C17.6721 64 33.6713 71.1626 45.2529 82.7432", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 95.6284C8.83603 95.6284 16.8356 99.2097 22.6264 105", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "syp": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.01717e-06 64C35.3462 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "syr": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "syt": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "syx": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 128C4.63574e-06 92.6488 14.3309 60.6449 37.5 37.4807", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 128C32 101.492 42.7436 77.4939 60.1138 60.1216", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 128C64 110.328 71.1626 94.3287 82.7432 82.7471", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M95.6284 128C95.6284 119.164 99.2097 111.164 105 105.374", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tab": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "8", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tac": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tad": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tag": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0036", + "y1": "79.9964", + "x2": "112.004", + "y2": "111.996", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tal": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "0.5", + "y1": "-0.5", + "x2": "181.5", + "y2": "-0.5", + "transform": "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 128C96 74.9807 53.0193 32 0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tam": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "96", + "x2": "-8.87604e-09", + "y2": "96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "32", + "x2": "-8.87604e-09", + "y2": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tan": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 128C96 74.9807 53.0193 32 0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 128C64 92.6538 35.3462 64 0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M48 128C48 101.49 26.5097 80 0 80", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 128C32 110.327 17.6731 96 0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M16 128C16 119.163 8.83656 112 0 112", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3075 70.6925 0 0 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tap": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-8.87604e-09", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 32C81.6731 32 96 46.3269 96 64C96 81.6731 81.6731 96 64 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tar": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tas": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 32C81.6731 32 96 46.3269 96 64C96 81.6731 81.6731 96 64 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "teb": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.52575e-06 96C53.0193 96 96 53.0193 96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tec": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9965", + "x2": "112.003", + "y2": "111.997", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ted": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "teg": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 80C119.163 80 112 72.8366 112 64C112 55.1634 119.163 48 128 48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tel": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "15", + "cy": "112", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "15", + "cy": "112", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 0L127.986 127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L128 96", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L128 64", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 0L128 32", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tem": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 92.6538 64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.00285417", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ten": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "48", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "48", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "48", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "48", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "80", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "80", + "cy": "80", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "80", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "48", + "cy": "80", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tep": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.14479e-06 96C53.0193 96 96 53.0193 96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ter": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 64L5.59506e-06 0L128 1.11901e-05V64C128 99.3462 99.3462 128 64 128C28.6538 128 -4.6351e-06 99.3462 0 64Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "96.5", + "y1": "3.07317e-08", + "x2": "96.5", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.01717e-06 64C35.3462 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tes": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tev": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tex": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9965", + "y1": "111.997", + "x2": "47.9965", + "y2": "79.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tic": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32C110.327 32 96 17.6731 96 -1.39876e-06", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tid": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "96", + "y1": "2.18557e-08", + "x2": "96", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M112 32C112 40.8366 104.837 48 96 48C87.1634 48 80 40.8366 80 32C80 23.1634 87.1634 16 96 16C104.837 16 112 23.1634 112 32ZM96 40C100.418 40 104 36.4183 104 32C104 27.5817 100.418 24 96 24C91.5817 24 88 27.5817 88 32C88 36.4183 91.5817 40 96 40Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "til": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0036", + "y1": "79.9965", + "x2": "112.004", + "y2": "111.997", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tim": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 64V128H0L2.79753e-06 64C4.34256e-06 28.6538 28.6538 -1.54503e-06 64 0C99.3462 1.54503e-06 128 28.6538 128 64Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00291443 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tin": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "32", + "y1": "2.18557e-08", + "x2": "32", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tip": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 0L64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tir": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tob": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 64V128H0L2.79753e-06 64C4.34256e-06 28.6538 28.6538 -1.54503e-06 64 0C99.3462 1.54503e-06 128 28.6538 128 64Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96L0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "toc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "96", + "x2": "-8.87604e-09", + "y2": "96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tod": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tog": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 96C46.3269 96 32 81.6731 32 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tol": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "128", + "y1": "64", + "x2": "-4.37114e-08", + "y2": "64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M16 128C16 101.49 37.4903 80 64 80C90.5097 80 112 101.49 112 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tom": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "ton": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32C74.9807 32 32 74.9807 32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 92.6538 64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C110.327 96 96 110.327 96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "top": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "16", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tor": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tuc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96L0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tud": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tug": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32L0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tul": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tun": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 64V128H0L2.79753e-06 64C4.34256e-06 28.6538 28.6538 -1.54503e-06 64 0C99.3462 1.54503e-06 128 28.6538 128 64Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tus": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tux": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tyc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tyd": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00280762 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "y1": "-0.5", + "x2": "45.2548", + "y2": "-0.5", + "transform": "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.6499)", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "15.9964", + "y1": "111.997", + "x2": "47.9964", + "y2": "79.9965", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tyl": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M7.37542e-06 -3.56072e-06C1.19529e-06 70.6924 57.3075 128 128 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tyn": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 -2.28831e-06C57.3076 -3.13131e-06 8.42999e-07 57.3075 0 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "typ": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M96 1.90735e-06C96 53.0193 53.0193 96 0 96", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tyr": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 0L128 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 64C35.3462 64 64 92.6538 64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "tyv": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M256 0L128 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wac": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "11.5", + "fill": "@BG", + "stroke": "@BG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "112", + "r": "9", + "fill": "@FG", + "stroke": "@FG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wal": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64.5", + "y1": "-0.5", + "x2": "64.5", + "y2": "127.5", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "32", + "y1": "2.18557e-08", + "x2": "32", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wan": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wat": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "web": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3075 70.6925 0 0 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wed": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "weg": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M79.5254 0C79.5254 8.83656 72.3619 16 63.5254 16C54.6888 16 47.5254 8.83656 47.5254 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wel": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32C74.9807 32 32 74.9807 32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64C92.6538 64 64 92.6538 64 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C110.327 96 96 110.327 96 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wen": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.01717e-06 64C35.3462 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wep": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wer": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 64L5.59506e-06 0L128 1.11901e-05V64C128 99.3462 99.3462 128 64 128C28.6538 128 -4.6351e-06 99.3462 0 64Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 0L32 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wes": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "80.0035", + "y1": "79.9965", + "x2": "112.003", + "y2": "111.997", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "112", + "cy": "112", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "112", + "cy": "112", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wet": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 64H0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wex": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wic": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wid": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "48.0035", + "y1": "80.0036", + "x2": "16.0035", + "y2": "112.004", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "fill-rule": "evenodd", + "clip-rule": "evenodd", + "d": "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z", + "fill": "@BG" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "win": { + "children": [ + { + "name": "rect", + "attributes": { + "width": "128", + "height": "128", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wis": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 0C0 70.6925 57.3075 128 128 128V0H0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 64L0 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 32L0 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wit": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "64", + "y1": "2.18557e-08", + "x2": "64", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "32", + "y1": "2.18557e-08", + "x2": "32", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "96", + "y1": "2.18557e-08", + "x2": "96", + "y2": "128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wol": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M0 64L128 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 96C110.327 96 96 81.6731 96 64C96 46.3269 110.327 32 128 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wor": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "y1": "-0.5", + "x2": "45.2548", + "y2": "-0.5", + "transform": "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.65)", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "line", + "attributes": { + "x1": "-0.0029152", + "x2": "127.983", + "y2": "127.986", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M64 96C46.3269 96 32 81.6731 32 64", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wyc": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wyd": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M32 64C32 46.3269 46.3269 32 64 32", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wyl": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-3.8147e-06 128C-7.24633e-07 92.6538 28.6538 64 64 64C99.3462 64 128 92.6538 128 128", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wyn": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.52575e-06 96C53.0193 96 96 53.0193 96 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M1.01717e-06 64C35.3462 64 64 35.3462 64 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M5.08584e-07 32C17.6731 32 32 17.6731 32 0", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wyt": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M128 0L0 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "48", + "stroke": "@BG", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "16", + "cy": "64", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "wyx": { + "children": [ + { + "name": "path", + "attributes": { + "d": "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + }, + { + "name": "path", + "attributes": { + "d": "M-0.00292969 0L127.997 128", + "stroke": "@BG", + "stroke-linecap": "square", + "fill": "none" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "96", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "32", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "11.5", + "fill": "@FG", + "stroke": "@FG" + }, + "children": [] + }, + { + "name": "circle", + "attributes": { + "cx": "96", + "cy": "32", + "r": "9", + "fill": "@BG", + "stroke": "@BG", + "stroke-width": "2" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + }, + "zod": { + "children": [ + { + "name": "circle", + "attributes": { + "cx": "64", + "cy": "64", + "r": "64", + "fill": "@FG", + "stroke": "@BG", + "stroke-width": "0.5", + "dataisgeon": "true" + }, + "children": [] + } + ], + "name": "g", + "attributes": { + "fill": "none" + } + } +} diff --git a/site/src/ui/sigil-ts/index.ts b/site/src/ui/sigil-ts/index.ts new file mode 100644 index 0000000..a9b5ac5 --- /dev/null +++ b/site/src/ui/sigil-ts/index.ts @@ -0,0 +1,296 @@ +import { scale, translate, transform, toString } from 'transformation-matrix'; +import invariant from 'invariant'; + +import stringRenderer from './stringRenderer'; +import reactRenderer from './reactRenderer'; +import reactImageRenderer from './reactImageRenderer'; +import { Ast, Config } from './types'; +import { deepClone, chunkStr, isUndefined } from './lib'; +import index from './index.json'; + +const FG = 1; +const BG = 0; + +const COLOR_CODES = { + FG: '@FG', + BG: '@BG', +}; + +const UNIT_GRIDS = { + 4: [ + { x: 0, y: 0 }, + { x: 128, y: 0 }, + { x: 0, y: 128 }, + { x: 128, y: 128 }, + ], + 2: [ + { x: 0, y: 0 }, + { x: 128, y: 0 }, + ], + 1: [{ x: 0, y: 0 }], +}; + +const TILEMAP = { + 4: { x: 2, y: 2 }, + 2: { x: 2, y: 1 }, + 1: { x: 1, y: 1 }, +}; + +// class ConfigError extends Error {} + +// apply color preference +const paint = (node: Ast, colors: [string, string], strokeWidth: number): Ast => { + const fillIndex = node.attributes.fill === COLOR_CODES.FG ? FG : BG; + const strokeIndex = node.attributes.stroke === COLOR_CODES.FG ? FG : BG; + + if (node.attributes.fill !== undefined && node.attributes.fill !== 'none') { + node.attributes.fill = colors[fillIndex]; + } + + if (node.attributes.stroke !== undefined && node.attributes.stroke !== 'none') { + node.attributes.stroke = colors[strokeIndex]; + node.attributes['stroke-width'] = strokeWidth + 'px'; + node.attributes['stroke-linecap'] = 'square'; + // non-scaling-stroke is used to prevent the stroke from scaling when a scaling transformation is applied by sigil() + node.attributes['vector-effect'] = 'non-scaling-stroke'; + } + + return { + ...node, + ...{ + name: node.name, + attributes: node.attributes, + children: node.children.map((n) => paint(n, colors, strokeWidth)), + }, + }; +}; + +const sigil = (props: Config) => { + props = { ...props }; + + // Set default values from config + if (typeof props.colors === 'undefined') { + props.colors = ['#000', '#fff']; + } + + if (typeof props.attributes === 'undefined') { + props.attributes = {}; + } + + if (typeof props.style === 'undefined') { + props.style = {}; + } + + if (typeof props.class === 'undefined') { + props.class = ''; + } + + // if props.size is defined, set width and height + if (!(typeof props.size === 'undefined')) { + props.width = props.size; + props.height = props.size; + } + + // if width and height are undefined, set default size + if (typeof props.width === 'undefined' || typeof props.height === 'undefined') { + props.width = 128; + props.height = 128; + } + + if (typeof props.margin === 'undefined') { + props.margin = true; + } + + if (props.icon === true) { + props.margin = false; + } + + // get phonemes as array from patp input and split into array + let phonemes = chunkStr(props.patp.replace(/[\^~-]/g, ''), 3); + + invariant(Array.isArray(phonemes), `Invalid patp argument`); + + // Throw an error if the phoneme length is not a 32, 16 or 8 bit point. + const phonemeLengthDidPass = + phonemes.length === 1 || phonemes.length === 2 || phonemes.length === 4; + + invariant( + phonemeLengthDidPass, + `@tlon/sigil-js cannot render @p of length ${phonemes.length}. Only lengths of 1 (galaxy), 2 (star), and 4 (planet) are supported at this time.`, + ); + + // get symbols and clone them. If no symbol is found, the @p prop was invalid. + let patpDidPass; + + let symbols = phonemes.map((phoneme) => { + // @ts-ignore + const ast = index[phoneme]; + if (isUndefined(ast)) { + patpDidPass = false; + return {}; + } else { + patpDidPass = true; + return deepClone(ast); + } + }); + + invariant( + patpDidPass, + `@tlon/sigil-js needs a valid patp (point name). Patp field is invalid. Recieved ${props.patp}`, + ); + + if (props.icon === true) { + symbols = symbols.map((s: Ast) => { + return { + ...s, + children: s.children.filter((c: Ast) => c.attributes['dataisgeon']), + }; + }); + } + + const tier = symbols.length === 4 ? 4 : symbols.length === 2 ? 2 : 1; + + // get a grid according to the point's tier (planet, start, galaxy) + const grid = UNIT_GRIDS[tier]; + + // Move each symbol into it's new x/y position on a unit rectangle sized 256 by 256. + for (let i = 0; i < grid.length; i++) { + const positionTransform = toString(translate(grid[i].x, grid[i].y)); + if (symbols[i].attributes === undefined) { + symbols[i].attributes = {}; + } + symbols[i].attributes.transform = positionTransform; + } + + // Create a variable that will store a ratio used to scale the symbolsGroup to its final size driven primarily by props.size, or props.width fallback. + let resizeRatio; + + if (tier === 1) { + // If there is only 1 symbol being drawn + if (props.margin === true) { + // If this symbol will be drawn with a margin + resizeRatio = 0.5 * 0.8; + } else { + // If this symbol will be drawn without a margin + resizeRatio = 1; + } + } else { + // If the sigils is 2 symbols wide + if (props.margin === true) { + // If this symbol will be drawn with a margin + resizeRatio = 0.5 * 0.8; + } else { + // If this symbol will be drawn without a margin + resizeRatio = 0.5; + } + } + + // Calculate the size of each symbol - IE, for planets, there are four symbols. + const symbolSize = { + x: props.width * resizeRatio, + y: props.height * resizeRatio, + }; + + // Calculate the left and top margins that will be used to transform the symbolsGroup. + const marginPx = { + x: (props.width - TILEMAP[tier].x * symbolSize.x) / 2, + y: (props.height - TILEMAP[tier].y * symbolSize.y) / 2, + }; + + if (props.margin === false || props.icon === true) { + marginPx.x = 0; + if (props.icon !== true) { + marginPx.y = 0; + } + } + + // Calculate how much the symbolsGroups should change in scale. 128 is the unit size of the SVGs as drawn in their source file. + const symbolsGroupScale = symbolSize.x / 128; + + // First translate the symbols group to a centered x/y position, then scale the group to it's final size. + const scaleAndCenteringTransform = toString( + transform( + translate(marginPx.x, marginPx.y), + scale(symbolsGroupScale, symbolsGroupScale), + ), + ); + + // Create a SVG AST group and assign the transformation and child symbols to it. + const symbolsGroup = { + name: 'g', + type: '', + value: '', + attributes: { + transform: scaleAndCenteringTransform, + }, + children: symbols, + }; + + if (props.style === undefined) { + props.style = {}; + } + + if (props.style.width === undefined) { + props.style.width = `${props.width}px`; + } + + if (props.style.height === undefined) { + props.style.height = `${props.height}px`; + } + + const wrapped = { + name: 'svg', + type: '', + value: '', + attributes: { + style: { + // prevent bottom margin on svg tag + display: 'block', + ...props.style, + }, + viewBox: `0 0 ${props.width} ${props.height}`, + version: '1.1', + xmlns: 'http://www.w3.org/2000/svg', + class: props.class, + ...props.attributes, + }, + children: [ + // Background rectangle + { + name: 'rect', + type: '', + value: '', + attributes: { + fill: COLOR_CODES.BG, + width: `${props.width}px`, + height: `${props.height}px`, + x: 0 + 'px', + y: 0 + 'px', + }, + children: [], + }, + symbolsGroup, + ], + }; + + // Calculate a strokeWidth based on props.size + let strokeWidth; + + if (props.strokeScalingFunction) { + strokeWidth = props.strokeScalingFunction(props.size); + } else { + strokeWidth = props.width / 128 + 0.33; + } + + if (props.icon === true) { + strokeWidth = 0.8; + } + + // Recursively apply color and other style attributes. + const out = paint(wrapped, props.colors, strokeWidth); + + // If a renderer function has been provided, call this renderer with provided AST. If there is no renderer, return the AST. + return props.renderer === undefined ? out : props.renderer(out); +}; + +export { sigil, stringRenderer, reactRenderer, reactImageRenderer }; diff --git a/site/src/ui/sigil-ts/lib.ts b/site/src/ui/sigil-ts/lib.ts new file mode 100644 index 0000000..b27775b --- /dev/null +++ b/site/src/ui/sigil-ts/lib.ts @@ -0,0 +1,17 @@ +const deepClone = (v: any) => JSON.parse(JSON.stringify(v)); + +const chunkStr = (str: string, size: number) => { + const r = new RegExp(`.{1,${size}}`, 'g'); + return str.match(r); +}; + +const compose = (...fns: Array) => { + return fns.reduce((f, g) => (...xs: any) => { + const r = g(...xs); + return Array.isArray(r) ? f(...r) : f(r); + }); +}; + +const isUndefined = (v: any) => typeof v === 'undefined'; + +export { deepClone, chunkStr, compose, isUndefined }; diff --git a/site/src/ui/sigil-ts/reactImageRenderer.ts b/site/src/ui/sigil-ts/reactImageRenderer.ts new file mode 100644 index 0000000..f67025d --- /dev/null +++ b/site/src/ui/sigil-ts/reactImageRenderer.ts @@ -0,0 +1,24 @@ +import React from 'react'; +import stringRenderer from './stringRenderer'; +import { Ast } from './types'; + +const reactImageRenderer = (node: Ast) => { + let w; + let h; + + if (node.attributes.style) { + w = node.attributes.style.width || ''; + h = node.attributes.style.height || ''; + } + + return React.createElement('div', { + style: { + backgroundRepeat: 'no-repeat', + width: w, + height: h, + backgroundImage: `url(data:image/svg+xml;base64,${btoa(stringRenderer(node))})`, + }, + }); +}; + +export default reactImageRenderer; diff --git a/site/src/ui/sigil-ts/reactRenderer.ts b/site/src/ui/sigil-ts/reactRenderer.ts new file mode 100644 index 0000000..01b57c5 --- /dev/null +++ b/site/src/ui/sigil-ts/reactRenderer.ts @@ -0,0 +1,21 @@ +import * as React from 'react'; +import { Ast } from './types'; + +const toCamelCase = (s: string) => s.replace(/-([a-z])/g, (g) => g[1].toUpperCase()); + +const attributesToProps = (o: {}) => + Object.entries(o).reduce((a, [k, v]) => { + if (k === 'class') k = 'className'; + return { ...a, [`${toCamelCase(k)}`]: v }; + }, {}); + +const reactRenderer = (node: Ast, i: string): JSX.Element => { + if (i === undefined) i = ''; + return React.createElement( + node.name, + { ...attributesToProps(node.attributes), key: `${i}` }, + node.children.map((child, j) => reactRenderer(child, `${i}:${j}`)), + ); +}; + +export default reactRenderer; diff --git a/site/src/ui/sigil-ts/stringRenderer.ts b/site/src/ui/sigil-ts/stringRenderer.ts new file mode 100644 index 0000000..c70a0de --- /dev/null +++ b/site/src/ui/sigil-ts/stringRenderer.ts @@ -0,0 +1,10 @@ +// @ts-ignore +import { stringify } from 'svgson'; +import { Ast } from './types'; + +const stringRenderer = (ast: Ast) => { + if (ast.attributes.style !== undefined) delete ast.attributes.style; + return stringify(ast as any); +}; + +export default stringRenderer; diff --git a/site/src/ui/sigil-ts/types.ts b/site/src/ui/sigil-ts/types.ts new file mode 100644 index 0000000..06f0b57 --- /dev/null +++ b/site/src/ui/sigil-ts/types.ts @@ -0,0 +1,54 @@ +export type Attributes = { + style?: { + [key: string]: string; + }; + version?: string; + class?: string; + width?: string; + height?: string; + viewBox?: string; + fill?: string; + xmlns?: string; + id?: string; + 'clip-path'?: string; + d?: string; + stroke?: string; + 'stroke-width'?: string; + x1?: string; + x2?: string; + y2?: string; + 'stroke-linecap'?: string; + cx?: string; + cy?: string; + r?: string; + x?: string; + y?: string; + transform?: string; + 'vector-effect'?: string; + dataisgeon?: string; +}; + +export type Ast = { + name: string; + type: string; + value: string; + attributes: Attributes; + children: Ast[]; +}; + +export type Config = { + patp: string; + colors?: [string, string]; + attributes?: Attributes; + style?: { + [key: string]: string; + }; + class?: string; + size?: number; + width?: number; + height?: number; + margin?: boolean; + strokeScalingFunction?: Function; + renderer?: Function; + icon?: boolean; +}; diff --git a/site/src/ui/theme.tsx b/site/src/ui/theme.tsx new file mode 100644 index 0000000..9c76184 --- /dev/null +++ b/site/src/ui/theme.tsx @@ -0,0 +1,52 @@ +import Box from "@mui/material/Box"; +import { DarkMode, LightMode } from "@mui/icons-material"; +import { IconButton, IconButtonProps } from "@mui/material"; + +import { useColorScheme } from "@mui/material/styles"; +export function ThemeToggle() { + const { mode, systemMode, setMode } = useColorScheme(); + const handleClick = (event: React.MouseEvent) => { + const nmode = mode === "dark" ? "light" : "dark"; + setMode(nmode); + }; + if (!mode) { + return ( + ({ + verticalAlign: "bottom", + display: "inline-flex", + width: "2.25rem", + height: "2.25rem", + borderRadius: (theme.vars || theme).shape.borderRadius, + border: "1px solid", + borderColor: (theme.vars || theme).palette.divider, + })} + /> + ); + } + const resolvedMode = (systemMode || mode) as "light" | "dark"; + const icon = { + light: , + dark: , + }[resolvedMode]; + return ( + + {icon} + + ); +} + +export const scrollableStyle = { + overflowY: "auto", + overflowX: "hidden", + scrollbarWidth: "none", + "&::-webkit-scrollbar": { + display: "none", + }, +}; diff --git a/site/src/ui/theme/AppTheme.tsx b/site/src/ui/theme/AppTheme.tsx new file mode 100644 index 0000000..caa3c70 --- /dev/null +++ b/site/src/ui/theme/AppTheme.tsx @@ -0,0 +1,57 @@ +import * as React from 'react'; +import { ThemeProvider, createTheme, responsiveFontSizes } from '@mui/material/styles'; +import type { ThemeOptions } from '@mui/material/styles'; +import { inputsCustomizations } from './customizations/inputs'; +import { dataDisplayCustomizations } from './customizations/dataDisplay'; +import { feedbackCustomizations } from './customizations/feedback'; +import { navigationCustomizations } from './customizations/navigation'; +import { surfacesCustomizations } from './customizations/surfaces'; +import { colorSchemes, typography, shadows, shape } from './themePrimitives'; + +interface AppThemeProps { + children: React.ReactNode; + /** + * This is for the docs site. You can ignore it or remove it. + */ + disableCustomTheme?: boolean; + themeComponents?: ThemeOptions['components']; +} + +export default function AppTheme({ + children, + disableCustomTheme, + themeComponents, +}: AppThemeProps) { + // Mmm hope this works + let t1 = createTheme({ + // For more details about CSS variables configuration, see https://mui.com/material-ui/customization/css-theme-variables/configuration/ + cssVariables: { + colorSchemeSelector: 'data-mui-color-scheme', + cssVarPrefix: 'template', + }, + colorSchemes, // Recently added in v6 for building light & dark mode app, see https://mui.com/material-ui/customization/palette/#color-schemes + typography, + shadows, + shape, + components: { + ...inputsCustomizations, + ...dataDisplayCustomizations, + ...feedbackCustomizations, + ...navigationCustomizations, + ...surfacesCustomizations, + ...themeComponents, + }, + }); + t1 = responsiveFontSizes(t1, {}); + const theme = React.useMemo(() => { + return disableCustomTheme ? {} : t1; + }, [disableCustomTheme, themeComponents]); + if (disableCustomTheme) { + return {children}; + } + return ( + + {children} + + ); +} diff --git a/site/src/ui/theme/ColorModeIconDropdown.tsx b/site/src/ui/theme/ColorModeIconDropdown.tsx new file mode 100644 index 0000000..db0f9c4 --- /dev/null +++ b/site/src/ui/theme/ColorModeIconDropdown.tsx @@ -0,0 +1,87 @@ +import * as React from "react"; +import DarkModeIcon from "@mui/icons-material/DarkModeOutlined"; +import LightModeIcon from "@mui/icons-material/LightModeOutlined"; +import Box from "@mui/material/Box"; +import IconButton from "@mui/material/IconButton"; +import Menu from "@mui/material/Menu"; +import MenuItem from "@mui/material/MenuItem"; +import { useColorScheme } from "@mui/material/styles"; + +export default function ColorModeIconDropdown() { + const { mode, systemMode, setMode } = useColorScheme(); + const [anchorEl, setAnchorEl] = React.useState(null); + const open = Boolean(anchorEl); + const handleClick = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + const handleClose = () => { + setAnchorEl(null); + }; + const handleMode = (targetMode: "system" | "light" | "dark") => () => { + setMode(targetMode); + handleClose(); + }; + if (!mode) { + return ( + ({ + verticalAlign: "bottom", + display: "inline-flex", + width: "2.25rem", + height: "2.25rem", + borderRadius: (theme.cssVariables || theme).shape.borderRadius, + border: "1px solid", + borderColor: (theme.cssVariables || theme).palette.divider, + })} + /> + ); + } + const resolvedMode = (systemMode || mode) as "light" | "dark"; + const icon = { + light: , + dark: , + }[resolvedMode]; + return ( + + + {icon} + + + + System + + + Light + + + Dark + + + + ); +} diff --git a/site/src/ui/theme/ColorModeSelect.tsx b/site/src/ui/theme/ColorModeSelect.tsx new file mode 100644 index 0000000..4bb20df --- /dev/null +++ b/site/src/ui/theme/ColorModeSelect.tsx @@ -0,0 +1,26 @@ +import * as React from 'react'; +import { useColorScheme } from '@mui/material/styles'; +import MenuItem from '@mui/material/MenuItem'; +import Select, { SelectProps } from '@mui/material/Select'; + +export default function ColorModeSelect(props: SelectProps) { + const { mode, setMode } = useColorScheme(); + if (!mode) { + return null; + } + return ( + + ); +} diff --git a/site/src/ui/theme/customizations/dataDisplay.tsx b/site/src/ui/theme/customizations/dataDisplay.tsx new file mode 100644 index 0000000..3534d55 --- /dev/null +++ b/site/src/ui/theme/customizations/dataDisplay.tsx @@ -0,0 +1,233 @@ +import { Theme, alpha, Components } from "@mui/material/styles"; +import { svgIconClasses } from "@mui/material/SvgIcon"; +import { typographyClasses } from "@mui/material/Typography"; +import { buttonBaseClasses } from "@mui/material/ButtonBase"; +import { chipClasses } from "@mui/material/Chip"; +import { iconButtonClasses } from "@mui/material/IconButton"; +import { gray, red, green } from "../themePrimitives"; + +/* eslint-disable import/prefer-default-export */ +export const dataDisplayCustomizations: Components = { + MuiList: { + styleOverrides: { + root: { + padding: "8px", + display: "flex", + flexDirection: "column", + gap: 0, + }, + }, + }, + MuiListItem: { + styleOverrides: { + root: ({ theme }) => ({ + [`& .${svgIconClasses.root}`]: { + width: "1rem", + height: "1rem", + color: (theme.cssVariables || theme).palette.text.secondary, + }, + [`& .${typographyClasses.root}`]: { + fontWeight: 500, + }, + [`& .${buttonBaseClasses.root}`]: { + display: "flex", + gap: 8, + padding: "2px 8px", + borderRadius: (theme.cssVariables || theme).shape.borderRadius, + opacity: 0.7, + "&.Mui-selected": { + opacity: 1, + backgroundColor: alpha(theme.palette.action.selected, 0.3), + [`& .${svgIconClasses.root}`]: { + color: (theme.cssVariables || theme).palette.text.primary, + }, + "&:focus-visible": { + backgroundColor: alpha(theme.palette.action.selected, 0.3), + }, + "&:hover": { + backgroundColor: alpha(theme.palette.action.selected, 0.5), + }, + }, + "&:focus-visible": { + backgroundColor: "transparent", + }, + }, + }), + }, + }, + MuiListItemText: { + styleOverrides: { + primary: ({ theme }) => ({ + fontSize: theme.typography.body2.fontSize, + fontWeight: 500, + lineHeight: theme.typography.body2.lineHeight, + }), + secondary: ({ theme }) => ({ + fontSize: theme.typography.caption.fontSize, + lineHeight: theme.typography.caption.lineHeight, + }), + }, + }, + MuiListSubheader: { + styleOverrides: { + root: ({ theme }) => ({ + backgroundColor: "transparent", + padding: "4px 8px", + fontSize: theme.typography.caption.fontSize, + fontWeight: 500, + lineHeight: theme.typography.caption.lineHeight, + }), + }, + }, + MuiListItemIcon: { + styleOverrides: { + root: { + minWidth: 0, + }, + }, + }, + MuiChip: { + defaultProps: { + size: "small", + }, + styleOverrides: { + root: ({ theme }) => ({ + border: "1px solid", + borderRadius: "999px", + [`& .${chipClasses.label}`]: { + fontWeight: 600, + }, + variants: [ + { + props: { + color: "default", + }, + style: { + borderColor: gray[200], + backgroundColor: gray[100], + [`& .${chipClasses.label}`]: { + color: gray[500], + }, + [`& .${chipClasses.icon}`]: { + color: gray[500], + }, + ...theme.applyStyles("dark", { + borderColor: gray[700], + backgroundColor: gray[800], + [`& .${chipClasses.label}`]: { + color: gray[300], + }, + [`& .${chipClasses.icon}`]: { + color: gray[300], + }, + }), + }, + }, + { + props: { + color: "success", + }, + style: { + borderColor: green[200], + backgroundColor: green[50], + [`& .${chipClasses.label}`]: { + color: green[500], + }, + [`& .${chipClasses.icon}`]: { + color: green[500], + }, + ...theme.applyStyles("dark", { + borderColor: green[800], + backgroundColor: green[900], + [`& .${chipClasses.label}`]: { + color: green[300], + }, + [`& .${chipClasses.icon}`]: { + color: green[300], + }, + }), + }, + }, + { + props: { + color: "error", + }, + style: { + borderColor: red[100], + backgroundColor: red[50], + [`& .${chipClasses.label}`]: { + color: red[500], + }, + [`& .${chipClasses.icon}`]: { + color: red[500], + }, + ...theme.applyStyles("dark", { + borderColor: red[800], + backgroundColor: red[900], + [`& .${chipClasses.label}`]: { + color: red[200], + }, + [`& .${chipClasses.icon}`]: { + color: red[300], + }, + }), + }, + }, + { + props: { size: "small" }, + style: { + maxHeight: 20, + [`& .${chipClasses.label}`]: { + fontSize: theme.typography.caption.fontSize, + }, + [`& .${svgIconClasses.root}`]: { + fontSize: theme.typography.caption.fontSize, + }, + }, + }, + { + props: { size: "medium" }, + style: { + [`& .${chipClasses.label}`]: { + fontSize: theme.typography.caption.fontSize, + }, + }, + }, + ], + }), + }, + }, + MuiTablePagination: { + styleOverrides: { + actions: { + display: "flex", + gap: 8, + marginRight: 6, + [`& .${iconButtonClasses.root}`]: { + minWidth: 0, + width: 36, + height: 36, + }, + }, + }, + }, + MuiIcon: { + defaultProps: { + fontSize: "small", + }, + styleOverrides: { + root: { + variants: [ + { + props: { + fontSize: "small", + }, + style: { + fontSize: "1rem", + }, + }, + ], + }, + }, + }, +}; diff --git a/site/src/ui/theme/customizations/feedback.tsx b/site/src/ui/theme/customizations/feedback.tsx new file mode 100644 index 0000000..4548b4a --- /dev/null +++ b/site/src/ui/theme/customizations/feedback.tsx @@ -0,0 +1,46 @@ +import { Theme, alpha, Components } from "@mui/material/styles"; +import { gray, orange } from "../themePrimitives"; + +/* eslint-disable import/prefer-default-export */ +export const feedbackCustomizations: Components = { + MuiAlert: { + styleOverrides: { + root: ({ theme }) => ({ + borderRadius: 10, + backgroundColor: orange[100], + color: (theme.cssVariables || theme).palette.text.primary, + border: `1px solid ${alpha(orange[300], 0.5)}`, + "& .MuiAlert-icon": { + color: orange[500], + }, + ...theme.applyStyles("dark", { + backgroundColor: `${alpha(orange[900], 0.5)}`, + border: `1px solid ${alpha(orange[800], 0.5)}`, + }), + }), + }, + }, + MuiDialog: { + styleOverrides: { + root: ({ theme }) => ({ + "& .MuiDialog-paper": { + borderRadius: "10px", + border: "1px solid", + borderColor: (theme.cssVariables || theme).palette.divider, + }, + }), + }, + }, + MuiLinearProgress: { + styleOverrides: { + root: ({ theme }) => ({ + height: 8, + borderRadius: 8, + backgroundColor: gray[200], + ...theme.applyStyles("dark", { + backgroundColor: gray[800], + }), + }), + }, + }, +}; diff --git a/site/src/ui/theme/customizations/inputs.tsx b/site/src/ui/theme/customizations/inputs.tsx new file mode 100644 index 0000000..f301695 --- /dev/null +++ b/site/src/ui/theme/customizations/inputs.tsx @@ -0,0 +1,449 @@ +import * as React from "react"; +import { alpha, Theme, Components } from "@mui/material/styles"; +import { outlinedInputClasses } from "@mui/material/OutlinedInput"; +import { svgIconClasses } from "@mui/material/SvgIcon"; +import { toggleButtonGroupClasses } from "@mui/material/ToggleButtonGroup"; +import { toggleButtonClasses } from "@mui/material/ToggleButton"; +import CheckBoxOutlineBlankRoundedIcon from "@mui/icons-material/CheckBoxOutlineBlankRounded"; +import CheckRoundedIcon from "@mui/icons-material/CheckRounded"; +import RemoveRoundedIcon from "@mui/icons-material/RemoveRounded"; +import { gray, brand } from "../themePrimitives"; + +/* eslint-disable import/prefer-default-export */ +export const inputsCustomizations: Components = { + MuiButtonBase: { + defaultProps: { + disableTouchRipple: true, + disableRipple: true, + }, + styleOverrides: { + root: ({ theme }) => ({ + boxSizing: "border-box", + transition: "all 100ms ease-in", + "&:focus-visible": { + outline: `3px solid ${alpha(theme.palette.primary.main, 0.5)}`, + outlineOffset: "2px", + }, + }), + }, + }, + MuiButton: { + styleOverrides: { + root: ({ theme }) => ({ + boxShadow: "none", + // borderRadius: (theme.cssVariables || theme).shape.borderRadius, + borderRadius: "none", + textTransform: "none", + variants: [ + { + props: { + size: "small", + }, + style: { + height: "2.25rem", + padding: "8px 12px", + }, + }, + { + props: { + size: "medium", + }, + style: { + height: "2.5rem", // 40px + }, + }, + { + props: { + color: "primary", + variant: "contained", + }, + style: { + color: "white", + backgroundColor: gray[900], + backgroundImage: `linear-gradient(to bottom, ${gray[700]}, ${gray[800]})`, + boxShadow: `inset 0 1px 0 ${gray[600]}, inset 0 -1px 0 1px hsl(220, 0%, 0%)`, + border: `1px solid ${gray[700]}`, + "&:hover": { + backgroundImage: "none", + backgroundColor: gray[700], + boxShadow: "none", + }, + "&:active": { + backgroundColor: gray[800], + }, + ...theme.applyStyles("dark", { + color: "black", + backgroundColor: gray[50], + backgroundImage: `linear-gradient(to bottom, ${gray[100]}, ${gray[50]})`, + boxShadow: "inset 0 -1px 0 hsl(220, 30%, 80%)", + border: `1px solid ${gray[50]}`, + "&:hover": { + backgroundImage: "none", + backgroundColor: gray[300], + boxShadow: "none", + }, + "&:active": { + backgroundColor: gray[400], + }, + }), + }, + }, + { + props: { + color: "secondary", + variant: "contained", + }, + style: { + color: "white", + backgroundColor: brand[300], + backgroundImage: `linear-gradient(to bottom, ${alpha(brand[400], 0.8)}, ${brand[500]})`, + boxShadow: `inset 0 2px 0 ${alpha(brand[200], 0.2)}, inset 0 -2px 0 ${alpha(brand[700], 0.4)}`, + border: `1px solid ${brand[500]}`, + "&:hover": { + backgroundColor: brand[700], + boxShadow: "none", + }, + "&:active": { + backgroundColor: brand[700], + backgroundImage: "none", + }, + }, + }, + { + props: { + variant: "outlined", + }, + style: { + color: (theme.cssVariables || theme).palette.text.primary, + border: "1px solid", + borderColor: gray[200], + backgroundColor: alpha(gray[50], 0.3), + "&:hover": { + backgroundColor: gray[100], + borderColor: gray[300], + }, + "&:active": { + backgroundColor: gray[200], + }, + ...theme.applyStyles("dark", { + backgroundColor: gray[800], + borderColor: gray[700], + + "&:hover": { + backgroundColor: gray[900], + borderColor: gray[600], + }, + "&:active": { + backgroundColor: gray[900], + }, + }), + }, + }, + { + props: { + color: "secondary", + variant: "outlined", + }, + style: { + color: brand[700], + border: "1px solid", + borderColor: brand[200], + backgroundColor: brand[50], + "&:hover": { + backgroundColor: brand[100], + borderColor: brand[400], + }, + "&:active": { + backgroundColor: alpha(brand[200], 0.7), + }, + ...theme.applyStyles("dark", { + color: brand[50], + border: "1px solid", + borderColor: brand[900], + backgroundColor: alpha(brand[900], 0.3), + "&:hover": { + borderColor: brand[700], + backgroundColor: alpha(brand[900], 0.6), + }, + "&:active": { + backgroundColor: alpha(brand[900], 0.5), + }, + }), + }, + }, + { + props: { + variant: "text", + }, + style: { + color: gray[600], + "&:hover": { + backgroundColor: gray[100], + }, + "&:active": { + backgroundColor: gray[200], + }, + ...theme.applyStyles("dark", { + color: gray[50], + "&:hover": { + backgroundColor: gray[700], + }, + "&:active": { + backgroundColor: alpha(gray[700], 0.7), + }, + }), + }, + }, + { + props: { + color: "secondary", + variant: "text", + }, + style: { + color: brand[700], + "&:hover": { + backgroundColor: alpha(brand[100], 0.5), + }, + "&:active": { + backgroundColor: alpha(brand[200], 0.7), + }, + ...theme.applyStyles("dark", { + color: brand[100], + "&:hover": { + backgroundColor: alpha(brand[900], 0.5), + }, + "&:active": { + backgroundColor: alpha(brand[900], 0.3), + }, + }), + }, + }, + ], + }), + }, + }, + MuiIconButton: { + styleOverrides: { + root: ({ theme }) => ({ + boxShadow: "none", + borderRadius: (theme.cssVariables || theme).shape.borderRadius, + textTransform: "none", + fontWeight: theme.typography.fontWeightMedium, + letterSpacing: 0, + color: (theme.cssVariables || theme).palette.text.primary, + border: "1px solid ", + borderColor: gray[200], + backgroundColor: alpha(gray[50], 0.3), + "&:hover": { + backgroundColor: gray[100], + borderColor: gray[300], + }, + "&:active": { + backgroundColor: gray[200], + }, + ...theme.applyStyles("dark", { + backgroundColor: gray[800], + borderColor: gray[700], + "&:hover": { + backgroundColor: gray[900], + borderColor: gray[600], + }, + "&:active": { + backgroundColor: gray[900], + }, + }), + variants: [ + { + props: { + size: "small", + }, + style: { + width: "2.25rem", + height: "2.25rem", + padding: "0.25rem", + [`& .${svgIconClasses.root}`]: { fontSize: "1rem" }, + }, + }, + { + props: { + size: "medium", + }, + style: { + width: "2.5rem", + height: "2.5rem", + }, + }, + ], + }), + }, + }, + MuiToggleButtonGroup: { + styleOverrides: { + root: ({ theme }) => ({ + borderRadius: "10px", + boxShadow: `0 4px 16px ${alpha(gray[400], 0.2)}`, + [`& .${toggleButtonGroupClasses.selected}`]: { + color: brand[500], + }, + ...theme.applyStyles("dark", { + [`& .${toggleButtonGroupClasses.selected}`]: { + color: "#fff", + }, + boxShadow: `0 4px 16px ${alpha(brand[700], 0.5)}`, + }), + }), + }, + }, + MuiToggleButton: { + styleOverrides: { + root: ({ theme }) => ({ + padding: "12px 16px", + textTransform: "none", + borderRadius: "10px", + fontWeight: 500, + ...theme.applyStyles("dark", { + color: gray[400], + boxShadow: "0 4px 16px rgba(0, 0, 0, 0.5)", + [`&.${toggleButtonClasses.selected}`]: { + color: brand[300], + }, + }), + }), + }, + }, + MuiCheckbox: { + defaultProps: { + disableRipple: true, + icon: ( + + ), + checkedIcon: , + indeterminateIcon: , + }, + styleOverrides: { + root: ({ theme }) => ({ + margin: 10, + height: 16, + width: 16, + borderRadius: 5, + border: "1px solid ", + borderColor: alpha(gray[300], 0.8), + boxShadow: "0 0 0 1.5px hsla(210, 0%, 0%, 0.04) inset", + backgroundColor: alpha(gray[100], 0.4), + transition: "border-color, background-color, 120ms ease-in", + "&:hover": { + borderColor: brand[300], + }, + "&.Mui-focusVisible": { + outline: `3px solid ${alpha(brand[500], 0.5)}`, + outlineOffset: "2px", + borderColor: brand[400], + }, + "&.Mui-checked": { + color: "white", + backgroundColor: brand[500], + borderColor: brand[500], + boxShadow: `none`, + "&:hover": { + backgroundColor: brand[600], + }, + }, + ...theme.applyStyles("dark", { + borderColor: alpha(gray[700], 0.8), + boxShadow: "0 0 0 1.5px hsl(210, 0%, 0%) inset", + backgroundColor: alpha(gray[900], 0.8), + "&:hover": { + borderColor: brand[300], + }, + "&.Mui-focusVisible": { + borderColor: brand[400], + outline: `3px solid ${alpha(brand[500], 0.5)}`, + outlineOffset: "2px", + }, + }), + }), + }, + }, + MuiInputBase: { + styleOverrides: { + root: { + border: "none", + }, + input: { + "&::placeholder": { + opacity: 0.7, + color: gray[500], + }, + }, + }, + }, + MuiOutlinedInput: { + styleOverrides: { + input: { + padding: 0, + }, + root: ({ theme }) => ({ + padding: "8px 12px", + color: (theme.cssVariables || theme).palette.text.primary, + borderRadius: (theme.cssVariables || theme).shape.borderRadius, + border: `1px solid ${(theme.cssVariables || theme).palette.divider}`, + backgroundColor: (theme.cssVariables || theme).palette.background + .default, + transition: "border 120ms ease-in", + "&:hover": { + borderColor: gray[400], + }, + [`&.${outlinedInputClasses.focused}`]: { + outline: `3px solid ${alpha(brand[500], 0.5)}`, + borderColor: brand[400], + }, + ...theme.applyStyles("dark", { + "&:hover": { + borderColor: gray[500], + }, + }), + variants: [ + { + props: { + size: "small", + }, + style: { + height: "2.25rem", + }, + }, + { + props: { + size: "medium", + }, + style: { + height: "2.5rem", + }, + }, + ], + }), + notchedOutline: { + border: "none", + }, + }, + }, + MuiInputAdornment: { + styleOverrides: { + root: ({ theme }) => ({ + color: (theme.cssVariables || theme).palette.grey[500], + ...theme.applyStyles("dark", { + color: (theme.cssVariables || theme).palette.grey[400], + }), + }), + }, + }, + MuiFormLabel: { + styleOverrides: { + root: ({ theme }) => ({ + typography: theme.typography.caption, + marginBottom: 8, + }), + }, + }, +}; diff --git a/site/src/ui/theme/customizations/navigation.tsx b/site/src/ui/theme/customizations/navigation.tsx new file mode 100644 index 0000000..0b4632d --- /dev/null +++ b/site/src/ui/theme/customizations/navigation.tsx @@ -0,0 +1,285 @@ +import * as React from "react"; +import { Theme, alpha, Components } from "@mui/material/styles"; +import { SvgIconProps } from "@mui/material/SvgIcon"; +import { buttonBaseClasses } from "@mui/material/ButtonBase"; +import { dividerClasses } from "@mui/material/Divider"; +import { menuItemClasses } from "@mui/material/MenuItem"; +import { selectClasses } from "@mui/material/Select"; +import { tabClasses } from "@mui/material/Tab"; +import UnfoldMoreRoundedIcon from "@mui/icons-material/UnfoldMoreRounded"; +import { gray, brand } from "../themePrimitives"; + +/* eslint-disable import/prefer-default-export */ +export const navigationCustomizations: Components = { + MuiMenuItem: { + styleOverrides: { + root: ({ theme }) => ({ + borderRadius: (theme.cssVariables || theme).shape.borderRadius, + padding: "6px 8px", + [`&.${menuItemClasses.focusVisible}`]: { + backgroundColor: "transparent", + }, + [`&.${menuItemClasses.selected}`]: { + [`&.${menuItemClasses.focusVisible}`]: { + backgroundColor: alpha(theme.palette.action.selected, 0.3), + }, + }, + }), + }, + }, + MuiMenu: { + styleOverrides: { + list: { + gap: "0px", + [`&.${dividerClasses.root}`]: { + margin: "0 -8px", + }, + }, + paper: ({ theme }) => ({ + marginTop: "4px", + borderRadius: (theme.cssVariables || theme).shape.borderRadius, + border: `1px solid ${(theme.cssVariables || theme).palette.divider}`, + backgroundImage: "none", + background: "hsl(0, 0%, 100%)", + boxShadow: + "hsla(220, 30%, 5%, 0.07) 0px 4px 16px 0px, hsla(220, 25%, 10%, 0.07) 0px 8px 16px -5px", + [`& .${buttonBaseClasses.root}`]: { + "&.Mui-selected": { + backgroundColor: alpha(theme.palette.action.selected, 0.3), + }, + }, + ...theme.applyStyles("dark", { + background: gray[900], + boxShadow: + "hsla(220, 30%, 5%, 0.7) 0px 4px 16px 0px, hsla(220, 25%, 10%, 0.8) 0px 8px 16px -5px", + }), + }), + }, + }, + MuiSelect: { + defaultProps: { + IconComponent: React.forwardRef( + (props, ref) => ( + + ), + ), + }, + styleOverrides: { + root: ({ theme }) => ({ + borderRadius: (theme.cssVariables || theme).shape.borderRadius, + border: "1px solid", + borderColor: gray[200], + backgroundColor: (theme.cssVariables || theme).palette.background.paper, + boxShadow: `inset 0 1px 0 1px hsla(220, 0%, 100%, 0.6), inset 0 -1px 0 1px hsla(220, 35%, 90%, 0.5)`, + "&:hover": { + borderColor: gray[300], + backgroundColor: (theme.cssVariables || theme).palette.background + .paper, + boxShadow: "none", + }, + [`&.${selectClasses.focused}`]: { + outlineOffset: 0, + borderColor: gray[400], + }, + "&:before, &:after": { + display: "none", + }, + + ...theme.applyStyles("dark", { + borderRadius: (theme.cssVariables || theme).shape.borderRadius, + borderColor: gray[700], + backgroundColor: (theme.cssVariables || theme).palette.background + .paper, + boxShadow: `inset 0 1px 0 1px ${alpha(gray[700], 0.15)}, inset 0 -1px 0 1px hsla(220, 0%, 0%, 0.7)`, + "&:hover": { + borderColor: alpha(gray[700], 0.7), + backgroundColor: (theme.cssVariables || theme).palette.background + .paper, + boxShadow: "none", + }, + [`&.${selectClasses.focused}`]: { + outlineOffset: 0, + borderColor: gray[900], + }, + "&:before, &:after": { + display: "none", + }, + }), + }), + select: ({ theme }) => ({ + display: "flex", + alignItems: "center", + ...theme.applyStyles("dark", { + display: "flex", + alignItems: "center", + "&:focus-visible": { + backgroundColor: gray[900], + }, + }), + }), + }, + }, + MuiLink: { + defaultProps: { + underline: "none", + }, + styleOverrides: { + root: ({ theme }) => ({ + color: (theme.cssVariables || theme).palette.text.primary, + fontWeight: 500, + position: "relative", + textDecoration: "none", + width: "fit-content", + "&::before": { + content: '""', + position: "absolute", + width: "100%", + height: "1px", + bottom: 0, + left: 0, + backgroundColor: (theme.cssVariables || theme).palette.text.secondary, + opacity: 0.3, + transition: "width 0.3s ease, opacity 0.3s ease", + }, + "&:hover::before": { + width: 0, + }, + "&:focus-visible": { + outline: `3px solid ${alpha(brand[500], 0.5)}`, + outlineOffset: "4px", + borderRadius: "2px", + }, + }), + }, + }, + MuiDrawer: { + styleOverrides: { + paper: ({ theme }) => ({ + backgroundColor: (theme.cssVariables || theme).palette.background + .default, + }), + }, + }, + MuiPaginationItem: { + styleOverrides: { + root: ({ theme }) => ({ + "&.Mui-selected": { + color: "white", + backgroundColor: (theme.cssVariables || theme).palette.grey[900], + }, + ...theme.applyStyles("dark", { + "&.Mui-selected": { + color: "black", + backgroundColor: (theme.cssVariables || theme).palette.grey[50], + }, + }), + }), + }, + }, + MuiTabs: { + styleOverrides: { + root: { minHeight: "fit-content" }, + indicator: ({ theme }) => ({ + backgroundColor: (theme.cssVariables || theme).palette.grey[800], + ...theme.applyStyles("dark", { + backgroundColor: (theme.cssVariables || theme).palette.grey[200], + }), + }), + }, + }, + MuiTab: { + styleOverrides: { + root: ({ theme }) => ({ + padding: "6px 8px", + marginBottom: "8px", + textTransform: "none", + minWidth: "fit-content", + minHeight: "fit-content", + color: (theme.cssVariables || theme).palette.text.secondary, + borderRadius: (theme.cssVariables || theme).shape.borderRadius, + border: "1px solid", + borderColor: "transparent", + ":hover": { + color: (theme.cssVariables || theme).palette.text.primary, + backgroundColor: gray[100], + borderColor: gray[200], + }, + [`&.${tabClasses.selected}`]: { + color: gray[900], + }, + ...theme.applyStyles("dark", { + ":hover": { + color: (theme.cssVariables || theme).palette.text.primary, + backgroundColor: gray[800], + borderColor: gray[700], + }, + [`&.${tabClasses.selected}`]: { + color: "#fff", + }, + }), + }), + }, + }, + MuiStepConnector: { + styleOverrides: { + line: ({ theme }) => ({ + borderTop: "1px solid", + borderColor: (theme.cssVariables || theme).palette.divider, + flex: 1, + borderRadius: "99px", + }), + }, + }, + MuiStepIcon: { + styleOverrides: { + root: ({ theme }) => ({ + color: "transparent", + border: `1px solid ${gray[400]}`, + width: 12, + height: 12, + borderRadius: "50%", + "& text": { + display: "none", + }, + "&.Mui-active": { + border: "none", + color: (theme.cssVariables || theme).palette.primary.main, + }, + "&.Mui-completed": { + border: "none", + color: (theme.cssVariables || theme).palette.success.main, + }, + ...theme.applyStyles("dark", { + border: `1px solid ${gray[700]}`, + "&.Mui-active": { + border: "none", + color: (theme.cssVariables || theme).palette.primary.light, + }, + "&.Mui-completed": { + border: "none", + color: (theme.cssVariables || theme).palette.success.light, + }, + }), + variants: [ + { + props: { completed: true }, + style: { + width: 12, + height: 12, + }, + }, + ], + }), + }, + }, + MuiStepLabel: { + styleOverrides: { + label: ({ theme }) => ({ + "&.Mui-completed": { + opacity: 0.6, + ...theme.applyStyles("dark", { opacity: 0.5 }), + }, + }), + }, + }, +}; diff --git a/site/src/ui/theme/customizations/surfaces.ts b/site/src/ui/theme/customizations/surfaces.ts new file mode 100644 index 0000000..2d4be8a --- /dev/null +++ b/site/src/ui/theme/customizations/surfaces.ts @@ -0,0 +1,117 @@ +import { alpha, Theme, Components } from "@mui/material/styles"; +import { gray } from "../themePrimitives"; + +/* eslint-disable import/prefer-default-export */ +export const surfacesCustomizations: Components = { + MuiAccordion: { + defaultProps: { + elevation: 0, + disableGutters: true, + }, + styleOverrides: { + root: ({ theme }) => ({ + padding: 4, + overflow: "clip", + backgroundColor: (theme.cssVariables || theme).palette.background + .default, + border: "1px solid", + borderColor: (theme.cssVariables || theme).palette.divider, + ":before": { + backgroundColor: "transparent", + }, + "&:not(:last-of-type)": { + borderBottom: "none", + }, + "&:first-of-type": { + borderTopLeftRadius: (theme.cssVariables || theme).shape.borderRadius, + borderTopRightRadius: (theme.cssVariables || theme).shape + .borderRadius, + }, + "&:last-of-type": { + borderBottomLeftRadius: (theme.cssVariables || theme).shape + .borderRadius, + borderBottomRightRadius: (theme.cssVariables || theme).shape + .borderRadius, + }, + }), + }, + }, + MuiAccordionSummary: { + styleOverrides: { + root: ({ theme }) => ({ + border: "none", + borderRadius: 8, + "&:hover": { backgroundColor: gray[50] }, + "&:focus-visible": { backgroundColor: "transparent" }, + ...theme.applyStyles("dark", { + "&:hover": { backgroundColor: gray[800] }, + }), + }), + }, + }, + MuiAccordionDetails: { + styleOverrides: { + root: { mb: 20, border: "none" }, + }, + }, + MuiPaper: { + defaultProps: { + elevation: 0, + }, + }, + MuiCard: { + styleOverrides: { + root: ({ theme }) => { + return { + padding: 16, + gap: 16, + transition: "all 100ms ease", + backgroundColor: gray[50], + borderRadius: (theme.cssVariables || theme).shape.borderRadius, + border: `1px solid ${(theme.cssVariables || theme).palette.divider}`, + boxShadow: "none", + ...theme.applyStyles("dark", { + backgroundColor: gray[800], + }), + variants: [ + { + props: { + variant: "outlined", + }, + style: { + border: `1px solid ${(theme.cssVariables || theme).palette.divider}`, + boxShadow: "none", + background: "hsl(0, 0%, 100%)", + ...theme.applyStyles("dark", { + background: alpha(gray[900], 0.4), + }), + }, + }, + ], + }; + }, + }, + }, + MuiCardContent: { + styleOverrides: { + root: { + padding: 0, + "&:last-child": { paddingBottom: 0 }, + }, + }, + }, + MuiCardHeader: { + styleOverrides: { + root: { + padding: 0, + }, + }, + }, + MuiCardActions: { + styleOverrides: { + root: { + padding: 0, + }, + }, + }, +}; diff --git a/site/src/ui/theme/themePrimitives.ts b/site/src/ui/theme/themePrimitives.ts new file mode 100644 index 0000000..b9b8a04 --- /dev/null +++ b/site/src/ui/theme/themePrimitives.ts @@ -0,0 +1,399 @@ +import { createTheme, alpha, PaletteMode, Shadows } from '@mui/material/styles'; + +declare module '@mui/material/Paper' { + interface PaperPropsVariantOverrides { + highlighted: true; + } +} +declare module '@mui/material/styles/createPalette' { + interface ColorRange { + 50: string; + 100: string; + 200: string; + 300: string; + 400: string; + 500: string; + 600: string; + 700: string; + 800: string; + 900: string; + } + + interface PaletteColor extends ColorRange {} + + interface Palette { + baseShadow: string; + } +} + +const defaultTheme = createTheme(); + +const customShadows: Shadows = [...defaultTheme.shadows]; + +export const brand = { + 50: 'hsl(210, 100%, 95%)', + 100: 'hsl(210, 100%, 92%)', + 200: 'hsl(210, 100%, 80%)', + 300: 'hsl(210, 100%, 65%)', + 400: 'hsl(210, 98%, 48%)', + 500: 'hsl(210, 98%, 42%)', + 600: 'hsl(210, 98%, 55%)', + 700: 'hsl(210, 100%, 35%)', + 800: 'hsl(210, 100%, 16%)', + 900: 'hsl(210, 100%, 21%)', +}; + +export const gray = { + 50: 'hsl(220, 35%, 97%)', + 100: 'hsl(220, 30%, 94%)', + 200: 'hsl(220, 20%, 88%)', + 300: 'hsl(220, 20%, 80%)', + 400: 'hsl(220, 20%, 65%)', + 500: 'hsl(220, 20%, 42%)', + 600: 'hsl(220, 20%, 35%)', + 700: 'hsl(220, 20%, 25%)', + 800: 'hsl(220, 30%, 6%)', + 900: 'hsl(220, 35%, 3%)', +}; + +export const green = { + 50: 'hsl(120, 80%, 98%)', + 100: 'hsl(120, 75%, 94%)', + 200: 'hsl(120, 75%, 87%)', + 300: 'hsl(120, 61%, 77%)', + 400: 'hsl(120, 44%, 53%)', + 500: 'hsl(120, 59%, 30%)', + 600: 'hsl(120, 70%, 25%)', + 700: 'hsl(120, 75%, 16%)', + 800: 'hsl(120, 84%, 10%)', + 900: 'hsl(120, 87%, 6%)', +}; + +export const orange = { + 50: 'hsl(45, 100%, 97%)', + 100: 'hsl(45, 92%, 90%)', + 200: 'hsl(45, 94%, 80%)', + 300: 'hsl(45, 90%, 65%)', + 400: 'hsl(45, 90%, 40%)', + 500: 'hsl(45, 90%, 35%)', + 600: 'hsl(45, 91%, 25%)', + 700: 'hsl(45, 94%, 20%)', + 800: 'hsl(45, 95%, 16%)', + 900: 'hsl(45, 93%, 12%)', +}; + +export const red = { + 50: 'hsl(0, 100%, 97%)', + 100: 'hsl(0, 92%, 90%)', + 200: 'hsl(0, 94%, 80%)', + 300: 'hsl(0, 90%, 65%)', + 400: 'hsl(0, 90%, 40%)', + 500: 'hsl(0, 90%, 30%)', + 600: 'hsl(0, 91%, 25%)', + 700: 'hsl(0, 94%, 18%)', + 800: 'hsl(0, 95%, 12%)', + 900: 'hsl(0, 93%, 6%)', +}; + +export const getDesignTokens = (mode: PaletteMode) => { + customShadows[1] = + mode === 'dark' + ? 'hsla(220, 30%, 5%, 0.7) 0px 4px 16px 0px, hsla(220, 25%, 10%, 0.8) 0px 8px 16px -5px' + : 'hsla(220, 30%, 5%, 0.07) 0px 4px 16px 0px, hsla(220, 25%, 10%, 0.07) 0px 8px 16px -5px'; + + return { + palette: { + mode, + primary: { + light: brand[200], + main: brand[400], + dark: brand[700], + contrastText: brand[50], + ...(mode === 'dark' && { + contrastText: brand[50], + light: brand[300], + main: brand[400], + dark: brand[700], + }), + }, + info: { + light: brand[100], + main: brand[300], + dark: brand[600], + contrastText: gray[50], + ...(mode === 'dark' && { + contrastText: brand[300], + light: brand[500], + main: brand[700], + dark: brand[900], + }), + }, + warning: { + light: orange[300], + main: orange[400], + dark: orange[800], + ...(mode === 'dark' && { + light: orange[400], + main: orange[500], + dark: orange[700], + }), + }, + error: { + light: red[300], + main: red[400], + dark: red[800], + ...(mode === 'dark' && { + light: red[400], + main: red[500], + dark: red[700], + }), + }, + success: { + light: green[300], + main: green[400], + dark: green[800], + ...(mode === 'dark' && { + light: green[400], + main: green[500], + dark: green[700], + }), + }, + grey: { + ...gray, + }, + divider: mode === 'dark' ? alpha(gray[700], 0.6) : alpha(gray[300], 0.4), + background: { + default: 'hsl(0, 0%, 99%)', + paper: 'hsl(220, 35%, 97%)', + ...(mode === 'dark' && { default: gray[900], paper: 'hsl(220, 30%, 7%)' }), + }, + text: { + primary: gray[800], + secondary: gray[600], + warning: orange[400], + ...(mode === 'dark' && { primary: 'hsl(0, 0%, 100%)', secondary: gray[400] }), + }, + action: { + hover: alpha(gray[200], 0.2), + selected: `${alpha(gray[200], 0.3)}`, + ...(mode === 'dark' && { + hover: alpha(gray[600], 0.2), + selected: alpha(gray[600], 0.3), + }), + }, + }, + typography: { + fontFamily: ['"Inter", "sans-serif"'].join(','), + h1: { + fontSize: defaultTheme.typography.pxToRem(48), + fontWeight: 600, + lineHeight: 1.2, + letterSpacing: -0.5, + }, + h2: { + fontSize: defaultTheme.typography.pxToRem(36), + fontWeight: 600, + lineHeight: 1.2, + }, + h3: { + fontSize: defaultTheme.typography.pxToRem(30), + lineHeight: 1.2, + }, + h4: { + fontSize: defaultTheme.typography.pxToRem(24), + fontWeight: 600, + lineHeight: 1.5, + }, + h5: { + fontSize: defaultTheme.typography.pxToRem(20), + fontWeight: 600, + }, + h6: { + fontSize: defaultTheme.typography.pxToRem(18), + fontWeight: 600, + }, + subtitle1: { + fontSize: defaultTheme.typography.pxToRem(18), + }, + subtitle2: { + fontSize: defaultTheme.typography.pxToRem(14), + fontWeight: 500, + }, + body1: { + fontSize: defaultTheme.typography.pxToRem(14), + }, + body2: { + fontSize: defaultTheme.typography.pxToRem(14), + fontWeight: 400, + }, + caption: { + fontSize: defaultTheme.typography.pxToRem(12), + fontWeight: 400, + }, + }, + shape: { + borderRadius: 8, + }, + shadows: customShadows, + }; +}; + +export const colorSchemes = { + light: { + palette: { + primary: { + light: brand[200], + main: brand[400], + dark: brand[700], + contrastText: brand[50], + }, + info: { + light: brand[100], + main: brand[300], + dark: brand[600], + contrastText: gray[50], + }, + warning: { + light: orange[300], + main: orange[400], + dark: orange[800], + }, + error: { + light: red[300], + main: red[400], + dark: red[800], + }, + success: { + light: green[300], + main: green[400], + dark: green[800], + }, + grey: { + ...gray, + }, + divider: alpha(gray[300], 0.4), + background: { + default: 'hsl(0, 0%, 99%)', + paper: 'hsl(220, 35%, 97%)', + }, + text: { + primary: gray[800], + secondary: gray[600], + warning: orange[400], + }, + action: { + hover: alpha(gray[200], 0.2), + selected: `${alpha(gray[200], 0.3)}`, + }, + baseShadow: + 'hsla(220, 30%, 5%, 0.07) 0px 4px 16px 0px, hsla(220, 25%, 10%, 0.07) 0px 8px 16px -5px', + }, + }, + dark: { + palette: { + primary: { + contrastText: brand[50], + light: brand[300], + main: brand[400], + dark: brand[700], + }, + info: { + contrastText: brand[300], + light: brand[500], + main: brand[700], + dark: brand[900], + }, + warning: { + light: orange[400], + main: orange[500], + dark: orange[700], + }, + error: { + light: red[400], + main: red[500], + dark: red[700], + }, + success: { + light: green[400], + main: green[500], + dark: green[700], + }, + grey: { + ...gray, + }, + divider: alpha(gray[700], 0.6), + background: { + default: gray[900], + paper: 'hsl(220, 30%, 7%)', + }, + text: { + primary: 'hsl(0, 0%, 100%)', + secondary: gray[400], + }, + action: { + hover: alpha(gray[600], 0.2), + selected: alpha(gray[600], 0.3), + }, + baseShadow: + 'hsla(220, 30%, 5%, 0.7) 0px 4px 16px 0px, hsla(220, 25%, 10%, 0.8) 0px 8px 16px -5px', + }, + }, +}; + +export const typography = { + fontFamily: ['"Inter", "sans-serif"'].join(','), + h1: { + fontSize: defaultTheme.typography.pxToRem(48), + fontWeight: 600, + lineHeight: 1.2, + letterSpacing: -0.5, + }, + h2: { + fontSize: defaultTheme.typography.pxToRem(36), + fontWeight: 600, + lineHeight: 1.2, + }, + h3: { + fontSize: defaultTheme.typography.pxToRem(30), + lineHeight: 1.2, + }, + h4: { + fontSize: defaultTheme.typography.pxToRem(24), + fontWeight: 600, + lineHeight: 1.5, + }, + h5: { + fontSize: defaultTheme.typography.pxToRem(20), + fontWeight: 600, + }, + h6: { + fontSize: defaultTheme.typography.pxToRem(18), + fontWeight: 600, + }, + subtitle1: { + fontSize: defaultTheme.typography.pxToRem(18), + }, + subtitle2: { + fontSize: defaultTheme.typography.pxToRem(14), + fontWeight: 500, + }, + body1: { + fontSize: defaultTheme.typography.pxToRem(14), + }, + body2: { + fontSize: defaultTheme.typography.pxToRem(14), + fontWeight: 400, + }, + caption: { + fontSize: defaultTheme.typography.pxToRem(12), + fontWeight: 400, + }, +}; + +export const shape = { + borderRadius: 8, +}; + +// @ts-ignore +const defaultShadows: Shadows = ['var(--mui-palette-baseShadow)', ...defaultTheme.shadows.slice(1)]; +export const shadows = defaultShadows; diff --git a/site/src/vite-env.d.ts b/site/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/site/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/site/tsconfig.app.json b/site/tsconfig.app.json new file mode 100644 index 0000000..588add2 --- /dev/null +++ b/site/tsconfig.app.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable", "WebWorker", "ES2021.String"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": false, + "noUnusedParameters": false, + "noFallthroughCasesInSwitch": false + }, + "include": ["src"], + "types": ["vite/client", "vite-plugin-pwa/client"], + "baseUrl": "./src", + "paths": { + "@/*": ["*"] + } +} diff --git a/site/tsconfig.app.tsbuildinfo b/site/tsconfig.app.tsbuildinfo new file mode 100644 index 0000000..91a32e1 --- /dev/null +++ b/site/tsconfig.app.tsbuildinfo @@ -0,0 +1 @@ +{"root":["./src/App.tsx","./src/main.tsx","./src/vite-env.d.ts","./src/logic/comms.ts","./src/logic/constants.ts","./src/logic/store.ts","./src/logic/tlon-helpers.ts","./src/logic/types-tlon.ts","./src/logic/types.ts","./src/logic/utils.ts","./src/logic/ob/co.ts","./src/logic/ob/muk.ts","./src/logic/ob/ob.ts","./src/logic/ob/types.ts","./src/modals/Modal.tsx","./src/site/Blog.tsx","./src/site/BlogPost.tsx","./src/site/Board.tsx","./src/site/BoardThread.tsx","./src/site/Chat.tsx","./src/site/Chatroom.tsx","./src/site/Composer.tsx","./src/site/Forum.tsx","./src/site/Home.tsx","./src/site/Login.tsx","./src/site/Navbar.tsx","./src/site/PostContent.tsx","./src/site/Radio.tsx","./src/site/Search.tsx","./src/site/Snippets.tsx","./src/site/StaticPage.tsx","./src/site/User.tsx","./src/site/Wiki.tsx","./src/ui/Components.tsx","./src/ui/Sigil.tsx","./src/ui/theme.tsx","./src/ui/sigil-ts/index.ts","./src/ui/sigil-ts/lib.ts","./src/ui/sigil-ts/reactImageRenderer.ts","./src/ui/sigil-ts/reactRenderer.ts","./src/ui/sigil-ts/stringRenderer.ts","./src/ui/sigil-ts/types.ts","./src/ui/theme/AppTheme.tsx","./src/ui/theme/ColorModeIconDropdown.tsx","./src/ui/theme/ColorModeSelect.tsx","./src/ui/theme/themePrimitives.ts","./src/ui/theme/customizations/dataDisplay.tsx","./src/ui/theme/customizations/feedback.tsx","./src/ui/theme/customizations/inputs.tsx","./src/ui/theme/customizations/navigation.tsx","./src/ui/theme/customizations/surfaces.ts"],"version":"5.6.2"} \ No newline at end of file diff --git a/site/tsconfig.json b/site/tsconfig.json new file mode 100644 index 0000000..1ffef60 --- /dev/null +++ b/site/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/site/tsconfig.node.json b/site/tsconfig.node.json new file mode 100644 index 0000000..0d3d714 --- /dev/null +++ b/site/tsconfig.node.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["vite.config.ts"] +} diff --git a/site/tsconfig.node.tsbuildinfo b/site/tsconfig.node.tsbuildinfo new file mode 100644 index 0000000..98ef2f9 --- /dev/null +++ b/site/tsconfig.node.tsbuildinfo @@ -0,0 +1 @@ +{"root":["./vite.config.ts"],"version":"5.6.2"} \ No newline at end of file diff --git a/site/vite.config.ts b/site/vite.config.ts new file mode 100644 index 0000000..c38a21f --- /dev/null +++ b/site/vite.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from "vite"; +import react from "@vitejs/plugin-react"; +// import { createHash } from "crypto"; + +// https://vitejs.dev/config/ +export default defineConfig({ + base: "/ublog", + plugins: [react()], +});