73 lines
No EOL
74 KiB
HTML
73 lines
No EOL
74 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Fractal Echoes in Static — exploration</title>
|
|
<style>
|
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
body { background: #0a0a0f; color: #3a3a4a; font-family: ui-monospace, monospace; overflow: hidden; }
|
|
#grid { padding: 20px; font-size: 12px; line-height: 1.4; white-space: pre; }
|
|
.c { display: inline-block; transition: all 0.3s; }
|
|
.c.active { color: #fde68a; text-shadow: 0 0 6px rgba(253,230,138,0.5); }
|
|
.c.strong { color: #34d399; text-shadow: 0 0 10px rgba(52,211,153,0.6); font-weight: bold; }
|
|
.c.dead { color: #1a1a2a; }
|
|
#info { position: fixed; bottom: 10px; left: 20px; color: #3a3a4a; font-size: 11px; }
|
|
#controls { position: fixed; top: 10px; right: 20px; color: #666; font-size: 11px; }
|
|
#controls span { cursor: pointer; margin-left: 12px; color: #fde68a; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div id="grid"></div>
|
|
<div id="info">neurameba · physarum exploration</div>
|
|
<div id="controls"><span id="play-btn">play</span><span id="reset-btn">reset</span></div>
|
|
<script>
|
|
const text = "# API Reference\n\nmotd is API-first. Every feature is an endpoint. Build clients, bots, integrations — whatever you want.\n\n## Base URL\n\n```\nhttps://motd.social/api\n```\n\nLocal dev: `http://localhost:3006/api`\n\n## Response Format\n\nEvery endpoint returns the same envelope:\n\n**Success:**\n```json\n{ \"ok\": true, \"data\": { ... } }\n```\n\n**Error:**\n```json\n{ \"ok\": false, \"error\": \"Something went wrong.\" }\n```\n\nHTTP status codes are standard: 200 success, 400 bad request, 401 unauthorized, 404 not found, 409 conflict.\n\n## Authentication\n\nMost endpoints require authentication. Get a token by registering or logging in, then send it as a Bearer token or let the browser handle it via cookies.\n\n**Header auth (for scripts and clients):**\n```\nAuthorization: Bearer <token>\n```\n\n**Cookie auth (for the web client):**\nThe login endpoints set an `motd_session` httpOnly cookie automatically.\n\nSessions expire after 7 days. Use `/login-permanently` in the web client to persist across tabs (stored in localStorage instead of sessionStorage — the token is the same).\n\n---\n\n## Auth\n\n### POST /api/auth/register\n\nCreate a new account.\n\n**Auth:** none\n\n**Body:**\n```json\n{ \"username\": \"alice\", \"password\": \"hunter2pwd\" }\n```\n\n**Rules:**\n- Username: 3-20 characters, letters, numbers, underscore only\n- Password: minimum 8 characters\n\n**Response:**\n```json\n{\n \"ok\": true,\n \"data\": {\n \"token\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"user\": {\n \"username\": \"alice\",\n \"display_name\": \"alice\"\n }\n }\n}\n```\n\n**Errors:**\n- `400` — username or password missing, invalid format\n- `409` — username taken\n\n**Example:**\n```bash\ncurl -X POST http://localhost:3006/api/auth/register \\\n -H \"Content-Type: application/json\" \\\n -d '{\"username\":\"alice\",\"password\":\"hunter2pwd\"}'\n```\n\n### POST /api/auth/login\n\nLog in to an existing account.\n\n**Auth:** none\n\n**Body:**\n```json\n{ \"username\": \"alice\", \"password\": \"hunter2pwd\" }\n```\n\n**Response:**\n```json\n{\n \"ok\": true,\n \"data\": {\n \"token\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n \"user\": {\n \"username\": \"alice\",\n \"display_name\": \"Alice\"\n }\n }\n}\n```\n\n**Errors:**\n- `400` — missing fields\n- `401` — invalid username or password\n\n**Example:**\n```bash\ncurl -X POST http://localhost:3006/api/auth/login \\\n -H \"Content-Type: application/json\" \\\n -d '{\"username\":\"alice\",\"password\":\"hunter2pwd\"}'\n```\n\n### GET /api/auth/me\n\nGet the current authenticated user.\n\n**Auth:** required\n\n**Response:**\n```json\n{\n \"ok\": true,\n \"data\": {\n \"user\": {\n \"username\": \"alice\",\n \"display_name\": \"Alice\",\n \"bio\": \"building things\",\n \"created_at\": \"2026-03-15T10:30:00.000Z\"\n }\n }\n}\n```\n\n**Example:**\n```bash\ncurl http://localhost:3006/api/auth/me \\\n -H \"Authorization: Bearer YOUR_TOKEN\"\n```\n\n### POST /api/auth/logout\n\nEnd the current session.\n\n**Auth:** required\n\n**Response:**\n```json\n{ \"ok\": true, \"data\": { \"message\": \"Logged out.\" } }\n```\n\n**Example:**\n```bash\ncurl -X POST http://localhost:3006/api/auth/logout \\\n -H \"Authorization: Bearer YOUR_TOKEN\"\n```\n\n---\n\n## Profile\n\n### GET /api/profile/:username\n\nView a user's profile.\n\n**Auth:** none\n\n**Response:**\n```json\n{\n \"ok\": true,\n \"data\": {\n \"username\": \"alice\",\n \"display_name\": \"Alice\",\n \"bio\": \"building things\",\n \"created_at\": \"2026-03-15T10:30:00.000Z\",\n \"posts\": 42,\n \"avatar\": [\n \"████ ████\",\n \" ████████ \",\n \"████████████\",\n \" ████████ \",\n \"██ ████ ██\"\n ]\n }\n}\n```\n\n**Errors:**\n- `404` — user not found\n\n**Example:**\n```bash\ncurl http://localhost:3006/api/profile/alice\n```\n\n### PUT /api/profile\n\nUpdate your display name and/or bio.\n\n**Auth:** required\n\n**Body:**\n```json\n{ \"display_name\": \"Alice W.\", \"bio\": \"shipping code\" }\n```\n\nBoth fields are optional. Send only what you want to change.\n\n**Response:**\n```json\n{\n \"ok\": true,\n \"data\": {\n \"username\": \"alice\",\n \"display_name\": \"Alice W.\",\n \"bio\": \"shipping code\",\n \"created_at\": \"2026-03-15T10:30:00.000Z\"\n }\n}\n```\n\n**Errors:**\n- `400` — nothing to update\n\n**Example:**\n```bash\ncurl -X PUT http://localhost:3006/api/profile \\\n -H \"Authorization: Bearer YOUR_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"bio\":\"shipping code\"}'\n```\n\n### GET /api/profile/search?q=\n\nSearch users by username or display name.\n\n**Auth:** none\n\n**Params:**\n- `q` — search query (required, min 1 character)\n\n**Response:**\n```json\n{\n \"ok\": true,\n \"data\": {\n \"users\": [\n { \"username\": \"alice\", \"display_name\": \"Alice\", \"bio\": \"building things\" },\n { \"username\": \"alice2\", \"display_name\": \"Alice Too\", \"bio\": null }\n ]\n }\n}\n```\n\n**Example:**\n```bash\ncurl \"http://localhost:3006/api/profile/search?q=alice\"\n```\n\n---\n\n## Posts\n\n### POST /api/posts\n\nPublish a post.\n\n**Auth:** required\n\n**Body:**\n```json\n{ \"content\": \"just shipped the wasm compiler [rust] [wasm]\" }\n```\n\n**Optional fields:**\n- `reply_to` — post ID to reply to\n\n**Inline commands:**\n- `/attach <media_id>` — attach previously uploaded media to the post. The `/attach` command is stripped from the displayed content.\n\n**Rules:**\n- Content: 1-500 characters\n- Tags use [brackets]: `[rust]`, `[music]`, `[coding]`\n- Tags are auto-extracted and stored\n- New tags are auto-assigned to the \"general\" category\n\n**Response:**\n```json\n{\n \"ok\": true,\n \"data\": {\n \"id\": \"a3kf9x\",\n \"content\": \"just shipped the wasm compiler [rust] [wasm]\",\n \"reply_to\": null,\n \"tags\": [\"rust\", \"wasm\"],\n \"media_id\": null,\n \"username\": \"alice\",\n \"display_name\": \"Alice\",\n \"created_at\": \"2026-03-22T14:00:00.000Z\"\n }\n}\n```\n\n**Errors:**\n- `400` — empty content, too long, media not found/not yours\n- `404` — reply_to post not found\n\n**Examples:**\n\nSimple post:\n```bash\ncurl -X POST http://localhost:3006/api/posts \\\n -H \"Authorization: Bearer YOUR_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"content\":\"just shipped the wasm compiler [rust] [wasm]\"}'\n```\n\nReply to a post:\n```bash\ncurl -X POST http://localhost:3006/api/posts \\\n -H \"Authorization: Bearer YOUR_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"content\":\"nice work!\",\"reply_to\":\"a3kf9x\"}'\n```\n\nPost with media attachment:\n```bash\ncurl -X POST http://localhost:3006/api/posts \\\n -H \"Authorization: Bearer YOUR_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"content\":\"screenshot of the new UI /attach x7km2p [showcase]\"}'\n```\n\n### GET /api/posts/feed\n\nGet the chronological feed. Public — works without auth. Authenticated users get kill-filtered results; guests get unfiltered posts (still subject to system-level filter_score suppression).\n\n**Auth:** optional\n\n**Params:**\n- `limit` — max posts to return (default 50, max 100)\n- `offset` — pagination offset (default 0)\n\n**Response:**\n```json\n{\n \"ok\": true,\n \"data\": {\n \"posts\": [\n {\n \"id\": \"a3kf9x\",\n \"content\": \"just shipped the wasm compiler [rust] [wasm]\",\n \"reply_to\": null,\n \"tags\": [\"rust\", \"wasm\"],\n \"media_id\": null,\n \"username\": \"alice\",\n \"display_name\": \"Alice\",\n \"created_at\": \"2026-03-22T14:00:00.000Z\"\n }\n ]\n }\n}\n```\n\n**Examples:**\n```bash\n# Guest (unfiltered)\ncurl \"http://localhost:3006/api/posts/feed?limit=20\"\n\n# Authenticated (kill-filtered)\ncurl \"http://localhost:3006/api/posts/feed?limit=20\" \\\n -H \"Authorization: Bearer YOUR_TOKEN\"\n```\n\n### GET /api/posts/:id\n\nGet a single post by ID.\n\n**Auth:** none\n\n**Response:**\n```json\n{\n \"ok\": true,\n \"data\": {\n \"id\": \"a3kf9x\",\n \"content\": \"just shipped the wasm compiler [rust] [wasm]\",\n \"reply_to\": null,\n \"tags\": [\"rust\", \"wasm\"],\n \"media_id\": null,\n \"username\": \"alice\",\n \"display_name\": \"Alice\",\n \"created_at\": \"2026-03-22T14:00:00.000Z\"\n }\n}\n```\n\n**Example:**\n```bash\ncurl http://localhost:3006/api/posts/a3kf9x\n```\n\n### GET /api/posts/:id/thread\n\nGet a post and all its replies.\n\n**Auth:** none\n\n**Response:**\n```json\n{\n \"ok\": true,\n \"data\": {\n \"post\": {\n \"id\": \"a3kf9x\",\n \"content\": \"just shipped the wasm compiler [rust] [wasm]\",\n \"reply_to\": null,\n \"tags\": [\"rust\", \"wasm\"],\n \"username\": \"alice\",\n \"display_name\": \"Alice\",\n \"created_at\": \"2026-03-22T14:00:00.000Z\"\n },\n \"replies\": [\n {\n \"id\": \"b7xm2k\",\n \"content\": \"nice work!\",\n \"reply_to\": \"a3kf9x\",\n \"tags\": [],\n \"username\": \"bob\",\n \"display_name\": \"Bob\",\n \"created_at\": \"2026-03-22T14:05:00.000Z\"\n }\n ]\n }\n}\n```\n\n**Example:**\n```bash\ncurl http://localhost:3006/api/posts/a3kf9x/thread\n```\n\n### GET /api/posts/search\n\nSearch posts by content. Searches active posts by default, or archived posts with the `archive` flag.\n\n**Auth:** none\n\n**Params:**\n- `q` — search query (required)\n- `archive` — set to `true` to search archived posts instead\n\n**Response (active):**\n```json\n{\n \"ok\": true,\n \"data\": {\n \"posts\": [\n {\n \"id\": \"a3kf9x\",\n \"content\": \"just shipped the wasm compiler [rust] [wasm]\",\n \"tags\": [\"rust\", \"wasm\"],\n \"media_id\": null,\n \"username\": \"alice\",\n \"display_name\": \"Alice\",\n \"created_at\": \"2026-03-22T14:00:00.000Z\",\n \"archived\": false\n }\n ]\n }\n}\n```\n\n**Response (archive):**\n```json\n{\n \"ok\": true,\n \"data\": {\n \"posts\": [\n {\n \"id\": \"b7xm2k\",\n \"content\": \"old post about [rust]\",\n \"tags\": [\"rust\"],\n \"username\": \"alice\",\n \"display_name\": \"Alice\",\n \"created_at\": \"2025-12-01T08:00:00.000Z\",\n \"archived\": true\n }\n ]\n }\n}\n```\n\n**Examples:**\n```bash\n# Search active posts\ncurl \"http://localhost:3006/api/posts/search?q=rust\"\n\n# Search archived posts\ncurl \"http://localhost:3006/api/posts/search?q=rust&archive=true\"\n```\n\n---\n\n## Filter (Kill)\n\nThe `/kill` command maps to the filter API. The word \"kill\" never appears in the database or API.\n\n### POST /api/filter\n\nAdd a filter. Hides a user or post from your feed.\n\n**Auth:** required\n\n**Body:**\n```json\n{ \"target_type\": \"user\", \"target_id\": \"bob\" }\n```\n\n- `target_type` — `\"user\"` or `\"post\"`\n- `target_id` — username (for users) or post ID (for posts)\n\nFiltering a user also increments their hidden `filter_score`. Users filtered by enough people get suppressed from everyone's feed silently (threshold: ~5 active filters, with 7-day half-life decay).\n\n**Response:**\n```json\n{ \"ok\": true, \"data\": { \"message\": \"Filtered.\" } }\n```\n\n**Errors:**\n- `400` — missing fields, invalid type, can't filter yourself\n- `404` — user not found\n\n**Example:**\n```bash\ncurl -X POST http://localhost:3006/api/filter \\\n -H \"Authorization: Bearer YOUR_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"target_type\":\"user\",\"target_id\":\"spammer\"}'\n```\n\n### GET /api/filter\n\nGet your current filter list.\n\n**Auth:** required\n\n**Response:**\n```json\n{\n \"ok\": true,\n \"data\": {\n \"filters\": [\n { \"type\": \"user\", \"id\": \"uuid-of-filtered-user\" },\n { \"type\": \"post\", \"id\": \"b7xm2k\" }\n ]\n }\n}\n```\n\n**Example:**\n```bash\ncurl http://localhost:3006/api/filter \\\n -H \"Authorization: Bearer YOUR_TOKEN\"\n```\n\n---\n\n## Media\n\nSupported formats: PNG (max 5MB), MP3 (max 10MB), MP4 (max 25MB).\n\nPNG uploads are processed into multiple variants: original (downscaled to max 1MB), thumbnail (80px wide), large (800px wide), and ASCII art.\n\n### POST /api/media/upload\n\nUpload a file.\n\n**Auth:** required\n\n**Body:** multipart/form-data with `file` field\n\n**Response:**\n```json\n{\n \"ok\": true,\n \"data\": {\n \"media_id\": \"x7km2p\",\n \"type\": \"png\"\n }\n}\n```\n\n**Errors:**\n- `400` — no file, unsupported type, file too large\n\n**Example:**\n```bash\ncurl -X POST http://localhost:3006/api/media/upload \\\n -H \"Authorization: Bearer YOUR_TOKEN\" \\\n -F \"file=@screenshot.png\"\n```\n\n### GET /api/media/:id\n\nServe the original file.\n\n**Auth:** none\n\n**Response:** raw file with appropriate Content-Type header (`image/png`, `audio/mpeg`, `video/mp4`)\n\n**Example:**\n```bash\ncurl http://localhost:3006/api/media/x7km2p -o image.png\n```\n\n### GET /api/media/:id/thumb\n\nServe the thumbnail (PNG only, max 80px wide).\n\n**Auth:** none\n\n**Example:**\n```bash\ncurl http://localhost:3006/api/media/x7km2p/thumb -o thumb.png\n```\n\n### GET /api/media/:id/large\n\nServe the large version (PNG only, max 800px wide).\n\n**Auth:** none\n\n**Example:**\n```bash\ncurl http://localhost:3006/api/media/x7km2p/large -o large.png\n```\n\n### GET /api/media/:id/ascii\n\nGet the ASCII art representation (PNG only).\n\n**Auth:** none\n\n**Response:**\n```json\n{\n \"ok\": true,\n \"data\": {\n \"ascii\": \" @@@@ \\n @ @ \\n @ @ \\n @@@@ \\n\"\n }\n}\n```\n\n**Example:**\n```bash\ncurl http://localhost:3006/api/media/x7km2p/ascii\n```\n\n---\n\n## Avatar\n\n### POST /api/avatar\n\nUpload a profile picture. PNG only, max 5MB. Processes into thumb, large, and ASCII art versions. Sets as your avatar immediately.\n\n**Auth:** required\n\n**Body:** multipart/form-data with `file` field\n\n**Response:**\n```json\n{ \"ok\": true, \"data\": { \"avatar_id\": \"x7km2p\" } }\n```\n\n**Example:**\n```bash\ncurl -X POST http://localhost:3006/api/avatar \\\n -H \"Authorization: Bearer YOUR_TOKEN\" \\\n -F \"file=@photo.png\"\n```\n\n### GET /api/avatar/:username\n\nGet a user's avatar image (large version, 800px max).\n\n**Auth:** none\n\n**Response:** raw PNG with `Content-Type: image/png`\n\n**Example:**\n```bash\ncurl http://localhost:3006/api/avatar/alice -o avatar.png\n```\n\nReturns 404 if the user has no uploaded avatar.\n\n---\n\n## Bookmarks\n\nBookmarks are private. Nobody sees your bookmarks. No counts, no notifications. One concept for everything: users, tags, posts, docs.\n\n### POST /api/bookmarks\n\nAdd a bookmark.\n\n**Auth:** required\n\n**Body:**\n```json\n{ \"target_type\": \"user\", \"target_id\": \"alice\" }\n```\n\n- `target_type` — `\"user\"`, `\"tag\"`, `\"post\"`, or `\"doc\"`\n- `target_id` — username, tag name, post ID, or doc name\n\nBookmarking the same thing twice is a no-op, not an error.\n\n**Response:**\n```json\n{ \"ok\": true, \"data\": { \"message\": \"Bookmarked.\" } }\n```\n\n**Errors:**\n- `400` — missing fields, invalid type\n\n**Example:**\n```bash\n# Bookmark a user\ncurl -X POST http://localhost:3006/api/bookmarks \\\n -H \"Authorization: Bearer YOUR_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"target_type\":\"user\",\"target_id\":\"alice\"}'\n\n# Bookmark a tag\ncurl -X POST http://localhost:3006/api/bookmarks \\\n -H \"Authorization: Bearer YOUR_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"target_type\":\"tag\",\"target_id\":\"rust\"}'\n\n# Bookmark a post\ncurl -X POST http://localhost:3006/api/bookmarks \\\n -H \"Authorization: Bearer YOUR_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"target_type\":\"post\",\"target_id\":\"a3kf9x\"}'\n\n# Bookmark a doc\ncurl -X POST http://localhost:3006/api/bookmarks \\\n -H \"Authorization: Bearer YOUR_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"target_type\":\"doc\",\"target_id\":\"api\"}'\n```\n\n### DELETE /api/bookmarks\n\nRemove a bookmark.\n\n**Auth:** required\n\n**Body:**\n```json\n{ \"target_type\": \"user\", \"target_id\": \"alice\" }\n```\n\n**Response:**\n```json\n{ \"ok\": true, \"data\": { \"message\": \"Unbookmarked.\" } }\n```\n\n**Example:**\n```bash\ncurl -X DELETE http://localhost:3006/api/bookmarks \\\n -H \"Authorization: Bearer YOUR_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"target_type\":\"user\",\"target_id\":\"alice\"}'\n```\n\n### GET /api/bookmarks\n\nList your bookmarks. Optionally filter by type.\n\n**Auth:** required\n\n**Params:**\n- `type` — optional: `user`, `tag`, `post`, or `doc`\n\n**Response:**\n```json\n{\n \"ok\": true,\n \"data\": {\n \"bookmarks\": [\n { \"type\": \"user\", \"id\": \"alice\" },\n { \"type\": \"tag\", \"id\": \"rust\" },\n {\n \"type\": \"post\",\n \"id\": \"a3kf9x\",\n \"preview\": \"just shipped the wasm compiler...\",\n \"username\": \"alice\"\n },\n {\n \"type\": \"post\",\n \"id\": \"old123\",\n \"preview\": \"this was archived...\",\n \"archived\": true\n },\n {\n \"type\": \"post\",\n \"id\": \"gone99\",\n \"expired\": true\n },\n { \"type\": \"doc\", \"id\": \"api\" }\n ]\n }\n}\n```\n\nPost bookmarks are enriched with a content preview (60 chars), the author's username, and status flags (`archived`, `expired`) when applicable.\n\n**Examples:**\n```bash\n# All bookmarks\ncurl http://localhost:3006/api/bookmarks \\\n -H \"Authorization: Bearer YOUR_TOKEN\"\n\n# Only bookmarked tags\ncurl \"http://localhost:3006/api/bookmarks?type=tag\" \\\n -H \"Authorization: Bearer YOUR_TOKEN\"\n```\n\n---\n\n## Docs\n\n### GET /api/docs\n\nList all available documentation files.\n\n**Auth:** none\n\n**Response:**\n```json\n{\n \"ok\": true,\n \"data\": {\n \"docs\": [\n { \"name\": \"about\", \"path\": \"docs/about.md\" },\n { \"name\": \"api\", \"path\": \"docs/api.md\" },\n { \"name\": \"commands\", \"path\": \"docs/commands.md\" },\n { \"name\": \"changelog\", \"path\": \"docs/changelog.md\" }\n ]\n }\n}\n```\n\n**Example:**\n```bash\ncurl http://localhost:3006/api/docs\n```\n\n### GET /api/docs/:name\n\nGet the contents of a specific document. The `.md` extension is optional.\n\n**Auth:** none\n\n**Response:**\n```json\n{\n \"ok\": true,\n \"data\": {\n \"name\": \"api\",\n \"content\": \"# API Reference\\n\\n...\"\n }\n}\n```\n\n**Errors:**\n- `400` — path traversal attempt\n- `404` — document not found\n\n**Example:**\n```bash\ncurl http://localhost:3006/api/docs/api\n```\n\n---\n\n## Categories\n\n### GET /api/categories\n\nGet the category tree with tags. Used by `/tree -cat` in the client.\n\n**Auth:** none\n\n**Response:**\n```json\n{\n \"ok\": true,\n \"data\": {\n \"categories\": [\n {\n \"id\": \"coding\",\n \"name\": \"coding\",\n \"tags\": [\"rust\", \"python\", \"wasm\", \"js\", \"frontend\", \"backend\"]\n },\n {\n \"id\": \"creative\",\n \"name\": \"creative\",\n \"tags\": [\"music\", \"art\", \"writing\", \"gamedev\"]\n },\n {\n \"id\": \"meta\",\n \"name\": \"meta\",\n \"tags\": [\"motd\", \"bugs\", \"ideas\", \"feedback\"]\n },\n {\n \"id\": \"general\",\n \"name\": \"general\",\n \"tags\": [\"offtopic\", \"introductions\", \"showcase\"]\n }\n ]\n }\n}\n```\n\n**Example:**\n```bash\ncurl http://localhost:3006/api/categories\n```\n\n---\n\n## Commands\n\n### GET /api/commands\n\nGet the full command list grouped by category. Used by `/help` and `/menu` in the client.\n\n**Auth:** none\n\n**Response:**\n```json\n{\n \"ok\": true,\n \"data\": {\n \"categories\": [\n {\n \"name\": \"General\",\n \"commands\": [\n { \"command\": \"/help\", \"description\": \"Show all available commands\" },\n { \"command\": \"/menu\", \"description\": \"Toggle the command menu\" },\n { \"command\": \"/clear\", \"description\": \"Clear the terminal\" },\n { \"command\": \"/read [path]\", \"description\": \"Read a document\" },\n { \"command\": \"/tree -cat\", \"description\": \"Browse categories and tags\" },\n { \"command\": \"/link [target]\", \"description\": \"Navigate to user, tag, post, or doc\" }\n ]\n }\n ]\n }\n}\n```\n\n**Example:**\n```bash\ncurl http://localhost:3006/api/commands\n```\n\n---\n\n## Telegram Connect\n\n### POST /api/connect/telegram\n\nGenerate a Telegram deep link to connect your account.\n\n**Auth:** required\n\n**Response:**\n```json\n{\n \"ok\": true,\n \"data\": {\n \"link\": \"https://t.me/motdsocial_bot?start=alice_a8f3k2\",\n \"expires_in\": 600\n }\n}\n```\n\nIf already connected:\n```json\n{\n \"ok\": true,\n \"data\": {\n \"already_connected\": true,\n \"message\": \"Telegram already connected.\"\n }\n}\n```\n\n**Example:**\n```bash\ncurl -X POST http://localhost:3006/api/connect/telegram \\\n -H \"Authorization: Bearer YOUR_TOKEN\"\n```\n\n### DELETE /api/connect/telegram\n\nDisconnect your Telegram account.\n\n**Auth:** required\n\n**Response:**\n```json\n{ \"ok\": true, \"data\": { \"message\": \"Telegram disconnected.\" } }\n```\n\n**Example:**\n```bash\ncurl -X DELETE http://localhost:3006/api/connect/telegram \\\n -H \"Authorization: Bearer YOUR_TOKEN\"\n```\n\n### POST /api/connect/email\n\nSend a verification email to connect your email address.\n\n**Auth:** required\n\n**Body:**\n```json\n{ \"email\": \"you@gmail.com\" }\n```\n\n**Response:**\n```json\n{\n \"ok\": true,\n \"data\": {\n \"message\": \"Verification email sent to you@gmail.com\",\n \"tip\": \"Tip: add noreply@motd.social to your contacts so notifications don't go to spam.\"\n }\n}\n```\n\n**Example:**\n```bash\ncurl -X POST http://localhost:3006/api/connect/email \\\n -H \"Authorization: Bearer YOUR_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"email\":\"you@gmail.com\"}'\n```\n\n### GET /api/connect/email/verify\n\nVerify email address from link in verification email.\n\n**Auth:** none (link from email)\n\n**Params:**\n- `code` — verification code from the email link\n\nReturns an HTML confirmation page on success.\n\n### DELETE /api/connect/email\n\nDisconnect your email address.\n\n**Auth:** required\n\n**Response:**\n```json\n{ \"ok\": true, \"data\": { \"message\": \"Email disconnected.\" } }\n```\n\n**Example:**\n```bash\ncurl -X DELETE http://localhost:3006/api/connect/email \\\n -H \"Authorization: Bearer YOUR_TOKEN\"\n```\n\n### GET /api/connect/status\n\nCheck your Telegram and email connection status and notification settings.\n\n**Auth:** required\n\n**Response:**\n```json\n{\n \"ok\": true,\n \"data\": {\n \"telegram\": {\n \"connected\": true,\n \"username\": \"alice_tg\",\n \"notify\": true,\n \"notify_bookmarks\": true,\n \"notify_mentions\": true\n },\n \"email\": {\n \"connected\": true,\n \"address\": \"alice@gmail.com\",\n \"notify\": true,\n \"notify_bookmarks\": true,\n \"notify_mentions\": true\n }\n }\n}\n```\n\n**Example:**\n```bash\ncurl http://localhost:3006/api/connect/status \\\n -H \"Authorization: Bearer YOUR_TOKEN\"\n```\n\n---\n\n## Account\n\n### DELETE /api/account\n\nPermanently delete your account. This is irreversible. Deletes all posts, media, sessions, and user data.\n\n**Auth:** required\n\n**Body:**\n```json\n{ \"confirm_username\": \"alice\" }\n```\n\nThe `confirm_username` must match your actual username.\n\n**Response:**\n```json\n{ \"ok\": true, \"data\": { \"message\": \"Account terminated.\" } }\n```\n\n**Errors:**\n- `400` — username confirmation doesn't match\n\n**Example:**\n```bash\ncurl -X DELETE http://localhost:3006/api/account \\\n -H \"Authorization: Bearer YOUR_TOKEN\" \\\n -H \"Content-Type: application/json\" \\\n -d '{\"confirm_username\":\"alice\"}'\n```\n";
|
|
const passes = [{"t":0,"r":933,"c":2,"a":"hold","s":0.27307224282285397,"ps":9,"e":100.83457794258283,"pr":1.1},{"t":0,"r":1068,"c":36,"a":"extend","s":0.42489483628409375,"ps":9,"e":71.43441108319092,"pr":1.1},{"t":0,"r":167,"c":0,"a":"died","s":0,"ps":8,"e":100,"pr":1},{"t":0,"r":796,"c":15,"a":"extend","s":0.40350916601270975,"ps":9,"e":71.31465132967116,"pr":1.1},{"t":1,"r":933,"c":2,"a":"hold","s":0.21540023470379768,"ps":9,"e":101.2077798202132,"pr":1.1},{"t":1,"r":1068,"c":36,"a":"extend","s":0.42260577188165505,"ps":8,"e":51.53068008077091,"pr":1.05},{"t":1,"r":796,"c":15,"a":"extend","s":0.37812478222419654,"ps":9,"e":51.09275471122532,"pr":1.1},{"t":1,"r":1068,"c":35,"a":"hold","s":0.08969697081155399,"ps":5,"e":30.582323373574255,"pr":1.2000000000000002},{"t":1,"r":796,"c":14,"a":"hold","s":0.14998290719198637,"ps":5,"e":31.013285255966395,"pr":1.2000000000000002},{"t":2,"r":933,"c":2,"a":"retracted","s":0.21540023470379768,"ps":8,"e":101.73098169784359,"pr":1.05},{"t":2,"r":1068,"c":36,"a":"extend","s":0.42489483628409375,"ps":7,"e":37.71588713973056,"pr":1},{"t":2,"r":796,"c":15,"a":"extend","s":0.37812478222419654,"ps":8,"e":37.042427078313224,"pr":1.05},{"t":2,"r":1068,"c":35,"a":"hold","s":0.14108054763289932,"ps":5,"e":30.960967754637448,"pr":1.2000000000000002},{"t":2,"r":796,"c":14,"a":"hold","s":0.14407649092049987,"ps":5,"e":31.415897183330394,"pr":1.2000000000000002},{"t":3,"r":1068,"c":36,"a":"extend","s":0.401124774909063,"ps":7,"e":27.912419737302145,"pr":1},{"t":3,"r":796,"c":15,"a":"extend","s":0.40350916601270975,"ps":8,"e":27.34935028449043,"pr":1.05},{"t":3,"r":1068,"c":35,"a":"retracted","s":0.14108054763289932,"ps":4,"e":31.489612135700643,"pr":1.1500000000000001},{"t":3,"r":796,"c":14,"a":"retracted","s":0.14407649092049987,"ps":4,"e":31.96850911069439,"pr":1.1500000000000001},{"t":3,"r":1068,"c":37,"a":"hold","s":0.20861195234489618,"ps":5,"e":17.082847250072266,"pr":1.1},{"t":3,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":5,"e":13.084042178197057,"pr":1.1500000000000001},{"t":4,"r":1068,"c":36,"a":"extend","s":0.401124774909063,"ps":6,"e":21.154992555602252,"pr":0.95},{"t":4,"r":796,"c":15,"a":"extend","s":0.40350916601270975,"ps":7,"e":20.669196528814474,"pr":1},{"t":4,"r":1068,"c":37,"a":"hold","s":0.17255884564995277,"ps":4,"e":17.86331801527189,"pr":1.05},{"t":4,"r":796,"c":16,"a":"extend","s":0.45468046226452974,"ps":4,"e":11.285040113419305,"pr":1.1},{"t":5,"r":1068,"c":36,"a":"hold","s":0.3474974071802458,"ps":6,"e":23.03497181304422,"pr":0.95},{"t":5,"r":796,"c":15,"a":"hold","s":0.36541594356864415,"ps":6,"e":22.69252407736363,"pr":0.95},{"t":5,"r":1068,"c":37,"a":"retracted","s":0.20861195234489618,"ps":4,"e":18.932213634031058,"pr":1},{"t":5,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":9.975842134096604,"pr":1.05},{"t":5,"r":1068,"c":35,"a":"hold","s":0.22214342053018796,"ps":5,"e":10.093572745213898,"pr":1.05},{"t":5,"r":796,"c":14,"a":"hold","s":0.22423568743898642,"ps":5,"e":9.902112583289524,"pr":1.1},{"t":5,"r":796,"c":17,"a":"hold","s":0.2840584095293159,"ps":5,"e":6.358913039128515,"pr":1.2000000000000002},{"t":6,"r":1068,"c":36,"a":"hold","s":0.3474974071802458,"ps":5,"e":25.064951070486185,"pr":0.8999999999999999},{"t":6,"r":796,"c":15,"a":"hold","s":0.3629148786092987,"ps":5,"e":24.845843106238018,"pr":0.8999999999999999},{"t":6,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":9.059403548570714,"pr":1},{"t":6,"r":1068,"c":35,"a":"hold","s":0.241389291990226,"ps":5,"e":11.274687081135706,"pr":1.05},{"t":6,"r":796,"c":14,"a":"hold","s":0.23511271538329356,"ps":5,"e":11.033014306355872,"pr":1.1},{"t":6,"r":796,"c":17,"a":"hold","s":0.34131935996170415,"ps":5,"e":8.339467918822148,"pr":1.2000000000000002},{"t":7,"r":1068,"c":36,"a":"retracted","s":0.3205297295326896,"ps":5,"e":26.8791889067477,"pr":0.8999999999999999},{"t":7,"r":796,"c":15,"a":"retracted","s":0.3115135254186566,"ps":5,"e":26.58795130958727,"pr":0.8999999999999999},{"t":7,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":8.41789653870259,"pr":0.95},{"t":7,"r":1068,"c":35,"a":"retracted","s":0.241389291990226,"ps":4,"e":12.605801417057513,"pr":1},{"t":7,"r":796,"c":14,"a":"retracted","s":0.23511271538329356,"ps":4,"e":12.31391602942222,"pr":1.05},{"t":7,"r":796,"c":17,"a":"retracted","s":0.34131935996170415,"ps":4,"e":10.470022798515782,"pr":1.1500000000000001},{"t":8,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":7.968841631794905,"pr":0.8999999999999999},{"t":9,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":7.654503196959524,"pr":0.8499999999999999},{"t":9,"r":796,"c":17,"a":"hold","s":0.17925696299022936,"ps":5,"e":4.099273546119651,"pr":0.9999999999999999},{"t":10,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":7.434466292574759,"pr":0.7999999999999998},{"t":10,"r":796,"c":17,"a":"hold","s":0.3080088919082424,"ps":6,"e":5.66334468138559,"pr":1.0999999999999999},{"t":12,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":7.172622376356887,"pr":0.6999999999999997},{"t":12,"r":796,"c":18,"a":"hold","s":0.2386326750664236,"ps":5,"e":3.463049249529815,"pr":1.2},{"t":14,"r":796,"c":17,"a":"extend","s":0.3080088919082424,"ps":4,"e":4.7318518077544836,"pr":0.9999999999999998},{"t":14,"r":796,"c":18,"a":"extend","s":0.29697802577556737,"ps":4,"e":3.73662493765301,"pr":1.15},{"t":16,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.981450133126219,"pr":0.4999999999999996},{"t":17,"r":796,"c":18,"a":"extend","s":0.2386326750664236,"ps":4,"e":3.2884534806296015,"pr":1.0499999999999998},{"t":18,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.950644458227102,"pr":0.39999999999999963},{"t":19,"r":796,"c":18,"a":"hold","s":0.2386326750664236,"ps":4,"e":4.527321817344081,"pr":0.9499999999999997},{"t":19,"r":796,"c":15,"a":"retracted","s":0.1657317104347497,"ps":4,"e":5.425293350820128,"pr":0.4999999999999995},{"t":23,"r":796,"c":15,"a":"retracted","s":0.29815174841018427,"ps":4,"e":7.5933907791595034,"pr":0.35000000000000003},{"t":23,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":5,"e":4.259846954589695,"pr":0.4},{"t":25,"r":796,"c":15,"a":"hold","s":0.17159931367127568,"ps":5,"e":3.590449785714656,"pr":0.4},{"t":26,"r":796,"c":18,"a":"retracted","s":0.12627012599603232,"ps":4,"e":3.1186142532649406,"pr":0.45},{"t":28,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.032725004123919,"pr":0.3},{"t":30,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921456518019937,"pr":0.3},{"t":30,"r":796,"c":18,"a":"retracted","s":0.2714565123814484,"ps":4,"e":7.9387405008833944,"pr":0.35000000000000003},{"t":35,"r":796,"c":15,"a":"extend","s":0.3296042448673666,"ps":5,"e":3.7025006756172285,"pr":0.45},{"t":36,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.92109504615962,"pr":0.3},{"t":36,"r":796,"c":19,"a":"extend","s":0.4914299279521771,"ps":5,"e":4.424819885057457,"pr":0.5},{"t":37,"r":796,"c":19,"a":"extend","s":0.4914299279521771,"ps":4,"e":5.429381516072412,"pr":0.45},{"t":38,"r":796,"c":18,"a":"extend","s":0.2748095834448852,"ps":5,"e":3.1907876454877044,"pr":0.5},{"t":38,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":6.064102022374406,"pr":0.45},{"t":39,"r":796,"c":18,"a":"extend","s":0.381013438953633,"ps":5,"e":3.8422266099817377,"pr":0.5},{"t":41,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921054949505191,"pr":0.3},{"t":42,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921052519356726,"pr":0.3},{"t":42,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.1895249520984725,"pr":0.3},{"t":42,"r":796,"c":14,"a":"extend","s":0.32455404608562116,"ps":5,"e":2.4884301811925593,"pr":0.4},{"t":43,"r":796,"c":20,"a":"extend","s":0.355896221084044,"ps":4,"e":4.282451378775737,"pr":0.45},{"t":43,"r":796,"c":14,"a":"hold","s":0.331077316287882,"ps":5,"e":4.387048711495615,"pr":0.4},{"t":44,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921049627480051,"pr":0.3},{"t":44,"r":796,"c":15,"a":"retracted","s":0.2942008243787694,"ps":4,"e":9.247244862134067,"pr":0.3},{"t":44,"r":796,"c":21,"a":"extend","s":0.3864614696457253,"ps":4,"e":4.729667677422444,"pr":0.44999999999999996},{"t":45,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.61996732343643,"pr":0.3},{"t":45,"r":796,"c":21,"a":"extend","s":0.3864614696457253,"ps":4,"e":5.054951604211772,"pr":0.39999999999999997},{"t":46,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921048210460481,"pr":0.3},{"t":46,"r":796,"c":20,"a":"retracted","s":0.355896221084044,"ps":4,"e":11.023960684792792,"pr":0.30000000000000004},{"t":47,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.48535225939137,"pr":0.3},{"t":48,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.9210475161208915,"pr":0.3},{"t":48,"r":796,"c":21,"a":"retracted","s":0.3864614696457253,"ps":4,"e":12.53002687570918,"pr":0.3},{"t":48,"r":796,"c":18,"a":"extend","s":0.39937170035926006,"ps":4,"e":6.676347848006375,"pr":0.35000000000000003},{"t":48,"r":796,"c":15,"a":"hold","s":0.33450213126931666,"ps":4,"e":6.688160087207971,"pr":0.35000000000000003},{"t":49,"r":796,"c":15,"a":"retracted","s":0.2994974397855826,"ps":4,"e":8.484139605492633,"pr":0.30000000000000004},{"t":52,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.535071954928089,"pr":0.3},{"t":52,"r":796,"c":15,"a":"extend","s":0.35938642050950714,"ps":5,"e":4.370225396743983,"pr":0.4},{"t":53,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046961131581,"pr":0.3},{"t":53,"r":796,"c":20,"a":"hold","s":0.25923599861119545,"ps":4,"e":6.016819887946358,"pr":0.35000000000000003},{"t":54,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.9210469274951985,"pr":0.3},{"t":55,"r":796,"c":15,"a":"extend","s":0.237740587343285,"ps":4,"e":5.078899791046611,"pr":0.30000000000000004},{"t":59,"r":796,"c":18,"a":"extend","s":0.3819163703100806,"ps":4,"e":5.062674157572384,"pr":0.4},{"t":60,"r":796,"c":15,"a":"extend","s":0.237740587343285,"ps":4,"e":3.38086785534652,"pr":0.3},{"t":60,"r":796,"c":14,"a":"hold","s":0.12789747972039658,"ps":4,"e":3.6152378545899344,"pr":0.30000000000000004},{"t":61,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.544711201958459,"pr":0.3},{"t":61,"r":796,"c":20,"a":"extend","s":0.25818253377462197,"ps":4,"e":3.569142964135998,"pr":0.3},{"t":61,"r":796,"c":14,"a":"retracted","s":0.12789747972039658,"ps":4,"e":4.038417692353107,"pr":0.3},{"t":63,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046852177455,"pr":0.3},{"t":63,"r":796,"c":18,"a":"extend","s":0.37896981888350173,"ps":4,"e":5.298229864419127,"pr":0.45},{"t":64,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.544977507132694,"pr":0.3},{"t":64,"r":796,"c":18,"a":"extend","s":0.37896981888350173,"ps":4,"e":5.4109918908409975,"pr":0.4},{"t":65,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545019216116603,"pr":0.3},{"t":67,"r":796,"c":21,"a":"retracted","s":0.34010006925085406,"ps":4,"e":11.234475016939692,"pr":0.3},{"t":69,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.621336351318751,"pr":0.3},{"t":70,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.621336430017844,"pr":0.3},{"t":70,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545100180344899,"pr":0.3},{"t":71,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.9210468491928845,"pr":0.3},{"t":71,"r":796,"c":15,"a":"hold","s":0.15783410517801066,"ps":5,"e":4.440182952891314,"pr":0.4},{"t":72,"r":796,"c":15,"a":"retracted","s":0.15783410517801066,"ps":4,"e":5.1028557943154,"pr":0.35000000000000003},{"t":72,"r":796,"c":20,"a":"hold","s":0.20603052364929725,"ps":4,"e":5.341694529449113,"pr":0.35000000000000003},{"t":73,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849099769,"pr":0.3},{"t":73,"r":796,"c":20,"a":"retracted","s":0.22622949715622231,"ps":4,"e":6.551530506698892,"pr":0.30000000000000004},{"t":74,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849072929,"pr":0.3},{"t":74,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.621336569559204,"pr":0.3},{"t":74,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.5451126098271875,"pr":0.3},{"t":74,"r":796,"c":15,"a":"hold","s":0.1722870057930095,"ps":5,"e":3.594458981672549,"pr":0.4},{"t":76,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545114612725642,"pr":0.3},{"t":76,"r":796,"c":15,"a":"retracted","s":0.1722870057930095,"ps":4,"e":5.285580583193568,"pr":0.30000000000000004},{"t":76,"r":796,"c":20,"a":"extend","s":0.32026100630235244,"ps":5,"e":3.531995771693998,"pr":0.4},{"t":77,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.621336598526237,"pr":0.3},{"t":77,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545115190031667,"pr":0.3},{"t":78,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.0806886175948,"pr":0.3},{"t":79,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545115877025837,"pr":0.3},{"t":80,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.621336608461929,"pr":0.3},{"t":82,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.621336611107365,"pr":0.3},{"t":83,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.256902373237384,"pr":0.3},{"t":83,"r":796,"c":20,"a":"extend","s":0.32026100630235244,"ps":4,"e":4.5003983792076605,"pr":0.3},{"t":84,"r":796,"c":20,"a":"extend","s":0.32026100630235244,"ps":4,"e":4.523740500738536,"pr":0.3},{"t":85,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.621336612777257,"pr":0.3},{"t":85,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.275058089961789,"pr":0.3},{"t":86,"r":796,"c":20,"a":"hold","s":0.32026100630235244,"ps":4,"e":8.447916601576175,"pr":0.3},{"t":87,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010912,"pr":0.3},{"t":87,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116499028303,"pr":0.3},{"t":87,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.039268841599472,"pr":0.3},{"t":89,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.16226258715984,"pr":0.3},{"t":91,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.22252952248442,"pr":0.3},{"t":92,"r":796,"c":15,"a":"hold","s":0.24836880390265414,"ps":5,"e":4.203113366511426,"pr":0.4},{"t":93,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010376,"pr":0.3},{"t":93,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.621336613598798,"pr":0.3},{"t":93,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116532602425,"pr":0.3},{"t":94,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116533945415,"pr":0.3},{"t":94,"r":796,"c":22,"a":"hold","s":0.10361865325458676,"ps":5,"e":2.7584036492338933,"pr":0.4},{"t":95,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.5451165348855085,"pr":0.3},{"t":95,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292009075658722,"pr":0.3},{"t":96,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116535543574,"pr":0.3},{"t":97,"r":796,"c":20,"a":"extend","s":0.30760508694498623,"ps":4,"e":4.6458838332428325,"pr":0.30000000000000004},{"t":98,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.621336613640611,"pr":0.3},{"t":98,"r":796,"c":20,"a":"extend","s":0.30760508694498623,"ps":4,"e":4.5547071701619055,"pr":0.3},{"t":99,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010314,"pr":0.3},{"t":99,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.29238351040811,"pr":0.3},{"t":99,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.277095025529158,"pr":0.3},{"t":100,"r":796,"c":15,"a":"extend","s":0.2986471353329585,"ps":4,"e":3.9737439910769514,"pr":0.30000000000000004},{"t":101,"r":796,"c":15,"a":"extend","s":0.2986471353329585,"ps":4,"e":4.034044751618433,"pr":0.3},{"t":102,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.621336613647028,"pr":0.3},{"t":102,"r":796,"c":14,"a":"retracted","s":0.16623821631428096,"ps":4,"e":5.069862004308312,"pr":0.35000000000000003},{"t":103,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":103,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116536952605,"pr":0.3},{"t":103,"r":796,"c":20,"a":"extend","s":0.30760508694498623,"ps":4,"e":4.377717767089101,"pr":0.3},{"t":105,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":105,"r":796,"c":20,"a":"hold","s":0.30760508694498623,"ps":4,"e":6.227831619414182,"pr":0.3},{"t":106,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537035685,"pr":0.3},{"t":107,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.621336613648715,"pr":0.3},{"t":108,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.621336613648817,"pr":0.3},{"t":110,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.621336613648939,"pr":0.3},{"t":110,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292499478471438,"pr":0.3},{"t":110,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280367044958102,"pr":0.3},{"t":110,"r":796,"c":15,"a":"hold","s":0.2009703542432239,"ps":5,"e":3.8239257692359225,"pr":0.4},{"t":111,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":111,"r":796,"c":22,"a":"retracted","s":0.1863352170782419,"ps":4,"e":4.929555914790405,"pr":0.35000000000000003},{"t":112,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292500671526476,"pr":0.3},{"t":113,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.621336613649016,"pr":0.3},{"t":113,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280410409338074,"pr":0.3},{"t":113,"r":796,"c":22,"a":"hold","s":0.11858094637186216,"ps":5,"e":2.89024787389157,"pr":0.4},{"t":114,"r":796,"c":20,"a":"hold","s":0.31606286757516755,"ps":5,"e":5.0121243136336915,"pr":0.4},{"t":115,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.621336613649037,"pr":0.3},{"t":115,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501424624922,"pr":0.3},{"t":117,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501625141682,"pr":0.3},{"t":118,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280429243603097,"pr":0.3},{"t":118,"r":796,"c":22,"a":"hold","s":0.06987532263221312,"ps":5,"e":2.500614415157045,"pr":0.4},{"t":119,"r":796,"c":22,"a":"hold","s":0.09477519230923459,"ps":5,"e":2.5088159536309216,"pr":0.4},{"t":120,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.621336613649055,"pr":0.3},{"t":121,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537078853,"pr":0.3},{"t":121,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280431743473307,"pr":0.3},{"t":121,"r":796,"c":20,"a":"extend","s":0.31606286757516755,"ps":4,"e":4.540707819248007,"pr":0.3},{"t":122,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280432135005491,"pr":0.3},{"t":123,"r":796,"c":15,"a":"extend","s":0.25314544611842843,"ps":5,"e":2.9689285529662914,"pr":0.4},{"t":124,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.5451165370789886,"pr":0.3},{"t":124,"r":796,"c":15,"a":"hold","s":0.2257585584573278,"ps":4,"e":4.1749970206249145,"pr":0.35000000000000003},{"t":125,"r":796,"c":20,"a":"extend","s":0.31606286757516755,"ps":4,"e":4.509652511381682,"pr":0.3},{"t":128,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":128,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":128,"r":796,"c":13,"a":"retracted","s":0.23894151419165033,"ps":4,"e":4.912578861603882,"pr":0.5},{"t":129,"r":796,"c":20,"a":"retracted","s":0.31606286757516755,"ps":4,"e":10.292217638192136,"pr":0.3},{"t":130,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":132,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.28043302277435,"pr":0.3},{"t":133,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433030516221,"pr":0.3},{"t":134,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501817346869,"pr":0.3},{"t":134,"r":796,"c":20,"a":"hold","s":0.258110473998867,"ps":5,"e":4.548505165024817,"pr":0.4},{"t":135,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.29250181748132,"pr":0.3},{"t":135,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433039729047,"pr":0.3},{"t":136,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":136,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":136,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433042384509,"pr":0.3},{"t":138,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433045544508,"pr":0.3},{"t":139,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":139,"r":796,"c":20,"a":"extend","s":0.35284158112862135,"ps":4,"e":4.1010895318057985,"pr":0.35000000000000003},{"t":140,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":140,"r":796,"c":15,"a":"hold","s":0.10924220810573877,"ps":5,"e":3.0901006001360414,"pr":0.4},{"t":142,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.2804330478516235,"pr":0.3},{"t":143,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":143,"r":796,"c":22,"a":"hold","s":0.16141032817985426,"ps":4,"e":3.9368855846041626,"pr":0.35000000000000003},{"t":144,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":144,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501817782378,"pr":0.3},{"t":144,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.2804330482233945,"pr":0.3},{"t":144,"r":796,"c":22,"a":"retracted","s":0.16299859949177967,"ps":4,"e":4.6408743805384,"pr":0.30000000000000004},{"t":145,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501817786176,"pr":0.3},{"t":146,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":147,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501817790697,"pr":0.3},{"t":148,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501817792,"pr":0.3},{"t":148,"r":796,"c":20,"a":"hold","s":0.33882709303543795,"ps":4,"e":6.987905469197327,"pr":0.3},{"t":148,"r":796,"c":22,"a":"hold","s":0.09885575976671646,"ps":4,"e":2.918858257926661,"pr":0.35000000000000003},{"t":149,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":149,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.2804330485205515,"pr":0.3},{"t":149,"r":796,"c":22,"a":"retracted","s":0.09829975202381824,"ps":4,"e":3.105256274117207,"pr":0.30000000000000004},{"t":150,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048538562,"pr":0.3},{"t":150,"r":796,"c":20,"a":"retracted","s":0.33882709303543795,"ps":4,"e":11.209138957764335,"pr":0.3},{"t":151,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.28043304855117,"pr":0.3},{"t":152,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":152,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048559994,"pr":0.3},{"t":152,"r":796,"c":22,"a":"hold","s":0.20769751112501383,"ps":5,"e":3.6031942526648977,"pr":0.4},{"t":153,"r":796,"c":22,"a":"hold","s":0.22231745914802598,"ps":5,"e":4.6317339258491055,"pr":0.4},{"t":154,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":154,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501817794681,"pr":0.3},{"t":155,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":155,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":155,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":155,"r":796,"c":15,"a":"hold","s":0.24989192764889326,"ps":5,"e":4.215298356481277,"pr":0.4},{"t":156,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":156,"r":796,"c":15,"a":"hold","s":0.29770828751462686,"ps":4,"e":5.996964656598292,"pr":0.35000000000000003},{"t":156,"r":796,"c":20,"a":"extend","s":0.38643790619469054,"ps":4,"e":4.522886149313158,"pr":0.35000000000000003},{"t":158,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":159,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":159,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.28043304857889,"pr":0.3},{"t":159,"r":796,"c":20,"a":"extend","s":0.39843352087660444,"ps":4,"e":5.517938649245089,"pr":0.3},{"t":159,"r":796,"c":22,"a":"retracted","s":0.2045926682181388,"ps":4,"e":5.129635628516738,"pr":0.35000000000000003},{"t":160,"r":796,"c":20,"a":"extend","s":0.39843352087660444,"ps":4,"e":5.6737847713805465,"pr":0.3},{"t":161,"r":796,"c":22,"a":"hold","s":0.16380769018329122,"ps":5,"e":3.2520756851432147,"pr":0.4},{"t":162,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501817795019,"pr":0.3},{"t":163,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580178,"pr":0.3},{"t":163,"r":796,"c":20,"a":"extend","s":0.39843352087660444,"ps":4,"e":5.912696876614204,"pr":0.3},{"t":163,"r":796,"c":15,"a":"hold","s":0.1278531790333332,"ps":5,"e":3.238988367556797,"pr":0.4},{"t":164,"r":796,"c":15,"a":"hold","s":0.13770490762461943,"ps":4,"e":3.7406276285537525,"pr":0.35000000000000003},{"t":165,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":165,"r":796,"c":22,"a":"hold","s":0.16380769018329122,"ps":4,"e":4.806499849906974,"pr":0.30000000000000004},{"t":165,"r":796,"c":15,"a":"retracted","s":0.1278531790333332,"ps":4,"e":4.1634530608204185,"pr":0.30000000000000004},{"t":165,"r":796,"c":23,"a":"hold","s":0.17911962147740582,"ps":4,"e":3.4147814715529634,"pr":0.45},{"t":166,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":166,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501817795035,"pr":0.3},{"t":166,"r":796,"c":24,"a":"hold","s":0.16257273448031814,"ps":4,"e":2.6120861713373316,"pr":0.5499999999999999},{"t":167,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":167,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":167,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501817795037,"pr":0.3},{"t":167,"r":796,"c":20,"a":"extend","s":0.39843352087660444,"ps":4,"e":6.007478327005528,"pr":0.3},{"t":168,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580517,"pr":0.3},{"t":169,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":170,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":170,"r":796,"c":22,"a":"retracted","s":0.18129821441743116,"ps":4,"e":5.147310372129106,"pr":0.30000000000000004},{"t":172,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":172,"r":796,"c":20,"a":"extend","s":0.39843352087660444,"ps":4,"e":6.032392464180124,"pr":0.3},{"t":173,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580575,"pr":0.3},{"t":174,"r":796,"c":22,"a":"retracted","s":0.12040892584612038,"ps":4,"e":3.678792642679303,"pr":0.30000000000000004},{"t":175,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":175,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":176,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":177,"r":796,"c":22,"a":"hold","s":0.14375537269553781,"ps":6,"e":3.065311626602594,"pr":0.5},{"t":178,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":178,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501817795037,"pr":0.3},{"t":178,"r":796,"c":20,"a":"extend","s":0.39843352087660444,"ps":4,"e":6.471455558044906,"pr":0.3},{"t":179,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":179,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":179,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580584,"pr":0.3},{"t":180,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":180,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501817795037,"pr":0.3},{"t":180,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580584,"pr":0.3},{"t":181,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501817795037,"pr":0.3},{"t":181,"r":796,"c":20,"a":"extend","s":0.39843352087660444,"ps":4,"e":6.18629795644008,"pr":0.3},{"t":182,"r":796,"c":13,"a":"hold","s":0.15240900303594265,"ps":5,"e":2.1532031610396913,"pr":0.4},{"t":183,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":184,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":184,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":184,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580584,"pr":0.3},{"t":184,"r":796,"c":15,"a":"extend","s":0.33477636071340944,"ps":4,"e":5.014819396649642,"pr":0.3},{"t":185,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":185,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501817795037,"pr":0.3},{"t":185,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580584,"pr":0.3},{"t":187,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":187,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501817795037,"pr":0.3},{"t":187,"r":796,"c":13,"a":"hold","s":0.2391716790249666,"ps":5,"e":3.59473772013731,"pr":0.4},{"t":188,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580584,"pr":0.3},{"t":189,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":189,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501817795037,"pr":0.3},{"t":190,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":190,"r":796,"c":15,"a":"hold","s":0.33477636071340944,"ps":4,"e":6.95521220671057,"pr":0.3},{"t":191,"r":796,"c":22,"a":"retracted","s":0.23002122317382936,"ps":4,"e":5.8392429184911805,"pr":0.35000000000000003},{"t":192,"r":796,"c":15,"a":"retracted","s":0.33477636071340944,"ps":4,"e":11.11163397812512,"pr":0.3},{"t":193,"r":796,"c":20,"a":"extend","s":0.39843352087660444,"ps":4,"e":6.039486306368833,"pr":0.3},{"t":194,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":194,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501817795037,"pr":0.3},{"t":194,"r":796,"c":22,"a":"hold","s":0.1875190435700636,"ps":5,"e":3.441766512237902,"pr":0.4},{"t":195,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501817795037,"pr":0.3},{"t":195,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580584,"pr":0.3},{"t":195,"r":796,"c":20,"a":"extend","s":0.39843352087660444,"ps":4,"e":7.850095848276151,"pr":0.3},{"t":196,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":197,"r":796,"c":20,"a":"extend","s":0.39843352087660444,"ps":4,"e":6.9256340844005875,"pr":0.3},{"t":198,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":198,"r":796,"c":22,"a":"hold","s":0.09063003043504392,"ps":5,"e":2.6666544071577447,"pr":0.4},{"t":199,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":199,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580584,"pr":0.3},{"t":200,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":200,"r":796,"c":20,"a":"extend","s":0.39843352087660444,"ps":4,"e":6.342081190980077,"pr":0.3},{"t":200,"r":796,"c":15,"a":"extend","s":0.2931982223510407,"ps":4,"e":8.047898488062023,"pr":0.3},{"t":200,"r":796,"c":22,"a":"retracted","s":0.10303758772306462,"ps":4,"e":2.965255810726779,"pr":0.35000000000000003},{"t":201,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":201,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501817795037,"pr":0.3},{"t":202,"r":796,"c":20,"a":"extend","s":0.39843352087660444,"ps":4,"e":6.186706902325512,"pr":0.3},{"t":204,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":204,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580584,"pr":0.3},{"t":205,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":205,"r":796,"c":15,"a":"extend","s":0.2931982223510407,"ps":4,"e":4.74108904513794,"pr":0.3},{"t":206,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501817795037,"pr":0.3},{"t":208,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":208,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580584,"pr":0.3},{"t":209,"r":796,"c":14,"a":"extend","s":0.35325130773288393,"ps":4,"e":4.402697883697218,"pr":0.3},{"t":210,"r":796,"c":14,"a":"extend","s":0.35325130773288393,"ps":4,"e":4.640095841892202,"pr":0.3},{"t":211,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":211,"r":796,"c":15,"a":"hold","s":0.2931982223510407,"ps":4,"e":7.724605181759312,"pr":0.3},{"t":212,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":212,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580584,"pr":0.3},{"t":212,"r":796,"c":20,"a":"extend","s":0.39843352087660444,"ps":4,"e":6.041642546859202,"pr":0.3},{"t":212,"r":796,"c":14,"a":"hold","s":0.35325130773288393,"ps":4,"e":7.032284874491763,"pr":0.3},{"t":212,"r":796,"c":13,"a":"hold","s":0.08795792576489792,"ps":4,"e":1.82921269755749,"pr":0.35000000000000003},{"t":213,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":213,"r":796,"c":13,"a":"retracted","s":0.060867098471277505,"ps":4,"e":1.7161494853277102,"pr":0.30000000000000004},{"t":214,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":215,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580584,"pr":0.3},{"t":216,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":216,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":216,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580584,"pr":0.3},{"t":217,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":217,"r":796,"c":22,"a":"retracted","s":0.17013863933807283,"ps":4,"e":4.393620411474862,"pr":0.35000000000000003},{"t":218,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580584,"pr":0.3},{"t":219,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":220,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":220,"r":796,"c":22,"a":"hold","s":0.13556747807704053,"ps":4,"e":3.5039317186434866,"pr":0.35000000000000003},{"t":221,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":223,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":223,"r":796,"c":20,"a":"extend","s":0.39843352087660444,"ps":4,"e":6.186707228632701,"pr":0.3},{"t":224,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":224,"r":796,"c":22,"a":"extend","s":0.2150405194674485,"ps":6,"e":2.474544532008784,"pr":0.5},{"t":225,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":225,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":226,"r":796,"c":15,"a":"extend","s":0.20402401243766782,"ps":4,"e":3.362443968427087,"pr":0.35000000000000003},{"t":226,"r":796,"c":23,"a":"extend","s":0.3443076071411979,"ps":5,"e":2.0717417033275,"pr":0.6},{"t":227,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":227,"r":796,"c":22,"a":"hold","s":0.2150405194674485,"ps":5,"e":4.05841046026674,"pr":0.45},{"t":228,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":228,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":228,"r":796,"c":20,"a":"extend","s":0.39843352087660444,"ps":4,"e":6.0625154656766025,"pr":0.3},{"t":229,"r":796,"c":24,"a":"hold","s":0.2449143239855337,"ps":4,"e":3.2689592661712856,"pr":0.6499999999999999},{"t":230,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501817795037,"pr":0.3},{"t":231,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":232,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":233,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580584,"pr":0.3},{"t":234,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580584,"pr":0.3},{"t":236,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":236,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580584,"pr":0.3},{"t":236,"r":796,"c":22,"a":"retracted","s":0.16353468154061412,"ps":4,"e":4.2123131274280725,"pr":0.35000000000000003},{"t":237,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":237,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580584,"pr":0.3},{"t":237,"r":796,"c":20,"a":"extend","s":0.39843352087660444,"ps":4,"e":7.850099813673925,"pr":0.3},{"t":238,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":238,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":239,"r":796,"c":15,"a":"retracted","s":0.30145233660760834,"ps":4,"e":8.272606327790404,"pr":0.30000000000000004},{"t":240,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":242,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":243,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":243,"r":796,"c":22,"a":"hold","s":0.13361940148743515,"ps":5,"e":3.0105693755768748,"pr":0.4},{"t":245,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580584,"pr":0.3},{"t":245,"r":796,"c":20,"a":"extend","s":0.39843352087660444,"ps":4,"e":6.141922777134133,"pr":0.3},{"t":246,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":246,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501817795037,"pr":0.3},{"t":246,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580584,"pr":0.3},{"t":246,"r":796,"c":20,"a":"extend","s":0.39843352087660444,"ps":4,"e":6.110573660902878,"pr":0.3},{"t":247,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":248,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":248,"r":796,"c":14,"a":"extend","s":0.39565112062143326,"ps":6,"e":3.110890251921907,"pr":0.5},{"t":250,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":252,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":252,"r":796,"c":14,"a":"hold","s":0.2631730824972011,"ps":5,"e":6.543217853619632,"pr":0.5},{"t":253,"r":796,"c":13,"a":"retracted","s":0.15802319318469674,"ps":6,"e":2.775453038129384,"pr":0.6},{"t":254,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":255,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":255,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":256,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580584,"pr":0.3},{"t":257,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580584,"pr":0.3},{"t":257,"r":796,"c":22,"a":"retracted","s":0.1443465205388285,"ps":4,"e":3.815910402554005,"pr":0.35000000000000003},{"t":258,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":258,"r":796,"c":20,"a":"extend","s":0.39843352087660444,"ps":4,"e":9.661947405044366,"pr":0.3},{"t":260,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501817795037,"pr":0.3},{"t":261,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":263,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":264,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":264,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580584,"pr":0.3},{"t":265,"r":796,"c":22,"a":"extend","s":0.2357719339064047,"ps":4,"e":4.112780162422388,"pr":0.35000000000000003},{"t":266,"r":796,"c":22,"a":"hold","s":0.18892939073151435,"ps":4,"e":5.024215288274503,"pr":0.35000000000000003},{"t":267,"r":796,"c":15,"a":"extend","s":0.3000168283923828,"ps":4,"e":4.057933239317765,"pr":0.30000000000000004},{"t":268,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":269,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":269,"r":796,"c":20,"a":"extend","s":0.39843352087660444,"ps":4,"e":6.109094359554252,"pr":0.3},{"t":271,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":271,"r":796,"c":15,"a":"extend","s":0.3000168283923828,"ps":4,"e":4.1661284781404655,"pr":0.3},{"t":272,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":272,"r":796,"c":13,"a":"hold","s":0.11636047922821183,"ps":4,"e":1.855587339114749,"pr":0.45},{"t":273,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":273,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":273,"r":796,"c":15,"a":"hold","s":0.3000168283923828,"ps":4,"e":5.976518800834731,"pr":0.3},{"t":275,"r":796,"c":14,"a":"hold","s":0.35001782855498637,"ps":4,"e":6.764270931552839,"pr":0.3},{"t":276,"r":796,"c":20,"a":"extend","s":0.39843352087660444,"ps":4,"e":6.043327943422861,"pr":0.3},{"t":277,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":277,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501817795037,"pr":0.3},{"t":277,"r":796,"c":22,"a":"retracted","s":0.11718677671383444,"ps":4,"e":3.553777038719188,"pr":0.30000000000000004},{"t":277,"r":796,"c":15,"a":"hold","s":0.30339432486842954,"ps":5,"e":4.643317534237568,"pr":0.4},{"t":278,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":279,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580584,"pr":0.3},{"t":279,"r":796,"c":22,"a":"hold","s":0.1679475328489685,"ps":5,"e":3.2851944264691415,"pr":0.4},{"t":280,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":280,"r":796,"c":22,"a":"hold","s":0.12687881914638238,"ps":6,"e":3.4002249796402007,"pr":0.5},{"t":282,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":282,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":283,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":283,"r":796,"c":20,"a":"extend","s":0.39843352087660444,"ps":4,"e":6.908169258871078,"pr":0.3},{"t":284,"r":796,"c":14,"a":"extend","s":0.3497550198765696,"ps":5,"e":2.6239792642405186,"pr":0.5},{"t":285,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501817795037,"pr":0.3},{"t":285,"r":796,"c":14,"a":"extend","s":0.3210363551316818,"ps":4,"e":3.214589073705781,"pr":0.45},{"t":286,"r":796,"c":15,"a":"hold","s":0.20239401235485602,"ps":4,"e":6.2039068737338745,"pr":0.30000000000000004},{"t":286,"r":796,"c":13,"a":"hold","s":0.147828293194135,"ps":4,"e":2.111321365559869,"pr":0.5499999999999999},{"t":287,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":287,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":287,"r":796,"c":22,"a":"hold","s":0.1398363450611801,"ps":5,"e":3.060304924166834,"pr":0.4},{"t":288,"r":796,"c":20,"a":"extend","s":0.39843352087660444,"ps":4,"e":6.183771589098766,"pr":0.3},{"t":288,"r":796,"c":14,"a":"extend","s":0.3497550198765696,"ps":4,"e":4.472199616047332,"pr":0.30000000000000004},{"t":289,"r":796,"c":19,"a":"extend","s":0.4792026716292354,"ps":4,"e":7.545116537079058,"pr":0.3},{"t":289,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501817795037,"pr":0.3},{"t":289,"r":796,"c":20,"a":"extend","s":0.39843352087660444,"ps":4,"e":6.139867829278121,"pr":0.3},{"t":292,"r":796,"c":14,"a":"extend","s":0.3497550198765696,"ps":4,"e":4.971120133758128,"pr":0.3},{"t":293,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":294,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580584,"pr":0.3},{"t":294,"r":796,"c":14,"a":"extend","s":0.3497550198765696,"ps":4,"e":5.0515166547664245,"pr":0.3},{"t":295,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":295,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580584,"pr":0.3},{"t":296,"r":796,"c":17,"a":"extend","s":0.48328589001691385,"ps":4,"e":7.6213366136490555,"pr":0.3},{"t":296,"r":796,"c":14,"a":"hold","s":0.3497550198765696,"ps":4,"e":9.447596972791537,"pr":0.3},{"t":297,"r":796,"c":15,"a":"extend","s":0.397089968155485,"ps":4,"e":5.696291694015997,"pr":0.3},{"t":298,"r":796,"c":21,"a":"extend","s":0.4114517704596743,"ps":4,"e":6.280433048580584,"pr":0.3},{"t":298,"r":796,"c":15,"a":"hold","s":0.397089968155485,"ps":4,"e":8.273011439259877,"pr":0.3},{"t":298,"r":796,"c":22,"a":"hold","s":0.08494384015766347,"ps":5,"e":2.3619632907856123,"pr":0.4},{"t":299,"r":796,"c":16,"a":"extend","s":0.4457703669112664,"ps":4,"e":6.921046849010306,"pr":0.3},{"t":299,"r":796,"c":18,"a":"extend","s":0.5192411688104487,"ps":4,"e":8.292501817795037,"pr":0.3},{"t":299,"r":796,"c":20,"a":"hold","s":0.39843352087660444,"ps":4,"e":11.218267640621034,"pr":0.3}];
|
|
const lines = text.split('\n');
|
|
const gridEl = document.getElementById('grid');
|
|
const charEls = [];
|
|
for (let r = 0; r < lines.length; r++) {
|
|
const row = [];
|
|
for (let c = 0; c < lines[r].length; c++) {
|
|
const s = document.createElement('span');
|
|
s.className = 'c';
|
|
s.textContent = lines[r][c];
|
|
row.push(s);
|
|
gridEl.appendChild(s);
|
|
}
|
|
charEls.push(row);
|
|
gridEl.appendChild(document.createTextNode('\n'));
|
|
}
|
|
let tick = -1, playing = false, iv;
|
|
function apply(t) {
|
|
for (const r of charEls) for (const e of r) e.className = 'c';
|
|
const active = new Map();
|
|
for (const p of passes) {
|
|
if (p.t > t) break;
|
|
const k = p.r+','+p.c;
|
|
if (p.a === 'died' || p.a === 'retracted') active.set(k, 'dead');
|
|
else if (p.ps > 16) active.set(k, 'strong');
|
|
else active.set(k, 'active');
|
|
}
|
|
for (const [k, cls] of active) {
|
|
const [r, c] = k.split(',').map(Number);
|
|
if (charEls[r]?.[c]) charEls[r][c].className = 'c ' + cls;
|
|
}
|
|
document.getElementById('info').textContent = 'tick ' + t + ' · ' + [...active.values()].filter(v=>v!=='dead').length + ' alive';
|
|
}
|
|
function play() {
|
|
if (playing) return;
|
|
playing = true;
|
|
document.getElementById('play-btn').textContent = 'pause';
|
|
const max = passes.length > 0 ? passes[passes.length-1].t : 0;
|
|
iv = setInterval(() => { tick++; if (tick > max) { pause(); return; } apply(tick); }, 900);
|
|
}
|
|
function pause() { playing = false; clearInterval(iv); document.getElementById('play-btn').textContent = 'play'; }
|
|
function reset() { pause(); tick = -1; for (const r of charEls) for (const e of r) e.className = 'c'; document.getElementById('info').textContent = 'neurameba'; }
|
|
document.getElementById('play-btn').addEventListener('click', () => playing ? pause() : play());
|
|
document.getElementById('reset-btn').addEventListener('click', reset);
|
|
setTimeout(play, 1000);
|
|
</script>
|
|
</body>
|
|
</html> |