73 lines
No EOL
75 KiB
HTML
73 lines
No EOL
75 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Voronoi Fluid Fractures — 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":"extend","s":0.3312316454524679,"ps":9,"e":70.90989721453381,"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":1,"r":933,"c":2,"a":"hold","s":0.3016319402850429,"ps":9,"e":71.97295273681415,"pr":1.1},{"t":1,"r":1068,"c":36,"a":"extend","s":0.4033054916220484,"ps":9,"e":51.317598511317115,"pr":1.1},{"t":1,"r":934,"c":2,"a":"hold","s":0.2756916057132329,"ps":5,"e":31.845488794791788,"pr":1.2000000000000002},{"t":1,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":5,"e":23.31807693153158,"pr":1.2000000000000002},{"t":1,"r":1068,"c":37,"a":"hold","s":0.2701480820346047,"ps":5,"e":32.02593226335866,"pr":1.2000000000000002},{"t":2,"r":933,"c":2,"a":"hold","s":0.3016319402850429,"ps":8,"e":73.18600825909449,"pr":1.05},{"t":2,"r":1068,"c":36,"a":"extend","s":0.4033054916220484,"ps":8,"e":37.34082971100545,"pr":1.05},{"t":2,"r":934,"c":2,"a":"hold","s":0.279522286875225,"ps":5,"e":33.33166708979359,"pr":1.2000000000000002},{"t":2,"r":1068,"c":35,"a":"extend","s":0.4298078993121021,"ps":4,"e":18.309578088219876,"pr":1.1500000000000001},{"t":2,"r":1068,"c":37,"a":"hold","s":0.3046407181458261,"ps":5,"e":33.71305800852527,"pr":1.2000000000000002},{"t":2,"r":1068,"c":34,"a":"hold","s":0.27577882379100593,"ps":5,"e":11.449692132413011,"pr":1.3000000000000003},{"t":3,"r":933,"c":2,"a":"retracted","s":0.3312316454524679,"ps":8,"e":74.63586142271424,"pr":1.05},{"t":3,"r":1068,"c":36,"a":"extend","s":0.42489483628409375,"ps":8,"e":27.677991880894734,"pr":1.05},{"t":3,"r":934,"c":2,"a":"retracted","s":0.279522286875225,"ps":4,"e":34.96784538479539,"pr":1.1500000000000001},{"t":3,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":14.809458268328218,"pr":1.1},{"t":3,"r":1068,"c":37,"a":"retracted","s":0.3046407181458261,"ps":4,"e":35.55018375369188,"pr":1.1500000000000001},{"t":3,"r":1068,"c":34,"a":"hold","s":0.25176508099624684,"ps":4,"e":12.863812780382986,"pr":1.2500000000000002},{"t":4,"r":1068,"c":36,"a":"extend","s":0.42489483628409375,"ps":7,"e":21.019005399817235,"pr":1},{"t":4,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":12.359374394404057,"pr":1.05},{"t":4,"r":1068,"c":34,"a":"retracted","s":0.27577882379100593,"ps":4,"e":14.470043370711034,"pr":1.2000000000000002},{"t":5,"r":1068,"c":36,"a":"extend","s":0.401124774909063,"ps":7,"e":16.224602519362815,"pr":1},{"t":5,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":10.644315682657144,"pr":1},{"t":6,"r":1068,"c":36,"a":"extend","s":0.401124774909063,"ps":6,"e":12.973520503044723,"pr":0.95},{"t":6,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":9.443774584434305,"pr":0.95},{"t":7,"r":1068,"c":36,"a":"hold","s":0.3474974071802458,"ps":6,"e":14.85349976048669,"pr":0.95},{"t":7,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":8.603395815678317,"pr":0.8999999999999999},{"t":7,"r":1068,"c":37,"a":"hold","s":0.23414486704744006,"ps":5,"e":6.683239151970117,"pr":1.05},{"t":7,"r":1068,"c":34,"a":"hold","s":0.2685874428799282,"ps":5,"e":5.4460315077969845,"pr":1.05},{"t":8,"r":1068,"c":36,"a":"hold","s":0.3474974071802458,"ps":5,"e":16.883479017928657,"pr":0.8999999999999999},{"t":8,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":8.015130677549125,"pr":0.8499999999999999},{"t":8,"r":1068,"c":37,"a":"hold","s":0.24025171807534376,"ps":5,"e":7.855252896572867,"pr":1.05},{"t":8,"r":1068,"c":34,"a":"hold","s":0.2814595756424389,"ps":4,"e":7.097708112936496,"pr":1},{"t":9,"r":1068,"c":36,"a":"retracted","s":0.3205297295326896,"ps":5,"e":18.697716854190173,"pr":0.8999999999999999},{"t":9,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":7.603345080858691,"pr":0.7999999999999998},{"t":9,"r":1068,"c":37,"a":"retracted","s":0.24025171807534376,"ps":4,"e":9.177266641175617,"pr":1},{"t":9,"r":1068,"c":34,"a":"retracted","s":0.2685874428799282,"ps":4,"e":8.64640765597592,"pr":0.95},{"t":10,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":7.315095163175387,"pr":0.7499999999999998},{"t":12,"r":1068,"c":36,"a":"hold","s":0.19183998009780703,"ps":5,"e":5.034111403970235,"pr":0.8499999999999998},{"t":13,"r":1068,"c":36,"a":"retracted","s":0.19183998009780703,"ps":4,"e":5.968831244752692,"pr":0.7999999999999997},{"t":15,"r":1068,"c":34,"a":"extend","s":0.32744707814191054,"ps":4,"e":5.01108851132386,"pr":0.7499999999999997},{"t":17,"r":1068,"c":32,"a":"extend","s":0.35348633096248877,"ps":5,"e":3.957411872157269,"pr":1.0999999999999999},{"t":17,"r":1068,"c":31,"a":"extend","s":0.2455396204176913,"ps":4,"e":2.5102489555213245,"pr":1.2},{"t":17,"r":1068,"c":36,"a":"extend","s":0.41355285486032256,"ps":5,"e":4.497968539734744,"pr":0.5999999999999996},{"t":18,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.6812851015675925,"pr":0.34999999999999964},{"t":18,"r":1068,"c":34,"a":"extend","s":0.32744707814191054,"ps":4,"e":4.8148143257164735,"pr":0.5999999999999995},{"t":20,"r":1068,"c":32,"a":"hold","s":0.2439491705508214,"ps":5,"e":5.989671969440751,"pr":1.15},{"t":20,"r":1068,"c":31,"a":"extend","s":0.31556735802045993,"ps":4,"e":3.8113334705067343,"pr":1.0999999999999999},{"t":21,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.655811188235409,"pr":0.3},{"t":23,"r":1068,"c":33,"a":"hold","s":0.3352922793477296,"ps":4,"e":6.909302732865388,"pr":0.4999999999999994},{"t":23,"r":1068,"c":32,"a":"hold","s":0.21679320632411703,"ps":5,"e":3.053044721200173,"pr":0.6499999999999994},{"t":24,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.64707363596247,"pr":0.3},{"t":24,"r":1068,"c":34,"a":"retracted","s":0.32744707814191054,"ps":4,"e":10.806222155458995,"pr":0.3},{"t":24,"r":1068,"c":31,"a":"retracted","s":0.31556735802045993,"ps":4,"e":9.788727226760328,"pr":0.8999999999999997},{"t":26,"r":1068,"c":34,"a":"hold","s":0.3942572136127381,"ps":5,"e":5.252217059651061,"pr":0.4},{"t":27,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.42712734738846,"pr":0.3},{"t":28,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.643607265447299,"pr":0.3},{"t":28,"r":1068,"c":34,"a":"retracted","s":0.34581050823621845,"ps":4,"e":9.435185191430556,"pr":0.35000000000000003},{"t":34,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642640876220755,"pr":0.3},{"t":34,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.4804804253518995,"pr":0.3},{"t":35,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642602219928832,"pr":0.3},{"t":37,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.6425562189414435,"pr":0.3},{"t":37,"r":1068,"c":34,"a":"extend","s":0.3599258405072967,"ps":4,"e":5.2803101806318535,"pr":0.3},{"t":40,"r":1068,"c":32,"a":"extend","s":0.26921748157592684,"ps":4,"e":3.418559626801473,"pr":0.39999999999999997},{"t":41,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.4848742807404225,"pr":0.3},{"t":41,"r":1068,"c":34,"a":"extend","s":0.3599258405072967,"ps":4,"e":5.309418536797608,"pr":0.3},{"t":42,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642519450108689,"pr":0.3},{"t":44,"r":1068,"c":34,"a":"extend","s":0.3599258405072967,"ps":4,"e":5.315461066103065,"pr":0.3},{"t":45,"r":1068,"c":33,"a":"retracted","s":0.3048129112160866,"ps":4,"e":9.766626911369235,"pr":0.3},{"t":46,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642513805423807,"pr":0.3},{"t":46,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485202333572219,"pr":0.3},{"t":46,"r":1068,"c":37,"a":"retracted","s":0.20381908859318618,"ps":4,"e":5.844902004631498,"pr":0.30000000000000004},{"t":48,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.4852361336252455,"pr":0.3},{"t":48,"r":1068,"c":37,"a":"hold","s":0.2475122643542214,"ps":5,"e":4.009479064529351,"pr":0.4},{"t":51,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.48525746941166,"pr":0.3},{"t":53,"r":1068,"c":34,"a":"extend","s":0.3245294285603547,"ps":5,"e":3.2851184694607216,"pr":0.4},{"t":56,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485266736092194,"pr":0.3},{"t":57,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485267297720335,"pr":0.3},{"t":57,"r":1068,"c":33,"a":"extend","s":0.22940725648820134,"ps":4,"e":3.509998709859274,"pr":0.45},{"t":58,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.6425120466004115,"pr":0.3},{"t":58,"r":1068,"c":37,"a":"extend","s":0.27852433273733535,"ps":4,"e":3.288747037065252,"pr":0.35000000000000003},{"t":59,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.4852679660578225,"pr":0.3},{"t":59,"r":1068,"c":37,"a":"extend","s":0.26552889837542903,"ps":4,"e":3.3690847568480793,"pr":0.35000000000000003},{"t":60,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512034010517,"pr":0.3},{"t":60,"r":1068,"c":33,"a":"extend","s":0.22940725648820134,"ps":4,"e":3.097580151053032,"pr":0.30000000000000004},{"t":61,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512030381665,"pr":0.3},{"t":63,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268454011023,"pr":0.3},{"t":63,"r":1068,"c":37,"a":"hold","s":0.26552889837542903,"ps":4,"e":6.513149017396508,"pr":0.3},{"t":69,"r":1068,"c":34,"a":"hold","s":0.27409823378595954,"ps":5,"e":4.289576737121248,"pr":0.4},{"t":70,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512022256033,"pr":0.3},{"t":70,"r":1068,"c":34,"a":"hold","s":0.2998987489658253,"ps":4,"e":6.08876672884785,"pr":0.35000000000000003},{"t":73,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512022031545,"pr":0.3},{"t":74,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268605137453,"pr":0.3},{"t":76,"r":1068,"c":37,"a":"extend","s":0.24926095437667156,"ps":5,"e":3.6292708126348194,"pr":0.4},{"t":76,"r":1068,"c":33,"a":"hold","s":0.168741502601461,"ps":5,"e":2.051878247097674,"pr":0.5},{"t":77,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268607140347,"pr":0.3},{"t":80,"r":1068,"c":37,"a":"extend","s":0.2388980154614684,"ps":4,"e":3.2161536248997797,"pr":0.3},{"t":81,"r":1068,"c":33,"a":"extend","s":0.35147428521449864,"ps":5,"e":2.9240535606556692,"pr":0.4},{"t":82,"r":1068,"c":33,"a":"extend","s":0.33116791317322275,"ps":4,"e":3.4813778062290157,"pr":0.35000000000000003},{"t":83,"r":1068,"c":34,"a":"extend","s":0.3507542205246541,"ps":4,"e":5.0748949747306416,"pr":0.3},{"t":83,"r":1068,"c":38,"a":"extend","s":0.322306500236958,"ps":4,"e":4.022148028097287,"pr":0.35000000000000003},{"t":83,"r":1068,"c":33,"a":"extend","s":0.35147428521449864,"ps":4,"e":3.9852204615615032,"pr":0.30000000000000004},{"t":84,"r":1068,"c":38,"a":"extend","s":0.322306500236958,"ps":4,"e":4.2004200209950655,"pr":0.30000000000000004},{"t":84,"r":1068,"c":32,"a":"retracted","s":0.22301440475031659,"ps":4,"e":4.605068807544998,"pr":0.4},{"t":87,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.48526860815646,"pr":0.3},{"t":88,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.48526860816532,"pr":0.3},{"t":90,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608175865,"pr":0.3},{"t":93,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914439,"pr":0.3},{"t":95,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914392,"pr":0.3},{"t":95,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.4852686081842945,"pr":0.3},{"t":96,"r":1068,"c":33,"a":"extend","s":0.3581477296271986,"ps":5,"e":2.6366580219524938,"pr":0.45000000000000007},{"t":98,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914362,"pr":0.3},{"t":98,"r":1068,"c":34,"a":"extend","s":0.3516624889194655,"ps":4,"e":4.714717238980932,"pr":0.3},{"t":99,"r":1068,"c":33,"a":"extend","s":0.3581477296271986,"ps":4,"e":4.1947793998859355,"pr":0.4000000000000001},{"t":100,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.48526860818571,"pr":0.3},{"t":100,"r":1068,"c":32,"a":"extend","s":0.27910071933384656,"ps":4,"e":3.870171177064713,"pr":0.5},{"t":101,"r":1068,"c":37,"a":"extend","s":0.23178090494648285,"ps":5,"e":2.682630377558424,"pr":0.4},{"t":105,"r":1068,"c":37,"a":"retracted","s":0.23348237299468036,"ps":4,"e":6.55939128386353,"pr":0.3},{"t":106,"r":1068,"c":33,"a":"extend","s":0.3581477296271986,"ps":4,"e":5.195604990199038,"pr":0.3},{"t":107,"r":1068,"c":34,"a":"hold","s":0.3516624889194655,"ps":4,"e":7.351744988405745,"pr":0.3},{"t":108,"r":1068,"c":34,"a":"hold","s":0.3516624889194655,"ps":4,"e":9.56504489976147,"pr":0.3},{"t":114,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":114,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":5.46325393766749,"pr":0.3},{"t":119,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":120,"r":1068,"c":37,"a":"extend","s":0.2103378792534864,"ps":4,"e":3.5827895015611686,"pr":0.35000000000000003},{"t":121,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":121,"r":1068,"c":39,"a":"extend","s":0.22883530428977755,"ps":5,"e":1.3795902119959402,"pr":0.55},{"t":122,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.273143124897594,"pr":0.3},{"t":122,"r":1068,"c":37,"a":"hold","s":0.2103378792534864,"ps":4,"e":4.348547808940233,"pr":0.3},{"t":122,"r":1068,"c":33,"a":"extend","s":0.22217016138853857,"ps":4,"e":3.024981555113506,"pr":0.3},{"t":123,"r":1068,"c":33,"a":"hold","s":0.22217016138853857,"ps":4,"e":4.202342846221814,"pr":0.3},{"t":124,"r":1068,"c":37,"a":"retracted","s":0.2103378792534864,"ps":4,"e":6.513953876996015,"pr":0.3},{"t":125,"r":1068,"c":39,"a":"hold","s":0.22883530428977755,"ps":4,"e":4.576342795609887,"pr":0.35000000000000003},{"t":126,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":127,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.314360805963167,"pr":0.3},{"t":128,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":130,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":133,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.321708115744203,"pr":0.3},{"t":133,"r":1068,"c":31,"a":"hold","s":0.3165875343549503,"ps":5,"e":4.528557628977351,"pr":0.5},{"t":134,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":134,"r":1068,"c":37,"a":"hold","s":0.26123048676518046,"ps":5,"e":4.119244726201155,"pr":0.4},{"t":135,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":6.8229114020918855,"pr":0.3},{"t":135,"r":1068,"c":31,"a":"extend","s":0.35055021377249673,"ps":4,"e":6.151152734536109,"pr":0.45},{"t":136,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":6.888051786485769,"pr":0.3},{"t":136,"r":1068,"c":31,"a":"extend","s":0.3165875343549503,"ps":4,"e":5.6586971065629985,"pr":0.45},{"t":137,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":137,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.322452559092078,"pr":0.3},{"t":137,"r":1068,"c":33,"a":"hold","s":0.15674193685367366,"ps":5,"e":4.7222841313430495,"pr":0.4},{"t":138,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":6.9655688439144905,"pr":0.3},{"t":138,"r":1068,"c":33,"a":"retracted","s":0.15674193685367366,"ps":4,"e":5.376219626172439,"pr":0.35000000000000003},{"t":140,"r":1068,"c":31,"a":"extend","s":0.3165875343549503,"ps":4,"e":4.785524032603874,"pr":0.3},{"t":141,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.322631299939903,"pr":0.3},{"t":141,"r":1068,"c":30,"a":"extend","s":0.29947845435597575,"ps":5,"e":2.5877365541746262,"pr":0.4},{"t":142,"r":1068,"c":30,"a":"extend","s":0.3090339062927637,"ps":4,"e":3.122005463161715,"pr":0.35000000000000003},{"t":143,"r":1068,"c":30,"a":"extend","s":0.29947845435597575,"ps":4,"e":3.442483168606664,"pr":0.30000000000000004},{"t":144,"r":1068,"c":30,"a":"extend","s":0.29947845435597575,"ps":4,"e":3.6668175624181285,"pr":0.3},{"t":144,"r":1068,"c":29,"a":"extend","s":0.3601517881229703,"ps":5,"e":3.1105576920913136,"pr":0.45000000000000007},{"t":145,"r":1068,"c":33,"a":"extend","s":0.25627414020780864,"ps":4,"e":3.323661056337255,"pr":0.30000000000000004},{"t":145,"r":1068,"c":28,"a":"extend","s":0.4203536305242958,"ps":5,"e":2.7621476385634507,"pr":0.55},{"t":146,"r":1068,"c":29,"a":"extend","s":0.3394353396272245,"ps":4,"e":4.122806180479244,"pr":0.4000000000000001},{"t":146,"r":1068,"c":28,"a":"extend","s":0.49211459554029285,"ps":5,"e":4.164345082020056,"pr":0.55},{"t":147,"r":1068,"c":31,"a":"extend","s":0.3165875343549503,"ps":4,"e":4.532354707227486,"pr":0.3},{"t":147,"r":1068,"c":28,"a":"extend","s":0.49211459554029285,"ps":4,"e":5.250883292439679,"pr":0.5},{"t":148,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":148,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.037942220944346,"pr":0.3},{"t":148,"r":1068,"c":33,"a":"retracted","s":0.25627414020780864,"ps":4,"e":7.6742404213246616,"pr":0.3},{"t":149,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.038573359682491,"pr":0.3},{"t":149,"r":1068,"c":29,"a":"hold","s":0.3394353396272245,"ps":4,"e":8.59776766228352,"pr":0.3},{"t":150,"r":1068,"c":31,"a":"retracted","s":0.3165875343549503,"ps":4,"e":10.330455531746294,"pr":0.3},{"t":150,"r":1068,"c":27,"a":"hold","s":0.3727831221227223,"ps":4,"e":6.155027338961326,"pr":0.5499999999999999},{"t":151,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.322686180076622,"pr":0.3},{"t":151,"r":1068,"c":27,"a":"hold","s":0.376273312928564,"ps":4,"e":8.565213842389838,"pr":0.5499999999999999},{"t":152,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.039540895368068,"pr":0.3},{"t":152,"r":1068,"c":33,"a":"retracted","s":0.24607480776604282,"ps":4,"e":6.81722106663225,"pr":0.35000000000000003},{"t":152,"r":1068,"c":29,"a":"hold","s":0.29347625997015153,"ps":5,"e":4.237599761236554,"pr":0.45000000000000007},{"t":153,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":154,"r":1068,"c":29,"a":"retracted","s":0.2874227620002312,"ps":4,"e":7.486363953240254,"pr":0.4000000000000001},{"t":154,"r":1068,"c":37,"a":"hold","s":0.23549577490995946,"ps":5,"e":3.913367031359387,"pr":0.4},{"t":154,"r":1068,"c":27,"a":"hold","s":0.21326946477241615,"ps":5,"e":3.6586954746413736,"pr":0.4},{"t":155,"r":1068,"c":27,"a":"hold","s":0.21255306904817817,"ps":4,"e":4.759120027026799,"pr":0.35000000000000003},{"t":156,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":156,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.322687507247106,"pr":0.3},{"t":156,"r":1068,"c":29,"a":"extend","s":0.41752549261133554,"ps":5,"e":3.7264438638673485,"pr":0.4},{"t":157,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.322687587683276,"pr":0.3},{"t":158,"r":1068,"c":37,"a":"hold","s":0.22170882940566292,"ps":5,"e":3.803071467325015,"pr":0.4},{"t":158,"r":1068,"c":27,"a":"hold","s":0.2201675072422844,"ps":5,"e":3.759693644148111,"pr":0.4},{"t":159,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.322687683402319,"pr":0.3},{"t":159,"r":1068,"c":33,"a":"extend","s":0.285721328128871,"ps":4,"e":4.652144934053675,"pr":0.30000000000000004},{"t":159,"r":1068,"c":29,"a":"extend","s":0.41752549261133554,"ps":4,"e":5.378615774213663,"pr":0.3},{"t":159,"r":1068,"c":31,"a":"extend","s":0.24622876267132068,"ps":4,"e":5.038451005397486,"pr":0.35000000000000003},{"t":160,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.04001689749637,"pr":0.3},{"t":161,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":161,"r":1068,"c":33,"a":"extend","s":0.285721328128871,"ps":4,"e":4.285618061473152,"pr":0.3},{"t":161,"r":1068,"c":27,"a":"extend","s":0.2201675072422844,"ps":4,"e":4.14223345385856,"pr":0.3},{"t":161,"r":1068,"c":30,"a":"hold","s":0.20588469606241286,"ps":4,"e":4.133555518331946,"pr":0.30000000000000004},{"t":162,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":162,"r":1068,"c":33,"a":"extend","s":0.285721328128871,"ps":4,"e":4.179972080552884,"pr":0.3},{"t":162,"r":1068,"c":29,"a":"extend","s":0.41752549261133554,"ps":4,"e":6.0455978519407045,"pr":0.3},{"t":162,"r":1068,"c":31,"a":"extend","s":0.29262704327670247,"ps":4,"e":4.3971667535968155,"pr":0.3},{"t":162,"r":1068,"c":27,"a":"extend","s":0.2201675072422844,"ps":4,"e":3.7125014582577838,"pr":0.3},{"t":162,"r":1068,"c":30,"a":"extend","s":0.20588469606241286,"ps":4,"e":3.6264431607818737,"pr":0.3},{"t":163,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":163,"r":1068,"c":33,"a":"extend","s":0.285721328128871,"ps":4,"e":4.106019893908696,"pr":0.3},{"t":163,"r":1068,"c":31,"a":"extend","s":0.29262704327670247,"ps":4,"e":4.296728169867304,"pr":0.3},{"t":163,"r":1068,"c":27,"a":"extend","s":0.2201675072422844,"ps":4,"e":3.411689061337241,"pr":0.3},{"t":164,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.322687759911057,"pr":0.3},{"t":164,"r":1068,"c":33,"a":"extend","s":0.285721328128871,"ps":4,"e":4.054253363257764,"pr":0.3},{"t":164,"r":1068,"c":29,"a":"extend","s":0.41752549261133554,"ps":4,"e":6.223185637110859,"pr":0.3},{"t":165,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":165,"r":1068,"c":31,"a":"extend","s":0.29262704327670247,"ps":4,"e":4.177206255229186,"pr":0.3},{"t":165,"r":1068,"c":27,"a":"hold","s":0.2201675072422844,"ps":4,"e":4.362460441431136,"pr":0.3},{"t":165,"r":1068,"c":26,"a":"hold","s":0.1258067055529226,"ps":5,"e":2.358928707005382,"pr":0.4},{"t":166,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.322687767793932,"pr":0.3},{"t":166,"r":1068,"c":31,"a":"extend","s":0.29262704327670247,"ps":4,"e":4.142755821009964,"pr":0.3},{"t":166,"r":1068,"c":27,"a":"hold","s":0.2201675072422844,"ps":4,"e":5.523800499369411,"pr":0.3},{"t":167,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":167,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.322687770066055,"pr":0.3},{"t":167,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.040043618643389,"pr":0.3},{"t":167,"r":1068,"c":33,"a":"extend","s":0.285721328128871,"ps":4,"e":3.9748952717698867,"pr":0.3},{"t":168,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":168,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.040044338071821,"pr":0.3},{"t":168,"r":1068,"c":30,"a":"hold","s":0.25402389246435436,"ps":5,"e":3.9973134175353104,"pr":0.4},{"t":169,"r":1068,"c":31,"a":"hold","s":0.29262704327670247,"ps":4,"e":7.600673209483748,"pr":0.3},{"t":169,"r":1068,"c":37,"a":"hold","s":0.1094870589680165,"ps":4,"e":3.1831679583303787,"pr":0.35000000000000003},{"t":169,"r":1068,"c":27,"a":"hold","s":0.3146731281780329,"ps":5,"e":4.529927842516729,"pr":0.4},{"t":170,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":170,"r":1068,"c":27,"a":"hold","s":0.32139937397715884,"ps":5,"e":6.351122834333999,"pr":0.4},{"t":172,"r":1068,"c":29,"a":"extend","s":0.41752549261133554,"ps":4,"e":6.383973086816438,"pr":0.3},{"t":173,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":174,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.322687774931062,"pr":0.3},{"t":174,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.040045819244747,"pr":0.3},{"t":174,"r":1068,"c":29,"a":"extend","s":0.41752549261133554,"ps":4,"e":6.388989502199967,"pr":0.3},{"t":174,"r":1068,"c":31,"a":"extend","s":0.512156534106277,"ps":4,"e":6.540583111621869,"pr":0.35000000000000003},{"t":175,"r":1068,"c":30,"a":"retracted","s":0.21723810971783478,"ps":4,"e":6.165087693524754,"pr":0.30000000000000004},{"t":175,"r":1068,"c":27,"a":"hold","s":0.32587740517380703,"ps":4,"e":6.8717510469786784,"pr":0.35000000000000003},{"t":176,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.322687775153734,"pr":0.3},{"t":176,"r":1068,"c":33,"a":"hold","s":0.1998095728911052,"ps":5,"e":3.865639102482887,"pr":0.4},{"t":177,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":177,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.040045948997922,"pr":0.3},{"t":178,"r":1068,"c":28,"a":"extend","s":0.4203536305242958,"ps":4,"e":6.446582237636749,"pr":0.3},{"t":178,"r":1068,"c":30,"a":"hold","s":0.0975086974723802,"ps":5,"e":3.5411849914612192,"pr":0.4},{"t":179,"r":1068,"c":31,"a":"extend","s":0.3422049398799577,"ps":4,"e":6.986842100035309,"pr":0.3},{"t":180,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.322687775316306,"pr":0.3},{"t":180,"r":1068,"c":28,"a":"extend","s":0.4203536305242958,"ps":4,"e":6.446591859033302,"pr":0.3},{"t":180,"r":1068,"c":31,"a":"extend","s":0.3422049398799577,"ps":4,"e":6.3871371333524785,"pr":0.3},{"t":180,"r":1068,"c":37,"a":"extend","s":0.3157578540753739,"ps":4,"e":4.66361753384352,"pr":0.35000000000000003},{"t":180,"r":1068,"c":38,"a":"hold","s":0.23775708381902114,"ps":5,"e":4.335913655616644,"pr":0.5},{"t":181,"r":1068,"c":28,"a":"extend","s":0.4203536305242958,"ps":4,"e":6.446594632259368,"pr":0.3},{"t":181,"r":1068,"c":33,"a":"extend","s":0.23954135799921208,"ps":4,"e":3.1379171889190283,"pr":0.35000000000000003},{"t":182,"r":1068,"c":28,"a":"extend","s":0.4203536305242958,"ps":4,"e":6.446596573517614,"pr":0.3},{"t":182,"r":1068,"c":37,"a":"extend","s":0.3157578540753739,"ps":4,"e":4.577187362380883,"pr":0.3},{"t":182,"r":1068,"c":27,"a":"extend","s":0.25594848064994136,"ps":5,"e":2.8422898813174813,"pr":0.4},{"t":183,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.0400460087685905,"pr":0.3},{"t":184,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":184,"r":1068,"c":28,"a":"extend","s":0.4203536305242958,"ps":4,"e":6.446598883614926,"pr":0.3},{"t":184,"r":1068,"c":33,"a":"extend","s":0.2705986936979462,"ps":4,"e":3.7292975307595553,"pr":0.30000000000000004},{"t":184,"r":1068,"c":27,"a":"extend","s":0.3418363305447771,"ps":6,"e":3.3763324392754894,"pr":0.5},{"t":184,"r":1068,"c":30,"a":"hold","s":0.13699255880170588,"ps":5,"e":2.689278793025519,"pr":0.4},{"t":185,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":186,"r":1068,"c":28,"a":"extend","s":0.4203536305242958,"ps":4,"e":6.446600015562609,"pr":0.3},{"t":187,"r":1068,"c":37,"a":"extend","s":0.3157578540753739,"ps":4,"e":4.508103268759302,"pr":0.3},{"t":188,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":188,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.040046015398717,"pr":0.3},{"t":188,"r":1068,"c":28,"a":"extend","s":0.4203536305242958,"ps":4,"e":6.446600570216972,"pr":0.3},{"t":188,"r":1068,"c":31,"a":"extend","s":0.3422049398799577,"ps":4,"e":5.068493072897432,"pr":0.3},{"t":188,"r":1068,"c":27,"a":"hold","s":0.25594848064994136,"ps":5,"e":5.118284204092453,"pr":0.5},{"t":189,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":190,"r":1068,"c":28,"a":"extend","s":0.4203536305242958,"ps":4,"e":6.446600841997611,"pr":0.3},{"t":190,"r":1068,"c":31,"a":"hold","s":0.3422049398799577,"ps":4,"e":7.181932333395627,"pr":0.3},{"t":190,"r":1068,"c":33,"a":"retracted","s":0.2705986936979462,"ps":4,"e":8.372340081312847,"pr":0.3},{"t":190,"r":1068,"c":30,"a":"retracted","s":0.15572051150052293,"ps":4,"e":4.593339018488101,"pr":0.30000000000000004},{"t":191,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.040046016278733,"pr":0.3},{"t":191,"r":1068,"c":37,"a":"hold","s":0.3157578540753739,"ps":4,"e":8.353111037695598,"pr":0.3},{"t":192,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.322687775366962,"pr":0.3},{"t":193,"r":1068,"c":33,"a":"hold","s":0.17335826623786635,"ps":4,"e":4.433865888412615,"pr":0.35000000000000003},{"t":194,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":194,"r":1068,"c":30,"a":"retracted","s":0.258266040438439,"ps":5,"e":5.823279658075405,"pr":0.45},{"t":196,"r":1068,"c":37,"a":"hold","s":0.2149911402829678,"ps":5,"e":3.7493299543434544,"pr":0.4},{"t":197,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.3226877753675526,"pr":0.3},{"t":197,"r":1068,"c":29,"a":"extend","s":0.41752549261133554,"ps":4,"e":6.3938078763219375,"pr":0.3},{"t":198,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":198,"r":1068,"c":37,"a":"retracted","s":0.2244171980044535,"ps":4,"e":5.99000512241471,"pr":0.35000000000000003},{"t":198,"r":1068,"c":30,"a":"hold","s":0.19792548112700722,"ps":5,"e":4.734955252010473,"pr":0.4},{"t":199,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":199,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.322687775367615,"pr":0.3},{"t":199,"r":1068,"c":30,"a":"retracted","s":0.19792548112700722,"ps":4,"e":5.718359101026531,"pr":0.35000000000000003},{"t":200,"r":1068,"c":33,"a":"extend","s":0.3141153790509021,"ps":4,"e":4.9756952382241115,"pr":0.4},{"t":201,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":201,"r":1068,"c":28,"a":"extend","s":0.4203536305242958,"ps":4,"e":6.446601097956941,"pr":0.3},{"t":202,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.322687775367654,"pr":0.3},{"t":202,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.04004601672908,"pr":0.3},{"t":202,"r":1068,"c":30,"a":"hold","s":0.14238021223998906,"ps":5,"e":2.2048534359321845,"pr":0.5},{"t":204,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.040046016733712,"pr":0.3},{"t":204,"r":1068,"c":33,"a":"extend","s":0.22458739926239707,"ps":4,"e":3.9365289973387863,"pr":0.35000000000000003},{"t":205,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":205,"r":1068,"c":38,"a":"extend","s":0.2738912192079979,"ps":5,"e":2.4049068050598867,"pr":0.45000000000000007},{"t":205,"r":1068,"c":30,"a":"extend","s":0.23646595491938385,"ps":5,"e":2.7173520735822168,"pr":0.4},{"t":207,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":207,"r":1068,"c":27,"a":"hold","s":0.22275772577213993,"ps":4,"e":3.9514210350936496,"pr":0.3},{"t":208,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.3226877753676725,"pr":0.3},{"t":208,"r":1068,"c":27,"a":"hold","s":0.22275772577213993,"ps":4,"e":5.133482841270769,"pr":0.3},{"t":209,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":209,"r":1068,"c":31,"a":"extend","s":0.34193634114160015,"ps":4,"e":4.934697983071576,"pr":0.3},{"t":209,"r":1068,"c":38,"a":"hold","s":0.2749322376347479,"ps":4,"e":4.873453343003071,"pr":0.3000000000000001},{"t":211,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":211,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":211,"r":1068,"c":31,"a":"hold","s":0.34193634114160015,"ps":4,"e":7.084622827675865,"pr":0.3},{"t":212,"r":1068,"c":28,"a":"extend","s":0.4203536305242958,"ps":4,"e":6.446601103018092,"pr":0.3},{"t":212,"r":1068,"c":33,"a":"hold","s":0.35629729578660935,"ps":4,"e":7.213952008097376,"pr":0.35000000000000003},{"t":214,"r":1068,"c":28,"a":"extend","s":0.4203536305242958,"ps":4,"e":6.44660110307016,"pr":0.3},{"t":215,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":215,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":215,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.040046016738074,"pr":0.3},{"t":215,"r":1068,"c":37,"a":"retracted","s":0.27690366431218166,"ps":4,"e":7.110127225602977,"pr":0.35000000000000003},{"t":216,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.040046016738102,"pr":0.3},{"t":216,"r":1068,"c":29,"a":"extend","s":0.41752549261133554,"ps":4,"e":6.393809193907979,"pr":0.3},{"t":216,"r":1068,"c":31,"a":"hold","s":0.2741541863776665,"ps":5,"e":6.22805465860154,"pr":0.4},{"t":217,"r":1068,"c":37,"a":"hold","s":0.20033852180487316,"ps":5,"e":3.632109006518697,"pr":0.4},{"t":218,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":218,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.040046016738134,"pr":0.3},{"t":218,"r":1068,"c":28,"a":"extend","s":0.4203536305242958,"ps":4,"e":6.446601103108175,"pr":0.3},{"t":219,"r":1068,"c":33,"a":"extend","s":0.35626585972314134,"ps":4,"e":4.888326986332576,"pr":0.35000000000000003},{"t":220,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.3226877753676725,"pr":0.3},{"t":220,"r":1068,"c":33,"a":"extend","s":0.3377325430972091,"ps":4,"e":4.893131131777174,"pr":0.35000000000000003},{"t":220,"r":1068,"c":33,"a":"extend","s":0.32595574505111685,"ps":4,"e":5.767242240951856,"pr":0.35000000000000003},{"t":222,"r":1068,"c":30,"a":"hold","s":0.20309386085848213,"ps":5,"e":2.237749698354241,"pr":0.5},{"t":223,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":223,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.040046016738159,"pr":0.3},{"t":223,"r":1068,"c":27,"a":"extend","s":0.24275736846289236,"ps":5,"e":3.345394475087957,"pr":0.45},{"t":224,"r":1068,"c":33,"a":"extend","s":0.32595574505111685,"ps":4,"e":4.944471914453621,"pr":0.3},{"t":225,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.3226877753676725,"pr":0.3},{"t":225,"r":1068,"c":28,"a":"extend","s":0.4203536305242958,"ps":4,"e":6.446601103119198,"pr":0.3},{"t":225,"r":1068,"c":27,"a":"extend","s":0.2591079767331828,"ps":5,"e":3.2212116737466037,"pr":0.5},{"t":226,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":226,"r":1068,"c":30,"a":"hold","s":0.20309386085848213,"ps":4,"e":3.701580158965159,"pr":0.4},{"t":227,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":227,"r":1068,"c":31,"a":"extend","s":0.28452084912740216,"ps":4,"e":3.7819315239224975,"pr":0.3},{"t":229,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":229,"r":1068,"c":28,"a":"extend","s":0.4203536305242958,"ps":4,"e":6.44660110311995,"pr":0.3},{"t":230,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":230,"r":1068,"c":31,"a":"hold","s":0.28452084912740216,"ps":4,"e":5.523951723434109,"pr":0.3},{"t":231,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.040046016738161,"pr":0.3},{"t":231,"r":1068,"c":33,"a":"extend","s":0.3377325430972091,"ps":4,"e":4.904119152625055,"pr":0.3},{"t":231,"r":1068,"c":25,"a":"hold","s":0.2657859182544707,"ps":4,"e":4.52760946247029,"pr":0.6499999999999999},{"t":232,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.040046016738161,"pr":0.3},{"t":232,"r":1068,"c":31,"a":"retracted","s":0.28452084912740216,"ps":4,"e":8.876285309472543,"pr":0.3},{"t":233,"r":1068,"c":33,"a":"hold","s":0.3377325430972091,"ps":4,"e":9.107839842180402,"pr":0.3},{"t":233,"r":1068,"c":26,"a":"hold","s":0.33512494229765694,"ps":4,"e":8.412662780096056,"pr":0.3},{"t":233,"r":1068,"c":24,"a":"retracted","s":0.2544068186208311,"ps":4,"e":5.513620477718151,"pr":0.6499999999999998},{"t":234,"r":1068,"c":33,"a":"retracted","s":0.3377325430972091,"ps":4,"e":11.209700186958075,"pr":0.3},{"t":235,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":236,"r":1068,"c":28,"a":"extend","s":0.4203536305242958,"ps":4,"e":6.446601103120167,"pr":0.3},{"t":236,"r":1068,"c":37,"a":"retracted","s":0.15271322682943755,"ps":4,"e":4.5314626034698975,"pr":0.35000000000000003},{"t":237,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":237,"r":1068,"c":29,"a":"extend","s":0.41752549261133554,"ps":4,"e":6.393809195410756,"pr":0.3},{"t":237,"r":1068,"c":27,"a":"retracted","s":0.3238916078594615,"ps":4,"e":7.934590478952266,"pr":0.35000000000000003},{"t":238,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":238,"r":1068,"c":28,"a":"extend","s":0.4203536305242958,"ps":4,"e":6.446601103120177,"pr":0.3},{"t":240,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":240,"r":1068,"c":37,"a":"hold","s":0.24258776220021475,"ps":5,"e":3.9701029296814294,"pr":0.4},{"t":241,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.040046016738161,"pr":0.3},{"t":241,"r":1068,"c":33,"a":"hold","s":0.12100034498307646,"ps":5,"e":3.2351653384666808,"pr":0.4},{"t":242,"r":1068,"c":37,"a":"retracted","s":0.21928039943239064,"ps":4,"e":6.12858932059968,"pr":0.35000000000000003},{"t":243,"r":1068,"c":27,"a":"extend","s":0.39472509458256944,"ps":5,"e":3.6194408605984436,"pr":0.4},{"t":244,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":244,"r":1068,"c":33,"a":"extend","s":0.27551667556175075,"ps":4,"e":3.4208189415623402,"pr":0.4},{"t":245,"r":1068,"c":31,"a":"extend","s":0.33778987521532383,"ps":4,"e":4.4191981739711235,"pr":0.3},{"t":245,"r":1068,"c":37,"a":"hold","s":0.16042579373229526,"ps":5,"e":3.3128071819380738,"pr":0.4},{"t":246,"r":1068,"c":31,"a":"extend","s":0.33778987521532383,"ps":4,"e":4.565062022985599,"pr":0.3},{"t":246,"r":1068,"c":30,"a":"hold","s":0.17246820247987216,"ps":5,"e":2.716400778555385,"pr":0.4},{"t":247,"r":1068,"c":27,"a":"extend","s":0.39472509458256944,"ps":4,"e":5.3493937432059315,"pr":0.3},{"t":247,"r":1068,"c":37,"a":"retracted","s":0.16042579373229526,"ps":4,"e":4.596611634588285,"pr":0.30000000000000004},{"t":248,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.3226877753676725,"pr":0.3},{"t":249,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":249,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":249,"r":1068,"c":28,"a":"extend","s":0.4203536305242958,"ps":4,"e":6.446601103120184,"pr":0.3},{"t":249,"r":1068,"c":29,"a":"extend","s":0.41752549261133554,"ps":4,"e":6.393809195411584,"pr":0.3},{"t":249,"r":1068,"c":30,"a":"extend","s":0.24078728297752364,"ps":4,"e":3.2914066691592625,"pr":0.30000000000000004},{"t":250,"r":1068,"c":27,"a":"extend","s":0.39472509458256944,"ps":4,"e":5.755950613880265,"pr":0.3},{"t":250,"r":1068,"c":30,"a":"hold","s":0.24078728297752364,"ps":4,"e":4.617704932979452,"pr":0.3},{"t":251,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":251,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.3226877753676725,"pr":0.3},{"t":251,"r":1068,"c":37,"a":"hold","s":0.1398590194340488,"ps":5,"e":3.148272987552102,"pr":0.4},{"t":252,"r":1068,"c":31,"a":"extend","s":0.33778987521532383,"ps":4,"e":4.865369286749734,"pr":0.3},{"t":252,"r":1068,"c":27,"a":"extend","s":0.39472509458256944,"ps":4,"e":5.864198701227391,"pr":0.3},{"t":252,"r":1068,"c":26,"a":"hold","s":0.25671336150407387,"ps":4,"e":5.228963945735,"pr":0.35000000000000003},{"t":253,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":253,"r":1068,"c":33,"a":"hold","s":0.27053888330431497,"ps":5,"e":4.124034398734951,"pr":0.4},{"t":255,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":255,"r":1068,"c":37,"a":"hold","s":0.2265103122919973,"ps":5,"e":3.84148333041569,"pr":0.4},{"t":256,"r":1068,"c":29,"a":"extend","s":0.41752549261133554,"ps":4,"e":6.393809195411594,"pr":0.3},{"t":257,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":257,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.040046016738161,"pr":0.3},{"t":257,"r":1068,"c":33,"a":"hold","s":0.3140162507275513,"ps":5,"e":4.77929258442248,"pr":0.4},{"t":258,"r":1068,"c":30,"a":"hold","s":0.12505534328696916,"ps":5,"e":2.9906466871864366,"pr":0.4},{"t":259,"r":1068,"c":29,"a":"extend","s":0.41752549261133554,"ps":4,"e":6.393809195411594,"pr":0.3},{"t":260,"r":1068,"c":28,"a":"extend","s":0.4203536305242958,"ps":4,"e":6.446601103120184,"pr":0.3},{"t":260,"r":1068,"c":37,"a":"hold","s":0.17215448158194707,"ps":5,"e":3.812631120741823,"pr":0.4},{"t":261,"r":1068,"c":28,"a":"extend","s":0.4203536305242958,"ps":4,"e":6.446601103120184,"pr":0.3},{"t":262,"r":1068,"c":27,"a":"extend","s":0.39472509458256944,"ps":4,"e":6.8219853421935746,"pr":0.3},{"t":262,"r":1068,"c":31,"a":"extend","s":0.41157346648309806,"ps":4,"e":6.857039491888632,"pr":0.30000000000000004},{"t":263,"r":1068,"c":28,"a":"extend","s":0.4203536305242958,"ps":4,"e":6.446601103120184,"pr":0.3},{"t":263,"r":1068,"c":27,"a":"extend","s":0.39472509458256944,"ps":4,"e":6.56585026919789,"pr":0.3},{"t":264,"r":1068,"c":28,"a":"extend","s":0.4203536305242958,"ps":4,"e":6.446601103120184,"pr":0.3},{"t":264,"r":1068,"c":29,"a":"extend","s":0.41752549261133554,"ps":4,"e":6.393809195411594,"pr":0.3},{"t":266,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":266,"r":1068,"c":28,"a":"extend","s":0.4203536305242958,"ps":4,"e":6.446601103120184,"pr":0.3},{"t":267,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":267,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.3226877753676725,"pr":0.3},{"t":267,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.040046016738161,"pr":0.3},{"t":267,"r":1068,"c":30,"a":"hold","s":0.16857052269929446,"ps":4,"e":4.46578861955784,"pr":0.4},{"t":267,"r":1068,"c":33,"a":"extend","s":0.255797971501484,"ps":6,"e":2.8654067757862918,"pr":0.5},{"t":267,"r":1068,"c":37,"a":"hold","s":0.17712589580760477,"ps":5,"e":3.4464079985405496,"pr":0.4},{"t":268,"r":1068,"c":31,"a":"extend","s":0.41157346648309806,"ps":4,"e":6.3502746207113265,"pr":0.3},{"t":269,"r":1068,"c":29,"a":"extend","s":0.41752549261133554,"ps":4,"e":6.393809195411594,"pr":0.3},{"t":270,"r":1068,"c":29,"a":"extend","s":0.41752549261133554,"ps":4,"e":6.393809195411594,"pr":0.3},{"t":270,"r":1068,"c":33,"a":"extend","s":0.23915670964908017,"ps":4,"e":2.9167660337540133,"pr":0.4},{"t":271,"r":1068,"c":29,"a":"extend","s":0.41752549261133554,"ps":4,"e":6.393809195411594,"pr":0.3},{"t":271,"r":1068,"c":27,"a":"extend","s":0.39472509458256944,"ps":4,"e":6.002655012456576,"pr":0.3},{"t":271,"r":1068,"c":30,"a":"extend","s":0.31291444267443913,"ps":4,"e":3.485186320479283,"pr":0.35000000000000003},{"t":273,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":273,"r":1068,"c":27,"a":"extend","s":0.39472509458256944,"ps":4,"e":5.9850838565297835,"pr":0.3},{"t":273,"r":1068,"c":26,"a":"retracted","s":0.25191466299454607,"ps":4,"e":7.361087721148064,"pr":0.3},{"t":273,"r":1068,"c":30,"a":"hold","s":0.3004248751188747,"ps":4,"e":5.5054087259521935,"pr":0.3},{"t":274,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":274,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.3226877753676725,"pr":0.3},{"t":274,"r":1068,"c":33,"a":"hold","s":0.2874661330514131,"ps":4,"e":6.965121215614383,"pr":0.35000000000000003},{"t":275,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.040046016738161,"pr":0.3},{"t":276,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":277,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":277,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.3226877753676725,"pr":0.3},{"t":277,"r":1068,"c":29,"a":"extend","s":0.41752549261133554,"ps":4,"e":6.393809195411594,"pr":0.3},{"t":277,"r":1068,"c":27,"a":"hold","s":0.39472509458256944,"ps":4,"e":8.531793079410901,"pr":0.3},{"t":277,"r":1068,"c":33,"a":"hold","s":0.22572876408757833,"ps":5,"e":4.072992691302696,"pr":0.4},{"t":278,"r":1068,"c":31,"a":"extend","s":0.41157346648309806,"ps":4,"e":6.284613390485212,"pr":0.3},{"t":278,"r":1068,"c":30,"a":"hold","s":0.18092739536402325,"ps":5,"e":3.3911754760835313,"pr":0.4},{"t":279,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":279,"r":1068,"c":27,"a":"extend","s":0.39472509458256944,"ps":4,"e":9.553176214912407,"pr":0.3},{"t":279,"r":1068,"c":30,"a":"hold","s":0.16654643358955679,"ps":5,"e":3.9735469447999856,"pr":0.4},{"t":281,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.040046016738161,"pr":0.3},{"t":281,"r":1068,"c":27,"a":"extend","s":0.39472509458256944,"ps":4,"e":7.724839245733138,"pr":0.3},{"t":281,"r":1068,"c":33,"a":"hold","s":0.2890401812732849,"ps":5,"e":4.5794840287883485,"pr":0.4},{"t":282,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":282,"r":1068,"c":29,"a":"extend","s":0.41752549261133554,"ps":4,"e":6.393809195411594,"pr":0.3},{"t":282,"r":1068,"c":27,"a":"extend","s":0.39472509458256944,"ps":4,"e":7.197848001675585,"pr":0.3},{"t":282,"r":1068,"c":30,"a":"hold","s":0.21501239658120344,"ps":5,"e":3.662967480886116,"pr":0.4},{"t":283,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":283,"r":1068,"c":27,"a":"extend","s":0.39472509458256944,"ps":4,"e":6.828954130835298,"pr":0.3},{"t":284,"r":1068,"c":30,"a":"retracted","s":0.21501239658120344,"ps":4,"e":5.952248100757058,"pr":0.30000000000000004},{"t":285,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.040046016738161,"pr":0.3},{"t":286,"r":1068,"c":33,"a":"extend","s":0.2704230557568626,"ps":6,"e":3.1267541373015333,"pr":0.5},{"t":286,"r":1068,"c":33,"a":"extend","s":0.2535578357131489,"ps":4,"e":3.13253363008913,"pr":0.35000000000000003},{"t":287,"r":1068,"c":31,"a":"extend","s":0.41157346648309806,"ps":4,"e":6.282781729920123,"pr":0.3},{"t":288,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":288,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.3226877753676725,"pr":0.3},{"t":288,"r":1068,"c":27,"a":"extend","s":0.39472509458256944,"ps":4,"e":6.112868415576258,"pr":0.3},{"t":289,"r":1068,"c":31,"a":"extend","s":0.41157346648309806,"ps":4,"e":6.282742448579953,"pr":0.3},{"t":289,"r":1068,"c":33,"a":"extend","s":0.26063777718889863,"ps":4,"e":3.351120734565224,"pr":0.3},{"t":290,"r":1068,"c":35,"a":"extend","s":0.43084885831684,"ps":4,"e":6.642512021914347,"pr":0.3},{"t":290,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.040046016738161,"pr":0.3},{"t":290,"r":1068,"c":33,"a":"extend","s":0.2704230557568626,"ps":4,"e":3.8283482886079234,"pr":0.4},{"t":290,"r":1068,"c":33,"a":"extend","s":0.26063777718889863,"ps":4,"e":3.385356066453489,"pr":0.3},{"t":290,"r":1068,"c":25,"a":"extend","s":0.2669838242156837,"ps":5,"e":2.623004217269154,"pr":0.4},{"t":291,"r":1068,"c":28,"a":"extend","s":0.4203536305242958,"ps":4,"e":6.446601103120184,"pr":0.3},{"t":291,"r":1068,"c":37,"a":"hold","s":0.19299418688972877,"ps":5,"e":3.5482744338942487,"pr":0.4},{"t":292,"r":1068,"c":33,"a":"hold","s":0.26063777718889863,"ps":4,"e":4.8944230162864635,"pr":0.3},{"t":292,"r":1068,"c":30,"a":"retracted","s":0.15252403402891718,"ps":4,"e":3.6834863787616405,"pr":0.35000000000000003},{"t":293,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":293,"r":1068,"c":31,"a":"extend","s":0.41157346648309806,"ps":4,"e":6.282713769273494,"pr":0.3},{"t":294,"r":1068,"c":34,"a":"extend","s":0.413715416537554,"ps":4,"e":6.3226877753676725,"pr":0.3},{"t":294,"r":1068,"c":28,"a":"extend","s":0.4203536305242958,"ps":4,"e":6.446601103120184,"pr":0.3},{"t":294,"r":1068,"c":33,"a":"extend","s":0.3270715796520131,"ps":4,"e":4.311362215109772,"pr":0.45},{"t":295,"r":1068,"c":32,"a":"extend","s":0.4521453223252589,"ps":4,"e":7.040046016738161,"pr":0.3},{"t":296,"r":1068,"c":27,"a":"extend","s":0.39472509458256944,"ps":4,"e":5.976541510029176,"pr":0.3},{"t":296,"r":1068,"c":31,"a":"extend","s":0.41157346648309806,"ps":4,"e":6.2827078158095215,"pr":0.3},{"t":296,"r":1068,"c":33,"a":"hold","s":0.3270715796520131,"ps":4,"e":8.344507489541982,"pr":0.35000000000000003},{"t":296,"r":1068,"c":26,"a":"hold","s":0.18223883281964953,"ps":5,"e":3.2708173852307403,"pr":0.4},{"t":297,"r":1068,"c":37,"a":"hold","s":0.19147492182201173,"ps":5,"e":3.5612002066558057,"pr":0.4},{"t":298,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"pr":0.3},{"t":298,"r":1068,"c":28,"a":"extend","s":0.4203536305242958,"ps":4,"e":6.446601103120184,"pr":0.3},{"t":298,"r":1068,"c":27,"a":"hold","s":0.39472509458256944,"ps":4,"e":8.531840343343367,"pr":0.3},{"t":298,"r":1068,"c":31,"a":"extend","s":0.41157346648309806,"ps":4,"e":6.282706230665759,"pr":0.3},{"t":299,"r":1068,"c":36,"a":"extend","s":0.4224251040099642,"ps":4,"e":6.485268608185994,"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> |