From 2477c2d6a2d80e69f133c1be518d65f103ea3360 Mon Sep 17 00:00:00 2001 From: Max Amundsen Date: Thu, 16 Jul 2026 12:40:49 -0400 Subject: [PATCH] Update 3d chart mode, add US heatmap, move kjol-web -> kjol-website --- .gitignore | 18 +- .vscode/launch.json | 40 +-- .vscode/tasks.json | 56 ++-- CLAUDE.md | 8 +- go/cmd/kjol-web/grep.exe.stackdump | 31 -- go/cmd/kjol-web/opensans.css | 200 ------------- go/cmd/{kjol-web => kjol-website}/README.md | 6 +- .../{kjol-web => kjol-website}/app/chart.go | 0 .../{kjol-web => kjol-website}/app/clayer.go | 0 .../app/client.gen.go | 0 .../app/components.go | 2 +- go/cmd/{kjol-web => kjol-website}/app/data.go | 0 go/cmd/{kjol-web => kjol-website}/app/docs.go | 0 .../{kjol-web => kjol-website}/app/golayer.go | 0 .../app/icons_test.go | 0 .../{kjol-web => kjol-website}/app/layers.go | 0 .../{kjol-web => kjol-website}/app/pages.go | 2 +- .../app/routes.gen.go | 0 .../app/server.gen.go | 0 .../app/server_counter.go | 0 .../app/ssr_test.go | 0 .../{kjol-web => kjol-website}/app/table.go | 0 .../app/tworuntimes_test.go | 0 .../{kjol-web => kjol-website}/build/build.go | 8 +- go/cmd/{kjol-web => kjol-website}/css/app.css | 0 .../frontend/css/style.css | 2 +- .../frontend/src/app.ts | 0 .../frontend/src/componentGroups.ts | 0 .../frontend/src/layers.ts | 0 .../frontend/src/layout/Demo.tsx | 0 .../frontend/src/layout/Shell.tsx | 0 .../frontend/src/pages/Components.tsx | 89 ++++-- .../frontend/src/pages/NotFound.tsx | 0 .../frontend/src/pages/Overview.tsx | 0 .../src/pages/public/PublicLayout.tsx | 0 .../frontend/src/pages/public/Ssr.tsx | 0 .../frontend/src/pages/public/pages.ts | 0 .../frontend/src/pages/public/routes.gen.ts | 0 .../frontend/src/public.tsx | 0 go/cmd/kjol-website/frontend/src/vendor.d.ts | 8 + .../vendor/@kurkle/color/dist/color.esm.js | 0 .../vendor/@kurkle/color/package.json | 0 .../frontend/vendor/chart.js/dist/chart.js | 0 .../chart.js/dist/chunks/helpers.dataset.cjs | 0 .../dist/chunks/helpers.dataset.cjs.map | 0 .../chart.js/dist/chunks/helpers.dataset.js | 0 .../dist/chunks/helpers.dataset.js.map | 0 .../frontend/vendor/chart.js/package.json | 0 .../vendor/pdf-lib/dist/pdf-lib.esm.js | 0 .../frontend/vendor/pdf-lib/package.json | 0 .../frontend/vendor/pdfjs-dist/build/pdf.mjs | 0 .../pdfjs-dist/build/pdf.worker.min.mjs | 0 .../frontend/vendor/pdfjs-dist/package.json | 0 .../frontend/vendor/vendor.json | 0 go/cmd/{kjol-web => kjol-website}/go.mod | 2 +- go/cmd/{kjol-web => kjol-website}/go.sum | 0 .../internal/handlers/public.go | 0 .../{kjol-web => kjol-website}/server/main.go | 10 +- go/cmd/kjol-website/tsconfig.json | 32 ++ .../{kjol-web => kjol-website}/wasm/main.go | 2 +- .../wasm/main_native.go | 0 .../fonts/opensans-latin-ext-italic.woff2 | Bin .../fonts/opensans-latin-ext-normal.woff2 | Bin .../wwwroot/fonts/opensans-latin-italic.woff2 | Bin .../wwwroot/fonts/opensans-latin-normal.woff2 | Bin .../wwwroot/wasmboot.js | 0 go/cmd/twcss/main.go | 2 +- go/jsruntime/icons/README.md | 2 +- go/jsruntime/styles/theme.css | 21 ++ go/jsruntime/uikit/Chart.tsx | 280 ++++++++++++------ go/jsruntime/uikit/Theme.tsx | 2 +- go/jsruntime/uikit/USHeatmap.tsx | 234 +++++++++++++++ go/jsruntime/uikit/usStates.ts | 56 ++++ go/lexer/lexer.go | 2 +- go/webui/README.md | 2 +- 75 files changed, 701 insertions(+), 416 deletions(-) delete mode 100644 go/cmd/kjol-web/grep.exe.stackdump delete mode 100644 go/cmd/kjol-web/opensans.css rename go/cmd/{kjol-web => kjol-website}/README.md (97%) rename go/cmd/{kjol-web => kjol-website}/app/chart.go (100%) rename go/cmd/{kjol-web => kjol-website}/app/clayer.go (100%) rename go/cmd/{kjol-web => kjol-website}/app/client.gen.go (100%) rename go/cmd/{kjol-web => kjol-website}/app/components.go (99%) rename go/cmd/{kjol-web => kjol-website}/app/data.go (100%) rename go/cmd/{kjol-web => kjol-website}/app/docs.go (100%) rename go/cmd/{kjol-web => kjol-website}/app/golayer.go (100%) rename go/cmd/{kjol-web => kjol-website}/app/icons_test.go (100%) rename go/cmd/{kjol-web => kjol-website}/app/layers.go (100%) rename go/cmd/{kjol-web => kjol-website}/app/pages.go (99%) rename go/cmd/{kjol-web => kjol-website}/app/routes.gen.go (100%) rename go/cmd/{kjol-web => kjol-website}/app/server.gen.go (100%) rename go/cmd/{kjol-web => kjol-website}/app/server_counter.go (100%) rename go/cmd/{kjol-web => kjol-website}/app/ssr_test.go (100%) rename go/cmd/{kjol-web => kjol-website}/app/table.go (100%) rename go/cmd/{kjol-web => kjol-website}/app/tworuntimes_test.go (100%) rename go/cmd/{kjol-web => kjol-website}/build/build.go (97%) rename go/cmd/{kjol-web => kjol-website}/css/app.css (100%) rename go/cmd/{kjol-web => kjol-website}/frontend/css/style.css (98%) rename go/cmd/{kjol-web => kjol-website}/frontend/src/app.ts (100%) rename go/cmd/{kjol-web => kjol-website}/frontend/src/componentGroups.ts (100%) rename go/cmd/{kjol-web => kjol-website}/frontend/src/layers.ts (100%) rename go/cmd/{kjol-web => kjol-website}/frontend/src/layout/Demo.tsx (100%) rename go/cmd/{kjol-web => kjol-website}/frontend/src/layout/Shell.tsx (100%) rename go/cmd/{kjol-web => kjol-website}/frontend/src/pages/Components.tsx (93%) rename go/cmd/{kjol-web => kjol-website}/frontend/src/pages/NotFound.tsx (100%) rename go/cmd/{kjol-web => kjol-website}/frontend/src/pages/Overview.tsx (100%) rename go/cmd/{kjol-web => kjol-website}/frontend/src/pages/public/PublicLayout.tsx (100%) rename go/cmd/{kjol-web => kjol-website}/frontend/src/pages/public/Ssr.tsx (100%) rename go/cmd/{kjol-web => kjol-website}/frontend/src/pages/public/pages.ts (100%) rename go/cmd/{kjol-web => kjol-website}/frontend/src/pages/public/routes.gen.ts (100%) rename go/cmd/{kjol-web => kjol-website}/frontend/src/public.tsx (100%) create mode 100644 go/cmd/kjol-website/frontend/src/vendor.d.ts rename go/cmd/{kjol-web => kjol-website}/frontend/vendor/@kurkle/color/dist/color.esm.js (100%) rename go/cmd/{kjol-web => kjol-website}/frontend/vendor/@kurkle/color/package.json (100%) rename go/cmd/{kjol-web => kjol-website}/frontend/vendor/chart.js/dist/chart.js (100%) rename go/cmd/{kjol-web => kjol-website}/frontend/vendor/chart.js/dist/chunks/helpers.dataset.cjs (100%) rename go/cmd/{kjol-web => kjol-website}/frontend/vendor/chart.js/dist/chunks/helpers.dataset.cjs.map (100%) rename go/cmd/{kjol-web => kjol-website}/frontend/vendor/chart.js/dist/chunks/helpers.dataset.js (100%) rename go/cmd/{kjol-web => kjol-website}/frontend/vendor/chart.js/dist/chunks/helpers.dataset.js.map (100%) rename go/cmd/{kjol-web => kjol-website}/frontend/vendor/chart.js/package.json (100%) rename go/cmd/{kjol-web => kjol-website}/frontend/vendor/pdf-lib/dist/pdf-lib.esm.js (100%) rename go/cmd/{kjol-web => kjol-website}/frontend/vendor/pdf-lib/package.json (100%) rename go/cmd/{kjol-web => kjol-website}/frontend/vendor/pdfjs-dist/build/pdf.mjs (100%) rename go/cmd/{kjol-web => kjol-website}/frontend/vendor/pdfjs-dist/build/pdf.worker.min.mjs (100%) rename go/cmd/{kjol-web => kjol-website}/frontend/vendor/pdfjs-dist/package.json (100%) rename go/cmd/{kjol-web => kjol-website}/frontend/vendor/vendor.json (100%) rename go/cmd/{kjol-web => kjol-website}/go.mod (98%) rename go/cmd/{kjol-web => kjol-website}/go.sum (100%) rename go/cmd/{kjol-web => kjol-website}/internal/handlers/public.go (100%) rename go/cmd/{kjol-web => kjol-website}/server/main.go (96%) create mode 100644 go/cmd/kjol-website/tsconfig.json rename go/cmd/{kjol-web => kjol-website}/wasm/main.go (99%) rename go/cmd/{kjol-web => kjol-website}/wasm/main_native.go (100%) rename go/cmd/{kjol-web => kjol-website}/wwwroot/fonts/opensans-latin-ext-italic.woff2 (100%) rename go/cmd/{kjol-web => kjol-website}/wwwroot/fonts/opensans-latin-ext-normal.woff2 (100%) rename go/cmd/{kjol-web => kjol-website}/wwwroot/fonts/opensans-latin-italic.woff2 (100%) rename go/cmd/{kjol-web => kjol-website}/wwwroot/fonts/opensans-latin-normal.woff2 (100%) rename go/cmd/{kjol-web => kjol-website}/wwwroot/wasmboot.js (100%) create mode 100644 go/jsruntime/uikit/USHeatmap.tsx create mode 100644 go/jsruntime/uikit/usStates.ts diff --git a/.gitignore b/.gitignore index 5e8aac2a..0e129ef5 100644 --- a/.gitignore +++ b/.gitignore @@ -84,20 +84,20 @@ wwwroot/public.bundle.min.js internal/handlers/public_pages.gen.go # --------------------------------------------------------------------------- -# kjol-web (go/cmd/kjol-web) build output. +# kjol-website (go/cmd/kjol-website) build output. # # The rules above came from the application repos and every one of them contains # a slash, which anchors it to the directory holding this .gitignore — the repo # root. So `wwwroot/bundle.min.js` matches /wwwroot/..., and NOT the identical -# artifact under go/cmd/kjol-web/wwwroot/. These are the same rules, re-anchored. +# artifact under go/cmd/kjol-website/wwwroot/. These are the same rules, re-anchored. # # Everything here is regenerated by `go run ./build`; none of it is authored. -go/cmd/kjol-web/wwwroot/bundle.min.* -go/cmd/kjol-web/wwwroot/public.bundle.min.* -go/cmd/kjol-web/wwwroot/app.css -go/cmd/kjol-web/wwwroot/wasm_exec.js -go/cmd/kjol-web/wwwroot/vendor/ -go/cmd/kjol-web/frontend/src/ui/generated/ -go/cmd/kjol-web/internal/handlers/public_pages.gen.go +go/cmd/kjol-website/wwwroot/bundle.min.* +go/cmd/kjol-website/wwwroot/public.bundle.min.* +go/cmd/kjol-website/wwwroot/app.css +go/cmd/kjol-website/wwwroot/wasm_exec.js +go/cmd/kjol-website/wwwroot/vendor/ +go/cmd/kjol-website/frontend/src/ui/generated/ +go/cmd/kjol-website/internal/handlers/public_pages.gen.go # kjol framework (git submodule; deny-list above would otherwise ignore it) !/kjol diff --git a/.vscode/launch.json b/.vscode/launch.json index 4bc47f8f..31e3ae83 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,77 +1,77 @@ { - // Debug configs for kjol-web (the website). cwd is the site dir because the dev server + // Debug configs for kjol-website (the website). cwd is the site dir because the dev server // resolves ./wwwroot, ./app, ./wasm, ./frontend and the watched engine dirs relative // to it. // - // Every dev-server config preLaunchTasks "kjol-web: prebuild" (codegen -> Tailwind -> + // Every dev-server config preLaunchTasks "kjol-website: prebuild" (codegen -> Tailwind -> // Solid bundle). Codegen must run before the server is COMPILED — it writes // app/*.gen.go, which the server imports — and under the debugger the binary is built // by Delve, not by the server's own Build hook, so nothing else would generate it. // - // GOWORK=off on every config: kjol-web is its own module (module kjolweb, replace kjol + // GOWORK=off on every config: kjol-website is its own module (module kjolwebsite, replace kjol // => ../..). Inside a parent project the parent's go.work — which lists kjol/go but not - // kjolweb — shadows it, and the build fails "main module (...) does not contain package - // .../kjol-web/server". Off, Go uses kjolweb's own go.mod; standalone it is a no-op. + // kjolwebsite — shadows it, and the build fails "main module (...) does not contain package + // .../kjol-website/server". Off, Go uses kjolwebsite's own go.mod; standalone it is a no-op. "version": "0.2.0", "configurations": [ { - "name": "kjol-web: dev server", + "name": "kjol-website: dev server", "type": "go", "request": "launch", "mode": "auto", - "program": "${workspaceFolder}/go/cmd/kjol-web/server", - "cwd": "${workspaceFolder}/go/cmd/kjol-web", + "program": "${workspaceFolder}/go/cmd/kjol-website/server", + "cwd": "${workspaceFolder}/go/cmd/kjol-website", "env": { "GOWORK": "off" }, "args": ["-addr", ":8085"], - "preLaunchTask": "kjol-web: prebuild" + "preLaunchTask": "kjol-website: prebuild" }, { - "name": "kjol-web: dev server (no watch)", + "name": "kjol-website: dev server (no watch)", "type": "go", "request": "launch", "mode": "auto", - "program": "${workspaceFolder}/go/cmd/kjol-web/server", - "cwd": "${workspaceFolder}/go/cmd/kjol-web", + "program": "${workspaceFolder}/go/cmd/kjol-website/server", + "cwd": "${workspaceFolder}/go/cmd/kjol-website", "env": { "GOWORK": "off" }, // -watch=false skips the server's own Build entirely, so wwwroot is served exactly // as it sits on disk. The prebuild is what puts current generated code, CSS and JS // bundles there; without it you would be debugging against stale artefacts — and // with no bundle at all, every /js/* page would come up blank. "args": ["-watch=false"], - "preLaunchTask": "kjol-web: prebuild" + "preLaunchTask": "kjol-website: prebuild" }, { - "name": "kjol-web: cold build (-build)", + "name": "kjol-website: cold build (-build)", "type": "go", "request": "launch", "mode": "auto", // The same binary, with the flag that runs every build step once and exits. There is // no separate ./build command: the steps are a library, because the server imports // them and Go will not let you import a main. - "program": "${workspaceFolder}/go/cmd/kjol-web/server", - "cwd": "${workspaceFolder}/go/cmd/kjol-web", + "program": "${workspaceFolder}/go/cmd/kjol-website/server", + "cwd": "${workspaceFolder}/go/cmd/kjol-website", "env": { "GOWORK": "off" }, "args": ["-build"] }, { - "name": "kjol-web: codegen (wasmgen)", + "name": "kjol-website: codegen (wasmgen)", "type": "go", "request": "launch", "mode": "auto", "program": "${workspaceFolder}/go/cmd/wasmgen", - "cwd": "${workspaceFolder}/go/cmd/kjol-web", + "cwd": "${workspaceFolder}/go/cmd/kjol-website", "env": { "GOWORK": "off" }, "args": ["./app"] }, { - "name": "kjol-web: bundle (Solid)", + "name": "kjol-website: bundle (Solid)", "type": "go", "request": "launch", "mode": "auto", // Debug the JS build itself — the Solid compiler, the Tailwind engine, the SSR bake. // All of it is Go, so all of it takes a breakpoint. "program": "${workspaceFolder}/go/cmd/bundle", - "cwd": "${workspaceFolder}/go/cmd/kjol-web", + "cwd": "${workspaceFolder}/go/cmd/kjol-website", "env": { "GOWORK": "off" }, "args": [ "-app", "frontend", diff --git a/.vscode/tasks.json b/.vscode/tasks.json index b44a703b..14859751 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -1,66 +1,66 @@ { // Tasks for the kjol repo. // - // kjol-web — the website, and the runnable example of both web layers — is a nested - // module at go/cmd/kjol-web, so its tasks set cwd there; the module-wide Go tasks run + // kjol-website — the website, and the runnable example of both web layers — is a nested + // module at go/cmd/kjol-website, so its tasks set cwd there; the module-wide Go tasks run // in go/. // // These used to be called "gowasm: ...", which stopped being true: the site is two // front-ends now, and one build compiles Go to WebAssembly AND bundles a Solid app. - // They are "kjol-web: ..." to match the directory they act on. + // They are "kjol-website: ..." to match the directory they act on. // - // The build pipeline is Go, not a shell script — see go/cmd/kjol-web/build. The dev + // The build pipeline is Go, not a shell script — see go/cmd/kjol-website/build. The dev // server calls the same functions on every save, and a bash script would not run for // anyone on Windows. Note there is no `./build` COMMAND any more: the steps are a // library (the server imports them, and Go will not let you import a main), so a cold // build is `go run ./server -build`. // - // "kjol-web: prebuild" is what every run/debug config depends on. Codegen has to happen + // "kjol-website: prebuild" is what every run/debug config depends on. Codegen has to happen // before the server is COMPILED — it writes app/*.gen.go, which the server imports — and // under the debugger the binary is built by Delve, not by the server's own Build hook, // so nothing else would generate it. Tailwind and the Solid bundle are in there too, so // that a -watch=false session serves current artefacts instead of stale ones. Each step // is also exposed on its own, so you can rerun just the one you need. // - // The kjol-web tasks (cwd go/cmd/kjol-web) set GOWORK=off: kjol-web is its own module - // (module kjolweb, replace kjol => ../..), and inside a parent project the parent's - // go.work — which does not list kjolweb — would shadow it and the go command would fail - // "main module (...) does not contain package .../kjol-web/...". The kjol-module tasks + // The kjol-website tasks (cwd go/cmd/kjol-website) set GOWORK=off: kjol-website is its own module + // (module kjolwebsite, replace kjol => ../..), and inside a parent project the parent's + // go.work — which does not list kjolwebsite — would shadow it and the go command would fail + // "main module (...) does not contain package .../kjol-website/...". The kjol-module tasks // (cwd go) keep the workspace, since kjol/go is what a parent's go.work does list. "version": "2.0.0", "tasks": [ { - "label": "kjol-web: prebuild", + "label": "kjol-website: prebuild", "detail": "Codegen -> Tailwind -> Solid bundle. Dependency of the run + debug configs.", "dependsOrder": "sequence", - "dependsOn": ["kjol-web: codegen", "kjol-web: tailwind", "kjol-web: bundle (Solid)"], + "dependsOn": ["kjol-website: codegen", "kjol-website: tailwind", "kjol-website: bundle (Solid)"], "problemMatcher": [], "group": "build" }, { - "label": "kjol-web: codegen", + "label": "kjol-website: codegen", "detail": "Regenerate app/*.gen.go from the //gowasm: directives (pages, layouts, server components)", "type": "shell", "command": "go", "args": ["run", "kjol/cmd/wasmgen", "./app"], - "options": { "cwd": "${workspaceFolder}/go/cmd/kjol-web", "env": { "GOWORK": "off" } }, + "options": { "cwd": "${workspaceFolder}/go/cmd/kjol-website", "env": { "GOWORK": "off" } }, "problemMatcher": ["$go"], "presentation": { "reveal": "silent", "panel": "shared" }, "group": "build" }, { - "label": "kjol-web: tailwind", + "label": "kjol-website: tailwind", "detail": "Compile css/app.css -> wwwroot/app.css, scanning the webui kit + the site's Go markup", "type": "shell", "command": "go", "args": [ "run", "./cmd/twcss", - "-entry", "cmd/kjol-web/css/app.css", - "-out", "cmd/kjol-web/wwwroot/app.css", + "-entry", "cmd/kjol-website/css/app.css", + "-out", "cmd/kjol-website/wwwroot/app.css", "-base", ".", "webui/**/*.go", - "cmd/kjol-web/app/**/*.go", - "cmd/kjol-web/server/**/*.go" + "cmd/kjol-website/app/**/*.go", + "cmd/kjol-website/server/**/*.go" ], // Run from the kjol module root so the Tailwind engine's deps resolve in kjol's // go.mod, not the site's. @@ -70,7 +70,7 @@ "group": "build" }, { - "label": "kjol-web: bundle (Solid)", + "label": "kjol-website: bundle (Solid)", "detail": "TSX -> Solid -> esbuild, plus the SSR bake: wwwroot/bundle.min.{js,css} + public.bundle.min.*", "type": "shell", "command": "go", @@ -83,19 +83,19 @@ "-out", "wwwroot", "-gen-ts", "frontend/src/ui/generated" ], - "options": { "cwd": "${workspaceFolder}/go/cmd/kjol-web", "env": { "GOWORK": "off" } }, + "options": { "cwd": "${workspaceFolder}/go/cmd/kjol-website", "env": { "GOWORK": "off" } }, "problemMatcher": ["$go"], "presentation": { "reveal": "silent", "panel": "shared" }, "group": "build" }, { - "label": "kjol-web: dev server (hot reload)", + "label": "kjol-website: dev server (hot reload)", "detail": "SSR + /rsc + hot reload on :8085. Rebuilds on save; a .css save recompiles Tailwind only and swaps the stylesheet in place.", "type": "shell", "command": "go", "args": ["run", "./server"], - "options": { "cwd": "${workspaceFolder}/go/cmd/kjol-web", "env": { "GOWORK": "off" } }, - "dependsOn": ["kjol-web: prebuild"], + "options": { "cwd": "${workspaceFolder}/go/cmd/kjol-website", "env": { "GOWORK": "off" } }, + "dependsOn": ["kjol-website: prebuild"], "isBackground": true, "problemMatcher": { "owner": "go", @@ -113,18 +113,18 @@ "group": { "kind": "build", "isDefault": true } }, { - "label": "kjol-web: build (cold)", + "label": "kjol-website: build (cold)", "detail": "Cold build, then exit: codegen + Tailwind + wasm + Solid bundle + wasm_exec.js.", "type": "shell", "command": "go", "args": ["run", "./server", "-build"], - "options": { "cwd": "${workspaceFolder}/go/cmd/kjol-web", "env": { "GOWORK": "off" } }, + "options": { "cwd": "${workspaceFolder}/go/cmd/kjol-website", "env": { "GOWORK": "off" } }, "problemMatcher": ["$go"], "group": "build" }, { "label": "kjol: build ./...", - "detail": "Build the whole kjol module (does not descend into the nested kjol-web module)", + "detail": "Build the whole kjol module (does not descend into the nested kjol-website module)", "type": "shell", "command": "go build ./...", "options": { "cwd": "${workspaceFolder}/go" }, @@ -161,11 +161,11 @@ "group": "test" }, { - "label": "kjol-web: test", + "label": "kjol-website: test", "detail": "The site's own tests (SSR, the icon registry, the AutoTable export bytes). Its own module, so `kjol: test ./...` does not reach it.", "type": "shell", "command": "go test ./...", - "options": { "cwd": "${workspaceFolder}/go/cmd/kjol-web", "env": { "GOWORK": "off" } }, + "options": { "cwd": "${workspaceFolder}/go/cmd/kjol-website", "env": { "GOWORK": "off" } }, "problemMatcher": ["$go"], "group": "test" } diff --git a/CLAUDE.md b/CLAUDE.md index c6fd7ff5..b893a3c4 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -59,10 +59,10 @@ plus `HighlightGo` / `HighlightC`. It is a lexer and not a parser on purpose — escaped plain text rather than failing, and an unknown language is not an error. It is outside `webui` because it touches no DOM. **Its output is Tailwind class names**, so any stylesheet that has to render a code block must scan `lexer/**/*.go` — a build that forgets to still compiles and -just renders the snippet unstyled (see `cmd/kjol-web/build.Tailwind`). The C tables deliberately +just renders the snippet unstyled (see `cmd/kjol-website/build.Tailwind`). The C tables deliberately mirror `c/lexer/lexer_c.c`; add a type to one, add it to the other. -**`cmd/kjol-web` is the website**: the landing page and documentation for the whole +**`cmd/kjol-website` is the website**: the landing page and documentation for the whole codebase, and the runnable example of both web layers. It is its own nested module (so its go-chart / esbuild / goja deps stay out of kjol) and it is ONE server running TWO front-ends — `/wasm/*` is the Go→WebAssembly SPA, `/js/*` is the Solid SPA, and `/` is a @@ -135,7 +135,7 @@ get a white flash until the bundle loads. It is the only hand-written JavaScript AutoTable must vendor them or the bundle fails to evaluate at all. - `icons/` — FontAwesome SVG source kit (the bundler scans usage and generates a per-app registry; the generated file is app-owned, not committed here). kjol ships only the SUBSET its - own kit + `kjol-web` reference. An app's own `frontend/icons` is searched FIRST, so an app with + own kit + `kjol-website` reference. An app's own `frontend/icons` is searched FIRST, so an app with a fuller kit keeps it — see `jsbundler.iconsDirs`. - `styles/theme.css` — the `@theme` scaffold, the semantic tokens, the `.dark` overrides, and the `:root` fa vars. **It does the `@import "tailwindcss"`**, because the bundler PREPENDS it to the @@ -181,7 +181,7 @@ class out in full. | `appenv` | compile-time environment via build tags (`-tags staging` / `-tags production`); the bundler reads `appenv.Environment` for the JS `__ENV_TYPE__` define | | `httputil.CorsMiddleware(CorsConfig{...})` | allowed domains + bundle-version source injected | | `wasmdevserver` | the app injects `Build` / `Render` / `Document` / `Handle` via `Config` | -| `jsbundler` public pages | kjol generates the registry (`public_pages.gen.go`); the APP owns the `publicPage` type it is written against, and the document shell. See `cmd/kjol-web/internal/handlers`. | +| `jsbundler` public pages | kjol generates the registry (`public_pages.gen.go`); the APP owns the `publicPage` type it is written against, and the document shell. See `cmd/kjol-website/internal/handlers`. | ## Stays app-side (never moves into kjol) diff --git a/go/cmd/kjol-web/grep.exe.stackdump b/go/cmd/kjol-web/grep.exe.stackdump deleted file mode 100644 index 8af53514..00000000 --- a/go/cmd/kjol-web/grep.exe.stackdump +++ /dev/null @@ -1,31 +0,0 @@ -Stack trace: -Frame Function Args -0007FFFFBD80 000210060304 (0007FFFFBF88, 0007FFFFCE00, 000000000002, 0007FFFFDC10) msys-2.0.dll+0x20304 -FFFFFFFFFFFEFEDF 00021006237D (0007FFFFC730, 000000000000, 00000000017C, 000000000000) msys-2.0.dll+0x2237D -0007FFFFC490 0002100C1394 (0007FFFFC6F0, 000000000001, 0007FFFFC700, 000000000000) msys-2.0.dll+0x81394 -000000000006 0002100BCE39 (000210221CCD, 000000000000, 000000000000, 7FF9520C00E8) msys-2.0.dll+0x7CE39 -0007FFFFC848 0002100BD23A (0007FFFFC858, 000A00000000, 0000000000B5, 0000000000B5) msys-2.0.dll+0x7D23A -0007FFFFC848 0002102130B8 (000000000000, 000A00000030, 000000000000, 000000000000) msys-2.0.dll+0x1D30B8 -0007FFFFC848 00010042A1E5 (0002100A76B3, 7FF900000000, 000210221CCD, 000100000001) grep.exe+0x2A1E5 -0007FFFFCB80 000100404B7C (00000000000D, 000000000000, 000000000000, 000000000000) grep.exe+0x4B7C -0007FFFFCB80 000100429678 (0002100455E0, 000000000000, 000000000148, 000000000000) grep.exe+0x29678 -0007FFFFCD30 000210047F01 (000000000000, 000000000000, 000000000000, 000000000000) msys-2.0.dll+0x7F01 -000000000000 000210045AC3 (000000000000, 000000000000, 000000000000, 000000000000) msys-2.0.dll+0x5AC3 -0007FFFFFFF0 000210045B74 (000000000000, 000000000000, 000000000000, 000000000000) msys-2.0.dll+0x5B74 -End of stack trace -Loaded modules: -000100400000 grep.exe -7FF952CB0000 ntdll.dll -7FF9520C0000 KERNEL32.DLL -7FF94FFF0000 KERNELBASE.dll -0005603F0000 msys-iconv-2.dll -000430B30000 msys-intl-8.dll -000210040000 msys-2.0.dll -0004C36D0000 msys-pcre-1.dll -7FF951F50000 advapi32.dll -7FF9525E0000 msvcrt.dll -7FF952010000 sechost.dll -7FF9503A0000 bcrypt.dll -7FF952380000 RPCRT4.dll -7FF94F720000 CRYPTBASE.DLL -7FF9508C0000 bcryptPrimitives.dll diff --git a/go/cmd/kjol-web/opensans.css b/go/cmd/kjol-web/opensans.css deleted file mode 100644 index 445da7f2..00000000 --- a/go/cmd/kjol-web/opensans.css +++ /dev/null @@ -1,200 +0,0 @@ -/* cyrillic-ext */ -@font-face { - font-family: 'Open Sans'; - font-style: italic; - font-weight: 400 700; - font-stretch: 100%; - font-display: swap; - src: url(https://fonts.gstatic.com/s/opensans/v44/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWtE6F15M.woff2) format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} -/* cyrillic */ -@font-face { - font-family: 'Open Sans'; - font-style: italic; - font-weight: 400 700; - font-stretch: 100%; - font-display: swap; - src: url(https://fonts.gstatic.com/s/opensans/v44/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWvU6F15M.woff2) format('woff2'); - unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* greek-ext */ -@font-face { - font-family: 'Open Sans'; - font-style: italic; - font-weight: 400 700; - font-stretch: 100%; - font-display: swap; - src: url(https://fonts.gstatic.com/s/opensans/v44/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWtU6F15M.woff2) format('woff2'); - unicode-range: U+1F00-1FFF; -} -/* greek */ -@font-face { - font-family: 'Open Sans'; - font-style: italic; - font-weight: 400 700; - font-stretch: 100%; - font-display: swap; - src: url(https://fonts.gstatic.com/s/opensans/v44/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWuk6F15M.woff2) format('woff2'); - unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; -} -/* hebrew */ -@font-face { - font-family: 'Open Sans'; - font-style: italic; - font-weight: 400 700; - font-stretch: 100%; - font-display: swap; - src: url(https://fonts.gstatic.com/s/opensans/v44/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWu06F15M.woff2) format('woff2'); - unicode-range: U+0307-0308, U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F; -} -/* math */ -@font-face { - font-family: 'Open Sans'; - font-style: italic; - font-weight: 400 700; - font-stretch: 100%; - font-display: swap; - src: url(https://fonts.gstatic.com/s/opensans/v44/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWxU6F15M.woff2) format('woff2'); - unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315, U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A, U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1, U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C, U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E, U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115, U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5, U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310, U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0, U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA, U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11, U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF, U+1EE00-1EEFF; -} -/* symbols */ -@font-face { - font-family: 'Open Sans'; - font-style: italic; - font-weight: 400 700; - font-stretch: 100%; - font-display: swap; - src: url(https://fonts.gstatic.com/s/opensans/v44/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqW106F15M.woff2) format('woff2'); - unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0, U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF, U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F, U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981, U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E, U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E, U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD, U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C, U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8, U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA, U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF, U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B, U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C, U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9, U+1FAF0-1FAF8, U+1FB00-1FBFF; -} -/* vietnamese */ -@font-face { - font-family: 'Open Sans'; - font-style: italic; - font-weight: 400 700; - font-stretch: 100%; - font-display: swap; - src: url(https://fonts.gstatic.com/s/opensans/v44/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWtk6F15M.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: 'Open Sans'; - font-style: italic; - font-weight: 400 700; - font-stretch: 100%; - font-display: swap; - src: url(https://fonts.gstatic.com/s/opensans/v44/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWt06F15M.woff2) format('woff2'); - unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Open Sans'; - font-style: italic; - font-weight: 400 700; - font-stretch: 100%; - font-display: swap; - src: url(https://fonts.gstatic.com/s/opensans/v44/memtYaGs126MiZpBA-UFUIcVXSCEkx2cmqvXlWqWuU6F.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* cyrillic-ext */ -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 400 700; - font-stretch: 100%; - font-display: swap; - src: url(https://fonts.gstatic.com/s/opensans/v44/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSKmu1aB.woff2) format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} -/* cyrillic */ -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 400 700; - font-stretch: 100%; - font-display: swap; - src: url(https://fonts.gstatic.com/s/opensans/v44/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSumu1aB.woff2) format('woff2'); - unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* greek-ext */ -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 400 700; - font-stretch: 100%; - font-display: swap; - src: url(https://fonts.gstatic.com/s/opensans/v44/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSOmu1aB.woff2) format('woff2'); - unicode-range: U+1F00-1FFF; -} -/* greek */ -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 400 700; - font-stretch: 100%; - font-display: swap; - src: url(https://fonts.gstatic.com/s/opensans/v44/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSymu1aB.woff2) format('woff2'); - unicode-range: U+0370-0377, U+037A-037F, U+0384-038A, U+038C, U+038E-03A1, U+03A3-03FF; -} -/* hebrew */ -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 400 700; - font-stretch: 100%; - font-display: swap; - src: url(https://fonts.gstatic.com/s/opensans/v44/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS2mu1aB.woff2) format('woff2'); - unicode-range: U+0307-0308, U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F; -} -/* math */ -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 400 700; - font-stretch: 100%; - font-display: swap; - src: url(https://fonts.gstatic.com/s/opensans/v44/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTVOmu1aB.woff2) format('woff2'); - unicode-range: U+0302-0303, U+0305, U+0307-0308, U+0310, U+0312, U+0315, U+031A, U+0326-0327, U+032C, U+032F-0330, U+0332-0333, U+0338, U+033A, U+0346, U+034D, U+0391-03A1, U+03A3-03A9, U+03B1-03C9, U+03D1, U+03D5-03D6, U+03F0-03F1, U+03F4-03F5, U+2016-2017, U+2034-2038, U+203C, U+2040, U+2043, U+2047, U+2050, U+2057, U+205F, U+2070-2071, U+2074-208E, U+2090-209C, U+20D0-20DC, U+20E1, U+20E5-20EF, U+2100-2112, U+2114-2115, U+2117-2121, U+2123-214F, U+2190, U+2192, U+2194-21AE, U+21B0-21E5, U+21F1-21F2, U+21F4-2211, U+2213-2214, U+2216-22FF, U+2308-230B, U+2310, U+2319, U+231C-2321, U+2336-237A, U+237C, U+2395, U+239B-23B7, U+23D0, U+23DC-23E1, U+2474-2475, U+25AF, U+25B3, U+25B7, U+25BD, U+25C1, U+25CA, U+25CC, U+25FB, U+266D-266F, U+27C0-27FF, U+2900-2AFF, U+2B0E-2B11, U+2B30-2B4C, U+2BFE, U+3030, U+FF5B, U+FF5D, U+1D400-1D7FF, U+1EE00-1EEFF; -} -/* symbols */ -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 400 700; - font-stretch: 100%; - font-display: swap; - src: url(https://fonts.gstatic.com/s/opensans/v44/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTUGmu1aB.woff2) format('woff2'); - unicode-range: U+0001-000C, U+000E-001F, U+007F-009F, U+20DD-20E0, U+20E2-20E4, U+2150-218F, U+2190, U+2192, U+2194-2199, U+21AF, U+21E6-21F0, U+21F3, U+2218-2219, U+2299, U+22C4-22C6, U+2300-243F, U+2440-244A, U+2460-24FF, U+25A0-27BF, U+2800-28FF, U+2921-2922, U+2981, U+29BF, U+29EB, U+2B00-2BFF, U+4DC0-4DFF, U+FFF9-FFFB, U+10140-1018E, U+10190-1019C, U+101A0, U+101D0-101FD, U+102E0-102FB, U+10E60-10E7E, U+1D2C0-1D2D3, U+1D2E0-1D37F, U+1F000-1F0FF, U+1F100-1F1AD, U+1F1E6-1F1FF, U+1F30D-1F30F, U+1F315, U+1F31C, U+1F31E, U+1F320-1F32C, U+1F336, U+1F378, U+1F37D, U+1F382, U+1F393-1F39F, U+1F3A7-1F3A8, U+1F3AC-1F3AF, U+1F3C2, U+1F3C4-1F3C6, U+1F3CA-1F3CE, U+1F3D4-1F3E0, U+1F3ED, U+1F3F1-1F3F3, U+1F3F5-1F3F7, U+1F408, U+1F415, U+1F41F, U+1F426, U+1F43F, U+1F441-1F442, U+1F444, U+1F446-1F449, U+1F44C-1F44E, U+1F453, U+1F46A, U+1F47D, U+1F4A3, U+1F4B0, U+1F4B3, U+1F4B9, U+1F4BB, U+1F4BF, U+1F4C8-1F4CB, U+1F4D6, U+1F4DA, U+1F4DF, U+1F4E3-1F4E6, U+1F4EA-1F4ED, U+1F4F7, U+1F4F9-1F4FB, U+1F4FD-1F4FE, U+1F503, U+1F507-1F50B, U+1F50D, U+1F512-1F513, U+1F53E-1F54A, U+1F54F-1F5FA, U+1F610, U+1F650-1F67F, U+1F687, U+1F68D, U+1F691, U+1F694, U+1F698, U+1F6AD, U+1F6B2, U+1F6B9-1F6BA, U+1F6BC, U+1F6C6-1F6CF, U+1F6D3-1F6D7, U+1F6E0-1F6EA, U+1F6F0-1F6F3, U+1F6F7-1F6FC, U+1F700-1F7FF, U+1F800-1F80B, U+1F810-1F847, U+1F850-1F859, U+1F860-1F887, U+1F890-1F8AD, U+1F8B0-1F8BB, U+1F8C0-1F8C1, U+1F900-1F90B, U+1F93B, U+1F946, U+1F984, U+1F996, U+1F9E9, U+1FA00-1FA6F, U+1FA70-1FA7C, U+1FA80-1FA89, U+1FA8F-1FAC6, U+1FACE-1FADC, U+1FADF-1FAE9, U+1FAF0-1FAF8, U+1FB00-1FBFF; -} -/* vietnamese */ -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 400 700; - font-stretch: 100%; - font-display: swap; - src: url(https://fonts.gstatic.com/s/opensans/v44/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSCmu1aB.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 400 700; - font-stretch: 100%; - font-display: swap; - src: url(https://fonts.gstatic.com/s/opensans/v44/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTSGmu1aB.woff2) format('woff2'); - unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Open Sans'; - font-style: normal; - font-weight: 400 700; - font-stretch: 100%; - font-display: swap; - src: url(https://fonts.gstatic.com/s/opensans/v44/memvYaGs126MiZpBA-UvWbX2vVnXBbObj2OVTS-muw.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} diff --git a/go/cmd/kjol-web/README.md b/go/cmd/kjol-website/README.md similarity index 97% rename from go/cmd/kjol-web/README.md rename to go/cmd/kjol-website/README.md index b9a8eba5..d53d79f9 100644 --- a/go/cmd/kjol-web/README.md +++ b/go/cmd/kjol-website/README.md @@ -1,4 +1,4 @@ -# kjol-web — the kjol website +# kjol-website — the kjol website The landing page and documentation for the whole codebase. It is also the thing it documents: every page runs the code it describes, and there is not a screenshot of a @@ -12,7 +12,7 @@ build the site out of both. ## Run it ```sh -cd go/cmd/kjol-web +cd go/cmd/kjol-website go run ./server -build # cold build, then exit go run ./server # build, then SSR + /rsc + hot reload at http://localhost:8085 ``` @@ -121,7 +121,7 @@ one way. ## Its own module -`go.mod` declares module `kjolweb` with `replace kjol => ../..`, so its dependencies — +`go.mod` declares module `kjolwebsite` with `replace kjol => ../..`, so its dependencies — go-chart for the server-drawn charts, plus esbuild and goja by way of the bundler — stay out of kjol, whose engine packages are stdlib-only. `go build ./...` at the kjol root does not descend into this nested module; build it from here. diff --git a/go/cmd/kjol-web/app/chart.go b/go/cmd/kjol-website/app/chart.go similarity index 100% rename from go/cmd/kjol-web/app/chart.go rename to go/cmd/kjol-website/app/chart.go diff --git a/go/cmd/kjol-web/app/clayer.go b/go/cmd/kjol-website/app/clayer.go similarity index 100% rename from go/cmd/kjol-web/app/clayer.go rename to go/cmd/kjol-website/app/clayer.go diff --git a/go/cmd/kjol-web/app/client.gen.go b/go/cmd/kjol-website/app/client.gen.go similarity index 100% rename from go/cmd/kjol-web/app/client.gen.go rename to go/cmd/kjol-website/app/client.gen.go diff --git a/go/cmd/kjol-web/app/components.go b/go/cmd/kjol-website/app/components.go similarity index 99% rename from go/cmd/kjol-web/app/components.go rename to go/cmd/kjol-website/app/components.go index 6ade0f0b..ecb788f0 100644 --- a/go/cmd/kjol-web/app/components.go +++ b/go/cmd/kjol-website/app/components.go @@ -618,7 +618,7 @@ func tablesSection() func() *VNode { } return ui.AutoTablePDFHeader{ Title: "Employees", - Subtitle: "Exported from the kjol-web components page", + Subtitle: "Exported from the kjol-website components page", ShowDate: true, Orientation: orientation, } diff --git a/go/cmd/kjol-web/app/data.go b/go/cmd/kjol-website/app/data.go similarity index 100% rename from go/cmd/kjol-web/app/data.go rename to go/cmd/kjol-website/app/data.go diff --git a/go/cmd/kjol-web/app/docs.go b/go/cmd/kjol-website/app/docs.go similarity index 100% rename from go/cmd/kjol-web/app/docs.go rename to go/cmd/kjol-website/app/docs.go diff --git a/go/cmd/kjol-web/app/golayer.go b/go/cmd/kjol-website/app/golayer.go similarity index 100% rename from go/cmd/kjol-web/app/golayer.go rename to go/cmd/kjol-website/app/golayer.go diff --git a/go/cmd/kjol-web/app/icons_test.go b/go/cmd/kjol-website/app/icons_test.go similarity index 100% rename from go/cmd/kjol-web/app/icons_test.go rename to go/cmd/kjol-website/app/icons_test.go diff --git a/go/cmd/kjol-web/app/layers.go b/go/cmd/kjol-website/app/layers.go similarity index 100% rename from go/cmd/kjol-web/app/layers.go rename to go/cmd/kjol-website/app/layers.go diff --git a/go/cmd/kjol-web/app/pages.go b/go/cmd/kjol-website/app/pages.go similarity index 99% rename from go/cmd/kjol-web/app/pages.go rename to go/cmd/kjol-website/app/pages.go index d2f824cb..e3fd7943 100644 --- a/go/cmd/kjol-web/app/pages.go +++ b/go/cmd/kjol-website/app/pages.go @@ -1,4 +1,4 @@ -// Package app holds the kjol-web site's Go/WASM pages and components as +// Package app holds the kjol-website site's Go/WASM pages and components as // standalone, platform-neutral functions (SSR on the server, hydrate on the // client). UI is built from the kjol webui kit + Tailwind utility classes. // diff --git a/go/cmd/kjol-web/app/routes.gen.go b/go/cmd/kjol-website/app/routes.gen.go similarity index 100% rename from go/cmd/kjol-web/app/routes.gen.go rename to go/cmd/kjol-website/app/routes.gen.go diff --git a/go/cmd/kjol-web/app/server.gen.go b/go/cmd/kjol-website/app/server.gen.go similarity index 100% rename from go/cmd/kjol-web/app/server.gen.go rename to go/cmd/kjol-website/app/server.gen.go diff --git a/go/cmd/kjol-web/app/server_counter.go b/go/cmd/kjol-website/app/server_counter.go similarity index 100% rename from go/cmd/kjol-web/app/server_counter.go rename to go/cmd/kjol-website/app/server_counter.go diff --git a/go/cmd/kjol-web/app/ssr_test.go b/go/cmd/kjol-website/app/ssr_test.go similarity index 100% rename from go/cmd/kjol-web/app/ssr_test.go rename to go/cmd/kjol-website/app/ssr_test.go diff --git a/go/cmd/kjol-web/app/table.go b/go/cmd/kjol-website/app/table.go similarity index 100% rename from go/cmd/kjol-web/app/table.go rename to go/cmd/kjol-website/app/table.go diff --git a/go/cmd/kjol-web/app/tworuntimes_test.go b/go/cmd/kjol-website/app/tworuntimes_test.go similarity index 100% rename from go/cmd/kjol-web/app/tworuntimes_test.go rename to go/cmd/kjol-website/app/tworuntimes_test.go diff --git a/go/cmd/kjol-web/build/build.go b/go/cmd/kjol-website/build/build.go similarity index 97% rename from go/cmd/kjol-web/build/build.go rename to go/cmd/kjol-website/build/build.go index 090b1a07..3171e665 100644 --- a/go/cmd/kjol-web/build/build.go +++ b/go/cmd/kjol-website/build/build.go @@ -106,13 +106,13 @@ func Codegen() ([]byte, error) { // names, and nothing else in the tree mentions text-teal-300. func Tailwind() ([]byte, error) { cmd := exec.Command("go", "run", "./cmd/twcss", - "-entry", "cmd/kjol-web/css/app.css", - "-out", "cmd/kjol-web/wwwroot/app.css", + "-entry", "cmd/kjol-website/css/app.css", + "-out", "cmd/kjol-website/wwwroot/app.css", "-base", ".", "webui/**/*.go", "lexer/**/*.go", - "cmd/kjol-web/app/**/*.go", - "cmd/kjol-web/server/**/*.go", + "cmd/kjol-website/app/**/*.go", + "cmd/kjol-website/server/**/*.go", ) cmd.Dir = kjolRoot return cmd.CombinedOutput() diff --git a/go/cmd/kjol-web/css/app.css b/go/cmd/kjol-website/css/app.css similarity index 100% rename from go/cmd/kjol-web/css/app.css rename to go/cmd/kjol-website/css/app.css diff --git a/go/cmd/kjol-web/frontend/css/style.css b/go/cmd/kjol-website/frontend/css/style.css similarity index 98% rename from go/cmd/kjol-web/frontend/css/style.css rename to go/cmd/kjol-website/frontend/css/style.css index 821100fd..b4eb4561 100644 --- a/go/cmd/kjol-web/frontend/css/style.css +++ b/go/cmd/kjol-website/frontend/css/style.css @@ -1,5 +1,5 @@ /* --------------------------------------------------------------------------- - kjol-web — brand stylesheet for the Kjol JS Web section (/js/*). + kjol-website — brand stylesheet for the Kjol JS Web section (/js/*). --------------------------------------------------------------------------- There is deliberately no `@import "tailwindcss"` here. The bundler PREPENDS kjol's shared scaffold (go/jsruntime/styles/theme.css) to this file, and that diff --git a/go/cmd/kjol-web/frontend/src/app.ts b/go/cmd/kjol-website/frontend/src/app.ts similarity index 100% rename from go/cmd/kjol-web/frontend/src/app.ts rename to go/cmd/kjol-website/frontend/src/app.ts diff --git a/go/cmd/kjol-web/frontend/src/componentGroups.ts b/go/cmd/kjol-website/frontend/src/componentGroups.ts similarity index 100% rename from go/cmd/kjol-web/frontend/src/componentGroups.ts rename to go/cmd/kjol-website/frontend/src/componentGroups.ts diff --git a/go/cmd/kjol-web/frontend/src/layers.ts b/go/cmd/kjol-website/frontend/src/layers.ts similarity index 100% rename from go/cmd/kjol-web/frontend/src/layers.ts rename to go/cmd/kjol-website/frontend/src/layers.ts diff --git a/go/cmd/kjol-web/frontend/src/layout/Demo.tsx b/go/cmd/kjol-website/frontend/src/layout/Demo.tsx similarity index 100% rename from go/cmd/kjol-web/frontend/src/layout/Demo.tsx rename to go/cmd/kjol-website/frontend/src/layout/Demo.tsx diff --git a/go/cmd/kjol-web/frontend/src/layout/Shell.tsx b/go/cmd/kjol-website/frontend/src/layout/Shell.tsx similarity index 100% rename from go/cmd/kjol-web/frontend/src/layout/Shell.tsx rename to go/cmd/kjol-website/frontend/src/layout/Shell.tsx diff --git a/go/cmd/kjol-web/frontend/src/pages/Components.tsx b/go/cmd/kjol-website/frontend/src/pages/Components.tsx similarity index 93% rename from go/cmd/kjol-web/frontend/src/pages/Components.tsx rename to go/cmd/kjol-website/frontend/src/pages/Components.tsx index b546569d..4c5db406 100644 --- a/go/cmd/kjol-web/frontend/src/pages/Components.tsx +++ b/go/cmd/kjol-website/frontend/src/pages/Components.tsx @@ -84,6 +84,7 @@ import { Accordion, SingleAccordion } from "@ui/Accordion"; import { SidebarNav } from "@ui/Sidebar"; import { FuzzyMatch } from "@ui/FuzzyMatch"; import { Chart, ChartSeries } from "@ui/Chart"; +import { USHeatmap } from "@ui/USHeatmap"; import { ThemeToggle, useTheme } from "@ui/Theme"; import { Demo } from "../layout/Demo.tsx"; @@ -464,7 +465,7 @@ function Forms() { email() && !isEmailValid(email()) ? "That is not an email address." : ""; setEmail(e.currentTarget.value)} error={emailError()} showIcon @@ -474,21 +475,21 @@ function Forms() { setName(e.currentTarget.value)} /> setEmail(e.currentTarget.value)} error={emailError()} showIcon /> - setPlan(e.currentTarget.value)}> + setPlan(e.currentTarget.value)}> @@ -498,7 +499,7 @@ function Forms() { setNotes(e.currentTarget.value)} /> @@ -532,11 +533,11 @@ function Forms() {
- setName(e.currentTarget.value)} /> + setName(e.currentTarget.value)} /> setEmail(e.currentTarget.value)} error={emailError()} showIcon @@ -590,7 +591,7 @@ function Selects() { - + - setTz(e?.currentTarget?.value ?? e)} /> + setTz(e?.currentTarget?.value ?? e)} />

@@ -722,10 +723,10 @@ function Dates() {

- + - +
@@ -1125,7 +1126,7 @@ function Overlays() { return ( setWizardName(e.currentTarget.value)} /> @@ -1366,8 +1367,29 @@ function Search() { const CHART_DAYS = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; +// A made-up per-state metric for the choropleth, and a few cities (lat/lng) to drop on +// top of it — Anchorage and Honolulu included, to land on albersUsa's AK/HI insets. +const US_SIGNUPS: Record = { + CA: 4820, TX: 3910, NY: 3120, FL: 2870, IL: 1740, PA: 1610, OH: 1490, GA: 1450, + NC: 1360, MI: 1280, WA: 1230, AZ: 1180, MA: 1120, VA: 1090, CO: 980, TN: 940, + NJ: 910, OR: 720, MN: 690, WI: 610, MO: 560, MD: 540, IN: 520, NV: 480, + UT: 430, AL: 390, SC: 360, KY: 310, LA: 300, OK: 280, CT: 260, IA: 210, + KS: 180, AK: 140, HI: 160, ME: 120, MT: 90, WY: 60, ND: 70, SD: 80, +}; +const US_CITIES = [ + { label: "Seattle", lat: 47.6062, lng: -122.3321, value: 1230 }, + { label: "San Francisco", lat: 37.7749, lng: -122.4194, value: 2110 }, + { label: "Denver", lat: 39.7392, lng: -104.9903, value: 980 }, + { label: "Chicago", lat: 41.8781, lng: -87.6298, value: 1740 }, + { label: "New York", lat: 40.7128, lng: -74.006, value: 3120 }, + { label: "Miami", lat: 25.7617, lng: -80.1918, value: 1460 }, + { label: "Anchorage", lat: 61.2181, lng: -149.9003, value: 140 }, + { label: "Honolulu", lat: 21.3069, lng: -157.8583, value: 160 }, +]; + function Charts() { const [seed, setSeed] = createSignal(0); + const [threeD, setThreeD] = createSignal(false); // Two series over the same week. seed() reshuffles them so you can watch the SVG // move — no teardown, no new instance, just the marks that changed. @@ -1377,6 +1399,7 @@ function Charts() { const errors = (): ChartSeries => ({ name: "Errors", data: shuffle([8, 3, 12, 6, 9, 2, 14]) }); const pieData = (): ChartSeries => ({ name: "Traffic", data: shuffle([40, 25, 20, 15, 8]) }); const pieLabels = ["Direct", "Search", "Social", "Email", "Referral"]; + const regions = ["East", "Central", "Mountain", "Pacific"]; return (
@@ -1396,10 +1419,10 @@ function Charts() {
- +
- +
@@ -1412,8 +1435,12 @@ function Charts() { setSeed(seed() + 1)}> New data + setThreeD(!threeD())}> + {threeD() ? "Flat" : "3D"} + - Every chart updates in place — hover any of them for the tooltip. + The one threeD prop extrudes the bars and tilts the donut + (line and area stay flat — depth just reads as noise on a curve).
@@ -1421,10 +1448,38 @@ function Charts() { One kind prop picks the form —{" "} "line" | "area" | "bar" | "pie" | "donut" — and{" "} - stacked, curve,{" "} + stacked, horizontal,{" "} + curve, threeD,{" "} palette and valueFormat refine it. The width is measured from the container, so a chart fills whatever column you give it. + + +
+ + +
+

+ horizontal runs the categories down the y-axis;{" "} + stacked layers the series with a 2px surface gap between segments. +

+
+ + + v.toLocaleString("en-US")} /> +

+ @ui/USHeatmap shades each state on a themed sequential ramp and + projects points (latitude/longitude) with a dependency-free + albersUsa port — so Anchorage and Honolulu land on the Alaska and Hawaii insets. With{" "} + proportional, each dot's area scales with its value. Hover a + state or a point. +

+
); } diff --git a/go/cmd/kjol-web/frontend/src/pages/NotFound.tsx b/go/cmd/kjol-website/frontend/src/pages/NotFound.tsx similarity index 100% rename from go/cmd/kjol-web/frontend/src/pages/NotFound.tsx rename to go/cmd/kjol-website/frontend/src/pages/NotFound.tsx diff --git a/go/cmd/kjol-web/frontend/src/pages/Overview.tsx b/go/cmd/kjol-website/frontend/src/pages/Overview.tsx similarity index 100% rename from go/cmd/kjol-web/frontend/src/pages/Overview.tsx rename to go/cmd/kjol-website/frontend/src/pages/Overview.tsx diff --git a/go/cmd/kjol-web/frontend/src/pages/public/PublicLayout.tsx b/go/cmd/kjol-website/frontend/src/pages/public/PublicLayout.tsx similarity index 100% rename from go/cmd/kjol-web/frontend/src/pages/public/PublicLayout.tsx rename to go/cmd/kjol-website/frontend/src/pages/public/PublicLayout.tsx diff --git a/go/cmd/kjol-web/frontend/src/pages/public/Ssr.tsx b/go/cmd/kjol-website/frontend/src/pages/public/Ssr.tsx similarity index 100% rename from go/cmd/kjol-web/frontend/src/pages/public/Ssr.tsx rename to go/cmd/kjol-website/frontend/src/pages/public/Ssr.tsx diff --git a/go/cmd/kjol-web/frontend/src/pages/public/pages.ts b/go/cmd/kjol-website/frontend/src/pages/public/pages.ts similarity index 100% rename from go/cmd/kjol-web/frontend/src/pages/public/pages.ts rename to go/cmd/kjol-website/frontend/src/pages/public/pages.ts diff --git a/go/cmd/kjol-web/frontend/src/pages/public/routes.gen.ts b/go/cmd/kjol-website/frontend/src/pages/public/routes.gen.ts similarity index 100% rename from go/cmd/kjol-web/frontend/src/pages/public/routes.gen.ts rename to go/cmd/kjol-website/frontend/src/pages/public/routes.gen.ts diff --git a/go/cmd/kjol-web/frontend/src/public.tsx b/go/cmd/kjol-website/frontend/src/public.tsx similarity index 100% rename from go/cmd/kjol-web/frontend/src/public.tsx rename to go/cmd/kjol-website/frontend/src/public.tsx diff --git a/go/cmd/kjol-website/frontend/src/vendor.d.ts b/go/cmd/kjol-website/frontend/src/vendor.d.ts new file mode 100644 index 00000000..34fb14ea --- /dev/null +++ b/go/cmd/kjol-website/frontend/src/vendor.d.ts @@ -0,0 +1,8 @@ +// Ambient shims for tsserver only. The vendored pdf-lib / pdfjs-dist here are trimmed to +// the runtime files the bundler pins (frontend/vendor/vendor.json), so their `.d.ts` type +// trees are absent and each package.json `types` field points at a file that was not +// vendored. @ui/AutoTable imports both; the bundler resolves them at build time, but the +// editor needs a declaration or it reports "cannot find module". These make them `any`, +// which is all this example needs — it does not exercise the PDF export path itself. +declare module "pdf-lib"; +declare module "pdfjs-dist"; diff --git a/go/cmd/kjol-web/frontend/vendor/@kurkle/color/dist/color.esm.js b/go/cmd/kjol-website/frontend/vendor/@kurkle/color/dist/color.esm.js similarity index 100% rename from go/cmd/kjol-web/frontend/vendor/@kurkle/color/dist/color.esm.js rename to go/cmd/kjol-website/frontend/vendor/@kurkle/color/dist/color.esm.js diff --git a/go/cmd/kjol-web/frontend/vendor/@kurkle/color/package.json b/go/cmd/kjol-website/frontend/vendor/@kurkle/color/package.json similarity index 100% rename from go/cmd/kjol-web/frontend/vendor/@kurkle/color/package.json rename to go/cmd/kjol-website/frontend/vendor/@kurkle/color/package.json diff --git a/go/cmd/kjol-web/frontend/vendor/chart.js/dist/chart.js b/go/cmd/kjol-website/frontend/vendor/chart.js/dist/chart.js similarity index 100% rename from go/cmd/kjol-web/frontend/vendor/chart.js/dist/chart.js rename to go/cmd/kjol-website/frontend/vendor/chart.js/dist/chart.js diff --git a/go/cmd/kjol-web/frontend/vendor/chart.js/dist/chunks/helpers.dataset.cjs b/go/cmd/kjol-website/frontend/vendor/chart.js/dist/chunks/helpers.dataset.cjs similarity index 100% rename from go/cmd/kjol-web/frontend/vendor/chart.js/dist/chunks/helpers.dataset.cjs rename to go/cmd/kjol-website/frontend/vendor/chart.js/dist/chunks/helpers.dataset.cjs diff --git a/go/cmd/kjol-web/frontend/vendor/chart.js/dist/chunks/helpers.dataset.cjs.map b/go/cmd/kjol-website/frontend/vendor/chart.js/dist/chunks/helpers.dataset.cjs.map similarity index 100% rename from go/cmd/kjol-web/frontend/vendor/chart.js/dist/chunks/helpers.dataset.cjs.map rename to go/cmd/kjol-website/frontend/vendor/chart.js/dist/chunks/helpers.dataset.cjs.map diff --git a/go/cmd/kjol-web/frontend/vendor/chart.js/dist/chunks/helpers.dataset.js b/go/cmd/kjol-website/frontend/vendor/chart.js/dist/chunks/helpers.dataset.js similarity index 100% rename from go/cmd/kjol-web/frontend/vendor/chart.js/dist/chunks/helpers.dataset.js rename to go/cmd/kjol-website/frontend/vendor/chart.js/dist/chunks/helpers.dataset.js diff --git a/go/cmd/kjol-web/frontend/vendor/chart.js/dist/chunks/helpers.dataset.js.map b/go/cmd/kjol-website/frontend/vendor/chart.js/dist/chunks/helpers.dataset.js.map similarity index 100% rename from go/cmd/kjol-web/frontend/vendor/chart.js/dist/chunks/helpers.dataset.js.map rename to go/cmd/kjol-website/frontend/vendor/chart.js/dist/chunks/helpers.dataset.js.map diff --git a/go/cmd/kjol-web/frontend/vendor/chart.js/package.json b/go/cmd/kjol-website/frontend/vendor/chart.js/package.json similarity index 100% rename from go/cmd/kjol-web/frontend/vendor/chart.js/package.json rename to go/cmd/kjol-website/frontend/vendor/chart.js/package.json diff --git a/go/cmd/kjol-web/frontend/vendor/pdf-lib/dist/pdf-lib.esm.js b/go/cmd/kjol-website/frontend/vendor/pdf-lib/dist/pdf-lib.esm.js similarity index 100% rename from go/cmd/kjol-web/frontend/vendor/pdf-lib/dist/pdf-lib.esm.js rename to go/cmd/kjol-website/frontend/vendor/pdf-lib/dist/pdf-lib.esm.js diff --git a/go/cmd/kjol-web/frontend/vendor/pdf-lib/package.json b/go/cmd/kjol-website/frontend/vendor/pdf-lib/package.json similarity index 100% rename from go/cmd/kjol-web/frontend/vendor/pdf-lib/package.json rename to go/cmd/kjol-website/frontend/vendor/pdf-lib/package.json diff --git a/go/cmd/kjol-web/frontend/vendor/pdfjs-dist/build/pdf.mjs b/go/cmd/kjol-website/frontend/vendor/pdfjs-dist/build/pdf.mjs similarity index 100% rename from go/cmd/kjol-web/frontend/vendor/pdfjs-dist/build/pdf.mjs rename to go/cmd/kjol-website/frontend/vendor/pdfjs-dist/build/pdf.mjs diff --git a/go/cmd/kjol-web/frontend/vendor/pdfjs-dist/build/pdf.worker.min.mjs b/go/cmd/kjol-website/frontend/vendor/pdfjs-dist/build/pdf.worker.min.mjs similarity index 100% rename from go/cmd/kjol-web/frontend/vendor/pdfjs-dist/build/pdf.worker.min.mjs rename to go/cmd/kjol-website/frontend/vendor/pdfjs-dist/build/pdf.worker.min.mjs diff --git a/go/cmd/kjol-web/frontend/vendor/pdfjs-dist/package.json b/go/cmd/kjol-website/frontend/vendor/pdfjs-dist/package.json similarity index 100% rename from go/cmd/kjol-web/frontend/vendor/pdfjs-dist/package.json rename to go/cmd/kjol-website/frontend/vendor/pdfjs-dist/package.json diff --git a/go/cmd/kjol-web/frontend/vendor/vendor.json b/go/cmd/kjol-website/frontend/vendor/vendor.json similarity index 100% rename from go/cmd/kjol-web/frontend/vendor/vendor.json rename to go/cmd/kjol-website/frontend/vendor/vendor.json diff --git a/go/cmd/kjol-web/go.mod b/go/cmd/kjol-website/go.mod similarity index 98% rename from go/cmd/kjol-web/go.mod rename to go/cmd/kjol-website/go.mod index c27fee21..5c4579fc 100644 --- a/go/cmd/kjol-web/go.mod +++ b/go/cmd/kjol-website/go.mod @@ -1,7 +1,7 @@ // The example is its own module so its go-chart dependency (and freetype / // x/image) stays out of the kjol module — kjol's engine packages are // stdlib-only. kjol is resolved locally via the replace below (no publish step). -module kjolweb +module kjolwebsite go 1.26.3 diff --git a/go/cmd/kjol-web/go.sum b/go/cmd/kjol-website/go.sum similarity index 100% rename from go/cmd/kjol-web/go.sum rename to go/cmd/kjol-website/go.sum diff --git a/go/cmd/kjol-web/internal/handlers/public.go b/go/cmd/kjol-website/internal/handlers/public.go similarity index 100% rename from go/cmd/kjol-web/internal/handlers/public.go rename to go/cmd/kjol-website/internal/handlers/public.go diff --git a/go/cmd/kjol-web/server/main.go b/go/cmd/kjol-website/server/main.go similarity index 96% rename from go/cmd/kjol-web/server/main.go rename to go/cmd/kjol-website/server/main.go index e0c57303..94457267 100644 --- a/go/cmd/kjol-web/server/main.go +++ b/go/cmd/kjol-website/server/main.go @@ -1,4 +1,4 @@ -// Command server runs the kjol-web site on kjol's reusable wasmdevserver: +// Command server runs the kjol-website site on kjol's reusable wasmdevserver: // it SSRs the app's static routes, hosts the /rsc server-component endpoint, and // hot-swaps the wasm into the browser on change. It shows the coupling // inversion — the framework (wasmdevserver) imports no app code; the app injects @@ -6,7 +6,7 @@ // // Run it from THIS directory (the relative paths below are resolved against it): // -// go run ./server # from go/cmd/kjol-web +// go run ./server # from go/cmd/kjol-website package main import ( @@ -20,9 +20,9 @@ import ( "kjol/wasmdevserver" "kjol/webui" - "kjolweb/app" - "kjolweb/build" - "kjolweb/internal/handlers" + "kjolwebsite/app" + "kjolwebsite/build" + "kjolwebsite/internal/handlers" ) func main() { diff --git a/go/cmd/kjol-website/tsconfig.json b/go/cmd/kjol-website/tsconfig.json new file mode 100644 index 00000000..a3af15f4 --- /dev/null +++ b/go/cmd/kjol-website/tsconfig.json @@ -0,0 +1,32 @@ +{ + // TS config for the kjol-website front-end. The bundler resolves the @ui / @kjol / @appgen + // aliases at build time; the editor's TypeScript server needs them declared here or it + // reports every `import … from "@ui/…"` as an unresolved module. Mirrors the shape of a + // consuming app's root tsconfig, with the paths made relative to this nested example + // (the shared JS tree lives two levels up at go/jsruntime). + "compilerOptions": { + "target": "ES2025", + "module": "ESNext", + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "jsx": "preserve", + "jsxImportSource": "solid-js", + "noEmit": true, + "allowJs": true, + "checkJs": false, + "skipLibCheck": true, + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true, + "strict": false, + "lib": ["ES2025", "DOM", "DOM.Iterable"], + "paths": { + "@ui/*": ["../../jsruntime/uikit/*"], + "@kjol/*": ["../../jsruntime/*"], + "@appgen/*": ["./frontend/src/ui/generated/*"], + "*": ["../../jsruntime/runtime/*", "./frontend/vendor/*"] + } + }, + "include": ["frontend/**/*", "../../jsruntime/**/*"], + "exclude": ["frontend/css/**/*", "frontend/vendor/**/*", "../../jsruntime/runtime/**/*", "../../jsruntime/types.d.ts"] +} diff --git a/go/cmd/kjol-web/wasm/main.go b/go/cmd/kjol-website/wasm/main.go similarity index 99% rename from go/cmd/kjol-web/wasm/main.go rename to go/cmd/kjol-website/wasm/main.go index a2bd6de8..c90008fc 100644 --- a/go/cmd/kjol-web/wasm/main.go +++ b/go/cmd/kjol-website/wasm/main.go @@ -5,7 +5,7 @@ package main import ( - "kjolweb/app" + "kjolwebsite/app" "kjol/vdom" "kjol/wasmruntime" ) diff --git a/go/cmd/kjol-web/wasm/main_native.go b/go/cmd/kjol-website/wasm/main_native.go similarity index 100% rename from go/cmd/kjol-web/wasm/main_native.go rename to go/cmd/kjol-website/wasm/main_native.go diff --git a/go/cmd/kjol-web/wwwroot/fonts/opensans-latin-ext-italic.woff2 b/go/cmd/kjol-website/wwwroot/fonts/opensans-latin-ext-italic.woff2 similarity index 100% rename from go/cmd/kjol-web/wwwroot/fonts/opensans-latin-ext-italic.woff2 rename to go/cmd/kjol-website/wwwroot/fonts/opensans-latin-ext-italic.woff2 diff --git a/go/cmd/kjol-web/wwwroot/fonts/opensans-latin-ext-normal.woff2 b/go/cmd/kjol-website/wwwroot/fonts/opensans-latin-ext-normal.woff2 similarity index 100% rename from go/cmd/kjol-web/wwwroot/fonts/opensans-latin-ext-normal.woff2 rename to go/cmd/kjol-website/wwwroot/fonts/opensans-latin-ext-normal.woff2 diff --git a/go/cmd/kjol-web/wwwroot/fonts/opensans-latin-italic.woff2 b/go/cmd/kjol-website/wwwroot/fonts/opensans-latin-italic.woff2 similarity index 100% rename from go/cmd/kjol-web/wwwroot/fonts/opensans-latin-italic.woff2 rename to go/cmd/kjol-website/wwwroot/fonts/opensans-latin-italic.woff2 diff --git a/go/cmd/kjol-web/wwwroot/fonts/opensans-latin-normal.woff2 b/go/cmd/kjol-website/wwwroot/fonts/opensans-latin-normal.woff2 similarity index 100% rename from go/cmd/kjol-web/wwwroot/fonts/opensans-latin-normal.woff2 rename to go/cmd/kjol-website/wwwroot/fonts/opensans-latin-normal.woff2 diff --git a/go/cmd/kjol-web/wwwroot/wasmboot.js b/go/cmd/kjol-website/wwwroot/wasmboot.js similarity index 100% rename from go/cmd/kjol-web/wwwroot/wasmboot.js rename to go/cmd/kjol-website/wwwroot/wasmboot.js diff --git a/go/cmd/twcss/main.go b/go/cmd/twcss/main.go index 80e9b440..c409675a 100644 --- a/go/cmd/twcss/main.go +++ b/go/cmd/twcss/main.go @@ -2,7 +2,7 @@ // scanning explicit content globs for utility candidates. Unlike the app bundler // (which is wired to the frontend tree) it takes the entry, output, and content // globs as flags/args, so it works for markup authored in any language — used by -// the kjol-web site, whose Go/WASM half writes its UI in Go. +// the kjol-website site, whose Go/WASM half writes its UI in Go. // // Usage (globs are relative to -base; pass "**" for a recursive walk): // diff --git a/go/jsruntime/icons/README.md b/go/jsruntime/icons/README.md index 54b75adb..1c946e8e 100644 --- a/go/jsruntime/icons/README.md +++ b/go/jsruntime/icons/README.md @@ -17,7 +17,7 @@ Only the styles in `jsbundler`'s `faStyleDirs` are read — currently `regular/` This is a **subset**, not the full kit: the ~43 icons the `uikit/` components and -the `kjol-web` example actually reference, in `regular` and `solid`. The full kit +the `kjol-website` example actually reference, in `regular` and `solid`. The full kit is ~81,000 files across 17 style directories and has no business in a shared submodule. diff --git a/go/jsruntime/styles/theme.css b/go/jsruntime/styles/theme.css index d5267653..9a526974 100644 --- a/go/jsruntime/styles/theme.css +++ b/go/jsruntime/styles/theme.css @@ -164,6 +164,18 @@ --color-chart-6: #e34948; /* red */ --color-chart-7: #e87ba4; /* magenta */ --color-chart-8: #eb6834; /* orange */ + + /* Sequential ramp for the choropleth (uikit/USHeatmap): one hue, light→dark, six + steps low→high. Unlike the categorical slots it means MAGNITUDE, so it is a single + blue stepped by lightness. Dark mode re-points it below: on a near-black surface a + high value must read as BRIGHTER, not darker, so the ramp inverts its lightness + direction while keeping the same hue. */ + --color-choropleth-1: #dbe9fb; + --color-choropleth-2: #b3d0f6; + --color-choropleth-3: #85b3ee; + --color-choropleth-4: #5591e4; + --color-choropleth-5: #2f6fca; + --color-choropleth-6: #124f8f; } /* --------------------------------------------------------------------------- @@ -218,6 +230,15 @@ --color-chart-6: #e66767; --color-chart-7: #d55181; --color-chart-8: #d95926; + + /* Same blue hue, stepped for the dark surface and inverted in direction: step 1 (low) + is the dimmest, step 6 (high) the brightest, so "more" reads as "brighter". */ + --color-choropleth-1: #1b2a44; + --color-choropleth-2: #21406c; + --color-choropleth-3: #2c5f97; + --color-choropleth-4: #3f80c8; + --color-choropleth-5: #649de8; + --color-choropleth-6: #93c2f7; } /* The page's own background — painted before anything mounts, and behind it diff --git a/go/jsruntime/uikit/Chart.tsx b/go/jsruntime/uikit/Chart.tsx index 3d586172..97ff78fc 100644 --- a/go/jsruntime/uikit/Chart.tsx +++ b/go/jsruntime/uikit/Chart.tsx @@ -41,25 +41,32 @@ export interface ChartProps { // bar / area: stack the series instead of grouping them side by side. stacked?: boolean; + // bar only: lay the bars horizontally — categories run down the y-axis, values along x. + horizontal?: boolean; // line / area: "smooth" draws a Catmull-Rom spline through the points. curve?: "linear" | "smooth"; // donut only: inner-radius fraction of the outer radius (0.6 by default). donutRatio?: number; + // Give the chart depth: bars extrude, pie/donut tilt and gain a rim (line/area ignore + // it). An embellishment — flat reads more precisely — but sometimes wanted. + threeD?: boolean; + depth?: number; // 3D extrusion depth in px (default 16). + height?: number; // px of the plot area (default 300). The legend adds its own height. width?: number; // fix the width instead of measuring the container. class?: string; // Override the whole categorical palette (else the --color-chart-1..8 tokens). palette?: string[]; - // Format a value for the y-axis ticks and the tooltip. Defaults to en-US grouping. + // Format a value for the value-axis ticks and the tooltip. Defaults to en-US grouping. valueFormat?: (v: number) => string; legend?: boolean; // default: true when there is more than one series (or a pie). grid?: boolean; // cartesian only; default true. axes?: boolean; // cartesian only; default true. tooltip?: boolean; // default true. - yMin?: number; // pin the y domain instead of deriving it from the data. + yMin?: number; // pin the value domain instead of deriving it from the data. yMax?: number; } @@ -77,6 +84,7 @@ const BAR_MAX_W = 24; // cap a bar's thickness; the band's leftover is de const BAR_RADIUS = 4; // rounded data-end const SEG_GAP = 2; // the surface gap between touching marks (stacked segments) const MARK_R = 4; // hover marker radius (8px mark) +const DEFAULT_DEPTH = 16; // 3D extrusion depth // ── number + geometry helpers ─────────────────────────────────────────────────── @@ -122,17 +130,29 @@ function niceScale(min: number, max: number, maxTicks = 5): { min: number; max: return { min: niceMin, max: niceMax, ticks }; } -// A column with the two corners at its VALUE end rounded and the baseline end square — -// the mark spec. Handles growing up or down from the baseline. -function columnPath(x: number, w: number, yBase: number, yVal: number, r: number): string { - const h = Math.abs(yBase - yVal); - const rr = Math.max(0, Math.min(r, w / 2, h)); - if (yVal <= yBase) { - const t = yVal; - return `M${x},${yBase} L${x},${t + rr} Q${x},${t} ${x + rr},${t} L${x + w - rr},${t} Q${x + w},${t} ${x + w},${t + rr} L${x + w},${yBase} Z`; - } - const b = yVal; - return `M${x},${yBase} L${x},${b - rr} Q${x},${b} ${x + rr},${b} L${x + w - rr},${b} Q${x + w},${b} ${x + w},${b - rr} L${x + w},${yBase} Z`; +// A rectangle with a chosen subset of corners rounded — the data-end of a bar rounds, +// the baseline end stays square, and which end that is depends on orientation and sign. +function roundRectPath(x: number, y: number, w: number, h: number, r: number, side: BarSide): string { + const rr = Math.max(0, Math.min(r, w / 2, h / 2)); + const tl = side === "top" || side === "left" ? rr : 0; + const tr = side === "top" || side === "right" ? rr : 0; + const br = side === "bottom" || side === "right" ? rr : 0; + const bl = side === "bottom" || side === "left" ? rr : 0; + return `M${x + tl},${y} L${x + w - tr},${y} Q${x + w},${y} ${x + w},${y + tr}` + + ` L${x + w},${y + h - br} Q${x + w},${y + h} ${x + w - br},${y + h}` + + ` L${x + bl},${y + h} Q${x},${y + h} ${x},${y + h - bl}` + + ` L${x},${y + tl} Q${x},${y} ${x + tl},${y} Z`; +} + +// A bar extruded up-and-right by (dx, dy): a right side face (darkened), a top face +// (lightened) and the front face. The overlays are flat black/white washes so the shading +// needs no colour maths on a CSS variable it cannot read at build time. +function bar3D(x: number, y: number, w: number, h: number, color: string, op: number, dx: number, dy: number): string { + const top = `M${x},${y} L${x + dx},${y - dy} L${x + w + dx},${y - dy} L${x + w},${y} Z`; + const right = `M${x + w},${y} L${x + w + dx},${y - dy} L${x + w + dx},${y + h - dy} L${x + w},${y + h} Z`; + return `` + + `` + + ``; } function linePathD(pts: [number, number][]): string { @@ -157,22 +177,25 @@ function smoothPathD(pts: [number, number][]): string { return d; } -function pointOnCircle(cx: number, cy: number, r: number, deg: number): [number, number] { +// A point on a circle tilted about its horizontal axis by factor k (k=1 is upright): the +// vertical radius shrinks to k·r, so the circle reads as an ellipse seen at an angle. +function tiltPoint(cx: number, cy: number, r: number, deg: number, k: number): [number, number] { const a = (deg - 90) * Math.PI / 180; // 0° at 12 o'clock, clockwise - return [cx + r * Math.cos(a), cy + r * Math.sin(a)]; + return [cx + r * Math.cos(a), cy + k * r * Math.sin(a)]; } -// One pie/donut slice from a0 to a1 degrees. rIn === 0 gives a pie wedge. -function slicePathD(cx: number, cy: number, rOut: number, rIn: number, a0: number, a1: number): string { +// One pie/donut slice from a0 to a1 degrees, tilted by k (k=1 upright). rIn === 0 gives a +// pie wedge. Uses elliptical arcs so the tilt is exact, not a polygon approximation. +function slicePathD(cx: number, cy: number, rOut: number, rIn: number, a0: number, a1: number, k = 1): string { const large = a1 - a0 > 180 ? 1 : 0; - const [ox0, oy0] = pointOnCircle(cx, cy, rOut, a0); - const [ox1, oy1] = pointOnCircle(cx, cy, rOut, a1); + const [ox0, oy0] = tiltPoint(cx, cy, rOut, a0, k); + const [ox1, oy1] = tiltPoint(cx, cy, rOut, a1, k); if (rIn <= 0) { - return `M${cx},${cy} L${ox0},${oy0} A${rOut},${rOut} 0 ${large} 1 ${ox1},${oy1} Z`; + return `M${cx},${cy} L${ox0},${oy0} A${rOut},${k * rOut} 0 ${large} 1 ${ox1},${oy1} Z`; } - const [ix1, iy1] = pointOnCircle(cx, cy, rIn, a1); - const [ix0, iy0] = pointOnCircle(cx, cy, rIn, a0); - return `M${ox0},${oy0} A${rOut},${rOut} 0 ${large} 1 ${ox1},${oy1} L${ix1},${iy1} A${rIn},${rIn} 0 ${large} 0 ${ix0},${iy0} Z`; + const [ix1, iy1] = tiltPoint(cx, cy, rIn, a1, k); + const [ix0, iy0] = tiltPoint(cx, cy, rIn, a0, k); + return `M${ox0},${oy0} A${rOut},${k * rOut} 0 ${large} 1 ${ox1},${oy1} L${ix1},${iy1} A${rIn},${k * rIn} 0 ${large} 0 ${ix0},${iy0} Z`; } const clamp = (v: number, lo: number, hi: number) => Math.min(hi, Math.max(lo, v)); @@ -223,16 +246,27 @@ interface SubProps { fmt: (v: number) => string; } +type BarSide = "top" | "bottom" | "left" | "right"; +interface BarMark { x: number; y: number; w: number; h: number; side: BarSide; seriesIdx: number; catIdx: number; value: number; round: boolean; } +interface LineMark { seriesIdx: number; line: string; area: string; pts: [number, number][]; } + // ── cartesian (line / area / bar) ───────────────────────────────────────────────── function CartesianChart(p: SubProps): JSXElement { const [hover, setHover] = createSignal(null); - const [pointerY, setPointerY] = createSignal(0); + const [pointer, setPointer] = createSignal<[number, number]>([0, 0]); + + const horiz = () => p.props.kind === "bar" && !!p.props.horizontal; + // 3D extrudes bars only; on a line/area it reads as noise, so it is a no-op there. + const threeD = () => !!p.props.threeD && p.props.kind === "bar"; + const depth = () => p.props.depth ?? DEFAULT_DEPTH; + const dx = () => (threeD() ? depth() * 0.7 : 0); + const dy = () => (threeD() ? depth() * 0.55 : 0); const labels = () => p.props.labels ?? p.props.series[0]?.data.map((_, i) => String(i + 1)) ?? []; const n = () => Math.max(labels().length, ...p.props.series.map((s) => s.data.length), 0); - // The y domain. Stacked bars/areas reach the tallest STACK, not the tallest single + // The value domain. Stacked bars/areas reach the tallest STACK, not the tallest single // value; bars and areas always include zero so the baseline is honest. const domain = createMemo(() => { const series = p.props.series; @@ -258,15 +292,24 @@ function CartesianChart(p: SubProps): JSXElement { return scale; }); - // Left margin follows the widest y tick, so labels never clip and never float. + // Margins: the value axis wants room for its ticks, the category axis for its labels — + // which sides those are on flips with orientation. 3D adds depth to the top and right, + // where bars extrude, so nothing clips. const layout = createMemo(() => { const d = domain(); const showAxes = p.props.axes ?? true; - const tickW = showAxes ? Math.max(...d.ticks.map((t) => p.fmt(t).length)) * 7 + 12 : 8; - const left = Math.max(28, tickW); - const top = 12; - const bottom = showAxes ? 28 : 8; - const right = 12; + const valTickW = Math.max(...d.ticks.map((t) => p.fmt(t).length), 1) * 7 + 12; + const catLabelW = Math.max(...labels().map((s) => s.length), 1) * 7 + 12; + let left: number, bottom: number; + if (horiz()) { + left = showAxes ? Math.max(28, catLabelW) : 8; // category labels on the left + bottom = showAxes ? 28 : 8; // value ticks on the bottom + } else { + left = showAxes ? Math.max(28, valTickW) : 8; // value ticks on the left + bottom = showAxes ? 28 : 8; // category labels on the bottom + } + const top = 12 + dy(); + const right = 12 + dx(); return { left, top, right, bottom, plotW: Math.max(0, p.width - left - right), @@ -274,28 +317,33 @@ function CartesianChart(p: SubProps): JSXElement { }; }); - const yToPx = (v: number) => { + // valuePos: pixel along the VALUE axis (y for vertical, x for horizontal). + // catCenter: pixel of category i along the CATEGORY axis (x for vertical, y for horizontal). + const valuePos = (v: number) => { const d = domain(), l = layout(); const t = (v - d.min) / (d.max - d.min || 1); - return l.top + l.plotH * (1 - t); + return horiz() ? l.left + l.plotW * t : l.top + l.plotH * (1 - t); }; - const bandW = () => layout().plotW / Math.max(1, n()); - const bandCenter = (i: number) => layout().left + bandW() * (i + 0.5); - const baselineY = () => yToPx(clamp(0, domain().min, domain().max)); + const bandFull = () => (horiz() ? layout().plotH : layout().plotW) / Math.max(1, n()); + const catStart = () => (horiz() ? layout().top : layout().left); + const catCenter = (i: number) => catStart() + bandFull() * (i + 0.5); + const baseValue = () => valuePos(clamp(0, domain().min, domain().max)); - // Grouped bar geometry: the series share a centred group that occupies ~72% of the - // band; each bar is capped at BAR_MAX_W with a SEG_GAP of air between neighbours. + // Bars resolved to plain rectangles + which side is the (rounded) data-end, so the + // renderer draws vertical and horizontal bars the same way. const bars = createMemo(() => { if (p.props.kind !== "bar") return [] as BarMark[]; const out: BarMark[] = []; - const count = n(), bw = bandW(), base = baselineY(); + const count = n(), bf = bandFull(), base = baseValue(), h = horiz(); const series = p.props.series; + // rect(bandOffset, thickness, valueA, valueB) → a rectangle in the right orientation. + const rect = (off: number, thick: number, va: number, vb: number): { x: number; y: number; w: number; h: number } => + h ? { x: Math.min(va, vb), y: off, w: Math.abs(vb - va), h: thick } + : { x: off, y: Math.min(va, vb), w: thick, h: Math.abs(vb - va) }; if (p.props.stacked) { - const colW = Math.min(BAR_MAX_W, bw * 0.72); + const thick = Math.min(BAR_MAX_W, bf * 0.72); for (let i = 0; i < count; i++) { - const x = layout().left + bw * i + (bw - colW) / 2; - // The rounded data-end belongs to the OUTERMOST segment of each arm; the - // interior boundaries are separated by the surface gap, not by rounding. + const off = catStart() + bf * i + (bf - thick) / 2; let lastPos = -1, lastNeg = -1; for (let s = 0; s < series.length; s++) { const v = series[s].data[i] ?? 0; @@ -309,22 +357,25 @@ function CartesianChart(p: SubProps): JSXElement { const to = from + v; if (v >= 0) accPos = to; else accNeg = to; const isEnd = (v > 0 && s === lastPos) || (v < 0 && s === lastNeg); - const inset = isEnd ? 0 : SEG_GAP; // shrink toward the baseline for the 2px gap - const yFrom = yToPx(from); // baseline-side edge - const yVal = v >= 0 ? yToPx(to) + inset : yToPx(to) - inset; - out.push({ x, w: colW, yBase: yFrom, yVal, seriesIdx: s, catIdx: i, value: v, round: isEnd }); + const inset = isEnd ? 0 : SEG_GAP; // 2px surface gap between segments + const vFrom = valuePos(from); + // pull the value end toward the baseline by the gap (except the outer end) + const vTo = valuePos(to) + (h ? (v >= 0 ? -inset : inset) : (v >= 0 ? inset : -inset)); + const r = rect(off, thick, vFrom, vTo); + out.push({ ...r, side: barSide(h, v), seriesIdx: s, catIdx: i, value: v, round: isEnd }); } } } else { const nS = Math.max(1, series.length); - const groupW = Math.min(bw * 0.72, (BAR_MAX_W + SEG_GAP) * nS); - const each = Math.max(1, Math.min(BAR_MAX_W, groupW / nS - SEG_GAP)); + const groupSize = Math.min(bf * 0.72, (BAR_MAX_W + SEG_GAP) * nS); + const each = Math.max(1, Math.min(BAR_MAX_W, groupSize / nS - SEG_GAP)); for (let i = 0; i < count; i++) { - const gx = layout().left + bw * i + (bw - groupW) / 2; + const g = catStart() + bf * i + (bf - groupSize) / 2; for (let s = 0; s < nS; s++) { const v = series[s].data[i] ?? 0; - const x = gx + s * (groupW / nS) + (groupW / nS - each) / 2; - out.push({ x, w: each, yBase: base, yVal: yToPx(v), seriesIdx: s, catIdx: i, value: v, round: true }); + const off = g + s * (groupSize / nS) + (groupSize / nS - each) / 2; + const r = rect(off, each, base, valuePos(v)); + out.push({ ...r, side: barSide(h, v), seriesIdx: s, catIdx: i, value: v, round: true }); } } } @@ -334,7 +385,7 @@ function CartesianChart(p: SubProps): JSXElement { // Line/area paths, one per series. Stacked areas ride on the running total below. const paths = createMemo(() => { if (p.props.kind !== "line" && p.props.kind !== "area") return [] as LineMark[]; - const count = n(), base = baselineY(); + const count = n(), base = baseValue(); const smooth = p.props.curve === "smooth"; const stackAcc = new Array(count).fill(0); return p.props.series.map((s, si) => { @@ -344,8 +395,8 @@ function CartesianChart(p: SubProps): JSXElement { const v = s.data[i] ?? 0; const yTop = p.props.stacked ? stackAcc[i] + v : v; const yBot = p.props.stacked ? stackAcc[i] : 0; - pts.push([bandCenter(i), yToPx(yTop)]); - lowerPts.push([bandCenter(i), p.props.stacked ? yToPx(yBot) : base]); + pts.push([catCenter(i), valuePos(yTop)]); + lowerPts.push([catCenter(i), p.props.stacked ? valuePos(yBot) : base]); if (p.props.stacked) stackAcc[i] = yTop; } const line = smooth ? smoothPathD(pts) : linePathD(pts); @@ -362,34 +413,59 @@ function CartesianChart(p: SubProps): JSXElement { // The whole SVG interior, as a string (see the file header for why innerHTML and not // JSX marks). Recomputed when the data, the size, or the hovered index changes. const body = createMemo(() => { - const l = layout(), d = domain(), hv = hover(); + const l = layout(), d = domain(), hv = hover(), h = horiz(); const out: string[] = []; + // gridlines + value ticks (perpendicular to the value axis) for (const t of d.ticks) { - const y = yToPx(t); - if (showGrid()) out.push(``); - if (showAxes()) out.push(`${esc(p.fmt(t))}`); + const vp = valuePos(t); + if (showGrid()) { + out.push(h + ? `` + : ``); + } + if (showAxes()) { + out.push(h + ? `${esc(p.fmt(t))}` + : `${esc(p.fmt(t))}`); + } } - const by = baselineY(); - out.push(``); + // baseline (the value-0 line), a touch stronger than the grid + const bv = baseValue(); + out.push(h + ? `` + : ``); + // category labels (along the category axis) if (showAxes()) { labels().forEach((lab, i) => - out.push(`${esc(lab)}`)); + out.push(h + ? `${esc(lab)}` + : `${esc(lab)}`)); } // crosshair (line/area only — a bar reader aims at a bar, not a hairline) if (p.props.tooltip !== false && hv !== null && !isBar()) { - const x = bandCenter(hv); - out.push(``); + const c = catCenter(hv); + out.push(``); } - for (const b of bars()) { - const op = hv === null || hv === b.catIdx ? 1 : 0.5; - out.push(``); + // bars — flat or extruded. 3D draws back-to-front so nearer bars overlap farther ones. + const bs = bars(); + if (threeD()) { + for (const b of bs) { + const op = hv === null || hv === b.catIdx ? 1 : 0.5; + out.push(bar3D(b.x, b.y, b.w, b.h, esc(p.colorOf(b.seriesIdx)), op, dx(), dy())); + } + } else { + for (const b of bs) { + const op = hv === null || hv === b.catIdx ? 1 : 0.5; + out.push(``); + } } + // areas then lines (3D does not apply — depth reads as noise on a line). for (const pth of paths()) { if (p.props.kind === "area") out.push(``); } @@ -411,11 +487,15 @@ function CartesianChart(p: SubProps): JSXElement { const onMove = (e: PointerEvent) => { if (p.props.tooltip === false) return; const rect = (e.currentTarget as SVGElement).getBoundingClientRect(); - const idx = clamp(Math.floor((e.clientX - rect.left - layout().left) / bandW()), 0, Math.max(0, n() - 1)); - setHover(idx); - setPointerY(e.clientY - rect.top); + const px = e.clientX - rect.left, py = e.clientY - rect.top; + const along = horiz() ? py - layout().top : px - layout().left; + setHover(clamp(Math.floor(along / bandFull()), 0, Math.max(0, n() - 1))); + setPointer([px, py]); }; + const anchorX = () => (horiz() ? pointer()[0] : catCenter(hover()!)); + const anchorY = () => (horiz() ? catCenter(hover()!) : pointer()[1]); + return ( <> + anchorX={anchorX()} anchorY={anchorY()} width={p.width} height={p.height} /> ); } -interface BarMark { x: number; w: number; yBase: number; yVal: number; seriesIdx: number; catIdx: number; value: number; round: boolean; } -interface LineMark { seriesIdx: number; line: string; area: string; pts: [number, number][]; } +function barSide(horiz: boolean, v: number): BarSide { + return horiz ? (v >= 0 ? "right" : "left") : (v >= 0 ? "top" : "bottom"); +} function CartesianTooltip(p: { props: ChartProps; colorOf: (i: number) => string; fmt: (v: number) => string; @@ -466,19 +547,26 @@ function RadialChart(p: SubProps): JSXElement { const [hover, setHover] = createSignal(null); const [pointer, setPointer] = createSignal<[number, number]>([0, 0]); + const threeD = () => !!p.props.threeD; + const depth = () => p.props.depth ?? DEFAULT_DEPTH; + const tilt = () => (threeD() ? 0.62 : 1); // vertical squash of the disc when tilted + const values = () => p.props.series[0]?.data ?? []; const labels = () => p.props.labels ?? values().map((_, i) => String(i + 1)); const total = () => values().reduce((a, v) => a + Math.max(0, v), 0); const geo = () => { - const cx = p.width / 2, cy = p.height / 2; - const rOut = Math.max(0, Math.min(p.width, p.height) / 2 - 8); + const k = tilt(); + const cx = p.width / 2; + // tilting shrinks the disc's height to k·2r and adds `depth` below; keep it centred. + const rOut = Math.max(0, Math.min(p.width, p.height - (threeD() ? depth() : 0)) / 2 - 8); + const cy = p.height / 2 - (threeD() ? depth() / 2 : 0); const rIn = p.props.kind === "donut" ? rOut * (p.props.donutRatio ?? 0.6) : 0; - return { cx, cy, rOut, rIn }; + return { cx, cy, rOut, rIn, k }; }; // Slices with their angular spans. A lone value becomes a full ring (drawn as a - // circle, since an arc from 0° to 360° collapses). + // circle/ellipse, since an arc from 0° to 360° collapses). const slices = createMemo(() => { const t = total(); const out: { idx: number; a0: number; a1: number; value: number }[] = []; @@ -491,20 +579,44 @@ function RadialChart(p: SubProps): JSXElement { return out; }); + // The extruded rim under one slice: the front-facing part of its outer arc (angles + // 90°–270°, where the ellipse edge dips below centre) swept down by `depth`. + const wall = (g: ReturnType, a0: number, a1: number): string => { + const w0 = Math.max(a0, 90), w1 = Math.min(a1, 270); + if (w1 <= w0) return ""; + const [x0, y0] = tiltPoint(g.cx, g.cy, g.rOut, w0, g.k); + const [x1, y1] = tiltPoint(g.cx, g.cy, g.rOut, w1, g.k); + const large = w1 - w0 > 180 ? 1 : 0; + return `M${x0},${y0} A${g.rOut},${g.k * g.rOut} 0 ${large} 1 ${x1},${y1}` + + ` L${x1},${y1 + depth()} A${g.rOut},${g.k * g.rOut} 0 ${large} 0 ${x0},${y0 + depth()} Z`; + }; + const body = createMemo(() => { const g = geo(), hv = hover(); const out: string[] = []; const positive = slices().filter((s) => s.value > 0); - if (positive.length === 1) { - // one value: a full ring, since a 360° arc collapses to nothing + const single = positive.length === 1; + + // 3D: draw every slice's rim first (the disc's thickness), then the top faces on top. + if (threeD()) { + for (const s of single ? positive : slices()) { + if (s.a1 <= s.a0) continue; + const d = single ? wall(g, 90, 270) : wall(g, s.a0, s.a1); + if (!d) continue; + const c = esc(p.colorOf(s.idx)); + out.push(``); + } + } + + if (single) { const s = positive[0]; - out.push(``); - if (g.rIn > 0) out.push(``); + out.push(``); + if (g.rIn > 0) out.push(``); } else { for (const s of slices()) { if (s.a1 <= s.a0) continue; const op = hv === null || hv === s.idx ? 1 : 0.55; - out.push(``); + out.push(``); } } return out.join(""); @@ -515,11 +627,9 @@ function RadialChart(p: SubProps): JSXElement { const rect = (e.currentTarget as SVGElement).getBoundingClientRect(); const g = geo(); const px = e.clientX - rect.left, py = e.clientY - rect.top; - const dx = px - g.cx, dy = py - g.cy; + const dx = px - g.cx, dy = (py - g.cy) / g.k; // undo the tilt to test against a circle const dist = Math.hypot(dx, dy); if (dist > g.rOut || (g.rIn > 0 && dist < g.rIn)) { setHover(null); return; } - // pointOnCircle maps deg (from 12 o'clock, clockwise) to (cos(deg-90), sin(deg-90)); - // invert it: the pointer's slice angle is atan2(dy,dx) shifted back by 90°. let deg = (Math.atan2(dy, dx) * 180 / Math.PI + 90 + 360) % 360; const s = slices().find((s) => s.value > 0 && deg >= s.a0 && deg < s.a1); setHover(s ? s.idx : null); diff --git a/go/jsruntime/uikit/Theme.tsx b/go/jsruntime/uikit/Theme.tsx index 88ef520d..97cb4e17 100644 --- a/go/jsruntime/uikit/Theme.tsx +++ b/go/jsruntime/uikit/Theme.tsx @@ -7,7 +7,7 @@ // the kit are none the wiser. // // The storage key is deliberately the SAME one the Go/WASM kit uses -// (webui.ThemeBootScript, webui.themeStorageKey). Both layers of kjol-web are served +// (webui.ThemeBootScript, webui.themeStorageKey). Both layers of kjol-website are served // from one origin, so they share a localStorage: choose dark in the /wasm section, // walk over to /js, and it is still dark. Two front-ends, one preference. diff --git a/go/jsruntime/uikit/USHeatmap.tsx b/go/jsruntime/uikit/USHeatmap.tsx new file mode 100644 index 00000000..f7729a82 --- /dev/null +++ b/go/jsruntime/uikit/USHeatmap.tsx @@ -0,0 +1,234 @@ +import { createMemo, createSignal, For, Show, JSXElement } from "solid-js"; +import { US_STATES, US_VIEWBOX } from "./usStates.ts"; + +// A choropleth of the 50 states + DC, plus optional lat/lng markers. Like uikit/Chart it +// draws SVG as an innerHTML string (the Go Solid compiler will not namespace control-flow +// SVG — see Chart.tsx). The state boundaries are pre-projected with d3's albersUsa into a +// 960×600 box (usStates.ts); the SAME projection is reimplemented below so that lat/lng +// points land exactly on top of the states. It is a faithful, dependency-free port — +// validated to 0px against d3-geo, Alaska and Hawaii insets included. +// +// The map scales by viewBox rather than by measurement (there is no axis text to keep +// crisp), so no ResizeObserver: viewBox 960×600 + a 960/600 aspect-ratio box fills the +// column. Hover reads e.target's data-attributes — the specific state path or point marker +// under the pointer — so no coordinate maths is needed to know what is being pointed at. + +// ── the albersUsa projection (ported from d3-geo, scale 1280, translate [480,300]) ────── + +const RAD = Math.PI / 180, TAU = 2 * Math.PI; +function conicEqualAreaRaw(y0: number, y1: number) { + const sy0 = Math.sin(y0), n = (sy0 + Math.sin(y1)) / 2; + const c = 1 + sy0 * (2 * n - sy0), r0 = Math.sqrt(c) / n; + return (lambda: number, phi: number): [number, number] => { + const r = Math.sqrt(c - 2 * n * Math.sin(phi)) / n; + return [r * Math.sin(lambda * n), r0 - r * Math.cos(lambda * n)]; + }; +} +// One conic-equal-area lobe. `center` is given in the rotated frame (near 0° lon), so it is +// not re-rotated; the input point is rotated by `rotateLon` before projecting. +function albersLobe(rotateLon: number, centerLon: number, centerLat: number, p0: number, p1: number, scale: number, tx: number, ty: number) { + const raw = conicEqualAreaRaw(p0 * RAD, p1 * RAD); + const rot = (lon: number) => { const l = (lon + rotateLon) * RAD; return ((l + Math.PI) % TAU + TAU) % TAU - Math.PI; }; + const [cx, cy] = raw(centerLon * RAD, centerLat * RAD); + return (lon: number, lat: number): [number, number] => { + const [x, y] = raw(rot(lon), lat * RAD); + return [tx + scale * (x - cx), ty - scale * (y - cy)]; + }; +} +const K = 1280, TX = 480, TY = 300, EPS = 1e-6; +const _lower48 = albersLobe(96, -0.6, 38.7, 29.5, 45.5, K, TX, TY); +const _alaska = albersLobe(154, -2, 58.5, 55, 65, K * 0.35, TX - 0.307 * K, TY + 0.201 * K); +const _hawaii = albersLobe(157, -3, 19.9, 8, 18, K, TX - 0.205 * K, TY + 0.212 * K); +const inBox = (p: [number, number], x0: number, y0: number, x1: number, y1: number) => + p[0] >= x0 && p[0] <= x1 && p[1] >= y0 && p[1] <= y1; + +// Project [lng, lat] to the 960×600 map, choosing the lower-48 / Alaska / Hawaii lobe the +// way albersUsa does — by which one's clip box the point falls in. null if off-map. +export function projectUS(lng: number, lat: number): [number, number] | null { + let p = _lower48(lng, lat); + if (inBox(p, TX - 0.455 * K, TY - 0.238 * K, TX + 0.455 * K, TY + 0.238 * K)) return p; + p = _alaska(lng, lat); + if (inBox(p, TX - 0.425 * K + EPS, TY + 0.120 * K + EPS, TX - 0.214 * K - EPS, TY + 0.234 * K - EPS)) return p; + p = _hawaii(lng, lat); + if (inBox(p, TX - 0.214 * K + EPS, TY + 0.166 * K + EPS, TX - 0.115 * K - EPS, TY + 0.234 * K - EPS)) return p; + return null; +} + +// ── the component ──────────────────────────────────────────────────────────────── + +export interface USHeatmapPoint { + lat: number; + lng: number; + value?: number; + label?: string; +} + +export interface USHeatmapProps { + // State value map: USPS code (e.g. "CA", "TX", "DC") → number. States present are + // shaded on the sequential ramp; states absent are drawn in the no-data neutral. + data?: Record; + // lat/lng markers, projected onto the map. Points outside the US are dropped. + points?: USHeatmapPoint[]; + + height?: number; // px; omit to size from the container width (960:600 aspect). + class?: string; + steps?: number; // choropleth buckets, 1–6 (default 6, the token count). + tooltip?: boolean; + valueFormat?: (v: number) => string; + pointColor?: string; // default var(--color-chart-1) (blue). + pointRadius?: number; // fixed dot radius (default 5); the MAXIMUM radius when proportional. + // Scale each dot's AREA by its value (radius ∝ √value) so a bigger dot means "more" — + // area, not radius, because the eye reads a circle by its area. + proportional?: boolean; + // Override a state's tooltip name (default the built-in full name). + stateName?: (code: string) => string; +} + +const CHOROPLETH_STEPS = 6; // must match --color-choropleth-1..N in theme.css +const POINT_OPACITY = 0.85; // dots are slightly see-through so the state beneath still reads +const _intl = () => new Intl.NumberFormat("en-US", { maximumFractionDigits: 2 }); +let _fmt: Intl.NumberFormat | null = null; +const defaultFormat = (v: number) => (Number.isFinite(v) ? (_fmt ??= _intl()).format(v) : String(v)); +const clamp = (v: number, lo: number, hi: number) => Math.min(hi, Math.max(lo, v)); +const esc = (s: unknown) => + String(s).replace(/[&<>"]/g, (c) => (c === "&" ? "&" : c === "<" ? "<" : c === ">" ? ">" : """)); + +type Hover = + | { kind: "state"; code: string } + | { kind: "point"; idx: number } + | null; + +export function USHeatmap(props: USHeatmapProps): JSXElement { + let wrap: HTMLDivElement | undefined; + const [hover, setHover] = createSignal(null); + const [pointer, setPointer] = createSignal<[number, number]>([0, 0]); + + const fmt = (v: number) => (props.valueFormat ?? defaultFormat)(v); + const steps = () => clamp(props.steps ?? CHOROPLETH_STEPS, 1, CHOROPLETH_STEPS); + const stateName = (code: string) => (props.stateName ? props.stateName(code) : US_STATES[code]?.name ?? code); + + // The value range across the states that have data, for quantising into ramp buckets. + const range = createMemo(() => { + const vals = Object.values(props.data ?? {}).filter((v) => Number.isFinite(v)); + return vals.length ? { min: Math.min(...vals), max: Math.max(...vals), has: true } : { min: 0, max: 0, has: false }; + }); + const bucket = (v: number) => { + const r = range(); + const t = r.max > r.min ? (v - r.min) / (r.max - r.min) : 1; + return clamp(Math.floor(t * steps()), 0, steps() - 1) + 1; + }; + + // projected markers (drop anything off-map), kept with their original index for hover. + const points = createMemo(() => + (props.points ?? []).map((pt, idx) => ({ pt, idx, xy: projectUS(pt.lng, pt.lat) })) + .filter((m): m is { pt: USHeatmapPoint; idx: number; xy: [number, number] } => m.xy !== null)); + + const body = createMemo(() => { + const data = props.data ?? {}; + const hv = hover(); + const proportional = !!props.proportional; + const maxR = props.pointRadius ?? (proportional ? 16 : 5); + const minR = Math.min(3, maxR * 0.35); + const maxV = proportional ? Math.max(1, ...points().map((m) => Math.max(0, m.pt.value ?? 0))) : 1; + const radiusOf = (v: number | undefined) => + proportional ? minR + (maxR - minR) * Math.sqrt(clamp((v ?? 0) / maxV, 0, 1)) : maxR; + const pc = esc(props.pointColor ?? "var(--color-chart-1)"); + const out: string[] = []; + + for (const code in US_STATES) { + const st = US_STATES[code]; + const has = Object.prototype.hasOwnProperty.call(data, code) && Number.isFinite(data[code]); + const fill = has ? `var(--color-choropleth-${bucket(data[code])})` : "var(--color-surface-strong)"; + const isHover = hv?.kind === "state" && hv.code === code; + out.push(``); + } + + for (const m of points()) { + const isHover = hv?.kind === "point" && hv.idx === m.idx; + const r = radiusOf(m.pt.value); + out.push(``); + } + return out.join(""); + }); + + const onMove = (e: PointerEvent) => { + if (props.tooltip === false) return; + const t = e.target as Element; + const pIdx = t.getAttribute?.("data-pt"); + const code = t.getAttribute?.("data-state"); + if (pIdx != null) setHover({ kind: "point", idx: +pIdx }); + else if (code != null) setHover({ kind: "state", code }); + else setHover(null); + if (wrap) { + const r = wrap.getBoundingClientRect(); + setPointer([e.clientX - r.left, e.clientY - r.top]); + } + }; + + const tip = createMemo(() => { + const hv = hover(); + if (!hv) return null; + if (hv.kind === "point") { + const pt = (props.points ?? [])[hv.idx]; + if (!pt) return null; + return { + title: pt.label ?? `${pt.lat.toFixed(2)}, ${pt.lng.toFixed(2)}`, + value: pt.value != null ? fmt(pt.value) : "", + swatch: props.pointColor ?? "var(--color-chart-1)", + }; + } + const v = (props.data ?? {})[hv.code]; + const has = v != null && Number.isFinite(v); + return { + title: stateName(hv.code), + value: has ? fmt(v) : "no data", + swatch: has ? `var(--color-choropleth-${bucket(v)})` : "var(--color-surface-strong)", + }; + }); + + return ( +
+ setHover(null)} /> + + + {(t) => ( +
+
+ + {t().title} +
+ +
{t().value}
+
+
+ )} + + + + + +
+ ); +} + +function ChoroplethLegend(p: { min: number; max: number; steps: number; fmt: (v: number) => string }): JSXElement { + const swatches = () => Array.from({ length: p.steps }, (_, i) => i + 1); + return ( +
+ {p.fmt(p.min)} +
+ {(k) => ( + + )} +
+ {p.fmt(p.max)} +
+ ); +} diff --git a/go/jsruntime/uikit/usStates.ts b/go/jsruntime/uikit/usStates.ts new file mode 100644 index 00000000..6001771d --- /dev/null +++ b/go/jsruntime/uikit/usStates.ts @@ -0,0 +1,56 @@ +// Generated: US state boundaries, d3 geoAlbersUsa().scale(1280).translate([480,300]) → 960x600. +export interface USStateShape { name: string; d: string; } +export const US_VIEWBOX = "0 0 960 600"; +export const US_STATES: Record = { + AK: { name: "Alaska", d: "M109.3,536.3L109.4,536.0L109.6,536.1L109.4,536.4ZM108.0,550.6L108.4,549.9L108.6,550.0L108.6,550.3L108.2,550.9L108.0,550.7ZM105.1,552.1L105.4,552.2L105.4,552.5ZM104.3,552.3L104.6,552.4L104.5,552.6L104.3,552.5ZM103.7,552.0L104.0,552.0L103.9,552.3ZM103.8,559.5L104.0,559.2L104.2,559.2L104.1,559.7L103.9,559.9ZM102.9,554.0L103.1,553.8L103.4,554.0L102.9,554.1ZM102.6,542.8L103.0,542.3L103.0,541.5L103.5,541.7L103.1,542.1L103.0,542.5L103.1,542.6ZM101.8,554.1L102.0,553.7L102.2,553.9L102.6,553.9L102.1,554.1ZM100.5,544.3L100.7,544.2L100.8,544.8ZM97.6,560.8L98,560.2L98.2,560.2L98.6,560.6L98.7,560.5L98.4,560.0L98.5,559.7L98.6,559.6L99.0,559.8L99.3,559.6L98.9,559.3L99.1,558.9L99.5,559.1L99.7,559.1L99.5,558.7L99.7,558.6L100.0,558.7L100.2,558.4L99.9,558.4L99.7,558.1L100.0,558.1L100.3,557.7L100.8,557.5L100.7,557.3L100.6,556.8L101.0,556.4L101.1,556.6L101.9,556.2L102.0,556.3L101.8,557.1L101.6,557.2L101.3,557.9L101.3,558.5L101.9,558.4L101.9,557.9L102.2,558.0L102.5,558.4L102.8,558.1L103.0,558.3L102.8,559.1L102.9,559.3L103.0,558.8L103.4,558.4L103.5,558.6L103.5,559.4L103.1,560.0L102.6,559.9L102.4,559.3L102.1,559.5L102.3,560.2L102.0,560.3L101.4,560.2L101.2,560.6L101.1,560.4L101.1,559.9L100.9,559.9L100.8,560.6L100.7,560.8L100.3,560.9L100.3,561.2L100.1,561.3L99.4,561.4L98.1,560.9L97.8,561.0ZM96.9,550.4L97.5,550.2L97.8,550.5L97.7,550.8L97.5,550.9L97.1,551.0L96.9,550.6ZM94.5,571.6L95.0,571.3L95.1,571.6L94.5,571.7ZM93.6,572.7L93.9,572.3L94.2,572.2L94.4,572.3L94.8,572.2L94.9,572.4L95.1,572.7L95.7,572.6L95.7,572.8L95.4,573.0L94.7,573.1L94.2,573.2L93.7,573.0ZM91.9,566.3L92.2,566.2L92.3,565.7L92.5,565.1L92.9,564.9L93.0,564.6L93.2,564.7L93.7,564.2L94.2,564.0L94.8,564.1L95.3,564.1L95.3,564.8L95.6,565.2L95.7,564.9L96.0,564.5L95.7,564.2L95.8,564.1L96.6,564.1L96.5,563.9L95.7,563.6L95.5,563.6L95.4,562.8L95.9,562.4L96.3,562.2L96.6,562.3L97.0,562.6L97.1,563.5L97.3,563.4L97.4,562.9L97.3,562.6L97.9,562.8L98.0,562.5L97.4,562.3L97.1,561.9L97.2,561.6L97.5,561.6L98.2,562.2L98.3,562.2L98.8,562.4L99.0,562.4L98.5,561.9L98.2,561.6L98.1,561.3L98.3,561.3L98.8,561.7L99.2,561.6L99.8,561.8L99.9,561.5L100.5,561.4L100.3,561.8L99.8,562.5L99.7,563.1L100.0,563.3L100.0,562.7L100.2,562.4L100.4,562.7L100.5,562.4L100.8,562.2L100.8,561.9L101.0,561.8L101.2,562.0L101.5,561.5L101.8,561.5L101.7,561.8L102.1,561.9L102.0,562.1L101.8,562.0L101.5,562.1L101.8,562.4L101.8,562.7L102.0,562.5L102.2,562.9L102.6,562.9L102.3,563.2L102.0,563.0L101.7,563.0L101.4,563.3L101.7,563.4L101.6,563.7L102.0,563.8L101.6,564.4L101.9,564.3L102.1,564.0L102.2,564.2L102.9,564.2L102.9,564.5L102.3,565.0L102.2,565.8L101.6,565.7L101.5,565.4L101.4,565.7L101.0,565.4L100.8,565.5L100.4,565.2L100.2,565.2L99.9,565.1L99.7,565.4L100.1,565.4L100.4,565.5L101.1,566.1L101.0,566.6L100.6,566.9L100.4,566.7L100.2,567.0L99.9,566.8L99.8,566.6L99.5,566.5L99.2,566.6L98.9,566.8L99.3,566.8L99.6,567.1L99.1,567.5L98.6,567.4L98.5,567.5L98.9,567.8L99.1,567.7L99.6,567.7L100.0,567.9L99.8,568.1L99.4,568.2L98.9,568.4L98.8,568.4L98.5,568.5L98.6,568.9L98.2,569.2L98.0,569.1L98.1,568.9L97.7,568.5L97.8,568.2L98.2,567.8L98.1,567.6L97.9,567.8L97.4,568.5L97.3,568.6L97.0,568.4L96.6,568.5L96.6,568.7L97.0,568.8L97.1,569.2L96.9,569.6L96.5,569.7L96.5,570.2L96.1,570.5L95.9,570.4L95.6,571.0L95.3,571.2L95.0,571.0L94.5,571.2L94.9,570.4L95.1,570.3L95.5,569.8L95.8,569.6L95.8,569.4L95.3,569.5L95.3,569.2L95.7,568.5L96.1,568.1L96,567.9L95.8,568.2L95.3,568.6L94.9,569.4L94.5,569.8L94.3,569.9L94.2,570.2L93.9,570.4L93.8,569.8L93.5,569.4L93.0,569.2L93.0,568.5L92.9,567.8L92.8,567.3L92.6,567.1L92.2,566.9L91.8,566.9L92.0,566.7L91.8,566.4ZM91.7,573.6L92.1,572.9L92.9,572.3L93.3,572.3L93.5,572.7L93.3,572.8L92.5,573.3L92.0,573.8ZM87.5,578.3L87.9,578.0L88.0,577.7L88.2,577.6L88.3,577.8L88.2,578.1L88.3,578.6L88.2,578.8L87.6,578.7ZM83.2,576.5L83.3,576.1L83.5,576.0L83.7,576.4L83.5,576.8ZM83.0,575.2L83.2,575.0L83.2,575.5L83.0,575.5ZM80.9,572.4L81.2,572.1L82.0,572.2L82.3,572.5L81.8,572.4L81.5,572.5L80.9,572.5ZM78.3,573.8L78.6,573.6L78.8,574.0L78.6,574.1ZM73.7,577.6L73.9,577.1L74.2,577.1L74.6,577.5L74.4,577.6L74.1,577.3ZM72.7,577.1L72.9,577.4L72.5,577.3ZM71.3,584.7L71.3,584.4L71.5,584.3L71.8,584.5L71.6,584.9L71.3,584.9ZM71.5,578.0L71.7,577.6L71.9,577.5L72.0,577.9ZM70.7,584.2L70.9,583.7L70.8,583.3L71.3,583.4L71.3,584.1L70.8,584.3ZM70.0,585.2L70.1,585.1L70.4,585.4L70.3,585.7L70.0,585.7ZM70.0,582.3L70.2,582.4L70.3,582.1L70.6,581.8L70.7,582.0L70.5,582.3L70.7,582.4L70.7,582.7L70.5,583.1L70.6,583.4L70.5,583.5L70.3,583.3L70.2,583.4L69.9,583.4ZM69.0,585.1L69.3,584.9L69.5,585.2L69.2,585.3ZM69.0,583.2L69.2,583.0L69.6,582.7L69.6,583.0L69.3,583.2L69.1,583.6ZM68.0,581.0L68.3,580.9L68.3,581.2ZM67.1,584.0L67.7,583.4L68.0,583.3L67.9,583.2L67.6,583.1L67.6,582.6L67.9,582.3L68.3,582.6L68.3,582.4L68.2,582.0L68.6,582.1L69.0,581.4L69.2,581.6L69.1,581.9L69.0,581.9L68.8,582.4L69.0,582.5L69.0,582.3L69.3,582.3L69.2,582.7L69.0,582.9L68.6,582.8L68.6,583.1L68.1,583.5L67.8,583.7L67.2,584.6ZM69.6,554.7L69.7,554.4L69.9,555.0L69.8,555.1ZM67.1,580.1L67.5,579.9L68.0,580.0L68.0,580.6L67.2,580.4ZM69.2,554.7L69.3,554.2L69.4,554.6ZM64.7,580.8L65.0,580.3L65.5,580.2L65.7,580.3L65.7,580.7L65.8,580.6L66.1,580.3L66.3,580.6L66.7,580.8L67.1,580.7L67.2,581.1L67.0,581.5L66.8,581.2L66.4,581.2L66.2,581.0L66.2,580.7L66.0,580.8L66.0,581.2L66.2,581.4L66.3,582.0L66.1,582.4L65.5,582.1L65.4,581.7L65.1,581.8L64.7,582.3L64.8,582.0L64.7,581.6L64.8,581.0ZM66.5,555.2L66.7,554.3L67.3,554.0L67.6,554.0L68.2,553.6L68.3,553.6L67.3,555.3L66.9,555.5L66.5,555.5ZM62.1,581.3L62.6,581.3L62.4,581.8L62.1,581.4ZM61.0,581.1L61.1,580.9L61.7,581.0L61.5,581.3L60.9,581.3ZM59.9,581.8L60.0,581.5L60.3,581.4L60.7,581.5L60.9,581.8L61.4,582.1L61.5,582.4L61.0,582.0L60.6,582.4L60.2,581.8L60.0,582.1ZM57.4,583.0L57.9,582.6L58.3,582.8L58.2,583.4L58.0,583.7L57.8,583.8L57.4,583.4ZM65.1,515.5L65.4,515.3L65.7,515.2L66.0,515.4L66.2,515.4L66.3,515.6L66.3,516.0L65.3,515.9L65.1,515.8ZM55.1,586.4L55.2,586.1L56.2,586.6L56.5,586.9L56.9,587.0L57.2,587.2L56.8,587.3L56.7,587.5L56.3,587.2L56.0,587.2L55.6,586.9L55.3,587.1L55.0,586.6ZM54.6,578.7L54.9,578.7L54.7,578.9ZM45.7,587.0L45.9,586.8L46.1,587.0L45.7,587.2ZM43.9,587.5L44.3,587.3L44.8,587.5L45.2,587.4L45.3,587.6L45.1,587.9L44.7,587.9L43.9,587.6ZM42.7,587.5L43.7,587.5L43.8,587.8L43.5,587.9L43.4,587.7L42.8,587.6ZM42.2,587.7L42.5,587.5L42.6,587.8L42.3,587.8ZM42.0,586.0L42.3,585.7L42.5,585.8L42.8,585.7L43.0,585.9L42.6,586.1L42.8,586.4L43.2,586.5L43.2,586.8L42.8,586.7L42.5,587.2L42.1,586.9L42.2,586.4L42.5,586.2L42.3,586.1L42.1,586.2ZM40.0,586.5L40.1,586.2L40.6,586.0L41.1,586.1L41.1,586.5L41.4,586.5L41.6,586.7L41.7,587.0L41.9,586.9L41.9,587.2L41.4,587.3L41.2,587.2L40.9,587.5L40.8,587.3L40.4,587.2L40.1,587.3L39.9,586.6ZM39.3,587.6L39.5,587.5L39.9,587.8L39.3,587.8ZM43.5,538.7L44.0,538.7L44.8,538.8L45.1,539.0L45.4,539.0L45.5,539.2L45.8,539.2L46.0,539.0L45.9,538.7L46.5,538.4L46.9,538.6L47.0,538.3L47.4,538.1L47.8,538.4L48.2,538.3L48.5,538.3L48.7,537.9L48.8,538.9L49.2,539.0L49.6,538.8L50.0,539.1L50.3,539.4L50.1,539.8L50.2,540.1L50.0,540.3L50.2,540.4L50.1,540.9L49.9,541.1L50.1,541.5L50.1,541.9L50.4,541.9L50.2,542.1L50.2,542.4L49.2,542.4L49.0,542.6L48.8,542.4L48.4,542.5L48.0,542.8L48.0,543.2L47.6,543.2L47.4,542.7L46.9,542.3L46.1,542.2L46.0,541.9L45.6,541.7L45.3,541.2L44.9,540.9L44.4,540.6L44.0,540.1L43.7,539.9L43.8,539.5ZM30.8,591.2L31.1,591.1L31.5,590.9L31.9,590.9L32.6,590.8L32.8,590.6L33.2,590.9L33.5,590.8L33.7,590.5L34.0,590.7L34.2,590.3L34.5,590.4L34.4,589.7L34.8,589.5L34.9,589.7L35.1,589.6L34.9,589.3L35.0,589.0L35.3,589.0L35.8,589.1L35.8,589.5L36.1,589.5L36.1,589.2L36.3,589.0L35.5,588.5L35.2,588.6L34.8,588.0L34.9,587.7L35.5,587.2L36.3,587.0L36.9,586.9L37.0,587.0L37.4,587.0L37.5,587.5L37.2,587.7L37.3,587.9L37.5,588.1L37.8,587.8L37.9,588.0L38.2,587.9L38.2,587.6L38.6,587.3L38.8,587.7L39.0,587.6L39.2,588.0L39.0,588.4L38.6,588.4L38.1,588.8L37.4,589.1L37.4,589.4L38.0,589.1L39.0,588.9L39.1,588.8L39.5,588.7L39.6,588.8L39.4,589.3L39.1,589.6L38.6,589.7L38.5,589.8L37.7,590.0L37.2,590.1L37.3,590.4L37.1,590.4L36.9,590.8L36.7,590.6L36.5,591.0L36.2,590.8L36.0,591.3L35.4,591.3L35.1,591.0L34.9,591.2L34.7,591.0L34.3,591.2L34.2,591.1L33.4,591.4L33.3,591.6L33.0,591.5L32.7,591.6L32.4,591.9L31.9,591.7L31.7,592.0L31.0,591.5ZM49.9,496.5L50.1,496.3L50.5,496.0L52.0,495.6L52.9,495.3L53.5,494.9L54.1,494.6L54.6,494.3L55.7,493.8L56.4,493.5L58.2,492.7L60.3,492.0L61.9,491.7L62.9,491.6L64.4,491.7L65.0,491.8L65.3,492.1L64.8,492.1L64.9,492.4L64.7,492.8L64.3,493.3L64.2,493.8L64.3,494.1L64.0,494.5L63.4,494.6L63.4,494.8L63.9,494.8L64.2,495.9L64.7,496.0L65.1,495.8L65.6,495.9L66.1,496.1L66.7,496.1L67.5,496.1L67.8,496.5L68.4,496.5L68.5,496.7L69.2,496.6L69.4,496.4L70.3,497.0L70.5,496.6L70.9,496.3L71.4,495.4L71.6,495.2L72.1,495.4L72.1,495.6L72.5,495.7L72.8,495.6L73.1,495.6L72.8,494.9L72.1,494.4L71.6,494.2L71.1,494.1L70.3,494.5L70.6,493.7L70.6,493.2L70.0,492.3L69.8,491.7L69.6,491.4L68.9,491.3L68.9,490.9L68.6,490.2L68.8,489.9L69.1,489.8L69.2,489.6L69.4,489.8L69.6,489.7L69.9,490.3L70.2,490.9L70.4,491.0L70.2,491.7L70.1,492.1L70.4,492.4L70.9,493.3L71.5,493.8L71.9,493.8L72.3,493.6L72.4,493.3L71.9,493.2L71.9,492.9L71.3,492.4L70.8,491.6L70.9,491.2L71.0,490.8L71.2,490.7L71.2,490.3L71.6,489.8L71.9,490.0L72.2,490.0L72.2,489.8L71.8,489.4L71.6,489.4L71.3,489.0L70.3,489.1L70.0,489.3L69.6,489.3L69.1,489.3L68.8,489.2L68.6,488.9L68.4,488.9L68.2,488.8L68.1,489.1L67.7,488.8L66.8,488.4L66.2,488.1L65.7,487.9L65.5,487.7L65.6,487.0L65.5,485.9L65.2,484.4L65.1,484.0L64.7,483.5L63.9,482.7L62.6,480.9L62.4,480.8L62.0,480.1L61.5,479.7L61.0,479.3L60.5,479.1L60.2,478.8L60.1,478.3L59.6,477.7L59.2,477.3L58.5,476.9L58.0,476.8L58.4,476.6L59.5,476.4L59.7,476.2L59.8,475.8L60.1,475.4L60.5,473.8L60.6,473.1L62.3,473.6L63.0,473.7L64.5,473.6L65.3,473.6L66.1,473.6L67.0,473.3L67.5,472.9L67.8,472.8L68.4,472.3L69.4,471.2L69.7,470.6L69.8,470.1L70.0,468.8L70.6,467.4L71.5,466.3L72.3,465.2L72.7,464.7L74.1,463.8L75.0,464.2L75.7,464.3L76.3,464.1L77.0,463.8L77.9,463.2L78.7,462.5L79.2,462.0L80.4,460.9L80.7,460.7L81.6,460.4L81.7,460.7L82.2,461.0L83.0,461.1L83.6,461.1L83.7,460.9L84.0,461.0L84.6,460.9L85.3,460.6L86.0,460.1L86.7,459.3L87.1,458.8L88.0,457.6L88.6,457.1L88.7,457.6L89.1,457.8L89.5,457.9L89.8,458.0L90.0,458.5L90.2,458.3L91.1,458.6L91.3,459.3L90.7,459.7L90.4,460.1L90.0,460.2L90.1,461.1L90.9,461.2L91.3,460.9L91.2,460.4L91.4,460.3L91.7,459.9L91.9,459.8L92.1,460.1L92.1,459.7L91.9,459.4L92.2,459.1L92.4,459.4L92.4,458.9L92.5,458.8L93.2,459.3L93.6,459.7L93.7,460.0L93.6,460.2L93.6,460.9L93.7,461.3L94.3,461.2L94.6,461.4L94.7,461.7L95.2,461.3L95.5,460.8L96.5,460.8L97.2,460.5L97.7,460.6L98.0,460.8L98.8,460.8L99.4,461.0L99.8,461.2L99.9,461.4L99.7,461.5L99.5,462.1L99.2,462.3L99.4,462.9L99.6,462.8L99.8,463.0L100.2,463.0L100.3,463.2L101.0,463.3L101.3,463.3L101.1,463.5L101.2,463.7L100.7,463.9L100.7,464.1L100.9,464.2L101.7,464.1L102.4,464.4L102.5,464.6L102.8,464.6L103.2,464.0L103.8,463.8L104.0,463.9L104.1,463.7L104.5,463.7L104.7,463.8L104.9,464.2L105.3,464.0L105.7,463.9L106.2,463.3L106.3,463.5L106.7,463.3L106.9,463.4L107.2,463.2L107.4,463.4L108.0,463.4L108.6,463.8L108.9,463.8L109.1,464.0L109.3,463.7L109.6,463.8L110.0,464.2L110.0,464.5L110.3,464.6L110.7,464.3L110.7,464.7L111.0,464.3L111.8,464.7L112.0,465.1L112.2,465.3L112.7,465.2L113.1,465.3L113.4,465.0L113.6,465.5L114.1,465.5L114.3,465.2L114.8,465.2L115.4,465.0L116.0,465.0L116.5,465.2L117.0,465.2L117.1,465.0L117.8,465.5L118.1,465.5L118.5,465.9L118.9,465.9L119.1,466.1L119.6,466.1L119.8,466.2L120.0,466.0L120.6,466.0L121.0,465.5L121.5,465.4L121.5,465.2L122.3,464.8L122.4,464.6L123.2,464.3L123.7,464.4L124.1,464.1L124.2,464.2L125.0,464.5L125.6,464.7L126.3,465.1L126.7,465.5L127.0,465.5L128,466.0L128.7,466.1L129.3,466.4L129.6,466.7L130.2,466.7L130.8,466.8L142.6,526.0L143.9,532.5L145.0,538.3L146.9,538.6L147.0,537.9L149.0,538.5L149.9,537.0L152.2,536.4L152.2,536.7L152.2,538.5L153.0,539.1L154.0,539.4L154.4,539.5L154.7,540.2L155.2,540.6L159.8,543.5L160.8,545.4L160.8,546.0L161.1,545.9L161.6,545.0L162.9,543.6L163.0,543.4L163.9,543.1L164.1,542.1L163.7,540.7L164.2,540.8L164.4,540.6L164.5,540.0L164.5,539.8L163.9,539.6L164.5,539.1L165.3,538.7L166.8,537.1L167.9,537.6L168.4,538.1L168.6,538.1L169.0,538.4L169.2,539.1L169.1,539.3L169.2,539.5L169.5,539.8L169.5,540.1L169.9,540.5L171.0,540.4L171.2,540.9L171.8,541.2L172.1,541.1L172.7,541.7L172.8,542.1L173.2,542.2L173.2,542.5L173.6,542.8L175.5,543.3L176.2,544.0L177.1,544.5L178.0,545.0L177.8,545.4L178.5,546.1L179.4,546.8L180.2,547.8L181.4,548.7L182.2,549.6L182.8,550.2L183.5,550.8L184.6,551.7L185.4,552.6L185.2,553.6L186.6,553.5L186.8,554.9L188.0,555.1L188.0,555.5L188.3,555.8L188.6,556.5L189.6,556.1L190.3,556.4L191.7,556.7L192.2,556.9L193.5,556.8L194.4,557.2L195.2,557.2L195.6,557.9L196.0,557.9L196.5,557.9L197.0,557.6L197.7,558.3L197.9,558.9L197.9,559.7L197.8,560.2L197.9,560.6L198.1,560.8L198.4,561.5L198.8,562.1L199.1,562.3L199.5,563.1L199.8,563.5L199.5,564.3L199.5,565.2L199.5,565.4L199.4,566.1L199.3,566.7L198.9,567.5L198.7,568.0L198.4,568.2L198.6,568.5L198.3,568.7L198.0,568.5L197.9,568.2L197.7,568.1L197.7,568.4L197.6,568.6L197.3,568.6L197.0,568.3L196.7,567.7L196.6,567.3L196.2,567.2L196.1,566.5L196.0,566.5L195.6,566.2L195.4,565.9L195.7,565.3L195.8,564.8L196.0,564.8L195.8,564.3L195.5,563.9L195.4,563.0L194.8,561.9L194.5,561.5L193.5,560.7L193.1,560.5L192.8,560.2L192.8,560.5L193.2,560.7L193.8,561.1L194.1,561.6L194.6,562.0L195.0,562.8L194.9,563.1L195.1,563.7L195.4,564.2L195.7,564.5L195.6,564.8L195.2,564.2L195.1,564.2L195.3,564.6L195.4,565.1L195.1,565.9L194.9,566.0L194.4,565.9L194.5,565.3L194.5,564.8L194.4,564.5L194.0,564.7L194.4,565.1L194.3,565.5L194.0,566.0L193.9,566.0L193.3,565.5L193.2,565.8L192.7,565.6L192.4,565.6L192.1,565.3L191.5,565.0L191.4,564.5L191.8,564.2L192.0,563.7L191.6,563.6L191.5,563.0L191.3,562.8L191.6,562.4L191.5,562.3L191.3,562.4L191.1,561.9L191.1,561.6L190.5,561.9L190.7,562.2L190.9,562.2L191.0,562.5L190.9,563.1L191.1,563.4L190.9,564.0L190.6,564.0L191.0,564.6L190.9,564.9L190.4,564.7L190.0,564.7L189.8,564.5L189.3,563.8L188.9,563.4L189.3,563.5L189.3,563.0L189.6,562.6L189.4,561.6L189.1,561.0L189.1,560.6L189.3,560.7L189.3,560.3L189.2,559.7L189.0,559.9L189.0,560.3L188.8,560.6L188.6,561.1L189.1,561.7L189.0,562.0L188.5,562.2L188.5,562.5L188.6,562.7L188.3,562.9L188.2,562.7L188.1,562.2L187.8,562.2L187.3,561.4L186.9,561.7L187.0,562.0L186.3,561.4L186.0,560.6L186.1,560.4L186.4,560.3L186.4,559.8L186.5,559.5L186.9,559.2L187.3,559.6L187.3,559.2L186.7,558.2L186.8,558.1L187.3,558.3L187.5,558.6L187.7,558.8L187.8,558.6L187.5,558.1L187.1,558.0L186.7,557.8L186.6,557.5L186.4,557.5L186.2,557.7L186.0,557.4L185.6,557.3L185.4,557.0L185.5,556.8L185.3,556.4L184.9,556.3L184.3,556.1L183.9,555.7L183.6,555.6L183.3,555.1L183.6,554.7L183.3,554.4L183.2,554.8L182.9,554.7L182.9,554.9L182.4,554.7L182.0,554.8L181.7,554.5L181.4,554.8L180.4,554.5L180.2,554.1L180.2,553.5L180.5,553.6L181.0,553.4L181.0,553.1L180.7,553.1L180.2,553.1L180.1,552.8L179.6,552.1L179.6,551.5L179.3,551.7L179.1,551.7L178.7,551.4L178.6,550.7L178.9,550.6L179.2,550.7L179.7,550.8L180.8,551.0L180.8,550.9L180.4,550.7L180.0,550.6L178.8,550.1L178.6,549.5L178.4,549.7L178.5,550.1L178.2,550.2L177.3,549.3L176.2,548.6L175.8,547.7L175.8,547.3L175.7,546.9L176.0,546.6L175.6,546.0L175.5,546.0L175.5,546.6L175.3,546.9L175.4,547.1L175.6,547.2L175.5,547.7L175.4,547.6L175.1,547.9L174.7,547.9L174.1,547.8L174.1,548.0L173.5,547.9L172.6,546.9L172.3,546.2L171.5,545.5L171.1,545.0L171.4,545.0L170.9,543.9L170.8,544.3L170.9,544.7L170.2,544.0L169.7,542.9L169.4,542.3L168.9,541.5L168.2,540.9L167.7,540.8L167.6,540.9L168.1,541.0L168.2,541.3L168.5,541.5L169.0,542.3L168.8,542.2L168.1,541.5L167.7,541.3L167.4,541.3L168.1,541.8L168.5,542.3L168.8,542.4L168.8,543.1L169.1,543.6L169.3,543.7L169.3,543.9L169.9,544.6L170.1,544.9L170.7,545.7L170.8,545.9L170.6,545.9L171.3,547.1L171.6,547.6L171.8,548.0L171.6,548.0L171.7,548.4L172.0,548.8L171.5,548.8L171.2,548.7L171.0,548.7L170.7,548.5L170.3,548.2L170.0,547.7L169.7,547.9L169.2,547.7L168.9,548.0L168.2,548.3L168.1,547.8L167.7,547.8L167.6,547.7L168.0,547.3L167.7,546.9L167.7,546.5L167.1,545.9L167.0,545.7L166.6,545.2L166.7,545.0L166.5,544.5L166.1,544.1L166.0,544.1L166.4,544.9L166.5,545.8L166.1,545.9L165.4,545.6L165.0,545.5L164.5,544.6L164.5,545.1L164.3,545.3L163.6,545.1L163.4,545.2L163.2,545.0L163.1,545.1L163.1,545.5L163.8,545.5L163.9,545.5L164.6,545.6L165.2,545.9L165.8,546.5L165.7,546.8L165.5,547.2L165.6,547.2L165.9,546.8L166.0,546.6L166.4,546.5L166.7,547.1L167.2,547.5L167.7,548.5L167.5,548.8L166.9,549.2L166.8,549.2L166.8,548.9L166.5,548.8L166.4,549.0L166.5,549.2L166.5,549.5L165.8,549.5L165.7,549.7L165.9,550.1L165.8,550.3L165.4,550.4L165.2,549.9L164.6,549.8L164.6,549.7L164.1,549.4L163.8,549.3L163.4,549.5L162.8,549.2L162.6,549.2L161.6,548.7L160.7,548.3L160.6,548.0L160.1,547.7L159.5,547.4L159.3,547.2L159.3,546.7L159.0,546.5L158.0,545.9L157.5,545.6L156.1,545.4L155.4,545.0L154.7,544.7L153.2,544.4L152.6,544.2L151.1,543.5L150.6,543.3L150.7,543.1L151.0,542.5L151.3,542.5L151.2,542.7L151.5,542.6L151.5,542.3L151.7,541.8L151.4,541.8L151.3,541.3L150.9,540.6L151.0,540.3L151.2,540.0L151.1,539.8L151.3,539.5L151.0,539.2L150.8,539.6L150.9,540.0L150.6,540.2L150.4,540.7L150.4,541.1L149.1,542.0L149.0,542.3L148.6,542.5L147.3,542.6L146.3,542.6L145.9,542.5L144.1,542.0L143.7,541.6L144.0,541.6L144.4,541.4L144.5,540.9L143.9,540.1L143.9,539.8L143.6,540.0L143.1,539.8L143.3,540.1L144.1,540.8L143.9,540.9L143.3,541.4L142.7,541.5L142.0,541.3L141.1,541.3L140.7,541.2L139.5,541.1L138.9,541.2L138.1,541.3L137.2,541.7L136.2,542.0L135.1,542.3L134.4,542.7L133.8,542.6L133.2,542.8L132.5,543.8L131.9,544.6L132.0,544.2L132.4,543.4L133.1,542.5L133.7,542.4L133.4,542.0L132.7,541.8L132.6,541.6L132.5,542.2L132.1,541.7L131.7,541.5L131.5,541.6L131.2,541.5L130.2,541.5L130.3,541.3L130.8,541.1L130.2,540.9L130.0,541L129.9,540.8L130.3,539.7L130.1,539.7L129.9,539.9L129.6,540.1L129.6,540.5L129.4,541.0L128.8,541.0L127.8,540.4L127.8,540.2L127.4,540.0L126.8,539.9L126.3,540.2L126.0,540.1L126.1,539.9L126.5,539.6L126.8,539.1L126.6,539.0L126.4,539.4L125.4,540.1L125.0,540.3L124.5,540.4L124.5,540.7L125.4,540.5L125.5,540.6L125.6,541.0L125.4,541.0L125,541.3L124.7,541.2L124.2,541.6L123.7,542.1L123.5,542.2L123.3,541.8L123.9,541.3L123.4,541.4L123.2,541.4L123.1,541.0L123.4,540.4L123.5,540.2L123.8,540.2L124.1,540.3L124.4,540.2L124.7,539.9L125.2,539.7L125.9,539.2L126.5,539.0L126.3,538.9L126.1,538.9L126.0,538.5L125.9,538.8L125.7,539.0L125.7,538.8L125.9,538.3L125.9,538.1L125.5,538.6L125.0,539.0L124.7,539.0L124.6,538.8L125.4,538.0L125.3,537.7L124.9,538.2L124.4,538.3L124.3,538.2L124.1,538.5L123.8,538.7L123.1,538.7L122.9,538.3L123.3,538.1L123.4,538.2L123.6,538.0L124.2,537.8L124.5,537.6L124.8,537.1L124.5,537.1L124.3,537.4L124.0,537.6L123.4,537.7L123.1,537.3L122.9,537.3L122.8,537.7L122.5,537.8L122.4,537.4L122.6,537.2L122.8,537.3L122.6,537.0L122.6,536.6L122.7,536.4L123.0,535.6L124.3,535.4L124.1,535.1L122.9,535.3L122.7,535.8L122.3,536.0L122.1,536.5L121.7,536.9L121.4,536.8L121.7,536.6L121.4,535.8L121.2,535.5L121.5,535.3L121.2,535.2L121.0,535.4L121.0,535.7L121.2,536.1L121.1,536.6L121.1,536.9L120.9,537.0L120.6,536.7L120.6,537.2L120.2,537.5L119.9,537.4L119.9,537.0L119.7,536.9L119.7,537.4L119.6,537.3L119.5,536.4L119.6,536.0L119.4,536.0L119.3,536.9L119.5,537.6L119.4,537.8L119.2,537.9L119.2,537.5L118.8,537.4L118.7,537.7L119.0,538.1L118.8,538.2L118.3,538.1L117.8,538.5L117.4,538.4L117.4,538.2L117.5,537.6L118.0,536.5L117.9,536.2L118.5,535.3L118.7,534.7L118.6,534.6L117.8,536.1L117.8,536.3L117.6,536.7L117.4,536.7L117.3,536.3L117.1,536.3L117.1,536.8L117.0,537.2L116.8,537.5L116.8,537.9L116.6,538.4L116.3,538.3L116.3,538.6L116.6,538.7L116.6,539.3L116.7,539.4L116.9,538.8L117.4,538.7L117.6,538.8L117.7,539.4L117.5,539.8L117.1,540.0L116.9,540.5L116.9,541.0L117.2,540.8L117.4,540.3L117.8,540.0L118.2,540.5L118.3,540.8L118.4,541.1L118.2,542.4L117.9,542.4L117.7,542.1L117.4,542.1L117.5,542.3L117.1,542.6L117.1,542.7L117.5,542.6L117.9,542.8L118.8,543.5L119.2,544.1L119.0,544.6L118.9,544.8L118.4,545.1L118.2,545.0L118.0,545.1L117.6,545.2L117.7,544.8L117.3,544.4L117.4,544.0L117.1,543.6L116.9,544.5L117.0,544.9L116.8,545.2L116.5,544.7L116.4,544.8L116.3,545.2L116.1,545.4L115.6,545.1L115.2,545.4L115.0,545.1L114.6,545.3L114.3,545.3L114.2,545.1L114.5,544.6L114.3,544.5L114.0,544.8L113.7,546.0L113.3,546.3L113.1,546.2L113.3,545.8L113.4,545.2L113.1,544.1L112.9,544.1L112.9,544.2L112.9,544.8L113.1,545.1L113.0,545.2L112.9,545.7L112.6,545.6L112.5,545.8L112.5,546.2L112.3,546.3L112.4,546.6L112.8,546.8L112.7,547.3L112.3,547.1L112.1,546.3L112.2,546.0L112.0,545.5L111.8,545.5L111.9,545.9L111.8,546.2L112.0,547.5L111.9,547.9L111.5,547.5L111.5,547.2L111.2,547.0L110.7,546.8L110.8,547.1L111.2,547.3L111.2,547.7L110.3,548.9L109.8,549.5L109.9,549.7L109.6,549.8L109.5,550.4L109.4,550.4L109.3,549.9L109.7,548.5L109.7,548.3L109.3,548.7L109.1,549.5L108.9,549.4L108.8,548.5L108.6,548.9L108.4,548.8L108.7,549.3L108.6,549.8L108.1,549.8L108.0,550.2L107.7,550.4L107.5,550.8L107.6,551.1L107.4,551.4L107.1,551.4L107.1,551.1L106.9,550.9L106.7,551.2L106.7,551.5L106.4,551.6L106.0,551.5L105.9,551.6L105.6,551.4L105.5,551.1L105.3,551.3L105.0,551.5L105.1,551.8L104.9,551.8L104.8,552.0L104.2,552.1L104.1,551.6L103.8,551.7L103.5,551.6L103.5,551.4L103.2,551.4L103.2,550.9L103.3,550.7L103.5,550.5L103.6,550.0L104.0,549.8L104.1,549.9L104.5,549.5L105.0,549.5L105.0,549.2L105.5,549.0L105.9,548.6L106.4,548.6L106.2,548.2L106.5,548.0L106.5,547.8L107.0,547.1L106.8,547.0L106.5,547.1L105.7,547.9L105.3,548.1L105.0,548.3L104.5,548.2L103.8,547.8L103.6,547.5L103.5,547.2L103.8,546.4L103.9,546.1L104.1,545.2L104.5,544.7L104.7,544.5L105.2,543.8L105.3,543.1L105.3,542.6L105.6,542.4L105.6,541.3L105.7,541.2L105.4,540.9L105.0,539.8L105.6,539.5L105.6,539.3L106.5,539.1L107.6,538.0L108.8,537.1L109.6,538.1L110.2,538.2L110.3,538.4L110.8,537.6L111.2,537.5L111.7,537.8L111.9,537.7L112.8,538.0L113.7,538.1L114.1,538.4L114.1,538.2L113.8,537.8L113.4,537.6L112.9,537.7L112.1,537.4L111.8,537.4L111.3,537.1L110.9,536.7L110.3,536.3L109.9,536.1L110.1,535.7L110.5,535.7L110.8,534.8L111.1,534.7L111.2,534.2L111.8,534.0L112.2,533.7L111.7,533.4L111.5,533.4L110.9,533.8L110.8,534.2L110.6,534.3L110.4,534.8L110.5,535.2L110.2,535.5L109.9,535.4L109.4,535.3L108.4,535.5L108.0,535.2L107.7,535.1L107.5,535.5L106.4,536.1L105.9,537.2L105.4,537.3L105.1,537.5L104.7,537.5L104.2,538.0L103.5,538.7L103.5,538.9L103.9,539.7L103.9,539.9L103.4,539.7L103.1,539.9L102.7,540.2L102.5,540.9L102.1,541.1L101.7,541.6L101.6,542.1L101.7,542.3L102.0,542.5L101.4,542.8L101.3,543.3L101.1,543.3L100.8,543.8L100.5,543.9L100.4,543.7L100.0,543.8L100.1,544.2L100.3,544.3L100.3,544.5L100.6,544.8L100.7,545.0L100.6,545.5L100.3,545.8L100.2,546.2L99.9,546.4L99.8,546.5L99.3,546.6L99.1,546.5L98.5,546.7L98.3,546.7L98.0,547.1L98.3,547.0L98.5,547.1L98.7,546.9L99.0,546.9L99.1,547.2L98.9,548.0L98.6,548.1L98.3,548.5L97.9,548.2L98.0,548.5L97.8,548.6L97.5,548.5L97.6,548.2L97.6,547.7L97.3,547.3L97.4,548.1L97.2,548.4L97.0,548.5L96.8,548.4L96.7,548.6L96.9,548.8L96.8,549.1L96.1,549.2L96.4,549.8L96.3,550.1L95.9,550.2L95.7,550.1L95.4,550.5L95.2,550.4L94.7,550.6L94.8,550.8L95.1,550.9L94.7,551.1L94.6,551.4L94.7,551.8L94.5,552.1L94.1,552.4L94.5,552.5L94.4,552.9L94.5,553.3L94.9,552.9L95.8,553.1L96.0,552.9L96.2,553.1L96.4,552.9L96.7,553.4L97.0,553.6L97.3,553.5L97.6,553.7L97.9,554.1L98.0,554.4L98.2,554.6L97.8,554.7L97.6,555.5L97.4,555.8L97.0,555.9L96.8,556.3L96.5,556.5L95.8,556.5L95.6,556.6L95.5,557.3L95.3,557.5L94.9,557.5L94.9,557.6L95.0,558.2L95.2,558.4L94.8,558.6L94.5,558.5L94.5,558.8L94.8,559.1L94.6,559.7L94.3,559.9L94.2,560.1L94.3,560.3L94.0,560.3L93.8,560.6L93.4,560.2L93.3,560.2L93.3,560.6L93.3,560.9L93.0,560.9L92.8,561.2L92.5,561.1L92.5,560.9L92.2,560.9L92.2,561.1L91.8,561.3L91.5,561.1L91.1,561.2L90.6,561.6L90.8,562.0L90.6,562.3L90.0,562.6L89.6,562.6L89.6,563.0L89.8,563.2L89.7,563.4L89.4,563.5L88.9,563.1L88.8,562.9L88.5,563.0L88.4,563.5L88.4,563.9L88.0,564.1L87.9,564.8L86.9,564.8L86.6,564.6L86.6,565.1L86.7,565.6L86.4,565.6L86.2,565.3L85.9,565.3L85.8,565.6L85.4,565.7L84.7,566.3L84.5,566.4L84.4,566.7L84.6,566.8L85.3,566.4L85.4,566.7L85.3,567.0L85.1,567.1L85.1,567.3L85.3,567.6L85.2,567.8L84.9,568.0L84.8,568.3L84.4,568.6L84.3,568.8L84.3,569.1L83.8,569.0L83.4,569.1L83.3,569.6L83.1,569.7L82.8,569.2L82.7,569.5L82.3,569.8L82.1,570.1L81.7,570.1L81.8,570.5L81.5,570.7L81.1,570.3L80.8,569.9L80.4,570.0L80.4,570.3L80.6,570.4L80.6,570.6L80.1,570.6L79.9,571.1L80.0,571.3L80.3,571.4L80.3,571.7L79.8,571.7L79.4,571.8L79.2,571.3L78.4,571.5L78.1,571.8L77.8,571.8L77.7,572.1L78.0,572.1L78.4,572.0L78.7,572.1L78.8,572.5L78.5,572.8L77.8,572.5L77.5,572.4L77.4,572.8L76.9,572.8L76.5,572.6L76.2,572.8L75.8,573.4L75.8,573.7L76.5,573.8L77.0,574.1L76.9,574.3L76.4,574.6L76.4,574.7L76.7,574.8L77.1,574.6L77.3,574.6L76.4,575.1L76.0,575.5L76.0,575.9L75.9,575.5L75.7,575.6L75.9,576.1L75.8,576.4L75.7,576.1L75.6,576.1L75.5,576.5L75.1,575.9L75.2,575.3L74.9,575.7L75.0,576.2L74.9,576.6L74.5,576.6L74.6,576.2L74.0,576.2L73.7,576.7L73.3,576.7L72.1,576.9L71.7,577.1L71.5,577.2L71.5,577.7L71.2,577.4L71.3,576.8L71.0,576.9L71.1,577.1L71.1,577.8L70.8,578.3L70.8,578.6L70.4,579.1L69.9,579.3L70.0,578.9L70.3,578.9L70.3,578.7L70.2,578.6L70.3,577.9L70.6,577.4L70.2,577.1L69.7,577.0L69.5,577.1L69.5,577.4L69.3,577.5L69.2,577.4L68.8,577.4L68.6,578.0L68.0,578.4L67.5,578.5L67.0,578.3L66.9,578.4L67.0,578.8L66.6,579.3L66.6,579.5L66.3,579.7L66.2,579.0L66.0,578.9L65.8,579.1L65.6,579.0L65.3,579.2L65.8,579.3L65.7,579.7L65.2,579.8L64.9,579.6L65.1,579.3L64.9,579.1L64.5,579.2L64.1,579.8L63.1,580.3L62.7,580.2L62.5,580.0L62.1,580.2L61.9,580.1L62.2,579.1L62.7,578.5L62.8,578.2L62.5,578.0L62.1,578.0L61.7,578.2L61.2,578.8L61.2,579.7L60.4,580.5L60.3,580.6L60.0,581.1L59.7,580.8L59.4,580.9L59.5,581.3L59.7,581.5L59.7,581.9L59.2,582.1L59.0,581.8L59.0,581.5L58.8,581.4L58.5,581.7L58.6,582.1L58.3,582.4L58.1,582.2L57.6,582.2L57.3,582.0L57.2,581.5L57.7,581.5L57.4,581.1L57.4,580.4L57.1,580.0L56.9,580.0L56.6,580.1L56.4,580.5L56.5,580.7L56.7,580.8L57.0,581.3L56.7,581.6L56.9,582.2L56.8,582.6L56.5,582.3L56.2,582.4L56.2,582.6L55.9,582.8L55.6,582.8L55.3,582.5L55.1,582.1L55.2,581.9L55.0,581.5L54.7,581.2L54.2,581.3L54.0,581.6L54.7,582.3L54.7,582.5L53.8,583.1L53.4,583.2L53.1,583.4L53.3,583.8L53.7,583.9L53.9,583.7L54.2,584.1L54.3,584.7L53.9,584.6L54.1,584.4L53.8,584.3L53.6,584.5L53.4,584.3L53.2,583.8L52.7,584.0L52.7,584.5L52.4,584.5L51.9,584.7L51.5,584.5L51.0,584.4L50.2,584.3L49.7,584.3L49.0,584.5L48.4,584.9L48.3,585.3L47.8,585.6L46.9,585.7L46.4,585.6L46.0,585.3L45.9,585.1L45.8,584.6L45.7,584.4L45.8,584.0L45.9,583.8L46.7,583.7L46.9,583.6L47.4,582.9L47.8,582.2L47.9,582.0L48.3,581.7L48.5,581.7L48.8,582.0L49.5,581.9L49.9,581.6L50.3,581.7L51.0,581.2L51.6,581.2L52.1,581.3L52.6,581.4L52.6,581.6L53.0,582.2L53.1,582.6L52.9,582.9L53.4,582.8L53.3,582.5L53.4,582.2L53.8,582.5L53.6,582.2L53.7,581.7L53.7,580.9L54.2,580.7L54.7,580.6L55.3,580.8L55.7,580.7L55.9,580.3L55.6,580.2L55.7,580.1L56.0,580.0L56.2,579.8L56.4,579.9L56.9,579.3L57.0,579.5L57.2,579.6L57.6,579.4L57.5,578.8L57.2,578.8L57.7,578.4L58.9,577.2L59.4,576.9L59.9,576.5L60.2,576.5L60.6,576.2L61.1,575.8L61.5,575.8L62.1,575.6L62.7,575.5L64.1,575.2L64.6,575.3L64.7,575.2L65.4,575.3L65.6,575.3L65.3,575.5L65.2,575.8L65.4,575.8L65.3,576.2L64.9,576.2L64.8,576.8L65.3,577.5L65.5,577.4L65.9,577.7L66.0,577.6L65.5,577.2L65.6,576.6L65.5,576.4L65.9,576.6L66.8,576.7L66.8,577.3L67.2,577.2L67.6,577.5L67.7,577.4L67.5,577.1L67.9,577.0L67.1,576.4L66.6,576.1L66.7,575.7L66.4,575.7L67.2,574.6L67.5,573.8L67.7,573.5L68.1,573.2L68.7,572.6L69.0,572.6L69.6,572.1L70.1,571.6L71.4,571.1L72.1,570.7L72.7,570.4L73.8,569.8L74.0,569.5L74.5,570.0L74.7,570.1L75.2,570.1L75.4,569.7L75.2,569.3L75.2,569.0L75.5,568.2L76.0,567.5L76.6,566.7L77.0,566.3L77.4,566.1L78.0,565.8L78.3,565.5L78.7,564.9L78.9,564.9L79.3,564.5L79.8,564.3L79.9,564.8L80.2,564.9L80.2,564.7L80.1,564.0L79.8,563.9L79.7,563.7L79.8,563.1L79.9,562.7L80.4,560.0L80.7,559.7L81.2,559.6L81.4,559.3L81.1,559.3L80.7,558.8L80.6,558.3L80.8,557.7L81.1,557.0L81.5,556.8L82.0,556.1L82.7,555.5L82.8,555.1L83.1,554.5L83.1,554.2L83.3,554.0L83.2,553.7L83.4,553.4L83.1,553.4L83.0,553.6L83.0,553.9L82.6,554.2L82.2,554.4L81.7,554.6L81.3,554.8L80.9,554.9L80.8,555.0L80.2,555.2L79.6,555.6L78.4,556.0L78.0,555.9L77.6,555.5L77.6,555.0L77.3,554.7L76.8,554.4L76.8,554.1L77.0,554.0L77.2,552.9L77.0,552.9L76.6,553.5L76.0,553.9L75.9,554.2L75.9,554.6L75.8,554.9L75.6,554.9L75.5,555.2L75.6,555.7L75.8,556.3L76.0,556.9L75.6,557.4L75.2,557.5L74.6,557.3L74.1,556.1L73.5,554.7L73.2,554.2L72.9,553.9L72.5,553.7L72.7,553.3L72.5,553.0L72.2,553.0L72.0,553.6L71.8,553.5L71.8,554.0L71.3,554.1L71.1,553.6L71.1,553.4L70.8,553.3L70.7,553.4L70.4,553.4L70.5,553.0L70.1,553.1L69.8,552.6L70.1,552.3L69.9,551.7L69.3,552.0L68.5,552.4L68.1,552.8L67.7,553.4L67.6,553.0L67.0,553.2L65.6,553.9L65.4,554.1L65.4,554.4L64.7,554.6L64.6,554.8L64.3,554.8L64.0,555.1L63.7,555.2L63.7,554.8L63.3,554.4L62.5,554.5L62.1,554.2L62.9,554.0L63.1,554.3L63.3,554.2L63.5,553.9L63.9,553.4L64.0,553.0L63.9,552.4L64.0,551.9L63.8,551.4L63.9,551.2L63.7,551.1L63.4,550.4L63.2,549.4L63.7,548.6L64.0,548.5L64.4,548.0L64.8,547.9L64.6,547.3L64.4,547.0L64.3,546.5L64.2,545.8L63.6,544.6L63.7,544.1L63.4,543.7L63.3,543.2L62.9,542.6L62.8,542.3L62.5,542.2L62.4,542.4L62.3,542.9L62.3,543.2L62.2,543.5L62.0,543.6L61.6,543.7L61.4,543.5L61.0,543.8L60.5,543.9L59.8,544.3L58.7,544.5L57.4,544.5L56.4,544.3L55.7,543.9L55.6,543.7L55.5,543.0L55.9,542.9L55.7,542.4L55.0,541.9L54.7,541.1L54.6,540.9L54.2,540.4L54.1,540.0L53.5,539.8L53.1,539.5L52.6,538.6L52.9,538.5L53.3,538.2L53.3,537.9L53.0,537.8L52.5,538.1L51.8,537.9L51.7,537.6L51.8,537.4L52.3,537.4L53.2,536.7L53.3,536.8L53.6,536.5L53.4,536.2L53.4,536.0L53.9,535.9L53.5,535.8L53.7,535.3L54.1,534.9L53.9,534.8L53.6,535.1L53.1,534.7L53.1,534.4L53.4,534.2L53.8,534.3L54.0,534.1L54.1,533.8L53.9,533.9L53.5,533.7L53.3,533.3L53.4,533.1L53.1,533.0L53.0,532.8L52.8,532.8L52.6,533.5L52.4,533.5L51.9,533.3L51.8,533.1L51.7,532.7L51.9,531.8L51.8,531.6L51.2,531.5L51.0,531.2L51.0,530.5L51.6,530.3L51.7,530.1L51.6,529.7L51.2,529.5L50.6,529.5L50.5,529.8L50.3,529.6L50.3,529.0L50.6,528.1L50.6,528.0L50.5,528.7L51.8,528.6L51.8,528.5L51.3,528.3L51.1,528.1L50.9,527.5L51.0,527.3L51.4,527.3L52.1,527.5L52.6,527.4L52.4,526.4L52.4,526.1L52.5,525.6L52.9,525.1L54.5,523.5L54.6,523.3L55.0,522.9L55.5,522.5L55.6,522.1L55.9,521.7L56.2,521.5L56.4,521.5L56.6,521.4L56.6,520.6L57.1,519.4L57.4,519.0L58.0,518.7L57.8,518.5L57.8,518.3L58.7,517.6L59.5,517.4L60.1,517.4L60.6,517.8L61.1,517.9L61.4,518.5L61.7,518.6L61.8,518.8L62.4,519.5L63.3,519.5L64.2,518.7L64.3,518.4L64.8,518.3L65.8,517.3L66.1,516.7L66.5,516.5L66.4,516.1L66.6,516.1L66.9,516.3L67.2,516.4L67.3,516.9L67.9,517.0L68.5,516.9L68.8,517.1L69.8,517.0L70.4,516.8L70.5,516.5L71.3,515.7L71.9,514.8L71.9,514.4L71.8,513.8L71.6,513.1L71.5,512.3L71.6,511.5L71.6,511.2L70.8,510.0L70.7,509.8L70.2,509.6L69.9,509.5L70.1,508.9L70.5,508.7L70.6,508.9L71.0,509.1L71.6,509.1L71.5,508.8L71.9,508.7L72.5,508.2L72.6,507.5L72.2,506.6L71.7,506.1L71.4,505.8L71.4,506.0L71.0,506.3L70.7,506.8L70.2,506.9L69.7,506.6L68.9,507.1L67.9,507.3L67.7,507.7L66.6,508.3L66.3,508.7L66.1,509.3L65.5,509.7L65.6,509.1L65.5,508.4L65.2,508.0L64.9,508.0L65.0,507.7L64.6,507.4L64.6,507.1L64.1,507.5L64.2,507.8L64.5,507.9L64.6,508.2L64.9,508.1L64.9,508.4L64.6,509.0L64.3,509.0L64.1,508.4L63.5,507.8L63.1,507.5L62.3,507.3L61.8,507.4L61.5,507.3L60.9,507.2L60.3,507.2L58.9,507.8L58.2,507.8L57.0,507.1L55.9,506.6L55.4,506.4L54.4,505.9L53.9,505.3L53.8,504.6L53.9,504.1L54.2,503.9L54.2,503.5L53.9,503.0L53.5,502.5L53.5,502.2L53.1,501.6L53.0,501.2L53.5,501.5L53.8,501.6L54.0,501.4L54.3,501.4L54.5,501.2L54.5,500.9L55.0,500.5L54.7,500.0L54.4,499.9L54.1,500.0L53.7,499.8L53.0,499.3L51.8,498.9L51.3,498.5L51.0,498.0L50.5,497.4L50.0,497.1ZM24.5,593.5L25.0,593.4L25.1,593.0L25.4,593.1L25.6,592.9L25.7,592.5L26.1,592.4L26.2,592.0L26.1,591.9L26.4,591.3L27.3,590.8L27.5,591.0L28.0,591.0L28.4,591.2L28.4,590.7L28.2,590.6L28.5,590.1L28.4,590.0L28.8,589.5L29.6,589.2L30.5,589.2L30.9,589.6L31.4,589.7L31.4,589.9L30.9,590.3L30.9,590.7L29.9,591.1L28.7,591.4L28.3,591.7L28.3,592.0L27.7,592.4L27.4,592.7L26.9,592.7L26.4,593.1L26.1,593.1L25.9,593.4L25.7,593.2L25.2,593.5L24.2,593.7ZM23.3,593.9L23.9,593.7L23.8,594.0L23.3,594.1ZM21.4,591.8L21.6,591.5L21.9,591.5L21.9,591.8L21.7,592.0L21.5,592.0ZM28.0,564.1L28.7,564.4L29.2,564.5L29.3,564.6L28.8,564.9L28.5,564.8L28.4,564.5L28.1,564.4ZM21.6,591.0L21.6,591.3L21.4,591.2ZM20.1,592.5L20.4,592.5L20.8,592.6L20.8,592.5L21.2,592.4L21.5,592.6L21.7,592.8L21.2,593.4L20.8,592.9L20.3,593.0L20.1,592.9ZM19.7,592.0L19.9,591.9L20.2,592.1L20.2,592.3L19.9,592.4L19.7,592.3ZM19.0,593.3L19.2,592.8L19.7,593.1L19.5,593.4ZM26.4,559.3L26.6,559.0L27.0,559.0L27.2,559.1L27.6,559.1L27.5,559.5L26.9,559.7L26.9,559.5ZM15.8,593.4L15.9,593.2L16.7,592.9L17.2,593.2L17.2,593.4L16.9,593.7L16.5,593.6L16.2,593.7L15.9,593.9L15.7,593.7ZM14.3,593.2L14.4,593.4L14.1,593.3ZM13.4,593.7L13.7,593.5L13.9,593.8L13.6,594.1L13.3,594.0ZM33.9,509.5L34.0,509.3L34.5,508.8L34.6,508.3L34.7,508.2L34.7,507.8L35.0,507.9L35.0,508.2L34.9,508.5L35.0,508.7L35.6,509.3L36.5,509.9L37.1,510.2L37.9,509.8L38.7,509.6L39.4,509.9L39.7,510.4L39.9,510.6L39.9,511.3L39.8,511.5L40.4,512.1L41.1,512.3L41.3,512.6L41.3,512.8L41.7,513.1L42.8,513.5L43.0,513.5L44.1,514.1L43.6,514.9L43.3,515.1L42.7,514.7L42.2,514.6L41.5,514.7L40.8,515.1L40.6,515.5L40.5,515.8L40.2,516.1L39.9,515.8L39.9,515.7L39.8,514.8L39.5,514.3L39.0,513.8L38.5,513.7L38.5,513.2L38.4,512.8L37.9,512.1L36.9,511.4L36.2,511.1L35.5,511.3L35.2,511.6L34.7,511.7L34.4,511.4L33.9,511.0L33.7,510.4L33.8,510.0ZM6.9,593.4L7.3,593.1L7.9,593.0L8.1,593.0L8.5,593.4L8.4,593.7L7.8,593.9L7.3,593.9L6.9,593.8ZM23.1,531.3L23.3,530.8L23.7,530.6L23.8,530.7L23.7,531.0L23.7,531.4L24.0,532L24.6,532.6L24.8,532.8L25.2,532.8L25.8,533.6L25.5,533.6L25.4,533.4L24.7,533.1L24.4,533.1L24.0,532.7L23.5,531.6ZM23.4,529.8L23.5,529.8L23.4,530.4L23.2,530.0ZM-0.0,592.7L0.6,592.9L1.0,593.3L1.3,593.1L1.5,593.2L2.1,593.2L2.5,593.3L2.3,593.5L2.5,593.7L2.6,593.7L3.1,594.0L3.5,594.0L3.6,594.1L4.2,594.2L4.2,594.3L4.9,594.5L4.5,594.6L4.2,594.4L3.9,594.5L3.2,594.3L2.8,594.4L2.7,594.3L2.4,594.3L2.1,594.2L1.8,593.9L0.9,593.7L0.8,593.7L0.3,593.4L0.3,593.1L0.1,593.0ZM-6.2,591.6L-5.2,591.7L-5.0,591.9L-4.5,591.7L-4.5,591.9L-4.1,591.7L-4.0,591.6L-3.8,591.9L-3.3,592.0L-3.1,591.8L-3.0,592.0L-2.4,591.9L-2.3,591.7L-1.5,591.8L-1.7,591.5L-1.0,591.7L-0.7,591.6L-0.6,591.4L-1.2,591.1L-1.5,590.8L-1.3,590.7L-1.0,590.9L-0.8,590.7L-0.7,590.5L0.0,590.4L0.5,590.8L0.7,591.4L0.6,591.6L0.1,592.0L-0.4,591.8L-0.6,592.0L-0.2,592.7L-0.3,592.8L-0.5,592.6L-0.8,592.6L-0.9,592.8L-1.2,592.7L-1.5,592.5L-2.0,593.0L-2.3,592.6L-3.5,592.6L-3.6,592.4L-4.1,592.2L-4.5,592.1L-4.8,592.2L-5.2,592.2L-5.7,591.9ZM-7.1,591.6L-6.8,591.6L-6.7,591.9L-7.1,591.8ZM-6.7,590.1L-6.5,590.3L-6.7,590.3ZM-8.2,591.4L-8.1,591.4L-7.4,591.6L-7.5,591.8L-7.8,591.7L-8.2,591.7ZM-9.1,591.0L-8.9,590.9L-8.5,591.1L-8.4,591.7L-8.7,591.6L-8.8,591.2ZM-10.0,589.9L-9.7,589.7L-9.3,589.9L-9.1,590.5L-9.5,590.6L-9.4,591.1L-9.7,591.2L-10.0,591.1L-10.2,590.9L-10.0,590.5L-10.1,590.5L-10.1,589.9ZM-10.8,591.7L-10.6,591.3L-10.4,591.3L-10.3,591.6L-10.0,591.6L-10.1,591.4L-9.5,591.4L-9.4,591.6L-9.5,592.0L-9.9,591.8L-9.8,592.2L-10.2,591.9L-10.3,592.1L-10.4,592.0L-10.6,592.2L-10.6,591.9ZM-14.8,591.9L-14.5,591.5L-14.2,591.5L-14.0,591.3L-14.0,590.8L-13.9,590.7L-13.4,590.8L-13.1,590.5L-13.2,590.0L-12.9,589.8L-12.7,589.8L-12.4,590.1L-12.0,589.8L-11.9,589.9L-12.0,590.4L-12.4,590.5L-12.5,590.8L-12.3,591.0L-12.0,591.1L-11.5,591.1L-11.0,591.2L-11.0,591.7L-11.3,592.2L-11.6,592.2L-12.1,591.9L-12.4,592.1L-12.8,592.1L-13.1,592.3L-13.4,591.9L-13.5,592.1L-13.5,592.4L-13.7,592.2L-14.0,592.3L-13.9,591.9L-14.1,591.7L-14.6,592.2L-14.8,592.1ZM-16.2,589.0L-16.0,589.0L-16.0,589.2L-16.3,589.2ZM-17.9,590.1L-17.5,590.0L-17.1,590.3L-16.6,590.2L-15.7,590.3L-15.3,590.1L-14.9,589.3L-14.7,589.3L-14.5,589.5L-14.3,589.8L-15.0,590.3L-15.1,590.9L-15.3,591.1L-15.9,591.0L-16.4,590.4L-16.9,590.5L-17.6,590.3L-17.7,590.6L-17.8,590.5ZM-19.8,588.0L-19.6,587.8L-19.0,587.9L-18.4,588.2L-18.3,588.5L-18.4,588.7L-18.2,589.0L-17.9,589.0L-17.7,589.2L-17.0,589.2L-17.3,589.4L-18.0,589.3L-18.4,589.7L-18.4,589.9L-18.7,590.0L-18.8,589.9L-19.0,590.1L-19.0,590.5L-19.2,590.5L-19.2,590.1L-19.5,590.1L-19.6,589.8L-19.8,589.6L-19.7,589.5L-19.0,589.6L-18.9,589.1L-19.2,589.0L-19.3,588.7L-19.8,588.1ZM-22.6,589.1L-22.1,589.4L-22.2,589.5L-22.6,589.3ZM-23.5,589.0L-23.1,589.3L-23.0,589.5L-23.4,589.3ZM-22.9,587.4L-22.6,587.2L-22.3,587.6L-22.5,587.9L-22.8,587.9ZM-24.6,590.2L-24.5,590.1L-24.3,590.3L-24.4,590.7L-24.6,590.6L-24.8,590.7ZM-25.6,590.6L-25.3,590.6L-25.4,591.0L-25.7,591.1ZM-29.8,583.1L-29.6,583.2L-29.3,583.0L-28.8,583.1L-28.5,583.7L-28.8,584.1L-29.3,584.2L-29.5,584.1L-29.8,583.8L-29.9,583.5ZM-34.6,583.9L-34.5,583.8L-34.2,584.2L-33.8,584.3L-33.5,584.6L-33.5,584.8L-33.2,585.2L-33.0,585.9L-32.7,586.2L-32.6,586.7L-31.9,587.0L-31.7,587.4L-32.0,587.4L-32.1,587.2L-32.6,587.1L-32.8,586.8L-33.3,586.0L-33.5,585.2L-33.8,584.7L-34.1,584.7L-34.4,584.4ZM-34.4,581.1L-34.2,581.1L-33.9,581.4L-33.8,581.6L-34.2,581.8L-34.4,581.8ZM-35.8,581.8L-35.5,582.0L-35.3,582.5L-35.6,582.3ZM-35.8,580.0L-35.6,580.0L-35.4,580.2L-35.4,580.4L-35.7,580.4ZM-40.1,579.2L-39.7,579.2L-39.3,579.0L-38.6,579.2L-38.3,578.8L-37.8,578.4L-37.6,578.3L-37.4,578.8L-37.7,578.9L-38.0,579.2L-38.4,579.4L-38.2,579.6L-38.3,579.8L-38.5,579.8L-39.1,579.4L-39.5,579.5L-39.7,579.9L-39.9,579.8L-40.2,579.3ZM-44.3,573.1L-44.0,573.4L-44.3,573.4ZM-50.8,566.7L-50.4,566.9L-50.5,567.1L-50.8,566.8ZM-51.2,566.4L-51.0,566.5L-51.1,566.7ZM-51.5,566.0L-51.2,566.3L-51.4,566.2ZM-54.9,567.4L-54.8,567.3L-54.4,567.3L-54.1,567.5L-53.5,567.3L-52.8,567.6L-53.2,567.7L-53.4,567.9L-53.6,568.6L-53.9,568.4L-54.0,568.0L-54.6,567.8ZM-56.8,561.8L-55.8,561.7L-55.3,561.9L-53.8,562.8L-53.6,563.4L-53.3,563.7L-53.1,564.5L-53.1,564.7L-53.6,564.4L-53.8,564.0L-54.3,564.3L-54.5,564.3L-55.0,563.9L-55.5,563.9L-55.8,563.5L-55.9,563.2L-55.7,562.8L-56.0,562.2L-56.6,562.1ZM195.0,566.8L195.1,566.6L195.3,566.8L195.4,567.1L195.0,567.0ZM194.4,568.2L195.2,567.5L195.5,568.0L195.7,568.0L195.5,568.6L195.2,568.7L194.5,568.5ZM193.8,568.5L194.0,567.9L194.2,568.0L194.0,568.5ZM193.5,567.8L193.6,567.4L193.4,567.1L193.6,566.9L193.3,566.7L193.1,566.3L193.1,566.0L193.2,565.9L193.6,566.0L193.7,566.2L194.0,566.2L194.3,566.3L194.7,567.4L194.6,567.6L194.2,567.8L193.9,567.7L193.7,568.0ZM191.7,565.7L191.6,565.3L191.7,565.3L192.8,565.8L192.6,566.1L192.8,566.5L192.8,567.3L192.3,567.0L191.9,566.3ZM186.2,558.2L186.2,557.9L186.4,558.0ZM186.2,559.2L186.2,559.0L186.4,558.6L186.8,558.8L186.9,558.9L186.6,559.3ZM185.6,558.6L185.8,558.2L186.0,557.8L186.0,558.2L185.9,558.7ZM188.3,570.1L188.6,570.0L188.7,570.3ZM184.7,560.9L184.7,560.6L184.9,560.7L185.4,561.2L185.7,561.6L185.6,561.7L185.1,561.4L185.0,561.5ZM184.2,560.1L184.3,559.4L184.6,559.1L185.0,559.1L185.3,558.8L185.8,559.0L186.0,559.2L185.8,559.6L186.1,560.1L185.9,560.3L185.3,560.7L184.8,560.4L184.4,560.3ZM185.4,567.3L185.7,567.0L185.7,567.4L185.5,567.5ZM185.7,571.8L185.8,571.8L186.3,572.5L186.0,572.4ZM183.5,566.3L183.6,566.1L183.5,565.7L183.9,565.8L183.9,566L183.8,566.6ZM183.2,566.0L183.3,565.9L183.4,566.1ZM183.4,567.7L183.3,567.1L183.4,566.9L183.9,566.8L184.1,566.8L184.1,567.1L183.9,567.4L184.1,567.5L184.3,567.1L184.3,566.8L184.5,566.9L184.7,566.4L185.0,566.3L185.3,566.5L185.3,566.9L185.2,567.2L184.9,567.2L184.7,567.5L185.0,567.5L185.1,567.8L184.8,568.0L184.6,568.4L184.6,569.1L184.1,568.7L184.3,568.2L184.1,567.7L183.5,567.5ZM182.1,564.0L182.2,563.8L182.3,563.0L182.7,562.8L182.8,562.6L182.5,562.7L182.4,562.4L182.6,562.4L182.7,562.2L182.1,561.9L182.2,561.7L181.9,561.2L182.1,560.8L182.8,560.7L183.9,560.5L184.4,560.9L184.8,561.3L184.8,561.8L185.0,561.7L185.4,562.1L185.7,562.3L186.0,562.2L187.1,562.7L187.4,563.0L188.1,563.5L188.4,564.3L188.9,564.3L189.2,564.8L189.4,565.0L190.0,565.1L190.3,565.4L190.2,565.5L189.8,565.3L188.4,565.1L188.5,565.3L188.3,565.9L188.4,565.9L188.6,565.5L188.7,565.6L189.0,565.4L189.2,565.6L189.5,565.6L189.7,565.7L189.2,566.0L189.4,566.2L189.8,565.9L190.2,566.2L190.4,566.2L190.8,566.7L190.9,566.7L190.8,567.1L190.5,567.1L190.6,567.3L191.0,567.3L191.2,567.2L191.1,566.9L191.2,566.6L191.4,566.7L191.7,567.3L191.5,567.6L191.7,567.8L191.5,568.5L191.2,568.9L191.5,568.9L191.8,568.4L192.1,568.4L192.5,569.7L192.8,570.1L192.7,570.9L192.1,571.1L191.6,571.0L191.5,571.2L191.1,571.0L191.0,570.8L190.4,571.0L190.6,570.6L191.0,570.5L191.0,570.2L190.6,570.1L190.3,570.1L189.6,569.8L189.6,569.5L189.5,568.7L189.3,568.7L189.2,569.1L189.1,568.4L189.2,568.2L188.9,568.0L189.0,568.4L188.6,568.7L189.0,569.3L188.9,569.7L188.0,569.6L187.9,569.4L188.1,569.0L187.6,568.4L187.3,568.5L187.0,568.3L186.7,568.4L187.0,568.8L187.4,569.1L187.7,569.5L187.7,569.8L187.9,569.8L188.5,570.7L189.0,570.7L188.8,570.4L189.1,570.1L189.7,570.4L190.0,571.2L189.8,571.3L189.4,571.0L189.3,571.0L190.0,572.0L189.6,572.2L189.1,572.1L188.9,571.7L188.5,571.6L187.4,570.7L187.2,570.6L187.0,570.1L186.8,570.1L186.6,569.7L187.0,569.5L186.5,569.4L186.3,568.7L185.9,569.0L185.7,568.9L185.4,569.1L185.2,568.9L185.1,568.3L185.6,567.9L185.8,568.3L186.1,568.1L185.8,568.0L185.8,567.7L186.0,567.5L186.2,567.5L186.5,567.1L185.8,566.6L186.0,566.5L185.7,566.4L185.6,565.9L185.3,566.2L184.4,565.9L184.3,565.7L184.5,565.6L184.3,565.4L184.3,565.1L183.8,565.1L184.0,565.5L183.9,565.6L183.3,565.5L183.0,565.2L183.1,564.8L183.4,564.6L184.1,564.8L184.5,564.4L184.1,564.1L183.8,564.0L183.6,564.2L183.5,564.2L183.5,563.9L183.4,563.7L183.4,563.2L183.3,563.2L183.2,563.5L182.9,564.1L182.6,564.4L182.2,564.2ZM178.7,554.1L178.8,553.8L179.1,554.0L178.8,554.3ZM181.6,564.5L181.8,564.3L182.0,564.3L182.1,564.6L182.1,564.9L182.0,565.0ZM179.9,565.1L180.3,564.8L180.4,565.1L180.8,564.7L180.7,564.2L180.8,564.2L180.9,564.9L180.6,565.1L180.4,565.6L180.1,565.6L180.2,565.3ZM177.6,558.1L177.7,557.7L177.9,557.5L177.9,557.3L178.4,557.1L178.4,557.0L178.9,557.1L179.2,557.6L179.6,557.9L180.0,557.7L180.2,557.8L180.3,557.6L179.8,557.5L179.4,557.0L179.3,556.7L178.6,556.3L178.7,555.9L179.1,555.6L179.9,555.6L180.3,555.5L181.1,555.6L181.6,555.6L181.7,555.5L182.5,555.3L183.1,555.6L183.5,556.1L183.6,556.4L183.8,556.5L184.2,556.5L184.5,556.7L184.7,557.0L185.3,557.1L185.5,557.5L185.8,557.6L185.4,558.0L185.2,558.4L184.9,558.7L184.6,558.7L184.2,558.8L183.5,558.8L183.7,559.1L183.4,559.6L182.8,559.6L182.5,559.5L182.4,559.9L182.2,560.0L181.8,560.2L181.6,560.2L181.3,559.6L181.1,559.5L180.8,560.0L181.0,560.1L181.2,560.7L180.9,560.9L180.9,561.1L181.1,561.3L181.1,561.7L181.2,562.1L181.0,562.5L181.2,562.8L181.2,563.2L181.0,563.3L180.6,563.3L180.6,564.1L180.4,564.0L180.1,563.7L179.8,563.4L179.6,562.7L179.3,562.2L179.2,561.7L179.3,561.3L179.1,560.9L179.2,560.2L178.9,560.1L178.6,560.2L178.5,559.7L178.1,559.4L177.9,559.0L177.8,558.7ZM171.9,547.1L172.7,547.5L172.8,547.8L173.1,547.8L173.4,548.6L173.7,548.5L173.9,548.2L174.1,548.3L174.4,548.2L174.8,548.3L175.5,548.0L175.6,548.6L176.1,549.0L176.3,549.3L176.7,549.5L177.0,550.0L177.4,550.3L177.7,551.2L178.1,551.5L178.3,551.9L178.2,551.9L178.0,551.7L177.2,551.1L176.9,550.4L176.5,550.2L176.3,549.9L176.0,550.0L176.6,550.5L176.7,550.7L176.5,550.9L177.3,551.6L177.7,551.8L177.8,552.2L178.4,552.8L178.1,552.9L178.5,553.4L178.6,553.6L178.3,554.1L178.0,554.1L177.7,554.1L177.9,554.3L177.8,555.1L177.4,555.8L177.1,556.1L177.1,556.3L176.8,556.8L176.4,557.0L176.1,556.4L175.7,555.6L175.9,555.0L176.1,554.7L175.8,554.6L175.6,554.2L175.8,554.1L176.1,554.3L176.1,554.1L175.3,553.4L175.1,553.0L174.8,552.7L174.5,552.2L174.3,552.0L174.2,551.1L173.8,550.6L173.6,550.0L173.3,549.5L173.2,549.2L172.8,548.7L172.5,548.5L172.2,548.0L171.9,547.4ZM171.3,546.3L171.9,546.4L172.5,547.1L172.4,547.2L171.9,546.6L171.5,546.5ZM169.0,542.9L169.3,543.3L169.4,543.6L169.2,543.4ZM171.2,555.8L171.4,555.6L171.4,555.5L171.7,554.9L171.5,554.5L171.9,553.9L172.2,553.9L172.7,554.4L172.9,554.3L173.3,554.6L173.6,554.6L174.2,554.4L174.5,554.4L174.8,554.9L174.9,555.2L174.6,555.1L174.3,555.2L174.3,555.3L174.7,555.4L174.9,555.6L175.9,557.3L176.0,557.8L176.3,558.1L176.4,558.4L176.9,559.3L177.2,560.0L177.3,560.7L177.2,560.7L177.5,561.2L178.0,562.8L178.0,563.5L177.9,563.5L177.3,563.2L177.0,562.7L176.6,562.4L175.6,561.2L175.6,560.9L175.8,560.6L175.5,560.5L175.2,560.8L174.8,560.3L174.7,560.5L174.3,560.3L174.1,560.0L174.0,559.7L173.9,559.9L173.7,559.8L173.2,559.9L172.8,559.4L173.0,559.3L173.2,559.4L173.4,559.3L173.1,558.7L173.3,558.2L173.3,558.0L172.6,557.6L172.8,557.1L172.7,556.9L172.9,556.6L172.8,556.3L172.3,556.3L172.1,556.6L171.7,556.1ZM168.9,548.2L169.1,548.1L169.4,548.0L169.7,548.3L169.3,548.5ZM170.8,556.9L170.8,556.5L170.6,556.1L171.0,556.0L171.6,556.2L171.9,556.7L172.2,556.7L172.3,556.5L172.7,556.4L172.6,557.0L172.3,557.2L172.2,558.4L172.0,558.4L171.5,558.7L171.3,558.7L171.2,558.1L171.5,557.6L171.4,557.3L171.1,557.4L171.0,557.2L170.8,557.0ZM166.8,547.0L166.9,546.8L167.1,547.2ZM167.4,549.3L167.8,549.0L167.9,549.3L167.7,549.5ZM166.5,552.5L166.3,551.3L166.4,551.1L166.6,551.1L166.9,550.6L166.8,550.2L166.5,549.7L166.9,549.6L167.0,549.9L167.3,550.3L167.6,549.8L168.0,549.7L168.3,549.8L168.5,549.4L168.9,548.9L169.2,549.2L169.8,549.2L170.3,549.5L170.2,550.0L169.9,550.6L170.1,550.9L170.3,550.9L170.3,550.5L170.5,549.7L170.7,549.5L171.3,549.8L172.0,549.6L172.2,549.8L172.6,549.8L173.0,550.2L173.1,550.7L172.8,551.1L172.2,550.9L172.1,551.0L172.3,551.2L172.6,551.2L173.2,551.6L173.0,551.9L172.6,552.0L172.8,552.1L173.1,552.1L173.4,551.9L173.6,552.5L174.0,552.9L174.4,553.7L174.3,554.1L173.7,554.3L173.4,554.3L172.6,553.9L171.5,553.5L171.0,553.3L170.8,553.5L170.6,553.4L170.6,553.6L171.1,553.9L171.4,553.8L171.2,554.1L171.3,554.2L171.5,554.7L171.4,555.1L171.1,555.8L170.3,555.7L170.2,555.4L169.5,555.0L169.0,554.5L168.9,554.8L168.6,554.6L168.3,554.1L168.3,554.0L167.9,553.5L167.9,553.3L167.5,553.0L167.1,552.9L166.9,552.6ZM127.2,540.7L127.6,540.8L127.8,541.0L127.5,541.2ZM125.8,540.7L126.1,540.6L126.9,540.6L126.9,540.8L126.6,540.9ZM120.5,537.4L120.8,537.2L121.1,537.1L121.4,537.2L121.2,537.6ZM120.0,539.3L120.0,538.7L120.3,538.6L120.7,539.1L120.5,539.4L120.0,539.6ZM120.2,542.4L120.3,542.3L120.8,541.9L120.9,542.2L120.4,542.6ZM119.0,546.2L119.1,546.1L119.1,545.6L119.4,545.5L119.3,545.2L119.6,544.8L119.8,544.8L119.7,544.5L120.1,544.2L120.2,544.0L120.8,543.4L121.0,542.6L121.3,542.3L121.3,542.0L121.3,541.5L121.7,541.3L121.8,541.6L122.1,541.5L121.9,541.9L122.0,542.0L122.4,541.8L122.5,541.9L122.4,542.2L121.6,543.0L121.0,544.0L120.9,544.5L120.5,545.0L121.0,545.3L120.7,545.6L120.4,545.7L120.1,545.6L119.9,546.0L119.8,546.0L119.2,546.4ZM118.5,542.7L119.0,540.8L119.2,541.0L119.3,540.9L119.2,540.5L119.8,539.9L119.8,540.2L119.7,540.5L119.7,541.0L119.4,541.3L119.7,541.6L119.5,542.2L119.5,542.5L119.3,543.3L119.0,543.0L118.9,542.8L118.6,542.8ZM117.9,538.9L118.1,538.7L118.4,538.8L118.6,539.1L118.3,539.4Z" }, + AL: { name: "Alabama", d: "M638.0,484.5L641.8,483.6L641.8,483.2L642.9,483.8L642.3,484.4L641.6,484.2L640.3,484.3L639.0,484.8ZM631.7,377.8L631.7,377.5L641.4,376.8L645.5,376.4L655.9,375.7L661.9,375.1L664.3,374.9L674.6,373.9L678.6,373.5L680.3,379.6L682.7,387.9L684.7,395.1L686.2,400.7L687.8,406.5L691.6,420.0L692.3,420.5L692.1,421.2L693.0,422.0L693.7,424.8L694.5,426.1L695.8,427.3L696.2,428.8L696.9,429.5L696.5,431.8L697.7,432.2L698.6,432.9L698.1,433.9L697.3,434.0L697.5,434.5L696.6,435.0L695.9,436.1L696.2,437.1L696.3,438.8L696.0,440.5L695.2,442.0L695.1,442.9L695.8,445.2L695.7,446.0L697.2,447.6L697.7,449.8L697.3,451.0L697.6,451.8L697.2,453.4L697.4,454.9L697.0,455.3L697.5,456.3L697.4,457.3L698.9,458.9L699.5,460.1L699.8,461.2L695.3,461.8L690.4,462.4L682.9,463.3L671.1,464.5L661.9,465.3L650.5,466.4L650.8,467.1L650.1,469.4L650.3,469.8L652.0,471.2L652.3,471.9L654.9,473.2L655.2,474.5L654.4,476.6L654.7,477.6L656.1,478.5L654.9,479.3L654.5,480.9L653.9,481.2L654.5,481.6L653.5,482.2L650.9,483.1L648.2,483.8L644.3,484.2L645.5,483.3L646.4,483.8L648.8,483.0L648.9,482.4L647.8,481.5L647.2,480.8L645.8,480.0L645.2,478.3L645.7,476.8L645.3,475.4L644.8,474.5L643.3,474.0L642.4,475.0L642.6,475.7L642.1,476.8L642.2,477.6L641.8,478.3L642.0,481.0L641.6,482.3L640.5,482.5L640.5,481.8L639.1,481.2L638.1,481.6L637.7,481.1L636.5,481.7L636.0,477.4L635.2,470.6L634.1,462.5L632.3,447.7L632.5,442.2L632.8,428.4L632.8,424.3L633.2,402.6L633.4,399.5L633.6,387.0L633.8,379.9L632.7,379.3Z" }, + AR: { name: "Arkansas", d: "M514.9,349.5L528.3,349.3L542.5,348.9L551.5,348.6L572.1,347.7L594.3,346.5L594.8,347.9L594.6,348.2L596.0,348.9L595.9,351.5L595.3,351.7L595.2,352.5L594.2,353.1L593.3,354.2L593.3,354.7L591.9,355.9L591.0,358.1L602.5,357.2L602.8,357.9L604.0,358.8L604.1,359.7L602.5,359.3L602.0,360.3L603.3,360.9L602.6,361.6L601.9,361.7L601.4,362.7L600.4,363.2L599.8,362.9L598.8,363.7L599.3,365.0L599.9,365.3L600.6,364.8L600.9,365.5L599.3,366.4L599.4,367.5L600.0,367.6L599.8,368.4L598.4,367.4L597.8,367.6L597.5,368.8L598.2,369.5L597.5,371.0L596.9,369.4L595.5,370.7L595.4,371.6L596.2,371.7L596.2,370.9L597.3,371.5L596.7,372.4L596.8,373.3L595.8,373.6L596.1,374.5L597.1,374.5L597.5,375.1L596.7,375.9L597.8,377.0L597.2,377.5L596.4,377.2L595.8,377.7L595.4,379.7L593.7,379.5L593.6,380.5L594.7,381.5L594.8,382.4L593.7,383.3L591.7,384.2L591.4,383.1L590.7,383.1L590.6,383.7L591.1,384.5L590.8,385.0L591.3,386.4L590.4,386.8L590.0,386.2L590.1,385.1L589.5,385.6L589.7,386.3L589.2,386.6L589.7,387.3L591.0,387.3L591.1,387.9L590.3,388.9L589.5,388.6L589.5,387.6L588.9,388.1L589.0,389.3L589.8,390.5L589.9,391.0L589.1,392.0L589.6,393.6L588.0,394.8L588.1,396L587.5,396.0L587.6,395.0L586.4,395.1L586.1,395.6L586.6,396.4L586.2,397.0L585.0,397.4L584.8,398.8L583.7,398.0L583.1,398.6L584.1,399.4L585.4,399.3L585.6,399.8L584.7,400.4L583.6,399.8L582.9,400.4L583.5,401.4L584.3,401.3L584.5,401.7L584.0,402.9L582.4,403.1L582.9,404.0L582.2,404.3L581.9,403.5L580.8,404.0L580.7,404.6L582.2,405.2L581.0,406.7L581.6,407.8L582.6,408.2L582.0,408.9L581.5,408.6L579.9,408.7L579.9,409.9L580.6,410.3L581.4,410.0L582.0,411.0L581.2,411.3L580.1,411.0L579.6,410.3L578.5,410.7L578.4,411.2L580.1,412.1L580.3,412.8L578.5,413.6L579.4,414.8L578.5,416.4L579.7,416.0L579.6,415.1L580.6,415.5L580.4,416.6L579.2,416.8L579.1,417.2L579.7,417.6L580.9,417.3L581.5,415.9L581.8,416.5L580.4,418.3L580.4,419.5L581.3,420.8L581.5,420.0L582.1,419.7L582.3,420.1L581.5,421.2L581.7,422.6L581.5,423.1L580.6,423.3L579.8,423.0L579.5,423.8L581.1,424.9L580.3,426.1L565.7,426.7L555.4,427.0L544.9,427.2L539.2,427.4L526.8,427.7L526.6,415.9L526.5,415.7L526.5,415.7L525.4,415.3L525.0,415.7L524.7,415.2L523.9,414.8L523.2,415.7L521.8,415.3L521.6,415.8L521.1,415.5L520.7,416.0L520.1,415.8L520.2,415.1L519.6,415.3L518.9,414.8L518.8,413.8L518.3,413.9L518.4,401.5L518.4,393.4L518.5,390.1L518.5,385.6L518.6,380.5L518.6,374.4L517.6,366.9L517.3,365.3L516.3,358.4L515.8,356.0L515.3,352.0Z" }, + AZ: { name: "Arizona", d: "M142.8,400.5L143.3,400.0L144.8,400.5L146.6,400.3L146.6,399.6L148.0,398.6L148.4,397.1L147.9,394.3L146.9,394.0L146.4,394.1L145.6,393.5L145.3,393.8L144.7,392.3L145.4,391.1L146.1,388.5L145.2,387.5L146.1,386.4L145.7,385.3L147.0,385.4L149.3,383.1L150.0,382.8L149.9,381.9L150.6,379.8L151.2,379.7L151.3,378.3L151.1,377.0L151.4,376.0L151.8,376.0L151.8,374.9L151.5,374.5L153.7,372.6L154.0,371.3L154.6,370.9L156.2,370.6L157.0,370.0L158.2,369.8L158.3,369.4L160.2,368.5L160.3,367.6L159.8,366.4L158.9,365.9L157.3,363.6L156.5,363.3L156.8,362.2L156.0,357.4L154.8,355.9L154.6,354.5L153.8,353.2L154.4,350.4L155.2,348.7L154.6,348.1L156.1,347.6L156.4,346.2L156.5,342.7L156.3,341.4L155.8,340.4L155.8,339.2L156.3,338.6L156.7,336.7L156.3,335.8L156.6,335.1L156.3,334.4L156.7,333.5L156.6,332.3L157.0,331.3L157.7,331.0L157.2,330.3L156.8,328.3L157.2,327.5L157.1,325.9L158.8,325.6L159.4,325.2L159.7,325.5L160.6,325.2L161.6,325.4L161.6,325.9L163.2,325.9L164.0,326.1L164.9,327.6L164.7,328.1L165.8,329.4L167.4,329.5L169.6,326.3L169.9,326.0L170.8,321.7L171.7,316.5L173.3,308.2L185.8,310.5L199.6,313.0L219.2,316.3L225.3,317.3L235.3,318.8L235.7,319.0L250.4,321.2L260.6,322.6L256.1,355.1L255.4,359.6L255.4,360.2L252.9,377.9L251.3,389.6L250.9,392.3L250.6,394.5L243.1,448.9L238.7,448.3L225.2,446.3L216.5,445.1L204.9,443.2L182.3,430.2L169.1,422.6L162.8,418.7L140.1,405.1L140.7,403.9L140.5,403.5L140.7,402.4L141.3,402.2Z" }, + CA: { name: "California", d: "M76.0,368.2L77.0,368.6L78.6,370.0L79.9,370.7L79.8,371.2L80.6,372.6L80.0,373.4L79.3,372.7L77.7,372.1L77.4,371.4L77.8,370.0L76.6,369.4ZM73.6,378.0L74.2,378.1L75.1,380.6L77.1,383.7L76.5,383.4L75.6,383.7L74.7,382.6L74.2,381.0L73.8,378.6ZM67.9,365.9L68.4,365.9L68.3,366.7L67.6,366.4ZM64.1,352.5L64.6,353.0L65.3,352.9L65.2,353.5L64.1,353.3L63.6,352.7ZM57.4,368.2L58.3,368.3L59.4,369.3L59.8,370.0L58.9,370.1L57.7,369.4ZM55.7,349.3L56.8,349.7L57.6,350.3L58.5,350.5L59.6,351.6L60.7,352.0L61.4,351.4L62.6,352.1L61.7,352.7L59.8,352.4L58.6,352.7L56.0,351.6L56.2,350.4ZM49.5,349.4L50.9,349.6L51.6,349.4L52.4,349.8L53.3,349.6L53.1,350.5L54.2,351.1L54.0,352.0L51.1,352.3L50.3,351.3ZM46.1,347.7L47.2,347.6L47.7,347.2L48.0,348.0L48.7,348.7L47.3,348.4ZM32.1,157.2L40.8,159.9L41.4,159.9L45.7,161.3L49.0,162.0L50.5,162.6L57.1,164.5L59.2,165.0L64.6,166.5L67.1,167.3L75.9,169.9L82.4,171.8L93.6,174.8L98.9,176.1L98.9,176.1L91.9,203.2L91.8,203.9L88.1,218.1L86.2,225.4L86.1,225.6L83.8,234.2L83.2,236.5L82.0,241.4L83.2,243.3L88.5,251.2L93.8,259.3L96.8,263.6L101.5,270.7L107.4,279.7L110.4,284.1L116.5,293.3L131.8,316.3L143.4,333.8L147.0,339.2L154.4,350.4L153.8,353.2L154.6,354.5L154.8,355.9L156.0,357.4L156.8,362.2L156.5,363.3L157.3,363.6L158.9,365.9L159.8,366.4L160.3,367.6L160.2,368.5L158.3,369.4L158.2,369.8L157.0,370.0L156.2,370.6L154.6,370.9L154.0,371.3L153.7,372.6L151.5,374.5L151.8,374.9L151.8,376.0L151.4,376.0L151.1,377.0L151.3,378.3L151.2,379.7L150.6,379.8L149.9,381.9L150.0,382.8L149.3,383.1L147.0,385.4L145.7,385.3L146.1,386.4L145.2,387.5L146.1,388.5L145.4,391.1L144.7,392.3L145.3,393.8L145.6,393.5L146.4,394.1L146.9,394.0L147.9,394.3L148.4,397.1L148.0,398.6L146.6,399.6L146.6,400.3L144.8,400.5L143.3,400.0L142.8,400.5L115.0,397.2L98.0,395.2L98.2,393.3L97.9,392.0L97.4,391.5L96.4,391.7L96.5,390.4L96.9,389.1L96.5,388.2L97.4,387.2L97.5,384.0L97.2,381.4L96.8,380.3L95.1,376.1L93.7,374.5L93.3,373.4L92.5,372.5L91.9,372.4L91.1,370.3L89.7,368.8L88.8,368.3L87.8,367.0L86.6,364.9L85.2,363.8L84.8,364.7L83.4,364.8L82.3,364.3L81.8,363.6L80.8,363.3L80.7,362.5L81.5,362.0L81.7,361.2L81.4,358.8L80.9,357.4L80.1,356.2L77.8,355.7L76.4,355.5L75.2,355.9L74.5,355.0L72.8,354.2L70.7,352.5L69.9,352.3L68.6,350.9L68.2,348.0L67.6,347.7L66.8,346.4L66.5,346.4L65.5,344.9L64.3,344.1L64.0,343.6L62.0,343.0L60.9,343.2L59.9,342.4L58.4,342.3L56.3,340.5L54.9,340.1L54.0,339.6L51.2,339.0L48.0,338.6L48.1,338.0L47.6,336.6L46.8,335.8L46.0,335.6L45.8,334.9L47.3,332.5L46.9,331.2L48.0,329.1L47.2,327.8L48.3,325.8L49.1,323.2L48.2,321.8L47.4,321.5L47.1,321.8L45.7,320.3L45.2,319.2L46.5,317.0L46.6,316.0L46.2,314.8L44.6,314.1L43.4,311.7L42.8,309.6L41.4,308.7L40.7,307.2L40.8,305.6L40.1,304.4L39.8,303.6L39.1,302.7L39.3,300.8L39.1,300.0L38.0,299.1L37.6,296.9L36.6,294.8L34.9,293.0L34.4,292.0L34.4,290.3L34.6,289.6L34.5,287.5L35.1,285.8L34.5,285.3L35.5,284.1L36.4,285.1L37.1,284.7L37.9,283.7L39.1,281.2L38.6,278.1L38.1,277.1L37.5,276.7L36.8,277.1L34.6,276.4L33.2,274.6L32.4,272.4L31.6,271.8L31.7,271.2L31.0,269.7L31.1,268.5L32.1,266.2L31.8,264.3L32.0,263.3L31.3,262.9L31.1,262.1L31.4,260.9L31.8,260.5L32.4,259.1L32.7,256.5L33.7,256.2L34.7,256.4L35.0,256.9L34.9,258.7L34.3,258.7L34.4,260.9L34.2,261.3L35.7,262.2L36.9,264.2L37.4,264.2L37.9,265.7L38.7,265.8L38.5,265.0L37.9,264.4L37.7,262.6L37.9,260.4L36.9,259.1L37.0,258.2L35.8,257.3L36.8,256.1L36.7,254.7L35.8,254.5L35.3,253.0L35.7,253.3L36.4,252.9L36.6,252.2L37.8,252.6L38.6,252.0L38.3,250.5L37.0,249.2L36.1,249.6L35.2,249.5L35.1,250.4L34.5,251.1L35.2,252.3L34.3,252.6L33.8,253.4L34.7,254.7L34.2,254.9L33.7,254.1L33.7,255.6L32.7,255.6L32.4,254.8L31.1,253.2L30.3,253.2L29.3,251.5L29.0,250.4L28.1,249.4L27.2,249.0L25.8,249.3L27.3,247.2L27.8,246.3L27.6,244.4L28.1,244.2L27.5,242.6L26.8,242.6L27.1,241.3L26.7,239.0L25.8,237.7L25.0,237.1L24.1,235.6L22.8,231.6L22.2,230.8L21.9,229.9L20.6,227.7L19.8,225.1L21.1,223.9L21.2,223.1L21.1,220.6L20.9,218.0L21.0,215.9L21.8,214.1L23.3,211.9L23.3,210.9L23.6,209.7L23.3,207.7L23.7,205.6L23.0,204.7L22.9,203.6L21.6,200.5L21.3,200.2L21.5,199.4L21.3,198.5L20.2,197.5L18.2,193.9L18.8,192.8L18.9,191.4L18.6,189.8L19.7,188.1L21.1,186.4L25.0,182.2L26.2,180.6L27.3,178.6L26.8,177.7L27.3,175.9L27.5,175.9L28.7,174.3L30.8,169.9L31.2,167.5L31.1,164.9L31.2,163.0L30.6,162.9L30.0,161.6L31.0,160.4L31.9,158.5Z" }, + CO: { name: "Colorado", d: "M272.9,233.2L287.3,235.1L296.4,236.3L315.9,238.5L319.9,239.1L328.0,239.9L342.5,241.3L342.9,241.3L355.9,242.5L372.8,243.8L380.8,244.4L389.2,244.9L387.8,267.4L387.4,274.8L386.8,283.1L386.7,286.9L385.1,311.4L385.0,314.1L383.7,335.2L372.1,334.3L370.7,334.1L366.8,333.8L353.9,332.9L343.2,332.1L331.6,331.0L329.4,330.8L310.4,328.8L298.7,327.6L298.6,327.4L289.0,326.3L274.5,324.5L260.6,322.6L262.1,311.4L262.3,310.7L264.2,296.6L264.3,294.1L265.6,284.1L266.3,280.0L271.3,244.4L271.4,243.5Z" }, + CT: { name: "Connecticut", d: "M857.8,180.8L858.6,180.6L865.5,179.2L868.6,178.5L868.7,179.3L869.5,179.0L869.5,178.3L871.9,177.8L873.2,177.4L884.8,174.7L885.0,175.0L885.5,177.0L886.7,181.1L887.5,183.9L888.3,187.8L887.7,188.2L888.2,189.6L887.9,190.2L887.4,190.0L886.4,190.2L885.3,190.9L884.2,191.2L883.6,191.8L882.5,191.5L882.4,192.3L879.7,193.7L879.4,193.3L878.6,193.6L877.1,194.6L876.7,194.3L875.2,194.6L874.9,195.2L873.8,195.1L871.6,196.1L871.1,195.1L870.7,195.5L869.9,197.3L869.2,197.5L868.3,199.2L867.4,198.9L866.3,200.4L865.8,200.2L864.6,201.1L865.0,201.4L864.6,202.2L862.9,202.8L861.9,204.1L861.3,203.9L860.6,204.8L860.5,204.2L858.9,202.5L862.3,199.1L860.7,197.6L860.2,194.5L859.2,188.9Z" }, + DC: { name: "District of Columbia", d: "M813.2,262.6L814.2,261.0L816.9,262.8L815.2,265.5L814.8,263.7Z" }, + DE: { name: "Delaware", d: "M836.1,241.7L836.3,242.3L836.1,241.7ZM831.8,240.5L832.7,238.7L833.4,237.9L834.8,237.2L836.1,237.0L837.7,237.4L837.1,238.4L837.1,239.6L836.7,240.3L836.3,240.3L835.3,242.1L835.6,242.8L836.4,243.2L836.6,244.2L836.3,244.8L836.4,245.6L837.5,246.4L838.1,247.4L839.7,248.3L840.5,249.4L841.0,250.5L840.8,251.2L841.5,253.6L842.6,254.3L843.2,255.0L843.7,256.4L846.3,258.5L847.4,258.8L847.9,258.2L848.3,258.9L849.1,261.2L850.4,265.8L844.0,267.2L839.5,268.0L839.1,266.7L832.2,242.2Z" }, + FL: { name: "Florida", d: "M802.1,585.0L802.9,583.7L803.4,584.3L802.5,585.2ZM800.2,586.5L800.8,585.7L801.5,585.5L801.3,586.1ZM795.0,589.5L798.5,587.2L799.1,587.7L796.0,589.7ZM781.5,594.6L782.6,592.4L783.9,591.4L785.6,590.3L785.7,589.8L788.2,588.2L791.1,589.0L791.6,589.9L792.7,590.6L792.5,590.8L789.7,592.2L789.4,591.7L787.4,592.1L787.3,592.6L784.1,594.5L781.5,595.1ZM777.5,595.8L780.2,594.9L779.6,595.9L778.4,596.3L777.5,596.3ZM774.3,595.8L774.7,595.1L775.6,595.2L775.3,596.0ZM765.5,549.4L765.9,549.7L767.8,553.5L768.5,553.9L769.8,554.2L770.2,553.8L771.3,554.1L770.4,554.8L769.7,554.9L768.1,554.2L767.5,553.8L766.2,551.7L765.6,550.3ZM758.5,596.5L759.5,596.2L759.9,596.5L758.4,596.9ZM709.4,487.3L711.3,486.2L711.3,486.7L710.3,487.5L709.6,487.8ZM699.8,461.2L700.4,462.7L701.3,463.6L701.6,465.2L702.2,466.6L703.2,467.4L712.6,466.7L730.5,465.5L744.7,464.6L754.0,463.9L753.7,464.2L754.0,465.3L754.5,465.7L754.5,467.1L755.5,468.4L758.0,467.8L757.8,466.4L758.1,465.4L757.9,463.1L756.9,461.5L757.0,460.3L756.8,459.4L757.3,459.0L756.9,458.6L757.7,458.6L758.2,457.4L759.2,457.4L759.8,458.0L761.0,457.8L762.3,458.2L762.8,458.6L765.1,458.6L766.3,458.8L767.2,458.4L768.2,458.6L768.5,458.8L768.5,461.0L769.0,462.7L768.8,463.1L769.6,463.5L770.1,465.3L770.5,467.4L773.2,474.6L774.5,476.9L774.7,477.8L777.5,483.3L780.6,488.4L783.3,492.4L789.0,499.5L792.3,502.8L792.7,504.0L793.7,505.4L792.6,506.7L792.5,507.8L792.7,509.4L793.5,511.8L794.2,513.6L795.7,516.1L799.0,520.8L800.6,523.7L801.2,525.3L801.7,525.7L802.9,528.2L804.6,530.9L805.4,532.0L806.1,533.7L807.4,535.6L809.4,540.3L810.1,544.7L810.2,548.1L810.5,552.1L810.4,552.8L810.7,558.3L811.3,561.4L811.3,563.0L811.0,564.6L811.2,565.4L810.7,565.0L810.7,564.1L810.3,563.7L809.2,564.4L808.8,566.4L808.5,566.8L808.6,568.0L808.1,568.9L808.2,570.4L808.7,570.9L808.7,571.8L809.2,572.0L808.8,573.1L808.2,573.5L808.3,574.4L809.7,573.4L810.9,569.5L811.3,568.6L811.4,569.4L811.1,571.0L809.3,575.6L808.9,577.3L807.4,579.3L805.4,582.3L803.8,583.8L803.6,583.6L805.7,580.9L806.6,580.0L806.9,579.0L806.9,577.4L807.1,576.7L806.6,576.4L806.0,576.7L805.4,576.3L805.0,576.7L802.6,577.5L801.8,578.4L801.1,578.7L799.7,578.0L798.4,578.5L798.0,579.3L796.1,580.0L794.5,580.4L793.1,579.6L792.3,578.4L792.2,576.9L792.5,575.7L792.9,575.7L792.6,574.8L791.5,573.1L790.5,572.4L790.6,571.7L789.8,570.6L788.9,570.1L788.3,568.6L787.8,568.3L787.1,568.7L786.2,566.9L784.3,566.6L784.2,566.3L782.6,565.9L780.9,565.1L780.2,565.4L779.7,566.2L778.2,564.1L776.7,561.4L775.8,558.2L775.0,556.3L774.4,555.3L772.1,553.4L771.2,553.4L771.0,552.4L770.1,552.1L770.3,553.3L769.3,553.7L769.1,552.4L768.2,550.4L767.2,549.5L767.3,549.1L768.3,549.0L769.0,549.6L769.3,546.5L769.0,544.9L768.4,544.7L768.2,544.0L768.8,543.7L768.4,543.2L767.6,543.4L767.3,544.0L766.6,544.4L767.5,547.1L766.9,547.5L765.6,548.0L765.3,548.9L765.1,547.5L764.6,546.6L763.1,545.1L760.8,542.0L759.9,540.3L758.1,537.8L755.8,535.3L754.7,534.4L754.2,533.3L753.4,532.3L754.1,532.5L754.3,533.1L755.3,532.4L755.8,530.9L756.6,530.3L757.2,528.3L758.0,527.5L757.8,527.1L758.7,526.4L759.3,524.7L758.7,523.4L757.1,523.2L757.8,525.3L756.2,524.9L756.5,524.2L756.2,523.0L755.8,522.3L752.9,521.4L753.2,522.6L752.5,523.2L753.3,523.8L754.5,523.8L755.6,525.7L755.0,526.6L755.1,527.8L754.9,528.4L753.5,528.7L753.3,529.3L753.9,530.0L753.4,530.6L753.0,529.9L752.9,528.3L751.7,526.9L751.0,526.4L750.3,525.4L750.2,521.9L749.7,520.7L749.0,517.7L749.6,517.5L749.8,519.3L750.4,521.0L751.0,521.0L750.3,518.1L750.9,517.4L750.8,516.6L751.3,515.7L751.2,514.9L751.5,513.9L751.4,513.2L751.9,512.2L751.7,510.5L751.9,508.8L751.3,507.6L751.3,506.6L750.3,506.1L750.4,505.3L749.5,503.3L750.2,502.0L748.4,500.1L748.6,499.5L747.9,498.5L747.2,498.6L747.4,497.9L747.2,497.0L746.7,496.8L743.4,496.8L742.9,497.9L742.4,498.0L741.5,496.2L741.6,495.3L740.6,494.8L739.7,494.8L739.4,493.6L738.8,492.6L737.9,491.8L736.8,491.8L736.4,491.0L734.6,490.4L734.3,488.2L733.9,487L733.0,487.0L732.2,486.3L731.3,486.1L730.2,485.1L730.1,484.3L729.4,483.7L729.0,482.8L727.9,482.1L725.8,481.1L722.9,480.1L720.9,478.9L720.2,479.1L718.5,479.9L716.3,479.6L716.3,480.3L714.6,481.8L715.5,483.6L715.4,484.2L714.7,484.4L713.6,484.3L713.2,483.8L711.6,484.4L709.6,486.1L705.4,489.1L705.0,489.1L705.4,488.2L704.7,488.1L704.3,488.9L703.3,489.8L700.9,490.1L701.9,490.9L702.1,491.6L703.2,491.9L705.2,490.6L707.1,489.6L708.8,487.8L709.0,488.1L707.6,489.8L705.7,490.9L703.4,492.4L702.6,492.8L701.9,492.2L700.7,491.9L699.0,491.1L697.7,491.1L696.6,491.8L695.5,490.1L694.9,487.9L695.3,487.0L695.6,489.0L696.2,490.7L696.7,491.1L697.3,490.3L697.2,488.4L695.8,486.5L694.4,485.5L693.2,485.4L692.1,484.8L690.8,483.5L688.9,482.8L687.2,481.7L684.2,480.2L680.8,479.1L676.7,478.1L674.5,478.0L670.2,478.0L668.0,478.4L664.8,479.2L660.4,480.5L658.2,481.0L657.7,480.9L653.5,482.2L654.5,481.6L653.9,481.2L654.5,480.9L654.9,479.3L656.1,478.5L654.7,477.6L654.4,476.6L655.2,474.5L654.9,473.2L652.3,471.9L652.0,471.2L650.3,469.8L650.1,469.4L650.8,467.1L650.5,466.4L661.9,465.3L671.1,464.5L682.9,463.3L690.4,462.4L695.3,461.8Z" }, + GA: { name: "Georgia", d: "M678.6,373.5L681.1,373.3L689.9,372.2L701.8,370.7L714.4,369.2L714.3,369.0L723.6,367.6L723.5,369.0L721.7,370.6L720.3,372.8L720.5,373.5L720.0,374.1L720.4,375.3L722.5,376.6L723.7,376.6L725.4,378.4L727.0,379.2L728.8,378.6L729.4,378.8L730.1,379.9L730.4,381.1L731.3,381.6L731.6,382.5L732.5,383.4L732.6,384.4L733.3,385.6L734.1,386.0L734.8,387.2L735.8,388.0L736.8,389.8L737.4,389.7L738.9,390.9L740.9,391.7L743.1,393.3L743.5,394.4L744.2,395.1L744.4,395.8L745.4,396.4L746.1,396.4L747.4,396.9L748.8,398.5L749.9,398.9L750.2,399.3L749.9,400.2L750.2,400.9L750.1,401.5L752.1,402.8L752.0,403.4L752.9,404.1L753.7,403.9L753.6,404.7L754.3,405.5L756.2,406.3L756.8,406.1L758.1,407.1L759.4,407.7L759.3,409.1L760.3,410.2L760.6,411.1L761.2,411.3L761.5,412.9L761.8,413.5L761.6,414.4L762.0,414.5L762.4,415.3L762.2,416.2L763.2,417.0L764.9,417.2L765.0,417.6L766.7,418.9L766.6,419.6L767.9,421.5L768.1,421.4L768.8,422.7L768.2,423.7L769.2,424.8L769.0,425.4L769.5,426.5L771.0,426.9L771.7,426.5L773.4,427.6L774.0,427.6L774.8,427.7L774.7,429.0L773.8,429.7L773.1,429.5L772.9,430.5L773.6,430.5L772.7,431.8L771.2,431.6L771.2,432.7L771.9,432.8L771.5,434.0L770.5,435.2L769.4,435.2L769.2,435.5L770.1,436.0L770.6,435.8L770.8,437.4L770.5,438.7L768.7,439.5L768.8,439.9L769.9,439.5L770.4,439.9L769.2,442.6L769.1,444.4L769.6,444.6L769.4,445.2L769.3,447.1L768.5,447.7L768.1,448.9L767.5,449.1L767.7,450.4L767.5,451.8L767.0,451.8L766.3,452.8L767.3,453.1L767.9,452.5L768.2,454.1L767.6,457.3L768.2,458.6L767.2,458.4L766.3,458.8L765.1,458.6L762.8,458.6L762.3,458.2L761.0,457.8L759.8,458.0L759.2,457.4L758.2,457.4L757.7,458.6L756.9,458.6L757.3,459.0L756.8,459.4L757.0,460.3L756.9,461.5L757.9,463.1L758.1,465.4L757.8,466.4L758.0,467.8L755.5,468.4L754.5,467.1L754.5,465.7L754.0,465.3L753.7,464.2L754.0,463.9L744.7,464.6L730.5,465.5L712.6,466.7L703.2,467.4L702.2,466.6L701.6,465.2L701.3,463.6L700.4,462.7L699.8,461.2L699.5,460.1L698.9,458.9L697.4,457.3L697.5,456.3L697.0,455.3L697.4,454.9L697.2,453.4L697.6,451.8L697.3,451.0L697.7,449.8L697.2,447.6L695.7,446.0L695.8,445.2L695.1,442.9L695.2,442.0L696.0,440.5L696.3,438.8L696.2,437.1L695.9,436.1L696.6,435.0L697.5,434.5L697.3,434.0L698.1,433.9L698.6,432.9L697.7,432.2L696.5,431.8L696.9,429.5L696.2,428.8L695.8,427.3L694.5,426.1L693.7,424.8L693.0,422.0L692.1,421.2L692.3,420.5L691.6,420.0L687.8,406.5L686.2,400.7L684.7,395.1L682.7,387.9L680.3,379.6Z" }, + HI: { name: "Hawaii", d: "M300.7,575.2L300.9,574.4L302.3,572.9L303.2,572.8L304.2,571.0L305.4,570.0L305.6,568.9L304.3,567.1L304.0,566.2L303.9,564.2L304.5,563.5L305.9,563.7L307.3,564.3L307.5,564.9L309.2,565.7L310.3,566.6L311.2,566.5L313.1,567.1L316.1,568.5L317.0,568.9L318.7,570.0L319.9,571.1L321.2,572.6L321.0,573.5L321.1,575.2L321.7,575.4L322.9,575.1L323.4,576.2L323.4,577.3L325.1,578.9L326.7,579.6L327.1,580.0L326.8,580.9L325.8,581.8L324.6,582.7L323.5,583.8L321.8,584.6L320.3,585.5L318.7,585.8L317.5,585.6L316.8,585.7L315.5,587.0L314.3,587.5L313.3,588.4L312.2,588.7L311.3,589.9L311.4,590.5L310.8,591.2L310.4,592.3L308.9,593.6L307.8,592.4L306.1,591.4L304.4,590.9L303.7,589.0L304.0,586.9L304.3,584.0L303.6,582.0L303.6,581.1L302.9,580.8L302.6,578.7L302.0,577.4L301.3,577.3ZM287.1,549.0L287.5,547.7L288.3,546.6L289.4,546.5L290.4,547.2L291.1,548.6L291.9,549.6L293.7,549.0L295.1,548.4L297.0,548.8L297.0,549.1L298.3,550.0L299.1,550.3L299.4,551.1L301.8,551.8L302.1,552.4L302.2,553.4L301.6,554.2L300.6,555.0L300.1,554.9L298.8,555.6L297.8,555.4L295.5,556.4L293.9,556.6L292.7,556.1L292.1,552.1L291.6,551.7L290.5,552.2L288.6,551.2L287.6,550.1ZM287.1,557.7L287.6,557.1L289.7,556.0L290.5,556.6L290.2,557.4L290.5,557.8L289.6,558.1L289.2,557.8L287.8,558.3ZM279.5,549.4L280.1,548.9L281.0,548.8L283.0,549.2L284.3,550.3L284.9,551.3L284.2,552.5L282.8,553.1L281.5,553.2L281.0,552.0L280.7,550.6L279.7,550.0ZM274.3,545.0L274.8,544.0L275.5,543.5L275.3,542.4L276.6,542.4L276.8,542.7L280.9,543.2L281.6,542.6L281.9,543.4L283.6,543.6L285.6,543.3L286.9,543.8L286.3,544.8L285.0,545.8L283.4,546.2L280.8,545.6L278.9,545.0L277.7,545.2L275.5,545.3ZM254.1,534.4L257.3,534.2L258.3,533.3L258.6,532.6L259.6,531.7L260.6,531.4L261.1,531.9L261.5,533.3L263.0,534.9L263.3,535.9L263.0,536.2L263.2,537.1L264.6,538.1L264.8,537.0L265.7,537.1L265.4,538.3L266.0,538.7L265.9,539.3L267.2,540.6L266.3,541.3L265.5,541.0L263.9,541.5L263.4,541.0L262.2,540.4L260.3,540.2L258.0,540.6L257.5,540.5L257.0,538.9L256.1,538.3L256.1,537.7L255.0,536.4L255.0,535.2ZM222.6,524.1L222.7,523.3L223.5,522.6L223.8,521.7L226.3,520.4L226.9,519.9L228.7,520.2L228.9,519.8L230.1,520.0L230.7,519.7L231.8,520.1L232.5,520.8L232.9,521.7L232.9,522.6L232.1,523.7L232.1,525.8L231.8,526.3L229.7,527.8L229.1,527.5L226.4,527.2L225.1,525.8L223.3,525.3ZM213.0,528.0L213.3,527.2L214.2,526.4L215.6,525.5L215.8,524.8L216.6,524.6L216.7,525.2L216.4,526.3L216.5,527.0L215.0,527.5L213.8,529.4L212.9,528.8Z" }, + IA: { name: "Iowa", d: "M483.0,191.9L494.6,191.9L512.7,191.8L523.1,191.6L536.0,191.3L542.7,191.1L555.7,190.6L567.5,190.0L567.2,191.0L567.9,192.0L567.9,193.4L569.5,194.1L570.3,195.5L569.3,196.7L569.0,197.8L568.5,198.2L568.7,200.3L569.3,202.0L569.3,203.3L570.0,203.8L571.0,207.0L573.0,208.1L575.8,208.7L576.8,209.0L577.9,211.0L578.0,211.8L578.0,212.7L579.4,213.3L579.5,213.8L580.8,214.4L581.9,215.6L581.7,216.7L582.7,218.1L585.6,219.3L586.4,220.1L586.4,221.8L586.9,222.5L586.5,223.7L586.8,224.8L586.4,226.2L586.5,227.0L584.9,228.1L584.4,228.6L584.5,229.6L584.0,230.8L584.1,232.1L583.2,232.6L582.2,233.7L580.7,233.8L580.1,234.1L579.2,235.2L577.8,235.6L575.9,235.6L574.6,236.4L573.8,236.2L572.7,236.7L572.4,237.7L572.3,239.2L571.8,240.7L573.0,242.3L573.8,242.4L574.7,243.8L574.8,245.7L574.6,247.7L574.0,248.1L573.2,249.4L572.6,250.0L572.6,251.3L572.3,252.3L572.3,253.4L571.3,254.3L570.2,254.3L568.3,255.3L567.6,256.6L568.3,257.3L568.2,259.0L568.3,260.0L567.6,260.3L566.5,260.2L565.8,259.7L565.7,258.6L565.1,258.6L564.0,257.5L564.1,256.8L563.0,256.6L562.9,256.0L562.1,255.3L556.0,255.8L546.9,256.4L535.0,257.0L531.3,257.1L523.4,257.4L514.0,257.7L504.4,257.6L494.3,257.5L494.6,257.0L494.0,255.9L493.2,255.6L492.3,254.5L492.4,253.7L493.2,253.1L492.9,251.5L493.5,250.5L493.1,250.0L493.2,248.7L492.7,248.3L492.7,247.5L492.3,246.9L492.6,246.4L492.3,244.6L493.0,244.2L491.6,243.8L491.8,243.1L491.5,241.8L492.3,241.1L491.1,240.5L491.5,240.0L491.5,237.7L490.3,237.5L490.4,236.0L489.9,236.0L489.7,236.7L488.8,236.2L489.0,235.1L488.4,234.4L488.8,233.6L488.3,232.8L489.0,232.5L488.6,231.4L489.1,231.0L489.3,230.1L488.6,229.7L488.5,229.0L487.7,227.8L488.0,227.6L488.2,226.3L487.3,226.2L487.3,225.6L486.4,225.4L486.7,225.1L485.8,224.6L485.9,223.0L484.6,221.9L484.4,221.0L485.0,220.5L484.2,218.5L483.6,217.9L483.6,216.5L484.1,215.6L483.9,214.8L483.1,214.6L482.3,214.0L482.5,213.1L482.0,211.5L481.0,210.3L480.1,209.8L480.0,208.3L480.7,207.8L480.9,206.8L481.5,206.5L481.5,204.9L482.2,204.1L481.9,203.7L482.3,203.1L482.1,202.0L482.9,201.7L483.3,200.5L482.8,199.8L482.7,198.2L481.3,198.1L481.4,197.5L481.0,196.5L481.8,196.4L481.9,194.3L480.6,193.1L481.0,192.3L480.7,191.9Z" }, + ID: { name: "Idaho", d: "M167.9,100.5L167.7,98.6L167.4,98.3L168.7,96.8L168.2,95.9L168.4,94.7L168.2,93.6L167.5,91.9L168.1,91.1L173.3,67.9L173.5,66.9L176.4,53.9L177.7,48.6L179.5,40.4L180.8,35.1L189.7,37.0L195.0,38.1L191.9,53.1L191.4,55.1L190.3,60.3L191.8,63.6L192.5,64.1L192.6,65.8L193.0,65.8L193.2,66.8L193.8,67.4L193.4,68.5L193.9,69.7L193.0,70.1L192.8,70.7L193.4,71.0L193.4,72.1L194.2,72.4L194.0,72.8L192.8,72.7L192.0,73.2L192.6,73.3L194.8,75.4L194.9,76.5L196.5,77.7L197.7,78.2L198.1,79.0L197.8,79.7L198.4,80.0L198.5,80.7L199.1,81.1L199.8,82.3L200.5,84.1L200.6,85.2L201.3,85.4L202.1,86.7L201.7,88.0L202.3,89.3L203.9,90.7L203.4,91.7L203.7,92.1L204.5,91.8L204.9,91.3L205.6,91.6L205.9,92.3L205.4,93.0L205.7,93.8L206.7,93.9L207.9,94.4L208.2,94.0L209.7,93.9L210.0,94.2L210.0,95.3L209.0,97.5L208.3,97.4L208.5,98.8L207.5,99.9L207.0,102.0L206.2,102.3L206.5,103.0L206.2,104.5L205.2,104.4L204.9,105.3L205.7,106.1L205.0,107.1L205.0,108.2L205.9,108.9L205.4,109.7L205.9,110.9L205.4,111.6L204.0,111.4L202.7,112.9L203.5,114.5L203.2,115.3L202.1,115.8L202.4,116.6L202.0,117.6L203.4,117.8L203.9,119.1L204.6,119.7L204.7,120.4L206.2,119.9L206.6,118.8L207.2,119.2L208.4,118.9L209.7,117.6L210.7,117.0L210.7,116.3L211.2,116.1L212.0,116.8L212.4,117.7L212.2,118.2L212.8,118.2L213.6,118.9L212.8,120.6L213.9,120.8L213.8,121.7L213.3,122.2L213.5,123.3L213.8,123.8L213.5,125.1L214.1,126.2L214.0,126.9L215.1,128.5L215.2,130.0L216.1,130.4L215.9,130.9L216.8,131.8L216.8,133.0L216.5,134.0L215.7,134.1L216.0,136.1L217.3,137.4L217.4,138.2L219.0,137.6L220.6,139.0L221.3,141.3L221.4,142.3L220.7,143.1L221.6,144.8L221.2,145.4L221.3,146.5L222.1,147.4L223.0,148.0L223.5,149.0L224.0,148.7L223.9,147.6L225.0,146.4L226.0,146.1L226.9,146.7L228.7,147.1L229.3,147.6L229.8,147.3L231.0,148.3L231.6,147.5L231.9,146.4L232.4,146.5L233.0,145.9L233.9,146.2L234.5,147.0L235.3,146.9L235.7,147.4L236.9,147.1L237.5,147.4L238.3,147.1L239.5,147.1L240.1,148.4L241.9,148.0L242.1,147.6L243.4,148.1L244.0,147.9L245.7,148.7L245.1,147.3L246.3,145.6L246.1,144.9L247.2,145.1L247.8,144.1L248.7,145.0L249.9,147.5L249.6,148.3L250.8,149.6L251.0,150.6L252.1,151.2L251.6,153.9L250.9,158.9L249.3,168.8L249.3,169.3L246.0,190.0L245.4,193.1L243.3,206.0L236.4,205.0L225.0,203.1L224.7,203.0L213.5,201.0L198.2,198.5L194.7,197.7L187.8,196.3L185.7,195.9L182.4,195.1L178.7,194.4L174.1,193.5L157.2,189.9L146.6,187.5L155.5,147.8L155.8,146.8L156.5,146.7L156.7,145.7L157.7,144.3L158.0,143.5L157.5,142.8L157.6,142.0L158.4,141.8L159.2,140.8L159.3,140.2L158.3,139.6L158.4,138.6L157.3,138.6L156.6,137.3L155.5,137.5L154.9,136.7L155.6,135.7L155.0,134.2L155.6,133.7L155.7,132.4L156.9,131.7L157.8,130.6L158.6,128.9L159.8,127.3L161.8,126.8L161.9,126.4L163.2,125.2L164.0,124.0L163.8,122.8L164.2,121.9L165.2,121.3L165.7,120.4L166.6,119.8L167.5,117.7L168.2,116.8L168.3,116.1L170.2,113.6L170.8,113.3L171.1,112.3L172.9,110.6L172.7,109.5L172.2,108.4L172.4,107.4L171.8,106.3L170.7,106.0L170.4,105.0L169.4,104.9L168.8,103.3L168.3,102.7Z" }, + IL: { name: "Illinois", d: "M567.6,260.3L568.3,260.0L568.2,259.0L568.3,257.3L567.6,256.6L568.3,255.3L570.2,254.3L571.3,254.3L572.3,253.4L572.3,252.3L572.6,251.3L572.6,250.0L573.2,249.4L574.0,248.1L574.6,247.7L574.8,245.7L574.7,243.8L573.8,242.4L573.0,242.3L571.8,240.7L572.3,239.2L572.4,237.7L572.7,236.7L573.8,236.2L574.6,236.4L575.9,235.6L577.8,235.6L579.2,235.2L580.1,234.1L580.7,233.8L582.2,233.7L583.2,232.6L584.1,232.1L584.0,230.8L584.5,229.6L584.4,228.6L584.9,228.1L586.5,227.0L586.4,226.2L586.8,224.8L586.5,223.7L586.9,222.5L586.4,221.8L586.4,220.1L585.6,219.3L582.7,218.1L581.7,216.7L581.9,215.6L580.8,214.4L579.5,213.8L579.4,213.3L578.0,212.7L578.0,211.8L580.6,211.6L593.9,210.8L596.9,210.7L608.3,210.1L610.7,209.9L619.6,209.1L624.4,208.8L624.5,211.2L624.2,213.1L625.0,215.2L626.4,217.3L627.2,218.0L627.4,219.0L628.4,221.6L628.8,223.0L629.8,224.7L630.3,225.1L630.5,226.0L630.9,230.9L632.9,253.9L633.3,258.7L633.8,264.4L633.8,264.6L634.4,272.3L634.5,272.3L635.1,279.0L634.3,279.2L634.0,279.9L634.0,281.0L634.6,281.9L633.6,283.2L633.9,284.6L635.0,285.6L635.0,287.1L636.2,287.8L635.7,290.0L636.8,291.7L636.9,292.5L636.2,294.1L635.4,294.4L635.0,295.0L634.6,296.7L634.7,297.9L633.3,298.9L633.5,299.6L632.8,301.3L632.3,301.5L631.7,303.6L631.1,303.0L630.8,303.8L630.4,303.1L629.9,304.5L629.4,304.4L629.7,305.5L630.7,306.6L629.4,308.1L630.1,307.7L630.1,308.4L628.9,308.9L629.5,309.3L629.5,310.5L628.7,311.9L629.7,312.3L628.1,312.3L629.3,314.0L628.5,313.9L628.8,314.5L629.5,314.5L629.1,315.8L628.1,316.6L627.5,317.7L628.1,319.7L629.5,320.9L629.2,321.9L626.2,322.5L625.5,322.8L624.4,323.9L623.5,323.5L622.4,324.4L622.4,325.5L621.9,326.8L622.1,327.3L623.3,328.4L623.8,329.7L623.3,331.4L622.4,331.7L621.5,331.5L620.3,330.6L618.0,330.0L617.1,329.3L615.0,328.7L613.8,328.7L613.0,329.1L612.3,330.0L611.8,331.3L610.9,332.4L610.7,333.5L611.7,334.4L611.0,334.7L610.4,333.7L609.2,332.7L608.4,333.0L609.4,333.8L608.8,334.4L607.2,333.4L607.2,332.4L606.4,331.5L605.5,329.9L605.5,329.0L604.4,328.1L604.8,326.9L605.7,326.6L605.9,325.4L604.0,322.4L603.8,321.5L604.6,321.3L603.9,320.0L603.8,318.9L602.6,318.5L601.9,317.7L601.1,317.7L601.1,316.9L599.6,315.7L598.7,315.5L598.6,315.0L597.7,314.5L597.1,315.1L595.9,315.1L595.4,314.1L596.1,313.6L595.9,313.1L594.9,313.3L593.8,312.2L593.3,312.3L592.6,311.3L590.9,310.6L589.6,309.0L588.4,308.1L588.0,306.8L588,305.2L588.4,304.2L589.4,302.8L589.6,300.9L590.9,299.0L590.9,298.2L590.2,296.5L590.9,295.3L591.7,294.7L591.7,293.5L589.3,292.1L588.3,292.0L586.6,291.3L585.4,291.4L584.9,292.7L584.3,293.4L583.6,293.6L582.2,292.3L581.9,291.1L581.1,289.5L581.6,288.7L581.1,287.2L580.8,285.5L579.5,283.8L575.7,281.4L574.7,280.4L573.9,279.0L573.1,278.8L572.4,277.5L571.8,277.3L570.8,276.2L569.1,274.8L569.2,273.6L569.0,273.1L568.0,272.5L567.7,271.8L568.1,270.5L567.7,270.0L566.7,268.1L566.2,264.9L566.3,263.5L567.2,260.7Z" }, + IN: { name: "Indiana", d: "M630.5,226.0L631.5,226.7L632.1,226.2L632.6,226.5L632.3,227.3L633.9,227.6L635.6,227.4L637.3,226.8L640.2,225.0L641.9,223.7L647.2,223.2L658.9,222.0L670.0,220.8L675.1,220.2L675.3,221.6L675.9,226.2L679.0,252.8L679.8,261.2L680.8,269.7L681.3,275.0L681.9,279.6L680.8,280.6L680.7,281.0L681.9,282.3L682.1,282.9L681.5,283.7L681.7,284.4L682.8,284.4L683.1,284.8L682.4,285.8L682.9,286.6L681.5,286.7L680.6,287.3L680.0,287.2L678.0,288.7L677.2,289.5L676.0,289.5L675.3,288.7L673.8,289.0L672.8,289.0L672.1,289.7L672.6,292.1L673.1,293.4L672.2,294.3L671.9,295.2L670.1,296.1L669.3,299.3L668.2,300.2L667.3,299.8L666.7,300.1L666.4,301.4L665.6,302.9L665.8,304.5L665.6,305.9L665.2,306.4L663.8,306.9L663.6,307.7L662.7,306.6L661.3,306.8L659.6,305.9L659.4,304.1L657.9,302.9L657.4,303.0L657.6,303.6L658.4,303.8L658.4,304.3L657.6,304.4L657.1,305.0L656.6,304.6L656.1,305.2L656.7,305.5L656.4,306.3L655.3,306.6L655.3,308.5L655.7,309.2L654.3,309.5L654.3,310.7L653.7,311.3L653.2,310.9L653.4,309.9L652.8,309.8L652.2,310.3L651.5,309.9L650.6,308.3L649.6,308.4L648.8,309.5L647.0,310.2L646.4,310.9L646.3,312.8L645.9,313.3L645.2,313.4L644.6,312.3L643.5,312.1L642.0,311.2L640.6,310.5L639.3,310.4L638.5,311.2L637.6,311.0L637.1,310.0L636.6,310.0L636.3,311.3L637.1,312.5L636.3,313.3L635.7,313.3L635.7,312.2L635.4,311.7L632.8,312.5L632.0,311.5L631.5,311.5L630.9,312.3L631.7,314.0L631.0,315.0L629.5,314.5L628.8,314.5L628.5,313.9L629.3,314.0L628.1,312.3L629.7,312.3L628.7,311.9L629.5,310.5L629.5,309.3L628.9,308.9L630.1,308.4L630.1,307.7L629.4,308.1L630.7,306.6L629.7,305.5L629.4,304.4L629.9,304.5L630.4,303.1L630.8,303.8L631.1,303.0L631.7,303.6L632.3,301.5L632.8,301.3L633.5,299.6L633.3,298.9L634.7,297.9L634.6,296.7L635.0,295.0L635.4,294.4L636.2,294.1L636.9,292.5L636.8,291.7L635.7,290.0L636.2,287.8L635.0,287.1L635.0,285.6L633.9,284.6L633.6,283.2L634.6,281.9L634.0,281.0L634.0,279.9L634.3,279.2L635.1,279.0L634.5,272.3L634.4,272.3L633.8,264.6L633.8,264.4L633.3,258.7L632.9,253.9L630.9,230.9Z" }, + KS: { name: "Kansas", d: "M387.8,267.4L403.4,268.3L409.7,268.6L425.7,269.4L442.3,270.0L452.2,270.2L469.2,270.6L485.2,270.7L494.0,270.7L502.1,270.7L503.1,271.8L503.9,272.0L503.9,272.9L504.7,272.7L505.0,273.4L506.6,273.7L507.1,272.9L508.6,273.1L508.3,273.7L508.8,274.3L509.4,274.5L509.2,275.3L508.7,275.3L508.8,276.0L509.6,275.7L509.5,276.7L508.9,276.8L508.1,276.3L507.8,277.8L506.9,278.2L506.5,279.0L506.6,279.8L505.6,280.2L505.7,281.2L506.6,282.0L506.6,282.5L507.6,283.1L508.4,284.3L509.2,284.3L509.6,284.7L509.0,285.2L509.4,286.7L510.5,287.7L510.3,288.2L511.3,288.5L511.6,289.1L512.4,289.3L513.0,289.0L513.3,289.6L514.5,289.6L514.2,290.4L514.4,299.0L514.3,301.3L514.5,314.8L514.5,315.8L514.7,330.9L514.7,332.8L514.8,338.2L499.0,338.4L486.5,338.4L475.8,338.3L462.0,338.2L448.8,337.9L432.4,337.4L425.9,337.2L416.2,336.7L406.7,336.3L393.5,335.7L383.7,335.2L385.0,314.1L385.1,311.4L386.7,286.9L386.8,283.1L387.4,274.8Z" }, + KY: { name: "Kentucky", d: "M611.7,334.4L610.7,333.5L610.9,332.4L611.8,331.3L612.3,330.0L613.0,329.1L613.8,328.7L615.0,328.7L617.1,329.3L618.0,330.0L620.3,330.6L621.5,331.5L622.4,331.7L623.3,331.4L623.8,329.7L623.3,328.4L622.1,327.3L621.9,326.8L622.4,325.5L622.4,324.4L623.5,323.5L624.4,323.9L625.5,322.8L626.2,322.5L629.2,321.9L629.5,320.9L628.1,319.7L627.5,317.7L628.1,316.6L629.1,315.8L629.5,314.5L631.0,315.0L631.7,314.0L630.9,312.3L631.5,311.5L632.0,311.5L632.8,312.5L635.4,311.7L635.7,312.2L635.7,313.3L636.3,313.3L637.1,312.5L636.3,311.3L636.6,310.0L637.1,310.0L637.6,311.0L638.5,311.2L639.3,310.4L640.6,310.5L642.0,311.2L643.5,312.1L644.6,312.3L645.2,313.4L645.9,313.3L646.3,312.8L646.4,310.9L647.0,310.2L648.8,309.5L649.6,308.4L650.6,308.3L651.5,309.9L652.2,310.3L652.8,309.8L653.4,309.9L653.2,310.9L653.7,311.3L654.3,310.7L654.3,309.5L655.7,309.2L655.3,308.5L655.3,306.6L656.4,306.3L656.7,305.5L656.1,305.2L656.6,304.6L657.1,305.0L657.6,304.4L658.4,304.3L658.4,303.8L657.6,303.6L657.4,303.0L657.9,302.9L659.4,304.1L659.6,305.9L661.3,306.8L662.7,306.6L663.6,307.7L663.8,306.9L665.2,306.4L665.6,305.9L665.8,304.5L665.6,302.9L666.4,301.4L666.7,300.1L667.3,299.8L668.2,300.2L669.3,299.3L670.1,296.1L671.9,295.2L672.2,294.3L673.1,293.4L672.6,292.1L672.1,289.7L672.8,289.0L673.8,289.0L675.3,288.7L676.0,289.5L677.2,289.5L678.0,288.7L680.0,287.2L680.6,287.3L681.5,286.7L682.9,286.6L682.4,285.8L683.1,284.8L682.8,284.4L681.7,284.4L681.5,283.7L682.1,282.9L681.9,282.3L680.7,281.0L680.8,280.6L681.9,279.6L682.9,278.6L683.3,278.6L684.3,279.5L685.7,279.9L686.5,279.2L687.3,279.2L687.8,278.5L688.3,278.6L688.7,279.9L690.5,280.3L691.3,281.9L692.5,283.3L692.7,284.6L693.0,285.1L695.6,285.6L697.6,284.9L699.5,285.6L699.7,286.2L700.7,286.6L701.2,287.5L703.0,287.9L703.7,286.5L705.2,285.8L706.2,286.3L708.0,286.5L708.7,286.9L709.1,287.6L709.9,287.1L711.7,286.8L712.2,285.7L713.2,284.9L713.7,284.1L714.6,284.0L715.8,283.2L716.3,283.8L716.2,284.6L717.1,286.7L718.0,287.3L719.3,287.2L720.8,288.6L721.7,289.1L721.9,289.9L722.1,291.7L722.7,292.3L722.8,293.4L722.2,294.1L722.5,294.5L722.5,295.6L722.0,295.6L722.1,296.4L723.1,297.0L723.9,297.7L724.6,299.2L725.6,299.5L725.1,300.6L725.7,301.3L726.7,301.5L726.7,302.2L727.7,303.3L728.4,303.5L729.5,306.0L730.5,306.1L731.1,306.8L731.6,306.7L732.2,307.4L732.7,307.3L733.0,308.0L734.8,308.3L735.6,308.1L729.8,315.2L727.6,316.3L726.3,317.3L725.3,318.4L723.8,319.4L724.0,321.1L723.1,322.0L722.4,322.1L721.7,322.9L722.1,324.0L721.8,324.9L720.3,325.8L718.5,326.1L717.7,327.8L717.7,328.8L716.7,329.0L714.7,329.9L712.4,331.3L711.1,331.4L709.1,332.6L708.7,333.2L708.5,333.6L703.2,334.2L698.2,334.8L693.4,335.2L688.1,335.7L684.8,335.7L680.1,336.1L676.7,336.8L670.6,337.3L667.0,337.5L661.7,337.6L658.6,337.8L657.6,338.3L657.1,338.0L647.9,339.1L642.1,339.7L634.8,340.4L634.8,339.8L630.9,339.8L631.8,342.6L631.5,343.8L622.8,344.4L614.8,345.0L609.4,345.3L607.3,345.6L608.0,342.8L608.8,342.5L610.0,344.0L610.8,343.5L611.2,342.1L611.7,341.5L610.9,340.5L611.1,339.6L612.1,339.6L612.2,339.0L611.1,338.4L611.1,337.7L611.7,337.4L612.1,336.5L612.3,334.8ZM606.1,345.8L605.2,345.8L604.5,344.7L604.7,344.1L606.1,344.1L606.5,345.0Z" }, + LA: { name: "Louisiana", d: "M627.7,489.4L628.7,490.6L629.2,492.0L629.1,494.0L628.6,496.0L628.3,496.0L628.7,494.2L628.9,492.3L628.7,491.4ZM618.8,489.9L619.5,489.2L621.6,487.5L621.8,487.7L621.0,489.0L621.1,489.5L622.1,490.1L621.1,491.1L620.8,490.2L620.2,490.5L619.0,490.4ZM614.1,502.0L615.3,501.7L614.7,502.6ZM600.1,512.4L600.6,511.9L601.6,513.1L601.0,513.4ZM596.6,513.0L599.4,513.5L598.0,513.7ZM592.9,514.0L594.7,513.6L594.8,513.9L593.0,514.4ZM567.7,503.3L568.4,502.7L569.2,502.8L569.4,502.3L570.9,502.3L572.6,503.4L573.2,503.3L573.6,503.8L572.6,504.6L572.6,505.3L571.6,505.7L567.4,503.7ZM526.8,427.7L539.2,427.4L544.9,427.2L555.4,427.0L565.7,426.7L580.3,426.1L579.7,427.1L579.5,428.0L580.2,428.4L581.1,427.9L580.9,426.6L581.7,426.5L582.3,427.8L582.2,428.6L580.9,429.7L580.6,430.4L580.6,431.8L582.7,432.3L582.6,432.8L581.6,433.5L581.0,434.2L581.2,435.2L581.7,435.5L583.0,434.9L583.3,434.0L583.8,434.7L583.3,435.4L582.4,436.1L583.9,437.0L584.3,437.4L583.6,437.6L582.4,436.8L582.1,436.8L581.9,437.9L583.5,438.8L584.2,438.4L584.7,439.0L584.2,439.4L584.3,440.5L585.8,440.8L586.2,440.0L586.5,440.3L585.5,441.9L584.7,441.8L584.9,442.8L584.6,443.6L583.6,443.1L583.2,443.6L581.4,444.1L581.3,445.6L583.5,445.7L583.3,444.6L584.3,445.0L583.8,446.3L583.0,446.8L582.7,447.5L581.8,446.8L581.5,447.3L582.8,447.7L582.8,448.7L581.5,449.0L581.1,449.5L581.3,450.5L579.7,452.1L580.2,452.5L579.8,453.0L579.4,452.7L579.2,451.9L578.4,452.1L578.0,454.0L580.0,454.1L579.7,454.4L578.2,454.6L577.4,455.3L577.5,457.4L576.3,457.4L575.5,456.9L575.2,457.7L575.9,458.2L577.1,457.9L577.4,458.5L576.6,459.2L575.3,459.6L575.4,461.1L576.4,462.5L576.4,463.0L575.8,463.2L575.2,462.6L574.9,461.7L574.3,462.5L574.8,462.8L574.9,463.6L575.8,464.3L575.7,465.1L574.5,465.6L573.3,465.5L573.3,466.2L574.1,466.8L574.3,467.5L573.7,468.5L573.8,469.0L574.9,469.9L574.5,471.0L573.6,471.5L589.1,470.7L598.3,470.2L609.5,469.4L610.1,470.1L609.6,470.5L609.7,471.4L609.3,471.8L608.8,474.2L608.4,474.8L608.7,475.4L608.1,477.2L608.7,477.4L609.1,479.2L609.8,479.8L610.1,480.5L610.9,480.9L611.7,481.6L611.7,482.7L612.9,484.1L613.0,485.4L613.3,486.6L614.3,487.5L615.1,487.5L614.0,488.2L613.4,488.1L612.3,489.3L612.2,490.0L611.4,490.4L611.7,491.1L609.7,490.9L609.0,491.8L609.4,493.1L610.7,493.2L611.6,492.7L611.4,493.8L612.0,494.5L613.0,494.8L613.9,494.5L614.3,493.9L614.5,491.9L614.3,491.7L615.9,490.6L616.1,489.7L617.4,490.3L618.3,490.1L618.3,490.5L617.2,491.2L617.2,491.9L618.3,492.1L618.6,493.3L619.6,492.9L620.2,491.3L621.4,491.7L621.2,492.8L620.3,492.8L619.5,493.8L621.0,493.6L620.9,494.2L618.7,494.7L619.7,495.9L620.5,495.5L620.0,496.6L619.4,496.2L618.4,496.0L617.6,497.2L617.7,499.1L617.1,499.2L616.6,497.6L615.8,497.6L615.7,498.9L616.7,499.9L615.8,499.4L614.8,499.3L614.3,499.7L613.2,499.6L614.5,500.3L614.6,500.9L612.9,500.1L612.9,500.6L613.8,501.1L613.0,501.5L613.1,502.1L613.9,502.7L615.3,502.9L615.3,503.3L616.1,503.7L616.1,504.3L616.7,505.2L617.2,504.6L617.6,504.9L619.2,504.9L620.3,505.4L620.5,504.9L622.0,506.5L622.7,505.6L624.5,507.6L624.6,508.7L625.1,509.0L626.3,508.3L626.8,509.1L625.2,509.5L625.1,510.1L626.2,510.1L625.7,511.1L624.9,510.7L624.2,512.6L624.4,513.5L622.9,512.9L622.7,511.8L622.1,511.6L620.1,514.4L619.1,515.2L619.5,513.9L620.1,513.3L620.4,512.4L621.0,511.9L620.9,510.9L621.5,510.4L621.4,509.4L620.6,509.0L620.4,510.2L619.4,510.9L618.5,510.4L617.4,509.0L615.0,508.3L614.2,507.5L610.3,507.1L609.5,507.4L606.3,510.4L603.2,512.8L602.7,512.6L602.9,511.8L602.1,511.6L601.9,510.8L602.3,510.7L601.3,508.8L600.5,508.4L599.9,508.4L600.0,509.0L599.5,509.7L599.5,508.2L598.8,507.2L598.0,508.5L597.0,508.3L596.5,508.7L596.0,508.1L595.6,508.7L596.3,509.8L595.5,509.8L595.0,510.4L594.8,511.4L594.3,511.3L594.0,512.4L593.4,512.2L592.1,512.9L591.8,514.4L590.6,514.2L590.9,513.7L590.0,512.5L588.7,511.5L587.9,511.8L586.1,511.5L585.3,510.9L583.6,510.7L582.4,510.3L581.2,509.2L582.1,508.9L582.5,507.8L583.1,508.0L584.0,508.9L584.4,508.5L584.4,509.8L585.5,510.1L585.1,508.1L583.4,506.9L583.4,506.1L582.6,506.0L582.0,506.8L581.1,507.1L581.2,506.3L580.6,506.5L580.7,505.8L581.3,505.2L580.6,504.5L578.6,505.5L577.8,504.0L577.2,504.2L576.6,502.0L574.8,502.0L575.2,501.4L575.2,499.7L573.0,499.5L572.1,499.8L570.7,500.6L570.2,499.5L570.7,498.7L571.3,498.7L571.1,497.8L570.0,497.7L569.0,498.2L568.4,497.8L568.3,498.6L566.6,499.4L565.7,500.1L565.2,499.5L564.0,499.8L564.0,500.4L564.7,501.0L565.9,501.1L565.3,501.7L565.9,502.9L567.3,502.4L567.7,502.7L566.8,503.0L567.2,503.4L565.0,503.6L563.2,504.6L561.8,504.9L556.1,503.9L553.6,503.1L549.6,501.3L547.9,500.8L545.1,500.1L542.8,500.1L541.8,500.4L539.3,500.3L535.3,500.9L534.1,501.1L532.3,502.2L531.1,500.4L530.5,499.9L530.6,499.4L531.7,498.5L532.6,497.1L533.1,495.5L534.0,494.8L534.8,493.8L534.1,493.4L534.9,492.1L534.3,490.6L534.6,489.8L534.5,488.8L533.4,487.8L533.8,486.4L534.6,485.4L534.2,483.6L533.7,483.2L533.9,482.4L534.9,481.8L535.0,480.5L535.8,480.0L536.0,478.6L536.6,477.4L537.2,476.7L536.9,475.5L537.0,474.8L537.6,474.3L536.8,473.3L536.9,472.7L537.7,472.2L537.6,471.2L537.0,470.6L537.4,468.6L536.1,468.9L535.6,466.7L535.2,466.8L534.4,465.9L534.7,464.9L534.5,463.9L534.0,463.7L534.0,463.0L533.0,462.4L533.4,461.8L533.2,461.2L532.3,461.1L531.7,460.5L531.3,459.5L531.7,458.9L531.5,458.1L532.0,457.3L531.4,456.2L531.5,455.5L530.5,454.5L529.8,452.9L528.6,452.3L527.8,451.0L527.3,450.8Z" }, + MA: { name: "Massachusetts", d: "M913.4,183.6L914.3,183.8L915.9,183.3L916.8,182.7L917.2,181.2L918.6,182.9L918.7,183.4L918.2,183.9L916.3,184.4L913.7,183.9ZM904.2,185.1L905.2,184.8L905.9,182.8L907.1,181.3L907.8,181.4L908.6,182.6L909.6,182.9L910.0,182.0L910.3,183.6L908.0,184.2L906.2,184.8L905.4,186.0ZM857.6,164.8L870.5,162.0L881.9,159.5L889.0,157.9L889.4,156.9L890.6,156.5L890.2,155.4L890.9,154.5L892.0,154.5L892.2,153.3L894.1,152.1L895.1,152.4L895.5,152.1L896.0,153.4L897.2,155.8L898.8,156.3L899.3,155.3L900.2,155.7L899.8,157.6L898.5,158.1L896.5,159.4L897.5,160.1L896.7,161.3L896.3,161.3L896.3,162.4L895.9,161.7L895.5,162.9L896.5,164.1L895.7,164.1L895.6,164.7L896.1,165.1L896.0,165.7L896.9,165.7L897.0,164.9L897.8,164.6L898.5,165.3L900.0,165.5L900.9,166.1L901.3,166.9L902.9,168.3L903.1,169.2L902.9,170.1L902.3,170.4L902.6,170.8L904.0,171.4L904.7,171.0L905.3,171.4L906.1,172.8L906.1,173.8L907.1,174.5L908.6,174.8L910.6,174.5L911.2,174.8L912.1,173.6L913.1,173.2L914.5,172.1L914.7,171.6L914.3,170.1L913.6,169.1L913.0,169.9L912.5,168.1L911.9,167.1L910.9,166.7L910.4,167.0L910.4,167.8L909.4,166.9L910.1,166.5L911.4,166.5L913.0,167.2L914.7,169.2L915.8,171.2L916.6,173.8L916.5,176.4L916.6,177.3L916.1,177.2L916.2,174.9L915.7,174.6L914.2,175.1L912.0,176.6L910.2,176.9L910.0,177.5L909.0,177.9L908.5,179.3L906.6,180.0L905.0,181.8L904.3,182.9L903.3,183.8L902.0,184.4L902.2,183.8L904.1,182.6L904.8,181.5L905.9,180.2L906.0,179.4L905.3,177.2L905.4,176.4L903.8,176.3L904.1,177.4L903.6,177.3L903.6,178.2L902.8,178.4L903.1,179.0L901.4,179.7L901.2,180.7L901.5,181.5L901.3,182.1L900.0,182.9L899.3,182.8L898.7,183.2L897.6,179.7L896.5,179.7L895.8,179.0L895.0,178.3L893.8,178.0L893.2,177.0L892.9,175.4L892.3,175.7L891.5,173.0L885.0,175.0L884.8,174.7L873.2,177.4L871.9,177.8L869.5,178.3L869.5,179.0L868.7,179.3L868.6,178.5L865.5,179.2L858.6,180.6L857.8,180.8L857.2,180.1L857.4,172.2Z" }, + MD: { name: "Maryland", d: "M836.8,280.3L835.9,280.5L835.6,279.1L835.9,278.5L836.8,279.1ZM834.2,276.9L834.0,275.3L834.7,274.9L835.2,275.4L836.0,277.6L835.0,277.4L835.1,276.8ZM826.1,263.7L826.4,263.2L826.8,264.0ZM770.3,252.6L788.6,249.2L802.8,246.6L811.8,244.8L818.9,243.3L831.8,240.5L832.2,242.2L839.1,266.7L839.5,268.0L844.0,267.2L850.4,265.8L850.5,266.6L850.4,268.7L850.2,269.1L849.8,273.3L849.3,275.9L842.9,278.0L842.7,279.1L842.3,279.1L841.4,278.7L840.3,279.1L839.2,280.6L838.7,280.7L838.3,279.5L838.5,278.0L839.4,277.3L838.3,277.5L838.3,276.6L838.8,275.7L837.5,275.8L836.9,276.6L836.5,276.1L836.6,274.9L838.1,274.1L837.5,273.4L837.0,273.8L836.6,273.2L837.1,270.8L836.3,271.5L836.1,272.5L836.3,273.6L835.8,273.7L834.8,272.4L835.5,272.1L835.2,271.1L834.7,271.0L834.6,272.0L834.2,272.8L834.7,273.2L834.4,274.5L834.0,274.0L833.1,274.6L832.5,274.5L831.2,273.2L830.6,273.0L830.5,272.2L828.5,269.6L829.6,269.1L829.8,268.3L829.3,268.5L828.5,267.7L828.9,266.8L829.5,266.3L830.0,266.7L830.6,266.0L830.8,266.7L832.2,266.6L833.1,267.1L833.3,266.9L832.1,265.8L831.0,265.7L830.3,265.1L829.9,265.2L828.6,263.9L828.5,264.5L827.7,264.3L827.8,265.4L827.4,265.4L827.1,263.4L827.9,261.5L828.9,262.1L829.3,261.8L828.7,259.5L828.1,259.3L827.3,260.4L826.5,260.5L826.8,261.4L826.1,261.9L826.0,259.8L826.5,257.7L827.1,258.6L828.5,258.5L829.0,257.8L828.4,256.9L828.9,255.7L827.9,256.1L828.0,257.1L828.3,257.6L827.5,257.4L827.5,256.2L826.9,255.2L826.4,255.0L826.8,252.2L827.4,251.3L827.1,250.8L827.9,250.2L828.2,249.4L830.0,249.1L829.2,248.8L830.0,247.3L829.4,247.3L829.6,244.8L827.6,245.7L827.5,246.7L828.3,247.0L828.6,247.5L828.0,248.0L826.3,250.2L825.8,249.7L826.0,248.6L825.4,248.2L825.6,249.0L825.2,250.1L825.8,250.7L825.6,251.6L824.9,249.9L823.9,249.8L824.7,251.7L824.2,251.6L824.0,252.5L824.8,252.8L823.7,253.9L823.4,254.5L822.6,254.5L822.3,254.0L820.8,253.4L821.2,254.3L821.8,254.4L822.1,255.1L823.9,255.8L824.3,257.1L824.1,257.6L825.1,258.4L823.9,259.5L824.4,260.1L824.4,260.9L823.9,260.9L823.6,262.1L824.2,263.0L823.4,264.3L824.2,265.2L824.2,266.2L824.9,267.5L825.1,269.2L825.8,270.4L827.5,271.6L828.2,272.7L827.8,273.7L827.0,273.7L827.7,274.4L828.1,273.9L828.7,274.0L828.4,275.0L828.9,275.9L830.3,277.4L830.1,277.9L830.8,279.6L830.2,279.4L829.3,278.4L828.8,278.5L828.2,277.3L827.8,277.6L827.9,278.7L827.3,278.0L826.8,278.2L826.3,277.4L825.4,276.7L823.9,276.5L821.8,276.9L820.8,274.5L820.2,274.4L820.1,275.0L821.0,276.2L820.9,276.6L819.4,276.1L819.2,275.5L818.3,275.1L817.1,273.0L816.0,274.1L814.2,275.6L813.4,275.2L812.5,273.1L812.9,271.4L813.6,270.2L814.7,269.4L814.4,269.2L814.1,268.4L814.4,267.8L815.4,267.1L815.2,265.5L816.9,262.8L814.2,261.0L813.2,262.6L812.5,262.0L811.3,262.1L810.7,261.9L810.6,261.0L808.9,260.5L806.8,260.6L806.3,259.9L805.6,259.8L805.5,258.7L805.9,258.2L806.2,257.2L804.6,256.7L804.1,255.9L803.2,256.1L802.1,255.8L801.4,256.0L800.7,255.9L800.8,254.6L800.4,253.8L799.8,253.7L799.8,253.1L798.5,252.5L797.5,251.3L798.4,250.9L798.3,250.2L797.5,250.4L796.4,250.2L795.3,250.7L794.7,250.1L793.5,249.3L792.0,249.2L790.6,251.2L789.4,251.0L789,251.8L788.1,251.7L788.9,252.2L788.1,252.3L788.7,253.2L788.0,254.1L786.3,254.3L785.8,254.1L784.8,254.3L783.5,253.8L783.3,253.4L782.4,253.2L783.1,252.8L782.3,252.7L780.6,256.1L780.1,257.3L778.3,256.9L777.6,257.0L777.1,258.6L775.4,260.0L775.0,261.4L774.3,261.5L772.7,263.9L772.1,264.1Z" }, + ME: { name: "Maine", d: "M925.3,112.7L926.0,112.4L925.8,113.1ZM923.5,114.0L923.5,112.4L924.0,112.9L925.3,113.6L924.8,114.7L924.3,114.2ZM921.9,110.2L921.9,109.4L922.8,110.5ZM917.8,113.9L918.6,113.7L919.0,114.4ZM919.1,122.5L919.4,121.7L919.9,123.1ZM917.0,117.1L917.2,116.2L918.4,115.0L919.2,115.7L918.8,116.0L920.0,117.2L919.6,118.1L918.7,118.6L917.9,118.4L918.0,117.8L917.6,117.0ZM915.8,114.2L916.2,112.7L915.9,111.5L916.3,110.9L916.8,111.3L916.4,112.1L916.7,112.7L916.6,114.1L916.2,114.8ZM896.2,147.5L893.8,146.5L893.5,145.3L893.6,144.4L890.6,142.6L889.9,141.8L889.8,139.8L889.5,139.7L889.4,137.9L889.0,137.6L887.1,131.8L886.7,130.2L881.8,114.3L877.2,100.5L878.2,99.9L878.1,99.3L879.6,99.7L879.8,100.4L880.4,101.1L881.0,101.2L881.3,99.5L881.0,97.8L880.5,97.4L881.0,96.6L881.5,96.5L882.3,97.1L883.5,97L883.4,96.3L881.6,95.1L881.4,94.5L882.1,92.2L882.7,91.5L883.1,90.5L883.5,90.4L884.1,89.5L885.2,88.4L884.4,87.2L885.2,85.7L886.2,84.5L886.2,83.4L885.6,83.0L884.9,83.2L884.6,82.0L884.9,81.1L884.4,81.0L884.9,79.8L885.0,78.9L883.9,78.3L884.2,75.9L884.5,75.5L884.3,74.8L885.0,74.0L885.5,72.7L886.0,72.4L885.3,66.2L892.0,46.6L892.7,46.4L894.3,46.7L894.8,46.5L895.0,47.6L895.8,50.2L896.1,50.4L898.4,51.2L899.5,50.0L900.7,49.1L902.2,48.6L902.5,47.5L904.0,46.8L905.4,46.6L905.0,45.5L905.7,44.8L907.1,44.5L908.5,44.8L908.9,45.4L911.0,46.1L913.6,47.9L913.7,48.2L915.4,48.7L918.5,58.6L922.5,71.3L922.8,72.6L923.5,73.0L922.9,74.0L924.1,75.0L923.4,75.9L924.3,78.4L925.6,78.3L925.6,77.9L926.5,78.8L927.7,79.0L929.4,78.9L930.1,78.3L930.8,79.3L931.2,80.3L930.5,80.4L930.0,81.0L930.8,82.1L932.0,83.0L931.9,84.5L931.6,85.4L933.5,87.2L933.6,87.6L934.8,88.0L935.4,87.3L935.2,86.4L936.3,86.7L937.4,86.4L938.4,87.2L939.0,88.0L938.6,88.4L939.4,88.8L940.6,90.4L941.6,90.9L942.3,93.0L942.0,94.2L941.4,94.3L941.4,94.9L940.3,97.6L939.1,98.4L939.5,98.8L938.7,99.2L938.8,98.3L938.1,96.8L936.8,97.8L937.8,98.7L937.4,99.7L936.7,99.6L936.3,100.9L935.5,100.8L935.0,101.2L935.4,101.8L936.5,102.2L935.6,103.7L934.6,103.0L934.0,102.1L933.3,102.5L933.4,103.2L932.9,103.3L932.2,102.3L932.2,103.6L931.7,104.0L931.7,105.5L931.2,105.3L931.2,106.3L930.7,105.6L929.9,106.8L929.5,106.4L929.3,108.3L928.3,107.8L928.1,107.2L927.6,107.7L927.0,107.8L927.4,108.9L927.0,110.5L927.8,110.9L925.9,111.8L924.5,111.6L923.0,109.9L923.2,109.2L924.2,108.4L923.5,107.7L923.0,108.6L922.8,107.7L922.3,107.9L922.7,109.2L922.5,109.3L922.1,108.1L921.1,109.5L921.6,110.1L921.5,111.0L922.6,112.0L922.7,112.8L921.9,114.6L922.4,114.7L921.9,115.5L922.8,116.3L922.9,117.7L922.1,118.1L921.5,116.6L921.8,116.4L921.3,115.5L920.1,114.9L919.6,113.8L920.1,112.6L918.9,112.2L919.1,111.6L918.4,111.6L917.6,112.3L917.0,110.2L917.4,109.2L917.2,108.2L916.7,108.1L916.6,109.0L916.0,110.0L915.2,109.6L915.0,110.3L914.2,110.6L915.4,111.9L915.5,112.8L915.0,113.4L914.8,114.9L915.0,116.3L914.7,117.9L915.9,118.2L915.3,118.9L916.2,119.8L915.9,120.7L914.3,121.0L914.0,122.6L913.2,122.8L913.4,123.9L912.8,124.3L912.5,123.3L912.7,122.5L912.2,122.4L912.2,123.0L911.6,123.4L911.5,122.1L910.5,122.6L910.9,123.5L910.2,124.5L910.2,125.5L909.2,124.7L909.4,125.6L908.7,126.5L907.9,126.2L908.1,127.4L907.1,126.7L906.9,128.6L905.7,129.5L905.6,129.9L904.8,128.4L903.9,128.6L903.3,129.6L903.2,130.4L902.1,130.6L902.0,131.7L900.8,131.9L900.5,133.0L900.6,133.9L901.1,134.4L900.8,135.1L899.9,134.8L898.8,135.7L898.6,136.7L899.2,137.8L899.0,138.8L898.5,139.2L898.9,139.8L898.2,140.4L897.4,140.6L897.0,141.2L896.9,143.2L897.2,143.5L896.9,145.2L897.0,145.5L896.6,147.1Z" }, + MI: { name: "Michigan", d: "M666.7,128.5L667.1,128.2L667.7,129.2L671.5,130.0L670.7,131.2L669.3,131.0L668.4,130.0ZM655.4,131.7L655.6,130.9L656.0,131.3ZM653.3,130.8L654.5,131.4L654.4,132.1L653.2,131.5ZM652.2,136.1L652.5,135.2L652.5,133.8L652.8,133.5L652.8,132.4L653.8,132.5L653.9,134.1L654.3,135.6L653.3,136.6ZM650.8,133.2L651.5,133.0L651.3,134.0L650.9,134.0ZM648.6,140L649.4,140.2L649.5,141.4ZM646.5,147.0L646.8,146.6L647.9,146.9L647.7,148.8L646.7,147.9ZM645.4,150.1L645.9,149.2L646.3,150.0ZM635.6,137.4L636.9,138.5L636.5,139.0L636.2,138.3L635.3,137.6ZM641.9,223.7L643.6,222.3L645.0,220.4L646.7,215.2L648.4,212.2L649.2,209.5L649.6,207.5L649.9,204.1L649.7,203.0L649.9,201.3L649.5,198.1L648.8,194.7L647.9,192.4L645.4,188.2L644.6,186.5L643.6,183.9L642.4,181.7L642.3,180.8L643.4,178.7L643.7,177.7L643.6,176.3L642.8,173.7L641.9,172.1L642.0,171.5L643.1,170.4L644.2,167.3L645.1,165.1L645.1,162.7L645.4,160.1L644.5,158.0L644.5,157.3L646.0,156.4L647.1,155.9L647.2,154.1L646.9,152.7L647.4,152.0L648.2,152.3L648.9,150.6L650.0,151.2L651.0,150.8L651.4,150.2L651.7,148.5L652.2,148.1L652.9,146.2L653.4,145.3L653.9,145.3L654.5,144.6L654.7,145.3L653.7,146.0L653.7,146.9L654.5,148.3L653.4,150.0L654.1,149.6L654.2,151.0L653.9,151.2L653.6,152.8L654.2,154.6L654.7,154.6L655.5,151.7L655.4,149.8L656.1,149.3L656.0,152.4L655.2,153.3L655.0,154.7L655.9,154.8L656.2,153.6L656.5,153.3L657.5,150.5L657.6,149.0L657.4,148.0L657.5,146.4L657.0,144.8L657.0,143.0L657.9,141.9L658.4,141.8L659.3,140.8L660.3,140.3L661.7,140.3L663.2,139.9L663.8,139.4L663.6,138.8L661.8,138.7L660.9,137.9L660.2,135.8L660.9,134.2L661.6,133.9L662.6,132.4L662.4,131.9L661.3,131.5L664.7,131.4L665.0,130.4L668.6,131.9L670.2,132.8L670.9,132.4L671.5,132.6L672.2,132.3L674.1,132.7L675.6,134.2L675.9,135.3L676.9,135.7L678.7,135.3L679.2,135.5L681.0,136.7L682.3,136.7L684.4,137.8L686.0,137.5L687.4,138.8L688.1,139.2L687.6,139.8L688.7,141.5L689.4,142.0L690.5,144.4L689.3,144.1L688.4,143.6L687.6,144.5L688.1,146.6L688.9,147.3L690.2,147.7L690.6,148.8L690.9,150.6L691.4,151.3L691.3,152.6L691.1,154.0L691.3,155.2L691.3,157.4L691.6,159.7L691.0,160.1L690.3,161.4L689.0,161.5L688.6,162.2L688.4,164.3L688.5,166.5L687.4,166.7L687.0,167.2L687.1,168.1L684.7,168.5L684.1,169.3L683.7,170.8L683.8,173.2L683.4,174.1L684.4,175.7L685.4,176.2L685.8,175.5L686.2,176.2L687.4,176.5L688.2,177.1L688.7,176.7L690.0,174.2L690.9,174.1L691.2,173.6L690.7,172.6L691.1,171.7L691.4,170.0L691.7,170.9L692.7,170.2L692.9,169.6L691.6,169.2L693.0,169.0L693.6,168.5L693.8,167.7L695.1,167.3L696.9,166.5L697.3,165.6L699.0,164.8L699.7,165.3L701.1,165.6L702.0,166.2L703.3,168.4L704.0,169.0L704.7,170.8L705.5,174.7L707.0,178.0L707.9,182.7L708.8,185.3L710.2,187.3L710.4,188.2L709.9,189.1L709.9,192.0L710.3,192.8L709.9,195.1L709.8,196.4L709.0,197.8L708.1,197.9L707.5,198.8L707.4,197.5L706.8,197.1L707.3,196.7L708.0,195.4L707.1,195.0L706.3,195.2L705.3,196.0L705.0,196.7L705.6,197.1L705.8,198.0L704.9,198.0L704.4,199.1L704.7,200.7L704.5,202.2L703.6,203.4L701.9,204.1L701.2,206.1L701.6,208.5L701.5,209.4L700.7,210.0L700.8,211.3L700.0,212.2L699.8,213.0L699.0,213.2L698.8,214.5L698.1,214.8L697.3,216.3L697.8,217.8L697.4,218.0L692.3,218.9L682.5,220.5L675.3,221.6L675.1,220.2L670.0,220.8L658.9,222.0L647.2,223.2ZM592.2,90.7L593.2,89.3L598.1,86.2L598.5,86.2L600.7,84.2L602.3,83.3L602.6,83.4L604.1,82.8L604.1,83.3L603.5,83.7L602.0,85.3L602.0,85.9L600.7,87.0L598.1,88.2L595.9,89.7L596.0,90.0L597.3,89.9L594.2,91.6L593.2,91.6ZM576.3,120.9L577.3,120.0L578.0,119.9L580.1,118.9L582.2,118.1L583.8,116.5L584.7,115.2L585.6,114.7L587.4,114.2L588.2,114.5L589.8,113.9L591.0,113.8L593.7,112.2L595.3,110.3L596.5,110.1L598.0,109.5L598.5,108.8L598.7,107.8L600.0,106.4L600.7,106.1L602.2,104.4L603.5,103.8L604.5,102.7L605.0,101.6L606.1,100.5L609.1,98.7L612.1,97.9L614.8,97.8L616.1,98.5L616.3,99.3L615.7,99.3L614.8,99.8L613.7,99.7L612.6,99.9L612.9,100.8L611.3,102.0L609.8,104.0L608.8,104.5L608.6,105.9L608.2,105.7L607.9,106.8L607.2,107.3L607.0,108.6L606.5,109.6L606.0,109.7L605.6,112.9L606.0,113.9L605.5,114.6L606.1,114.5L607.1,112.7L607.2,111.9L607.6,112.1L609.1,110.5L610.5,109.5L610.0,110.6L609.3,111.1L608.6,112.7L610.1,110.9L611.5,110.5L612.3,110.6L614.4,110.4L615.2,111.0L615.7,110.8L616.6,111.3L617.2,112.0L618.0,111.8L619.3,112.9L619.5,114.0L620.6,114.9L621.0,115.7L621.8,116.6L622.9,116.8L622.9,118.3L623.6,118.8L625.0,118.9L627.3,118.5L628.6,117.6L629.3,117.7L630.2,119.0L630.9,119.4L631.9,119.4L632.3,118.5L633.2,118.5L633.7,119.2L633.8,117.9L633.3,116.9L634.2,116.4L634.6,117.0L634.4,118.1L635.4,118.5L636.7,117.0L638.8,115.6L641.8,113.1L642.4,113.5L645.7,112.3L648.3,112.4L650.2,112.2L651.8,111.9L655.0,109.9L656.3,109.5L658.0,109.5L659.7,109.0L658.7,110.7L658.9,113.3L659.1,114.2L658.7,114.6L659.3,115.5L660.2,115.5L660.7,115.2L661.0,115.6L661.9,115.5L662.9,115.9L664.6,114.7L665.3,114.7L666.1,115.5L666.1,116.2L667.4,115.5L667.8,115.6L668.2,114.3L669.2,113.7L670.5,113.9L671.1,113.7L671.4,112.9L672.9,112.8L673.3,113.3L672.9,115.3L673.6,117.5L673.9,119.3L672.3,119.5L672.0,120.8L672.9,121.0L673.1,120.5L673.9,120.5L674.5,121.2L675.6,121.4L674.9,122.2L676.5,123.5L677.1,123.4L678.3,124.1L678.7,123.4L679.5,123.9L679.9,123.4L678.8,121.6L679.6,121.8L681.8,121.2L682.5,121.4L683.5,123.1L684.5,123.5L684.1,124.8L683.4,125.3L681.8,124.8L680.1,125.3L678.3,124.7L677.7,125.0L676.2,125.2L674.7,124.9L671.4,125.8L670.7,126.5L668.5,125.4L667.6,124.6L666.9,124.8L666.1,124.3L665.6,125.2L665.9,126.1L665.1,126.8L665.3,127.7L665.9,128.8L665.3,129.3L663.9,128.7L663.6,128.1L662.4,127.5L662.0,127.0L660.7,125.9L658.5,125.3L657.8,125.5L655.8,124.8L654.8,125.0L654.1,124.6L653.8,125.0L652.8,124.9L651.5,126.5L650.8,128.0L650.3,128.2L648.4,128.0L647.2,128.4L646.8,128.9L647.0,129.5L645.6,128.9L644.4,128.7L643.1,129.1L642.5,129.0L641.3,129.6L640.7,130.4L640.7,131.6L640.3,133.1L639.5,133.1L639.2,133.9L638.0,134.3L637.8,135.2L637.1,135.3L637.1,136.2L636.5,136.4L636.8,137.5L635.7,137.0L635.1,136.3L635.7,135.8L635.7,135.1L636.2,134.4L636.2,133.7L637.0,133.7L637.6,131.9L637.4,131.1L636.7,131.0L635.8,132.5L633.7,132.3L633.9,133.2L633.3,134.2L633.1,135.3L631.5,136.1L631.3,136.6L630.9,135.9L630.9,134.8L630.6,133.6L630.1,133.0L629.6,133.4L629.5,135.7L629.7,135.9L628.1,137.2L626.8,139.8L626.1,142.6L625.2,144.0L624.3,146.2L622.3,149.8L622.6,150.4L621.6,150.2L621.0,149.3L620.2,148.8L620.1,148.3L620.7,146.0L621.3,145.0L621.1,144.4L620.4,143.9L619.6,144.9L618.1,145.2L618.1,145.2L617.7,144.4L618.0,143.9L617.8,143.2L618.4,142.4L618.7,141.7L618.5,140.8L618.8,139.4L617.9,138.0L618.5,137.7L618.0,136.9L617.3,136.7L616.9,136.1L615.5,136.1L615.0,135.3L613.8,135.8L612.8,135.0L613.6,133.9L613.2,133.5L613.1,132.6L610.8,131.9L610.1,132.2L608.7,131.4L608.0,131.8L606.8,131.5L606.7,131.0L605.2,131.2L605.0,131.8L604.3,131.9L604.0,131.3L603.0,131.1L602.4,131.4L597.4,129.0L581.2,125.7L581.2,125.2L579.5,122.1L578.0,121.9L577.4,121.4L577.4,121.4L576.7,121.6Z" }, + MN: { name: "Minnesota", d: "M472.1,69.3L476.5,69.4L490.7,69.4L502.9,69.4L502.8,60.9L504.3,61.6L505.8,61.2L507.3,62.2L507.7,62.8L508.5,66.6L508.9,67.1L509.9,71.8L509.6,73.2L509.8,74.2L510.6,75.0L512.2,75.8L513.5,76.0L513.9,75.7L516.2,75.8L516.9,76.9L520.1,77.0L522.7,77.3L523.2,78.6L523.0,79.5L523.3,79.7L525.6,79.6L525.9,79.3L527.0,79.3L528.3,78.9L528.2,78.0L529.9,77.1L532.0,76.7L532.5,77.1L535.3,77.0L539.3,78.8L540.7,78.6L540.7,79.6L539.7,79.7L539.5,80.4L540.4,81.0L542.6,80.7L543.4,81.7L543.2,82.3L543.5,83.2L544.9,85.6L546.2,85.0L545.7,83.5L546.4,82.6L547.2,82.8L549.5,82.4L550.3,83.2L550.3,84.4L551.2,85.1L552.0,84.9L552.5,85.6L554.7,85.7L555.0,86.9L554.9,87.5L556.0,87.9L557.2,87.6L557.1,89.0L558.2,88.4L559.0,88.8L560.0,88.3L561.8,87.9L564.2,85.6L565.1,85.3L565.8,84.7L567.1,84.0L567.9,84.2L567.9,85.5L568.9,85.8L568.6,86.3L569.2,87.2L570.0,87.2L571.9,86.5L572.2,87.1L573.6,86.7L575.0,87.0L576.0,86.6L578.6,86.3L580.2,86.8L580.7,88.0L582.6,88.9L583.4,88.2L584.5,87.9L585.2,88.3L586.4,88.1L587.1,88.4L588.4,87.9L587.0,89.0L586.4,88.7L586.3,89.3L585.4,89.7L584.0,90.9L582.1,91.6L581.4,92.4L578.6,93.4L576.1,94.6L575.2,94.8L573.0,95.7L572.8,96.0L570.1,97.6L568.2,99.3L564.5,103.0L563.6,104.3L560.8,107.9L559.4,109.3L558.0,110.1L556.7,111.9L556.1,112.1L554.6,113.8L554.1,114.0L550.8,116.7L550.3,117.2L550.8,118.1L551.6,119.0L550.4,118.1L549.7,118.3L549.5,118.9L548.7,119.2L549.2,119.5L548.6,120.4L547.4,120.1L547.9,133.2L547.3,133.4L547.0,134.6L545.7,134.5L545.2,135.6L544.4,135.4L544.0,136.1L542.6,136.6L541.5,137.5L540.5,140.4L539.3,141.4L539.0,143.6L539.1,144.6L540.2,145.0L540.8,144.8L541.6,145.4L541.6,146.0L542.9,147.5L542.9,148.5L542.1,149.4L542.2,150.0L541.2,151.0L541.4,152.7L541.2,153.3L541.6,155.1L540.7,156.2L541.4,156.8L541.3,158.1L541.7,158.9L541.3,159.7L541.5,161.1L540.9,162.7L541.2,163.4L542.1,163.9L544.0,165.5L543.9,165.9L544.7,166.2L545.3,167.0L548.1,167.1L548.8,167.4L549.4,168.9L550.3,169.6L553.2,170.4L554.5,171.1L555.3,171.9L555.3,172.9L555.8,173.2L556.2,174.8L557.2,175.6L558.7,176.3L558.9,176.9L561.1,178.5L563.4,178.9L564.3,180.0L566.1,182.5L566.7,183.9L566.4,186.1L566.5,187.5L567.2,188.2L567.0,189.0L567.5,190.0L555.7,190.6L542.7,191.1L536.0,191.3L523.1,191.6L512.7,191.8L494.6,191.9L483.0,191.9L483.2,168.5L483.2,166.6L483.2,160.8L483.2,151.6L482.7,150.3L480.7,149.2L479.6,149.1L478.9,148.0L478.4,146.6L476.9,144.7L477.2,143.9L478.6,142.7L479.9,141.9L480.5,140.7L481.3,139.9L481.6,137.4L481.4,135.4L481.7,134.7L481.1,131.1L481.1,128.6L480.4,128.1L479.3,126.2L479.0,125.3L478.8,123.0L478.2,121.9L478.1,121.1L478.4,119.8L478.1,117.7L478.3,117.4L478.7,115.1L478.3,115.3L477.8,114.4L477.8,111.1L477.6,109.3L477.5,107.2L477.7,106.2L477.3,104.2L477.4,100.1L477.1,100.0L476.7,98.3L476.2,96.6L475.7,96.3L475.2,94.3L475.0,93.2L474.4,92.6L474.2,90.3L473.3,88.3L473.2,86.2L473.6,85.2L473.2,83.5L473.4,82.5L473.3,80.4L473.0,79.3L473.4,77.9L473.8,77.4L474.0,76.3L473.2,74.7L472.8,72.4L472.5,71.9L472.0,70.0Z" }, + MO: { name: "Missouri", d: "M494.3,257.5L504.4,257.6L514.0,257.7L523.4,257.4L531.3,257.1L535.0,257.0L546.9,256.4L556.0,255.8L562.1,255.3L562.9,256.0L563.0,256.6L564.1,256.8L564.0,257.5L565.1,258.6L565.7,258.6L565.8,259.7L566.5,260.2L567.6,260.3L567.2,260.7L566.3,263.5L566.2,264.9L566.7,268.1L567.7,270.0L568.1,270.5L567.7,271.8L568.0,272.5L569.0,273.1L569.2,273.6L569.1,274.8L570.8,276.2L571.8,277.3L572.4,277.5L573.1,278.8L573.9,279.0L574.7,280.4L575.7,281.4L579.5,283.8L580.8,285.5L581.1,287.2L581.6,288.7L581.1,289.5L581.9,291.1L582.2,292.3L583.6,293.6L584.3,293.4L584.9,292.7L585.4,291.4L586.6,291.3L588.3,292.0L589.3,292.1L591.7,293.5L591.7,294.7L590.9,295.3L590.2,296.5L590.9,298.2L590.9,299.0L589.6,300.9L589.4,302.8L588.4,304.2L588,305.2L588.0,306.8L588.4,308.1L589.6,309.0L590.9,310.6L592.6,311.3L593.3,312.3L593.8,312.2L594.9,313.3L595.9,313.1L596.1,313.6L595.4,314.1L595.9,315.1L597.1,315.1L597.7,314.5L598.6,315.0L598.7,315.5L599.6,315.7L601.1,316.9L601.1,317.7L601.9,317.7L602.6,318.5L603.8,318.9L603.9,320.0L604.6,321.3L603.8,321.5L604.0,322.4L605.9,325.4L605.7,326.6L604.8,326.9L604.4,328.1L605.5,329.0L605.5,329.9L606.4,331.5L607.2,332.4L607.2,333.4L608.8,334.4L609.4,333.8L608.4,333.0L609.2,332.7L610.4,333.7L611.0,334.7L611.7,334.4L612.3,334.8L612.1,336.5L611.7,337.4L611.1,337.7L611.1,338.4L612.2,339.0L612.1,339.6L611.1,339.6L610.9,340.5L611.7,341.5L611.2,342.1L610.8,343.5L610.0,344.0L608.8,342.5L608.0,342.8L607.3,345.6L606.9,346.4L606.1,346.4L606.1,345.8L606.5,345.0L606.1,344.1L604.7,344.1L604.5,344.7L605.2,345.8L605.6,346.2L605.2,347.5L605.9,348.6L605.7,349.3L604.1,349.4L604.2,350.1L605.6,350.8L605.7,351.3L604.7,351.7L602.8,351.5L602.6,351.9L604.5,353.2L604.7,354.4L603.3,355.3L603.2,356.7L602.5,357.2L591.0,358.1L591.9,355.9L593.3,354.7L593.3,354.2L594.2,353.1L595.2,352.5L595.3,351.7L595.9,351.5L596.0,348.9L594.6,348.2L594.8,347.9L594.3,346.5L572.1,347.7L551.5,348.6L542.5,348.9L528.3,349.3L514.9,349.5L514.8,338.2L514.7,332.8L514.7,330.9L514.5,315.8L514.5,314.8L514.3,301.3L514.4,299.0L514.2,290.4L514.5,289.6L513.3,289.6L513.0,289.0L512.4,289.3L511.6,289.1L511.3,288.5L510.3,288.2L510.5,287.7L509.4,286.7L509.0,285.2L509.6,284.7L509.2,284.3L508.4,284.3L507.6,283.1L506.6,282.5L506.6,282.0L505.7,281.2L505.6,280.2L506.6,279.8L506.5,279.0L506.9,278.2L507.8,277.8L508.1,276.3L508.9,276.8L509.5,276.7L509.6,275.7L508.8,276.0L508.7,275.3L509.2,275.3L509.4,274.5L508.8,274.3L508.3,273.7L508.6,273.1L507.1,272.9L506.6,273.7L505.0,273.4L504.7,272.7L503.9,272.9L503.9,272.0L503.1,271.8L502.1,270.7L500.2,269.6L500.7,268.1L499.2,266.6L499.1,265.1L497.9,264.7L497.9,264.1L496.8,263.6L496.1,261.5L496.1,260.7L495.5,260.1L495.4,259.3L496.2,258.5L495.5,258.2L495.5,258.8L494.3,258.7Z" }, + MS: { name: "Mississippi", d: "M634.6,485.2L636.7,485.3L635.7,485.8L634.9,485.7ZM629.5,485.0L630.6,484.6L632.7,485.0L633.1,485.3L631.5,485.3ZM625.4,485.9L626.4,485.7L627.4,485.1L627.2,485.6L625.8,486.3ZM622.1,485.7L623.5,485.6L624.0,485.3L623.8,486.2L623.1,486.3L621.9,485.9ZM580.3,426.1L581.1,424.9L579.5,423.8L579.8,423.0L580.6,423.3L581.5,423.1L581.7,422.6L581.5,421.2L582.3,420.1L582.1,419.7L581.5,420.0L581.3,420.8L580.4,419.5L580.4,418.3L581.8,416.5L581.5,415.9L580.9,417.3L579.7,417.6L579.1,417.2L579.2,416.8L580.4,416.6L580.6,415.5L579.6,415.1L579.7,416.0L578.5,416.4L579.4,414.8L578.5,413.6L580.3,412.8L580.1,412.1L578.4,411.2L578.5,410.7L579.6,410.3L580.1,411.0L581.2,411.3L582.0,411.0L581.4,410.0L580.6,410.3L579.9,409.9L579.9,408.7L581.5,408.6L582.0,408.9L582.6,408.2L581.6,407.8L581.0,406.7L582.2,405.2L580.7,404.6L580.8,404.0L581.9,403.5L582.2,404.3L582.9,404.0L582.4,403.1L584.0,402.9L584.5,401.7L584.3,401.3L583.5,401.4L582.9,400.4L583.6,399.8L584.7,400.4L585.6,399.8L585.4,399.3L584.1,399.4L583.1,398.6L583.7,398.0L584.8,398.8L585.0,397.4L586.2,397.0L586.6,396.4L586.1,395.6L586.4,395.1L587.6,395.0L587.5,396.0L588.1,396L588.0,394.8L589.6,393.6L589.1,392.0L589.9,391.0L589.8,390.5L589.0,389.3L588.9,388.1L589.5,387.6L589.5,388.6L590.3,388.9L591.1,387.9L591.0,387.3L589.7,387.3L589.2,386.6L589.7,386.3L589.5,385.6L590.1,385.1L590.0,386.2L590.4,386.8L591.3,386.4L590.8,385.0L591.1,384.5L590.6,383.7L590.7,383.1L591.4,383.1L591.7,384.2L593.7,383.3L594.8,382.4L594.7,381.5L593.6,380.5L608.5,379.6L618.6,378.8L631.7,377.8L632.7,379.3L633.8,379.9L633.6,387.0L633.4,399.5L633.2,402.6L632.8,424.3L632.8,428.4L632.5,442.2L632.3,447.7L634.1,462.5L635.2,470.6L636.0,477.4L636.5,481.7L636.3,482.3L635.8,482.0L635.1,482.9L633.9,482.4L633.0,482.8L632.6,482.3L631.4,482.2L630.1,482.8L628.5,481.9L628.4,482.5L626.9,481.9L625.4,482.0L623.3,482.7L621.4,483.7L619.4,484.4L619.6,483.4L618.9,482.9L617.9,483.4L618.6,483.7L618.7,484.5L617.1,485.7L616.6,487.3L616.0,487.1L615.1,487.5L614.3,487.5L613.3,486.6L613.0,485.4L612.9,484.1L611.7,482.7L611.7,481.6L610.9,480.9L610.1,480.5L609.8,479.8L609.1,479.2L608.7,477.4L608.1,477.2L608.7,475.4L608.4,474.8L608.8,474.2L609.3,471.8L609.7,471.4L609.6,470.5L610.1,470.1L609.5,469.4L598.3,470.2L589.1,470.7L573.6,471.5L574.5,471.0L574.9,469.9L573.8,469.0L573.7,468.5L574.3,467.5L574.1,466.8L573.3,466.2L573.3,465.5L574.5,465.6L575.7,465.1L575.8,464.3L574.9,463.6L574.8,462.8L574.3,462.5L574.9,461.7L575.2,462.6L575.8,463.2L576.4,463.0L576.4,462.5L575.4,461.1L575.3,459.6L576.6,459.2L577.4,458.5L577.1,457.9L575.9,458.2L575.2,457.7L575.5,456.9L576.3,457.4L577.5,457.4L577.4,455.3L578.2,454.6L579.7,454.4L580.0,454.1L578.0,454.0L578.4,452.1L579.2,451.9L579.4,452.7L579.8,453.0L580.2,452.5L579.7,452.1L581.3,450.5L581.1,449.5L581.5,449.0L582.8,448.7L582.8,447.7L581.5,447.3L581.8,446.8L582.7,447.5L583.0,446.8L583.8,446.3L584.3,445.0L583.3,444.6L583.5,445.7L581.3,445.6L581.4,444.1L583.2,443.6L583.6,443.1L584.6,443.6L584.9,442.8L584.7,441.8L585.5,441.9L586.5,440.3L586.2,440.0L585.8,440.8L584.3,440.5L584.2,439.4L584.7,439.0L584.2,438.4L583.5,438.8L581.9,437.9L582.1,436.8L582.4,436.8L583.6,437.6L584.3,437.4L583.9,437.0L582.4,436.1L583.3,435.4L583.8,434.7L583.3,434.0L583.0,434.9L581.7,435.5L581.2,435.2L581.0,434.2L581.6,433.5L582.6,432.8L582.7,432.3L580.6,431.8L580.6,430.4L580.9,429.7L582.2,428.6L582.3,427.8L581.7,426.5L580.9,426.6L581.1,427.9L580.2,428.4L579.5,428.0L579.7,427.1Z" }, + MT: { name: "Montana", d: "M195.0,38.1L207.2,40.7L219.4,43.1L229.3,45.1L239.3,46.9L257.5,50.1L268.6,51.9L280.8,53.8L298.1,56.3L305.6,57.3L321.0,59.2L333.0,60.6L340.6,61.5L356.1,63.0L362.2,63.6L371.1,64.4L369.9,77.8L369.9,78.1L365.4,131.9L365.1,136.3L363.7,153.0L363.4,153.0L356.9,152.4L342.7,151.1L335.3,150.3L334.0,150.3L324.0,149.2L315.9,148.2L315.1,148.1L297.3,145.9L284.9,144.2L284.3,144.0L273.4,142.5L268.6,141.8L267.2,141.7L264.6,141.2L264.0,141.3L259.2,140.6L258.0,140.2L253.8,139.6L253.3,142.5L252.5,147.9L252.1,151.2L251.0,150.6L250.8,149.6L249.6,148.3L249.9,147.5L248.7,145.0L247.8,144.1L247.2,145.1L246.1,144.9L246.3,145.6L245.1,147.3L245.7,148.7L244.0,147.9L243.4,148.1L242.1,147.6L241.9,148.0L240.1,148.4L239.5,147.1L238.3,147.1L237.5,147.4L236.9,147.1L235.7,147.4L235.3,146.9L234.5,147.0L233.9,146.2L233.0,145.9L232.4,146.5L231.9,146.4L231.6,147.5L231.0,148.3L229.8,147.3L229.3,147.6L228.7,147.1L226.9,146.7L226.0,146.1L225.0,146.4L223.9,147.6L224.0,148.7L223.5,149.0L223.0,148.0L222.1,147.4L221.3,146.5L221.2,145.4L221.6,144.8L220.7,143.1L221.4,142.3L221.3,141.3L220.6,139.0L219.0,137.6L217.4,138.2L217.3,137.4L216.0,136.1L215.7,134.1L216.5,134.0L216.8,133.0L216.8,131.8L215.9,130.9L216.1,130.4L215.2,130.0L215.1,128.5L214.0,126.9L214.1,126.2L213.5,125.1L213.8,123.8L213.5,123.3L213.3,122.2L213.8,121.7L213.9,120.8L212.8,120.6L213.6,118.9L212.8,118.2L212.2,118.2L212.4,117.7L212.0,116.8L211.2,116.1L210.7,116.3L210.7,117.0L209.7,117.6L208.4,118.9L207.2,119.2L206.6,118.8L206.2,119.9L204.7,120.4L204.6,119.7L203.9,119.1L203.4,117.8L202.0,117.6L202.4,116.6L202.1,115.8L203.2,115.3L203.5,114.5L202.7,112.9L204.0,111.4L205.4,111.6L205.9,110.9L205.4,109.7L205.9,108.9L205.0,108.2L205.0,107.1L205.7,106.1L204.9,105.3L205.2,104.4L206.2,104.5L206.5,103.0L206.2,102.3L207.0,102.0L207.5,99.9L208.5,98.8L208.3,97.4L209.0,97.5L210.0,95.3L210.0,94.2L209.7,93.9L208.2,94.0L207.9,94.4L206.7,93.9L205.7,93.8L205.4,93.0L205.9,92.3L205.6,91.6L204.9,91.3L204.5,91.8L203.7,92.1L203.4,91.7L203.9,90.7L202.3,89.3L201.7,88.0L202.1,86.7L201.3,85.4L200.6,85.2L200.5,84.1L199.8,82.3L199.1,81.1L198.5,80.7L198.4,80.0L197.8,79.7L198.1,79.0L197.7,78.2L196.5,77.7L194.9,76.5L194.8,75.4L192.6,73.3L192.0,73.2L192.8,72.7L194.0,72.8L194.2,72.4L193.4,72.1L193.4,71.0L192.8,70.7L193.0,70.1L193.9,69.7L193.4,68.5L193.8,67.4L193.2,66.8L193.0,65.8L192.6,65.8L192.5,64.1L191.8,63.6L190.3,60.3L191.4,55.1L191.9,53.1Z" }, + NC: { name: "North Carolina", d: "M851.0,323.8L852.2,323.9L853.3,325.1L853.5,326.0L852.5,326.0L852.5,325.1ZM850.0,344.0L850.3,342.7L850.8,342.6L853.5,340.4L854.4,339.9L855.1,339.1L855.9,338.9L856.7,338.0L857.5,337.6L857.5,336.2L857.2,331.3L857.0,330.2L856.1,328.5L855.2,326.6L855.4,326.6L856.6,328.5L857.3,330.2L857.7,332.8L857.9,338.5L856.4,338.9L853.5,340.8L851.1,342.9ZM743.9,328.5L749.2,328.0L752.7,327.5L758.7,326.9L761.1,326.4L768.3,325.6L771.3,325.2L782.0,323.4L799.6,320.2L804.2,319.3L820.7,316.1L827.4,314.7L827.3,314.5L829.3,314.2L836.8,312.6L845.6,310.8L846.0,311.8L848.0,316.2L849.7,319.0L851.8,321.7L855.1,326.3L854.5,326.2L852.7,323.6L851.5,322.3L850.7,322.3L849.4,319.1L847.8,316.4L847.2,316.1L847.2,315.3L846.5,313.7L845.8,313.2L845.3,312.4L843.7,312.5L843.5,311.7L842.8,312.3L843.4,313.4L844.6,314.1L845.2,313.7L845.5,315.0L847.0,317.3L847.8,318.4L847.8,318.9L848.8,320.1L849.0,321.0L847.6,320.1L847.5,319.4L846.4,318.4L846.1,317.7L845.3,317.6L845.8,318.3L845.7,318.9L846.8,319.4L844.7,319.3L842.2,317.5L841.2,317.5L842.8,319.1L843.5,319.3L844.1,320.2L843.6,320.7L842.2,321.3L840.6,320.3L841.3,321.4L842.0,321.7L841.6,322.1L839.5,321.7L838.7,321.7L838.2,321.3L837.0,321.0L838.7,322.1L840.2,322.3L839.8,322.7L838.3,323.2L837.7,324.5L836.8,325.2L835.8,325.4L835.1,324.9L833.8,324.9L832.6,322.8L832.4,321.6L832.8,320.0L832.4,319.8L831.9,321.4L832.0,322.9L832.9,324.6L833.9,325.9L833.7,326.8L834.4,327.3L836.9,326.6L839,325.2L839.8,326.0L840.6,325.7L841.3,325.0L842.8,324.2L844.8,323.8L845.9,324.4L846.0,325.2L845.5,326.9L845.9,327.9L846.7,330.9L847.2,330.7L847.2,328.4L846.8,325.6L847.5,324.6L847.0,324.1L847.8,323.5L849.4,323.6L850.8,325.1L851.5,326.3L851.5,327.3L852.3,329.1L851.9,329.6L852.4,330.6L851.8,331.8L850.8,332.2L850.3,332.0L849.8,332.4L849.5,333.3L848.9,333.6L848.9,334.4L848.5,334.7L848.4,336.2L847.6,336.6L847.6,337.5L846.6,338.2L846.5,338.7L844.8,338.6L843.0,339.1L841.2,339.1L840.8,338.7L840.2,339.1L839.1,338.4L837.8,336.4L839.8,335.9L839.9,335.0L838.3,335.8L837.4,335.8L837.0,336.5L837.8,337.5L838.5,339.1L838.1,339.1L836.1,338.6L835.2,339.0L833.8,338.6L831.7,338.5L830.1,337.8L830.1,338.4L831.4,339.3L832.8,339.2L837.2,340.3L840.2,340.2L840.8,340.7L841.1,341.4L840.8,342.6L840.2,343.8L840.4,344.3L840.0,345.4L839.2,346.4L836.5,349.2L832.9,347.7L833.2,348.9L834.9,349.7L837.4,350.0L839.4,348.0L840.2,347.8L841.8,346.9L841.8,345.7L842.6,345.8L843.0,347.0L843.7,347.5L844.8,347.3L844.0,346.0L845.3,346.3L845.8,347.9L845.0,349.5L843.9,350.0L844.1,350.7L843.4,351.2L842.9,353.0L842.7,354.4L841.5,354.3L841.3,352.7L840.6,352.5L841.0,354.0L840.0,354.4L842.9,355.0L843.9,352.4L845.5,349.7L846.8,348.0L849.0,344.0L849.6,344.3L848.2,346.2L846.9,348.4L845.8,349.9L844.7,351.6L843.9,353.4L843.0,355.9L842.9,356.5L842.4,355.3L840.0,354.7L837.5,355.2L833.8,356.7L832.0,357.7L830.9,358.6L829.1,360.5L826.9,362.5L825.5,364.0L823.5,366.6L822.8,367.8L821.7,370.6L821.2,372.8L820.9,375.1L820.6,376.5L820.6,377.9L819.7,377.9L819.4,377.3L817.9,377.2L816.4,377.3L814.6,377.7L812.7,378.2L810.6,379.5L810.1,379.9L802.9,374.7L795.0,369.0L792.6,367.2L785.9,362.4L782.0,363.1L777.2,363.8L765.7,365.5L765.5,362.8L762.2,359.5L760.5,361.2L760.1,360.8L760.4,359.8L760.1,358.8L756.6,359.1L749.8,359.9L737.6,361.1L736.2,361.7L735.8,361.0L735.1,362.1L734.7,362.0L733.4,362.7L733.0,362.7L731.3,363.8L729.7,365.3L729.2,364.9L723.6,367.6L714.3,369.0L714.4,369.2L701.8,370.7L701.7,365.4L703.0,364.3L703.2,364.8L705.0,364.4L706.3,363.1L705.8,362.0L706.4,361.5L706.0,360.6L706.9,359.3L707.7,358.9L708.1,357.9L709.1,357.6L710.0,356.7L715.1,355.8L715.7,354.8L717,354.0L717.3,353.5L717.9,353.5L718.8,352.4L719.0,351.7L720.0,351.5L720.4,350.7L721.7,349.9L723.2,350.1L724.6,347.6L724.2,346.5L724.8,345.8L725.8,346.4L726.9,344.3L728.8,342.7L729.5,343.3L729.4,344.7L730.4,345.0L732.0,343.5L732.7,341.6L733.6,340.8L734.6,340.2L735.4,340.2L735.8,339.5L737.1,339.6L737.5,340.5L738.4,340.3L739.2,339.7L740.8,335.5L741.9,334.3L742.6,334.0L743.2,334.3L744.2,334.2L743.4,332.9L743.6,331.5L744.0,331.3L743.5,329.8Z" }, + ND: { name: "North Dakota", d: "M371.1,64.4L381.0,65.2L398.1,66.4L409.4,67.1L414.3,67.4L424.6,67.9L433.1,68.3L440.3,68.6L447.8,68.8L461.4,69.1L472.1,69.3L472.0,70.0L472.5,71.9L472.8,72.4L473.2,74.7L474.0,76.3L473.8,77.4L473.4,77.9L473.0,79.3L473.3,80.4L473.4,82.5L473.2,83.5L473.6,85.2L473.2,86.2L473.3,88.3L474.2,90.3L474.4,92.6L475.0,93.2L475.2,94.3L475.7,96.3L476.2,96.6L476.7,98.3L477.1,100.0L477.4,100.1L477.3,104.2L477.7,106.2L477.5,107.2L477.6,109.3L477.8,111.1L477.8,114.4L478.3,115.3L478.7,115.1L478.3,117.4L478.1,117.7L478.4,119.8L478.1,121.1L478.2,121.9L478.8,123.0L479.0,125.3L479.3,126.2L480.4,128.1L481.1,128.6L481.1,131.1L481.7,134.7L481.4,135.4L481.6,137.4L469.8,137.3L459.5,137.1L452.8,136.9L438.8,136.4L428.1,136.0L418.1,135.5L404.0,134.7L397.1,134.3L380.9,133.2L371.2,132.4L365.4,131.9L369.9,78.1L369.9,77.8Z" }, + NE: { name: "Nebraska", d: "M359.7,197.6L376.7,199.0L385.0,199.6L395.4,200.3L399.0,200.6L411.0,201.2L423.5,201.8L432.4,202.1L443.2,202.5L449.8,202.7L450.2,203.8L453.6,205.6L455.7,206.8L457.5,208.2L458.6,208.0L459.3,207.5L459.8,206.1L460.3,205.9L461.5,206.3L462.9,206.5L464.0,206.2L464.9,206.4L465.9,206.2L466.9,206.5L467.3,206.0L468.2,206.3L469.1,206.0L470.5,206.5L470.6,207.3L471.6,207.7L471.9,208.2L474.4,208.5L474.9,209.4L475.6,209.1L477.2,209.8L477.3,210.6L478.5,210.6L479.1,210.9L478.7,211.9L479.9,213.2L480.4,214.2L481.8,214.2L482.1,214.7L483.1,214.6L483.9,214.8L484.1,215.6L483.6,216.5L483.6,217.9L484.2,218.5L485.0,220.5L484.4,221.0L484.6,221.9L485.9,223.0L485.8,224.6L486.7,225.1L486.4,225.4L487.3,225.6L487.3,226.2L488.2,226.3L488.0,227.6L487.7,227.8L488.5,229.0L488.6,229.7L489.3,230.1L489.1,231.0L488.6,231.4L489.0,232.5L488.3,232.8L488.8,233.6L488.4,234.4L489.0,235.1L488.8,236.2L489.7,236.7L489.9,236.0L490.4,236.0L490.3,237.5L491.5,237.7L491.5,240.0L491.1,240.5L492.3,241.1L491.5,241.8L491.8,243.1L491.6,243.8L493.0,244.2L492.3,244.6L492.6,246.4L492.3,246.9L492.7,247.5L492.7,248.3L493.2,248.7L493.1,250.0L493.5,250.5L492.9,251.5L493.2,253.1L492.4,253.7L492.3,254.5L493.2,255.6L494.0,255.9L494.6,257.0L494.3,257.5L494.3,258.7L495.5,258.8L495.5,258.2L496.2,258.5L495.4,259.3L495.5,260.1L496.1,260.7L496.1,261.5L496.8,263.6L497.9,264.1L497.9,264.7L499.1,265.1L499.2,266.6L500.7,268.1L500.2,269.6L502.1,270.7L494.0,270.7L485.2,270.7L469.2,270.6L452.2,270.2L442.3,270.0L425.7,269.4L409.7,268.6L403.4,268.3L387.8,267.4L389.2,244.9L380.8,244.4L372.8,243.8L355.9,242.5Z" }, + NH: { name: "New Hampshire", d: "M872.5,108.5L872.3,107.2L873.0,105.7L872.8,105.5L873.0,104.0L872.1,103.5L873.1,103.0L873.1,102.5L874.1,101.4L875.3,102.3L876.8,102.0L877.2,100.5L881.8,114.3L886.7,130.2L887.1,131.8L889.0,137.6L889.4,137.9L889.5,139.7L889.8,139.8L889.9,141.8L890.6,142.6L893.6,144.4L893.5,145.3L893.8,146.5L896.2,147.5L895.4,151.2L895.5,152.1L895.1,152.4L894.1,152.1L892.2,153.3L892.0,154.5L890.9,154.5L890.2,155.4L890.6,156.5L889.4,156.9L889.0,157.9L881.9,159.5L870.5,162.0L869.7,161.1L869.4,161.4L868.2,159.7L868.4,158.2L868.2,157.1L868.9,156.7L869.1,155.8L868.5,154.9L868.9,154.1L868.3,153.0L867.9,150.4L868.2,149.0L867.6,148.0L867.5,145.3L867.1,144.7L867.0,143.2L867.7,142.4L867.5,140.3L867.8,139.3L868.7,138.3L868.8,137.4L868.4,136.2L869.2,134.7L868.8,133.1L869.2,132.1L869.6,130.6L869.3,129.7L868.5,128.6L868.5,127.5L868.0,126.9L868.3,125.6L870.1,124.6L870.7,124.7L871.5,124.0L871.5,123.0L872.7,122.4L873.3,121.5L873.5,120.5L874.3,119.9L873.7,118.9L874.2,118.5L874.0,117.1L873.2,116.5L872.1,114.8L872.7,113.6L872.6,112.3L873.2,110.7L872.1,109.2Z" }, + NJ: { name: "New Jersey", d: "M836.1,241.7L836.7,240.3L837.1,239.6L837.1,238.4L837.7,237.4L838.5,236.4L840.6,235.4L841.9,234.2L841.7,232.9L842.5,232.2L842.8,231.5L844.5,229.7L845.5,229.2L846.0,228.0L846.6,228.1L847.4,227.1L846.3,225.9L845.0,225.4L844.3,224.6L842.8,223.8L842.1,222.6L840.6,222.6L840.2,221.8L839.9,220.0L839.1,219.4L838.2,219.7L837.6,219.6L837.1,218.0L837.4,217.4L836.8,217.1L836.9,215.1L837.6,215.0L838.5,212.6L836.6,210.6L837.1,209.5L838.0,208.8L838.7,207.5L838.4,207.1L839.3,206.2L839.7,205.1L840.0,202.6L841.0,201.0L841.8,200.6L847.7,202.7L856.5,205.5L856.8,205.8L856.4,209.6L856.0,211.0L856.1,212.3L855.8,212.8L855.5,213.5L853.5,214.7L853.7,216.3L853.2,216.7L853.2,217.7L853.4,218.5L854.7,218.8L855.5,218.2L857.1,218.7L858.0,218.7L858.1,217.8L858.7,219.5L859.0,221.5L859.0,225.1L859.3,230.0L859.8,233.3L858.4,238.4L858.0,239.5L857.5,239.8L857.8,240.3L857.5,241.5L856.5,243.0L856.6,243.3L855.0,244.8L853.5,247.3L852.7,249.8L852.1,252.9L851.1,254.3L850.0,254.9L849.3,254.7L849.3,253.0L849.8,251.0L849.7,249.6L848.3,249.2L847.2,249.4L846.7,249.0L845.6,249.3L845.4,250.0L844.7,249.7L844.4,248.9L843.2,248.4L842.8,247.9L842.3,248.2L841.1,247.1L840.7,247.4L839.4,246.5L838.6,245.6L837.3,245.4L837.1,242.6L836.3,242.3Z" }, + NM: { name: "New Mexico", d: "M260.6,322.6L274.5,324.5L289.0,326.3L298.6,327.4L298.7,327.6L310.4,328.8L329.4,330.8L331.6,331.0L343.2,332.1L353.9,332.9L366.8,333.8L366.1,342.8L365.9,345.1L365.2,345.0L364.9,349.1L363.8,364.8L363.1,373.1L360.9,402.4L360.5,406.9L359.7,414.9L359.5,417.8L359.0,422.7L357.3,446.0L344.9,445.0L329.7,443.7L312.8,442.1L290.6,439.8L290.3,441.7L289.8,442.0L289.9,442.7L290.5,443.3L290.4,443.7L291.4,444.2L291.7,444.8L277.3,443.1L260.2,441.0L258.9,451.0L243.1,448.9L250.6,394.5L250.9,392.3L251.3,389.6L252.9,377.9L255.4,360.2L255.4,359.6L256.1,355.1Z" }, + NV: { name: "Nevada", d: "M98.9,176.1L98.9,176.1L111.5,179.3L119.7,181.4L121.2,181.7L137.0,185.3L146.6,187.5L157.2,189.9L174.1,193.5L178.7,194.4L182.4,195.1L185.7,195.9L187.8,196.3L194.7,197.7L190.5,219.6L189.5,224.7L187.2,236.6L186.6,239.4L180.5,271.0L179.3,277.1L178.2,282.8L177.5,286.0L176.6,291.2L176.5,291.4L173.3,308.2L171.7,316.5L170.8,321.7L169.9,326.0L169.6,326.3L167.4,329.5L165.8,329.4L164.7,328.1L164.9,327.6L164.0,326.1L163.2,325.9L161.6,325.9L161.6,325.4L160.6,325.2L159.7,325.5L159.4,325.2L158.8,325.6L157.1,325.9L157.2,327.5L156.8,328.3L157.2,330.3L157.7,331.0L157.0,331.3L156.6,332.3L156.7,333.5L156.3,334.4L156.6,335.1L156.3,335.8L156.7,336.7L156.3,338.6L155.8,339.2L155.8,340.4L156.3,341.4L156.5,342.7L156.4,346.2L156.1,347.6L154.6,348.1L155.2,348.7L154.4,350.4L147.0,339.2L143.4,333.8L131.8,316.3L116.5,293.3L110.4,284.1L107.4,279.7L101.5,270.7L96.8,263.6L93.8,259.3L88.5,251.2L83.2,243.3L82.0,241.4L83.2,236.5L83.8,234.2L86.1,225.6L86.2,225.4L88.1,218.1L91.8,203.9L91.9,203.2Z" }, + NY: { name: "New York", d: "M885.4,192.4L885.5,192.0L887.0,191.2L885.9,192.3ZM884.5,196.2L884.7,195.8L885.5,195.9L885.7,196.9L885.2,196.3ZM882.9,194.7L883.8,194.1L883.3,195.1ZM855.5,213.5L856.1,214.7L855.8,215.6L853.9,217.5L853.2,217.7L853.2,216.7L853.7,216.3L853.5,214.7ZM802.9,151.2L803.6,150.0L803.5,150.9ZM801.6,151.1L802.1,150.2L802.7,150.2ZM755.7,196.9L757.4,195.5L760.1,192.9L761.5,190.9L763.1,189.6L764.5,188.9L764.9,187.4L765.5,186.6L765.6,185.6L767.4,184.1L768.3,182.9L767.8,181.4L767.0,180.8L766.9,180.0L766.4,179.3L765.0,178.9L764.7,177.1L763.6,177.0L763.9,175.5L763.1,173.2L762.9,173.0L764.5,172.2L766.5,171.1L769.5,169.6L771.7,168.8L773.6,168.4L775.8,168.1L777.8,167.6L782.9,167.5L784.3,167.6L785.3,168.3L786.8,168.9L787.5,169.0L789.6,167.6L791.6,167.2L794.0,166.4L795.2,166.6L796.6,166.3L797.3,165.7L798.9,165.0L799.8,164.0L800.3,163.9L801.0,162.1L802.5,160.6L803.0,160.3L803.9,159.1L804.7,158.8L805.8,158.8L806.7,158.3L807.0,157.2L806.8,155.5L805.6,152.2L804.3,151.7L804.7,150.6L805.5,150.3L805.7,150.9L806.7,149.8L806.4,149.1L805.1,148.4L803.9,148.9L804.1,148.3L803.1,147.6L802.2,147.7L802.0,146.2L802.4,143.8L803.4,143.5L804.6,142.5L804.4,141.6L805.3,140.9L806.6,139.6L807.1,139.6L807.9,138.8L809.0,137.1L809.0,136.2L809.5,135.1L811.3,132.3L812.6,130.1L815.1,126.7L815.0,126.5L818.3,123.6L819.5,122.1L820.5,121.9L821.5,121.0L823.2,121.2L824.2,120.7L829.2,119.7L832.1,119.1L838.0,117.4L839.3,117.1L844.4,115.7L844.9,117.7L844.7,118.4L844.7,119.6L845.7,120.5L845.4,121.7L845.7,123.4L845.6,124.0L846.2,125.3L847.6,126.7L848.2,127.9L847.9,129.6L848.8,131.6L848.7,132.3L847.9,133.8L848.1,135.5L848.0,137.1L848.6,137.5L849.0,139.4L849.9,140.5L849.9,141.8L850.8,142.7L850.4,144.7L850.5,147.0L851.2,147.3L851.3,146.0L852.3,145.7L852.7,146.7L853.5,147.1L855.0,153.5L856.6,161.5L856.9,162.9L856.9,163.6L857.6,164.8L857.4,172.2L857.2,180.1L857.8,180.8L859.2,188.9L860.2,194.5L860.7,197.6L862.3,199.1L858.9,202.5L860.5,204.2L860.6,204.8L860.4,205.7L859.3,206.8L859.6,208.3L858.8,208.4L859.6,209.4L860.3,207.6L861.0,207.7L861.4,206.7L862.5,205.9L863.5,205.7L863.6,205.0L865.0,205.2L865.0,204.4L865.6,204.8L866.8,204.7L868.0,204.9L869.2,204.0L869.1,203.2L870.1,202.8L870.7,202.9L875.0,201.7L877.2,200.8L878.0,200.2L879.4,198.6L879.7,197.7L880.4,197.3L880.9,196.2L882.0,195.5L882.7,195.3L881.9,196.6L881.4,196.8L882.4,197.2L882.9,197.9L884.0,197.9L884.5,197.3L885.8,198.4L886.6,197.8L887.7,196.6L887.7,196.1L888.6,195.6L889.3,195.6L889.2,196.1L885.7,198.9L881.8,202.3L879.1,204.2L874.9,207.2L872.1,209.4L869.8,210.8L868.3,211.4L867.8,211.2L864.4,213.2L860.7,213.9L858.3,215.6L858.3,214.8L856.9,215.2L857,214.7L856.2,214.1L856.4,213.3L855.8,212.8L856.1,212.3L856.0,211.0L856.4,209.6L856.8,205.8L856.5,205.5L847.7,202.7L841.8,200.6L840.8,199.7L840.8,199.1L839.9,199.5L839.6,199.1L838.2,199.5L838.2,199.1L837.2,198.7L836.6,198.9L836.4,198.3L834.4,196.5L834.9,196.2L834.1,193.2L833.2,193.0L833.5,192.3L832.7,191.5L831.0,191.2L830.2,191.5L829.3,189.7L829,189.8L827.9,188.9L821.8,190.3L812.0,192.3L805.5,193.6L799.5,194.9L785.4,197.7L775.6,199.5L771.2,200.3L756.8,202.9L756.7,202.9Z" }, + OH: { name: "Ohio", d: "M709.6,219.3L710.5,218.8L710.4,219.5ZM707.6,218.5L707.8,216.8L708.5,217.3L708.4,218.0L707.7,219.0ZM675.3,221.6L682.5,220.5L692.3,218.9L697.4,218.0L697.5,218.5L698.8,218.9L699.5,218.4L701.9,219.7L703.5,219.9L704.2,220.2L705.4,221.3L706.6,221.7L707.6,221.1L707.6,220.2L708.0,219.8L708.9,220.8L710.0,220.6L710.1,221.3L712.1,222.9L713.1,223.4L714.4,223.6L716.7,222.2L718.0,221.9L718.9,221.1L721.7,219.5L724.0,219.9L725.1,219.5L726.3,219.4L727.8,218.0L729.3,216.1L729.7,215.9L730.5,214.6L732.8,212.3L733.4,212.1L737.0,209.5L738.7,208.9L740.0,208.0L743.6,206.0L744.5,205.4L749.4,235.2L748.4,235.9L747.5,236.0L747.2,237.0L748.0,237.8L748.8,239.3L748.7,240.7L749.2,242.5L749.1,243.8L748.6,244.3L748.5,245.5L748.0,246.5L748.2,247.6L747.8,248.3L748.1,250.6L747.8,251.1L748.1,252.1L747.3,252.0L747.7,253.1L747.1,253.6L747.3,254.7L746.7,255.7L747.6,256.6L747.0,257.2L747.1,258.8L746.1,259.1L744.6,261.1L743.8,262.4L743.4,263.4L742.8,263.6L742.3,264.8L741.3,265.1L740.1,266.2L739.5,266.3L739.0,265.4L737.9,265.2L736.6,266.9L736.6,268.5L734.7,268.6L734.7,269.7L734.1,270.1L733.8,270.9L734.2,272.7L733.1,273.3L733.4,274.1L734.1,274.5L734.2,276.7L733.6,276.3L733.1,276.8L733.0,277.6L732.6,278.1L731.8,277.8L732.2,277.0L731.2,275.6L730.6,275.6L729.7,275.0L729.4,275.8L728.7,276.4L728.1,278.2L728.3,279.5L727.2,280.7L728.1,282.6L728.6,284.5L728.3,285.1L727.3,285.1L726.6,285.8L726.7,287.7L726.5,288.7L725.1,289.1L723.1,290.2L721.9,289.9L721.7,289.1L720.8,288.6L719.3,287.2L718.0,287.3L717.1,286.7L716.2,284.6L716.3,283.8L715.8,283.2L714.6,284.0L713.7,284.1L713.2,284.9L712.2,285.7L711.7,286.8L709.9,287.1L709.1,287.6L708.7,286.9L708.0,286.5L706.2,286.3L705.2,285.8L703.7,286.5L703.0,287.9L701.2,287.5L700.7,286.6L699.7,286.2L699.5,285.6L697.6,284.9L695.6,285.6L693.0,285.1L692.7,284.6L692.5,283.3L691.3,281.9L690.5,280.3L688.7,279.9L688.3,278.6L687.8,278.5L687.3,279.2L686.5,279.2L685.7,279.9L684.3,279.5L683.3,278.6L682.9,278.6L681.9,279.6L681.3,275.0L680.8,269.7L679.8,261.2L679.0,252.8L675.9,226.2Z" }, + OK: { name: "Oklahoma", d: "M366.8,333.8L370.7,334.1L372.1,334.3L383.7,335.2L393.5,335.7L406.7,336.3L416.2,336.7L425.9,337.2L432.4,337.4L448.8,337.9L462.0,338.2L475.8,338.3L486.5,338.4L499.0,338.4L514.8,338.2L514.9,349.5L515.3,352.0L515.8,356.0L516.3,358.4L517.3,365.3L517.6,366.9L518.6,374.4L518.6,380.5L518.5,385.6L518.5,390.1L518.4,393.4L518.4,401.5L518.3,413.9L517.7,414.4L516.4,413.0L515.4,413.3L515.3,412.8L514.2,412.9L513.0,411.4L512.0,411.7L511.2,411.6L509.8,410.1L509.3,409.0L507.9,409.0L506.3,407.3L504.5,406.8L504.1,408.1L503.4,408.8L502.5,408.9L500.2,408.8L500.2,408.5L498.9,408.7L498.4,407.5L497.7,407.5L496.1,408.5L494.8,408.4L494.9,409.3L494.0,409.1L493.4,409.7L491.5,408.5L491.5,409.1L489.5,409.7L488.5,409.4L488.6,409.8L487.6,409.7L487.1,411.4L486.2,411.7L484.9,411.3L484.4,412.9L483.6,412.9L483.6,412.5L482.5,411.0L481.1,411.1L480.5,410.0L479.8,410.0L478.8,409.4L479.6,408.3L477.9,408.0L477.4,409.7L476.2,409.8L475.9,409.0L475.1,408.7L474.7,409.4L474.1,408.9L473.7,407.0L473.4,406.8L472.4,407.3L472.0,407.0L472.2,408.5L471.2,409.6L470.3,409.2L471.0,410.0L470.2,410.4L470.3,411.6L469.6,412.2L468.9,412.0L468.1,410.1L468.8,409.6L468.7,408.3L468.1,407.7L467.4,408.1L467.3,408.9L466.4,408.5L465.8,408.7L465.1,409.9L463.8,409.8L463.4,409.2L463.5,408.0L462.7,407.6L461.7,408.1L460.9,407.6L461.2,406.8L459.9,406.0L459.3,406.0L458.5,407.1L456.6,408.9L455.8,409.0L454.7,408.3L454.1,408.3L454.4,407.0L454.1,407.0L454.6,405.9L454.1,405.5L453.3,405.7L452.0,405.5L451.4,403.7L451.9,403.1L451.7,402.1L450.5,403.0L449.2,402.5L448.3,402.5L447.0,401.9L446.3,402.7L446.1,403.5L444.7,404.0L443.2,402.1L441.8,401.6L441.0,402.3L439.6,402.2L438.8,401.7L437.9,401.6L436.8,401.1L435.6,400.2L434.5,400.6L434.0,400.3L433.2,400.5L433.0,400.1L431.9,400.1L431.6,397.4L430.5,396.3L430.8,395.9L429.7,395.8L428.6,394.6L428.2,396.4L427.4,396.4L426.0,395.5L424.9,395.4L424.5,396.3L422.5,396.0L421.0,394.4L418.7,391.5L417.4,391.8L419.2,348.2L411.4,347.8L400.0,347.3L390.4,346.7L379.3,346.0L365.9,345.1L366.1,342.8Z" }, + OR: { name: "Oregon", d: "M69.8,68.8L71.0,69.0L71.5,70.0L71.1,71.0L71.8,72.1L73.1,72.5L75.1,72.0L75.8,72.3L78.3,75.4L78.4,76.7L78.9,78.4L78.7,79.5L78.8,80.6L78.2,81.8L78.3,83.5L77.9,84.2L77.8,85.2L79.3,86.7L81.6,88.1L82.1,88.6L83.0,88.6L83.6,89.4L84.5,89.7L86.0,89.4L87.3,89.6L90.6,88.9L91.5,88.2L92.4,88.2L93.4,88.8L95.1,89.0L96.7,88.9L97.6,89.7L98.5,90.2L99.5,90.2L101.1,91.4L101.2,92.9L102.0,93.1L103.3,92.4L105.2,92.8L105.8,93.3L106.5,92.8L109.3,92.6L110.3,92.1L111.4,92.6L112.3,93.9L113.5,94.1L115.5,94.1L116.6,94.3L117.4,93.6L119.1,93.5L120.8,93.1L123.5,93.2L125.5,93.5L126.5,92.7L127.4,92.4L128.6,93.2L132.2,93.3L133.1,93.8L134.1,93.9L135.8,93.5L136.6,93.0L145.4,95.1L159.0,98.4L167.9,100.5L168.3,102.7L168.8,103.3L169.4,104.9L170.4,105.0L170.7,106.0L171.8,106.3L172.4,107.4L172.2,108.4L172.7,109.5L172.9,110.6L171.1,112.3L170.8,113.3L170.2,113.6L168.3,116.1L168.2,116.8L167.5,117.7L166.6,119.8L165.7,120.4L165.2,121.3L164.2,121.9L163.8,122.8L164.0,124.0L163.2,125.2L161.9,126.4L161.8,126.8L159.8,127.3L158.6,128.9L157.8,130.6L156.9,131.7L155.7,132.4L155.6,133.7L155.0,134.2L155.6,135.7L154.9,136.7L155.5,137.5L156.6,137.3L157.3,138.6L158.4,138.6L158.3,139.6L159.3,140.2L159.2,140.8L158.4,141.8L157.6,142.0L157.5,142.8L158.0,143.5L157.7,144.3L156.7,145.7L156.5,146.7L155.8,146.8L155.5,147.8L146.6,187.5L137.0,185.3L121.2,181.7L119.7,181.4L111.5,179.3L98.9,176.1L98.9,176.1L98.9,176.1L93.6,174.8L82.4,171.8L75.9,169.9L67.1,167.3L64.6,166.5L59.2,165.0L57.1,164.5L50.5,162.6L49.0,162.0L45.7,161.3L41.4,159.9L40.8,159.9L32.1,157.2L31.2,155.8L30.7,154.5L30.7,153.1L31.0,152.5L30.6,150.8L30.9,150.3L30.9,149.0L31.5,146.6L33.1,144.1L33.3,142.0L32.8,140.1L32.2,139.9L32.3,137.4L33.7,136.0L34.9,134.5L35.7,133.0L36.0,132.1L36.9,130.8L37.8,129.0L37.7,128.2L39.0,127.5L39.7,126.8L41.3,124.7L43.2,121.4L45.6,116.4L47.3,112.4L48.6,109.0L48.5,108.8L50.1,105.3L50.5,104.0L51.9,100.8L52.4,99.1L52.3,98.3L53.3,96.7L55.2,92.8L56.3,90.7L57.4,87.9L57.6,86.7L58.4,84.7L58.5,83.4L58.9,83.0L60.2,79.9L60.5,78.5L60.2,77.5L61.0,76.0L61.3,74.5L61.2,73.5L62.3,73.1L62.9,71.1L63.0,67.3L64.0,69.2L64.7,69.7L64.7,68.9L66.0,69.1L66.5,68.9L66.9,69.6L67.7,69.2L68.5,69.5Z" }, + PA: { name: "Pennsylvania", d: "M744.5,205.4L747.1,203.8L749.5,201.9L749.9,201.4L750.3,200.2L751.1,200.0L751.3,200.5L753.2,198.8L755.7,196.9L756.7,202.9L756.8,202.9L771.2,200.3L775.6,199.5L785.4,197.7L799.5,194.9L805.5,193.6L812.0,192.3L821.8,190.3L827.9,188.9L829,189.8L829.3,189.7L830.2,191.5L831.0,191.2L832.7,191.5L833.5,192.3L833.2,193.0L834.1,193.2L834.9,196.2L834.4,196.5L836.4,198.3L836.6,198.9L837.2,198.7L838.2,199.1L838.2,199.5L839.6,199.1L839.9,199.5L840.8,199.1L840.8,199.7L841.8,200.6L841.0,201.0L840.0,202.6L839.7,205.1L839.3,206.2L838.4,207.1L838.7,207.5L838.0,208.8L837.1,209.5L836.6,210.6L838.5,212.6L837.6,215.0L836.9,215.1L836.8,217.1L837.4,217.4L837.1,218.0L837.6,219.6L838.2,219.7L839.1,219.4L839.9,220.0L840.2,221.8L840.6,222.6L842.1,222.6L842.8,223.8L844.3,224.6L845.0,225.4L846.3,225.9L847.4,227.1L846.6,228.1L846.0,228.0L845.5,229.2L844.5,229.7L842.8,231.5L842.5,232.2L841.7,232.9L841.9,234.2L840.6,235.4L838.5,236.4L837.7,237.4L836.1,237.0L834.8,237.2L833.4,237.9L832.7,238.7L831.8,240.5L818.9,243.3L811.8,244.8L802.8,246.6L788.6,249.2L770.3,252.6L760.2,254.3L752.7,255.6L749.4,235.2Z" }, + RI: { name: "Rhode Island", d: "M896.5,179.7L897.6,179.7L898.7,183.2L897.8,184.4L897.0,182.6L896.8,181.3L896.1,181.1L897.0,184.0L896.0,184.2L896.1,184.9L895.5,185.2L895.2,184.2L895.6,182.2L895.8,180.8ZM893.9,180.7L894.1,180.5L895.0,181.3L894.8,181.5ZM894.5,185.2L894.6,184.2L894.2,183.8L894.2,182.7L894.5,183.0L895.0,184.6ZM892.8,192.7L893.0,191.0L893.4,191.2L893.8,192.6ZM887.9,190.2L888.2,189.6L887.7,188.2L888.3,187.8L887.5,183.9L886.7,181.1L885.5,177.0L885.0,175.0L891.5,173.0L892.3,175.7L892.9,175.4L893.2,177.0L893.8,178.0L895.0,178.3L895.8,179.0L895.9,179.9L895.3,180.9L894.7,180.2L894.8,179.5L893.4,178.8L892.8,178.1L893.7,180.5L892.4,180.5L893.2,181.0L893.7,182.4L893.0,182.8L893.8,183.7L894.1,185.0L893.8,186.0L893.7,187.5L892.9,187.6L891.5,188.3L890.1,189.4L888.0,190.5Z" }, + SC: { name: "South Carolina", d: "M723.6,367.6L729.2,364.9L729.7,365.3L731.3,363.8L733.0,362.7L733.4,362.7L734.7,362.0L735.1,362.1L735.8,361.0L736.2,361.7L737.6,361.1L749.8,359.9L756.6,359.1L760.1,358.8L760.4,359.8L760.1,360.8L760.5,361.2L762.2,359.5L765.5,362.8L765.7,365.5L777.2,363.8L782.0,363.1L785.9,362.4L792.6,367.2L795.0,369.0L802.9,374.7L810.1,379.9L809.3,380.2L807.1,381.6L805.6,383.2L803.8,385.9L802.9,387.6L802.6,388.5L801.7,389.8L801.1,391.8L800.8,395.2L801.2,396.2L800.9,397.2L800.2,398.3L798.8,399.3L798.5,401.3L797.4,401.3L796.3,401.8L795.5,401.2L794.5,402.0L794.1,403.3L794.4,403.9L794.9,403.6L795.0,404.2L794.1,404.8L793.0,405.8L792.6,406.9L790.5,408.4L789.8,407.8L789.1,408.1L789.1,408.7L790.3,408.9L790.1,410.1L788.7,411.4L788.3,412.2L787.7,412.2L786.1,412.9L785.2,414.2L784.7,414.0L782.6,416.1L782.0,415.8L781.1,416.5L780.9,415.9L780.0,416.1L779.9,416.9L781.2,418.3L780.9,419.8L779.0,421.3L777.8,421.9L777.5,421.2L776.2,420.6L775.5,421.2L775.5,421.8L776.3,421.9L777.4,422.9L776.6,424.3L775.1,425.7L774.5,425.8L773.6,427.2L774.0,427.6L773.4,427.6L771.7,426.5L771.0,426.9L769.5,426.5L769.0,425.4L769.2,424.8L768.2,423.7L768.8,422.7L768.1,421.4L767.9,421.5L766.6,419.6L766.7,418.9L765.0,417.6L764.9,417.2L763.2,417.0L762.2,416.2L762.4,415.3L762.0,414.5L761.6,414.4L761.8,413.5L761.5,412.9L761.2,411.3L760.6,411.1L760.3,410.2L759.3,409.1L759.4,407.7L758.1,407.1L756.8,406.1L756.2,406.3L754.3,405.5L753.6,404.7L753.7,403.9L752.9,404.1L752.0,403.4L752.1,402.8L750.1,401.5L750.2,400.9L749.9,400.2L750.2,399.3L749.9,398.9L748.8,398.5L747.4,396.9L746.1,396.4L745.4,396.4L744.4,395.8L744.2,395.1L743.5,394.4L743.1,393.3L740.9,391.7L738.9,390.9L737.4,389.7L736.8,389.8L735.8,388.0L734.8,387.2L734.1,386.0L733.3,385.6L732.6,384.4L732.5,383.4L731.6,382.5L731.3,381.6L730.4,381.1L730.1,379.9L729.4,378.8L728.8,378.6L727.0,379.2L725.4,378.4L723.7,376.6L722.5,376.6L720.4,375.3L720.0,374.1L720.5,373.5L720.3,372.8L721.7,370.6L723.5,369.0Z" }, + SD: { name: "South Dakota", d: "M363.4,153.0L363.7,153.0L365.1,136.3L365.4,131.9L371.2,132.4L380.9,133.2L397.1,134.3L404.0,134.7L418.1,135.5L428.1,136.0L438.8,136.4L452.8,136.9L459.5,137.1L469.8,137.3L481.6,137.4L481.3,139.9L480.5,140.7L479.9,141.9L478.6,142.7L477.2,143.9L476.9,144.7L478.4,146.6L478.9,148.0L479.6,149.1L480.7,149.2L482.7,150.3L483.2,151.6L483.2,160.8L483.2,166.6L483.2,168.5L483.0,191.9L480.7,191.9L481.0,192.3L480.6,193.1L481.9,194.3L481.8,196.4L481.0,196.5L481.4,197.5L481.3,198.1L482.7,198.2L482.8,199.8L483.3,200.5L482.9,201.7L482.1,202.0L482.3,203.1L481.9,203.7L482.2,204.1L481.5,204.9L481.5,206.5L480.9,206.8L480.7,207.8L480.0,208.3L480.1,209.8L481.0,210.3L482.0,211.5L482.5,213.1L482.3,214.0L483.1,214.6L482.1,214.7L481.8,214.2L480.4,214.2L479.9,213.2L478.7,211.9L479.1,210.9L478.5,210.6L477.3,210.6L477.2,209.8L475.6,209.1L474.9,209.4L474.4,208.5L471.9,208.2L471.6,207.7L470.6,207.3L470.5,206.5L469.1,206.0L468.2,206.3L467.3,206.0L466.9,206.5L465.9,206.2L464.9,206.4L464.0,206.2L462.9,206.5L461.5,206.3L460.3,205.9L459.8,206.1L459.3,207.5L458.6,208.0L457.5,208.2L455.7,206.8L453.6,205.6L450.2,203.8L449.8,202.7L443.2,202.5L432.4,202.1L423.5,201.8L411.0,201.2L399.0,200.6L395.4,200.3L385.0,199.6L376.7,199.0L359.7,197.6L360.3,191.0L360.2,190.8L363.2,155.8Z" }, + TN: { name: "Tennessee", d: "M602.5,357.2L603.2,356.7L603.3,355.3L604.7,354.4L604.5,353.2L602.6,351.9L602.8,351.5L604.7,351.7L605.7,351.3L605.6,350.8L604.2,350.1L604.1,349.4L605.7,349.3L605.9,348.6L605.2,347.5L605.6,346.2L605.2,345.8L606.1,345.8L606.1,346.4L606.9,346.4L607.3,345.6L609.4,345.3L614.8,345.0L622.8,344.4L631.5,343.8L631.8,342.6L630.9,339.8L634.8,339.8L634.8,340.4L642.1,339.7L647.9,339.1L657.1,338.0L657.6,338.3L658.6,337.8L661.7,337.6L667.0,337.5L670.6,337.3L676.7,336.8L680.1,336.1L684.8,335.7L688.1,335.7L693.4,335.2L698.2,334.8L703.2,334.2L708.5,333.6L708.7,333.2L710.8,333.0L715.7,332.3L716.0,332.4L726.0,331.0L729.8,330.4L739.3,329.1L739.5,328.6L744.3,327.9L743.9,328.5L743.5,329.8L744.0,331.3L743.6,331.5L743.4,332.9L744.2,334.2L743.2,334.3L742.6,334.0L741.9,334.3L740.8,335.5L739.2,339.7L738.4,340.3L737.5,340.5L737.1,339.6L735.8,339.5L735.4,340.2L734.6,340.2L733.6,340.8L732.7,341.6L732.0,343.5L730.4,345.0L729.4,344.7L729.5,343.3L728.8,342.7L726.9,344.3L725.8,346.4L724.8,345.8L724.2,346.5L724.6,347.6L723.2,350.1L721.7,349.9L720.4,350.7L720.0,351.5L719.0,351.7L718.8,352.4L717.9,353.5L717.3,353.5L717,354.0L715.7,354.8L715.1,355.8L710.0,356.7L709.1,357.6L708.1,357.9L707.7,358.9L706.9,359.3L706.0,360.6L706.4,361.5L705.8,362.0L706.3,363.1L705.0,364.4L703.2,364.8L703.0,364.3L701.7,365.4L701.8,370.7L689.9,372.2L681.1,373.3L678.6,373.5L674.6,373.9L664.3,374.9L661.9,375.1L655.9,375.7L645.5,376.4L641.4,376.8L631.7,377.5L631.7,377.8L618.6,378.8L608.5,379.6L593.6,380.5L593.7,379.5L595.4,379.7L595.8,377.7L596.4,377.2L597.2,377.5L597.8,377.0L596.7,375.9L597.5,375.1L597.1,374.5L596.1,374.5L595.8,373.6L596.8,373.3L596.7,372.4L597.3,371.5L596.2,370.9L596.2,371.7L595.4,371.6L595.5,370.7L596.9,369.4L597.5,371.0L598.2,369.5L597.5,368.8L597.8,367.6L598.4,367.4L599.8,368.4L600.0,367.6L599.4,367.5L599.3,366.4L600.9,365.5L600.6,364.8L599.9,365.3L599.3,365.0L598.8,363.7L599.8,362.9L600.4,363.2L601.4,362.7L601.9,361.7L602.6,361.6L603.3,360.9L602.0,360.3L602.5,359.3L604.1,359.7L604.0,358.8L602.8,357.9Z" }, + TX: { name: "Texas", d: "M365.9,345.1L379.3,346.0L390.4,346.7L400.0,347.3L411.4,347.8L419.2,348.2L417.4,391.8L418.7,391.5L421.0,394.4L422.5,396.0L424.5,396.3L424.9,395.4L426.0,395.5L427.4,396.4L428.2,396.4L428.6,394.6L429.7,395.8L430.8,395.9L430.5,396.3L431.6,397.4L431.9,400.1L433.0,400.1L433.2,400.5L434.0,400.3L434.5,400.6L435.6,400.2L436.8,401.1L437.9,401.6L438.8,401.7L439.6,402.2L441.0,402.3L441.8,401.6L443.2,402.1L444.7,404.0L446.1,403.5L446.3,402.7L447.0,401.9L448.3,402.5L449.2,402.5L450.5,403.0L451.7,402.1L451.9,403.1L451.4,403.7L452.0,405.5L453.3,405.7L454.1,405.5L454.6,405.9L454.1,407.0L454.4,407.0L454.1,408.3L454.7,408.3L455.8,409.0L456.6,408.9L458.5,407.1L459.3,406.0L459.9,406.0L461.2,406.8L460.9,407.6L461.7,408.1L462.7,407.6L463.5,408.0L463.4,409.2L463.8,409.8L465.1,409.9L465.8,408.7L466.4,408.5L467.3,408.9L467.4,408.1L468.1,407.7L468.7,408.3L468.8,409.6L468.1,410.1L468.9,412.0L469.6,412.2L470.3,411.6L470.2,410.4L471.0,410.0L470.3,409.2L471.2,409.6L472.2,408.5L472.0,407.0L472.4,407.3L473.4,406.8L473.7,407.0L474.1,408.9L474.7,409.4L475.1,408.7L475.9,409.0L476.2,409.8L477.4,409.7L477.9,408.0L479.6,408.3L478.8,409.4L479.8,410.0L480.5,410.0L481.1,411.1L482.5,411.0L483.6,412.5L483.6,412.9L484.4,412.9L484.9,411.3L486.2,411.7L487.1,411.4L487.6,409.7L488.6,409.8L488.5,409.4L489.5,409.7L491.5,409.1L491.5,408.5L493.4,409.7L494.0,409.1L494.9,409.3L494.8,408.4L496.1,408.5L497.7,407.5L498.4,407.5L498.9,408.7L500.2,408.5L500.2,408.8L502.5,408.9L503.4,408.8L504.1,408.1L504.5,406.8L506.3,407.3L507.9,409.0L509.3,409.0L509.8,410.1L511.2,411.6L512.0,411.7L513.0,411.4L514.2,412.9L515.3,412.8L515.4,413.3L516.4,413.0L517.7,414.4L518.3,413.9L518.8,413.8L518.9,414.8L519.6,415.3L520.2,415.1L520.1,415.8L520.7,416.0L521.1,415.5L521.6,415.8L521.8,415.3L523.2,415.7L523.9,414.8L524.7,415.2L525.0,415.7L525.4,415.3L526.5,415.7L526.5,415.7L526.6,415.9L526.8,427.7L527.3,450.8L527.8,451.0L528.6,452.3L529.8,452.9L530.5,454.5L531.5,455.5L531.4,456.2L532.0,457.3L531.5,458.1L531.7,458.9L531.3,459.5L531.7,460.5L532.3,461.1L533.2,461.2L533.4,461.8L533.0,462.4L534.0,463.0L534.0,463.7L534.5,463.9L534.7,464.9L534.4,465.9L535.2,466.8L535.6,466.7L536.1,468.9L537.4,468.6L537.0,470.6L537.6,471.2L537.7,472.2L536.9,472.7L536.8,473.3L537.6,474.3L537.0,474.8L536.9,475.5L537.2,476.7L536.6,477.4L536.0,478.6L535.8,480.0L535.0,480.5L534.9,481.8L533.9,482.4L533.7,483.2L534.2,483.6L534.6,485.4L533.8,486.4L533.4,487.8L534.5,488.8L534.6,489.8L534.3,490.6L534.9,492.1L534.1,493.4L534.8,493.8L534.0,494.8L533.1,495.5L532.6,497.1L531.7,498.5L530.6,499.4L530.5,499.9L531.1,500.4L532.3,502.2L532.3,502.5L529.1,502.5L526.6,503.3L517.7,507.5L515.8,508.7L515.1,509.7L514.0,509.6L515.5,508.2L516.2,507.3L517.1,507.3L517.7,506.9L518.2,506.0L518.9,506.3L519.6,506.2L518.6,505.1L514.8,506.2L514.3,505.7L515.4,504.0L515.7,502.4L515.7,501.0L514.8,500.9L514.5,500.5L513.3,501.1L512.6,501.9L512.3,502.8L511.3,503.3L510.9,502.4L509.6,503.3L509.5,504.0L510.1,504.6L509.4,505.5L510.2,506.6L511.6,506.9L511.1,507.9L511.9,508.3L512.1,509.8L511.9,511.1L511.4,511.7L510.8,511.5L509.4,512.9L507.9,514.2L507.7,513.7L506.8,513.8L506.7,515.5L507.1,516.0L508.0,515.2L509.8,513.9L510.0,513.5L512.2,511.6L513.3,511.1L513.3,510.3L515.1,510.5L513.7,511.7L509.4,514.7L507.7,516.1L507.5,516.5L505.2,518.3L502.4,521.1L501.4,521.2L496.5,524.0L494.1,525.6L490.3,527.3L486.0,529.4L483.6,531.1L482.7,531.9L481.6,533.3L477.9,535.4L476.2,536.7L472.8,539.6L470.5,542.3L469.7,543.9L468.7,545.0L466.3,549.2L464.5,553.0L463.7,555.4L462.9,559.0L462.7,561.1L462.8,563.1L463.3,567.0L464.3,570.9L465.1,573.5L466.2,577.9L466.9,582.8L466.4,581.9L466.1,579.1L465.3,575.5L464.5,572.6L462.8,572.3L464.1,571.8L463.5,570.2L463.1,568.5L462.4,566.8L462.3,564.8L462.4,562.2L462.3,559.9L463.2,554.6L464.4,551.2L465.8,548.4L466.8,547.1L467.5,545.4L468.1,544.7L468.0,543.8L468.9,542.2L470.2,541.5L470.9,540.6L472.2,538.2L474.2,537.1L474.7,536.1L475.9,536.1L478.4,534.1L480.0,533.2L481.7,532.7L481.4,531.9L482.1,531.4L481.4,531.1L480.3,531.8L478.9,532.5L478.1,533.3L476.9,533.3L476.5,532.6L476.5,531.4L475.2,531.2L474.8,531.8L474.8,533.4L474.4,533.9L474.8,534.7L474.5,535.3L473.1,536.4L471.9,537.6L471.3,537.6L470.0,537.0L469.8,536.2L467.6,537.3L466.3,538.6L467.8,539.0L469.5,537.9L470.1,539.4L469.6,539.8L466.8,544.0L466.0,544.0L465.6,543.0L464.1,543.2L463.8,542.8L461.5,543.0L460.7,542.7L460.3,543.5L461.1,544.1L462.2,544.1L463.0,543.8L462.7,545.0L463.2,546.0L464.2,546.6L465.4,547.0L464.1,549.8L463.1,553.3L462.2,555.3L460.7,555.8L460.2,556.3L459.5,555.9L460.5,555.5L460.7,554.4L460.1,554.4L459.7,554.9L457.6,556.3L457.9,557.0L459.6,557.3L461.4,556.6L462.0,556.6L461.6,558.8L461.8,558.8L461.4,562.7L460.9,566.6L460.6,566.7L461.3,571.1L461.9,572.3L461.9,573.9L462.6,574.0L464.2,578.1L464.5,578.6L463.9,579.5L464.1,580.2L464.1,581.3L464.6,582.7L466.1,583.0L466.1,583.6L467.0,583.3L467.1,585.7L465.4,585.5L464.5,585.7L464.5,586.0L463.0,586.3L462.5,588.1L461.0,587.9L460.5,587.1L459.5,587.1L459.0,586.0L458.2,585.9L457.0,584.0L454.7,583.8L453.9,583.1L452.7,583.3L452.2,583.0L450.5,583.2L450.2,582.9L449.3,582.9L449.0,583.4L448.3,582.8L446.9,583.1L446.3,582.6L445.9,583.0L444.8,582.6L444.3,582.1L444.5,581.6L443.3,581.5L443.1,580.7L442.1,580.7L440.6,579.2L439.9,579.4L438.1,578.5L436.7,578.8L435.8,578.1L434.8,576.8L434.0,576.6L433.9,576.0L433.3,575.7L432.0,576.0L430.5,575.1L429.7,575.1L429.1,574.7L428.2,575.0L427.6,574.2L428.1,573.2L427.4,572.1L426.6,571.9L426.4,570.0L426.0,569.2L425.9,567.7L425.3,567.2L425.3,566.2L424.8,565.0L423.6,564.1L423.8,563.5L422.9,563.0L422.4,562.3L422.8,561.9L422.0,561.0L421.4,560.9L421.3,559.9L421.8,559.3L421.6,558.0L421.9,557.5L421.7,555.8L420.5,555.3L420.6,554.6L419.8,554.4L420.5,553.8L420.9,552.2L420.7,551.6L421.0,550.5L420.1,550.2L420.5,548.8L419.7,547.7L419.2,547.9L418.7,547.0L418.1,547.3L417.4,546.6L416.7,546.6L415.5,544.9L414.9,544.6L414.7,543.9L414.1,544.1L413.4,543.3L413.5,542.3L413.0,541.8L413.2,541.1L412.4,540.1L412.5,539.2L411.3,538.9L410.9,537.3L410.2,536.8L409.7,535.5L407.3,534.3L407.0,533.3L406.5,533.3L405.7,532.2L405.8,531.4L404.7,529.5L405.0,528.6L404.4,527.8L405.0,527.3L404.2,527.0L403.6,526.1L403.9,525.4L403.0,524.8L403.1,524.2L402.0,523.6L401.8,522.6L402.0,521.8L401.4,521.3L401.2,519.9L400.8,519.8L400.3,518.1L399.7,518.1L399.3,517.1L399.5,515.7L399.1,513.6L397.8,512.7L397.2,511.9L397.4,511.6L396.8,510.2L395.3,509.4L395.2,508.8L394.0,507.9L392.8,507.3L392.0,505.7L392.0,505.3L390.2,504.8L389.8,503.9L388.2,503.7L388.5,502.6L388.4,501.3L388.1,501.2L387.6,502.5L387.2,501.9L387.4,500.9L386.3,500.3L385.5,498.2L384.9,498.3L384.3,497.6L383.4,498.0L383.0,497.2L382.4,497.7L379.8,497.8L378.5,497.1L378.1,497.2L377.1,496.7L375.5,496.9L374.7,496.4L373.5,496.4L373.2,496.8L371.4,496.3L370.7,495.3L369.8,495.3L368.5,494.5L367.5,494.7L366.7,496.8L364.3,496.3L363.7,497.0L363.2,496.7L361.6,497.2L361.1,497.0L360.5,498.0L360.6,498.4L359.7,499.1L359.6,500.1L359.1,500.1L358.9,501.2L358.1,501.7L358.1,502.3L357.5,503.4L357.6,504.4L357.2,505.3L356.5,505.4L356.2,506.7L355.8,507.4L356.5,507.9L356.1,508.6L354.7,509.2L354.1,509.0L353.5,510.3L352.2,511.0L351.7,511.6L351.3,513.2L350.3,513.3L349.1,512.9L348.1,513.1L347.1,512.1L345.3,511.5L343.6,509.2L341.9,508.5L341.2,508.6L339.8,507.7L338.6,506.1L337.7,505.6L335.1,505.0L333.9,504.3L332.7,503.1L332.0,502.8L330.8,501.1L330.8,500.6L329.9,499.7L328.5,499.4L327.7,498.8L327.4,498.1L325.4,496.5L324.9,495.6L324.6,493.4L323.9,492.3L323.5,491.1L322.7,489.8L322.8,488.7L322.4,487.5L322.9,486.2L322.8,485.1L323.1,484.1L322.7,482.8L322.0,482.1L321.9,481.3L321.0,480.4L321.0,479.8L320.2,479.1L320.4,478.5L319.8,475.0L319.4,474.2L318.6,474.1L318.0,472.2L317.0,472.1L316.1,470.8L315.3,470.5L315.2,470.0L314.2,469.3L313.4,469.3L313.0,468.7L310.9,467.7L311.0,467.0L308.2,464.4L307.5,462.3L306.8,461.5L305.6,460.9L305.1,460.2L304.5,460.1L304.4,459.4L303.0,457.2L301.7,456.4L301.5,455.3L300.6,454.6L299.2,454.3L297.0,452.6L296.5,450.8L295.8,450.3L295.6,448.9L294.9,447.1L294.4,446.3L293.1,445.4L292.4,445.7L291.7,444.8L291.4,444.2L290.4,443.7L290.5,443.3L289.9,442.7L289.8,442.0L290.3,441.7L290.6,439.8L312.8,442.1L329.7,443.7L344.9,445.0L357.3,446.0L359.0,422.7L359.5,417.8L359.7,414.9L360.5,406.9L360.9,402.4L363.1,373.1L363.8,364.8L364.9,349.1L365.2,345.0Z" }, + UT: { name: "Utah", d: "M194.7,197.7L198.2,198.5L213.5,201.0L224.7,203.0L225.0,203.1L236.4,205.0L243.3,206.0L241.9,215.7L241.1,219.9L239.8,228.4L245.3,229.3L253.2,230.5L256.3,230.9L264.8,232.1L272.9,233.2L271.4,243.5L271.3,244.4L266.3,280.0L265.6,284.1L264.3,294.1L264.2,296.6L262.3,310.7L262.1,311.4L260.6,322.6L250.4,321.2L235.7,319.0L235.3,318.8L225.3,317.3L219.2,316.3L199.6,313.0L185.8,310.5L173.3,308.2L176.5,291.4L176.6,291.2L177.5,286.0L178.2,282.8L179.3,277.1L180.5,271.0L186.6,239.4L187.2,236.6L189.5,224.7L190.5,219.6Z" }, + VA: { name: "Virginia", d: "M837.2,282.6L837.7,282.8L837.4,283.4ZM842.3,279.1L842.7,279.1L842.9,278.0L849.3,275.9L848.6,277.6L848.1,279.6L847.7,280.3L847.3,279.9L846.4,280.3L845.6,282.0L845.2,283.5L845.0,286.0L845.3,287.2L844.4,289.9L844.9,290.1L844.2,292.1L843.8,293.7L843.3,294.1L843.6,295.1L843.2,296.9L842.4,298.4L841.4,298.5L841.8,299.1L841.2,299.4L840.8,297.8L840.0,296.9L839.5,295.8L839.3,294.4L839.6,293.2L839.5,291.4L839.7,289.3L839.6,287.8L840.3,286.1L840.9,283.8L840.5,283.2L841.8,282.6L842.4,281.2L842.4,280.6L841.0,280.5ZM836.8,280.3L836.3,281.3L835.9,280.5ZM735.6,308.1L736.4,308.6L735.4,309.4L735.5,310.0L736.5,310.3L736.9,312.0L737.9,312.5L738.5,313.4L739.6,313.3L740.4,313.7L740.5,314.1L741.8,314.9L743.9,314.4L744.7,313.7L744.7,313.1L746.1,312.6L746.4,311.4L746.9,311.0L747.7,311.7L749.6,312.9L751.4,311.6L753.6,310.7L754.6,310.5L755.7,309.4L755.0,308.6L755.3,307.6L756.7,308.1L757.0,308.6L759.3,306.8L760.4,305.7L761.1,305.4L761.9,306.6L764.7,304.2L764.8,303.6L764.0,303.7L764.0,303.0L765.0,302.2L765.6,301.3L764.4,300.9L764.1,300.1L764.7,299.2L764.4,298.6L765.4,296.2L766.9,293.9L767.8,292.7L768.3,291.7L768.5,290.5L768.9,289.8L768.4,289.3L768.6,288.2L769.9,286.4L770.6,285.8L770.1,285.1L771.1,283.2L771.7,281.9L771.3,280.7L771.7,278.2L773.8,278.8L775.2,280.7L778.2,281.2L779.6,279.1L780.0,276.3L780.4,275.1L780.9,275.0L780.7,273.7L781.5,271.9L781.8,270.5L784.3,272.0L785.1,269.3L786.2,267.7L786.3,268.4L786.9,267.9L787.5,266.4L788.0,266.7L788.7,265.4L788.2,265.2L789.4,263.2L789.8,263.0L790.5,261.6L789.8,261.1L790.3,259.9L789.9,259.7L790.9,257.4L790.4,257.3L790.6,256.5L790.2,256.0L790.3,254.8L794.9,257.5L800.4,260.5L801.0,257.0L801.4,256.0L802.1,255.8L803.2,256.1L804.1,255.9L804.6,256.7L806.2,257.2L805.9,258.2L805.5,258.7L805.6,259.8L806.3,259.9L806.8,260.6L808.9,260.5L810.6,261.0L810.7,261.9L811.3,262.1L812.5,262.0L813.2,262.6L814.8,263.7L815.2,265.5L815.4,267.1L814.4,267.8L814.1,268.4L814.4,269.2L813.2,269.9L812.4,269.6L812.5,270.6L811.9,273.0L811.8,274.0L812.2,275.4L813.4,276.4L815.1,275.7L815.4,275.2L816.3,275.0L816.9,274.1L817.5,274.6L817.4,276.1L818.9,277.0L819.0,278.0L821.4,278.6L822.9,278.4L823.5,278.8L823.8,278.3L825.3,278.2L825.7,279.0L826.8,279.5L827.5,280.5L828.4,280.7L829.5,281.5L830.9,281.7L833.0,282.6L832.9,283.9L832.1,284.5L832.4,286.6L832.8,287.1L832.3,288.1L833.2,288.4L832.1,289.2L829.9,288.4L829.4,289.0L828.8,288.6L828.7,287.9L827.6,286.5L826.3,286.1L825.6,285.6L824.9,285.5L823.2,283.8L822.4,283.7L822.0,282.9L821.1,282.5L821.1,283.1L823.2,284.4L824.8,286.4L825.9,286.6L826.0,287.1L827.1,287.1L828.0,288.8L828.9,289.7L830.8,289.4L831.4,290.0L833.4,290.0L832.6,290.8L832.7,291.5L833.5,291.5L833.7,291L834.4,291.7L835.1,293.7L835.0,295.5L833.6,294.5L832.1,294.0L831.8,294.9L832.6,295.5L833.2,296.4L833.8,296.6L832.6,297.3L831.5,297.6L832.0,298.3L833.3,297.8L833.5,299.3L834.3,298.9L834.7,299.4L835.5,299.6L836.1,300.5L835.9,302.4L835.6,302.2L834.7,302.7L833.9,303.6L833,302.4L831.0,301.6L829.9,301.0L830.0,300.0L828.9,298.8L827.6,299.3L827.2,299.8L826.4,299.1L825.2,299.1L824.9,298.7L823.7,299.7L824.5,300.1L825.2,299.8L826.4,299.9L827.5,300.7L828.1,300.6L828.4,299.4L829.3,301.6L829.7,302.9L831.1,302.9L833.0,304.2L833.3,305.4L835.0,305.0L835.4,304.3L835.6,304.9L836.2,305.0L835.7,303.4L836.7,303.1L837.6,303.5L840.0,303.7L840.9,303.0L841.6,303.0L842.6,305.3L844.0,307.8L844.8,309.1L845.6,310.8L836.8,312.6L829.3,314.2L827.3,314.5L827.4,314.7L820.7,316.1L804.2,319.3L799.6,320.2L782.0,323.4L771.3,325.2L768.3,325.6L761.1,326.4L758.7,326.9L752.7,327.5L749.2,328.0L743.9,328.5L744.3,327.9L739.5,328.6L739.3,329.1L729.8,330.4L726.0,331.0L716.0,332.4L715.7,332.3L710.8,333.0L708.7,333.2L709.1,332.6L711.1,331.4L712.4,331.3L714.7,329.9L716.7,329.0L717.7,328.8L717.7,327.8L718.5,326.1L720.3,325.8L721.8,324.9L722.1,324.0L721.7,322.9L722.4,322.1L723.1,322.0L724.0,321.1L723.8,319.4L725.3,318.4L726.3,317.3L727.6,316.3L729.8,315.2Z" }, + VT: { name: "Vermont", d: "M844.4,115.7L848.3,114.6L854.6,113.1L856.8,112.7L860.2,111.9L863.4,111.1L872.5,108.5L872.1,109.2L873.2,110.7L872.6,112.3L872.7,113.6L872.1,114.8L873.2,116.5L874.0,117.1L874.2,118.5L873.7,118.9L874.3,119.9L873.5,120.5L873.3,121.5L872.7,122.4L871.5,123.0L871.5,124.0L870.7,124.7L870.1,124.6L868.3,125.6L868.0,126.9L868.5,127.5L868.5,128.6L869.3,129.7L869.6,130.6L869.2,132.1L868.8,133.1L869.2,134.7L868.4,136.2L868.8,137.4L868.7,138.3L867.8,139.3L867.5,140.3L867.7,142.4L867.0,143.2L867.1,144.7L867.5,145.3L867.6,148.0L868.2,149.0L867.9,150.4L868.3,153.0L868.9,154.1L868.5,154.9L869.1,155.8L868.9,156.7L868.2,157.1L868.4,158.2L868.2,159.7L869.4,161.4L869.7,161.1L870.5,162.0L857.6,164.8L856.9,163.6L856.9,162.9L856.6,161.5L855.0,153.5L853.5,147.1L852.7,146.7L852.3,145.7L851.3,146.0L851.2,147.3L850.5,147.0L850.4,144.7L850.8,142.7L849.9,141.8L849.9,140.5L849.0,139.4L848.6,137.5L848.0,137.1L848.1,135.5L847.9,133.8L848.7,132.3L848.8,131.6L847.9,129.6L848.2,127.9L847.6,126.7L846.2,125.3L845.6,124.0L845.7,123.4L845.4,121.7L845.7,120.5L844.7,119.6L844.7,118.4L844.9,117.7Z" }, + WA: { name: "Washington", d: "M91.8,49.8L92.5,47.9L93.4,46.7L93.8,47.9L93.4,48.9L94.2,49.8L93.1,50.0L92.7,50.4L91.7,50.3ZM97.2,23.9L97.4,23.2L98.3,24.2L97.3,24.4ZM97.3,19.7L97.7,19.6L98.4,22.0L97.7,21.0ZM96.2,22.8L96.7,22.4L97.1,23.4L96.2,23.8ZM93.6,30.2L94.7,28.8L95.7,27.9L96.1,27.0L97.0,27.0L97.3,27.5L97.0,28.3L97.8,29.3L97.8,29.8L97.0,30.0L96.1,29.4L95.9,30.0L95.1,30.4L94.3,30.3L94.4,30.8L95.6,30.9L96.0,31.9L95.9,33.5L95.6,33.7L95.6,35.7L96.2,35.3L96.3,34.0L96.8,34.2L97.3,35.5L98.1,36.0L98.0,37.8L97.2,38.8L96.6,38.3L96.4,36.6L95.2,36.7L95.4,36.2L94.7,35.1L95.3,33.4L95.4,32.3L94.4,32.1L94.4,31.6ZM94.1,17.4L94.6,17.6L96.1,19.1L95.6,19.1L94.6,18.4ZM92.2,18.9L93.2,18.7L93.1,19.4ZM93.8,12.5L94.5,12.7L94.6,13.3L93.7,13.1ZM89.6,20.6L90.1,20.1L91.2,20.4L91.1,21.0L91.7,21.8L92.5,22.2L92.0,20.7L94.4,19.3L95.1,19.5L96.6,21.1L95.4,21.8L95.6,23.1L95.2,24.2L94.5,24.5L94.3,25.8L93.2,25.8L92.7,24.6L92.2,24.7L91.1,24.2L89.9,22.6L90.0,21.1ZM89.7,18.5L90.6,18.9L91.2,20.2L89.9,19.0ZM180.8,35.1L179.5,40.4L177.7,48.6L176.4,53.9L173.5,66.9L173.3,67.9L168.1,91.1L167.5,91.9L168.2,93.6L168.4,94.7L168.2,95.9L168.7,96.8L167.4,98.3L167.7,98.6L167.9,100.5L159.0,98.4L145.4,95.1L136.6,93.0L135.8,93.5L134.1,93.9L133.1,93.8L132.2,93.3L128.6,93.2L127.4,92.4L126.5,92.7L125.5,93.5L123.5,93.2L120.8,93.1L119.1,93.5L117.4,93.6L116.6,94.3L115.5,94.1L113.5,94.1L112.3,93.9L111.4,92.6L110.3,92.1L109.3,92.6L106.5,92.8L105.8,93.3L105.2,92.8L103.3,92.4L102.0,93.1L101.2,92.9L101.1,91.4L99.5,90.2L98.5,90.2L97.6,89.7L96.7,88.9L95.1,89.0L93.4,88.8L92.4,88.2L91.5,88.2L90.6,88.9L87.3,89.6L86.0,89.4L84.5,89.7L83.6,89.4L83.0,88.6L82.1,88.6L81.6,88.1L79.3,86.7L77.8,85.2L77.9,84.2L78.3,83.5L78.2,81.8L78.8,80.6L78.7,79.5L78.9,78.4L78.4,76.7L78.3,75.4L75.8,72.3L75.1,72.0L73.1,72.5L71.8,72.1L71.1,71.0L71.5,70.0L71.0,69.0L69.8,68.8L68.1,68.1L68.1,67.5L67.5,67.2L66.8,67.6L66.2,67.2L64.9,67.8L64.4,67.5L63.7,65.8L63.2,65.5L62.6,66.3L62.0,66.3L63.1,63.9L63.9,61.6L64.6,58.5L64.9,59.8L64.2,61.6L63.7,64.2L64.6,64.5L64.9,63.8L64.5,62.9L64.9,61.8L65.3,62.7L66.5,61.4L66.2,59.0L67.0,58.4L68.6,57.8L67.9,56.8L67.4,57.2L66.5,57.0L66.5,57.5L65.7,57.2L64.9,56.0L65.2,55.0L65.3,52.5L65.8,52.4L65.8,53.5L66.6,53.1L69.6,52.8L69.3,52.1L67.6,51.1L67.8,50.3L66.4,49.6L65.9,49.9L65.8,51.7L64.8,51.8L65.2,51.2L66.1,47.3L66.4,43.9L65.6,42.1L66.3,38.1L66.4,36.7L66.6,33.5L66.0,32.6L66.1,31.5L65.5,30.9L65.5,30.2L64.6,29.4L64.6,27.2L64.8,25.3L65.1,24.3L64.9,23.1L65.8,22.3L67.1,19.9L66.4,18.8L66.6,18.4L67.5,18.7L69.3,20.3L70.6,22.0L71.1,22.1L72.1,23.2L72.5,23.1L74.3,24.8L74.2,25.1L75.7,26.4L78.6,27.5L79.7,27.6L81.1,28.7L81.7,28.5L82.1,29.0L83.4,29.2L83.8,30.0L86.0,30.6L88.0,29.8L87.7,30.2L88.7,31.3L88.8,32.2L89.7,32.2L90.6,32.5L90.3,33.0L90.9,33.6L90.6,34.7L91.2,34.8L91.6,33.8L91.1,33.0L91.3,32.3L92.1,31.9L93.2,32.1L93.2,32.7L92.2,33.1L92.5,34.1L92.9,34.1L93.2,33.3L93.8,33.2L93.7,35.1L92.9,35.1L93.2,36.0L93.2,37.6L93.8,38.2L93.3,38.5L92.4,38.2L92.3,39.0L91.2,39.4L90.2,41.3L89.4,41.3L90.6,39.4L90.4,39.0L88.8,40.6L88.3,41.5L86.9,42.4L83.9,45.2L82.6,47.2L83.2,47.2L84.4,47.8L85.2,47.5L86.3,47.5L86.7,46.9L84.1,47.3L83.3,46.6L86.7,43.1L88.7,42.2L90.4,42.1L91.0,40.8L92.2,39.7L94.1,38.9L94.2,37.0L95.1,38.1L94.9,41.7L93.7,41.4L93.7,42.2L94.2,42.6L93.7,43.6L93.9,44.0L93.7,45.0L92.7,45.5L92.5,46.2L93.2,46.7L92.4,47.4L91.6,48.9L91.7,49.4L90.9,50.2L91.0,51.3L89.8,52.5L88.8,50.6L89.7,49.0L88.7,49.5L88.0,50.6L89.2,52.6L88.5,52.7L88.3,53.6L87.6,53.9L87.0,52.8L86.5,50.6L87.4,50.1L87.7,49.0L87.5,48.4L87.2,49.4L86.3,50.2L86.3,51.7L85.7,52.4L86.5,52.4L86.7,53.8L88.0,54.6L88.8,54.1L89.0,53.5L89.7,53.4L90.6,52.0L91.4,51.2L91.4,50.6L92.4,52.1L93.1,51.8L93.1,51.0L94.7,50.8L94.9,49.9L94.8,48.7L94.4,48.4L94.9,47.9L94.6,47.0L94.6,45.6L96.0,45.2L95.0,43.8L96.3,42.5L96.5,40.8L97.5,40.1L98.6,38.1L99.8,38.0L100.1,36.7L99.5,36.0L98.8,34.1L99.2,32.8L99.0,31.8L98.2,31.5L98.2,31.9L97.5,32.3L97.7,33.7L98.4,34.8L98.2,35.5L97.3,33.6L96.7,33.3L96.7,32.1L97.2,30.8L98.2,30.6L98.9,31.2L99.7,30.6L99.4,29.6L98.2,28.4L97.8,27.3L98.0,26.6L96.3,26.8L96.2,26.1L96.6,25.3L95.8,25.5L96.2,24.8L97.6,24.6L98.2,25.1L98.4,26.1L99.4,26.3L99.5,24.2L100.4,24.3L100.8,23.8L100.1,22.2L100.1,21.0L100.8,20.3L100.3,19.5L99.4,19.4L98.6,20.0L98.8,20.9L98.1,19.9L98.8,19.0L98.4,18.4L97.8,18.5L98.1,17.3L97.3,16.0L98.0,15.8L98.0,15.1L97.4,14.6L98.5,13.8L107.9,16.5L112.8,18.0L120.3,20.0L127.7,22.0L137.5,24.6L146.2,26.8L154.7,28.9L163.9,31.1Z" }, + WI: { name: "Wisconsin", d: "M632.1,143.7L632.3,142.2L634.0,142.3L633.0,144.9ZM625.8,147.7L626.5,147.4L626.7,148.6L625.9,148.2ZM575.0,111.2L575.4,109.6L576.0,109.5L575.8,110.9ZM574.3,114.1L575.4,113.4L574.7,114.3ZM572.3,113.1L572.5,112.7L574.1,112.0L574.4,112.3L573.9,113.2L572.5,113.5ZM570.7,115.1L570.8,114.6L571.9,113.7L572.0,114.1ZM570.9,112.3L571.7,113.3L571,113.4L570.5,112.7ZM570.3,111.0L572.1,110.2L572.8,111.2L573.5,110.5L573.7,111.4L572.8,111.6L571.9,112.6L571.3,111.8L570.4,111.5ZM570.3,116.3L571.2,115.9L572.9,114.2L573.7,114.7L572.1,115.5L572.4,116.1L571.4,116.3L570.4,117.0ZM567.1,112.0L567.9,111.6L567.9,112.5ZM551.6,119.0L552.8,119.5L554.6,119.2L557.3,118.1L558.3,117.5L559.3,117.5L561.9,116.0L563.2,115.4L563.5,114.9L564.5,115.3L564.8,114.7L566.2,114.4L567.3,113.0L568.1,113.2L568.9,112.5L569.4,112.5L570.8,114.0L570.1,115.5L568.9,117.0L569.5,118.4L568.6,119.1L568.1,120.6L568.8,120.9L571.1,119.4L571.3,118.3L573.7,120.3L574.4,120.6L574.9,120.4L576.3,120.9L576.7,121.6L577.4,121.4L577.4,121.4L578.0,121.9L579.5,122.1L581.2,125.2L581.2,125.7L597.4,129.0L602.4,131.4L603.0,131.1L604.0,131.3L604.3,131.9L605.0,131.8L605.2,131.2L606.7,131.0L606.8,131.5L608.0,131.8L608.7,131.4L610.1,132.2L610.8,131.9L613.1,132.6L613.2,133.5L613.6,133.9L612.8,135.0L613.8,135.8L615.0,135.3L615.5,136.1L616.9,136.1L617.3,136.7L618.0,136.9L618.5,137.7L617.9,138.0L618.8,139.4L618.5,140.8L618.7,141.7L618.4,142.4L617.8,143.2L618.0,143.9L617.7,144.4L618.1,145.2L618.1,145.2L619.6,144.9L620.4,143.9L621.1,144.4L621.3,145.0L620.7,146.0L620.1,148.3L620.2,148.8L621.0,149.3L621.6,150.2L622.6,150.4L622.2,151.5L622.3,153.0L620.2,153.5L619.1,154.3L619.3,155.2L618.8,156.4L618.3,156.7L617.8,158.4L617.2,159.3L617.0,161.3L617.2,161.7L616.5,162.8L617.7,163.5L618.4,163.3L618.7,162.2L620.1,160.9L620.7,160.8L621.4,159.5L621.3,158.8L622.9,156.1L624.3,155.3L624.9,155.4L625.5,154.7L626.4,155.2L626.0,154.3L626.5,152.4L627.8,150.2L628.0,148.2L628.7,148.3L629.8,147.6L629.8,146.4L630.6,145.2L631.9,145.1L631.9,146.8L631.0,147.0L631.2,149.7L630.6,150.5L630.1,150.5L629.9,151.5L629.2,152.6L629.6,153.4L628.9,154.2L629.2,154.7L628.2,155.4L627.6,156.7L627.3,158.4L626.5,160.5L626.1,161.1L625.7,162.3L624.9,167.5L625.6,169.3L625.6,170.7L625.0,171.5L623.8,172.5L623.7,173.7L623.3,174.5L622.8,177.7L623.0,179.2L623.6,180.1L623.6,182.1L622.6,184.5L622.4,187.1L621.4,189.3L621.2,192.3L621.8,193.7L621.5,194.5L622.1,196.1L621.8,197.2L622.7,198.3L622.9,200.0L623.3,201.2L624.4,202.2L624.3,203.9L623.8,206.1L624.4,208.8L619.6,209.1L610.7,209.9L608.3,210.1L596.9,210.7L593.9,210.8L580.6,211.6L578.0,211.8L577.9,211.0L576.8,209.0L575.8,208.7L573.0,208.1L571.0,207.0L570.0,203.8L569.3,203.3L569.3,202.0L568.7,200.3L568.5,198.2L569.0,197.8L569.3,196.7L570.3,195.5L569.5,194.1L567.9,193.4L567.9,192.0L567.2,191.0L567.5,190.0L567.0,189.0L567.2,188.2L566.5,187.5L566.4,186.1L566.7,183.9L566.1,182.5L564.3,180.0L563.4,178.9L561.1,178.5L558.9,176.9L558.7,176.3L557.2,175.6L556.2,174.8L555.8,173.2L555.3,172.9L555.3,171.9L554.5,171.1L553.2,170.4L550.3,169.6L549.4,168.9L548.8,167.4L548.1,167.1L545.3,167.0L544.7,166.2L543.9,165.9L544.0,165.5L542.1,163.9L541.2,163.4L540.9,162.7L541.5,161.1L541.3,159.7L541.7,158.9L541.3,158.1L541.4,156.8L540.7,156.2L541.6,155.1L541.2,153.3L541.4,152.7L541.2,151.0L542.2,150.0L542.1,149.4L542.9,148.5L542.9,147.5L541.6,146.0L541.6,145.4L540.8,144.8L540.2,145.0L539.1,144.6L539.0,143.6L539.3,141.4L540.5,140.4L541.5,137.5L542.6,136.6L544.0,136.1L544.4,135.4L545.2,135.6L545.7,134.5L547.0,134.6L547.3,133.4L547.9,133.2L547.4,120.1L548.6,120.4L549.2,119.5L548.7,119.2L549.5,118.9L549.7,118.3L550.4,118.1Z" }, + WV: { name: "West Virginia", d: "M721.9,289.9L723.1,290.2L725.1,289.1L726.5,288.7L726.7,287.7L726.6,285.8L727.3,285.1L728.3,285.1L728.6,284.5L728.1,282.6L727.2,280.7L728.3,279.5L728.1,278.2L728.7,276.4L729.4,275.8L729.7,275.0L730.6,275.6L731.2,275.6L732.2,277.0L731.8,277.8L732.6,278.1L733.0,277.6L733.1,276.8L733.6,276.3L734.2,276.7L734.1,274.5L733.4,274.1L733.1,273.3L734.2,272.7L733.8,270.9L734.1,270.1L734.7,269.7L734.7,268.6L736.6,268.5L736.6,266.9L737.9,265.2L739.0,265.4L739.5,266.3L740.1,266.2L741.3,265.1L742.3,264.8L742.8,263.6L743.4,263.4L743.8,262.4L744.6,261.1L746.1,259.1L747.1,258.8L747.0,257.2L747.6,256.6L746.7,255.7L747.3,254.7L747.1,253.6L747.7,253.1L747.3,252.0L748.1,252.1L747.8,251.1L748.1,250.6L747.8,248.3L748.2,247.6L748.0,246.5L748.5,245.5L748.6,244.3L749.1,243.8L749.2,242.5L748.7,240.7L748.8,239.3L748.0,237.8L747.2,237.0L747.5,236.0L748.4,235.9L749.4,235.2L752.7,255.6L760.2,254.3L770.3,252.6L772.1,264.1L772.7,263.9L774.3,261.5L775.0,261.4L775.4,260.0L777.1,258.6L777.6,257.0L778.3,256.9L780.1,257.3L780.6,256.1L782.3,252.7L783.1,252.8L782.4,253.2L783.3,253.4L783.5,253.8L784.8,254.3L785.8,254.1L786.3,254.3L788.0,254.1L788.7,253.2L788.1,252.3L788.9,252.2L788.1,251.7L789,251.8L789.4,251.0L790.6,251.2L792.0,249.2L793.5,249.3L794.7,250.1L795.3,250.7L796.4,250.2L797.5,250.4L798.3,250.2L798.4,250.9L797.5,251.3L798.5,252.5L799.8,253.1L799.8,253.7L800.4,253.8L800.8,254.6L800.7,255.9L801.4,256.0L801.0,257.0L800.4,260.5L794.9,257.5L790.3,254.8L790.2,256.0L790.6,256.5L790.4,257.3L790.9,257.4L789.9,259.7L790.3,259.9L789.8,261.1L790.5,261.6L789.8,263.0L789.4,263.2L788.2,265.2L788.7,265.4L788.0,266.7L787.5,266.4L786.9,267.9L786.3,268.4L786.2,267.7L785.1,269.3L784.3,272.0L781.8,270.5L781.5,271.9L780.7,273.7L780.9,275.0L780.4,275.1L780.0,276.3L779.6,279.1L778.2,281.2L775.2,280.7L773.8,278.8L771.7,278.2L771.3,280.7L771.7,281.9L771.1,283.2L770.1,285.1L770.6,285.8L769.9,286.4L768.6,288.2L768.4,289.3L768.9,289.8L768.5,290.5L768.3,291.7L767.8,292.7L766.9,293.9L765.4,296.2L764.4,298.6L764.7,299.2L764.1,300.1L764.4,300.9L765.6,301.3L765.0,302.2L764.0,303.0L764.0,303.7L764.8,303.6L764.7,304.2L761.9,306.6L761.1,305.4L760.4,305.7L759.3,306.8L757.0,308.6L756.7,308.1L755.3,307.6L755.0,308.6L755.7,309.4L754.6,310.5L753.6,310.7L751.4,311.6L749.6,312.9L747.7,311.7L746.9,311.0L746.4,311.4L746.1,312.6L744.7,313.1L744.7,313.7L743.9,314.4L741.8,314.9L740.5,314.1L740.4,313.7L739.6,313.3L738.5,313.4L737.9,312.5L736.9,312.0L736.5,310.3L735.5,310.0L735.4,309.4L736.4,308.6L735.6,308.1L734.8,308.3L733.0,308.0L732.7,307.3L732.2,307.4L731.6,306.7L731.1,306.8L730.5,306.1L729.5,306.0L728.4,303.5L727.7,303.3L726.7,302.2L726.7,301.5L725.7,301.3L725.1,300.6L725.6,299.5L724.6,299.2L723.9,297.7L723.1,297.0L722.1,296.4L722.0,295.6L722.5,295.6L722.5,294.5L722.2,294.1L722.8,293.4L722.7,292.3L722.1,291.7Z" }, + WY: { name: "Wyoming", d: "M363.4,153.0L363.2,155.8L360.2,190.8L360.3,191.0L359.7,197.6L355.9,242.5L342.9,241.3L342.5,241.3L328.0,239.9L319.9,239.1L315.9,238.5L296.4,236.3L287.3,235.1L272.9,233.2L264.8,232.1L256.3,230.9L253.2,230.5L245.3,229.3L239.8,228.4L241.1,219.9L241.9,215.7L243.3,206.0L245.4,193.1L246.0,190.0L249.3,169.3L249.3,168.8L250.9,158.9L251.6,153.9L252.1,151.2L252.5,147.9L253.3,142.5L253.8,139.6L258.0,140.2L259.2,140.6L264.0,141.3L264.6,141.2L267.2,141.7L268.6,141.8L273.4,142.5L284.3,144.0L284.9,144.2L297.3,145.9L315.1,148.1L315.9,148.2L324.0,149.2L334.0,150.3L335.3,150.3L342.7,151.1L356.9,152.4Z" }, +}; diff --git a/go/lexer/lexer.go b/go/lexer/lexer.go index 35c9ed5b..0f156667 100644 --- a/go/lexer/lexer.go +++ b/go/lexer/lexer.go @@ -20,7 +20,7 @@ // // The one thing tying it to a UI is the palette — the class names below are Tailwind's, so // whatever compiles your CSS has to scan THIS package too, or the colours will not exist. -// (In kjøl's own site that is cmd/kjol-web/build.Tailwind's source globs.) +// (In kjøl's own site that is cmd/kjol-website/build.Tailwind's source globs.) package lexer import ( diff --git a/go/webui/README.md b/go/webui/README.md index a7afce1d..c37c6255 100644 --- a/go/webui/README.md +++ b/go/webui/README.md @@ -12,7 +12,7 @@ ui.Alert(ui.AlertGreen, "Done", vdom.Text("Saved.")) ui.ToggleSwitch(on, func(v bool){ on = v }, "Notifications", "", false, "") ``` -See the runnable **`/wasm/kit`** demo page in `cmd/kjol-web` (Layers → Kjol Wasm Web). +See the runnable **`/wasm/kit`** demo page in `cmd/kjol-website` (Layers → Kjol Wasm Web). ## Conventions